<?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>179621</bug_id>
          
          <creation_ts>2017-11-13 11:01:16 -0800</creation_ts>
          <short_desc>webkitpy: Better name-version mapping</short_desc>
          <delta_ts>2018-01-11 10:27:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</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=179534</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>180069</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>ap</cc>
    
    <cc>buildbot</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>glenn</cc>
    
    <cc>lforschler</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>pvollan</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1370956</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-13 11:01:16 -0800</bug_when>
    <thetext>Currently, we map version numbers to version names in platforminfo.py.  This has a few problems: first, it confuses version number (10.13.0) with version name (High Sierra) because on some platforms (like iOS) the two are the same (version 11.0 is iOS 11). Second, by storing the version name instead of the version number, scripts can&apos;t differentiate between minor versions (So 10.12 and 10.12.3 look exactly the same). Third, as discussed in &lt;https://bugs.webkit.org/show_bug.cgi?id=179534&gt;, we can&apos;t iterate through available versions if name-version mapping is in platforminfo.py.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372631</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-16 08:53:55 -0800</bug_when>
    <thetext>&lt;rdar://problem/35589585&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372637</commentid>
    <comment_count>2</comment_count>
      <attachid>327067</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-16 09:06:05 -0800</bug_when>
    <thetext>Created attachment 327067
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372641</commentid>
    <comment_count>3</comment_count>
      <attachid>327068</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-16 09:16:00 -0800</bug_when>
    <thetext>Created attachment 327068
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372644</commentid>
    <comment_count>4</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-16 09:25:20 -0800</bug_when>
    <thetext>The first part of this patch places all version name-version object mapping in a single location.

The second part of this patch will have platform info representing all versions as version objects and then consumers converting to version name if appropriate.

I am separating these two because the first part of this change is the part that contains the new code, the second part will be a refactor.  The second part of the change is low-risk, while the first pretty significantly changes the logic used for determining version names on some ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372961</commentid>
    <comment_count>5</comment_count>
      <attachid>327068</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-11-16 19:47:00 -0800</bug_when>
    <thetext>Comment on attachment 327068
Patch

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

I have not thought about the correctness of this patch.

&gt; Tools/Scripts/webkitpy/common/version_name_map.py:44
&gt; +                &apos;Leopard&apos;: Version(&apos;10.5&apos;),

I suggest that we standardize on instantiating a Version object where the components are passed as numeric types. A string can contain arbitrary characters and requires the Version class to parse the string and have a strategy for handling a bad parse. We can avoid the need to parse strings and avoid the need to pick a bad parse strategy by having Version take numeric types on instantiation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373063</commentid>
    <comment_count>6</comment_count>
      <attachid>327068</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-17 08:03:51 -0800</bug_when>
    <thetext>Comment on attachment 327068
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/common/version_name_map.py:44
&gt;&gt; +                &apos;Leopard&apos;: Version(&apos;10.5&apos;),
&gt; 
&gt; I suggest that we standardize on instantiating a Version object where the components are passed as numeric types. A string can contain arbitrary characters and requires the Version class to parse the string and have a strategy for handling a bad parse. We can avoid the need to parse strings and avoid the need to pick a bad parse strategy by having Version take numeric types on instantiation.

This suggesting is probably better discussed here &lt;https://bugs.webkit.org/show_bug.cgi?id=179677&gt;.

Because of Python&apos;s type system, we need a strategy for handling malformed data even if we&apos;re expecting numeric types.  Furthermore, we can&apos;t avoid the need to parse strings because we frequently compute versions from the output of commands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373176</commentid>
    <comment_count>7</comment_count>
      <attachid>327068</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-11-17 11:34:19 -0800</bug_when>
    <thetext>Comment on attachment 327068
Patch

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

r=me with a few comments, but Dan Bates expressed a concern, so please sync up with him before landing.

My opinion is that it&apos;s an improvement to have all this logic in one place (and tested), and it will make it easy to add new versions in the future.

&gt; Tools/Scripts/webkitpy/common/version.py:103
&gt; +    # 11.2 is contained in 11, but 11 is not contained in 11.2
&gt; +    def contained_in(self, version):
&gt; +        match_flag = False
&gt; +        for i in xrange(len(self)):
&gt; +            if self[i] != version[i]:
&gt; +                match_flag = True
&gt; +            if match_flag and version[i] != 0:
&gt; +                return False
&gt; +        return True

I&apos;m having a hard time with the name &apos;match_flag&apos;.  I&apos;m sure you wanted to avoid double-negatives, but maybe a name like this might read better?

    last_number_did_not_match
    did_not_match

Or reverse the logic and use &apos;did_match&apos; instead.

It would also be nice to use something other than &quot;number&quot;, but not sure what to call each set of digits between periods.  (Probably not &quot;sub_version&quot;, though. :)  Maybe &quot;intermediate_version&quot;, although that&apos;s really long.

I guess that&apos;s probably why you chose &apos;match_flag&apos;.

Not necessary to fix before landing, but something to consider.

&gt; Tools/Scripts/webkitpy/common/version_name_map.py:77
&gt; +            &apos;linux&apos;: {
&gt; +                &apos;Lucid&apos;: Version(&apos;10.4&apos;),
&gt; +                &apos;Maverick&apos;: Version(&apos;10.10&apos;),
&gt; +                &apos;Natty&apos;: Version(&apos;11.4&apos;),
&gt; +                &apos;Precise&apos;: Version(&apos;12.4&apos;),
&gt; +                &apos;Quantal&apos;: Version(&apos;12.10&apos;),
&gt; +                &apos;Raring&apos;: Version(&apos;13.4&apos;),
&gt; +                &apos;Saucy&apos;: Version(&apos;13.10&apos;),
&gt; +                &apos;Utopic&apos;: Version(&apos;14.10&apos;),
&gt; +                &apos;Vivid&apos;: Version(&apos;15.04&apos;),
&gt; +                &apos;Wily&apos;: Version(&apos;15.10&apos;),
&gt; +                &apos;Yakkety&apos;: Version(&apos;16.10&apos;),
&gt; +                &apos;Bionic&apos;: Version(&apos;18.04&apos;),
&gt; +            },

Are these all Ubuntu names?  Haven&apos;t heard of them before.

&gt; Tools/Scripts/webkitpy/common/version_name_map.py:112
&gt; +        if &apos; &apos; in name:
&gt; +            try:
&gt; +                name = &apos;{}{}&apos;.format(name.split(&apos; &apos;)[0], Version(&apos;&apos;.join(name.split(&apos; &apos;)[1:])).major)

I think this will fail for &quot;El Capitan 10.11&quot;.

Probably better to split on space, then pop off the last item for Version parsing, then join the remaining ones with spaces for name parsing.

Oh, but maybe that will never be used because we don&apos;t use version numbers with macOS names, though?  If so, no changes needed here.

&gt; Tools/Scripts/webkitpy/common/version_name_map_unittest.py:42
&gt; +    def test_mac_version_by_name(self):
&gt; +        map = VersionNameMap()
&gt; +        self.assertEqual(map.from_name(&apos;Sierra&apos;), (&apos;mac&apos;, Version(&apos;10.12&apos;)))
&gt; +        self.assertEqual(map.from_name(&apos;sierra&apos;), (&apos;mac&apos;, Version(&apos;10.12&apos;)))
&gt; +        self.assertEqual(map.from_name(&apos;El Capitan&apos;), (&apos;mac&apos;, Version(&apos;10.11&apos;)))
&gt; +        self.assertEqual(map.from_name(&apos;elcapitan&apos;), (&apos;mac&apos;, Version(&apos;10.11&apos;)))

Maybe add unit test:

    self.assertEqual(map.from_name(&apos;el Capitan&apos;), (&apos;mac&apos;, Version(&apos;10.11&apos;)))

Maybe reverse arguments here from (actual, expected) to (expected, actual)?

&gt; Tools/Scripts/webkitpy/common/version_name_map_unittest.py:48
&gt; +    def test_ios_version_by_name(self):
&gt; +        map = VersionNameMap()
&gt; +        self.assertEqual(map.from_name(&apos;iOS 11&apos;), (&apos;ios&apos;, Version(11)))
&gt; +        self.assertEqual(map.from_name(&apos;ios11&apos;), (&apos;ios&apos;, Version(11)))
&gt; +        self.assertEqual(map.from_name(&apos;iOS 11.2&apos;), (&apos;ios&apos;, Version(11)))

Should these work?

    self.assertEqual(map.from_name(&apos;ios11.2&apos;), (&apos;ios&apos;, Version(11)))
    self.assertEqual(map.from_name(&apos;iOS11.2&apos;), (&apos;ios&apos;, Version(11)))

Maybe reverse arguments here from (actual, expected) to (expected, actual)?

&gt; Tools/Scripts/webkitpy/common/version_unittest.py:131
&gt; +    def test_contained_in(self):
&gt; +        self.assertTrue(Version(&apos;11.1&apos;).contained_in(Version(&apos;11&apos;)))
&gt; +        self.assertTrue(Version(&apos;11.1.2&apos;).contained_in(Version(&apos;11.1&apos;)))
&gt; +        self.assertFalse(Version(&apos;11&apos;).contained_in(Version(&apos;11.1&apos;)))

Maybe add more test cases:

self.assertTrue(Version(&apos;11&apos;).contained_in(Version(&apos;11.1.2&apos;)))
self.assertTrue(Version(&apos;11.1&apos;).contained_in(Version(&apos;11.1.2&apos;)))
self.assertTrue(Version(&apos;11&apos;).contained_in(Version(&apos;11&apos;)))
self.assertTrue(Version(&apos;11.1&apos;).contained_in(Version(&apos;11.1&apos;)))
self.assertTrue(Version(&apos;11.1.2&apos;).contained_in(Version(&apos;11.1.2&apos;)))
self.assertTrue(Version(&apos;11&apos;).contained_in(Version(&apos;11.0&apos;)))
self.assertTrue(Version(&apos;11.0&apos;).contained_in(Version(&apos;11&apos;)))
self.assertTrue(Version(&apos;11&apos;).contained_in(Version(&apos;11.0.0&apos;)))
self.assertTrue(Version(&apos;11.0.0&apos;).contained_in(Version(&apos;11&apos;)))
self.assertTrue(Version(&apos;11.1&apos;).contained_in(Version(&apos;11.1.0&apos;)))
self.assertTrue(Version(&apos;11.1.0&apos;).contained_in(Version(&apos;11.1&apos;)))

&gt; Tools/Scripts/webkitpy/common/system/platforminfo.py:65
&gt; +        else:
&gt; +            # Linux and iOS both return conforming version strings.
&gt; +            self.os_version = VersionNameMap.map(self).to_name(Version(platform_module.release()), table=&apos;public&apos;)

Replace the comment with:

        assert self.os_name == &apos;ios&apos; or self.os_name == &apos;linux&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373210</commentid>
    <comment_count>8</comment_count>
      <attachid>327068</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-17 12:28:31 -0800</bug_when>
    <thetext>Comment on attachment 327068
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/common/version_name_map.py:77
&gt;&gt; +            },
&gt; 
&gt; Are these all Ubuntu names?  Haven&apos;t heard of them before.

Yes.  There was actually a FIXME in PlatformInfo._determine_linux_version about this.

&lt;https://wiki.ubuntu.com/Releases&gt;

Some how I missed Artful, Zesty,  Xenial and Trusty, though.

&gt;&gt; Tools/Scripts/webkitpy/common/version_name_map.py:112
&gt;&gt; +                name = &apos;{}{}&apos;.format(name.split(&apos; &apos;)[0], Version(&apos;&apos;.join(name.split(&apos; &apos;)[1:])).major)
&gt; 
&gt; I think this will fail for &quot;El Capitan 10.11&quot;.
&gt; 
&gt; Probably better to split on space, then pop off the last item for Version parsing, then join the remaining ones with spaces for name parsing.
&gt; 
&gt; Oh, but maybe that will never be used because we don&apos;t use version numbers with macOS names, though?  If so, no changes needed here.

It would fail with &apos;El Capitan 10.11&apos;.  And we don&apos;t use version number with macOS.

That being said, I think your suggestion is probably better.  The current code relies off of a naming convention which has historically been true, but may not remain so in the future.

&gt;&gt; Tools/Scripts/webkitpy/common/version_name_map_unittest.py:48
&gt;&gt; +        self.assertEqual(map.from_name(&apos;iOS 11.2&apos;), (&apos;ios&apos;, Version(11)))
&gt; 
&gt; Should these work?
&gt; 
&gt;     self.assertEqual(map.from_name(&apos;ios11.2&apos;), (&apos;ios&apos;, Version(11)))
&gt;     self.assertEqual(map.from_name(&apos;iOS11.2&apos;), (&apos;ios&apos;, Version(11)))
&gt; 
&gt; Maybe reverse arguments here from (actual, expected) to (expected, actual)?

Those will also work.

I&apos;ll add unit tests for them as well.

&gt;&gt; Tools/Scripts/webkitpy/common/system/platforminfo.py:65
&gt;&gt; +            self.os_version = VersionNameMap.map(self).to_name(Version(platform_module.release()), table=&apos;public&apos;)
&gt; 
&gt; Replace the comment with:
&gt; 
&gt;         assert self.os_name == &apos;ios&apos; or self.os_name == &apos;linux&apos;

This code-path is also meant to handle future platforms which conform to this.  I will update the comment to clarify this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373330</commentid>
    <comment_count>9</comment_count>
      <attachid>327249</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-17 15:00:29 -0800</bug_when>
    <thetext>Created attachment 327249
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373548</commentid>
    <comment_count>10</comment_count>
      <attachid>327249</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-18 07:17:06 -0800</bug_when>
    <thetext>Comment on attachment 327249
Patch

Clearing flags on attachment: 327249

Committed r225016: &lt;https://trac.webkit.org/changeset/225016&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373549</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-18 07:17:07 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373661</commentid>
    <comment_count>12</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-11-18 23:52:54 -0800</bug_when>
    <thetext>Hmmm, this breaks Debian Linux environment, which returns Linux version string like &quot;4.13.0-1-amd64&quot;. The last int(&quot;0-1-amd64&quot;) raises ValueError.

$ uname -a
Linux gochiusa 4.13.0-1-amd64 #1 SMP Debian 4.13.10-1 (2017-10-30) x86_64 GNU/Linux</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373662</commentid>
    <comment_count>13</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-11-19 00:01:35 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #12)
&gt; Hmmm, this breaks Debian Linux environment, which returns Linux version
&gt; string like &quot;4.13.0-1-amd64&quot;. The last int(&quot;0-1-amd64&quot;) raises ValueError.
&gt; 
&gt; $ uname -a
&gt; Linux gochiusa 4.13.0-1-amd64 #1 SMP Debian 4.13.10-1 (2017-10-30) x86_64
&gt; GNU/Linux

This also does not work in Ubuntu 16.04.

$ uname -a
Linux sakura-trick 4.8.0-53-generic #56~16.04.1-Ubuntu SMP Tue May 16 01:18:56 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

webkitpy.common.system.logutils: [DEBUG] Debug logging enabled.
Traceback (most recent call last):
  File &quot;Tools/Scripts/webkit-patch&quot;, line 84, in &lt;module&gt;
    main()
  File &quot;Tools/Scripts/webkit-patch&quot;, line 79, in main
    WebKitPatch(os.path.abspath(__file__)).main()
  File &quot;/home/yusukesuzuki/dev/WebKit/Tools/Scripts/webkitpy/tool/main.py&quot;, line 57, in __init__
    Host.__init__(self)
  File &quot;/home/yusukesuzuki/dev/WebKit/Tools/Scripts/webkitpy/common/host.py&quot;, line 48, in __init__
    SystemHost.__init__(self)
  File &quot;/home/yusukesuzuki/dev/WebKit/Tools/Scripts/webkitpy/common/system/systemhost.py&quot;, line 40, in __init__
    self.user = user.User()
  File &quot;/home/yusukesuzuki/dev/WebKit/Tools/Scripts/webkitpy/common/system/user.py&quot;, line 61, in __init__
    self._platforminfo = platforminfo or PlatformInfo(sys, platform, Executive())
  File &quot;/home/yusukesuzuki/dev/WebKit/Tools/Scripts/webkitpy/common/system/platforminfo.py&quot;, line 65, in __init__
    self.os_version = VersionNameMap.map(self).to_name(Version(platform_module.release()), table=&apos;public&apos;)
  File &quot;/home/yusukesuzuki/dev/WebKit/Tools/Scripts/webkitpy/common/version.py&quot;, line 39, in __init__
    self[i] = ver.split(&apos;.&apos;)[i]
  File &quot;/home/yusukesuzuki/dev/WebKit/Tools/Scripts/webkitpy/common/version.py&quot;, line 80, in __setitem__
    self.tiny = int(value)
ValueError: invalid literal for int() with base 10: &apos;0-53-generic&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373665</commentid>
    <comment_count>14</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-11-19 00:19:57 -0800</bug_when>
    <thetext>Reverted r225016 for reason:

Break webkit-patch on Ubuntu and Debian Linux

Committed r225033: &lt;https://trac.webkit.org/changeset/225033&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373666</commentid>
    <comment_count>15</comment_count>
      <attachid>327249</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-11-19 00:30:01 -0800</bug_when>
    <thetext>Comment on attachment 327249
Patch

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

&gt; Tools/Scripts/webkitpy/common/version_name_map.py:83
&gt; +            &apos;linux&apos;: {
&gt; +                &apos;Lucid&apos;: Version(&apos;10.4&apos;),
&gt; +                &apos;Maverick&apos;: Version(&apos;10.10&apos;),
&gt; +                &apos;Natty&apos;: Version(&apos;11.4&apos;),
&gt; +                &apos;Precise&apos;: Version(&apos;12.4&apos;),
&gt; +                &apos;Quantal&apos;: Version(&apos;12.10&apos;),
&gt; +                &apos;Raring&apos;: Version(&apos;13.4&apos;),
&gt; +                &apos;Saucy&apos;: Version(&apos;13.10&apos;),
&gt; +                &apos;Trusty&apos;: Version(&apos;14.4&apos;),
&gt; +                &apos;Utopic&apos;: Version(&apos;14.10&apos;),
&gt; +                &apos;Vivid&apos;: Version(&apos;15.04&apos;),
&gt; +                &apos;Wily&apos;: Version(&apos;15.10&apos;),
&gt; +                &apos;Xenial&apos;: Version(&apos;16.4&apos;),
&gt; +                &apos;Yakkety&apos;: Version(&apos;16.10&apos;),
&gt; +                &apos;Zesty&apos;: Version(&apos;17.4&apos;),
&gt; +                &apos;Artful&apos;: Version(&apos;17.10&apos;),
&gt; +                &apos;Bionic&apos;: Version(&apos;18.04&apos;),
&gt; +            },

Linux has many distributions. And current WebKitGTK+ supports Fedora, Debian and Ubuntu at least.
Listing all the versions of the distributions is not scalable. And making webkit-patch unavailable in unsupported Linux distributions is not good.
I think we should have a fallback Version() which is used if the current environment is not recognized well by this VersionMap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373667</commentid>
    <comment_count>16</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-11-19 00:41:23 -0800</bug_when>
    <thetext>One way to get codename of Linux is using `lsb_release -c` and `lsb_release -i`.

On Ubuntu 16.04 xenial,

$ lsb_release -c
Codename:       xenial
$ lsb_release -i
Distributor ID: Ubuntu

On Debian unstable (sid),

$ lsb_release -c
Codename:       sid

$ lsb_release -i
Distributor ID: Debian

Not sure on Fedora.

I&apos;m not sure what offers version string in Linux in webkitpy right now. I guess we are using `uname`. But it returns the version of Linux kernel, not distribution&apos;s version.

But `lsb_release` would not be installed. 
So anyway, I think we should have a fallback Version if we failed to get version information. Currently, VersionMap to_name returns None if it fails to find an appropriate version. And `assert self.os_version is not None` fires.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373668</commentid>
    <comment_count>17</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-11-19 01:02:17 -0800</bug_when>
    <thetext>It seems that current Linux version is offered by python&apos;s platform module. `platform.release()` returns the version of Linux kernel. So it is not intended one I think.
The closest one is `platform.dist()`, which returns `(&apos;Ubuntu&apos;, &apos;16.04&apos;, &apos;xenial&apos;)` on Ubuntu 16.04 environment. But it is noted that this function is deprecated and removed in python 3.7[1]. So using this is not a good choice.

Additional note is that some Linux channels does not have a specific version number. For example, Debian unstable (sid) and Fedora rawhide are rolling release. It is always `unstable` or `rawhide`. It does not have a version number. If we execute the above `platform.dist()` on Debian unstable, it returns `(&apos;debian&apos;, &apos;buster/sid&apos;, &apos;&apos;)`.
So, we should have a Version which number is unknown.

[1]: https://docs.python.org/3.6/library/platform.html#platform.dist</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373675</commentid>
    <comment_count>18</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-19 06:05:11 -0800</bug_when>
    <thetext>Yeah, it needs to work on any Linux.

Don&apos;t rely on lsb_release; LSB is very dead, and I wouldn&apos;t count on that existing everywhere in the future. If you *really* need to get an OS name/version for some reason, then I would look in /etc/os-release. But we also need to support the case where that file does not exist, or (unlikely) does exist but does not contain name/version fields.

(Hopefully this functionality is not actually used for anything on Linux?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373721</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-11-19 17:53:54 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #18)
&gt; (Hopefully this functionality is not actually used for anything on Linux?)

I also wonder, which is the use case of this for Linux ports?
AFAIK the tooling used by the GTK or WPE ports doesn&apos;t need to know the name or version of the distribution where it runs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374925</commentid>
    <comment_count>20</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-27 08:10:52 -0800</bug_when>
    <thetext>Right now, we&apos;re using version in test expectations for Windows and Mac/iOS.  I don&apos;t think it is actually used in any meaningful way for Linux at the moment, we should be able to get away with the default version (as we&apos;ve been doing) or perhaps even setting the os_version to None if it cannot be determined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374985</commentid>
    <comment_count>21</comment_count>
      <attachid>327644</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-27 10:13:05 -0800</bug_when>
    <thetext>Created attachment 327644
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374986</commentid>
    <comment_count>22</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-27 10:17:52 -0800</bug_when>
    <thetext>attachment 327644 removes Linux versions entirely, since we aren&apos;t using them for anything (nor do I think is it likely we will ever do so).

If you grep for os_version in webkitpy and ignore unit tests, you will find we only use that variable in Windows, Mac and iOS code paths.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374993</commentid>
    <comment_count>23</comment_count>
      <attachid>327644</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-11-27 10:32:02 -0800</bug_when>
    <thetext>Comment on attachment 327644
Patch

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

r=me if all bots pass with this patch.

&gt; Tools/Scripts/webkitpy/common/system/platforminfo.py:62
&gt; -        if self.os_name == &apos;freebsd&apos; or self.os_name == &apos;openbsd&apos; or self.os_name == &apos;netbsd&apos; or self.os_name == &apos;ios&apos;:
&gt; -            self.os_version = platform_module.release()
&gt; +        self.os_version = None
&gt; +
&gt;          if self.os_name.startswith(&apos;mac&apos;):
&gt; -            self.os_version = self._determine_mac_version(Version(platform_module.mac_ver()[0]))
&gt; -        if self.os_name.startswith(&apos;win&apos;):
&gt; -            self.os_version = self._determine_win_version(self._win_version(sys_module))
&gt; +            version = Version(platform_module.mac_ver()[0])
&gt; +        elif self.os_name.startswith(&apos;win&apos;):
&gt; +            version = self._win_version(sys_module)
&gt; +        elif self.os_name == &apos;freebsd&apos;:
&gt; +            version = platform_module.release().split(&apos;-&apos;)[0]

This removes support for &apos;openbsd&apos; and &apos;netbsd&apos;.  Will anyone care?  I suppose it depends on whether anyone is running WebKit tests on those platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375002</commentid>
    <comment_count>24</comment_count>
      <attachid>327644</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-27 10:45:50 -0800</bug_when>
    <thetext>Comment on attachment 327644
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/common/system/platforminfo.py:62
&gt;&gt; +            version = platform_module.release().split(&apos;-&apos;)[0]
&gt; 
&gt; This removes support for &apos;openbsd&apos; and &apos;netbsd&apos;.  Will anyone care?  I suppose it depends on whether anyone is running WebKit tests on those platforms.

Not exactly.

&apos;openbsd&apos; and &apos;netbsd&apos; will use the &apos;else:&apos; codepath here.  They will end up throwing an exception when they aren&apos;t in the VersionNameMap, so perhaps we should give these platforms the same treatment as linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375004</commentid>
    <comment_count>25</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-27 10:48:04 -0800</bug_when>
    <thetext>Yes, give them the same treatment as Linux, please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375017</commentid>
    <comment_count>26</comment_count>
      <attachid>327651</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-27 10:57:06 -0800</bug_when>
    <thetext>Created attachment 327651
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375026</commentid>
    <comment_count>27</comment_count>
      <attachid>327651</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-11-27 11:22:15 -0800</bug_when>
    <thetext>Comment on attachment 327651
Patch

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

&gt; Tools/Scripts/webkitpy/common/system/platforminfo.py:64
&gt; +        elif self.os_name == &apos;freebsd&apos;:
&gt; +            version = platform_module.release().split(&apos;-&apos;)[0]
&gt; +        elif self.os_name == &apos;linux&apos; or self.os_name == &apos;openbsd&apos; or self.os_name == &apos;netbsd&apos;:
&gt; +            version = None

What about FreeBSD?
If anyone is running tests there, then it is likely using the GTK port (AFAIK the only port that builds on that OS), so I think we should give to FreeBSD the same treatment than to Linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375037</commentid>
    <comment_count>28</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-27 11:41:52 -0800</bug_when>
    <thetext>(In reply to Carlos Alberto Lopez Perez from comment #27)
&gt; Comment on attachment 327651 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=327651&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/system/platforminfo.py:64
&gt; &gt; +        elif self.os_name == &apos;freebsd&apos;:
&gt; &gt; +            version = platform_module.release().split(&apos;-&apos;)[0]
&gt; &gt; +        elif self.os_name == &apos;linux&apos; or self.os_name == &apos;openbsd&apos; or self.os_name == &apos;netbsd&apos;:
&gt; &gt; +            version = None
&gt; 
&gt; What about FreeBSD?
&gt; If anyone is running tests there, then it is likely using the GTK port
&gt; (AFAIK the only port that builds on that OS), so I think we should give to
&gt; FreeBSD the same treatment than to Linux.

Looked back at when I had landed this previously.  FreeBSD also needs the same treatment.  I&apos;m a little surprised that GTK EWS didn&apos;t catch this, this the rest of the CI certainly did &lt;https://build.webkit.org/builders/GTK%20Linux%2064-bit%20Release%20%28Tests%29/builds/4275&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375039</commentid>
    <comment_count>29</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-11-27 11:46:22 -0800</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #28)
&gt; Looked back at when I had landed this previously.  FreeBSD also needs the
&gt; same treatment.  I&apos;m a little surprised that GTK EWS didn&apos;t catch this, this
&gt; the rest of the CI certainly did
&gt; &lt;https://build.webkit.org/builders/GTK%20Linux%2064-
&gt; bit%20Release%20%28Tests%29/builds/4275&gt;.

Currently the GTK EWS only tests to build WebKitGTK+, but it doesn&apos;t run any test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375066</commentid>
    <comment_count>30</comment_count>
      <attachid>327660</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-27 12:41:10 -0800</bug_when>
    <thetext>Created attachment 327660
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375076</commentid>
    <comment_count>31</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-27 13:05:20 -0800</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #30)
&gt; Created attachment 327660 [details]
&gt; Patch for landing

Just realized that will break future iOS ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375136</commentid>
    <comment_count>32</comment_count>
      <attachid>327685</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-11-27 14:48:47 -0800</bug_when>
    <thetext>Created attachment 327685
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375166</commentid>
    <comment_count>33</comment_count>
      <attachid>327685</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-27 15:21:32 -0800</bug_when>
    <thetext>Comment on attachment 327685
Patch for landing

Clearing flags on attachment: 327685

Committed r225199: &lt;https://trac.webkit.org/changeset/225199&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375167</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-27 15:21:33 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375277</commentid>
    <comment_count>35</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2017-11-28 00:35:18 -0800</bug_when>
    <thetext>I filed a bug for Cygwin.
 Bug 180069 – webkitpy: PlatformInfo raises AssertionError &quot;assert self.os_version is not None&quot; in Cygwin since Bug 179621</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1379159</commentid>
    <comment_count>36</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-12-07 10:47:16 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1379160</commentid>
    <comment_count>37</comment_count>
      <attachid>328706</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-12-07 10:47:17 -0800</bug_when>
    <thetext>Created attachment 328706
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1379161</commentid>
    <comment_count>38</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-07 10:50:10 -0800</bug_when>
    <thetext>Attachment 328706 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:496:  [RemoveConfigurationsTest.test_remove_line] Too many positional arguments for function call  [pylint/E1121] [5]
Total errors found: 1 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380759</commentid>
    <comment_count>39</comment_count>
      <attachid>329134</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-12-12 12:02:43 -0800</bug_when>
    <thetext>Created attachment 329134
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380762</commentid>
    <comment_count>40</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-12 12:05:44 -0800</bug_when>
    <thetext>Attachment 329134 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:496:  [RemoveConfigurationsTest.test_remove_line] Too many positional arguments for function call  [pylint/E1121] [5]
Total errors found: 1 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380890</commentid>
    <comment_count>41</comment_count>
      <attachid>329134</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-12-12 15:14:54 -0800</bug_when>
    <thetext>Comment on attachment 329134
Patch

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

r=me with a few questions below.

&gt; Tools/Scripts/webkitpy/common/system/platforminfo_unittest.py:81
&gt; -        self.assertNotEquals(info.os_version, &apos;&apos;)
&gt; +        if info.is_mac() or info.is_win():
&gt; +            self.assertNotEquals(info.os_version, None)

Would this make more sense or be easier to read?

    if info.is_mac() or info.is_win():
        self.assertIsNotNone(info.os_version)

&gt; Tools/Scripts/webkitpy/port/base.py:776
&gt; -    def version(self):
&gt; +    def version_name(self):
&gt;          &quot;&quot;&quot;Returns a string indicating the version of a given platform, e.g.
&gt;          &apos;leopard&apos; or &apos;xp&apos;.
&gt;  
&gt;          This is used to help identify the exact port when parsing test
&gt;          expectations, determining search paths, and logging information.&quot;&quot;&quot;
&gt; -        return self._version
&gt; +        if self._os_version is None:
&gt; +            return None
&gt; +        return VersionNameMap.map(self.host.platform).to_name(self._os_version, table=PUBLIC_TABLE)

Can this be @memoized, or will it change during the life of the process?

&gt; Tools/Scripts/webkitpy/port/factory_unittest.py:59
&gt; -        self.assert_port(port_name=&apos;mac&apos;, os_name=&apos;mac&apos;, os_version=&apos;lion&apos;, cls=mac.MacPort)
&gt; -        self.assert_port(port_name=None,  os_name=&apos;mac&apos;, os_version=&apos;lion&apos;, cls=mac.MacPort)
&gt; +        self.assert_port(port_name=&apos;mac&apos;, os_name=&apos;mac&apos;, os_version=Version(10, 7), cls=mac.MacPort)
&gt; +        self.assert_port(port_name=None,  os_name=&apos;mac&apos;, os_version=Version(10, 7), cls=mac.MacPort)

I think &apos;lion&apos; is a bit more descriptive here, but the alternative seems to be this, which is way too verbose:

    VersionNameMap.map().from_name(&apos;lion&apos;)

I guess I wish there was some kind of a (static) helper function like this:

    Version.fromName(&apos;lion&apos;)

This isn&apos;t necessary to fix; just thinking about whether this change would make the tests easier or harder to update (or to simply read) later.

I guess one benefit of doing this would be not having to import PUBLIC_TABLE, VersionNameMap in as many places.  (I&apos;m not sure if this is possible given the current dependencies and use of apple_additions(), though.)

Or maybe this is what you warned me about when you told me about the patch, and I forgot! :)

&gt; Tools/Scripts/webkitpy/port/factory_unittest.py:66
&gt; -        self.assert_port(port_name=&apos;win&apos;, os_name=&apos;win&apos;, os_version=&apos;xp&apos;, cls=win.WinPort)
&gt; -        self.assert_port(port_name=None, os_name=&apos;win&apos;, os_version=&apos;xp&apos;, cls=win.WinPort)
&gt; -        self.assert_port(port_name=None, os_name=&apos;win&apos;, os_version=&apos;xp&apos;, options=self.webkit_options, cls=win.WinPort)
&gt; +        self.assert_port(port_name=&apos;win&apos;, os_name=&apos;win&apos;, os_version=Version(5, 1), cls=win.WinPort)
&gt; +        self.assert_port(port_name=None, os_name=&apos;win&apos;, os_version=Version(5, 1), cls=win.WinPort)
&gt; +        self.assert_port(port_name=None, os_name=&apos;win&apos;, os_version=Version(5, 1), options=self.webkit_options, cls=win.WinPort)

I don&apos;t think I&apos;d know/remember that Windows XP was version 5.1.  (See above. :)

&gt; Tools/Scripts/webkitpy/port/ios.py:41
&gt; +    VERSION_MIN = Version(11)
&gt; +    VERSION_MAX = Version(12)

Is VERSION_MAX correct here?  (I ask because I asked about the mac port below using (10, 14).)

&gt; Tools/Scripts/webkitpy/port/ios_simulator.py:250
&gt; -            if mac_os_version in [&apos;elcapitan&apos;, &apos;yosemite&apos;, &apos;mavericks&apos;]:
&gt; +            if mac_os_version &lt; Version(10, 11):
&gt;                  time.sleep(2.5)

Here&apos;s where I wish Version.fromName(&apos;elcapitan&apos;) existed, too.

Shouldn&apos;t this be change to the following (since the old check was inclusive of El Capitan, but the new check is exclusive of El Capitan):

        if mac_os_version &lt; Version(10, 12):

&gt; Tools/Scripts/webkitpy/port/mac.py:48
&gt; -    VERSION_FALLBACK_ORDER = [&apos;mac-snowleopard&apos;, &apos;mac-lion&apos;, &apos;mac-mountainlion&apos;, &apos;mac-mavericks&apos;, &apos;mac-yosemite&apos;, &apos;mac-elcapitan&apos;, &apos;mac-sierra&apos;, &apos;mac-highsierra&apos;]
&gt; +    VERSION_MIN = Version(10, 6)
&gt; +    VERSION_MAX = Version(10, 14)

Is VERSION_MAX correct here?  The old VERSION_FALLBACK_ORDER stopped at (10, 13).

&gt; Tools/Scripts/webkitpy/port/win.py:-439
&gt; -    VERSION_FALLBACK_ORDER = [&quot;wincairo-&quot; + os_name.lower() for os_name in VersionNameMap.map().names()]

Does removing this mean that folder names on disk have to change, too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380897</commentid>
    <comment_count>42</comment_count>
      <attachid>329134</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-12-12 15:26:16 -0800</bug_when>
    <thetext>Comment on attachment 329134
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/port/factory_unittest.py:59
&gt;&gt; +        self.assert_port(port_name=None,  os_name=&apos;mac&apos;, os_version=Version(10, 7), cls=mac.MacPort)
&gt; 
&gt; I think &apos;lion&apos; is a bit more descriptive here, but the alternative seems to be this, which is way too verbose:
&gt; 
&gt;     VersionNameMap.map().from_name(&apos;lion&apos;)
&gt; 
&gt; I guess I wish there was some kind of a (static) helper function like this:
&gt; 
&gt;     Version.fromName(&apos;lion&apos;)
&gt; 
&gt; This isn&apos;t necessary to fix; just thinking about whether this change would make the tests easier or harder to update (or to simply read) later.
&gt; 
&gt; I guess one benefit of doing this would be not having to import PUBLIC_TABLE, VersionNameMap in as many places.  (I&apos;m not sure if this is possible given the current dependencies and use of apple_additions(), though.)
&gt; 
&gt; Or maybe this is what you warned me about when you told me about the patch, and I forgot! :)

I like this suggestion replace similar calls with Version.from_name().

&gt;&gt; Tools/Scripts/webkitpy/port/win.py:-439
&gt;&gt; -    VERSION_FALLBACK_ORDER = [&quot;wincairo-&quot; + os_name.lower() for os_name in VersionNameMap.map().names()]
&gt; 
&gt; Does removing this mean that folder names on disk have to change, too?

No.

This will adopt the WinPort&apos;s version numbers (because they&apos;re the same) but use the WinCairoPort&apos;s names because we aren&apos;t converting version to name until the default_baseline_search_path(...) below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380963</commentid>
    <comment_count>43</comment_count>
      <attachid>329134</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-12-12 16:59:37 -0800</bug_when>
    <thetext>Comment on attachment 329134
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/port/ios.py:41
&gt;&gt; +    VERSION_MAX = Version(12)
&gt; 
&gt; Is VERSION_MAX correct here?  (I ask because I asked about the mac port below using (10, 14).)

Yes, Mac is a bit special because of the &apos;future&apos; idiom and inherited expectations.

iOS is a bit more straight-forward.

&gt;&gt; Tools/Scripts/webkitpy/port/mac.py:48
&gt;&gt; +    VERSION_MAX = Version(10, 14)
&gt; 
&gt; Is VERSION_MAX correct here?  The old VERSION_FALLBACK_ORDER stopped at (10, 13).

If you notice in constructing the version fallback order, I handle this distinction (by using -1 so 10.14 isn&apos;t in the fallback order).

Essentially, the VERSION_MIN and VERSION_MAX can both be used to calculate the VERSION_FALLBACK_ORDER and used to determine which versions tests can be ran on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380971</commentid>
    <comment_count>44</comment_count>
      <attachid>329181</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-12-12 17:22:11 -0800</bug_when>
    <thetext>Created attachment 329181
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380972</commentid>
    <comment_count>45</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-12-12 17:23:53 -0800</bug_when>
    <thetext>The plan is to land attachment 329181 tomorrow morning (Dec 13th) after it has cleared EWS and I am able to repair any unexpected fallout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380974</commentid>
    <comment_count>46</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-12 17:24:54 -0800</bug_when>
    <thetext>Attachment 329181 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/layout_tests/models/test_expectations_unittest.py:496:  [RemoveConfigurationsTest.test_remove_line] Too many positional arguments for function call  [pylint/E1121] [5]
Total errors found: 1 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381115</commentid>
    <comment_count>47</comment_count>
      <attachid>329219</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-12-13 08:31:02 -0800</bug_when>
    <thetext>Created attachment 329219
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381127</commentid>
    <comment_count>48</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-13 09:15:04 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 329219:

svg/animations/svgtransform-animation-1.html bug 179354 (authors: ap@webkit.org, arv@chromium.org, krit@webkit.org, mark.lam@apple.com, and zimmermann@kde.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381199</commentid>
    <comment_count>49</comment_count>
      <attachid>329219</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-13 11:04:10 -0800</bug_when>
    <thetext>Comment on attachment 329219
Patch for landing

Clearing flags on attachment: 329219

Committed r225856: &lt;https://trac.webkit.org/changeset/225856&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381200</commentid>
    <comment_count>50</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-13 11:04:13 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381378</commentid>
    <comment_count>51</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-12-13 16:40:55 -0800</bug_when>
    <thetext>(In reply to WebKit Commit Bot from comment #49)
&gt; Comment on attachment 329219 [details]
&gt; Patch for landing
&gt; 
&gt; Clearing flags on attachment: 329219
&gt; 
&gt; Committed r225856: &lt;https://trac.webkit.org/changeset/225856&gt;

I got this ugly warning when trying to upload a patch

$ Tools/Scripts/webkit-patch upload -g HEAD --suggest-reviewers --request-commit
Traceback (most recent call last):
  File &quot;Tools/Scripts/check-webkit-style&quot;, line 48, in &lt;module&gt;
    sys.exit(CheckWebKitStyle().main())
  File &quot;/home/clopez/webkit/webkit/Tools/Scripts/webkitpy/style/main.py&quot;, line 155, in main
    patch_checker.check(patch)
  File &quot;/home/clopez/webkit/webkit/Tools/Scripts/webkitpy/style/patchreader.py&quot;, line 84, in check
    self._text_file_reader.do_association_check(fs.getcwd())
  File &quot;/home/clopez/webkit/webkit/Tools/Scripts/webkitpy/style/filereader.py&quot;, line 152, in do_association_check
    self._processor.do_association_check(self._files, cwd, host=host)
  File &quot;/home/clopez/webkit/webkit/Tools/Scripts/webkitpy/style/checker.py&quot;, line 963, in do_association_check
    TestExpectationsChecker.lint_test_expectations(files, self._configuration, cwd, self._increment_error_count, host=host)
  File &quot;/home/clopez/webkit/webkit/Tools/Scripts/webkitpy/style/checkers/test_expectations.py&quot;, line 129, in lint_test_expectations
    for expectations_file in port.expectations_dict().keys():
  File &quot;/home/clopez/webkit/webkit/Tools/Scripts/webkitpy/port/base.py&quot;, line 1128, in expectations_dict
    for path in self.expectations_files():
  File &quot;/home/clopez/webkit/webkit/Tools/Scripts/webkitpy/port/base.py&quot;, line 1160, in expectations_files
    return [self.path_to_generic_test_expectations_file()] + self._port_specific_expectations_files()
  File &quot;/home/clopez/webkit/webkit/Tools/Scripts/webkitpy/port/darwin.py&quot;, line 56, in _port_specific_expectations_files
    return list(reversed([self._filesystem.join(self._webkit_baseline_path(p), &apos;TestExpectations&apos;) for p in self.baseline_search_path()]))
  File &quot;/home/clopez/webkit/webkit/Tools/Scripts/webkitpy/port/base.py&quot;, line 205, in baseline_search_path
    return self.get_option(&apos;additional_platform_directory&apos;, []) + self._compare_baseline() + self.default_baseline_search_path()
  File &quot;/home/clopez/webkit/webkit/Tools/Scripts/webkitpy/common/memoized.py&quot;, line 45, in __call__
    result = self._function(*args)
  File &quot;/home/clopez/webkit/webkit/Tools/Scripts/webkitpy/port/mac.py&quot;, line 73, in default_baseline_search_path
    version_fallback = sorted_versions[sorted_versions.index(self._os_version):-1]
ValueError: &lt;webkitpy.common.version.Version object at 0x7f1b8cea4b50&gt; is not in list
Are you sure you want to continue? [Y/n]: 

Reverting 225856 locally makes this warning go away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381381</commentid>
    <comment_count>52</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-12-13 16:42:32 -0800</bug_when>
    <thetext>(In reply to Carlos Alberto Lopez Perez from comment #51)

&gt; list(reversed([self._filesystem.join(self._webkit_baseline_path(p),
&gt; &apos;TestExpectations&apos;) for p in self.baseline_search_path()]))
&gt;   File &quot;/home/clopez/webkit/webkit/Tools/Scripts/webkitpy/port/base.py&quot;,
&gt; line 205, in baseline_search_path
&gt;     return self.get_option(&apos;additional_platform_directory&apos;, []) +
&gt; self._compare_baseline() + self.default_baseline_search_path()
&gt;   File
&gt; &quot;/home/clopez/webkit/webkit/Tools/Scripts/webkitpy/common/memoized.py&quot;, line
&gt; 45, in __call__
&gt;     result = self._function(*args)
&gt;   File &quot;/home/clopez/webkit/webkit/Tools/Scripts/webkitpy/port/mac.py&quot;, line
&gt; 73, in default_baseline_search_path
&gt;     version_fallback =
&gt; sorted_versions[sorted_versions.index(self._os_version):-1]
&gt; ValueError: &lt;webkitpy.common.version.Version object at 0x7f1b8cea4b50&gt; is
&gt; not in list
&gt; Are you sure you want to continue? [Y/n]: 
&gt; 
&gt; Reverting 225856 locally makes this warning go away.

Also note that I run Linux.. I have no idea why the code ends in &quot;webkitpy/port/mac.py&quot;. Something is wrong with r225856</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381451</commentid>
    <comment_count>53</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-12-13 18:37:24 -0800</bug_when>
    <thetext>(In reply to Carlos Alberto Lopez Perez from comment #52)
&gt; (In reply to Carlos Alberto Lopez Perez from comment #51)
&gt; 
&gt; ...

I’ll fix this tomorrow morning.

The code is being run to check that the test expectations are correct, so it’s correct to be calling into mac code from Linux. But clearly we aren’t instantiating everything the MacPort needs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381616</commentid>
    <comment_count>54</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-12-14 08:13:31 -0800</bug_when>
    <thetext>Committed r225904: &lt;https://trac.webkit.org/changeset/225904&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388290</commentid>
    <comment_count>55</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2018-01-11 10:27:22 -0800</bug_when>
    <thetext>Future baseline search paths for Mac were not being handled correctly: &lt;https://trac.webkit.org/changeset/226786&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327067</attachid>
            <date>2017-11-16 09:06:05 -0800</date>
            <delta_ts>2017-11-16 09:15:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179621-20171116090604.patch</filename>
            <type>text/plain</type>
            <size>23157</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNDkwNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU0IEBACisyMDE3LTExLTE1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogQmV0dGVyIG5hbWUtdmVyc2lvbiBtYXBwaW5nIChQYXJ0
IDEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk2
MjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM1NTg5NTg1PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1hcHBpbmcgdmVyc2lvbiBudW1iZXJzIHRv
IHZlcnNpb24gbmFtZXMgc2hvdWxkIG9jY3VyIGluIGEgY2VudHJhbCBsb2NhdGlvbi4KKyAgICAg
ICAgVGhpcyBoYXMgYSBmZXcgYWR2YW50YWdlcy4gRmlyc3QsIGl0IG1ha2VzIGl0ZXJhdGluZyB0
aHJvdWdoIHZlcnNpb25zIGVhc2llci4KKyAgICAgICAgU2Vjb25kLCBpdCBhbGxvd3MgZm9yIGFw
cGxlX2FkZGl0aW9ucyB0byBkZWZpbmUgYW4gYWRkaXRpb25hbCBzZXQgb2YgbmFtZQorICAgICAg
ICBtYXBwaW5ncy4gTGFzdGx5LCBpdCB3aWxsIGFsbG93LCBpbiBhIGZ1dHVyZSBwYXRjaCwgZm9y
IHVzIHRvIHRyYWNrIHZlcnNpb24KKyAgICAgICAgaW5zdGVhZCBvZiB2ZXJzaW9uIG5hbWUsIG9u
bHkgbWFwcGluZyB2ZXJzaW9uIHRvIHZlcnNpb24gbmFtZSB3aGVuIHJlcXVpcmVkLgorCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAg
ICAgICAgKFBsYXRmb3JtSW5mby5fX2luaXRfXyk6CisgICAgICAgIChQbGF0Zm9ybUluZm8uX2Rl
dGVybWluZV9vc19uYW1lKTogVXNlIFZlcnNpb25OYW1lTWFwIGluc3RlYWQgb2YgY3VzdG9tIGZ1
bmN0aW9ucworICAgICAgICBtYXBwaW5nIHZlcnNpb24gdG8gbmFtZS4KKyAgICAgICAgKFBsYXRm
b3JtSW5mby5fZGV0ZXJtaW5lX2xpbnV4X3ZlcnNpb24pOiBEZWxldGVkLgorICAgICAgICAoUGxh
dGZvcm1JbmZvLl9kZXRlcm1pbmVfbWFjX3ZlcnNpb24pOiBEZWxldGVkLgorICAgICAgICAoUGxh
dGZvcm1JbmZvLl9kZXRlcm1pbmVfd2luX3ZlcnNpb24pOiBEZWxldGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fdW5pdHRlc3QucHk6Cisg
ICAgICAgIChUZXN0UGxhdGZvcm1JbmZvLnRlc3Rfb3NfbmFtZV9hbmRfd3JhcHBlcnMpOgorICAg
ICAgICAoVGVzdFBsYXRmb3JtSW5mby50ZXN0X29zX3ZlcnNpb24pOgorICAgICAgICAoVGVzdFBs
YXRmb3JtSW5mby50ZXN0X2Rpc3BsYXlfbmFtZSk6CisgICAgICAgIChUZXN0UGxhdGZvcm1JbmZv
LnRlc3RfdG90YWxfYnl0ZXNfbWVtb3J5KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi92ZXJzaW9uLnB5OgorICAgICAgICAoVmVyc2lvbi5jb250YWluZWRfaW4pOiBBZGQgcGFy
dGlhbCB2ZXJzaW9uIG1hcHBpbmcuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
dmVyc2lvbl9uYW1lX21hcC5weTogQWRkZWQuCisgICAgICAgIChWZXJzaW9uTmFtZU1hcCk6IEhv
bGRzIGEgbWFwcGluZyBvZiB2ZXJzaW9uIG5hbWUgdG8gdmVyc2lvbiBvYmplY3QuCisgICAgICAg
IChWZXJzaW9uTmFtZU1hcC5tYXApOiBEb24ndCByZS1jcmVhdGUgVmVyc2lvbk5hbWVNYXAgZXZl
cnkgdGltZS4KKyAgICAgICAgKFZlcnNpb25OYW1lTWFwLl9faW5pdF9fKTogSW5pdGlhbGl6ZSBt
YXBwaW5nLCB1c2UgcGxhdGZvcm0gdG8KKyAgICAgICAgZGVmaW5lIHRoZSBkZWZhdWx0IHN5c3Rl
bSBwbGF0Zm9ybS4KKyAgICAgICAgKFZlcnNpb25OYW1lTWFwLl9hdXRvbWFwX3RvX21ham9yX3Zl
cnNpb24pOiBTb21lIG9wZXJhdGluZyBzeXN0ZW1zLCBzdWNoCisgICAgICAgIGFzIGlPUywgaGF2
ZSBhIG5hbWluZyBzY2hlbWUgYmFzZWQgb24gdGhlaXIgbWFqb3IgdmVyc2lvbiBhbmQgb3MgbmFt
ZS4KKyAgICAgICAgQXV0b21hdGljYWxseSBnZW5lcmF0ZSBzdWNoIG1hcHBpbmdzLgorICAgICAg
ICAoVmVyc2lvbk5hbWVNYXAudG9fbmFtZSk6IEdpdmVuIGEgdmVyc2lvbiBvYmplY3QsIHBsYXRm
b3JtIG5hbWUgYW5kCisgICAgICAgIHRhYmxlLCBmaW5kIHRoZSBjbG9zZXN0IG1hdGNoaW5nIHZl
cnNpb24gbmFtZS4KKyAgICAgICAgKFZlcnNpb25OYW1lTWFwLnN0cmlwX25hbWVfZm9ybWF0dGlu
Zyk6IFJlbW92ZSBzcGFjZXMgYW5kIGV4dHJhY3QgdGhlIG1ham9yIHZlcnNpb24sCisgICAgICAg
IGlmIGEgdmVyc2lvbiBzdHJpbmcgaXMgaW5jbHVkZWQgaW4gdGhlIG5hbWUuCisgICAgICAgIChW
ZXJzaW9uTmFtZU1hcC5mcm9tX25hbWUpOiBSZXR1cm4gYW4gb3MgbmFtZSBhbmQgdmVyc2lvbiBn
aXZlbiBhIHZlcnNpb24gbmFtZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92
ZXJzaW9uX25hbWVfbWFwX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFZlcnNpb25NYXBU
ZXN0Q2FzZSk6CisgICAgICAgIChWZXJzaW9uTWFwVGVzdENhc2UudGVzdF9kZWZhdWx0X3N5c3Rl
bV9wbGF0Zm9ybSk6CisgICAgICAgIChWZXJzaW9uTWFwVGVzdENhc2UudGVzdF9tYWNfdmVyc2lv
bl9ieV9uYW1lKToKKyAgICAgICAgKFZlcnNpb25NYXBUZXN0Q2FzZS50ZXN0X2lvc192ZXJzaW9u
X2J5X25hbWUpOgorICAgICAgICAoVmVyc2lvbk1hcFRlc3RDYXNlLnRlc3RfbWFjX25hbWVfYnlf
dmVyc2lvbik6CisgICAgICAgIChWZXJzaW9uTWFwVGVzdENhc2UudGVzdF9pb3NfbmFtZV9ieV92
ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX3VuaXR0
ZXN0LnB5OgorICAgICAgICAoVmVyc2lvblRlc3RDYXNlLnRlc3RfY29udGFpbmVkX2luKToKKwog
MjAxNy0xMS0xNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFdlYlZpZXdzIHNjaGVkdWxlZCBpbiBjdXN0b20gcnVuIGxvb3AgbW9kZXMgc2hv
dWxkIGJlIGFibGUgdG8gZG8gbW9yZSB0aGFuIDUwbXMgb2Ygd29yayBhdCBhIHRpbWUKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb24ucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbi5weQkocmV2aXNpb24gMjI0NzAw
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbi5weQkod29ya2luZyBj
b3B5KQpAQCAtOTIsNiArOTIsMTYgQEAgY2xhc3MgVmVyc2lvbihvYmplY3QpOgogICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcignVmVyc2lvbiBrZXkgbXVzdCBiZSBtYWpvciwgbWlub3IsIHRp
bnksIG1pY3JvIG9yIG5hbm8nKQogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdFeHBlY3RlZCB2
ZXJzaW9uIGtleSB0byBiZSBzdHJpbmcgb3IgaW50ZWdlcicpCiAKKyAgICAjIDExLjIgaXMgY29u
dGFpbmVkIGluIDExLCBidXQgMTEgaXMgbm90IGNvbnRhaW5lZCBpbiAxMS4yCisgICAgZGVmIGNv
bnRhaW5lZF9pbihzZWxmLCB2ZXJzaW9uKToKKyAgICAgICAgbWF0Y2hfZmxhZyA9IEZhbHNlCisg
ICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oc2VsZikpOgorICAgICAgICAgICAgaWYgc2VsZltp
XSAhPSB2ZXJzaW9uW2ldOgorICAgICAgICAgICAgICAgIG1hdGNoX2ZsYWcgPSBUcnVlCisgICAg
ICAgICAgICBpZiBtYXRjaF9mbGFnIGFuZCB2ZXJzaW9uW2ldICE9IDA6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKICAgICBkZWYgX19zdHJfXyhz
ZWxmKToKICAgICAgICAgbGVuX3RvX3ByaW50ID0gMQogICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uo
bGVuKHNlbGYpKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25f
bmFtZV9tYXAucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
dmVyc2lvbl9uYW1lX21hcC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTM0IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisj
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Vi
a2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAorZnJvbSB3ZWJraXRweS5jb21t
b24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgorCisKK2NsYXNzIFZlcnNpb25OYW1lTWFwKG9iamVj
dCk6CisKKyAgICAjIEFsbG93cyBhcHBsZV9hZGRpdGlvbnMgdG8gZGVmaW5lIGEgY3VzdG9tIG1h
cHBpbmcKKyAgICBAc3RhdGljbWV0aG9kCisgICAgQG1lbW9pemVkCisgICAgZGVmIG1hcChwbGF0
Zm9ybT1Ob25lKToKKyAgICAgICAgcmV0dXJuIFZlcnNpb25OYW1lTWFwKHBsYXRmb3JtPXBsYXRm
b3JtKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYXRmb3JtPU5vbmUpOgorICAgICAgICBp
ZiBwbGF0Zm9ybSBpcyBOb25lOgorICAgICAgICAgICAgZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLnN5c3RlbWhvc3QgaW1wb3J0IFN5c3RlbUhvc3QKKyAgICAgICAgICAgIHBsYXRmb3JtID0g
U3lzdGVtSG9zdCgpLnBsYXRmb3JtCisgICAgICAgIHNlbGYubWFwcGluZyA9IHt9CisKKyAgICAg
ICAgc2VsZi5kZWZhdWx0X3N5c3RlbV9wbGF0Zm9ybSA9IHBsYXRmb3JtLm9zX25hbWUKKyAgICAg
ICAgc2VsZi5tYXBwaW5nWydwdWJsaWMnXSA9IHsKKyAgICAgICAgICAgICdtYWMnOiB7CisgICAg
ICAgICAgICAgICAgJ0xlb3BhcmQnOiBWZXJzaW9uKCcxMC41JyksCisgICAgICAgICAgICAgICAg
J1Nub3cgTGVvcGFyZCc6IFZlcnNpb24oJzEwLjYnKSwKKyAgICAgICAgICAgICAgICAnTGlvbic6
IFZlcnNpb24oJzEwLjcnKSwKKyAgICAgICAgICAgICAgICAnTW91bnRhaW4gTGlvbic6IFZlcnNp
b24oJzEwLjgnKSwKKyAgICAgICAgICAgICAgICAnTWF2ZXJpY2tzJzogVmVyc2lvbignMTAuOScp
LAorICAgICAgICAgICAgICAgICdZb3NlbWl0ZSc6IFZlcnNpb24oJzEwLjEwJyksCisgICAgICAg
ICAgICAgICAgJ0VsIENhcGl0YW4nOiBWZXJzaW9uKCcxMC4xMScpLAorICAgICAgICAgICAgICAg
ICdTaWVycmEnOiBWZXJzaW9uKCcxMC4xMicpLAorICAgICAgICAgICAgICAgICdIaWdoIFNpZXJy
YSc6IFZlcnNpb24oJzEwLjEzJyksCisgICAgICAgICAgICAgICAgJ0Z1dHVyZSc6IFZlcnNpb24o
JzEwLjE0JyksCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ2lvcyc6IHNlbGYuX2F1dG9t
YXBfdG9fbWFqb3JfdmVyc2lvbignaU9TJywgbWluaW11bT1WZXJzaW9uKCcxMCcpLCBtYXhpbXVt
PVZlcnNpb24oJzExJykpLAorICAgICAgICAgICAgJ3dpbic6IHsKKyAgICAgICAgICAgICAgICAn
V2luMTAnOiBWZXJzaW9uKCcxMCcpLAorICAgICAgICAgICAgICAgICc4LjEnOiBWZXJzaW9uKCc2
LjMnKSwKKyAgICAgICAgICAgICAgICAnOCc6IFZlcnNpb24oJzYuMicpLAorICAgICAgICAgICAg
ICAgICc3c3AwJzogVmVyc2lvbignNi4xLjc2MDAnKSwKKyAgICAgICAgICAgICAgICAnVmlzdGEn
OiBWZXJzaW9uKCc2JyksCisgICAgICAgICAgICAgICAgJ1hQJzogVmVyc2lvbignNS4xJyksCisg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgJ2xpbnV4JzogeworICAgICAgICAgICAgICAgICdM
dWNpZCc6IFZlcnNpb24oJzEwLjQnKSwKKyAgICAgICAgICAgICAgICAnTWF2ZXJpY2snOiBWZXJz
aW9uKCcxMC4xMCcpLAorICAgICAgICAgICAgICAgICdOYXR0eSc6IFZlcnNpb24oJzExLjQnKSwK
KyAgICAgICAgICAgICAgICAnUHJlY2lzZSc6IFZlcnNpb24oJzEyLjQnKSwKKyAgICAgICAgICAg
ICAgICAnUXVhbnRhbCc6IFZlcnNpb24oJzEyLjEwJyksCisgICAgICAgICAgICAgICAgJ1Jhcmlu
Zyc6IFZlcnNpb24oJzEzLjQnKSwKKyAgICAgICAgICAgICAgICAnU2F1Y3knOiBWZXJzaW9uKCcx
My4xMCcpLAorICAgICAgICAgICAgICAgICdVdG9waWMnOiBWZXJzaW9uKCcxNC4xMCcpLAorICAg
ICAgICAgICAgICAgICdWaXZpZCc6IFZlcnNpb24oJzE1LjA0JyksCisgICAgICAgICAgICAgICAg
J1dpbHknOiBWZXJzaW9uKCcxNS4xMCcpLAorICAgICAgICAgICAgICAgICdZYWtrZXR5JzogVmVy
c2lvbignMTYuMTAnKSwKKyAgICAgICAgICAgICAgICAnQmlvbmljJzogVmVyc2lvbignMTguMDQn
KSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAnZnJlZWJzZCc6IHsKKyAgICAgICAgICAg
ICAgICAnRnJlZSBCU0QgOCc6IFZlcnNpb24oJzgnKSwKKyAgICAgICAgICAgICAgICAnRnJlZSBC
U0QgOSc6IFZlcnNpb24oJzknKSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgQGNs
YXNzbWV0aG9kCisgICAgZGVmIF9hdXRvbWFwX3RvX21ham9yX3ZlcnNpb24oY2xzLCBwcmVmaXgs
IG1pbmltdW09VmVyc2lvbignMScpLCBtYXhpbXVtPVZlcnNpb24oJzEnKSk6CisgICAgICAgIHJl
c3VsdCA9IHt9CisgICAgICAgIGFzc2VydCBtaW5pbXVtIDw9IG1heGltdW0KKyAgICAgICAgZm9y
IGkgaW4geHJhbmdlKChtYXhpbXVtLm1ham9yICsgMSkgLSBtaW5pbXVtLm1ham9yKToKKyAgICAg
ICAgICAgIHJlc3VsdFsne30ge30nLmZvcm1hdChwcmVmaXgsIHN0cihWZXJzaW9uKHN0cihtaW5p
bXVtLm1ham9yICsgaSkpKSldID0gVmVyc2lvbihzdHIobWluaW11bS5tYWpvciArIGkpKQorICAg
ICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgdG9fbmFtZShzZWxmLCB2ZXJzaW9uLCBwbGF0
Zm9ybT1Ob25lLCB0YWJsZT0ncHVibGljJyk6CisgICAgICAgIHBsYXRmb3JtID0gc2VsZi5kZWZh
dWx0X3N5c3RlbV9wbGF0Zm9ybSBpZiBwbGF0Zm9ybSBpcyBOb25lIGVsc2UgcGxhdGZvcm0KKyAg
ICAgICAgYXNzZXJ0IHRhYmxlIGluIHNlbGYubWFwcGluZworICAgICAgICBhc3NlcnQgcGxhdGZv
cm0gaW4gc2VsZi5tYXBwaW5nW3RhYmxlXQorICAgICAgICBjbG9zZXN0X21hdGNoID0gKE5vbmUs
IE5vbmUpCisgICAgICAgIHZlcnNpb24gPSBWZXJzaW9uKHZlcnNpb24pCisgICAgICAgIGZvciBv
c19uYW1lLCBvc192ZXJzaW9uIGluIHNlbGYubWFwcGluZ1t0YWJsZV1bcGxhdGZvcm1dLml0ZXJp
dGVtcygpOgorICAgICAgICAgICAgaWYgdmVyc2lvbiA9PSBvc192ZXJzaW9uOgorICAgICAgICAg
ICAgICAgIHJldHVybiBvc19uYW1lCisgICAgICAgICAgICBlbGlmIHZlcnNpb24uY29udGFpbmVk
X2luKG9zX3ZlcnNpb24pOgorICAgICAgICAgICAgICAgIGlmIGNsb3Nlc3RfbWF0Y2hbMV0gYW5k
IGNsb3Nlc3RfbWF0Y2hbMV0uY29udGFpbmVkX2luKG9zX3ZlcnNpb24pOgorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGNsb3Nlc3RfbWF0Y2ggPSAob3NfbmFt
ZSwgb3NfdmVyc2lvbikKKyAgICAgICAgcmV0dXJuIGNsb3Nlc3RfbWF0Y2hbMF0KKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgc3RyaXBfbmFtZV9mb3JtYXR0aW5nKG5hbWUpOgorICAgICAg
ICAjIDxPUz4gbWFqb3IubWlub3IudGlueSBzaG91bGQgbWFwIHRvIDxPUz4gbWFqb3IKKyAgICAg
ICAgaWYgJyAnIGluIG5hbWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmFt
ZSA9ICd7fXt9Jy5mb3JtYXQobmFtZS5zcGxpdCgnICcpWzBdLCBWZXJzaW9uKCcnLmpvaW4obmFt
ZS5zcGxpdCgnICcpWzE6XSkpLm1ham9yKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6
CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgU3RyaXAgb3V0IGFueSBzcGFjZXMs
IG1ha2UgZXZlcnl0aGluZyBsb3dlci1jYXNlCisgICAgICAgIHJlc3VsdCA9IG5hbWUucmVwbGFj
ZSgnICcsICcnKS5sb3dlcigpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBmcm9t
X25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgICMgRXhhY3QgbWF0Y2gKKyAgICAgICAgZm9yIF8s
IG1hcCBpbiBzZWxmLm1hcHBpbmcuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmb3Igb3NfbmFt
ZSwgb3NfbWFwIGluIG1hcC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lIGlu
IG9zX21hcDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvc19uYW1lLCBvc19tYXBbbmFt
ZV0pCisKKyAgICAgICAgIyBJdCdzIG5vdCBhbiBleGFjdCBtYXRjaCwgbGV0J3MgdHJ5IHVuaWZ5
aW5nIGZvcm1hdHRpbmcKKyAgICAgICAgdW5mb3JtYXR0ZWQgPSBzZWxmLnN0cmlwX25hbWVfZm9y
bWF0dGluZyhuYW1lKQorICAgICAgICBmb3IgXywgbWFwIGluIHNlbGYubWFwcGluZy5pdGVyaXRl
bXMoKToKKyAgICAgICAgICAgIGZvciBvc19uYW1lLCBvc19tYXAgaW4gbWFwLml0ZXJpdGVtcygp
OgorICAgICAgICAgICAgICAgIGZvciB2ZXJzaW9uX25hbWUsIHZlcnNpb24gaW4gb3NfbWFwLml0
ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnN0cmlwX25hbWVfZm9ybWF0
dGluZyh2ZXJzaW9uX25hbWUpID09IHVuZm9ybWF0dGVkOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIChvc19uYW1lLCB2ZXJzaW9uKQorICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUp
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwX3Vu
aXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Zl
cnNpb25fbmFtZV9tYXBfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl9uYW1lX21hcF91bml0dGVzdC5weQkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYwIEBACisjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisj
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lz
dGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBp
bXBvcnQgVmVyc2lvbgorZnJvbSB2ZXJzaW9uX25hbWVfbWFwIGltcG9ydCBWZXJzaW9uTmFtZU1h
cAorCisKK2NsYXNzIFZlcnNpb25NYXBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAg
ICBkZWYgdGVzdF9kZWZhdWx0X3N5c3RlbV9wbGF0Zm9ybShzZWxmKToKKyAgICAgICAgaG9zdCA9
IFN5c3RlbUhvc3QoKQorICAgICAgICBtYXAgPSBWZXJzaW9uTmFtZU1hcChwbGF0Zm9ybT1ob3N0
LnBsYXRmb3JtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcC5kZWZhdWx0X3N5c3RlbV9w
bGF0Zm9ybSwgaG9zdC5wbGF0Zm9ybS5vc19uYW1lKQorCisgICAgZGVmIHRlc3RfbWFjX3ZlcnNp
b25fYnlfbmFtZShzZWxmKToKKyAgICAgICAgbWFwID0gVmVyc2lvbk5hbWVNYXAoKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKG1hcC5mcm9tX25hbWUoJ1NpZXJyYScpLCAoJ21hYycsIFZlcnNp
b24oJzEwLjEyJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcC5mcm9tX25hbWUoJ3Np
ZXJyYScpLCAoJ21hYycsIFZlcnNpb24oJzEwLjEyJykpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKG1hcC5mcm9tX25hbWUoJ0VsIENhcGl0YW4nKSwgKCdtYWMnLCBWZXJzaW9uKCcxMC4xMScp
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXAuZnJvbV9uYW1lKCdlbGNhcGl0YW4nKSwg
KCdtYWMnLCBWZXJzaW9uKCcxMC4xMScpKSkKKworICAgIGRlZiB0ZXN0X2lvc192ZXJzaW9uX2J5
X25hbWUoc2VsZik6CisgICAgICAgIG1hcCA9IFZlcnNpb25OYW1lTWFwKCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChtYXAuZnJvbV9uYW1lKCdpT1MgMTEnKSwgKCdpb3MnLCBWZXJzaW9uKDEx
KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwLmZyb21fbmFtZSgnaW9zMTEnKSwgKCdp
b3MnLCBWZXJzaW9uKDExKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwLmZyb21fbmFt
ZSgnaU9TIDExLjInKSwgKCdpb3MnLCBWZXJzaW9uKDExKSkpCisKKyAgICBkZWYgdGVzdF9tYWNf
bmFtZV9ieV92ZXJzaW9uKHNlbGYpOgorICAgICAgICBtYXAgPSBWZXJzaW9uTmFtZU1hcCgpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1NpZXJyYScsIG1hcC50b19uYW1lKHZlcnNpb249VmVy
c2lvbignMTAuMTInKSwgcGxhdGZvcm09J21hYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCdFbCBDYXBpdGFuJywgbWFwLnRvX25hbWUodmVyc2lvbj1WZXJzaW9uKCcxMC4xMScpLCBwbGF0
Zm9ybT0nbWFjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0VsIENhcGl0YW4nLCBtYXAu
dG9fbmFtZSh2ZXJzaW9uPVZlcnNpb24oJzEwLjExLjMnKSwgcGxhdGZvcm09J21hYycpKQorCisg
ICAgZGVmIHRlc3RfaW9zX25hbWVfYnlfdmVyc2lvbihzZWxmKToKKyAgICAgICAgbWFwID0gVmVy
c2lvbk5hbWVNYXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdpT1MgMTEnLCBtYXAudG9f
bmFtZSh2ZXJzaW9uPVZlcnNpb24oJzExJyksIHBsYXRmb3JtPSdpb3MnKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnaU9TIDEwJywgbWFwLnRvX25hbWUodmVyc2lvbj1WZXJzaW9uKCcxMCcp
LCBwbGF0Zm9ybT0naW9zJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2lPUyAxMCcsIG1h
cC50b19uYW1lKHZlcnNpb249VmVyc2lvbignMTAuMycpLCBwbGF0Zm9ybT0naW9zJykpCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRlc3Qu
cHkJKHJldmlzaW9uIDIyNDcwMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Zl
cnNpb25fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw2ICsxMjUsMTEgQEAgY2xh
c3MgVmVyc2lvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHN0cihWZXJzaW9uKCcxLjInKSksICcxLjInKQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHN0cihWZXJzaW9uKCcwLjAuMycpKSwgJzAuMC4zJykKIAorICAgIGRlZiB0ZXN0X2NvbnRh
aW5lZF9pbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFZlcnNpb24oJzExLjEnKS5j
b250YWluZWRfaW4oVmVyc2lvbignMTEnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShWZXJz
aW9uKCcxMS4xLjInKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEuMScpKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShWZXJzaW9uKCcxMScpLmNvbnRhaW5lZF9pbihWZXJzaW9uKCcxMS4xJykp
KQorCiAgICAgZGVmIHRlc3RfY29tcGFyZV92ZXJzaW9ucyhzZWxmKToKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChWZXJzaW9uKCcxLjIuMycpLCBWZXJzaW9uKCcxLjIuMycpKQogICAgICAgICBz
ZWxmLmFzc2VydEdyZWF0ZXIoVmVyc2lvbignMS4yLjQnKSwgVmVyc2lvbignMS4yLjMnKSkKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRm
b3JtaW5mby5weQkocmV2aXNpb24gMjI0NzAwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEs
NyBAQCBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIAogZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lv
biBpbXBvcnQgVmVyc2lvbgorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbl9uYW1lX21hcCBp
bXBvcnQgVmVyc2lvbk5hbWVNYXAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRp
dmUgaW1wb3J0IEV4ZWN1dGl2ZQogCiAKQEAgLTUxLDE0ICs1MiwyMSBAQCBjbGFzcyBQbGF0Zm9y
bUluZm8ob2JqZWN0KToKICAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0gZXhlY3V0aXZlCiAgICAg
ICAgIHNlbGYuX3BsYXRmb3JtX21vZHVsZSA9IHBsYXRmb3JtX21vZHVsZQogICAgICAgICBzZWxm
Lm9zX25hbWUgPSBzZWxmLl9kZXRlcm1pbmVfb3NfbmFtZShzeXNfbW9kdWxlLnBsYXRmb3JtKQot
ICAgICAgICBpZiBzZWxmLm9zX25hbWUgPT0gJ2xpbnV4JzoKLSAgICAgICAgICAgIHNlbGYub3Nf
dmVyc2lvbiA9IHNlbGYuX2RldGVybWluZV9saW51eF92ZXJzaW9uKCkKLSAgICAgICAgaWYgc2Vs
Zi5vc19uYW1lID09ICdmcmVlYnNkJyBvciBzZWxmLm9zX25hbWUgPT0gJ29wZW5ic2QnIG9yIHNl
bGYub3NfbmFtZSA9PSAnbmV0YnNkJyBvciBzZWxmLm9zX25hbWUgPT0gJ2lvcyc6Ci0gICAgICAg
ICAgICBzZWxmLm9zX3ZlcnNpb24gPSBwbGF0Zm9ybV9tb2R1bGUucmVsZWFzZSgpCisgICAgICAg
IHNlbGYub3NfdmVyc2lvbiA9IE5vbmUKKwogICAgICAgICBpZiBzZWxmLm9zX25hbWUuc3RhcnRz
d2l0aCgnbWFjJyk6Ci0gICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBzZWxmLl9kZXRlcm1p
bmVfbWFjX3ZlcnNpb24oVmVyc2lvbihwbGF0Zm9ybV9tb2R1bGUubWFjX3ZlcigpWzBdKSkKLSAg
ICAgICAgaWYgc2VsZi5vc19uYW1lLnN0YXJ0c3dpdGgoJ3dpbicpOgotICAgICAgICAgICAgc2Vs
Zi5vc192ZXJzaW9uID0gc2VsZi5fZGV0ZXJtaW5lX3dpbl92ZXJzaW9uKHNlbGYuX3dpbl92ZXJz
aW9uKHN5c19tb2R1bGUpKQorICAgICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gVmVyc2lvbk5h
bWVNYXAubWFwKHNlbGYpLnRvX25hbWUoVmVyc2lvbihwbGF0Zm9ybV9tb2R1bGUubWFjX3Zlcigp
WzBdKSwgdGFibGU9J3B1YmxpYycpCisgICAgICAgIGVsaWYgc2VsZi5vc19uYW1lLnN0YXJ0c3dp
dGgoJ3dpbicpOgorICAgICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gVmVyc2lvbk5hbWVNYXAu
bWFwKHNlbGYpLnRvX25hbWUoc2VsZi5fd2luX3ZlcnNpb24oc3lzX21vZHVsZSksIHRhYmxlPSdw
dWJsaWMnKQorICAgICAgICBlbGlmIHNlbGYub3NfbmFtZSA9PSAnZnJlZWJzZCc6CisgICAgICAg
ICAgICBzZWxmLm9zX3ZlcnNpb24gPSBWZXJzaW9uTmFtZU1hcC5tYXAoc2VsZikudG9fbmFtZShw
bGF0Zm9ybV9tb2R1bGUucmVsZWFzZSgpLnNwbGl0KCctJylbMF0sIHRhYmxlPSdwdWJsaWMnKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBMaW51eCBhbmQgaU9TIGJvdGggcmV0dXJuIGNv
bmZvcm1pbmcgdmVyc2lvbiBzdHJpbmdzLgorICAgICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0g
VmVyc2lvbk5hbWVNYXAubWFwKHNlbGYpLnRvX25hbWUoVmVyc2lvbihwbGF0Zm9ybV9tb2R1bGUu
cmVsZWFzZSgpKSwgdGFibGU9J3B1YmxpYycpCisKKyAgICAgICAgYXNzZXJ0IHNlbGYub3NfdmVy
c2lvbiBpcyBub3QgTm9uZQorICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBzZWxmLm9zX3ZlcnNp
b24ubG93ZXIoKS5yZXBsYWNlKCcgJywgJycpCisKICAgICAgICAgc2VsZi5faXNfY3lnd2luID0g
c3lzX21vZHVsZS5wbGF0Zm9ybSA9PSAnY3lnd2luJwogCiAgICAgZGVmIGlzX21hYyhzZWxmKToK
QEAgLTE1OSwzOCArMTY3LDYgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgICAg
ICAgICByZXR1cm4gJ2hhaWt1JwogICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigndW5yZWNv
Z25pemVkIHBsYXRmb3JtIHN0cmluZyAiJXMiJyAlIHN5c19wbGF0Zm9ybSkKIAotICAgIGRlZiBf
ZGV0ZXJtaW5lX21hY192ZXJzaW9uKHNlbGYsIG1hY192ZXJzaW9uKToKLSAgICAgICAgdmVyc2lv
bl9zdHJpbmdzID0gewotICAgICAgICAgICAgNTogJ2xlb3BhcmQnLAotICAgICAgICAgICAgNjog
J3Nub3dsZW9wYXJkJywKLSAgICAgICAgICAgIDc6ICdsaW9uJywKLSAgICAgICAgICAgIDg6ICdt
b3VudGFpbmxpb24nLAotICAgICAgICAgICAgOTogJ21hdmVyaWNrcycsCi0gICAgICAgICAgICAx
MDogJ3lvc2VtaXRlJywKLSAgICAgICAgICAgIDExOiAnZWxjYXBpdGFuJywKLSAgICAgICAgICAg
IDEyOiAnc2llcnJhJywKLSAgICAgICAgICAgIDEzOiAnaGlnaHNpZXJyYScsCi0gICAgICAgIH0K
LSAgICAgICAgYXNzZXJ0IG1hY192ZXJzaW9uLm1pbm9yID49IG1pbih2ZXJzaW9uX3N0cmluZ3Mu
a2V5cygpKQotICAgICAgICByZXR1cm4gdmVyc2lvbl9zdHJpbmdzLmdldChtYWNfdmVyc2lvbi5t
aW5vciwgJ2Z1dHVyZScpCi0KLSAgICBkZWYgX2RldGVybWluZV9saW51eF92ZXJzaW9uKHNlbGYp
OgotICAgICAgICAjIEZJWE1FOiB3ZSBpZ25vcmUgd2hhdGV2ZXIgdGhlIHJlYWwgdmVyc2lvbiBp
cyBhbmQgcHJldGVuZCBpdCdzIGx1Y2lkIGZvciBub3cuCi0gICAgICAgIHJldHVybiAnbHVjaWQn
Ci0KLSAgICBkZWYgX2RldGVybWluZV93aW5fdmVyc2lvbihzZWxmLCB3aW5fdmVyc2lvbik6Ci0g
ICAgICAgIGlmIHdpbl92ZXJzaW9uLm1ham9yID09IDAgYW5kIHdpbl92ZXJzaW9uLm1pbm9yID09
IDA6Ci0gICAgICAgICAgICBpZiB3aW5fdmVyc2lvblsyXSA+IDEwMDAwOgotICAgICAgICAgICAg
ICAgIHJldHVybiAnd2luMTAnCi0gICAgICAgIGlmIHdpbl92ZXJzaW9uID09IFZlcnNpb24oWzYs
IDEsIDc2MDBdKToKLSAgICAgICAgICAgIHJldHVybiAnN3NwMCcKLSAgICAgICAgaWYgd2luX3Zl
cnNpb24ubWFqb3IgPT0gNiBhbmQgd2luX3ZlcnNpb24ubWlub3IgPT0gMDoKLSAgICAgICAgICAg
IHJldHVybiAndmlzdGEnCi0gICAgICAgIGlmIHdpbl92ZXJzaW9uLm1ham9yID09IDUgYW5kIHdp
bl92ZXJzaW9uLm1pbm9yID09IDE6Ci0gICAgICAgICAgICByZXR1cm4gJ3hwJwotICAgICAgICBh
c3NlcnQgd2luX3ZlcnNpb25bMF0gPiA2IG9yIHdpbl92ZXJzaW9uWzFdID49IDEsICdVbnJlY29n
bml6ZWQgV2luZG93cyB2ZXJzaW9uOiAie30iJy5mb3JtYXQod2luX3ZlcnNpb24pCi0gICAgICAg
IHJldHVybiAnZnV0dXJlJwotCiAgICAgZGVmIF93aW5fdmVyc2lvbihzZWxmLCBzeXNfbW9kdWxl
KToKICAgICAgICAgaWYgaGFzYXR0cihzeXNfbW9kdWxlLCAnZ2V0d2luZG93c3ZlcnNpb24nKToK
ICAgICAgICAgICAgIHJldHVybiBWZXJzaW9uKHN5c19tb2R1bGUuZ2V0d2luZG93c3ZlcnNpb24o
KVswOjNdKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRm
b3JtaW5mb191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMjQ3MDAp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3Vu
aXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC04NywxMyArODcsMTMgQEAgY2xhc3MgVGVzdFBs
YXRmb3JtSW5mbyh1bml0dGVzdC5UZXN0Q2FzZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05v
bmUoaW5mby50b3RhbF9ieXRlc19tZW1vcnkoKSkKIAogICAgIGRlZiB0ZXN0X29zX25hbWVfYW5k
X3dyYXBwZXJzKHNlbGYpOgotICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMo
J2xpbnV4MicpKQorICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4
MicpLCBmYWtlX3BsYXRmb3JtKCcnLCAnMTAuNCcpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUo
aW5mby5pc19saW51eCgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluZm8uaXNfbWFjKCkp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5pc193aW4oKSkKICAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShpbmZvLmlzX2ZyZWVic2QoKSkKIAotICAgICAgICBpbmZvID0gc2VsZi5tYWtl
X2luZm8oZmFrZV9zeXMoJ2xpbnV4MycpKQorICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8o
ZmFrZV9zeXMoJ2xpbnV4MycpLCBmYWtlX3BsYXRmb3JtKCcnLCAnMTAuNCcpKQogICAgICAgICBz
ZWxmLmFzc2VydFRydWUoaW5mby5pc19saW51eCgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KGluZm8uaXNfbWFjKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5pc193aW4oKSkK
QEAgLTEyMCw3ICsxMjAsNyBAQCBjbGFzcyBUZXN0UGxhdGZvcm1JbmZvKHVuaXR0ZXN0LlRlc3RD
YXNlCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmZvLmlzX3dpbigpKQogICAgICAgICBzZWxm
LmFzc2VydEZhbHNlKGluZm8uaXNfZnJlZWJzZCgpKQogCi0gICAgICAgIGluZm8gPSBzZWxmLm1h
a2VfaW5mbyhmYWtlX3N5cygnZnJlZWJzZDgnKSkKKyAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9p
bmZvKGZha2Vfc3lzKCdmcmVlYnNkOCcpLCBmYWtlX3BsYXRmb3JtKCcnLCAnOC4zLVBSRVJFTEVB
U0UnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvLm9zX25hbWUsICdmcmVlYnNkJykK
ICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbmZvLmlzX2xpbnV4KCkpCiAgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UoaW5mby5pc19tYWMoKSkKQEAgLTE0MiwxOSArMTQyLDIwIEBAIGNsYXNzIFRl
c3RQbGF0Zm9ybUluZm8odW5pdHRlc3QuVGVzdENhc2UKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZGFyd2luJyksIGZha2VfcGxhdGZvcm0oJzEwLjEz
LjAnKSkub3NfdmVyc2lvbiwgJ2hpZ2hzaWVycmEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdkYXJ3aW4nKSwgZmFrZV9wbGF0Zm9ybSgnMTAuMTQu
MCcpKS5vc192ZXJzaW9uLCAnZnV0dXJlJykKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNl
bGYubWFrZV9pbmZvKGZha2Vfc3lzKCdsaW51eDInKSkub3NfdmVyc2lvbiwgJ2x1Y2lkJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnbGludXgyJyks
IGZha2VfcGxhdGZvcm0oJycsICcxMC40JykpLm9zX3ZlcnNpb24sICdsdWNpZCcpCiAKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZnJlZWJzZDgnKSwg
ZmFrZV9wbGF0Zm9ybSgnJywgJzguMy1QUkVSRUxFQVNFJykpLm9zX3ZlcnNpb24sICc4LjMtUFJF
UkVMRUFTRScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9z
eXMoJ2ZyZWVic2Q5JyksIGZha2VfcGxhdGZvcm0oJycsICc5LjAtUkVMRUFTRScpKS5vc192ZXJz
aW9uLCAnOS4wLVJFTEVBU0UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9p
bmZvKGZha2Vfc3lzKCdmcmVlYnNkOCcpLCBmYWtlX3BsYXRmb3JtKCcnLCAnOC4zLVBSRVJFTEVB
U0UnKSkub3NfdmVyc2lvbiwgJ2ZyZWVic2Q4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZnJlZWJzZDknKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzku
MC1SRUxFQVNFJykpLm9zX3ZlcnNpb24sICdmcmVlYnNkOScpCiAKICAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHNlbGYubWFrZV9pbmZvLCBmYWtlX3N5cygnd2luMzIn
LCB0dXBsZShbNSwgMCwgMTIzNF0pKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1h
a2VfaW5mbyhmYWtlX3N5cygnd2luMzInLCB0dXBsZShbNiwgMiwgMTIzNF0pKSkub3NfdmVyc2lv
biwgJ2Z1dHVyZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFr
ZV9zeXMoJ3dpbjMyJywgdHVwbGUoWzEwLCAwLCAxNDM5M10pKSkub3NfdmVyc2lvbiwgJ3dpbjEw
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnd2lu
MzInLCB0dXBsZShbNiwgMiwgMTIzNF0pKSkub3NfdmVyc2lvbiwgJzgnKQogICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3aW4zMicsIHR1cGxlKFs2LCAx
LCA3NjAwXSkpKS5vc192ZXJzaW9uLCAnN3NwMCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMyJywgdHVwbGUoWzYsIDAsIDEyMzRdKSkpLm9z
X3ZlcnNpb24sICd2aXN0YScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2lu
Zm8oZmFrZV9zeXMoJ3dpbjMyJywgdHVwbGUoWzUsIDEsIDEyMzRdKSkpLm9zX3ZlcnNpb24sICd4
cCcpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHNlbGYubWFr
ZV9pbmZvLCBmYWtlX3N5cygnd2luMzInKSwgZXhlY3V0aXZlPWZha2VfZXhlY3V0aXZlKCc1LjAu
MTIzNCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lz
KCdjeWd3aW4nKSwgZXhlY3V0aXZlPWZha2VfZXhlY3V0aXZlKCc2LjIuMTIzNCcpKS5vc192ZXJz
aW9uLCAnZnV0dXJlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhm
YWtlX3N5cygnY3lnd2luJyksIGV4ZWN1dGl2ZT1mYWtlX2V4ZWN1dGl2ZSgnNi4yLjEyMzQnKSku
b3NfdmVyc2lvbiwgJzgnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZv
KGZha2Vfc3lzKCdjeWd3aW4nKSwgZXhlY3V0aXZlPWZha2VfZXhlY3V0aXZlKCc2LjEuNzYwMCcp
KS5vc192ZXJzaW9uLCAnN3NwMCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtl
X2luZm8oZmFrZV9zeXMoJ2N5Z3dpbicpLCBleGVjdXRpdmU9ZmFrZV9leGVjdXRpdmUoJzYuMC4x
MjM0JykpLm9zX3ZlcnNpb24sICd2aXN0YScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vs
Zi5tYWtlX2luZm8oZmFrZV9zeXMoJ2N5Z3dpbicpLCBleGVjdXRpdmU9ZmFrZV9leGVjdXRpdmUo
JzUuMS4xMjM0JykpLm9zX3ZlcnNpb24sICd4cCcpCkBAIC0xNjYsMTAgKzE2NywxMCBAQCBjbGFz
cyBUZXN0UGxhdGZvcm1JbmZvKHVuaXR0ZXN0LlRlc3RDYXNlCiAgICAgICAgIGluZm8gPSBzZWxm
Lm1ha2VfaW5mbyhmYWtlX3N5cygnd2luMzInLCB0dXBsZShbNiwgMSwgNzYwMF0pKSkKICAgICAg
ICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoaW5mby5kaXNwbGF5X25hbWUoKSwgJycpCiAKLSAgICAg
ICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdsaW51eDInKSkKKyAgICAgICAgaW5m
byA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdsaW51eDInKSwgZmFrZV9wbGF0Zm9ybSgnJywg
JzEwLjQnKSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoaW5mby5kaXNwbGF5X25hbWUo
KSwgJycpCiAKLSAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdmcmVlYnNk
OScpKQorICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2ZyZWVic2Q5Jyks
IGZha2VfcGxhdGZvcm0oJycsICc5LjAtUkVMRUFTRScpKQogICAgICAgICBzZWxmLmFzc2VydE5v
dEVxdWFscyhpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykKIAogICAgIGRlZiB0ZXN0X3RvdGFsX2J5
dGVzX21lbW9yeShzZWxmKToKQEAgLTE3OSw4ICsxODAsOCBAQCBjbGFzcyBUZXN0UGxhdGZvcm1J
bmZvKHVuaXR0ZXN0LlRlc3RDYXNlCiAgICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtl
X3N5cygnd2luMzInLCB0dXBsZShbNiwgMSwgNzYwMF0pKSkKICAgICAgICAgc2VsZi5hc3NlcnRJ
c05vbmUoaW5mby50b3RhbF9ieXRlc19tZW1vcnkoKSkKIAotICAgICAgICBpbmZvID0gc2VsZi5t
YWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4MicpKQorICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2lu
Zm8oZmFrZV9zeXMoJ2xpbnV4MicpLCBmYWtlX3BsYXRmb3JtKCcnLCAnMTAuNCcpKQogICAgICAg
ICBzZWxmLmFzc2VydElzTm9uZShpbmZvLnRvdGFsX2J5dGVzX21lbW9yeSgpKQogCi0gICAgICAg
IGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZnJlZWJzZDknKSkKKyAgICAgICAgaW5m
byA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdmcmVlYnNkOScpLCBmYWtlX3BsYXRmb3JtKCcn
LCAnOS4wLVJFTEVBU0UnKSkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW5mby50b3RhbF9i
eXRlc19tZW1vcnkoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327068</attachid>
            <date>2017-11-16 09:16:00 -0800</date>
            <delta_ts>2017-11-17 15:00:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179621-20171116091600.patch</filename>
            <type>text/plain</type>
            <size>23201</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNDkyMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU0IEBACisyMDE3LTExLTE1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogQmV0dGVyIG5hbWUtdmVyc2lvbiBtYXBwaW5nIChQYXJ0
IDEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk2
MjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM1NTg5NTg1PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1hcHBpbmcgdmVyc2lvbiBudW1iZXJzIHRv
IHZlcnNpb24gbmFtZXMgc2hvdWxkIG9jY3VyIGluIGEgY2VudHJhbCBsb2NhdGlvbi4KKyAgICAg
ICAgVGhpcyBoYXMgYSBmZXcgYWR2YW50YWdlcy4gRmlyc3QsIGl0IG1ha2VzIGl0ZXJhdGluZyB0
aHJvdWdoIHZlcnNpb25zIGVhc2llci4KKyAgICAgICAgU2Vjb25kLCBpdCBhbGxvd3MgZm9yIGFw
cGxlX2FkZGl0aW9ucyB0byBkZWZpbmUgYW4gYWRkaXRpb25hbCBzZXQgb2YgbmFtZQorICAgICAg
ICBtYXBwaW5ncy4gTGFzdGx5LCBpdCB3aWxsIGFsbG93LCBpbiBhIGZ1dHVyZSBwYXRjaCwgZm9y
IHVzIHRvIHRyYWNrIHZlcnNpb24KKyAgICAgICAgaW5zdGVhZCBvZiB2ZXJzaW9uIG5hbWUsIG9u
bHkgbWFwcGluZyB2ZXJzaW9uIHRvIHZlcnNpb24gbmFtZSB3aGVuIHJlcXVpcmVkLgorCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAg
ICAgICAgKFBsYXRmb3JtSW5mby5fX2luaXRfXyk6CisgICAgICAgIChQbGF0Zm9ybUluZm8uX2Rl
dGVybWluZV9vc19uYW1lKTogVXNlIFZlcnNpb25OYW1lTWFwIGluc3RlYWQgb2YgY3VzdG9tIGZ1
bmN0aW9ucworICAgICAgICBtYXBwaW5nIHZlcnNpb24gdG8gbmFtZS4KKyAgICAgICAgKFBsYXRm
b3JtSW5mby5fZGV0ZXJtaW5lX2xpbnV4X3ZlcnNpb24pOiBEZWxldGVkLgorICAgICAgICAoUGxh
dGZvcm1JbmZvLl9kZXRlcm1pbmVfbWFjX3ZlcnNpb24pOiBEZWxldGVkLgorICAgICAgICAoUGxh
dGZvcm1JbmZvLl9kZXRlcm1pbmVfd2luX3ZlcnNpb24pOiBEZWxldGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fdW5pdHRlc3QucHk6Cisg
ICAgICAgIChUZXN0UGxhdGZvcm1JbmZvLnRlc3Rfb3NfbmFtZV9hbmRfd3JhcHBlcnMpOgorICAg
ICAgICAoVGVzdFBsYXRmb3JtSW5mby50ZXN0X29zX3ZlcnNpb24pOgorICAgICAgICAoVGVzdFBs
YXRmb3JtSW5mby50ZXN0X2Rpc3BsYXlfbmFtZSk6CisgICAgICAgIChUZXN0UGxhdGZvcm1JbmZv
LnRlc3RfdG90YWxfYnl0ZXNfbWVtb3J5KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi92ZXJzaW9uLnB5OgorICAgICAgICAoVmVyc2lvbi5jb250YWluZWRfaW4pOiBBZGQgcGFy
dGlhbCB2ZXJzaW9uIG1hcHBpbmcuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
dmVyc2lvbl9uYW1lX21hcC5weTogQWRkZWQuCisgICAgICAgIChWZXJzaW9uTmFtZU1hcCk6IEhv
bGRzIGEgbWFwcGluZyBvZiB2ZXJzaW9uIG5hbWUgdG8gdmVyc2lvbiBvYmplY3QuCisgICAgICAg
IChWZXJzaW9uTmFtZU1hcC5tYXApOiBEb24ndCByZS1jcmVhdGUgVmVyc2lvbk5hbWVNYXAgZXZl
cnkgdGltZS4KKyAgICAgICAgKFZlcnNpb25OYW1lTWFwLl9faW5pdF9fKTogSW5pdGlhbGl6ZSBt
YXBwaW5nLCB1c2UgcGxhdGZvcm0gdG8KKyAgICAgICAgZGVmaW5lIHRoZSBkZWZhdWx0IHN5c3Rl
bSBwbGF0Zm9ybS4KKyAgICAgICAgKFZlcnNpb25OYW1lTWFwLl9hdXRvbWFwX3RvX21ham9yX3Zl
cnNpb24pOiBTb21lIG9wZXJhdGluZyBzeXN0ZW1zLCBzdWNoCisgICAgICAgIGFzIGlPUywgaGF2
ZSBhIG5hbWluZyBzY2hlbWUgYmFzZWQgb24gdGhlaXIgbWFqb3IgdmVyc2lvbiBhbmQgb3MgbmFt
ZS4KKyAgICAgICAgQXV0b21hdGljYWxseSBnZW5lcmF0ZSBzdWNoIG1hcHBpbmdzLgorICAgICAg
ICAoVmVyc2lvbk5hbWVNYXAudG9fbmFtZSk6IEdpdmVuIGEgdmVyc2lvbiBvYmplY3QsIHBsYXRm
b3JtIG5hbWUgYW5kCisgICAgICAgIHRhYmxlLCBmaW5kIHRoZSBjbG9zZXN0IG1hdGNoaW5nIHZl
cnNpb24gbmFtZS4KKyAgICAgICAgKFZlcnNpb25OYW1lTWFwLnN0cmlwX25hbWVfZm9ybWF0dGlu
Zyk6IFJlbW92ZSBzcGFjZXMgYW5kIGV4dHJhY3QgdGhlIG1ham9yIHZlcnNpb24sCisgICAgICAg
IGlmIGEgdmVyc2lvbiBzdHJpbmcgaXMgaW5jbHVkZWQgaW4gdGhlIG5hbWUuCisgICAgICAgIChW
ZXJzaW9uTmFtZU1hcC5mcm9tX25hbWUpOiBSZXR1cm4gYW4gb3MgbmFtZSBhbmQgdmVyc2lvbiBn
aXZlbiBhIHZlcnNpb24gbmFtZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92
ZXJzaW9uX25hbWVfbWFwX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKFZlcnNpb25NYXBU
ZXN0Q2FzZSk6CisgICAgICAgIChWZXJzaW9uTWFwVGVzdENhc2UudGVzdF9kZWZhdWx0X3N5c3Rl
bV9wbGF0Zm9ybSk6CisgICAgICAgIChWZXJzaW9uTWFwVGVzdENhc2UudGVzdF9tYWNfdmVyc2lv
bl9ieV9uYW1lKToKKyAgICAgICAgKFZlcnNpb25NYXBUZXN0Q2FzZS50ZXN0X2lvc192ZXJzaW9u
X2J5X25hbWUpOgorICAgICAgICAoVmVyc2lvbk1hcFRlc3RDYXNlLnRlc3RfbWFjX25hbWVfYnlf
dmVyc2lvbik6CisgICAgICAgIChWZXJzaW9uTWFwVGVzdENhc2UudGVzdF9pb3NfbmFtZV9ieV92
ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX3VuaXR0
ZXN0LnB5OgorICAgICAgICAoVmVyc2lvblRlc3RDYXNlLnRlc3RfY29udGFpbmVkX2luKToKKwog
MjAxNy0xMS0xNiAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgV2luIEVXUyBib3RzIHNob3VsZCByZWJvb3QgYWZ0ZXIgTiB3ZWJraXQtcGF0Y2ggaXRlcmF0
aW9ucy4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb24ucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbi5weQkocmV2
aXNpb24gMjI0OTIwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbi5w
eQkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMTYgQEAgY2xhc3MgVmVyc2lvbihvYmplY3Qp
OgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVmVyc2lvbiBrZXkgbXVzdCBiZSBtYWpv
ciwgbWlub3IsIHRpbnksIG1pY3JvIG9yIG5hbm8nKQogICAgICAgICByYWlzZSBWYWx1ZUVycm9y
KCdFeHBlY3RlZCB2ZXJzaW9uIGtleSB0byBiZSBzdHJpbmcgb3IgaW50ZWdlcicpCiAKKyAgICAj
IDExLjIgaXMgY29udGFpbmVkIGluIDExLCBidXQgMTEgaXMgbm90IGNvbnRhaW5lZCBpbiAxMS4y
CisgICAgZGVmIGNvbnRhaW5lZF9pbihzZWxmLCB2ZXJzaW9uKToKKyAgICAgICAgbWF0Y2hfZmxh
ZyA9IEZhbHNlCisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oc2VsZikpOgorICAgICAgICAg
ICAgaWYgc2VsZltpXSAhPSB2ZXJzaW9uW2ldOgorICAgICAgICAgICAgICAgIG1hdGNoX2ZsYWcg
PSBUcnVlCisgICAgICAgICAgICBpZiBtYXRjaF9mbGFnIGFuZCB2ZXJzaW9uW2ldICE9IDA6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKICAgICBk
ZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgbGVuX3RvX3ByaW50ID0gMQogICAgICAgICBmb3Ig
aSBpbiB4cmFuZ2UobGVuKHNlbGYpKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3ZlcnNpb25fbmFtZV9tYXAucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vdmVyc2lvbl9uYW1lX21hcC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTM0IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAorZnJvbSB3
ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgorCisKK2NsYXNzIFZlcnNpb25O
YW1lTWFwKG9iamVjdCk6CisKKyAgICAjIEFsbG93cyBhcHBsZV9hZGRpdGlvbnMgdG8gZGVmaW5l
IGEgY3VzdG9tIG1hcHBpbmcKKyAgICBAc3RhdGljbWV0aG9kCisgICAgQG1lbW9pemVkCisgICAg
ZGVmIG1hcChwbGF0Zm9ybT1Ob25lKToKKyAgICAgICAgcmV0dXJuIFZlcnNpb25OYW1lTWFwKHBs
YXRmb3JtPXBsYXRmb3JtKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYXRmb3JtPU5vbmUp
OgorICAgICAgICBpZiBwbGF0Zm9ybSBpcyBOb25lOgorICAgICAgICAgICAgZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3QgaW1wb3J0IFN5c3RlbUhvc3QKKyAgICAgICAgICAg
IHBsYXRmb3JtID0gU3lzdGVtSG9zdCgpLnBsYXRmb3JtCisgICAgICAgIHNlbGYubWFwcGluZyA9
IHt9CisKKyAgICAgICAgc2VsZi5kZWZhdWx0X3N5c3RlbV9wbGF0Zm9ybSA9IHBsYXRmb3JtLm9z
X25hbWUKKyAgICAgICAgc2VsZi5tYXBwaW5nWydwdWJsaWMnXSA9IHsKKyAgICAgICAgICAgICdt
YWMnOiB7CisgICAgICAgICAgICAgICAgJ0xlb3BhcmQnOiBWZXJzaW9uKCcxMC41JyksCisgICAg
ICAgICAgICAgICAgJ1Nub3cgTGVvcGFyZCc6IFZlcnNpb24oJzEwLjYnKSwKKyAgICAgICAgICAg
ICAgICAnTGlvbic6IFZlcnNpb24oJzEwLjcnKSwKKyAgICAgICAgICAgICAgICAnTW91bnRhaW4g
TGlvbic6IFZlcnNpb24oJzEwLjgnKSwKKyAgICAgICAgICAgICAgICAnTWF2ZXJpY2tzJzogVmVy
c2lvbignMTAuOScpLAorICAgICAgICAgICAgICAgICdZb3NlbWl0ZSc6IFZlcnNpb24oJzEwLjEw
JyksCisgICAgICAgICAgICAgICAgJ0VsIENhcGl0YW4nOiBWZXJzaW9uKCcxMC4xMScpLAorICAg
ICAgICAgICAgICAgICdTaWVycmEnOiBWZXJzaW9uKCcxMC4xMicpLAorICAgICAgICAgICAgICAg
ICdIaWdoIFNpZXJyYSc6IFZlcnNpb24oJzEwLjEzJyksCisgICAgICAgICAgICAgICAgJ0Z1dHVy
ZSc6IFZlcnNpb24oJzEwLjE0JyksCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ2lvcyc6
IHNlbGYuX2F1dG9tYXBfdG9fbWFqb3JfdmVyc2lvbignaU9TJywgbWluaW11bT1WZXJzaW9uKCcx
MCcpLCBtYXhpbXVtPVZlcnNpb24oJzExJykpLAorICAgICAgICAgICAgJ3dpbic6IHsKKyAgICAg
ICAgICAgICAgICAnV2luMTAnOiBWZXJzaW9uKCcxMCcpLAorICAgICAgICAgICAgICAgICc4LjEn
OiBWZXJzaW9uKCc2LjMnKSwKKyAgICAgICAgICAgICAgICAnOCc6IFZlcnNpb24oJzYuMicpLAor
ICAgICAgICAgICAgICAgICc3c3AwJzogVmVyc2lvbignNi4xLjc2MDAnKSwKKyAgICAgICAgICAg
ICAgICAnVmlzdGEnOiBWZXJzaW9uKCc2JyksCisgICAgICAgICAgICAgICAgJ1hQJzogVmVyc2lv
bignNS4xJyksCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ2xpbnV4JzogeworICAgICAg
ICAgICAgICAgICdMdWNpZCc6IFZlcnNpb24oJzEwLjQnKSwKKyAgICAgICAgICAgICAgICAnTWF2
ZXJpY2snOiBWZXJzaW9uKCcxMC4xMCcpLAorICAgICAgICAgICAgICAgICdOYXR0eSc6IFZlcnNp
b24oJzExLjQnKSwKKyAgICAgICAgICAgICAgICAnUHJlY2lzZSc6IFZlcnNpb24oJzEyLjQnKSwK
KyAgICAgICAgICAgICAgICAnUXVhbnRhbCc6IFZlcnNpb24oJzEyLjEwJyksCisgICAgICAgICAg
ICAgICAgJ1JhcmluZyc6IFZlcnNpb24oJzEzLjQnKSwKKyAgICAgICAgICAgICAgICAnU2F1Y3kn
OiBWZXJzaW9uKCcxMy4xMCcpLAorICAgICAgICAgICAgICAgICdVdG9waWMnOiBWZXJzaW9uKCcx
NC4xMCcpLAorICAgICAgICAgICAgICAgICdWaXZpZCc6IFZlcnNpb24oJzE1LjA0JyksCisgICAg
ICAgICAgICAgICAgJ1dpbHknOiBWZXJzaW9uKCcxNS4xMCcpLAorICAgICAgICAgICAgICAgICdZ
YWtrZXR5JzogVmVyc2lvbignMTYuMTAnKSwKKyAgICAgICAgICAgICAgICAnQmlvbmljJzogVmVy
c2lvbignMTguMDQnKSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAnZnJlZWJzZCc6IHsK
KyAgICAgICAgICAgICAgICAnRnJlZSBCU0QgOCc6IFZlcnNpb24oJzgnKSwKKyAgICAgICAgICAg
ICAgICAnRnJlZSBCU0QgOSc6IFZlcnNpb24oJzknKSwKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9hdXRvbWFwX3RvX21ham9yX3ZlcnNpb24o
Y2xzLCBwcmVmaXgsIG1pbmltdW09VmVyc2lvbignMScpLCBtYXhpbXVtPVZlcnNpb24oJzEnKSk6
CisgICAgICAgIHJlc3VsdCA9IHt9CisgICAgICAgIGFzc2VydCBtaW5pbXVtIDw9IG1heGltdW0K
KyAgICAgICAgZm9yIGkgaW4geHJhbmdlKChtYXhpbXVtLm1ham9yICsgMSkgLSBtaW5pbXVtLm1h
am9yKToKKyAgICAgICAgICAgIHJlc3VsdFsne30ge30nLmZvcm1hdChwcmVmaXgsIHN0cihWZXJz
aW9uKHN0cihtaW5pbXVtLm1ham9yICsgaSkpKSldID0gVmVyc2lvbihzdHIobWluaW11bS5tYWpv
ciArIGkpKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgdG9fbmFtZShzZWxmLCB2
ZXJzaW9uLCBwbGF0Zm9ybT1Ob25lLCB0YWJsZT0ncHVibGljJyk6CisgICAgICAgIHBsYXRmb3Jt
ID0gc2VsZi5kZWZhdWx0X3N5c3RlbV9wbGF0Zm9ybSBpZiBwbGF0Zm9ybSBpcyBOb25lIGVsc2Ug
cGxhdGZvcm0KKyAgICAgICAgYXNzZXJ0IHRhYmxlIGluIHNlbGYubWFwcGluZworICAgICAgICBh
c3NlcnQgcGxhdGZvcm0gaW4gc2VsZi5tYXBwaW5nW3RhYmxlXQorICAgICAgICBjbG9zZXN0X21h
dGNoID0gKE5vbmUsIE5vbmUpCisgICAgICAgIHZlcnNpb24gPSBWZXJzaW9uKHZlcnNpb24pCisg
ICAgICAgIGZvciBvc19uYW1lLCBvc192ZXJzaW9uIGluIHNlbGYubWFwcGluZ1t0YWJsZV1bcGxh
dGZvcm1dLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmVyc2lvbiA9PSBvc192ZXJzaW9u
OgorICAgICAgICAgICAgICAgIHJldHVybiBvc19uYW1lCisgICAgICAgICAgICBlbGlmIHZlcnNp
b24uY29udGFpbmVkX2luKG9zX3ZlcnNpb24pOgorICAgICAgICAgICAgICAgIGlmIGNsb3Nlc3Rf
bWF0Y2hbMV0gYW5kIGNsb3Nlc3RfbWF0Y2hbMV0uY29udGFpbmVkX2luKG9zX3ZlcnNpb24pOgor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGNsb3Nlc3RfbWF0
Y2ggPSAob3NfbmFtZSwgb3NfdmVyc2lvbikKKyAgICAgICAgcmV0dXJuIGNsb3Nlc3RfbWF0Y2hb
MF0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc3RyaXBfbmFtZV9mb3JtYXR0aW5nKG5h
bWUpOgorICAgICAgICAjIDxPUz4gbWFqb3IubWlub3IudGlueSBzaG91bGQgbWFwIHRvIDxPUz4g
bWFqb3IKKyAgICAgICAgaWYgJyAnIGluIG5hbWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAg
ICAgICAgICAgbmFtZSA9ICd7fXt9Jy5mb3JtYXQobmFtZS5zcGxpdCgnICcpWzBdLCBWZXJzaW9u
KCcnLmpvaW4obmFtZS5zcGxpdCgnICcpWzE6XSkpLm1ham9yKQorICAgICAgICAgICAgZXhjZXB0
IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgU3RyaXAgb3V0
IGFueSBzcGFjZXMsIG1ha2UgZXZlcnl0aGluZyBsb3dlci1jYXNlCisgICAgICAgIHJlc3VsdCA9
IG5hbWUucmVwbGFjZSgnICcsICcnKS5sb3dlcigpCisgICAgICAgIHJldHVybiByZXN1bHQKKwor
ICAgIGRlZiBmcm9tX25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgICMgRXhhY3QgbWF0Y2gKKyAg
ICAgICAgZm9yIF8sIG1hcCBpbiBzZWxmLm1hcHBpbmcuaXRlcml0ZW1zKCk6CisgICAgICAgICAg
ICBmb3Igb3NfbmFtZSwgb3NfbWFwIGluIG1hcC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAg
ICBpZiBuYW1lIGluIG9zX21hcDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvc19uYW1l
LCBvc19tYXBbbmFtZV0pCisKKyAgICAgICAgIyBJdCdzIG5vdCBhbiBleGFjdCBtYXRjaCwgbGV0
J3MgdHJ5IHVuaWZ5aW5nIGZvcm1hdHRpbmcKKyAgICAgICAgdW5mb3JtYXR0ZWQgPSBzZWxmLnN0
cmlwX25hbWVfZm9ybWF0dGluZyhuYW1lKQorICAgICAgICBmb3IgXywgbWFwIGluIHNlbGYubWFw
cGluZy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBvc19uYW1lLCBvc19tYXAgaW4gbWFw
Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGZvciB2ZXJzaW9uX25hbWUsIHZlcnNpb24g
aW4gb3NfbWFwLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnN0cmlw
X25hbWVfZm9ybWF0dGluZyh2ZXJzaW9uX25hbWUpID09IHVuZm9ybWF0dGVkOgorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIChvc19uYW1lLCB2ZXJzaW9uKQorICAgICAgICByZXR1cm4g
KE5vbmUsIE5vbmUpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9u
X25hbWVfbWFwX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXBfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl9uYW1lX21hcF91bml0dGVzdC5w
eQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisjIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAorZnJvbSB3ZWJraXRweS5jb21t
b24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgorZnJvbSB2ZXJzaW9uX25hbWVfbWFwIGltcG9ydCBW
ZXJzaW9uTmFtZU1hcAorCisKK2NsYXNzIFZlcnNpb25NYXBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0
Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3N5c3RlbV9wbGF0Zm9ybShzZWxmKToKKyAg
ICAgICAgaG9zdCA9IFN5c3RlbUhvc3QoKQorICAgICAgICBtYXAgPSBWZXJzaW9uTmFtZU1hcChw
bGF0Zm9ybT1ob3N0LnBsYXRmb3JtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcC5kZWZh
dWx0X3N5c3RlbV9wbGF0Zm9ybSwgaG9zdC5wbGF0Zm9ybS5vc19uYW1lKQorCisgICAgZGVmIHRl
c3RfbWFjX3ZlcnNpb25fYnlfbmFtZShzZWxmKToKKyAgICAgICAgbWFwID0gVmVyc2lvbk5hbWVN
YXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcC5mcm9tX25hbWUoJ1NpZXJyYScpLCAo
J21hYycsIFZlcnNpb24oJzEwLjEyJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcC5m
cm9tX25hbWUoJ3NpZXJyYScpLCAoJ21hYycsIFZlcnNpb24oJzEwLjEyJykpKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKG1hcC5mcm9tX25hbWUoJ0VsIENhcGl0YW4nKSwgKCdtYWMnLCBWZXJz
aW9uKCcxMC4xMScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXAuZnJvbV9uYW1lKCdl
bGNhcGl0YW4nKSwgKCdtYWMnLCBWZXJzaW9uKCcxMC4xMScpKSkKKworICAgIGRlZiB0ZXN0X2lv
c192ZXJzaW9uX2J5X25hbWUoc2VsZik6CisgICAgICAgIG1hcCA9IFZlcnNpb25OYW1lTWFwKCkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXAuZnJvbV9uYW1lKCdpT1MgMTEnKSwgKCdpb3Mn
LCBWZXJzaW9uKDExKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwLmZyb21fbmFtZSgn
aW9zMTEnKSwgKCdpb3MnLCBWZXJzaW9uKDExKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
bWFwLmZyb21fbmFtZSgnaU9TIDExLjInKSwgKCdpb3MnLCBWZXJzaW9uKDExKSkpCisKKyAgICBk
ZWYgdGVzdF9tYWNfbmFtZV9ieV92ZXJzaW9uKHNlbGYpOgorICAgICAgICBtYXAgPSBWZXJzaW9u
TmFtZU1hcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1NpZXJyYScsIG1hcC50b19uYW1l
KHZlcnNpb249VmVyc2lvbignMTAuMTInKSwgcGxhdGZvcm09J21hYycpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdFbCBDYXBpdGFuJywgbWFwLnRvX25hbWUodmVyc2lvbj1WZXJzaW9uKCcx
MC4xMScpLCBwbGF0Zm9ybT0nbWFjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0VsIENh
cGl0YW4nLCBtYXAudG9fbmFtZSh2ZXJzaW9uPVZlcnNpb24oJzEwLjExLjMnKSwgcGxhdGZvcm09
J21hYycpKQorCisgICAgZGVmIHRlc3RfaW9zX25hbWVfYnlfdmVyc2lvbihzZWxmKToKKyAgICAg
ICAgbWFwID0gVmVyc2lvbk5hbWVNYXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdpT1Mg
MTEnLCBtYXAudG9fbmFtZSh2ZXJzaW9uPVZlcnNpb24oJzExJyksIHBsYXRmb3JtPSdpb3MnKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaU9TIDEwJywgbWFwLnRvX25hbWUodmVyc2lvbj1W
ZXJzaW9uKCcxMCcpLCBwbGF0Zm9ybT0naW9zJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J2lPUyAxMCcsIG1hcC50b19uYW1lKHZlcnNpb249VmVyc2lvbignMTAuMycpLCBwbGF0Zm9ybT0n
aW9zJykpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNp
b25fdW5pdHRlc3QucHkJKHJldmlzaW9uIDIyNDkyMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw2ICsx
MjUsMTEgQEAgY2xhc3MgVmVyc2lvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHN0cihWZXJzaW9uKCcxLjInKSksICcxLjInKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHN0cihWZXJzaW9uKCcwLjAuMycpKSwgJzAuMC4zJykKIAorICAgIGRl
ZiB0ZXN0X2NvbnRhaW5lZF9pbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFZlcnNp
b24oJzExLjEnKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEnKSkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShWZXJzaW9uKCcxMS4xLjInKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEuMScpKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShWZXJzaW9uKCcxMScpLmNvbnRhaW5lZF9pbihWZXJz
aW9uKCcxMS4xJykpKQorCiAgICAgZGVmIHRlc3RfY29tcGFyZV92ZXJzaW9ucyhzZWxmKToKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChWZXJzaW9uKCcxLjIuMycpLCBWZXJzaW9uKCcxLjIuMycp
KQogICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoVmVyc2lvbignMS4yLjQnKSwgVmVyc2lvbign
MS4yLjMnKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0
Zm9ybWluZm8ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL3BsYXRmb3JtaW5mby5weQkocmV2aXNpb24gMjI0OTIwKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQCBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIAogZnJvbSB3ZWJraXRweS5j
b21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lv
bl9uYW1lX21hcCBpbXBvcnQgVmVyc2lvbk5hbWVNYXAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZQogCiAKQEAgLTUxLDE0ICs1MiwyMSBAQCBj
bGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0gZXhl
Y3V0aXZlCiAgICAgICAgIHNlbGYuX3BsYXRmb3JtX21vZHVsZSA9IHBsYXRmb3JtX21vZHVsZQog
ICAgICAgICBzZWxmLm9zX25hbWUgPSBzZWxmLl9kZXRlcm1pbmVfb3NfbmFtZShzeXNfbW9kdWxl
LnBsYXRmb3JtKQotICAgICAgICBpZiBzZWxmLm9zX25hbWUgPT0gJ2xpbnV4JzoKLSAgICAgICAg
ICAgIHNlbGYub3NfdmVyc2lvbiA9IHNlbGYuX2RldGVybWluZV9saW51eF92ZXJzaW9uKCkKLSAg
ICAgICAgaWYgc2VsZi5vc19uYW1lID09ICdmcmVlYnNkJyBvciBzZWxmLm9zX25hbWUgPT0gJ29w
ZW5ic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnbmV0YnNkJyBvciBzZWxmLm9zX25hbWUgPT0gJ2lv
cyc6Ci0gICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBwbGF0Zm9ybV9tb2R1bGUucmVsZWFz
ZSgpCisgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IE5vbmUKKwogICAgICAgICBpZiBzZWxmLm9z
X25hbWUuc3RhcnRzd2l0aCgnbWFjJyk6Ci0gICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBz
ZWxmLl9kZXRlcm1pbmVfbWFjX3ZlcnNpb24oVmVyc2lvbihwbGF0Zm9ybV9tb2R1bGUubWFjX3Zl
cigpWzBdKSkKLSAgICAgICAgaWYgc2VsZi5vc19uYW1lLnN0YXJ0c3dpdGgoJ3dpbicpOgotICAg
ICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gc2VsZi5fZGV0ZXJtaW5lX3dpbl92ZXJzaW9uKHNl
bGYuX3dpbl92ZXJzaW9uKHN5c19tb2R1bGUpKQorICAgICAgICAgICAgc2VsZi5vc192ZXJzaW9u
ID0gVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYpLnRvX25hbWUoVmVyc2lvbihwbGF0Zm9ybV9tb2R1
bGUubWFjX3ZlcigpWzBdKSwgdGFibGU9J3B1YmxpYycpCisgICAgICAgIGVsaWYgc2VsZi5vc19u
YW1lLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gVmVy
c2lvbk5hbWVNYXAubWFwKHNlbGYpLnRvX25hbWUoc2VsZi5fd2luX3ZlcnNpb24oc3lzX21vZHVs
ZSksIHRhYmxlPSdwdWJsaWMnKQorICAgICAgICBlbGlmIHNlbGYub3NfbmFtZSA9PSAnZnJlZWJz
ZCc6CisgICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBWZXJzaW9uTmFtZU1hcC5tYXAoc2Vs
ZikudG9fbmFtZShwbGF0Zm9ybV9tb2R1bGUucmVsZWFzZSgpLnNwbGl0KCctJylbMF0sIHRhYmxl
PSdwdWJsaWMnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBMaW51eCBhbmQgaU9TIGJv
dGggcmV0dXJuIGNvbmZvcm1pbmcgdmVyc2lvbiBzdHJpbmdzLgorICAgICAgICAgICAgc2VsZi5v
c192ZXJzaW9uID0gVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYpLnRvX25hbWUoVmVyc2lvbihwbGF0
Zm9ybV9tb2R1bGUucmVsZWFzZSgpKSwgdGFibGU9J3B1YmxpYycpCisKKyAgICAgICAgYXNzZXJ0
IHNlbGYub3NfdmVyc2lvbiBpcyBub3QgTm9uZQorICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBz
ZWxmLm9zX3ZlcnNpb24ubG93ZXIoKS5yZXBsYWNlKCcgJywgJycpCisKICAgICAgICAgc2VsZi5f
aXNfY3lnd2luID0gc3lzX21vZHVsZS5wbGF0Zm9ybSA9PSAnY3lnd2luJwogCiAgICAgZGVmIGlz
X21hYyhzZWxmKToKQEAgLTE2NCw0MCArMTcyLDYgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVj
dCk6CiAgICAgICAgICAgICByZXR1cm4gJ2hhaWt1JwogICAgICAgICByYWlzZSBBc3NlcnRpb25F
cnJvcigndW5yZWNvZ25pemVkIHBsYXRmb3JtIHN0cmluZyAiJXMiJyAlIHN5c19wbGF0Zm9ybSkK
IAotICAgIGRlZiBfZGV0ZXJtaW5lX21hY192ZXJzaW9uKHNlbGYsIG1hY192ZXJzaW9uKToKLSAg
ICAgICAgdmVyc2lvbl9zdHJpbmdzID0gewotICAgICAgICAgICAgNTogJ2xlb3BhcmQnLAotICAg
ICAgICAgICAgNjogJ3Nub3dsZW9wYXJkJywKLSAgICAgICAgICAgIDc6ICdsaW9uJywKLSAgICAg
ICAgICAgIDg6ICdtb3VudGFpbmxpb24nLAotICAgICAgICAgICAgOTogJ21hdmVyaWNrcycsCi0g
ICAgICAgICAgICAxMDogJ3lvc2VtaXRlJywKLSAgICAgICAgICAgIDExOiAnZWxjYXBpdGFuJywK
LSAgICAgICAgICAgIDEyOiAnc2llcnJhJywKLSAgICAgICAgICAgIDEzOiAnaGlnaHNpZXJyYScs
Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0IG1hY192ZXJzaW9uLm1pbm9yID49IG1pbih2ZXJz
aW9uX3N0cmluZ3Mua2V5cygpKQotICAgICAgICByZXR1cm4gdmVyc2lvbl9zdHJpbmdzLmdldCht
YWNfdmVyc2lvbi5taW5vciwgJ2Z1dHVyZScpCi0KLSAgICBkZWYgX2RldGVybWluZV9saW51eF92
ZXJzaW9uKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiB3ZSBpZ25vcmUgd2hhdGV2ZXIgdGhlIHJl
YWwgdmVyc2lvbiBpcyBhbmQgcHJldGVuZCBpdCdzIGx1Y2lkIGZvciBub3cuCi0gICAgICAgIHJl
dHVybiAnbHVjaWQnCi0KLSAgICBkZWYgX2RldGVybWluZV93aW5fdmVyc2lvbihzZWxmLCB3aW5f
dmVyc2lvbik6Ci0gICAgICAgIGlmIHNlbGYuX3BsYXRmb3JtX21vZHVsZS5yZWxlYXNlKCkgPT0g
JzEwJzoKLSAgICAgICAgICAgIHJldHVybiAnd2luMTAnCi0gICAgICAgIGlmIHdpbl92ZXJzaW9u
Lm1ham9yID09IDAgYW5kIHdpbl92ZXJzaW9uLm1pbm9yID09IDA6Ci0gICAgICAgICAgICBpZiB3
aW5fdmVyc2lvblsyXSA+IDEwMDAwOgotICAgICAgICAgICAgICAgIHJldHVybiAnd2luMTAnCi0g
ICAgICAgIGlmIHdpbl92ZXJzaW9uID09IFZlcnNpb24oWzYsIDEsIDc2MDBdKToKLSAgICAgICAg
ICAgIHJldHVybiAnN3NwMCcKLSAgICAgICAgaWYgd2luX3ZlcnNpb24ubWFqb3IgPT0gNiBhbmQg
d2luX3ZlcnNpb24ubWlub3IgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAndmlzdGEnCi0gICAg
ICAgIGlmIHdpbl92ZXJzaW9uLm1ham9yID09IDUgYW5kIHdpbl92ZXJzaW9uLm1pbm9yID09IDE6
Ci0gICAgICAgICAgICByZXR1cm4gJ3hwJwotICAgICAgICBhc3NlcnQgd2luX3ZlcnNpb25bMF0g
PiA2IG9yIHdpbl92ZXJzaW9uWzFdID49IDEsICdVbnJlY29nbml6ZWQgV2luZG93cyB2ZXJzaW9u
OiAie30iJy5mb3JtYXQod2luX3ZlcnNpb24pCi0gICAgICAgIHJldHVybiAnZnV0dXJlJwotCiAg
ICAgZGVmIF93aW5fdmVyc2lvbihzZWxmLCBzeXNfbW9kdWxlKToKICAgICAgICAgaWYgaGFzYXR0
cihzeXNfbW9kdWxlLCAnZ2V0d2luZG93c3ZlcnNpb24nKToKICAgICAgICAgICAgIHJldHVybiBW
ZXJzaW9uKHN5c19tb2R1bGUuZ2V0d2luZG93c3ZlcnNpb24oKVswOjNdKQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb191bml0dGVzdC5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZv
cm1pbmZvX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMjQ5MjApCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNv
cHkpCkBAIC04NywxMyArODcsMTMgQEAgY2xhc3MgVGVzdFBsYXRmb3JtSW5mbyh1bml0dGVzdC5U
ZXN0Q2FzZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW5mby50b3RhbF9ieXRlc19t
ZW1vcnkoKSkKIAogICAgIGRlZiB0ZXN0X29zX25hbWVfYW5kX3dyYXBwZXJzKHNlbGYpOgotICAg
ICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4MicpKQorICAgICAgICBp
bmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4MicpLCBmYWtlX3BsYXRmb3JtKCcn
LCAnMTAuNCcpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5mby5pc19saW51eCgpKQogICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKGluZm8uaXNfbWFjKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UoaW5mby5pc193aW4oKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbmZvLmlzX2Zy
ZWVic2QoKSkKIAotICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4
MycpKQorICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4MycpLCBm
YWtlX3BsYXRmb3JtKCcnLCAnMTAuNCcpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5mby5p
c19saW51eCgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluZm8uaXNfbWFjKCkpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5pc193aW4oKSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBj
bGFzcyBUZXN0UGxhdGZvcm1JbmZvKHVuaXR0ZXN0LlRlc3RDYXNlCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RmFsc2UoaW5mby5pc19uYXRpdmVfd2luKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
aW5mby5pc19mcmVlYnNkKCkpCiAKLSAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vf
c3lzKCdmcmVlYnNkOCcpKQorICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMo
J2ZyZWVic2Q4JyksIGZha2VfcGxhdGZvcm0oJycsICc4LjMtUFJFUkVMRUFTRScpKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGluZm8ub3NfbmFtZSwgJ2ZyZWVic2QnKQogICAgICAgICBzZWxm
LmFzc2VydEZhbHNlKGluZm8uaXNfbGludXgoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShp
bmZvLmlzX21hYygpKQpAQCAtMTQ0LDE5ICsxNDQsMjAgQEAgY2xhc3MgVGVzdFBsYXRmb3JtSW5m
byh1bml0dGVzdC5UZXN0Q2FzZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9p
bmZvKGZha2Vfc3lzKCdkYXJ3aW4nKSwgZmFrZV9wbGF0Zm9ybSgnMTAuMTMuMCcpKS5vc192ZXJz
aW9uLCAnaGlnaHNpZXJyYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2lu
Zm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC4xNC4wJykpLm9zX3ZlcnNp
b24sICdmdXR1cmUnKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8o
ZmFrZV9zeXMoJ2xpbnV4MicpKS5vc192ZXJzaW9uLCAnbHVjaWQnKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdsaW51eDInKSwgZmFrZV9wbGF0Zm9y
bSgnJywgJzEwLjQnKSkub3NfdmVyc2lvbiwgJ2x1Y2lkJykKIAotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdmcmVlYnNkOCcpLCBmYWtlX3BsYXRmb3Jt
KCcnLCAnOC4zLVBSRVJFTEVBU0UnKSkub3NfdmVyc2lvbiwgJzguMy1QUkVSRUxFQVNFJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZnJlZWJzZDkn
KSwgZmFrZV9wbGF0Zm9ybSgnJywgJzkuMC1SRUxFQVNFJykpLm9zX3ZlcnNpb24sICc5LjAtUkVM
RUFTRScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMo
J2ZyZWVic2Q4JyksIGZha2VfcGxhdGZvcm0oJycsICc4LjMtUFJFUkVMRUFTRScpKS5vc192ZXJz
aW9uLCAnZnJlZWJzZDgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZv
KGZha2Vfc3lzKCdmcmVlYnNkOScpLCBmYWtlX3BsYXRmb3JtKCcnLCAnOS4wLVJFTEVBU0UnKSku
b3NfdmVyc2lvbiwgJ2ZyZWVic2Q5JykKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3Nl
cnRpb25FcnJvciwgc2VsZi5tYWtlX2luZm8sIGZha2Vfc3lzKCd3aW4zMicsIHR1cGxlKFs1LCAw
LCAxMjM0XSkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vf
c3lzKCd3aW4zMicsIHR1cGxlKFs2LCAyLCAxMjM0XSkpKS5vc192ZXJzaW9uLCAnZnV0dXJlJykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnd2luMzIn
LCB0dXBsZShbMTAsIDAsIDE0MzkzXSkpKS5vc192ZXJzaW9uLCAnd2luMTAnKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3aW4zMicsIHR1cGxlKFs2
LCAyLCAxMjM0XSkpKS5vc192ZXJzaW9uLCAnOCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMyJywgdHVwbGUoWzYsIDEsIDc2MDBdKSkpLm9z
X3ZlcnNpb24sICc3c3AwJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5m
byhmYWtlX3N5cygnd2luMzInLCB0dXBsZShbNiwgMCwgMTIzNF0pKSkub3NfdmVyc2lvbiwgJ3Zp
c3RhJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygn
d2luMzInLCB0dXBsZShbNSwgMSwgMTIzNF0pKSkub3NfdmVyc2lvbiwgJ3hwJykKIAogICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgc2VsZi5tYWtlX2luZm8sIGZha2Vf
c3lzKCd3aW4zMicpLCBleGVjdXRpdmU9ZmFrZV9leGVjdXRpdmUoJzUuMC4xMjM0JykpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2N5Z3dpbicpLCBl
eGVjdXRpdmU9ZmFrZV9leGVjdXRpdmUoJzYuMi4xMjM0JykpLm9zX3ZlcnNpb24sICdmdXR1cmUn
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdjeWd3
aW4nKSwgZXhlY3V0aXZlPWZha2VfZXhlY3V0aXZlKCc2LjIuMTIzNCcpKS5vc192ZXJzaW9uLCAn
OCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2N5
Z3dpbicpLCBleGVjdXRpdmU9ZmFrZV9leGVjdXRpdmUoJzYuMS43NjAwJykpLm9zX3ZlcnNpb24s
ICc3c3AwJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5
cygnY3lnd2luJyksIGV4ZWN1dGl2ZT1mYWtlX2V4ZWN1dGl2ZSgnNi4wLjEyMzQnKSkub3NfdmVy
c2lvbiwgJ3Zpc3RhJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhm
YWtlX3N5cygnY3lnd2luJyksIGV4ZWN1dGl2ZT1mYWtlX2V4ZWN1dGl2ZSgnNS4xLjEyMzQnKSku
b3NfdmVyc2lvbiwgJ3hwJykKQEAgLTE2OCwxMCArMTY5LDEwIEBAIGNsYXNzIFRlc3RQbGF0Zm9y
bUluZm8odW5pdHRlc3QuVGVzdENhc2UKICAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZh
a2Vfc3lzKCd3aW4zMicsIHR1cGxlKFs2LCAxLCA3NjAwXSkpKQogICAgICAgICBzZWxmLmFzc2Vy
dE5vdEVxdWFscyhpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykKIAotICAgICAgICBpbmZvID0gc2Vs
Zi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4MicpKQorICAgICAgICBpbmZvID0gc2VsZi5tYWtl
X2luZm8oZmFrZV9zeXMoJ2xpbnV4MicpLCBmYWtlX3BsYXRmb3JtKCcnLCAnMTAuNCcpKQogICAg
ICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykKIAotICAg
ICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2ZyZWVic2Q5JykpCisgICAgICAg
IGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZnJlZWJzZDknKSwgZmFrZV9wbGF0Zm9y
bSgnJywgJzkuMC1SRUxFQVNFJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGluZm8u
ZGlzcGxheV9uYW1lKCksICcnKQogCiAgICAgZGVmIHRlc3RfdG90YWxfYnl0ZXNfbWVtb3J5KHNl
bGYpOgpAQCAtMTgxLDggKzE4Miw4IEBAIGNsYXNzIFRlc3RQbGF0Zm9ybUluZm8odW5pdHRlc3Qu
VGVzdENhc2UKICAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3aW4zMics
IHR1cGxlKFs2LCAxLCA3NjAwXSkpKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbmZvLnRv
dGFsX2J5dGVzX21lbW9yeSgpKQogCi0gICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtl
X3N5cygnbGludXgyJykpCisgICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygn
bGludXgyJyksIGZha2VfcGxhdGZvcm0oJycsICcxMC40JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0
SXNOb25lKGluZm8udG90YWxfYnl0ZXNfbWVtb3J5KCkpCiAKLSAgICAgICAgaW5mbyA9IHNlbGYu
bWFrZV9pbmZvKGZha2Vfc3lzKCdmcmVlYnNkOScpKQorICAgICAgICBpbmZvID0gc2VsZi5tYWtl
X2luZm8oZmFrZV9zeXMoJ2ZyZWVic2Q5JyksIGZha2VfcGxhdGZvcm0oJycsICc5LjAtUkVMRUFT
RScpKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbmZvLnRvdGFsX2J5dGVzX21lbW9yeSgp
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327249</attachid>
            <date>2017-11-17 15:00:29 -0800</date>
            <delta_ts>2017-11-27 10:13:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179621-20171117150028.patch</filename>
            <type>text/plain</type>
            <size>24647</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNDk4MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU0IEBACisyMDE3LTExLTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogQmV0dGVyIG5hbWUtdmVyc2lvbiBtYXBwaW5nIChQYXJ0
IDEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk2
MjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM1NTg5NTg1PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhdmlkIEtpbHplci4KKworICAgICAgICBNYXBwaW5nIHZlcnNpb24gbnVtYmVycyB0byB2
ZXJzaW9uIG5hbWVzIHNob3VsZCBvY2N1ciBpbiBhIGNlbnRyYWwgbG9jYXRpb24uCisgICAgICAg
IFRoaXMgaGFzIGEgZmV3IGFkdmFudGFnZXMuIEZpcnN0LCBpdCBtYWtlcyBpdGVyYXRpbmcgdGhy
b3VnaCB2ZXJzaW9ucyBlYXNpZXIuCisgICAgICAgIFNlY29uZCwgaXQgYWxsb3dzIGZvciBhcHBs
ZV9hZGRpdGlvbnMgdG8gZGVmaW5lIGFuIGFkZGl0aW9uYWwgc2V0IG9mIG5hbWUKKyAgICAgICAg
bWFwcGluZ3MuIExhc3RseSwgaXQgd2lsbCBhbGxvdywgaW4gYSBmdXR1cmUgcGF0Y2gsIGZvciB1
cyB0byB0cmFjayB2ZXJzaW9uCisgICAgICAgIGluc3RlYWQgb2YgdmVyc2lvbiBuYW1lLCBvbmx5
IG1hcHBpbmcgdmVyc2lvbiB0byB2ZXJzaW9uIG5hbWUgd2hlbiByZXF1aXJlZC4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHk6CisgICAg
ICAgIChQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoUGxhdGZvcm1JbmZvLl9kZXRl
cm1pbmVfb3NfbmFtZSk6IFVzZSBWZXJzaW9uTmFtZU1hcCBpbnN0ZWFkIG9mIGN1c3RvbSBmdW5j
dGlvbnMKKyAgICAgICAgbWFwcGluZyB2ZXJzaW9uIHRvIG5hbWUuCisgICAgICAgIChQbGF0Zm9y
bUluZm8uX2RldGVybWluZV9saW51eF92ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRm
b3JtSW5mby5fZGV0ZXJtaW5lX21hY192ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRm
b3JtSW5mby5fZGV0ZXJtaW5lX3dpbl92ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAoVGVzdFBsYXRmb3JtSW5mby50ZXN0X29zX25hbWVfYW5kX3dyYXBwZXJzKToKKyAgICAg
ICAgKFRlc3RQbGF0Zm9ybUluZm8udGVzdF9vc192ZXJzaW9uKToKKyAgICAgICAgKFRlc3RQbGF0
Zm9ybUluZm8udGVzdF9kaXNwbGF5X25hbWUpOgorICAgICAgICAoVGVzdFBsYXRmb3JtSW5mby50
ZXN0X3RvdGFsX2J5dGVzX21lbW9yeSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21t
b24vdmVyc2lvbi5weToKKyAgICAgICAgKFZlcnNpb24uY29udGFpbmVkX2luKTogQWRkIHBhcnRp
YWwgdmVyc2lvbiBtYXBwaW5nLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Zl
cnNpb25fbmFtZV9tYXAucHk6IEFkZGVkLgorICAgICAgICAoVmVyc2lvbk5hbWVNYXApOiBIb2xk
cyBhIG1hcHBpbmcgb2YgdmVyc2lvbiBuYW1lIHRvIHZlcnNpb24gb2JqZWN0LgorICAgICAgICAo
VmVyc2lvbk5hbWVNYXAubWFwKTogRG9uJ3QgcmUtY3JlYXRlIFZlcnNpb25OYW1lTWFwIGV2ZXJ5
IHRpbWUuCisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5fX2luaXRfXyk6IEluaXRpYWxpemUgbWFw
cGluZywgdXNlIHBsYXRmb3JtIHRvCisgICAgICAgIGRlZmluZSB0aGUgZGVmYXVsdCBzeXN0ZW0g
cGxhdGZvcm0uCisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5fYXV0b21hcF90b19tYWpvcl92ZXJz
aW9uKTogU29tZSBvcGVyYXRpbmcgc3lzdGVtcywgc3VjaAorICAgICAgICBhcyBpT1MsIGhhdmUg
YSBuYW1pbmcgc2NoZW1lIGJhc2VkIG9uIHRoZWlyIG1ham9yIHZlcnNpb24gYW5kIG9zIG5hbWUu
CisgICAgICAgIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgc3VjaCBtYXBwaW5ncy4KKyAgICAgICAg
KFZlcnNpb25OYW1lTWFwLnRvX25hbWUpOiBHaXZlbiBhIHZlcnNpb24gb2JqZWN0LCBwbGF0Zm9y
bSBuYW1lIGFuZAorICAgICAgICB0YWJsZSwgZmluZCB0aGUgY2xvc2VzdCBtYXRjaGluZyB2ZXJz
aW9uIG5hbWUuCisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5zdHJpcF9uYW1lX2Zvcm1hdHRpbmcp
OiBSZW1vdmUgc3BhY2VzIGFuZCBleHRyYWN0IHRoZSBtYWpvciB2ZXJzaW9uLAorICAgICAgICBp
ZiBhIHZlcnNpb24gc3RyaW5nIGlzIGluY2x1ZGVkIGluIHRoZSBuYW1lLgorICAgICAgICAoVmVy
c2lvbk5hbWVNYXAuZnJvbV9uYW1lKTogUmV0dXJuIGFuIG9zIG5hbWUgYW5kIHZlcnNpb24gZ2l2
ZW4gYSB2ZXJzaW9uIG5hbWUuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVy
c2lvbl9uYW1lX21hcF91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChWZXJzaW9uTWFwVGVz
dENhc2UpOgorICAgICAgICAoVmVyc2lvbk1hcFRlc3RDYXNlLnRlc3RfZGVmYXVsdF9zeXN0ZW1f
cGxhdGZvcm0pOgorICAgICAgICAoVmVyc2lvbk1hcFRlc3RDYXNlLnRlc3RfbWFjX3ZlcnNpb25f
YnlfbmFtZSk6CisgICAgICAgIChWZXJzaW9uTWFwVGVzdENhc2UudGVzdF9pb3NfdmVyc2lvbl9i
eV9uYW1lKToKKyAgICAgICAgKFZlcnNpb25NYXBUZXN0Q2FzZS50ZXN0X21hY19uYW1lX2J5X3Zl
cnNpb24pOgorICAgICAgICAoVmVyc2lvbk1hcFRlc3RDYXNlLnRlc3RfaW9zX25hbWVfYnlfdmVy
c2lvbik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVz
dC5weToKKyAgICAgICAgKFZlcnNpb25UZXN0Q2FzZS50ZXN0X2NvbnRhaW5lZF9pbik6CisKIDIw
MTctMTEtMTYgIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAg
ICBbV2luQ2Fpcm9dIFVwZGF0ZSBXaW5DYWlyb1JlcXVpcmVtZW50cwpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uLnB5CShyZXZpc2lvbiAyMjQ5ODApCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uLnB5CSh3b3JraW5nIGNvcHkpCkBAIC05
Miw2ICs5MiwxNiBAQCBjbGFzcyBWZXJzaW9uKG9iamVjdCk6CiAgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCdWZXJzaW9uIGtleSBtdXN0IGJlIG1ham9yLCBtaW5vciwgdGlueSwgbWljcm8g
b3IgbmFubycpCiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0V4cGVjdGVkIHZlcnNpb24ga2V5
IHRvIGJlIHN0cmluZyBvciBpbnRlZ2VyJykKIAorICAgICMgMTEuMiBpcyBjb250YWluZWQgaW4g
MTEsIGJ1dCAxMSBpcyBub3QgY29udGFpbmVkIGluIDExLjIKKyAgICBkZWYgY29udGFpbmVkX2lu
KHNlbGYsIHZlcnNpb24pOgorICAgICAgICBkb2VzX21hdGNoID0gVHJ1ZQorICAgICAgICBmb3Ig
aSBpbiB4cmFuZ2UobGVuKHNlbGYpKToKKyAgICAgICAgICAgIGlmIHNlbGZbaV0gIT0gdmVyc2lv
bltpXToKKyAgICAgICAgICAgICAgICBkb2VzX21hdGNoID0gRmFsc2UKKyAgICAgICAgICAgIGlm
IG5vdCBkb2VzX21hdGNoIGFuZCB2ZXJzaW9uW2ldICE9IDA6CisgICAgICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKICAgICBkZWYgX19zdHJfXyhzZWxmKToK
ICAgICAgICAgbGVuX3RvX3ByaW50ID0gMQogICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHNl
bGYpKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9t
YXAucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lv
bl9uYW1lX21hcC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi92ZXJzaW9uX25hbWVfbWFwLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ2IEBA
CisjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
CisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCByZQorCitm
cm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKK2Zyb20gd2Via2l0
cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KKworCitjbGFzcyBWZXJzaW9uTmFtZU1h
cChvYmplY3QpOgorCisgICAgIyBBbGxvd3MgYXBwbGVfYWRkaXRpb25zIHRvIGRlZmluZSBhIGN1
c3RvbSBtYXBwaW5nCisgICAgQHN0YXRpY21ldGhvZAorICAgIEBtZW1vaXplZAorICAgIGRlZiBt
YXAocGxhdGZvcm09Tm9uZSk6CisgICAgICAgIHJldHVybiBWZXJzaW9uTmFtZU1hcChwbGF0Zm9y
bT1wbGF0Zm9ybSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwbGF0Zm9ybT1Ob25lKToKKyAg
ICAgICAgaWYgcGxhdGZvcm0gaXMgTm9uZToKKyAgICAgICAgICAgIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5zeXN0ZW1ob3N0IGltcG9ydCBTeXN0ZW1Ib3N0CisgICAgICAgICAgICBwbGF0
Zm9ybSA9IFN5c3RlbUhvc3QoKS5wbGF0Zm9ybQorICAgICAgICBzZWxmLm1hcHBpbmcgPSB7fQor
CisgICAgICAgIHNlbGYuZGVmYXVsdF9zeXN0ZW1fcGxhdGZvcm0gPSBwbGF0Zm9ybS5vc19uYW1l
CisgICAgICAgIHNlbGYubWFwcGluZ1sncHVibGljJ10gPSB7CisgICAgICAgICAgICAnbWFjJzog
eworICAgICAgICAgICAgICAgICdMZW9wYXJkJzogVmVyc2lvbignMTAuNScpLAorICAgICAgICAg
ICAgICAgICdTbm93IExlb3BhcmQnOiBWZXJzaW9uKCcxMC42JyksCisgICAgICAgICAgICAgICAg
J0xpb24nOiBWZXJzaW9uKCcxMC43JyksCisgICAgICAgICAgICAgICAgJ01vdW50YWluIExpb24n
OiBWZXJzaW9uKCcxMC44JyksCisgICAgICAgICAgICAgICAgJ01hdmVyaWNrcyc6IFZlcnNpb24o
JzEwLjknKSwKKyAgICAgICAgICAgICAgICAnWW9zZW1pdGUnOiBWZXJzaW9uKCcxMC4xMCcpLAor
ICAgICAgICAgICAgICAgICdFbCBDYXBpdGFuJzogVmVyc2lvbignMTAuMTEnKSwKKyAgICAgICAg
ICAgICAgICAnU2llcnJhJzogVmVyc2lvbignMTAuMTInKSwKKyAgICAgICAgICAgICAgICAnSGln
aCBTaWVycmEnOiBWZXJzaW9uKCcxMC4xMycpLAorICAgICAgICAgICAgICAgICdGdXR1cmUnOiBW
ZXJzaW9uKCcxMC4xNCcpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdpb3MnOiBzZWxm
Ll9hdXRvbWFwX3RvX21ham9yX3ZlcnNpb24oJ2lPUycsIG1pbmltdW09VmVyc2lvbignMTAnKSwg
bWF4aW11bT1WZXJzaW9uKCcxMScpKSwKKyAgICAgICAgICAgICd3aW4nOiB7CisgICAgICAgICAg
ICAgICAgJ1dpbjEwJzogVmVyc2lvbignMTAnKSwKKyAgICAgICAgICAgICAgICAnOC4xJzogVmVy
c2lvbignNi4zJyksCisgICAgICAgICAgICAgICAgJzgnOiBWZXJzaW9uKCc2LjInKSwKKyAgICAg
ICAgICAgICAgICAnN3NwMCc6IFZlcnNpb24oJzYuMS43NjAwJyksCisgICAgICAgICAgICAgICAg
J1Zpc3RhJzogVmVyc2lvbignNicpLAorICAgICAgICAgICAgICAgICdYUCc6IFZlcnNpb24oJzUu
MScpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdsaW51eCc6IHsKKyAgICAgICAgICAg
ICAgICAnTHVjaWQnOiBWZXJzaW9uKCcxMC40JyksCisgICAgICAgICAgICAgICAgJ01hdmVyaWNr
JzogVmVyc2lvbignMTAuMTAnKSwKKyAgICAgICAgICAgICAgICAnTmF0dHknOiBWZXJzaW9uKCcx
MS40JyksCisgICAgICAgICAgICAgICAgJ1ByZWNpc2UnOiBWZXJzaW9uKCcxMi40JyksCisgICAg
ICAgICAgICAgICAgJ1F1YW50YWwnOiBWZXJzaW9uKCcxMi4xMCcpLAorICAgICAgICAgICAgICAg
ICdSYXJpbmcnOiBWZXJzaW9uKCcxMy40JyksCisgICAgICAgICAgICAgICAgJ1NhdWN5JzogVmVy
c2lvbignMTMuMTAnKSwKKyAgICAgICAgICAgICAgICAnVHJ1c3R5JzogVmVyc2lvbignMTQuNCcp
LAorICAgICAgICAgICAgICAgICdVdG9waWMnOiBWZXJzaW9uKCcxNC4xMCcpLAorICAgICAgICAg
ICAgICAgICdWaXZpZCc6IFZlcnNpb24oJzE1LjA0JyksCisgICAgICAgICAgICAgICAgJ1dpbHkn
OiBWZXJzaW9uKCcxNS4xMCcpLAorICAgICAgICAgICAgICAgICdYZW5pYWwnOiBWZXJzaW9uKCcx
Ni40JyksCisgICAgICAgICAgICAgICAgJ1lha2tldHknOiBWZXJzaW9uKCcxNi4xMCcpLAorICAg
ICAgICAgICAgICAgICdaZXN0eSc6IFZlcnNpb24oJzE3LjQnKSwKKyAgICAgICAgICAgICAgICAn
QXJ0ZnVsJzogVmVyc2lvbignMTcuMTAnKSwKKyAgICAgICAgICAgICAgICAnQmlvbmljJzogVmVy
c2lvbignMTguMDQnKSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAnZnJlZWJzZCc6IHsK
KyAgICAgICAgICAgICAgICAnRnJlZSBCU0QgOCc6IFZlcnNpb24oJzgnKSwKKyAgICAgICAgICAg
ICAgICAnRnJlZSBCU0QgOSc6IFZlcnNpb24oJzknKSwKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9hdXRvbWFwX3RvX21ham9yX3ZlcnNpb24o
Y2xzLCBwcmVmaXgsIG1pbmltdW09VmVyc2lvbignMScpLCBtYXhpbXVtPVZlcnNpb24oJzEnKSk6
CisgICAgICAgIHJlc3VsdCA9IHt9CisgICAgICAgIGFzc2VydCBtaW5pbXVtIDw9IG1heGltdW0K
KyAgICAgICAgZm9yIGkgaW4geHJhbmdlKChtYXhpbXVtLm1ham9yICsgMSkgLSBtaW5pbXVtLm1h
am9yKToKKyAgICAgICAgICAgIHJlc3VsdFsne30ge30nLmZvcm1hdChwcmVmaXgsIHN0cihWZXJz
aW9uKHN0cihtaW5pbXVtLm1ham9yICsgaSkpKSldID0gVmVyc2lvbihzdHIobWluaW11bS5tYWpv
ciArIGkpKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgdG9fbmFtZShzZWxmLCB2
ZXJzaW9uLCBwbGF0Zm9ybT1Ob25lLCB0YWJsZT0ncHVibGljJyk6CisgICAgICAgIHBsYXRmb3Jt
ID0gc2VsZi5kZWZhdWx0X3N5c3RlbV9wbGF0Zm9ybSBpZiBwbGF0Zm9ybSBpcyBOb25lIGVsc2Ug
cGxhdGZvcm0KKyAgICAgICAgYXNzZXJ0IHRhYmxlIGluIHNlbGYubWFwcGluZworICAgICAgICBh
c3NlcnQgcGxhdGZvcm0gaW4gc2VsZi5tYXBwaW5nW3RhYmxlXQorICAgICAgICBjbG9zZXN0X21h
dGNoID0gKE5vbmUsIE5vbmUpCisgICAgICAgIHZlcnNpb24gPSBWZXJzaW9uKHZlcnNpb24pCisg
ICAgICAgIGZvciBvc19uYW1lLCBvc192ZXJzaW9uIGluIHNlbGYubWFwcGluZ1t0YWJsZV1bcGxh
dGZvcm1dLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgdmVyc2lvbiA9PSBvc192ZXJzaW9u
OgorICAgICAgICAgICAgICAgIHJldHVybiBvc19uYW1lCisgICAgICAgICAgICBlbGlmIHZlcnNp
b24uY29udGFpbmVkX2luKG9zX3ZlcnNpb24pOgorICAgICAgICAgICAgICAgIGlmIGNsb3Nlc3Rf
bWF0Y2hbMV0gYW5kIGNsb3Nlc3RfbWF0Y2hbMV0uY29udGFpbmVkX2luKG9zX3ZlcnNpb24pOgor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGNsb3Nlc3RfbWF0
Y2ggPSAob3NfbmFtZSwgb3NfdmVyc2lvbikKKyAgICAgICAgcmV0dXJuIGNsb3Nlc3RfbWF0Y2hb
MF0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc3RyaXBfbmFtZV9mb3JtYXR0aW5nKG5h
bWUpOgorICAgICAgICAjIDxPUz4gbWFqb3IubWlub3IudGlueSBzaG91bGQgbWFwIHRvIDxPUz4g
bWFqb3IKKyAgICAgICAgaWYgJyAnIGluIG5hbWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAg
ICAgICAgICAgbmFtZSA9ICd7fXt9Jy5mb3JtYXQoJycuam9pbihuYW1lLnNwbGl0KCcgJylbOi0x
XSksIFZlcnNpb24obmFtZS5zcGxpdCgnICcpWy0xXSkubWFqb3IpCisgICAgICAgICAgICBleGNl
cHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3BsaXQgPSByZS5zcGxpdChyJ1xkJywgbmFt
ZSkKKyAgICAgICAgICAgICAgICBuYW1lID0gJ3t9e30nLmZvcm1hdChzcGxpdFswXSwgVmVyc2lv
bihuYW1lWyhsZW4oc3BsaXQpIC0gMSk6XSkubWFqb3IpCisgICAgICAgICAgICBleGNlcHQgVmFs
dWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBTdHJpcCBvdXQgYW55
IHNwYWNlcywgbWFrZSBldmVyeXRoaW5nIGxvd2VyLWNhc2UKKyAgICAgICAgcmVzdWx0ID0gbmFt
ZS5yZXBsYWNlKCcgJywgJycpLmxvd2VyKCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAg
ZGVmIGZyb21fbmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgIyBFeGFjdCBtYXRjaAorICAgICAg
ICBmb3IgXywgbWFwIGluIHNlbGYubWFwcGluZy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZv
ciBvc19uYW1lLCBvc19tYXAgaW4gbWFwLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGlm
IG5hbWUgaW4gb3NfbWFwOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG9zX25hbWUsIG9z
X21hcFtuYW1lXSkKKworICAgICAgICAjIEl0J3Mgbm90IGFuIGV4YWN0IG1hdGNoLCBsZXQncyB0
cnkgdW5pZnlpbmcgZm9ybWF0dGluZworICAgICAgICB1bmZvcm1hdHRlZCA9IHNlbGYuc3RyaXBf
bmFtZV9mb3JtYXR0aW5nKG5hbWUpCisgICAgICAgIGZvciBfLCBtYXAgaW4gc2VsZi5tYXBwaW5n
Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZm9yIG9zX25hbWUsIG9zX21hcCBpbiBtYXAuaXRl
cml0ZW1zKCk6CisgICAgICAgICAgICAgICAgZm9yIHZlcnNpb25fbmFtZSwgdmVyc2lvbiBpbiBv
c19tYXAuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RyaXBfbmFt
ZV9mb3JtYXR0aW5nKHZlcnNpb25fbmFtZSkgPT0gdW5mb3JtYXR0ZWQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gKG9zX25hbWUsIHZlcnNpb24pCisgICAgICAgIHJldHVybiAoTm9u
ZSwgTm9uZSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFt
ZV9tYXBfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vdmVyc2lvbl9uYW1lX21hcF91bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwX3VuaXR0ZXN0LnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5zeXN0ZW1ob3N0IGltcG9ydCBTeXN0ZW1Ib3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi52
ZXJzaW9uIGltcG9ydCBWZXJzaW9uCitmcm9tIHZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFZlcnNp
b25OYW1lTWFwCisKKworY2xhc3MgVmVyc2lvbk1hcFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNl
KToKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfc3lzdGVtX3BsYXRmb3JtKHNlbGYpOgorICAgICAg
ICBob3N0ID0gU3lzdGVtSG9zdCgpCisgICAgICAgIG1hcCA9IFZlcnNpb25OYW1lTWFwKHBsYXRm
b3JtPWhvc3QucGxhdGZvcm0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwLmRlZmF1bHRf
c3lzdGVtX3BsYXRmb3JtLCBob3N0LnBsYXRmb3JtLm9zX25hbWUpCisKKyAgICBkZWYgdGVzdF9t
YWNfdmVyc2lvbl9ieV9uYW1lKHNlbGYpOgorICAgICAgICBtYXAgPSBWZXJzaW9uTmFtZU1hcCgp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCdtYWMnLCBWZXJzaW9uKCcxMC4xMicpKSwgbWFw
LmZyb21fbmFtZSgnU2llcnJhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCdtYWMnLCBW
ZXJzaW9uKCcxMC4xMicpKSwgbWFwLmZyb21fbmFtZSgnc2llcnJhJykpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoKCdtYWMnLCBWZXJzaW9uKCcxMC4xMScpKSwgbWFwLmZyb21fbmFtZSgnRWwg
Q2FwaXRhbicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnbWFjJywgVmVyc2lvbignMTAu
MTEnKSksIG1hcC5mcm9tX25hbWUoJ2VsY2FwaXRhbicpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCgnbWFjJywgVmVyc2lvbignMTAuMTEnKSksIG1hcC5mcm9tX25hbWUoJ2VsIENhcGl0YW4n
KSkKKworICAgIGRlZiB0ZXN0X2lvc192ZXJzaW9uX2J5X25hbWUoc2VsZik6CisgICAgICAgIG1h
cCA9IFZlcnNpb25OYW1lTWFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ2lvcycsIFZl
cnNpb24oMTEpKSwgbWFwLmZyb21fbmFtZSgnaU9TIDExJykpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoKCdpb3MnLCBWZXJzaW9uKDExKSksIG1hcC5mcm9tX25hbWUoJ2lvczExJykpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCdpb3MnLCBWZXJzaW9uKDExKSksIG1hcC5mcm9tX25hbWUo
J2lPUyAxMS4yJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCdpb3MnLCBWZXJzaW9uKDEx
KSksIG1hcC5mcm9tX25hbWUoJ2lvczExLjInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgo
J2lvcycsIFZlcnNpb24oMTEpKSwgbWFwLmZyb21fbmFtZSgnaU9TMTEuMicpKQorCisgICAgZGVm
IHRlc3RfbWFjX25hbWVfYnlfdmVyc2lvbihzZWxmKToKKyAgICAgICAgbWFwID0gVmVyc2lvbk5h
bWVNYXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdTaWVycmEnLCBtYXAudG9fbmFtZSh2
ZXJzaW9uPVZlcnNpb24oJzEwLjEyJyksIHBsYXRmb3JtPSdtYWMnKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnRWwgQ2FwaXRhbicsIG1hcC50b19uYW1lKHZlcnNpb249VmVyc2lvbignMTAu
MTEnKSwgcGxhdGZvcm09J21hYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdFbCBDYXBp
dGFuJywgbWFwLnRvX25hbWUodmVyc2lvbj1WZXJzaW9uKCcxMC4xMS4zJyksIHBsYXRmb3JtPSdt
YWMnKSkKKworICAgIGRlZiB0ZXN0X2lvc19uYW1lX2J5X3ZlcnNpb24oc2VsZik6CisgICAgICAg
IG1hcCA9IFZlcnNpb25OYW1lTWFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaU9TIDEx
JywgbWFwLnRvX25hbWUodmVyc2lvbj1WZXJzaW9uKCcxMScpLCBwbGF0Zm9ybT0naW9zJykpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2lPUyAxMCcsIG1hcC50b19uYW1lKHZlcnNpb249VmVy
c2lvbignMTAnKSwgcGxhdGZvcm09J2lvcycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdp
T1MgMTAnLCBtYXAudG9fbmFtZSh2ZXJzaW9uPVZlcnNpb24oJzEwLjMnKSwgcGxhdGZvcm09J2lv
cycpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVz
dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9u
X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMjQ5ODApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi92ZXJzaW9uX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1
LDIyIEBAIGNsYXNzIFZlcnNpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSkKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzdHIoVmVyc2lvbignMS4yJykpLCAnMS4yJykKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzdHIoVmVyc2lvbignMC4wLjMnKSksICcwLjAuMycpCiAKKyAgICBkZWYg
dGVzdF9jb250YWluZWRfaW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShWZXJzaW9u
KCcxMS4xJykuY29udGFpbmVkX2luKFZlcnNpb24oJzExJykpKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoVmVyc2lvbignMTEuMS4yJykuY29udGFpbmVkX2luKFZlcnNpb24oJzExLjEnKSkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVmVyc2lvbignMTEnKS5jb250YWluZWRfaW4oVmVyc2lv
bignMTEuMScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShWZXJzaW9uKCcxMScpLmNvbnRh
aW5lZF9pbihWZXJzaW9uKCcxMS4xLjInKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVmVy
c2lvbignMTEuMScpLmNvbnRhaW5lZF9pbihWZXJzaW9uKCcxMS4xLjInKSkpCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShWZXJzaW9uKCcxMScpLmNvbnRhaW5lZF9pbihWZXJzaW9uKCcxMScpKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFZlcnNpb24oJzExLjEnKS5jb250YWluZWRfaW4oVmVy
c2lvbignMTEuMScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFZlcnNpb24oJzExLjEuMicp
LmNvbnRhaW5lZF9pbihWZXJzaW9uKCcxMS4xLjInKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShWZXJzaW9uKCcxMScpLmNvbnRhaW5lZF9pbihWZXJzaW9uKCcxMS4wJykpKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUoVmVyc2lvbignMTEuMCcpLmNvbnRhaW5lZF9pbihWZXJzaW9uKCcxMScp
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFZlcnNpb24oJzExJykuY29udGFpbmVkX2luKFZl
cnNpb24oJzExLjAuMCcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFZlcnNpb24oJzExLjAu
MCcpLmNvbnRhaW5lZF9pbihWZXJzaW9uKCcxMScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KFZlcnNpb24oJzExLjEnKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEuMS4wJykpKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUoVmVyc2lvbignMTEuMS4wJykuY29udGFpbmVkX2luKFZlcnNpb24o
JzExLjEnKSkpCisKICAgICBkZWYgdGVzdF9jb21wYXJlX3ZlcnNpb25zKHNlbGYpOgogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKFZlcnNpb24oJzEuMi4zJyksIFZlcnNpb24oJzEuMi4zJykpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihWZXJzaW9uKCcxLjIuNCcpLCBWZXJzaW9uKCcxLjIu
MycpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3Jt
aW5mby5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vcGxhdGZvcm1pbmZvLnB5CShyZXZpc2lvbiAyMjQ5ODApCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBAIGltcG9ydCByZQogaW1wb3J0IHN5cwogCiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25h
bWVfbWFwIGltcG9ydCBWZXJzaW9uTmFtZU1hcAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlCiAKIApAQCAtNTEsMTQgKzUyLDIxIEBAIGNsYXNz
IFBsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBleGVjdXRp
dmUKICAgICAgICAgc2VsZi5fcGxhdGZvcm1fbW9kdWxlID0gcGxhdGZvcm1fbW9kdWxlCiAgICAg
ICAgIHNlbGYub3NfbmFtZSA9IHNlbGYuX2RldGVybWluZV9vc19uYW1lKHN5c19tb2R1bGUucGxh
dGZvcm0pCi0gICAgICAgIGlmIHNlbGYub3NfbmFtZSA9PSAnbGludXgnOgotICAgICAgICAgICAg
c2VsZi5vc192ZXJzaW9uID0gc2VsZi5fZGV0ZXJtaW5lX2xpbnV4X3ZlcnNpb24oKQotICAgICAg
ICBpZiBzZWxmLm9zX25hbWUgPT0gJ2ZyZWVic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnb3BlbmJz
ZCcgb3Igc2VsZi5vc19uYW1lID09ICduZXRic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnaW9zJzoK
LSAgICAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHBsYXRmb3JtX21vZHVsZS5yZWxlYXNlKCkK
KyAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gTm9uZQorCiAgICAgICAgIGlmIHNlbGYub3NfbmFt
ZS5zdGFydHN3aXRoKCdtYWMnKToKLSAgICAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHNlbGYu
X2RldGVybWluZV9tYWNfdmVyc2lvbihWZXJzaW9uKHBsYXRmb3JtX21vZHVsZS5tYWNfdmVyKClb
MF0pKQotICAgICAgICBpZiBzZWxmLm9zX25hbWUuc3RhcnRzd2l0aCgnd2luJyk6Ci0gICAgICAg
ICAgICBzZWxmLm9zX3ZlcnNpb24gPSBzZWxmLl9kZXRlcm1pbmVfd2luX3ZlcnNpb24oc2VsZi5f
d2luX3ZlcnNpb24oc3lzX21vZHVsZSkpCisgICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBW
ZXJzaW9uTmFtZU1hcC5tYXAoc2VsZikudG9fbmFtZShWZXJzaW9uKHBsYXRmb3JtX21vZHVsZS5t
YWNfdmVyKClbMF0pLCB0YWJsZT0ncHVibGljJykKKyAgICAgICAgZWxpZiBzZWxmLm9zX25hbWUu
c3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBWZXJzaW9u
TmFtZU1hcC5tYXAoc2VsZikudG9fbmFtZShzZWxmLl93aW5fdmVyc2lvbihzeXNfbW9kdWxlKSwg
dGFibGU9J3B1YmxpYycpCisgICAgICAgIGVsaWYgc2VsZi5vc19uYW1lID09ICdmcmVlYnNkJzoK
KyAgICAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IFZlcnNpb25OYW1lTWFwLm1hcChzZWxmKS50
b19uYW1lKHBsYXRmb3JtX21vZHVsZS5yZWxlYXNlKCkuc3BsaXQoJy0nKVswXSwgdGFibGU9J3B1
YmxpYycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIE1vc3Qgb3RoZXIgcGxhdGZvcm1z
IChuYW1lbHkgTGludXggYW5kIGlPUykgcmV0dXJuIGNvbmZvcm1pbmcgdmVyc2lvbiBzdHJpbmdz
LgorICAgICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYp
LnRvX25hbWUoVmVyc2lvbihwbGF0Zm9ybV9tb2R1bGUucmVsZWFzZSgpKSwgdGFibGU9J3B1Ymxp
YycpCisKKyAgICAgICAgYXNzZXJ0IHNlbGYub3NfdmVyc2lvbiBpcyBub3QgTm9uZQorICAgICAg
ICBzZWxmLm9zX3ZlcnNpb24gPSBzZWxmLm9zX3ZlcnNpb24ubG93ZXIoKS5yZXBsYWNlKCcgJywg
JycpCisKICAgICAgICAgc2VsZi5faXNfY3lnd2luID0gc3lzX21vZHVsZS5wbGF0Zm9ybSA9PSAn
Y3lnd2luJwogCiAgICAgZGVmIGlzX21hYyhzZWxmKToKQEAgLTE2NCw0MCArMTcyLDYgQEAgY2xh
c3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gJ2hhaWt1JwogICAg
ICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigndW5yZWNvZ25pemVkIHBsYXRmb3JtIHN0cmluZyAi
JXMiJyAlIHN5c19wbGF0Zm9ybSkKIAotICAgIGRlZiBfZGV0ZXJtaW5lX21hY192ZXJzaW9uKHNl
bGYsIG1hY192ZXJzaW9uKToKLSAgICAgICAgdmVyc2lvbl9zdHJpbmdzID0gewotICAgICAgICAg
ICAgNTogJ2xlb3BhcmQnLAotICAgICAgICAgICAgNjogJ3Nub3dsZW9wYXJkJywKLSAgICAgICAg
ICAgIDc6ICdsaW9uJywKLSAgICAgICAgICAgIDg6ICdtb3VudGFpbmxpb24nLAotICAgICAgICAg
ICAgOTogJ21hdmVyaWNrcycsCi0gICAgICAgICAgICAxMDogJ3lvc2VtaXRlJywKLSAgICAgICAg
ICAgIDExOiAnZWxjYXBpdGFuJywKLSAgICAgICAgICAgIDEyOiAnc2llcnJhJywKLSAgICAgICAg
ICAgIDEzOiAnaGlnaHNpZXJyYScsCi0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0IG1hY192ZXJz
aW9uLm1pbm9yID49IG1pbih2ZXJzaW9uX3N0cmluZ3Mua2V5cygpKQotICAgICAgICByZXR1cm4g
dmVyc2lvbl9zdHJpbmdzLmdldChtYWNfdmVyc2lvbi5taW5vciwgJ2Z1dHVyZScpCi0KLSAgICBk
ZWYgX2RldGVybWluZV9saW51eF92ZXJzaW9uKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiB3ZSBp
Z25vcmUgd2hhdGV2ZXIgdGhlIHJlYWwgdmVyc2lvbiBpcyBhbmQgcHJldGVuZCBpdCdzIGx1Y2lk
IGZvciBub3cuCi0gICAgICAgIHJldHVybiAnbHVjaWQnCi0KLSAgICBkZWYgX2RldGVybWluZV93
aW5fdmVyc2lvbihzZWxmLCB3aW5fdmVyc2lvbik6Ci0gICAgICAgIGlmIHNlbGYuX3BsYXRmb3Jt
X21vZHVsZS5yZWxlYXNlKCkgPT0gJzEwJzoKLSAgICAgICAgICAgIHJldHVybiAnd2luMTAnCi0g
ICAgICAgIGlmIHdpbl92ZXJzaW9uLm1ham9yID09IDAgYW5kIHdpbl92ZXJzaW9uLm1pbm9yID09
IDA6Ci0gICAgICAgICAgICBpZiB3aW5fdmVyc2lvblsyXSA+IDEwMDAwOgotICAgICAgICAgICAg
ICAgIHJldHVybiAnd2luMTAnCi0gICAgICAgIGlmIHdpbl92ZXJzaW9uID09IFZlcnNpb24oWzYs
IDEsIDc2MDBdKToKLSAgICAgICAgICAgIHJldHVybiAnN3NwMCcKLSAgICAgICAgaWYgd2luX3Zl
cnNpb24ubWFqb3IgPT0gNiBhbmQgd2luX3ZlcnNpb24ubWlub3IgPT0gMDoKLSAgICAgICAgICAg
IHJldHVybiAndmlzdGEnCi0gICAgICAgIGlmIHdpbl92ZXJzaW9uLm1ham9yID09IDUgYW5kIHdp
bl92ZXJzaW9uLm1pbm9yID09IDE6Ci0gICAgICAgICAgICByZXR1cm4gJ3hwJwotICAgICAgICBh
c3NlcnQgd2luX3ZlcnNpb25bMF0gPiA2IG9yIHdpbl92ZXJzaW9uWzFdID49IDEsICdVbnJlY29n
bml6ZWQgV2luZG93cyB2ZXJzaW9uOiAie30iJy5mb3JtYXQod2luX3ZlcnNpb24pCi0gICAgICAg
IHJldHVybiAnZnV0dXJlJwotCiAgICAgZGVmIF93aW5fdmVyc2lvbihzZWxmLCBzeXNfbW9kdWxl
KToKICAgICAgICAgaWYgaGFzYXR0cihzeXNfbW9kdWxlLCAnZ2V0d2luZG93c3ZlcnNpb24nKToK
ICAgICAgICAgICAgIHJldHVybiBWZXJzaW9uKHN5c19tb2R1bGUuZ2V0d2luZG93c3ZlcnNpb24o
KVswOjNdKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRm
b3JtaW5mb191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMjQ5ODAp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3Vu
aXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC04NywxMyArODcsMTMgQEAgY2xhc3MgVGVzdFBs
YXRmb3JtSW5mbyh1bml0dGVzdC5UZXN0Q2FzZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05v
bmUoaW5mby50b3RhbF9ieXRlc19tZW1vcnkoKSkKIAogICAgIGRlZiB0ZXN0X29zX25hbWVfYW5k
X3dyYXBwZXJzKHNlbGYpOgotICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMo
J2xpbnV4MicpKQorICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4
MicpLCBmYWtlX3BsYXRmb3JtKCcnLCAnMTAuNCcpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUo
aW5mby5pc19saW51eCgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluZm8uaXNfbWFjKCkp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5pc193aW4oKSkKICAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShpbmZvLmlzX2ZyZWVic2QoKSkKIAotICAgICAgICBpbmZvID0gc2VsZi5tYWtl
X2luZm8oZmFrZV9zeXMoJ2xpbnV4MycpKQorICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8o
ZmFrZV9zeXMoJ2xpbnV4MycpLCBmYWtlX3BsYXRmb3JtKCcnLCAnMTAuNCcpKQogICAgICAgICBz
ZWxmLmFzc2VydFRydWUoaW5mby5pc19saW51eCgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KGluZm8uaXNfbWFjKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5pc193aW4oKSkK
QEAgLTEyMiw3ICsxMjIsNyBAQCBjbGFzcyBUZXN0UGxhdGZvcm1JbmZvKHVuaXR0ZXN0LlRlc3RD
YXNlCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5pc19uYXRpdmVfd2luKCkpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5pc19mcmVlYnNkKCkpCiAKLSAgICAgICAgaW5mbyA9
IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdmcmVlYnNkOCcpKQorICAgICAgICBpbmZvID0gc2Vs
Zi5tYWtlX2luZm8oZmFrZV9zeXMoJ2ZyZWVic2Q4JyksIGZha2VfcGxhdGZvcm0oJycsICc4LjMt
UFJFUkVMRUFTRScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8ub3NfbmFtZSwgJ2Zy
ZWVic2QnKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluZm8uaXNfbGludXgoKSkKICAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShpbmZvLmlzX21hYygpKQpAQCAtMTQ0LDE5ICsxNDQsMjAgQEAg
Y2xhc3MgVGVzdFBsYXRmb3JtSW5mbyh1bml0dGVzdC5UZXN0Q2FzZQogICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdkYXJ3aW4nKSwgZmFrZV9wbGF0Zm9y
bSgnMTAuMTMuMCcpKS5vc192ZXJzaW9uLCAnaGlnaHNpZXJyYScpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3Jt
KCcxMC4xNC4wJykpLm9zX3ZlcnNpb24sICdmdXR1cmUnKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4MicpKS5vc192ZXJzaW9uLCAnbHVj
aWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCds
aW51eDInKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzEwLjQnKSkub3NfdmVyc2lvbiwgJ2x1Y2lkJykK
IAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdmcmVl
YnNkOCcpLCBmYWtlX3BsYXRmb3JtKCcnLCAnOC4zLVBSRVJFTEVBU0UnKSkub3NfdmVyc2lvbiwg
JzguMy1QUkVSRUxFQVNFJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5m
byhmYWtlX3N5cygnZnJlZWJzZDknKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzkuMC1SRUxFQVNFJykp
Lm9zX3ZlcnNpb24sICc5LjAtUkVMRUFTRScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vs
Zi5tYWtlX2luZm8oZmFrZV9zeXMoJ2ZyZWVic2Q4JyksIGZha2VfcGxhdGZvcm0oJycsICc4LjMt
UFJFUkVMRUFTRScpKS5vc192ZXJzaW9uLCAnZnJlZWJzZDgnKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdmcmVlYnNkOScpLCBmYWtlX3BsYXRmb3Jt
KCcnLCAnOS4wLVJFTEVBU0UnKSkub3NfdmVyc2lvbiwgJ2ZyZWVic2Q5JykKIAogICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgc2VsZi5tYWtlX2luZm8sIGZha2Vfc3lz
KCd3aW4zMicsIHR1cGxlKFs1LCAwLCAxMjM0XSkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3aW4zMicsIHR1cGxlKFs2LCAyLCAxMjM0XSkpKS5v
c192ZXJzaW9uLCAnZnV0dXJlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2Vf
aW5mbyhmYWtlX3N5cygnd2luMzInLCB0dXBsZShbMTAsIDAsIDE0MzkzXSkpKS5vc192ZXJzaW9u
LCAnd2luMTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vf
c3lzKCd3aW4zMicsIHR1cGxlKFs2LCAyLCAxMjM0XSkpKS5vc192ZXJzaW9uLCAnOCcpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMyJywgdHVw
bGUoWzYsIDEsIDc2MDBdKSkpLm9zX3ZlcnNpb24sICc3c3AwJykKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnd2luMzInLCB0dXBsZShbNiwgMCwgMTIz
NF0pKSkub3NfdmVyc2lvbiwgJ3Zpc3RhJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxm
Lm1ha2VfaW5mbyhmYWtlX3N5cygnd2luMzInLCB0dXBsZShbNSwgMSwgMTIzNF0pKSkub3NfdmVy
c2lvbiwgJ3hwJykKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwg
c2VsZi5tYWtlX2luZm8sIGZha2Vfc3lzKCd3aW4zMicpLCBleGVjdXRpdmU9ZmFrZV9leGVjdXRp
dmUoJzUuMC4xMjM0JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8o
ZmFrZV9zeXMoJ2N5Z3dpbicpLCBleGVjdXRpdmU9ZmFrZV9leGVjdXRpdmUoJzYuMi4xMjM0Jykp
Lm9zX3ZlcnNpb24sICdmdXR1cmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFr
ZV9pbmZvKGZha2Vfc3lzKCdjeWd3aW4nKSwgZXhlY3V0aXZlPWZha2VfZXhlY3V0aXZlKCc2LjIu
MTIzNCcpKS5vc192ZXJzaW9uLCAnOCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5t
YWtlX2luZm8oZmFrZV9zeXMoJ2N5Z3dpbicpLCBleGVjdXRpdmU9ZmFrZV9leGVjdXRpdmUoJzYu
MS43NjAwJykpLm9zX3ZlcnNpb24sICc3c3AwJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnY3lnd2luJyksIGV4ZWN1dGl2ZT1mYWtlX2V4ZWN1dGl2
ZSgnNi4wLjEyMzQnKSkub3NfdmVyc2lvbiwgJ3Zpc3RhJykKICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnY3lnd2luJyksIGV4ZWN1dGl2ZT1mYWtlX2V4
ZWN1dGl2ZSgnNS4xLjEyMzQnKSkub3NfdmVyc2lvbiwgJ3hwJykKQEAgLTE2OCwxMCArMTY5LDEw
IEBAIGNsYXNzIFRlc3RQbGF0Zm9ybUluZm8odW5pdHRlc3QuVGVzdENhc2UKICAgICAgICAgaW5m
byA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3aW4zMicsIHR1cGxlKFs2LCAxLCA3NjAwXSkp
KQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykK
IAotICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4MicpKQorICAg
ICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4MicpLCBmYWtlX3BsYXRm
b3JtKCcnLCAnMTAuNCcpKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhpbmZvLmRpc3Bs
YXlfbmFtZSgpLCAnJykKIAotICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMo
J2ZyZWVic2Q5JykpCisgICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZnJl
ZWJzZDknKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzkuMC1SRUxFQVNFJykpCiAgICAgICAgIHNlbGYu
YXNzZXJ0Tm90RXF1YWxzKGluZm8uZGlzcGxheV9uYW1lKCksICcnKQogCiAgICAgZGVmIHRlc3Rf
dG90YWxfYnl0ZXNfbWVtb3J5KHNlbGYpOgpAQCAtMTgxLDggKzE4Miw4IEBAIGNsYXNzIFRlc3RQ
bGF0Zm9ybUluZm8odW5pdHRlc3QuVGVzdENhc2UKICAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9p
bmZvKGZha2Vfc3lzKCd3aW4zMicsIHR1cGxlKFs2LCAxLCA3NjAwXSkpKQogICAgICAgICBzZWxm
LmFzc2VydElzTm9uZShpbmZvLnRvdGFsX2J5dGVzX21lbW9yeSgpKQogCi0gICAgICAgIGluZm8g
PSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnbGludXgyJykpCisgICAgICAgIGluZm8gPSBzZWxm
Lm1ha2VfaW5mbyhmYWtlX3N5cygnbGludXgyJyksIGZha2VfcGxhdGZvcm0oJycsICcxMC40Jykp
CiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGluZm8udG90YWxfYnl0ZXNfbWVtb3J5KCkpCiAK
LSAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdmcmVlYnNkOScpKQorICAg
ICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2ZyZWVic2Q5JyksIGZha2VfcGxh
dGZvcm0oJycsICc5LjAtUkVMRUFTRScpKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbmZv
LnRvdGFsX2J5dGVzX21lbW9yeSgpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327644</attachid>
            <date>2017-11-27 10:13:05 -0800</date>
            <delta_ts>2017-11-27 10:57:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179621-20171127101304.patch</filename>
            <type>text/plain</type>
            <size>23929</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNTE3OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU0IEBACisyMDE3LTExLTI3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogQmV0dGVyIG5hbWUtdmVyc2lvbiBtYXBwaW5nIChQYXJ0
IDEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk2
MjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM1NTg5NTg1PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhdmlkIEtpbHplci4KKworICAgICAgICBNYXBwaW5nIHZlcnNpb24gbnVtYmVycyB0byB2
ZXJzaW9uIG5hbWVzIHNob3VsZCBvY2N1ciBpbiBhIGNlbnRyYWwgbG9jYXRpb24uCisgICAgICAg
IFRoaXMgaGFzIGEgZmV3IGFkdmFudGFnZXMuIEZpcnN0LCBpdCBtYWtlcyBpdGVyYXRpbmcgdGhy
b3VnaCB2ZXJzaW9ucyBlYXNpZXIuCisgICAgICAgIFNlY29uZCwgaXQgYWxsb3dzIGZvciBhcHBs
ZV9hZGRpdGlvbnMgdG8gZGVmaW5lIGFuIGFkZGl0aW9uYWwgc2V0IG9mIG5hbWUKKyAgICAgICAg
bWFwcGluZ3MuIExhc3RseSwgaXQgd2lsbCBhbGxvdywgaW4gYSBmdXR1cmUgcGF0Y2gsIGZvciB1
cyB0byB0cmFjayB2ZXJzaW9uCisgICAgICAgIGluc3RlYWQgb2YgdmVyc2lvbiBuYW1lLCBvbmx5
IG1hcHBpbmcgdmVyc2lvbiB0byB2ZXJzaW9uIG5hbWUgd2hlbiByZXF1aXJlZC4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHk6CisgICAg
ICAgIChQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoUGxhdGZvcm1JbmZvLl9kZXRl
cm1pbmVfb3NfbmFtZSk6IFVzZSBWZXJzaW9uTmFtZU1hcCBpbnN0ZWFkIG9mIGN1c3RvbSBmdW5j
dGlvbnMKKyAgICAgICAgbWFwcGluZyB2ZXJzaW9uIHRvIG5hbWUuCisgICAgICAgIChQbGF0Zm9y
bUluZm8uX2RldGVybWluZV9saW51eF92ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRm
b3JtSW5mby5fZGV0ZXJtaW5lX21hY192ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRm
b3JtSW5mby5fZGV0ZXJtaW5lX3dpbl92ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAoVGVzdFBsYXRmb3JtSW5mby50ZXN0X29zX25hbWVfYW5kX3dyYXBwZXJzKToKKyAgICAg
ICAgKFRlc3RQbGF0Zm9ybUluZm8udGVzdF9vc192ZXJzaW9uKToKKyAgICAgICAgKFRlc3RQbGF0
Zm9ybUluZm8udGVzdF9kaXNwbGF5X25hbWUpOgorICAgICAgICAoVGVzdFBsYXRmb3JtSW5mby50
ZXN0X3RvdGFsX2J5dGVzX21lbW9yeSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21t
b24vdmVyc2lvbi5weToKKyAgICAgICAgKFZlcnNpb24uY29udGFpbmVkX2luKTogQWRkIHBhcnRp
YWwgdmVyc2lvbiBtYXBwaW5nLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Zl
cnNpb25fbmFtZV9tYXAucHk6IEFkZGVkLgorICAgICAgICAoVmVyc2lvbk5hbWVNYXApOiBIb2xk
cyBhIG1hcHBpbmcgb2YgdmVyc2lvbiBuYW1lIHRvIHZlcnNpb24gb2JqZWN0LgorICAgICAgICAo
VmVyc2lvbk5hbWVNYXAubWFwKTogRG9uJ3QgcmUtY3JlYXRlIFZlcnNpb25OYW1lTWFwIGV2ZXJ5
IHRpbWUuCisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5fX2luaXRfXyk6IEluaXRpYWxpemUgbWFw
cGluZywgdXNlIHBsYXRmb3JtIHRvCisgICAgICAgIGRlZmluZSB0aGUgZGVmYXVsdCBzeXN0ZW0g
cGxhdGZvcm0uCisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5fYXV0b21hcF90b19tYWpvcl92ZXJz
aW9uKTogU29tZSBvcGVyYXRpbmcgc3lzdGVtcywgc3VjaAorICAgICAgICBhcyBpT1MsIGhhdmUg
YSBuYW1pbmcgc2NoZW1lIGJhc2VkIG9uIHRoZWlyIG1ham9yIHZlcnNpb24gYW5kIG9zIG5hbWUu
CisgICAgICAgIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgc3VjaCBtYXBwaW5ncy4KKyAgICAgICAg
KFZlcnNpb25OYW1lTWFwLnRvX25hbWUpOiBHaXZlbiBhIHZlcnNpb24gb2JqZWN0LCBwbGF0Zm9y
bSBuYW1lIGFuZAorICAgICAgICB0YWJsZSwgZmluZCB0aGUgY2xvc2VzdCBtYXRjaGluZyB2ZXJz
aW9uIG5hbWUuCisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5zdHJpcF9uYW1lX2Zvcm1hdHRpbmcp
OiBSZW1vdmUgc3BhY2VzIGFuZCBleHRyYWN0IHRoZSBtYWpvciB2ZXJzaW9uLAorICAgICAgICBp
ZiBhIHZlcnNpb24gc3RyaW5nIGlzIGluY2x1ZGVkIGluIHRoZSBuYW1lLgorICAgICAgICAoVmVy
c2lvbk5hbWVNYXAuZnJvbV9uYW1lKTogUmV0dXJuIGFuIG9zIG5hbWUgYW5kIHZlcnNpb24gZ2l2
ZW4gYSB2ZXJzaW9uIG5hbWUuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVy
c2lvbl9uYW1lX21hcF91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChWZXJzaW9uTWFwVGVz
dENhc2UpOgorICAgICAgICAoVmVyc2lvbk1hcFRlc3RDYXNlLnRlc3RfZGVmYXVsdF9zeXN0ZW1f
cGxhdGZvcm0pOgorICAgICAgICAoVmVyc2lvbk1hcFRlc3RDYXNlLnRlc3RfbWFjX3ZlcnNpb25f
YnlfbmFtZSk6CisgICAgICAgIChWZXJzaW9uTWFwVGVzdENhc2UudGVzdF9pb3NfdmVyc2lvbl9i
eV9uYW1lKToKKyAgICAgICAgKFZlcnNpb25NYXBUZXN0Q2FzZS50ZXN0X21hY19uYW1lX2J5X3Zl
cnNpb24pOgorICAgICAgICAoVmVyc2lvbk1hcFRlc3RDYXNlLnRlc3RfaW9zX25hbWVfYnlfdmVy
c2lvbik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVz
dC5weToKKyAgICAgICAgKFZlcnNpb25UZXN0Q2FzZS50ZXN0X2NvbnRhaW5lZF9pbik6CisKIDIw
MTctMTEtMjcgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFtXaW5dIFRoZSBudW1iZXIgb2Ygd2Via2l0LXBhdGNoIGl0ZXJhdGlvbnMgb24gRVdTIHNob3Vs
ZCBiZSBjb25maWd1cmFibGUuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92
ZXJzaW9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Zl
cnNpb24ucHkJKHJldmlzaW9uIDIyNTE3OCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3ZlcnNpb24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDE2IEBAIGNsYXNzIFZl
cnNpb24ob2JqZWN0KToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1ZlcnNpb24ga2V5
IG11c3QgYmUgbWFqb3IsIG1pbm9yLCB0aW55LCBtaWNybyBvciBuYW5vJykKICAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcignRXhwZWN0ZWQgdmVyc2lvbiBrZXkgdG8gYmUgc3RyaW5nIG9yIGludGVn
ZXInKQogCisgICAgIyAxMS4yIGlzIGNvbnRhaW5lZCBpbiAxMSwgYnV0IDExIGlzIG5vdCBjb250
YWluZWQgaW4gMTEuMgorICAgIGRlZiBjb250YWluZWRfaW4oc2VsZiwgdmVyc2lvbik6CisgICAg
ICAgIGRvZXNfbWF0Y2ggPSBUcnVlCisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oc2VsZikp
OgorICAgICAgICAgICAgaWYgc2VsZltpXSAhPSB2ZXJzaW9uW2ldOgorICAgICAgICAgICAgICAg
IGRvZXNfbWF0Y2ggPSBGYWxzZQorICAgICAgICAgICAgaWYgbm90IGRvZXNfbWF0Y2ggYW5kIHZl
cnNpb25baV0gIT0gMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0
dXJuIFRydWUKKwogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICBsZW5fdG9fcHJpbnQg
PSAxCiAgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oc2VsZikpOgpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl9uYW1lX21hcC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwLnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXAu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHJlCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLm1l
bW9pemVkIGltcG9ydCBtZW1vaXplZAorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBv
cnQgVmVyc2lvbgorCisKK2NsYXNzIFZlcnNpb25OYW1lTWFwKG9iamVjdCk6CisKKyAgICAjIEFs
bG93cyBhcHBsZV9hZGRpdGlvbnMgdG8gZGVmaW5lIGEgY3VzdG9tIG1hcHBpbmcKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgQG1lbW9pemVkCisgICAgZGVmIG1hcChwbGF0Zm9ybT1Ob25lKToKKyAg
ICAgICAgcmV0dXJuIFZlcnNpb25OYW1lTWFwKHBsYXRmb3JtPXBsYXRmb3JtKQorCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHBsYXRmb3JtPU5vbmUpOgorICAgICAgICBpZiBwbGF0Zm9ybSBpcyBO
b25lOgorICAgICAgICAgICAgZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3Qg
aW1wb3J0IFN5c3RlbUhvc3QKKyAgICAgICAgICAgIHBsYXRmb3JtID0gU3lzdGVtSG9zdCgpLnBs
YXRmb3JtCisgICAgICAgIHNlbGYubWFwcGluZyA9IHt9CisKKyAgICAgICAgc2VsZi5kZWZhdWx0
X3N5c3RlbV9wbGF0Zm9ybSA9IHBsYXRmb3JtLm9zX25hbWUKKyAgICAgICAgc2VsZi5tYXBwaW5n
WydwdWJsaWMnXSA9IHsKKyAgICAgICAgICAgICdtYWMnOiB7CisgICAgICAgICAgICAgICAgJ0xl
b3BhcmQnOiBWZXJzaW9uKCcxMC41JyksCisgICAgICAgICAgICAgICAgJ1Nub3cgTGVvcGFyZCc6
IFZlcnNpb24oJzEwLjYnKSwKKyAgICAgICAgICAgICAgICAnTGlvbic6IFZlcnNpb24oJzEwLjcn
KSwKKyAgICAgICAgICAgICAgICAnTW91bnRhaW4gTGlvbic6IFZlcnNpb24oJzEwLjgnKSwKKyAg
ICAgICAgICAgICAgICAnTWF2ZXJpY2tzJzogVmVyc2lvbignMTAuOScpLAorICAgICAgICAgICAg
ICAgICdZb3NlbWl0ZSc6IFZlcnNpb24oJzEwLjEwJyksCisgICAgICAgICAgICAgICAgJ0VsIENh
cGl0YW4nOiBWZXJzaW9uKCcxMC4xMScpLAorICAgICAgICAgICAgICAgICdTaWVycmEnOiBWZXJz
aW9uKCcxMC4xMicpLAorICAgICAgICAgICAgICAgICdIaWdoIFNpZXJyYSc6IFZlcnNpb24oJzEw
LjEzJyksCisgICAgICAgICAgICAgICAgJ0Z1dHVyZSc6IFZlcnNpb24oJzEwLjE0JyksCisgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgJ2lvcyc6IHNlbGYuX2F1dG9tYXBfdG9fbWFqb3JfdmVy
c2lvbignaU9TJywgbWluaW11bT1WZXJzaW9uKCcxMCcpLCBtYXhpbXVtPVZlcnNpb24oJzExJykp
LAorICAgICAgICAgICAgJ3dpbic6IHsKKyAgICAgICAgICAgICAgICAnV2luMTAnOiBWZXJzaW9u
KCcxMCcpLAorICAgICAgICAgICAgICAgICc4LjEnOiBWZXJzaW9uKCc2LjMnKSwKKyAgICAgICAg
ICAgICAgICAnOCc6IFZlcnNpb24oJzYuMicpLAorICAgICAgICAgICAgICAgICc3c3AwJzogVmVy
c2lvbignNi4xLjc2MDAnKSwKKyAgICAgICAgICAgICAgICAnVmlzdGEnOiBWZXJzaW9uKCc2Jyks
CisgICAgICAgICAgICAgICAgJ1hQJzogVmVyc2lvbignNS4xJyksCisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgJ2ZyZWVic2QnOiB7CisgICAgICAgICAgICAgICAgJ0ZyZWUgQlNEIDgnOiBW
ZXJzaW9uKCc4JyksCisgICAgICAgICAgICAgICAgJ0ZyZWUgQlNEIDknOiBWZXJzaW9uKCc5Jyks
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBf
YXV0b21hcF90b19tYWpvcl92ZXJzaW9uKGNscywgcHJlZml4LCBtaW5pbXVtPVZlcnNpb24oJzEn
KSwgbWF4aW11bT1WZXJzaW9uKCcxJykpOgorICAgICAgICByZXN1bHQgPSB7fQorICAgICAgICBh
c3NlcnQgbWluaW11bSA8PSBtYXhpbXVtCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgobWF4aW11
bS5tYWpvciArIDEpIC0gbWluaW11bS5tYWpvcik6CisgICAgICAgICAgICByZXN1bHRbJ3t9IHt9
Jy5mb3JtYXQocHJlZml4LCBzdHIoVmVyc2lvbihzdHIobWluaW11bS5tYWpvciArIGkpKSkpXSA9
IFZlcnNpb24oc3RyKG1pbmltdW0ubWFqb3IgKyBpKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAor
CisgICAgZGVmIHRvX25hbWUoc2VsZiwgdmVyc2lvbiwgcGxhdGZvcm09Tm9uZSwgdGFibGU9J3B1
YmxpYycpOgorICAgICAgICBwbGF0Zm9ybSA9IHNlbGYuZGVmYXVsdF9zeXN0ZW1fcGxhdGZvcm0g
aWYgcGxhdGZvcm0gaXMgTm9uZSBlbHNlIHBsYXRmb3JtCisgICAgICAgIGFzc2VydCB0YWJsZSBp
biBzZWxmLm1hcHBpbmcKKyAgICAgICAgYXNzZXJ0IHBsYXRmb3JtIGluIHNlbGYubWFwcGluZ1t0
YWJsZV0KKyAgICAgICAgY2xvc2VzdF9tYXRjaCA9IChOb25lLCBOb25lKQorICAgICAgICB2ZXJz
aW9uID0gVmVyc2lvbih2ZXJzaW9uKQorICAgICAgICBmb3Igb3NfbmFtZSwgb3NfdmVyc2lvbiBp
biBzZWxmLm1hcHBpbmdbdGFibGVdW3BsYXRmb3JtXS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAg
IGlmIHZlcnNpb24gPT0gb3NfdmVyc2lvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gb3NfbmFt
ZQorICAgICAgICAgICAgZWxpZiB2ZXJzaW9uLmNvbnRhaW5lZF9pbihvc192ZXJzaW9uKToKKyAg
ICAgICAgICAgICAgICBpZiBjbG9zZXN0X21hdGNoWzFdIGFuZCBjbG9zZXN0X21hdGNoWzFdLmNv
bnRhaW5lZF9pbihvc192ZXJzaW9uKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAg
ICAgICAgICAgICAgICBjbG9zZXN0X21hdGNoID0gKG9zX25hbWUsIG9zX3ZlcnNpb24pCisgICAg
ICAgIHJldHVybiBjbG9zZXN0X21hdGNoWzBdCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IHN0cmlwX25hbWVfZm9ybWF0dGluZyhuYW1lKToKKyAgICAgICAgIyA8T1M+IG1ham9yLm1pbm9y
LnRpbnkgc2hvdWxkIG1hcCB0byA8T1M+IG1ham9yCisgICAgICAgIGlmICcgJyBpbiBuYW1lOgor
ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5hbWUgPSAne317fScuZm9ybWF0KCcn
LmpvaW4obmFtZS5zcGxpdCgnICcpWzotMV0pLCBWZXJzaW9uKG5hbWUuc3BsaXQoJyAnKVstMV0p
Lm1ham9yKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAg
cGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNw
bGl0ID0gcmUuc3BsaXQocidcZCcsIG5hbWUpCisgICAgICAgICAgICAgICAgbmFtZSA9ICd7fXt9
Jy5mb3JtYXQoc3BsaXRbMF0sIFZlcnNpb24obmFtZVsobGVuKHNwbGl0KSAtIDEpOl0pLm1ham9y
KQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwor
CisgICAgICAgICMgU3RyaXAgb3V0IGFueSBzcGFjZXMsIG1ha2UgZXZlcnl0aGluZyBsb3dlci1j
YXNlCisgICAgICAgIHJlc3VsdCA9IG5hbWUucmVwbGFjZSgnICcsICcnKS5sb3dlcigpCisgICAg
ICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBmcm9tX25hbWUoc2VsZiwgbmFtZSk6CisgICAg
ICAgICMgRXhhY3QgbWF0Y2gKKyAgICAgICAgZm9yIF8sIG1hcCBpbiBzZWxmLm1hcHBpbmcuaXRl
cml0ZW1zKCk6CisgICAgICAgICAgICBmb3Igb3NfbmFtZSwgb3NfbWFwIGluIG1hcC5pdGVyaXRl
bXMoKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lIGluIG9zX21hcDoKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIChvc19uYW1lLCBvc19tYXBbbmFtZV0pCisKKyAgICAgICAgIyBJdCdzIG5v
dCBhbiBleGFjdCBtYXRjaCwgbGV0J3MgdHJ5IHVuaWZ5aW5nIGZvcm1hdHRpbmcKKyAgICAgICAg
dW5mb3JtYXR0ZWQgPSBzZWxmLnN0cmlwX25hbWVfZm9ybWF0dGluZyhuYW1lKQorICAgICAgICBm
b3IgXywgbWFwIGluIHNlbGYubWFwcGluZy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBv
c19uYW1lLCBvc19tYXAgaW4gbWFwLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGZvciB2
ZXJzaW9uX25hbWUsIHZlcnNpb24gaW4gb3NfbWFwLml0ZXJpdGVtcygpOgorICAgICAgICAgICAg
ICAgICAgICBpZiBzZWxmLnN0cmlwX25hbWVfZm9ybWF0dGluZyh2ZXJzaW9uX25hbWUpID09IHVu
Zm9ybWF0dGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvc19uYW1lLCB2ZXJz
aW9uKQorICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUpCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXBfdW5pdHRlc3Qu
cHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lv
bl9uYW1lX21hcF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisj
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisj
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB1bml0dGVzdAor
Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9z
dAorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgorZnJvbSB2ZXJz
aW9uX25hbWVfbWFwIGltcG9ydCBWZXJzaW9uTmFtZU1hcAorCisKK2NsYXNzIFZlcnNpb25NYXBU
ZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3N5c3Rl
bV9wbGF0Zm9ybShzZWxmKToKKyAgICAgICAgaG9zdCA9IFN5c3RlbUhvc3QoKQorICAgICAgICBt
YXAgPSBWZXJzaW9uTmFtZU1hcChwbGF0Zm9ybT1ob3N0LnBsYXRmb3JtKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKG1hcC5kZWZhdWx0X3N5c3RlbV9wbGF0Zm9ybSwgaG9zdC5wbGF0Zm9ybS5v
c19uYW1lKQorCisgICAgZGVmIHRlc3RfbWFjX3ZlcnNpb25fYnlfbmFtZShzZWxmKToKKyAgICAg
ICAgbWFwID0gVmVyc2lvbk5hbWVNYXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnbWFj
JywgVmVyc2lvbignMTAuMTInKSksIG1hcC5mcm9tX25hbWUoJ1NpZXJyYScpKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCgnbWFjJywgVmVyc2lvbignMTAuMTInKSksIG1hcC5mcm9tX25hbWUo
J3NpZXJyYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnbWFjJywgVmVyc2lvbignMTAu
MTEnKSksIG1hcC5mcm9tX25hbWUoJ0VsIENhcGl0YW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgoJ21hYycsIFZlcnNpb24oJzEwLjExJykpLCBtYXAuZnJvbV9uYW1lKCdlbGNhcGl0YW4n
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ21hYycsIFZlcnNpb24oJzEwLjExJykpLCBt
YXAuZnJvbV9uYW1lKCdlbCBDYXBpdGFuJykpCisKKyAgICBkZWYgdGVzdF9pb3NfdmVyc2lvbl9i
eV9uYW1lKHNlbGYpOgorICAgICAgICBtYXAgPSBWZXJzaW9uTmFtZU1hcCgpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoKCdpb3MnLCBWZXJzaW9uKDExKSksIG1hcC5mcm9tX25hbWUoJ2lPUyAx
MScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnaW9zJywgVmVyc2lvbigxMSkpLCBtYXAu
ZnJvbV9uYW1lKCdpb3MxMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnaW9zJywgVmVy
c2lvbigxMSkpLCBtYXAuZnJvbV9uYW1lKCdpT1MgMTEuMicpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCgnaW9zJywgVmVyc2lvbigxMSkpLCBtYXAuZnJvbV9uYW1lKCdpb3MxMS4yJykpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCdpb3MnLCBWZXJzaW9uKDExKSksIG1hcC5mcm9tX25h
bWUoJ2lPUzExLjInKSkKKworICAgIGRlZiB0ZXN0X21hY19uYW1lX2J5X3ZlcnNpb24oc2VsZik6
CisgICAgICAgIG1hcCA9IFZlcnNpb25OYW1lTWFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnU2llcnJhJywgbWFwLnRvX25hbWUodmVyc2lvbj1WZXJzaW9uKCcxMC4xMicpLCBwbGF0Zm9y
bT0nbWFjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0VsIENhcGl0YW4nLCBtYXAudG9f
bmFtZSh2ZXJzaW9uPVZlcnNpb24oJzEwLjExJyksIHBsYXRmb3JtPSdtYWMnKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnRWwgQ2FwaXRhbicsIG1hcC50b19uYW1lKHZlcnNpb249VmVyc2lv
bignMTAuMTEuMycpLCBwbGF0Zm9ybT0nbWFjJykpCisKKyAgICBkZWYgdGVzdF9pb3NfbmFtZV9i
eV92ZXJzaW9uKHNlbGYpOgorICAgICAgICBtYXAgPSBWZXJzaW9uTmFtZU1hcCgpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ2lPUyAxMScsIG1hcC50b19uYW1lKHZlcnNpb249VmVyc2lvbign
MTEnKSwgcGxhdGZvcm09J2lvcycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdpT1MgMTAn
LCBtYXAudG9fbmFtZSh2ZXJzaW9uPVZlcnNpb24oJzEwJyksIHBsYXRmb3JtPSdpb3MnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaU9TIDEwJywgbWFwLnRvX25hbWUodmVyc2lvbj1WZXJz
aW9uKCcxMC4zJyksIHBsYXRmb3JtPSdpb3MnKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVzdC5weQkocmV2aXNpb24gMjI1MTc4KQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVzdC5weQkod29y
a2luZyBjb3B5KQpAQCAtMTI1LDYgKzEyNSwyMiBAQCBjbGFzcyBWZXJzaW9uVGVzdENhc2UodW5p
dHRlc3QuVGVzdENhc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFZlcnNpb24oJzEu
MicpKSwgJzEuMicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFZlcnNpb24oJzAuMC4z
JykpLCAnMC4wLjMnKQogCisgICAgZGVmIHRlc3RfY29udGFpbmVkX2luKHNlbGYpOgorICAgICAg
ICBzZWxmLmFzc2VydFRydWUoVmVyc2lvbignMTEuMScpLmNvbnRhaW5lZF9pbihWZXJzaW9uKCcx
MScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFZlcnNpb24oJzExLjEuMicpLmNvbnRhaW5l
ZF9pbihWZXJzaW9uKCcxMS4xJykpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFZlcnNpb24o
JzExJykuY29udGFpbmVkX2luKFZlcnNpb24oJzExLjEnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UoVmVyc2lvbignMTEnKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEuMS4yJykpKQorICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKFZlcnNpb24oJzExLjEnKS5jb250YWluZWRfaW4oVmVyc2lv
bignMTEuMS4yJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoVmVyc2lvbignMTEnKS5jb250
YWluZWRfaW4oVmVyc2lvbignMTEnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShWZXJzaW9u
KCcxMS4xJykuY29udGFpbmVkX2luKFZlcnNpb24oJzExLjEnKSkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShWZXJzaW9uKCcxMS4xLjInKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEuMS4yJykp
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoVmVyc2lvbignMTEnKS5jb250YWluZWRfaW4oVmVy
c2lvbignMTEuMCcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFZlcnNpb24oJzExLjAnKS5j
b250YWluZWRfaW4oVmVyc2lvbignMTEnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShWZXJz
aW9uKCcxMScpLmNvbnRhaW5lZF9pbihWZXJzaW9uKCcxMS4wLjAnKSkpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShWZXJzaW9uKCcxMS4wLjAnKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEnKSkp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShWZXJzaW9uKCcxMS4xJykuY29udGFpbmVkX2luKFZl
cnNpb24oJzExLjEuMCcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFZlcnNpb24oJzExLjEu
MCcpLmNvbnRhaW5lZF9pbihWZXJzaW9uKCcxMS4xJykpKQorCiAgICAgZGVmIHRlc3RfY29tcGFy
ZV92ZXJzaW9ucyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWZXJzaW9uKCcxLjIu
MycpLCBWZXJzaW9uKCcxLjIuMycpKQogICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoVmVyc2lv
bignMS4yLjQnKSwgVmVyc2lvbignMS4yLjMnKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQkocmV2aXNpb24gMjI1
MTc4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5m
by5weQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQCBpbXBvcnQgcmUKIGltcG9ydCBz
eXMKIAogZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgorZnJvbSB3
ZWJraXRweS5jb21tb24udmVyc2lvbl9uYW1lX21hcCBpbXBvcnQgVmVyc2lvbk5hbWVNYXAKIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZQogCiAK
QEAgLTUxLDE2ICs1MiwyOSBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAgICAg
c2VsZi5fZXhlY3V0aXZlID0gZXhlY3V0aXZlCiAgICAgICAgIHNlbGYuX3BsYXRmb3JtX21vZHVs
ZSA9IHBsYXRmb3JtX21vZHVsZQogICAgICAgICBzZWxmLm9zX25hbWUgPSBzZWxmLl9kZXRlcm1p
bmVfb3NfbmFtZShzeXNfbW9kdWxlLnBsYXRmb3JtKQotICAgICAgICBpZiBzZWxmLm9zX25hbWUg
PT0gJ2xpbnV4JzoKLSAgICAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHNlbGYuX2RldGVybWlu
ZV9saW51eF92ZXJzaW9uKCkKLSAgICAgICAgaWYgc2VsZi5vc19uYW1lID09ICdmcmVlYnNkJyBv
ciBzZWxmLm9zX25hbWUgPT0gJ29wZW5ic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnbmV0YnNkJyBv
ciBzZWxmLm9zX25hbWUgPT0gJ2lvcyc6Ci0gICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBw
bGF0Zm9ybV9tb2R1bGUucmVsZWFzZSgpCisgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IE5vbmUK
KwogICAgICAgICBpZiBzZWxmLm9zX25hbWUuc3RhcnRzd2l0aCgnbWFjJyk6Ci0gICAgICAgICAg
ICBzZWxmLm9zX3ZlcnNpb24gPSBzZWxmLl9kZXRlcm1pbmVfbWFjX3ZlcnNpb24oVmVyc2lvbihw
bGF0Zm9ybV9tb2R1bGUubWFjX3ZlcigpWzBdKSkKLSAgICAgICAgaWYgc2VsZi5vc19uYW1lLnN0
YXJ0c3dpdGgoJ3dpbicpOgotICAgICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gc2VsZi5fZGV0
ZXJtaW5lX3dpbl92ZXJzaW9uKHNlbGYuX3dpbl92ZXJzaW9uKHN5c19tb2R1bGUpKQorICAgICAg
ICAgICAgdmVyc2lvbiA9IFZlcnNpb24ocGxhdGZvcm1fbW9kdWxlLm1hY192ZXIoKVswXSkKKyAg
ICAgICAgZWxpZiBzZWxmLm9zX25hbWUuc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICB2
ZXJzaW9uID0gc2VsZi5fd2luX3ZlcnNpb24oc3lzX21vZHVsZSkKKyAgICAgICAgZWxpZiBzZWxm
Lm9zX25hbWUgPT0gJ2ZyZWVic2QnOgorICAgICAgICAgICAgdmVyc2lvbiA9IHBsYXRmb3JtX21v
ZHVsZS5yZWxlYXNlKCkuc3BsaXQoJy0nKVswXQorICAgICAgICBlbGlmIHNlbGYub3NfbmFtZSA9
PSAnbGludXgnOgorICAgICAgICAgICAgdmVyc2lvbiA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICMgTW9zdCBvdGhlciBwbGF0Zm9ybXMgKG5hbWVseSBpT1MpIHJldHVybiBjb25m
b3JtaW5nIHZlcnNpb24gc3RyaW5ncy4KKyAgICAgICAgICAgIHZlcnNpb24gPSBWZXJzaW9uKHBs
YXRmb3JtX21vZHVsZS5yZWxlYXNlKCkpCisKICAgICAgICAgc2VsZi5faXNfY3lnd2luID0gc3lz
X21vZHVsZS5wbGF0Zm9ybSA9PSAnY3lnd2luJwogCisgICAgICAgIGlmIHZlcnNpb24gaXMgTm9u
ZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IFZlcnNp
b25OYW1lTWFwLm1hcChzZWxmKS50b19uYW1lKHZlcnNpb24sIHRhYmxlPSdwdWJsaWMnKQorICAg
ICAgICBhc3NlcnQgc2VsZi5vc192ZXJzaW9uIGlzIG5vdCBOb25lCisgICAgICAgIHNlbGYub3Nf
dmVyc2lvbiA9IHNlbGYub3NfdmVyc2lvbi5sb3dlcigpLnJlcGxhY2UoJyAnLCAnJykKKwogICAg
IGRlZiBpc19tYWMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLm9zX25hbWUgPT0gJ21hYycK
IApAQCAtMTY0LDQwICsxNzgsNiBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAg
ICAgICAgIHJldHVybiAnaGFpa3UnCiAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCd1bnJl
Y29nbml6ZWQgcGxhdGZvcm0gc3RyaW5nICIlcyInICUgc3lzX3BsYXRmb3JtKQogCi0gICAgZGVm
IF9kZXRlcm1pbmVfbWFjX3ZlcnNpb24oc2VsZiwgbWFjX3ZlcnNpb24pOgotICAgICAgICB2ZXJz
aW9uX3N0cmluZ3MgPSB7Ci0gICAgICAgICAgICA1OiAnbGVvcGFyZCcsCi0gICAgICAgICAgICA2
OiAnc25vd2xlb3BhcmQnLAotICAgICAgICAgICAgNzogJ2xpb24nLAotICAgICAgICAgICAgODog
J21vdW50YWlubGlvbicsCi0gICAgICAgICAgICA5OiAnbWF2ZXJpY2tzJywKLSAgICAgICAgICAg
IDEwOiAneW9zZW1pdGUnLAotICAgICAgICAgICAgMTE6ICdlbGNhcGl0YW4nLAotICAgICAgICAg
ICAgMTI6ICdzaWVycmEnLAotICAgICAgICAgICAgMTM6ICdoaWdoc2llcnJhJywKLSAgICAgICAg
fQotICAgICAgICBhc3NlcnQgbWFjX3ZlcnNpb24ubWlub3IgPj0gbWluKHZlcnNpb25fc3RyaW5n
cy5rZXlzKCkpCi0gICAgICAgIHJldHVybiB2ZXJzaW9uX3N0cmluZ3MuZ2V0KG1hY192ZXJzaW9u
Lm1pbm9yLCAnZnV0dXJlJykKLQotICAgIGRlZiBfZGV0ZXJtaW5lX2xpbnV4X3ZlcnNpb24oc2Vs
Zik6Ci0gICAgICAgICMgRklYTUU6IHdlIGlnbm9yZSB3aGF0ZXZlciB0aGUgcmVhbCB2ZXJzaW9u
IGlzIGFuZCBwcmV0ZW5kIGl0J3MgbHVjaWQgZm9yIG5vdy4KLSAgICAgICAgcmV0dXJuICdsdWNp
ZCcKLQotICAgIGRlZiBfZGV0ZXJtaW5lX3dpbl92ZXJzaW9uKHNlbGYsIHdpbl92ZXJzaW9uKToK
LSAgICAgICAgaWYgc2VsZi5fcGxhdGZvcm1fbW9kdWxlLnJlbGVhc2UoKSA9PSAnMTAnOgotICAg
ICAgICAgICAgcmV0dXJuICd3aW4xMCcKLSAgICAgICAgaWYgd2luX3ZlcnNpb24ubWFqb3IgPT0g
MCBhbmQgd2luX3ZlcnNpb24ubWlub3IgPT0gMDoKLSAgICAgICAgICAgIGlmIHdpbl92ZXJzaW9u
WzJdID4gMTAwMDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICd3aW4xMCcKLSAgICAgICAgaWYg
d2luX3ZlcnNpb24gPT0gVmVyc2lvbihbNiwgMSwgNzYwMF0pOgotICAgICAgICAgICAgcmV0dXJu
ICc3c3AwJwotICAgICAgICBpZiB3aW5fdmVyc2lvbi5tYWpvciA9PSA2IGFuZCB3aW5fdmVyc2lv
bi5taW5vciA9PSAwOgotICAgICAgICAgICAgcmV0dXJuICd2aXN0YScKLSAgICAgICAgaWYgd2lu
X3ZlcnNpb24ubWFqb3IgPT0gNSBhbmQgd2luX3ZlcnNpb24ubWlub3IgPT0gMToKLSAgICAgICAg
ICAgIHJldHVybiAneHAnCi0gICAgICAgIGFzc2VydCB3aW5fdmVyc2lvblswXSA+IDYgb3Igd2lu
X3ZlcnNpb25bMV0gPj0gMSwgJ1VucmVjb2duaXplZCBXaW5kb3dzIHZlcnNpb246ICJ7fSInLmZv
cm1hdCh3aW5fdmVyc2lvbikKLSAgICAgICAgcmV0dXJuICdmdXR1cmUnCi0KICAgICBkZWYgX3dp
bl92ZXJzaW9uKHNlbGYsIHN5c19tb2R1bGUpOgogICAgICAgICBpZiBoYXNhdHRyKHN5c19tb2R1
bGUsICdnZXR3aW5kb3dzdmVyc2lvbicpOgogICAgICAgICAgICAgcmV0dXJuIFZlcnNpb24oc3lz
X21vZHVsZS5nZXR3aW5kb3dzdmVyc2lvbigpWzA6M10pCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fdW5p
dHRlc3QucHkJKHJldmlzaW9uIDIyNTE3OCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTg3
LDEzICs4NywxMyBAQCBjbGFzcyBUZXN0UGxhdGZvcm1JbmZvKHVuaXR0ZXN0LlRlc3RDYXNlCiAg
ICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbmZvLnRvdGFsX2J5dGVzX21lbW9yeSgpKQog
CiAgICAgZGVmIHRlc3Rfb3NfbmFtZV9hbmRfd3JhcHBlcnMoc2VsZik6Ci0gICAgICAgIGluZm8g
PSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnbGludXgyJykpCisgICAgICAgIGluZm8gPSBzZWxm
Lm1ha2VfaW5mbyhmYWtlX3N5cygnbGludXgyJyksIGZha2VfcGxhdGZvcm0oJycsICcxMC40Jykp
CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmZvLmlzX2xpbnV4KCkpCiAgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UoaW5mby5pc19tYWMoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbmZv
LmlzX3dpbigpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluZm8uaXNfZnJlZWJzZCgpKQog
Ci0gICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnbGludXgzJykpCisgICAg
ICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnbGludXgzJyksIGZha2VfcGxhdGZv
cm0oJycsICcxMC40JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmZvLmlzX2xpbnV4KCkp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5pc19tYWMoKSkKICAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShpbmZvLmlzX3dpbigpKQpAQCAtMTIyLDcgKzEyMiw3IEBAIGNsYXNzIFRlc3RQ
bGF0Zm9ybUluZm8odW5pdHRlc3QuVGVzdENhc2UKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShp
bmZvLmlzX25hdGl2ZV93aW4oKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbmZvLmlzX2Zy
ZWVic2QoKSkKIAotICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2ZyZWVi
c2Q4JykpCisgICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZnJlZWJzZDgn
KSwgZmFrZV9wbGF0Zm9ybSgnJywgJzguMy1QUkVSRUxFQVNFJykpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoaW5mby5vc19uYW1lLCAnZnJlZWJzZCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFs
c2UoaW5mby5pc19saW51eCgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluZm8uaXNfbWFj
KCkpCkBAIC0xNDQsMTkgKzE0NCwyMCBAQCBjbGFzcyBUZXN0UGxhdGZvcm1JbmZvKHVuaXR0ZXN0
LlRlc3RDYXNlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9z
eXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC4xMy4wJykpLm9zX3ZlcnNpb24sICdoaWdo
c2llcnJhJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5
cygnZGFyd2luJyksIGZha2VfcGxhdGZvcm0oJzEwLjE0LjAnKSkub3NfdmVyc2lvbiwgJ2Z1dHVy
ZScpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygn
bGludXgyJykpLm9zX3ZlcnNpb24sICdsdWNpZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4MicpLCBmYWtlX3BsYXRmb3JtKCcnLCAnMTAu
NCcpKS5vc192ZXJzaW9uLCBOb25lKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5t
YWtlX2luZm8oZmFrZV9zeXMoJ2ZyZWVic2Q4JyksIGZha2VfcGxhdGZvcm0oJycsICc4LjMtUFJF
UkVMRUFTRScpKS5vc192ZXJzaW9uLCAnOC4zLVBSRVJFTEVBU0UnKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdmcmVlYnNkOScpLCBmYWtlX3BsYXRm
b3JtKCcnLCAnOS4wLVJFTEVBU0UnKSkub3NfdmVyc2lvbiwgJzkuMC1SRUxFQVNFJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZnJlZWJzZDgnKSwg
ZmFrZV9wbGF0Zm9ybSgnJywgJzguMy1QUkVSRUxFQVNFJykpLm9zX3ZlcnNpb24sICdmcmVlYnNk
OCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2Zy
ZWVic2Q5JyksIGZha2VfcGxhdGZvcm0oJycsICc5LjAtUkVMRUFTRScpKS5vc192ZXJzaW9uLCAn
ZnJlZWJzZDknKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBz
ZWxmLm1ha2VfaW5mbywgZmFrZV9zeXMoJ3dpbjMyJywgdHVwbGUoWzUsIDAsIDEyMzRdKSkpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMyJywg
dHVwbGUoWzYsIDIsIDEyMzRdKSkpLm9zX3ZlcnNpb24sICdmdXR1cmUnKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3aW4zMicsIHR1cGxlKFsxMCwg
MCwgMTQzOTNdKSkpLm9zX3ZlcnNpb24sICd3aW4xMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMyJywgdHVwbGUoWzYsIDIsIDEyMzRdKSkp
Lm9zX3ZlcnNpb24sICc4JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5m
byhmYWtlX3N5cygnd2luMzInLCB0dXBsZShbNiwgMSwgNzYwMF0pKSkub3NfdmVyc2lvbiwgJzdz
cDAnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3
aW4zMicsIHR1cGxlKFs2LCAwLCAxMjM0XSkpKS5vc192ZXJzaW9uLCAndmlzdGEnKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3aW4zMicsIHR1cGxl
KFs1LCAxLCAxMjM0XSkpKS5vc192ZXJzaW9uLCAneHAnKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKEFzc2VydGlvbkVycm9yLCBzZWxmLm1ha2VfaW5mbywgZmFrZV9zeXMoJ3dpbjMyJyks
IGV4ZWN1dGl2ZT1mYWtlX2V4ZWN1dGl2ZSgnNS4wLjEyMzQnKSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnY3lnd2luJyksIGV4ZWN1dGl2ZT1mYWtl
X2V4ZWN1dGl2ZSgnNi4yLjEyMzQnKSkub3NfdmVyc2lvbiwgJ2Z1dHVyZScpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2N5Z3dpbicpLCBleGVjdXRp
dmU9ZmFrZV9leGVjdXRpdmUoJzYuMi4xMjM0JykpLm9zX3ZlcnNpb24sICc4JykKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnY3lnd2luJyksIGV4ZWN1
dGl2ZT1mYWtlX2V4ZWN1dGl2ZSgnNi4xLjc2MDAnKSkub3NfdmVyc2lvbiwgJzdzcDAnKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdjeWd3aW4nKSwg
ZXhlY3V0aXZlPWZha2VfZXhlY3V0aXZlKCc2LjAuMTIzNCcpKS5vc192ZXJzaW9uLCAndmlzdGEn
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdjeWd3
aW4nKSwgZXhlY3V0aXZlPWZha2VfZXhlY3V0aXZlKCc1LjEuMTIzNCcpKS5vc192ZXJzaW9uLCAn
eHAnKQpAQCAtMTY4LDEwICsxNjksMTAgQEAgY2xhc3MgVGVzdFBsYXRmb3JtSW5mbyh1bml0dGVz
dC5UZXN0Q2FzZQogICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMy
JywgdHVwbGUoWzYsIDEsIDc2MDBdKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGlu
Zm8uZGlzcGxheV9uYW1lKCksICcnKQogCi0gICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhm
YWtlX3N5cygnbGludXgyJykpCisgICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5
cygnbGludXgyJyksIGZha2VfcGxhdGZvcm0oJycsICcxMC40JykpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0Tm90RXF1YWxzKGluZm8uZGlzcGxheV9uYW1lKCksICcnKQogCi0gICAgICAgIGluZm8gPSBz
ZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZnJlZWJzZDknKSkKKyAgICAgICAgaW5mbyA9IHNlbGYu
bWFrZV9pbmZvKGZha2Vfc3lzKCdmcmVlYnNkOScpLCBmYWtlX3BsYXRmb3JtKCcnLCAnOS4wLVJF
TEVBU0UnKSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoaW5mby5kaXNwbGF5X25hbWUo
KSwgJycpCiAKICAgICBkZWYgdGVzdF90b3RhbF9ieXRlc19tZW1vcnkoc2VsZik6CkBAIC0xODEs
OCArMTgyLDggQEAgY2xhc3MgVGVzdFBsYXRmb3JtSW5mbyh1bml0dGVzdC5UZXN0Q2FzZQogICAg
ICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMyJywgdHVwbGUoWzYsIDEs
IDc2MDBdKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGluZm8udG90YWxfYnl0ZXNfbWVt
b3J5KCkpCiAKLSAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdsaW51eDIn
KSkKKyAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdsaW51eDInKSwgZmFr
ZV9wbGF0Zm9ybSgnJywgJzEwLjQnKSkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW5mby50
b3RhbF9ieXRlc19tZW1vcnkoKSkKIAotICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFr
ZV9zeXMoJ2ZyZWVic2Q5JykpCisgICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5
cygnZnJlZWJzZDknKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzkuMC1SRUxFQVNFJykpCiAgICAgICAg
IHNlbGYuYXNzZXJ0SXNOb25lKGluZm8udG90YWxfYnl0ZXNfbWVtb3J5KCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327651</attachid>
            <date>2017-11-27 10:57:06 -0800</date>
            <delta_ts>2017-11-27 12:41:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179621-20171127105705.patch</filename>
            <type>text/plain</type>
            <size>23975</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNTE4MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU0IEBACisyMDE3LTExLTI3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogQmV0dGVyIG5hbWUtdmVyc2lvbiBtYXBwaW5nIChQYXJ0
IDEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk2
MjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM1NTg5NTg1PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhdmlkIEtpbHplci4KKworICAgICAgICBNYXBwaW5nIHZlcnNpb24gbnVtYmVycyB0byB2
ZXJzaW9uIG5hbWVzIHNob3VsZCBvY2N1ciBpbiBhIGNlbnRyYWwgbG9jYXRpb24uCisgICAgICAg
IFRoaXMgaGFzIGEgZmV3IGFkdmFudGFnZXMuIEZpcnN0LCBpdCBtYWtlcyBpdGVyYXRpbmcgdGhy
b3VnaCB2ZXJzaW9ucyBlYXNpZXIuCisgICAgICAgIFNlY29uZCwgaXQgYWxsb3dzIGZvciBhcHBs
ZV9hZGRpdGlvbnMgdG8gZGVmaW5lIGFuIGFkZGl0aW9uYWwgc2V0IG9mIG5hbWUKKyAgICAgICAg
bWFwcGluZ3MuIExhc3RseSwgaXQgd2lsbCBhbGxvdywgaW4gYSBmdXR1cmUgcGF0Y2gsIGZvciB1
cyB0byB0cmFjayB2ZXJzaW9uCisgICAgICAgIGluc3RlYWQgb2YgdmVyc2lvbiBuYW1lLCBvbmx5
IG1hcHBpbmcgdmVyc2lvbiB0byB2ZXJzaW9uIG5hbWUgd2hlbiByZXF1aXJlZC4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHk6CisgICAg
ICAgIChQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoUGxhdGZvcm1JbmZvLl9kZXRl
cm1pbmVfb3NfbmFtZSk6IFVzZSBWZXJzaW9uTmFtZU1hcCBpbnN0ZWFkIG9mIGN1c3RvbSBmdW5j
dGlvbnMKKyAgICAgICAgbWFwcGluZyB2ZXJzaW9uIHRvIG5hbWUuCisgICAgICAgIChQbGF0Zm9y
bUluZm8uX2RldGVybWluZV9saW51eF92ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRm
b3JtSW5mby5fZGV0ZXJtaW5lX21hY192ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRm
b3JtSW5mby5fZGV0ZXJtaW5lX3dpbl92ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAoVGVzdFBsYXRmb3JtSW5mby50ZXN0X29zX25hbWVfYW5kX3dyYXBwZXJzKToKKyAgICAg
ICAgKFRlc3RQbGF0Zm9ybUluZm8udGVzdF9vc192ZXJzaW9uKToKKyAgICAgICAgKFRlc3RQbGF0
Zm9ybUluZm8udGVzdF9kaXNwbGF5X25hbWUpOgorICAgICAgICAoVGVzdFBsYXRmb3JtSW5mby50
ZXN0X3RvdGFsX2J5dGVzX21lbW9yeSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21t
b24vdmVyc2lvbi5weToKKyAgICAgICAgKFZlcnNpb24uY29udGFpbmVkX2luKTogQWRkIHBhcnRp
YWwgdmVyc2lvbiBtYXBwaW5nLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Zl
cnNpb25fbmFtZV9tYXAucHk6IEFkZGVkLgorICAgICAgICAoVmVyc2lvbk5hbWVNYXApOiBIb2xk
cyBhIG1hcHBpbmcgb2YgdmVyc2lvbiBuYW1lIHRvIHZlcnNpb24gb2JqZWN0LgorICAgICAgICAo
VmVyc2lvbk5hbWVNYXAubWFwKTogRG9uJ3QgcmUtY3JlYXRlIFZlcnNpb25OYW1lTWFwIGV2ZXJ5
IHRpbWUuCisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5fX2luaXRfXyk6IEluaXRpYWxpemUgbWFw
cGluZywgdXNlIHBsYXRmb3JtIHRvCisgICAgICAgIGRlZmluZSB0aGUgZGVmYXVsdCBzeXN0ZW0g
cGxhdGZvcm0uCisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5fYXV0b21hcF90b19tYWpvcl92ZXJz
aW9uKTogU29tZSBvcGVyYXRpbmcgc3lzdGVtcywgc3VjaAorICAgICAgICBhcyBpT1MsIGhhdmUg
YSBuYW1pbmcgc2NoZW1lIGJhc2VkIG9uIHRoZWlyIG1ham9yIHZlcnNpb24gYW5kIG9zIG5hbWUu
CisgICAgICAgIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgc3VjaCBtYXBwaW5ncy4KKyAgICAgICAg
KFZlcnNpb25OYW1lTWFwLnRvX25hbWUpOiBHaXZlbiBhIHZlcnNpb24gb2JqZWN0LCBwbGF0Zm9y
bSBuYW1lIGFuZAorICAgICAgICB0YWJsZSwgZmluZCB0aGUgY2xvc2VzdCBtYXRjaGluZyB2ZXJz
aW9uIG5hbWUuCisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5zdHJpcF9uYW1lX2Zvcm1hdHRpbmcp
OiBSZW1vdmUgc3BhY2VzIGFuZCBleHRyYWN0IHRoZSBtYWpvciB2ZXJzaW9uLAorICAgICAgICBp
ZiBhIHZlcnNpb24gc3RyaW5nIGlzIGluY2x1ZGVkIGluIHRoZSBuYW1lLgorICAgICAgICAoVmVy
c2lvbk5hbWVNYXAuZnJvbV9uYW1lKTogUmV0dXJuIGFuIG9zIG5hbWUgYW5kIHZlcnNpb24gZ2l2
ZW4gYSB2ZXJzaW9uIG5hbWUuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVy
c2lvbl9uYW1lX21hcF91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChWZXJzaW9uTWFwVGVz
dENhc2UpOgorICAgICAgICAoVmVyc2lvbk1hcFRlc3RDYXNlLnRlc3RfZGVmYXVsdF9zeXN0ZW1f
cGxhdGZvcm0pOgorICAgICAgICAoVmVyc2lvbk1hcFRlc3RDYXNlLnRlc3RfbWFjX3ZlcnNpb25f
YnlfbmFtZSk6CisgICAgICAgIChWZXJzaW9uTWFwVGVzdENhc2UudGVzdF9pb3NfdmVyc2lvbl9i
eV9uYW1lKToKKyAgICAgICAgKFZlcnNpb25NYXBUZXN0Q2FzZS50ZXN0X21hY19uYW1lX2J5X3Zl
cnNpb24pOgorICAgICAgICAoVmVyc2lvbk1hcFRlc3RDYXNlLnRlc3RfaW9zX25hbWVfYnlfdmVy
c2lvbik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVz
dC5weToKKyAgICAgICAgKFZlcnNpb25UZXN0Q2FzZS50ZXN0X2NvbnRhaW5lZF9pbik6CisKIDIw
MTctMTEtMjcgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgT25lIHRvbyBtYW55IHplcm9lcyBpbiBtYWNPUyB2ZXJzaW9uIG51bWJlciBpbiBGZWF0dXJl
RGVmaW5lcwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbi5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uLnB5CShy
ZXZpc2lvbiAyMjUxODEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9u
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5MiwxNiBAQCBjbGFzcyBWZXJzaW9uKG9iamVj
dCk6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdWZXJzaW9uIGtleSBtdXN0IGJlIG1h
am9yLCBtaW5vciwgdGlueSwgbWljcm8gb3IgbmFubycpCiAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoJ0V4cGVjdGVkIHZlcnNpb24ga2V5IHRvIGJlIHN0cmluZyBvciBpbnRlZ2VyJykKIAorICAg
ICMgMTEuMiBpcyBjb250YWluZWQgaW4gMTEsIGJ1dCAxMSBpcyBub3QgY29udGFpbmVkIGluIDEx
LjIKKyAgICBkZWYgY29udGFpbmVkX2luKHNlbGYsIHZlcnNpb24pOgorICAgICAgICBkb2VzX21h
dGNoID0gVHJ1ZQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHNlbGYpKToKKyAgICAgICAg
ICAgIGlmIHNlbGZbaV0gIT0gdmVyc2lvbltpXToKKyAgICAgICAgICAgICAgICBkb2VzX21hdGNo
ID0gRmFsc2UKKyAgICAgICAgICAgIGlmIG5vdCBkb2VzX21hdGNoIGFuZCB2ZXJzaW9uW2ldICE9
IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisK
ICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgbGVuX3RvX3ByaW50ID0gMQogICAgICAg
ICBmb3IgaSBpbiB4cmFuZ2UobGVuKHNlbGYpKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXAucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl9uYW1lX21hcC5weQkobm9uZXhpc3RlbnQpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgor
IyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
CisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2ltcG9ydCByZQorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBv
cnQgbWVtb2l6ZWQKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24K
KworCitjbGFzcyBWZXJzaW9uTmFtZU1hcChvYmplY3QpOgorCisgICAgIyBBbGxvd3MgYXBwbGVf
YWRkaXRpb25zIHRvIGRlZmluZSBhIGN1c3RvbSBtYXBwaW5nCisgICAgQHN0YXRpY21ldGhvZAor
ICAgIEBtZW1vaXplZAorICAgIGRlZiBtYXAocGxhdGZvcm09Tm9uZSk6CisgICAgICAgIHJldHVy
biBWZXJzaW9uTmFtZU1hcChwbGF0Zm9ybT1wbGF0Zm9ybSkKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwbGF0Zm9ybT1Ob25lKToKKyAgICAgICAgaWYgcGxhdGZvcm0gaXMgTm9uZToKKyAgICAg
ICAgICAgIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0IGltcG9ydCBTeXN0
ZW1Ib3N0CisgICAgICAgICAgICBwbGF0Zm9ybSA9IFN5c3RlbUhvc3QoKS5wbGF0Zm9ybQorICAg
ICAgICBzZWxmLm1hcHBpbmcgPSB7fQorCisgICAgICAgIHNlbGYuZGVmYXVsdF9zeXN0ZW1fcGxh
dGZvcm0gPSBwbGF0Zm9ybS5vc19uYW1lCisgICAgICAgIHNlbGYubWFwcGluZ1sncHVibGljJ10g
PSB7CisgICAgICAgICAgICAnbWFjJzogeworICAgICAgICAgICAgICAgICdMZW9wYXJkJzogVmVy
c2lvbignMTAuNScpLAorICAgICAgICAgICAgICAgICdTbm93IExlb3BhcmQnOiBWZXJzaW9uKCcx
MC42JyksCisgICAgICAgICAgICAgICAgJ0xpb24nOiBWZXJzaW9uKCcxMC43JyksCisgICAgICAg
ICAgICAgICAgJ01vdW50YWluIExpb24nOiBWZXJzaW9uKCcxMC44JyksCisgICAgICAgICAgICAg
ICAgJ01hdmVyaWNrcyc6IFZlcnNpb24oJzEwLjknKSwKKyAgICAgICAgICAgICAgICAnWW9zZW1p
dGUnOiBWZXJzaW9uKCcxMC4xMCcpLAorICAgICAgICAgICAgICAgICdFbCBDYXBpdGFuJzogVmVy
c2lvbignMTAuMTEnKSwKKyAgICAgICAgICAgICAgICAnU2llcnJhJzogVmVyc2lvbignMTAuMTIn
KSwKKyAgICAgICAgICAgICAgICAnSGlnaCBTaWVycmEnOiBWZXJzaW9uKCcxMC4xMycpLAorICAg
ICAgICAgICAgICAgICdGdXR1cmUnOiBWZXJzaW9uKCcxMC4xNCcpLAorICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgICdpb3MnOiBzZWxmLl9hdXRvbWFwX3RvX21ham9yX3ZlcnNpb24oJ2lPUycs
IG1pbmltdW09VmVyc2lvbignMTAnKSwgbWF4aW11bT1WZXJzaW9uKCcxMScpKSwKKyAgICAgICAg
ICAgICd3aW4nOiB7CisgICAgICAgICAgICAgICAgJ1dpbjEwJzogVmVyc2lvbignMTAnKSwKKyAg
ICAgICAgICAgICAgICAnOC4xJzogVmVyc2lvbignNi4zJyksCisgICAgICAgICAgICAgICAgJzgn
OiBWZXJzaW9uKCc2LjInKSwKKyAgICAgICAgICAgICAgICAnN3NwMCc6IFZlcnNpb24oJzYuMS43
NjAwJyksCisgICAgICAgICAgICAgICAgJ1Zpc3RhJzogVmVyc2lvbignNicpLAorICAgICAgICAg
ICAgICAgICdYUCc6IFZlcnNpb24oJzUuMScpLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
ICdmcmVlYnNkJzogeworICAgICAgICAgICAgICAgICdGcmVlIEJTRCA4JzogVmVyc2lvbignOCcp
LAorICAgICAgICAgICAgICAgICdGcmVlIEJTRCA5JzogVmVyc2lvbignOScpLAorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2F1dG9tYXBfdG9f
bWFqb3JfdmVyc2lvbihjbHMsIHByZWZpeCwgbWluaW11bT1WZXJzaW9uKCcxJyksIG1heGltdW09
VmVyc2lvbignMScpKToKKyAgICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAgYXNzZXJ0IG1pbmlt
dW0gPD0gbWF4aW11bQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoKG1heGltdW0ubWFqb3IgKyAx
KSAtIG1pbmltdW0ubWFqb3IpOgorICAgICAgICAgICAgcmVzdWx0Wyd7fSB7fScuZm9ybWF0KHBy
ZWZpeCwgc3RyKFZlcnNpb24oc3RyKG1pbmltdW0ubWFqb3IgKyBpKSkpKV0gPSBWZXJzaW9uKHN0
cihtaW5pbXVtLm1ham9yICsgaSkpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiB0
b19uYW1lKHNlbGYsIHZlcnNpb24sIHBsYXRmb3JtPU5vbmUsIHRhYmxlPSdwdWJsaWMnKToKKyAg
ICAgICAgcGxhdGZvcm0gPSBzZWxmLmRlZmF1bHRfc3lzdGVtX3BsYXRmb3JtIGlmIHBsYXRmb3Jt
IGlzIE5vbmUgZWxzZSBwbGF0Zm9ybQorICAgICAgICBhc3NlcnQgdGFibGUgaW4gc2VsZi5tYXBw
aW5nCisgICAgICAgIGFzc2VydCBwbGF0Zm9ybSBpbiBzZWxmLm1hcHBpbmdbdGFibGVdCisgICAg
ICAgIGNsb3Nlc3RfbWF0Y2ggPSAoTm9uZSwgTm9uZSkKKyAgICAgICAgdmVyc2lvbiA9IFZlcnNp
b24odmVyc2lvbikKKyAgICAgICAgZm9yIG9zX25hbWUsIG9zX3ZlcnNpb24gaW4gc2VsZi5tYXBw
aW5nW3RhYmxlXVtwbGF0Zm9ybV0uaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiB2ZXJzaW9u
ID09IG9zX3ZlcnNpb246CisgICAgICAgICAgICAgICAgcmV0dXJuIG9zX25hbWUKKyAgICAgICAg
ICAgIGVsaWYgdmVyc2lvbi5jb250YWluZWRfaW4ob3NfdmVyc2lvbik6CisgICAgICAgICAgICAg
ICAgaWYgY2xvc2VzdF9tYXRjaFsxXSBhbmQgY2xvc2VzdF9tYXRjaFsxXS5jb250YWluZWRfaW4o
b3NfdmVyc2lvbik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAg
ICAgY2xvc2VzdF9tYXRjaCA9IChvc19uYW1lLCBvc192ZXJzaW9uKQorICAgICAgICByZXR1cm4g
Y2xvc2VzdF9tYXRjaFswXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzdHJpcF9uYW1l
X2Zvcm1hdHRpbmcobmFtZSk6CisgICAgICAgICMgPE9TPiBtYWpvci5taW5vci50aW55IHNob3Vs
ZCBtYXAgdG8gPE9TPiBtYWpvcgorICAgICAgICBpZiAnICcgaW4gbmFtZToKKyAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICBuYW1lID0gJ3t9e30nLmZvcm1hdCgnJy5qb2luKG5hbWUu
c3BsaXQoJyAnKVs6LTFdKSwgVmVyc2lvbihuYW1lLnNwbGl0KCcgJylbLTFdKS5tYWpvcikKKyAg
ICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzcGxpdCA9IHJlLnNw
bGl0KHInXGQnLCBuYW1lKQorICAgICAgICAgICAgICAgIG5hbWUgPSAne317fScuZm9ybWF0KHNw
bGl0WzBdLCBWZXJzaW9uKG5hbWVbKGxlbihzcGxpdCkgLSAxKTpdKS5tYWpvcikKKyAgICAgICAg
ICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAj
IFN0cmlwIG91dCBhbnkgc3BhY2VzLCBtYWtlIGV2ZXJ5dGhpbmcgbG93ZXItY2FzZQorICAgICAg
ICByZXN1bHQgPSBuYW1lLnJlcGxhY2UoJyAnLCAnJykubG93ZXIoKQorICAgICAgICByZXR1cm4g
cmVzdWx0CisKKyAgICBkZWYgZnJvbV9uYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICAjIEV4YWN0
IG1hdGNoCisgICAgICAgIGZvciBfLCBtYXAgaW4gc2VsZi5tYXBwaW5nLml0ZXJpdGVtcygpOgor
ICAgICAgICAgICAgZm9yIG9zX25hbWUsIG9zX21hcCBpbiBtYXAuaXRlcml0ZW1zKCk6CisgICAg
ICAgICAgICAgICAgaWYgbmFtZSBpbiBvc19tYXA6CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAob3NfbmFtZSwgb3NfbWFwW25hbWVdKQorCisgICAgICAgICMgSXQncyBub3QgYW4gZXhhY3Qg
bWF0Y2gsIGxldCdzIHRyeSB1bmlmeWluZyBmb3JtYXR0aW5nCisgICAgICAgIHVuZm9ybWF0dGVk
ID0gc2VsZi5zdHJpcF9uYW1lX2Zvcm1hdHRpbmcobmFtZSkKKyAgICAgICAgZm9yIF8sIG1hcCBp
biBzZWxmLm1hcHBpbmcuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmb3Igb3NfbmFtZSwgb3Nf
bWFwIGluIG1hcC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBmb3IgdmVyc2lvbl9uYW1l
LCB2ZXJzaW9uIGluIG9zX21hcC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYg
c2VsZi5zdHJpcF9uYW1lX2Zvcm1hdHRpbmcodmVyc2lvbl9uYW1lKSA9PSB1bmZvcm1hdHRlZDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAob3NfbmFtZSwgdmVyc2lvbikKKyAgICAg
ICAgcmV0dXJuIChOb25lLCBOb25lKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vdmVyc2lvbl9uYW1lX21hcF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwX3VuaXR0ZXN0LnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXBf
dW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorIyBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
IyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3QgaW1wb3J0IFN5c3RlbUhvc3QKK2Zyb20gd2Vi
a2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KK2Zyb20gdmVyc2lvbl9uYW1lX21h
cCBpbXBvcnQgVmVyc2lvbk5hbWVNYXAKKworCitjbGFzcyBWZXJzaW9uTWFwVGVzdENhc2UodW5p
dHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9zeXN0ZW1fcGxhdGZvcm0o
c2VsZik6CisgICAgICAgIGhvc3QgPSBTeXN0ZW1Ib3N0KCkKKyAgICAgICAgbWFwID0gVmVyc2lv
bk5hbWVNYXAocGxhdGZvcm09aG9zdC5wbGF0Zm9ybSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChtYXAuZGVmYXVsdF9zeXN0ZW1fcGxhdGZvcm0sIGhvc3QucGxhdGZvcm0ub3NfbmFtZSkKKwor
ICAgIGRlZiB0ZXN0X21hY192ZXJzaW9uX2J5X25hbWUoc2VsZik6CisgICAgICAgIG1hcCA9IFZl
cnNpb25OYW1lTWFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ21hYycsIFZlcnNpb24o
JzEwLjEyJykpLCBtYXAuZnJvbV9uYW1lKCdTaWVycmEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgoJ21hYycsIFZlcnNpb24oJzEwLjEyJykpLCBtYXAuZnJvbV9uYW1lKCdzaWVycmEnKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ21hYycsIFZlcnNpb24oJzEwLjExJykpLCBtYXAu
ZnJvbV9uYW1lKCdFbCBDYXBpdGFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCdtYWMn
LCBWZXJzaW9uKCcxMC4xMScpKSwgbWFwLmZyb21fbmFtZSgnZWxjYXBpdGFuJykpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoKCdtYWMnLCBWZXJzaW9uKCcxMC4xMScpKSwgbWFwLmZyb21fbmFt
ZSgnZWwgQ2FwaXRhbicpKQorCisgICAgZGVmIHRlc3RfaW9zX3ZlcnNpb25fYnlfbmFtZShzZWxm
KToKKyAgICAgICAgbWFwID0gVmVyc2lvbk5hbWVNYXAoKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCgnaW9zJywgVmVyc2lvbigxMSkpLCBtYXAuZnJvbV9uYW1lKCdpT1MgMTEnKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgoJ2lvcycsIFZlcnNpb24oMTEpKSwgbWFwLmZyb21fbmFtZSgn
aW9zMTEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ2lvcycsIFZlcnNpb24oMTEpKSwg
bWFwLmZyb21fbmFtZSgnaU9TIDExLjInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ2lv
cycsIFZlcnNpb24oMTEpKSwgbWFwLmZyb21fbmFtZSgnaW9zMTEuMicpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCgnaW9zJywgVmVyc2lvbigxMSkpLCBtYXAuZnJvbV9uYW1lKCdpT1MxMS4y
JykpCisKKyAgICBkZWYgdGVzdF9tYWNfbmFtZV9ieV92ZXJzaW9uKHNlbGYpOgorICAgICAgICBt
YXAgPSBWZXJzaW9uTmFtZU1hcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1NpZXJyYScs
IG1hcC50b19uYW1lKHZlcnNpb249VmVyc2lvbignMTAuMTInKSwgcGxhdGZvcm09J21hYycpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdFbCBDYXBpdGFuJywgbWFwLnRvX25hbWUodmVyc2lv
bj1WZXJzaW9uKCcxMC4xMScpLCBwbGF0Zm9ybT0nbWFjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ0VsIENhcGl0YW4nLCBtYXAudG9fbmFtZSh2ZXJzaW9uPVZlcnNpb24oJzEwLjExLjMn
KSwgcGxhdGZvcm09J21hYycpKQorCisgICAgZGVmIHRlc3RfaW9zX25hbWVfYnlfdmVyc2lvbihz
ZWxmKToKKyAgICAgICAgbWFwID0gVmVyc2lvbk5hbWVNYXAoKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCdpT1MgMTEnLCBtYXAudG9fbmFtZSh2ZXJzaW9uPVZlcnNpb24oJzExJyksIHBsYXRm
b3JtPSdpb3MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaU9TIDEwJywgbWFwLnRvX25h
bWUodmVyc2lvbj1WZXJzaW9uKCcxMCcpLCBwbGF0Zm9ybT0naW9zJykpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ2lPUyAxMCcsIG1hcC50b19uYW1lKHZlcnNpb249VmVyc2lvbignMTAuMycp
LCBwbGF0Zm9ybT0naW9zJykpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92
ZXJzaW9uX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3ZlcnNpb25fdW5pdHRlc3QucHkJKHJldmlzaW9uIDIyNTE4MSkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkK
QEAgLTEyNSw2ICsxMjUsMjIgQEAgY2xhc3MgVmVyc2lvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RD
YXNlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihWZXJzaW9uKCcxLjInKSksICcxLjIn
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihWZXJzaW9uKCcwLjAuMycpKSwgJzAuMC4z
JykKIAorICAgIGRlZiB0ZXN0X2NvbnRhaW5lZF9pbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKFZlcnNpb24oJzExLjEnKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEnKSkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShWZXJzaW9uKCcxMS4xLjInKS5jb250YWluZWRfaW4oVmVyc2lv
bignMTEuMScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShWZXJzaW9uKCcxMScpLmNvbnRh
aW5lZF9pbihWZXJzaW9uKCcxMS4xJykpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFZlcnNp
b24oJzExJykuY29udGFpbmVkX2luKFZlcnNpb24oJzExLjEuMicpKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShWZXJzaW9uKCcxMS4xJykuY29udGFpbmVkX2luKFZlcnNpb24oJzExLjEuMicp
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFZlcnNpb24oJzExJykuY29udGFpbmVkX2luKFZl
cnNpb24oJzExJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoVmVyc2lvbignMTEuMScpLmNv
bnRhaW5lZF9pbihWZXJzaW9uKCcxMS4xJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoVmVy
c2lvbignMTEuMS4yJykuY29udGFpbmVkX2luKFZlcnNpb24oJzExLjEuMicpKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKFZlcnNpb24oJzExJykuY29udGFpbmVkX2luKFZlcnNpb24oJzExLjAn
KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShWZXJzaW9uKCcxMS4wJykuY29udGFpbmVkX2lu
KFZlcnNpb24oJzExJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoVmVyc2lvbignMTEnKS5j
b250YWluZWRfaW4oVmVyc2lvbignMTEuMC4wJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUo
VmVyc2lvbignMTEuMC4wJykuY29udGFpbmVkX2luKFZlcnNpb24oJzExJykpKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUoVmVyc2lvbignMTEuMScpLmNvbnRhaW5lZF9pbihWZXJzaW9uKCcxMS4x
LjAnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShWZXJzaW9uKCcxMS4xLjAnKS5jb250YWlu
ZWRfaW4oVmVyc2lvbignMTEuMScpKSkKKwogICAgIGRlZiB0ZXN0X2NvbXBhcmVfdmVyc2lvbnMo
c2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVmVyc2lvbignMS4yLjMnKSwgVmVyc2lv
bignMS4yLjMnKSkKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKFZlcnNpb24oJzEuMi40Jyks
IFZlcnNpb24oJzEuMi4zJykpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vcGxhdGZvcm1pbmZvLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHJldmlzaW9uIDIyNTE4MSkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAgaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiAKIGZyb20g
d2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KK2Zyb20gd2Via2l0cHkuY29t
bW9uLnZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFZlcnNpb25OYW1lTWFwCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUKIAogCkBAIC01MSwxNiAr
NTIsMjkgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2V4ZWN1
dGl2ZSA9IGV4ZWN1dGl2ZQogICAgICAgICBzZWxmLl9wbGF0Zm9ybV9tb2R1bGUgPSBwbGF0Zm9y
bV9tb2R1bGUKICAgICAgICAgc2VsZi5vc19uYW1lID0gc2VsZi5fZGV0ZXJtaW5lX29zX25hbWUo
c3lzX21vZHVsZS5wbGF0Zm9ybSkKLSAgICAgICAgaWYgc2VsZi5vc19uYW1lID09ICdsaW51eCc6
Ci0gICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBzZWxmLl9kZXRlcm1pbmVfbGludXhfdmVy
c2lvbigpCi0gICAgICAgIGlmIHNlbGYub3NfbmFtZSA9PSAnZnJlZWJzZCcgb3Igc2VsZi5vc19u
YW1lID09ICdvcGVuYnNkJyBvciBzZWxmLm9zX25hbWUgPT0gJ25ldGJzZCcgb3Igc2VsZi5vc19u
YW1lID09ICdpb3MnOgotICAgICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gcGxhdGZvcm1fbW9k
dWxlLnJlbGVhc2UoKQorICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBOb25lCisKICAgICAgICAg
aWYgc2VsZi5vc19uYW1lLnN0YXJ0c3dpdGgoJ21hYycpOgotICAgICAgICAgICAgc2VsZi5vc192
ZXJzaW9uID0gc2VsZi5fZGV0ZXJtaW5lX21hY192ZXJzaW9uKFZlcnNpb24ocGxhdGZvcm1fbW9k
dWxlLm1hY192ZXIoKVswXSkpCi0gICAgICAgIGlmIHNlbGYub3NfbmFtZS5zdGFydHN3aXRoKCd3
aW4nKToKLSAgICAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHNlbGYuX2RldGVybWluZV93aW5f
dmVyc2lvbihzZWxmLl93aW5fdmVyc2lvbihzeXNfbW9kdWxlKSkKKyAgICAgICAgICAgIHZlcnNp
b24gPSBWZXJzaW9uKHBsYXRmb3JtX21vZHVsZS5tYWNfdmVyKClbMF0pCisgICAgICAgIGVsaWYg
c2VsZi5vc19uYW1lLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgICAgICAgICAgdmVyc2lvbiA9IHNl
bGYuX3dpbl92ZXJzaW9uKHN5c19tb2R1bGUpCisgICAgICAgIGVsaWYgc2VsZi5vc19uYW1lID09
ICdmcmVlYnNkJzoKKyAgICAgICAgICAgIHZlcnNpb24gPSBwbGF0Zm9ybV9tb2R1bGUucmVsZWFz
ZSgpLnNwbGl0KCctJylbMF0KKyAgICAgICAgZWxpZiBzZWxmLm9zX25hbWUgPT0gJ2xpbnV4JyBv
ciBzZWxmLm9zX25hbWUgPT0gJ29wZW5ic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnbmV0YnNkJzoK
KyAgICAgICAgICAgIHZlcnNpb24gPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAj
IE1vc3Qgb3RoZXIgcGxhdGZvcm1zIChuYW1lbHkgaU9TKSByZXR1cm4gY29uZm9ybWluZyB2ZXJz
aW9uIHN0cmluZ3MuCisgICAgICAgICAgICB2ZXJzaW9uID0gVmVyc2lvbihwbGF0Zm9ybV9tb2R1
bGUucmVsZWFzZSgpKQorCiAgICAgICAgIHNlbGYuX2lzX2N5Z3dpbiA9IHN5c19tb2R1bGUucGxh
dGZvcm0gPT0gJ2N5Z3dpbicKIAorICAgICAgICBpZiB2ZXJzaW9uIGlzIE5vbmU6CisgICAgICAg
ICAgICByZXR1cm4KKworICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBWZXJzaW9uTmFtZU1hcC5t
YXAoc2VsZikudG9fbmFtZSh2ZXJzaW9uLCB0YWJsZT0ncHVibGljJykKKyAgICAgICAgYXNzZXJ0
IHNlbGYub3NfdmVyc2lvbiBpcyBub3QgTm9uZQorICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBz
ZWxmLm9zX3ZlcnNpb24ubG93ZXIoKS5yZXBsYWNlKCcgJywgJycpCisKICAgICBkZWYgaXNfbWFj
KHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5vc19uYW1lID09ICdtYWMnCiAKQEAgLTE2NCw0
MCArMTc4LDYgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1
cm4gJ2hhaWt1JwogICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigndW5yZWNvZ25pemVkIHBs
YXRmb3JtIHN0cmluZyAiJXMiJyAlIHN5c19wbGF0Zm9ybSkKIAotICAgIGRlZiBfZGV0ZXJtaW5l
X21hY192ZXJzaW9uKHNlbGYsIG1hY192ZXJzaW9uKToKLSAgICAgICAgdmVyc2lvbl9zdHJpbmdz
ID0gewotICAgICAgICAgICAgNTogJ2xlb3BhcmQnLAotICAgICAgICAgICAgNjogJ3Nub3dsZW9w
YXJkJywKLSAgICAgICAgICAgIDc6ICdsaW9uJywKLSAgICAgICAgICAgIDg6ICdtb3VudGFpbmxp
b24nLAotICAgICAgICAgICAgOTogJ21hdmVyaWNrcycsCi0gICAgICAgICAgICAxMDogJ3lvc2Vt
aXRlJywKLSAgICAgICAgICAgIDExOiAnZWxjYXBpdGFuJywKLSAgICAgICAgICAgIDEyOiAnc2ll
cnJhJywKLSAgICAgICAgICAgIDEzOiAnaGlnaHNpZXJyYScsCi0gICAgICAgIH0KLSAgICAgICAg
YXNzZXJ0IG1hY192ZXJzaW9uLm1pbm9yID49IG1pbih2ZXJzaW9uX3N0cmluZ3Mua2V5cygpKQot
ICAgICAgICByZXR1cm4gdmVyc2lvbl9zdHJpbmdzLmdldChtYWNfdmVyc2lvbi5taW5vciwgJ2Z1
dHVyZScpCi0KLSAgICBkZWYgX2RldGVybWluZV9saW51eF92ZXJzaW9uKHNlbGYpOgotICAgICAg
ICAjIEZJWE1FOiB3ZSBpZ25vcmUgd2hhdGV2ZXIgdGhlIHJlYWwgdmVyc2lvbiBpcyBhbmQgcHJl
dGVuZCBpdCdzIGx1Y2lkIGZvciBub3cuCi0gICAgICAgIHJldHVybiAnbHVjaWQnCi0KLSAgICBk
ZWYgX2RldGVybWluZV93aW5fdmVyc2lvbihzZWxmLCB3aW5fdmVyc2lvbik6Ci0gICAgICAgIGlm
IHNlbGYuX3BsYXRmb3JtX21vZHVsZS5yZWxlYXNlKCkgPT0gJzEwJzoKLSAgICAgICAgICAgIHJl
dHVybiAnd2luMTAnCi0gICAgICAgIGlmIHdpbl92ZXJzaW9uLm1ham9yID09IDAgYW5kIHdpbl92
ZXJzaW9uLm1pbm9yID09IDA6Ci0gICAgICAgICAgICBpZiB3aW5fdmVyc2lvblsyXSA+IDEwMDAw
OgotICAgICAgICAgICAgICAgIHJldHVybiAnd2luMTAnCi0gICAgICAgIGlmIHdpbl92ZXJzaW9u
ID09IFZlcnNpb24oWzYsIDEsIDc2MDBdKToKLSAgICAgICAgICAgIHJldHVybiAnN3NwMCcKLSAg
ICAgICAgaWYgd2luX3ZlcnNpb24ubWFqb3IgPT0gNiBhbmQgd2luX3ZlcnNpb24ubWlub3IgPT0g
MDoKLSAgICAgICAgICAgIHJldHVybiAndmlzdGEnCi0gICAgICAgIGlmIHdpbl92ZXJzaW9uLm1h
am9yID09IDUgYW5kIHdpbl92ZXJzaW9uLm1pbm9yID09IDE6Ci0gICAgICAgICAgICByZXR1cm4g
J3hwJwotICAgICAgICBhc3NlcnQgd2luX3ZlcnNpb25bMF0gPiA2IG9yIHdpbl92ZXJzaW9uWzFd
ID49IDEsICdVbnJlY29nbml6ZWQgV2luZG93cyB2ZXJzaW9uOiAie30iJy5mb3JtYXQod2luX3Zl
cnNpb24pCi0gICAgICAgIHJldHVybiAnZnV0dXJlJwotCiAgICAgZGVmIF93aW5fdmVyc2lvbihz
ZWxmLCBzeXNfbW9kdWxlKToKICAgICAgICAgaWYgaGFzYXR0cihzeXNfbW9kdWxlLCAnZ2V0d2lu
ZG93c3ZlcnNpb24nKToKICAgICAgICAgICAgIHJldHVybiBWZXJzaW9uKHN5c19tb2R1bGUuZ2V0
d2luZG93c3ZlcnNpb24oKVswOjNdKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL3BsYXRmb3JtaW5mb191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5CShy
ZXZpc2lvbiAyMjUxODEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
cGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC04NywxMyArODcsMTMg
QEAgY2xhc3MgVGVzdFBsYXRmb3JtSW5mbyh1bml0dGVzdC5UZXN0Q2FzZQogICAgICAgICAgICAg
c2VsZi5hc3NlcnRJc05vbmUoaW5mby50b3RhbF9ieXRlc19tZW1vcnkoKSkKIAogICAgIGRlZiB0
ZXN0X29zX25hbWVfYW5kX3dyYXBwZXJzKHNlbGYpOgotICAgICAgICBpbmZvID0gc2VsZi5tYWtl
X2luZm8oZmFrZV9zeXMoJ2xpbnV4MicpKQorICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8o
ZmFrZV9zeXMoJ2xpbnV4MicpLCBmYWtlX3BsYXRmb3JtKCcnLCAnMTAuNCcpKQogICAgICAgICBz
ZWxmLmFzc2VydFRydWUoaW5mby5pc19saW51eCgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KGluZm8uaXNfbWFjKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5pc193aW4oKSkK
ICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbmZvLmlzX2ZyZWVic2QoKSkKIAotICAgICAgICBp
bmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4MycpKQorICAgICAgICBpbmZvID0g
c2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4MycpLCBmYWtlX3BsYXRmb3JtKCcnLCAnMTAu
NCcpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5mby5pc19saW51eCgpKQogICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKGluZm8uaXNfbWFjKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
aW5mby5pc193aW4oKSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBjbGFzcyBUZXN0UGxhdGZvcm1JbmZv
KHVuaXR0ZXN0LlRlc3RDYXNlCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5pc19uYXRp
dmVfd2luKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5pc19mcmVlYnNkKCkpCiAK
LSAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdmcmVlYnNkOCcpKQorICAg
ICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2ZyZWVic2Q4JyksIGZha2VfcGxh
dGZvcm0oJycsICc4LjMtUFJFUkVMRUFTRScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlu
Zm8ub3NfbmFtZSwgJ2ZyZWVic2QnKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluZm8uaXNf
bGludXgoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbmZvLmlzX21hYygpKQpAQCAtMTQ0
LDE5ICsxNDQsMjAgQEAgY2xhc3MgVGVzdFBsYXRmb3JtSW5mbyh1bml0dGVzdC5UZXN0Q2FzZQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdkYXJ3aW4n
KSwgZmFrZV9wbGF0Zm9ybSgnMTAuMTMuMCcpKS5vc192ZXJzaW9uLCAnaGlnaHNpZXJyYScpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2Rhcndpbicp
LCBmYWtlX3BsYXRmb3JtKCcxMC4xNC4wJykpLm9zX3ZlcnNpb24sICdmdXR1cmUnKQogCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4MicpKS5v
c192ZXJzaW9uLCAnbHVjaWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9p
bmZvKGZha2Vfc3lzKCdsaW51eDInKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzEwLjQnKSkub3NfdmVy
c2lvbiwgTm9uZSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZh
a2Vfc3lzKCdmcmVlYnNkOCcpLCBmYWtlX3BsYXRmb3JtKCcnLCAnOC4zLVBSRVJFTEVBU0UnKSku
b3NfdmVyc2lvbiwgJzguMy1QUkVSRUxFQVNFJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZnJlZWJzZDknKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzku
MC1SRUxFQVNFJykpLm9zX3ZlcnNpb24sICc5LjAtUkVMRUFTRScpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2ZyZWVic2Q4JyksIGZha2VfcGxhdGZv
cm0oJycsICc4LjMtUFJFUkVMRUFTRScpKS5vc192ZXJzaW9uLCAnZnJlZWJzZDgnKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdmcmVlYnNkOScpLCBm
YWtlX3BsYXRmb3JtKCcnLCAnOS4wLVJFTEVBU0UnKSkub3NfdmVyc2lvbiwgJ2ZyZWVic2Q5JykK
IAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgc2VsZi5tYWtlX2lu
Zm8sIGZha2Vfc3lzKCd3aW4zMicsIHR1cGxlKFs1LCAwLCAxMjM0XSkpKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3aW4zMicsIHR1cGxlKFs2LCAy
LCAxMjM0XSkpKS5vc192ZXJzaW9uLCAnZnV0dXJlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnd2luMzInLCB0dXBsZShbMTAsIDAsIDE0MzkzXSkp
KS5vc192ZXJzaW9uLCAnd2luMTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFr
ZV9pbmZvKGZha2Vfc3lzKCd3aW4zMicsIHR1cGxlKFs2LCAyLCAxMjM0XSkpKS5vc192ZXJzaW9u
LCAnOCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMo
J3dpbjMyJywgdHVwbGUoWzYsIDEsIDc2MDBdKSkpLm9zX3ZlcnNpb24sICc3c3AwJykKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnd2luMzInLCB0dXBs
ZShbNiwgMCwgMTIzNF0pKSkub3NfdmVyc2lvbiwgJ3Zpc3RhJykKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnd2luMzInLCB0dXBsZShbNSwgMSwgMTIz
NF0pKSkub3NfdmVyc2lvbiwgJ3hwJykKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3Nl
cnRpb25FcnJvciwgc2VsZi5tYWtlX2luZm8sIGZha2Vfc3lzKCd3aW4zMicpLCBleGVjdXRpdmU9
ZmFrZV9leGVjdXRpdmUoJzUuMC4xMjM0JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vs
Zi5tYWtlX2luZm8oZmFrZV9zeXMoJ2N5Z3dpbicpLCBleGVjdXRpdmU9ZmFrZV9leGVjdXRpdmUo
JzYuMi4xMjM0JykpLm9zX3ZlcnNpb24sICdmdXR1cmUnKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdjeWd3aW4nKSwgZXhlY3V0aXZlPWZha2VfZXhl
Y3V0aXZlKCc2LjIuMTIzNCcpKS5vc192ZXJzaW9uLCAnOCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2N5Z3dpbicpLCBleGVjdXRpdmU9ZmFrZV9l
eGVjdXRpdmUoJzYuMS43NjAwJykpLm9zX3ZlcnNpb24sICc3c3AwJykKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnY3lnd2luJyksIGV4ZWN1dGl2ZT1m
YWtlX2V4ZWN1dGl2ZSgnNi4wLjEyMzQnKSkub3NfdmVyc2lvbiwgJ3Zpc3RhJykKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnY3lnd2luJyksIGV4ZWN1
dGl2ZT1mYWtlX2V4ZWN1dGl2ZSgnNS4xLjEyMzQnKSkub3NfdmVyc2lvbiwgJ3hwJykKQEAgLTE2
OCwxMCArMTY5LDEwIEBAIGNsYXNzIFRlc3RQbGF0Zm9ybUluZm8odW5pdHRlc3QuVGVzdENhc2UK
ICAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3aW4zMicsIHR1cGxlKFs2
LCAxLCA3NjAwXSkpKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhpbmZvLmRpc3BsYXlf
bmFtZSgpLCAnJykKIAotICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xp
bnV4MicpKQorICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4Micp
LCBmYWtlX3BsYXRmb3JtKCcnLCAnMTAuNCcpKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFs
cyhpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykKIAotICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2lu
Zm8oZmFrZV9zeXMoJ2ZyZWVic2Q5JykpCisgICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhm
YWtlX3N5cygnZnJlZWJzZDknKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzkuMC1SRUxFQVNFJykpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGluZm8uZGlzcGxheV9uYW1lKCksICcnKQogCiAg
ICAgZGVmIHRlc3RfdG90YWxfYnl0ZXNfbWVtb3J5KHNlbGYpOgpAQCAtMTgxLDggKzE4Miw4IEBA
IGNsYXNzIFRlc3RQbGF0Zm9ybUluZm8odW5pdHRlc3QuVGVzdENhc2UKICAgICAgICAgaW5mbyA9
IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3aW4zMicsIHR1cGxlKFs2LCAxLCA3NjAwXSkpKQog
ICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbmZvLnRvdGFsX2J5dGVzX21lbW9yeSgpKQogCi0g
ICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnbGludXgyJykpCisgICAgICAg
IGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnbGludXgyJyksIGZha2VfcGxhdGZvcm0o
JycsICcxMC40JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGluZm8udG90YWxfYnl0ZXNf
bWVtb3J5KCkpCiAKLSAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdmcmVl
YnNkOScpKQorICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2ZyZWVic2Q5
JyksIGZha2VfcGxhdGZvcm0oJycsICc5LjAtUkVMRUFTRScpKQogICAgICAgICBzZWxmLmFzc2Vy
dElzTm9uZShpbmZvLnRvdGFsX2J5dGVzX21lbW9yeSgpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327660</attachid>
            <date>2017-11-27 12:41:10 -0800</date>
            <delta_ts>2017-11-27 14:48:44 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-179621-20171127124109.patch</filename>
            <type>text/plain</type>
            <size>23776</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNTE4NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU0IEBACisyMDE3LTExLTI3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogQmV0dGVyIG5hbWUtdmVyc2lvbiBtYXBwaW5nIChQYXJ0
IDEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk2
MjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM1NTg5NTg1PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhdmlkIEtpbHplci4KKworICAgICAgICBNYXBwaW5nIHZlcnNpb24gbnVtYmVycyB0byB2
ZXJzaW9uIG5hbWVzIHNob3VsZCBvY2N1ciBpbiBhIGNlbnRyYWwgbG9jYXRpb24uCisgICAgICAg
IFRoaXMgaGFzIGEgZmV3IGFkdmFudGFnZXMuIEZpcnN0LCBpdCBtYWtlcyBpdGVyYXRpbmcgdGhy
b3VnaCB2ZXJzaW9ucyBlYXNpZXIuCisgICAgICAgIFNlY29uZCwgaXQgYWxsb3dzIGZvciBhcHBs
ZV9hZGRpdGlvbnMgdG8gZGVmaW5lIGFuIGFkZGl0aW9uYWwgc2V0IG9mIG5hbWUKKyAgICAgICAg
bWFwcGluZ3MuIExhc3RseSwgaXQgd2lsbCBhbGxvdywgaW4gYSBmdXR1cmUgcGF0Y2gsIGZvciB1
cyB0byB0cmFjayB2ZXJzaW9uCisgICAgICAgIGluc3RlYWQgb2YgdmVyc2lvbiBuYW1lLCBvbmx5
IG1hcHBpbmcgdmVyc2lvbiB0byB2ZXJzaW9uIG5hbWUgd2hlbiByZXF1aXJlZC4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHk6CisgICAg
ICAgIChQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoUGxhdGZvcm1JbmZvLl9kZXRl
cm1pbmVfb3NfbmFtZSk6IFVzZSBWZXJzaW9uTmFtZU1hcCBpbnN0ZWFkIG9mIGN1c3RvbSBmdW5j
dGlvbnMKKyAgICAgICAgbWFwcGluZyB2ZXJzaW9uIHRvIG5hbWUuCisgICAgICAgIChQbGF0Zm9y
bUluZm8uX2RldGVybWluZV9saW51eF92ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRm
b3JtSW5mby5fZGV0ZXJtaW5lX21hY192ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRm
b3JtSW5mby5fZGV0ZXJtaW5lX3dpbl92ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAoVGVzdFBsYXRmb3JtSW5mby50ZXN0X29zX25hbWVfYW5kX3dyYXBwZXJzKToKKyAgICAg
ICAgKFRlc3RQbGF0Zm9ybUluZm8udGVzdF9vc192ZXJzaW9uKToKKyAgICAgICAgKFRlc3RQbGF0
Zm9ybUluZm8udGVzdF9kaXNwbGF5X25hbWUpOgorICAgICAgICAoVGVzdFBsYXRmb3JtSW5mby50
ZXN0X3RvdGFsX2J5dGVzX21lbW9yeSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21t
b24vdmVyc2lvbi5weToKKyAgICAgICAgKFZlcnNpb24uY29udGFpbmVkX2luKTogQWRkIHBhcnRp
YWwgdmVyc2lvbiBtYXBwaW5nLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Zl
cnNpb25fbmFtZV9tYXAucHk6IEFkZGVkLgorICAgICAgICAoVmVyc2lvbk5hbWVNYXApOiBIb2xk
cyBhIG1hcHBpbmcgb2YgdmVyc2lvbiBuYW1lIHRvIHZlcnNpb24gb2JqZWN0LgorICAgICAgICAo
VmVyc2lvbk5hbWVNYXAubWFwKTogRG9uJ3QgcmUtY3JlYXRlIFZlcnNpb25OYW1lTWFwIGV2ZXJ5
IHRpbWUuCisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5fX2luaXRfXyk6IEluaXRpYWxpemUgbWFw
cGluZywgdXNlIHBsYXRmb3JtIHRvCisgICAgICAgIGRlZmluZSB0aGUgZGVmYXVsdCBzeXN0ZW0g
cGxhdGZvcm0uCisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5fYXV0b21hcF90b19tYWpvcl92ZXJz
aW9uKTogU29tZSBvcGVyYXRpbmcgc3lzdGVtcywgc3VjaAorICAgICAgICBhcyBpT1MsIGhhdmUg
YSBuYW1pbmcgc2NoZW1lIGJhc2VkIG9uIHRoZWlyIG1ham9yIHZlcnNpb24gYW5kIG9zIG5hbWUu
CisgICAgICAgIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgc3VjaCBtYXBwaW5ncy4KKyAgICAgICAg
KFZlcnNpb25OYW1lTWFwLnRvX25hbWUpOiBHaXZlbiBhIHZlcnNpb24gb2JqZWN0LCBwbGF0Zm9y
bSBuYW1lIGFuZAorICAgICAgICB0YWJsZSwgZmluZCB0aGUgY2xvc2VzdCBtYXRjaGluZyB2ZXJz
aW9uIG5hbWUuCisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5zdHJpcF9uYW1lX2Zvcm1hdHRpbmcp
OiBSZW1vdmUgc3BhY2VzIGFuZCBleHRyYWN0IHRoZSBtYWpvciB2ZXJzaW9uLAorICAgICAgICBp
ZiBhIHZlcnNpb24gc3RyaW5nIGlzIGluY2x1ZGVkIGluIHRoZSBuYW1lLgorICAgICAgICAoVmVy
c2lvbk5hbWVNYXAuZnJvbV9uYW1lKTogUmV0dXJuIGFuIG9zIG5hbWUgYW5kIHZlcnNpb24gZ2l2
ZW4gYSB2ZXJzaW9uIG5hbWUuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVy
c2lvbl9uYW1lX21hcF91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChWZXJzaW9uTWFwVGVz
dENhc2UpOgorICAgICAgICAoVmVyc2lvbk1hcFRlc3RDYXNlLnRlc3RfZGVmYXVsdF9zeXN0ZW1f
cGxhdGZvcm0pOgorICAgICAgICAoVmVyc2lvbk1hcFRlc3RDYXNlLnRlc3RfbWFjX3ZlcnNpb25f
YnlfbmFtZSk6CisgICAgICAgIChWZXJzaW9uTWFwVGVzdENhc2UudGVzdF9pb3NfdmVyc2lvbl9i
eV9uYW1lKToKKyAgICAgICAgKFZlcnNpb25NYXBUZXN0Q2FzZS50ZXN0X21hY19uYW1lX2J5X3Zl
cnNpb24pOgorICAgICAgICAoVmVyc2lvbk1hcFRlc3RDYXNlLnRlc3RfaW9zX25hbWVfYnlfdmVy
c2lvbik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVz
dC5weToKKyAgICAgICAgKFZlcnNpb25UZXN0Q2FzZS50ZXN0X2NvbnRhaW5lZF9pbik6CisKIDIw
MTctMTEtMjcgIFlhY2luZSBCYW5kb3UgIDx5YWNpbmUuYmFuZG91X2V4dEBzb2Z0YXRob21lLmNv
bT4KIAogICAgICAgICBbR1RLXVtXUEVdIEFkZCAiZW5hYmxlLWVuY3J5cHRlZC1tZWRpYSIgcHJv
cGVydHkgdG8gV2ViS2l0V2ViU2V0dGluZ3MKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3ZlcnNpb24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vdmVyc2lvbi5weQkocmV2aXNpb24gMjI1MTg1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vdmVyc2lvbi5weQkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMTYgQEAg
Y2xhc3MgVmVyc2lvbihvYmplY3QpOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVmVy
c2lvbiBrZXkgbXVzdCBiZSBtYWpvciwgbWlub3IsIHRpbnksIG1pY3JvIG9yIG5hbm8nKQogICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCdFeHBlY3RlZCB2ZXJzaW9uIGtleSB0byBiZSBzdHJpbmcg
b3IgaW50ZWdlcicpCiAKKyAgICAjIDExLjIgaXMgY29udGFpbmVkIGluIDExLCBidXQgMTEgaXMg
bm90IGNvbnRhaW5lZCBpbiAxMS4yCisgICAgZGVmIGNvbnRhaW5lZF9pbihzZWxmLCB2ZXJzaW9u
KToKKyAgICAgICAgZG9lc19tYXRjaCA9IFRydWUKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxl
bihzZWxmKSk6CisgICAgICAgICAgICBpZiBzZWxmW2ldICE9IHZlcnNpb25baV06CisgICAgICAg
ICAgICAgICAgZG9lc19tYXRjaCA9IEZhbHNlCisgICAgICAgICAgICBpZiBub3QgZG9lc19tYXRj
aCBhbmQgdmVyc2lvbltpXSAhPSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAg
ICAgICByZXR1cm4gVHJ1ZQorCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIGxlbl90
b19wcmludCA9IDEKICAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihzZWxmKSk6CkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXAucHkJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl9u
YW1lX21hcC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorIyBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
IyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgcmUKKworZnJvbSB3ZWJraXRweS5j
b21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJz
aW9uIGltcG9ydCBWZXJzaW9uCisKKworY2xhc3MgVmVyc2lvbk5hbWVNYXAob2JqZWN0KToKKwor
ICAgICMgQWxsb3dzIGFwcGxlX2FkZGl0aW9ucyB0byBkZWZpbmUgYSBjdXN0b20gbWFwcGluZwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBAbWVtb2l6ZWQKKyAgICBkZWYgbWFwKHBsYXRmb3JtPU5v
bmUpOgorICAgICAgICByZXR1cm4gVmVyc2lvbk5hbWVNYXAocGxhdGZvcm09cGxhdGZvcm0pCisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgcGxhdGZvcm09Tm9uZSk6CisgICAgICAgIGlmIHBsYXRm
b3JtIGlzIE5vbmU6CisgICAgICAgICAgICBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lz
dGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAorICAgICAgICAgICAgcGxhdGZvcm0gPSBTeXN0ZW1I
b3N0KCkucGxhdGZvcm0KKyAgICAgICAgc2VsZi5tYXBwaW5nID0ge30KKworICAgICAgICBzZWxm
LmRlZmF1bHRfc3lzdGVtX3BsYXRmb3JtID0gcGxhdGZvcm0ub3NfbmFtZQorICAgICAgICBzZWxm
Lm1hcHBpbmdbJ3B1YmxpYyddID0geworICAgICAgICAgICAgJ21hYyc6IHsKKyAgICAgICAgICAg
ICAgICAnTGVvcGFyZCc6IFZlcnNpb24oJzEwLjUnKSwKKyAgICAgICAgICAgICAgICAnU25vdyBM
ZW9wYXJkJzogVmVyc2lvbignMTAuNicpLAorICAgICAgICAgICAgICAgICdMaW9uJzogVmVyc2lv
bignMTAuNycpLAorICAgICAgICAgICAgICAgICdNb3VudGFpbiBMaW9uJzogVmVyc2lvbignMTAu
OCcpLAorICAgICAgICAgICAgICAgICdNYXZlcmlja3MnOiBWZXJzaW9uKCcxMC45JyksCisgICAg
ICAgICAgICAgICAgJ1lvc2VtaXRlJzogVmVyc2lvbignMTAuMTAnKSwKKyAgICAgICAgICAgICAg
ICAnRWwgQ2FwaXRhbic6IFZlcnNpb24oJzEwLjExJyksCisgICAgICAgICAgICAgICAgJ1NpZXJy
YSc6IFZlcnNpb24oJzEwLjEyJyksCisgICAgICAgICAgICAgICAgJ0hpZ2ggU2llcnJhJzogVmVy
c2lvbignMTAuMTMnKSwKKyAgICAgICAgICAgICAgICAnRnV0dXJlJzogVmVyc2lvbignMTAuMTQn
KSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAnaW9zJzogc2VsZi5fYXV0b21hcF90b19t
YWpvcl92ZXJzaW9uKCdpT1MnLCBtaW5pbXVtPVZlcnNpb24oJzEwJyksIG1heGltdW09VmVyc2lv
bignMTEnKSksCisgICAgICAgICAgICAnd2luJzogeworICAgICAgICAgICAgICAgICdXaW4xMCc6
IFZlcnNpb24oJzEwJyksCisgICAgICAgICAgICAgICAgJzguMSc6IFZlcnNpb24oJzYuMycpLAor
ICAgICAgICAgICAgICAgICc4JzogVmVyc2lvbignNi4yJyksCisgICAgICAgICAgICAgICAgJzdz
cDAnOiBWZXJzaW9uKCc2LjEuNzYwMCcpLAorICAgICAgICAgICAgICAgICdWaXN0YSc6IFZlcnNp
b24oJzYnKSwKKyAgICAgICAgICAgICAgICAnWFAnOiBWZXJzaW9uKCc1LjEnKSwKKyAgICAgICAg
ICAgIH0sCisgICAgICAgIH0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfYXV0b21hcF90
b19tYWpvcl92ZXJzaW9uKGNscywgcHJlZml4LCBtaW5pbXVtPVZlcnNpb24oJzEnKSwgbWF4aW11
bT1WZXJzaW9uKCcxJykpOgorICAgICAgICByZXN1bHQgPSB7fQorICAgICAgICBhc3NlcnQgbWlu
aW11bSA8PSBtYXhpbXVtCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgobWF4aW11bS5tYWpvciAr
IDEpIC0gbWluaW11bS5tYWpvcik6CisgICAgICAgICAgICByZXN1bHRbJ3t9IHt9Jy5mb3JtYXQo
cHJlZml4LCBzdHIoVmVyc2lvbihzdHIobWluaW11bS5tYWpvciArIGkpKSkpXSA9IFZlcnNpb24o
c3RyKG1pbmltdW0ubWFqb3IgKyBpKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVm
IHRvX25hbWUoc2VsZiwgdmVyc2lvbiwgcGxhdGZvcm09Tm9uZSwgdGFibGU9J3B1YmxpYycpOgor
ICAgICAgICBwbGF0Zm9ybSA9IHNlbGYuZGVmYXVsdF9zeXN0ZW1fcGxhdGZvcm0gaWYgcGxhdGZv
cm0gaXMgTm9uZSBlbHNlIHBsYXRmb3JtCisgICAgICAgIGFzc2VydCB0YWJsZSBpbiBzZWxmLm1h
cHBpbmcKKyAgICAgICAgYXNzZXJ0IHBsYXRmb3JtIGluIHNlbGYubWFwcGluZ1t0YWJsZV0KKyAg
ICAgICAgY2xvc2VzdF9tYXRjaCA9IChOb25lLCBOb25lKQorICAgICAgICB2ZXJzaW9uID0gVmVy
c2lvbih2ZXJzaW9uKQorICAgICAgICBmb3Igb3NfbmFtZSwgb3NfdmVyc2lvbiBpbiBzZWxmLm1h
cHBpbmdbdGFibGVdW3BsYXRmb3JtXS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZlcnNp
b24gPT0gb3NfdmVyc2lvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gb3NfbmFtZQorICAgICAg
ICAgICAgZWxpZiB2ZXJzaW9uLmNvbnRhaW5lZF9pbihvc192ZXJzaW9uKToKKyAgICAgICAgICAg
ICAgICBpZiBjbG9zZXN0X21hdGNoWzFdIGFuZCBjbG9zZXN0X21hdGNoWzFdLmNvbnRhaW5lZF9p
bihvc192ZXJzaW9uKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAg
ICAgICBjbG9zZXN0X21hdGNoID0gKG9zX25hbWUsIG9zX3ZlcnNpb24pCisgICAgICAgIHJldHVy
biBjbG9zZXN0X21hdGNoWzBdCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHN0cmlwX25h
bWVfZm9ybWF0dGluZyhuYW1lKToKKyAgICAgICAgIyA8T1M+IG1ham9yLm1pbm9yLnRpbnkgc2hv
dWxkIG1hcCB0byA8T1M+IG1ham9yCisgICAgICAgIGlmICcgJyBpbiBuYW1lOgorICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgIG5hbWUgPSAne317fScuZm9ybWF0KCcnLmpvaW4obmFt
ZS5zcGxpdCgnICcpWzotMV0pLCBWZXJzaW9uKG5hbWUuc3BsaXQoJyAnKVstMV0pLm1ham9yKQor
ICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNwbGl0ID0gcmUu
c3BsaXQocidcZCcsIG5hbWUpCisgICAgICAgICAgICAgICAgbmFtZSA9ICd7fXt9Jy5mb3JtYXQo
c3BsaXRbMF0sIFZlcnNpb24obmFtZVsobGVuKHNwbGl0KSAtIDEpOl0pLm1ham9yKQorICAgICAg
ICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAg
ICMgU3RyaXAgb3V0IGFueSBzcGFjZXMsIG1ha2UgZXZlcnl0aGluZyBsb3dlci1jYXNlCisgICAg
ICAgIHJlc3VsdCA9IG5hbWUucmVwbGFjZSgnICcsICcnKS5sb3dlcigpCisgICAgICAgIHJldHVy
biByZXN1bHQKKworICAgIGRlZiBmcm9tX25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgICMgRXhh
Y3QgbWF0Y2gKKyAgICAgICAgZm9yIF8sIG1hcCBpbiBzZWxmLm1hcHBpbmcuaXRlcml0ZW1zKCk6
CisgICAgICAgICAgICBmb3Igb3NfbmFtZSwgb3NfbWFwIGluIG1hcC5pdGVyaXRlbXMoKToKKyAg
ICAgICAgICAgICAgICBpZiBuYW1lIGluIG9zX21hcDoKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIChvc19uYW1lLCBvc19tYXBbbmFtZV0pCisKKyAgICAgICAgIyBJdCdzIG5vdCBhbiBleGFj
dCBtYXRjaCwgbGV0J3MgdHJ5IHVuaWZ5aW5nIGZvcm1hdHRpbmcKKyAgICAgICAgdW5mb3JtYXR0
ZWQgPSBzZWxmLnN0cmlwX25hbWVfZm9ybWF0dGluZyhuYW1lKQorICAgICAgICBmb3IgXywgbWFw
IGluIHNlbGYubWFwcGluZy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBvc19uYW1lLCBv
c19tYXAgaW4gbWFwLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGZvciB2ZXJzaW9uX25h
bWUsIHZlcnNpb24gaW4gb3NfbWFwLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBp
ZiBzZWxmLnN0cmlwX25hbWVfZm9ybWF0dGluZyh2ZXJzaW9uX25hbWUpID09IHVuZm9ybWF0dGVk
OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvc19uYW1lLCB2ZXJzaW9uKQorICAg
ICAgICByZXR1cm4gKE5vbmUsIE5vbmUpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi92ZXJzaW9uX25hbWVfbWFwX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXBfdW5pdHRlc3QucHkJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl9uYW1lX21h
cF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisjIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAorZnJvbSB3
ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgorZnJvbSB2ZXJzaW9uX25hbWVf
bWFwIGltcG9ydCBWZXJzaW9uTmFtZU1hcAorCisKK2NsYXNzIFZlcnNpb25NYXBUZXN0Q2FzZSh1
bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3N5c3RlbV9wbGF0Zm9y
bShzZWxmKToKKyAgICAgICAgaG9zdCA9IFN5c3RlbUhvc3QoKQorICAgICAgICBtYXAgPSBWZXJz
aW9uTmFtZU1hcChwbGF0Zm9ybT1ob3N0LnBsYXRmb3JtKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKG1hcC5kZWZhdWx0X3N5c3RlbV9wbGF0Zm9ybSwgaG9zdC5wbGF0Zm9ybS5vc19uYW1lKQor
CisgICAgZGVmIHRlc3RfbWFjX3ZlcnNpb25fYnlfbmFtZShzZWxmKToKKyAgICAgICAgbWFwID0g
VmVyc2lvbk5hbWVNYXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnbWFjJywgVmVyc2lv
bignMTAuMTInKSksIG1hcC5mcm9tX25hbWUoJ1NpZXJyYScpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCgnbWFjJywgVmVyc2lvbignMTAuMTInKSksIG1hcC5mcm9tX25hbWUoJ3NpZXJyYScp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnbWFjJywgVmVyc2lvbignMTAuMTEnKSksIG1h
cC5mcm9tX25hbWUoJ0VsIENhcGl0YW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ21h
YycsIFZlcnNpb24oJzEwLjExJykpLCBtYXAuZnJvbV9uYW1lKCdlbGNhcGl0YW4nKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgoJ21hYycsIFZlcnNpb24oJzEwLjExJykpLCBtYXAuZnJvbV9u
YW1lKCdlbCBDYXBpdGFuJykpCisKKyAgICBkZWYgdGVzdF9pb3NfdmVyc2lvbl9ieV9uYW1lKHNl
bGYpOgorICAgICAgICBtYXAgPSBWZXJzaW9uTmFtZU1hcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoKCdpb3MnLCBWZXJzaW9uKDExKSksIG1hcC5mcm9tX25hbWUoJ2lPUyAxMScpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCgnaW9zJywgVmVyc2lvbigxMSkpLCBtYXAuZnJvbV9uYW1l
KCdpb3MxMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnaW9zJywgVmVyc2lvbigxMSkp
LCBtYXAuZnJvbV9uYW1lKCdpT1MgMTEuMicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgn
aW9zJywgVmVyc2lvbigxMSkpLCBtYXAuZnJvbV9uYW1lKCdpb3MxMS4yJykpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoKCdpb3MnLCBWZXJzaW9uKDExKSksIG1hcC5mcm9tX25hbWUoJ2lPUzEx
LjInKSkKKworICAgIGRlZiB0ZXN0X21hY19uYW1lX2J5X3ZlcnNpb24oc2VsZik6CisgICAgICAg
IG1hcCA9IFZlcnNpb25OYW1lTWFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnU2llcnJh
JywgbWFwLnRvX25hbWUodmVyc2lvbj1WZXJzaW9uKCcxMC4xMicpLCBwbGF0Zm9ybT0nbWFjJykp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0VsIENhcGl0YW4nLCBtYXAudG9fbmFtZSh2ZXJz
aW9uPVZlcnNpb24oJzEwLjExJyksIHBsYXRmb3JtPSdtYWMnKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnRWwgQ2FwaXRhbicsIG1hcC50b19uYW1lKHZlcnNpb249VmVyc2lvbignMTAuMTEu
MycpLCBwbGF0Zm9ybT0nbWFjJykpCisKKyAgICBkZWYgdGVzdF9pb3NfbmFtZV9ieV92ZXJzaW9u
KHNlbGYpOgorICAgICAgICBtYXAgPSBWZXJzaW9uTmFtZU1hcCgpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ2lPUyAxMScsIG1hcC50b19uYW1lKHZlcnNpb249VmVyc2lvbignMTEnKSwgcGxh
dGZvcm09J2lvcycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdpT1MgMTAnLCBtYXAudG9f
bmFtZSh2ZXJzaW9uPVZlcnNpb24oJzEwJyksIHBsYXRmb3JtPSdpb3MnKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnaU9TIDEwJywgbWFwLnRvX25hbWUodmVyc2lvbj1WZXJzaW9uKCcxMC4z
JyksIHBsYXRmb3JtPSdpb3MnKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3ZlcnNpb25fdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vdmVyc2lvbl91bml0dGVzdC5weQkocmV2aXNpb24gMjI1MTg1KQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVzdC5weQkod29ya2luZyBjb3B5
KQpAQCAtMTI1LDYgKzEyNSwyMiBAQCBjbGFzcyBWZXJzaW9uVGVzdENhc2UodW5pdHRlc3QuVGVz
dENhc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFZlcnNpb24oJzEuMicpKSwgJzEu
MicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFZlcnNpb24oJzAuMC4zJykpLCAnMC4w
LjMnKQogCisgICAgZGVmIHRlc3RfY29udGFpbmVkX2luKHNlbGYpOgorICAgICAgICBzZWxmLmFz
c2VydFRydWUoVmVyc2lvbignMTEuMScpLmNvbnRhaW5lZF9pbihWZXJzaW9uKCcxMScpKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKFZlcnNpb24oJzExLjEuMicpLmNvbnRhaW5lZF9pbihWZXJz
aW9uKCcxMS4xJykpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFZlcnNpb24oJzExJykuY29u
dGFpbmVkX2luKFZlcnNpb24oJzExLjEnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVmVy
c2lvbignMTEnKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEuMS4yJykpKQorICAgICAgICBzZWxm
LmFzc2VydEZhbHNlKFZlcnNpb24oJzExLjEnKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEuMS4y
JykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoVmVyc2lvbignMTEnKS5jb250YWluZWRfaW4o
VmVyc2lvbignMTEnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShWZXJzaW9uKCcxMS4xJyku
Y29udGFpbmVkX2luKFZlcnNpb24oJzExLjEnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShW
ZXJzaW9uKCcxMS4xLjInKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEuMS4yJykpKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUoVmVyc2lvbignMTEnKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEu
MCcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFZlcnNpb24oJzExLjAnKS5jb250YWluZWRf
aW4oVmVyc2lvbignMTEnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShWZXJzaW9uKCcxMScp
LmNvbnRhaW5lZF9pbihWZXJzaW9uKCcxMS4wLjAnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShWZXJzaW9uKCcxMS4wLjAnKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEnKSkpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShWZXJzaW9uKCcxMS4xJykuY29udGFpbmVkX2luKFZlcnNpb24oJzEx
LjEuMCcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFZlcnNpb24oJzExLjEuMCcpLmNvbnRh
aW5lZF9pbihWZXJzaW9uKCcxMS4xJykpKQorCiAgICAgZGVmIHRlc3RfY29tcGFyZV92ZXJzaW9u
cyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWZXJzaW9uKCcxLjIuMycpLCBWZXJz
aW9uKCcxLjIuMycpKQogICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoVmVyc2lvbignMS4yLjQn
KSwgVmVyc2lvbignMS4yLjMnKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQkocmV2aXNpb24gMjI1MTg1KQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQCBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIAogZnJv
bSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgorZnJvbSB3ZWJraXRweS5j
b21tb24udmVyc2lvbl9uYW1lX21hcCBpbXBvcnQgVmVyc2lvbk5hbWVNYXAKIGZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZQogCiAKQEAgLTUxLDE2
ICs1MiwyNyBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAgICAgc2VsZi5fZXhl
Y3V0aXZlID0gZXhlY3V0aXZlCiAgICAgICAgIHNlbGYuX3BsYXRmb3JtX21vZHVsZSA9IHBsYXRm
b3JtX21vZHVsZQogICAgICAgICBzZWxmLm9zX25hbWUgPSBzZWxmLl9kZXRlcm1pbmVfb3NfbmFt
ZShzeXNfbW9kdWxlLnBsYXRmb3JtKQotICAgICAgICBpZiBzZWxmLm9zX25hbWUgPT0gJ2xpbnV4
JzoKLSAgICAgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHNlbGYuX2RldGVybWluZV9saW51eF92
ZXJzaW9uKCkKLSAgICAgICAgaWYgc2VsZi5vc19uYW1lID09ICdmcmVlYnNkJyBvciBzZWxmLm9z
X25hbWUgPT0gJ29wZW5ic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnbmV0YnNkJyBvciBzZWxmLm9z
X25hbWUgPT0gJ2lvcyc6Ci0gICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBwbGF0Zm9ybV9t
b2R1bGUucmVsZWFzZSgpCisgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IE5vbmUKKwogICAgICAg
ICBpZiBzZWxmLm9zX25hbWUuc3RhcnRzd2l0aCgnbWFjJyk6Ci0gICAgICAgICAgICBzZWxmLm9z
X3ZlcnNpb24gPSBzZWxmLl9kZXRlcm1pbmVfbWFjX3ZlcnNpb24oVmVyc2lvbihwbGF0Zm9ybV9t
b2R1bGUubWFjX3ZlcigpWzBdKSkKLSAgICAgICAgaWYgc2VsZi5vc19uYW1lLnN0YXJ0c3dpdGgo
J3dpbicpOgotICAgICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gc2VsZi5fZGV0ZXJtaW5lX3dp
bl92ZXJzaW9uKHNlbGYuX3dpbl92ZXJzaW9uKHN5c19tb2R1bGUpKQorICAgICAgICAgICAgdmVy
c2lvbiA9IFZlcnNpb24ocGxhdGZvcm1fbW9kdWxlLm1hY192ZXIoKVswXSkKKyAgICAgICAgZWxp
ZiBzZWxmLm9zX25hbWUuc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICB2ZXJzaW9uID0g
c2VsZi5fd2luX3ZlcnNpb24oc3lzX21vZHVsZSkKKyAgICAgICAgZWxpZiBzZWxmLm9zX25hbWUg
PT0gJ2xpbnV4JyBvciBzZWxmLm9zX25hbWUgPT0gJ2ZyZWVic2QnIG9yIHNlbGYub3NfbmFtZSA9
PSAnb3BlbmJzZCcgb3Igc2VsZi5vc19uYW1lID09ICduZXRic2QnOgorICAgICAgICAgICAgdmVy
c2lvbiA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgTW9zdCBvdGhlciBwbGF0
Zm9ybXMgKG5hbWVseSBpT1MpIHJldHVybiBjb25mb3JtaW5nIHZlcnNpb24gc3RyaW5ncy4KKyAg
ICAgICAgICAgIHZlcnNpb24gPSBWZXJzaW9uKHBsYXRmb3JtX21vZHVsZS5yZWxlYXNlKCkpCisK
ICAgICAgICAgc2VsZi5faXNfY3lnd2luID0gc3lzX21vZHVsZS5wbGF0Zm9ybSA9PSAnY3lnd2lu
JwogCisgICAgICAgIGlmIHZlcnNpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisg
ICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IFZlcnNpb25OYW1lTWFwLm1hcChzZWxmKS50b19uYW1l
KHZlcnNpb24sIHRhYmxlPSdwdWJsaWMnKQorICAgICAgICBhc3NlcnQgc2VsZi5vc192ZXJzaW9u
IGlzIG5vdCBOb25lCisgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHNlbGYub3NfdmVyc2lvbi5s
b3dlcigpLnJlcGxhY2UoJyAnLCAnJykKKwogICAgIGRlZiBpc19tYWMoc2VsZik6CiAgICAgICAg
IHJldHVybiBzZWxmLm9zX25hbWUgPT0gJ21hYycKIApAQCAtMTY0LDQwICsxNzYsNiBAQCBjbGFz
cyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiAnaGFpa3UnCiAgICAg
ICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCd1bnJlY29nbml6ZWQgcGxhdGZvcm0gc3RyaW5nICIl
cyInICUgc3lzX3BsYXRmb3JtKQogCi0gICAgZGVmIF9kZXRlcm1pbmVfbWFjX3ZlcnNpb24oc2Vs
ZiwgbWFjX3ZlcnNpb24pOgotICAgICAgICB2ZXJzaW9uX3N0cmluZ3MgPSB7Ci0gICAgICAgICAg
ICA1OiAnbGVvcGFyZCcsCi0gICAgICAgICAgICA2OiAnc25vd2xlb3BhcmQnLAotICAgICAgICAg
ICAgNzogJ2xpb24nLAotICAgICAgICAgICAgODogJ21vdW50YWlubGlvbicsCi0gICAgICAgICAg
ICA5OiAnbWF2ZXJpY2tzJywKLSAgICAgICAgICAgIDEwOiAneW9zZW1pdGUnLAotICAgICAgICAg
ICAgMTE6ICdlbGNhcGl0YW4nLAotICAgICAgICAgICAgMTI6ICdzaWVycmEnLAotICAgICAgICAg
ICAgMTM6ICdoaWdoc2llcnJhJywKLSAgICAgICAgfQotICAgICAgICBhc3NlcnQgbWFjX3ZlcnNp
b24ubWlub3IgPj0gbWluKHZlcnNpb25fc3RyaW5ncy5rZXlzKCkpCi0gICAgICAgIHJldHVybiB2
ZXJzaW9uX3N0cmluZ3MuZ2V0KG1hY192ZXJzaW9uLm1pbm9yLCAnZnV0dXJlJykKLQotICAgIGRl
ZiBfZGV0ZXJtaW5lX2xpbnV4X3ZlcnNpb24oc2VsZik6Ci0gICAgICAgICMgRklYTUU6IHdlIGln
bm9yZSB3aGF0ZXZlciB0aGUgcmVhbCB2ZXJzaW9uIGlzIGFuZCBwcmV0ZW5kIGl0J3MgbHVjaWQg
Zm9yIG5vdy4KLSAgICAgICAgcmV0dXJuICdsdWNpZCcKLQotICAgIGRlZiBfZGV0ZXJtaW5lX3dp
bl92ZXJzaW9uKHNlbGYsIHdpbl92ZXJzaW9uKToKLSAgICAgICAgaWYgc2VsZi5fcGxhdGZvcm1f
bW9kdWxlLnJlbGVhc2UoKSA9PSAnMTAnOgotICAgICAgICAgICAgcmV0dXJuICd3aW4xMCcKLSAg
ICAgICAgaWYgd2luX3ZlcnNpb24ubWFqb3IgPT0gMCBhbmQgd2luX3ZlcnNpb24ubWlub3IgPT0g
MDoKLSAgICAgICAgICAgIGlmIHdpbl92ZXJzaW9uWzJdID4gMTAwMDA6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICd3aW4xMCcKLSAgICAgICAgaWYgd2luX3ZlcnNpb24gPT0gVmVyc2lvbihbNiwg
MSwgNzYwMF0pOgotICAgICAgICAgICAgcmV0dXJuICc3c3AwJwotICAgICAgICBpZiB3aW5fdmVy
c2lvbi5tYWpvciA9PSA2IGFuZCB3aW5fdmVyc2lvbi5taW5vciA9PSAwOgotICAgICAgICAgICAg
cmV0dXJuICd2aXN0YScKLSAgICAgICAgaWYgd2luX3ZlcnNpb24ubWFqb3IgPT0gNSBhbmQgd2lu
X3ZlcnNpb24ubWlub3IgPT0gMToKLSAgICAgICAgICAgIHJldHVybiAneHAnCi0gICAgICAgIGFz
c2VydCB3aW5fdmVyc2lvblswXSA+IDYgb3Igd2luX3ZlcnNpb25bMV0gPj0gMSwgJ1VucmVjb2du
aXplZCBXaW5kb3dzIHZlcnNpb246ICJ7fSInLmZvcm1hdCh3aW5fdmVyc2lvbikKLSAgICAgICAg
cmV0dXJuICdmdXR1cmUnCi0KICAgICBkZWYgX3dpbl92ZXJzaW9uKHNlbGYsIHN5c19tb2R1bGUp
OgogICAgICAgICBpZiBoYXNhdHRyKHN5c19tb2R1bGUsICdnZXR3aW5kb3dzdmVyc2lvbicpOgog
ICAgICAgICAgICAgcmV0dXJuIFZlcnNpb24oc3lzX21vZHVsZS5nZXR3aW5kb3dzdmVyc2lvbigp
WzA6M10pCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZv
cm1pbmZvX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fdW5pdHRlc3QucHkJKHJldmlzaW9uIDIyNTE4NSkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fdW5p
dHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTg3LDEzICs4NywxMyBAQCBjbGFzcyBUZXN0UGxh
dGZvcm1JbmZvKHVuaXR0ZXN0LlRlc3RDYXNlCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9u
ZShpbmZvLnRvdGFsX2J5dGVzX21lbW9yeSgpKQogCiAgICAgZGVmIHRlc3Rfb3NfbmFtZV9hbmRf
d3JhcHBlcnMoc2VsZik6Ci0gICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygn
bGludXgyJykpCisgICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnbGludXgy
JyksIGZha2VfcGxhdGZvcm0oJycsICcxMC40JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShp
bmZvLmlzX2xpbnV4KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5pc19tYWMoKSkK
ICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbmZvLmlzX3dpbigpKQogICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKGluZm8uaXNfZnJlZWJzZCgpKQogCi0gICAgICAgIGluZm8gPSBzZWxmLm1ha2Vf
aW5mbyhmYWtlX3N5cygnbGludXgzJykpCisgICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhm
YWtlX3N5cygnbGludXgzJyksIGZha2VfcGxhdGZvcm0oJycsICcxMC40JykpCiAgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShpbmZvLmlzX2xpbnV4KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
aW5mby5pc19tYWMoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbmZvLmlzX3dpbigpKQpA
QCAtMTIyLDcgKzEyMiw3IEBAIGNsYXNzIFRlc3RQbGF0Zm9ybUluZm8odW5pdHRlc3QuVGVzdENh
c2UKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbmZvLmlzX25hdGl2ZV93aW4oKSkKICAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShpbmZvLmlzX2ZyZWVic2QoKSkKIAotICAgICAgICBpbmZvID0g
c2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2ZyZWVic2Q4JykpCisgICAgICAgIGluZm8gPSBzZWxm
Lm1ha2VfaW5mbyhmYWtlX3N5cygnZnJlZWJzZDgnKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzguMy1Q
UkVSRUxFQVNFJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5vc19uYW1lLCAnZnJl
ZWJzZCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5pc19saW51eCgpKQogICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKGluZm8uaXNfbWFjKCkpCkBAIC0xNDQsMTkgKzE0NCwyMCBAQCBj
bGFzcyBUZXN0UGxhdGZvcm1JbmZvKHVuaXR0ZXN0LlRlc3RDYXNlCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3Jt
KCcxMC4xMy4wJykpLm9zX3ZlcnNpb24sICdoaWdoc2llcnJhJykKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZGFyd2luJyksIGZha2VfcGxhdGZvcm0o
JzEwLjE0LjAnKSkub3NfdmVyc2lvbiwgJ2Z1dHVyZScpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnbGludXgyJykpLm9zX3ZlcnNpb24sICdsdWNp
ZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xp
bnV4MicpLCBmYWtlX3BsYXRmb3JtKCcnLCAnMTAuNCcpKS5vc192ZXJzaW9uLCBOb25lKQogCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2ZyZWVic2Q4
JyksIGZha2VfcGxhdGZvcm0oJycsICc4LjMtUFJFUkVMRUFTRScpKS5vc192ZXJzaW9uLCAnOC4z
LVBSRVJFTEVBU0UnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZh
a2Vfc3lzKCdmcmVlYnNkOScpLCBmYWtlX3BsYXRmb3JtKCcnLCAnOS4wLVJFTEVBU0UnKSkub3Nf
dmVyc2lvbiwgJzkuMC1SRUxFQVNFJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1h
a2VfaW5mbyhmYWtlX3N5cygnZnJlZWJzZDgnKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzguMy1QUkVS
RUxFQVNFJykpLm9zX3ZlcnNpb24sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vs
Zi5tYWtlX2luZm8oZmFrZV9zeXMoJ2ZyZWVic2Q5JyksIGZha2VfcGxhdGZvcm0oJycsICc5LjAt
UkVMRUFTRScpKS5vc192ZXJzaW9uLCBOb25lKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KEFzc2VydGlvbkVycm9yLCBzZWxmLm1ha2VfaW5mbywgZmFrZV9zeXMoJ3dpbjMyJywgdHVwbGUo
WzUsIDAsIDEyMzRdKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8o
ZmFrZV9zeXMoJ3dpbjMyJywgdHVwbGUoWzYsIDIsIDEyMzRdKSkpLm9zX3ZlcnNpb24sICdmdXR1
cmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3
aW4zMicsIHR1cGxlKFsxMCwgMCwgMTQzOTNdKSkpLm9zX3ZlcnNpb24sICd3aW4xMCcpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMyJywgdHVw
bGUoWzYsIDIsIDEyMzRdKSkpLm9zX3ZlcnNpb24sICc4JykKICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnd2luMzInLCB0dXBsZShbNiwgMSwgNzYwMF0p
KSkub3NfdmVyc2lvbiwgJzdzcDAnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFr
ZV9pbmZvKGZha2Vfc3lzKCd3aW4zMicsIHR1cGxlKFs2LCAwLCAxMjM0XSkpKS5vc192ZXJzaW9u
LCAndmlzdGEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vf
c3lzKCd3aW4zMicsIHR1cGxlKFs1LCAxLCAxMjM0XSkpKS5vc192ZXJzaW9uLCAneHAnKQogCiAg
ICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBzZWxmLm1ha2VfaW5mbywg
ZmFrZV9zeXMoJ3dpbjMyJyksIGV4ZWN1dGl2ZT1mYWtlX2V4ZWN1dGl2ZSgnNS4wLjEyMzQnKSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnY3lnd2lu
JyksIGV4ZWN1dGl2ZT1mYWtlX2V4ZWN1dGl2ZSgnNi4yLjEyMzQnKSkub3NfdmVyc2lvbiwgJ2Z1
dHVyZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMo
J2N5Z3dpbicpLCBleGVjdXRpdmU9ZmFrZV9leGVjdXRpdmUoJzYuMi4xMjM0JykpLm9zX3ZlcnNp
b24sICc4JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5
cygnY3lnd2luJyksIGV4ZWN1dGl2ZT1mYWtlX2V4ZWN1dGl2ZSgnNi4xLjc2MDAnKSkub3NfdmVy
c2lvbiwgJzdzcDAnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZh
a2Vfc3lzKCdjeWd3aW4nKSwgZXhlY3V0aXZlPWZha2VfZXhlY3V0aXZlKCc2LjAuMTIzNCcpKS5v
c192ZXJzaW9uLCAndmlzdGEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9p
bmZvKGZha2Vfc3lzKCdjeWd3aW4nKSwgZXhlY3V0aXZlPWZha2VfZXhlY3V0aXZlKCc1LjEuMTIz
NCcpKS5vc192ZXJzaW9uLCAneHAnKQpAQCAtMTY4LDEwICsxNjksMTAgQEAgY2xhc3MgVGVzdFBs
YXRmb3JtSW5mbyh1bml0dGVzdC5UZXN0Q2FzZQogICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2lu
Zm8oZmFrZV9zeXMoJ3dpbjMyJywgdHVwbGUoWzYsIDEsIDc2MDBdKSkpCiAgICAgICAgIHNlbGYu
YXNzZXJ0Tm90RXF1YWxzKGluZm8uZGlzcGxheV9uYW1lKCksICcnKQogCi0gICAgICAgIGluZm8g
PSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnbGludXgyJykpCisgICAgICAgIGluZm8gPSBzZWxm
Lm1ha2VfaW5mbyhmYWtlX3N5cygnbGludXgyJyksIGZha2VfcGxhdGZvcm0oJycsICcxMC40Jykp
CiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGluZm8uZGlzcGxheV9uYW1lKCksICcnKQog
Ci0gICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZnJlZWJzZDknKSkKKyAg
ICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdmcmVlYnNkOScpLCBmYWtlX3Bs
YXRmb3JtKCcnLCAnOS4wLVJFTEVBU0UnKSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMo
aW5mby5kaXNwbGF5X25hbWUoKSwgJycpCiAKICAgICBkZWYgdGVzdF90b3RhbF9ieXRlc19tZW1v
cnkoc2VsZik6CkBAIC0xODEsOCArMTgyLDggQEAgY2xhc3MgVGVzdFBsYXRmb3JtSW5mbyh1bml0
dGVzdC5UZXN0Q2FzZQogICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dp
bjMyJywgdHVwbGUoWzYsIDEsIDc2MDBdKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGlu
Zm8udG90YWxfYnl0ZXNfbWVtb3J5KCkpCiAKLSAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZv
KGZha2Vfc3lzKCdsaW51eDInKSkKKyAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vf
c3lzKCdsaW51eDInKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzEwLjQnKSkKICAgICAgICAgc2VsZi5h
c3NlcnRJc05vbmUoaW5mby50b3RhbF9ieXRlc19tZW1vcnkoKSkKIAotICAgICAgICBpbmZvID0g
c2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2ZyZWVic2Q5JykpCisgICAgICAgIGluZm8gPSBzZWxm
Lm1ha2VfaW5mbyhmYWtlX3N5cygnZnJlZWJzZDknKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzkuMC1S
RUxFQVNFJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGluZm8udG90YWxfYnl0ZXNfbWVt
b3J5KCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327685</attachid>
            <date>2017-11-27 14:48:47 -0800</date>
            <delta_ts>2017-12-07 10:47:14 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-179621-20171127144846.patch</filename>
            <type>text/plain</type>
            <size>24890</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNTE5NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU2IEBACisyMDE3LTExLTI3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogQmV0dGVyIG5hbWUtdmVyc2lvbiBtYXBwaW5nIChQYXJ0
IDEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk2
MjEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM1NTg5NTg1PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhdmlkIEtpbHplci4KKworICAgICAgICBNYXBwaW5nIHZlcnNpb24gbnVtYmVycyB0byB2
ZXJzaW9uIG5hbWVzIHNob3VsZCBvY2N1ciBpbiBhIGNlbnRyYWwgbG9jYXRpb24uCisgICAgICAg
IFRoaXMgaGFzIGEgZmV3IGFkdmFudGFnZXMuIEZpcnN0LCBpdCBtYWtlcyBpdGVyYXRpbmcgdGhy
b3VnaCB2ZXJzaW9ucyBlYXNpZXIuCisgICAgICAgIFNlY29uZCwgaXQgYWxsb3dzIGZvciBhcHBs
ZV9hZGRpdGlvbnMgdG8gZGVmaW5lIGFuIGFkZGl0aW9uYWwgc2V0IG9mIG5hbWUKKyAgICAgICAg
bWFwcGluZ3MuIExhc3RseSwgaXQgd2lsbCBhbGxvdywgaW4gYSBmdXR1cmUgcGF0Y2gsIGZvciB1
cyB0byB0cmFjayB2ZXJzaW9uCisgICAgICAgIGluc3RlYWQgb2YgdmVyc2lvbiBuYW1lLCBvbmx5
IG1hcHBpbmcgdmVyc2lvbiB0byB2ZXJzaW9uIG5hbWUgd2hlbiByZXF1aXJlZC4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHk6CisgICAg
ICAgIChQbGF0Zm9ybUluZm8uX19pbml0X18pOgorICAgICAgICAoUGxhdGZvcm1JbmZvLl9kZXRl
cm1pbmVfb3NfbmFtZSk6IFVzZSBWZXJzaW9uTmFtZU1hcCBpbnN0ZWFkIG9mIGN1c3RvbSBmdW5j
dGlvbnMKKyAgICAgICAgbWFwcGluZyB2ZXJzaW9uIHRvIG5hbWUuCisgICAgICAgIChQbGF0Zm9y
bUluZm8uX2RldGVybWluZV9saW51eF92ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRm
b3JtSW5mby5fZGV0ZXJtaW5lX21hY192ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFBsYXRm
b3JtSW5mby5fZGV0ZXJtaW5lX3dpbl92ZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAoVGVzdFBsYXRmb3JtSW5mby50ZXN0X29zX25hbWVfYW5kX3dyYXBwZXJzKToKKyAgICAg
ICAgKFRlc3RQbGF0Zm9ybUluZm8udGVzdF9vc192ZXJzaW9uKToKKyAgICAgICAgKFRlc3RQbGF0
Zm9ybUluZm8udGVzdF9kaXNwbGF5X25hbWUpOgorICAgICAgICAoVGVzdFBsYXRmb3JtSW5mby50
ZXN0X3RvdGFsX2J5dGVzX21lbW9yeSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21t
b24vdmVyc2lvbi5weToKKyAgICAgICAgKFZlcnNpb24uY29udGFpbmVkX2luKTogQWRkIHBhcnRp
YWwgdmVyc2lvbiBtYXBwaW5nLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Zl
cnNpb25fbmFtZV9tYXAucHk6IEFkZGVkLgorICAgICAgICAoVmVyc2lvbk5hbWVNYXApOiBIb2xk
cyBhIG1hcHBpbmcgb2YgdmVyc2lvbiBuYW1lIHRvIHZlcnNpb24gb2JqZWN0LgorICAgICAgICAo
VmVyc2lvbk5hbWVNYXAubWFwKTogRG9uJ3QgcmUtY3JlYXRlIFZlcnNpb25OYW1lTWFwIGV2ZXJ5
IHRpbWUuCisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5fX2luaXRfXyk6IEluaXRpYWxpemUgbWFw
cGluZywgdXNlIHBsYXRmb3JtIHRvCisgICAgICAgIGRlZmluZSB0aGUgZGVmYXVsdCBzeXN0ZW0g
cGxhdGZvcm0uCisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5fYXV0b21hcF90b19tYWpvcl92ZXJz
aW9uKTogU29tZSBvcGVyYXRpbmcgc3lzdGVtcywgc3VjaAorICAgICAgICBhcyBpT1MsIGhhdmUg
YSBuYW1pbmcgc2NoZW1lIGJhc2VkIG9uIHRoZWlyIG1ham9yIHZlcnNpb24gYW5kIG9zIG5hbWUu
CisgICAgICAgIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgc3VjaCBtYXBwaW5ncy4KKyAgICAgICAg
KFZlcnNpb25OYW1lTWFwLnRvX25hbWUpOiBHaXZlbiBhIHZlcnNpb24gb2JqZWN0LCBwbGF0Zm9y
bSBuYW1lIGFuZAorICAgICAgICB0YWJsZSwgZmluZCB0aGUgY2xvc2VzdCBtYXRjaGluZyB2ZXJz
aW9uIG5hbWUuCisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5zdHJpcF9uYW1lX2Zvcm1hdHRpbmcp
OiBSZW1vdmUgc3BhY2VzIGFuZCBleHRyYWN0IHRoZSBtYWpvciB2ZXJzaW9uLAorICAgICAgICBp
ZiBhIHZlcnNpb24gc3RyaW5nIGlzIGluY2x1ZGVkIGluIHRoZSBuYW1lLgorICAgICAgICAoVmVy
c2lvbk5hbWVNYXAuZnJvbV9uYW1lKTogUmV0dXJuIGFuIG9zIG5hbWUgYW5kIHZlcnNpb24gZ2l2
ZW4gYSB2ZXJzaW9uIG5hbWUuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVy
c2lvbl9uYW1lX21hcF91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChWZXJzaW9uTWFwVGVz
dENhc2UpOgorICAgICAgICAoVmVyc2lvbk1hcFRlc3RDYXNlLnRlc3RfZGVmYXVsdF9zeXN0ZW1f
cGxhdGZvcm0pOgorICAgICAgICAoVmVyc2lvbk1hcFRlc3RDYXNlLnRlc3RfbWFjX3ZlcnNpb25f
YnlfbmFtZSk6CisgICAgICAgIChWZXJzaW9uTWFwVGVzdENhc2UudGVzdF9pb3NfdmVyc2lvbl9i
eV9uYW1lKToKKyAgICAgICAgKFZlcnNpb25NYXBUZXN0Q2FzZS50ZXN0X21hY19uYW1lX2J5X3Zl
cnNpb24pOgorICAgICAgICAoVmVyc2lvbk1hcFRlc3RDYXNlLnRlc3RfaW9zX25hbWVfYnlfdmVy
c2lvbik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVz
dC5weToKKyAgICAgICAgKFZlcnNpb25UZXN0Q2FzZS50ZXN0X2NvbnRhaW5lZF9pbik6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHk6CisgICAgICAgIChJT1NE
ZXZpY2VQb3J0Lmlvc192ZXJzaW9uKTogTWFwIG9zX3ZlcnNpb24gbmFtZSB0byB2ZXJzaW9uIG51
bWJlci4KKwogMjAxNy0xMS0yNyAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29t
PgogCiAgICAgICAgIFtDTWFrZV1bV2luXSBDb25kaXRpb25hbGx5IHNlbGVjdCBETEwgQ1JUIG9y
IHN0YXRpYyBDUlQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb24u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbi5w
eQkocmV2aXNpb24gMjI1MTk0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVy
c2lvbi5weQkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMTYgQEAgY2xhc3MgVmVyc2lvbihv
YmplY3QpOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVmVyc2lvbiBrZXkgbXVzdCBi
ZSBtYWpvciwgbWlub3IsIHRpbnksIG1pY3JvIG9yIG5hbm8nKQogICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCdFeHBlY3RlZCB2ZXJzaW9uIGtleSB0byBiZSBzdHJpbmcgb3IgaW50ZWdlcicpCiAK
KyAgICAjIDExLjIgaXMgY29udGFpbmVkIGluIDExLCBidXQgMTEgaXMgbm90IGNvbnRhaW5lZCBp
biAxMS4yCisgICAgZGVmIGNvbnRhaW5lZF9pbihzZWxmLCB2ZXJzaW9uKToKKyAgICAgICAgZG9l
c19tYXRjaCA9IFRydWUKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihzZWxmKSk6CisgICAg
ICAgICAgICBpZiBzZWxmW2ldICE9IHZlcnNpb25baV06CisgICAgICAgICAgICAgICAgZG9lc19t
YXRjaCA9IEZhbHNlCisgICAgICAgICAgICBpZiBub3QgZG9lc19tYXRjaCBhbmQgdmVyc2lvbltp
XSAhPSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1
ZQorCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIGxlbl90b19wcmludCA9IDEKICAg
ICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihzZWxmKSk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXAucHkJKG5vbmV4aXN0ZW50KQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl9uYW1lX21hcC5weQkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisj
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCitpbXBvcnQgcmUKKworZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQg
aW1wb3J0IG1lbW9pemVkCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uIGltcG9ydCBWZXJz
aW9uCisKKworY2xhc3MgVmVyc2lvbk5hbWVNYXAob2JqZWN0KToKKworICAgICMgQWxsb3dzIGFw
cGxlX2FkZGl0aW9ucyB0byBkZWZpbmUgYSBjdXN0b20gbWFwcGluZworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBAbWVtb2l6ZWQKKyAgICBkZWYgbWFwKHBsYXRmb3JtPU5vbmUpOgorICAgICAgICBy
ZXR1cm4gVmVyc2lvbk5hbWVNYXAocGxhdGZvcm09cGxhdGZvcm0pCisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgcGxhdGZvcm09Tm9uZSk6CisgICAgICAgIGlmIHBsYXRmb3JtIGlzIE5vbmU6Cisg
ICAgICAgICAgICBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQg
U3lzdGVtSG9zdAorICAgICAgICAgICAgcGxhdGZvcm0gPSBTeXN0ZW1Ib3N0KCkucGxhdGZvcm0K
KyAgICAgICAgc2VsZi5tYXBwaW5nID0ge30KKworICAgICAgICBzZWxmLmRlZmF1bHRfc3lzdGVt
X3BsYXRmb3JtID0gcGxhdGZvcm0ub3NfbmFtZQorICAgICAgICBzZWxmLm1hcHBpbmdbJ3B1Ymxp
YyddID0geworICAgICAgICAgICAgJ21hYyc6IHsKKyAgICAgICAgICAgICAgICAnTGVvcGFyZCc6
IFZlcnNpb24oJzEwLjUnKSwKKyAgICAgICAgICAgICAgICAnU25vdyBMZW9wYXJkJzogVmVyc2lv
bignMTAuNicpLAorICAgICAgICAgICAgICAgICdMaW9uJzogVmVyc2lvbignMTAuNycpLAorICAg
ICAgICAgICAgICAgICdNb3VudGFpbiBMaW9uJzogVmVyc2lvbignMTAuOCcpLAorICAgICAgICAg
ICAgICAgICdNYXZlcmlja3MnOiBWZXJzaW9uKCcxMC45JyksCisgICAgICAgICAgICAgICAgJ1lv
c2VtaXRlJzogVmVyc2lvbignMTAuMTAnKSwKKyAgICAgICAgICAgICAgICAnRWwgQ2FwaXRhbic6
IFZlcnNpb24oJzEwLjExJyksCisgICAgICAgICAgICAgICAgJ1NpZXJyYSc6IFZlcnNpb24oJzEw
LjEyJyksCisgICAgICAgICAgICAgICAgJ0hpZ2ggU2llcnJhJzogVmVyc2lvbignMTAuMTMnKSwK
KyAgICAgICAgICAgICAgICAnRnV0dXJlJzogVmVyc2lvbignMTAuMTQnKSwKKyAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAnaW9zJzogc2VsZi5fYXV0b21hcF90b19tYWpvcl92ZXJzaW9uKCdp
T1MnLCBtaW5pbXVtPVZlcnNpb24oJzEwJyksIG1heGltdW09VmVyc2lvbignMTInKSksCisgICAg
ICAgICAgICAnd2luJzogeworICAgICAgICAgICAgICAgICdXaW4xMCc6IFZlcnNpb24oJzEwJyks
CisgICAgICAgICAgICAgICAgJzguMSc6IFZlcnNpb24oJzYuMycpLAorICAgICAgICAgICAgICAg
ICc4JzogVmVyc2lvbignNi4yJyksCisgICAgICAgICAgICAgICAgJzdzcDAnOiBWZXJzaW9uKCc2
LjEuNzYwMCcpLAorICAgICAgICAgICAgICAgICdWaXN0YSc6IFZlcnNpb24oJzYnKSwKKyAgICAg
ICAgICAgICAgICAnWFAnOiBWZXJzaW9uKCc1LjEnKSwKKyAgICAgICAgICAgIH0sCisgICAgICAg
IH0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfYXV0b21hcF90b19tYWpvcl92ZXJzaW9u
KGNscywgcHJlZml4LCBtaW5pbXVtPVZlcnNpb24oJzEnKSwgbWF4aW11bT1WZXJzaW9uKCcxJykp
OgorICAgICAgICByZXN1bHQgPSB7fQorICAgICAgICBhc3NlcnQgbWluaW11bSA8PSBtYXhpbXVt
CisgICAgICAgIGZvciBpIGluIHhyYW5nZSgobWF4aW11bS5tYWpvciArIDEpIC0gbWluaW11bS5t
YWpvcik6CisgICAgICAgICAgICByZXN1bHRbJ3t9IHt9Jy5mb3JtYXQocHJlZml4LCBzdHIoVmVy
c2lvbihzdHIobWluaW11bS5tYWpvciArIGkpKSkpXSA9IFZlcnNpb24oc3RyKG1pbmltdW0ubWFq
b3IgKyBpKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHRvX25hbWUoc2VsZiwg
dmVyc2lvbiwgcGxhdGZvcm09Tm9uZSwgdGFibGU9J3B1YmxpYycpOgorICAgICAgICBwbGF0Zm9y
bSA9IHNlbGYuZGVmYXVsdF9zeXN0ZW1fcGxhdGZvcm0gaWYgcGxhdGZvcm0gaXMgTm9uZSBlbHNl
IHBsYXRmb3JtCisgICAgICAgIGFzc2VydCB0YWJsZSBpbiBzZWxmLm1hcHBpbmcKKyAgICAgICAg
YXNzZXJ0IHBsYXRmb3JtIGluIHNlbGYubWFwcGluZ1t0YWJsZV0KKyAgICAgICAgY2xvc2VzdF9t
YXRjaCA9IChOb25lLCBOb25lKQorICAgICAgICB2ZXJzaW9uID0gVmVyc2lvbih2ZXJzaW9uKQor
ICAgICAgICBmb3Igb3NfbmFtZSwgb3NfdmVyc2lvbiBpbiBzZWxmLm1hcHBpbmdbdGFibGVdW3Bs
YXRmb3JtXS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHZlcnNpb24gPT0gb3NfdmVyc2lv
bjoKKyAgICAgICAgICAgICAgICByZXR1cm4gb3NfbmFtZQorICAgICAgICAgICAgZWxpZiB2ZXJz
aW9uLmNvbnRhaW5lZF9pbihvc192ZXJzaW9uKToKKyAgICAgICAgICAgICAgICBpZiBjbG9zZXN0
X21hdGNoWzFdIGFuZCBjbG9zZXN0X21hdGNoWzFdLmNvbnRhaW5lZF9pbihvc192ZXJzaW9uKToK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBjbG9zZXN0X21h
dGNoID0gKG9zX25hbWUsIG9zX3ZlcnNpb24pCisgICAgICAgIHJldHVybiBjbG9zZXN0X21hdGNo
WzBdCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHN0cmlwX25hbWVfZm9ybWF0dGluZyhu
YW1lKToKKyAgICAgICAgIyA8T1M+IG1ham9yLm1pbm9yLnRpbnkgc2hvdWxkIG1hcCB0byA8T1M+
IG1ham9yCisgICAgICAgIGlmICcgJyBpbiBuYW1lOgorICAgICAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgICAgIG5hbWUgPSAne317fScuZm9ybWF0KCcnLmpvaW4obmFtZS5zcGxpdCgnICcpWzot
MV0pLCBWZXJzaW9uKG5hbWUuc3BsaXQoJyAnKVstMV0pLm1ham9yKQorICAgICAgICAgICAgZXhj
ZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNwbGl0ID0gcmUuc3BsaXQocidcZCcsIG5h
bWUpCisgICAgICAgICAgICAgICAgbmFtZSA9ICd7fXt9Jy5mb3JtYXQoc3BsaXRbMF0sIFZlcnNp
b24obmFtZVsobGVuKHNwbGl0KSAtIDEpOl0pLm1ham9yKQorICAgICAgICAgICAgZXhjZXB0IFZh
bHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgU3RyaXAgb3V0IGFu
eSBzcGFjZXMsIG1ha2UgZXZlcnl0aGluZyBsb3dlci1jYXNlCisgICAgICAgIHJlc3VsdCA9IG5h
bWUucmVwbGFjZSgnICcsICcnKS5sb3dlcigpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAg
IGRlZiBmcm9tX25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgICMgRXhhY3QgbWF0Y2gKKyAgICAg
ICAgZm9yIF8sIG1hcCBpbiBzZWxmLm1hcHBpbmcuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBm
b3Igb3NfbmFtZSwgb3NfbWFwIGluIG1hcC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBp
ZiBuYW1lIGluIG9zX21hcDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvc19uYW1lLCBv
c19tYXBbbmFtZV0pCisKKyAgICAgICAgIyBJdCdzIG5vdCBhbiBleGFjdCBtYXRjaCwgbGV0J3Mg
dHJ5IHVuaWZ5aW5nIGZvcm1hdHRpbmcKKyAgICAgICAgdW5mb3JtYXR0ZWQgPSBzZWxmLnN0cmlw
X25hbWVfZm9ybWF0dGluZyhuYW1lKQorICAgICAgICBmb3IgXywgbWFwIGluIHNlbGYubWFwcGlu
Zy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBvc19uYW1lLCBvc19tYXAgaW4gbWFwLml0
ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGZvciB2ZXJzaW9uX25hbWUsIHZlcnNpb24gaW4g
b3NfbWFwLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnN0cmlwX25h
bWVfZm9ybWF0dGluZyh2ZXJzaW9uX25hbWUpID09IHVuZm9ybWF0dGVkOgorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIChvc19uYW1lLCB2ZXJzaW9uKQorICAgICAgICByZXR1cm4gKE5v
bmUsIE5vbmUpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25h
bWVfbWFwX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3ZlcnNpb25fbmFtZV9tYXBfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl9uYW1lX21hcF91bml0dGVzdC5weQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisjIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24u
dmVyc2lvbiBpbXBvcnQgVmVyc2lvbgorZnJvbSB2ZXJzaW9uX25hbWVfbWFwIGltcG9ydCBWZXJz
aW9uTmFtZU1hcAorCisKK2NsYXNzIFZlcnNpb25NYXBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3N5c3RlbV9wbGF0Zm9ybShzZWxmKToKKyAgICAg
ICAgaG9zdCA9IFN5c3RlbUhvc3QoKQorICAgICAgICBtYXAgPSBWZXJzaW9uTmFtZU1hcChwbGF0
Zm9ybT1ob3N0LnBsYXRmb3JtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcC5kZWZhdWx0
X3N5c3RlbV9wbGF0Zm9ybSwgaG9zdC5wbGF0Zm9ybS5vc19uYW1lKQorCisgICAgZGVmIHRlc3Rf
bWFjX3ZlcnNpb25fYnlfbmFtZShzZWxmKToKKyAgICAgICAgbWFwID0gVmVyc2lvbk5hbWVNYXAo
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnbWFjJywgVmVyc2lvbignMTAuMTInKSksIG1h
cC5mcm9tX25hbWUoJ1NpZXJyYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnbWFjJywg
VmVyc2lvbignMTAuMTInKSksIG1hcC5mcm9tX25hbWUoJ3NpZXJyYScpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCgnbWFjJywgVmVyc2lvbignMTAuMTEnKSksIG1hcC5mcm9tX25hbWUoJ0Vs
IENhcGl0YW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ21hYycsIFZlcnNpb24oJzEw
LjExJykpLCBtYXAuZnJvbV9uYW1lKCdlbGNhcGl0YW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgoJ21hYycsIFZlcnNpb24oJzEwLjExJykpLCBtYXAuZnJvbV9uYW1lKCdlbCBDYXBpdGFu
JykpCisKKyAgICBkZWYgdGVzdF9pb3NfdmVyc2lvbl9ieV9uYW1lKHNlbGYpOgorICAgICAgICBt
YXAgPSBWZXJzaW9uTmFtZU1hcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCdpb3MnLCBW
ZXJzaW9uKDExKSksIG1hcC5mcm9tX25hbWUoJ2lPUyAxMScpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCgnaW9zJywgVmVyc2lvbigxMSkpLCBtYXAuZnJvbV9uYW1lKCdpb3MxMScpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCgnaW9zJywgVmVyc2lvbigxMSkpLCBtYXAuZnJvbV9uYW1l
KCdpT1MgMTEuMicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnaW9zJywgVmVyc2lvbigx
MSkpLCBtYXAuZnJvbV9uYW1lKCdpb3MxMS4yJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
KCdpb3MnLCBWZXJzaW9uKDExKSksIG1hcC5mcm9tX25hbWUoJ2lPUzExLjInKSkKKworICAgIGRl
ZiB0ZXN0X21hY19uYW1lX2J5X3ZlcnNpb24oc2VsZik6CisgICAgICAgIG1hcCA9IFZlcnNpb25O
YW1lTWFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnU2llcnJhJywgbWFwLnRvX25hbWUo
dmVyc2lvbj1WZXJzaW9uKCcxMC4xMicpLCBwbGF0Zm9ybT0nbWFjJykpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ0VsIENhcGl0YW4nLCBtYXAudG9fbmFtZSh2ZXJzaW9uPVZlcnNpb24oJzEw
LjExJyksIHBsYXRmb3JtPSdtYWMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRWwgQ2Fw
aXRhbicsIG1hcC50b19uYW1lKHZlcnNpb249VmVyc2lvbignMTAuMTEuMycpLCBwbGF0Zm9ybT0n
bWFjJykpCisKKyAgICBkZWYgdGVzdF9pb3NfbmFtZV9ieV92ZXJzaW9uKHNlbGYpOgorICAgICAg
ICBtYXAgPSBWZXJzaW9uTmFtZU1hcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2lPUyAx
MScsIG1hcC50b19uYW1lKHZlcnNpb249VmVyc2lvbignMTEnKSwgcGxhdGZvcm09J2lvcycpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdpT1MgMTAnLCBtYXAudG9fbmFtZSh2ZXJzaW9uPVZl
cnNpb24oJzEwJyksIHBsYXRmb3JtPSdpb3MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
aU9TIDEwJywgbWFwLnRvX25hbWUodmVyc2lvbj1WZXJzaW9uKCcxMC4zJyksIHBsYXRmb3JtPSdp
b3MnKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRl
c3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lv
bl91bml0dGVzdC5weQkocmV2aXNpb24gMjI1MTk0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vdmVyc2lvbl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMTI1LDYgKzEy
NSwyMiBAQCBjbGFzcyBWZXJzaW9uVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFZlcnNpb24oJzEuMicpKSwgJzEuMicpCiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc3RyKFZlcnNpb24oJzAuMC4zJykpLCAnMC4wLjMnKQogCisgICAgZGVm
IHRlc3RfY29udGFpbmVkX2luKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoVmVyc2lv
bignMTEuMScpLmNvbnRhaW5lZF9pbihWZXJzaW9uKCcxMScpKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKFZlcnNpb24oJzExLjEuMicpLmNvbnRhaW5lZF9pbihWZXJzaW9uKCcxMS4xJykpKQor
ICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFZlcnNpb24oJzExJykuY29udGFpbmVkX2luKFZlcnNp
b24oJzExLjEnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVmVyc2lvbignMTEnKS5jb250
YWluZWRfaW4oVmVyc2lvbignMTEuMS4yJykpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFZl
cnNpb24oJzExLjEnKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEuMS4yJykpKQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUoVmVyc2lvbignMTEnKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEnKSkp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShWZXJzaW9uKCcxMS4xJykuY29udGFpbmVkX2luKFZl
cnNpb24oJzExLjEnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShWZXJzaW9uKCcxMS4xLjIn
KS5jb250YWluZWRfaW4oVmVyc2lvbignMTEuMS4yJykpKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUoVmVyc2lvbignMTEnKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEuMCcpKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKFZlcnNpb24oJzExLjAnKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEn
KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShWZXJzaW9uKCcxMScpLmNvbnRhaW5lZF9pbihW
ZXJzaW9uKCcxMS4wLjAnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShWZXJzaW9uKCcxMS4w
LjAnKS5jb250YWluZWRfaW4oVmVyc2lvbignMTEnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShWZXJzaW9uKCcxMS4xJykuY29udGFpbmVkX2luKFZlcnNpb24oJzExLjEuMCcpKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKFZlcnNpb24oJzExLjEuMCcpLmNvbnRhaW5lZF9pbihWZXJzaW9u
KCcxMS4xJykpKQorCiAgICAgZGVmIHRlc3RfY29tcGFyZV92ZXJzaW9ucyhzZWxmKToKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChWZXJzaW9uKCcxLjIuMycpLCBWZXJzaW9uKCcxLjIuMycpKQog
ICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoVmVyc2lvbignMS4yLjQnKSwgVmVyc2lvbignMS4y
LjMnKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9y
bWluZm8ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3BsYXRmb3JtaW5mby5weQkocmV2aXNpb24gMjI1MTk0KQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weQkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQCBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIAogZnJvbSB3ZWJraXRweS5jb21t
b24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbl9u
YW1lX21hcCBpbXBvcnQgVmVyc2lvbk5hbWVNYXAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZQogCiAKQEAgLTUxLDE2ICs1MiwyNyBAQCBjbGFz
cyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0gZXhlY3V0
aXZlCiAgICAgICAgIHNlbGYuX3BsYXRmb3JtX21vZHVsZSA9IHBsYXRmb3JtX21vZHVsZQogICAg
ICAgICBzZWxmLm9zX25hbWUgPSBzZWxmLl9kZXRlcm1pbmVfb3NfbmFtZShzeXNfbW9kdWxlLnBs
YXRmb3JtKQotICAgICAgICBpZiBzZWxmLm9zX25hbWUgPT0gJ2xpbnV4JzoKLSAgICAgICAgICAg
IHNlbGYub3NfdmVyc2lvbiA9IHNlbGYuX2RldGVybWluZV9saW51eF92ZXJzaW9uKCkKLSAgICAg
ICAgaWYgc2VsZi5vc19uYW1lID09ICdmcmVlYnNkJyBvciBzZWxmLm9zX25hbWUgPT0gJ29wZW5i
c2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnbmV0YnNkJyBvciBzZWxmLm9zX25hbWUgPT0gJ2lvcyc6
Ci0gICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBwbGF0Zm9ybV9tb2R1bGUucmVsZWFzZSgp
CisgICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IE5vbmUKKwogICAgICAgICBpZiBzZWxmLm9zX25h
bWUuc3RhcnRzd2l0aCgnbWFjJyk6Ci0gICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBzZWxm
Ll9kZXRlcm1pbmVfbWFjX3ZlcnNpb24oVmVyc2lvbihwbGF0Zm9ybV9tb2R1bGUubWFjX3Zlcigp
WzBdKSkKLSAgICAgICAgaWYgc2VsZi5vc19uYW1lLnN0YXJ0c3dpdGgoJ3dpbicpOgotICAgICAg
ICAgICAgc2VsZi5vc192ZXJzaW9uID0gc2VsZi5fZGV0ZXJtaW5lX3dpbl92ZXJzaW9uKHNlbGYu
X3dpbl92ZXJzaW9uKHN5c19tb2R1bGUpKQorICAgICAgICAgICAgdmVyc2lvbiA9IFZlcnNpb24o
cGxhdGZvcm1fbW9kdWxlLm1hY192ZXIoKVswXSkKKyAgICAgICAgZWxpZiBzZWxmLm9zX25hbWUu
c3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICB2ZXJzaW9uID0gc2VsZi5fd2luX3ZlcnNp
b24oc3lzX21vZHVsZSkKKyAgICAgICAgZWxpZiBzZWxmLm9zX25hbWUgPT0gJ2xpbnV4JyBvciBz
ZWxmLm9zX25hbWUgPT0gJ2ZyZWVic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnb3BlbmJzZCcgb3Ig
c2VsZi5vc19uYW1lID09ICduZXRic2QnOgorICAgICAgICAgICAgdmVyc2lvbiA9IE5vbmUKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICMgTW9zdCBvdGhlciBwbGF0Zm9ybXMgKG5hbWVseSBp
T1MpIHJldHVybiBjb25mb3JtaW5nIHZlcnNpb24gc3RyaW5ncy4KKyAgICAgICAgICAgIHZlcnNp
b24gPSBWZXJzaW9uKHBsYXRmb3JtX21vZHVsZS5yZWxlYXNlKCkpCisKICAgICAgICAgc2VsZi5f
aXNfY3lnd2luID0gc3lzX21vZHVsZS5wbGF0Zm9ybSA9PSAnY3lnd2luJwogCisgICAgICAgIGlm
IHZlcnNpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYub3Nf
dmVyc2lvbiA9IFZlcnNpb25OYW1lTWFwLm1hcChzZWxmKS50b19uYW1lKHZlcnNpb24sIHRhYmxl
PSdwdWJsaWMnKQorICAgICAgICBhc3NlcnQgc2VsZi5vc192ZXJzaW9uIGlzIG5vdCBOb25lCisg
ICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IHNlbGYub3NfdmVyc2lvbi5sb3dlcigpLnJlcGxhY2Uo
JyAnLCAnJykKKwogICAgIGRlZiBpc19tYWMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLm9z
X25hbWUgPT0gJ21hYycKIApAQCAtMTY0LDQwICsxNzYsNiBAQCBjbGFzcyBQbGF0Zm9ybUluZm8o
b2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiAnaGFpa3UnCiAgICAgICAgIHJhaXNlIEFzc2Vy
dGlvbkVycm9yKCd1bnJlY29nbml6ZWQgcGxhdGZvcm0gc3RyaW5nICIlcyInICUgc3lzX3BsYXRm
b3JtKQogCi0gICAgZGVmIF9kZXRlcm1pbmVfbWFjX3ZlcnNpb24oc2VsZiwgbWFjX3ZlcnNpb24p
OgotICAgICAgICB2ZXJzaW9uX3N0cmluZ3MgPSB7Ci0gICAgICAgICAgICA1OiAnbGVvcGFyZCcs
Ci0gICAgICAgICAgICA2OiAnc25vd2xlb3BhcmQnLAotICAgICAgICAgICAgNzogJ2xpb24nLAot
ICAgICAgICAgICAgODogJ21vdW50YWlubGlvbicsCi0gICAgICAgICAgICA5OiAnbWF2ZXJpY2tz
JywKLSAgICAgICAgICAgIDEwOiAneW9zZW1pdGUnLAotICAgICAgICAgICAgMTE6ICdlbGNhcGl0
YW4nLAotICAgICAgICAgICAgMTI6ICdzaWVycmEnLAotICAgICAgICAgICAgMTM6ICdoaWdoc2ll
cnJhJywKLSAgICAgICAgfQotICAgICAgICBhc3NlcnQgbWFjX3ZlcnNpb24ubWlub3IgPj0gbWlu
KHZlcnNpb25fc3RyaW5ncy5rZXlzKCkpCi0gICAgICAgIHJldHVybiB2ZXJzaW9uX3N0cmluZ3Mu
Z2V0KG1hY192ZXJzaW9uLm1pbm9yLCAnZnV0dXJlJykKLQotICAgIGRlZiBfZGV0ZXJtaW5lX2xp
bnV4X3ZlcnNpb24oc2VsZik6Ci0gICAgICAgICMgRklYTUU6IHdlIGlnbm9yZSB3aGF0ZXZlciB0
aGUgcmVhbCB2ZXJzaW9uIGlzIGFuZCBwcmV0ZW5kIGl0J3MgbHVjaWQgZm9yIG5vdy4KLSAgICAg
ICAgcmV0dXJuICdsdWNpZCcKLQotICAgIGRlZiBfZGV0ZXJtaW5lX3dpbl92ZXJzaW9uKHNlbGYs
IHdpbl92ZXJzaW9uKToKLSAgICAgICAgaWYgc2VsZi5fcGxhdGZvcm1fbW9kdWxlLnJlbGVhc2Uo
KSA9PSAnMTAnOgotICAgICAgICAgICAgcmV0dXJuICd3aW4xMCcKLSAgICAgICAgaWYgd2luX3Zl
cnNpb24ubWFqb3IgPT0gMCBhbmQgd2luX3ZlcnNpb24ubWlub3IgPT0gMDoKLSAgICAgICAgICAg
IGlmIHdpbl92ZXJzaW9uWzJdID4gMTAwMDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICd3aW4x
MCcKLSAgICAgICAgaWYgd2luX3ZlcnNpb24gPT0gVmVyc2lvbihbNiwgMSwgNzYwMF0pOgotICAg
ICAgICAgICAgcmV0dXJuICc3c3AwJwotICAgICAgICBpZiB3aW5fdmVyc2lvbi5tYWpvciA9PSA2
IGFuZCB3aW5fdmVyc2lvbi5taW5vciA9PSAwOgotICAgICAgICAgICAgcmV0dXJuICd2aXN0YScK
LSAgICAgICAgaWYgd2luX3ZlcnNpb24ubWFqb3IgPT0gNSBhbmQgd2luX3ZlcnNpb24ubWlub3Ig
PT0gMToKLSAgICAgICAgICAgIHJldHVybiAneHAnCi0gICAgICAgIGFzc2VydCB3aW5fdmVyc2lv
blswXSA+IDYgb3Igd2luX3ZlcnNpb25bMV0gPj0gMSwgJ1VucmVjb2duaXplZCBXaW5kb3dzIHZl
cnNpb246ICJ7fSInLmZvcm1hdCh3aW5fdmVyc2lvbikKLSAgICAgICAgcmV0dXJuICdmdXR1cmUn
Ci0KICAgICBkZWYgX3dpbl92ZXJzaW9uKHNlbGYsIHN5c19tb2R1bGUpOgogICAgICAgICBpZiBo
YXNhdHRyKHN5c19tb2R1bGUsICdnZXR3aW5kb3dzdmVyc2lvbicpOgogICAgICAgICAgICAgcmV0
dXJuIFZlcnNpb24oc3lzX21vZHVsZS5nZXR3aW5kb3dzdmVyc2lvbigpWzA6M10pCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3VuaXR0ZXN0
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9w
bGF0Zm9ybWluZm9fdW5pdHRlc3QucHkJKHJldmlzaW9uIDIyNTE5NCkKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fdW5pdHRlc3QucHkJKHdvcmtp
bmcgY29weSkKQEAgLTg3LDEzICs4NywxMyBAQCBjbGFzcyBUZXN0UGxhdGZvcm1JbmZvKHVuaXR0
ZXN0LlRlc3RDYXNlCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbmZvLnRvdGFsX2J5
dGVzX21lbW9yeSgpKQogCiAgICAgZGVmIHRlc3Rfb3NfbmFtZV9hbmRfd3JhcHBlcnMoc2VsZik6
Ci0gICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnbGludXgyJykpCisgICAg
ICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnbGludXgyJyksIGZha2VfcGxhdGZv
cm0oJycsICcxMC40JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmZvLmlzX2xpbnV4KCkp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5pc19tYWMoKSkKICAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShpbmZvLmlzX3dpbigpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluZm8u
aXNfZnJlZWJzZCgpKQogCi0gICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygn
bGludXgzJykpCisgICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnbGludXgz
JyksIGZha2VfcGxhdGZvcm0oJycsICcxMC40JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShp
bmZvLmlzX2xpbnV4KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5pc19tYWMoKSkK
ICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbmZvLmlzX3dpbigpKQpAQCAtMTIyLDcgKzEyMiw3
IEBAIGNsYXNzIFRlc3RQbGF0Zm9ybUluZm8odW5pdHRlc3QuVGVzdENhc2UKICAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShpbmZvLmlzX25hdGl2ZV93aW4oKSkKICAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShpbmZvLmlzX2ZyZWVic2QoKSkKIAotICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8o
ZmFrZV9zeXMoJ2ZyZWVic2Q4JykpCisgICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtl
X3N5cygnZnJlZWJzZDgnKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzguMy1QUkVSRUxFQVNFJykpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5vc19uYW1lLCAnZnJlZWJzZCcpCiAgICAgICAg
IHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5pc19saW51eCgpKQogICAgICAgICBzZWxmLmFzc2VydEZh
bHNlKGluZm8uaXNfbWFjKCkpCkBAIC0xNDQsMTkgKzE0NCwyMCBAQCBjbGFzcyBUZXN0UGxhdGZv
cm1JbmZvKHVuaXR0ZXN0LlRlc3RDYXNlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5t
YWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC4xMy4wJykpLm9z
X3ZlcnNpb24sICdoaWdoc2llcnJhJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1h
a2VfaW5mbyhmYWtlX3N5cygnZGFyd2luJyksIGZha2VfcGxhdGZvcm0oJzEwLjE0LjAnKSkub3Nf
dmVyc2lvbiwgJ2Z1dHVyZScpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2Vf
aW5mbyhmYWtlX3N5cygnbGludXgyJykpLm9zX3ZlcnNpb24sICdsdWNpZCcpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2xpbnV4MicpLCBmYWtlX3Bs
YXRmb3JtKCcnLCAnMTAuNCcpKS5vc192ZXJzaW9uLCBOb25lKQogCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2ZyZWVic2Q4JyksIGZha2VfcGxhdGZv
cm0oJycsICc4LjMtUFJFUkVMRUFTRScpKS5vc192ZXJzaW9uLCAnOC4zLVBSRVJFTEVBU0UnKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdmcmVlYnNk
OScpLCBmYWtlX3BsYXRmb3JtKCcnLCAnOS4wLVJFTEVBU0UnKSkub3NfdmVyc2lvbiwgJzkuMC1S
RUxFQVNFJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5
cygnZnJlZWJzZDgnKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzguMy1QUkVSRUxFQVNFJykpLm9zX3Zl
cnNpb24sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFr
ZV9zeXMoJ2ZyZWVic2Q5JyksIGZha2VfcGxhdGZvcm0oJycsICc5LjAtUkVMRUFTRScpKS5vc192
ZXJzaW9uLCBOb25lKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9y
LCBzZWxmLm1ha2VfaW5mbywgZmFrZV9zeXMoJ3dpbjMyJywgdHVwbGUoWzUsIDAsIDEyMzRdKSkp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMy
JywgdHVwbGUoWzYsIDIsIDEyMzRdKSkpLm9zX3ZlcnNpb24sICdmdXR1cmUnKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3aW4zMicsIHR1cGxlKFsx
MCwgMCwgMTQzOTNdKSkpLm9zX3ZlcnNpb24sICd3aW4xMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMyJywgdHVwbGUoWzYsIDIsIDEyMzRd
KSkpLm9zX3ZlcnNpb24sICc4JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2Vf
aW5mbyhmYWtlX3N5cygnd2luMzInLCB0dXBsZShbNiwgMSwgNzYwMF0pKSkub3NfdmVyc2lvbiwg
JzdzcDAnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lz
KCd3aW4zMicsIHR1cGxlKFs2LCAwLCAxMjM0XSkpKS5vc192ZXJzaW9uLCAndmlzdGEnKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3aW4zMicsIHR1
cGxlKFs1LCAxLCAxMjM0XSkpKS5vc192ZXJzaW9uLCAneHAnKQogCiAgICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBzZWxmLm1ha2VfaW5mbywgZmFrZV9zeXMoJ3dpbjMy
JyksIGV4ZWN1dGl2ZT1mYWtlX2V4ZWN1dGl2ZSgnNS4wLjEyMzQnKSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnY3lnd2luJyksIGV4ZWN1dGl2ZT1m
YWtlX2V4ZWN1dGl2ZSgnNi4yLjEyMzQnKSkub3NfdmVyc2lvbiwgJ2Z1dHVyZScpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2N5Z3dpbicpLCBleGVj
dXRpdmU9ZmFrZV9leGVjdXRpdmUoJzYuMi4xMjM0JykpLm9zX3ZlcnNpb24sICc4JykKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnY3lnd2luJyksIGV4
ZWN1dGl2ZT1mYWtlX2V4ZWN1dGl2ZSgnNi4xLjc2MDAnKSkub3NfdmVyc2lvbiwgJzdzcDAnKQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdjeWd3aW4n
KSwgZXhlY3V0aXZlPWZha2VfZXhlY3V0aXZlKCc2LjAuMTIzNCcpKS5vc192ZXJzaW9uLCAndmlz
dGEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdj
eWd3aW4nKSwgZXhlY3V0aXZlPWZha2VfZXhlY3V0aXZlKCc1LjEuMTIzNCcpKS5vc192ZXJzaW9u
LCAneHAnKQpAQCAtMTY4LDEwICsxNjksMTAgQEAgY2xhc3MgVGVzdFBsYXRmb3JtSW5mbyh1bml0
dGVzdC5UZXN0Q2FzZQogICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dp
bjMyJywgdHVwbGUoWzYsIDEsIDc2MDBdKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxz
KGluZm8uZGlzcGxheV9uYW1lKCksICcnKQogCi0gICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5m
byhmYWtlX3N5cygnbGludXgyJykpCisgICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtl
X3N5cygnbGludXgyJyksIGZha2VfcGxhdGZvcm0oJycsICcxMC40JykpCiAgICAgICAgIHNlbGYu
YXNzZXJ0Tm90RXF1YWxzKGluZm8uZGlzcGxheV9uYW1lKCksICcnKQogCi0gICAgICAgIGluZm8g
PSBzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZnJlZWJzZDknKSkKKyAgICAgICAgaW5mbyA9IHNl
bGYubWFrZV9pbmZvKGZha2Vfc3lzKCdmcmVlYnNkOScpLCBmYWtlX3BsYXRmb3JtKCcnLCAnOS4w
LVJFTEVBU0UnKSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoaW5mby5kaXNwbGF5X25h
bWUoKSwgJycpCiAKICAgICBkZWYgdGVzdF90b3RhbF9ieXRlc19tZW1vcnkoc2VsZik6CkBAIC0x
ODEsOCArMTgyLDggQEAgY2xhc3MgVGVzdFBsYXRmb3JtSW5mbyh1bml0dGVzdC5UZXN0Q2FzZQog
ICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMyJywgdHVwbGUoWzYs
IDEsIDc2MDBdKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGluZm8udG90YWxfYnl0ZXNf
bWVtb3J5KCkpCiAKLSAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdsaW51
eDInKSkKKyAgICAgICAgaW5mbyA9IHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdsaW51eDInKSwg
ZmFrZV9wbGF0Zm9ybSgnJywgJzEwLjQnKSkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW5m
by50b3RhbF9ieXRlc19tZW1vcnkoKSkKIAotICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8o
ZmFrZV9zeXMoJ2ZyZWVic2Q5JykpCisgICAgICAgIGluZm8gPSBzZWxmLm1ha2VfaW5mbyhmYWtl
X3N5cygnZnJlZWJzZDknKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzkuMC1SRUxFQVNFJykpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0SXNOb25lKGluZm8udG90YWxfYnl0ZXNfbWVtb3J5KCkpCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5weQkocmV2aXNpb24gMjI1MTk0
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDYgKzI1LDcgQEAgaW1wb3J0IGxvZ2dpbmcKIGZyb20gd2Via2l0cHkuY29t
bW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9u
IGltcG9ydCBWZXJzaW9uCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25hbWVfbWFwIGlt
cG9ydCBWZXJzaW9uTmFtZU1hcAogZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZpZyBpbXBvcnQgYXBw
bGVfYWRkaXRpb25zCiBmcm9tIHdlYmtpdHB5LnBvcnQuaW9zIGltcG9ydCBJT1NQb3J0CiAKQEAg
LTEwOCw3ICsxMDksOCBAQCBjbGFzcyBJT1NEZXZpY2VQb3J0KElPU1BvcnQpOgogICAgICAgICAg
ICAgZWxzZToKICAgICAgICAgICAgICAgICBpZiBkZXZpY2UucGxhdGZvcm0ub3NfdmVyc2lvbiAh
PSB2ZXJzaW9uOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ011bHRp
cGxlIGNvbm5lY3RlZCBkZXZpY2VzIGhhdmUgZGlmZmVyZW50IGlPUyB2ZXJzaW9ucycpCi0KKyAg
ICAgICAgaWYgdmVyc2lvbjoKKyAgICAgICAgICAgIHJldHVybiBWZXJzaW9uTmFtZU1hcC5tYXAo
c2VsZi5ob3N0LnBsYXRmb3JtKS5mcm9tX25hbWUodmVyc2lvbilbMV0KICAgICAgICAgcmV0dXJu
IFZlcnNpb24odmVyc2lvbikKIAogICAgICMgRklYTUU6IFRoZXNlIG5lZWQgZGV2aWNlIGltcGxl
bWVudGF0aW9ucyA8cmRhcjovL3Byb2JsZW0vMzA0OTc5OTE+Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328706</attachid>
            <date>2017-12-07 10:47:17 -0800</date>
            <delta_ts>2017-12-12 12:02:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179621-20171207104716.patch</filename>
            <type>text/plain</type>
            <size>71251</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNTYzMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEyMyBAQAorMjAxNy0xMi0wNyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CisKKyAgICAgICAgd2Via2l0cHk6IEJldHRlciBuYW1lLXZlcnNpb24gbWFwcGluZyAoUGFy
dCAyKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5
NjIxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNTU4OTU4NT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3cgdGhhdCB3ZSBoYXZlIGEgY2VudHJh
bCBtYXBwaW5nIG9mIHZlcnNpb24gbnVtYmVycyB0byB2ZXJzaW9uIG5hbWVzLCB0aGlzCisgICAg
ICAgIG1hcHBpbmcgc2hvdWxkIGJlIHVzZWQgdG8gY29tcHV0ZSB2ZXJzaW9uIG5hbWVzLiBUaGlz
IHBhdGNoIHRyZWF0cyBwYXNzZXMgdmVyc2lvbnMKKyAgICAgICAgYXMgb2JqZWN0cywgb25seSBt
YXBwaW5nIHRoZW0gdG8gbmFtZXMgd2hlbiBzdHJpbmdzIGFyZSBuZWVkZWQuCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5OgorICAgICAg
ICAoUGxhdGZvcm1JbmZvLl9faW5pdF9fKTogU3RvcmUgb3NfdmVyc2lvbiBhcyBhIHZlcnNpb24g
b2JqZWN0IGluc3RlYWQgb2YgYSBzdHJpbmcuCisgICAgICAgIChQbGF0Zm9ybUluZm8ub3NfdmVy
c2lvbl9uYW1lKTogQ29udmVydCBvc192ZXJzaW9uIHRvIGEgc3RyaW5nIHRocm91Z2ggdGhlIFZl
cnNpb25OYW1lTWFwLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9w
bGF0Zm9ybWluZm9fbW9jay5weToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uX19pbml0X18p
OiBTdG9yZSBvc192ZXJzaW9uIGFzIGEgdmVyc2lvbiBvYmplY3QuCisgICAgICAgIChNb2NrUGxh
dGZvcm1JbmZvLm9zX3ZlcnNpb25fbmFtZSk6IE1pcnJvciBQbGF0Zm9ybUluZm8uCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb191bml0dGVzdC5w
eToKKyAgICAgICAgKFRlc3RQbGF0Zm9ybUluZm8udGVzdF9yZWFsX2NvZGUpOiBPbmx5IE1hYyBh
bmQgV2luZG93cyBoYXZlIGRlZmluZWQgdmVyc2lvbiBvYmplY3RzLgorICAgICAgICAoVGVzdFBs
YXRmb3JtSW5mby50ZXN0X29zX3ZlcnNpb24pOiBEZWxldGVkLCB0aGlzIGJlaGF2aW9yIGlzIG5v
dyBtYW5hZ2VkIGJ5IFZlcnNpb25OYW1lTWFwLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3ZlcnNpb24ucHk6CisgICAgICAgIChWZXJzaW9uLl9fY21wX18pOiBBbGxvdyBhIHZl
cnNpb24gb2JqZWN0IHRvIGJlIGNvbXBhcmVkIHdpdGggJ05vbmUnLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXAucHk6CisgICAgICAgIChWZXJzaW9u
TmFtZU1hcC5tYXApOiBDaGVjayBmb3IgdGhlIGFwcGxlX2FkZGl0aW9ucyBWZXJzaW9uTmFtZU1h
cC4KKyAgICAgICAgKFZlcnNpb25OYW1lTWFwLl9faW5pdF9fKTogQWRkIGEgd2luY2Fpcm8gbWFw
cGluZywgdGhlIHNhbWUgYXMgdGhlIHdpbiBtYXBwaW5nLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRlc3QucHk6CisgICAgICAgIChWZXJzaW9uVGVzdENh
c2UudGVzdF9jb21wYXJlX3ZlcnNpb25zKTogVGVzdCBjb21wYXJpbmcgYSB2ZXJzaW9uIG9iamVj
dCB0byAnTm9uZScuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9k
ZWxzL3Rlc3RfY29uZmlndXJhdGlvbi5weToKKyAgICAgICAgKFRlc3RDb25maWd1cmF0aW9uLl9f
aW5pdF9fKTogU3RyaXAgZm9ybWF0dGluZyBmcm9tIHZlcnNpb24gbmFtZS4gTm90ZSB0aGF0IHRo
aXMgb2JqZWN0IHN0aWxsCisgICAgICAgIGFjY2VwdHMgYSBzdHJpbmcgYmVjYXVzZSB0aGUgdmVy
c2lvbiBzdHJpbmcgaW1wbGljaXRseSBjb250YWlucyB0aGUgcGxhdGZvcm0gYXMgd2VsbC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3Rh
dGlvbnNfdW5pdHRlc3QucHk6IFdpbjcgc2hvdWxkIGJlIDdTUDAgYXMKKyAgICAgICAgaXQgaXMg
aW4gdGhlIFZlcnNpb25OYW1lTWFwLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9h
cHBsZS5weToKKyAgICAgICAgKEFwcGxlUG9ydCk6IFJlcGxhY2UgVkVSU0lPTl9GQUxMQkFDS19P
UkRFUiB3aXRoIGEgbWluaW11bSBhbmQgbWF4aW11bSB2ZXJzaW9uLiBUaGlzIGlzIHJlcXVpcmVk
CisgICAgICAgIGJlY2F1c2UgaXQgbWF5IGJlIHRoZSBjYXNlIHRoYXQgc2NyaXB0cyBhcmUgYXdh
cmUgb2YgbW9yZSB2ZXJzaW9ucyB0aGFuIHRoZSBwb3J0IGFjdHVhbGx5IHN1cHBvcnRzLgorICAg
ICAgICAoQXBwbGVQb3J0LmRldGVybWluZV9mdWxsX3BvcnRfbmFtZSk6IFVzZSB0aGUgaG9zdCBv
cGVyYXRpbmcgc3lzdGVtIHRvIGNvbXB1dGUgdGhlIGZ1bGwgcG9ydCBuYW1lLgorICAgICAgICAo
QXBwbGVQb3J0Ll9hbGxvd2VkX3ZlcnNpb25zKTogUmV0dXJuIGEgbGlzdCBvZiB2YWxpZCBwb3J0
IHZlcnNpb25zIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZQorICAgICAgICBWZXJzaW9uTmFtZU1h
cC4KKyAgICAgICAgKEFwcGxlUG9ydC5fZ2VuZXJhdGVfYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMp
OiBDb21wdXRlIGEgbGlzdCBvZiBjb25maWd1cmF0aW9ucyBieSBpdGVyYXRpbmcgdGhyb3VnaAor
ICAgICAgICBfYWxsb3dlZF92ZXJzaW9ucyBhbmQgY29udmVydGluZyBlYWNoIHZlcnNpb24gdG8g
YSBzdHJpbmcuCisgICAgICAgIChBcHBsZVBvcnQuX2FwcGxlX2Jhc2VsaW5lX3BhdGgpOiBSZXR1
cm4gYSBsYXlvdXQgdGVzdCBleHBlY3RhdGlvbiBkaXJlY3RvcnkgaW5zaWRlIGFwcGxlX2FkZGl0
aW9ucy4KKyAgICAgICAgKEFwcGxlUG9ydC5fc2tpcHBlZF9maWxlX3NlYXJjaF9wYXRocyk6IERl
bGV0ZWQuCisgICAgICAgIChBcHBsZVBvcnQuX2FsbG93ZWRfcG9ydF9uYW1lcyk6IERlbGV0ZWQu
CisgICAgICAgIChBcHBsZVBvcnQuX2Z1dHVyZV9wb3J0X25hbWUpOiBEZWxldGVkLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC5fX2luaXRf
Xyk6IFJlcGxhY2UgX3ZlcnNpb24gc3RyaW5nIHdpdGggX29zX3ZlcnNpb24gb2JqZWN0LgorICAg
ICAgICAoUG9ydC52ZXJzaW9uX25hbWUpOiBDb252ZXJ0IHZlcnNpb24gb2JqZWN0IHRvIHN0cmlu
Zy4KKyAgICAgICAgKFBvcnQudGVzdF9jb25maWd1cmF0aW9uKTogUGFzcyB2ZXJzaW9uIHN0cmlu
ZyB0byBUZXN0Q29uZmlndXJhdGlvbi4KKyAgICAgICAgKFBvcnQudmVyc2lvbik6IERlbGV0ZWQu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbl90ZXN0Y2FzZS5weToKKyAg
ICAgICAgKERhcndpblRlc3QuYXNzZXJ0X25hbWUpOiBDb252ZXJ0IGFuIG9zX3ZlcnNpb25fc3Ry
aW5nIHRvIGEgdmVyc2lvbiBvYmplY3QgYW5kIGNvbnN0cnVjdCBhIHBvcnQuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3RvcnlfdW5pdHRlc3QucHk6CisgICAgICAgIChGYWN0
b3J5VGVzdC50ZXN0X21hYyk6IFJlcGxhY2UgdmVyc2lvbiBzdHJpbmdzIHdpdGggdmVyc2lvbiBv
YmplY3RzLgorICAgICAgICAoRmFjdG9yeVRlc3QudGVzdF93aW4pOiBEaXR0by4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5OgorICAgICAgICAoR3RrUG9ydC5fZ2VuZXJh
dGVfYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMpOiBSZXBsYWNlIF92ZXJzaW9uIHdpdGggdmVyc2lv
bl9uYW1lKCkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weToKKyAgICAg
ICAgKElPU1BvcnQudmVyc2lvbl9uYW1lKTogQm90aCBTaW11bGF0b3IgYW5kIGRldmljZSBzaGFy
ZSB0aGUgc2FtZSB2ZXJzaW9uLW5hbWUgY29udmVudGlvbi4KKyAgICAgICAgKElPU1BvcnQuX2dl
bmVyYXRlX2FsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKTogUmVwbGFjZSBfdmVyc2lvbiB3aXRoIHZl
cnNpb25fbmFtZSgpLgorICAgICAgICAoSU9TUG9ydC5kZWZhdWx0X2Jhc2VsaW5lX3NlYXJjaF9w
YXRoKTogVXNlIHRoZSBpbnRlcm5hbCBtYXBwaW5nIG9mIHZlcnNpb24gbmFtZXMgdG8gY29uc3Ry
dWN0CisgICAgICAgIGFwcGxlX2FkZGl0aW9ucyBleHBlY3RhdGlvbnMuCisgICAgICAgIChJT1NQ
b3J0Ll9hcHBsZV9hZGRpdGlvbnNfcGF0aCk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHk6CisgICAgICAgIChJT1NEZXZpY2VQb3J0Lmlvc192
ZXJzaW9uKTogUmV0dXJuIE5vbmUgaWYgbm8gdmVyc2lvbiBpcyBkZWZpbmVkLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlX3VuaXR0ZXN0LnB5OgorICAgICAgICAo
SU9TRGV2aWNlVGVzdCk6CisgICAgICAgIChJT1NEZXZpY2VUZXN0LnRlc3RfbGF5b3V0X3Rlc3Rf
c2VhcmNocGF0aF93aXRoX2FwcGxlX2FkZGl0aW9ucyk6IENvbmZvcm0gd2l0aCB0aGUgbmV3IG1v
Y2sKKyAgICAgICAgYXBwbGVfYWRkaXRpb25zLgorICAgICAgICAoSU9TRGV2aWNlVGVzdC5tYWtl
X3BvcnQpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2lt
dWxhdG9yLnB5OgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fY3JlYXRlX2RldmljZXMpOiBV
c2UgVmVyc2lvbiBvYmplY3Qgb3ZlciBsaXN0IG9mIHZlcnNpb24gc3RyaW5ncy4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvcl91bml0dGVzdC5weToKKyAgICAg
ICAgKElPU1NpbXVsYXRvclRlc3QpOgorICAgICAgICAoSU9TU2ltdWxhdG9yVGVzdC5tYWtlX3Bv
cnQpOiBVc2UgaU9TIDExIGFzIHRoZSBkZWZhdWx0IHZlcnNpb24gZm9yIHRlc3RpbmcuCisgICAg
ICAgIChJT1NTaW11bGF0b3JUZXN0LnRlc3RfbGF5b3V0X3Rlc3Rfc2VhcmNocGF0aF93aXRoX2Fw
cGxlX2FkZGl0aW9ucyk6IENvbmZvcm0gd2l0aCB0aGUgbmV3CisgICAgICAgIG1vY2sgYXBwbGVf
YWRkaXRpb25zLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdGVzdGNhc2Uu
cHk6CisgICAgICAgIChJT1NUZXN0Lm1ha2VfcG9ydCk6IFVzZSBpT1MgMTEgYXMgdGhlIGRlZmF1
bHQgdmVyc2lvbiBmb3IgdGVzdGluZy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
bWFjLnB5OgorICAgICAgICAoTWFjUG9ydCk6CisgICAgICAgIChNYWNQb3J0Ll9faW5pdF9fKTog
VXNlIFZlcnNpb24gb2JqZWN0IGZvciBfb3NfdmVyc2lvbi4KKyAgICAgICAgKE1hY1BvcnQuZGVm
YXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0aCk6IFVzZSB0aGUgaW50ZXJuYWwgbWFwcGluZyBvZiB2
ZXJzaW9uIG5hbWVzIHRvIGNvbnN0cnVjdAorICAgICAgICBhcHBsZV9hZGRpdGlvbnMgZXhwZWN0
YXRpb25zLgorICAgICAgICAoTWFjUG9ydC5jb25maWd1cmF0aW9uX3NwZWNpZmllcl9tYWNyb3Mp
OiBBdXRvbWF0aWNhbGx5IGNvbnN0cnVjdCBtYWNyb3MgYmFzZWQgb24gVmVyc2lvbk5hbWVNYXAu
CisgICAgICAgIChNYWNQb3J0Ll9hcHBsZV9hZGRpdGlvbnNfcGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L21hY191bml0dGVzdC5weToKKyAgICAgICAgKE1h
Y1Rlc3QpOiBVc2UgVmVyc2lvbiBvYmplY3QgaW5zdGVhZCBvZiB2ZXJzaW9uIHN0cmluZy4KKyAg
ICAgICAgKE1hY1Rlc3QudGVzdF92ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvcG9ydF90ZXN0Y2FzZS5weToKKyAgICAgICAgKGJpbmRfbW9ja19hcHBsZV9hZGRpdGlv
bnMpOiBBZGQgYSBtb2NrIFZlcnNpb25OYW1lTWFwIHRvIG1vY2sgYXBwbGVfYWRkaXRpb25zLgor
ICAgICAgICAoYmluZF9tb2NrX2FwcGxlX2FkZGl0aW9ucy5Nb2NrQXBwbGVBZGRpdGlvbnMpOgor
ICAgICAgICAoYmluZF9tb2NrX2FwcGxlX2FkZGl0aW9ucy5Nb2NrQXBwbGVBZGRpdGlvbnMudmVy
c2lvbl9uYW1lX21hcHBpbmcpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC90ZXN0
LnB5OgorICAgICAgICAoVGVzdFBvcnQpOgorICAgICAgICAoVGVzdFBvcnQuX19pbml0X18pOiBV
c2UgVmVyc2lvbk5hbWVNYXAgdG8gY29tcHV0ZSB0aGUgY29ycmVjdCBWZXJzaW9uIGZyb20gYSBw
b3J0IG5hbWUuCisgICAgICAgIChUZXN0UG9ydC52ZXJzaW9uX25hbWUpOiBNaXJyb3IgUG9ydCBv
YmplY3QuCisgICAgICAgIChUZXN0UG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aCk6IFJlcGxhY2Ug
d2luNyB3aXRoIDdzcDAuCisgICAgICAgIChUZXN0UG9ydC5fYWxsX3N5c3RlbXMpOiBEaXR0by4K
KyAgICAgICAgKFRlc3RQb3J0LmNvbmZpZ3VyYXRpb25fc3BlY2lmaWVyX21hY3Jvcyk6IERpdHRv
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHk6CisgICAgICAgIChXaW5Q
b3J0KToKKyAgICAgICAgKFdpblBvcnQuX19pbml0X18pOiBDb25zdHJ1Y3QgVmVyc2lvbiBvYmpl
Y3QgZnJvbSBwb3J0IG5hbWUuCisgICAgICAgIChXaW5Qb3J0LmRlZmF1bHRfYmFzZWxpbmVfc2Vh
cmNoX3BhdGgpOiBVc2UgdGhlIGludGVybmFsIG1hcHBpbmcgb2YgdmVyc2lvbiBuYW1lcyB0byBj
b25zdHJ1Y3QKKyAgICAgICAgYXBwbGVfYWRkaXRpb25zIGV4cGVjdGF0aW9ucy4KKyAgICAgICAg
KFdpbkNhaXJvUG9ydCk6CisgICAgICAgIChXaW5DYWlyb1BvcnQuZGVmYXVsdF9iYXNlbGluZV9z
ZWFyY2hfcGF0aCk6IFVzZSBNSU4vTUFYIGluc3RlYWQgb2YgdGhlIFZFUlNJT05fRkFMTEJBQ0tf
T1JERVIuCisgICAgICAgIChXaW5DYWlyb1BvcnQuX2Z1dHVyZV9wb3J0X25hbWUpOiBEZWxldGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93aW5fdW5pdHRlc3QucHk6CisgICAg
ICAgIChXaW5Qb3J0VGVzdC50ZXN0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKTogQWRkIG5ldyBXaW5k
b3dzIHZlcnNpb25zIG5vdCBwcmV2aW91c2x5IGluY2x1ZGVkLgorICAgICAgICAoV2luUG9ydFRl
c3QuX2Fzc2VydF92ZXJzaW9uKTogSGFuZGxlIGV4cGVjdGVkX3ZlcnNpb24gYXMgYSBWZXJzaW9u
IG9iamVjdC4KKyAgICAgICAgKFdpblBvcnRUZXN0LnRlc3RfdmVyc2lvbnMpOiBQYXNzIFZlcnNp
b24gb2JqZWN0cyBpbnN0ZWFkIG9mIHZlcnNpb24gc3RyaW5ncy4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3BvcnQvd3BlLnB5OgorICAgICAgICAoV1BFUG9ydC5fZ2VuZXJhdGVfYWxsX3Rl
c3RfY29uZmlndXJhdGlvbnMpOiBSZXBsYWNlIF92ZXJzaW9uIHdpdGggdmVyc2lvbl9uYW1lKCku
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRl
c3QucHk6CisgICAgICAgIChQcmludEV4cGVjdGF0aW9uc1Rlc3QudGVzdF9tdWx0aXBsZSk6IFJl
cGxhY2Ugd2luNyB3aXRoIDdzcDAuCisgICAgICAgIChQcmludEJhc2VsaW5lc1Rlc3QudGVzdF9t
dWx0aXBsZSk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9xdWV1ZXMucHk6CisgICAgICAgIChQYXRjaFByb2Nlc3NpbmdRdWV1ZS5fbmV3X3BvcnRfbmFt
ZV9mcm9tX29sZCk6IFVzZSBvc192ZXJzaW9uX25hbWUoKSBpbnN0ZWFkIG9mIFZlcnNpb24gb2Jq
ZWN0LgorCiAyMDE3LTEyLTA2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAg
ICAgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVjb3ZlciBhZnRlciBhIFNlcnZpY2UgV29ya2Vy
IHByb2Nlc3MgY3Jhc2gKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNp
b24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lv
bi5weQkocmV2aXNpb24gMjI1NTI4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
dmVyc2lvbi5weQkod29ya2luZyBjb3B5KQpAQCAtMTExLDYgKzExMSw4IEBAIGNsYXNzIFZlcnNp
b24ob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIF9fY21wX18oc2Vs
Ziwgb3RoZXIpOgorICAgICAgICBpZiBvdGhlciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJu
IDEKICAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihzZWxmKSk6CiAgICAgICAgICAgICBpZiBj
bXAoc2VsZltpXSwgb3RoZXJbaV0pOgogICAgICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZltp
XSwgb3RoZXJbaV0pCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9u
X25hbWVfbWFwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3ZlcnNpb25fbmFtZV9tYXAucHkJKHJldmlzaW9uIDIyNTUyOCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXAucHkJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDkgQEAgY2xhc3MgVmVyc2lvbk5hbWVNYXAob2JqZWN0KToKICAgICBAc3RhdGljbWV0
aG9kCiAgICAgQG1lbW9pemVkCiAgICAgZGVmIG1hcChwbGF0Zm9ybT1Ob25lKToKKyAgICAgICAg
ZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZpZyBpbXBvcnQgYXBwbGVfYWRkaXRpb25zCisgICAgICAg
IGlmIGFwcGxlX2FkZGl0aW9ucygpOgorICAgICAgICAgICAgcmV0dXJuIGFwcGxlX2FkZGl0aW9u
cygpLnZlcnNpb25fbmFtZV9tYXBwaW5nKHBsYXRmb3JtKQogICAgICAgICByZXR1cm4gVmVyc2lv
bk5hbWVNYXAocGxhdGZvcm09cGxhdGZvcm0pCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcGxh
dGZvcm09Tm9uZSk6CkBAIC02NSw2ICs2OCw5IEBAIGNsYXNzIFZlcnNpb25OYW1lTWFwKG9iamVj
dCk6CiAgICAgICAgICAgICB9LAogICAgICAgICB9CiAKKyAgICAgICAgIyB3aW5jYWlybyB1c2Vz
IHRoZSBzYW1lIHZlcnNpb25zIGFzIFdpbmRvd3MKKyAgICAgICAgc2VsZi5tYXBwaW5nWydwdWJs
aWMnXVsnd2luY2Fpcm8nXSA9IHNlbGYubWFwcGluZ1sncHVibGljJ11bJ3dpbiddCisKICAgICBA
Y2xhc3NtZXRob2QKICAgICBkZWYgX2F1dG9tYXBfdG9fbWFqb3JfdmVyc2lvbihjbHMsIHByZWZp
eCwgbWluaW11bT1WZXJzaW9uKDEpLCBtYXhpbXVtPVZlcnNpb24oMSkpOgogICAgICAgICByZXN1
bHQgPSB7fQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0
dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJz
aW9uX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMjU1MjgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi92ZXJzaW9uX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsMyAr
MTMwLDQgQEAgY2xhc3MgVmVyc2lvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKQogICAgICAg
ICBzZWxmLmFzc2VydEdyZWF0ZXIoVmVyc2lvbigxLCAyLCA0KSwgVmVyc2lvbigxLCAyLCAzKSkK
ICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKFZlcnNpb24oMSwgMywgMiksIFZlcnNpb24oMSwg
MiwgMykpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihWZXJzaW9uKDIsIDEsIDEpLCBWZXJz
aW9uKDEsIDIsIDMpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFZlcnNpb24oMSwgMiwg
MyksIE5vbmUpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxh
dGZvcm1pbmZvLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHJldmlzaW9uIDIyNTUyOCkKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDI0ICs1NCwxNyBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAgICAg
c2VsZi5vc19uYW1lID0gc2VsZi5fZGV0ZXJtaW5lX29zX25hbWUoc3lzX21vZHVsZS5wbGF0Zm9y
bSkKICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gTm9uZQogCisgICAgICAgIHNlbGYuX2lzX2N5
Z3dpbiA9IHN5c19tb2R1bGUucGxhdGZvcm0gPT0gJ2N5Z3dpbicKKwogICAgICAgICBpZiBzZWxm
Lm9zX25hbWUuc3RhcnRzd2l0aCgnbWFjJyk6Ci0gICAgICAgICAgICB2ZXJzaW9uID0gVmVyc2lv
bi5mcm9tX3N0cmluZyhwbGF0Zm9ybV9tb2R1bGUubWFjX3ZlcigpWzBdKQorICAgICAgICAgICAg
c2VsZi5vc192ZXJzaW9uID0gVmVyc2lvbi5mcm9tX3N0cmluZyhwbGF0Zm9ybV9tb2R1bGUubWFj
X3ZlcigpWzBdKQogICAgICAgICBlbGlmIHNlbGYub3NfbmFtZS5zdGFydHN3aXRoKCd3aW4nKToK
LSAgICAgICAgICAgIHZlcnNpb24gPSBzZWxmLl93aW5fdmVyc2lvbihzeXNfbW9kdWxlKQorICAg
ICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gc2VsZi5fd2luX3ZlcnNpb24oc3lzX21vZHVsZSkK
ICAgICAgICAgZWxpZiBzZWxmLm9zX25hbWUgPT0gJ2xpbnV4JyBvciBzZWxmLm9zX25hbWUgPT0g
J2ZyZWVic2QnIG9yIHNlbGYub3NfbmFtZSA9PSAnb3BlbmJzZCcgb3Igc2VsZi5vc19uYW1lID09
ICduZXRic2QnOgotICAgICAgICAgICAgdmVyc2lvbiA9IE5vbmUKKyAgICAgICAgICAgIHJldHVy
bgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBNb3N0IG90aGVyIHBsYXRmb3JtcyAobmFt
ZWx5IGlPUykgcmV0dXJuIGNvbmZvcm1pbmcgdmVyc2lvbiBzdHJpbmdzLgotICAgICAgICAgICAg
dmVyc2lvbiA9IFZlcnNpb24uZnJvbV9zdHJpbmcocGxhdGZvcm1fbW9kdWxlLnJlbGVhc2UoKSkK
LQotICAgICAgICBzZWxmLl9pc19jeWd3aW4gPSBzeXNfbW9kdWxlLnBsYXRmb3JtID09ICdjeWd3
aW4nCi0KLSAgICAgICAgaWYgdmVyc2lvbiBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuCi0K
LSAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYpLnRvX25h
bWUodmVyc2lvbiwgdGFibGU9J3B1YmxpYycpCi0gICAgICAgIGFzc2VydCBzZWxmLm9zX3ZlcnNp
b24gaXMgbm90IE5vbmUKLSAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gc2VsZi5vc192ZXJzaW9u
Lmxvd2VyKCkucmVwbGFjZSgnICcsICcnKQorICAgICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0g
VmVyc2lvbi5mcm9tX3N0cmluZyhwbGF0Zm9ybV9tb2R1bGUucmVsZWFzZSgpKQogCiAgICAgZGVm
IGlzX21hYyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYub3NfbmFtZSA9PSAnbWFjJwpAQCAt
MTEwLDYgKzEwMywxMSBAQCBjbGFzcyBQbGF0Zm9ybUluZm8ob2JqZWN0KToKICAgICAgICAgIyBX
aW5kb3dzLTIwMDhTZXJ2ZXJSMi02LjEuNzYwMAogICAgICAgICByZXR1cm4gc2VsZi5fcGxhdGZv
cm1fbW9kdWxlLnBsYXRmb3JtKCkKIAorICAgIGRlZiBvc192ZXJzaW9uX25hbWUoc2VsZiwgdGFi
bGU9J3B1YmxpYycpOgorICAgICAgICBpZiBub3Qgc2VsZi5vc192ZXJzaW9uOgorICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIFZlcnNpb25OYW1lTWFwLm1hcChzZWxmKS50
b19uYW1lKHNlbGYub3NfdmVyc2lvbiwgdGFibGU9dGFibGUpCisKICAgICBkZWYgdG90YWxfYnl0
ZXNfbWVtb3J5KHNlbGYpOgogICAgICAgICBpZiBzZWxmLmlzX21hYygpOgogICAgICAgICAgICAg
cmV0dXJuIGxvbmcoc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsic3lzY3RsIiwgIi1uIiwg
Imh3Lm1lbXNpemUiXSkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb19tb2NrLnB5CShyZXZpc2lvbiAyMjU1Mjgp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21v
Y2sucHkJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCwxMiBAQAogIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCitmcm9tIHdlYmtp
dHB5LmNvbW1vbi52ZXJzaW9uX25hbWVfbWFwIGltcG9ydCBWZXJzaW9uTmFtZU1hcAogCiAKIGNs
YXNzIE1vY2tQbGF0Zm9ybUluZm8ob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb3Nf
bmFtZT0nbWFjJywgb3NfdmVyc2lvbj0nc25vd2xlb3BhcmQnKToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgb3NfbmFtZT0nbWFjJywgb3NfdmVyc2lvbj1WZXJzaW9uKDEwLCA2KSk6CisgICAgICAg
IGFzc2VydCBpc2luc3RhbmNlKG9zX3ZlcnNpb24sIFZlcnNpb24pCiAgICAgICAgIHNlbGYub3Nf
bmFtZSA9IG9zX25hbWUKICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gb3NfdmVyc2lvbgogICAg
ICAgICBzZWxmLmV4cGVjdGVkX3hjb2RlX3NpbWN0bF9saXN0ID0gTm9uZQpAQCAtNjAsNiArNjIs
MTEgQEAgY2xhc3MgTW9ja1BsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgIGRlZiBkaXNwbGF5X25h
bWUoc2VsZik6CiAgICAgICAgIHJldHVybiAiTW9ja1BsYXRmb3JtIDEuMCIKIAorICAgIGRlZiBv
c192ZXJzaW9uX25hbWUoc2VsZiwgdGFibGU9J3B1YmxpYycpOgorICAgICAgICBpZiBub3Qgc2Vs
Zi5vc192ZXJzaW9uOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIFZl
cnNpb25OYW1lTWFwLm1hcChzZWxmKS50b19uYW1lKHNlbGYub3NfdmVyc2lvbiwgdGFibGU9dGFi
bGUpCisKICAgICBkZWYgdG90YWxfYnl0ZXNfbWVtb3J5KHNlbGYpOgogICAgICAgICByZXR1cm4g
MyAqIDEwMjQgKiAxMDI0ICogMTAyNCAgIyAzR0IgaXMgYSByZWFzb25hYmxlIGFtb3VudCBvZiBy
YW0gdG8gbW9jay4KIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L3BsYXRmb3JtaW5mb191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAy
MjU1MjgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1p
bmZvX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw4IEBAIGNsYXNzIFRl
c3RQbGF0Zm9ybUluZm8odW5pdHRlc3QuVGVzdENhc2UKICAgICAgICAgIyBUaGlzIHRlc3QgbWFr
ZXMgc3VyZSB0aGUgcmVhbCAodW5tb2NrZWQpIGNvZGUgYWN0dWFsbHkgd29ya3MuCiAgICAgICAg
IGluZm8gPSBQbGF0Zm9ybUluZm8oc3lzLCBwbGF0Zm9ybSwgRXhlY3V0aXZlKCkpCiAgICAgICAg
IHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGluZm8ub3NfbmFtZSwgJycpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0Tm90RXF1YWxzKGluZm8ub3NfdmVyc2lvbiwgJycpCisgICAgICAgIGlmIGluZm8uaXNfbWFj
KCkgb3IgaW5mby5pc193aW4oKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGlu
Zm8ub3NfdmVyc2lvbiwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoaW5mby5k
aXNwbGF5X25hbWUoKSwgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmZvLmlzX21hYygp
IG9yIGluZm8uaXNfd2luKCkgb3IgaW5mby5pc19saW51eCgpIG9yIGluZm8uaXNfZnJlZWJzZCgp
KQogICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShpbmZvLnRlcm1pbmFsX3dpZHRoKCkpCkBA
IC0xMzEsMzcgKzEzMiw2IEBAIGNsYXNzIFRlc3RQbGF0Zm9ybUluZm8odW5pdHRlc3QuVGVzdENh
c2UKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgc2VsZi5tYWtl
X2luZm8sIGZha2Vfc3lzKCd2bXMnKSkKIAotICAgIGRlZiB0ZXN0X29zX3ZlcnNpb24oc2VsZik6
Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBzZWxmLm1ha2VfaW5m
bywgZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC40LjMnKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZGFyd2luJyksIGZha2Vf
cGxhdGZvcm0oJzEwLjUuMScpKS5vc192ZXJzaW9uLCAnbGVvcGFyZCcpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRm
b3JtKCcxMC42LjEnKSkub3NfdmVyc2lvbiwgJ3Nub3dsZW9wYXJkJykKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZGFyd2luJyksIGZha2VfcGxhdGZv
cm0oJzEwLjcuMScpKS5vc192ZXJzaW9uLCAnbGlvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC44
LjEnKSkub3NfdmVyc2lvbiwgJ21vdW50YWlubGlvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC45
LjAnKSkub3NfdmVyc2lvbiwgJ21hdmVyaWNrcycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC4xMC4w
JykpLm9zX3ZlcnNpb24sICd5b3NlbWl0ZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vs
Zi5tYWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC4xMS4wJykp
Lm9zX3ZlcnNpb24sICdlbGNhcGl0YW4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYu
bWFrZV9pbmZvKGZha2Vfc3lzKCdkYXJ3aW4nKSwgZmFrZV9wbGF0Zm9ybSgnMTAuMTIuMCcpKS5v
c192ZXJzaW9uLCAnc2llcnJhJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2Vf
aW5mbyhmYWtlX3N5cygnZGFyd2luJyksIGZha2VfcGxhdGZvcm0oJzEwLjEzLjAnKSkub3NfdmVy
c2lvbiwgJ2hpZ2hzaWVycmEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9p
bmZvKGZha2Vfc3lzKCdkYXJ3aW4nKSwgZmFrZV9wbGF0Zm9ybSgnMTAuMTQuMCcpKS5vc192ZXJz
aW9uLCAnZnV0dXJlJykKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZv
KGZha2Vfc3lzKCdsaW51eDInKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzEwLjQnKSkub3NfdmVyc2lv
biwgTm9uZSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vf
c3lzKCdmcmVlYnNkOCcpLCBmYWtlX3BsYXRmb3JtKCcnLCAnOC4zLVBSRVJFTEVBU0UnKSkub3Nf
dmVyc2lvbiwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhm
YWtlX3N5cygnZnJlZWJzZDknKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzkuMC1SRUxFQVNFJykpLm9z
X3ZlcnNpb24sIE5vbmUpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJy
b3IsIHNlbGYubWFrZV9pbmZvLCBmYWtlX3N5cygnd2luMzInLCB0dXBsZShbNSwgMCwgMTIzNF0p
KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnd2lu
MzInLCB0dXBsZShbMTAsIDAsIDE0MzkzXSkpKS5vc192ZXJzaW9uLCAnd2luMTAnKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3aW4zMicsIHR1cGxl
KFs2LCAyLCAxMjM0XSkpKS5vc192ZXJzaW9uLCAnOCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMyJywgdHVwbGUoWzYsIDEsIDc2MDBdKSkp
Lm9zX3ZlcnNpb24sICc3c3AwJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2Vf
aW5mbyhmYWtlX3N5cygnd2luMzInLCB0dXBsZShbNiwgMCwgMTIzNF0pKSkub3NfdmVyc2lvbiwg
J3Zpc3RhJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5
cygnd2luMzInLCB0dXBsZShbNSwgMSwgMTIzNF0pKSkub3NfdmVyc2lvbiwgJ3hwJykKLQotICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgc2VsZi5tYWtlX2luZm8sIGZh
a2Vfc3lzKCd3aW4zMicpLCBleGVjdXRpdmU9ZmFrZV9leGVjdXRpdmUoJzUuMC4xMjM0JykpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2N5Z3dpbicp
LCBleGVjdXRpdmU9ZmFrZV9leGVjdXRpdmUoJzYuMi4xMjM0JykpLm9zX3ZlcnNpb24sICc4JykK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnY3lnd2lu
JyksIGV4ZWN1dGl2ZT1mYWtlX2V4ZWN1dGl2ZSgnNi4xLjc2MDAnKSkub3NfdmVyc2lvbiwgJzdz
cDAnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdj
eWd3aW4nKSwgZXhlY3V0aXZlPWZha2VfZXhlY3V0aXZlKCc2LjAuMTIzNCcpKS5vc192ZXJzaW9u
LCAndmlzdGEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vf
c3lzKCdjeWd3aW4nKSwgZXhlY3V0aXZlPWZha2VfZXhlY3V0aXZlKCc1LjEuMTIzNCcpKS5vc192
ZXJzaW9uLCAneHAnKQotCiAgICAgZGVmIHRlc3RfZGlzcGxheV9uYW1lKHNlbGYpOgogICAgICAg
ICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpKQogICAgICAgICBzZWxm
LmFzc2VydE5vdEVxdWFscyhpbmZvLmRpc3BsYXlfbmFtZSgpLCAnJykKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2NvbmZpZ3VyYXRpb24ucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxz
L3Rlc3RfY29uZmlndXJhdGlvbi5weQkocmV2aXNpb24gMjI1NTI4KQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfY29uZmlndXJhdGlvbi5weQkod29y
a2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBpbXBvcnQgaXRlcnRvb2xzCiAKIGNsYXNzIFRl
c3RDb25maWd1cmF0aW9uKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZlcnNpb24s
IGFyY2hpdGVjdHVyZSwgYnVpbGRfdHlwZSk6Ci0gICAgICAgIHNlbGYudmVyc2lvbiA9IHZlcnNp
b24KKyAgICAgICAgc2VsZi52ZXJzaW9uID0gdmVyc2lvbi5sb3dlcigpLnJlcGxhY2UoJyAnLCAn
JykgaWYgdmVyc2lvbiBpcyBub3QgTm9uZSBlbHNlICcnCiAgICAgICAgIHNlbGYuYXJjaGl0ZWN0
dXJlID0gYXJjaGl0ZWN0dXJlCiAgICAgICAgIHNlbGYuYnVpbGRfdHlwZSA9IGJ1aWxkX3R5cGUK
IApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3Rf
ZXhwZWN0YXRpb25zX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9uc191bml0dGVzdC5weQko
cmV2aXNpb24gMjI1NTI4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC00
NzQsNyArNDc0LDcgQEAgQnVnKHkpIFsgV2luIE1hYyBEZWJ1ZyBdIGZhaWx1cmVzL2V4cGVjdAog
CiAgICAgICAgIGFjdHVhbF9leHBlY3RhdGlvbnMgPSBleHBlY3RhdGlvbnMucmVtb3ZlX2NvbmZp
Z3VyYXRpb25fZnJvbV90ZXN0KCdmYWlsdXJlcy9leHBlY3RlZC9mb28uaHRtbCcsIHRlc3RfY29u
ZmlnKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIiQnVnKHgpIFsgTGludXggVmlzdGEg
V2luNyBSZWxlYXNlIF0gZmFpbHVyZXMvZXhwZWN0ZWQvZm9vLmh0bWwgWyBGYWlsdXJlIF0KKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiIiJCdWcoeCkgWyA3U1AwIExpbnV4IFZpc3RhIFJlbGVh
c2UgXSBmYWlsdXJlcy9leHBlY3RlZC9mb28uaHRtbCBbIEZhaWx1cmUgXQogQnVnKHkpIFsgV2lu
IE1hYyBEZWJ1ZyBdIGZhaWx1cmVzL2V4cGVjdGVkL2Zvby5odG1sIFsgQ3Jhc2ggXQogIiIiLCBh
Y3R1YWxfZXhwZWN0YXRpb25zKQogCkBAIC00OTMsNyArNDkzLDcgQEAgQnVnKHkpIFsgV2luIERl
YnVnIF0gZmFpbHVyZXMvZXhwZWN0ZWQvZgogCiAgICAgICAgIGFjdHVhbF9leHBlY3RhdGlvbnMg
PSBleHBlY3RhdGlvbnMucmVtb3ZlX2NvbmZpZ3VyYXRpb25fZnJvbV90ZXN0KCdmYWlsdXJlcy9l
eHBlY3RlZC9mb28uaHRtbCcsIHRlc3RfY29uZmlnKQogICAgICAgICBhY3R1YWxfZXhwZWN0YXRp
b25zID0gZXhwZWN0YXRpb25zLnJlbW92ZV9jb25maWd1cmF0aW9uX2Zyb21fdGVzdCgnZmFpbHVy
ZXMvZXhwZWN0ZWQvZm9vLmh0bWwnLCBob3N0LnBvcnRfZmFjdG9yeS5nZXQoJ3Rlc3Qtd2luLXZp
c3RhJywgTm9uZSkudGVzdF9jb25maWd1cmF0aW9uKCkpCi0gICAgICAgIGFjdHVhbF9leHBlY3Rh
dGlvbnMgPSBleHBlY3RhdGlvbnMucmVtb3ZlX2NvbmZpZ3VyYXRpb25fZnJvbV90ZXN0KCdmYWls
dXJlcy9leHBlY3RlZC9mb28uaHRtbCcsIGhvc3QucG9ydF9mYWN0b3J5LmdldCgndGVzdC13aW4t
d2luNycsIE5vbmUpLnRlc3RfY29uZmlndXJhdGlvbigpKQorICAgICAgICBhY3R1YWxfZXhwZWN0
YXRpb25zID0gZXhwZWN0YXRpb25zLnJlbW92ZV9jb25maWd1cmF0aW9uX2Zyb21fdGVzdCgnZmFp
bHVyZXMvZXhwZWN0ZWQvZm9vLmh0bWwnLCBob3N0LnBvcnRfZmFjdG9yeS5nZXQoJ3Rlc3Qtd2lu
LTdzcDAnLCBOb25lKS50ZXN0X2NvbmZpZ3VyYXRpb24oKSkKIAogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCIiIkJ1Zyh5KSBbIFdpbiBEZWJ1ZyBdIGZhaWx1cmVzL2V4cGVjdGVkL2Zvby5odG1s
IFsgQ3Jhc2ggXQogIiIiLCBhY3R1YWxfZXhwZWN0YXRpb25zKQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9hcHBsZS5weQkocmV2aXNpb24gMjI1NTI4KQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2FwcGxlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMCArMjcsMTEgQEAK
ICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KIAogaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwogCi1mcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJr
aXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi52ZXJzaW9uX25hbWVfbWFwIGltcG9ydCBWZXJzaW9uTmFtZU1hcAogZnJvbSB3ZWJraXRweS5w
b3J0LmJhc2UgaW1wb3J0IFBvcnQKK2Zyb20gd2Via2l0cHkucG9ydC5jb25maWcgaW1wb3J0IGFw
cGxlX2FkZGl0aW9ucwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29u
ZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24KIAogCkBAIC00MCwxOSArNDEsOSBA
QCBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiBjbGFzcyBBcHBsZVBvcnQoUG9y
dCk6CiAgICAgIiIiU2hhcmVkIGxvZ2ljIGJldHdlZW4gYWxsIG9mIEFwcGxlJ3MgcG9ydHMuIiIi
CiAKLSAgICAjIFRoaXMgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIHZlcnNpb24gb2YgYW4gb3Bl
cmF0aW5nIHN5c3RlbQotICAgICMgY29ycmVzcG9uZGluZyB0byB0aGUgIm1hYyIgb3IgIndpbiIg
YmFzZSBMYXlvdXRUZXN0cy9wbGF0Zm9ybQotICAgICMgZGlyZWN0b3J5LiAgSSdtIG5vdCBzdXJl
IHRoaXMgY29uY2VwdCBpcyB2ZXJ5IHVzZWZ1bCwKLSAgICAjIGJ1dCBpdCBnaXZlcyB1cyBhIHdh
eSB0byByZWZlciB0byBmYWxsYmFjayBwYXRocyAqb25seSogaW5jbHVkaW5nCi0gICAgIyB0aGUg
YmFzZSBkaXJlY3RvcnkuCi0gICAgIyBUaGlzIGlzIG1vc3RseSBkb25lIGJlY2F1c2UgVGVzdENv
bmZpZ3VyYXRpb24gYXNzdW1lcyB0aGF0IHNlbGYudmVyc2lvbigpCi0gICAgIyB3aWxsIG5ldmVy
IHJldHVybiBOb25lLiAoTm9uZSB3b3VsZCBiZSBhbm90aGVyIHdheSB0byByZXByZXNlbnQgdGhp
cyBjb25jZXB0LikKLSAgICAjIEFwcGxlIHN1cHBvc2VkbHkgaGFzIGV4cGxpY2l0ICJmdXR1cmUi
IHJlc3VsdHMgd2hpY2ggYXJlIGtlcHQgaW4gYW4gaW50ZXJuYWwgcmVwb3NpdG9yeS4KLSAgICAj
IEl0J3MgcG9zc2libGUgdGhhdCBBcHBsZSB3b3VsZCB3YW50IHRvIGZpeCB0aGlzIGNvZGUgdG8g
d29yayBiZXR0ZXIgd2l0aCB0aG9zZSByZXN1bHRzLgotICAgIEZVVFVSRV9WRVJTSU9OID0gJ2Z1
dHVyZScgICMgRklYTUU6IFRoaXMgd2hvbGUgJ2Z1dHVyZScgdGhpbmcgZmVlbHMgbGlrZSBhIGhh
Y2suCi0KICAgICAjIG92ZXJyaWRkZW4gaW4gc3ViY2xhc3NlcwotICAgIFZFUlNJT05fRkFMTEJB
Q0tfT1JERVIgPSBbXQorICAgIFZFUlNJT05fTUlOID0gTm9uZQorICAgIFZFUlNJT05fTUFYID0g
Tm9uZQogICAgIEFSQ0hJVEVDVFVSRVMgPSBbXQogICAgIF9jcmFzaF9sb2dzX3RvX3NraXBfZm9y
X2hvc3QgPSB7fQogCkBAIC03MSw5ICs2Miw5IEBAIGNsYXNzIEFwcGxlUG9ydChQb3J0KToKICAg
ICAgICAgICAgICMgYmVpbmcgcnVuLCBzbyB0aGlzIHdvbid0IHdvcmsgaWYgeW91J3JlIG5vdCBv
biBtYWMgb3Igd2luIChyZXNwZWN0aXZlbHkpLgogICAgICAgICAgICAgIyBJZiB5b3UncmUgbm90
IG9uIHRoZSBvL3MgaW4gcXVlc3Rpb24sIHlvdSBtdXN0IHNwZWNpZnkgYSBmdWxsIHZlcnNpb24g
b3IgLWZ1dHVyZSAoY2YuIGFib3ZlKS4KICAgICAgICAgICAgIGlmIHBvcnRfbmFtZSA9PSBjbHMu
cG9ydF9uYW1lIGFuZCBub3QgZ2V0YXR0cihvcHRpb25zLCAnd2Via2l0X3Rlc3RfcnVubmVyJywg
RmFsc2UpOgotICAgICAgICAgICAgICAgIHBvcnRfbmFtZSA9IGNscy5wb3J0X25hbWUgKyAnLScg
KyBob3N0LnBsYXRmb3JtLm9zX3ZlcnNpb24KKyAgICAgICAgICAgICAgICBwb3J0X25hbWUgPSBj
bHMucG9ydF9uYW1lICsgJy0nICsgaG9zdC5wbGF0Zm9ybS5vc192ZXJzaW9uX25hbWUoKS5sb3dl
cigpLnJlcGxhY2UoJyAnLCAnJykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
cG9ydF9uYW1lID0gY2xzLnBvcnRfbmFtZSArICctJyArIGhvc3QucGxhdGZvcm0ub3NfdmVyc2lv
biArICctd2syJworICAgICAgICAgICAgICAgIHBvcnRfbmFtZSA9IGNscy5wb3J0X25hbWUgKyAn
LScgKyBob3N0LnBsYXRmb3JtLm9zX3ZlcnNpb25fbmFtZSgpLmxvd2VyKCkucmVwbGFjZSgnICcs
ICcnKSArICctd2syJwogICAgICAgICBlbGlmIGdldGF0dHIob3B0aW9ucywgJ3dlYmtpdF90ZXN0
X3J1bm5lcicsIEZhbHNlKSBhbmQgICctd2syJyBub3QgaW4gcG9ydF9uYW1lOgogICAgICAgICAg
ICAgcG9ydF9uYW1lICs9ICctd2syJwogCkBAIC0xMDMsMzEgKzk0LDMwIEBAIGNsYXNzIEFwcGxl
UG9ydChQb3J0KToKICAgICBkZWYgc2hvdWxkX3JldHJ5X2NyYXNoZXMoc2VsZik6CiAgICAgICAg
IHJldHVybiBUcnVlCiAKLSAgICBkZWYgX3NraXBwZWRfZmlsZV9zZWFyY2hfcGF0aHMoc2VsZik6
Ci0gICAgICAgICMgV2UgZG9uJ3QgaGF2ZSBhIGRlZGljYXRlZCBTa2lwcGVkIGZpbGUgZm9yIHRo
ZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBwb3J0OwotICAgICAgICAjIHdlIGp1c3QgdXNl
IHRoZSBvbmUgaW4gcGxhdGZvcm0ve21hYyx3aW59Ci0gICAgICAgIG1vc3RfcmVjZW50X25hbWUg
PSBzZWxmLlZFUlNJT05fRkFMTEJBQ0tfT1JERVJbLTFdCi0gICAgICAgIHJldHVybiBzZXQoZmls
dGVyKGxhbWJkYSBuYW1lOiBuYW1lICE9IG1vc3RfcmVjZW50X25hbWUsIHN1cGVyKEFwcGxlUG9y
dCwgc2VsZikuX3NraXBwZWRfZmlsZV9zZWFyY2hfcGF0aHMoKSkpCi0KICAgICAjIEZJWE1FOiBB
IG1vcmUgc29waGlzdGljYXRlZCB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG1vdmUg
dG8gV2ViS2l0UG9ydCBhbmQgcmVwbGFjZSBhbGwgY2FsbHMgdG8gbmFtZSgpLgogICAgICMgVGhp
cyBpcyBhbHNvIGEgbWlzbGVhZGluZyBuYW1lLCBzaW5jZSAnbWFjLWZ1dHVyZScgZ2V0cyByZW1h
cHBlZCB0byAnbWFjJy4KICAgICBkZWYgX3BvcnRfbmFtZV93aXRoX3ZlcnNpb24oc2VsZik6CiAg
ICAgICAgIHJldHVybiBzZWxmLm5hbWUoKS5yZXBsYWNlKCctZnV0dXJlJywgJycpLnJlcGxhY2Uo
Jy13azInLCAnJykKIAotICAgIGRlZiBfYWxsb3dlZF9wb3J0X25hbWVzKHNlbGYpOgotICAgICAg
ICByZXR1cm4gc2VsZi5WRVJTSU9OX0ZBTExCQUNLX09SREVSICsgW3NlbGYuX2Z1dHVyZV9wb3J0
X25hbWUoKV0KLQotICAgIGRlZiBfZnV0dXJlX3BvcnRfbmFtZShzZWxmKToKLSAgICAgICAgcmV0
dXJuIHNlbGYub3BlcmF0aW5nX3N5c3RlbSgpICsgIi0iICsgc2VsZi5GVVRVUkVfVkVSU0lPTgor
ICAgIEBtZW1vaXplZAorICAgIGRlZiBfYWxsb3dlZF92ZXJzaW9ucyhzZWxmKToKKyAgICAgICAg
aWYgc2VsZi5WRVJTSU9OX01JTiBpcyBOb25lIG9yIHNlbGYuVkVSU0lPTl9NQVggaXMgTm9uZToK
KyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBzb3J0ZWRfdmVyc2lvbnMgPSBzb3J0ZWQo
VmVyc2lvbk5hbWVNYXAubWFwKHNlbGYuaG9zdC5wbGF0Zm9ybSkubWFwcGluZ1sncHVibGljJ11b
c2VsZi5wb3J0X25hbWUuc3BsaXQoJy0nKVswXV0udmFsdWVzKCkpCisgICAgICAgIHJldHVybiBz
b3J0ZWRfdmVyc2lvbnNbc29ydGVkX3ZlcnNpb25zLmluZGV4KHNlbGYuVkVSU0lPTl9NSU4pOnNv
cnRlZF92ZXJzaW9ucy5pbmRleChzZWxmLlZFUlNJT05fTUFYKSArIDFdCiAKICAgICBkZWYgX2dl
bmVyYXRlX2FsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKHNlbGYpOgogICAgICAgICBjb25maWd1cmF0
aW9ucyA9IFtdCi0gICAgICAgIGZvciBwb3J0X25hbWUgaW4gc2VsZi5fYWxsb3dlZF9wb3J0X25h
bWVzKCk6CisgICAgICAgIGZvciB2ZXJzaW9uIGluIHNlbGYuX2FsbG93ZWRfdmVyc2lvbnMoKToK
ICAgICAgICAgICAgIGZvciBidWlsZF90eXBlIGluIHNlbGYuQUxMX0JVSUxEX1RZUEVTOgogICAg
ICAgICAgICAgICAgIGZvciBhcmNoaXRlY3R1cmUgaW4gc2VsZi5BUkNISVRFQ1RVUkVTOgotICAg
ICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24o
dmVyc2lvbj1zZWxmLl9zdHJpcF9wb3J0X25hbWVfcHJlZml4KHBvcnRfbmFtZSksIGFyY2hpdGVj
dHVyZT1hcmNoaXRlY3R1cmUsIGJ1aWxkX3R5cGU9YnVpbGRfdHlwZSkpCisgICAgICAgICAgICAg
ICAgICAgIHZlcnNpb25fbmFtZSA9IFZlcnNpb25OYW1lTWFwLm1hcChzZWxmLmhvc3QucGxhdGZv
cm0pLnRvX25hbWUodmVyc2lvbiwgcGxhdGZvcm09c2VsZi5wb3J0X25hbWUuc3BsaXQoJy0nKVsw
XSwgdGFibGU9J3B1YmxpYycpCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLmFw
cGVuZChUZXN0Q29uZmlndXJhdGlvbih2ZXJzaW9uPXZlcnNpb25fbmFtZSwgYXJjaGl0ZWN0dXJl
PWFyY2hpdGVjdHVyZSwgYnVpbGRfdHlwZT1idWlsZF90eXBlKSkKICAgICAgICAgcmV0dXJuIGNv
bmZpZ3VyYXRpb25zCiAKKyAgICBkZWYgX2FwcGxlX2Jhc2VsaW5lX3BhdGgoc2VsZiwgcGxhdGZv
cm0pOgorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKGFwcGxlX2FkZGl0aW9u
cygpLmxheW91dF90ZXN0c19wYXRoKCksIHBsYXRmb3JtKQorCiAgICAgZGVmIF9wYXRoX3RvX2hl
bHBlcihzZWxmKToKICAgICAgICAgYmluYXJ5X25hbWUgPSAnTGF5b3V0VGVzdEhlbHBlcicKICAg
ICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoYmluYXJ5X25hbWUpCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvYmFzZS5weQkocmV2aXNpb24gMjI1NTI4KQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAg
ZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbQogZnJvbSB3ZWJraXRweS5j
b21tb24ucHJldHR5cGF0Y2ggaW1wb3J0IFByZXR0eVBhdGNoCiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0gaW1wb3J0IHBhdGgKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRp
dmUgaW1wb3J0IFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25hbWVf
bWFwIGltcG9ydCBWZXJzaW9uTmFtZU1hcAogZnJvbSB3ZWJraXRweS5jb21tb24ud2F2ZWRpZmYg
aW1wb3J0IFdhdmVEaWZmCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi53ZWJraXRfZmluZGVyIGltcG9y
dCBXZWJLaXRGaW5kZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2Nv
bmZpZ3VyYXRpb24gaW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCkBAIC05OSw3ICsxMDAsNyBAQCBj
bGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX25hbWUgPSBwb3J0X25hbWUKIAogICAg
ICAgICAjIFRoZXNlIGFyZSBkZWZhdWx0IHZhbHVlcyB0aGF0IHNob3VsZCBiZSBvdmVycmlkZGVu
IGluIGEgc3ViY2xhc3Nlcy4KLSAgICAgICAgc2VsZi5fdmVyc2lvbiA9ICcnCisgICAgICAgIHNl
bGYuX29zX3ZlcnNpb24gPSBOb25lCiAKICAgICAgICAgIyBGSVhNRTogVGhpcyBjYW4gYmUgcmVt
b3ZlZCBvbmNlIGRlZmF1bHQgYXJjaGl0ZWN0dXJlcyBmb3IgR1RLIGFuZCBFRkwgRVdTIGJvdHMg
YXJlIHNldC4KICAgICAgICAgc2VsZi5kaWRfb3ZlcnJpZGVfYXJjaGl0ZWN0dXJlID0gRmFsc2UK
QEAgLTc2NCwxMyArNzY1LDE1IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgIyBTdWJj
bGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCiAgICAg
ICAgIHJldHVybiAnbWFjJwogCi0gICAgZGVmIHZlcnNpb24oc2VsZik6CisgICAgZGVmIHZlcnNp
b25fbmFtZShzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyBhIHN0cmluZyBpbmRpY2F0aW5nIHRo
ZSB2ZXJzaW9uIG9mIGEgZ2l2ZW4gcGxhdGZvcm0sIGUuZy4KICAgICAgICAgJ2xlb3BhcmQnIG9y
ICd4cCcuCiAKICAgICAgICAgVGhpcyBpcyB1c2VkIHRvIGhlbHAgaWRlbnRpZnkgdGhlIGV4YWN0
IHBvcnQgd2hlbiBwYXJzaW5nIHRlc3QKICAgICAgICAgZXhwZWN0YXRpb25zLCBkZXRlcm1pbmlu
ZyBzZWFyY2ggcGF0aHMsIGFuZCBsb2dnaW5nIGluZm9ybWF0aW9uLiIiIgotICAgICAgICByZXR1
cm4gc2VsZi5fdmVyc2lvbgorICAgICAgICBpZiBzZWxmLl9vc192ZXJzaW9uIGlzIE5vbmU6Cisg
ICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gVmVyc2lvbk5hbWVNYXAubWFw
KHNlbGYuaG9zdC5wbGF0Zm9ybSkudG9fbmFtZShzZWxmLl9vc192ZXJzaW9uLCB0YWJsZT0ncHVi
bGljJykKIAogICAgIGRlZiBnZXRfb3B0aW9uKHNlbGYsIG5hbWUsIGRlZmF1bHRfdmFsdWU9Tm9u
ZSk6CiAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX29wdGlvbnMsIG5hbWUsIGRlZmF1bHRf
dmFsdWUpCkBAIC0xMDcyLDcgKzEwNzUsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgZGVm
IHRlc3RfY29uZmlndXJhdGlvbihzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB0aGUgY3VycmVu
dCBUZXN0Q29uZmlndXJhdGlvbiBmb3IgdGhlIHBvcnQuIiIiCiAgICAgICAgIGlmIG5vdCBzZWxm
Ll90ZXN0X2NvbmZpZ3VyYXRpb246Ci0gICAgICAgICAgICBzZWxmLl90ZXN0X2NvbmZpZ3VyYXRp
b24gPSBUZXN0Q29uZmlndXJhdGlvbihzZWxmLl92ZXJzaW9uLCBzZWxmLmFyY2hpdGVjdHVyZSgp
LCBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24ubG93ZXIoKSkKKyAgICAgICAgICAgIHNlbGYu
X3Rlc3RfY29uZmlndXJhdGlvbiA9IFRlc3RDb25maWd1cmF0aW9uKHNlbGYudmVyc2lvbl9uYW1l
KCksIHNlbGYuYXJjaGl0ZWN0dXJlKCksIHNlbGYuX29wdGlvbnMuY29uZmlndXJhdGlvbi5sb3dl
cigpKQogICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF9jb25maWd1cmF0aW9uCiAKICAgICAjIEZJ
WE1FOiBCZWxvbmdzIG9uIGEgUGxhdGZvcm0gb2JqZWN0LgpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2Rhcndpbl90ZXN0Y2FzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5CShyZXZpc2lvbiAyMjU1MjgpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBAIGZyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBv
cnQgTW9ja08KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1w
b3J0IE1vY2tGaWxlU3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZl
X21vY2sgaW1wb3J0IE1vY2tFeGVjdXRpdmUsIE1vY2tFeGVjdXRpdmUyLCBNb2NrUHJvY2Vzcywg
U2NyaXB0RXJyb3IKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sg
aW1wb3J0IE1vY2tTeXN0ZW1Ib3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25hbWVf
bWFwIGltcG9ydCBWZXJzaW9uTmFtZU1hcAogCiAKIGNsYXNzIERhcndpblRlc3QocG9ydF90ZXN0
Y2FzZS5Qb3J0VGVzdENhc2UpOgpAQCAtNDEsNyArNDIsNyBAQCBjbGFzcyBEYXJ3aW5UZXN0KHBv
cnRfdGVzdGNhc2UuUG9ydFRlc3RDCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtl
X3BvcnQob3B0aW9ucz1Nb2NrT3B0aW9ucyhndWFyZF9tYWxsb2M9VHJ1ZSkpLmRlZmF1bHRfdGlt
ZW91dF9tcygpLCAzNTAwMDApCiAKICAgICBkZWYgYXNzZXJ0X25hbWUoc2VsZiwgcG9ydF9uYW1l
LCBvc192ZXJzaW9uX3N0cmluZywgZXhwZWN0ZWQpOgotICAgICAgICBob3N0ID0gTW9ja1N5c3Rl
bUhvc3Qob3NfbmFtZT1zZWxmLm9zX25hbWUsIG9zX3ZlcnNpb249b3NfdmVyc2lvbl9zdHJpbmcp
CisgICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdChvc19uYW1lPXNlbGYub3NfbmFtZSwgb3Nf
dmVyc2lvbj1WZXJzaW9uTmFtZU1hcC5tYXAoKS5mcm9tX25hbWUob3NfdmVyc2lvbl9zdHJpbmcp
WzFdKQogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoaG9zdD1ob3N0LCBwb3J0X25hbWU9
cG9ydF9uYW1lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBwb3J0Lm5hbWUo
KSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3RvcnlfdW5pdHRlc3Qu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3RvcnlfdW5p
dHRlc3QucHkJKHJldmlzaW9uIDIyNTUyOCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9mYWN0b3J5X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTEgQEAg
aW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9j
a09wdGlvbnMKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1w
b3J0IE1vY2tTeXN0ZW1Ib3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uIGltcG9ydCBW
ZXJzaW9uCiAKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgZmFjdG9yeQogZnJvbSB3ZWJraXRw
eS5wb3J0IGltcG9ydCBndGsKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgbWFjCi1mcm9tIHdl
YmtpdHB5LnBvcnQgaW1wb3J0IHRlc3QKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgd2luCiAK
IApAQCAtNTUsMTUgKzU1LDE1IEBAIGNsYXNzIEZhY3RvcnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKICAgICBkZWYgdGVzdF9tYWMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9y
dF9uYW1lPSdtYWMtbGlvbicsIGNscz1tYWMuTWFjUG9ydCkKICAgICAgICAgc2VsZi5hc3NlcnRf
cG9ydChwb3J0X25hbWU9J21hYy1saW9uLXdrMicsIGNscz1tYWMuTWFjUG9ydCkKLSAgICAgICAg
c2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9J21hYycsIG9zX25hbWU9J21hYycsIG9zX3ZlcnNp
b249J2xpb24nLCBjbHM9bWFjLk1hY1BvcnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9y
dF9uYW1lPU5vbmUsICBvc19uYW1lPSdtYWMnLCBvc192ZXJzaW9uPSdsaW9uJywgY2xzPW1hYy5N
YWNQb3J0KQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT0nbWFjJywgb3NfbmFt
ZT0nbWFjJywgb3NfdmVyc2lvbj1WZXJzaW9uKDEwLCA3KSwgY2xzPW1hYy5NYWNQb3J0KQorICAg
ICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT1Ob25lLCAgb3NfbmFtZT0nbWFjJywgb3Nf
dmVyc2lvbj1WZXJzaW9uKDEwLCA3KSwgY2xzPW1hYy5NYWNQb3J0KQogCiAgICAgZGVmIHRlc3Rf
d2luKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT0nd2luLXhwJywg
Y2xzPXdpbi5XaW5Qb3J0KQogICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT0nd2lu
LXhwLXdrMicsIGNscz13aW4uV2luUG9ydCkKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0
X25hbWU9J3dpbicsIG9zX25hbWU9J3dpbicsIG9zX3ZlcnNpb249J3hwJywgY2xzPXdpbi5XaW5Q
b3J0KQotICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT1Ob25lLCBvc19uYW1lPSd3
aW4nLCBvc192ZXJzaW9uPSd4cCcsIGNscz13aW4uV2luUG9ydCkKLSAgICAgICAgc2VsZi5hc3Nl
cnRfcG9ydChwb3J0X25hbWU9Tm9uZSwgb3NfbmFtZT0nd2luJywgb3NfdmVyc2lvbj0neHAnLCBv
cHRpb25zPXNlbGYud2Via2l0X29wdGlvbnMsIGNscz13aW4uV2luUG9ydCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfcG9ydChwb3J0X25hbWU9J3dpbicsIG9zX25hbWU9J3dpbicsIG9zX3ZlcnNpb249
VmVyc2lvbig1LCAxKSwgY2xzPXdpbi5XaW5Qb3J0KQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0
KHBvcnRfbmFtZT1Ob25lLCBvc19uYW1lPSd3aW4nLCBvc192ZXJzaW9uPVZlcnNpb24oNSwgMSks
IGNscz13aW4uV2luUG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9Tm9u
ZSwgb3NfbmFtZT0nd2luJywgb3NfdmVyc2lvbj1WZXJzaW9uKDUsIDEpLCBvcHRpb25zPXNlbGYu
d2Via2l0X29wdGlvbnMsIGNscz13aW4uV2luUG9ydCkKIAogICAgIGRlZiB0ZXN0X2d0ayhzZWxm
KToKICAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9J2d0aycsIGNscz1ndGsuR3Rr
UG9ydCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weQkocmV2aXNpb24gMjI1NTI4
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weQkod29ya2luZyBjb3B5KQpA
QCAtMTY4LDcgKzE2OCw3IEBAIGNsYXNzIEd0a1BvcnQoUG9ydCk6CiAgICAgZGVmIF9nZW5lcmF0
ZV9hbGxfdGVzdF9jb25maWd1cmF0aW9ucyhzZWxmKToKICAgICAgICAgY29uZmlndXJhdGlvbnMg
PSBbXQogICAgICAgICBmb3IgYnVpbGRfdHlwZSBpbiBzZWxmLkFMTF9CVUlMRF9UWVBFUzoKLSAg
ICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJhdGlvbih2ZXJzaW9u
PXNlbGYuX3ZlcnNpb24sIGFyY2hpdGVjdHVyZT0neDg2JywgYnVpbGRfdHlwZT1idWlsZF90eXBl
KSkKKyAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJhdGlvbih2
ZXJzaW9uPXNlbGYudmVyc2lvbl9uYW1lKCksIGFyY2hpdGVjdHVyZT0neDg2JywgYnVpbGRfdHlw
ZT1idWlsZF90eXBlKSkKICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25zCiAKICAgICBkZWYg
X3BhdGhfdG9fZHJpdmVyKHNlbGYpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2lvcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5
CShyZXZpc2lvbiAyMjU1MjgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBAIGltcG9ydCB0cmFjZWJhY2sKIAogZnJv
bSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJz
aW9uX25hbWVfbWFwIGltcG9ydCBWZXJzaW9uTmFtZU1hcAogZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24K
IGZyb20gd2Via2l0cHkucG9ydC5jb25maWcgaW1wb3J0IGFwcGxlX2FkZGl0aW9ucwogZnJvbSB3
ZWJraXRweS5wb3J0LmRhcndpbiBpbXBvcnQgRGFyd2luUG9ydApAQCAtMzYsNiArMzcsOSBAQCBf
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiBjbGFzcyBJT1NQb3J0KERhcndpblBv
cnQpOgogICAgIHBvcnRfbmFtZSA9ICJpb3MiCiAKKyAgICBWRVJTSU9OX01JTiA9IFZlcnNpb24o
MTEpCisgICAgVkVSU0lPTl9NQVggPSBWZXJzaW9uKDEyKQorCiAgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgogICAgICAgICBzdXBlcihJT1NQb3J0LCBz
ZWxmKS5fX2luaXRfXyhob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQogICAgICAgICBzZWxmLl90
ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gU2ltdWxhdG9yUHJvY2VzcwpAQCAtNDUs
NiArNDksMTEgQEAgY2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICBkZWYgX2RldmljZV9m
b3Jfd29ya2VyX251bWJlcl9tYXAoc2VsZik6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVk
RXJyb3IKIAorICAgIGRlZiB2ZXJzaW9uX25hbWUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX29z
X3ZlcnNpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVy
biBWZXJzaW9uTmFtZU1hcC5tYXAoc2VsZi5ob3N0LnBsYXRmb3JtKS50b19uYW1lKHNlbGYuX29z
X3ZlcnNpb24sIHBsYXRmb3JtPUlPU1BvcnQucG9ydF9uYW1lLCB0YWJsZT0ncHVibGljJykKKwog
ICAgIGRlZiBkcml2ZXJfY21kX2xpbmVfZm9yX2xvZ2dpbmcoc2VsZik6CiAgICAgICAgICMgQXZv
aWQgY3JlYXRpbmcvY29ubmVjdGluZyB0byBkZXZpY2VzIGp1c3QgZm9yIGxvZ2dpbmcgdGhlIGNv
bW1hbmRsaW5lLgogICAgICAgICBzZWxmLl9wcmludGluZ19jbWRfbGluZSA9IFRydWUKQEAgLTYz
LDcgKzcyLDcgQEAgY2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgY29uZmlndXJh
dGlvbnMgPSBbXQogICAgICAgICBmb3IgYnVpbGRfdHlwZSBpbiBzZWxmLkFMTF9CVUlMRF9UWVBF
UzoKICAgICAgICAgICAgIGZvciBhcmNoaXRlY3R1cmUgaW4gc2VsZi5BUkNISVRFQ1RVUkVTOgot
ICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJhdGlvbih2
ZXJzaW9uPXNlbGYuX3ZlcnNpb24sIGFyY2hpdGVjdHVyZT1hcmNoaXRlY3R1cmUsIGJ1aWxkX3R5
cGU9YnVpbGRfdHlwZSkpCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMuYXBwZW5kKFRl
c3RDb25maWd1cmF0aW9uKHZlcnNpb249c2VsZi52ZXJzaW9uX25hbWUoKSwgYXJjaGl0ZWN0dXJl
PWFyY2hpdGVjdHVyZSwgYnVpbGRfdHlwZT1idWlsZF90eXBlKSkKICAgICAgICAgcmV0dXJuIGNv
bmZpZ3VyYXRpb25zCiAKICAgICBAbWVtb2l6ZWQKQEAgLTg4LDIyICs5Nyw2IEBAIGNsYXNzIElP
U1BvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fdGVzdGluZ19kZXZp
Y2Uod29ya2VyX251bWJlcikKICAgICAgICAgcmV0dXJuIHNlbGYuX2N1cnJlbnRfZGV2aWNlCiAK
LSAgICBkZWYgX2FwcGxlX2FkZGl0aW9uc19wYXRoKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBu
YW1lID09ICd3azInOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgc3BsaXRfbmFt
ZSA9IG5hbWUuc3BsaXQoJy0nKQotICAgICAgICBvc19pbmRleCA9IC0xCi0gICAgICAgIGZvciBp
IGluIHhyYW5nZSgyKToKLSAgICAgICAgICAgIGlmIHNwbGl0X25hbWVbb3NfaW5kZXhdID09ICd3
azEnIG9yIHNwbGl0X25hbWVbb3NfaW5kZXhdID09ICd3azInIG9yIHNwbGl0X25hbWVbb3NfaW5k
ZXhdID09ICdzaW11bGF0b3InIG9yIHNwbGl0X25hbWVbb3NfaW5kZXhdID09ICdkZXZpY2UnOgot
ICAgICAgICAgICAgICAgIG9zX2luZGV4IC09IDEKLSAgICAgICAgaWYgc3BsaXRfbmFtZVtvc19p
bmRleF0gIT0gc3BsaXRfbmFtZVswXToKLSAgICAgICAgICAgIG9zX25hbWUgPSBhcHBsZV9hZGRp
dGlvbnMoKS5pb3Nfb3NfbmFtZShzcGxpdF9uYW1lW29zX2luZGV4XSkKLSAgICAgICAgICAgIGlm
IG5vdCBvc19uYW1lOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICBz
cGxpdF9uYW1lW29zX2luZGV4XSA9IG9zX25hbWUKLSAgICAgICAgbmFtZSA9ICctJy5qb2luKHNw
bGl0X25hbWUpCi0gICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4oYXBwbGVfYWRk
aXRpb25zKCkubGF5b3V0X3Rlc3RzX3BhdGgoKSwgbmFtZSkKLQogICAgIEBtZW1vaXplZAogICAg
IGRlZiBkZWZhdWx0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgogICAgICAgICB3a19zdHJp
bmcgPSAnd2sxJwpAQCAtMTExLDMwICsxMDQsNDIgQEAgY2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0
KToKICAgICAgICAgICAgIHdrX3N0cmluZyA9ICd3azInCiAgICAgICAgICMgSWYgd2UgZG9uJ3Qg
aGF2ZSBhIHNwZWNpZmllZCB2ZXJzaW9uLCB0aGF0IG1lYW5zIHdlIHVzaW5nIHRoZSBwb3J0IHdp
dGhvdXQgYW4gU0RLLgogICAgICAgICAjIFRoaXMgdXN1YWxseSBtZWFucyB3ZSdyZSBkb2luZyBz
b21lIHR5cGUgb2YgdGVzdGluZy5JbiB0aGlzIGNhc2UsIGRvbid0IGFkZCB2ZXJzaW9uIGZhbGxi
YWNrcwotICAgICAgICBmYWxsYmFja19uYW1lcyA9IFtdCisgICAgICAgIGV4cGVjdGF0aW9ucyA9
IFtdCisgICAgICAgIGlmIGFwcGxlX2FkZGl0aW9ucygpIGFuZCBzZWxmLmlvc192ZXJzaW9uKCk6
CisgICAgICAgICAgICBhcHBsZV9uYW1lID0gVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYuaG9zdC5w
bGF0Zm9ybSkudG9fbmFtZShzZWxmLmlvc192ZXJzaW9uKCksIHBsYXRmb3JtPUlPU1BvcnQucG9y
dF9uYW1lLCB0YWJsZT0naW50ZXJuYWwnKS5sb3dlcigpLnJlcGxhY2UoJyAnLCAnJykKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGFwcGxlX25hbWUgPSBOb25lCiAgICAgICAgIGlmIHNlbGYu
aW9zX3ZlcnNpb24oKToKLSAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzLmFwcGVuZCgne30te30t
e30nLmZvcm1hdChzZWxmLnBvcnRfbmFtZSwgc2VsZi5pb3NfdmVyc2lvbigpLm1ham9yLCB3a19z
dHJpbmcpKQotICAgICAgICAgICAgZmFsbGJhY2tfbmFtZXMuYXBwZW5kKCd7fS17fScuZm9ybWF0
KHNlbGYucG9ydF9uYW1lLCBzZWxmLmlvc192ZXJzaW9uKCkubWFqb3IpKQotICAgICAgICBmYWxs
YmFja19uYW1lcy5hcHBlbmQoJ3t9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIHdrX3N0cmlu
ZykpCi0gICAgICAgIGZhbGxiYWNrX25hbWVzLmFwcGVuZChzZWxmLnBvcnRfbmFtZSkKKyAgICAg
ICAgICAgIGlmIGFwcGxlX25hbWU6CisgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVu
ZChzZWxmLl9hcHBsZV9iYXNlbGluZV9wYXRoKCd7fS17fS17fScuZm9ybWF0KHNlbGYucG9ydF9u
YW1lLCBhcHBsZV9uYW1lLCB3a19zdHJpbmcpKSkKKyAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5h
cHBlbmQoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3t9LXt9LXt9Jy5mb3JtYXQoc2VsZi5w
b3J0X25hbWUsIHNlbGYuaW9zX3ZlcnNpb24oKS5tYWpvciwgd2tfc3RyaW5nKSkpCisgICAgICAg
ICAgICBpZiBhcHBsZV9uYW1lOgorICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQo
c2VsZi5fYXBwbGVfYmFzZWxpbmVfcGF0aCgne30te30nLmZvcm1hdChzZWxmLnBvcnRfbmFtZSwg
YXBwbGVfbmFtZSkpKQorICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl93ZWJr
aXRfYmFzZWxpbmVfcGF0aCgne30te30nLmZvcm1hdChzZWxmLnBvcnRfbmFtZSwgc2VsZi5pb3Nf
dmVyc2lvbigpLm1ham9yKSkpCisKKyAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCk6CisgICAg
ICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3BhdGgoJ3t9
LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIHdrX3N0cmluZykpKQorICAgICAgICBleHBlY3Rh
dGlvbnMuYXBwZW5kKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKCd7fS17fScuZm9ybWF0KHNl
bGYucG9ydF9uYW1lLCB3a19zdHJpbmcpKSkKKyAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCk6
CisgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3Bh
dGgoc2VsZi5wb3J0X25hbWUpKQorICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX3dl
YmtpdF9iYXNlbGluZV9wYXRoKHNlbGYucG9ydF9uYW1lKSkKKwogICAgICAgICBpZiBzZWxmLmlv
c192ZXJzaW9uKCk6Ci0gICAgICAgICAgICBmYWxsYmFja19uYW1lcy5hcHBlbmQoJ3t9LXt9Jy5m
b3JtYXQoSU9TUG9ydC5wb3J0X25hbWUsIHNlbGYuaW9zX3ZlcnNpb24oKS5tYWpvcikpCi0gICAg
ICAgIGZhbGxiYWNrX25hbWVzLmFwcGVuZCgne30te30nLmZvcm1hdChJT1NQb3J0LnBvcnRfbmFt
ZSwgd2tfc3RyaW5nKSkKLSAgICAgICAgZmFsbGJhY2tfbmFtZXMuYXBwZW5kKElPU1BvcnQucG9y
dF9uYW1lKQorICAgICAgICAgICAgaWYgYXBwbGVfbmFtZToKKyAgICAgICAgICAgICAgICBleHBl
Y3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3BhdGgoJ3t9LXt9Jy5mb3JtYXQo
SU9TUG9ydC5wb3J0X25hbWUsIGFwcGxlX25hbWUpKSkKKyAgICAgICAgICAgIGV4cGVjdGF0aW9u
cy5hcHBlbmQoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3t9LXt9Jy5mb3JtYXQoSU9TUG9y
dC5wb3J0X25hbWUsIHNlbGYuaW9zX3ZlcnNpb24oKS5tYWpvcikpKQorCisgICAgICAgIGlmIGFw
cGxlX2FkZGl0aW9ucygpOgorICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl9h
cHBsZV9iYXNlbGluZV9wYXRoKCd7fS17fScuZm9ybWF0KElPU1BvcnQucG9ydF9uYW1lLCB3a19z
dHJpbmcpKSkKKyAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl93ZWJraXRfYmFzZWxp
bmVfcGF0aCgne30te30nLmZvcm1hdChJT1NQb3J0LnBvcnRfbmFtZSwgd2tfc3RyaW5nKSkpCisg
ICAgICAgIGlmIGFwcGxlX2FkZGl0aW9ucygpOgorICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFw
cGVuZChzZWxmLl9hcHBsZV9iYXNlbGluZV9wYXRoKElPU1BvcnQucG9ydF9uYW1lKSkKKyAgICAg
ICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aChJT1NQb3J0
LnBvcnRfbmFtZSkpCiAKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9y
dW5uZXInKToKLSAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzLmFwcGVuZCgnd2syJykKKyAgICAg
ICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3dr
MicpKQogCi0gICAgICAgIHdlYmtpdF9leHBlY3RhdGlvbnMgPSBtYXAoc2VsZi5fd2Via2l0X2Jh
c2VsaW5lX3BhdGgsIGZhbGxiYWNrX25hbWVzKQotICAgICAgICBpZiBhcHBsZV9hZGRpdGlvbnMo
KSBhbmQgZ2V0YXR0cihhcHBsZV9hZGRpdGlvbnMoKSwgImxheW91dF90ZXN0c19wYXRoIiwgTm9u
ZSk6Ci0gICAgICAgICAgICBhcHBsZV9leHBlY3RhdGlvbnMgPSBtYXAoc2VsZi5fYXBwbGVfYWRk
aXRpb25zX3BhdGgsIGZhbGxiYWNrX25hbWVzKQotICAgICAgICAgICAgcmVzdWx0ID0gW10KLSAg
ICAgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4od2Via2l0X2V4cGVjdGF0aW9ucykpOgotICAg
ICAgICAgICAgICAgIGlmIGFwcGxlX2V4cGVjdGF0aW9uc1tpXToKLSAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChhcHBsZV9leHBlY3RhdGlvbnNbaV0pCi0gICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCh3ZWJraXRfZXhwZWN0YXRpb25zW2ldKQotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdAotICAgICAgICByZXR1cm4gd2Via2l0X2V4cGVjdGF0aW9ucworICAgICAgICByZXR1
cm4gZXhwZWN0YXRpb25zCiAKICAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnNfZmlsZV9wb3NpdGlv
bihzZWxmKToKICAgICAgICAgcmV0dXJuIDQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9pb3NfZGV2aWNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9pb3NfZGV2aWNlLnB5CShyZXZpc2lvbiAyMjU1MjgpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvaW9zX2RldmljZS5weQkod29ya2luZyBjb3B5KQpAQCAtMTA5LDkgKzEwOSw3
IEBAIGNsYXNzIElPU0RldmljZVBvcnQoSU9TUG9ydCk6CiAgICAgICAgICAgICBlbHNlOgogICAg
ICAgICAgICAgICAgIGlmIGRldmljZS5wbGF0Zm9ybS5vc192ZXJzaW9uICE9IHZlcnNpb246CiAg
ICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTXVsdGlwbGUgY29ubmVjdGVk
IGRldmljZXMgaGF2ZSBkaWZmZXJlbnQgaU9TIHZlcnNpb25zJykKLSAgICAgICAgaWYgdmVyc2lv
bjoKLSAgICAgICAgICAgIHJldHVybiBWZXJzaW9uTmFtZU1hcC5tYXAoc2VsZi5ob3N0LnBsYXRm
b3JtKS5mcm9tX25hbWUodmVyc2lvbilbMV0KLSAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAg
cmV0dXJuIHZlcnNpb24KIAogICAgICMgRklYTUU6IFRoZXNlIG5lZWQgZGV2aWNlIGltcGxlbWVu
dGF0aW9ucyA8cmRhcjovL3Byb2JsZW0vMzA0OTc5OTE+LgogICAgIGRlZiBjaGVja19mb3JfbGVh
a3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCk6CkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5weQkocmV2aXNpb24g
MjI1NTI4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2VfdW5pdHRl
c3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwxMCBAQCBmcm9tIHdlYmtpdHB5LnBv
cnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UKIAogY2xhc3MgSU9TRGV2aWNlVGVzdChpb3NfdGVzdGNh
c2UuSU9TVGVzdCk6CiAgICAgb3NfbmFtZSA9ICdpb3MnCi0gICAgb3NfdmVyc2lvbiA9ICcnCisg
ICAgb3NfdmVyc2lvbiA9IE5vbmUKICAgICBwb3J0X25hbWUgPSAnaW9zLWRldmljZScKICAgICBw
b3J0X21ha2VyID0gSU9TRGV2aWNlUG9ydAogCi0gICAgZGVmIG1ha2VfcG9ydChzZWxmLCBob3N0
PU5vbmUsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUsIG9zX25hbWU9Tm9uZSwgb3NfdmVy
c2lvbj1Ob25lLCAqKmt3YXJncyk6Ci0gICAgICAgIHBvcnQgPSBzdXBlcihJT1NEZXZpY2VUZXN0
LCBzZWxmKS5tYWtlX3BvcnQoaG9zdD1ob3N0LCBwb3J0X25hbWU9cG9ydF9uYW1lLCBvcHRpb25z
PW9wdGlvbnMsIG9zX25hbWU9b3NfbmFtZSwgc192ZXJzaW9uPW9zX3ZlcnNpb24sIGt3YXJncz1r
d2FyZ3MpCi0gICAgICAgIHBvcnQuc2V0X29wdGlvbigndmVyc2lvbicsICcxMS4wJykKLSAgICAg
ICAgcmV0dXJuIHBvcnQKLQogICAgIGRlZiB0ZXN0X29wZXJhdGluZ19zeXN0ZW0oc2VsZik6CiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2lvcy1kZXZpY2UnLCBzZWxmLm1ha2VfcG9ydCgpLm9w
ZXJhdGluZ19zeXN0ZW0oKSkKIApAQCAtOTMsMTUgKzg4LDE1IEBAIGNsYXNzIElPU0RldmljZVRl
c3QoaW9zX3Rlc3RjYXNlLklPU1Rlc3QKICAgICBkZWYgdGVzdF9sYXlvdXRfdGVzdF9zZWFyY2hw
YXRoX3dpdGhfYXBwbGVfYWRkaXRpb25zKHNlbGYpOgogICAgICAgICB3aXRoIHBvcnRfdGVzdGNh
c2UuYmluZF9tb2NrX2FwcGxlX2FkZGl0aW9ucygpOgogICAgICAgICAgICAgc2VhcmNoX3BhdGgg
PSBzZWxmLm1ha2VfcG9ydCgpLmRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzBdLCAnL2FkZGl0aW9uYWxfdGVzdGluZ19w
YXRoL2lvcy1kZXZpY2UtYWRkLTExLXdrMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vh
cmNoX3BhdGhbMF0sICcvYWRkaXRpb25hbF90ZXN0aW5nX3BhdGgvaW9zLWRldmljZS1hZGQtaW9z
MTEtd2sxJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFsxXSwgJy9tb2Nr
LWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy1kZXZpY2UtMTEtd2sxJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFsyXSwgJy9hZGRpdGlvbmFsX3Rlc3Rpbmdf
cGF0aC9pb3MtZGV2aWNlLWFkZC0xMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNo
X3BhdGhbMl0sICcvYWRkaXRpb25hbF90ZXN0aW5nX3BhdGgvaW9zLWRldmljZS1hZGQtaW9zMTEn
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzNdLCAnL21vY2stY2hlY2tv
dXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLWRldmljZS0xMScpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VhcmNoX3BhdGhbNF0sICcvYWRkaXRpb25hbF90ZXN0aW5nX3BhdGgvaW9zLWRl
dmljZS13azEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzVdLCAnL21v
Y2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLWRldmljZS13azEnKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzZdLCAnL2FkZGl0aW9uYWxfdGVzdGluZ19w
YXRoL2lvcy1kZXZpY2UnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzdd
LCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLWRldmljZScpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbOF0sICcvYWRkaXRpb25hbF90ZXN0aW5n
X3BhdGgvaW9zLWFkZC0xMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhb
OF0sICcvYWRkaXRpb25hbF90ZXN0aW5nX3BhdGgvaW9zLWFkZC1pb3MxMScpCiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbOV0sICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9pb3MtMTEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRo
WzEwXSwgJy9hZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3Mtd2sxJykKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzZWFyY2hfcGF0aFsxMV0sICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9pb3Mtd2sxJykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nf
c2ltdWxhdG9yLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3Nfc2ltdWxhdG9yLnB5CShyZXZpc2lvbiAyMjU1MjgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvaW9zX3NpbXVsYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDcgKzI0Niw3
IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoSU9TUG9ydCk6CiAgICAgICAgICAgICBlbHNlOgog
ICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3Np
bWN0bCcsICdib290JywgZGV2aWNlX3VkaWRdKQogCi0gICAgICAgICAgICBpZiBtYWNfb3NfdmVy
c2lvbiBpbiBbJ2VsY2FwaXRhbicsICd5b3NlbWl0ZScsICdtYXZlcmlja3MnXToKKyAgICAgICAg
ICAgIGlmIG1hY19vc192ZXJzaW9uIDwgVmVyc2lvbigxMCwgMTEpOgogICAgICAgICAgICAgICAg
IHRpbWUuc2xlZXAoMi41KQogCiAgICAgICAgIGlmIG5vdCBzZWxmLnVzZV9tdWx0aXBsZV9zaW11
bGF0b3JfYXBwcygpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11
bGF0b3JfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvc19zaW11bGF0b3JfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIyNTUyOCkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yX3VuaXR0ZXN0LnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0yMCwxMiArMjAsMTEgQEAKICMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KIAotaW1wb3J0IHRpbWUKLQogZnJvbSB3ZWJraXRweS5wb3J0Lmlvc19zaW11bGF0
b3IgaW1wb3J0IElPU1NpbXVsYXRvclBvcnQKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgaW9z
X3Rlc3RjYXNlCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UKIGZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJl
Citmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCiBmcm9tIHdlYmtp
dHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zCiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZXhlY3V0aXZlX21vY2sgaW1wb3J0IE1vY2tFeGVjdXRpdmUyLCBTY3JpcHRFcnJv
cgogCkBAIC0zMywxMiArMzIsMTIgQEAgZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1
dGl2ZV9tbwogY2xhc3MgSU9TU2ltdWxhdG9yVGVzdChpb3NfdGVzdGNhc2UuSU9TVGVzdCk6CiAg
ICAgIyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzEw
NwogICAgIG9zX25hbWUgPSAnbWFjJwotICAgIG9zX3ZlcnNpb24gPSAnJworICAgIG9zX3ZlcnNp
b24gPSBOb25lCiAgICAgcG9ydF9uYW1lID0gJ2lvcy1zaW11bGF0b3InCiAgICAgcG9ydF9tYWtl
ciA9IElPU1NpbXVsYXRvclBvcnQKIAotICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgaG9zdD1Ob25l
LCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lLCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNpb249
Tm9uZSwgKiprd2FyZ3MpOgotICAgICAgICBwb3J0ID0gc3VwZXIoSU9TU2ltdWxhdG9yVGVzdCwg
c2VsZikubWFrZV9wb3J0KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9ucz1v
cHRpb25zLCBvc19uYW1lPW9zX25hbWUsIHNfdmVyc2lvbj1vc192ZXJzaW9uLCBrd2FyZ3M9a3dh
cmdzKQorICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0X25hbWU9Tm9uZSwg
b3B0aW9ucz1Ob25lLCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNpb249VmVyc2lvbigxMSksICoqa3dh
cmdzKToKKyAgICAgICAgcG9ydCA9IHN1cGVyKElPU1NpbXVsYXRvclRlc3QsIHNlbGYpLm1ha2Vf
cG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3Nf
bmFtZT1vc19uYW1lLCBvc192ZXJzaW9uPW9zX3ZlcnNpb24sIGt3YXJncz1rd2FyZ3MpCiAgICAg
ICAgIHBvcnQuc2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJywgMSkKICAgICAgICAgcmV0dXJu
IHBvcnQKIApAQCAtOTIsMTUgKzkxLDE1IEBAIGNsYXNzIElPU1NpbXVsYXRvclRlc3QoaW9zX3Rl
c3RjYXNlLklPU1QKICAgICBkZWYgdGVzdF9sYXlvdXRfdGVzdF9zZWFyY2hwYXRoX3dpdGhfYXBw
bGVfYWRkaXRpb25zKHNlbGYpOgogICAgICAgICB3aXRoIHBvcnRfdGVzdGNhc2UuYmluZF9tb2Nr
X2FwcGxlX2FkZGl0aW9ucygpOgogICAgICAgICAgICAgc2VhcmNoX3BhdGggPSBzZWxmLm1ha2Vf
cG9ydCgpLmRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlYXJjaF9wYXRoWzBdLCAnL2FkZGl0aW9uYWxfdGVzdGluZ19wYXRoL2lvcy1zaW11
bGF0b3ItYWRkLTgtd2sxJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFsx
XSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3ItOC13
azEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzJdLCAnL2FkZGl0aW9u
YWxfdGVzdGluZ19wYXRoL2lvcy1zaW11bGF0b3ItYWRkLTgnKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlYXJjaF9wYXRoWzNdLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vaW9zLXNpbXVsYXRvci04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0
aFswXSwgJy9hZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3Mtc2ltdWxhdG9yLWFkZC1pb3MxMS13
azEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzFdLCAnL21vY2stY2hl
Y2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLXNpbXVsYXRvci0xMS13azEnKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzJdLCAnL2FkZGl0aW9uYWxfdGVzdGluZ19w
YXRoL2lvcy1zaW11bGF0b3ItYWRkLWlvczExJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWFyY2hfcGF0aFszXSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy1z
aW11bGF0b3ItMTEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzRdLCAn
L2FkZGl0aW9uYWxfdGVzdGluZ19wYXRoL2lvcy1zaW11bGF0b3Itd2sxJykKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFs1XSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3Rz
L3BsYXRmb3JtL2lvcy1zaW11bGF0b3Itd2sxJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWFyY2hfcGF0aFs2XSwgJy9hZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3Mtc2ltdWxhdG9yJykK
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFs3XSwgJy9tb2NrLWNoZWNrb3V0
L0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3InKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlYXJjaF9wYXRoWzhdLCAnL2FkZGl0aW9uYWxfdGVzdGluZ19wYXRoL2lvcy1hZGQt
OCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbOV0sICcvbW9jay1jaGVj
a291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VhcmNoX3BhdGhbOF0sICcvYWRkaXRpb25hbF90ZXN0aW5nX3BhdGgvaW9zLWFkZC1pb3Mx
MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbOV0sICcvbW9jay1jaGVj
a291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MtMTEnKQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNlYXJjaF9wYXRoWzEwXSwgJy9hZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3Mtd2sxJykK
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFsxMV0sICcvbW9jay1jaGVja291
dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3Mtd2sxJykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3NfdGVzdGNhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2lvc190ZXN0Y2FzZS5weQkocmV2aXNpb24gMjI1NTI4KQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc190ZXN0Y2FzZS5weQkod29ya2luZyBjb3B5KQpAQCAt
MjAsMTMgKzIwLDE4IEBACiAjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAK
K2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIGZyb20gd2Via2l0
cHkucG9ydCBpbXBvcnQgZGFyd2luX3Rlc3RjYXNlCi1mcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rv
b2wgaW1wb3J0IE1vY2tPcHRpb25zCiAKIAogY2xhc3MgSU9TVGVzdChkYXJ3aW5fdGVzdGNhc2Uu
RGFyd2luVGVzdCk6CiAgICAgZGlzYWJsZV9zZXR1cCA9IFRydWUKIAorICAgIGRlZiBtYWtlX3Bv
cnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lLCBvc19uYW1l
PU5vbmUsIG9zX3ZlcnNpb249VmVyc2lvbigxMSksICoqa3dhcmdzKToKKyAgICAgICAgcG9ydCA9
IHN1cGVyKElPU1Rlc3QsIHNlbGYpLm1ha2VfcG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1wb3J0
X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3NfbmFtZT1vc19uYW1lLCBvc192ZXJzaW9uPU5vbmUs
IGt3YXJncz1rd2FyZ3MpCisgICAgICAgIHBvcnQuc2V0X29wdGlvbigndmVyc2lvbicsIHN0cihv
c192ZXJzaW9uKSkKKyAgICAgICAgcmV0dXJuIHBvcnQKKwogICAgIGRlZiB0ZXN0X2RyaXZlcl9u
YW1lKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9wb3J0KCkuZHJp
dmVyX25hbWUoKSwgJ0R1bXBSZW5kZXJUcmVlLmFwcCcpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9tYWMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L21hYy5weQkocmV2aXNpb24gMjI1NTI4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L21hYy5weQkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDEyIEBACiAKIGltcG9y
dCBsb2dnaW5nCiBpbXBvcnQgb3MKLWltcG9ydCB0aW1lCiBpbXBvcnQgcmUKIAogZnJvbSB3ZWJr
aXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRweS5jb21t
b24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbl9u
YW1lX21hcCBpbXBvcnQgVmVyc2lvbk5hbWVNYXAKIGZyb20gd2Via2l0cHkucG9ydC5jb25maWcg
aW1wb3J0IGFwcGxlX2FkZGl0aW9ucwogZnJvbSB3ZWJraXRweS5wb3J0LmRhcndpbiBpbXBvcnQg
RGFyd2luUG9ydAogCkBAIC00Myw3ICs0NCw5IEBAIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihf
X25hbWVfXykKIGNsYXNzIE1hY1BvcnQoRGFyd2luUG9ydCk6CiAgICAgcG9ydF9uYW1lID0gIm1h
YyIKIAotICAgIFZFUlNJT05fRkFMTEJBQ0tfT1JERVIgPSBbJ21hYy1zbm93bGVvcGFyZCcsICdt
YWMtbGlvbicsICdtYWMtbW91bnRhaW5saW9uJywgJ21hYy1tYXZlcmlja3MnLCAnbWFjLXlvc2Vt
aXRlJywgJ21hYy1lbGNhcGl0YW4nLCAnbWFjLXNpZXJyYScsICdtYWMtaGlnaHNpZXJyYSddCisg
ICAgVkVSU0lPTl9NSU4gPSBWZXJzaW9uKDEwLCA2KQorICAgIFZFUlNJT05fTUFYID0gVmVyc2lv
bigxMCwgMTQpCisKICAgICBTREsgPSAnbWFjb3N4JwogCiAgICAgQVJDSElURUNUVVJFUyA9IFsn
eDg2XzY0JywgJ3g4NiddCkBAIC01Miw2NiArNTUsNTggQEAgY2xhc3MgTWFjUG9ydChEYXJ3aW5Q
b3J0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdz
KToKICAgICAgICAgRGFyd2luUG9ydC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoq
a3dhcmdzKQotICAgICAgICBzZWxmLl9vc192ZXJzaW9uID0gcG9ydF9uYW1lLnNwbGl0KCctJylb
MV0gaWYgcG9ydF9uYW1lLnNwbGl0KCctJykgPiAxIGVsc2Ugc2VsZi5ob3N0LnBsYXRmb3JtLm9z
X3ZlcnNpb24KKyAgICAgICAgaWYgcG9ydF9uYW1lLnNwbGl0KCctJykgPiAxOgorICAgICAgICAg
ICAgc2VsZi5fb3NfdmVyc2lvbiA9IFZlcnNpb25OYW1lTWFwLm1hcChob3N0LnBsYXRmb3JtKS5m
cm9tX25hbWUocG9ydF9uYW1lLnNwbGl0KCctJylbMV0pWzFdCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBzZWxmLl9vc192ZXJzaW9uID0gc2VsZi5ob3N0LnBsYXRmb3JtLm9zX3ZlcnNpb24K
IAogICAgIGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdzKHNlbGYpOgogICAgICAgICByZXR1cm4gWydB
UkNIUz1pMzg2J10gaWYgc2VsZi5hcmNoaXRlY3R1cmUoKSA9PSAneDg2JyBlbHNlIFtdCiAKLSAg
ICBkZWYgX2FwcGxlX2FkZGl0aW9uc19wYXRoKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBuYW1l
ID09ICd3azInOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgc3BsaXRfbmFtZSA9
IG5hbWUuc3BsaXQoJy0nKQotICAgICAgICBvc19pbmRleCA9IC0xCi0gICAgICAgIGlmIHNwbGl0
X25hbWVbLTFdID09ICd3azEnIG9yIHNwbGl0X25hbWVbLTFdID09ICd3azInOgotICAgICAgICAg
ICAgb3NfaW5kZXggPSAtMgotICAgICAgICBpZiBzcGxpdF9uYW1lW29zX2luZGV4XSAhPSBzcGxp
dF9uYW1lWzBdOgotICAgICAgICAgICAgb3NfbmFtZSA9IGFwcGxlX2FkZGl0aW9ucygpLm1hY19v
c19uYW1lKHNwbGl0X25hbWVbb3NfaW5kZXhdKQotICAgICAgICAgICAgaWYgbm90IG9zX25hbWU6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIHNwbGl0X25hbWVbb3Nf
aW5kZXhdID0gb3NfbmFtZQotICAgICAgICBuYW1lID0gJy0nLmpvaW4oc3BsaXRfbmFtZSkKLSAg
ICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihhcHBsZV9hZGRpdGlvbnMoKS5sYXlv
dXRfdGVzdHNfcGF0aCgpLCBuYW1lKQotCiAgICAgQG1lbW9pemVkCiAgICAgZGVmIGRlZmF1bHRf
YmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6Ci0gICAgICAgIG1hY192ZXJzaW9uID0gJ21hYy17
fScuZm9ybWF0KHNlbGYuX29zX3ZlcnNpb24pCi0gICAgICAgIGlmIG1hY192ZXJzaW9uLmVuZHN3
aXRoKHNlbGYuRlVUVVJFX1ZFUlNJT04pIG9yIG1hY192ZXJzaW9uIG5vdCBpbiBzZWxmLlZFUlNJ
T05fRkFMTEJBQ0tfT1JERVI6Ci0gICAgICAgICAgICB2ZXJzaW9uX2ZhbGxiYWNrID0gW21hY192
ZXJzaW9uXQorICAgICAgICB2ZXJzaW9uX25hbWVfbWFwID0gVmVyc2lvbk5hbWVNYXAubWFwKHNl
bGYuaG9zdC5wbGF0Zm9ybSkKKyAgICAgICAgaWYgc2VsZi5fb3NfdmVyc2lvbiA8IHNlbGYuVkVS
U0lPTl9NSU4gb3Igc2VsZi5fb3NfdmVyc2lvbiA+IHNlbGYuVkVSU0lPTl9NQVg6CisgICAgICAg
ICAgICB2ZXJzaW9uX2ZhbGxiYWNrID0gW3NlbGYuX29zX3ZlcnNpb25dCiAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICB2ZXJzaW9uX2ZhbGxiYWNrID0gc2VsZi5WRVJTSU9OX0ZBTExCQUNLX09S
REVSW3NlbGYuVkVSU0lPTl9GQUxMQkFDS19PUkRFUi5pbmRleChtYWNfdmVyc2lvbik6LTFdCisg
ICAgICAgICAgICBzb3J0ZWRfdmVyc2lvbnMgPSBzb3J0ZWQodmVyc2lvbl9uYW1lX21hcC5tYXBw
aW5nWydwdWJsaWMnXVtzZWxmLnBvcnRfbmFtZV0udmFsdWVzKCkpCisgICAgICAgICAgICB2ZXJz
aW9uX2ZhbGxiYWNrID0gc29ydGVkX3ZlcnNpb25zW3NvcnRlZF92ZXJzaW9ucy5pbmRleChzZWxm
Ll9vc192ZXJzaW9uKTotMV0KICAgICAgICAgd2tfc3RyaW5nID0gJ3drMScKICAgICAgICAgaWYg
c2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXInKToKICAgICAgICAgICAgIHdrX3N0
cmluZyA9ICd3azInCiAKLSAgICAgICAgZmFsbGJhY2tfbmFtZXMgPSBbXQorICAgICAgICBleHBl
Y3RhdGlvbnMgPSBbXQogICAgICAgICBmb3IgdmVyc2lvbiBpbiB2ZXJzaW9uX2ZhbGxiYWNrOgot
ICAgICAgICAgICAgZmFsbGJhY2tfbmFtZXMuYXBwZW5kKCd7fS17fScuZm9ybWF0KHZlcnNpb24s
IHdrX3N0cmluZykpCi0gICAgICAgICAgICBmYWxsYmFja19uYW1lcy5hcHBlbmQodmVyc2lvbikK
LSAgICAgICAgZmFsbGJhY2tfbmFtZXMgPSBmYWxsYmFja19uYW1lcyArIFsKLSAgICAgICAgICAg
ICd7fS17fScuZm9ybWF0KHNlbGYucG9ydF9uYW1lLCB3a19zdHJpbmcpLAotICAgICAgICAgICAg
c2VsZi5wb3J0X25hbWUsCi0gICAgICAgIF0KLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3
ZWJraXRfdGVzdF9ydW5uZXInKToKLSAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzLmFwcGVuZCgn
d2syJykKKyAgICAgICAgICAgIHZlcnNpb25fbmFtZSA9IHZlcnNpb25fbmFtZV9tYXAudG9fbmFt
ZSh2ZXJzaW9uKS5sb3dlcigpLnJlcGxhY2UoJyAnLCAnJykKKyAgICAgICAgICAgIGlmIGFwcGxl
X2FkZGl0aW9ucygpOgorICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5f
YXBwbGVfYmFzZWxpbmVfcGF0aCgnbWFjLXt9LXt9Jy5mb3JtYXQodmVyc2lvbl9uYW1lX21hcC50
b19uYW1lKHZlcnNpb24sIHRhYmxlPSdpbnRlcm5hbCcpLmxvd2VyKCkucmVwbGFjZSgnICcsICcn
KSwgd2tfc3RyaW5nKSkpCisgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX3dl
YmtpdF9iYXNlbGluZV9wYXRoKCdtYWMte30te30nLmZvcm1hdCh2ZXJzaW9uX25hbWUsIHdrX3N0
cmluZykpKQorICAgICAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCk6CisgICAgICAgICAgICAg
ICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl9hcHBsZV9iYXNlbGluZV9wYXRoKCdtYWMte30n
LmZvcm1hdCh2ZXJzaW9uX25hbWVfbWFwLnRvX25hbWUodmVyc2lvbiwgdGFibGU9J2ludGVybmFs
JykubG93ZXIoKS5yZXBsYWNlKCcgJywgJycpKSkpCisgICAgICAgICAgICBleHBlY3RhdGlvbnMu
YXBwZW5kKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKCdtYWMte30nLmZvcm1hdCh2ZXJzaW9u
X25hbWUpKSkKKworICAgICAgICBpZiBhcHBsZV9hZGRpdGlvbnMoKToKKyAgICAgICAgICAgIGV4
cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fYXBwbGVfYmFzZWxpbmVfcGF0aCgne30te30nLmZvcm1h
dChzZWxmLnBvcnRfbmFtZSwgd2tfc3RyaW5nKSkpCisgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBl
bmQoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3t9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25h
bWUsIHdrX3N0cmluZykpKQorICAgICAgICBpZiBhcHBsZV9hZGRpdGlvbnMoKToKKyAgICAgICAg
ICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fYXBwbGVfYmFzZWxpbmVfcGF0aCgne30nLmZv
cm1hdChzZWxmLnBvcnRfbmFtZSkpKQorICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYu
X3dlYmtpdF9iYXNlbGluZV9wYXRoKHNlbGYucG9ydF9uYW1lKSkKIAotICAgICAgICB3ZWJraXRf
ZXhwZWN0YXRpb25zID0gbWFwKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoLCBmYWxsYmFja19u
YW1lcykKLSAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCkgYW5kIGdldGF0dHIoYXBwbGVfYWRk
aXRpb25zKCksICJsYXlvdXRfdGVzdHNfcGF0aCIsIE5vbmUpOgotICAgICAgICAgICAgYXBwbGVf
ZXhwZWN0YXRpb25zID0gbWFwKHNlbGYuX2FwcGxlX2FkZGl0aW9uc19wYXRoLCBmYWxsYmFja19u
YW1lcykKLSAgICAgICAgICAgIHJlc3VsdCA9IFtdCi0gICAgICAgICAgICBmb3IgaSBpbiB4cmFu
Z2UobGVuKHdlYmtpdF9leHBlY3RhdGlvbnMpKToKLSAgICAgICAgICAgICAgICBpZiBhcHBsZV9l
eHBlY3RhdGlvbnNbaV06Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYXBwbGVf
ZXhwZWN0YXRpb25zW2ldKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQod2Via2l0X2V4
cGVjdGF0aW9uc1tpXSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQKLSAgICAgICAgcmV0dXJu
IHdlYmtpdF9leHBlY3RhdGlvbnMKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRf
dGVzdF9ydW5uZXInKToKKyAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fd2Vi
a2l0X2Jhc2VsaW5lX3BhdGgoJ3drMicpKQorICAgICAgICByZXR1cm4gZXhwZWN0YXRpb25zCiAK
KyAgICBAbWVtb2l6ZWQKICAgICBkZWYgY29uZmlndXJhdGlvbl9zcGVjaWZpZXJfbWFjcm9zKHNl
bGYpOgotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgImhpZ2hzaWVycmErIjogWyJoaWdo
c2llcnJhIiwgImZ1dHVyZSJdLAotICAgICAgICAgICAgInNpZXJyYSsiOiBbInNpZXJyYSIsICJo
aWdoc2llcnJhIiwgImZ1dHVyZSJdLAotICAgICAgICAgICAgImVsY2FwaXRhbisiOiBbImVsY2Fw
aXRhbiIsICJzaWVycmEiLCAiaGlnaHNpZXJyYSIsICJmdXR1cmUiXSwKLSAgICAgICAgICAgICJ5
b3NlbWl0ZSsiOiBbInlvc2VtaXRlIiwgImVsY2FwaXRhbiIsICJzaWVycmEiLCAiaGlnaHNpZXJy
YSIsICJmdXR1cmUiXSwKLSAgICAgICAgfQorICAgICAgICBtYXAgPSB7fQorICAgICAgICB2ZXJz
aW9uX25hbWVfbWFwID0gVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYuaG9zdC5wbGF0Zm9ybSkKKyAg
ICAgICAgc29ydGVkX3ZlcnNpb25zID0gc29ydGVkKHZlcnNpb25fbmFtZV9tYXAubWFwcGluZ1sn
cHVibGljJ11bc2VsZi5wb3J0X25hbWVdLnZhbHVlcygpKQorICAgICAgICBmb3IgdmVyc2lvbiBp
biBzb3J0ZWRfdmVyc2lvbnM6CisgICAgICAgICAgICBsaXN0ID0gW10KKyAgICAgICAgICAgIGZv
ciBuZXdlciBpbiBzb3J0ZWRfdmVyc2lvbnNbc29ydGVkX3ZlcnNpb25zLmluZGV4KHZlcnNpb24p
Ol06CisgICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQodmVyc2lvbl9uYW1lX21hcC50b19uYW1l
KG5ld2VyLCBwbGF0Zm9ybT1zZWxmLnBvcnRfbmFtZSkubG93ZXIoKS5yZXBsYWNlKCcgJywgJycp
KQorICAgICAgICAgICAgbWFwW3ZlcnNpb25fbmFtZV9tYXAudG9fbmFtZSh2ZXJzaW9uLCBwbGF0
Zm9ybT1zZWxmLnBvcnRfbmFtZSkubG93ZXIoKS5yZXBsYWNlKCcgJywgJycpICsgJysnXSA9IGxp
c3QKKyAgICAgICAgcmV0dXJuIG1hcAogCiAgICAgZGVmIHNldHVwX2Vudmlyb25fZm9yX3NlcnZl
cihzZWxmLCBzZXJ2ZXJfbmFtZT1Ob25lKToKICAgICAgICAgZW52ID0gc3VwZXIoTWFjUG9ydCwg
c2VsZikuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlcnZlcl9uYW1lKQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L21hY191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMjU1Mjgp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjX3VuaXR0ZXN0LnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0yNywyNSArMjcsMjQgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAKLWltcG9ydCB0aW1lCi0KIGZyb20gd2Via2l0cHkucG9ydC5tYWMgaW1wb3J0IE1hY1BvcnQK
IGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgZGFyd2luX3Rlc3RjYXNlCiBmcm9tIHdlYmtpdHB5
LnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5v
dXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCiBmcm9tIHdlYmtpdHB5LnRvb2wubW9j
a3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhl
Y3V0aXZlX21vY2sgaW1wb3J0IE1vY2tFeGVjdXRpdmUsIE1vY2tFeGVjdXRpdmUyLCBTY3JpcHRF
cnJvcgorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgogCiAKIGNs
YXNzIE1hY1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndpblRlc3QpOgogICAgIG9zX25hbWUgPSAn
bWFjJwotICAgIG9zX3ZlcnNpb24gPSAnbGlvbicKKyAgICBvc192ZXJzaW9uID0gVmVyc2lvbigx
MCwgNykKICAgICBwb3J0X25hbWUgPSAnbWFjLWxpb24nCiAgICAgcG9ydF9tYWtlciA9IE1hY1Bv
cnQKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb24oc2VsZik6CiAgICAgICAgIHBvcnQgPSBzZWxmLm1h
a2VfcG9ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LnZlcnNpb24oKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocG9ydC52ZXJzaW9uX25hbWUoKSkKIAogICAgIGRlZiB0
ZXN0X3ZlcnNpb25zKHNlbGYpOgogICAgICAgICAjIE5vdGU6IHRoZXNlIHRlc3RzIGRvbid0IG5l
ZWQgdG8gYmUgZXhoYXVzdGl2ZSBhcyBsb25nIGFzIHdlIGdldCBwYXRoIGNvdmVyYWdlLgpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHkJKHJldmlz
aW9uIDIyNTUyOCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNl
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIGNsYXNzIFRlc3RXZWJLaXRQb3J0
KFBvcnQpOgogCiBAY29udGV4dG1hbmFnZXIKIGRlZiBiaW5kX21vY2tfYXBwbGVfYWRkaXRpb25z
KCk6CisgICAgZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbl9uYW1lX21hcCBpbXBvcnQgVmVy
c2lvbk5hbWVNYXAKIAogICAgIGNsYXNzIE1vY2tBcHBsZUFkZGl0aW9ucyhvYmplY3QpOgogCkBA
IC05MywxMSArOTQsMjMgQEAgZGVmIGJpbmRfbW9ja19hcHBsZV9hZGRpdGlvbnMoKToKICAgICAg
ICAgZGVmIG1hY19vc19uYW1lKG5hbWUpOgogICAgICAgICAgICAgcmV0dXJuICdhZGQte30nLmZv
cm1hdChuYW1lKQogCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIHZlcnNpb25f
bmFtZV9tYXBwaW5nKHBsYXRmb3JtPU5vbmUpOgorICAgICAgICAgICAgcmVzdWx0ID0gVmVyc2lv
bk5hbWVNYXAocGxhdGZvcm0pCisgICAgICAgICAgICByZXN1bHQubWFwcGluZ1snaW50ZXJuYWwn
XSA9IHt9CisgICAgICAgICAgICBmb3IgcGxhdGZvcm0gaW4gcmVzdWx0Lm1hcHBpbmdbJ3B1Ymxp
YyddOgorICAgICAgICAgICAgICAgIHJlc3VsdC5tYXBwaW5nWydpbnRlcm5hbCddW3BsYXRmb3Jt
XSA9IHt9CisgICAgICAgICAgICAgICAgZm9yIG5hbWUsIHZlcnNpb24gaW4gcmVzdWx0Lm1hcHBp
bmdbJ3B1YmxpYyddW3BsYXRmb3JtXS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0Lm1hcHBpbmdbJ2ludGVybmFsJ11bcGxhdGZvcm1dWydhZGQtJyArIG5hbWVdID0gdmVy
c2lvbgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCiAgICAgIyBhcHBsZV9hZGRpdGlvbnMg
aXMgYSBtZW1vaXplZCBmdW5jdGlvbi4gVGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBmYWN0IGFuZCBt
YW5pcHVsYXRlIHRoZSBjYWNoZQogICAgICMgdG8gdGVtcG9yYXJpbHkgcmV0dXJuIGEgbW9ja2Vk
IHJlc3VsdAogICAgIGFwcGxlX2FkZGl0aW9ucy5fcmVzdWx0c19jYWNoZVsoKV0gPSBNb2NrQXBw
bGVBZGRpdGlvbnMKKyAgICBWZXJzaW9uTmFtZU1hcC5tYXAuX3Jlc3VsdHNfY2FjaGUgPSB7fQog
ICAgIHlpZWxkCiAgICAgYXBwbGVfYWRkaXRpb25zLl9yZXN1bHRzX2NhY2hlWygpXSA9IE5vbmUK
KyAgICBWZXJzaW9uTmFtZU1hcC5tYXAuX3Jlc3VsdHNfY2FjaGUgPSB7fQogCiAKIGNsYXNzIFBv
cnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvdGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvdGVzdC5weQkocmV2aXNpb24gMjI1NTI4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L3Rlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwxMiBAQAogIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KIAotaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIAogZnJvbSB3
ZWJraXRweS5wb3J0IGltcG9ydCBQb3J0LCBEcml2ZXIsIERyaXZlck91dHB1dAogZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENv
bmZpZ3VyYXRpb24KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sg
aW1wb3J0IE1vY2tGaWxlU3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hs
b2dzIGltcG9ydCBDcmFzaExvZ3MKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9t
YXAgaW1wb3J0IFZlcnNpb25OYW1lTWFwCiAKIAogIyBUaGlzIHNldHMgYmFzaWMgZXhwZWN0YXRp
b25zIGZvciBhIHRlc3QuIEVhY2ggaW5kaXZpZHVhbCBleHBlY3RhdGlvbgpAQCAtMjQzLDcgKzI0
Miw3IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDM0CiAKICAgICAjIEZvciB0ZXN0aW5nIHRl
c3QgYXJlIHByb3Blcmx5IGluY2x1ZGVkIGZyb20gcGxhdGZvcm0gZGlyZWN0b3JpZXMuCiAgICAg
dGVzdHMuYWRkKCdwbGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2h0dHAvdGVzdC5odG1sJykKLSAg
ICB0ZXN0cy5hZGQoJ3BsYXRmb3JtL3Rlc3Qtd2luLXdpbjcvaHR0cC90ZXN0Lmh0bWwnKQorICAg
IHRlc3RzLmFkZCgncGxhdGZvcm0vdGVzdC13aW4tN3NwMC9odHRwL3Rlc3QuaHRtbCcpCiAKICAg
ICAjIEZvciAtLW5vLWh0dHAgdGVzdHMsIHRlc3QgdGhhdCBwbGF0Zm9ybSBzcGVjaWZpYyBIVFRQ
IHRlc3RzIGFyZSBwcm9wZXJseSBza2lwcGVkLgogICAgIHRlc3RzLmFkZCgncGxhdGZvcm0vdGVz
dC1zbm93LWxlb3BhcmQvaHR0cC90ZXN0Lmh0bWwnKQpAQCAtMzU3LDcgKzM1Niw3IEBAIGNsYXNz
IFRlc3RQb3J0KFBvcnQpOgogICAgIEFMTF9CQVNFTElORV9WQVJJQU5UUyA9ICgKICAgICAgICAg
J3Rlc3QtbGludXgteDg2XzY0JywKICAgICAgICAgJ3Rlc3QtbWFjLXNub3dsZW9wYXJkJywgJ3Rl
c3QtbWFjLWxlb3BhcmQnLAotICAgICAgICAndGVzdC13aW4tdmlzdGEnLCAndGVzdC13aW4td2lu
NycsICd0ZXN0LXdpbi14cCcsCisgICAgICAgICd0ZXN0LXdpbi12aXN0YScsICd0ZXN0LXdpbi03
c3AwJywgJ3Rlc3Qtd2luLXhwJywKICAgICApCiAKICAgICBAY2xhc3NtZXRob2QKQEAgLTM3Mywy
MSArMzcyLDE2IEBAIGNsYXNzIFRlc3RQb3J0KFBvcnQpOgogICAgICAgICBzZWxmLl9leHBlY3Rh
dGlvbnNfcGF0aCA9IExBWU9VVF9URVNUX0RJUiArICcvcGxhdGZvcm0vdGVzdC9UZXN0RXhwZWN0
YXRpb25zJwogICAgICAgICBzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSA9IE5vbmUKIAotICAgICAg
ICBzZWxmLl9vcGVyYXRpbmdfc3lzdGVtID0gJ21hYycKLSAgICAgICAgaWYgc2VsZi5fbmFtZS5z
dGFydHN3aXRoKCd0ZXN0LXdpbicpOgotICAgICAgICAgICAgc2VsZi5fb3BlcmF0aW5nX3N5c3Rl
bSA9ICd3aW4nCi0gICAgICAgIGVsaWYgc2VsZi5fbmFtZS5zdGFydHN3aXRoKCd0ZXN0LWxpbnV4
Jyk6Ci0gICAgICAgICAgICBzZWxmLl9vcGVyYXRpbmdfc3lzdGVtID0gJ2xpbnV4JwotCi0gICAg
ICAgIHZlcnNpb25fbWFwID0gewotICAgICAgICAgICAgJ3Rlc3Qtd2luLXhwJzogJ3hwJywKLSAg
ICAgICAgICAgICd0ZXN0LXdpbi13aW43JzogJ3dpbjcnLAotICAgICAgICAgICAgJ3Rlc3Qtd2lu
LXZpc3RhJzogJ3Zpc3RhJywKLSAgICAgICAgICAgICd0ZXN0LW1hYy1sZW9wYXJkJzogJ2xlb3Bh
cmQnLAotICAgICAgICAgICAgJ3Rlc3QtbWFjLXNub3dsZW9wYXJkJzogJ3Nub3dsZW9wYXJkJywK
LSAgICAgICAgICAgICd0ZXN0LWxpbnV4LXg4Nl82NCc6ICdsdWNpZCcsCi0gICAgICAgIH0KLSAg
ICAgICAgc2VsZi5fdmVyc2lvbiA9IHZlcnNpb25fbWFwW3NlbGYuX25hbWVdCisgICAgICAgIHNl
bGYuX29wZXJhdGluZ19zeXN0ZW0gPSBzZWxmLl9uYW1lLnNwbGl0KCctJylbMV0KKyAgICAgICAg
aWYgc2VsZi5fb3BlcmF0aW5nX3N5c3RlbSA9PSAnbGludXgnOgorICAgICAgICAgICAgc2VsZi5f
b3NfdmVyc2lvbiA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX29zX3Zl
cnNpb24gPSBWZXJzaW9uTmFtZU1hcC5tYXAoc2VsZi5ob3N0LnBsYXRmb3JtKS5mcm9tX25hbWUo
c2VsZi5fbmFtZS5zcGxpdCgnLScpWzJdKVsxXQorCisgICAgZGVmIHZlcnNpb25fbmFtZShzZWxm
KToKKyAgICAgICAgaWYgc2VsZi5fb3NfdmVyc2lvbiBpcyBOb25lOgorICAgICAgICAgICAgcmV0
dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIFZlcnNpb25OYW1lTWFwLm1hcChzZWxmLmhvc3QucGxh
dGZvcm0pLnRvX25hbWUoc2VsZi5fb3NfdmVyc2lvbiwgcGxhdGZvcm09c2VsZi5fb3BlcmF0aW5n
X3N5c3RlbSwgdGFibGU9J3B1YmxpYycpCiAKICAgICBkZWYgZGVmYXVsdF9waXhlbF90ZXN0cyhz
ZWxmKToKICAgICAgICAgcmV0dXJuIFRydWUKQEAgLTQwMSwxMCArMzk1LDEwIEBAIGNsYXNzIFRl
c3RQb3J0KFBvcnQpOgogICAgICAgICBzZWFyY2hfcGF0aHMgPSB7CiAgICAgICAgICAgICAndGVz
dC1tYWMtc25vd2xlb3BhcmQnOiBbJ3Rlc3QtbWFjLXNub3dsZW9wYXJkJ10sCiAgICAgICAgICAg
ICAndGVzdC1tYWMtbGVvcGFyZCc6IFsndGVzdC1tYWMtbGVvcGFyZCcsICd0ZXN0LW1hYy1zbm93
bGVvcGFyZCddLAotICAgICAgICAgICAgJ3Rlc3Qtd2luLXdpbjcnOiBbJ3Rlc3Qtd2luLXdpbjcn
XSwKLSAgICAgICAgICAgICd0ZXN0LXdpbi12aXN0YSc6IFsndGVzdC13aW4tdmlzdGEnLCAndGVz
dC13aW4td2luNyddLAotICAgICAgICAgICAgJ3Rlc3Qtd2luLXhwJzogWyd0ZXN0LXdpbi14cCcs
ICd0ZXN0LXdpbi12aXN0YScsICd0ZXN0LXdpbi13aW43J10sCi0gICAgICAgICAgICAndGVzdC1s
aW51eC14ODZfNjQnOiBbJ3Rlc3QtbGludXgnLCAndGVzdC13aW4td2luNyddLAorICAgICAgICAg
ICAgJ3Rlc3Qtd2luLTdzcDAnOiBbJ3Rlc3Qtd2luLTdzcDAnXSwKKyAgICAgICAgICAgICd0ZXN0
LXdpbi12aXN0YSc6IFsndGVzdC13aW4tdmlzdGEnLCAndGVzdC13aW4tN3NwMCddLAorICAgICAg
ICAgICAgJ3Rlc3Qtd2luLXhwJzogWyd0ZXN0LXdpbi14cCcsICd0ZXN0LXdpbi12aXN0YScsICd0
ZXN0LXdpbi03c3AwJ10sCisgICAgICAgICAgICAndGVzdC1saW51eC14ODZfNjQnOiBbJ3Rlc3Qt
bGludXgnXSwKICAgICAgICAgfQogICAgICAgICByZXR1cm4gW3NlbGYuX3dlYmtpdF9iYXNlbGlu
ZV9wYXRoKGQpIGZvciBkIGluIHNlYXJjaF9wYXRoc1tzZWxmLm5hbWUoKV1dCiAKQEAgLTUxNCw3
ICs1MDgsNyBAQCBjbGFzcyBUZXN0UG9ydChQb3J0KToKICAgICAgICAgICAgICAgICAoJ3Nub3ds
ZW9wYXJkJywgJ3g4NicpLAogICAgICAgICAgICAgICAgICgneHAnLCAneDg2JyksCiAgICAgICAg
ICAgICAgICAgKCd2aXN0YScsICd4ODYnKSwKLSAgICAgICAgICAgICAgICAoJ3dpbjcnLCAneDg2
JyksCisgICAgICAgICAgICAgICAgKCc3c3AwJywgJ3g4NicpLAogICAgICAgICAgICAgICAgICgn
bHVjaWQnLCAneDg2JyksCiAgICAgICAgICAgICAgICAgKCdsdWNpZCcsICd4ODZfNjQnKSkKIApA
QCAtNTIzLDcgKzUxNyw3IEBAIGNsYXNzIFRlc3RQb3J0KFBvcnQpOgogCiAgICAgZGVmIGNvbmZp
Z3VyYXRpb25fc3BlY2lmaWVyX21hY3JvcyhzZWxmKToKICAgICAgICAgIiIiVG8gYXZvaWQgc3Vy
cHJpc2VzIHdoZW4gaW50cm9kdWNpbmcgbmV3IG1hY3JvcywgdGhlc2UgYXJlIGludGVudGlvbmFs
bHkgZml4ZWQgaW4gdGltZS4iIiIKLSAgICAgICAgcmV0dXJuIHsnbWFjJzogWydsZW9wYXJkJywg
J3Nub3dsZW9wYXJkJ10sICd3aW4nOiBbJ3hwJywgJ3Zpc3RhJywgJ3dpbjcnXSwgJ2xpbnV4Jzog
WydsdWNpZCddfQorICAgICAgICByZXR1cm4geydtYWMnOiBbJ2xlb3BhcmQnLCAnc25vd2xlb3Bh
cmQnXSwgJ3dpbic6IFsneHAnLCAndmlzdGEnLCAnN3NwMCddLCAnbGludXgnOiBbJ2x1Y2lkJ119
CiAKICAgICBkZWYgYWxsX2Jhc2VsaW5lX3ZhcmlhbnRzKHNlbGYpOgogICAgICAgICByZXR1cm4g
c2VsZi5BTExfQkFTRUxJTkVfVkFSSUFOVFMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC93aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dp
bi5weQkocmV2aXNpb24gMjI1NTI4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dp
bi5weQkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTAgQEAgaW1wb3J0IHRpbWUKIAogZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAotZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IsIEV4
ZWN1dGl2ZQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhl
Y3V0aXZlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ucGF0aCBpbXBvcnQgYWJzcGF0aF90
b191cmksIGN5Z3BhdGgKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNp
b24KK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFZlcnNpb25O
YW1lTWFwCiBmcm9tIHdlYmtpdHB5LnBvcnQuYXBwbGUgaW1wb3J0IEFwcGxlUG9ydAogZnJvbSB3
ZWJraXRweS5wb3J0LmNvbmZpZyBpbXBvcnQgYXBwbGVfYWRkaXRpb25zCiAKQEAgLTU1LDcgKzU3
LDggQEAgZXhjZXB0IEltcG9ydEVycm9yOgogY2xhc3MgV2luUG9ydChBcHBsZVBvcnQpOgogICAg
IHBvcnRfbmFtZSA9ICJ3aW4iCiAKLSAgICBWRVJTSU9OX0ZBTExCQUNLX09SREVSID0gWyJ3aW4t
eHAiLCAid2luLXZpc3RhIiwgIndpbi03c3AwIiwgIndpbi13aW4xMCIsICJ3aW4iXQorICAgIFZF
UlNJT05fTUlOID0gVmVyc2lvbig1LCAxKQorICAgIFZFUlNJT05fTUFYID0gVmVyc2lvbigxMCkK
IAogICAgIEFSQ0hJVEVDVFVSRVMgPSBbJ3g4NicsICd4ODZfNjQnXQogCkBAIC04Niw2ICs4OSwx
MyBAQCBjbGFzcyBXaW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgcHJldmlvdXNfZXJyb3JfcmVwb3J0
aW5nX3ZhbHVlcyA9IHt9CiAgICAgcHJldmlvdXNfd293NjRfZXJyb3JfcmVwb3J0aW5nX3ZhbHVl
cyA9IHt9CiAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJn
cyk6CisgICAgICAgIEFwcGxlUG9ydC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoq
a3dhcmdzKQorICAgICAgICBpZiBwb3J0X25hbWUuc3BsaXQoJy0nKSA+IDE6CisgICAgICAgICAg
ICBzZWxmLl9vc192ZXJzaW9uID0gVmVyc2lvbk5hbWVNYXAubWFwKGhvc3QucGxhdGZvcm0pLmZy
b21fbmFtZShwb3J0X25hbWUuc3BsaXQoJy0nKVsxXSlbMV0KKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHNlbGYuX29zX3ZlcnNpb24gPSBzZWxmLmhvc3QucGxhdGZvcm0ub3NfdmVyc2lvbgor
CiAgICAgZGVmIGRvX3RleHRfcmVzdWx0c19kaWZmZXIoc2VsZiwgZXhwZWN0ZWRfdGV4dCwgYWN0
dWFsX3RleHQpOgogICAgICAgICAjIFNhbml0eSB3YXMgcmVzdG9yZWQgaW4gV0syLCBzbyB3ZSBk
b24ndCBuZWVkIHRoaXMgaGFjayB0aGVyZS4KICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3
ZWJraXRfdGVzdF9ydW5uZXInKToKQEAgLTEwMSwxMSArMTExLDE1IEBAIGNsYXNzIFdpblBvcnQo
QXBwbGVQb3J0KToKICAgICAgICAgcmV0dXJuIGV4cGVjdGVkX3RleHQgIT0gYWN0dWFsX3RleHQK
IAogICAgIGRlZiBkZWZhdWx0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgotICAgICAgICBu
YW1lID0gc2VsZi5fbmFtZS5yZXBsYWNlKCctd2syJywgJycpCi0gICAgICAgIGlmIG5hbWUuZW5k
c3dpdGgoc2VsZi5GVVRVUkVfVkVSU0lPTik6Ci0gICAgICAgICAgICBmYWxsYmFja19uYW1lcyA9
IFtzZWxmLnBvcnRfbmFtZV0KKyAgICAgICAgdmVyc2lvbl9uYW1lX21hcCA9IFZlcnNpb25OYW1l
TWFwLm1hcChzZWxmLmhvc3QucGxhdGZvcm0pCisgICAgICAgIGlmIHNlbGYuX29zX3ZlcnNpb24g
PCBzZWxmLlZFUlNJT05fTUlOIG9yIHNlbGYuX29zX3ZlcnNpb24gPiBzZWxmLlZFUlNJT05fTUFY
OgorICAgICAgICAgICAgZmFsbGJhY2tfdmVyc2lvbnMgPSBbc2VsZi5fb3NfdmVyc2lvbl0KICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzID0gc2VsZi5WRVJTSU9OX0ZB
TExCQUNLX09SREVSW3NlbGYuVkVSU0lPTl9GQUxMQkFDS19PUkRFUi5pbmRleChuYW1lKTotMV0g
KyBbc2VsZi5wb3J0X25hbWVdCisgICAgICAgICAgICBzb3J0ZWRfdmVyc2lvbnMgPSBzb3J0ZWQo
dmVyc2lvbl9uYW1lX21hcC5tYXBwaW5nWydwdWJsaWMnXVtzZWxmLnBvcnRfbmFtZV0udmFsdWVz
KCkpCisgICAgICAgICAgICBmYWxsYmFja192ZXJzaW9ucyA9IHNvcnRlZF92ZXJzaW9uc1tzb3J0
ZWRfdmVyc2lvbnMuaW5kZXgoc2VsZi5fb3NfdmVyc2lvbik6XQorICAgICAgICBmYWxsYmFja19u
YW1lcyA9IFsnd2luLScgKyB2ZXJzaW9uX25hbWVfbWFwLnRvX25hbWUodmVyc2lvbiwgcGxhdGZv
cm09c2VsZi5wb3J0X25hbWUsIHRhYmxlPSdwdWJsaWMnKS5sb3dlcigpLnJlcGxhY2UoJyAnLCAn
JykgZm9yIHZlcnNpb24gaW4gZmFsbGJhY2tfdmVyc2lvbnNdCisgICAgICAgIGZhbGxiYWNrX25h
bWVzLmFwcGVuZCgnd2luJykKKwogICAgICAgICAjIEZJWE1FOiBUaGUgQXBwbGVXaW4gcG9ydCBm
YWxscyBiYWNrIHRvIEFwcGxlTWFjIGZvciBzb21lIHJlc3VsdHMuICBFdmVudHVhbGx5IHdlJ2xs
IGhhdmUgYSBzaGFyZWQgJ2FwcGxlJyBwb3J0LgogICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24o
J3dlYmtpdF90ZXN0X3J1bm5lcicpOgogICAgICAgICAgICAgZmFsbGJhY2tfbmFtZXMuaW5zZXJ0
KDAsICd3aW4td2syJykKQEAgLTQzNSwxNyArNDQ5LDE1IEBAIGNsYXNzIFdpblBvcnQoQXBwbGVQ
b3J0KToKIGNsYXNzIFdpbkNhaXJvUG9ydChXaW5Qb3J0KToKICAgICBwb3J0X25hbWUgPSAid2lu
Y2Fpcm8iCiAKLSAgICBWRVJTSU9OX0ZBTExCQUNLX09SREVSID0gWyJ3aW5jYWlyby14cCIsICJ3
aW5jYWlyby12aXN0YSIsICJ3aW5jYWlyby03c3AwIiwgIndpbmNhaXJvLXdpbjEwIiwgIndpbmNh
aXJvIl0KLQogICAgIGRlZiBkZWZhdWx0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgotICAg
ICAgICBuYW1lID0gc2VsZi5fbmFtZS5yZXBsYWNlKCctd2syJywgJycpCi0gICAgICAgIGlmIG5h
bWUuZW5kc3dpdGgoc2VsZi5GVVRVUkVfVkVSU0lPTik6Ci0gICAgICAgICAgICBmYWxsYmFja19u
YW1lcyA9IFtzZWxmLnBvcnRfbmFtZV0KKyAgICAgICAgdmVyc2lvbl9uYW1lX21hcCA9IFZlcnNp
b25OYW1lTWFwLm1hcChzZWxmLmhvc3QucGxhdGZvcm0pCisgICAgICAgIGlmIHNlbGYuX29zX3Zl
cnNpb24gPCBzZWxmLlZFUlNJT05fTUlOIG9yIHNlbGYuX29zX3ZlcnNpb24gPiBzZWxmLlZFUlNJ
T05fTUFYOgorICAgICAgICAgICAgZmFsbGJhY2tfdmVyc2lvbnMgPSBbc2VsZi5fb3NfdmVyc2lv
bl0KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzID0gc2VsZi5WRVJT
SU9OX0ZBTExCQUNLX09SREVSW3NlbGYuVkVSU0lPTl9GQUxMQkFDS19PUkRFUi5pbmRleChuYW1l
KTotMV0gKyBbc2VsZi5wb3J0X25hbWVdCisgICAgICAgICAgICBzb3J0ZWRfdmVyc2lvbnMgPSBz
b3J0ZWQodmVyc2lvbl9uYW1lX21hcC5tYXBwaW5nWydwdWJsaWMnXVtzZWxmLnBvcnRfbmFtZV0u
dmFsdWVzKCkpCisgICAgICAgICAgICBmYWxsYmFja192ZXJzaW9ucyA9IHNvcnRlZF92ZXJzaW9u
c1tzb3J0ZWRfdmVyc2lvbnMuaW5kZXgoc2VsZi5fb3NfdmVyc2lvbik6XQorICAgICAgICBmYWxs
YmFja19uYW1lcyA9IFsnd2luLScgKyB2ZXJzaW9uX25hbWVfbWFwLnRvX25hbWUodmVyc2lvbiwg
cGxhdGZvcm09c2VsZi5wb3J0X25hbWUsIHRhYmxlPSdwdWJsaWMnKS5sb3dlcigpLnJlcGxhY2Uo
JyAnLCAnJylmb3IgdmVyc2lvbiBpbiBmYWxsYmFja192ZXJzaW9uc10KKwogICAgICAgICBmYWxs
YmFja19uYW1lcy5hcHBlbmQoJ3dpbicpCiAgICAgICAgIGZhbGxiYWNrX25hbWVzLmFwcGVuZCgn
bWFjJykKICAgICAgICAgcmV0dXJuIG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgZmFs
bGJhY2tfbmFtZXMpCi0KLSAgICBkZWYgX2Z1dHVyZV9wb3J0X25hbWUoc2VsZik6Ci0gICAgICAg
IHJldHVybiBzZWxmLnBvcnRfbmFtZSArICItIiArIHNlbGYuRlVUVVJFX1ZFUlNJT04KSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW5fdW5pdHRlc3QucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbl91bml0dGVzdC5weQkocmV2aXNpb24g
MjI1NTI4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbl91bml0dGVzdC5weQko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLmV4ZWN1dGl2ZV9tb2NrIGltcG9ydCBNb2NrRXhlY3V0aXZlCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQogZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QK
K2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KK2Zyb20gd2Via2l0
cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFZlcnNpb25OYW1lTWFwCiBmcm9tIHdl
YmtpdHB5LnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UKIGZyb20gd2Via2l0cHkucG9ydC53aW4g
aW1wb3J0IFdpblBvcnQKIGZyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09w
dGlvbnMKQEAgLTM2LDcgKzM4LDcgQEAgZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9y
dCBNb2NrTwogCiBjbGFzcyBXaW5Qb3J0VGVzdChwb3J0X3Rlc3RjYXNlLlBvcnRUZXN0Q2FzZSk6
CiAgICAgb3NfbmFtZSA9ICd3aW4nCi0gICAgb3NfdmVyc2lvbiA9ICd4cCcKKyAgICBvc192ZXJz
aW9uID0gVmVyc2lvbig1LCAxKQogICAgIHBvcnRfbmFtZSA9ICd3aW4teHAnCiAgICAgcG9ydF9t
YWtlciA9IFdpblBvcnQKIApAQCAtNTgsMjQgKzYwLDI0IEBAIGNsYXNzIFdpblBvcnRUZXN0KHBv
cnRfdGVzdGNhc2UuUG9ydFRlc3QKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmJhc2Vs
aW5lX3NlYXJjaF9wYXRoKCksIGFic29sdXRlX3NlYXJjaF9wYXRocykKIAogICAgIGRlZiB0ZXN0
X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgotICAgICAgICBzZWxmLl9hc3NlcnRfc2VhcmNo
X3BhdGgoWyd3aW4teHAnLCAnd2luLXZpc3RhJywgJ3dpbi03c3AwJywgJ3dpbi13aW4xMCcsICd3
aW4nLCAnbWFjJ10sICd4cCcpCi0gICAgICAgIHNlbGYuX2Fzc2VydF9zZWFyY2hfcGF0aChbJ3dp
bi12aXN0YScsICd3aW4tN3NwMCcsICd3aW4td2luMTAnLCAnd2luJywgJ21hYyddLCAndmlzdGEn
KQotICAgICAgICBzZWxmLl9hc3NlcnRfc2VhcmNoX3BhdGgoWyd3aW4tN3NwMCcsICd3aW4td2lu
MTAnLCAnd2luJywgJ21hYyddLCAnN3NwMCcpCi0KLSAgICAgICAgc2VsZi5fYXNzZXJ0X3NlYXJj
aF9wYXRoKFsnd2luLXdrMicsICd3aW4teHAnLCAnd2luLXZpc3RhJywgJ3dpbi03c3AwJywgJ3dp
bi13aW4xMCcsICd3aW4nLCAnbWFjLXdrMicsICdtYWMnXSwgJ3hwJywgdXNlX3dlYmtpdDI9VHJ1
ZSkKLSAgICAgICAgc2VsZi5fYXNzZXJ0X3NlYXJjaF9wYXRoKFsnd2luLXdrMicsICd3aW4tdmlz
dGEnLCAnd2luLTdzcDAnLCAnd2luLXdpbjEwJywgJ3dpbicsICdtYWMtd2syJywgJ21hYyddLCAn
dmlzdGEnLCB1c2Vfd2Via2l0Mj1UcnVlKQotICAgICAgICBzZWxmLl9hc3NlcnRfc2VhcmNoX3Bh
dGgoWyd3aW4td2syJywgJ3dpbi03c3AwJywgJ3dpbi13aW4xMCcsICd3aW4nLCAnbWFjLXdrMics
ICdtYWMnXSwgJzdzcDAnLCB1c2Vfd2Via2l0Mj1UcnVlKQorICAgICAgICBzZWxmLl9hc3NlcnRf
c2VhcmNoX3BhdGgoWyd3aW4teHAnLCAnd2luLXZpc3RhJywgJ3dpbi03c3AwJywgJ3dpbi04Jywg
J3dpbi04LjEnLCAnd2luLXdpbjEwJywgJ3dpbicsICdtYWMnXSwgVmVyc2lvbig1LCAxKSkKKyAg
ICAgICAgc2VsZi5fYXNzZXJ0X3NlYXJjaF9wYXRoKFsnd2luLXZpc3RhJywgJ3dpbi03c3AwJywg
J3dpbi04JywgJ3dpbi04LjEnLCAnd2luLXdpbjEwJywgJ3dpbicsICdtYWMnXSwgVmVyc2lvbig2
KSkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X3NlYXJjaF9wYXRoKFsnd2luLTdzcDAnLCAnd2luLTgn
LCAnd2luLTguMScsICd3aW4td2luMTAnLCAnd2luJywgJ21hYyddLCBWZXJzaW9uKDYsIDEsIDc2
MDApKQorCisgICAgICAgIHNlbGYuX2Fzc2VydF9zZWFyY2hfcGF0aChbJ3dpbi13azInLCAnd2lu
LXhwJywgJ3dpbi12aXN0YScsICd3aW4tN3NwMCcsICd3aW4tOCcsICd3aW4tOC4xJywgJ3dpbi13
aW4xMCcsICd3aW4nLCAnbWFjLXdrMicsICdtYWMnXSwgVmVyc2lvbig1LCAxKSwgdXNlX3dlYmtp
dDI9VHJ1ZSkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X3NlYXJjaF9wYXRoKFsnd2luLXdrMicsICd3
aW4tdmlzdGEnLCAnd2luLTdzcDAnLCAnd2luLTgnLCAnd2luLTguMScsICd3aW4td2luMTAnLCAn
d2luJywgJ21hYy13azInLCAnbWFjJ10sIFZlcnNpb24oNiksIHVzZV93ZWJraXQyPVRydWUpCisg
ICAgICAgIHNlbGYuX2Fzc2VydF9zZWFyY2hfcGF0aChbJ3dpbi13azInLCAnd2luLTdzcDAnLCAn
d2luLTgnLCAnd2luLTguMScsICd3aW4td2luMTAnLCAnd2luJywgJ21hYy13azInLCAnbWFjJ10s
IFZlcnNpb24oNiwgMSwgNzYwMCksIHVzZV93ZWJraXQyPVRydWUpCiAKICAgICBkZWYgX2Fzc2Vy
dF92ZXJzaW9uKHNlbGYsIHBvcnRfbmFtZSwgZXhwZWN0ZWRfdmVyc2lvbik6CiAgICAgICAgIGhv
c3QgPSBNb2NrU3lzdGVtSG9zdChvc19uYW1lPSd3aW4nLCBvc192ZXJzaW9uPWV4cGVjdGVkX3Zl
cnNpb24pCiAgICAgICAgIHBvcnQgPSBXaW5Qb3J0KGhvc3QsIHBvcnRfbmFtZT1wb3J0X25hbWUp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC52ZXJzaW9uKCksIGV4cGVjdGVkX3ZlcnNp
b24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC52ZXJzaW9uX25hbWUoKSwgVmVyc2lv
bk5hbWVNYXAubWFwKCkudG9fbmFtZShleHBlY3RlZF92ZXJzaW9uLCBwbGF0Zm9ybT0nd2luJywg
dGFibGU9J3B1YmxpYycpKQogCiAgICAgZGVmIHRlc3RfdmVyc2lvbnMoc2VsZik6Ci0gICAgICAg
IHNlbGYuX2Fzc2VydF92ZXJzaW9uKCd3aW4teHAnLCAneHAnKQotICAgICAgICBzZWxmLl9hc3Nl
cnRfdmVyc2lvbignd2luLXZpc3RhJywgJ3Zpc3RhJykKLSAgICAgICAgc2VsZi5fYXNzZXJ0X3Zl
cnNpb24oJ3dpbi03c3AwJywgJzdzcDAnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3Nl
cnRpb25FcnJvciwgc2VsZi5fYXNzZXJ0X3ZlcnNpb24sICd3aW4tbWUnLCAneHAnKQorICAgICAg
ICBzZWxmLl9hc3NlcnRfdmVyc2lvbignd2luLXhwJywgVmVyc2lvbig1LCAxKSkKKyAgICAgICAg
c2VsZi5fYXNzZXJ0X3ZlcnNpb24oJ3dpbi12aXN0YScsIFZlcnNpb24oNikpCisgICAgICAgIHNl
bGYuX2Fzc2VydF92ZXJzaW9uKCd3aW4tN3NwMCcsIFZlcnNpb24oNiwgMSwgNzYwMCkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBzZWxmLl9hc3NlcnRfdmVyc2lv
biwgJ3dpbi1tZScsIFZlcnNpb24oNSwgMSkpCiAKICAgICBkZWYgdGVzdF9jb21wYXJlX3RleHQo
c2VsZik6CiAgICAgICAgIGV4cGVjdGVkID0gIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRD
aGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvblxuZm9v
XG5FRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRD
aGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb25cbiIKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC93cGUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L3dwZS5weQkocmV2aXNpb24gMjI1NTI4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L3dwZS5weQkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBjbGFzcyBXUEVQb3J0KFBv
cnQpOgogICAgIGRlZiBfZ2VuZXJhdGVfYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMoc2VsZik6CiAg
ICAgICAgIGNvbmZpZ3VyYXRpb25zID0gW10KICAgICAgICAgZm9yIGJ1aWxkX3R5cGUgaW4gc2Vs
Zi5BTExfQlVJTERfVFlQRVM6Ci0gICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVz
dENvbmZpZ3VyYXRpb24odmVyc2lvbj1zZWxmLl92ZXJzaW9uLCBhcmNoaXRlY3R1cmU9J3g4Nics
IGJ1aWxkX3R5cGU9YnVpbGRfdHlwZSkpCisgICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBl
bmQoVGVzdENvbmZpZ3VyYXRpb24odmVyc2lvbj1zZWxmLnZlcnNpb25fbmFtZSgpLCBhcmNoaXRl
Y3R1cmU9J3g4NicsIGJ1aWxkX3R5cGU9YnVpbGRfdHlwZSkpCiAgICAgICAgIHJldHVybiBjb25m
aWd1cmF0aW9ucwogCiAgICAgZGVmIF9wYXRoX3RvX2RyaXZlcihzZWxmKToKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzX3Vu
aXR0ZXN0LnB5CShyZXZpc2lvbiAyMjU1MjgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvcXVlcmllc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMTg3LDcg
KzE4Nyw3IEBAIGNsYXNzIFByaW50RXhwZWN0YXRpb25zVGVzdCh1bml0dGVzdC5UZXMKICAgICAg
ICAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwgWyBJbWFnZU9u
bHlGYWlsdXJlIF1cbicKICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVk
L3RleHQuaHRtbCBbIEZhaWx1cmUgXVxuJwogICAgICAgICAgICAgICAgICAgICAgICAnXG4nCi0g
ICAgICAgICAgICAgICAgICAgICAgICcvLyBGb3IgdGVzdC13aW4td2luN1xuJworICAgICAgICAg
ICAgICAgICAgICAgICAnLy8gRm9yIHRlc3Qtd2luLTdzcDBcbicKICAgICAgICAgICAgICAgICAg
ICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF1c
bicKICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL3RleHQuaHRtbCBb
IEZhaWx1cmUgXVxuJwogICAgICAgICAgICAgICAgICAgICAgICAnXG4nCkBAIC0yODEsNyArMjgx
LDcgQEAgY2xhc3MgUHJpbnRCYXNlbGluZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3Bhc3Nlcy90ZXh0LWV4cGVjdGVkLnBuZ1xuJwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3Bhc3Nlcy90ZXh0LWV4cGVjdGVkLnR4dFxuJwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ1xuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8vIEZv
ciB0ZXN0LXdpbi13aW43XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnLy8gRm9yIHRl
c3Qtd2luLTdzcDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzZXMvdGV4dC1l
eHBlY3RlZC5wbmdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzZXMvdGV4dC1l
eHBlY3RlZC50eHRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXMucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXVlcy5weQkocmV2aXNp
b24gMjI1NTI4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXVl
cy5weQkod29ya2luZyBjb3B5KQpAQCAtMzUsMTQgKzM1LDEyIEBAIGltcG9ydCBzeXMKIGltcG9y
dCB0aW1lCiBpbXBvcnQgdHJhY2ViYWNrCiAKLWZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1l
CiBmcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbgogZnJvbSBTdHJpbmdJTyBpbXBvcnQg
U3RyaW5nSU8KIAogZnJvbSB3ZWJraXRweS5jb21tb24uY29uZmlnLmNvbW1pdHRlcnZhbGlkYXRv
ciBpbXBvcnQgQ29tbWl0dGVyVmFsaWRhdG9yCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jb25maWcu
cG9ydHMgaW1wb3J0IERlcHJlY2F0ZWRQb3J0CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVn
emlsbGEgaW1wb3J0IEF0dGFjaG1lbnQKLWZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5zdGF0dXNz
ZXJ2ZXIgaW1wb3J0IFN0YXR1c1NlcnZlcgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4
ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKIGZyb20gd2Via2l0cHkudG9vbC5ib3QuYm90aW5m
byBpbXBvcnQgQm90SW5mbwogZnJvbSB3ZWJraXRweS50b29sLmJvdC5jb21taXRxdWV1ZXRhc2sg
aW1wb3J0IENvbW1pdFF1ZXVlVGFzaywgQ29tbWl0UXVldWVUYXNrRGVsZWdhdGUKQEAgLTI3Miw3
ICsyNzAsNyBAQCBjbGFzcyBQYXRjaFByb2Nlc3NpbmdRdWV1ZShBYnN0cmFjdFBhdGNoCiAgICAg
ZGVmIF9uZXdfcG9ydF9uYW1lX2Zyb21fb2xkKHNlbGYsIHBvcnRfbmFtZSwgcGxhdGZvcm0pOgog
ICAgICAgICAjIEFwcGxlUG9ydC5kZXRlcm1pbmVfZnVsbF9wb3J0X25hbWUgYXNzZXJ0cyBpZiB0
aGUgbmFtZSBkb2Vzbid0IGluY2x1ZGUgdmVyc2lvbi4KICAgICAgICAgaWYgcG9ydF9uYW1lID09
ICdtYWMnOgotICAgICAgICAgICAgcmV0dXJuICdtYWMtJyArIHBsYXRmb3JtLm9zX3ZlcnNpb24K
KyAgICAgICAgICAgIHJldHVybiAnbWFjLScgKyBwbGF0Zm9ybS5vc192ZXJzaW9uX25hbWUoKS5s
b3dlcigpLnJlcGxhY2UoJyAnLCAnJykKICAgICAgICAgaWYgcG9ydF9uYW1lID09ICd3aW4nOgog
ICAgICAgICAgICAgcmV0dXJuICd3aW4tZnV0dXJlJwogICAgICAgICByZXR1cm4gcG9ydF9uYW1l
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329134</attachid>
            <date>2017-12-12 12:02:43 -0800</date>
            <delta_ts>2017-12-12 17:22:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179621-20171212120242.patch</filename>
            <type>text/plain</type>
            <size>71768</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNTc2MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEyMyBAQAorMjAxNy0xMi0xMSAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CisKKyAgICAgICAgd2Via2l0cHk6IEJldHRlciBuYW1lLXZlcnNpb24gbWFwcGluZyAoUGFy
dCAyKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5
NjIxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNTU4OTU4NT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3cgdGhhdCB3ZSBoYXZlIGEgY2VudHJh
bCBtYXBwaW5nIG9mIHZlcnNpb24gbnVtYmVycyB0byB2ZXJzaW9uIG5hbWVzLCB0aGlzCisgICAg
ICAgIG1hcHBpbmcgc2hvdWxkIGJlIHVzZWQgdG8gY29tcHV0ZSB2ZXJzaW9uIG5hbWVzLiBUaGlz
IHBhdGNoIHRyZWF0cyBwYXNzZXMgdmVyc2lvbnMKKyAgICAgICAgYXMgb2JqZWN0cywgb25seSBt
YXBwaW5nIHRoZW0gdG8gbmFtZXMgd2hlbiBzdHJpbmdzIGFyZSBuZWVkZWQuCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvLnB5OgorICAgICAg
ICAoUGxhdGZvcm1JbmZvLl9faW5pdF9fKTogU3RvcmUgb3NfdmVyc2lvbiBhcyBhIHZlcnNpb24g
b2JqZWN0IGluc3RlYWQgb2YgYSBzdHJpbmcuCisgICAgICAgIChQbGF0Zm9ybUluZm8ub3NfdmVy
c2lvbl9uYW1lKTogQ29udmVydCBvc192ZXJzaW9uIHRvIGEgc3RyaW5nIHRocm91Z2ggdGhlIFZl
cnNpb25OYW1lTWFwLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9w
bGF0Zm9ybWluZm9fbW9jay5weToKKyAgICAgICAgKE1vY2tQbGF0Zm9ybUluZm8uX19pbml0X18p
OiBTdG9yZSBvc192ZXJzaW9uIGFzIGEgdmVyc2lvbiBvYmplY3QuCisgICAgICAgIChNb2NrUGxh
dGZvcm1JbmZvLm9zX3ZlcnNpb25fbmFtZSk6IE1pcnJvciBQbGF0Zm9ybUluZm8uCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb191bml0dGVzdC5w
eToKKyAgICAgICAgKFRlc3RQbGF0Zm9ybUluZm8udGVzdF9yZWFsX2NvZGUpOiBPbmx5IE1hYyBh
bmQgV2luZG93cyBoYXZlIGRlZmluZWQgdmVyc2lvbiBvYmplY3RzLgorICAgICAgICAoVGVzdFBs
YXRmb3JtSW5mby50ZXN0X29zX3ZlcnNpb24pOiBEZWxldGVkLCB0aGlzIGJlaGF2aW9yIGlzIG5v
dyBtYW5hZ2VkIGJ5IFZlcnNpb25OYW1lTWFwLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3ZlcnNpb24ucHk6CisgICAgICAgIChWZXJzaW9uLl9fY21wX18pOiBBbGxvdyBhIHZl
cnNpb24gb2JqZWN0IHRvIGJlIGNvbXBhcmVkIHdpdGggJ05vbmUnLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXAucHk6CisgICAgICAgIChWZXJzaW9u
TmFtZU1hcC5tYXApOiBDaGVjayBmb3IgdGhlIGFwcGxlX2FkZGl0aW9ucyBWZXJzaW9uTmFtZU1h
cC4KKyAgICAgICAgKFZlcnNpb25OYW1lTWFwLl9faW5pdF9fKTogQWRkIGEgd2luY2Fpcm8gbWFw
cGluZywgdGhlIHNhbWUgYXMgdGhlIHdpbiBtYXBwaW5nLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3ZlcnNpb25fdW5pdHRlc3QucHk6CisgICAgICAgIChWZXJzaW9uVGVzdENh
c2UudGVzdF9jb21wYXJlX3ZlcnNpb25zKTogVGVzdCBjb21wYXJpbmcgYSB2ZXJzaW9uIG9iamVj
dCB0byAnTm9uZScuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9k
ZWxzL3Rlc3RfY29uZmlndXJhdGlvbi5weToKKyAgICAgICAgKFRlc3RDb25maWd1cmF0aW9uLl9f
aW5pdF9fKTogU3RyaXAgZm9ybWF0dGluZyBmcm9tIHZlcnNpb24gbmFtZS4gTm90ZSB0aGF0IHRo
aXMgb2JqZWN0IHN0aWxsCisgICAgICAgIGFjY2VwdHMgYSBzdHJpbmcgYmVjYXVzZSB0aGUgdmVy
c2lvbiBzdHJpbmcgaW1wbGljaXRseSBjb250YWlucyB0aGUgcGxhdGZvcm0gYXMgd2VsbC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9leHBlY3Rh
dGlvbnNfdW5pdHRlc3QucHk6IFdpbjcgc2hvdWxkIGJlIDdTUDAgYXMKKyAgICAgICAgaXQgaXMg
aW4gdGhlIFZlcnNpb25OYW1lTWFwLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9h
cHBsZS5weToKKyAgICAgICAgKEFwcGxlUG9ydCk6IFJlcGxhY2UgVkVSU0lPTl9GQUxMQkFDS19P
UkRFUiB3aXRoIGEgbWluaW11bSBhbmQgbWF4aW11bSB2ZXJzaW9uLiBUaGlzIGlzIHJlcXVpcmVk
CisgICAgICAgIGJlY2F1c2UgaXQgbWF5IGJlIHRoZSBjYXNlIHRoYXQgc2NyaXB0cyBhcmUgYXdh
cmUgb2YgbW9yZSB2ZXJzaW9ucyB0aGFuIHRoZSBwb3J0IGFjdHVhbGx5IHN1cHBvcnRzLgorICAg
ICAgICAoQXBwbGVQb3J0LmRldGVybWluZV9mdWxsX3BvcnRfbmFtZSk6IFVzZSB0aGUgaG9zdCBv
cGVyYXRpbmcgc3lzdGVtIHRvIGNvbXB1dGUgdGhlIGZ1bGwgcG9ydCBuYW1lLgorICAgICAgICAo
QXBwbGVQb3J0Ll9hbGxvd2VkX3ZlcnNpb25zKTogUmV0dXJuIGEgbGlzdCBvZiB2YWxpZCBwb3J0
IHZlcnNpb25zIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZQorICAgICAgICBWZXJzaW9uTmFtZU1h
cC4KKyAgICAgICAgKEFwcGxlUG9ydC5fZ2VuZXJhdGVfYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMp
OiBDb21wdXRlIGEgbGlzdCBvZiBjb25maWd1cmF0aW9ucyBieSBpdGVyYXRpbmcgdGhyb3VnaAor
ICAgICAgICBfYWxsb3dlZF92ZXJzaW9ucyBhbmQgY29udmVydGluZyBlYWNoIHZlcnNpb24gdG8g
YSBzdHJpbmcuCisgICAgICAgIChBcHBsZVBvcnQuX2FwcGxlX2Jhc2VsaW5lX3BhdGgpOiBSZXR1
cm4gYSBsYXlvdXQgdGVzdCBleHBlY3RhdGlvbiBkaXJlY3RvcnkgaW5zaWRlIGFwcGxlX2FkZGl0
aW9ucy4KKyAgICAgICAgKEFwcGxlUG9ydC5fc2tpcHBlZF9maWxlX3NlYXJjaF9wYXRocyk6IERl
bGV0ZWQuCisgICAgICAgIChBcHBsZVBvcnQuX2FsbG93ZWRfcG9ydF9uYW1lcyk6IERlbGV0ZWQu
CisgICAgICAgIChBcHBsZVBvcnQuX2Z1dHVyZV9wb3J0X25hbWUpOiBEZWxldGVkLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC5fX2luaXRf
Xyk6IFJlcGxhY2UgX3ZlcnNpb24gc3RyaW5nIHdpdGggX29zX3ZlcnNpb24gb2JqZWN0LgorICAg
ICAgICAoUG9ydC52ZXJzaW9uX25hbWUpOiBDb252ZXJ0IHZlcnNpb24gb2JqZWN0IHRvIHN0cmlu
Zy4KKyAgICAgICAgKFBvcnQudGVzdF9jb25maWd1cmF0aW9uKTogUGFzcyB2ZXJzaW9uIHN0cmlu
ZyB0byBUZXN0Q29uZmlndXJhdGlvbi4KKyAgICAgICAgKFBvcnQudmVyc2lvbik6IERlbGV0ZWQu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbl90ZXN0Y2FzZS5weToKKyAg
ICAgICAgKERhcndpblRlc3QuYXNzZXJ0X25hbWUpOiBDb252ZXJ0IGFuIG9zX3ZlcnNpb25fc3Ry
aW5nIHRvIGEgdmVyc2lvbiBvYmplY3QgYW5kIGNvbnN0cnVjdCBhIHBvcnQuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3RvcnlfdW5pdHRlc3QucHk6CisgICAgICAgIChGYWN0
b3J5VGVzdC50ZXN0X21hYyk6IFJlcGxhY2UgdmVyc2lvbiBzdHJpbmdzIHdpdGggdmVyc2lvbiBv
YmplY3RzLgorICAgICAgICAoRmFjdG9yeVRlc3QudGVzdF93aW4pOiBEaXR0by4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5OgorICAgICAgICAoR3RrUG9ydC5fZ2VuZXJh
dGVfYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMpOiBSZXBsYWNlIF92ZXJzaW9uIHdpdGggdmVyc2lv
bl9uYW1lKCkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weToKKyAgICAg
ICAgKElPU1BvcnQudmVyc2lvbl9uYW1lKTogQm90aCBTaW11bGF0b3IgYW5kIGRldmljZSBzaGFy
ZSB0aGUgc2FtZSB2ZXJzaW9uLW5hbWUgY29udmVudGlvbi4KKyAgICAgICAgKElPU1BvcnQuX2dl
bmVyYXRlX2FsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKTogUmVwbGFjZSBfdmVyc2lvbiB3aXRoIHZl
cnNpb25fbmFtZSgpLgorICAgICAgICAoSU9TUG9ydC5kZWZhdWx0X2Jhc2VsaW5lX3NlYXJjaF9w
YXRoKTogVXNlIHRoZSBpbnRlcm5hbCBtYXBwaW5nIG9mIHZlcnNpb24gbmFtZXMgdG8gY29uc3Ry
dWN0CisgICAgICAgIGFwcGxlX2FkZGl0aW9ucyBleHBlY3RhdGlvbnMuCisgICAgICAgIChJT1NQ
b3J0Ll9hcHBsZV9hZGRpdGlvbnNfcGF0aCk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHk6CisgICAgICAgIChJT1NEZXZpY2VQb3J0Lmlvc192
ZXJzaW9uKTogUmV0dXJuIE5vbmUgaWYgbm8gdmVyc2lvbiBpcyBkZWZpbmVkLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlX3VuaXR0ZXN0LnB5OgorICAgICAgICAo
SU9TRGV2aWNlVGVzdCk6CisgICAgICAgIChJT1NEZXZpY2VUZXN0LnRlc3RfbGF5b3V0X3Rlc3Rf
c2VhcmNocGF0aF93aXRoX2FwcGxlX2FkZGl0aW9ucyk6IENvbmZvcm0gd2l0aCB0aGUgbmV3IG1v
Y2sKKyAgICAgICAgYXBwbGVfYWRkaXRpb25zLgorICAgICAgICAoSU9TRGV2aWNlVGVzdC5tYWtl
X3BvcnQpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2lt
dWxhdG9yLnB5OgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fY3JlYXRlX2RldmljZXMpOiBV
c2UgVmVyc2lvbiBvYmplY3Qgb3ZlciBsaXN0IG9mIHZlcnNpb24gc3RyaW5ncy4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvcl91bml0dGVzdC5weToKKyAgICAg
ICAgKElPU1NpbXVsYXRvclRlc3QpOgorICAgICAgICAoSU9TU2ltdWxhdG9yVGVzdC5tYWtlX3Bv
cnQpOiBVc2UgaU9TIDExIGFzIHRoZSBkZWZhdWx0IHZlcnNpb24gZm9yIHRlc3RpbmcuCisgICAg
ICAgIChJT1NTaW11bGF0b3JUZXN0LnRlc3RfbGF5b3V0X3Rlc3Rfc2VhcmNocGF0aF93aXRoX2Fw
cGxlX2FkZGl0aW9ucyk6IENvbmZvcm0gd2l0aCB0aGUgbmV3CisgICAgICAgIG1vY2sgYXBwbGVf
YWRkaXRpb25zLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdGVzdGNhc2Uu
cHk6CisgICAgICAgIChJT1NUZXN0Lm1ha2VfcG9ydCk6IFVzZSBpT1MgMTEgYXMgdGhlIGRlZmF1
bHQgdmVyc2lvbiBmb3IgdGVzdGluZy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
bWFjLnB5OgorICAgICAgICAoTWFjUG9ydCk6CisgICAgICAgIChNYWNQb3J0Ll9faW5pdF9fKTog
VXNlIFZlcnNpb24gb2JqZWN0IGZvciBfb3NfdmVyc2lvbi4KKyAgICAgICAgKE1hY1BvcnQuZGVm
YXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0aCk6IFVzZSB0aGUgaW50ZXJuYWwgbWFwcGluZyBvZiB2
ZXJzaW9uIG5hbWVzIHRvIGNvbnN0cnVjdAorICAgICAgICBhcHBsZV9hZGRpdGlvbnMgZXhwZWN0
YXRpb25zLgorICAgICAgICAoTWFjUG9ydC5jb25maWd1cmF0aW9uX3NwZWNpZmllcl9tYWNyb3Mp
OiBBdXRvbWF0aWNhbGx5IGNvbnN0cnVjdCBtYWNyb3MgYmFzZWQgb24gVmVyc2lvbk5hbWVNYXAu
CisgICAgICAgIChNYWNQb3J0Ll9hcHBsZV9hZGRpdGlvbnNfcGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L21hY191bml0dGVzdC5weToKKyAgICAgICAgKE1h
Y1Rlc3QpOiBVc2UgVmVyc2lvbiBvYmplY3QgaW5zdGVhZCBvZiB2ZXJzaW9uIHN0cmluZy4KKyAg
ICAgICAgKE1hY1Rlc3QudGVzdF92ZXJzaW9uKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvcG9ydF90ZXN0Y2FzZS5weToKKyAgICAgICAgKGJpbmRfbW9ja19hcHBsZV9hZGRpdGlv
bnMpOiBBZGQgYSBtb2NrIFZlcnNpb25OYW1lTWFwIHRvIG1vY2sgYXBwbGVfYWRkaXRpb25zLgor
ICAgICAgICAoYmluZF9tb2NrX2FwcGxlX2FkZGl0aW9ucy5Nb2NrQXBwbGVBZGRpdGlvbnMpOgor
ICAgICAgICAoYmluZF9tb2NrX2FwcGxlX2FkZGl0aW9ucy5Nb2NrQXBwbGVBZGRpdGlvbnMudmVy
c2lvbl9uYW1lX21hcHBpbmcpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC90ZXN0
LnB5OgorICAgICAgICAoVGVzdFBvcnQpOgorICAgICAgICAoVGVzdFBvcnQuX19pbml0X18pOiBV
c2UgVmVyc2lvbk5hbWVNYXAgdG8gY29tcHV0ZSB0aGUgY29ycmVjdCBWZXJzaW9uIGZyb20gYSBw
b3J0IG5hbWUuCisgICAgICAgIChUZXN0UG9ydC52ZXJzaW9uX25hbWUpOiBNaXJyb3IgUG9ydCBv
YmplY3QuCisgICAgICAgIChUZXN0UG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aCk6IFJlcGxhY2Ug
d2luNyB3aXRoIDdzcDAuCisgICAgICAgIChUZXN0UG9ydC5fYWxsX3N5c3RlbXMpOiBEaXR0by4K
KyAgICAgICAgKFRlc3RQb3J0LmNvbmZpZ3VyYXRpb25fc3BlY2lmaWVyX21hY3Jvcyk6IERpdHRv
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHk6CisgICAgICAgIChXaW5Q
b3J0KToKKyAgICAgICAgKFdpblBvcnQuX19pbml0X18pOiBDb25zdHJ1Y3QgVmVyc2lvbiBvYmpl
Y3QgZnJvbSBwb3J0IG5hbWUuCisgICAgICAgIChXaW5Qb3J0LmRlZmF1bHRfYmFzZWxpbmVfc2Vh
cmNoX3BhdGgpOiBVc2UgdGhlIGludGVybmFsIG1hcHBpbmcgb2YgdmVyc2lvbiBuYW1lcyB0byBj
b25zdHJ1Y3QKKyAgICAgICAgYXBwbGVfYWRkaXRpb25zIGV4cGVjdGF0aW9ucy4KKyAgICAgICAg
KFdpbkNhaXJvUG9ydCk6CisgICAgICAgIChXaW5DYWlyb1BvcnQuZGVmYXVsdF9iYXNlbGluZV9z
ZWFyY2hfcGF0aCk6IFVzZSBNSU4vTUFYIGluc3RlYWQgb2YgdGhlIFZFUlNJT05fRkFMTEJBQ0tf
T1JERVIuCisgICAgICAgIChXaW5DYWlyb1BvcnQuX2Z1dHVyZV9wb3J0X25hbWUpOiBEZWxldGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93aW5fdW5pdHRlc3QucHk6CisgICAg
ICAgIChXaW5Qb3J0VGVzdC50ZXN0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKTogQWRkIG5ldyBXaW5k
b3dzIHZlcnNpb25zIG5vdCBwcmV2aW91c2x5IGluY2x1ZGVkLgorICAgICAgICAoV2luUG9ydFRl
c3QuX2Fzc2VydF92ZXJzaW9uKTogSGFuZGxlIGV4cGVjdGVkX3ZlcnNpb24gYXMgYSBWZXJzaW9u
IG9iamVjdC4KKyAgICAgICAgKFdpblBvcnRUZXN0LnRlc3RfdmVyc2lvbnMpOiBQYXNzIFZlcnNp
b24gb2JqZWN0cyBpbnN0ZWFkIG9mIHZlcnNpb24gc3RyaW5ncy4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3BvcnQvd3BlLnB5OgorICAgICAgICAoV1BFUG9ydC5fZ2VuZXJhdGVfYWxsX3Rl
c3RfY29uZmlndXJhdGlvbnMpOiBSZXBsYWNlIF92ZXJzaW9uIHdpdGggdmVyc2lvbl9uYW1lKCku
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRl
c3QucHk6CisgICAgICAgIChQcmludEV4cGVjdGF0aW9uc1Rlc3QudGVzdF9tdWx0aXBsZSk6IFJl
cGxhY2Ugd2luNyB3aXRoIDdzcDAuCisgICAgICAgIChQcmludEJhc2VsaW5lc1Rlc3QudGVzdF9t
dWx0aXBsZSk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9xdWV1ZXMucHk6CisgICAgICAgIChQYXRjaFByb2Nlc3NpbmdRdWV1ZS5fbmV3X3BvcnRfbmFt
ZV9mcm9tX29sZCk6IFVzZSBvc192ZXJzaW9uX25hbWUoKSBpbnN0ZWFkIG9mIFZlcnNpb24gb2Jq
ZWN0LgorCiAyMDE3LTEyLTExICBEYXZpZCBRdWVzYWRhICA8ZGF2aWRfcXVlc2FkYUBhcHBsZS5j
b20+CiAKICAgICAgICAgVHVybiBvbiBFTkFCTEVfQVBQTElDQVRJT05fTUFOSUZFU1QKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb24ucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbi5weQkocmV2aXNpb24gMjI1NzYx
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbi5weQkod29ya2luZyBj
b3B5KQpAQCAtMTExLDYgKzExMSw4IEBAIGNsYXNzIFZlcnNpb24ob2JqZWN0KToKICAgICAgICAg
cmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBp
ZiBvdGhlciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICAgZm9yIGkgaW4g
eHJhbmdlKGxlbihzZWxmKSk6CiAgICAgICAgICAgICBpZiBjbXAoc2VsZltpXSwgb3RoZXJbaV0p
OgogICAgICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZltpXSwgb3RoZXJbaV0pCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXAucHkJ
KHJldmlzaW9uIDIyNTc2MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNp
b25fbmFtZV9tYXAucHkJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDkgQEAgY2xhc3MgVmVy
c2lvbk5hbWVNYXAob2JqZWN0KToKICAgICBAc3RhdGljbWV0aG9kCiAgICAgQG1lbW9pemVkCiAg
ICAgZGVmIG1hcChwbGF0Zm9ybT1Ob25lKToKKyAgICAgICAgZnJvbSB3ZWJraXRweS5wb3J0LmNv
bmZpZyBpbXBvcnQgYXBwbGVfYWRkaXRpb25zCisgICAgICAgIGlmIGFwcGxlX2FkZGl0aW9ucygp
OgorICAgICAgICAgICAgcmV0dXJuIGFwcGxlX2FkZGl0aW9ucygpLnZlcnNpb25fbmFtZV9tYXBw
aW5nKHBsYXRmb3JtKQogICAgICAgICByZXR1cm4gVmVyc2lvbk5hbWVNYXAocGxhdGZvcm09cGxh
dGZvcm0pCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcGxhdGZvcm09Tm9uZSk6CkBAIC03Miw2
ICs3NSw5IEBAIGNsYXNzIFZlcnNpb25OYW1lTWFwKG9iamVjdCk6CiAgICAgICAgICAgICAnbGlu
dXgnOiB7fSwKICAgICAgICAgfQogCisgICAgICAgICMgd2luY2Fpcm8gdXNlcyB0aGUgc2FtZSB2
ZXJzaW9ucyBhcyBXaW5kb3dzCisgICAgICAgIHNlbGYubWFwcGluZ1tQVUJMSUNfVEFCTEVdWyd3
aW5jYWlybyddID0gc2VsZi5tYXBwaW5nW1BVQkxJQ19UQUJMRV1bJ3dpbiddCisKICAgICBAY2xh
c3NtZXRob2QKICAgICBkZWYgX2F1dG9tYXBfdG9fbWFqb3JfdmVyc2lvbihjbHMsIHByZWZpeCwg
bWluaW11bT1WZXJzaW9uKDEpLCBtYXhpbXVtPVZlcnNpb24oMSkpOgogICAgICAgICByZXN1bHQg
PSB7fQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVz
dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9u
X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMjU3NjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi92ZXJzaW9uX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsMyArMTMw
LDQgQEAgY2xhc3MgVmVyc2lvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKQogICAgICAgICBz
ZWxmLmFzc2VydEdyZWF0ZXIoVmVyc2lvbigxLCAyLCA0KSwgVmVyc2lvbigxLCAyLCAzKSkKICAg
ICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKFZlcnNpb24oMSwgMywgMiksIFZlcnNpb24oMSwgMiwg
MykpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihWZXJzaW9uKDIsIDEsIDEpLCBWZXJzaW9u
KDEsIDIsIDMpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFZlcnNpb24oMSwgMiwgMyks
IE5vbmUpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZv
cm1pbmZvLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHJldmlzaW9uIDIyNTc2MSkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAgaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiAKIGZyb20gd2Via2l0cHkuY29t
bW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KLWZyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25f
bmFtZV9tYXAgaW1wb3J0IFZlcnNpb25OYW1lTWFwCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJz
aW9uX25hbWVfbWFwIGltcG9ydCBQVUJMSUNfVEFCTEUsIFZlcnNpb25OYW1lTWFwCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUKIAogCkBAIC01
NCwyNCArNTQsMTcgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgICAgIHNlbGYu
b3NfbmFtZSA9IHNlbGYuX2RldGVybWluZV9vc19uYW1lKHN5c19tb2R1bGUucGxhdGZvcm0pCiAg
ICAgICAgIHNlbGYub3NfdmVyc2lvbiA9IE5vbmUKIAorICAgICAgICBzZWxmLl9pc19jeWd3aW4g
PSBzeXNfbW9kdWxlLnBsYXRmb3JtID09ICdjeWd3aW4nCisKICAgICAgICAgaWYgc2VsZi5vc19u
YW1lLnN0YXJ0c3dpdGgoJ21hYycpOgotICAgICAgICAgICAgdmVyc2lvbiA9IFZlcnNpb24uZnJv
bV9zdHJpbmcocGxhdGZvcm1fbW9kdWxlLm1hY192ZXIoKVswXSkKKyAgICAgICAgICAgIHNlbGYu
b3NfdmVyc2lvbiA9IFZlcnNpb24uZnJvbV9zdHJpbmcocGxhdGZvcm1fbW9kdWxlLm1hY192ZXIo
KVswXSkKICAgICAgICAgZWxpZiBzZWxmLm9zX25hbWUuc3RhcnRzd2l0aCgnd2luJyk6Ci0gICAg
ICAgICAgICB2ZXJzaW9uID0gc2VsZi5fd2luX3ZlcnNpb24oKQorICAgICAgICAgICAgc2VsZi5v
c192ZXJzaW9uID0gc2VsZi5fd2luX3ZlcnNpb24oKQogICAgICAgICBlbGlmIHNlbGYub3NfbmFt
ZSA9PSAnbGludXgnIG9yIHNlbGYub3NfbmFtZSA9PSAnZnJlZWJzZCcgb3Igc2VsZi5vc19uYW1l
ID09ICdvcGVuYnNkJyBvciBzZWxmLm9zX25hbWUgPT0gJ25ldGJzZCc6Ci0gICAgICAgICAgICB2
ZXJzaW9uID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsc2U6CiAgICAgICAg
ICAgICAjIE1vc3Qgb3RoZXIgcGxhdGZvcm1zIChuYW1lbHkgaU9TKSByZXR1cm4gY29uZm9ybWlu
ZyB2ZXJzaW9uIHN0cmluZ3MuCi0gICAgICAgICAgICB2ZXJzaW9uID0gVmVyc2lvbi5mcm9tX3N0
cmluZyhwbGF0Zm9ybV9tb2R1bGUucmVsZWFzZSgpKQotCi0gICAgICAgIHNlbGYuX2lzX2N5Z3dp
biA9IHN5c19tb2R1bGUucGxhdGZvcm0gPT0gJ2N5Z3dpbicKLQotICAgICAgICBpZiB2ZXJzaW9u
IGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBzZWxmLm9zX3ZlcnNpb24g
PSBWZXJzaW9uTmFtZU1hcC5tYXAoc2VsZikudG9fbmFtZSh2ZXJzaW9uLCB0YWJsZT0ncHVibGlj
JykKLSAgICAgICAgYXNzZXJ0IHNlbGYub3NfdmVyc2lvbiBpcyBub3QgTm9uZQotICAgICAgICBz
ZWxmLm9zX3ZlcnNpb24gPSBzZWxmLm9zX3ZlcnNpb24ubG93ZXIoKS5yZXBsYWNlKCcgJywgJycp
CisgICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBWZXJzaW9uLmZyb21fc3RyaW5nKHBsYXRm
b3JtX21vZHVsZS5yZWxlYXNlKCkpCiAKICAgICBkZWYgaXNfbWFjKHNlbGYpOgogICAgICAgICBy
ZXR1cm4gc2VsZi5vc19uYW1lID09ICdtYWMnCkBAIC0xMTAsNiArMTAzLDExIEBAIGNsYXNzIFBs
YXRmb3JtSW5mbyhvYmplY3QpOgogICAgICAgICAjIFdpbmRvd3MtMjAwOFNlcnZlclIyLTYuMS43
NjAwCiAgICAgICAgIHJldHVybiBzZWxmLl9wbGF0Zm9ybV9tb2R1bGUucGxhdGZvcm0oKQogCisg
ICAgZGVmIG9zX3ZlcnNpb25fbmFtZShzZWxmLCB0YWJsZT1QVUJMSUNfVEFCTEUpOgorICAgICAg
ICBpZiBub3Qgc2VsZi5vc192ZXJzaW9uOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAg
ICAgcmV0dXJuIFZlcnNpb25OYW1lTWFwLm1hcChzZWxmKS50b19uYW1lKHNlbGYub3NfdmVyc2lv
biwgdGFibGU9dGFibGUpCisKICAgICBkZWYgdG90YWxfYnl0ZXNfbWVtb3J5KHNlbGYpOgogICAg
ICAgICBpZiBzZWxmLmlzX21hYygpOgogICAgICAgICAgICAgcmV0dXJuIGxvbmcoc2VsZi5fZXhl
Y3V0aXZlLnJ1bl9jb21tYW5kKFsic3lzY3RsIiwgIi1uIiwgImh3Lm1lbXNpemUiXSkpCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2su
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Bs
YXRmb3JtaW5mb19tb2NrLnB5CShyZXZpc2lvbiAyMjU3NjEpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDEwICsyOCwxMiBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25h
bWVfbWFwIGltcG9ydCBQVUJMSUNfVEFCTEUsIFZlcnNpb25OYW1lTWFwCiAKIAogY2xhc3MgTW9j
a1BsYXRmb3JtSW5mbyhvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvc19uYW1lPSdt
YWMnLCBvc192ZXJzaW9uPSdzbm93bGVvcGFyZCcpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBv
c19uYW1lPSdtYWMnLCBvc192ZXJzaW9uPVZlcnNpb24oMTAsIDYpKToKKyAgICAgICAgYXNzZXJ0
IGlzaW5zdGFuY2Uob3NfdmVyc2lvbiwgVmVyc2lvbikKICAgICAgICAgc2VsZi5vc19uYW1lID0g
b3NfbmFtZQogICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBvc192ZXJzaW9uCiAgICAgICAgIHNl
bGYuZXhwZWN0ZWRfeGNvZGVfc2ltY3RsX2xpc3QgPSBOb25lCkBAIC02MCw2ICs2MiwxMSBAQCBj
bGFzcyBNb2NrUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgZGVmIGRpc3BsYXlfbmFtZShzZWxm
KToKICAgICAgICAgcmV0dXJuICJNb2NrUGxhdGZvcm0gMS4wIgogCisgICAgZGVmIG9zX3ZlcnNp
b25fbmFtZShzZWxmLCB0YWJsZT1QVUJMSUNfVEFCTEUpOgorICAgICAgICBpZiBub3Qgc2VsZi5v
c192ZXJzaW9uOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIFZlcnNp
b25OYW1lTWFwLm1hcChzZWxmKS50b19uYW1lKHNlbGYub3NfdmVyc2lvbiwgdGFibGU9dGFibGUp
CisKICAgICBkZWYgdG90YWxfYnl0ZXNfbWVtb3J5KHNlbGYpOgogICAgICAgICByZXR1cm4gMyAq
IDEwMjQgKiAxMDI0ICogMTAyNCAgIyAzR0IgaXMgYSByZWFzb25hYmxlIGFtb3VudCBvZiByYW0g
dG8gbW9jay4KIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3Bs
YXRmb3JtaW5mb191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMjU3
NjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZv
X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw4IEBAIGNsYXNzIFRlc3RQ
bGF0Zm9ybUluZm8odW5pdHRlc3QuVGVzdENhc2UKICAgICAgICAgIyBUaGlzIHRlc3QgbWFrZXMg
c3VyZSB0aGUgcmVhbCAodW5tb2NrZWQpIGNvZGUgYWN0dWFsbHkgd29ya3MuCiAgICAgICAgIGlu
Zm8gPSBQbGF0Zm9ybUluZm8oc3lzLCBwbGF0Zm9ybSwgRXhlY3V0aXZlKCkpCiAgICAgICAgIHNl
bGYuYXNzZXJ0Tm90RXF1YWxzKGluZm8ub3NfbmFtZSwgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0
Tm90RXF1YWxzKGluZm8ub3NfdmVyc2lvbiwgJycpCisgICAgICAgIGlmIGluZm8uaXNfbWFjKCkg
b3IgaW5mby5pc193aW4oKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGluZm8u
b3NfdmVyc2lvbiwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoaW5mby5kaXNw
bGF5X25hbWUoKSwgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmZvLmlzX21hYygpIG9y
IGluZm8uaXNfd2luKCkgb3IgaW5mby5pc19saW51eCgpIG9yIGluZm8uaXNfZnJlZWJzZCgpKQog
ICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShpbmZvLnRlcm1pbmFsX3dpZHRoKCkpCkBAIC0x
MzIsMzcgKzEzMyw2IEBAIGNsYXNzIFRlc3RQbGF0Zm9ybUluZm8odW5pdHRlc3QuVGVzdENhc2UK
IAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgc2VsZi5tYWtlX2lu
Zm8sIGZha2Vfc3lzKCd2bXMnKSkKIAotICAgIGRlZiB0ZXN0X29zX3ZlcnNpb24oc2VsZik6Ci0g
ICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBzZWxmLm1ha2VfaW5mbywg
ZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC40LjMnKSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZGFyd2luJyksIGZha2VfcGxh
dGZvcm0oJzEwLjUuMScpKS5vc192ZXJzaW9uLCAnbGVvcGFyZCcpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3Jt
KCcxMC42LjEnKSkub3NfdmVyc2lvbiwgJ3Nub3dsZW9wYXJkJykKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZGFyd2luJyksIGZha2VfcGxhdGZvcm0o
JzEwLjcuMScpKS5vc192ZXJzaW9uLCAnbGlvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC44LjEn
KSkub3NfdmVyc2lvbiwgJ21vdW50YWlubGlvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC45LjAn
KSkub3NfdmVyc2lvbiwgJ21hdmVyaWNrcycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vs
Zi5tYWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC4xMC4wJykp
Lm9zX3ZlcnNpb24sICd5b3NlbWl0ZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5t
YWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC4xMS4wJykpLm9z
X3ZlcnNpb24sICdlbGNhcGl0YW4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFr
ZV9pbmZvKGZha2Vfc3lzKCdkYXJ3aW4nKSwgZmFrZV9wbGF0Zm9ybSgnMTAuMTIuMCcpKS5vc192
ZXJzaW9uLCAnc2llcnJhJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5m
byhmYWtlX3N5cygnZGFyd2luJyksIGZha2VfcGxhdGZvcm0oJzEwLjEzLjAnKSkub3NfdmVyc2lv
biwgJ2hpZ2hzaWVycmEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZv
KGZha2Vfc3lzKCdkYXJ3aW4nKSwgZmFrZV9wbGF0Zm9ybSgnMTAuMTQuMCcpKS5vc192ZXJzaW9u
LCAnZnV0dXJlJykKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZh
a2Vfc3lzKCdsaW51eDInKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzEwLjQnKSkub3NfdmVyc2lvbiwg
Tm9uZSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lz
KCdmcmVlYnNkOCcpLCBmYWtlX3BsYXRmb3JtKCcnLCAnOC4zLVBSRVJFTEVBU0UnKSkub3NfdmVy
c2lvbiwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtl
X3N5cygnZnJlZWJzZDknKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzkuMC1SRUxFQVNFJykpLm9zX3Zl
cnNpb24sIE5vbmUpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3Is
IHNlbGYubWFrZV9pbmZvLCBmYWtlX3N5cygnd2luMzInKSwgZmFrZV9wbGF0Zm9ybSh3aW5fdmVy
c2lvbl9zdHJpbmc9JzUuMC4xMjM0JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5t
YWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMyJyksIGZha2VfcGxhdGZvcm0od2luX3ZlcnNpb25fc3Ry
aW5nPScxMC4wLjE0MzkzJykpLm9zX3ZlcnNpb24sICd3aW4xMCcpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMyJyksIGZha2VfcGxhdGZvcm0o
d2luX3ZlcnNpb25fc3RyaW5nPSc2LjIuMTIzNCcpKS5vc192ZXJzaW9uLCAnOCcpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMyJyksIGZha2Vf
cGxhdGZvcm0od2luX3ZlcnNpb25fc3RyaW5nPSc2LjEuNzYwMCcpKS5vc192ZXJzaW9uLCAnN3Nw
MCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dp
bjMyJyksIGZha2VfcGxhdGZvcm0od2luX3ZlcnNpb25fc3RyaW5nPSc2LjAuMTIzNCcpKS5vc192
ZXJzaW9uLCAndmlzdGEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZv
KGZha2Vfc3lzKCd3aW4zMicpLCBmYWtlX3BsYXRmb3JtKHdpbl92ZXJzaW9uX3N0cmluZz0nNS4x
LjEyMzQnKSkub3NfdmVyc2lvbiwgJ3hwJykKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhB
c3NlcnRpb25FcnJvciwgc2VsZi5tYWtlX2luZm8sIGZha2Vfc3lzKCd3aW4zMicpLCBleGVjdXRp
dmU9ZmFrZV9leGVjdXRpdmUoJzUuMC4xMjM0JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2N5Z3dpbicpLCBleGVjdXRpdmU9ZmFrZV9leGVjdXRp
dmUoJzYuMi4xMjM0JykpLm9zX3ZlcnNpb24sICc4JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnY3lnd2luJyksIGV4ZWN1dGl2ZT1mYWtlX2V4ZWN1
dGl2ZSgnNi4xLjc2MDAnKSkub3NfdmVyc2lvbiwgJzdzcDAnKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdjeWd3aW4nKSwgZXhlY3V0aXZlPWZha2Vf
ZXhlY3V0aXZlKCc2LjAuMTIzNCcpKS5vc192ZXJzaW9uLCAndmlzdGEnKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdjeWd3aW4nKSwgZXhlY3V0aXZl
PWZha2VfZXhlY3V0aXZlKCc1LjEuMTIzNCcpKS5vc192ZXJzaW9uLCAneHAnKQotCiAgICAgZGVm
IHRlc3RfZGlzcGxheV9uYW1lKHNlbGYpOgogICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8o
ZmFrZV9zeXMoJ2RhcndpbicpKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhpbmZvLmRp
c3BsYXlfbmFtZSgpLCAnJykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL21vZGVscy90ZXN0X2NvbmZpZ3VyYXRpb24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfY29uZmlndXJhdGlvbi5weQko
cmV2aXNpb24gMjI1NzYxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bW9kZWxzL3Rlc3RfY29uZmlndXJhdGlvbi5weQkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
NyBAQCBpbXBvcnQgaXRlcnRvb2xzCiAKIGNsYXNzIFRlc3RDb25maWd1cmF0aW9uKG9iamVjdCk6
CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZlcnNpb24sIGFyY2hpdGVjdHVyZSwgYnVpbGRfdHlw
ZSk6Ci0gICAgICAgIHNlbGYudmVyc2lvbiA9IHZlcnNpb24KKyAgICAgICAgc2VsZi52ZXJzaW9u
ID0gdmVyc2lvbi5sb3dlcigpLnJlcGxhY2UoJyAnLCAnJykgaWYgdmVyc2lvbiBpcyBub3QgTm9u
ZSBlbHNlICcnCiAgICAgICAgIHNlbGYuYXJjaGl0ZWN0dXJlID0gYXJjaGl0ZWN0dXJlCiAgICAg
ICAgIHNlbGYuYnVpbGRfdHlwZSA9IGJ1aWxkX3R5cGUKIApJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zX3VuaXR0ZXN0LnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVs
cy90ZXN0X2V4cGVjdGF0aW9uc191bml0dGVzdC5weQkocmV2aXNpb24gMjI1NzYxKQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25z
X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC00NzQsNyArNDc0LDcgQEAgQnVnKHkpIFsg
V2luIE1hYyBEZWJ1ZyBdIGZhaWx1cmVzL2V4cGVjdAogCiAgICAgICAgIGFjdHVhbF9leHBlY3Rh
dGlvbnMgPSBleHBlY3RhdGlvbnMucmVtb3ZlX2NvbmZpZ3VyYXRpb25fZnJvbV90ZXN0KCdmYWls
dXJlcy9leHBlY3RlZC9mb28uaHRtbCcsIHRlc3RfY29uZmlnKQogCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoIiIiQnVnKHgpIFsgTGludXggVmlzdGEgV2luNyBSZWxlYXNlIF0gZmFpbHVyZXMv
ZXhwZWN0ZWQvZm9vLmh0bWwgWyBGYWlsdXJlIF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgi
IiJCdWcoeCkgWyA3U1AwIExpbnV4IFZpc3RhIFJlbGVhc2UgXSBmYWlsdXJlcy9leHBlY3RlZC9m
b28uaHRtbCBbIEZhaWx1cmUgXQogQnVnKHkpIFsgV2luIE1hYyBEZWJ1ZyBdIGZhaWx1cmVzL2V4
cGVjdGVkL2Zvby5odG1sIFsgQ3Jhc2ggXQogIiIiLCBhY3R1YWxfZXhwZWN0YXRpb25zKQogCkBA
IC00OTMsNyArNDkzLDcgQEAgQnVnKHkpIFsgV2luIERlYnVnIF0gZmFpbHVyZXMvZXhwZWN0ZWQv
ZgogCiAgICAgICAgIGFjdHVhbF9leHBlY3RhdGlvbnMgPSBleHBlY3RhdGlvbnMucmVtb3ZlX2Nv
bmZpZ3VyYXRpb25fZnJvbV90ZXN0KCdmYWlsdXJlcy9leHBlY3RlZC9mb28uaHRtbCcsIHRlc3Rf
Y29uZmlnKQogICAgICAgICBhY3R1YWxfZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zLnJlbW92
ZV9jb25maWd1cmF0aW9uX2Zyb21fdGVzdCgnZmFpbHVyZXMvZXhwZWN0ZWQvZm9vLmh0bWwnLCBo
b3N0LnBvcnRfZmFjdG9yeS5nZXQoJ3Rlc3Qtd2luLXZpc3RhJywgTm9uZSkudGVzdF9jb25maWd1
cmF0aW9uKCkpCi0gICAgICAgIGFjdHVhbF9leHBlY3RhdGlvbnMgPSBleHBlY3RhdGlvbnMucmVt
b3ZlX2NvbmZpZ3VyYXRpb25fZnJvbV90ZXN0KCdmYWlsdXJlcy9leHBlY3RlZC9mb28uaHRtbCcs
IGhvc3QucG9ydF9mYWN0b3J5LmdldCgndGVzdC13aW4td2luNycsIE5vbmUpLnRlc3RfY29uZmln
dXJhdGlvbigpKQorICAgICAgICBhY3R1YWxfZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zLnJl
bW92ZV9jb25maWd1cmF0aW9uX2Zyb21fdGVzdCgnZmFpbHVyZXMvZXhwZWN0ZWQvZm9vLmh0bWwn
LCBob3N0LnBvcnRfZmFjdG9yeS5nZXQoJ3Rlc3Qtd2luLTdzcDAnLCBOb25lKS50ZXN0X2NvbmZp
Z3VyYXRpb24oKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiIkJ1Zyh5KSBbIFdpbiBE
ZWJ1ZyBdIGZhaWx1cmVzL2V4cGVjdGVkL2Zvby5odG1sIFsgQ3Jhc2ggXQogIiIiLCBhY3R1YWxf
ZXhwZWN0YXRpb25zKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9hcHBsZS5weQkocmV2
aXNpb24gMjI1NzYxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0yNywxMCArMjcsMTEgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogaW1wb3J0
IGxvZ2dpbmcKLWltcG9ydCBvcwogCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0
aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1w
b3J0IG1lbW9pemVkCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25hbWVfbWFwIGltcG9y
dCBWZXJzaW9uTmFtZU1hcAogZnJvbSB3ZWJraXRweS5wb3J0LmJhc2UgaW1wb3J0IFBvcnQKK2Zy
b20gd2Via2l0cHkucG9ydC5jb25maWcgaW1wb3J0IGFwcGxlX2FkZGl0aW9ucwogZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENv
bmZpZ3VyYXRpb24KIAogCkBAIC00MCwxOSArNDEsOSBAQCBfbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoX19uYW1lX18pCiBjbGFzcyBBcHBsZVBvcnQoUG9ydCk6CiAgICAgIiIiU2hhcmVkIGxvZ2lj
IGJldHdlZW4gYWxsIG9mIEFwcGxlJ3MgcG9ydHMuIiIiCiAKLSAgICAjIFRoaXMgaXMgdXNlZCB0
byByZXByZXNlbnQgdGhlIHZlcnNpb24gb2YgYW4gb3BlcmF0aW5nIHN5c3RlbQotICAgICMgY29y
cmVzcG9uZGluZyB0byB0aGUgIm1hYyIgb3IgIndpbiIgYmFzZSBMYXlvdXRUZXN0cy9wbGF0Zm9y
bQotICAgICMgZGlyZWN0b3J5LiAgSSdtIG5vdCBzdXJlIHRoaXMgY29uY2VwdCBpcyB2ZXJ5IHVz
ZWZ1bCwKLSAgICAjIGJ1dCBpdCBnaXZlcyB1cyBhIHdheSB0byByZWZlciB0byBmYWxsYmFjayBw
YXRocyAqb25seSogaW5jbHVkaW5nCi0gICAgIyB0aGUgYmFzZSBkaXJlY3RvcnkuCi0gICAgIyBU
aGlzIGlzIG1vc3RseSBkb25lIGJlY2F1c2UgVGVzdENvbmZpZ3VyYXRpb24gYXNzdW1lcyB0aGF0
IHNlbGYudmVyc2lvbigpCi0gICAgIyB3aWxsIG5ldmVyIHJldHVybiBOb25lLiAoTm9uZSB3b3Vs
ZCBiZSBhbm90aGVyIHdheSB0byByZXByZXNlbnQgdGhpcyBjb25jZXB0LikKLSAgICAjIEFwcGxl
IHN1cHBvc2VkbHkgaGFzIGV4cGxpY2l0ICJmdXR1cmUiIHJlc3VsdHMgd2hpY2ggYXJlIGtlcHQg
aW4gYW4gaW50ZXJuYWwgcmVwb3NpdG9yeS4KLSAgICAjIEl0J3MgcG9zc2libGUgdGhhdCBBcHBs
ZSB3b3VsZCB3YW50IHRvIGZpeCB0aGlzIGNvZGUgdG8gd29yayBiZXR0ZXIgd2l0aCB0aG9zZSBy
ZXN1bHRzLgotICAgIEZVVFVSRV9WRVJTSU9OID0gJ2Z1dHVyZScgICMgRklYTUU6IFRoaXMgd2hv
bGUgJ2Z1dHVyZScgdGhpbmcgZmVlbHMgbGlrZSBhIGhhY2suCi0KICAgICAjIG92ZXJyaWRkZW4g
aW4gc3ViY2xhc3NlcwotICAgIFZFUlNJT05fRkFMTEJBQ0tfT1JERVIgPSBbXQorICAgIFZFUlNJ
T05fTUlOID0gTm9uZQorICAgIFZFUlNJT05fTUFYID0gTm9uZQogICAgIEFSQ0hJVEVDVFVSRVMg
PSBbXQogICAgIF9jcmFzaF9sb2dzX3RvX3NraXBfZm9yX2hvc3QgPSB7fQogCkBAIC03MSw5ICs2
Miw5IEBAIGNsYXNzIEFwcGxlUG9ydChQb3J0KToKICAgICAgICAgICAgICMgYmVpbmcgcnVuLCBz
byB0aGlzIHdvbid0IHdvcmsgaWYgeW91J3JlIG5vdCBvbiBtYWMgb3Igd2luIChyZXNwZWN0aXZl
bHkpLgogICAgICAgICAgICAgIyBJZiB5b3UncmUgbm90IG9uIHRoZSBvL3MgaW4gcXVlc3Rpb24s
IHlvdSBtdXN0IHNwZWNpZnkgYSBmdWxsIHZlcnNpb24gb3IgLWZ1dHVyZSAoY2YuIGFib3ZlKS4K
ICAgICAgICAgICAgIGlmIHBvcnRfbmFtZSA9PSBjbHMucG9ydF9uYW1lIGFuZCBub3QgZ2V0YXR0
cihvcHRpb25zLCAnd2Via2l0X3Rlc3RfcnVubmVyJywgRmFsc2UpOgotICAgICAgICAgICAgICAg
IHBvcnRfbmFtZSA9IGNscy5wb3J0X25hbWUgKyAnLScgKyBob3N0LnBsYXRmb3JtLm9zX3ZlcnNp
b24KKyAgICAgICAgICAgICAgICBwb3J0X25hbWUgPSBjbHMucG9ydF9uYW1lICsgJy0nICsgaG9z
dC5wbGF0Zm9ybS5vc192ZXJzaW9uX25hbWUoKS5sb3dlcigpLnJlcGxhY2UoJyAnLCAnJykKICAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcG9ydF9uYW1lID0gY2xzLnBvcnRfbmFt
ZSArICctJyArIGhvc3QucGxhdGZvcm0ub3NfdmVyc2lvbiArICctd2syJworICAgICAgICAgICAg
ICAgIHBvcnRfbmFtZSA9IGNscy5wb3J0X25hbWUgKyAnLScgKyBob3N0LnBsYXRmb3JtLm9zX3Zl
cnNpb25fbmFtZSgpLmxvd2VyKCkucmVwbGFjZSgnICcsICcnKSArICctd2syJwogICAgICAgICBl
bGlmIGdldGF0dHIob3B0aW9ucywgJ3dlYmtpdF90ZXN0X3J1bm5lcicsIEZhbHNlKSBhbmQgICct
d2syJyBub3QgaW4gcG9ydF9uYW1lOgogICAgICAgICAgICAgcG9ydF9uYW1lICs9ICctd2syJwog
CkBAIC0xMDMsMzEgKzk0LDMwIEBAIGNsYXNzIEFwcGxlUG9ydChQb3J0KToKICAgICBkZWYgc2hv
dWxkX3JldHJ5X2NyYXNoZXMoc2VsZik6CiAgICAgICAgIHJldHVybiBUcnVlCiAKLSAgICBkZWYg
X3NraXBwZWRfZmlsZV9zZWFyY2hfcGF0aHMoc2VsZik6Ci0gICAgICAgICMgV2UgZG9uJ3QgaGF2
ZSBhIGRlZGljYXRlZCBTa2lwcGVkIGZpbGUgZm9yIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9m
IHRoZSBwb3J0OwotICAgICAgICAjIHdlIGp1c3QgdXNlIHRoZSBvbmUgaW4gcGxhdGZvcm0ve21h
Yyx3aW59Ci0gICAgICAgIG1vc3RfcmVjZW50X25hbWUgPSBzZWxmLlZFUlNJT05fRkFMTEJBQ0tf
T1JERVJbLTFdCi0gICAgICAgIHJldHVybiBzZXQoZmlsdGVyKGxhbWJkYSBuYW1lOiBuYW1lICE9
IG1vc3RfcmVjZW50X25hbWUsIHN1cGVyKEFwcGxlUG9ydCwgc2VsZikuX3NraXBwZWRfZmlsZV9z
ZWFyY2hfcGF0aHMoKSkpCi0KICAgICAjIEZJWE1FOiBBIG1vcmUgc29waGlzdGljYXRlZCB2ZXJz
aW9uIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG1vdmUgdG8gV2ViS2l0UG9ydCBhbmQgcmVwbGFj
ZSBhbGwgY2FsbHMgdG8gbmFtZSgpLgogICAgICMgVGhpcyBpcyBhbHNvIGEgbWlzbGVhZGluZyBu
YW1lLCBzaW5jZSAnbWFjLWZ1dHVyZScgZ2V0cyByZW1hcHBlZCB0byAnbWFjJy4KICAgICBkZWYg
X3BvcnRfbmFtZV93aXRoX3ZlcnNpb24oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLm5hbWUo
KS5yZXBsYWNlKCctZnV0dXJlJywgJycpLnJlcGxhY2UoJy13azInLCAnJykKIAotICAgIGRlZiBf
YWxsb3dlZF9wb3J0X25hbWVzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5WRVJTSU9OX0ZB
TExCQUNLX09SREVSICsgW3NlbGYuX2Z1dHVyZV9wb3J0X25hbWUoKV0KLQotICAgIGRlZiBfZnV0
dXJlX3BvcnRfbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYub3BlcmF0aW5nX3N5c3Rl
bSgpICsgIi0iICsgc2VsZi5GVVRVUkVfVkVSU0lPTgorICAgIEBtZW1vaXplZAorICAgIGRlZiBf
YWxsb3dlZF92ZXJzaW9ucyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5WRVJTSU9OX01JTiBpcyBO
b25lIG9yIHNlbGYuVkVSU0lPTl9NQVggaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBbXQor
ICAgICAgICBzb3J0ZWRfdmVyc2lvbnMgPSBzb3J0ZWQoVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYu
aG9zdC5wbGF0Zm9ybSkubWFwcGluZ19mb3JfcGxhdGZvcm0ocGxhdGZvcm09c2VsZi5wb3J0X25h
bWUuc3BsaXQoJy0nKVswXSkudmFsdWVzKCkpCisgICAgICAgIHJldHVybiBzb3J0ZWRfdmVyc2lv
bnNbc29ydGVkX3ZlcnNpb25zLmluZGV4KHNlbGYuVkVSU0lPTl9NSU4pOnNvcnRlZF92ZXJzaW9u
cy5pbmRleChzZWxmLlZFUlNJT05fTUFYKSArIDFdCiAKICAgICBkZWYgX2dlbmVyYXRlX2FsbF90
ZXN0X2NvbmZpZ3VyYXRpb25zKHNlbGYpOgogICAgICAgICBjb25maWd1cmF0aW9ucyA9IFtdCi0g
ICAgICAgIGZvciBwb3J0X25hbWUgaW4gc2VsZi5fYWxsb3dlZF9wb3J0X25hbWVzKCk6CisgICAg
ICAgIGZvciB2ZXJzaW9uIGluIHNlbGYuX2FsbG93ZWRfdmVyc2lvbnMoKToKICAgICAgICAgICAg
IGZvciBidWlsZF90eXBlIGluIHNlbGYuQUxMX0JVSUxEX1RZUEVTOgogICAgICAgICAgICAgICAg
IGZvciBhcmNoaXRlY3R1cmUgaW4gc2VsZi5BUkNISVRFQ1RVUkVTOgotICAgICAgICAgICAgICAg
ICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVyc2lvbj1zZWxm
Ll9zdHJpcF9wb3J0X25hbWVfcHJlZml4KHBvcnRfbmFtZSksIGFyY2hpdGVjdHVyZT1hcmNoaXRl
Y3R1cmUsIGJ1aWxkX3R5cGU9YnVpbGRfdHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHZlcnNp
b25fbmFtZSA9IFZlcnNpb25OYW1lTWFwLm1hcChzZWxmLmhvc3QucGxhdGZvcm0pLnRvX25hbWUo
dmVyc2lvbiwgcGxhdGZvcm09c2VsZi5wb3J0X25hbWUuc3BsaXQoJy0nKVswXSkKKyAgICAgICAg
ICAgICAgICAgICAgY29uZmlndXJhdGlvbnMuYXBwZW5kKFRlc3RDb25maWd1cmF0aW9uKHZlcnNp
b249dmVyc2lvbl9uYW1lLCBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlLCBidWlsZF90eXBlPWJ1
aWxkX3R5cGUpKQogICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbnMKIAorICAgIGRlZiBfYXBw
bGVfYmFzZWxpbmVfcGF0aChzZWxmLCBwbGF0Zm9ybSk6CisgICAgICAgIHJldHVybiBzZWxmLl9m
aWxlc3lzdGVtLmpvaW4oYXBwbGVfYWRkaXRpb25zKCkubGF5b3V0X3Rlc3RzX3BhdGgoKSwgcGxh
dGZvcm0pCisKICAgICBkZWYgX3BhdGhfdG9faGVscGVyKHNlbGYpOgogICAgICAgICBiaW5hcnlf
bmFtZSA9ICdMYXlvdXRUZXN0SGVscGVyJwogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0
aChiaW5hcnlfbmFtZSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CShyZXZp
c2lvbiAyMjU3NjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkod29y
a2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXpl
ZCBpbXBvcnQgbWVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5wcmV0dHlwYXRjaCBpbXBvcnQgUHJl
dHR5UGF0Y2gKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgcGF0aAogZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKK2Zyb20g
d2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFBVQkxJQ19UQUJMRSwgVmVy
c2lvbk5hbWVNYXAKIGZyb20gd2Via2l0cHkuY29tbW9uLndhdmVkaWZmIGltcG9ydCBXYXZlRGlm
ZgogZnJvbSB3ZWJraXRweS5jb21tb24ud2Via2l0X2ZpbmRlciBpbXBvcnQgV2ViS2l0RmluZGVy
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGlt
cG9ydCBUZXN0Q29uZmlndXJhdGlvbgpAQCAtOTksNyArMTAwLDcgQEAgY2xhc3MgUG9ydChvYmpl
Y3QpOgogICAgICAgICBzZWxmLl9uYW1lID0gcG9ydF9uYW1lCiAKICAgICAgICAgIyBUaGVzZSBh
cmUgZGVmYXVsdCB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgb3ZlcnJpZGRlbiBpbiBhIHN1YmNsYXNz
ZXMuCi0gICAgICAgIHNlbGYuX3ZlcnNpb24gPSAnJworICAgICAgICBzZWxmLl9vc192ZXJzaW9u
ID0gTm9uZQogCiAgICAgICAgICMgRklYTUU6IFRoaXMgY2FuIGJlIHJlbW92ZWQgb25jZSBkZWZh
dWx0IGFyY2hpdGVjdHVyZXMgZm9yIEdUSyBhbmQgRUZMIEVXUyBib3RzIGFyZSBzZXQuCiAgICAg
ICAgIHNlbGYuZGlkX292ZXJyaWRlX2FyY2hpdGVjdHVyZSA9IEZhbHNlCkBAIC03NjQsMTMgKzc2
NSwxNSBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICMgU3ViY2xhc3NlcyBzaG91bGQg
b3ZlcnJpZGUgdGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgogICAgICAgICByZXR1cm4gJ21h
YycKIAotICAgIGRlZiB2ZXJzaW9uKHNlbGYpOgorICAgIGRlZiB2ZXJzaW9uX25hbWUoc2VsZik6
CiAgICAgICAgICIiIlJldHVybnMgYSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgdmVyc2lvbiBvZiBh
IGdpdmVuIHBsYXRmb3JtLCBlLmcuCiAgICAgICAgICdsZW9wYXJkJyBvciAneHAnLgogCiAgICAg
ICAgIFRoaXMgaXMgdXNlZCB0byBoZWxwIGlkZW50aWZ5IHRoZSBleGFjdCBwb3J0IHdoZW4gcGFy
c2luZyB0ZXN0CiAgICAgICAgIGV4cGVjdGF0aW9ucywgZGV0ZXJtaW5pbmcgc2VhcmNoIHBhdGhz
LCBhbmQgbG9nZ2luZyBpbmZvcm1hdGlvbi4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3ZlcnNp
b24KKyAgICAgICAgaWYgc2VsZi5fb3NfdmVyc2lvbiBpcyBOb25lOgorICAgICAgICAgICAgcmV0
dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIFZlcnNpb25OYW1lTWFwLm1hcChzZWxmLmhvc3QucGxh
dGZvcm0pLnRvX25hbWUoc2VsZi5fb3NfdmVyc2lvbiwgdGFibGU9UFVCTElDX1RBQkxFKQogCiAg
ICAgZGVmIGdldF9vcHRpb24oc2VsZiwgbmFtZSwgZGVmYXVsdF92YWx1ZT1Ob25lKToKICAgICAg
ICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fb3B0aW9ucywgbmFtZSwgZGVmYXVsdF92YWx1ZSkKQEAg
LTEwNzIsNyArMTA3NSw3IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICBkZWYgdGVzdF9jb25m
aWd1cmF0aW9uKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBjdXJyZW50IFRlc3RDb25m
aWd1cmF0aW9uIGZvciB0aGUgcG9ydC4iIiIKICAgICAgICAgaWYgbm90IHNlbGYuX3Rlc3RfY29u
ZmlndXJhdGlvbjoKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfY29uZmlndXJhdGlvbiA9IFRlc3RD
b25maWd1cmF0aW9uKHNlbGYuX3ZlcnNpb24sIHNlbGYuYXJjaGl0ZWN0dXJlKCksIHNlbGYuX29w
dGlvbnMuY29uZmlndXJhdGlvbi5sb3dlcigpKQorICAgICAgICAgICAgc2VsZi5fdGVzdF9jb25m
aWd1cmF0aW9uID0gVGVzdENvbmZpZ3VyYXRpb24oc2VsZi52ZXJzaW9uX25hbWUoKSwgc2VsZi5h
cmNoaXRlY3R1cmUoKSwgc2VsZi5fb3B0aW9ucy5jb25maWd1cmF0aW9uLmxvd2VyKCkpCiAgICAg
ICAgIHJldHVybiBzZWxmLl90ZXN0X2NvbmZpZ3VyYXRpb24KIAogICAgICMgRklYTUU6IEJlbG9u
Z3Mgb24gYSBQbGF0Zm9ybSBvYmplY3QuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZGFyd2luX3Rlc3RjYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHkJKHJldmlzaW9uIDIyNTc2MSkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHkJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAgZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrTwog
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0Zp
bGVTeXN0ZW0KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW9jayBpbXBv
cnQgTW9ja0V4ZWN1dGl2ZSwgTW9ja0V4ZWN1dGl2ZTIsIE1vY2tQcm9jZXNzLCBTY3JpcHRFcnJv
cgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9j
a1N5c3RlbUhvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW1wb3J0
IFZlcnNpb25OYW1lTWFwCiAKIAogY2xhc3MgRGFyd2luVGVzdChwb3J0X3Rlc3RjYXNlLlBvcnRU
ZXN0Q2FzZSk6CkBAIC00MSw3ICs0Miw3IEBAIGNsYXNzIERhcndpblRlc3QocG9ydF90ZXN0Y2Fz
ZS5Qb3J0VGVzdEMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfcG9ydChvcHRp
b25zPU1vY2tPcHRpb25zKGd1YXJkX21hbGxvYz1UcnVlKSkuZGVmYXVsdF90aW1lb3V0X21zKCks
IDM1MDAwMCkKIAogICAgIGRlZiBhc3NlcnRfbmFtZShzZWxmLCBwb3J0X25hbWUsIG9zX3ZlcnNp
b25fc3RyaW5nLCBleHBlY3RlZCk6Ci0gICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdChvc19u
YW1lPXNlbGYub3NfbmFtZSwgb3NfdmVyc2lvbj1vc192ZXJzaW9uX3N0cmluZykKKyAgICAgICAg
aG9zdCA9IE1vY2tTeXN0ZW1Ib3N0KG9zX25hbWU9c2VsZi5vc19uYW1lLCBvc192ZXJzaW9uPVZl
cnNpb25OYW1lTWFwLm1hcCgpLmZyb21fbmFtZShvc192ZXJzaW9uX3N0cmluZylbMV0pCiAgICAg
ICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1wb3J0X25hbWUp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHBvcnQubmFtZSgpKQogCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeV91bml0dGVzdC5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeV91bml0dGVzdC5weQko
cmV2aXNpb24gMjI1NzYxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3Rvcnlf
dW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxMSBAQCBpbXBvcnQgdW5p
dHRlc3QKIAogZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwog
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5
c3RlbUhvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIAog
ZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBmYWN0b3J5CiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1w
b3J0IGd0awogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBtYWMKLWZyb20gd2Via2l0cHkucG9y
dCBpbXBvcnQgdGVzdAogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCB3aW4KIAogCkBAIC01NSwx
NSArNTUsMTUgQEAgY2xhc3MgRmFjdG9yeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRl
ZiB0ZXN0X21hYyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9J21h
Yy1saW9uJywgY2xzPW1hYy5NYWNQb3J0KQogICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRf
bmFtZT0nbWFjLWxpb24td2syJywgY2xzPW1hYy5NYWNQb3J0KQotICAgICAgICBzZWxmLmFzc2Vy
dF9wb3J0KHBvcnRfbmFtZT0nbWFjJywgb3NfbmFtZT0nbWFjJywgb3NfdmVyc2lvbj0nbGlvbics
IGNscz1tYWMuTWFjUG9ydCkKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9Tm9u
ZSwgIG9zX25hbWU9J21hYycsIG9zX3ZlcnNpb249J2xpb24nLCBjbHM9bWFjLk1hY1BvcnQpCisg
ICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPSdtYWMnLCBvc19uYW1lPSdtYWMnLCBv
c192ZXJzaW9uPVZlcnNpb24oMTAsIDcpLCBjbHM9bWFjLk1hY1BvcnQpCisgICAgICAgIHNlbGYu
YXNzZXJ0X3BvcnQocG9ydF9uYW1lPU5vbmUsICBvc19uYW1lPSdtYWMnLCBvc192ZXJzaW9uPVZl
cnNpb24oMTAsIDcpLCBjbHM9bWFjLk1hY1BvcnQpCiAKICAgICBkZWYgdGVzdF93aW4oc2VsZik6
CiAgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPSd3aW4teHAnLCBjbHM9d2luLldp
blBvcnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPSd3aW4teHAtd2syJywg
Y2xzPXdpbi5XaW5Qb3J0KQotICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT0nd2lu
Jywgb3NfbmFtZT0nd2luJywgb3NfdmVyc2lvbj0neHAnLCBjbHM9d2luLldpblBvcnQpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPU5vbmUsIG9zX25hbWU9J3dpbicsIG9zX3Zl
cnNpb249J3hwJywgY2xzPXdpbi5XaW5Qb3J0KQotICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBv
cnRfbmFtZT1Ob25lLCBvc19uYW1lPSd3aW4nLCBvc192ZXJzaW9uPSd4cCcsIG9wdGlvbnM9c2Vs
Zi53ZWJraXRfb3B0aW9ucywgY2xzPXdpbi5XaW5Qb3J0KQorICAgICAgICBzZWxmLmFzc2VydF9w
b3J0KHBvcnRfbmFtZT0nd2luJywgb3NfbmFtZT0nd2luJywgb3NfdmVyc2lvbj1WZXJzaW9uKDUs
IDEpLCBjbHM9d2luLldpblBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1l
PU5vbmUsIG9zX25hbWU9J3dpbicsIG9zX3ZlcnNpb249VmVyc2lvbig1LCAxKSwgY2xzPXdpbi5X
aW5Qb3J0KQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT1Ob25lLCBvc19uYW1l
PSd3aW4nLCBvc192ZXJzaW9uPVZlcnNpb24oNSwgMSksIG9wdGlvbnM9c2VsZi53ZWJraXRfb3B0
aW9ucywgY2xzPXdpbi5XaW5Qb3J0KQogCiAgICAgZGVmIHRlc3RfZ3RrKHNlbGYpOgogICAgICAg
ICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT0nZ3RrJywgY2xzPWd0ay5HdGtQb3J0KQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5CShyZXZpc2lvbiAyMjU3NjEpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyAr
MTY4LDcgQEAgY2xhc3MgR3RrUG9ydChQb3J0KToKICAgICBkZWYgX2dlbmVyYXRlX2FsbF90ZXN0
X2NvbmZpZ3VyYXRpb25zKHNlbGYpOgogICAgICAgICBjb25maWd1cmF0aW9ucyA9IFtdCiAgICAg
ICAgIGZvciBidWlsZF90eXBlIGluIHNlbGYuQUxMX0JVSUxEX1RZUEVTOgotICAgICAgICAgICAg
Y29uZmlndXJhdGlvbnMuYXBwZW5kKFRlc3RDb25maWd1cmF0aW9uKHZlcnNpb249c2VsZi5fdmVy
c2lvbiwgYXJjaGl0ZWN0dXJlPSd4ODYnLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQorICAgICAg
ICAgICAgY29uZmlndXJhdGlvbnMuYXBwZW5kKFRlc3RDb25maWd1cmF0aW9uKHZlcnNpb249c2Vs
Zi52ZXJzaW9uX25hbWUoKSwgYXJjaGl0ZWN0dXJlPSd4ODYnLCBidWlsZF90eXBlPWJ1aWxkX3R5
cGUpKQogICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbnMKIAogICAgIGRlZiBfcGF0aF90b19k
cml2ZXIoc2VsZik6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHJldmlzaW9u
IDIyNTc2MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDYgKzI1LDcgQEAgaW1wb3J0IHRyYWNlYmFjawogCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKIGZyb20gd2Via2l0cHkuY29tbW9uLnZl
cnNpb24gaW1wb3J0IFZlcnNpb24KK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9t
YXAgaW1wb3J0IFZlcnNpb25OYW1lTWFwCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2Rl
bHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBUZXN0Q29uZmlndXJhdGlvbgogZnJvbSB3ZWJr
aXRweS5wb3J0LmNvbmZpZyBpbXBvcnQgYXBwbGVfYWRkaXRpb25zCiBmcm9tIHdlYmtpdHB5LnBv
cnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Qb3J0CkBAIC0zNiw2ICszNyw5IEBAIF9sb2cgPSBsb2dn
aW5nLmdldExvZ2dlcihfX25hbWVfXykKIGNsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CiAgICAg
cG9ydF9uYW1lID0gImlvcyIKIAorICAgIFZFUlNJT05fTUlOID0gVmVyc2lvbigxMSkKKyAgICBW
RVJTSU9OX01BWCA9IFZlcnNpb24oMTIpCisKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwg
cG9ydF9uYW1lLCAqKmt3YXJncyk6CiAgICAgICAgIHN1cGVyKElPU1BvcnQsIHNlbGYpLl9faW5p
dF9fKGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVy
X3Byb2Nlc3NfY29uc3RydWN0b3IgPSBTaW11bGF0b3JQcm9jZXNzCkBAIC00NSw2ICs0OSwxMSBA
QCBjbGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgogICAgIGRlZiBfZGV2aWNlX2Zvcl93b3JrZXJf
bnVtYmVyX21hcChzZWxmKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCisg
ICAgZGVmIHZlcnNpb25fbmFtZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fb3NfdmVyc2lvbiBp
cyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIFZlcnNpb25O
YW1lTWFwLm1hcChzZWxmLmhvc3QucGxhdGZvcm0pLnRvX25hbWUoc2VsZi5fb3NfdmVyc2lvbiwg
cGxhdGZvcm09SU9TUG9ydC5wb3J0X25hbWUpCisKICAgICBkZWYgZHJpdmVyX2NtZF9saW5lX2Zv
cl9sb2dnaW5nKHNlbGYpOgogICAgICAgICAjIEF2b2lkIGNyZWF0aW5nL2Nvbm5lY3RpbmcgdG8g
ZGV2aWNlcyBqdXN0IGZvciBsb2dnaW5nIHRoZSBjb21tYW5kbGluZS4KICAgICAgICAgc2VsZi5f
cHJpbnRpbmdfY21kX2xpbmUgPSBUcnVlCkBAIC02Myw3ICs3Miw3IEBAIGNsYXNzIElPU1BvcnQo
RGFyd2luUG9ydCk6CiAgICAgICAgIGNvbmZpZ3VyYXRpb25zID0gW10KICAgICAgICAgZm9yIGJ1
aWxkX3R5cGUgaW4gc2VsZi5BTExfQlVJTERfVFlQRVM6CiAgICAgICAgICAgICBmb3IgYXJjaGl0
ZWN0dXJlIGluIHNlbGYuQVJDSElURUNUVVJFUzoKLSAgICAgICAgICAgICAgICBjb25maWd1cmF0
aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVyc2lvbj1zZWxmLl92ZXJzaW9uLCBhcmNo
aXRlY3R1cmU9YXJjaGl0ZWN0dXJlLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQorICAgICAgICAg
ICAgICAgIGNvbmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJhdGlvbih2ZXJzaW9uPXNl
bGYudmVyc2lvbl9uYW1lKCksIGFyY2hpdGVjdHVyZT1hcmNoaXRlY3R1cmUsIGJ1aWxkX3R5cGU9
YnVpbGRfdHlwZSkpCiAgICAgICAgIHJldHVybiBjb25maWd1cmF0aW9ucwogCiAgICAgQG1lbW9p
emVkCkBAIC04OCwyMiArOTcsNiBAQCBjbGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgogICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RpbmdfZGV2aWNlKHdvcmtlcl9udW1iZXIpCiAgICAgICAg
IHJldHVybiBzZWxmLl9jdXJyZW50X2RldmljZQogCi0gICAgZGVmIF9hcHBsZV9hZGRpdGlvbnNf
cGF0aChzZWxmLCBuYW1lKToKLSAgICAgICAgaWYgbmFtZSA9PSAnd2syJzoKLSAgICAgICAgICAg
IHJldHVybiBOb25lCi0gICAgICAgIHNwbGl0X25hbWUgPSBuYW1lLnNwbGl0KCctJykKLSAgICAg
ICAgb3NfaW5kZXggPSAtMQotICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMik6Ci0gICAgICAgICAg
ICBpZiBzcGxpdF9uYW1lW29zX2luZGV4XSA9PSAnd2sxJyBvciBzcGxpdF9uYW1lW29zX2luZGV4
XSA9PSAnd2syJyBvciBzcGxpdF9uYW1lW29zX2luZGV4XSA9PSAnc2ltdWxhdG9yJyBvciBzcGxp
dF9uYW1lW29zX2luZGV4XSA9PSAnZGV2aWNlJzoKLSAgICAgICAgICAgICAgICBvc19pbmRleCAt
PSAxCi0gICAgICAgIGlmIHNwbGl0X25hbWVbb3NfaW5kZXhdICE9IHNwbGl0X25hbWVbMF06Ci0g
ICAgICAgICAgICBvc19uYW1lID0gYXBwbGVfYWRkaXRpb25zKCkuaW9zX29zX25hbWUoc3BsaXRf
bmFtZVtvc19pbmRleF0pCi0gICAgICAgICAgICBpZiBub3Qgb3NfbmFtZToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgc3BsaXRfbmFtZVtvc19pbmRleF0gPSBvc19u
YW1lCi0gICAgICAgIG5hbWUgPSAnLScuam9pbihzcGxpdF9uYW1lKQotICAgICAgICByZXR1cm4g
c2VsZi5fZmlsZXN5c3RlbS5qb2luKGFwcGxlX2FkZGl0aW9ucygpLmxheW91dF90ZXN0c19wYXRo
KCksIG5hbWUpCi0KICAgICBAbWVtb2l6ZWQKICAgICBkZWYgZGVmYXVsdF9iYXNlbGluZV9zZWFy
Y2hfcGF0aChzZWxmKToKICAgICAgICAgd2tfc3RyaW5nID0gJ3drMScKQEAgLTExMSwzMCArMTA0
LDQyIEBAIGNsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgICAgICB3a19zdHJpbmcg
PSAnd2syJwogICAgICAgICAjIElmIHdlIGRvbid0IGhhdmUgYSBzcGVjaWZpZWQgdmVyc2lvbiwg
dGhhdCBtZWFucyB3ZSB1c2luZyB0aGUgcG9ydCB3aXRob3V0IGFuIFNESy4KICAgICAgICAgIyBU
aGlzIHVzdWFsbHkgbWVhbnMgd2UncmUgZG9pbmcgc29tZSB0eXBlIG9mIHRlc3RpbmcuSW4gdGhp
cyBjYXNlLCBkb24ndCBhZGQgdmVyc2lvbiBmYWxsYmFja3MKLSAgICAgICAgZmFsbGJhY2tfbmFt
ZXMgPSBbXQorICAgICAgICBleHBlY3RhdGlvbnMgPSBbXQorICAgICAgICBpZiBhcHBsZV9hZGRp
dGlvbnMoKSBhbmQgc2VsZi5pb3NfdmVyc2lvbigpOgorICAgICAgICAgICAgYXBwbGVfbmFtZSA9
IFZlcnNpb25OYW1lTWFwLm1hcChzZWxmLmhvc3QucGxhdGZvcm0pLnRvX25hbWUoc2VsZi5pb3Nf
dmVyc2lvbigpLCBwbGF0Zm9ybT1JT1NQb3J0LnBvcnRfbmFtZSwgdGFibGU9J2ludGVybmFsJyku
bG93ZXIoKS5yZXBsYWNlKCcgJywgJycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcHBs
ZV9uYW1lID0gTm9uZQogICAgICAgICBpZiBzZWxmLmlvc192ZXJzaW9uKCk6Ci0gICAgICAgICAg
ICBmYWxsYmFja19uYW1lcy5hcHBlbmQoJ3t9LXt9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUs
IHNlbGYuaW9zX3ZlcnNpb24oKS5tYWpvciwgd2tfc3RyaW5nKSkKLSAgICAgICAgICAgIGZhbGxi
YWNrX25hbWVzLmFwcGVuZCgne30te30nLmZvcm1hdChzZWxmLnBvcnRfbmFtZSwgc2VsZi5pb3Nf
dmVyc2lvbigpLm1ham9yKSkKLSAgICAgICAgZmFsbGJhY2tfbmFtZXMuYXBwZW5kKCd7fS17fScu
Zm9ybWF0KHNlbGYucG9ydF9uYW1lLCB3a19zdHJpbmcpKQotICAgICAgICBmYWxsYmFja19uYW1l
cy5hcHBlbmQoc2VsZi5wb3J0X25hbWUpCisgICAgICAgICAgICBpZiBhcHBsZV9uYW1lOgorICAg
ICAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fYXBwbGVfYmFzZWxpbmVfcGF0
aCgne30te30te30nLmZvcm1hdChzZWxmLnBvcnRfbmFtZSwgYXBwbGVfbmFtZSwgd2tfc3RyaW5n
KSkpCisgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX3dlYmtpdF9iYXNlbGlu
ZV9wYXRoKCd7fS17fS17fScuZm9ybWF0KHNlbGYucG9ydF9uYW1lLCBzZWxmLmlvc192ZXJzaW9u
KCkubWFqb3IsIHdrX3N0cmluZykpKQorICAgICAgICAgICAgaWYgYXBwbGVfbmFtZToKKyAgICAg
ICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3BhdGgo
J3t9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIGFwcGxlX25hbWUpKSkKKyAgICAgICAgICAg
IGV4cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3t9LXt9Jy5m
b3JtYXQoc2VsZi5wb3J0X25hbWUsIHNlbGYuaW9zX3ZlcnNpb24oKS5tYWpvcikpKQorCisgICAg
ICAgIGlmIGFwcGxlX2FkZGl0aW9ucygpOgorICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVu
ZChzZWxmLl9hcHBsZV9iYXNlbGluZV9wYXRoKCd7fS17fScuZm9ybWF0KHNlbGYucG9ydF9uYW1l
LCB3a19zdHJpbmcpKSkKKyAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl93ZWJraXRf
YmFzZWxpbmVfcGF0aCgne30te30nLmZvcm1hdChzZWxmLnBvcnRfbmFtZSwgd2tfc3RyaW5nKSkp
CisgICAgICAgIGlmIGFwcGxlX2FkZGl0aW9ucygpOgorICAgICAgICAgICAgZXhwZWN0YXRpb25z
LmFwcGVuZChzZWxmLl9hcHBsZV9iYXNlbGluZV9wYXRoKHNlbGYucG9ydF9uYW1lKSkKKyAgICAg
ICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aChzZWxmLnBv
cnRfbmFtZSkpCisKICAgICAgICAgaWYgc2VsZi5pb3NfdmVyc2lvbigpOgotICAgICAgICAgICAg
ZmFsbGJhY2tfbmFtZXMuYXBwZW5kKCd7fS17fScuZm9ybWF0KElPU1BvcnQucG9ydF9uYW1lLCBz
ZWxmLmlvc192ZXJzaW9uKCkubWFqb3IpKQotICAgICAgICBmYWxsYmFja19uYW1lcy5hcHBlbmQo
J3t9LXt9Jy5mb3JtYXQoSU9TUG9ydC5wb3J0X25hbWUsIHdrX3N0cmluZykpCi0gICAgICAgIGZh
bGxiYWNrX25hbWVzLmFwcGVuZChJT1NQb3J0LnBvcnRfbmFtZSkKKyAgICAgICAgICAgIGlmIGFw
cGxlX25hbWU6CisgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl9hcHBs
ZV9iYXNlbGluZV9wYXRoKCd7fS17fScuZm9ybWF0KElPU1BvcnQucG9ydF9uYW1lLCBhcHBsZV9u
YW1lKSkpCisgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX3dlYmtpdF9iYXNl
bGluZV9wYXRoKCd7fS17fScuZm9ybWF0KElPU1BvcnQucG9ydF9uYW1lLCBzZWxmLmlvc192ZXJz
aW9uKCkubWFqb3IpKSkKKworICAgICAgICBpZiBhcHBsZV9hZGRpdGlvbnMoKToKKyAgICAgICAg
ICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fYXBwbGVfYmFzZWxpbmVfcGF0aCgne30te30n
LmZvcm1hdChJT1NQb3J0LnBvcnRfbmFtZSwgd2tfc3RyaW5nKSkpCisgICAgICAgIGV4cGVjdGF0
aW9ucy5hcHBlbmQoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3t9LXt9Jy5mb3JtYXQoSU9T
UG9ydC5wb3J0X25hbWUsIHdrX3N0cmluZykpKQorICAgICAgICBpZiBhcHBsZV9hZGRpdGlvbnMo
KToKKyAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fYXBwbGVfYmFzZWxpbmVf
cGF0aChJT1NQb3J0LnBvcnRfbmFtZSkpCisgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2Vs
Zi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoSU9TUG9ydC5wb3J0X25hbWUpKQogCiAgICAgICAgIGlm
IHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6Ci0gICAgICAgICAgICBmYWxs
YmFja19uYW1lcy5hcHBlbmQoJ3drMicpCisgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5k
KHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKCd3azInKSkKIAotICAgICAgICB3ZWJraXRfZXhw
ZWN0YXRpb25zID0gbWFwKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoLCBmYWxsYmFja19uYW1l
cykKLSAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCkgYW5kIGdldGF0dHIoYXBwbGVfYWRkaXRp
b25zKCksICJsYXlvdXRfdGVzdHNfcGF0aCIsIE5vbmUpOgotICAgICAgICAgICAgYXBwbGVfZXhw
ZWN0YXRpb25zID0gbWFwKHNlbGYuX2FwcGxlX2FkZGl0aW9uc19wYXRoLCBmYWxsYmFja19uYW1l
cykKLSAgICAgICAgICAgIHJlc3VsdCA9IFtdCi0gICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uo
bGVuKHdlYmtpdF9leHBlY3RhdGlvbnMpKToKLSAgICAgICAgICAgICAgICBpZiBhcHBsZV9leHBl
Y3RhdGlvbnNbaV06Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYXBwbGVfZXhw
ZWN0YXRpb25zW2ldKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQod2Via2l0X2V4cGVj
dGF0aW9uc1tpXSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQKLSAgICAgICAgcmV0dXJuIHdl
YmtpdF9leHBlY3RhdGlvbnMKKyAgICAgICAgcmV0dXJuIGV4cGVjdGF0aW9ucwogCiAgICAgZGVm
IHRlc3RfZXhwZWN0YXRpb25zX2ZpbGVfcG9zaXRpb24oc2VsZik6CiAgICAgICAgIHJldHVybiA0
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5weQkocmV2aXNp
b24gMjI1NzYxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTEwOSw5ICsxMDksNyBAQCBjbGFzcyBJT1NEZXZpY2VQb3J0KElP
U1BvcnQpOgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpZiBkZXZpY2UucGxh
dGZvcm0ub3NfdmVyc2lvbiAhPSB2ZXJzaW9uOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBS
dW50aW1lRXJyb3IoJ011bHRpcGxlIGNvbm5lY3RlZCBkZXZpY2VzIGhhdmUgZGlmZmVyZW50IGlP
UyB2ZXJzaW9ucycpCi0gICAgICAgIGlmIHZlcnNpb246Ci0gICAgICAgICAgICByZXR1cm4gVmVy
c2lvbk5hbWVNYXAubWFwKHNlbGYuaG9zdC5wbGF0Zm9ybSkuZnJvbV9uYW1lKHZlcnNpb24pWzFd
Ci0gICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiB2ZXJzaW9uCiAKICAgICAjIEZJ
WE1FOiBUaGVzZSBuZWVkIGRldmljZSBpbXBsZW1lbnRhdGlvbnMgPHJkYXI6Ly9wcm9ibGVtLzMw
NDk3OTkxPi4KICAgICBkZWYgY2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJv
Y2Vzc19waWQpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2Vf
dW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lv
c19kZXZpY2VfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIyNTc2MSkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxNSArMzEsMTAgQEAgZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBwb3J0X3Rlc3RjYXNlCiAK
IGNsYXNzIElPU0RldmljZVRlc3QoaW9zX3Rlc3RjYXNlLklPU1Rlc3QpOgogICAgIG9zX25hbWUg
PSAnaW9zJwotICAgIG9zX3ZlcnNpb24gPSAnJworICAgIG9zX3ZlcnNpb24gPSBOb25lCiAgICAg
cG9ydF9uYW1lID0gJ2lvcy1kZXZpY2UnCiAgICAgcG9ydF9tYWtlciA9IElPU0RldmljZVBvcnQK
IAotICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0X25hbWU9Tm9uZSwgb3B0
aW9ucz1Ob25lLCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNpb249Tm9uZSwgKiprd2FyZ3MpOgotICAg
ICAgICBwb3J0ID0gc3VwZXIoSU9TRGV2aWNlVGVzdCwgc2VsZikubWFrZV9wb3J0KGhvc3Q9aG9z
dCwgcG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCBvc19uYW1lPW9zX25hbWUs
IHNfdmVyc2lvbj1vc192ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQotICAgICAgICBwb3J0LnNldF9v
cHRpb24oJ3ZlcnNpb24nLCAnMTEuMCcpCi0gICAgICAgIHJldHVybiBwb3J0Ci0KICAgICBkZWYg
dGVzdF9vcGVyYXRpbmdfc3lzdGVtKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdp
b3MtZGV2aWNlJywgc2VsZi5tYWtlX3BvcnQoKS5vcGVyYXRpbmdfc3lzdGVtKCkpCiAKQEAgLTkz
LDE1ICs4OCwxNSBAQCBjbGFzcyBJT1NEZXZpY2VUZXN0KGlvc190ZXN0Y2FzZS5JT1NUZXN0CiAg
ICAgZGVmIHRlc3RfbGF5b3V0X3Rlc3Rfc2VhcmNocGF0aF93aXRoX2FwcGxlX2FkZGl0aW9ucyhz
ZWxmKToKICAgICAgICAgd2l0aCBwb3J0X3Rlc3RjYXNlLmJpbmRfbW9ja19hcHBsZV9hZGRpdGlv
bnMoKToKICAgICAgICAgICAgIHNlYXJjaF9wYXRoID0gc2VsZi5tYWtlX3BvcnQoKS5kZWZhdWx0
X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hf
cGF0aFswXSwgJy9hZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3MtZGV2aWNlLWFkZC0xMS13azEn
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzBdLCAnL2FkZGl0aW9uYWxf
dGVzdGluZ19wYXRoL2lvcy1kZXZpY2UtYWRkLWlvczExLXdrMScpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VhcmNoX3BhdGhbMV0sICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9pb3MtZGV2aWNlLTExLXdrMScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNo
X3BhdGhbMl0sICcvYWRkaXRpb25hbF90ZXN0aW5nX3BhdGgvaW9zLWRldmljZS1hZGQtMTEnKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzJdLCAnL2FkZGl0aW9uYWxfdGVz
dGluZ19wYXRoL2lvcy1kZXZpY2UtYWRkLWlvczExJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWFyY2hfcGF0aFszXSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2lv
cy1kZXZpY2UtMTEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzRdLCAn
L2FkZGl0aW9uYWxfdGVzdGluZ19wYXRoL2lvcy1kZXZpY2Utd2sxJykKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzZWFyY2hfcGF0aFs1XSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3Bs
YXRmb3JtL2lvcy1kZXZpY2Utd2sxJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hf
cGF0aFs2XSwgJy9hZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3MtZGV2aWNlJykKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFs3XSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRl
c3RzL3BsYXRmb3JtL2lvcy1kZXZpY2UnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJj
aF9wYXRoWzhdLCAnL2FkZGl0aW9uYWxfdGVzdGluZ19wYXRoL2lvcy1hZGQtMTEnKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzhdLCAnL2FkZGl0aW9uYWxfdGVzdGluZ19w
YXRoL2lvcy1hZGQtaW9zMTEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRo
WzldLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLTExJykKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFsxMF0sICcvYWRkaXRpb25hbF90ZXN0aW5n
X3BhdGgvaW9zLXdrMScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbMTFd
LCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLXdrMScpCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvci5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvci5weQkocmV2aXNpb24g
MjI1NzYxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3IucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTI0Niw3ICsyNDYsNyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0
KElPU1BvcnQpOgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLl9leGVj
dXRpdmUucnVuX2NvbW1hbmQoWyd4Y3J1bicsICdzaW1jdGwnLCAnYm9vdCcsIGRldmljZV91ZGlk
XSkKIAotICAgICAgICAgICAgaWYgbWFjX29zX3ZlcnNpb24gaW4gWydlbGNhcGl0YW4nLCAneW9z
ZW1pdGUnLCAnbWF2ZXJpY2tzJ106CisgICAgICAgICAgICBpZiBtYWNfb3NfdmVyc2lvbiA8IFZl
cnNpb24oMTAsIDExKToKICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDIuNSkKIAogICAgICAg
ICBpZiBub3Qgc2VsZi51c2VfbXVsdGlwbGVfc2ltdWxhdG9yX2FwcHMoKToKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yX3VuaXR0ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yX3VuaXR0ZXN0
LnB5CShyZXZpc2lvbiAyMjU3NjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9z
X3NpbXVsYXRvcl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjAsMTIgKzIwLDExIEBA
CiAjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWltcG9ydCB0aW1lCi0K
IGZyb20gd2Via2l0cHkucG9ydC5pb3Nfc2ltdWxhdG9yIGltcG9ydCBJT1NTaW11bGF0b3JQb3J0
CiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGlvc190ZXN0Y2FzZQogZnJvbSB3ZWJraXRweS5w
b3J0IGltcG9ydCBwb3J0X3Rlc3RjYXNlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0
cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQorZnJvbSB3ZWJraXRweS5jb21tb24udmVy
c2lvbiBpbXBvcnQgVmVyc2lvbgogZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBN
b2NrT3B0aW9ucwogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGlt
cG9ydCBNb2NrRXhlY3V0aXZlMiwgU2NyaXB0RXJyb3IKIApAQCAtMzMsMTIgKzMyLDEyIEBAIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW8KIGNsYXNzIElPU1NpbXVsYXRv
clRlc3QoaW9zX3Rlc3RjYXNlLklPU1Rlc3QpOgogICAgICMgRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzMxMDcKICAgICBvc19uYW1lID0gJ21hYycKLSAg
ICBvc192ZXJzaW9uID0gJycKKyAgICBvc192ZXJzaW9uID0gTm9uZQogICAgIHBvcnRfbmFtZSA9
ICdpb3Mtc2ltdWxhdG9yJwogICAgIHBvcnRfbWFrZXIgPSBJT1NTaW11bGF0b3JQb3J0CiAKLSAg
ICBkZWYgbWFrZV9wb3J0KHNlbGYsIGhvc3Q9Tm9uZSwgcG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9
Tm9uZSwgb3NfbmFtZT1Ob25lLCBvc192ZXJzaW9uPU5vbmUsICoqa3dhcmdzKToKLSAgICAgICAg
cG9ydCA9IHN1cGVyKElPU1NpbXVsYXRvclRlc3QsIHNlbGYpLm1ha2VfcG9ydChob3N0PWhvc3Qs
IHBvcnRfbmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3NfbmFtZT1vc19uYW1lLCBz
X3ZlcnNpb249b3NfdmVyc2lvbiwga3dhcmdzPWt3YXJncykKKyAgICBkZWYgbWFrZV9wb3J0KHNl
bGYsIGhvc3Q9Tm9uZSwgcG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSwgb3NfbmFtZT1Ob25l
LCBvc192ZXJzaW9uPVZlcnNpb24oMTEpLCAqKmt3YXJncyk6CisgICAgICAgIHBvcnQgPSBzdXBl
cihJT1NTaW11bGF0b3JUZXN0LCBzZWxmKS5tYWtlX3BvcnQoaG9zdD1ob3N0LCBwb3J0X25hbWU9
cG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMsIG9zX25hbWU9b3NfbmFtZSwgb3NfdmVyc2lvbj1v
c192ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQogICAgICAgICBwb3J0LnNldF9vcHRpb24oJ2NoaWxk
X3Byb2Nlc3NlcycsIDEpCiAgICAgICAgIHJldHVybiBwb3J0CiAKQEAgLTkyLDE1ICs5MSwxNSBA
QCBjbGFzcyBJT1NTaW11bGF0b3JUZXN0KGlvc190ZXN0Y2FzZS5JT1NUCiAgICAgZGVmIHRlc3Rf
bGF5b3V0X3Rlc3Rfc2VhcmNocGF0aF93aXRoX2FwcGxlX2FkZGl0aW9ucyhzZWxmKToKICAgICAg
ICAgd2l0aCBwb3J0X3Rlc3RjYXNlLmJpbmRfbW9ja19hcHBsZV9hZGRpdGlvbnMoKToKICAgICAg
ICAgICAgIHNlYXJjaF9wYXRoID0gc2VsZi5tYWtlX3BvcnQoKS5kZWZhdWx0X2Jhc2VsaW5lX3Nl
YXJjaF9wYXRoKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFswXSwgJy9h
ZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3Mtc2ltdWxhdG9yLWFkZC04LXdrMScpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbMV0sICcvbW9jay1jaGVja291dC9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yLTgtd2sxJykKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzZWFyY2hfcGF0aFsyXSwgJy9hZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3Mtc2ltdWxh
dG9yLWFkZC04JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFszXSwgJy9t
b2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3ItOCcpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbMF0sICcvYWRkaXRpb25hbF90ZXN0aW5n
X3BhdGgvaW9zLXNpbXVsYXRvci1hZGQtaW9zMTEtd2sxJykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzZWFyY2hfcGF0aFsxXSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3Jt
L2lvcy1zaW11bGF0b3ItMTEtd2sxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hf
cGF0aFsyXSwgJy9hZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3Mtc2ltdWxhdG9yLWFkZC1pb3Mx
MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbM10sICcvbW9jay1jaGVj
a291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yLTExJykKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFs0XSwgJy9hZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9p
b3Mtc2ltdWxhdG9yLXdrMScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhb
NV0sICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yLXdr
MScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbNl0sICcvYWRkaXRpb25h
bF90ZXN0aW5nX3BhdGgvaW9zLXNpbXVsYXRvcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VhcmNoX3BhdGhbN10sICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3Mt
c2ltdWxhdG9yJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFs4XSwgJy9h
ZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3MtYWRkLTgnKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNlYXJjaF9wYXRoWzldLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
aW9zLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzhdLCAnL2FkZGl0
aW9uYWxfdGVzdGluZ19wYXRoL2lvcy1hZGQtaW9zMTEnKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNlYXJjaF9wYXRoWzldLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
aW9zLTExJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFsxMF0sICcvYWRk
aXRpb25hbF90ZXN0aW5nX3BhdGgvaW9zLXdrMScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VhcmNoX3BhdGhbMTFdLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9z
LXdrMScpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3Rlc3RjYXNlLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdGVzdGNhc2Uu
cHkJKHJldmlzaW9uIDIyNTc2MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nf
dGVzdGNhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTIwLDEzICsyMCwxOCBAQAogIyBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJz
aW9uIGltcG9ydCBWZXJzaW9uCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGRhcndpbl90ZXN0
Y2FzZQotZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwogCiAK
IGNsYXNzIElPU1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndpblRlc3QpOgogICAgIGRpc2FibGVf
c2V0dXAgPSBUcnVlCiAKKyAgICBkZWYgbWFrZV9wb3J0KHNlbGYsIGhvc3Q9Tm9uZSwgcG9ydF9u
YW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSwgb3NfbmFtZT1Ob25lLCBvc192ZXJzaW9uPVZlcnNpb24o
MTEpLCAqKmt3YXJncyk6CisgICAgICAgIHBvcnQgPSBzdXBlcihJT1NUZXN0LCBzZWxmKS5tYWtl
X3BvcnQoaG9zdD1ob3N0LCBwb3J0X25hbWU9cG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMsIG9z
X25hbWU9b3NfbmFtZSwgb3NfdmVyc2lvbj1Ob25lLCBrd2FyZ3M9a3dhcmdzKQorICAgICAgICBw
b3J0LnNldF9vcHRpb24oJ3ZlcnNpb24nLCBzdHIob3NfdmVyc2lvbikpCisgICAgICAgIHJldHVy
biBwb3J0CisKICAgICBkZWYgdGVzdF9kcml2ZXJfbmFtZShzZWxmKToKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzZWxmLm1ha2VfcG9ydCgpLmRyaXZlcl9uYW1lKCksICdEdW1wUmVuZGVyVHJl
ZS5hcHAnKQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWMucHkJKHJldmlzaW9uIDIy
NTc2MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWMucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDExICsyOSwxMiBAQAogCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCi1pbXBv
cnQgdGltZQogaW1wb3J0IHJlCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9y
dCBtZW1vaXplZAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQg
U2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24K
K2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFZlcnNpb25OYW1l
TWFwCiBmcm9tIHdlYmtpdHB5LnBvcnQuY29uZmlnIGltcG9ydCBhcHBsZV9hZGRpdGlvbnMKIGZy
b20gd2Via2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0IERhcndpblBvcnQKIApAQCAtNDMsNyArNDQs
OSBAQCBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiBjbGFzcyBNYWNQb3J0KERh
cndpblBvcnQpOgogICAgIHBvcnRfbmFtZSA9ICJtYWMiCiAKLSAgICBWRVJTSU9OX0ZBTExCQUNL
X09SREVSID0gWydtYWMtc25vd2xlb3BhcmQnLCAnbWFjLWxpb24nLCAnbWFjLW1vdW50YWlubGlv
bicsICdtYWMtbWF2ZXJpY2tzJywgJ21hYy15b3NlbWl0ZScsICdtYWMtZWxjYXBpdGFuJywgJ21h
Yy1zaWVycmEnLCAnbWFjLWhpZ2hzaWVycmEnXQorICAgIFZFUlNJT05fTUlOID0gVmVyc2lvbigx
MCwgNikKKyAgICBWRVJTSU9OX01BWCA9IFZlcnNpb24oMTAsIDE0KQorCiAgICAgU0RLID0gJ21h
Y29zeCcKIAogICAgIEFSQ0hJVEVDVFVSRVMgPSBbJ3g4Nl82NCcsICd4ODYnXQpAQCAtNTIsNjYg
KzU1LDU4IEBAIGNsYXNzIE1hY1BvcnQoRGFyd2luUG9ydCk6CiAKICAgICBkZWYgX19pbml0X18o
c2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CiAgICAgICAgIERhcndpblBvcnQuX19p
bml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKLSAgICAgICAgc2VsZi5fb3Nf
dmVyc2lvbiA9IHBvcnRfbmFtZS5zcGxpdCgnLScpWzFdIGlmIHBvcnRfbmFtZS5zcGxpdCgnLScp
ID4gMSBlbHNlIHNlbGYuaG9zdC5wbGF0Zm9ybS5vc192ZXJzaW9uCisgICAgICAgIGlmIHBvcnRf
bmFtZS5zcGxpdCgnLScpID4gMToKKyAgICAgICAgICAgIHNlbGYuX29zX3ZlcnNpb24gPSBWZXJz
aW9uTmFtZU1hcC5tYXAoaG9zdC5wbGF0Zm9ybSkuZnJvbV9uYW1lKHBvcnRfbmFtZS5zcGxpdCgn
LScpWzFdKVsxXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fb3NfdmVyc2lvbiA9
IHNlbGYuaG9zdC5wbGF0Zm9ybS5vc192ZXJzaW9uCiAKICAgICBkZWYgX2J1aWxkX2RyaXZlcl9m
bGFncyhzZWxmKToKICAgICAgICAgcmV0dXJuIFsnQVJDSFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0
ZWN0dXJlKCkgPT0gJ3g4NicgZWxzZSBbXQogCi0gICAgZGVmIF9hcHBsZV9hZGRpdGlvbnNfcGF0
aChzZWxmLCBuYW1lKToKLSAgICAgICAgaWYgbmFtZSA9PSAnd2syJzoKLSAgICAgICAgICAgIHJl
dHVybiBOb25lCi0gICAgICAgIHNwbGl0X25hbWUgPSBuYW1lLnNwbGl0KCctJykKLSAgICAgICAg
b3NfaW5kZXggPSAtMQotICAgICAgICBpZiBzcGxpdF9uYW1lWy0xXSA9PSAnd2sxJyBvciBzcGxp
dF9uYW1lWy0xXSA9PSAnd2syJzoKLSAgICAgICAgICAgIG9zX2luZGV4ID0gLTIKLSAgICAgICAg
aWYgc3BsaXRfbmFtZVtvc19pbmRleF0gIT0gc3BsaXRfbmFtZVswXToKLSAgICAgICAgICAgIG9z
X25hbWUgPSBhcHBsZV9hZGRpdGlvbnMoKS5tYWNfb3NfbmFtZShzcGxpdF9uYW1lW29zX2luZGV4
XSkKLSAgICAgICAgICAgIGlmIG5vdCBvc19uYW1lOgotICAgICAgICAgICAgICAgIHJldHVybiBO
b25lCi0gICAgICAgICAgICBzcGxpdF9uYW1lW29zX2luZGV4XSA9IG9zX25hbWUKLSAgICAgICAg
bmFtZSA9ICctJy5qb2luKHNwbGl0X25hbWUpCi0gICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lz
dGVtLmpvaW4oYXBwbGVfYWRkaXRpb25zKCkubGF5b3V0X3Rlc3RzX3BhdGgoKSwgbmFtZSkKLQog
ICAgIEBtZW1vaXplZAogICAgIGRlZiBkZWZhdWx0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYp
OgotICAgICAgICBtYWNfdmVyc2lvbiA9ICdtYWMte30nLmZvcm1hdChzZWxmLl9vc192ZXJzaW9u
KQotICAgICAgICBpZiBtYWNfdmVyc2lvbi5lbmRzd2l0aChzZWxmLkZVVFVSRV9WRVJTSU9OKSBv
ciBtYWNfdmVyc2lvbiBub3QgaW4gc2VsZi5WRVJTSU9OX0ZBTExCQUNLX09SREVSOgotICAgICAg
ICAgICAgdmVyc2lvbl9mYWxsYmFjayA9IFttYWNfdmVyc2lvbl0KKyAgICAgICAgdmVyc2lvbl9u
YW1lX21hcCA9IFZlcnNpb25OYW1lTWFwLm1hcChzZWxmLmhvc3QucGxhdGZvcm0pCisgICAgICAg
IGlmIHNlbGYuX29zX3ZlcnNpb24gPCBzZWxmLlZFUlNJT05fTUlOIG9yIHNlbGYuX29zX3ZlcnNp
b24gPiBzZWxmLlZFUlNJT05fTUFYOgorICAgICAgICAgICAgdmVyc2lvbl9mYWxsYmFjayA9IFtz
ZWxmLl9vc192ZXJzaW9uXQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgdmVyc2lvbl9mYWxs
YmFjayA9IHNlbGYuVkVSU0lPTl9GQUxMQkFDS19PUkRFUltzZWxmLlZFUlNJT05fRkFMTEJBQ0tf
T1JERVIuaW5kZXgobWFjX3ZlcnNpb24pOi0xXQorICAgICAgICAgICAgc29ydGVkX3ZlcnNpb25z
ID0gc29ydGVkKHZlcnNpb25fbmFtZV9tYXAubWFwcGluZ19mb3JfcGxhdGZvcm0oKS52YWx1ZXMo
KSkKKyAgICAgICAgICAgIHZlcnNpb25fZmFsbGJhY2sgPSBzb3J0ZWRfdmVyc2lvbnNbc29ydGVk
X3ZlcnNpb25zLmluZGV4KHNlbGYuX29zX3ZlcnNpb24pOi0xXQogICAgICAgICB3a19zdHJpbmcg
PSAnd2sxJwogICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicp
OgogICAgICAgICAgICAgd2tfc3RyaW5nID0gJ3drMicKIAotICAgICAgICBmYWxsYmFja19uYW1l
cyA9IFtdCisgICAgICAgIGV4cGVjdGF0aW9ucyA9IFtdCiAgICAgICAgIGZvciB2ZXJzaW9uIGlu
IHZlcnNpb25fZmFsbGJhY2s6Ci0gICAgICAgICAgICBmYWxsYmFja19uYW1lcy5hcHBlbmQoJ3t9
LXt9Jy5mb3JtYXQodmVyc2lvbiwgd2tfc3RyaW5nKSkKLSAgICAgICAgICAgIGZhbGxiYWNrX25h
bWVzLmFwcGVuZCh2ZXJzaW9uKQotICAgICAgICBmYWxsYmFja19uYW1lcyA9IGZhbGxiYWNrX25h
bWVzICsgWwotICAgICAgICAgICAgJ3t9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIHdrX3N0
cmluZyksCi0gICAgICAgICAgICBzZWxmLnBvcnRfbmFtZSwKLSAgICAgICAgXQotICAgICAgICBp
ZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicpOgotICAgICAgICAgICAgZmFs
bGJhY2tfbmFtZXMuYXBwZW5kKCd3azInKQorICAgICAgICAgICAgdmVyc2lvbl9uYW1lID0gdmVy
c2lvbl9uYW1lX21hcC50b19uYW1lKHZlcnNpb24pLmxvd2VyKCkucmVwbGFjZSgnICcsICcnKQor
ICAgICAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCk6CisgICAgICAgICAgICAgICAgZXhwZWN0
YXRpb25zLmFwcGVuZChzZWxmLl9hcHBsZV9iYXNlbGluZV9wYXRoKCdtYWMte30te30nLmZvcm1h
dCh2ZXJzaW9uX25hbWVfbWFwLnRvX25hbWUodmVyc2lvbiwgdGFibGU9J2ludGVybmFsJykubG93
ZXIoKS5yZXBsYWNlKCcgJywgJycpLCB3a19zdHJpbmcpKSkKKyAgICAgICAgICAgIGV4cGVjdGF0
aW9ucy5hcHBlbmQoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21hYy17fS17fScuZm9ybWF0
KHZlcnNpb25fbmFtZSwgd2tfc3RyaW5nKSkpCisgICAgICAgICAgICBpZiBhcHBsZV9hZGRpdGlv
bnMoKToKKyAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jh
c2VsaW5lX3BhdGgoJ21hYy17fScuZm9ybWF0KHZlcnNpb25fbmFtZV9tYXAudG9fbmFtZSh2ZXJz
aW9uLCB0YWJsZT0naW50ZXJuYWwnKS5sb3dlcigpLnJlcGxhY2UoJyAnLCAnJykpKSkKKyAgICAg
ICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoJ21h
Yy17fScuZm9ybWF0KHZlcnNpb25fbmFtZSkpKQorCisgICAgICAgIGlmIGFwcGxlX2FkZGl0aW9u
cygpOgorICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl9hcHBsZV9iYXNlbGlu
ZV9wYXRoKCd7fS17fScuZm9ybWF0KHNlbGYucG9ydF9uYW1lLCB3a19zdHJpbmcpKSkKKyAgICAg
ICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCgne30te30n
LmZvcm1hdChzZWxmLnBvcnRfbmFtZSwgd2tfc3RyaW5nKSkpCisgICAgICAgIGlmIGFwcGxlX2Fk
ZGl0aW9ucygpOgorICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl9hcHBsZV9i
YXNlbGluZV9wYXRoKCd7fScuZm9ybWF0KHNlbGYucG9ydF9uYW1lKSkpCisgICAgICAgIGV4cGVj
dGF0aW9ucy5hcHBlbmQoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoc2VsZi5wb3J0X25hbWUp
KQogCi0gICAgICAgIHdlYmtpdF9leHBlY3RhdGlvbnMgPSBtYXAoc2VsZi5fd2Via2l0X2Jhc2Vs
aW5lX3BhdGgsIGZhbGxiYWNrX25hbWVzKQotICAgICAgICBpZiBhcHBsZV9hZGRpdGlvbnMoKSBh
bmQgZ2V0YXR0cihhcHBsZV9hZGRpdGlvbnMoKSwgImxheW91dF90ZXN0c19wYXRoIiwgTm9uZSk6
Ci0gICAgICAgICAgICBhcHBsZV9leHBlY3RhdGlvbnMgPSBtYXAoc2VsZi5fYXBwbGVfYWRkaXRp
b25zX3BhdGgsIGZhbGxiYWNrX25hbWVzKQotICAgICAgICAgICAgcmVzdWx0ID0gW10KLSAgICAg
ICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4od2Via2l0X2V4cGVjdGF0aW9ucykpOgotICAgICAg
ICAgICAgICAgIGlmIGFwcGxlX2V4cGVjdGF0aW9uc1tpXToKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChhcHBsZV9leHBlY3RhdGlvbnNbaV0pCi0gICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCh3ZWJraXRfZXhwZWN0YXRpb25zW2ldKQotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdAotICAgICAgICByZXR1cm4gd2Via2l0X2V4cGVjdGF0aW9ucworICAgICAgICBpZiBzZWxm
LmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicpOgorICAgICAgICAgICAgZXhwZWN0YXRp
b25zLmFwcGVuZChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCgnd2syJykpCisgICAgICAgIHJl
dHVybiBleHBlY3RhdGlvbnMKIAorICAgIEBtZW1vaXplZAogICAgIGRlZiBjb25maWd1cmF0aW9u
X3NwZWNpZmllcl9tYWNyb3Moc2VsZik6Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAi
aGlnaHNpZXJyYSsiOiBbImhpZ2hzaWVycmEiLCAiZnV0dXJlIl0sCi0gICAgICAgICAgICAic2ll
cnJhKyI6IFsic2llcnJhIiwgImhpZ2hzaWVycmEiLCAiZnV0dXJlIl0sCi0gICAgICAgICAgICAi
ZWxjYXBpdGFuKyI6IFsiZWxjYXBpdGFuIiwgInNpZXJyYSIsICJoaWdoc2llcnJhIiwgImZ1dHVy
ZSJdLAotICAgICAgICAgICAgInlvc2VtaXRlKyI6IFsieW9zZW1pdGUiLCAiZWxjYXBpdGFuIiwg
InNpZXJyYSIsICJoaWdoc2llcnJhIiwgImZ1dHVyZSJdLAotICAgICAgICB9CisgICAgICAgIG1h
cCA9IHt9CisgICAgICAgIHZlcnNpb25fbmFtZV9tYXAgPSBWZXJzaW9uTmFtZU1hcC5tYXAoc2Vs
Zi5ob3N0LnBsYXRmb3JtKQorICAgICAgICBzb3J0ZWRfdmVyc2lvbnMgPSBzb3J0ZWQodmVyc2lv
bl9uYW1lX21hcC5tYXBwaW5nX2Zvcl9wbGF0Zm9ybSgpLnZhbHVlcygpKQorICAgICAgICBmb3Ig
dmVyc2lvbiBpbiBzb3J0ZWRfdmVyc2lvbnM6CisgICAgICAgICAgICBsaXN0ID0gW10KKyAgICAg
ICAgICAgIGZvciBuZXdlciBpbiBzb3J0ZWRfdmVyc2lvbnNbc29ydGVkX3ZlcnNpb25zLmluZGV4
KHZlcnNpb24pOl06CisgICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQodmVyc2lvbl9uYW1lX21h
cC50b19uYW1lKG5ld2VyLCBwbGF0Zm9ybT1zZWxmLnBvcnRfbmFtZSkubG93ZXIoKS5yZXBsYWNl
KCcgJywgJycpKQorICAgICAgICAgICAgbWFwW3ZlcnNpb25fbmFtZV9tYXAudG9fbmFtZSh2ZXJz
aW9uLCBwbGF0Zm9ybT1zZWxmLnBvcnRfbmFtZSkubG93ZXIoKS5yZXBsYWNlKCcgJywgJycpICsg
JysnXSA9IGxpc3QKKyAgICAgICAgcmV0dXJuIG1hcAogCiAgICAgZGVmIHNldHVwX2Vudmlyb25f
Zm9yX3NlcnZlcihzZWxmLCBzZXJ2ZXJfbmFtZT1Ob25lKToKICAgICAgICAgZW52ID0gc3VwZXIo
TWFjUG9ydCwgc2VsZikuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlcnZlcl9uYW1lKQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21hY191bml0dGVzdC5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjX3VuaXR0ZXN0LnB5CShyZXZpc2lv
biAyMjU3NjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0yNywyNSArMjcsMjQgQEAKICMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAKLWltcG9ydCB0aW1lCi0KIGZyb20gd2Via2l0cHkucG9ydC5tYWMgaW1wb3J0
IE1hY1BvcnQKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgZGFyd2luX3Rlc3RjYXNlCiBmcm9t
IHdlYmtpdHB5LnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UKIGZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCiBmcm9tIHdlYmtpdHB5
LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0uZXhlY3V0aXZlX21vY2sgaW1wb3J0IE1vY2tFeGVjdXRpdmUsIE1vY2tFeGVjdXRpdmUy
LCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lv
bgogCiAKIGNsYXNzIE1hY1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndpblRlc3QpOgogICAgIG9z
X25hbWUgPSAnbWFjJwotICAgIG9zX3ZlcnNpb24gPSAnbGlvbicKKyAgICBvc192ZXJzaW9uID0g
VmVyc2lvbigxMCwgNykKICAgICBwb3J0X25hbWUgPSAnbWFjLWxpb24nCiAgICAgcG9ydF9tYWtl
ciA9IE1hY1BvcnQKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb24oc2VsZik6CiAgICAgICAgIHBvcnQg
PSBzZWxmLm1ha2VfcG9ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LnZlcnNpb24o
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocG9ydC52ZXJzaW9uX25hbWUoKSkKIAog
ICAgIGRlZiB0ZXN0X3ZlcnNpb25zKHNlbGYpOgogICAgICAgICAjIE5vdGU6IHRoZXNlIHRlc3Rz
IGRvbid0IG5lZWQgdG8gYmUgZXhoYXVzdGl2ZSBhcyBsb25nIGFzIHdlIGdldCBwYXRoIGNvdmVy
YWdlLgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2Uu
cHkJKHJldmlzaW9uIDIyNTc2MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9wb3J0
X3Rlc3RjYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIGNsYXNzIFRlc3RX
ZWJLaXRQb3J0KFBvcnQpOgogCiBAY29udGV4dG1hbmFnZXIKIGRlZiBiaW5kX21vY2tfYXBwbGVf
YWRkaXRpb25zKCk6CisgICAgZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbl9uYW1lX21hcCBp
bXBvcnQgUFVCTElDX1RBQkxFLCBWZXJzaW9uTmFtZU1hcAogCiAgICAgY2xhc3MgTW9ja0FwcGxl
QWRkaXRpb25zKG9iamVjdCk6CiAKQEAgLTkzLDExICs5NCwyMyBAQCBkZWYgYmluZF9tb2NrX2Fw
cGxlX2FkZGl0aW9ucygpOgogICAgICAgICBkZWYgbWFjX29zX25hbWUobmFtZSk6CiAgICAgICAg
ICAgICByZXR1cm4gJ2FkZC17fScuZm9ybWF0KG5hbWUpCiAKKyAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICBkZWYgdmVyc2lvbl9uYW1lX21hcHBpbmcocGxhdGZvcm09Tm9uZSk6CisgICAg
ICAgICAgICByZXN1bHQgPSBWZXJzaW9uTmFtZU1hcChwbGF0Zm9ybSkKKyAgICAgICAgICAgIHJl
c3VsdC5tYXBwaW5nWydpbnRlcm5hbCddID0ge30KKyAgICAgICAgICAgIGZvciBwbGF0Zm9ybSBp
biByZXN1bHQubWFwcGluZ1tQVUJMSUNfVEFCTEVdOgorICAgICAgICAgICAgICAgIHJlc3VsdC5t
YXBwaW5nWydpbnRlcm5hbCddW3BsYXRmb3JtXSA9IHt9CisgICAgICAgICAgICAgICAgZm9yIG5h
bWUsIHZlcnNpb24gaW4gcmVzdWx0Lm1hcHBpbmdbUFVCTElDX1RBQkxFXVtwbGF0Zm9ybV0uaXRl
cml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYXBwaW5nWydpbnRlcm5hbCdd
W3BsYXRmb3JtXVsnYWRkLScgKyBuYW1lXSA9IHZlcnNpb24KKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQKKwogICAgICMgYXBwbGVfYWRkaXRpb25zIGlzIGEgbWVtb2l6ZWQgZnVuY3Rpb24uIFRh
a2UgYWR2YW50YWdlIG9mIHRoaXMgZmFjdCBhbmQgbWFuaXB1bGF0ZSB0aGUgY2FjaGUKICAgICAj
IHRvIHRlbXBvcmFyaWx5IHJldHVybiBhIG1vY2tlZCByZXN1bHQKICAgICBhcHBsZV9hZGRpdGlv
bnMuX3Jlc3VsdHNfY2FjaGVbKCldID0gTW9ja0FwcGxlQWRkaXRpb25zCisgICAgVmVyc2lvbk5h
bWVNYXAubWFwLl9yZXN1bHRzX2NhY2hlID0ge30KICAgICB5aWVsZAogICAgIGFwcGxlX2FkZGl0
aW9ucy5fcmVzdWx0c19jYWNoZVsoKV0gPSBOb25lCisgICAgVmVyc2lvbk5hbWVNYXAubWFwLl9y
ZXN1bHRzX2NhY2hlID0ge30KIAogCiBjbGFzcyBQb3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENh
c2UpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3Rlc3QucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3Rlc3QucHkJKHJldmlzaW9uIDIyNTc2
MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC90ZXN0LnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0yNiwxMyArMjYsMTIgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWlt
cG9ydCBzeXMKIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgUG9ydCwg
RHJpdmVyLCBEcml2ZXJPdXRwdXQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50
ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCi1mcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3RlbQogZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCitmcm9t
IHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25hbWVfbWFwIGltcG9ydCBQVUJMSUNfVEFCTEUsIFZl
cnNpb25OYW1lTWFwCiAKIAogIyBUaGlzIHNldHMgYmFzaWMgZXhwZWN0YXRpb25zIGZvciBhIHRl
c3QuIEVhY2ggaW5kaXZpZHVhbCBleHBlY3RhdGlvbgpAQCAtMjQzLDcgKzI0Miw3IEBAIGxheWVy
IGF0ICgwLDApIHNpemUgODAweDM0CiAKICAgICAjIEZvciB0ZXN0aW5nIHRlc3QgYXJlIHByb3Bl
cmx5IGluY2x1ZGVkIGZyb20gcGxhdGZvcm0gZGlyZWN0b3JpZXMuCiAgICAgdGVzdHMuYWRkKCdw
bGF0Zm9ybS90ZXN0LW1hYy1sZW9wYXJkL2h0dHAvdGVzdC5odG1sJykKLSAgICB0ZXN0cy5hZGQo
J3BsYXRmb3JtL3Rlc3Qtd2luLXdpbjcvaHR0cC90ZXN0Lmh0bWwnKQorICAgIHRlc3RzLmFkZCgn
cGxhdGZvcm0vdGVzdC13aW4tN3NwMC9odHRwL3Rlc3QuaHRtbCcpCiAKICAgICAjIEZvciAtLW5v
LWh0dHAgdGVzdHMsIHRlc3QgdGhhdCBwbGF0Zm9ybSBzcGVjaWZpYyBIVFRQIHRlc3RzIGFyZSBw
cm9wZXJseSBza2lwcGVkLgogICAgIHRlc3RzLmFkZCgncGxhdGZvcm0vdGVzdC1zbm93LWxlb3Bh
cmQvaHR0cC90ZXN0Lmh0bWwnKQpAQCAtMzU3LDcgKzM1Niw3IEBAIGNsYXNzIFRlc3RQb3J0KFBv
cnQpOgogICAgIEFMTF9CQVNFTElORV9WQVJJQU5UUyA9ICgKICAgICAgICAgJ3Rlc3QtbGludXgt
eDg2XzY0JywKICAgICAgICAgJ3Rlc3QtbWFjLXNub3dsZW9wYXJkJywgJ3Rlc3QtbWFjLWxlb3Bh
cmQnLAotICAgICAgICAndGVzdC13aW4tdmlzdGEnLCAndGVzdC13aW4td2luNycsICd0ZXN0LXdp
bi14cCcsCisgICAgICAgICd0ZXN0LXdpbi12aXN0YScsICd0ZXN0LXdpbi03c3AwJywgJ3Rlc3Qt
d2luLXhwJywKICAgICApCiAKICAgICBAY2xhc3NtZXRob2QKQEAgLTM3MywyMSArMzcyLDE2IEBA
IGNsYXNzIFRlc3RQb3J0KFBvcnQpOgogICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnNfcGF0aCA9
IExBWU9VVF9URVNUX0RJUiArICcvcGxhdGZvcm0vdGVzdC9UZXN0RXhwZWN0YXRpb25zJwogICAg
ICAgICBzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSA9IE5vbmUKIAotICAgICAgICBzZWxmLl9vcGVy
YXRpbmdfc3lzdGVtID0gJ21hYycKLSAgICAgICAgaWYgc2VsZi5fbmFtZS5zdGFydHN3aXRoKCd0
ZXN0LXdpbicpOgotICAgICAgICAgICAgc2VsZi5fb3BlcmF0aW5nX3N5c3RlbSA9ICd3aW4nCi0g
ICAgICAgIGVsaWYgc2VsZi5fbmFtZS5zdGFydHN3aXRoKCd0ZXN0LWxpbnV4Jyk6Ci0gICAgICAg
ICAgICBzZWxmLl9vcGVyYXRpbmdfc3lzdGVtID0gJ2xpbnV4JwotCi0gICAgICAgIHZlcnNpb25f
bWFwID0gewotICAgICAgICAgICAgJ3Rlc3Qtd2luLXhwJzogJ3hwJywKLSAgICAgICAgICAgICd0
ZXN0LXdpbi13aW43JzogJ3dpbjcnLAotICAgICAgICAgICAgJ3Rlc3Qtd2luLXZpc3RhJzogJ3Zp
c3RhJywKLSAgICAgICAgICAgICd0ZXN0LW1hYy1sZW9wYXJkJzogJ2xlb3BhcmQnLAotICAgICAg
ICAgICAgJ3Rlc3QtbWFjLXNub3dsZW9wYXJkJzogJ3Nub3dsZW9wYXJkJywKLSAgICAgICAgICAg
ICd0ZXN0LWxpbnV4LXg4Nl82NCc6ICdsdWNpZCcsCi0gICAgICAgIH0KLSAgICAgICAgc2VsZi5f
dmVyc2lvbiA9IHZlcnNpb25fbWFwW3NlbGYuX25hbWVdCisgICAgICAgIHNlbGYuX29wZXJhdGlu
Z19zeXN0ZW0gPSBzZWxmLl9uYW1lLnNwbGl0KCctJylbMV0KKyAgICAgICAgaWYgc2VsZi5fb3Bl
cmF0aW5nX3N5c3RlbSA9PSAnbGludXgnOgorICAgICAgICAgICAgc2VsZi5fb3NfdmVyc2lvbiA9
IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX29zX3ZlcnNpb24gPSBWZXJz
aW9uTmFtZU1hcC5tYXAoc2VsZi5ob3N0LnBsYXRmb3JtKS5mcm9tX25hbWUoc2VsZi5fbmFtZS5z
cGxpdCgnLScpWzJdKVsxXQorCisgICAgZGVmIHZlcnNpb25fbmFtZShzZWxmKToKKyAgICAgICAg
aWYgc2VsZi5fb3NfdmVyc2lvbiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgcmV0dXJuIFZlcnNpb25OYW1lTWFwLm1hcChzZWxmLmhvc3QucGxhdGZvcm0pLnRvX25h
bWUoc2VsZi5fb3NfdmVyc2lvbiwgcGxhdGZvcm09c2VsZi5fb3BlcmF0aW5nX3N5c3RlbSwgdGFi
bGU9UFVCTElDX1RBQkxFKQogCiAgICAgZGVmIGRlZmF1bHRfcGl4ZWxfdGVzdHMoc2VsZik6CiAg
ICAgICAgIHJldHVybiBUcnVlCkBAIC00MDEsMTAgKzM5NSwxMCBAQCBjbGFzcyBUZXN0UG9ydChQ
b3J0KToKICAgICAgICAgc2VhcmNoX3BhdGhzID0gewogICAgICAgICAgICAgJ3Rlc3QtbWFjLXNu
b3dsZW9wYXJkJzogWyd0ZXN0LW1hYy1zbm93bGVvcGFyZCddLAogICAgICAgICAgICAgJ3Rlc3Qt
bWFjLWxlb3BhcmQnOiBbJ3Rlc3QtbWFjLWxlb3BhcmQnLCAndGVzdC1tYWMtc25vd2xlb3BhcmQn
XSwKLSAgICAgICAgICAgICd0ZXN0LXdpbi13aW43JzogWyd0ZXN0LXdpbi13aW43J10sCi0gICAg
ICAgICAgICAndGVzdC13aW4tdmlzdGEnOiBbJ3Rlc3Qtd2luLXZpc3RhJywgJ3Rlc3Qtd2luLXdp
bjcnXSwKLSAgICAgICAgICAgICd0ZXN0LXdpbi14cCc6IFsndGVzdC13aW4teHAnLCAndGVzdC13
aW4tdmlzdGEnLCAndGVzdC13aW4td2luNyddLAotICAgICAgICAgICAgJ3Rlc3QtbGludXgteDg2
XzY0JzogWyd0ZXN0LWxpbnV4JywgJ3Rlc3Qtd2luLXdpbjcnXSwKKyAgICAgICAgICAgICd0ZXN0
LXdpbi03c3AwJzogWyd0ZXN0LXdpbi03c3AwJ10sCisgICAgICAgICAgICAndGVzdC13aW4tdmlz
dGEnOiBbJ3Rlc3Qtd2luLXZpc3RhJywgJ3Rlc3Qtd2luLTdzcDAnXSwKKyAgICAgICAgICAgICd0
ZXN0LXdpbi14cCc6IFsndGVzdC13aW4teHAnLCAndGVzdC13aW4tdmlzdGEnLCAndGVzdC13aW4t
N3NwMCddLAorICAgICAgICAgICAgJ3Rlc3QtbGludXgteDg2XzY0JzogWyd0ZXN0LWxpbnV4J10s
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFtzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aChk
KSBmb3IgZCBpbiBzZWFyY2hfcGF0aHNbc2VsZi5uYW1lKCldXQogCkBAIC01MTQsNyArNTA4LDcg
QEAgY2xhc3MgVGVzdFBvcnQoUG9ydCk6CiAgICAgICAgICAgICAgICAgKCdzbm93bGVvcGFyZCcs
ICd4ODYnKSwKICAgICAgICAgICAgICAgICAoJ3hwJywgJ3g4NicpLAogICAgICAgICAgICAgICAg
ICgndmlzdGEnLCAneDg2JyksCi0gICAgICAgICAgICAgICAgKCd3aW43JywgJ3g4NicpLAorICAg
ICAgICAgICAgICAgICgnN3NwMCcsICd4ODYnKSwKICAgICAgICAgICAgICAgICAoJ2x1Y2lkJywg
J3g4NicpLAogICAgICAgICAgICAgICAgICgnbHVjaWQnLCAneDg2XzY0JykpCiAKQEAgLTUyMyw3
ICs1MTcsNyBAQCBjbGFzcyBUZXN0UG9ydChQb3J0KToKIAogICAgIGRlZiBjb25maWd1cmF0aW9u
X3NwZWNpZmllcl9tYWNyb3Moc2VsZik6CiAgICAgICAgICIiIlRvIGF2b2lkIHN1cnByaXNlcyB3
aGVuIGludHJvZHVjaW5nIG5ldyBtYWNyb3MsIHRoZXNlIGFyZSBpbnRlbnRpb25hbGx5IGZpeGVk
IGluIHRpbWUuIiIiCi0gICAgICAgIHJldHVybiB7J21hYyc6IFsnbGVvcGFyZCcsICdzbm93bGVv
cGFyZCddLCAnd2luJzogWyd4cCcsICd2aXN0YScsICd3aW43J10sICdsaW51eCc6IFsnbHVjaWQn
XX0KKyAgICAgICAgcmV0dXJuIHsnbWFjJzogWydsZW9wYXJkJywgJ3Nub3dsZW9wYXJkJ10sICd3
aW4nOiBbJ3hwJywgJ3Zpc3RhJywgJzdzcDAnXSwgJ2xpbnV4JzogWydsdWNpZCddfQogCiAgICAg
ZGVmIGFsbF9iYXNlbGluZV92YXJpYW50cyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuQUxM
X0JBU0VMSU5FX1ZBUklBTlRTCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2lu
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkJKHJl
dmlzaW9uIDIyNTc2MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDkgQEAgaW1wb3J0IHRpbWUKIAogZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAotZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IsIEV4ZWN1dGl2ZQor
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ucGF0aCBpbXBvcnQgYWJzcGF0aF90b191cmksIGN5
Z3BhdGgKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIGZyb20g
d2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFZlcnNpb25OYW1lTWFwCiBm
cm9tIHdlYmtpdHB5LnBvcnQuYXBwbGUgaW1wb3J0IEFwcGxlUG9ydAogZnJvbSB3ZWJraXRweS5w
b3J0LmNvbmZpZyBpbXBvcnQgYXBwbGVfYWRkaXRpb25zCkBAIC01Niw3ICs1Nyw4IEBAIGV4Y2Vw
dCBJbXBvcnRFcnJvcjoKIGNsYXNzIFdpblBvcnQoQXBwbGVQb3J0KToKICAgICBwb3J0X25hbWUg
PSAid2luIgogCi0gICAgVkVSU0lPTl9GQUxMQkFDS19PUkRFUiA9IFsid2luLXhwIiwgIndpbi12
aXN0YSIsICJ3aW4tN3NwMCIsICJ3aW4td2luMTAiLCAid2luIl0KKyAgICBWRVJTSU9OX01JTiA9
IFZlcnNpb24oNSwgMSkKKyAgICBWRVJTSU9OX01BWCA9IFZlcnNpb24oMTApCiAKICAgICBBUkNI
SVRFQ1RVUkVTID0gWyd4ODYnLCAneDg2XzY0J10KIApAQCAtODcsNiArODksMTMgQEAgY2xhc3Mg
V2luUG9ydChBcHBsZVBvcnQpOgogICAgIHByZXZpb3VzX2Vycm9yX3JlcG9ydGluZ192YWx1ZXMg
PSB7fQogICAgIHByZXZpb3VzX3dvdzY0X2Vycm9yX3JlcG9ydGluZ192YWx1ZXMgPSB7fQogCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgorICAgICAg
ICBBcHBsZVBvcnQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKKyAg
ICAgICAgaWYgcG9ydF9uYW1lLnNwbGl0KCctJykgPiAxOgorICAgICAgICAgICAgc2VsZi5fb3Nf
dmVyc2lvbiA9IFZlcnNpb25OYW1lTWFwLm1hcChob3N0LnBsYXRmb3JtKS5mcm9tX25hbWUocG9y
dF9uYW1lLnNwbGl0KCctJylbMV0pWzFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxm
Ll9vc192ZXJzaW9uID0gc2VsZi5ob3N0LnBsYXRmb3JtLm9zX3ZlcnNpb24KKwogICAgIGRlZiBk
b190ZXh0X3Jlc3VsdHNfZGlmZmVyKHNlbGYsIGV4cGVjdGVkX3RleHQsIGFjdHVhbF90ZXh0KToK
ICAgICAgICAgIyBTYW5pdHkgd2FzIHJlc3RvcmVkIGluIFdLMiwgc28gd2UgZG9uJ3QgbmVlZCB0
aGlzIGhhY2sgdGhlcmUuCiAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3Rf
cnVubmVyJyk6CkBAIC0xMDIsMTEgKzExMSwxNSBAQCBjbGFzcyBXaW5Qb3J0KEFwcGxlUG9ydCk6
CiAgICAgICAgIHJldHVybiBleHBlY3RlZF90ZXh0ICE9IGFjdHVhbF90ZXh0CiAKICAgICBkZWYg
ZGVmYXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKLSAgICAgICAgbmFtZSA9IHNlbGYu
X25hbWUucmVwbGFjZSgnLXdrMicsICcnKQotICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKHNlbGYu
RlVUVVJFX1ZFUlNJT04pOgotICAgICAgICAgICAgZmFsbGJhY2tfbmFtZXMgPSBbc2VsZi5wb3J0
X25hbWVdCisgICAgICAgIHZlcnNpb25fbmFtZV9tYXAgPSBWZXJzaW9uTmFtZU1hcC5tYXAoc2Vs
Zi5ob3N0LnBsYXRmb3JtKQorICAgICAgICBpZiBzZWxmLl9vc192ZXJzaW9uIDwgc2VsZi5WRVJT
SU9OX01JTiBvciBzZWxmLl9vc192ZXJzaW9uID4gc2VsZi5WRVJTSU9OX01BWDoKKyAgICAgICAg
ICAgIGZhbGxiYWNrX3ZlcnNpb25zID0gW3NlbGYuX29zX3ZlcnNpb25dCiAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICBmYWxsYmFja19uYW1lcyA9IHNlbGYuVkVSU0lPTl9GQUxMQkFDS19PUkRF
UltzZWxmLlZFUlNJT05fRkFMTEJBQ0tfT1JERVIuaW5kZXgobmFtZSk6LTFdICsgW3NlbGYucG9y
dF9uYW1lXQorICAgICAgICAgICAgc29ydGVkX3ZlcnNpb25zID0gc29ydGVkKHZlcnNpb25fbmFt
ZV9tYXAubWFwcGluZ19mb3JfcGxhdGZvcm0ocGxhdGZvcm09c2VsZi5wb3J0X25hbWUpLnZhbHVl
cygpKQorICAgICAgICAgICAgZmFsbGJhY2tfdmVyc2lvbnMgPSBzb3J0ZWRfdmVyc2lvbnNbc29y
dGVkX3ZlcnNpb25zLmluZGV4KHNlbGYuX29zX3ZlcnNpb24pOl0KKyAgICAgICAgZmFsbGJhY2tf
bmFtZXMgPSBbJ3dpbi0nICsgdmVyc2lvbl9uYW1lX21hcC50b19uYW1lKHZlcnNpb24sIHBsYXRm
b3JtPXNlbGYucG9ydF9uYW1lKS5sb3dlcigpLnJlcGxhY2UoJyAnLCAnJykgZm9yIHZlcnNpb24g
aW4gZmFsbGJhY2tfdmVyc2lvbnNdCisgICAgICAgIGZhbGxiYWNrX25hbWVzLmFwcGVuZCgnd2lu
JykKKwogICAgICAgICAjIEZJWE1FOiBUaGUgQXBwbGVXaW4gcG9ydCBmYWxscyBiYWNrIHRvIEFw
cGxlTWFjIGZvciBzb21lIHJlc3VsdHMuICBFdmVudHVhbGx5IHdlJ2xsIGhhdmUgYSBzaGFyZWQg
J2FwcGxlJyBwb3J0LgogICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1
bm5lcicpOgogICAgICAgICAgICAgZmFsbGJhY2tfbmFtZXMuaW5zZXJ0KDAsICd3aW4td2syJykK
QEAgLTQzNiwxNyArNDQ5LDE0IEBAIGNsYXNzIFdpblBvcnQoQXBwbGVQb3J0KToKIGNsYXNzIFdp
bkNhaXJvUG9ydChXaW5Qb3J0KToKICAgICBwb3J0X25hbWUgPSAid2luY2Fpcm8iCiAKLSAgICBW
RVJTSU9OX0ZBTExCQUNLX09SREVSID0gWyJ3aW5jYWlyby0iICsgb3NfbmFtZS5sb3dlcigpIGZv
ciBvc19uYW1lIGluIFZlcnNpb25OYW1lTWFwLm1hcCgpLm5hbWVzKCldCi0KICAgICBkZWYgZGVm
YXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKLSAgICAgICAgbmFtZSA9IHNlbGYuX25h
bWUucmVwbGFjZSgnLXdrMicsICcnKQotICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKHNlbGYuRlVU
VVJFX1ZFUlNJT04pOgotICAgICAgICAgICAgZmFsbGJhY2tfbmFtZXMgPSBbXQorICAgICAgICB2
ZXJzaW9uX25hbWVfbWFwID0gVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYuaG9zdC5wbGF0Zm9ybSkK
KyAgICAgICAgaWYgc2VsZi5fb3NfdmVyc2lvbiA8IHNlbGYuVkVSU0lPTl9NSU4gb3Igc2VsZi5f
b3NfdmVyc2lvbiA+IHNlbGYuVkVSU0lPTl9NQVg6CisgICAgICAgICAgICBmYWxsYmFja192ZXJz
aW9ucyA9IFtzZWxmLl9vc192ZXJzaW9uXQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgYXNz
ZXJ0IG5hbWUgaW4gc2VsZi5WRVJTSU9OX0ZBTExCQUNLX09SREVSCi0gICAgICAgICAgICBmYWxs
YmFja19uYW1lcyA9IHNlbGYuVkVSU0lPTl9GQUxMQkFDS19PUkRFUltzZWxmLlZFUlNJT05fRkFM
TEJBQ0tfT1JERVIuaW5kZXgobmFtZSk6XQotICAgICAgICBmYWxsYmFja19uYW1lcy5hcHBlbmQo
c2VsZi5wb3J0X25hbWUpCisgICAgICAgICAgICBzb3J0ZWRfdmVyc2lvbnMgPSBzb3J0ZWQodmVy
c2lvbl9uYW1lX21hcC5tYXBwaW5nX2Zvcl9wbGF0Zm9ybShwbGF0Zm9ybT1zZWxmLnBvcnRfbmFt
ZSkudmFsdWVzKCkpCisgICAgICAgICAgICBmYWxsYmFja192ZXJzaW9ucyA9IHNvcnRlZF92ZXJz
aW9uc1tzb3J0ZWRfdmVyc2lvbnMuaW5kZXgoc2VsZi5fb3NfdmVyc2lvbik6XQorICAgICAgICBm
YWxsYmFja19uYW1lcyA9IFsnd2luLScgKyB2ZXJzaW9uX25hbWVfbWFwLnRvX25hbWUodmVyc2lv
biwgcGxhdGZvcm09c2VsZi5wb3J0X25hbWUpLmxvd2VyKCkucmVwbGFjZSgnICcsICcnKSBmb3Ig
dmVyc2lvbiBpbiBmYWxsYmFja192ZXJzaW9uc10KKyAgICAgICAgZmFsbGJhY2tfbmFtZXMuYXBw
ZW5kKCd3aW4nKQorICAgICAgICBmYWxsYmFja19uYW1lcy5hcHBlbmQoJ21hYycpCiAgICAgICAg
IHJldHVybiBtYXAoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgsIGZhbGxiYWNrX25hbWVzKQot
Ci0gICAgZGVmIF9mdXR1cmVfcG9ydF9uYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5w
b3J0X25hbWUgKyAiLSIgKyBzZWxmLkZVVFVSRV9WRVJTSU9OCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvd2luX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC93aW5fdW5pdHRlc3QucHkJKHJldmlzaW9uIDIyNTc2MSkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW5fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDggQEAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVf
bW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91
dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0Citmcm9tIHdlYmtpdHB5
LmNvbW1vbi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJz
aW9uX25hbWVfbWFwIGltcG9ydCBQVUJMSUNfVEFCTEUsIFZlcnNpb25OYW1lTWFwCiBmcm9tIHdl
YmtpdHB5LnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UKIGZyb20gd2Via2l0cHkucG9ydC53aW4g
aW1wb3J0IFdpblBvcnQKIGZyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09w
dGlvbnMKQEAgLTM2LDcgKzM4LDcgQEAgZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9y
dCBNb2NrTwogCiBjbGFzcyBXaW5Qb3J0VGVzdChwb3J0X3Rlc3RjYXNlLlBvcnRUZXN0Q2FzZSk6
CiAgICAgb3NfbmFtZSA9ICd3aW4nCi0gICAgb3NfdmVyc2lvbiA9ICd4cCcKKyAgICBvc192ZXJz
aW9uID0gVmVyc2lvbig1LCAxKQogICAgIHBvcnRfbmFtZSA9ICd3aW4teHAnCiAgICAgcG9ydF9t
YWtlciA9IFdpblBvcnQKIApAQCAtNTgsMjQgKzYwLDI0IEBAIGNsYXNzIFdpblBvcnRUZXN0KHBv
cnRfdGVzdGNhc2UuUG9ydFRlc3QKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmJhc2Vs
aW5lX3NlYXJjaF9wYXRoKCksIGFic29sdXRlX3NlYXJjaF9wYXRocykKIAogICAgIGRlZiB0ZXN0
X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgotICAgICAgICBzZWxmLl9hc3NlcnRfc2VhcmNo
X3BhdGgoWyd3aW4teHAnLCAnd2luLXZpc3RhJywgJ3dpbi03c3AwJywgJ3dpbi13aW4xMCcsICd3
aW4nLCAnbWFjJ10sICd4cCcpCi0gICAgICAgIHNlbGYuX2Fzc2VydF9zZWFyY2hfcGF0aChbJ3dp
bi12aXN0YScsICd3aW4tN3NwMCcsICd3aW4td2luMTAnLCAnd2luJywgJ21hYyddLCAndmlzdGEn
KQotICAgICAgICBzZWxmLl9hc3NlcnRfc2VhcmNoX3BhdGgoWyd3aW4tN3NwMCcsICd3aW4td2lu
MTAnLCAnd2luJywgJ21hYyddLCAnN3NwMCcpCi0KLSAgICAgICAgc2VsZi5fYXNzZXJ0X3NlYXJj
aF9wYXRoKFsnd2luLXdrMicsICd3aW4teHAnLCAnd2luLXZpc3RhJywgJ3dpbi03c3AwJywgJ3dp
bi13aW4xMCcsICd3aW4nLCAnbWFjLXdrMicsICdtYWMnXSwgJ3hwJywgdXNlX3dlYmtpdDI9VHJ1
ZSkKLSAgICAgICAgc2VsZi5fYXNzZXJ0X3NlYXJjaF9wYXRoKFsnd2luLXdrMicsICd3aW4tdmlz
dGEnLCAnd2luLTdzcDAnLCAnd2luLXdpbjEwJywgJ3dpbicsICdtYWMtd2syJywgJ21hYyddLCAn
dmlzdGEnLCB1c2Vfd2Via2l0Mj1UcnVlKQotICAgICAgICBzZWxmLl9hc3NlcnRfc2VhcmNoX3Bh
dGgoWyd3aW4td2syJywgJ3dpbi03c3AwJywgJ3dpbi13aW4xMCcsICd3aW4nLCAnbWFjLXdrMics
ICdtYWMnXSwgJzdzcDAnLCB1c2Vfd2Via2l0Mj1UcnVlKQorICAgICAgICBzZWxmLl9hc3NlcnRf
c2VhcmNoX3BhdGgoWyd3aW4teHAnLCAnd2luLXZpc3RhJywgJ3dpbi03c3AwJywgJ3dpbi04Jywg
J3dpbi04LjEnLCAnd2luLXdpbjEwJywgJ3dpbicsICdtYWMnXSwgVmVyc2lvbig1LCAxKSkKKyAg
ICAgICAgc2VsZi5fYXNzZXJ0X3NlYXJjaF9wYXRoKFsnd2luLXZpc3RhJywgJ3dpbi03c3AwJywg
J3dpbi04JywgJ3dpbi04LjEnLCAnd2luLXdpbjEwJywgJ3dpbicsICdtYWMnXSwgVmVyc2lvbig2
KSkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X3NlYXJjaF9wYXRoKFsnd2luLTdzcDAnLCAnd2luLTgn
LCAnd2luLTguMScsICd3aW4td2luMTAnLCAnd2luJywgJ21hYyddLCBWZXJzaW9uKDYsIDEsIDc2
MDApKQorCisgICAgICAgIHNlbGYuX2Fzc2VydF9zZWFyY2hfcGF0aChbJ3dpbi13azInLCAnd2lu
LXhwJywgJ3dpbi12aXN0YScsICd3aW4tN3NwMCcsICd3aW4tOCcsICd3aW4tOC4xJywgJ3dpbi13
aW4xMCcsICd3aW4nLCAnbWFjLXdrMicsICdtYWMnXSwgVmVyc2lvbig1LCAxKSwgdXNlX3dlYmtp
dDI9VHJ1ZSkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X3NlYXJjaF9wYXRoKFsnd2luLXdrMicsICd3
aW4tdmlzdGEnLCAnd2luLTdzcDAnLCAnd2luLTgnLCAnd2luLTguMScsICd3aW4td2luMTAnLCAn
d2luJywgJ21hYy13azInLCAnbWFjJ10sIFZlcnNpb24oNiksIHVzZV93ZWJraXQyPVRydWUpCisg
ICAgICAgIHNlbGYuX2Fzc2VydF9zZWFyY2hfcGF0aChbJ3dpbi13azInLCAnd2luLTdzcDAnLCAn
d2luLTgnLCAnd2luLTguMScsICd3aW4td2luMTAnLCAnd2luJywgJ21hYy13azInLCAnbWFjJ10s
IFZlcnNpb24oNiwgMSwgNzYwMCksIHVzZV93ZWJraXQyPVRydWUpCiAKICAgICBkZWYgX2Fzc2Vy
dF92ZXJzaW9uKHNlbGYsIHBvcnRfbmFtZSwgZXhwZWN0ZWRfdmVyc2lvbik6CiAgICAgICAgIGhv
c3QgPSBNb2NrU3lzdGVtSG9zdChvc19uYW1lPSd3aW4nLCBvc192ZXJzaW9uPWV4cGVjdGVkX3Zl
cnNpb24pCiAgICAgICAgIHBvcnQgPSBXaW5Qb3J0KGhvc3QsIHBvcnRfbmFtZT1wb3J0X25hbWUp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC52ZXJzaW9uKCksIGV4cGVjdGVkX3ZlcnNp
b24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC52ZXJzaW9uX25hbWUoKSwgVmVyc2lv
bk5hbWVNYXAubWFwKCkudG9fbmFtZShleHBlY3RlZF92ZXJzaW9uLCBwbGF0Zm9ybT0nd2luJywg
dGFibGU9UFVCTElDX1RBQkxFKSkKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb25zKHNlbGYpOgotICAg
ICAgICBzZWxmLl9hc3NlcnRfdmVyc2lvbignd2luLXhwJywgJ3hwJykKLSAgICAgICAgc2VsZi5f
YXNzZXJ0X3ZlcnNpb24oJ3dpbi12aXN0YScsICd2aXN0YScpCi0gICAgICAgIHNlbGYuX2Fzc2Vy
dF92ZXJzaW9uKCd3aW4tN3NwMCcsICc3c3AwJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
QXNzZXJ0aW9uRXJyb3IsIHNlbGYuX2Fzc2VydF92ZXJzaW9uLCAnd2luLW1lJywgJ3hwJykKKyAg
ICAgICAgc2VsZi5fYXNzZXJ0X3ZlcnNpb24oJ3dpbi14cCcsIFZlcnNpb24oNSwgMSkpCisgICAg
ICAgIHNlbGYuX2Fzc2VydF92ZXJzaW9uKCd3aW4tdmlzdGEnLCBWZXJzaW9uKDYpKQorICAgICAg
ICBzZWxmLl9hc3NlcnRfdmVyc2lvbignd2luLTdzcDAnLCBWZXJzaW9uKDYsIDEsIDc2MDApKQor
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgc2VsZi5fYXNzZXJ0X3Zl
cnNpb24sICd3aW4tbWUnLCBWZXJzaW9uKDUsIDEpKQogCiAgICAgZGVmIHRlc3RfY29tcGFyZV90
ZXh0KHNlbGYpOgogICAgICAgICBleHBlY3RlZCA9ICJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3
RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb25c
bmZvb1xuRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3
RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uXG4iCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvd3BlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC93cGUucHkJKHJldmlzaW9uIDIyNTc2MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC93cGUucHkJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgY2xhc3MgV1BFUG9y
dChQb3J0KToKICAgICBkZWYgX2dlbmVyYXRlX2FsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKHNlbGYp
OgogICAgICAgICBjb25maWd1cmF0aW9ucyA9IFtdCiAgICAgICAgIGZvciBidWlsZF90eXBlIGlu
IHNlbGYuQUxMX0JVSUxEX1RZUEVTOgotICAgICAgICAgICAgY29uZmlndXJhdGlvbnMuYXBwZW5k
KFRlc3RDb25maWd1cmF0aW9uKHZlcnNpb249c2VsZi5fdmVyc2lvbiwgYXJjaGl0ZWN0dXJlPSd4
ODYnLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQorICAgICAgICAgICAgY29uZmlndXJhdGlvbnMu
YXBwZW5kKFRlc3RDb25maWd1cmF0aW9uKHZlcnNpb249c2VsZi52ZXJzaW9uX25hbWUoKSwgYXJj
aGl0ZWN0dXJlPSd4ODYnLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQogICAgICAgICByZXR1cm4g
Y29uZmlndXJhdGlvbnMKIAogICAgIGRlZiBfcGF0aF90b19kcml2ZXIoc2VsZik6CkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllc191bml0dGVzdC5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmll
c191bml0dGVzdC5weQkocmV2aXNpb24gMjI1NzYxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTE4
Nyw3ICsxODcsNyBAQCBjbGFzcyBQcmludEV4cGVjdGF0aW9uc1Rlc3QodW5pdHRlc3QuVGVzCiAg
ICAgICAgICAgICAgICAgICAgICAgICdmYWlsdXJlcy9leHBlY3RlZC9pbWFnZS5odG1sIFsgSW1h
Z2VPbmx5RmFpbHVyZSBdXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICdmYWlsdXJlcy9leHBl
Y3RlZC90ZXh0Lmh0bWwgWyBGYWlsdXJlIF1cbicKICAgICAgICAgICAgICAgICAgICAgICAgJ1xu
JwotICAgICAgICAgICAgICAgICAgICAgICAnLy8gRm9yIHRlc3Qtd2luLXdpbjdcbicKKyAgICAg
ICAgICAgICAgICAgICAgICAgJy8vIEZvciB0ZXN0LXdpbi03c3AwXG4nCiAgICAgICAgICAgICAg
ICAgICAgICAgICdmYWlsdXJlcy9leHBlY3RlZC9pbWFnZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVy
ZSBdXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICdmYWlsdXJlcy9leHBlY3RlZC90ZXh0Lmh0
bWwgWyBGYWlsdXJlIF1cbicKICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwpAQCAtMjgxLDcg
KzI4MSw3IEBAIGNsYXNzIFByaW50QmFzZWxpbmVzVGVzdCh1bml0dGVzdC5UZXN0Q2EKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdwYXNzZXMvdGV4dC1leHBlY3RlZC5wbmdcbicKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdwYXNzZXMvdGV4dC1leHBlY3RlZC50eHRcbicKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdcbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICcv
LyBGb3IgdGVzdC13aW4td2luN1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8vIEZv
ciB0ZXN0LXdpbi03c3AwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFzc2VzL3Rl
eHQtZXhwZWN0ZWQucG5nXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFzc2VzL3Rl
eHQtZXhwZWN0ZWQudHh0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXMucHkJKHJl
dmlzaW9uIDIyNTc2MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9x
dWV1ZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE0ICszNSwxMiBAQCBpbXBvcnQgc3lzCiBp
bXBvcnQgdGltZQogaW1wb3J0IHRyYWNlYmFjawogCi1mcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRl
dGltZQogZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRpb24KIGZyb20gU3RyaW5nSU8gaW1w
b3J0IFN0cmluZ0lPCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmNvbmZpZy5jb21taXR0ZXJ2YWxp
ZGF0b3IgaW1wb3J0IENvbW1pdHRlclZhbGlkYXRvcgogZnJvbSB3ZWJraXRweS5jb21tb24uY29u
ZmlnLnBvcnRzIGltcG9ydCBEZXByZWNhdGVkUG9ydAogZnJvbSB3ZWJraXRweS5jb21tb24ubmV0
LmJ1Z3ppbGxhIGltcG9ydCBBdHRhY2htZW50Ci1mcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuc3Rh
dHVzc2VydmVyIGltcG9ydCBTdGF0dXNTZXJ2ZXIKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5LnRvb2wuYm90LmJv
dGluZm8gaW1wb3J0IEJvdEluZm8KIGZyb20gd2Via2l0cHkudG9vbC5ib3QuY29tbWl0cXVldWV0
YXNrIGltcG9ydCBDb21taXRRdWV1ZVRhc2ssIENvbW1pdFF1ZXVlVGFza0RlbGVnYXRlCkBAIC0y
NzIsNyArMjcwLDcgQEAgY2xhc3MgUGF0Y2hQcm9jZXNzaW5nUXVldWUoQWJzdHJhY3RQYXRjaAog
ICAgIGRlZiBfbmV3X3BvcnRfbmFtZV9mcm9tX29sZChzZWxmLCBwb3J0X25hbWUsIHBsYXRmb3Jt
KToKICAgICAgICAgIyBBcHBsZVBvcnQuZGV0ZXJtaW5lX2Z1bGxfcG9ydF9uYW1lIGFzc2VydHMg
aWYgdGhlIG5hbWUgZG9lc24ndCBpbmNsdWRlIHZlcnNpb24uCiAgICAgICAgIGlmIHBvcnRfbmFt
ZSA9PSAnbWFjJzoKLSAgICAgICAgICAgIHJldHVybiAnbWFjLScgKyBwbGF0Zm9ybS5vc192ZXJz
aW9uCisgICAgICAgICAgICByZXR1cm4gJ21hYy0nICsgcGxhdGZvcm0ub3NfdmVyc2lvbl9uYW1l
KCkubG93ZXIoKS5yZXBsYWNlKCcgJywgJycpCiAgICAgICAgIGlmIHBvcnRfbmFtZSA9PSAnd2lu
JzoKICAgICAgICAgICAgIHJldHVybiAnd2luLWZ1dHVyZScKICAgICAgICAgcmV0dXJuIHBvcnRf
bmFtZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329181</attachid>
            <date>2017-12-12 17:22:11 -0800</date>
            <delta_ts>2017-12-13 08:30:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179621-20171212172210.patch</filename>
            <type>text/plain</type>
            <size>72322</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNTgyMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEyMyBAQAorMjAxNy0xMi0xMiAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CisKKyAgICAgICAgd2Via2l0cHk6IEJldHRlciBuYW1lLXZlcnNpb24gbWFwcGluZyAoUGFy
dCAyKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5
NjIxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNTU4OTU4NT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBEYXZpZCBLaWx6ZXIuCisKKyAgICAgICAgTm93IHRoYXQgd2UgaGF2ZSBhIGNlbnRyYWwg
bWFwcGluZyBvZiB2ZXJzaW9uIG51bWJlcnMgdG8gdmVyc2lvbiBuYW1lcywgdGhpcworICAgICAg
ICBtYXBwaW5nIHNob3VsZCBiZSB1c2VkIHRvIGNvbXB1dGUgdmVyc2lvbiBuYW1lcy4gVGhpcyBw
YXRjaCB0cmVhdHMgcGFzc2VzIHZlcnNpb25zCisgICAgICAgIGFzIG9iamVjdHMsIG9ubHkgbWFw
cGluZyB0aGVtIHRvIG5hbWVzIHdoZW4gc3RyaW5ncyBhcmUgbmVlZGVkLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAg
KFBsYXRmb3JtSW5mby5fX2luaXRfXyk6IFN0b3JlIG9zX3ZlcnNpb24gYXMgYSB2ZXJzaW9uIG9i
amVjdCBpbnN0ZWFkIG9mIGEgc3RyaW5nLgorICAgICAgICAoUGxhdGZvcm1JbmZvLm9zX3ZlcnNp
b25fbmFtZSk6IENvbnZlcnQgb3NfdmVyc2lvbiB0byBhIHN0cmluZyB0aHJvdWdoIHRoZSBWZXJz
aW9uTmFtZU1hcC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxh
dGZvcm1pbmZvX21vY2sucHk6CisgICAgICAgIChNb2NrUGxhdGZvcm1JbmZvLl9faW5pdF9fKTog
U3RvcmUgb3NfdmVyc2lvbiBhcyBhIHZlcnNpb24gb2JqZWN0LgorICAgICAgICAoTW9ja1BsYXRm
b3JtSW5mby5vc192ZXJzaW9uX25hbWUpOiBNaXJyb3IgUGxhdGZvcm1JbmZvLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fdW5pdHRlc3QucHk6
CisgICAgICAgIChUZXN0UGxhdGZvcm1JbmZvLnRlc3RfcmVhbF9jb2RlKTogT25seSBNYWMgYW5k
IFdpbmRvd3MgaGF2ZSBkZWZpbmVkIHZlcnNpb24gb2JqZWN0cy4KKyAgICAgICAgKFRlc3RQbGF0
Zm9ybUluZm8udGVzdF9vc192ZXJzaW9uKTogRGVsZXRlZCwgdGhpcyBiZWhhdmlvciBpcyBub3cg
bWFuYWdlZCBieSBWZXJzaW9uTmFtZU1hcC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi92ZXJzaW9uLnB5OgorICAgICAgICAoVmVyc2lvbi5fX2NtcF9fKTogQWxsb3cgYSB2ZXJz
aW9uIG9iamVjdCB0byBiZSBjb21wYXJlZCB3aXRoICdOb25lJy4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwLnB5OgorICAgICAgICAoVmVyc2lvbk5h
bWVNYXAubWFwKTogQ2hlY2sgZm9yIHRoZSBhcHBsZV9hZGRpdGlvbnMgVmVyc2lvbk5hbWVNYXAu
CisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5fX2luaXRfXyk6IEFkZCBhIHdpbmNhaXJvIG1hcHBp
bmcsIHRoZSBzYW1lIGFzIHRoZSB3aW4gbWFwcGluZy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi92ZXJzaW9uX3VuaXR0ZXN0LnB5OgorICAgICAgICAoVmVyc2lvblRlc3RDYXNl
LnRlc3RfY29tcGFyZV92ZXJzaW9ucyk6IFRlc3QgY29tcGFyaW5nIGEgdmVyc2lvbiBvYmplY3Qg
dG8gJ05vbmUnLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVs
cy90ZXN0X2NvbmZpZ3VyYXRpb24ucHk6CisgICAgICAgIChUZXN0Q29uZmlndXJhdGlvbi5fX2lu
aXRfXyk6IFN0cmlwIGZvcm1hdHRpbmcgZnJvbSB2ZXJzaW9uIG5hbWUuIE5vdGUgdGhhdCB0aGlz
IG9iamVjdCBzdGlsbAorICAgICAgICBhY2NlcHRzIGEgc3RyaW5nIGJlY2F1c2UgdGhlIHZlcnNp
b24gc3RyaW5nIGltcGxpY2l0bHkgY29udGFpbnMgdGhlIHBsYXRmb3JtIGFzIHdlbGwuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRp
b25zX3VuaXR0ZXN0LnB5OiBXaW43IHNob3VsZCBiZSA3U1AwIGFzCisgICAgICAgIGl0IGlzIGlu
IHRoZSBWZXJzaW9uTmFtZU1hcC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBw
bGUucHk6CisgICAgICAgIChBcHBsZVBvcnQpOiBSZXBsYWNlIFZFUlNJT05fRkFMTEJBQ0tfT1JE
RVIgd2l0aCBhIG1pbmltdW0gYW5kIG1heGltdW0gdmVyc2lvbi4gVGhpcyBpcyByZXF1aXJlZAor
ICAgICAgICBiZWNhdXNlIGl0IG1heSBiZSB0aGUgY2FzZSB0aGF0IHNjcmlwdHMgYXJlIGF3YXJl
IG9mIG1vcmUgdmVyc2lvbnMgdGhhbiB0aGUgcG9ydCBhY3R1YWxseSBzdXBwb3J0cy4KKyAgICAg
ICAgKEFwcGxlUG9ydC5kZXRlcm1pbmVfZnVsbF9wb3J0X25hbWUpOiBVc2UgdGhlIGhvc3Qgb3Bl
cmF0aW5nIHN5c3RlbSB0byBjb21wdXRlIHRoZSBmdWxsIHBvcnQgbmFtZS4KKyAgICAgICAgKEFw
cGxlUG9ydC5fYWxsb3dlZF92ZXJzaW9ucyk6IFJldHVybiBhIGxpc3Qgb2YgdmFsaWQgcG9ydCB2
ZXJzaW9ucyBieSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUKKyAgICAgICAgVmVyc2lvbk5hbWVNYXAu
CisgICAgICAgIChBcHBsZVBvcnQuX2dlbmVyYXRlX2FsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKTog
Q29tcHV0ZSBhIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgYnkgaXRlcmF0aW5nIHRocm91Z2gKKyAg
ICAgICAgX2FsbG93ZWRfdmVyc2lvbnMgYW5kIGNvbnZlcnRpbmcgZWFjaCB2ZXJzaW9uIHRvIGEg
c3RyaW5nLgorICAgICAgICAoQXBwbGVQb3J0Ll9hcHBsZV9iYXNlbGluZV9wYXRoKTogUmV0dXJu
IGEgbGF5b3V0IHRlc3QgZXhwZWN0YXRpb24gZGlyZWN0b3J5IGluc2lkZSBhcHBsZV9hZGRpdGlv
bnMuCisgICAgICAgIChBcHBsZVBvcnQuX3NraXBwZWRfZmlsZV9zZWFyY2hfcGF0aHMpOiBEZWxl
dGVkLgorICAgICAgICAoQXBwbGVQb3J0Ll9hbGxvd2VkX3BvcnRfbmFtZXMpOiBEZWxldGVkLgor
ICAgICAgICAoQXBwbGVQb3J0Ll9mdXR1cmVfcG9ydF9uYW1lKTogRGVsZXRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuX19pbml0X18p
OiBSZXBsYWNlIF92ZXJzaW9uIHN0cmluZyB3aXRoIF9vc192ZXJzaW9uIG9iamVjdC4KKyAgICAg
ICAgKFBvcnQudmVyc2lvbl9uYW1lKTogQ29udmVydCB2ZXJzaW9uIG9iamVjdCB0byBzdHJpbmcu
CisgICAgICAgIChQb3J0LnRlc3RfY29uZmlndXJhdGlvbik6IFBhc3MgdmVyc2lvbiBzdHJpbmcg
dG8gVGVzdENvbmZpZ3VyYXRpb24uCisgICAgICAgIChQb3J0LnZlcnNpb24pOiBEZWxldGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHk6CisgICAg
ICAgIChEYXJ3aW5UZXN0LmFzc2VydF9uYW1lKTogQ29udmVydCBhbiBvc192ZXJzaW9uX3N0cmlu
ZyB0byBhIHZlcnNpb24gb2JqZWN0IGFuZCBjb25zdHJ1Y3QgYSBwb3J0LgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5OgorICAgICAgICAoRmFjdG9y
eVRlc3QudGVzdF9tYWMpOiBSZXBsYWNlIHZlcnNpb24gc3RyaW5ncyB3aXRoIHZlcnNpb24gb2Jq
ZWN0cy4KKyAgICAgICAgKEZhY3RvcnlUZXN0LnRlc3Rfd2luKTogRGl0dG8uCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weToKKyAgICAgICAgKEd0a1BvcnQuX2dlbmVyYXRl
X2FsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKTogUmVwbGFjZSBfdmVyc2lvbiB3aXRoIHZlcnNpb25f
bmFtZSgpLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHk6CisgICAgICAg
IChJT1NQb3J0LnZlcnNpb25fbmFtZSk6IEJvdGggU2ltdWxhdG9yIGFuZCBkZXZpY2Ugc2hhcmUg
dGhlIHNhbWUgdmVyc2lvbi1uYW1lIGNvbnZlbnRpb24uCisgICAgICAgIChJT1NQb3J0Ll9nZW5l
cmF0ZV9hbGxfdGVzdF9jb25maWd1cmF0aW9ucyk6IFJlcGxhY2UgX3ZlcnNpb24gd2l0aCB2ZXJz
aW9uX25hbWUoKS4KKyAgICAgICAgKElPU1BvcnQuZGVmYXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0
aCk6IFVzZSB0aGUgaW50ZXJuYWwgbWFwcGluZyBvZiB2ZXJzaW9uIG5hbWVzIHRvIGNvbnN0cnVj
dAorICAgICAgICBhcHBsZV9hZGRpdGlvbnMgZXhwZWN0YXRpb25zLgorICAgICAgICAoSU9TUG9y
dC5fYXBwbGVfYWRkaXRpb25zX3BhdGgpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5OgorICAgICAgICAoSU9TRGV2aWNlUG9ydC5pb3NfdmVy
c2lvbik6IFJldHVybiBOb25lIGlmIG5vIHZlcnNpb24gaXMgZGVmaW5lZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5weToKKyAgICAgICAgKElP
U0RldmljZVRlc3QpOgorICAgICAgICAoSU9TRGV2aWNlVGVzdC50ZXN0X2xheW91dF90ZXN0X3Nl
YXJjaHBhdGhfd2l0aF9hcHBsZV9hZGRpdGlvbnMpOiBDb25mb3JtIHdpdGggdGhlIG5ldyBtb2Nr
CisgICAgICAgIGFwcGxlX2FkZGl0aW9ucy4KKyAgICAgICAgKElPU0RldmljZVRlc3QubWFrZV9w
b3J0KTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVs
YXRvci5weToKKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2NyZWF0ZV9kZXZpY2VzKTogVXNl
IFZlcnNpb24gb2JqZWN0IG92ZXIgbGlzdCBvZiB2ZXJzaW9uIHN0cmluZ3MuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3JfdW5pdHRlc3QucHk6CisgICAgICAg
IChJT1NTaW11bGF0b3JUZXN0KToKKyAgICAgICAgKElPU1NpbXVsYXRvclRlc3QubWFrZV9wb3J0
KTogVXNlIGlPUyAxMSBhcyB0aGUgZGVmYXVsdCB2ZXJzaW9uIGZvciB0ZXN0aW5nLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yVGVzdC50ZXN0X2xheW91dF90ZXN0X3NlYXJjaHBhdGhfd2l0aF9hcHBs
ZV9hZGRpdGlvbnMpOiBDb25mb3JtIHdpdGggdGhlIG5ldworICAgICAgICBtb2NrIGFwcGxlX2Fk
ZGl0aW9ucy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3Rlc3RjYXNlLnB5
OgorICAgICAgICAoSU9TVGVzdC5tYWtlX3BvcnQpOiBVc2UgaU9TIDExIGFzIHRoZSBkZWZhdWx0
IHZlcnNpb24gZm9yIHRlc3RpbmcuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L21h
Yy5weToKKyAgICAgICAgKE1hY1BvcnQpOgorICAgICAgICAoTWFjUG9ydC5fX2luaXRfXyk6IFVz
ZSBWZXJzaW9uIG9iamVjdCBmb3IgX29zX3ZlcnNpb24uCisgICAgICAgIChNYWNQb3J0LmRlZmF1
bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgpOiBVc2UgdGhlIGludGVybmFsIG1hcHBpbmcgb2YgdmVy
c2lvbiBuYW1lcyB0byBjb25zdHJ1Y3QKKyAgICAgICAgYXBwbGVfYWRkaXRpb25zIGV4cGVjdGF0
aW9ucy4KKyAgICAgICAgKE1hY1BvcnQuY29uZmlndXJhdGlvbl9zcGVjaWZpZXJfbWFjcm9zKTog
QXV0b21hdGljYWxseSBjb25zdHJ1Y3QgbWFjcm9zIGJhc2VkIG9uIFZlcnNpb25OYW1lTWFwLgor
ICAgICAgICAoTWFjUG9ydC5fYXBwbGVfYWRkaXRpb25zX3BhdGgpOiBEZWxldGVkLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWNfdW5pdHRlc3QucHk6CisgICAgICAgIChNYWNU
ZXN0KTogVXNlIFZlcnNpb24gb2JqZWN0IGluc3RlYWQgb2YgdmVyc2lvbiBzdHJpbmcuCisgICAg
ICAgIChNYWNUZXN0LnRlc3RfdmVyc2lvbik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9w
b3J0L3BvcnRfdGVzdGNhc2UucHk6CisgICAgICAgIChiaW5kX21vY2tfYXBwbGVfYWRkaXRpb25z
KTogQWRkIGEgbW9jayBWZXJzaW9uTmFtZU1hcCB0byBtb2NrIGFwcGxlX2FkZGl0aW9ucy4KKyAg
ICAgICAgKGJpbmRfbW9ja19hcHBsZV9hZGRpdGlvbnMuTW9ja0FwcGxlQWRkaXRpb25zKToKKyAg
ICAgICAgKGJpbmRfbW9ja19hcHBsZV9hZGRpdGlvbnMuTW9ja0FwcGxlQWRkaXRpb25zLnZlcnNp
b25fbmFtZV9tYXBwaW5nKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvdGVzdC5w
eToKKyAgICAgICAgKFRlc3RQb3J0KToKKyAgICAgICAgKFRlc3RQb3J0Ll9faW5pdF9fKTogVXNl
IFZlcnNpb25OYW1lTWFwIHRvIGNvbXB1dGUgdGhlIGNvcnJlY3QgVmVyc2lvbiBmcm9tIGEgcG9y
dCBuYW1lLgorICAgICAgICAoVGVzdFBvcnQudmVyc2lvbl9uYW1lKTogTWlycm9yIFBvcnQgb2Jq
ZWN0LgorICAgICAgICAoVGVzdFBvcnQuYmFzZWxpbmVfc2VhcmNoX3BhdGgpOiBSZXBsYWNlIHdp
bjcgd2l0aCA3c3AwLgorICAgICAgICAoVGVzdFBvcnQuX2FsbF9zeXN0ZW1zKTogRGl0dG8uCisg
ICAgICAgIChUZXN0UG9ydC5jb25maWd1cmF0aW9uX3NwZWNpZmllcl9tYWNyb3MpOiBEaXR0by4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5OgorICAgICAgICAoV2luUG9y
dCk6CisgICAgICAgIChXaW5Qb3J0Ll9faW5pdF9fKTogQ29uc3RydWN0IFZlcnNpb24gb2JqZWN0
IGZyb20gcG9ydCBuYW1lLgorICAgICAgICAoV2luUG9ydC5kZWZhdWx0X2Jhc2VsaW5lX3NlYXJj
aF9wYXRoKTogVXNlIHRoZSBpbnRlcm5hbCBtYXBwaW5nIG9mIHZlcnNpb24gbmFtZXMgdG8gY29u
c3RydWN0CisgICAgICAgIGFwcGxlX2FkZGl0aW9ucyBleHBlY3RhdGlvbnMuCisgICAgICAgIChX
aW5DYWlyb1BvcnQpOgorICAgICAgICAoV2luQ2Fpcm9Qb3J0LmRlZmF1bHRfYmFzZWxpbmVfc2Vh
cmNoX3BhdGgpOiBVc2UgTUlOL01BWCBpbnN0ZWFkIG9mIHRoZSBWRVJTSU9OX0ZBTExCQUNLX09S
REVSLgorICAgICAgICAoV2luQ2Fpcm9Qb3J0Ll9mdXR1cmVfcG9ydF9uYW1lKTogRGVsZXRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luX3VuaXR0ZXN0LnB5OgorICAgICAg
ICAoV2luUG9ydFRlc3QudGVzdF9iYXNlbGluZV9zZWFyY2hfcGF0aCk6IEFkZCBuZXcgV2luZG93
cyB2ZXJzaW9ucyBub3QgcHJldmlvdXNseSBpbmNsdWRlZC4KKyAgICAgICAgKFdpblBvcnRUZXN0
Ll9hc3NlcnRfdmVyc2lvbik6IEhhbmRsZSBleHBlY3RlZF92ZXJzaW9uIGFzIGEgVmVyc2lvbiBv
YmplY3QuCisgICAgICAgIChXaW5Qb3J0VGVzdC50ZXN0X3ZlcnNpb25zKTogUGFzcyBWZXJzaW9u
IG9iamVjdHMgaW5zdGVhZCBvZiB2ZXJzaW9uIHN0cmluZ3MuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9wb3J0L3dwZS5weToKKyAgICAgICAgKFdQRVBvcnQuX2dlbmVyYXRlX2FsbF90ZXN0
X2NvbmZpZ3VyYXRpb25zKTogUmVwbGFjZSBfdmVyc2lvbiB3aXRoIHZlcnNpb25fbmFtZSgpLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0ZXN0
LnB5OgorICAgICAgICAoUHJpbnRFeHBlY3RhdGlvbnNUZXN0LnRlc3RfbXVsdGlwbGUpOiBSZXBs
YWNlIHdpbjcgd2l0aCA3c3AwLgorICAgICAgICAoUHJpbnRCYXNlbGluZXNUZXN0LnRlc3RfbXVs
dGlwbGUpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMv
cXVldWVzLnB5OgorICAgICAgICAoUGF0Y2hQcm9jZXNzaW5nUXVldWUuX25ld19wb3J0X25hbWVf
ZnJvbV9vbGQpOiBVc2Ugb3NfdmVyc2lvbl9uYW1lKCkgaW5zdGVhZCBvZiBWZXJzaW9uIG9iamVj
dC4KKwogMjAxNy0xMi0xMiAgQWxpY2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+
CiAKICAgICAgICAgRmxha2luZXNzIGRhc2hib2FyZDogTWFrZSBHVEsgYW5kIFdQRSBidWlsZHMg
aW5oZXJpdCBleHBlY3RhdGlvbnMgZnJvbSBXSzIKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3ZlcnNpb24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vdmVyc2lvbi5weQkocmV2aXNpb24gMjI1ODIxKQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vdmVyc2lvbi5weQkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTEg
QEAgY2xhc3MgVmVyc2lvbihvYmplY3QpOgogICAgICAgICAgICAgcmVzdWx0W2ldID0gaW50KHZh
bFtpXSkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBmcm9tX25hbWUobmFtZSwgcGxhdGZvcm09Tm9uZSk6CisgICAgICAgIGZyb20gdmVyc2lvbl9u
YW1lX21hcCBpbXBvcnQgVmVyc2lvbk5hbWVNYXAKKyAgICAgICAgcmV0dXJuIFZlcnNpb25OYW1l
TWFwLm1hcChwbGF0Zm9ybSkuZnJvbV9uYW1lKG5hbWUpWzFdCisKICAgICBkZWYgX19pbml0X18o
c2VsZiwgbWFqb3I9MCwgbWlub3I9MCwgdGlueT0wLCBtaWNybz0wLCBuYW5vPTApOgogICAgICAg
ICBzZWxmLm1ham9yID0gaW50KG1ham9yKQogICAgICAgICBzZWxmLm1pbm9yID0gaW50KG1pbm9y
KQpAQCAtMTExLDYgKzExNiw4IEBAIGNsYXNzIFZlcnNpb24ob2JqZWN0KToKICAgICAgICAgcmV0
dXJuIHJlc3VsdAogCiAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBv
dGhlciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICAgZm9yIGkgaW4geHJh
bmdlKGxlbihzZWxmKSk6CiAgICAgICAgICAgICBpZiBjbXAoc2VsZltpXSwgb3RoZXJbaV0pOgog
ICAgICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZltpXSwgb3RoZXJbaV0pCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXAucHkJKHJl
dmlzaW9uIDIyNTgyMSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25f
bmFtZV9tYXAucHkJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDkgQEAgY2xhc3MgVmVyc2lv
bk5hbWVNYXAob2JqZWN0KToKICAgICBAc3RhdGljbWV0aG9kCiAgICAgQG1lbW9pemVkCiAgICAg
ZGVmIG1hcChwbGF0Zm9ybT1Ob25lKToKKyAgICAgICAgZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZp
ZyBpbXBvcnQgYXBwbGVfYWRkaXRpb25zCisgICAgICAgIGlmIGFwcGxlX2FkZGl0aW9ucygpOgor
ICAgICAgICAgICAgcmV0dXJuIGFwcGxlX2FkZGl0aW9ucygpLnZlcnNpb25fbmFtZV9tYXBwaW5n
KHBsYXRmb3JtKQogICAgICAgICByZXR1cm4gVmVyc2lvbk5hbWVNYXAocGxhdGZvcm09cGxhdGZv
cm0pCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcGxhdGZvcm09Tm9uZSk6CkBAIC03Miw2ICs3
NSw5IEBAIGNsYXNzIFZlcnNpb25OYW1lTWFwKG9iamVjdCk6CiAgICAgICAgICAgICAnbGludXgn
OiB7fSwKICAgICAgICAgfQogCisgICAgICAgICMgd2luY2Fpcm8gdXNlcyB0aGUgc2FtZSB2ZXJz
aW9ucyBhcyBXaW5kb3dzCisgICAgICAgIHNlbGYubWFwcGluZ1tQVUJMSUNfVEFCTEVdWyd3aW5j
YWlybyddID0gc2VsZi5tYXBwaW5nW1BVQkxJQ19UQUJMRV1bJ3dpbiddCisKICAgICBAY2xhc3Nt
ZXRob2QKICAgICBkZWYgX2F1dG9tYXBfdG9fbWFqb3JfdmVyc2lvbihjbHMsIHByZWZpeCwgbWlu
aW11bT1WZXJzaW9uKDEpLCBtYXhpbXVtPVZlcnNpb24oMSkpOgogICAgICAgICByZXN1bHQgPSB7
fQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVzdC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX3Vu
aXR0ZXN0LnB5CShyZXZpc2lvbiAyMjU4MjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi92ZXJzaW9uX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsMyArMTMwLDQg
QEAgY2xhc3MgVmVyc2lvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKQogICAgICAgICBzZWxm
LmFzc2VydEdyZWF0ZXIoVmVyc2lvbigxLCAyLCA0KSwgVmVyc2lvbigxLCAyLCAzKSkKICAgICAg
ICAgc2VsZi5hc3NlcnRHcmVhdGVyKFZlcnNpb24oMSwgMywgMiksIFZlcnNpb24oMSwgMiwgMykp
CiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihWZXJzaW9uKDIsIDEsIDEpLCBWZXJzaW9uKDEs
IDIsIDMpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFZlcnNpb24oMSwgMiwgMyksIE5v
bmUpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1p
bmZvLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9wbGF0Zm9ybWluZm8ucHkJKHJldmlzaW9uIDIyNTgyMSkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDcgQEAgaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiAKIGZyb20gd2Via2l0cHkuY29tbW9u
LnZlcnNpb24gaW1wb3J0IFZlcnNpb24KLWZyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFt
ZV9tYXAgaW1wb3J0IFZlcnNpb25OYW1lTWFwCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9u
X25hbWVfbWFwIGltcG9ydCBQVUJMSUNfVEFCTEUsIFZlcnNpb25OYW1lTWFwCiBmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUKIAogCkBAIC01NCwy
NCArNTQsMTcgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgICAgIHNlbGYub3Nf
bmFtZSA9IHNlbGYuX2RldGVybWluZV9vc19uYW1lKHN5c19tb2R1bGUucGxhdGZvcm0pCiAgICAg
ICAgIHNlbGYub3NfdmVyc2lvbiA9IE5vbmUKIAorICAgICAgICBzZWxmLl9pc19jeWd3aW4gPSBz
eXNfbW9kdWxlLnBsYXRmb3JtID09ICdjeWd3aW4nCisKICAgICAgICAgaWYgc2VsZi5vc19uYW1l
LnN0YXJ0c3dpdGgoJ21hYycpOgotICAgICAgICAgICAgdmVyc2lvbiA9IFZlcnNpb24uZnJvbV9z
dHJpbmcocGxhdGZvcm1fbW9kdWxlLm1hY192ZXIoKVswXSkKKyAgICAgICAgICAgIHNlbGYub3Nf
dmVyc2lvbiA9IFZlcnNpb24uZnJvbV9zdHJpbmcocGxhdGZvcm1fbW9kdWxlLm1hY192ZXIoKVsw
XSkKICAgICAgICAgZWxpZiBzZWxmLm9zX25hbWUuc3RhcnRzd2l0aCgnd2luJyk6Ci0gICAgICAg
ICAgICB2ZXJzaW9uID0gc2VsZi5fd2luX3ZlcnNpb24oKQorICAgICAgICAgICAgc2VsZi5vc192
ZXJzaW9uID0gc2VsZi5fd2luX3ZlcnNpb24oKQogICAgICAgICBlbGlmIHNlbGYub3NfbmFtZSA9
PSAnbGludXgnIG9yIHNlbGYub3NfbmFtZSA9PSAnZnJlZWJzZCcgb3Igc2VsZi5vc19uYW1lID09
ICdvcGVuYnNkJyBvciBzZWxmLm9zX25hbWUgPT0gJ25ldGJzZCc6Ci0gICAgICAgICAgICB2ZXJz
aW9uID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAg
ICAjIE1vc3Qgb3RoZXIgcGxhdGZvcm1zIChuYW1lbHkgaU9TKSByZXR1cm4gY29uZm9ybWluZyB2
ZXJzaW9uIHN0cmluZ3MuCi0gICAgICAgICAgICB2ZXJzaW9uID0gVmVyc2lvbi5mcm9tX3N0cmlu
ZyhwbGF0Zm9ybV9tb2R1bGUucmVsZWFzZSgpKQotCi0gICAgICAgIHNlbGYuX2lzX2N5Z3dpbiA9
IHN5c19tb2R1bGUucGxhdGZvcm0gPT0gJ2N5Z3dpbicKLQotICAgICAgICBpZiB2ZXJzaW9uIGlz
IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBW
ZXJzaW9uTmFtZU1hcC5tYXAoc2VsZikudG9fbmFtZSh2ZXJzaW9uLCB0YWJsZT0ncHVibGljJykK
LSAgICAgICAgYXNzZXJ0IHNlbGYub3NfdmVyc2lvbiBpcyBub3QgTm9uZQotICAgICAgICBzZWxm
Lm9zX3ZlcnNpb24gPSBzZWxmLm9zX3ZlcnNpb24ubG93ZXIoKS5yZXBsYWNlKCcgJywgJycpCisg
ICAgICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBWZXJzaW9uLmZyb21fc3RyaW5nKHBsYXRmb3Jt
X21vZHVsZS5yZWxlYXNlKCkpCiAKICAgICBkZWYgaXNfbWFjKHNlbGYpOgogICAgICAgICByZXR1
cm4gc2VsZi5vc19uYW1lID09ICdtYWMnCkBAIC0xMTAsNiArMTAzLDExIEBAIGNsYXNzIFBsYXRm
b3JtSW5mbyhvYmplY3QpOgogICAgICAgICAjIFdpbmRvd3MtMjAwOFNlcnZlclIyLTYuMS43NjAw
CiAgICAgICAgIHJldHVybiBzZWxmLl9wbGF0Zm9ybV9tb2R1bGUucGxhdGZvcm0oKQogCisgICAg
ZGVmIG9zX3ZlcnNpb25fbmFtZShzZWxmLCB0YWJsZT1QVUJMSUNfVEFCTEUpOgorICAgICAgICBp
ZiBub3Qgc2VsZi5vc192ZXJzaW9uOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAg
cmV0dXJuIFZlcnNpb25OYW1lTWFwLm1hcChzZWxmKS50b19uYW1lKHNlbGYub3NfdmVyc2lvbiwg
dGFibGU9dGFibGUpCisKICAgICBkZWYgdG90YWxfYnl0ZXNfbWVtb3J5KHNlbGYpOgogICAgICAg
ICBpZiBzZWxmLmlzX21hYygpOgogICAgICAgICAgICAgcmV0dXJuIGxvbmcoc2VsZi5fZXhlY3V0
aXZlLnJ1bl9jb21tYW5kKFsic3lzY3RsIiwgIi1uIiwgImh3Lm1lbXNpemUiXSkpCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRm
b3JtaW5mb19tb2NrLnB5CShyZXZpc2lvbiAyMjU4MjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDEwICsyOCwxMiBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi52
ZXJzaW9uIGltcG9ydCBWZXJzaW9uCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25hbWVf
bWFwIGltcG9ydCBQVUJMSUNfVEFCTEUsIFZlcnNpb25OYW1lTWFwCiAKIAogY2xhc3MgTW9ja1Bs
YXRmb3JtSW5mbyhvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvc19uYW1lPSdtYWMn
LCBvc192ZXJzaW9uPSdzbm93bGVvcGFyZCcpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvc19u
YW1lPSdtYWMnLCBvc192ZXJzaW9uPVZlcnNpb24oMTAsIDYpKToKKyAgICAgICAgYXNzZXJ0IGlz
aW5zdGFuY2Uob3NfdmVyc2lvbiwgVmVyc2lvbikKICAgICAgICAgc2VsZi5vc19uYW1lID0gb3Nf
bmFtZQogICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBvc192ZXJzaW9uCiAgICAgICAgIHNlbGYu
ZXhwZWN0ZWRfeGNvZGVfc2ltY3RsX2xpc3QgPSBOb25lCkBAIC02MCw2ICs2MiwxMSBAQCBjbGFz
cyBNb2NrUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgZGVmIGRpc3BsYXlfbmFtZShzZWxmKToK
ICAgICAgICAgcmV0dXJuICJNb2NrUGxhdGZvcm0gMS4wIgogCisgICAgZGVmIG9zX3ZlcnNpb25f
bmFtZShzZWxmLCB0YWJsZT1QVUJMSUNfVEFCTEUpOgorICAgICAgICBpZiBub3Qgc2VsZi5vc192
ZXJzaW9uOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIFZlcnNpb25O
YW1lTWFwLm1hcChzZWxmKS50b19uYW1lKHNlbGYub3NfdmVyc2lvbiwgdGFibGU9dGFibGUpCisK
ICAgICBkZWYgdG90YWxfYnl0ZXNfbWVtb3J5KHNlbGYpOgogICAgICAgICByZXR1cm4gMyAqIDEw
MjQgKiAxMDI0ICogMTAyNCAgIyAzR0IgaXMgYSByZWFzb25hYmxlIGFtb3VudCBvZiByYW0gdG8g
bW9jay4KIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRm
b3JtaW5mb191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMjU4MjEp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX3Vu
aXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw4IEBAIGNsYXNzIFRlc3RQbGF0
Zm9ybUluZm8odW5pdHRlc3QuVGVzdENhc2UKICAgICAgICAgIyBUaGlzIHRlc3QgbWFrZXMgc3Vy
ZSB0aGUgcmVhbCAodW5tb2NrZWQpIGNvZGUgYWN0dWFsbHkgd29ya3MuCiAgICAgICAgIGluZm8g
PSBQbGF0Zm9ybUluZm8oc3lzLCBwbGF0Zm9ybSwgRXhlY3V0aXZlKCkpCiAgICAgICAgIHNlbGYu
YXNzZXJ0Tm90RXF1YWxzKGluZm8ub3NfbmFtZSwgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90
RXF1YWxzKGluZm8ub3NfdmVyc2lvbiwgJycpCisgICAgICAgIGlmIGluZm8uaXNfbWFjKCkgb3Ig
aW5mby5pc193aW4oKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGluZm8ub3Nf
dmVyc2lvbikKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoaW5mby5kaXNwbGF5X25hbWUo
KSwgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmZvLmlzX21hYygpIG9yIGluZm8uaXNf
d2luKCkgb3IgaW5mby5pc19saW51eCgpIG9yIGluZm8uaXNfZnJlZWJzZCgpKQogICAgICAgICBz
ZWxmLmFzc2VydElzTm90Tm9uZShpbmZvLnRlcm1pbmFsX3dpZHRoKCkpCkBAIC0xMzIsMzcgKzEz
Myw2IEBAIGNsYXNzIFRlc3RQbGF0Zm9ybUluZm8odW5pdHRlc3QuVGVzdENhc2UKIAogICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgc2VsZi5tYWtlX2luZm8sIGZha2Vf
c3lzKCd2bXMnKSkKIAotICAgIGRlZiB0ZXN0X29zX3ZlcnNpb24oc2VsZik6Ci0gICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBzZWxmLm1ha2VfaW5mbywgZmFrZV9zeXMo
J2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC40LjMnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZGFyd2luJyksIGZha2VfcGxhdGZvcm0oJzEw
LjUuMScpKS5vc192ZXJzaW9uLCAnbGVvcGFyZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC42LjEn
KSkub3NfdmVyc2lvbiwgJ3Nub3dsZW9wYXJkJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZGFyd2luJyksIGZha2VfcGxhdGZvcm0oJzEwLjcuMScp
KS5vc192ZXJzaW9uLCAnbGlvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtl
X2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC44LjEnKSkub3NfdmVy
c2lvbiwgJ21vdW50YWlubGlvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtl
X2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC45LjAnKSkub3NfdmVy
c2lvbiwgJ21hdmVyaWNrcycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2lu
Zm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC4xMC4wJykpLm9zX3ZlcnNp
b24sICd5b3NlbWl0ZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8o
ZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC4xMS4wJykpLm9zX3ZlcnNpb24s
ICdlbGNhcGl0YW4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZh
a2Vfc3lzKCdkYXJ3aW4nKSwgZmFrZV9wbGF0Zm9ybSgnMTAuMTIuMCcpKS5vc192ZXJzaW9uLCAn
c2llcnJhJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5
cygnZGFyd2luJyksIGZha2VfcGxhdGZvcm0oJzEwLjEzLjAnKSkub3NfdmVyc2lvbiwgJ2hpZ2hz
aWVycmEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lz
KCdkYXJ3aW4nKSwgZmFrZV9wbGF0Zm9ybSgnMTAuMTQuMCcpKS5vc192ZXJzaW9uLCAnZnV0dXJl
JykKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCds
aW51eDInKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzEwLjQnKSkub3NfdmVyc2lvbiwgTm9uZSkKLQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdmcmVlYnNk
OCcpLCBmYWtlX3BsYXRmb3JtKCcnLCAnOC4zLVBSRVJFTEVBU0UnKSkub3NfdmVyc2lvbiwgTm9u
ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZnJl
ZWJzZDknKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzkuMC1SRUxFQVNFJykpLm9zX3ZlcnNpb24sIE5v
bmUpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHNlbGYubWFr
ZV9pbmZvLCBmYWtlX3N5cygnd2luMzInKSwgZmFrZV9wbGF0Zm9ybSh3aW5fdmVyc2lvbl9zdHJp
bmc9JzUuMC4xMjM0JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8o
ZmFrZV9zeXMoJ3dpbjMyJyksIGZha2VfcGxhdGZvcm0od2luX3ZlcnNpb25fc3RyaW5nPScxMC4w
LjE0MzkzJykpLm9zX3ZlcnNpb24sICd3aW4xMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMyJyksIGZha2VfcGxhdGZvcm0od2luX3ZlcnNp
b25fc3RyaW5nPSc2LjIuMTIzNCcpKS5vc192ZXJzaW9uLCAnOCcpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMyJyksIGZha2VfcGxhdGZvcm0o
d2luX3ZlcnNpb25fc3RyaW5nPSc2LjEuNzYwMCcpKS5vc192ZXJzaW9uLCAnN3NwMCcpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ3dpbjMyJyksIGZh
a2VfcGxhdGZvcm0od2luX3ZlcnNpb25fc3RyaW5nPSc2LjAuMTIzNCcpKS5vc192ZXJzaW9uLCAn
dmlzdGEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lz
KCd3aW4zMicpLCBmYWtlX3BsYXRmb3JtKHdpbl92ZXJzaW9uX3N0cmluZz0nNS4xLjEyMzQnKSku
b3NfdmVyc2lvbiwgJ3hwJykKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25F
cnJvciwgc2VsZi5tYWtlX2luZm8sIGZha2Vfc3lzKCd3aW4zMicpLCBleGVjdXRpdmU9ZmFrZV9l
eGVjdXRpdmUoJzUuMC4xMjM0JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtl
X2luZm8oZmFrZV9zeXMoJ2N5Z3dpbicpLCBleGVjdXRpdmU9ZmFrZV9leGVjdXRpdmUoJzYuMi4x
MjM0JykpLm9zX3ZlcnNpb24sICc4JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1h
a2VfaW5mbyhmYWtlX3N5cygnY3lnd2luJyksIGV4ZWN1dGl2ZT1mYWtlX2V4ZWN1dGl2ZSgnNi4x
Ljc2MDAnKSkub3NfdmVyc2lvbiwgJzdzcDAnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNl
bGYubWFrZV9pbmZvKGZha2Vfc3lzKCdjeWd3aW4nKSwgZXhlY3V0aXZlPWZha2VfZXhlY3V0aXZl
KCc2LjAuMTIzNCcpKS5vc192ZXJzaW9uLCAndmlzdGEnKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdjeWd3aW4nKSwgZXhlY3V0aXZlPWZha2VfZXhl
Y3V0aXZlKCc1LjEuMTIzNCcpKS5vc192ZXJzaW9uLCAneHAnKQotCiAgICAgZGVmIHRlc3RfZGlz
cGxheV9uYW1lKHNlbGYpOgogICAgICAgICBpbmZvID0gc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMo
J2RhcndpbicpKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhpbmZvLmRpc3BsYXlfbmFt
ZSgpLCAnJykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVs
cy90ZXN0X2NvbmZpZ3VyYXRpb24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfY29uZmlndXJhdGlvbi5weQkocmV2aXNpb24g
MjI1ODIxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rl
c3RfY29uZmlndXJhdGlvbi5weQkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBpbXBv
cnQgaXRlcnRvb2xzCiAKIGNsYXNzIFRlc3RDb25maWd1cmF0aW9uKG9iamVjdCk6CiAgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHZlcnNpb24sIGFyY2hpdGVjdHVyZSwgYnVpbGRfdHlwZSk6Ci0gICAg
ICAgIHNlbGYudmVyc2lvbiA9IHZlcnNpb24KKyAgICAgICAgc2VsZi52ZXJzaW9uID0gdmVyc2lv
bi5sb3dlcigpLnJlcGxhY2UoJyAnLCAnJykgaWYgdmVyc2lvbiBpcyBub3QgTm9uZSBlbHNlICcn
CiAgICAgICAgIHNlbGYuYXJjaGl0ZWN0dXJlID0gYXJjaGl0ZWN0dXJlCiAgICAgICAgIHNlbGYu
YnVpbGRfdHlwZSA9IGJ1aWxkX3R5cGUKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zX3VuaXR0ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4
cGVjdGF0aW9uc191bml0dGVzdC5weQkocmV2aXNpb24gMjI1ODIxKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zX3VuaXR0ZXN0
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC00NzQsNyArNDc0LDcgQEAgQnVnKHkpIFsgV2luIE1hYyBE
ZWJ1ZyBdIGZhaWx1cmVzL2V4cGVjdAogCiAgICAgICAgIGFjdHVhbF9leHBlY3RhdGlvbnMgPSBl
eHBlY3RhdGlvbnMucmVtb3ZlX2NvbmZpZ3VyYXRpb25fZnJvbV90ZXN0KCdmYWlsdXJlcy9leHBl
Y3RlZC9mb28uaHRtbCcsIHRlc3RfY29uZmlnKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
IiIiQnVnKHgpIFsgTGludXggVmlzdGEgV2luNyBSZWxlYXNlIF0gZmFpbHVyZXMvZXhwZWN0ZWQv
Zm9vLmh0bWwgWyBGYWlsdXJlIF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiIiJCdWcoeCkg
WyA3U1AwIExpbnV4IFZpc3RhIFJlbGVhc2UgXSBmYWlsdXJlcy9leHBlY3RlZC9mb28uaHRtbCBb
IEZhaWx1cmUgXQogQnVnKHkpIFsgV2luIE1hYyBEZWJ1ZyBdIGZhaWx1cmVzL2V4cGVjdGVkL2Zv
by5odG1sIFsgQ3Jhc2ggXQogIiIiLCBhY3R1YWxfZXhwZWN0YXRpb25zKQogCkBAIC00OTMsNyAr
NDkzLDcgQEAgQnVnKHkpIFsgV2luIERlYnVnIF0gZmFpbHVyZXMvZXhwZWN0ZWQvZgogCiAgICAg
ICAgIGFjdHVhbF9leHBlY3RhdGlvbnMgPSBleHBlY3RhdGlvbnMucmVtb3ZlX2NvbmZpZ3VyYXRp
b25fZnJvbV90ZXN0KCdmYWlsdXJlcy9leHBlY3RlZC9mb28uaHRtbCcsIHRlc3RfY29uZmlnKQog
ICAgICAgICBhY3R1YWxfZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zLnJlbW92ZV9jb25maWd1
cmF0aW9uX2Zyb21fdGVzdCgnZmFpbHVyZXMvZXhwZWN0ZWQvZm9vLmh0bWwnLCBob3N0LnBvcnRf
ZmFjdG9yeS5nZXQoJ3Rlc3Qtd2luLXZpc3RhJywgTm9uZSkudGVzdF9jb25maWd1cmF0aW9uKCkp
Ci0gICAgICAgIGFjdHVhbF9leHBlY3RhdGlvbnMgPSBleHBlY3RhdGlvbnMucmVtb3ZlX2NvbmZp
Z3VyYXRpb25fZnJvbV90ZXN0KCdmYWlsdXJlcy9leHBlY3RlZC9mb28uaHRtbCcsIGhvc3QucG9y
dF9mYWN0b3J5LmdldCgndGVzdC13aW4td2luNycsIE5vbmUpLnRlc3RfY29uZmlndXJhdGlvbigp
KQorICAgICAgICBhY3R1YWxfZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zLnJlbW92ZV9jb25m
aWd1cmF0aW9uX2Zyb21fdGVzdCgnZmFpbHVyZXMvZXhwZWN0ZWQvZm9vLmh0bWwnLCBob3N0LnBv
cnRfZmFjdG9yeS5nZXQoJ3Rlc3Qtd2luLTdzcDAnLCBOb25lKS50ZXN0X2NvbmZpZ3VyYXRpb24o
KSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiIkJ1Zyh5KSBbIFdpbiBEZWJ1ZyBdIGZh
aWx1cmVzL2V4cGVjdGVkL2Zvby5odG1sIFsgQ3Jhc2ggXQogIiIiLCBhY3R1YWxfZXhwZWN0YXRp
b25zKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9hcHBsZS5weQkocmV2aXNpb24gMjI1
ODIxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2FwcGxlLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0yNywxMCArMjcsMTEgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogaW1wb3J0IGxvZ2dpbmcK
LWltcG9ydCBvcwogCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9y
dCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9p
emVkCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25hbWVfbWFwIGltcG9ydCBWZXJzaW9u
TmFtZU1hcAogZnJvbSB3ZWJraXRweS5wb3J0LmJhc2UgaW1wb3J0IFBvcnQKK2Zyb20gd2Via2l0
cHkucG9ydC5jb25maWcgaW1wb3J0IGFwcGxlX2FkZGl0aW9ucwogZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRp
b24KIAogCkBAIC00MCwxOSArNDEsOSBAQCBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1l
X18pCiBjbGFzcyBBcHBsZVBvcnQoUG9ydCk6CiAgICAgIiIiU2hhcmVkIGxvZ2ljIGJldHdlZW4g
YWxsIG9mIEFwcGxlJ3MgcG9ydHMuIiIiCiAKLSAgICAjIFRoaXMgaXMgdXNlZCB0byByZXByZXNl
bnQgdGhlIHZlcnNpb24gb2YgYW4gb3BlcmF0aW5nIHN5c3RlbQotICAgICMgY29ycmVzcG9uZGlu
ZyB0byB0aGUgIm1hYyIgb3IgIndpbiIgYmFzZSBMYXlvdXRUZXN0cy9wbGF0Zm9ybQotICAgICMg
ZGlyZWN0b3J5LiAgSSdtIG5vdCBzdXJlIHRoaXMgY29uY2VwdCBpcyB2ZXJ5IHVzZWZ1bCwKLSAg
ICAjIGJ1dCBpdCBnaXZlcyB1cyBhIHdheSB0byByZWZlciB0byBmYWxsYmFjayBwYXRocyAqb25s
eSogaW5jbHVkaW5nCi0gICAgIyB0aGUgYmFzZSBkaXJlY3RvcnkuCi0gICAgIyBUaGlzIGlzIG1v
c3RseSBkb25lIGJlY2F1c2UgVGVzdENvbmZpZ3VyYXRpb24gYXNzdW1lcyB0aGF0IHNlbGYudmVy
c2lvbigpCi0gICAgIyB3aWxsIG5ldmVyIHJldHVybiBOb25lLiAoTm9uZSB3b3VsZCBiZSBhbm90
aGVyIHdheSB0byByZXByZXNlbnQgdGhpcyBjb25jZXB0LikKLSAgICAjIEFwcGxlIHN1cHBvc2Vk
bHkgaGFzIGV4cGxpY2l0ICJmdXR1cmUiIHJlc3VsdHMgd2hpY2ggYXJlIGtlcHQgaW4gYW4gaW50
ZXJuYWwgcmVwb3NpdG9yeS4KLSAgICAjIEl0J3MgcG9zc2libGUgdGhhdCBBcHBsZSB3b3VsZCB3
YW50IHRvIGZpeCB0aGlzIGNvZGUgdG8gd29yayBiZXR0ZXIgd2l0aCB0aG9zZSByZXN1bHRzLgot
ICAgIEZVVFVSRV9WRVJTSU9OID0gJ2Z1dHVyZScgICMgRklYTUU6IFRoaXMgd2hvbGUgJ2Z1dHVy
ZScgdGhpbmcgZmVlbHMgbGlrZSBhIGhhY2suCi0KICAgICAjIG92ZXJyaWRkZW4gaW4gc3ViY2xh
c3NlcwotICAgIFZFUlNJT05fRkFMTEJBQ0tfT1JERVIgPSBbXQorICAgIFZFUlNJT05fTUlOID0g
Tm9uZQorICAgIFZFUlNJT05fTUFYID0gTm9uZQogICAgIEFSQ0hJVEVDVFVSRVMgPSBbXQogICAg
IF9jcmFzaF9sb2dzX3RvX3NraXBfZm9yX2hvc3QgPSB7fQogCkBAIC03MSw5ICs2Miw5IEBAIGNs
YXNzIEFwcGxlUG9ydChQb3J0KToKICAgICAgICAgICAgICMgYmVpbmcgcnVuLCBzbyB0aGlzIHdv
bid0IHdvcmsgaWYgeW91J3JlIG5vdCBvbiBtYWMgb3Igd2luIChyZXNwZWN0aXZlbHkpLgogICAg
ICAgICAgICAgIyBJZiB5b3UncmUgbm90IG9uIHRoZSBvL3MgaW4gcXVlc3Rpb24sIHlvdSBtdXN0
IHNwZWNpZnkgYSBmdWxsIHZlcnNpb24gb3IgLWZ1dHVyZSAoY2YuIGFib3ZlKS4KICAgICAgICAg
ICAgIGlmIHBvcnRfbmFtZSA9PSBjbHMucG9ydF9uYW1lIGFuZCBub3QgZ2V0YXR0cihvcHRpb25z
LCAnd2Via2l0X3Rlc3RfcnVubmVyJywgRmFsc2UpOgotICAgICAgICAgICAgICAgIHBvcnRfbmFt
ZSA9IGNscy5wb3J0X25hbWUgKyAnLScgKyBob3N0LnBsYXRmb3JtLm9zX3ZlcnNpb24KKyAgICAg
ICAgICAgICAgICBwb3J0X25hbWUgPSBjbHMucG9ydF9uYW1lICsgJy0nICsgaG9zdC5wbGF0Zm9y
bS5vc192ZXJzaW9uX25hbWUoKS5sb3dlcigpLnJlcGxhY2UoJyAnLCAnJykKICAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgcG9ydF9uYW1lID0gY2xzLnBvcnRfbmFtZSArICctJyAr
IGhvc3QucGxhdGZvcm0ub3NfdmVyc2lvbiArICctd2syJworICAgICAgICAgICAgICAgIHBvcnRf
bmFtZSA9IGNscy5wb3J0X25hbWUgKyAnLScgKyBob3N0LnBsYXRmb3JtLm9zX3ZlcnNpb25fbmFt
ZSgpLmxvd2VyKCkucmVwbGFjZSgnICcsICcnKSArICctd2syJwogICAgICAgICBlbGlmIGdldGF0
dHIob3B0aW9ucywgJ3dlYmtpdF90ZXN0X3J1bm5lcicsIEZhbHNlKSBhbmQgICctd2syJyBub3Qg
aW4gcG9ydF9uYW1lOgogICAgICAgICAgICAgcG9ydF9uYW1lICs9ICctd2syJwogCkBAIC0xMDMs
MzEgKzk0LDMwIEBAIGNsYXNzIEFwcGxlUG9ydChQb3J0KToKICAgICBkZWYgc2hvdWxkX3JldHJ5
X2NyYXNoZXMoc2VsZik6CiAgICAgICAgIHJldHVybiBUcnVlCiAKLSAgICBkZWYgX3NraXBwZWRf
ZmlsZV9zZWFyY2hfcGF0aHMoc2VsZik6Ci0gICAgICAgICMgV2UgZG9uJ3QgaGF2ZSBhIGRlZGlj
YXRlZCBTa2lwcGVkIGZpbGUgZm9yIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBwb3J0
OwotICAgICAgICAjIHdlIGp1c3QgdXNlIHRoZSBvbmUgaW4gcGxhdGZvcm0ve21hYyx3aW59Ci0g
ICAgICAgIG1vc3RfcmVjZW50X25hbWUgPSBzZWxmLlZFUlNJT05fRkFMTEJBQ0tfT1JERVJbLTFd
Ci0gICAgICAgIHJldHVybiBzZXQoZmlsdGVyKGxhbWJkYSBuYW1lOiBuYW1lICE9IG1vc3RfcmVj
ZW50X25hbWUsIHN1cGVyKEFwcGxlUG9ydCwgc2VsZikuX3NraXBwZWRfZmlsZV9zZWFyY2hfcGF0
aHMoKSkpCi0KICAgICAjIEZJWE1FOiBBIG1vcmUgc29waGlzdGljYXRlZCB2ZXJzaW9uIG9mIHRo
aXMgZnVuY3Rpb24gc2hvdWxkIG1vdmUgdG8gV2ViS2l0UG9ydCBhbmQgcmVwbGFjZSBhbGwgY2Fs
bHMgdG8gbmFtZSgpLgogICAgICMgVGhpcyBpcyBhbHNvIGEgbWlzbGVhZGluZyBuYW1lLCBzaW5j
ZSAnbWFjLWZ1dHVyZScgZ2V0cyByZW1hcHBlZCB0byAnbWFjJy4KICAgICBkZWYgX3BvcnRfbmFt
ZV93aXRoX3ZlcnNpb24oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLm5hbWUoKS5yZXBsYWNl
KCctZnV0dXJlJywgJycpLnJlcGxhY2UoJy13azInLCAnJykKIAotICAgIGRlZiBfYWxsb3dlZF9w
b3J0X25hbWVzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5WRVJTSU9OX0ZBTExCQUNLX09S
REVSICsgW3NlbGYuX2Z1dHVyZV9wb3J0X25hbWUoKV0KLQotICAgIGRlZiBfZnV0dXJlX3BvcnRf
bmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYub3BlcmF0aW5nX3N5c3RlbSgpICsgIi0i
ICsgc2VsZi5GVVRVUkVfVkVSU0lPTgorICAgIEBtZW1vaXplZAorICAgIGRlZiBfYWxsb3dlZF92
ZXJzaW9ucyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5WRVJTSU9OX01JTiBpcyBOb25lIG9yIHNl
bGYuVkVSU0lPTl9NQVggaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBz
b3J0ZWRfdmVyc2lvbnMgPSBzb3J0ZWQoVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYuaG9zdC5wbGF0
Zm9ybSkubWFwcGluZ19mb3JfcGxhdGZvcm0ocGxhdGZvcm09c2VsZi5wb3J0X25hbWUuc3BsaXQo
Jy0nKVswXSkudmFsdWVzKCkpCisgICAgICAgIHJldHVybiBzb3J0ZWRfdmVyc2lvbnNbc29ydGVk
X3ZlcnNpb25zLmluZGV4KHNlbGYuVkVSU0lPTl9NSU4pOnNvcnRlZF92ZXJzaW9ucy5pbmRleChz
ZWxmLlZFUlNJT05fTUFYKSArIDFdCiAKICAgICBkZWYgX2dlbmVyYXRlX2FsbF90ZXN0X2NvbmZp
Z3VyYXRpb25zKHNlbGYpOgogICAgICAgICBjb25maWd1cmF0aW9ucyA9IFtdCi0gICAgICAgIGZv
ciBwb3J0X25hbWUgaW4gc2VsZi5fYWxsb3dlZF9wb3J0X25hbWVzKCk6CisgICAgICAgIGZvciB2
ZXJzaW9uIGluIHNlbGYuX2FsbG93ZWRfdmVyc2lvbnMoKToKICAgICAgICAgICAgIGZvciBidWls
ZF90eXBlIGluIHNlbGYuQUxMX0JVSUxEX1RZUEVTOgogICAgICAgICAgICAgICAgIGZvciBhcmNo
aXRlY3R1cmUgaW4gc2VsZi5BUkNISVRFQ1RVUkVTOgotICAgICAgICAgICAgICAgICAgICBjb25m
aWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVyc2lvbj1zZWxmLl9zdHJpcF9w
b3J0X25hbWVfcHJlZml4KHBvcnRfbmFtZSksIGFyY2hpdGVjdHVyZT1hcmNoaXRlY3R1cmUsIGJ1
aWxkX3R5cGU9YnVpbGRfdHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHZlcnNpb25fbmFtZSA9
IFZlcnNpb25OYW1lTWFwLm1hcChzZWxmLmhvc3QucGxhdGZvcm0pLnRvX25hbWUodmVyc2lvbiwg
cGxhdGZvcm09c2VsZi5wb3J0X25hbWUuc3BsaXQoJy0nKVswXSkKKyAgICAgICAgICAgICAgICAg
ICAgY29uZmlndXJhdGlvbnMuYXBwZW5kKFRlc3RDb25maWd1cmF0aW9uKHZlcnNpb249dmVyc2lv
bl9uYW1lLCBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUp
KQogICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbnMKIAorICAgIGRlZiBfYXBwbGVfYmFzZWxp
bmVfcGF0aChzZWxmLCBwbGF0Zm9ybSk6CisgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVt
LmpvaW4oYXBwbGVfYWRkaXRpb25zKCkubGF5b3V0X3Rlc3RzX3BhdGgoKSwgcGxhdGZvcm0pCisK
ICAgICBkZWYgX3BhdGhfdG9faGVscGVyKHNlbGYpOgogICAgICAgICBiaW5hcnlfbmFtZSA9ICdM
YXlvdXRUZXN0SGVscGVyJwogICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aChiaW5hcnlf
bmFtZSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CShyZXZpc2lvbiAyMjU4
MjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkod29ya2luZyBjb3B5
KQpAQCAtNDksNiArNDksNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQg
bWVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5wcmV0dHlwYXRjaCBpbXBvcnQgUHJldHR5UGF0Y2gK
IGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgcGF0aAogZnJvbSB3ZWJraXRweS5j
b21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHku
Y29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFBVQkxJQ19UQUJMRSwgVmVyc2lvbk5hbWVN
YXAKIGZyb20gd2Via2l0cHkuY29tbW9uLndhdmVkaWZmIGltcG9ydCBXYXZlRGlmZgogZnJvbSB3
ZWJraXRweS5jb21tb24ud2Via2l0X2ZpbmRlciBpbXBvcnQgV2ViS2l0RmluZGVyCiBmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBUZXN0
Q29uZmlndXJhdGlvbgpAQCAtOTksNyArMTAwLDcgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAg
ICAgICBzZWxmLl9uYW1lID0gcG9ydF9uYW1lCiAKICAgICAgICAgIyBUaGVzZSBhcmUgZGVmYXVs
dCB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgb3ZlcnJpZGRlbiBpbiBhIHN1YmNsYXNzZXMuCi0gICAg
ICAgIHNlbGYuX3ZlcnNpb24gPSAnJworICAgICAgICBzZWxmLl9vc192ZXJzaW9uID0gTm9uZQog
CiAgICAgICAgICMgRklYTUU6IFRoaXMgY2FuIGJlIHJlbW92ZWQgb25jZSBkZWZhdWx0IGFyY2hp
dGVjdHVyZXMgZm9yIEdUSyBhbmQgRUZMIEVXUyBib3RzIGFyZSBzZXQuCiAgICAgICAgIHNlbGYu
ZGlkX292ZXJyaWRlX2FyY2hpdGVjdHVyZSA9IEZhbHNlCkBAIC03NjQsMTMgKzc2NSwxNiBAQCBj
bGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICMgU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUg
dGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgogICAgICAgICByZXR1cm4gJ21hYycKIAotICAg
IGRlZiB2ZXJzaW9uKHNlbGYpOgorICAgIEBtZW1vaXplZAorICAgIGRlZiB2ZXJzaW9uX25hbWUo
c2VsZik6CiAgICAgICAgICIiIlJldHVybnMgYSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgdmVyc2lv
biBvZiBhIGdpdmVuIHBsYXRmb3JtLCBlLmcuCiAgICAgICAgICdsZW9wYXJkJyBvciAneHAnLgog
CiAgICAgICAgIFRoaXMgaXMgdXNlZCB0byBoZWxwIGlkZW50aWZ5IHRoZSBleGFjdCBwb3J0IHdo
ZW4gcGFyc2luZyB0ZXN0CiAgICAgICAgIGV4cGVjdGF0aW9ucywgZGV0ZXJtaW5pbmcgc2VhcmNo
IHBhdGhzLCBhbmQgbG9nZ2luZyBpbmZvcm1hdGlvbi4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYu
X3ZlcnNpb24KKyAgICAgICAgaWYgc2VsZi5fb3NfdmVyc2lvbiBpcyBOb25lOgorICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIFZlcnNpb25OYW1lTWFwLm1hcChzZWxmLmhv
c3QucGxhdGZvcm0pLnRvX25hbWUoc2VsZi5fb3NfdmVyc2lvbiwgdGFibGU9UFVCTElDX1RBQkxF
KQogCiAgICAgZGVmIGdldF9vcHRpb24oc2VsZiwgbmFtZSwgZGVmYXVsdF92YWx1ZT1Ob25lKToK
ICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fb3B0aW9ucywgbmFtZSwgZGVmYXVsdF92YWx1
ZSkKQEAgLTEwNzIsNyArMTA3Niw3IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICBkZWYgdGVz
dF9jb25maWd1cmF0aW9uKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBjdXJyZW50IFRl
c3RDb25maWd1cmF0aW9uIGZvciB0aGUgcG9ydC4iIiIKICAgICAgICAgaWYgbm90IHNlbGYuX3Rl
c3RfY29uZmlndXJhdGlvbjoKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfY29uZmlndXJhdGlvbiA9
IFRlc3RDb25maWd1cmF0aW9uKHNlbGYuX3ZlcnNpb24sIHNlbGYuYXJjaGl0ZWN0dXJlKCksIHNl
bGYuX29wdGlvbnMuY29uZmlndXJhdGlvbi5sb3dlcigpKQorICAgICAgICAgICAgc2VsZi5fdGVz
dF9jb25maWd1cmF0aW9uID0gVGVzdENvbmZpZ3VyYXRpb24oc2VsZi52ZXJzaW9uX25hbWUoKSwg
c2VsZi5hcmNoaXRlY3R1cmUoKSwgc2VsZi5fb3B0aW9ucy5jb25maWd1cmF0aW9uLmxvd2VyKCkp
CiAgICAgICAgIHJldHVybiBzZWxmLl90ZXN0X2NvbmZpZ3VyYXRpb24KIAogICAgICMgRklYTUU6
IEJlbG9uZ3Mgb24gYSBQbGF0Zm9ybSBvYmplY3QuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHkJKHJldmlzaW9uIDIyNTgyMSkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAgZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBN
b2NrTwogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQg
TW9ja0ZpbGVTeXN0ZW0KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW9j
ayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZSwgTW9ja0V4ZWN1dGl2ZTIsIE1vY2tQcm9jZXNzLCBTY3Jp
cHRFcnJvcgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBv
cnQgTW9ja1N5c3RlbUhvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAg
aW1wb3J0IFZlcnNpb25OYW1lTWFwCiAKIAogY2xhc3MgRGFyd2luVGVzdChwb3J0X3Rlc3RjYXNl
LlBvcnRUZXN0Q2FzZSk6CkBAIC00MSw3ICs0Miw3IEBAIGNsYXNzIERhcndpblRlc3QocG9ydF90
ZXN0Y2FzZS5Qb3J0VGVzdEMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfcG9y
dChvcHRpb25zPU1vY2tPcHRpb25zKGd1YXJkX21hbGxvYz1UcnVlKSkuZGVmYXVsdF90aW1lb3V0
X21zKCksIDM1MDAwMCkKIAogICAgIGRlZiBhc3NlcnRfbmFtZShzZWxmLCBwb3J0X25hbWUsIG9z
X3ZlcnNpb25fc3RyaW5nLCBleHBlY3RlZCk6Ci0gICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9z
dChvc19uYW1lPXNlbGYub3NfbmFtZSwgb3NfdmVyc2lvbj1vc192ZXJzaW9uX3N0cmluZykKKyAg
ICAgICAgaG9zdCA9IE1vY2tTeXN0ZW1Ib3N0KG9zX25hbWU9c2VsZi5vc19uYW1lLCBvc192ZXJz
aW9uPVZlcnNpb25OYW1lTWFwLm1hcCgpLmZyb21fbmFtZShvc192ZXJzaW9uX3N0cmluZylbMV0p
CiAgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1wb3J0
X25hbWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHBvcnQubmFtZSgpKQog
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeV91bml0dGVzdC5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeV91bml0dGVz
dC5weQkocmV2aXNpb24gMjI1ODIxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Zh
Y3RvcnlfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxMSBAQCBpbXBv
cnQgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0
aW9ucwogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQg
TW9ja1N5c3RlbUhvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNp
b24KIAogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBmYWN0b3J5CiBmcm9tIHdlYmtpdHB5LnBv
cnQgaW1wb3J0IGd0awogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBtYWMKLWZyb20gd2Via2l0
cHkucG9ydCBpbXBvcnQgdGVzdAogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCB3aW4KIAogCkBA
IC01NSwxNSArNTUsMTUgQEAgY2xhc3MgRmFjdG9yeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgIGRlZiB0ZXN0X21hYyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25h
bWU9J21hYy1saW9uJywgY2xzPW1hYy5NYWNQb3J0KQogICAgICAgICBzZWxmLmFzc2VydF9wb3J0
KHBvcnRfbmFtZT0nbWFjLWxpb24td2syJywgY2xzPW1hYy5NYWNQb3J0KQotICAgICAgICBzZWxm
LmFzc2VydF9wb3J0KHBvcnRfbmFtZT0nbWFjJywgb3NfbmFtZT0nbWFjJywgb3NfdmVyc2lvbj0n
bGlvbicsIGNscz1tYWMuTWFjUG9ydCkKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25h
bWU9Tm9uZSwgIG9zX25hbWU9J21hYycsIG9zX3ZlcnNpb249J2xpb24nLCBjbHM9bWFjLk1hY1Bv
cnQpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPSdtYWMnLCBvc19uYW1lPSdt
YWMnLCBvc192ZXJzaW9uPVZlcnNpb24uZnJvbV9uYW1lKCdMaW9uJyksIGNscz1tYWMuTWFjUG9y
dCkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9Tm9uZSwgIG9zX25hbWU9J21h
YycsIG9zX3ZlcnNpb249VmVyc2lvbi5mcm9tX25hbWUoJ0xpb24nKSwgY2xzPW1hYy5NYWNQb3J0
KQogCiAgICAgZGVmIHRlc3Rfd2luKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBv
cnRfbmFtZT0nd2luLXhwJywgY2xzPXdpbi5XaW5Qb3J0KQogICAgICAgICBzZWxmLmFzc2VydF9w
b3J0KHBvcnRfbmFtZT0nd2luLXhwLXdrMicsIGNscz13aW4uV2luUG9ydCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfcG9ydChwb3J0X25hbWU9J3dpbicsIG9zX25hbWU9J3dpbicsIG9zX3ZlcnNpb249
J3hwJywgY2xzPXdpbi5XaW5Qb3J0KQotICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFt
ZT1Ob25lLCBvc19uYW1lPSd3aW4nLCBvc192ZXJzaW9uPSd4cCcsIGNscz13aW4uV2luUG9ydCkK
LSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9Tm9uZSwgb3NfbmFtZT0nd2luJywg
b3NfdmVyc2lvbj0neHAnLCBvcHRpb25zPXNlbGYud2Via2l0X29wdGlvbnMsIGNscz13aW4uV2lu
UG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9J3dpbicsIG9zX25hbWU9
J3dpbicsIG9zX3ZlcnNpb249VmVyc2lvbi5mcm9tX25hbWUoJ1hQJyksIGNscz13aW4uV2luUG9y
dCkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9Tm9uZSwgb3NfbmFtZT0nd2lu
Jywgb3NfdmVyc2lvbj1WZXJzaW9uLmZyb21fbmFtZSgnWFAnKSwgY2xzPXdpbi5XaW5Qb3J0KQor
ICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT1Ob25lLCBvc19uYW1lPSd3aW4nLCBv
c192ZXJzaW9uPVZlcnNpb24uZnJvbV9uYW1lKCdYUCcpLCBvcHRpb25zPXNlbGYud2Via2l0X29w
dGlvbnMsIGNscz13aW4uV2luUG9ydCkKIAogICAgIGRlZiB0ZXN0X2d0ayhzZWxmKToKICAgICAg
ICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9J2d0aycsIGNscz1ndGsuR3RrUG9ydCkKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weQkocmV2aXNpb24gMjI1ODIxKQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weQkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcg
KzE2OCw3IEBAIGNsYXNzIEd0a1BvcnQoUG9ydCk6CiAgICAgZGVmIF9nZW5lcmF0ZV9hbGxfdGVz
dF9jb25maWd1cmF0aW9ucyhzZWxmKToKICAgICAgICAgY29uZmlndXJhdGlvbnMgPSBbXQogICAg
ICAgICBmb3IgYnVpbGRfdHlwZSBpbiBzZWxmLkFMTF9CVUlMRF9UWVBFUzoKLSAgICAgICAgICAg
IGNvbmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJhdGlvbih2ZXJzaW9uPXNlbGYuX3Zl
cnNpb24sIGFyY2hpdGVjdHVyZT0neDg2JywgYnVpbGRfdHlwZT1idWlsZF90eXBlKSkKKyAgICAg
ICAgICAgIGNvbmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJhdGlvbih2ZXJzaW9uPXNl
bGYudmVyc2lvbl9uYW1lKCksIGFyY2hpdGVjdHVyZT0neDg2JywgYnVpbGRfdHlwZT1idWlsZF90
eXBlKSkKICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25zCiAKICAgICBkZWYgX3BhdGhfdG9f
ZHJpdmVyKHNlbGYpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CShyZXZpc2lv
biAyMjU4MjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBAIGltcG9ydCB0cmFjZWJhY2sKIAogZnJvbSB3ZWJraXRw
eS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi52
ZXJzaW9uIGltcG9ydCBWZXJzaW9uCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25hbWVf
bWFwIGltcG9ydCBWZXJzaW9uTmFtZU1hcAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9k
ZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24KIGZyb20gd2Vi
a2l0cHkucG9ydC5jb25maWcgaW1wb3J0IGFwcGxlX2FkZGl0aW9ucwogZnJvbSB3ZWJraXRweS5w
b3J0LmRhcndpbiBpbXBvcnQgRGFyd2luUG9ydApAQCAtMzYsNiArMzcsOSBAQCBfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiBjbGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgogICAg
IHBvcnRfbmFtZSA9ICJpb3MiCiAKKyAgICBWRVJTSU9OX01JTiA9IFZlcnNpb24oMTEpCisgICAg
VkVSU0lPTl9NQVggPSBWZXJzaW9uKDEyKQorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Qs
IHBvcnRfbmFtZSwgKiprd2FyZ3MpOgogICAgICAgICBzdXBlcihJT1NQb3J0LCBzZWxmKS5fX2lu
aXRfXyhob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQogICAgICAgICBzZWxmLl90ZXN0X3J1bm5l
cl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gU2ltdWxhdG9yUHJvY2VzcwpAQCAtNDUsNiArNDksMTEg
QEAgY2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICBkZWYgX2RldmljZV9mb3Jfd29ya2Vy
X251bWJlcl9tYXAoc2VsZik6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAor
ICAgIGRlZiB2ZXJzaW9uX25hbWUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX29zX3ZlcnNpb24g
aXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBWZXJzaW9u
TmFtZU1hcC5tYXAoc2VsZi5ob3N0LnBsYXRmb3JtKS50b19uYW1lKHNlbGYuX29zX3ZlcnNpb24s
IHBsYXRmb3JtPUlPU1BvcnQucG9ydF9uYW1lKQorCiAgICAgZGVmIGRyaXZlcl9jbWRfbGluZV9m
b3JfbG9nZ2luZyhzZWxmKToKICAgICAgICAgIyBBdm9pZCBjcmVhdGluZy9jb25uZWN0aW5nIHRv
IGRldmljZXMganVzdCBmb3IgbG9nZ2luZyB0aGUgY29tbWFuZGxpbmUuCiAgICAgICAgIHNlbGYu
X3ByaW50aW5nX2NtZF9saW5lID0gVHJ1ZQpAQCAtNjMsNyArNzIsNyBAQCBjbGFzcyBJT1NQb3J0
KERhcndpblBvcnQpOgogICAgICAgICBjb25maWd1cmF0aW9ucyA9IFtdCiAgICAgICAgIGZvciBi
dWlsZF90eXBlIGluIHNlbGYuQUxMX0JVSUxEX1RZUEVTOgogICAgICAgICAgICAgZm9yIGFyY2hp
dGVjdHVyZSBpbiBzZWxmLkFSQ0hJVEVDVFVSRVM6Ci0gICAgICAgICAgICAgICAgY29uZmlndXJh
dGlvbnMuYXBwZW5kKFRlc3RDb25maWd1cmF0aW9uKHZlcnNpb249c2VsZi5fdmVyc2lvbiwgYXJj
aGl0ZWN0dXJlPWFyY2hpdGVjdHVyZSwgYnVpbGRfdHlwZT1idWlsZF90eXBlKSkKKyAgICAgICAg
ICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVyc2lvbj1z
ZWxmLnZlcnNpb25fbmFtZSgpLCBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlLCBidWlsZF90eXBl
PWJ1aWxkX3R5cGUpKQogICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbnMKIAogICAgIEBtZW1v
aXplZApAQCAtODgsMjIgKzk3LDYgQEAgY2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICAg
ICAgICAgIHJldHVybiBzZWxmLl90ZXN0aW5nX2RldmljZSh3b3JrZXJfbnVtYmVyKQogICAgICAg
ICByZXR1cm4gc2VsZi5fY3VycmVudF9kZXZpY2UKIAotICAgIGRlZiBfYXBwbGVfYWRkaXRpb25z
X3BhdGgoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGlmIG5hbWUgPT0gJ3drMic6Ci0gICAgICAgICAg
ICByZXR1cm4gTm9uZQotICAgICAgICBzcGxpdF9uYW1lID0gbmFtZS5zcGxpdCgnLScpCi0gICAg
ICAgIG9zX2luZGV4ID0gLTEKLSAgICAgICAgZm9yIGkgaW4geHJhbmdlKDIpOgotICAgICAgICAg
ICAgaWYgc3BsaXRfbmFtZVtvc19pbmRleF0gPT0gJ3drMScgb3Igc3BsaXRfbmFtZVtvc19pbmRl
eF0gPT0gJ3drMicgb3Igc3BsaXRfbmFtZVtvc19pbmRleF0gPT0gJ3NpbXVsYXRvcicgb3Igc3Bs
aXRfbmFtZVtvc19pbmRleF0gPT0gJ2RldmljZSc6Ci0gICAgICAgICAgICAgICAgb3NfaW5kZXgg
LT0gMQotICAgICAgICBpZiBzcGxpdF9uYW1lW29zX2luZGV4XSAhPSBzcGxpdF9uYW1lWzBdOgot
ICAgICAgICAgICAgb3NfbmFtZSA9IGFwcGxlX2FkZGl0aW9ucygpLmlvc19vc19uYW1lKHNwbGl0
X25hbWVbb3NfaW5kZXhdKQotICAgICAgICAgICAgaWYgbm90IG9zX25hbWU6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIHNwbGl0X25hbWVbb3NfaW5kZXhdID0gb3Nf
bmFtZQotICAgICAgICBuYW1lID0gJy0nLmpvaW4oc3BsaXRfbmFtZSkKLSAgICAgICAgcmV0dXJu
IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihhcHBsZV9hZGRpdGlvbnMoKS5sYXlvdXRfdGVzdHNfcGF0
aCgpLCBuYW1lKQotCiAgICAgQG1lbW9pemVkCiAgICAgZGVmIGRlZmF1bHRfYmFzZWxpbmVfc2Vh
cmNoX3BhdGgoc2VsZik6CiAgICAgICAgIHdrX3N0cmluZyA9ICd3azEnCkBAIC0xMTEsMzAgKzEw
NCw0MiBAQCBjbGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAgd2tfc3RyaW5n
ID0gJ3drMicKICAgICAgICAgIyBJZiB3ZSBkb24ndCBoYXZlIGEgc3BlY2lmaWVkIHZlcnNpb24s
IHRoYXQgbWVhbnMgd2UgdXNpbmcgdGhlIHBvcnQgd2l0aG91dCBhbiBTREsuCiAgICAgICAgICMg
VGhpcyB1c3VhbGx5IG1lYW5zIHdlJ3JlIGRvaW5nIHNvbWUgdHlwZSBvZiB0ZXN0aW5nLkluIHRo
aXMgY2FzZSwgZG9uJ3QgYWRkIHZlcnNpb24gZmFsbGJhY2tzCi0gICAgICAgIGZhbGxiYWNrX25h
bWVzID0gW10KKyAgICAgICAgZXhwZWN0YXRpb25zID0gW10KKyAgICAgICAgaWYgYXBwbGVfYWRk
aXRpb25zKCkgYW5kIHNlbGYuaW9zX3ZlcnNpb24oKToKKyAgICAgICAgICAgIGFwcGxlX25hbWUg
PSBWZXJzaW9uTmFtZU1hcC5tYXAoc2VsZi5ob3N0LnBsYXRmb3JtKS50b19uYW1lKHNlbGYuaW9z
X3ZlcnNpb24oKSwgcGxhdGZvcm09SU9TUG9ydC5wb3J0X25hbWUsIHRhYmxlPSdpbnRlcm5hbCcp
Lmxvd2VyKCkucmVwbGFjZSgnICcsICcnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXBw
bGVfbmFtZSA9IE5vbmUKICAgICAgICAgaWYgc2VsZi5pb3NfdmVyc2lvbigpOgotICAgICAgICAg
ICAgZmFsbGJhY2tfbmFtZXMuYXBwZW5kKCd7fS17fS17fScuZm9ybWF0KHNlbGYucG9ydF9uYW1l
LCBzZWxmLmlvc192ZXJzaW9uKCkubWFqb3IsIHdrX3N0cmluZykpCi0gICAgICAgICAgICBmYWxs
YmFja19uYW1lcy5hcHBlbmQoJ3t9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIHNlbGYuaW9z
X3ZlcnNpb24oKS5tYWpvcikpCi0gICAgICAgIGZhbGxiYWNrX25hbWVzLmFwcGVuZCgne30te30n
LmZvcm1hdChzZWxmLnBvcnRfbmFtZSwgd2tfc3RyaW5nKSkKLSAgICAgICAgZmFsbGJhY2tfbmFt
ZXMuYXBwZW5kKHNlbGYucG9ydF9uYW1lKQorICAgICAgICAgICAgaWYgYXBwbGVfbmFtZToKKyAg
ICAgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3Bh
dGgoJ3t9LXt9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIGFwcGxlX25hbWUsIHdrX3N0cmlu
ZykpKQorICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl93ZWJraXRfYmFzZWxp
bmVfcGF0aCgne30te30te30nLmZvcm1hdChzZWxmLnBvcnRfbmFtZSwgc2VsZi5pb3NfdmVyc2lv
bigpLm1ham9yLCB3a19zdHJpbmcpKSkKKyAgICAgICAgICAgIGlmIGFwcGxlX25hbWU6CisgICAg
ICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl9hcHBsZV9iYXNlbGluZV9wYXRo
KCd7fS17fScuZm9ybWF0KHNlbGYucG9ydF9uYW1lLCBhcHBsZV9uYW1lKSkpCisgICAgICAgICAg
ICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKCd7fS17fScu
Zm9ybWF0KHNlbGYucG9ydF9uYW1lLCBzZWxmLmlvc192ZXJzaW9uKCkubWFqb3IpKSkKKworICAg
ICAgICBpZiBhcHBsZV9hZGRpdGlvbnMoKToKKyAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBl
bmQoc2VsZi5fYXBwbGVfYmFzZWxpbmVfcGF0aCgne30te30nLmZvcm1hdChzZWxmLnBvcnRfbmFt
ZSwgd2tfc3RyaW5nKSkpCisgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fd2Via2l0
X2Jhc2VsaW5lX3BhdGgoJ3t9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIHdrX3N0cmluZykp
KQorICAgICAgICBpZiBhcHBsZV9hZGRpdGlvbnMoKToKKyAgICAgICAgICAgIGV4cGVjdGF0aW9u
cy5hcHBlbmQoc2VsZi5fYXBwbGVfYmFzZWxpbmVfcGF0aChzZWxmLnBvcnRfbmFtZSkpCisgICAg
ICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoc2VsZi5w
b3J0X25hbWUpKQorCiAgICAgICAgIGlmIHNlbGYuaW9zX3ZlcnNpb24oKToKLSAgICAgICAgICAg
IGZhbGxiYWNrX25hbWVzLmFwcGVuZCgne30te30nLmZvcm1hdChJT1NQb3J0LnBvcnRfbmFtZSwg
c2VsZi5pb3NfdmVyc2lvbigpLm1ham9yKSkKLSAgICAgICAgZmFsbGJhY2tfbmFtZXMuYXBwZW5k
KCd7fS17fScuZm9ybWF0KElPU1BvcnQucG9ydF9uYW1lLCB3a19zdHJpbmcpKQotICAgICAgICBm
YWxsYmFja19uYW1lcy5hcHBlbmQoSU9TUG9ydC5wb3J0X25hbWUpCisgICAgICAgICAgICBpZiBh
cHBsZV9uYW1lOgorICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fYXBw
bGVfYmFzZWxpbmVfcGF0aCgne30te30nLmZvcm1hdChJT1NQb3J0LnBvcnRfbmFtZSwgYXBwbGVf
bmFtZSkpKQorICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl93ZWJraXRfYmFz
ZWxpbmVfcGF0aCgne30te30nLmZvcm1hdChJT1NQb3J0LnBvcnRfbmFtZSwgc2VsZi5pb3NfdmVy
c2lvbigpLm1ham9yKSkpCisKKyAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCk6CisgICAgICAg
ICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3BhdGgoJ3t9LXt9
Jy5mb3JtYXQoSU9TUG9ydC5wb3J0X25hbWUsIHdrX3N0cmluZykpKQorICAgICAgICBleHBlY3Rh
dGlvbnMuYXBwZW5kKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKCd7fS17fScuZm9ybWF0KElP
U1BvcnQucG9ydF9uYW1lLCB3a19zdHJpbmcpKSkKKyAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25z
KCk6CisgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5l
X3BhdGgoSU9TUG9ydC5wb3J0X25hbWUpKQorICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNl
bGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKElPU1BvcnQucG9ydF9uYW1lKSkKIAogICAgICAgICBp
ZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicpOgotICAgICAgICAgICAgZmFs
bGJhY2tfbmFtZXMuYXBwZW5kKCd3azInKQorICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVu
ZChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCgnd2syJykpCiAKLSAgICAgICAgd2Via2l0X2V4
cGVjdGF0aW9ucyA9IG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgZmFsbGJhY2tfbmFt
ZXMpCi0gICAgICAgIGlmIGFwcGxlX2FkZGl0aW9ucygpIGFuZCBnZXRhdHRyKGFwcGxlX2FkZGl0
aW9ucygpLCAibGF5b3V0X3Rlc3RzX3BhdGgiLCBOb25lKToKLSAgICAgICAgICAgIGFwcGxlX2V4
cGVjdGF0aW9ucyA9IG1hcChzZWxmLl9hcHBsZV9hZGRpdGlvbnNfcGF0aCwgZmFsbGJhY2tfbmFt
ZXMpCi0gICAgICAgICAgICByZXN1bHQgPSBbXQotICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdl
KGxlbih3ZWJraXRfZXhwZWN0YXRpb25zKSk6Ci0gICAgICAgICAgICAgICAgaWYgYXBwbGVfZXhw
ZWN0YXRpb25zW2ldOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGFwcGxlX2V4
cGVjdGF0aW9uc1tpXSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHdlYmtpdF9leHBl
Y3RhdGlvbnNbaV0pCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Ci0gICAgICAgIHJldHVybiB3
ZWJraXRfZXhwZWN0YXRpb25zCisgICAgICAgIHJldHVybiBleHBlY3RhdGlvbnMKIAogICAgIGRl
ZiB0ZXN0X2V4cGVjdGF0aW9uc19maWxlX3Bvc2l0aW9uKHNlbGYpOgogICAgICAgICByZXR1cm4g
NApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkJKHJldmlz
aW9uIDIyNTgyMSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDksOSArMTA5LDcgQEAgY2xhc3MgSU9TRGV2aWNlUG9ydChJ
T1NQb3J0KToKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaWYgZGV2aWNlLnBs
YXRmb3JtLm9zX3ZlcnNpb24gIT0gdmVyc2lvbjoKICAgICAgICAgICAgICAgICAgICAgcmFpc2Ug
UnVudGltZUVycm9yKCdNdWx0aXBsZSBjb25uZWN0ZWQgZGV2aWNlcyBoYXZlIGRpZmZlcmVudCBp
T1MgdmVyc2lvbnMnKQotICAgICAgICBpZiB2ZXJzaW9uOgotICAgICAgICAgICAgcmV0dXJuIFZl
cnNpb25OYW1lTWFwLm1hcChzZWxmLmhvc3QucGxhdGZvcm0pLmZyb21fbmFtZSh2ZXJzaW9uKVsx
XQotICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gdmVyc2lvbgogCiAgICAgIyBG
SVhNRTogVGhlc2UgbmVlZCBkZXZpY2UgaW1wbGVtZW50YXRpb25zIDxyZGFyOi8vcHJvYmxlbS8z
MDQ5Nzk5MT4uCiAgICAgZGVmIGNoZWNrX2Zvcl9sZWFrcyhzZWxmLCBwcm9jZXNzX25hbWUsIHBy
b2Nlc3NfcGlkKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfZGV2aWNl
X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3NfZGV2aWNlX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMjU4MjEpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAt
MzEsMTUgKzMxLDEwIEBAIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgcG9ydF90ZXN0Y2FzZQog
CiBjbGFzcyBJT1NEZXZpY2VUZXN0KGlvc190ZXN0Y2FzZS5JT1NUZXN0KToKICAgICBvc19uYW1l
ID0gJ2lvcycKLSAgICBvc192ZXJzaW9uID0gJycKKyAgICBvc192ZXJzaW9uID0gTm9uZQogICAg
IHBvcnRfbmFtZSA9ICdpb3MtZGV2aWNlJwogICAgIHBvcnRfbWFrZXIgPSBJT1NEZXZpY2VQb3J0
CiAKLSAgICBkZWYgbWFrZV9wb3J0KHNlbGYsIGhvc3Q9Tm9uZSwgcG9ydF9uYW1lPU5vbmUsIG9w
dGlvbnM9Tm9uZSwgb3NfbmFtZT1Ob25lLCBvc192ZXJzaW9uPU5vbmUsICoqa3dhcmdzKToKLSAg
ICAgICAgcG9ydCA9IHN1cGVyKElPU0RldmljZVRlc3QsIHNlbGYpLm1ha2VfcG9ydChob3N0PWhv
c3QsIHBvcnRfbmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3NfbmFtZT1vc19uYW1l
LCBzX3ZlcnNpb249b3NfdmVyc2lvbiwga3dhcmdzPWt3YXJncykKLSAgICAgICAgcG9ydC5zZXRf
b3B0aW9uKCd2ZXJzaW9uJywgJzExLjAnKQotICAgICAgICByZXR1cm4gcG9ydAotCiAgICAgZGVm
IHRlc3Rfb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
aW9zLWRldmljZScsIHNlbGYubWFrZV9wb3J0KCkub3BlcmF0aW5nX3N5c3RlbSgpKQogCkBAIC05
MywxNSArODgsMTUgQEAgY2xhc3MgSU9TRGV2aWNlVGVzdChpb3NfdGVzdGNhc2UuSU9TVGVzdAog
ICAgIGRlZiB0ZXN0X2xheW91dF90ZXN0X3NlYXJjaHBhdGhfd2l0aF9hcHBsZV9hZGRpdGlvbnMo
c2VsZik6CiAgICAgICAgIHdpdGggcG9ydF90ZXN0Y2FzZS5iaW5kX21vY2tfYXBwbGVfYWRkaXRp
b25zKCk6CiAgICAgICAgICAgICBzZWFyY2hfcGF0aCA9IHNlbGYubWFrZV9wb3J0KCkuZGVmYXVs
dF9iYXNlbGluZV9zZWFyY2hfcGF0aCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNo
X3BhdGhbMF0sICcvYWRkaXRpb25hbF90ZXN0aW5nX3BhdGgvaW9zLWRldmljZS1hZGQtMTEtd2sx
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFswXSwgJy9hZGRpdGlvbmFs
X3Rlc3RpbmdfcGF0aC9pb3MtZGV2aWNlLWFkZC1pb3MxMS13azEnKQogICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlYXJjaF9wYXRoWzFdLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vaW9zLWRldmljZS0xMS13azEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJj
aF9wYXRoWzJdLCAnL2FkZGl0aW9uYWxfdGVzdGluZ19wYXRoL2lvcy1kZXZpY2UtYWRkLTExJykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFsyXSwgJy9hZGRpdGlvbmFsX3Rl
c3RpbmdfcGF0aC9pb3MtZGV2aWNlLWFkZC1pb3MxMScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VhcmNoX3BhdGhbM10sICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9p
b3MtZGV2aWNlLTExJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFs0XSwg
Jy9hZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3MtZGV2aWNlLXdrMScpCiAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbNV0sICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9pb3MtZGV2aWNlLXdrMScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNo
X3BhdGhbNl0sICcvYWRkaXRpb25hbF90ZXN0aW5nX3BhdGgvaW9zLWRldmljZScpCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbN10sICcvbW9jay1jaGVja291dC9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9pb3MtZGV2aWNlJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFy
Y2hfcGF0aFs4XSwgJy9hZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3MtYWRkLTExJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFs4XSwgJy9hZGRpdGlvbmFsX3Rlc3Rpbmdf
cGF0aC9pb3MtYWRkLWlvczExJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0
aFs5XSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy0xMScpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbMTBdLCAnL2FkZGl0aW9uYWxfdGVzdGlu
Z19wYXRoL2lvcy13azEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzEx
XSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy13azEnKQpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3IucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3IucHkJKHJldmlzaW9u
IDIyNTgyMSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNyArMjQ2LDcgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9y
dChJT1NQb3J0KToKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5fZXhl
Y3V0aXZlLnJ1bl9jb21tYW5kKFsneGNydW4nLCAnc2ltY3RsJywgJ2Jvb3QnLCBkZXZpY2VfdWRp
ZF0pCiAKLSAgICAgICAgICAgIGlmIG1hY19vc192ZXJzaW9uIGluIFsnZWxjYXBpdGFuJywgJ3lv
c2VtaXRlJywgJ21hdmVyaWNrcyddOgorICAgICAgICAgICAgaWYgbWFjX29zX3ZlcnNpb24gPCBW
ZXJzaW9uLmZyb21fbmFtZSgnU2llcnJhJyk6CiAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgy
LjUpCiAKICAgICAgICAgaWYgbm90IHNlbGYudXNlX211bHRpcGxlX3NpbXVsYXRvcl9hcHBzKCk6
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvcl91bml0dGVz
dC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVs
YXRvcl91bml0dGVzdC5weQkocmV2aXNpb24gMjI1ODIxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2lvc19zaW11bGF0b3JfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTIw
LDEyICsyMCwxMSBAQAogIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1p
bXBvcnQgdGltZQotCiBmcm9tIHdlYmtpdHB5LnBvcnQuaW9zX3NpbXVsYXRvciBpbXBvcnQgSU9T
U2ltdWxhdG9yUG9ydAogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBpb3NfdGVzdGNhc2UKIGZy
b20gd2Via2l0cHkucG9ydCBpbXBvcnQgcG9ydF90ZXN0Y2FzZQogZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKK2Zyb20gd2Via2l0
cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIGZyb20gd2Via2l0cHkudG9vbC5tb2Nr
dG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVj
dXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZTIsIFNjcmlwdEVycm9yCiAKQEAgLTMzLDEy
ICszMiwxMiBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlX21vCiBjbGFz
cyBJT1NTaW11bGF0b3JUZXN0KGlvc190ZXN0Y2FzZS5JT1NUZXN0KToKICAgICAjIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczMTA3CiAgICAgb3NfbmFt
ZSA9ICdtYWMnCi0gICAgb3NfdmVyc2lvbiA9ICcnCisgICAgb3NfdmVyc2lvbiA9IE5vbmUKICAg
ICBwb3J0X25hbWUgPSAnaW9zLXNpbXVsYXRvcicKICAgICBwb3J0X21ha2VyID0gSU9TU2ltdWxh
dG9yUG9ydAogCi0gICAgZGVmIG1ha2VfcG9ydChzZWxmLCBob3N0PU5vbmUsIHBvcnRfbmFtZT1O
b25lLCBvcHRpb25zPU5vbmUsIG9zX25hbWU9Tm9uZSwgb3NfdmVyc2lvbj1Ob25lLCAqKmt3YXJn
cyk6Ci0gICAgICAgIHBvcnQgPSBzdXBlcihJT1NTaW11bGF0b3JUZXN0LCBzZWxmKS5tYWtlX3Bv
cnQoaG9zdD1ob3N0LCBwb3J0X25hbWU9cG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMsIG9zX25h
bWU9b3NfbmFtZSwgc192ZXJzaW9uPW9zX3ZlcnNpb24sIGt3YXJncz1rd2FyZ3MpCisgICAgZGVm
IG1ha2VfcG9ydChzZWxmLCBob3N0PU5vbmUsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUs
IG9zX25hbWU9Tm9uZSwgb3NfdmVyc2lvbj1WZXJzaW9uKDExKSwgKiprd2FyZ3MpOgorICAgICAg
ICBwb3J0ID0gc3VwZXIoSU9TU2ltdWxhdG9yVGVzdCwgc2VsZikubWFrZV9wb3J0KGhvc3Q9aG9z
dCwgcG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCBvc19uYW1lPW9zX25hbWUs
IG9zX3ZlcnNpb249b3NfdmVyc2lvbiwga3dhcmdzPWt3YXJncykKICAgICAgICAgcG9ydC5zZXRf
b3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKQogICAgICAgICByZXR1cm4gcG9ydAogCkBAIC05
MiwxNSArOTEsMTUgQEAgY2xhc3MgSU9TU2ltdWxhdG9yVGVzdChpb3NfdGVzdGNhc2UuSU9TVAog
ICAgIGRlZiB0ZXN0X2xheW91dF90ZXN0X3NlYXJjaHBhdGhfd2l0aF9hcHBsZV9hZGRpdGlvbnMo
c2VsZik6CiAgICAgICAgIHdpdGggcG9ydF90ZXN0Y2FzZS5iaW5kX21vY2tfYXBwbGVfYWRkaXRp
b25zKCk6CiAgICAgICAgICAgICBzZWFyY2hfcGF0aCA9IHNlbGYubWFrZV9wb3J0KCkuZGVmYXVs
dF9iYXNlbGluZV9zZWFyY2hfcGF0aCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNo
X3BhdGhbMF0sICcvYWRkaXRpb25hbF90ZXN0aW5nX3BhdGgvaW9zLXNpbXVsYXRvci1hZGQtOC13
azEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzFdLCAnL21vY2stY2hl
Y2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLXNpbXVsYXRvci04LXdrMScpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbMl0sICcvYWRkaXRpb25hbF90ZXN0aW5nX3Bh
dGgvaW9zLXNpbXVsYXRvci1hZGQtOCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNo
X3BhdGhbM10sICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3Mtc2ltdWxh
dG9yLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzBdLCAnL2FkZGl0
aW9uYWxfdGVzdGluZ19wYXRoL2lvcy1zaW11bGF0b3ItYWRkLWlvczExLXdrMScpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbMV0sICcvbW9jay1jaGVja291dC9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yLTExLXdrMScpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2VhcmNoX3BhdGhbMl0sICcvYWRkaXRpb25hbF90ZXN0aW5nX3BhdGgvaW9zLXNpbXVs
YXRvci1hZGQtaW9zMTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzNd
LCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLXNpbXVsYXRvci0xMScp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbNF0sICcvYWRkaXRpb25hbF90
ZXN0aW5nX3BhdGgvaW9zLXNpbXVsYXRvci13azEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlYXJjaF9wYXRoWzVdLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9z
LXNpbXVsYXRvci13azEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzZd
LCAnL2FkZGl0aW9uYWxfdGVzdGluZ19wYXRoL2lvcy1zaW11bGF0b3InKQogICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzddLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vaW9zLXNpbXVsYXRvcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNo
X3BhdGhbOF0sICcvYWRkaXRpb25hbF90ZXN0aW5nX3BhdGgvaW9zLWFkZC04JykKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFs5XSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRl
c3RzL3BsYXRmb3JtL2lvcy04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0
aFs4XSwgJy9hZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3MtYWRkLWlvczExJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFs5XSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRl
c3RzL3BsYXRmb3JtL2lvcy0xMScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3Bh
dGhbMTBdLCAnL2FkZGl0aW9uYWxfdGVzdGluZ19wYXRoL2lvcy13azEnKQogICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzExXSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3Rz
L3BsYXRmb3JtL2lvcy13azEnKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lv
c190ZXN0Y2FzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
aW9zX3Rlc3RjYXNlLnB5CShyZXZpc2lvbiAyMjU4MjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvaW9zX3Rlc3RjYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMyArMjAsMTgg
QEAKICMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAorZnJvbSB3ZWJraXRw
eS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9y
dCBkYXJ3aW5fdGVzdGNhc2UKLWZyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9j
a09wdGlvbnMKIAogCiBjbGFzcyBJT1NUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0KToK
ICAgICBkaXNhYmxlX3NldHVwID0gVHJ1ZQogCisgICAgZGVmIG1ha2VfcG9ydChzZWxmLCBob3N0
PU5vbmUsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUsIG9zX25hbWU9Tm9uZSwgb3NfdmVy
c2lvbj1WZXJzaW9uKDExKSwgKiprd2FyZ3MpOgorICAgICAgICBwb3J0ID0gc3VwZXIoSU9TVGVz
dCwgc2VsZikubWFrZV9wb3J0KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9u
cz1vcHRpb25zLCBvc19uYW1lPW9zX25hbWUsIG9zX3ZlcnNpb249Tm9uZSwga3dhcmdzPWt3YXJn
cykKKyAgICAgICAgcG9ydC5zZXRfb3B0aW9uKCd2ZXJzaW9uJywgc3RyKG9zX3ZlcnNpb24pKQor
ICAgICAgICByZXR1cm4gcG9ydAorCiAgICAgZGVmIHRlc3RfZHJpdmVyX25hbWUoc2VsZik6CiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX3BvcnQoKS5kcml2ZXJfbmFtZSgpLCAn
RHVtcFJlbmRlclRyZWUuYXBwJykKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L21hYy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5
CShyZXZpc2lvbiAyMjU4MjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTIgQEAKIAogaW1wb3J0IGxvZ2dpbmcKIGlt
cG9ydCBvcwotaW1wb3J0IHRpbWUKIGltcG9ydCByZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5t
ZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVj
dXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uIGlt
cG9ydCBWZXJzaW9uCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25hbWVfbWFwIGltcG9y
dCBWZXJzaW9uTmFtZU1hcAogZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZpZyBpbXBvcnQgYXBwbGVf
YWRkaXRpb25zCiBmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Qb3J0CiAK
QEAgLTQzLDcgKzQ0LDkgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogY2xh
c3MgTWFjUG9ydChEYXJ3aW5Qb3J0KToKICAgICBwb3J0X25hbWUgPSAibWFjIgogCi0gICAgVkVS
U0lPTl9GQUxMQkFDS19PUkRFUiA9IFsnbWFjLXNub3dsZW9wYXJkJywgJ21hYy1saW9uJywgJ21h
Yy1tb3VudGFpbmxpb24nLCAnbWFjLW1hdmVyaWNrcycsICdtYWMteW9zZW1pdGUnLCAnbWFjLWVs
Y2FwaXRhbicsICdtYWMtc2llcnJhJywgJ21hYy1oaWdoc2llcnJhJ10KKyAgICBWRVJTSU9OX01J
TiA9IFZlcnNpb24oMTAsIDYpCisgICAgVkVSU0lPTl9NQVggPSBWZXJzaW9uKDEwLCAxNCkKKwog
ICAgIFNESyA9ICdtYWNvc3gnCiAKICAgICBBUkNISVRFQ1RVUkVTID0gWyd4ODZfNjQnLCAneDg2
J10KQEAgLTUyLDY2ICs1NSw2MiBAQCBjbGFzcyBNYWNQb3J0KERhcndpblBvcnQpOgogCiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgogICAgICAgICBE
YXJ3aW5Qb3J0Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCi0gICAg
ICAgIHNlbGYuX29zX3ZlcnNpb24gPSBwb3J0X25hbWUuc3BsaXQoJy0nKVsxXSBpZiBwb3J0X25h
bWUuc3BsaXQoJy0nKSA+IDEgZWxzZSBzZWxmLmhvc3QucGxhdGZvcm0ub3NfdmVyc2lvbgorICAg
ICAgICBpZiBwb3J0X25hbWUuc3BsaXQoJy0nKSA+IDE6CisgICAgICAgICAgICBzZWxmLl9vc192
ZXJzaW9uID0gVmVyc2lvbk5hbWVNYXAubWFwKGhvc3QucGxhdGZvcm0pLmZyb21fbmFtZShwb3J0
X25hbWUuc3BsaXQoJy0nKVsxXSlbMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYu
X29zX3ZlcnNpb24gPSBzZWxmLmhvc3QucGxhdGZvcm0ub3NfdmVyc2lvbgogCiAgICAgZGVmIF9i
dWlsZF9kcml2ZXJfZmxhZ3Moc2VsZik6CiAgICAgICAgIHJldHVybiBbJ0FSQ0hTPWkzODYnXSBp
ZiBzZWxmLmFyY2hpdGVjdHVyZSgpID09ICd4ODYnIGVsc2UgW10KIAotICAgIGRlZiBfYXBwbGVf
YWRkaXRpb25zX3BhdGgoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGlmIG5hbWUgPT0gJ3drMic6Ci0g
ICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBzcGxpdF9uYW1lID0gbmFtZS5zcGxpdCgn
LScpCi0gICAgICAgIG9zX2luZGV4ID0gLTEKLSAgICAgICAgaWYgc3BsaXRfbmFtZVstMV0gPT0g
J3drMScgb3Igc3BsaXRfbmFtZVstMV0gPT0gJ3drMic6Ci0gICAgICAgICAgICBvc19pbmRleCA9
IC0yCi0gICAgICAgIGlmIHNwbGl0X25hbWVbb3NfaW5kZXhdICE9IHNwbGl0X25hbWVbMF06Ci0g
ICAgICAgICAgICBvc19uYW1lID0gYXBwbGVfYWRkaXRpb25zKCkubWFjX29zX25hbWUoc3BsaXRf
bmFtZVtvc19pbmRleF0pCi0gICAgICAgICAgICBpZiBub3Qgb3NfbmFtZToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgc3BsaXRfbmFtZVtvc19pbmRleF0gPSBvc19u
YW1lCi0gICAgICAgIG5hbWUgPSAnLScuam9pbihzcGxpdF9uYW1lKQotICAgICAgICByZXR1cm4g
c2VsZi5fZmlsZXN5c3RlbS5qb2luKGFwcGxlX2FkZGl0aW9ucygpLmxheW91dF90ZXN0c19wYXRo
KCksIG5hbWUpCi0KICAgICBAbWVtb2l6ZWQKICAgICBkZWYgZGVmYXVsdF9iYXNlbGluZV9zZWFy
Y2hfcGF0aChzZWxmKToKLSAgICAgICAgbWFjX3ZlcnNpb24gPSAnbWFjLXt9Jy5mb3JtYXQoc2Vs
Zi5fb3NfdmVyc2lvbikKLSAgICAgICAgaWYgbWFjX3ZlcnNpb24uZW5kc3dpdGgoc2VsZi5GVVRV
UkVfVkVSU0lPTikgb3IgbWFjX3ZlcnNpb24gbm90IGluIHNlbGYuVkVSU0lPTl9GQUxMQkFDS19P
UkRFUjoKLSAgICAgICAgICAgIHZlcnNpb25fZmFsbGJhY2sgPSBbbWFjX3ZlcnNpb25dCisgICAg
ICAgIHZlcnNpb25fbmFtZV9tYXAgPSBWZXJzaW9uTmFtZU1hcC5tYXAoc2VsZi5ob3N0LnBsYXRm
b3JtKQorICAgICAgICBpZiBzZWxmLl9vc192ZXJzaW9uIDwgc2VsZi5WRVJTSU9OX01JTiBvciBz
ZWxmLl9vc192ZXJzaW9uID4gc2VsZi5WRVJTSU9OX01BWDoKKyAgICAgICAgICAgIHZlcnNpb25f
ZmFsbGJhY2sgPSBbc2VsZi5fb3NfdmVyc2lvbl0KICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IHZlcnNpb25fZmFsbGJhY2sgPSBzZWxmLlZFUlNJT05fRkFMTEJBQ0tfT1JERVJbc2VsZi5WRVJT
SU9OX0ZBTExCQUNLX09SREVSLmluZGV4KG1hY192ZXJzaW9uKTotMV0KKyAgICAgICAgICAgIHNv
cnRlZF92ZXJzaW9ucyA9IHNvcnRlZCh2ZXJzaW9uX25hbWVfbWFwLm1hcHBpbmdfZm9yX3BsYXRm
b3JtKCkudmFsdWVzKCkpCisgICAgICAgICAgICB2ZXJzaW9uX2ZhbGxiYWNrID0gc29ydGVkX3Zl
cnNpb25zW3NvcnRlZF92ZXJzaW9ucy5pbmRleChzZWxmLl9vc192ZXJzaW9uKTotMV0KICAgICAg
ICAgd2tfc3RyaW5nID0gJ3drMScKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRf
dGVzdF9ydW5uZXInKToKICAgICAgICAgICAgIHdrX3N0cmluZyA9ICd3azInCiAKLSAgICAgICAg
ZmFsbGJhY2tfbmFtZXMgPSBbXQorICAgICAgICBleHBlY3RhdGlvbnMgPSBbXQogICAgICAgICBm
b3IgdmVyc2lvbiBpbiB2ZXJzaW9uX2ZhbGxiYWNrOgotICAgICAgICAgICAgZmFsbGJhY2tfbmFt
ZXMuYXBwZW5kKCd7fS17fScuZm9ybWF0KHZlcnNpb24sIHdrX3N0cmluZykpCi0gICAgICAgICAg
ICBmYWxsYmFja19uYW1lcy5hcHBlbmQodmVyc2lvbikKLSAgICAgICAgZmFsbGJhY2tfbmFtZXMg
PSBmYWxsYmFja19uYW1lcyArIFsKLSAgICAgICAgICAgICd7fS17fScuZm9ybWF0KHNlbGYucG9y
dF9uYW1lLCB3a19zdHJpbmcpLAotICAgICAgICAgICAgc2VsZi5wb3J0X25hbWUsCi0gICAgICAg
IF0KLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXInKToKLSAg
ICAgICAgICAgIGZhbGxiYWNrX25hbWVzLmFwcGVuZCgnd2syJykKKyAgICAgICAgICAgIHZlcnNp
b25fbmFtZSA9IHZlcnNpb25fbmFtZV9tYXAudG9fbmFtZSh2ZXJzaW9uKS5sb3dlcigpLnJlcGxh
Y2UoJyAnLCAnJykKKyAgICAgICAgICAgIGlmIGFwcGxlX2FkZGl0aW9ucygpOgorICAgICAgICAg
ICAgICAgIGFwcGxlX25hbWUgPSB2ZXJzaW9uX25hbWVfbWFwLnRvX25hbWUodmVyc2lvbiwgdGFi
bGU9J2ludGVybmFsJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXBwbGVf
bmFtZSA9IE5vbmUKKyAgICAgICAgICAgIGlmIGFwcGxlX25hbWU6CisgICAgICAgICAgICAgICAg
ZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl9hcHBsZV9iYXNlbGluZV9wYXRoKCdtYWMte30te30n
LmZvcm1hdChhcHBsZV9uYW1lLmxvd2VyKCkucmVwbGFjZSgnICcsICcnKSwgd2tfc3RyaW5nKSkp
CisgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9w
YXRoKCdtYWMte30te30nLmZvcm1hdCh2ZXJzaW9uX25hbWUsIHdrX3N0cmluZykpKQorICAgICAg
ICAgICAgaWYgYXBwbGVfbmFtZToKKyAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5k
KHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3BhdGgoJ21hYy17fScuZm9ybWF0KGFwcGxlX25hbWUubG93
ZXIoKS5yZXBsYWNlKCcgJywgJycpKSkpCisgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5k
KHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKCdtYWMte30nLmZvcm1hdCh2ZXJzaW9uX25hbWUp
KSkKKworICAgICAgICBpZiBhcHBsZV9hZGRpdGlvbnMoKToKKyAgICAgICAgICAgIGV4cGVjdGF0
aW9ucy5hcHBlbmQoc2VsZi5fYXBwbGVfYmFzZWxpbmVfcGF0aCgne30te30nLmZvcm1hdChzZWxm
LnBvcnRfbmFtZSwgd2tfc3RyaW5nKSkpCisgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2Vs
Zi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3t9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIHdr
X3N0cmluZykpKQorICAgICAgICBpZiBhcHBsZV9hZGRpdGlvbnMoKToKKyAgICAgICAgICAgIGV4
cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fYXBwbGVfYmFzZWxpbmVfcGF0aCgne30nLmZvcm1hdChz
ZWxmLnBvcnRfbmFtZSkpKQorICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX3dlYmtp
dF9iYXNlbGluZV9wYXRoKHNlbGYucG9ydF9uYW1lKSkKIAotICAgICAgICB3ZWJraXRfZXhwZWN0
YXRpb25zID0gbWFwKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoLCBmYWxsYmFja19uYW1lcykK
LSAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCkgYW5kIGdldGF0dHIoYXBwbGVfYWRkaXRpb25z
KCksICJsYXlvdXRfdGVzdHNfcGF0aCIsIE5vbmUpOgotICAgICAgICAgICAgYXBwbGVfZXhwZWN0
YXRpb25zID0gbWFwKHNlbGYuX2FwcGxlX2FkZGl0aW9uc19wYXRoLCBmYWxsYmFja19uYW1lcykK
LSAgICAgICAgICAgIHJlc3VsdCA9IFtdCi0gICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVu
KHdlYmtpdF9leHBlY3RhdGlvbnMpKToKLSAgICAgICAgICAgICAgICBpZiBhcHBsZV9leHBlY3Rh
dGlvbnNbaV06Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYXBwbGVfZXhwZWN0
YXRpb25zW2ldKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQod2Via2l0X2V4cGVjdGF0
aW9uc1tpXSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQKLSAgICAgICAgcmV0dXJuIHdlYmtp
dF9leHBlY3RhdGlvbnMKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9y
dW5uZXInKToKKyAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fd2Via2l0X2Jh
c2VsaW5lX3BhdGgoJ3drMicpKQorICAgICAgICByZXR1cm4gZXhwZWN0YXRpb25zCiAKKyAgICBA
bWVtb2l6ZWQKICAgICBkZWYgY29uZmlndXJhdGlvbl9zcGVjaWZpZXJfbWFjcm9zKHNlbGYpOgot
ICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgImhpZ2hzaWVycmErIjogWyJoaWdoc2llcnJh
IiwgImZ1dHVyZSJdLAotICAgICAgICAgICAgInNpZXJyYSsiOiBbInNpZXJyYSIsICJoaWdoc2ll
cnJhIiwgImZ1dHVyZSJdLAotICAgICAgICAgICAgImVsY2FwaXRhbisiOiBbImVsY2FwaXRhbiIs
ICJzaWVycmEiLCAiaGlnaHNpZXJyYSIsICJmdXR1cmUiXSwKLSAgICAgICAgICAgICJ5b3NlbWl0
ZSsiOiBbInlvc2VtaXRlIiwgImVsY2FwaXRhbiIsICJzaWVycmEiLCAiaGlnaHNpZXJyYSIsICJm
dXR1cmUiXSwKLSAgICAgICAgfQorICAgICAgICBtYXAgPSB7fQorICAgICAgICB2ZXJzaW9uX25h
bWVfbWFwID0gVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYuaG9zdC5wbGF0Zm9ybSkKKyAgICAgICAg
c29ydGVkX3ZlcnNpb25zID0gc29ydGVkKHZlcnNpb25fbmFtZV9tYXAubWFwcGluZ19mb3JfcGxh
dGZvcm0oKS52YWx1ZXMoKSkKKyAgICAgICAgZm9yIHZlcnNpb24gaW4gc29ydGVkX3ZlcnNpb25z
OgorICAgICAgICAgICAgbGlzdCA9IFtdCisgICAgICAgICAgICBmb3IgbmV3ZXIgaW4gc29ydGVk
X3ZlcnNpb25zW3NvcnRlZF92ZXJzaW9ucy5pbmRleCh2ZXJzaW9uKTpdOgorICAgICAgICAgICAg
ICAgIGxpc3QuYXBwZW5kKHZlcnNpb25fbmFtZV9tYXAudG9fbmFtZShuZXdlciwgcGxhdGZvcm09
c2VsZi5wb3J0X25hbWUpLmxvd2VyKCkucmVwbGFjZSgnICcsICcnKSkKKyAgICAgICAgICAgIG1h
cFt2ZXJzaW9uX25hbWVfbWFwLnRvX25hbWUodmVyc2lvbiwgcGxhdGZvcm09c2VsZi5wb3J0X25h
bWUpLmxvd2VyKCkucmVwbGFjZSgnICcsICcnKSArICcrJ10gPSBsaXN0CisgICAgICAgIHJldHVy
biBtYXAKIAogICAgIGRlZiBzZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZiwgc2VydmVyX25h
bWU9Tm9uZSk6CiAgICAgICAgIGVudiA9IHN1cGVyKE1hY1BvcnQsIHNlbGYpLnNldHVwX2Vudmly
b25fZm9yX3NlcnZlcihzZXJ2ZXJfbmFtZSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9tYWNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L21hY191bml0dGVzdC5weQkocmV2aXNpb24gMjI1ODIxKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L21hY191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjcsMjUg
KzI3LDI0IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1pbXBvcnQgdGltZQot
CiBmcm9tIHdlYmtpdHB5LnBvcnQubWFjIGltcG9ydCBNYWNQb3J0CiBmcm9tIHdlYmtpdHB5LnBv
cnQgaW1wb3J0IGRhcndpbl90ZXN0Y2FzZQogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBwb3J0
X3Rlc3RjYXNlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBv
cnQgT3V0cHV0Q2FwdHVyZQogZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2Nr
T3B0aW9ucwogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGltcG9y
dCBNb2NrRXhlY3V0aXZlLCBNb2NrRXhlY3V0aXZlMiwgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0
cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIAogCiBjbGFzcyBNYWNUZXN0KGRhcndp
bl90ZXN0Y2FzZS5EYXJ3aW5UZXN0KToKICAgICBvc19uYW1lID0gJ21hYycKLSAgICBvc192ZXJz
aW9uID0gJ2xpb24nCisgICAgb3NfdmVyc2lvbiA9IFZlcnNpb24oMTAsIDcpCiAgICAgcG9ydF9u
YW1lID0gJ21hYy1saW9uJwogICAgIHBvcnRfbWFrZXIgPSBNYWNQb3J0CiAKICAgICBkZWYgdGVz
dF92ZXJzaW9uKHNlbGYpOgogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAg
ICBzZWxmLmFzc2VydFRydWUocG9ydC52ZXJzaW9uKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNO
b3ROb25lKHBvcnQudmVyc2lvbl9uYW1lKCkpCiAKICAgICBkZWYgdGVzdF92ZXJzaW9ucyhzZWxm
KToKICAgICAgICAgIyBOb3RlOiB0aGVzZSB0ZXN0cyBkb24ndCBuZWVkIHRvIGJlIGV4aGF1c3Rp
dmUgYXMgbG9uZyBhcyB3ZSBnZXQgcGF0aCBjb3ZlcmFnZS4KSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CShyZXZpc2lvbiAyMjU4MjEpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvcG9ydF90ZXN0Y2FzZS5weQkod29ya2luZyBjb3B5
KQpAQCAtNzgsNiArNzgsNyBAQCBjbGFzcyBUZXN0V2ViS2l0UG9ydChQb3J0KToKIAogQGNvbnRl
eHRtYW5hZ2VyCiBkZWYgYmluZF9tb2NrX2FwcGxlX2FkZGl0aW9ucygpOgorICAgIGZyb20gd2Vi
a2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFBVQkxJQ19UQUJMRSwgVmVyc2lv
bk5hbWVNYXAKIAogICAgIGNsYXNzIE1vY2tBcHBsZUFkZGl0aW9ucyhvYmplY3QpOgogCkBAIC05
MywxMSArOTQsMjMgQEAgZGVmIGJpbmRfbW9ja19hcHBsZV9hZGRpdGlvbnMoKToKICAgICAgICAg
ZGVmIG1hY19vc19uYW1lKG5hbWUpOgogICAgICAgICAgICAgcmV0dXJuICdhZGQte30nLmZvcm1h
dChuYW1lKQogCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIHZlcnNpb25fbmFt
ZV9tYXBwaW5nKHBsYXRmb3JtPU5vbmUpOgorICAgICAgICAgICAgcmVzdWx0ID0gVmVyc2lvbk5h
bWVNYXAocGxhdGZvcm0pCisgICAgICAgICAgICByZXN1bHQubWFwcGluZ1snaW50ZXJuYWwnXSA9
IHt9CisgICAgICAgICAgICBmb3IgcGxhdGZvcm0gaW4gcmVzdWx0Lm1hcHBpbmdbUFVCTElDX1RB
QkxFXToKKyAgICAgICAgICAgICAgICByZXN1bHQubWFwcGluZ1snaW50ZXJuYWwnXVtwbGF0Zm9y
bV0gPSB7fQorICAgICAgICAgICAgICAgIGZvciBuYW1lLCB2ZXJzaW9uIGluIHJlc3VsdC5tYXBw
aW5nW1BVQkxJQ19UQUJMRV1bcGxhdGZvcm1dLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAg
ICAgICByZXN1bHQubWFwcGluZ1snaW50ZXJuYWwnXVtwbGF0Zm9ybV1bJ2FkZC0nICsgbmFtZV0g
PSB2ZXJzaW9uCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKICAgICAjIGFwcGxlX2FkZGl0
aW9ucyBpcyBhIG1lbW9pemVkIGZ1bmN0aW9uLiBUYWtlIGFkdmFudGFnZSBvZiB0aGlzIGZhY3Qg
YW5kIG1hbmlwdWxhdGUgdGhlIGNhY2hlCiAgICAgIyB0byB0ZW1wb3JhcmlseSByZXR1cm4gYSBt
b2NrZWQgcmVzdWx0CiAgICAgYXBwbGVfYWRkaXRpb25zLl9yZXN1bHRzX2NhY2hlWygpXSA9IE1v
Y2tBcHBsZUFkZGl0aW9ucworICAgIFZlcnNpb25OYW1lTWFwLm1hcC5fcmVzdWx0c19jYWNoZSA9
IHt9CiAgICAgeWllbGQKICAgICBhcHBsZV9hZGRpdGlvbnMuX3Jlc3VsdHNfY2FjaGVbKCldID0g
Tm9uZQorICAgIFZlcnNpb25OYW1lTWFwLm1hcC5fcmVzdWx0c19jYWNoZSA9IHt9CiAKIAogY2xh
c3MgUG9ydFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC90ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC90ZXN0LnB5CShyZXZpc2lvbiAyMjU4MjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvdGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMgKzI2LDEyIEBACiAjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1pbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogCiBm
cm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IFBvcnQsIERyaXZlciwgRHJpdmVyT3V0cHV0CiBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBU
ZXN0Q29uZmlndXJhdGlvbgotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1f
bW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5j
cmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncworZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbl9u
YW1lX21hcCBpbXBvcnQgUFVCTElDX1RBQkxFLCBWZXJzaW9uTmFtZU1hcAogCiAKICMgVGhpcyBz
ZXRzIGJhc2ljIGV4cGVjdGF0aW9ucyBmb3IgYSB0ZXN0LiBFYWNoIGluZGl2aWR1YWwgZXhwZWN0
YXRpb24KQEAgLTI0Myw3ICsyNDIsNyBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHgzNAogCiAg
ICAgIyBGb3IgdGVzdGluZyB0ZXN0IGFyZSBwcm9wZXJseSBpbmNsdWRlZCBmcm9tIHBsYXRmb3Jt
IGRpcmVjdG9yaWVzLgogICAgIHRlc3RzLmFkZCgncGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9o
dHRwL3Rlc3QuaHRtbCcpCi0gICAgdGVzdHMuYWRkKCdwbGF0Zm9ybS90ZXN0LXdpbi13aW43L2h0
dHAvdGVzdC5odG1sJykKKyAgICB0ZXN0cy5hZGQoJ3BsYXRmb3JtL3Rlc3Qtd2luLTdzcDAvaHR0
cC90ZXN0Lmh0bWwnKQogCiAgICAgIyBGb3IgLS1uby1odHRwIHRlc3RzLCB0ZXN0IHRoYXQgcGxh
dGZvcm0gc3BlY2lmaWMgSFRUUCB0ZXN0cyBhcmUgcHJvcGVybHkgc2tpcHBlZC4KICAgICB0ZXN0
cy5hZGQoJ3BsYXRmb3JtL3Rlc3Qtc25vdy1sZW9wYXJkL2h0dHAvdGVzdC5odG1sJykKQEAgLTM1
Nyw3ICszNTYsNyBAQCBjbGFzcyBUZXN0UG9ydChQb3J0KToKICAgICBBTExfQkFTRUxJTkVfVkFS
SUFOVFMgPSAoCiAgICAgICAgICd0ZXN0LWxpbnV4LXg4Nl82NCcsCiAgICAgICAgICd0ZXN0LW1h
Yy1zbm93bGVvcGFyZCcsICd0ZXN0LW1hYy1sZW9wYXJkJywKLSAgICAgICAgJ3Rlc3Qtd2luLXZp
c3RhJywgJ3Rlc3Qtd2luLXdpbjcnLCAndGVzdC13aW4teHAnLAorICAgICAgICAndGVzdC13aW4t
dmlzdGEnLCAndGVzdC13aW4tN3NwMCcsICd0ZXN0LXdpbi14cCcsCiAgICAgKQogCiAgICAgQGNs
YXNzbWV0aG9kCkBAIC0zNzMsMjEgKzM3MiwxNiBAQCBjbGFzcyBUZXN0UG9ydChQb3J0KToKICAg
ICAgICAgc2VsZi5fZXhwZWN0YXRpb25zX3BhdGggPSBMQVlPVVRfVEVTVF9ESVIgKyAnL3BsYXRm
b3JtL3Rlc3QvVGVzdEV4cGVjdGF0aW9ucycKICAgICAgICAgc2VsZi5fcmVzdWx0c19kaXJlY3Rv
cnkgPSBOb25lCiAKLSAgICAgICAgc2VsZi5fb3BlcmF0aW5nX3N5c3RlbSA9ICdtYWMnCi0gICAg
ICAgIGlmIHNlbGYuX25hbWUuc3RhcnRzd2l0aCgndGVzdC13aW4nKToKLSAgICAgICAgICAgIHNl
bGYuX29wZXJhdGluZ19zeXN0ZW0gPSAnd2luJwotICAgICAgICBlbGlmIHNlbGYuX25hbWUuc3Rh
cnRzd2l0aCgndGVzdC1saW51eCcpOgotICAgICAgICAgICAgc2VsZi5fb3BlcmF0aW5nX3N5c3Rl
bSA9ICdsaW51eCcKLQotICAgICAgICB2ZXJzaW9uX21hcCA9IHsKLSAgICAgICAgICAgICd0ZXN0
LXdpbi14cCc6ICd4cCcsCi0gICAgICAgICAgICAndGVzdC13aW4td2luNyc6ICd3aW43JywKLSAg
ICAgICAgICAgICd0ZXN0LXdpbi12aXN0YSc6ICd2aXN0YScsCi0gICAgICAgICAgICAndGVzdC1t
YWMtbGVvcGFyZCc6ICdsZW9wYXJkJywKLSAgICAgICAgICAgICd0ZXN0LW1hYy1zbm93bGVvcGFy
ZCc6ICdzbm93bGVvcGFyZCcsCi0gICAgICAgICAgICAndGVzdC1saW51eC14ODZfNjQnOiAnbHVj
aWQnLAotICAgICAgICB9Ci0gICAgICAgIHNlbGYuX3ZlcnNpb24gPSB2ZXJzaW9uX21hcFtzZWxm
Ll9uYW1lXQorICAgICAgICBzZWxmLl9vcGVyYXRpbmdfc3lzdGVtID0gc2VsZi5fbmFtZS5zcGxp
dCgnLScpWzFdCisgICAgICAgIGlmIHNlbGYuX29wZXJhdGluZ19zeXN0ZW0gPT0gJ2xpbnV4JzoK
KyAgICAgICAgICAgIHNlbGYuX29zX3ZlcnNpb24gPSBOb25lCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBzZWxmLl9vc192ZXJzaW9uID0gVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYuaG9zdC5w
bGF0Zm9ybSkuZnJvbV9uYW1lKHNlbGYuX25hbWUuc3BsaXQoJy0nKVsyXSlbMV0KKworICAgIGRl
ZiB2ZXJzaW9uX25hbWUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX29zX3ZlcnNpb24gaXMgTm9u
ZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBWZXJzaW9uTmFtZU1h
cC5tYXAoc2VsZi5ob3N0LnBsYXRmb3JtKS50b19uYW1lKHNlbGYuX29zX3ZlcnNpb24sIHBsYXRm
b3JtPXNlbGYuX29wZXJhdGluZ19zeXN0ZW0sIHRhYmxlPVBVQkxJQ19UQUJMRSkKIAogICAgIGRl
ZiBkZWZhdWx0X3BpeGVsX3Rlc3RzKHNlbGYpOgogICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtNDAx
LDEwICszOTUsMTAgQEAgY2xhc3MgVGVzdFBvcnQoUG9ydCk6CiAgICAgICAgIHNlYXJjaF9wYXRo
cyA9IHsKICAgICAgICAgICAgICd0ZXN0LW1hYy1zbm93bGVvcGFyZCc6IFsndGVzdC1tYWMtc25v
d2xlb3BhcmQnXSwKICAgICAgICAgICAgICd0ZXN0LW1hYy1sZW9wYXJkJzogWyd0ZXN0LW1hYy1s
ZW9wYXJkJywgJ3Rlc3QtbWFjLXNub3dsZW9wYXJkJ10sCi0gICAgICAgICAgICAndGVzdC13aW4t
d2luNyc6IFsndGVzdC13aW4td2luNyddLAotICAgICAgICAgICAgJ3Rlc3Qtd2luLXZpc3RhJzog
Wyd0ZXN0LXdpbi12aXN0YScsICd0ZXN0LXdpbi13aW43J10sCi0gICAgICAgICAgICAndGVzdC13
aW4teHAnOiBbJ3Rlc3Qtd2luLXhwJywgJ3Rlc3Qtd2luLXZpc3RhJywgJ3Rlc3Qtd2luLXdpbjcn
XSwKLSAgICAgICAgICAgICd0ZXN0LWxpbnV4LXg4Nl82NCc6IFsndGVzdC1saW51eCcsICd0ZXN0
LXdpbi13aW43J10sCisgICAgICAgICAgICAndGVzdC13aW4tN3NwMCc6IFsndGVzdC13aW4tN3Nw
MCddLAorICAgICAgICAgICAgJ3Rlc3Qtd2luLXZpc3RhJzogWyd0ZXN0LXdpbi12aXN0YScsICd0
ZXN0LXdpbi03c3AwJ10sCisgICAgICAgICAgICAndGVzdC13aW4teHAnOiBbJ3Rlc3Qtd2luLXhw
JywgJ3Rlc3Qtd2luLXZpc3RhJywgJ3Rlc3Qtd2luLTdzcDAnXSwKKyAgICAgICAgICAgICd0ZXN0
LWxpbnV4LXg4Nl82NCc6IFsndGVzdC1saW51eCddLAogICAgICAgICB9CiAgICAgICAgIHJldHVy
biBbc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoZCkgZm9yIGQgaW4gc2VhcmNoX3BhdGhzW3Nl
bGYubmFtZSgpXV0KIApAQCAtNTE0LDcgKzUwOCw3IEBAIGNsYXNzIFRlc3RQb3J0KFBvcnQpOgog
ICAgICAgICAgICAgICAgICgnc25vd2xlb3BhcmQnLCAneDg2JyksCiAgICAgICAgICAgICAgICAg
KCd4cCcsICd4ODYnKSwKICAgICAgICAgICAgICAgICAoJ3Zpc3RhJywgJ3g4NicpLAotICAgICAg
ICAgICAgICAgICgnd2luNycsICd4ODYnKSwKKyAgICAgICAgICAgICAgICAoJzdzcDAnLCAneDg2
JyksCiAgICAgICAgICAgICAgICAgKCdsdWNpZCcsICd4ODYnKSwKICAgICAgICAgICAgICAgICAo
J2x1Y2lkJywgJ3g4Nl82NCcpKQogCkBAIC01MjMsNyArNTE3LDcgQEAgY2xhc3MgVGVzdFBvcnQo
UG9ydCk6CiAKICAgICBkZWYgY29uZmlndXJhdGlvbl9zcGVjaWZpZXJfbWFjcm9zKHNlbGYpOgog
ICAgICAgICAiIiJUbyBhdm9pZCBzdXJwcmlzZXMgd2hlbiBpbnRyb2R1Y2luZyBuZXcgbWFjcm9z
LCB0aGVzZSBhcmUgaW50ZW50aW9uYWxseSBmaXhlZCBpbiB0aW1lLiIiIgotICAgICAgICByZXR1
cm4geydtYWMnOiBbJ2xlb3BhcmQnLCAnc25vd2xlb3BhcmQnXSwgJ3dpbic6IFsneHAnLCAndmlz
dGEnLCAnd2luNyddLCAnbGludXgnOiBbJ2x1Y2lkJ119CisgICAgICAgIHJldHVybiB7J21hYyc6
IFsnbGVvcGFyZCcsICdzbm93bGVvcGFyZCddLCAnd2luJzogWyd4cCcsICd2aXN0YScsICc3c3Aw
J10sICdsaW51eCc6IFsnbHVjaWQnXX0KIAogICAgIGRlZiBhbGxfYmFzZWxpbmVfdmFyaWFudHMo
c2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLkFMTF9CQVNFTElORV9WQVJJQU5UUwpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5CShyZXZpc2lvbiAyMjU4MjEpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw5
IEBAIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3Mg
aW1wb3J0IENyYXNoTG9ncwogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3Qg
aW1wb3J0IFN5c3RlbUhvc3QKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUg
aW1wb3J0IFNjcmlwdEVycm9yLCBFeGVjdXRpdmUKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LnBhdGggaW1wb3J0IGFic3BhdGhfdG9fdXJpLCBjeWdwYXRoCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25h
bWVfbWFwIGltcG9ydCBWZXJzaW9uTmFtZU1hcAogZnJvbSB3ZWJraXRweS5wb3J0LmFwcGxlIGlt
cG9ydCBBcHBsZVBvcnQKIGZyb20gd2Via2l0cHkucG9ydC5jb25maWcgaW1wb3J0IGFwcGxlX2Fk
ZGl0aW9ucwpAQCAtNTYsNyArNTcsOCBAQCBleGNlcHQgSW1wb3J0RXJyb3I6CiBjbGFzcyBXaW5Q
b3J0KEFwcGxlUG9ydCk6CiAgICAgcG9ydF9uYW1lID0gIndpbiIKIAotICAgIFZFUlNJT05fRkFM
TEJBQ0tfT1JERVIgPSBbIndpbi14cCIsICJ3aW4tdmlzdGEiLCAid2luLTdzcDAiLCAid2luLXdp
bjEwIiwgIndpbiJdCisgICAgVkVSU0lPTl9NSU4gPSBWZXJzaW9uKDUsIDEpCisgICAgVkVSU0lP
Tl9NQVggPSBWZXJzaW9uKDEwKQogCiAgICAgQVJDSElURUNUVVJFUyA9IFsneDg2JywgJ3g4Nl82
NCddCiAKQEAgLTg3LDYgKzg5LDEzIEBAIGNsYXNzIFdpblBvcnQoQXBwbGVQb3J0KToKICAgICBw
cmV2aW91c19lcnJvcl9yZXBvcnRpbmdfdmFsdWVzID0ge30KICAgICBwcmV2aW91c193b3c2NF9l
cnJvcl9yZXBvcnRpbmdfdmFsdWVzID0ge30KIAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0
LCBwb3J0X25hbWUsICoqa3dhcmdzKToKKyAgICAgICAgQXBwbGVQb3J0Ll9faW5pdF9fKHNlbGYs
IGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCisgICAgICAgIGlmIHBvcnRfbmFtZS5zcGxpdCgn
LScpID4gMToKKyAgICAgICAgICAgIHNlbGYuX29zX3ZlcnNpb24gPSBWZXJzaW9uTmFtZU1hcC5t
YXAoaG9zdC5wbGF0Zm9ybSkuZnJvbV9uYW1lKHBvcnRfbmFtZS5zcGxpdCgnLScpWzFdKVsxXQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fb3NfdmVyc2lvbiA9IHNlbGYuaG9zdC5w
bGF0Zm9ybS5vc192ZXJzaW9uCisKICAgICBkZWYgZG9fdGV4dF9yZXN1bHRzX2RpZmZlcihzZWxm
LCBleHBlY3RlZF90ZXh0LCBhY3R1YWxfdGV4dCk6CiAgICAgICAgICMgU2FuaXR5IHdhcyByZXN0
b3JlZCBpbiBXSzIsIHNvIHdlIGRvbid0IG5lZWQgdGhpcyBoYWNrIHRoZXJlLgogICAgICAgICBp
ZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicpOgpAQCAtMTAyLDExICsxMTEs
MTUgQEAgY2xhc3MgV2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICByZXR1cm4gZXhwZWN0ZWRf
dGV4dCAhPSBhY3R1YWxfdGV4dAogCiAgICAgZGVmIGRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3Bh
dGgoc2VsZik6Ci0gICAgICAgIG5hbWUgPSBzZWxmLl9uYW1lLnJlcGxhY2UoJy13azInLCAnJykK
LSAgICAgICAgaWYgbmFtZS5lbmRzd2l0aChzZWxmLkZVVFVSRV9WRVJTSU9OKToKLSAgICAgICAg
ICAgIGZhbGxiYWNrX25hbWVzID0gW3NlbGYucG9ydF9uYW1lXQorICAgICAgICB2ZXJzaW9uX25h
bWVfbWFwID0gVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYuaG9zdC5wbGF0Zm9ybSkKKyAgICAgICAg
aWYgc2VsZi5fb3NfdmVyc2lvbiA8IHNlbGYuVkVSU0lPTl9NSU4gb3Igc2VsZi5fb3NfdmVyc2lv
biA+IHNlbGYuVkVSU0lPTl9NQVg6CisgICAgICAgICAgICBmYWxsYmFja192ZXJzaW9ucyA9IFtz
ZWxmLl9vc192ZXJzaW9uXQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZmFsbGJhY2tfbmFt
ZXMgPSBzZWxmLlZFUlNJT05fRkFMTEJBQ0tfT1JERVJbc2VsZi5WRVJTSU9OX0ZBTExCQUNLX09S
REVSLmluZGV4KG5hbWUpOi0xXSArIFtzZWxmLnBvcnRfbmFtZV0KKyAgICAgICAgICAgIHNvcnRl
ZF92ZXJzaW9ucyA9IHNvcnRlZCh2ZXJzaW9uX25hbWVfbWFwLm1hcHBpbmdfZm9yX3BsYXRmb3Jt
KHBsYXRmb3JtPXNlbGYucG9ydF9uYW1lKS52YWx1ZXMoKSkKKyAgICAgICAgICAgIGZhbGxiYWNr
X3ZlcnNpb25zID0gc29ydGVkX3ZlcnNpb25zW3NvcnRlZF92ZXJzaW9ucy5pbmRleChzZWxmLl9v
c192ZXJzaW9uKTpdCisgICAgICAgIGZhbGxiYWNrX25hbWVzID0gWyd3aW4tJyArIHZlcnNpb25f
bmFtZV9tYXAudG9fbmFtZSh2ZXJzaW9uLCBwbGF0Zm9ybT1zZWxmLnBvcnRfbmFtZSkubG93ZXIo
KS5yZXBsYWNlKCcgJywgJycpIGZvciB2ZXJzaW9uIGluIGZhbGxiYWNrX3ZlcnNpb25zXQorICAg
ICAgICBmYWxsYmFja19uYW1lcy5hcHBlbmQoJ3dpbicpCisKICAgICAgICAgIyBGSVhNRTogVGhl
IEFwcGxlV2luIHBvcnQgZmFsbHMgYmFjayB0byBBcHBsZU1hYyBmb3Igc29tZSByZXN1bHRzLiAg
RXZlbnR1YWxseSB3ZSdsbCBoYXZlIGEgc2hhcmVkICdhcHBsZScgcG9ydC4KICAgICAgICAgaWYg
c2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXInKToKICAgICAgICAgICAgIGZhbGxi
YWNrX25hbWVzLmluc2VydCgwLCAnd2luLXdrMicpCkBAIC00MzgsMTcgKzQ1MSwxMyBAQCBjbGFz
cyBXaW5DYWlyb1BvcnQoV2luUG9ydCk6CiAKICAgICBURVNUX1BBVEhfU0VQQVJBVE9SID0gb3Mu
c2VwCiAKLSAgICBWRVJTSU9OX0ZBTExCQUNLX09SREVSID0gWyJ3aW5jYWlyby0iICsgb3NfbmFt
ZS5sb3dlcigpIGZvciBvc19uYW1lIGluIFZlcnNpb25OYW1lTWFwLm1hcCgpLm5hbWVzKCldCi0K
ICAgICBkZWYgZGVmYXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKLSAgICAgICAgbmFt
ZSA9IHNlbGYuX25hbWUucmVwbGFjZSgnLXdrMicsICcnKQotICAgICAgICBpZiBuYW1lLmVuZHN3
aXRoKHNlbGYuRlVUVVJFX1ZFUlNJT04pOgotICAgICAgICAgICAgZmFsbGJhY2tfbmFtZXMgPSBb
XQorICAgICAgICB2ZXJzaW9uX25hbWVfbWFwID0gVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYuaG9z
dC5wbGF0Zm9ybSkKKyAgICAgICAgaWYgc2VsZi5fb3NfdmVyc2lvbiA8IHNlbGYuVkVSU0lPTl9N
SU4gb3Igc2VsZi5fb3NfdmVyc2lvbiA+IHNlbGYuVkVSU0lPTl9NQVg6CisgICAgICAgICAgICBm
YWxsYmFja192ZXJzaW9ucyA9IFtzZWxmLl9vc192ZXJzaW9uXQogICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgYXNzZXJ0IG5hbWUgaW4gc2VsZi5WRVJTSU9OX0ZBTExCQUNLX09SREVSCi0gICAg
ICAgICAgICBmYWxsYmFja19uYW1lcyA9IHNlbGYuVkVSU0lPTl9GQUxMQkFDS19PUkRFUltzZWxm
LlZFUlNJT05fRkFMTEJBQ0tfT1JERVIuaW5kZXgobmFtZSk6XQotICAgICAgICBmYWxsYmFja19u
YW1lcy5hcHBlbmQoc2VsZi5wb3J0X25hbWUpCisgICAgICAgICAgICBzb3J0ZWRfdmVyc2lvbnMg
PSBzb3J0ZWQodmVyc2lvbl9uYW1lX21hcC5tYXBwaW5nX2Zvcl9wbGF0Zm9ybShwbGF0Zm9ybT1z
ZWxmLnBvcnRfbmFtZSkudmFsdWVzKCkpCisgICAgICAgICAgICBmYWxsYmFja192ZXJzaW9ucyA9
IHNvcnRlZF92ZXJzaW9uc1tzb3J0ZWRfdmVyc2lvbnMuaW5kZXgoc2VsZi5fb3NfdmVyc2lvbik6
XQorICAgICAgICBmYWxsYmFja19uYW1lcyA9IFsnd2luY2Fpcm8tJyArIHZlcnNpb25fbmFtZV9t
YXAudG9fbmFtZSh2ZXJzaW9uLCBwbGF0Zm9ybT1zZWxmLnBvcnRfbmFtZSkubG93ZXIoKS5yZXBs
YWNlKCcgJywgJycpIGZvciB2ZXJzaW9uIGluIGZhbGxiYWNrX3ZlcnNpb25zXQorICAgICAgICBm
YWxsYmFja19uYW1lcy5hcHBlbmQoJ3dpbmNhaXJvJykKICAgICAgICAgcmV0dXJuIG1hcChzZWxm
Ll93ZWJraXRfYmFzZWxpbmVfcGF0aCwgZmFsbGJhY2tfbmFtZXMpCi0KLSAgICBkZWYgX2Z1dHVy
ZV9wb3J0X25hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnBvcnRfbmFtZSArICItIiAr
IHNlbGYuRlVUVVJFX1ZFUlNJT04KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93
aW5fdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L3dpbl91bml0dGVzdC5weQkocmV2aXNpb24gMjI1ODIxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L3dpbl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBA
QAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGltcG9ydCBNb2Nr
RXhlY3V0aXZlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBv
cnQgT3V0cHV0Q2FwdHVyZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3Rf
bW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24g
aW1wb3J0IFZlcnNpb24KK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW1w
b3J0IFBVQkxJQ19UQUJMRSwgVmVyc2lvbk5hbWVNYXAKIGZyb20gd2Via2l0cHkucG9ydCBpbXBv
cnQgcG9ydF90ZXN0Y2FzZQogZnJvbSB3ZWJraXRweS5wb3J0LndpbiBpbXBvcnQgV2luUG9ydAog
ZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9ucwpAQCAtMzYsNyAr
MzgsNyBAQCBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPCiAKIGNsYXNz
IFdpblBvcnRUZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDYXNlKToKICAgICBvc19uYW1lID0g
J3dpbicKLSAgICBvc192ZXJzaW9uID0gJ3hwJworICAgIG9zX3ZlcnNpb24gPSBWZXJzaW9uKDUs
IDEpCiAgICAgcG9ydF9uYW1lID0gJ3dpbi14cCcKICAgICBwb3J0X21ha2VyID0gV2luUG9ydAog
CkBAIC01OCwyNCArNjAsMjQgQEAgY2xhc3MgV2luUG9ydFRlc3QocG9ydF90ZXN0Y2FzZS5Qb3J0
VGVzdAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuYmFzZWxpbmVfc2VhcmNoX3BhdGgo
KSwgYWJzb2x1dGVfc2VhcmNoX3BhdGhzKQogCiAgICAgZGVmIHRlc3RfYmFzZWxpbmVfc2VhcmNo
X3BhdGgoc2VsZik6Ci0gICAgICAgIHNlbGYuX2Fzc2VydF9zZWFyY2hfcGF0aChbJ3dpbi14cCcs
ICd3aW4tdmlzdGEnLCAnd2luLTdzcDAnLCAnd2luLXdpbjEwJywgJ3dpbicsICdtYWMnXSwgJ3hw
JykKLSAgICAgICAgc2VsZi5fYXNzZXJ0X3NlYXJjaF9wYXRoKFsnd2luLXZpc3RhJywgJ3dpbi03
c3AwJywgJ3dpbi13aW4xMCcsICd3aW4nLCAnbWFjJ10sICd2aXN0YScpCi0gICAgICAgIHNlbGYu
X2Fzc2VydF9zZWFyY2hfcGF0aChbJ3dpbi03c3AwJywgJ3dpbi13aW4xMCcsICd3aW4nLCAnbWFj
J10sICc3c3AwJykKLQotICAgICAgICBzZWxmLl9hc3NlcnRfc2VhcmNoX3BhdGgoWyd3aW4td2sy
JywgJ3dpbi14cCcsICd3aW4tdmlzdGEnLCAnd2luLTdzcDAnLCAnd2luLXdpbjEwJywgJ3dpbics
ICdtYWMtd2syJywgJ21hYyddLCAneHAnLCB1c2Vfd2Via2l0Mj1UcnVlKQotICAgICAgICBzZWxm
Ll9hc3NlcnRfc2VhcmNoX3BhdGgoWyd3aW4td2syJywgJ3dpbi12aXN0YScsICd3aW4tN3NwMCcs
ICd3aW4td2luMTAnLCAnd2luJywgJ21hYy13azInLCAnbWFjJ10sICd2aXN0YScsIHVzZV93ZWJr
aXQyPVRydWUpCi0gICAgICAgIHNlbGYuX2Fzc2VydF9zZWFyY2hfcGF0aChbJ3dpbi13azInLCAn
d2luLTdzcDAnLCAnd2luLXdpbjEwJywgJ3dpbicsICdtYWMtd2syJywgJ21hYyddLCAnN3NwMCcs
IHVzZV93ZWJraXQyPVRydWUpCisgICAgICAgIHNlbGYuX2Fzc2VydF9zZWFyY2hfcGF0aChbJ3dp
bi14cCcsICd3aW4tdmlzdGEnLCAnd2luLTdzcDAnLCAnd2luLTgnLCAnd2luLTguMScsICd3aW4t
d2luMTAnLCAnd2luJywgJ21hYyddLCBWZXJzaW9uKDUsIDEpKQorICAgICAgICBzZWxmLl9hc3Nl
cnRfc2VhcmNoX3BhdGgoWyd3aW4tdmlzdGEnLCAnd2luLTdzcDAnLCAnd2luLTgnLCAnd2luLTgu
MScsICd3aW4td2luMTAnLCAnd2luJywgJ21hYyddLCBWZXJzaW9uKDYpKQorICAgICAgICBzZWxm
Ll9hc3NlcnRfc2VhcmNoX3BhdGgoWyd3aW4tN3NwMCcsICd3aW4tOCcsICd3aW4tOC4xJywgJ3dp
bi13aW4xMCcsICd3aW4nLCAnbWFjJ10sIFZlcnNpb24oNiwgMSwgNzYwMCkpCisKKyAgICAgICAg
c2VsZi5fYXNzZXJ0X3NlYXJjaF9wYXRoKFsnd2luLXdrMicsICd3aW4teHAnLCAnd2luLXZpc3Rh
JywgJ3dpbi03c3AwJywgJ3dpbi04JywgJ3dpbi04LjEnLCAnd2luLXdpbjEwJywgJ3dpbicsICdt
YWMtd2syJywgJ21hYyddLCBWZXJzaW9uKDUsIDEpLCB1c2Vfd2Via2l0Mj1UcnVlKQorICAgICAg
ICBzZWxmLl9hc3NlcnRfc2VhcmNoX3BhdGgoWyd3aW4td2syJywgJ3dpbi12aXN0YScsICd3aW4t
N3NwMCcsICd3aW4tOCcsICd3aW4tOC4xJywgJ3dpbi13aW4xMCcsICd3aW4nLCAnbWFjLXdrMics
ICdtYWMnXSwgVmVyc2lvbig2KSwgdXNlX3dlYmtpdDI9VHJ1ZSkKKyAgICAgICAgc2VsZi5fYXNz
ZXJ0X3NlYXJjaF9wYXRoKFsnd2luLXdrMicsICd3aW4tN3NwMCcsICd3aW4tOCcsICd3aW4tOC4x
JywgJ3dpbi13aW4xMCcsICd3aW4nLCAnbWFjLXdrMicsICdtYWMnXSwgVmVyc2lvbig2LCAxLCA3
NjAwKSwgdXNlX3dlYmtpdDI9VHJ1ZSkKIAogICAgIGRlZiBfYXNzZXJ0X3ZlcnNpb24oc2VsZiwg
cG9ydF9uYW1lLCBleHBlY3RlZF92ZXJzaW9uKToKICAgICAgICAgaG9zdCA9IE1vY2tTeXN0ZW1I
b3N0KG9zX25hbWU9J3dpbicsIG9zX3ZlcnNpb249ZXhwZWN0ZWRfdmVyc2lvbikKICAgICAgICAg
cG9ydCA9IFdpblBvcnQoaG9zdCwgcG9ydF9uYW1lPXBvcnRfbmFtZSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChwb3J0LnZlcnNpb24oKSwgZXhwZWN0ZWRfdmVyc2lvbikKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChwb3J0LnZlcnNpb25fbmFtZSgpLCBWZXJzaW9uTmFtZU1hcC5tYXAoKS50
b19uYW1lKGV4cGVjdGVkX3ZlcnNpb24sIHBsYXRmb3JtPSd3aW4nLCB0YWJsZT1QVUJMSUNfVEFC
TEUpKQogCiAgICAgZGVmIHRlc3RfdmVyc2lvbnMoc2VsZik6Ci0gICAgICAgIHNlbGYuX2Fzc2Vy
dF92ZXJzaW9uKCd3aW4teHAnLCAneHAnKQotICAgICAgICBzZWxmLl9hc3NlcnRfdmVyc2lvbign
d2luLXZpc3RhJywgJ3Zpc3RhJykKLSAgICAgICAgc2VsZi5fYXNzZXJ0X3ZlcnNpb24oJ3dpbi03
c3AwJywgJzdzcDAnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwg
c2VsZi5fYXNzZXJ0X3ZlcnNpb24sICd3aW4tbWUnLCAneHAnKQorICAgICAgICBzZWxmLl9hc3Nl
cnRfdmVyc2lvbignd2luLXhwJywgVmVyc2lvbig1LCAxKSkKKyAgICAgICAgc2VsZi5fYXNzZXJ0
X3ZlcnNpb24oJ3dpbi12aXN0YScsIFZlcnNpb24oNikpCisgICAgICAgIHNlbGYuX2Fzc2VydF92
ZXJzaW9uKCd3aW4tN3NwMCcsIFZlcnNpb24oNiwgMSwgNzYwMCkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBzZWxmLl9hc3NlcnRfdmVyc2lvbiwgJ3dpbi1tZScs
IFZlcnNpb24oNSwgMSkpCiAKICAgICBkZWYgdGVzdF9jb21wYXJlX3RleHQoc2VsZik6CiAgICAg
ICAgIGV4cGVjdGVkID0gIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rp
b246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvblxuZm9vXG5FRElUSU5HIERF
TEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rp
b25Ob3RpZmljYXRpb25cbiIKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93cGUu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dwZS5weQkocmV2
aXNpb24gMjI1ODIxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dwZS5weQkod29y
a2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBjbGFzcyBXUEVQb3J0KFBvcnQpOgogICAgIGRl
ZiBfZ2VuZXJhdGVfYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMoc2VsZik6CiAgICAgICAgIGNvbmZp
Z3VyYXRpb25zID0gW10KICAgICAgICAgZm9yIGJ1aWxkX3R5cGUgaW4gc2VsZi5BTExfQlVJTERf
VFlQRVM6Ci0gICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRp
b24odmVyc2lvbj1zZWxmLl92ZXJzaW9uLCBhcmNoaXRlY3R1cmU9J3g4NicsIGJ1aWxkX3R5cGU9
YnVpbGRfdHlwZSkpCisgICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZp
Z3VyYXRpb24odmVyc2lvbj1zZWxmLnZlcnNpb25fbmFtZSgpLCBhcmNoaXRlY3R1cmU9J3g4Nics
IGJ1aWxkX3R5cGU9YnVpbGRfdHlwZSkpCiAgICAgICAgIHJldHVybiBjb25maWd1cmF0aW9ucwog
CiAgICAgZGVmIF9wYXRoX3RvX2RyaXZlcihzZWxmKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0ZXN0LnB5CShy
ZXZpc2lvbiAyMjU4MjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMv
cXVlcmllc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMTg3LDcgKzE4Nyw3IEBAIGNs
YXNzIFByaW50RXhwZWN0YXRpb25zVGVzdCh1bml0dGVzdC5UZXMKICAgICAgICAgICAgICAgICAg
ICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF1c
bicKICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL3RleHQuaHRtbCBb
IEZhaWx1cmUgXVxuJwogICAgICAgICAgICAgICAgICAgICAgICAnXG4nCi0gICAgICAgICAgICAg
ICAgICAgICAgICcvLyBGb3IgdGVzdC13aW4td2luN1xuJworICAgICAgICAgICAgICAgICAgICAg
ICAnLy8gRm9yIHRlc3Qtd2luLTdzcDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhaWx1
cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF1cbicKICAgICAgICAg
ICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL3RleHQuaHRtbCBbIEZhaWx1cmUgXVxu
JwogICAgICAgICAgICAgICAgICAgICAgICAnXG4nCkBAIC0yODEsNyArMjgxLDcgQEAgY2xhc3Mg
UHJpbnRCYXNlbGluZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3Bhc3Nlcy90ZXh0LWV4cGVjdGVkLnBuZ1xuJwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3Bhc3Nlcy90ZXh0LWV4cGVjdGVkLnR4dFxuJwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ1xuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8vIEZvciB0ZXN0LXdpbi13
aW43XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnLy8gRm9yIHRlc3Qtd2luLTdzcDBc
bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzZXMvdGV4dC1leHBlY3RlZC5wbmdc
bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzZXMvdGV4dC1leHBlY3RlZC50eHRc
bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXVlcy5weQkocmV2aXNpb24gMjI1ODIxKQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXVlcy5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsMTQgKzM1LDEyIEBAIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBv
cnQgdHJhY2ViYWNrCiAKLWZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCiBmcm9tIG9wdHBh
cnNlIGltcG9ydCBtYWtlX29wdGlvbgogZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KIAog
ZnJvbSB3ZWJraXRweS5jb21tb24uY29uZmlnLmNvbW1pdHRlcnZhbGlkYXRvciBpbXBvcnQgQ29t
bWl0dGVyVmFsaWRhdG9yCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jb25maWcucG9ydHMgaW1wb3J0
IERlcHJlY2F0ZWRQb3J0CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVnemlsbGEgaW1wb3J0
IEF0dGFjaG1lbnQKLWZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5zdGF0dXNzZXJ2ZXIgaW1wb3J0
IFN0YXR1c1NlcnZlcgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBv
cnQgU2NyaXB0RXJyb3IKIGZyb20gd2Via2l0cHkudG9vbC5ib3QuYm90aW5mbyBpbXBvcnQgQm90
SW5mbwogZnJvbSB3ZWJraXRweS50b29sLmJvdC5jb21taXRxdWV1ZXRhc2sgaW1wb3J0IENvbW1p
dFF1ZXVlVGFzaywgQ29tbWl0UXVldWVUYXNrRGVsZWdhdGUKQEAgLTI3Miw3ICsyNzAsNyBAQCBj
bGFzcyBQYXRjaFByb2Nlc3NpbmdRdWV1ZShBYnN0cmFjdFBhdGNoCiAgICAgZGVmIF9uZXdfcG9y
dF9uYW1lX2Zyb21fb2xkKHNlbGYsIHBvcnRfbmFtZSwgcGxhdGZvcm0pOgogICAgICAgICAjIEFw
cGxlUG9ydC5kZXRlcm1pbmVfZnVsbF9wb3J0X25hbWUgYXNzZXJ0cyBpZiB0aGUgbmFtZSBkb2Vz
bid0IGluY2x1ZGUgdmVyc2lvbi4KICAgICAgICAgaWYgcG9ydF9uYW1lID09ICdtYWMnOgotICAg
ICAgICAgICAgcmV0dXJuICdtYWMtJyArIHBsYXRmb3JtLm9zX3ZlcnNpb24KKyAgICAgICAgICAg
IHJldHVybiAnbWFjLScgKyBwbGF0Zm9ybS5vc192ZXJzaW9uX25hbWUoKS5sb3dlcigpLnJlcGxh
Y2UoJyAnLCAnJykKICAgICAgICAgaWYgcG9ydF9uYW1lID09ICd3aW4nOgogICAgICAgICAgICAg
cmV0dXJuICd3aW4tZnV0dXJlJwogICAgICAgICByZXR1cm4gcG9ydF9uYW1lCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329219</attachid>
            <date>2017-12-13 08:31:02 -0800</date>
            <delta_ts>2017-12-13 11:04:10 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-179621-20171213083101.patch</filename>
            <type>text/plain</type>
            <size>72468</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNTg0MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEyMyBAQAorMjAxNy0xMi0xMyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CisKKyAgICAgICAgd2Via2l0cHk6IEJldHRlciBuYW1lLXZlcnNpb24gbWFwcGluZyAoUGFy
dCAyKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5
NjIxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNTU4OTU4NT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBEYXZpZCBLaWx6ZXIuCisKKyAgICAgICAgTm93IHRoYXQgd2UgaGF2ZSBhIGNlbnRyYWwg
bWFwcGluZyBvZiB2ZXJzaW9uIG51bWJlcnMgdG8gdmVyc2lvbiBuYW1lcywgdGhpcworICAgICAg
ICBtYXBwaW5nIHNob3VsZCBiZSB1c2VkIHRvIGNvbXB1dGUgdmVyc2lvbiBuYW1lcy4gVGhpcyBw
YXRjaCB0cmVhdHMgcGFzc2VzIHZlcnNpb25zCisgICAgICAgIGFzIG9iamVjdHMsIG9ubHkgbWFw
cGluZyB0aGVtIHRvIG5hbWVzIHdoZW4gc3RyaW5ncyBhcmUgbmVlZGVkLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mby5weToKKyAgICAgICAg
KFBsYXRmb3JtSW5mby5fX2luaXRfXyk6IFN0b3JlIG9zX3ZlcnNpb24gYXMgYSB2ZXJzaW9uIG9i
amVjdCBpbnN0ZWFkIG9mIGEgc3RyaW5nLgorICAgICAgICAoUGxhdGZvcm1JbmZvLm9zX3ZlcnNp
b25fbmFtZSk6IENvbnZlcnQgb3NfdmVyc2lvbiB0byBhIHN0cmluZyB0aHJvdWdoIHRoZSBWZXJz
aW9uTmFtZU1hcC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxh
dGZvcm1pbmZvX21vY2sucHk6CisgICAgICAgIChNb2NrUGxhdGZvcm1JbmZvLl9faW5pdF9fKTog
U3RvcmUgb3NfdmVyc2lvbiBhcyBhIHZlcnNpb24gb2JqZWN0LgorICAgICAgICAoTW9ja1BsYXRm
b3JtSW5mby5vc192ZXJzaW9uX25hbWUpOiBNaXJyb3IgUGxhdGZvcm1JbmZvLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fdW5pdHRlc3QucHk6
CisgICAgICAgIChUZXN0UGxhdGZvcm1JbmZvLnRlc3RfcmVhbF9jb2RlKTogT25seSBNYWMgYW5k
IFdpbmRvd3MgaGF2ZSBkZWZpbmVkIHZlcnNpb24gb2JqZWN0cy4KKyAgICAgICAgKFRlc3RQbGF0
Zm9ybUluZm8udGVzdF9vc192ZXJzaW9uKTogRGVsZXRlZCwgdGhpcyBiZWhhdmlvciBpcyBub3cg
bWFuYWdlZCBieSBWZXJzaW9uTmFtZU1hcC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi92ZXJzaW9uLnB5OgorICAgICAgICAoVmVyc2lvbi5fX2NtcF9fKTogQWxsb3cgYSB2ZXJz
aW9uIG9iamVjdCB0byBiZSBjb21wYXJlZCB3aXRoICdOb25lJy4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwLnB5OgorICAgICAgICAoVmVyc2lvbk5h
bWVNYXAubWFwKTogQ2hlY2sgZm9yIHRoZSBhcHBsZV9hZGRpdGlvbnMgVmVyc2lvbk5hbWVNYXAu
CisgICAgICAgIChWZXJzaW9uTmFtZU1hcC5fX2luaXRfXyk6IEFkZCBhIHdpbmNhaXJvIG1hcHBp
bmcsIHRoZSBzYW1lIGFzIHRoZSB3aW4gbWFwcGluZy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi92ZXJzaW9uX3VuaXR0ZXN0LnB5OgorICAgICAgICAoVmVyc2lvblRlc3RDYXNl
LnRlc3RfY29tcGFyZV92ZXJzaW9ucyk6IFRlc3QgY29tcGFyaW5nIGEgdmVyc2lvbiBvYmplY3Qg
dG8gJ05vbmUnLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVs
cy90ZXN0X2NvbmZpZ3VyYXRpb24ucHk6CisgICAgICAgIChUZXN0Q29uZmlndXJhdGlvbi5fX2lu
aXRfXyk6IFN0cmlwIGZvcm1hdHRpbmcgZnJvbSB2ZXJzaW9uIG5hbWUuIE5vdGUgdGhhdCB0aGlz
IG9iamVjdCBzdGlsbAorICAgICAgICBhY2NlcHRzIGEgc3RyaW5nIGJlY2F1c2UgdGhlIHZlcnNp
b24gc3RyaW5nIGltcGxpY2l0bHkgY29udGFpbnMgdGhlIHBsYXRmb3JtIGFzIHdlbGwuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRp
b25zX3VuaXR0ZXN0LnB5OiBXaW43IHNob3VsZCBiZSA3U1AwIGFzCisgICAgICAgIGl0IGlzIGlu
IHRoZSBWZXJzaW9uTmFtZU1hcC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBw
bGUucHk6CisgICAgICAgIChBcHBsZVBvcnQpOiBSZXBsYWNlIFZFUlNJT05fRkFMTEJBQ0tfT1JE
RVIgd2l0aCBhIG1pbmltdW0gYW5kIG1heGltdW0gdmVyc2lvbi4gVGhpcyBpcyByZXF1aXJlZAor
ICAgICAgICBiZWNhdXNlIGl0IG1heSBiZSB0aGUgY2FzZSB0aGF0IHNjcmlwdHMgYXJlIGF3YXJl
IG9mIG1vcmUgdmVyc2lvbnMgdGhhbiB0aGUgcG9ydCBhY3R1YWxseSBzdXBwb3J0cy4KKyAgICAg
ICAgKEFwcGxlUG9ydC5kZXRlcm1pbmVfZnVsbF9wb3J0X25hbWUpOiBVc2UgdGhlIGhvc3Qgb3Bl
cmF0aW5nIHN5c3RlbSB0byBjb21wdXRlIHRoZSBmdWxsIHBvcnQgbmFtZS4KKyAgICAgICAgKEFw
cGxlUG9ydC5fYWxsb3dlZF92ZXJzaW9ucyk6IFJldHVybiBhIGxpc3Qgb2YgdmFsaWQgcG9ydCB2
ZXJzaW9ucyBieSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUKKyAgICAgICAgVmVyc2lvbk5hbWVNYXAu
CisgICAgICAgIChBcHBsZVBvcnQuX2dlbmVyYXRlX2FsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKTog
Q29tcHV0ZSBhIGxpc3Qgb2YgY29uZmlndXJhdGlvbnMgYnkgaXRlcmF0aW5nIHRocm91Z2gKKyAg
ICAgICAgX2FsbG93ZWRfdmVyc2lvbnMgYW5kIGNvbnZlcnRpbmcgZWFjaCB2ZXJzaW9uIHRvIGEg
c3RyaW5nLgorICAgICAgICAoQXBwbGVQb3J0Ll9hcHBsZV9iYXNlbGluZV9wYXRoKTogUmV0dXJu
IGEgbGF5b3V0IHRlc3QgZXhwZWN0YXRpb24gZGlyZWN0b3J5IGluc2lkZSBhcHBsZV9hZGRpdGlv
bnMuCisgICAgICAgIChBcHBsZVBvcnQuX3NraXBwZWRfZmlsZV9zZWFyY2hfcGF0aHMpOiBEZWxl
dGVkLgorICAgICAgICAoQXBwbGVQb3J0Ll9hbGxvd2VkX3BvcnRfbmFtZXMpOiBEZWxldGVkLgor
ICAgICAgICAoQXBwbGVQb3J0Ll9mdXR1cmVfcG9ydF9uYW1lKTogRGVsZXRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuX19pbml0X18p
OiBSZXBsYWNlIF92ZXJzaW9uIHN0cmluZyB3aXRoIF9vc192ZXJzaW9uIG9iamVjdC4KKyAgICAg
ICAgKFBvcnQudmVyc2lvbl9uYW1lKTogQ29udmVydCB2ZXJzaW9uIG9iamVjdCB0byBzdHJpbmcu
CisgICAgICAgIChQb3J0LnRlc3RfY29uZmlndXJhdGlvbik6IFBhc3MgdmVyc2lvbiBzdHJpbmcg
dG8gVGVzdENvbmZpZ3VyYXRpb24uCisgICAgICAgIChQb3J0LnZlcnNpb24pOiBEZWxldGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHk6CisgICAg
ICAgIChEYXJ3aW5UZXN0LmFzc2VydF9uYW1lKTogQ29udmVydCBhbiBvc192ZXJzaW9uX3N0cmlu
ZyB0byBhIHZlcnNpb24gb2JqZWN0IGFuZCBjb25zdHJ1Y3QgYSBwb3J0LgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5OgorICAgICAgICAoRmFjdG9y
eVRlc3QudGVzdF9tYWMpOiBSZXBsYWNlIHZlcnNpb24gc3RyaW5ncyB3aXRoIHZlcnNpb24gb2Jq
ZWN0cy4KKyAgICAgICAgKEZhY3RvcnlUZXN0LnRlc3Rfd2luKTogRGl0dG8uCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L2d0ay5weToKKyAgICAgICAgKEd0a1BvcnQuX2dlbmVyYXRl
X2FsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKTogUmVwbGFjZSBfdmVyc2lvbiB3aXRoIHZlcnNpb25f
bmFtZSgpLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHk6CisgICAgICAg
IChJT1NQb3J0LnZlcnNpb25fbmFtZSk6IEJvdGggU2ltdWxhdG9yIGFuZCBkZXZpY2Ugc2hhcmUg
dGhlIHNhbWUgdmVyc2lvbi1uYW1lIGNvbnZlbnRpb24uCisgICAgICAgIChJT1NQb3J0Ll9nZW5l
cmF0ZV9hbGxfdGVzdF9jb25maWd1cmF0aW9ucyk6IFJlcGxhY2UgX3ZlcnNpb24gd2l0aCB2ZXJz
aW9uX25hbWUoKS4KKyAgICAgICAgKElPU1BvcnQuZGVmYXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0
aCk6IFVzZSB0aGUgaW50ZXJuYWwgbWFwcGluZyBvZiB2ZXJzaW9uIG5hbWVzIHRvIGNvbnN0cnVj
dAorICAgICAgICBhcHBsZV9hZGRpdGlvbnMgZXhwZWN0YXRpb25zLgorICAgICAgICAoSU9TUG9y
dC5fYXBwbGVfYWRkaXRpb25zX3BhdGgpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3NfZGV2aWNlLnB5OgorICAgICAgICAoSU9TRGV2aWNlUG9ydC5pb3NfdmVy
c2lvbik6IFJldHVybiBOb25lIGlmIG5vIHZlcnNpb24gaXMgZGVmaW5lZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5weToKKyAgICAgICAgKElP
U0RldmljZVRlc3QpOgorICAgICAgICAoSU9TRGV2aWNlVGVzdC50ZXN0X2xheW91dF90ZXN0X3Nl
YXJjaHBhdGhfd2l0aF9hcHBsZV9hZGRpdGlvbnMpOiBDb25mb3JtIHdpdGggdGhlIG5ldyBtb2Nr
CisgICAgICAgIGFwcGxlX2FkZGl0aW9ucy4KKyAgICAgICAgKElPU0RldmljZVRlc3QubWFrZV9w
b3J0KTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVs
YXRvci5weToKKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2NyZWF0ZV9kZXZpY2VzKTogVXNl
IFZlcnNpb24gb2JqZWN0IG92ZXIgbGlzdCBvZiB2ZXJzaW9uIHN0cmluZ3MuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3JfdW5pdHRlc3QucHk6CisgICAgICAg
IChJT1NTaW11bGF0b3JUZXN0KToKKyAgICAgICAgKElPU1NpbXVsYXRvclRlc3QubWFrZV9wb3J0
KTogVXNlIGlPUyAxMSBhcyB0aGUgZGVmYXVsdCB2ZXJzaW9uIGZvciB0ZXN0aW5nLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yVGVzdC50ZXN0X2xheW91dF90ZXN0X3NlYXJjaHBhdGhfd2l0aF9hcHBs
ZV9hZGRpdGlvbnMpOiBDb25mb3JtIHdpdGggdGhlIG5ldworICAgICAgICBtb2NrIGFwcGxlX2Fk
ZGl0aW9ucy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3Rlc3RjYXNlLnB5
OgorICAgICAgICAoSU9TVGVzdC5tYWtlX3BvcnQpOiBVc2UgaU9TIDExIGFzIHRoZSBkZWZhdWx0
IHZlcnNpb24gZm9yIHRlc3RpbmcuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L21h
Yy5weToKKyAgICAgICAgKE1hY1BvcnQpOgorICAgICAgICAoTWFjUG9ydC5fX2luaXRfXyk6IFVz
ZSBWZXJzaW9uIG9iamVjdCBmb3IgX29zX3ZlcnNpb24uCisgICAgICAgIChNYWNQb3J0LmRlZmF1
bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgpOiBVc2UgdGhlIGludGVybmFsIG1hcHBpbmcgb2YgdmVy
c2lvbiBuYW1lcyB0byBjb25zdHJ1Y3QKKyAgICAgICAgYXBwbGVfYWRkaXRpb25zIGV4cGVjdGF0
aW9ucy4KKyAgICAgICAgKE1hY1BvcnQuY29uZmlndXJhdGlvbl9zcGVjaWZpZXJfbWFjcm9zKTog
QXV0b21hdGljYWxseSBjb25zdHJ1Y3QgbWFjcm9zIGJhc2VkIG9uIFZlcnNpb25OYW1lTWFwLgor
ICAgICAgICAoTWFjUG9ydC5fYXBwbGVfYWRkaXRpb25zX3BhdGgpOiBEZWxldGVkLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWNfdW5pdHRlc3QucHk6CisgICAgICAgIChNYWNU
ZXN0KTogVXNlIFZlcnNpb24gb2JqZWN0IGluc3RlYWQgb2YgdmVyc2lvbiBzdHJpbmcuCisgICAg
ICAgIChNYWNUZXN0LnRlc3RfdmVyc2lvbik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9w
b3J0L3BvcnRfdGVzdGNhc2UucHk6CisgICAgICAgIChiaW5kX21vY2tfYXBwbGVfYWRkaXRpb25z
KTogQWRkIGEgbW9jayBWZXJzaW9uTmFtZU1hcCB0byBtb2NrIGFwcGxlX2FkZGl0aW9ucy4KKyAg
ICAgICAgKGJpbmRfbW9ja19hcHBsZV9hZGRpdGlvbnMuTW9ja0FwcGxlQWRkaXRpb25zKToKKyAg
ICAgICAgKGJpbmRfbW9ja19hcHBsZV9hZGRpdGlvbnMuTW9ja0FwcGxlQWRkaXRpb25zLnZlcnNp
b25fbmFtZV9tYXBwaW5nKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvdGVzdC5w
eToKKyAgICAgICAgKFRlc3RQb3J0KToKKyAgICAgICAgKFRlc3RQb3J0Ll9faW5pdF9fKTogVXNl
IFZlcnNpb25OYW1lTWFwIHRvIGNvbXB1dGUgdGhlIGNvcnJlY3QgVmVyc2lvbiBmcm9tIGEgcG9y
dCBuYW1lLgorICAgICAgICAoVGVzdFBvcnQudmVyc2lvbl9uYW1lKTogTWlycm9yIFBvcnQgb2Jq
ZWN0LgorICAgICAgICAoVGVzdFBvcnQuYmFzZWxpbmVfc2VhcmNoX3BhdGgpOiBSZXBsYWNlIHdp
bjcgd2l0aCA3c3AwLgorICAgICAgICAoVGVzdFBvcnQuX2FsbF9zeXN0ZW1zKTogRGl0dG8uCisg
ICAgICAgIChUZXN0UG9ydC5jb25maWd1cmF0aW9uX3NwZWNpZmllcl9tYWNyb3MpOiBEaXR0by4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5OgorICAgICAgICAoV2luUG9y
dCk6CisgICAgICAgIChXaW5Qb3J0Ll9faW5pdF9fKTogQ29uc3RydWN0IFZlcnNpb24gb2JqZWN0
IGZyb20gcG9ydCBuYW1lLgorICAgICAgICAoV2luUG9ydC5kZWZhdWx0X2Jhc2VsaW5lX3NlYXJj
aF9wYXRoKTogVXNlIHRoZSBpbnRlcm5hbCBtYXBwaW5nIG9mIHZlcnNpb24gbmFtZXMgdG8gY29u
c3RydWN0CisgICAgICAgIGFwcGxlX2FkZGl0aW9ucyBleHBlY3RhdGlvbnMuCisgICAgICAgIChX
aW5DYWlyb1BvcnQpOgorICAgICAgICAoV2luQ2Fpcm9Qb3J0LmRlZmF1bHRfYmFzZWxpbmVfc2Vh
cmNoX3BhdGgpOiBVc2UgTUlOL01BWCBpbnN0ZWFkIG9mIHRoZSBWRVJTSU9OX0ZBTExCQUNLX09S
REVSLgorICAgICAgICAoV2luQ2Fpcm9Qb3J0Ll9mdXR1cmVfcG9ydF9uYW1lKTogRGVsZXRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luX3VuaXR0ZXN0LnB5OgorICAgICAg
ICAoV2luUG9ydFRlc3QudGVzdF9iYXNlbGluZV9zZWFyY2hfcGF0aCk6IEFkZCBuZXcgV2luZG93
cyB2ZXJzaW9ucyBub3QgcHJldmlvdXNseSBpbmNsdWRlZC4KKyAgICAgICAgKFdpblBvcnRUZXN0
Ll9hc3NlcnRfdmVyc2lvbik6IEhhbmRsZSBleHBlY3RlZF92ZXJzaW9uIGFzIGEgVmVyc2lvbiBv
YmplY3QuCisgICAgICAgIChXaW5Qb3J0VGVzdC50ZXN0X3ZlcnNpb25zKTogUGFzcyBWZXJzaW9u
IG9iamVjdHMgaW5zdGVhZCBvZiB2ZXJzaW9uIHN0cmluZ3MuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9wb3J0L3dwZS5weToKKyAgICAgICAgKFdQRVBvcnQuX2dlbmVyYXRlX2FsbF90ZXN0
X2NvbmZpZ3VyYXRpb25zKTogUmVwbGFjZSBfdmVyc2lvbiB3aXRoIHZlcnNpb25fbmFtZSgpLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0ZXN0
LnB5OgorICAgICAgICAoUHJpbnRFeHBlY3RhdGlvbnNUZXN0LnRlc3RfbXVsdGlwbGUpOiBSZXBs
YWNlIHdpbjcgd2l0aCA3c3AwLgorICAgICAgICAoUHJpbnRCYXNlbGluZXNUZXN0LnRlc3RfbXVs
dGlwbGUpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMv
cXVldWVzLnB5OgorICAgICAgICAoUGF0Y2hQcm9jZXNzaW5nUXVldWUuX25ld19wb3J0X25hbWVf
ZnJvbV9vbGQpOiBVc2Ugb3NfdmVyc2lvbl9uYW1lKCkgaW5zdGVhZCBvZiBWZXJzaW9uIG9iamVj
dC4KKwogMjAxNy0xMi0xMiAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAg
ICAgICAgW1dLXSBBZGQgbW9kZXJuIFdlYktpdCBTUEkgdG8gc2V0IGF1dG8gZmlsbCBidXR0b24g
dHlwZSBhbmQgcXVlcnkgaWYgdGhlIGF1dG8gZmlsbCBidXR0b24gaXMgZW5hYmxlZApJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbi5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uLnB5CShyZXZpc2lvbiAyMjU4NDMp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw2ICszNywxMSBAQCBjbGFzcyBWZXJzaW9uKG9iamVjdCk6CiAgICAgICAgICAg
ICByZXN1bHRbaV0gPSBpbnQodmFsW2ldKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIGZyb21fbmFtZShuYW1lKToKKyAgICAgICAgZnJvbSB2ZXJz
aW9uX25hbWVfbWFwIGltcG9ydCBWZXJzaW9uTmFtZU1hcAorICAgICAgICByZXR1cm4gVmVyc2lv
bk5hbWVNYXAubWFwKCkuZnJvbV9uYW1lKG5hbWUpWzFdCisKICAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbWFqb3I9MCwgbWlub3I9MCwgdGlueT0wLCBtaWNybz0wLCBuYW5vPTApOgogICAgICAgICBz
ZWxmLm1ham9yID0gaW50KG1ham9yKQogICAgICAgICBzZWxmLm1pbm9yID0gaW50KG1pbm9yKQpA
QCAtMTExLDYgKzExNiw4IEBAIGNsYXNzIFZlcnNpb24ob2JqZWN0KToKICAgICAgICAgcmV0dXJu
IHJlc3VsdAogCiAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBvdGhl
ciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICAgZm9yIGkgaW4geHJhbmdl
KGxlbihzZWxmKSk6CiAgICAgICAgICAgICBpZiBjbXAoc2VsZltpXSwgb3RoZXJbaV0pOgogICAg
ICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZltpXSwgb3RoZXJbaV0pCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX25hbWVfbWFwLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFtZV9tYXAucHkJKHJldmlz
aW9uIDIyNTg0MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ZlcnNpb25fbmFt
ZV9tYXAucHkJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDkgQEAgY2xhc3MgVmVyc2lvbk5h
bWVNYXAob2JqZWN0KToKICAgICBAc3RhdGljbWV0aG9kCiAgICAgQG1lbW9pemVkCiAgICAgZGVm
IG1hcChwbGF0Zm9ybT1Ob25lKToKKyAgICAgICAgZnJvbSB3ZWJraXRweS5wb3J0LmNvbmZpZyBp
bXBvcnQgYXBwbGVfYWRkaXRpb25zCisgICAgICAgIGlmIGFwcGxlX2FkZGl0aW9ucygpOgorICAg
ICAgICAgICAgcmV0dXJuIGFwcGxlX2FkZGl0aW9ucygpLnZlcnNpb25fbmFtZV9tYXBwaW5nKHBs
YXRmb3JtKQogICAgICAgICByZXR1cm4gVmVyc2lvbk5hbWVNYXAocGxhdGZvcm09cGxhdGZvcm0p
CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcGxhdGZvcm09Tm9uZSk6CkBAIC03Miw2ICs3NSw5
IEBAIGNsYXNzIFZlcnNpb25OYW1lTWFwKG9iamVjdCk6CiAgICAgICAgICAgICAnbGludXgnOiB7
fSwKICAgICAgICAgfQogCisgICAgICAgICMgd2luY2Fpcm8gdXNlcyB0aGUgc2FtZSB2ZXJzaW9u
cyBhcyBXaW5kb3dzCisgICAgICAgIHNlbGYubWFwcGluZ1tQVUJMSUNfVEFCTEVdWyd3aW5jYWly
byddID0gc2VsZi5tYXBwaW5nW1BVQkxJQ19UQUJMRV1bJ3dpbiddCisKICAgICBAY2xhc3NtZXRo
b2QKICAgICBkZWYgX2F1dG9tYXBfdG9fbWFqb3JfdmVyc2lvbihjbHMsIHByZWZpeCwgbWluaW11
bT1WZXJzaW9uKDEpLCBtYXhpbXVtPVZlcnNpb24oMSkpOgogICAgICAgICByZXN1bHQgPSB7fQpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vdmVyc2lvbl91bml0dGVzdC5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi92ZXJzaW9uX3VuaXR0
ZXN0LnB5CShyZXZpc2lvbiAyMjU4NDMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi92ZXJzaW9uX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsMyArMTMwLDQgQEAg
Y2xhc3MgVmVyc2lvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKQogICAgICAgICBzZWxmLmFz
c2VydEdyZWF0ZXIoVmVyc2lvbigxLCAyLCA0KSwgVmVyc2lvbigxLCAyLCAzKSkKICAgICAgICAg
c2VsZi5hc3NlcnRHcmVhdGVyKFZlcnNpb24oMSwgMywgMiksIFZlcnNpb24oMSwgMiwgMykpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihWZXJzaW9uKDIsIDEsIDEpLCBWZXJzaW9uKDEsIDIs
IDMpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFZlcnNpb24oMSwgMiwgMyksIE5vbmUp
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZv
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9w
bGF0Zm9ybWluZm8ucHkJKHJldmlzaW9uIDIyNTg0MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9wbGF0Zm9ybWluZm8ucHkJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcg
KzMxLDcgQEAgaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnZl
cnNpb24gaW1wb3J0IFZlcnNpb24KLWZyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9t
YXAgaW1wb3J0IFZlcnNpb25OYW1lTWFwCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25h
bWVfbWFwIGltcG9ydCBQVUJMSUNfVEFCTEUsIFZlcnNpb25OYW1lTWFwCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUKIAogCkBAIC01NCwyNCAr
NTQsMTcgQEAgY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6CiAgICAgICAgIHNlbGYub3NfbmFt
ZSA9IHNlbGYuX2RldGVybWluZV9vc19uYW1lKHN5c19tb2R1bGUucGxhdGZvcm0pCiAgICAgICAg
IHNlbGYub3NfdmVyc2lvbiA9IE5vbmUKIAorICAgICAgICBzZWxmLl9pc19jeWd3aW4gPSBzeXNf
bW9kdWxlLnBsYXRmb3JtID09ICdjeWd3aW4nCisKICAgICAgICAgaWYgc2VsZi5vc19uYW1lLnN0
YXJ0c3dpdGgoJ21hYycpOgotICAgICAgICAgICAgdmVyc2lvbiA9IFZlcnNpb24uZnJvbV9zdHJp
bmcocGxhdGZvcm1fbW9kdWxlLm1hY192ZXIoKVswXSkKKyAgICAgICAgICAgIHNlbGYub3NfdmVy
c2lvbiA9IFZlcnNpb24uZnJvbV9zdHJpbmcocGxhdGZvcm1fbW9kdWxlLm1hY192ZXIoKVswXSkK
ICAgICAgICAgZWxpZiBzZWxmLm9zX25hbWUuc3RhcnRzd2l0aCgnd2luJyk6Ci0gICAgICAgICAg
ICB2ZXJzaW9uID0gc2VsZi5fd2luX3ZlcnNpb24oKQorICAgICAgICAgICAgc2VsZi5vc192ZXJz
aW9uID0gc2VsZi5fd2luX3ZlcnNpb24oKQogICAgICAgICBlbGlmIHNlbGYub3NfbmFtZSA9PSAn
bGludXgnIG9yIHNlbGYub3NfbmFtZSA9PSAnZnJlZWJzZCcgb3Igc2VsZi5vc19uYW1lID09ICdv
cGVuYnNkJyBvciBzZWxmLm9zX25hbWUgPT0gJ25ldGJzZCc6Ci0gICAgICAgICAgICB2ZXJzaW9u
ID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAj
IE1vc3Qgb3RoZXIgcGxhdGZvcm1zIChuYW1lbHkgaU9TKSByZXR1cm4gY29uZm9ybWluZyB2ZXJz
aW9uIHN0cmluZ3MuCi0gICAgICAgICAgICB2ZXJzaW9uID0gVmVyc2lvbi5mcm9tX3N0cmluZyhw
bGF0Zm9ybV9tb2R1bGUucmVsZWFzZSgpKQotCi0gICAgICAgIHNlbGYuX2lzX2N5Z3dpbiA9IHN5
c19tb2R1bGUucGxhdGZvcm0gPT0gJ2N5Z3dpbicKLQotICAgICAgICBpZiB2ZXJzaW9uIGlzIE5v
bmU6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBWZXJz
aW9uTmFtZU1hcC5tYXAoc2VsZikudG9fbmFtZSh2ZXJzaW9uLCB0YWJsZT0ncHVibGljJykKLSAg
ICAgICAgYXNzZXJ0IHNlbGYub3NfdmVyc2lvbiBpcyBub3QgTm9uZQotICAgICAgICBzZWxmLm9z
X3ZlcnNpb24gPSBzZWxmLm9zX3ZlcnNpb24ubG93ZXIoKS5yZXBsYWNlKCcgJywgJycpCisgICAg
ICAgICAgICBzZWxmLm9zX3ZlcnNpb24gPSBWZXJzaW9uLmZyb21fc3RyaW5nKHBsYXRmb3JtX21v
ZHVsZS5yZWxlYXNlKCkpCiAKICAgICBkZWYgaXNfbWFjKHNlbGYpOgogICAgICAgICByZXR1cm4g
c2VsZi5vc19uYW1lID09ICdtYWMnCkBAIC0xMTAsNiArMTAzLDExIEBAIGNsYXNzIFBsYXRmb3Jt
SW5mbyhvYmplY3QpOgogICAgICAgICAjIFdpbmRvd3MtMjAwOFNlcnZlclIyLTYuMS43NjAwCiAg
ICAgICAgIHJldHVybiBzZWxmLl9wbGF0Zm9ybV9tb2R1bGUucGxhdGZvcm0oKQogCisgICAgZGVm
IG9zX3ZlcnNpb25fbmFtZShzZWxmLCB0YWJsZT1QVUJMSUNfVEFCTEUpOgorICAgICAgICBpZiBu
b3Qgc2VsZi5vc192ZXJzaW9uOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0
dXJuIFZlcnNpb25OYW1lTWFwLm1hcChzZWxmKS50b19uYW1lKHNlbGYub3NfdmVyc2lvbiwgdGFi
bGU9dGFibGUpCisKICAgICBkZWYgdG90YWxfYnl0ZXNfbWVtb3J5KHNlbGYpOgogICAgICAgICBp
ZiBzZWxmLmlzX21hYygpOgogICAgICAgICAgICAgcmV0dXJuIGxvbmcoc2VsZi5fZXhlY3V0aXZl
LnJ1bl9jb21tYW5kKFsic3lzY3RsIiwgIi1uIiwgImh3Lm1lbXNpemUiXSkpCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3Jt
aW5mb19tb2NrLnB5CShyZXZpc2lvbiAyMjU4NDMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9zeXN0ZW0vcGxhdGZvcm1pbmZvX21vY2sucHkJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDEwICsyOCwxMiBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJz
aW9uIGltcG9ydCBWZXJzaW9uCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25hbWVfbWFw
IGltcG9ydCBQVUJMSUNfVEFCTEUsIFZlcnNpb25OYW1lTWFwCiAKIAogY2xhc3MgTW9ja1BsYXRm
b3JtSW5mbyhvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvc19uYW1lPSdtYWMnLCBv
c192ZXJzaW9uPSdzbm93bGVvcGFyZCcpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvc19uYW1l
PSdtYWMnLCBvc192ZXJzaW9uPVZlcnNpb24uZnJvbV9uYW1lKCdTbm93IExlb3BhcmQnKSk6Cisg
ICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG9zX3ZlcnNpb24sIFZlcnNpb24pCiAgICAgICAgIHNl
bGYub3NfbmFtZSA9IG9zX25hbWUKICAgICAgICAgc2VsZi5vc192ZXJzaW9uID0gb3NfdmVyc2lv
bgogICAgICAgICBzZWxmLmV4cGVjdGVkX3hjb2RlX3NpbWN0bF9saXN0ID0gTm9uZQpAQCAtNjAs
NiArNjIsMTEgQEAgY2xhc3MgTW9ja1BsYXRmb3JtSW5mbyhvYmplY3QpOgogICAgIGRlZiBkaXNw
bGF5X25hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAiTW9ja1BsYXRmb3JtIDEuMCIKIAorICAg
IGRlZiBvc192ZXJzaW9uX25hbWUoc2VsZiwgdGFibGU9UFVCTElDX1RBQkxFKToKKyAgICAgICAg
aWYgbm90IHNlbGYub3NfdmVyc2lvbjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAg
IHJldHVybiBWZXJzaW9uTmFtZU1hcC5tYXAoc2VsZikudG9fbmFtZShzZWxmLm9zX3ZlcnNpb24s
IHRhYmxlPXRhYmxlKQorCiAgICAgZGVmIHRvdGFsX2J5dGVzX21lbW9yeShzZWxmKToKICAgICAg
ICAgcmV0dXJuIDMgKiAxMDI0ICogMTAyNCAqIDEwMjQgICMgM0dCIGlzIGEgcmVhc29uYWJsZSBh
bW91bnQgb2YgcmFtIHRvIG1vY2suCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS9wbGF0Zm9ybWluZm9fdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3BsYXRmb3JtaW5mb191bml0dGVzdC5weQko
cmV2aXNpb24gMjI1ODQzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L3BsYXRmb3JtaW5mb191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsOCBA
QCBjbGFzcyBUZXN0UGxhdGZvcm1JbmZvKHVuaXR0ZXN0LlRlc3RDYXNlCiAgICAgICAgICMgVGhp
cyB0ZXN0IG1ha2VzIHN1cmUgdGhlIHJlYWwgKHVubW9ja2VkKSBjb2RlIGFjdHVhbGx5IHdvcmtz
LgogICAgICAgICBpbmZvID0gUGxhdGZvcm1JbmZvKHN5cywgcGxhdGZvcm0sIEV4ZWN1dGl2ZSgp
KQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhpbmZvLm9zX25hbWUsICcnKQotICAgICAg
ICBzZWxmLmFzc2VydE5vdEVxdWFscyhpbmZvLm9zX3ZlcnNpb24sICcnKQorICAgICAgICBpZiBp
bmZvLmlzX21hYygpIG9yIGluZm8uaXNfd2luKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElz
Tm90Tm9uZShpbmZvLm9zX3ZlcnNpb24pCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGlu
Zm8uZGlzcGxheV9uYW1lKCksICcnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5mby5pc19t
YWMoKSBvciBpbmZvLmlzX3dpbigpIG9yIGluZm8uaXNfbGludXgoKSBvciBpbmZvLmlzX2ZyZWVi
c2QoKSkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoaW5mby50ZXJtaW5hbF93aWR0aCgp
KQpAQCAtMTMyLDM3ICsxMzMsNiBAQCBjbGFzcyBUZXN0UGxhdGZvcm1JbmZvKHVuaXR0ZXN0LlRl
c3RDYXNlCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHNlbGYu
bWFrZV9pbmZvLCBmYWtlX3N5cygndm1zJykpCiAKLSAgICBkZWYgdGVzdF9vc192ZXJzaW9uKHNl
bGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgc2VsZi5tYWtl
X2luZm8sIGZha2Vfc3lzKCdkYXJ3aW4nKSwgZmFrZV9wbGF0Zm9ybSgnMTAuNC4zJykpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBm
YWtlX3BsYXRmb3JtKCcxMC41LjEnKSkub3NfdmVyc2lvbiwgJ2xlb3BhcmQnKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdkYXJ3aW4nKSwgZmFrZV9w
bGF0Zm9ybSgnMTAuNi4xJykpLm9zX3ZlcnNpb24sICdzbm93bGVvcGFyZCcpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3Bs
YXRmb3JtKCcxMC43LjEnKSkub3NfdmVyc2lvbiwgJ2xpb24nKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdkYXJ3aW4nKSwgZmFrZV9wbGF0Zm9ybSgn
MTAuOC4xJykpLm9zX3ZlcnNpb24sICdtb3VudGFpbmxpb24nKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdkYXJ3aW4nKSwgZmFrZV9wbGF0Zm9ybSgn
MTAuOS4wJykpLm9zX3ZlcnNpb24sICdtYXZlcmlja3MnKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdkYXJ3aW4nKSwgZmFrZV9wbGF0Zm9ybSgnMTAu
MTAuMCcpKS5vc192ZXJzaW9uLCAneW9zZW1pdGUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdkYXJ3aW4nKSwgZmFrZV9wbGF0Zm9ybSgnMTAuMTEu
MCcpKS5vc192ZXJzaW9uLCAnZWxjYXBpdGFuJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnZGFyd2luJyksIGZha2VfcGxhdGZvcm0oJzEwLjEyLjAn
KSkub3NfdmVyc2lvbiwgJ3NpZXJyYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5t
YWtlX2luZm8oZmFrZV9zeXMoJ2RhcndpbicpLCBmYWtlX3BsYXRmb3JtKCcxMC4xMy4wJykpLm9z
X3ZlcnNpb24sICdoaWdoc2llcnJhJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1h
a2VfaW5mbyhmYWtlX3N5cygnZGFyd2luJyksIGZha2VfcGxhdGZvcm0oJzEwLjE0LjAnKSkub3Nf
dmVyc2lvbiwgJ2Z1dHVyZScpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2Vf
aW5mbyhmYWtlX3N5cygnbGludXgyJyksIGZha2VfcGxhdGZvcm0oJycsICcxMC40JykpLm9zX3Zl
cnNpb24sIE5vbmUpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhm
YWtlX3N5cygnZnJlZWJzZDgnKSwgZmFrZV9wbGF0Zm9ybSgnJywgJzguMy1QUkVSRUxFQVNFJykp
Lm9zX3ZlcnNpb24sIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlX2lu
Zm8oZmFrZV9zeXMoJ2ZyZWVic2Q5JyksIGZha2VfcGxhdGZvcm0oJycsICc5LjAtUkVMRUFTRScp
KS5vc192ZXJzaW9uLCBOb25lKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlv
bkVycm9yLCBzZWxmLm1ha2VfaW5mbywgZmFrZV9zeXMoJ3dpbjMyJyksIGZha2VfcGxhdGZvcm0o
d2luX3ZlcnNpb25fc3RyaW5nPSc1LjAuMTIzNCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3aW4zMicpLCBmYWtlX3BsYXRmb3JtKHdpbl92ZXJz
aW9uX3N0cmluZz0nMTAuMC4xNDM5MycpKS5vc192ZXJzaW9uLCAnd2luMTAnKQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3aW4zMicpLCBmYWtlX3Bs
YXRmb3JtKHdpbl92ZXJzaW9uX3N0cmluZz0nNi4yLjEyMzQnKSkub3NfdmVyc2lvbiwgJzgnKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCd3aW4zMicp
LCBmYWtlX3BsYXRmb3JtKHdpbl92ZXJzaW9uX3N0cmluZz0nNi4xLjc2MDAnKSkub3NfdmVyc2lv
biwgJzdzcDAnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vf
c3lzKCd3aW4zMicpLCBmYWtlX3BsYXRmb3JtKHdpbl92ZXJzaW9uX3N0cmluZz0nNi4wLjEyMzQn
KSkub3NfdmVyc2lvbiwgJ3Zpc3RhJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1h
a2VfaW5mbyhmYWtlX3N5cygnd2luMzInKSwgZmFrZV9wbGF0Zm9ybSh3aW5fdmVyc2lvbl9zdHJp
bmc9JzUuMS4xMjM0JykpLm9zX3ZlcnNpb24sICd4cCcpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHNlbGYubWFrZV9pbmZvLCBmYWtlX3N5cygnd2luMzInKSwg
ZXhlY3V0aXZlPWZha2VfZXhlY3V0aXZlKCc1LjAuMTIzNCcpKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYubWFrZV9pbmZvKGZha2Vfc3lzKCdjeWd3aW4nKSwgZXhlY3V0aXZlPWZha2Vf
ZXhlY3V0aXZlKCc2LjIuMTIzNCcpKS5vc192ZXJzaW9uLCAnOCcpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5tYWtlX2luZm8oZmFrZV9zeXMoJ2N5Z3dpbicpLCBleGVjdXRpdmU9ZmFr
ZV9leGVjdXRpdmUoJzYuMS43NjAwJykpLm9zX3ZlcnNpb24sICc3c3AwJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnY3lnd2luJyksIGV4ZWN1dGl2
ZT1mYWtlX2V4ZWN1dGl2ZSgnNi4wLjEyMzQnKSkub3NfdmVyc2lvbiwgJ3Zpc3RhJykKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfaW5mbyhmYWtlX3N5cygnY3lnd2luJyksIGV4
ZWN1dGl2ZT1mYWtlX2V4ZWN1dGl2ZSgnNS4xLjEyMzQnKSkub3NfdmVyc2lvbiwgJ3hwJykKLQog
ICAgIGRlZiB0ZXN0X2Rpc3BsYXlfbmFtZShzZWxmKToKICAgICAgICAgaW5mbyA9IHNlbGYubWFr
ZV9pbmZvKGZha2Vfc3lzKCdkYXJ3aW4nKSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMo
aW5mby5kaXNwbGF5X25hbWUoKSwgJycpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9tb2RlbHMvdGVzdF9jb25maWd1cmF0aW9uLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2NvbmZpZ3VyYXRp
b24ucHkJKHJldmlzaW9uIDIyNTg0MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL21vZGVscy90ZXN0X2NvbmZpZ3VyYXRpb24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDcgQEAgaW1wb3J0IGl0ZXJ0b29scwogCiBjbGFzcyBUZXN0Q29uZmlndXJhdGlvbihv
YmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2ZXJzaW9uLCBhcmNoaXRlY3R1cmUsIGJ1
aWxkX3R5cGUpOgotICAgICAgICBzZWxmLnZlcnNpb24gPSB2ZXJzaW9uCisgICAgICAgIHNlbGYu
dmVyc2lvbiA9IHZlcnNpb24ubG93ZXIoKS5yZXBsYWNlKCcgJywgJycpIGlmIHZlcnNpb24gaXMg
bm90IE5vbmUgZWxzZSAnJwogICAgICAgICBzZWxmLmFyY2hpdGVjdHVyZSA9IGFyY2hpdGVjdHVy
ZQogICAgICAgICBzZWxmLmJ1aWxkX3R5cGUgPSBidWlsZF90eXBlCiAKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVjdGF0aW9uc191bml0
dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9tb2RlbHMvdGVzdF9leHBlY3RhdGlvbnNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIyNTg0MykK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2V4cGVj
dGF0aW9uc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNDc0LDcgKzQ3NCw3IEBAIEJ1
Zyh5KSBbIFdpbiBNYWMgRGVidWcgXSBmYWlsdXJlcy9leHBlY3QKIAogICAgICAgICBhY3R1YWxf
ZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zLnJlbW92ZV9jb25maWd1cmF0aW9uX2Zyb21fdGVz
dCgnZmFpbHVyZXMvZXhwZWN0ZWQvZm9vLmh0bWwnLCB0ZXN0X2NvbmZpZykKIAotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCIiIkJ1Zyh4KSBbIExpbnV4IFZpc3RhIFdpbjcgUmVsZWFzZSBdIGZh
aWx1cmVzL2V4cGVjdGVkL2Zvby5odG1sIFsgRmFpbHVyZSBdCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoIiIiQnVnKHgpIFsgN1NQMCBMaW51eCBWaXN0YSBSZWxlYXNlIF0gZmFpbHVyZXMvZXhw
ZWN0ZWQvZm9vLmh0bWwgWyBGYWlsdXJlIF0KIEJ1Zyh5KSBbIFdpbiBNYWMgRGVidWcgXSBmYWls
dXJlcy9leHBlY3RlZC9mb28uaHRtbCBbIENyYXNoIF0KICIiIiwgYWN0dWFsX2V4cGVjdGF0aW9u
cykKIApAQCAtNDkzLDcgKzQ5Myw3IEBAIEJ1Zyh5KSBbIFdpbiBEZWJ1ZyBdIGZhaWx1cmVzL2V4
cGVjdGVkL2YKIAogICAgICAgICBhY3R1YWxfZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zLnJl
bW92ZV9jb25maWd1cmF0aW9uX2Zyb21fdGVzdCgnZmFpbHVyZXMvZXhwZWN0ZWQvZm9vLmh0bWwn
LCB0ZXN0X2NvbmZpZykKICAgICAgICAgYWN0dWFsX2V4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9u
cy5yZW1vdmVfY29uZmlndXJhdGlvbl9mcm9tX3Rlc3QoJ2ZhaWx1cmVzL2V4cGVjdGVkL2Zvby5o
dG1sJywgaG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KCd0ZXN0LXdpbi12aXN0YScsIE5vbmUpLnRlc3Rf
Y29uZmlndXJhdGlvbigpKQotICAgICAgICBhY3R1YWxfZXhwZWN0YXRpb25zID0gZXhwZWN0YXRp
b25zLnJlbW92ZV9jb25maWd1cmF0aW9uX2Zyb21fdGVzdCgnZmFpbHVyZXMvZXhwZWN0ZWQvZm9v
Lmh0bWwnLCBob3N0LnBvcnRfZmFjdG9yeS5nZXQoJ3Rlc3Qtd2luLXdpbjcnLCBOb25lKS50ZXN0
X2NvbmZpZ3VyYXRpb24oKSkKKyAgICAgICAgYWN0dWFsX2V4cGVjdGF0aW9ucyA9IGV4cGVjdGF0
aW9ucy5yZW1vdmVfY29uZmlndXJhdGlvbl9mcm9tX3Rlc3QoJ2ZhaWx1cmVzL2V4cGVjdGVkL2Zv
by5odG1sJywgaG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KCd0ZXN0LXdpbi03c3AwJywgTm9uZSkudGVz
dF9jb25maWd1cmF0aW9uKCkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiIiJCdWcoeSkg
WyBXaW4gRGVidWcgXSBmYWlsdXJlcy9leHBlY3RlZC9mb28uaHRtbCBbIENyYXNoIF0KICIiIiwg
YWN0dWFsX2V4cGVjdGF0aW9ucykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9h
cHBsZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYXBwbGUu
cHkJKHJldmlzaW9uIDIyNTg0MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9hcHBs
ZS5weQkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDExIEBACiAjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAK
IGltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKIAotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHkuY29tbW9uLm1lbW9p
emVkIGltcG9ydCBtZW1vaXplZAorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lvbl9uYW1lX21h
cCBpbXBvcnQgVmVyc2lvbk5hbWVNYXAKIGZyb20gd2Via2l0cHkucG9ydC5iYXNlIGltcG9ydCBQ
b3J0Citmcm9tIHdlYmtpdHB5LnBvcnQuY29uZmlnIGltcG9ydCBhcHBsZV9hZGRpdGlvbnMKIGZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0
IFRlc3RDb25maWd1cmF0aW9uCiAKIApAQCAtNDAsMTkgKzQxLDkgQEAgX2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKF9fbmFtZV9fKQogY2xhc3MgQXBwbGVQb3J0KFBvcnQpOgogICAgICIiIlNoYXJl
ZCBsb2dpYyBiZXR3ZWVuIGFsbCBvZiBBcHBsZSdzIHBvcnRzLiIiIgogCi0gICAgIyBUaGlzIGlz
IHVzZWQgdG8gcmVwcmVzZW50IHRoZSB2ZXJzaW9uIG9mIGFuIG9wZXJhdGluZyBzeXN0ZW0KLSAg
ICAjIGNvcnJlc3BvbmRpbmcgdG8gdGhlICJtYWMiIG9yICJ3aW4iIGJhc2UgTGF5b3V0VGVzdHMv
cGxhdGZvcm0KLSAgICAjIGRpcmVjdG9yeS4gIEknbSBub3Qgc3VyZSB0aGlzIGNvbmNlcHQgaXMg
dmVyeSB1c2VmdWwsCi0gICAgIyBidXQgaXQgZ2l2ZXMgdXMgYSB3YXkgdG8gcmVmZXIgdG8gZmFs
bGJhY2sgcGF0aHMgKm9ubHkqIGluY2x1ZGluZwotICAgICMgdGhlIGJhc2UgZGlyZWN0b3J5Lgot
ICAgICMgVGhpcyBpcyBtb3N0bHkgZG9uZSBiZWNhdXNlIFRlc3RDb25maWd1cmF0aW9uIGFzc3Vt
ZXMgdGhhdCBzZWxmLnZlcnNpb24oKQotICAgICMgd2lsbCBuZXZlciByZXR1cm4gTm9uZS4gKE5v
bmUgd291bGQgYmUgYW5vdGhlciB3YXkgdG8gcmVwcmVzZW50IHRoaXMgY29uY2VwdC4pCi0gICAg
IyBBcHBsZSBzdXBwb3NlZGx5IGhhcyBleHBsaWNpdCAiZnV0dXJlIiByZXN1bHRzIHdoaWNoIGFy
ZSBrZXB0IGluIGFuIGludGVybmFsIHJlcG9zaXRvcnkuCi0gICAgIyBJdCdzIHBvc3NpYmxlIHRo
YXQgQXBwbGUgd291bGQgd2FudCB0byBmaXggdGhpcyBjb2RlIHRvIHdvcmsgYmV0dGVyIHdpdGgg
dGhvc2UgcmVzdWx0cy4KLSAgICBGVVRVUkVfVkVSU0lPTiA9ICdmdXR1cmUnICAjIEZJWE1FOiBU
aGlzIHdob2xlICdmdXR1cmUnIHRoaW5nIGZlZWxzIGxpa2UgYSBoYWNrLgotCiAgICAgIyBvdmVy
cmlkZGVuIGluIHN1YmNsYXNzZXMKLSAgICBWRVJTSU9OX0ZBTExCQUNLX09SREVSID0gW10KKyAg
ICBWRVJTSU9OX01JTiA9IE5vbmUKKyAgICBWRVJTSU9OX01BWCA9IE5vbmUKICAgICBBUkNISVRF
Q1RVUkVTID0gW10KICAgICBfY3Jhc2hfbG9nc190b19za2lwX2Zvcl9ob3N0ID0ge30KIApAQCAt
NzEsOSArNjIsOSBAQCBjbGFzcyBBcHBsZVBvcnQoUG9ydCk6CiAgICAgICAgICAgICAjIGJlaW5n
IHJ1biwgc28gdGhpcyB3b24ndCB3b3JrIGlmIHlvdSdyZSBub3Qgb24gbWFjIG9yIHdpbiAocmVz
cGVjdGl2ZWx5KS4KICAgICAgICAgICAgICMgSWYgeW91J3JlIG5vdCBvbiB0aGUgby9zIGluIHF1
ZXN0aW9uLCB5b3UgbXVzdCBzcGVjaWZ5IGEgZnVsbCB2ZXJzaW9uIG9yIC1mdXR1cmUgKGNmLiBh
Ym92ZSkuCiAgICAgICAgICAgICBpZiBwb3J0X25hbWUgPT0gY2xzLnBvcnRfbmFtZSBhbmQgbm90
IGdldGF0dHIob3B0aW9ucywgJ3dlYmtpdF90ZXN0X3J1bm5lcicsIEZhbHNlKToKLSAgICAgICAg
ICAgICAgICBwb3J0X25hbWUgPSBjbHMucG9ydF9uYW1lICsgJy0nICsgaG9zdC5wbGF0Zm9ybS5v
c192ZXJzaW9uCisgICAgICAgICAgICAgICAgcG9ydF9uYW1lID0gY2xzLnBvcnRfbmFtZSArICct
JyArIGhvc3QucGxhdGZvcm0ub3NfdmVyc2lvbl9uYW1lKCkubG93ZXIoKS5yZXBsYWNlKCcgJywg
JycpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHBvcnRfbmFtZSA9IGNscy5w
b3J0X25hbWUgKyAnLScgKyBob3N0LnBsYXRmb3JtLm9zX3ZlcnNpb24gKyAnLXdrMicKKyAgICAg
ICAgICAgICAgICBwb3J0X25hbWUgPSBjbHMucG9ydF9uYW1lICsgJy0nICsgaG9zdC5wbGF0Zm9y
bS5vc192ZXJzaW9uX25hbWUoKS5sb3dlcigpLnJlcGxhY2UoJyAnLCAnJykgKyAnLXdrMicKICAg
ICAgICAgZWxpZiBnZXRhdHRyKG9wdGlvbnMsICd3ZWJraXRfdGVzdF9ydW5uZXInLCBGYWxzZSkg
YW5kICAnLXdrMicgbm90IGluIHBvcnRfbmFtZToKICAgICAgICAgICAgIHBvcnRfbmFtZSArPSAn
LXdrMicKIApAQCAtMTAzLDMxICs5NCwzMCBAQCBjbGFzcyBBcHBsZVBvcnQoUG9ydCk6CiAgICAg
ZGVmIHNob3VsZF9yZXRyeV9jcmFzaGVzKHNlbGYpOgogICAgICAgICByZXR1cm4gVHJ1ZQogCi0g
ICAgZGVmIF9za2lwcGVkX2ZpbGVfc2VhcmNoX3BhdGhzKHNlbGYpOgotICAgICAgICAjIFdlIGRv
bid0IGhhdmUgYSBkZWRpY2F0ZWQgU2tpcHBlZCBmaWxlIGZvciB0aGUgbW9zdCByZWNlbnQgdmVy
c2lvbiBvZiB0aGUgcG9ydDsKLSAgICAgICAgIyB3ZSBqdXN0IHVzZSB0aGUgb25lIGluIHBsYXRm
b3JtL3ttYWMsd2lufQotICAgICAgICBtb3N0X3JlY2VudF9uYW1lID0gc2VsZi5WRVJTSU9OX0ZB
TExCQUNLX09SREVSWy0xXQotICAgICAgICByZXR1cm4gc2V0KGZpbHRlcihsYW1iZGEgbmFtZTog
bmFtZSAhPSBtb3N0X3JlY2VudF9uYW1lLCBzdXBlcihBcHBsZVBvcnQsIHNlbGYpLl9za2lwcGVk
X2ZpbGVfc2VhcmNoX3BhdGhzKCkpKQotCiAgICAgIyBGSVhNRTogQSBtb3JlIHNvcGhpc3RpY2F0
ZWQgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBtb3ZlIHRvIFdlYktpdFBvcnQgYW5k
IHJlcGxhY2UgYWxsIGNhbGxzIHRvIG5hbWUoKS4KICAgICAjIFRoaXMgaXMgYWxzbyBhIG1pc2xl
YWRpbmcgbmFtZSwgc2luY2UgJ21hYy1mdXR1cmUnIGdldHMgcmVtYXBwZWQgdG8gJ21hYycuCiAg
ICAgZGVmIF9wb3J0X25hbWVfd2l0aF92ZXJzaW9uKHNlbGYpOgogICAgICAgICByZXR1cm4gc2Vs
Zi5uYW1lKCkucmVwbGFjZSgnLWZ1dHVyZScsICcnKS5yZXBsYWNlKCctd2syJywgJycpCiAKLSAg
ICBkZWYgX2FsbG93ZWRfcG9ydF9uYW1lcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuVkVS
U0lPTl9GQUxMQkFDS19PUkRFUiArIFtzZWxmLl9mdXR1cmVfcG9ydF9uYW1lKCldCi0KLSAgICBk
ZWYgX2Z1dHVyZV9wb3J0X25hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLm9wZXJhdGlu
Z19zeXN0ZW0oKSArICItIiArIHNlbGYuRlVUVVJFX1ZFUlNJT04KKyAgICBAbWVtb2l6ZWQKKyAg
ICBkZWYgX2FsbG93ZWRfdmVyc2lvbnMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuVkVSU0lPTl9N
SU4gaXMgTm9uZSBvciBzZWxmLlZFUlNJT05fTUFYIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1
cm4gW10KKyAgICAgICAgc29ydGVkX3ZlcnNpb25zID0gc29ydGVkKFZlcnNpb25OYW1lTWFwLm1h
cChzZWxmLmhvc3QucGxhdGZvcm0pLm1hcHBpbmdfZm9yX3BsYXRmb3JtKHBsYXRmb3JtPXNlbGYu
cG9ydF9uYW1lLnNwbGl0KCctJylbMF0pLnZhbHVlcygpKQorICAgICAgICByZXR1cm4gc29ydGVk
X3ZlcnNpb25zW3NvcnRlZF92ZXJzaW9ucy5pbmRleChzZWxmLlZFUlNJT05fTUlOKTpzb3J0ZWRf
dmVyc2lvbnMuaW5kZXgoc2VsZi5WRVJTSU9OX01BWCkgKyAxXQogCiAgICAgZGVmIF9nZW5lcmF0
ZV9hbGxfdGVzdF9jb25maWd1cmF0aW9ucyhzZWxmKToKICAgICAgICAgY29uZmlndXJhdGlvbnMg
PSBbXQotICAgICAgICBmb3IgcG9ydF9uYW1lIGluIHNlbGYuX2FsbG93ZWRfcG9ydF9uYW1lcygp
OgorICAgICAgICBmb3IgdmVyc2lvbiBpbiBzZWxmLl9hbGxvd2VkX3ZlcnNpb25zKCk6CiAgICAg
ICAgICAgICBmb3IgYnVpbGRfdHlwZSBpbiBzZWxmLkFMTF9CVUlMRF9UWVBFUzoKICAgICAgICAg
ICAgICAgICBmb3IgYXJjaGl0ZWN0dXJlIGluIHNlbGYuQVJDSElURUNUVVJFUzoKLSAgICAgICAg
ICAgICAgICAgICAgY29uZmlndXJhdGlvbnMuYXBwZW5kKFRlc3RDb25maWd1cmF0aW9uKHZlcnNp
b249c2VsZi5fc3RyaXBfcG9ydF9uYW1lX3ByZWZpeChwb3J0X25hbWUpLCBhcmNoaXRlY3R1cmU9
YXJjaGl0ZWN0dXJlLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQorICAgICAgICAgICAgICAgICAg
ICB2ZXJzaW9uX25hbWUgPSBWZXJzaW9uTmFtZU1hcC5tYXAoc2VsZi5ob3N0LnBsYXRmb3JtKS50
b19uYW1lKHZlcnNpb24sIHBsYXRmb3JtPXNlbGYucG9ydF9uYW1lLnNwbGl0KCctJylbMF0pCisg
ICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJhdGlv
bih2ZXJzaW9uPXZlcnNpb25fbmFtZSwgYXJjaGl0ZWN0dXJlPWFyY2hpdGVjdHVyZSwgYnVpbGRf
dHlwZT1idWlsZF90eXBlKSkKICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25zCiAKKyAgICBk
ZWYgX2FwcGxlX2Jhc2VsaW5lX3BhdGgoc2VsZiwgcGxhdGZvcm0pOgorICAgICAgICByZXR1cm4g
c2VsZi5fZmlsZXN5c3RlbS5qb2luKGFwcGxlX2FkZGl0aW9ucygpLmxheW91dF90ZXN0c19wYXRo
KCksIHBsYXRmb3JtKQorCiAgICAgZGVmIF9wYXRoX3RvX2hlbHBlcihzZWxmKToKICAgICAgICAg
YmluYXJ5X25hbWUgPSAnTGF5b3V0VGVzdEhlbHBlcicKICAgICAgICAgcmV0dXJuIHNlbGYuX2J1
aWxkX3BhdGgoYmluYXJ5X25hbWUpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
YmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5w
eQkocmV2aXNpb24gMjI1ODQzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2Uu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAgZnJvbSB3ZWJraXRweS5jb21tb24u
bWVtb2l6ZWQgaW1wb3J0IG1lbQogZnJvbSB3ZWJraXRweS5jb21tb24ucHJldHR5cGF0Y2ggaW1w
b3J0IFByZXR0eVBhdGNoCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHBhdGgK
IGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9y
Citmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25hbWVfbWFwIGltcG9ydCBQVUJMSUNfVEFC
TEUsIFZlcnNpb25OYW1lTWFwCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi53YXZlZGlmZiBpbXBvcnQg
V2F2ZURpZmYKIGZyb20gd2Via2l0cHkuY29tbW9uLndlYmtpdF9maW5kZXIgaW1wb3J0IFdlYktp
dEZpbmRlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJh
dGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24KQEAgLTk5LDcgKzEwMCw3IEBAIGNsYXNzIFBv
cnQob2JqZWN0KToKICAgICAgICAgc2VsZi5fbmFtZSA9IHBvcnRfbmFtZQogCiAgICAgICAgICMg
VGhlc2UgYXJlIGRlZmF1bHQgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIG92ZXJyaWRkZW4gaW4gYSBz
dWJjbGFzc2VzLgotICAgICAgICBzZWxmLl92ZXJzaW9uID0gJycKKyAgICAgICAgc2VsZi5fb3Nf
dmVyc2lvbiA9IE5vbmUKIAogICAgICAgICAjIEZJWE1FOiBUaGlzIGNhbiBiZSByZW1vdmVkIG9u
Y2UgZGVmYXVsdCBhcmNoaXRlY3R1cmVzIGZvciBHVEsgYW5kIEVGTCBFV1MgYm90cyBhcmUgc2V0
LgogICAgICAgICBzZWxmLmRpZF9vdmVycmlkZV9hcmNoaXRlY3R1cmUgPSBGYWxzZQpAQCAtNzY0
LDEzICs3NjUsMTYgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAjIFN1YmNsYXNzZXMg
c2hvdWxkIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KICAgICAgICAgcmV0
dXJuICdtYWMnCiAKLSAgICBkZWYgdmVyc2lvbihzZWxmKToKKyAgICBAbWVtb2l6ZWQKKyAgICBk
ZWYgdmVyc2lvbl9uYW1lKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIGEgc3RyaW5nIGluZGlj
YXRpbmcgdGhlIHZlcnNpb24gb2YgYSBnaXZlbiBwbGF0Zm9ybSwgZS5nLgogICAgICAgICAnbGVv
cGFyZCcgb3IgJ3hwJy4KIAogICAgICAgICBUaGlzIGlzIHVzZWQgdG8gaGVscCBpZGVudGlmeSB0
aGUgZXhhY3QgcG9ydCB3aGVuIHBhcnNpbmcgdGVzdAogICAgICAgICBleHBlY3RhdGlvbnMsIGRl
dGVybWluaW5nIHNlYXJjaCBwYXRocywgYW5kIGxvZ2dpbmcgaW5mb3JtYXRpb24uIiIiCi0gICAg
ICAgIHJldHVybiBzZWxmLl92ZXJzaW9uCisgICAgICAgIGlmIHNlbGYuX29zX3ZlcnNpb24gaXMg
Tm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBWZXJzaW9uTmFt
ZU1hcC5tYXAoc2VsZi5ob3N0LnBsYXRmb3JtKS50b19uYW1lKHNlbGYuX29zX3ZlcnNpb24sIHRh
YmxlPVBVQkxJQ19UQUJMRSkKIAogICAgIGRlZiBnZXRfb3B0aW9uKHNlbGYsIG5hbWUsIGRlZmF1
bHRfdmFsdWU9Tm9uZSk6CiAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX29wdGlvbnMsIG5h
bWUsIGRlZmF1bHRfdmFsdWUpCkBAIC0xMDcyLDcgKzEwNzYsNyBAQCBjbGFzcyBQb3J0KG9iamVj
dCk6CiAgICAgZGVmIHRlc3RfY29uZmlndXJhdGlvbihzZWxmKToKICAgICAgICAgIiIiUmV0dXJu
cyB0aGUgY3VycmVudCBUZXN0Q29uZmlndXJhdGlvbiBmb3IgdGhlIHBvcnQuIiIiCiAgICAgICAg
IGlmIG5vdCBzZWxmLl90ZXN0X2NvbmZpZ3VyYXRpb246Ci0gICAgICAgICAgICBzZWxmLl90ZXN0
X2NvbmZpZ3VyYXRpb24gPSBUZXN0Q29uZmlndXJhdGlvbihzZWxmLl92ZXJzaW9uLCBzZWxmLmFy
Y2hpdGVjdHVyZSgpLCBzZWxmLl9vcHRpb25zLmNvbmZpZ3VyYXRpb24ubG93ZXIoKSkKKyAgICAg
ICAgICAgIHNlbGYuX3Rlc3RfY29uZmlndXJhdGlvbiA9IFRlc3RDb25maWd1cmF0aW9uKHNlbGYu
dmVyc2lvbl9uYW1lKCksIHNlbGYuYXJjaGl0ZWN0dXJlKCksIHNlbGYuX29wdGlvbnMuY29uZmln
dXJhdGlvbi5sb3dlcigpKQogICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF9jb25maWd1cmF0aW9u
CiAKICAgICAjIEZJWE1FOiBCZWxvbmdzIG9uIGEgUGxhdGZvcm0gb2JqZWN0LgpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbl90ZXN0Y2FzZS5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5CShyZXZpc2lv
biAyMjU4NDMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNl
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBAIGZyb20gd2Via2l0cHkudG9vbC5t
b2NrdG9vbCBpbXBvcnQgTW9ja08KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lz
dGVtX21vY2sgaW1wb3J0IE1vY2tGaWxlU3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0uZXhlY3V0aXZlX21vY2sgaW1wb3J0IE1vY2tFeGVjdXRpdmUsIE1vY2tFeGVjdXRpdmUyLCBN
b2NrUHJvY2VzcywgU2NyaXB0RXJyb3IKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0
ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi52
ZXJzaW9uX25hbWVfbWFwIGltcG9ydCBWZXJzaW9uTmFtZU1hcAogCiAKIGNsYXNzIERhcndpblRl
c3QocG9ydF90ZXN0Y2FzZS5Qb3J0VGVzdENhc2UpOgpAQCAtNDEsNyArNDIsNyBAQCBjbGFzcyBE
YXJ3aW5UZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5tYWtlX3BvcnQob3B0aW9ucz1Nb2NrT3B0aW9ucyhndWFyZF9tYWxsb2M9VHJ1ZSkp
LmRlZmF1bHRfdGltZW91dF9tcygpLCAzNTAwMDApCiAKICAgICBkZWYgYXNzZXJ0X25hbWUoc2Vs
ZiwgcG9ydF9uYW1lLCBvc192ZXJzaW9uX3N0cmluZywgZXhwZWN0ZWQpOgotICAgICAgICBob3N0
ID0gTW9ja1N5c3RlbUhvc3Qob3NfbmFtZT1zZWxmLm9zX25hbWUsIG9zX3ZlcnNpb249b3NfdmVy
c2lvbl9zdHJpbmcpCisgICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdChvc19uYW1lPXNlbGYu
b3NfbmFtZSwgb3NfdmVyc2lvbj1WZXJzaW9uTmFtZU1hcC5tYXAoKS5mcm9tX25hbWUob3NfdmVy
c2lvbl9zdHJpbmcpWzFdKQogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoaG9zdD1ob3N0
LCBwb3J0X25hbWU9cG9ydF9uYW1lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVk
LCBwb3J0Lm5hbWUoKSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3Rv
cnlfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2ZhY3RvcnlfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIyNTg0MykKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9mYWN0b3J5X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwx
MSArMzEsMTEgQEAgaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0cHkudG9vbC5tb2NrdG9v
bCBpbXBvcnQgTW9ja09wdGlvbnMKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1o
b3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJz
aW9uIGltcG9ydCBWZXJzaW9uCiAKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgZmFjdG9yeQog
ZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBndGsKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQg
bWFjCi1mcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHRlc3QKIGZyb20gd2Via2l0cHkucG9ydCBp
bXBvcnQgd2luCiAKIApAQCAtNTUsMTUgKzU1LDE1IEBAIGNsYXNzIEZhY3RvcnlUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9tYWMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNz
ZXJ0X3BvcnQocG9ydF9uYW1lPSdtYWMtbGlvbicsIGNscz1tYWMuTWFjUG9ydCkKICAgICAgICAg
c2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9J21hYy1saW9uLXdrMicsIGNscz1tYWMuTWFjUG9y
dCkKLSAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9J21hYycsIG9zX25hbWU9J21h
YycsIG9zX3ZlcnNpb249J2xpb24nLCBjbHM9bWFjLk1hY1BvcnQpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0X3BvcnQocG9ydF9uYW1lPU5vbmUsICBvc19uYW1lPSdtYWMnLCBvc192ZXJzaW9uPSdsaW9u
JywgY2xzPW1hYy5NYWNQb3J0KQorICAgICAgICBzZWxmLmFzc2VydF9wb3J0KHBvcnRfbmFtZT0n
bWFjJywgb3NfbmFtZT0nbWFjJywgb3NfdmVyc2lvbj1WZXJzaW9uLmZyb21fbmFtZSgnTGlvbicp
LCBjbHM9bWFjLk1hY1BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPU5v
bmUsICBvc19uYW1lPSdtYWMnLCBvc192ZXJzaW9uPVZlcnNpb24uZnJvbV9uYW1lKCdMaW9uJyks
IGNscz1tYWMuTWFjUG9ydCkKIAogICAgIGRlZiB0ZXN0X3dpbihzZWxmKToKICAgICAgICAgc2Vs
Zi5hc3NlcnRfcG9ydChwb3J0X25hbWU9J3dpbi14cCcsIGNscz13aW4uV2luUG9ydCkKICAgICAg
ICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9J3dpbi14cC13azInLCBjbHM9d2luLldpblBv
cnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPSd3aW4nLCBvc19uYW1lPSd3
aW4nLCBvc192ZXJzaW9uPSd4cCcsIGNscz13aW4uV2luUG9ydCkKLSAgICAgICAgc2VsZi5hc3Nl
cnRfcG9ydChwb3J0X25hbWU9Tm9uZSwgb3NfbmFtZT0nd2luJywgb3NfdmVyc2lvbj0neHAnLCBj
bHM9d2luLldpblBvcnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPU5vbmUs
IG9zX25hbWU9J3dpbicsIG9zX3ZlcnNpb249J3hwJywgb3B0aW9ucz1zZWxmLndlYmtpdF9vcHRp
b25zLCBjbHM9d2luLldpblBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1l
PSd3aW4nLCBvc19uYW1lPSd3aW4nLCBvc192ZXJzaW9uPVZlcnNpb24uZnJvbV9uYW1lKCdYUCcp
LCBjbHM9d2luLldpblBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPU5v
bmUsIG9zX25hbWU9J3dpbicsIG9zX3ZlcnNpb249VmVyc2lvbi5mcm9tX25hbWUoJ1hQJyksIGNs
cz13aW4uV2luUG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRfcG9ydChwb3J0X25hbWU9Tm9uZSwg
b3NfbmFtZT0nd2luJywgb3NfdmVyc2lvbj1WZXJzaW9uLmZyb21fbmFtZSgnWFAnKSwgb3B0aW9u
cz1zZWxmLndlYmtpdF9vcHRpb25zLCBjbHM9d2luLldpblBvcnQpCiAKICAgICBkZWYgdGVzdF9n
dGsoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0X3BvcnQocG9ydF9uYW1lPSdndGsnLCBjbHM9
Z3RrLkd0a1BvcnQpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZ3RrLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkJKHJldmlzaW9u
IDIyNTg0MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9ndGsucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBjbGFzcyBHdGtQb3J0KFBvcnQpOgogICAgIGRlZiBf
Z2VuZXJhdGVfYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMoc2VsZik6CiAgICAgICAgIGNvbmZpZ3Vy
YXRpb25zID0gW10KICAgICAgICAgZm9yIGJ1aWxkX3R5cGUgaW4gc2VsZi5BTExfQlVJTERfVFlQ
RVM6Ci0gICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24o
dmVyc2lvbj1zZWxmLl92ZXJzaW9uLCBhcmNoaXRlY3R1cmU9J3g4NicsIGJ1aWxkX3R5cGU9YnVp
bGRfdHlwZSkpCisgICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3Vy
YXRpb24odmVyc2lvbj1zZWxmLnZlcnNpb25fbmFtZSgpLCBhcmNoaXRlY3R1cmU9J3g4NicsIGJ1
aWxkX3R5cGU9YnVpbGRfdHlwZSkpCiAgICAgICAgIHJldHVybiBjb25maWd1cmF0aW9ucwogCiAg
ICAgZGVmIF9wYXRoX3RvX2RyaXZlcihzZWxmKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2lvcy5weQkocmV2aXNpb24gMjI1ODQzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2lvcy5weQkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQCBpbXBvcnQgdHJhY2ViYWNr
CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAogZnJvbSB3
ZWJraXRweS5jb21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgorZnJvbSB3ZWJraXRweS5jb21t
b24udmVyc2lvbl9uYW1lX21hcCBpbXBvcnQgVmVyc2lvbk5hbWVNYXAKIGZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0IFRlc3RDb25maWd1
cmF0aW9uCiBmcm9tIHdlYmtpdHB5LnBvcnQuY29uZmlnIGltcG9ydCBhcHBsZV9hZGRpdGlvbnMK
IGZyb20gd2Via2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0IERhcndpblBvcnQKQEAgLTM2LDYgKzM3
LDkgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogY2xhc3MgSU9TUG9ydChE
YXJ3aW5Qb3J0KToKICAgICBwb3J0X25hbWUgPSAiaW9zIgogCisgICAgVkVSU0lPTl9NSU4gPSBW
ZXJzaW9uKDExKQorICAgIFZFUlNJT05fTUFYID0gVmVyc2lvbigxMikKKwogICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKToKICAgICAgICAgc3VwZXIoSU9T
UG9ydCwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKICAgICAgICAg
c2VsZi5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IFNpbXVsYXRvclByb2Nlc3MK
QEAgLTQ1LDYgKzQ5LDExIEBAIGNsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CiAgICAgZGVmIF9k
ZXZpY2VfZm9yX3dvcmtlcl9udW1iZXJfbWFwKHNlbGYpOgogICAgICAgICByYWlzZSBOb3RJbXBs
ZW1lbnRlZEVycm9yCiAKKyAgICBkZWYgdmVyc2lvbl9uYW1lKHNlbGYpOgorICAgICAgICBpZiBz
ZWxmLl9vc192ZXJzaW9uIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAg
ICByZXR1cm4gVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYuaG9zdC5wbGF0Zm9ybSkudG9fbmFtZShz
ZWxmLl9vc192ZXJzaW9uLCBwbGF0Zm9ybT1JT1NQb3J0LnBvcnRfbmFtZSkKKwogICAgIGRlZiBk
cml2ZXJfY21kX2xpbmVfZm9yX2xvZ2dpbmcoc2VsZik6CiAgICAgICAgICMgQXZvaWQgY3JlYXRp
bmcvY29ubmVjdGluZyB0byBkZXZpY2VzIGp1c3QgZm9yIGxvZ2dpbmcgdGhlIGNvbW1hbmRsaW5l
LgogICAgICAgICBzZWxmLl9wcmludGluZ19jbWRfbGluZSA9IFRydWUKQEAgLTYzLDcgKzcyLDcg
QEAgY2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgY29uZmlndXJhdGlvbnMgPSBb
XQogICAgICAgICBmb3IgYnVpbGRfdHlwZSBpbiBzZWxmLkFMTF9CVUlMRF9UWVBFUzoKICAgICAg
ICAgICAgIGZvciBhcmNoaXRlY3R1cmUgaW4gc2VsZi5BUkNISVRFQ1RVUkVTOgotICAgICAgICAg
ICAgICAgIGNvbmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJhdGlvbih2ZXJzaW9uPXNl
bGYuX3ZlcnNpb24sIGFyY2hpdGVjdHVyZT1hcmNoaXRlY3R1cmUsIGJ1aWxkX3R5cGU9YnVpbGRf
dHlwZSkpCisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMuYXBwZW5kKFRlc3RDb25maWd1
cmF0aW9uKHZlcnNpb249c2VsZi52ZXJzaW9uX25hbWUoKSwgYXJjaGl0ZWN0dXJlPWFyY2hpdGVj
dHVyZSwgYnVpbGRfdHlwZT1idWlsZF90eXBlKSkKICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRp
b25zCiAKICAgICBAbWVtb2l6ZWQKQEAgLTg4LDIyICs5Nyw2IEBAIGNsYXNzIElPU1BvcnQoRGFy
d2luUG9ydCk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fdGVzdGluZ19kZXZpY2Uod29ya2Vy
X251bWJlcikKICAgICAgICAgcmV0dXJuIHNlbGYuX2N1cnJlbnRfZGV2aWNlCiAKLSAgICBkZWYg
X2FwcGxlX2FkZGl0aW9uc19wYXRoKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBuYW1lID09ICd3
azInOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgc3BsaXRfbmFtZSA9IG5hbWUu
c3BsaXQoJy0nKQotICAgICAgICBvc19pbmRleCA9IC0xCi0gICAgICAgIGZvciBpIGluIHhyYW5n
ZSgyKToKLSAgICAgICAgICAgIGlmIHNwbGl0X25hbWVbb3NfaW5kZXhdID09ICd3azEnIG9yIHNw
bGl0X25hbWVbb3NfaW5kZXhdID09ICd3azInIG9yIHNwbGl0X25hbWVbb3NfaW5kZXhdID09ICdz
aW11bGF0b3InIG9yIHNwbGl0X25hbWVbb3NfaW5kZXhdID09ICdkZXZpY2UnOgotICAgICAgICAg
ICAgICAgIG9zX2luZGV4IC09IDEKLSAgICAgICAgaWYgc3BsaXRfbmFtZVtvc19pbmRleF0gIT0g
c3BsaXRfbmFtZVswXToKLSAgICAgICAgICAgIG9zX25hbWUgPSBhcHBsZV9hZGRpdGlvbnMoKS5p
b3Nfb3NfbmFtZShzcGxpdF9uYW1lW29zX2luZGV4XSkKLSAgICAgICAgICAgIGlmIG5vdCBvc19u
YW1lOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICBzcGxpdF9uYW1l
W29zX2luZGV4XSA9IG9zX25hbWUKLSAgICAgICAgbmFtZSA9ICctJy5qb2luKHNwbGl0X25hbWUp
Ci0gICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4oYXBwbGVfYWRkaXRpb25zKCku
bGF5b3V0X3Rlc3RzX3BhdGgoKSwgbmFtZSkKLQogICAgIEBtZW1vaXplZAogICAgIGRlZiBkZWZh
dWx0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgogICAgICAgICB3a19zdHJpbmcgPSAnd2sx
JwpAQCAtMTExLDMwICsxMDQsNDIgQEAgY2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICAg
ICAgICAgIHdrX3N0cmluZyA9ICd3azInCiAgICAgICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBhIHNw
ZWNpZmllZCB2ZXJzaW9uLCB0aGF0IG1lYW5zIHdlIHVzaW5nIHRoZSBwb3J0IHdpdGhvdXQgYW4g
U0RLLgogICAgICAgICAjIFRoaXMgdXN1YWxseSBtZWFucyB3ZSdyZSBkb2luZyBzb21lIHR5cGUg
b2YgdGVzdGluZy5JbiB0aGlzIGNhc2UsIGRvbid0IGFkZCB2ZXJzaW9uIGZhbGxiYWNrcwotICAg
ICAgICBmYWxsYmFja19uYW1lcyA9IFtdCisgICAgICAgIGV4cGVjdGF0aW9ucyA9IFtdCisgICAg
ICAgIGlmIGFwcGxlX2FkZGl0aW9ucygpIGFuZCBzZWxmLmlvc192ZXJzaW9uKCk6CisgICAgICAg
ICAgICBhcHBsZV9uYW1lID0gVmVyc2lvbk5hbWVNYXAubWFwKHNlbGYuaG9zdC5wbGF0Zm9ybSku
dG9fbmFtZShzZWxmLmlvc192ZXJzaW9uKCksIHBsYXRmb3JtPUlPU1BvcnQucG9ydF9uYW1lLCB0
YWJsZT0naW50ZXJuYWwnKS5sb3dlcigpLnJlcGxhY2UoJyAnLCAnJykKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIGFwcGxlX25hbWUgPSBOb25lCiAgICAgICAgIGlmIHNlbGYuaW9zX3ZlcnNp
b24oKToKLSAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzLmFwcGVuZCgne30te30te30nLmZvcm1h
dChzZWxmLnBvcnRfbmFtZSwgc2VsZi5pb3NfdmVyc2lvbigpLm1ham9yLCB3a19zdHJpbmcpKQot
ICAgICAgICAgICAgZmFsbGJhY2tfbmFtZXMuYXBwZW5kKCd7fS17fScuZm9ybWF0KHNlbGYucG9y
dF9uYW1lLCBzZWxmLmlvc192ZXJzaW9uKCkubWFqb3IpKQotICAgICAgICBmYWxsYmFja19uYW1l
cy5hcHBlbmQoJ3t9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIHdrX3N0cmluZykpCi0gICAg
ICAgIGZhbGxiYWNrX25hbWVzLmFwcGVuZChzZWxmLnBvcnRfbmFtZSkKKyAgICAgICAgICAgIGlm
IGFwcGxlX25hbWU6CisgICAgICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl9h
cHBsZV9iYXNlbGluZV9wYXRoKCd7fS17fS17fScuZm9ybWF0KHNlbGYucG9ydF9uYW1lLCBhcHBs
ZV9uYW1lLCB3a19zdHJpbmcpKSkKKyAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2Vs
Zi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3t9LXt9LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUs
IHNlbGYuaW9zX3ZlcnNpb24oKS5tYWpvciwgd2tfc3RyaW5nKSkpCisgICAgICAgICAgICBpZiBh
cHBsZV9uYW1lOgorICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fYXBw
bGVfYmFzZWxpbmVfcGF0aCgne30te30nLmZvcm1hdChzZWxmLnBvcnRfbmFtZSwgYXBwbGVfbmFt
ZSkpKQorICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl93ZWJraXRfYmFzZWxp
bmVfcGF0aCgne30te30nLmZvcm1hdChzZWxmLnBvcnRfbmFtZSwgc2VsZi5pb3NfdmVyc2lvbigp
Lm1ham9yKSkpCisKKyAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCk6CisgICAgICAgICAgICBl
eHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3BhdGgoJ3t9LXt9Jy5mb3Jt
YXQoc2VsZi5wb3J0X25hbWUsIHdrX3N0cmluZykpKQorICAgICAgICBleHBlY3RhdGlvbnMuYXBw
ZW5kKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKCd7fS17fScuZm9ybWF0KHNlbGYucG9ydF9u
YW1lLCB3a19zdHJpbmcpKSkKKyAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCk6CisgICAgICAg
ICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3BhdGgoc2VsZi5w
b3J0X25hbWUpKQorICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX3dlYmtpdF9iYXNl
bGluZV9wYXRoKHNlbGYucG9ydF9uYW1lKSkKKwogICAgICAgICBpZiBzZWxmLmlvc192ZXJzaW9u
KCk6Ci0gICAgICAgICAgICBmYWxsYmFja19uYW1lcy5hcHBlbmQoJ3t9LXt9Jy5mb3JtYXQoSU9T
UG9ydC5wb3J0X25hbWUsIHNlbGYuaW9zX3ZlcnNpb24oKS5tYWpvcikpCi0gICAgICAgIGZhbGxi
YWNrX25hbWVzLmFwcGVuZCgne30te30nLmZvcm1hdChJT1NQb3J0LnBvcnRfbmFtZSwgd2tfc3Ry
aW5nKSkKLSAgICAgICAgZmFsbGJhY2tfbmFtZXMuYXBwZW5kKElPU1BvcnQucG9ydF9uYW1lKQor
ICAgICAgICAgICAgaWYgYXBwbGVfbmFtZToKKyAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnMu
YXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3BhdGgoJ3t9LXt9Jy5mb3JtYXQoSU9TUG9ydC5w
b3J0X25hbWUsIGFwcGxlX25hbWUpKSkKKyAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQo
c2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3t9LXt9Jy5mb3JtYXQoSU9TUG9ydC5wb3J0X25h
bWUsIHNlbGYuaW9zX3ZlcnNpb24oKS5tYWpvcikpKQorCisgICAgICAgIGlmIGFwcGxlX2FkZGl0
aW9ucygpOgorICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl9hcHBsZV9iYXNl
bGluZV9wYXRoKCd7fS17fScuZm9ybWF0KElPU1BvcnQucG9ydF9uYW1lLCB3a19zdHJpbmcpKSkK
KyAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCgn
e30te30nLmZvcm1hdChJT1NQb3J0LnBvcnRfbmFtZSwgd2tfc3RyaW5nKSkpCisgICAgICAgIGlm
IGFwcGxlX2FkZGl0aW9ucygpOgorICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxm
Ll9hcHBsZV9iYXNlbGluZV9wYXRoKElPU1BvcnQucG9ydF9uYW1lKSkKKyAgICAgICAgZXhwZWN0
YXRpb25zLmFwcGVuZChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aChJT1NQb3J0LnBvcnRfbmFt
ZSkpCiAKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXInKToK
LSAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzLmFwcGVuZCgnd2syJykKKyAgICAgICAgICAgIGV4
cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoJ3drMicpKQogCi0g
ICAgICAgIHdlYmtpdF9leHBlY3RhdGlvbnMgPSBtYXAoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3Bh
dGgsIGZhbGxiYWNrX25hbWVzKQotICAgICAgICBpZiBhcHBsZV9hZGRpdGlvbnMoKSBhbmQgZ2V0
YXR0cihhcHBsZV9hZGRpdGlvbnMoKSwgImxheW91dF90ZXN0c19wYXRoIiwgTm9uZSk6Ci0gICAg
ICAgICAgICBhcHBsZV9leHBlY3RhdGlvbnMgPSBtYXAoc2VsZi5fYXBwbGVfYWRkaXRpb25zX3Bh
dGgsIGZhbGxiYWNrX25hbWVzKQotICAgICAgICAgICAgcmVzdWx0ID0gW10KLSAgICAgICAgICAg
IGZvciBpIGluIHhyYW5nZShsZW4od2Via2l0X2V4cGVjdGF0aW9ucykpOgotICAgICAgICAgICAg
ICAgIGlmIGFwcGxlX2V4cGVjdGF0aW9uc1tpXToKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChhcHBsZV9leHBlY3RhdGlvbnNbaV0pCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCh3ZWJraXRfZXhwZWN0YXRpb25zW2ldKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAot
ICAgICAgICByZXR1cm4gd2Via2l0X2V4cGVjdGF0aW9ucworICAgICAgICByZXR1cm4gZXhwZWN0
YXRpb25zCiAKICAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnNfZmlsZV9wb3NpdGlvbihzZWxmKToK
ICAgICAgICAgcmV0dXJuIDQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nf
ZGV2aWNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nf
ZGV2aWNlLnB5CShyZXZpc2lvbiAyMjU4NDMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zX2RldmljZS5weQkod29ya2luZyBjb3B5KQpAQCAtMTA5LDkgKzEwOSw3IEBAIGNsYXNz
IElPU0RldmljZVBvcnQoSU9TUG9ydCk6CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAg
ICAgIGlmIGRldmljZS5wbGF0Zm9ybS5vc192ZXJzaW9uICE9IHZlcnNpb246CiAgICAgICAgICAg
ICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTXVsdGlwbGUgY29ubmVjdGVkIGRldmljZXMg
aGF2ZSBkaWZmZXJlbnQgaU9TIHZlcnNpb25zJykKLSAgICAgICAgaWYgdmVyc2lvbjoKLSAgICAg
ICAgICAgIHJldHVybiBWZXJzaW9uTmFtZU1hcC5tYXAoc2VsZi5ob3N0LnBsYXRmb3JtKS5mcm9t
X25hbWUodmVyc2lvbilbMV0KLSAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHZl
cnNpb24KIAogICAgICMgRklYTUU6IFRoZXNlIG5lZWQgZGV2aWNlIGltcGxlbWVudGF0aW9ucyA8
cmRhcjovL3Byb2JsZW0vMzA0OTc5OTE+LgogICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwg
cHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZV91bml0dGVzdC5weQkocmV2aXNpb24gMjI1ODQzKQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2VfdW5pdHRlc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwxMCBAQCBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0
IHBvcnRfdGVzdGNhc2UKIAogY2xhc3MgSU9TRGV2aWNlVGVzdChpb3NfdGVzdGNhc2UuSU9TVGVz
dCk6CiAgICAgb3NfbmFtZSA9ICdpb3MnCi0gICAgb3NfdmVyc2lvbiA9ICcnCisgICAgb3NfdmVy
c2lvbiA9IE5vbmUKICAgICBwb3J0X25hbWUgPSAnaW9zLWRldmljZScKICAgICBwb3J0X21ha2Vy
ID0gSU9TRGV2aWNlUG9ydAogCi0gICAgZGVmIG1ha2VfcG9ydChzZWxmLCBob3N0PU5vbmUsIHBv
cnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUsIG9zX25hbWU9Tm9uZSwgb3NfdmVyc2lvbj1Ob25l
LCAqKmt3YXJncyk6Ci0gICAgICAgIHBvcnQgPSBzdXBlcihJT1NEZXZpY2VUZXN0LCBzZWxmKS5t
YWtlX3BvcnQoaG9zdD1ob3N0LCBwb3J0X25hbWU9cG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMs
IG9zX25hbWU9b3NfbmFtZSwgc192ZXJzaW9uPW9zX3ZlcnNpb24sIGt3YXJncz1rd2FyZ3MpCi0g
ICAgICAgIHBvcnQuc2V0X29wdGlvbigndmVyc2lvbicsICcxMS4wJykKLSAgICAgICAgcmV0dXJu
IHBvcnQKLQogICAgIGRlZiB0ZXN0X29wZXJhdGluZ19zeXN0ZW0oc2VsZik6CiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJ2lvcy1kZXZpY2UnLCBzZWxmLm1ha2VfcG9ydCgpLm9wZXJhdGluZ19z
eXN0ZW0oKSkKIApAQCAtOTMsMTUgKzg4LDE1IEBAIGNsYXNzIElPU0RldmljZVRlc3QoaW9zX3Rl
c3RjYXNlLklPU1Rlc3QKICAgICBkZWYgdGVzdF9sYXlvdXRfdGVzdF9zZWFyY2hwYXRoX3dpdGhf
YXBwbGVfYWRkaXRpb25zKHNlbGYpOgogICAgICAgICB3aXRoIHBvcnRfdGVzdGNhc2UuYmluZF9t
b2NrX2FwcGxlX2FkZGl0aW9ucygpOgogICAgICAgICAgICAgc2VhcmNoX3BhdGggPSBzZWxmLm1h
a2VfcG9ydCgpLmRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlYXJjaF9wYXRoWzBdLCAnL2FkZGl0aW9uYWxfdGVzdGluZ19wYXRoL2lvcy1k
ZXZpY2UtYWRkLTExLXdrMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhb
MF0sICcvYWRkaXRpb25hbF90ZXN0aW5nX3BhdGgvaW9zLWRldmljZS1hZGQtaW9zMTEtd2sxJykK
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFsxXSwgJy9tb2NrLWNoZWNrb3V0
L0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy1kZXZpY2UtMTEtd2sxJykKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzZWFyY2hfcGF0aFsyXSwgJy9hZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3Mt
ZGV2aWNlLWFkZC0xMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbMl0s
ICcvYWRkaXRpb25hbF90ZXN0aW5nX3BhdGgvaW9zLWRldmljZS1hZGQtaW9zMTEnKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzNdLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vaW9zLWRldmljZS0xMScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VhcmNoX3BhdGhbNF0sICcvYWRkaXRpb25hbF90ZXN0aW5nX3BhdGgvaW9zLWRldmljZS13azEn
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzVdLCAnL21vY2stY2hlY2tv
dXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLWRldmljZS13azEnKQogICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlYXJjaF9wYXRoWzZdLCAnL2FkZGl0aW9uYWxfdGVzdGluZ19wYXRoL2lvcy1k
ZXZpY2UnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzddLCAnL21vY2st
Y2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLWRldmljZScpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbOF0sICcvYWRkaXRpb25hbF90ZXN0aW5nX3BhdGgvaW9z
LWFkZC0xMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbOF0sICcvYWRk
aXRpb25hbF90ZXN0aW5nX3BhdGgvaW9zLWFkZC1pb3MxMScpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2VhcmNoX3BhdGhbOV0sICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9pb3MtMTEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzEwXSwgJy9h
ZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3Mtd2sxJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWFyY2hfcGF0aFsxMV0sICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9p
b3Mtd2sxJykKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9y
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxh
dG9yLnB5CShyZXZpc2lvbiAyMjU4NDMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
aW9zX3NpbXVsYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDcgKzI0Niw3IEBAIGNsYXNz
IElPU1NpbXVsYXRvclBvcnQoSU9TUG9ydCk6CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAg
ICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcsICdi
b290JywgZGV2aWNlX3VkaWRdKQogCi0gICAgICAgICAgICBpZiBtYWNfb3NfdmVyc2lvbiBpbiBb
J2VsY2FwaXRhbicsICd5b3NlbWl0ZScsICdtYXZlcmlja3MnXToKKyAgICAgICAgICAgIGlmIG1h
Y19vc192ZXJzaW9uIDwgVmVyc2lvbi5mcm9tX25hbWUoJ1NpZXJyYScpOgogICAgICAgICAgICAg
ICAgIHRpbWUuc2xlZXAoMi41KQogCiAgICAgICAgIGlmIG5vdCBzZWxmLnVzZV9tdWx0aXBsZV9z
aW11bGF0b3JfYXBwcygpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19z
aW11bGF0b3JfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2lvc19zaW11bGF0b3JfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIyNTg0MykKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yX3VuaXR0ZXN0LnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCwxMiArMjAsMTEgQEAKICMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KIAotaW1wb3J0IHRpbWUKLQogZnJvbSB3ZWJraXRweS5wb3J0Lmlvc19zaW11
bGF0b3IgaW1wb3J0IElPU1NpbXVsYXRvclBvcnQKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQg
aW9zX3Rlc3RjYXNlCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UKIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0
dXJlCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCiBmcm9tIHdl
YmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0uZXhlY3V0aXZlX21vY2sgaW1wb3J0IE1vY2tFeGVjdXRpdmUyLCBTY3JpcHRF
cnJvcgogCkBAIC0zMywxMiArMzIsMTIgQEAgZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4
ZWN1dGl2ZV9tbwogY2xhc3MgSU9TU2ltdWxhdG9yVGVzdChpb3NfdGVzdGNhc2UuSU9TVGVzdCk6
CiAgICAgIyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MzEwNwogICAgIG9zX25hbWUgPSAnbWFjJwotICAgIG9zX3ZlcnNpb24gPSAnJworICAgIG9zX3Zl
cnNpb24gPSBOb25lCiAgICAgcG9ydF9uYW1lID0gJ2lvcy1zaW11bGF0b3InCiAgICAgcG9ydF9t
YWtlciA9IElPU1NpbXVsYXRvclBvcnQKIAotICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgaG9zdD1O
b25lLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lLCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNp
b249Tm9uZSwgKiprd2FyZ3MpOgotICAgICAgICBwb3J0ID0gc3VwZXIoSU9TU2ltdWxhdG9yVGVz
dCwgc2VsZikubWFrZV9wb3J0KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9u
cz1vcHRpb25zLCBvc19uYW1lPW9zX25hbWUsIHNfdmVyc2lvbj1vc192ZXJzaW9uLCBrd2FyZ3M9
a3dhcmdzKQorICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0X25hbWU9Tm9u
ZSwgb3B0aW9ucz1Ob25lLCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNpb249VmVyc2lvbigxMSksICoq
a3dhcmdzKToKKyAgICAgICAgcG9ydCA9IHN1cGVyKElPU1NpbXVsYXRvclRlc3QsIHNlbGYpLm1h
a2VfcG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucywg
b3NfbmFtZT1vc19uYW1lLCBvc192ZXJzaW9uPW9zX3ZlcnNpb24sIGt3YXJncz1rd2FyZ3MpCiAg
ICAgICAgIHBvcnQuc2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJywgMSkKICAgICAgICAgcmV0
dXJuIHBvcnQKIApAQCAtOTIsMTUgKzkxLDE1IEBAIGNsYXNzIElPU1NpbXVsYXRvclRlc3QoaW9z
X3Rlc3RjYXNlLklPU1QKICAgICBkZWYgdGVzdF9sYXlvdXRfdGVzdF9zZWFyY2hwYXRoX3dpdGhf
YXBwbGVfYWRkaXRpb25zKHNlbGYpOgogICAgICAgICB3aXRoIHBvcnRfdGVzdGNhc2UuYmluZF9t
b2NrX2FwcGxlX2FkZGl0aW9ucygpOgogICAgICAgICAgICAgc2VhcmNoX3BhdGggPSBzZWxmLm1h
a2VfcG9ydCgpLmRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlYXJjaF9wYXRoWzBdLCAnL2FkZGl0aW9uYWxfdGVzdGluZ19wYXRoL2lvcy1z
aW11bGF0b3ItYWRkLTgtd2sxJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0
aFsxXSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3It
OC13azEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzJdLCAnL2FkZGl0
aW9uYWxfdGVzdGluZ19wYXRoL2lvcy1zaW11bGF0b3ItYWRkLTgnKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlYXJjaF9wYXRoWzNdLCAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vaW9zLXNpbXVsYXRvci04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hf
cGF0aFswXSwgJy9hZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3Mtc2ltdWxhdG9yLWFkZC1pb3Mx
MS13azEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzFdLCAnL21vY2st
Y2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLXNpbXVsYXRvci0xMS13azEnKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzJdLCAnL2FkZGl0aW9uYWxfdGVzdGlu
Z19wYXRoL2lvcy1zaW11bGF0b3ItYWRkLWlvczExJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWFyY2hfcGF0aFszXSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2lv
cy1zaW11bGF0b3ItMTEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlYXJjaF9wYXRoWzRd
LCAnL2FkZGl0aW9uYWxfdGVzdGluZ19wYXRoL2lvcy1zaW11bGF0b3Itd2sxJykKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFs1XSwgJy9tb2NrLWNoZWNrb3V0L0xheW91dFRl
c3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3Itd2sxJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWFyY2hfcGF0aFs2XSwgJy9hZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3Mtc2ltdWxhdG9y
JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFs3XSwgJy9tb2NrLWNoZWNr
b3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3InKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlYXJjaF9wYXRoWzhdLCAnL2FkZGl0aW9uYWxfdGVzdGluZ19wYXRoL2lvcy1h
ZGQtOCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbOV0sICcvbW9jay1j
aGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc2VhcmNoX3BhdGhbOF0sICcvYWRkaXRpb25hbF90ZXN0aW5nX3BhdGgvaW9zLWFkZC1p
b3MxMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VhcmNoX3BhdGhbOV0sICcvbW9jay1j
aGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MtMTEnKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlYXJjaF9wYXRoWzEwXSwgJy9hZGRpdGlvbmFsX3Rlc3RpbmdfcGF0aC9pb3Mtd2sx
JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWFyY2hfcGF0aFsxMV0sICcvbW9jay1jaGVj
a291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3Mtd2sxJykKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9pb3NfdGVzdGNhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2lvc190ZXN0Y2FzZS5weQkocmV2aXNpb24gMjI1ODQzKQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc190ZXN0Y2FzZS5weQkod29ya2luZyBjb3B5KQpA
QCAtMjAsMTMgKzIwLDE4IEBACiAjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAKK2Zyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KIGZyb20gd2Vi
a2l0cHkucG9ydCBpbXBvcnQgZGFyd2luX3Rlc3RjYXNlCi1mcm9tIHdlYmtpdHB5LnRvb2wubW9j
a3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zCiAKIAogY2xhc3MgSU9TVGVzdChkYXJ3aW5fdGVzdGNh
c2UuRGFyd2luVGVzdCk6CiAgICAgZGlzYWJsZV9zZXR1cCA9IFRydWUKIAorICAgIGRlZiBtYWtl
X3BvcnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lLCBvc19u
YW1lPU5vbmUsIG9zX3ZlcnNpb249VmVyc2lvbigxMSksICoqa3dhcmdzKToKKyAgICAgICAgcG9y
dCA9IHN1cGVyKElPU1Rlc3QsIHNlbGYpLm1ha2VfcG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1w
b3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3NfbmFtZT1vc19uYW1lLCBvc192ZXJzaW9uPU5v
bmUsIGt3YXJncz1rd2FyZ3MpCisgICAgICAgIHBvcnQuc2V0X29wdGlvbigndmVyc2lvbicsIHN0
cihvc192ZXJzaW9uKSkKKyAgICAgICAgcmV0dXJuIHBvcnQKKwogICAgIGRlZiB0ZXN0X2RyaXZl
cl9uYW1lKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9wb3J0KCku
ZHJpdmVyX25hbWUoKSwgJ0R1bXBSZW5kZXJUcmVlLmFwcCcpCiAKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9tYWMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L21hYy5weQkocmV2aXNpb24gMjI1ODQzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L21hYy5weQkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDEyIEBACiAKIGlt
cG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKLWltcG9ydCB0aW1lCiBpbXBvcnQgcmUKIAogZnJvbSB3
ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRweS5j
b21tb24udmVyc2lvbiBpbXBvcnQgVmVyc2lvbgorZnJvbSB3ZWJraXRweS5jb21tb24udmVyc2lv
bl9uYW1lX21hcCBpbXBvcnQgVmVyc2lvbk5hbWVNYXAKIGZyb20gd2Via2l0cHkucG9ydC5jb25m
aWcgaW1wb3J0IGFwcGxlX2FkZGl0aW9ucwogZnJvbSB3ZWJraXRweS5wb3J0LmRhcndpbiBpbXBv
cnQgRGFyd2luUG9ydAogCkBAIC00Myw3ICs0NCw5IEBAIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cihfX25hbWVfXykKIGNsYXNzIE1hY1BvcnQoRGFyd2luUG9ydCk6CiAgICAgcG9ydF9uYW1lID0g
Im1hYyIKIAotICAgIFZFUlNJT05fRkFMTEJBQ0tfT1JERVIgPSBbJ21hYy1zbm93bGVvcGFyZCcs
ICdtYWMtbGlvbicsICdtYWMtbW91bnRhaW5saW9uJywgJ21hYy1tYXZlcmlja3MnLCAnbWFjLXlv
c2VtaXRlJywgJ21hYy1lbGNhcGl0YW4nLCAnbWFjLXNpZXJyYScsICdtYWMtaGlnaHNpZXJyYSdd
CisgICAgVkVSU0lPTl9NSU4gPSBWZXJzaW9uKDEwLCA2KQorICAgIFZFUlNJT05fTUFYID0gVmVy
c2lvbigxMCwgMTQpCisKICAgICBTREsgPSAnbWFjb3N4JwogCiAgICAgQVJDSElURUNUVVJFUyA9
IFsneDg2XzY0JywgJ3g4NiddCkBAIC01Miw2NiArNTUsNjIgQEAgY2xhc3MgTWFjUG9ydChEYXJ3
aW5Qb3J0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dh
cmdzKToKICAgICAgICAgRGFyd2luUG9ydC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUs
ICoqa3dhcmdzKQotICAgICAgICBzZWxmLl9vc192ZXJzaW9uID0gcG9ydF9uYW1lLnNwbGl0KCct
JylbMV0gaWYgcG9ydF9uYW1lLnNwbGl0KCctJykgPiAxIGVsc2Ugc2VsZi5ob3N0LnBsYXRmb3Jt
Lm9zX3ZlcnNpb24KKyAgICAgICAgaWYgcG9ydF9uYW1lLnNwbGl0KCctJykgPiAxOgorICAgICAg
ICAgICAgc2VsZi5fb3NfdmVyc2lvbiA9IFZlcnNpb25OYW1lTWFwLm1hcChob3N0LnBsYXRmb3Jt
KS5mcm9tX25hbWUocG9ydF9uYW1lLnNwbGl0KCctJylbMV0pWzFdCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBzZWxmLl9vc192ZXJzaW9uID0gc2VsZi5ob3N0LnBsYXRmb3JtLm9zX3ZlcnNp
b24KIAogICAgIGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdzKHNlbGYpOgogICAgICAgICByZXR1cm4g
WydBUkNIUz1pMzg2J10gaWYgc2VsZi5hcmNoaXRlY3R1cmUoKSA9PSAneDg2JyBlbHNlIFtdCiAK
LSAgICBkZWYgX2FwcGxlX2FkZGl0aW9uc19wYXRoKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBu
YW1lID09ICd3azInOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgc3BsaXRfbmFt
ZSA9IG5hbWUuc3BsaXQoJy0nKQotICAgICAgICBvc19pbmRleCA9IC0xCi0gICAgICAgIGlmIHNw
bGl0X25hbWVbLTFdID09ICd3azEnIG9yIHNwbGl0X25hbWVbLTFdID09ICd3azInOgotICAgICAg
ICAgICAgb3NfaW5kZXggPSAtMgotICAgICAgICBpZiBzcGxpdF9uYW1lW29zX2luZGV4XSAhPSBz
cGxpdF9uYW1lWzBdOgotICAgICAgICAgICAgb3NfbmFtZSA9IGFwcGxlX2FkZGl0aW9ucygpLm1h
Y19vc19uYW1lKHNwbGl0X25hbWVbb3NfaW5kZXhdKQotICAgICAgICAgICAgaWYgbm90IG9zX25h
bWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIHNwbGl0X25hbWVb
b3NfaW5kZXhdID0gb3NfbmFtZQotICAgICAgICBuYW1lID0gJy0nLmpvaW4oc3BsaXRfbmFtZSkK
LSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihhcHBsZV9hZGRpdGlvbnMoKS5s
YXlvdXRfdGVzdHNfcGF0aCgpLCBuYW1lKQotCiAgICAgQG1lbW9pemVkCiAgICAgZGVmIGRlZmF1
bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6Ci0gICAgICAgIG1hY192ZXJzaW9uID0gJ21h
Yy17fScuZm9ybWF0KHNlbGYuX29zX3ZlcnNpb24pCi0gICAgICAgIGlmIG1hY192ZXJzaW9uLmVu
ZHN3aXRoKHNlbGYuRlVUVVJFX1ZFUlNJT04pIG9yIG1hY192ZXJzaW9uIG5vdCBpbiBzZWxmLlZF
UlNJT05fRkFMTEJBQ0tfT1JERVI6Ci0gICAgICAgICAgICB2ZXJzaW9uX2ZhbGxiYWNrID0gW21h
Y192ZXJzaW9uXQorICAgICAgICB2ZXJzaW9uX25hbWVfbWFwID0gVmVyc2lvbk5hbWVNYXAubWFw
KHNlbGYuaG9zdC5wbGF0Zm9ybSkKKyAgICAgICAgaWYgc2VsZi5fb3NfdmVyc2lvbiA8IHNlbGYu
VkVSU0lPTl9NSU4gb3Igc2VsZi5fb3NfdmVyc2lvbiA+IHNlbGYuVkVSU0lPTl9NQVg6CisgICAg
ICAgICAgICB2ZXJzaW9uX2ZhbGxiYWNrID0gW3NlbGYuX29zX3ZlcnNpb25dCiAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICB2ZXJzaW9uX2ZhbGxiYWNrID0gc2VsZi5WRVJTSU9OX0ZBTExCQUNL
X09SREVSW3NlbGYuVkVSU0lPTl9GQUxMQkFDS19PUkRFUi5pbmRleChtYWNfdmVyc2lvbik6LTFd
CisgICAgICAgICAgICBzb3J0ZWRfdmVyc2lvbnMgPSBzb3J0ZWQodmVyc2lvbl9uYW1lX21hcC5t
YXBwaW5nX2Zvcl9wbGF0Zm9ybSgpLnZhbHVlcygpKQorICAgICAgICAgICAgdmVyc2lvbl9mYWxs
YmFjayA9IHNvcnRlZF92ZXJzaW9uc1tzb3J0ZWRfdmVyc2lvbnMuaW5kZXgoc2VsZi5fb3NfdmVy
c2lvbik6LTFdCiAgICAgICAgIHdrX3N0cmluZyA9ICd3azEnCiAgICAgICAgIGlmIHNlbGYuZ2V0
X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6CiAgICAgICAgICAgICB3a19zdHJpbmcgPSAn
d2syJwogCi0gICAgICAgIGZhbGxiYWNrX25hbWVzID0gW10KKyAgICAgICAgZXhwZWN0YXRpb25z
ID0gW10KICAgICAgICAgZm9yIHZlcnNpb24gaW4gdmVyc2lvbl9mYWxsYmFjazoKLSAgICAgICAg
ICAgIGZhbGxiYWNrX25hbWVzLmFwcGVuZCgne30te30nLmZvcm1hdCh2ZXJzaW9uLCB3a19zdHJp
bmcpKQotICAgICAgICAgICAgZmFsbGJhY2tfbmFtZXMuYXBwZW5kKHZlcnNpb24pCi0gICAgICAg
IGZhbGxiYWNrX25hbWVzID0gZmFsbGJhY2tfbmFtZXMgKyBbCi0gICAgICAgICAgICAne30te30n
LmZvcm1hdChzZWxmLnBvcnRfbmFtZSwgd2tfc3RyaW5nKSwKLSAgICAgICAgICAgIHNlbGYucG9y
dF9uYW1lLAotICAgICAgICBdCi0gICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rl
c3RfcnVubmVyJyk6Ci0gICAgICAgICAgICBmYWxsYmFja19uYW1lcy5hcHBlbmQoJ3drMicpCisg
ICAgICAgICAgICB2ZXJzaW9uX25hbWUgPSB2ZXJzaW9uX25hbWVfbWFwLnRvX25hbWUodmVyc2lv
bikubG93ZXIoKS5yZXBsYWNlKCcgJywgJycpCisgICAgICAgICAgICBpZiBhcHBsZV9hZGRpdGlv
bnMoKToKKyAgICAgICAgICAgICAgICBhcHBsZV9uYW1lID0gdmVyc2lvbl9uYW1lX21hcC50b19u
YW1lKHZlcnNpb24sIHRhYmxlPSdpbnRlcm5hbCcpCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIGFwcGxlX25hbWUgPSBOb25lCisgICAgICAgICAgICBpZiBhcHBsZV9uYW1lOgor
ICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5hcHBlbmQoc2VsZi5fYXBwbGVfYmFzZWxpbmVf
cGF0aCgnbWFjLXt9LXt9Jy5mb3JtYXQoYXBwbGVfbmFtZS5sb3dlcigpLnJlcGxhY2UoJyAnLCAn
JyksIHdrX3N0cmluZykpKQorICAgICAgICAgICAgZXhwZWN0YXRpb25zLmFwcGVuZChzZWxmLl93
ZWJraXRfYmFzZWxpbmVfcGF0aCgnbWFjLXt9LXt9Jy5mb3JtYXQodmVyc2lvbl9uYW1lLCB3a19z
dHJpbmcpKSkKKyAgICAgICAgICAgIGlmIGFwcGxlX25hbWU6CisgICAgICAgICAgICAgICAgZXhw
ZWN0YXRpb25zLmFwcGVuZChzZWxmLl9hcHBsZV9iYXNlbGluZV9wYXRoKCdtYWMte30nLmZvcm1h
dChhcHBsZV9uYW1lLmxvd2VyKCkucmVwbGFjZSgnICcsICcnKSkpKQorICAgICAgICAgICAgZXhw
ZWN0YXRpb25zLmFwcGVuZChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCgnbWFjLXt9Jy5mb3Jt
YXQodmVyc2lvbl9uYW1lKSkpCisKKyAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCk6CisgICAg
ICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3BhdGgoJ3t9
LXt9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUsIHdrX3N0cmluZykpKQorICAgICAgICBleHBlY3Rh
dGlvbnMuYXBwZW5kKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKCd7fS17fScuZm9ybWF0KHNl
bGYucG9ydF9uYW1lLCB3a19zdHJpbmcpKSkKKyAgICAgICAgaWYgYXBwbGVfYWRkaXRpb25zKCk6
CisgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5kKHNlbGYuX2FwcGxlX2Jhc2VsaW5lX3Bh
dGgoJ3t9Jy5mb3JtYXQoc2VsZi5wb3J0X25hbWUpKSkKKyAgICAgICAgZXhwZWN0YXRpb25zLmFw
cGVuZChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aChzZWxmLnBvcnRfbmFtZSkpCiAKLSAgICAg
ICAgd2Via2l0X2V4cGVjdGF0aW9ucyA9IG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwg
ZmFsbGJhY2tfbmFtZXMpCi0gICAgICAgIGlmIGFwcGxlX2FkZGl0aW9ucygpIGFuZCBnZXRhdHRy
KGFwcGxlX2FkZGl0aW9ucygpLCAibGF5b3V0X3Rlc3RzX3BhdGgiLCBOb25lKToKLSAgICAgICAg
ICAgIGFwcGxlX2V4cGVjdGF0aW9ucyA9IG1hcChzZWxmLl9hcHBsZV9hZGRpdGlvbnNfcGF0aCwg
ZmFsbGJhY2tfbmFtZXMpCi0gICAgICAgICAgICByZXN1bHQgPSBbXQotICAgICAgICAgICAgZm9y
IGkgaW4geHJhbmdlKGxlbih3ZWJraXRfZXhwZWN0YXRpb25zKSk6Ci0gICAgICAgICAgICAgICAg
aWYgYXBwbGVfZXhwZWN0YXRpb25zW2ldOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKGFwcGxlX2V4cGVjdGF0aW9uc1tpXSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHdlYmtpdF9leHBlY3RhdGlvbnNbaV0pCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Ci0gICAg
ICAgIHJldHVybiB3ZWJraXRfZXhwZWN0YXRpb25zCisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlv
bignd2Via2l0X3Rlc3RfcnVubmVyJyk6CisgICAgICAgICAgICBleHBlY3RhdGlvbnMuYXBwZW5k
KHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoKCd3azInKSkKKyAgICAgICAgcmV0dXJuIGV4cGVj
dGF0aW9ucwogCisgICAgQG1lbW9pemVkCiAgICAgZGVmIGNvbmZpZ3VyYXRpb25fc3BlY2lmaWVy
X21hY3JvcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICJoaWdoc2llcnJh
KyI6IFsiaGlnaHNpZXJyYSIsICJmdXR1cmUiXSwKLSAgICAgICAgICAgICJzaWVycmErIjogWyJz
aWVycmEiLCAiaGlnaHNpZXJyYSIsICJmdXR1cmUiXSwKLSAgICAgICAgICAgICJlbGNhcGl0YW4r
IjogWyJlbGNhcGl0YW4iLCAic2llcnJhIiwgImhpZ2hzaWVycmEiLCAiZnV0dXJlIl0sCi0gICAg
ICAgICAgICAieW9zZW1pdGUrIjogWyJ5b3NlbWl0ZSIsICJlbGNhcGl0YW4iLCAic2llcnJhIiwg
ImhpZ2hzaWVycmEiLCAiZnV0dXJlIl0sCi0gICAgICAgIH0KKyAgICAgICAgbWFwID0ge30KKyAg
ICAgICAgdmVyc2lvbl9uYW1lX21hcCA9IFZlcnNpb25OYW1lTWFwLm1hcChzZWxmLmhvc3QucGxh
dGZvcm0pCisgICAgICAgIHNvcnRlZF92ZXJzaW9ucyA9IHNvcnRlZCh2ZXJzaW9uX25hbWVfbWFw
Lm1hcHBpbmdfZm9yX3BsYXRmb3JtKCkudmFsdWVzKCkpCisgICAgICAgIGZvciB2ZXJzaW9uIGlu
IHNvcnRlZF92ZXJzaW9uczoKKyAgICAgICAgICAgIGxpc3QgPSBbXQorICAgICAgICAgICAgZm9y
IG5ld2VyIGluIHNvcnRlZF92ZXJzaW9uc1tzb3J0ZWRfdmVyc2lvbnMuaW5kZXgodmVyc2lvbik6
XToKKyAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZCh2ZXJzaW9uX25hbWVfbWFwLnRvX25hbWUo
bmV3ZXIsIHBsYXRmb3JtPXNlbGYucG9ydF9uYW1lKS5sb3dlcigpLnJlcGxhY2UoJyAnLCAnJykp
CisgICAgICAgICAgICBtYXBbdmVyc2lvbl9uYW1lX21hcC50b19uYW1lKHZlcnNpb24sIHBsYXRm
b3JtPXNlbGYucG9ydF9uYW1lKS5sb3dlcigpLnJlcGxhY2UoJyAnLCAnJykgKyAnKyddID0gbGlz
dAorICAgICAgICByZXR1cm4gbWFwCiAKICAgICBkZWYgc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVy
KHNlbGYsIHNlcnZlcl9uYW1lPU5vbmUpOgogICAgICAgICBlbnYgPSBzdXBlcihNYWNQb3J0LCBz
ZWxmKS5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VydmVyX25hbWUpCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIyNTg0MykK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWNfdW5pdHRlc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDI1ICsyNywyNCBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
IAotaW1wb3J0IHRpbWUKLQogZnJvbSB3ZWJraXRweS5wb3J0Lm1hYyBpbXBvcnQgTWFjUG9ydAog
ZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkYXJ3aW5fdGVzdGNhc2UKIGZyb20gd2Via2l0cHku
cG9ydCBpbXBvcnQgcG9ydF90ZXN0Y2FzZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91
dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKIGZyb20gd2Via2l0cHkudG9vbC5tb2Nr
dG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVj
dXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZSwgTW9ja0V4ZWN1dGl2ZTIsIFNjcmlwdEVy
cm9yCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCiAKIAogY2xh
c3MgTWFjVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdCk6CiAgICAgb3NfbmFtZSA9ICdt
YWMnCi0gICAgb3NfdmVyc2lvbiA9ICdsaW9uJworICAgIG9zX3ZlcnNpb24gPSBWZXJzaW9uLmZy
b21fbmFtZSgnTGlvbicpCiAgICAgcG9ydF9uYW1lID0gJ21hYy1saW9uJwogICAgIHBvcnRfbWFr
ZXIgPSBNYWNQb3J0CiAKICAgICBkZWYgdGVzdF92ZXJzaW9uKHNlbGYpOgogICAgICAgICBwb3J0
ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC52ZXJzaW9u
KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHBvcnQudmVyc2lvbl9uYW1lKCkpCiAK
ICAgICBkZWYgdGVzdF92ZXJzaW9ucyhzZWxmKToKICAgICAgICAgIyBOb3RlOiB0aGVzZSB0ZXN0
cyBkb24ndCBuZWVkIHRvIGJlIGV4aGF1c3RpdmUgYXMgbG9uZyBhcyB3ZSBnZXQgcGF0aCBjb3Zl
cmFnZS4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNl
LnB5CShyZXZpc2lvbiAyMjU4NDMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvcG9y
dF90ZXN0Y2FzZS5weQkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBjbGFzcyBUZXN0
V2ViS2l0UG9ydChQb3J0KToKIAogQGNvbnRleHRtYW5hZ2VyCiBkZWYgYmluZF9tb2NrX2FwcGxl
X2FkZGl0aW9ucygpOgorICAgIGZyb20gd2Via2l0cHkuY29tbW9uLnZlcnNpb25fbmFtZV9tYXAg
aW1wb3J0IFBVQkxJQ19UQUJMRSwgVmVyc2lvbk5hbWVNYXAKIAogICAgIGNsYXNzIE1vY2tBcHBs
ZUFkZGl0aW9ucyhvYmplY3QpOgogCkBAIC05MywxMSArOTQsMjMgQEAgZGVmIGJpbmRfbW9ja19h
cHBsZV9hZGRpdGlvbnMoKToKICAgICAgICAgZGVmIG1hY19vc19uYW1lKG5hbWUpOgogICAgICAg
ICAgICAgcmV0dXJuICdhZGQte30nLmZvcm1hdChuYW1lKQogCisgICAgICAgIEBzdGF0aWNtZXRo
b2QKKyAgICAgICAgZGVmIHZlcnNpb25fbmFtZV9tYXBwaW5nKHBsYXRmb3JtPU5vbmUpOgorICAg
ICAgICAgICAgcmVzdWx0ID0gVmVyc2lvbk5hbWVNYXAocGxhdGZvcm0pCisgICAgICAgICAgICBy
ZXN1bHQubWFwcGluZ1snaW50ZXJuYWwnXSA9IHt9CisgICAgICAgICAgICBmb3IgcGxhdGZvcm0g
aW4gcmVzdWx0Lm1hcHBpbmdbUFVCTElDX1RBQkxFXToKKyAgICAgICAgICAgICAgICByZXN1bHQu
bWFwcGluZ1snaW50ZXJuYWwnXVtwbGF0Zm9ybV0gPSB7fQorICAgICAgICAgICAgICAgIGZvciBu
YW1lLCB2ZXJzaW9uIGluIHJlc3VsdC5tYXBwaW5nW1BVQkxJQ19UQUJMRV1bcGxhdGZvcm1dLml0
ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQubWFwcGluZ1snaW50ZXJuYWwn
XVtwbGF0Zm9ybV1bJ2FkZC0nICsgbmFtZV0gPSB2ZXJzaW9uCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0CisKICAgICAjIGFwcGxlX2FkZGl0aW9ucyBpcyBhIG1lbW9pemVkIGZ1bmN0aW9uLiBU
YWtlIGFkdmFudGFnZSBvZiB0aGlzIGZhY3QgYW5kIG1hbmlwdWxhdGUgdGhlIGNhY2hlCiAgICAg
IyB0byB0ZW1wb3JhcmlseSByZXR1cm4gYSBtb2NrZWQgcmVzdWx0CiAgICAgYXBwbGVfYWRkaXRp
b25zLl9yZXN1bHRzX2NhY2hlWygpXSA9IE1vY2tBcHBsZUFkZGl0aW9ucworICAgIFZlcnNpb25O
YW1lTWFwLm1hcC5fcmVzdWx0c19jYWNoZSA9IHt9CiAgICAgeWllbGQKICAgICBhcHBsZV9hZGRp
dGlvbnMuX3Jlc3VsdHNfY2FjaGVbKCldID0gTm9uZQorICAgIFZlcnNpb25OYW1lTWFwLm1hcC5f
cmVzdWx0c19jYWNoZSA9IHt9CiAKIAogY2xhc3MgUG9ydFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RD
YXNlKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC90ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC90ZXN0LnB5CShyZXZpc2lvbiAyMjU4
NDMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvdGVzdC5weQkod29ya2luZyBjb3B5
KQpAQCAtMjYsMTMgKzI2LDEyIEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1p
bXBvcnQgc3lzCiBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IFBvcnQs
IERyaXZlciwgRHJpdmVyT3V0cHV0CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMu
dGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBUZXN0Q29uZmlndXJhdGlvbgotZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0KIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncworZnJv
bSB3ZWJraXRweS5jb21tb24udmVyc2lvbl9uYW1lX21hcCBpbXBvcnQgUFVCTElDX1RBQkxFLCBW
ZXJzaW9uTmFtZU1hcAogCiAKICMgVGhpcyBzZXRzIGJhc2ljIGV4cGVjdGF0aW9ucyBmb3IgYSB0
ZXN0LiBFYWNoIGluZGl2aWR1YWwgZXhwZWN0YXRpb24KQEAgLTI0Myw3ICsyNDIsNyBAQCBsYXll
ciBhdCAoMCwwKSBzaXplIDgwMHgzNAogCiAgICAgIyBGb3IgdGVzdGluZyB0ZXN0IGFyZSBwcm9w
ZXJseSBpbmNsdWRlZCBmcm9tIHBsYXRmb3JtIGRpcmVjdG9yaWVzLgogICAgIHRlc3RzLmFkZCgn
cGxhdGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9odHRwL3Rlc3QuaHRtbCcpCi0gICAgdGVzdHMuYWRk
KCdwbGF0Zm9ybS90ZXN0LXdpbi13aW43L2h0dHAvdGVzdC5odG1sJykKKyAgICB0ZXN0cy5hZGQo
J3BsYXRmb3JtL3Rlc3Qtd2luLTdzcDAvaHR0cC90ZXN0Lmh0bWwnKQogCiAgICAgIyBGb3IgLS1u
by1odHRwIHRlc3RzLCB0ZXN0IHRoYXQgcGxhdGZvcm0gc3BlY2lmaWMgSFRUUCB0ZXN0cyBhcmUg
cHJvcGVybHkgc2tpcHBlZC4KICAgICB0ZXN0cy5hZGQoJ3BsYXRmb3JtL3Rlc3Qtc25vdy1sZW9w
YXJkL2h0dHAvdGVzdC5odG1sJykKQEAgLTM1Nyw3ICszNTYsNyBAQCBjbGFzcyBUZXN0UG9ydChQ
b3J0KToKICAgICBBTExfQkFTRUxJTkVfVkFSSUFOVFMgPSAoCiAgICAgICAgICd0ZXN0LWxpbnV4
LXg4Nl82NCcsCiAgICAgICAgICd0ZXN0LW1hYy1zbm93bGVvcGFyZCcsICd0ZXN0LW1hYy1sZW9w
YXJkJywKLSAgICAgICAgJ3Rlc3Qtd2luLXZpc3RhJywgJ3Rlc3Qtd2luLXdpbjcnLCAndGVzdC13
aW4teHAnLAorICAgICAgICAndGVzdC13aW4tdmlzdGEnLCAndGVzdC13aW4tN3NwMCcsICd0ZXN0
LXdpbi14cCcsCiAgICAgKQogCiAgICAgQGNsYXNzbWV0aG9kCkBAIC0zNzMsMjEgKzM3MiwxNiBA
QCBjbGFzcyBUZXN0UG9ydChQb3J0KToKICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zX3BhdGgg
PSBMQVlPVVRfVEVTVF9ESVIgKyAnL3BsYXRmb3JtL3Rlc3QvVGVzdEV4cGVjdGF0aW9ucycKICAg
ICAgICAgc2VsZi5fcmVzdWx0c19kaXJlY3RvcnkgPSBOb25lCiAKLSAgICAgICAgc2VsZi5fb3Bl
cmF0aW5nX3N5c3RlbSA9ICdtYWMnCi0gICAgICAgIGlmIHNlbGYuX25hbWUuc3RhcnRzd2l0aCgn
dGVzdC13aW4nKToKLSAgICAgICAgICAgIHNlbGYuX29wZXJhdGluZ19zeXN0ZW0gPSAnd2luJwot
ICAgICAgICBlbGlmIHNlbGYuX25hbWUuc3RhcnRzd2l0aCgndGVzdC1saW51eCcpOgotICAgICAg
ICAgICAgc2VsZi5fb3BlcmF0aW5nX3N5c3RlbSA9ICdsaW51eCcKLQotICAgICAgICB2ZXJzaW9u
X21hcCA9IHsKLSAgICAgICAgICAgICd0ZXN0LXdpbi14cCc6ICd4cCcsCi0gICAgICAgICAgICAn
dGVzdC13aW4td2luNyc6ICd3aW43JywKLSAgICAgICAgICAgICd0ZXN0LXdpbi12aXN0YSc6ICd2
aXN0YScsCi0gICAgICAgICAgICAndGVzdC1tYWMtbGVvcGFyZCc6ICdsZW9wYXJkJywKLSAgICAg
ICAgICAgICd0ZXN0LW1hYy1zbm93bGVvcGFyZCc6ICdzbm93bGVvcGFyZCcsCi0gICAgICAgICAg
ICAndGVzdC1saW51eC14ODZfNjQnOiAnbHVjaWQnLAotICAgICAgICB9Ci0gICAgICAgIHNlbGYu
X3ZlcnNpb24gPSB2ZXJzaW9uX21hcFtzZWxmLl9uYW1lXQorICAgICAgICBzZWxmLl9vcGVyYXRp
bmdfc3lzdGVtID0gc2VsZi5fbmFtZS5zcGxpdCgnLScpWzFdCisgICAgICAgIGlmIHNlbGYuX29w
ZXJhdGluZ19zeXN0ZW0gPT0gJ2xpbnV4JzoKKyAgICAgICAgICAgIHNlbGYuX29zX3ZlcnNpb24g
PSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9vc192ZXJzaW9uID0gVmVy
c2lvbk5hbWVNYXAubWFwKHNlbGYuaG9zdC5wbGF0Zm9ybSkuZnJvbV9uYW1lKHNlbGYuX25hbWUu
c3BsaXQoJy0nKVsyXSlbMV0KKworICAgIGRlZiB2ZXJzaW9uX25hbWUoc2VsZik6CisgICAgICAg
IGlmIHNlbGYuX29zX3ZlcnNpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisg
ICAgICAgIHJldHVybiBWZXJzaW9uTmFtZU1hcC5tYXAoc2VsZi5ob3N0LnBsYXRmb3JtKS50b19u
YW1lKHNlbGYuX29zX3ZlcnNpb24sIHBsYXRmb3JtPXNlbGYuX29wZXJhdGluZ19zeXN0ZW0sIHRh
YmxlPVBVQkxJQ19UQUJMRSkKIAogICAgIGRlZiBkZWZhdWx0X3BpeGVsX3Rlc3RzKHNlbGYpOgog
ICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtNDAxLDEwICszOTUsMTAgQEAgY2xhc3MgVGVzdFBvcnQo
UG9ydCk6CiAgICAgICAgIHNlYXJjaF9wYXRocyA9IHsKICAgICAgICAgICAgICd0ZXN0LW1hYy1z
bm93bGVvcGFyZCc6IFsndGVzdC1tYWMtc25vd2xlb3BhcmQnXSwKICAgICAgICAgICAgICd0ZXN0
LW1hYy1sZW9wYXJkJzogWyd0ZXN0LW1hYy1sZW9wYXJkJywgJ3Rlc3QtbWFjLXNub3dsZW9wYXJk
J10sCi0gICAgICAgICAgICAndGVzdC13aW4td2luNyc6IFsndGVzdC13aW4td2luNyddLAotICAg
ICAgICAgICAgJ3Rlc3Qtd2luLXZpc3RhJzogWyd0ZXN0LXdpbi12aXN0YScsICd0ZXN0LXdpbi13
aW43J10sCi0gICAgICAgICAgICAndGVzdC13aW4teHAnOiBbJ3Rlc3Qtd2luLXhwJywgJ3Rlc3Qt
d2luLXZpc3RhJywgJ3Rlc3Qtd2luLXdpbjcnXSwKLSAgICAgICAgICAgICd0ZXN0LWxpbnV4LXg4
Nl82NCc6IFsndGVzdC1saW51eCcsICd0ZXN0LXdpbi13aW43J10sCisgICAgICAgICAgICAndGVz
dC13aW4tN3NwMCc6IFsndGVzdC13aW4tN3NwMCddLAorICAgICAgICAgICAgJ3Rlc3Qtd2luLXZp
c3RhJzogWyd0ZXN0LXdpbi12aXN0YScsICd0ZXN0LXdpbi03c3AwJ10sCisgICAgICAgICAgICAn
dGVzdC13aW4teHAnOiBbJ3Rlc3Qtd2luLXhwJywgJ3Rlc3Qtd2luLXZpc3RhJywgJ3Rlc3Qtd2lu
LTdzcDAnXSwKKyAgICAgICAgICAgICd0ZXN0LWxpbnV4LXg4Nl82NCc6IFsndGVzdC1saW51eCdd
LAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBbc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgo
ZCkgZm9yIGQgaW4gc2VhcmNoX3BhdGhzW3NlbGYubmFtZSgpXV0KIApAQCAtNTE0LDcgKzUwOCw3
IEBAIGNsYXNzIFRlc3RQb3J0KFBvcnQpOgogICAgICAgICAgICAgICAgICgnc25vd2xlb3BhcmQn
LCAneDg2JyksCiAgICAgICAgICAgICAgICAgKCd4cCcsICd4ODYnKSwKICAgICAgICAgICAgICAg
ICAoJ3Zpc3RhJywgJ3g4NicpLAotICAgICAgICAgICAgICAgICgnd2luNycsICd4ODYnKSwKKyAg
ICAgICAgICAgICAgICAoJzdzcDAnLCAneDg2JyksCiAgICAgICAgICAgICAgICAgKCdsdWNpZCcs
ICd4ODYnKSwKICAgICAgICAgICAgICAgICAoJ2x1Y2lkJywgJ3g4Nl82NCcpKQogCkBAIC01MjMs
NyArNTE3LDcgQEAgY2xhc3MgVGVzdFBvcnQoUG9ydCk6CiAKICAgICBkZWYgY29uZmlndXJhdGlv
bl9zcGVjaWZpZXJfbWFjcm9zKHNlbGYpOgogICAgICAgICAiIiJUbyBhdm9pZCBzdXJwcmlzZXMg
d2hlbiBpbnRyb2R1Y2luZyBuZXcgbWFjcm9zLCB0aGVzZSBhcmUgaW50ZW50aW9uYWxseSBmaXhl
ZCBpbiB0aW1lLiIiIgotICAgICAgICByZXR1cm4geydtYWMnOiBbJ2xlb3BhcmQnLCAnc25vd2xl
b3BhcmQnXSwgJ3dpbic6IFsneHAnLCAndmlzdGEnLCAnd2luNyddLCAnbGludXgnOiBbJ2x1Y2lk
J119CisgICAgICAgIHJldHVybiB7J21hYyc6IFsnbGVvcGFyZCcsICdzbm93bGVvcGFyZCddLCAn
d2luJzogWyd4cCcsICd2aXN0YScsICc3c3AwJ10sICdsaW51eCc6IFsnbHVjaWQnXX0KIAogICAg
IGRlZiBhbGxfYmFzZWxpbmVfdmFyaWFudHMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLkFM
TF9CQVNFTElORV9WQVJJQU5UUwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dp
bi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5CShy
ZXZpc2lvbiAyMjU4NDMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw5IEBAIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncwogZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3QgaW1wb3J0IFN5c3RlbUhvc3QKLWZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yLCBFeGVjdXRpdmUK
K2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZQog
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnBhdGggaW1wb3J0IGFic3BhdGhfdG9fdXJpLCBj
eWdwYXRoCitmcm9tIHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uIGltcG9ydCBWZXJzaW9uCiBmcm9t
IHdlYmtpdHB5LmNvbW1vbi52ZXJzaW9uX25hbWVfbWFwIGltcG9ydCBWZXJzaW9uTmFtZU1hcAog
ZnJvbSB3ZWJraXRweS5wb3J0LmFwcGxlIGltcG9ydCBBcHBsZVBvcnQKIGZyb20gd2Via2l0cHku
cG9ydC5jb25maWcgaW1wb3J0IGFwcGxlX2FkZGl0aW9ucwpAQCAtNTYsNyArNTcsOCBAQCBleGNl
cHQgSW1wb3J0RXJyb3I6CiBjbGFzcyBXaW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgcG9ydF9uYW1l
ID0gIndpbiIKIAotICAgIFZFUlNJT05fRkFMTEJBQ0tfT1JERVIgPSBbIndpbi14cCIsICJ3aW4t
dmlzdGEiLCAid2luLTdzcDAiLCAid2luLXdpbjEwIiwgIndpbiJdCisgICAgVkVSU0lPTl9NSU4g
PSBWZXJzaW9uKDUsIDEpCisgICAgVkVSU0lPTl9NQVggPSBWZXJzaW9uKDEwKQogCiAgICAgQVJD
SElURUNUVVJFUyA9IFsneDg2JywgJ3g4Nl82NCddCiAKQEAgLTg3LDYgKzg5LDEzIEBAIGNsYXNz
IFdpblBvcnQoQXBwbGVQb3J0KToKICAgICBwcmV2aW91c19lcnJvcl9yZXBvcnRpbmdfdmFsdWVz
ID0ge30KICAgICBwcmV2aW91c193b3c2NF9lcnJvcl9yZXBvcnRpbmdfdmFsdWVzID0ge30KIAor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKToKKyAgICAg
ICAgQXBwbGVQb3J0Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCisg
ICAgICAgIGlmIHBvcnRfbmFtZS5zcGxpdCgnLScpID4gMToKKyAgICAgICAgICAgIHNlbGYuX29z
X3ZlcnNpb24gPSBWZXJzaW9uTmFtZU1hcC5tYXAoaG9zdC5wbGF0Zm9ybSkuZnJvbV9uYW1lKHBv
cnRfbmFtZS5zcGxpdCgnLScpWzFdKVsxXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2Vs
Zi5fb3NfdmVyc2lvbiA9IHNlbGYuaG9zdC5wbGF0Zm9ybS5vc192ZXJzaW9uCisKICAgICBkZWYg
ZG9fdGV4dF9yZXN1bHRzX2RpZmZlcihzZWxmLCBleHBlY3RlZF90ZXh0LCBhY3R1YWxfdGV4dCk6
CiAgICAgICAgICMgU2FuaXR5IHdhcyByZXN0b3JlZCBpbiBXSzIsIHNvIHdlIGRvbid0IG5lZWQg
dGhpcyBoYWNrIHRoZXJlLgogICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0
X3J1bm5lcicpOgpAQCAtMTAyLDExICsxMTEsMTUgQEAgY2xhc3MgV2luUG9ydChBcHBsZVBvcnQp
OgogICAgICAgICByZXR1cm4gZXhwZWN0ZWRfdGV4dCAhPSBhY3R1YWxfdGV4dAogCiAgICAgZGVm
IGRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6Ci0gICAgICAgIG5hbWUgPSBzZWxm
Ll9uYW1lLnJlcGxhY2UoJy13azInLCAnJykKLSAgICAgICAgaWYgbmFtZS5lbmRzd2l0aChzZWxm
LkZVVFVSRV9WRVJTSU9OKToKLSAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzID0gW3NlbGYucG9y
dF9uYW1lXQorICAgICAgICB2ZXJzaW9uX25hbWVfbWFwID0gVmVyc2lvbk5hbWVNYXAubWFwKHNl
bGYuaG9zdC5wbGF0Zm9ybSkKKyAgICAgICAgaWYgc2VsZi5fb3NfdmVyc2lvbiA8IHNlbGYuVkVS
U0lPTl9NSU4gb3Igc2VsZi5fb3NfdmVyc2lvbiA+IHNlbGYuVkVSU0lPTl9NQVg6CisgICAgICAg
ICAgICBmYWxsYmFja192ZXJzaW9ucyA9IFtzZWxmLl9vc192ZXJzaW9uXQogICAgICAgICBlbHNl
OgotICAgICAgICAgICAgZmFsbGJhY2tfbmFtZXMgPSBzZWxmLlZFUlNJT05fRkFMTEJBQ0tfT1JE
RVJbc2VsZi5WRVJTSU9OX0ZBTExCQUNLX09SREVSLmluZGV4KG5hbWUpOi0xXSArIFtzZWxmLnBv
cnRfbmFtZV0KKyAgICAgICAgICAgIHNvcnRlZF92ZXJzaW9ucyA9IHNvcnRlZCh2ZXJzaW9uX25h
bWVfbWFwLm1hcHBpbmdfZm9yX3BsYXRmb3JtKHBsYXRmb3JtPXNlbGYucG9ydF9uYW1lKS52YWx1
ZXMoKSkKKyAgICAgICAgICAgIGZhbGxiYWNrX3ZlcnNpb25zID0gc29ydGVkX3ZlcnNpb25zW3Nv
cnRlZF92ZXJzaW9ucy5pbmRleChzZWxmLl9vc192ZXJzaW9uKTpdCisgICAgICAgIGZhbGxiYWNr
X25hbWVzID0gWyd3aW4tJyArIHZlcnNpb25fbmFtZV9tYXAudG9fbmFtZSh2ZXJzaW9uLCBwbGF0
Zm9ybT1zZWxmLnBvcnRfbmFtZSkubG93ZXIoKS5yZXBsYWNlKCcgJywgJycpIGZvciB2ZXJzaW9u
IGluIGZhbGxiYWNrX3ZlcnNpb25zXQorICAgICAgICBmYWxsYmFja19uYW1lcy5hcHBlbmQoJ3dp
bicpCisKICAgICAgICAgIyBGSVhNRTogVGhlIEFwcGxlV2luIHBvcnQgZmFsbHMgYmFjayB0byBB
cHBsZU1hYyBmb3Igc29tZSByZXN1bHRzLiAgRXZlbnR1YWxseSB3ZSdsbCBoYXZlIGEgc2hhcmVk
ICdhcHBsZScgcG9ydC4KICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9y
dW5uZXInKToKICAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzLmluc2VydCgwLCAnd2luLXdrMicp
CkBAIC00MzgsMTcgKzQ1MSwxMyBAQCBjbGFzcyBXaW5DYWlyb1BvcnQoV2luUG9ydCk6CiAKICAg
ICBURVNUX1BBVEhfU0VQQVJBVE9SID0gb3Muc2VwCiAKLSAgICBWRVJTSU9OX0ZBTExCQUNLX09S
REVSID0gWyJ3aW5jYWlyby0iICsgb3NfbmFtZS5sb3dlcigpIGZvciBvc19uYW1lIGluIFZlcnNp
b25OYW1lTWFwLm1hcCgpLm5hbWVzKCldCi0KICAgICBkZWYgZGVmYXVsdF9iYXNlbGluZV9zZWFy
Y2hfcGF0aChzZWxmKToKLSAgICAgICAgbmFtZSA9IHNlbGYuX25hbWUucmVwbGFjZSgnLXdrMics
ICcnKQotICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKHNlbGYuRlVUVVJFX1ZFUlNJT04pOgotICAg
ICAgICAgICAgZmFsbGJhY2tfbmFtZXMgPSBbXQorICAgICAgICB2ZXJzaW9uX25hbWVfbWFwID0g
VmVyc2lvbk5hbWVNYXAubWFwKHNlbGYuaG9zdC5wbGF0Zm9ybSkKKyAgICAgICAgaWYgc2VsZi5f
b3NfdmVyc2lvbiA8IHNlbGYuVkVSU0lPTl9NSU4gb3Igc2VsZi5fb3NfdmVyc2lvbiA+IHNlbGYu
VkVSU0lPTl9NQVg6CisgICAgICAgICAgICBmYWxsYmFja192ZXJzaW9ucyA9IFtzZWxmLl9vc192
ZXJzaW9uXQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgYXNzZXJ0IG5hbWUgaW4gc2VsZi5W
RVJTSU9OX0ZBTExCQUNLX09SREVSCi0gICAgICAgICAgICBmYWxsYmFja19uYW1lcyA9IHNlbGYu
VkVSU0lPTl9GQUxMQkFDS19PUkRFUltzZWxmLlZFUlNJT05fRkFMTEJBQ0tfT1JERVIuaW5kZXgo
bmFtZSk6XQotICAgICAgICBmYWxsYmFja19uYW1lcy5hcHBlbmQoc2VsZi5wb3J0X25hbWUpCisg
ICAgICAgICAgICBzb3J0ZWRfdmVyc2lvbnMgPSBzb3J0ZWQodmVyc2lvbl9uYW1lX21hcC5tYXBw
aW5nX2Zvcl9wbGF0Zm9ybShwbGF0Zm9ybT1zZWxmLnBvcnRfbmFtZSkudmFsdWVzKCkpCisgICAg
ICAgICAgICBmYWxsYmFja192ZXJzaW9ucyA9IHNvcnRlZF92ZXJzaW9uc1tzb3J0ZWRfdmVyc2lv
bnMuaW5kZXgoc2VsZi5fb3NfdmVyc2lvbik6XQorICAgICAgICBmYWxsYmFja19uYW1lcyA9IFsn
d2luY2Fpcm8tJyArIHZlcnNpb25fbmFtZV9tYXAudG9fbmFtZSh2ZXJzaW9uLCBwbGF0Zm9ybT1z
ZWxmLnBvcnRfbmFtZSkubG93ZXIoKS5yZXBsYWNlKCcgJywgJycpIGZvciB2ZXJzaW9uIGluIGZh
bGxiYWNrX3ZlcnNpb25zXQorICAgICAgICBmYWxsYmFja19uYW1lcy5hcHBlbmQoJ3dpbmNhaXJv
JykKICAgICAgICAgcmV0dXJuIG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgZmFsbGJh
Y2tfbmFtZXMpCi0KLSAgICBkZWYgX2Z1dHVyZV9wb3J0X25hbWUoc2VsZik6Ci0gICAgICAgIHJl
dHVybiBzZWxmLnBvcnRfbmFtZSArICItIiArIHNlbGYuRlVUVVJFX1ZFUlNJT04KSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW5fdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbl91bml0dGVzdC5weQkocmV2aXNpb24gMjI1
ODQzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbl91bml0dGVzdC5weQkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmV4ZWN1dGl2ZV9tb2NrIGltcG9ydCBNb2NrRXhlY3V0aXZlCiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQogZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKK2Zy
b20gd2Via2l0cHkuY29tbW9uLnZlcnNpb24gaW1wb3J0IFZlcnNpb24KK2Zyb20gd2Via2l0cHku
Y29tbW9uLnZlcnNpb25fbmFtZV9tYXAgaW1wb3J0IFBVQkxJQ19UQUJMRSwgVmVyc2lvbk5hbWVN
YXAKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgcG9ydF90ZXN0Y2FzZQogZnJvbSB3ZWJraXRw
eS5wb3J0LndpbiBpbXBvcnQgV2luUG9ydAogZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGlt
cG9ydCBNb2NrT3B0aW9ucwpAQCAtMzYsNyArMzgsNyBAQCBmcm9tIHdlYmtpdHB5LnRvb2wubW9j
a3Rvb2wgaW1wb3J0IE1vY2tPCiAKIGNsYXNzIFdpblBvcnRUZXN0KHBvcnRfdGVzdGNhc2UuUG9y
dFRlc3RDYXNlKToKICAgICBvc19uYW1lID0gJ3dpbicKLSAgICBvc192ZXJzaW9uID0gJ3hwJwor
ICAgIG9zX3ZlcnNpb24gPSBWZXJzaW9uLmZyb21fbmFtZSgnWFAnKQogICAgIHBvcnRfbmFtZSA9
ICd3aW4teHAnCiAgICAgcG9ydF9tYWtlciA9IFdpblBvcnQKIApAQCAtNTgsMjQgKzYwLDI0IEBA
IGNsYXNzIFdpblBvcnRUZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3QKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChwb3J0LmJhc2VsaW5lX3NlYXJjaF9wYXRoKCksIGFic29sdXRlX3NlYXJjaF9w
YXRocykKIAogICAgIGRlZiB0ZXN0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgotICAgICAg
ICBzZWxmLl9hc3NlcnRfc2VhcmNoX3BhdGgoWyd3aW4teHAnLCAnd2luLXZpc3RhJywgJ3dpbi03
c3AwJywgJ3dpbi13aW4xMCcsICd3aW4nLCAnbWFjJ10sICd4cCcpCi0gICAgICAgIHNlbGYuX2Fz
c2VydF9zZWFyY2hfcGF0aChbJ3dpbi12aXN0YScsICd3aW4tN3NwMCcsICd3aW4td2luMTAnLCAn
d2luJywgJ21hYyddLCAndmlzdGEnKQotICAgICAgICBzZWxmLl9hc3NlcnRfc2VhcmNoX3BhdGgo
Wyd3aW4tN3NwMCcsICd3aW4td2luMTAnLCAnd2luJywgJ21hYyddLCAnN3NwMCcpCi0KLSAgICAg
ICAgc2VsZi5fYXNzZXJ0X3NlYXJjaF9wYXRoKFsnd2luLXdrMicsICd3aW4teHAnLCAnd2luLXZp
c3RhJywgJ3dpbi03c3AwJywgJ3dpbi13aW4xMCcsICd3aW4nLCAnbWFjLXdrMicsICdtYWMnXSwg
J3hwJywgdXNlX3dlYmtpdDI9VHJ1ZSkKLSAgICAgICAgc2VsZi5fYXNzZXJ0X3NlYXJjaF9wYXRo
KFsnd2luLXdrMicsICd3aW4tdmlzdGEnLCAnd2luLTdzcDAnLCAnd2luLXdpbjEwJywgJ3dpbics
ICdtYWMtd2syJywgJ21hYyddLCAndmlzdGEnLCB1c2Vfd2Via2l0Mj1UcnVlKQotICAgICAgICBz
ZWxmLl9hc3NlcnRfc2VhcmNoX3BhdGgoWyd3aW4td2syJywgJ3dpbi03c3AwJywgJ3dpbi13aW4x
MCcsICd3aW4nLCAnbWFjLXdrMicsICdtYWMnXSwgJzdzcDAnLCB1c2Vfd2Via2l0Mj1UcnVlKQor
ICAgICAgICBzZWxmLl9hc3NlcnRfc2VhcmNoX3BhdGgoWyd3aW4teHAnLCAnd2luLXZpc3RhJywg
J3dpbi03c3AwJywgJ3dpbi04JywgJ3dpbi04LjEnLCAnd2luLXdpbjEwJywgJ3dpbicsICdtYWMn
XSwgVmVyc2lvbi5mcm9tX25hbWUoJ1hQJykpCisgICAgICAgIHNlbGYuX2Fzc2VydF9zZWFyY2hf
cGF0aChbJ3dpbi12aXN0YScsICd3aW4tN3NwMCcsICd3aW4tOCcsICd3aW4tOC4xJywgJ3dpbi13
aW4xMCcsICd3aW4nLCAnbWFjJ10sIFZlcnNpb24uZnJvbV9uYW1lKCdWaXN0YScpKQorICAgICAg
ICBzZWxmLl9hc3NlcnRfc2VhcmNoX3BhdGgoWyd3aW4tN3NwMCcsICd3aW4tOCcsICd3aW4tOC4x
JywgJ3dpbi13aW4xMCcsICd3aW4nLCAnbWFjJ10sIFZlcnNpb24uZnJvbV9uYW1lKCc3c3AwJykp
CisKKyAgICAgICAgc2VsZi5fYXNzZXJ0X3NlYXJjaF9wYXRoKFsnd2luLXdrMicsICd3aW4teHAn
LCAnd2luLXZpc3RhJywgJ3dpbi03c3AwJywgJ3dpbi04JywgJ3dpbi04LjEnLCAnd2luLXdpbjEw
JywgJ3dpbicsICdtYWMtd2syJywgJ21hYyddLCBWZXJzaW9uLmZyb21fbmFtZSgnWFAnKSwgdXNl
X3dlYmtpdDI9VHJ1ZSkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X3NlYXJjaF9wYXRoKFsnd2luLXdr
MicsICd3aW4tdmlzdGEnLCAnd2luLTdzcDAnLCAnd2luLTgnLCAnd2luLTguMScsICd3aW4td2lu
MTAnLCAnd2luJywgJ21hYy13azInLCAnbWFjJ10sIFZlcnNpb24uZnJvbV9uYW1lKCdWaXN0YScp
LCB1c2Vfd2Via2l0Mj1UcnVlKQorICAgICAgICBzZWxmLl9hc3NlcnRfc2VhcmNoX3BhdGgoWyd3
aW4td2syJywgJ3dpbi03c3AwJywgJ3dpbi04JywgJ3dpbi04LjEnLCAnd2luLXdpbjEwJywgJ3dp
bicsICdtYWMtd2syJywgJ21hYyddLCBWZXJzaW9uLmZyb21fbmFtZSgnN3NwMCcpLCB1c2Vfd2Vi
a2l0Mj1UcnVlKQogCiAgICAgZGVmIF9hc3NlcnRfdmVyc2lvbihzZWxmLCBwb3J0X25hbWUsIGV4
cGVjdGVkX3ZlcnNpb24pOgogICAgICAgICBob3N0ID0gTW9ja1N5c3RlbUhvc3Qob3NfbmFtZT0n
d2luJywgb3NfdmVyc2lvbj1leHBlY3RlZF92ZXJzaW9uKQogICAgICAgICBwb3J0ID0gV2luUG9y
dChob3N0LCBwb3J0X25hbWU9cG9ydF9uYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBv
cnQudmVyc2lvbigpLCBleHBlY3RlZF92ZXJzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHBvcnQudmVyc2lvbl9uYW1lKCksIFZlcnNpb25OYW1lTWFwLm1hcCgpLnRvX25hbWUoZXhwZWN0
ZWRfdmVyc2lvbiwgcGxhdGZvcm09J3dpbicsIHRhYmxlPVBVQkxJQ19UQUJMRSkpCiAKICAgICBk
ZWYgdGVzdF92ZXJzaW9ucyhzZWxmKToKLSAgICAgICAgc2VsZi5fYXNzZXJ0X3ZlcnNpb24oJ3dp
bi14cCcsICd4cCcpCi0gICAgICAgIHNlbGYuX2Fzc2VydF92ZXJzaW9uKCd3aW4tdmlzdGEnLCAn
dmlzdGEnKQotICAgICAgICBzZWxmLl9hc3NlcnRfdmVyc2lvbignd2luLTdzcDAnLCAnN3NwMCcp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBzZWxmLl9hc3NlcnRf
dmVyc2lvbiwgJ3dpbi1tZScsICd4cCcpCisgICAgICAgIHNlbGYuX2Fzc2VydF92ZXJzaW9uKCd3
aW4teHAnLCBWZXJzaW9uLmZyb21fbmFtZSgnWFAnKSkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X3Zl
cnNpb24oJ3dpbi12aXN0YScsIFZlcnNpb24uZnJvbV9uYW1lKCdWaXN0YScpKQorICAgICAgICBz
ZWxmLl9hc3NlcnRfdmVyc2lvbignd2luLTdzcDAnLCBWZXJzaW9uLmZyb21fbmFtZSgnN3NwMCcp
KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgc2VsZi5fYXNzZXJ0
X3ZlcnNpb24sICd3aW4tbWUnLCBWZXJzaW9uLmZyb21fbmFtZSgnVmlzdGEnKSkKIAogICAgIGRl
ZiB0ZXN0X2NvbXBhcmVfdGV4dChzZWxmKToKICAgICAgICAgZXhwZWN0ZWQgPSAiRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0
aW9uTm90aWZpY2F0aW9uXG5mb29cbkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvblxuIgpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dwZS5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvd3BlLnB5CShyZXZpc2lvbiAyMjU4NDMpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvd3BlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3
IEBAIGNsYXNzIFdQRVBvcnQoUG9ydCk6CiAgICAgZGVmIF9nZW5lcmF0ZV9hbGxfdGVzdF9jb25m
aWd1cmF0aW9ucyhzZWxmKToKICAgICAgICAgY29uZmlndXJhdGlvbnMgPSBbXQogICAgICAgICBm
b3IgYnVpbGRfdHlwZSBpbiBzZWxmLkFMTF9CVUlMRF9UWVBFUzoKLSAgICAgICAgICAgIGNvbmZp
Z3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJhdGlvbih2ZXJzaW9uPXNlbGYuX3ZlcnNpb24s
IGFyY2hpdGVjdHVyZT0neDg2JywgYnVpbGRfdHlwZT1idWlsZF90eXBlKSkKKyAgICAgICAgICAg
IGNvbmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJhdGlvbih2ZXJzaW9uPXNlbGYudmVy
c2lvbl9uYW1lKCksIGFyY2hpdGVjdHVyZT0neDg2JywgYnVpbGRfdHlwZT1idWlsZF90eXBlKSkK
ICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25zCiAKICAgICBkZWYgX3BhdGhfdG9fZHJpdmVy
KHNlbGYpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJp
ZXNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29s
L2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIyNTg0MykKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0ZXN0LnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODcsNyArMTg3LDcgQEAgY2xhc3MgUHJpbnRFeHBlY3RhdGlvbnNUZXN0
KHVuaXR0ZXN0LlRlcwogICAgICAgICAgICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQv
aW1hZ2UuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXVxuJwogICAgICAgICAgICAgICAgICAgICAg
ICAnZmFpbHVyZXMvZXhwZWN0ZWQvdGV4dC5odG1sIFsgRmFpbHVyZSBdXG4nCiAgICAgICAgICAg
ICAgICAgICAgICAgICdcbicKLSAgICAgICAgICAgICAgICAgICAgICAgJy8vIEZvciB0ZXN0LXdp
bi13aW43XG4nCisgICAgICAgICAgICAgICAgICAgICAgICcvLyBGb3IgdGVzdC13aW4tN3NwMFxu
JwogICAgICAgICAgICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UuaHRtbCBb
IEltYWdlT25seUZhaWx1cmUgXVxuJwogICAgICAgICAgICAgICAgICAgICAgICAnZmFpbHVyZXMv
ZXhwZWN0ZWQvdGV4dC5odG1sIFsgRmFpbHVyZSBdXG4nCiAgICAgICAgICAgICAgICAgICAgICAg
ICdcbicKQEAgLTI4MSw3ICsyODEsNyBAQCBjbGFzcyBQcmludEJhc2VsaW5lc1Rlc3QodW5pdHRl
c3QuVGVzdENhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFzc2VzL3RleHQtZXhwZWN0
ZWQucG5nXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFzc2VzL3RleHQtZXhwZWN0
ZWQudHh0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAnLy8gRm9yIHRlc3Qtd2luLXdpbjdcbicKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcvLyBGb3IgdGVzdC13aW4tN3NwMFxuJwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3Bhc3Nlcy90ZXh0LWV4cGVjdGVkLnBuZ1xuJwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3Bhc3Nlcy90ZXh0LWV4cGVjdGVkLnR4dFxuJwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ1xuJwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1
ZXVlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFu
ZHMvcXVldWVzLnB5CShyZXZpc2lvbiAyMjU4NDMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvcXVldWVzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNCArMzUsMTIg
QEAgaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCB0cmFjZWJhY2sKIAotZnJvbSBkYXRl
dGltZSBpbXBvcnQgZGF0ZXRpbWUKIGZyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCiBm
cm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jb25m
aWcuY29tbWl0dGVydmFsaWRhdG9yIGltcG9ydCBDb21taXR0ZXJWYWxpZGF0b3IKIGZyb20gd2Vi
a2l0cHkuY29tbW9uLmNvbmZpZy5wb3J0cyBpbXBvcnQgRGVwcmVjYXRlZFBvcnQKIGZyb20gd2Vi
a2l0cHkuY29tbW9uLm5ldC5idWd6aWxsYSBpbXBvcnQgQXR0YWNobWVudAotZnJvbSB3ZWJraXRw
eS5jb21tb24ubmV0LnN0YXR1c3NlcnZlciBpbXBvcnQgU3RhdHVzU2VydmVyCiBmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJr
aXRweS50b29sLmJvdC5ib3RpbmZvIGltcG9ydCBCb3RJbmZvCiBmcm9tIHdlYmtpdHB5LnRvb2wu
Ym90LmNvbW1pdHF1ZXVldGFzayBpbXBvcnQgQ29tbWl0UXVldWVUYXNrLCBDb21taXRRdWV1ZVRh
c2tEZWxlZ2F0ZQpAQCAtMjcyLDcgKzI3MCw3IEBAIGNsYXNzIFBhdGNoUHJvY2Vzc2luZ1F1ZXVl
KEFic3RyYWN0UGF0Y2gKICAgICBkZWYgX25ld19wb3J0X25hbWVfZnJvbV9vbGQoc2VsZiwgcG9y
dF9uYW1lLCBwbGF0Zm9ybSk6CiAgICAgICAgICMgQXBwbGVQb3J0LmRldGVybWluZV9mdWxsX3Bv
cnRfbmFtZSBhc3NlcnRzIGlmIHRoZSBuYW1lIGRvZXNuJ3QgaW5jbHVkZSB2ZXJzaW9uLgogICAg
ICAgICBpZiBwb3J0X25hbWUgPT0gJ21hYyc6Ci0gICAgICAgICAgICByZXR1cm4gJ21hYy0nICsg
cGxhdGZvcm0ub3NfdmVyc2lvbgorICAgICAgICAgICAgcmV0dXJuICdtYWMtJyArIHBsYXRmb3Jt
Lm9zX3ZlcnNpb25fbmFtZSgpLmxvd2VyKCkucmVwbGFjZSgnICcsICcnKQogICAgICAgICBpZiBw
b3J0X25hbWUgPT0gJ3dpbic6CiAgICAgICAgICAgICByZXR1cm4gJ3dpbi1mdXR1cmUnCiAgICAg
ICAgIHJldHVybiBwb3J0X25hbWUK
</data>

          </attachment>
      

    </bug>

</bugzilla>