<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>237107</bug_id>
          
          <creation_ts>2022-02-23 13:11:41 -0800</creation_ts>
          <short_desc>[GTK][WPE] generate-bundle: self-contained bundle for the MiniBrowser that can work on any distro</short_desc>
          <delta_ts>2022-04-12 07:06:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=231420</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=238976</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Alberto Lopez Perez">clopez</reporter>
          <assigned_to name="Carlos Alberto Lopez Perez">clopez</assigned_to>
          <cc>angelos</cc>
    
    <cc>aperez</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>darin</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>msaboff</cc>
    
    <cc>pnormand</cc>
    
    <cc>ysuzuki</cc>
    
    <cc>zdobersek</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1845290</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-02-23 13:11:41 -0800</bug_when>
    <thetext>The script generate-bundle allows to generate a bundle of &quot;jsc&quot; or &quot;MiniBrowser&quot;.

The script currently has support for two types of bundles

1)
--syslibs=generate-install-script will create a install script to install all the libraries the binary depends on, but this only works on Debian based distros.

Problem: It requires that the user runs the bundle on the same distro the bundle was created

2)
--syslibs=bundle-all

It will bundle all the libraries inside the bundle and will use those libraries instead of the system ones.

In theory this would allow to create a self-contained bundle that runs anywhere.

Problem: This is currently only working ok for jsc bundles. The MiniBrowser bundles are not working as expected
because there are many libraries (many opened via dlopen()) that the script doesn&apos;t capture correctly.
There are also issues with system resources (icons, fonts, etc)


So this bug is for allowing generate-bundle to create a bundle for the MiniBrowser with --syslibs=bundle-all
that can work on any distro without issues and bundles everything needed (including icons or fonts)

The goal is:

1) To replace the bundles at https://webkitgtk.org/built-products with one &quot;generic&quot; bundle that can work on any distro (Fedora, Ubuntu, Alpine, etc)
Currently we only support Ubuntu because we are generating the bundles on the &quot;packaging ubuntu&quot; bots at https://build.webkit.org/#/builders

2) To have the bundles based on the official builds (flatpak one).
That allows external CIs (https://wpt.fyi for example) to test the same build that we test (the official one)
Currently on the bundles uploaded at https://webkitgtk.org/built-products we don&apos;t enable all features we enable on the official build because Ubuntu doesn&apos;t have some requires dependencies (for example libsoup3)

3) Reduce maintenance 
That way we can remove the &quot;packaging ubuntu&quot; bots and generate the bundles on the release bot directly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845316</commentid>
    <comment_count>1</comment_count>
      <attachid>453027</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-02-23 14:28:02 -0800</bug_when>
    <thetext>Created attachment 453027
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845479</commentid>
    <comment_count>2</comment_count>
      <attachid>453064</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-02-23 18:57:17 -0800</bug_when>
    <thetext>Created attachment 453064
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845573</commentid>
    <comment_count>3</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-24 04:09:38 -0800</bug_when>
    <thetext>&gt; 1) To replace the bundles at https://webkitgtk.org/built-products with one &quot;generic&quot; bundle that can work on any distro (Fedora, Ubuntu, Alpine, etc)
Currently we only support Ubuntu because we are generating the bundles on the &quot;packaging ubuntu&quot; bots at https://build.webkit.org/#/builders

Will the new bundles remain usable within the Flatpak SDK runtime as they are currently?

I ask because the GNOME Web Canary relies on this assumption.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845853</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-02-24 17:42:48 -0800</bug_when>
    <thetext>(In reply to Philippe Normand from comment #3)
&gt; &gt; 1) To replace the bundles at https://webkitgtk.org/built-products with one &quot;generic&quot; bundle that can work on any distro (Fedora, Ubuntu, Alpine, etc)
&gt; Currently we only support Ubuntu because we are generating the bundles on
&gt; the &quot;packaging ubuntu&quot; bots at https://build.webkit.org/#/builders
&gt; 
&gt; Will the new bundles remain usable within the Flatpak SDK runtime as they
&gt; are currently?
&gt; 
&gt; I ask because the GNOME Web Canary relies on this assumption.

Yes, I think there will no be change regarding that.

AFAIK the built products used by GNOME Web Canary are the ones from the release bot which are uploaded to https://webkitgtk-release.igalia.com/built-products/ and those are different than the ones at https://webkitgtk.org/built-products

The ones at https://webkitgtk-release.igalia.com/built-products/ are produced in the release bot and only work if you run them inside flatpak. I don&apos;t intend to do any change to them, those are useful for sharing the built product between bots (for example for passing the built-product from the build-release to the test-release)

What this new patch adds is a bundle based on those built-products that also included all the system libraries from the flatpak inside the .zip .. so you can run it outside flatpak without needing flatpak. This bundle with those extra libraries is intended to be used in any system that doesn&apos;t want (or can&apos;t) depend on flatpak.
Running flatpak inside docker is a problem (requires a privileged docker container), and many third-party CIs like WPT run inside docker containers, so this bundle allows to work around that problem: you can download this .zip and execute it and it will work without issues. It is also lighter than the whole flatpak. The zip file with webkit and all the libraries and resources is around 250MB</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845934</commentid>
    <comment_count>5</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-25 00:40:24 -0800</bug_when>
    <thetext>(In reply to Carlos Alberto Lopez Perez from comment #4)
&gt; (In reply to Philippe Normand from comment #3)
&gt; &gt; &gt; 1) To replace the bundles at https://webkitgtk.org/built-products with one &quot;generic&quot; bundle that can work on any distro (Fedora, Ubuntu, Alpine, etc)
&gt; &gt; Currently we only support Ubuntu because we are generating the bundles on
&gt; &gt; the &quot;packaging ubuntu&quot; bots at https://build.webkit.org/#/builders
&gt; &gt; 
&gt; &gt; Will the new bundles remain usable within the Flatpak SDK runtime as they
&gt; &gt; are currently?
&gt; &gt; 
&gt; &gt; I ask because the GNOME Web Canary relies on this assumption.
&gt; 
&gt; Yes, I think there will no be change regarding that.
&gt; 
&gt; AFAIK the built products used by GNOME Web Canary are the ones from the
&gt; release bot which are uploaded to
&gt; https://webkitgtk-release.igalia.com/built-products/ and those are different
&gt; than the ones at https://webkitgtk.org/built-products
&gt; 
&gt; The ones at https://webkitgtk-release.igalia.com/built-products/ are
&gt; produced in the release bot and only work if you run them inside flatpak. I
&gt; don&apos;t intend to do any change to them, those are useful for sharing the
&gt; built product between bots (for example for passing the built-product from
&gt; the build-release to the test-release)
&gt; 

OK, thanks for clearing this out, I was confused.

&gt; What this new patch adds is a bundle based on those built-products that also
&gt; included all the system libraries from the flatpak inside the .zip .. so you
&gt; can run it outside flatpak without needing flatpak. This bundle with those
&gt; extra libraries is intended to be used in any system that doesn&apos;t want (or
&gt; can&apos;t) depend on flatpak.
&gt; Running flatpak inside docker is a problem (requires a privileged docker
&gt; container), and many third-party CIs like WPT run inside docker containers,
&gt; so this bundle allows to work around that problem

OK, I understand the intent now. I won&apos;t go against this approach, but did you know the SDK can be exported to Docker/OCI images too? I don&apos;t know if it&apos;s as light in terms of size though, compared to what you came up with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846602</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-02-28 05:06:12 -0800</bug_when>
    <thetext>&gt; OK, I understand the intent now. I won&apos;t go against this approach, but did you know the SDK can be exported to Docker/OCI images too? I don&apos;t know if it&apos;s as light in terms of size though, compared to what you came up with.

Thanks for the info, but AFAIK exporting the SDK to docker images won&apos;t be useful for the use case that this approach tries to serve.

This external CIs want to run all the testing inside their own docker images. For example, the WPT CI runs inside their own docker image based on Ubuntu-20.04 and it won&apos;t be feasible for them to use a different docker image just for the webkit-linux tests, as they use the same docker image for all the Linux-based browser testing. And executing a docker image inside another docker (nested docker) requires a privileged docker container (AFAIK), so it will have the same issues than trying to run flatpak inside docker.

I have uploaded here: https://people.igalia.com/clopez/wkbug/237107/ a test build of what this script produces. In theory you should be able to uncompress this and run it in any distro without needing to install anything or requiring any extra privilege (like sudo).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846606</commentid>
    <comment_count>7</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-28 05:19:03 -0800</bug_when>
    <thetext>I&apos;m still learning the docker way of things, but maybe a multi-stage setup could work for them? https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846627</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-02-28 06:54:35 -0800</bug_when>
    <thetext>(In reply to Philippe Normand from comment #7)
&gt; I&apos;m still learning the docker way of things, but maybe a multi-stage setup
&gt; could work for them?
&gt; https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-
&gt; stage-builds

I don&apos;t see how that will be useful in this case. The browser is not part of the image. The browser gets downloaded at test time, uncompressed and executed. Running apt-get to install dependencies at test time is ok, but it is not ok to execute another container (calling syscall pivot_root) because docker doesn&apos;t allow that unless it is run as privileged.

Chrome and Firefox provide binaries that can work on almost any distro and that don&apos;t require setting up a container to run, that is what this bundle intends to do as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846629</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-02-28 06:56:23 -0800</bug_when>
    <thetext>Note also that this patch will allow to remove the jhbuild insfrastructure from WebKit, since we are currently only keeping the jhbuild insfrastructure for the &quot;ubuntu packaging&quot; bots that will be deprecated by this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847497</commentid>
    <comment_count>10</comment_count>
      <attachid>453064</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-02 10:41:13 -0800</bug_when>
    <thetext>Comment on attachment 453064
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=453064&amp;action=review

LGTM at first glance, I didn&apos;t know about these scripts before, so perhaps you want a review from someone more familiar with that code base. I worry a bit about hardcoding so many paths in the script, I&apos;m afraid this could easily bitrot. Do you think some kind of unit test could be added, or is this un-realistic?

&gt; Source/WebCore/platform/network/soup/SoupNetworkSession.cpp:143
&gt; +    GUniqueOutPtr&lt;GError&gt; error;

Move this to the if ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849407</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-03-08 14:24:36 -0800</bug_when>
    <thetext>(In reply to Philippe Normand from comment #10)
&gt; Comment on attachment 453064 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=453064&amp;action=review
&gt; 
&gt; LGTM at first glance, I didn&apos;t know about these scripts before, so perhaps
&gt; you want a review from someone more familiar with that code base. I worry a
&gt; bit about hardcoding so many paths in the script, I&apos;m afraid this could
&gt; easily bitrot. Do you think some kind of unit test could be added, or is
&gt; this un-realistic?
&gt; 

I have reworked a few functions to avoid hardcoding as much as possible the extra library names and also added extra checks to ensure that it either finds the libraries or exits with error.

The script tries to check every path and if something is not found raises an error.

However, to be on the safe side, I guess it can be worth to add an extra step on the bots to QA the generated bundle (something like loading a few test case with webdriver to ensure the browser loads and works as expected) before uploading the bundle. But I think that will be better done in a different patch after this lands because i will need to implement something like a custom webdriver runner script for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849410</commentid>
    <comment_count>12</comment_count>
      <attachid>454153</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-03-08 14:29:54 -0800</bug_when>
    <thetext>Created attachment 454153
Patch

diff to previous patch: http://sprunge.us/1K7RqW?diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851425</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-03-15 12:10:36 -0700</bug_when>
    <thetext>ping reviewers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851588</commentid>
    <comment_count>14</comment_count>
      <attachid>454153</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-03-15 16:52:15 -0700</bug_when>
    <thetext>Comment on attachment 454153
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=454153&amp;action=review

Seems like a major effort to avoid using flatpak, but whatever....

&gt; Tools/Scripts/generate-bundle:824
&gt; +            # See: https://github.com/p11-glue/p11-kit/issues/68
&gt; +            # Starting a p11-kit server is problematic for the use case of the bundle, and also will only work if the host is configured to use p11-kit
&gt; +            # So we take a different approach here.
&gt; +            # 1. We generate a bundle-ca-certificates.pem file with all the certs of the system were the bundle was generated and we ship this file
&gt; +            # 2. At runtime we look for the system TLS ca-bundle.pem file and we use it. If we can&apos;t find it then we default to using the one shipped inside the bundle.
&gt; +            # We pass the path to the TLS ca-bundle.pem file using the env var WEBKIT_TLS_CAFILE_PEM
&gt; +            # The host p11-kit setup may still work if it is using the same paths for loading the p11-kit modules, but otherwise it will fail to load the modules.
&gt; +            # That is ok, since we don&apos;t need anymore a working p11-kit setup. If it works it will be used, but if not we have a fallback.
&gt; +            # To debug this is useful to export P11_KIT_DEBUG=all
&gt; +            # This approach also allows this bundle script go generate a working bundle when gnutls is not configured to use p11-kit.

There is a downside: this means GTlsConnection has to rely on GTlsDatabase to perform certificate verification, so you lose the benefit of &quot;TLS session context&quot; in performing the certificate verification. GTlsDatabase is just not as smart as GTlsConnection can be. For example, certificate revocation checks (specifically stapled OCSP) will not be performed if you use your own GTlsDatabase (including via setting libsoup&apos;s ssl-ca-file). Certificate basic constraints won&apos;t be honored either: believe it or not, GTlsDatabase will happily accept X.509 certificates that are only valid for S/MIME and not for TLS, whereas GTlsConnection can be smarter. These are extremely surprising and non-intuitive consequences, but I can&apos;t think of any way to fix it, so I&apos;ve resorted to just documenting it and hoping people will notice and think twice.

I&apos;m not saying &quot;don&apos;t do it like this&quot; because there&apos;s probably no other way to accomplish what you&apos;re trying to do. But maybe add a warning comment. Instead of just &quot;Optionally load a custom path with the TLS CAFile. This is used on the GTK/WPE bundles. See script generate-bundle&quot; you could also add &quot;Don&apos;t ever enable this outside DEVELOPER_MODE because using a non-default TLS database has surprising undesired effects on how certificate verification is performed. See https://gitlab.gnome.org/GNOME/glib/-/commit/82999879bcc53c0cdc16c01b62c0224081521dcf for details.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851773</commentid>
    <comment_count>15</comment_count>
      <attachid>454153</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-03-16 07:01:14 -0700</bug_when>
    <thetext>Comment on attachment 454153
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=454153&amp;action=review

&gt; Source/WebCore/platform/network/soup/SoupNetworkSession.cpp:151
&gt; +#if ENABLE(DEVELOPER_MODE)
&gt; +    // Optionally load a custom path with the TLS CAFile. This is used on the GTK/WPE bundles. See script generate-bundle
&gt; +    const char* customTLSCAFile = g_getenv(&quot;WEBKIT_TLS_CAFILE_PEM&quot;);
&gt; +#if USE(SOUP2)
&gt; +    if (customTLSCAFile)
&gt; +        g_object_set(m_soupSession.get(), &quot;ssl-ca-file&quot;, customTLSCAFile, NULL);
&gt; +#else
&gt; +    if (customTLSCAFile) {
&gt; +        GUniqueOutPtr&lt;GError&gt; error;
&gt; +        GRefPtr&lt;GTlsDatabase&gt; customTLSDB = adoptGRef(g_tls_file_database_new(customTLSCAFile, &amp;error.outPtr()));
&gt; +        if (error)
&gt; +            WTFLogAlways(&quot;Failed to load TLS database \&quot;%s\&quot;: %s&quot;, customTLSCAFile, error-&gt;message);
&gt; +        soup_session_set_tls_database(m_soupSession.get(), customTLSDB.get());
&gt; +    }
&gt; +#endif // USE(SOUP2)
&gt; +#endif // ENABLE(DEVELOPER_MODE)

I don&apos;t like this either, but if there&apos;s no other option... Anyway, we can reduce the ifdef code here. Note that soup2 also has the tls-databse property, we can reduce the ifdef to set_tls_database or g_object_set. Or even better we can add soup_session_set_tls_database for soup2 in SoupVersioning.h and then we don&apos;t need any ifdef.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1854148</commentid>
    <comment_count>16</comment_count>
    <who name="Angelos Oikonomopoulos">angelos</who>
    <bug_when>2022-03-23 06:51:22 -0700</bug_when>
    <thetext>Took a look at the parts of the code I&apos;ve worked on before. They look reasonable, but not sure about the intent behind some of these changes.

What&apos;s the idea behind the separation between lib and sys/lib in the bundle? I could only find

&gt; # We only want to separate the libraries in lib and sys/lib for MiniBrowser and &apos;all&apos; bundles

but I&apos;m not immediately clear as to the &apos;why&apos;.

A lot of effort goes into implementing patchelf_setinterpreter_relativepath; the only motivation I could find is

&gt; # If we have patched the binaries to use a relative relpath then load the binary directly without prefixing it with the interpreter (it allows the process to use the correct progname)

Presumably this isn&apos;t just a cosmetic change? If so, would be good to know what depends on this.

Conversely, if patchelf_setinterpreter_relativepath is necessary, would it make sense to streamline the logic and always do that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1854154</commentid>
    <comment_count>17</comment_count>
      <attachid>454153</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-03-23 07:13:18 -0700</bug_when>
    <thetext>Comment on attachment 454153
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=454153&amp;action=review

&gt;&gt; Source/WebCore/platform/network/soup/SoupNetworkSession.cpp:151
&gt;&gt; +#endif // ENABLE(DEVELOPER_MODE)
&gt; 
&gt; I don&apos;t like this either, but if there&apos;s no other option... Anyway, we can reduce the ifdef code here. Note that soup2 also has the tls-databse property, we can reduce the ifdef to set_tls_database or g_object_set. Or even better we can add soup_session_set_tls_database for soup2 in SoupVersioning.h and then we don&apos;t need any ifdef.

Also, as a reminder: to make completely relocatable binaries which do not depend on an
external script pre-setting certain environment variables (which is finicky), in Linux
a binary can readlink(&quot;/proc/self/exe&quot;, ...) to determine its own location, and derive
paths from the result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855859</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-03-28 17:44:49 -0700</bug_when>
    <thetext>(In reply to Angelos Oikonomopoulos from comment #16)
&gt; Took a look at the parts of the code I&apos;ve worked on before. They look
&gt; reasonable, but not sure about the intent behind some of these changes.
&gt; 
&gt; What&apos;s the idea behind the separation between lib and sys/lib in the bundle?
&gt; I could only find
&gt; 
&gt; &gt; # We only want to separate the libraries in lib and sys/lib for MiniBrowser and &apos;all&apos; bundles
&gt; 
&gt; but I&apos;m not immediately clear as to the &apos;why&apos;.
&gt; 

I did this separation with the idea (in the future) of splitting the zip in two files: a flatpak_core_$uniquehash.zip and a minibrowser_gtk_rxx.zip bundle where the minibrowser_gtk_rxx.zip one includes a script to download its respective flatpak_core_$uniquehash.zip before starting the browser.

If you compare the files inside the bundle on revision X with the files on a bundle for revision X+1, you will see that all the libraries that go into sys/ are identical, so this can be seized to optimize disk space on the server that hosts the bundles

The part of the bundle that goes into flatpak_core_rxxx.zip should only change when the flatpak SDK is updated, which is not too often (maybe once per month)
 
So instead of storing a bundle of 200MB per revision, you can end storing a bundle of 50MB per revision and a flatpak_core_$uniquehash.zip of 150MB once per month.


&gt; A lot of effort goes into implementing patchelf_setinterpreter_relativepath;
&gt; the only motivation I could find is
&gt; 
&gt; &gt; # If we have patched the binaries to use a relative relpath then load the binary directly without prefixing it with the interpreter (it allows the process to use the correct progname)
&gt; 
&gt; Presumably this isn&apos;t just a cosmetic change? If so, would be good to know
&gt; what depends on this.
&gt; 

There are two motivations behind this change:

1. The main one: It allows to use the real process name (like MiniBrowser or WebKitWebProcess) which then makes things less confusing.. seeing a process named ld-linux-x86-64.so.2 is a bit confusing. 

2. A secondary one: The gstreamer libraries at startup call a process named &apos;gst-plugin-scanner&apos; that inspects all gst plugins and builds a db/cache with them.. so if i didn&apos;t changed the interpreter on that &apos;gst-plugin-scanner&apos; program then i would have to wrap it on another shell script.

&gt; Conversely, if patchelf_setinterpreter_relativepath is necessary, would it
&gt; make sense to streamline the logic and always do that?

When I uploaded the initial patch here, the EWS for jsc-mips tests broke because I initially applied this change also to the script bundle-binary that it uses. I suspect the breakage was caused because patchelf doesn&apos;t work well in MIPS, but I&apos;m not sure. For example, this fixes https://github.com/NixOS/patchelf/pull/180 are still not present in the version of patchelf we ship on the flatpak (0.10)

So I&apos;m keeping this as an option for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855863</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-03-28 17:55:08 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #14)
&gt; [...]
&gt; I&apos;m not saying &quot;don&apos;t do it like this&quot; because there&apos;s probably no other way
&gt; to accomplish what you&apos;re trying to do. But maybe add a warning comment.
&gt; Instead of just &quot;Optionally load a custom path with the TLS CAFile. This is
&gt; used on the GTK/WPE bundles. See script generate-bundle&quot; you could also add
&gt; &quot;Don&apos;t ever enable this outside DEVELOPER_MODE because using a non-default
&gt; TLS database has surprising undesired effects on how certificate
&gt; verification is performed. See
&gt; https://gitlab.gnome.org/GNOME/glib/-/commit/
&gt; 82999879bcc53c0cdc16c01b62c0224081521dcf for details.&quot;

Really interesting, thanks for the info. I will add a comment on the code.

(In reply to Carlos Garcia Campos from comment #15)
&gt; [...]
&gt; I don&apos;t like this either, but if there&apos;s no other option... Anyway, we can
&gt; reduce the ifdef code here. Note that soup2 also has the tls-databse
&gt; property, we can reduce the ifdef to set_tls_database or g_object_set. Or
&gt; even better we can add soup_session_set_tls_database for soup2 in
&gt; SoupVersioning.h and then we don&apos;t need any ifdef.

I&apos;m uploading a new version of the patch with this change. Thanks for the tip!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855864</commentid>
    <comment_count>20</comment_count>
      <attachid>455975</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-03-28 17:56:39 -0700</bug_when>
    <thetext>Created attachment 455975
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855969</commentid>
    <comment_count>21</comment_count>
      <attachid>456010</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-03-29 03:07:46 -0700</bug_when>
    <thetext>Created attachment 456010
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1856413</commentid>
    <comment_count>22</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-30 09:25:15 -0700</bug_when>
    <thetext>Let&apos;s try this! rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1856502</commentid>
    <comment_count>23</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-03-30 11:39:52 -0700</bug_when>
    <thetext>Committed r292109 (249028@trunk): &lt;https://commits.webkit.org/249028@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1859540</commentid>
    <comment_count>24</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-04-07 17:51:56 -0700</bug_when>
    <thetext>Committed r292584 (249417@trunk): &lt;https://commits.webkit.org/249417@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860660</commentid>
    <comment_count>25</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-04-12 07:06:47 -0700</bug_when>
    <thetext>Committed r292769 (249553@trunk): &lt;https://commits.webkit.org/249553@trunk&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453027</attachid>
            <date>2022-02-23 14:28:02 -0800</date>
            <delta_ts>2022-02-23 18:56:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237107-20220223222800.patch</filename>
            <type>text/plain</type>
            <size>80841</size>
            <attacher name="Carlos Alberto Lopez Perez">clopez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZmNWQxZWIzMmM4NmQ2
Y2U2ZGNlMzY4YzViNzZjZTI0ZmQyMTMxYi4uYWZhODkxZGNiNjhhNjY3NTNlYmUxZmM5ZTc4N2Ew
ZTdkMjcyODUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIyLTAyLTIzICBDYXJs
b3MgQWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtH
VEtdW1dQRV0gZ2VuZXJhdGUtYnVuZGxlOiBzZWxmLWNvbnRhaW5lZCBidW5kbGUgZm9yIHRoZSBN
aW5pQnJvd3NlciB0aGF0IGNhbiB3b3JrIG9uIGFueSBkaXN0cm8KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzEwNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gY2hhbmdlIGlu
IGJlaGF2aW91ci4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29y
a1Nlc3Npb24uY3BwOiBBbGxvdyB0byBsb2FkIHRoZSBUTFMgZGF0YWJhc2Ugc3BlY2lmaWVkIG9u
IHRoZQorICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBXRUJLSVRfVExTX0NBRklMRV9QRU0g
d2hlbiBERVZFTE9QRVJfTU9ERSBpcyBlbmFibGVkCisgICAgICAgIChXZWJDb3JlOjpTb3VwTmV0
d29ya1Nlc3Npb246OlNvdXBOZXR3b3JrU2Vzc2lvbik6CisKIDIwMjItMDItMjMgIEFsYW4gQnVq
dGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtJRkNdW0ludGVncmF0aW9uXSBMaW5l
TGF5b3V0OjpmaXJzdExpbmVQaHlzaWNhbEJhc2VsaW5lL2xhc3RMaW5lTG9naWNhbEJhc2VsaW5l
IHNob3VsZCBmbGlwIGJveCBiYXNlbGluZSB2YWx1ZSBmb3IgdmVydGljYWwtbHIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Np
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3Jr
U2Vzc2lvbi5jcHAKaW5kZXggOWViMzE2ZDJhMGZiYWRmNTQ3ZTc5NDU3NWM3MDFjYzQxZDlhZDcx
Yi4uZGNiNzhmMDY4ZGY2MjFmNDhmOTkwNjE1YjU0NTRkZDU2NDViYmQ1NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3Jr
U2Vzc2lvbi5jcHAKQEAgLTEzMyw2ICsxMzMsMjMgQEAgU291cE5ldHdvcmtTZXNzaW9uOjpTb3Vw
TmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIGlmIChzb3VwX2F1
dGhfbmVnb3RpYXRlX3N1cHBvcnRlZCgpICYmICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQog
ICAgICAgICBzb3VwX3Nlc3Npb25fYWRkX2ZlYXR1cmVfYnlfdHlwZShtX3NvdXBTZXNzaW9uLmdl
dCgpLCBTT1VQX1RZUEVfQVVUSF9ORUdPVElBVEUpOwogCisjaWYgRU5BQkxFKERFVkVMT1BFUl9N
T0RFKQorICAgIC8vIE9wdGlvbmFsbHkgbG9hZCBhIGN1c3RvbSBwYXRoIHdpdGggdGhlIFRMUyBD
QUZpbGUuIFRoaXMgaXMgdXNlZCBvbiB0aGUgR1RLL1dQRSBidW5kbGVzLiBTZWUgc2NyaXB0IGdl
bmVyYXRlLWJ1bmRsZQorICAgIGNvbnN0IGNoYXIqIGN1c3RvbVRMU0NBRmlsZSA9IGdfZ2V0ZW52
KCJXRUJLSVRfVExTX0NBRklMRV9QRU0iKTsKKyNpZiBVU0UoU09VUDIpCisgICAgaWYgKGN1c3Rv
bVRMU0NBRmlsZSkKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fc291cFNlc3Npb24uZ2V0KCksICJz
c2wtY2EtZmlsZSIsIGN1c3RvbVRMU0NBRmlsZSwgTlVMTCk7CisjZWxzZQorICAgIEdVbmlxdWVP
dXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBpZiAoY3VzdG9tVExTQ0FGaWxlKSB7CisgICAgICAg
IEdSZWZQdHI8R1Rsc0RhdGFiYXNlPiBjdXN0b21UTFNEQiA9IGFkb3B0R1JlZihnX3Rsc19maWxl
X2RhdGFiYXNlX25ldyhjdXN0b21UTFNDQUZpbGUsICZlcnJvci5vdXRQdHIoKSkpOworICAgICAg
ICBpZiAoZXJyb3IpCisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIkZhaWxlZCB0byBsb2FkIFRM
UyBkYXRhYmFzZSBcIiVzXCI6ICVzIiwgY3VzdG9tVExTQ0FGaWxlLCBlcnJvci0+bWVzc2FnZSk7
CisgICAgICAgIHNvdXBfc2Vzc2lvbl9zZXRfdGxzX2RhdGFiYXNlKG1fc291cFNlc3Npb24uZ2V0
KCksIGN1c3RvbVRMU0RCLmdldCgpKTsKKyAgICB9CisjZW5kaWYgLy8gVVNFKFNPVVAyKQorI2Vu
ZGlmIC8vIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKKwogICAgIHNldHVwTG9nZ2VyKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmMDUx
ODEyYzI5NTliZWViZGUzZTgzMzNmNTQ4YzliZmQyZjQzNGNiLi41YjIzZGRlNmQ1Mzk0YTNmY2Zj
MTMxZmY4NWU0ZWQzYjdiYjY4ZjQ2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMjItMDItMjMgIENhcmxvcyBBbGJl
cnRvIExvcGV6IFBlcmV6ICA8Y2xvcGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BF
XSBnZW5lcmF0ZS1idW5kbGU6IHNlbGYtY29udGFpbmVkIGJ1bmRsZSBmb3IgdGhlIE1pbmlCcm93
c2VyIHRoYXQgY2FuIHdvcmsgb24gYW55IGRpc3RybworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIGluIHRoZSBnZW5lcmF0ZS1i
dW5kbGUgc2NyaXB0IHRoZSBzdXBwb3J0IHRvIGdlbmVyYXRlIGEgYnVuZGxlIHNlbGYtY29udGFp
bmVkIHRoYXQgY2FuIHdvcmsgb24gYW55IGRpc3Ryby4KKyAgICAgICAgVG8gYWNoaWV2ZSB0aGF0
IHRoZSBidW5kbGUgY29udGFpbnMgYWxsIHRoZSByZXF1aXJlZCBzeXN0ZW0gbGlicmFyaWVzIGlu
c2lkZSB0aGUgYnVuZGxlIChldmVuIHRoZSBncmFwaGljcyBkcml2ZXJzKS4KKyAgICAgICAgSXQg
YWxzbyBjb250YWlucyB0aGUgcmVxdWlyZWQgc3lzdGVtIHJlc291cmNlczogaWNvbnMgKGZvciBn
dGspLCBmb250Y29uZmlnIGZpbGVzIGFuZCBmb250cywgZXRjLgorICAgICAgICBBIGN1c3RvbSBk
bG9wZW53cmFwIGxpYnJhcnkgaXMgYWxzbyBhZGRlZCBhbmQgcHJlbG9hZGVkLiBUaGUgcHVycG9z
ZSBvZiB0aGlzIGxpYnJhcnkgaXMgdG8gd3JhcCBhbGwgZGxvcGVuKCkgY2FsbHMKKyAgICAgICAg
YW5kIHJld3JpdGUgdGhlIHBhdGhzIHRvIGVuc3VyZSB0aGF0IG9ubHkgbGlicmFyaWVzIGluc2lk
ZSB0aGUgYnVuZGxlIGFyZSBsb2FkZWQuCisKKyAgICAgICAgVGhlIGJ1bmRsZSBoYXMgYmVlbiB0
ZXN0ZWQgdG8gYmUgZ2VuZXJhdGVkIHdpdGggdGhlIGZsYXRwYWsgYnVpbGQgYW5kIGV4ZWN1dGVk
IG9uIGEgcmFuZ2Ugb2YgdmVyeSBkaWZmZXJlbnQgZGlzdHJpYnV0aW9ucworICAgICAgICB3aXRo
IHN1Y2VzczogRmVkb3JhLCBVYnVudHUsIERlYmlhbiwgQWxwaW5lLCBDZW50T1MgKGRpZmZlcmVu
dCB2ZXJzaW9ucyBvZiBlYWNoKQorCisgICAgICAgICogU2NyaXB0cy9idW5kbGUtYmluYXJ5Ogor
ICAgICAgICAqIFNjcmlwdHMvZ2VuZXJhdGUtYnVuZGxlOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvYmluYXJ5X2J1bmRsaW5nL2J1bmRsZS5weToKKyAgICAgICAgKEJpbmFyeUJ1bmRsZXIp
OgorICAgICAgICAoQmluYXJ5QnVuZGxlci5fX2luaXRfXyk6CisgICAgICAgIChCaW5hcnlCdW5k
bGVyLl9pc19zeXN0ZW1fZGVwKToKKyAgICAgICAgKEJpbmFyeUJ1bmRsZXIuc2V0X3VzZV9zeXNf
bGliX2RpcmVjdG9yeSk6CisgICAgICAgIChCaW5hcnlCdW5kbGVyLmNvcHlfYW5kX21heWJlX3N0
cmlwX3BhdGNoZWxmKToKKyAgICAgICAgKEJpbmFyeUJ1bmRsZXIuZGVzdGluYXRpb25fZGlyKToK
KyAgICAgICAgKEJpbmFyeUJ1bmRsZXIuZ2VuZXJhdGVfd3JhcHBlcl9zY3JpcHQpOgorICAgICAg
ICAoQmluYXJ5QnVuZGxlci5jb3B5X2FuZF9yZW1vdmVfcnBhdGgpOiBEZWxldGVkLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5nL2Rsb3BlbndyYXAvTWFrZWZpbGU6
IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5nL2Rsb3Bl
bndyYXAvUkVBRE1FLnR4dDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iaW5h
cnlfYnVuZGxpbmcvZGxvcGVud3JhcC9kbG9wZW53cmFwLmM6IEFkZGVkLgorICAgICAgICAoZGxv
cGVuX3dyYXBwZXJfcGF0aF9qb2luKToKKyAgICAgICAgKGlzX2Rpcik6CisgICAgICAgIChkbG9w
ZW5fd3JhcHBlcl9yZWN1cnNpdmVfZmluZCk6CisgICAgICAgIChkbG9wZW5fd3JhcHBlcl9nZXRf
cGF0aF9mb3JfZmlsZV91bmRlcl9kaXIpOgorICAgICAgICAoZGxvcGVuX3dyYXBwZXJfZmluZF9s
aWJyYXJ5X29uX2xpYnBhdGgpOgorICAgICAgICAoZGxvcGVuKToKKyAgICAgICAgKGRsbW9wZW4p
OgorICAgICAgICAoZGxlcnJvcik6CisKIDIwMjItMDItMjMgIFdlbnNvbiBIc2llaCAgPHdlbnNv
bl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAoMjg4OTI1Pyk6IFtpT1Nd
IFRlc3RXZWJLaXRBUEkuUmVxdWVzdFRleHRJbnB1dENvbnRleHQuVGV4dEludGVyYWN0aW9uX0Zv
Y3VzaW5nUmVhZE9ubHlFbGVtZW50U2hvdWxkU2Nyb2xsVG9SZXZlYWwgaXMgZmFpbGluZwpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9idW5kbGUtYmluYXJ5IGIvVG9vbHMvU2NyaXB0cy9idW5k
bGUtYmluYXJ5CmluZGV4IGU3NmYzZmEwMTI0ZGZmNTQ4NjUwOWJkZmNmMTY3N2IyYmE1ZTMzMzEu
LjdkY2M5ZDAwNzhkZGJmODQ5MDI0ZDUyNmUxY2UxMjdlZmM3MjlhNGEgMTAwNzU1Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvYnVuZGxlLWJpbmFyeQorKysgYi9Ub29scy9TY3JpcHRzL2J1bmRsZS1iaW5h
cnkKQEAgLTQ2LDExICs0NiwxMSBAQCBkZWYgbWFpbigpOgogCiAgICAgaWYgaW50ZXJwcmV0ZXIg
aXMgTm9uZToKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDb3VsZCBub3QgZGV0ZXJtaW5l
IGludGVycHJldGVyIGZvciBiaW5hcnkgJXMiICUgb2JqZWN0KQotICAgIGJ1bmRsZXIgPSBCaW5h
cnlCdW5kbGVyKGFyZ3MuZGVzdF9kaXIsIEZhbHNlKQotICAgIGJ1bmRsZXIuY29weV9hbmRfcmVt
b3ZlX3JwYXRoKGludGVycHJldGVyLCB0eXBlPSdpbnRlcnByZXRlcicpCi0gICAgYnVuZGxlci5j
b3B5X2FuZF9yZW1vdmVfcnBhdGgoYXJncy5iaW5hcnksIHR5cGU9J2JpbicpCisgICAgYnVuZGxl
ciA9IEJpbmFyeUJ1bmRsZXIoYXJncy5kZXN0X2RpcikKKyAgICBidW5kbGVyLmNvcHlfYW5kX21h
eWJlX3N0cmlwX3BhdGNoZWxmKGludGVycHJldGVyLCB0eXBlPSdpbnRlcnByZXRlcicsIHN0cmlw
PUZhbHNlLCBwYXRjaGVsZl9yZW1vdmVycGF0aD1UcnVlLCBwYXRjaGVsZl9ub2RlZmF1bHRsaWI9
VHJ1ZSkKKyAgICBidW5kbGVyLmNvcHlfYW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKGFyZ3MuYmlu
YXJ5LCB0eXBlPSdiaW4nLCBzdHJpcD1GYWxzZSwgcGF0Y2hlbGZfcmVtb3ZlcnBhdGg9VHJ1ZSwg
cGF0Y2hlbGZfbm9kZWZhdWx0bGliPVRydWUpCiAgICAgZm9yIGxpYiBpbiBsaWJyYXJpZXM6Ci0g
ICAgICAgIGJ1bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRoKGxpYiwgdHlwZT0nbGliJykKKyAg
ICAgICAgYnVuZGxlci5jb3B5X2FuZF9tYXliZV9zdHJpcF9wYXRjaGVsZihsaWIsIHR5cGU9J2xp
YicsIHN0cmlwPUZhbHNlLCBwYXRjaGVsZl9yZW1vdmVycGF0aD1UcnVlLCBwYXRjaGVsZl9ub2Rl
ZmF1bHRsaWI9VHJ1ZSkKICAgICBidW5kbGVyLmdlbmVyYXRlX3dyYXBwZXJfc2NyaXB0KGludGVy
cHJldGVyLCBvcy5wYXRoLmJhc2VuYW1lKGFyZ3MuYmluYXJ5KSkKICAgICByZXR1cm4gMAogCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2dlbmVyYXRlLWJ1bmRsZSBiL1Rvb2xzL1NjcmlwdHMv
Z2VuZXJhdGUtYnVuZGxlCmluZGV4IGIzMmI5OTZjOGI2MjMzYTA3ZDk3NGQzY2U1NjMzZmY5ZGQy
ODViZTkuLmM5ZDUxYmE3MDljZTllNzVlYTBmMGQ0MTM4ZDhmZDE0NmFhOTQzZTYgMTAwNzU1Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtYnVuZGxlCisrKyBiL1Rvb2xzL1NjcmlwdHMvZ2Vu
ZXJhdGUtYnVuZGxlCkBAIC0yMSw3ICsyMSw2IEBACiAjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCiAjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCiBpbXBvcnQgYXJncGFyc2UKIGltcG9ydCBiYXNl
NjQKIGltcG9ydCBkYXRldGltZQpAQCAtODcsNiArODYsNjAgQEAgZWxzZQogZmkKICIiIgogCitG
T05UX0NPTkZfRklMRSA9ICIiIlwKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGZv
bnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPgorPGZvbnRjb25maWc+CisgICAgPGl0czpydWxl
cyB4bWxuczppdHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvMTEvaXRzIiB2ZXJzaW9uPSIxLjAi
PgorICAgICAgICA8aXRzOnRyYW5zbGF0ZVJ1bGUgdHJhbnNsYXRlPSJubyIgc2VsZWN0b3I9Ii9m
b250Y29uZmlnLypbbm90KHNlbGY6OmRlc2NyaXB0aW9uKV0iLz4KKyAgICA8L2l0czpydWxlcz4K
KworICAgIDxkZXNjcmlwdGlvbj5EZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZTwvZGVzY3JpcHRp
b24+CisKKzwhLS0gRm9udCBkaXJlY3RvcnkgbGlzdCwgcmVsYXRpdmUgdG8gWERHX0RBVEFfSE9N
RSAtLT4KKyAgICA8ZGlyIHByZWZpeD0ieGRnIj5mb250cy9mb250czwvZGlyPgorCis8IS0tIExv
YWQgc3lzdGVtIGN1c3RvbWl6YXRpb24gZmlsZXMsIHJlbGF0aXZlIHRvIHByZXZpb3VzIGRpciAt
LT4KKyAgICA8aW5jbHVkZSBpZ25vcmVfbWlzc2luZz0ieWVzIj5jb25mLmQ8L2luY2x1ZGU+CisK
KzwhLS0gRm9udCBjYWNoZSBkaXJlY3RvcnkgbGlzdCwgcmVsYXRpdmUgdG8gWERHX0NBQ0hFX0hP
TUUgLS0+CisgICAgPGNhY2hlZGlyIHByZWZpeD0ieGRnIj5mb250Y29uZmlnPC9jYWNoZWRpcj4K
KworPCEtLSBJbmNsdWRlIGFsc28gdGhlIHN5c3RlbSBmb250IGNvbmZpZyBpZiBpcyBvbiB0aGUg
c3RhbmRhcmQgZGlyIC0tPgorICAgIDxpbmNsdWRlIGlnbm9yZV9taXNzaW5nPSJ5ZXMiPi9ldGMv
Zm9udHMvZm9udHMuY29uZjwvaW5jbHVkZT4KKworPCEtLSBBY2NlcHQgZGVwcmVjYXRlZCAnbW9u
bycgYWxpYXMsIHJlcGxhY2luZyBpdCB3aXRoICdtb25vc3BhY2UnIC0tPgorICAgIDxtYXRjaCB0
YXJnZXQ9InBhdHRlcm4iPgorICAgICAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+
CisgICAgICAgICAgICA8c3RyaW5nPm1vbm88L3N0cmluZz4KKyAgICAgICAgPC90ZXN0PgorICAg
ICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+Cisg
ICAgICAgICAgICA8c3RyaW5nPm1vbm9zcGFjZTwvc3RyaW5nPgorICAgICAgICA8L2VkaXQ+Cisg
ICAgPC9tYXRjaD4KKworPCEtLSBBY2NlcHQgYWx0ZXJuYXRlICdzYW5zIHNlcmlmJyBzcGVsbGlu
ZywgcmVwbGFjaW5nIGl0IHdpdGggJ3NhbnMtc2VyaWYnIC0tPgorICAgIDxtYXRjaCB0YXJnZXQ9
InBhdHRlcm4iPgorICAgICAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+CisgICAg
ICAgICAgICA8c3RyaW5nPnNhbnMgc2VyaWY8L3N0cmluZz4KKyAgICAgICAgPC90ZXN0PgorICAg
ICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+Cisg
ICAgICAgICAgICA8c3RyaW5nPnNhbnMtc2VyaWY8L3N0cmluZz4KKyAgICAgICAgPC9lZGl0Pgor
ICAgIDwvbWF0Y2g+CisKKzwhLS0gQWNjZXB0IGRlcHJlY2F0ZWQgJ3NhbnMnIGFsaWFzLCByZXBs
YWNpbmcgaXQgd2l0aCAnc2Fucy1zZXJpZicgLS0+CisgICAgPG1hdGNoIHRhcmdldD0icGF0dGVy
biI+CisgICAgICAgIDx0ZXN0IHF1YWw9ImFueSIgbmFtZT0iZmFtaWx5Ij4KKyAgICAgICAgICAg
IDxzdHJpbmc+c2Fuczwvc3RyaW5nPgorICAgICAgICA8L3Rlc3Q+CisgICAgICAgIDxlZGl0IG5h
bWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIiBiaW5kaW5nPSJzYW1lIj4KKyAgICAgICAgICAgIDxz
dHJpbmc+c2Fucy1zZXJpZjwvc3RyaW5nPgorICAgICAgICA8L2VkaXQ+CisgICAgPC9tYXRjaD4K
KzwvZm9udGNvbmZpZz4KKyIiIgorCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18p
CiBMT0dfTUVTU0FHRSA9IDI1CiAKQEAgLTEzOCw2ICsxOTEsOSBAQCBjbGFzcyBCdW5kbGVDcmVh
dG9yKG9iamVjdCk6CiAgICAgICAgIHdrX2J1aWxkX3BhdGggPSBvcy5lbnZpcm9uWydXRUJLSVRf
T1VUUFVURElSJ10gaWYgJ1dFQktJVF9PVVRQVVRESVInIGluIG9zLmVudmlyb24gZWxzZSBcCiAg
ICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBh
dGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICcuLicsICdXZWJLaXRCdWlsZCcpKQogICAgICAg
ICBzZWxmLl9idWlsZHBhdGggPSBvcy5wYXRoLmpvaW4od2tfYnVpbGRfcGF0aCwgc2VsZi5fY29u
ZmlndXJhdGlvbi5jYXBpdGFsaXplKCkpCisgICAgICAgIHNlbGYuX2Rsb3BlbndyYXBfZGlyID0g
b3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAn
d2Via2l0cHknLCAnYmluYXJ5X2J1bmRsaW5nJywgJ2Rsb3BlbndyYXAnKSkKKyAgICAgICAgaWYg
bm90IG9zLnBhdGguaXNkaXIoc2VsZi5fZGxvcGVud3JhcF9kaXIpOgorICAgICAgICAgICAgcmFp
c2UgUnVudGltZUVycm9yKCJDYW4ndCBmaW5kIHRoZSBkbG9wZW53cmFwIGRpcmVjdG9yeSBhdDog
JXMiICUgc2VsZi5fZGxvcGVud3JhcF9kaXIpCiAKICAgICAgICAgZGVmYXVsdF9idW5kbGVfbmFt
ZSA9IGJ1bmRsZV90eXBlICArICdfJyArIHNlbGYuX3BsYXRmb3JtICsgJ18nICsgc2VsZi5fY29u
ZmlndXJhdGlvbiArICcuJyArIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUKICAgICAgICAgaWYgZGVz
dGluYXRpb24gYW5kICBvcy5wYXRoLmlzZGlyKGRlc3RpbmF0aW9uKToKQEAgLTE0NSw3ICsyMDEs
NiBAQCBjbGFzcyBCdW5kbGVDcmVhdG9yKG9iamVjdCk6CiAgICAgICAgIGVsc2U6CiAgICAgICAg
ICAgICBzZWxmLl9idW5kbGVfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHdrX2J1aWxkX3BhdGgs
IGRlZmF1bHRfYnVuZGxlX25hbWUpCiAKLQogICAgIGRlZiBfY3JlYXRlX3RlbXBkaXIoc2VsZiwg
YmFzZWRpciA9IE5vbmUpOgogICAgICAgICBpZiBiYXNlZGlyIGlzIG5vdCBOb25lOgogICAgICAg
ICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoYmFzZWRpcik6CkBAIC0xNTMsNyArMjA4LDYgQEAg
Y2xhc3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICAgICAgcmV0dXJuIHRlbXBmaWxl
Lm1rZHRlbXAocHJlZml4PW9zLnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgoYmFzZWRpciksICd0
bXAnKSkKICAgICAgICAgcmV0dXJuIHRlbXBmaWxlLm1rZHRlbXAoKQogCi0KICAgICBkZWYgX3J1
bl9jbWRfYW5kX2dldF9vdXRwdXQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIF9sb2cuZGVidWco
IkVYRUMgJXMiICUgY29tbWFuZCkKICAgICAgICAgY29tbWFuZF9wcm9jZXNzID0gc3VicHJvY2Vz
cy5Qb3Blbihjb21tYW5kLApAQCAtMTcwLDcgKzIyNCw2IEBAIGNsYXNzIEJ1bmRsZUNyZWF0b3Io
b2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUuc3BsaXQoJz0nKVsxXS5z
dHJpcCgpLnN0cmlwKCciJykKICAgICAgICAgcmV0dXJuIE5vbmUKIAotCiAgICAgZGVmIF9nZW5l
cmF0ZV9yZWFkbWUoc2VsZik6CiAgICAgICAgIF9sb2cuaW5mbygnR2VuZXJhdGUgUkVBRE1FLnR4
dCBmaWxlJykKICAgICAgICAgcmVhZG1lX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fdG1wZGly
LCAnUkVBRE1FLnR4dCcpCkBAIC0xOTEsMzYgKzI0NCw0NyBAQCBjbGFzcyBCdW5kbGVDcmVhdG9y
KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgcmVhZG1lX2hhbmRsZS53cml0ZSgnICAtIFRvIGVu
c3VyZSBhbGwgdGhlIHJlcXVpcmVkIGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkIGV4ZWN1dGUgdGhl
IHNjcmlwdDogaW5zdGFsbC1kZXBlbmRlbmNpZXMuc2hcbicpCiAgICAgICAgICAgICAgICAgcmVh
ZG1lX2hhbmRsZS53cml0ZSgnICAtIFlvdSBjYW4gcGFzcyB0aGUgZmxhZyAiLS1hdXRvaW5zdGFs
bCIgdG8gdGhpcyBzY3JpcHQgdG8gYXV0b21hdGljYWxseSBpbnN0YWxsIHRoZSBkZXBlbmRlbmNp
ZXMgaWYgbmVlZGVkLlxuJykKICAgICAgICAgICAgIHJlYWRtZV9oYW5kbGUud3JpdGUoJ1xuUnVu
IGluc3RydWN0aW9uczpcbicpCi0gICAgICAgICAgICBzY3JpcHRzID0gInNjcmlwdCIgaWYgbGVu
KHNlbGYuX3dyYXBwZXJfc2NyaXB0cykgPT0gMSBlbHNlICJzY3JpcHRzIgorICAgICAgICAgICAg
c2NyaXB0cyA9ICdzY3JpcHQnIGlmIGxlbihzZWxmLl93cmFwcGVyX3NjcmlwdHMpID09IDEgZWxz
ZSAnc2NyaXB0cycKICAgICAgICAgICAgIHJlYWRtZV9oYW5kbGUud3JpdGUoJyAgLSBFeGVjdXRl
IHRoZSB3cmFwcGVyICVzIGluIHRoaXMgZGlyZWN0b3J5OlxuJyAlIHNjcmlwdHMpCiAgICAgICAg
ICAgICBmb3Igd3JhcHBlcl9zY3JpcHQgaW4gc2VsZi5fd3JhcHBlcl9zY3JpcHRzOgogICAgICAg
ICAgICAgICAgIHJlYWRtZV9oYW5kbGUud3JpdGUoJyAgICAqICVzXG4nICV3cmFwcGVyX3Njcmlw
dCkKICAgICAgICAgcmV0dXJuIFRydWUKIAotCiAgICAgZGVmIF9nZW5lcmF0ZV93cmFwcGVyX3Nj
cmlwdChzZWxmLCBpbnRlcnByZXRlciwgYmluYXJ5X3RvX3dyYXApOgogICAgICAgICB2YXJpYWJs
ZXMgPSBkaWN0KCkKICAgICAgICAgbXlkaXIgPSBzZWxmLl9idW5kbGVyLlZBUl9NWURJUgotICAg
ICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihzZWxmLl9idW5kbGVyLmRlc3RpbmF0
aW9uX2RpcigpLCAnZ2lvJykpOgotICAgICAgICAgICAgZ2lvX3ZhciA9ICdHSU9fTU9EVUxFX0RJ
UicgaWYgc2VsZi5fc3lzbGlicyA9PSAnYnVuZGxlLWFsbCcgZWxzZSAnR0lPX0VYVFJBX01PRFVM
RVMnCi0gICAgICAgICAgICB2YXJpYWJsZXNbZ2lvX3Zhcl0gPSAiJHslc30vZ2lvIiAlIG15ZGly
CisgICAgICAgIGxpYl9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fYnVuZGxlci5kZXN0aW5hdGlv
bl9kaXIoKSwgJ2xpYicpCisgICAgICAgIHN5c2xpYl9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5f
YnVuZGxlci5kZXN0aW5hdGlvbl9kaXIoKSwgJ3N5cy9saWInKQorICAgICAgICBiaW5fZGlyID0g
b3MucGF0aC5qb2luKHNlbGYuX2J1bmRsZXIuZGVzdGluYXRpb25fZGlyKCksICdiaW4nKQorICAg
ICAgICBzaGFyZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fYnVuZGxlci5kZXN0aW5hdGlvbl9k
aXIoKSwgJ3N5cy9zaGFyZScpCiAKLSAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpv
aW4oc2VsZi5fYnVuZGxlci5kZXN0aW5hdGlvbl9kaXIoKSwgJ2dzdCcpKToKKyAgICAgICAgaWYg
b3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2dpbycpKToKKyAgICAgICAg
ICAgIGdpb192YXIgPSAnR0lPX01PRFVMRV9ESVInIGlmIHNlbGYuX3N5c2xpYnMgPT0gJ2J1bmRs
ZS1hbGwnIGVsc2UgJ0dJT19FWFRSQV9NT0RVTEVTJworICAgICAgICAgICAgdmFyaWFibGVzW2dp
b192YXJdID0gJyR7JXN9L3N5cy9saWIvZ2lvJyAlIG15ZGlyCisgICAgICAgIGlmIG9zLnBhdGgu
aXNkaXIob3MucGF0aC5qb2luKHN5c2xpYl9kaXIsICdnc3QnKSk6CiAgICAgICAgICAgICBnc3Rf
dmFyID0gJ0dTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wJyBpZiBzZWxmLl9zeXNsaWJzID09ICdi
dW5kbGUtYWxsJyBlbHNlICdHU1RfUExVR0lOX1BBVEhfMV8wJwotICAgICAgICAgICAgdmFyaWFi
bGVzW2dzdF92YXJdID0gIiR7JXN9L2dzdCIgJSBteWRpcgotICAgICAgICAgICAgdmFyaWFibGVz
WydHU1RfUkVHSVNUUllfMV8wJ10gPSAiJHslc30vZ3N0L2dzdHJlYW1lci0xLjAucmVnaXN0cnki
ICUgbXlkaXIKLSAgICAgICAgaWYgYmluYXJ5X3RvX3dyYXAgIT0gImpzYyI6Ci0gICAgICAgICAg
ICB2YXJpYWJsZXNbJ1dFQktJVF9FWEVDX1BBVEgnXSA9ICIkeyVzfS9iaW4iICUgbXlkaXIKLSAg
ICAgICAgICAgIHZhcmlhYmxlc1snV0VCS0lUX0lOSkVDVEVEX0JVTkRMRV9QQVRIJ10gPSAiJHsl
c30vbGliIiAlIG15ZGlyCi0gICAgICAgIGlmIHNlbGYuX3N5c2xpYnMgPT0gJ2J1bmRsZS1hbGwn
OgotICAgICAgICAgICAgaWYgYmluYXJ5X3RvX3dyYXAgIT0gImpzYyI6Ci0gICAgICAgICAgICAg
ICAgZm9yIHZhciBpbiBbJ1dFQl9QUk9DRVNTX0NNRF9QUkVGSVgnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdQTFVHSU5fUFJPQ0VTU19DTURfUFJFRklYJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnTkVUV09SS19QUk9DRVNTX0NNRF9QUkVGSVgnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdHUFVfUFJPQ0VTU19DTURfUFJFRklYJ106Ci0gICAgICAgICAgICAg
ICAgICAgIHZhcmlhYmxlc1t2YXJdID0gIiR7JXN9IiAlIHNlbGYuX2J1bmRsZXIuVkFSX0lOVEVS
UFJFVEVSCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpbnRlcnByZXRlciA9IE5vbmUKKyAg
ICAgICAgICAgIHZhcmlhYmxlc1tnc3RfdmFyXSA9ICckeyVzfS9zeXMvbGliL2dzdCcgJSBteWRp
cgorICAgICAgICAgICAgdmFyaWFibGVzWydHU1RfUkVHSVNUUllfMV8wJ10gPSAnJHslc30vc3lz
L2xpYi9nc3QvZ3N0cmVhbWVyLTEuMC5yZWdpc3RyeScgJSBteWRpcgorICAgICAgICAgICAgaWYg
b3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGJpbl9kaXIsICdnc3QtcGx1Z2luLXNjYW5uZXIn
KSk6CisgICAgICAgICAgICAgICAgdmFyaWFibGVzWydHU1RfUExVR0lOX1NDQU5ORVInXSA9ICck
eyVzfS9iaW4vZ3N0LXBsdWdpbi1zY2FubmVyJyAlIG15ZGlyCisgICAgICAgICAgICAjIHBpcGV3
aXJlIHNwYSBwbHVnaW5zIG1heSBiZSBuZWVkZWQgYnkgZ3N0cmVhbWVyLXBpcGV3aXJlCisgICAg
ICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihzeXNsaWJfZGlyLCAncGlwZXdp
cmUnKSk6CisgICAgICAgICAgICAgICAgdmFyaWFibGVzWydTUEFfUExVR0lOX0RJUiddID0gJyR7
JXN9L3N5cy9saWIvcGlwZXdpcmUnICUgbXlkaXIKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihv
cy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2RyaScpKToKKyAgICAgICAgICAgIHZhcmlhYmxlc1sn
TElCR0xfRFJJVkVSU19QQVRIJ10gPSAnJHslc30vc3lzL2xpYi9kcmknICUgbXlkaXIKKyAgICAg
ICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2dsdm5kL2VnbF92
ZW5kb3IuZCcpKToKKyAgICAgICAgICAgIHZhcmlhYmxlc1snX19FR0xfVkVORE9SX0xJQlJBUllf
RElSUyddID0gJyR7JXN9L3N5cy9saWIvZ2x2bmQvZWdsX3ZlbmRvci5kJyAlIG15ZGlyCisgICAg
ICAgIGlmIG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHNoYXJlX2RpcikpOgorICAgICAgICAg
ICAgYXNzZXJ0KHNlbGYuX3N5c2xpYnMgPT0gJ2J1bmRsZS1hbGwnKQorICAgICAgICAgICAgdmFy
aWFibGVzWydYREdfREFUQV9IT01FJ10gPSAnJHslc30vc3lzL3NoYXJlJyAlIG15ZGlyCisgICAg
ICAgICAgICB2YXJpYWJsZXNbJ1hER19EQVRBX0RJUlMnXSA9ICckeyVzfS9zeXMvc2hhcmUnICUg
bXlkaXIKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc2hhcmVfZGlyLCAn
Zm9udHMnKSk6CisgICAgICAgICAgICB2YXJpYWJsZXNbJ0ZPTlRDT05GSUdfUEFUSCddID0gJyR7
JXN9L3N5cy9zaGFyZS9mb250cy9jb25maWcnICUgbXlkaXIKKyAgICAgICAgaWYgb3MucGF0aC5p
c2Rpcihvcy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2d0aycpKToKKyAgICAgICAgICAgIHZhcmlh
Ymxlc1snR1RLX1BBVEgnXSA9ICckeyVzfS9zeXMvbGliL2d0aycgJSBteWRpcgorICAgICAgICBp
ZiBiaW5hcnlfdG9fd3JhcCAhPSAnanNjJzoKKyAgICAgICAgICAgIHZhcmlhYmxlc1snV0VCS0lU
X0VYRUNfUEFUSCddID0gJyR7JXN9L2JpbicgJSBteWRpcgorICAgICAgICAgICAgdmFyaWFibGVz
WydXRUJLSVRfSU5KRUNURURfQlVORExFX1BBVEgnXSA9ICckeyVzfS9saWInICUgbXlkaXIKICAg
ICAgICAgc2VsZi5fYnVuZGxlci5nZW5lcmF0ZV93cmFwcGVyX3NjcmlwdChpbnRlcnByZXRlciwg
YmluYXJ5X3RvX3dyYXAsIHZhcmlhYmxlcykKICAgICAgICAgc2VsZi5fd3JhcHBlcl9zY3JpcHRz
LmFwcGVuZChiaW5hcnlfdG9fd3JhcCkKIApAQCAtMjUyLDkgKzMxNiwxOCBAQCBjbGFzcyBCdW5k
bGVDcmVhdG9yKG9iamVjdCk6CiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2VsZi5fdG1wZGly
KToKICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5fdG1wZGlyKQogCisgICAgZGVmIF90
b3VjaF9yZXNldF9tdGltZShzZWxmKToKKyAgICAgICAgX2xvZy5pbmZvKCdVcGRhdGUgdGltZXN0
YW1wcyAodG91Y2gpJykKKyAgICAgICAgbm93ID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkudGlt
ZXN0YW1wKCkKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc2VsZi5f
dG1wZGlyKToKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAg
IG9zLnV0aW1lKG9zLnBhdGguam9pbihyb290LCBuYW1lKSwgdGltZXM9KG5vdywgbm93KSkKKyAg
ICAgICAgICAgIGZvciBuYW1lIGluIGRpcnM6CisgICAgICAgICAgICAgICAgb3MudXRpbWUob3Mu
cGF0aC5qb2luKHJvb3QsIG5hbWUpLCB0aW1lcz0obm93LCBub3cpKQorCiAgICAgZGVmIGNyZWF0
ZShzZWxmKToKICAgICAgICAgc2VsZi5fdG1wZGlyID0gc2VsZi5fY3JlYXRlX3RlbXBkaXIoc2Vs
Zi5fYnVpbGRwYXRoKQotICAgICAgICBzZWxmLl9idW5kbGVyID0gQmluYXJ5QnVuZGxlcihzZWxm
Ll90bXBkaXIsIHNlbGYuX3Nob3VsZF9zdHJpcF9vYmplY3RzKQorICAgICAgICBzZWxmLl9idW5k
bGVyID0gQmluYXJ5QnVuZGxlcihzZWxmLl90bXBkaXIsIHNlbGYuX2J1aWxkcGF0aCkKIAogICAg
ICAgICBpZiBvcy5wYXRoLmlzZmlsZShzZWxmLl9idW5kbGVfZmlsZV9wYXRoKToKICAgICAgICAg
ICAgIF9sb2cuaW5mbygnUmVtb3ZpbmcgcHJldmlvdXMgYnVuZGxlICVzJyAlIHNlbGYuX2J1bmRs
ZV9maWxlX3BhdGgpCkBAIC0yNjQsNiArMzM3LDkgQEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihvYmpl
Y3QpOgogICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2J1bmRsZShidW5kbGVfYmluYXJ5KQogICAg
ICAgICBzZWxmLl9nZW5lcmF0ZV9yZWFkbWUoKQogCisgICAgICAgICMgUG90ZW50aWFsbHkgYXZv
aWRzIGVycm9ycyByZWxhdGVkIHRvIFpJUCBub3QgYWJsZSB0byBzdG9yZSBtdGltZXMgb2xkZXIg
dGhhbiAxOTgwCisgICAgICAgIHNlbGYuX3RvdWNoX3Jlc2V0X210aW1lKCkKKwogICAgICAgICBp
ZiBzZWxmLl9jb21wcmVzc2lvbl90eXBlID09ICd6aXAnOgogICAgICAgICAgICAgYXJjaGl2ZXIg
PSBaaXBBcmNoaXZlcihzZWxmLl9idW5kbGVfZmlsZV9wYXRoKQogICAgICAgICBlbGlmIHNlbGYu
X2NvbXByZXNzaW9uX3R5cGUgPT0gJ3Rhci54eic6CkBAIC0yNzcsNyArMzUzLDYgQEAgY2xhc3Mg
QnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICBfbG9nLmxvZyhMT0dfTUVTU0FHRSwgJ0J1
bmRsZSBmaWxlIGNyZWF0ZWQgYXQ6ICVzJyAlIHNlbGYuX2J1bmRsZV9maWxlX3BhdGgpCiAgICAg
ICAgIHJldHVybiBzZWxmLl9idW5kbGVfZmlsZV9wYXRoCiAKLQogICAgIGRlZiBfZ2V0X3dlYmtp
dF9iaW5hcmllcyhzZWxmKToKICAgICAgICAgd2Via2l0X2JpbmFyaWVzID0gW10KICAgICAgICAg
YmluX2RpciA9IG9zLnBhdGguam9pbihzZWxmLl9idWlsZHBhdGgsICdiaW4nKQpAQCAtMjkwLDE5
ICszNjUsMTggQEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICAgICAgcmFp
c2UgUnVudGltZUVycm9yKCdDb3VsZCBub3QgZmluZCByZXF1aXJlZCBXZWJLaXQgUHJvY2VzcyBi
aW5hcmllcy4gQ2hlY2sgaWYgeW91IGFyZSBwYXNzaW5nIHRoZSByaWdodCBwbGF0Zm9ybSB2YWx1
ZS4nKQogICAgICAgICByZXR1cm4gd2Via2l0X2JpbmFyaWVzCiAKLQotICAgIGRlZiBfZ2V0X3dl
YmtpdF9idW5kbGVsaWIoc2VsZik6CisgICAgZGVmIF9nZXRfd2Via2l0X2xpYihzZWxmLCBuYW1l
KToKKyAgICAgICAgbGlia2V5bmFtZSA9IG5hbWUubG93ZXIoKQogICAgICAgICBsaWJfZGlyID0g
b3MucGF0aC5qb2luKHNlbGYuX2J1aWxkcGF0aCwgJ2xpYicpCiAgICAgICAgIGJ1bmRsZV9saWIg
PSBOb25lCiAgICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKGxpYl9kaXIpOgotICAgICAg
ICAgICAgaWYgZW50cnkuZW5kc3dpdGgoJy5zbycpIGFuZCAnaW5qZWN0ZWRidW5kbGUnIGluIGVu
dHJ5Lmxvd2VyKCkgYW5kICd0ZXN0JyBub3QgaW4gZW50cnkubG93ZXIoKToKKyAgICAgICAgICAg
IGlmIGVudHJ5LmVuZHN3aXRoKCcuc28nKSBhbmQgbGlia2V5bmFtZSBpbiBlbnRyeS5sb3dlcigp
IGFuZCAndGVzdCcgbm90IGluIGVudHJ5Lmxvd2VyKCk6CiAgICAgICAgICAgICAgICAgYXNzZXJ0
KGJ1bmRsZV9saWIgPT0gTm9uZSkKICAgICAgICAgICAgICAgICBidW5kbGVfbGliID0gb3MucGF0
aC5qb2luKGxpYl9kaXIsIGVudHJ5KQogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGFz
c2VydChidW5kbGVfbGliKQogICAgICAgICByZXR1cm4gYnVuZGxlX2xpYgogCi0KICAgICBkZWYg
X2NyZWF0ZV9hcmNoaXZlKHNlbGYsIGFyY2hpdmVyKToKICAgICAgICAgX2xvZy5pbmZvKCdDcmVh
dGUgYXJjaGl2ZScpCiAgICAgICAgIHdpdGggYXJjaGl2ZXI6CkBAIC0zMzEsNDIgKzQwNSwxMzYg
QEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICBfbG9nLmluZm8oJ0FkZCBk
ZXBlbmRlbmN5IG9uIHN5c3RlbSBwYWNrYWdlIFslc106ICVzJyAlKHBhY2thZ2UsIG9iamVjdCkp
CiAgICAgICAgIHJldHVybiBwYWNrYWdlCiAKLQotICAgIGRlZiBfZ2V0X2dpb19tb2R1bGVzKHNl
bGYpOgotICAgICAgICBnaW9fbW9kdWxlcyA9IFtdCi0gICAgICAgIHJldGNvZGUsIHN0ZG91dCwg
c3RkZXJyID0gc2VsZi5fcnVuX2NtZF9hbmRfZ2V0X291dHB1dChbJ3BrZy1jb25maWcnLCAnLS12
YXJpYWJsZT1naW9tb2R1bGVkaXInLCAnZ2lvLTIuMCddKQorICAgIGRlZiBfZ2V0X3BrZ19jb25m
aWdfdmFyKHNlbGYsIG1vZHVsZSwgdmFyX25hbWUsIGFzc2VydF92YWx1ZT1UcnVlKToKKyAgICAg
ICAgcmV0Y29kZSwgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLl9ydW5fY21kX2FuZF9nZXRfb3V0cHV0
KFsncGtnLWNvbmZpZycsICctLXZhcmlhYmxlPSVzJyAlIHZhcl9uYW1lLCBtb2R1bGVdKQogICAg
ICAgICBpZiByZXRjb2RlICE9IDA6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1Ro
ZSBwa2ctY29uZmlnIGNvbW1hbmQgcmV0dXJuZWQgc3RhdHVzICVkJyAlIHJldGNvZGUpCi0gICAg
ICAgIGdpb19tb2R1bGVfZGlyID0gc3Rkb3V0LnN0cmlwKCkKLSAgICAgICAgaWYgbm90IG9zLnBh
dGguaXNkaXIoZ2lvX21vZHVsZV9kaXIpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9y
KCdUaGUgcGtnLWNvbmZpZyBlbnRyeSBmb3IgZ2lvbW9kdWxlZGlyIGlzIG5vdCBhIGRpcmVjdG9y
eTogJXMnICUgZ2lvX21vZHVsZV9kaXIpCi0gICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGly
KGdpb19tb2R1bGVfZGlyKToKLSAgICAgICAgICAgIGlmIGVudHJ5LmVuZHN3aXRoKCcuc28nKToK
LSAgICAgICAgICAgICAgICBnaW9fbW9kdWxlcy5hcHBlbmQob3MucGF0aC5qb2luKGdpb19tb2R1
bGVfZGlyLCBlbnRyeSkpCi0gICAgICAgIHJldHVybiBnaW9fbW9kdWxlcworICAgICAgICB2YXJf
dmFsdWUgPSBzdGRvdXQuc3RyaXAoKQorICAgICAgICBpZiBhc3NlcnRfdmFsdWU6CisgICAgICAg
ICAgICBpZiB2YXJfbmFtZS5lbmRzd2l0aCgnZGlyJykgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKHZh
cl92YWx1ZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgcGtnLWNv
bmZpZyBlbnRyeSBmb3IgJXMgaXMgbm90IGEgZGlyZWN0b3J5OiAlcycgJSAodmFyX25hbWUsIHZh
cl92YWx1ZSkpCisgICAgICAgICAgICBpZiBsZW4odmFyX3ZhbHVlKSA9PSAwOgorICAgICAgICAg
ICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVGhlIHBrZy1jb25maWcgZW50cnkgZm9yICVzIGhh
cyB6ZXJvIGxlbmdodCcgJSB2YXJfdmFsdWUpCisgICAgICAgIHJldHVybiB2YXJfdmFsdWUKKwor
ICAgIGRlZiBfbGlzdF9maWxlc19kaXJlY3Rvcnkoc2VsZiwgZGlyZWN0b3J5LCBsaXN0X2luc2lk
ZV9zdWJkaXJzPUZhbHNlLCBmaWx0ZXJfc3VmZml4PU5vbmUpOgorICAgICAgICBmb3VuZF9maWxl
cyA9IFtdCisgICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKGRpcmVjdG9yeSk6CisgICAg
ICAgICAgICBlbnRyeV9wYXRoID0gb3MucGF0aC5qb2luKGRpcmVjdG9yeSwgZW50cnkpCisgICAg
ICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGVudHJ5X3BhdGgpOgorICAgICAgICAgICAgICAgIGlm
IGxpc3RfaW5zaWRlX3N1YmRpcnM6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2ZpbGVzLmV4
dGVuZChzZWxmLl9saXN0X2ZpbGVzX2RpcmVjdG9yeShlbnRyeV9wYXRoLCBsaXN0X2luc2lkZV9z
dWJkaXJzLCBmaWx0ZXJfc3VmZml4KSkKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2ZpbGUo
ZW50cnlfcGF0aCk6CisgICAgICAgICAgICAgICAgaWYgZmlsdGVyX3N1ZmZpeCBpcyBOb25lIG9y
IGVudHJ5X3BhdGguZW5kc3dpdGgoZmlsdGVyX3N1ZmZpeCk6CisgICAgICAgICAgICAgICAgICAg
IGZvdW5kX2ZpbGVzLmFwcGVuZChlbnRyeV9wYXRoKQorICAgICAgICBpZiBsZW4oZm91bmRfZmls
ZXMpID09IDA6CisgICAgICAgICAgICByYWlzZSBSdW5UaW1lRXJyb3IoJ0NhbiBub3QgZmluZCBh
bnkgbWF0Y2hpbmcgZmlsZSBhdCBkaXJlY3RvcnkgJXMnICUgZGlyZWN0b3J5KQorICAgICAgICBy
ZXR1cm4gZm91bmRfZmlsZXMKIAotICAgIGRlZiBfZ2V0X2dzdHJlYW1lcl9tb2R1bGVzKHNlbGYp
OgotICAgICAgICBnc3RyZWFtZXJfcGx1Z2lucyA9IFtdCi0gICAgICAgIHJldGNvZGUsIHN0ZG91
dCwgc3RkZXJyID0gc2VsZi5fcnVuX2NtZF9hbmRfZ2V0X291dHB1dChbJ3BrZy1jb25maWcnLCAn
LS12YXJpYWJsZT1wbHVnaW5zZGlyJywgJ2dzdHJlYW1lci0xLjAnXSkKLSAgICAgICAgaWYgcmV0
Y29kZSAhPSAwOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgcGtnLWNvbmZp
ZyBjb21tYW5kIHJldHVybmVkIHN0YXR1cyAlZCcgJSByZXRjb2RlKQotICAgICAgICBnc3RyYW1l
cl9wbHVnaW5zX2RpciA9IHN0ZG91dC5zdHJpcCgpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlz
ZGlyKGdzdHJhbWVyX3BsdWdpbnNfZGlyKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJv
cignVGhlIHBrZy1jb25maWcgZW50cnkgZm9yIHBsdWdpbnNkaXIgaXMgbm90IGEgZGlyZWN0b3J5
OiAlcycgJSBnc3RyYW1lcl9wbHVnaW5zX2RpcikKLSAgICAgICAgZm9yIGVudHJ5IGluIG9zLmxp
c3RkaXIoZ3N0cmFtZXJfcGx1Z2luc19kaXIpOgotICAgICAgICAgICAgaWYgZW50cnkuZW5kc3dp
dGgoJy5zbycpOgotICAgICAgICAgICAgICAgIGdzdHJlYW1lcl9wbHVnaW5zLmFwcGVuZChvcy5w
YXRoLmpvaW4oZ3N0cmFtZXJfcGx1Z2luc19kaXIsIGVudHJ5KSkKLSAgICAgICAgcmV0dXJuIGdz
dHJlYW1lcl9wbHVnaW5zCisgICAgZGVmIF9nZXRfZ2lvX21vZHVsZXMoc2VsZik6CisgICAgICAg
IGdpb19tb2R1bGVfZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdnaW8tMi4wJywgJ2dp
b21vZHVsZWRpcicpCisgICAgICAgIHJldHVybiBzZWxmLl9saXN0X2ZpbGVzX2RpcmVjdG9yeShn
aW9fbW9kdWxlX2RpciwgZmlsdGVyX3N1ZmZpeD0nLnNvJykKIAorICAgIGRlZiBfZ2V0X2d0a19t
b2R1bGVzKHNlbGYsIHN1YmRpcik6CisgICAgICAgIGd0a19saWJfZGlyID0gc2VsZi5fZ2V0X3Br
Z19jb25maWdfdmFyKCdndGsrLTMuMCcsICdsaWJkaXInKQorICAgICAgICBndGtfYmluYXJ5X3Zl
cnNpb24gPSBzZWxmLl9nZXRfcGtnX2NvbmZpZ192YXIoJ2d0aystMy4wJywgJ2d0a19iaW5hcnlf
dmVyc2lvbicpCisgICAgICAgIGd0a19tb2R1bGVfZGlyID0gb3MucGF0aC5qb2luKGd0a19saWJf
ZGlyLCAnZ3RrLTMuMCcsIGd0a19iaW5hcnlfdmVyc2lvbiwgc3ViZGlyKQorICAgICAgICBpZiBu
b3Qgb3MucGF0aC5pc2RpcihndGtfbW9kdWxlX2Rpcik6CisgICAgICAgICAgICByYWlzZSBSdW50
aW1lRXJyb3IoJ0NhbiBub3QgZmluZCB0aGUgdGhlIGd0ayBtb2R1bGUgZGlyICVzJyAlIGd0a19t
b2R1bGVfZGlyKQorICAgICAgICByZXR1cm4gc2VsZi5fbGlzdF9maWxlc19kaXJlY3RvcnkoZ3Rr
X21vZHVsZV9kaXIsIGZpbHRlcl9zdWZmaXg9Jy5zbycpCisKKyAgICBkZWYgX2dldF9nc3RyZWFt
ZXJfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgZ3N0cmVhbWVyX3BsdWdpbnNfZGlyID0gc2VsZi5f
Z2V0X3BrZ19jb25maWdfdmFyKCdnc3RyZWFtZXItMS4wJywgJ3BsdWdpbnNkaXInKQorICAgICAg
ICByZXR1cm4gc2VsZi5fbGlzdF9maWxlc19kaXJlY3RvcnkoZ3N0cmVhbWVyX3BsdWdpbnNfZGly
LCBmaWx0ZXJfc3VmZml4PScuc28nKQorCisgICAgZGVmIF9nZXRfZ3N0cmVhbWVyX3BsdWdpbl9z
Y2FubmVyKHNlbGYpOgorICAgICAgICBkZWYgcGx1Z2luX3NjYW5uZXJfZm91bmQocGx1Z2luX3Nj
YW5uZXJfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4gKG9zLnBhdGguaXNmaWxlKHBsdWdpbl9z
Y2FubmVyX3BhdGgpIGFuZCBvcy5hY2Nlc3MocGx1Z2luX3NjYW5uZXJfcGF0aCwgb3MuWF9PSykp
CisKKyAgICAgICAgZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVyX2RpciA9IGdpb19tb2R1bGVfZGly
ID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdnc3RyZWFtZXItMS4wJywgJ3BsdWdpbnNjYW5u
ZXJkaXInLCBhc3NlcnRfdmFsdWU9RmFsc2UpCisgICAgICAgIGdzdHJlYW1lcl9wbHVnaW5fc2Nh
bm5lciA9IG9zLnBhdGguam9pbihnc3RyZWFtZXJfcGx1Z2luX3NjYW5uZXJfZGlyLCAnZ3N0LXBs
dWdpbi1zY2FubmVyJykKKyAgICAgICAgaWYgbm90IHBsdWdpbl9zY2FubmVyX2ZvdW5kKGdzdHJl
YW1lcl9wbHVnaW5fc2Nhbm5lcik6CisgICAgICAgICAgICAjIHBsdWdpbnNjYW5uZXJkaXIgcGtn
LWNvbmZpZyB2YXJpYWJsZSBpcyBhdmFpbGFibGUgb25seSBvbiByZWNlbnQgdmVyc2lvbnMgb2Yg
Z3N0CisgICAgICAgICAgICAjIGdpdmUgaXQgYSBzZWNvbmQgY2hhbmNlIHdpdGggc29tZSBrbm93
biBkaXJlY3RvcmllcyBvbiBkZWJpYW4vdWJ1bnR1IGFuZCBmZWRvcmEvY2VudG9zCisgICAgICAg
ICAgICBsaWJfZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdnc3RyZWFtZXItMS4wJywg
J2xpYmRpcicpCisgICAgICAgICAgICBwbHVnaW5zX2RpciA9IHNlbGYuX2dldF9wa2dfY29uZmln
X3ZhcignZ3N0cmVhbWVyLTEuMCcsICdwbHVnaW5zZGlyJykKKyAgICAgICAgICAgIGZvciBnc3Ry
ZWFtZXJfcGx1Z2luX3NjYW5uZXJfZGlyIGluIFsgb3MucGF0aC5qb2luKGxpYl9kaXIsICdnc3Ry
ZWFtZXIxLjAvZ3N0cmVhbWVyLTEuMCcpLCBwbHVnaW5zX2RpciwgJy91c3IvbGliZXhlYy9nc3Ry
ZWFtZXItMS4wJ106CisgICAgICAgICAgICAgICAgZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVyID0g
b3MucGF0aC5qb2luKGdzdHJlYW1lcl9wbHVnaW5fc2Nhbm5lcl9kaXIsICdnc3QtcGx1Z2luLXNj
YW5uZXInKQorICAgICAgICAgICAgICAgIGlmIHBsdWdpbl9zY2FubmVyX2ZvdW5kKGdzdHJlYW1l
cl9wbHVnaW5fc2Nhbm5lcik6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlm
IG5vdCBwbHVnaW5fc2Nhbm5lcl9mb3VuZChnc3RyZWFtZXJfcGx1Z2luX3NjYW5uZXIpOgorICAg
ICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDb3VsZCBub3QgZmluZCBnc3QtcGx1Z2luLXNj
YW5uZXIgYmluYXJ5IGF0IHBhdGggIiVzIi4nICUgZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVyKQor
ICAgICAgICByZXR1cm4gZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVyCisKKyAgICBkZWYgX2dldF9l
eHRyYV9zeXN0ZW1fbGlicmFyaWVzKHNlbGYpOgorICAgICAgICBleHRyYV9saWJyYXJpZXMgPSBb
XQorICAgICAgICBsaWJfZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdkcmknLCAnbGli
ZGlyJykKKyAgICAgICAgZm9yIGVudHJ5IGluIG9zLmxpc3RkaXIobGliX2Rpcik6CisgICAgICAg
ICAgICAjIG5lZWQgdG8gYWRkIG1vcmUgbGliYyBsaWJyYXJpZXMKKyAgICAgICAgICAgICMgYWxz
byBuZWVkIHRvIGFkZCBtYXliZSBnY29uZiBDIGxpYnJhcnkgcGx1Z2lucworICAgICAgICAgICAg
bGliY19saWJyYXJ5X25hbWVzID0gWydsaWJCcm9rZW5Mb2NhbGUtMi4yOC5zbycsICdsaWJTZWdG
YXVsdC5zbycsICdsaWJhbmwtMi4yOC5zbycsICdsaWJjLTIuMjguc28nLCAnbGliY3J5cHQtMi4y
OC5zbycsICdsaWJkbC0yLjI4LnNvJywgJ2xpYm0tMi4yOC5zbycsICdsaWJtZW11c2FnZS5zbycs
ICdsaWJtdmVjLTIuMjguc28nLCAnbGlibnNsLTIuMjguc28nLCAgJ2xpYnBjcHJvZmlsZS5zbycs
ICdsaWJwdGhyZWFkLTIuMjguc28nLCAnbGlicmVzb2x2LTIuMjguc28nLCAnbGlicnQtMi4yOC5z
bycsICdsaWJ0aHJlYWRfZGItMS4wLnNvJywgJ2xpYnV0aWwtMi4yOC5zbycsICdzb3RydXNzLWxp
Yi5zbycsICdsaWJCcm9rZW5Mb2NhbGUuc28uMScsICdsaWJhbmwuc28uMScsICdsaWJjLnNvLjYn
LCAnbGliY3J5cHQuc28uMScsICdsaWJkbC5zby4yJywgJ2xpYm0uc28uNicsICdsaWJtdmVjLnNv
LjEnLCAnbGlibnNsLnNvLjEnLCAnbGlicHRocmVhZC5zby4wJywgJ2xpYnJlc29sdi5zby4yJywg
J2xpYnJ0LnNvLjEnLCAnbGlidGhyZWFkX2RiLnNvLjEnLCAnbGlidXRpbC5zby4xJ10KKyAgICAg
ICAgICAgICMgZm91bmQgaW4gc3RyYWNlIG91dHB1dC4uIG5vdCBzdXJlIHdoeSB0aGlzIGlzIG5v
dCBkZXRlY3RlZCwgbWF5YmUgcmVsYXRlZCB3aXRoIGdkay1waXhidWYgbG9hZGVycworICAgICAg
ICAgICAgb3RoZXJfZXh0cmFfbGlicmFyeV9uYW1lcyA9IFsnbGlicnN2Zy0yLnNvLjInLCAnbGli
Y3JvY28tMC42LnNvLjMnXQorICAgICAgICAgICAgaWYgZW50cnkgaW4gb3RoZXJfZXh0cmFfbGli
cmFyeV9uYW1lcyBvciBlbnRyeSBpbiBsaWJjX2xpYnJhcnlfbmFtZXMgb3IgKGVudHJ5LnN0YXJ0
c3dpdGgoJ2xpYm5zc18nKSBhbmQgJy5zby4nIGluIGVudHJ5IGFuZCAxID09IGxlbihlbnRyeS5z
cGxpdCgnLnNvLicpWzFdKSk6CisgICAgICAgICAgICAgICAgZXh0cmFfbGliX3BhdGggPSBvcy5w
YXRoLmpvaW4obGliX2RpciwgZW50cnkpCisgICAgICAgICAgICAgICAgZXh0cmFfbGlicmFyaWVz
LmFwcGVuZChleHRyYV9saWJfcGF0aCkKKyAgICAgICAgcmV0dXJuIGV4dHJhX2xpYnJhcmllcwor
CisgICAgZGVmIF9nZXRfbWVzYV9saWJyYXJpZXMoc2VsZik6CisgICAgICAgIG1lc2FfbGlicmFy
aWVzID0gW10KKyAgICAgICAgbGliX2Rpcl9kcmkgPSBzZWxmLl9nZXRfcGtnX2NvbmZpZ192YXIo
J2RyaScsICdsaWJkaXInKQorICAgICAgICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIGZsYXRwYWsg
U0RLIHNoaXBzIHRoZSBNZXNhIGxpYnJhcmllcyBpbnRvIGEgbm9uLXN0YW5kYXJkIHBhdGguCisg
ICAgICAgIGNhbmRpZGF0ZV9saWJfZGlycyA9IFsgbGliX2Rpcl9kcmksIG9zLnBhdGguam9pbihs
aWJfZGlyX2RyaSwgJ0dML2RlZmF1bHQvbGliJykgXQorICAgICAgICBmb3IgbGliX2RpciBpbiBj
YW5kaWRhdGVfbGliX2RpcnM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGxpYl9kaXIp
OgorICAgICAgICAgICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKGxpYl9kaXIpOgorICAg
ICAgICAgICAgICAgICAgICBpZiBlbnRyeSBpbiBbJ2xpYmdsYXBpLnNvLjAnLCAnbGlieGNiLWds
eC5zby4wJywgJ2xpYkdMWC5zby4wJywgJ2xpYkVHTC5zby4xJywgJ2xpYkdMLnNvLjEnLCAnbGli
R0xFU3YyLnNvLjInXSBvciBlbnRyeS5lbmRzd2l0aCgnX21lc2Euc28uMCcpOgorICAgICAgICAg
ICAgICAgICAgICAgICAgbWVzYV9saWJfcGF0aCA9IG9zLnBhdGguam9pbihsaWJfZGlyLCBlbnRy
eSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc2FfbGlicmFyaWVzLmFwcGVuZChtZXNhX2xp
Yl9wYXRoKQorICAgICAgICByZXR1cm4gbWVzYV9saWJyYXJpZXMKKworICAgIGRlZiBfZ2V0X21l
c2FfZHJpX2RyaXZlcnMoc2VsZik6CisgICAgICAgIGRyaWRyaXZlcl9kaXIgPSBzZWxmLl9nZXRf
cGtnX2NvbmZpZ192YXIoJ2RyaScsICdkcmlkcml2ZXJkaXInKQorICAgICAgICByZXR1cm4gc2Vs
Zi5fbGlzdF9maWxlc19kaXJlY3RvcnkoZHJpZHJpdmVyX2RpciwgZmlsdGVyX3N1ZmZpeD0nLnNv
JykKKworICAgIGRlZiBfZ2V0X2dka19waXhidWZfbG9hZGVycyhzZWxmKToKKyAgICAgICAgbG9h
ZGVyc19kaXIgPSBzZWxmLl9nZXRfcGtnX2NvbmZpZ192YXIoJ2dkay1waXhidWYtMi4wJywgJ2dk
a19waXhidWZfbW9kdWxlZGlyJykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpc3RfZmlsZXNfZGly
ZWN0b3J5KGxvYWRlcnNfZGlyLCBmaWx0ZXJfc3VmZml4PScuc28nKQorCisgICAgZGVmIF9nZXRf
Z2RrX3F1ZXJ5X2xvYWRlcnNfYmluYXJ5KHNlbGYpOgorICAgICAgICBnZGtfcGl4YnVmX3F1ZXJ5
X2xvYWRlcl92YWx1ZSA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3ZhcignZ2RrLXBpeGJ1Zi0yLjAn
LCAnZ2RrX3BpeGJ1Zl9xdWVyeV9sb2FkZXJzJykKKyAgICAgICAgZ2RrX3BpeGJ1Zl9saWJkaXIg
PSBzZWxmLl9nZXRfcGtnX2NvbmZpZ192YXIoJ2dkay1waXhidWYtMi4wJywgJ2xpYmRpcicpCisg
ICAgICAgICMgU29tZSBkaXN0cm9zIChsaWtlIERlYmlhbikgZG9uJ3Qgc2hpcCB0aGUgYmluYXJ5
IG9uIHRoZSBkZWNsYXJlZCBwYXRoIG9uIHBrZy1jb25maWcsIGJ1dCBpbnNpZGUgJGxpYmRpci9n
ZGstcGl4YnVmLTIuMAorICAgICAgICBmb3IgZ2RrX3BpeGJ1Zl9iaW5hcnkgIGluIFsgZ2RrX3Bp
eGJ1Zl9xdWVyeV9sb2FkZXJfdmFsdWUsIG9zLnBhdGguam9pbihnZGtfcGl4YnVmX2xpYmRpciwg
J2dkay1waXhidWYtMi4wL2dkay1waXhidWYtcXVlcnktbG9hZGVycycpIF06CisgICAgICAgICAg
ICBpZiBvcy5wYXRoLmlzZmlsZShnZGtfcGl4YnVmX2JpbmFyeSkgYW5kIG9zLmFjY2VzcyhnZGtf
cGl4YnVmX2JpbmFyeSwgb3MuWF9PSyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdka19waXhi
dWZfYmluYXJ5CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVW5hYmxlIHRvIGZpbmQgYSB2
YWxpZCBwYXRoIHRvIGdkay1waXhidWYtcXVlcnktbG9hZGVycyBiaW5hcnknKQorCisgICAgZGVm
IF9nZXRfZ3RrX3F1ZXJ5X2ltbW9kdWxlc19iaW5hcnkoc2VsZik6CisgICAgICAgIGd0a19saWJk
aXIgPSBzZWxmLl9nZXRfcGtnX2NvbmZpZ192YXIoJ2d0aystMy4wJywgJ2xpYmRpcicpCisgICAg
ICAgIGZvciBndGtfZGlyIGluIFsgJy91c3IvYmluJywgZ3RrX2xpYmRpciwgb3MucGF0aC5qb2lu
KGd0a19saWJkaXIsICdsaWJndGstMy0wJyksIG9zLnBhdGguam9pbihndGtfbGliZGlyLCAnZ3Rr
LTMuMCcpIF06CisgICAgICAgICAgICBndGtfaW1tb2R1bGVzX2JpbmFyeSA9IG9zLnBhdGguam9p
bihndGtfZGlyLCAnZ3RrLXF1ZXJ5LWltbW9kdWxlcy0zLjAnKQorICAgICAgICAgICAgaWYgb3Mu
cGF0aC5pc2ZpbGUoZ3RrX2ltbW9kdWxlc19iaW5hcnkpIGFuZCBvcy5hY2Nlc3MoZ3RrX2ltbW9k
dWxlc19iaW5hcnksIG9zLlhfT0spOgorICAgICAgICAgICAgICAgIHJldHVybiBndGtfaW1tb2R1
bGVzX2JpbmFyeQorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1VuYWJsZSB0byBmaW5kIGEg
dmFsaWQgcGF0aCB0byBnZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgYmluYXJ5JykKKworICAgIGRl
ZiBfZ2V0X3BpcGV3aXJlX3NwYV9iYXNlZGlyX2FuZF9wbHVnaW5zKHNlbGYpOgorICAgICAgICBz
cGFfcGx1Z2luX2RpciA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3ZhcignbGlic3BhLTAuMicsICdw
bHVnaW5kaXInLCBhc3NlcnRfdmFsdWU9RmFsc2UpCisgICAgICAgICMgQ3VycmVudGx5IHRoZSBm
bGF0cGFrIFNESyBkb2Vzbid0IGRlY2xhcmUgcGx1Z2luZGlyIChub3Qgc3VyZSB3aHkpLi4gZmFs
bGJhY2sgdG8gYnVpbGQgaXQgZnJvbSBsaWJkaXIKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNk
aXIoc3BhX3BsdWdpbl9kaXIpOgorICAgICAgICAgICAgc3BhX3BsdWdpbl9kaXIgPSBzZWxmLl9n
ZXRfcGtnX2NvbmZpZ192YXIoJ2xpYnNwYS0wLjInLCAnbGliZGlyJykKKyAgICAgICAgICAgIHNw
YV9wbHVnaW5fZGlyID0gb3MucGF0aC5qb2luKHNwYV9wbHVnaW5fZGlyLCAnc3BhLTAuMicpCisg
ICAgICAgIHBpcGV3aXJlX3NwYV9wbHVnaW5zID0gc2VsZi5fbGlzdF9maWxlc19kaXJlY3Rvcnko
c3BhX3BsdWdpbl9kaXIsIGxpc3RfaW5zaWRlX3N1YmRpcnM9VHJ1ZSwgZmlsdGVyX3N1ZmZpeD0n
LnNvJykKKyAgICAgICAgcmV0dXJuIHNwYV9wbHVnaW5fZGlyLCBwaXBld2lyZV9zcGFfcGx1Z2lu
cwogCiAgICAgZGVmIF9hZGRfb2JqZWN0X29yX2dldF9zeXNkZXAoc2VsZiwgb2JqZWN0LCBvYmpl
Y3RfdHlwZSk6CiAgICAgICAgIHByb3ZpZGVkX2J5X3N5c3RlbV9wYWNrYWdlID0gTm9uZQogICAg
ICAgICBpZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKLSAgICAgICAgICAgIHNlbGYu
X2J1bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRoKG9iamVjdCwgdHlwZT1vYmplY3RfdHlwZSkK
KyAgICAgICAgICAgIHNlbGYuX2J1bmRsZXIuY29weV9hbmRfbWF5YmVfc3RyaXBfcGF0Y2hlbGYo
b2JqZWN0LCB0eXBlPW9iamVjdF90eXBlLCBzdHJpcD1zZWxmLl9zaG91bGRfc3RyaXBfb2JqZWN0
cywgcGF0Y2hlbGZfcmVtb3ZlcnBhdGg9VHJ1ZSwgcGF0Y2hlbGZfbm9kZWZhdWx0bGliPVRydWUp
CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwcm92aWRlZF9ieV9zeXN0ZW1fcGFja2FnZSA9
IHNlbGYuX2dldF9zeXN0ZW1fcGFja2FnZV9uYW1lKG9iamVjdCkKICAgICAgICAgICAgIGlmIG5v
dCBwcm92aWRlZF9ieV9zeXN0ZW1fcGFja2FnZToKLSAgICAgICAgICAgICAgICBzZWxmLl9idW5k
bGVyLmNvcHlfYW5kX3JlbW92ZV9ycGF0aChvYmplY3QsIHR5cGU9b2JqZWN0X3R5cGUpCisgICAg
ICAgICAgICAgICAgc2VsZi5fYnVuZGxlci5jb3B5X2FuZF9tYXliZV9zdHJpcF9wYXRjaGVsZihv
YmplY3QsIHR5cGU9b2JqZWN0X3R5cGUsIHN0cmlwPXNlbGYuX3Nob3VsZF9zdHJpcF9vYmplY3Rz
LCBwYXRjaGVsZl9yZW1vdmVycGF0aD1UcnVlLCBwYXRjaGVsZl9ub2RlZmF1bHRsaWI9RmFsc2Up
CiAgICAgICAgIHJldHVybiBwcm92aWRlZF9ieV9zeXN0ZW1fcGFja2FnZQogCiAgICAgZGVmIF9l
bnN1cmVfd3BlX2JhY2tlbmRfc3ltbGluayhzZWxmKToKQEAgLTM4Miw2ICs1NTAsODQgQEAgY2xh
c3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICBvcy5zeW1saW5r
KGVudHJ5LCB3cGVfYmFja2VuZF9zb25hbWUpCiAgICAgICAgICAgICAgICAgb3MuY2hkaXIocHJl
dmlvdXNfZGlyKQogICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBvcy5wYXRo
LmlzZmlsZShvcy5wYXRoLmpvaW4oYnVuZGxlX2xpYl9kaXIsIHdwZV9iYWNrZW5kX3NvbmFtZSkp
OgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdVbmFibGUgdG8gY3JlYXRlIGxpYldQ
RUJhY2tlbmQtZmRvLTEuMC5zbyBzeW1saW5rJykKKworICAgIGRlZiBfZGxvcGVud3JhcF9tYWtl
KHNlbGYsIGFjdGlvbj1Ob25lKToKKyAgICAgICAgZGxvcGVud3JhcF9wYXRoID0gb3MucGF0aC5q
b2luKHNlbGYuX2Rsb3BlbndyYXBfZGlyLCAnZGxvcGVud3JhcC5zbycpCisgICAgICAgIHByZXZp
b3VzX2N3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHNlbGYuX2Rsb3BlbndyYXBf
ZGlyKQorICAgICAgICBpZiBhY3Rpb24gPT0gJ2J1aWxkJzoKKyAgICAgICAgICAgIHJldGNvZGUs
IHN0ZG91dCwgc3RkZXJyID0gc2VsZi5fcnVuX2NtZF9hbmRfZ2V0X291dHB1dChbJ21ha2UnXSkK
KyAgICAgICAgICAgIGlmIChyZXRjb2RlICE9IDApIG9yIChub3Qgb3MucGF0aC5pc2ZpbGUoZGxv
cGVud3JhcF9wYXRoKSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdFcnJv
ciBidWlsZGluZyBkbG9wZW53cmFwLnNvOiBUaGUgbWFrZSBjb21tYW5kIHJldHVybmVkICVkIHN0
YXR1cyB3aXRoIHRoaXMgb3V0cHV0OiAlcyAlcycgJSAocmV0Y29kZSwgc3Rkb3V0LCBzdGRlcnIp
KQorICAgICAgICBlbGlmIGFjdGlvbiA9PSAnY2xlYW4nOgorICAgICAgICAgICAgcmV0Y29kZSwg
c3Rkb3V0LCBzdGRlcnIgPSBzZWxmLl9ydW5fY21kX2FuZF9nZXRfb3V0cHV0KFsnbWFrZScsICdj
bGVhbiddKQorICAgICAgICAgICAgaWYgKHJldGNvZGUgIT0gMCkgb3Igb3MucGF0aC5pc2ZpbGUo
ZGxvcGVud3JhcF9wYXRoKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0Vy
cm9yIGNsZWFuaW5nIGRsb3BlbndyYXAuc286IFRoZSBtYWtlIGNvbW1hbmQgcmV0dXJuZWQgJWQg
c3RhdHVzIHdpdGggdGhpcyBvdXRwdXQ6ICVzICVzJyAlIChyZXRjb2RlLCBzdGRvdXQsIHN0ZGVy
cikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
KCdVbmtub3duIGFjdGlvbiAlcycgJSBhY3Rpb24pCisgICAgICAgIG9zLmNoZGlyKHByZXZpb3Vz
X2N3ZCkKKyAgICAgICAgcmV0dXJuIGRsb3BlbndyYXBfcGF0aAorCisgICAgZGVmIF9kaXNjb3Zl
cl9lZ2xfbWVzYV9jb25maWdfZmlsZShzZWxmKToKKyAgICAgICAgZWdsX2xpYmRpciA9IHNlbGYu
X2dldF9wa2dfY29uZmlnX3ZhcignZWdsJywgJ2xpYmRpcicpCisgICAgICAgICMgTm90IGtub3du
IHdheSBvZiBnZXR0aW5nIHRoZSBkaXJlY3RvcnkgZHluYW1pY2FsbHksIGFzc3VtZSBpdCBpcyB0
aGVyZS4KKyAgICAgICAgaWNkX2VnbF9tZXNhX2NvbmZpZ19jYW5kaWRhdGVzID0gWycvdXNyL3No
YXJlL2dsdm5kL2VnbF92ZW5kb3IuZC81MF9tZXNhLmpzb24nLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihlZ2xfbGliZGlyLCAnR0wvZ2x2
bmQvZWdsX3ZlbmRvci5kLzUwX21lc2EuanNvbicpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihlZ2xfbGliZGlyLCAnZ2x2bmQvZWdsX3Zl
bmRvci5kLzUwX21lc2EuanNvbicpXQorICAgICAgICBmb3IgaWNkX2VnbF9tZXNhX2NvbmZpZ19j
YW5kaWRhdGUgaW4gaWNkX2VnbF9tZXNhX2NvbmZpZ19jYW5kaWRhdGVzOgorICAgICAgICAgICAg
aWYgb3MucGF0aC5pc2ZpbGUoaWNkX2VnbF9tZXNhX2NvbmZpZ19jYW5kaWRhdGUpOgorICAgICAg
ICAgICAgICAgIHJldHVybiBpY2RfZWdsX21lc2FfY29uZmlnX2NhbmRpZGF0ZQorICAgICAgICBy
YWlzZSBSdW50aW1lRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIG1lc2EgRUdMIElDRCBjb25maWcnKQor
CisgICAgZGVmIF9nZXRfbWVzYV9lZ2xfaWNkX2RyaXZlcl9wYXRoKHNlbGYsIGljZF9jb25maWcp
OgorICAgICAgICB3aXRoIG9wZW4oaWNkX2NvbmZpZywgJ3InKSBhcyBmOgorICAgICAgICAgICAg
anNvbl9kYXRhID0ganNvbi5sb2FkKGYpCisgICAgICAgIGVnbF9pY2RfbGlicmFyeV9uYW1lID0g
anNvbl9kYXRhWydJQ0QnXVsnbGlicmFyeV9wYXRoJ10KKyAgICAgICAgaWYgb3MucGF0aC5pc2Fi
cyhlZ2xfaWNkX2xpYnJhcnlfbmFtZSk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yKCdQYXRoIHJld3JpdHRpbmcgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgdG8gaGFuZGxl
IElDRCBjb25maWcgZmlsZXMgd2l0aCBhYnNwYXRoJykKKyAgICAgICAgIyBTb21lIHZlcnNpb25z
IG9mIHRoZSBmbGF0cGFrIFNESyBzaGlwcyB0aGUgRUdMIElDRCBsaWJyYXJ5IGludG8gYSBub24t
c3RhbmRhcmQgcGF0aC4KKyAgICAgICAgZWdsX2xpYmRpciA9IHNlbGYuX2dldF9wa2dfY29uZmln
X3ZhcignZWdsJywgJ2xpYmRpcicpCisgICAgICAgIGVnbF9pY2RfbGlicmFyeV9mb3VuZCA9IEZh
bHNlCisgICAgICAgIGVnbF9pY2RfbGlicmFyeV9wYXRocyA9IFtvcy5wYXRoLmpvaW4oZWdsX2xp
YmRpciwgZWdsX2ljZF9saWJyYXJ5X25hbWUpLCBvcy5wYXRoLmpvaW4oZWdsX2xpYmRpciwgJ0dM
L2RlZmF1bHQvbGliJywgZWdsX2ljZF9saWJyYXJ5X25hbWUpXQorICAgICAgICBmb3IgZWdsX2lj
ZF9saWJyYXJ5X3BhdGggaW4gZWdsX2ljZF9saWJyYXJ5X3BhdGhzOgorICAgICAgICAgICAgaWYg
b3MucGF0aC5pc2ZpbGUoZWdsX2ljZF9saWJyYXJ5X3BhdGgpOgorICAgICAgICAgICAgICAgIGVn
bF9pY2RfbGlicmFyeV9mb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAg
ICBpZiBub3QgZWdsX2ljZF9saWJyYXJ5X2ZvdW5kOgorICAgICAgICAgICAgcmFpc2UgUnVudGlt
ZUVycm9yKCdVbmFibGUgdG8gZmluZCB0aGUgRUdMIElDRCBsaWJyYXJ5ICVzJyAlIGVnbF9pY2Rf
bGlicmFyeV9wYXRoKQorICAgICAgICByZXR1cm4gZWdsX2ljZF9saWJyYXJ5X3BhdGgKKworICAg
IGRlZiBfZ2V0X3RvdGFsX3NpemVfZGlyKHNlbGYsIGRpcmVjdG9yeSk6CisgICAgICAgIHNpemUg
PSAwCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpcmVjdG9yeSk6
CisgICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBmaWxlX3Bh
dGggPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRo
LmlzZmlsZShmaWxlX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICBzaXplICs9IG9zLnBhdGgu
Z2V0c2l6ZShmaWxlX3BhdGgpCisgICAgICAgIHJldHVybiBzaXplCisKKyAgICBkZWYgX2dlbmVy
YXRlX2ZvbnRfY29uZihzZWxmLCBkYXRhX2RpcmVjdG9yeSk6CisgICAgICAgIGZvbnRfY29uZl9w
YXRoID0gb3MucGF0aC5qb2luKGRhdGFfZGlyZWN0b3J5LCAnZm9udHMuY29uZicpCisgICAgICAg
IHdpdGggb3Blbihmb250X2NvbmZfcGF0aCwgJ3cnKSBhcyBmb250X2NvbmZfaGFuZGxlOgorICAg
ICAgICAgICAgZm9udF9jb25mX2hhbmRsZS53cml0ZShGT05UX0NPTkZfRklMRSkKKworICAgIGRl
ZiBfZ2VuZXJhdGVfdGxzX2NhZmlsZShzZWxmLCBkYXRhX2RpcmVjdG9yeSk6CisgICAgICAgIGNh
ZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGRhdGFfZGlyZWN0b3J5LCAnYnVuZGxlLWNhLWNlcnRp
ZmljYXRlcy5wZW0nKQorICAgICAgICByZXRjb2RlLCBzdGRvdXQsIHN0ZGVyciA9IHNlbGYuX3J1
bl9jbWRfYW5kX2dldF9vdXRwdXQoWyd0cnVzdCcsICdleHRyYWN0JywgJy0tZm9ybWF0PXBlbS1i
dW5kbGUnLCBjYWZpbGVfcGF0aF0pCisgICAgICAgICMgdHJ1c3QgZmFpbHMgaW5zaWRlIGZsYXRw
YWsgZHVlIHRvIGh0dHBzOi8vZ2l0bGFiLmNvbS9mcmVlZGVza3RvcC1zZGsvZnJlZWRlc2t0b3At
c2RrLy0vaXNzdWVzLzkwNAorICAgICAgICAjIGZhbGwtYmFjayB0byB0cnlpbmcgdG8gbWFudWFs
bHkgY29weSB0aGUgYnVuZGxlCisgICAgICAgIGlmIChyZXRjb2RlICE9IDApIG9yIChub3Qgb3Mu
cGF0aC5pc2ZpbGUoY2FmaWxlX3BhdGgpKSBvciAob3MucGF0aC5nZXRzaXplKGNhZmlsZV9wYXRo
KSA8IDEwMCk6CisgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ0ZhaWxlZCB0byBnZXQgc3lzdGVt
IENBIGJ1bmRsZSB3aXRoIHRoZSB0cnVzdCBjb21tYW5kLiBUcnlpbmcgdG8gZmFsbC1iYWNrIHRv
IG1hbnVhbCBjb3B5LicpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShjYWZpbGVfcGF0
aCk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGNhZmlsZV9wYXRoKQorICAgICAgICAgICAg
Zm9yIGNhbmRpZGF0ZV9jYWZpbGUgaW4gWycvZXRjL3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMu
Y3J0JywgJy9ldGMvc3NsL2NlcnQucGVtJywgJy9ldGMvcGtpL2NhLXRydXN0L2V4dHJhY3RlZC9w
ZW0vdGxzLWNhLWJ1bmRsZS5wZW0nXToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmls
ZShjYW5kaWRhdGVfY2FmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkoY2Fu
ZGlkYXRlX2NhZmlsZSwgY2FmaWxlX3BhdGgpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisg
ICAgICAgIGlmIChub3Qgb3MucGF0aC5pc2ZpbGUoY2FmaWxlX3BhdGgpKSBvciAob3MucGF0aC5n
ZXRzaXplKGNhZmlsZV9wYXRoKSA8IDEwMCk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJy
b3IoJ0ZhaWxlZCB0byBnZW5lcmF0ZSBvciBjb3B5IHRoZSBzeXN0ZW0gVExTIENBRmlsZSB3aXRo
IHRoZSBjZXJ0aWZpY2F0ZXMuJykKIAogICAgIGRlZiBfY3JlYXRlX2J1bmRsZShzZWxmLCBidW5k
bGVfYmluYXJ5KToKICAgICAgICAgbWFpbl9iaW5hcnlfcGF0aCA9IG9zLnBhdGguam9pbihzZWxm
Ll9idWlsZHBhdGgsICdiaW4nLCBidW5kbGVfYmluYXJ5KQpAQCAtMzg5LDQ4ICs2MzUsMTA2IEBA
IGNsYXNzIEJ1bmRsZUNyZWF0b3Iob2JqZWN0KToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoJ0Nhbm5vdCBmaW5kIGJpbmFyeSBmb3IgJXMgYXQgJXMnICUgKGJ1bmRsZV9iaW5hcnksIG1h
aW5fYmluYXJ5X3BhdGgpICkKIAogICAgICAgICBjb3BpZWRfaW50ZXJwcmV0ZXIgPSBOb25lCisg
ICAgICAgIG5lZWRzX3RvX2NyZWF0ZV93cGVfYmFja2VuZF9zeW1saW5rID0gRmFsc2UKICAgICAg
ICAgZ2lvX21vZHVsZXMgPSBbXQorICAgICAgICBndGtfcHJpbnRfbW9kdWxlcyA9IFtdCisgICAg
ICAgIGd0a19pbV9tb2R1bGVzID0gW10KICAgICAgICAgZ3N0cmVhbWVyX21vZHVsZXMgPSBbXQor
ICAgICAgICBtZXNhX2RyaV9kcml2ZXJzID0gW10KKyAgICAgICAgcGlwZXdpcmVfc3BhX3BsdWdp
bnMgPSBbXQorICAgICAgICBnZGtfcGl4YnVmX2xvYWRlcnMgPSBbXQorICAgICAgICBlZ2xfaWNk
X21lc2FfY29uZmlnX2ZpbGUgPSBOb25lCiAgICAgICAgIGxpYnJhcmllc19jaGVja2VkID0gc2V0
KCkKICAgICAgICAgc3lzdGVtX3BhY2thZ2VzX25lZWRlZCA9IHNldCgpCisgICAgICAgIGJpbmFy
aWVzX3RvX2NvcHkgPSBzZXQoKQogICAgICAgICBvYmplY3RzX3RvX2NvcHkgPSBbIG1haW5fYmlu
YXJ5X3BhdGggXQorICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBzZXBhcmF0ZSB0aGUgbGlicmFy
aWVzIGluIGxpYiBhbmQgc3lzL2xpYiBmb3IgTWluaUJyb3dzZXIgYW5kICdhbGwnIGJ1bmRsZXMK
KyAgICAgICAgc2VsZi5fYnVuZGxlci5zZXRfdXNlX3N5c19saWJfZGlyZWN0b3J5KCdNaW5pQnJv
d3NlcicgaW4gc2VsZi5fYnVuZGxlX2JpbmFyaWVzKQogICAgICAgICBpZiBidW5kbGVfYmluYXJ5
ID09ICdNaW5pQnJvd3Nlcic6Ci0gICAgICAgICAgICBnaW9fbW9kdWxlcyA9IHNlbGYuX2dldF9n
aW9fbW9kdWxlcygpCi0gICAgICAgICAgICBnc3RyZWFtZXJfbW9kdWxlcyA9IHNlbGYuX2dldF9n
c3RyZWFtZXJfbW9kdWxlcygpCisgICAgICAgICAgICAjIGJ1bmRkbGUgV2ViS2l0IGxpYnJhcmll
cwogICAgICAgICAgICAgb2JqZWN0c190b19jb3B5LmV4dGVuZChzZWxmLl9nZXRfd2Via2l0X2Jp
bmFyaWVzKCkpCi0gICAgICAgICAgICBvYmplY3RzX3RvX2NvcHkuYXBwZW5kKHNlbGYuX2dldF93
ZWJraXRfYnVuZGxlbGliKCkpCisgICAgICAgICAgICBvYmplY3RzX3RvX2NvcHkuYXBwZW5kKHNl
bGYuX2dldF93ZWJraXRfbGliKCdJbmplY3RlZEJ1bmRsZScpKQorICAgICAgICAgICAgaWYgc2Vs
Zi5fcGxhdGZvcm0gPT0gJ3dwZSc6CisgICAgICAgICAgICAgICAgb2JqZWN0c190b19jb3B5LmFw
cGVuZChzZWxmLl9nZXRfd2Via2l0X2xpYignSW5zcGVjdG9yUmVzb3VyY2VzJykpCisgICAgICAg
ICAgICAjIEJ1bmRsZSBleHRyYSBzeXN0ZW0gcmVsYXRlZCBsaWJyYXJpZXMKKyAgICAgICAgICAg
IGdpb19tb2R1bGVzID0gc2VsZi5fZ2V0X2dpb19tb2R1bGVzKCkKICAgICAgICAgICAgIG9iamVj
dHNfdG9fY29weS5leHRlbmQoZ2lvX21vZHVsZXMpCisgICAgICAgICAgICBnc3RyZWFtZXJfbW9k
dWxlcyA9IHNlbGYuX2dldF9nc3RyZWFtZXJfbW9kdWxlcygpCiAgICAgICAgICAgICBvYmplY3Rz
X3RvX2NvcHkuZXh0ZW5kKGdzdHJlYW1lcl9tb2R1bGVzKQorICAgICAgICAgICAgaWYgc2VsZi5f
c3lzbGlicyA9PSAnYnVuZGxlLWFsbCc6CisgICAgICAgICAgICAgICAgIyBuZWVkIHRvIHNoaXAg
YSBjb3B5IG9mIGdzdCBwbHVnaW5nIHNjYW5uZXIKKyAgICAgICAgICAgICAgICBvYmplY3RzX3Rv
X2NvcHkuYXBwZW5kKHNlbGYuX2dldF9nc3RyZWFtZXJfcGx1Z2luX3NjYW5uZXIoKSkKKyAgICAg
ICAgICAgICAgICAjIHBpcGV3aXJlIHNwYSBwbHVnaW5zCisgICAgICAgICAgICAgICAgcGlwZXdp
cmVfc3BhX3BsdWdpbl9iYXNlZGlyLCBwaXBld2lyZV9zcGFfcGx1Z2lucyA9IHNlbGYuX2dldF9w
aXBld2lyZV9zcGFfYmFzZWRpcl9hbmRfcGx1Z2lucygpCisgICAgICAgICAgICAgICAgb2JqZWN0
c190b19jb3B5LmV4dGVuZChwaXBld2lyZV9zcGFfcGx1Z2lucykKKyAgICAgICAgICAgICAgICAj
IGdyYXBoaWNzIGRyaXZlcnMKKyAgICAgICAgICAgICAgICBtZXNhX2RyaV9kcml2ZXJzID0gc2Vs
Zi5fZ2V0X21lc2FfZHJpX2RyaXZlcnMoKQorICAgICAgICAgICAgICAgIG9iamVjdHNfdG9fY29w
eS5leHRlbmQobWVzYV9kcmlfZHJpdmVycykKKyAgICAgICAgICAgICAgICBvYmplY3RzX3RvX2Nv
cHkuZXh0ZW5kKHNlbGYuX2dldF9tZXNhX2xpYnJhcmllcygpKQorICAgICAgICAgICAgICAgIGVn
bF9pY2RfbWVzYV9jb25maWdfZmlsZSA9IHNlbGYuX2Rpc2NvdmVyX2VnbF9tZXNhX2NvbmZpZ19m
aWxlKCkKKyAgICAgICAgICAgICAgICBvYmplY3RzX3RvX2NvcHkuYXBwZW5kKHNlbGYuX2dldF9t
ZXNhX2VnbF9pY2RfZHJpdmVyX3BhdGgoZWdsX2ljZF9tZXNhX2NvbmZpZ19maWxlKSkKKyAgICAg
ICAgICAgICAgICAjIHN5c3RlbSBleHRyYSBsaWJyYXJpZXMKKyAgICAgICAgICAgICAgICBvYmpl
Y3RzX3RvX2NvcHkuZXh0ZW5kKHNlbGYuX2dldF9leHRyYV9zeXN0ZW1fbGlicmFyaWVzKCkpCisg
ICAgICAgICAgICAgICAgIyBndGsgbW9kdWxlcworICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Bs
YXRmb3JtID09ICdndGsnOgorICAgICAgICAgICAgICAgICAgICBndGtfcHJpbnRfbW9kdWxlcyA9
IHNlbGYuX2dldF9ndGtfbW9kdWxlcygncHJpbnRiYWNrZW5kcycpCisgICAgICAgICAgICAgICAg
ICAgIG9iamVjdHNfdG9fY29weS5leHRlbmQoZ3RrX3ByaW50X21vZHVsZXMpCisgICAgICAgICAg
ICAgICAgICAgIGd0a19pbV9tb2R1bGVzID0gc2VsZi5fZ2V0X2d0a19tb2R1bGVzKCdpbW1vZHVs
ZXMnKQorICAgICAgICAgICAgICAgICAgICBvYmplY3RzX3RvX2NvcHkuZXh0ZW5kKGd0a19pbV9t
b2R1bGVzKQorICAgICAgICAgICAgICAgICAgICBnZGtfcGl4YnVmX2xvYWRlcnMgPSBzZWxmLl9n
ZXRfZ2RrX3BpeGJ1Zl9sb2FkZXJzKCkKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0c190b19j
b3B5LmV4dGVuZChnZGtfcGl4YnVmX2xvYWRlcnMpCisgICAgICAgICAgICAgICAgICAgIG9iamVj
dHNfdG9fY29weS5hcHBlbmQoc2VsZi5fZ2V0X2dka19xdWVyeV9sb2FkZXJzX2JpbmFyeSgpKQor
ICAgICAgICAgICAgICAgICAgICBvYmplY3RzX3RvX2NvcHkuYXBwZW5kKHNlbGYuX2dldF9ndGtf
cXVlcnlfaW1tb2R1bGVzX2JpbmFyeSgpKQorICAgICAgICAgICAgICAgICMgb3VyIGRsb3Blbndy
YXAgbGliCisgICAgICAgICAgICAgICAgb2JqZWN0c190b19jb3B5LmFwcGVuZChzZWxmLl9kbG9w
ZW53cmFwX21ha2UoJ2J1aWxkJykpCisKICAgICAgICAgZm9yIG9iamVjdCBpbiBvYmplY3RzX3Rv
X2NvcHk6CiAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IE5vbmUKICAgICAgICAgICAgIGlm
IG9iamVjdCBpbiBnaW9fbW9kdWxlczoKLSAgICAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9
IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2RlcChvYmplY3QsICdnaW8nKQotICAgICAgICAg
ICAgICAgIGlmIHN5c3RlbV9wYWNrYWdlOgotICAgICAgICAgICAgICAgICAgICBzeXN0ZW1fcGFj
a2FnZXNfbmVlZGVkLmFkZChzeXN0ZW1fcGFja2FnZSkKKyAgICAgICAgICAgICAgICBzeXN0ZW1f
cGFja2FnZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2RlcChvYmplY3QsICdsaWIvZ2lv
JykKICAgICAgICAgICAgIGVsaWYgb2JqZWN0IGluIGdzdHJlYW1lcl9tb2R1bGVzOgotICAgICAg
ICAgICAgICAgIHN5c3RlbV9wYWNrYWdlID0gc2VsZi5fYWRkX29iamVjdF9vcl9nZXRfc3lzZGVw
KG9iamVjdCwgJ2dzdCcpCi0gICAgICAgICAgICAgICAgaWYgc3lzdGVtX3BhY2thZ2U6Ci0gICAg
ICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlc19uZWVkZWQuYWRkKHN5c3RlbV9wYWNrYWdl
KQotICAgICAgICAgICAgZWxpZiBvYmplY3QuZW5kc3dpdGgoJy5zbycpOgotICAgICAgICAgICAg
ICAgIHNlbGYuX2J1bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRoKG9iamVjdCwgdHlwZT0nbGli
JykKKyAgICAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3Jf
Z2V0X3N5c2RlcChvYmplY3QsICdsaWIvZ3N0JykKKyAgICAgICAgICAgIGVsaWYgb2JqZWN0IGlu
IGd0a19wcmludF9tb2R1bGVzOgorICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlID0gc2Vs
Zi5fYWRkX29iamVjdF9vcl9nZXRfc3lzZGVwKG9iamVjdCwgJ2xpYi9ndGsvcHJpbnRiYWNrZW5k
cycpCisgICAgICAgICAgICBlbGlmIG9iamVjdCBpbiBndGtfcHJpbnRfbW9kdWxlczoKKyAgICAg
ICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2Rl
cChvYmplY3QsICdsaWIvZ3RrL3ByaW50YmFja2VuZHMnKQorICAgICAgICAgICAgZWxpZiBvYmpl
Y3QgaW4gZ3RrX2ltX21vZHVsZXM6CisgICAgICAgICAgICAgICAgc3lzdGVtX3BhY2thZ2UgPSBz
ZWxmLl9hZGRfb2JqZWN0X29yX2dldF9zeXNkZXAob2JqZWN0LCAnbGliL2d0ay9pbW1vZHVsZXMn
KQorICAgICAgICAgICAgZWxpZiBvYmplY3QgaW4gbWVzYV9kcmlfZHJpdmVyczoKKyAgICAgICAg
ICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2RlcChv
YmplY3QsICdsaWIvZHJpJykKKyAgICAgICAgICAgIGVsaWYgb2JqZWN0IGluIGdka19waXhidWZf
bG9hZGVyczoKKyAgICAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmpl
Y3Rfb3JfZ2V0X3N5c2RlcChvYmplY3QsICdsaWIvZ2RrLXBpeGJ1Zi9sb2FkZXJzJykKKyAgICAg
ICAgICAgIGVsaWYgb2JqZWN0IGluIHBpcGV3aXJlX3NwYV9wbHVnaW5zOgorICAgICAgICAgICAg
ICAgICMgVGhpcyBpcyBhIGxldmVsLTIgaW5kaXJlY3QgZGVwZW5kZW5jeSAoZ3N0cmVhbWVyIC0+
IGdzdC1waXBld2lyZSAtPiBwaXBld2lyZS1zcGEtcGx1Z2luKQorICAgICAgICAgICAgICAgICMg
Rm9yIHRoZSBjYXNlIG9mIHN5c3RlbV9wYWNrYWdlcyB3ZSByZWx5IG9uIHRoZSBkaXN0cm8gZGVw
ZW5kZW5jaWVzIGJldHdlbiBwYWNrYWdlcworICAgICAgICAgICAgICAgICMgQnV0IHRoZSBidW5k
bGUtYWxsIGNhc2Ugd2UgbmVlZCBhIHNwZWNpYWwgY2FzZSBiZWNhdXNlIHRoaXMgZGVwIGlzIG5v
dCBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIChkbG9wZW4gb2YgcGx1Z2lucykKKyAgICAgICAgICAg
ICAgICBpZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKKyAgICAgICAgICAgICAgICAg
ICAgcGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpciA9IG9iamVjdC5yZXBsYWNlKHBpcGV3
aXJlX3NwYV9wbHVnaW5fYmFzZWRpciwgJycsIDEpCisgICAgICAgICAgICAgICAgICAgIHBpcGV3
aXJlX3NwYV9wbHVnaW5fZGVzdF9zdWJkaXIgPSBvcy5wYXRoLmRpcm5hbWUocGlwZXdpcmVfc3Bh
X3BsdWdpbl9kZXN0X3N1YmRpci5sc3RyaXAoJy8nKSkKKyAgICAgICAgICAgICAgICAgICAgcGlw
ZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpciA9IG9zLnBhdGguam9pbignbGliL3BpcGV3aXJl
JywgcGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpcikKKyAgICAgICAgICAgICAgICAgICAg
c2VsZi5fYnVuZGxlci5jb3B5X2FuZF9tYXliZV9zdHJpcF9wYXRjaGVsZihvYmplY3QsIHR5cGU9
cGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpciwgc3RyaXA9c2VsZi5fc2hvdWxkX3N0cmlw
X29iamVjdHMsIHBhdGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBhdGNoZWxmX25vZGVmYXVsdGxp
Yj1UcnVlKQorICAgICAgICAgICAgZWxpZiAnLnNvJyBpbiBvYmplY3Q6CisgICAgICAgICAgICAg
ICAgaWYgJ2xpYndwZWJhY2tlbmQnIGluIG9iamVjdC5sb3dlcigpOgorICAgICAgICAgICAgICAg
ICAgICBuZWVkc190b19jcmVhdGVfd3BlX2JhY2tlbmRfc3ltbGluayA9IFRydWUKKyAgICAgICAg
ICAgICAgICBzZWxmLl9idW5kbGVyLmNvcHlfYW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKG9iamVj
dCwgdHlwZT0nbGliJywgc3RyaXA9c2VsZi5fc2hvdWxkX3N0cmlwX29iamVjdHMsIHBhdGNoZWxm
X3JlbW92ZXJwYXRoPVRydWUsIHBhdGNoZWxmX25vZGVmYXVsdGxpYj1zZWxmLl9zeXNsaWJzPT0n
YnVuZGxlLWFsbCcpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuX2J1
bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRoKG9iamVjdCwgdHlwZT0nYmluJykKKyAgICAgICAg
ICAgICAgICBiaW5hcmllc190b19jb3B5LmFkZChvYmplY3QpCiAgICAgICAgICAgICAjIFRoZXJl
IGlzIG5vIG5lZWQgdG8gZXhhbWluZSB0aGUgbGlicmFyaWVzIGxpbmtlZCB3aXRoIG9iamVjdHMg
Y29taW5nIGZyb20gYSBzeXN0ZW0gcGFja2FnZSwKICAgICAgICAgICAgICMgYmVjYXVzZSBzeXN0
ZW0gcGFja2FnZXMgYWxyZWFkeSBkZWNsYXJlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZW0uCiAg
ICAgICAgICAgICAjIEhvd2V2ZXIsIGlmIHdlIGFyZSBydW5uaW5nIHdpdGggc2VsZi5fc3lzbGli
cyA9PSAnYnVuZGxlLWFsbCcgdGhlbiBzeXN0ZW1fcGFja2FnZSB3aWxsIGJlIE5vbmUsCiAgICAg
ICAgICAgICAjIGFuZCBldmVyeXRoaW5nIHdpbGwgYmUgZXhhbWluZWQgYW5kIGJ1bmRsZWQgYXMg
d2UgZG9uJ3QgYWNjb3VudCBmb3Igc3lzdGVtIHBhY2thZ2VzIGluIHRoYXQgY2FzZS4KLSAgICAg
ICAgICAgIGlmIG5vdCBzeXN0ZW1fcGFja2FnZToKKyAgICAgICAgICAgIGlmIHN5c3RlbV9wYWNr
YWdlOgorICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlc19uZWVkZWQuYWRkKHN5c3RlbV9w
YWNrYWdlKQorICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBsaWJyYXJpZXMsIGlu
dGVycHJldGVyID0gc2VsZi5fc2hhcmVkX29iamVjdF9yZXNvbHZlci5nZXRfbGlic19hbmRfaW50
ZXJwcmV0ZXIob2JqZWN0KQogICAgICAgICAgICAgICAgIGlmIGludGVycHJldGVyIGlzIE5vbmU6
Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ291bGQgbm90IGRldGVy
bWluZSBpbnRlcnByZXRlciBmb3IgYmluYXJ5ICVzIiAlIG9iamVjdCkKKyAgICAgICAgICAgICAg
ICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDb3VsZCBub3QgZGV0ZXJtaW5lIGludGVycHJldGVy
IGZvciBiaW5hcnkgJXMnICUgb2JqZWN0KQogICAgICAgICAgICAgICAgIGlmIGNvcGllZF9pbnRl
cnByZXRlciBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9zeXNsaWJzID09
ICdidW5kbGUtYWxsJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1bmRsZXIuY29w
eV9hbmRfcmVtb3ZlX3JwYXRoKGludGVycHJldGVyLCB0eXBlPSdpbnRlcnByZXRlcicpCisgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9idW5kbGVyLmNvcHlfYW5kX21heWJlX3N0cmlwX3Bh
dGNoZWxmKGludGVycHJldGVyLCB0eXBlPSdpbnRlcnByZXRlcicsIHN0cmlwPXNlbGYuX3Nob3Vs
ZF9zdHJpcF9vYmplY3RzLCBwYXRjaGVsZl9yZW1vdmVycGF0aD1zZWxmLl9zeXNsaWJzPT0nYnVu
ZGxlLWFsbCcsIHBhdGNoZWxmX25vZGVmYXVsdGxpYj1zZWxmLl9zeXNsaWJzPT0nYnVuZGxlLWFs
bCcpCiAgICAgICAgICAgICAgICAgICAgIGNvcGllZF9pbnRlcnByZXRlciA9IGludGVycHJldGVy
CiAgICAgICAgICAgICAgICAgZWxpZiBjb3BpZWRfaW50ZXJwcmV0ZXIgIT0gaW50ZXJwcmV0ZXI6
CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRGV0ZWN0ZWQgYmluYXJp
ZXMgd2l0aCBkaWZmZXJlbnQgaW50ZXJwcmV0ZXJzOiAlcyAhPSAlcycgJShjb3BpZWRfaW50ZXJw
cmV0ZXIsIGludGVycHJldGVyKSkKLSAgICAgICAgICAgICAgICAjIEZJWE1FOiBmb3IgLS1zeXNs
aWJzPWJ1bmRsZS1hbGwgd2Ugd291bGQgaGF2ZSB0byBjb3B5IHRoZSBsaWJuc3NfKnNvKiBsaWJy
YXJpZXMgd2hpY2ggYXJlIGRsb3BlbidlZCA8aHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvMjAzMDE0
PgotICAgICAgICAgICAgICAgICMgQWxzbyB3ZSBzaG91bGQgaW5jbHVkZSBjb25maWcgZmlsZXMg
bGlrZSBmb250Y29uZmlnIHN0dWZmIG9yIHN1cHBvcnQgZmlsZXMgbGlrZSBpY29ucy4KICAgICAg
ICAgICAgICAgICBmb3IgbGlicmFyeSBpbiBsaWJyYXJpZXM6CiAgICAgICAgICAgICAgICAgICAg
IGlmIGxpYnJhcnkgaW4gbGlicmFyaWVzX2NoZWNrZWQ6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBfbG9nLmRlYnVnKCdTa2lwIGFscmVhZHkgY2hlY2tlZCBbbGliXTogJXMnICUgbGlicmFyeSkK
QEAgLTQzOSwxMiArNzQzLDEwMiBAQCBjbGFzcyBCdW5kbGVDcmVhdG9yKG9iamVjdCk6CiAgICAg
ICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlID0gc2VsZi5fYWRkX29iamVjdF9vcl9nZXRf
c3lzZGVwKGxpYnJhcnksICdsaWInKQogICAgICAgICAgICAgICAgICAgICBpZiBzeXN0ZW1fcGFj
a2FnZToKICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlc19uZWVkZWQuYWRk
KHN5c3RlbV9wYWNrYWdlKQotCi0gICAgICAgIHNlbGYuX2Vuc3VyZV93cGVfYmFja2VuZF9zeW1s
aW5rKCkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiAnbGlid3BlYmFja2VuZCcgaW4gbGlicmFy
eS5sb3dlcigpOgorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHNfdG9fY3JlYXRlX3dwZV9i
YWNrZW5kX3N5bWxpbmsgPSBUcnVlCisgICAgICAgIGlmIG5lZWRzX3RvX2NyZWF0ZV93cGVfYmFj
a2VuZF9zeW1saW5rOgorICAgICAgICAgICAgc2VsZi5fZW5zdXJlX3dwZV9iYWNrZW5kX3N5bWxp
bmsoKQorICAgICAgICBmb3IgYmluYXJ5IGluIGJpbmFyaWVzX3RvX2NvcHk6CisgICAgICAgICAg
ICBpZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKKyAgICAgICAgICAgICAgICBzZWxm
Ll9idW5kbGVyLmNvcHlfYW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKGJpbmFyeSwgdHlwZT0nYmlu
Jywgc3RyaXA9c2VsZi5fc2hvdWxkX3N0cmlwX29iamVjdHMsIHBhdGNoZWxmX3JlbW92ZXJwYXRo
PVRydWUsIHBhdGNoZWxmX25vZGVmYXVsdGxpYj1UcnVlLCBwYXRjaGVsZl9zZXRpbnRlcnByZXRl
cl9yZWxhdGl2ZXBhdGg9aW50ZXJwcmV0ZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHNlbGYuX2J1bmRsZXIuY29weV9hbmRfbWF5YmVfc3RyaXBfcGF0Y2hlbGYoYmluYXJ5
LCB0eXBlPSdiaW4nLCBzdHJpcD1zZWxmLl9zaG91bGRfc3RyaXBfb2JqZWN0cywgcGF0Y2hlbGZf
cmVtb3ZlcnBhdGg9VHJ1ZSwgcGF0Y2hlbGZfbm9kZWZhdWx0bGliPUZhbHNlKQorCisgICAgICAg
ICMgTm93IGNvcHkgZGF0YSBmaWxlcyB0byBzaGFyZSBkaXIgKG9ubHkgbmVlZGVkIHdoZW4gYnVu
ZGluZyBhbGwgZm9yIE1pbmlCcm93c2VyKS4KKyAgICAgICAgaWYgYnVuZGxlX2JpbmFyeSA9PSAn
TWluaUJyb3dzZXInIGFuZCBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKKyAgICAgICAg
ICAgIHRhcmdldF9zaGFyZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fdG1wZGlyLCAnc3lzL3No
YXJlJykKKyAgICAgICAgICAgICMgQ29weSBnbHZuZCBFR0wganNvbiBmaWxlcworICAgICAgICAg
ICAgX2xvZy5pbmZvKCdDb3B5IEVHTCBjb25maWcgZmlsZXMnKQorICAgICAgICAgICAgZWdsX2lj
ZF9jb25maWdkaXJfZGVzdCA9IG9zLnBhdGguam9pbihzZWxmLl90bXBkaXIsICdzeXMvbGliL2ds
dm5kL2VnbF92ZW5kb3IuZCcpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihlZ2xf
aWNkX2NvbmZpZ2Rpcl9kZXN0KToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhlZ2xfaWNk
X2NvbmZpZ2Rpcl9kZXN0KQorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KGVnbF9pY2RfbWVz
YV9jb25maWdfZmlsZSwgZWdsX2ljZF9jb25maWdkaXJfZGVzdCkKKyAgICAgICAgICAgICMgQ29w
eSBnbGliLTIgY29tcGlsZWQgc2NoZW1hcworICAgICAgICAgICAgX2xvZy5pbmZvKCdDb3B5IEds
aWIgY29tcGlsZWQgc2NoZW1hcycpCisgICAgICAgICAgICBzY2hlbWFzX3RhcmdldF9kaXIgPSBv
cy5wYXRoLmpvaW4odGFyZ2V0X3NoYXJlX2RpciwgJ2dsaWItMi4wL3NjaGVtYXMnKQorICAgICAg
ICAgICAgb3MubWFrZWRpcnMoc2NoZW1hc190YXJnZXRfZGlyKQorICAgICAgICAgICAgIyBzbyBm
YXIgaGFyZGNvZGluZyB0aGUgdmFsdWUgYmVjYXVzZSBzZWVtcyB0byBiZSBxdWl0ZSBzdGFuZGFy
ZCBhY3Jvc3MgZGlzdHJvcy4KKyAgICAgICAgICAgIGNvbXBpbGVkX3NjaGVtYXNfZmlsZSA9ICcv
dXNyL3NoYXJlL2dsaWItMi4wL3NjaGVtYXMvZ3NjaGVtYXMuY29tcGlsZWQnCisgICAgICAgICAg
ICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoY29tcGlsZWRfc2NoZW1hc19maWxlKToKKyAgICAgICAg
ICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJDYW4ndCBmaW5kIHRoZSBnc2NoZW1h
cy5jb21waWxlZCBmaWxlIGF0IHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBpbiB0aGlzIHN5c3RlbSIp
CisgICAgICAgICAgICBzaHV0aWwuY29weShjb21waWxlZF9zY2hlbWFzX2ZpbGUsIHNjaGVtYXNf
dGFyZ2V0X2RpcikKKyAgICAgICAgICAgIF9sb2cuaW5mbygnQ29weSBzaGFyZWQgbWltZSBpbmZv
IGNhY2hlJykKKyAgICAgICAgICAgICMgU2FtZSBmb3Igc2hhcmVkLW1pbWUtaW5mbyBjYWNoZQor
ICAgICAgICAgICAgbWltZV90YXJnZXRfZGlyID0gb3MucGF0aC5qb2luKHRhcmdldF9zaGFyZV9k
aXIsICdtaW1lJykKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKG1pbWVfdGFyZ2V0X2RpcikKKyAg
ICAgICAgICAgIG1pbWVfY2FjaGUgPSAnL3Vzci9zaGFyZS9taW1lL21pbWUuY2FjaGUnCisgICAg
ICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobWltZV9jYWNoZSk6CisgICAgICAgICAgICAg
ICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiQ2FuJ3QgZmluZCB0aGUgbWltZS5jYWNoZSBm
aWxlIGZyb20gc2hhcmVkLW1pbWUtaW5mbyBhdCB0aGUgc3RhbmRhcmQgbG9jYXRpb24gaW4gdGhp
cyBzeXN0ZW0iKQorICAgICAgICAgICAgc2h1dGlsLmNvcHkobWltZV9jYWNoZSwgbWltZV90YXJn
ZXRfZGlyKQorICAgICAgICAgICAgX2xvZy5pbmZvKCdHZW5lcmF0ZSBmb250Y29uZmlnIGNvbmZp
ZycpCisgICAgICAgICAgICAjIEZvbnRjb25maWcgZm9udHMgYW5kIGNvbmZpZworICAgICAgICAg
ICAgdGFyZ2V0X2ZvbnRfY29uZmlnX2RpciA9IG9zLnBhdGguam9pbih0YXJnZXRfc2hhcmVfZGly
LCAnZm9udHMvY29uZmlnJykKKyAgICAgICAgICAgIHRhcmdldF9mb250X2RhdGFfZGlyID0gb3Mu
cGF0aC5qb2luKHRhcmdldF9zaGFyZV9kaXIsICdmb250cy9mb250cycpCisgICAgICAgICAgICBv
cy5tYWtlZGlycyh0YXJnZXRfZm9udF9jb25maWdfZGlyKQorICAgICAgICAgICAgIyBXZSBrZWVw
IGFzc3VtaW5nIHN0YW5kYXJkIGxvY2F0aW9ucyBmb3IgdGhpcyBmaWxlcyBvbiB0aGUgdGFyZ2V0
IHN5c3RlbQorICAgICAgICAgICAgc3lzdGVtX2ZvbnRfY29uZmlnX2RpciA9ICcvZXRjL2ZvbnRz
L2NvbmYuZCcKKyAgICAgICAgICAgIHN5c3RlbV9mb250X2RhdGFfZGlyID0gJy91c3Ivc2hhcmUv
Zm9udHMnCisgICAgICAgICAgICBpZiBub3QgKG9zLnBhdGguaXNkaXIoc3lzdGVtX2ZvbnRfY29u
ZmlnX2RpcikgYW5kIG9zLnBhdGguaXNkaXIoc3lzdGVtX2ZvbnRfZGF0YV9kaXIpKToKKyAgICAg
ICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJDYW4ndCBmaW5kIHRoZSBmb250
Y29uZmlnIGZpbGVzIGF0IHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBpbiB0aGlzIHN5c3RlbSIpCisg
ICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc3lzdGVtX2ZvbnRfY29uZmlnX2Rpciwgb3MucGF0
aC5qb2luKHRhcmdldF9mb250X2NvbmZpZ19kaXIsIG9zLnBhdGguYmFzZW5hbWUoc3lzdGVtX2Zv
bnRfY29uZmlnX2RpcikpKQorICAgICAgICAgICAgc2VsZi5fZ2VuZXJhdGVfZm9udF9jb25mKHRh
cmdldF9mb250X2NvbmZpZ19kaXIpCisgICAgICAgICAgICBfbG9nLmluZm8oJ0NvcHkgZm9udHMn
KQorICAgICAgICAgICAgIyBXZSBjb3B5IGV2ZXJ5IGZvbnQsIHNvIHRoaXMgbWF5IGNvcHkgbG90
IG9mIGRhdGEgaWYgeW91IGhhdmUgbG90IG9mIGZvbnRzIGluc3RhbGxlZC4KKyAgICAgICAgICAg
ICMgU28gcHJpbnQgYSB3YXJuaW5nIGluIHRoYXQgYXNlCisgICAgICAgICAgICBzeXN0ZW1fZm9u
dF9kYXRhX3NpemUgPSBzZWxmLl9nZXRfdG90YWxfc2l6ZV9kaXIoc3lzdGVtX2ZvbnRfZGF0YV9k
aXIpCisgICAgICAgICAgICBpZiBzeXN0ZW1fZm9udF9kYXRhX3NpemUgPiAxMDQ4NTc2MDA6ICAj
IDEwMCBNQgorICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygnQ29weWluZyAlZCBNQiBvZiBm
b250IGRhdGEgZnJvbSB0aGUgc3lzdGVtIGF0IC91c3Ivc2hhcmUvZm9udHMuIFRoaXMgc2hvdWxk
IGJlIG9wdGltaXplZC4nICUgaW50KHN5c3RlbV9mb250X2RhdGFfc2l6ZSAvICgxMDI0KjEwMjQp
KSkKKyAgICAgICAgICAgIHNodXRpbC5jb3B5dHJlZShzeXN0ZW1fZm9udF9kYXRhX2RpciwgdGFy
Z2V0X2ZvbnRfZGF0YV9kaXIpCisgICAgICAgICAgICAjIENvcHkgWEtCIGRhdGEKKyAgICAgICAg
ICAgIF9sb2cuaW5mbygnQ29weSBYS0IgZGF0YScpCisgICAgICAgICAgICBzeXN0ZW1feGtiX2Rh
dGEgPSAnL3Vzci9zaGFyZS9YMTEveGtiJworICAgICAgICAgICAgaWYgbm90IChvcy5wYXRoLmlz
ZGlyKHN5c3RlbV94a2JfZGF0YSkpOgorICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IoIkNhbid0IGZpbmQgdGhlIFhLQiBkYXRhIGZpbGVzIGF0IHRoZSBzdGFuZGFyZCBs
b2NhdGlvbiBpbiB0aGlzIHN5c3RlbSIpCisgICAgICAgICAgICB0YXJnZXRfeGtiX2RhdGEgPSBv
cy5wYXRoLmpvaW4odGFyZ2V0X3NoYXJlX2RpciwgJ3hrYicpCisgICAgICAgICAgICBzaHV0aWwu
Y29weXRyZWUoc3lzdGVtX3hrYl9kYXRhLCB0YXJnZXRfeGtiX2RhdGEpCisgICAgICAgICAgICAj
IEZsYXRwYWsgY29uZmlndXJlcyBnbnV0bHMgdG8gdXNlIHRoZSBwMTEta2l0IHRydXN0IHN0b3Jl
IGFuZCB0aGVuIHVzZXMgcDExLWtpdCB0byBhY2Nlc3MgdGhlIGhvc3QgU1NMIGNlcnRpZmljYXRl
cy4KKyAgICAgICAgICAgICMgLSBJdCBzdGFydHMgYSBwMTEga2l0IHNlcnZlciBvbiB0aGUgaG9z
dHMgYW5kIGJpbmQtbW91bnRpbmcgYSBzb2NrZXQgdGhhdCBsYXRlciBpcyB1c2VkIGZyb20gaW5z
aWRlIHRoZSBzYW5kYm94IHZpYSBwMTEta2l0LWNsaWVudC5zbworICAgICAgICAgICAgIyBTZWU6
IGh0dHBzOi8vZ2l0aHViLmNvbS9wMTEtZ2x1ZS9wMTEta2l0L2lzc3Vlcy82OAorICAgICAgICAg
ICAgIyBTdGFydGluZyBhIHAxMS1raXQgc2VydmVyIGlzIHByb2JsZW1hdGljIGZvciB0aGUgdXNl
IGNhc2Ugb2YgdGhlIGJ1bmRsZSwgYW5kIGFsc28gd2lsbCBvbmx5IHdvcmsgaWYgdGhlIGhvc3Qg
aXMgY29uZmlndXJlZCB0byB1c2UgcDExLWtpdAorICAgICAgICAgICAgIyBTbyB3ZSB0YWtlIGEg
ZGlmZmVyZW50IGFwcHJvYWNoIGhlcmUuCisgICAgICAgICAgICAjIDEuIFdlIGdlbmVyYXRlIGEg
YnVuZGxlLWNhLWNlcnRpZmljYXRlcy5wZW0gZmlsZSB3aXRoIGFsbCB0aGUgY2VydHMgb2YgdGhl
IHN5c3RlbSB3ZXJlIHRoZSBidW5kbGUgd2FzIGdlbmVyYXRlZCBhbmQgd2Ugc2hpcCB0aGlzIGZp
bGUKKyAgICAgICAgICAgICMgMi4gQXQgcnVudGltZSB3ZSBsb29rIGZvciB0aGUgc3lzdGVtIFRM
UyBjYS1idW5kbGUucGVtIGZpbGUgYW5kIHdlIHVzZSBpdC4gSWYgd2UgY2FuJ3QgZmluZCBpdCB0
aGVuIHdlIGRlZmF1bHQgdG8gdXNpbmcgdGhlIG9uZSBzaGlwcGVkIGluc2lkZSB0aGUgYnVuZGxl
LgorICAgICAgICAgICAgIyBXZSBwYXNzIHRoZSBwYXRoIHRvIHRoZSBUTFMgY2EtYnVuZGxlLnBl
bSBmaWxlIHVzaW5nIHRoZSBlbnYgdmFyIFdFQktJVF9UTFNfQ0FGSUxFX1BFTQorICAgICAgICAg
ICAgIyBUaGUgaG9zdCBwMTEta2l0IHNldHVwIG1heSBzdGlsbCB3b3JrIGlmIGl0IGlzIHVzaW5n
IHRoZSBzYW1lIHBhdGhzIGZvciBsb2FkaW5nIHRoZSBwMTEta2l0IG1vZHVsZXMsIGJ1dCBvdGhl
cndpc2UgaXQgd2lsbCBmYWlsIHRvIGxvYWQgdGhlIG1vZHVsZXMuCisgICAgICAgICAgICAjIFRo
YXQgaXMgb2ssIHNpbmNlIHdlIGRvbid0IG5lZWQgYW55bW9yZSBhIHdvcmtpbmcgcDExLWtpdCBz
ZXR1cC4gSWYgaXQgd29ya3MgaXQgd2lsbCBiZSB1c2VkLCBidXQgaWYgbm90IHdlIGhhdmUgYSBm
YWxsYmFjay4KKyAgICAgICAgICAgICMgVG8gZGVidWcgdGhpcyBpcyB1c2VmdWwgdG8gZXhwb3J0
IFAxMV9LSVRfREVCVUc9YWxsCisgICAgICAgICAgICAjIFRoaXMgYXBwcm9hY2ggYWxzbyBhbGxv
d3MgdGhpcyBidW5kbGUgc2NyaXB0IGdvIGdlbmVyYXRlIGEgd29ya2luZyBidW5kbGUgd2hlbiBn
bnV0bHMgaXMgbm90IGNvbmZpZ3VyZWQgdG8gdXNlIHAxMS1raXQuCisgICAgICAgICAgICBfbG9n
LmluZm8oJ0dlbmVyYXRlIFRMUyBDQSBjZXJ0aWZpY2F0ZXMgZmlsZScpCisgICAgICAgICAgICBj
ZXJ0c190YXJnZXRfZGlyID0gb3MucGF0aC5qb2luKHRhcmdldF9zaGFyZV9kaXIsICdjZXJ0cycp
CisgICAgICAgICAgICBvcy5tYWtlZGlycyhjZXJ0c190YXJnZXRfZGlyKQorICAgICAgICAgICAg
c2VsZi5fZ2VuZXJhdGVfdGxzX2NhZmlsZShjZXJ0c190YXJnZXRfZGlyKQorICAgICAgICAgICAg
aWYgc2VsZi5fcGxhdGZvcm0gPT0gJ2d0ayc6CisgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCdD
b3B5IGJhc2ljIEdUSyBpY29ucyBhbmQgdGhlbWVzLicpCisgICAgICAgICAgICAgICAgaWNvbnNf
dGFyZ2V0X2RpciA9IG9zLnBhdGguam9pbih0YXJnZXRfc2hhcmVfZGlyLCAnaWNvbnMnKQorICAg
ICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGljb25zX3RhcmdldF9kaXIpCisgICAgICAgICAgICAg
ICAgIyBQYXRocyBhbHNvIGhhcmRjb2RlZCBiZWNhdXNlIHNlZW1zIGFuIHN0YW5kYXJkIGxvY2F0
aW9ucyBhY3Jvc3MgZGlzdHJvcworICAgICAgICAgICAgICAgIGZvciBndGtfaWNvbl9kaXIgaW4g
WycvdXNyL3NoYXJlL2ljb25zL0Fkd2FpdGEnLCAnL3Vzci9zaGFyZS9pY29ucy9oaWNvbG9yJ106
CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGd0a19pY29uX2Rpcik6
CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdDYW4g
bm90IGZpbmQgdGhlIEdUSyBpY29uIHRoZW1lIGF0IHBhdGggIiVzIiBpbiB0aGlzIHN5c3RlbScg
JSBndGtfaWNvbl9kaXIpCisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5dHJlZShndGtf
aWNvbl9kaXIsIG9zLnBhdGguam9pbihpY29uc190YXJnZXRfZGlyLCBvcy5wYXRoLmJhc2VuYW1l
KGd0a19pY29uX2RpcikpKQorCisgICAgICAgICMgRmluYWxseSBnZW5lcmF0ZSB0aGUgd3JhcHBl
cnMuCiAgICAgICAgIHNlbGYuX2dlbmVyYXRlX3dyYXBwZXJfc2NyaXB0KGludGVycHJldGVyLCBi
dW5kbGVfYmluYXJ5KQotICAgICAgICBpZiBidW5kbGVfYmluYXJ5ID09ICJNaW5pQnJvd3NlciI6
CisgICAgICAgIGlmIGJ1bmRsZV9iaW5hcnkgPT0gJ01pbmlCcm93c2VyJzoKICAgICAgICAgICAg
IHNlbGYuX2dlbmVyYXRlX3dyYXBwZXJfc2NyaXB0KGludGVycHJldGVyLCBzZWxmLl9wb3J0X2Jp
bmFyeV9wcmVmZml4ICsgJ1dlYkRyaXZlcicpCiAgICAgICAgIHNlbGYuX2dlbmVyYXRlX2luc3Rh
bGxfZGVwc19zY3JpcHQoc3lzdGVtX3BhY2thZ2VzX25lZWRlZCkKKyAgICAgICAgIyBDbGVhbiBy
ZW1haW5pbmcgc3R1ZmYKKyAgICAgICAgaWYgYnVuZGxlX2JpbmFyeSA9PSAnTWluaUJyb3dzZXIn
IGFuZCBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKKyAgICAgICAgICAgIHNlbGYuX2Rs
b3BlbndyYXBfbWFrZSgnY2xlYW4nKQogCiAKIGNsYXNzIEJ1bmRsZVVwbG9hZGVyKG9iamVjdCk6
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JpbmFyeV9idW5kbGluZy9idW5k
bGUucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JpbmFyeV9idW5kbGluZy9idW5kbGUucHkK
aW5kZXggYzZlNTViODg5MzE1N2Q4YmRhY2E2ZmQyNjU1MDdjYzA0MTNhYmU4ZC4uMjlhYjM5MmVh
NTQ3NGExMjlmZjU1MTM2ZTQ1ZjVkYjAwNzAzYmRjMyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9iaW5hcnlfYnVuZGxpbmcvYnVuZGxlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvYmluYXJ5X2J1bmRsaW5nL2J1bmRsZS5weQpAQCAtMzEsNjggKzMxLDE5MSBAQCBf
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIGNsYXNzIEJpbmFyeUJ1bmRsZXI6
CiAgICAgVkFSX01ZRElSID0gJ01ZRElSJwotICAgIFZBUl9JTlRFUlBSRVRFUiA9ICdJTlRFUlBS
RVRFUicKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXN0aW5hdGlvbl9kaXIsIHNob3VsZF9z
dHJpcF9vYmplY3RzKToKLSAgICAgICAgaWYgc2h1dGlsLndoaWNoKCdwYXRjaGVsZicpIGlzIE5v
bmU6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCJDb3VsZCBub3QgZmluZCBgcGF0Y2hlbGZgIGlu
ICRQQVRIIikKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTWlzc2luZyByZXF1aXJlZCBi
aW5hcnkgYHBhdGNoZWxmYCIpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlc3RpbmF0aW9uX2Rp
ciwgYnVpbGRfcGF0aD1Ob25lKToKICAgICAgICAgc2VsZi5fZGVzdGluYXRpb25fZGlyID0gZGVz
dGluYXRpb25fZGlyCi0gICAgICAgIHNlbGYuX3Nob3VsZF9zdHJpcF9vYmplY3RzID0gc2hvdWxk
X3N0cmlwX29iamVjdHMKKyAgICAgICAgc2VsZi5faGFzX3BhdGNoZWRfaW50ZXJwcmV0ZXJfcmVs
cGF0aCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2J1aWxkX3BhdGggPSBidWlsZF9wYXRoCisgICAg
ICAgIHNlbGYuX3Nob3VsZF91c2Vfc3lzX2xpYl9kaXJlY3RvcnkgPSBGYWxzZQorCisgICAgZGVm
IF9pc19zeXN0ZW1fZGVwKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBzZWxmLl9idWlsZF9wYXRo
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBXZSBkb24ndCBjb25zaWRlciBsaWJ3cGUgYW5k
IGxpYldQRUJhY2tlbmQtZmRvIHN5c2xpYnMgKGV2ZW4gd2hlbiB0aG9zZSBhcmUgbm90IGJ1aWx0
IGRpcmVjdGx5KS4gTmVpdGhlciBkbG9wZW53cmFwCisgICAgICAgICAgICBpZiBhbnkocCBpbiBw
YXRoLmxvd2VyKCkgZm9yIHAgaW4gWydsaWJ3cGUnLCAnZGxvcGVud3JhcCddKToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBub3QgcGF0aC5zdGFydHN3
aXRoKHNlbGYuX2J1aWxkX3BhdGgpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHNl
dF91c2Vfc3lzX2xpYl9kaXJlY3Rvcnkoc2VsZiwgc2hvdWxkX3VzZV9zeXNfbGliX2RpcmVjdG9y
eSk6CisgICAgICAgIHNlbGYuX3Nob3VsZF91c2Vfc3lzX2xpYl9kaXJlY3RvcnkgPSBzaG91bGRf
dXNlX3N5c19saWJfZGlyZWN0b3J5CisKKyAgICBkZWYgY29weV9hbmRfbWF5YmVfc3RyaXBfcGF0
Y2hlbGYoc2VsZiwgb3JpZ19maWxlLCB0eXBlPSdiaW4nLCBzdHJpcD1UcnVlLCBwYXRjaGVsZl9y
ZW1vdmVycGF0aD1UcnVlLCBwYXRjaGVsZl9ub2RlZmF1bHRsaWI9RmFsc2UsIHBhdGNoZWxmX3Nl
dGludGVycHJldGVyX3JlbGF0aXZlcGF0aD1Ob25lLCBvYmplY3RfZmluYWxfZGVzdGluYXRpb25f
ZGlyPU5vbmUpOgorICAgICAgICAiIiIgVGhpcyBkb2VzIHRoZSBmb2xsb3dpbmc6CisgICAgICAg
ICAgICAxLiBDb3BpZXMgdGhlIGJpbmFyeS9saWIgKG9iamVjdCkKKyAgICAgICAgICAgIDIuIE9w
dGlvbmFsbHkgcnVucyBwYXRjaGVsZiB3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXJzCisgICAgICAg
ICAgICAzLiBPcHRpb25hbGx5IHN0cmlwcyB0aGUgYmluYXJ5CisgICAgICAgICAgICBJZiB0aGUg
ZmlsZSBpcyBhIHN5bWxpbmsgcG9pbnRpbmcgYW5vdGhlciBmaWxlIHRoZW4gdGhlIHN5bWxpbmsg
aXMgcHJlc2VydmVkIChjb3B5aW5nIHRoZSBmaWxlIHBvaW50ZWQpCisgICAgICAgICIiIgogCi0g
ICAgZGVmIGRlc3RpbmF0aW9uX2RpcihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Rlc3Rp
bmF0aW9uX2RpcgotCi0gICAgZGVmIGNvcHlfYW5kX3JlbW92ZV9ycGF0aChzZWxmLCBvcmlnX2Zp
bGUsIHR5cGU9J2JpbicsIGRlc3RpbmF0aW9uX2Rpcj1Ob25lKToKICAgICAgICAgZGlyX3N1ZmZp
eCA9ICdsaWInIGlmIHR5cGUgPT0gJ2ludGVycHJldGVyJyBlbHNlIHR5cGUKLSAgICAgICAgZGVz
dGluYXRpb25fZGlyID0gb3MucGF0aC5qb2luKHNlbGYuX2Rlc3RpbmF0aW9uX2RpciwgZGlyX3N1
ZmZpeCkKLSAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZGVzdGluYXRpb25fZGlyKToKLSAg
ICAgICAgICAgIG9zLm1ha2VkaXJzKGRlc3RpbmF0aW9uX2RpcikKKyAgICAgICAgaWYgb2JqZWN0
X2ZpbmFsX2Rlc3RpbmF0aW9uX2RpciBpcyBOb25lOgorICAgICAgICAgICAgb2JqZWN0X2ZpbmFs
X2Rlc3RpbmF0aW9uX2RpciA9IHNlbGYuX2Rlc3RpbmF0aW9uX2RpcgorICAgICAgICAgICAgIyBJ
ZiBzZXRfdXNlX3N5c19saWJfZGlyZWN0b3J5KCkgaXMgZW5hYmxlZCB0aGVuIHN5c3RlbSBsaWJy
YXJpZXMgYXJlIHNoaXBwZWQgaW4gJFJPT1Qvc3lzL2xpYiB0byBhbGxvdyB0byByZWRpc3RyaWJ1
dGUgdGhlbSBzZXBhcmF0ZWx5LgorICAgICAgICAgICAgIyBIb3dldmVyLCB0aGUgaW50ZXJwcmV0
ZXIgaXMgYWx3YXlzIHNoaXBwZWQgaW4gJFJPT1QvbGliIGFuZCBhbGwgdGhlIGJpbmFyaWVzIGFy
ZSBhbHdheXMgc2hpcHBlZCBpbiAkUk9PVC9iaW4KKyAgICAgICAgICAgICMgRXZlbiB3aGVuIHRo
ZXkgYXJlIHN5c3RlbV9kZXBzIGJlY2F1c2Ugb2YgcGF0Y2hlbGZfc2V0aW50ZXJwcmV0ZXJfcmVs
YXRpdmVwYXRoCisgICAgICAgICAgICBpZiBzZWxmLl9zaG91bGRfdXNlX3N5c19saWJfZGlyZWN0
b3J5IGFuZCBzZWxmLl9pc19zeXN0ZW1fZGVwKG9yaWdfZmlsZSkgYW5kIHR5cGUgbm90IGluIFsn
aW50ZXJwcmV0ZXInLCAnYmluJ106CisgICAgICAgICAgICAgICAgb2JqZWN0X2ZpbmFsX2Rlc3Rp
bmF0aW9uX2RpciA9IG9zLnBhdGguam9pbihvYmplY3RfZmluYWxfZGVzdGluYXRpb25fZGlyLCAn
c3lzJykKKyAgICAgICAgICAgIG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIgPSBvcy5wYXRo
LmpvaW4ob2JqZWN0X2ZpbmFsX2Rlc3RpbmF0aW9uX2RpciwgZGlyX3N1ZmZpeCkKKyAgICAgICAg
aWYgbm90IG9zLnBhdGguaXNkaXIob2JqZWN0X2ZpbmFsX2Rlc3RpbmF0aW9uX2Rpcik6CisgICAg
ICAgICAgICBvcy5tYWtlZGlycyhvYmplY3RfZmluYWxfZGVzdGluYXRpb25fZGlyKQogCiAgICAg
ICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcmlnX2ZpbGUpOgogICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcignQ2FuIG5vdCBmaW5kIGZpbGUgJXMnICUgb3JpZ19maWxlKQogCiAgICAgICAg
IF9sb2cuaW5mbygnQWRkIHRvIGJ1bmRsZSBbJXNdOiAlcycgJSAodHlwZSwgb3JpZ19maWxlKSkK
KworICAgICAgICAjIFByZXNlcnZlIHN5bWxpbmtzIGFuZCBjb3B5IHRoZSB0YXJnZXRzCisgICAg
ICAgIGlmIG9zLnBhdGguaXNsaW5rKG9yaWdfZmlsZSk6CisgICAgICAgICAgICBzeW1saW5rX3Ny
Y19maWxlID0gb3MucGF0aC5yZWFscGF0aChvcmlnX2ZpbGUpCisgICAgICAgICAgICBzeW1saW5r
X3NyY19iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3ltbGlua19zcmNfZmlsZSkKKyAgICAg
ICAgICAgIHN5bWxpbmtfZHN0X2Jhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShvcmlnX2ZpbGUp
CisgICAgICAgICAgICBzeW1saW5rX2RzdF9mdWxscGF0aCA9IG9zLnBhdGguam9pbihvYmplY3Rf
ZmluYWxfZGVzdGluYXRpb25fZGlyLCBzeW1saW5rX2RzdF9iYXNlbmFtZSkKKyAgICAgICAgICAg
IGlmIHN5bWxpbmtfc3JjX2Jhc2VuYW1lICE9IHN5bWxpbmtfZHN0X2Jhc2VuYW1lOgorICAgICAg
ICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgIyBzeW1saW5rX2RzdF9mdWxscGF0
aCAtPiBzeW1saW5rX3NyY19iYXNlbmFtZQorICAgICAgICAgICAgICAgICAgICBvcy5zeW1saW5r
KHN5bWxpbmtfc3JjX2Jhc2VuYW1lLCBzeW1saW5rX2RzdF9mdWxscGF0aCkKKyAgICAgICAgICAg
ICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwcmV2aW91
c19zeW1saW5rX3NyY19wYXRoID0gb3MucGF0aC5yZWFscGF0aChzeW1saW5rX2RzdF9mdWxscGF0
aCkKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfc3ltbGlua19zcmNfYmFzZW5hbWUgPSBv
cy5wYXRoLmJhc2VuYW1lKHByZXZpb3VzX3N5bWxpbmtfc3JjX3BhdGgpCisgICAgICAgICAgICAg
ICAgICAgIGlmIHByZXZpb3VzX3N5bWxpbmtfc3JjX2Jhc2VuYW1lICE9IHN5bWxpbmtfc3JjX2Jh
c2VuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdOb3Qg
b3ZlcndyaXRpbmcgcHJldmlvdXMgc3ltbGluayAlcyBwb2ludGluZyB0byAlcyB3aXRoIGEgc3lt
bGluayBwb2ludGluZyB0byAlcycgJSAoc3ltbGlua19kc3RfZnVsbHBhdGgsIHByZXZpb3VzX3N5
bWxpbmtfc3JjX2Jhc2VuYW1lLCBzeW1saW5rX3NyY19iYXNlbmFtZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuY29weV9hbmRfbWF5YmVfc3RyaXBfcGF0Y2hlbGYoc3ltbGlua19zcmNf
ZmlsZSwgdHlwZSwgc3RyaXAsIHBhdGNoZWxmX3JlbW92ZXJwYXRoLCBwYXRjaGVsZl9ub2RlZmF1
bHRsaWIsIHBhdGNoZWxmX3NldGludGVycHJldGVyX3JlbGF0aXZlcGF0aCwgb2JqZWN0X2ZpbmFs
X2Rlc3RpbmF0aW9uX2RpcikKKwogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzaHV0aWwuY29w
eShvcmlnX2ZpbGUsIGRlc3RpbmF0aW9uX2RpcikKKyAgICAgICAgICAgIHNodXRpbC5jb3B5KG9y
aWdfZmlsZSwgb2JqZWN0X2ZpbmFsX2Rlc3RpbmF0aW9uX2RpcikKICAgICAgICAgZXhjZXB0IHNo
dXRpbC5TYW1lRmlsZUVycm9yOgogICAgICAgICAgICAgIyBNYXkgcmVhc29uYWJseSBoYXBwZW4g
aWYgdGhlIGNhbGxlciB0cmllcyB0byBidW5kbGUgdGhlIGZpbGVzICdpbiBwbGFjZScuCiAgICAg
ICAgICAgICBwYXNzCiAKLSAgICAgICAgcGF0Y2hfZWxmX2NvbW1hbmQgPSBbJ3BhdGNoZWxmJywg
Jy0tcmVtb3ZlLXJwYXRoJywgb3MucGF0aC5qb2luKGRlc3RpbmF0aW9uX2Rpciwgb3MucGF0aC5i
YXNlbmFtZShvcmlnX2ZpbGUpKV0KLSAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKHBhdGNoX2Vs
Zl9jb21tYW5kKSAhPSAwOgotICAgICAgICAgICAgX2xvZy5lcnJvcignVGhlIHBhdGNoZWxmIGNv
bW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzJykKKyAgICAgICAgaWYgdHlwZSA9PSAnaW50
ZXJwcmV0ZXInOgorICAgICAgICAgICAgcmV0dXJuICAjIG5vIHN0cmlwL3BhdGNoZWxmIG92ZXIg
aXQKKworICAgICAgICBwYXRjaGVsZl9hcmd1bWVudHMgPSBbXQorICAgICAgICBpZiBwYXRjaGVs
Zl9yZW1vdmVycGF0aDoKKyAgICAgICAgICAgIHBhdGNoZWxmX2FyZ3VtZW50cy5hcHBlbmQoIi0t
cmVtb3ZlLXJwYXRoIikKKyAgICAgICAgaWYgcGF0Y2hlbGZfbm9kZWZhdWx0bGliOgorICAgICAg
ICAgICAgcGF0Y2hlbGZfYXJndW1lbnRzLmFwcGVuZCgiLS1uby1kZWZhdWx0LWxpYiIpCisgICAg
ICAgIGlmIHBhdGNoZWxmX3NldGludGVycHJldGVyX3JlbGF0aXZlcGF0aDoKKyAgICAgICAgICAg
IHByZXZpb3VzX2N3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgICAgICBvcy5jaGRpcihzZWxmLmRl
c3RpbmF0aW9uX2RpcigpKQorICAgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdGhlIGJhc2VuYW1l
IG9mIHRoZSBpbnRlcnByZXRlciBiZWNhdXNlIHdlIGFyZSB1cGRhdGluZyBpdAorICAgICAgICAg
ICAgIyB0byB1c2UgYSByZWxhdGl2ZSBwYXRoIGluc2lkZSBsaWIvICh3aGljaCBpcyB3ZXJlIHdl
IGNvcGllZCBpdCBwcmV2aW91c2x5KQorICAgICAgICAgICAgbmV3X2ludGVycHJldGVyX3JlbHBh
dGggPSBvcy5wYXRoLmpvaW4oJ2xpYicsIG9zLnBhdGguYmFzZW5hbWUocGF0Y2hlbGZfc2V0aW50
ZXJwcmV0ZXJfcmVsYXRpdmVwYXRoKSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmls
ZShuZXdfaW50ZXJwcmV0ZXJfcmVscGF0aCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcignVW5hYmxlIHRvIGZpbmQgaW50ZXJwcmV0ZXIgJXMgYXQgZGlyZWN0b3J5ICVzJyAlIChu
ZXdfaW50ZXJwcmV0ZXIsIHNlbGYuZGVzdGluYXRpb25fZGlyKCkpKQorICAgICAgICAgICAgcGF0
Y2hlbGZfYXJndW1lbnRzLmV4dGVuZChbJy0tc2V0LWludGVycHJldGVyJywgbmV3X2ludGVycHJl
dGVyX3JlbHBhdGhdKQorICAgICAgICAgICAgc2VsZi5faGFzX3BhdGNoZWRfaW50ZXJwcmV0ZXJf
cmVscGF0aCA9IFRydWUKKyAgICAgICAgaWYgcGF0Y2hlbGZfYXJndW1lbnRzOgorICAgICAgICAg
ICAgIyBJZiB3ZSBoYXZlIHJlc29sdmVkIHBhdGNoZWxmX2FyZ3VtZW50cyB0aGVuIHdlIHNob3Vs
ZCBydW4gcGF0Y2hlbGYKKyAgICAgICAgICAgIHBhdGNoZWxmX2FyZ3VtZW50cy5hcHBlbmQob3Mu
cGF0aC5qb2luKG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIsIG9zLnBhdGguYmFzZW5hbWUo
b3JpZ19maWxlKSkpCisgICAgICAgICAgICBpZiBub3Qgc2h1dGlsLndoaWNoKCdwYXRjaGVsZicp
OgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVW5hYmxlIHRvIGZpbmQgdGhl
ICJwYXRjaGVsZiIgY29tbWFuZCBpbiB0aGUgc3lzdGVtLiBQbGVhc2UgaW5zdGFsbCBpdC4nKQor
ICAgICAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKFsncGF0Y2hlbGYnXSArIHBhdGNoZWxmX2Fy
Z3VtZW50cykgIT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RoZSAi
cGF0Y2hlbGYiIGNvbW1hbmQgd2l0aCBhcmd1bWVudHMgIiVzIiByZXR1cm5lZCBub24temVybyBz
dGF0dXMnICUgJyAnLmpvaW4ocGF0Y2hlbGZfYXJndW1lbnRzKSkKKworICAgICAgICAgICAgaWYg
cGF0Y2hlbGZfc2V0aW50ZXJwcmV0ZXJfcmVsYXRpdmVwYXRoOgorICAgICAgICAgICAgICAgIG9z
LmNoZGlyKHByZXZpb3VzX2N3ZCkKKworICAgICAgICAjIHN0cmlwIGhhcyB0byBydW4gYWZ0ZXIg
cGF0Y2hlbGYsIG90aGVyd2lzZSBwYXRjaGVsZiBjb3JydXB0cyB0aGUgYmluYXJ5IHNvbWV0aW1l
cyAod2hlbiAnLS1zZXQtaW50ZXJwcmV0ZXIgaXMgcGFzc2VkKS4KKyAgICAgICAgaWYgc3RyaXA6
CisgICAgICAgICAgICBpZiBub3Qgc2h1dGlsLndoaWNoKCdzdHJpcCcpOgorICAgICAgICAgICAg
ICAgIF9sb2cud2FybmluZygnVW5hYmxlIHRvIGZpbmQgdGhlIHN0cmlwIGNvbW1hbmQgaW4gdGhl
IHN5c3RlbS4gUGxlYXNlIGluc3RhbGwgaXQuJykKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNl
cHRpb24oJ01pc3NpbmcgcmVxdWlyZWQgcHJvZ3JhbSAic3RyaXAiJykKKyAgICAgICAgICAgIHN0
cmlwX2NvbW1hbmQgPSBbJ3N0cmlwJywgJy0tc3RyaXAtdW5uZWVkZWQnLCBvcy5wYXRoLmpvaW4o
b2JqZWN0X2ZpbmFsX2Rlc3RpbmF0aW9uX2Rpciwgb3MucGF0aC5iYXNlbmFtZShvcmlnX2ZpbGUp
KV0KKyAgICAgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChzdHJpcF9jb21tYW5kKSAhPSAwOgor
ICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1RoZSBzdHJpcCBjb21tYW5kIHJldHVybmVkIG5v
bi16ZXJvIHN0YXR1cycpCiAKLSAgICAgICAgaWYgc2VsZi5fc2hvdWxkX3N0cmlwX29iamVjdHM6
Ci0gICAgICAgICAgICBpZiBzaHV0aWwud2hpY2goJ3N0cmlwJyk6Ci0gICAgICAgICAgICAgICAg
c3RyaXBfY29tbWFuZCA9IFsnc3RyaXAnLCAnLS1zdHJpcC11bm5lZWRlZCcsIG9zLnBhdGguam9p
bihkZXN0aW5hdGlvbl9kaXIsIG9zLnBhdGguYmFzZW5hbWUob3JpZ19maWxlKSldCi0gICAgICAg
ICAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKHN0cmlwX2NvbW1hbmQpICE9IDA6Ci0gICAgICAg
ICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1RoZSBzdHJpcCBjb21tYW5kIHJldHVybmVkIG5vbi16
ZXJvIHN0YXR1cycpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIF9sb2cud2Fy
bmluZygnc3RyaXAgbm90IGZvdW5kLiBOb3Qgc3RyaXBwaW5nIG9iamVjdCcpCisgICAgZGVmIGRl
c3RpbmF0aW9uX2RpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Rlc3RpbmF0aW9uX2Rp
cgogCiAgICAgZGVmIGdlbmVyYXRlX3dyYXBwZXJfc2NyaXB0KHNlbGYsIGludGVycHJldGVyLCBi
aW5hcnlfdG9fd3JhcCwgZXh0cmFfZW52aXJvbm1lbnRfdmFyaWFibGVzPXt9KToKICAgICAgICAg
aWYgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzZWxmLl9kZXN0aW5hdGlvbl9kaXIs
ICdiaW4nLCBiaW5hcnlfdG9fd3JhcCkpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9y
KCdDYW5ub3QgZmluZCBiaW5hcnkgdG8gd3JhcCBmb3IgJXMnICUgYmluYXJ5X3RvX3dyYXApCiAg
ICAgICAgIF9sb2cuaW5mbygnR2VuZXJhdGUgd3JhcHBlciBzY3JpcHQgJXMnICUgYmluYXJ5X3Rv
X3dyYXApCiAgICAgICAgIHNjcmlwdF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX2Rlc3RpbmF0
aW9uX2RpciwgYmluYXJ5X3RvX3dyYXApCisgICAgICAgIGxpYl9kaXIgPSBvcy5wYXRoLmpvaW4o
c2VsZi5fZGVzdGluYXRpb25fZGlyLCAnbGliJykKKyAgICAgICAgc3lzbGliX2RpciA9IG9zLnBh
dGguam9pbihzZWxmLl9kZXN0aW5hdGlvbl9kaXIsICdzeXMvbGliJykKKyAgICAgICAgYmluX2Rp
ciA9IG9zLnBhdGguam9pbihzZWxmLl9kZXN0aW5hdGlvbl9kaXIsICdiaW4nKQorICAgICAgICBz
aGFyZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fZGVzdGluYXRpb25fZGlyLCAnc3lzL3NoYXJl
JykKIAogICAgICAgICB3aXRoIG9wZW4oc2NyaXB0X2ZpbGUsICd3JykgYXMgc2NyaXB0X2hhbmRs
ZToKICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJyMhL2Jpbi9zaFxuJykKICAgICAg
ICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJyVzPSIkKGRpcm5hbWUgJChyZWFkbGluayAtZiAk
MCkpIlxuJyAlIHNlbGYuVkFSX01ZRElSKQotICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0
ZSgnZXhwb3J0IExEX0xJQlJBUllfUEFUSD0iJHslc30vbGliIlxuJyAlIHNlbGYuVkFSX01ZRElS
KQogCi0gICAgICAgICAgICBpZiBpbnRlcnByZXRlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAg
ICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdJTlRFUlBSRVRFUj0iJHslc30vbGliLyVzIlxuJyAl
IChzZWxmLlZBUl9NWURJUiwgb3MucGF0aC5iYXNlbmFtZShpbnRlcnByZXRlcikpKQorICAgICAg
ICAgICAgaWYgc2VsZi5faGFzX3BhdGNoZWRfaW50ZXJwcmV0ZXJfcmVscGF0aDoKKyAgICAgICAg
ICAgICAgICAjIFRoZSBpbnRlcnByZXJ0ZXIgKHNlY3Rpb24gUFRfSU5URVJQIGluIEVMRiBiaW5h
cnkpIG5lZWRzIHRvIGJlIGEgcHJlLWRlZmluZWQgcGF0aAorICAgICAgICAgICAgICAgICMgU28g
dGhlIG9ubHkgd2F5IG9mIHVzaW5nIG91ciBpbnRlcnByZXRlciBpbiBhbiB1bmtub3duIGRlc3Rp
bmF0aW9uIGRpciBpcyB0byB1c2UgcmVsYXRpdmUgcGF0aHMKKyAgICAgICAgICAgICAgICAjIEZv
ciByZWxhdGl2ZSBwYXRocyB0byB3b3JrLCB3ZSBuZWVkIHRvIENEIGludG8gdGhlIG1haW4gYmFz
ZWRpciwgYnV0IGRvaW5nIHRoYXQgbWF5IGJyZWFrCisgICAgICAgICAgICAgICAgIyBhbnkgcGFy
YW1ldGVyIHRoZSB1c2VyIGhhcyBwYXNzZWQgYXMgYSByZWxhdGl2ZSBwYXRoIHRvIHdoZXJlIHNo
ZSBpcyB3b3JraW5nIChsaWtlIGEgcmVscGF0aCB0byBzb21lIGh0bWwgZmlsZSkKKyAgICAgICAg
ICAgICAgICAjIFNvIHdlIHRyeSB0byB1cGRhdGUgdGhlIGFyZ3VtZW50cyByZXNvbHZpbmcgcmVs
YXRpdmUgcGF0aHMgdG8gYWJzb2x1dGUgYmVmb3JlIGV4ZWN1dGluZyB0aGUgcHJvZ3JhbQorICAg
ICAgICAgICAgICAgICMgVHJpY2sgdG8gdXBkYXRlIHRoZSBhcmd1bWVudHMgaW5zcGlyZWQgZnJv
bSBodHRwczovL3VuaXguc3RhY2tleGNoYW5nZS5jb20vYS80MjExNjAKKyAgICAgICAgICAgICAg
ICBzY3JpcHRfaGFuZGxlLndyaXRlKCcjIFNoaXBwZWQgYmluYXJpZXMgaGF2ZSBhIHJlbHBhdGgg
dG8gdGhlIGludGVycHJldGVyLCBzbyB1cGRhdGUgcGFzc2VkIGFyZ3Mgd2l0aCBmdWxscGF0aHMg
YW5kIGNkIHRvICR7TVlESVJ9XG4nKQorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3Jp
dGUoJ2FyZ3NfdXBkYXRlX3JlbHBhdGhzX3RvX2FicygpIHtcbicpCisgICAgICAgICAgICAgICAg
c2NyaXB0X2hhbmRsZS53cml0ZSgnICAgIGZvciBhcmcgaW4gIiRAIjsgZG9cbicpCisgICAgICAg
ICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnICAgICAgWyAtZSAiJHthcmd9IiAtYSAiJHth
cmd9IiAhPSAiJHthIy99IiBdICYmIGFyZz0iJChyZWFkbGluayAtZiAiJHthcmd9IikiXG4nKQor
ICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJyAgICAgIHByaW50ZiAlcyAiJHth
cmd9IiB8IHNlZCAicy9cJy9cJ1xcXFxcXFxcXCdcJy9nOzFzL14vXCcvO1xcJHMvXFwkL1wnIC8i
XG4nKQorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJyAgICBkb25lXG4nKQor
ICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2VjaG8gIiAiXG4nKQorICAgICAg
ICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ31cbicpCisgICAgICAgICAgICAgICAgc2Ny
aXB0X2hhbmRsZS53cml0ZSgnZXZhbCAic2V0IC0tICIkKGFyZ3NfdXBkYXRlX3JlbHBhdGhzX3Rv
X2FicyAiJEAiKSIiXG4nKQorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2Nk
ICIke01ZRElSfSJcbicpCisKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGgu
am9pbihzaGFyZV9kaXIsICdjZXJ0cy9idW5kbGUtY2EtY2VydGlmaWNhdGVzLnBlbScpKToKKyAg
ICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCcjIFRyeSB0byB1c2UgdGhlIHN5c3Rl
bSBDQSBmaWxlIGlmIHBvc3NpYmxlLCBvdGhlcndpc2UgdXNlIHRoZSBidW5kbGVkIG9uZVxuJykK
KyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdmb3IgV0VCS0lUX1RMU19DQUZJ
TEVfUEVNIGluIC9ldGMvc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQgL2V0Yy9zc2wvY2Vy
dC5wZW0gL2V0Yy9wa2kvY2EtdHJ1c3QvZXh0cmFjdGVkL3BlbS90bHMtY2EtYnVuZGxlLnBlbSAi
JHtNWURJUn0vc3lzL3NoYXJlL2NlcnRzL2J1bmRsZS1jYS1jZXJ0aWZpY2F0ZXMucGVtIjsgZG9c
bicpCisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnICAgIFsgLWYgIiR7V0VC
S0lUX1RMU19DQUZJTEVfUEVNfSIgXSAmJiBncmVwIC1xICJCRUdJTiBDRVJUSUZJQ0FURSIgIiR7
V0VCS0lUX1RMU19DQUZJTEVfUEVNfSIgJiYgZXhwb3J0IFdFQktJVF9UTFNfQ0FGSUxFX1BFTSAm
JiBicmVha1xuJykKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdkb25lXG4n
KQogCi0gICAgICAgICAgICAjIE1heSB1c2UgdGhlIHZhbHVlIG9mIElOVEVSUFJFVEVSLCBzbyBo
YXMgdG8gY29tZSBhZnRlcgotICAgICAgICAgICAgIyB0aGUgZGVmaW5pdGlvbi4KICAgICAgICAg
ICAgIGZvciB2YXIsIHZhbHVlIGluIGV4dHJhX2Vudmlyb25tZW50X3ZhcmlhYmxlcy5pdGVtcygp
OgotICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2V4cG9ydCAlcz1cIiVzXCJc
bicgJSAodmFyLCB2YWx1ZSkpCi0KLSAgICAgICAgICAgIGlmIGludGVycHJldGVyIGlzIG5vdCBO
b25lOgotICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2V4ZWMgIiR7SU5URVJQ
UkVURVJ9IiAiJHslc30vYmluLyVzIiAiJEAiXG4nICUgKHNlbGYuVkFSX01ZRElSLCBiaW5hcnlf
dG9fd3JhcCkpCi0gICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5k
bGUud3JpdGUoJ2V4cG9ydCAlcz0iJXMiXG4nICUgKHZhciwgdmFsdWUpKQorCisgICAgICAgICAg
ICBpZiBvcy5wYXRoLmlzZGlyKHN5c2xpYl9kaXIpOgorICAgICAgICAgICAgICAgICMgUHJlZmZl
ciB0byB1c2UgdGhlIHN5c3RlbSBYS0IgZGF0YSBmaWxlcywgYnV0IGlmIHRoZXkgYXJlIG5vdCBv
biB0aGUgZXhwZWN0ZWQgbG9jYXRpb24gdXNlIG91ciBvd24uCisgICAgICAgICAgICAgICAgeGti
X2J1bmRsZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGly
KHN5c2xpYl9kaXIpOgorICAgICAgICAgICAgICAgICAgICBpZiBlbnRyeS5zdGFydHN3aXRoKCds
aWJ4a2Jjb21tb24uc28nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHhrYl9idW5kbGVkID0g
VHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiB4
a2JfYnVuZGxlZDoKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG9zLnBhdGguaXNkaXIob3Mu
cGF0aC5qb2luKHNoYXJlX2RpciwgJ3hrYicpKQorICAgICAgICAgICAgICAgICAgICBzY3JpcHRf
aGFuZGxlLndyaXRlKCdbIC1kIC91c3Ivc2hhcmUvWDExL3hrYiBdIHx8IGV4cG9ydCBYS0JfQ09O
RklHX1JPT1Q9IiR7JXN9L3N5cy9zaGFyZS94a2IiXG4nICUgc2VsZi5WQVJfTVlESVIpCisKKyAg
ICAgICAgICAgIGxkX2xpYnJhcnlfcGF0aCA9ICckeyVzfS9saWInICUgc2VsZi5WQVJfTVlESVIK
KyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc3lzbGliX2Rpcik6CisgICAgICAgICAgICAg
ICAgbGRfbGlicmFyeV9wYXRoICs9ICc6JHslc30vc3lzL2xpYicgJSBzZWxmLlZBUl9NWURJUgor
CisgICAgICAgICAgICAjIFVwZGF0ZSBjYWNoZSBvZiBnZGstcGl4YnVmIGxvYWRlcnMgaWYgbmVl
ZGVkIChmaXJzdCBydW4gb3Igd2hlbiB0aGUgYWJzb2x1dGUgcGF0aHMgb24gZGlzayBoYXZlIGNo
YW5nZWQpLgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc3lzbGli
X2RpciwgJ2dkay1waXhidWYvbG9hZGVycycpKToKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFu
ZGxlLndyaXRlKCdleHBvcnQgR0RLX1BJWEJVRl9NT0RVTEVESVI9IiR7JXN9L3N5cy9saWIvZ2Rr
LXBpeGJ1Zi9sb2FkZXJzIlxuJyAlIHNlbGYuVkFSX01ZRElSKQorICAgICAgICAgICAgICAgIHNj
cmlwdF9oYW5kbGUud3JpdGUoJ2V4cG9ydCBHREtfUElYQlVGX01PRFVMRV9GSUxFPSIkeyVzfS9z
eXMvbGliL2dkay1waXhidWYvbG9hZGVycy5jYWNoZSJcbicgJSBzZWxmLlZBUl9NWURJUikKKyAg
ICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdncmVwIC1zcSAiXFwiJHtHREtfUElY
QlVGX01PRFVMRURJUn0vIiAiJHtHREtfUElYQlVGX01PRFVMRV9GSUxFfSIgfHwgTERfTElCUkFS
WV9QQVRIPSIlcyIgIiR7JXN9L2Jpbi9nZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMiIC0tdXBkYXRl
LWNhY2hlXG4nICUgKGxkX2xpYnJhcnlfcGF0aCwgc2VsZi5WQVJfTVlESVIpKQorCisgICAgICAg
ICAgICAjIFNhbWUgZm9yIGd0ayBpbW1vZHVsZXMgY2FjaGUKKyAgICAgICAgICAgIGlmIG9zLnBh
dGguaXNkaXIob3MucGF0aC5qb2luKHN5c2xpYl9kaXIsICdndGsvaW1tb2R1bGVzJykpOgorICAg
ICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2V4cG9ydCBHVEtfSU1fTU9EVUxFX0RJ
Uj0iJHslc30vc3lzL2xpYi9ndGsvaW1tb2R1bGVzIlxuJyAlIHNlbGYuVkFSX01ZRElSKQorICAg
ICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2V4cG9ydCBHVEtfSU1fTU9EVUxFX0ZJ
TEU9IiR7JXN9L3N5cy9saWIvZ3RrL2ltbW9kdWxlcy9pbW1vZHVsZXMuY2FjaGUiXG4nICUgc2Vs
Zi5WQVJfTVlESVIpCisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnZ3JlcCAt
c3EgIlxcIiR7R1RLX0lNX01PRFVMRV9ESVJ9LyIgIiR7R1RLX0lNX01PRFVMRV9GSUxFfSIgfHwg
TERfTElCUkFSWV9QQVRIPSIlcyIgIiR7JXN9L2Jpbi9ndGstcXVlcnktaW1tb2R1bGVzLTMuMCIg
LS11cGRhdGUtY2FjaGUgIiR7R1RLX0lNX01PRFVMRV9ESVJ9Ii8qLnNvXG4nICUgKGxkX2xpYnJh
cnlfcGF0aCwgc2VsZi5WQVJfTVlESVIpKQorCisgICAgICAgICAgICAjIExEX0xJQlJBUllfUEFU
SCBpcyBzZXQgYXQgdGhlIGVuZCwganVzdCBiZWZvcmUgdGhlIGV4ZWMoKSBjYWxsIGFuZCBiZWZv
cmUgY2FsbGluZyBwcm9ncmFtcyBidW5kbGVkLCBvdGhlcndpc2UgaXQgbWF5IGJyZWFrIGNvbW1h
bmRzIGZyb20gdGhlIHN5c3RlbSBsaWtlIHNjcmlwdCdzIHVzYWdlIG9mIHNlZC9yZWFkbGluay9n
cmVwCisgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdleHBvcnQgTERfTElCUkFSWV9Q
QVRIPSIlcyJcbicgJSBsZF9saWJyYXJ5X3BhdGgpCisgICAgICAgICAgICBkbG9wZW53cmFwX2xp
Ym5hbWUgPSAnZGxvcGVud3JhcC5zbycKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9z
LnBhdGguam9pbihsaWJfZGlyLCBkbG9wZW53cmFwX2xpYm5hbWUpKToKKyAgICAgICAgICAgICAg
ICBzY3JpcHRfaGFuZGxlLndyaXRlKCdleHBvcnQgTERfUFJFTE9BRD0iJHslc30vbGliLyVzIlxu
JyAlIChzZWxmLlZBUl9NWURJUiwgZGxvcGVud3JhcF9saWJuYW1lKSkKKyAgICAgICAgICAgICMg
SWYgd2UgaGF2ZSBwYXRjaGVkIHRoZSBiaW5hcmllcyB0byB1c2UgYSByZWxhdGl2ZSByZWxwYXRo
IHRoZW4gbG9hZCB0aGUgYmluYXJ5IGRpcmVjdGx5IHdpdGhvdXQgcHJlZml4aW5nIGl0IHdpdGgg
dGhlIGludGVycHJldGVyIChpdCBhbGxvd3MgdGhlIHByb2Nlc3MgdG8gdXNlIHRoZSBjb3JyZWN0
IHByb2duYW1lKQorICAgICAgICAgICAgaWYgc2VsZi5faGFzX3BhdGNoZWRfaW50ZXJwcmV0ZXJf
cmVscGF0aDoKICAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdleGVjICIkeyVz
fS9iaW4vJXMiICIkQCJcbicgJSAoc2VsZi5WQVJfTVlESVIsIGJpbmFyeV90b193cmFwKSkKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnSU5U
RVJQUkVURVI9IiR7JXN9L2xpYi8lcyJcbicgJSAoc2VsZi5WQVJfTVlESVIsIG9zLnBhdGguYmFz
ZW5hbWUoaW50ZXJwcmV0ZXIpKSkKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRl
KCdleGVjICIke0lOVEVSUFJFVEVSfSIgIiR7JXN9L2Jpbi8lcyIgIiRAIlxuJyAlIChzZWxmLlZB
Ul9NWURJUiwgYmluYXJ5X3RvX3dyYXApKQogCiAgICAgICAgIG9zLmNobW9kKHNjcmlwdF9maWxl
LCAwbzc1NSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRs
aW5nL2Rsb3BlbndyYXAvTWFrZWZpbGUgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JpbmFyeV9i
dW5kbGluZy9kbG9wZW53cmFwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzMDc1Yzg5NGIwMTAwMmY0
MjM4YjNkY2YwMWVlMGMyNDNhMWQ4MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2JpbmFyeV9idW5kbGluZy9kbG9wZW53cmFwL01ha2VmaWxlCkBAIC0wLDAgKzEs
MTYgQEAKK1RISVNfRElSIDo9ICQoc3RyaXAgJChzaGVsbCBkaXJuYW1lICQocmVhbHBhdGggJChs
YXN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkpKQorQ0MgPSBnY2MKK0NGTEFHUyA9IC1mUElDIC1X
YWxsIC1XZXh0cmEgLU8yCitMREZMQUdTID0gLW5vc3RhcnRmaWxlcyAtc2hhcmVkIC1sZGwKK1JN
ID0gcm0gLWYKK1RBUkdFVF9MSUIgPSBkbG9wZW53cmFwLnNvCitTUkNTID0gJChUSElTX0RJUikv
ZGxvcGVud3JhcC5jCisKK2FsbDogJHtUQVJHRVRfTElCfQorCiskKFRBUkdFVF9MSUIpOiAkKFNS
Q1MpCisJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLVdsLC1zb25hbWUsJEAgLW8gJEAgJF4K
KworLlBIT05ZOiBjbGVhbgorY2xlYW46CisJLSR7Uk19ICR7VEFSR0VUX0xJQn0KZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5nL2Rsb3BlbndyYXAvUkVB
RE1FLnR4dCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5nL2Rsb3Blbndy
YXAvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMGRmNjkyODA1MTE1NDkxODg5ODllMjY3ZGQ3OGUw
NzRmNDU2YjE2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iaW5h
cnlfYnVuZGxpbmcvZGxvcGVud3JhcC9SRUFETUUudHh0CkBAIC0wLDAgKzEsOSBAQAorVGhpcyBp
cyBhIHNoYXJlZCBsaWJyYXJ5IHRvIHdyYXAgZGxvcGVuKCkgYW5kIGRsbW9wZW4oKSBmdW5jdGlv
biBjYWxscworYW5kIHJld3JpdGUgdGhlIHBhdGhzIGxvYWRlZCB0byBlbnN1cmUgdGhhdCB0aGUg
bGlicmFyeSBsb2FkZWQgaXMgaW5zaWRlCitMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFy
aWFibGVzLgorCitJdCBpcyB1c2VkIGJ5IHRoZSBzY3JpcHQgZ2VuZXJhdGUtYnVuZGxlIHRoYXQg
YnVpbGRzIHRoaXMgbGlicmFyeSBhbmQgYWRkcworaXQgdG8gYmUgcHJlbG9hZGVkIGludG8gdGhl
IHdyYXBwZXIgc2NyaXB0IHRoYXQgZXhlY3V0ZXMgdGhlIGJyb3dzZXIuCisKK1NldCB0aGUgZW52
aXJvbm1lbnQgdmFyaWFibGUgRExPUEVOX1dSQVBfREVCVUc9MSBvciBETE9QRU5fV1JBUF9ERUJV
Rz0yCit0byBnZXQgZXJyb3IvZGVidWcgb3V0cHV0IGZyb20gdGhpcyBsaWJyYXJ5LgpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iaW5hcnlfYnVuZGxpbmcvZGxvcGVud3JhcC9k
bG9wZW53cmFwLmMgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JpbmFyeV9idW5kbGluZy9kbG9w
ZW53cmFwL2Rsb3BlbndyYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNGRlMGJjNDgzMTgzYjJkNWUxZGU2M2Ni
M2E5NmIxNTdmNWUzYmRlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9iaW5hcnlfYnVuZGxpbmcvZGxvcGVud3JhcC9kbG9wZW53cmFwLmMKQEAgLTAsMCArMSwzMjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNlbmRpZgor
I2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8ZXJybm8u
aD4KKyNpbmNsdWRlIDxsaWJnZW4uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1
ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3Rk
Lmg+CisKKyNkZWZpbmUgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZXJyb3JfbXNnKGZtdCwgLi4uKSBc
CisgICAgZG8geyBcCisgICAgICAgIGlmIChkbG9wZW5fd3JhcHBlcl9kZWJ1Z19wcmludCA+PSAx
KSBcCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIltwaWQ9JWRdIEVSUk9SIGF0IGRsb3Bl
bndyYXAuc286ICIgZm10LCBnZXRwaWQoKSwgX19WQV9BUkdTX18pOyBcCisgICAgfSB3aGlsZSAo
MCkKKworI2RlZmluZSBkbG9wZW5fd3JhcHBlcl9wcmludF9kZWJ1Z19tc2coZm10LCAuLi4pIFwK
KyAgICBkbyB7IFwKKyAgICAgICAgaWYgKGRsb3Blbl93cmFwcGVyX2RlYnVnX3ByaW50ID49IDIp
IFwKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiW3BpZD0lZF0gZGxvcGVud3JhcC5zbzog
IiBmbXQsIGdldHBpZCgpLCBfX1ZBX0FSR1NfXyk7IFwKKyAgICB9IHdoaWxlICgwKQorCitzdGF0
aWMgaW50IGRsb3Blbl93cmFwcGVyX2RlYnVnX3ByaW50ID0gLTE7CitzdGF0aWMgaW50IGRsb3Bl
bl93cmFwcGVyX2NhbGxfcmVhbF9kbGVycm9yID0gMTsKK3N0YXRpYyBjaGFyKiAoKl9fcmVhbF9k
bGVycm9yKSh2b2lkKSA9IE5VTEw7CisKKy8vIFJldHVybnMgdGhlIHN0cmluZyAiZGlybmFtZS9m
aWxlbmFtZSIgaW50byB0aGUgYnVmZmVyIHBhdGhfam9pbnRfZGVzdAordm9pZCBkbG9wZW5fd3Jh
cHBlcl9wYXRoX2pvaW4oY29uc3QgY2hhciogZGlybmFtZSwgY29uc3QgY2hhciogZmlsZW5hbWUs
IGNoYXIqIHBhdGhfam9pbnRfZGVzdCkKK3sKKyAgICBwYXRoX2pvaW50X2Rlc3QgPSBzdHJuY3B5
KHBhdGhfam9pbnRfZGVzdCwgZGlybmFtZSwgUEFUSF9NQVgpOworICAgIC8vIGFkZCBhIHNsYXNo
IGlmIG5lZWRlZAorICAgIGlmICgqKHBhdGhfam9pbnRfZGVzdCArIHN0cmxlbihkaXJuYW1lKSAt
IDEpICE9ICcvJykgeworICAgICAgICAqKHBhdGhfam9pbnRfZGVzdCArIHN0cmxlbihkaXJuYW1l
KSkgPSAnLyc7CisgICAgICAgICoocGF0aF9qb2ludF9kZXN0ICsgc3RybGVuKGRpcm5hbWUpICsg
MSkgPSAwOworICAgIH0KKyAgICBzdHJuY2F0KHBhdGhfam9pbnRfZGVzdCwgZmlsZW5hbWUsIFBB
VEhfTUFYKTsKK30KKworaW50IGlzX2Rpcih1bnNpZ25lZCBjaGFyIGRfdHlwZSwgY29uc3QgY2hh
ciogZmlsZXBhdGgpCit7CisgICAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKyAgICAvLyB3ZSBjb25z
aWRlciBhIHN5bWJvbGljIGxpbmsgdG8gYSBkaXIgYXMgYSBkaXIsIGFsc28gaGFuZGxlIHVua25v
d24uCisgICAgaWYgKGRfdHlwZSA9PSBEVF9VTktOT1dOIHx8IGRfdHlwZSA9PSBEVF9MTkspIHsK
KyAgICAgICAgaWYgKHN0YXQoZmlsZXBhdGgsICZzdGF0YnVmKSkKKyAgICAgICAgICAgIGRsb3Bl
bl93cmFwcGVyX3ByaW50X2Vycm9yX21zZygiQ2FsbGluZyBzdGF0IG9uIFwiJXNcIjogJXNcbiIs
IGZpbGVwYXRoLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gU19JU0RJUihzdGF0
YnVmLnN0X21vZGUpOworICAgIH0KKyAgICByZXR1cm4gKGRfdHlwZSA9PSBEVF9ESVIpOworfQor
CisvLyBSZWN1cnNpdmUgZnVuY3Rpb24gdG8gdHJhdmVyc2UgYSBkaXJlY3RvcnkgYW5kIG9idGFp
biB0aGUgcGF0aCBvZiB0aGUgZmlyc3QgZmlsZSBuYW1lZCAiZmlsZW5hbWUiCisvLyBJdCB3cml0
ZXMgdGhhdCBwYXRoIHRvIHRoZSBidWZmZXIgImNhbmRpZGF0ZV9wYXRoX2Rlc3QiIGlmIHRoZSBm
aWxlIGlzIGZvdW5kIChyZXR1cm4gPT0gMSkuCisvLyBJZiB0aGUgZmlsZSBpcyBub3QgZm91bmQg
aXQgcmV0dXJucyAwIGFuZCB0aGUgY29udGVudHMgb2YgImNhbmRpZGF0ZV9wYXRoX2Rlc3QiIGFy
ZSB1bmRlZmluZWQuCitpbnQgZGxvcGVuX3dyYXBwZXJfcmVjdXJzaXZlX2ZpbmQoY29uc3QgY2hh
ciogZmlsZW5hbWVfdG9fZmluZCwgY29uc3QgY2hhciogZGlyZWN0b3J5X3RvX3NlYXJjaCwgY2hh
ciogY2FuZGlkYXRlX3BhdGhfZGVzdCkKK3sKKworICAgIERJUiAqZHA7CisgICAgc3RydWN0IGRp
cmVudCogZW50cnk7CisKKyAgICBjaGFyIHN1YmRpcmVjdG9yeV90b19zZWFyY2hbUEFUSF9NQVhd
OworICAgIGRwID0gb3BlbmRpcihkaXJlY3RvcnlfdG9fc2VhcmNoKTsKKworICAgIGlmICghZHAp
IHsKKyAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZXJyb3JfbXNnKCJPcGVuaW5nIGRpcmVj
dG9yeSBcIiVzXCI6ICVzXG4iLCBkaXJlY3RvcnlfdG9fc2VhcmNoLCBzdHJlcnJvcihlcnJubykp
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBl
cnJubyA9IDA7CisgICAgICAgIGVudHJ5ID0gcmVhZGRpcihkcCk7CisgICAgICAgIGlmICghZW50
cnkpIHsKKyAgICAgICAgICAgIGlmIChlcnJubykKKyAgICAgICAgICAgICAgICBkbG9wZW5fd3Jh
cHBlcl9wcmludF9lcnJvcl9tc2coIlJlYWRpbmcgZGlyZWN0b3J5IFwiJXNcIjogJXNcbiIsIGRp
cmVjdG9yeV90b19zZWFyY2gsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghc3RyY21wKGVudHJ5LT5kX25hbWUsICIuIikgfHwg
IXN0cmNtcChlbnRyeS0+ZF9uYW1lLCAiLi4iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIGRsb3Blbl93cmFwcGVyX3BhdGhfam9pbihkaXJlY3RvcnlfdG9fc2VhcmNoLCBlbnRy
eS0+ZF9uYW1lLCBjYW5kaWRhdGVfcGF0aF9kZXN0KTsKKworICAgICAgICBpZiAoaXNfZGlyKGVu
dHJ5LT5kX3R5cGUsIGNhbmRpZGF0ZV9wYXRoX2Rlc3QpKSB7CisgICAgICAgICAgICBkbG9wZW5f
d3JhcHBlcl9wYXRoX2pvaW4oZGlyZWN0b3J5X3RvX3NlYXJjaCwgZW50cnktPmRfbmFtZSwgc3Vi
ZGlyZWN0b3J5X3RvX3NlYXJjaCk7CisgICAgICAgICAgICBpZiAoZGxvcGVuX3dyYXBwZXJfcmVj
dXJzaXZlX2ZpbmQoZmlsZW5hbWVfdG9fZmluZCwgc3ViZGlyZWN0b3J5X3RvX3NlYXJjaCwgY2Fu
ZGlkYXRlX3BhdGhfZGVzdCkpIHsKKyAgICAgICAgICAgICAgICBjbG9zZWRpcihkcCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBpZiAoIXN0cmNtcChmaWxlbmFtZV90b19maW5kLCBlbnRyeS0+ZF9uYW1lKSkg
eworICAgICAgICAgICAgICAgIGlmICghYWNjZXNzKGNhbmRpZGF0ZV9wYXRoX2Rlc3QsIEZfT0sg
fCBSX09LKSkgeworICAgICAgICAgICAgICAgICAgICBjbG9zZWRpcihkcCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBk
bG9wZW5fd3JhcHBlcl9wcmludF9lcnJvcl9tc2coIkFjY2VzcyBkZW5pZWQgdG8gY2FuZGlkYXRl
IGxpYnJhcnkgXCIlc1wiXG4iLCBjYW5kaWRhdGVfcGF0aF9kZXN0KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjbG9zZWRpcihkcCk7CisgICAgcmV0dXJuIDA7Cit9CisK
Ky8vIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBmaWxlbmFtZV9vcmlnaW5hbF9wYXRo
IGlzIGEgcGF0aCBhbmQgaXMgaW5zaWRlIGxpYmRpci4KKy8vIElmIGl0IGNhbid0IGZpbmQgdGhl
IGZpbGUgZGlyZWN0bHkgYnkgdGhlIHBhdGgsIGl0IGNhbGxzIGRsb3Blbl93cmFwcGVyX3JlY3Vy
c2l2ZV9maW5kKCkgdG8gc2VhcmNoIGl0LgorLy8gSXQgd3JpdGVzIHRoZSBwYXRoIHRvIHRoZSBi
dWZmZXIgInBhdGhfZm91bmRfZGVzdCIgaWYgdGhlIGZpbGUgaXMgZm91bmQgKHJldHVybiA9PSAx
KS4KKy8vIElmIHRoZSBmaWxlIGlzIG5vdCBmb3VuZCBpdCByZXR1cm5zIDAgYW5kIHRoZSBjb250
ZW50cyBvZiAicGF0aF9mb3VuZF9kZXN0IiBhcmUgdW5kZWZpbmVkLgoraW50IGRsb3Blbl93cmFw
cGVyX2dldF9wYXRoX2Zvcl9maWxlX3VuZGVyX2Rpcihjb25zdCBjaGFyKiBmaWxlbmFtZV9vcmln
aW5hbF9wYXRoLCBjb25zdCBjaGFyKiBsaWJkaXIsIGNoYXIqIHBhdGhfZm91bmRfZGVzdCkKK3sK
KworICAgIC8vIGJhc2VuYW1lKCkgbWF5IG1vZGlmeSB0aGUgYnVmZmVyIHBhc3NlZCBvbiB0aGUg
Zmlyc3QgYXJndW1lbnQKKyAgICBjaGFyICpvcmlnaW5hbF9wYXRoID0gc3RyZHVwKGZpbGVuYW1l
X29yaWdpbmFsX3BhdGgpOworICAgIGNoYXIgKmJhc2VfZmlsZV90b19kbG9wZW5fd3JhcHBlcl9m
aW5kID0gYmFzZW5hbWUob3JpZ2luYWxfcGF0aCk7CisgICAgaW50IHJldGNvZGUgPSAxOworICAg
IGludCBmaWxlbmFtZV9pc19hYnNvbHV0ZSA9ICgqZmlsZW5hbWVfb3JpZ2luYWxfcGF0aCA9PSAn
LycpOworICAgIGludCBmaWxlbmFtZV9pc19yZWxhdGl2ZSA9IDA7CisgICAgaWYgKCFmaWxlbmFt
ZV9pc19hYnNvbHV0ZSkgeworICAgICAgICBmb3IgKGNoYXIqIGN1cnJlbnRfY2hhciA9IChjaGFy
KilmaWxlbmFtZV9vcmlnaW5hbF9wYXRoOyAqY3VycmVudF9jaGFyOyArK2N1cnJlbnRfY2hhcikg
eworICAgICAgICAgICAgaWYgKCpjdXJyZW50X2NoYXIgPT0gJy8nKSB7CisgICAgICAgICAgICAg
ICAgZmlsZW5hbWVfaXNfcmVsYXRpdmUgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZpbGVuYW1lX2lzX2Fic29s
dXRlKSB7CisgICAgICAgIGlmICghc3RybmNtcChmaWxlbmFtZV9vcmlnaW5hbF9wYXRoLCBsaWJk
aXIsIHN0cmxlbihsaWJkaXIpKSkgeworICAgICAgICAgICAgaWYgKCFhY2Nlc3MoZmlsZW5hbWVf
b3JpZ2luYWxfcGF0aCwgRl9PSyB8IFJfT0spKSB7CisgICAgICAgICAgICAgICAgZGxvcGVuX3dy
YXBwZXJfcHJpbnRfZGVidWdfbXNnKCJGaWxlbmFtZSBcIiVzXCIgZm91bmQgdW5kZXIgZGlyZWN0
b3J5IFwiJXNcIiB3aXRob3V0IGFueSBwYXRoIHJld3JpdGluZ1xuIiwgZmlsZW5hbWVfb3JpZ2lu
YWxfcGF0aCwgbGliZGlyKTsKKyAgICAgICAgICAgICAgICBzdHJuY3B5KHBhdGhfZm91bmRfZGVz
dCwgZmlsZW5hbWVfb3JpZ2luYWxfcGF0aCwgUEFUSF9NQVgpOworICAgICAgICAgICAgICAgIHJl
dHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRsb3Blbl93cmFwcGVy
X3ByaW50X2RlYnVnX21zZygiRmlsZW5hbWUgXCIlc1wiIE5PVCBmb3VuZCB1bmRlciBkaXJlY3Rv
cnkgXCIlc1wiLiBXaWxsIHRyeSBhIHNlYXJjaCB3aXRoIGJhc2VuYW1lXG4iLCBmaWxlbmFtZV9v
cmlnaW5hbF9wYXRoLCBsaWJkaXIpOworICAgIH0gZWxzZSBpZiAoZmlsZW5hbWVfaXNfcmVsYXRp
dmUpIHsKKyAgICAgICAgZGxvcGVuX3dyYXBwZXJfcGF0aF9qb2luKGxpYmRpciwgZmlsZW5hbWVf
b3JpZ2luYWxfcGF0aCwgcGF0aF9mb3VuZF9kZXN0KTsKKyAgICAgICAgaWYgKCFhY2Nlc3MocGF0
aF9mb3VuZF9kZXN0LCBGX09LIHwgUl9PSykpIHsKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVy
X3ByaW50X2RlYnVnX21zZygiRmlsZW5hbWUgXCIlc1wiIGNvbnZlcnRlZCB0byBcIiVzXCIgYW5k
IGZvdW5kIHVuZGVyIGRpcmVjdG9yeSBcIiVzXCJcbiIsIGZpbGVuYW1lX29yaWdpbmFsX3BhdGgs
IHBhdGhfZm91bmRfZGVzdCwgbGliZGlyKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAg
ICB9CisgICAgICAgIGRsb3Blbl93cmFwcGVyX3ByaW50X2RlYnVnX21zZygiRmlsZW5hbWUgXCIl
c1wiIE5PVCBmb3VuZCB1bmRlciBkaXJlY3RvcnkgXCIlc1wiXG4iLCBmaWxlbmFtZV9vcmlnaW5h
bF9wYXRoLCBsaWJkaXIpOworICAgIH0KKworICAgIGRsb3Blbl93cmFwcGVyX3ByaW50X2RlYnVn
X21zZygiVHJ5aW5nIGEgc2VhcmNoIGZvciBiYXNlbmFtZSBcIiVzXCIgdW5kZXIgZGlyZWN0b3J5
IFwiJXNcIlxuIiwgYmFzZV9maWxlX3RvX2Rsb3Blbl93cmFwcGVyX2ZpbmQsIGxpYmRpcik7CisK
KyAgICByZXRjb2RlID0gZGxvcGVuX3dyYXBwZXJfcmVjdXJzaXZlX2ZpbmQoYmFzZV9maWxlX3Rv
X2Rsb3Blbl93cmFwcGVyX2ZpbmQsIGxpYmRpciwgcGF0aF9mb3VuZF9kZXN0KTsKKyAgICBpZiAo
b3JpZ2luYWxfcGF0aCkKKyAgICAgICAgZnJlZShvcmlnaW5hbF9wYXRoKTsKKyAgICByZXR1cm4g
cmV0Y29kZTsKK30KKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHNwbGl0IHRoZSBwYXRocyBvZiBs
ZF9saWJyYXJ5X3BhdGggYW5kIHRvIHNlYXJjaCBmb3IgImZpbGVuYW1lX29yaWdpbmFsX3BhdGgi
IGluc2lkZSB0aG9zZSBwYXRocy4KKy8vIEl0IHdpbGwgc3RvcCBzZWFyY2hpbmcgYXQgdGhlIGZp
cnN0IG1hdGNoLgorLy8gSXQgd3JpdGVzIHRoZSBwYXRoIHRvIHRoZSBidWZmZXIgInBhdGhfZm91
bmRfZGVzdCIgaWYgdGhlIGZpbGUgaXMgZm91bmQgKHJldHVybiA9PSAxKS4KKy8vIElmIHRoZSBm
aWxlIGlzIG5vdCBmb3VuZCBpdCByZXR1cm5zIDAgYW5kIHRoZSBjb250ZW50cyBvZiAicGF0aF9m
b3VuZF9kZXN0IiBhcmUgdW5kZWZpbmVkLgoraW50IGRsb3Blbl93cmFwcGVyX2ZpbmRfbGlicmFy
eV9vbl9saWJwYXRoKGNvbnN0IGNoYXIqIGZpbGVuYW1lX29yaWdpbmFsX3BhdGgsIGNvbnN0IGNo
YXIqIGxkX2xpYnJhcnlfcGF0aCwgY2hhciogcGF0aF9mb3VuZF9kZXN0KQoreworCisgICAgY2hh
ciAqc2F2ZXB0ciA9IE5VTEw7CisgICAgY2hhciAqbGlicmFyeV9wYXRocyA9IHN0cmR1cChsZF9s
aWJyYXJ5X3BhdGgpOworICAgIGludCBmb3VuZCA9IDA7CisKKyAgICBmb3IgKGNoYXIgKmxpYmRp
ciA9IHN0cnRva19yKGxpYnJhcnlfcGF0aHMsICI6IiwgJnNhdmVwdHIpOyBsaWJkaXI7IGxpYmRp
ciA9IHN0cnRva19yKE5VTEwsICI6IiwgJnNhdmVwdHIpKSB7CisgICAgICAgIC8vIG1ha2UgdGhl
IHBhdGggYWJzb2x1dGUKKyAgICAgICAgY2hhciAqbGliZGlyX3JwID0gcmVhbHBhdGgobGliZGly
LCBOVUxMKTsKKyAgICAgICAgaWYgKCFsaWJkaXJfcnApIHsKKyAgICAgICAgICAgIGRsb3Blbl93
cmFwcGVyX3ByaW50X2Vycm9yX21zZygiQ2FsbGluZyByZWFscGF0aCgpIG9uIFwiJXNcIjogJXNc
biIsIGxpYmRpciwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisgICAgICAgIGRsb3Blbl93cmFwcGVyX3ByaW50X2RlYnVnX21zZygiVHJ5aW5nIHNl
YXJjaCB1bmRlciBkaXJlY3RvcnkgJXNcbiIsIGxpYmRpcik7CisgICAgICAgIGlmIChkbG9wZW5f
d3JhcHBlcl9nZXRfcGF0aF9mb3JfZmlsZV91bmRlcl9kaXIoZmlsZW5hbWVfb3JpZ2luYWxfcGF0
aCwgbGliZGlyX3JwLCBwYXRoX2ZvdW5kX2Rlc3QpKSB7CisgICAgICAgICAgICBmcmVlKGxpYmRp
cl9ycCk7CisgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBmcmVlKGxpYmRpcl9ycCk7CisgICAgfQorICAgIGZyZWUobGlicmFyeV9w
YXRocyk7CisgICAgcmV0dXJuIGZvdW5kOworfQorCit2b2lkICpkbG9wZW4oY29uc3QgY2hhciog
ZmlsZW5hbWUsIGludCBmbGFncykKK3sKKyAgICBjaGFyIG5ld19maWxlX3BhdGhbUEFUSF9NQVhd
OworICAgIGRsb3Blbl93cmFwcGVyX2NhbGxfcmVhbF9kbGVycm9yID0gMTsKKworICAgIGlmIChk
bG9wZW5fd3JhcHBlcl9kZWJ1Z19wcmludCA9PSAtMSkgeworICAgICAgICBjaGFyICpkbG9wZW5f
ZGVidWdfdmFsdWUgPSBnZXRlbnYoIkRMT1BFTl9XUkFQX0RFQlVHIik7CisgICAgICAgIGlmIChk
bG9wZW5fZGVidWdfdmFsdWUpCisgICAgICAgICAgICBkbG9wZW5fd3JhcHBlcl9kZWJ1Z19wcmlu
dCA9IGF0b2koZGxvcGVuX2RlYnVnX3ZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCog
KCpfX3JlYWxfZGxvcGVuKShjb25zdCBjaGFyKiBmaWxlLCBpbnQgbW9kZSkgPSBOVUxMOworICAg
IGlmICghX19yZWFsX2Rsb3BlbikgeworICAgICAgICBfX3JlYWxfZGxvcGVuID0gZGxzeW0oUlRM
RF9ORVhULCAiZGxvcGVuIik7CisgICAgICAgIGlmICghX19yZWFsX2Rsb3BlbikgeworICAgICAg
ICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZXJyb3JfbXNnKCJHZXR0aW5nIGRsb3BlbiBhZGRy
ZXNzOiAlc1xuIiwgZGxlcnJvcigpKTsKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVyX2NhbGxf
cmVhbF9kbGVycm9yID0gMDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9Cisg
ICAgfQorICAgIGlmICghX19yZWFsX2RsZXJyb3IpIHsKKyAgICAgICAgX19yZWFsX2RsZXJyb3Ig
PSBkbHN5bShSVExEX05FWFQsICJkbGVycm9yIik7CisgICAgICAgIGlmICghX19yZWFsX2RsZXJy
b3IpIHsKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVyX3ByaW50X2Vycm9yX21zZygiR2V0dGlu
ZyBkbGVycm9yIGFkZHJlc3M6ICVzXG4iLCBkbGVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiBm
aWxlbmFtZSBpcyBOVUxMIG9yIExEX0xJQlJBUllfUEFUSCBub3QgZGVmaW5lZAorICAgIGlmICgh
ZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBfX3JlYWxfZGxvcGVuKGZpbGVuYW1lLCBmbGFncyk7
CisKKyAgICBjaGFyICpsZF9saWJyYXJ5X3BhdGggPSBnZXRlbnYoIkxEX0xJQlJBUllfUEFUSCIp
OworICAgIGlmICghbGRfbGlicmFyeV9wYXRoKQorICAgICAgICByZXR1cm4gX19yZWFsX2Rsb3Bl
bihmaWxlbmFtZSwgZmxhZ3MpOworCisgICAgaWYgKCFkbG9wZW5fd3JhcHBlcl9maW5kX2xpYnJh
cnlfb25fbGlicGF0aChmaWxlbmFtZSwgbGRfbGlicmFyeV9wYXRoLCBuZXdfZmlsZV9wYXRoKSkg
eworICAgICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9lcnJvcl9tc2coIkNvdWxkIG5vdCBmaW5k
IFwiJXNcIiB1bmRlciB0aGUgZGlyZWN0b3JpKGVzKSBvZiBMRF9MSUJSQVJZX1BBVEguIFJlZnVz
aW5nIHRvIGRsb3BlbiBpdFxuIiwgZmlsZW5hbWUpOworICAgICAgICBkbG9wZW5fd3JhcHBlcl9j
YWxsX3JlYWxfZGxlcnJvciA9IDA7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAg
IGlmIChkbG9wZW5fd3JhcHBlcl9kZWJ1Z19wcmludCkgeworICAgICAgICBpZiAoc3RyY21wKGZp
bGVuYW1lLCBuZXdfZmlsZV9wYXRoKSkKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVyX3ByaW50
X2RlYnVnX21zZygiT3JpZ2luYWwgcmVxdWVzdCB0byBkbG9wZW4gXCIlc1wiIGNoYW5nZWQgdG8g
bG9hZCBcIiVzXCJcbiIsIGZpbGVuYW1lLCBuZXdfZmlsZV9wYXRoKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZGVidWdfbXNnKCJPcmlnaW5hbCByZXF1
ZXN0IHRvIGRsb3BlbiBcIiVzXCIgYWxsb3dlZCAodW5jaGFuZ2VkKSBiZWNhdXNlIGlzIHVuZGVy
IHRoZSBkaXJlY3RvcmkoZXMpIG9mIExEX0xJQlJBUllfUEFUSFxuIiwgZmlsZW5hbWUpOworICAg
IH0KKworICAgIHJldHVybiBfX3JlYWxfZGxvcGVuKG5ld19maWxlX3BhdGgsIGZsYWdzKTsKK30K
Kwordm9pZCAqZGxtb3BlbihMbWlkX3QgbG1pZCwgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBm
bGFncykKK3sKKworICAgIGNoYXIgbmV3X2ZpbGVfcGF0aFtQQVRIX01BWF07CisgICAgZGxvcGVu
X3dyYXBwZXJfY2FsbF9yZWFsX2RsZXJyb3IgPSAxOworCisgICAgaWYgKGRsb3Blbl93cmFwcGVy
X2RlYnVnX3ByaW50ID09IC0xKSB7CisgICAgICAgIGNoYXIgKmRsb3Blbl9kZWJ1Z192YWx1ZSA9
IGdldGVudigiRExPUEVOX1dSQVBfREVCVUciKTsKKyAgICAgICAgaWYgKGRsb3Blbl9kZWJ1Z192
YWx1ZSkKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVyX2RlYnVnX3ByaW50ID0gYXRvaShkbG9w
ZW5fZGVidWdfdmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiAoKl9fcmVhbF9kbG1v
cGVuKShMbWlkX3QgbG1pZHQsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBtb2RlKSA9IE5VTEw7Cisg
ICAgaWYgKCFfX3JlYWxfZGxtb3BlbikgeworICAgICAgICBfX3JlYWxfZGxtb3BlbiA9IGRsc3lt
KFJUTERfTkVYVCwgImRsbW9wZW4iKTsKKyAgICAgICAgaWYgKCFfX3JlYWxfZGxtb3Blbikgewor
ICAgICAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZXJyb3JfbXNnKCJHZXR0aW5nIGRsbW9w
ZW4gYWRkcmVzczogJXNcbiIsIGRsZXJyb3IoKSk7CisgICAgICAgICAgICBkbG9wZW5fd3JhcHBl
cl9jYWxsX3JlYWxfZGxlcnJvciA9IDA7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBpZiAoIV9fcmVhbF9kbGVycm9yKSB7CisgICAgICAgIF9fcmVhbF9k
bGVycm9yID0gZGxzeW0oUlRMRF9ORVhULCAiZGxlcnJvciIpOworICAgICAgICBpZiAoIV9fcmVh
bF9kbGVycm9yKSB7CisgICAgICAgICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9lcnJvcl9tc2co
IkdldHRpbmcgZGxlcnJvciBhZGRyZXNzOiAlc1xuIiwgZGxlcnJvcigpKTsKKyAgICAgICAgICAg
IHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRG9uJ3QgZG8gYW55dGhp
bmcgaWYgZmlsZW5hbWUgaXMgTlVMTCBvciBMRF9MSUJSQVJZX1BBVEggbm90IGRlZmluZWQKKyAg
ICBpZiAoIWZpbGVuYW1lKQorICAgICAgICByZXR1cm4gX19yZWFsX2RsbW9wZW4obG1pZCwgZmls
ZW5hbWUsIGZsYWdzKTsKKworICAgIGNoYXIgKmxkX2xpYnJhcnlfcGF0aCA9IGdldGVudigiTERf
TElCUkFSWV9QQVRIIik7CisgICAgaWYgKCFsZF9saWJyYXJ5X3BhdGgpCisgICAgICAgIHJldHVy
biBfX3JlYWxfZGxtb3BlbihsbWlkLCBmaWxlbmFtZSwgZmxhZ3MpOworCisgICAgaWYgKCFkbG9w
ZW5fd3JhcHBlcl9maW5kX2xpYnJhcnlfb25fbGlicGF0aChmaWxlbmFtZSwgbGRfbGlicmFyeV9w
YXRoLCBuZXdfZmlsZV9wYXRoKSkgeworICAgICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9lcnJv
cl9tc2coIkNvdWxkIG5vdCBmaW5kIFwiJXNcIiB1bmRlciB0aGUgZGlyZWN0b3JpKGVzKSBvZiBM
RF9MSUJSQVJZX1BBVEguIFJlZnVzaW5nIHRvIGRsbW9wZW4gaXRcbiIsIGZpbGVuYW1lKTsKKyAg
ICAgICAgZGxvcGVuX3dyYXBwZXJfY2FsbF9yZWFsX2RsZXJyb3IgPSAwOworICAgICAgICByZXR1
cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoZGxvcGVuX3dyYXBwZXJfZGVidWdfcHJpbnQpIHsK
KyAgICAgICAgaWYgKHN0cmNtcChmaWxlbmFtZSwgbmV3X2ZpbGVfcGF0aCkpCisgICAgICAgICAg
ICBkbG9wZW5fd3JhcHBlcl9wcmludF9kZWJ1Z19tc2coIk9yaWdpbmFsIHJlcXVlc3QgdG8gZGxt
b3BlbiBcIiVzXCIgY2hhbmdlZCB0byBsb2FkIFwiJXNcIlxuIiwgZmlsZW5hbWUsIG5ld19maWxl
X3BhdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9k
ZWJ1Z19tc2coIk9yaWdpbmFsIHJlcXVlc3QgdG8gZGxtb3BlbiBcIiVzXCIgYWxsb3dlZCAodW5j
aGFuZ2VkKSBiZWNhdXNlIGlzIHVuZGVyIHRoZSBkaXJlY3RvcmkoZXMpIG9mIExEX0xJQlJBUllf
UEFUSFxuIiwgZmlsZW5hbWUpOworICAgIH0KKworICAgIHJldHVybiBfX3JlYWxfZGxtb3Blbihs
bWlkLCBuZXdfZmlsZV9wYXRoLCBmbGFncyk7Cit9CisKKworY2hhciAqZGxlcnJvcih2b2lkKQor
eworICAgIHN0YXRpYyBjaGFyKiB3cmFwcGVyX2Vycm9yX21zZyA9ICJDYWxsIGJsb2NrZWQgYnkg
ZGxvcGVud3JhcHBlciBsaWJyYXJ5LiI7CisKKyAgICAvLyBfX3JlYWxfZGxlcnJvciBoYW5kbGUg
d2FzIGFscmVhZHkgb2J0YWluZWQgYmVmb3JlIG9uIHRoZSBkbG9wZW4oKSBvciBkbG1vcGVuKCkg
d3JhcHBlcnMuCisgICAgLy8gT2J0YWluaW5nIGl0IGhlcmUgaXMgbm90IHBvc3NpYmxlIGJlY2F1
c2UgY2FsbGluZyBkbHN5bSgpIG92ZXJ3cml0ZXMgdGhlIGRsZXJyb3IgYnVmZmVyLgorICAgIGlm
IChkbG9wZW5fd3JhcHBlcl9jYWxsX3JlYWxfZGxlcnJvciAmJiBfX3JlYWxfZGxlcnJvcikKKyAg
ICAgICAgcmV0dXJuIF9fcmVhbF9kbGVycm9yKCk7CisKKyAgICBkbG9wZW5fd3JhcHBlcl9jYWxs
X3JlYWxfZGxlcnJvciA9IDE7CisgICAgcmV0dXJuIHdyYXBwZXJfZXJyb3JfbXNnOworfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CmluZGV4IGJkZjNiMzQ3MTA0MmExMzM1
N2VkYjg2NGExNDk4ZGZmY2FhNTQwNzMuLmY2NTEwN2EwZTk0MjkyNzY5MzlkMjM0ZDIyNTM0NGQw
OWZhMDk1Y2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tl
ci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKQEAgLTMw
NSw2ICszMDUsMTEgQEAgX1BBVEhfUlVMRVNfU1BFQ0lGSUVSID0gWwogICAgICAgb3MucGF0aC5q
b2luKCdTb3VyY2UnLCAnVGhpcmRQYXJ0eScsICdsaWJ3ZWJydGMnLCAnU291cmNlJywgJ3dlYnJ0
YycpLAogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdQQUwnLCAncGFs
JywgJ3NwaScpXSwKICAgICAgWyItcmVhZGFiaWxpdHkvbmFtaW5nL3VuZGVyc2NvcmVzIl0pLAor
CisgICAgKFsgICMgYyBjb2RlIHdpdGggdW5kZXJzY29yZXMgaW4gdmFyaWFibGUgbmFtZXMgYW5k
IHRhYnMgZm9yIHRoZSBNYWtlZmlsZQorICAgICBvcy5wYXRoLmpvaW4oJ1Rvb2xzJywgJ1Njcmlw
dHMnLCAnd2Via2l0cHknLCAnYmluYXJ5X2J1bmRsaW5nJywgJ2Rsb3BlbndyYXAnKV0sCisgICAg
IFsiLXJlYWRhYmlsaXR5L25hbWluZy91bmRlcnNjb3JlcyIsCisgICAgICAiLXdoaXRlc3BhY2Uv
dGFiIl0pLAogXQogCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453064</attachid>
            <date>2022-02-23 18:57:17 -0800</date>
            <delta_ts>2022-03-08 14:29:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237107-20220224025716.patch</filename>
            <type>text/plain</type>
            <size>80844</size>
            <attacher name="Carlos Alberto Lopez Perez">clopez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZmNWQxZWIzMmM4NmQ2
Y2U2ZGNlMzY4YzViNzZjZTI0ZmQyMTMxYi4uYWZhODkxZGNiNjhhNjY3NTNlYmUxZmM5ZTc4N2Ew
ZTdkMjcyODUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIyLTAyLTIzICBDYXJs
b3MgQWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtH
VEtdW1dQRV0gZ2VuZXJhdGUtYnVuZGxlOiBzZWxmLWNvbnRhaW5lZCBidW5kbGUgZm9yIHRoZSBN
aW5pQnJvd3NlciB0aGF0IGNhbiB3b3JrIG9uIGFueSBkaXN0cm8KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzEwNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gY2hhbmdlIGlu
IGJlaGF2aW91ci4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29y
a1Nlc3Npb24uY3BwOiBBbGxvdyB0byBsb2FkIHRoZSBUTFMgZGF0YWJhc2Ugc3BlY2lmaWVkIG9u
IHRoZQorICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBXRUJLSVRfVExTX0NBRklMRV9QRU0g
d2hlbiBERVZFTE9QRVJfTU9ERSBpcyBlbmFibGVkCisgICAgICAgIChXZWJDb3JlOjpTb3VwTmV0
d29ya1Nlc3Npb246OlNvdXBOZXR3b3JrU2Vzc2lvbik6CisKIDIwMjItMDItMjMgIEFsYW4gQnVq
dGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtJRkNdW0ludGVncmF0aW9uXSBMaW5l
TGF5b3V0OjpmaXJzdExpbmVQaHlzaWNhbEJhc2VsaW5lL2xhc3RMaW5lTG9naWNhbEJhc2VsaW5l
IHNob3VsZCBmbGlwIGJveCBiYXNlbGluZSB2YWx1ZSBmb3IgdmVydGljYWwtbHIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Np
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3Jr
U2Vzc2lvbi5jcHAKaW5kZXggOWViMzE2ZDJhMGZiYWRmNTQ3ZTc5NDU3NWM3MDFjYzQxZDlhZDcx
Yi4uZGNiNzhmMDY4ZGY2MjFmNDhmOTkwNjE1YjU0NTRkZDU2NDViYmQ1NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3Jr
U2Vzc2lvbi5jcHAKQEAgLTEzMyw2ICsxMzMsMjMgQEAgU291cE5ldHdvcmtTZXNzaW9uOjpTb3Vw
TmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIGlmIChzb3VwX2F1
dGhfbmVnb3RpYXRlX3N1cHBvcnRlZCgpICYmICFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQog
ICAgICAgICBzb3VwX3Nlc3Npb25fYWRkX2ZlYXR1cmVfYnlfdHlwZShtX3NvdXBTZXNzaW9uLmdl
dCgpLCBTT1VQX1RZUEVfQVVUSF9ORUdPVElBVEUpOwogCisjaWYgRU5BQkxFKERFVkVMT1BFUl9N
T0RFKQorICAgIC8vIE9wdGlvbmFsbHkgbG9hZCBhIGN1c3RvbSBwYXRoIHdpdGggdGhlIFRMUyBD
QUZpbGUuIFRoaXMgaXMgdXNlZCBvbiB0aGUgR1RLL1dQRSBidW5kbGVzLiBTZWUgc2NyaXB0IGdl
bmVyYXRlLWJ1bmRsZQorICAgIGNvbnN0IGNoYXIqIGN1c3RvbVRMU0NBRmlsZSA9IGdfZ2V0ZW52
KCJXRUJLSVRfVExTX0NBRklMRV9QRU0iKTsKKyNpZiBVU0UoU09VUDIpCisgICAgaWYgKGN1c3Rv
bVRMU0NBRmlsZSkKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fc291cFNlc3Npb24uZ2V0KCksICJz
c2wtY2EtZmlsZSIsIGN1c3RvbVRMU0NBRmlsZSwgTlVMTCk7CisjZWxzZQorICAgIEdVbmlxdWVP
dXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBpZiAoY3VzdG9tVExTQ0FGaWxlKSB7CisgICAgICAg
IEdSZWZQdHI8R1Rsc0RhdGFiYXNlPiBjdXN0b21UTFNEQiA9IGFkb3B0R1JlZihnX3Rsc19maWxl
X2RhdGFiYXNlX25ldyhjdXN0b21UTFNDQUZpbGUsICZlcnJvci5vdXRQdHIoKSkpOworICAgICAg
ICBpZiAoZXJyb3IpCisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIkZhaWxlZCB0byBsb2FkIFRM
UyBkYXRhYmFzZSBcIiVzXCI6ICVzIiwgY3VzdG9tVExTQ0FGaWxlLCBlcnJvci0+bWVzc2FnZSk7
CisgICAgICAgIHNvdXBfc2Vzc2lvbl9zZXRfdGxzX2RhdGFiYXNlKG1fc291cFNlc3Npb24uZ2V0
KCksIGN1c3RvbVRMU0RCLmdldCgpKTsKKyAgICB9CisjZW5kaWYgLy8gVVNFKFNPVVAyKQorI2Vu
ZGlmIC8vIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKKwogICAgIHNldHVwTG9nZ2VyKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmMDUx
ODEyYzI5NTliZWViZGUzZTgzMzNmNTQ4YzliZmQyZjQzNGNiLi41YjIzZGRlNmQ1Mzk0YTNmY2Zj
MTMxZmY4NWU0ZWQzYjdiYjY4ZjQ2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMjItMDItMjMgIENhcmxvcyBBbGJl
cnRvIExvcGV6IFBlcmV6ICA8Y2xvcGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BF
XSBnZW5lcmF0ZS1idW5kbGU6IHNlbGYtY29udGFpbmVkIGJ1bmRsZSBmb3IgdGhlIE1pbmlCcm93
c2VyIHRoYXQgY2FuIHdvcmsgb24gYW55IGRpc3RybworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIGluIHRoZSBnZW5lcmF0ZS1i
dW5kbGUgc2NyaXB0IHRoZSBzdXBwb3J0IHRvIGdlbmVyYXRlIGEgYnVuZGxlIHNlbGYtY29udGFp
bmVkIHRoYXQgY2FuIHdvcmsgb24gYW55IGRpc3Ryby4KKyAgICAgICAgVG8gYWNoaWV2ZSB0aGF0
IHRoZSBidW5kbGUgY29udGFpbnMgYWxsIHRoZSByZXF1aXJlZCBzeXN0ZW0gbGlicmFyaWVzIGlu
c2lkZSB0aGUgYnVuZGxlIChldmVuIHRoZSBncmFwaGljcyBkcml2ZXJzKS4KKyAgICAgICAgSXQg
YWxzbyBjb250YWlucyB0aGUgcmVxdWlyZWQgc3lzdGVtIHJlc291cmNlczogaWNvbnMgKGZvciBn
dGspLCBmb250Y29uZmlnIGZpbGVzIGFuZCBmb250cywgZXRjLgorICAgICAgICBBIGN1c3RvbSBk
bG9wZW53cmFwIGxpYnJhcnkgaXMgYWxzbyBhZGRlZCBhbmQgcHJlbG9hZGVkLiBUaGUgcHVycG9z
ZSBvZiB0aGlzIGxpYnJhcnkgaXMgdG8gd3JhcCBhbGwgZGxvcGVuKCkgY2FsbHMKKyAgICAgICAg
YW5kIHJld3JpdGUgdGhlIHBhdGhzIHRvIGVuc3VyZSB0aGF0IG9ubHkgbGlicmFyaWVzIGluc2lk
ZSB0aGUgYnVuZGxlIGFyZSBsb2FkZWQuCisKKyAgICAgICAgVGhlIGJ1bmRsZSBoYXMgYmVlbiB0
ZXN0ZWQgdG8gYmUgZ2VuZXJhdGVkIHdpdGggdGhlIGZsYXRwYWsgYnVpbGQgYW5kIGV4ZWN1dGVk
IG9uIGEgcmFuZ2Ugb2YgdmVyeSBkaWZmZXJlbnQgZGlzdHJpYnV0aW9ucworICAgICAgICB3aXRo
IHN1Y2VzczogRmVkb3JhLCBVYnVudHUsIERlYmlhbiwgQWxwaW5lLCBDZW50T1MgKGRpZmZlcmVu
dCB2ZXJzaW9ucyBvZiBlYWNoKQorCisgICAgICAgICogU2NyaXB0cy9idW5kbGUtYmluYXJ5Ogor
ICAgICAgICAqIFNjcmlwdHMvZ2VuZXJhdGUtYnVuZGxlOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvYmluYXJ5X2J1bmRsaW5nL2J1bmRsZS5weToKKyAgICAgICAgKEJpbmFyeUJ1bmRsZXIp
OgorICAgICAgICAoQmluYXJ5QnVuZGxlci5fX2luaXRfXyk6CisgICAgICAgIChCaW5hcnlCdW5k
bGVyLl9pc19zeXN0ZW1fZGVwKToKKyAgICAgICAgKEJpbmFyeUJ1bmRsZXIuc2V0X3VzZV9zeXNf
bGliX2RpcmVjdG9yeSk6CisgICAgICAgIChCaW5hcnlCdW5kbGVyLmNvcHlfYW5kX21heWJlX3N0
cmlwX3BhdGNoZWxmKToKKyAgICAgICAgKEJpbmFyeUJ1bmRsZXIuZGVzdGluYXRpb25fZGlyKToK
KyAgICAgICAgKEJpbmFyeUJ1bmRsZXIuZ2VuZXJhdGVfd3JhcHBlcl9zY3JpcHQpOgorICAgICAg
ICAoQmluYXJ5QnVuZGxlci5jb3B5X2FuZF9yZW1vdmVfcnBhdGgpOiBEZWxldGVkLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5nL2Rsb3BlbndyYXAvTWFrZWZpbGU6
IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5nL2Rsb3Bl
bndyYXAvUkVBRE1FLnR4dDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iaW5h
cnlfYnVuZGxpbmcvZGxvcGVud3JhcC9kbG9wZW53cmFwLmM6IEFkZGVkLgorICAgICAgICAoZGxv
cGVuX3dyYXBwZXJfcGF0aF9qb2luKToKKyAgICAgICAgKGlzX2Rpcik6CisgICAgICAgIChkbG9w
ZW5fd3JhcHBlcl9yZWN1cnNpdmVfZmluZCk6CisgICAgICAgIChkbG9wZW5fd3JhcHBlcl9nZXRf
cGF0aF9mb3JfZmlsZV91bmRlcl9kaXIpOgorICAgICAgICAoZGxvcGVuX3dyYXBwZXJfZmluZF9s
aWJyYXJ5X29uX2xpYnBhdGgpOgorICAgICAgICAoZGxvcGVuKToKKyAgICAgICAgKGRsbW9wZW4p
OgorICAgICAgICAoZGxlcnJvcik6CisKIDIwMjItMDItMjMgIFdlbnNvbiBIc2llaCAgPHdlbnNv
bl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAoMjg4OTI1Pyk6IFtpT1Nd
IFRlc3RXZWJLaXRBUEkuUmVxdWVzdFRleHRJbnB1dENvbnRleHQuVGV4dEludGVyYWN0aW9uX0Zv
Y3VzaW5nUmVhZE9ubHlFbGVtZW50U2hvdWxkU2Nyb2xsVG9SZXZlYWwgaXMgZmFpbGluZwpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9idW5kbGUtYmluYXJ5IGIvVG9vbHMvU2NyaXB0cy9idW5k
bGUtYmluYXJ5CmluZGV4IGU3NmYzZmEwMTI0ZGZmNTQ4NjUwOWJkZmNmMTY3N2IyYmE1ZTMzMzEu
LjI5ZDFjNTBkMjdmNmExMDM4ZDJhZjQ2MDhmZTE2ZWNkNzlkNTg3ZmYgMTAwNzU1Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvYnVuZGxlLWJpbmFyeQorKysgYi9Ub29scy9TY3JpcHRzL2J1bmRsZS1iaW5h
cnkKQEAgLTQ2LDExICs0NiwxMSBAQCBkZWYgbWFpbigpOgogCiAgICAgaWYgaW50ZXJwcmV0ZXIg
aXMgTm9uZToKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDb3VsZCBub3QgZGV0ZXJtaW5l
IGludGVycHJldGVyIGZvciBiaW5hcnkgJXMiICUgb2JqZWN0KQotICAgIGJ1bmRsZXIgPSBCaW5h
cnlCdW5kbGVyKGFyZ3MuZGVzdF9kaXIsIEZhbHNlKQotICAgIGJ1bmRsZXIuY29weV9hbmRfcmVt
b3ZlX3JwYXRoKGludGVycHJldGVyLCB0eXBlPSdpbnRlcnByZXRlcicpCi0gICAgYnVuZGxlci5j
b3B5X2FuZF9yZW1vdmVfcnBhdGgoYXJncy5iaW5hcnksIHR5cGU9J2JpbicpCisgICAgYnVuZGxl
ciA9IEJpbmFyeUJ1bmRsZXIoYXJncy5kZXN0X2RpcikKKyAgICBidW5kbGVyLmNvcHlfYW5kX21h
eWJlX3N0cmlwX3BhdGNoZWxmKGludGVycHJldGVyLCB0eXBlPSdpbnRlcnByZXRlcicsIHN0cmlw
PUZhbHNlLCBwYXRjaGVsZl9yZW1vdmVycGF0aD1UcnVlLCBwYXRjaGVsZl9ub2RlZmF1bHRsaWI9
RmFsc2UpCisgICAgYnVuZGxlci5jb3B5X2FuZF9tYXliZV9zdHJpcF9wYXRjaGVsZihhcmdzLmJp
bmFyeSwgdHlwZT0nYmluJywgc3RyaXA9RmFsc2UsIHBhdGNoZWxmX3JlbW92ZXJwYXRoPVRydWUs
IHBhdGNoZWxmX25vZGVmYXVsdGxpYj1GYWxzZSkKICAgICBmb3IgbGliIGluIGxpYnJhcmllczoK
LSAgICAgICAgYnVuZGxlci5jb3B5X2FuZF9yZW1vdmVfcnBhdGgobGliLCB0eXBlPSdsaWInKQor
ICAgICAgICBidW5kbGVyLmNvcHlfYW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKGxpYiwgdHlwZT0n
bGliJywgc3RyaXA9RmFsc2UsIHBhdGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBhdGNoZWxmX25v
ZGVmYXVsdGxpYj1GYWxzZSkKICAgICBidW5kbGVyLmdlbmVyYXRlX3dyYXBwZXJfc2NyaXB0KGlu
dGVycHJldGVyLCBvcy5wYXRoLmJhc2VuYW1lKGFyZ3MuYmluYXJ5KSkKICAgICByZXR1cm4gMAog
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2dlbmVyYXRlLWJ1bmRsZSBiL1Rvb2xzL1Njcmlw
dHMvZ2VuZXJhdGUtYnVuZGxlCmluZGV4IGIzMmI5OTZjOGI2MjMzYTA3ZDk3NGQzY2U1NjMzZmY5
ZGQyODViZTkuLmM5ZDUxYmE3MDljZTllNzVlYTBmMGQ0MTM4ZDhmZDE0NmFhOTQzZTYgMTAwNzU1
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtYnVuZGxlCisrKyBiL1Rvb2xzL1NjcmlwdHMv
Z2VuZXJhdGUtYnVuZGxlCkBAIC0yMSw3ICsyMSw2IEBACiAjIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCiAjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCiBpbXBvcnQgYXJncGFyc2UKIGltcG9ydCBi
YXNlNjQKIGltcG9ydCBkYXRldGltZQpAQCAtODcsNiArODYsNjAgQEAgZWxzZQogZmkKICIiIgog
CitGT05UX0NPTkZfRklMRSA9ICIiIlwKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBF
IGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPgorPGZvbnRjb25maWc+CisgICAgPGl0czpy
dWxlcyB4bWxuczppdHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvMTEvaXRzIiB2ZXJzaW9uPSIx
LjAiPgorICAgICAgICA8aXRzOnRyYW5zbGF0ZVJ1bGUgdHJhbnNsYXRlPSJubyIgc2VsZWN0b3I9
Ii9mb250Y29uZmlnLypbbm90KHNlbGY6OmRlc2NyaXB0aW9uKV0iLz4KKyAgICA8L2l0czpydWxl
cz4KKworICAgIDxkZXNjcmlwdGlvbj5EZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZTwvZGVzY3Jp
cHRpb24+CisKKzwhLS0gRm9udCBkaXJlY3RvcnkgbGlzdCwgcmVsYXRpdmUgdG8gWERHX0RBVEFf
SE9NRSAtLT4KKyAgICA8ZGlyIHByZWZpeD0ieGRnIj5mb250cy9mb250czwvZGlyPgorCis8IS0t
IExvYWQgc3lzdGVtIGN1c3RvbWl6YXRpb24gZmlsZXMsIHJlbGF0aXZlIHRvIHByZXZpb3VzIGRp
ciAtLT4KKyAgICA8aW5jbHVkZSBpZ25vcmVfbWlzc2luZz0ieWVzIj5jb25mLmQ8L2luY2x1ZGU+
CisKKzwhLS0gRm9udCBjYWNoZSBkaXJlY3RvcnkgbGlzdCwgcmVsYXRpdmUgdG8gWERHX0NBQ0hF
X0hPTUUgLS0+CisgICAgPGNhY2hlZGlyIHByZWZpeD0ieGRnIj5mb250Y29uZmlnPC9jYWNoZWRp
cj4KKworPCEtLSBJbmNsdWRlIGFsc28gdGhlIHN5c3RlbSBmb250IGNvbmZpZyBpZiBpcyBvbiB0
aGUgc3RhbmRhcmQgZGlyIC0tPgorICAgIDxpbmNsdWRlIGlnbm9yZV9taXNzaW5nPSJ5ZXMiPi9l
dGMvZm9udHMvZm9udHMuY29uZjwvaW5jbHVkZT4KKworPCEtLSBBY2NlcHQgZGVwcmVjYXRlZCAn
bW9ubycgYWxpYXMsIHJlcGxhY2luZyBpdCB3aXRoICdtb25vc3BhY2UnIC0tPgorICAgIDxtYXRj
aCB0YXJnZXQ9InBhdHRlcm4iPgorICAgICAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWls
eSI+CisgICAgICAgICAgICA8c3RyaW5nPm1vbm88L3N0cmluZz4KKyAgICAgICAgPC90ZXN0Pgor
ICAgICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+
CisgICAgICAgICAgICA8c3RyaW5nPm1vbm9zcGFjZTwvc3RyaW5nPgorICAgICAgICA8L2VkaXQ+
CisgICAgPC9tYXRjaD4KKworPCEtLSBBY2NlcHQgYWx0ZXJuYXRlICdzYW5zIHNlcmlmJyBzcGVs
bGluZywgcmVwbGFjaW5nIGl0IHdpdGggJ3NhbnMtc2VyaWYnIC0tPgorICAgIDxtYXRjaCB0YXJn
ZXQ9InBhdHRlcm4iPgorICAgICAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+Cisg
ICAgICAgICAgICA8c3RyaW5nPnNhbnMgc2VyaWY8L3N0cmluZz4KKyAgICAgICAgPC90ZXN0Pgor
ICAgICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+
CisgICAgICAgICAgICA8c3RyaW5nPnNhbnMtc2VyaWY8L3N0cmluZz4KKyAgICAgICAgPC9lZGl0
PgorICAgIDwvbWF0Y2g+CisKKzwhLS0gQWNjZXB0IGRlcHJlY2F0ZWQgJ3NhbnMnIGFsaWFzLCBy
ZXBsYWNpbmcgaXQgd2l0aCAnc2Fucy1zZXJpZicgLS0+CisgICAgPG1hdGNoIHRhcmdldD0icGF0
dGVybiI+CisgICAgICAgIDx0ZXN0IHF1YWw9ImFueSIgbmFtZT0iZmFtaWx5Ij4KKyAgICAgICAg
ICAgIDxzdHJpbmc+c2Fuczwvc3RyaW5nPgorICAgICAgICA8L3Rlc3Q+CisgICAgICAgIDxlZGl0
IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIiBiaW5kaW5nPSJzYW1lIj4KKyAgICAgICAgICAg
IDxzdHJpbmc+c2Fucy1zZXJpZjwvc3RyaW5nPgorICAgICAgICA8L2VkaXQ+CisgICAgPC9tYXRj
aD4KKzwvZm9udGNvbmZpZz4KKyIiIgorCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1l
X18pCiBMT0dfTUVTU0FHRSA9IDI1CiAKQEAgLTEzOCw2ICsxOTEsOSBAQCBjbGFzcyBCdW5kbGVD
cmVhdG9yKG9iamVjdCk6CiAgICAgICAgIHdrX2J1aWxkX3BhdGggPSBvcy5lbnZpcm9uWydXRUJL
SVRfT1VUUFVURElSJ10gaWYgJ1dFQktJVF9PVVRQVVRESVInIGluIG9zLmVudmlyb24gZWxzZSBc
CiAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9z
LnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICcuLicsICdXZWJLaXRCdWlsZCcpKQogICAg
ICAgICBzZWxmLl9idWlsZHBhdGggPSBvcy5wYXRoLmpvaW4od2tfYnVpbGRfcGF0aCwgc2VsZi5f
Y29uZmlndXJhdGlvbi5jYXBpdGFsaXplKCkpCisgICAgICAgIHNlbGYuX2Rsb3BlbndyYXBfZGly
ID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18p
LCAnd2Via2l0cHknLCAnYmluYXJ5X2J1bmRsaW5nJywgJ2Rsb3BlbndyYXAnKSkKKyAgICAgICAg
aWYgbm90IG9zLnBhdGguaXNkaXIoc2VsZi5fZGxvcGVud3JhcF9kaXIpOgorICAgICAgICAgICAg
cmFpc2UgUnVudGltZUVycm9yKCJDYW4ndCBmaW5kIHRoZSBkbG9wZW53cmFwIGRpcmVjdG9yeSBh
dDogJXMiICUgc2VsZi5fZGxvcGVud3JhcF9kaXIpCiAKICAgICAgICAgZGVmYXVsdF9idW5kbGVf
bmFtZSA9IGJ1bmRsZV90eXBlICArICdfJyArIHNlbGYuX3BsYXRmb3JtICsgJ18nICsgc2VsZi5f
Y29uZmlndXJhdGlvbiArICcuJyArIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUKICAgICAgICAgaWYg
ZGVzdGluYXRpb24gYW5kICBvcy5wYXRoLmlzZGlyKGRlc3RpbmF0aW9uKToKQEAgLTE0NSw3ICsy
MDEsNiBAQCBjbGFzcyBCdW5kbGVDcmVhdG9yKG9iamVjdCk6CiAgICAgICAgIGVsc2U6CiAgICAg
ICAgICAgICBzZWxmLl9idW5kbGVfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHdrX2J1aWxkX3Bh
dGgsIGRlZmF1bHRfYnVuZGxlX25hbWUpCiAKLQogICAgIGRlZiBfY3JlYXRlX3RlbXBkaXIoc2Vs
ZiwgYmFzZWRpciA9IE5vbmUpOgogICAgICAgICBpZiBiYXNlZGlyIGlzIG5vdCBOb25lOgogICAg
ICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoYmFzZWRpcik6CkBAIC0xNTMsNyArMjA4LDYg
QEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICAgICAgcmV0dXJuIHRlbXBm
aWxlLm1rZHRlbXAocHJlZml4PW9zLnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgoYmFzZWRpciks
ICd0bXAnKSkKICAgICAgICAgcmV0dXJuIHRlbXBmaWxlLm1rZHRlbXAoKQogCi0KICAgICBkZWYg
X3J1bl9jbWRfYW5kX2dldF9vdXRwdXQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIF9sb2cuZGVi
dWcoIkVYRUMgJXMiICUgY29tbWFuZCkKICAgICAgICAgY29tbWFuZF9wcm9jZXNzID0gc3VicHJv
Y2Vzcy5Qb3Blbihjb21tYW5kLApAQCAtMTcwLDcgKzIyNCw2IEBAIGNsYXNzIEJ1bmRsZUNyZWF0
b3Iob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUuc3BsaXQoJz0nKVsx
XS5zdHJpcCgpLnN0cmlwKCciJykKICAgICAgICAgcmV0dXJuIE5vbmUKIAotCiAgICAgZGVmIF9n
ZW5lcmF0ZV9yZWFkbWUoc2VsZik6CiAgICAgICAgIF9sb2cuaW5mbygnR2VuZXJhdGUgUkVBRE1F
LnR4dCBmaWxlJykKICAgICAgICAgcmVhZG1lX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fdG1w
ZGlyLCAnUkVBRE1FLnR4dCcpCkBAIC0xOTEsMzYgKzI0NCw0NyBAQCBjbGFzcyBCdW5kbGVDcmVh
dG9yKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgcmVhZG1lX2hhbmRsZS53cml0ZSgnICAtIFRv
IGVuc3VyZSBhbGwgdGhlIHJlcXVpcmVkIGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkIGV4ZWN1dGUg
dGhlIHNjcmlwdDogaW5zdGFsbC1kZXBlbmRlbmNpZXMuc2hcbicpCiAgICAgICAgICAgICAgICAg
cmVhZG1lX2hhbmRsZS53cml0ZSgnICAtIFlvdSBjYW4gcGFzcyB0aGUgZmxhZyAiLS1hdXRvaW5z
dGFsbCIgdG8gdGhpcyBzY3JpcHQgdG8gYXV0b21hdGljYWxseSBpbnN0YWxsIHRoZSBkZXBlbmRl
bmNpZXMgaWYgbmVlZGVkLlxuJykKICAgICAgICAgICAgIHJlYWRtZV9oYW5kbGUud3JpdGUoJ1xu
UnVuIGluc3RydWN0aW9uczpcbicpCi0gICAgICAgICAgICBzY3JpcHRzID0gInNjcmlwdCIgaWYg
bGVuKHNlbGYuX3dyYXBwZXJfc2NyaXB0cykgPT0gMSBlbHNlICJzY3JpcHRzIgorICAgICAgICAg
ICAgc2NyaXB0cyA9ICdzY3JpcHQnIGlmIGxlbihzZWxmLl93cmFwcGVyX3NjcmlwdHMpID09IDEg
ZWxzZSAnc2NyaXB0cycKICAgICAgICAgICAgIHJlYWRtZV9oYW5kbGUud3JpdGUoJyAgLSBFeGVj
dXRlIHRoZSB3cmFwcGVyICVzIGluIHRoaXMgZGlyZWN0b3J5OlxuJyAlIHNjcmlwdHMpCiAgICAg
ICAgICAgICBmb3Igd3JhcHBlcl9zY3JpcHQgaW4gc2VsZi5fd3JhcHBlcl9zY3JpcHRzOgogICAg
ICAgICAgICAgICAgIHJlYWRtZV9oYW5kbGUud3JpdGUoJyAgICAqICVzXG4nICV3cmFwcGVyX3Nj
cmlwdCkKICAgICAgICAgcmV0dXJuIFRydWUKIAotCiAgICAgZGVmIF9nZW5lcmF0ZV93cmFwcGVy
X3NjcmlwdChzZWxmLCBpbnRlcnByZXRlciwgYmluYXJ5X3RvX3dyYXApOgogICAgICAgICB2YXJp
YWJsZXMgPSBkaWN0KCkKICAgICAgICAgbXlkaXIgPSBzZWxmLl9idW5kbGVyLlZBUl9NWURJUgot
ICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihzZWxmLl9idW5kbGVyLmRlc3Rp
bmF0aW9uX2RpcigpLCAnZ2lvJykpOgotICAgICAgICAgICAgZ2lvX3ZhciA9ICdHSU9fTU9EVUxF
X0RJUicgaWYgc2VsZi5fc3lzbGlicyA9PSAnYnVuZGxlLWFsbCcgZWxzZSAnR0lPX0VYVFJBX01P
RFVMRVMnCi0gICAgICAgICAgICB2YXJpYWJsZXNbZ2lvX3Zhcl0gPSAiJHslc30vZ2lvIiAlIG15
ZGlyCisgICAgICAgIGxpYl9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fYnVuZGxlci5kZXN0aW5h
dGlvbl9kaXIoKSwgJ2xpYicpCisgICAgICAgIHN5c2xpYl9kaXIgPSBvcy5wYXRoLmpvaW4oc2Vs
Zi5fYnVuZGxlci5kZXN0aW5hdGlvbl9kaXIoKSwgJ3N5cy9saWInKQorICAgICAgICBiaW5fZGly
ID0gb3MucGF0aC5qb2luKHNlbGYuX2J1bmRsZXIuZGVzdGluYXRpb25fZGlyKCksICdiaW4nKQor
ICAgICAgICBzaGFyZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fYnVuZGxlci5kZXN0aW5hdGlv
bl9kaXIoKSwgJ3N5cy9zaGFyZScpCiAKLSAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRo
LmpvaW4oc2VsZi5fYnVuZGxlci5kZXN0aW5hdGlvbl9kaXIoKSwgJ2dzdCcpKToKKyAgICAgICAg
aWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2dpbycpKToKKyAgICAg
ICAgICAgIGdpb192YXIgPSAnR0lPX01PRFVMRV9ESVInIGlmIHNlbGYuX3N5c2xpYnMgPT0gJ2J1
bmRsZS1hbGwnIGVsc2UgJ0dJT19FWFRSQV9NT0RVTEVTJworICAgICAgICAgICAgdmFyaWFibGVz
W2dpb192YXJdID0gJyR7JXN9L3N5cy9saWIvZ2lvJyAlIG15ZGlyCisgICAgICAgIGlmIG9zLnBh
dGguaXNkaXIob3MucGF0aC5qb2luKHN5c2xpYl9kaXIsICdnc3QnKSk6CiAgICAgICAgICAgICBn
c3RfdmFyID0gJ0dTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wJyBpZiBzZWxmLl9zeXNsaWJzID09
ICdidW5kbGUtYWxsJyBlbHNlICdHU1RfUExVR0lOX1BBVEhfMV8wJwotICAgICAgICAgICAgdmFy
aWFibGVzW2dzdF92YXJdID0gIiR7JXN9L2dzdCIgJSBteWRpcgotICAgICAgICAgICAgdmFyaWFi
bGVzWydHU1RfUkVHSVNUUllfMV8wJ10gPSAiJHslc30vZ3N0L2dzdHJlYW1lci0xLjAucmVnaXN0
cnkiICUgbXlkaXIKLSAgICAgICAgaWYgYmluYXJ5X3RvX3dyYXAgIT0gImpzYyI6Ci0gICAgICAg
ICAgICB2YXJpYWJsZXNbJ1dFQktJVF9FWEVDX1BBVEgnXSA9ICIkeyVzfS9iaW4iICUgbXlkaXIK
LSAgICAgICAgICAgIHZhcmlhYmxlc1snV0VCS0lUX0lOSkVDVEVEX0JVTkRMRV9QQVRIJ10gPSAi
JHslc30vbGliIiAlIG15ZGlyCi0gICAgICAgIGlmIHNlbGYuX3N5c2xpYnMgPT0gJ2J1bmRsZS1h
bGwnOgotICAgICAgICAgICAgaWYgYmluYXJ5X3RvX3dyYXAgIT0gImpzYyI6Ci0gICAgICAgICAg
ICAgICAgZm9yIHZhciBpbiBbJ1dFQl9QUk9DRVNTX0NNRF9QUkVGSVgnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdQTFVHSU5fUFJPQ0VTU19DTURfUFJFRklYJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnTkVUV09SS19QUk9DRVNTX0NNRF9QUkVGSVgnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdHUFVfUFJPQ0VTU19DTURfUFJFRklYJ106Ci0gICAgICAgICAg
ICAgICAgICAgIHZhcmlhYmxlc1t2YXJdID0gIiR7JXN9IiAlIHNlbGYuX2J1bmRsZXIuVkFSX0lO
VEVSUFJFVEVSCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpbnRlcnByZXRlciA9IE5vbmUK
KyAgICAgICAgICAgIHZhcmlhYmxlc1tnc3RfdmFyXSA9ICckeyVzfS9zeXMvbGliL2dzdCcgJSBt
eWRpcgorICAgICAgICAgICAgdmFyaWFibGVzWydHU1RfUkVHSVNUUllfMV8wJ10gPSAnJHslc30v
c3lzL2xpYi9nc3QvZ3N0cmVhbWVyLTEuMC5yZWdpc3RyeScgJSBteWRpcgorICAgICAgICAgICAg
aWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGJpbl9kaXIsICdnc3QtcGx1Z2luLXNjYW5u
ZXInKSk6CisgICAgICAgICAgICAgICAgdmFyaWFibGVzWydHU1RfUExVR0lOX1NDQU5ORVInXSA9
ICckeyVzfS9iaW4vZ3N0LXBsdWdpbi1zY2FubmVyJyAlIG15ZGlyCisgICAgICAgICAgICAjIHBp
cGV3aXJlIHNwYSBwbHVnaW5zIG1heSBiZSBuZWVkZWQgYnkgZ3N0cmVhbWVyLXBpcGV3aXJlCisg
ICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihzeXNsaWJfZGlyLCAncGlw
ZXdpcmUnKSk6CisgICAgICAgICAgICAgICAgdmFyaWFibGVzWydTUEFfUExVR0lOX0RJUiddID0g
JyR7JXN9L3N5cy9saWIvcGlwZXdpcmUnICUgbXlkaXIKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rp
cihvcy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2RyaScpKToKKyAgICAgICAgICAgIHZhcmlhYmxl
c1snTElCR0xfRFJJVkVSU19QQVRIJ10gPSAnJHslc30vc3lzL2xpYi9kcmknICUgbXlkaXIKKyAg
ICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2dsdm5kL2Vn
bF92ZW5kb3IuZCcpKToKKyAgICAgICAgICAgIHZhcmlhYmxlc1snX19FR0xfVkVORE9SX0xJQlJB
UllfRElSUyddID0gJyR7JXN9L3N5cy9saWIvZ2x2bmQvZWdsX3ZlbmRvci5kJyAlIG15ZGlyCisg
ICAgICAgIGlmIG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHNoYXJlX2RpcikpOgorICAgICAg
ICAgICAgYXNzZXJ0KHNlbGYuX3N5c2xpYnMgPT0gJ2J1bmRsZS1hbGwnKQorICAgICAgICAgICAg
dmFyaWFibGVzWydYREdfREFUQV9IT01FJ10gPSAnJHslc30vc3lzL3NoYXJlJyAlIG15ZGlyCisg
ICAgICAgICAgICB2YXJpYWJsZXNbJ1hER19EQVRBX0RJUlMnXSA9ICckeyVzfS9zeXMvc2hhcmUn
ICUgbXlkaXIKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc2hhcmVfZGly
LCAnZm9udHMnKSk6CisgICAgICAgICAgICB2YXJpYWJsZXNbJ0ZPTlRDT05GSUdfUEFUSCddID0g
JyR7JXN9L3N5cy9zaGFyZS9mb250cy9jb25maWcnICUgbXlkaXIKKyAgICAgICAgaWYgb3MucGF0
aC5pc2Rpcihvcy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2d0aycpKToKKyAgICAgICAgICAgIHZh
cmlhYmxlc1snR1RLX1BBVEgnXSA9ICckeyVzfS9zeXMvbGliL2d0aycgJSBteWRpcgorICAgICAg
ICBpZiBiaW5hcnlfdG9fd3JhcCAhPSAnanNjJzoKKyAgICAgICAgICAgIHZhcmlhYmxlc1snV0VC
S0lUX0VYRUNfUEFUSCddID0gJyR7JXN9L2JpbicgJSBteWRpcgorICAgICAgICAgICAgdmFyaWFi
bGVzWydXRUJLSVRfSU5KRUNURURfQlVORExFX1BBVEgnXSA9ICckeyVzfS9saWInICUgbXlkaXIK
ICAgICAgICAgc2VsZi5fYnVuZGxlci5nZW5lcmF0ZV93cmFwcGVyX3NjcmlwdChpbnRlcnByZXRl
ciwgYmluYXJ5X3RvX3dyYXAsIHZhcmlhYmxlcykKICAgICAgICAgc2VsZi5fd3JhcHBlcl9zY3Jp
cHRzLmFwcGVuZChiaW5hcnlfdG9fd3JhcCkKIApAQCAtMjUyLDkgKzMxNiwxOCBAQCBjbGFzcyBC
dW5kbGVDcmVhdG9yKG9iamVjdCk6CiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2VsZi5fdG1w
ZGlyKToKICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5fdG1wZGlyKQogCisgICAgZGVm
IF90b3VjaF9yZXNldF9tdGltZShzZWxmKToKKyAgICAgICAgX2xvZy5pbmZvKCdVcGRhdGUgdGlt
ZXN0YW1wcyAodG91Y2gpJykKKyAgICAgICAgbm93ID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCku
dGltZXN0YW1wKCkKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc2Vs
Zi5fdG1wZGlyKToKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAg
ICAgIG9zLnV0aW1lKG9zLnBhdGguam9pbihyb290LCBuYW1lKSwgdGltZXM9KG5vdywgbm93KSkK
KyAgICAgICAgICAgIGZvciBuYW1lIGluIGRpcnM6CisgICAgICAgICAgICAgICAgb3MudXRpbWUo
b3MucGF0aC5qb2luKHJvb3QsIG5hbWUpLCB0aW1lcz0obm93LCBub3cpKQorCiAgICAgZGVmIGNy
ZWF0ZShzZWxmKToKICAgICAgICAgc2VsZi5fdG1wZGlyID0gc2VsZi5fY3JlYXRlX3RlbXBkaXIo
c2VsZi5fYnVpbGRwYXRoKQotICAgICAgICBzZWxmLl9idW5kbGVyID0gQmluYXJ5QnVuZGxlcihz
ZWxmLl90bXBkaXIsIHNlbGYuX3Nob3VsZF9zdHJpcF9vYmplY3RzKQorICAgICAgICBzZWxmLl9i
dW5kbGVyID0gQmluYXJ5QnVuZGxlcihzZWxmLl90bXBkaXIsIHNlbGYuX2J1aWxkcGF0aCkKIAog
ICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzZWxmLl9idW5kbGVfZmlsZV9wYXRoKToKICAgICAg
ICAgICAgIF9sb2cuaW5mbygnUmVtb3ZpbmcgcHJldmlvdXMgYnVuZGxlICVzJyAlIHNlbGYuX2J1
bmRsZV9maWxlX3BhdGgpCkBAIC0yNjQsNiArMzM3LDkgQEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihv
YmplY3QpOgogICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2J1bmRsZShidW5kbGVfYmluYXJ5KQog
ICAgICAgICBzZWxmLl9nZW5lcmF0ZV9yZWFkbWUoKQogCisgICAgICAgICMgUG90ZW50aWFsbHkg
YXZvaWRzIGVycm9ycyByZWxhdGVkIHRvIFpJUCBub3QgYWJsZSB0byBzdG9yZSBtdGltZXMgb2xk
ZXIgdGhhbiAxOTgwCisgICAgICAgIHNlbGYuX3RvdWNoX3Jlc2V0X210aW1lKCkKKwogICAgICAg
ICBpZiBzZWxmLl9jb21wcmVzc2lvbl90eXBlID09ICd6aXAnOgogICAgICAgICAgICAgYXJjaGl2
ZXIgPSBaaXBBcmNoaXZlcihzZWxmLl9idW5kbGVfZmlsZV9wYXRoKQogICAgICAgICBlbGlmIHNl
bGYuX2NvbXByZXNzaW9uX3R5cGUgPT0gJ3Rhci54eic6CkBAIC0yNzcsNyArMzUzLDYgQEAgY2xh
c3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICBfbG9nLmxvZyhMT0dfTUVTU0FHRSwg
J0J1bmRsZSBmaWxlIGNyZWF0ZWQgYXQ6ICVzJyAlIHNlbGYuX2J1bmRsZV9maWxlX3BhdGgpCiAg
ICAgICAgIHJldHVybiBzZWxmLl9idW5kbGVfZmlsZV9wYXRoCiAKLQogICAgIGRlZiBfZ2V0X3dl
YmtpdF9iaW5hcmllcyhzZWxmKToKICAgICAgICAgd2Via2l0X2JpbmFyaWVzID0gW10KICAgICAg
ICAgYmluX2RpciA9IG9zLnBhdGguam9pbihzZWxmLl9idWlsZHBhdGgsICdiaW4nKQpAQCAtMjkw
LDE5ICszNjUsMTggQEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICAgICAg
cmFpc2UgUnVudGltZUVycm9yKCdDb3VsZCBub3QgZmluZCByZXF1aXJlZCBXZWJLaXQgUHJvY2Vz
cyBiaW5hcmllcy4gQ2hlY2sgaWYgeW91IGFyZSBwYXNzaW5nIHRoZSByaWdodCBwbGF0Zm9ybSB2
YWx1ZS4nKQogICAgICAgICByZXR1cm4gd2Via2l0X2JpbmFyaWVzCiAKLQotICAgIGRlZiBfZ2V0
X3dlYmtpdF9idW5kbGVsaWIoc2VsZik6CisgICAgZGVmIF9nZXRfd2Via2l0X2xpYihzZWxmLCBu
YW1lKToKKyAgICAgICAgbGlia2V5bmFtZSA9IG5hbWUubG93ZXIoKQogICAgICAgICBsaWJfZGly
ID0gb3MucGF0aC5qb2luKHNlbGYuX2J1aWxkcGF0aCwgJ2xpYicpCiAgICAgICAgIGJ1bmRsZV9s
aWIgPSBOb25lCiAgICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKGxpYl9kaXIpOgotICAg
ICAgICAgICAgaWYgZW50cnkuZW5kc3dpdGgoJy5zbycpIGFuZCAnaW5qZWN0ZWRidW5kbGUnIGlu
IGVudHJ5Lmxvd2VyKCkgYW5kICd0ZXN0JyBub3QgaW4gZW50cnkubG93ZXIoKToKKyAgICAgICAg
ICAgIGlmIGVudHJ5LmVuZHN3aXRoKCcuc28nKSBhbmQgbGlia2V5bmFtZSBpbiBlbnRyeS5sb3dl
cigpIGFuZCAndGVzdCcgbm90IGluIGVudHJ5Lmxvd2VyKCk6CiAgICAgICAgICAgICAgICAgYXNz
ZXJ0KGJ1bmRsZV9saWIgPT0gTm9uZSkKICAgICAgICAgICAgICAgICBidW5kbGVfbGliID0gb3Mu
cGF0aC5qb2luKGxpYl9kaXIsIGVudHJ5KQogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAg
IGFzc2VydChidW5kbGVfbGliKQogICAgICAgICByZXR1cm4gYnVuZGxlX2xpYgogCi0KICAgICBk
ZWYgX2NyZWF0ZV9hcmNoaXZlKHNlbGYsIGFyY2hpdmVyKToKICAgICAgICAgX2xvZy5pbmZvKCdD
cmVhdGUgYXJjaGl2ZScpCiAgICAgICAgIHdpdGggYXJjaGl2ZXI6CkBAIC0zMzEsNDIgKzQwNSwx
MzYgQEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICBfbG9nLmluZm8oJ0Fk
ZCBkZXBlbmRlbmN5IG9uIHN5c3RlbSBwYWNrYWdlIFslc106ICVzJyAlKHBhY2thZ2UsIG9iamVj
dCkpCiAgICAgICAgIHJldHVybiBwYWNrYWdlCiAKLQotICAgIGRlZiBfZ2V0X2dpb19tb2R1bGVz
KHNlbGYpOgotICAgICAgICBnaW9fbW9kdWxlcyA9IFtdCi0gICAgICAgIHJldGNvZGUsIHN0ZG91
dCwgc3RkZXJyID0gc2VsZi5fcnVuX2NtZF9hbmRfZ2V0X291dHB1dChbJ3BrZy1jb25maWcnLCAn
LS12YXJpYWJsZT1naW9tb2R1bGVkaXInLCAnZ2lvLTIuMCddKQorICAgIGRlZiBfZ2V0X3BrZ19j
b25maWdfdmFyKHNlbGYsIG1vZHVsZSwgdmFyX25hbWUsIGFzc2VydF92YWx1ZT1UcnVlKToKKyAg
ICAgICAgcmV0Y29kZSwgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLl9ydW5fY21kX2FuZF9nZXRfb3V0
cHV0KFsncGtnLWNvbmZpZycsICctLXZhcmlhYmxlPSVzJyAlIHZhcl9uYW1lLCBtb2R1bGVdKQog
ICAgICAgICBpZiByZXRjb2RlICE9IDA6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3Io
J1RoZSBwa2ctY29uZmlnIGNvbW1hbmQgcmV0dXJuZWQgc3RhdHVzICVkJyAlIHJldGNvZGUpCi0g
ICAgICAgIGdpb19tb2R1bGVfZGlyID0gc3Rkb3V0LnN0cmlwKCkKLSAgICAgICAgaWYgbm90IG9z
LnBhdGguaXNkaXIoZ2lvX21vZHVsZV9kaXIpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVy
cm9yKCdUaGUgcGtnLWNvbmZpZyBlbnRyeSBmb3IgZ2lvbW9kdWxlZGlyIGlzIG5vdCBhIGRpcmVj
dG9yeTogJXMnICUgZ2lvX21vZHVsZV9kaXIpCi0gICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0
ZGlyKGdpb19tb2R1bGVfZGlyKToKLSAgICAgICAgICAgIGlmIGVudHJ5LmVuZHN3aXRoKCcuc28n
KToKLSAgICAgICAgICAgICAgICBnaW9fbW9kdWxlcy5hcHBlbmQob3MucGF0aC5qb2luKGdpb19t
b2R1bGVfZGlyLCBlbnRyeSkpCi0gICAgICAgIHJldHVybiBnaW9fbW9kdWxlcworICAgICAgICB2
YXJfdmFsdWUgPSBzdGRvdXQuc3RyaXAoKQorICAgICAgICBpZiBhc3NlcnRfdmFsdWU6CisgICAg
ICAgICAgICBpZiB2YXJfbmFtZS5lbmRzd2l0aCgnZGlyJykgYW5kIG5vdCBvcy5wYXRoLmlzZGly
KHZhcl92YWx1ZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgcGtn
LWNvbmZpZyBlbnRyeSBmb3IgJXMgaXMgbm90IGEgZGlyZWN0b3J5OiAlcycgJSAodmFyX25hbWUs
IHZhcl92YWx1ZSkpCisgICAgICAgICAgICBpZiBsZW4odmFyX3ZhbHVlKSA9PSAwOgorICAgICAg
ICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVGhlIHBrZy1jb25maWcgZW50cnkgZm9yICVz
IGhhcyB6ZXJvIGxlbmdodCcgJSB2YXJfdmFsdWUpCisgICAgICAgIHJldHVybiB2YXJfdmFsdWUK
KworICAgIGRlZiBfbGlzdF9maWxlc19kaXJlY3Rvcnkoc2VsZiwgZGlyZWN0b3J5LCBsaXN0X2lu
c2lkZV9zdWJkaXJzPUZhbHNlLCBmaWx0ZXJfc3VmZml4PU5vbmUpOgorICAgICAgICBmb3VuZF9m
aWxlcyA9IFtdCisgICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKGRpcmVjdG9yeSk6Cisg
ICAgICAgICAgICBlbnRyeV9wYXRoID0gb3MucGF0aC5qb2luKGRpcmVjdG9yeSwgZW50cnkpCisg
ICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGVudHJ5X3BhdGgpOgorICAgICAgICAgICAgICAg
IGlmIGxpc3RfaW5zaWRlX3N1YmRpcnM6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2ZpbGVz
LmV4dGVuZChzZWxmLl9saXN0X2ZpbGVzX2RpcmVjdG9yeShlbnRyeV9wYXRoLCBsaXN0X2luc2lk
ZV9zdWJkaXJzLCBmaWx0ZXJfc3VmZml4KSkKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2Zp
bGUoZW50cnlfcGF0aCk6CisgICAgICAgICAgICAgICAgaWYgZmlsdGVyX3N1ZmZpeCBpcyBOb25l
IG9yIGVudHJ5X3BhdGguZW5kc3dpdGgoZmlsdGVyX3N1ZmZpeCk6CisgICAgICAgICAgICAgICAg
ICAgIGZvdW5kX2ZpbGVzLmFwcGVuZChlbnRyeV9wYXRoKQorICAgICAgICBpZiBsZW4oZm91bmRf
ZmlsZXMpID09IDA6CisgICAgICAgICAgICByYWlzZSBSdW5UaW1lRXJyb3IoJ0NhbiBub3QgZmlu
ZCBhbnkgbWF0Y2hpbmcgZmlsZSBhdCBkaXJlY3RvcnkgJXMnICUgZGlyZWN0b3J5KQorICAgICAg
ICByZXR1cm4gZm91bmRfZmlsZXMKIAotICAgIGRlZiBfZ2V0X2dzdHJlYW1lcl9tb2R1bGVzKHNl
bGYpOgotICAgICAgICBnc3RyZWFtZXJfcGx1Z2lucyA9IFtdCi0gICAgICAgIHJldGNvZGUsIHN0
ZG91dCwgc3RkZXJyID0gc2VsZi5fcnVuX2NtZF9hbmRfZ2V0X291dHB1dChbJ3BrZy1jb25maWcn
LCAnLS12YXJpYWJsZT1wbHVnaW5zZGlyJywgJ2dzdHJlYW1lci0xLjAnXSkKLSAgICAgICAgaWYg
cmV0Y29kZSAhPSAwOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgcGtnLWNv
bmZpZyBjb21tYW5kIHJldHVybmVkIHN0YXR1cyAlZCcgJSByZXRjb2RlKQotICAgICAgICBnc3Ry
YW1lcl9wbHVnaW5zX2RpciA9IHN0ZG91dC5zdHJpcCgpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRo
LmlzZGlyKGdzdHJhbWVyX3BsdWdpbnNfZGlyKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVF
cnJvcignVGhlIHBrZy1jb25maWcgZW50cnkgZm9yIHBsdWdpbnNkaXIgaXMgbm90IGEgZGlyZWN0
b3J5OiAlcycgJSBnc3RyYW1lcl9wbHVnaW5zX2RpcikKLSAgICAgICAgZm9yIGVudHJ5IGluIG9z
Lmxpc3RkaXIoZ3N0cmFtZXJfcGx1Z2luc19kaXIpOgotICAgICAgICAgICAgaWYgZW50cnkuZW5k
c3dpdGgoJy5zbycpOgotICAgICAgICAgICAgICAgIGdzdHJlYW1lcl9wbHVnaW5zLmFwcGVuZChv
cy5wYXRoLmpvaW4oZ3N0cmFtZXJfcGx1Z2luc19kaXIsIGVudHJ5KSkKLSAgICAgICAgcmV0dXJu
IGdzdHJlYW1lcl9wbHVnaW5zCisgICAgZGVmIF9nZXRfZ2lvX21vZHVsZXMoc2VsZik6CisgICAg
ICAgIGdpb19tb2R1bGVfZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdnaW8tMi4wJywg
J2dpb21vZHVsZWRpcicpCisgICAgICAgIHJldHVybiBzZWxmLl9saXN0X2ZpbGVzX2RpcmVjdG9y
eShnaW9fbW9kdWxlX2RpciwgZmlsdGVyX3N1ZmZpeD0nLnNvJykKIAorICAgIGRlZiBfZ2V0X2d0
a19tb2R1bGVzKHNlbGYsIHN1YmRpcik6CisgICAgICAgIGd0a19saWJfZGlyID0gc2VsZi5fZ2V0
X3BrZ19jb25maWdfdmFyKCdndGsrLTMuMCcsICdsaWJkaXInKQorICAgICAgICBndGtfYmluYXJ5
X3ZlcnNpb24gPSBzZWxmLl9nZXRfcGtnX2NvbmZpZ192YXIoJ2d0aystMy4wJywgJ2d0a19iaW5h
cnlfdmVyc2lvbicpCisgICAgICAgIGd0a19tb2R1bGVfZGlyID0gb3MucGF0aC5qb2luKGd0a19s
aWJfZGlyLCAnZ3RrLTMuMCcsIGd0a19iaW5hcnlfdmVyc2lvbiwgc3ViZGlyKQorICAgICAgICBp
ZiBub3Qgb3MucGF0aC5pc2RpcihndGtfbW9kdWxlX2Rpcik6CisgICAgICAgICAgICByYWlzZSBS
dW50aW1lRXJyb3IoJ0NhbiBub3QgZmluZCB0aGUgdGhlIGd0ayBtb2R1bGUgZGlyICVzJyAlIGd0
a19tb2R1bGVfZGlyKQorICAgICAgICByZXR1cm4gc2VsZi5fbGlzdF9maWxlc19kaXJlY3Rvcnko
Z3RrX21vZHVsZV9kaXIsIGZpbHRlcl9zdWZmaXg9Jy5zbycpCisKKyAgICBkZWYgX2dldF9nc3Ry
ZWFtZXJfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgZ3N0cmVhbWVyX3BsdWdpbnNfZGlyID0gc2Vs
Zi5fZ2V0X3BrZ19jb25maWdfdmFyKCdnc3RyZWFtZXItMS4wJywgJ3BsdWdpbnNkaXInKQorICAg
ICAgICByZXR1cm4gc2VsZi5fbGlzdF9maWxlc19kaXJlY3RvcnkoZ3N0cmVhbWVyX3BsdWdpbnNf
ZGlyLCBmaWx0ZXJfc3VmZml4PScuc28nKQorCisgICAgZGVmIF9nZXRfZ3N0cmVhbWVyX3BsdWdp
bl9zY2FubmVyKHNlbGYpOgorICAgICAgICBkZWYgcGx1Z2luX3NjYW5uZXJfZm91bmQocGx1Z2lu
X3NjYW5uZXJfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4gKG9zLnBhdGguaXNmaWxlKHBsdWdp
bl9zY2FubmVyX3BhdGgpIGFuZCBvcy5hY2Nlc3MocGx1Z2luX3NjYW5uZXJfcGF0aCwgb3MuWF9P
SykpCisKKyAgICAgICAgZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVyX2RpciA9IGdpb19tb2R1bGVf
ZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdnc3RyZWFtZXItMS4wJywgJ3BsdWdpbnNj
YW5uZXJkaXInLCBhc3NlcnRfdmFsdWU9RmFsc2UpCisgICAgICAgIGdzdHJlYW1lcl9wbHVnaW5f
c2Nhbm5lciA9IG9zLnBhdGguam9pbihnc3RyZWFtZXJfcGx1Z2luX3NjYW5uZXJfZGlyLCAnZ3N0
LXBsdWdpbi1zY2FubmVyJykKKyAgICAgICAgaWYgbm90IHBsdWdpbl9zY2FubmVyX2ZvdW5kKGdz
dHJlYW1lcl9wbHVnaW5fc2Nhbm5lcik6CisgICAgICAgICAgICAjIHBsdWdpbnNjYW5uZXJkaXIg
cGtnLWNvbmZpZyB2YXJpYWJsZSBpcyBhdmFpbGFibGUgb25seSBvbiByZWNlbnQgdmVyc2lvbnMg
b2YgZ3N0CisgICAgICAgICAgICAjIGdpdmUgaXQgYSBzZWNvbmQgY2hhbmNlIHdpdGggc29tZSBr
bm93biBkaXJlY3RvcmllcyBvbiBkZWJpYW4vdWJ1bnR1IGFuZCBmZWRvcmEvY2VudG9zCisgICAg
ICAgICAgICBsaWJfZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdnc3RyZWFtZXItMS4w
JywgJ2xpYmRpcicpCisgICAgICAgICAgICBwbHVnaW5zX2RpciA9IHNlbGYuX2dldF9wa2dfY29u
ZmlnX3ZhcignZ3N0cmVhbWVyLTEuMCcsICdwbHVnaW5zZGlyJykKKyAgICAgICAgICAgIGZvciBn
c3RyZWFtZXJfcGx1Z2luX3NjYW5uZXJfZGlyIGluIFsgb3MucGF0aC5qb2luKGxpYl9kaXIsICdn
c3RyZWFtZXIxLjAvZ3N0cmVhbWVyLTEuMCcpLCBwbHVnaW5zX2RpciwgJy91c3IvbGliZXhlYy9n
c3RyZWFtZXItMS4wJ106CisgICAgICAgICAgICAgICAgZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVy
ID0gb3MucGF0aC5qb2luKGdzdHJlYW1lcl9wbHVnaW5fc2Nhbm5lcl9kaXIsICdnc3QtcGx1Z2lu
LXNjYW5uZXInKQorICAgICAgICAgICAgICAgIGlmIHBsdWdpbl9zY2FubmVyX2ZvdW5kKGdzdHJl
YW1lcl9wbHVnaW5fc2Nhbm5lcik6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAg
IGlmIG5vdCBwbHVnaW5fc2Nhbm5lcl9mb3VuZChnc3RyZWFtZXJfcGx1Z2luX3NjYW5uZXIpOgor
ICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDb3VsZCBub3QgZmluZCBnc3QtcGx1Z2lu
LXNjYW5uZXIgYmluYXJ5IGF0IHBhdGggIiVzIi4nICUgZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVy
KQorICAgICAgICByZXR1cm4gZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVyCisKKyAgICBkZWYgX2dl
dF9leHRyYV9zeXN0ZW1fbGlicmFyaWVzKHNlbGYpOgorICAgICAgICBleHRyYV9saWJyYXJpZXMg
PSBbXQorICAgICAgICBsaWJfZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdkcmknLCAn
bGliZGlyJykKKyAgICAgICAgZm9yIGVudHJ5IGluIG9zLmxpc3RkaXIobGliX2Rpcik6CisgICAg
ICAgICAgICAjIG5lZWQgdG8gYWRkIG1vcmUgbGliYyBsaWJyYXJpZXMKKyAgICAgICAgICAgICMg
YWxzbyBuZWVkIHRvIGFkZCBtYXliZSBnY29uZiBDIGxpYnJhcnkgcGx1Z2lucworICAgICAgICAg
ICAgbGliY19saWJyYXJ5X25hbWVzID0gWydsaWJCcm9rZW5Mb2NhbGUtMi4yOC5zbycsICdsaWJT
ZWdGYXVsdC5zbycsICdsaWJhbmwtMi4yOC5zbycsICdsaWJjLTIuMjguc28nLCAnbGliY3J5cHQt
Mi4yOC5zbycsICdsaWJkbC0yLjI4LnNvJywgJ2xpYm0tMi4yOC5zbycsICdsaWJtZW11c2FnZS5z
bycsICdsaWJtdmVjLTIuMjguc28nLCAnbGlibnNsLTIuMjguc28nLCAgJ2xpYnBjcHJvZmlsZS5z
bycsICdsaWJwdGhyZWFkLTIuMjguc28nLCAnbGlicmVzb2x2LTIuMjguc28nLCAnbGlicnQtMi4y
OC5zbycsICdsaWJ0aHJlYWRfZGItMS4wLnNvJywgJ2xpYnV0aWwtMi4yOC5zbycsICdzb3RydXNz
LWxpYi5zbycsICdsaWJCcm9rZW5Mb2NhbGUuc28uMScsICdsaWJhbmwuc28uMScsICdsaWJjLnNv
LjYnLCAnbGliY3J5cHQuc28uMScsICdsaWJkbC5zby4yJywgJ2xpYm0uc28uNicsICdsaWJtdmVj
LnNvLjEnLCAnbGlibnNsLnNvLjEnLCAnbGlicHRocmVhZC5zby4wJywgJ2xpYnJlc29sdi5zby4y
JywgJ2xpYnJ0LnNvLjEnLCAnbGlidGhyZWFkX2RiLnNvLjEnLCAnbGlidXRpbC5zby4xJ10KKyAg
ICAgICAgICAgICMgZm91bmQgaW4gc3RyYWNlIG91dHB1dC4uIG5vdCBzdXJlIHdoeSB0aGlzIGlz
IG5vdCBkZXRlY3RlZCwgbWF5YmUgcmVsYXRlZCB3aXRoIGdkay1waXhidWYgbG9hZGVycworICAg
ICAgICAgICAgb3RoZXJfZXh0cmFfbGlicmFyeV9uYW1lcyA9IFsnbGlicnN2Zy0yLnNvLjInLCAn
bGliY3JvY28tMC42LnNvLjMnXQorICAgICAgICAgICAgaWYgZW50cnkgaW4gb3RoZXJfZXh0cmFf
bGlicmFyeV9uYW1lcyBvciBlbnRyeSBpbiBsaWJjX2xpYnJhcnlfbmFtZXMgb3IgKGVudHJ5LnN0
YXJ0c3dpdGgoJ2xpYm5zc18nKSBhbmQgJy5zby4nIGluIGVudHJ5IGFuZCAxID09IGxlbihlbnRy
eS5zcGxpdCgnLnNvLicpWzFdKSk6CisgICAgICAgICAgICAgICAgZXh0cmFfbGliX3BhdGggPSBv
cy5wYXRoLmpvaW4obGliX2RpciwgZW50cnkpCisgICAgICAgICAgICAgICAgZXh0cmFfbGlicmFy
aWVzLmFwcGVuZChleHRyYV9saWJfcGF0aCkKKyAgICAgICAgcmV0dXJuIGV4dHJhX2xpYnJhcmll
cworCisgICAgZGVmIF9nZXRfbWVzYV9saWJyYXJpZXMoc2VsZik6CisgICAgICAgIG1lc2FfbGli
cmFyaWVzID0gW10KKyAgICAgICAgbGliX2Rpcl9kcmkgPSBzZWxmLl9nZXRfcGtnX2NvbmZpZ192
YXIoJ2RyaScsICdsaWJkaXInKQorICAgICAgICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIGZsYXRw
YWsgU0RLIHNoaXBzIHRoZSBNZXNhIGxpYnJhcmllcyBpbnRvIGEgbm9uLXN0YW5kYXJkIHBhdGgu
CisgICAgICAgIGNhbmRpZGF0ZV9saWJfZGlycyA9IFsgbGliX2Rpcl9kcmksIG9zLnBhdGguam9p
bihsaWJfZGlyX2RyaSwgJ0dML2RlZmF1bHQvbGliJykgXQorICAgICAgICBmb3IgbGliX2RpciBp
biBjYW5kaWRhdGVfbGliX2RpcnM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGxpYl9k
aXIpOgorICAgICAgICAgICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKGxpYl9kaXIpOgor
ICAgICAgICAgICAgICAgICAgICBpZiBlbnRyeSBpbiBbJ2xpYmdsYXBpLnNvLjAnLCAnbGlieGNi
LWdseC5zby4wJywgJ2xpYkdMWC5zby4wJywgJ2xpYkVHTC5zby4xJywgJ2xpYkdMLnNvLjEnLCAn
bGliR0xFU3YyLnNvLjInXSBvciBlbnRyeS5lbmRzd2l0aCgnX21lc2Euc28uMCcpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgbWVzYV9saWJfcGF0aCA9IG9zLnBhdGguam9pbihsaWJfZGlyLCBl
bnRyeSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc2FfbGlicmFyaWVzLmFwcGVuZChtZXNh
X2xpYl9wYXRoKQorICAgICAgICByZXR1cm4gbWVzYV9saWJyYXJpZXMKKworICAgIGRlZiBfZ2V0
X21lc2FfZHJpX2RyaXZlcnMoc2VsZik6CisgICAgICAgIGRyaWRyaXZlcl9kaXIgPSBzZWxmLl9n
ZXRfcGtnX2NvbmZpZ192YXIoJ2RyaScsICdkcmlkcml2ZXJkaXInKQorICAgICAgICByZXR1cm4g
c2VsZi5fbGlzdF9maWxlc19kaXJlY3RvcnkoZHJpZHJpdmVyX2RpciwgZmlsdGVyX3N1ZmZpeD0n
LnNvJykKKworICAgIGRlZiBfZ2V0X2dka19waXhidWZfbG9hZGVycyhzZWxmKToKKyAgICAgICAg
bG9hZGVyc19kaXIgPSBzZWxmLl9nZXRfcGtnX2NvbmZpZ192YXIoJ2dkay1waXhidWYtMi4wJywg
J2dka19waXhidWZfbW9kdWxlZGlyJykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpc3RfZmlsZXNf
ZGlyZWN0b3J5KGxvYWRlcnNfZGlyLCBmaWx0ZXJfc3VmZml4PScuc28nKQorCisgICAgZGVmIF9n
ZXRfZ2RrX3F1ZXJ5X2xvYWRlcnNfYmluYXJ5KHNlbGYpOgorICAgICAgICBnZGtfcGl4YnVmX3F1
ZXJ5X2xvYWRlcl92YWx1ZSA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3ZhcignZ2RrLXBpeGJ1Zi0y
LjAnLCAnZ2RrX3BpeGJ1Zl9xdWVyeV9sb2FkZXJzJykKKyAgICAgICAgZ2RrX3BpeGJ1Zl9saWJk
aXIgPSBzZWxmLl9nZXRfcGtnX2NvbmZpZ192YXIoJ2dkay1waXhidWYtMi4wJywgJ2xpYmRpcicp
CisgICAgICAgICMgU29tZSBkaXN0cm9zIChsaWtlIERlYmlhbikgZG9uJ3Qgc2hpcCB0aGUgYmlu
YXJ5IG9uIHRoZSBkZWNsYXJlZCBwYXRoIG9uIHBrZy1jb25maWcsIGJ1dCBpbnNpZGUgJGxpYmRp
ci9nZGstcGl4YnVmLTIuMAorICAgICAgICBmb3IgZ2RrX3BpeGJ1Zl9iaW5hcnkgIGluIFsgZ2Rr
X3BpeGJ1Zl9xdWVyeV9sb2FkZXJfdmFsdWUsIG9zLnBhdGguam9pbihnZGtfcGl4YnVmX2xpYmRp
ciwgJ2dkay1waXhidWYtMi4wL2dkay1waXhidWYtcXVlcnktbG9hZGVycycpIF06CisgICAgICAg
ICAgICBpZiBvcy5wYXRoLmlzZmlsZShnZGtfcGl4YnVmX2JpbmFyeSkgYW5kIG9zLmFjY2Vzcyhn
ZGtfcGl4YnVmX2JpbmFyeSwgb3MuWF9PSyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdka19w
aXhidWZfYmluYXJ5CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVW5hYmxlIHRvIGZpbmQg
YSB2YWxpZCBwYXRoIHRvIGdkay1waXhidWYtcXVlcnktbG9hZGVycyBiaW5hcnknKQorCisgICAg
ZGVmIF9nZXRfZ3RrX3F1ZXJ5X2ltbW9kdWxlc19iaW5hcnkoc2VsZik6CisgICAgICAgIGd0a19s
aWJkaXIgPSBzZWxmLl9nZXRfcGtnX2NvbmZpZ192YXIoJ2d0aystMy4wJywgJ2xpYmRpcicpCisg
ICAgICAgIGZvciBndGtfZGlyIGluIFsgJy91c3IvYmluJywgZ3RrX2xpYmRpciwgb3MucGF0aC5q
b2luKGd0a19saWJkaXIsICdsaWJndGstMy0wJyksIG9zLnBhdGguam9pbihndGtfbGliZGlyLCAn
Z3RrLTMuMCcpIF06CisgICAgICAgICAgICBndGtfaW1tb2R1bGVzX2JpbmFyeSA9IG9zLnBhdGgu
am9pbihndGtfZGlyLCAnZ3RrLXF1ZXJ5LWltbW9kdWxlcy0zLjAnKQorICAgICAgICAgICAgaWYg
b3MucGF0aC5pc2ZpbGUoZ3RrX2ltbW9kdWxlc19iaW5hcnkpIGFuZCBvcy5hY2Nlc3MoZ3RrX2lt
bW9kdWxlc19iaW5hcnksIG9zLlhfT0spOgorICAgICAgICAgICAgICAgIHJldHVybiBndGtfaW1t
b2R1bGVzX2JpbmFyeQorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1VuYWJsZSB0byBmaW5k
IGEgdmFsaWQgcGF0aCB0byBnZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgYmluYXJ5JykKKworICAg
IGRlZiBfZ2V0X3BpcGV3aXJlX3NwYV9iYXNlZGlyX2FuZF9wbHVnaW5zKHNlbGYpOgorICAgICAg
ICBzcGFfcGx1Z2luX2RpciA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3ZhcignbGlic3BhLTAuMics
ICdwbHVnaW5kaXInLCBhc3NlcnRfdmFsdWU9RmFsc2UpCisgICAgICAgICMgQ3VycmVudGx5IHRo
ZSBmbGF0cGFrIFNESyBkb2Vzbid0IGRlY2xhcmUgcGx1Z2luZGlyIChub3Qgc3VyZSB3aHkpLi4g
ZmFsbGJhY2sgdG8gYnVpbGQgaXQgZnJvbSBsaWJkaXIKKyAgICAgICAgaWYgbm90IG9zLnBhdGgu
aXNkaXIoc3BhX3BsdWdpbl9kaXIpOgorICAgICAgICAgICAgc3BhX3BsdWdpbl9kaXIgPSBzZWxm
Ll9nZXRfcGtnX2NvbmZpZ192YXIoJ2xpYnNwYS0wLjInLCAnbGliZGlyJykKKyAgICAgICAgICAg
IHNwYV9wbHVnaW5fZGlyID0gb3MucGF0aC5qb2luKHNwYV9wbHVnaW5fZGlyLCAnc3BhLTAuMicp
CisgICAgICAgIHBpcGV3aXJlX3NwYV9wbHVnaW5zID0gc2VsZi5fbGlzdF9maWxlc19kaXJlY3Rv
cnkoc3BhX3BsdWdpbl9kaXIsIGxpc3RfaW5zaWRlX3N1YmRpcnM9VHJ1ZSwgZmlsdGVyX3N1ZmZp
eD0nLnNvJykKKyAgICAgICAgcmV0dXJuIHNwYV9wbHVnaW5fZGlyLCBwaXBld2lyZV9zcGFfcGx1
Z2lucwogCiAgICAgZGVmIF9hZGRfb2JqZWN0X29yX2dldF9zeXNkZXAoc2VsZiwgb2JqZWN0LCBv
YmplY3RfdHlwZSk6CiAgICAgICAgIHByb3ZpZGVkX2J5X3N5c3RlbV9wYWNrYWdlID0gTm9uZQog
ICAgICAgICBpZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKLSAgICAgICAgICAgIHNl
bGYuX2J1bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRoKG9iamVjdCwgdHlwZT1vYmplY3RfdHlw
ZSkKKyAgICAgICAgICAgIHNlbGYuX2J1bmRsZXIuY29weV9hbmRfbWF5YmVfc3RyaXBfcGF0Y2hl
bGYob2JqZWN0LCB0eXBlPW9iamVjdF90eXBlLCBzdHJpcD1zZWxmLl9zaG91bGRfc3RyaXBfb2Jq
ZWN0cywgcGF0Y2hlbGZfcmVtb3ZlcnBhdGg9VHJ1ZSwgcGF0Y2hlbGZfbm9kZWZhdWx0bGliPVRy
dWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwcm92aWRlZF9ieV9zeXN0ZW1fcGFja2Fn
ZSA9IHNlbGYuX2dldF9zeXN0ZW1fcGFja2FnZV9uYW1lKG9iamVjdCkKICAgICAgICAgICAgIGlm
IG5vdCBwcm92aWRlZF9ieV9zeXN0ZW1fcGFja2FnZToKLSAgICAgICAgICAgICAgICBzZWxmLl9i
dW5kbGVyLmNvcHlfYW5kX3JlbW92ZV9ycGF0aChvYmplY3QsIHR5cGU9b2JqZWN0X3R5cGUpCisg
ICAgICAgICAgICAgICAgc2VsZi5fYnVuZGxlci5jb3B5X2FuZF9tYXliZV9zdHJpcF9wYXRjaGVs
ZihvYmplY3QsIHR5cGU9b2JqZWN0X3R5cGUsIHN0cmlwPXNlbGYuX3Nob3VsZF9zdHJpcF9vYmpl
Y3RzLCBwYXRjaGVsZl9yZW1vdmVycGF0aD1UcnVlLCBwYXRjaGVsZl9ub2RlZmF1bHRsaWI9RmFs
c2UpCiAgICAgICAgIHJldHVybiBwcm92aWRlZF9ieV9zeXN0ZW1fcGFja2FnZQogCiAgICAgZGVm
IF9lbnN1cmVfd3BlX2JhY2tlbmRfc3ltbGluayhzZWxmKToKQEAgLTM4Miw2ICs1NTAsODQgQEAg
Y2xhc3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICBvcy5zeW1s
aW5rKGVudHJ5LCB3cGVfYmFja2VuZF9zb25hbWUpCiAgICAgICAgICAgICAgICAgb3MuY2hkaXIo
cHJldmlvdXNfZGlyKQogICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBvcy5w
YXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oYnVuZGxlX2xpYl9kaXIsIHdwZV9iYWNrZW5kX3NvbmFt
ZSkpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdVbmFibGUgdG8gY3JlYXRlIGxp
YldQRUJhY2tlbmQtZmRvLTEuMC5zbyBzeW1saW5rJykKKworICAgIGRlZiBfZGxvcGVud3JhcF9t
YWtlKHNlbGYsIGFjdGlvbj1Ob25lKToKKyAgICAgICAgZGxvcGVud3JhcF9wYXRoID0gb3MucGF0
aC5qb2luKHNlbGYuX2Rsb3BlbndyYXBfZGlyLCAnZGxvcGVud3JhcC5zbycpCisgICAgICAgIHBy
ZXZpb3VzX2N3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHNlbGYuX2Rsb3Blbndy
YXBfZGlyKQorICAgICAgICBpZiBhY3Rpb24gPT0gJ2J1aWxkJzoKKyAgICAgICAgICAgIHJldGNv
ZGUsIHN0ZG91dCwgc3RkZXJyID0gc2VsZi5fcnVuX2NtZF9hbmRfZ2V0X291dHB1dChbJ21ha2Un
XSkKKyAgICAgICAgICAgIGlmIChyZXRjb2RlICE9IDApIG9yIChub3Qgb3MucGF0aC5pc2ZpbGUo
ZGxvcGVud3JhcF9wYXRoKSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdF
cnJvciBidWlsZGluZyBkbG9wZW53cmFwLnNvOiBUaGUgbWFrZSBjb21tYW5kIHJldHVybmVkICVk
IHN0YXR1cyB3aXRoIHRoaXMgb3V0cHV0OiAlcyAlcycgJSAocmV0Y29kZSwgc3Rkb3V0LCBzdGRl
cnIpKQorICAgICAgICBlbGlmIGFjdGlvbiA9PSAnY2xlYW4nOgorICAgICAgICAgICAgcmV0Y29k
ZSwgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLl9ydW5fY21kX2FuZF9nZXRfb3V0cHV0KFsnbWFrZScs
ICdjbGVhbiddKQorICAgICAgICAgICAgaWYgKHJldGNvZGUgIT0gMCkgb3Igb3MucGF0aC5pc2Zp
bGUoZGxvcGVud3JhcF9wYXRoKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3Io
J0Vycm9yIGNsZWFuaW5nIGRsb3BlbndyYXAuc286IFRoZSBtYWtlIGNvbW1hbmQgcmV0dXJuZWQg
JWQgc3RhdHVzIHdpdGggdGhpcyBvdXRwdXQ6ICVzICVzJyAlIChyZXRjb2RlLCBzdGRvdXQsIHN0
ZGVycikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yKCdVbmtub3duIGFjdGlvbiAlcycgJSBhY3Rpb24pCisgICAgICAgIG9zLmNoZGlyKHByZXZp
b3VzX2N3ZCkKKyAgICAgICAgcmV0dXJuIGRsb3BlbndyYXBfcGF0aAorCisgICAgZGVmIF9kaXNj
b3Zlcl9lZ2xfbWVzYV9jb25maWdfZmlsZShzZWxmKToKKyAgICAgICAgZWdsX2xpYmRpciA9IHNl
bGYuX2dldF9wa2dfY29uZmlnX3ZhcignZWdsJywgJ2xpYmRpcicpCisgICAgICAgICMgTm90IGtu
b3duIHdheSBvZiBnZXR0aW5nIHRoZSBkaXJlY3RvcnkgZHluYW1pY2FsbHksIGFzc3VtZSBpdCBp
cyB0aGVyZS4KKyAgICAgICAgaWNkX2VnbF9tZXNhX2NvbmZpZ19jYW5kaWRhdGVzID0gWycvdXNy
L3NoYXJlL2dsdm5kL2VnbF92ZW5kb3IuZC81MF9tZXNhLmpzb24nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihlZ2xfbGliZGlyLCAnR0wv
Z2x2bmQvZWdsX3ZlbmRvci5kLzUwX21lc2EuanNvbicpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihlZ2xfbGliZGlyLCAnZ2x2bmQvZWds
X3ZlbmRvci5kLzUwX21lc2EuanNvbicpXQorICAgICAgICBmb3IgaWNkX2VnbF9tZXNhX2NvbmZp
Z19jYW5kaWRhdGUgaW4gaWNkX2VnbF9tZXNhX2NvbmZpZ19jYW5kaWRhdGVzOgorICAgICAgICAg
ICAgaWYgb3MucGF0aC5pc2ZpbGUoaWNkX2VnbF9tZXNhX2NvbmZpZ19jYW5kaWRhdGUpOgorICAg
ICAgICAgICAgICAgIHJldHVybiBpY2RfZWdsX21lc2FfY29uZmlnX2NhbmRpZGF0ZQorICAgICAg
ICByYWlzZSBSdW50aW1lRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIG1lc2EgRUdMIElDRCBjb25maWcn
KQorCisgICAgZGVmIF9nZXRfbWVzYV9lZ2xfaWNkX2RyaXZlcl9wYXRoKHNlbGYsIGljZF9jb25m
aWcpOgorICAgICAgICB3aXRoIG9wZW4oaWNkX2NvbmZpZywgJ3InKSBhcyBmOgorICAgICAgICAg
ICAganNvbl9kYXRhID0ganNvbi5sb2FkKGYpCisgICAgICAgIGVnbF9pY2RfbGlicmFyeV9uYW1l
ID0ganNvbl9kYXRhWydJQ0QnXVsnbGlicmFyeV9wYXRoJ10KKyAgICAgICAgaWYgb3MucGF0aC5p
c2FicyhlZ2xfaWNkX2xpYnJhcnlfbmFtZSk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1l
bnRlZEVycm9yKCdQYXRoIHJld3JpdHRpbmcgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgdG8gaGFu
ZGxlIElDRCBjb25maWcgZmlsZXMgd2l0aCBhYnNwYXRoJykKKyAgICAgICAgIyBTb21lIHZlcnNp
b25zIG9mIHRoZSBmbGF0cGFrIFNESyBzaGlwcyB0aGUgRUdMIElDRCBsaWJyYXJ5IGludG8gYSBu
b24tc3RhbmRhcmQgcGF0aC4KKyAgICAgICAgZWdsX2xpYmRpciA9IHNlbGYuX2dldF9wa2dfY29u
ZmlnX3ZhcignZWdsJywgJ2xpYmRpcicpCisgICAgICAgIGVnbF9pY2RfbGlicmFyeV9mb3VuZCA9
IEZhbHNlCisgICAgICAgIGVnbF9pY2RfbGlicmFyeV9wYXRocyA9IFtvcy5wYXRoLmpvaW4oZWds
X2xpYmRpciwgZWdsX2ljZF9saWJyYXJ5X25hbWUpLCBvcy5wYXRoLmpvaW4oZWdsX2xpYmRpciwg
J0dML2RlZmF1bHQvbGliJywgZWdsX2ljZF9saWJyYXJ5X25hbWUpXQorICAgICAgICBmb3IgZWds
X2ljZF9saWJyYXJ5X3BhdGggaW4gZWdsX2ljZF9saWJyYXJ5X3BhdGhzOgorICAgICAgICAgICAg
aWYgb3MucGF0aC5pc2ZpbGUoZWdsX2ljZF9saWJyYXJ5X3BhdGgpOgorICAgICAgICAgICAgICAg
IGVnbF9pY2RfbGlicmFyeV9mb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAg
ICAgICBpZiBub3QgZWdsX2ljZF9saWJyYXJ5X2ZvdW5kOgorICAgICAgICAgICAgcmFpc2UgUnVu
dGltZUVycm9yKCdVbmFibGUgdG8gZmluZCB0aGUgRUdMIElDRCBsaWJyYXJ5ICVzJyAlIGVnbF9p
Y2RfbGlicmFyeV9wYXRoKQorICAgICAgICByZXR1cm4gZWdsX2ljZF9saWJyYXJ5X3BhdGgKKwor
ICAgIGRlZiBfZ2V0X3RvdGFsX3NpemVfZGlyKHNlbGYsIGRpcmVjdG9yeSk6CisgICAgICAgIHNp
emUgPSAwCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpcmVjdG9y
eSk6CisgICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBmaWxl
X3BhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSkKKyAgICAgICAgICAgICAgICBpZiBvcy5w
YXRoLmlzZmlsZShmaWxlX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICBzaXplICs9IG9zLnBh
dGguZ2V0c2l6ZShmaWxlX3BhdGgpCisgICAgICAgIHJldHVybiBzaXplCisKKyAgICBkZWYgX2dl
bmVyYXRlX2ZvbnRfY29uZihzZWxmLCBkYXRhX2RpcmVjdG9yeSk6CisgICAgICAgIGZvbnRfY29u
Zl9wYXRoID0gb3MucGF0aC5qb2luKGRhdGFfZGlyZWN0b3J5LCAnZm9udHMuY29uZicpCisgICAg
ICAgIHdpdGggb3Blbihmb250X2NvbmZfcGF0aCwgJ3cnKSBhcyBmb250X2NvbmZfaGFuZGxlOgor
ICAgICAgICAgICAgZm9udF9jb25mX2hhbmRsZS53cml0ZShGT05UX0NPTkZfRklMRSkKKworICAg
IGRlZiBfZ2VuZXJhdGVfdGxzX2NhZmlsZShzZWxmLCBkYXRhX2RpcmVjdG9yeSk6CisgICAgICAg
IGNhZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGRhdGFfZGlyZWN0b3J5LCAnYnVuZGxlLWNhLWNl
cnRpZmljYXRlcy5wZW0nKQorICAgICAgICByZXRjb2RlLCBzdGRvdXQsIHN0ZGVyciA9IHNlbGYu
X3J1bl9jbWRfYW5kX2dldF9vdXRwdXQoWyd0cnVzdCcsICdleHRyYWN0JywgJy0tZm9ybWF0PXBl
bS1idW5kbGUnLCBjYWZpbGVfcGF0aF0pCisgICAgICAgICMgdHJ1c3QgZmFpbHMgaW5zaWRlIGZs
YXRwYWsgZHVlIHRvIGh0dHBzOi8vZ2l0bGFiLmNvbS9mcmVlZGVza3RvcC1zZGsvZnJlZWRlc2t0
b3Atc2RrLy0vaXNzdWVzLzkwNAorICAgICAgICAjIGZhbGwtYmFjayB0byB0cnlpbmcgdG8gbWFu
dWFsbHkgY29weSB0aGUgYnVuZGxlCisgICAgICAgIGlmIChyZXRjb2RlICE9IDApIG9yIChub3Qg
b3MucGF0aC5pc2ZpbGUoY2FmaWxlX3BhdGgpKSBvciAob3MucGF0aC5nZXRzaXplKGNhZmlsZV9w
YXRoKSA8IDEwMCk6CisgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ0ZhaWxlZCB0byBnZXQgc3lz
dGVtIENBIGJ1bmRsZSB3aXRoIHRoZSB0cnVzdCBjb21tYW5kLiBUcnlpbmcgdG8gZmFsbC1iYWNr
IHRvIG1hbnVhbCBjb3B5LicpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShjYWZpbGVf
cGF0aCk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGNhZmlsZV9wYXRoKQorICAgICAgICAg
ICAgZm9yIGNhbmRpZGF0ZV9jYWZpbGUgaW4gWycvZXRjL3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0
ZXMuY3J0JywgJy9ldGMvc3NsL2NlcnQucGVtJywgJy9ldGMvcGtpL2NhLXRydXN0L2V4dHJhY3Rl
ZC9wZW0vdGxzLWNhLWJ1bmRsZS5wZW0nXToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlz
ZmlsZShjYW5kaWRhdGVfY2FmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHko
Y2FuZGlkYXRlX2NhZmlsZSwgY2FmaWxlX3BhdGgpCisgICAgICAgICAgICAgICAgICAgIGJyZWFr
CisgICAgICAgIGlmIChub3Qgb3MucGF0aC5pc2ZpbGUoY2FmaWxlX3BhdGgpKSBvciAob3MucGF0
aC5nZXRzaXplKGNhZmlsZV9wYXRoKSA8IDEwMCk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1l
RXJyb3IoJ0ZhaWxlZCB0byBnZW5lcmF0ZSBvciBjb3B5IHRoZSBzeXN0ZW0gVExTIENBRmlsZSB3
aXRoIHRoZSBjZXJ0aWZpY2F0ZXMuJykKIAogICAgIGRlZiBfY3JlYXRlX2J1bmRsZShzZWxmLCBi
dW5kbGVfYmluYXJ5KToKICAgICAgICAgbWFpbl9iaW5hcnlfcGF0aCA9IG9zLnBhdGguam9pbihz
ZWxmLl9idWlsZHBhdGgsICdiaW4nLCBidW5kbGVfYmluYXJ5KQpAQCAtMzg5LDQ4ICs2MzUsMTA2
IEBAIGNsYXNzIEJ1bmRsZUNyZWF0b3Iob2JqZWN0KToKICAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoJ0Nhbm5vdCBmaW5kIGJpbmFyeSBmb3IgJXMgYXQgJXMnICUgKGJ1bmRsZV9iaW5hcnks
IG1haW5fYmluYXJ5X3BhdGgpICkKIAogICAgICAgICBjb3BpZWRfaW50ZXJwcmV0ZXIgPSBOb25l
CisgICAgICAgIG5lZWRzX3RvX2NyZWF0ZV93cGVfYmFja2VuZF9zeW1saW5rID0gRmFsc2UKICAg
ICAgICAgZ2lvX21vZHVsZXMgPSBbXQorICAgICAgICBndGtfcHJpbnRfbW9kdWxlcyA9IFtdCisg
ICAgICAgIGd0a19pbV9tb2R1bGVzID0gW10KICAgICAgICAgZ3N0cmVhbWVyX21vZHVsZXMgPSBb
XQorICAgICAgICBtZXNhX2RyaV9kcml2ZXJzID0gW10KKyAgICAgICAgcGlwZXdpcmVfc3BhX3Bs
dWdpbnMgPSBbXQorICAgICAgICBnZGtfcGl4YnVmX2xvYWRlcnMgPSBbXQorICAgICAgICBlZ2xf
aWNkX21lc2FfY29uZmlnX2ZpbGUgPSBOb25lCiAgICAgICAgIGxpYnJhcmllc19jaGVja2VkID0g
c2V0KCkKICAgICAgICAgc3lzdGVtX3BhY2thZ2VzX25lZWRlZCA9IHNldCgpCisgICAgICAgIGJp
bmFyaWVzX3RvX2NvcHkgPSBzZXQoKQogICAgICAgICBvYmplY3RzX3RvX2NvcHkgPSBbIG1haW5f
YmluYXJ5X3BhdGggXQorICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBzZXBhcmF0ZSB0aGUgbGli
cmFyaWVzIGluIGxpYiBhbmQgc3lzL2xpYiBmb3IgTWluaUJyb3dzZXIgYW5kICdhbGwnIGJ1bmRs
ZXMKKyAgICAgICAgc2VsZi5fYnVuZGxlci5zZXRfdXNlX3N5c19saWJfZGlyZWN0b3J5KCdNaW5p
QnJvd3NlcicgaW4gc2VsZi5fYnVuZGxlX2JpbmFyaWVzKQogICAgICAgICBpZiBidW5kbGVfYmlu
YXJ5ID09ICdNaW5pQnJvd3Nlcic6Ci0gICAgICAgICAgICBnaW9fbW9kdWxlcyA9IHNlbGYuX2dl
dF9naW9fbW9kdWxlcygpCi0gICAgICAgICAgICBnc3RyZWFtZXJfbW9kdWxlcyA9IHNlbGYuX2dl
dF9nc3RyZWFtZXJfbW9kdWxlcygpCisgICAgICAgICAgICAjIGJ1bmRkbGUgV2ViS2l0IGxpYnJh
cmllcwogICAgICAgICAgICAgb2JqZWN0c190b19jb3B5LmV4dGVuZChzZWxmLl9nZXRfd2Via2l0
X2JpbmFyaWVzKCkpCi0gICAgICAgICAgICBvYmplY3RzX3RvX2NvcHkuYXBwZW5kKHNlbGYuX2dl
dF93ZWJraXRfYnVuZGxlbGliKCkpCisgICAgICAgICAgICBvYmplY3RzX3RvX2NvcHkuYXBwZW5k
KHNlbGYuX2dldF93ZWJraXRfbGliKCdJbmplY3RlZEJ1bmRsZScpKQorICAgICAgICAgICAgaWYg
c2VsZi5fcGxhdGZvcm0gPT0gJ3dwZSc6CisgICAgICAgICAgICAgICAgb2JqZWN0c190b19jb3B5
LmFwcGVuZChzZWxmLl9nZXRfd2Via2l0X2xpYignSW5zcGVjdG9yUmVzb3VyY2VzJykpCisgICAg
ICAgICAgICAjIEJ1bmRsZSBleHRyYSBzeXN0ZW0gcmVsYXRlZCBsaWJyYXJpZXMKKyAgICAgICAg
ICAgIGdpb19tb2R1bGVzID0gc2VsZi5fZ2V0X2dpb19tb2R1bGVzKCkKICAgICAgICAgICAgIG9i
amVjdHNfdG9fY29weS5leHRlbmQoZ2lvX21vZHVsZXMpCisgICAgICAgICAgICBnc3RyZWFtZXJf
bW9kdWxlcyA9IHNlbGYuX2dldF9nc3RyZWFtZXJfbW9kdWxlcygpCiAgICAgICAgICAgICBvYmpl
Y3RzX3RvX2NvcHkuZXh0ZW5kKGdzdHJlYW1lcl9tb2R1bGVzKQorICAgICAgICAgICAgaWYgc2Vs
Zi5fc3lzbGlicyA9PSAnYnVuZGxlLWFsbCc6CisgICAgICAgICAgICAgICAgIyBuZWVkIHRvIHNo
aXAgYSBjb3B5IG9mIGdzdCBwbHVnaW5nIHNjYW5uZXIKKyAgICAgICAgICAgICAgICBvYmplY3Rz
X3RvX2NvcHkuYXBwZW5kKHNlbGYuX2dldF9nc3RyZWFtZXJfcGx1Z2luX3NjYW5uZXIoKSkKKyAg
ICAgICAgICAgICAgICAjIHBpcGV3aXJlIHNwYSBwbHVnaW5zCisgICAgICAgICAgICAgICAgcGlw
ZXdpcmVfc3BhX3BsdWdpbl9iYXNlZGlyLCBwaXBld2lyZV9zcGFfcGx1Z2lucyA9IHNlbGYuX2dl
dF9waXBld2lyZV9zcGFfYmFzZWRpcl9hbmRfcGx1Z2lucygpCisgICAgICAgICAgICAgICAgb2Jq
ZWN0c190b19jb3B5LmV4dGVuZChwaXBld2lyZV9zcGFfcGx1Z2lucykKKyAgICAgICAgICAgICAg
ICAjIGdyYXBoaWNzIGRyaXZlcnMKKyAgICAgICAgICAgICAgICBtZXNhX2RyaV9kcml2ZXJzID0g
c2VsZi5fZ2V0X21lc2FfZHJpX2RyaXZlcnMoKQorICAgICAgICAgICAgICAgIG9iamVjdHNfdG9f
Y29weS5leHRlbmQobWVzYV9kcmlfZHJpdmVycykKKyAgICAgICAgICAgICAgICBvYmplY3RzX3Rv
X2NvcHkuZXh0ZW5kKHNlbGYuX2dldF9tZXNhX2xpYnJhcmllcygpKQorICAgICAgICAgICAgICAg
IGVnbF9pY2RfbWVzYV9jb25maWdfZmlsZSA9IHNlbGYuX2Rpc2NvdmVyX2VnbF9tZXNhX2NvbmZp
Z19maWxlKCkKKyAgICAgICAgICAgICAgICBvYmplY3RzX3RvX2NvcHkuYXBwZW5kKHNlbGYuX2dl
dF9tZXNhX2VnbF9pY2RfZHJpdmVyX3BhdGgoZWdsX2ljZF9tZXNhX2NvbmZpZ19maWxlKSkKKyAg
ICAgICAgICAgICAgICAjIHN5c3RlbSBleHRyYSBsaWJyYXJpZXMKKyAgICAgICAgICAgICAgICBv
YmplY3RzX3RvX2NvcHkuZXh0ZW5kKHNlbGYuX2dldF9leHRyYV9zeXN0ZW1fbGlicmFyaWVzKCkp
CisgICAgICAgICAgICAgICAgIyBndGsgbW9kdWxlcworICAgICAgICAgICAgICAgIGlmIHNlbGYu
X3BsYXRmb3JtID09ICdndGsnOgorICAgICAgICAgICAgICAgICAgICBndGtfcHJpbnRfbW9kdWxl
cyA9IHNlbGYuX2dldF9ndGtfbW9kdWxlcygncHJpbnRiYWNrZW5kcycpCisgICAgICAgICAgICAg
ICAgICAgIG9iamVjdHNfdG9fY29weS5leHRlbmQoZ3RrX3ByaW50X21vZHVsZXMpCisgICAgICAg
ICAgICAgICAgICAgIGd0a19pbV9tb2R1bGVzID0gc2VsZi5fZ2V0X2d0a19tb2R1bGVzKCdpbW1v
ZHVsZXMnKQorICAgICAgICAgICAgICAgICAgICBvYmplY3RzX3RvX2NvcHkuZXh0ZW5kKGd0a19p
bV9tb2R1bGVzKQorICAgICAgICAgICAgICAgICAgICBnZGtfcGl4YnVmX2xvYWRlcnMgPSBzZWxm
Ll9nZXRfZ2RrX3BpeGJ1Zl9sb2FkZXJzKCkKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0c190
b19jb3B5LmV4dGVuZChnZGtfcGl4YnVmX2xvYWRlcnMpCisgICAgICAgICAgICAgICAgICAgIG9i
amVjdHNfdG9fY29weS5hcHBlbmQoc2VsZi5fZ2V0X2dka19xdWVyeV9sb2FkZXJzX2JpbmFyeSgp
KQorICAgICAgICAgICAgICAgICAgICBvYmplY3RzX3RvX2NvcHkuYXBwZW5kKHNlbGYuX2dldF9n
dGtfcXVlcnlfaW1tb2R1bGVzX2JpbmFyeSgpKQorICAgICAgICAgICAgICAgICMgb3VyIGRsb3Bl
bndyYXAgbGliCisgICAgICAgICAgICAgICAgb2JqZWN0c190b19jb3B5LmFwcGVuZChzZWxmLl9k
bG9wZW53cmFwX21ha2UoJ2J1aWxkJykpCisKICAgICAgICAgZm9yIG9iamVjdCBpbiBvYmplY3Rz
X3RvX2NvcHk6CiAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IE5vbmUKICAgICAgICAgICAg
IGlmIG9iamVjdCBpbiBnaW9fbW9kdWxlczoKLSAgICAgICAgICAgICAgICBzeXN0ZW1fcGFja2Fn
ZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2RlcChvYmplY3QsICdnaW8nKQotICAgICAg
ICAgICAgICAgIGlmIHN5c3RlbV9wYWNrYWdlOgotICAgICAgICAgICAgICAgICAgICBzeXN0ZW1f
cGFja2FnZXNfbmVlZGVkLmFkZChzeXN0ZW1fcGFja2FnZSkKKyAgICAgICAgICAgICAgICBzeXN0
ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2RlcChvYmplY3QsICdsaWIv
Z2lvJykKICAgICAgICAgICAgIGVsaWYgb2JqZWN0IGluIGdzdHJlYW1lcl9tb2R1bGVzOgotICAg
ICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlID0gc2VsZi5fYWRkX29iamVjdF9vcl9nZXRfc3lz
ZGVwKG9iamVjdCwgJ2dzdCcpCi0gICAgICAgICAgICAgICAgaWYgc3lzdGVtX3BhY2thZ2U6Ci0g
ICAgICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlc19uZWVkZWQuYWRkKHN5c3RlbV9wYWNr
YWdlKQotICAgICAgICAgICAgZWxpZiBvYmplY3QuZW5kc3dpdGgoJy5zbycpOgotICAgICAgICAg
ICAgICAgIHNlbGYuX2J1bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRoKG9iamVjdCwgdHlwZT0n
bGliJykKKyAgICAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmplY3Rf
b3JfZ2V0X3N5c2RlcChvYmplY3QsICdsaWIvZ3N0JykKKyAgICAgICAgICAgIGVsaWYgb2JqZWN0
IGluIGd0a19wcmludF9tb2R1bGVzOgorICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlID0g
c2VsZi5fYWRkX29iamVjdF9vcl9nZXRfc3lzZGVwKG9iamVjdCwgJ2xpYi9ndGsvcHJpbnRiYWNr
ZW5kcycpCisgICAgICAgICAgICBlbGlmIG9iamVjdCBpbiBndGtfcHJpbnRfbW9kdWxlczoKKyAg
ICAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5
c2RlcChvYmplY3QsICdsaWIvZ3RrL3ByaW50YmFja2VuZHMnKQorICAgICAgICAgICAgZWxpZiBv
YmplY3QgaW4gZ3RrX2ltX21vZHVsZXM6CisgICAgICAgICAgICAgICAgc3lzdGVtX3BhY2thZ2Ug
PSBzZWxmLl9hZGRfb2JqZWN0X29yX2dldF9zeXNkZXAob2JqZWN0LCAnbGliL2d0ay9pbW1vZHVs
ZXMnKQorICAgICAgICAgICAgZWxpZiBvYmplY3QgaW4gbWVzYV9kcmlfZHJpdmVyczoKKyAgICAg
ICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2Rl
cChvYmplY3QsICdsaWIvZHJpJykKKyAgICAgICAgICAgIGVsaWYgb2JqZWN0IGluIGdka19waXhi
dWZfbG9hZGVyczoKKyAgICAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9v
YmplY3Rfb3JfZ2V0X3N5c2RlcChvYmplY3QsICdsaWIvZ2RrLXBpeGJ1Zi9sb2FkZXJzJykKKyAg
ICAgICAgICAgIGVsaWYgb2JqZWN0IGluIHBpcGV3aXJlX3NwYV9wbHVnaW5zOgorICAgICAgICAg
ICAgICAgICMgVGhpcyBpcyBhIGxldmVsLTIgaW5kaXJlY3QgZGVwZW5kZW5jeSAoZ3N0cmVhbWVy
IC0+IGdzdC1waXBld2lyZSAtPiBwaXBld2lyZS1zcGEtcGx1Z2luKQorICAgICAgICAgICAgICAg
ICMgRm9yIHRoZSBjYXNlIG9mIHN5c3RlbV9wYWNrYWdlcyB3ZSByZWx5IG9uIHRoZSBkaXN0cm8g
ZGVwZW5kZW5jaWVzIGJldHdlbiBwYWNrYWdlcworICAgICAgICAgICAgICAgICMgQnV0IHRoZSBi
dW5kbGUtYWxsIGNhc2Ugd2UgbmVlZCBhIHNwZWNpYWwgY2FzZSBiZWNhdXNlIHRoaXMgZGVwIGlz
IG5vdCBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIChkbG9wZW4gb2YgcGx1Z2lucykKKyAgICAgICAg
ICAgICAgICBpZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKKyAgICAgICAgICAgICAg
ICAgICAgcGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpciA9IG9iamVjdC5yZXBsYWNlKHBp
cGV3aXJlX3NwYV9wbHVnaW5fYmFzZWRpciwgJycsIDEpCisgICAgICAgICAgICAgICAgICAgIHBp
cGV3aXJlX3NwYV9wbHVnaW5fZGVzdF9zdWJkaXIgPSBvcy5wYXRoLmRpcm5hbWUocGlwZXdpcmVf
c3BhX3BsdWdpbl9kZXN0X3N1YmRpci5sc3RyaXAoJy8nKSkKKyAgICAgICAgICAgICAgICAgICAg
cGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpciA9IG9zLnBhdGguam9pbignbGliL3BpcGV3
aXJlJywgcGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpcikKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fYnVuZGxlci5jb3B5X2FuZF9tYXliZV9zdHJpcF9wYXRjaGVsZihvYmplY3QsIHR5
cGU9cGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpciwgc3RyaXA9c2VsZi5fc2hvdWxkX3N0
cmlwX29iamVjdHMsIHBhdGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBhdGNoZWxmX25vZGVmYXVs
dGxpYj1UcnVlKQorICAgICAgICAgICAgZWxpZiAnLnNvJyBpbiBvYmplY3Q6CisgICAgICAgICAg
ICAgICAgaWYgJ2xpYndwZWJhY2tlbmQnIGluIG9iamVjdC5sb3dlcigpOgorICAgICAgICAgICAg
ICAgICAgICBuZWVkc190b19jcmVhdGVfd3BlX2JhY2tlbmRfc3ltbGluayA9IFRydWUKKyAgICAg
ICAgICAgICAgICBzZWxmLl9idW5kbGVyLmNvcHlfYW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKG9i
amVjdCwgdHlwZT0nbGliJywgc3RyaXA9c2VsZi5fc2hvdWxkX3N0cmlwX29iamVjdHMsIHBhdGNo
ZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBhdGNoZWxmX25vZGVmYXVsdGxpYj1zZWxmLl9zeXNsaWJz
PT0nYnVuZGxlLWFsbCcpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYu
X2J1bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRoKG9iamVjdCwgdHlwZT0nYmluJykKKyAgICAg
ICAgICAgICAgICBiaW5hcmllc190b19jb3B5LmFkZChvYmplY3QpCiAgICAgICAgICAgICAjIFRo
ZXJlIGlzIG5vIG5lZWQgdG8gZXhhbWluZSB0aGUgbGlicmFyaWVzIGxpbmtlZCB3aXRoIG9iamVj
dHMgY29taW5nIGZyb20gYSBzeXN0ZW0gcGFja2FnZSwKICAgICAgICAgICAgICMgYmVjYXVzZSBz
eXN0ZW0gcGFja2FnZXMgYWxyZWFkeSBkZWNsYXJlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZW0u
CiAgICAgICAgICAgICAjIEhvd2V2ZXIsIGlmIHdlIGFyZSBydW5uaW5nIHdpdGggc2VsZi5fc3lz
bGlicyA9PSAnYnVuZGxlLWFsbCcgdGhlbiBzeXN0ZW1fcGFja2FnZSB3aWxsIGJlIE5vbmUsCiAg
ICAgICAgICAgICAjIGFuZCBldmVyeXRoaW5nIHdpbGwgYmUgZXhhbWluZWQgYW5kIGJ1bmRsZWQg
YXMgd2UgZG9uJ3QgYWNjb3VudCBmb3Igc3lzdGVtIHBhY2thZ2VzIGluIHRoYXQgY2FzZS4KLSAg
ICAgICAgICAgIGlmIG5vdCBzeXN0ZW1fcGFja2FnZToKKyAgICAgICAgICAgIGlmIHN5c3RlbV9w
YWNrYWdlOgorICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlc19uZWVkZWQuYWRkKHN5c3Rl
bV9wYWNrYWdlKQorICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBsaWJyYXJpZXMs
IGludGVycHJldGVyID0gc2VsZi5fc2hhcmVkX29iamVjdF9yZXNvbHZlci5nZXRfbGlic19hbmRf
aW50ZXJwcmV0ZXIob2JqZWN0KQogICAgICAgICAgICAgICAgIGlmIGludGVycHJldGVyIGlzIE5v
bmU6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ291bGQgbm90IGRl
dGVybWluZSBpbnRlcnByZXRlciBmb3IgYmluYXJ5ICVzIiAlIG9iamVjdCkKKyAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDb3VsZCBub3QgZGV0ZXJtaW5lIGludGVycHJl
dGVyIGZvciBiaW5hcnkgJXMnICUgb2JqZWN0KQogICAgICAgICAgICAgICAgIGlmIGNvcGllZF9p
bnRlcnByZXRlciBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9zeXNsaWJz
ID09ICdidW5kbGUtYWxsJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1bmRsZXIu
Y29weV9hbmRfcmVtb3ZlX3JwYXRoKGludGVycHJldGVyLCB0eXBlPSdpbnRlcnByZXRlcicpCisg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9idW5kbGVyLmNvcHlfYW5kX21heWJlX3N0cmlw
X3BhdGNoZWxmKGludGVycHJldGVyLCB0eXBlPSdpbnRlcnByZXRlcicsIHN0cmlwPXNlbGYuX3No
b3VsZF9zdHJpcF9vYmplY3RzLCBwYXRjaGVsZl9yZW1vdmVycGF0aD1zZWxmLl9zeXNsaWJzPT0n
YnVuZGxlLWFsbCcsIHBhdGNoZWxmX25vZGVmYXVsdGxpYj1zZWxmLl9zeXNsaWJzPT0nYnVuZGxl
LWFsbCcpCiAgICAgICAgICAgICAgICAgICAgIGNvcGllZF9pbnRlcnByZXRlciA9IGludGVycHJl
dGVyCiAgICAgICAgICAgICAgICAgZWxpZiBjb3BpZWRfaW50ZXJwcmV0ZXIgIT0gaW50ZXJwcmV0
ZXI6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRGV0ZWN0ZWQgYmlu
YXJpZXMgd2l0aCBkaWZmZXJlbnQgaW50ZXJwcmV0ZXJzOiAlcyAhPSAlcycgJShjb3BpZWRfaW50
ZXJwcmV0ZXIsIGludGVycHJldGVyKSkKLSAgICAgICAgICAgICAgICAjIEZJWE1FOiBmb3IgLS1z
eXNsaWJzPWJ1bmRsZS1hbGwgd2Ugd291bGQgaGF2ZSB0byBjb3B5IHRoZSBsaWJuc3NfKnNvKiBs
aWJyYXJpZXMgd2hpY2ggYXJlIGRsb3BlbidlZCA8aHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvMjAz
MDE0PgotICAgICAgICAgICAgICAgICMgQWxzbyB3ZSBzaG91bGQgaW5jbHVkZSBjb25maWcgZmls
ZXMgbGlrZSBmb250Y29uZmlnIHN0dWZmIG9yIHN1cHBvcnQgZmlsZXMgbGlrZSBpY29ucy4KICAg
ICAgICAgICAgICAgICBmb3IgbGlicmFyeSBpbiBsaWJyYXJpZXM6CiAgICAgICAgICAgICAgICAg
ICAgIGlmIGxpYnJhcnkgaW4gbGlicmFyaWVzX2NoZWNrZWQ6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBfbG9nLmRlYnVnKCdTa2lwIGFscmVhZHkgY2hlY2tlZCBbbGliXTogJXMnICUgbGlicmFy
eSkKQEAgLTQzOSwxMiArNzQzLDEwMiBAQCBjbGFzcyBCdW5kbGVDcmVhdG9yKG9iamVjdCk6CiAg
ICAgICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlID0gc2VsZi5fYWRkX29iamVjdF9vcl9n
ZXRfc3lzZGVwKGxpYnJhcnksICdsaWInKQogICAgICAgICAgICAgICAgICAgICBpZiBzeXN0ZW1f
cGFja2FnZToKICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlc19uZWVkZWQu
YWRkKHN5c3RlbV9wYWNrYWdlKQotCi0gICAgICAgIHNlbGYuX2Vuc3VyZV93cGVfYmFja2VuZF9z
eW1saW5rKCkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiAnbGlid3BlYmFja2VuZCcgaW4gbGli
cmFyeS5sb3dlcigpOgorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHNfdG9fY3JlYXRlX3dw
ZV9iYWNrZW5kX3N5bWxpbmsgPSBUcnVlCisgICAgICAgIGlmIG5lZWRzX3RvX2NyZWF0ZV93cGVf
YmFja2VuZF9zeW1saW5rOgorICAgICAgICAgICAgc2VsZi5fZW5zdXJlX3dwZV9iYWNrZW5kX3N5
bWxpbmsoKQorICAgICAgICBmb3IgYmluYXJ5IGluIGJpbmFyaWVzX3RvX2NvcHk6CisgICAgICAg
ICAgICBpZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKKyAgICAgICAgICAgICAgICBz
ZWxmLl9idW5kbGVyLmNvcHlfYW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKGJpbmFyeSwgdHlwZT0n
YmluJywgc3RyaXA9c2VsZi5fc2hvdWxkX3N0cmlwX29iamVjdHMsIHBhdGNoZWxmX3JlbW92ZXJw
YXRoPVRydWUsIHBhdGNoZWxmX25vZGVmYXVsdGxpYj1UcnVlLCBwYXRjaGVsZl9zZXRpbnRlcnBy
ZXRlcl9yZWxhdGl2ZXBhdGg9aW50ZXJwcmV0ZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIHNlbGYuX2J1bmRsZXIuY29weV9hbmRfbWF5YmVfc3RyaXBfcGF0Y2hlbGYoYmlu
YXJ5LCB0eXBlPSdiaW4nLCBzdHJpcD1zZWxmLl9zaG91bGRfc3RyaXBfb2JqZWN0cywgcGF0Y2hl
bGZfcmVtb3ZlcnBhdGg9VHJ1ZSwgcGF0Y2hlbGZfbm9kZWZhdWx0bGliPUZhbHNlKQorCisgICAg
ICAgICMgTm93IGNvcHkgZGF0YSBmaWxlcyB0byBzaGFyZSBkaXIgKG9ubHkgbmVlZGVkIHdoZW4g
YnVuZGluZyBhbGwgZm9yIE1pbmlCcm93c2VyKS4KKyAgICAgICAgaWYgYnVuZGxlX2JpbmFyeSA9
PSAnTWluaUJyb3dzZXInIGFuZCBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKKyAgICAg
ICAgICAgIHRhcmdldF9zaGFyZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fdG1wZGlyLCAnc3lz
L3NoYXJlJykKKyAgICAgICAgICAgICMgQ29weSBnbHZuZCBFR0wganNvbiBmaWxlcworICAgICAg
ICAgICAgX2xvZy5pbmZvKCdDb3B5IEVHTCBjb25maWcgZmlsZXMnKQorICAgICAgICAgICAgZWds
X2ljZF9jb25maWdkaXJfZGVzdCA9IG9zLnBhdGguam9pbihzZWxmLl90bXBkaXIsICdzeXMvbGli
L2dsdm5kL2VnbF92ZW5kb3IuZCcpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihl
Z2xfaWNkX2NvbmZpZ2Rpcl9kZXN0KToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhlZ2xf
aWNkX2NvbmZpZ2Rpcl9kZXN0KQorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KGVnbF9pY2Rf
bWVzYV9jb25maWdfZmlsZSwgZWdsX2ljZF9jb25maWdkaXJfZGVzdCkKKyAgICAgICAgICAgICMg
Q29weSBnbGliLTIgY29tcGlsZWQgc2NoZW1hcworICAgICAgICAgICAgX2xvZy5pbmZvKCdDb3B5
IEdsaWIgY29tcGlsZWQgc2NoZW1hcycpCisgICAgICAgICAgICBzY2hlbWFzX3RhcmdldF9kaXIg
PSBvcy5wYXRoLmpvaW4odGFyZ2V0X3NoYXJlX2RpciwgJ2dsaWItMi4wL3NjaGVtYXMnKQorICAg
ICAgICAgICAgb3MubWFrZWRpcnMoc2NoZW1hc190YXJnZXRfZGlyKQorICAgICAgICAgICAgIyBz
byBmYXIgaGFyZGNvZGluZyB0aGUgdmFsdWUgYmVjYXVzZSBzZWVtcyB0byBiZSBxdWl0ZSBzdGFu
ZGFyZCBhY3Jvc3MgZGlzdHJvcy4KKyAgICAgICAgICAgIGNvbXBpbGVkX3NjaGVtYXNfZmlsZSA9
ICcvdXNyL3NoYXJlL2dsaWItMi4wL3NjaGVtYXMvZ3NjaGVtYXMuY29tcGlsZWQnCisgICAgICAg
ICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoY29tcGlsZWRfc2NoZW1hc19maWxlKToKKyAgICAg
ICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJDYW4ndCBmaW5kIHRoZSBnc2No
ZW1hcy5jb21waWxlZCBmaWxlIGF0IHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBpbiB0aGlzIHN5c3Rl
bSIpCisgICAgICAgICAgICBzaHV0aWwuY29weShjb21waWxlZF9zY2hlbWFzX2ZpbGUsIHNjaGVt
YXNfdGFyZ2V0X2RpcikKKyAgICAgICAgICAgIF9sb2cuaW5mbygnQ29weSBzaGFyZWQgbWltZSBp
bmZvIGNhY2hlJykKKyAgICAgICAgICAgICMgU2FtZSBmb3Igc2hhcmVkLW1pbWUtaW5mbyBjYWNo
ZQorICAgICAgICAgICAgbWltZV90YXJnZXRfZGlyID0gb3MucGF0aC5qb2luKHRhcmdldF9zaGFy
ZV9kaXIsICdtaW1lJykKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKG1pbWVfdGFyZ2V0X2RpcikK
KyAgICAgICAgICAgIG1pbWVfY2FjaGUgPSAnL3Vzci9zaGFyZS9taW1lL21pbWUuY2FjaGUnCisg
ICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobWltZV9jYWNoZSk6CisgICAgICAgICAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiQ2FuJ3QgZmluZCB0aGUgbWltZS5jYWNo
ZSBmaWxlIGZyb20gc2hhcmVkLW1pbWUtaW5mbyBhdCB0aGUgc3RhbmRhcmQgbG9jYXRpb24gaW4g
dGhpcyBzeXN0ZW0iKQorICAgICAgICAgICAgc2h1dGlsLmNvcHkobWltZV9jYWNoZSwgbWltZV90
YXJnZXRfZGlyKQorICAgICAgICAgICAgX2xvZy5pbmZvKCdHZW5lcmF0ZSBmb250Y29uZmlnIGNv
bmZpZycpCisgICAgICAgICAgICAjIEZvbnRjb25maWcgZm9udHMgYW5kIGNvbmZpZworICAgICAg
ICAgICAgdGFyZ2V0X2ZvbnRfY29uZmlnX2RpciA9IG9zLnBhdGguam9pbih0YXJnZXRfc2hhcmVf
ZGlyLCAnZm9udHMvY29uZmlnJykKKyAgICAgICAgICAgIHRhcmdldF9mb250X2RhdGFfZGlyID0g
b3MucGF0aC5qb2luKHRhcmdldF9zaGFyZV9kaXIsICdmb250cy9mb250cycpCisgICAgICAgICAg
ICBvcy5tYWtlZGlycyh0YXJnZXRfZm9udF9jb25maWdfZGlyKQorICAgICAgICAgICAgIyBXZSBr
ZWVwIGFzc3VtaW5nIHN0YW5kYXJkIGxvY2F0aW9ucyBmb3IgdGhpcyBmaWxlcyBvbiB0aGUgdGFy
Z2V0IHN5c3RlbQorICAgICAgICAgICAgc3lzdGVtX2ZvbnRfY29uZmlnX2RpciA9ICcvZXRjL2Zv
bnRzL2NvbmYuZCcKKyAgICAgICAgICAgIHN5c3RlbV9mb250X2RhdGFfZGlyID0gJy91c3Ivc2hh
cmUvZm9udHMnCisgICAgICAgICAgICBpZiBub3QgKG9zLnBhdGguaXNkaXIoc3lzdGVtX2ZvbnRf
Y29uZmlnX2RpcikgYW5kIG9zLnBhdGguaXNkaXIoc3lzdGVtX2ZvbnRfZGF0YV9kaXIpKToKKyAg
ICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJDYW4ndCBmaW5kIHRoZSBm
b250Y29uZmlnIGZpbGVzIGF0IHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBpbiB0aGlzIHN5c3RlbSIp
CisgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc3lzdGVtX2ZvbnRfY29uZmlnX2Rpciwgb3Mu
cGF0aC5qb2luKHRhcmdldF9mb250X2NvbmZpZ19kaXIsIG9zLnBhdGguYmFzZW5hbWUoc3lzdGVt
X2ZvbnRfY29uZmlnX2RpcikpKQorICAgICAgICAgICAgc2VsZi5fZ2VuZXJhdGVfZm9udF9jb25m
KHRhcmdldF9mb250X2NvbmZpZ19kaXIpCisgICAgICAgICAgICBfbG9nLmluZm8oJ0NvcHkgZm9u
dHMnKQorICAgICAgICAgICAgIyBXZSBjb3B5IGV2ZXJ5IGZvbnQsIHNvIHRoaXMgbWF5IGNvcHkg
bG90IG9mIGRhdGEgaWYgeW91IGhhdmUgbG90IG9mIGZvbnRzIGluc3RhbGxlZC4KKyAgICAgICAg
ICAgICMgU28gcHJpbnQgYSB3YXJuaW5nIGluIHRoYXQgYXNlCisgICAgICAgICAgICBzeXN0ZW1f
Zm9udF9kYXRhX3NpemUgPSBzZWxmLl9nZXRfdG90YWxfc2l6ZV9kaXIoc3lzdGVtX2ZvbnRfZGF0
YV9kaXIpCisgICAgICAgICAgICBpZiBzeXN0ZW1fZm9udF9kYXRhX3NpemUgPiAxMDQ4NTc2MDA6
ICAjIDEwMCBNQgorICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygnQ29weWluZyAlZCBNQiBv
ZiBmb250IGRhdGEgZnJvbSB0aGUgc3lzdGVtIGF0IC91c3Ivc2hhcmUvZm9udHMuIFRoaXMgc2hv
dWxkIGJlIG9wdGltaXplZC4nICUgaW50KHN5c3RlbV9mb250X2RhdGFfc2l6ZSAvICgxMDI0KjEw
MjQpKSkKKyAgICAgICAgICAgIHNodXRpbC5jb3B5dHJlZShzeXN0ZW1fZm9udF9kYXRhX2Rpciwg
dGFyZ2V0X2ZvbnRfZGF0YV9kaXIpCisgICAgICAgICAgICAjIENvcHkgWEtCIGRhdGEKKyAgICAg
ICAgICAgIF9sb2cuaW5mbygnQ29weSBYS0IgZGF0YScpCisgICAgICAgICAgICBzeXN0ZW1feGti
X2RhdGEgPSAnL3Vzci9zaGFyZS9YMTEveGtiJworICAgICAgICAgICAgaWYgbm90IChvcy5wYXRo
LmlzZGlyKHN5c3RlbV94a2JfZGF0YSkpOgorICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxl
bWVudGVkRXJyb3IoIkNhbid0IGZpbmQgdGhlIFhLQiBkYXRhIGZpbGVzIGF0IHRoZSBzdGFuZGFy
ZCBsb2NhdGlvbiBpbiB0aGlzIHN5c3RlbSIpCisgICAgICAgICAgICB0YXJnZXRfeGtiX2RhdGEg
PSBvcy5wYXRoLmpvaW4odGFyZ2V0X3NoYXJlX2RpciwgJ3hrYicpCisgICAgICAgICAgICBzaHV0
aWwuY29weXRyZWUoc3lzdGVtX3hrYl9kYXRhLCB0YXJnZXRfeGtiX2RhdGEpCisgICAgICAgICAg
ICAjIEZsYXRwYWsgY29uZmlndXJlcyBnbnV0bHMgdG8gdXNlIHRoZSBwMTEta2l0IHRydXN0IHN0
b3JlIGFuZCB0aGVuIHVzZXMgcDExLWtpdCB0byBhY2Nlc3MgdGhlIGhvc3QgU1NMIGNlcnRpZmlj
YXRlcy4KKyAgICAgICAgICAgICMgLSBJdCBzdGFydHMgYSBwMTEga2l0IHNlcnZlciBvbiB0aGUg
aG9zdHMgYW5kIGJpbmQtbW91bnRpbmcgYSBzb2NrZXQgdGhhdCBsYXRlciBpcyB1c2VkIGZyb20g
aW5zaWRlIHRoZSBzYW5kYm94IHZpYSBwMTEta2l0LWNsaWVudC5zbworICAgICAgICAgICAgIyBT
ZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wMTEtZ2x1ZS9wMTEta2l0L2lzc3Vlcy82OAorICAgICAg
ICAgICAgIyBTdGFydGluZyBhIHAxMS1raXQgc2VydmVyIGlzIHByb2JsZW1hdGljIGZvciB0aGUg
dXNlIGNhc2Ugb2YgdGhlIGJ1bmRsZSwgYW5kIGFsc28gd2lsbCBvbmx5IHdvcmsgaWYgdGhlIGhv
c3QgaXMgY29uZmlndXJlZCB0byB1c2UgcDExLWtpdAorICAgICAgICAgICAgIyBTbyB3ZSB0YWtl
IGEgZGlmZmVyZW50IGFwcHJvYWNoIGhlcmUuCisgICAgICAgICAgICAjIDEuIFdlIGdlbmVyYXRl
IGEgYnVuZGxlLWNhLWNlcnRpZmljYXRlcy5wZW0gZmlsZSB3aXRoIGFsbCB0aGUgY2VydHMgb2Yg
dGhlIHN5c3RlbSB3ZXJlIHRoZSBidW5kbGUgd2FzIGdlbmVyYXRlZCBhbmQgd2Ugc2hpcCB0aGlz
IGZpbGUKKyAgICAgICAgICAgICMgMi4gQXQgcnVudGltZSB3ZSBsb29rIGZvciB0aGUgc3lzdGVt
IFRMUyBjYS1idW5kbGUucGVtIGZpbGUgYW5kIHdlIHVzZSBpdC4gSWYgd2UgY2FuJ3QgZmluZCBp
dCB0aGVuIHdlIGRlZmF1bHQgdG8gdXNpbmcgdGhlIG9uZSBzaGlwcGVkIGluc2lkZSB0aGUgYnVu
ZGxlLgorICAgICAgICAgICAgIyBXZSBwYXNzIHRoZSBwYXRoIHRvIHRoZSBUTFMgY2EtYnVuZGxl
LnBlbSBmaWxlIHVzaW5nIHRoZSBlbnYgdmFyIFdFQktJVF9UTFNfQ0FGSUxFX1BFTQorICAgICAg
ICAgICAgIyBUaGUgaG9zdCBwMTEta2l0IHNldHVwIG1heSBzdGlsbCB3b3JrIGlmIGl0IGlzIHVz
aW5nIHRoZSBzYW1lIHBhdGhzIGZvciBsb2FkaW5nIHRoZSBwMTEta2l0IG1vZHVsZXMsIGJ1dCBv
dGhlcndpc2UgaXQgd2lsbCBmYWlsIHRvIGxvYWQgdGhlIG1vZHVsZXMuCisgICAgICAgICAgICAj
IFRoYXQgaXMgb2ssIHNpbmNlIHdlIGRvbid0IG5lZWQgYW55bW9yZSBhIHdvcmtpbmcgcDExLWtp
dCBzZXR1cC4gSWYgaXQgd29ya3MgaXQgd2lsbCBiZSB1c2VkLCBidXQgaWYgbm90IHdlIGhhdmUg
YSBmYWxsYmFjay4KKyAgICAgICAgICAgICMgVG8gZGVidWcgdGhpcyBpcyB1c2VmdWwgdG8gZXhw
b3J0IFAxMV9LSVRfREVCVUc9YWxsCisgICAgICAgICAgICAjIFRoaXMgYXBwcm9hY2ggYWxzbyBh
bGxvd3MgdGhpcyBidW5kbGUgc2NyaXB0IGdvIGdlbmVyYXRlIGEgd29ya2luZyBidW5kbGUgd2hl
biBnbnV0bHMgaXMgbm90IGNvbmZpZ3VyZWQgdG8gdXNlIHAxMS1raXQuCisgICAgICAgICAgICBf
bG9nLmluZm8oJ0dlbmVyYXRlIFRMUyBDQSBjZXJ0aWZpY2F0ZXMgZmlsZScpCisgICAgICAgICAg
ICBjZXJ0c190YXJnZXRfZGlyID0gb3MucGF0aC5qb2luKHRhcmdldF9zaGFyZV9kaXIsICdjZXJ0
cycpCisgICAgICAgICAgICBvcy5tYWtlZGlycyhjZXJ0c190YXJnZXRfZGlyKQorICAgICAgICAg
ICAgc2VsZi5fZ2VuZXJhdGVfdGxzX2NhZmlsZShjZXJ0c190YXJnZXRfZGlyKQorICAgICAgICAg
ICAgaWYgc2VsZi5fcGxhdGZvcm0gPT0gJ2d0ayc6CisgICAgICAgICAgICAgICAgX2xvZy5pbmZv
KCdDb3B5IGJhc2ljIEdUSyBpY29ucyBhbmQgdGhlbWVzLicpCisgICAgICAgICAgICAgICAgaWNv
bnNfdGFyZ2V0X2RpciA9IG9zLnBhdGguam9pbih0YXJnZXRfc2hhcmVfZGlyLCAnaWNvbnMnKQor
ICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGljb25zX3RhcmdldF9kaXIpCisgICAgICAgICAg
ICAgICAgIyBQYXRocyBhbHNvIGhhcmRjb2RlZCBiZWNhdXNlIHNlZW1zIGFuIHN0YW5kYXJkIGxv
Y2F0aW9ucyBhY3Jvc3MgZGlzdHJvcworICAgICAgICAgICAgICAgIGZvciBndGtfaWNvbl9kaXIg
aW4gWycvdXNyL3NoYXJlL2ljb25zL0Fkd2FpdGEnLCAnL3Vzci9zaGFyZS9pY29ucy9oaWNvbG9y
J106CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGd0a19pY29uX2Rp
cik6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdD
YW4gbm90IGZpbmQgdGhlIEdUSyBpY29uIHRoZW1lIGF0IHBhdGggIiVzIiBpbiB0aGlzIHN5c3Rl
bScgJSBndGtfaWNvbl9kaXIpCisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5dHJlZShn
dGtfaWNvbl9kaXIsIG9zLnBhdGguam9pbihpY29uc190YXJnZXRfZGlyLCBvcy5wYXRoLmJhc2Vu
YW1lKGd0a19pY29uX2RpcikpKQorCisgICAgICAgICMgRmluYWxseSBnZW5lcmF0ZSB0aGUgd3Jh
cHBlcnMuCiAgICAgICAgIHNlbGYuX2dlbmVyYXRlX3dyYXBwZXJfc2NyaXB0KGludGVycHJldGVy
LCBidW5kbGVfYmluYXJ5KQotICAgICAgICBpZiBidW5kbGVfYmluYXJ5ID09ICJNaW5pQnJvd3Nl
ciI6CisgICAgICAgIGlmIGJ1bmRsZV9iaW5hcnkgPT0gJ01pbmlCcm93c2VyJzoKICAgICAgICAg
ICAgIHNlbGYuX2dlbmVyYXRlX3dyYXBwZXJfc2NyaXB0KGludGVycHJldGVyLCBzZWxmLl9wb3J0
X2JpbmFyeV9wcmVmZml4ICsgJ1dlYkRyaXZlcicpCiAgICAgICAgIHNlbGYuX2dlbmVyYXRlX2lu
c3RhbGxfZGVwc19zY3JpcHQoc3lzdGVtX3BhY2thZ2VzX25lZWRlZCkKKyAgICAgICAgIyBDbGVh
biByZW1haW5pbmcgc3R1ZmYKKyAgICAgICAgaWYgYnVuZGxlX2JpbmFyeSA9PSAnTWluaUJyb3dz
ZXInIGFuZCBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKKyAgICAgICAgICAgIHNlbGYu
X2Rsb3BlbndyYXBfbWFrZSgnY2xlYW4nKQogCiAKIGNsYXNzIEJ1bmRsZVVwbG9hZGVyKG9iamVj
dCk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JpbmFyeV9idW5kbGluZy9i
dW5kbGUucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JpbmFyeV9idW5kbGluZy9idW5kbGUu
cHkKaW5kZXggYzZlNTViODg5MzE1N2Q4YmRhY2E2ZmQyNjU1MDdjYzA0MTNhYmU4ZC4uMjlhYjM5
MmVhNTQ3NGExMjlmZjU1MTM2ZTQ1ZjVkYjAwNzAzYmRjMyAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9iaW5hcnlfYnVuZGxpbmcvYnVuZGxlLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5nL2J1bmRsZS5weQpAQCAtMzEsNjggKzMxLDE5MSBA
QCBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIGNsYXNzIEJpbmFyeUJ1bmRs
ZXI6CiAgICAgVkFSX01ZRElSID0gJ01ZRElSJwotICAgIFZBUl9JTlRFUlBSRVRFUiA9ICdJTlRF
UlBSRVRFUicKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXN0aW5hdGlvbl9kaXIsIHNob3Vs
ZF9zdHJpcF9vYmplY3RzKToKLSAgICAgICAgaWYgc2h1dGlsLndoaWNoKCdwYXRjaGVsZicpIGlz
IE5vbmU6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCJDb3VsZCBub3QgZmluZCBgcGF0Y2hlbGZg
IGluICRQQVRIIikKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTWlzc2luZyByZXF1aXJl
ZCBiaW5hcnkgYHBhdGNoZWxmYCIpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlc3RpbmF0aW9u
X2RpciwgYnVpbGRfcGF0aD1Ob25lKToKICAgICAgICAgc2VsZi5fZGVzdGluYXRpb25fZGlyID0g
ZGVzdGluYXRpb25fZGlyCi0gICAgICAgIHNlbGYuX3Nob3VsZF9zdHJpcF9vYmplY3RzID0gc2hv
dWxkX3N0cmlwX29iamVjdHMKKyAgICAgICAgc2VsZi5faGFzX3BhdGNoZWRfaW50ZXJwcmV0ZXJf
cmVscGF0aCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2J1aWxkX3BhdGggPSBidWlsZF9wYXRoCisg
ICAgICAgIHNlbGYuX3Nob3VsZF91c2Vfc3lzX2xpYl9kaXJlY3RvcnkgPSBGYWxzZQorCisgICAg
ZGVmIF9pc19zeXN0ZW1fZGVwKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBzZWxmLl9idWlsZF9w
YXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBXZSBkb24ndCBjb25zaWRlciBsaWJ3cGUg
YW5kIGxpYldQRUJhY2tlbmQtZmRvIHN5c2xpYnMgKGV2ZW4gd2hlbiB0aG9zZSBhcmUgbm90IGJ1
aWx0IGRpcmVjdGx5KS4gTmVpdGhlciBkbG9wZW53cmFwCisgICAgICAgICAgICBpZiBhbnkocCBp
biBwYXRoLmxvd2VyKCkgZm9yIHAgaW4gWydsaWJ3cGUnLCAnZGxvcGVud3JhcCddKToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBub3QgcGF0aC5zdGFy
dHN3aXRoKHNlbGYuX2J1aWxkX3BhdGgpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVm
IHNldF91c2Vfc3lzX2xpYl9kaXJlY3Rvcnkoc2VsZiwgc2hvdWxkX3VzZV9zeXNfbGliX2RpcmVj
dG9yeSk6CisgICAgICAgIHNlbGYuX3Nob3VsZF91c2Vfc3lzX2xpYl9kaXJlY3RvcnkgPSBzaG91
bGRfdXNlX3N5c19saWJfZGlyZWN0b3J5CisKKyAgICBkZWYgY29weV9hbmRfbWF5YmVfc3RyaXBf
cGF0Y2hlbGYoc2VsZiwgb3JpZ19maWxlLCB0eXBlPSdiaW4nLCBzdHJpcD1UcnVlLCBwYXRjaGVs
Zl9yZW1vdmVycGF0aD1UcnVlLCBwYXRjaGVsZl9ub2RlZmF1bHRsaWI9RmFsc2UsIHBhdGNoZWxm
X3NldGludGVycHJldGVyX3JlbGF0aXZlcGF0aD1Ob25lLCBvYmplY3RfZmluYWxfZGVzdGluYXRp
b25fZGlyPU5vbmUpOgorICAgICAgICAiIiIgVGhpcyBkb2VzIHRoZSBmb2xsb3dpbmc6CisgICAg
ICAgICAgICAxLiBDb3BpZXMgdGhlIGJpbmFyeS9saWIgKG9iamVjdCkKKyAgICAgICAgICAgIDIu
IE9wdGlvbmFsbHkgcnVucyBwYXRjaGVsZiB3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXJzCisgICAg
ICAgICAgICAzLiBPcHRpb25hbGx5IHN0cmlwcyB0aGUgYmluYXJ5CisgICAgICAgICAgICBJZiB0
aGUgZmlsZSBpcyBhIHN5bWxpbmsgcG9pbnRpbmcgYW5vdGhlciBmaWxlIHRoZW4gdGhlIHN5bWxp
bmsgaXMgcHJlc2VydmVkIChjb3B5aW5nIHRoZSBmaWxlIHBvaW50ZWQpCisgICAgICAgICIiIgog
Ci0gICAgZGVmIGRlc3RpbmF0aW9uX2RpcihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Rl
c3RpbmF0aW9uX2RpcgotCi0gICAgZGVmIGNvcHlfYW5kX3JlbW92ZV9ycGF0aChzZWxmLCBvcmln
X2ZpbGUsIHR5cGU9J2JpbicsIGRlc3RpbmF0aW9uX2Rpcj1Ob25lKToKICAgICAgICAgZGlyX3N1
ZmZpeCA9ICdsaWInIGlmIHR5cGUgPT0gJ2ludGVycHJldGVyJyBlbHNlIHR5cGUKLSAgICAgICAg
ZGVzdGluYXRpb25fZGlyID0gb3MucGF0aC5qb2luKHNlbGYuX2Rlc3RpbmF0aW9uX2RpciwgZGly
X3N1ZmZpeCkKLSAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZGVzdGluYXRpb25fZGlyKToK
LSAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRlc3RpbmF0aW9uX2RpcikKKyAgICAgICAgaWYgb2Jq
ZWN0X2ZpbmFsX2Rlc3RpbmF0aW9uX2RpciBpcyBOb25lOgorICAgICAgICAgICAgb2JqZWN0X2Zp
bmFsX2Rlc3RpbmF0aW9uX2RpciA9IHNlbGYuX2Rlc3RpbmF0aW9uX2RpcgorICAgICAgICAgICAg
IyBJZiBzZXRfdXNlX3N5c19saWJfZGlyZWN0b3J5KCkgaXMgZW5hYmxlZCB0aGVuIHN5c3RlbSBs
aWJyYXJpZXMgYXJlIHNoaXBwZWQgaW4gJFJPT1Qvc3lzL2xpYiB0byBhbGxvdyB0byByZWRpc3Ry
aWJ1dGUgdGhlbSBzZXBhcmF0ZWx5LgorICAgICAgICAgICAgIyBIb3dldmVyLCB0aGUgaW50ZXJw
cmV0ZXIgaXMgYWx3YXlzIHNoaXBwZWQgaW4gJFJPT1QvbGliIGFuZCBhbGwgdGhlIGJpbmFyaWVz
IGFyZSBhbHdheXMgc2hpcHBlZCBpbiAkUk9PVC9iaW4KKyAgICAgICAgICAgICMgRXZlbiB3aGVu
IHRoZXkgYXJlIHN5c3RlbV9kZXBzIGJlY2F1c2Ugb2YgcGF0Y2hlbGZfc2V0aW50ZXJwcmV0ZXJf
cmVsYXRpdmVwYXRoCisgICAgICAgICAgICBpZiBzZWxmLl9zaG91bGRfdXNlX3N5c19saWJfZGly
ZWN0b3J5IGFuZCBzZWxmLl9pc19zeXN0ZW1fZGVwKG9yaWdfZmlsZSkgYW5kIHR5cGUgbm90IGlu
IFsnaW50ZXJwcmV0ZXInLCAnYmluJ106CisgICAgICAgICAgICAgICAgb2JqZWN0X2ZpbmFsX2Rl
c3RpbmF0aW9uX2RpciA9IG9zLnBhdGguam9pbihvYmplY3RfZmluYWxfZGVzdGluYXRpb25fZGly
LCAnc3lzJykKKyAgICAgICAgICAgIG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIgPSBvcy5w
YXRoLmpvaW4ob2JqZWN0X2ZpbmFsX2Rlc3RpbmF0aW9uX2RpciwgZGlyX3N1ZmZpeCkKKyAgICAg
ICAgaWYgbm90IG9zLnBhdGguaXNkaXIob2JqZWN0X2ZpbmFsX2Rlc3RpbmF0aW9uX2Rpcik6Cisg
ICAgICAgICAgICBvcy5tYWtlZGlycyhvYmplY3RfZmluYWxfZGVzdGluYXRpb25fZGlyKQogCiAg
ICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcmlnX2ZpbGUpOgogICAgICAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcignQ2FuIG5vdCBmaW5kIGZpbGUgJXMnICUgb3JpZ19maWxlKQogCiAgICAg
ICAgIF9sb2cuaW5mbygnQWRkIHRvIGJ1bmRsZSBbJXNdOiAlcycgJSAodHlwZSwgb3JpZ19maWxl
KSkKKworICAgICAgICAjIFByZXNlcnZlIHN5bWxpbmtzIGFuZCBjb3B5IHRoZSB0YXJnZXRzCisg
ICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKG9yaWdfZmlsZSk6CisgICAgICAgICAgICBzeW1saW5r
X3NyY19maWxlID0gb3MucGF0aC5yZWFscGF0aChvcmlnX2ZpbGUpCisgICAgICAgICAgICBzeW1s
aW5rX3NyY19iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3ltbGlua19zcmNfZmlsZSkKKyAg
ICAgICAgICAgIHN5bWxpbmtfZHN0X2Jhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShvcmlnX2Zp
bGUpCisgICAgICAgICAgICBzeW1saW5rX2RzdF9mdWxscGF0aCA9IG9zLnBhdGguam9pbihvYmpl
Y3RfZmluYWxfZGVzdGluYXRpb25fZGlyLCBzeW1saW5rX2RzdF9iYXNlbmFtZSkKKyAgICAgICAg
ICAgIGlmIHN5bWxpbmtfc3JjX2Jhc2VuYW1lICE9IHN5bWxpbmtfZHN0X2Jhc2VuYW1lOgorICAg
ICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgIyBzeW1saW5rX2RzdF9mdWxs
cGF0aCAtPiBzeW1saW5rX3NyY19iYXNlbmFtZQorICAgICAgICAgICAgICAgICAgICBvcy5zeW1s
aW5rKHN5bWxpbmtfc3JjX2Jhc2VuYW1lLCBzeW1saW5rX2RzdF9mdWxscGF0aCkKKyAgICAgICAg
ICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwcmV2
aW91c19zeW1saW5rX3NyY19wYXRoID0gb3MucGF0aC5yZWFscGF0aChzeW1saW5rX2RzdF9mdWxs
cGF0aCkKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfc3ltbGlua19zcmNfYmFzZW5hbWUg
PSBvcy5wYXRoLmJhc2VuYW1lKHByZXZpb3VzX3N5bWxpbmtfc3JjX3BhdGgpCisgICAgICAgICAg
ICAgICAgICAgIGlmIHByZXZpb3VzX3N5bWxpbmtfc3JjX2Jhc2VuYW1lICE9IHN5bWxpbmtfc3Jj
X2Jhc2VuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdO
b3Qgb3ZlcndyaXRpbmcgcHJldmlvdXMgc3ltbGluayAlcyBwb2ludGluZyB0byAlcyB3aXRoIGEg
c3ltbGluayBwb2ludGluZyB0byAlcycgJSAoc3ltbGlua19kc3RfZnVsbHBhdGgsIHByZXZpb3Vz
X3N5bWxpbmtfc3JjX2Jhc2VuYW1lLCBzeW1saW5rX3NyY19iYXNlbmFtZSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuY29weV9hbmRfbWF5YmVfc3RyaXBfcGF0Y2hlbGYoc3ltbGlua19z
cmNfZmlsZSwgdHlwZSwgc3RyaXAsIHBhdGNoZWxmX3JlbW92ZXJwYXRoLCBwYXRjaGVsZl9ub2Rl
ZmF1bHRsaWIsIHBhdGNoZWxmX3NldGludGVycHJldGVyX3JlbGF0aXZlcGF0aCwgb2JqZWN0X2Zp
bmFsX2Rlc3RpbmF0aW9uX2RpcikKKwogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzaHV0aWwu
Y29weShvcmlnX2ZpbGUsIGRlc3RpbmF0aW9uX2RpcikKKyAgICAgICAgICAgIHNodXRpbC5jb3B5
KG9yaWdfZmlsZSwgb2JqZWN0X2ZpbmFsX2Rlc3RpbmF0aW9uX2RpcikKICAgICAgICAgZXhjZXB0
IHNodXRpbC5TYW1lRmlsZUVycm9yOgogICAgICAgICAgICAgIyBNYXkgcmVhc29uYWJseSBoYXBw
ZW4gaWYgdGhlIGNhbGxlciB0cmllcyB0byBidW5kbGUgdGhlIGZpbGVzICdpbiBwbGFjZScuCiAg
ICAgICAgICAgICBwYXNzCiAKLSAgICAgICAgcGF0Y2hfZWxmX2NvbW1hbmQgPSBbJ3BhdGNoZWxm
JywgJy0tcmVtb3ZlLXJwYXRoJywgb3MucGF0aC5qb2luKGRlc3RpbmF0aW9uX2Rpciwgb3MucGF0
aC5iYXNlbmFtZShvcmlnX2ZpbGUpKV0KLSAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKHBhdGNo
X2VsZl9jb21tYW5kKSAhPSAwOgotICAgICAgICAgICAgX2xvZy5lcnJvcignVGhlIHBhdGNoZWxm
IGNvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzJykKKyAgICAgICAgaWYgdHlwZSA9PSAn
aW50ZXJwcmV0ZXInOgorICAgICAgICAgICAgcmV0dXJuICAjIG5vIHN0cmlwL3BhdGNoZWxmIG92
ZXIgaXQKKworICAgICAgICBwYXRjaGVsZl9hcmd1bWVudHMgPSBbXQorICAgICAgICBpZiBwYXRj
aGVsZl9yZW1vdmVycGF0aDoKKyAgICAgICAgICAgIHBhdGNoZWxmX2FyZ3VtZW50cy5hcHBlbmQo
Ii0tcmVtb3ZlLXJwYXRoIikKKyAgICAgICAgaWYgcGF0Y2hlbGZfbm9kZWZhdWx0bGliOgorICAg
ICAgICAgICAgcGF0Y2hlbGZfYXJndW1lbnRzLmFwcGVuZCgiLS1uby1kZWZhdWx0LWxpYiIpCisg
ICAgICAgIGlmIHBhdGNoZWxmX3NldGludGVycHJldGVyX3JlbGF0aXZlcGF0aDoKKyAgICAgICAg
ICAgIHByZXZpb3VzX2N3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgICAgICBvcy5jaGRpcihzZWxm
LmRlc3RpbmF0aW9uX2RpcigpKQorICAgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdGhlIGJhc2Vu
YW1lIG9mIHRoZSBpbnRlcnByZXRlciBiZWNhdXNlIHdlIGFyZSB1cGRhdGluZyBpdAorICAgICAg
ICAgICAgIyB0byB1c2UgYSByZWxhdGl2ZSBwYXRoIGluc2lkZSBsaWIvICh3aGljaCBpcyB3ZXJl
IHdlIGNvcGllZCBpdCBwcmV2aW91c2x5KQorICAgICAgICAgICAgbmV3X2ludGVycHJldGVyX3Jl
bHBhdGggPSBvcy5wYXRoLmpvaW4oJ2xpYicsIG9zLnBhdGguYmFzZW5hbWUocGF0Y2hlbGZfc2V0
aW50ZXJwcmV0ZXJfcmVsYXRpdmVwYXRoKSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlz
ZmlsZShuZXdfaW50ZXJwcmV0ZXJfcmVscGF0aCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignVW5hYmxlIHRvIGZpbmQgaW50ZXJwcmV0ZXIgJXMgYXQgZGlyZWN0b3J5ICVzJyAl
IChuZXdfaW50ZXJwcmV0ZXIsIHNlbGYuZGVzdGluYXRpb25fZGlyKCkpKQorICAgICAgICAgICAg
cGF0Y2hlbGZfYXJndW1lbnRzLmV4dGVuZChbJy0tc2V0LWludGVycHJldGVyJywgbmV3X2ludGVy
cHJldGVyX3JlbHBhdGhdKQorICAgICAgICAgICAgc2VsZi5faGFzX3BhdGNoZWRfaW50ZXJwcmV0
ZXJfcmVscGF0aCA9IFRydWUKKyAgICAgICAgaWYgcGF0Y2hlbGZfYXJndW1lbnRzOgorICAgICAg
ICAgICAgIyBJZiB3ZSBoYXZlIHJlc29sdmVkIHBhdGNoZWxmX2FyZ3VtZW50cyB0aGVuIHdlIHNo
b3VsZCBydW4gcGF0Y2hlbGYKKyAgICAgICAgICAgIHBhdGNoZWxmX2FyZ3VtZW50cy5hcHBlbmQo
b3MucGF0aC5qb2luKG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIsIG9zLnBhdGguYmFzZW5h
bWUob3JpZ19maWxlKSkpCisgICAgICAgICAgICBpZiBub3Qgc2h1dGlsLndoaWNoKCdwYXRjaGVs
ZicpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVW5hYmxlIHRvIGZpbmQg
dGhlICJwYXRjaGVsZiIgY29tbWFuZCBpbiB0aGUgc3lzdGVtLiBQbGVhc2UgaW5zdGFsbCBpdC4n
KQorICAgICAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKFsncGF0Y2hlbGYnXSArIHBhdGNoZWxm
X2FyZ3VtZW50cykgIT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1Ro
ZSAicGF0Y2hlbGYiIGNvbW1hbmQgd2l0aCBhcmd1bWVudHMgIiVzIiByZXR1cm5lZCBub24temVy
byBzdGF0dXMnICUgJyAnLmpvaW4ocGF0Y2hlbGZfYXJndW1lbnRzKSkKKworICAgICAgICAgICAg
aWYgcGF0Y2hlbGZfc2V0aW50ZXJwcmV0ZXJfcmVsYXRpdmVwYXRoOgorICAgICAgICAgICAgICAg
IG9zLmNoZGlyKHByZXZpb3VzX2N3ZCkKKworICAgICAgICAjIHN0cmlwIGhhcyB0byBydW4gYWZ0
ZXIgcGF0Y2hlbGYsIG90aGVyd2lzZSBwYXRjaGVsZiBjb3JydXB0cyB0aGUgYmluYXJ5IHNvbWV0
aW1lcyAod2hlbiAnLS1zZXQtaW50ZXJwcmV0ZXIgaXMgcGFzc2VkKS4KKyAgICAgICAgaWYgc3Ry
aXA6CisgICAgICAgICAgICBpZiBub3Qgc2h1dGlsLndoaWNoKCdzdHJpcCcpOgorICAgICAgICAg
ICAgICAgIF9sb2cud2FybmluZygnVW5hYmxlIHRvIGZpbmQgdGhlIHN0cmlwIGNvbW1hbmQgaW4g
dGhlIHN5c3RlbS4gUGxlYXNlIGluc3RhbGwgaXQuJykKKyAgICAgICAgICAgICAgICByYWlzZSBF
eGNlcHRpb24oJ01pc3NpbmcgcmVxdWlyZWQgcHJvZ3JhbSAic3RyaXAiJykKKyAgICAgICAgICAg
IHN0cmlwX2NvbW1hbmQgPSBbJ3N0cmlwJywgJy0tc3RyaXAtdW5uZWVkZWQnLCBvcy5wYXRoLmpv
aW4ob2JqZWN0X2ZpbmFsX2Rlc3RpbmF0aW9uX2Rpciwgb3MucGF0aC5iYXNlbmFtZShvcmlnX2Zp
bGUpKV0KKyAgICAgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChzdHJpcF9jb21tYW5kKSAhPSAw
OgorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1RoZSBzdHJpcCBjb21tYW5kIHJldHVybmVk
IG5vbi16ZXJvIHN0YXR1cycpCiAKLSAgICAgICAgaWYgc2VsZi5fc2hvdWxkX3N0cmlwX29iamVj
dHM6Ci0gICAgICAgICAgICBpZiBzaHV0aWwud2hpY2goJ3N0cmlwJyk6Ci0gICAgICAgICAgICAg
ICAgc3RyaXBfY29tbWFuZCA9IFsnc3RyaXAnLCAnLS1zdHJpcC11bm5lZWRlZCcsIG9zLnBhdGgu
am9pbihkZXN0aW5hdGlvbl9kaXIsIG9zLnBhdGguYmFzZW5hbWUob3JpZ19maWxlKSldCi0gICAg
ICAgICAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKHN0cmlwX2NvbW1hbmQpICE9IDA6Ci0gICAg
ICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1RoZSBzdHJpcCBjb21tYW5kIHJldHVybmVkIG5v
bi16ZXJvIHN0YXR1cycpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIF9sb2cu
d2FybmluZygnc3RyaXAgbm90IGZvdW5kLiBOb3Qgc3RyaXBwaW5nIG9iamVjdCcpCisgICAgZGVm
IGRlc3RpbmF0aW9uX2RpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Rlc3RpbmF0aW9u
X2RpcgogCiAgICAgZGVmIGdlbmVyYXRlX3dyYXBwZXJfc2NyaXB0KHNlbGYsIGludGVycHJldGVy
LCBiaW5hcnlfdG9fd3JhcCwgZXh0cmFfZW52aXJvbm1lbnRfdmFyaWFibGVzPXt9KToKICAgICAg
ICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzZWxmLl9kZXN0aW5hdGlvbl9k
aXIsICdiaW4nLCBiaW5hcnlfdG9fd3JhcCkpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVy
cm9yKCdDYW5ub3QgZmluZCBiaW5hcnkgdG8gd3JhcCBmb3IgJXMnICUgYmluYXJ5X3RvX3dyYXAp
CiAgICAgICAgIF9sb2cuaW5mbygnR2VuZXJhdGUgd3JhcHBlciBzY3JpcHQgJXMnICUgYmluYXJ5
X3RvX3dyYXApCiAgICAgICAgIHNjcmlwdF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX2Rlc3Rp
bmF0aW9uX2RpciwgYmluYXJ5X3RvX3dyYXApCisgICAgICAgIGxpYl9kaXIgPSBvcy5wYXRoLmpv
aW4oc2VsZi5fZGVzdGluYXRpb25fZGlyLCAnbGliJykKKyAgICAgICAgc3lzbGliX2RpciA9IG9z
LnBhdGguam9pbihzZWxmLl9kZXN0aW5hdGlvbl9kaXIsICdzeXMvbGliJykKKyAgICAgICAgYmlu
X2RpciA9IG9zLnBhdGguam9pbihzZWxmLl9kZXN0aW5hdGlvbl9kaXIsICdiaW4nKQorICAgICAg
ICBzaGFyZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fZGVzdGluYXRpb25fZGlyLCAnc3lzL3No
YXJlJykKIAogICAgICAgICB3aXRoIG9wZW4oc2NyaXB0X2ZpbGUsICd3JykgYXMgc2NyaXB0X2hh
bmRsZToKICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJyMhL2Jpbi9zaFxuJykKICAg
ICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJyVzPSIkKGRpcm5hbWUgJChyZWFkbGluayAt
ZiAkMCkpIlxuJyAlIHNlbGYuVkFSX01ZRElSKQotICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53
cml0ZSgnZXhwb3J0IExEX0xJQlJBUllfUEFUSD0iJHslc30vbGliIlxuJyAlIHNlbGYuVkFSX01Z
RElSKQogCi0gICAgICAgICAgICBpZiBpbnRlcnByZXRlciBpcyBub3QgTm9uZToKLSAgICAgICAg
ICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdJTlRFUlBSRVRFUj0iJHslc30vbGliLyVzIlxu
JyAlIChzZWxmLlZBUl9NWURJUiwgb3MucGF0aC5iYXNlbmFtZShpbnRlcnByZXRlcikpKQorICAg
ICAgICAgICAgaWYgc2VsZi5faGFzX3BhdGNoZWRfaW50ZXJwcmV0ZXJfcmVscGF0aDoKKyAgICAg
ICAgICAgICAgICAjIFRoZSBpbnRlcnByZXJ0ZXIgKHNlY3Rpb24gUFRfSU5URVJQIGluIEVMRiBi
aW5hcnkpIG5lZWRzIHRvIGJlIGEgcHJlLWRlZmluZWQgcGF0aAorICAgICAgICAgICAgICAgICMg
U28gdGhlIG9ubHkgd2F5IG9mIHVzaW5nIG91ciBpbnRlcnByZXRlciBpbiBhbiB1bmtub3duIGRl
c3RpbmF0aW9uIGRpciBpcyB0byB1c2UgcmVsYXRpdmUgcGF0aHMKKyAgICAgICAgICAgICAgICAj
IEZvciByZWxhdGl2ZSBwYXRocyB0byB3b3JrLCB3ZSBuZWVkIHRvIENEIGludG8gdGhlIG1haW4g
YmFzZWRpciwgYnV0IGRvaW5nIHRoYXQgbWF5IGJyZWFrCisgICAgICAgICAgICAgICAgIyBhbnkg
cGFyYW1ldGVyIHRoZSB1c2VyIGhhcyBwYXNzZWQgYXMgYSByZWxhdGl2ZSBwYXRoIHRvIHdoZXJl
IHNoZSBpcyB3b3JraW5nIChsaWtlIGEgcmVscGF0aCB0byBzb21lIGh0bWwgZmlsZSkKKyAgICAg
ICAgICAgICAgICAjIFNvIHdlIHRyeSB0byB1cGRhdGUgdGhlIGFyZ3VtZW50cyByZXNvbHZpbmcg
cmVsYXRpdmUgcGF0aHMgdG8gYWJzb2x1dGUgYmVmb3JlIGV4ZWN1dGluZyB0aGUgcHJvZ3JhbQor
ICAgICAgICAgICAgICAgICMgVHJpY2sgdG8gdXBkYXRlIHRoZSBhcmd1bWVudHMgaW5zcGlyZWQg
ZnJvbSBodHRwczovL3VuaXguc3RhY2tleGNoYW5nZS5jb20vYS80MjExNjAKKyAgICAgICAgICAg
ICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCcjIFNoaXBwZWQgYmluYXJpZXMgaGF2ZSBhIHJlbHBh
dGggdG8gdGhlIGludGVycHJldGVyLCBzbyB1cGRhdGUgcGFzc2VkIGFyZ3Mgd2l0aCBmdWxscGF0
aHMgYW5kIGNkIHRvICR7TVlESVJ9XG4nKQorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUu
d3JpdGUoJ2FyZ3NfdXBkYXRlX3JlbHBhdGhzX3RvX2FicygpIHtcbicpCisgICAgICAgICAgICAg
ICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnICAgIGZvciBhcmcgaW4gIiRAIjsgZG9cbicpCisgICAg
ICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnICAgICAgWyAtZSAiJHthcmd9IiAtYSAi
JHthcmd9IiAhPSAiJHthIy99IiBdICYmIGFyZz0iJChyZWFkbGluayAtZiAiJHthcmd9IikiXG4n
KQorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJyAgICAgIHByaW50ZiAlcyAi
JHthcmd9IiB8IHNlZCAicy9cJy9cJ1xcXFxcXFxcXCdcJy9nOzFzL14vXCcvO1xcJHMvXFwkL1wn
IC8iXG4nKQorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJyAgICBkb25lXG4n
KQorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2VjaG8gIiAiXG4nKQorICAg
ICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ31cbicpCisgICAgICAgICAgICAgICAg
c2NyaXB0X2hhbmRsZS53cml0ZSgnZXZhbCAic2V0IC0tICIkKGFyZ3NfdXBkYXRlX3JlbHBhdGhz
X3RvX2FicyAiJEAiKSIiXG4nKQorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUo
J2NkICIke01ZRElSfSJcbicpCisKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBh
dGguam9pbihzaGFyZV9kaXIsICdjZXJ0cy9idW5kbGUtY2EtY2VydGlmaWNhdGVzLnBlbScpKToK
KyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCcjIFRyeSB0byB1c2UgdGhlIHN5
c3RlbSBDQSBmaWxlIGlmIHBvc3NpYmxlLCBvdGhlcndpc2UgdXNlIHRoZSBidW5kbGVkIG9uZVxu
JykKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdmb3IgV0VCS0lUX1RMU19D
QUZJTEVfUEVNIGluIC9ldGMvc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQgL2V0Yy9zc2wv
Y2VydC5wZW0gL2V0Yy9wa2kvY2EtdHJ1c3QvZXh0cmFjdGVkL3BlbS90bHMtY2EtYnVuZGxlLnBl
bSAiJHtNWURJUn0vc3lzL3NoYXJlL2NlcnRzL2J1bmRsZS1jYS1jZXJ0aWZpY2F0ZXMucGVtIjsg
ZG9cbicpCisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnICAgIFsgLWYgIiR7
V0VCS0lUX1RMU19DQUZJTEVfUEVNfSIgXSAmJiBncmVwIC1xICJCRUdJTiBDRVJUSUZJQ0FURSIg
IiR7V0VCS0lUX1RMU19DQUZJTEVfUEVNfSIgJiYgZXhwb3J0IFdFQktJVF9UTFNfQ0FGSUxFX1BF
TSAmJiBicmVha1xuJykKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdkb25l
XG4nKQogCi0gICAgICAgICAgICAjIE1heSB1c2UgdGhlIHZhbHVlIG9mIElOVEVSUFJFVEVSLCBz
byBoYXMgdG8gY29tZSBhZnRlcgotICAgICAgICAgICAgIyB0aGUgZGVmaW5pdGlvbi4KICAgICAg
ICAgICAgIGZvciB2YXIsIHZhbHVlIGluIGV4dHJhX2Vudmlyb25tZW50X3ZhcmlhYmxlcy5pdGVt
cygpOgotICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2V4cG9ydCAlcz1cIiVz
XCJcbicgJSAodmFyLCB2YWx1ZSkpCi0KLSAgICAgICAgICAgIGlmIGludGVycHJldGVyIGlzIG5v
dCBOb25lOgotICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2V4ZWMgIiR7SU5U
RVJQUkVURVJ9IiAiJHslc30vYmluLyVzIiAiJEAiXG4nICUgKHNlbGYuVkFSX01ZRElSLCBiaW5h
cnlfdG9fd3JhcCkpCi0gICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNjcmlwdF9o
YW5kbGUud3JpdGUoJ2V4cG9ydCAlcz0iJXMiXG4nICUgKHZhciwgdmFsdWUpKQorCisgICAgICAg
ICAgICBpZiBvcy5wYXRoLmlzZGlyKHN5c2xpYl9kaXIpOgorICAgICAgICAgICAgICAgICMgUHJl
ZmZlciB0byB1c2UgdGhlIHN5c3RlbSBYS0IgZGF0YSBmaWxlcywgYnV0IGlmIHRoZXkgYXJlIG5v
dCBvbiB0aGUgZXhwZWN0ZWQgbG9jYXRpb24gdXNlIG91ciBvd24uCisgICAgICAgICAgICAgICAg
eGtiX2J1bmRsZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0
ZGlyKHN5c2xpYl9kaXIpOgorICAgICAgICAgICAgICAgICAgICBpZiBlbnRyeS5zdGFydHN3aXRo
KCdsaWJ4a2Jjb21tb24uc28nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHhrYl9idW5kbGVk
ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBp
ZiB4a2JfYnVuZGxlZDoKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG9zLnBhdGguaXNkaXIo
b3MucGF0aC5qb2luKHNoYXJlX2RpciwgJ3hrYicpKQorICAgICAgICAgICAgICAgICAgICBzY3Jp
cHRfaGFuZGxlLndyaXRlKCdbIC1kIC91c3Ivc2hhcmUvWDExL3hrYiBdIHx8IGV4cG9ydCBYS0Jf
Q09ORklHX1JPT1Q9IiR7JXN9L3N5cy9zaGFyZS94a2IiXG4nICUgc2VsZi5WQVJfTVlESVIpCisK
KyAgICAgICAgICAgIGxkX2xpYnJhcnlfcGF0aCA9ICckeyVzfS9saWInICUgc2VsZi5WQVJfTVlE
SVIKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc3lzbGliX2Rpcik6CisgICAgICAgICAg
ICAgICAgbGRfbGlicmFyeV9wYXRoICs9ICc6JHslc30vc3lzL2xpYicgJSBzZWxmLlZBUl9NWURJ
UgorCisgICAgICAgICAgICAjIFVwZGF0ZSBjYWNoZSBvZiBnZGstcGl4YnVmIGxvYWRlcnMgaWYg
bmVlZGVkIChmaXJzdCBydW4gb3Igd2hlbiB0aGUgYWJzb2x1dGUgcGF0aHMgb24gZGlzayBoYXZl
IGNoYW5nZWQpLgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc3lz
bGliX2RpciwgJ2dkay1waXhidWYvbG9hZGVycycpKToKKyAgICAgICAgICAgICAgICBzY3JpcHRf
aGFuZGxlLndyaXRlKCdleHBvcnQgR0RLX1BJWEJVRl9NT0RVTEVESVI9IiR7JXN9L3N5cy9saWIv
Z2RrLXBpeGJ1Zi9sb2FkZXJzIlxuJyAlIHNlbGYuVkFSX01ZRElSKQorICAgICAgICAgICAgICAg
IHNjcmlwdF9oYW5kbGUud3JpdGUoJ2V4cG9ydCBHREtfUElYQlVGX01PRFVMRV9GSUxFPSIkeyVz
fS9zeXMvbGliL2dkay1waXhidWYvbG9hZGVycy5jYWNoZSJcbicgJSBzZWxmLlZBUl9NWURJUikK
KyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdncmVwIC1zcSAiXFwiJHtHREtf
UElYQlVGX01PRFVMRURJUn0vIiAiJHtHREtfUElYQlVGX01PRFVMRV9GSUxFfSIgfHwgTERfTElC
UkFSWV9QQVRIPSIlcyIgIiR7JXN9L2Jpbi9nZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMiIC0tdXBk
YXRlLWNhY2hlXG4nICUgKGxkX2xpYnJhcnlfcGF0aCwgc2VsZi5WQVJfTVlESVIpKQorCisgICAg
ICAgICAgICAjIFNhbWUgZm9yIGd0ayBpbW1vZHVsZXMgY2FjaGUKKyAgICAgICAgICAgIGlmIG9z
LnBhdGguaXNkaXIob3MucGF0aC5qb2luKHN5c2xpYl9kaXIsICdndGsvaW1tb2R1bGVzJykpOgor
ICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2V4cG9ydCBHVEtfSU1fTU9EVUxF
X0RJUj0iJHslc30vc3lzL2xpYi9ndGsvaW1tb2R1bGVzIlxuJyAlIHNlbGYuVkFSX01ZRElSKQor
ICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2V4cG9ydCBHVEtfSU1fTU9EVUxF
X0ZJTEU9IiR7JXN9L3N5cy9saWIvZ3RrL2ltbW9kdWxlcy9pbW1vZHVsZXMuY2FjaGUiXG4nICUg
c2VsZi5WQVJfTVlESVIpCisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnZ3Jl
cCAtc3EgIlxcIiR7R1RLX0lNX01PRFVMRV9ESVJ9LyIgIiR7R1RLX0lNX01PRFVMRV9GSUxFfSIg
fHwgTERfTElCUkFSWV9QQVRIPSIlcyIgIiR7JXN9L2Jpbi9ndGstcXVlcnktaW1tb2R1bGVzLTMu
MCIgLS11cGRhdGUtY2FjaGUgIiR7R1RLX0lNX01PRFVMRV9ESVJ9Ii8qLnNvXG4nICUgKGxkX2xp
YnJhcnlfcGF0aCwgc2VsZi5WQVJfTVlESVIpKQorCisgICAgICAgICAgICAjIExEX0xJQlJBUllf
UEFUSCBpcyBzZXQgYXQgdGhlIGVuZCwganVzdCBiZWZvcmUgdGhlIGV4ZWMoKSBjYWxsIGFuZCBi
ZWZvcmUgY2FsbGluZyBwcm9ncmFtcyBidW5kbGVkLCBvdGhlcndpc2UgaXQgbWF5IGJyZWFrIGNv
bW1hbmRzIGZyb20gdGhlIHN5c3RlbSBsaWtlIHNjcmlwdCdzIHVzYWdlIG9mIHNlZC9yZWFkbGlu
ay9ncmVwCisgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdleHBvcnQgTERfTElCUkFS
WV9QQVRIPSIlcyJcbicgJSBsZF9saWJyYXJ5X3BhdGgpCisgICAgICAgICAgICBkbG9wZW53cmFw
X2xpYm5hbWUgPSAnZGxvcGVud3JhcC5zbycKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxl
KG9zLnBhdGguam9pbihsaWJfZGlyLCBkbG9wZW53cmFwX2xpYm5hbWUpKToKKyAgICAgICAgICAg
ICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdleHBvcnQgTERfUFJFTE9BRD0iJHslc30vbGliLyVz
IlxuJyAlIChzZWxmLlZBUl9NWURJUiwgZGxvcGVud3JhcF9saWJuYW1lKSkKKyAgICAgICAgICAg
ICMgSWYgd2UgaGF2ZSBwYXRjaGVkIHRoZSBiaW5hcmllcyB0byB1c2UgYSByZWxhdGl2ZSByZWxw
YXRoIHRoZW4gbG9hZCB0aGUgYmluYXJ5IGRpcmVjdGx5IHdpdGhvdXQgcHJlZml4aW5nIGl0IHdp
dGggdGhlIGludGVycHJldGVyIChpdCBhbGxvd3MgdGhlIHByb2Nlc3MgdG8gdXNlIHRoZSBjb3Jy
ZWN0IHByb2duYW1lKQorICAgICAgICAgICAgaWYgc2VsZi5faGFzX3BhdGNoZWRfaW50ZXJwcmV0
ZXJfcmVscGF0aDoKICAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdleGVjICIk
eyVzfS9iaW4vJXMiICIkQCJcbicgJSAoc2VsZi5WQVJfTVlESVIsIGJpbmFyeV90b193cmFwKSkK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgn
SU5URVJQUkVURVI9IiR7JXN9L2xpYi8lcyJcbicgJSAoc2VsZi5WQVJfTVlESVIsIG9zLnBhdGgu
YmFzZW5hbWUoaW50ZXJwcmV0ZXIpKSkKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndy
aXRlKCdleGVjICIke0lOVEVSUFJFVEVSfSIgIiR7JXN9L2Jpbi8lcyIgIiRAIlxuJyAlIChzZWxm
LlZBUl9NWURJUiwgYmluYXJ5X3RvX3dyYXApKQogCiAgICAgICAgIG9zLmNobW9kKHNjcmlwdF9m
aWxlLCAwbzc1NSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1
bmRsaW5nL2Rsb3BlbndyYXAvTWFrZWZpbGUgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JpbmFy
eV9idW5kbGluZy9kbG9wZW53cmFwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzMDc1Yzg5NGIwMTAw
MmY0MjM4YjNkY2YwMWVlMGMyNDNhMWQ4MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2JpbmFyeV9idW5kbGluZy9kbG9wZW53cmFwL01ha2VmaWxlCkBAIC0wLDAg
KzEsMTYgQEAKK1RISVNfRElSIDo9ICQoc3RyaXAgJChzaGVsbCBkaXJuYW1lICQocmVhbHBhdGgg
JChsYXN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkpKQorQ0MgPSBnY2MKK0NGTEFHUyA9IC1mUElD
IC1XYWxsIC1XZXh0cmEgLU8yCitMREZMQUdTID0gLW5vc3RhcnRmaWxlcyAtc2hhcmVkIC1sZGwK
K1JNID0gcm0gLWYKK1RBUkdFVF9MSUIgPSBkbG9wZW53cmFwLnNvCitTUkNTID0gJChUSElTX0RJ
UikvZGxvcGVud3JhcC5jCisKK2FsbDogJHtUQVJHRVRfTElCfQorCiskKFRBUkdFVF9MSUIpOiAk
KFNSQ1MpCisJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLVdsLC1zb25hbWUsJEAgLW8gJEAg
JF4KKworLlBIT05ZOiBjbGVhbgorY2xlYW46CisJLSR7Uk19ICR7VEFSR0VUX0xJQn0KZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5nL2Rsb3BlbndyYXAv
UkVBRE1FLnR4dCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5nL2Rsb3Bl
bndyYXAvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMGRmNjkyODA1MTE1NDkxODg5ODllMjY3ZGQ3
OGUwNzRmNDU2YjE2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9i
aW5hcnlfYnVuZGxpbmcvZGxvcGVud3JhcC9SRUFETUUudHh0CkBAIC0wLDAgKzEsOSBAQAorVGhp
cyBpcyBhIHNoYXJlZCBsaWJyYXJ5IHRvIHdyYXAgZGxvcGVuKCkgYW5kIGRsbW9wZW4oKSBmdW5j
dGlvbiBjYWxscworYW5kIHJld3JpdGUgdGhlIHBhdGhzIGxvYWRlZCB0byBlbnN1cmUgdGhhdCB0
aGUgbGlicmFyeSBsb2FkZWQgaXMgaW5zaWRlCitMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQg
dmFyaWFibGVzLgorCitJdCBpcyB1c2VkIGJ5IHRoZSBzY3JpcHQgZ2VuZXJhdGUtYnVuZGxlIHRo
YXQgYnVpbGRzIHRoaXMgbGlicmFyeSBhbmQgYWRkcworaXQgdG8gYmUgcHJlbG9hZGVkIGludG8g
dGhlIHdyYXBwZXIgc2NyaXB0IHRoYXQgZXhlY3V0ZXMgdGhlIGJyb3dzZXIuCisKK1NldCB0aGUg
ZW52aXJvbm1lbnQgdmFyaWFibGUgRExPUEVOX1dSQVBfREVCVUc9MSBvciBETE9QRU5fV1JBUF9E
RUJVRz0yCit0byBnZXQgZXJyb3IvZGVidWcgb3V0cHV0IGZyb20gdGhpcyBsaWJyYXJ5LgpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iaW5hcnlfYnVuZGxpbmcvZGxvcGVud3Jh
cC9kbG9wZW53cmFwLmMgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JpbmFyeV9idW5kbGluZy9k
bG9wZW53cmFwL2Rsb3BlbndyYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNGRlMGJjNDgzMTgzYjJkNWUxZGU2
M2NiM2E5NmIxNTdmNWUzYmRlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9iaW5hcnlfYnVuZGxpbmcvZGxvcGVud3JhcC9kbG9wZW53cmFwLmMKQEAgLTAsMCArMSwz
MjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNlbmRp
ZgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8ZXJy
bm8uaD4KKyNpbmNsdWRlIDxsaWJnZW4uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRl
IDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lu
Y2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5p
c3RkLmg+CisKKyNkZWZpbmUgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZXJyb3JfbXNnKGZtdCwgLi4u
KSBcCisgICAgZG8geyBcCisgICAgICAgIGlmIChkbG9wZW5fd3JhcHBlcl9kZWJ1Z19wcmludCA+
PSAxKSBcCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIltwaWQ9JWRdIEVSUk9SIGF0IGRs
b3BlbndyYXAuc286ICIgZm10LCBnZXRwaWQoKSwgX19WQV9BUkdTX18pOyBcCisgICAgfSB3aGls
ZSAoMCkKKworI2RlZmluZSBkbG9wZW5fd3JhcHBlcl9wcmludF9kZWJ1Z19tc2coZm10LCAuLi4p
IFwKKyAgICBkbyB7IFwKKyAgICAgICAgaWYgKGRsb3Blbl93cmFwcGVyX2RlYnVnX3ByaW50ID49
IDIpIFwKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiW3BpZD0lZF0gZGxvcGVud3JhcC5z
bzogIiBmbXQsIGdldHBpZCgpLCBfX1ZBX0FSR1NfXyk7IFwKKyAgICB9IHdoaWxlICgwKQorCitz
dGF0aWMgaW50IGRsb3Blbl93cmFwcGVyX2RlYnVnX3ByaW50ID0gLTE7CitzdGF0aWMgaW50IGRs
b3Blbl93cmFwcGVyX2NhbGxfcmVhbF9kbGVycm9yID0gMTsKK3N0YXRpYyBjaGFyKiAoKl9fcmVh
bF9kbGVycm9yKSh2b2lkKSA9IE5VTEw7CisKKy8vIFJldHVybnMgdGhlIHN0cmluZyAiZGlybmFt
ZS9maWxlbmFtZSIgaW50byB0aGUgYnVmZmVyIHBhdGhfam9pbnRfZGVzdAordm9pZCBkbG9wZW5f
d3JhcHBlcl9wYXRoX2pvaW4oY29uc3QgY2hhciogZGlybmFtZSwgY29uc3QgY2hhciogZmlsZW5h
bWUsIGNoYXIqIHBhdGhfam9pbnRfZGVzdCkKK3sKKyAgICBwYXRoX2pvaW50X2Rlc3QgPSBzdHJu
Y3B5KHBhdGhfam9pbnRfZGVzdCwgZGlybmFtZSwgUEFUSF9NQVgpOworICAgIC8vIGFkZCBhIHNs
YXNoIGlmIG5lZWRlZAorICAgIGlmICgqKHBhdGhfam9pbnRfZGVzdCArIHN0cmxlbihkaXJuYW1l
KSAtIDEpICE9ICcvJykgeworICAgICAgICAqKHBhdGhfam9pbnRfZGVzdCArIHN0cmxlbihkaXJu
YW1lKSkgPSAnLyc7CisgICAgICAgICoocGF0aF9qb2ludF9kZXN0ICsgc3RybGVuKGRpcm5hbWUp
ICsgMSkgPSAwOworICAgIH0KKyAgICBzdHJuY2F0KHBhdGhfam9pbnRfZGVzdCwgZmlsZW5hbWUs
IFBBVEhfTUFYKTsKK30KKworaW50IGlzX2Rpcih1bnNpZ25lZCBjaGFyIGRfdHlwZSwgY29uc3Qg
Y2hhciogZmlsZXBhdGgpCit7CisgICAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKyAgICAvLyB3ZSBj
b25zaWRlciBhIHN5bWJvbGljIGxpbmsgdG8gYSBkaXIgYXMgYSBkaXIsIGFsc28gaGFuZGxlIHVu
a25vd24uCisgICAgaWYgKGRfdHlwZSA9PSBEVF9VTktOT1dOIHx8IGRfdHlwZSA9PSBEVF9MTksp
IHsKKyAgICAgICAgaWYgKHN0YXQoZmlsZXBhdGgsICZzdGF0YnVmKSkKKyAgICAgICAgICAgIGRs
b3Blbl93cmFwcGVyX3ByaW50X2Vycm9yX21zZygiQ2FsbGluZyBzdGF0IG9uIFwiJXNcIjogJXNc
biIsIGZpbGVwYXRoLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gU19JU0RJUihz
dGF0YnVmLnN0X21vZGUpOworICAgIH0KKyAgICByZXR1cm4gKGRfdHlwZSA9PSBEVF9ESVIpOwor
fQorCisvLyBSZWN1cnNpdmUgZnVuY3Rpb24gdG8gdHJhdmVyc2UgYSBkaXJlY3RvcnkgYW5kIG9i
dGFpbiB0aGUgcGF0aCBvZiB0aGUgZmlyc3QgZmlsZSBuYW1lZCAiZmlsZW5hbWUiCisvLyBJdCB3
cml0ZXMgdGhhdCBwYXRoIHRvIHRoZSBidWZmZXIgImNhbmRpZGF0ZV9wYXRoX2Rlc3QiIGlmIHRo
ZSBmaWxlIGlzIGZvdW5kIChyZXR1cm4gPT0gMSkuCisvLyBJZiB0aGUgZmlsZSBpcyBub3QgZm91
bmQgaXQgcmV0dXJucyAwIGFuZCB0aGUgY29udGVudHMgb2YgImNhbmRpZGF0ZV9wYXRoX2Rlc3Qi
IGFyZSB1bmRlZmluZWQuCitpbnQgZGxvcGVuX3dyYXBwZXJfcmVjdXJzaXZlX2ZpbmQoY29uc3Qg
Y2hhciogZmlsZW5hbWVfdG9fZmluZCwgY29uc3QgY2hhciogZGlyZWN0b3J5X3RvX3NlYXJjaCwg
Y2hhciogY2FuZGlkYXRlX3BhdGhfZGVzdCkKK3sKKworICAgIERJUiAqZHA7CisgICAgc3RydWN0
IGRpcmVudCogZW50cnk7CisKKyAgICBjaGFyIHN1YmRpcmVjdG9yeV90b19zZWFyY2hbUEFUSF9N
QVhdOworICAgIGRwID0gb3BlbmRpcihkaXJlY3RvcnlfdG9fc2VhcmNoKTsKKworICAgIGlmICgh
ZHApIHsKKyAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZXJyb3JfbXNnKCJPcGVuaW5nIGRp
cmVjdG9yeSBcIiVzXCI6ICVzXG4iLCBkaXJlY3RvcnlfdG9fc2VhcmNoLCBzdHJlcnJvcihlcnJu
bykpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB3aGlsZSAoMSkgeworICAgICAg
ICBlcnJubyA9IDA7CisgICAgICAgIGVudHJ5ID0gcmVhZGRpcihkcCk7CisgICAgICAgIGlmICgh
ZW50cnkpIHsKKyAgICAgICAgICAgIGlmIChlcnJubykKKyAgICAgICAgICAgICAgICBkbG9wZW5f
d3JhcHBlcl9wcmludF9lcnJvcl9tc2coIlJlYWRpbmcgZGlyZWN0b3J5IFwiJXNcIjogJXNcbiIs
IGRpcmVjdG9yeV90b19zZWFyY2gsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3RyY21wKGVudHJ5LT5kX25hbWUsICIuIikg
fHwgIXN0cmNtcChlbnRyeS0+ZF9uYW1lLCAiLi4iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGRsb3Blbl93cmFwcGVyX3BhdGhfam9pbihkaXJlY3RvcnlfdG9fc2VhcmNoLCBl
bnRyeS0+ZF9uYW1lLCBjYW5kaWRhdGVfcGF0aF9kZXN0KTsKKworICAgICAgICBpZiAoaXNfZGly
KGVudHJ5LT5kX3R5cGUsIGNhbmRpZGF0ZV9wYXRoX2Rlc3QpKSB7CisgICAgICAgICAgICBkbG9w
ZW5fd3JhcHBlcl9wYXRoX2pvaW4oZGlyZWN0b3J5X3RvX3NlYXJjaCwgZW50cnktPmRfbmFtZSwg
c3ViZGlyZWN0b3J5X3RvX3NlYXJjaCk7CisgICAgICAgICAgICBpZiAoZGxvcGVuX3dyYXBwZXJf
cmVjdXJzaXZlX2ZpbmQoZmlsZW5hbWVfdG9fZmluZCwgc3ViZGlyZWN0b3J5X3RvX3NlYXJjaCwg
Y2FuZGlkYXRlX3BhdGhfZGVzdCkpIHsKKyAgICAgICAgICAgICAgICBjbG9zZWRpcihkcCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZiAoIXN0cmNtcChmaWxlbmFtZV90b19maW5kLCBlbnRyeS0+ZF9uYW1l
KSkgeworICAgICAgICAgICAgICAgIGlmICghYWNjZXNzKGNhbmRpZGF0ZV9wYXRoX2Rlc3QsIEZf
T0sgfCBSX09LKSkgeworICAgICAgICAgICAgICAgICAgICBjbG9zZWRpcihkcCk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBkbG9wZW5fd3JhcHBlcl9wcmludF9lcnJvcl9tc2coIkFjY2VzcyBkZW5pZWQgdG8gY2FuZGlk
YXRlIGxpYnJhcnkgXCIlc1wiXG4iLCBjYW5kaWRhdGVfcGF0aF9kZXN0KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjbG9zZWRpcihkcCk7CisgICAgcmV0dXJuIDA7Cit9
CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBmaWxlbmFtZV9vcmlnaW5hbF9w
YXRoIGlzIGEgcGF0aCBhbmQgaXMgaW5zaWRlIGxpYmRpci4KKy8vIElmIGl0IGNhbid0IGZpbmQg
dGhlIGZpbGUgZGlyZWN0bHkgYnkgdGhlIHBhdGgsIGl0IGNhbGxzIGRsb3Blbl93cmFwcGVyX3Jl
Y3Vyc2l2ZV9maW5kKCkgdG8gc2VhcmNoIGl0LgorLy8gSXQgd3JpdGVzIHRoZSBwYXRoIHRvIHRo
ZSBidWZmZXIgInBhdGhfZm91bmRfZGVzdCIgaWYgdGhlIGZpbGUgaXMgZm91bmQgKHJldHVybiA9
PSAxKS4KKy8vIElmIHRoZSBmaWxlIGlzIG5vdCBmb3VuZCBpdCByZXR1cm5zIDAgYW5kIHRoZSBj
b250ZW50cyBvZiAicGF0aF9mb3VuZF9kZXN0IiBhcmUgdW5kZWZpbmVkLgoraW50IGRsb3Blbl93
cmFwcGVyX2dldF9wYXRoX2Zvcl9maWxlX3VuZGVyX2Rpcihjb25zdCBjaGFyKiBmaWxlbmFtZV9v
cmlnaW5hbF9wYXRoLCBjb25zdCBjaGFyKiBsaWJkaXIsIGNoYXIqIHBhdGhfZm91bmRfZGVzdCkK
K3sKKworICAgIC8vIGJhc2VuYW1lKCkgbWF5IG1vZGlmeSB0aGUgYnVmZmVyIHBhc3NlZCBvbiB0
aGUgZmlyc3QgYXJndW1lbnQKKyAgICBjaGFyICpvcmlnaW5hbF9wYXRoID0gc3RyZHVwKGZpbGVu
YW1lX29yaWdpbmFsX3BhdGgpOworICAgIGNoYXIgKmJhc2VfZmlsZV90b19kbG9wZW5fd3JhcHBl
cl9maW5kID0gYmFzZW5hbWUob3JpZ2luYWxfcGF0aCk7CisgICAgaW50IHJldGNvZGUgPSAxOwor
ICAgIGludCBmaWxlbmFtZV9pc19hYnNvbHV0ZSA9ICgqZmlsZW5hbWVfb3JpZ2luYWxfcGF0aCA9
PSAnLycpOworICAgIGludCBmaWxlbmFtZV9pc19yZWxhdGl2ZSA9IDA7CisgICAgaWYgKCFmaWxl
bmFtZV9pc19hYnNvbHV0ZSkgeworICAgICAgICBmb3IgKGNoYXIqIGN1cnJlbnRfY2hhciA9IChj
aGFyKilmaWxlbmFtZV9vcmlnaW5hbF9wYXRoOyAqY3VycmVudF9jaGFyOyArK2N1cnJlbnRfY2hh
cikgeworICAgICAgICAgICAgaWYgKCpjdXJyZW50X2NoYXIgPT0gJy8nKSB7CisgICAgICAgICAg
ICAgICAgZmlsZW5hbWVfaXNfcmVsYXRpdmUgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZpbGVuYW1lX2lzX2Fi
c29sdXRlKSB7CisgICAgICAgIGlmICghc3RybmNtcChmaWxlbmFtZV9vcmlnaW5hbF9wYXRoLCBs
aWJkaXIsIHN0cmxlbihsaWJkaXIpKSkgeworICAgICAgICAgICAgaWYgKCFhY2Nlc3MoZmlsZW5h
bWVfb3JpZ2luYWxfcGF0aCwgRl9PSyB8IFJfT0spKSB7CisgICAgICAgICAgICAgICAgZGxvcGVu
X3dyYXBwZXJfcHJpbnRfZGVidWdfbXNnKCJGaWxlbmFtZSBcIiVzXCIgZm91bmQgdW5kZXIgZGly
ZWN0b3J5IFwiJXNcIiB3aXRob3V0IGFueSBwYXRoIHJld3JpdGluZ1xuIiwgZmlsZW5hbWVfb3Jp
Z2luYWxfcGF0aCwgbGliZGlyKTsKKyAgICAgICAgICAgICAgICBzdHJuY3B5KHBhdGhfZm91bmRf
ZGVzdCwgZmlsZW5hbWVfb3JpZ2luYWxfcGF0aCwgUEFUSF9NQVgpOworICAgICAgICAgICAgICAg
IHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRsb3Blbl93cmFw
cGVyX3ByaW50X2RlYnVnX21zZygiRmlsZW5hbWUgXCIlc1wiIE5PVCBmb3VuZCB1bmRlciBkaXJl
Y3RvcnkgXCIlc1wiLiBXaWxsIHRyeSBhIHNlYXJjaCB3aXRoIGJhc2VuYW1lXG4iLCBmaWxlbmFt
ZV9vcmlnaW5hbF9wYXRoLCBsaWJkaXIpOworICAgIH0gZWxzZSBpZiAoZmlsZW5hbWVfaXNfcmVs
YXRpdmUpIHsKKyAgICAgICAgZGxvcGVuX3dyYXBwZXJfcGF0aF9qb2luKGxpYmRpciwgZmlsZW5h
bWVfb3JpZ2luYWxfcGF0aCwgcGF0aF9mb3VuZF9kZXN0KTsKKyAgICAgICAgaWYgKCFhY2Nlc3Mo
cGF0aF9mb3VuZF9kZXN0LCBGX09LIHwgUl9PSykpIHsKKyAgICAgICAgICAgIGRsb3Blbl93cmFw
cGVyX3ByaW50X2RlYnVnX21zZygiRmlsZW5hbWUgXCIlc1wiIGNvbnZlcnRlZCB0byBcIiVzXCIg
YW5kIGZvdW5kIHVuZGVyIGRpcmVjdG9yeSBcIiVzXCJcbiIsIGZpbGVuYW1lX29yaWdpbmFsX3Bh
dGgsIHBhdGhfZm91bmRfZGVzdCwgbGliZGlyKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICB9CisgICAgICAgIGRsb3Blbl93cmFwcGVyX3ByaW50X2RlYnVnX21zZygiRmlsZW5hbWUg
XCIlc1wiIE5PVCBmb3VuZCB1bmRlciBkaXJlY3RvcnkgXCIlc1wiXG4iLCBmaWxlbmFtZV9vcmln
aW5hbF9wYXRoLCBsaWJkaXIpOworICAgIH0KKworICAgIGRsb3Blbl93cmFwcGVyX3ByaW50X2Rl
YnVnX21zZygiVHJ5aW5nIGEgc2VhcmNoIGZvciBiYXNlbmFtZSBcIiVzXCIgdW5kZXIgZGlyZWN0
b3J5IFwiJXNcIlxuIiwgYmFzZV9maWxlX3RvX2Rsb3Blbl93cmFwcGVyX2ZpbmQsIGxpYmRpcik7
CisKKyAgICByZXRjb2RlID0gZGxvcGVuX3dyYXBwZXJfcmVjdXJzaXZlX2ZpbmQoYmFzZV9maWxl
X3RvX2Rsb3Blbl93cmFwcGVyX2ZpbmQsIGxpYmRpciwgcGF0aF9mb3VuZF9kZXN0KTsKKyAgICBp
ZiAob3JpZ2luYWxfcGF0aCkKKyAgICAgICAgZnJlZShvcmlnaW5hbF9wYXRoKTsKKyAgICByZXR1
cm4gcmV0Y29kZTsKK30KKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHNwbGl0IHRoZSBwYXRocyBv
ZiBsZF9saWJyYXJ5X3BhdGggYW5kIHRvIHNlYXJjaCBmb3IgImZpbGVuYW1lX29yaWdpbmFsX3Bh
dGgiIGluc2lkZSB0aG9zZSBwYXRocy4KKy8vIEl0IHdpbGwgc3RvcCBzZWFyY2hpbmcgYXQgdGhl
IGZpcnN0IG1hdGNoLgorLy8gSXQgd3JpdGVzIHRoZSBwYXRoIHRvIHRoZSBidWZmZXIgInBhdGhf
Zm91bmRfZGVzdCIgaWYgdGhlIGZpbGUgaXMgZm91bmQgKHJldHVybiA9PSAxKS4KKy8vIElmIHRo
ZSBmaWxlIGlzIG5vdCBmb3VuZCBpdCByZXR1cm5zIDAgYW5kIHRoZSBjb250ZW50cyBvZiAicGF0
aF9mb3VuZF9kZXN0IiBhcmUgdW5kZWZpbmVkLgoraW50IGRsb3Blbl93cmFwcGVyX2ZpbmRfbGli
cmFyeV9vbl9saWJwYXRoKGNvbnN0IGNoYXIqIGZpbGVuYW1lX29yaWdpbmFsX3BhdGgsIGNvbnN0
IGNoYXIqIGxkX2xpYnJhcnlfcGF0aCwgY2hhciogcGF0aF9mb3VuZF9kZXN0KQoreworCisgICAg
Y2hhciAqc2F2ZXB0ciA9IE5VTEw7CisgICAgY2hhciAqbGlicmFyeV9wYXRocyA9IHN0cmR1cChs
ZF9saWJyYXJ5X3BhdGgpOworICAgIGludCBmb3VuZCA9IDA7CisKKyAgICBmb3IgKGNoYXIgKmxp
YmRpciA9IHN0cnRva19yKGxpYnJhcnlfcGF0aHMsICI6IiwgJnNhdmVwdHIpOyBsaWJkaXI7IGxp
YmRpciA9IHN0cnRva19yKE5VTEwsICI6IiwgJnNhdmVwdHIpKSB7CisgICAgICAgIC8vIG1ha2Ug
dGhlIHBhdGggYWJzb2x1dGUKKyAgICAgICAgY2hhciAqbGliZGlyX3JwID0gcmVhbHBhdGgobGli
ZGlyLCBOVUxMKTsKKyAgICAgICAgaWYgKCFsaWJkaXJfcnApIHsKKyAgICAgICAgICAgIGRsb3Bl
bl93cmFwcGVyX3ByaW50X2Vycm9yX21zZygiQ2FsbGluZyByZWFscGF0aCgpIG9uIFwiJXNcIjog
JXNcbiIsIGxpYmRpciwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisgICAgICAgIGRsb3Blbl93cmFwcGVyX3ByaW50X2RlYnVnX21zZygiVHJ5aW5n
IHNlYXJjaCB1bmRlciBkaXJlY3RvcnkgJXNcbiIsIGxpYmRpcik7CisgICAgICAgIGlmIChkbG9w
ZW5fd3JhcHBlcl9nZXRfcGF0aF9mb3JfZmlsZV91bmRlcl9kaXIoZmlsZW5hbWVfb3JpZ2luYWxf
cGF0aCwgbGliZGlyX3JwLCBwYXRoX2ZvdW5kX2Rlc3QpKSB7CisgICAgICAgICAgICBmcmVlKGxp
YmRpcl9ycCk7CisgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBmcmVlKGxpYmRpcl9ycCk7CisgICAgfQorICAgIGZyZWUobGlicmFy
eV9wYXRocyk7CisgICAgcmV0dXJuIGZvdW5kOworfQorCit2b2lkICpkbG9wZW4oY29uc3QgY2hh
ciogZmlsZW5hbWUsIGludCBmbGFncykKK3sKKyAgICBjaGFyIG5ld19maWxlX3BhdGhbUEFUSF9N
QVhdOworICAgIGRsb3Blbl93cmFwcGVyX2NhbGxfcmVhbF9kbGVycm9yID0gMTsKKworICAgIGlm
IChkbG9wZW5fd3JhcHBlcl9kZWJ1Z19wcmludCA9PSAtMSkgeworICAgICAgICBjaGFyICpkbG9w
ZW5fZGVidWdfdmFsdWUgPSBnZXRlbnYoIkRMT1BFTl9XUkFQX0RFQlVHIik7CisgICAgICAgIGlm
IChkbG9wZW5fZGVidWdfdmFsdWUpCisgICAgICAgICAgICBkbG9wZW5fd3JhcHBlcl9kZWJ1Z19w
cmludCA9IGF0b2koZGxvcGVuX2RlYnVnX3ZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCogKCpfX3JlYWxfZGxvcGVuKShjb25zdCBjaGFyKiBmaWxlLCBpbnQgbW9kZSkgPSBOVUxMOwor
ICAgIGlmICghX19yZWFsX2Rsb3BlbikgeworICAgICAgICBfX3JlYWxfZGxvcGVuID0gZGxzeW0o
UlRMRF9ORVhULCAiZGxvcGVuIik7CisgICAgICAgIGlmICghX19yZWFsX2Rsb3BlbikgeworICAg
ICAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZXJyb3JfbXNnKCJHZXR0aW5nIGRsb3BlbiBh
ZGRyZXNzOiAlc1xuIiwgZGxlcnJvcigpKTsKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVyX2Nh
bGxfcmVhbF9kbGVycm9yID0gMDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9
CisgICAgfQorICAgIGlmICghX19yZWFsX2RsZXJyb3IpIHsKKyAgICAgICAgX19yZWFsX2RsZXJy
b3IgPSBkbHN5bShSVExEX05FWFQsICJkbGVycm9yIik7CisgICAgICAgIGlmICghX19yZWFsX2Rs
ZXJyb3IpIHsKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVyX3ByaW50X2Vycm9yX21zZygiR2V0
dGluZyBkbGVycm9yIGFkZHJlc3M6ICVzXG4iLCBkbGVycm9yKCkpOworICAgICAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBp
ZiBmaWxlbmFtZSBpcyBOVUxMIG9yIExEX0xJQlJBUllfUEFUSCBub3QgZGVmaW5lZAorICAgIGlm
ICghZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBfX3JlYWxfZGxvcGVuKGZpbGVuYW1lLCBmbGFn
cyk7CisKKyAgICBjaGFyICpsZF9saWJyYXJ5X3BhdGggPSBnZXRlbnYoIkxEX0xJQlJBUllfUEFU
SCIpOworICAgIGlmICghbGRfbGlicmFyeV9wYXRoKQorICAgICAgICByZXR1cm4gX19yZWFsX2Rs
b3BlbihmaWxlbmFtZSwgZmxhZ3MpOworCisgICAgaWYgKCFkbG9wZW5fd3JhcHBlcl9maW5kX2xp
YnJhcnlfb25fbGlicGF0aChmaWxlbmFtZSwgbGRfbGlicmFyeV9wYXRoLCBuZXdfZmlsZV9wYXRo
KSkgeworICAgICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9lcnJvcl9tc2coIkNvdWxkIG5vdCBm
aW5kIFwiJXNcIiB1bmRlciB0aGUgZGlyZWN0b3JpKGVzKSBvZiBMRF9MSUJSQVJZX1BBVEguIFJl
ZnVzaW5nIHRvIGRsb3BlbiBpdFxuIiwgZmlsZW5hbWUpOworICAgICAgICBkbG9wZW5fd3JhcHBl
cl9jYWxsX3JlYWxfZGxlcnJvciA9IDA7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwor
ICAgIGlmIChkbG9wZW5fd3JhcHBlcl9kZWJ1Z19wcmludCkgeworICAgICAgICBpZiAoc3RyY21w
KGZpbGVuYW1lLCBuZXdfZmlsZV9wYXRoKSkKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVyX3By
aW50X2RlYnVnX21zZygiT3JpZ2luYWwgcmVxdWVzdCB0byBkbG9wZW4gXCIlc1wiIGNoYW5nZWQg
dG8gbG9hZCBcIiVzXCJcbiIsIGZpbGVuYW1lLCBuZXdfZmlsZV9wYXRoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZGVidWdfbXNnKCJPcmlnaW5hbCBy
ZXF1ZXN0IHRvIGRsb3BlbiBcIiVzXCIgYWxsb3dlZCAodW5jaGFuZ2VkKSBiZWNhdXNlIGlzIHVu
ZGVyIHRoZSBkaXJlY3RvcmkoZXMpIG9mIExEX0xJQlJBUllfUEFUSFxuIiwgZmlsZW5hbWUpOwor
ICAgIH0KKworICAgIHJldHVybiBfX3JlYWxfZGxvcGVuKG5ld19maWxlX3BhdGgsIGZsYWdzKTsK
K30KKwordm9pZCAqZGxtb3BlbihMbWlkX3QgbG1pZCwgY29uc3QgY2hhciogZmlsZW5hbWUsIGlu
dCBmbGFncykKK3sKKworICAgIGNoYXIgbmV3X2ZpbGVfcGF0aFtQQVRIX01BWF07CisgICAgZGxv
cGVuX3dyYXBwZXJfY2FsbF9yZWFsX2RsZXJyb3IgPSAxOworCisgICAgaWYgKGRsb3Blbl93cmFw
cGVyX2RlYnVnX3ByaW50ID09IC0xKSB7CisgICAgICAgIGNoYXIgKmRsb3Blbl9kZWJ1Z192YWx1
ZSA9IGdldGVudigiRExPUEVOX1dSQVBfREVCVUciKTsKKyAgICAgICAgaWYgKGRsb3Blbl9kZWJ1
Z192YWx1ZSkKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVyX2RlYnVnX3ByaW50ID0gYXRvaShk
bG9wZW5fZGVidWdfdmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiAoKl9fcmVhbF9k
bG1vcGVuKShMbWlkX3QgbG1pZHQsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBtb2RlKSA9IE5VTEw7
CisgICAgaWYgKCFfX3JlYWxfZGxtb3BlbikgeworICAgICAgICBfX3JlYWxfZGxtb3BlbiA9IGRs
c3ltKFJUTERfTkVYVCwgImRsbW9wZW4iKTsKKyAgICAgICAgaWYgKCFfX3JlYWxfZGxtb3Blbikg
eworICAgICAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZXJyb3JfbXNnKCJHZXR0aW5nIGRs
bW9wZW4gYWRkcmVzczogJXNcbiIsIGRsZXJyb3IoKSk7CisgICAgICAgICAgICBkbG9wZW5fd3Jh
cHBlcl9jYWxsX3JlYWxfZGxlcnJvciA9IDA7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBpZiAoIV9fcmVhbF9kbGVycm9yKSB7CisgICAgICAgIF9fcmVh
bF9kbGVycm9yID0gZGxzeW0oUlRMRF9ORVhULCAiZGxlcnJvciIpOworICAgICAgICBpZiAoIV9f
cmVhbF9kbGVycm9yKSB7CisgICAgICAgICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9lcnJvcl9t
c2coIkdldHRpbmcgZGxlcnJvciBhZGRyZXNzOiAlc1xuIiwgZGxlcnJvcigpKTsKKyAgICAgICAg
ICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRG9uJ3QgZG8gYW55
dGhpbmcgaWYgZmlsZW5hbWUgaXMgTlVMTCBvciBMRF9MSUJSQVJZX1BBVEggbm90IGRlZmluZWQK
KyAgICBpZiAoIWZpbGVuYW1lKQorICAgICAgICByZXR1cm4gX19yZWFsX2RsbW9wZW4obG1pZCwg
ZmlsZW5hbWUsIGZsYWdzKTsKKworICAgIGNoYXIgKmxkX2xpYnJhcnlfcGF0aCA9IGdldGVudigi
TERfTElCUkFSWV9QQVRIIik7CisgICAgaWYgKCFsZF9saWJyYXJ5X3BhdGgpCisgICAgICAgIHJl
dHVybiBfX3JlYWxfZGxtb3BlbihsbWlkLCBmaWxlbmFtZSwgZmxhZ3MpOworCisgICAgaWYgKCFk
bG9wZW5fd3JhcHBlcl9maW5kX2xpYnJhcnlfb25fbGlicGF0aChmaWxlbmFtZSwgbGRfbGlicmFy
eV9wYXRoLCBuZXdfZmlsZV9wYXRoKSkgeworICAgICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9l
cnJvcl9tc2coIkNvdWxkIG5vdCBmaW5kIFwiJXNcIiB1bmRlciB0aGUgZGlyZWN0b3JpKGVzKSBv
ZiBMRF9MSUJSQVJZX1BBVEguIFJlZnVzaW5nIHRvIGRsbW9wZW4gaXRcbiIsIGZpbGVuYW1lKTsK
KyAgICAgICAgZGxvcGVuX3dyYXBwZXJfY2FsbF9yZWFsX2RsZXJyb3IgPSAwOworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoZGxvcGVuX3dyYXBwZXJfZGVidWdfcHJpbnQp
IHsKKyAgICAgICAgaWYgKHN0cmNtcChmaWxlbmFtZSwgbmV3X2ZpbGVfcGF0aCkpCisgICAgICAg
ICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9kZWJ1Z19tc2coIk9yaWdpbmFsIHJlcXVlc3QgdG8g
ZGxtb3BlbiBcIiVzXCIgY2hhbmdlZCB0byBsb2FkIFwiJXNcIlxuIiwgZmlsZW5hbWUsIG5ld19m
aWxlX3BhdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkbG9wZW5fd3JhcHBlcl9wcmlu
dF9kZWJ1Z19tc2coIk9yaWdpbmFsIHJlcXVlc3QgdG8gZGxtb3BlbiBcIiVzXCIgYWxsb3dlZCAo
dW5jaGFuZ2VkKSBiZWNhdXNlIGlzIHVuZGVyIHRoZSBkaXJlY3RvcmkoZXMpIG9mIExEX0xJQlJB
UllfUEFUSFxuIiwgZmlsZW5hbWUpOworICAgIH0KKworICAgIHJldHVybiBfX3JlYWxfZGxtb3Bl
bihsbWlkLCBuZXdfZmlsZV9wYXRoLCBmbGFncyk7Cit9CisKKworY2hhciAqZGxlcnJvcih2b2lk
KQoreworICAgIHN0YXRpYyBjaGFyKiB3cmFwcGVyX2Vycm9yX21zZyA9ICJDYWxsIGJsb2NrZWQg
YnkgZGxvcGVud3JhcHBlciBsaWJyYXJ5LiI7CisKKyAgICAvLyBfX3JlYWxfZGxlcnJvciBoYW5k
bGUgd2FzIGFscmVhZHkgb2J0YWluZWQgYmVmb3JlIG9uIHRoZSBkbG9wZW4oKSBvciBkbG1vcGVu
KCkgd3JhcHBlcnMuCisgICAgLy8gT2J0YWluaW5nIGl0IGhlcmUgaXMgbm90IHBvc3NpYmxlIGJl
Y2F1c2UgY2FsbGluZyBkbHN5bSgpIG92ZXJ3cml0ZXMgdGhlIGRsZXJyb3IgYnVmZmVyLgorICAg
IGlmIChkbG9wZW5fd3JhcHBlcl9jYWxsX3JlYWxfZGxlcnJvciAmJiBfX3JlYWxfZGxlcnJvcikK
KyAgICAgICAgcmV0dXJuIF9fcmVhbF9kbGVycm9yKCk7CisKKyAgICBkbG9wZW5fd3JhcHBlcl9j
YWxsX3JlYWxfZGxlcnJvciA9IDE7CisgICAgcmV0dXJuIHdyYXBwZXJfZXJyb3JfbXNnOworfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CmluZGV4IGJkZjNiMzQ3MTA0MmEx
MzM1N2VkYjg2NGExNDk4ZGZmY2FhNTQwNzMuLmY2NTEwN2EwZTk0MjkyNzY5MzlkMjM0ZDIyNTM0
NGQwOWZhMDk1Y2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKQEAg
LTMwNSw2ICszMDUsMTEgQEAgX1BBVEhfUlVMRVNfU1BFQ0lGSUVSID0gWwogICAgICAgb3MucGF0
aC5qb2luKCdTb3VyY2UnLCAnVGhpcmRQYXJ0eScsICdsaWJ3ZWJydGMnLCAnU291cmNlJywgJ3dl
YnJ0YycpLAogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdQQUwnLCAn
cGFsJywgJ3NwaScpXSwKICAgICAgWyItcmVhZGFiaWxpdHkvbmFtaW5nL3VuZGVyc2NvcmVzIl0p
LAorCisgICAgKFsgICMgYyBjb2RlIHdpdGggdW5kZXJzY29yZXMgaW4gdmFyaWFibGUgbmFtZXMg
YW5kIHRhYnMgZm9yIHRoZSBNYWtlZmlsZQorICAgICBvcy5wYXRoLmpvaW4oJ1Rvb2xzJywgJ1Nj
cmlwdHMnLCAnd2Via2l0cHknLCAnYmluYXJ5X2J1bmRsaW5nJywgJ2Rsb3BlbndyYXAnKV0sCisg
ICAgIFsiLXJlYWRhYmlsaXR5L25hbWluZy91bmRlcnNjb3JlcyIsCisgICAgICAiLXdoaXRlc3Bh
Y2UvdGFiIl0pLAogXQogCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454153</attachid>
            <date>2022-03-08 14:29:54 -0800</date>
            <delta_ts>2022-03-28 17:56:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237107-20220308232953.patch</filename>
            <type>text/plain</type>
            <size>80644</size>
            <attacher name="Carlos Alberto Lopez Perez">clopez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMDEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDUyYTJkZDMyZmY4MzRl
YWYyMzYxZmVhZjM2YzU1MjhkNWUzYWMyMy4uZjhiZDljZjA2MjM1YjJhZjQ4NGRlMWE3Y2IxNDA4
MGIwZmRjMzdjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIyLTAzLTA4ICBDYXJs
b3MgQWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtH
VEtdW1dQRV0gZ2VuZXJhdGUtYnVuZGxlOiBzZWxmLWNvbnRhaW5lZCBidW5kbGUgZm9yIHRoZSBN
aW5pQnJvd3NlciB0aGF0IGNhbiB3b3JrIG9uIGFueSBkaXN0cm8KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzEwNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gY2hhbmdlIGlu
IGJlaGF2aW91ci4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29y
a1Nlc3Npb24uY3BwOiBBbGxvdyB0byBsb2FkIHRoZSBUTFMgZGF0YWJhc2Ugc3BlY2lmaWVkIG9u
IHRoZQorICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBXRUJLSVRfVExTX0NBRklMRV9QRU0g
d2hlbiBERVZFTE9QRVJfTU9ERSBpcyBlbmFibGVkCisgICAgICAgIChXZWJDb3JlOjpTb3VwTmV0
d29ya1Nlc3Npb246OlNvdXBOZXR3b3JrU2Vzc2lvbik6CisKIDIwMjItMDMtMDggIEFudG9pbmUg
UXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW3dlYi1hbmltYXRpb25zXSBj
b2xvci1pbnRlcnBvbGF0aW9uIHNob3VsZCBzdXBwb3J0IGRpc2NyZXRlIGFuaW1hdGlvbgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3Jr
U2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5l
dHdvcmtTZXNzaW9uLmNwcAppbmRleCA5ZWIzMTZkMmEwZmJhZGY1NDdlNzk0NTc1YzcwMWNjNDFk
OWFkNzFiLi42OWM1MWQxOWNjM2NmYTE4ODAxY2U0MjI2YTc4YzZjNzMwOTUyMzZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNz
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5l
dHdvcmtTZXNzaW9uLmNwcApAQCAtMTMzLDYgKzEzMywyMyBAQCBTb3VwTmV0d29ya1Nlc3Npb246
OlNvdXBOZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgaWYgKHNv
dXBfYXV0aF9uZWdvdGlhdGVfc3VwcG9ydGVkKCkgJiYgIW1fc2Vzc2lvbklELmlzRXBoZW1lcmFs
KCkpCiAgICAgICAgIHNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVyZV9ieV90eXBlKG1fc291cFNlc3Np
b24uZ2V0KCksIFNPVVBfVFlQRV9BVVRIX05FR09USUFURSk7CiAKKyNpZiBFTkFCTEUoREVWRUxP
UEVSX01PREUpCisgICAgLy8gT3B0aW9uYWxseSBsb2FkIGEgY3VzdG9tIHBhdGggd2l0aCB0aGUg
VExTIENBRmlsZS4gVGhpcyBpcyB1c2VkIG9uIHRoZSBHVEsvV1BFIGJ1bmRsZXMuIFNlZSBzY3Jp
cHQgZ2VuZXJhdGUtYnVuZGxlCisgICAgY29uc3QgY2hhciogY3VzdG9tVExTQ0FGaWxlID0gZ19n
ZXRlbnYoIldFQktJVF9UTFNfQ0FGSUxFX1BFTSIpOworI2lmIFVTRShTT1VQMikKKyAgICBpZiAo
Y3VzdG9tVExTQ0FGaWxlKQorICAgICAgICBnX29iamVjdF9zZXQobV9zb3VwU2Vzc2lvbi5nZXQo
KSwgInNzbC1jYS1maWxlIiwgY3VzdG9tVExTQ0FGaWxlLCBOVUxMKTsKKyNlbHNlCisgICAgaWYg
KGN1c3RvbVRMU0NBRmlsZSkgeworICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7
CisgICAgICAgIEdSZWZQdHI8R1Rsc0RhdGFiYXNlPiBjdXN0b21UTFNEQiA9IGFkb3B0R1JlZihn
X3Rsc19maWxlX2RhdGFiYXNlX25ldyhjdXN0b21UTFNDQUZpbGUsICZlcnJvci5vdXRQdHIoKSkp
OworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIkZhaWxlZCB0
byBsb2FkIFRMUyBkYXRhYmFzZSBcIiVzXCI6ICVzIiwgY3VzdG9tVExTQ0FGaWxlLCBlcnJvci0+
bWVzc2FnZSk7CisgICAgICAgIHNvdXBfc2Vzc2lvbl9zZXRfdGxzX2RhdGFiYXNlKG1fc291cFNl
c3Npb24uZ2V0KCksIGN1c3RvbVRMU0RCLmdldCgpKTsKKyAgICB9CisjZW5kaWYgLy8gVVNFKFNP
VVAyKQorI2VuZGlmIC8vIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKKwogICAgIHNldHVwTG9nZ2Vy
KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCBlOGY5YTYyOWRlZTgxODU2ZWZkZjQyM2ExZjM1OTQzODBkMGM2ZDJmLi44ZTBmNGUyNDAx
YWU1MTlmYTYzNWJjOWQzZDNjOGMzMDEzMzlhMDJiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMjItMDMtMDggIENh
cmxvcyBBbGJlcnRvIExvcGV6IFBlcmV6ICA8Y2xvcGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dUS11bV1BFXSBnZW5lcmF0ZS1idW5kbGU6IHNlbGYtY29udGFpbmVkIGJ1bmRsZSBmb3IgdGhl
IE1pbmlCcm93c2VyIHRoYXQgY2FuIHdvcmsgb24gYW55IGRpc3RybworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MTA3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIGluIHRoZSBn
ZW5lcmF0ZS1idW5kbGUgc2NyaXB0IHRoZSBzdXBwb3J0IHRvIGdlbmVyYXRlIGEgYnVuZGxlIHNl
bGYtY29udGFpbmVkIHRoYXQgY2FuIHdvcmsgb24gYW55IGRpc3Ryby4KKyAgICAgICAgVG8gYWNo
aWV2ZSB0aGF0IHRoZSBidW5kbGUgY29udGFpbnMgYWxsIHRoZSByZXF1aXJlZCBzeXN0ZW0gbGli
cmFyaWVzIGluc2lkZSB0aGUgYnVuZGxlIChldmVuIHRoZSBncmFwaGljcyBkcml2ZXJzKS4KKyAg
ICAgICAgSXQgYWxzbyBjb250YWlucyB0aGUgcmVxdWlyZWQgc3lzdGVtIHJlc291cmNlczogaWNv
bnMgKGZvciBndGspLCBmb250Y29uZmlnIGZpbGVzIGFuZCBmb250cywgZXRjLgorICAgICAgICBB
IGN1c3RvbSBkbG9wZW53cmFwIGxpYnJhcnkgaXMgYWxzbyBhZGRlZCBhbmQgcHJlbG9hZGVkLiBU
aGUgcHVycG9zZSBvZiB0aGlzIGxpYnJhcnkgaXMgdG8gd3JhcCBhbGwgZGxvcGVuKCkgY2FsbHMK
KyAgICAgICAgYW5kIHJld3JpdGUgdGhlIHBhdGhzIHRvIGVuc3VyZSB0aGF0IG9ubHkgbGlicmFy
aWVzIGluc2lkZSB0aGUgYnVuZGxlIGFyZSBsb2FkZWQuCisKKyAgICAgICAgVGhlIGJ1bmRsZSBo
YXMgYmVlbiB0ZXN0ZWQgdG8gYmUgZ2VuZXJhdGVkIHdpdGggdGhlIGZsYXRwYWsgYnVpbGQgYW5k
IGV4ZWN1dGVkIG9uIGEgcmFuZ2Ugb2YgdmVyeSBkaWZmZXJlbnQgZGlzdHJpYnV0aW9ucworICAg
ICAgICB3aXRoIHN1Y2VzczogRmVkb3JhLCBVYnVudHUsIERlYmlhbiwgQWxwaW5lLCBDZW50T1Mg
KGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBlYWNoKQorCisgICAgICAgICogU2NyaXB0cy9idW5kbGUt
YmluYXJ5OgorICAgICAgICAqIFNjcmlwdHMvZ2VuZXJhdGUtYnVuZGxlOgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5nL2J1bmRsZS5weToKKyAgICAgICAgKEJpbmFy
eUJ1bmRsZXIpOgorICAgICAgICAoQmluYXJ5QnVuZGxlci5fX2luaXRfXyk6CisgICAgICAgIChC
aW5hcnlCdW5kbGVyLl9pc19zeXN0ZW1fZGVwKToKKyAgICAgICAgKEJpbmFyeUJ1bmRsZXIuc2V0
X3VzZV9zeXNfbGliX2RpcmVjdG9yeSk6CisgICAgICAgIChCaW5hcnlCdW5kbGVyLmNvcHlfYW5k
X21heWJlX3N0cmlwX3BhdGNoZWxmKToKKyAgICAgICAgKEJpbmFyeUJ1bmRsZXIuZGVzdGluYXRp
b25fZGlyKToKKyAgICAgICAgKEJpbmFyeUJ1bmRsZXIuZ2VuZXJhdGVfd3JhcHBlcl9zY3JpcHQp
OgorICAgICAgICAoQmluYXJ5QnVuZGxlci5jb3B5X2FuZF9yZW1vdmVfcnBhdGgpOiBEZWxldGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5nL2Rsb3BlbndyYXAv
TWFrZWZpbGU6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRs
aW5nL2Rsb3BlbndyYXAvUkVBRE1FLnR4dDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9iaW5hcnlfYnVuZGxpbmcvZGxvcGVud3JhcC9kbG9wZW53cmFwLmM6IEFkZGVkLgorICAg
ICAgICAoZGxvcGVuX3dyYXBwZXJfcGF0aF9qb2luKToKKyAgICAgICAgKGlzX2Rpcik6CisgICAg
ICAgIChkbG9wZW5fd3JhcHBlcl9yZWN1cnNpdmVfZmluZCk6CisgICAgICAgIChkbG9wZW5fd3Jh
cHBlcl9nZXRfcGF0aF9mb3JfZmlsZV91bmRlcl9kaXIpOgorICAgICAgICAoZGxvcGVuX3dyYXBw
ZXJfZmluZF9saWJyYXJ5X29uX2xpYnBhdGgpOgorICAgICAgICAoZGxvcGVuKToKKyAgICAgICAg
KGRsbW9wZW4pOgorICAgICAgICAoZGxlcnJvcik6CisKIDIwMjItMDMtMDggIEpvbmF0aGFuIEJl
ZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFtnaXQtd2Via2l0XSBQcm9tcHQg
dXNlciB3aGVuIEdpdEh1YiBjcmVkZW50aWFscyBhcmUgbGlrZWx5IGluY29ycmVjdApkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy9idW5kbGUtYmluYXJ5IGIvVG9vbHMvU2NyaXB0cy9idW5kbGUt
YmluYXJ5CmluZGV4IGU3NmYzZmEwMTI0ZGZmNTQ4NjUwOWJkZmNmMTY3N2IyYmE1ZTMzMzEuLjI5
ZDFjNTBkMjdmNmExMDM4ZDJhZjQ2MDhmZTE2ZWNkNzlkNTg3ZmYgMTAwNzU1Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvYnVuZGxlLWJpbmFyeQorKysgYi9Ub29scy9TY3JpcHRzL2J1bmRsZS1iaW5hcnkK
QEAgLTQ2LDExICs0NiwxMSBAQCBkZWYgbWFpbigpOgogCiAgICAgaWYgaW50ZXJwcmV0ZXIgaXMg
Tm9uZToKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDb3VsZCBub3QgZGV0ZXJtaW5lIGlu
dGVycHJldGVyIGZvciBiaW5hcnkgJXMiICUgb2JqZWN0KQotICAgIGJ1bmRsZXIgPSBCaW5hcnlC
dW5kbGVyKGFyZ3MuZGVzdF9kaXIsIEZhbHNlKQotICAgIGJ1bmRsZXIuY29weV9hbmRfcmVtb3Zl
X3JwYXRoKGludGVycHJldGVyLCB0eXBlPSdpbnRlcnByZXRlcicpCi0gICAgYnVuZGxlci5jb3B5
X2FuZF9yZW1vdmVfcnBhdGgoYXJncy5iaW5hcnksIHR5cGU9J2JpbicpCisgICAgYnVuZGxlciA9
IEJpbmFyeUJ1bmRsZXIoYXJncy5kZXN0X2RpcikKKyAgICBidW5kbGVyLmNvcHlfYW5kX21heWJl
X3N0cmlwX3BhdGNoZWxmKGludGVycHJldGVyLCB0eXBlPSdpbnRlcnByZXRlcicsIHN0cmlwPUZh
bHNlLCBwYXRjaGVsZl9yZW1vdmVycGF0aD1UcnVlLCBwYXRjaGVsZl9ub2RlZmF1bHRsaWI9RmFs
c2UpCisgICAgYnVuZGxlci5jb3B5X2FuZF9tYXliZV9zdHJpcF9wYXRjaGVsZihhcmdzLmJpbmFy
eSwgdHlwZT0nYmluJywgc3RyaXA9RmFsc2UsIHBhdGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBh
dGNoZWxmX25vZGVmYXVsdGxpYj1GYWxzZSkKICAgICBmb3IgbGliIGluIGxpYnJhcmllczoKLSAg
ICAgICAgYnVuZGxlci5jb3B5X2FuZF9yZW1vdmVfcnBhdGgobGliLCB0eXBlPSdsaWInKQorICAg
ICAgICBidW5kbGVyLmNvcHlfYW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKGxpYiwgdHlwZT0nbGli
Jywgc3RyaXA9RmFsc2UsIHBhdGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBhdGNoZWxmX25vZGVm
YXVsdGxpYj1GYWxzZSkKICAgICBidW5kbGVyLmdlbmVyYXRlX3dyYXBwZXJfc2NyaXB0KGludGVy
cHJldGVyLCBvcy5wYXRoLmJhc2VuYW1lKGFyZ3MuYmluYXJ5KSkKICAgICByZXR1cm4gMAogCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2dlbmVyYXRlLWJ1bmRsZSBiL1Rvb2xzL1NjcmlwdHMv
Z2VuZXJhdGUtYnVuZGxlCmluZGV4IGIzMmI5OTZjOGI2MjMzYTA3ZDk3NGQzY2U1NjMzZmY5ZGQy
ODViZTkuLmIxYzdlYjI3ZmJhOWYwYmQ5N2U4ZjAwY2NiMDZkMTVlMzY3NjJmYzggMTAwNzU1Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtYnVuZGxlCisrKyBiL1Rvb2xzL1NjcmlwdHMvZ2Vu
ZXJhdGUtYnVuZGxlCkBAIC0yMSw3ICsyMSw2IEBACiAjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCiAjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCiBpbXBvcnQgYXJncGFyc2UKIGltcG9ydCBiYXNl
NjQKIGltcG9ydCBkYXRldGltZQpAQCAtODcsNiArODYsNjAgQEAgZWxzZQogZmkKICIiIgogCitG
T05UX0NPTkZfRklMRSA9ICIiIlwKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGZv
bnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPgorPGZvbnRjb25maWc+CisgICAgPGl0czpydWxl
cyB4bWxuczppdHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvMTEvaXRzIiB2ZXJzaW9uPSIxLjAi
PgorICAgICAgICA8aXRzOnRyYW5zbGF0ZVJ1bGUgdHJhbnNsYXRlPSJubyIgc2VsZWN0b3I9Ii9m
b250Y29uZmlnLypbbm90KHNlbGY6OmRlc2NyaXB0aW9uKV0iLz4KKyAgICA8L2l0czpydWxlcz4K
KworICAgIDxkZXNjcmlwdGlvbj5EZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZTwvZGVzY3JpcHRp
b24+CisKKzwhLS0gRm9udCBkaXJlY3RvcnkgbGlzdCwgcmVsYXRpdmUgdG8gWERHX0RBVEFfSE9N
RSAtLT4KKyAgICA8ZGlyIHByZWZpeD0ieGRnIj5mb250cy9mb250czwvZGlyPgorCis8IS0tIExv
YWQgc3lzdGVtIGN1c3RvbWl6YXRpb24gZmlsZXMsIHJlbGF0aXZlIHRvIHByZXZpb3VzIGRpciAt
LT4KKyAgICA8aW5jbHVkZSBpZ25vcmVfbWlzc2luZz0ieWVzIj5jb25mLmQ8L2luY2x1ZGU+CisK
KzwhLS0gRm9udCBjYWNoZSBkaXJlY3RvcnkgbGlzdCwgcmVsYXRpdmUgdG8gWERHX0NBQ0hFX0hP
TUUgLS0+CisgICAgPGNhY2hlZGlyIHByZWZpeD0ieGRnIj5mb250Y29uZmlnPC9jYWNoZWRpcj4K
KworPCEtLSBJbmNsdWRlIGFsc28gdGhlIHN5c3RlbSBmb250IGNvbmZpZyBpZiBpcyBvbiB0aGUg
c3RhbmRhcmQgZGlyIC0tPgorICAgIDxpbmNsdWRlIGlnbm9yZV9taXNzaW5nPSJ5ZXMiPi9ldGMv
Zm9udHMvZm9udHMuY29uZjwvaW5jbHVkZT4KKworPCEtLSBBY2NlcHQgZGVwcmVjYXRlZCAnbW9u
bycgYWxpYXMsIHJlcGxhY2luZyBpdCB3aXRoICdtb25vc3BhY2UnIC0tPgorICAgIDxtYXRjaCB0
YXJnZXQ9InBhdHRlcm4iPgorICAgICAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+
CisgICAgICAgICAgICA8c3RyaW5nPm1vbm88L3N0cmluZz4KKyAgICAgICAgPC90ZXN0PgorICAg
ICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+Cisg
ICAgICAgICAgICA8c3RyaW5nPm1vbm9zcGFjZTwvc3RyaW5nPgorICAgICAgICA8L2VkaXQ+Cisg
ICAgPC9tYXRjaD4KKworPCEtLSBBY2NlcHQgYWx0ZXJuYXRlICdzYW5zIHNlcmlmJyBzcGVsbGlu
ZywgcmVwbGFjaW5nIGl0IHdpdGggJ3NhbnMtc2VyaWYnIC0tPgorICAgIDxtYXRjaCB0YXJnZXQ9
InBhdHRlcm4iPgorICAgICAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+CisgICAg
ICAgICAgICA8c3RyaW5nPnNhbnMgc2VyaWY8L3N0cmluZz4KKyAgICAgICAgPC90ZXN0PgorICAg
ICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+Cisg
ICAgICAgICAgICA8c3RyaW5nPnNhbnMtc2VyaWY8L3N0cmluZz4KKyAgICAgICAgPC9lZGl0Pgor
ICAgIDwvbWF0Y2g+CisKKzwhLS0gQWNjZXB0IGRlcHJlY2F0ZWQgJ3NhbnMnIGFsaWFzLCByZXBs
YWNpbmcgaXQgd2l0aCAnc2Fucy1zZXJpZicgLS0+CisgICAgPG1hdGNoIHRhcmdldD0icGF0dGVy
biI+CisgICAgICAgIDx0ZXN0IHF1YWw9ImFueSIgbmFtZT0iZmFtaWx5Ij4KKyAgICAgICAgICAg
IDxzdHJpbmc+c2Fuczwvc3RyaW5nPgorICAgICAgICA8L3Rlc3Q+CisgICAgICAgIDxlZGl0IG5h
bWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIiBiaW5kaW5nPSJzYW1lIj4KKyAgICAgICAgICAgIDxz
dHJpbmc+c2Fucy1zZXJpZjwvc3RyaW5nPgorICAgICAgICA8L2VkaXQ+CisgICAgPC9tYXRjaD4K
KzwvZm9udGNvbmZpZz4KKyIiIgorCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18p
CiBMT0dfTUVTU0FHRSA9IDI1CiAKQEAgLTEzOCw2ICsxOTEsOSBAQCBjbGFzcyBCdW5kbGVDcmVh
dG9yKG9iamVjdCk6CiAgICAgICAgIHdrX2J1aWxkX3BhdGggPSBvcy5lbnZpcm9uWydXRUJLSVRf
T1VUUFVURElSJ10gaWYgJ1dFQktJVF9PVVRQVVRESVInIGluIG9zLmVudmlyb24gZWxzZSBcCiAg
ICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBh
dGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICcuLicsICdXZWJLaXRCdWlsZCcpKQogICAgICAg
ICBzZWxmLl9idWlsZHBhdGggPSBvcy5wYXRoLmpvaW4od2tfYnVpbGRfcGF0aCwgc2VsZi5fY29u
ZmlndXJhdGlvbi5jYXBpdGFsaXplKCkpCisgICAgICAgIHNlbGYuX2Rsb3BlbndyYXBfZGlyID0g
b3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAn
d2Via2l0cHknLCAnYmluYXJ5X2J1bmRsaW5nJywgJ2Rsb3BlbndyYXAnKSkKKyAgICAgICAgaWYg
bm90IG9zLnBhdGguaXNkaXIoc2VsZi5fZGxvcGVud3JhcF9kaXIpOgorICAgICAgICAgICAgcmFp
c2UgUnVudGltZUVycm9yKCJDYW4ndCBmaW5kIHRoZSBkbG9wZW53cmFwIGRpcmVjdG9yeSBhdDog
JXMiICUgc2VsZi5fZGxvcGVud3JhcF9kaXIpCiAKICAgICAgICAgZGVmYXVsdF9idW5kbGVfbmFt
ZSA9IGJ1bmRsZV90eXBlICArICdfJyArIHNlbGYuX3BsYXRmb3JtICsgJ18nICsgc2VsZi5fY29u
ZmlndXJhdGlvbiArICcuJyArIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUKICAgICAgICAgaWYgZGVz
dGluYXRpb24gYW5kICBvcy5wYXRoLmlzZGlyKGRlc3RpbmF0aW9uKToKQEAgLTE0NSw3ICsyMDEs
NiBAQCBjbGFzcyBCdW5kbGVDcmVhdG9yKG9iamVjdCk6CiAgICAgICAgIGVsc2U6CiAgICAgICAg
ICAgICBzZWxmLl9idW5kbGVfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHdrX2J1aWxkX3BhdGgs
IGRlZmF1bHRfYnVuZGxlX25hbWUpCiAKLQogICAgIGRlZiBfY3JlYXRlX3RlbXBkaXIoc2VsZiwg
YmFzZWRpciA9IE5vbmUpOgogICAgICAgICBpZiBiYXNlZGlyIGlzIG5vdCBOb25lOgogICAgICAg
ICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoYmFzZWRpcik6CkBAIC0xNTMsNyArMjA4LDYgQEAg
Y2xhc3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICAgICAgcmV0dXJuIHRlbXBmaWxl
Lm1rZHRlbXAocHJlZml4PW9zLnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgoYmFzZWRpciksICd0
bXAnKSkKICAgICAgICAgcmV0dXJuIHRlbXBmaWxlLm1rZHRlbXAoKQogCi0KICAgICBkZWYgX3J1
bl9jbWRfYW5kX2dldF9vdXRwdXQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIF9sb2cuZGVidWco
IkVYRUMgJXMiICUgY29tbWFuZCkKICAgICAgICAgY29tbWFuZF9wcm9jZXNzID0gc3VicHJvY2Vz
cy5Qb3Blbihjb21tYW5kLApAQCAtMTcwLDcgKzIyNCw2IEBAIGNsYXNzIEJ1bmRsZUNyZWF0b3Io
b2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUuc3BsaXQoJz0nKVsxXS5z
dHJpcCgpLnN0cmlwKCciJykKICAgICAgICAgcmV0dXJuIE5vbmUKIAotCiAgICAgZGVmIF9nZW5l
cmF0ZV9yZWFkbWUoc2VsZik6CiAgICAgICAgIF9sb2cuaW5mbygnR2VuZXJhdGUgUkVBRE1FLnR4
dCBmaWxlJykKICAgICAgICAgcmVhZG1lX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fdG1wZGly
LCAnUkVBRE1FLnR4dCcpCkBAIC0xOTEsMzYgKzI0NCw0NyBAQCBjbGFzcyBCdW5kbGVDcmVhdG9y
KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgcmVhZG1lX2hhbmRsZS53cml0ZSgnICAtIFRvIGVu
c3VyZSBhbGwgdGhlIHJlcXVpcmVkIGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkIGV4ZWN1dGUgdGhl
IHNjcmlwdDogaW5zdGFsbC1kZXBlbmRlbmNpZXMuc2hcbicpCiAgICAgICAgICAgICAgICAgcmVh
ZG1lX2hhbmRsZS53cml0ZSgnICAtIFlvdSBjYW4gcGFzcyB0aGUgZmxhZyAiLS1hdXRvaW5zdGFs
bCIgdG8gdGhpcyBzY3JpcHQgdG8gYXV0b21hdGljYWxseSBpbnN0YWxsIHRoZSBkZXBlbmRlbmNp
ZXMgaWYgbmVlZGVkLlxuJykKICAgICAgICAgICAgIHJlYWRtZV9oYW5kbGUud3JpdGUoJ1xuUnVu
IGluc3RydWN0aW9uczpcbicpCi0gICAgICAgICAgICBzY3JpcHRzID0gInNjcmlwdCIgaWYgbGVu
KHNlbGYuX3dyYXBwZXJfc2NyaXB0cykgPT0gMSBlbHNlICJzY3JpcHRzIgorICAgICAgICAgICAg
c2NyaXB0cyA9ICdzY3JpcHQnIGlmIGxlbihzZWxmLl93cmFwcGVyX3NjcmlwdHMpID09IDEgZWxz
ZSAnc2NyaXB0cycKICAgICAgICAgICAgIHJlYWRtZV9oYW5kbGUud3JpdGUoJyAgLSBFeGVjdXRl
IHRoZSB3cmFwcGVyICVzIGluIHRoaXMgZGlyZWN0b3J5OlxuJyAlIHNjcmlwdHMpCiAgICAgICAg
ICAgICBmb3Igd3JhcHBlcl9zY3JpcHQgaW4gc2VsZi5fd3JhcHBlcl9zY3JpcHRzOgogICAgICAg
ICAgICAgICAgIHJlYWRtZV9oYW5kbGUud3JpdGUoJyAgICAqICVzXG4nICV3cmFwcGVyX3Njcmlw
dCkKICAgICAgICAgcmV0dXJuIFRydWUKIAotCiAgICAgZGVmIF9nZW5lcmF0ZV93cmFwcGVyX3Nj
cmlwdChzZWxmLCBpbnRlcnByZXRlciwgYmluYXJ5X3RvX3dyYXApOgogICAgICAgICB2YXJpYWJs
ZXMgPSBkaWN0KCkKICAgICAgICAgbXlkaXIgPSBzZWxmLl9idW5kbGVyLlZBUl9NWURJUgotICAg
ICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihzZWxmLl9idW5kbGVyLmRlc3RpbmF0
aW9uX2RpcigpLCAnZ2lvJykpOgotICAgICAgICAgICAgZ2lvX3ZhciA9ICdHSU9fTU9EVUxFX0RJ
UicgaWYgc2VsZi5fc3lzbGlicyA9PSAnYnVuZGxlLWFsbCcgZWxzZSAnR0lPX0VYVFJBX01PRFVM
RVMnCi0gICAgICAgICAgICB2YXJpYWJsZXNbZ2lvX3Zhcl0gPSAiJHslc30vZ2lvIiAlIG15ZGly
CisgICAgICAgIGxpYl9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fYnVuZGxlci5kZXN0aW5hdGlv
bl9kaXIoKSwgJ2xpYicpCisgICAgICAgIHN5c2xpYl9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5f
YnVuZGxlci5kZXN0aW5hdGlvbl9kaXIoKSwgJ3N5cy9saWInKQorICAgICAgICBiaW5fZGlyID0g
b3MucGF0aC5qb2luKHNlbGYuX2J1bmRsZXIuZGVzdGluYXRpb25fZGlyKCksICdiaW4nKQorICAg
ICAgICBzaGFyZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fYnVuZGxlci5kZXN0aW5hdGlvbl9k
aXIoKSwgJ3N5cy9zaGFyZScpCiAKLSAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpv
aW4oc2VsZi5fYnVuZGxlci5kZXN0aW5hdGlvbl9kaXIoKSwgJ2dzdCcpKToKKyAgICAgICAgaWYg
b3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2dpbycpKToKKyAgICAgICAg
ICAgIGdpb192YXIgPSAnR0lPX01PRFVMRV9ESVInIGlmIHNlbGYuX3N5c2xpYnMgPT0gJ2J1bmRs
ZS1hbGwnIGVsc2UgJ0dJT19FWFRSQV9NT0RVTEVTJworICAgICAgICAgICAgdmFyaWFibGVzW2dp
b192YXJdID0gJyR7JXN9L3N5cy9saWIvZ2lvJyAlIG15ZGlyCisgICAgICAgIGlmIG9zLnBhdGgu
aXNkaXIob3MucGF0aC5qb2luKHN5c2xpYl9kaXIsICdnc3QnKSk6CiAgICAgICAgICAgICBnc3Rf
dmFyID0gJ0dTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wJyBpZiBzZWxmLl9zeXNsaWJzID09ICdi
dW5kbGUtYWxsJyBlbHNlICdHU1RfUExVR0lOX1BBVEhfMV8wJwotICAgICAgICAgICAgdmFyaWFi
bGVzW2dzdF92YXJdID0gIiR7JXN9L2dzdCIgJSBteWRpcgotICAgICAgICAgICAgdmFyaWFibGVz
WydHU1RfUkVHSVNUUllfMV8wJ10gPSAiJHslc30vZ3N0L2dzdHJlYW1lci0xLjAucmVnaXN0cnki
ICUgbXlkaXIKLSAgICAgICAgaWYgYmluYXJ5X3RvX3dyYXAgIT0gImpzYyI6Ci0gICAgICAgICAg
ICB2YXJpYWJsZXNbJ1dFQktJVF9FWEVDX1BBVEgnXSA9ICIkeyVzfS9iaW4iICUgbXlkaXIKLSAg
ICAgICAgICAgIHZhcmlhYmxlc1snV0VCS0lUX0lOSkVDVEVEX0JVTkRMRV9QQVRIJ10gPSAiJHsl
c30vbGliIiAlIG15ZGlyCi0gICAgICAgIGlmIHNlbGYuX3N5c2xpYnMgPT0gJ2J1bmRsZS1hbGwn
OgotICAgICAgICAgICAgaWYgYmluYXJ5X3RvX3dyYXAgIT0gImpzYyI6Ci0gICAgICAgICAgICAg
ICAgZm9yIHZhciBpbiBbJ1dFQl9QUk9DRVNTX0NNRF9QUkVGSVgnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdQTFVHSU5fUFJPQ0VTU19DTURfUFJFRklYJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnTkVUV09SS19QUk9DRVNTX0NNRF9QUkVGSVgnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdHUFVfUFJPQ0VTU19DTURfUFJFRklYJ106Ci0gICAgICAgICAgICAg
ICAgICAgIHZhcmlhYmxlc1t2YXJdID0gIiR7JXN9IiAlIHNlbGYuX2J1bmRsZXIuVkFSX0lOVEVS
UFJFVEVSCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpbnRlcnByZXRlciA9IE5vbmUKKyAg
ICAgICAgICAgIHZhcmlhYmxlc1tnc3RfdmFyXSA9ICckeyVzfS9zeXMvbGliL2dzdCcgJSBteWRp
cgorICAgICAgICAgICAgdmFyaWFibGVzWydHU1RfUkVHSVNUUllfMV8wJ10gPSAnJHslc30vc3lz
L2xpYi9nc3QvZ3N0cmVhbWVyLTEuMC5yZWdpc3RyeScgJSBteWRpcgorICAgICAgICAgICAgaWYg
b3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGJpbl9kaXIsICdnc3QtcGx1Z2luLXNjYW5uZXIn
KSk6CisgICAgICAgICAgICAgICAgdmFyaWFibGVzWydHU1RfUExVR0lOX1NDQU5ORVInXSA9ICck
eyVzfS9iaW4vZ3N0LXBsdWdpbi1zY2FubmVyJyAlIG15ZGlyCisgICAgICAgICAgICAjIHBpcGV3
aXJlIHNwYSBwbHVnaW5zIG1heSBiZSBuZWVkZWQgYnkgZ3N0cmVhbWVyLXBpcGV3aXJlCisgICAg
ICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihzeXNsaWJfZGlyLCAncGlwZXdp
cmUnKSk6CisgICAgICAgICAgICAgICAgdmFyaWFibGVzWydTUEFfUExVR0lOX0RJUiddID0gJyR7
JXN9L3N5cy9saWIvcGlwZXdpcmUnICUgbXlkaXIKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihv
cy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2RyaScpKToKKyAgICAgICAgICAgIHZhcmlhYmxlc1sn
TElCR0xfRFJJVkVSU19QQVRIJ10gPSAnJHslc30vc3lzL2xpYi9kcmknICUgbXlkaXIKKyAgICAg
ICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2dsdm5kL2VnbF92
ZW5kb3IuZCcpKToKKyAgICAgICAgICAgIHZhcmlhYmxlc1snX19FR0xfVkVORE9SX0xJQlJBUllf
RElSUyddID0gJyR7JXN9L3N5cy9saWIvZ2x2bmQvZWdsX3ZlbmRvci5kJyAlIG15ZGlyCisgICAg
ICAgIGlmIG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHNoYXJlX2RpcikpOgorICAgICAgICAg
ICAgYXNzZXJ0KHNlbGYuX3N5c2xpYnMgPT0gJ2J1bmRsZS1hbGwnKQorICAgICAgICAgICAgdmFy
aWFibGVzWydYREdfREFUQV9IT01FJ10gPSAnJHslc30vc3lzL3NoYXJlJyAlIG15ZGlyCisgICAg
ICAgICAgICB2YXJpYWJsZXNbJ1hER19EQVRBX0RJUlMnXSA9ICckeyVzfS9zeXMvc2hhcmUnICUg
bXlkaXIKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc2hhcmVfZGlyLCAn
Zm9udHMnKSk6CisgICAgICAgICAgICB2YXJpYWJsZXNbJ0ZPTlRDT05GSUdfUEFUSCddID0gJyR7
JXN9L3N5cy9zaGFyZS9mb250cy9jb25maWcnICUgbXlkaXIKKyAgICAgICAgaWYgb3MucGF0aC5p
c2Rpcihvcy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2d0aycpKToKKyAgICAgICAgICAgIHZhcmlh
Ymxlc1snR1RLX1BBVEgnXSA9ICckeyVzfS9zeXMvbGliL2d0aycgJSBteWRpcgorICAgICAgICBp
ZiBiaW5hcnlfdG9fd3JhcCAhPSAnanNjJzoKKyAgICAgICAgICAgIHZhcmlhYmxlc1snV0VCS0lU
X0VYRUNfUEFUSCddID0gJyR7JXN9L2JpbicgJSBteWRpcgorICAgICAgICAgICAgdmFyaWFibGVz
WydXRUJLSVRfSU5KRUNURURfQlVORExFX1BBVEgnXSA9ICckeyVzfS9saWInICUgbXlkaXIKICAg
ICAgICAgc2VsZi5fYnVuZGxlci5nZW5lcmF0ZV93cmFwcGVyX3NjcmlwdChpbnRlcnByZXRlciwg
YmluYXJ5X3RvX3dyYXAsIHZhcmlhYmxlcykKICAgICAgICAgc2VsZi5fd3JhcHBlcl9zY3JpcHRz
LmFwcGVuZChiaW5hcnlfdG9fd3JhcCkKIApAQCAtMjUyLDkgKzMxNiwxOCBAQCBjbGFzcyBCdW5k
bGVDcmVhdG9yKG9iamVjdCk6CiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2VsZi5fdG1wZGly
KToKICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5fdG1wZGlyKQogCisgICAgZGVmIF90
b3VjaF9yZXNldF9tdGltZShzZWxmKToKKyAgICAgICAgX2xvZy5pbmZvKCdVcGRhdGUgdGltZXN0
YW1wcyAodG91Y2gpJykKKyAgICAgICAgbm93ID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkudGlt
ZXN0YW1wKCkKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc2VsZi5f
dG1wZGlyKToKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAg
IG9zLnV0aW1lKG9zLnBhdGguam9pbihyb290LCBuYW1lKSwgdGltZXM9KG5vdywgbm93KSkKKyAg
ICAgICAgICAgIGZvciBuYW1lIGluIGRpcnM6CisgICAgICAgICAgICAgICAgb3MudXRpbWUob3Mu
cGF0aC5qb2luKHJvb3QsIG5hbWUpLCB0aW1lcz0obm93LCBub3cpKQorCiAgICAgZGVmIGNyZWF0
ZShzZWxmKToKICAgICAgICAgc2VsZi5fdG1wZGlyID0gc2VsZi5fY3JlYXRlX3RlbXBkaXIoc2Vs
Zi5fYnVpbGRwYXRoKQotICAgICAgICBzZWxmLl9idW5kbGVyID0gQmluYXJ5QnVuZGxlcihzZWxm
Ll90bXBkaXIsIHNlbGYuX3Nob3VsZF9zdHJpcF9vYmplY3RzKQorICAgICAgICBzZWxmLl9idW5k
bGVyID0gQmluYXJ5QnVuZGxlcihzZWxmLl90bXBkaXIsIHNlbGYuX2J1aWxkcGF0aCkKIAogICAg
ICAgICBpZiBvcy5wYXRoLmlzZmlsZShzZWxmLl9idW5kbGVfZmlsZV9wYXRoKToKICAgICAgICAg
ICAgIF9sb2cuaW5mbygnUmVtb3ZpbmcgcHJldmlvdXMgYnVuZGxlICVzJyAlIHNlbGYuX2J1bmRs
ZV9maWxlX3BhdGgpCkBAIC0yNjQsNiArMzM3LDkgQEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihvYmpl
Y3QpOgogICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2J1bmRsZShidW5kbGVfYmluYXJ5KQogICAg
ICAgICBzZWxmLl9nZW5lcmF0ZV9yZWFkbWUoKQogCisgICAgICAgICMgUG90ZW50aWFsbHkgYXZv
aWRzIGVycm9ycyByZWxhdGVkIHRvIFpJUCBub3QgYWJsZSB0byBzdG9yZSBtdGltZXMgb2xkZXIg
dGhhbiAxOTgwCisgICAgICAgIHNlbGYuX3RvdWNoX3Jlc2V0X210aW1lKCkKKwogICAgICAgICBp
ZiBzZWxmLl9jb21wcmVzc2lvbl90eXBlID09ICd6aXAnOgogICAgICAgICAgICAgYXJjaGl2ZXIg
PSBaaXBBcmNoaXZlcihzZWxmLl9idW5kbGVfZmlsZV9wYXRoKQogICAgICAgICBlbGlmIHNlbGYu
X2NvbXByZXNzaW9uX3R5cGUgPT0gJ3Rhci54eic6CkBAIC0yNzcsNyArMzUzLDYgQEAgY2xhc3Mg
QnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICBfbG9nLmxvZyhMT0dfTUVTU0FHRSwgJ0J1
bmRsZSBmaWxlIGNyZWF0ZWQgYXQ6ICVzJyAlIHNlbGYuX2J1bmRsZV9maWxlX3BhdGgpCiAgICAg
ICAgIHJldHVybiBzZWxmLl9idW5kbGVfZmlsZV9wYXRoCiAKLQogICAgIGRlZiBfZ2V0X3dlYmtp
dF9iaW5hcmllcyhzZWxmKToKICAgICAgICAgd2Via2l0X2JpbmFyaWVzID0gW10KICAgICAgICAg
YmluX2RpciA9IG9zLnBhdGguam9pbihzZWxmLl9idWlsZHBhdGgsICdiaW4nKQpAQCAtMjkwLDE5
ICszNjUsMTggQEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICAgICAgcmFp
c2UgUnVudGltZUVycm9yKCdDb3VsZCBub3QgZmluZCByZXF1aXJlZCBXZWJLaXQgUHJvY2VzcyBi
aW5hcmllcy4gQ2hlY2sgaWYgeW91IGFyZSBwYXNzaW5nIHRoZSByaWdodCBwbGF0Zm9ybSB2YWx1
ZS4nKQogICAgICAgICByZXR1cm4gd2Via2l0X2JpbmFyaWVzCiAKLQotICAgIGRlZiBfZ2V0X3dl
YmtpdF9idW5kbGVsaWIoc2VsZik6CisgICAgZGVmIF9nZXRfd2Via2l0X2xpYihzZWxmLCBuYW1l
KToKKyAgICAgICAgbGlia2V5bmFtZSA9IG5hbWUubG93ZXIoKQogICAgICAgICBsaWJfZGlyID0g
b3MucGF0aC5qb2luKHNlbGYuX2J1aWxkcGF0aCwgJ2xpYicpCiAgICAgICAgIGJ1bmRsZV9saWIg
PSBOb25lCiAgICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKGxpYl9kaXIpOgotICAgICAg
ICAgICAgaWYgZW50cnkuZW5kc3dpdGgoJy5zbycpIGFuZCAnaW5qZWN0ZWRidW5kbGUnIGluIGVu
dHJ5Lmxvd2VyKCkgYW5kICd0ZXN0JyBub3QgaW4gZW50cnkubG93ZXIoKToKKyAgICAgICAgICAg
IGlmIGVudHJ5LmVuZHN3aXRoKCcuc28nKSBhbmQgbGlia2V5bmFtZSBpbiBlbnRyeS5sb3dlcigp
IGFuZCAndGVzdCcgbm90IGluIGVudHJ5Lmxvd2VyKCk6CiAgICAgICAgICAgICAgICAgYXNzZXJ0
KGJ1bmRsZV9saWIgPT0gTm9uZSkKICAgICAgICAgICAgICAgICBidW5kbGVfbGliID0gb3MucGF0
aC5qb2luKGxpYl9kaXIsIGVudHJ5KQogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGFz
c2VydChidW5kbGVfbGliKQogICAgICAgICByZXR1cm4gYnVuZGxlX2xpYgogCi0KICAgICBkZWYg
X2NyZWF0ZV9hcmNoaXZlKHNlbGYsIGFyY2hpdmVyKToKICAgICAgICAgX2xvZy5pbmZvKCdDcmVh
dGUgYXJjaGl2ZScpCiAgICAgICAgIHdpdGggYXJjaGl2ZXI6CkBAIC0zMzEsNDIgKzQwNSwxNDAg
QEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICBfbG9nLmluZm8oJ0FkZCBk
ZXBlbmRlbmN5IG9uIHN5c3RlbSBwYWNrYWdlIFslc106ICVzJyAlKHBhY2thZ2UsIG9iamVjdCkp
CiAgICAgICAgIHJldHVybiBwYWNrYWdlCiAKLQotICAgIGRlZiBfZ2V0X2dpb19tb2R1bGVzKHNl
bGYpOgotICAgICAgICBnaW9fbW9kdWxlcyA9IFtdCi0gICAgICAgIHJldGNvZGUsIHN0ZG91dCwg
c3RkZXJyID0gc2VsZi5fcnVuX2NtZF9hbmRfZ2V0X291dHB1dChbJ3BrZy1jb25maWcnLCAnLS12
YXJpYWJsZT1naW9tb2R1bGVkaXInLCAnZ2lvLTIuMCddKQorICAgIGRlZiBfZ2V0X3BrZ19jb25m
aWdfdmFyKHNlbGYsIG1vZHVsZSwgdmFyX25hbWUsIGFzc2VydF92YWx1ZT1UcnVlKToKKyAgICAg
ICAgcmV0Y29kZSwgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLl9ydW5fY21kX2FuZF9nZXRfb3V0cHV0
KFsncGtnLWNvbmZpZycsICctLXZhcmlhYmxlPSVzJyAlIHZhcl9uYW1lLCBtb2R1bGVdKQogICAg
ICAgICBpZiByZXRjb2RlICE9IDA6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1Ro
ZSBwa2ctY29uZmlnIGNvbW1hbmQgcmV0dXJuZWQgc3RhdHVzICVkJyAlIHJldGNvZGUpCi0gICAg
ICAgIGdpb19tb2R1bGVfZGlyID0gc3Rkb3V0LnN0cmlwKCkKLSAgICAgICAgaWYgbm90IG9zLnBh
dGguaXNkaXIoZ2lvX21vZHVsZV9kaXIpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9y
KCdUaGUgcGtnLWNvbmZpZyBlbnRyeSBmb3IgZ2lvbW9kdWxlZGlyIGlzIG5vdCBhIGRpcmVjdG9y
eTogJXMnICUgZ2lvX21vZHVsZV9kaXIpCi0gICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGly
KGdpb19tb2R1bGVfZGlyKToKLSAgICAgICAgICAgIGlmIGVudHJ5LmVuZHN3aXRoKCcuc28nKToK
LSAgICAgICAgICAgICAgICBnaW9fbW9kdWxlcy5hcHBlbmQob3MucGF0aC5qb2luKGdpb19tb2R1
bGVfZGlyLCBlbnRyeSkpCi0gICAgICAgIHJldHVybiBnaW9fbW9kdWxlcworICAgICAgICB2YXJf
dmFsdWUgPSBzdGRvdXQuc3RyaXAoKQorICAgICAgICBpZiBhc3NlcnRfdmFsdWU6CisgICAgICAg
ICAgICBpZiB2YXJfbmFtZS5lbmRzd2l0aCgnZGlyJykgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKHZh
cl92YWx1ZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgcGtnLWNv
bmZpZyBlbnRyeSBmb3IgJXMgaXMgbm90IGEgZGlyZWN0b3J5OiAlcycgJSAodmFyX25hbWUsIHZh
cl92YWx1ZSkpCisgICAgICAgICAgICBpZiBsZW4odmFyX3ZhbHVlKSA9PSAwOgorICAgICAgICAg
ICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVGhlIHBrZy1jb25maWcgZW50cnkgZm9yICVzIGhh
cyB6ZXJvIGxlbmdodCcgJSB2YXJfdmFsdWUpCisgICAgICAgIHJldHVybiB2YXJfdmFsdWUKKwor
ICAgIGRlZiBfbGlzdF9maWxlc19kaXJlY3Rvcnkoc2VsZiwgZGlyZWN0b3J5LCBsaXN0X2luc2lk
ZV9zdWJkaXJzPUZhbHNlLCBmaWx0ZXJfc3VmZml4PU5vbmUpOgorICAgICAgICBmb3VuZF9maWxl
cyA9IFtdCisgICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKGRpcmVjdG9yeSk6CisgICAg
ICAgICAgICBlbnRyeV9wYXRoID0gb3MucGF0aC5qb2luKGRpcmVjdG9yeSwgZW50cnkpCisgICAg
ICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGVudHJ5X3BhdGgpOgorICAgICAgICAgICAgICAgIGlm
IGxpc3RfaW5zaWRlX3N1YmRpcnM6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2ZpbGVzLmV4
dGVuZChzZWxmLl9saXN0X2ZpbGVzX2RpcmVjdG9yeShlbnRyeV9wYXRoLCBsaXN0X2luc2lkZV9z
dWJkaXJzLCBmaWx0ZXJfc3VmZml4KSkKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2ZpbGUo
ZW50cnlfcGF0aCk6CisgICAgICAgICAgICAgICAgaWYgZmlsdGVyX3N1ZmZpeCBpcyBOb25lIG9y
IGVudHJ5X3BhdGguZW5kc3dpdGgoZmlsdGVyX3N1ZmZpeCk6CisgICAgICAgICAgICAgICAgICAg
IGZvdW5kX2ZpbGVzLmFwcGVuZChlbnRyeV9wYXRoKQorICAgICAgICBpZiBsZW4oZm91bmRfZmls
ZXMpID09IDA6CisgICAgICAgICAgICByYWlzZSBSdW5UaW1lRXJyb3IoJ0NhbiBub3QgZmluZCBh
bnkgbWF0Y2hpbmcgZmlsZSBhdCBkaXJlY3RvcnkgJXMnICUgZGlyZWN0b3J5KQorICAgICAgICBy
ZXR1cm4gZm91bmRfZmlsZXMKIAotICAgIGRlZiBfZ2V0X2dzdHJlYW1lcl9tb2R1bGVzKHNlbGYp
OgotICAgICAgICBnc3RyZWFtZXJfcGx1Z2lucyA9IFtdCi0gICAgICAgIHJldGNvZGUsIHN0ZG91
dCwgc3RkZXJyID0gc2VsZi5fcnVuX2NtZF9hbmRfZ2V0X291dHB1dChbJ3BrZy1jb25maWcnLCAn
LS12YXJpYWJsZT1wbHVnaW5zZGlyJywgJ2dzdHJlYW1lci0xLjAnXSkKLSAgICAgICAgaWYgcmV0
Y29kZSAhPSAwOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgcGtnLWNvbmZp
ZyBjb21tYW5kIHJldHVybmVkIHN0YXR1cyAlZCcgJSByZXRjb2RlKQotICAgICAgICBnc3RyYW1l
cl9wbHVnaW5zX2RpciA9IHN0ZG91dC5zdHJpcCgpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlz
ZGlyKGdzdHJhbWVyX3BsdWdpbnNfZGlyKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJv
cignVGhlIHBrZy1jb25maWcgZW50cnkgZm9yIHBsdWdpbnNkaXIgaXMgbm90IGEgZGlyZWN0b3J5
OiAlcycgJSBnc3RyYW1lcl9wbHVnaW5zX2RpcikKLSAgICAgICAgZm9yIGVudHJ5IGluIG9zLmxp
c3RkaXIoZ3N0cmFtZXJfcGx1Z2luc19kaXIpOgotICAgICAgICAgICAgaWYgZW50cnkuZW5kc3dp
dGgoJy5zbycpOgotICAgICAgICAgICAgICAgIGdzdHJlYW1lcl9wbHVnaW5zLmFwcGVuZChvcy5w
YXRoLmpvaW4oZ3N0cmFtZXJfcGx1Z2luc19kaXIsIGVudHJ5KSkKLSAgICAgICAgcmV0dXJuIGdz
dHJlYW1lcl9wbHVnaW5zCisgICAgZGVmIF9nZXRfZ2lvX21vZHVsZXMoc2VsZik6CisgICAgICAg
IGdpb19tb2R1bGVfZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdnaW8tMi4wJywgJ2dp
b21vZHVsZWRpcicpCisgICAgICAgIHJldHVybiBzZWxmLl9saXN0X2ZpbGVzX2RpcmVjdG9yeShn
aW9fbW9kdWxlX2RpciwgZmlsdGVyX3N1ZmZpeD0nLnNvJykKIAorICAgIGRlZiBfZ2V0X2d0a19t
b2R1bGVzKHNlbGYsIHN1YmRpcik6CisgICAgICAgIGd0a19saWJfZGlyID0gc2VsZi5fZ2V0X3Br
Z19jb25maWdfdmFyKCdndGsrLTMuMCcsICdsaWJkaXInKQorICAgICAgICBndGtfYmluYXJ5X3Zl
cnNpb24gPSBzZWxmLl9nZXRfcGtnX2NvbmZpZ192YXIoJ2d0aystMy4wJywgJ2d0a19iaW5hcnlf
dmVyc2lvbicpCisgICAgICAgIGd0a19tb2R1bGVfZGlyID0gb3MucGF0aC5qb2luKGd0a19saWJf
ZGlyLCAnZ3RrLTMuMCcsIGd0a19iaW5hcnlfdmVyc2lvbiwgc3ViZGlyKQorICAgICAgICBpZiBu
b3Qgb3MucGF0aC5pc2RpcihndGtfbW9kdWxlX2Rpcik6CisgICAgICAgICAgICByYWlzZSBSdW50
aW1lRXJyb3IoJ0NhbiBub3QgZmluZCB0aGUgdGhlIGd0ayBtb2R1bGUgZGlyICVzJyAlIGd0a19t
b2R1bGVfZGlyKQorICAgICAgICByZXR1cm4gc2VsZi5fbGlzdF9maWxlc19kaXJlY3RvcnkoZ3Rr
X21vZHVsZV9kaXIsIGZpbHRlcl9zdWZmaXg9Jy5zbycpCisKKyAgICBkZWYgX2dldF9nc3RyZWFt
ZXJfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgZ3N0cmVhbWVyX3BsdWdpbnNfZGlyID0gc2VsZi5f
Z2V0X3BrZ19jb25maWdfdmFyKCdnc3RyZWFtZXItMS4wJywgJ3BsdWdpbnNkaXInKQorICAgICAg
ICByZXR1cm4gc2VsZi5fbGlzdF9maWxlc19kaXJlY3RvcnkoZ3N0cmVhbWVyX3BsdWdpbnNfZGly
LCBmaWx0ZXJfc3VmZml4PScuc28nKQorCisgICAgZGVmIF9nZXRfZ3N0cmVhbWVyX3BsdWdpbl9z
Y2FubmVyKHNlbGYpOgorICAgICAgICBkZWYgcGx1Z2luX3NjYW5uZXJfZm91bmQocGx1Z2luX3Nj
YW5uZXJfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4gKG9zLnBhdGguaXNmaWxlKHBsdWdpbl9z
Y2FubmVyX3BhdGgpIGFuZCBvcy5hY2Nlc3MocGx1Z2luX3NjYW5uZXJfcGF0aCwgb3MuWF9PSykp
CisKKyAgICAgICAgZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVyX2RpciA9IGdpb19tb2R1bGVfZGly
ID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdnc3RyZWFtZXItMS4wJywgJ3BsdWdpbnNjYW5u
ZXJkaXInLCBhc3NlcnRfdmFsdWU9RmFsc2UpCisgICAgICAgIGdzdHJlYW1lcl9wbHVnaW5fc2Nh
bm5lciA9IG9zLnBhdGguam9pbihnc3RyZWFtZXJfcGx1Z2luX3NjYW5uZXJfZGlyLCAnZ3N0LXBs
dWdpbi1zY2FubmVyJykKKyAgICAgICAgaWYgbm90IHBsdWdpbl9zY2FubmVyX2ZvdW5kKGdzdHJl
YW1lcl9wbHVnaW5fc2Nhbm5lcik6CisgICAgICAgICAgICAjIHBsdWdpbnNjYW5uZXJkaXIgcGtn
LWNvbmZpZyB2YXJpYWJsZSBpcyBhdmFpbGFibGUgb25seSBvbiByZWNlbnQgdmVyc2lvbnMgb2Yg
Z3N0CisgICAgICAgICAgICAjIGdpdmUgaXQgYSBzZWNvbmQgY2hhbmNlIHdpdGggc29tZSBrbm93
biBkaXJlY3RvcmllcyBvbiBkZWJpYW4vdWJ1bnR1IGFuZCBmZWRvcmEvY2VudG9zCisgICAgICAg
ICAgICBsaWJfZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdnc3RyZWFtZXItMS4wJywg
J2xpYmRpcicpCisgICAgICAgICAgICBwbHVnaW5zX2RpciA9IHNlbGYuX2dldF9wa2dfY29uZmln
X3ZhcignZ3N0cmVhbWVyLTEuMCcsICdwbHVnaW5zZGlyJykKKyAgICAgICAgICAgIGZvciBnc3Ry
ZWFtZXJfcGx1Z2luX3NjYW5uZXJfZGlyIGluIFsgb3MucGF0aC5qb2luKGxpYl9kaXIsICdnc3Ry
ZWFtZXIxLjAvZ3N0cmVhbWVyLTEuMCcpLCBwbHVnaW5zX2RpciwgJy91c3IvbGliZXhlYy9nc3Ry
ZWFtZXItMS4wJ106CisgICAgICAgICAgICAgICAgZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVyID0g
b3MucGF0aC5qb2luKGdzdHJlYW1lcl9wbHVnaW5fc2Nhbm5lcl9kaXIsICdnc3QtcGx1Z2luLXNj
YW5uZXInKQorICAgICAgICAgICAgICAgIGlmIHBsdWdpbl9zY2FubmVyX2ZvdW5kKGdzdHJlYW1l
cl9wbHVnaW5fc2Nhbm5lcik6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlm
IG5vdCBwbHVnaW5fc2Nhbm5lcl9mb3VuZChnc3RyZWFtZXJfcGx1Z2luX3NjYW5uZXIpOgorICAg
ICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDb3VsZCBub3QgZmluZCBnc3QtcGx1Z2luLXNj
YW5uZXIgYmluYXJ5IGF0IHBhdGggIiVzIi4nICUgZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVyKQor
ICAgICAgICByZXR1cm4gZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVyCisKKyAgICBkZWYgX2dldF9s
aWJjX2xpYnJhcmllcyhzZWxmKToKKyAgICAgICAgbGliY19saWJyYXJ5X25hbWVzID0gWyAnbGli
YW5sJywgJ2xpYkJyb2tlbkxvY2FsZScsICdsaWJjJywgJ2xpYmNyeXB0JywgJ2xpYmRsJywgJ2xp
YmdjY19zJywgJ2xpYm0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWJtdmVj
JywgJ2xpYm5zbCcsICdsaWJwdGhyZWFkJywgJ2xpYnJlc29sdicsICdsaWJydCcsICdsaWJ0aHJl
YWRfZGInLCAnbGlidXRpbCddCisgICAgICAgIGxpYmNfbGlicmFyaWVzID0gW10KKyAgICAgICAg
bGliX2RpciA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3ZhcignZHJpJywgJ2xpYmRpcicpCisgICAg
ICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKGxpYl9kaXIpOgorICAgICAgICAgICAgaWYgYW55
KGVudHJ5LnN0YXJ0c3dpdGgobCsnLnNvLicpIGZvciBsIGluIGxpYmNfbGlicmFyeV9uYW1lcykg
b3IgKGVudHJ5LnN0YXJ0c3dpdGgoJ2xpYm5zc18nKSBhbmQgJy5zby4nIGluIGVudHJ5KToKKyAg
ICAgICAgICAgICAgICBsaWJjX2xpYnJhcmllcy5hcHBlbmQob3MucGF0aC5qb2luKGxpYl9kaXIs
IGVudHJ5KSkKKyAgICAgICAgZm9yIGxpYmNfbGlicmFyeV9wcmVmaXggaW4gbGliY19saWJyYXJ5
X25hbWVzOgorICAgICAgICAgICAgaWYgbm90IGFueShvcy5wYXRoLmJhc2VuYW1lKGwpLnN0YXJ0
c3dpdGgobGliY19saWJyYXJ5X3ByZWZpeCsnLnNvLicpIGZvciBsIGluIGxpYmNfbGlicmFyaWVz
KToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1VuYWJsZSB0byBmaW5kIGxp
YmMgbGlicmFyeSAlcycgJSBsaWJjX2xpYnJhcnlfcHJlZml4KQorICAgICAgICBpZiBub3QgYW55
KG9zLnBhdGguYmFzZW5hbWUobCkuc3RhcnRzd2l0aCgnbGlibnNzXycpIGZvciBsIGluIGxpYmNf
bGlicmFyaWVzKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVW5hYmxlIHRvIGZp
bmQgbGliYyBsaWJuc3NfIGxpYnJhcmllcycpCisgICAgICAgIHJldHVybiBsaWJjX2xpYnJhcmll
cworCisgICAgZGVmIF9nZXRfbWVzYV9saWJyYXJpZXMoc2VsZik6CisgICAgICAgIG1lc2FfbGli
cmFyeV9uYW1lcyA9IFsnbGliZ2xhcGknLCAnbGlieGNiLWdseCcsICdsaWJHTFgnLCAnbGliRUdM
JywgJ2xpYkdMJywgJ2xpYkdMRVN2MicsICdsaWJFR0xfbWVzYScsICdsaWJHTFhfbWVzYSddCisg
ICAgICAgIG1lc2FfbGlicmFyaWVzID0gW10KKyAgICAgICAgbGliX2Rpcl9kcmkgPSBzZWxmLl9n
ZXRfcGtnX2NvbmZpZ192YXIoJ2RyaScsICdsaWJkaXInKQorICAgICAgICAjIFNvbWUgdmVyc2lv
bnMgb2YgdGhlIGZsYXRwYWsgU0RLIHNoaXBzIHRoZSBNZXNhIGxpYnJhcmllcyBpbnRvIGEgbm9u
LXN0YW5kYXJkIHBhdGguCisgICAgICAgIGNhbmRpZGF0ZV9saWJfZGlycyA9IFsgbGliX2Rpcl9k
cmksIG9zLnBhdGguam9pbihsaWJfZGlyX2RyaSwgJ0dML2RlZmF1bHQvbGliJykgXQorICAgICAg
ICBmb3IgbGliX2RpciBpbiBjYW5kaWRhdGVfbGliX2RpcnM6CisgICAgICAgICAgICBpZiBvcy5w
YXRoLmlzZGlyKGxpYl9kaXIpOgorICAgICAgICAgICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0
ZGlyKGxpYl9kaXIpOgorICAgICAgICAgICAgICAgICAgICBpZiBhbnkoZW50cnkuc3RhcnRzd2l0
aChsKycuc28uJykgZm9yIGwgaW4gbWVzYV9saWJyYXJ5X25hbWVzKToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1lc2FfbGlicmFyaWVzLmFwcGVuZChvcy5wYXRoLmpvaW4obGliX2RpciwgZW50
cnkpKQorICAgICAgICBmb3IgbWVzYV9saWJyYXJ5X3ByZWZpeCBpbiBtZXNhX2xpYnJhcnlfbmFt
ZXM6CisgICAgICAgICAgICBpZiBub3QgYW55KG9zLnBhdGguYmFzZW5hbWUobCkuc3RhcnRzd2l0
aChtZXNhX2xpYnJhcnlfcHJlZml4Kycuc28uJykgZm9yIGwgaW4gbWVzYV9saWJyYXJpZXMpOgor
ICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVW5hYmxlIHRvIGZpbmQgbWVzYSBs
aWJyYXJ5ICVzJyAlIG1lc2FfbGlicmFyeV9wcmVmaXgpCisgICAgICAgIHJldHVybiBtZXNhX2xp
YnJhcmllcworCisgICAgZGVmIF9nZXRfbWVzYV9kcmlfZHJpdmVycyhzZWxmKToKKyAgICAgICAg
ZHJpZHJpdmVyX2RpciA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3ZhcignZHJpJywgJ2RyaWRyaXZl
cmRpcicpCisgICAgICAgIHJldHVybiBzZWxmLl9saXN0X2ZpbGVzX2RpcmVjdG9yeShkcmlkcml2
ZXJfZGlyLCBmaWx0ZXJfc3VmZml4PScuc28nKQorCisgICAgZGVmIF9nZXRfZ2RrX3BpeGJ1Zl9s
b2FkZXJzKHNlbGYpOgorICAgICAgICBsb2FkZXJzX2RpciA9IHNlbGYuX2dldF9wa2dfY29uZmln
X3ZhcignZ2RrLXBpeGJ1Zi0yLjAnLCAnZ2RrX3BpeGJ1Zl9tb2R1bGVkaXInKQorICAgICAgICBy
ZXR1cm4gc2VsZi5fbGlzdF9maWxlc19kaXJlY3RvcnkobG9hZGVyc19kaXIsIGZpbHRlcl9zdWZm
aXg9Jy5zbycpCisKKyAgICBkZWYgX2dldF9nZGtfcXVlcnlfbG9hZGVyc19iaW5hcnkoc2VsZik6
CisgICAgICAgIGdka19waXhidWZfcXVlcnlfbG9hZGVyX3ZhbHVlID0gc2VsZi5fZ2V0X3BrZ19j
b25maWdfdmFyKCdnZGstcGl4YnVmLTIuMCcsICdnZGtfcGl4YnVmX3F1ZXJ5X2xvYWRlcnMnKQor
ICAgICAgICBnZGtfcGl4YnVmX2xpYmRpciA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3ZhcignZ2Rr
LXBpeGJ1Zi0yLjAnLCAnbGliZGlyJykKKyAgICAgICAgIyBTb21lIGRpc3Ryb3MgKGxpa2UgRGVi
aWFuKSBkb24ndCBzaGlwIHRoZSBiaW5hcnkgb24gdGhlIGRlY2xhcmVkIHBhdGggb24gcGtnLWNv
bmZpZywgYnV0IGluc2lkZSAkbGliZGlyL2dkay1waXhidWYtMi4wCisgICAgICAgIGZvciBnZGtf
cGl4YnVmX2JpbmFyeSAgaW4gWyBnZGtfcGl4YnVmX3F1ZXJ5X2xvYWRlcl92YWx1ZSwgb3MucGF0
aC5qb2luKGdka19waXhidWZfbGliZGlyLCAnZ2RrLXBpeGJ1Zi0yLjAvZ2RrLXBpeGJ1Zi1xdWVy
eS1sb2FkZXJzJykgXToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGdka19waXhidWZf
YmluYXJ5KSBhbmQgb3MuYWNjZXNzKGdka19waXhidWZfYmluYXJ5LCBvcy5YX09LKToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2RrX3BpeGJ1Zl9iaW5hcnkKKyAgICAgICAgcmFpc2UgUnVudGlt
ZUVycm9yKCdVbmFibGUgdG8gZmluZCBhIHZhbGlkIHBhdGggdG8gZ2RrLXBpeGJ1Zi1xdWVyeS1s
b2FkZXJzIGJpbmFyeScpCisKKyAgICBkZWYgX2dldF9ndGtfcXVlcnlfaW1tb2R1bGVzX2JpbmFy
eShzZWxmKToKKyAgICAgICAgZ3RrX2xpYmRpciA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3Zhcign
Z3RrKy0zLjAnLCAnbGliZGlyJykKKyAgICAgICAgZm9yIGd0a19kaXIgaW4gWyAnL3Vzci9iaW4n
LCBndGtfbGliZGlyLCBvcy5wYXRoLmpvaW4oZ3RrX2xpYmRpciwgJ2xpYmd0ay0zLTAnKSwgb3Mu
cGF0aC5qb2luKGd0a19saWJkaXIsICdndGstMy4wJykgXToKKyAgICAgICAgICAgIGd0a19pbW1v
ZHVsZXNfYmluYXJ5ID0gb3MucGF0aC5qb2luKGd0a19kaXIsICdndGstcXVlcnktaW1tb2R1bGVz
LTMuMCcpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShndGtfaW1tb2R1bGVzX2JpbmFy
eSkgYW5kIG9zLmFjY2VzcyhndGtfaW1tb2R1bGVzX2JpbmFyeSwgb3MuWF9PSyk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGd0a19pbW1vZHVsZXNfYmluYXJ5CisgICAgICAgIHJhaXNlIFJ1bnRp
bWVFcnJvcignVW5hYmxlIHRvIGZpbmQgYSB2YWxpZCBwYXRoIHRvIGdkay1waXhidWYtcXVlcnkt
bG9hZGVycyBiaW5hcnknKQorCisgICAgZGVmIF9nZXRfcGlwZXdpcmVfc3BhX2Jhc2VkaXJfYW5k
X3BsdWdpbnMoc2VsZik6CisgICAgICAgIHNwYV9wbHVnaW5fZGlyID0gc2VsZi5fZ2V0X3BrZ19j
b25maWdfdmFyKCdsaWJzcGEtMC4yJywgJ3BsdWdpbmRpcicsIGFzc2VydF92YWx1ZT1GYWxzZSkK
KyAgICAgICAgIyBDdXJyZW50bHkgdGhlIGZsYXRwYWsgU0RLIGRvZXNuJ3QgZGVjbGFyZSBwbHVn
aW5kaXIgKG5vdCBzdXJlIHdoeSkuLiBmYWxsYmFjayB0byBidWlsZCBpdCBmcm9tIGxpYmRpcgor
ICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzcGFfcGx1Z2luX2Rpcik6CisgICAgICAgICAg
ICBzcGFfcGx1Z2luX2RpciA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3ZhcignbGlic3BhLTAuMics
ICdsaWJkaXInKQorICAgICAgICAgICAgc3BhX3BsdWdpbl9kaXIgPSBvcy5wYXRoLmpvaW4oc3Bh
X3BsdWdpbl9kaXIsICdzcGEtMC4yJykKKyAgICAgICAgcGlwZXdpcmVfc3BhX3BsdWdpbnMgPSBz
ZWxmLl9saXN0X2ZpbGVzX2RpcmVjdG9yeShzcGFfcGx1Z2luX2RpciwgbGlzdF9pbnNpZGVfc3Vi
ZGlycz1UcnVlLCBmaWx0ZXJfc3VmZml4PScuc28nKQorICAgICAgICByZXR1cm4gc3BhX3BsdWdp
bl9kaXIsIHBpcGV3aXJlX3NwYV9wbHVnaW5zCiAKICAgICBkZWYgX2FkZF9vYmplY3Rfb3JfZ2V0
X3N5c2RlcChzZWxmLCBvYmplY3QsIG9iamVjdF90eXBlKToKICAgICAgICAgcHJvdmlkZWRfYnlf
c3lzdGVtX3BhY2thZ2UgPSBOb25lCiAgICAgICAgIGlmIHNlbGYuX3N5c2xpYnMgPT0gJ2J1bmRs
ZS1hbGwnOgotICAgICAgICAgICAgc2VsZi5fYnVuZGxlci5jb3B5X2FuZF9yZW1vdmVfcnBhdGgo
b2JqZWN0LCB0eXBlPW9iamVjdF90eXBlKQorICAgICAgICAgICAgc2VsZi5fYnVuZGxlci5jb3B5
X2FuZF9tYXliZV9zdHJpcF9wYXRjaGVsZihvYmplY3QsIHR5cGU9b2JqZWN0X3R5cGUsIHN0cmlw
PXNlbGYuX3Nob3VsZF9zdHJpcF9vYmplY3RzLCBwYXRjaGVsZl9yZW1vdmVycGF0aD1UcnVlLCBw
YXRjaGVsZl9ub2RlZmF1bHRsaWI9VHJ1ZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHBy
b3ZpZGVkX2J5X3N5c3RlbV9wYWNrYWdlID0gc2VsZi5fZ2V0X3N5c3RlbV9wYWNrYWdlX25hbWUo
b2JqZWN0KQogICAgICAgICAgICAgaWYgbm90IHByb3ZpZGVkX2J5X3N5c3RlbV9wYWNrYWdlOgot
ICAgICAgICAgICAgICAgIHNlbGYuX2J1bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRoKG9iamVj
dCwgdHlwZT1vYmplY3RfdHlwZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9idW5kbGVyLmNvcHlf
YW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKG9iamVjdCwgdHlwZT1vYmplY3RfdHlwZSwgc3RyaXA9
c2VsZi5fc2hvdWxkX3N0cmlwX29iamVjdHMsIHBhdGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBh
dGNoZWxmX25vZGVmYXVsdGxpYj1GYWxzZSkKICAgICAgICAgcmV0dXJuIHByb3ZpZGVkX2J5X3N5
c3RlbV9wYWNrYWdlCiAKICAgICBkZWYgX2Vuc3VyZV93cGVfYmFja2VuZF9zeW1saW5rKHNlbGYp
OgpAQCAtMzgyLDYgKzU1NCw4NCBAQCBjbGFzcyBCdW5kbGVDcmVhdG9yKG9iamVjdCk6CiAgICAg
ICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoZW50cnksIHdwZV9iYWNrZW5kX3NvbmFtZSkKICAg
ICAgICAgICAgICAgICBvcy5jaGRpcihwcmV2aW91c19kaXIpCiAgICAgICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihidW5kbGVfbGli
X2Rpciwgd3BlX2JhY2tlbmRfc29uYW1lKSk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJy
b3IoJ1VuYWJsZSB0byBjcmVhdGUgbGliV1BFQmFja2VuZC1mZG8tMS4wLnNvIHN5bWxpbmsnKQor
CisgICAgZGVmIF9kbG9wZW53cmFwX21ha2Uoc2VsZiwgYWN0aW9uPU5vbmUpOgorICAgICAgICBk
bG9wZW53cmFwX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fZGxvcGVud3JhcF9kaXIsICdkbG9w
ZW53cmFwLnNvJykKKyAgICAgICAgcHJldmlvdXNfY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAg
b3MuY2hkaXIoc2VsZi5fZGxvcGVud3JhcF9kaXIpCisgICAgICAgIGlmIGFjdGlvbiA9PSAnYnVp
bGQnOgorICAgICAgICAgICAgcmV0Y29kZSwgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLl9ydW5fY21k
X2FuZF9nZXRfb3V0cHV0KFsnbWFrZSddKQorICAgICAgICAgICAgaWYgKHJldGNvZGUgIT0gMCkg
b3IgKG5vdCBvcy5wYXRoLmlzZmlsZShkbG9wZW53cmFwX3BhdGgpKToKKyAgICAgICAgICAgICAg
ICByYWlzZSBSdW50aW1lRXJyb3IoJ0Vycm9yIGJ1aWxkaW5nIGRsb3BlbndyYXAuc286IFRoZSBt
YWtlIGNvbW1hbmQgcmV0dXJuZWQgJWQgc3RhdHVzIHdpdGggdGhpcyBvdXRwdXQ6ICVzICVzJyAl
IChyZXRjb2RlLCBzdGRvdXQsIHN0ZGVycikpCisgICAgICAgIGVsaWYgYWN0aW9uID09ICdjbGVh
bic6CisgICAgICAgICAgICByZXRjb2RlLCBzdGRvdXQsIHN0ZGVyciA9IHNlbGYuX3J1bl9jbWRf
YW5kX2dldF9vdXRwdXQoWydtYWtlJywgJ2NsZWFuJ10pCisgICAgICAgICAgICBpZiAocmV0Y29k
ZSAhPSAwKSBvciBvcy5wYXRoLmlzZmlsZShkbG9wZW53cmFwX3BhdGgpOgorICAgICAgICAgICAg
ICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXJyb3IgY2xlYW5pbmcgZGxvcGVud3JhcC5zbzogVGhl
IG1ha2UgY29tbWFuZCByZXR1cm5lZCAlZCBzdGF0dXMgd2l0aCB0aGlzIG91dHB1dDogJXMgJXMn
ICUgKHJldGNvZGUsIHN0ZG91dCwgc3RkZXJyKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1Vua25vd24gYWN0aW9uICVzJyAlIGFjdGlvbikK
KyAgICAgICAgb3MuY2hkaXIocHJldmlvdXNfY3dkKQorICAgICAgICByZXR1cm4gZGxvcGVud3Jh
cF9wYXRoCisKKyAgICBkZWYgX2Rpc2NvdmVyX2VnbF9tZXNhX2NvbmZpZ19maWxlKHNlbGYpOgor
ICAgICAgICBlZ2xfbGliZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdlZ2wnLCAnbGli
ZGlyJykKKyAgICAgICAgIyBOb3Qga25vd24gd2F5IG9mIGdldHRpbmcgdGhlIGRpcmVjdG9yeSBk
eW5hbWljYWxseSwgYXNzdW1lIGl0IGlzIHRoZXJlLgorICAgICAgICBpY2RfZWdsX21lc2FfY29u
ZmlnX2NhbmRpZGF0ZXMgPSBbJy91c3Ivc2hhcmUvZ2x2bmQvZWdsX3ZlbmRvci5kLzUwX21lc2Eu
anNvbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0
aC5qb2luKGVnbF9saWJkaXIsICdHTC9nbHZuZC9lZ2xfdmVuZG9yLmQvNTBfbWVzYS5qc29uJyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2lu
KGVnbF9saWJkaXIsICdnbHZuZC9lZ2xfdmVuZG9yLmQvNTBfbWVzYS5qc29uJyldCisgICAgICAg
IGZvciBpY2RfZWdsX21lc2FfY29uZmlnX2NhbmRpZGF0ZSBpbiBpY2RfZWdsX21lc2FfY29uZmln
X2NhbmRpZGF0ZXM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShpY2RfZWdsX21lc2Ff
Y29uZmlnX2NhbmRpZGF0ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGljZF9lZ2xfbWVzYV9j
b25maWdfY2FuZGlkYXRlCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ291bGQgbm90IGZp
bmQgbWVzYSBFR0wgSUNEIGNvbmZpZycpCisKKyAgICBkZWYgX2dldF9tZXNhX2VnbF9pY2RfZHJp
dmVyX3BhdGgoc2VsZiwgaWNkX2NvbmZpZyk6CisgICAgICAgIHdpdGggb3BlbihpY2RfY29uZmln
LCAncicpIGFzIGY6CisgICAgICAgICAgICBqc29uX2RhdGEgPSBqc29uLmxvYWQoZikKKyAgICAg
ICAgZWdsX2ljZF9saWJyYXJ5X25hbWUgPSBqc29uX2RhdGFbJ0lDRCddWydsaWJyYXJ5X3BhdGgn
XQorICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKGVnbF9pY2RfbGlicmFyeV9uYW1lKToKKyAgICAg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BhdGggcmV3cml0dGluZyBuZWVkcyB0
byBiZSBpbXBsZW1lbnRlZCB0byBoYW5kbGUgSUNEIGNvbmZpZyBmaWxlcyB3aXRoIGFic3BhdGgn
KQorICAgICAgICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIGZsYXRwYWsgU0RLIHNoaXBzIHRoZSBF
R0wgSUNEIGxpYnJhcnkgaW50byBhIG5vbi1zdGFuZGFyZCBwYXRoLgorICAgICAgICBlZ2xfbGli
ZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdlZ2wnLCAnbGliZGlyJykKKyAgICAgICAg
ZWdsX2ljZF9saWJyYXJ5X2ZvdW5kID0gRmFsc2UKKyAgICAgICAgZWdsX2ljZF9saWJyYXJ5X3Bh
dGhzID0gW29zLnBhdGguam9pbihlZ2xfbGliZGlyLCBlZ2xfaWNkX2xpYnJhcnlfbmFtZSksIG9z
LnBhdGguam9pbihlZ2xfbGliZGlyLCAnR0wvZGVmYXVsdC9saWInLCBlZ2xfaWNkX2xpYnJhcnlf
bmFtZSldCisgICAgICAgIGZvciBlZ2xfaWNkX2xpYnJhcnlfcGF0aCBpbiBlZ2xfaWNkX2xpYnJh
cnlfcGF0aHM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShlZ2xfaWNkX2xpYnJhcnlf
cGF0aCk6CisgICAgICAgICAgICAgICAgZWdsX2ljZF9saWJyYXJ5X2ZvdW5kID0gVHJ1ZQorICAg
ICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBlZ2xfaWNkX2xpYnJhcnlfZm91bmQ6
CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1VuYWJsZSB0byBmaW5kIHRoZSBFR0wg
SUNEIGxpYnJhcnkgJXMnICUgZWdsX2ljZF9saWJyYXJ5X3BhdGgpCisgICAgICAgIHJldHVybiBl
Z2xfaWNkX2xpYnJhcnlfcGF0aAorCisgICAgZGVmIF9nZXRfdG90YWxfc2l6ZV9kaXIoc2VsZiwg
ZGlyZWN0b3J5KToKKyAgICAgICAgc2l6ZSA9IDAKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZp
bGVzIGluIG9zLndhbGsoZGlyZWN0b3J5KToKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVz
OgorICAgICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmaWxlKQor
ICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVfcGF0aCk6CisgICAgICAgICAg
ICAgICAgICAgIHNpemUgKz0gb3MucGF0aC5nZXRzaXplKGZpbGVfcGF0aCkKKyAgICAgICAgcmV0
dXJuIHNpemUKKworICAgIGRlZiBfZ2VuZXJhdGVfZm9udF9jb25mKHNlbGYsIGRhdGFfZGlyZWN0
b3J5KToKKyAgICAgICAgZm9udF9jb25mX3BhdGggPSBvcy5wYXRoLmpvaW4oZGF0YV9kaXJlY3Rv
cnksICdmb250cy5jb25mJykKKyAgICAgICAgd2l0aCBvcGVuKGZvbnRfY29uZl9wYXRoLCAndycp
IGFzIGZvbnRfY29uZl9oYW5kbGU6CisgICAgICAgICAgICBmb250X2NvbmZfaGFuZGxlLndyaXRl
KEZPTlRfQ09ORl9GSUxFKQorCisgICAgZGVmIF9nZW5lcmF0ZV90bHNfY2FmaWxlKHNlbGYsIGRh
dGFfZGlyZWN0b3J5KToKKyAgICAgICAgY2FmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oZGF0YV9k
aXJlY3RvcnksICdidW5kbGUtY2EtY2VydGlmaWNhdGVzLnBlbScpCisgICAgICAgIHJldGNvZGUs
IHN0ZG91dCwgc3RkZXJyID0gc2VsZi5fcnVuX2NtZF9hbmRfZ2V0X291dHB1dChbJ3RydXN0Jywg
J2V4dHJhY3QnLCAnLS1mb3JtYXQ9cGVtLWJ1bmRsZScsIGNhZmlsZV9wYXRoXSkKKyAgICAgICAg
IyB0cnVzdCBmYWlscyBpbnNpZGUgZmxhdHBhayBkdWUgdG8gaHR0cHM6Ly9naXRsYWIuY29tL2Zy
ZWVkZXNrdG9wLXNkay9mcmVlZGVza3RvcC1zZGsvLS9pc3N1ZXMvOTA0CisgICAgICAgICMgZmFs
bC1iYWNrIHRvIHRyeWluZyB0byBtYW51YWxseSBjb3B5IHRoZSBidW5kbGUKKyAgICAgICAgaWYg
KHJldGNvZGUgIT0gMCkgb3IgKG5vdCBvcy5wYXRoLmlzZmlsZShjYWZpbGVfcGF0aCkpIG9yIChv
cy5wYXRoLmdldHNpemUoY2FmaWxlX3BhdGgpIDwgMTAwKToKKyAgICAgICAgICAgIF9sb2cud2Fy
bmluZygnRmFpbGVkIHRvIGdldCBzeXN0ZW0gQ0EgYnVuZGxlIHdpdGggdGhlIHRydXN0IGNvbW1h
bmQuIFRyeWluZyB0byBmYWxsLWJhY2sgdG8gbWFudWFsIGNvcHkuJykKKyAgICAgICAgICAgIGlm
IG9zLnBhdGguaXNmaWxlKGNhZmlsZV9wYXRoKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmso
Y2FmaWxlX3BhdGgpCisgICAgICAgICAgICBmb3IgY2FuZGlkYXRlX2NhZmlsZSBpbiBbJy9ldGMv
c3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQnLCAnL2V0Yy9zc2wvY2VydC5wZW0nLCAnL2V0
Yy9wa2kvY2EtdHJ1c3QvZXh0cmFjdGVkL3BlbS90bHMtY2EtYnVuZGxlLnBlbSddOgorICAgICAg
ICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNhbmRpZGF0ZV9jYWZpbGUpOgorICAgICAgICAg
ICAgICAgICAgICBzaHV0aWwuY29weShjYW5kaWRhdGVfY2FmaWxlLCBjYWZpbGVfcGF0aCkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgKG5vdCBvcy5wYXRoLmlzZmlsZShj
YWZpbGVfcGF0aCkpIG9yIChvcy5wYXRoLmdldHNpemUoY2FmaWxlX3BhdGgpIDwgMTAwKToKKyAg
ICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIG9yIGNvcHkg
dGhlIHN5c3RlbSBUTFMgQ0FGaWxlIHdpdGggdGhlIGNlcnRpZmljYXRlcy4nKQogCiAgICAgZGVm
IF9jcmVhdGVfYnVuZGxlKHNlbGYsIGJ1bmRsZV9iaW5hcnkpOgogICAgICAgICBtYWluX2JpbmFy
eV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX2J1aWxkcGF0aCwgJ2JpbicsIGJ1bmRsZV9iaW5h
cnkpCkBAIC0zODksNDggKzYzOSwxMDYgQEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgog
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGZpbmQgYmluYXJ5IGZvciAlcyBh
dCAlcycgJSAoYnVuZGxlX2JpbmFyeSwgbWFpbl9iaW5hcnlfcGF0aCkgKQogCiAgICAgICAgIGNv
cGllZF9pbnRlcnByZXRlciA9IE5vbmUKKyAgICAgICAgbmVlZHNfdG9fY3JlYXRlX3dwZV9iYWNr
ZW5kX3N5bWxpbmsgPSBGYWxzZQogICAgICAgICBnaW9fbW9kdWxlcyA9IFtdCisgICAgICAgIGd0
a19wcmludF9tb2R1bGVzID0gW10KKyAgICAgICAgZ3RrX2ltX21vZHVsZXMgPSBbXQogICAgICAg
ICBnc3RyZWFtZXJfbW9kdWxlcyA9IFtdCisgICAgICAgIG1lc2FfZHJpX2RyaXZlcnMgPSBbXQor
ICAgICAgICBwaXBld2lyZV9zcGFfcGx1Z2lucyA9IFtdCisgICAgICAgIGdka19waXhidWZfbG9h
ZGVycyA9IFtdCisgICAgICAgIGVnbF9pY2RfbWVzYV9jb25maWdfZmlsZSA9IE5vbmUKICAgICAg
ICAgbGlicmFyaWVzX2NoZWNrZWQgPSBzZXQoKQogICAgICAgICBzeXN0ZW1fcGFja2FnZXNfbmVl
ZGVkID0gc2V0KCkKKyAgICAgICAgYmluYXJpZXNfdG9fY29weSA9IHNldCgpCiAgICAgICAgIG9i
amVjdHNfdG9fY29weSA9IFsgbWFpbl9iaW5hcnlfcGF0aCBdCisgICAgICAgICMgV2Ugb25seSB3
YW50IHRvIHNlcGFyYXRlIHRoZSBsaWJyYXJpZXMgaW4gbGliIGFuZCBzeXMvbGliIGZvciBNaW5p
QnJvd3NlciBhbmQgJ2FsbCcgYnVuZGxlcworICAgICAgICBzZWxmLl9idW5kbGVyLnNldF91c2Vf
c3lzX2xpYl9kaXJlY3RvcnkoJ01pbmlCcm93c2VyJyBpbiBzZWxmLl9idW5kbGVfYmluYXJpZXMp
CiAgICAgICAgIGlmIGJ1bmRsZV9iaW5hcnkgPT0gJ01pbmlCcm93c2VyJzoKLSAgICAgICAgICAg
IGdpb19tb2R1bGVzID0gc2VsZi5fZ2V0X2dpb19tb2R1bGVzKCkKLSAgICAgICAgICAgIGdzdHJl
YW1lcl9tb2R1bGVzID0gc2VsZi5fZ2V0X2dzdHJlYW1lcl9tb2R1bGVzKCkKKyAgICAgICAgICAg
ICMgYnVuZGRsZSBXZWJLaXQgbGlicmFyaWVzCiAgICAgICAgICAgICBvYmplY3RzX3RvX2NvcHku
ZXh0ZW5kKHNlbGYuX2dldF93ZWJraXRfYmluYXJpZXMoKSkKLSAgICAgICAgICAgIG9iamVjdHNf
dG9fY29weS5hcHBlbmQoc2VsZi5fZ2V0X3dlYmtpdF9idW5kbGVsaWIoKSkKKyAgICAgICAgICAg
IG9iamVjdHNfdG9fY29weS5hcHBlbmQoc2VsZi5fZ2V0X3dlYmtpdF9saWIoJ0luamVjdGVkQnVu
ZGxlJykpCisgICAgICAgICAgICBpZiBzZWxmLl9wbGF0Zm9ybSA9PSAnd3BlJzoKKyAgICAgICAg
ICAgICAgICBvYmplY3RzX3RvX2NvcHkuYXBwZW5kKHNlbGYuX2dldF93ZWJraXRfbGliKCdJbnNw
ZWN0b3JSZXNvdXJjZXMnKSkKKyAgICAgICAgICAgICMgQnVuZGxlIGV4dHJhIHN5c3RlbSByZWxh
dGVkIGxpYnJhcmllcworICAgICAgICAgICAgZ2lvX21vZHVsZXMgPSBzZWxmLl9nZXRfZ2lvX21v
ZHVsZXMoKQogICAgICAgICAgICAgb2JqZWN0c190b19jb3B5LmV4dGVuZChnaW9fbW9kdWxlcykK
KyAgICAgICAgICAgIGdzdHJlYW1lcl9tb2R1bGVzID0gc2VsZi5fZ2V0X2dzdHJlYW1lcl9tb2R1
bGVzKCkKICAgICAgICAgICAgIG9iamVjdHNfdG9fY29weS5leHRlbmQoZ3N0cmVhbWVyX21vZHVs
ZXMpCisgICAgICAgICAgICBpZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKKyAgICAg
ICAgICAgICAgICAjIG5lZWQgdG8gc2hpcCBhIGNvcHkgb2YgZ3N0IHBsdWdpbmcgc2Nhbm5lcgor
ICAgICAgICAgICAgICAgIG9iamVjdHNfdG9fY29weS5hcHBlbmQoc2VsZi5fZ2V0X2dzdHJlYW1l
cl9wbHVnaW5fc2Nhbm5lcigpKQorICAgICAgICAgICAgICAgICMgcGlwZXdpcmUgc3BhIHBsdWdp
bnMKKyAgICAgICAgICAgICAgICBwaXBld2lyZV9zcGFfcGx1Z2luX2Jhc2VkaXIsIHBpcGV3aXJl
X3NwYV9wbHVnaW5zID0gc2VsZi5fZ2V0X3BpcGV3aXJlX3NwYV9iYXNlZGlyX2FuZF9wbHVnaW5z
KCkKKyAgICAgICAgICAgICAgICBvYmplY3RzX3RvX2NvcHkuZXh0ZW5kKHBpcGV3aXJlX3NwYV9w
bHVnaW5zKQorICAgICAgICAgICAgICAgICMgZ3JhcGhpY3MgZHJpdmVycworICAgICAgICAgICAg
ICAgIG1lc2FfZHJpX2RyaXZlcnMgPSBzZWxmLl9nZXRfbWVzYV9kcmlfZHJpdmVycygpCisgICAg
ICAgICAgICAgICAgb2JqZWN0c190b19jb3B5LmV4dGVuZChtZXNhX2RyaV9kcml2ZXJzKQorICAg
ICAgICAgICAgICAgIG9iamVjdHNfdG9fY29weS5leHRlbmQoc2VsZi5fZ2V0X21lc2FfbGlicmFy
aWVzKCkpCisgICAgICAgICAgICAgICAgZWdsX2ljZF9tZXNhX2NvbmZpZ19maWxlID0gc2VsZi5f
ZGlzY292ZXJfZWdsX21lc2FfY29uZmlnX2ZpbGUoKQorICAgICAgICAgICAgICAgIG9iamVjdHNf
dG9fY29weS5hcHBlbmQoc2VsZi5fZ2V0X21lc2FfZWdsX2ljZF9kcml2ZXJfcGF0aChlZ2xfaWNk
X21lc2FfY29uZmlnX2ZpbGUpKQorICAgICAgICAgICAgICAgICMgc3lzdGVtIGV4dHJhIGxpYnJh
cmllcworICAgICAgICAgICAgICAgIG9iamVjdHNfdG9fY29weS5leHRlbmQoc2VsZi5fZ2V0X2xp
YmNfbGlicmFyaWVzKCkpCisgICAgICAgICAgICAgICAgIyBndGsgbW9kdWxlcworICAgICAgICAg
ICAgICAgIGlmIHNlbGYuX3BsYXRmb3JtID09ICdndGsnOgorICAgICAgICAgICAgICAgICAgICBn
dGtfcHJpbnRfbW9kdWxlcyA9IHNlbGYuX2dldF9ndGtfbW9kdWxlcygncHJpbnRiYWNrZW5kcycp
CisgICAgICAgICAgICAgICAgICAgIG9iamVjdHNfdG9fY29weS5leHRlbmQoZ3RrX3ByaW50X21v
ZHVsZXMpCisgICAgICAgICAgICAgICAgICAgIGd0a19pbV9tb2R1bGVzID0gc2VsZi5fZ2V0X2d0
a19tb2R1bGVzKCdpbW1vZHVsZXMnKQorICAgICAgICAgICAgICAgICAgICBvYmplY3RzX3RvX2Nv
cHkuZXh0ZW5kKGd0a19pbV9tb2R1bGVzKQorICAgICAgICAgICAgICAgICAgICBnZGtfcGl4YnVm
X2xvYWRlcnMgPSBzZWxmLl9nZXRfZ2RrX3BpeGJ1Zl9sb2FkZXJzKCkKKyAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0c190b19jb3B5LmV4dGVuZChnZGtfcGl4YnVmX2xvYWRlcnMpCisgICAgICAg
ICAgICAgICAgICAgIG9iamVjdHNfdG9fY29weS5hcHBlbmQoc2VsZi5fZ2V0X2dka19xdWVyeV9s
b2FkZXJzX2JpbmFyeSgpKQorICAgICAgICAgICAgICAgICAgICBvYmplY3RzX3RvX2NvcHkuYXBw
ZW5kKHNlbGYuX2dldF9ndGtfcXVlcnlfaW1tb2R1bGVzX2JpbmFyeSgpKQorICAgICAgICAgICAg
ICAgICMgb3VyIGRsb3BlbndyYXAgbGliCisgICAgICAgICAgICAgICAgb2JqZWN0c190b19jb3B5
LmFwcGVuZChzZWxmLl9kbG9wZW53cmFwX21ha2UoJ2J1aWxkJykpCisKICAgICAgICAgZm9yIG9i
amVjdCBpbiBvYmplY3RzX3RvX2NvcHk6CiAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IE5v
bmUKICAgICAgICAgICAgIGlmIG9iamVjdCBpbiBnaW9fbW9kdWxlczoKLSAgICAgICAgICAgICAg
ICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2RlcChvYmplY3Qs
ICdnaW8nKQotICAgICAgICAgICAgICAgIGlmIHN5c3RlbV9wYWNrYWdlOgotICAgICAgICAgICAg
ICAgICAgICBzeXN0ZW1fcGFja2FnZXNfbmVlZGVkLmFkZChzeXN0ZW1fcGFja2FnZSkKKyAgICAg
ICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2Rl
cChvYmplY3QsICdsaWIvZ2lvJykKICAgICAgICAgICAgIGVsaWYgb2JqZWN0IGluIGdzdHJlYW1l
cl9tb2R1bGVzOgotICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlID0gc2VsZi5fYWRkX29i
amVjdF9vcl9nZXRfc3lzZGVwKG9iamVjdCwgJ2dzdCcpCi0gICAgICAgICAgICAgICAgaWYgc3lz
dGVtX3BhY2thZ2U6Ci0gICAgICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlc19uZWVkZWQu
YWRkKHN5c3RlbV9wYWNrYWdlKQotICAgICAgICAgICAgZWxpZiBvYmplY3QuZW5kc3dpdGgoJy5z
bycpOgotICAgICAgICAgICAgICAgIHNlbGYuX2J1bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRo
KG9iamVjdCwgdHlwZT0nbGliJykKKyAgICAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNl
bGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2RlcChvYmplY3QsICdsaWIvZ3N0JykKKyAgICAgICAg
ICAgIGVsaWYgb2JqZWN0IGluIGd0a19wcmludF9tb2R1bGVzOgorICAgICAgICAgICAgICAgIHN5
c3RlbV9wYWNrYWdlID0gc2VsZi5fYWRkX29iamVjdF9vcl9nZXRfc3lzZGVwKG9iamVjdCwgJ2xp
Yi9ndGsvcHJpbnRiYWNrZW5kcycpCisgICAgICAgICAgICBlbGlmIG9iamVjdCBpbiBndGtfcHJp
bnRfbW9kdWxlczoKKyAgICAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9v
YmplY3Rfb3JfZ2V0X3N5c2RlcChvYmplY3QsICdsaWIvZ3RrL3ByaW50YmFja2VuZHMnKQorICAg
ICAgICAgICAgZWxpZiBvYmplY3QgaW4gZ3RrX2ltX21vZHVsZXM6CisgICAgICAgICAgICAgICAg
c3lzdGVtX3BhY2thZ2UgPSBzZWxmLl9hZGRfb2JqZWN0X29yX2dldF9zeXNkZXAob2JqZWN0LCAn
bGliL2d0ay9pbW1vZHVsZXMnKQorICAgICAgICAgICAgZWxpZiBvYmplY3QgaW4gbWVzYV9kcmlf
ZHJpdmVyczoKKyAgICAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmpl
Y3Rfb3JfZ2V0X3N5c2RlcChvYmplY3QsICdsaWIvZHJpJykKKyAgICAgICAgICAgIGVsaWYgb2Jq
ZWN0IGluIGdka19waXhidWZfbG9hZGVyczoKKyAgICAgICAgICAgICAgICBzeXN0ZW1fcGFja2Fn
ZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2RlcChvYmplY3QsICdsaWIvZ2RrLXBpeGJ1
Zi9sb2FkZXJzJykKKyAgICAgICAgICAgIGVsaWYgb2JqZWN0IGluIHBpcGV3aXJlX3NwYV9wbHVn
aW5zOgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhIGxldmVsLTIgaW5kaXJlY3QgZGVwZW5k
ZW5jeSAoZ3N0cmVhbWVyIC0+IGdzdC1waXBld2lyZSAtPiBwaXBld2lyZS1zcGEtcGx1Z2luKQor
ICAgICAgICAgICAgICAgICMgRm9yIHRoZSBjYXNlIG9mIHN5c3RlbV9wYWNrYWdlcyB3ZSByZWx5
IG9uIHRoZSBkaXN0cm8gZGVwZW5kZW5jaWVzIGJldHdlbiBwYWNrYWdlcworICAgICAgICAgICAg
ICAgICMgQnV0IHRoZSBidW5kbGUtYWxsIGNhc2Ugd2UgbmVlZCBhIHNwZWNpYWwgY2FzZSBiZWNh
dXNlIHRoaXMgZGVwIGlzIG5vdCBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIChkbG9wZW4gb2YgcGx1
Z2lucykKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoK
KyAgICAgICAgICAgICAgICAgICAgcGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpciA9IG9i
amVjdC5yZXBsYWNlKHBpcGV3aXJlX3NwYV9wbHVnaW5fYmFzZWRpciwgJycsIDEpCisgICAgICAg
ICAgICAgICAgICAgIHBpcGV3aXJlX3NwYV9wbHVnaW5fZGVzdF9zdWJkaXIgPSBvcy5wYXRoLmRp
cm5hbWUocGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpci5sc3RyaXAoJy8nKSkKKyAgICAg
ICAgICAgICAgICAgICAgcGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpciA9IG9zLnBhdGgu
am9pbignbGliL3BpcGV3aXJlJywgcGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpcikKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fYnVuZGxlci5jb3B5X2FuZF9tYXliZV9zdHJpcF9wYXRj
aGVsZihvYmplY3QsIHR5cGU9cGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpciwgc3RyaXA9
c2VsZi5fc2hvdWxkX3N0cmlwX29iamVjdHMsIHBhdGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBh
dGNoZWxmX25vZGVmYXVsdGxpYj1UcnVlKQorICAgICAgICAgICAgZWxpZiAnLnNvJyBpbiBvYmpl
Y3Q6CisgICAgICAgICAgICAgICAgaWYgJ2xpYndwZWJhY2tlbmQnIGluIG9iamVjdC5sb3dlcigp
OgorICAgICAgICAgICAgICAgICAgICBuZWVkc190b19jcmVhdGVfd3BlX2JhY2tlbmRfc3ltbGlu
ayA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLl9idW5kbGVyLmNvcHlfYW5kX21heWJlX3N0
cmlwX3BhdGNoZWxmKG9iamVjdCwgdHlwZT0nbGliJywgc3RyaXA9c2VsZi5fc2hvdWxkX3N0cmlw
X29iamVjdHMsIHBhdGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBhdGNoZWxmX25vZGVmYXVsdGxp
Yj1zZWxmLl9zeXNsaWJzPT0nYnVuZGxlLWFsbCcpCiAgICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgIHNlbGYuX2J1bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRoKG9iamVjdCwgdHlw
ZT0nYmluJykKKyAgICAgICAgICAgICAgICBiaW5hcmllc190b19jb3B5LmFkZChvYmplY3QpCiAg
ICAgICAgICAgICAjIFRoZXJlIGlzIG5vIG5lZWQgdG8gZXhhbWluZSB0aGUgbGlicmFyaWVzIGxp
bmtlZCB3aXRoIG9iamVjdHMgY29taW5nIGZyb20gYSBzeXN0ZW0gcGFja2FnZSwKICAgICAgICAg
ICAgICMgYmVjYXVzZSBzeXN0ZW0gcGFja2FnZXMgYWxyZWFkeSBkZWNsYXJlIGRlcGVuZGVuY2ll
cyBiZXR3ZWVuIHRoZW0uCiAgICAgICAgICAgICAjIEhvd2V2ZXIsIGlmIHdlIGFyZSBydW5uaW5n
IHdpdGggc2VsZi5fc3lzbGlicyA9PSAnYnVuZGxlLWFsbCcgdGhlbiBzeXN0ZW1fcGFja2FnZSB3
aWxsIGJlIE5vbmUsCiAgICAgICAgICAgICAjIGFuZCBldmVyeXRoaW5nIHdpbGwgYmUgZXhhbWlu
ZWQgYW5kIGJ1bmRsZWQgYXMgd2UgZG9uJ3QgYWNjb3VudCBmb3Igc3lzdGVtIHBhY2thZ2VzIGlu
IHRoYXQgY2FzZS4KLSAgICAgICAgICAgIGlmIG5vdCBzeXN0ZW1fcGFja2FnZToKKyAgICAgICAg
ICAgIGlmIHN5c3RlbV9wYWNrYWdlOgorICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlc19u
ZWVkZWQuYWRkKHN5c3RlbV9wYWNrYWdlKQorICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAg
ICAgICBsaWJyYXJpZXMsIGludGVycHJldGVyID0gc2VsZi5fc2hhcmVkX29iamVjdF9yZXNvbHZl
ci5nZXRfbGlic19hbmRfaW50ZXJwcmV0ZXIob2JqZWN0KQogICAgICAgICAgICAgICAgIGlmIGlu
dGVycHJldGVyIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJv
cigiQ291bGQgbm90IGRldGVybWluZSBpbnRlcnByZXRlciBmb3IgYmluYXJ5ICVzIiAlIG9iamVj
dCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDb3VsZCBub3QgZGV0
ZXJtaW5lIGludGVycHJldGVyIGZvciBiaW5hcnkgJXMnICUgb2JqZWN0KQogICAgICAgICAgICAg
ICAgIGlmIGNvcGllZF9pbnRlcnByZXRlciBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBp
ZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX2J1bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRoKGludGVycHJldGVyLCB0eXBlPSdp
bnRlcnByZXRlcicpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9idW5kbGVyLmNvcHlf
YW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKGludGVycHJldGVyLCB0eXBlPSdpbnRlcnByZXRlcics
IHN0cmlwPXNlbGYuX3Nob3VsZF9zdHJpcF9vYmplY3RzLCBwYXRjaGVsZl9yZW1vdmVycGF0aD1z
ZWxmLl9zeXNsaWJzPT0nYnVuZGxlLWFsbCcsIHBhdGNoZWxmX25vZGVmYXVsdGxpYj1zZWxmLl9z
eXNsaWJzPT0nYnVuZGxlLWFsbCcpCiAgICAgICAgICAgICAgICAgICAgIGNvcGllZF9pbnRlcnBy
ZXRlciA9IGludGVycHJldGVyCiAgICAgICAgICAgICAgICAgZWxpZiBjb3BpZWRfaW50ZXJwcmV0
ZXIgIT0gaW50ZXJwcmV0ZXI6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJv
cignRGV0ZWN0ZWQgYmluYXJpZXMgd2l0aCBkaWZmZXJlbnQgaW50ZXJwcmV0ZXJzOiAlcyAhPSAl
cycgJShjb3BpZWRfaW50ZXJwcmV0ZXIsIGludGVycHJldGVyKSkKLSAgICAgICAgICAgICAgICAj
IEZJWE1FOiBmb3IgLS1zeXNsaWJzPWJ1bmRsZS1hbGwgd2Ugd291bGQgaGF2ZSB0byBjb3B5IHRo
ZSBsaWJuc3NfKnNvKiBsaWJyYXJpZXMgd2hpY2ggYXJlIGRsb3BlbidlZCA8aHR0cHM6Ly9idWdz
LmRlYmlhbi5vcmcvMjAzMDE0PgotICAgICAgICAgICAgICAgICMgQWxzbyB3ZSBzaG91bGQgaW5j
bHVkZSBjb25maWcgZmlsZXMgbGlrZSBmb250Y29uZmlnIHN0dWZmIG9yIHN1cHBvcnQgZmlsZXMg
bGlrZSBpY29ucy4KICAgICAgICAgICAgICAgICBmb3IgbGlicmFyeSBpbiBsaWJyYXJpZXM6CiAg
ICAgICAgICAgICAgICAgICAgIGlmIGxpYnJhcnkgaW4gbGlicmFyaWVzX2NoZWNrZWQ6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdTa2lwIGFscmVhZHkgY2hlY2tlZCBbbGli
XTogJXMnICUgbGlicmFyeSkKQEAgLTQzOSwxMiArNzQ3LDEwMiBAQCBjbGFzcyBCdW5kbGVDcmVh
dG9yKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlID0gc2VsZi5f
YWRkX29iamVjdF9vcl9nZXRfc3lzZGVwKGxpYnJhcnksICdsaWInKQogICAgICAgICAgICAgICAg
ICAgICBpZiBzeXN0ZW1fcGFja2FnZToKICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9w
YWNrYWdlc19uZWVkZWQuYWRkKHN5c3RlbV9wYWNrYWdlKQotCi0gICAgICAgIHNlbGYuX2Vuc3Vy
ZV93cGVfYmFja2VuZF9zeW1saW5rKCkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiAnbGlid3Bl
YmFja2VuZCcgaW4gbGlicmFyeS5sb3dlcigpOgorICAgICAgICAgICAgICAgICAgICAgICAgbmVl
ZHNfdG9fY3JlYXRlX3dwZV9iYWNrZW5kX3N5bWxpbmsgPSBUcnVlCisgICAgICAgIGlmIG5lZWRz
X3RvX2NyZWF0ZV93cGVfYmFja2VuZF9zeW1saW5rOgorICAgICAgICAgICAgc2VsZi5fZW5zdXJl
X3dwZV9iYWNrZW5kX3N5bWxpbmsoKQorICAgICAgICBmb3IgYmluYXJ5IGluIGJpbmFyaWVzX3Rv
X2NvcHk6CisgICAgICAgICAgICBpZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKKyAg
ICAgICAgICAgICAgICBzZWxmLl9idW5kbGVyLmNvcHlfYW5kX21heWJlX3N0cmlwX3BhdGNoZWxm
KGJpbmFyeSwgdHlwZT0nYmluJywgc3RyaXA9c2VsZi5fc2hvdWxkX3N0cmlwX29iamVjdHMsIHBh
dGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBhdGNoZWxmX25vZGVmYXVsdGxpYj1UcnVlLCBwYXRj
aGVsZl9zZXRpbnRlcnByZXRlcl9yZWxhdGl2ZXBhdGg9aW50ZXJwcmV0ZXIpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2J1bmRsZXIuY29weV9hbmRfbWF5YmVfc3Ry
aXBfcGF0Y2hlbGYoYmluYXJ5LCB0eXBlPSdiaW4nLCBzdHJpcD1zZWxmLl9zaG91bGRfc3RyaXBf
b2JqZWN0cywgcGF0Y2hlbGZfcmVtb3ZlcnBhdGg9VHJ1ZSwgcGF0Y2hlbGZfbm9kZWZhdWx0bGli
PUZhbHNlKQorCisgICAgICAgICMgTm93IGNvcHkgZGF0YSBmaWxlcyB0byBzaGFyZSBkaXIgKG9u
bHkgbmVlZGVkIHdoZW4gYnVuZGluZyBhbGwgZm9yIE1pbmlCcm93c2VyKS4KKyAgICAgICAgIyBX
ZSBhc3N1bWUgdGhhdCB0aGUgc3lzdGVtIHVzZXMgc3RhbmRhcmQgcGF0aHMgYXQgL3Vzci9zaGFy
ZSBhbmQgL2V0YyBmb3IgdGhpcyByZXNvdXJjZXMKKyAgICAgICAgIyBFdmVyeSBwYXRoIHNob3Vs
ZCBiZSBjaGVja2VkIGFuZCBpZiBzb21lIG9uZSBpcyBub3QgZm91bmQsIHRoZW4gaXQgd2lsbCBy
YWlzZSBhbiBlcnJvci4KKyAgICAgICAgaWYgYnVuZGxlX2JpbmFyeSA9PSAnTWluaUJyb3dzZXIn
IGFuZCBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKKyAgICAgICAgICAgIHRhcmdldF9z
aGFyZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fdG1wZGlyLCAnc3lzL3NoYXJlJykKKyAgICAg
ICAgICAgICMgQ29weSBnbHZuZCBFR0wganNvbiBmaWxlcworICAgICAgICAgICAgX2xvZy5pbmZv
KCdDb3B5IEVHTCBjb25maWcgZmlsZXMnKQorICAgICAgICAgICAgZWdsX2ljZF9jb25maWdkaXJf
ZGVzdCA9IG9zLnBhdGguam9pbihzZWxmLl90bXBkaXIsICdzeXMvbGliL2dsdm5kL2VnbF92ZW5k
b3IuZCcpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihlZ2xfaWNkX2NvbmZpZ2Rp
cl9kZXN0KToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhlZ2xfaWNkX2NvbmZpZ2Rpcl9k
ZXN0KQorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KGVnbF9pY2RfbWVzYV9jb25maWdfZmls
ZSwgZWdsX2ljZF9jb25maWdkaXJfZGVzdCkKKyAgICAgICAgICAgICMgQ29weSBnbGliLTIgY29t
cGlsZWQgc2NoZW1hcworICAgICAgICAgICAgX2xvZy5pbmZvKCdDb3B5IEdsaWIgY29tcGlsZWQg
c2NoZW1hcycpCisgICAgICAgICAgICBzY2hlbWFzX3RhcmdldF9kaXIgPSBvcy5wYXRoLmpvaW4o
dGFyZ2V0X3NoYXJlX2RpciwgJ2dsaWItMi4wL3NjaGVtYXMnKQorICAgICAgICAgICAgb3MubWFr
ZWRpcnMoc2NoZW1hc190YXJnZXRfZGlyKQorICAgICAgICAgICAgY29tcGlsZWRfc2NoZW1hc19m
aWxlID0gJy91c3Ivc2hhcmUvZ2xpYi0yLjAvc2NoZW1hcy9nc2NoZW1hcy5jb21waWxlZCcKKyAg
ICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShjb21waWxlZF9zY2hlbWFzX2ZpbGUpOgor
ICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIkNhbid0IGZpbmQgdGhl
IGdzY2hlbWFzLmNvbXBpbGVkIGZpbGUgYXQgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGluIHRoaXMg
c3lzdGVtIikKKyAgICAgICAgICAgIHNodXRpbC5jb3B5KGNvbXBpbGVkX3NjaGVtYXNfZmlsZSwg
c2NoZW1hc190YXJnZXRfZGlyKQorICAgICAgICAgICAgX2xvZy5pbmZvKCdDb3B5IHNoYXJlZCBt
aW1lIGluZm8gY2FjaGUnKQorICAgICAgICAgICAgIyBTYW1lIGZvciBzaGFyZWQtbWltZS1pbmZv
IGNhY2hlCisgICAgICAgICAgICBtaW1lX3RhcmdldF9kaXIgPSBvcy5wYXRoLmpvaW4odGFyZ2V0
X3NoYXJlX2RpciwgJ21pbWUnKQorICAgICAgICAgICAgb3MubWFrZWRpcnMobWltZV90YXJnZXRf
ZGlyKQorICAgICAgICAgICAgbWltZV9jYWNoZSA9ICcvdXNyL3NoYXJlL21pbWUvbWltZS5jYWNo
ZScKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtaW1lX2NhY2hlKToKKyAgICAg
ICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJDYW4ndCBmaW5kIHRoZSBtaW1l
LmNhY2hlIGZpbGUgZnJvbSBzaGFyZWQtbWltZS1pbmZvIGF0IHRoZSBzdGFuZGFyZCBsb2NhdGlv
biBpbiB0aGlzIHN5c3RlbSIpCisgICAgICAgICAgICBzaHV0aWwuY29weShtaW1lX2NhY2hlLCBt
aW1lX3RhcmdldF9kaXIpCisgICAgICAgICAgICBfbG9nLmluZm8oJ0dlbmVyYXRlIGZvbnRjb25m
aWcgY29uZmlnJykKKyAgICAgICAgICAgICMgRm9udGNvbmZpZyBmb250cyBhbmQgY29uZmlnCisg
ICAgICAgICAgICB0YXJnZXRfZm9udF9jb25maWdfZGlyID0gb3MucGF0aC5qb2luKHRhcmdldF9z
aGFyZV9kaXIsICdmb250cy9jb25maWcnKQorICAgICAgICAgICAgdGFyZ2V0X2ZvbnRfZGF0YV9k
aXIgPSBvcy5wYXRoLmpvaW4odGFyZ2V0X3NoYXJlX2RpciwgJ2ZvbnRzL2ZvbnRzJykKKyAgICAg
ICAgICAgIG9zLm1ha2VkaXJzKHRhcmdldF9mb250X2NvbmZpZ19kaXIpCisgICAgICAgICAgICAj
IFdlIGtlZXAgYXNzdW1pbmcgc3RhbmRhcmQgbG9jYXRpb25zIGZvciB0aGlzIGZpbGVzIG9uIHRo
ZSB0YXJnZXQgc3lzdGVtCisgICAgICAgICAgICBzeXN0ZW1fZm9udF9jb25maWdfZGlyID0gJy9l
dGMvZm9udHMvY29uZi5kJworICAgICAgICAgICAgc3lzdGVtX2ZvbnRfZGF0YV9kaXIgPSAnL3Vz
ci9zaGFyZS9mb250cycKKyAgICAgICAgICAgIGlmIG5vdCAob3MucGF0aC5pc2RpcihzeXN0ZW1f
Zm9udF9jb25maWdfZGlyKSBhbmQgb3MucGF0aC5pc2RpcihzeXN0ZW1fZm9udF9kYXRhX2Rpcikp
OgorICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIkNhbid0IGZpbmQg
dGhlIGZvbnRjb25maWcgZmlsZXMgYXQgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGluIHRoaXMgc3lz
dGVtIikKKyAgICAgICAgICAgIHNodXRpbC5jb3B5dHJlZShzeXN0ZW1fZm9udF9jb25maWdfZGly
LCBvcy5wYXRoLmpvaW4odGFyZ2V0X2ZvbnRfY29uZmlnX2Rpciwgb3MucGF0aC5iYXNlbmFtZShz
eXN0ZW1fZm9udF9jb25maWdfZGlyKSkpCisgICAgICAgICAgICBzZWxmLl9nZW5lcmF0ZV9mb250
X2NvbmYodGFyZ2V0X2ZvbnRfY29uZmlnX2RpcikKKyAgICAgICAgICAgIF9sb2cuaW5mbygnQ29w
eSBmb250cycpCisgICAgICAgICAgICAjIFdlIGNvcHkgZXZlcnkgZm9udCwgc28gdGhpcyBtYXkg
Y29weSBsb3Qgb2YgZGF0YSBpZiB5b3UgaGF2ZSBsb3Qgb2YgZm9udHMgaW5zdGFsbGVkLgorICAg
ICAgICAgICAgIyBTbyBwcmludCBhIHdhcm5pbmcgaW4gdGhhdCBhc2UKKyAgICAgICAgICAgIHN5
c3RlbV9mb250X2RhdGFfc2l6ZSA9IHNlbGYuX2dldF90b3RhbF9zaXplX2RpcihzeXN0ZW1fZm9u
dF9kYXRhX2RpcikKKyAgICAgICAgICAgIGlmIHN5c3RlbV9mb250X2RhdGFfc2l6ZSA+IDEwNDg1
NzYwMDogICMgMTAwIE1CCisgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdDb3B5aW5nICVk
IE1CIG9mIGZvbnQgZGF0YSBmcm9tIHRoZSBzeXN0ZW0gYXQgL3Vzci9zaGFyZS9mb250cy4gVGhp
cyBzaG91bGQgYmUgb3B0aW1pemVkLicgJSBpbnQoc3lzdGVtX2ZvbnRfZGF0YV9zaXplIC8gKDEw
MjQqMTAyNCkpKQorICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHN5c3RlbV9mb250X2RhdGFf
ZGlyLCB0YXJnZXRfZm9udF9kYXRhX2RpcikKKyAgICAgICAgICAgICMgQ29weSBYS0IgZGF0YQor
ICAgICAgICAgICAgX2xvZy5pbmZvKCdDb3B5IFhLQiBkYXRhJykKKyAgICAgICAgICAgIHN5c3Rl
bV94a2JfZGF0YSA9ICcvdXNyL3NoYXJlL1gxMS94a2InCisgICAgICAgICAgICBpZiBub3QgKG9z
LnBhdGguaXNkaXIoc3lzdGVtX3hrYl9kYXRhKSk6CisgICAgICAgICAgICAgICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvcigiQ2FuJ3QgZmluZCB0aGUgWEtCIGRhdGEgZmlsZXMgYXQgdGhlIHN0
YW5kYXJkIGxvY2F0aW9uIGluIHRoaXMgc3lzdGVtIikKKyAgICAgICAgICAgIHRhcmdldF94a2Jf
ZGF0YSA9IG9zLnBhdGguam9pbih0YXJnZXRfc2hhcmVfZGlyLCAneGtiJykKKyAgICAgICAgICAg
IHNodXRpbC5jb3B5dHJlZShzeXN0ZW1feGtiX2RhdGEsIHRhcmdldF94a2JfZGF0YSkKKyAgICAg
ICAgICAgICMgRmxhdHBhayBjb25maWd1cmVzIGdudXRscyB0byB1c2UgdGhlIHAxMS1raXQgdHJ1
c3Qgc3RvcmUgYW5kIHRoZW4gdXNlcyBwMTEta2l0IHRvIGFjY2VzcyB0aGUgaG9zdCBTU0wgY2Vy
dGlmaWNhdGVzLgorICAgICAgICAgICAgIyAtIEl0IHN0YXJ0cyBhIHAxMSBraXQgc2VydmVyIG9u
IHRoZSBob3N0cyBhbmQgYmluZC1tb3VudGluZyBhIHNvY2tldCB0aGF0IGxhdGVyIGlzIHVzZWQg
ZnJvbSBpbnNpZGUgdGhlIHNhbmRib3ggdmlhIHAxMS1raXQtY2xpZW50LnNvCisgICAgICAgICAg
ICAjIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3AxMS1nbHVlL3AxMS1raXQvaXNzdWVzLzY4Cisg
ICAgICAgICAgICAjIFN0YXJ0aW5nIGEgcDExLWtpdCBzZXJ2ZXIgaXMgcHJvYmxlbWF0aWMgZm9y
IHRoZSB1c2UgY2FzZSBvZiB0aGUgYnVuZGxlLCBhbmQgYWxzbyB3aWxsIG9ubHkgd29yayBpZiB0
aGUgaG9zdCBpcyBjb25maWd1cmVkIHRvIHVzZSBwMTEta2l0CisgICAgICAgICAgICAjIFNvIHdl
IHRha2UgYSBkaWZmZXJlbnQgYXBwcm9hY2ggaGVyZS4KKyAgICAgICAgICAgICMgMS4gV2UgZ2Vu
ZXJhdGUgYSBidW5kbGUtY2EtY2VydGlmaWNhdGVzLnBlbSBmaWxlIHdpdGggYWxsIHRoZSBjZXJ0
cyBvZiB0aGUgc3lzdGVtIHdlcmUgdGhlIGJ1bmRsZSB3YXMgZ2VuZXJhdGVkIGFuZCB3ZSBzaGlw
IHRoaXMgZmlsZQorICAgICAgICAgICAgIyAyLiBBdCBydW50aW1lIHdlIGxvb2sgZm9yIHRoZSBz
eXN0ZW0gVExTIGNhLWJ1bmRsZS5wZW0gZmlsZSBhbmQgd2UgdXNlIGl0LiBJZiB3ZSBjYW4ndCBm
aW5kIGl0IHRoZW4gd2UgZGVmYXVsdCB0byB1c2luZyB0aGUgb25lIHNoaXBwZWQgaW5zaWRlIHRo
ZSBidW5kbGUuCisgICAgICAgICAgICAjIFdlIHBhc3MgdGhlIHBhdGggdG8gdGhlIFRMUyBjYS1i
dW5kbGUucGVtIGZpbGUgdXNpbmcgdGhlIGVudiB2YXIgV0VCS0lUX1RMU19DQUZJTEVfUEVNCisg
ICAgICAgICAgICAjIFRoZSBob3N0IHAxMS1raXQgc2V0dXAgbWF5IHN0aWxsIHdvcmsgaWYgaXQg
aXMgdXNpbmcgdGhlIHNhbWUgcGF0aHMgZm9yIGxvYWRpbmcgdGhlIHAxMS1raXQgbW9kdWxlcywg
YnV0IG90aGVyd2lzZSBpdCB3aWxsIGZhaWwgdG8gbG9hZCB0aGUgbW9kdWxlcy4KKyAgICAgICAg
ICAgICMgVGhhdCBpcyBvaywgc2luY2Ugd2UgZG9uJ3QgbmVlZCBhbnltb3JlIGEgd29ya2luZyBw
MTEta2l0IHNldHVwLiBJZiBpdCB3b3JrcyBpdCB3aWxsIGJlIHVzZWQsIGJ1dCBpZiBub3Qgd2Ug
aGF2ZSBhIGZhbGxiYWNrLgorICAgICAgICAgICAgIyBUbyBkZWJ1ZyB0aGlzIGlzIHVzZWZ1bCB0
byBleHBvcnQgUDExX0tJVF9ERUJVRz1hbGwKKyAgICAgICAgICAgICMgVGhpcyBhcHByb2FjaCBh
bHNvIGFsbG93cyB0aGlzIGJ1bmRsZSBzY3JpcHQgZ28gZ2VuZXJhdGUgYSB3b3JraW5nIGJ1bmRs
ZSB3aGVuIGdudXRscyBpcyBub3QgY29uZmlndXJlZCB0byB1c2UgcDExLWtpdC4KKyAgICAgICAg
ICAgIF9sb2cuaW5mbygnR2VuZXJhdGUgVExTIENBIGNlcnRpZmljYXRlcyBmaWxlJykKKyAgICAg
ICAgICAgIGNlcnRzX3RhcmdldF9kaXIgPSBvcy5wYXRoLmpvaW4odGFyZ2V0X3NoYXJlX2Rpciwg
J2NlcnRzJykKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKGNlcnRzX3RhcmdldF9kaXIpCisgICAg
ICAgICAgICBzZWxmLl9nZW5lcmF0ZV90bHNfY2FmaWxlKGNlcnRzX3RhcmdldF9kaXIpCisgICAg
ICAgICAgICBpZiBzZWxmLl9wbGF0Zm9ybSA9PSAnZ3RrJzoKKyAgICAgICAgICAgICAgICBfbG9n
LmluZm8oJ0NvcHkgYmFzaWMgR1RLIGljb25zIGFuZCB0aGVtZXMuJykKKyAgICAgICAgICAgICAg
ICBpY29uc190YXJnZXRfZGlyID0gb3MucGF0aC5qb2luKHRhcmdldF9zaGFyZV9kaXIsICdpY29u
cycpCisgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoaWNvbnNfdGFyZ2V0X2RpcikKKyAgICAg
ICAgICAgICAgICBmb3IgZ3RrX2ljb25fZGlyIGluIFsnL3Vzci9zaGFyZS9pY29ucy9BZHdhaXRh
JywgJy91c3Ivc2hhcmUvaWNvbnMvaGljb2xvciddOgorICAgICAgICAgICAgICAgICAgICBpZiBu
b3Qgb3MucGF0aC5pc2RpcihndGtfaWNvbl9kaXIpOgorICAgICAgICAgICAgICAgICAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignQ2FuIG5vdCBmaW5kIHRoZSBHVEsgaWNvbiB0aGVt
ZSBhdCBwYXRoICIlcyIgaW4gdGhpcyBzeXN0ZW0nICUgZ3RrX2ljb25fZGlyKQorICAgICAgICAg
ICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoZ3RrX2ljb25fZGlyLCBvcy5wYXRoLmpvaW4oaWNv
bnNfdGFyZ2V0X2Rpciwgb3MucGF0aC5iYXNlbmFtZShndGtfaWNvbl9kaXIpKSkKKworICAgICAg
ICAjIEZpbmFsbHkgZ2VuZXJhdGUgdGhlIHdyYXBwZXJzLgogICAgICAgICBzZWxmLl9nZW5lcmF0
ZV93cmFwcGVyX3NjcmlwdChpbnRlcnByZXRlciwgYnVuZGxlX2JpbmFyeSkKLSAgICAgICAgaWYg
YnVuZGxlX2JpbmFyeSA9PSAiTWluaUJyb3dzZXIiOgorICAgICAgICBpZiBidW5kbGVfYmluYXJ5
ID09ICdNaW5pQnJvd3Nlcic6CiAgICAgICAgICAgICBzZWxmLl9nZW5lcmF0ZV93cmFwcGVyX3Nj
cmlwdChpbnRlcnByZXRlciwgc2VsZi5fcG9ydF9iaW5hcnlfcHJlZmZpeCArICdXZWJEcml2ZXIn
KQogICAgICAgICBzZWxmLl9nZW5lcmF0ZV9pbnN0YWxsX2RlcHNfc2NyaXB0KHN5c3RlbV9wYWNr
YWdlc19uZWVkZWQpCisgICAgICAgICMgQ2xlYW4gcmVtYWluaW5nIHN0dWZmCisgICAgICAgIGlm
IGJ1bmRsZV9iaW5hcnkgPT0gJ01pbmlCcm93c2VyJyBhbmQgc2VsZi5fc3lzbGlicyA9PSAnYnVu
ZGxlLWFsbCc6CisgICAgICAgICAgICBzZWxmLl9kbG9wZW53cmFwX21ha2UoJ2NsZWFuJykKIAog
CiBjbGFzcyBCdW5kbGVVcGxvYWRlcihvYmplY3QpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9iaW5hcnlfYnVuZGxpbmcvYnVuZGxlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9iaW5hcnlfYnVuZGxpbmcvYnVuZGxlLnB5CmluZGV4IGM2ZTU1Yjg4OTMxNTdkOGJkYWNh
NmZkMjY1NTA3Y2MwNDEzYWJlOGQuLjI5YWIzOTJlYTU0NzRhMTI5ZmY1NTEzNmU0NWY1ZGIwMDcw
M2JkYzMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5n
L2J1bmRsZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JpbmFyeV9idW5kbGluZy9i
dW5kbGUucHkKQEAgLTMxLDY4ICszMSwxOTEgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9f
bmFtZV9fKQogCiBjbGFzcyBCaW5hcnlCdW5kbGVyOgogICAgIFZBUl9NWURJUiA9ICdNWURJUicK
LSAgICBWQVJfSU5URVJQUkVURVIgPSAnSU5URVJQUkVURVInCiAKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgZGVzdGluYXRpb25fZGlyLCBzaG91bGRfc3RyaXBfb2JqZWN0cyk6Ci0gICAgICAgIGlm
IHNodXRpbC53aGljaCgncGF0Y2hlbGYnKSBpcyBOb25lOgotICAgICAgICAgICAgX2xvZy5lcnJv
cigiQ291bGQgbm90IGZpbmQgYHBhdGNoZWxmYCBpbiAkUEFUSCIpCi0gICAgICAgICAgICByYWlz
ZSBFeGNlcHRpb24oIk1pc3NpbmcgcmVxdWlyZWQgYmluYXJ5IGBwYXRjaGVsZmAiKQorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBkZXN0aW5hdGlvbl9kaXIsIGJ1aWxkX3BhdGg9Tm9uZSk6CiAgICAg
ICAgIHNlbGYuX2Rlc3RpbmF0aW9uX2RpciA9IGRlc3RpbmF0aW9uX2RpcgotICAgICAgICBzZWxm
Ll9zaG91bGRfc3RyaXBfb2JqZWN0cyA9IHNob3VsZF9zdHJpcF9vYmplY3RzCisgICAgICAgIHNl
bGYuX2hhc19wYXRjaGVkX2ludGVycHJldGVyX3JlbHBhdGggPSBGYWxzZQorICAgICAgICBzZWxm
Ll9idWlsZF9wYXRoID0gYnVpbGRfcGF0aAorICAgICAgICBzZWxmLl9zaG91bGRfdXNlX3N5c19s
aWJfZGlyZWN0b3J5ID0gRmFsc2UKKworICAgIGRlZiBfaXNfc3lzdGVtX2RlcChzZWxmLCBwYXRo
KToKKyAgICAgICAgaWYgc2VsZi5fYnVpbGRfcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
ICMgV2UgZG9uJ3QgY29uc2lkZXIgbGlid3BlIGFuZCBsaWJXUEVCYWNrZW5kLWZkbyBzeXNsaWJz
IChldmVuIHdoZW4gdGhvc2UgYXJlIG5vdCBidWlsdCBkaXJlY3RseSkuIE5laXRoZXIgZGxvcGVu
d3JhcAorICAgICAgICAgICAgaWYgYW55KHAgaW4gcGF0aC5sb3dlcigpIGZvciBwIGluIFsnbGli
d3BlJywgJ2Rsb3BlbndyYXAnXSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAg
ICAgICAgICByZXR1cm4gbm90IHBhdGguc3RhcnRzd2l0aChzZWxmLl9idWlsZF9wYXRoKQorICAg
ICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBzZXRfdXNlX3N5c19saWJfZGlyZWN0b3J5KHNl
bGYsIHNob3VsZF91c2Vfc3lzX2xpYl9kaXJlY3RvcnkpOgorICAgICAgICBzZWxmLl9zaG91bGRf
dXNlX3N5c19saWJfZGlyZWN0b3J5ID0gc2hvdWxkX3VzZV9zeXNfbGliX2RpcmVjdG9yeQorCisg
ICAgZGVmIGNvcHlfYW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKHNlbGYsIG9yaWdfZmlsZSwgdHlw
ZT0nYmluJywgc3RyaXA9VHJ1ZSwgcGF0Y2hlbGZfcmVtb3ZlcnBhdGg9VHJ1ZSwgcGF0Y2hlbGZf
bm9kZWZhdWx0bGliPUZhbHNlLCBwYXRjaGVsZl9zZXRpbnRlcnByZXRlcl9yZWxhdGl2ZXBhdGg9
Tm9uZSwgb2JqZWN0X2ZpbmFsX2Rlc3RpbmF0aW9uX2Rpcj1Ob25lKToKKyAgICAgICAgIiIiIFRo
aXMgZG9lcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgMS4gQ29waWVzIHRoZSBiaW5hcnkv
bGliIChvYmplY3QpCisgICAgICAgICAgICAyLiBPcHRpb25hbGx5IHJ1bnMgcGF0Y2hlbGYgd2l0
aCBkaWZmZXJlbnQgcGFyYW1ldGVycworICAgICAgICAgICAgMy4gT3B0aW9uYWxseSBzdHJpcHMg
dGhlIGJpbmFyeQorICAgICAgICAgICAgSWYgdGhlIGZpbGUgaXMgYSBzeW1saW5rIHBvaW50aW5n
IGFub3RoZXIgZmlsZSB0aGVuIHRoZSBzeW1saW5rIGlzIHByZXNlcnZlZCAoY29weWluZyB0aGUg
ZmlsZSBwb2ludGVkKQorICAgICAgICAiIiIKIAotICAgIGRlZiBkZXN0aW5hdGlvbl9kaXIoc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9kZXN0aW5hdGlvbl9kaXIKLQotICAgIGRlZiBjb3B5
X2FuZF9yZW1vdmVfcnBhdGgoc2VsZiwgb3JpZ19maWxlLCB0eXBlPSdiaW4nLCBkZXN0aW5hdGlv
bl9kaXI9Tm9uZSk6CiAgICAgICAgIGRpcl9zdWZmaXggPSAnbGliJyBpZiB0eXBlID09ICdpbnRl
cnByZXRlcicgZWxzZSB0eXBlCi0gICAgICAgIGRlc3RpbmF0aW9uX2RpciA9IG9zLnBhdGguam9p
bihzZWxmLl9kZXN0aW5hdGlvbl9kaXIsIGRpcl9zdWZmaXgpCi0gICAgICAgIGlmIG5vdCBvcy5w
YXRoLmlzZGlyKGRlc3RpbmF0aW9uX2Rpcik6Ci0gICAgICAgICAgICBvcy5tYWtlZGlycyhkZXN0
aW5hdGlvbl9kaXIpCisgICAgICAgIGlmIG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIgaXMg
Tm9uZToKKyAgICAgICAgICAgIG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIgPSBzZWxmLl9k
ZXN0aW5hdGlvbl9kaXIKKyAgICAgICAgICAgICMgSWYgc2V0X3VzZV9zeXNfbGliX2RpcmVjdG9y
eSgpIGlzIGVuYWJsZWQgdGhlbiBzeXN0ZW0gbGlicmFyaWVzIGFyZSBzaGlwcGVkIGluICRST09U
L3N5cy9saWIgdG8gYWxsb3cgdG8gcmVkaXN0cmlidXRlIHRoZW0gc2VwYXJhdGVseS4KKyAgICAg
ICAgICAgICMgSG93ZXZlciwgdGhlIGludGVycHJldGVyIGlzIGFsd2F5cyBzaGlwcGVkIGluICRS
T09UL2xpYiBhbmQgYWxsIHRoZSBiaW5hcmllcyBhcmUgYWx3YXlzIHNoaXBwZWQgaW4gJFJPT1Qv
YmluCisgICAgICAgICAgICAjIEV2ZW4gd2hlbiB0aGV5IGFyZSBzeXN0ZW1fZGVwcyBiZWNhdXNl
IG9mIHBhdGNoZWxmX3NldGludGVycHJldGVyX3JlbGF0aXZlcGF0aAorICAgICAgICAgICAgaWYg
c2VsZi5fc2hvdWxkX3VzZV9zeXNfbGliX2RpcmVjdG9yeSBhbmQgc2VsZi5faXNfc3lzdGVtX2Rl
cChvcmlnX2ZpbGUpIGFuZCB0eXBlIG5vdCBpbiBbJ2ludGVycHJldGVyJywgJ2JpbiddOgorICAg
ICAgICAgICAgICAgIG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIgPSBvcy5wYXRoLmpvaW4o
b2JqZWN0X2ZpbmFsX2Rlc3RpbmF0aW9uX2RpciwgJ3N5cycpCisgICAgICAgICAgICBvYmplY3Rf
ZmluYWxfZGVzdGluYXRpb25fZGlyID0gb3MucGF0aC5qb2luKG9iamVjdF9maW5hbF9kZXN0aW5h
dGlvbl9kaXIsIGRpcl9zdWZmaXgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKG9iamVj
dF9maW5hbF9kZXN0aW5hdGlvbl9kaXIpOgorICAgICAgICAgICAgb3MubWFrZWRpcnMob2JqZWN0
X2ZpbmFsX2Rlc3RpbmF0aW9uX2RpcikKIAogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUo
b3JpZ19maWxlKToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0NhbiBub3QgZmluZCBm
aWxlICVzJyAlIG9yaWdfZmlsZSkKIAogICAgICAgICBfbG9nLmluZm8oJ0FkZCB0byBidW5kbGUg
WyVzXTogJXMnICUgKHR5cGUsIG9yaWdfZmlsZSkpCisKKyAgICAgICAgIyBQcmVzZXJ2ZSBzeW1s
aW5rcyBhbmQgY29weSB0aGUgdGFyZ2V0cworICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhvcmln
X2ZpbGUpOgorICAgICAgICAgICAgc3ltbGlua19zcmNfZmlsZSA9IG9zLnBhdGgucmVhbHBhdGgo
b3JpZ19maWxlKQorICAgICAgICAgICAgc3ltbGlua19zcmNfYmFzZW5hbWUgPSBvcy5wYXRoLmJh
c2VuYW1lKHN5bWxpbmtfc3JjX2ZpbGUpCisgICAgICAgICAgICBzeW1saW5rX2RzdF9iYXNlbmFt
ZSA9IG9zLnBhdGguYmFzZW5hbWUob3JpZ19maWxlKQorICAgICAgICAgICAgc3ltbGlua19kc3Rf
ZnVsbHBhdGggPSBvcy5wYXRoLmpvaW4ob2JqZWN0X2ZpbmFsX2Rlc3RpbmF0aW9uX2Rpciwgc3lt
bGlua19kc3RfYmFzZW5hbWUpCisgICAgICAgICAgICBpZiBzeW1saW5rX3NyY19iYXNlbmFtZSAh
PSBzeW1saW5rX2RzdF9iYXNlbmFtZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgICAgICMgc3ltbGlua19kc3RfZnVsbHBhdGggLT4gc3ltbGlua19zcmNfYmFzZW5hbWUK
KyAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluayhzeW1saW5rX3NyY19iYXNlbmFtZSwgc3lt
bGlua19kc3RfZnVsbHBhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJv
cjoKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfc3ltbGlua19zcmNfcGF0aCA9IG9zLnBh
dGgucmVhbHBhdGgoc3ltbGlua19kc3RfZnVsbHBhdGgpCisgICAgICAgICAgICAgICAgICAgIHBy
ZXZpb3VzX3N5bWxpbmtfc3JjX2Jhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwcmV2aW91c19z
eW1saW5rX3NyY19wYXRoKQorICAgICAgICAgICAgICAgICAgICBpZiBwcmV2aW91c19zeW1saW5r
X3NyY19iYXNlbmFtZSAhPSBzeW1saW5rX3NyY19iYXNlbmFtZToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm90IG92ZXJ3cml0aW5nIHByZXZpb3VzIHN5bWxp
bmsgJXMgcG9pbnRpbmcgdG8gJXMgd2l0aCBhIHN5bWxpbmsgcG9pbnRpbmcgdG8gJXMnICUgKHN5
bWxpbmtfZHN0X2Z1bGxwYXRoLCBwcmV2aW91c19zeW1saW5rX3NyY19iYXNlbmFtZSwgc3ltbGlu
a19zcmNfYmFzZW5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvcHlfYW5kX21h
eWJlX3N0cmlwX3BhdGNoZWxmKHN5bWxpbmtfc3JjX2ZpbGUsIHR5cGUsIHN0cmlwLCBwYXRjaGVs
Zl9yZW1vdmVycGF0aCwgcGF0Y2hlbGZfbm9kZWZhdWx0bGliLCBwYXRjaGVsZl9zZXRpbnRlcnBy
ZXRlcl9yZWxhdGl2ZXBhdGgsIG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIpCisKICAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgc2h1dGlsLmNvcHkob3JpZ19maWxlLCBkZXN0aW5hdGlvbl9k
aXIpCisgICAgICAgICAgICBzaHV0aWwuY29weShvcmlnX2ZpbGUsIG9iamVjdF9maW5hbF9kZXN0
aW5hdGlvbl9kaXIpCiAgICAgICAgIGV4Y2VwdCBzaHV0aWwuU2FtZUZpbGVFcnJvcjoKICAgICAg
ICAgICAgICMgTWF5IHJlYXNvbmFibHkgaGFwcGVuIGlmIHRoZSBjYWxsZXIgdHJpZXMgdG8gYnVu
ZGxlIHRoZSBmaWxlcyAnaW4gcGxhY2UnLgogICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIHBh
dGNoX2VsZl9jb21tYW5kID0gWydwYXRjaGVsZicsICctLXJlbW92ZS1ycGF0aCcsIG9zLnBhdGgu
am9pbihkZXN0aW5hdGlvbl9kaXIsIG9zLnBhdGguYmFzZW5hbWUob3JpZ19maWxlKSldCi0gICAg
ICAgIGlmIHN1YnByb2Nlc3MuY2FsbChwYXRjaF9lbGZfY29tbWFuZCkgIT0gMDoKLSAgICAgICAg
ICAgIF9sb2cuZXJyb3IoJ1RoZSBwYXRjaGVsZiBjb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0
YXR1cycpCisgICAgICAgIGlmIHR5cGUgPT0gJ2ludGVycHJldGVyJzoKKyAgICAgICAgICAgIHJl
dHVybiAgIyBubyBzdHJpcC9wYXRjaGVsZiBvdmVyIGl0CisKKyAgICAgICAgcGF0Y2hlbGZfYXJn
dW1lbnRzID0gW10KKyAgICAgICAgaWYgcGF0Y2hlbGZfcmVtb3ZlcnBhdGg6CisgICAgICAgICAg
ICBwYXRjaGVsZl9hcmd1bWVudHMuYXBwZW5kKCItLXJlbW92ZS1ycGF0aCIpCisgICAgICAgIGlm
IHBhdGNoZWxmX25vZGVmYXVsdGxpYjoKKyAgICAgICAgICAgIHBhdGNoZWxmX2FyZ3VtZW50cy5h
cHBlbmQoIi0tbm8tZGVmYXVsdC1saWIiKQorICAgICAgICBpZiBwYXRjaGVsZl9zZXRpbnRlcnBy
ZXRlcl9yZWxhdGl2ZXBhdGg6CisgICAgICAgICAgICBwcmV2aW91c19jd2QgPSBvcy5nZXRjd2Qo
KQorICAgICAgICAgICAgb3MuY2hkaXIoc2VsZi5kZXN0aW5hdGlvbl9kaXIoKSkKKyAgICAgICAg
ICAgICMgV2Ugb25seSB3YW50IHRoZSBiYXNlbmFtZSBvZiB0aGUgaW50ZXJwcmV0ZXIgYmVjYXVz
ZSB3ZSBhcmUgdXBkYXRpbmcgaXQKKyAgICAgICAgICAgICMgdG8gdXNlIGEgcmVsYXRpdmUgcGF0
aCBpbnNpZGUgbGliLyAod2hpY2ggaXMgd2VyZSB3ZSBjb3BpZWQgaXQgcHJldmlvdXNseSkKKyAg
ICAgICAgICAgIG5ld19pbnRlcnByZXRlcl9yZWxwYXRoID0gb3MucGF0aC5qb2luKCdsaWInLCBv
cy5wYXRoLmJhc2VuYW1lKHBhdGNoZWxmX3NldGludGVycHJldGVyX3JlbGF0aXZlcGF0aCkpCisg
ICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobmV3X2ludGVycHJldGVyX3JlbHBhdGgp
OgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWJsZSB0byBmaW5kIGludGVy
cHJldGVyICVzIGF0IGRpcmVjdG9yeSAlcycgJSAobmV3X2ludGVycHJldGVyLCBzZWxmLmRlc3Rp
bmF0aW9uX2RpcigpKSkKKyAgICAgICAgICAgIHBhdGNoZWxmX2FyZ3VtZW50cy5leHRlbmQoWyct
LXNldC1pbnRlcnByZXRlcicsIG5ld19pbnRlcnByZXRlcl9yZWxwYXRoXSkKKyAgICAgICAgICAg
IHNlbGYuX2hhc19wYXRjaGVkX2ludGVycHJldGVyX3JlbHBhdGggPSBUcnVlCisgICAgICAgIGlm
IHBhdGNoZWxmX2FyZ3VtZW50czoKKyAgICAgICAgICAgICMgSWYgd2UgaGF2ZSByZXNvbHZlZCBw
YXRjaGVsZl9hcmd1bWVudHMgdGhlbiB3ZSBzaG91bGQgcnVuIHBhdGNoZWxmCisgICAgICAgICAg
ICBwYXRjaGVsZl9hcmd1bWVudHMuYXBwZW5kKG9zLnBhdGguam9pbihvYmplY3RfZmluYWxfZGVz
dGluYXRpb25fZGlyLCBvcy5wYXRoLmJhc2VuYW1lKG9yaWdfZmlsZSkpKQorICAgICAgICAgICAg
aWYgbm90IHNodXRpbC53aGljaCgncGF0Y2hlbGYnKToKKyAgICAgICAgICAgICAgICByYWlzZSBS
dW50aW1lRXJyb3IoJ1VuYWJsZSB0byBmaW5kIHRoZSAicGF0Y2hlbGYiIGNvbW1hbmQgaW4gdGhl
IHN5c3RlbS4gUGxlYXNlIGluc3RhbGwgaXQuJykKKyAgICAgICAgICAgIGlmIHN1YnByb2Nlc3Mu
Y2FsbChbJ3BhdGNoZWxmJ10gKyBwYXRjaGVsZl9hcmd1bWVudHMpICE9IDA6CisgICAgICAgICAg
ICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgInBhdGNoZWxmIiBjb21tYW5kIHdpdGggYXJn
dW1lbnRzICIlcyIgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzJyAlICcgJy5qb2luKHBhdGNoZWxm
X2FyZ3VtZW50cykpCisKKyAgICAgICAgICAgIGlmIHBhdGNoZWxmX3NldGludGVycHJldGVyX3Jl
bGF0aXZlcGF0aDoKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihwcmV2aW91c19jd2QpCisKKyAg
ICAgICAgIyBzdHJpcCBoYXMgdG8gcnVuIGFmdGVyIHBhdGNoZWxmLCBvdGhlcndpc2UgcGF0Y2hl
bGYgY29ycnVwdHMgdGhlIGJpbmFyeSBzb21ldGltZXMgKHdoZW4gJy0tc2V0LWludGVycHJldGVy
IGlzIHBhc3NlZCkuCisgICAgICAgIGlmIHN0cmlwOgorICAgICAgICAgICAgaWYgbm90IHNodXRp
bC53aGljaCgnc3RyaXAnKToKKyAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ1VuYWJsZSB0
byBmaW5kIHRoZSBzdHJpcCBjb21tYW5kIGluIHRoZSBzeXN0ZW0uIFBsZWFzZSBpbnN0YWxsIGl0
LicpCisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdNaXNzaW5nIHJlcXVpcmVkIHBy
b2dyYW0gInN0cmlwIicpCisgICAgICAgICAgICBzdHJpcF9jb21tYW5kID0gWydzdHJpcCcsICct
LXN0cmlwLXVubmVlZGVkJywgb3MucGF0aC5qb2luKG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9k
aXIsIG9zLnBhdGguYmFzZW5hbWUob3JpZ19maWxlKSldCisgICAgICAgICAgICBpZiBzdWJwcm9j
ZXNzLmNhbGwoc3RyaXBfY29tbWFuZCkgIT0gMDoKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9y
KCdUaGUgc3RyaXAgY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMnKQogCi0gICAgICAg
IGlmIHNlbGYuX3Nob3VsZF9zdHJpcF9vYmplY3RzOgotICAgICAgICAgICAgaWYgc2h1dGlsLndo
aWNoKCdzdHJpcCcpOgotICAgICAgICAgICAgICAgIHN0cmlwX2NvbW1hbmQgPSBbJ3N0cmlwJywg
Jy0tc3RyaXAtdW5uZWVkZWQnLCBvcy5wYXRoLmpvaW4oZGVzdGluYXRpb25fZGlyLCBvcy5wYXRo
LmJhc2VuYW1lKG9yaWdfZmlsZSkpXQotICAgICAgICAgICAgICAgIGlmIHN1YnByb2Nlc3MuY2Fs
bChzdHJpcF9jb21tYW5kKSAhPSAwOgotICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCdU
aGUgc3RyaXAgY29tbWFuZCByZXR1cm5lZCBub24temVybyBzdGF0dXMnKQotICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ3N0cmlwIG5vdCBmb3VuZC4gTm90
IHN0cmlwcGluZyBvYmplY3QnKQorICAgIGRlZiBkZXN0aW5hdGlvbl9kaXIoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLl9kZXN0aW5hdGlvbl9kaXIKIAogICAgIGRlZiBnZW5lcmF0ZV93cmFw
cGVyX3NjcmlwdChzZWxmLCBpbnRlcnByZXRlciwgYmluYXJ5X3RvX3dyYXAsIGV4dHJhX2Vudmly
b25tZW50X3ZhcmlhYmxlcz17fSk6CiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5w
YXRoLmpvaW4oc2VsZi5fZGVzdGluYXRpb25fZGlyLCAnYmluJywgYmluYXJ5X3RvX3dyYXApKToK
ICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ2Fubm90IGZpbmQgYmluYXJ5IHRvIHdy
YXAgZm9yICVzJyAlIGJpbmFyeV90b193cmFwKQogICAgICAgICBfbG9nLmluZm8oJ0dlbmVyYXRl
IHdyYXBwZXIgc2NyaXB0ICVzJyAlIGJpbmFyeV90b193cmFwKQogICAgICAgICBzY3JpcHRfZmls
ZSA9IG9zLnBhdGguam9pbihzZWxmLl9kZXN0aW5hdGlvbl9kaXIsIGJpbmFyeV90b193cmFwKQor
ICAgICAgICBsaWJfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuX2Rlc3RpbmF0aW9uX2RpciwgJ2xp
YicpCisgICAgICAgIHN5c2xpYl9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fZGVzdGluYXRpb25f
ZGlyLCAnc3lzL2xpYicpCisgICAgICAgIGJpbl9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fZGVz
dGluYXRpb25fZGlyLCAnYmluJykKKyAgICAgICAgc2hhcmVfZGlyID0gb3MucGF0aC5qb2luKHNl
bGYuX2Rlc3RpbmF0aW9uX2RpciwgJ3N5cy9zaGFyZScpCiAKICAgICAgICAgd2l0aCBvcGVuKHNj
cmlwdF9maWxlLCAndycpIGFzIHNjcmlwdF9oYW5kbGU6CiAgICAgICAgICAgICBzY3JpcHRfaGFu
ZGxlLndyaXRlKCcjIS9iaW4vc2hcbicpCiAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRl
KCclcz0iJChkaXJuYW1lICQocmVhZGxpbmsgLWYgJDApKSJcbicgJSBzZWxmLlZBUl9NWURJUikK
LSAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2V4cG9ydCBMRF9MSUJSQVJZX1BBVEg9
IiR7JXN9L2xpYiJcbicgJSBzZWxmLlZBUl9NWURJUikKIAotICAgICAgICAgICAgaWYgaW50ZXJw
cmV0ZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgn
SU5URVJQUkVURVI9IiR7JXN9L2xpYi8lcyJcbicgJSAoc2VsZi5WQVJfTVlESVIsIG9zLnBhdGgu
YmFzZW5hbWUoaW50ZXJwcmV0ZXIpKSkKKyAgICAgICAgICAgIGlmIHNlbGYuX2hhc19wYXRjaGVk
X2ludGVycHJldGVyX3JlbHBhdGg6CisgICAgICAgICAgICAgICAgIyBUaGUgaW50ZXJwcmVydGVy
IChzZWN0aW9uIFBUX0lOVEVSUCBpbiBFTEYgYmluYXJ5KSBuZWVkcyB0byBiZSBhIHByZS1kZWZp
bmVkIHBhdGgKKyAgICAgICAgICAgICAgICAjIFNvIHRoZSBvbmx5IHdheSBvZiB1c2luZyBvdXIg
aW50ZXJwcmV0ZXIgaW4gYW4gdW5rbm93biBkZXN0aW5hdGlvbiBkaXIgaXMgdG8gdXNlIHJlbGF0
aXZlIHBhdGhzCisgICAgICAgICAgICAgICAgIyBGb3IgcmVsYXRpdmUgcGF0aHMgdG8gd29yaywg
d2UgbmVlZCB0byBDRCBpbnRvIHRoZSBtYWluIGJhc2VkaXIsIGJ1dCBkb2luZyB0aGF0IG1heSBi
cmVhaworICAgICAgICAgICAgICAgICMgYW55IHBhcmFtZXRlciB0aGUgdXNlciBoYXMgcGFzc2Vk
IGFzIGEgcmVsYXRpdmUgcGF0aCB0byB3aGVyZSBzaGUgaXMgd29ya2luZyAobGlrZSBhIHJlbHBh
dGggdG8gc29tZSBodG1sIGZpbGUpCisgICAgICAgICAgICAgICAgIyBTbyB3ZSB0cnkgdG8gdXBk
YXRlIHRoZSBhcmd1bWVudHMgcmVzb2x2aW5nIHJlbGF0aXZlIHBhdGhzIHRvIGFic29sdXRlIGJl
Zm9yZSBleGVjdXRpbmcgdGhlIHByb2dyYW0KKyAgICAgICAgICAgICAgICAjIFRyaWNrIHRvIHVw
ZGF0ZSB0aGUgYXJndW1lbnRzIGluc3BpcmVkIGZyb20gaHR0cHM6Ly91bml4LnN0YWNrZXhjaGFu
Z2UuY29tL2EvNDIxMTYwCisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnIyBT
aGlwcGVkIGJpbmFyaWVzIGhhdmUgYSByZWxwYXRoIHRvIHRoZSBpbnRlcnByZXRlciwgc28gdXBk
YXRlIHBhc3NlZCBhcmdzIHdpdGggZnVsbHBhdGhzIGFuZCBjZCB0byAke01ZRElSfVxuJykKKyAg
ICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdhcmdzX3VwZGF0ZV9yZWxwYXRoc190
b19hYnMoKSB7XG4nKQorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJyAgICBm
b3IgYXJnIGluICIkQCI7IGRvXG4nKQorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3Jp
dGUoJyAgICAgIFsgLWUgIiR7YXJnfSIgLWEgIiR7YXJnfSIgIT0gIiR7YSMvfSIgXSAmJiBhcmc9
IiQocmVhZGxpbmsgLWYgIiR7YXJnfSIpIlxuJykKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFu
ZGxlLndyaXRlKCcgICAgICBwcmludGYgJXMgIiR7YXJnfSIgfCBzZWQgInMvXCcvXCdcXFxcXFxc
XFwnXCcvZzsxcy9eL1wnLztcXCRzL1xcJC9cJyAvIlxuJykKKyAgICAgICAgICAgICAgICBzY3Jp
cHRfaGFuZGxlLndyaXRlKCcgICAgZG9uZVxuJykKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFu
ZGxlLndyaXRlKCdlY2hvICIgIlxuJykKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndy
aXRlKCd9XG4nKQorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2V2YWwgInNl
dCAtLSAiJChhcmdzX3VwZGF0ZV9yZWxwYXRoc190b19hYnMgIiRAIikiIlxuJykKKyAgICAgICAg
ICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdjZCAiJHtNWURJUn0iXG4nKQorCisgICAgICAg
ICAgICBpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc2hhcmVfZGlyLCAnY2VydHMvYnVu
ZGxlLWNhLWNlcnRpZmljYXRlcy5wZW0nKSk6CisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRs
ZS53cml0ZSgnIyBUcnkgdG8gdXNlIHRoZSBzeXN0ZW0gQ0EgZmlsZSBpZiBwb3NzaWJsZSwgb3Ro
ZXJ3aXNlIHVzZSB0aGUgYnVuZGxlZCBvbmVcbicpCisgICAgICAgICAgICAgICAgc2NyaXB0X2hh
bmRsZS53cml0ZSgnZm9yIFdFQktJVF9UTFNfQ0FGSUxFX1BFTSBpbiAvZXRjL3NzbC9jZXJ0cy9j
YS1jZXJ0aWZpY2F0ZXMuY3J0IC9ldGMvc3NsL2NlcnQucGVtIC9ldGMvcGtpL2NhLXRydXN0L2V4
dHJhY3RlZC9wZW0vdGxzLWNhLWJ1bmRsZS5wZW0gIiR7TVlESVJ9L3N5cy9zaGFyZS9jZXJ0cy9i
dW5kbGUtY2EtY2VydGlmaWNhdGVzLnBlbSI7IGRvXG4nKQorICAgICAgICAgICAgICAgIHNjcmlw
dF9oYW5kbGUud3JpdGUoJyAgICBbIC1mICIke1dFQktJVF9UTFNfQ0FGSUxFX1BFTX0iIF0gJiYg
Z3JlcCAtcSAiQkVHSU4gQ0VSVElGSUNBVEUiICIke1dFQktJVF9UTFNfQ0FGSUxFX1BFTX0iICYm
IGV4cG9ydCBXRUJLSVRfVExTX0NBRklMRV9QRU0gJiYgYnJlYWtcbicpCisgICAgICAgICAgICAg
ICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnZG9uZVxuJykKIAotICAgICAgICAgICAgIyBNYXkgdXNl
IHRoZSB2YWx1ZSBvZiBJTlRFUlBSRVRFUiwgc28gaGFzIHRvIGNvbWUgYWZ0ZXIKLSAgICAgICAg
ICAgICMgdGhlIGRlZmluaXRpb24uCiAgICAgICAgICAgICBmb3IgdmFyLCB2YWx1ZSBpbiBleHRy
YV9lbnZpcm9ubWVudF92YXJpYWJsZXMuaXRlbXMoKToKLSAgICAgICAgICAgICAgICBzY3JpcHRf
aGFuZGxlLndyaXRlKCdleHBvcnQgJXM9XCIlc1wiXG4nICUgKHZhciwgdmFsdWUpKQotCi0gICAg
ICAgICAgICBpZiBpbnRlcnByZXRlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzY3Jp
cHRfaGFuZGxlLndyaXRlKCdleGVjICIke0lOVEVSUFJFVEVSfSIgIiR7JXN9L2Jpbi8lcyIgIiRA
IlxuJyAlIChzZWxmLlZBUl9NWURJUiwgYmluYXJ5X3RvX3dyYXApKQotICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdleHBvcnQgJXM9IiVzIlxu
JyAlICh2YXIsIHZhbHVlKSkKKworICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihzeXNsaWJf
ZGlyKToKKyAgICAgICAgICAgICAgICAjIFByZWZmZXIgdG8gdXNlIHRoZSBzeXN0ZW0gWEtCIGRh
dGEgZmlsZXMsIGJ1dCBpZiB0aGV5IGFyZSBub3Qgb24gdGhlIGV4cGVjdGVkIGxvY2F0aW9uIHVz
ZSBvdXIgb3duLgorICAgICAgICAgICAgICAgIHhrYl9idW5kbGVkID0gRmFsc2UKKyAgICAgICAg
ICAgICAgICBmb3IgZW50cnkgaW4gb3MubGlzdGRpcihzeXNsaWJfZGlyKToKKyAgICAgICAgICAg
ICAgICAgICAgaWYgZW50cnkuc3RhcnRzd2l0aCgnbGlieGtiY29tbW9uLnNvJyk6CisgICAgICAg
ICAgICAgICAgICAgICAgICB4a2JfYnVuZGxlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgeGtiX2J1bmRsZWQ6CisgICAgICAgICAgICAg
ICAgICAgIGFzc2VydCBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihzaGFyZV9kaXIsICd4a2In
KSkKKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnWyAtZCAvdXNyL3No
YXJlL1gxMS94a2IgXSB8fCBleHBvcnQgWEtCX0NPTkZJR19ST09UPSIkeyVzfS9zeXMvc2hhcmUv
eGtiIlxuJyAlIHNlbGYuVkFSX01ZRElSKQorCisgICAgICAgICAgICBsZF9saWJyYXJ5X3BhdGgg
PSAnJHslc30vbGliJyAlIHNlbGYuVkFSX01ZRElSCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlz
ZGlyKHN5c2xpYl9kaXIpOgorICAgICAgICAgICAgICAgIGxkX2xpYnJhcnlfcGF0aCArPSAnOiR7
JXN9L3N5cy9saWInICUgc2VsZi5WQVJfTVlESVIKKworICAgICAgICAgICAgIyBVcGRhdGUgY2Fj
aGUgb2YgZ2RrLXBpeGJ1ZiBsb2FkZXJzIGlmIG5lZWRlZCAoZmlyc3QgcnVuIG9yIHdoZW4gdGhl
IGFic29sdXRlIHBhdGhzIG9uIGRpc2sgaGF2ZSBjaGFuZ2VkKS4KKyAgICAgICAgICAgIGlmIG9z
LnBhdGguaXNkaXIob3MucGF0aC5qb2luKHN5c2xpYl9kaXIsICdnZGstcGl4YnVmL2xvYWRlcnMn
KSk6CisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnZXhwb3J0IEdES19QSVhC
VUZfTU9EVUxFRElSPSIkeyVzfS9zeXMvbGliL2dkay1waXhidWYvbG9hZGVycyJcbicgJSBzZWxm
LlZBUl9NWURJUikKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdleHBvcnQg
R0RLX1BJWEJVRl9NT0RVTEVfRklMRT0iJHslc30vc3lzL2xpYi9nZGstcGl4YnVmL2xvYWRlcnMu
Y2FjaGUiXG4nICUgc2VsZi5WQVJfTVlESVIpCisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRs
ZS53cml0ZSgnZ3JlcCAtc3EgIlxcIiR7R0RLX1BJWEJVRl9NT0RVTEVESVJ9LyIgIiR7R0RLX1BJ
WEJVRl9NT0RVTEVfRklMRX0iIHx8IExEX0xJQlJBUllfUEFUSD0iJXMiICIkeyVzfS9iaW4vZ2Rr
LXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIiAtLXVwZGF0ZS1jYWNoZVxuJyAlIChsZF9saWJyYXJ5X3Bh
dGgsIHNlbGYuVkFSX01ZRElSKSkKKworICAgICAgICAgICAgIyBTYW1lIGZvciBndGsgaW1tb2R1
bGVzIGNhY2hlCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihzeXNs
aWJfZGlyLCAnZ3RrL2ltbW9kdWxlcycpKToKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxl
LndyaXRlKCdleHBvcnQgR1RLX0lNX01PRFVMRV9ESVI9IiR7JXN9L3N5cy9saWIvZ3RrL2ltbW9k
dWxlcyJcbicgJSBzZWxmLlZBUl9NWURJUikKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxl
LndyaXRlKCdleHBvcnQgR1RLX0lNX01PRFVMRV9GSUxFPSIkeyVzfS9zeXMvbGliL2d0ay9pbW1v
ZHVsZXMvaW1tb2R1bGVzLmNhY2hlIlxuJyAlIHNlbGYuVkFSX01ZRElSKQorICAgICAgICAgICAg
ICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2dyZXAgLXNxICJcXCIke0dUS19JTV9NT0RVTEVfRElS
fS8iICIke0dUS19JTV9NT0RVTEVfRklMRX0iIHx8IExEX0xJQlJBUllfUEFUSD0iJXMiICIkeyVz
fS9iaW4vZ3RrLXF1ZXJ5LWltbW9kdWxlcy0zLjAiIC0tdXBkYXRlLWNhY2hlICIke0dUS19JTV9N
T0RVTEVfRElSfSIvKi5zb1xuJyAlIChsZF9saWJyYXJ5X3BhdGgsIHNlbGYuVkFSX01ZRElSKSkK
KworICAgICAgICAgICAgIyBMRF9MSUJSQVJZX1BBVEggaXMgc2V0IGF0IHRoZSBlbmQsIGp1c3Qg
YmVmb3JlIHRoZSBleGVjKCkgY2FsbCBhbmQgYmVmb3JlIGNhbGxpbmcgcHJvZ3JhbXMgYnVuZGxl
ZCwgb3RoZXJ3aXNlIGl0IG1heSBicmVhayBjb21tYW5kcyBmcm9tIHRoZSBzeXN0ZW0gbGlrZSBz
Y3JpcHQncyB1c2FnZSBvZiBzZWQvcmVhZGxpbmsvZ3JlcAorICAgICAgICAgICAgc2NyaXB0X2hh
bmRsZS53cml0ZSgnZXhwb3J0IExEX0xJQlJBUllfUEFUSD0iJXMiXG4nICUgbGRfbGlicmFyeV9w
YXRoKQorICAgICAgICAgICAgZGxvcGVud3JhcF9saWJuYW1lID0gJ2Rsb3BlbndyYXAuc28nCisg
ICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4obGliX2RpciwgZGxvcGVu
d3JhcF9saWJuYW1lKSk6CisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnZXhw
b3J0IExEX1BSRUxPQUQ9IiR7JXN9L2xpYi8lcyJcbicgJSAoc2VsZi5WQVJfTVlESVIsIGRsb3Bl
bndyYXBfbGlibmFtZSkpCisgICAgICAgICAgICAjIElmIHdlIGhhdmUgcGF0Y2hlZCB0aGUgYmlu
YXJpZXMgdG8gdXNlIGEgcmVsYXRpdmUgcmVscGF0aCB0aGVuIGxvYWQgdGhlIGJpbmFyeSBkaXJl
Y3RseSB3aXRob3V0IHByZWZpeGluZyBpdCB3aXRoIHRoZSBpbnRlcnByZXRlciAoaXQgYWxsb3dz
IHRoZSBwcm9jZXNzIHRvIHVzZSB0aGUgY29ycmVjdCBwcm9nbmFtZSkKKyAgICAgICAgICAgIGlm
IHNlbGYuX2hhc19wYXRjaGVkX2ludGVycHJldGVyX3JlbHBhdGg6CiAgICAgICAgICAgICAgICAg
c2NyaXB0X2hhbmRsZS53cml0ZSgnZXhlYyAiJHslc30vYmluLyVzIiAiJEAiXG4nICUgKHNlbGYu
VkFSX01ZRElSLCBiaW5hcnlfdG9fd3JhcCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ0lOVEVSUFJFVEVSPSIkeyVzfS9saWIvJXMiXG4n
ICUgKHNlbGYuVkFSX01ZRElSLCBvcy5wYXRoLmJhc2VuYW1lKGludGVycHJldGVyKSkpCisgICAg
ICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnZXhlYyAiJHtJTlRFUlBSRVRFUn0iICIk
eyVzfS9iaW4vJXMiICIkQCJcbicgJSAoc2VsZi5WQVJfTVlESVIsIGJpbmFyeV90b193cmFwKSkK
IAogICAgICAgICBvcy5jaG1vZChzY3JpcHRfZmlsZSwgMG83NTUpCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2JpbmFyeV9idW5kbGluZy9kbG9wZW53cmFwL01ha2VmaWxlIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9iaW5hcnlfYnVuZGxpbmcvZGxvcGVud3JhcC9NYWtlZmls
ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kMzA3NWM4OTRiMDEwMDJmNDIzOGIzZGNmMDFlZTBjMjQzYTFkODBmCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iaW5hcnlfYnVuZGxpbmcv
ZGxvcGVud3JhcC9NYWtlZmlsZQpAQCAtMCwwICsxLDE2IEBACitUSElTX0RJUiA6PSAkKHN0cmlw
ICQoc2hlbGwgZGlybmFtZSAkKHJlYWxwYXRoICQobGFzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkp
KSkKK0NDID0gZ2NjCitDRkxBR1MgPSAtZlBJQyAtV2FsbCAtV2V4dHJhIC1PMgorTERGTEFHUyA9
IC1ub3N0YXJ0ZmlsZXMgLXNoYXJlZCAtbGRsCitSTSA9IHJtIC1mCitUQVJHRVRfTElCID0gZGxv
cGVud3JhcC5zbworU1JDUyA9ICQoVEhJU19ESVIpL2Rsb3BlbndyYXAuYworCithbGw6ICR7VEFS
R0VUX0xJQn0KKworJChUQVJHRVRfTElCKTogJChTUkNTKQorCSQoQ0MpICQoQ0ZMQUdTKSAkKExE
RkxBR1MpIC1XbCwtc29uYW1lLCRAIC1vICRAICReCisKKy5QSE9OWTogY2xlYW4KK2NsZWFuOgor
CS0ke1JNfSAke1RBUkdFVF9MSUJ9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2JpbmFyeV9idW5kbGluZy9kbG9wZW53cmFwL1JFQURNRS50eHQgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2JpbmFyeV9idW5kbGluZy9kbG9wZW53cmFwL1JFQURNRS50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YTBkZjY5MjgwNTExNTQ5MTg4OTg5ZTI2N2RkNzhlMDc0ZjQ1NmIxNgotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5nL2Rsb3BlbndyYXAvUkVB
RE1FLnR4dApAQCAtMCwwICsxLDkgQEAKK1RoaXMgaXMgYSBzaGFyZWQgbGlicmFyeSB0byB3cmFw
IGRsb3BlbigpIGFuZCBkbG1vcGVuKCkgZnVuY3Rpb24gY2FsbHMKK2FuZCByZXdyaXRlIHRoZSBw
YXRocyBsb2FkZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGxpYnJhcnkgbG9hZGVkIGlzIGluc2lkZQor
TERfTElCUkFSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKworSXQgaXMgdXNlZCBieSB0
aGUgc2NyaXB0IGdlbmVyYXRlLWJ1bmRsZSB0aGF0IGJ1aWxkcyB0aGlzIGxpYnJhcnkgYW5kIGFk
ZHMKK2l0IHRvIGJlIHByZWxvYWRlZCBpbnRvIHRoZSB3cmFwcGVyIHNjcmlwdCB0aGF0IGV4ZWN1
dGVzIHRoZSBicm93c2VyLgorCitTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIERMT1BFTl9X
UkFQX0RFQlVHPTEgb3IgRExPUEVOX1dSQVBfREVCVUc9MgordG8gZ2V0IGVycm9yL2RlYnVnIG91
dHB1dCBmcm9tIHRoaXMgbGlicmFyeS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvYmluYXJ5X2J1bmRsaW5nL2Rsb3BlbndyYXAvZGxvcGVud3JhcC5jIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9iaW5hcnlfYnVuZGxpbmcvZGxvcGVud3JhcC9kbG9wZW53cmFwLmMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMDRkZTBiYzQ4MzE4M2IyZDVlMWRlNjNjYjNhOTZiMTU3ZjVlM2JkZQotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5nL2Rsb3Blbndy
YXAvZGxvcGVud3JhcC5jCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9HTlVfU09VUkNF
CisjZGVmaW5lIF9HTlVfU09VUkNFCisjZW5kaWYKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNs
dWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGliZ2VuLmg+Cisj
aW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIu
aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUg
PHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjZGVmaW5lIGRsb3Blbl93cmFw
cGVyX3ByaW50X2Vycm9yX21zZyhmbXQsIC4uLikgXAorICAgIGRvIHsgXAorICAgICAgICBpZiAo
ZGxvcGVuX3dyYXBwZXJfZGVidWdfcHJpbnQgPj0gMSkgXAorICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJbcGlkPSVkXSBFUlJPUiBhdCBkbG9wZW53cmFwLnNvOiAiIGZtdCwgZ2V0cGlkKCks
IF9fVkFfQVJHU19fKTsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgZGxvcGVuX3dyYXBw
ZXJfcHJpbnRfZGVidWdfbXNnKGZtdCwgLi4uKSBcCisgICAgZG8geyBcCisgICAgICAgIGlmIChk
bG9wZW5fd3JhcHBlcl9kZWJ1Z19wcmludCA+PSAyKSBcCisgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIltwaWQ9JWRdIGRsb3BlbndyYXAuc286ICIgZm10LCBnZXRwaWQoKSwgX19WQV9BUkdT
X18pOyBcCisgICAgfSB3aGlsZSAoMCkKKworc3RhdGljIGludCBkbG9wZW5fd3JhcHBlcl9kZWJ1
Z19wcmludCA9IC0xOworc3RhdGljIGludCBkbG9wZW5fd3JhcHBlcl9jYWxsX3JlYWxfZGxlcnJv
ciA9IDE7CitzdGF0aWMgY2hhciogKCpfX3JlYWxfZGxlcnJvcikodm9pZCkgPSBOVUxMOworCisv
LyBSZXR1cm5zIHRoZSBzdHJpbmcgImRpcm5hbWUvZmlsZW5hbWUiIGludG8gdGhlIGJ1ZmZlciBw
YXRoX2pvaW50X2Rlc3QKK3ZvaWQgZGxvcGVuX3dyYXBwZXJfcGF0aF9qb2luKGNvbnN0IGNoYXIq
IGRpcm5hbWUsIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBjaGFyKiBwYXRoX2pvaW50X2Rlc3QpCit7
CisgICAgcGF0aF9qb2ludF9kZXN0ID0gc3RybmNweShwYXRoX2pvaW50X2Rlc3QsIGRpcm5hbWUs
IFBBVEhfTUFYKTsKKyAgICAvLyBhZGQgYSBzbGFzaCBpZiBuZWVkZWQKKyAgICBpZiAoKihwYXRo
X2pvaW50X2Rlc3QgKyBzdHJsZW4oZGlybmFtZSkgLSAxKSAhPSAnLycpIHsKKyAgICAgICAgKihw
YXRoX2pvaW50X2Rlc3QgKyBzdHJsZW4oZGlybmFtZSkpID0gJy8nOworICAgICAgICAqKHBhdGhf
am9pbnRfZGVzdCArIHN0cmxlbihkaXJuYW1lKSArIDEpID0gMDsKKyAgICB9CisgICAgc3RybmNh
dChwYXRoX2pvaW50X2Rlc3QsIGZpbGVuYW1lLCBQQVRIX01BWCk7Cit9CisKK2ludCBpc19kaXIo
dW5zaWduZWQgY2hhciBkX3R5cGUsIGNvbnN0IGNoYXIqIGZpbGVwYXRoKQoreworICAgIHN0cnVj
dCBzdGF0IHN0YXRidWY7CisgICAgLy8gd2UgY29uc2lkZXIgYSBzeW1ib2xpYyBsaW5rIHRvIGEg
ZGlyIGFzIGEgZGlyLCBhbHNvIGhhbmRsZSB1bmtub3duLgorICAgIGlmIChkX3R5cGUgPT0gRFRf
VU5LTk9XTiB8fCBkX3R5cGUgPT0gRFRfTE5LKSB7CisgICAgICAgIGlmIChzdGF0KGZpbGVwYXRo
LCAmc3RhdGJ1ZikpCisgICAgICAgICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9lcnJvcl9tc2co
IkNhbGxpbmcgc3RhdCBvbiBcIiVzXCI6ICVzXG4iLCBmaWxlcGF0aCwgc3RyZXJyb3IoZXJybm8p
KTsKKyAgICAgICAgcmV0dXJuIFNfSVNESVIoc3RhdGJ1Zi5zdF9tb2RlKTsKKyAgICB9CisgICAg
cmV0dXJuIChkX3R5cGUgPT0gRFRfRElSKTsKK30KKworLy8gUmVjdXJzaXZlIGZ1bmN0aW9uIHRv
IHRyYXZlcnNlIGEgZGlyZWN0b3J5IGFuZCBvYnRhaW4gdGhlIHBhdGggb2YgdGhlIGZpcnN0IGZp
bGUgbmFtZWQgImZpbGVuYW1lIgorLy8gSXQgd3JpdGVzIHRoYXQgcGF0aCB0byB0aGUgYnVmZmVy
ICJjYW5kaWRhdGVfcGF0aF9kZXN0IiBpZiB0aGUgZmlsZSBpcyBmb3VuZCAocmV0dXJuID09IDEp
LgorLy8gSWYgdGhlIGZpbGUgaXMgbm90IGZvdW5kIGl0IHJldHVybnMgMCBhbmQgdGhlIGNvbnRl
bnRzIG9mICJjYW5kaWRhdGVfcGF0aF9kZXN0IiBhcmUgdW5kZWZpbmVkLgoraW50IGRsb3Blbl93
cmFwcGVyX3JlY3Vyc2l2ZV9maW5kKGNvbnN0IGNoYXIqIGZpbGVuYW1lX3RvX2ZpbmQsIGNvbnN0
IGNoYXIqIGRpcmVjdG9yeV90b19zZWFyY2gsIGNoYXIqIGNhbmRpZGF0ZV9wYXRoX2Rlc3QpCit7
CisKKyAgICBESVIgKmRwOworICAgIHN0cnVjdCBkaXJlbnQqIGVudHJ5OworCisgICAgY2hhciBz
dWJkaXJlY3RvcnlfdG9fc2VhcmNoW1BBVEhfTUFYXTsKKyAgICBkcCA9IG9wZW5kaXIoZGlyZWN0
b3J5X3RvX3NlYXJjaCk7CisKKyAgICBpZiAoIWRwKSB7CisgICAgICAgIGRsb3Blbl93cmFwcGVy
X3ByaW50X2Vycm9yX21zZygiT3BlbmluZyBkaXJlY3RvcnkgXCIlc1wiOiAlc1xuIiwgZGlyZWN0
b3J5X3RvX3NlYXJjaCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICBlbnRyeSA9
IHJlYWRkaXIoZHApOworICAgICAgICBpZiAoIWVudHJ5KSB7CisgICAgICAgICAgICBpZiAoZXJy
bm8pCisgICAgICAgICAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZXJyb3JfbXNnKCJSZWFk
aW5nIGRpcmVjdG9yeSBcIiVzXCI6ICVzXG4iLCBkaXJlY3RvcnlfdG9fc2VhcmNoLCBzdHJlcnJv
cihlcnJubykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IXN0cmNtcChlbnRyeS0+ZF9uYW1lLCAiLiIpIHx8ICFzdHJjbXAoZW50cnktPmRfbmFtZSwgIi4u
IikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBkbG9wZW5fd3JhcHBlcl9wYXRo
X2pvaW4oZGlyZWN0b3J5X3RvX3NlYXJjaCwgZW50cnktPmRfbmFtZSwgY2FuZGlkYXRlX3BhdGhf
ZGVzdCk7CisKKyAgICAgICAgaWYgKGlzX2RpcihlbnRyeS0+ZF90eXBlLCBjYW5kaWRhdGVfcGF0
aF9kZXN0KSkgeworICAgICAgICAgICAgZGxvcGVuX3dyYXBwZXJfcGF0aF9qb2luKGRpcmVjdG9y
eV90b19zZWFyY2gsIGVudHJ5LT5kX25hbWUsIHN1YmRpcmVjdG9yeV90b19zZWFyY2gpOworICAg
ICAgICAgICAgaWYgKGRsb3Blbl93cmFwcGVyX3JlY3Vyc2l2ZV9maW5kKGZpbGVuYW1lX3RvX2Zp
bmQsIHN1YmRpcmVjdG9yeV90b19zZWFyY2gsIGNhbmRpZGF0ZV9wYXRoX2Rlc3QpKSB7CisgICAg
ICAgICAgICAgICAgY2xvc2VkaXIoZHApOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFzdHJjbXAoZmls
ZW5hbWVfdG9fZmluZCwgZW50cnktPmRfbmFtZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWFj
Y2VzcyhjYW5kaWRhdGVfcGF0aF9kZXN0LCBGX09LIHwgUl9PSykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2xvc2VkaXIoZHApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZXJyb3Jf
bXNnKCJBY2Nlc3MgZGVuaWVkIHRvIGNhbmRpZGF0ZSBsaWJyYXJ5IFwiJXNcIlxuIiwgY2FuZGlk
YXRlX3BhdGhfZGVzdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2xv
c2VkaXIoZHApOworICAgIHJldHVybiAwOworfQorCisvLyBIZWxwZXIgZnVuY3Rpb24gdGhhdCBj
aGVja3MgaWYgZmlsZW5hbWVfb3JpZ2luYWxfcGF0aCBpcyBhIHBhdGggYW5kIGlzIGluc2lkZSBs
aWJkaXIuCisvLyBJZiBpdCBjYW4ndCBmaW5kIHRoZSBmaWxlIGRpcmVjdGx5IGJ5IHRoZSBwYXRo
LCBpdCBjYWxscyBkbG9wZW5fd3JhcHBlcl9yZWN1cnNpdmVfZmluZCgpIHRvIHNlYXJjaCBpdC4K
Ky8vIEl0IHdyaXRlcyB0aGUgcGF0aCB0byB0aGUgYnVmZmVyICJwYXRoX2ZvdW5kX2Rlc3QiIGlm
IHRoZSBmaWxlIGlzIGZvdW5kIChyZXR1cm4gPT0gMSkuCisvLyBJZiB0aGUgZmlsZSBpcyBub3Qg
Zm91bmQgaXQgcmV0dXJucyAwIGFuZCB0aGUgY29udGVudHMgb2YgInBhdGhfZm91bmRfZGVzdCIg
YXJlIHVuZGVmaW5lZC4KK2ludCBkbG9wZW5fd3JhcHBlcl9nZXRfcGF0aF9mb3JfZmlsZV91bmRl
cl9kaXIoY29uc3QgY2hhciogZmlsZW5hbWVfb3JpZ2luYWxfcGF0aCwgY29uc3QgY2hhciogbGli
ZGlyLCBjaGFyKiBwYXRoX2ZvdW5kX2Rlc3QpCit7CisKKyAgICAvLyBiYXNlbmFtZSgpIG1heSBt
b2RpZnkgdGhlIGJ1ZmZlciBwYXNzZWQgb24gdGhlIGZpcnN0IGFyZ3VtZW50CisgICAgY2hhciAq
b3JpZ2luYWxfcGF0aCA9IHN0cmR1cChmaWxlbmFtZV9vcmlnaW5hbF9wYXRoKTsKKyAgICBjaGFy
ICpiYXNlX2ZpbGVfdG9fZGxvcGVuX3dyYXBwZXJfZmluZCA9IGJhc2VuYW1lKG9yaWdpbmFsX3Bh
dGgpOworICAgIGludCByZXRjb2RlID0gMTsKKyAgICBpbnQgZmlsZW5hbWVfaXNfYWJzb2x1dGUg
PSAoKmZpbGVuYW1lX29yaWdpbmFsX3BhdGggPT0gJy8nKTsKKyAgICBpbnQgZmlsZW5hbWVfaXNf
cmVsYXRpdmUgPSAwOworICAgIGlmICghZmlsZW5hbWVfaXNfYWJzb2x1dGUpIHsKKyAgICAgICAg
Zm9yIChjaGFyKiBjdXJyZW50X2NoYXIgPSAoY2hhciopZmlsZW5hbWVfb3JpZ2luYWxfcGF0aDsg
KmN1cnJlbnRfY2hhcjsgKytjdXJyZW50X2NoYXIpIHsKKyAgICAgICAgICAgIGlmICgqY3VycmVu
dF9jaGFyID09ICcvJykgeworICAgICAgICAgICAgICAgIGZpbGVuYW1lX2lzX3JlbGF0aXZlID0g
MTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChmaWxlbmFtZV9pc19hYnNvbHV0ZSkgeworICAgICAgICBpZiAoIXN0cm5j
bXAoZmlsZW5hbWVfb3JpZ2luYWxfcGF0aCwgbGliZGlyLCBzdHJsZW4obGliZGlyKSkpIHsKKyAg
ICAgICAgICAgIGlmICghYWNjZXNzKGZpbGVuYW1lX29yaWdpbmFsX3BhdGgsIEZfT0sgfCBSX09L
KSkgeworICAgICAgICAgICAgICAgIGRsb3Blbl93cmFwcGVyX3ByaW50X2RlYnVnX21zZygiRmls
ZW5hbWUgXCIlc1wiIGZvdW5kIHVuZGVyIGRpcmVjdG9yeSBcIiVzXCIgd2l0aG91dCBhbnkgcGF0
aCByZXdyaXRpbmdcbiIsIGZpbGVuYW1lX29yaWdpbmFsX3BhdGgsIGxpYmRpcik7CisgICAgICAg
ICAgICAgICAgc3RybmNweShwYXRoX2ZvdW5kX2Rlc3QsIGZpbGVuYW1lX29yaWdpbmFsX3BhdGgs
IFBBVEhfTUFYKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9kZWJ1Z19tc2coIkZpbGVuYW1l
IFwiJXNcIiBOT1QgZm91bmQgdW5kZXIgZGlyZWN0b3J5IFwiJXNcIi4gV2lsbCB0cnkgYSBzZWFy
Y2ggd2l0aCBiYXNlbmFtZVxuIiwgZmlsZW5hbWVfb3JpZ2luYWxfcGF0aCwgbGliZGlyKTsKKyAg
ICB9IGVsc2UgaWYgKGZpbGVuYW1lX2lzX3JlbGF0aXZlKSB7CisgICAgICAgIGRsb3Blbl93cmFw
cGVyX3BhdGhfam9pbihsaWJkaXIsIGZpbGVuYW1lX29yaWdpbmFsX3BhdGgsIHBhdGhfZm91bmRf
ZGVzdCk7CisgICAgICAgIGlmICghYWNjZXNzKHBhdGhfZm91bmRfZGVzdCwgRl9PSyB8IFJfT0sp
KSB7CisgICAgICAgICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9kZWJ1Z19tc2coIkZpbGVuYW1l
IFwiJXNcIiBjb252ZXJ0ZWQgdG8gXCIlc1wiIGFuZCBmb3VuZCB1bmRlciBkaXJlY3RvcnkgXCIl
c1wiXG4iLCBmaWxlbmFtZV9vcmlnaW5hbF9wYXRoLCBwYXRoX2ZvdW5kX2Rlc3QsIGxpYmRpcik7
CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBkbG9wZW5fd3JhcHBl
cl9wcmludF9kZWJ1Z19tc2coIkZpbGVuYW1lIFwiJXNcIiBOT1QgZm91bmQgdW5kZXIgZGlyZWN0
b3J5IFwiJXNcIlxuIiwgZmlsZW5hbWVfb3JpZ2luYWxfcGF0aCwgbGliZGlyKTsKKyAgICB9CisK
KyAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9kZWJ1Z19tc2coIlRyeWluZyBhIHNlYXJjaCBmb3Ig
YmFzZW5hbWUgXCIlc1wiIHVuZGVyIGRpcmVjdG9yeSBcIiVzXCJcbiIsIGJhc2VfZmlsZV90b19k
bG9wZW5fd3JhcHBlcl9maW5kLCBsaWJkaXIpOworCisgICAgcmV0Y29kZSA9IGRsb3Blbl93cmFw
cGVyX3JlY3Vyc2l2ZV9maW5kKGJhc2VfZmlsZV90b19kbG9wZW5fd3JhcHBlcl9maW5kLCBsaWJk
aXIsIHBhdGhfZm91bmRfZGVzdCk7CisgICAgaWYgKG9yaWdpbmFsX3BhdGgpCisgICAgICAgIGZy
ZWUob3JpZ2luYWxfcGF0aCk7CisgICAgcmV0dXJuIHJldGNvZGU7Cit9CisKKy8vIEhlbHBlciBm
dW5jdGlvbiB0byBzcGxpdCB0aGUgcGF0aHMgb2YgbGRfbGlicmFyeV9wYXRoIGFuZCB0byBzZWFy
Y2ggZm9yICJmaWxlbmFtZV9vcmlnaW5hbF9wYXRoIiBpbnNpZGUgdGhvc2UgcGF0aHMuCisvLyBJ
dCB3aWxsIHN0b3Agc2VhcmNoaW5nIGF0IHRoZSBmaXJzdCBtYXRjaC4KKy8vIEl0IHdyaXRlcyB0
aGUgcGF0aCB0byB0aGUgYnVmZmVyICJwYXRoX2ZvdW5kX2Rlc3QiIGlmIHRoZSBmaWxlIGlzIGZv
dW5kIChyZXR1cm4gPT0gMSkuCisvLyBJZiB0aGUgZmlsZSBpcyBub3QgZm91bmQgaXQgcmV0dXJu
cyAwIGFuZCB0aGUgY29udGVudHMgb2YgInBhdGhfZm91bmRfZGVzdCIgYXJlIHVuZGVmaW5lZC4K
K2ludCBkbG9wZW5fd3JhcHBlcl9maW5kX2xpYnJhcnlfb25fbGlicGF0aChjb25zdCBjaGFyKiBm
aWxlbmFtZV9vcmlnaW5hbF9wYXRoLCBjb25zdCBjaGFyKiBsZF9saWJyYXJ5X3BhdGgsIGNoYXIq
IHBhdGhfZm91bmRfZGVzdCkKK3sKKworICAgIGNoYXIgKnNhdmVwdHIgPSBOVUxMOworICAgIGNo
YXIgKmxpYnJhcnlfcGF0aHMgPSBzdHJkdXAobGRfbGlicmFyeV9wYXRoKTsKKyAgICBpbnQgZm91
bmQgPSAwOworCisgICAgZm9yIChjaGFyICpsaWJkaXIgPSBzdHJ0b2tfcihsaWJyYXJ5X3BhdGhz
LCAiOiIsICZzYXZlcHRyKTsgbGliZGlyOyBsaWJkaXIgPSBzdHJ0b2tfcihOVUxMLCAiOiIsICZz
YXZlcHRyKSkgeworICAgICAgICAvLyBtYWtlIHRoZSBwYXRoIGFic29sdXRlCisgICAgICAgIGNo
YXIgKmxpYmRpcl9ycCA9IHJlYWxwYXRoKGxpYmRpciwgTlVMTCk7CisgICAgICAgIGlmICghbGli
ZGlyX3JwKSB7CisgICAgICAgICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9lcnJvcl9tc2coIkNh
bGxpbmcgcmVhbHBhdGgoKSBvbiBcIiVzXCI6ICVzXG4iLCBsaWJkaXIsIHN0cmVycm9yKGVycm5v
KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBkbG9wZW5fd3Jh
cHBlcl9wcmludF9kZWJ1Z19tc2coIlRyeWluZyBzZWFyY2ggdW5kZXIgZGlyZWN0b3J5ICVzXG4i
LCBsaWJkaXIpOworICAgICAgICBpZiAoZGxvcGVuX3dyYXBwZXJfZ2V0X3BhdGhfZm9yX2ZpbGVf
dW5kZXJfZGlyKGZpbGVuYW1lX29yaWdpbmFsX3BhdGgsIGxpYmRpcl9ycCwgcGF0aF9mb3VuZF9k
ZXN0KSkgeworICAgICAgICAgICAgZnJlZShsaWJkaXJfcnApOworICAgICAgICAgICAgZm91bmQg
PSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZnJlZShsaWJkaXJf
cnApOworICAgIH0KKyAgICBmcmVlKGxpYnJhcnlfcGF0aHMpOworICAgIHJldHVybiBmb3VuZDsK
K30KKwordm9pZCAqZGxvcGVuKGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgZmxhZ3MpCit7Cisg
ICAgY2hhciBuZXdfZmlsZV9wYXRoW1BBVEhfTUFYXTsKKyAgICBkbG9wZW5fd3JhcHBlcl9jYWxs
X3JlYWxfZGxlcnJvciA9IDE7CisKKyAgICBpZiAoZGxvcGVuX3dyYXBwZXJfZGVidWdfcHJpbnQg
PT0gLTEpIHsKKyAgICAgICAgY2hhciAqZGxvcGVuX2RlYnVnX3ZhbHVlID0gZ2V0ZW52KCJETE9Q
RU5fV1JBUF9ERUJVRyIpOworICAgICAgICBpZiAoZGxvcGVuX2RlYnVnX3ZhbHVlKQorICAgICAg
ICAgICAgZGxvcGVuX3dyYXBwZXJfZGVidWdfcHJpbnQgPSBhdG9pKGRsb3Blbl9kZWJ1Z192YWx1
ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqICgqX19yZWFsX2Rsb3BlbikoY29uc3QgY2hh
ciogZmlsZSwgaW50IG1vZGUpID0gTlVMTDsKKyAgICBpZiAoIV9fcmVhbF9kbG9wZW4pIHsKKyAg
ICAgICAgX19yZWFsX2Rsb3BlbiA9IGRsc3ltKFJUTERfTkVYVCwgImRsb3BlbiIpOworICAgICAg
ICBpZiAoIV9fcmVhbF9kbG9wZW4pIHsKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVyX3ByaW50
X2Vycm9yX21zZygiR2V0dGluZyBkbG9wZW4gYWRkcmVzczogJXNcbiIsIGRsZXJyb3IoKSk7Cisg
ICAgICAgICAgICBkbG9wZW5fd3JhcHBlcl9jYWxsX3JlYWxfZGxlcnJvciA9IDA7CisgICAgICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIV9fcmVhbF9kbGVy
cm9yKSB7CisgICAgICAgIF9fcmVhbF9kbGVycm9yID0gZGxzeW0oUlRMRF9ORVhULCAiZGxlcnJv
ciIpOworICAgICAgICBpZiAoIV9fcmVhbF9kbGVycm9yKSB7CisgICAgICAgICAgICBkbG9wZW5f
d3JhcHBlcl9wcmludF9lcnJvcl9tc2coIkdldHRpbmcgZGxlcnJvciBhZGRyZXNzOiAlc1xuIiwg
ZGxlcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgZmlsZW5hbWUgaXMgTlVMTCBvciBMRF9MSUJS
QVJZX1BBVEggbm90IGRlZmluZWQKKyAgICBpZiAoIWZpbGVuYW1lKQorICAgICAgICByZXR1cm4g
X19yZWFsX2Rsb3BlbihmaWxlbmFtZSwgZmxhZ3MpOworCisgICAgY2hhciAqbGRfbGlicmFyeV9w
YXRoID0gZ2V0ZW52KCJMRF9MSUJSQVJZX1BBVEgiKTsKKyAgICBpZiAoIWxkX2xpYnJhcnlfcGF0
aCkKKyAgICAgICAgcmV0dXJuIF9fcmVhbF9kbG9wZW4oZmlsZW5hbWUsIGZsYWdzKTsKKworICAg
IGlmICghZGxvcGVuX3dyYXBwZXJfZmluZF9saWJyYXJ5X29uX2xpYnBhdGgoZmlsZW5hbWUsIGxk
X2xpYnJhcnlfcGF0aCwgbmV3X2ZpbGVfcGF0aCkpIHsKKyAgICAgICAgZGxvcGVuX3dyYXBwZXJf
cHJpbnRfZXJyb3JfbXNnKCJDb3VsZCBub3QgZmluZCBcIiVzXCIgdW5kZXIgdGhlIGRpcmVjdG9y
aShlcykgb2YgTERfTElCUkFSWV9QQVRILiBSZWZ1c2luZyB0byBkbG9wZW4gaXRcbiIsIGZpbGVu
YW1lKTsKKyAgICAgICAgZGxvcGVuX3dyYXBwZXJfY2FsbF9yZWFsX2RsZXJyb3IgPSAwOworICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoZGxvcGVuX3dyYXBwZXJfZGVidWdf
cHJpbnQpIHsKKyAgICAgICAgaWYgKHN0cmNtcChmaWxlbmFtZSwgbmV3X2ZpbGVfcGF0aCkpCisg
ICAgICAgICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9kZWJ1Z19tc2coIk9yaWdpbmFsIHJlcXVl
c3QgdG8gZGxvcGVuIFwiJXNcIiBjaGFuZ2VkIHRvIGxvYWQgXCIlc1wiXG4iLCBmaWxlbmFtZSwg
bmV3X2ZpbGVfcGF0aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVy
X3ByaW50X2RlYnVnX21zZygiT3JpZ2luYWwgcmVxdWVzdCB0byBkbG9wZW4gXCIlc1wiIGFsbG93
ZWQgKHVuY2hhbmdlZCkgYmVjYXVzZSBpcyB1bmRlciB0aGUgZGlyZWN0b3JpKGVzKSBvZiBMRF9M
SUJSQVJZX1BBVEhcbiIsIGZpbGVuYW1lKTsKKyAgICB9CisKKyAgICByZXR1cm4gX19yZWFsX2Rs
b3BlbihuZXdfZmlsZV9wYXRoLCBmbGFncyk7Cit9CisKK3ZvaWQgKmRsbW9wZW4oTG1pZF90IGxt
aWQsIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgZmxhZ3MpCit7CisKKyAgICBjaGFyIG5ld19m
aWxlX3BhdGhbUEFUSF9NQVhdOworICAgIGRsb3Blbl93cmFwcGVyX2NhbGxfcmVhbF9kbGVycm9y
ID0gMTsKKworICAgIGlmIChkbG9wZW5fd3JhcHBlcl9kZWJ1Z19wcmludCA9PSAtMSkgeworICAg
ICAgICBjaGFyICpkbG9wZW5fZGVidWdfdmFsdWUgPSBnZXRlbnYoIkRMT1BFTl9XUkFQX0RFQlVH
Iik7CisgICAgICAgIGlmIChkbG9wZW5fZGVidWdfdmFsdWUpCisgICAgICAgICAgICBkbG9wZW5f
d3JhcHBlcl9kZWJ1Z19wcmludCA9IGF0b2koZGxvcGVuX2RlYnVnX3ZhbHVlKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCogKCpfX3JlYWxfZGxtb3BlbikoTG1pZF90IGxtaWR0LCBjb25zdCBj
aGFyKiBmaWxlLCBpbnQgbW9kZSkgPSBOVUxMOworICAgIGlmICghX19yZWFsX2RsbW9wZW4pIHsK
KyAgICAgICAgX19yZWFsX2RsbW9wZW4gPSBkbHN5bShSVExEX05FWFQsICJkbG1vcGVuIik7Cisg
ICAgICAgIGlmICghX19yZWFsX2RsbW9wZW4pIHsKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVy
X3ByaW50X2Vycm9yX21zZygiR2V0dGluZyBkbG1vcGVuIGFkZHJlc3M6ICVzXG4iLCBkbGVycm9y
KCkpOworICAgICAgICAgICAgZGxvcGVuX3dyYXBwZXJfY2FsbF9yZWFsX2RsZXJyb3IgPSAwOwor
ICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFfX3Jl
YWxfZGxlcnJvcikgeworICAgICAgICBfX3JlYWxfZGxlcnJvciA9IGRsc3ltKFJUTERfTkVYVCwg
ImRsZXJyb3IiKTsKKyAgICAgICAgaWYgKCFfX3JlYWxfZGxlcnJvcikgeworICAgICAgICAgICAg
ZGxvcGVuX3dyYXBwZXJfcHJpbnRfZXJyb3JfbXNnKCJHZXR0aW5nIGRsZXJyb3IgYWRkcmVzczog
JXNcbiIsIGRsZXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGZpbGVuYW1lIGlzIE5VTEwgb3Ig
TERfTElCUkFSWV9QQVRIIG5vdCBkZWZpbmVkCisgICAgaWYgKCFmaWxlbmFtZSkKKyAgICAgICAg
cmV0dXJuIF9fcmVhbF9kbG1vcGVuKGxtaWQsIGZpbGVuYW1lLCBmbGFncyk7CisKKyAgICBjaGFy
ICpsZF9saWJyYXJ5X3BhdGggPSBnZXRlbnYoIkxEX0xJQlJBUllfUEFUSCIpOworICAgIGlmICgh
bGRfbGlicmFyeV9wYXRoKQorICAgICAgICByZXR1cm4gX19yZWFsX2RsbW9wZW4obG1pZCwgZmls
ZW5hbWUsIGZsYWdzKTsKKworICAgIGlmICghZGxvcGVuX3dyYXBwZXJfZmluZF9saWJyYXJ5X29u
X2xpYnBhdGgoZmlsZW5hbWUsIGxkX2xpYnJhcnlfcGF0aCwgbmV3X2ZpbGVfcGF0aCkpIHsKKyAg
ICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZXJyb3JfbXNnKCJDb3VsZCBub3QgZmluZCBcIiVz
XCIgdW5kZXIgdGhlIGRpcmVjdG9yaShlcykgb2YgTERfTElCUkFSWV9QQVRILiBSZWZ1c2luZyB0
byBkbG1vcGVuIGl0XG4iLCBmaWxlbmFtZSk7CisgICAgICAgIGRsb3Blbl93cmFwcGVyX2NhbGxf
cmVhbF9kbGVycm9yID0gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYg
KGRsb3Blbl93cmFwcGVyX2RlYnVnX3ByaW50KSB7CisgICAgICAgIGlmIChzdHJjbXAoZmlsZW5h
bWUsIG5ld19maWxlX3BhdGgpKQorICAgICAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZGVi
dWdfbXNnKCJPcmlnaW5hbCByZXF1ZXN0IHRvIGRsbW9wZW4gXCIlc1wiIGNoYW5nZWQgdG8gbG9h
ZCBcIiVzXCJcbiIsIGZpbGVuYW1lLCBuZXdfZmlsZV9wYXRoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZGVidWdfbXNnKCJPcmlnaW5hbCByZXF1ZXN0
IHRvIGRsbW9wZW4gXCIlc1wiIGFsbG93ZWQgKHVuY2hhbmdlZCkgYmVjYXVzZSBpcyB1bmRlciB0
aGUgZGlyZWN0b3JpKGVzKSBvZiBMRF9MSUJSQVJZX1BBVEhcbiIsIGZpbGVuYW1lKTsKKyAgICB9
CisKKyAgICByZXR1cm4gX19yZWFsX2RsbW9wZW4obG1pZCwgbmV3X2ZpbGVfcGF0aCwgZmxhZ3Mp
OworfQorCisKK2NoYXIgKmRsZXJyb3Iodm9pZCkKK3sKKyAgICBzdGF0aWMgY2hhciogd3JhcHBl
cl9lcnJvcl9tc2cgPSAiQ2FsbCBibG9ja2VkIGJ5IGRsb3BlbndyYXBwZXIgbGlicmFyeS4iOwor
CisgICAgLy8gX19yZWFsX2RsZXJyb3IgaGFuZGxlIHdhcyBhbHJlYWR5IG9idGFpbmVkIGJlZm9y
ZSBvbiB0aGUgZGxvcGVuKCkgb3IgZGxtb3BlbigpIHdyYXBwZXJzLgorICAgIC8vIE9idGFpbmlu
ZyBpdCBoZXJlIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIGNhbGxpbmcgZGxzeW0oKSBvdmVyd3Jp
dGVzIHRoZSBkbGVycm9yIGJ1ZmZlci4KKyAgICBpZiAoZGxvcGVuX3dyYXBwZXJfY2FsbF9yZWFs
X2RsZXJyb3IgJiYgX19yZWFsX2RsZXJyb3IpCisgICAgICAgIHJldHVybiBfX3JlYWxfZGxlcnJv
cigpOworCisgICAgZGxvcGVuX3dyYXBwZXJfY2FsbF9yZWFsX2RsZXJyb3IgPSAxOworICAgIHJl
dHVybiB3cmFwcGVyX2Vycm9yX21zZzsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlci5weQppbmRleCBiZGYzYjM0NzEwNDJhMTMzNTdlZGI4NjRhMTQ5OGRmZmNhYTU0MDczLi5m
NjUxMDdhMGU5NDI5Mjc2OTM5ZDIzNGQyMjUzNDRkMDlmYTA5NWNlIDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CkBAIC0zMDUsNiArMzA1LDExIEBAIF9QQVRIX1JVTEVT
X1NQRUNJRklFUiA9IFsKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1RoaXJkUGFydHkn
LCAnbGlid2VicnRjJywgJ1NvdXJjZScsICd3ZWJydGMnKSwKICAgICAgIG9zLnBhdGguam9pbign
U291cmNlJywgJ1dlYkNvcmUnLCAnUEFMJywgJ3BhbCcsICdzcGknKV0sCiAgICAgIFsiLXJlYWRh
YmlsaXR5L25hbWluZy91bmRlcnNjb3JlcyJdKSwKKworICAgIChbICAjIGMgY29kZSB3aXRoIHVu
ZGVyc2NvcmVzIGluIHZhcmlhYmxlIG5hbWVzIGFuZCB0YWJzIGZvciB0aGUgTWFrZWZpbGUKKyAg
ICAgb3MucGF0aC5qb2luKCdUb29scycsICdTY3JpcHRzJywgJ3dlYmtpdHB5JywgJ2JpbmFyeV9i
dW5kbGluZycsICdkbG9wZW53cmFwJyldLAorICAgICBbIi1yZWFkYWJpbGl0eS9uYW1pbmcvdW5k
ZXJzY29yZXMiLAorICAgICAgIi13aGl0ZXNwYWNlL3RhYiJdKSwKIF0KIAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455975</attachid>
            <date>2022-03-28 17:56:39 -0700</date>
            <delta_ts>2022-03-29 03:07:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237107-20220329015637.patch</filename>
            <type>text/plain</type>
            <size>81518</size>
            <attacher name="Carlos Alberto Lopez Perez">clopez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxOTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdjNjc1NTI5ZTI1OGE2
OGM0ODhlYTgwMmRmMzkxM2ZmZmU1YmU0Ny4uMzYwZjdlODdhNWFhNWRjNzZmMjU2YWMyMjg3NjAy
YTYyYTE2MDM0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIyLTAzLTA4ICBDYXJs
b3MgQWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtH
VEtdW1dQRV0gZ2VuZXJhdGUtYnVuZGxlOiBzZWxmLWNvbnRhaW5lZCBidW5kbGUgZm9yIHRoZSBN
aW5pQnJvd3NlciB0aGF0IGNhbiB3b3JrIG9uIGFueSBkaXN0cm8KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzEwNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gY2hhbmdlIGlu
IGJlaGF2aW91ci4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29y
a1Nlc3Npb24uY3BwOiBBbGxvdyB0byBsb2FkIHRoZSBUTFMgZGF0YWJhc2Ugc3BlY2lmaWVkIG9u
IHRoZQorICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBXRUJLSVRfVExTX0NBRklMRV9QRU0g
d2hlbiBERVZFTE9QRVJfTU9ERSBpcyBlbmFibGVkCisgICAgICAgIChXZWJDb3JlOjpTb3VwTmV0
d29ya1Nlc3Npb246OlNvdXBOZXR3b3JrU2Vzc2lvbik6CisKIDIwMjItMDMtMjggIFppcmFuIFN1
biAgPHpzdW5AaWdhbGlhLmNvbT4KIAogICAgICAgICBbRm9ybXNdIEFsaWFzIGFwcGVhcmFuY2Ug
PGNvbXBhdC1hdXRvPiBrZXl3b3JkcyB0byAnYXV0bycgZm9yIGJ1dHRvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNz
aW9uLmNwcAppbmRleCA5ZWIzMTZkMmEwZmJhZGY1NDdlNzk0NTc1YzcwMWNjNDFkOWFkNzFiLi5k
ZDhmNzMwYjBmZGNmZWNmOTFhZDAyODI4MzNiZmU4MjdmNTBjNzk3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNz
aW9uLmNwcApAQCAtMTMzLDYgKzEzMywyMCBAQCBTb3VwTmV0d29ya1Nlc3Npb246OlNvdXBOZXR3
b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgaWYgKHNvdXBfYXV0aF9u
ZWdvdGlhdGVfc3VwcG9ydGVkKCkgJiYgIW1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAg
ICAgIHNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVyZV9ieV90eXBlKG1fc291cFNlc3Npb24uZ2V0KCks
IFNPVVBfVFlQRV9BVVRIX05FR09USUFURSk7CiAKKyNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUp
CisgICAgLy8gT3B0aW9uYWxseSBsb2FkIGEgY3VzdG9tIHBhdGggd2l0aCB0aGUgVExTIENBRmls
ZS4gVGhpcyBpcyB1c2VkIG9uIHRoZSBHVEsvV1BFIGJ1bmRsZXMuIFNlZSBzY3JpcHQgZ2VuZXJh
dGUtYnVuZGxlCisgICAgLy8gRG9uJ3QgZW5hYmxlIHRoaXMgb3V0c2lkZSBERVZFTE9QRVJfTU9E
RSBiZWNhdXNlIHVzaW5nIGEgbm9uLWRlZmF1bHQgVExTIGRhdGFiYXNlIGhhcyBzdXJwcmlzaW5n
IHVuZGVzaXJlZCBlZmZlY3RzCisgICAgLy8gb24gaG93IGNlcnRpZmljYXRlIHZlcmlmaWNhdGlv
biBpcyBwZXJmb3JtZWQuIFNlZSBodHRwczovL3dlYmtpdC5vcmcvYi8yMzcxMDcjYzE0IGFuZCBn
aXQgY29tbWl0IDgyOTk5ODc5YiBvbiBnbGliCisgICAgY29uc3QgY2hhciogY3VzdG9tVExTQ0FG
aWxlID0gZ19nZXRlbnYoIldFQktJVF9UTFNfQ0FGSUxFX1BFTSIpOworICAgIGlmIChjdXN0b21U
TFNDQUZpbGUpIHsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgICAg
ICBHUmVmUHRyPEdUbHNEYXRhYmFzZT4gY3VzdG9tVExTREIgPSBhZG9wdEdSZWYoZ190bHNfZmls
ZV9kYXRhYmFzZV9uZXcoY3VzdG9tVExTQ0FGaWxlLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAg
ICAgaWYgKGVycm9yKQorICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJGYWlsZWQgdG8gbG9hZCBU
TFMgZGF0YWJhc2UgXCIlc1wiOiAlcyIsIGN1c3RvbVRMU0NBRmlsZSwgZXJyb3ItPm1lc3NhZ2Up
OworICAgICAgICBzb3VwX3Nlc3Npb25fc2V0X3Rsc19kYXRhYmFzZShtX3NvdXBTZXNzaW9uLmdl
dCgpLCBjdXN0b21UTFNEQi5nZXQoKSk7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShERVZFTE9Q
RVJfTU9ERSkKKwogICAgIHNldHVwTG9nZ2VyKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwVmVyc2lvbmluZy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBWZXJzaW9uaW5nLmgKaW5kZXggZjc0MjFi
OTY2ZjIzOWY1NWMyMmM5MmI0ZmEwZWI2MWM5NDM0MzhlYy4uNDg5NWUwYzY5OTAwYmQ3NTM5N2Ux
N2M0NzRkMTFmZTQ0NTc5NGQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL1NvdXBWZXJzaW9uaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1NvdXBWZXJzaW9uaW5nLmgKQEAgLTE1OCw0ICsxNTgsMTEgQEAgc291
cF9zZXNzaW9uX3NldF9hY2NlcHRfbGFuZ3VhZ2UoU291cFNlc3Npb24qIHNlc3Npb24sIGNvbnN0
IGNoYXIqIGFjY2VwdExhbmd1YWcKIHsKICAgICBnX29iamVjdF9zZXQoc2Vzc2lvbiwgImFjY2Vw
dC1sYW5ndWFnZSIsIGFjY2VwdExhbmd1YWdlLCBudWxscHRyKTsKIH0KKworc3RhdGljIGlubGlu
ZSB2b2lkCitzb3VwX3Nlc3Npb25fc2V0X3Rsc19kYXRhYmFzZShTb3VwU2Vzc2lvbiAqc2Vzc2lv
biwgR1Rsc0RhdGFiYXNlICp0bHNfZGF0YWJhc2UpCit7CisgICAgZ19vYmplY3Rfc2V0KHNlc3Np
b24sICJ0bHMtZGF0YWJhc2UiLCB0bHNfZGF0YWJhc2UsIE5VTEwpOworfQorCiAjZW5kaWYgLy8g
VVNFKFNPVVAyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IDg4M2QzMTJiZTZhOGNmNjU3YzFhMjI2Mjg3YTgxNjk3NDI2ZjAxYzEuLjFhY2Y0MmE0
OGJkNDA3ZjU2NWZjZTcwNmY1NDE2ZDliMTVhMGZhOGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAyMi0wMy0wOCAg
Q2FybG9zIEFsYmVydG8gTG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbR1RLXVtXUEVdIGdlbmVyYXRlLWJ1bmRsZTogc2VsZi1jb250YWluZWQgYnVuZGxlIGZvciB0
aGUgTWluaUJyb3dzZXIgdGhhdCBjYW4gd29yayBvbiBhbnkgZGlzdHJvCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzcxMDcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGltcGxlbWVudHMgaW4gdGhl
IGdlbmVyYXRlLWJ1bmRsZSBzY3JpcHQgdGhlIHN1cHBvcnQgdG8gZ2VuZXJhdGUgYSBidW5kbGUg
c2VsZi1jb250YWluZWQgdGhhdCBjYW4gd29yayBvbiBhbnkgZGlzdHJvLgorICAgICAgICBUbyBh
Y2hpZXZlIHRoYXQgdGhlIGJ1bmRsZSBjb250YWlucyBhbGwgdGhlIHJlcXVpcmVkIHN5c3RlbSBs
aWJyYXJpZXMgaW5zaWRlIHRoZSBidW5kbGUgKGV2ZW4gdGhlIGdyYXBoaWNzIGRyaXZlcnMpLgor
ICAgICAgICBJdCBhbHNvIGNvbnRhaW5zIHRoZSByZXF1aXJlZCBzeXN0ZW0gcmVzb3VyY2VzOiBp
Y29ucyAoZm9yIGd0ayksIGZvbnRjb25maWcgZmlsZXMgYW5kIGZvbnRzLCBldGMuCisgICAgICAg
IEEgY3VzdG9tIGRsb3BlbndyYXAgbGlicmFyeSBpcyBhbHNvIGFkZGVkIGFuZCBwcmVsb2FkZWQu
IFRoZSBwdXJwb3NlIG9mIHRoaXMgbGlicmFyeSBpcyB0byB3cmFwIGFsbCBkbG9wZW4oKSBjYWxs
cworICAgICAgICBhbmQgcmV3cml0ZSB0aGUgcGF0aHMgdG8gZW5zdXJlIHRoYXQgb25seSBsaWJy
YXJpZXMgaW5zaWRlIHRoZSBidW5kbGUgYXJlIGxvYWRlZC4KKworICAgICAgICBUaGUgYnVuZGxl
IGhhcyBiZWVuIHRlc3RlZCB0byBiZSBnZW5lcmF0ZWQgd2l0aCB0aGUgZmxhdHBhayBidWlsZCBh
bmQgZXhlY3V0ZWQgb24gYSByYW5nZSBvZiB2ZXJ5IGRpZmZlcmVudCBkaXN0cmlidXRpb25zCisg
ICAgICAgIHdpdGggc3VjZXNzOiBGZWRvcmEsIFVidW50dSwgRGViaWFuLCBBbHBpbmUsIENlbnRP
UyAoZGlmZmVyZW50IHZlcnNpb25zIG9mIGVhY2gpCisKKyAgICAgICAgKiBTY3JpcHRzL2J1bmRs
ZS1iaW5hcnk6CisgICAgICAgICogU2NyaXB0cy9nZW5lcmF0ZS1idW5kbGU6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9iaW5hcnlfYnVuZGxpbmcvYnVuZGxlLnB5OgorICAgICAgICAoQmlu
YXJ5QnVuZGxlcik6CisgICAgICAgIChCaW5hcnlCdW5kbGVyLl9faW5pdF9fKToKKyAgICAgICAg
KEJpbmFyeUJ1bmRsZXIuX2lzX3N5c3RlbV9kZXApOgorICAgICAgICAoQmluYXJ5QnVuZGxlci5z
ZXRfdXNlX3N5c19saWJfZGlyZWN0b3J5KToKKyAgICAgICAgKEJpbmFyeUJ1bmRsZXIuY29weV9h
bmRfbWF5YmVfc3RyaXBfcGF0Y2hlbGYpOgorICAgICAgICAoQmluYXJ5QnVuZGxlci5kZXN0aW5h
dGlvbl9kaXIpOgorICAgICAgICAoQmluYXJ5QnVuZGxlci5nZW5lcmF0ZV93cmFwcGVyX3Njcmlw
dCk6CisgICAgICAgIChCaW5hcnlCdW5kbGVyLmNvcHlfYW5kX3JlbW92ZV9ycGF0aCk6IERlbGV0
ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iaW5hcnlfYnVuZGxpbmcvZGxvcGVud3Jh
cC9NYWtlZmlsZTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iaW5hcnlfYnVu
ZGxpbmcvZGxvcGVud3JhcC9SRUFETUUudHh0OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2JpbmFyeV9idW5kbGluZy9kbG9wZW53cmFwL2Rsb3BlbndyYXAuYzogQWRkZWQuCisg
ICAgICAgIChkbG9wZW5fd3JhcHBlcl9wYXRoX2pvaW4pOgorICAgICAgICAoaXNfZGlyKToKKyAg
ICAgICAgKGRsb3Blbl93cmFwcGVyX3JlY3Vyc2l2ZV9maW5kKToKKyAgICAgICAgKGRsb3Blbl93
cmFwcGVyX2dldF9wYXRoX2Zvcl9maWxlX3VuZGVyX2Rpcik6CisgICAgICAgIChkbG9wZW5fd3Jh
cHBlcl9maW5kX2xpYnJhcnlfb25fbGlicGF0aCk6CisgICAgICAgIChkbG9wZW4pOgorICAgICAg
ICAoZGxtb3Blbik6CisgICAgICAgIChkbGVycm9yKToKKwogMjAyMi0wMy0yNiAgTXlsZXMgQy4g
TWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHUFVdIEltcG9y
dCBXZWJHUFUgQ29uZm9ybWFuY2UgVGVzdCBTdWl0ZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy9idW5kbGUtYmluYXJ5IGIvVG9vbHMvU2NyaXB0cy9idW5kbGUtYmluYXJ5CmluZGV4IGU3NmYz
ZmEwMTI0ZGZmNTQ4NjUwOWJkZmNmMTY3N2IyYmE1ZTMzMzEuLjI5ZDFjNTBkMjdmNmExMDM4ZDJh
ZjQ2MDhmZTE2ZWNkNzlkNTg3ZmYgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvYnVuZGxlLWJp
bmFyeQorKysgYi9Ub29scy9TY3JpcHRzL2J1bmRsZS1iaW5hcnkKQEAgLTQ2LDExICs0NiwxMSBA
QCBkZWYgbWFpbigpOgogCiAgICAgaWYgaW50ZXJwcmV0ZXIgaXMgTm9uZToKICAgICAgICAgcmFp
c2UgUnVudGltZUVycm9yKCJDb3VsZCBub3QgZGV0ZXJtaW5lIGludGVycHJldGVyIGZvciBiaW5h
cnkgJXMiICUgb2JqZWN0KQotICAgIGJ1bmRsZXIgPSBCaW5hcnlCdW5kbGVyKGFyZ3MuZGVzdF9k
aXIsIEZhbHNlKQotICAgIGJ1bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRoKGludGVycHJldGVy
LCB0eXBlPSdpbnRlcnByZXRlcicpCi0gICAgYnVuZGxlci5jb3B5X2FuZF9yZW1vdmVfcnBhdGgo
YXJncy5iaW5hcnksIHR5cGU9J2JpbicpCisgICAgYnVuZGxlciA9IEJpbmFyeUJ1bmRsZXIoYXJn
cy5kZXN0X2RpcikKKyAgICBidW5kbGVyLmNvcHlfYW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKGlu
dGVycHJldGVyLCB0eXBlPSdpbnRlcnByZXRlcicsIHN0cmlwPUZhbHNlLCBwYXRjaGVsZl9yZW1v
dmVycGF0aD1UcnVlLCBwYXRjaGVsZl9ub2RlZmF1bHRsaWI9RmFsc2UpCisgICAgYnVuZGxlci5j
b3B5X2FuZF9tYXliZV9zdHJpcF9wYXRjaGVsZihhcmdzLmJpbmFyeSwgdHlwZT0nYmluJywgc3Ry
aXA9RmFsc2UsIHBhdGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBhdGNoZWxmX25vZGVmYXVsdGxp
Yj1GYWxzZSkKICAgICBmb3IgbGliIGluIGxpYnJhcmllczoKLSAgICAgICAgYnVuZGxlci5jb3B5
X2FuZF9yZW1vdmVfcnBhdGgobGliLCB0eXBlPSdsaWInKQorICAgICAgICBidW5kbGVyLmNvcHlf
YW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKGxpYiwgdHlwZT0nbGliJywgc3RyaXA9RmFsc2UsIHBh
dGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBhdGNoZWxmX25vZGVmYXVsdGxpYj1GYWxzZSkKICAg
ICBidW5kbGVyLmdlbmVyYXRlX3dyYXBwZXJfc2NyaXB0KGludGVycHJldGVyLCBvcy5wYXRoLmJh
c2VuYW1lKGFyZ3MuYmluYXJ5KSkKICAgICByZXR1cm4gMAogCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL2dlbmVyYXRlLWJ1bmRsZSBiL1Rvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtYnVuZGxlCmlu
ZGV4IGIzMmI5OTZjOGI2MjMzYTA3ZDk3NGQzY2U1NjMzZmY5ZGQyODViZTkuLmIxYzdlYjI3ZmJh
OWYwYmQ5N2U4ZjAwY2NiMDZkMTVlMzY3NjJmYzggMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
Z2VuZXJhdGUtYnVuZGxlCisrKyBiL1Rvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtYnVuZGxlCkBAIC0y
MSw3ICsyMSw2IEBACiAjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CiAjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCiBpbXBvcnQgYXJncGFyc2UKIGltcG9ydCBiYXNlNjQKIGltcG9ydCBkYXRldGlt
ZQpAQCAtODcsNiArODYsNjAgQEAgZWxzZQogZmkKICIiIgogCitGT05UX0NPTkZfRklMRSA9ICIi
IlwKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJm
b250cy5kdGQiPgorPGZvbnRjb25maWc+CisgICAgPGl0czpydWxlcyB4bWxuczppdHM9Imh0dHA6
Ly93d3cudzMub3JnLzIwMDUvMTEvaXRzIiB2ZXJzaW9uPSIxLjAiPgorICAgICAgICA8aXRzOnRy
YW5zbGF0ZVJ1bGUgdHJhbnNsYXRlPSJubyIgc2VsZWN0b3I9Ii9mb250Y29uZmlnLypbbm90KHNl
bGY6OmRlc2NyaXB0aW9uKV0iLz4KKyAgICA8L2l0czpydWxlcz4KKworICAgIDxkZXNjcmlwdGlv
bj5EZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZTwvZGVzY3JpcHRpb24+CisKKzwhLS0gRm9udCBk
aXJlY3RvcnkgbGlzdCwgcmVsYXRpdmUgdG8gWERHX0RBVEFfSE9NRSAtLT4KKyAgICA8ZGlyIHBy
ZWZpeD0ieGRnIj5mb250cy9mb250czwvZGlyPgorCis8IS0tIExvYWQgc3lzdGVtIGN1c3RvbWl6
YXRpb24gZmlsZXMsIHJlbGF0aXZlIHRvIHByZXZpb3VzIGRpciAtLT4KKyAgICA8aW5jbHVkZSBp
Z25vcmVfbWlzc2luZz0ieWVzIj5jb25mLmQ8L2luY2x1ZGU+CisKKzwhLS0gRm9udCBjYWNoZSBk
aXJlY3RvcnkgbGlzdCwgcmVsYXRpdmUgdG8gWERHX0NBQ0hFX0hPTUUgLS0+CisgICAgPGNhY2hl
ZGlyIHByZWZpeD0ieGRnIj5mb250Y29uZmlnPC9jYWNoZWRpcj4KKworPCEtLSBJbmNsdWRlIGFs
c28gdGhlIHN5c3RlbSBmb250IGNvbmZpZyBpZiBpcyBvbiB0aGUgc3RhbmRhcmQgZGlyIC0tPgor
ICAgIDxpbmNsdWRlIGlnbm9yZV9taXNzaW5nPSJ5ZXMiPi9ldGMvZm9udHMvZm9udHMuY29uZjwv
aW5jbHVkZT4KKworPCEtLSBBY2NlcHQgZGVwcmVjYXRlZCAnbW9ubycgYWxpYXMsIHJlcGxhY2lu
ZyBpdCB3aXRoICdtb25vc3BhY2UnIC0tPgorICAgIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgor
ICAgICAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+CisgICAgICAgICAgICA8c3Ry
aW5nPm1vbm88L3N0cmluZz4KKyAgICAgICAgPC90ZXN0PgorICAgICAgICA8ZWRpdCBuYW1lPSJm
YW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+CisgICAgICAgICAgICA8c3RyaW5n
Pm1vbm9zcGFjZTwvc3RyaW5nPgorICAgICAgICA8L2VkaXQ+CisgICAgPC9tYXRjaD4KKworPCEt
LSBBY2NlcHQgYWx0ZXJuYXRlICdzYW5zIHNlcmlmJyBzcGVsbGluZywgcmVwbGFjaW5nIGl0IHdp
dGggJ3NhbnMtc2VyaWYnIC0tPgorICAgIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgorICAgICAg
ICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+CisgICAgICAgICAgICA8c3RyaW5nPnNh
bnMgc2VyaWY8L3N0cmluZz4KKyAgICAgICAgPC90ZXN0PgorICAgICAgICA8ZWRpdCBuYW1lPSJm
YW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+CisgICAgICAgICAgICA8c3RyaW5n
PnNhbnMtc2VyaWY8L3N0cmluZz4KKyAgICAgICAgPC9lZGl0PgorICAgIDwvbWF0Y2g+CisKKzwh
LS0gQWNjZXB0IGRlcHJlY2F0ZWQgJ3NhbnMnIGFsaWFzLCByZXBsYWNpbmcgaXQgd2l0aCAnc2Fu
cy1zZXJpZicgLS0+CisgICAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+CisgICAgICAgIDx0ZXN0
IHF1YWw9ImFueSIgbmFtZT0iZmFtaWx5Ij4KKyAgICAgICAgICAgIDxzdHJpbmc+c2Fuczwvc3Ry
aW5nPgorICAgICAgICA8L3Rlc3Q+CisgICAgICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0i
YXNzaWduIiBiaW5kaW5nPSJzYW1lIj4KKyAgICAgICAgICAgIDxzdHJpbmc+c2Fucy1zZXJpZjwv
c3RyaW5nPgorICAgICAgICA8L2VkaXQ+CisgICAgPC9tYXRjaD4KKzwvZm9udGNvbmZpZz4KKyIi
IgorCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiBMT0dfTUVTU0FHRSA9IDI1
CiAKQEAgLTEzOCw2ICsxOTEsOSBAQCBjbGFzcyBCdW5kbGVDcmVhdG9yKG9iamVjdCk6CiAgICAg
ICAgIHdrX2J1aWxkX3BhdGggPSBvcy5lbnZpcm9uWydXRUJLSVRfT1VUUFVURElSJ10gaWYgJ1dF
QktJVF9PVVRQVVRESVInIGluIG9zLmVudmlyb24gZWxzZSBcCiAgICAgICAgICAgICAgICAgICAg
ICAgICBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVf
XyksICcuLicsICcuLicsICdXZWJLaXRCdWlsZCcpKQogICAgICAgICBzZWxmLl9idWlsZHBhdGgg
PSBvcy5wYXRoLmpvaW4od2tfYnVpbGRfcGF0aCwgc2VsZi5fY29uZmlndXJhdGlvbi5jYXBpdGFs
aXplKCkpCisgICAgICAgIHNlbGYuX2Rsb3BlbndyYXBfZGlyID0gb3MucGF0aC5hYnNwYXRoKG9z
LnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnd2Via2l0cHknLCAnYmluYXJ5
X2J1bmRsaW5nJywgJ2Rsb3BlbndyYXAnKSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIo
c2VsZi5fZGxvcGVud3JhcF9kaXIpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJD
YW4ndCBmaW5kIHRoZSBkbG9wZW53cmFwIGRpcmVjdG9yeSBhdDogJXMiICUgc2VsZi5fZGxvcGVu
d3JhcF9kaXIpCiAKICAgICAgICAgZGVmYXVsdF9idW5kbGVfbmFtZSA9IGJ1bmRsZV90eXBlICAr
ICdfJyArIHNlbGYuX3BsYXRmb3JtICsgJ18nICsgc2VsZi5fY29uZmlndXJhdGlvbiArICcuJyAr
IHNlbGYuX2NvbXByZXNzaW9uX3R5cGUKICAgICAgICAgaWYgZGVzdGluYXRpb24gYW5kICBvcy5w
YXRoLmlzZGlyKGRlc3RpbmF0aW9uKToKQEAgLTE0NSw3ICsyMDEsNiBAQCBjbGFzcyBCdW5kbGVD
cmVhdG9yKG9iamVjdCk6CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9idW5kbGVf
ZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHdrX2J1aWxkX3BhdGgsIGRlZmF1bHRfYnVuZGxlX25h
bWUpCiAKLQogICAgIGRlZiBfY3JlYXRlX3RlbXBkaXIoc2VsZiwgYmFzZWRpciA9IE5vbmUpOgog
ICAgICAgICBpZiBiYXNlZGlyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaWYgbm90IG9zLnBh
dGguaXNkaXIoYmFzZWRpcik6CkBAIC0xNTMsNyArMjA4LDYgQEAgY2xhc3MgQnVuZGxlQ3JlYXRv
cihvYmplY3QpOgogICAgICAgICAgICAgcmV0dXJuIHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PW9z
LnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgoYmFzZWRpciksICd0bXAnKSkKICAgICAgICAgcmV0
dXJuIHRlbXBmaWxlLm1rZHRlbXAoKQogCi0KICAgICBkZWYgX3J1bl9jbWRfYW5kX2dldF9vdXRw
dXQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIF9sb2cuZGVidWcoIkVYRUMgJXMiICUgY29tbWFu
ZCkKICAgICAgICAgY29tbWFuZF9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbihjb21tYW5kLApA
QCAtMTcwLDcgKzIyNCw2IEBAIGNsYXNzIEJ1bmRsZUNyZWF0b3Iob2JqZWN0KToKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGxpbmUuc3BsaXQoJz0nKVsxXS5zdHJpcCgpLnN0cmlwKCciJykK
ICAgICAgICAgcmV0dXJuIE5vbmUKIAotCiAgICAgZGVmIF9nZW5lcmF0ZV9yZWFkbWUoc2VsZik6
CiAgICAgICAgIF9sb2cuaW5mbygnR2VuZXJhdGUgUkVBRE1FLnR4dCBmaWxlJykKICAgICAgICAg
cmVhZG1lX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fdG1wZGlyLCAnUkVBRE1FLnR4dCcpCkBA
IC0xOTEsMzYgKzI0NCw0NyBAQCBjbGFzcyBCdW5kbGVDcmVhdG9yKG9iamVjdCk6CiAgICAgICAg
ICAgICAgICAgcmVhZG1lX2hhbmRsZS53cml0ZSgnICAtIFRvIGVuc3VyZSBhbGwgdGhlIHJlcXVp
cmVkIGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkIGV4ZWN1dGUgdGhlIHNjcmlwdDogaW5zdGFsbC1k
ZXBlbmRlbmNpZXMuc2hcbicpCiAgICAgICAgICAgICAgICAgcmVhZG1lX2hhbmRsZS53cml0ZSgn
ICAtIFlvdSBjYW4gcGFzcyB0aGUgZmxhZyAiLS1hdXRvaW5zdGFsbCIgdG8gdGhpcyBzY3JpcHQg
dG8gYXV0b21hdGljYWxseSBpbnN0YWxsIHRoZSBkZXBlbmRlbmNpZXMgaWYgbmVlZGVkLlxuJykK
ICAgICAgICAgICAgIHJlYWRtZV9oYW5kbGUud3JpdGUoJ1xuUnVuIGluc3RydWN0aW9uczpcbicp
Ci0gICAgICAgICAgICBzY3JpcHRzID0gInNjcmlwdCIgaWYgbGVuKHNlbGYuX3dyYXBwZXJfc2Ny
aXB0cykgPT0gMSBlbHNlICJzY3JpcHRzIgorICAgICAgICAgICAgc2NyaXB0cyA9ICdzY3JpcHQn
IGlmIGxlbihzZWxmLl93cmFwcGVyX3NjcmlwdHMpID09IDEgZWxzZSAnc2NyaXB0cycKICAgICAg
ICAgICAgIHJlYWRtZV9oYW5kbGUud3JpdGUoJyAgLSBFeGVjdXRlIHRoZSB3cmFwcGVyICVzIGlu
IHRoaXMgZGlyZWN0b3J5OlxuJyAlIHNjcmlwdHMpCiAgICAgICAgICAgICBmb3Igd3JhcHBlcl9z
Y3JpcHQgaW4gc2VsZi5fd3JhcHBlcl9zY3JpcHRzOgogICAgICAgICAgICAgICAgIHJlYWRtZV9o
YW5kbGUud3JpdGUoJyAgICAqICVzXG4nICV3cmFwcGVyX3NjcmlwdCkKICAgICAgICAgcmV0dXJu
IFRydWUKIAotCiAgICAgZGVmIF9nZW5lcmF0ZV93cmFwcGVyX3NjcmlwdChzZWxmLCBpbnRlcnBy
ZXRlciwgYmluYXJ5X3RvX3dyYXApOgogICAgICAgICB2YXJpYWJsZXMgPSBkaWN0KCkKICAgICAg
ICAgbXlkaXIgPSBzZWxmLl9idW5kbGVyLlZBUl9NWURJUgotICAgICAgICBpZiBvcy5wYXRoLmlz
ZGlyKG9zLnBhdGguam9pbihzZWxmLl9idW5kbGVyLmRlc3RpbmF0aW9uX2RpcigpLCAnZ2lvJykp
OgotICAgICAgICAgICAgZ2lvX3ZhciA9ICdHSU9fTU9EVUxFX0RJUicgaWYgc2VsZi5fc3lzbGli
cyA9PSAnYnVuZGxlLWFsbCcgZWxzZSAnR0lPX0VYVFJBX01PRFVMRVMnCi0gICAgICAgICAgICB2
YXJpYWJsZXNbZ2lvX3Zhcl0gPSAiJHslc30vZ2lvIiAlIG15ZGlyCisgICAgICAgIGxpYl9kaXIg
PSBvcy5wYXRoLmpvaW4oc2VsZi5fYnVuZGxlci5kZXN0aW5hdGlvbl9kaXIoKSwgJ2xpYicpCisg
ICAgICAgIHN5c2xpYl9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fYnVuZGxlci5kZXN0aW5hdGlv
bl9kaXIoKSwgJ3N5cy9saWInKQorICAgICAgICBiaW5fZGlyID0gb3MucGF0aC5qb2luKHNlbGYu
X2J1bmRsZXIuZGVzdGluYXRpb25fZGlyKCksICdiaW4nKQorICAgICAgICBzaGFyZV9kaXIgPSBv
cy5wYXRoLmpvaW4oc2VsZi5fYnVuZGxlci5kZXN0aW5hdGlvbl9kaXIoKSwgJ3N5cy9zaGFyZScp
CiAKLSAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc2VsZi5fYnVuZGxlci5k
ZXN0aW5hdGlvbl9kaXIoKSwgJ2dzdCcpKToKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5w
YXRoLmpvaW4oc3lzbGliX2RpciwgJ2dpbycpKToKKyAgICAgICAgICAgIGdpb192YXIgPSAnR0lP
X01PRFVMRV9ESVInIGlmIHNlbGYuX3N5c2xpYnMgPT0gJ2J1bmRsZS1hbGwnIGVsc2UgJ0dJT19F
WFRSQV9NT0RVTEVTJworICAgICAgICAgICAgdmFyaWFibGVzW2dpb192YXJdID0gJyR7JXN9L3N5
cy9saWIvZ2lvJyAlIG15ZGlyCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2lu
KHN5c2xpYl9kaXIsICdnc3QnKSk6CiAgICAgICAgICAgICBnc3RfdmFyID0gJ0dTVF9QTFVHSU5f
U1lTVEVNX1BBVEhfMV8wJyBpZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJyBlbHNlICdH
U1RfUExVR0lOX1BBVEhfMV8wJwotICAgICAgICAgICAgdmFyaWFibGVzW2dzdF92YXJdID0gIiR7
JXN9L2dzdCIgJSBteWRpcgotICAgICAgICAgICAgdmFyaWFibGVzWydHU1RfUkVHSVNUUllfMV8w
J10gPSAiJHslc30vZ3N0L2dzdHJlYW1lci0xLjAucmVnaXN0cnkiICUgbXlkaXIKLSAgICAgICAg
aWYgYmluYXJ5X3RvX3dyYXAgIT0gImpzYyI6Ci0gICAgICAgICAgICB2YXJpYWJsZXNbJ1dFQktJ
VF9FWEVDX1BBVEgnXSA9ICIkeyVzfS9iaW4iICUgbXlkaXIKLSAgICAgICAgICAgIHZhcmlhYmxl
c1snV0VCS0lUX0lOSkVDVEVEX0JVTkRMRV9QQVRIJ10gPSAiJHslc30vbGliIiAlIG15ZGlyCi0g
ICAgICAgIGlmIHNlbGYuX3N5c2xpYnMgPT0gJ2J1bmRsZS1hbGwnOgotICAgICAgICAgICAgaWYg
YmluYXJ5X3RvX3dyYXAgIT0gImpzYyI6Ci0gICAgICAgICAgICAgICAgZm9yIHZhciBpbiBbJ1dF
Ql9QUk9DRVNTX0NNRF9QUkVGSVgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQTFVH
SU5fUFJPQ0VTU19DTURfUFJFRklYJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTkVU
V09SS19QUk9DRVNTX0NNRF9QUkVGSVgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdH
UFVfUFJPQ0VTU19DTURfUFJFRklYJ106Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc1t2
YXJdID0gIiR7JXN9IiAlIHNlbGYuX2J1bmRsZXIuVkFSX0lOVEVSUFJFVEVSCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICBpbnRlcnByZXRlciA9IE5vbmUKKyAgICAgICAgICAgIHZhcmlhYmxl
c1tnc3RfdmFyXSA9ICckeyVzfS9zeXMvbGliL2dzdCcgJSBteWRpcgorICAgICAgICAgICAgdmFy
aWFibGVzWydHU1RfUkVHSVNUUllfMV8wJ10gPSAnJHslc30vc3lzL2xpYi9nc3QvZ3N0cmVhbWVy
LTEuMC5yZWdpc3RyeScgJSBteWRpcgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUob3Mu
cGF0aC5qb2luKGJpbl9kaXIsICdnc3QtcGx1Z2luLXNjYW5uZXInKSk6CisgICAgICAgICAgICAg
ICAgdmFyaWFibGVzWydHU1RfUExVR0lOX1NDQU5ORVInXSA9ICckeyVzfS9iaW4vZ3N0LXBsdWdp
bi1zY2FubmVyJyAlIG15ZGlyCisgICAgICAgICAgICAjIHBpcGV3aXJlIHNwYSBwbHVnaW5zIG1h
eSBiZSBuZWVkZWQgYnkgZ3N0cmVhbWVyLXBpcGV3aXJlCisgICAgICAgICAgICBpZiBvcy5wYXRo
LmlzZGlyKG9zLnBhdGguam9pbihzeXNsaWJfZGlyLCAncGlwZXdpcmUnKSk6CisgICAgICAgICAg
ICAgICAgdmFyaWFibGVzWydTUEFfUExVR0lOX0RJUiddID0gJyR7JXN9L3N5cy9saWIvcGlwZXdp
cmUnICUgbXlkaXIKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc3lzbGli
X2RpciwgJ2RyaScpKToKKyAgICAgICAgICAgIHZhcmlhYmxlc1snTElCR0xfRFJJVkVSU19QQVRI
J10gPSAnJHslc30vc3lzL2xpYi9kcmknICUgbXlkaXIKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rp
cihvcy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2dsdm5kL2VnbF92ZW5kb3IuZCcpKToKKyAgICAg
ICAgICAgIHZhcmlhYmxlc1snX19FR0xfVkVORE9SX0xJQlJBUllfRElSUyddID0gJyR7JXN9L3N5
cy9saWIvZ2x2bmQvZWdsX3ZlbmRvci5kJyAlIG15ZGlyCisgICAgICAgIGlmIG9zLnBhdGguaXNk
aXIob3MucGF0aC5qb2luKHNoYXJlX2RpcikpOgorICAgICAgICAgICAgYXNzZXJ0KHNlbGYuX3N5
c2xpYnMgPT0gJ2J1bmRsZS1hbGwnKQorICAgICAgICAgICAgdmFyaWFibGVzWydYREdfREFUQV9I
T01FJ10gPSAnJHslc30vc3lzL3NoYXJlJyAlIG15ZGlyCisgICAgICAgICAgICB2YXJpYWJsZXNb
J1hER19EQVRBX0RJUlMnXSA9ICckeyVzfS9zeXMvc2hhcmUnICUgbXlkaXIKKyAgICAgICAgaWYg
b3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc2hhcmVfZGlyLCAnZm9udHMnKSk6CisgICAgICAg
ICAgICB2YXJpYWJsZXNbJ0ZPTlRDT05GSUdfUEFUSCddID0gJyR7JXN9L3N5cy9zaGFyZS9mb250
cy9jb25maWcnICUgbXlkaXIKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4o
c3lzbGliX2RpciwgJ2d0aycpKToKKyAgICAgICAgICAgIHZhcmlhYmxlc1snR1RLX1BBVEgnXSA9
ICckeyVzfS9zeXMvbGliL2d0aycgJSBteWRpcgorICAgICAgICBpZiBiaW5hcnlfdG9fd3JhcCAh
PSAnanNjJzoKKyAgICAgICAgICAgIHZhcmlhYmxlc1snV0VCS0lUX0VYRUNfUEFUSCddID0gJyR7
JXN9L2JpbicgJSBteWRpcgorICAgICAgICAgICAgdmFyaWFibGVzWydXRUJLSVRfSU5KRUNURURf
QlVORExFX1BBVEgnXSA9ICckeyVzfS9saWInICUgbXlkaXIKICAgICAgICAgc2VsZi5fYnVuZGxl
ci5nZW5lcmF0ZV93cmFwcGVyX3NjcmlwdChpbnRlcnByZXRlciwgYmluYXJ5X3RvX3dyYXAsIHZh
cmlhYmxlcykKICAgICAgICAgc2VsZi5fd3JhcHBlcl9zY3JpcHRzLmFwcGVuZChiaW5hcnlfdG9f
d3JhcCkKIApAQCAtMjUyLDkgKzMxNiwxOCBAQCBjbGFzcyBCdW5kbGVDcmVhdG9yKG9iamVjdCk6
CiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2VsZi5fdG1wZGlyKToKICAgICAgICAgICAgIHNo
dXRpbC5ybXRyZWUoc2VsZi5fdG1wZGlyKQogCisgICAgZGVmIF90b3VjaF9yZXNldF9tdGltZShz
ZWxmKToKKyAgICAgICAgX2xvZy5pbmZvKCdVcGRhdGUgdGltZXN0YW1wcyAodG91Y2gpJykKKyAg
ICAgICAgbm93ID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkudGltZXN0YW1wKCkKKyAgICAgICAg
Zm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc2VsZi5fdG1wZGlyKToKKyAgICAgICAg
ICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIG9zLnV0aW1lKG9zLnBhdGgu
am9pbihyb290LCBuYW1lKSwgdGltZXM9KG5vdywgbm93KSkKKyAgICAgICAgICAgIGZvciBuYW1l
IGluIGRpcnM6CisgICAgICAgICAgICAgICAgb3MudXRpbWUob3MucGF0aC5qb2luKHJvb3QsIG5h
bWUpLCB0aW1lcz0obm93LCBub3cpKQorCiAgICAgZGVmIGNyZWF0ZShzZWxmKToKICAgICAgICAg
c2VsZi5fdG1wZGlyID0gc2VsZi5fY3JlYXRlX3RlbXBkaXIoc2VsZi5fYnVpbGRwYXRoKQotICAg
ICAgICBzZWxmLl9idW5kbGVyID0gQmluYXJ5QnVuZGxlcihzZWxmLl90bXBkaXIsIHNlbGYuX3No
b3VsZF9zdHJpcF9vYmplY3RzKQorICAgICAgICBzZWxmLl9idW5kbGVyID0gQmluYXJ5QnVuZGxl
cihzZWxmLl90bXBkaXIsIHNlbGYuX2J1aWxkcGF0aCkKIAogICAgICAgICBpZiBvcy5wYXRoLmlz
ZmlsZShzZWxmLl9idW5kbGVfZmlsZV9wYXRoKToKICAgICAgICAgICAgIF9sb2cuaW5mbygnUmVt
b3ZpbmcgcHJldmlvdXMgYnVuZGxlICVzJyAlIHNlbGYuX2J1bmRsZV9maWxlX3BhdGgpCkBAIC0y
NjQsNiArMzM3LDkgQEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICAgICAg
c2VsZi5fY3JlYXRlX2J1bmRsZShidW5kbGVfYmluYXJ5KQogICAgICAgICBzZWxmLl9nZW5lcmF0
ZV9yZWFkbWUoKQogCisgICAgICAgICMgUG90ZW50aWFsbHkgYXZvaWRzIGVycm9ycyByZWxhdGVk
IHRvIFpJUCBub3QgYWJsZSB0byBzdG9yZSBtdGltZXMgb2xkZXIgdGhhbiAxOTgwCisgICAgICAg
IHNlbGYuX3RvdWNoX3Jlc2V0X210aW1lKCkKKwogICAgICAgICBpZiBzZWxmLl9jb21wcmVzc2lv
bl90eXBlID09ICd6aXAnOgogICAgICAgICAgICAgYXJjaGl2ZXIgPSBaaXBBcmNoaXZlcihzZWxm
Ll9idW5kbGVfZmlsZV9wYXRoKQogICAgICAgICBlbGlmIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUg
PT0gJ3Rhci54eic6CkBAIC0yNzcsNyArMzUzLDYgQEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihvYmpl
Y3QpOgogICAgICAgICBfbG9nLmxvZyhMT0dfTUVTU0FHRSwgJ0J1bmRsZSBmaWxlIGNyZWF0ZWQg
YXQ6ICVzJyAlIHNlbGYuX2J1bmRsZV9maWxlX3BhdGgpCiAgICAgICAgIHJldHVybiBzZWxmLl9i
dW5kbGVfZmlsZV9wYXRoCiAKLQogICAgIGRlZiBfZ2V0X3dlYmtpdF9iaW5hcmllcyhzZWxmKToK
ICAgICAgICAgd2Via2l0X2JpbmFyaWVzID0gW10KICAgICAgICAgYmluX2RpciA9IG9zLnBhdGgu
am9pbihzZWxmLl9idWlsZHBhdGgsICdiaW4nKQpAQCAtMjkwLDE5ICszNjUsMTggQEAgY2xhc3Mg
QnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdD
b3VsZCBub3QgZmluZCByZXF1aXJlZCBXZWJLaXQgUHJvY2VzcyBiaW5hcmllcy4gQ2hlY2sgaWYg
eW91IGFyZSBwYXNzaW5nIHRoZSByaWdodCBwbGF0Zm9ybSB2YWx1ZS4nKQogICAgICAgICByZXR1
cm4gd2Via2l0X2JpbmFyaWVzCiAKLQotICAgIGRlZiBfZ2V0X3dlYmtpdF9idW5kbGVsaWIoc2Vs
Zik6CisgICAgZGVmIF9nZXRfd2Via2l0X2xpYihzZWxmLCBuYW1lKToKKyAgICAgICAgbGlia2V5
bmFtZSA9IG5hbWUubG93ZXIoKQogICAgICAgICBsaWJfZGlyID0gb3MucGF0aC5qb2luKHNlbGYu
X2J1aWxkcGF0aCwgJ2xpYicpCiAgICAgICAgIGJ1bmRsZV9saWIgPSBOb25lCiAgICAgICAgIGZv
ciBlbnRyeSBpbiBvcy5saXN0ZGlyKGxpYl9kaXIpOgotICAgICAgICAgICAgaWYgZW50cnkuZW5k
c3dpdGgoJy5zbycpIGFuZCAnaW5qZWN0ZWRidW5kbGUnIGluIGVudHJ5Lmxvd2VyKCkgYW5kICd0
ZXN0JyBub3QgaW4gZW50cnkubG93ZXIoKToKKyAgICAgICAgICAgIGlmIGVudHJ5LmVuZHN3aXRo
KCcuc28nKSBhbmQgbGlia2V5bmFtZSBpbiBlbnRyeS5sb3dlcigpIGFuZCAndGVzdCcgbm90IGlu
IGVudHJ5Lmxvd2VyKCk6CiAgICAgICAgICAgICAgICAgYXNzZXJ0KGJ1bmRsZV9saWIgPT0gTm9u
ZSkKICAgICAgICAgICAgICAgICBidW5kbGVfbGliID0gb3MucGF0aC5qb2luKGxpYl9kaXIsIGVu
dHJ5KQogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGFzc2VydChidW5kbGVfbGliKQog
ICAgICAgICByZXR1cm4gYnVuZGxlX2xpYgogCi0KICAgICBkZWYgX2NyZWF0ZV9hcmNoaXZlKHNl
bGYsIGFyY2hpdmVyKToKICAgICAgICAgX2xvZy5pbmZvKCdDcmVhdGUgYXJjaGl2ZScpCiAgICAg
ICAgIHdpdGggYXJjaGl2ZXI6CkBAIC0zMzEsNDIgKzQwNSwxNDAgQEAgY2xhc3MgQnVuZGxlQ3Jl
YXRvcihvYmplY3QpOgogICAgICAgICBfbG9nLmluZm8oJ0FkZCBkZXBlbmRlbmN5IG9uIHN5c3Rl
bSBwYWNrYWdlIFslc106ICVzJyAlKHBhY2thZ2UsIG9iamVjdCkpCiAgICAgICAgIHJldHVybiBw
YWNrYWdlCiAKLQotICAgIGRlZiBfZ2V0X2dpb19tb2R1bGVzKHNlbGYpOgotICAgICAgICBnaW9f
bW9kdWxlcyA9IFtdCi0gICAgICAgIHJldGNvZGUsIHN0ZG91dCwgc3RkZXJyID0gc2VsZi5fcnVu
X2NtZF9hbmRfZ2V0X291dHB1dChbJ3BrZy1jb25maWcnLCAnLS12YXJpYWJsZT1naW9tb2R1bGVk
aXInLCAnZ2lvLTIuMCddKQorICAgIGRlZiBfZ2V0X3BrZ19jb25maWdfdmFyKHNlbGYsIG1vZHVs
ZSwgdmFyX25hbWUsIGFzc2VydF92YWx1ZT1UcnVlKToKKyAgICAgICAgcmV0Y29kZSwgc3Rkb3V0
LCBzdGRlcnIgPSBzZWxmLl9ydW5fY21kX2FuZF9nZXRfb3V0cHV0KFsncGtnLWNvbmZpZycsICct
LXZhcmlhYmxlPSVzJyAlIHZhcl9uYW1lLCBtb2R1bGVdKQogICAgICAgICBpZiByZXRjb2RlICE9
IDA6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RoZSBwa2ctY29uZmlnIGNvbW1h
bmQgcmV0dXJuZWQgc3RhdHVzICVkJyAlIHJldGNvZGUpCi0gICAgICAgIGdpb19tb2R1bGVfZGly
ID0gc3Rkb3V0LnN0cmlwKCkKLSAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZ2lvX21vZHVs
ZV9kaXIpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgcGtnLWNvbmZpZyBl
bnRyeSBmb3IgZ2lvbW9kdWxlZGlyIGlzIG5vdCBhIGRpcmVjdG9yeTogJXMnICUgZ2lvX21vZHVs
ZV9kaXIpCi0gICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKGdpb19tb2R1bGVfZGlyKToK
LSAgICAgICAgICAgIGlmIGVudHJ5LmVuZHN3aXRoKCcuc28nKToKLSAgICAgICAgICAgICAgICBn
aW9fbW9kdWxlcy5hcHBlbmQob3MucGF0aC5qb2luKGdpb19tb2R1bGVfZGlyLCBlbnRyeSkpCi0g
ICAgICAgIHJldHVybiBnaW9fbW9kdWxlcworICAgICAgICB2YXJfdmFsdWUgPSBzdGRvdXQuc3Ry
aXAoKQorICAgICAgICBpZiBhc3NlcnRfdmFsdWU6CisgICAgICAgICAgICBpZiB2YXJfbmFtZS5l
bmRzd2l0aCgnZGlyJykgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKHZhcl92YWx1ZSk6CisgICAgICAg
ICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgcGtnLWNvbmZpZyBlbnRyeSBmb3IgJXMg
aXMgbm90IGEgZGlyZWN0b3J5OiAlcycgJSAodmFyX25hbWUsIHZhcl92YWx1ZSkpCisgICAgICAg
ICAgICBpZiBsZW4odmFyX3ZhbHVlKSA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRp
bWVFcnJvcignVGhlIHBrZy1jb25maWcgZW50cnkgZm9yICVzIGhhcyB6ZXJvIGxlbmdodCcgJSB2
YXJfdmFsdWUpCisgICAgICAgIHJldHVybiB2YXJfdmFsdWUKKworICAgIGRlZiBfbGlzdF9maWxl
c19kaXJlY3Rvcnkoc2VsZiwgZGlyZWN0b3J5LCBsaXN0X2luc2lkZV9zdWJkaXJzPUZhbHNlLCBm
aWx0ZXJfc3VmZml4PU5vbmUpOgorICAgICAgICBmb3VuZF9maWxlcyA9IFtdCisgICAgICAgIGZv
ciBlbnRyeSBpbiBvcy5saXN0ZGlyKGRpcmVjdG9yeSk6CisgICAgICAgICAgICBlbnRyeV9wYXRo
ID0gb3MucGF0aC5qb2luKGRpcmVjdG9yeSwgZW50cnkpCisgICAgICAgICAgICBpZiBvcy5wYXRo
LmlzZGlyKGVudHJ5X3BhdGgpOgorICAgICAgICAgICAgICAgIGlmIGxpc3RfaW5zaWRlX3N1YmRp
cnM6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2ZpbGVzLmV4dGVuZChzZWxmLl9saXN0X2Zp
bGVzX2RpcmVjdG9yeShlbnRyeV9wYXRoLCBsaXN0X2luc2lkZV9zdWJkaXJzLCBmaWx0ZXJfc3Vm
Zml4KSkKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2ZpbGUoZW50cnlfcGF0aCk6CisgICAg
ICAgICAgICAgICAgaWYgZmlsdGVyX3N1ZmZpeCBpcyBOb25lIG9yIGVudHJ5X3BhdGguZW5kc3dp
dGgoZmlsdGVyX3N1ZmZpeCk6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2ZpbGVzLmFwcGVu
ZChlbnRyeV9wYXRoKQorICAgICAgICBpZiBsZW4oZm91bmRfZmlsZXMpID09IDA6CisgICAgICAg
ICAgICByYWlzZSBSdW5UaW1lRXJyb3IoJ0NhbiBub3QgZmluZCBhbnkgbWF0Y2hpbmcgZmlsZSBh
dCBkaXJlY3RvcnkgJXMnICUgZGlyZWN0b3J5KQorICAgICAgICByZXR1cm4gZm91bmRfZmlsZXMK
IAotICAgIGRlZiBfZ2V0X2dzdHJlYW1lcl9tb2R1bGVzKHNlbGYpOgotICAgICAgICBnc3RyZWFt
ZXJfcGx1Z2lucyA9IFtdCi0gICAgICAgIHJldGNvZGUsIHN0ZG91dCwgc3RkZXJyID0gc2VsZi5f
cnVuX2NtZF9hbmRfZ2V0X291dHB1dChbJ3BrZy1jb25maWcnLCAnLS12YXJpYWJsZT1wbHVnaW5z
ZGlyJywgJ2dzdHJlYW1lci0xLjAnXSkKLSAgICAgICAgaWYgcmV0Y29kZSAhPSAwOgotICAgICAg
ICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgcGtnLWNvbmZpZyBjb21tYW5kIHJldHVybmVk
IHN0YXR1cyAlZCcgJSByZXRjb2RlKQotICAgICAgICBnc3RyYW1lcl9wbHVnaW5zX2RpciA9IHN0
ZG91dC5zdHJpcCgpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGdzdHJhbWVyX3BsdWdp
bnNfZGlyKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVGhlIHBrZy1jb25maWcg
ZW50cnkgZm9yIHBsdWdpbnNkaXIgaXMgbm90IGEgZGlyZWN0b3J5OiAlcycgJSBnc3RyYW1lcl9w
bHVnaW5zX2RpcikKLSAgICAgICAgZm9yIGVudHJ5IGluIG9zLmxpc3RkaXIoZ3N0cmFtZXJfcGx1
Z2luc19kaXIpOgotICAgICAgICAgICAgaWYgZW50cnkuZW5kc3dpdGgoJy5zbycpOgotICAgICAg
ICAgICAgICAgIGdzdHJlYW1lcl9wbHVnaW5zLmFwcGVuZChvcy5wYXRoLmpvaW4oZ3N0cmFtZXJf
cGx1Z2luc19kaXIsIGVudHJ5KSkKLSAgICAgICAgcmV0dXJuIGdzdHJlYW1lcl9wbHVnaW5zCisg
ICAgZGVmIF9nZXRfZ2lvX21vZHVsZXMoc2VsZik6CisgICAgICAgIGdpb19tb2R1bGVfZGlyID0g
c2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdnaW8tMi4wJywgJ2dpb21vZHVsZWRpcicpCisgICAg
ICAgIHJldHVybiBzZWxmLl9saXN0X2ZpbGVzX2RpcmVjdG9yeShnaW9fbW9kdWxlX2RpciwgZmls
dGVyX3N1ZmZpeD0nLnNvJykKIAorICAgIGRlZiBfZ2V0X2d0a19tb2R1bGVzKHNlbGYsIHN1YmRp
cik6CisgICAgICAgIGd0a19saWJfZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdndGsr
LTMuMCcsICdsaWJkaXInKQorICAgICAgICBndGtfYmluYXJ5X3ZlcnNpb24gPSBzZWxmLl9nZXRf
cGtnX2NvbmZpZ192YXIoJ2d0aystMy4wJywgJ2d0a19iaW5hcnlfdmVyc2lvbicpCisgICAgICAg
IGd0a19tb2R1bGVfZGlyID0gb3MucGF0aC5qb2luKGd0a19saWJfZGlyLCAnZ3RrLTMuMCcsIGd0
a19iaW5hcnlfdmVyc2lvbiwgc3ViZGlyKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihn
dGtfbW9kdWxlX2Rpcik6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0NhbiBub3Qg
ZmluZCB0aGUgdGhlIGd0ayBtb2R1bGUgZGlyICVzJyAlIGd0a19tb2R1bGVfZGlyKQorICAgICAg
ICByZXR1cm4gc2VsZi5fbGlzdF9maWxlc19kaXJlY3RvcnkoZ3RrX21vZHVsZV9kaXIsIGZpbHRl
cl9zdWZmaXg9Jy5zbycpCisKKyAgICBkZWYgX2dldF9nc3RyZWFtZXJfbW9kdWxlcyhzZWxmKToK
KyAgICAgICAgZ3N0cmVhbWVyX3BsdWdpbnNfZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFy
KCdnc3RyZWFtZXItMS4wJywgJ3BsdWdpbnNkaXInKQorICAgICAgICByZXR1cm4gc2VsZi5fbGlz
dF9maWxlc19kaXJlY3RvcnkoZ3N0cmVhbWVyX3BsdWdpbnNfZGlyLCBmaWx0ZXJfc3VmZml4PScu
c28nKQorCisgICAgZGVmIF9nZXRfZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVyKHNlbGYpOgorICAg
ICAgICBkZWYgcGx1Z2luX3NjYW5uZXJfZm91bmQocGx1Z2luX3NjYW5uZXJfcGF0aCk6CisgICAg
ICAgICAgICByZXR1cm4gKG9zLnBhdGguaXNmaWxlKHBsdWdpbl9zY2FubmVyX3BhdGgpIGFuZCBv
cy5hY2Nlc3MocGx1Z2luX3NjYW5uZXJfcGF0aCwgb3MuWF9PSykpCisKKyAgICAgICAgZ3N0cmVh
bWVyX3BsdWdpbl9zY2FubmVyX2RpciA9IGdpb19tb2R1bGVfZGlyID0gc2VsZi5fZ2V0X3BrZ19j
b25maWdfdmFyKCdnc3RyZWFtZXItMS4wJywgJ3BsdWdpbnNjYW5uZXJkaXInLCBhc3NlcnRfdmFs
dWU9RmFsc2UpCisgICAgICAgIGdzdHJlYW1lcl9wbHVnaW5fc2Nhbm5lciA9IG9zLnBhdGguam9p
bihnc3RyZWFtZXJfcGx1Z2luX3NjYW5uZXJfZGlyLCAnZ3N0LXBsdWdpbi1zY2FubmVyJykKKyAg
ICAgICAgaWYgbm90IHBsdWdpbl9zY2FubmVyX2ZvdW5kKGdzdHJlYW1lcl9wbHVnaW5fc2Nhbm5l
cik6CisgICAgICAgICAgICAjIHBsdWdpbnNjYW5uZXJkaXIgcGtnLWNvbmZpZyB2YXJpYWJsZSBp
cyBhdmFpbGFibGUgb25seSBvbiByZWNlbnQgdmVyc2lvbnMgb2YgZ3N0CisgICAgICAgICAgICAj
IGdpdmUgaXQgYSBzZWNvbmQgY2hhbmNlIHdpdGggc29tZSBrbm93biBkaXJlY3RvcmllcyBvbiBk
ZWJpYW4vdWJ1bnR1IGFuZCBmZWRvcmEvY2VudG9zCisgICAgICAgICAgICBsaWJfZGlyID0gc2Vs
Zi5fZ2V0X3BrZ19jb25maWdfdmFyKCdnc3RyZWFtZXItMS4wJywgJ2xpYmRpcicpCisgICAgICAg
ICAgICBwbHVnaW5zX2RpciA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3ZhcignZ3N0cmVhbWVyLTEu
MCcsICdwbHVnaW5zZGlyJykKKyAgICAgICAgICAgIGZvciBnc3RyZWFtZXJfcGx1Z2luX3NjYW5u
ZXJfZGlyIGluIFsgb3MucGF0aC5qb2luKGxpYl9kaXIsICdnc3RyZWFtZXIxLjAvZ3N0cmVhbWVy
LTEuMCcpLCBwbHVnaW5zX2RpciwgJy91c3IvbGliZXhlYy9nc3RyZWFtZXItMS4wJ106CisgICAg
ICAgICAgICAgICAgZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVyID0gb3MucGF0aC5qb2luKGdzdHJl
YW1lcl9wbHVnaW5fc2Nhbm5lcl9kaXIsICdnc3QtcGx1Z2luLXNjYW5uZXInKQorICAgICAgICAg
ICAgICAgIGlmIHBsdWdpbl9zY2FubmVyX2ZvdW5kKGdzdHJlYW1lcl9wbHVnaW5fc2Nhbm5lcik6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBwbHVnaW5fc2Nhbm5l
cl9mb3VuZChnc3RyZWFtZXJfcGx1Z2luX3NjYW5uZXIpOgorICAgICAgICAgICAgcmFpc2UgUnVu
dGltZUVycm9yKCdDb3VsZCBub3QgZmluZCBnc3QtcGx1Z2luLXNjYW5uZXIgYmluYXJ5IGF0IHBh
dGggIiVzIi4nICUgZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVyKQorICAgICAgICByZXR1cm4gZ3N0
cmVhbWVyX3BsdWdpbl9zY2FubmVyCisKKyAgICBkZWYgX2dldF9saWJjX2xpYnJhcmllcyhzZWxm
KToKKyAgICAgICAgbGliY19saWJyYXJ5X25hbWVzID0gWyAnbGliYW5sJywgJ2xpYkJyb2tlbkxv
Y2FsZScsICdsaWJjJywgJ2xpYmNyeXB0JywgJ2xpYmRsJywgJ2xpYmdjY19zJywgJ2xpYm0nLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWJtdmVjJywgJ2xpYm5zbCcsICdsaWJw
dGhyZWFkJywgJ2xpYnJlc29sdicsICdsaWJydCcsICdsaWJ0aHJlYWRfZGInLCAnbGlidXRpbCdd
CisgICAgICAgIGxpYmNfbGlicmFyaWVzID0gW10KKyAgICAgICAgbGliX2RpciA9IHNlbGYuX2dl
dF9wa2dfY29uZmlnX3ZhcignZHJpJywgJ2xpYmRpcicpCisgICAgICAgIGZvciBlbnRyeSBpbiBv
cy5saXN0ZGlyKGxpYl9kaXIpOgorICAgICAgICAgICAgaWYgYW55KGVudHJ5LnN0YXJ0c3dpdGgo
bCsnLnNvLicpIGZvciBsIGluIGxpYmNfbGlicmFyeV9uYW1lcykgb3IgKGVudHJ5LnN0YXJ0c3dp
dGgoJ2xpYm5zc18nKSBhbmQgJy5zby4nIGluIGVudHJ5KToKKyAgICAgICAgICAgICAgICBsaWJj
X2xpYnJhcmllcy5hcHBlbmQob3MucGF0aC5qb2luKGxpYl9kaXIsIGVudHJ5KSkKKyAgICAgICAg
Zm9yIGxpYmNfbGlicmFyeV9wcmVmaXggaW4gbGliY19saWJyYXJ5X25hbWVzOgorICAgICAgICAg
ICAgaWYgbm90IGFueShvcy5wYXRoLmJhc2VuYW1lKGwpLnN0YXJ0c3dpdGgobGliY19saWJyYXJ5
X3ByZWZpeCsnLnNvLicpIGZvciBsIGluIGxpYmNfbGlicmFyaWVzKToKKyAgICAgICAgICAgICAg
ICByYWlzZSBSdW50aW1lRXJyb3IoJ1VuYWJsZSB0byBmaW5kIGxpYmMgbGlicmFyeSAlcycgJSBs
aWJjX2xpYnJhcnlfcHJlZml4KQorICAgICAgICBpZiBub3QgYW55KG9zLnBhdGguYmFzZW5hbWUo
bCkuc3RhcnRzd2l0aCgnbGlibnNzXycpIGZvciBsIGluIGxpYmNfbGlicmFyaWVzKToKKyAgICAg
ICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVW5hYmxlIHRvIGZpbmQgbGliYyBsaWJuc3NfIGxp
YnJhcmllcycpCisgICAgICAgIHJldHVybiBsaWJjX2xpYnJhcmllcworCisgICAgZGVmIF9nZXRf
bWVzYV9saWJyYXJpZXMoc2VsZik6CisgICAgICAgIG1lc2FfbGlicmFyeV9uYW1lcyA9IFsnbGli
Z2xhcGknLCAnbGlieGNiLWdseCcsICdsaWJHTFgnLCAnbGliRUdMJywgJ2xpYkdMJywgJ2xpYkdM
RVN2MicsICdsaWJFR0xfbWVzYScsICdsaWJHTFhfbWVzYSddCisgICAgICAgIG1lc2FfbGlicmFy
aWVzID0gW10KKyAgICAgICAgbGliX2Rpcl9kcmkgPSBzZWxmLl9nZXRfcGtnX2NvbmZpZ192YXIo
J2RyaScsICdsaWJkaXInKQorICAgICAgICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIGZsYXRwYWsg
U0RLIHNoaXBzIHRoZSBNZXNhIGxpYnJhcmllcyBpbnRvIGEgbm9uLXN0YW5kYXJkIHBhdGguCisg
ICAgICAgIGNhbmRpZGF0ZV9saWJfZGlycyA9IFsgbGliX2Rpcl9kcmksIG9zLnBhdGguam9pbihs
aWJfZGlyX2RyaSwgJ0dML2RlZmF1bHQvbGliJykgXQorICAgICAgICBmb3IgbGliX2RpciBpbiBj
YW5kaWRhdGVfbGliX2RpcnM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGxpYl9kaXIp
OgorICAgICAgICAgICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKGxpYl9kaXIpOgorICAg
ICAgICAgICAgICAgICAgICBpZiBhbnkoZW50cnkuc3RhcnRzd2l0aChsKycuc28uJykgZm9yIGwg
aW4gbWVzYV9saWJyYXJ5X25hbWVzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc2FfbGli
cmFyaWVzLmFwcGVuZChvcy5wYXRoLmpvaW4obGliX2RpciwgZW50cnkpKQorICAgICAgICBmb3Ig
bWVzYV9saWJyYXJ5X3ByZWZpeCBpbiBtZXNhX2xpYnJhcnlfbmFtZXM6CisgICAgICAgICAgICBp
ZiBub3QgYW55KG9zLnBhdGguYmFzZW5hbWUobCkuc3RhcnRzd2l0aChtZXNhX2xpYnJhcnlfcHJl
Zml4Kycuc28uJykgZm9yIGwgaW4gbWVzYV9saWJyYXJpZXMpOgorICAgICAgICAgICAgICAgIHJh
aXNlIFJ1bnRpbWVFcnJvcignVW5hYmxlIHRvIGZpbmQgbWVzYSBsaWJyYXJ5ICVzJyAlIG1lc2Ff
bGlicmFyeV9wcmVmaXgpCisgICAgICAgIHJldHVybiBtZXNhX2xpYnJhcmllcworCisgICAgZGVm
IF9nZXRfbWVzYV9kcmlfZHJpdmVycyhzZWxmKToKKyAgICAgICAgZHJpZHJpdmVyX2RpciA9IHNl
bGYuX2dldF9wa2dfY29uZmlnX3ZhcignZHJpJywgJ2RyaWRyaXZlcmRpcicpCisgICAgICAgIHJl
dHVybiBzZWxmLl9saXN0X2ZpbGVzX2RpcmVjdG9yeShkcmlkcml2ZXJfZGlyLCBmaWx0ZXJfc3Vm
Zml4PScuc28nKQorCisgICAgZGVmIF9nZXRfZ2RrX3BpeGJ1Zl9sb2FkZXJzKHNlbGYpOgorICAg
ICAgICBsb2FkZXJzX2RpciA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3ZhcignZ2RrLXBpeGJ1Zi0y
LjAnLCAnZ2RrX3BpeGJ1Zl9tb2R1bGVkaXInKQorICAgICAgICByZXR1cm4gc2VsZi5fbGlzdF9m
aWxlc19kaXJlY3RvcnkobG9hZGVyc19kaXIsIGZpbHRlcl9zdWZmaXg9Jy5zbycpCisKKyAgICBk
ZWYgX2dldF9nZGtfcXVlcnlfbG9hZGVyc19iaW5hcnkoc2VsZik6CisgICAgICAgIGdka19waXhi
dWZfcXVlcnlfbG9hZGVyX3ZhbHVlID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdnZGstcGl4
YnVmLTIuMCcsICdnZGtfcGl4YnVmX3F1ZXJ5X2xvYWRlcnMnKQorICAgICAgICBnZGtfcGl4YnVm
X2xpYmRpciA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3ZhcignZ2RrLXBpeGJ1Zi0yLjAnLCAnbGli
ZGlyJykKKyAgICAgICAgIyBTb21lIGRpc3Ryb3MgKGxpa2UgRGViaWFuKSBkb24ndCBzaGlwIHRo
ZSBiaW5hcnkgb24gdGhlIGRlY2xhcmVkIHBhdGggb24gcGtnLWNvbmZpZywgYnV0IGluc2lkZSAk
bGliZGlyL2dkay1waXhidWYtMi4wCisgICAgICAgIGZvciBnZGtfcGl4YnVmX2JpbmFyeSAgaW4g
WyBnZGtfcGl4YnVmX3F1ZXJ5X2xvYWRlcl92YWx1ZSwgb3MucGF0aC5qb2luKGdka19waXhidWZf
bGliZGlyLCAnZ2RrLXBpeGJ1Zi0yLjAvZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzJykgXToKKyAg
ICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGdka19waXhidWZfYmluYXJ5KSBhbmQgb3MuYWNj
ZXNzKGdka19waXhidWZfYmluYXJ5LCBvcy5YX09LKToKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2RrX3BpeGJ1Zl9iaW5hcnkKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdVbmFibGUgdG8g
ZmluZCBhIHZhbGlkIHBhdGggdG8gZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIGJpbmFyeScpCisK
KyAgICBkZWYgX2dldF9ndGtfcXVlcnlfaW1tb2R1bGVzX2JpbmFyeShzZWxmKToKKyAgICAgICAg
Z3RrX2xpYmRpciA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3ZhcignZ3RrKy0zLjAnLCAnbGliZGly
JykKKyAgICAgICAgZm9yIGd0a19kaXIgaW4gWyAnL3Vzci9iaW4nLCBndGtfbGliZGlyLCBvcy5w
YXRoLmpvaW4oZ3RrX2xpYmRpciwgJ2xpYmd0ay0zLTAnKSwgb3MucGF0aC5qb2luKGd0a19saWJk
aXIsICdndGstMy4wJykgXToKKyAgICAgICAgICAgIGd0a19pbW1vZHVsZXNfYmluYXJ5ID0gb3Mu
cGF0aC5qb2luKGd0a19kaXIsICdndGstcXVlcnktaW1tb2R1bGVzLTMuMCcpCisgICAgICAgICAg
ICBpZiBvcy5wYXRoLmlzZmlsZShndGtfaW1tb2R1bGVzX2JpbmFyeSkgYW5kIG9zLmFjY2Vzcyhn
dGtfaW1tb2R1bGVzX2JpbmFyeSwgb3MuWF9PSyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGd0
a19pbW1vZHVsZXNfYmluYXJ5CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVW5hYmxlIHRv
IGZpbmQgYSB2YWxpZCBwYXRoIHRvIGdkay1waXhidWYtcXVlcnktbG9hZGVycyBiaW5hcnknKQor
CisgICAgZGVmIF9nZXRfcGlwZXdpcmVfc3BhX2Jhc2VkaXJfYW5kX3BsdWdpbnMoc2VsZik6Cisg
ICAgICAgIHNwYV9wbHVnaW5fZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdsaWJzcGEt
MC4yJywgJ3BsdWdpbmRpcicsIGFzc2VydF92YWx1ZT1GYWxzZSkKKyAgICAgICAgIyBDdXJyZW50
bHkgdGhlIGZsYXRwYWsgU0RLIGRvZXNuJ3QgZGVjbGFyZSBwbHVnaW5kaXIgKG5vdCBzdXJlIHdo
eSkuLiBmYWxsYmFjayB0byBidWlsZCBpdCBmcm9tIGxpYmRpcgorICAgICAgICBpZiBub3Qgb3Mu
cGF0aC5pc2RpcihzcGFfcGx1Z2luX2Rpcik6CisgICAgICAgICAgICBzcGFfcGx1Z2luX2RpciA9
IHNlbGYuX2dldF9wa2dfY29uZmlnX3ZhcignbGlic3BhLTAuMicsICdsaWJkaXInKQorICAgICAg
ICAgICAgc3BhX3BsdWdpbl9kaXIgPSBvcy5wYXRoLmpvaW4oc3BhX3BsdWdpbl9kaXIsICdzcGEt
MC4yJykKKyAgICAgICAgcGlwZXdpcmVfc3BhX3BsdWdpbnMgPSBzZWxmLl9saXN0X2ZpbGVzX2Rp
cmVjdG9yeShzcGFfcGx1Z2luX2RpciwgbGlzdF9pbnNpZGVfc3ViZGlycz1UcnVlLCBmaWx0ZXJf
c3VmZml4PScuc28nKQorICAgICAgICByZXR1cm4gc3BhX3BsdWdpbl9kaXIsIHBpcGV3aXJlX3Nw
YV9wbHVnaW5zCiAKICAgICBkZWYgX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2RlcChzZWxmLCBvYmpl
Y3QsIG9iamVjdF90eXBlKToKICAgICAgICAgcHJvdmlkZWRfYnlfc3lzdGVtX3BhY2thZ2UgPSBO
b25lCiAgICAgICAgIGlmIHNlbGYuX3N5c2xpYnMgPT0gJ2J1bmRsZS1hbGwnOgotICAgICAgICAg
ICAgc2VsZi5fYnVuZGxlci5jb3B5X2FuZF9yZW1vdmVfcnBhdGgob2JqZWN0LCB0eXBlPW9iamVj
dF90eXBlKQorICAgICAgICAgICAgc2VsZi5fYnVuZGxlci5jb3B5X2FuZF9tYXliZV9zdHJpcF9w
YXRjaGVsZihvYmplY3QsIHR5cGU9b2JqZWN0X3R5cGUsIHN0cmlwPXNlbGYuX3Nob3VsZF9zdHJp
cF9vYmplY3RzLCBwYXRjaGVsZl9yZW1vdmVycGF0aD1UcnVlLCBwYXRjaGVsZl9ub2RlZmF1bHRs
aWI9VHJ1ZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHByb3ZpZGVkX2J5X3N5c3RlbV9w
YWNrYWdlID0gc2VsZi5fZ2V0X3N5c3RlbV9wYWNrYWdlX25hbWUob2JqZWN0KQogICAgICAgICAg
ICAgaWYgbm90IHByb3ZpZGVkX2J5X3N5c3RlbV9wYWNrYWdlOgotICAgICAgICAgICAgICAgIHNl
bGYuX2J1bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRoKG9iamVjdCwgdHlwZT1vYmplY3RfdHlw
ZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9idW5kbGVyLmNvcHlfYW5kX21heWJlX3N0cmlwX3Bh
dGNoZWxmKG9iamVjdCwgdHlwZT1vYmplY3RfdHlwZSwgc3RyaXA9c2VsZi5fc2hvdWxkX3N0cmlw
X29iamVjdHMsIHBhdGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBhdGNoZWxmX25vZGVmYXVsdGxp
Yj1GYWxzZSkKICAgICAgICAgcmV0dXJuIHByb3ZpZGVkX2J5X3N5c3RlbV9wYWNrYWdlCiAKICAg
ICBkZWYgX2Vuc3VyZV93cGVfYmFja2VuZF9zeW1saW5rKHNlbGYpOgpAQCAtMzgyLDYgKzU1NCw4
NCBAQCBjbGFzcyBCdW5kbGVDcmVhdG9yKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgIG9z
LnN5bWxpbmsoZW50cnksIHdwZV9iYWNrZW5kX3NvbmFtZSkKICAgICAgICAgICAgICAgICBvcy5j
aGRpcihwcmV2aW91c19kaXIpCiAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90
IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihidW5kbGVfbGliX2Rpciwgd3BlX2JhY2tlbmRf
c29uYW1lKSk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1VuYWJsZSB0byBjcmVh
dGUgbGliV1BFQmFja2VuZC1mZG8tMS4wLnNvIHN5bWxpbmsnKQorCisgICAgZGVmIF9kbG9wZW53
cmFwX21ha2Uoc2VsZiwgYWN0aW9uPU5vbmUpOgorICAgICAgICBkbG9wZW53cmFwX3BhdGggPSBv
cy5wYXRoLmpvaW4oc2VsZi5fZGxvcGVud3JhcF9kaXIsICdkbG9wZW53cmFwLnNvJykKKyAgICAg
ICAgcHJldmlvdXNfY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5fZGxv
cGVud3JhcF9kaXIpCisgICAgICAgIGlmIGFjdGlvbiA9PSAnYnVpbGQnOgorICAgICAgICAgICAg
cmV0Y29kZSwgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLl9ydW5fY21kX2FuZF9nZXRfb3V0cHV0KFsn
bWFrZSddKQorICAgICAgICAgICAgaWYgKHJldGNvZGUgIT0gMCkgb3IgKG5vdCBvcy5wYXRoLmlz
ZmlsZShkbG9wZW53cmFwX3BhdGgpKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJy
b3IoJ0Vycm9yIGJ1aWxkaW5nIGRsb3BlbndyYXAuc286IFRoZSBtYWtlIGNvbW1hbmQgcmV0dXJu
ZWQgJWQgc3RhdHVzIHdpdGggdGhpcyBvdXRwdXQ6ICVzICVzJyAlIChyZXRjb2RlLCBzdGRvdXQs
IHN0ZGVycikpCisgICAgICAgIGVsaWYgYWN0aW9uID09ICdjbGVhbic6CisgICAgICAgICAgICBy
ZXRjb2RlLCBzdGRvdXQsIHN0ZGVyciA9IHNlbGYuX3J1bl9jbWRfYW5kX2dldF9vdXRwdXQoWydt
YWtlJywgJ2NsZWFuJ10pCisgICAgICAgICAgICBpZiAocmV0Y29kZSAhPSAwKSBvciBvcy5wYXRo
LmlzZmlsZShkbG9wZW53cmFwX3BhdGgpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVF
cnJvcignRXJyb3IgY2xlYW5pbmcgZGxvcGVud3JhcC5zbzogVGhlIG1ha2UgY29tbWFuZCByZXR1
cm5lZCAlZCBzdGF0dXMgd2l0aCB0aGlzIG91dHB1dDogJXMgJXMnICUgKHJldGNvZGUsIHN0ZG91
dCwgc3RkZXJyKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IoJ1Vua25vd24gYWN0aW9uICVzJyAlIGFjdGlvbikKKyAgICAgICAgb3MuY2hkaXIo
cHJldmlvdXNfY3dkKQorICAgICAgICByZXR1cm4gZGxvcGVud3JhcF9wYXRoCisKKyAgICBkZWYg
X2Rpc2NvdmVyX2VnbF9tZXNhX2NvbmZpZ19maWxlKHNlbGYpOgorICAgICAgICBlZ2xfbGliZGly
ID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdlZ2wnLCAnbGliZGlyJykKKyAgICAgICAgIyBO
b3Qga25vd24gd2F5IG9mIGdldHRpbmcgdGhlIGRpcmVjdG9yeSBkeW5hbWljYWxseSwgYXNzdW1l
IGl0IGlzIHRoZXJlLgorICAgICAgICBpY2RfZWdsX21lc2FfY29uZmlnX2NhbmRpZGF0ZXMgPSBb
Jy91c3Ivc2hhcmUvZ2x2bmQvZWdsX3ZlbmRvci5kLzUwX21lc2EuanNvbicsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGVnbF9saWJkaXIs
ICdHTC9nbHZuZC9lZ2xfdmVuZG9yLmQvNTBfbWVzYS5qc29uJyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGVnbF9saWJkaXIsICdnbHZu
ZC9lZ2xfdmVuZG9yLmQvNTBfbWVzYS5qc29uJyldCisgICAgICAgIGZvciBpY2RfZWdsX21lc2Ff
Y29uZmlnX2NhbmRpZGF0ZSBpbiBpY2RfZWdsX21lc2FfY29uZmlnX2NhbmRpZGF0ZXM6CisgICAg
ICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShpY2RfZWdsX21lc2FfY29uZmlnX2NhbmRpZGF0ZSk6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGljZF9lZ2xfbWVzYV9jb25maWdfY2FuZGlkYXRlCisg
ICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ291bGQgbm90IGZpbmQgbWVzYSBFR0wgSUNEIGNv
bmZpZycpCisKKyAgICBkZWYgX2dldF9tZXNhX2VnbF9pY2RfZHJpdmVyX3BhdGgoc2VsZiwgaWNk
X2NvbmZpZyk6CisgICAgICAgIHdpdGggb3BlbihpY2RfY29uZmlnLCAncicpIGFzIGY6CisgICAg
ICAgICAgICBqc29uX2RhdGEgPSBqc29uLmxvYWQoZikKKyAgICAgICAgZWdsX2ljZF9saWJyYXJ5
X25hbWUgPSBqc29uX2RhdGFbJ0lDRCddWydsaWJyYXJ5X3BhdGgnXQorICAgICAgICBpZiBvcy5w
YXRoLmlzYWJzKGVnbF9pY2RfbGlicmFyeV9uYW1lKToKKyAgICAgICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IoJ1BhdGggcmV3cml0dGluZyBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZCB0
byBoYW5kbGUgSUNEIGNvbmZpZyBmaWxlcyB3aXRoIGFic3BhdGgnKQorICAgICAgICAjIFNvbWUg
dmVyc2lvbnMgb2YgdGhlIGZsYXRwYWsgU0RLIHNoaXBzIHRoZSBFR0wgSUNEIGxpYnJhcnkgaW50
byBhIG5vbi1zdGFuZGFyZCBwYXRoLgorICAgICAgICBlZ2xfbGliZGlyID0gc2VsZi5fZ2V0X3Br
Z19jb25maWdfdmFyKCdlZ2wnLCAnbGliZGlyJykKKyAgICAgICAgZWdsX2ljZF9saWJyYXJ5X2Zv
dW5kID0gRmFsc2UKKyAgICAgICAgZWdsX2ljZF9saWJyYXJ5X3BhdGhzID0gW29zLnBhdGguam9p
bihlZ2xfbGliZGlyLCBlZ2xfaWNkX2xpYnJhcnlfbmFtZSksIG9zLnBhdGguam9pbihlZ2xfbGli
ZGlyLCAnR0wvZGVmYXVsdC9saWInLCBlZ2xfaWNkX2xpYnJhcnlfbmFtZSldCisgICAgICAgIGZv
ciBlZ2xfaWNkX2xpYnJhcnlfcGF0aCBpbiBlZ2xfaWNkX2xpYnJhcnlfcGF0aHM6CisgICAgICAg
ICAgICBpZiBvcy5wYXRoLmlzZmlsZShlZ2xfaWNkX2xpYnJhcnlfcGF0aCk6CisgICAgICAgICAg
ICAgICAgZWdsX2ljZF9saWJyYXJ5X2ZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFr
CisgICAgICAgIGlmIG5vdCBlZ2xfaWNkX2xpYnJhcnlfZm91bmQ6CisgICAgICAgICAgICByYWlz
ZSBSdW50aW1lRXJyb3IoJ1VuYWJsZSB0byBmaW5kIHRoZSBFR0wgSUNEIGxpYnJhcnkgJXMnICUg
ZWdsX2ljZF9saWJyYXJ5X3BhdGgpCisgICAgICAgIHJldHVybiBlZ2xfaWNkX2xpYnJhcnlfcGF0
aAorCisgICAgZGVmIF9nZXRfdG90YWxfc2l6ZV9kaXIoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAg
ICAgc2l6ZSA9IDAKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZGly
ZWN0b3J5KToKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAg
IGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmaWxlKQorICAgICAgICAgICAgICAgIGlm
IG9zLnBhdGguaXNmaWxlKGZpbGVfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHNpemUgKz0g
b3MucGF0aC5nZXRzaXplKGZpbGVfcGF0aCkKKyAgICAgICAgcmV0dXJuIHNpemUKKworICAgIGRl
ZiBfZ2VuZXJhdGVfZm9udF9jb25mKHNlbGYsIGRhdGFfZGlyZWN0b3J5KToKKyAgICAgICAgZm9u
dF9jb25mX3BhdGggPSBvcy5wYXRoLmpvaW4oZGF0YV9kaXJlY3RvcnksICdmb250cy5jb25mJykK
KyAgICAgICAgd2l0aCBvcGVuKGZvbnRfY29uZl9wYXRoLCAndycpIGFzIGZvbnRfY29uZl9oYW5k
bGU6CisgICAgICAgICAgICBmb250X2NvbmZfaGFuZGxlLndyaXRlKEZPTlRfQ09ORl9GSUxFKQor
CisgICAgZGVmIF9nZW5lcmF0ZV90bHNfY2FmaWxlKHNlbGYsIGRhdGFfZGlyZWN0b3J5KToKKyAg
ICAgICAgY2FmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oZGF0YV9kaXJlY3RvcnksICdidW5kbGUt
Y2EtY2VydGlmaWNhdGVzLnBlbScpCisgICAgICAgIHJldGNvZGUsIHN0ZG91dCwgc3RkZXJyID0g
c2VsZi5fcnVuX2NtZF9hbmRfZ2V0X291dHB1dChbJ3RydXN0JywgJ2V4dHJhY3QnLCAnLS1mb3Jt
YXQ9cGVtLWJ1bmRsZScsIGNhZmlsZV9wYXRoXSkKKyAgICAgICAgIyB0cnVzdCBmYWlscyBpbnNp
ZGUgZmxhdHBhayBkdWUgdG8gaHR0cHM6Ly9naXRsYWIuY29tL2ZyZWVkZXNrdG9wLXNkay9mcmVl
ZGVza3RvcC1zZGsvLS9pc3N1ZXMvOTA0CisgICAgICAgICMgZmFsbC1iYWNrIHRvIHRyeWluZyB0
byBtYW51YWxseSBjb3B5IHRoZSBidW5kbGUKKyAgICAgICAgaWYgKHJldGNvZGUgIT0gMCkgb3Ig
KG5vdCBvcy5wYXRoLmlzZmlsZShjYWZpbGVfcGF0aCkpIG9yIChvcy5wYXRoLmdldHNpemUoY2Fm
aWxlX3BhdGgpIDwgMTAwKToKKyAgICAgICAgICAgIF9sb2cud2FybmluZygnRmFpbGVkIHRvIGdl
dCBzeXN0ZW0gQ0EgYnVuZGxlIHdpdGggdGhlIHRydXN0IGNvbW1hbmQuIFRyeWluZyB0byBmYWxs
LWJhY2sgdG8gbWFudWFsIGNvcHkuJykKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNh
ZmlsZV9wYXRoKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoY2FmaWxlX3BhdGgpCisgICAg
ICAgICAgICBmb3IgY2FuZGlkYXRlX2NhZmlsZSBpbiBbJy9ldGMvc3NsL2NlcnRzL2NhLWNlcnRp
ZmljYXRlcy5jcnQnLCAnL2V0Yy9zc2wvY2VydC5wZW0nLCAnL2V0Yy9wa2kvY2EtdHJ1c3QvZXh0
cmFjdGVkL3BlbS90bHMtY2EtYnVuZGxlLnBlbSddOgorICAgICAgICAgICAgICAgIGlmIG9zLnBh
dGguaXNmaWxlKGNhbmRpZGF0ZV9jYWZpbGUpOgorICAgICAgICAgICAgICAgICAgICBzaHV0aWwu
Y29weShjYW5kaWRhdGVfY2FmaWxlLCBjYWZpbGVfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWsKKyAgICAgICAgaWYgKG5vdCBvcy5wYXRoLmlzZmlsZShjYWZpbGVfcGF0aCkpIG9yIChv
cy5wYXRoLmdldHNpemUoY2FmaWxlX3BhdGgpIDwgMTAwKToKKyAgICAgICAgICAgIHJhaXNlIFJ1
bnRpbWVFcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIG9yIGNvcHkgdGhlIHN5c3RlbSBUTFMgQ0FG
aWxlIHdpdGggdGhlIGNlcnRpZmljYXRlcy4nKQogCiAgICAgZGVmIF9jcmVhdGVfYnVuZGxlKHNl
bGYsIGJ1bmRsZV9iaW5hcnkpOgogICAgICAgICBtYWluX2JpbmFyeV9wYXRoID0gb3MucGF0aC5q
b2luKHNlbGYuX2J1aWxkcGF0aCwgJ2JpbicsIGJ1bmRsZV9iaW5hcnkpCkBAIC0zODksNDggKzYz
OSwxMDYgQEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcignQ2Fubm90IGZpbmQgYmluYXJ5IGZvciAlcyBhdCAlcycgJSAoYnVuZGxlX2Jp
bmFyeSwgbWFpbl9iaW5hcnlfcGF0aCkgKQogCiAgICAgICAgIGNvcGllZF9pbnRlcnByZXRlciA9
IE5vbmUKKyAgICAgICAgbmVlZHNfdG9fY3JlYXRlX3dwZV9iYWNrZW5kX3N5bWxpbmsgPSBGYWxz
ZQogICAgICAgICBnaW9fbW9kdWxlcyA9IFtdCisgICAgICAgIGd0a19wcmludF9tb2R1bGVzID0g
W10KKyAgICAgICAgZ3RrX2ltX21vZHVsZXMgPSBbXQogICAgICAgICBnc3RyZWFtZXJfbW9kdWxl
cyA9IFtdCisgICAgICAgIG1lc2FfZHJpX2RyaXZlcnMgPSBbXQorICAgICAgICBwaXBld2lyZV9z
cGFfcGx1Z2lucyA9IFtdCisgICAgICAgIGdka19waXhidWZfbG9hZGVycyA9IFtdCisgICAgICAg
IGVnbF9pY2RfbWVzYV9jb25maWdfZmlsZSA9IE5vbmUKICAgICAgICAgbGlicmFyaWVzX2NoZWNr
ZWQgPSBzZXQoKQogICAgICAgICBzeXN0ZW1fcGFja2FnZXNfbmVlZGVkID0gc2V0KCkKKyAgICAg
ICAgYmluYXJpZXNfdG9fY29weSA9IHNldCgpCiAgICAgICAgIG9iamVjdHNfdG9fY29weSA9IFsg
bWFpbl9iaW5hcnlfcGF0aCBdCisgICAgICAgICMgV2Ugb25seSB3YW50IHRvIHNlcGFyYXRlIHRo
ZSBsaWJyYXJpZXMgaW4gbGliIGFuZCBzeXMvbGliIGZvciBNaW5pQnJvd3NlciBhbmQgJ2FsbCcg
YnVuZGxlcworICAgICAgICBzZWxmLl9idW5kbGVyLnNldF91c2Vfc3lzX2xpYl9kaXJlY3Rvcnko
J01pbmlCcm93c2VyJyBpbiBzZWxmLl9idW5kbGVfYmluYXJpZXMpCiAgICAgICAgIGlmIGJ1bmRs
ZV9iaW5hcnkgPT0gJ01pbmlCcm93c2VyJzoKLSAgICAgICAgICAgIGdpb19tb2R1bGVzID0gc2Vs
Zi5fZ2V0X2dpb19tb2R1bGVzKCkKLSAgICAgICAgICAgIGdzdHJlYW1lcl9tb2R1bGVzID0gc2Vs
Zi5fZ2V0X2dzdHJlYW1lcl9tb2R1bGVzKCkKKyAgICAgICAgICAgICMgYnVuZGRsZSBXZWJLaXQg
bGlicmFyaWVzCiAgICAgICAgICAgICBvYmplY3RzX3RvX2NvcHkuZXh0ZW5kKHNlbGYuX2dldF93
ZWJraXRfYmluYXJpZXMoKSkKLSAgICAgICAgICAgIG9iamVjdHNfdG9fY29weS5hcHBlbmQoc2Vs
Zi5fZ2V0X3dlYmtpdF9idW5kbGVsaWIoKSkKKyAgICAgICAgICAgIG9iamVjdHNfdG9fY29weS5h
cHBlbmQoc2VsZi5fZ2V0X3dlYmtpdF9saWIoJ0luamVjdGVkQnVuZGxlJykpCisgICAgICAgICAg
ICBpZiBzZWxmLl9wbGF0Zm9ybSA9PSAnd3BlJzoKKyAgICAgICAgICAgICAgICBvYmplY3RzX3Rv
X2NvcHkuYXBwZW5kKHNlbGYuX2dldF93ZWJraXRfbGliKCdJbnNwZWN0b3JSZXNvdXJjZXMnKSkK
KyAgICAgICAgICAgICMgQnVuZGxlIGV4dHJhIHN5c3RlbSByZWxhdGVkIGxpYnJhcmllcworICAg
ICAgICAgICAgZ2lvX21vZHVsZXMgPSBzZWxmLl9nZXRfZ2lvX21vZHVsZXMoKQogICAgICAgICAg
ICAgb2JqZWN0c190b19jb3B5LmV4dGVuZChnaW9fbW9kdWxlcykKKyAgICAgICAgICAgIGdzdHJl
YW1lcl9tb2R1bGVzID0gc2VsZi5fZ2V0X2dzdHJlYW1lcl9tb2R1bGVzKCkKICAgICAgICAgICAg
IG9iamVjdHNfdG9fY29weS5leHRlbmQoZ3N0cmVhbWVyX21vZHVsZXMpCisgICAgICAgICAgICBp
ZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKKyAgICAgICAgICAgICAgICAjIG5lZWQg
dG8gc2hpcCBhIGNvcHkgb2YgZ3N0IHBsdWdpbmcgc2Nhbm5lcgorICAgICAgICAgICAgICAgIG9i
amVjdHNfdG9fY29weS5hcHBlbmQoc2VsZi5fZ2V0X2dzdHJlYW1lcl9wbHVnaW5fc2Nhbm5lcigp
KQorICAgICAgICAgICAgICAgICMgcGlwZXdpcmUgc3BhIHBsdWdpbnMKKyAgICAgICAgICAgICAg
ICBwaXBld2lyZV9zcGFfcGx1Z2luX2Jhc2VkaXIsIHBpcGV3aXJlX3NwYV9wbHVnaW5zID0gc2Vs
Zi5fZ2V0X3BpcGV3aXJlX3NwYV9iYXNlZGlyX2FuZF9wbHVnaW5zKCkKKyAgICAgICAgICAgICAg
ICBvYmplY3RzX3RvX2NvcHkuZXh0ZW5kKHBpcGV3aXJlX3NwYV9wbHVnaW5zKQorICAgICAgICAg
ICAgICAgICMgZ3JhcGhpY3MgZHJpdmVycworICAgICAgICAgICAgICAgIG1lc2FfZHJpX2RyaXZl
cnMgPSBzZWxmLl9nZXRfbWVzYV9kcmlfZHJpdmVycygpCisgICAgICAgICAgICAgICAgb2JqZWN0
c190b19jb3B5LmV4dGVuZChtZXNhX2RyaV9kcml2ZXJzKQorICAgICAgICAgICAgICAgIG9iamVj
dHNfdG9fY29weS5leHRlbmQoc2VsZi5fZ2V0X21lc2FfbGlicmFyaWVzKCkpCisgICAgICAgICAg
ICAgICAgZWdsX2ljZF9tZXNhX2NvbmZpZ19maWxlID0gc2VsZi5fZGlzY292ZXJfZWdsX21lc2Ff
Y29uZmlnX2ZpbGUoKQorICAgICAgICAgICAgICAgIG9iamVjdHNfdG9fY29weS5hcHBlbmQoc2Vs
Zi5fZ2V0X21lc2FfZWdsX2ljZF9kcml2ZXJfcGF0aChlZ2xfaWNkX21lc2FfY29uZmlnX2ZpbGUp
KQorICAgICAgICAgICAgICAgICMgc3lzdGVtIGV4dHJhIGxpYnJhcmllcworICAgICAgICAgICAg
ICAgIG9iamVjdHNfdG9fY29weS5leHRlbmQoc2VsZi5fZ2V0X2xpYmNfbGlicmFyaWVzKCkpCisg
ICAgICAgICAgICAgICAgIyBndGsgbW9kdWxlcworICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Bs
YXRmb3JtID09ICdndGsnOgorICAgICAgICAgICAgICAgICAgICBndGtfcHJpbnRfbW9kdWxlcyA9
IHNlbGYuX2dldF9ndGtfbW9kdWxlcygncHJpbnRiYWNrZW5kcycpCisgICAgICAgICAgICAgICAg
ICAgIG9iamVjdHNfdG9fY29weS5leHRlbmQoZ3RrX3ByaW50X21vZHVsZXMpCisgICAgICAgICAg
ICAgICAgICAgIGd0a19pbV9tb2R1bGVzID0gc2VsZi5fZ2V0X2d0a19tb2R1bGVzKCdpbW1vZHVs
ZXMnKQorICAgICAgICAgICAgICAgICAgICBvYmplY3RzX3RvX2NvcHkuZXh0ZW5kKGd0a19pbV9t
b2R1bGVzKQorICAgICAgICAgICAgICAgICAgICBnZGtfcGl4YnVmX2xvYWRlcnMgPSBzZWxmLl9n
ZXRfZ2RrX3BpeGJ1Zl9sb2FkZXJzKCkKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0c190b19j
b3B5LmV4dGVuZChnZGtfcGl4YnVmX2xvYWRlcnMpCisgICAgICAgICAgICAgICAgICAgIG9iamVj
dHNfdG9fY29weS5hcHBlbmQoc2VsZi5fZ2V0X2dka19xdWVyeV9sb2FkZXJzX2JpbmFyeSgpKQor
ICAgICAgICAgICAgICAgICAgICBvYmplY3RzX3RvX2NvcHkuYXBwZW5kKHNlbGYuX2dldF9ndGtf
cXVlcnlfaW1tb2R1bGVzX2JpbmFyeSgpKQorICAgICAgICAgICAgICAgICMgb3VyIGRsb3Blbndy
YXAgbGliCisgICAgICAgICAgICAgICAgb2JqZWN0c190b19jb3B5LmFwcGVuZChzZWxmLl9kbG9w
ZW53cmFwX21ha2UoJ2J1aWxkJykpCisKICAgICAgICAgZm9yIG9iamVjdCBpbiBvYmplY3RzX3Rv
X2NvcHk6CiAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IE5vbmUKICAgICAgICAgICAgIGlm
IG9iamVjdCBpbiBnaW9fbW9kdWxlczoKLSAgICAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9
IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2RlcChvYmplY3QsICdnaW8nKQotICAgICAgICAg
ICAgICAgIGlmIHN5c3RlbV9wYWNrYWdlOgotICAgICAgICAgICAgICAgICAgICBzeXN0ZW1fcGFj
a2FnZXNfbmVlZGVkLmFkZChzeXN0ZW1fcGFja2FnZSkKKyAgICAgICAgICAgICAgICBzeXN0ZW1f
cGFja2FnZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2RlcChvYmplY3QsICdsaWIvZ2lv
JykKICAgICAgICAgICAgIGVsaWYgb2JqZWN0IGluIGdzdHJlYW1lcl9tb2R1bGVzOgotICAgICAg
ICAgICAgICAgIHN5c3RlbV9wYWNrYWdlID0gc2VsZi5fYWRkX29iamVjdF9vcl9nZXRfc3lzZGVw
KG9iamVjdCwgJ2dzdCcpCi0gICAgICAgICAgICAgICAgaWYgc3lzdGVtX3BhY2thZ2U6Ci0gICAg
ICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlc19uZWVkZWQuYWRkKHN5c3RlbV9wYWNrYWdl
KQotICAgICAgICAgICAgZWxpZiBvYmplY3QuZW5kc3dpdGgoJy5zbycpOgotICAgICAgICAgICAg
ICAgIHNlbGYuX2J1bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRoKG9iamVjdCwgdHlwZT0nbGli
JykKKyAgICAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3Jf
Z2V0X3N5c2RlcChvYmplY3QsICdsaWIvZ3N0JykKKyAgICAgICAgICAgIGVsaWYgb2JqZWN0IGlu
IGd0a19wcmludF9tb2R1bGVzOgorICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlID0gc2Vs
Zi5fYWRkX29iamVjdF9vcl9nZXRfc3lzZGVwKG9iamVjdCwgJ2xpYi9ndGsvcHJpbnRiYWNrZW5k
cycpCisgICAgICAgICAgICBlbGlmIG9iamVjdCBpbiBndGtfcHJpbnRfbW9kdWxlczoKKyAgICAg
ICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2Rl
cChvYmplY3QsICdsaWIvZ3RrL3ByaW50YmFja2VuZHMnKQorICAgICAgICAgICAgZWxpZiBvYmpl
Y3QgaW4gZ3RrX2ltX21vZHVsZXM6CisgICAgICAgICAgICAgICAgc3lzdGVtX3BhY2thZ2UgPSBz
ZWxmLl9hZGRfb2JqZWN0X29yX2dldF9zeXNkZXAob2JqZWN0LCAnbGliL2d0ay9pbW1vZHVsZXMn
KQorICAgICAgICAgICAgZWxpZiBvYmplY3QgaW4gbWVzYV9kcmlfZHJpdmVyczoKKyAgICAgICAg
ICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2RlcChv
YmplY3QsICdsaWIvZHJpJykKKyAgICAgICAgICAgIGVsaWYgb2JqZWN0IGluIGdka19waXhidWZf
bG9hZGVyczoKKyAgICAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmpl
Y3Rfb3JfZ2V0X3N5c2RlcChvYmplY3QsICdsaWIvZ2RrLXBpeGJ1Zi9sb2FkZXJzJykKKyAgICAg
ICAgICAgIGVsaWYgb2JqZWN0IGluIHBpcGV3aXJlX3NwYV9wbHVnaW5zOgorICAgICAgICAgICAg
ICAgICMgVGhpcyBpcyBhIGxldmVsLTIgaW5kaXJlY3QgZGVwZW5kZW5jeSAoZ3N0cmVhbWVyIC0+
IGdzdC1waXBld2lyZSAtPiBwaXBld2lyZS1zcGEtcGx1Z2luKQorICAgICAgICAgICAgICAgICMg
Rm9yIHRoZSBjYXNlIG9mIHN5c3RlbV9wYWNrYWdlcyB3ZSByZWx5IG9uIHRoZSBkaXN0cm8gZGVw
ZW5kZW5jaWVzIGJldHdlbiBwYWNrYWdlcworICAgICAgICAgICAgICAgICMgQnV0IHRoZSBidW5k
bGUtYWxsIGNhc2Ugd2UgbmVlZCBhIHNwZWNpYWwgY2FzZSBiZWNhdXNlIHRoaXMgZGVwIGlzIG5v
dCBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIChkbG9wZW4gb2YgcGx1Z2lucykKKyAgICAgICAgICAg
ICAgICBpZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKKyAgICAgICAgICAgICAgICAg
ICAgcGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpciA9IG9iamVjdC5yZXBsYWNlKHBpcGV3
aXJlX3NwYV9wbHVnaW5fYmFzZWRpciwgJycsIDEpCisgICAgICAgICAgICAgICAgICAgIHBpcGV3
aXJlX3NwYV9wbHVnaW5fZGVzdF9zdWJkaXIgPSBvcy5wYXRoLmRpcm5hbWUocGlwZXdpcmVfc3Bh
X3BsdWdpbl9kZXN0X3N1YmRpci5sc3RyaXAoJy8nKSkKKyAgICAgICAgICAgICAgICAgICAgcGlw
ZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpciA9IG9zLnBhdGguam9pbignbGliL3BpcGV3aXJl
JywgcGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpcikKKyAgICAgICAgICAgICAgICAgICAg
c2VsZi5fYnVuZGxlci5jb3B5X2FuZF9tYXliZV9zdHJpcF9wYXRjaGVsZihvYmplY3QsIHR5cGU9
cGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpciwgc3RyaXA9c2VsZi5fc2hvdWxkX3N0cmlw
X29iamVjdHMsIHBhdGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBhdGNoZWxmX25vZGVmYXVsdGxp
Yj1UcnVlKQorICAgICAgICAgICAgZWxpZiAnLnNvJyBpbiBvYmplY3Q6CisgICAgICAgICAgICAg
ICAgaWYgJ2xpYndwZWJhY2tlbmQnIGluIG9iamVjdC5sb3dlcigpOgorICAgICAgICAgICAgICAg
ICAgICBuZWVkc190b19jcmVhdGVfd3BlX2JhY2tlbmRfc3ltbGluayA9IFRydWUKKyAgICAgICAg
ICAgICAgICBzZWxmLl9idW5kbGVyLmNvcHlfYW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKG9iamVj
dCwgdHlwZT0nbGliJywgc3RyaXA9c2VsZi5fc2hvdWxkX3N0cmlwX29iamVjdHMsIHBhdGNoZWxm
X3JlbW92ZXJwYXRoPVRydWUsIHBhdGNoZWxmX25vZGVmYXVsdGxpYj1zZWxmLl9zeXNsaWJzPT0n
YnVuZGxlLWFsbCcpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuX2J1
bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRoKG9iamVjdCwgdHlwZT0nYmluJykKKyAgICAgICAg
ICAgICAgICBiaW5hcmllc190b19jb3B5LmFkZChvYmplY3QpCiAgICAgICAgICAgICAjIFRoZXJl
IGlzIG5vIG5lZWQgdG8gZXhhbWluZSB0aGUgbGlicmFyaWVzIGxpbmtlZCB3aXRoIG9iamVjdHMg
Y29taW5nIGZyb20gYSBzeXN0ZW0gcGFja2FnZSwKICAgICAgICAgICAgICMgYmVjYXVzZSBzeXN0
ZW0gcGFja2FnZXMgYWxyZWFkeSBkZWNsYXJlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZW0uCiAg
ICAgICAgICAgICAjIEhvd2V2ZXIsIGlmIHdlIGFyZSBydW5uaW5nIHdpdGggc2VsZi5fc3lzbGli
cyA9PSAnYnVuZGxlLWFsbCcgdGhlbiBzeXN0ZW1fcGFja2FnZSB3aWxsIGJlIE5vbmUsCiAgICAg
ICAgICAgICAjIGFuZCBldmVyeXRoaW5nIHdpbGwgYmUgZXhhbWluZWQgYW5kIGJ1bmRsZWQgYXMg
d2UgZG9uJ3QgYWNjb3VudCBmb3Igc3lzdGVtIHBhY2thZ2VzIGluIHRoYXQgY2FzZS4KLSAgICAg
ICAgICAgIGlmIG5vdCBzeXN0ZW1fcGFja2FnZToKKyAgICAgICAgICAgIGlmIHN5c3RlbV9wYWNr
YWdlOgorICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlc19uZWVkZWQuYWRkKHN5c3RlbV9w
YWNrYWdlKQorICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBsaWJyYXJpZXMsIGlu
dGVycHJldGVyID0gc2VsZi5fc2hhcmVkX29iamVjdF9yZXNvbHZlci5nZXRfbGlic19hbmRfaW50
ZXJwcmV0ZXIob2JqZWN0KQogICAgICAgICAgICAgICAgIGlmIGludGVycHJldGVyIGlzIE5vbmU6
Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ291bGQgbm90IGRldGVy
bWluZSBpbnRlcnByZXRlciBmb3IgYmluYXJ5ICVzIiAlIG9iamVjdCkKKyAgICAgICAgICAgICAg
ICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDb3VsZCBub3QgZGV0ZXJtaW5lIGludGVycHJldGVy
IGZvciBiaW5hcnkgJXMnICUgb2JqZWN0KQogICAgICAgICAgICAgICAgIGlmIGNvcGllZF9pbnRl
cnByZXRlciBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9zeXNsaWJzID09
ICdidW5kbGUtYWxsJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1bmRsZXIuY29w
eV9hbmRfcmVtb3ZlX3JwYXRoKGludGVycHJldGVyLCB0eXBlPSdpbnRlcnByZXRlcicpCisgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9idW5kbGVyLmNvcHlfYW5kX21heWJlX3N0cmlwX3Bh
dGNoZWxmKGludGVycHJldGVyLCB0eXBlPSdpbnRlcnByZXRlcicsIHN0cmlwPXNlbGYuX3Nob3Vs
ZF9zdHJpcF9vYmplY3RzLCBwYXRjaGVsZl9yZW1vdmVycGF0aD1zZWxmLl9zeXNsaWJzPT0nYnVu
ZGxlLWFsbCcsIHBhdGNoZWxmX25vZGVmYXVsdGxpYj1zZWxmLl9zeXNsaWJzPT0nYnVuZGxlLWFs
bCcpCiAgICAgICAgICAgICAgICAgICAgIGNvcGllZF9pbnRlcnByZXRlciA9IGludGVycHJldGVy
CiAgICAgICAgICAgICAgICAgZWxpZiBjb3BpZWRfaW50ZXJwcmV0ZXIgIT0gaW50ZXJwcmV0ZXI6
CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRGV0ZWN0ZWQgYmluYXJp
ZXMgd2l0aCBkaWZmZXJlbnQgaW50ZXJwcmV0ZXJzOiAlcyAhPSAlcycgJShjb3BpZWRfaW50ZXJw
cmV0ZXIsIGludGVycHJldGVyKSkKLSAgICAgICAgICAgICAgICAjIEZJWE1FOiBmb3IgLS1zeXNs
aWJzPWJ1bmRsZS1hbGwgd2Ugd291bGQgaGF2ZSB0byBjb3B5IHRoZSBsaWJuc3NfKnNvKiBsaWJy
YXJpZXMgd2hpY2ggYXJlIGRsb3BlbidlZCA8aHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvMjAzMDE0
PgotICAgICAgICAgICAgICAgICMgQWxzbyB3ZSBzaG91bGQgaW5jbHVkZSBjb25maWcgZmlsZXMg
bGlrZSBmb250Y29uZmlnIHN0dWZmIG9yIHN1cHBvcnQgZmlsZXMgbGlrZSBpY29ucy4KICAgICAg
ICAgICAgICAgICBmb3IgbGlicmFyeSBpbiBsaWJyYXJpZXM6CiAgICAgICAgICAgICAgICAgICAg
IGlmIGxpYnJhcnkgaW4gbGlicmFyaWVzX2NoZWNrZWQ6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBfbG9nLmRlYnVnKCdTa2lwIGFscmVhZHkgY2hlY2tlZCBbbGliXTogJXMnICUgbGlicmFyeSkK
QEAgLTQzOSwxMiArNzQ3LDEwMiBAQCBjbGFzcyBCdW5kbGVDcmVhdG9yKG9iamVjdCk6CiAgICAg
ICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlID0gc2VsZi5fYWRkX29iamVjdF9vcl9nZXRf
c3lzZGVwKGxpYnJhcnksICdsaWInKQogICAgICAgICAgICAgICAgICAgICBpZiBzeXN0ZW1fcGFj
a2FnZToKICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlc19uZWVkZWQuYWRk
KHN5c3RlbV9wYWNrYWdlKQotCi0gICAgICAgIHNlbGYuX2Vuc3VyZV93cGVfYmFja2VuZF9zeW1s
aW5rKCkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiAnbGlid3BlYmFja2VuZCcgaW4gbGlicmFy
eS5sb3dlcigpOgorICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHNfdG9fY3JlYXRlX3dwZV9i
YWNrZW5kX3N5bWxpbmsgPSBUcnVlCisgICAgICAgIGlmIG5lZWRzX3RvX2NyZWF0ZV93cGVfYmFj
a2VuZF9zeW1saW5rOgorICAgICAgICAgICAgc2VsZi5fZW5zdXJlX3dwZV9iYWNrZW5kX3N5bWxp
bmsoKQorICAgICAgICBmb3IgYmluYXJ5IGluIGJpbmFyaWVzX3RvX2NvcHk6CisgICAgICAgICAg
ICBpZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKKyAgICAgICAgICAgICAgICBzZWxm
Ll9idW5kbGVyLmNvcHlfYW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKGJpbmFyeSwgdHlwZT0nYmlu
Jywgc3RyaXA9c2VsZi5fc2hvdWxkX3N0cmlwX29iamVjdHMsIHBhdGNoZWxmX3JlbW92ZXJwYXRo
PVRydWUsIHBhdGNoZWxmX25vZGVmYXVsdGxpYj1UcnVlLCBwYXRjaGVsZl9zZXRpbnRlcnByZXRl
cl9yZWxhdGl2ZXBhdGg9aW50ZXJwcmV0ZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHNlbGYuX2J1bmRsZXIuY29weV9hbmRfbWF5YmVfc3RyaXBfcGF0Y2hlbGYoYmluYXJ5
LCB0eXBlPSdiaW4nLCBzdHJpcD1zZWxmLl9zaG91bGRfc3RyaXBfb2JqZWN0cywgcGF0Y2hlbGZf
cmVtb3ZlcnBhdGg9VHJ1ZSwgcGF0Y2hlbGZfbm9kZWZhdWx0bGliPUZhbHNlKQorCisgICAgICAg
ICMgTm93IGNvcHkgZGF0YSBmaWxlcyB0byBzaGFyZSBkaXIgKG9ubHkgbmVlZGVkIHdoZW4gYnVu
ZGluZyBhbGwgZm9yIE1pbmlCcm93c2VyKS4KKyAgICAgICAgIyBXZSBhc3N1bWUgdGhhdCB0aGUg
c3lzdGVtIHVzZXMgc3RhbmRhcmQgcGF0aHMgYXQgL3Vzci9zaGFyZSBhbmQgL2V0YyBmb3IgdGhp
cyByZXNvdXJjZXMKKyAgICAgICAgIyBFdmVyeSBwYXRoIHNob3VsZCBiZSBjaGVja2VkIGFuZCBp
ZiBzb21lIG9uZSBpcyBub3QgZm91bmQsIHRoZW4gaXQgd2lsbCByYWlzZSBhbiBlcnJvci4KKyAg
ICAgICAgaWYgYnVuZGxlX2JpbmFyeSA9PSAnTWluaUJyb3dzZXInIGFuZCBzZWxmLl9zeXNsaWJz
ID09ICdidW5kbGUtYWxsJzoKKyAgICAgICAgICAgIHRhcmdldF9zaGFyZV9kaXIgPSBvcy5wYXRo
LmpvaW4oc2VsZi5fdG1wZGlyLCAnc3lzL3NoYXJlJykKKyAgICAgICAgICAgICMgQ29weSBnbHZu
ZCBFR0wganNvbiBmaWxlcworICAgICAgICAgICAgX2xvZy5pbmZvKCdDb3B5IEVHTCBjb25maWcg
ZmlsZXMnKQorICAgICAgICAgICAgZWdsX2ljZF9jb25maWdkaXJfZGVzdCA9IG9zLnBhdGguam9p
bihzZWxmLl90bXBkaXIsICdzeXMvbGliL2dsdm5kL2VnbF92ZW5kb3IuZCcpCisgICAgICAgICAg
ICBpZiBub3Qgb3MucGF0aC5pc2RpcihlZ2xfaWNkX2NvbmZpZ2Rpcl9kZXN0KToKKyAgICAgICAg
ICAgICAgICBvcy5tYWtlZGlycyhlZ2xfaWNkX2NvbmZpZ2Rpcl9kZXN0KQorICAgICAgICAgICAg
ICAgIHNodXRpbC5jb3B5KGVnbF9pY2RfbWVzYV9jb25maWdfZmlsZSwgZWdsX2ljZF9jb25maWdk
aXJfZGVzdCkKKyAgICAgICAgICAgICMgQ29weSBnbGliLTIgY29tcGlsZWQgc2NoZW1hcworICAg
ICAgICAgICAgX2xvZy5pbmZvKCdDb3B5IEdsaWIgY29tcGlsZWQgc2NoZW1hcycpCisgICAgICAg
ICAgICBzY2hlbWFzX3RhcmdldF9kaXIgPSBvcy5wYXRoLmpvaW4odGFyZ2V0X3NoYXJlX2Rpciwg
J2dsaWItMi4wL3NjaGVtYXMnKQorICAgICAgICAgICAgb3MubWFrZWRpcnMoc2NoZW1hc190YXJn
ZXRfZGlyKQorICAgICAgICAgICAgY29tcGlsZWRfc2NoZW1hc19maWxlID0gJy91c3Ivc2hhcmUv
Z2xpYi0yLjAvc2NoZW1hcy9nc2NoZW1hcy5jb21waWxlZCcKKyAgICAgICAgICAgIGlmIG5vdCBv
cy5wYXRoLmlzZmlsZShjb21waWxlZF9zY2hlbWFzX2ZpbGUpOgorICAgICAgICAgICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIkNhbid0IGZpbmQgdGhlIGdzY2hlbWFzLmNvbXBpbGVk
IGZpbGUgYXQgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGluIHRoaXMgc3lzdGVtIikKKyAgICAgICAg
ICAgIHNodXRpbC5jb3B5KGNvbXBpbGVkX3NjaGVtYXNfZmlsZSwgc2NoZW1hc190YXJnZXRfZGly
KQorICAgICAgICAgICAgX2xvZy5pbmZvKCdDb3B5IHNoYXJlZCBtaW1lIGluZm8gY2FjaGUnKQor
ICAgICAgICAgICAgIyBTYW1lIGZvciBzaGFyZWQtbWltZS1pbmZvIGNhY2hlCisgICAgICAgICAg
ICBtaW1lX3RhcmdldF9kaXIgPSBvcy5wYXRoLmpvaW4odGFyZ2V0X3NoYXJlX2RpciwgJ21pbWUn
KQorICAgICAgICAgICAgb3MubWFrZWRpcnMobWltZV90YXJnZXRfZGlyKQorICAgICAgICAgICAg
bWltZV9jYWNoZSA9ICcvdXNyL3NoYXJlL21pbWUvbWltZS5jYWNoZScKKyAgICAgICAgICAgIGlm
IG5vdCBvcy5wYXRoLmlzZmlsZShtaW1lX2NhY2hlKToKKyAgICAgICAgICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yKCJDYW4ndCBmaW5kIHRoZSBtaW1lLmNhY2hlIGZpbGUgZnJvbSBz
aGFyZWQtbWltZS1pbmZvIGF0IHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBpbiB0aGlzIHN5c3RlbSIp
CisgICAgICAgICAgICBzaHV0aWwuY29weShtaW1lX2NhY2hlLCBtaW1lX3RhcmdldF9kaXIpCisg
ICAgICAgICAgICBfbG9nLmluZm8oJ0dlbmVyYXRlIGZvbnRjb25maWcgY29uZmlnJykKKyAgICAg
ICAgICAgICMgRm9udGNvbmZpZyBmb250cyBhbmQgY29uZmlnCisgICAgICAgICAgICB0YXJnZXRf
Zm9udF9jb25maWdfZGlyID0gb3MucGF0aC5qb2luKHRhcmdldF9zaGFyZV9kaXIsICdmb250cy9j
b25maWcnKQorICAgICAgICAgICAgdGFyZ2V0X2ZvbnRfZGF0YV9kaXIgPSBvcy5wYXRoLmpvaW4o
dGFyZ2V0X3NoYXJlX2RpciwgJ2ZvbnRzL2ZvbnRzJykKKyAgICAgICAgICAgIG9zLm1ha2VkaXJz
KHRhcmdldF9mb250X2NvbmZpZ19kaXIpCisgICAgICAgICAgICAjIFdlIGtlZXAgYXNzdW1pbmcg
c3RhbmRhcmQgbG9jYXRpb25zIGZvciB0aGlzIGZpbGVzIG9uIHRoZSB0YXJnZXQgc3lzdGVtCisg
ICAgICAgICAgICBzeXN0ZW1fZm9udF9jb25maWdfZGlyID0gJy9ldGMvZm9udHMvY29uZi5kJwor
ICAgICAgICAgICAgc3lzdGVtX2ZvbnRfZGF0YV9kaXIgPSAnL3Vzci9zaGFyZS9mb250cycKKyAg
ICAgICAgICAgIGlmIG5vdCAob3MucGF0aC5pc2RpcihzeXN0ZW1fZm9udF9jb25maWdfZGlyKSBh
bmQgb3MucGF0aC5pc2RpcihzeXN0ZW1fZm9udF9kYXRhX2RpcikpOgorICAgICAgICAgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIkNhbid0IGZpbmQgdGhlIGZvbnRjb25maWcgZmls
ZXMgYXQgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGluIHRoaXMgc3lzdGVtIikKKyAgICAgICAgICAg
IHNodXRpbC5jb3B5dHJlZShzeXN0ZW1fZm9udF9jb25maWdfZGlyLCBvcy5wYXRoLmpvaW4odGFy
Z2V0X2ZvbnRfY29uZmlnX2Rpciwgb3MucGF0aC5iYXNlbmFtZShzeXN0ZW1fZm9udF9jb25maWdf
ZGlyKSkpCisgICAgICAgICAgICBzZWxmLl9nZW5lcmF0ZV9mb250X2NvbmYodGFyZ2V0X2ZvbnRf
Y29uZmlnX2RpcikKKyAgICAgICAgICAgIF9sb2cuaW5mbygnQ29weSBmb250cycpCisgICAgICAg
ICAgICAjIFdlIGNvcHkgZXZlcnkgZm9udCwgc28gdGhpcyBtYXkgY29weSBsb3Qgb2YgZGF0YSBp
ZiB5b3UgaGF2ZSBsb3Qgb2YgZm9udHMgaW5zdGFsbGVkLgorICAgICAgICAgICAgIyBTbyBwcmlu
dCBhIHdhcm5pbmcgaW4gdGhhdCBhc2UKKyAgICAgICAgICAgIHN5c3RlbV9mb250X2RhdGFfc2l6
ZSA9IHNlbGYuX2dldF90b3RhbF9zaXplX2RpcihzeXN0ZW1fZm9udF9kYXRhX2RpcikKKyAgICAg
ICAgICAgIGlmIHN5c3RlbV9mb250X2RhdGFfc2l6ZSA+IDEwNDg1NzYwMDogICMgMTAwIE1CCisg
ICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdDb3B5aW5nICVkIE1CIG9mIGZvbnQgZGF0YSBm
cm9tIHRoZSBzeXN0ZW0gYXQgL3Vzci9zaGFyZS9mb250cy4gVGhpcyBzaG91bGQgYmUgb3B0aW1p
emVkLicgJSBpbnQoc3lzdGVtX2ZvbnRfZGF0YV9zaXplIC8gKDEwMjQqMTAyNCkpKQorICAgICAg
ICAgICAgc2h1dGlsLmNvcHl0cmVlKHN5c3RlbV9mb250X2RhdGFfZGlyLCB0YXJnZXRfZm9udF9k
YXRhX2RpcikKKyAgICAgICAgICAgICMgQ29weSBYS0IgZGF0YQorICAgICAgICAgICAgX2xvZy5p
bmZvKCdDb3B5IFhLQiBkYXRhJykKKyAgICAgICAgICAgIHN5c3RlbV94a2JfZGF0YSA9ICcvdXNy
L3NoYXJlL1gxMS94a2InCisgICAgICAgICAgICBpZiBub3QgKG9zLnBhdGguaXNkaXIoc3lzdGVt
X3hrYl9kYXRhKSk6CisgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigi
Q2FuJ3QgZmluZCB0aGUgWEtCIGRhdGEgZmlsZXMgYXQgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGlu
IHRoaXMgc3lzdGVtIikKKyAgICAgICAgICAgIHRhcmdldF94a2JfZGF0YSA9IG9zLnBhdGguam9p
bih0YXJnZXRfc2hhcmVfZGlyLCAneGtiJykKKyAgICAgICAgICAgIHNodXRpbC5jb3B5dHJlZShz
eXN0ZW1feGtiX2RhdGEsIHRhcmdldF94a2JfZGF0YSkKKyAgICAgICAgICAgICMgRmxhdHBhayBj
b25maWd1cmVzIGdudXRscyB0byB1c2UgdGhlIHAxMS1raXQgdHJ1c3Qgc3RvcmUgYW5kIHRoZW4g
dXNlcyBwMTEta2l0IHRvIGFjY2VzcyB0aGUgaG9zdCBTU0wgY2VydGlmaWNhdGVzLgorICAgICAg
ICAgICAgIyAtIEl0IHN0YXJ0cyBhIHAxMSBraXQgc2VydmVyIG9uIHRoZSBob3N0cyBhbmQgYmlu
ZC1tb3VudGluZyBhIHNvY2tldCB0aGF0IGxhdGVyIGlzIHVzZWQgZnJvbSBpbnNpZGUgdGhlIHNh
bmRib3ggdmlhIHAxMS1raXQtY2xpZW50LnNvCisgICAgICAgICAgICAjIFNlZTogaHR0cHM6Ly9n
aXRodWIuY29tL3AxMS1nbHVlL3AxMS1raXQvaXNzdWVzLzY4CisgICAgICAgICAgICAjIFN0YXJ0
aW5nIGEgcDExLWtpdCBzZXJ2ZXIgaXMgcHJvYmxlbWF0aWMgZm9yIHRoZSB1c2UgY2FzZSBvZiB0
aGUgYnVuZGxlLCBhbmQgYWxzbyB3aWxsIG9ubHkgd29yayBpZiB0aGUgaG9zdCBpcyBjb25maWd1
cmVkIHRvIHVzZSBwMTEta2l0CisgICAgICAgICAgICAjIFNvIHdlIHRha2UgYSBkaWZmZXJlbnQg
YXBwcm9hY2ggaGVyZS4KKyAgICAgICAgICAgICMgMS4gV2UgZ2VuZXJhdGUgYSBidW5kbGUtY2Et
Y2VydGlmaWNhdGVzLnBlbSBmaWxlIHdpdGggYWxsIHRoZSBjZXJ0cyBvZiB0aGUgc3lzdGVtIHdl
cmUgdGhlIGJ1bmRsZSB3YXMgZ2VuZXJhdGVkIGFuZCB3ZSBzaGlwIHRoaXMgZmlsZQorICAgICAg
ICAgICAgIyAyLiBBdCBydW50aW1lIHdlIGxvb2sgZm9yIHRoZSBzeXN0ZW0gVExTIGNhLWJ1bmRs
ZS5wZW0gZmlsZSBhbmQgd2UgdXNlIGl0LiBJZiB3ZSBjYW4ndCBmaW5kIGl0IHRoZW4gd2UgZGVm
YXVsdCB0byB1c2luZyB0aGUgb25lIHNoaXBwZWQgaW5zaWRlIHRoZSBidW5kbGUuCisgICAgICAg
ICAgICAjIFdlIHBhc3MgdGhlIHBhdGggdG8gdGhlIFRMUyBjYS1idW5kbGUucGVtIGZpbGUgdXNp
bmcgdGhlIGVudiB2YXIgV0VCS0lUX1RMU19DQUZJTEVfUEVNCisgICAgICAgICAgICAjIFRoZSBo
b3N0IHAxMS1raXQgc2V0dXAgbWF5IHN0aWxsIHdvcmsgaWYgaXQgaXMgdXNpbmcgdGhlIHNhbWUg
cGF0aHMgZm9yIGxvYWRpbmcgdGhlIHAxMS1raXQgbW9kdWxlcywgYnV0IG90aGVyd2lzZSBpdCB3
aWxsIGZhaWwgdG8gbG9hZCB0aGUgbW9kdWxlcy4KKyAgICAgICAgICAgICMgVGhhdCBpcyBvaywg
c2luY2Ugd2UgZG9uJ3QgbmVlZCBhbnltb3JlIGEgd29ya2luZyBwMTEta2l0IHNldHVwLiBJZiBp
dCB3b3JrcyBpdCB3aWxsIGJlIHVzZWQsIGJ1dCBpZiBub3Qgd2UgaGF2ZSBhIGZhbGxiYWNrLgor
ICAgICAgICAgICAgIyBUbyBkZWJ1ZyB0aGlzIGlzIHVzZWZ1bCB0byBleHBvcnQgUDExX0tJVF9E
RUJVRz1hbGwKKyAgICAgICAgICAgICMgVGhpcyBhcHByb2FjaCBhbHNvIGFsbG93cyB0aGlzIGJ1
bmRsZSBzY3JpcHQgZ28gZ2VuZXJhdGUgYSB3b3JraW5nIGJ1bmRsZSB3aGVuIGdudXRscyBpcyBu
b3QgY29uZmlndXJlZCB0byB1c2UgcDExLWtpdC4KKyAgICAgICAgICAgIF9sb2cuaW5mbygnR2Vu
ZXJhdGUgVExTIENBIGNlcnRpZmljYXRlcyBmaWxlJykKKyAgICAgICAgICAgIGNlcnRzX3Rhcmdl
dF9kaXIgPSBvcy5wYXRoLmpvaW4odGFyZ2V0X3NoYXJlX2RpciwgJ2NlcnRzJykKKyAgICAgICAg
ICAgIG9zLm1ha2VkaXJzKGNlcnRzX3RhcmdldF9kaXIpCisgICAgICAgICAgICBzZWxmLl9nZW5l
cmF0ZV90bHNfY2FmaWxlKGNlcnRzX3RhcmdldF9kaXIpCisgICAgICAgICAgICBpZiBzZWxmLl9w
bGF0Zm9ybSA9PSAnZ3RrJzoKKyAgICAgICAgICAgICAgICBfbG9nLmluZm8oJ0NvcHkgYmFzaWMg
R1RLIGljb25zIGFuZCB0aGVtZXMuJykKKyAgICAgICAgICAgICAgICBpY29uc190YXJnZXRfZGly
ID0gb3MucGF0aC5qb2luKHRhcmdldF9zaGFyZV9kaXIsICdpY29ucycpCisgICAgICAgICAgICAg
ICAgb3MubWFrZWRpcnMoaWNvbnNfdGFyZ2V0X2RpcikKKyAgICAgICAgICAgICAgICBmb3IgZ3Rr
X2ljb25fZGlyIGluIFsnL3Vzci9zaGFyZS9pY29ucy9BZHdhaXRhJywgJy91c3Ivc2hhcmUvaWNv
bnMvaGljb2xvciddOgorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihn
dGtfaWNvbl9kaXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcignQ2FuIG5vdCBmaW5kIHRoZSBHVEsgaWNvbiB0aGVtZSBhdCBwYXRoICIlcyIgaW4g
dGhpcyBzeXN0ZW0nICUgZ3RrX2ljb25fZGlyKQorICAgICAgICAgICAgICAgICAgICBzaHV0aWwu
Y29weXRyZWUoZ3RrX2ljb25fZGlyLCBvcy5wYXRoLmpvaW4oaWNvbnNfdGFyZ2V0X2Rpciwgb3Mu
cGF0aC5iYXNlbmFtZShndGtfaWNvbl9kaXIpKSkKKworICAgICAgICAjIEZpbmFsbHkgZ2VuZXJh
dGUgdGhlIHdyYXBwZXJzLgogICAgICAgICBzZWxmLl9nZW5lcmF0ZV93cmFwcGVyX3NjcmlwdChp
bnRlcnByZXRlciwgYnVuZGxlX2JpbmFyeSkKLSAgICAgICAgaWYgYnVuZGxlX2JpbmFyeSA9PSAi
TWluaUJyb3dzZXIiOgorICAgICAgICBpZiBidW5kbGVfYmluYXJ5ID09ICdNaW5pQnJvd3Nlcic6
CiAgICAgICAgICAgICBzZWxmLl9nZW5lcmF0ZV93cmFwcGVyX3NjcmlwdChpbnRlcnByZXRlciwg
c2VsZi5fcG9ydF9iaW5hcnlfcHJlZmZpeCArICdXZWJEcml2ZXInKQogICAgICAgICBzZWxmLl9n
ZW5lcmF0ZV9pbnN0YWxsX2RlcHNfc2NyaXB0KHN5c3RlbV9wYWNrYWdlc19uZWVkZWQpCisgICAg
ICAgICMgQ2xlYW4gcmVtYWluaW5nIHN0dWZmCisgICAgICAgIGlmIGJ1bmRsZV9iaW5hcnkgPT0g
J01pbmlCcm93c2VyJyBhbmQgc2VsZi5fc3lzbGlicyA9PSAnYnVuZGxlLWFsbCc6CisgICAgICAg
ICAgICBzZWxmLl9kbG9wZW53cmFwX21ha2UoJ2NsZWFuJykKIAogCiBjbGFzcyBCdW5kbGVVcGxv
YWRlcihvYmplY3QpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iaW5hcnlf
YnVuZGxpbmcvYnVuZGxlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iaW5hcnlfYnVuZGxp
bmcvYnVuZGxlLnB5CmluZGV4IGM2ZTU1Yjg4OTMxNTdkOGJkYWNhNmZkMjY1NTA3Y2MwNDEzYWJl
OGQuLmEwZGUxYzMzMzgwYzRiNmM2ZDIyZDA4MWY5Y2E4N2QxNmMwOTAyOTMgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5nL2J1bmRsZS5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2JpbmFyeV9idW5kbGluZy9idW5kbGUucHkKQEAgLTMxLDY4
ICszMSwxOTMgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiBjbGFzcyBC
aW5hcnlCdW5kbGVyOgogICAgIFZBUl9NWURJUiA9ICdNWURJUicKLSAgICBWQVJfSU5URVJQUkVU
RVIgPSAnSU5URVJQUkVURVInCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGVzdGluYXRpb25f
ZGlyLCBzaG91bGRfc3RyaXBfb2JqZWN0cyk6Ci0gICAgICAgIGlmIHNodXRpbC53aGljaCgncGF0
Y2hlbGYnKSBpcyBOb25lOgotICAgICAgICAgICAgX2xvZy5lcnJvcigiQ291bGQgbm90IGZpbmQg
YHBhdGNoZWxmYCBpbiAkUEFUSCIpCi0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk1pc3Np
bmcgcmVxdWlyZWQgYmluYXJ5IGBwYXRjaGVsZmAiKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBk
ZXN0aW5hdGlvbl9kaXIsIGJ1aWxkX3BhdGg9Tm9uZSk6CiAgICAgICAgIHNlbGYuX2Rlc3RpbmF0
aW9uX2RpciA9IGRlc3RpbmF0aW9uX2RpcgotICAgICAgICBzZWxmLl9zaG91bGRfc3RyaXBfb2Jq
ZWN0cyA9IHNob3VsZF9zdHJpcF9vYmplY3RzCisgICAgICAgIHNlbGYuX2hhc19wYXRjaGVkX2lu
dGVycHJldGVyX3JlbHBhdGggPSBGYWxzZQorICAgICAgICBzZWxmLl9idWlsZF9wYXRoID0gYnVp
bGRfcGF0aAorICAgICAgICBzZWxmLl9zaG91bGRfdXNlX3N5c19saWJfZGlyZWN0b3J5ID0gRmFs
c2UKKworICAgIGRlZiBfaXNfc3lzdGVtX2RlcChzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgc2Vs
Zi5fYnVpbGRfcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgV2UgZG9uJ3QgY29uc2lk
ZXIgbGlid3BlIGFuZCBsaWJXUEVCYWNrZW5kLWZkbyBzeXNsaWJzIChldmVuIHdoZW4gdGhvc2Ug
YXJlIG5vdCBidWlsdCBkaXJlY3RseSkuIE5laXRoZXIgZGxvcGVud3JhcAorICAgICAgICAgICAg
aWYgYW55KHAgaW4gcGF0aC5sb3dlcigpIGZvciBwIGluIFsnbGlid3BlJywgJ2Rsb3BlbndyYXAn
XSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1cm4gbm90
IHBhdGguc3RhcnRzd2l0aChzZWxmLl9idWlsZF9wYXRoKQorICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgIGRlZiBzZXRfdXNlX3N5c19saWJfZGlyZWN0b3J5KHNlbGYsIHNob3VsZF91c2Vfc3lz
X2xpYl9kaXJlY3RvcnkpOgorICAgICAgICBzZWxmLl9zaG91bGRfdXNlX3N5c19saWJfZGlyZWN0
b3J5ID0gc2hvdWxkX3VzZV9zeXNfbGliX2RpcmVjdG9yeQorCisgICAgZGVmIGNvcHlfYW5kX21h
eWJlX3N0cmlwX3BhdGNoZWxmKHNlbGYsIG9yaWdfZmlsZSwgdHlwZT0nYmluJywgc3RyaXA9VHJ1
ZSwgcGF0Y2hlbGZfcmVtb3ZlcnBhdGg9VHJ1ZSwgcGF0Y2hlbGZfbm9kZWZhdWx0bGliPUZhbHNl
LCBwYXRjaGVsZl9zZXRpbnRlcnByZXRlcl9yZWxhdGl2ZXBhdGg9Tm9uZSwgb2JqZWN0X2ZpbmFs
X2Rlc3RpbmF0aW9uX2Rpcj1Ob25lKToKKyAgICAgICAgIiIiIFRoaXMgZG9lcyB0aGUgZm9sbG93
aW5nOgorICAgICAgICAgICAgMS4gQ29waWVzIHRoZSBiaW5hcnkvbGliIChvYmplY3QpCisgICAg
ICAgICAgICAyLiBPcHRpb25hbGx5IHJ1bnMgcGF0Y2hlbGYgd2l0aCBkaWZmZXJlbnQgcGFyYW1l
dGVycworICAgICAgICAgICAgMy4gT3B0aW9uYWxseSBzdHJpcHMgdGhlIGJpbmFyeQorICAgICAg
ICAgICAgSWYgdGhlIGZpbGUgaXMgYSBzeW1saW5rIHBvaW50aW5nIGFub3RoZXIgZmlsZSB0aGVu
IHRoZSBzeW1saW5rIGlzIHByZXNlcnZlZCAoY29weWluZyB0aGUgZmlsZSBwb2ludGVkKQorICAg
ICAgICAiIiIKIAotICAgIGRlZiBkZXN0aW5hdGlvbl9kaXIoc2VsZik6Ci0gICAgICAgIHJldHVy
biBzZWxmLl9kZXN0aW5hdGlvbl9kaXIKLQotICAgIGRlZiBjb3B5X2FuZF9yZW1vdmVfcnBhdGgo
c2VsZiwgb3JpZ19maWxlLCB0eXBlPSdiaW4nLCBkZXN0aW5hdGlvbl9kaXI9Tm9uZSk6CiAgICAg
ICAgIGRpcl9zdWZmaXggPSAnbGliJyBpZiB0eXBlID09ICdpbnRlcnByZXRlcicgZWxzZSB0eXBl
Ci0gICAgICAgIGRlc3RpbmF0aW9uX2RpciA9IG9zLnBhdGguam9pbihzZWxmLl9kZXN0aW5hdGlv
bl9kaXIsIGRpcl9zdWZmaXgpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGRlc3RpbmF0
aW9uX2Rpcik6Ci0gICAgICAgICAgICBvcy5tYWtlZGlycyhkZXN0aW5hdGlvbl9kaXIpCisgICAg
ICAgIGlmIG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIgaXMgTm9uZToKKyAgICAgICAgICAg
IG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIgPSBzZWxmLl9kZXN0aW5hdGlvbl9kaXIKKyAg
ICAgICAgICAgICMgSWYgc2V0X3VzZV9zeXNfbGliX2RpcmVjdG9yeSgpIGlzIGVuYWJsZWQgdGhl
biBzeXN0ZW0gbGlicmFyaWVzIGFyZSBzaGlwcGVkIGluICRST09UL3N5cy9saWIgdG8gYWxsb3cg
dG8gcmVkaXN0cmlidXRlIHRoZW0gc2VwYXJhdGVseS4KKyAgICAgICAgICAgICMgSG93ZXZlciwg
dGhlIGludGVycHJldGVyIGlzIGFsd2F5cyBzaGlwcGVkIGluICRST09UL2xpYiBhbmQgYWxsIHRo
ZSBiaW5hcmllcyBhcmUgYWx3YXlzIHNoaXBwZWQgaW4gJFJPT1QvYmluCisgICAgICAgICAgICAj
IEV2ZW4gd2hlbiB0aGV5IGFyZSBzeXN0ZW1fZGVwcyBiZWNhdXNlIG9mIHBhdGNoZWxmX3NldGlu
dGVycHJldGVyX3JlbGF0aXZlcGF0aAorICAgICAgICAgICAgaWYgc2VsZi5fc2hvdWxkX3VzZV9z
eXNfbGliX2RpcmVjdG9yeSBhbmQgc2VsZi5faXNfc3lzdGVtX2RlcChvcmlnX2ZpbGUpIGFuZCB0
eXBlIG5vdCBpbiBbJ2ludGVycHJldGVyJywgJ2JpbiddOgorICAgICAgICAgICAgICAgIG9iamVj
dF9maW5hbF9kZXN0aW5hdGlvbl9kaXIgPSBvcy5wYXRoLmpvaW4ob2JqZWN0X2ZpbmFsX2Rlc3Rp
bmF0aW9uX2RpciwgJ3N5cycpCisgICAgICAgICAgICBvYmplY3RfZmluYWxfZGVzdGluYXRpb25f
ZGlyID0gb3MucGF0aC5qb2luKG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIsIGRpcl9zdWZm
aXgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKG9iamVjdF9maW5hbF9kZXN0aW5hdGlv
bl9kaXIpOgorICAgICAgICAgICAgb3MubWFrZWRpcnMob2JqZWN0X2ZpbmFsX2Rlc3RpbmF0aW9u
X2RpcikKIAogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUob3JpZ19maWxlKToKICAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0NhbiBub3QgZmluZCBmaWxlICVzJyAlIG9yaWdfZmls
ZSkKIAogICAgICAgICBfbG9nLmluZm8oJ0FkZCB0byBidW5kbGUgWyVzXTogJXMnICUgKHR5cGUs
IG9yaWdfZmlsZSkpCisKKyAgICAgICAgIyBQcmVzZXJ2ZSBzeW1saW5rcyBhbmQgY29weSB0aGUg
dGFyZ2V0cworICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhvcmlnX2ZpbGUpOgorICAgICAgICAg
ICAgc3ltbGlua19zcmNfZmlsZSA9IG9zLnBhdGgucmVhbHBhdGgob3JpZ19maWxlKQorICAgICAg
ICAgICAgc3ltbGlua19zcmNfYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHN5bWxpbmtfc3Jj
X2ZpbGUpCisgICAgICAgICAgICBzeW1saW5rX2RzdF9iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5h
bWUob3JpZ19maWxlKQorICAgICAgICAgICAgc3ltbGlua19kc3RfZnVsbHBhdGggPSBvcy5wYXRo
LmpvaW4ob2JqZWN0X2ZpbmFsX2Rlc3RpbmF0aW9uX2Rpciwgc3ltbGlua19kc3RfYmFzZW5hbWUp
CisgICAgICAgICAgICBpZiBzeW1saW5rX3NyY19iYXNlbmFtZSAhPSBzeW1saW5rX2RzdF9iYXNl
bmFtZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICMgc3ltbGlu
a19kc3RfZnVsbHBhdGggLT4gc3ltbGlua19zcmNfYmFzZW5hbWUKKyAgICAgICAgICAgICAgICAg
ICAgb3Muc3ltbGluayhzeW1saW5rX3NyY19iYXNlbmFtZSwgc3ltbGlua19kc3RfZnVsbHBhdGgp
CisgICAgICAgICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgICAgICAg
ICAgICAgcHJldmlvdXNfc3ltbGlua19zcmNfcGF0aCA9IG9zLnBhdGgucmVhbHBhdGgoc3ltbGlu
a19kc3RfZnVsbHBhdGgpCisgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzX3N5bWxpbmtfc3Jj
X2Jhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwcmV2aW91c19zeW1saW5rX3NyY19wYXRoKQor
ICAgICAgICAgICAgICAgICAgICBpZiBwcmV2aW91c19zeW1saW5rX3NyY19iYXNlbmFtZSAhPSBz
eW1saW5rX3NyY19iYXNlbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRp
bWVFcnJvcignTm90IG92ZXJ3cml0aW5nIHByZXZpb3VzIHN5bWxpbmsgJXMgcG9pbnRpbmcgdG8g
JXMgd2l0aCBhIHN5bWxpbmsgcG9pbnRpbmcgdG8gJXMnICUgKHN5bWxpbmtfZHN0X2Z1bGxwYXRo
LCBwcmV2aW91c19zeW1saW5rX3NyY19iYXNlbmFtZSwgc3ltbGlua19zcmNfYmFzZW5hbWUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvcHlfYW5kX21heWJlX3N0cmlwX3BhdGNoZWxm
KHN5bWxpbmtfc3JjX2ZpbGUsIHR5cGUsIHN0cmlwLCBwYXRjaGVsZl9yZW1vdmVycGF0aCwgcGF0
Y2hlbGZfbm9kZWZhdWx0bGliLCBwYXRjaGVsZl9zZXRpbnRlcnByZXRlcl9yZWxhdGl2ZXBhdGgs
IG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIpCisKICAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgc2h1dGlsLmNvcHkob3JpZ19maWxlLCBkZXN0aW5hdGlvbl9kaXIpCisgICAgICAgICAgICBz
aHV0aWwuY29weShvcmlnX2ZpbGUsIG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIpCiAgICAg
ICAgIGV4Y2VwdCBzaHV0aWwuU2FtZUZpbGVFcnJvcjoKICAgICAgICAgICAgICMgTWF5IHJlYXNv
bmFibHkgaGFwcGVuIGlmIHRoZSBjYWxsZXIgdHJpZXMgdG8gYnVuZGxlIHRoZSBmaWxlcyAnaW4g
cGxhY2UnLgogICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIHBhdGNoX2VsZl9jb21tYW5kID0g
WydwYXRjaGVsZicsICctLXJlbW92ZS1ycGF0aCcsIG9zLnBhdGguam9pbihkZXN0aW5hdGlvbl9k
aXIsIG9zLnBhdGguYmFzZW5hbWUob3JpZ19maWxlKSldCi0gICAgICAgIGlmIHN1YnByb2Nlc3Mu
Y2FsbChwYXRjaF9lbGZfY29tbWFuZCkgIT0gMDoKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1Ro
ZSBwYXRjaGVsZiBjb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cycpCisgICAgICAgIGlm
IHR5cGUgPT0gJ2ludGVycHJldGVyJzoKKyAgICAgICAgICAgIHJldHVybiAgIyBubyBzdHJpcC9w
YXRjaGVsZiBvdmVyIGl0CisKKyAgICAgICAgIyBSdW5uaW5nICdzdHJpcCcgYWZ0ZXIgJ3BhdGNo
ZWxmJyBtYXkgY29ycnVwdCBiaW5hcmllcywgc28gcnVuIGZpcnN0ICdzdHJpcCcuCisgICAgICAg
ICMgU2VlOiBodHRwczovL2dpdGh1Yi5jb20vTml4T1MvcGF0Y2hlbGYvaXNzdWVzLzM3MQorICAg
ICAgICBpZiBzdHJpcDoKKyAgICAgICAgICAgIGlmIG5vdCBzaHV0aWwud2hpY2goJ3N0cmlwJyk6
CisgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdVbmFibGUgdG8gZmluZCB0aGUgc3RyaXAg
Y29tbWFuZCBpbiB0aGUgc3lzdGVtLiBQbGVhc2UgaW5zdGFsbCBpdC4nKQorICAgICAgICAgICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbignTWlzc2luZyByZXF1aXJlZCBwcm9ncmFtICJzdHJpcCInKQor
ICAgICAgICAgICAgc3RyaXBfY29tbWFuZCA9IFsnc3RyaXAnLCAnLS1zdHJpcC11bm5lZWRlZCcs
IG9zLnBhdGguam9pbihvYmplY3RfZmluYWxfZGVzdGluYXRpb25fZGlyLCBvcy5wYXRoLmJhc2Vu
YW1lKG9yaWdfZmlsZSkpXQorICAgICAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKHN0cmlwX2Nv
bW1hbmQpICE9IDA6CisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignVGhlIHN0cmlwIGNvbW1h
bmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzJykKKworICAgICAgICBwYXRjaGVsZl9hcmd1bWVu
dHMgPSBbXQorICAgICAgICBpZiBwYXRjaGVsZl9yZW1vdmVycGF0aDoKKyAgICAgICAgICAgIHBh
dGNoZWxmX2FyZ3VtZW50cy5hcHBlbmQoIi0tcmVtb3ZlLXJwYXRoIikKKyAgICAgICAgaWYgdHlw
ZSA9PSAnYmluJzoKKyAgICAgICAgICAgIGlmIHBhdGNoZWxmX25vZGVmYXVsdGxpYjoKKyAgICAg
ICAgICAgICAgICBwYXRjaGVsZl9hcmd1bWVudHMuYXBwZW5kKCItLW5vLWRlZmF1bHQtbGliIikK
KyAgICAgICAgICAgIGlmIHBhdGNoZWxmX3NldGludGVycHJldGVyX3JlbGF0aXZlcGF0aDoKKyAg
ICAgICAgICAgICAgICBwcmV2aW91c19jd2QgPSBvcy5nZXRjd2QoKQorICAgICAgICAgICAgICAg
IG9zLmNoZGlyKHNlbGYuZGVzdGluYXRpb25fZGlyKCkpCisgICAgICAgICAgICAgICAgIyBXZSBv
bmx5IHdhbnQgdGhlIGJhc2VuYW1lIG9mIHRoZSBpbnRlcnByZXRlciBiZWNhdXNlIHdlIGFyZSB1
cGRhdGluZyBpdAorICAgICAgICAgICAgICAgICMgdG8gdXNlIGEgcmVsYXRpdmUgcGF0aCBpbnNp
ZGUgbGliLyAod2hpY2ggaXMgd2VyZSB3ZSBjb3BpZWQgaXQgcHJldmlvdXNseSkKKyAgICAgICAg
ICAgICAgICBuZXdfaW50ZXJwcmV0ZXJfcmVscGF0aCA9IG9zLnBhdGguam9pbignbGliJywgb3Mu
cGF0aC5iYXNlbmFtZShwYXRjaGVsZl9zZXRpbnRlcnByZXRlcl9yZWxhdGl2ZXBhdGgpKQorICAg
ICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShuZXdfaW50ZXJwcmV0ZXJfcmVscGF0
aCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWJsZSB0byBmaW5k
IGludGVycHJldGVyICVzIGF0IGRpcmVjdG9yeSAlcycgJSAobmV3X2ludGVycHJldGVyLCBzZWxm
LmRlc3RpbmF0aW9uX2RpcigpKSkKKyAgICAgICAgICAgICAgICBwYXRjaGVsZl9hcmd1bWVudHMu
ZXh0ZW5kKFsnLS1zZXQtaW50ZXJwcmV0ZXInLCBuZXdfaW50ZXJwcmV0ZXJfcmVscGF0aF0pCisg
ICAgICAgICAgICAgICAgc2VsZi5faGFzX3BhdGNoZWRfaW50ZXJwcmV0ZXJfcmVscGF0aCA9IFRy
dWUKKyAgICAgICAgaWYgcGF0Y2hlbGZfYXJndW1lbnRzOgorICAgICAgICAgICAgIyBJZiB3ZSBo
YXZlIHJlc29sdmVkIHBhdGNoZWxmX2FyZ3VtZW50cyB0aGVuIHdlIHNob3VsZCBydW4gcGF0Y2hl
bGYKKyAgICAgICAgICAgIHBhdGNoZWxmX2FyZ3VtZW50cy5hcHBlbmQob3MucGF0aC5qb2luKG9i
amVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIsIG9zLnBhdGguYmFzZW5hbWUob3JpZ19maWxlKSkp
CisgICAgICAgICAgICBpZiBub3Qgc2h1dGlsLndoaWNoKCdwYXRjaGVsZicpOgorICAgICAgICAg
ICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVW5hYmxlIHRvIGZpbmQgdGhlICJwYXRjaGVsZiIg
Y29tbWFuZCBpbiB0aGUgc3lzdGVtLiBQbGVhc2UgaW5zdGFsbCBpdC4nKQorICAgICAgICAgICAg
aWYgc3VicHJvY2Vzcy5jYWxsKFsncGF0Y2hlbGYnXSArIHBhdGNoZWxmX2FyZ3VtZW50cykgIT0g
MDoKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RoZSAicGF0Y2hlbGYiIGNv
bW1hbmQgd2l0aCBhcmd1bWVudHMgIiVzIiByZXR1cm5lZCBub24temVybyBzdGF0dXMnICUgJyAn
LmpvaW4ocGF0Y2hlbGZfYXJndW1lbnRzKSkKKworICAgICAgICAgICAgaWYgcGF0Y2hlbGZfc2V0
aW50ZXJwcmV0ZXJfcmVsYXRpdmVwYXRoOgorICAgICAgICAgICAgICAgIG9zLmNoZGlyKHByZXZp
b3VzX2N3ZCkKIAotICAgICAgICBpZiBzZWxmLl9zaG91bGRfc3RyaXBfb2JqZWN0czoKLSAgICAg
ICAgICAgIGlmIHNodXRpbC53aGljaCgnc3RyaXAnKToKLSAgICAgICAgICAgICAgICBzdHJpcF9j
b21tYW5kID0gWydzdHJpcCcsICctLXN0cmlwLXVubmVlZGVkJywgb3MucGF0aC5qb2luKGRlc3Rp
bmF0aW9uX2Rpciwgb3MucGF0aC5iYXNlbmFtZShvcmlnX2ZpbGUpKV0KLSAgICAgICAgICAgICAg
ICBpZiBzdWJwcm9jZXNzLmNhbGwoc3RyaXBfY29tbWFuZCkgIT0gMDoKLSAgICAgICAgICAgICAg
ICAgICAgX2xvZy5lcnJvcignVGhlIHN0cmlwIGNvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3Rh
dHVzJykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdz
dHJpcCBub3QgZm91bmQuIE5vdCBzdHJpcHBpbmcgb2JqZWN0JykKKyAgICBkZWYgZGVzdGluYXRp
b25fZGlyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGVzdGluYXRpb25fZGlyCiAKICAg
ICBkZWYgZ2VuZXJhdGVfd3JhcHBlcl9zY3JpcHQoc2VsZiwgaW50ZXJwcmV0ZXIsIGJpbmFyeV90
b193cmFwLCBleHRyYV9lbnZpcm9ubWVudF92YXJpYWJsZXM9e30pOgogICAgICAgICBpZiBub3Qg
b3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNlbGYuX2Rlc3RpbmF0aW9uX2RpciwgJ2Jpbics
IGJpbmFyeV90b193cmFwKSk6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0Nhbm5v
dCBmaW5kIGJpbmFyeSB0byB3cmFwIGZvciAlcycgJSBiaW5hcnlfdG9fd3JhcCkKICAgICAgICAg
X2xvZy5pbmZvKCdHZW5lcmF0ZSB3cmFwcGVyIHNjcmlwdCAlcycgJSBiaW5hcnlfdG9fd3JhcCkK
ICAgICAgICAgc2NyaXB0X2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fZGVzdGluYXRpb25fZGly
LCBiaW5hcnlfdG9fd3JhcCkKKyAgICAgICAgbGliX2RpciA9IG9zLnBhdGguam9pbihzZWxmLl9k
ZXN0aW5hdGlvbl9kaXIsICdsaWInKQorICAgICAgICBzeXNsaWJfZGlyID0gb3MucGF0aC5qb2lu
KHNlbGYuX2Rlc3RpbmF0aW9uX2RpciwgJ3N5cy9saWInKQorICAgICAgICBiaW5fZGlyID0gb3Mu
cGF0aC5qb2luKHNlbGYuX2Rlc3RpbmF0aW9uX2RpciwgJ2JpbicpCisgICAgICAgIHNoYXJlX2Rp
ciA9IG9zLnBhdGguam9pbihzZWxmLl9kZXN0aW5hdGlvbl9kaXIsICdzeXMvc2hhcmUnKQogCiAg
ICAgICAgIHdpdGggb3BlbihzY3JpcHRfZmlsZSwgJ3cnKSBhcyBzY3JpcHRfaGFuZGxlOgogICAg
ICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnIyEvYmluL3NoXG4nKQogICAgICAgICAgICAg
c2NyaXB0X2hhbmRsZS53cml0ZSgnJXM9IiQoZGlybmFtZSAkKHJlYWRsaW5rIC1mICQwKSkiXG4n
ICUgc2VsZi5WQVJfTVlESVIpCi0gICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdleHBv
cnQgTERfTElCUkFSWV9QQVRIPSIkeyVzfS9saWIiXG4nICUgc2VsZi5WQVJfTVlESVIpCiAKLSAg
ICAgICAgICAgIGlmIGludGVycHJldGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNj
cmlwdF9oYW5kbGUud3JpdGUoJ0lOVEVSUFJFVEVSPSIkeyVzfS9saWIvJXMiXG4nICUgKHNlbGYu
VkFSX01ZRElSLCBvcy5wYXRoLmJhc2VuYW1lKGludGVycHJldGVyKSkpCisgICAgICAgICAgICBp
ZiBzZWxmLl9oYXNfcGF0Y2hlZF9pbnRlcnByZXRlcl9yZWxwYXRoOgorICAgICAgICAgICAgICAg
ICMgVGhlIGludGVycHJlcnRlciAoc2VjdGlvbiBQVF9JTlRFUlAgaW4gRUxGIGJpbmFyeSkgbmVl
ZHMgdG8gYmUgYSBwcmUtZGVmaW5lZCBwYXRoCisgICAgICAgICAgICAgICAgIyBTbyB0aGUgb25s
eSB3YXkgb2YgdXNpbmcgb3VyIGludGVycHJldGVyIGluIGFuIHVua25vd24gZGVzdGluYXRpb24g
ZGlyIGlzIHRvIHVzZSByZWxhdGl2ZSBwYXRocworICAgICAgICAgICAgICAgICMgRm9yIHJlbGF0
aXZlIHBhdGhzIHRvIHdvcmssIHdlIG5lZWQgdG8gQ0QgaW50byB0aGUgbWFpbiBiYXNlZGlyLCBi
dXQgZG9pbmcgdGhhdCBtYXkgYnJlYWsKKyAgICAgICAgICAgICAgICAjIGFueSBwYXJhbWV0ZXIg
dGhlIHVzZXIgaGFzIHBhc3NlZCBhcyBhIHJlbGF0aXZlIHBhdGggdG8gd2hlcmUgc2hlIGlzIHdv
cmtpbmcgKGxpa2UgYSByZWxwYXRoIHRvIHNvbWUgaHRtbCBmaWxlKQorICAgICAgICAgICAgICAg
ICMgU28gd2UgdHJ5IHRvIHVwZGF0ZSB0aGUgYXJndW1lbnRzIHJlc29sdmluZyByZWxhdGl2ZSBw
YXRocyB0byBhYnNvbHV0ZSBiZWZvcmUgZXhlY3V0aW5nIHRoZSBwcm9ncmFtCisgICAgICAgICAg
ICAgICAgIyBUcmljayB0byB1cGRhdGUgdGhlIGFyZ3VtZW50cyBpbnNwaXJlZCBmcm9tIGh0dHBz
Oi8vdW5peC5zdGFja2V4Y2hhbmdlLmNvbS9hLzQyMTE2MAorICAgICAgICAgICAgICAgIHNjcmlw
dF9oYW5kbGUud3JpdGUoJyMgU2hpcHBlZCBiaW5hcmllcyBoYXZlIGEgcmVscGF0aCB0byB0aGUg
aW50ZXJwcmV0ZXIsIHNvIHVwZGF0ZSBwYXNzZWQgYXJncyB3aXRoIGZ1bGxwYXRocyBhbmQgY2Qg
dG8gJHtNWURJUn1cbicpCisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnYXJn
c191cGRhdGVfcmVscGF0aHNfdG9fYWJzKCkge1xuJykKKyAgICAgICAgICAgICAgICBzY3JpcHRf
aGFuZGxlLndyaXRlKCcgICAgZm9yIGFyZyBpbiAiJEAiOyBkb1xuJykKKyAgICAgICAgICAgICAg
ICBzY3JpcHRfaGFuZGxlLndyaXRlKCcgICAgICBbIC1lICIke2FyZ30iIC1hICIke2FyZ30iICE9
ICIke2EjL30iIF0gJiYgYXJnPSIkKHJlYWRsaW5rIC1mICIke2FyZ30iKSJcbicpCisgICAgICAg
ICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnICAgICAgcHJpbnRmICVzICIke2FyZ30iIHwg
c2VkICJzL1wnL1wnXFxcXFxcXFxcJ1wnL2c7MXMvXi9cJy87XFwkcy9cXCQvXCcgLyJcbicpCisg
ICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnICAgIGRvbmVcbicpCisgICAgICAg
ICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnZWNobyAiICJcbicpCisgICAgICAgICAgICAg
ICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnfVxuJykKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFu
ZGxlLndyaXRlKCdldmFsICJzZXQgLS0gIiQoYXJnc191cGRhdGVfcmVscGF0aHNfdG9fYWJzICIk
QCIpIiJcbicpCisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnY2QgIiR7TVlE
SVJ9IlxuJykKKworICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNo
YXJlX2RpciwgJ2NlcnRzL2J1bmRsZS1jYS1jZXJ0aWZpY2F0ZXMucGVtJykpOgorICAgICAgICAg
ICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJyMgVHJ5IHRvIHVzZSB0aGUgc3lzdGVtIENBIGZp
bGUgaWYgcG9zc2libGUsIG90aGVyd2lzZSB1c2UgdGhlIGJ1bmRsZWQgb25lXG4nKQorICAgICAg
ICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2ZvciBXRUJLSVRfVExTX0NBRklMRV9QRU0g
aW4gL2V0Yy9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCAvZXRjL3NzbC9jZXJ0LnBlbSAv
ZXRjL3BraS9jYS10cnVzdC9leHRyYWN0ZWQvcGVtL3Rscy1jYS1idW5kbGUucGVtICIke01ZRElS
fS9zeXMvc2hhcmUvY2VydHMvYnVuZGxlLWNhLWNlcnRpZmljYXRlcy5wZW0iOyBkb1xuJykKKyAg
ICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCcgICAgWyAtZiAiJHtXRUJLSVRfVExT
X0NBRklMRV9QRU19IiBdICYmIGdyZXAgLXEgIkJFR0lOIENFUlRJRklDQVRFIiAiJHtXRUJLSVRf
VExTX0NBRklMRV9QRU19IiAmJiBleHBvcnQgV0VCS0lUX1RMU19DQUZJTEVfUEVNICYmIGJyZWFr
XG4nKQorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2RvbmVcbicpCiAKLSAg
ICAgICAgICAgICMgTWF5IHVzZSB0aGUgdmFsdWUgb2YgSU5URVJQUkVURVIsIHNvIGhhcyB0byBj
b21lIGFmdGVyCi0gICAgICAgICAgICAjIHRoZSBkZWZpbml0aW9uLgogICAgICAgICAgICAgZm9y
IHZhciwgdmFsdWUgaW4gZXh0cmFfZW52aXJvbm1lbnRfdmFyaWFibGVzLml0ZW1zKCk6Ci0gICAg
ICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnZXhwb3J0ICVzPVwiJXNcIlxuJyAlICh2
YXIsIHZhbHVlKSkKLQotICAgICAgICAgICAgaWYgaW50ZXJwcmV0ZXIgaXMgbm90IE5vbmU6Ci0g
ICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnZXhlYyAiJHtJTlRFUlBSRVRFUn0i
ICIkeyVzfS9iaW4vJXMiICIkQCJcbicgJSAoc2VsZi5WQVJfTVlESVIsIGJpbmFyeV90b193cmFw
KSkKLSAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0
ZSgnZXhwb3J0ICVzPSIlcyJcbicgJSAodmFyLCB2YWx1ZSkpCisKKyAgICAgICAgICAgIGlmIG9z
LnBhdGguaXNkaXIoc3lzbGliX2Rpcik6CisgICAgICAgICAgICAgICAgIyBQcmVmZmVyIHRvIHVz
ZSB0aGUgc3lzdGVtIFhLQiBkYXRhIGZpbGVzLCBidXQgaWYgdGhleSBhcmUgbm90IG9uIHRoZSBl
eHBlY3RlZCBsb2NhdGlvbiB1c2Ugb3VyIG93bi4KKyAgICAgICAgICAgICAgICB4a2JfYnVuZGxl
ZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZm9yIGVudHJ5IGluIG9zLmxpc3RkaXIoc3lzbGli
X2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGlmIGVudHJ5LnN0YXJ0c3dpdGgoJ2xpYnhrYmNv
bW1vbi5zbycpOgorICAgICAgICAgICAgICAgICAgICAgICAgeGtiX2J1bmRsZWQgPSBUcnVlCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIHhrYl9idW5k
bGVkOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpv
aW4oc2hhcmVfZGlyLCAneGtiJykpCisgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUu
d3JpdGUoJ1sgLWQgL3Vzci9zaGFyZS9YMTEveGtiIF0gfHwgZXhwb3J0IFhLQl9DT05GSUdfUk9P
VD0iJHslc30vc3lzL3NoYXJlL3hrYiJcbicgJSBzZWxmLlZBUl9NWURJUikKKworICAgICAgICAg
ICAgbGRfbGlicmFyeV9wYXRoID0gJyR7JXN9L2xpYicgJSBzZWxmLlZBUl9NWURJUgorICAgICAg
ICAgICAgaWYgb3MucGF0aC5pc2RpcihzeXNsaWJfZGlyKToKKyAgICAgICAgICAgICAgICBsZF9s
aWJyYXJ5X3BhdGggKz0gJzokeyVzfS9zeXMvbGliJyAlIHNlbGYuVkFSX01ZRElSCisKKyAgICAg
ICAgICAgICMgVXBkYXRlIGNhY2hlIG9mIGdkay1waXhidWYgbG9hZGVycyBpZiBuZWVkZWQgKGZp
cnN0IHJ1biBvciB3aGVuIHRoZSBhYnNvbHV0ZSBwYXRocyBvbiBkaXNrIGhhdmUgY2hhbmdlZCku
CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihzeXNsaWJfZGlyLCAn
Z2RrLXBpeGJ1Zi9sb2FkZXJzJykpOgorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3Jp
dGUoJ2V4cG9ydCBHREtfUElYQlVGX01PRFVMRURJUj0iJHslc30vc3lzL2xpYi9nZGstcGl4YnVm
L2xvYWRlcnMiXG4nICUgc2VsZi5WQVJfTVlESVIpCisgICAgICAgICAgICAgICAgc2NyaXB0X2hh
bmRsZS53cml0ZSgnZXhwb3J0IEdES19QSVhCVUZfTU9EVUxFX0ZJTEU9IiR7JXN9L3N5cy9saWIv
Z2RrLXBpeGJ1Zi9sb2FkZXJzLmNhY2hlIlxuJyAlIHNlbGYuVkFSX01ZRElSKQorICAgICAgICAg
ICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2dyZXAgLXNxICJcXCIke0dES19QSVhCVUZfTU9E
VUxFRElSfS8iICIke0dES19QSVhCVUZfTU9EVUxFX0ZJTEV9IiB8fCBMRF9MSUJSQVJZX1BBVEg9
IiVzIiAiJHslc30vYmluL2dkay1waXhidWYtcXVlcnktbG9hZGVycyIgLS11cGRhdGUtY2FjaGVc
bicgJSAobGRfbGlicmFyeV9wYXRoLCBzZWxmLlZBUl9NWURJUikpCisKKyAgICAgICAgICAgICMg
U2FtZSBmb3IgZ3RrIGltbW9kdWxlcyBjYWNoZQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rp
cihvcy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2d0ay9pbW1vZHVsZXMnKSk6CisgICAgICAgICAg
ICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnZXhwb3J0IEdUS19JTV9NT0RVTEVfRElSPSIkeyVz
fS9zeXMvbGliL2d0ay9pbW1vZHVsZXMiXG4nICUgc2VsZi5WQVJfTVlESVIpCisgICAgICAgICAg
ICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnZXhwb3J0IEdUS19JTV9NT0RVTEVfRklMRT0iJHsl
c30vc3lzL2xpYi9ndGsvaW1tb2R1bGVzL2ltbW9kdWxlcy5jYWNoZSJcbicgJSBzZWxmLlZBUl9N
WURJUikKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdncmVwIC1zcSAiXFwi
JHtHVEtfSU1fTU9EVUxFX0RJUn0vIiAiJHtHVEtfSU1fTU9EVUxFX0ZJTEV9IiB8fCBMRF9MSUJS
QVJZX1BBVEg9IiVzIiAiJHslc30vYmluL2d0ay1xdWVyeS1pbW1vZHVsZXMtMy4wIiAtLXVwZGF0
ZS1jYWNoZSAiJHtHVEtfSU1fTU9EVUxFX0RJUn0iLyouc29cbicgJSAobGRfbGlicmFyeV9wYXRo
LCBzZWxmLlZBUl9NWURJUikpCisKKyAgICAgICAgICAgICMgTERfTElCUkFSWV9QQVRIIGlzIHNl
dCBhdCB0aGUgZW5kLCBqdXN0IGJlZm9yZSB0aGUgZXhlYygpIGNhbGwgYW5kIGJlZm9yZSBjYWxs
aW5nIHByb2dyYW1zIGJ1bmRsZWQsIG90aGVyd2lzZSBpdCBtYXkgYnJlYWsgY29tbWFuZHMgZnJv
bSB0aGUgc3lzdGVtIGxpa2Ugc2NyaXB0J3MgdXNhZ2Ugb2Ygc2VkL3JlYWRsaW5rL2dyZXAKKyAg
ICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2V4cG9ydCBMRF9MSUJSQVJZX1BBVEg9IiVz
IlxuJyAlIGxkX2xpYnJhcnlfcGF0aCkKKyAgICAgICAgICAgIGRsb3BlbndyYXBfbGlibmFtZSA9
ICdkbG9wZW53cmFwLnNvJworICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5q
b2luKGxpYl9kaXIsIGRsb3BlbndyYXBfbGlibmFtZSkpOgorICAgICAgICAgICAgICAgIHNjcmlw
dF9oYW5kbGUud3JpdGUoJ2V4cG9ydCBMRF9QUkVMT0FEPSIkeyVzfS9saWIvJXMiXG4nICUgKHNl
bGYuVkFSX01ZRElSLCBkbG9wZW53cmFwX2xpYm5hbWUpKQorICAgICAgICAgICAgIyBJZiB3ZSBo
YXZlIHBhdGNoZWQgdGhlIGJpbmFyaWVzIHRvIHVzZSBhIHJlbGF0aXZlIHJlbHBhdGggdGhlbiBs
b2FkIHRoZSBiaW5hcnkgZGlyZWN0bHkgd2l0aG91dCBwcmVmaXhpbmcgaXQgd2l0aCB0aGUgaW50
ZXJwcmV0ZXIgKGl0IGFsbG93cyB0aGUgcHJvY2VzcyB0byB1c2UgdGhlIGNvcnJlY3QgcHJvZ25h
bWUpCisgICAgICAgICAgICBpZiBzZWxmLl9oYXNfcGF0Y2hlZF9pbnRlcnByZXRlcl9yZWxwYXRo
OgogICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2V4ZWMgIiR7JXN9L2Jpbi8l
cyIgIiRAIlxuJyAlIChzZWxmLlZBUl9NWURJUiwgYmluYXJ5X3RvX3dyYXApKQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdJTlRFUlBSRVRF
Uj0iJHslc30vbGliLyVzIlxuJyAlIChzZWxmLlZBUl9NWURJUiwgb3MucGF0aC5iYXNlbmFtZShp
bnRlcnByZXRlcikpKQorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2V4ZWMg
IiR7SU5URVJQUkVURVJ9IiAiJHslc30vYmluLyVzIiAiJEAiXG4nICUgKHNlbGYuVkFSX01ZRElS
LCBiaW5hcnlfdG9fd3JhcCkpCiAKICAgICAgICAgb3MuY2htb2Qoc2NyaXB0X2ZpbGUsIDBvNzU1
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iaW5hcnlfYnVuZGxpbmcvZGxv
cGVud3JhcC9NYWtlZmlsZSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5n
L2Rsb3BlbndyYXAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDMwNzVjODk0YjAxMDAyZjQyMzhiM2Rj
ZjAxZWUwYzI0M2ExZDgwZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvYmluYXJ5X2J1bmRsaW5nL2Rsb3BlbndyYXAvTWFrZWZpbGUKQEAgLTAsMCArMSwxNiBAQAor
VEhJU19ESVIgOj0gJChzdHJpcCAkKHNoZWxsIGRpcm5hbWUgJChyZWFscGF0aCAkKGxhc3R3b3Jk
ICQoTUFLRUZJTEVfTElTVCkpKSkpCitDQyA9IGdjYworQ0ZMQUdTID0gLWZQSUMgLVdhbGwgLVdl
eHRyYSAtTzIKK0xERkxBR1MgPSAtbm9zdGFydGZpbGVzIC1zaGFyZWQgLWxkbAorUk0gPSBybSAt
ZgorVEFSR0VUX0xJQiA9IGRsb3BlbndyYXAuc28KK1NSQ1MgPSAkKFRISVNfRElSKS9kbG9wZW53
cmFwLmMKKworYWxsOiAke1RBUkdFVF9MSUJ9CisKKyQoVEFSR0VUX0xJQik6ICQoU1JDUykKKwkk
KENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtV2wsLXNvbmFtZSwkQCAtbyAkQCAkXgorCisuUEhP
Tlk6IGNsZWFuCitjbGVhbjoKKwktJHtSTX0gJHtUQVJHRVRfTElCfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9iaW5hcnlfYnVuZGxpbmcvZGxvcGVud3JhcC9SRUFETUUudHh0
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iaW5hcnlfYnVuZGxpbmcvZGxvcGVud3JhcC9SRUFE
TUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmEwZGY2OTI4MDUxMTU0OTE4ODk4OWUyNjdkZDc4ZTA3NGY0NTZi
MTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JpbmFyeV9idW5k
bGluZy9kbG9wZW53cmFwL1JFQURNRS50eHQKQEAgLTAsMCArMSw5IEBACitUaGlzIGlzIGEgc2hh
cmVkIGxpYnJhcnkgdG8gd3JhcCBkbG9wZW4oKSBhbmQgZGxtb3BlbigpIGZ1bmN0aW9uIGNhbGxz
CithbmQgcmV3cml0ZSB0aGUgcGF0aHMgbG9hZGVkIHRvIGVuc3VyZSB0aGF0IHRoZSBsaWJyYXJ5
IGxvYWRlZCBpcyBpbnNpZGUKK0xEX0xJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZXMu
CisKK0l0IGlzIHVzZWQgYnkgdGhlIHNjcmlwdCBnZW5lcmF0ZS1idW5kbGUgdGhhdCBidWlsZHMg
dGhpcyBsaWJyYXJ5IGFuZCBhZGRzCitpdCB0byBiZSBwcmVsb2FkZWQgaW50byB0aGUgd3JhcHBl
ciBzY3JpcHQgdGhhdCBleGVjdXRlcyB0aGUgYnJvd3Nlci4KKworU2V0IHRoZSBlbnZpcm9ubWVu
dCB2YXJpYWJsZSBETE9QRU5fV1JBUF9ERUJVRz0xIG9yIERMT1BFTl9XUkFQX0RFQlVHPTIKK3Rv
IGdldCBlcnJvci9kZWJ1ZyBvdXRwdXQgZnJvbSB0aGlzIGxpYnJhcnkuCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2JpbmFyeV9idW5kbGluZy9kbG9wZW53cmFwL2Rsb3Blbndy
YXAuYyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5nL2Rsb3BlbndyYXAv
ZGxvcGVud3JhcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0ZGUwYmM0ODMxODNiMmQ1ZTFkZTYzY2IzYTk2YjE1
N2Y1ZTNiZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JpbmFy
eV9idW5kbGluZy9kbG9wZW53cmFwL2Rsb3BlbndyYXAuYwpAQCAtMCwwICsxLDMyNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBfR05VX1NPVVJDRQorI2RlZmluZSBfR05VX1NPVVJDRQorI2VuZGlmCisjaW5jbHVk
ZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2lu
Y2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+
CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lz
L3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKwor
I2RlZmluZSBkbG9wZW5fd3JhcHBlcl9wcmludF9lcnJvcl9tc2coZm10LCAuLi4pIFwKKyAgICBk
byB7IFwKKyAgICAgICAgaWYgKGRsb3Blbl93cmFwcGVyX2RlYnVnX3ByaW50ID49IDEpIFwKKyAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiW3BpZD0lZF0gRVJST1IgYXQgZGxvcGVud3JhcC5z
bzogIiBmbXQsIGdldHBpZCgpLCBfX1ZBX0FSR1NfXyk7IFwKKyAgICB9IHdoaWxlICgwKQorCisj
ZGVmaW5lIGRsb3Blbl93cmFwcGVyX3ByaW50X2RlYnVnX21zZyhmbXQsIC4uLikgXAorICAgIGRv
IHsgXAorICAgICAgICBpZiAoZGxvcGVuX3dyYXBwZXJfZGVidWdfcHJpbnQgPj0gMikgXAorICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJbcGlkPSVkXSBkbG9wZW53cmFwLnNvOiAiIGZtdCwg
Z2V0cGlkKCksIF9fVkFfQVJHU19fKTsgXAorICAgIH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQg
ZGxvcGVuX3dyYXBwZXJfZGVidWdfcHJpbnQgPSAtMTsKK3N0YXRpYyBpbnQgZGxvcGVuX3dyYXBw
ZXJfY2FsbF9yZWFsX2RsZXJyb3IgPSAxOworc3RhdGljIGNoYXIqICgqX19yZWFsX2RsZXJyb3Ip
KHZvaWQpID0gTlVMTDsKKworLy8gUmV0dXJucyB0aGUgc3RyaW5nICJkaXJuYW1lL2ZpbGVuYW1l
IiBpbnRvIHRoZSBidWZmZXIgcGF0aF9qb2ludF9kZXN0Cit2b2lkIGRsb3Blbl93cmFwcGVyX3Bh
dGhfam9pbihjb25zdCBjaGFyKiBkaXJuYW1lLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgY2hhciog
cGF0aF9qb2ludF9kZXN0KQoreworICAgIHBhdGhfam9pbnRfZGVzdCA9IHN0cm5jcHkocGF0aF9q
b2ludF9kZXN0LCBkaXJuYW1lLCBQQVRIX01BWCk7CisgICAgLy8gYWRkIGEgc2xhc2ggaWYgbmVl
ZGVkCisgICAgaWYgKCoocGF0aF9qb2ludF9kZXN0ICsgc3RybGVuKGRpcm5hbWUpIC0gMSkgIT0g
Jy8nKSB7CisgICAgICAgICoocGF0aF9qb2ludF9kZXN0ICsgc3RybGVuKGRpcm5hbWUpKSA9ICcv
JzsKKyAgICAgICAgKihwYXRoX2pvaW50X2Rlc3QgKyBzdHJsZW4oZGlybmFtZSkgKyAxKSA9IDA7
CisgICAgfQorICAgIHN0cm5jYXQocGF0aF9qb2ludF9kZXN0LCBmaWxlbmFtZSwgUEFUSF9NQVgp
OworfQorCitpbnQgaXNfZGlyKHVuc2lnbmVkIGNoYXIgZF90eXBlLCBjb25zdCBjaGFyKiBmaWxl
cGF0aCkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworICAgIC8vIHdlIGNvbnNpZGVyIGEg
c3ltYm9saWMgbGluayB0byBhIGRpciBhcyBhIGRpciwgYWxzbyBoYW5kbGUgdW5rbm93bi4KKyAg
ICBpZiAoZF90eXBlID09IERUX1VOS05PV04gfHwgZF90eXBlID09IERUX0xOSykgeworICAgICAg
ICBpZiAoc3RhdChmaWxlcGF0aCwgJnN0YXRidWYpKQorICAgICAgICAgICAgZGxvcGVuX3dyYXBw
ZXJfcHJpbnRfZXJyb3JfbXNnKCJDYWxsaW5nIHN0YXQgb24gXCIlc1wiOiAlc1xuIiwgZmlsZXBh
dGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBTX0lTRElSKHN0YXRidWYuc3Rf
bW9kZSk7CisgICAgfQorICAgIHJldHVybiAoZF90eXBlID09IERUX0RJUik7Cit9CisKKy8vIFJl
Y3Vyc2l2ZSBmdW5jdGlvbiB0byB0cmF2ZXJzZSBhIGRpcmVjdG9yeSBhbmQgb2J0YWluIHRoZSBw
YXRoIG9mIHRoZSBmaXJzdCBmaWxlIG5hbWVkICJmaWxlbmFtZSIKKy8vIEl0IHdyaXRlcyB0aGF0
IHBhdGggdG8gdGhlIGJ1ZmZlciAiY2FuZGlkYXRlX3BhdGhfZGVzdCIgaWYgdGhlIGZpbGUgaXMg
Zm91bmQgKHJldHVybiA9PSAxKS4KKy8vIElmIHRoZSBmaWxlIGlzIG5vdCBmb3VuZCBpdCByZXR1
cm5zIDAgYW5kIHRoZSBjb250ZW50cyBvZiAiY2FuZGlkYXRlX3BhdGhfZGVzdCIgYXJlIHVuZGVm
aW5lZC4KK2ludCBkbG9wZW5fd3JhcHBlcl9yZWN1cnNpdmVfZmluZChjb25zdCBjaGFyKiBmaWxl
bmFtZV90b19maW5kLCBjb25zdCBjaGFyKiBkaXJlY3RvcnlfdG9fc2VhcmNoLCBjaGFyKiBjYW5k
aWRhdGVfcGF0aF9kZXN0KQoreworCisgICAgRElSICpkcDsKKyAgICBzdHJ1Y3QgZGlyZW50KiBl
bnRyeTsKKworICAgIGNoYXIgc3ViZGlyZWN0b3J5X3RvX3NlYXJjaFtQQVRIX01BWF07CisgICAg
ZHAgPSBvcGVuZGlyKGRpcmVjdG9yeV90b19zZWFyY2gpOworCisgICAgaWYgKCFkcCkgeworICAg
ICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9lcnJvcl9tc2coIk9wZW5pbmcgZGlyZWN0b3J5IFwi
JXNcIjogJXNcbiIsIGRpcmVjdG9yeV90b19zZWFyY2gsIHN0cmVycm9yKGVycm5vKSk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGVycm5vID0g
MDsKKyAgICAgICAgZW50cnkgPSByZWFkZGlyKGRwKTsKKyAgICAgICAgaWYgKCFlbnRyeSkgewor
ICAgICAgICAgICAgaWYgKGVycm5vKQorICAgICAgICAgICAgICAgIGRsb3Blbl93cmFwcGVyX3By
aW50X2Vycm9yX21zZygiUmVhZGluZyBkaXJlY3RvcnkgXCIlc1wiOiAlc1xuIiwgZGlyZWN0b3J5
X3RvX3NlYXJjaCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFzdHJjbXAoZW50cnktPmRfbmFtZSwgIi4iKSB8fCAhc3RyY21w
KGVudHJ5LT5kX25hbWUsICIuLiIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ZGxvcGVuX3dyYXBwZXJfcGF0aF9qb2luKGRpcmVjdG9yeV90b19zZWFyY2gsIGVudHJ5LT5kX25h
bWUsIGNhbmRpZGF0ZV9wYXRoX2Rlc3QpOworCisgICAgICAgIGlmIChpc19kaXIoZW50cnktPmRf
dHlwZSwgY2FuZGlkYXRlX3BhdGhfZGVzdCkpIHsKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVy
X3BhdGhfam9pbihkaXJlY3RvcnlfdG9fc2VhcmNoLCBlbnRyeS0+ZF9uYW1lLCBzdWJkaXJlY3Rv
cnlfdG9fc2VhcmNoKTsKKyAgICAgICAgICAgIGlmIChkbG9wZW5fd3JhcHBlcl9yZWN1cnNpdmVf
ZmluZChmaWxlbmFtZV90b19maW5kLCBzdWJkaXJlY3RvcnlfdG9fc2VhcmNoLCBjYW5kaWRhdGVf
cGF0aF9kZXN0KSkgeworICAgICAgICAgICAgICAgIGNsb3NlZGlyKGRwKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGlmICghc3RyY21wKGZpbGVuYW1lX3RvX2ZpbmQsIGVudHJ5LT5kX25hbWUpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFhY2Nlc3MoY2FuZGlkYXRlX3BhdGhfZGVzdCwgRl9PSyB8IFJfT0sp
KSB7CisgICAgICAgICAgICAgICAgICAgIGNsb3NlZGlyKGRwKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRsb3Blbl93
cmFwcGVyX3ByaW50X2Vycm9yX21zZygiQWNjZXNzIGRlbmllZCB0byBjYW5kaWRhdGUgbGlicmFy
eSBcIiVzXCJcbiIsIGNhbmRpZGF0ZV9wYXRoX2Rlc3QpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNsb3NlZGlyKGRwKTsKKyAgICByZXR1cm4gMDsKK30KKworLy8gSGVs
cGVyIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGZpbGVuYW1lX29yaWdpbmFsX3BhdGggaXMgYSBw
YXRoIGFuZCBpcyBpbnNpZGUgbGliZGlyLgorLy8gSWYgaXQgY2FuJ3QgZmluZCB0aGUgZmlsZSBk
aXJlY3RseSBieSB0aGUgcGF0aCwgaXQgY2FsbHMgZGxvcGVuX3dyYXBwZXJfcmVjdXJzaXZlX2Zp
bmQoKSB0byBzZWFyY2ggaXQuCisvLyBJdCB3cml0ZXMgdGhlIHBhdGggdG8gdGhlIGJ1ZmZlciAi
cGF0aF9mb3VuZF9kZXN0IiBpZiB0aGUgZmlsZSBpcyBmb3VuZCAocmV0dXJuID09IDEpLgorLy8g
SWYgdGhlIGZpbGUgaXMgbm90IGZvdW5kIGl0IHJldHVybnMgMCBhbmQgdGhlIGNvbnRlbnRzIG9m
ICJwYXRoX2ZvdW5kX2Rlc3QiIGFyZSB1bmRlZmluZWQuCitpbnQgZGxvcGVuX3dyYXBwZXJfZ2V0
X3BhdGhfZm9yX2ZpbGVfdW5kZXJfZGlyKGNvbnN0IGNoYXIqIGZpbGVuYW1lX29yaWdpbmFsX3Bh
dGgsIGNvbnN0IGNoYXIqIGxpYmRpciwgY2hhciogcGF0aF9mb3VuZF9kZXN0KQoreworCisgICAg
Ly8gYmFzZW5hbWUoKSBtYXkgbW9kaWZ5IHRoZSBidWZmZXIgcGFzc2VkIG9uIHRoZSBmaXJzdCBh
cmd1bWVudAorICAgIGNoYXIgKm9yaWdpbmFsX3BhdGggPSBzdHJkdXAoZmlsZW5hbWVfb3JpZ2lu
YWxfcGF0aCk7CisgICAgY2hhciAqYmFzZV9maWxlX3RvX2Rsb3Blbl93cmFwcGVyX2ZpbmQgPSBi
YXNlbmFtZShvcmlnaW5hbF9wYXRoKTsKKyAgICBpbnQgcmV0Y29kZSA9IDE7CisgICAgaW50IGZp
bGVuYW1lX2lzX2Fic29sdXRlID0gKCpmaWxlbmFtZV9vcmlnaW5hbF9wYXRoID09ICcvJyk7Cisg
ICAgaW50IGZpbGVuYW1lX2lzX3JlbGF0aXZlID0gMDsKKyAgICBpZiAoIWZpbGVuYW1lX2lzX2Fi
c29sdXRlKSB7CisgICAgICAgIGZvciAoY2hhciogY3VycmVudF9jaGFyID0gKGNoYXIqKWZpbGVu
YW1lX29yaWdpbmFsX3BhdGg7ICpjdXJyZW50X2NoYXI7ICsrY3VycmVudF9jaGFyKSB7CisgICAg
ICAgICAgICBpZiAoKmN1cnJlbnRfY2hhciA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICBmaWxl
bmFtZV9pc19yZWxhdGl2ZSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZmlsZW5hbWVfaXNfYWJzb2x1dGUpIHsK
KyAgICAgICAgaWYgKCFzdHJuY21wKGZpbGVuYW1lX29yaWdpbmFsX3BhdGgsIGxpYmRpciwgc3Ry
bGVuKGxpYmRpcikpKSB7CisgICAgICAgICAgICBpZiAoIWFjY2VzcyhmaWxlbmFtZV9vcmlnaW5h
bF9wYXRoLCBGX09LIHwgUl9PSykpIHsKKyAgICAgICAgICAgICAgICBkbG9wZW5fd3JhcHBlcl9w
cmludF9kZWJ1Z19tc2coIkZpbGVuYW1lIFwiJXNcIiBmb3VuZCB1bmRlciBkaXJlY3RvcnkgXCIl
c1wiIHdpdGhvdXQgYW55IHBhdGggcmV3cml0aW5nXG4iLCBmaWxlbmFtZV9vcmlnaW5hbF9wYXRo
LCBsaWJkaXIpOworICAgICAgICAgICAgICAgIHN0cm5jcHkocGF0aF9mb3VuZF9kZXN0LCBmaWxl
bmFtZV9vcmlnaW5hbF9wYXRoLCBQQVRIX01BWCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRf
ZGVidWdfbXNnKCJGaWxlbmFtZSBcIiVzXCIgTk9UIGZvdW5kIHVuZGVyIGRpcmVjdG9yeSBcIiVz
XCIuIFdpbGwgdHJ5IGEgc2VhcmNoIHdpdGggYmFzZW5hbWVcbiIsIGZpbGVuYW1lX29yaWdpbmFs
X3BhdGgsIGxpYmRpcik7CisgICAgfSBlbHNlIGlmIChmaWxlbmFtZV9pc19yZWxhdGl2ZSkgewor
ICAgICAgICBkbG9wZW5fd3JhcHBlcl9wYXRoX2pvaW4obGliZGlyLCBmaWxlbmFtZV9vcmlnaW5h
bF9wYXRoLCBwYXRoX2ZvdW5kX2Rlc3QpOworICAgICAgICBpZiAoIWFjY2VzcyhwYXRoX2ZvdW5k
X2Rlc3QsIEZfT0sgfCBSX09LKSkgeworICAgICAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRf
ZGVidWdfbXNnKCJGaWxlbmFtZSBcIiVzXCIgY29udmVydGVkIHRvIFwiJXNcIiBhbmQgZm91bmQg
dW5kZXIgZGlyZWN0b3J5IFwiJXNcIlxuIiwgZmlsZW5hbWVfb3JpZ2luYWxfcGF0aCwgcGF0aF9m
b3VuZF9kZXN0LCBsaWJkaXIpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAg
ICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZGVidWdfbXNnKCJGaWxlbmFtZSBcIiVzXCIgTk9U
IGZvdW5kIHVuZGVyIGRpcmVjdG9yeSBcIiVzXCJcbiIsIGZpbGVuYW1lX29yaWdpbmFsX3BhdGgs
IGxpYmRpcik7CisgICAgfQorCisgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZGVidWdfbXNnKCJU
cnlpbmcgYSBzZWFyY2ggZm9yIGJhc2VuYW1lIFwiJXNcIiB1bmRlciBkaXJlY3RvcnkgXCIlc1wi
XG4iLCBiYXNlX2ZpbGVfdG9fZGxvcGVuX3dyYXBwZXJfZmluZCwgbGliZGlyKTsKKworICAgIHJl
dGNvZGUgPSBkbG9wZW5fd3JhcHBlcl9yZWN1cnNpdmVfZmluZChiYXNlX2ZpbGVfdG9fZGxvcGVu
X3dyYXBwZXJfZmluZCwgbGliZGlyLCBwYXRoX2ZvdW5kX2Rlc3QpOworICAgIGlmIChvcmlnaW5h
bF9wYXRoKQorICAgICAgICBmcmVlKG9yaWdpbmFsX3BhdGgpOworICAgIHJldHVybiByZXRjb2Rl
OworfQorCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gc3BsaXQgdGhlIHBhdGhzIG9mIGxkX2xpYnJh
cnlfcGF0aCBhbmQgdG8gc2VhcmNoIGZvciAiZmlsZW5hbWVfb3JpZ2luYWxfcGF0aCIgaW5zaWRl
IHRob3NlIHBhdGhzLgorLy8gSXQgd2lsbCBzdG9wIHNlYXJjaGluZyBhdCB0aGUgZmlyc3QgbWF0
Y2guCisvLyBJdCB3cml0ZXMgdGhlIHBhdGggdG8gdGhlIGJ1ZmZlciAicGF0aF9mb3VuZF9kZXN0
IiBpZiB0aGUgZmlsZSBpcyBmb3VuZCAocmV0dXJuID09IDEpLgorLy8gSWYgdGhlIGZpbGUgaXMg
bm90IGZvdW5kIGl0IHJldHVybnMgMCBhbmQgdGhlIGNvbnRlbnRzIG9mICJwYXRoX2ZvdW5kX2Rl
c3QiIGFyZSB1bmRlZmluZWQuCitpbnQgZGxvcGVuX3dyYXBwZXJfZmluZF9saWJyYXJ5X29uX2xp
YnBhdGgoY29uc3QgY2hhciogZmlsZW5hbWVfb3JpZ2luYWxfcGF0aCwgY29uc3QgY2hhciogbGRf
bGlicmFyeV9wYXRoLCBjaGFyKiBwYXRoX2ZvdW5kX2Rlc3QpCit7CisKKyAgICBjaGFyICpzYXZl
cHRyID0gTlVMTDsKKyAgICBjaGFyICpsaWJyYXJ5X3BhdGhzID0gc3RyZHVwKGxkX2xpYnJhcnlf
cGF0aCk7CisgICAgaW50IGZvdW5kID0gMDsKKworICAgIGZvciAoY2hhciAqbGliZGlyID0gc3Ry
dG9rX3IobGlicmFyeV9wYXRocywgIjoiLCAmc2F2ZXB0cik7IGxpYmRpcjsgbGliZGlyID0gc3Ry
dG9rX3IoTlVMTCwgIjoiLCAmc2F2ZXB0cikpIHsKKyAgICAgICAgLy8gbWFrZSB0aGUgcGF0aCBh
YnNvbHV0ZQorICAgICAgICBjaGFyICpsaWJkaXJfcnAgPSByZWFscGF0aChsaWJkaXIsIE5VTEwp
OworICAgICAgICBpZiAoIWxpYmRpcl9ycCkgeworICAgICAgICAgICAgZGxvcGVuX3dyYXBwZXJf
cHJpbnRfZXJyb3JfbXNnKCJDYWxsaW5nIHJlYWxwYXRoKCkgb24gXCIlc1wiOiAlc1xuIiwgbGli
ZGlyLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZGVidWdfbXNnKCJUcnlpbmcgc2VhcmNoIHVu
ZGVyIGRpcmVjdG9yeSAlc1xuIiwgbGliZGlyKTsKKyAgICAgICAgaWYgKGRsb3Blbl93cmFwcGVy
X2dldF9wYXRoX2Zvcl9maWxlX3VuZGVyX2RpcihmaWxlbmFtZV9vcmlnaW5hbF9wYXRoLCBsaWJk
aXJfcnAsIHBhdGhfZm91bmRfZGVzdCkpIHsKKyAgICAgICAgICAgIGZyZWUobGliZGlyX3JwKTsK
KyAgICAgICAgICAgIGZvdW5kID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGZyZWUobGliZGlyX3JwKTsKKyAgICB9CisgICAgZnJlZShsaWJyYXJ5X3BhdGhzKTsK
KyAgICByZXR1cm4gZm91bmQ7Cit9CisKK3ZvaWQgKmRsb3Blbihjb25zdCBjaGFyKiBmaWxlbmFt
ZSwgaW50IGZsYWdzKQoreworICAgIGNoYXIgbmV3X2ZpbGVfcGF0aFtQQVRIX01BWF07CisgICAg
ZGxvcGVuX3dyYXBwZXJfY2FsbF9yZWFsX2RsZXJyb3IgPSAxOworCisgICAgaWYgKGRsb3Blbl93
cmFwcGVyX2RlYnVnX3ByaW50ID09IC0xKSB7CisgICAgICAgIGNoYXIgKmRsb3Blbl9kZWJ1Z192
YWx1ZSA9IGdldGVudigiRExPUEVOX1dSQVBfREVCVUciKTsKKyAgICAgICAgaWYgKGRsb3Blbl9k
ZWJ1Z192YWx1ZSkKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVyX2RlYnVnX3ByaW50ID0gYXRv
aShkbG9wZW5fZGVidWdfdmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiAoKl9fcmVh
bF9kbG9wZW4pKGNvbnN0IGNoYXIqIGZpbGUsIGludCBtb2RlKSA9IE5VTEw7CisgICAgaWYgKCFf
X3JlYWxfZGxvcGVuKSB7CisgICAgICAgIF9fcmVhbF9kbG9wZW4gPSBkbHN5bShSVExEX05FWFQs
ICJkbG9wZW4iKTsKKyAgICAgICAgaWYgKCFfX3JlYWxfZGxvcGVuKSB7CisgICAgICAgICAgICBk
bG9wZW5fd3JhcHBlcl9wcmludF9lcnJvcl9tc2coIkdldHRpbmcgZGxvcGVuIGFkZHJlc3M6ICVz
XG4iLCBkbGVycm9yKCkpOworICAgICAgICAgICAgZGxvcGVuX3dyYXBwZXJfY2FsbF9yZWFsX2Rs
ZXJyb3IgPSAwOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgaWYgKCFfX3JlYWxfZGxlcnJvcikgeworICAgICAgICBfX3JlYWxfZGxlcnJvciA9IGRsc3lt
KFJUTERfTkVYVCwgImRsZXJyb3IiKTsKKyAgICAgICAgaWYgKCFfX3JlYWxfZGxlcnJvcikgewor
ICAgICAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZXJyb3JfbXNnKCJHZXR0aW5nIGRsZXJy
b3IgYWRkcmVzczogJXNcbiIsIGRsZXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGZpbGVuYW1l
IGlzIE5VTEwgb3IgTERfTElCUkFSWV9QQVRIIG5vdCBkZWZpbmVkCisgICAgaWYgKCFmaWxlbmFt
ZSkKKyAgICAgICAgcmV0dXJuIF9fcmVhbF9kbG9wZW4oZmlsZW5hbWUsIGZsYWdzKTsKKworICAg
IGNoYXIgKmxkX2xpYnJhcnlfcGF0aCA9IGdldGVudigiTERfTElCUkFSWV9QQVRIIik7CisgICAg
aWYgKCFsZF9saWJyYXJ5X3BhdGgpCisgICAgICAgIHJldHVybiBfX3JlYWxfZGxvcGVuKGZpbGVu
YW1lLCBmbGFncyk7CisKKyAgICBpZiAoIWRsb3Blbl93cmFwcGVyX2ZpbmRfbGlicmFyeV9vbl9s
aWJwYXRoKGZpbGVuYW1lLCBsZF9saWJyYXJ5X3BhdGgsIG5ld19maWxlX3BhdGgpKSB7CisgICAg
ICAgIGRsb3Blbl93cmFwcGVyX3ByaW50X2Vycm9yX21zZygiQ291bGQgbm90IGZpbmQgXCIlc1wi
IHVuZGVyIHRoZSBkaXJlY3RvcmkoZXMpIG9mIExEX0xJQlJBUllfUEFUSC4gUmVmdXNpbmcgdG8g
ZGxvcGVuIGl0XG4iLCBmaWxlbmFtZSk7CisgICAgICAgIGRsb3Blbl93cmFwcGVyX2NhbGxfcmVh
bF9kbGVycm9yID0gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKGRs
b3Blbl93cmFwcGVyX2RlYnVnX3ByaW50KSB7CisgICAgICAgIGlmIChzdHJjbXAoZmlsZW5hbWUs
IG5ld19maWxlX3BhdGgpKQorICAgICAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZGVidWdf
bXNnKCJPcmlnaW5hbCByZXF1ZXN0IHRvIGRsb3BlbiBcIiVzXCIgY2hhbmdlZCB0byBsb2FkIFwi
JXNcIlxuIiwgZmlsZW5hbWUsIG5ld19maWxlX3BhdGgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9kZWJ1Z19tc2coIk9yaWdpbmFsIHJlcXVlc3QgdG8g
ZGxvcGVuIFwiJXNcIiBhbGxvd2VkICh1bmNoYW5nZWQpIGJlY2F1c2UgaXMgdW5kZXIgdGhlIGRp
cmVjdG9yaShlcykgb2YgTERfTElCUkFSWV9QQVRIXG4iLCBmaWxlbmFtZSk7CisgICAgfQorCisg
ICAgcmV0dXJuIF9fcmVhbF9kbG9wZW4obmV3X2ZpbGVfcGF0aCwgZmxhZ3MpOworfQorCit2b2lk
ICpkbG1vcGVuKExtaWRfdCBsbWlkLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGZsYWdzKQor
eworCisgICAgY2hhciBuZXdfZmlsZV9wYXRoW1BBVEhfTUFYXTsKKyAgICBkbG9wZW5fd3JhcHBl
cl9jYWxsX3JlYWxfZGxlcnJvciA9IDE7CisKKyAgICBpZiAoZGxvcGVuX3dyYXBwZXJfZGVidWdf
cHJpbnQgPT0gLTEpIHsKKyAgICAgICAgY2hhciAqZGxvcGVuX2RlYnVnX3ZhbHVlID0gZ2V0ZW52
KCJETE9QRU5fV1JBUF9ERUJVRyIpOworICAgICAgICBpZiAoZGxvcGVuX2RlYnVnX3ZhbHVlKQor
ICAgICAgICAgICAgZGxvcGVuX3dyYXBwZXJfZGVidWdfcHJpbnQgPSBhdG9pKGRsb3Blbl9kZWJ1
Z192YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqICgqX19yZWFsX2RsbW9wZW4pKExt
aWRfdCBsbWlkdCwgY29uc3QgY2hhciogZmlsZSwgaW50IG1vZGUpID0gTlVMTDsKKyAgICBpZiAo
IV9fcmVhbF9kbG1vcGVuKSB7CisgICAgICAgIF9fcmVhbF9kbG1vcGVuID0gZGxzeW0oUlRMRF9O
RVhULCAiZGxtb3BlbiIpOworICAgICAgICBpZiAoIV9fcmVhbF9kbG1vcGVuKSB7CisgICAgICAg
ICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9lcnJvcl9tc2coIkdldHRpbmcgZGxtb3BlbiBhZGRy
ZXNzOiAlc1xuIiwgZGxlcnJvcigpKTsKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVyX2NhbGxf
cmVhbF9kbGVycm9yID0gMDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9Cisg
ICAgfQorICAgIGlmICghX19yZWFsX2RsZXJyb3IpIHsKKyAgICAgICAgX19yZWFsX2RsZXJyb3Ig
PSBkbHN5bShSVExEX05FWFQsICJkbGVycm9yIik7CisgICAgICAgIGlmICghX19yZWFsX2RsZXJy
b3IpIHsKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVyX3ByaW50X2Vycm9yX21zZygiR2V0dGlu
ZyBkbGVycm9yIGFkZHJlc3M6ICVzXG4iLCBkbGVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiBm
aWxlbmFtZSBpcyBOVUxMIG9yIExEX0xJQlJBUllfUEFUSCBub3QgZGVmaW5lZAorICAgIGlmICgh
ZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBfX3JlYWxfZGxtb3BlbihsbWlkLCBmaWxlbmFtZSwg
ZmxhZ3MpOworCisgICAgY2hhciAqbGRfbGlicmFyeV9wYXRoID0gZ2V0ZW52KCJMRF9MSUJSQVJZ
X1BBVEgiKTsKKyAgICBpZiAoIWxkX2xpYnJhcnlfcGF0aCkKKyAgICAgICAgcmV0dXJuIF9fcmVh
bF9kbG1vcGVuKGxtaWQsIGZpbGVuYW1lLCBmbGFncyk7CisKKyAgICBpZiAoIWRsb3Blbl93cmFw
cGVyX2ZpbmRfbGlicmFyeV9vbl9saWJwYXRoKGZpbGVuYW1lLCBsZF9saWJyYXJ5X3BhdGgsIG5l
d19maWxlX3BhdGgpKSB7CisgICAgICAgIGRsb3Blbl93cmFwcGVyX3ByaW50X2Vycm9yX21zZygi
Q291bGQgbm90IGZpbmQgXCIlc1wiIHVuZGVyIHRoZSBkaXJlY3RvcmkoZXMpIG9mIExEX0xJQlJB
UllfUEFUSC4gUmVmdXNpbmcgdG8gZGxtb3BlbiBpdFxuIiwgZmlsZW5hbWUpOworICAgICAgICBk
bG9wZW5fd3JhcHBlcl9jYWxsX3JlYWxfZGxlcnJvciA9IDA7CisgICAgICAgIHJldHVybiBOVUxM
OworICAgIH0KKworICAgIGlmIChkbG9wZW5fd3JhcHBlcl9kZWJ1Z19wcmludCkgeworICAgICAg
ICBpZiAoc3RyY21wKGZpbGVuYW1lLCBuZXdfZmlsZV9wYXRoKSkKKyAgICAgICAgICAgIGRsb3Bl
bl93cmFwcGVyX3ByaW50X2RlYnVnX21zZygiT3JpZ2luYWwgcmVxdWVzdCB0byBkbG1vcGVuIFwi
JXNcIiBjaGFuZ2VkIHRvIGxvYWQgXCIlc1wiXG4iLCBmaWxlbmFtZSwgbmV3X2ZpbGVfcGF0aCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVyX3ByaW50X2RlYnVnX21z
ZygiT3JpZ2luYWwgcmVxdWVzdCB0byBkbG1vcGVuIFwiJXNcIiBhbGxvd2VkICh1bmNoYW5nZWQp
IGJlY2F1c2UgaXMgdW5kZXIgdGhlIGRpcmVjdG9yaShlcykgb2YgTERfTElCUkFSWV9QQVRIXG4i
LCBmaWxlbmFtZSk7CisgICAgfQorCisgICAgcmV0dXJuIF9fcmVhbF9kbG1vcGVuKGxtaWQsIG5l
d19maWxlX3BhdGgsIGZsYWdzKTsKK30KKworCitjaGFyICpkbGVycm9yKHZvaWQpCit7CisgICAg
c3RhdGljIGNoYXIqIHdyYXBwZXJfZXJyb3JfbXNnID0gIkNhbGwgYmxvY2tlZCBieSBkbG9wZW53
cmFwcGVyIGxpYnJhcnkuIjsKKworICAgIC8vIF9fcmVhbF9kbGVycm9yIGhhbmRsZSB3YXMgYWxy
ZWFkeSBvYnRhaW5lZCBiZWZvcmUgb24gdGhlIGRsb3BlbigpIG9yIGRsbW9wZW4oKSB3cmFwcGVy
cy4KKyAgICAvLyBPYnRhaW5pbmcgaXQgaGVyZSBpcyBub3QgcG9zc2libGUgYmVjYXVzZSBjYWxs
aW5nIGRsc3ltKCkgb3ZlcndyaXRlcyB0aGUgZGxlcnJvciBidWZmZXIuCisgICAgaWYgKGRsb3Bl
bl93cmFwcGVyX2NhbGxfcmVhbF9kbGVycm9yICYmIF9fcmVhbF9kbGVycm9yKQorICAgICAgICBy
ZXR1cm4gX19yZWFsX2RsZXJyb3IoKTsKKworICAgIGRsb3Blbl93cmFwcGVyX2NhbGxfcmVhbF9k
bGVycm9yID0gMTsKKyAgICByZXR1cm4gd3JhcHBlcl9lcnJvcl9tc2c7Cit9CmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggYmRmM2IzNDcxMDQyYTEzMzU3ZWRiODY0
YTE0OThkZmZjYWE1NDA3My4uZjY1MTA3YTBlOTQyOTI3NjkzOWQyMzRkMjI1MzQ0ZDA5ZmEwOTVj
ZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMzA1LDYgKzMw
NSwxMSBAQCBfUEFUSF9SVUxFU19TUEVDSUZJRVIgPSBbCiAgICAgICBvcy5wYXRoLmpvaW4oJ1Nv
dXJjZScsICdUaGlyZFBhcnR5JywgJ2xpYndlYnJ0YycsICdTb3VyY2UnLCAnd2VicnRjJyksCiAg
ICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ1BBTCcsICdwYWwnLCAnc3Bp
JyldLAogICAgICBbIi1yZWFkYWJpbGl0eS9uYW1pbmcvdW5kZXJzY29yZXMiXSksCisKKyAgICAo
WyAgIyBjIGNvZGUgd2l0aCB1bmRlcnNjb3JlcyBpbiB2YXJpYWJsZSBuYW1lcyBhbmQgdGFicyBm
b3IgdGhlIE1ha2VmaWxlCisgICAgIG9zLnBhdGguam9pbignVG9vbHMnLCAnU2NyaXB0cycsICd3
ZWJraXRweScsICdiaW5hcnlfYnVuZGxpbmcnLCAnZGxvcGVud3JhcCcpXSwKKyAgICAgWyItcmVh
ZGFiaWxpdHkvbmFtaW5nL3VuZGVyc2NvcmVzIiwKKyAgICAgICItd2hpdGVzcGFjZS90YWIiXSks
CiBdCiAKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>456010</attachid>
            <date>2022-03-29 03:07:46 -0700</date>
            <delta_ts>2022-03-30 11:40:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237107-20220329110745.patch</filename>
            <type>text/plain</type>
            <size>81536</size>
            <attacher name="Carlos Alberto Lopez Perez">clopez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxOTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdjNjc1NTI5ZTI1OGE2
OGM0ODhlYTgwMmRmMzkxM2ZmZmU1YmU0Ny4uMzYwZjdlODdhNWFhNWRjNzZmMjU2YWMyMjg3NjAy
YTYyYTE2MDM0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIyLTAzLTA4ICBDYXJs
b3MgQWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtH
VEtdW1dQRV0gZ2VuZXJhdGUtYnVuZGxlOiBzZWxmLWNvbnRhaW5lZCBidW5kbGUgZm9yIHRoZSBN
aW5pQnJvd3NlciB0aGF0IGNhbiB3b3JrIG9uIGFueSBkaXN0cm8KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzEwNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gY2hhbmdlIGlu
IGJlaGF2aW91ci4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29y
a1Nlc3Npb24uY3BwOiBBbGxvdyB0byBsb2FkIHRoZSBUTFMgZGF0YWJhc2Ugc3BlY2lmaWVkIG9u
IHRoZQorICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBXRUJLSVRfVExTX0NBRklMRV9QRU0g
d2hlbiBERVZFTE9QRVJfTU9ERSBpcyBlbmFibGVkCisgICAgICAgIChXZWJDb3JlOjpTb3VwTmV0
d29ya1Nlc3Npb246OlNvdXBOZXR3b3JrU2Vzc2lvbik6CisKIDIwMjItMDMtMjggIFppcmFuIFN1
biAgPHpzdW5AaWdhbGlhLmNvbT4KIAogICAgICAgICBbRm9ybXNdIEFsaWFzIGFwcGVhcmFuY2Ug
PGNvbXBhdC1hdXRvPiBrZXl3b3JkcyB0byAnYXV0bycgZm9yIGJ1dHRvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNz
aW9uLmNwcAppbmRleCA5ZWIzMTZkMmEwZmJhZGY1NDdlNzk0NTc1YzcwMWNjNDFkOWFkNzFiLi5k
YTk1ZDI2YzdiZjEzMmQ4ZDgzMWQ4ZDI0NzlhNDYzODlmZGY3NDQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNz
aW9uLmNwcApAQCAtMTMzLDYgKzEzMywyMSBAQCBTb3VwTmV0d29ya1Nlc3Npb246OlNvdXBOZXR3
b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgaWYgKHNvdXBfYXV0aF9u
ZWdvdGlhdGVfc3VwcG9ydGVkKCkgJiYgIW1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiAgICAg
ICAgIHNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVyZV9ieV90eXBlKG1fc291cFNlc3Npb24uZ2V0KCks
IFNPVVBfVFlQRV9BVVRIX05FR09USUFURSk7CiAKKyNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUp
CisgICAgLy8gT3B0aW9uYWxseSBsb2FkIGEgY3VzdG9tIHBhdGggd2l0aCB0aGUgVExTIENBRmls
ZS4gVGhpcyBpcyB1c2VkIG9uIHRoZSBHVEsvV1BFIGJ1bmRsZXMuIFNlZSBzY3JpcHQgZ2VuZXJh
dGUtYnVuZGxlCisgICAgLy8gRG9uJ3QgZW5hYmxlIHRoaXMgb3V0c2lkZSBERVZFTE9QRVJfTU9E
RSBiZWNhdXNlIHVzaW5nIGEgbm9uLWRlZmF1bHQgVExTIGRhdGFiYXNlIGhhcyBzdXJwcmlzaW5n
IHVuZGVzaXJlZCBlZmZlY3RzCisgICAgLy8gb24gaG93IGNlcnRpZmljYXRlIHZlcmlmaWNhdGlv
biBpcyBwZXJmb3JtZWQuIFNlZSBodHRwczovL3dlYmtpdC5vcmcvYi8yMzcxMDcjYzE0IGFuZCBn
aXQgY29tbWl0IDgyOTk5ODc5YiBvbiBnbGliCisgICAgY29uc3QgY2hhciogY3VzdG9tVExTQ0FG
aWxlID0gZ19nZXRlbnYoIldFQktJVF9UTFNfQ0FGSUxFX1BFTSIpOworICAgIGlmIChjdXN0b21U
TFNDQUZpbGUpIHsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgICAg
ICBHUmVmUHRyPEdUbHNEYXRhYmFzZT4gY3VzdG9tVExTREIgPSBhZG9wdEdSZWYoZ190bHNfZmls
ZV9kYXRhYmFzZV9uZXcoY3VzdG9tVExTQ0FGaWxlLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAg
ICAgaWYgKGVycm9yKQorICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJGYWlsZWQgdG8gbG9hZCBU
TFMgZGF0YWJhc2UgXCIlc1wiOiAlcyIsIGN1c3RvbVRMU0NBRmlsZSwgZXJyb3ItPm1lc3NhZ2Up
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzb3VwX3Nlc3Npb25fc2V0X3Rsc19kYXRhYmFz
ZShtX3NvdXBTZXNzaW9uLmdldCgpLCBjdXN0b21UTFNEQi5nZXQoKSk7CisgICAgfQorI2VuZGlm
IC8vIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKKwogICAgIHNldHVwTG9nZ2VyKCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwVmVyc2lv
bmluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBWZXJzaW9u
aW5nLmgKaW5kZXggZjc0MjFiOTY2ZjIzOWY1NWMyMmM5MmI0ZmEwZWI2MWM5NDM0MzhlYy4uNDg5
NWUwYzY5OTAwYmQ3NTM5N2UxN2M0NzRkMTFmZTQ0NTc5NGQ3MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBWZXJzaW9uaW5nLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBWZXJzaW9uaW5nLmgKQEAgLTE1
OCw0ICsxNTgsMTEgQEAgc291cF9zZXNzaW9uX3NldF9hY2NlcHRfbGFuZ3VhZ2UoU291cFNlc3Np
b24qIHNlc3Npb24sIGNvbnN0IGNoYXIqIGFjY2VwdExhbmd1YWcKIHsKICAgICBnX29iamVjdF9z
ZXQoc2Vzc2lvbiwgImFjY2VwdC1sYW5ndWFnZSIsIGFjY2VwdExhbmd1YWdlLCBudWxscHRyKTsK
IH0KKworc3RhdGljIGlubGluZSB2b2lkCitzb3VwX3Nlc3Npb25fc2V0X3Rsc19kYXRhYmFzZShT
b3VwU2Vzc2lvbiAqc2Vzc2lvbiwgR1Rsc0RhdGFiYXNlICp0bHNfZGF0YWJhc2UpCit7CisgICAg
Z19vYmplY3Rfc2V0KHNlc3Npb24sICJ0bHMtZGF0YWJhc2UiLCB0bHNfZGF0YWJhc2UsIE5VTEwp
OworfQorCiAjZW5kaWYgLy8gVVNFKFNPVVAyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDg4M2QzMTJiZTZhOGNmNjU3YzFhMjI2Mjg3YTgxNjk3
NDI2ZjAxYzEuLjFhY2Y0MmE0OGJkNDA3ZjU2NWZjZTcwNmY1NDE2ZDliMTVhMGZhOGIgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0
MiBAQAorMjAyMi0wMy0wOCAgQ2FybG9zIEFsYmVydG8gTG9wZXogUGVyZXogIDxjbG9wZXpAaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIGdlbmVyYXRlLWJ1bmRsZTogc2VsZi1jb250
YWluZWQgYnVuZGxlIGZvciB0aGUgTWluaUJyb3dzZXIgdGhhdCBjYW4gd29yayBvbiBhbnkgZGlz
dHJvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzcx
MDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGltcGxlbWVudHMgaW4gdGhlIGdlbmVyYXRlLWJ1bmRsZSBzY3JpcHQgdGhlIHN1cHBvcnQgdG8g
Z2VuZXJhdGUgYSBidW5kbGUgc2VsZi1jb250YWluZWQgdGhhdCBjYW4gd29yayBvbiBhbnkgZGlz
dHJvLgorICAgICAgICBUbyBhY2hpZXZlIHRoYXQgdGhlIGJ1bmRsZSBjb250YWlucyBhbGwgdGhl
IHJlcXVpcmVkIHN5c3RlbSBsaWJyYXJpZXMgaW5zaWRlIHRoZSBidW5kbGUgKGV2ZW4gdGhlIGdy
YXBoaWNzIGRyaXZlcnMpLgorICAgICAgICBJdCBhbHNvIGNvbnRhaW5zIHRoZSByZXF1aXJlZCBz
eXN0ZW0gcmVzb3VyY2VzOiBpY29ucyAoZm9yIGd0ayksIGZvbnRjb25maWcgZmlsZXMgYW5kIGZv
bnRzLCBldGMuCisgICAgICAgIEEgY3VzdG9tIGRsb3BlbndyYXAgbGlicmFyeSBpcyBhbHNvIGFk
ZGVkIGFuZCBwcmVsb2FkZWQuIFRoZSBwdXJwb3NlIG9mIHRoaXMgbGlicmFyeSBpcyB0byB3cmFw
IGFsbCBkbG9wZW4oKSBjYWxscworICAgICAgICBhbmQgcmV3cml0ZSB0aGUgcGF0aHMgdG8gZW5z
dXJlIHRoYXQgb25seSBsaWJyYXJpZXMgaW5zaWRlIHRoZSBidW5kbGUgYXJlIGxvYWRlZC4KKwor
ICAgICAgICBUaGUgYnVuZGxlIGhhcyBiZWVuIHRlc3RlZCB0byBiZSBnZW5lcmF0ZWQgd2l0aCB0
aGUgZmxhdHBhayBidWlsZCBhbmQgZXhlY3V0ZWQgb24gYSByYW5nZSBvZiB2ZXJ5IGRpZmZlcmVu
dCBkaXN0cmlidXRpb25zCisgICAgICAgIHdpdGggc3VjZXNzOiBGZWRvcmEsIFVidW50dSwgRGVi
aWFuLCBBbHBpbmUsIENlbnRPUyAoZGlmZmVyZW50IHZlcnNpb25zIG9mIGVhY2gpCisKKyAgICAg
ICAgKiBTY3JpcHRzL2J1bmRsZS1iaW5hcnk6CisgICAgICAgICogU2NyaXB0cy9nZW5lcmF0ZS1i
dW5kbGU6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iaW5hcnlfYnVuZGxpbmcvYnVuZGxl
LnB5OgorICAgICAgICAoQmluYXJ5QnVuZGxlcik6CisgICAgICAgIChCaW5hcnlCdW5kbGVyLl9f
aW5pdF9fKToKKyAgICAgICAgKEJpbmFyeUJ1bmRsZXIuX2lzX3N5c3RlbV9kZXApOgorICAgICAg
ICAoQmluYXJ5QnVuZGxlci5zZXRfdXNlX3N5c19saWJfZGlyZWN0b3J5KToKKyAgICAgICAgKEJp
bmFyeUJ1bmRsZXIuY29weV9hbmRfbWF5YmVfc3RyaXBfcGF0Y2hlbGYpOgorICAgICAgICAoQmlu
YXJ5QnVuZGxlci5kZXN0aW5hdGlvbl9kaXIpOgorICAgICAgICAoQmluYXJ5QnVuZGxlci5nZW5l
cmF0ZV93cmFwcGVyX3NjcmlwdCk6CisgICAgICAgIChCaW5hcnlCdW5kbGVyLmNvcHlfYW5kX3Jl
bW92ZV9ycGF0aCk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9iaW5hcnlf
YnVuZGxpbmcvZGxvcGVud3JhcC9NYWtlZmlsZTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9iaW5hcnlfYnVuZGxpbmcvZGxvcGVud3JhcC9SRUFETUUudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JpbmFyeV9idW5kbGluZy9kbG9wZW53cmFwL2Rsb3Bl
bndyYXAuYzogQWRkZWQuCisgICAgICAgIChkbG9wZW5fd3JhcHBlcl9wYXRoX2pvaW4pOgorICAg
ICAgICAoaXNfZGlyKToKKyAgICAgICAgKGRsb3Blbl93cmFwcGVyX3JlY3Vyc2l2ZV9maW5kKToK
KyAgICAgICAgKGRsb3Blbl93cmFwcGVyX2dldF9wYXRoX2Zvcl9maWxlX3VuZGVyX2Rpcik6Cisg
ICAgICAgIChkbG9wZW5fd3JhcHBlcl9maW5kX2xpYnJhcnlfb25fbGlicGF0aCk6CisgICAgICAg
IChkbG9wZW4pOgorICAgICAgICAoZGxtb3Blbik6CisgICAgICAgIChkbGVycm9yKToKKwogMjAy
Mi0wMy0yNiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtXZWJHUFVdIEltcG9ydCBXZWJHUFUgQ29uZm9ybWFuY2UgVGVzdCBTdWl0ZQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy9idW5kbGUtYmluYXJ5IGIvVG9vbHMvU2NyaXB0cy9idW5kbGUt
YmluYXJ5CmluZGV4IGU3NmYzZmEwMTI0ZGZmNTQ4NjUwOWJkZmNmMTY3N2IyYmE1ZTMzMzEuLjI5
ZDFjNTBkMjdmNmExMDM4ZDJhZjQ2MDhmZTE2ZWNkNzlkNTg3ZmYgMTAwNzU1Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvYnVuZGxlLWJpbmFyeQorKysgYi9Ub29scy9TY3JpcHRzL2J1bmRsZS1iaW5hcnkK
QEAgLTQ2LDExICs0NiwxMSBAQCBkZWYgbWFpbigpOgogCiAgICAgaWYgaW50ZXJwcmV0ZXIgaXMg
Tm9uZToKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDb3VsZCBub3QgZGV0ZXJtaW5lIGlu
dGVycHJldGVyIGZvciBiaW5hcnkgJXMiICUgb2JqZWN0KQotICAgIGJ1bmRsZXIgPSBCaW5hcnlC
dW5kbGVyKGFyZ3MuZGVzdF9kaXIsIEZhbHNlKQotICAgIGJ1bmRsZXIuY29weV9hbmRfcmVtb3Zl
X3JwYXRoKGludGVycHJldGVyLCB0eXBlPSdpbnRlcnByZXRlcicpCi0gICAgYnVuZGxlci5jb3B5
X2FuZF9yZW1vdmVfcnBhdGgoYXJncy5iaW5hcnksIHR5cGU9J2JpbicpCisgICAgYnVuZGxlciA9
IEJpbmFyeUJ1bmRsZXIoYXJncy5kZXN0X2RpcikKKyAgICBidW5kbGVyLmNvcHlfYW5kX21heWJl
X3N0cmlwX3BhdGNoZWxmKGludGVycHJldGVyLCB0eXBlPSdpbnRlcnByZXRlcicsIHN0cmlwPUZh
bHNlLCBwYXRjaGVsZl9yZW1vdmVycGF0aD1UcnVlLCBwYXRjaGVsZl9ub2RlZmF1bHRsaWI9RmFs
c2UpCisgICAgYnVuZGxlci5jb3B5X2FuZF9tYXliZV9zdHJpcF9wYXRjaGVsZihhcmdzLmJpbmFy
eSwgdHlwZT0nYmluJywgc3RyaXA9RmFsc2UsIHBhdGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBh
dGNoZWxmX25vZGVmYXVsdGxpYj1GYWxzZSkKICAgICBmb3IgbGliIGluIGxpYnJhcmllczoKLSAg
ICAgICAgYnVuZGxlci5jb3B5X2FuZF9yZW1vdmVfcnBhdGgobGliLCB0eXBlPSdsaWInKQorICAg
ICAgICBidW5kbGVyLmNvcHlfYW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKGxpYiwgdHlwZT0nbGli
Jywgc3RyaXA9RmFsc2UsIHBhdGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBhdGNoZWxmX25vZGVm
YXVsdGxpYj1GYWxzZSkKICAgICBidW5kbGVyLmdlbmVyYXRlX3dyYXBwZXJfc2NyaXB0KGludGVy
cHJldGVyLCBvcy5wYXRoLmJhc2VuYW1lKGFyZ3MuYmluYXJ5KSkKICAgICByZXR1cm4gMAogCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2dlbmVyYXRlLWJ1bmRsZSBiL1Rvb2xzL1NjcmlwdHMv
Z2VuZXJhdGUtYnVuZGxlCmluZGV4IGIzMmI5OTZjOGI2MjMzYTA3ZDk3NGQzY2U1NjMzZmY5ZGQy
ODViZTkuLmIxYzdlYjI3ZmJhOWYwYmQ5N2U4ZjAwY2NiMDZkMTVlMzY3NjJmYzggMTAwNzU1Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtYnVuZGxlCisrKyBiL1Rvb2xzL1NjcmlwdHMvZ2Vu
ZXJhdGUtYnVuZGxlCkBAIC0yMSw3ICsyMSw2IEBACiAjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCiAjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCiBpbXBvcnQgYXJncGFyc2UKIGltcG9ydCBiYXNl
NjQKIGltcG9ydCBkYXRldGltZQpAQCAtODcsNiArODYsNjAgQEAgZWxzZQogZmkKICIiIgogCitG
T05UX0NPTkZfRklMRSA9ICIiIlwKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGZv
bnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPgorPGZvbnRjb25maWc+CisgICAgPGl0czpydWxl
cyB4bWxuczppdHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvMTEvaXRzIiB2ZXJzaW9uPSIxLjAi
PgorICAgICAgICA8aXRzOnRyYW5zbGF0ZVJ1bGUgdHJhbnNsYXRlPSJubyIgc2VsZWN0b3I9Ii9m
b250Y29uZmlnLypbbm90KHNlbGY6OmRlc2NyaXB0aW9uKV0iLz4KKyAgICA8L2l0czpydWxlcz4K
KworICAgIDxkZXNjcmlwdGlvbj5EZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZTwvZGVzY3JpcHRp
b24+CisKKzwhLS0gRm9udCBkaXJlY3RvcnkgbGlzdCwgcmVsYXRpdmUgdG8gWERHX0RBVEFfSE9N
RSAtLT4KKyAgICA8ZGlyIHByZWZpeD0ieGRnIj5mb250cy9mb250czwvZGlyPgorCis8IS0tIExv
YWQgc3lzdGVtIGN1c3RvbWl6YXRpb24gZmlsZXMsIHJlbGF0aXZlIHRvIHByZXZpb3VzIGRpciAt
LT4KKyAgICA8aW5jbHVkZSBpZ25vcmVfbWlzc2luZz0ieWVzIj5jb25mLmQ8L2luY2x1ZGU+CisK
KzwhLS0gRm9udCBjYWNoZSBkaXJlY3RvcnkgbGlzdCwgcmVsYXRpdmUgdG8gWERHX0NBQ0hFX0hP
TUUgLS0+CisgICAgPGNhY2hlZGlyIHByZWZpeD0ieGRnIj5mb250Y29uZmlnPC9jYWNoZWRpcj4K
KworPCEtLSBJbmNsdWRlIGFsc28gdGhlIHN5c3RlbSBmb250IGNvbmZpZyBpZiBpcyBvbiB0aGUg
c3RhbmRhcmQgZGlyIC0tPgorICAgIDxpbmNsdWRlIGlnbm9yZV9taXNzaW5nPSJ5ZXMiPi9ldGMv
Zm9udHMvZm9udHMuY29uZjwvaW5jbHVkZT4KKworPCEtLSBBY2NlcHQgZGVwcmVjYXRlZCAnbW9u
bycgYWxpYXMsIHJlcGxhY2luZyBpdCB3aXRoICdtb25vc3BhY2UnIC0tPgorICAgIDxtYXRjaCB0
YXJnZXQ9InBhdHRlcm4iPgorICAgICAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+
CisgICAgICAgICAgICA8c3RyaW5nPm1vbm88L3N0cmluZz4KKyAgICAgICAgPC90ZXN0PgorICAg
ICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+Cisg
ICAgICAgICAgICA8c3RyaW5nPm1vbm9zcGFjZTwvc3RyaW5nPgorICAgICAgICA8L2VkaXQ+Cisg
ICAgPC9tYXRjaD4KKworPCEtLSBBY2NlcHQgYWx0ZXJuYXRlICdzYW5zIHNlcmlmJyBzcGVsbGlu
ZywgcmVwbGFjaW5nIGl0IHdpdGggJ3NhbnMtc2VyaWYnIC0tPgorICAgIDxtYXRjaCB0YXJnZXQ9
InBhdHRlcm4iPgorICAgICAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+CisgICAg
ICAgICAgICA8c3RyaW5nPnNhbnMgc2VyaWY8L3N0cmluZz4KKyAgICAgICAgPC90ZXN0PgorICAg
ICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+Cisg
ICAgICAgICAgICA8c3RyaW5nPnNhbnMtc2VyaWY8L3N0cmluZz4KKyAgICAgICAgPC9lZGl0Pgor
ICAgIDwvbWF0Y2g+CisKKzwhLS0gQWNjZXB0IGRlcHJlY2F0ZWQgJ3NhbnMnIGFsaWFzLCByZXBs
YWNpbmcgaXQgd2l0aCAnc2Fucy1zZXJpZicgLS0+CisgICAgPG1hdGNoIHRhcmdldD0icGF0dGVy
biI+CisgICAgICAgIDx0ZXN0IHF1YWw9ImFueSIgbmFtZT0iZmFtaWx5Ij4KKyAgICAgICAgICAg
IDxzdHJpbmc+c2Fuczwvc3RyaW5nPgorICAgICAgICA8L3Rlc3Q+CisgICAgICAgIDxlZGl0IG5h
bWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIiBiaW5kaW5nPSJzYW1lIj4KKyAgICAgICAgICAgIDxz
dHJpbmc+c2Fucy1zZXJpZjwvc3RyaW5nPgorICAgICAgICA8L2VkaXQ+CisgICAgPC9tYXRjaD4K
KzwvZm9udGNvbmZpZz4KKyIiIgorCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18p
CiBMT0dfTUVTU0FHRSA9IDI1CiAKQEAgLTEzOCw2ICsxOTEsOSBAQCBjbGFzcyBCdW5kbGVDcmVh
dG9yKG9iamVjdCk6CiAgICAgICAgIHdrX2J1aWxkX3BhdGggPSBvcy5lbnZpcm9uWydXRUJLSVRf
T1VUUFVURElSJ10gaWYgJ1dFQktJVF9PVVRQVVRESVInIGluIG9zLmVudmlyb24gZWxzZSBcCiAg
ICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLnBh
dGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICcuLicsICdXZWJLaXRCdWlsZCcpKQogICAgICAg
ICBzZWxmLl9idWlsZHBhdGggPSBvcy5wYXRoLmpvaW4od2tfYnVpbGRfcGF0aCwgc2VsZi5fY29u
ZmlndXJhdGlvbi5jYXBpdGFsaXplKCkpCisgICAgICAgIHNlbGYuX2Rsb3BlbndyYXBfZGlyID0g
b3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAn
d2Via2l0cHknLCAnYmluYXJ5X2J1bmRsaW5nJywgJ2Rsb3BlbndyYXAnKSkKKyAgICAgICAgaWYg
bm90IG9zLnBhdGguaXNkaXIoc2VsZi5fZGxvcGVud3JhcF9kaXIpOgorICAgICAgICAgICAgcmFp
c2UgUnVudGltZUVycm9yKCJDYW4ndCBmaW5kIHRoZSBkbG9wZW53cmFwIGRpcmVjdG9yeSBhdDog
JXMiICUgc2VsZi5fZGxvcGVud3JhcF9kaXIpCiAKICAgICAgICAgZGVmYXVsdF9idW5kbGVfbmFt
ZSA9IGJ1bmRsZV90eXBlICArICdfJyArIHNlbGYuX3BsYXRmb3JtICsgJ18nICsgc2VsZi5fY29u
ZmlndXJhdGlvbiArICcuJyArIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUKICAgICAgICAgaWYgZGVz
dGluYXRpb24gYW5kICBvcy5wYXRoLmlzZGlyKGRlc3RpbmF0aW9uKToKQEAgLTE0NSw3ICsyMDEs
NiBAQCBjbGFzcyBCdW5kbGVDcmVhdG9yKG9iamVjdCk6CiAgICAgICAgIGVsc2U6CiAgICAgICAg
ICAgICBzZWxmLl9idW5kbGVfZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHdrX2J1aWxkX3BhdGgs
IGRlZmF1bHRfYnVuZGxlX25hbWUpCiAKLQogICAgIGRlZiBfY3JlYXRlX3RlbXBkaXIoc2VsZiwg
YmFzZWRpciA9IE5vbmUpOgogICAgICAgICBpZiBiYXNlZGlyIGlzIG5vdCBOb25lOgogICAgICAg
ICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoYmFzZWRpcik6CkBAIC0xNTMsNyArMjA4LDYgQEAg
Y2xhc3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICAgICAgcmV0dXJuIHRlbXBmaWxl
Lm1rZHRlbXAocHJlZml4PW9zLnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgoYmFzZWRpciksICd0
bXAnKSkKICAgICAgICAgcmV0dXJuIHRlbXBmaWxlLm1rZHRlbXAoKQogCi0KICAgICBkZWYgX3J1
bl9jbWRfYW5kX2dldF9vdXRwdXQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIF9sb2cuZGVidWco
IkVYRUMgJXMiICUgY29tbWFuZCkKICAgICAgICAgY29tbWFuZF9wcm9jZXNzID0gc3VicHJvY2Vz
cy5Qb3Blbihjb21tYW5kLApAQCAtMTcwLDcgKzIyNCw2IEBAIGNsYXNzIEJ1bmRsZUNyZWF0b3Io
b2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUuc3BsaXQoJz0nKVsxXS5z
dHJpcCgpLnN0cmlwKCciJykKICAgICAgICAgcmV0dXJuIE5vbmUKIAotCiAgICAgZGVmIF9nZW5l
cmF0ZV9yZWFkbWUoc2VsZik6CiAgICAgICAgIF9sb2cuaW5mbygnR2VuZXJhdGUgUkVBRE1FLnR4
dCBmaWxlJykKICAgICAgICAgcmVhZG1lX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fdG1wZGly
LCAnUkVBRE1FLnR4dCcpCkBAIC0xOTEsMzYgKzI0NCw0NyBAQCBjbGFzcyBCdW5kbGVDcmVhdG9y
KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgcmVhZG1lX2hhbmRsZS53cml0ZSgnICAtIFRvIGVu
c3VyZSBhbGwgdGhlIHJlcXVpcmVkIGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkIGV4ZWN1dGUgdGhl
IHNjcmlwdDogaW5zdGFsbC1kZXBlbmRlbmNpZXMuc2hcbicpCiAgICAgICAgICAgICAgICAgcmVh
ZG1lX2hhbmRsZS53cml0ZSgnICAtIFlvdSBjYW4gcGFzcyB0aGUgZmxhZyAiLS1hdXRvaW5zdGFs
bCIgdG8gdGhpcyBzY3JpcHQgdG8gYXV0b21hdGljYWxseSBpbnN0YWxsIHRoZSBkZXBlbmRlbmNp
ZXMgaWYgbmVlZGVkLlxuJykKICAgICAgICAgICAgIHJlYWRtZV9oYW5kbGUud3JpdGUoJ1xuUnVu
IGluc3RydWN0aW9uczpcbicpCi0gICAgICAgICAgICBzY3JpcHRzID0gInNjcmlwdCIgaWYgbGVu
KHNlbGYuX3dyYXBwZXJfc2NyaXB0cykgPT0gMSBlbHNlICJzY3JpcHRzIgorICAgICAgICAgICAg
c2NyaXB0cyA9ICdzY3JpcHQnIGlmIGxlbihzZWxmLl93cmFwcGVyX3NjcmlwdHMpID09IDEgZWxz
ZSAnc2NyaXB0cycKICAgICAgICAgICAgIHJlYWRtZV9oYW5kbGUud3JpdGUoJyAgLSBFeGVjdXRl
IHRoZSB3cmFwcGVyICVzIGluIHRoaXMgZGlyZWN0b3J5OlxuJyAlIHNjcmlwdHMpCiAgICAgICAg
ICAgICBmb3Igd3JhcHBlcl9zY3JpcHQgaW4gc2VsZi5fd3JhcHBlcl9zY3JpcHRzOgogICAgICAg
ICAgICAgICAgIHJlYWRtZV9oYW5kbGUud3JpdGUoJyAgICAqICVzXG4nICV3cmFwcGVyX3Njcmlw
dCkKICAgICAgICAgcmV0dXJuIFRydWUKIAotCiAgICAgZGVmIF9nZW5lcmF0ZV93cmFwcGVyX3Nj
cmlwdChzZWxmLCBpbnRlcnByZXRlciwgYmluYXJ5X3RvX3dyYXApOgogICAgICAgICB2YXJpYWJs
ZXMgPSBkaWN0KCkKICAgICAgICAgbXlkaXIgPSBzZWxmLl9idW5kbGVyLlZBUl9NWURJUgotICAg
ICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihzZWxmLl9idW5kbGVyLmRlc3RpbmF0
aW9uX2RpcigpLCAnZ2lvJykpOgotICAgICAgICAgICAgZ2lvX3ZhciA9ICdHSU9fTU9EVUxFX0RJ
UicgaWYgc2VsZi5fc3lzbGlicyA9PSAnYnVuZGxlLWFsbCcgZWxzZSAnR0lPX0VYVFJBX01PRFVM
RVMnCi0gICAgICAgICAgICB2YXJpYWJsZXNbZ2lvX3Zhcl0gPSAiJHslc30vZ2lvIiAlIG15ZGly
CisgICAgICAgIGxpYl9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fYnVuZGxlci5kZXN0aW5hdGlv
bl9kaXIoKSwgJ2xpYicpCisgICAgICAgIHN5c2xpYl9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5f
YnVuZGxlci5kZXN0aW5hdGlvbl9kaXIoKSwgJ3N5cy9saWInKQorICAgICAgICBiaW5fZGlyID0g
b3MucGF0aC5qb2luKHNlbGYuX2J1bmRsZXIuZGVzdGluYXRpb25fZGlyKCksICdiaW4nKQorICAg
ICAgICBzaGFyZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fYnVuZGxlci5kZXN0aW5hdGlvbl9k
aXIoKSwgJ3N5cy9zaGFyZScpCiAKLSAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpv
aW4oc2VsZi5fYnVuZGxlci5kZXN0aW5hdGlvbl9kaXIoKSwgJ2dzdCcpKToKKyAgICAgICAgaWYg
b3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2dpbycpKToKKyAgICAgICAg
ICAgIGdpb192YXIgPSAnR0lPX01PRFVMRV9ESVInIGlmIHNlbGYuX3N5c2xpYnMgPT0gJ2J1bmRs
ZS1hbGwnIGVsc2UgJ0dJT19FWFRSQV9NT0RVTEVTJworICAgICAgICAgICAgdmFyaWFibGVzW2dp
b192YXJdID0gJyR7JXN9L3N5cy9saWIvZ2lvJyAlIG15ZGlyCisgICAgICAgIGlmIG9zLnBhdGgu
aXNkaXIob3MucGF0aC5qb2luKHN5c2xpYl9kaXIsICdnc3QnKSk6CiAgICAgICAgICAgICBnc3Rf
dmFyID0gJ0dTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wJyBpZiBzZWxmLl9zeXNsaWJzID09ICdi
dW5kbGUtYWxsJyBlbHNlICdHU1RfUExVR0lOX1BBVEhfMV8wJwotICAgICAgICAgICAgdmFyaWFi
bGVzW2dzdF92YXJdID0gIiR7JXN9L2dzdCIgJSBteWRpcgotICAgICAgICAgICAgdmFyaWFibGVz
WydHU1RfUkVHSVNUUllfMV8wJ10gPSAiJHslc30vZ3N0L2dzdHJlYW1lci0xLjAucmVnaXN0cnki
ICUgbXlkaXIKLSAgICAgICAgaWYgYmluYXJ5X3RvX3dyYXAgIT0gImpzYyI6Ci0gICAgICAgICAg
ICB2YXJpYWJsZXNbJ1dFQktJVF9FWEVDX1BBVEgnXSA9ICIkeyVzfS9iaW4iICUgbXlkaXIKLSAg
ICAgICAgICAgIHZhcmlhYmxlc1snV0VCS0lUX0lOSkVDVEVEX0JVTkRMRV9QQVRIJ10gPSAiJHsl
c30vbGliIiAlIG15ZGlyCi0gICAgICAgIGlmIHNlbGYuX3N5c2xpYnMgPT0gJ2J1bmRsZS1hbGwn
OgotICAgICAgICAgICAgaWYgYmluYXJ5X3RvX3dyYXAgIT0gImpzYyI6Ci0gICAgICAgICAgICAg
ICAgZm9yIHZhciBpbiBbJ1dFQl9QUk9DRVNTX0NNRF9QUkVGSVgnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdQTFVHSU5fUFJPQ0VTU19DTURfUFJFRklYJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnTkVUV09SS19QUk9DRVNTX0NNRF9QUkVGSVgnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdHUFVfUFJPQ0VTU19DTURfUFJFRklYJ106Ci0gICAgICAgICAgICAg
ICAgICAgIHZhcmlhYmxlc1t2YXJdID0gIiR7JXN9IiAlIHNlbGYuX2J1bmRsZXIuVkFSX0lOVEVS
UFJFVEVSCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpbnRlcnByZXRlciA9IE5vbmUKKyAg
ICAgICAgICAgIHZhcmlhYmxlc1tnc3RfdmFyXSA9ICckeyVzfS9zeXMvbGliL2dzdCcgJSBteWRp
cgorICAgICAgICAgICAgdmFyaWFibGVzWydHU1RfUkVHSVNUUllfMV8wJ10gPSAnJHslc30vc3lz
L2xpYi9nc3QvZ3N0cmVhbWVyLTEuMC5yZWdpc3RyeScgJSBteWRpcgorICAgICAgICAgICAgaWYg
b3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGJpbl9kaXIsICdnc3QtcGx1Z2luLXNjYW5uZXIn
KSk6CisgICAgICAgICAgICAgICAgdmFyaWFibGVzWydHU1RfUExVR0lOX1NDQU5ORVInXSA9ICck
eyVzfS9iaW4vZ3N0LXBsdWdpbi1zY2FubmVyJyAlIG15ZGlyCisgICAgICAgICAgICAjIHBpcGV3
aXJlIHNwYSBwbHVnaW5zIG1heSBiZSBuZWVkZWQgYnkgZ3N0cmVhbWVyLXBpcGV3aXJlCisgICAg
ICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihzeXNsaWJfZGlyLCAncGlwZXdp
cmUnKSk6CisgICAgICAgICAgICAgICAgdmFyaWFibGVzWydTUEFfUExVR0lOX0RJUiddID0gJyR7
JXN9L3N5cy9saWIvcGlwZXdpcmUnICUgbXlkaXIKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihv
cy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2RyaScpKToKKyAgICAgICAgICAgIHZhcmlhYmxlc1sn
TElCR0xfRFJJVkVSU19QQVRIJ10gPSAnJHslc30vc3lzL2xpYi9kcmknICUgbXlkaXIKKyAgICAg
ICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2dsdm5kL2VnbF92
ZW5kb3IuZCcpKToKKyAgICAgICAgICAgIHZhcmlhYmxlc1snX19FR0xfVkVORE9SX0xJQlJBUllf
RElSUyddID0gJyR7JXN9L3N5cy9saWIvZ2x2bmQvZWdsX3ZlbmRvci5kJyAlIG15ZGlyCisgICAg
ICAgIGlmIG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHNoYXJlX2RpcikpOgorICAgICAgICAg
ICAgYXNzZXJ0KHNlbGYuX3N5c2xpYnMgPT0gJ2J1bmRsZS1hbGwnKQorICAgICAgICAgICAgdmFy
aWFibGVzWydYREdfREFUQV9IT01FJ10gPSAnJHslc30vc3lzL3NoYXJlJyAlIG15ZGlyCisgICAg
ICAgICAgICB2YXJpYWJsZXNbJ1hER19EQVRBX0RJUlMnXSA9ICckeyVzfS9zeXMvc2hhcmUnICUg
bXlkaXIKKyAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc2hhcmVfZGlyLCAn
Zm9udHMnKSk6CisgICAgICAgICAgICB2YXJpYWJsZXNbJ0ZPTlRDT05GSUdfUEFUSCddID0gJyR7
JXN9L3N5cy9zaGFyZS9mb250cy9jb25maWcnICUgbXlkaXIKKyAgICAgICAgaWYgb3MucGF0aC5p
c2Rpcihvcy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2d0aycpKToKKyAgICAgICAgICAgIHZhcmlh
Ymxlc1snR1RLX1BBVEgnXSA9ICckeyVzfS9zeXMvbGliL2d0aycgJSBteWRpcgorICAgICAgICBp
ZiBiaW5hcnlfdG9fd3JhcCAhPSAnanNjJzoKKyAgICAgICAgICAgIHZhcmlhYmxlc1snV0VCS0lU
X0VYRUNfUEFUSCddID0gJyR7JXN9L2JpbicgJSBteWRpcgorICAgICAgICAgICAgdmFyaWFibGVz
WydXRUJLSVRfSU5KRUNURURfQlVORExFX1BBVEgnXSA9ICckeyVzfS9saWInICUgbXlkaXIKICAg
ICAgICAgc2VsZi5fYnVuZGxlci5nZW5lcmF0ZV93cmFwcGVyX3NjcmlwdChpbnRlcnByZXRlciwg
YmluYXJ5X3RvX3dyYXAsIHZhcmlhYmxlcykKICAgICAgICAgc2VsZi5fd3JhcHBlcl9zY3JpcHRz
LmFwcGVuZChiaW5hcnlfdG9fd3JhcCkKIApAQCAtMjUyLDkgKzMxNiwxOCBAQCBjbGFzcyBCdW5k
bGVDcmVhdG9yKG9iamVjdCk6CiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2VsZi5fdG1wZGly
KToKICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5fdG1wZGlyKQogCisgICAgZGVmIF90
b3VjaF9yZXNldF9tdGltZShzZWxmKToKKyAgICAgICAgX2xvZy5pbmZvKCdVcGRhdGUgdGltZXN0
YW1wcyAodG91Y2gpJykKKyAgICAgICAgbm93ID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkudGlt
ZXN0YW1wKCkKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc2VsZi5f
dG1wZGlyKToKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAg
IG9zLnV0aW1lKG9zLnBhdGguam9pbihyb290LCBuYW1lKSwgdGltZXM9KG5vdywgbm93KSkKKyAg
ICAgICAgICAgIGZvciBuYW1lIGluIGRpcnM6CisgICAgICAgICAgICAgICAgb3MudXRpbWUob3Mu
cGF0aC5qb2luKHJvb3QsIG5hbWUpLCB0aW1lcz0obm93LCBub3cpKQorCiAgICAgZGVmIGNyZWF0
ZShzZWxmKToKICAgICAgICAgc2VsZi5fdG1wZGlyID0gc2VsZi5fY3JlYXRlX3RlbXBkaXIoc2Vs
Zi5fYnVpbGRwYXRoKQotICAgICAgICBzZWxmLl9idW5kbGVyID0gQmluYXJ5QnVuZGxlcihzZWxm
Ll90bXBkaXIsIHNlbGYuX3Nob3VsZF9zdHJpcF9vYmplY3RzKQorICAgICAgICBzZWxmLl9idW5k
bGVyID0gQmluYXJ5QnVuZGxlcihzZWxmLl90bXBkaXIsIHNlbGYuX2J1aWxkcGF0aCkKIAogICAg
ICAgICBpZiBvcy5wYXRoLmlzZmlsZShzZWxmLl9idW5kbGVfZmlsZV9wYXRoKToKICAgICAgICAg
ICAgIF9sb2cuaW5mbygnUmVtb3ZpbmcgcHJldmlvdXMgYnVuZGxlICVzJyAlIHNlbGYuX2J1bmRs
ZV9maWxlX3BhdGgpCkBAIC0yNjQsNiArMzM3LDkgQEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihvYmpl
Y3QpOgogICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2J1bmRsZShidW5kbGVfYmluYXJ5KQogICAg
ICAgICBzZWxmLl9nZW5lcmF0ZV9yZWFkbWUoKQogCisgICAgICAgICMgUG90ZW50aWFsbHkgYXZv
aWRzIGVycm9ycyByZWxhdGVkIHRvIFpJUCBub3QgYWJsZSB0byBzdG9yZSBtdGltZXMgb2xkZXIg
dGhhbiAxOTgwCisgICAgICAgIHNlbGYuX3RvdWNoX3Jlc2V0X210aW1lKCkKKwogICAgICAgICBp
ZiBzZWxmLl9jb21wcmVzc2lvbl90eXBlID09ICd6aXAnOgogICAgICAgICAgICAgYXJjaGl2ZXIg
PSBaaXBBcmNoaXZlcihzZWxmLl9idW5kbGVfZmlsZV9wYXRoKQogICAgICAgICBlbGlmIHNlbGYu
X2NvbXByZXNzaW9uX3R5cGUgPT0gJ3Rhci54eic6CkBAIC0yNzcsNyArMzUzLDYgQEAgY2xhc3Mg
QnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICBfbG9nLmxvZyhMT0dfTUVTU0FHRSwgJ0J1
bmRsZSBmaWxlIGNyZWF0ZWQgYXQ6ICVzJyAlIHNlbGYuX2J1bmRsZV9maWxlX3BhdGgpCiAgICAg
ICAgIHJldHVybiBzZWxmLl9idW5kbGVfZmlsZV9wYXRoCiAKLQogICAgIGRlZiBfZ2V0X3dlYmtp
dF9iaW5hcmllcyhzZWxmKToKICAgICAgICAgd2Via2l0X2JpbmFyaWVzID0gW10KICAgICAgICAg
YmluX2RpciA9IG9zLnBhdGguam9pbihzZWxmLl9idWlsZHBhdGgsICdiaW4nKQpAQCAtMjkwLDE5
ICszNjUsMTggQEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICAgICAgcmFp
c2UgUnVudGltZUVycm9yKCdDb3VsZCBub3QgZmluZCByZXF1aXJlZCBXZWJLaXQgUHJvY2VzcyBi
aW5hcmllcy4gQ2hlY2sgaWYgeW91IGFyZSBwYXNzaW5nIHRoZSByaWdodCBwbGF0Zm9ybSB2YWx1
ZS4nKQogICAgICAgICByZXR1cm4gd2Via2l0X2JpbmFyaWVzCiAKLQotICAgIGRlZiBfZ2V0X3dl
YmtpdF9idW5kbGVsaWIoc2VsZik6CisgICAgZGVmIF9nZXRfd2Via2l0X2xpYihzZWxmLCBuYW1l
KToKKyAgICAgICAgbGlia2V5bmFtZSA9IG5hbWUubG93ZXIoKQogICAgICAgICBsaWJfZGlyID0g
b3MucGF0aC5qb2luKHNlbGYuX2J1aWxkcGF0aCwgJ2xpYicpCiAgICAgICAgIGJ1bmRsZV9saWIg
PSBOb25lCiAgICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKGxpYl9kaXIpOgotICAgICAg
ICAgICAgaWYgZW50cnkuZW5kc3dpdGgoJy5zbycpIGFuZCAnaW5qZWN0ZWRidW5kbGUnIGluIGVu
dHJ5Lmxvd2VyKCkgYW5kICd0ZXN0JyBub3QgaW4gZW50cnkubG93ZXIoKToKKyAgICAgICAgICAg
IGlmIGVudHJ5LmVuZHN3aXRoKCcuc28nKSBhbmQgbGlia2V5bmFtZSBpbiBlbnRyeS5sb3dlcigp
IGFuZCAndGVzdCcgbm90IGluIGVudHJ5Lmxvd2VyKCk6CiAgICAgICAgICAgICAgICAgYXNzZXJ0
KGJ1bmRsZV9saWIgPT0gTm9uZSkKICAgICAgICAgICAgICAgICBidW5kbGVfbGliID0gb3MucGF0
aC5qb2luKGxpYl9kaXIsIGVudHJ5KQogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGFz
c2VydChidW5kbGVfbGliKQogICAgICAgICByZXR1cm4gYnVuZGxlX2xpYgogCi0KICAgICBkZWYg
X2NyZWF0ZV9hcmNoaXZlKHNlbGYsIGFyY2hpdmVyKToKICAgICAgICAgX2xvZy5pbmZvKCdDcmVh
dGUgYXJjaGl2ZScpCiAgICAgICAgIHdpdGggYXJjaGl2ZXI6CkBAIC0zMzEsNDIgKzQwNSwxNDAg
QEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgogICAgICAgICBfbG9nLmluZm8oJ0FkZCBk
ZXBlbmRlbmN5IG9uIHN5c3RlbSBwYWNrYWdlIFslc106ICVzJyAlKHBhY2thZ2UsIG9iamVjdCkp
CiAgICAgICAgIHJldHVybiBwYWNrYWdlCiAKLQotICAgIGRlZiBfZ2V0X2dpb19tb2R1bGVzKHNl
bGYpOgotICAgICAgICBnaW9fbW9kdWxlcyA9IFtdCi0gICAgICAgIHJldGNvZGUsIHN0ZG91dCwg
c3RkZXJyID0gc2VsZi5fcnVuX2NtZF9hbmRfZ2V0X291dHB1dChbJ3BrZy1jb25maWcnLCAnLS12
YXJpYWJsZT1naW9tb2R1bGVkaXInLCAnZ2lvLTIuMCddKQorICAgIGRlZiBfZ2V0X3BrZ19jb25m
aWdfdmFyKHNlbGYsIG1vZHVsZSwgdmFyX25hbWUsIGFzc2VydF92YWx1ZT1UcnVlKToKKyAgICAg
ICAgcmV0Y29kZSwgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLl9ydW5fY21kX2FuZF9nZXRfb3V0cHV0
KFsncGtnLWNvbmZpZycsICctLXZhcmlhYmxlPSVzJyAlIHZhcl9uYW1lLCBtb2R1bGVdKQogICAg
ICAgICBpZiByZXRjb2RlICE9IDA6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1Ro
ZSBwa2ctY29uZmlnIGNvbW1hbmQgcmV0dXJuZWQgc3RhdHVzICVkJyAlIHJldGNvZGUpCi0gICAg
ICAgIGdpb19tb2R1bGVfZGlyID0gc3Rkb3V0LnN0cmlwKCkKLSAgICAgICAgaWYgbm90IG9zLnBh
dGguaXNkaXIoZ2lvX21vZHVsZV9kaXIpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9y
KCdUaGUgcGtnLWNvbmZpZyBlbnRyeSBmb3IgZ2lvbW9kdWxlZGlyIGlzIG5vdCBhIGRpcmVjdG9y
eTogJXMnICUgZ2lvX21vZHVsZV9kaXIpCi0gICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGly
KGdpb19tb2R1bGVfZGlyKToKLSAgICAgICAgICAgIGlmIGVudHJ5LmVuZHN3aXRoKCcuc28nKToK
LSAgICAgICAgICAgICAgICBnaW9fbW9kdWxlcy5hcHBlbmQob3MucGF0aC5qb2luKGdpb19tb2R1
bGVfZGlyLCBlbnRyeSkpCi0gICAgICAgIHJldHVybiBnaW9fbW9kdWxlcworICAgICAgICB2YXJf
dmFsdWUgPSBzdGRvdXQuc3RyaXAoKQorICAgICAgICBpZiBhc3NlcnRfdmFsdWU6CisgICAgICAg
ICAgICBpZiB2YXJfbmFtZS5lbmRzd2l0aCgnZGlyJykgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKHZh
cl92YWx1ZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgcGtnLWNv
bmZpZyBlbnRyeSBmb3IgJXMgaXMgbm90IGEgZGlyZWN0b3J5OiAlcycgJSAodmFyX25hbWUsIHZh
cl92YWx1ZSkpCisgICAgICAgICAgICBpZiBsZW4odmFyX3ZhbHVlKSA9PSAwOgorICAgICAgICAg
ICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVGhlIHBrZy1jb25maWcgZW50cnkgZm9yICVzIGhh
cyB6ZXJvIGxlbmdodCcgJSB2YXJfdmFsdWUpCisgICAgICAgIHJldHVybiB2YXJfdmFsdWUKKwor
ICAgIGRlZiBfbGlzdF9maWxlc19kaXJlY3Rvcnkoc2VsZiwgZGlyZWN0b3J5LCBsaXN0X2luc2lk
ZV9zdWJkaXJzPUZhbHNlLCBmaWx0ZXJfc3VmZml4PU5vbmUpOgorICAgICAgICBmb3VuZF9maWxl
cyA9IFtdCisgICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKGRpcmVjdG9yeSk6CisgICAg
ICAgICAgICBlbnRyeV9wYXRoID0gb3MucGF0aC5qb2luKGRpcmVjdG9yeSwgZW50cnkpCisgICAg
ICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGVudHJ5X3BhdGgpOgorICAgICAgICAgICAgICAgIGlm
IGxpc3RfaW5zaWRlX3N1YmRpcnM6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2ZpbGVzLmV4
dGVuZChzZWxmLl9saXN0X2ZpbGVzX2RpcmVjdG9yeShlbnRyeV9wYXRoLCBsaXN0X2luc2lkZV9z
dWJkaXJzLCBmaWx0ZXJfc3VmZml4KSkKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2ZpbGUo
ZW50cnlfcGF0aCk6CisgICAgICAgICAgICAgICAgaWYgZmlsdGVyX3N1ZmZpeCBpcyBOb25lIG9y
IGVudHJ5X3BhdGguZW5kc3dpdGgoZmlsdGVyX3N1ZmZpeCk6CisgICAgICAgICAgICAgICAgICAg
IGZvdW5kX2ZpbGVzLmFwcGVuZChlbnRyeV9wYXRoKQorICAgICAgICBpZiBsZW4oZm91bmRfZmls
ZXMpID09IDA6CisgICAgICAgICAgICByYWlzZSBSdW5UaW1lRXJyb3IoJ0NhbiBub3QgZmluZCBh
bnkgbWF0Y2hpbmcgZmlsZSBhdCBkaXJlY3RvcnkgJXMnICUgZGlyZWN0b3J5KQorICAgICAgICBy
ZXR1cm4gZm91bmRfZmlsZXMKIAotICAgIGRlZiBfZ2V0X2dzdHJlYW1lcl9tb2R1bGVzKHNlbGYp
OgotICAgICAgICBnc3RyZWFtZXJfcGx1Z2lucyA9IFtdCi0gICAgICAgIHJldGNvZGUsIHN0ZG91
dCwgc3RkZXJyID0gc2VsZi5fcnVuX2NtZF9hbmRfZ2V0X291dHB1dChbJ3BrZy1jb25maWcnLCAn
LS12YXJpYWJsZT1wbHVnaW5zZGlyJywgJ2dzdHJlYW1lci0xLjAnXSkKLSAgICAgICAgaWYgcmV0
Y29kZSAhPSAwOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGUgcGtnLWNvbmZp
ZyBjb21tYW5kIHJldHVybmVkIHN0YXR1cyAlZCcgJSByZXRjb2RlKQotICAgICAgICBnc3RyYW1l
cl9wbHVnaW5zX2RpciA9IHN0ZG91dC5zdHJpcCgpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlz
ZGlyKGdzdHJhbWVyX3BsdWdpbnNfZGlyKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJv
cignVGhlIHBrZy1jb25maWcgZW50cnkgZm9yIHBsdWdpbnNkaXIgaXMgbm90IGEgZGlyZWN0b3J5
OiAlcycgJSBnc3RyYW1lcl9wbHVnaW5zX2RpcikKLSAgICAgICAgZm9yIGVudHJ5IGluIG9zLmxp
c3RkaXIoZ3N0cmFtZXJfcGx1Z2luc19kaXIpOgotICAgICAgICAgICAgaWYgZW50cnkuZW5kc3dp
dGgoJy5zbycpOgotICAgICAgICAgICAgICAgIGdzdHJlYW1lcl9wbHVnaW5zLmFwcGVuZChvcy5w
YXRoLmpvaW4oZ3N0cmFtZXJfcGx1Z2luc19kaXIsIGVudHJ5KSkKLSAgICAgICAgcmV0dXJuIGdz
dHJlYW1lcl9wbHVnaW5zCisgICAgZGVmIF9nZXRfZ2lvX21vZHVsZXMoc2VsZik6CisgICAgICAg
IGdpb19tb2R1bGVfZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdnaW8tMi4wJywgJ2dp
b21vZHVsZWRpcicpCisgICAgICAgIHJldHVybiBzZWxmLl9saXN0X2ZpbGVzX2RpcmVjdG9yeShn
aW9fbW9kdWxlX2RpciwgZmlsdGVyX3N1ZmZpeD0nLnNvJykKIAorICAgIGRlZiBfZ2V0X2d0a19t
b2R1bGVzKHNlbGYsIHN1YmRpcik6CisgICAgICAgIGd0a19saWJfZGlyID0gc2VsZi5fZ2V0X3Br
Z19jb25maWdfdmFyKCdndGsrLTMuMCcsICdsaWJkaXInKQorICAgICAgICBndGtfYmluYXJ5X3Zl
cnNpb24gPSBzZWxmLl9nZXRfcGtnX2NvbmZpZ192YXIoJ2d0aystMy4wJywgJ2d0a19iaW5hcnlf
dmVyc2lvbicpCisgICAgICAgIGd0a19tb2R1bGVfZGlyID0gb3MucGF0aC5qb2luKGd0a19saWJf
ZGlyLCAnZ3RrLTMuMCcsIGd0a19iaW5hcnlfdmVyc2lvbiwgc3ViZGlyKQorICAgICAgICBpZiBu
b3Qgb3MucGF0aC5pc2RpcihndGtfbW9kdWxlX2Rpcik6CisgICAgICAgICAgICByYWlzZSBSdW50
aW1lRXJyb3IoJ0NhbiBub3QgZmluZCB0aGUgdGhlIGd0ayBtb2R1bGUgZGlyICVzJyAlIGd0a19t
b2R1bGVfZGlyKQorICAgICAgICByZXR1cm4gc2VsZi5fbGlzdF9maWxlc19kaXJlY3RvcnkoZ3Rr
X21vZHVsZV9kaXIsIGZpbHRlcl9zdWZmaXg9Jy5zbycpCisKKyAgICBkZWYgX2dldF9nc3RyZWFt
ZXJfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgZ3N0cmVhbWVyX3BsdWdpbnNfZGlyID0gc2VsZi5f
Z2V0X3BrZ19jb25maWdfdmFyKCdnc3RyZWFtZXItMS4wJywgJ3BsdWdpbnNkaXInKQorICAgICAg
ICByZXR1cm4gc2VsZi5fbGlzdF9maWxlc19kaXJlY3RvcnkoZ3N0cmVhbWVyX3BsdWdpbnNfZGly
LCBmaWx0ZXJfc3VmZml4PScuc28nKQorCisgICAgZGVmIF9nZXRfZ3N0cmVhbWVyX3BsdWdpbl9z
Y2FubmVyKHNlbGYpOgorICAgICAgICBkZWYgcGx1Z2luX3NjYW5uZXJfZm91bmQocGx1Z2luX3Nj
YW5uZXJfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4gKG9zLnBhdGguaXNmaWxlKHBsdWdpbl9z
Y2FubmVyX3BhdGgpIGFuZCBvcy5hY2Nlc3MocGx1Z2luX3NjYW5uZXJfcGF0aCwgb3MuWF9PSykp
CisKKyAgICAgICAgZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVyX2RpciA9IGdpb19tb2R1bGVfZGly
ID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdnc3RyZWFtZXItMS4wJywgJ3BsdWdpbnNjYW5u
ZXJkaXInLCBhc3NlcnRfdmFsdWU9RmFsc2UpCisgICAgICAgIGdzdHJlYW1lcl9wbHVnaW5fc2Nh
bm5lciA9IG9zLnBhdGguam9pbihnc3RyZWFtZXJfcGx1Z2luX3NjYW5uZXJfZGlyLCAnZ3N0LXBs
dWdpbi1zY2FubmVyJykKKyAgICAgICAgaWYgbm90IHBsdWdpbl9zY2FubmVyX2ZvdW5kKGdzdHJl
YW1lcl9wbHVnaW5fc2Nhbm5lcik6CisgICAgICAgICAgICAjIHBsdWdpbnNjYW5uZXJkaXIgcGtn
LWNvbmZpZyB2YXJpYWJsZSBpcyBhdmFpbGFibGUgb25seSBvbiByZWNlbnQgdmVyc2lvbnMgb2Yg
Z3N0CisgICAgICAgICAgICAjIGdpdmUgaXQgYSBzZWNvbmQgY2hhbmNlIHdpdGggc29tZSBrbm93
biBkaXJlY3RvcmllcyBvbiBkZWJpYW4vdWJ1bnR1IGFuZCBmZWRvcmEvY2VudG9zCisgICAgICAg
ICAgICBsaWJfZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdnc3RyZWFtZXItMS4wJywg
J2xpYmRpcicpCisgICAgICAgICAgICBwbHVnaW5zX2RpciA9IHNlbGYuX2dldF9wa2dfY29uZmln
X3ZhcignZ3N0cmVhbWVyLTEuMCcsICdwbHVnaW5zZGlyJykKKyAgICAgICAgICAgIGZvciBnc3Ry
ZWFtZXJfcGx1Z2luX3NjYW5uZXJfZGlyIGluIFsgb3MucGF0aC5qb2luKGxpYl9kaXIsICdnc3Ry
ZWFtZXIxLjAvZ3N0cmVhbWVyLTEuMCcpLCBwbHVnaW5zX2RpciwgJy91c3IvbGliZXhlYy9nc3Ry
ZWFtZXItMS4wJ106CisgICAgICAgICAgICAgICAgZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVyID0g
b3MucGF0aC5qb2luKGdzdHJlYW1lcl9wbHVnaW5fc2Nhbm5lcl9kaXIsICdnc3QtcGx1Z2luLXNj
YW5uZXInKQorICAgICAgICAgICAgICAgIGlmIHBsdWdpbl9zY2FubmVyX2ZvdW5kKGdzdHJlYW1l
cl9wbHVnaW5fc2Nhbm5lcik6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlm
IG5vdCBwbHVnaW5fc2Nhbm5lcl9mb3VuZChnc3RyZWFtZXJfcGx1Z2luX3NjYW5uZXIpOgorICAg
ICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDb3VsZCBub3QgZmluZCBnc3QtcGx1Z2luLXNj
YW5uZXIgYmluYXJ5IGF0IHBhdGggIiVzIi4nICUgZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVyKQor
ICAgICAgICByZXR1cm4gZ3N0cmVhbWVyX3BsdWdpbl9zY2FubmVyCisKKyAgICBkZWYgX2dldF9s
aWJjX2xpYnJhcmllcyhzZWxmKToKKyAgICAgICAgbGliY19saWJyYXJ5X25hbWVzID0gWyAnbGli
YW5sJywgJ2xpYkJyb2tlbkxvY2FsZScsICdsaWJjJywgJ2xpYmNyeXB0JywgJ2xpYmRsJywgJ2xp
YmdjY19zJywgJ2xpYm0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWJtdmVj
JywgJ2xpYm5zbCcsICdsaWJwdGhyZWFkJywgJ2xpYnJlc29sdicsICdsaWJydCcsICdsaWJ0aHJl
YWRfZGInLCAnbGlidXRpbCddCisgICAgICAgIGxpYmNfbGlicmFyaWVzID0gW10KKyAgICAgICAg
bGliX2RpciA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3ZhcignZHJpJywgJ2xpYmRpcicpCisgICAg
ICAgIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKGxpYl9kaXIpOgorICAgICAgICAgICAgaWYgYW55
KGVudHJ5LnN0YXJ0c3dpdGgobCsnLnNvLicpIGZvciBsIGluIGxpYmNfbGlicmFyeV9uYW1lcykg
b3IgKGVudHJ5LnN0YXJ0c3dpdGgoJ2xpYm5zc18nKSBhbmQgJy5zby4nIGluIGVudHJ5KToKKyAg
ICAgICAgICAgICAgICBsaWJjX2xpYnJhcmllcy5hcHBlbmQob3MucGF0aC5qb2luKGxpYl9kaXIs
IGVudHJ5KSkKKyAgICAgICAgZm9yIGxpYmNfbGlicmFyeV9wcmVmaXggaW4gbGliY19saWJyYXJ5
X25hbWVzOgorICAgICAgICAgICAgaWYgbm90IGFueShvcy5wYXRoLmJhc2VuYW1lKGwpLnN0YXJ0
c3dpdGgobGliY19saWJyYXJ5X3ByZWZpeCsnLnNvLicpIGZvciBsIGluIGxpYmNfbGlicmFyaWVz
KToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1VuYWJsZSB0byBmaW5kIGxp
YmMgbGlicmFyeSAlcycgJSBsaWJjX2xpYnJhcnlfcHJlZml4KQorICAgICAgICBpZiBub3QgYW55
KG9zLnBhdGguYmFzZW5hbWUobCkuc3RhcnRzd2l0aCgnbGlibnNzXycpIGZvciBsIGluIGxpYmNf
bGlicmFyaWVzKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVW5hYmxlIHRvIGZp
bmQgbGliYyBsaWJuc3NfIGxpYnJhcmllcycpCisgICAgICAgIHJldHVybiBsaWJjX2xpYnJhcmll
cworCisgICAgZGVmIF9nZXRfbWVzYV9saWJyYXJpZXMoc2VsZik6CisgICAgICAgIG1lc2FfbGli
cmFyeV9uYW1lcyA9IFsnbGliZ2xhcGknLCAnbGlieGNiLWdseCcsICdsaWJHTFgnLCAnbGliRUdM
JywgJ2xpYkdMJywgJ2xpYkdMRVN2MicsICdsaWJFR0xfbWVzYScsICdsaWJHTFhfbWVzYSddCisg
ICAgICAgIG1lc2FfbGlicmFyaWVzID0gW10KKyAgICAgICAgbGliX2Rpcl9kcmkgPSBzZWxmLl9n
ZXRfcGtnX2NvbmZpZ192YXIoJ2RyaScsICdsaWJkaXInKQorICAgICAgICAjIFNvbWUgdmVyc2lv
bnMgb2YgdGhlIGZsYXRwYWsgU0RLIHNoaXBzIHRoZSBNZXNhIGxpYnJhcmllcyBpbnRvIGEgbm9u
LXN0YW5kYXJkIHBhdGguCisgICAgICAgIGNhbmRpZGF0ZV9saWJfZGlycyA9IFsgbGliX2Rpcl9k
cmksIG9zLnBhdGguam9pbihsaWJfZGlyX2RyaSwgJ0dML2RlZmF1bHQvbGliJykgXQorICAgICAg
ICBmb3IgbGliX2RpciBpbiBjYW5kaWRhdGVfbGliX2RpcnM6CisgICAgICAgICAgICBpZiBvcy5w
YXRoLmlzZGlyKGxpYl9kaXIpOgorICAgICAgICAgICAgICAgIGZvciBlbnRyeSBpbiBvcy5saXN0
ZGlyKGxpYl9kaXIpOgorICAgICAgICAgICAgICAgICAgICBpZiBhbnkoZW50cnkuc3RhcnRzd2l0
aChsKycuc28uJykgZm9yIGwgaW4gbWVzYV9saWJyYXJ5X25hbWVzKToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1lc2FfbGlicmFyaWVzLmFwcGVuZChvcy5wYXRoLmpvaW4obGliX2RpciwgZW50
cnkpKQorICAgICAgICBmb3IgbWVzYV9saWJyYXJ5X3ByZWZpeCBpbiBtZXNhX2xpYnJhcnlfbmFt
ZXM6CisgICAgICAgICAgICBpZiBub3QgYW55KG9zLnBhdGguYmFzZW5hbWUobCkuc3RhcnRzd2l0
aChtZXNhX2xpYnJhcnlfcHJlZml4Kycuc28uJykgZm9yIGwgaW4gbWVzYV9saWJyYXJpZXMpOgor
ICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVW5hYmxlIHRvIGZpbmQgbWVzYSBs
aWJyYXJ5ICVzJyAlIG1lc2FfbGlicmFyeV9wcmVmaXgpCisgICAgICAgIHJldHVybiBtZXNhX2xp
YnJhcmllcworCisgICAgZGVmIF9nZXRfbWVzYV9kcmlfZHJpdmVycyhzZWxmKToKKyAgICAgICAg
ZHJpZHJpdmVyX2RpciA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3ZhcignZHJpJywgJ2RyaWRyaXZl
cmRpcicpCisgICAgICAgIHJldHVybiBzZWxmLl9saXN0X2ZpbGVzX2RpcmVjdG9yeShkcmlkcml2
ZXJfZGlyLCBmaWx0ZXJfc3VmZml4PScuc28nKQorCisgICAgZGVmIF9nZXRfZ2RrX3BpeGJ1Zl9s
b2FkZXJzKHNlbGYpOgorICAgICAgICBsb2FkZXJzX2RpciA9IHNlbGYuX2dldF9wa2dfY29uZmln
X3ZhcignZ2RrLXBpeGJ1Zi0yLjAnLCAnZ2RrX3BpeGJ1Zl9tb2R1bGVkaXInKQorICAgICAgICBy
ZXR1cm4gc2VsZi5fbGlzdF9maWxlc19kaXJlY3RvcnkobG9hZGVyc19kaXIsIGZpbHRlcl9zdWZm
aXg9Jy5zbycpCisKKyAgICBkZWYgX2dldF9nZGtfcXVlcnlfbG9hZGVyc19iaW5hcnkoc2VsZik6
CisgICAgICAgIGdka19waXhidWZfcXVlcnlfbG9hZGVyX3ZhbHVlID0gc2VsZi5fZ2V0X3BrZ19j
b25maWdfdmFyKCdnZGstcGl4YnVmLTIuMCcsICdnZGtfcGl4YnVmX3F1ZXJ5X2xvYWRlcnMnKQor
ICAgICAgICBnZGtfcGl4YnVmX2xpYmRpciA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3ZhcignZ2Rr
LXBpeGJ1Zi0yLjAnLCAnbGliZGlyJykKKyAgICAgICAgIyBTb21lIGRpc3Ryb3MgKGxpa2UgRGVi
aWFuKSBkb24ndCBzaGlwIHRoZSBiaW5hcnkgb24gdGhlIGRlY2xhcmVkIHBhdGggb24gcGtnLWNv
bmZpZywgYnV0IGluc2lkZSAkbGliZGlyL2dkay1waXhidWYtMi4wCisgICAgICAgIGZvciBnZGtf
cGl4YnVmX2JpbmFyeSAgaW4gWyBnZGtfcGl4YnVmX3F1ZXJ5X2xvYWRlcl92YWx1ZSwgb3MucGF0
aC5qb2luKGdka19waXhidWZfbGliZGlyLCAnZ2RrLXBpeGJ1Zi0yLjAvZ2RrLXBpeGJ1Zi1xdWVy
eS1sb2FkZXJzJykgXToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGdka19waXhidWZf
YmluYXJ5KSBhbmQgb3MuYWNjZXNzKGdka19waXhidWZfYmluYXJ5LCBvcy5YX09LKToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2RrX3BpeGJ1Zl9iaW5hcnkKKyAgICAgICAgcmFpc2UgUnVudGlt
ZUVycm9yKCdVbmFibGUgdG8gZmluZCBhIHZhbGlkIHBhdGggdG8gZ2RrLXBpeGJ1Zi1xdWVyeS1s
b2FkZXJzIGJpbmFyeScpCisKKyAgICBkZWYgX2dldF9ndGtfcXVlcnlfaW1tb2R1bGVzX2JpbmFy
eShzZWxmKToKKyAgICAgICAgZ3RrX2xpYmRpciA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3Zhcign
Z3RrKy0zLjAnLCAnbGliZGlyJykKKyAgICAgICAgZm9yIGd0a19kaXIgaW4gWyAnL3Vzci9iaW4n
LCBndGtfbGliZGlyLCBvcy5wYXRoLmpvaW4oZ3RrX2xpYmRpciwgJ2xpYmd0ay0zLTAnKSwgb3Mu
cGF0aC5qb2luKGd0a19saWJkaXIsICdndGstMy4wJykgXToKKyAgICAgICAgICAgIGd0a19pbW1v
ZHVsZXNfYmluYXJ5ID0gb3MucGF0aC5qb2luKGd0a19kaXIsICdndGstcXVlcnktaW1tb2R1bGVz
LTMuMCcpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShndGtfaW1tb2R1bGVzX2JpbmFy
eSkgYW5kIG9zLmFjY2VzcyhndGtfaW1tb2R1bGVzX2JpbmFyeSwgb3MuWF9PSyk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGd0a19pbW1vZHVsZXNfYmluYXJ5CisgICAgICAgIHJhaXNlIFJ1bnRp
bWVFcnJvcignVW5hYmxlIHRvIGZpbmQgYSB2YWxpZCBwYXRoIHRvIGdkay1waXhidWYtcXVlcnkt
bG9hZGVycyBiaW5hcnknKQorCisgICAgZGVmIF9nZXRfcGlwZXdpcmVfc3BhX2Jhc2VkaXJfYW5k
X3BsdWdpbnMoc2VsZik6CisgICAgICAgIHNwYV9wbHVnaW5fZGlyID0gc2VsZi5fZ2V0X3BrZ19j
b25maWdfdmFyKCdsaWJzcGEtMC4yJywgJ3BsdWdpbmRpcicsIGFzc2VydF92YWx1ZT1GYWxzZSkK
KyAgICAgICAgIyBDdXJyZW50bHkgdGhlIGZsYXRwYWsgU0RLIGRvZXNuJ3QgZGVjbGFyZSBwbHVn
aW5kaXIgKG5vdCBzdXJlIHdoeSkuLiBmYWxsYmFjayB0byBidWlsZCBpdCBmcm9tIGxpYmRpcgor
ICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzcGFfcGx1Z2luX2Rpcik6CisgICAgICAgICAg
ICBzcGFfcGx1Z2luX2RpciA9IHNlbGYuX2dldF9wa2dfY29uZmlnX3ZhcignbGlic3BhLTAuMics
ICdsaWJkaXInKQorICAgICAgICAgICAgc3BhX3BsdWdpbl9kaXIgPSBvcy5wYXRoLmpvaW4oc3Bh
X3BsdWdpbl9kaXIsICdzcGEtMC4yJykKKyAgICAgICAgcGlwZXdpcmVfc3BhX3BsdWdpbnMgPSBz
ZWxmLl9saXN0X2ZpbGVzX2RpcmVjdG9yeShzcGFfcGx1Z2luX2RpciwgbGlzdF9pbnNpZGVfc3Vi
ZGlycz1UcnVlLCBmaWx0ZXJfc3VmZml4PScuc28nKQorICAgICAgICByZXR1cm4gc3BhX3BsdWdp
bl9kaXIsIHBpcGV3aXJlX3NwYV9wbHVnaW5zCiAKICAgICBkZWYgX2FkZF9vYmplY3Rfb3JfZ2V0
X3N5c2RlcChzZWxmLCBvYmplY3QsIG9iamVjdF90eXBlKToKICAgICAgICAgcHJvdmlkZWRfYnlf
c3lzdGVtX3BhY2thZ2UgPSBOb25lCiAgICAgICAgIGlmIHNlbGYuX3N5c2xpYnMgPT0gJ2J1bmRs
ZS1hbGwnOgotICAgICAgICAgICAgc2VsZi5fYnVuZGxlci5jb3B5X2FuZF9yZW1vdmVfcnBhdGgo
b2JqZWN0LCB0eXBlPW9iamVjdF90eXBlKQorICAgICAgICAgICAgc2VsZi5fYnVuZGxlci5jb3B5
X2FuZF9tYXliZV9zdHJpcF9wYXRjaGVsZihvYmplY3QsIHR5cGU9b2JqZWN0X3R5cGUsIHN0cmlw
PXNlbGYuX3Nob3VsZF9zdHJpcF9vYmplY3RzLCBwYXRjaGVsZl9yZW1vdmVycGF0aD1UcnVlLCBw
YXRjaGVsZl9ub2RlZmF1bHRsaWI9VHJ1ZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHBy
b3ZpZGVkX2J5X3N5c3RlbV9wYWNrYWdlID0gc2VsZi5fZ2V0X3N5c3RlbV9wYWNrYWdlX25hbWUo
b2JqZWN0KQogICAgICAgICAgICAgaWYgbm90IHByb3ZpZGVkX2J5X3N5c3RlbV9wYWNrYWdlOgot
ICAgICAgICAgICAgICAgIHNlbGYuX2J1bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRoKG9iamVj
dCwgdHlwZT1vYmplY3RfdHlwZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9idW5kbGVyLmNvcHlf
YW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKG9iamVjdCwgdHlwZT1vYmplY3RfdHlwZSwgc3RyaXA9
c2VsZi5fc2hvdWxkX3N0cmlwX29iamVjdHMsIHBhdGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBh
dGNoZWxmX25vZGVmYXVsdGxpYj1GYWxzZSkKICAgICAgICAgcmV0dXJuIHByb3ZpZGVkX2J5X3N5
c3RlbV9wYWNrYWdlCiAKICAgICBkZWYgX2Vuc3VyZV93cGVfYmFja2VuZF9zeW1saW5rKHNlbGYp
OgpAQCAtMzgyLDYgKzU1NCw4NCBAQCBjbGFzcyBCdW5kbGVDcmVhdG9yKG9iamVjdCk6CiAgICAg
ICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoZW50cnksIHdwZV9iYWNrZW5kX3NvbmFtZSkKICAg
ICAgICAgICAgICAgICBvcy5jaGRpcihwcmV2aW91c19kaXIpCiAgICAgICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihidW5kbGVfbGli
X2Rpciwgd3BlX2JhY2tlbmRfc29uYW1lKSk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJy
b3IoJ1VuYWJsZSB0byBjcmVhdGUgbGliV1BFQmFja2VuZC1mZG8tMS4wLnNvIHN5bWxpbmsnKQor
CisgICAgZGVmIF9kbG9wZW53cmFwX21ha2Uoc2VsZiwgYWN0aW9uPU5vbmUpOgorICAgICAgICBk
bG9wZW53cmFwX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fZGxvcGVud3JhcF9kaXIsICdkbG9w
ZW53cmFwLnNvJykKKyAgICAgICAgcHJldmlvdXNfY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAg
b3MuY2hkaXIoc2VsZi5fZGxvcGVud3JhcF9kaXIpCisgICAgICAgIGlmIGFjdGlvbiA9PSAnYnVp
bGQnOgorICAgICAgICAgICAgcmV0Y29kZSwgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLl9ydW5fY21k
X2FuZF9nZXRfb3V0cHV0KFsnbWFrZSddKQorICAgICAgICAgICAgaWYgKHJldGNvZGUgIT0gMCkg
b3IgKG5vdCBvcy5wYXRoLmlzZmlsZShkbG9wZW53cmFwX3BhdGgpKToKKyAgICAgICAgICAgICAg
ICByYWlzZSBSdW50aW1lRXJyb3IoJ0Vycm9yIGJ1aWxkaW5nIGRsb3BlbndyYXAuc286IFRoZSBt
YWtlIGNvbW1hbmQgcmV0dXJuZWQgJWQgc3RhdHVzIHdpdGggdGhpcyBvdXRwdXQ6ICVzICVzJyAl
IChyZXRjb2RlLCBzdGRvdXQsIHN0ZGVycikpCisgICAgICAgIGVsaWYgYWN0aW9uID09ICdjbGVh
bic6CisgICAgICAgICAgICByZXRjb2RlLCBzdGRvdXQsIHN0ZGVyciA9IHNlbGYuX3J1bl9jbWRf
YW5kX2dldF9vdXRwdXQoWydtYWtlJywgJ2NsZWFuJ10pCisgICAgICAgICAgICBpZiAocmV0Y29k
ZSAhPSAwKSBvciBvcy5wYXRoLmlzZmlsZShkbG9wZW53cmFwX3BhdGgpOgorICAgICAgICAgICAg
ICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXJyb3IgY2xlYW5pbmcgZGxvcGVud3JhcC5zbzogVGhl
IG1ha2UgY29tbWFuZCByZXR1cm5lZCAlZCBzdGF0dXMgd2l0aCB0aGlzIG91dHB1dDogJXMgJXMn
ICUgKHJldGNvZGUsIHN0ZG91dCwgc3RkZXJyKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1Vua25vd24gYWN0aW9uICVzJyAlIGFjdGlvbikK
KyAgICAgICAgb3MuY2hkaXIocHJldmlvdXNfY3dkKQorICAgICAgICByZXR1cm4gZGxvcGVud3Jh
cF9wYXRoCisKKyAgICBkZWYgX2Rpc2NvdmVyX2VnbF9tZXNhX2NvbmZpZ19maWxlKHNlbGYpOgor
ICAgICAgICBlZ2xfbGliZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdlZ2wnLCAnbGli
ZGlyJykKKyAgICAgICAgIyBOb3Qga25vd24gd2F5IG9mIGdldHRpbmcgdGhlIGRpcmVjdG9yeSBk
eW5hbWljYWxseSwgYXNzdW1lIGl0IGlzIHRoZXJlLgorICAgICAgICBpY2RfZWdsX21lc2FfY29u
ZmlnX2NhbmRpZGF0ZXMgPSBbJy91c3Ivc2hhcmUvZ2x2bmQvZWdsX3ZlbmRvci5kLzUwX21lc2Eu
anNvbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0
aC5qb2luKGVnbF9saWJkaXIsICdHTC9nbHZuZC9lZ2xfdmVuZG9yLmQvNTBfbWVzYS5qc29uJyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2lu
KGVnbF9saWJkaXIsICdnbHZuZC9lZ2xfdmVuZG9yLmQvNTBfbWVzYS5qc29uJyldCisgICAgICAg
IGZvciBpY2RfZWdsX21lc2FfY29uZmlnX2NhbmRpZGF0ZSBpbiBpY2RfZWdsX21lc2FfY29uZmln
X2NhbmRpZGF0ZXM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShpY2RfZWdsX21lc2Ff
Y29uZmlnX2NhbmRpZGF0ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGljZF9lZ2xfbWVzYV9j
b25maWdfY2FuZGlkYXRlCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ291bGQgbm90IGZp
bmQgbWVzYSBFR0wgSUNEIGNvbmZpZycpCisKKyAgICBkZWYgX2dldF9tZXNhX2VnbF9pY2RfZHJp
dmVyX3BhdGgoc2VsZiwgaWNkX2NvbmZpZyk6CisgICAgICAgIHdpdGggb3BlbihpY2RfY29uZmln
LCAncicpIGFzIGY6CisgICAgICAgICAgICBqc29uX2RhdGEgPSBqc29uLmxvYWQoZikKKyAgICAg
ICAgZWdsX2ljZF9saWJyYXJ5X25hbWUgPSBqc29uX2RhdGFbJ0lDRCddWydsaWJyYXJ5X3BhdGgn
XQorICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKGVnbF9pY2RfbGlicmFyeV9uYW1lKToKKyAgICAg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BhdGggcmV3cml0dGluZyBuZWVkcyB0
byBiZSBpbXBsZW1lbnRlZCB0byBoYW5kbGUgSUNEIGNvbmZpZyBmaWxlcyB3aXRoIGFic3BhdGgn
KQorICAgICAgICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIGZsYXRwYWsgU0RLIHNoaXBzIHRoZSBF
R0wgSUNEIGxpYnJhcnkgaW50byBhIG5vbi1zdGFuZGFyZCBwYXRoLgorICAgICAgICBlZ2xfbGli
ZGlyID0gc2VsZi5fZ2V0X3BrZ19jb25maWdfdmFyKCdlZ2wnLCAnbGliZGlyJykKKyAgICAgICAg
ZWdsX2ljZF9saWJyYXJ5X2ZvdW5kID0gRmFsc2UKKyAgICAgICAgZWdsX2ljZF9saWJyYXJ5X3Bh
dGhzID0gW29zLnBhdGguam9pbihlZ2xfbGliZGlyLCBlZ2xfaWNkX2xpYnJhcnlfbmFtZSksIG9z
LnBhdGguam9pbihlZ2xfbGliZGlyLCAnR0wvZGVmYXVsdC9saWInLCBlZ2xfaWNkX2xpYnJhcnlf
bmFtZSldCisgICAgICAgIGZvciBlZ2xfaWNkX2xpYnJhcnlfcGF0aCBpbiBlZ2xfaWNkX2xpYnJh
cnlfcGF0aHM6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShlZ2xfaWNkX2xpYnJhcnlf
cGF0aCk6CisgICAgICAgICAgICAgICAgZWdsX2ljZF9saWJyYXJ5X2ZvdW5kID0gVHJ1ZQorICAg
ICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBlZ2xfaWNkX2xpYnJhcnlfZm91bmQ6
CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1VuYWJsZSB0byBmaW5kIHRoZSBFR0wg
SUNEIGxpYnJhcnkgJXMnICUgZWdsX2ljZF9saWJyYXJ5X3BhdGgpCisgICAgICAgIHJldHVybiBl
Z2xfaWNkX2xpYnJhcnlfcGF0aAorCisgICAgZGVmIF9nZXRfdG90YWxfc2l6ZV9kaXIoc2VsZiwg
ZGlyZWN0b3J5KToKKyAgICAgICAgc2l6ZSA9IDAKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZp
bGVzIGluIG9zLndhbGsoZGlyZWN0b3J5KToKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVz
OgorICAgICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmaWxlKQor
ICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVfcGF0aCk6CisgICAgICAgICAg
ICAgICAgICAgIHNpemUgKz0gb3MucGF0aC5nZXRzaXplKGZpbGVfcGF0aCkKKyAgICAgICAgcmV0
dXJuIHNpemUKKworICAgIGRlZiBfZ2VuZXJhdGVfZm9udF9jb25mKHNlbGYsIGRhdGFfZGlyZWN0
b3J5KToKKyAgICAgICAgZm9udF9jb25mX3BhdGggPSBvcy5wYXRoLmpvaW4oZGF0YV9kaXJlY3Rv
cnksICdmb250cy5jb25mJykKKyAgICAgICAgd2l0aCBvcGVuKGZvbnRfY29uZl9wYXRoLCAndycp
IGFzIGZvbnRfY29uZl9oYW5kbGU6CisgICAgICAgICAgICBmb250X2NvbmZfaGFuZGxlLndyaXRl
KEZPTlRfQ09ORl9GSUxFKQorCisgICAgZGVmIF9nZW5lcmF0ZV90bHNfY2FmaWxlKHNlbGYsIGRh
dGFfZGlyZWN0b3J5KToKKyAgICAgICAgY2FmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oZGF0YV9k
aXJlY3RvcnksICdidW5kbGUtY2EtY2VydGlmaWNhdGVzLnBlbScpCisgICAgICAgIHJldGNvZGUs
IHN0ZG91dCwgc3RkZXJyID0gc2VsZi5fcnVuX2NtZF9hbmRfZ2V0X291dHB1dChbJ3RydXN0Jywg
J2V4dHJhY3QnLCAnLS1mb3JtYXQ9cGVtLWJ1bmRsZScsIGNhZmlsZV9wYXRoXSkKKyAgICAgICAg
IyB0cnVzdCBmYWlscyBpbnNpZGUgZmxhdHBhayBkdWUgdG8gaHR0cHM6Ly9naXRsYWIuY29tL2Zy
ZWVkZXNrdG9wLXNkay9mcmVlZGVza3RvcC1zZGsvLS9pc3N1ZXMvOTA0CisgICAgICAgICMgZmFs
bC1iYWNrIHRvIHRyeWluZyB0byBtYW51YWxseSBjb3B5IHRoZSBidW5kbGUKKyAgICAgICAgaWYg
KHJldGNvZGUgIT0gMCkgb3IgKG5vdCBvcy5wYXRoLmlzZmlsZShjYWZpbGVfcGF0aCkpIG9yIChv
cy5wYXRoLmdldHNpemUoY2FmaWxlX3BhdGgpIDwgMTAwKToKKyAgICAgICAgICAgIF9sb2cud2Fy
bmluZygnRmFpbGVkIHRvIGdldCBzeXN0ZW0gQ0EgYnVuZGxlIHdpdGggdGhlIHRydXN0IGNvbW1h
bmQuIFRyeWluZyB0byBmYWxsLWJhY2sgdG8gbWFudWFsIGNvcHkuJykKKyAgICAgICAgICAgIGlm
IG9zLnBhdGguaXNmaWxlKGNhZmlsZV9wYXRoKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmso
Y2FmaWxlX3BhdGgpCisgICAgICAgICAgICBmb3IgY2FuZGlkYXRlX2NhZmlsZSBpbiBbJy9ldGMv
c3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQnLCAnL2V0Yy9zc2wvY2VydC5wZW0nLCAnL2V0
Yy9wa2kvY2EtdHJ1c3QvZXh0cmFjdGVkL3BlbS90bHMtY2EtYnVuZGxlLnBlbSddOgorICAgICAg
ICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNhbmRpZGF0ZV9jYWZpbGUpOgorICAgICAgICAg
ICAgICAgICAgICBzaHV0aWwuY29weShjYW5kaWRhdGVfY2FmaWxlLCBjYWZpbGVfcGF0aCkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgKG5vdCBvcy5wYXRoLmlzZmlsZShj
YWZpbGVfcGF0aCkpIG9yIChvcy5wYXRoLmdldHNpemUoY2FmaWxlX3BhdGgpIDwgMTAwKToKKyAg
ICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIG9yIGNvcHkg
dGhlIHN5c3RlbSBUTFMgQ0FGaWxlIHdpdGggdGhlIGNlcnRpZmljYXRlcy4nKQogCiAgICAgZGVm
IF9jcmVhdGVfYnVuZGxlKHNlbGYsIGJ1bmRsZV9iaW5hcnkpOgogICAgICAgICBtYWluX2JpbmFy
eV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX2J1aWxkcGF0aCwgJ2JpbicsIGJ1bmRsZV9iaW5h
cnkpCkBAIC0zODksNDggKzYzOSwxMDYgQEAgY2xhc3MgQnVuZGxlQ3JlYXRvcihvYmplY3QpOgog
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGZpbmQgYmluYXJ5IGZvciAlcyBh
dCAlcycgJSAoYnVuZGxlX2JpbmFyeSwgbWFpbl9iaW5hcnlfcGF0aCkgKQogCiAgICAgICAgIGNv
cGllZF9pbnRlcnByZXRlciA9IE5vbmUKKyAgICAgICAgbmVlZHNfdG9fY3JlYXRlX3dwZV9iYWNr
ZW5kX3N5bWxpbmsgPSBGYWxzZQogICAgICAgICBnaW9fbW9kdWxlcyA9IFtdCisgICAgICAgIGd0
a19wcmludF9tb2R1bGVzID0gW10KKyAgICAgICAgZ3RrX2ltX21vZHVsZXMgPSBbXQogICAgICAg
ICBnc3RyZWFtZXJfbW9kdWxlcyA9IFtdCisgICAgICAgIG1lc2FfZHJpX2RyaXZlcnMgPSBbXQor
ICAgICAgICBwaXBld2lyZV9zcGFfcGx1Z2lucyA9IFtdCisgICAgICAgIGdka19waXhidWZfbG9h
ZGVycyA9IFtdCisgICAgICAgIGVnbF9pY2RfbWVzYV9jb25maWdfZmlsZSA9IE5vbmUKICAgICAg
ICAgbGlicmFyaWVzX2NoZWNrZWQgPSBzZXQoKQogICAgICAgICBzeXN0ZW1fcGFja2FnZXNfbmVl
ZGVkID0gc2V0KCkKKyAgICAgICAgYmluYXJpZXNfdG9fY29weSA9IHNldCgpCiAgICAgICAgIG9i
amVjdHNfdG9fY29weSA9IFsgbWFpbl9iaW5hcnlfcGF0aCBdCisgICAgICAgICMgV2Ugb25seSB3
YW50IHRvIHNlcGFyYXRlIHRoZSBsaWJyYXJpZXMgaW4gbGliIGFuZCBzeXMvbGliIGZvciBNaW5p
QnJvd3NlciBhbmQgJ2FsbCcgYnVuZGxlcworICAgICAgICBzZWxmLl9idW5kbGVyLnNldF91c2Vf
c3lzX2xpYl9kaXJlY3RvcnkoJ01pbmlCcm93c2VyJyBpbiBzZWxmLl9idW5kbGVfYmluYXJpZXMp
CiAgICAgICAgIGlmIGJ1bmRsZV9iaW5hcnkgPT0gJ01pbmlCcm93c2VyJzoKLSAgICAgICAgICAg
IGdpb19tb2R1bGVzID0gc2VsZi5fZ2V0X2dpb19tb2R1bGVzKCkKLSAgICAgICAgICAgIGdzdHJl
YW1lcl9tb2R1bGVzID0gc2VsZi5fZ2V0X2dzdHJlYW1lcl9tb2R1bGVzKCkKKyAgICAgICAgICAg
ICMgYnVuZGRsZSBXZWJLaXQgbGlicmFyaWVzCiAgICAgICAgICAgICBvYmplY3RzX3RvX2NvcHku
ZXh0ZW5kKHNlbGYuX2dldF93ZWJraXRfYmluYXJpZXMoKSkKLSAgICAgICAgICAgIG9iamVjdHNf
dG9fY29weS5hcHBlbmQoc2VsZi5fZ2V0X3dlYmtpdF9idW5kbGVsaWIoKSkKKyAgICAgICAgICAg
IG9iamVjdHNfdG9fY29weS5hcHBlbmQoc2VsZi5fZ2V0X3dlYmtpdF9saWIoJ0luamVjdGVkQnVu
ZGxlJykpCisgICAgICAgICAgICBpZiBzZWxmLl9wbGF0Zm9ybSA9PSAnd3BlJzoKKyAgICAgICAg
ICAgICAgICBvYmplY3RzX3RvX2NvcHkuYXBwZW5kKHNlbGYuX2dldF93ZWJraXRfbGliKCdJbnNw
ZWN0b3JSZXNvdXJjZXMnKSkKKyAgICAgICAgICAgICMgQnVuZGxlIGV4dHJhIHN5c3RlbSByZWxh
dGVkIGxpYnJhcmllcworICAgICAgICAgICAgZ2lvX21vZHVsZXMgPSBzZWxmLl9nZXRfZ2lvX21v
ZHVsZXMoKQogICAgICAgICAgICAgb2JqZWN0c190b19jb3B5LmV4dGVuZChnaW9fbW9kdWxlcykK
KyAgICAgICAgICAgIGdzdHJlYW1lcl9tb2R1bGVzID0gc2VsZi5fZ2V0X2dzdHJlYW1lcl9tb2R1
bGVzKCkKICAgICAgICAgICAgIG9iamVjdHNfdG9fY29weS5leHRlbmQoZ3N0cmVhbWVyX21vZHVs
ZXMpCisgICAgICAgICAgICBpZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKKyAgICAg
ICAgICAgICAgICAjIG5lZWQgdG8gc2hpcCBhIGNvcHkgb2YgZ3N0IHBsdWdpbmcgc2Nhbm5lcgor
ICAgICAgICAgICAgICAgIG9iamVjdHNfdG9fY29weS5hcHBlbmQoc2VsZi5fZ2V0X2dzdHJlYW1l
cl9wbHVnaW5fc2Nhbm5lcigpKQorICAgICAgICAgICAgICAgICMgcGlwZXdpcmUgc3BhIHBsdWdp
bnMKKyAgICAgICAgICAgICAgICBwaXBld2lyZV9zcGFfcGx1Z2luX2Jhc2VkaXIsIHBpcGV3aXJl
X3NwYV9wbHVnaW5zID0gc2VsZi5fZ2V0X3BpcGV3aXJlX3NwYV9iYXNlZGlyX2FuZF9wbHVnaW5z
KCkKKyAgICAgICAgICAgICAgICBvYmplY3RzX3RvX2NvcHkuZXh0ZW5kKHBpcGV3aXJlX3NwYV9w
bHVnaW5zKQorICAgICAgICAgICAgICAgICMgZ3JhcGhpY3MgZHJpdmVycworICAgICAgICAgICAg
ICAgIG1lc2FfZHJpX2RyaXZlcnMgPSBzZWxmLl9nZXRfbWVzYV9kcmlfZHJpdmVycygpCisgICAg
ICAgICAgICAgICAgb2JqZWN0c190b19jb3B5LmV4dGVuZChtZXNhX2RyaV9kcml2ZXJzKQorICAg
ICAgICAgICAgICAgIG9iamVjdHNfdG9fY29weS5leHRlbmQoc2VsZi5fZ2V0X21lc2FfbGlicmFy
aWVzKCkpCisgICAgICAgICAgICAgICAgZWdsX2ljZF9tZXNhX2NvbmZpZ19maWxlID0gc2VsZi5f
ZGlzY292ZXJfZWdsX21lc2FfY29uZmlnX2ZpbGUoKQorICAgICAgICAgICAgICAgIG9iamVjdHNf
dG9fY29weS5hcHBlbmQoc2VsZi5fZ2V0X21lc2FfZWdsX2ljZF9kcml2ZXJfcGF0aChlZ2xfaWNk
X21lc2FfY29uZmlnX2ZpbGUpKQorICAgICAgICAgICAgICAgICMgc3lzdGVtIGV4dHJhIGxpYnJh
cmllcworICAgICAgICAgICAgICAgIG9iamVjdHNfdG9fY29weS5leHRlbmQoc2VsZi5fZ2V0X2xp
YmNfbGlicmFyaWVzKCkpCisgICAgICAgICAgICAgICAgIyBndGsgbW9kdWxlcworICAgICAgICAg
ICAgICAgIGlmIHNlbGYuX3BsYXRmb3JtID09ICdndGsnOgorICAgICAgICAgICAgICAgICAgICBn
dGtfcHJpbnRfbW9kdWxlcyA9IHNlbGYuX2dldF9ndGtfbW9kdWxlcygncHJpbnRiYWNrZW5kcycp
CisgICAgICAgICAgICAgICAgICAgIG9iamVjdHNfdG9fY29weS5leHRlbmQoZ3RrX3ByaW50X21v
ZHVsZXMpCisgICAgICAgICAgICAgICAgICAgIGd0a19pbV9tb2R1bGVzID0gc2VsZi5fZ2V0X2d0
a19tb2R1bGVzKCdpbW1vZHVsZXMnKQorICAgICAgICAgICAgICAgICAgICBvYmplY3RzX3RvX2Nv
cHkuZXh0ZW5kKGd0a19pbV9tb2R1bGVzKQorICAgICAgICAgICAgICAgICAgICBnZGtfcGl4YnVm
X2xvYWRlcnMgPSBzZWxmLl9nZXRfZ2RrX3BpeGJ1Zl9sb2FkZXJzKCkKKyAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0c190b19jb3B5LmV4dGVuZChnZGtfcGl4YnVmX2xvYWRlcnMpCisgICAgICAg
ICAgICAgICAgICAgIG9iamVjdHNfdG9fY29weS5hcHBlbmQoc2VsZi5fZ2V0X2dka19xdWVyeV9s
b2FkZXJzX2JpbmFyeSgpKQorICAgICAgICAgICAgICAgICAgICBvYmplY3RzX3RvX2NvcHkuYXBw
ZW5kKHNlbGYuX2dldF9ndGtfcXVlcnlfaW1tb2R1bGVzX2JpbmFyeSgpKQorICAgICAgICAgICAg
ICAgICMgb3VyIGRsb3BlbndyYXAgbGliCisgICAgICAgICAgICAgICAgb2JqZWN0c190b19jb3B5
LmFwcGVuZChzZWxmLl9kbG9wZW53cmFwX21ha2UoJ2J1aWxkJykpCisKICAgICAgICAgZm9yIG9i
amVjdCBpbiBvYmplY3RzX3RvX2NvcHk6CiAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IE5v
bmUKICAgICAgICAgICAgIGlmIG9iamVjdCBpbiBnaW9fbW9kdWxlczoKLSAgICAgICAgICAgICAg
ICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2RlcChvYmplY3Qs
ICdnaW8nKQotICAgICAgICAgICAgICAgIGlmIHN5c3RlbV9wYWNrYWdlOgotICAgICAgICAgICAg
ICAgICAgICBzeXN0ZW1fcGFja2FnZXNfbmVlZGVkLmFkZChzeXN0ZW1fcGFja2FnZSkKKyAgICAg
ICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2Rl
cChvYmplY3QsICdsaWIvZ2lvJykKICAgICAgICAgICAgIGVsaWYgb2JqZWN0IGluIGdzdHJlYW1l
cl9tb2R1bGVzOgotICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlID0gc2VsZi5fYWRkX29i
amVjdF9vcl9nZXRfc3lzZGVwKG9iamVjdCwgJ2dzdCcpCi0gICAgICAgICAgICAgICAgaWYgc3lz
dGVtX3BhY2thZ2U6Ci0gICAgICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlc19uZWVkZWQu
YWRkKHN5c3RlbV9wYWNrYWdlKQotICAgICAgICAgICAgZWxpZiBvYmplY3QuZW5kc3dpdGgoJy5z
bycpOgotICAgICAgICAgICAgICAgIHNlbGYuX2J1bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRo
KG9iamVjdCwgdHlwZT0nbGliJykKKyAgICAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNl
bGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2RlcChvYmplY3QsICdsaWIvZ3N0JykKKyAgICAgICAg
ICAgIGVsaWYgb2JqZWN0IGluIGd0a19wcmludF9tb2R1bGVzOgorICAgICAgICAgICAgICAgIHN5
c3RlbV9wYWNrYWdlID0gc2VsZi5fYWRkX29iamVjdF9vcl9nZXRfc3lzZGVwKG9iamVjdCwgJ2xp
Yi9ndGsvcHJpbnRiYWNrZW5kcycpCisgICAgICAgICAgICBlbGlmIG9iamVjdCBpbiBndGtfcHJp
bnRfbW9kdWxlczoKKyAgICAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9v
YmplY3Rfb3JfZ2V0X3N5c2RlcChvYmplY3QsICdsaWIvZ3RrL3ByaW50YmFja2VuZHMnKQorICAg
ICAgICAgICAgZWxpZiBvYmplY3QgaW4gZ3RrX2ltX21vZHVsZXM6CisgICAgICAgICAgICAgICAg
c3lzdGVtX3BhY2thZ2UgPSBzZWxmLl9hZGRfb2JqZWN0X29yX2dldF9zeXNkZXAob2JqZWN0LCAn
bGliL2d0ay9pbW1vZHVsZXMnKQorICAgICAgICAgICAgZWxpZiBvYmplY3QgaW4gbWVzYV9kcmlf
ZHJpdmVyczoKKyAgICAgICAgICAgICAgICBzeXN0ZW1fcGFja2FnZSA9IHNlbGYuX2FkZF9vYmpl
Y3Rfb3JfZ2V0X3N5c2RlcChvYmplY3QsICdsaWIvZHJpJykKKyAgICAgICAgICAgIGVsaWYgb2Jq
ZWN0IGluIGdka19waXhidWZfbG9hZGVyczoKKyAgICAgICAgICAgICAgICBzeXN0ZW1fcGFja2Fn
ZSA9IHNlbGYuX2FkZF9vYmplY3Rfb3JfZ2V0X3N5c2RlcChvYmplY3QsICdsaWIvZ2RrLXBpeGJ1
Zi9sb2FkZXJzJykKKyAgICAgICAgICAgIGVsaWYgb2JqZWN0IGluIHBpcGV3aXJlX3NwYV9wbHVn
aW5zOgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhIGxldmVsLTIgaW5kaXJlY3QgZGVwZW5k
ZW5jeSAoZ3N0cmVhbWVyIC0+IGdzdC1waXBld2lyZSAtPiBwaXBld2lyZS1zcGEtcGx1Z2luKQor
ICAgICAgICAgICAgICAgICMgRm9yIHRoZSBjYXNlIG9mIHN5c3RlbV9wYWNrYWdlcyB3ZSByZWx5
IG9uIHRoZSBkaXN0cm8gZGVwZW5kZW5jaWVzIGJldHdlbiBwYWNrYWdlcworICAgICAgICAgICAg
ICAgICMgQnV0IHRoZSBidW5kbGUtYWxsIGNhc2Ugd2UgbmVlZCBhIHNwZWNpYWwgY2FzZSBiZWNh
dXNlIHRoaXMgZGVwIGlzIG5vdCBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIChkbG9wZW4gb2YgcGx1
Z2lucykKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoK
KyAgICAgICAgICAgICAgICAgICAgcGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpciA9IG9i
amVjdC5yZXBsYWNlKHBpcGV3aXJlX3NwYV9wbHVnaW5fYmFzZWRpciwgJycsIDEpCisgICAgICAg
ICAgICAgICAgICAgIHBpcGV3aXJlX3NwYV9wbHVnaW5fZGVzdF9zdWJkaXIgPSBvcy5wYXRoLmRp
cm5hbWUocGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpci5sc3RyaXAoJy8nKSkKKyAgICAg
ICAgICAgICAgICAgICAgcGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpciA9IG9zLnBhdGgu
am9pbignbGliL3BpcGV3aXJlJywgcGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpcikKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fYnVuZGxlci5jb3B5X2FuZF9tYXliZV9zdHJpcF9wYXRj
aGVsZihvYmplY3QsIHR5cGU9cGlwZXdpcmVfc3BhX3BsdWdpbl9kZXN0X3N1YmRpciwgc3RyaXA9
c2VsZi5fc2hvdWxkX3N0cmlwX29iamVjdHMsIHBhdGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBh
dGNoZWxmX25vZGVmYXVsdGxpYj1UcnVlKQorICAgICAgICAgICAgZWxpZiAnLnNvJyBpbiBvYmpl
Y3Q6CisgICAgICAgICAgICAgICAgaWYgJ2xpYndwZWJhY2tlbmQnIGluIG9iamVjdC5sb3dlcigp
OgorICAgICAgICAgICAgICAgICAgICBuZWVkc190b19jcmVhdGVfd3BlX2JhY2tlbmRfc3ltbGlu
ayA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLl9idW5kbGVyLmNvcHlfYW5kX21heWJlX3N0
cmlwX3BhdGNoZWxmKG9iamVjdCwgdHlwZT0nbGliJywgc3RyaXA9c2VsZi5fc2hvdWxkX3N0cmlw
X29iamVjdHMsIHBhdGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBhdGNoZWxmX25vZGVmYXVsdGxp
Yj1zZWxmLl9zeXNsaWJzPT0nYnVuZGxlLWFsbCcpCiAgICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgIHNlbGYuX2J1bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRoKG9iamVjdCwgdHlw
ZT0nYmluJykKKyAgICAgICAgICAgICAgICBiaW5hcmllc190b19jb3B5LmFkZChvYmplY3QpCiAg
ICAgICAgICAgICAjIFRoZXJlIGlzIG5vIG5lZWQgdG8gZXhhbWluZSB0aGUgbGlicmFyaWVzIGxp
bmtlZCB3aXRoIG9iamVjdHMgY29taW5nIGZyb20gYSBzeXN0ZW0gcGFja2FnZSwKICAgICAgICAg
ICAgICMgYmVjYXVzZSBzeXN0ZW0gcGFja2FnZXMgYWxyZWFkeSBkZWNsYXJlIGRlcGVuZGVuY2ll
cyBiZXR3ZWVuIHRoZW0uCiAgICAgICAgICAgICAjIEhvd2V2ZXIsIGlmIHdlIGFyZSBydW5uaW5n
IHdpdGggc2VsZi5fc3lzbGlicyA9PSAnYnVuZGxlLWFsbCcgdGhlbiBzeXN0ZW1fcGFja2FnZSB3
aWxsIGJlIE5vbmUsCiAgICAgICAgICAgICAjIGFuZCBldmVyeXRoaW5nIHdpbGwgYmUgZXhhbWlu
ZWQgYW5kIGJ1bmRsZWQgYXMgd2UgZG9uJ3QgYWNjb3VudCBmb3Igc3lzdGVtIHBhY2thZ2VzIGlu
IHRoYXQgY2FzZS4KLSAgICAgICAgICAgIGlmIG5vdCBzeXN0ZW1fcGFja2FnZToKKyAgICAgICAg
ICAgIGlmIHN5c3RlbV9wYWNrYWdlOgorICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlc19u
ZWVkZWQuYWRkKHN5c3RlbV9wYWNrYWdlKQorICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAg
ICAgICBsaWJyYXJpZXMsIGludGVycHJldGVyID0gc2VsZi5fc2hhcmVkX29iamVjdF9yZXNvbHZl
ci5nZXRfbGlic19hbmRfaW50ZXJwcmV0ZXIob2JqZWN0KQogICAgICAgICAgICAgICAgIGlmIGlu
dGVycHJldGVyIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJv
cigiQ291bGQgbm90IGRldGVybWluZSBpbnRlcnByZXRlciBmb3IgYmluYXJ5ICVzIiAlIG9iamVj
dCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDb3VsZCBub3QgZGV0
ZXJtaW5lIGludGVycHJldGVyIGZvciBiaW5hcnkgJXMnICUgb2JqZWN0KQogICAgICAgICAgICAg
ICAgIGlmIGNvcGllZF9pbnRlcnByZXRlciBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBp
ZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX2J1bmRsZXIuY29weV9hbmRfcmVtb3ZlX3JwYXRoKGludGVycHJldGVyLCB0eXBlPSdp
bnRlcnByZXRlcicpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9idW5kbGVyLmNvcHlf
YW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKGludGVycHJldGVyLCB0eXBlPSdpbnRlcnByZXRlcics
IHN0cmlwPXNlbGYuX3Nob3VsZF9zdHJpcF9vYmplY3RzLCBwYXRjaGVsZl9yZW1vdmVycGF0aD1z
ZWxmLl9zeXNsaWJzPT0nYnVuZGxlLWFsbCcsIHBhdGNoZWxmX25vZGVmYXVsdGxpYj1zZWxmLl9z
eXNsaWJzPT0nYnVuZGxlLWFsbCcpCiAgICAgICAgICAgICAgICAgICAgIGNvcGllZF9pbnRlcnBy
ZXRlciA9IGludGVycHJldGVyCiAgICAgICAgICAgICAgICAgZWxpZiBjb3BpZWRfaW50ZXJwcmV0
ZXIgIT0gaW50ZXJwcmV0ZXI6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJv
cignRGV0ZWN0ZWQgYmluYXJpZXMgd2l0aCBkaWZmZXJlbnQgaW50ZXJwcmV0ZXJzOiAlcyAhPSAl
cycgJShjb3BpZWRfaW50ZXJwcmV0ZXIsIGludGVycHJldGVyKSkKLSAgICAgICAgICAgICAgICAj
IEZJWE1FOiBmb3IgLS1zeXNsaWJzPWJ1bmRsZS1hbGwgd2Ugd291bGQgaGF2ZSB0byBjb3B5IHRo
ZSBsaWJuc3NfKnNvKiBsaWJyYXJpZXMgd2hpY2ggYXJlIGRsb3BlbidlZCA8aHR0cHM6Ly9idWdz
LmRlYmlhbi5vcmcvMjAzMDE0PgotICAgICAgICAgICAgICAgICMgQWxzbyB3ZSBzaG91bGQgaW5j
bHVkZSBjb25maWcgZmlsZXMgbGlrZSBmb250Y29uZmlnIHN0dWZmIG9yIHN1cHBvcnQgZmlsZXMg
bGlrZSBpY29ucy4KICAgICAgICAgICAgICAgICBmb3IgbGlicmFyeSBpbiBsaWJyYXJpZXM6CiAg
ICAgICAgICAgICAgICAgICAgIGlmIGxpYnJhcnkgaW4gbGlicmFyaWVzX2NoZWNrZWQ6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdTa2lwIGFscmVhZHkgY2hlY2tlZCBbbGli
XTogJXMnICUgbGlicmFyeSkKQEAgLTQzOSwxMiArNzQ3LDEwMiBAQCBjbGFzcyBCdW5kbGVDcmVh
dG9yKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9wYWNrYWdlID0gc2VsZi5f
YWRkX29iamVjdF9vcl9nZXRfc3lzZGVwKGxpYnJhcnksICdsaWInKQogICAgICAgICAgICAgICAg
ICAgICBpZiBzeXN0ZW1fcGFja2FnZToKICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9w
YWNrYWdlc19uZWVkZWQuYWRkKHN5c3RlbV9wYWNrYWdlKQotCi0gICAgICAgIHNlbGYuX2Vuc3Vy
ZV93cGVfYmFja2VuZF9zeW1saW5rKCkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiAnbGlid3Bl
YmFja2VuZCcgaW4gbGlicmFyeS5sb3dlcigpOgorICAgICAgICAgICAgICAgICAgICAgICAgbmVl
ZHNfdG9fY3JlYXRlX3dwZV9iYWNrZW5kX3N5bWxpbmsgPSBUcnVlCisgICAgICAgIGlmIG5lZWRz
X3RvX2NyZWF0ZV93cGVfYmFja2VuZF9zeW1saW5rOgorICAgICAgICAgICAgc2VsZi5fZW5zdXJl
X3dwZV9iYWNrZW5kX3N5bWxpbmsoKQorICAgICAgICBmb3IgYmluYXJ5IGluIGJpbmFyaWVzX3Rv
X2NvcHk6CisgICAgICAgICAgICBpZiBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKKyAg
ICAgICAgICAgICAgICBzZWxmLl9idW5kbGVyLmNvcHlfYW5kX21heWJlX3N0cmlwX3BhdGNoZWxm
KGJpbmFyeSwgdHlwZT0nYmluJywgc3RyaXA9c2VsZi5fc2hvdWxkX3N0cmlwX29iamVjdHMsIHBh
dGNoZWxmX3JlbW92ZXJwYXRoPVRydWUsIHBhdGNoZWxmX25vZGVmYXVsdGxpYj1UcnVlLCBwYXRj
aGVsZl9zZXRpbnRlcnByZXRlcl9yZWxhdGl2ZXBhdGg9aW50ZXJwcmV0ZXIpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2J1bmRsZXIuY29weV9hbmRfbWF5YmVfc3Ry
aXBfcGF0Y2hlbGYoYmluYXJ5LCB0eXBlPSdiaW4nLCBzdHJpcD1zZWxmLl9zaG91bGRfc3RyaXBf
b2JqZWN0cywgcGF0Y2hlbGZfcmVtb3ZlcnBhdGg9VHJ1ZSwgcGF0Y2hlbGZfbm9kZWZhdWx0bGli
PUZhbHNlKQorCisgICAgICAgICMgTm93IGNvcHkgZGF0YSBmaWxlcyB0byBzaGFyZSBkaXIgKG9u
bHkgbmVlZGVkIHdoZW4gYnVuZGluZyBhbGwgZm9yIE1pbmlCcm93c2VyKS4KKyAgICAgICAgIyBX
ZSBhc3N1bWUgdGhhdCB0aGUgc3lzdGVtIHVzZXMgc3RhbmRhcmQgcGF0aHMgYXQgL3Vzci9zaGFy
ZSBhbmQgL2V0YyBmb3IgdGhpcyByZXNvdXJjZXMKKyAgICAgICAgIyBFdmVyeSBwYXRoIHNob3Vs
ZCBiZSBjaGVja2VkIGFuZCBpZiBzb21lIG9uZSBpcyBub3QgZm91bmQsIHRoZW4gaXQgd2lsbCBy
YWlzZSBhbiBlcnJvci4KKyAgICAgICAgaWYgYnVuZGxlX2JpbmFyeSA9PSAnTWluaUJyb3dzZXIn
IGFuZCBzZWxmLl9zeXNsaWJzID09ICdidW5kbGUtYWxsJzoKKyAgICAgICAgICAgIHRhcmdldF9z
aGFyZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5fdG1wZGlyLCAnc3lzL3NoYXJlJykKKyAgICAg
ICAgICAgICMgQ29weSBnbHZuZCBFR0wganNvbiBmaWxlcworICAgICAgICAgICAgX2xvZy5pbmZv
KCdDb3B5IEVHTCBjb25maWcgZmlsZXMnKQorICAgICAgICAgICAgZWdsX2ljZF9jb25maWdkaXJf
ZGVzdCA9IG9zLnBhdGguam9pbihzZWxmLl90bXBkaXIsICdzeXMvbGliL2dsdm5kL2VnbF92ZW5k
b3IuZCcpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihlZ2xfaWNkX2NvbmZpZ2Rp
cl9kZXN0KToKKyAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhlZ2xfaWNkX2NvbmZpZ2Rpcl9k
ZXN0KQorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KGVnbF9pY2RfbWVzYV9jb25maWdfZmls
ZSwgZWdsX2ljZF9jb25maWdkaXJfZGVzdCkKKyAgICAgICAgICAgICMgQ29weSBnbGliLTIgY29t
cGlsZWQgc2NoZW1hcworICAgICAgICAgICAgX2xvZy5pbmZvKCdDb3B5IEdsaWIgY29tcGlsZWQg
c2NoZW1hcycpCisgICAgICAgICAgICBzY2hlbWFzX3RhcmdldF9kaXIgPSBvcy5wYXRoLmpvaW4o
dGFyZ2V0X3NoYXJlX2RpciwgJ2dsaWItMi4wL3NjaGVtYXMnKQorICAgICAgICAgICAgb3MubWFr
ZWRpcnMoc2NoZW1hc190YXJnZXRfZGlyKQorICAgICAgICAgICAgY29tcGlsZWRfc2NoZW1hc19m
aWxlID0gJy91c3Ivc2hhcmUvZ2xpYi0yLjAvc2NoZW1hcy9nc2NoZW1hcy5jb21waWxlZCcKKyAg
ICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShjb21waWxlZF9zY2hlbWFzX2ZpbGUpOgor
ICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIkNhbid0IGZpbmQgdGhl
IGdzY2hlbWFzLmNvbXBpbGVkIGZpbGUgYXQgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGluIHRoaXMg
c3lzdGVtIikKKyAgICAgICAgICAgIHNodXRpbC5jb3B5KGNvbXBpbGVkX3NjaGVtYXNfZmlsZSwg
c2NoZW1hc190YXJnZXRfZGlyKQorICAgICAgICAgICAgX2xvZy5pbmZvKCdDb3B5IHNoYXJlZCBt
aW1lIGluZm8gY2FjaGUnKQorICAgICAgICAgICAgIyBTYW1lIGZvciBzaGFyZWQtbWltZS1pbmZv
IGNhY2hlCisgICAgICAgICAgICBtaW1lX3RhcmdldF9kaXIgPSBvcy5wYXRoLmpvaW4odGFyZ2V0
X3NoYXJlX2RpciwgJ21pbWUnKQorICAgICAgICAgICAgb3MubWFrZWRpcnMobWltZV90YXJnZXRf
ZGlyKQorICAgICAgICAgICAgbWltZV9jYWNoZSA9ICcvdXNyL3NoYXJlL21pbWUvbWltZS5jYWNo
ZScKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtaW1lX2NhY2hlKToKKyAgICAg
ICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJDYW4ndCBmaW5kIHRoZSBtaW1l
LmNhY2hlIGZpbGUgZnJvbSBzaGFyZWQtbWltZS1pbmZvIGF0IHRoZSBzdGFuZGFyZCBsb2NhdGlv
biBpbiB0aGlzIHN5c3RlbSIpCisgICAgICAgICAgICBzaHV0aWwuY29weShtaW1lX2NhY2hlLCBt
aW1lX3RhcmdldF9kaXIpCisgICAgICAgICAgICBfbG9nLmluZm8oJ0dlbmVyYXRlIGZvbnRjb25m
aWcgY29uZmlnJykKKyAgICAgICAgICAgICMgRm9udGNvbmZpZyBmb250cyBhbmQgY29uZmlnCisg
ICAgICAgICAgICB0YXJnZXRfZm9udF9jb25maWdfZGlyID0gb3MucGF0aC5qb2luKHRhcmdldF9z
aGFyZV9kaXIsICdmb250cy9jb25maWcnKQorICAgICAgICAgICAgdGFyZ2V0X2ZvbnRfZGF0YV9k
aXIgPSBvcy5wYXRoLmpvaW4odGFyZ2V0X3NoYXJlX2RpciwgJ2ZvbnRzL2ZvbnRzJykKKyAgICAg
ICAgICAgIG9zLm1ha2VkaXJzKHRhcmdldF9mb250X2NvbmZpZ19kaXIpCisgICAgICAgICAgICAj
IFdlIGtlZXAgYXNzdW1pbmcgc3RhbmRhcmQgbG9jYXRpb25zIGZvciB0aGlzIGZpbGVzIG9uIHRo
ZSB0YXJnZXQgc3lzdGVtCisgICAgICAgICAgICBzeXN0ZW1fZm9udF9jb25maWdfZGlyID0gJy9l
dGMvZm9udHMvY29uZi5kJworICAgICAgICAgICAgc3lzdGVtX2ZvbnRfZGF0YV9kaXIgPSAnL3Vz
ci9zaGFyZS9mb250cycKKyAgICAgICAgICAgIGlmIG5vdCAob3MucGF0aC5pc2RpcihzeXN0ZW1f
Zm9udF9jb25maWdfZGlyKSBhbmQgb3MucGF0aC5pc2RpcihzeXN0ZW1fZm9udF9kYXRhX2Rpcikp
OgorICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIkNhbid0IGZpbmQg
dGhlIGZvbnRjb25maWcgZmlsZXMgYXQgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGluIHRoaXMgc3lz
dGVtIikKKyAgICAgICAgICAgIHNodXRpbC5jb3B5dHJlZShzeXN0ZW1fZm9udF9jb25maWdfZGly
LCBvcy5wYXRoLmpvaW4odGFyZ2V0X2ZvbnRfY29uZmlnX2Rpciwgb3MucGF0aC5iYXNlbmFtZShz
eXN0ZW1fZm9udF9jb25maWdfZGlyKSkpCisgICAgICAgICAgICBzZWxmLl9nZW5lcmF0ZV9mb250
X2NvbmYodGFyZ2V0X2ZvbnRfY29uZmlnX2RpcikKKyAgICAgICAgICAgIF9sb2cuaW5mbygnQ29w
eSBmb250cycpCisgICAgICAgICAgICAjIFdlIGNvcHkgZXZlcnkgZm9udCwgc28gdGhpcyBtYXkg
Y29weSBsb3Qgb2YgZGF0YSBpZiB5b3UgaGF2ZSBsb3Qgb2YgZm9udHMgaW5zdGFsbGVkLgorICAg
ICAgICAgICAgIyBTbyBwcmludCBhIHdhcm5pbmcgaW4gdGhhdCBhc2UKKyAgICAgICAgICAgIHN5
c3RlbV9mb250X2RhdGFfc2l6ZSA9IHNlbGYuX2dldF90b3RhbF9zaXplX2RpcihzeXN0ZW1fZm9u
dF9kYXRhX2RpcikKKyAgICAgICAgICAgIGlmIHN5c3RlbV9mb250X2RhdGFfc2l6ZSA+IDEwNDg1
NzYwMDogICMgMTAwIE1CCisgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdDb3B5aW5nICVk
IE1CIG9mIGZvbnQgZGF0YSBmcm9tIHRoZSBzeXN0ZW0gYXQgL3Vzci9zaGFyZS9mb250cy4gVGhp
cyBzaG91bGQgYmUgb3B0aW1pemVkLicgJSBpbnQoc3lzdGVtX2ZvbnRfZGF0YV9zaXplIC8gKDEw
MjQqMTAyNCkpKQorICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHN5c3RlbV9mb250X2RhdGFf
ZGlyLCB0YXJnZXRfZm9udF9kYXRhX2RpcikKKyAgICAgICAgICAgICMgQ29weSBYS0IgZGF0YQor
ICAgICAgICAgICAgX2xvZy5pbmZvKCdDb3B5IFhLQiBkYXRhJykKKyAgICAgICAgICAgIHN5c3Rl
bV94a2JfZGF0YSA9ICcvdXNyL3NoYXJlL1gxMS94a2InCisgICAgICAgICAgICBpZiBub3QgKG9z
LnBhdGguaXNkaXIoc3lzdGVtX3hrYl9kYXRhKSk6CisgICAgICAgICAgICAgICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvcigiQ2FuJ3QgZmluZCB0aGUgWEtCIGRhdGEgZmlsZXMgYXQgdGhlIHN0
YW5kYXJkIGxvY2F0aW9uIGluIHRoaXMgc3lzdGVtIikKKyAgICAgICAgICAgIHRhcmdldF94a2Jf
ZGF0YSA9IG9zLnBhdGguam9pbih0YXJnZXRfc2hhcmVfZGlyLCAneGtiJykKKyAgICAgICAgICAg
IHNodXRpbC5jb3B5dHJlZShzeXN0ZW1feGtiX2RhdGEsIHRhcmdldF94a2JfZGF0YSkKKyAgICAg
ICAgICAgICMgRmxhdHBhayBjb25maWd1cmVzIGdudXRscyB0byB1c2UgdGhlIHAxMS1raXQgdHJ1
c3Qgc3RvcmUgYW5kIHRoZW4gdXNlcyBwMTEta2l0IHRvIGFjY2VzcyB0aGUgaG9zdCBTU0wgY2Vy
dGlmaWNhdGVzLgorICAgICAgICAgICAgIyAtIEl0IHN0YXJ0cyBhIHAxMSBraXQgc2VydmVyIG9u
IHRoZSBob3N0cyBhbmQgYmluZC1tb3VudGluZyBhIHNvY2tldCB0aGF0IGxhdGVyIGlzIHVzZWQg
ZnJvbSBpbnNpZGUgdGhlIHNhbmRib3ggdmlhIHAxMS1raXQtY2xpZW50LnNvCisgICAgICAgICAg
ICAjIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3AxMS1nbHVlL3AxMS1raXQvaXNzdWVzLzY4Cisg
ICAgICAgICAgICAjIFN0YXJ0aW5nIGEgcDExLWtpdCBzZXJ2ZXIgaXMgcHJvYmxlbWF0aWMgZm9y
IHRoZSB1c2UgY2FzZSBvZiB0aGUgYnVuZGxlLCBhbmQgYWxzbyB3aWxsIG9ubHkgd29yayBpZiB0
aGUgaG9zdCBpcyBjb25maWd1cmVkIHRvIHVzZSBwMTEta2l0CisgICAgICAgICAgICAjIFNvIHdl
IHRha2UgYSBkaWZmZXJlbnQgYXBwcm9hY2ggaGVyZS4KKyAgICAgICAgICAgICMgMS4gV2UgZ2Vu
ZXJhdGUgYSBidW5kbGUtY2EtY2VydGlmaWNhdGVzLnBlbSBmaWxlIHdpdGggYWxsIHRoZSBjZXJ0
cyBvZiB0aGUgc3lzdGVtIHdlcmUgdGhlIGJ1bmRsZSB3YXMgZ2VuZXJhdGVkIGFuZCB3ZSBzaGlw
IHRoaXMgZmlsZQorICAgICAgICAgICAgIyAyLiBBdCBydW50aW1lIHdlIGxvb2sgZm9yIHRoZSBz
eXN0ZW0gVExTIGNhLWJ1bmRsZS5wZW0gZmlsZSBhbmQgd2UgdXNlIGl0LiBJZiB3ZSBjYW4ndCBm
aW5kIGl0IHRoZW4gd2UgZGVmYXVsdCB0byB1c2luZyB0aGUgb25lIHNoaXBwZWQgaW5zaWRlIHRo
ZSBidW5kbGUuCisgICAgICAgICAgICAjIFdlIHBhc3MgdGhlIHBhdGggdG8gdGhlIFRMUyBjYS1i
dW5kbGUucGVtIGZpbGUgdXNpbmcgdGhlIGVudiB2YXIgV0VCS0lUX1RMU19DQUZJTEVfUEVNCisg
ICAgICAgICAgICAjIFRoZSBob3N0IHAxMS1raXQgc2V0dXAgbWF5IHN0aWxsIHdvcmsgaWYgaXQg
aXMgdXNpbmcgdGhlIHNhbWUgcGF0aHMgZm9yIGxvYWRpbmcgdGhlIHAxMS1raXQgbW9kdWxlcywg
YnV0IG90aGVyd2lzZSBpdCB3aWxsIGZhaWwgdG8gbG9hZCB0aGUgbW9kdWxlcy4KKyAgICAgICAg
ICAgICMgVGhhdCBpcyBvaywgc2luY2Ugd2UgZG9uJ3QgbmVlZCBhbnltb3JlIGEgd29ya2luZyBw
MTEta2l0IHNldHVwLiBJZiBpdCB3b3JrcyBpdCB3aWxsIGJlIHVzZWQsIGJ1dCBpZiBub3Qgd2Ug
aGF2ZSBhIGZhbGxiYWNrLgorICAgICAgICAgICAgIyBUbyBkZWJ1ZyB0aGlzIGlzIHVzZWZ1bCB0
byBleHBvcnQgUDExX0tJVF9ERUJVRz1hbGwKKyAgICAgICAgICAgICMgVGhpcyBhcHByb2FjaCBh
bHNvIGFsbG93cyB0aGlzIGJ1bmRsZSBzY3JpcHQgZ28gZ2VuZXJhdGUgYSB3b3JraW5nIGJ1bmRs
ZSB3aGVuIGdudXRscyBpcyBub3QgY29uZmlndXJlZCB0byB1c2UgcDExLWtpdC4KKyAgICAgICAg
ICAgIF9sb2cuaW5mbygnR2VuZXJhdGUgVExTIENBIGNlcnRpZmljYXRlcyBmaWxlJykKKyAgICAg
ICAgICAgIGNlcnRzX3RhcmdldF9kaXIgPSBvcy5wYXRoLmpvaW4odGFyZ2V0X3NoYXJlX2Rpciwg
J2NlcnRzJykKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKGNlcnRzX3RhcmdldF9kaXIpCisgICAg
ICAgICAgICBzZWxmLl9nZW5lcmF0ZV90bHNfY2FmaWxlKGNlcnRzX3RhcmdldF9kaXIpCisgICAg
ICAgICAgICBpZiBzZWxmLl9wbGF0Zm9ybSA9PSAnZ3RrJzoKKyAgICAgICAgICAgICAgICBfbG9n
LmluZm8oJ0NvcHkgYmFzaWMgR1RLIGljb25zIGFuZCB0aGVtZXMuJykKKyAgICAgICAgICAgICAg
ICBpY29uc190YXJnZXRfZGlyID0gb3MucGF0aC5qb2luKHRhcmdldF9zaGFyZV9kaXIsICdpY29u
cycpCisgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoaWNvbnNfdGFyZ2V0X2RpcikKKyAgICAg
ICAgICAgICAgICBmb3IgZ3RrX2ljb25fZGlyIGluIFsnL3Vzci9zaGFyZS9pY29ucy9BZHdhaXRh
JywgJy91c3Ivc2hhcmUvaWNvbnMvaGljb2xvciddOgorICAgICAgICAgICAgICAgICAgICBpZiBu
b3Qgb3MucGF0aC5pc2RpcihndGtfaWNvbl9kaXIpOgorICAgICAgICAgICAgICAgICAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignQ2FuIG5vdCBmaW5kIHRoZSBHVEsgaWNvbiB0aGVt
ZSBhdCBwYXRoICIlcyIgaW4gdGhpcyBzeXN0ZW0nICUgZ3RrX2ljb25fZGlyKQorICAgICAgICAg
ICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoZ3RrX2ljb25fZGlyLCBvcy5wYXRoLmpvaW4oaWNv
bnNfdGFyZ2V0X2Rpciwgb3MucGF0aC5iYXNlbmFtZShndGtfaWNvbl9kaXIpKSkKKworICAgICAg
ICAjIEZpbmFsbHkgZ2VuZXJhdGUgdGhlIHdyYXBwZXJzLgogICAgICAgICBzZWxmLl9nZW5lcmF0
ZV93cmFwcGVyX3NjcmlwdChpbnRlcnByZXRlciwgYnVuZGxlX2JpbmFyeSkKLSAgICAgICAgaWYg
YnVuZGxlX2JpbmFyeSA9PSAiTWluaUJyb3dzZXIiOgorICAgICAgICBpZiBidW5kbGVfYmluYXJ5
ID09ICdNaW5pQnJvd3Nlcic6CiAgICAgICAgICAgICBzZWxmLl9nZW5lcmF0ZV93cmFwcGVyX3Nj
cmlwdChpbnRlcnByZXRlciwgc2VsZi5fcG9ydF9iaW5hcnlfcHJlZmZpeCArICdXZWJEcml2ZXIn
KQogICAgICAgICBzZWxmLl9nZW5lcmF0ZV9pbnN0YWxsX2RlcHNfc2NyaXB0KHN5c3RlbV9wYWNr
YWdlc19uZWVkZWQpCisgICAgICAgICMgQ2xlYW4gcmVtYWluaW5nIHN0dWZmCisgICAgICAgIGlm
IGJ1bmRsZV9iaW5hcnkgPT0gJ01pbmlCcm93c2VyJyBhbmQgc2VsZi5fc3lzbGlicyA9PSAnYnVu
ZGxlLWFsbCc6CisgICAgICAgICAgICBzZWxmLl9kbG9wZW53cmFwX21ha2UoJ2NsZWFuJykKIAog
CiBjbGFzcyBCdW5kbGVVcGxvYWRlcihvYmplY3QpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9iaW5hcnlfYnVuZGxpbmcvYnVuZGxlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9iaW5hcnlfYnVuZGxpbmcvYnVuZGxlLnB5CmluZGV4IGM2ZTU1Yjg4OTMxNTdkOGJkYWNh
NmZkMjY1NTA3Y2MwNDEzYWJlOGQuLmEwZGUxYzMzMzgwYzRiNmM2ZDIyZDA4MWY5Y2E4N2QxNmMw
OTAyOTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5n
L2J1bmRsZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JpbmFyeV9idW5kbGluZy9i
dW5kbGUucHkKQEAgLTMxLDY4ICszMSwxOTMgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9f
bmFtZV9fKQogCiBjbGFzcyBCaW5hcnlCdW5kbGVyOgogICAgIFZBUl9NWURJUiA9ICdNWURJUicK
LSAgICBWQVJfSU5URVJQUkVURVIgPSAnSU5URVJQUkVURVInCiAKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgZGVzdGluYXRpb25fZGlyLCBzaG91bGRfc3RyaXBfb2JqZWN0cyk6Ci0gICAgICAgIGlm
IHNodXRpbC53aGljaCgncGF0Y2hlbGYnKSBpcyBOb25lOgotICAgICAgICAgICAgX2xvZy5lcnJv
cigiQ291bGQgbm90IGZpbmQgYHBhdGNoZWxmYCBpbiAkUEFUSCIpCi0gICAgICAgICAgICByYWlz
ZSBFeGNlcHRpb24oIk1pc3NpbmcgcmVxdWlyZWQgYmluYXJ5IGBwYXRjaGVsZmAiKQorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBkZXN0aW5hdGlvbl9kaXIsIGJ1aWxkX3BhdGg9Tm9uZSk6CiAgICAg
ICAgIHNlbGYuX2Rlc3RpbmF0aW9uX2RpciA9IGRlc3RpbmF0aW9uX2RpcgotICAgICAgICBzZWxm
Ll9zaG91bGRfc3RyaXBfb2JqZWN0cyA9IHNob3VsZF9zdHJpcF9vYmplY3RzCisgICAgICAgIHNl
bGYuX2hhc19wYXRjaGVkX2ludGVycHJldGVyX3JlbHBhdGggPSBGYWxzZQorICAgICAgICBzZWxm
Ll9idWlsZF9wYXRoID0gYnVpbGRfcGF0aAorICAgICAgICBzZWxmLl9zaG91bGRfdXNlX3N5c19s
aWJfZGlyZWN0b3J5ID0gRmFsc2UKKworICAgIGRlZiBfaXNfc3lzdGVtX2RlcChzZWxmLCBwYXRo
KToKKyAgICAgICAgaWYgc2VsZi5fYnVpbGRfcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
ICMgV2UgZG9uJ3QgY29uc2lkZXIgbGlid3BlIGFuZCBsaWJXUEVCYWNrZW5kLWZkbyBzeXNsaWJz
IChldmVuIHdoZW4gdGhvc2UgYXJlIG5vdCBidWlsdCBkaXJlY3RseSkuIE5laXRoZXIgZGxvcGVu
d3JhcAorICAgICAgICAgICAgaWYgYW55KHAgaW4gcGF0aC5sb3dlcigpIGZvciBwIGluIFsnbGli
d3BlJywgJ2Rsb3BlbndyYXAnXSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAg
ICAgICAgICByZXR1cm4gbm90IHBhdGguc3RhcnRzd2l0aChzZWxmLl9idWlsZF9wYXRoKQorICAg
ICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBzZXRfdXNlX3N5c19saWJfZGlyZWN0b3J5KHNl
bGYsIHNob3VsZF91c2Vfc3lzX2xpYl9kaXJlY3RvcnkpOgorICAgICAgICBzZWxmLl9zaG91bGRf
dXNlX3N5c19saWJfZGlyZWN0b3J5ID0gc2hvdWxkX3VzZV9zeXNfbGliX2RpcmVjdG9yeQorCisg
ICAgZGVmIGNvcHlfYW5kX21heWJlX3N0cmlwX3BhdGNoZWxmKHNlbGYsIG9yaWdfZmlsZSwgdHlw
ZT0nYmluJywgc3RyaXA9VHJ1ZSwgcGF0Y2hlbGZfcmVtb3ZlcnBhdGg9VHJ1ZSwgcGF0Y2hlbGZf
bm9kZWZhdWx0bGliPUZhbHNlLCBwYXRjaGVsZl9zZXRpbnRlcnByZXRlcl9yZWxhdGl2ZXBhdGg9
Tm9uZSwgb2JqZWN0X2ZpbmFsX2Rlc3RpbmF0aW9uX2Rpcj1Ob25lKToKKyAgICAgICAgIiIiIFRo
aXMgZG9lcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAgICAgMS4gQ29waWVzIHRoZSBiaW5hcnkv
bGliIChvYmplY3QpCisgICAgICAgICAgICAyLiBPcHRpb25hbGx5IHJ1bnMgcGF0Y2hlbGYgd2l0
aCBkaWZmZXJlbnQgcGFyYW1ldGVycworICAgICAgICAgICAgMy4gT3B0aW9uYWxseSBzdHJpcHMg
dGhlIGJpbmFyeQorICAgICAgICAgICAgSWYgdGhlIGZpbGUgaXMgYSBzeW1saW5rIHBvaW50aW5n
IGFub3RoZXIgZmlsZSB0aGVuIHRoZSBzeW1saW5rIGlzIHByZXNlcnZlZCAoY29weWluZyB0aGUg
ZmlsZSBwb2ludGVkKQorICAgICAgICAiIiIKIAotICAgIGRlZiBkZXN0aW5hdGlvbl9kaXIoc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9kZXN0aW5hdGlvbl9kaXIKLQotICAgIGRlZiBjb3B5
X2FuZF9yZW1vdmVfcnBhdGgoc2VsZiwgb3JpZ19maWxlLCB0eXBlPSdiaW4nLCBkZXN0aW5hdGlv
bl9kaXI9Tm9uZSk6CiAgICAgICAgIGRpcl9zdWZmaXggPSAnbGliJyBpZiB0eXBlID09ICdpbnRl
cnByZXRlcicgZWxzZSB0eXBlCi0gICAgICAgIGRlc3RpbmF0aW9uX2RpciA9IG9zLnBhdGguam9p
bihzZWxmLl9kZXN0aW5hdGlvbl9kaXIsIGRpcl9zdWZmaXgpCi0gICAgICAgIGlmIG5vdCBvcy5w
YXRoLmlzZGlyKGRlc3RpbmF0aW9uX2Rpcik6Ci0gICAgICAgICAgICBvcy5tYWtlZGlycyhkZXN0
aW5hdGlvbl9kaXIpCisgICAgICAgIGlmIG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIgaXMg
Tm9uZToKKyAgICAgICAgICAgIG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIgPSBzZWxmLl9k
ZXN0aW5hdGlvbl9kaXIKKyAgICAgICAgICAgICMgSWYgc2V0X3VzZV9zeXNfbGliX2RpcmVjdG9y
eSgpIGlzIGVuYWJsZWQgdGhlbiBzeXN0ZW0gbGlicmFyaWVzIGFyZSBzaGlwcGVkIGluICRST09U
L3N5cy9saWIgdG8gYWxsb3cgdG8gcmVkaXN0cmlidXRlIHRoZW0gc2VwYXJhdGVseS4KKyAgICAg
ICAgICAgICMgSG93ZXZlciwgdGhlIGludGVycHJldGVyIGlzIGFsd2F5cyBzaGlwcGVkIGluICRS
T09UL2xpYiBhbmQgYWxsIHRoZSBiaW5hcmllcyBhcmUgYWx3YXlzIHNoaXBwZWQgaW4gJFJPT1Qv
YmluCisgICAgICAgICAgICAjIEV2ZW4gd2hlbiB0aGV5IGFyZSBzeXN0ZW1fZGVwcyBiZWNhdXNl
IG9mIHBhdGNoZWxmX3NldGludGVycHJldGVyX3JlbGF0aXZlcGF0aAorICAgICAgICAgICAgaWYg
c2VsZi5fc2hvdWxkX3VzZV9zeXNfbGliX2RpcmVjdG9yeSBhbmQgc2VsZi5faXNfc3lzdGVtX2Rl
cChvcmlnX2ZpbGUpIGFuZCB0eXBlIG5vdCBpbiBbJ2ludGVycHJldGVyJywgJ2JpbiddOgorICAg
ICAgICAgICAgICAgIG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIgPSBvcy5wYXRoLmpvaW4o
b2JqZWN0X2ZpbmFsX2Rlc3RpbmF0aW9uX2RpciwgJ3N5cycpCisgICAgICAgICAgICBvYmplY3Rf
ZmluYWxfZGVzdGluYXRpb25fZGlyID0gb3MucGF0aC5qb2luKG9iamVjdF9maW5hbF9kZXN0aW5h
dGlvbl9kaXIsIGRpcl9zdWZmaXgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKG9iamVj
dF9maW5hbF9kZXN0aW5hdGlvbl9kaXIpOgorICAgICAgICAgICAgb3MubWFrZWRpcnMob2JqZWN0
X2ZpbmFsX2Rlc3RpbmF0aW9uX2RpcikKIAogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUo
b3JpZ19maWxlKToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0NhbiBub3QgZmluZCBm
aWxlICVzJyAlIG9yaWdfZmlsZSkKIAogICAgICAgICBfbG9nLmluZm8oJ0FkZCB0byBidW5kbGUg
WyVzXTogJXMnICUgKHR5cGUsIG9yaWdfZmlsZSkpCisKKyAgICAgICAgIyBQcmVzZXJ2ZSBzeW1s
aW5rcyBhbmQgY29weSB0aGUgdGFyZ2V0cworICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhvcmln
X2ZpbGUpOgorICAgICAgICAgICAgc3ltbGlua19zcmNfZmlsZSA9IG9zLnBhdGgucmVhbHBhdGgo
b3JpZ19maWxlKQorICAgICAgICAgICAgc3ltbGlua19zcmNfYmFzZW5hbWUgPSBvcy5wYXRoLmJh
c2VuYW1lKHN5bWxpbmtfc3JjX2ZpbGUpCisgICAgICAgICAgICBzeW1saW5rX2RzdF9iYXNlbmFt
ZSA9IG9zLnBhdGguYmFzZW5hbWUob3JpZ19maWxlKQorICAgICAgICAgICAgc3ltbGlua19kc3Rf
ZnVsbHBhdGggPSBvcy5wYXRoLmpvaW4ob2JqZWN0X2ZpbmFsX2Rlc3RpbmF0aW9uX2Rpciwgc3lt
bGlua19kc3RfYmFzZW5hbWUpCisgICAgICAgICAgICBpZiBzeW1saW5rX3NyY19iYXNlbmFtZSAh
PSBzeW1saW5rX2RzdF9iYXNlbmFtZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgICAgICMgc3ltbGlua19kc3RfZnVsbHBhdGggLT4gc3ltbGlua19zcmNfYmFzZW5hbWUK
KyAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluayhzeW1saW5rX3NyY19iYXNlbmFtZSwgc3lt
bGlua19kc3RfZnVsbHBhdGgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJv
cjoKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfc3ltbGlua19zcmNfcGF0aCA9IG9zLnBh
dGgucmVhbHBhdGgoc3ltbGlua19kc3RfZnVsbHBhdGgpCisgICAgICAgICAgICAgICAgICAgIHBy
ZXZpb3VzX3N5bWxpbmtfc3JjX2Jhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwcmV2aW91c19z
eW1saW5rX3NyY19wYXRoKQorICAgICAgICAgICAgICAgICAgICBpZiBwcmV2aW91c19zeW1saW5r
X3NyY19iYXNlbmFtZSAhPSBzeW1saW5rX3NyY19iYXNlbmFtZToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm90IG92ZXJ3cml0aW5nIHByZXZpb3VzIHN5bWxp
bmsgJXMgcG9pbnRpbmcgdG8gJXMgd2l0aCBhIHN5bWxpbmsgcG9pbnRpbmcgdG8gJXMnICUgKHN5
bWxpbmtfZHN0X2Z1bGxwYXRoLCBwcmV2aW91c19zeW1saW5rX3NyY19iYXNlbmFtZSwgc3ltbGlu
a19zcmNfYmFzZW5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvcHlfYW5kX21h
eWJlX3N0cmlwX3BhdGNoZWxmKHN5bWxpbmtfc3JjX2ZpbGUsIHR5cGUsIHN0cmlwLCBwYXRjaGVs
Zl9yZW1vdmVycGF0aCwgcGF0Y2hlbGZfbm9kZWZhdWx0bGliLCBwYXRjaGVsZl9zZXRpbnRlcnBy
ZXRlcl9yZWxhdGl2ZXBhdGgsIG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIpCisKICAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgc2h1dGlsLmNvcHkob3JpZ19maWxlLCBkZXN0aW5hdGlvbl9k
aXIpCisgICAgICAgICAgICBzaHV0aWwuY29weShvcmlnX2ZpbGUsIG9iamVjdF9maW5hbF9kZXN0
aW5hdGlvbl9kaXIpCiAgICAgICAgIGV4Y2VwdCBzaHV0aWwuU2FtZUZpbGVFcnJvcjoKICAgICAg
ICAgICAgICMgTWF5IHJlYXNvbmFibHkgaGFwcGVuIGlmIHRoZSBjYWxsZXIgdHJpZXMgdG8gYnVu
ZGxlIHRoZSBmaWxlcyAnaW4gcGxhY2UnLgogICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIHBh
dGNoX2VsZl9jb21tYW5kID0gWydwYXRjaGVsZicsICctLXJlbW92ZS1ycGF0aCcsIG9zLnBhdGgu
am9pbihkZXN0aW5hdGlvbl9kaXIsIG9zLnBhdGguYmFzZW5hbWUob3JpZ19maWxlKSldCi0gICAg
ICAgIGlmIHN1YnByb2Nlc3MuY2FsbChwYXRjaF9lbGZfY29tbWFuZCkgIT0gMDoKLSAgICAgICAg
ICAgIF9sb2cuZXJyb3IoJ1RoZSBwYXRjaGVsZiBjb21tYW5kIHJldHVybmVkIG5vbi16ZXJvIHN0
YXR1cycpCisgICAgICAgIGlmIHR5cGUgPT0gJ2ludGVycHJldGVyJzoKKyAgICAgICAgICAgIHJl
dHVybiAgIyBubyBzdHJpcC9wYXRjaGVsZiBvdmVyIGl0CisKKyAgICAgICAgIyBSdW5uaW5nICdz
dHJpcCcgYWZ0ZXIgJ3BhdGNoZWxmJyBtYXkgY29ycnVwdCBiaW5hcmllcywgc28gcnVuIGZpcnN0
ICdzdHJpcCcuCisgICAgICAgICMgU2VlOiBodHRwczovL2dpdGh1Yi5jb20vTml4T1MvcGF0Y2hl
bGYvaXNzdWVzLzM3MQorICAgICAgICBpZiBzdHJpcDoKKyAgICAgICAgICAgIGlmIG5vdCBzaHV0
aWwud2hpY2goJ3N0cmlwJyk6CisgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdVbmFibGUg
dG8gZmluZCB0aGUgc3RyaXAgY29tbWFuZCBpbiB0aGUgc3lzdGVtLiBQbGVhc2UgaW5zdGFsbCBp
dC4nKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignTWlzc2luZyByZXF1aXJlZCBw
cm9ncmFtICJzdHJpcCInKQorICAgICAgICAgICAgc3RyaXBfY29tbWFuZCA9IFsnc3RyaXAnLCAn
LS1zdHJpcC11bm5lZWRlZCcsIG9zLnBhdGguam9pbihvYmplY3RfZmluYWxfZGVzdGluYXRpb25f
ZGlyLCBvcy5wYXRoLmJhc2VuYW1lKG9yaWdfZmlsZSkpXQorICAgICAgICAgICAgaWYgc3VicHJv
Y2Vzcy5jYWxsKHN0cmlwX2NvbW1hbmQpICE9IDA6CisgICAgICAgICAgICAgICAgX2xvZy5lcnJv
cignVGhlIHN0cmlwIGNvbW1hbmQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzJykKKworICAgICAg
ICBwYXRjaGVsZl9hcmd1bWVudHMgPSBbXQorICAgICAgICBpZiBwYXRjaGVsZl9yZW1vdmVycGF0
aDoKKyAgICAgICAgICAgIHBhdGNoZWxmX2FyZ3VtZW50cy5hcHBlbmQoIi0tcmVtb3ZlLXJwYXRo
IikKKyAgICAgICAgaWYgdHlwZSA9PSAnYmluJzoKKyAgICAgICAgICAgIGlmIHBhdGNoZWxmX25v
ZGVmYXVsdGxpYjoKKyAgICAgICAgICAgICAgICBwYXRjaGVsZl9hcmd1bWVudHMuYXBwZW5kKCIt
LW5vLWRlZmF1bHQtbGliIikKKyAgICAgICAgICAgIGlmIHBhdGNoZWxmX3NldGludGVycHJldGVy
X3JlbGF0aXZlcGF0aDoKKyAgICAgICAgICAgICAgICBwcmV2aW91c19jd2QgPSBvcy5nZXRjd2Qo
KQorICAgICAgICAgICAgICAgIG9zLmNoZGlyKHNlbGYuZGVzdGluYXRpb25fZGlyKCkpCisgICAg
ICAgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdGhlIGJhc2VuYW1lIG9mIHRoZSBpbnRlcnByZXRl
ciBiZWNhdXNlIHdlIGFyZSB1cGRhdGluZyBpdAorICAgICAgICAgICAgICAgICMgdG8gdXNlIGEg
cmVsYXRpdmUgcGF0aCBpbnNpZGUgbGliLyAod2hpY2ggaXMgd2VyZSB3ZSBjb3BpZWQgaXQgcHJl
dmlvdXNseSkKKyAgICAgICAgICAgICAgICBuZXdfaW50ZXJwcmV0ZXJfcmVscGF0aCA9IG9zLnBh
dGguam9pbignbGliJywgb3MucGF0aC5iYXNlbmFtZShwYXRjaGVsZl9zZXRpbnRlcnByZXRlcl9y
ZWxhdGl2ZXBhdGgpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShuZXdf
aW50ZXJwcmV0ZXJfcmVscGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoJ1VuYWJsZSB0byBmaW5kIGludGVycHJldGVyICVzIGF0IGRpcmVjdG9yeSAlcycgJSAobmV3
X2ludGVycHJldGVyLCBzZWxmLmRlc3RpbmF0aW9uX2RpcigpKSkKKyAgICAgICAgICAgICAgICBw
YXRjaGVsZl9hcmd1bWVudHMuZXh0ZW5kKFsnLS1zZXQtaW50ZXJwcmV0ZXInLCBuZXdfaW50ZXJw
cmV0ZXJfcmVscGF0aF0pCisgICAgICAgICAgICAgICAgc2VsZi5faGFzX3BhdGNoZWRfaW50ZXJw
cmV0ZXJfcmVscGF0aCA9IFRydWUKKyAgICAgICAgaWYgcGF0Y2hlbGZfYXJndW1lbnRzOgorICAg
ICAgICAgICAgIyBJZiB3ZSBoYXZlIHJlc29sdmVkIHBhdGNoZWxmX2FyZ3VtZW50cyB0aGVuIHdl
IHNob3VsZCBydW4gcGF0Y2hlbGYKKyAgICAgICAgICAgIHBhdGNoZWxmX2FyZ3VtZW50cy5hcHBl
bmQob3MucGF0aC5qb2luKG9iamVjdF9maW5hbF9kZXN0aW5hdGlvbl9kaXIsIG9zLnBhdGguYmFz
ZW5hbWUob3JpZ19maWxlKSkpCisgICAgICAgICAgICBpZiBub3Qgc2h1dGlsLndoaWNoKCdwYXRj
aGVsZicpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVW5hYmxlIHRvIGZp
bmQgdGhlICJwYXRjaGVsZiIgY29tbWFuZCBpbiB0aGUgc3lzdGVtLiBQbGVhc2UgaW5zdGFsbCBp
dC4nKQorICAgICAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKFsncGF0Y2hlbGYnXSArIHBhdGNo
ZWxmX2FyZ3VtZW50cykgIT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3Io
J1RoZSAicGF0Y2hlbGYiIGNvbW1hbmQgd2l0aCBhcmd1bWVudHMgIiVzIiByZXR1cm5lZCBub24t
emVybyBzdGF0dXMnICUgJyAnLmpvaW4ocGF0Y2hlbGZfYXJndW1lbnRzKSkKKworICAgICAgICAg
ICAgaWYgcGF0Y2hlbGZfc2V0aW50ZXJwcmV0ZXJfcmVsYXRpdmVwYXRoOgorICAgICAgICAgICAg
ICAgIG9zLmNoZGlyKHByZXZpb3VzX2N3ZCkKIAotICAgICAgICBpZiBzZWxmLl9zaG91bGRfc3Ry
aXBfb2JqZWN0czoKLSAgICAgICAgICAgIGlmIHNodXRpbC53aGljaCgnc3RyaXAnKToKLSAgICAg
ICAgICAgICAgICBzdHJpcF9jb21tYW5kID0gWydzdHJpcCcsICctLXN0cmlwLXVubmVlZGVkJywg
b3MucGF0aC5qb2luKGRlc3RpbmF0aW9uX2Rpciwgb3MucGF0aC5iYXNlbmFtZShvcmlnX2ZpbGUp
KV0KLSAgICAgICAgICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoc3RyaXBfY29tbWFuZCkgIT0g
MDoKLSAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignVGhlIHN0cmlwIGNvbW1hbmQgcmV0
dXJuZWQgbm9uLXplcm8gc3RhdHVzJykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAg
ICAgX2xvZy53YXJuaW5nKCdzdHJpcCBub3QgZm91bmQuIE5vdCBzdHJpcHBpbmcgb2JqZWN0JykK
KyAgICBkZWYgZGVzdGluYXRpb25fZGlyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGVz
dGluYXRpb25fZGlyCiAKICAgICBkZWYgZ2VuZXJhdGVfd3JhcHBlcl9zY3JpcHQoc2VsZiwgaW50
ZXJwcmV0ZXIsIGJpbmFyeV90b193cmFwLCBleHRyYV9lbnZpcm9ubWVudF92YXJpYWJsZXM9e30p
OgogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNlbGYuX2Rlc3Rp
bmF0aW9uX2RpciwgJ2JpbicsIGJpbmFyeV90b193cmFwKSk6CiAgICAgICAgICAgICByYWlzZSBS
dW50aW1lRXJyb3IoJ0Nhbm5vdCBmaW5kIGJpbmFyeSB0byB3cmFwIGZvciAlcycgJSBiaW5hcnlf
dG9fd3JhcCkKICAgICAgICAgX2xvZy5pbmZvKCdHZW5lcmF0ZSB3cmFwcGVyIHNjcmlwdCAlcycg
JSBiaW5hcnlfdG9fd3JhcCkKICAgICAgICAgc2NyaXB0X2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2Vs
Zi5fZGVzdGluYXRpb25fZGlyLCBiaW5hcnlfdG9fd3JhcCkKKyAgICAgICAgbGliX2RpciA9IG9z
LnBhdGguam9pbihzZWxmLl9kZXN0aW5hdGlvbl9kaXIsICdsaWInKQorICAgICAgICBzeXNsaWJf
ZGlyID0gb3MucGF0aC5qb2luKHNlbGYuX2Rlc3RpbmF0aW9uX2RpciwgJ3N5cy9saWInKQorICAg
ICAgICBiaW5fZGlyID0gb3MucGF0aC5qb2luKHNlbGYuX2Rlc3RpbmF0aW9uX2RpciwgJ2Jpbicp
CisgICAgICAgIHNoYXJlX2RpciA9IG9zLnBhdGguam9pbihzZWxmLl9kZXN0aW5hdGlvbl9kaXIs
ICdzeXMvc2hhcmUnKQogCiAgICAgICAgIHdpdGggb3BlbihzY3JpcHRfZmlsZSwgJ3cnKSBhcyBz
Y3JpcHRfaGFuZGxlOgogICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnIyEvYmluL3No
XG4nKQogICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnJXM9IiQoZGlybmFtZSAkKHJl
YWRsaW5rIC1mICQwKSkiXG4nICUgc2VsZi5WQVJfTVlESVIpCi0gICAgICAgICAgICBzY3JpcHRf
aGFuZGxlLndyaXRlKCdleHBvcnQgTERfTElCUkFSWV9QQVRIPSIkeyVzfS9saWIiXG4nICUgc2Vs
Zi5WQVJfTVlESVIpCiAKLSAgICAgICAgICAgIGlmIGludGVycHJldGVyIGlzIG5vdCBOb25lOgot
ICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ0lOVEVSUFJFVEVSPSIkeyVzfS9s
aWIvJXMiXG4nICUgKHNlbGYuVkFSX01ZRElSLCBvcy5wYXRoLmJhc2VuYW1lKGludGVycHJldGVy
KSkpCisgICAgICAgICAgICBpZiBzZWxmLl9oYXNfcGF0Y2hlZF9pbnRlcnByZXRlcl9yZWxwYXRo
OgorICAgICAgICAgICAgICAgICMgVGhlIGludGVycHJlcnRlciAoc2VjdGlvbiBQVF9JTlRFUlAg
aW4gRUxGIGJpbmFyeSkgbmVlZHMgdG8gYmUgYSBwcmUtZGVmaW5lZCBwYXRoCisgICAgICAgICAg
ICAgICAgIyBTbyB0aGUgb25seSB3YXkgb2YgdXNpbmcgb3VyIGludGVycHJldGVyIGluIGFuIHVu
a25vd24gZGVzdGluYXRpb24gZGlyIGlzIHRvIHVzZSByZWxhdGl2ZSBwYXRocworICAgICAgICAg
ICAgICAgICMgRm9yIHJlbGF0aXZlIHBhdGhzIHRvIHdvcmssIHdlIG5lZWQgdG8gQ0QgaW50byB0
aGUgbWFpbiBiYXNlZGlyLCBidXQgZG9pbmcgdGhhdCBtYXkgYnJlYWsKKyAgICAgICAgICAgICAg
ICAjIGFueSBwYXJhbWV0ZXIgdGhlIHVzZXIgaGFzIHBhc3NlZCBhcyBhIHJlbGF0aXZlIHBhdGgg
dG8gd2hlcmUgc2hlIGlzIHdvcmtpbmcgKGxpa2UgYSByZWxwYXRoIHRvIHNvbWUgaHRtbCBmaWxl
KQorICAgICAgICAgICAgICAgICMgU28gd2UgdHJ5IHRvIHVwZGF0ZSB0aGUgYXJndW1lbnRzIHJl
c29sdmluZyByZWxhdGl2ZSBwYXRocyB0byBhYnNvbHV0ZSBiZWZvcmUgZXhlY3V0aW5nIHRoZSBw
cm9ncmFtCisgICAgICAgICAgICAgICAgIyBUcmljayB0byB1cGRhdGUgdGhlIGFyZ3VtZW50cyBp
bnNwaXJlZCBmcm9tIGh0dHBzOi8vdW5peC5zdGFja2V4Y2hhbmdlLmNvbS9hLzQyMTE2MAorICAg
ICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJyMgU2hpcHBlZCBiaW5hcmllcyBoYXZl
IGEgcmVscGF0aCB0byB0aGUgaW50ZXJwcmV0ZXIsIHNvIHVwZGF0ZSBwYXNzZWQgYXJncyB3aXRo
IGZ1bGxwYXRocyBhbmQgY2QgdG8gJHtNWURJUn1cbicpCisgICAgICAgICAgICAgICAgc2NyaXB0
X2hhbmRsZS53cml0ZSgnYXJnc191cGRhdGVfcmVscGF0aHNfdG9fYWJzKCkge1xuJykKKyAgICAg
ICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCcgICAgZm9yIGFyZyBpbiAiJEAiOyBkb1xu
JykKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCcgICAgICBbIC1lICIke2Fy
Z30iIC1hICIke2FyZ30iICE9ICIke2EjL30iIF0gJiYgYXJnPSIkKHJlYWRsaW5rIC1mICIke2Fy
Z30iKSJcbicpCisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnICAgICAgcHJp
bnRmICVzICIke2FyZ30iIHwgc2VkICJzL1wnL1wnXFxcXFxcXFxcJ1wnL2c7MXMvXi9cJy87XFwk
cy9cXCQvXCcgLyJcbicpCisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnICAg
IGRvbmVcbicpCisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnZWNobyAiICJc
bicpCisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnfVxuJykKKyAgICAgICAg
ICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCdldmFsICJzZXQgLS0gIiQoYXJnc191cGRhdGVf
cmVscGF0aHNfdG9fYWJzICIkQCIpIiJcbicpCisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRs
ZS53cml0ZSgnY2QgIiR7TVlESVJ9IlxuJykKKworICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Zp
bGUob3MucGF0aC5qb2luKHNoYXJlX2RpciwgJ2NlcnRzL2J1bmRsZS1jYS1jZXJ0aWZpY2F0ZXMu
cGVtJykpOgorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJyMgVHJ5IHRvIHVz
ZSB0aGUgc3lzdGVtIENBIGZpbGUgaWYgcG9zc2libGUsIG90aGVyd2lzZSB1c2UgdGhlIGJ1bmRs
ZWQgb25lXG4nKQorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2ZvciBXRUJL
SVRfVExTX0NBRklMRV9QRU0gaW4gL2V0Yy9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCAv
ZXRjL3NzbC9jZXJ0LnBlbSAvZXRjL3BraS9jYS10cnVzdC9leHRyYWN0ZWQvcGVtL3Rscy1jYS1i
dW5kbGUucGVtICIke01ZRElSfS9zeXMvc2hhcmUvY2VydHMvYnVuZGxlLWNhLWNlcnRpZmljYXRl
cy5wZW0iOyBkb1xuJykKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndyaXRlKCcgICAg
WyAtZiAiJHtXRUJLSVRfVExTX0NBRklMRV9QRU19IiBdICYmIGdyZXAgLXEgIkJFR0lOIENFUlRJ
RklDQVRFIiAiJHtXRUJLSVRfVExTX0NBRklMRV9QRU19IiAmJiBleHBvcnQgV0VCS0lUX1RMU19D
QUZJTEVfUEVNICYmIGJyZWFrXG4nKQorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3Jp
dGUoJ2RvbmVcbicpCiAKLSAgICAgICAgICAgICMgTWF5IHVzZSB0aGUgdmFsdWUgb2YgSU5URVJQ
UkVURVIsIHNvIGhhcyB0byBjb21lIGFmdGVyCi0gICAgICAgICAgICAjIHRoZSBkZWZpbml0aW9u
LgogICAgICAgICAgICAgZm9yIHZhciwgdmFsdWUgaW4gZXh0cmFfZW52aXJvbm1lbnRfdmFyaWFi
bGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnZXhwb3J0
ICVzPVwiJXNcIlxuJyAlICh2YXIsIHZhbHVlKSkKLQotICAgICAgICAgICAgaWYgaW50ZXJwcmV0
ZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnZXhl
YyAiJHtJTlRFUlBSRVRFUn0iICIkeyVzfS9iaW4vJXMiICIkQCJcbicgJSAoc2VsZi5WQVJfTVlE
SVIsIGJpbmFyeV90b193cmFwKSkKLSAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
c2NyaXB0X2hhbmRsZS53cml0ZSgnZXhwb3J0ICVzPSIlcyJcbicgJSAodmFyLCB2YWx1ZSkpCisK
KyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc3lzbGliX2Rpcik6CisgICAgICAgICAgICAg
ICAgIyBQcmVmZmVyIHRvIHVzZSB0aGUgc3lzdGVtIFhLQiBkYXRhIGZpbGVzLCBidXQgaWYgdGhl
eSBhcmUgbm90IG9uIHRoZSBleHBlY3RlZCBsb2NhdGlvbiB1c2Ugb3VyIG93bi4KKyAgICAgICAg
ICAgICAgICB4a2JfYnVuZGxlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZm9yIGVudHJ5IGlu
IG9zLmxpc3RkaXIoc3lzbGliX2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGlmIGVudHJ5LnN0
YXJ0c3dpdGgoJ2xpYnhrYmNvbW1vbi5zbycpOgorICAgICAgICAgICAgICAgICAgICAgICAgeGti
X2J1bmRsZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAg
ICAgICAgIGlmIHhrYl9idW5kbGVkOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgb3MucGF0
aC5pc2Rpcihvcy5wYXRoLmpvaW4oc2hhcmVfZGlyLCAneGtiJykpCisgICAgICAgICAgICAgICAg
ICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ1sgLWQgL3Vzci9zaGFyZS9YMTEveGtiIF0gfHwgZXhw
b3J0IFhLQl9DT05GSUdfUk9PVD0iJHslc30vc3lzL3NoYXJlL3hrYiJcbicgJSBzZWxmLlZBUl9N
WURJUikKKworICAgICAgICAgICAgbGRfbGlicmFyeV9wYXRoID0gJyR7JXN9L2xpYicgJSBzZWxm
LlZBUl9NWURJUgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihzeXNsaWJfZGlyKToKKyAg
ICAgICAgICAgICAgICBsZF9saWJyYXJ5X3BhdGggKz0gJzokeyVzfS9zeXMvbGliJyAlIHNlbGYu
VkFSX01ZRElSCisKKyAgICAgICAgICAgICMgVXBkYXRlIGNhY2hlIG9mIGdkay1waXhidWYgbG9h
ZGVycyBpZiBuZWVkZWQgKGZpcnN0IHJ1biBvciB3aGVuIHRoZSBhYnNvbHV0ZSBwYXRocyBvbiBk
aXNrIGhhdmUgY2hhbmdlZCkuCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGgu
am9pbihzeXNsaWJfZGlyLCAnZ2RrLXBpeGJ1Zi9sb2FkZXJzJykpOgorICAgICAgICAgICAgICAg
IHNjcmlwdF9oYW5kbGUud3JpdGUoJ2V4cG9ydCBHREtfUElYQlVGX01PRFVMRURJUj0iJHslc30v
c3lzL2xpYi9nZGstcGl4YnVmL2xvYWRlcnMiXG4nICUgc2VsZi5WQVJfTVlESVIpCisgICAgICAg
ICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnZXhwb3J0IEdES19QSVhCVUZfTU9EVUxFX0ZJ
TEU9IiR7JXN9L3N5cy9saWIvZ2RrLXBpeGJ1Zi9sb2FkZXJzLmNhY2hlIlxuJyAlIHNlbGYuVkFS
X01ZRElSKQorICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2dyZXAgLXNxICJc
XCIke0dES19QSVhCVUZfTU9EVUxFRElSfS8iICIke0dES19QSVhCVUZfTU9EVUxFX0ZJTEV9IiB8
fCBMRF9MSUJSQVJZX1BBVEg9IiVzIiAiJHslc30vYmluL2dkay1waXhidWYtcXVlcnktbG9hZGVy
cyIgLS11cGRhdGUtY2FjaGVcbicgJSAobGRfbGlicmFyeV9wYXRoLCBzZWxmLlZBUl9NWURJUikp
CisKKyAgICAgICAgICAgICMgU2FtZSBmb3IgZ3RrIGltbW9kdWxlcyBjYWNoZQorICAgICAgICAg
ICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc3lzbGliX2RpciwgJ2d0ay9pbW1vZHVs
ZXMnKSk6CisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnZXhwb3J0IEdUS19J
TV9NT0RVTEVfRElSPSIkeyVzfS9zeXMvbGliL2d0ay9pbW1vZHVsZXMiXG4nICUgc2VsZi5WQVJf
TVlESVIpCisgICAgICAgICAgICAgICAgc2NyaXB0X2hhbmRsZS53cml0ZSgnZXhwb3J0IEdUS19J
TV9NT0RVTEVfRklMRT0iJHslc30vc3lzL2xpYi9ndGsvaW1tb2R1bGVzL2ltbW9kdWxlcy5jYWNo
ZSJcbicgJSBzZWxmLlZBUl9NWURJUikKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxlLndy
aXRlKCdncmVwIC1zcSAiXFwiJHtHVEtfSU1fTU9EVUxFX0RJUn0vIiAiJHtHVEtfSU1fTU9EVUxF
X0ZJTEV9IiB8fCBMRF9MSUJSQVJZX1BBVEg9IiVzIiAiJHslc30vYmluL2d0ay1xdWVyeS1pbW1v
ZHVsZXMtMy4wIiAtLXVwZGF0ZS1jYWNoZSAiJHtHVEtfSU1fTU9EVUxFX0RJUn0iLyouc29cbicg
JSAobGRfbGlicmFyeV9wYXRoLCBzZWxmLlZBUl9NWURJUikpCisKKyAgICAgICAgICAgICMgTERf
TElCUkFSWV9QQVRIIGlzIHNldCBhdCB0aGUgZW5kLCBqdXN0IGJlZm9yZSB0aGUgZXhlYygpIGNh
bGwgYW5kIGJlZm9yZSBjYWxsaW5nIHByb2dyYW1zIGJ1bmRsZWQsIG90aGVyd2lzZSBpdCBtYXkg
YnJlYWsgY29tbWFuZHMgZnJvbSB0aGUgc3lzdGVtIGxpa2Ugc2NyaXB0J3MgdXNhZ2Ugb2Ygc2Vk
L3JlYWRsaW5rL2dyZXAKKyAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2V4cG9ydCBM
RF9MSUJSQVJZX1BBVEg9IiVzIlxuJyAlIGxkX2xpYnJhcnlfcGF0aCkKKyAgICAgICAgICAgIGRs
b3BlbndyYXBfbGlibmFtZSA9ICdkbG9wZW53cmFwLnNvJworICAgICAgICAgICAgaWYgb3MucGF0
aC5pc2ZpbGUob3MucGF0aC5qb2luKGxpYl9kaXIsIGRsb3BlbndyYXBfbGlibmFtZSkpOgorICAg
ICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUoJ2V4cG9ydCBMRF9QUkVMT0FEPSIkeyVz
fS9saWIvJXMiXG4nICUgKHNlbGYuVkFSX01ZRElSLCBkbG9wZW53cmFwX2xpYm5hbWUpKQorICAg
ICAgICAgICAgIyBJZiB3ZSBoYXZlIHBhdGNoZWQgdGhlIGJpbmFyaWVzIHRvIHVzZSBhIHJlbGF0
aXZlIHJlbHBhdGggdGhlbiBsb2FkIHRoZSBiaW5hcnkgZGlyZWN0bHkgd2l0aG91dCBwcmVmaXhp
bmcgaXQgd2l0aCB0aGUgaW50ZXJwcmV0ZXIgKGl0IGFsbG93cyB0aGUgcHJvY2VzcyB0byB1c2Ug
dGhlIGNvcnJlY3QgcHJvZ25hbWUpCisgICAgICAgICAgICBpZiBzZWxmLl9oYXNfcGF0Y2hlZF9p
bnRlcnByZXRlcl9yZWxwYXRoOgogICAgICAgICAgICAgICAgIHNjcmlwdF9oYW5kbGUud3JpdGUo
J2V4ZWMgIiR7JXN9L2Jpbi8lcyIgIiRAIlxuJyAlIChzZWxmLlZBUl9NWURJUiwgYmluYXJ5X3Rv
X3dyYXApKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGFuZGxl
LndyaXRlKCdJTlRFUlBSRVRFUj0iJHslc30vbGliLyVzIlxuJyAlIChzZWxmLlZBUl9NWURJUiwg
b3MucGF0aC5iYXNlbmFtZShpbnRlcnByZXRlcikpKQorICAgICAgICAgICAgICAgIHNjcmlwdF9o
YW5kbGUud3JpdGUoJ2V4ZWMgIiR7SU5URVJQUkVURVJ9IiAiJHslc30vYmluLyVzIiAiJEAiXG4n
ICUgKHNlbGYuVkFSX01ZRElSLCBiaW5hcnlfdG9fd3JhcCkpCiAKICAgICAgICAgb3MuY2htb2Qo
c2NyaXB0X2ZpbGUsIDBvNzU1KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9i
aW5hcnlfYnVuZGxpbmcvZGxvcGVud3JhcC9NYWtlZmlsZSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvYmluYXJ5X2J1bmRsaW5nL2Rsb3BlbndyYXAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDMwNzVj
ODk0YjAxMDAyZjQyMzhiM2RjZjAxZWUwYzI0M2ExZDgwZgotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1bmRsaW5nL2Rsb3BlbndyYXAvTWFrZWZpbGUK
QEAgLTAsMCArMSwxNiBAQAorVEhJU19ESVIgOj0gJChzdHJpcCAkKHNoZWxsIGRpcm5hbWUgJChy
ZWFscGF0aCAkKGxhc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKSkpCitDQyA9IGdjYworQ0ZMQUdT
ID0gLWZQSUMgLVdhbGwgLVdleHRyYSAtTzIKK0xERkxBR1MgPSAtbm9zdGFydGZpbGVzIC1zaGFy
ZWQgLWxkbAorUk0gPSBybSAtZgorVEFSR0VUX0xJQiA9IGRsb3BlbndyYXAuc28KK1NSQ1MgPSAk
KFRISVNfRElSKS9kbG9wZW53cmFwLmMKKworYWxsOiAke1RBUkdFVF9MSUJ9CisKKyQoVEFSR0VU
X0xJQik6ICQoU1JDUykKKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtV2wsLXNvbmFtZSwk
QCAtbyAkQCAkXgorCisuUEhPTlk6IGNsZWFuCitjbGVhbjoKKwktJHtSTX0gJHtUQVJHRVRfTElC
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iaW5hcnlfYnVuZGxpbmcvZGxv
cGVud3JhcC9SRUFETUUudHh0IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iaW5hcnlfYnVuZGxp
bmcvZGxvcGVud3JhcC9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEwZGY2OTI4MDUxMTU0OTE4ODk4
OWUyNjdkZDc4ZTA3NGY0NTZiMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2JpbmFyeV9idW5kbGluZy9kbG9wZW53cmFwL1JFQURNRS50eHQKQEAgLTAsMCArMSw5
IEBACitUaGlzIGlzIGEgc2hhcmVkIGxpYnJhcnkgdG8gd3JhcCBkbG9wZW4oKSBhbmQgZGxtb3Bl
bigpIGZ1bmN0aW9uIGNhbGxzCithbmQgcmV3cml0ZSB0aGUgcGF0aHMgbG9hZGVkIHRvIGVuc3Vy
ZSB0aGF0IHRoZSBsaWJyYXJ5IGxvYWRlZCBpcyBpbnNpZGUKK0xEX0xJQlJBUllfUEFUSCBlbnZp
cm9ubWVudCB2YXJpYWJsZXMuCisKK0l0IGlzIHVzZWQgYnkgdGhlIHNjcmlwdCBnZW5lcmF0ZS1i
dW5kbGUgdGhhdCBidWlsZHMgdGhpcyBsaWJyYXJ5IGFuZCBhZGRzCitpdCB0byBiZSBwcmVsb2Fk
ZWQgaW50byB0aGUgd3JhcHBlciBzY3JpcHQgdGhhdCBleGVjdXRlcyB0aGUgYnJvd3Nlci4KKwor
U2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBETE9QRU5fV1JBUF9ERUJVRz0xIG9yIERMT1BF
Tl9XUkFQX0RFQlVHPTIKK3RvIGdldCBlcnJvci9kZWJ1ZyBvdXRwdXQgZnJvbSB0aGlzIGxpYnJh
cnkuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JpbmFyeV9idW5kbGluZy9k
bG9wZW53cmFwL2Rsb3BlbndyYXAuYyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmluYXJ5X2J1
bmRsaW5nL2Rsb3BlbndyYXAvZGxvcGVud3JhcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0ZGUwYmM0ODMxODNi
MmQ1ZTFkZTYzY2IzYTk2YjE1N2Y1ZTNiZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2JpbmFyeV9idW5kbGluZy9kbG9wZW53cmFwL2Rsb3BlbndyYXAuYwpAQCAt
MCwwICsxLDMyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfR05VX1NPVVJDRQorI2RlZmluZSBfR05VX1NPVVJD
RQorI2VuZGlmCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNs
dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgor
I2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5n
Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNs
dWRlIDx1bmlzdGQuaD4KKworI2RlZmluZSBkbG9wZW5fd3JhcHBlcl9wcmludF9lcnJvcl9tc2co
Zm10LCAuLi4pIFwKKyAgICBkbyB7IFwKKyAgICAgICAgaWYgKGRsb3Blbl93cmFwcGVyX2RlYnVn
X3ByaW50ID49IDEpIFwKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiW3BpZD0lZF0gRVJS
T1IgYXQgZGxvcGVud3JhcC5zbzogIiBmbXQsIGdldHBpZCgpLCBfX1ZBX0FSR1NfXyk7IFwKKyAg
ICB9IHdoaWxlICgwKQorCisjZGVmaW5lIGRsb3Blbl93cmFwcGVyX3ByaW50X2RlYnVnX21zZyhm
bXQsIC4uLikgXAorICAgIGRvIHsgXAorICAgICAgICBpZiAoZGxvcGVuX3dyYXBwZXJfZGVidWdf
cHJpbnQgPj0gMikgXAorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJbcGlkPSVkXSBkbG9w
ZW53cmFwLnNvOiAiIGZtdCwgZ2V0cGlkKCksIF9fVkFfQVJHU19fKTsgXAorICAgIH0gd2hpbGUg
KDApCisKK3N0YXRpYyBpbnQgZGxvcGVuX3dyYXBwZXJfZGVidWdfcHJpbnQgPSAtMTsKK3N0YXRp
YyBpbnQgZGxvcGVuX3dyYXBwZXJfY2FsbF9yZWFsX2RsZXJyb3IgPSAxOworc3RhdGljIGNoYXIq
ICgqX19yZWFsX2RsZXJyb3IpKHZvaWQpID0gTlVMTDsKKworLy8gUmV0dXJucyB0aGUgc3RyaW5n
ICJkaXJuYW1lL2ZpbGVuYW1lIiBpbnRvIHRoZSBidWZmZXIgcGF0aF9qb2ludF9kZXN0Cit2b2lk
IGRsb3Blbl93cmFwcGVyX3BhdGhfam9pbihjb25zdCBjaGFyKiBkaXJuYW1lLCBjb25zdCBjaGFy
KiBmaWxlbmFtZSwgY2hhciogcGF0aF9qb2ludF9kZXN0KQoreworICAgIHBhdGhfam9pbnRfZGVz
dCA9IHN0cm5jcHkocGF0aF9qb2ludF9kZXN0LCBkaXJuYW1lLCBQQVRIX01BWCk7CisgICAgLy8g
YWRkIGEgc2xhc2ggaWYgbmVlZGVkCisgICAgaWYgKCoocGF0aF9qb2ludF9kZXN0ICsgc3RybGVu
KGRpcm5hbWUpIC0gMSkgIT0gJy8nKSB7CisgICAgICAgICoocGF0aF9qb2ludF9kZXN0ICsgc3Ry
bGVuKGRpcm5hbWUpKSA9ICcvJzsKKyAgICAgICAgKihwYXRoX2pvaW50X2Rlc3QgKyBzdHJsZW4o
ZGlybmFtZSkgKyAxKSA9IDA7CisgICAgfQorICAgIHN0cm5jYXQocGF0aF9qb2ludF9kZXN0LCBm
aWxlbmFtZSwgUEFUSF9NQVgpOworfQorCitpbnQgaXNfZGlyKHVuc2lnbmVkIGNoYXIgZF90eXBl
LCBjb25zdCBjaGFyKiBmaWxlcGF0aCkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworICAg
IC8vIHdlIGNvbnNpZGVyIGEgc3ltYm9saWMgbGluayB0byBhIGRpciBhcyBhIGRpciwgYWxzbyBo
YW5kbGUgdW5rbm93bi4KKyAgICBpZiAoZF90eXBlID09IERUX1VOS05PV04gfHwgZF90eXBlID09
IERUX0xOSykgeworICAgICAgICBpZiAoc3RhdChmaWxlcGF0aCwgJnN0YXRidWYpKQorICAgICAg
ICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZXJyb3JfbXNnKCJDYWxsaW5nIHN0YXQgb24gXCIl
c1wiOiAlc1xuIiwgZmlsZXBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBT
X0lTRElSKHN0YXRidWYuc3RfbW9kZSk7CisgICAgfQorICAgIHJldHVybiAoZF90eXBlID09IERU
X0RJUik7Cit9CisKKy8vIFJlY3Vyc2l2ZSBmdW5jdGlvbiB0byB0cmF2ZXJzZSBhIGRpcmVjdG9y
eSBhbmQgb2J0YWluIHRoZSBwYXRoIG9mIHRoZSBmaXJzdCBmaWxlIG5hbWVkICJmaWxlbmFtZSIK
Ky8vIEl0IHdyaXRlcyB0aGF0IHBhdGggdG8gdGhlIGJ1ZmZlciAiY2FuZGlkYXRlX3BhdGhfZGVz
dCIgaWYgdGhlIGZpbGUgaXMgZm91bmQgKHJldHVybiA9PSAxKS4KKy8vIElmIHRoZSBmaWxlIGlz
IG5vdCBmb3VuZCBpdCByZXR1cm5zIDAgYW5kIHRoZSBjb250ZW50cyBvZiAiY2FuZGlkYXRlX3Bh
dGhfZGVzdCIgYXJlIHVuZGVmaW5lZC4KK2ludCBkbG9wZW5fd3JhcHBlcl9yZWN1cnNpdmVfZmlu
ZChjb25zdCBjaGFyKiBmaWxlbmFtZV90b19maW5kLCBjb25zdCBjaGFyKiBkaXJlY3RvcnlfdG9f
c2VhcmNoLCBjaGFyKiBjYW5kaWRhdGVfcGF0aF9kZXN0KQoreworCisgICAgRElSICpkcDsKKyAg
ICBzdHJ1Y3QgZGlyZW50KiBlbnRyeTsKKworICAgIGNoYXIgc3ViZGlyZWN0b3J5X3RvX3NlYXJj
aFtQQVRIX01BWF07CisgICAgZHAgPSBvcGVuZGlyKGRpcmVjdG9yeV90b19zZWFyY2gpOworCisg
ICAgaWYgKCFkcCkgeworICAgICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9lcnJvcl9tc2coIk9w
ZW5pbmcgZGlyZWN0b3J5IFwiJXNcIjogJXNcbiIsIGRpcmVjdG9yeV90b19zZWFyY2gsIHN0cmVy
cm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHdoaWxlICgxKSB7
CisgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgZW50cnkgPSByZWFkZGlyKGRwKTsKKyAgICAg
ICAgaWYgKCFlbnRyeSkgeworICAgICAgICAgICAgaWYgKGVycm5vKQorICAgICAgICAgICAgICAg
IGRsb3Blbl93cmFwcGVyX3ByaW50X2Vycm9yX21zZygiUmVhZGluZyBkaXJlY3RvcnkgXCIlc1wi
OiAlc1xuIiwgZGlyZWN0b3J5X3RvX3NlYXJjaCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzdHJjbXAoZW50cnktPmRfbmFt
ZSwgIi4iKSB8fCAhc3RyY21wKGVudHJ5LT5kX25hbWUsICIuLiIpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgZGxvcGVuX3dyYXBwZXJfcGF0aF9qb2luKGRpcmVjdG9yeV90b19z
ZWFyY2gsIGVudHJ5LT5kX25hbWUsIGNhbmRpZGF0ZV9wYXRoX2Rlc3QpOworCisgICAgICAgIGlm
IChpc19kaXIoZW50cnktPmRfdHlwZSwgY2FuZGlkYXRlX3BhdGhfZGVzdCkpIHsKKyAgICAgICAg
ICAgIGRsb3Blbl93cmFwcGVyX3BhdGhfam9pbihkaXJlY3RvcnlfdG9fc2VhcmNoLCBlbnRyeS0+
ZF9uYW1lLCBzdWJkaXJlY3RvcnlfdG9fc2VhcmNoKTsKKyAgICAgICAgICAgIGlmIChkbG9wZW5f
d3JhcHBlcl9yZWN1cnNpdmVfZmluZChmaWxlbmFtZV90b19maW5kLCBzdWJkaXJlY3RvcnlfdG9f
c2VhcmNoLCBjYW5kaWRhdGVfcGF0aF9kZXN0KSkgeworICAgICAgICAgICAgICAgIGNsb3NlZGly
KGRwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghc3RyY21wKGZpbGVuYW1lX3RvX2ZpbmQsIGVudHJ5
LT5kX25hbWUpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFhY2Nlc3MoY2FuZGlkYXRlX3BhdGhf
ZGVzdCwgRl9PSyB8IFJfT0spKSB7CisgICAgICAgICAgICAgICAgICAgIGNsb3NlZGlyKGRwKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGRsb3Blbl93cmFwcGVyX3ByaW50X2Vycm9yX21zZygiQWNjZXNzIGRlbmllZCB0
byBjYW5kaWRhdGUgbGlicmFyeSBcIiVzXCJcbiIsIGNhbmRpZGF0ZV9wYXRoX2Rlc3QpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNsb3NlZGlyKGRwKTsKKyAgICByZXR1
cm4gMDsKK30KKworLy8gSGVscGVyIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGZpbGVuYW1lX29y
aWdpbmFsX3BhdGggaXMgYSBwYXRoIGFuZCBpcyBpbnNpZGUgbGliZGlyLgorLy8gSWYgaXQgY2Fu
J3QgZmluZCB0aGUgZmlsZSBkaXJlY3RseSBieSB0aGUgcGF0aCwgaXQgY2FsbHMgZGxvcGVuX3dy
YXBwZXJfcmVjdXJzaXZlX2ZpbmQoKSB0byBzZWFyY2ggaXQuCisvLyBJdCB3cml0ZXMgdGhlIHBh
dGggdG8gdGhlIGJ1ZmZlciAicGF0aF9mb3VuZF9kZXN0IiBpZiB0aGUgZmlsZSBpcyBmb3VuZCAo
cmV0dXJuID09IDEpLgorLy8gSWYgdGhlIGZpbGUgaXMgbm90IGZvdW5kIGl0IHJldHVybnMgMCBh
bmQgdGhlIGNvbnRlbnRzIG9mICJwYXRoX2ZvdW5kX2Rlc3QiIGFyZSB1bmRlZmluZWQuCitpbnQg
ZGxvcGVuX3dyYXBwZXJfZ2V0X3BhdGhfZm9yX2ZpbGVfdW5kZXJfZGlyKGNvbnN0IGNoYXIqIGZp
bGVuYW1lX29yaWdpbmFsX3BhdGgsIGNvbnN0IGNoYXIqIGxpYmRpciwgY2hhciogcGF0aF9mb3Vu
ZF9kZXN0KQoreworCisgICAgLy8gYmFzZW5hbWUoKSBtYXkgbW9kaWZ5IHRoZSBidWZmZXIgcGFz
c2VkIG9uIHRoZSBmaXJzdCBhcmd1bWVudAorICAgIGNoYXIgKm9yaWdpbmFsX3BhdGggPSBzdHJk
dXAoZmlsZW5hbWVfb3JpZ2luYWxfcGF0aCk7CisgICAgY2hhciAqYmFzZV9maWxlX3RvX2Rsb3Bl
bl93cmFwcGVyX2ZpbmQgPSBiYXNlbmFtZShvcmlnaW5hbF9wYXRoKTsKKyAgICBpbnQgcmV0Y29k
ZSA9IDE7CisgICAgaW50IGZpbGVuYW1lX2lzX2Fic29sdXRlID0gKCpmaWxlbmFtZV9vcmlnaW5h
bF9wYXRoID09ICcvJyk7CisgICAgaW50IGZpbGVuYW1lX2lzX3JlbGF0aXZlID0gMDsKKyAgICBp
ZiAoIWZpbGVuYW1lX2lzX2Fic29sdXRlKSB7CisgICAgICAgIGZvciAoY2hhciogY3VycmVudF9j
aGFyID0gKGNoYXIqKWZpbGVuYW1lX29yaWdpbmFsX3BhdGg7ICpjdXJyZW50X2NoYXI7ICsrY3Vy
cmVudF9jaGFyKSB7CisgICAgICAgICAgICBpZiAoKmN1cnJlbnRfY2hhciA9PSAnLycpIHsKKyAg
ICAgICAgICAgICAgICBmaWxlbmFtZV9pc19yZWxhdGl2ZSA9IDE7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZmlsZW5h
bWVfaXNfYWJzb2x1dGUpIHsKKyAgICAgICAgaWYgKCFzdHJuY21wKGZpbGVuYW1lX29yaWdpbmFs
X3BhdGgsIGxpYmRpciwgc3RybGVuKGxpYmRpcikpKSB7CisgICAgICAgICAgICBpZiAoIWFjY2Vz
cyhmaWxlbmFtZV9vcmlnaW5hbF9wYXRoLCBGX09LIHwgUl9PSykpIHsKKyAgICAgICAgICAgICAg
ICBkbG9wZW5fd3JhcHBlcl9wcmludF9kZWJ1Z19tc2coIkZpbGVuYW1lIFwiJXNcIiBmb3VuZCB1
bmRlciBkaXJlY3RvcnkgXCIlc1wiIHdpdGhvdXQgYW55IHBhdGggcmV3cml0aW5nXG4iLCBmaWxl
bmFtZV9vcmlnaW5hbF9wYXRoLCBsaWJkaXIpOworICAgICAgICAgICAgICAgIHN0cm5jcHkocGF0
aF9mb3VuZF9kZXN0LCBmaWxlbmFtZV9vcmlnaW5hbF9wYXRoLCBQQVRIX01BWCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGxv
cGVuX3dyYXBwZXJfcHJpbnRfZGVidWdfbXNnKCJGaWxlbmFtZSBcIiVzXCIgTk9UIGZvdW5kIHVu
ZGVyIGRpcmVjdG9yeSBcIiVzXCIuIFdpbGwgdHJ5IGEgc2VhcmNoIHdpdGggYmFzZW5hbWVcbiIs
IGZpbGVuYW1lX29yaWdpbmFsX3BhdGgsIGxpYmRpcik7CisgICAgfSBlbHNlIGlmIChmaWxlbmFt
ZV9pc19yZWxhdGl2ZSkgeworICAgICAgICBkbG9wZW5fd3JhcHBlcl9wYXRoX2pvaW4obGliZGly
LCBmaWxlbmFtZV9vcmlnaW5hbF9wYXRoLCBwYXRoX2ZvdW5kX2Rlc3QpOworICAgICAgICBpZiAo
IWFjY2VzcyhwYXRoX2ZvdW5kX2Rlc3QsIEZfT0sgfCBSX09LKSkgeworICAgICAgICAgICAgZGxv
cGVuX3dyYXBwZXJfcHJpbnRfZGVidWdfbXNnKCJGaWxlbmFtZSBcIiVzXCIgY29udmVydGVkIHRv
IFwiJXNcIiBhbmQgZm91bmQgdW5kZXIgZGlyZWN0b3J5IFwiJXNcIlxuIiwgZmlsZW5hbWVfb3Jp
Z2luYWxfcGF0aCwgcGF0aF9mb3VuZF9kZXN0LCBsaWJkaXIpOworICAgICAgICAgICAgcmV0dXJu
IDE7CisgICAgICAgIH0KKyAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZGVidWdfbXNnKCJG
aWxlbmFtZSBcIiVzXCIgTk9UIGZvdW5kIHVuZGVyIGRpcmVjdG9yeSBcIiVzXCJcbiIsIGZpbGVu
YW1lX29yaWdpbmFsX3BhdGgsIGxpYmRpcik7CisgICAgfQorCisgICAgZGxvcGVuX3dyYXBwZXJf
cHJpbnRfZGVidWdfbXNnKCJUcnlpbmcgYSBzZWFyY2ggZm9yIGJhc2VuYW1lIFwiJXNcIiB1bmRl
ciBkaXJlY3RvcnkgXCIlc1wiXG4iLCBiYXNlX2ZpbGVfdG9fZGxvcGVuX3dyYXBwZXJfZmluZCwg
bGliZGlyKTsKKworICAgIHJldGNvZGUgPSBkbG9wZW5fd3JhcHBlcl9yZWN1cnNpdmVfZmluZChi
YXNlX2ZpbGVfdG9fZGxvcGVuX3dyYXBwZXJfZmluZCwgbGliZGlyLCBwYXRoX2ZvdW5kX2Rlc3Qp
OworICAgIGlmIChvcmlnaW5hbF9wYXRoKQorICAgICAgICBmcmVlKG9yaWdpbmFsX3BhdGgpOwor
ICAgIHJldHVybiByZXRjb2RlOworfQorCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gc3BsaXQgdGhl
IHBhdGhzIG9mIGxkX2xpYnJhcnlfcGF0aCBhbmQgdG8gc2VhcmNoIGZvciAiZmlsZW5hbWVfb3Jp
Z2luYWxfcGF0aCIgaW5zaWRlIHRob3NlIHBhdGhzLgorLy8gSXQgd2lsbCBzdG9wIHNlYXJjaGlu
ZyBhdCB0aGUgZmlyc3QgbWF0Y2guCisvLyBJdCB3cml0ZXMgdGhlIHBhdGggdG8gdGhlIGJ1ZmZl
ciAicGF0aF9mb3VuZF9kZXN0IiBpZiB0aGUgZmlsZSBpcyBmb3VuZCAocmV0dXJuID09IDEpLgor
Ly8gSWYgdGhlIGZpbGUgaXMgbm90IGZvdW5kIGl0IHJldHVybnMgMCBhbmQgdGhlIGNvbnRlbnRz
IG9mICJwYXRoX2ZvdW5kX2Rlc3QiIGFyZSB1bmRlZmluZWQuCitpbnQgZGxvcGVuX3dyYXBwZXJf
ZmluZF9saWJyYXJ5X29uX2xpYnBhdGgoY29uc3QgY2hhciogZmlsZW5hbWVfb3JpZ2luYWxfcGF0
aCwgY29uc3QgY2hhciogbGRfbGlicmFyeV9wYXRoLCBjaGFyKiBwYXRoX2ZvdW5kX2Rlc3QpCit7
CisKKyAgICBjaGFyICpzYXZlcHRyID0gTlVMTDsKKyAgICBjaGFyICpsaWJyYXJ5X3BhdGhzID0g
c3RyZHVwKGxkX2xpYnJhcnlfcGF0aCk7CisgICAgaW50IGZvdW5kID0gMDsKKworICAgIGZvciAo
Y2hhciAqbGliZGlyID0gc3RydG9rX3IobGlicmFyeV9wYXRocywgIjoiLCAmc2F2ZXB0cik7IGxp
YmRpcjsgbGliZGlyID0gc3RydG9rX3IoTlVMTCwgIjoiLCAmc2F2ZXB0cikpIHsKKyAgICAgICAg
Ly8gbWFrZSB0aGUgcGF0aCBhYnNvbHV0ZQorICAgICAgICBjaGFyICpsaWJkaXJfcnAgPSByZWFs
cGF0aChsaWJkaXIsIE5VTEwpOworICAgICAgICBpZiAoIWxpYmRpcl9ycCkgeworICAgICAgICAg
ICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZXJyb3JfbXNnKCJDYWxsaW5nIHJlYWxwYXRoKCkgb24g
XCIlc1wiOiAlc1xuIiwgbGliZGlyLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZGVidWdfbXNn
KCJUcnlpbmcgc2VhcmNoIHVuZGVyIGRpcmVjdG9yeSAlc1xuIiwgbGliZGlyKTsKKyAgICAgICAg
aWYgKGRsb3Blbl93cmFwcGVyX2dldF9wYXRoX2Zvcl9maWxlX3VuZGVyX2RpcihmaWxlbmFtZV9v
cmlnaW5hbF9wYXRoLCBsaWJkaXJfcnAsIHBhdGhfZm91bmRfZGVzdCkpIHsKKyAgICAgICAgICAg
IGZyZWUobGliZGlyX3JwKTsKKyAgICAgICAgICAgIGZvdW5kID0gMTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGZyZWUobGliZGlyX3JwKTsKKyAgICB9CisgICAgZnJl
ZShsaWJyYXJ5X3BhdGhzKTsKKyAgICByZXR1cm4gZm91bmQ7Cit9CisKK3ZvaWQgKmRsb3Blbihj
b25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGZsYWdzKQoreworICAgIGNoYXIgbmV3X2ZpbGVfcGF0
aFtQQVRIX01BWF07CisgICAgZGxvcGVuX3dyYXBwZXJfY2FsbF9yZWFsX2RsZXJyb3IgPSAxOwor
CisgICAgaWYgKGRsb3Blbl93cmFwcGVyX2RlYnVnX3ByaW50ID09IC0xKSB7CisgICAgICAgIGNo
YXIgKmRsb3Blbl9kZWJ1Z192YWx1ZSA9IGdldGVudigiRExPUEVOX1dSQVBfREVCVUciKTsKKyAg
ICAgICAgaWYgKGRsb3Blbl9kZWJ1Z192YWx1ZSkKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVy
X2RlYnVnX3ByaW50ID0gYXRvaShkbG9wZW5fZGVidWdfdmFsdWUpOworICAgIH0KKworICAgIHN0
YXRpYyB2b2lkKiAoKl9fcmVhbF9kbG9wZW4pKGNvbnN0IGNoYXIqIGZpbGUsIGludCBtb2RlKSA9
IE5VTEw7CisgICAgaWYgKCFfX3JlYWxfZGxvcGVuKSB7CisgICAgICAgIF9fcmVhbF9kbG9wZW4g
PSBkbHN5bShSVExEX05FWFQsICJkbG9wZW4iKTsKKyAgICAgICAgaWYgKCFfX3JlYWxfZGxvcGVu
KSB7CisgICAgICAgICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9lcnJvcl9tc2coIkdldHRpbmcg
ZGxvcGVuIGFkZHJlc3M6ICVzXG4iLCBkbGVycm9yKCkpOworICAgICAgICAgICAgZGxvcGVuX3dy
YXBwZXJfY2FsbF9yZWFsX2RsZXJyb3IgPSAwOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFfX3JlYWxfZGxlcnJvcikgeworICAgICAgICBfX3Jl
YWxfZGxlcnJvciA9IGRsc3ltKFJUTERfTkVYVCwgImRsZXJyb3IiKTsKKyAgICAgICAgaWYgKCFf
X3JlYWxfZGxlcnJvcikgeworICAgICAgICAgICAgZGxvcGVuX3dyYXBwZXJfcHJpbnRfZXJyb3Jf
bXNnKCJHZXR0aW5nIGRsZXJyb3IgYWRkcmVzczogJXNcbiIsIGRsZXJyb3IoKSk7CisgICAgICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIERvbid0IGRvIGFu
eXRoaW5nIGlmIGZpbGVuYW1lIGlzIE5VTEwgb3IgTERfTElCUkFSWV9QQVRIIG5vdCBkZWZpbmVk
CisgICAgaWYgKCFmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIF9fcmVhbF9kbG9wZW4oZmlsZW5h
bWUsIGZsYWdzKTsKKworICAgIGNoYXIgKmxkX2xpYnJhcnlfcGF0aCA9IGdldGVudigiTERfTElC
UkFSWV9QQVRIIik7CisgICAgaWYgKCFsZF9saWJyYXJ5X3BhdGgpCisgICAgICAgIHJldHVybiBf
X3JlYWxfZGxvcGVuKGZpbGVuYW1lLCBmbGFncyk7CisKKyAgICBpZiAoIWRsb3Blbl93cmFwcGVy
X2ZpbmRfbGlicmFyeV9vbl9saWJwYXRoKGZpbGVuYW1lLCBsZF9saWJyYXJ5X3BhdGgsIG5ld19m
aWxlX3BhdGgpKSB7CisgICAgICAgIGRsb3Blbl93cmFwcGVyX3ByaW50X2Vycm9yX21zZygiQ291
bGQgbm90IGZpbmQgXCIlc1wiIHVuZGVyIHRoZSBkaXJlY3RvcmkoZXMpIG9mIExEX0xJQlJBUllf
UEFUSC4gUmVmdXNpbmcgdG8gZGxvcGVuIGl0XG4iLCBmaWxlbmFtZSk7CisgICAgICAgIGRsb3Bl
bl93cmFwcGVyX2NhbGxfcmVhbF9kbGVycm9yID0gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgfQorCisgICAgaWYgKGRsb3Blbl93cmFwcGVyX2RlYnVnX3ByaW50KSB7CisgICAgICAgIGlm
IChzdHJjbXAoZmlsZW5hbWUsIG5ld19maWxlX3BhdGgpKQorICAgICAgICAgICAgZGxvcGVuX3dy
YXBwZXJfcHJpbnRfZGVidWdfbXNnKCJPcmlnaW5hbCByZXF1ZXN0IHRvIGRsb3BlbiBcIiVzXCIg
Y2hhbmdlZCB0byBsb2FkIFwiJXNcIlxuIiwgZmlsZW5hbWUsIG5ld19maWxlX3BhdGgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9kZWJ1Z19tc2coIk9y
aWdpbmFsIHJlcXVlc3QgdG8gZGxvcGVuIFwiJXNcIiBhbGxvd2VkICh1bmNoYW5nZWQpIGJlY2F1
c2UgaXMgdW5kZXIgdGhlIGRpcmVjdG9yaShlcykgb2YgTERfTElCUkFSWV9QQVRIXG4iLCBmaWxl
bmFtZSk7CisgICAgfQorCisgICAgcmV0dXJuIF9fcmVhbF9kbG9wZW4obmV3X2ZpbGVfcGF0aCwg
ZmxhZ3MpOworfQorCit2b2lkICpkbG1vcGVuKExtaWRfdCBsbWlkLCBjb25zdCBjaGFyKiBmaWxl
bmFtZSwgaW50IGZsYWdzKQoreworCisgICAgY2hhciBuZXdfZmlsZV9wYXRoW1BBVEhfTUFYXTsK
KyAgICBkbG9wZW5fd3JhcHBlcl9jYWxsX3JlYWxfZGxlcnJvciA9IDE7CisKKyAgICBpZiAoZGxv
cGVuX3dyYXBwZXJfZGVidWdfcHJpbnQgPT0gLTEpIHsKKyAgICAgICAgY2hhciAqZGxvcGVuX2Rl
YnVnX3ZhbHVlID0gZ2V0ZW52KCJETE9QRU5fV1JBUF9ERUJVRyIpOworICAgICAgICBpZiAoZGxv
cGVuX2RlYnVnX3ZhbHVlKQorICAgICAgICAgICAgZGxvcGVuX3dyYXBwZXJfZGVidWdfcHJpbnQg
PSBhdG9pKGRsb3Blbl9kZWJ1Z192YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqICgq
X19yZWFsX2RsbW9wZW4pKExtaWRfdCBsbWlkdCwgY29uc3QgY2hhciogZmlsZSwgaW50IG1vZGUp
ID0gTlVMTDsKKyAgICBpZiAoIV9fcmVhbF9kbG1vcGVuKSB7CisgICAgICAgIF9fcmVhbF9kbG1v
cGVuID0gZGxzeW0oUlRMRF9ORVhULCAiZGxtb3BlbiIpOworICAgICAgICBpZiAoIV9fcmVhbF9k
bG1vcGVuKSB7CisgICAgICAgICAgICBkbG9wZW5fd3JhcHBlcl9wcmludF9lcnJvcl9tc2coIkdl
dHRpbmcgZGxtb3BlbiBhZGRyZXNzOiAlc1xuIiwgZGxlcnJvcigpKTsKKyAgICAgICAgICAgIGRs
b3Blbl93cmFwcGVyX2NhbGxfcmVhbF9kbGVycm9yID0gMDsKKyAgICAgICAgICAgIHJldHVybiBO
VUxMOworICAgICAgICB9CisgICAgfQorICAgIGlmICghX19yZWFsX2RsZXJyb3IpIHsKKyAgICAg
ICAgX19yZWFsX2RsZXJyb3IgPSBkbHN5bShSVExEX05FWFQsICJkbGVycm9yIik7CisgICAgICAg
IGlmICghX19yZWFsX2RsZXJyb3IpIHsKKyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVyX3ByaW50
X2Vycm9yX21zZygiR2V0dGluZyBkbGVycm9yIGFkZHJlc3M6ICVzXG4iLCBkbGVycm9yKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEb24n
dCBkbyBhbnl0aGluZyBpZiBmaWxlbmFtZSBpcyBOVUxMIG9yIExEX0xJQlJBUllfUEFUSCBub3Qg
ZGVmaW5lZAorICAgIGlmICghZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBfX3JlYWxfZGxtb3Bl
bihsbWlkLCBmaWxlbmFtZSwgZmxhZ3MpOworCisgICAgY2hhciAqbGRfbGlicmFyeV9wYXRoID0g
Z2V0ZW52KCJMRF9MSUJSQVJZX1BBVEgiKTsKKyAgICBpZiAoIWxkX2xpYnJhcnlfcGF0aCkKKyAg
ICAgICAgcmV0dXJuIF9fcmVhbF9kbG1vcGVuKGxtaWQsIGZpbGVuYW1lLCBmbGFncyk7CisKKyAg
ICBpZiAoIWRsb3Blbl93cmFwcGVyX2ZpbmRfbGlicmFyeV9vbl9saWJwYXRoKGZpbGVuYW1lLCBs
ZF9saWJyYXJ5X3BhdGgsIG5ld19maWxlX3BhdGgpKSB7CisgICAgICAgIGRsb3Blbl93cmFwcGVy
X3ByaW50X2Vycm9yX21zZygiQ291bGQgbm90IGZpbmQgXCIlc1wiIHVuZGVyIHRoZSBkaXJlY3Rv
cmkoZXMpIG9mIExEX0xJQlJBUllfUEFUSC4gUmVmdXNpbmcgdG8gZGxtb3BlbiBpdFxuIiwgZmls
ZW5hbWUpOworICAgICAgICBkbG9wZW5fd3JhcHBlcl9jYWxsX3JlYWxfZGxlcnJvciA9IDA7Cisg
ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChkbG9wZW5fd3JhcHBlcl9kZWJ1
Z19wcmludCkgeworICAgICAgICBpZiAoc3RyY21wKGZpbGVuYW1lLCBuZXdfZmlsZV9wYXRoKSkK
KyAgICAgICAgICAgIGRsb3Blbl93cmFwcGVyX3ByaW50X2RlYnVnX21zZygiT3JpZ2luYWwgcmVx
dWVzdCB0byBkbG1vcGVuIFwiJXNcIiBjaGFuZ2VkIHRvIGxvYWQgXCIlc1wiXG4iLCBmaWxlbmFt
ZSwgbmV3X2ZpbGVfcGF0aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRsb3Blbl93cmFw
cGVyX3ByaW50X2RlYnVnX21zZygiT3JpZ2luYWwgcmVxdWVzdCB0byBkbG1vcGVuIFwiJXNcIiBh
bGxvd2VkICh1bmNoYW5nZWQpIGJlY2F1c2UgaXMgdW5kZXIgdGhlIGRpcmVjdG9yaShlcykgb2Yg
TERfTElCUkFSWV9QQVRIXG4iLCBmaWxlbmFtZSk7CisgICAgfQorCisgICAgcmV0dXJuIF9fcmVh
bF9kbG1vcGVuKGxtaWQsIG5ld19maWxlX3BhdGgsIGZsYWdzKTsKK30KKworCitjaGFyICpkbGVy
cm9yKHZvaWQpCit7CisgICAgc3RhdGljIGNoYXIqIHdyYXBwZXJfZXJyb3JfbXNnID0gIkNhbGwg
YmxvY2tlZCBieSBkbG9wZW53cmFwcGVyIGxpYnJhcnkuIjsKKworICAgIC8vIF9fcmVhbF9kbGVy
cm9yIGhhbmRsZSB3YXMgYWxyZWFkeSBvYnRhaW5lZCBiZWZvcmUgb24gdGhlIGRsb3BlbigpIG9y
IGRsbW9wZW4oKSB3cmFwcGVycy4KKyAgICAvLyBPYnRhaW5pbmcgaXQgaGVyZSBpcyBub3QgcG9z
c2libGUgYmVjYXVzZSBjYWxsaW5nIGRsc3ltKCkgb3ZlcndyaXRlcyB0aGUgZGxlcnJvciBidWZm
ZXIuCisgICAgaWYgKGRsb3Blbl93cmFwcGVyX2NhbGxfcmVhbF9kbGVycm9yICYmIF9fcmVhbF9k
bGVycm9yKQorICAgICAgICByZXR1cm4gX19yZWFsX2RsZXJyb3IoKTsKKworICAgIGRsb3Blbl93
cmFwcGVyX2NhbGxfcmVhbF9kbGVycm9yID0gMTsKKyAgICByZXR1cm4gd3JhcHBlcl9lcnJvcl9t
c2c7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggYmRmM2Iz
NDcxMDQyYTEzMzU3ZWRiODY0YTE0OThkZmZjYWE1NDA3My4uZjY1MTA3YTBlOTQyOTI3NjkzOWQy
MzRkMjI1MzQ0ZDA5ZmEwOTVjZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tl
ci5weQpAQCAtMzA1LDYgKzMwNSwxMSBAQCBfUEFUSF9SVUxFU19TUEVDSUZJRVIgPSBbCiAgICAg
ICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdUaGlyZFBhcnR5JywgJ2xpYndlYnJ0YycsICdTb3Vy
Y2UnLCAnd2VicnRjJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywg
J1BBTCcsICdwYWwnLCAnc3BpJyldLAogICAgICBbIi1yZWFkYWJpbGl0eS9uYW1pbmcvdW5kZXJz
Y29yZXMiXSksCisKKyAgICAoWyAgIyBjIGNvZGUgd2l0aCB1bmRlcnNjb3JlcyBpbiB2YXJpYWJs
ZSBuYW1lcyBhbmQgdGFicyBmb3IgdGhlIE1ha2VmaWxlCisgICAgIG9zLnBhdGguam9pbignVG9v
bHMnLCAnU2NyaXB0cycsICd3ZWJraXRweScsICdiaW5hcnlfYnVuZGxpbmcnLCAnZGxvcGVud3Jh
cCcpXSwKKyAgICAgWyItcmVhZGFiaWxpdHkvbmFtaW5nL3VuZGVyc2NvcmVzIiwKKyAgICAgICIt
d2hpdGVzcGFjZS90YWIiXSksCiBdCiAKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>