From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp11.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id QN4QOnl9PGPZBQAAbAwnHQ (envelope-from ) for ; Tue, 04 Oct 2022 20:37:46 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp11.migadu.com with LMTPS id 4HwOOnl9PGNc3gAA9RJhRA (envelope-from ) for ; Tue, 04 Oct 2022 20:37:45 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 7470428DA4 for ; Tue, 4 Oct 2022 20:37:45 +0200 (CEST) Received: from localhost ([::1]:40706 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ofmnY-0000mi-Fa for larch@yhetil.org; Tue, 04 Oct 2022 14:37:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49604) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ofmjy-0005ws-N1 for guix-patches@gnu.org; Tue, 04 Oct 2022 14:34:10 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:56102) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ofmjy-0003Si-Cf for guix-patches@gnu.org; Tue, 04 Oct 2022 14:34:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ofmjy-0006Jj-0d for guix-patches@gnu.org; Tue, 04 Oct 2022 14:34:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#56677] [PATCH v2 1/2] environment: Add --emulate-fhs option. Resent-From: John Kehayias Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Tue, 04 Oct 2022 18:34:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 56677 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Ludovic =?UTF-8?Q?Court=C3=A8s?= Cc: 56677@debbugs.gnu.org Received: via spool by 56677-submit@debbugs.gnu.org id=B56677.166490838524218 (code B ref 56677); Tue, 04 Oct 2022 18:34:01 +0000 Received: (at 56677) by debbugs.gnu.org; 4 Oct 2022 18:33:05 +0000 Received: from localhost ([127.0.0.1]:55180 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ofmj2-0006IX-6q for submit@debbugs.gnu.org; Tue, 04 Oct 2022 14:33:05 -0400 Received: from mail-4322.protonmail.ch ([185.70.43.22]:24749) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ofmiz-0006I1-FK for 56677@debbugs.gnu.org; Tue, 04 Oct 2022 14:33:03 -0400 Date: Tue, 04 Oct 2022 18:32:44 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1664908374; x=1665167574; bh=qETguL2Rq7oSB5CzvwR4QuJMDNVPCM2y37L8RYkgbVk=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID; b=jNJn4+R+/KLujoejJvo2/42r4OjxF+2oo4CyMdqnMINK0GceDjHRKyPXT1Cn219iO FN2/b9NsFCrW1GhBxA+jzdV7yBV/08xbZe2Ov2Drgx5RFWuSZViFfI4NjsPJSYt8ie nL6haQvkkuJzz+y2iwB5rrf8bl36QJ7RI3pRQW5R/5DRt9mR35MvR8uFftxqAZ/McO xK+tP+wOiEbaj0Lglkgu2Nv8uFsPKjDC6nTsUcsudNupkDh22sYRW65Q5L9q+FfVGx Etzy9M9IbUFpbp3q8FHoZSgmpT41u7jVGmZvK4TSqhWZZawwZdUCrobj1l+3g56nwD Zc0hsl6p2IV5w== Message-ID: <87edvntp6f.fsf@protonmail.com> In-Reply-To: <87leqtd1m4.fsf_-_@gnu.org> References: <1LCXD7_zuGflSFovh_mKvhdayNcoWp8ALeguq3i2-XWwWHgzZuPak2gSBN91VLNJ84lubuFAt1dPB282Zy0pBmh_zbiI2qI-7n0LP9F03u4=@protonmail.com> <87r11wmh2h.fsf@gnu.org> <87leqtd1m4.fsf_-_@gnu.org> Feedback-ID: 7805494:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_L9kCBJd0i81PjSxeizf3BLpIsoL205W5wsmYNk6u2E" X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" Reply-to: John Kehayias X-ACL-Warn: , John Kehayias via Guix-patches From: John Kehayias via Guix-patches via X-Migadu-Flow: FLOW_IN X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1664908665; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:resent-cc:resent-from:resent-sender: resent-message-id:in-reply-to:in-reply-to:references:references: list-id:list-help:list-unsubscribe:list-subscribe:list-post: dkim-signature; bh=qETguL2Rq7oSB5CzvwR4QuJMDNVPCM2y37L8RYkgbVk=; b=ZBIDCWLKOdEUhWkAfFcv/2fFXC2/wcFyXUXtXqePGVSQn3l3ULsw2SYPV0SngaG+iXqBNx Euu4/Azy63BtVvtgNVe4TBkrrcE8yoIoe6K/veucfK2sXupujNYXONMoKkFufBxKihRYt0 OTjDOla0XR7w0bEAxNkC9PEyDdD7mp/U6hRuGkoHhj5kRVKEg/Rs4Q4LUkNgiUSheZ198V TD85PTbm9t55Z547ZzWEQZTE0HFtXQTA8FwIH6QsEBXl5UamqfrFl37ujZOVsCqPT3Hsok 1iDXUjNJu0rAqX4yg9JygSiN0Km1ev0AkscZ4SCXcaeWJ+XxUDS3+3090eOPsw== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1664908665; a=rsa-sha256; cv=none; b=X+/uTt8bRimPdZ7968aEkob/7br7yrf+Gq1OsnC5eIm1zPOWhlbsDceqiPh+sulJahXDRr vQTdM0Ci0hCH1W/IPU4syYhlcB2tsRptJGeiqIpBmqsY23y+h7V3YlZoyhWPodt2wt13S9 jWgF1N8QWvvUY5jdmK2FQDVakVSxP9suoYnWLcK9J9yXHpd3irKDJw3G36+sbF2MBNSThq mZDe8h1QVPPcaP/Irhje0MY5lRd5NpbUjMq+caH+mpkTClRSodLoEtOhsa5sDH3dOMi3yZ HnGITkgJHY/qDBpOcAbLfkpxtSXo0TywqWZI4EsnXy8jRermanRnYgHHK1rv1Q== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=protonmail.com header.s=protonmail3 header.b=jNJn4+R+; dmarc=pass (policy=none) header.from=gnu.org; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -2.26 Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=protonmail.com header.s=protonmail3 header.b=jNJn4+R+; dmarc=pass (policy=none) header.from=gnu.org; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: 7470428DA4 X-Spam-Score: -2.26 X-Migadu-Scanner: scn0.migadu.com X-TUID: 3hKAfagfFtG6 This is a multi-part message in MIME format. --b1_L9kCBJd0i81PjSxeizf3BLpIsoL205W5wsmYNk6u2E Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi Ludo=E2=80=99! Apologies for the long delay! I've done some more rewriting than expected, = so let me outline some changes in the v2 patch (attached, while path 1/2 fo= r glibc-for-fhs remains unchanged). On Thu, Sep 08, 2022 at 10:58 PM, Ludovic Court=C3=A8s wrote: > Howdy, > > John Kehayias skribis: > [snip] >>> 1. Can we make the implementation more orthogonal and less entangled >>> in the already-long =E2=80=98launch-environment/container=E2=80=99? >>> >>> Maybe that can be accomplished by moving all the code conditional >>> on =E2=80=98emulate-fhs?=E2=80=99 out of the way in a separate procedur= e, and >>> possibly by adding a generic hook in =E2=80=98launch-environment/contai= ner=E2=80=99 >>> that would call said procedure. >>> >> >> Sure, this sounds like a good idea. I can certainly separate out the FHS= setup to a >> separate function and call it. But I'm not sure what you mean by a "gene= ric hook" here. >> Do you mean that launch-environment/container would have as an argument = say a list of >> functions it would call? > > Yes, or an argument with a single procedure to call at a specific > point. That would default to a no-op. > I've done some rearranging to address this and along the way fixed the comm= and passing to the container to work the same as without --emulate-fhs (pre= viously I hacked together a startup script that didn't properly capture the= command given by the user). Unfortunately, since some of the needed directories are bind mounted and ot= hers can be linked after creating filesystems, not all of the FHS directory= setup can be done in the same place. To be explicit, bind mounts for all f= ilesystems are set up in the early mlet of launch-environment/container, be= fore being able to call a procedure to do other setup needed here. The end result: launch-environment/container now takes a key 'setup-hook' which defaults to= #f. For now this only handles a single list with the function name and arg= uments (could extend this to be more general, but didn't have any use cases= for it off hand). For the FHS container this is set, by the entry point gu= ix-environment*, to the new function setup-fhs which sets up symlinks and l= d.so.conf. Handling arguments was necessary as setup-fhs needs the profile = used in the container. So then launch-environment also gets a new 'emulate-fhs?' option so it can = run some additional setup before running the command given by the user. Wha= t was the (hacky) /tmp/fhs.sh is now a setenv and invoke, before the final = execlp for the given command. A little more complicated perhaps, but I think functionally separates the d= ifferent steps (bind mounts, symlinks and file creation, and running in the= container) at least. >>> 2. Please add tests. You can probably augment >>> =E2=80=98tests/guix-environment-container.sh=E2=80=99 for that. Let us = know if >>> you=E2=80=99re not sure how to do that. >>> >> >> Thanks, definitely forgot about that. In looking at that, I've just ran = it with >> "./pre-inst-env sh tests/guix-environment-container.sh" and see that the= exit code is 0. >> Is that the correct way to run these? > > The correct way is: > > make check TESTS=3Dtests/guix-environment-container.sh > > Compared to what you wrote, it uses ./test-env (which spawns a daemon > that uses the local store, not /gnu/sore) and sets a bunch of > environment variables. > > See > . > Thanks, missed that somehow. >> Secondly, I'm trying to think of what tests to add. I could of course ru= n the same tests >> already, but with the --emulate-fhs option, to check that there are no r= egressions. >> Other than that, maybe checking that e.g. there's /etc/ld.so.cache, /lib= , and so on? > > Right, at least you=E2=80=99d want to check for these files/directories. > > Note that since the test relies on =E2=80=98glibc-for-fhs=E2=80=99, it ca= nnot be done > the =E2=80=9Cnormal way=E2=80=9D (that is, using the local store rather t= han /gnu/store) > because it would end up building the world. > > The solution here is to use /gnu/store, if available, and to otherwise > skip the test (return 77). See =E2=80=98tests/guix-pack-relocatable.sh= =E2=80=99 up to > line 40 on how to do that. > > HTH! > Very helpful, thanks! I added in two tests to the end of tests/guix-environment-container.sh. One= checks for the FHS file structure in the container and the other tries to = read the ld cache (using 'ldconfig -p'). If we wanted to run all the non-fhs tests with --emulate-fhs, then maybe we= 'd want to make it so the FHS specific tests live in a new file and guix-en= vironment-container.sh can be called in a way to enable that option? (A qui= ck guess would be to just set an alias so that guix environment is always c= alled with --emulate-fhs, but not sure if that works in the test environmen= t.) Wasn't sure if all that is necessary so I just went with the FHS-specific t= ests for now. I checked that they pass for me. The commit changelog has gotten a bit more complicated with these changes, = hopefully I got everything in there. Thanks for your help on this and I'll make sure any future revisions are mo= re timely! John --b1_L9kCBJd0i81PjSxeizf3BLpIsoL205W5wsmYNk6u2E Content-Type: text/x-patch; name=0002-environment-Add-emulate-fhs-v2.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0002-environment-Add-emulate-fhs-v2.patch RnJvbSBkZTdhZTliMjAzYTY1ZTFlYzFiMTQyOWNhNDA3NmYzZjkxYjFhZTMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogSm9obiBLZWhheWlhcyA8am9obi5rZWhheWlhc0Bwcm90b25t YWlsLmNvbT4NCkRhdGU6IFdlZCwgMjAgSnVsIDIwMjIgMjM6NDY6NDUgLTA0MDANClN1YmplY3Q6 IFtQQVRDSF0gZW52aXJvbm1lbnQ6IEFkZCAnLS1lbXVsYXRlLWZocycuDQoNCiogZ3VpeC9zY3Jp cHRzL2Vudmlyb25tZW50LnNjbSAoc2hvdy1lbnZpcm9ubWVudC1vcHRpb25zLWhlbHAsICVvcHRp b25zKTogQWRkDQonLS1lbXVsYXRlLWZocycuDQooc2V0dXAtZmhzKTogTmV3IHByb2NlZHVyZS4g IFNldHVwIGZvciB0aGUgRmlsZXN5c3RlbSBIaWVyYXJjaHkgU3RhbmRhcmQgKEZIUykNCmNvbnRh aW5lci4gIERlZmluZXMgYW5kIHVzZXMgRkhTLVNZTUxJTktTIGFuZCBMSU5LLUNPTlRFTlRTIHRv IGNyZWF0ZSBGSFMNCmV4cGVjdGVkIGRpcmVjdG9yaWVzIGFuZCBjcmVhdGVzIC9ldGMvbGQuc28u Y29uZi4NCihsYXVuY2gtZW52aXJvbm1lbnQpOiBBZGQgJ2VtdWxhdGUtZmhzPycga2V5IGFuZCBp bXBsZW1lbnQgaXQgdG8gc2V0ICRQQVRIIGFuZA0KZ2VuZXJhdGUgL2V0Yy9sZC5zby5jYWNoZSBi ZWZvcmUgY2FsbGluZyBDT01NQU5ELg0KKGxhdW5jaC1lbnZpcm9ubWVudC9jb250YWluZXIpOiBB ZGQgJ2VtdWxhdGUtZmhzPycgYW5kICdzZXR1cC1ob29rJyBrZXlzIGFuZA0KaW1wbGVtZW50IHRo ZW0uICBEZWZpbmUgYW5kIHVzZSBGSFMtTUFQUElOR1MsIHRvIHNldCB1cCBhZGRpdGlvbmFsIGJp bmQgbW91bnRzDQppbiB0aGUgY29udGFpbmVyIHRvIGZvbGxvdyBGSFMgZXhwZWN0YXRpb25zLg0K KGd1aXgtZW52aXJvbm1lbnQqKTogQWRkIGdsaWJjLWZvci1maHMgdG8gdGhlIGNvbnRhaW5lciBw YWNrYWdlcyB3aGVuDQonZW11bGF0ZS1maHM/JyBrZXkgaXMgaW4gT1BUUy4NCiogZG9jL2d1aXgu dGV4aSAoSW52b2tpbmcgZ3VpeCBzaGVsbCk6IERvY3VtZW50ICctLWVtdWxhdGUtZmhzJy4NCihJ bnZva2luZyBndWl4IGVudmlyb25tZW50KTogRG9jdW1lbnQgJy0tZW11bGF0ZS1maHMnLg0KKiB0 ZXN0cy9ndWl4LWVudmlyb25tZW50LWNvbnRhaW5lci5zaDogQWRkIHRlc3RzIGZvciAnLS1lbXVs YXRlLWZocycuDQotLS0NCiBkb2MvZ3VpeC50ZXhpICAgICAgICAgICAgICAgICAgICAgICB8ICAz MyArKysrKysNCiBndWl4L3NjcmlwdHMvZW52aXJvbm1lbnQuc2NtICAgICAgICB8IDE2NyArKysr KysrKysrKysrKysrKysrKysrKystLS0tDQogdGVzdHMvZ3VpeC1lbnZpcm9ubWVudC1jb250YWlu ZXIuc2ggfCAgMzQgKysrKysrDQogMyBmaWxlcyBjaGFuZ2VkLCAyMTEgaW5zZXJ0aW9ucygrKSwg MjMgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQgYS9kb2MvZ3VpeC50ZXhpIGIvZG9jL2d1aXgu dGV4aQ0KaW5kZXggNTM1YzhjZGZjMy4uOTlkZWEyZTNjMSAxMDA2NDQNCi0tLSBhL2RvYy9ndWl4 LnRleGkNCisrKyBiL2RvYy9ndWl4LnRleGkNCkBAIC0xMDcsNiArMTA3LDcgQEANCiBDb3B5cmln aHQgQGNvcHlyaWdodHt9IDIwMjIgSnVzdGluIFZlaWxsZXV4QCoNCiBDb3B5cmlnaHQgQGNvcHly aWdodHt9IDIwMjIgUmVpbHkgU2llZ2VsQCoNCiBDb3B5cmlnaHQgQGNvcHlyaWdodHt9IDIwMjIg U2ltb24gU3RyZWl0QCoNCitDb3B5cmlnaHQgQGNvcHlyaWdodHt9IDIwMjIgSm9obiBLZWhheWlh c0AqDQogDQogUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29y IG1vZGlmeSB0aGlzIGRvY3VtZW50DQogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBE b2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yDQpAQCAtNjE4Nyw2ICs2MTg4LDIy IEBAIEludm9raW5nIGd1aXggc2hlbGwNCiBndWl4IHNoZWxsIC0tY29udGFpbmVyIC0tZXhwb3Nl PSRIT01FPS9leGNoYW5nZSBndWlsZSAtLSBndWlsZQ0KIEBlbmQgZXhhbXBsZQ0KIA0KK0BpdGVt IC0tZW11bGF0ZS1maHMNCitAaXRlbSAtRg0KK0ZvciBjb250YWluZXJzLCBlbXVsYXRlIGEgRmls ZXN5c3RlbSBIaWVyYXJjaHkgU3RhbmRhcmQgKEZIUykNCitjb25maWd1cmF0aW9uIHdpdGhpbiB0 aGUgY29udGFpbmVyLCBzZWUNCitAdXJlZntodHRwczovL3JlZnNwZWNzLmxpbnV4Zm91bmRhdGlv bi5vcmcvZmhzLnNodG1sLCB0aGUgb2ZmaWNpYWwNCitzcGVjaWZpY2F0aW9ufS4gIEFzIEd1aXgg ZGV2aWF0ZXMgZnJvbSB0aGUgRkhTIHNwZWNpZmljYXRpb24sIHRoaXMNCitvcHRpb24gc2V0cyB1 cCB0aGUgY29udGFpbmVyIHRvIG1vcmUgY2xvc2VseSBtaW1pYyB0aGF0IG9mIG90aGVyDQorR05V L0xpbnV4IGRpc3RyaWJ1dGlvbnMuICBUaGlzIGlzIHVzZWZ1bCBmb3IgcmVwcm9kdWNpbmcgb3Ro ZXINCitkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMsIHRlc3RpbmcsIGFuZCB1c2luZyBwcm9ncmFt cyB3aGljaCBleHBlY3QgdGhlDQorRkhTIHNwZWNpZmljYXRpb24gdG8gYmUgZm9sbG93ZWQuICBX aXRoIHRoaXMgb3B0aW9uLCB0aGUgY29udGFpbmVyIHdpbGwNCitpbmNsdWRlIGEgdmVyc2lvbiBv ZiBAY29kZXtnbGliY30gd2hpY2ggd2lsbCByZWFkDQorQGNvZGV7L2V0Yy9sZC5zby5jYWNoZX0g d2l0aGluIHRoZSBjb250YWluZXIgZm9yIHRoZSBzaGFyZWQgbGlicmFyeQ0KK2NhY2hlIChjb250 cmFyeSB0byBAY29kZXtnbGliY30gaW4gcmVndWxhciBHdWl4IHVzYWdlKSBhbmQgc2V0IHVwIHRo ZQ0KK2V4cGVjdGVkIEZIUyBkaXJlY3RvcmllczogQGNvZGV7L2Jpbn0sIEBjb2Rley9ldGN9LCBA Y29kZXsvbGlifSwgYW5kDQorQGNvZGV7L3Vzcn0gZnJvbSB0aGUgY29udGFpbmVyJ3MgcHJvZmls ZS4NCisNCiBAaXRlbSAtLXJlYnVpbGQtY2FjaGUNCiBAY2luZGV4IGNhY2hpbmcsIG9mIHByb2Zp bGVzDQogQGNpbmRleCBjYWNoaW5nLCBpbiBAY29tbWFuZHtndWl4IHNoZWxsfQ0KQEAgLTY2MDQs NiArNjYyMSwyMiBAQCBJbnZva2luZyBndWl4IGVudmlyb25tZW50DQogZ3VpeCBlbnZpcm9ubWVu dCAtLWNvbnRhaW5lciAtLWV4cG9zZT0kSE9NRT0vZXhjaGFuZ2UgLS1hZC1ob2MgZ3VpbGUgLS0g Z3VpbGUNCiBAZW5kIGV4YW1wbGUNCiANCitAaXRlbSAtLWVtdWxhdGUtZmhzDQorQGl0ZW0gLUYN CitGb3IgY29udGFpbmVycywgZW11bGF0ZSBhIEZpbGVzeXN0ZW0gSGllcmFyY2h5IFN0YW5kYXJk IChGSFMpDQorY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGNvbnRhaW5lciwgc2VlDQorQHVyZWZ7 aHR0cHM6Ly9yZWZzcGVjcy5saW51eGZvdW5kYXRpb24ub3JnL2Zocy5zaHRtbCwgdGhlIG9mZmlj aWFsDQorc3BlY2lmaWNhdGlvbn0uICBBcyBHdWl4IGRldmlhdGVzIGZyb20gdGhlIEZIUyBzcGVj aWZpY2F0aW9uLCB0aGlzDQorb3B0aW9uIHNldHMgdXAgdGhlIGNvbnRhaW5lciB0byBtb3JlIGNs b3NlbHkgbWltaWMgdGhhdCBvZiBvdGhlcg0KK0dOVS9MaW51eCBkaXN0cmlidXRpb25zLiAgVGhp cyBpcyB1c2VmdWwgZm9yIHJlcHJvZHVjaW5nIG90aGVyDQorZGV2ZWxvcG1lbnQgZW52aXJvbm1l bnRzLCB0ZXN0aW5nLCBhbmQgdXNpbmcgcHJvZ3JhbXMgd2hpY2ggZXhwZWN0IHRoZQ0KK0ZIUyBz cGVjaWZpY2F0aW9uIHRvIGJlIGZvbGxvd2VkLiAgV2l0aCB0aGlzIG9wdGlvbiwgdGhlIGNvbnRh aW5lciB3aWxsDQoraW5jbHVkZSBhIHZlcnNpb24gb2YgQGNvZGV7Z2xpYmN9IHdoaWNoIHdpbGwg cmVhZA0KK0Bjb2Rley9ldGMvbGQuc28uY2FjaGV9IHdpdGhpbiB0aGUgY29udGFpbmVyIGZvciB0 aGUgc2hhcmVkIGxpYnJhcnkNCitjYWNoZSAoY29udHJhcnkgdG8gQGNvZGV7Z2xpYmN9IGluIHJl Z3VsYXIgR3VpeCB1c2FnZSkgYW5kIHNldCB1cCB0aGUNCitleHBlY3RlZCBGSFMgZGlyZWN0b3Jp ZXM6IEBjb2Rley9iaW59LCBAY29kZXsvZXRjfSwgQGNvZGV7L2xpYn0sIGFuZA0KK0Bjb2Rley91 c3J9IGZyb20gdGhlIGNvbnRhaW5lcidzIHByb2ZpbGUuDQorDQogQGVuZCB0YWJsZQ0KIA0KIEBj b21tYW5ke2d1aXggZW52aXJvbm1lbnR9DQpkaWZmIC0tZ2l0IGEvZ3VpeC9zY3JpcHRzL2Vudmly b25tZW50LnNjbSBiL2d1aXgvc2NyaXB0cy9lbnZpcm9ubWVudC5zY20NCmluZGV4IDI0OTMxMzQ0 NzAuLmY1YjQxNzQ1N2QgMTAwNjQ0DQotLS0gYS9ndWl4L3NjcmlwdHMvZW52aXJvbm1lbnQuc2Nt DQorKysgYi9ndWl4L3NjcmlwdHMvZW52aXJvbm1lbnQuc2NtDQpAQCAtMiw2ICsyLDcgQEANCiA7 OzsgQ29weXJpZ2h0IMKpIDIwMTQsIDIwMTUsIDIwMTggRGF2aWQgVGhvbXBzb24gPGRhdmV0QGdu dS5vcmc+DQogOzs7IENvcHlyaWdodCDCqSAyMDE1LTIwMjIgTHVkb3ZpYyBDb3VydMOocyA8bHVk b0BnbnUub3JnPg0KIDs7OyBDb3B5cmlnaHQgwqkgMjAxOCBNaWtlIEdlcndpdHogPG10Z0BnbnUu b3JnPg0KKzs7OyBDb3B5cmlnaHQgwqkgMjAyMiBKb2huIEtlaGF5aWFzIDxqb2huLmtlaGF5aWFz QHByb3Rvbm1haWwuY29tPg0KIDs7Ow0KIDs7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgR3Vp eC4NCiA7OzsNCkBAIC0xMjAsNiArMTIxLDkgQEAgKGRlZmluZSAoc2hvdy1lbnZpcm9ubWVudC1v cHRpb25zLWhlbHApDQogICAgICAgLS1leHBvc2U9U1BFQyAgICAgIGZvciBjb250YWluZXJzLCBl eHBvc2UgcmVhZC1vbmx5IGhvc3QgZmlsZSBzeXN0ZW0NCiAgICAgICAgICAgICAgICAgICAgICAg ICAgYWNjb3JkaW5nIHRvIFNQRUMiKSkNCiAgIChkaXNwbGF5IChHXyAiDQorICAtRiwgLS1lbXVs YXRlLWZocyAgICAgIGZvciBjb250YWluZXJzLCBlbXVsYXRlIHRoZSBGaWxlc3lzdGVtIEhpZXJh cmNoeQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICBTdGFuZGFyZCAoRkhTKSIpKQ0KKyAgKGRp c3BsYXkgKEdfICINCiAgIC12LCAtLXZlcmJvc2l0eT1MRVZFTCAgdXNlIHRoZSBnaXZlbiB2ZXJi b3NpdHkgTEVWRUwiKSkNCiAgIChkaXNwbGF5IChHXyAiDQogICAgICAgLS1ib290c3RyYXAgICAg ICAgIHVzZSBib290c3RyYXAgYmluYXJpZXMgdG8gYnVpbGQgdGhlIGVudmlyb25tZW50IikpKQ0K QEAgLTI1Niw2ICsyNjAsOSBAQCAoZGVmaW5lICVvcHRpb25zDQogICAgICAgICAgICAgICAgICAg IChhbGlzdC1jb25zICdmaWxlLXN5c3RlbS1tYXBwaW5nDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChzcGVjaWZpY2F0aW9uLT5maWxlLXN5c3RlbS1tYXBwaW5nIGFyZyAjZikNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KSkpDQorICAgICAgICAgKG9wdGlv biAnKCNcRiAiZW11bGF0ZS1maHMiKSAjZiAjZg0KKyAgICAgICAgICAgICAgICAgKGxhbWJkYSAo b3B0IG5hbWUgYXJnIHJlc3VsdCkNCisgICAgICAgICAgICAgICAgICAgKGFsaXN0LWNvbnMgJ2Vt dWxhdGUtZmhzPyAjdCByZXN1bHQpKSkNCiAgICAgICAgICAob3B0aW9uICcoI1xyICJyb290Iikg I3QgI2YNCiAgICAgICAgICAgICAgICAgIChsYW1iZGEgKG9wdCBuYW1lIGFyZyByZXN1bHQpDQog ICAgICAgICAgICAgICAgICAgIChhbGlzdC1jb25zICdnYy1yb290IGFyZyByZXN1bHQpKSkNCkBA IC0zNzUsNiArMzgyLDY1IEBAIChkZWZpbmUgKGlucHV0cy0+cmVxdWlzaXRlcyBpbnB1dHMpDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LT5yZXF1aXNpdGVzIGlucHV0 cykpKQ0KICAgICAocmV0dXJuIChkZWxldGUtZHVwbGljYXRlcyAoY29uY2F0ZW5hdGUgcmVxcykp KSkpDQogDQorKGRlZmluZSAoc2V0dXAtZmhzIHByb2ZpbGUpDQorICAiU2V0dXAgdGhlIEZIUyBj b250YWluZXIgYnkgY3JlYXRpbmcgYW5kIGxpbmtpbmcgZXhwZWN0ZWQgZGlyZWN0b3JpZXMgZnJv bQ0KK1BST0ZJTEUgKG90aGVyIGJpbmQgbW91bnRzIGFyZSBkb25lIGluIExBVU5DSC1FTlZJUk9O TUVOVC9DT05UQUlORVIpLA0KK3Byb3ZpZGluZyBhIHN5bWxpbmsgZm9yIENDIGlmIEdDQyBpcyBp biB0aGUgY29udGFpbmVyIFBST0ZJTEUsIGFuZCB3cml0aW5nDQorL2V0Yy9sZC5zby5jb25mLiIN CisgIDs7IEFkZGl0aW9uYWwgc3ltbGlua3MgZm9yIGFuIEZIUyBjb250YWluZXIuDQorICAoZGVm aW5lIGZocy1zeW1saW5rcw0KKyAgICBgKCgiL2xpYiIgLiAiL3Vzci9saWIiKQ0KKyAgICAgICwo aWYgKHRhcmdldC02NGJpdD8pDQorICAgICAgICAgICAnKCIvbGliIiAuICIvbGliNjQiKQ0KKyAg ICAgICAgICAgJygiL2xpYiIgLiAiL2xpYjMyIikpDQorICAgICAgKCIvYmluIiAuICIvdXNyL2Jp biIpDQorICAgICAgKCIvc2JpbiIgLiAiL3Vzci9zYmluIikpKQ0KKw0KKyAgOzsgQSBwcm9jZWR1 cmUgdG8gc3ltbGluayB0aGUgY29udGVudHMgKGF0IHRoZSB0b3AgbGV2ZWwpIG9mIGEgZGlyZWN0 b3J5LA0KKyAgOzsgZXhjbHVkaW5nIHRoZSBkaXJlY3RvcnkgaXRzZWxmIGFuZCBwYXJlbnQsIGFs b25nIHdpdGggYW55IG90aGVycyBwcm92aWRlZA0KKyAgOzsgaW4gRVhDTFVERS4NCisgIChkZWZp bmUqIChsaW5rLWNvbnRlbnRzIGRpciAjOmtleSAoZXhjbHVkZSAnKCkpKQ0KKyAgICAoZm9yLWVh Y2ggKGxhbWJkYSAoZmlsZSkNCisgICAgICAgICAgICAgICAgKHN5bWxpbmsgKHN0cmluZy1hcHBl bmQgcHJvZmlsZSBkaXIgIi8iIGZpbGUpDQorICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJp bmctYXBwZW5kIGRpciAiLyIgZmlsZSkpKQ0KKyAgICAgICAgICAgICAgKHNjYW5kaXIgKHN0cmlu Zy1hcHBlbmQgcHJvZmlsZSBkaXIpDQorICAgICAgICAgICAgICAgICAgICAgICAobmVnYXRlIChj dXQgbWVtYmVyIDw+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGVu ZCBleGNsdWRlICcoIi4iICIuLiIgKSkpKSkpKQ0KKw0KKyAgOzsgVGhlIEZIUyBjb250YWluZXIg c2V0cyB1cCB0aGUgZXhwZWN0ZWQgZmlsZXN5c3RlbSB0aHJvdWdoIE1BUFBJTkdTIHdpdGgNCisg IDs7IEZIUy1NQVBQSU5HUyAoaW4gTEFVTkNILUVOVklST05NRU5UL0NPTlRBSU5FUiksIHRoZSBz eW1saW5rcyB0aHJvdWdoDQorICA7OyBGSFMtU1lNTElOS1MsIGFuZCBsaW5raW5nIHRoZSBjb250 ZW50cyBvZiBQUk9GSUxFL2JpbiBhbmQgUFJPRklMRS9ldGMNCisgIDs7IHVzaW5nIExJTkstQ09O VEVOVFMsIGFzIHRoZXNlIGJvdGggaGF2ZSBvciB3aWxsIGhhdmUgY29udGVudHMgZm9yIGENCisg IDs7IG5vbi1GSFMgY29udGFpbmVyIHNvIG11c3QgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5Lg0KKyAg KG1rZGlyLXAgIi91c3IiKQ0KKyAgKGZvci1lYWNoIChsYW1iZGEgKGxpbmspDQorICAgICAgICAg ICAgICAoaWYgKGZpbGUtZXhpc3RzPyAoY2FyIGxpbmspKQ0KKyAgICAgICAgICAgICAgICAgIChz eW1saW5rIChjYXIgbGluaykgKGNkciBsaW5rKSkpKQ0KKyAgICAgICAgICAgIGZocy1zeW1saW5r cykNCisgIChsaW5rLWNvbnRlbnRzICIvYmluIiAjOmV4Y2x1ZGUgJygic2giKSkNCisgIChta2Rp ci1wICIvZXRjIikNCisgIChsaW5rLWNvbnRlbnRzICIvZXRjIikNCisNCisgIDs7IFByb3ZpZGUg YSBmcmVxdWVudGx5IGV4cGVjdGVkICdjYycgc3ltbGluayB0byBnY2MgKGluIGNhc2UgaXQgaXMg aW4NCisgIDs7IFBST0ZJTEUpLCB0aG91Z2ggdGhpcyBjb3VsZCBhbHNvIGJlIGRvbmUgYnkgdGhl IHVzZXIgaW4gdGhlIGNvbnRhaW5lciwNCisgIDs7IGUuZy4gaW4gJEhPTUUvLmxvY2FsL2JpbiBh bmQgYWRkaW5nIHRoYXQgdG8gJFBBVEguICBOb3RlOiB3ZSBkbyB0aGlzIGluDQorICA7OyAvYmlu IHNpbmNlIHRoYXQgYWxyZWFkeSBoYXMgdGhlIHNoIHN5bWxpbmsgYW5kIHRoZSBvdGhlciAob3B0 aW9uYWwpIEZIUw0KKyAgOzsgYmluIGRpcmVjdG9yaWVzIHdpbGwgbGluayB0byAvYmluLg0KKyAg KGxldCAoKGdjYy1wYXRoIChzdHJpbmctYXBwZW5kIHByb2ZpbGUgIi9iaW4vZ2NjIikpKQ0KKyAg ICAoaWYgKGZpbGUtZXhpc3RzPyBnY2MtcGF0aCkNCisgICAgICAgIChzeW1saW5rIGdjYy1wYXRo ICIvYmluL2NjIikpKQ0KKw0KKyAgOzsgR3VpeCdzIGxkY29uZmlnIGRvZXNuJ3Qgc2VhcmNoIGlu IEZIUyBkZWZhdWx0IGxvY2F0aW9ucywgc28gcHJvdmlkZSBhDQorICA7OyBtaW5pbWFsIGxkLnNv LmNvbmYuDQorICAoY2FsbC13aXRoLW91dHB1dC1maWxlICIvZXRjL2xkLnNvLmNvbmYiDQorICAg IChsYW1iZGEgKHBvcnQpDQorICAgICAgKGZvci1lYWNoIChsYW1iZGEgKGRpcmVjdG9yeSkNCisg ICAgICAgICAgICAgICAgICAoZGlzcGxheSBkaXJlY3RvcnkgcG9ydCkNCisgICAgICAgICAgICAg ICAgICAobmV3bGluZSBwb3J0KSkNCisgICAgICAgICAgICAgICAgOzsgL2xpYi9uc3MgaXMgbmVl ZGVkIGFzIEd1aXgncyBuc3MgcHV0cyBsaWJyYXJpZXMNCisgICAgICAgICAgICAgICAgOzsgdGhl cmUgcmF0aGVyIHRoYW4gaW4gdGhlIGxpYiBkaXJlY3RvcnkuDQorICAgICAgICAgICAgICAgICco Ii9saWIiICIvbGliL25zcyIpKSkpKQ0KKw0KIChkZWZpbmUgKHN0YXR1cy0+ZXhpdC1jb2RlIHN0 YXR1cykNCiAgICJDb21wdXRlIHRoZSBleGl0IGNvZGUgbWFkZSBmcm9tIFNUQVRVUywgYSB2YWx1 ZSBhcyByZXR1cm5lZCBieSAnd2FpdHBpZCcsDQogYW5kIHN1aXRhYmxlIGZvciAnZXhpdCcuIg0K QEAgLTM4NiwxMSArNDUyLDEzIEBAIChkZWZpbmUgZXhpdC9zdGF0dXMgKGNvbXBvc2UgZXhpdCBz dGF0dXMtPmV4aXQtY29kZSkpDQogKGRlZmluZSBwcmltaXRpdmUtZXhpdC9zdGF0dXMgKGNvbXBv c2UgcHJpbWl0aXZlLWV4aXQgc3RhdHVzLT5leGl0LWNvZGUpKQ0KIA0KIChkZWZpbmUqIChsYXVu Y2gtZW52aXJvbm1lbnQgY29tbWFuZCBwcm9maWxlIG1hbmlmZXN0DQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjOmtleSBwdXJlPyAod2hpdGUtbGlzdCAnKCkpKQ0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIzprZXkgcHVyZT8gKHdoaXRlLWxpc3QgJygpKQ0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZW11bGF0ZS1maHM/KQ0KICAgIlJ1biBDT01NQU5EIGluIGEg bmV3IGVudmlyb25tZW50IGNvbnRhaW5pbmcgSU5QVVRTLCB1c2luZyB0aGUgbmF0aXZlIHNlYXJj aA0KIHBhdGhzIGRlZmluZWQgYnkgdGhlIGxpc3QgUEFUSFMuICBXaGVuIFBVUkU/LCBwcmUtZXhp c3RpbmcgZW52aXJvbm1lbnQNCiB2YXJpYWJsZXMgYXJlIGNsZWFyZWQgYmVmb3JlIHNldHRpbmcg dGhlIG5ldyBvbmVzLCBleGNlcHQgdGhvc2UgbWF0Y2hpbmcgdGhlDQotcmVnZXhwcyBpbiBXSElU RS1MSVNULiINCityZWdleHBzIGluIFdISVRFLUxJU1QuICBXaGVuIEVNVUxBVEUtRkhTPywgZmly c3Qgc2V0IHVwIGFuIEZIUyBlbnZpcm9ubWVudA0KK3dpdGggJFBBVEggYW5kIGdlbmVyYXRlIHRo ZSBMRCBjYWNoZS4iDQogICA7OyBQcm9wZXJseSBoYW5kbGUgU0lHSU5ULCBzbyBwcmVzc2luZyBD LWMgaW4gYW4gaW50ZXJhY3RpdmUgdGVybWluYWwNCiAgIDs7IGFwcGxpY2F0aW9uIHdvcmtzLg0K ICAgKHNpZ2FjdGlvbiBTSUdJTlQgU0lHX0RGTCkNCkBAIC00MDYsNiArNDc0LDEyIEBAIChkZWZp bmUqIChsYXVuY2gtZW52aXJvbm1lbnQgY29tbWFuZCBwcm9maWxlIG1hbmlmZXN0DQogICAgICgo cHJvZ3JhbSAuIGFyZ3MpDQogICAgICAoY2F0Y2ggJ3N5c3RlbS1lcnJvcg0KICAgICAgICAobGFt YmRhICgpDQorICAgICAgICAgKHdoZW4gZW11bGF0ZS1maHM/DQorICAgICAgICAgICA7OyBXaGVu IHJ1bm5pbmcgaW4gYSBjb250YWluZXIgd2l0aCBFTVVMQVRFLUZIUz8sIHN1cHBsZW1lbnQgJFBB VEgNCisgICAgICAgICAgIDs7IChvcHRpb25hbCwgYnV0IHRvIGJldHRlciBtYXRjaCBGSFMgZXhw ZWN0YXRpb25zKSwgYW5kIGdlbmVyYXRlDQorICAgICAgICAgICA7OyAvZXRjL2xkLnNvLmNhY2hl Lg0KKyAgICAgICAgICAgKHNldGVudiAiUEFUSCIgIi9iaW46L3Vzci9iaW46L3NiaW46L3Vzci9z YmluOiRQQVRIIikNCisgICAgICAgICAgIChpbnZva2UgImxkY29uZmlnIiAiLVgiKSkNCiAgICAg ICAgICAoYXBwbHkgZXhlY2xwIHByb2dyYW0gcHJvZ3JhbSBhcmdzKSkNCiAgICAgICAgKGxhbWJk YSBfDQogICAgICAgICAgOzsgUmVwb3J0IHRoZSBlcnJvciBmcm9tIGhlcmUgYmVjYXVzZSB0aGUg cGFyZW50IHByb2Nlc3MgY2Fubm90DQpAQCAtNjA0LDE1ICs2NzgsMjAgQEAgKGRlZmluZSogKGxh dW5jaC1lbnZpcm9ubWVudC9mb3JrIGNvbW1hbmQgcHJvZmlsZSBtYW5pZmVzdA0KIA0KIChkZWZp bmUqIChsYXVuY2gtZW52aXJvbm1lbnQvY29udGFpbmVyICM6a2V5IGNvbW1hbmQgYmFzaCB1c2Vy IHVzZXItbWFwcGluZ3MNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw cm9maWxlIG1hbmlmZXN0IGxpbmstcHJvZmlsZT8gbmV0d29yaz8NCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtYXAtY3dkPyAod2hpdGUtbGlzdCAnKCkpKQ0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC1jd2Q/IGVtdWxhdGUtZmhzPyAo c2V0dXAtaG9vayAjZikNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo d2hpdGUtbGlzdCAnKCkpKQ0KICAgIlJ1biBDT01NQU5EIHdpdGhpbiBhIGNvbnRhaW5lciB0aGF0 IGZlYXR1cmVzIHRoZSBzb2Z0d2FyZSBpbiBQUk9GSUxFLg0KLUVudmlyb25tZW50IHZhcmlhYmxl cyBhcmUgc2V0IGFjY29yZGluZyB0byB0aGUgc2VhcmNoIHBhdGhzIG9mIE1BTklGRVNULg0KLVRo ZSBnbG9iYWwgc2hlbGwgaXMgQkFTSCwgYSBmaWxlIG5hbWUgZm9yIGEgR05VIEJhc2ggYmluYXJ5 IGluIHRoZQ0KLXN0b3JlLiAgV2hlbiBORVRXT1JLPywgYWNjZXNzIHRvIHRoZSBob3N0IHN5c3Rl bSBuZXR3b3JrIGlzIHBlcm1pdHRlZC4NCi1VU0VSLU1BUFBJTkdTLCBhIGxpc3Qgb2YgZmlsZSBz eXN0ZW0gbWFwcGluZ3MsIGNvbnRhaW5zIHRoZSB1c2VyLXNwZWNpZmllZA0KLWhvc3QgZmlsZSBz eXN0ZW1zIHRvIG1vdW50IGluc2lkZSB0aGUgY29udGFpbmVyLiAgSWYgVVNFUiBpcyBub3QgI2Ys IGVhY2gNCi10YXJnZXQgb2YgVVNFUi1NQVBQSU5HUyB3aWxsIGJlIHJlLXdyaXR0ZW4gcmVsYXRp dmUgdG8gJy9ob21lL1VTRVInLCBhbmQgVVNFUg0KLXdpbGwgYmUgdXNlZCBmb3IgdGhlIHBhc3N3 ZCBlbnRyeS4gIExJTkstUFJPRklMRT8gY3JlYXRlcyBhIHN5bWJvbGljIGxpbmsgZnJvbQ0KK0Vu dmlyb25tZW50IHZhcmlhYmxlcyBhcmUgc2V0IGFjY29yZGluZyB0byB0aGUgc2VhcmNoIHBhdGhz IG9mIE1BTklGRVNULiAgVGhlDQorZ2xvYmFsIHNoZWxsIGlzIEJBU0gsIGEgZmlsZSBuYW1lIGZv ciBhIEdOVSBCYXNoIGJpbmFyeSBpbiB0aGUgc3RvcmUuICBXaGVuDQorTkVUV09SSz8sIGFjY2Vz cyB0byB0aGUgaG9zdCBzeXN0ZW0gbmV0d29yayBpcyBwZXJtaXR0ZWQuICBVU0VSLU1BUFBJTkdT LCBhDQorbGlzdCBvZiBmaWxlIHN5c3RlbSBtYXBwaW5ncywgY29udGFpbnMgdGhlIHVzZXItc3Bl Y2lmaWVkIGhvc3QgZmlsZSBzeXN0ZW1zIHRvDQorbW91bnQgaW5zaWRlIHRoZSBjb250YWluZXIu ICBJZiBVU0VSIGlzIG5vdCAjZiwgZWFjaCB0YXJnZXQgb2YgVVNFUi1NQVBQSU5HUw0KK3dpbGwg YmUgcmUtd3JpdHRlbiByZWxhdGl2ZSB0byAnL2hvbWUvVVNFUicsIGFuZCBVU0VSIHdpbGwgYmUg dXNlZCBmb3IgdGhlDQorcGFzc3dkIGVudHJ5LiAgV2hlbiBFTVVMQVRFLUZIUz8sIHNldCB1cCB0 aGUgY29udGFpbmVyIHRvIGZvbGxvdyB0aGUNCitGaWxlc3lzdGVtIEhpZXJhcmNoeSBTdGFuZGFy ZCBhbmQgcHJvdmlkZSBhIGdsaWJjIHRoYXQgcmVhZHMgdGhlIGNhY2hlIGZyb20NCisvZXRjL2xk LnNvLmNhY2hlLiAgU0VUVVAtSE9PSyBpcyBhbiBhZGRpdGlvbmFsIHNldHVwIHByb2NlZHVyZSB0 byBiZSBjYWxsZWQsIGFzIGENCitsaXN0IHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGFyZ3Vt ZW50cywgY3VycmVudGx5IG9ubHkgdXNlZCB3aXRoIHRoZQ0KK0VNVUxBVEUtRkhTPyBvcHRpb24u ICBMSU5LLVBST0ZJTEU/IGNyZWF0ZXMgYSBzeW1ib2xpYyBsaW5rIGZyb20NCiB+Ly5ndWl4LXBy b2ZpbGUgdG8gdGhlIGVudmlyb25tZW50IHByb2ZpbGUuDQogDQogUHJlc2VydmUgZW52aXJvbm1l bnQgdmFyaWFibGVzIHdob3NlIG5hbWUgbWF0Y2hlcyB0aGUgb25lIG9mIHRoZSByZWdleHBzIGlu DQpAQCAtNjIxLDYgKzcwMCwyMSBAQCAoZGVmaW5lKiAobGF1bmNoLWVudmlyb25tZW50L2NvbnRh aW5lciAjOmtleSBjb21tYW5kIGJhc2ggdXNlciB1c2VyLW1hcHBpbmdzDQogICAgIChhbmQgKGZp bGUtZXhpc3RzPyAoZmlsZS1zeXN0ZW0tbWFwcGluZy1zb3VyY2UgbWFwcGluZykpDQogICAgICAg ICAgKGZpbGUtc3lzdGVtLW1hcHBpbmctPmJpbmQtbW91bnQgbWFwcGluZykpKQ0KIA0KKyAgOzsg RmlsZSBzeXN0ZW0gbWFwcGluZ3MgZm9yIGFuIEZIUyBjb250YWluZXIsIHdoZXJlIHRoZSBlbnRp cmUgZGlyZWN0b3J5IGNhbg0KKyAgOzsgYmUgbWFwcGVkLiAgT3RoZXJzIChiaW4gYW5kIGV0Yykg d2lsbCBhbHJlYWR5IGhhdmUgY29udGVudHMgYW5kIG5lZWQgdG8NCisgIDs7IHVzZSBMSU5LLUNP TlRFTlRTIChkZWZpbmVkIGluIFNFVFVQLUZIUykgdG8gc3ltbGluayB0aGUgZGlyZWN0b3J5DQor ICA7OyBjb250ZW50cy4NCisgIChkZWZpbmUgZmhzLW1hcHBpbmdzDQorICAgIChtYXAgKGxhbWJk YSAobWFwcGluZykNCisgICAgICAgICAgIChmaWxlLXN5c3RlbS1tYXBwaW5nDQorICAgICAgICAg ICAgKHNvdXJjZSAoc3RyaW5nLWFwcGVuZCBwcm9maWxlIChjYXIgbWFwcGluZykpKQ0KKyAgICAg ICAgICAgICh0YXJnZXQgKGNkciBtYXBwaW5nKSkpKQ0KKyAgICAgICAgICcoKCIvbGliIiAgICAg LiAiL2xpYiIpDQorICAgICAgICAgICAoIi9pbmNsdWRlIiAuICIvdXNyL2luY2x1ZGUiKQ0KKyAg ICAgICAgICAgKCIvc2JpbiIgICAgLiAiL3NiaW4iKQ0KKyAgICAgICAgICAgKCIvbGliZXhlYyIg LiAiL3Vzci9saWJleGVjIikNCisgICAgICAgICAgICgiL3NoYXJlIiAgIC4gIi91c3Ivc2hhcmUi KSkpKQ0KKw0KICAgKG1sZXQgJXN0b3JlLW1vbmFkICgocmVxcyAoaW5wdXRzLT5yZXF1aXNpdGVz DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAoZGlyZWN0LXN0b3JlLXBhdGgg YmFzaCkgcHJvZmlsZSkpKSkNCiAgICAgKHJldHVybg0KQEAgLTY3NSw2ICs3NjksMTEgQEAgKGRl ZmluZSogKGxhdW5jaC1lbnZpcm9ubWVudC9jb250YWluZXIgIzprZXkgY29tbWFuZCBiYXNoIHVz ZXIgdXNlci1tYXBwaW5ncw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGZpbHRlci1tYXAgb3B0aW9uYWwtbWFwcGluZy0+ZnMNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICVuZXR3b3JrLWZpbGUtbWFwcGluZ3MpDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKCkpDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDs7IE1hcHBpbmdzIGZvciBhbiBGSFMgY29udGFpbmVyLg0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgZW11bGF0ZS1maHM/DQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsdGVyLW1hcCBvcHRpb25hbC1tYXBw aW5nLT5mcw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZmhzLW1hcHBpbmdzKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JygpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFwIGZpbGUtc3lzdGVt LW1hcHBpbmctPmJpbmQtbW91bnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYXBwaW5ncykpKSkNCiAgICAgICAgKGV4aXQvc3RhdHVzDQpAQCAtNzAyLDYgKzgwMSwx MiBAQCAoZGVmaW5lKiAobGF1bmNoLWVudmlyb25tZW50L2NvbnRhaW5lciAjOmtleSBjb21tYW5k IGJhc2ggdXNlciB1c2VyLW1hcHBpbmdzDQogICAgICAgICAgICAgKG1rZGlyLXAgaG9tZS1kaXIp DQogICAgICAgICAgICAgKHNldGVudiAiSE9NRSIgaG9tZS1kaXIpDQogDQorICAgICAgICAgICAg OzsgQ2FsbCBhbiBhZGRpdGlvbmFsIHNldHVwIHByb2NlZHVyZSwgaWYgcHJvdmlkZWQuICBDdXJy ZW50bHkNCisgICAgICAgICAgICA7OyB0aGlzIGlzIG9ubHkgdXNlZCB3aXRoIHRoZSBFTVVMQVRF LUZIUz8gb3B0aW9uLCBidXQgY291bGQgYmUNCisgICAgICAgICAgICA7OyBleHBhbmRlZCB0byBh IGdlbmVyYWwgbGlzdCBvZiBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkLg0KKyAgICAgICAgICAgIChp ZiBzZXR1cC1ob29rDQorICAgICAgICAgICAgICAgIChhcHBseSAoY2FyIHNldHVwLWhvb2spIChj ZHIgc2V0dXAtaG9vaykpKQ0KKw0KICAgICAgICAgICAgIDs7IElmIHJlcXVlc3RlZCwgbGluayAk R1VJWF9FTlZJUk9OTUVOVCB0byAkSE9NRS8uZ3VpeC1wcm9maWxlOw0KICAgICAgICAgICAgIDs7 IHRoaXMgYWxsb3dzIHByb2dyYW1zIGV4cGVjdGluZyB0aGF0IHBhdGggdG8gY29udGludWUgd29y a2luZyBhcw0KICAgICAgICAgICAgIDs7IGV4cGVjdGVkIHdpdGhpbiBhIGNvbnRhaW5lci4NCkBA IC03NDMsNyArODQ4LDggQEAgKGRlZmluZSogKGxhdW5jaC1lbnZpcm9ubWVudC9jb250YWluZXIg IzprZXkgY29tbWFuZCBiYXNoIHVzZXIgdXNlci1tYXBwaW5ncw0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChpZiBsaW5rLXByb2ZpbGU/DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIGhvbWUtZGlyICIvLmd1aXgtcHJvZmlsZSIp DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUpDQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3QgIzpwdXJlPyAjZikpKQ0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0ICM6cHVyZT8gI2YNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjOmVtdWxhdGUtZmhzPyBlbXVsYXRlLWZocz8pKSkN CiAgICAgICAgICAgIzpndWVzdC11aWQgdWlkDQogICAgICAgICAgICM6Z3Vlc3QtZ2lkIGdpZA0K ICAgICAgICAgICAjOm5hbWVzcGFjZXMgKGlmIG5ldHdvcms/DQpAQCAtODY3LDE2ICs5NzMsMTcg QEAgKGRlZmluZSAoZ3VpeC1lbnZpcm9ubWVudCogb3B0cykNCiAgICJSdW4gdGhlICdndWl4IGVu dmlyb25tZW50JyBjb21tYW5kIG9uIE9QVFMsIGFuIGFsaXN0IHJlc3VsdGluZyBmb3INCiBjb21t YW5kLWxpbmUgb3B0aW9uIHByb2Nlc3Npbmcgd2l0aCAncGFyc2UtY29tbWFuZC1saW5lJy4iDQog ICAod2l0aC1lcnJvci1oYW5kbGluZw0KLSAgICAobGV0KiAoKHB1cmU/ICAgICAgKGFzc29jLXJl ZiBvcHRzICdwdXJlKSkNCi0gICAgICAgICAgIChjb250YWluZXI/IChhc3NvYy1yZWYgb3B0cyAn Y29udGFpbmVyPykpDQotICAgICAgICAgICAobGluay1wcm9mPyAoYXNzb2MtcmVmIG9wdHMgJ2xp bmstcHJvZmlsZT8pKQ0KLSAgICAgICAgICAgKG5ldHdvcms/ICAgKGFzc29jLXJlZiBvcHRzICdu ZXR3b3JrPykpDQotICAgICAgICAgICAobm8tY3dkPyAgICAoYXNzb2MtcmVmIG9wdHMgJ25vLWN3 ZD8pKQ0KLSAgICAgICAgICAgKHVzZXIgICAgICAgKGFzc29jLXJlZiBvcHRzICd1c2VyKSkNCi0g ICAgICAgICAgIChib290c3RyYXA/IChhc3NvYy1yZWYgb3B0cyAnYm9vdHN0cmFwPykpDQotICAg ICAgICAgICAoc3lzdGVtICAgICAoYXNzb2MtcmVmIG9wdHMgJ3N5c3RlbSkpDQotICAgICAgICAg ICAocHJvZmlsZSAgICAoYXNzb2MtcmVmIG9wdHMgJ3Byb2ZpbGUpKQ0KLSAgICAgICAgICAgKGNv bW1hbmQgICAgKG9yIChhc3NvYy1yZWYgb3B0cyAnZXhlYykNCisgICAgKGxldCogKChwdXJlPyAg ICAgICAgKGFzc29jLXJlZiBvcHRzICdwdXJlKSkNCisgICAgICAgICAgIChjb250YWluZXI/ICAg KGFzc29jLXJlZiBvcHRzICdjb250YWluZXI/KSkNCisgICAgICAgICAgIChsaW5rLXByb2Y/ICAg KGFzc29jLXJlZiBvcHRzICdsaW5rLXByb2ZpbGU/KSkNCisgICAgICAgICAgIChuZXR3b3JrPyAg ICAgKGFzc29jLXJlZiBvcHRzICduZXR3b3JrPykpDQorICAgICAgICAgICAobm8tY3dkPyAgICAg IChhc3NvYy1yZWYgb3B0cyAnbm8tY3dkPykpDQorICAgICAgICAgICAoZW11bGF0ZS1maHM/IChh c3NvYy1yZWYgb3B0cyAnZW11bGF0ZS1maHM/KSkNCisgICAgICAgICAgICh1c2VyICAgICAgICAg KGFzc29jLXJlZiBvcHRzICd1c2VyKSkNCisgICAgICAgICAgIChib290c3RyYXA/ICAgKGFzc29j LXJlZiBvcHRzICdib290c3RyYXA/KSkNCisgICAgICAgICAgIChzeXN0ZW0gICAgICAgKGFzc29j LXJlZiBvcHRzICdzeXN0ZW0pKQ0KKyAgICAgICAgICAgKHByb2ZpbGUgICAgICAoYXNzb2MtcmVm IG9wdHMgJ3Byb2ZpbGUpKQ0KKyAgICAgICAgICAgKGNvbW1hbmQgIChvciAoYXNzb2MtcmVmIG9w dHMgJ2V4ZWMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgU3Bhd24gYSBzaGVsbCBp ZiB0aGUgdXNlciBkaWRuJ3Qgc3BlY2lmeQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7 IGFueXRoaW5nIGluIHBhcnRpY3VsYXIuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlm IGNvbnRhaW5lcj8NCkBAIC05MTUsMTIgKzEwMjIsMjIgQEAgKGRlZmluZSAoZ3VpeC1lbnZpcm9u bWVudCogb3B0cykNCiAgICAgICAgIChsZWF2ZSAoR18gIictLXVzZXInIGNhbm5vdCBiZSB1c2Vk IHdpdGhvdXQgJy0tY29udGFpbmVyJ34lIikpKQ0KICAgICAgICh3aGVuIChhbmQgKG5vdCBjb250 YWluZXI/KSBuby1jd2Q/KQ0KICAgICAgICAgKGxlYXZlIChHXyAiLS1uby1jd2QgY2Fubm90IGJl IHVzZWQgd2l0aG91dCAtLWNvbnRhaW5lcn4lIikpKQ0KKyAgICAgICh3aGVuIChhbmQgKG5vdCBj b250YWluZXI/KSBlbXVsYXRlLWZocz8pDQorICAgICAgICAobGVhdmUgKEdfICInLS1lbXVsYXRl LWZocycgY2Fubm90IGJlIHVzZWQgd2l0aG91dCAnLS1jb250YWluZXJ+JyUiKSkpDQogDQogDQog ICAgICAgKHdpdGgtc3RvcmUvbWF5YmUgc3RvcmUNCiAgICAgICAgICh3aXRoLXN0YXR1cy12ZXJi b3NpdHkgKGFzc29jLXJlZiBvcHRzICd2ZXJib3NpdHkpDQogICAgICAgICAgIChkZWZpbmUgbWFu aWZlc3QtZnJvbS1vcHRzDQotICAgICAgICAgICAgKG9wdGlvbnMvcmVzb2x2ZS1wYWNrYWdlcyBz dG9yZSBvcHRzKSkNCisgICAgICAgICAgICAob3B0aW9ucy9yZXNvbHZlLXBhY2thZ2VzDQorICAg ICAgICAgICAgIHN0b3JlDQorICAgICAgICAgICAgIDs7IEZvciBhbiBGSFMtY29udGFpbmVyLCBh ZGQgdGhlIChoaWRkZW4pIHBhY2thZ2UgZ2xpYmMtZm9yLWZocw0KKyAgICAgICAgICAgICA7OyB3 aGljaCB1c2VzIHRoZSBnbG9iYWwgY2FjaGUgYXQgL2V0Yy9sZC5zby5jYWNoZS4NCisgICAgICAg ICAgICAgKGlmIGVtdWxhdGUtZmhzPw0KKyAgICAgICAgICAgICAgICAgKGFsaXN0LWNvbnMgJ2V4 cHJlc3Npb24NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoYWQtaG9jLXBhY2thZ2Ug IihAQCAoZ251IHBhY2thZ2VzIGJhc2UpIGdsaWJjLWZvci1maHMpIikNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9wdHMpDQorICAgICAgICAgICAgICAgICBvcHRzKSkpDQogDQogICAg ICAgICAgIChkZWZpbmUgbWFuaWZlc3QNCiAgICAgICAgICAgICAoaWYgcHJvZmlsZQ0KQEAgLTk5 NCw3ICsxMTExLDExIEBAIChkZWZpbmUgKGd1aXgtZW52aXJvbm1lbnQqIG9wdHMpDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICM6d2hpdGUtbGlz dCB3aGl0ZS1saXN0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICM6bGluay1wcm9maWxlPyBsaW5rLXByb2Y/DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICM6bmV0d29yaz8gbmV0d29yaz8NCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzptYXAt Y3dkPyAobm90IG5vLWN3ZD8pKSkpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICM6bWFwLWN3ZD8gKG5vdCBuby1jd2Q/KQ0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjOmVtdWxhdGUtZmhzPyBl bXVsYXRlLWZocz8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIzpzZXR1cC1ob29rIChpZiBlbXVsYXRlLWZocz8NCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlz dCBzZXR1cC1maHMgcHJvZmlsZSkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZikpKSkNCiANCiAgICAgICAgICAg ICAgICAgICAgKGVsc2UNCiAgICAgICAgICAgICAgICAgICAgIChyZXR1cm4NCmRpZmYgLS1naXQg YS90ZXN0cy9ndWl4LWVudmlyb25tZW50LWNvbnRhaW5lci5zaCBiL3Rlc3RzL2d1aXgtZW52aXJv bm1lbnQtY29udGFpbmVyLnNoDQppbmRleCAyZTIzOGM1MDFkLi4zMWU0MDk0MjBmIDEwMDY0NA0K LS0tIGEvdGVzdHMvZ3VpeC1lbnZpcm9ubWVudC1jb250YWluZXIuc2gNCisrKyBiL3Rlc3RzL2d1 aXgtZW52aXJvbm1lbnQtY29udGFpbmVyLnNoDQpAQCAtMTk3LDMgKzE5NywzNyBAQCB0aGVuIGZh bHNlOw0KIGVsc2UNCiAgICAgdGVzdCAkPyAtZ3QgMTI3DQogZmkNCisNCisjIFRlc3QgdGhlIEZp bGVzeXN0ZW0gSGllcmFyY2h5IFN0YW5kYXJkIChGSFMpIGNvbnRhaW5lciBvcHRpb24sIC0tZW11 bGF0ZS1maHMgKC1GKQ0KKw0KKyMgQXMgdGhpcyBvcHRpb24gcmVxdWlyZXMgYSBnbGliYyBwYWNr YWdlIChnbGliYy1mb3ItZmhzKSwgdHJ5IHRvIHJ1biB0aGVzZQ0KKyMgdGVzdHMgd2l0aCB0aGUg dXNlcidzIGdsb2JhbCBzdG9yZSB0byBtYWtlIGl0IGVhc2llciB0byBidWlsZCBvciBkb3dubG9h ZCBhDQorIyBzdWJzdGl0dXRlLg0KK3N0b3JlZGlyPSJgZ3VpbGUgLWMgJyh1c2UtbW9kdWxlcyAo Z3VpeCBjb25maWcpKShkaXNwbGF5ICVzdG9yZWRpciknYCINCitsb2NhbHN0YXRlZGlyPSJgZ3Vp bGUgLWMgJyh1c2UtbW9kdWxlcyAoZ3VpeCBjb25maWcpKShkaXNwbGF5ICVsb2NhbHN0YXRlZGly KSdgIg0KK05JWF9TVE9SRV9ESVI9IiRzdG9yZWRpciINCitHVUlYX0RBRU1PTl9TT0NLRVQ9IiRs b2NhbHN0YXRlZGlyL2d1aXgvZGFlbW9uLXNvY2tldC9zb2NrZXQiDQorZXhwb3J0IE5JWF9TVE9S RV9ESVIgR1VJWF9EQUVNT05fU09DS0VUDQorDQoraWYgISBndWlsZSAtYyAnKHVzZS1tb2R1bGVz IChndWl4KSkgKGV4aXQgKGZhbHNlLWlmLWV4Y2VwdGlvbiAob3Blbi1jb25uZWN0aW9uKSkpJw0K K3RoZW4NCisgICAgZXhpdCA3Nw0KK2ZpDQorDQorIyBUZXN0IHRoYXQgdGhlIGNvbnRhaW5lciBo YXMgRkhTIHNwZWNpZmljIGZpbGVzL2RpcmVjdG9yaWVzLiAgTm90ZSB0aGF0IC9iaW4NCisjIGV4 aXN0cyBpbiBhIG5vbi1GSFMgY29udGFpbmVyIGFzIGl0IHdpbGwgY29udGFpbiBzaCwgYSBzeW1s aW5rIHRvIHRoZSBiYXNoDQorIyBwYWNrYWdlLCBzbyB3ZSBkb24ndCB0ZXN0IGZvciBpdC4NCitn dWl4IGVudmlyb25tZW50IC1DIC0tZW11bGF0ZS1maHMgLS1hZC1ob2MgLS1ib290c3RyYXAgZ3Vp bGUtYm9vdHN0cmFwIFwNCisgICAgIC0tIGd1aWxlIC1jICcoZXhpdCAoYW5kIChmaWxlLWV4aXN0 cz8gIi9ldGMvbGQuc28uY2FjaGUiKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZp bGUtZXhpc3RzPyAiL2xpYiIpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZS1l eGlzdHM/ICIvc2JpbiIpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZS1leGlz dHM/ICIvdXNyL2JpbiIpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZS1leGlz dHM/ICIvdXNyL2luY2x1ZGUiKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUt ZXhpc3RzPyAiL3Vzci9saWIiKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUt ZXhpc3RzPyAiL3Vzci9saWJleGVjIikNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChm aWxlLWV4aXN0cz8gIi91c3Ivc2JpbiIpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo ZmlsZS1leGlzdHM/ICIvdXNyL3NoYXJlIikpKScNCisNCisjIFRlc3QgdGhhdCB0aGUgbGQgY2Fj aGUgd2FzIGdlbmVyYXRlZCBhbmQgY2FuIGJlIHN1Y2Nlc3NmdWxseSByZWFkLg0KK2d1aXggZW52 aXJvbm1lbnQgLUMgLS1lbXVsYXRlLWZocyAtLWFkLWhvYyAtLWJvb3RzdHJhcCBndWlsZS1ib290 c3RyYXAgXA0KKyAgICAgLS0gZ3VpbGUgLWMgJyhleGl0IChleGVjbHAgImxkY29uZmlnIiAiLXAi KSknDQotLSANCjIuMzcuMw0KDQo= --b1_L9kCBJd0i81PjSxeizf3BLpIsoL205W5wsmYNk6u2E--