<?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>33684</bug_id>
          
          <creation_ts>2010-01-14 13:15:46 -0800</creation_ts>
          <short_desc>check-webkit-style: Provide a way to specify filter rules on a per-file/folder basis</short_desc>
          <delta_ts>2010-02-08 05:48:29 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>34408</dependson>
          <blocked>34574</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Jerdonek">cjerdonek</reporter>
          <assigned_to name="Chris Jerdonek">cjerdonek</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>180887</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-14 13:15:46 -0800</bug_when>
    <thetext>One case where this would be useful is to suppress the tab check for certain Perl unit tests (or even all files in folders with names of the form &quot;*_unittest&quot;), e.g.

https://bugs.webkit.org/show_bug.cgi?id=33447#c20

(A better long-term solution would be for the file processor to ignore tabs inside heredoc strings.)

Eric mentioned having a certain underscore rule apply only to the qt directory:

https://bugs.webkit.org/show_bug.cgi?id=33663#c1

Were there other use cases?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180889</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-14 13:22:40 -0800</bug_when>
    <thetext>The correct fix to &quot;overriding&quot; the tab rule is to detect the presence of the svn allow-tabs property for the file.  I don&apos;t think we should have a separate list of exclusions.  We already have one way to exclude files from the no-tabs pre-commit hook, we should just re-use it here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180897</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-14 13:37:37 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; The correct fix to &quot;overriding&quot; the tab rule is to detect the presence of the
&gt; svn allow-tabs property for the file.  I don&apos;t think we should have a separate
&gt; list of exclusions.  We already have one way to exclude files from the no-tabs
&gt; pre-commit hook, we should just re-use it here.

Yeah, I had thought of that, too.  I agree it&apos;s better in the case of tabs, but I thought we could start out with a short-term solution that could address potentially many birds.  Are there are other cases where we want to specify rules on a per-directory basis?

In terms of the correct fix for tabs, both the exclusion list approach and the allow-tabs approach have the disadvantage of exempting the entire file.  In the case of the unit tests, we really only want to exclude the heredoc strings from the check (in the same way that Kenneth just wants &quot;qt_&quot; to be permitted and not all underscores).

Do you think we shouldn&apos;t have an exclusion list for all rules, or just for the tab check?  Note that the exclusion list would only affect the check for individual error categories and not exclude the entire file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180901</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-14 13:46:25 -0800</bug_when>
    <thetext>Regardless, then pre-commit hook works on a per-file basis.  We could educate check-webkit-style to ignore tabs in heredoc strings, however it should *still* warn about those same files if they have tabs and don&apos;t have allow-tabs set.  These seem like separate checks.

The idea of excluding files/folders does seem potentially useful.  However it might make more sense to include that information in the file itself with some sort of /* IGNORE STYLE */ comment or something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180910</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-14 14:06:21 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; The idea of excluding files/folders does seem potentially useful.  However it
&gt; might make more sense to include that information in the file itself with some
&gt; sort of /* IGNORE STYLE */ comment or something.

I&apos;m open to other approaches.  I&apos;ll go ahead and change the title of the report to something less implementation-specific, and we can use this report to discuss possible solutions (and whether a general solution is even needed).

I&apos;ve also suggested the idea of using delineators to mark regions to skip over:

https://bugs.webkit.org/show_bug.cgi?id=33098#c11

Some disadvantages of that approach are that--

(1) We have to touch our code.
(2) Since the delineators will be spread all over our code base, it will be much harder to evolve the delineator convention if we want it to change.
(3) It seems like it would be trickier to make the delineators specific to certain style categories (which would make (2) even more important).

The primary advantage seems to be that it&apos;s more fine-grained than affecting the entire file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181083</commentid>
    <comment_count>5</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-01-14 20:11:19 -0800</bug_when>
    <thetext>&gt; However it might make more sense to include that information in the file
&gt; itself with some sort of /* IGNORE STYLE */ comment or something.

FYI, check-webkit-style has already had the NOLINT feature because Google&apos;s cpplint had it. If we decide to start using this feature, we may just need to change the keyword NOLINT as we eliminated the word &quot;lint&quot; from our style checkers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181374</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-15 14:00:12 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; The correct fix to &quot;overriding&quot; the tab rule is to detect the presence of the
&gt; svn allow-tabs property for the file.  I don&apos;t think we should have a separate
&gt; list of exclusions.  We already have one way to exclude files from the no-tabs
&gt; pre-commit hook, we should just re-use it here.

I filed a bug for this here:

https://bugs.webkit.org/show_bug.cgi?id=33734</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181376</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-15 14:01:12 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; (A better long-term solution would be for the file processor to ignore tabs
&gt; inside heredoc strings.)

I also filed a bug report for this:

https://bugs.webkit.org/show_bug.cgi?id=33737</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181561</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-16 14:41:28 -0800</bug_when>
    <thetext>I just noticed that some path-specific behavior already exists:

def can_handle(filename):
    &quot;&quot;&quot;Checks if this module supports the specified file type.

    Args:
      filename: A filename. It may contain directory names.
    &quot;&quot;&quot;
    return (&quot;ChangeLog&quot; in filename
            or &quot;WebKitTools/Scripts/&quot; in filename
            or os.path.splitext(filename)[1] in (&apos;.css&apos;, &apos;.html&apos;, &apos;.idl&apos;, &apos;.js&apos;, &apos;.mm&apos;, &apos;.php&apos;, &apos;.pm&apos;, &apos;.py&apos;, &apos;.txt&apos;)) and not &quot;LayoutTests/&quot; in filename

This is in text_style.py.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182577</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-19 19:15:46 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; 
&gt; Were there other use cases?

Here is another use-case for directory-specific exemptions from particular rules:

https://bugs.webkit.org/show_bug.cgi?id=33356</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185428</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-28 04:49:40 -0800</bug_when>
    <thetext>It&apos;s looking like there are potentially many cases of this, so I will implement.

Here is another one in the code:

File names of the form *_test.cpp, *_unittest.cpp, and *_regtest.cpp are exempted from the &quot;readability/streams&quot; style check:

&gt; # Many unit tests use cout, so we exempt them.
&gt; if not _is_test_filename(filename):
&gt;     error(line_number, &apos;readability/streams&apos;, 3,
&gt;           &apos;Streams are highly discouraged.&apos;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185496</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-28 08:32:40 -0800</bug_when>
    <thetext>&gt; File names of the form *_test.cpp, *_unittest.cpp, and *_regtest.cpp are
&gt; exempted from the &quot;readability/streams&quot; style check:

This might be an artifact of the fact that this script comes from Google where streams are used extensively in unit tests.  I&apos;m not sure that exemption is meaningful here in WebKit-land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185515</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-28 08:55:26 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; File names of the form *_test.cpp, *_unittest.cpp, and *_regtest.cpp are
&gt; &gt; exempted from the &quot;readability/streams&quot; style check:
&gt; 
&gt; This might be an artifact of the fact that this script comes from Google where
&gt; streams are used extensively in unit tests.  I&apos;m not sure that exemption is
&gt; meaningful here in WebKit-land.

Thanks for the info, Adam.  There seem to be other cases as well.  I didn&apos;t mention them all.  For example, it looks like the [build/include_order] errors need to be suppressed for these specific folders:

    if (filename.find(&apos;WebKitTools/WebKitAPITest/&apos;) &gt;= 0
        or filename.find(&apos;WebKit/qt/QGVLauncher/&apos;) &gt;= 0):
        # Files in this directory are consumers of the WebKit API and
        # therefore do not follow the same header including discipline as
        # WebCore.
        return</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185516</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-28 08:57:11 -0800</bug_when>
    <thetext>Yep.  I think this would be a valuable facility to have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186659</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-01 16:13:15 -0800</bug_when>
    <thetext>Retitling (or changing back to something close to the original title, actually) to reflect the result of the discussion below and how this will be fixed by the assignee.

We can always file a new report if we would like to enable NOLINT for code regions (using a word different from NOLINT), as was suggested in comment 3 and comment 5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186687</commentid>
    <comment_count>15</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-01 16:36:01 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; We can always file a new report if we would like to enable NOLINT for code
&gt; regions (using a word different from NOLINT), as was suggested in comment 3 and
&gt; comment 5.

I&apos;ve been mildly quite but watching. I think NOLINT is a bit of a crutch and should be avoided if at all possible. It clutters the code makes things uglier. (I rather have a warning on a line rather than put in NOLINT).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186701</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-01 16:53:56 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; We can always file a new report if we would like to enable NOLINT for code
&gt; &gt; regions (using a word different from NOLINT), as was suggested in comment 3 and
&gt; &gt; comment 5.
&gt; 
&gt; I&apos;ve been mildly quite but watching. I think NOLINT is a bit of a crutch and
&gt; should be avoided if at all possible. It clutters the code makes things uglier.
&gt; (I rather have a warning on a line rather than put in NOLINT).

Personally, I agree.  I just didn&apos;t want the act of retitling to be interpreted as ending discussion on that approach (in case others feel a need for it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187501</commentid>
    <comment_count>17</comment_count>
      <attachid>48066</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-03 13:48:51 -0800</bug_when>
    <thetext>Created attachment 48066
Proposed patch

Sorry this patch is on the bigger side.

I&apos;d like to break up ProcessorOptions into two classes next, as I&apos;ve described in the FIXME.

Also, I did a few scattered PEP8 touch-ups when I was near the code, but not systematically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187657</commentid>
    <comment_count>18</comment_count>
      <attachid>48066</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-02-04 00:09:08 -0800</bug_when>
    <thetext>Comment on attachment 48066
Proposed patch

Looks good in general. Especially I liked the cache structure of FilterConfiguration as it looks efficient on both CPU and memory.

&gt; +# The path-specific filter rules.
&gt; +#
&gt; +# Only the first substring match is used.  See the FilterConfiguration
&gt; +# documentation for more information on this list.

I&apos;d point the filename of FilterConfiguration. &quot;See the FilterConfiguration documentation in filter.py...&quot; ?

&gt; +        if options.filter_configuration.user_rules:
&gt; +            # Only include the filter flag if user-provided rules are present.
&gt; +            if options.filter_configuration.user_rules:
&gt; +                flags[&apos;filter&apos;] = \
&gt; +                    &quot;,&quot;.join(options.filter_configuration.user_rules)

It seems we have a redundant if.

I don&apos;t like backslashes so much and I slightly prefer

user_rules = options.filter_configuration.user_rules
if user_rules:
    flags[&apos;filter&apos;] = &quot;,&quot;.join(user_rules)

But the current structure is fine as is.

&gt; +        for rule in user_rules:
&gt; +            if not (rule.startswith(&apos;+&apos;) or rule.startswith(&apos;-&apos;)):
&gt; +                raise ValueError(&apos;Invalid filter rule &quot;%s&quot;: every rule &apos;
&gt; +                                 &apos;rule in the --filter flag must start &apos;
&gt; +                                 &apos;with + or -.&apos; % rule)

I&apos;m not sure why you moved this code chunk. As this is the check for filter rules, having this check in filter.py seems OK. Could you explain?

&gt; +        self._base_rules = base_rules
&gt; +        self._path_specific = path_specific
&gt; +        # The &quot;path_rules&quot; values are tuples rather than lists so
&gt; +        # they can be used as dictionary keys.

I guess this comment should be in the docstring of path_specific or above_path_rules_to_filter ?

&gt; +        self._path_rules_to_filter = {}
&gt; +        # Cached dictionary of path rules to CategoryFilter instance.

I think we usually put comments above the statement rather than below?

&gt; +        self._path_to_filter = {}
&gt; +        # Cached dictionary of file path to CategoryFilter instance.
&gt; +        #
&gt; +        # The same CategoryFilter instance can be shared across
&gt; +        # multiple keys. This allows us to take greater advantage of
&gt; +        # the caching done by CategoryFilter.should_check().

Ditto.

&gt; +    def should_check(self, category, path):
&gt; +        &quot;&quot;&quot;Return whether the given category should be checked.&quot;&quot;&quot;
&gt; +        return self._filter_from_path(path).should_check(category)

Could you write a docstring for this function? This function is more important than other functions as this is the interface of this class.

&gt; +        self.assertTrue(filter1.__eq__(filter2))
&gt; +        # Should not test with assertNotEqual.

Sorry, I cannot remember why we shouldn&apos;t. Could you add some more comments? Also, this comment should be in above &quot;self.assertTrue(filter1.__eq__(filter2))&quot; ?

&gt; -        # dynamic_cast is disallowed in most files.
&gt; +        # dynamic_cast is disallowed in most files .

We don&apos;t need the whitespace?

&gt; -        # It is explicitly allowed in tests, however.
&gt; -        self.assert_language_rules_check(&apos;foo_test.cpp&apos;, statement, &apos;&apos;)
&gt; -        self.assert_language_rules_check(&apos;foo_unittest.cpp&apos;, statement, &apos;&apos;)
&gt; -        self.assert_language_rules_check(&apos;foo_regtest.cpp&apos;, statement, &apos;&apos;)
&gt;  
&gt;      # We cannot test this functionality because of difference of
&gt;      # function definitions.  Anyway, we may never enable this.
&gt; @@ -2056,16 +2052,6 @@ class OrderOfIncludesTest(CppStyleTestBase):
&gt;                                           &apos;#include &lt;assert.h&gt;\n&apos;,
&gt;                                           &apos;&apos;)
&gt;  
&gt; -    def test_webkit_api_test_excluded(self):
&gt; -        self.assert_language_rules_check(&apos;WebKitTools/WebKitAPITest/Test.h&apos;,
&gt; -                                         &apos;#include &quot;foo.h&quot;\n&apos;,
&gt; -                                         &apos;&apos;)
&gt; -
&gt; -    def test_webkit_api_test_excluded(self):
&gt; -        self.assert_language_rules_check(&apos;WebKit/qt/QGVLauncher/main.cpp&apos;,
&gt; -                                         &apos;#include &quot;foo.h&quot;\n&apos;,
&gt; -                                         &apos;&apos;)
&gt; -
&gt;      def test_check_line_break_after_own_header(self):
&gt;          self.assert_language_rules_check(&apos;foo.cpp&apos;,
&gt;                                           &apos;#include &quot;config.h&quot;\n&apos;

I want to keep these tests as regression tests. I guess you feel these tests are redundant as these features are checked filter_unittest.py. But, in my humble opinion, sometimes having duplicate test code is OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187720</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-04 03:33:29 -0800</bug_when>
    <thetext>(In reply to comment #18)

Thanks a lot for all of the valuable comments.  Replies to some of your comments are below.

&gt; &gt; +# The path-specific filter rules.
&gt; &gt; +#
&gt; &gt; +# Only the first substring match is used.  See the FilterConfiguration
&gt; &gt; +# documentation for more information on this list.
&gt; 
&gt; I&apos;d point the filename of FilterConfiguration. &quot;See the FilterConfiguration
&gt; documentation in filter.py...&quot; ?

This can also be obtained from the import statement, but sure.

&gt; &gt; +        if options.filter_configuration.user_rules:
&gt; &gt; +            # Only include the filter flag if user-provided rules are present.
&gt; &gt; +            if options.filter_configuration.user_rules:
&gt; &gt; +                flags[&apos;filter&apos;] = \
&gt; &gt; +                    &quot;,&quot;.join(options.filter_configuration.user_rules)
&gt; 
&gt; It seems we have a redundant if.
&gt; 
&gt; I don&apos;t like backslashes so much and I slightly prefer
&gt;
&gt; user_rules = options.filter_configuration.user_rules
&gt; if user_rules:
&gt;     flags[&apos;filter&apos;] = &quot;,&quot;.join(user_rules)


We should probably keep a list of things like this to consider for when we add Python style rules (e.g. &quot;Do not use backslashes for line continuation.&quot;).  (This one would be in addition to the PEP 8 rules it looks like we will be adopting.)  Note that PEP 8 does include backslashes in their example illustrating where to break around binary operators.  But I am okay with WebKit advising against.

&gt; &gt; +        for rule in user_rules:
&gt; &gt; +            if not (rule.startswith(&apos;+&apos;) or rule.startswith(&apos;-&apos;)):
&gt; &gt; +                raise ValueError(&apos;Invalid filter rule &quot;%s&quot;: every rule &apos;
&gt; &gt; +                                 &apos;rule in the --filter flag must start &apos;
&gt; &gt; +                                 &apos;with + or -.&apos; % rule)
&gt; 
&gt; I&apos;m not sure why you moved this code chunk. As this is the check for filter
&gt; rules, having this check in filter.py seems OK. Could you explain?

Sure.  The immediate reason was because the CategoryFilter constructor no longer gets called right away with the new caching mechanism in FilterConfiguration.

But more generally, I like giving the caller the choice as to whether or not they want validation logic to execute at runtime.  One example is if the caller already knows a priori that the parameters are valid -- e.g. if they were validated by unit tests (as we are currently doing to some extent with the base portion of the rules and the path-specific rules).  So I would rather expose a &quot;validate&quot; method or &quot;construct with validation&quot; method over putting it in the constructor.

It also gives the caller more control as to what validation logic they want executed and what messages will display to the user in each case (without having to create new exception types for each type of error).  For example, the caller may also want to validate that the string portion of each filter rule matches the beginning of some rule in the list of all available categories (we are also doing this with the base and path-specific portions of the rules).

I will add a validate filter rules method to filter.py so the caller can instead call that -- since we don&apos;t need control over the error message text.

&gt; &gt; +        self._base_rules = base_rules
&gt; &gt; +        self._path_specific = path_specific
&gt; &gt; +        # The &quot;path_rules&quot; values are tuples rather than lists so
&gt; &gt; +        # they can be used as dictionary keys.
&gt; 
&gt; I guess this comment should be in the docstring of path_specific or
&gt; above_path_rules_to_filter ?

Sure, I can move it.  I originally put it as a code comment rather than a docstring since it seemed like more of an implementation comment rather than a usage comment. 

&gt; 
&gt; &gt; +        self._path_rules_to_filter = {}
&gt; &gt; +        # Cached dictionary of path rules to CategoryFilter instance.
&gt; 
&gt; I think we usually put comments above the statement rather than below?

Yes.  This is partly a misreading on my part of PEP8/257, which says that attribute *docstrings* should appear below the simple assignment -- not comments.  (I didn&apos;t know until recently that there even was such a thing as an &quot;attribute docstring&quot;.)

&gt; &gt; -        # It is explicitly allowed in tests, however.
&gt; &gt; -        self.assert_language_rules_check(&apos;foo_test.cpp&apos;, statement, &apos;&apos;)
&gt; &gt; -        self.assert_language_rules_check(&apos;foo_unittest.cpp&apos;, statement, &apos;&apos;)
&gt; &gt; -        self.assert_language_rules_check(&apos;foo_regtest.cpp&apos;, statement, &apos;&apos;)
&gt; &gt;  
&gt; &gt;      # We cannot test this functionality because of difference of
&gt; &gt;      # function definitions.  Anyway, we may never enable this.
&gt; &gt; @@ -2056,16 +2052,6 @@ class OrderOfIncludesTest(CppStyleTestBase):
&gt; &gt;                                           &apos;#include &lt;assert.h&gt;\n&apos;,
&gt; &gt;                                           &apos;&apos;)
&gt; &gt;  
&gt; &gt; -    def test_webkit_api_test_excluded(self):
&gt; &gt; -        self.assert_language_rules_check(&apos;WebKitTools/WebKitAPITest/Test.h&apos;,
&gt; &gt; -                                         &apos;#include &quot;foo.h&quot;\n&apos;,
&gt; &gt; -                                         &apos;&apos;)
&gt; &gt; -
&gt; &gt; -    def test_webkit_api_test_excluded(self):
&gt; &gt; -        self.assert_language_rules_check(&apos;WebKit/qt/QGVLauncher/main.cpp&apos;,
&gt; &gt; -                                         &apos;#include &quot;foo.h&quot;\n&apos;,
&gt; &gt; -                                         &apos;&apos;)
&gt; &gt; -
&gt; &gt;      def test_check_line_break_after_own_header(self):
&gt; &gt;          self.assert_language_rules_check(&apos;foo.cpp&apos;,
&gt; &gt;                                           &apos;#include &quot;config.h&quot;\n&apos;
&gt; 
&gt; I want to keep these tests as regression tests. I guess you feel these tests
&gt; are redundant as these features are checked filter_unittest.py. But, in my
&gt; humble opinion, sometimes having duplicate test code is OK.

Yes, I try to avoid test duplication if possible because it is easier to maintain.  But I also recognize the value of end-to-end tests as sanity checks.

In this case, processors/cpp_unittest.py doesn&apos;t have access to the PATH_RULES_SPECIFIER global variable, so we can&apos;t really keep these in the same location anymore (without introducing a dependency I don&apos;t think we&apos;d want to have).  What I did in the proposed patch was replace these tests with the following test code in checker_unittest.py:

+    def test_path_rules_specifier(self):
+        &quot;&quot;&quot;Check PATH_RULES_SPECIFIER.&quot;&quot;&quot;
+        all_categories = style_categories()
+        for (sub_paths, path_rules) in PATH_RULES_SPECIFIER:
+            self.assertTrue(isinstance(path_rules, tuple),
+                            &quot;Checking: &quot; + str(path_rules))
+            for rule in path_rules:
+                self.assertTrue(rule[1:] in all_categories,
+                                &quot;Checking: &quot; + rule)
+
+        # Try using the path specifier (as an &quot;end-to-end&quot; check).
+        config = FilterConfiguration(path_specific=PATH_RULES_SPECIFIER)
+        self.assertTrue(config.should_check(&quot;xxx_any_category&quot;,
+                                            &quot;xxx_non_matching_path&quot;))
+        self.assertTrue(config.should_check(&quot;xxx_any_category&quot;,
+                                            &quot;WebKitTools/WebKitAPITest/&quot;))
+        self.assertFalse(config.should_check(&quot;build/include&quot;,
+                                             &quot;WebKitTools/WebKitAPITest/&quot;))

Is this acceptable to you? I could also add more pairs to test, but I&apos;m not sure how valuable it would be since it essentially amounts to retyping strings that appear in the PATH_RULES_SPECIFIER list and no additional code is getting tested.  The one case it might be worthwhile is if you want to test the ordering of the elements, in case there are real-world paths that match more than one of the file patterns in the list.  But I don&apos;t know of any cases like that with the current PATH_RULES_SPECIFIER.

By the way, a couple things I noticed when removing those tests.  They both have the same function name (&quot;test_webkit_api_test_excluded&quot;), so I&apos;m not sure if they both get executed or not.  Also, the &apos;WebKitTools/WebKitAPITest/Test.h&apos; test continued to pass even after the refactoring (while &apos;WebKit/qt/QGVLauncher/main.cpp&apos; did not).  This turned out to be because 

&gt;     def check_next_include_order(self, header_type, file_is_header):

was getting called with file_is_header True for the first one, so it doesn&apos;t look like that one was testing the exclusion after all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187753</commentid>
    <comment_count>20</comment_count>
      <attachid>48134</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-04 05:40:23 -0800</bug_when>
    <thetext>Created attachment 48134
Proposed patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188109</commentid>
    <comment_count>21</comment_count>
      <attachid>48134</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-02-05 01:20:57 -0800</bug_when>
    <thetext>Comment on attachment 48134
Proposed patch 2

Thanks for the update, especially for a lot of comments! This looks good.

&gt; +def validate_filter_rules(filter_rules, all_categories):
&gt; +    &quot;&quot;&quot;Validate the given filter rules.
&gt; +
&gt; +    Args:
&gt; +      filter_rules: A list of boolean filter rules.
&gt; +      all_categories: A list of category names.

How about adding examples for these values?

By the way, thanks for adding this function. I think this solution is the best.

&gt; +        matches_some_category = False
&gt; +        for category in all_categories:
&gt; +            if category.startswith(rule[1:]):
&gt; +                matches_some_category = True
&gt; +                break
&gt; +        if not matches_some_category:
&gt; +            raise ValueError(&apos;Suspected incorrect filter rule &quot;%s&quot;: &apos;
&gt; +                             &quot;the rule does not match the beginning &quot;
&gt; +                             &quot;of any category name.&quot; % rule)

Python has a weird syntax for this. You may be able to simplify this code like

        for category in all_categories:
            if category.startswith(rule[1:]):
                break
        else:
            raise ValueError(&apos;Suspected incorrect filter rule &quot;%s&quot;: &apos;
                             &quot;the rule does not match the beginning &quot;
                             &quot;of any category name.&quot; % rule)

but yeah, this would look a bit strange. I&apos;m not sure if we should encourage the use of this feature, I personally like this though. Please use this syntax if you don&apos;t hate this.

&gt; In this case, processors/cpp_unittest.py doesn&apos;t have access to the
&gt; PATH_RULES_SPECIFIER global variable, so we can&apos;t really keep these in the same
&gt; location anymore (without introducing a dependency I don&apos;t think we&apos;d want to
&gt; have).  What I did in the proposed patch was replace these tests with the
&gt; following test code in checker_unittest.py:
&gt; ...
&gt; Is this acceptable to you? I could also add more pairs to test, but I&apos;m not
&gt; sure how valuable it would be since it essentially amounts to retyping strings
&gt; that appear in the PATH_RULES_SPECIFIER list and no additional code is getting
&gt; tested.  The one case it might be worthwhile is if you want to test the
&gt; ordering of the elements, in case there are real-world paths that match more
&gt; than one of the file patterns in the list.  But I don&apos;t know of any cases like
&gt; that with the current PATH_RULES_SPECIFIER.

I guess I&apos;d just add the dependency (I don&apos;t care the dependency of unittests so much), but of course, your solution is also good. Thanks for adding the end-to-end test!

As for backslashes, actually, I found backslashes are used in PEP8 (and I was a bit surprised because I&apos;d rather use parentheses) when I commented on your first patch. I&apos;m not sure if we should always avoid backslashes. I asked you to remove them for this time as it seemed we can easily remove them.

Thanks again!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188200</commentid>
    <comment_count>22</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-05 09:30:12 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 48134 [details])
&gt; &gt; +def validate_filter_rules(filter_rules, all_categories):
&gt; &gt; +    &quot;&quot;&quot;Validate the given filter rules.
&gt; &gt; +
&gt; &gt; +    Args:
&gt; &gt; +      filter_rules: A list of boolean filter rules.
&gt; &gt; +      all_categories: A list of category names.
&gt; 
&gt; How about adding examples for these values?

Sure.  I will document this better in general (e.g. add &quot;Raises&quot; section). :)

&gt; Python has a weird syntax for this. You may be able to simplify this code like
&gt; 
&gt;         for category in all_categories:
&gt;             if category.startswith(rule[1:]):
&gt;                 break
&gt;         else:
&gt;             raise ValueError(&apos;Suspected incorrect filter rule &quot;%s&quot;: &apos;
&gt;                              &quot;the rule does not match the beginning &quot;
&gt;                              &quot;of any category name.&quot; % rule)
&gt; 
&gt; but yeah, this would look a bit strange. I&apos;m not sure if we should encourage
&gt; the use of this feature, I personally like this though. Please use this syntax
&gt; if you don&apos;t hate this.

Great -- thanks a lot for letting me know about this syntax.  I am generally in favor of using any aspect of the language as long as it fits the purpose.

&gt; As for backslashes, actually, I found backslashes are used in PEP8 (and I was a
&gt; bit surprised because I&apos;d rather use parentheses) when I commented on your
&gt; first patch. I&apos;m not sure if we should always avoid backslashes. I asked you to
&gt; remove them for this time as it seemed we can easily remove them.

I agree.  Thanks again!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188256</commentid>
    <comment_count>23</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-05 12:48:39 -0800</bug_when>
    <thetext>Manually committed (via &quot;git svn dcommit&quot;) after incorporating Shinichiro&apos;s final suggestions:

http://trac.webkit.org/changeset/54439</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188258</commentid>
    <comment_count>24</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-05 12:50:57 -0800</bug_when>
    <thetext>You don&apos;t like the &quot;webkit-patch land --no-build&quot; magic? ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188263</commentid>
    <comment_count>25</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-05 13:15:35 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; You don&apos;t like the &quot;webkit-patch land --no-build&quot; magic? ;)

Oh, thanks for the tip! :)  I had forgotten that webkit-patch has a &quot;land&quot; feature in addition to &quot;land-from-bug&quot;.  There are simply too many options for committing! :)  Somewhere we should list the current &quot;best&quot; ways to commit in different scenarios (executable bit, moving files, etc) -- probably here:

http://trac.webkit.org/wiki/CommitterTips

Maybe I will organize that a bit better now that I have more experience with the different options (manual and automatic, Git and SVN).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188613</commentid>
    <comment_count>26</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-08 05:48:29 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; You don&apos;t like the &quot;webkit-patch land --no-build&quot; magic? ;)

I started to try this here--

https://bugs.webkit.org/show_bug.cgi?id=34574#c6

but it seems like &quot;webkit-patch land&quot; doesn&apos;t support landing a git commit.  Is that the case?  The command &quot;git svn dcommit&quot; even detects the git commit for you.

What would be cool is if webkit-patch could detect the git commit that hasn&apos;t been landed to the repository (like &quot;git svn dcommit&quot;), and also extract the bug number prior to updating the bugs database (e.g. from the git commit message or modified ChangeLog).  In a lot of cases can&apos;t webkit-patch be getting the bug number from what is getting landed?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48066</attachid>
            <date>2010-02-03 13:48:51 -0800</date>
            <delta_ts>2010-02-04 05:40:23 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>_patch-33684-1.txt</filename>
            <type>text/plain</type>
            <size>48191</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAzZDA2OWEyLi5iODE4YTFjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTAtMDIt
MDMgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJvdmlkZWQgYSB3YXkgaW4gY2hl
Y2std2Via2l0LXN0eWxlIHRvIHNwZWNpZnkgZmlsdGVyIHJ1bGVzCisgICAgICAgIG9uIGEgcGVy
IGZpbGUgb3IgZm9sZGVyIGJhc2lzLCB2aWEgYSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzY4NAorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5OgorICAgICAgICAgIC0g
QWRkZWQgX1BBVEhfUlVMRVNfU1BFQ0lGSUVSIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisgICAg
ICAgICAgLSBJbiBQcm9jZXNzb3JPcHRpb25zIGNsYXNzLS0KKyAgICAgICAgICAgIC0gQ2hhbmdl
ZCB0aGUgQ2F0ZWdvcnlGaWx0ZXIgYXR0cmlidXRlIHRvIEZpbHRlckNvbmZpZ3VyYXRpb24uCisg
ICAgICAgICAgICAtIEFkZGVkIHBhdGggcGFyYW1ldGVyIHRvIGlzX3JlcG9ydGFibGUoKS4KKyAg
ICAgICAgICAtIFJlbmFtZWQgQXJndW1lbnREZWZhdWx0cyBmaWx0ZXJfcnVsZXMgYXR0cmlidXRl
IHRvCisgICAgICAgICAgICBiYXNlX2ZpbHRlcl9ydWxlcy4KKyAgICAgICAgICAtIFVwZGF0ZWQg
QXJndW1lbnRQcmludGVyIGNsYXNzLgorICAgICAgICAgIC0gQWRkZWQgZmlsdGVyIHJ1bGUgdmFs
aWRhdGlvbiB0byBBcmd1bWVudFBhcnNlciAoaW5zdGVhZCBvZgorICAgICAgICAgICAgaW4gQ2F0
ZWdvcnlGaWx0ZXIgY29uc3RydWN0b3IpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCB1bml0IHRlc3Rz
IGFzIG5lY2Vzc2FyeS4KKyAgICAgICAgICAtIEFkZGVkIHVuaXQgdGVzdHMgZm9yIFBBVEhfUlVM
RVNfU1BFQ0lGSUVSLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9lcnJvcl9o
YW5kbGVycy5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgRGVmYXVsdFN0eWxlRXJyb3JIYW5kbGVy
IHRvIHVzZSBmaWxlIHBhdGggd2hlbgorICAgICAgICAgICAgY2FsbGluZyBpc19yZXBvcnRhYmxl
KCkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2Vycm9yX2hhbmRsZXJzX3Vu
aXR0ZXN0LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCB1bml0IHRlc3RzIGFzIG5lY2Vzc2FyeS4K
KworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsdGVyLnB5OgorICAgICAgICAg
IC0gTWFya2VkIENhdGVnb3J5RmlsdGVyIGludGVybmFsIHdpdGggYW4gdW5kZXJzY29yZS4KKyAg
ICAgICAgICAtIFJlbW92ZWQgYXJndW1lbnQgdmFsaWRhdGlvbiBmcm9tIENhdGVnb3J5RmlsdGVy
LgorICAgICAgICAgIC0gQWRkZWQgRmlsdGVyQ29uZmlndXJhdGlvbiBjbGFzcy4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsdGVyX3VuaXR0ZXN0LnB5OgorICAgICAgICAg
IC0gVXBkYXRlZCBDYXRlZ29yeUZpbHRlclRlc3QgY2xhc3MuCisgICAgICAgICAgLSBBZGRlZCBG
aWx0ZXJDb25maWd1cmF0aW9uVGVzdCB1bml0IHRlc3RzLgorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9wcm9jZXNzb3JzL2NwcC5weToKKyAgICAgICAgICAtIFJlbW92ZWQgX2lz
X3Rlc3RfZmlsZW5hbWUoKSBjb2RlLgorICAgICAgICAgIC0gUmVtb3ZlZCBoYXJkLWNvZGVkIHBh
dGggY2hlY2tzIGZyb20gY2hlY2tfaW5jbHVkZV9saW5lKCkuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL3Byb2Nlc3NvcnMvY3BwX3VuaXR0ZXN0LnB5OgorICAgICAgICAgIC0g
UmVtb3ZlZCB0aHJlZSB1bml0IHRlc3RzIHJlbGF0ZWQgdG8gZXhlbXB0ZWQgZmlsZXMuCisKIDIw
MTAtMDItMDIgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgU2hpbmljaGlybyBIYW1hamkuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggZGMxNGVhMy4uZjYxY2M5YiAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMzcsNyAr
MzcsNyBAQCBpbXBvcnQgc3lzCiBmcm9tIC4uIHN0eWxlX3JlZmVyZW5jZXMgaW1wb3J0IHBhcnNl
X3BhdGNoCiBmcm9tIGVycm9yX2hhbmRsZXJzIGltcG9ydCBEZWZhdWx0U3R5bGVFcnJvckhhbmRs
ZXIKIGZyb20gZXJyb3JfaGFuZGxlcnMgaW1wb3J0IFBhdGNoU3R5bGVFcnJvckhhbmRsZXIKLWZy
b20gZmlsdGVyIGltcG9ydCBDYXRlZ29yeUZpbHRlcgorZnJvbSBmaWx0ZXIgaW1wb3J0IEZpbHRl
ckNvbmZpZ3VyYXRpb24KIGZyb20gcHJvY2Vzc29ycy5jb21tb24gaW1wb3J0IGNoZWNrX25vX2Nh
cnJpYWdlX3JldHVybgogZnJvbSBwcm9jZXNzb3JzLmNvbW1vbiBpbXBvcnQgY2F0ZWdvcmllcyBh
cyBDb21tb25DYXRlZ29yaWVzCiBmcm9tIHByb2Nlc3NvcnMuY3BwIGltcG9ydCBDcHBQcm9jZXNz
b3IKQEAgLTg1LDYgKzg1LDI3IEBAIFdFQktJVF9ERUZBVUxUX0ZJTFRFUl9SVUxFUyA9IFsKICAg
ICBdCiAKIAorIyBUaGUgcGF0aC1zcGVjaWZpYyBmaWx0ZXIgcnVsZXMuCisjCisjIE9ubHkgdGhl
IGZpcnN0IHN1YnN0cmluZyBtYXRjaCBpcyB1c2VkLiAgU2VlIHRoZSBGaWx0ZXJDb25maWd1cmF0
aW9uCisjIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBsaXN0Lgor
X1BBVEhfUlVMRVNfU1BFQ0lGSUVSID0gWworICAgICMgRmlsZXMgaW4gdGhlc2UgZGlyZWN0b3Jp
ZXMgYXJlIGNvbnN1bWVycyBvZiB0aGUgV2ViS2l0CisgICAgIyBBUEkgYW5kIHRoZXJlZm9yZSBk
byBub3QgZm9sbG93IHRoZSBzYW1lIGhlYWRlciBpbmNsdWRpbmcKKyAgICAjIGRpc2NpcGxpbmUg
YXMgV2ViQ29yZS4KKyAgICAoWyJXZWJLaXRUb29scy9XZWJLaXRBUElUZXN0LyIsCisgICAgICAi
V2ViS2l0L3F0L1FHVkxhdW5jaGVyLyJdLAorICAgICAoIi1idWlsZC9pbmNsdWRlIiwKKyAgICAg
ICItcmVhZGFiaWxpdHkvc3RyZWFtcyIpKSwKKyAgICAjIFRoZXNlIHRlc3QgZmlsZSBwYXR0ZXJu
cy4KKyAgICAoWyJfdGVzdC5jcHAiLAorICAgICAgIl91bml0dGVzdC5jcHAiLAorICAgICAgIl9y
ZWd0ZXN0LmNwcCJdLAorICAgICAoIi1yZWFkYWJpbGl0eS9zdHJlYW1zIiwgICMgTWFueSB1bml0
IHRlc3RzIHVzZSBjb3V0LgorICAgICAgIi1ydW50aW1lL3J0dGkiKSksCitdCisKKwogIyBTb21l
IGZpbGVzIHNob3VsZCBiZSBza2lwcGVkIHdoZW4gY2hlY2tpbmcgc3R5bGUuIEZvciBleGFtcGxl
LAogIyBXZWJLaXQgbWFpbnRhaW5zIHNvbWUgZmlsZXMgaW4gTW96aWxsYSBzdHlsZSBvbiBwdXJw
b3NlIHRvIGVhc2UKICMgZnV0dXJlIG1lcmdlcy4KQEAgLTIwMSw0MyArMjIyLDU2IEBAIFN5bnRh
eDogJShwcm9ncmFtX25hbWUpcyBbLS12ZXJib3NlPSNdIFstLWdpdC1jb21taXQ9PFNpbmdsZUNv
bW1pdD5dIFstLW91dHB1dD12CiAgICAgcmV0dXJuIHVzYWdlCiAKIAorIyBGSVhNRTogRWxpbWlu
YXRlIHN1cHBvcnQgZm9yICJleHRyYV9mbGFnX3ZhbHVlcyIuCisjCisjIEZJWE1FOiBSZW1vdmUg
ZXZlcnl0aGluZyBmcm9tIFByb2Nlc3Nvck9wdGlvbnMgZXhjZXB0IGZvciB0aGUKKyMgICAgICAg
IGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIHBhc3NlZCB2aWEgdGhlIGNvbW1hbmQgbGluZSwgYW5k
CisjICAgICAgICByZW5hbWUgdG8gc29tZXRoaW5nIGxpa2UgQ2hlY2tXZWJLaXRTdHlsZU9wdGlv
bnMuICBUaGlzCisjICAgICAgICBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCByZW1v
dmluZyB0aGUKKyMgICAgICAgIG1heF9yZXBvcnRzX3Blcl9lcnJvciBhdHRyaWJ1dGUgYW5kIHRo
ZSBpc19yZXBvcnRhYmxlKCkKKyMgICAgICAgIG1ldGhvZC4gIFNlZSBhbHNvIHRoZSBGSVhNRSBi
ZWxvdyB0byBjcmVhdGUgYSBuZXcgY2xhc3MKKyMgICAgICAgIGNhbGxlZCBzb21ldGhpbmcgbGlr
ZSBDaGVja2VyQ29uZmlndXJhdGlvbi4KKyMKICMgVGhpcyBjbGFzcyBzaG91bGQgbm90IGhhdmUg
a25vd2xlZGdlIG9mIHRoZSBmbGFnIGtleSBuYW1lcy4KIGNsYXNzIFByb2Nlc3Nvck9wdGlvbnMo
b2JqZWN0KToKIAotICAgICIiIkEgY29udGFpbmVyIHRvIHN0b3JlIG9wdGlvbnMgdG8gdXNlIHdo
ZW4gY2hlY2tpbmcgc3R5bGUuCisgICAgIiIiQSBjb250YWluZXIgdG8gc3RvcmUgb3B0aW9ucyBw
YXNzZWQgdmlhIHRoZSBjb21tYW5kIGxpbmUuCiAKICAgICBBdHRyaWJ1dGVzOgotICAgICAgb3V0
cHV0X2Zvcm1hdDogQSBzdHJpbmcgdGhhdCBpcyB0aGUgb3V0cHV0IGZvcm1hdC4gVGhlIHN1cHBv
cnRlZAotICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGZvcm1hdHMgYXJlICJlbWFjcyIgd2hp
Y2ggZW1hY3MgY2FuIHBhcnNlCi0gICAgICAgICAgICAgICAgICAgICBhbmQgInZzNyIgd2hpY2gg
TWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gNyBjYW4gcGFyc2UuCi0KLSAgICAgIHZlcmJvc2l0eTog
QW4gaW50ZWdlciBiZXR3ZWVuIDEtNSBpbmNsdXNpdmUgdGhhdCByZXN0cmljdHMgb3V0cHV0Ci0g
ICAgICAgICAgICAgICAgIHRvIGVycm9ycyB3aXRoIGEgY29uZmlkZW5jZSBzY29yZSBhdCBvciBh
Ym92ZSB0aGlzIHZhbHVlLgotICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyAxLCB3aGlj
aCBkaXNwbGF5cyBhbGwgZXJyb3JzLgorICAgICAgZXh0cmFfZmxhZ192YWx1ZXM6IEEgc3RyaW5n
LXN0cmluZyBkaWN0aW9uYXJ5IG9mIGFsbCBmbGFnIGtleS12YWx1ZQorICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhaXJzIHRoYXQgYXJlIG5vdCBvdGhlcndpc2UgcmVwcmVzZW50ZWQgYnkgdGhp
cworICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLiAgVGhlIGRlZmF1bHQgaXMgdGhlIGVt
cHR5IGRpY3Rpb25hcnkuCiAKLSAgICAgIGZpbHRlcjogQSBDYXRlZ29yeUZpbHRlciBpbnN0YW5j
ZS4gVGhlIGRlZmF1bHQgaXMgdGhlIGVtcHR5IGZpbHRlciwKLSAgICAgICAgICAgICAgd2hpY2gg
bWVhbnMgdGhhdCBhbGwgY2F0ZWdvcmllcyBzaG91bGQgYmUgY2hlY2tlZC4KKyAgICAgIGZpbHRl
cl9jb25maWd1cmF0aW9uOiBBIEZpbHRlckNvbmZpZ3VyYXRpb24gaW5zdGFuY2UuICBUaGUgZGVm
YXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRoZSAiZW1wdHkiIGZpbHRlciBj
b25maWd1cmF0aW9uLCB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW5zIHRo
YXQgYWxsIGVycm9ycyBzaG91bGQgYmUgY2hlY2tlZC4KIAogICAgICAgZ2l0X2NvbW1pdDogQSBz
dHJpbmcgcmVwcmVzZW50aW5nIHRoZSBnaXQgY29tbWl0IHRvIGNoZWNrLgogICAgICAgICAgICAg
ICAgICAgVGhlIGRlZmF1bHQgaXMgTm9uZS4KIAotICAgICAgZXh0cmFfZmxhZ192YWx1ZXM6IEEg
c3RyaW5nLXN0cmluZyBkaWN0aW9uYXJ5IG9mIGFsbCBmbGFnIGtleS12YWx1ZQotICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhaXJzIHRoYXQgYXJlIG5vdCBvdGhlcndpc2UgcmVwcmVzZW50ZWQg
YnkgdGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLiBUaGUgZGVmYXVsdCBpcyB0
aGUgZW1wdHkgZGljdGlvbmFyeS4KKyAgICAgIG1heF9yZXBvcnRzX3Blcl9lcnJvcjogVGhlIG1h
eGltdW0gbnVtYmVyIG9mIGVycm9ycyB0byByZXBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGVyIGZpbGUsIHBlciBjYXRlZ29yeS4KIAotICAgICIiIgorICAgICAgb3V0cHV0X2Zv
cm1hdDogQSBzdHJpbmcgdGhhdCBpcyB0aGUgb3V0cHV0IGZvcm1hdC4gIFRoZSBzdXBwb3J0ZWQK
KyAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBmb3JtYXRzIGFyZSAiZW1hY3MiIHdoaWNoIGVt
YWNzIGNhbiBwYXJzZQorICAgICAgICAgICAgICAgICAgICAgYW5kICJ2czciIHdoaWNoIE1pY3Jv
c29mdCBWaXN1YWwgU3R1ZGlvIDcgY2FuIHBhcnNlLgorCisgICAgICB2ZXJib3NpdHk6IEFuIGlu
dGVnZXIgYmV0d2VlbiAxLTUgaW5jbHVzaXZlIHRoYXQgcmVzdHJpY3RzIG91dHB1dAorICAgICAg
ICAgICAgICAgICB0byBlcnJvcnMgd2l0aCBhIGNvbmZpZGVuY2Ugc2NvcmUgYXQgb3IgYWJvdmUg
dGhpcyB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgMSwgd2hpY2ggcmVw
b3J0cyBhbGwgZXJyb3JzLgogCisgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsCi0gICAg
ICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQ9ImVtYWNzIiwKLSAgICAgICAgICAgICAgICAgdmVy
Ym9zaXR5PTEsCi0gICAgICAgICAgICAgICAgIGZpbHRlcj1Ob25lLAotICAgICAgICAgICAgICAg
ICBtYXhfcmVwb3J0c19wZXJfY2F0ZWdvcnk9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZXh0cmFf
ZmxhZ192YWx1ZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZmlsdGVyX2NvbmZpZ3VyYXRpb24g
PSBOb25lLAogICAgICAgICAgICAgICAgICBnaXRfY29tbWl0PU5vbmUsCi0gICAgICAgICAgICAg
ICAgIGV4dHJhX2ZsYWdfdmFsdWVzPU5vbmUpOgorICAgICAgICAgICAgICAgICBtYXhfcmVwb3J0
c19wZXJfY2F0ZWdvcnk9Tm9uZSwKKyAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdD0iZW1h
Y3MiLAorICAgICAgICAgICAgICAgICB2ZXJib3NpdHk9MSk6CiAgICAgICAgIGlmIGV4dHJhX2Zs
YWdfdmFsdWVzIGlzIE5vbmU6CiAgICAgICAgICAgICBleHRyYV9mbGFnX3ZhbHVlcyA9IHt9Ci0g
ICAgICAgIGlmIGZpbHRlciBpcyBOb25lOgotICAgICAgICAgICAgZmlsdGVyID0gQ2F0ZWdvcnlG
aWx0ZXIoKQorICAgICAgICBpZiBmaWx0ZXJfY29uZmlndXJhdGlvbiBpcyBOb25lOgorICAgICAg
ICAgICAgZmlsdGVyX2NvbmZpZ3VyYXRpb24gPSBGaWx0ZXJDb25maWd1cmF0aW9uKCkKICAgICAg
ICAgaWYgbWF4X3JlcG9ydHNfcGVyX2NhdGVnb3J5IGlzIE5vbmU6CiAgICAgICAgICAgICBtYXhf
cmVwb3J0c19wZXJfY2F0ZWdvcnkgPSB7fQogCkBAIC0yNTIsNyArMjg2LDcgQEAgY2xhc3MgUHJv
Y2Vzc29yT3B0aW9ucyhvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVmFs
dWUgZ2l2ZW46ICIlcyIuJyAlIHZlcmJvc2l0eSkKIAogICAgICAgICBzZWxmLmV4dHJhX2ZsYWdf
dmFsdWVzID0gZXh0cmFfZmxhZ192YWx1ZXMKLSAgICAgICAgc2VsZi5maWx0ZXIgPSBmaWx0ZXIK
KyAgICAgICAgc2VsZi5maWx0ZXJfY29uZmlndXJhdGlvbiA9IGZpbHRlcl9jb25maWd1cmF0aW9u
CiAgICAgICAgIHNlbGYuZ2l0X2NvbW1pdCA9IGdpdF9jb21taXQKICAgICAgICAgc2VsZi5tYXhf
cmVwb3J0c19wZXJfY2F0ZWdvcnkgPSBtYXhfcmVwb3J0c19wZXJfY2F0ZWdvcnkKICAgICAgICAg
c2VsZi5vdXRwdXRfZm9ybWF0ID0gb3V0cHV0X2Zvcm1hdApAQCAtMjYzLDcgKzI5Nyw3IEBAIGNs
YXNzIFByb2Nlc3Nvck9wdGlvbnMob2JqZWN0KToKICAgICAgICAgIiIiUmV0dXJuIHdoZXRoZXIg
dGhpcyBQcm9jZXNzb3JPcHRpb25zIGluc3RhbmNlIGlzIGVxdWFsIHRvIGFub3RoZXIuIiIiCiAg
ICAgICAgIGlmIHNlbGYuZXh0cmFfZmxhZ192YWx1ZXMgIT0gb3RoZXIuZXh0cmFfZmxhZ192YWx1
ZXM6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgaWYgc2VsZi5maWx0ZXIgIT0g
b3RoZXIuZmlsdGVyOgorICAgICAgICBpZiBzZWxmLmZpbHRlcl9jb25maWd1cmF0aW9uICE9IG90
aGVyLmZpbHRlcl9jb25maWd1cmF0aW9uOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAg
ICAgIGlmIHNlbGYuZ2l0X2NvbW1pdCAhPSBvdGhlci5naXRfY29tbWl0OgogICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCkBAIC0yNzgsMTUgKzMxMiwxNiBAQCBjbGFzcyBQcm9jZXNzb3JPcHRpb25z
KG9iamVjdCk6CiAKICAgICAjIFVzZWZ1bCBmb3IgdW5pdCB0ZXN0aW5nLgogICAgIGRlZiBfX25l
X18oc2VsZiwgb3RoZXIpOgotICAgICAgICAjIFB5dGhvbiBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5
IGRlZHVjZSBmcm9tIF9fZXFfXygpLgotICAgICAgICByZXR1cm4gbm90IChzZWxmID09IG90aGVy
KQorICAgICAgICAjIFB5dGhvbiBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGRlZHVjZSB0aGlzIGZy
b20gX19lcV9fKCkuCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fX2VxX18ob3RoZXIpCiAKLSAg
ICBkZWYgaXNfcmVwb3J0YWJsZShzZWxmLCBjYXRlZ29yeSwgY29uZmlkZW5jZV9pbl9lcnJvcik6
CisgICAgZGVmIGlzX3JlcG9ydGFibGUoc2VsZiwgY2F0ZWdvcnksIGNvbmZpZGVuY2VfaW5fZXJy
b3IsIHBhdGgpOgogICAgICAgICAiIiJSZXR1cm4gd2hldGhlciBhbiBlcnJvciBpcyByZXBvcnRh
YmxlLgogCiAgICAgICAgIEFuIGVycm9yIGlzIHJlcG9ydGFibGUgaWYgdGhlIGNvbmZpZGVuY2Ug
aW4gdGhlIGVycm9yCiAgICAgICAgIGlzIGF0IGxlYXN0IHRoZSBjdXJyZW50IHZlcmJvc2l0eSBs
ZXZlbCwgYW5kIGlmIHRoZSBjdXJyZW50Ci0gICAgICAgIGZpbHRlciBzYXlzIHRoYXQgdGhlIGNh
dGVnb3J5IHNob3VsZCBiZSBjaGVja2VkLgorICAgICAgICBmaWx0ZXIgc2F5cyB0aGF0IHRoZSBj
YXRlZ29yeSBzaG91bGQgYmUgY2hlY2tlZCBmb3IgdGhlCisgICAgICAgIGdpdmVuIHBhdGguCiAK
ICAgICAgICAgQXJnczoKICAgICAgICAgICBjYXRlZ29yeTogQSBzdHJpbmcgdGhhdCBpcyBhIHN0
eWxlIGNhdGVnb3J5LgpAQCAtMjk0LDE1ICszMjksMTMgQEAgY2xhc3MgUHJvY2Vzc29yT3B0aW9u
cyhvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudHMgdGhl
IGFwcGxpY2F0aW9uJ3MgY29uZmlkZW5jZSBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoZSBlcnJvci4gQSBoaWdoZXIgbnVtYmVyIHNpZ25pZmllcyBncmVhdGVyCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlkZW5jZS4KKyAgICAgICAgICBwYXRoOiBUaGUg
cGF0aCBvZiB0aGUgZmlsZSBiZWluZyBjaGVja2VkCiAKICAgICAgICAgIiIiCiAgICAgICAgIGlm
IGNvbmZpZGVuY2VfaW5fZXJyb3IgPCBzZWxmLnZlcmJvc2l0eToKICAgICAgICAgICAgIHJldHVy
biBGYWxzZQogCi0gICAgICAgIGlmIHNlbGYuZmlsdGVyIGlzIE5vbmU6Ci0gICAgICAgICAgICBy
ZXR1cm4gVHJ1ZSAjIEFsbCBjYXRlZ29yaWVzIHNob3VsZCBiZSBjaGVja2VkIGJ5IGRlZmF1bHQu
Ci0KLSAgICAgICAgcmV0dXJuIHNlbGYuZmlsdGVyLnNob3VsZF9jaGVjayhjYXRlZ29yeSkKKyAg
ICAgICAgcmV0dXJuIHNlbGYuZmlsdGVyX2NvbmZpZ3VyYXRpb24uc2hvdWxkX2NoZWNrKGNhdGVn
b3J5LCBwYXRoKQogCiAKICMgVGhpcyBjbGFzcyBzaG91bGQgbm90IGhhdmUga25vd2xlZGdlIG9m
IHRoZSBmbGFnIGtleSBuYW1lcy4KQEAgLTMxMywxNiArMzQ2LDE2IEBAIGNsYXNzIEFyZ3VtZW50
RGVmYXVsdHMob2JqZWN0KToKICAgICBBdHRyaWJ1dGVzOgogICAgICAgb3V0cHV0X2Zvcm1hdDog
QSBzdHJpbmcgdGhhdCBpcyB0aGUgZGVmYXVsdCBvdXRwdXQgZm9ybWF0LgogICAgICAgdmVyYm9z
aXR5OiBBbiBpbnRlZ2VyIHRoYXQgaXMgdGhlIGRlZmF1bHQgdmVyYm9zaXR5IGxldmVsLgotICAg
ICAgZmlsdGVyX3J1bGVzOiBBIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IGFyZSBib29sZWFuIGZpbHRl
ciBydWxlcwotICAgICAgICAgICAgICAgICAgICB0byBwcmVwZW5kIHRvIGFueSB1c2VyLXNwZWNp
ZmllZCBydWxlcy4KKyAgICAgIGJhc2VfZmlsdGVyX3J1bGVzOiBBIGxpc3Qgb2Ygc3RyaW5ncyB0
aGF0IGFyZSBib29sZWFuIGZpbHRlciBydWxlcworICAgICAgICAgICAgICAgICAgICAgICAgIHRv
IHByZXBlbmQgdG8gYW55IHVzZXItc3BlY2lmaWVkIHJ1bGVzLgogCiAgICAgIiIiCiAKICAgICBk
ZWYgX19pbml0X18oc2VsZiwgZGVmYXVsdF9vdXRwdXRfZm9ybWF0LCBkZWZhdWx0X3ZlcmJvc2l0
eSwKLSAgICAgICAgICAgICAgICAgZGVmYXVsdF9maWx0ZXJfcnVsZXMpOgorICAgICAgICAgICAg
ICAgICBkZWZhdWx0X2Jhc2VfZmlsdGVyX3J1bGVzKToKICAgICAgICAgc2VsZi5vdXRwdXRfZm9y
bWF0ID0gZGVmYXVsdF9vdXRwdXRfZm9ybWF0CiAgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gZGVm
YXVsdF92ZXJib3NpdHkKLSAgICAgICAgc2VsZi5maWx0ZXJfcnVsZXMgPSBkZWZhdWx0X2ZpbHRl
cl9ydWxlcworICAgICAgICBzZWxmLmJhc2VfZmlsdGVyX3J1bGVzID0gZGVmYXVsdF9iYXNlX2Zp
bHRlcl9ydWxlcwogCiAKIGNsYXNzIEFyZ3VtZW50UHJpbnRlcihvYmplY3QpOgpAQCAtMzQ1LDEx
ICszNzgsMTEgQEAgY2xhc3MgQXJndW1lbnRQcmludGVyKG9iamVjdCk6CiAKICAgICAgICAgZmxh
Z3NbJ291dHB1dCddID0gb3B0aW9ucy5vdXRwdXRfZm9ybWF0CiAgICAgICAgIGZsYWdzWyd2ZXJi
b3NlJ10gPSBvcHRpb25zLnZlcmJvc2l0eQotICAgICAgICBpZiBvcHRpb25zLmZpbHRlcjoKLSAg
ICAgICAgICAgICMgT25seSBpbmNsdWRlIHRoZSBmaWx0ZXIgZmxhZyBpZiBydWxlcyBhcmUgcHJl
c2VudC4KLSAgICAgICAgICAgIGZpbHRlcl9zdHJpbmcgPSBzdHIob3B0aW9ucy5maWx0ZXIpCi0g
ICAgICAgICAgICBpZiBmaWx0ZXJfc3RyaW5nOgotICAgICAgICAgICAgICAgIGZsYWdzWydmaWx0
ZXInXSA9IGZpbHRlcl9zdHJpbmcKKyAgICAgICAgaWYgb3B0aW9ucy5maWx0ZXJfY29uZmlndXJh
dGlvbi51c2VyX3J1bGVzOgorICAgICAgICAgICAgIyBPbmx5IGluY2x1ZGUgdGhlIGZpbHRlciBm
bGFnIGlmIHVzZXItcHJvdmlkZWQgcnVsZXMgYXJlIHByZXNlbnQuCisgICAgICAgICAgICBpZiBv
cHRpb25zLmZpbHRlcl9jb25maWd1cmF0aW9uLnVzZXJfcnVsZXM6CisgICAgICAgICAgICAgICAg
ZmxhZ3NbJ2ZpbHRlciddID0gXAorICAgICAgICAgICAgICAgICAgICAiLCIuam9pbihvcHRpb25z
LmZpbHRlcl9jb25maWd1cmF0aW9uLnVzZXJfcnVsZXMpCiAgICAgICAgIGlmIG9wdGlvbnMuZ2l0
X2NvbW1pdDoKICAgICAgICAgICAgIGZsYWdzWydnaXQtY29tbWl0J10gPSBvcHRpb25zLmdpdF9j
b21taXQKIApAQCAtNDA5LDcgKzQ0Miw3IEBAIGNsYXNzIEFyZ3VtZW50UGFyc2VyKG9iamVjdCk6
CiAgICAgICAgICAgICBzZWxmLmRvY19wcmludCgnICAgICcgKyBjYXRlZ29yeSArICdcbicpCiAK
ICAgICAgICAgc2VsZi5kb2NfcHJpbnQoJ1xuRGVmYXVsdCBmaWx0ZXIgcnVsZXMqKjpcbicpCi0g
ICAgICAgIGZvciBmaWx0ZXJfcnVsZSBpbiBzb3J0ZWQoc2VsZi5kZWZhdWx0cy5maWx0ZXJfcnVs
ZXMpOgorICAgICAgICBmb3IgZmlsdGVyX3J1bGUgaW4gc29ydGVkKHNlbGYuZGVmYXVsdHMuYmFz
ZV9maWx0ZXJfcnVsZXMpOgogICAgICAgICAgICAgc2VsZi5kb2NfcHJpbnQoJyAgICAnICsgZmls
dGVyX3J1bGUgKyAnXG4nKQogICAgICAgICBzZWxmLmRvY19wcmludCgnXG4qKlRoZSBjb21tYW5k
IGFsd2F5cyBldmFsdWF0ZXMgdGhlIGFib3ZlIHJ1bGVzLCAnCiAgICAgICAgICAgICAgICAgICAg
ICAgICdhbmQgYmVmb3JlIGFueSAtLWZpbHRlciBmbGFnLlxuXG4nKQpAQCAtNDE3LDEwICs0NTAs
NyBAQCBjbGFzcyBBcmd1bWVudFBhcnNlcihvYmplY3QpOgogICAgICAgICBzeXMuZXhpdCgwKQog
CiAgICAgZGVmIF9wYXJzZV9maWx0ZXJfZmxhZyhzZWxmLCBmbGFnX3ZhbHVlKToKLSAgICAgICAg
IiIiUGFyc2UgdGhlIHZhbHVlIG9mIHRoZSAtLWZpbHRlciBmbGFnLgotCi0gICAgICAgIFRoZXNl
IGZpbHRlcnMgYXJlIGFwcGxpZWQgd2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIGVtaXQgYSBnaXZl
bgotICAgICAgICBlcnJvciBtZXNzYWdlLgorICAgICAgICAiIiJQYXJzZSB0aGUgLS1maWx0ZXIg
ZmxhZywgYW5kIHJldHVybiBhIGxpc3Qgb2YgZmlsdGVyIHJ1bGVzLgogCiAgICAgICAgIEFyZ3M6
CiAgICAgICAgICAgZmxhZ192YWx1ZTogQSBzdHJpbmcgb2YgY29tbWEtc2VwYXJhdGVkIGZpbHRl
ciBydWxlcywgZm9yCkBAIC00NTcsNyArNDg3LDcgQEAgY2xhc3MgQXJndW1lbnRQYXJzZXIob2Jq
ZWN0KToKIAogICAgICAgICBvdXRwdXRfZm9ybWF0ID0gc2VsZi5kZWZhdWx0cy5vdXRwdXRfZm9y
bWF0CiAgICAgICAgIHZlcmJvc2l0eSA9IHNlbGYuZGVmYXVsdHMudmVyYm9zaXR5Ci0gICAgICAg
IGZpbHRlcl9ydWxlcyA9IHNlbGYuZGVmYXVsdHMuZmlsdGVyX3J1bGVzCisgICAgICAgIGJhc2Vf
cnVsZXMgPSBzZWxmLmRlZmF1bHRzLmJhc2VfZmlsdGVyX3J1bGVzCiAKICAgICAgICAgIyBUaGUg
ZmxhZ3MgYWxyZWFkeSBzdXBwb3J0ZWQgYnkgdGhlIFByb2Nlc3Nvck9wdGlvbnMgY2xhc3MuCiAg
ICAgICAgIGZsYWdzID0gWydoZWxwJywgJ291dHB1dD0nLCAndmVyYm9zZT0nLCAnZmlsdGVyPScs
ICdnaXQtY29tbWl0PSddCkBAIC00ODAsNiArNTEwLDcgQEAgY2xhc3MgQXJndW1lbnRQYXJzZXIo
b2JqZWN0KToKIAogICAgICAgICBleHRyYV9mbGFnX3ZhbHVlcyA9IHt9CiAgICAgICAgIGdpdF9j
b21taXQgPSBOb25lCisgICAgICAgIHVzZXJfcnVsZXMgPSBbXQogCiAgICAgICAgIGZvciAob3B0
LCB2YWwpIGluIG9wdHM6CiAgICAgICAgICAgICBpZiBvcHQgPT0gJy0taGVscCc6CkBAIC00OTQs
NyArNTI1LDcgQEAgY2xhc3MgQXJndW1lbnRQYXJzZXIob2JqZWN0KToKICAgICAgICAgICAgICAg
ICBpZiBub3QgdmFsOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9leGl0X3dpdGhfY2F0ZWdv
cmllcygpCiAgICAgICAgICAgICAgICAgIyBQcmVwZW5kIHRoZSBkZWZhdWx0cy4KLSAgICAgICAg
ICAgICAgICBmaWx0ZXJfcnVsZXMgPSBmaWx0ZXJfcnVsZXMgKyBzZWxmLl9wYXJzZV9maWx0ZXJf
ZmxhZyh2YWwpCisgICAgICAgICAgICAgICAgdXNlcl9ydWxlcyA9IHNlbGYuX3BhcnNlX2ZpbHRl
cl9mbGFnKHZhbCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZXh0cmFfZmxh
Z192YWx1ZXNbb3B0XSA9IHZhbAogCkBAIC01MDgsMTUgKzUzOSwyMyBAQCBjbGFzcyBBcmd1bWVu
dFBhcnNlcihvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxsb3dlZCBv
dXRwdXQgZm9ybWF0cyBhcmUgZW1hY3MgYW5kIHZzNy4nICUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0X2Zvcm1hdCkKIAorICAgICAgICBmb3IgcnVsZSBpbiB1c2VyX3J1bGVz
OgorICAgICAgICAgICAgaWYgbm90IChydWxlLnN0YXJ0c3dpdGgoJysnKSBvciBydWxlLnN0YXJ0
c3dpdGgoJy0nKSk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBm
aWx0ZXIgcnVsZSAiJXMiOiBldmVyeSBydWxlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdydWxlIGluIHRoZSAtLWZpbHRlciBmbGFnIG11c3Qgc3RhcnQgJworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggKyBvciAtLicgJSBydWxlKQorCiAgICAgICAg
IHZlcmJvc2l0eSA9IGludCh2ZXJib3NpdHkpCiAgICAgICAgIGlmICh2ZXJib3NpdHkgPCAxKSBv
ciAodmVyYm9zaXR5ID4gNSk6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlk
IC0tdmVyYm9zZSB2YWx1ZSAlczogdmFsdWUgbXVzdCAnCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdiZSBiZXR3ZWVuIDEtNS4nICUgdmVyYm9zaXR5KQogCi0gICAgICAgIGZpbHRlciA9
IENhdGVnb3J5RmlsdGVyKGZpbHRlcl9ydWxlcykKKyAgICAgICAgZmlsdGVyX2NvbmZpZ3VyYXRp
b24gPSBGaWx0ZXJDb25maWd1cmF0aW9uKGJhc2VfcnVsZXM9YmFzZV9ydWxlcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9zcGVjaWZpYz1fUEFUSF9SVUxFU19TUEVD
SUZJRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfcnVsZXM9dXNl
cl9ydWxlcykKIAogICAgICAgICBvcHRpb25zID0gUHJvY2Vzc29yT3B0aW9ucyhleHRyYV9mbGFn
X3ZhbHVlcz1leHRyYV9mbGFnX3ZhbHVlcywKLSAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI9
ZmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9jb25maWd1cmF0aW9uPWZpbHRl
cl9jb25maWd1cmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgIGdpdF9jb21taXQ9Z2l0X2Nv
bW1pdCwKICAgICAgICAgICAgICAgICAgICAgICBtYXhfcmVwb3J0c19wZXJfY2F0ZWdvcnk9TUFY
X1JFUE9SVFNfUEVSX0NBVEVHT1JZLAogICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3Jt
YXQ9b3V0cHV0X2Zvcm1hdCwKQEAgLTYyMyw2ICs2NjIsMTggQEAgY2xhc3MgUHJvY2Vzc29yRGlz
cGF0Y2hlcihvYmplY3QpOgogICAgICAgICByZXR1cm4gcHJvY2Vzc29yCiAKIAorIyBGSVhNRTog
V2hlbiBjcmVhdGluZyB0aGUgbmV3IENoZWNrV2ViS2l0U3R5bGVPcHRpb25zIGNsYXNzIGFzCisj
ICAgICAgICBkZXNjcmliZWQgaW4gYSBGSVhNRSBhYm92ZSwgYWRkIGEgbmV3IGNsYXNzIGhlcmUg
Y2FsbGVkCisjICAgICAgICBzb21ldGhpbmcgbGlrZSBDaGVja2VyQ29uZmlndXJhdGlvbi4gIFRo
ZSBjbGFzcyBzaG91bGQgY29udGFpbgorIyAgICAgICAgYXR0cmlidXRlcyBmb3Igb3B0aW9ucyBu
ZWVkZWQgdG8gcHJvY2VzcyBhIGZpbGUuICBUaGlzIGluY2x1ZGVzCisjICAgICAgICBhIHN1YnNl
dCBvZiB0aGUgQ2hlY2tXZWJLaXRTdHlsZU9wdGlvbnMgYXR0cmlidXRlcywgYQorIyAgICAgICAg
RmlsdGVyQ29uZmlndXJhdGlvbiBhdHRyaWJ1dGUsIGFuIHN0ZGVycl93cml0ZSBhdHRyaWJ1dGUs
IGEKKyMgICAgICAgIG1heF9yZXBvcnRzX3Blcl9jYXRlZ29yeSBhdHRyaWJ1dGUsIGV0Yy4gIEl0
IGNhbiBhbHNvIGluY2x1ZGUKKyMgICAgICAgIHRoZSBpc19yZXBvcnRhYmxlKCkgbWV0aG9kLiAg
VGhlIFN0eWxlQ2hlY2tlciBzaG91bGQgYWNjZXB0CisjICAgICAgICBhbiBpbnN0YW5jZSBvZiB0
aGlzIGNsYXNzIHJhdGhlciB0aGFuIGEgUHJvY2Vzc29yT3B0aW9ucworIyAgICAgICAgaW5zdGFu
Y2UuCisKKwogY2xhc3MgU3R5bGVDaGVja2VyKG9iamVjdCk6CiAKICAgICAiIiJTdXBwb3J0cyBj
aGVja2luZyBzdHlsZSBpbiBmaWxlcyBhbmQgcGF0Y2hlcy4KZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQppbmRleCA4MTRi
ZDQxLi44OTVhMjdlIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5CkBAIC0zNywxMCArMzcsMTIgQEAKIGltcG9ydCB1
bml0dGVzdAogCiBpbXBvcnQgY2hlY2tlciBhcyBzdHlsZQorZnJvbSBjaGVja2VyIGltcG9ydCBf
UEFUSF9SVUxFU19TUEVDSUZJRVIgYXMgUEFUSF9SVUxFU19TUEVDSUZJRVIKK2Zyb20gY2hlY2tl
ciBpbXBvcnQgc3R5bGVfY2F0ZWdvcmllcwogZnJvbSBjaGVja2VyIGltcG9ydCBQcm9jZXNzb3JE
aXNwYXRjaGVyCiBmcm9tIGNoZWNrZXIgaW1wb3J0IFByb2Nlc3Nvck9wdGlvbnMKIGZyb20gY2hl
Y2tlciBpbXBvcnQgU3R5bGVDaGVja2VyCi1mcm9tIGZpbHRlciBpbXBvcnQgQ2F0ZWdvcnlGaWx0
ZXIKK2Zyb20gZmlsdGVyIGltcG9ydCBGaWx0ZXJDb25maWd1cmF0aW9uCiBmcm9tIHByb2Nlc3Nv
cnMuY3BwIGltcG9ydCBDcHBQcm9jZXNzb3IKIGZyb20gcHJvY2Vzc29ycy50ZXh0IGltcG9ydCBU
ZXh0UHJvY2Vzc29yCiAKQEAgLTU0LDcgKzU2LDcgQEAgY2xhc3MgUHJvY2Vzc29yT3B0aW9uc1Rl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAjIENoZWNrIGRlZmF1bHQgcGFyYW1ldGVy
cy4KICAgICAgICAgb3B0aW9ucyA9IFByb2Nlc3Nvck9wdGlvbnMoKQogICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhvcHRpb25zLmV4dHJhX2ZsYWdfdmFsdWVzLCB7fSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMob3B0aW9ucy5maWx0ZXIsIENhdGVnb3J5RmlsdGVyKCkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMuZmlsdGVyX2NvbmZpZ3VyYXRpb24sIEZpbHRlckNvbmZp
Z3VyYXRpb24oKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5naXRfY29tbWl0
LCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLm1heF9yZXBvcnRzX3Bl
cl9jYXRlZ29yeSwge30pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMub3V0cHV0
X2Zvcm1hdCwgImVtYWNzIikKQEAgLTcwLDE0ICs3MiwxNSBAQCBjbGFzcyBQcm9jZXNzb3JPcHRp
b25zVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIFByb2Nlc3Nvck9wdGlvbnModmVy
Ym9zaXR5PTUpICMgd29ya3MKIAogICAgICAgICAjIENoZWNrIGF0dHJpYnV0ZXMuCisgICAgICAg
IGZpbHRlcl9jb25maWd1cmF0aW9uID0gRmlsdGVyQ29uZmlndXJhdGlvbihiYXNlX3J1bGVzPVsi
KyJdKQogICAgICAgICBvcHRpb25zID0gUHJvY2Vzc29yT3B0aW9ucyhleHRyYV9mbGFnX3ZhbHVl
cz17ImV4dHJhX3ZhbHVlIiA6IDJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWx0ZXI9Q2F0ZWdvcnlGaWx0ZXIoWyIrIl0pLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaWx0ZXJfY29uZmlndXJhdGlvbj1maWx0ZXJfY29uZmlndXJhdGlvbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l0X2NvbW1pdD0iY29tbWl0IiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3JlcG9ydHNfcGVyX2NhdGVnb3J5
PXsiY2F0ZWdvcnkiOiAzfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0X2Zvcm1hdD0idnM3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVy
Ym9zaXR5PTMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMuZXh0cmFfZmxhZ192
YWx1ZXMsIHsiZXh0cmFfdmFsdWUiIDogMn0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9w
dGlvbnMuZmlsdGVyLCBDYXRlZ29yeUZpbHRlcihbIisiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKG9wdGlvbnMuZmlsdGVyX2NvbmZpZ3VyYXRpb24sIGZpbHRlcl9jb25maWd1cmF0aW9u
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLmdpdF9jb21taXQsICJjb21taXQi
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLm1heF9yZXBvcnRzX3Blcl9jYXRl
Z29yeSwgeyJjYXRlZ29yeSI6IDN9KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25z
Lm91dHB1dF9mb3JtYXQsICJ2czciKQpAQCAtODgsMTUgKzkxLDE4IEBAIGNsYXNzIFByb2Nlc3Nv
ck9wdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgIyA9PSBjYWxscyBfX2Vx
X18uCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQcm9jZXNzb3JPcHRpb25zKCkgPT0gUHJvY2Vz
c29yT3B0aW9ucygpKQogCi0gICAgICAgICMgVmVyaWZ5IHRoYXQgYSBkaWZmZXJlbmNlIGluIGFu
eSBhcmd1bWVudCBjYXVzZSBlcXVhbGl0eSB0byBmYWlsLgorICAgICAgICAjIFZlcmlmeSB0aGF0
IGEgZGlmZmVyZW5jZSBpbiBhbnkgYXJndW1lbnQgY2F1c2VzIGVxdWFsaXR5IHRvIGZhaWwuCisg
ICAgICAgIGZpbHRlcl9jb25maWd1cmF0aW9uID0gRmlsdGVyQ29uZmlndXJhdGlvbihiYXNlX3J1
bGVzPVsiKyJdKQogICAgICAgICBvcHRpb25zID0gUHJvY2Vzc29yT3B0aW9ucyhleHRyYV9mbGFn
X3ZhbHVlcz17ImV4dHJhX3ZhbHVlIiA6IDF9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaWx0ZXI9Q2F0ZWdvcnlGaWx0ZXIoWyIrIl0pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaWx0ZXJfY29uZmlndXJhdGlvbj1maWx0ZXJfY29uZmlndXJhdGlv
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l0X2NvbW1pdD0iY29tbWl0
IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3JlcG9ydHNfcGVyX2Nh
dGVnb3J5PXsiY2F0ZWdvcnkiOiAzfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0X2Zvcm1hdD0idnM3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmVyYm9zaXR5PTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3B0aW9ucyA9PSBQcm9j
ZXNzb3JPcHRpb25zKGV4dHJhX2ZsYWdfdmFsdWVzPXsiZXh0cmFfdmFsdWUiIDogMn0pKQotICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKG9wdGlvbnMgPT0gUHJvY2Vzc29yT3B0aW9ucyhmaWx0ZXI9
Q2F0ZWdvcnlGaWx0ZXIoWyItIl0pKSkKKyAgICAgICAgbmV3X2NvbmZpZyA9IEZpbHRlckNvbmZp
Z3VyYXRpb24oYmFzZV9ydWxlcz1bIi0iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcHRp
b25zID09CisgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc29yT3B0aW9ucyhmaWx0ZXJf
Y29uZmlndXJhdGlvbj1uZXdfY29uZmlnKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcHRp
b25zID09IFByb2Nlc3Nvck9wdGlvbnMoZ2l0X2NvbW1pdD0iY29tbWl0MiIpKQogICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKG9wdGlvbnMgPT0gUHJvY2Vzc29yT3B0aW9ucyhtYXhfcmVwb3J0c19w
ZXJfY2F0ZWdvcnk9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsiY2F0ZWdvcnkiOiAyfSkpCkBAIC0xMTMsMTYgKzExOSwxNyBAQCBjbGFzcyBQ
cm9jZXNzb3JPcHRpb25zVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9p
c19yZXBvcnRhYmxlKHNlbGYpOgogICAgICAgICAiIiJUZXN0IGlzX3JlcG9ydGFibGUoKS4iIiIK
LSAgICAgICAgZmlsdGVyID0gQ2F0ZWdvcnlGaWx0ZXIoWyIteHl6Il0pCi0gICAgICAgIG9wdGlv
bnMgPSBQcm9jZXNzb3JPcHRpb25zKGZpbHRlcj1maWx0ZXIsIHZlcmJvc2l0eT0zKQorICAgICAg
ICBmaWx0ZXJfY29uZmlndXJhdGlvbiA9IEZpbHRlckNvbmZpZ3VyYXRpb24oYmFzZV9ydWxlcz1b
Ii14eXoiXSkKKyAgICAgICAgb3B0aW9ucyA9IFByb2Nlc3Nvck9wdGlvbnMoZmlsdGVyX2NvbmZp
Z3VyYXRpb249ZmlsdGVyX2NvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZlcmJvc2l0eT0zKQogCiAgICAgICAgICMgVGVzdCB2ZXJib3NpdHkKLSAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKG9wdGlvbnMuaXNfcmVwb3J0YWJsZSgiYWJjIiwgMykpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3B0aW9ucy5pc19yZXBvcnRhYmxlKCJhYmMiLCAyKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wdGlvbnMuaXNfcmVwb3J0YWJsZSgiYWJjIiwgMywgImZv
by5oIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3B0aW9ucy5pc19yZXBvcnRhYmxlKCJh
YmMiLCAyLCAiZm9vLmgiKSkKIAogICAgICAgICAjIFRlc3QgZmlsdGVyCi0gICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShvcHRpb25zLmlzX3JlcG9ydGFibGUoInh5IiwgMykpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2Uob3B0aW9ucy5pc19yZXBvcnRhYmxlKCJ4eXoiLCAzKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKG9wdGlvbnMuaXNfcmVwb3J0YWJsZSgieHkiLCAzLCAiZm9vLmgiKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcHRpb25zLmlzX3JlcG9ydGFibGUoInh5eiIsIDMsICJm
b28uaCIpKQogCiAKIGNsYXNzIEdsb2JhbFZhcmlhYmxlc1Rlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgpAQCAtMTM2LDcgKzE0Myw3IEBAIGNsYXNzIEdsb2JhbFZhcmlhYmxlc1Rlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgICAgICBkZWZhdWx0cyA9IHNlbGYuZGVmYXVsdHMoKQogICAgICAgICBh
bHJlYWR5X3NlZW4gPSBbXQogICAgICAgICBhbGxfY2F0ZWdvcmllcyA9IHN0eWxlLnN0eWxlX2Nh
dGVnb3JpZXMoKQotICAgICAgICBmb3IgcnVsZSBpbiBkZWZhdWx0cy5maWx0ZXJfcnVsZXM6Cisg
ICAgICAgIGZvciBydWxlIGluIGRlZmF1bHRzLmJhc2VfZmlsdGVyX3J1bGVzOgogICAgICAgICAg
ICAgIyBDaGVjayBubyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlIHNwYWNlLgogICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMocnVsZSwgcnVsZS5zdHJpcCgpKQogICAgICAgICAgICAgIyBB
bGwgY2F0ZWdvcmllcyBhcmUgb24gYnkgZGVmYXVsdCwgc28gZGVmYXVsdHMgc2hvdWxkCkBAIC0x
NTgsNiArMTY1LDI1IEBAIGNsYXNzIEdsb2JhbFZhcmlhYmxlc1Rlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgogICAgICAgICAjIG9uIHZhbGlkIGFyZ3VtZW50cyBlbHNld2hlcmUuCiAgICAgICAgIHBh
cnNlci5wYXJzZShbXSkgIyBhcmd1bWVudHMgdmFsaWQ6IG5vIGVycm9yIG9yIFN5c3RlbUV4aXQK
IAorICAgIGRlZiB0ZXN0X3BhdGhfcnVsZXNfc3BlY2lmaWVyKHNlbGYpOgorICAgICAgICAiIiJD
aGVjayBQQVRIX1JVTEVTX1NQRUNJRklFUi4iIiIKKyAgICAgICAgYWxsX2NhdGVnb3JpZXMgPSBz
dHlsZV9jYXRlZ29yaWVzKCkKKyAgICAgICAgZm9yIChzdWJfcGF0aHMsIHBhdGhfcnVsZXMpIGlu
IFBBVEhfUlVMRVNfU1BFQ0lGSUVSOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5z
dGFuY2UocGF0aF9ydWxlcywgdHVwbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJD
aGVja2luZzogIiArIHN0cihwYXRoX3J1bGVzKSkKKyAgICAgICAgICAgIGZvciBydWxlIGluIHBh
dGhfcnVsZXM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bGVbMTpdIGluIGFs
bF9jYXRlZ29yaWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2hlY2tpbmc6
ICIgKyBydWxlKQorCisgICAgICAgICMgVHJ5IHVzaW5nIHRoZSBwYXRoIHNwZWNpZmllciAoYXMg
YW4gImVuZC10by1lbmQiIGNoZWNrKS4KKyAgICAgICAgY29uZmlnID0gRmlsdGVyQ29uZmlndXJh
dGlvbihwYXRoX3NwZWNpZmljPVBBVEhfUlVMRVNfU1BFQ0lGSUVSKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUoY29uZmlnLnNob3VsZF9jaGVjaygieHh4X2FueV9jYXRlZ29yeSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4eHhfbm9uX21hdGNoaW5nX3Bh
dGgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5zaG91bGRfY2hlY2soInh4eF9h
bnlfY2F0ZWdvcnkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiV2ViS2l0VG9vbHMvV2ViS2l0QVBJVGVzdC8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShjb25maWcuc2hvdWxkX2NoZWNrKCJidWlsZC9pbmNsdWRlIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXZWJLaXRUb29scy9XZWJLaXRBUElUZXN0LyIp
KQorCiAgICAgZGVmIHRlc3RfbWF4X3JlcG9ydHNfcGVyX2NhdGVnb3J5KHNlbGYpOgogICAgICAg
ICAiIiJDaGVjayB0aGF0IE1BWF9SRVBPUlRTX1BFUl9DQVRFR09SWSBpcyB2YWxpZC4iIiIKICAg
ICAgICAgY2F0ZWdvcmllcyA9IHN0eWxlLnN0eWxlX2NhdGVnb3JpZXMoKQpAQCAtMTcyLDEyICsx
OTgsMTUgQEAgY2xhc3MgQXJndW1lbnRQcmludGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAK
ICAgICBfcHJpbnRlciA9IHN0eWxlLkFyZ3VtZW50UHJpbnRlcigpCiAKLSAgICBkZWYgX2NyZWF0
ZV9vcHRpb25zKHNlbGYsIG91dHB1dF9mb3JtYXQ9J2VtYWNzJywgdmVyYm9zaXR5PTMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfcnVsZXM9W10sIGdpdF9jb21taXQ9Tm9uZSwKKyAg
ICBkZWYgX2NyZWF0ZV9vcHRpb25zKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXRfZm9ybWF0PSdlbWFjcycsCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NpdHk9MywK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfcnVsZXM9W10sCisgICAgICAgICAgICAgICAg
ICAgICAgICBnaXRfY29tbWl0PU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9m
bGFnX3ZhbHVlcz17fSk6Ci0gICAgICAgIGZpbHRlciA9IENhdGVnb3J5RmlsdGVyKGZpbHRlcl9y
dWxlcykKKyAgICAgICAgZmlsdGVyX2NvbmZpZ3VyYXRpb24gPSBGaWx0ZXJDb25maWd1cmF0aW9u
KHVzZXJfcnVsZXM9dXNlcl9ydWxlcykKICAgICAgICAgcmV0dXJuIHN0eWxlLlByb2Nlc3Nvck9w
dGlvbnMoZXh0cmFfZmxhZ192YWx1ZXM9ZXh0cmFfZmxhZ192YWx1ZXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcj1maWx0ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9jb25maWd1cmF0aW9uPWZpbHRlcl9jb25maWd1
cmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXRfY29tbWl0
PWdpdF9jb21taXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dF9mb3JtYXQ9b3V0cHV0X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmVyYm9zaXR5PXZlcmJvc2l0eSkKQEAgLTI3Nyw4ICszMDYsOSBAQCBjbGFzcyBBcmd1
bWVudFBhcnNlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKG9wdGlvbnMub3V0cHV0X2Zvcm1hdCwgJ3ZzNycpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKG9wdGlvbnMudmVyYm9zaXR5LCAzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhv
cHRpb25zLmZpbHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ2F0ZWdvcnlGaWx0ZXIo
WyItIiwgIit3aGl0ZXNwYWNlIl0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25z
LmZpbHRlcl9jb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJD
b25maWd1cmF0aW9uKGJhc2VfcnVsZXM9WyItIiwgIit3aGl0ZXNwYWNlIl0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXRoX3NwZWNpZmljPVBBVEhfUlVMRVNfU1BFQ0lGSUVSKSkK
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5naXRfY29tbWl0LCBOb25lKQogCiAg
ICAgZGVmIHRlc3RfcGFyc2VfZXhwbGljaXRfYXJndW1lbnRzKHNlbGYpOgpAQCAtMjkxLDEzICsz
MjEsMjEgQEAgY2xhc3MgQXJndW1lbnRQYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy52ZXJib3NpdHksIDQpCiAgICAgICAgIChm
aWxlcywgb3B0aW9ucykgPSBwYXJzZShbJy0tZ2l0LWNvbW1pdD1jb21taXQnXSkKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5naXRfY29tbWl0LCAnY29tbWl0JykKKworICAgICAg
ICAjIFBhc3MgdXNlcl9ydWxlcy4KICAgICAgICAgKGZpbGVzLCBvcHRpb25zKSA9IHBhcnNlKFsn
LS1maWx0ZXI9K2ZvbywtYmFyJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMu
ZmlsdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBDYXRlZ29yeUZpbHRlcihbIi0iLCAi
K3doaXRlc3BhY2UiLCAiK2ZvbyIsICItYmFyIl0pKQotICAgICAgICAjIFNwdXJpb3VzIHdoaXRl
IHNwYWNlIGluIGZpbHRlciBydWxlcy4KKyAgICAgICAgY29uZmlnID0gb3B0aW9ucy5maWx0ZXJf
Y29uZmlndXJhdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLmZpbHRlcl9j
b25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJDb25maWd1cmF0
aW9uKGJhc2VfcnVsZXM9WyItIiwgIit3aGl0ZXNwYWNlIl0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXRoX3NwZWNpZmljPVBBVEhfUlVMRVNfU1BFQ0lGSUVSLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXNlcl9ydWxlcz1bIitmb28iLCAiLWJhciJdKSkKKworICAg
ICAgICAjIFBhc3Mgc3B1cmlvdXMgd2hpdGUgc3BhY2UgaW4gdXNlciBydWxlcy4KICAgICAgICAg
KGZpbGVzLCBvcHRpb25zKSA9IHBhcnNlKFsnLS1maWx0ZXI9K2ZvbyAsLWJhciddKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLmZpbHRlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ2F0ZWdvcnlGaWx0ZXIoWyItIiwgIit3aGl0ZXNwYWNlIiwgIitmb28iLCAiLWJhciJd
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5maWx0ZXJfY29uZmlndXJhdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyQ29uZmlndXJhdGlvbihiYXNlX3J1
bGVzPVsiLSIsICIrd2hpdGVzcGFjZSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGF0aF9zcGVjaWZpYz1QQVRIX1JVTEVTX1NQRUNJRklFUiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVzZXJfcnVsZXM9WyIrZm9vIiwgIi1iYXIiXSkpCiAKICAgICAgICAgIyBQYXNz
IGV4dHJhIGZsYWcgdmFsdWVzLgogICAgICAgICAoZmlsZXMsIG9wdGlvbnMpID0gcGFyc2UoWyct
LWV4dHJhJ10sIFsnZXh0cmEnXSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvZXJyb3JfaGFuZGxlcnMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2Vycm9yX2hhbmRsZXJzLnB5CmluZGV4IDMxMTQwZGUuLjE5NDBlMDMgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZXJyb3JfaGFuZGxlcnMu
cHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9lcnJvcl9oYW5kbGVy
cy5weQpAQCAtODMsNyArODMsNyBAQCBjbGFzcyBEZWZhdWx0U3R5bGVFcnJvckhhbmRsZXIob2Jq
ZWN0KToKIAogICAgICAgICAjIEEgc3RyaW5nIHRvIGludGVnZXIgZGljdGlvbmFyeSBjYWNoZSBv
ZiB0aGUgbnVtYmVyIG9mIHJlcG9ydGFibGUKICAgICAgICAgIyBlcnJvcnMgcGVyIGNhdGVnb3J5
IHBhc3NlZCB0byB0aGlzIGluc3RhbmNlLgotICAgICAgICBzZWxmLl9jYXRlZ29yeV90b3RhbHMg
PSB7IH0KKyAgICAgICAgc2VsZi5fY2F0ZWdvcnlfdG90YWxzID0ge30KIAogICAgIGRlZiBfYWRk
X3JlcG9ydGFibGVfZXJyb3Ioc2VsZiwgY2F0ZWdvcnkpOgogICAgICAgICAiIiJJbmNyZW1lbnQg
dGhlIGVycm9yIGNvdW50IGFuZCByZXR1cm4gdGhlIG5ldyBjYXRlZ29yeSB0b3RhbC4iIiIKQEAg
LTEwOSw3ICsxMDksOSBAQCBjbGFzcyBEZWZhdWx0U3R5bGVFcnJvckhhbmRsZXIob2JqZWN0KToK
ICAgICAgICAgU2VlIHRoZSBkb2NzdHJpbmcgb2YgdGhpcyBtb2R1bGUgZm9yIG1vcmUgaW5mb3Jt
YXRpb24uCiAKICAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmlzX3Jl
cG9ydGFibGUoY2F0ZWdvcnksIGNvbmZpZGVuY2UpOgorICAgICAgICBpZiBub3Qgc2VsZi5fb3B0
aW9ucy5pc19yZXBvcnRhYmxlKGNhdGVnb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbmZpZGVuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fZmlsZV9wYXRoKToKICAgICAgICAgICAgIHJldHVybgogCiAg
ICAgICAgIGNhdGVnb3J5X3RvdGFsID0gc2VsZi5fYWRkX3JlcG9ydGFibGVfZXJyb3IoY2F0ZWdv
cnkpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2Vycm9y
X2hhbmRsZXJzX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9lcnJvcl9oYW5kbGVyc191bml0dGVzdC5weQppbmRleCA4M2JkYmI5Li4xZDdlOTk4IDEwMDY0
NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2Vycm9yX2hhbmRsZXJz
X3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZXJy
b3JfaGFuZGxlcnNfdW5pdHRlc3QucHkKQEAgLTQ4LDExICs0OCwxMiBAQCBjbGFzcyBEZWZhdWx0
U3R5bGVFcnJvckhhbmRsZXJUZXN0KFN0eWxlRXJyb3JIYW5kbGVyVGVzdEJhc2UpOgogCiAgICAg
IiIiVGVzdHMgRGVmYXVsdFN0eWxlRXJyb3JIYW5kbGVyIGNsYXNzLiIiIgogCisgICAgX2ZpbGVf
cGF0aCA9ICJmb28uaCIKKwogICAgIF9jYXRlZ29yeSA9ICJ3aGl0ZXNwYWNlL3RhYiIKIAogICAg
IGRlZiBfZXJyb3JfaGFuZGxlcihzZWxmLCBvcHRpb25zKToKLSAgICAgICAgZmlsZV9wYXRoID0g
ImZvby5oIgotICAgICAgICByZXR1cm4gRGVmYXVsdFN0eWxlRXJyb3JIYW5kbGVyKGZpbGVfcGF0
aCwKKyAgICAgICAgcmV0dXJuIERlZmF1bHRTdHlsZUVycm9ySGFuZGxlcihzZWxmLl9maWxlX3Bh
dGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tb2NrX2luY3JlbWVu
dF9lcnJvcl9jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9tb2NrX3N0ZGVycl93cml0ZSkKQEAgLTgxLDcgKzgyLDkgQEAgY2xhc3MgRGVmYXVsdFN0
eWxlRXJyb3JIYW5kbGVyVGVzdChTdHlsZUVycm9ySGFuZGxlclRlc3RCYXNlKToKICAgICAgICAg
c2VsZi5fY2hlY2tfaW5pdGlhbGl6ZWQoKQogCiAgICAgICAgICMgQ29uZmlybSB0aGUgZXJyb3Ig
aXMgbm90IHJlcG9ydGFibGUuCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3B0aW9ucy5pc19y
ZXBvcnRhYmxlKHNlbGYuX2NhdGVnb3J5LCBjb25maWRlbmNlKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZShvcHRpb25zLmlzX3JlcG9ydGFibGUoc2VsZi5fY2F0ZWdvcnksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZGVuY2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfcGF0aCkp
CiAKICAgICAgICAgc2VsZi5fY2FsbF9lcnJvcl9oYW5kbGVyKG9wdGlvbnMsIGNvbmZpZGVuY2Up
CiAKQEAgLTE0Nyw5ICsxNTAsOSBAQCBjbGFzcyBQYXRjaFN0eWxlRXJyb3JIYW5kbGVyVGVzdChT
dHlsZUVycm9ySGFuZGxlclRlc3RCYXNlKToKIAogICAgICIiIlRlc3RzIFBhdGNoU3R5bGVFcnJv
ckhhbmRsZXIgY2xhc3MuIiIiCiAKLSAgICBmaWxlX3BhdGggPSAiX19pbml0X18ucHkiCisgICAg
X2ZpbGVfcGF0aCA9ICJfX2luaXRfXy5weSIKIAotICAgIHBhdGNoX3N0cmluZyA9ICIiImRpZmYg
LS1naXQgYS9fX2luaXRfXy5weSBiL19faW5pdF9fLnB5CisgICAgX3BhdGNoX3N0cmluZyA9ICIi
ImRpZmYgLS1naXQgYS9fX2luaXRfXy5weSBiL19faW5pdF9fLnB5CiBpbmRleCBlZjY1YmVlLi5l
M2RiNzBlIDEwMDY0NAogLS0tIGEvX19pbml0X18ucHkKICsrKyBiL19faW5pdF9fLnB5CkBAIC0x
NjAsMTMgKzE2MywxMyBAQCBpbmRleCBlZjY1YmVlLi5lM2RiNzBlIDEwMDY0NAogIiIiCiAKICAg
ICBkZWYgdGVzdF9jYWxsKHNlbGYpOgotICAgICAgICBwYXRjaF9maWxlcyA9IHBhcnNlX3BhdGNo
KHNlbGYucGF0Y2hfc3RyaW5nKQotICAgICAgICBkaWZmID0gcGF0Y2hfZmlsZXNbc2VsZi5maWxl
X3BhdGhdCisgICAgICAgIHBhdGNoX2ZpbGVzID0gcGFyc2VfcGF0Y2goc2VsZi5fcGF0Y2hfc3Ry
aW5nKQorICAgICAgICBkaWZmID0gcGF0Y2hfZmlsZXNbc2VsZi5fZmlsZV9wYXRoXQogCiAgICAg
ICAgIG9wdGlvbnMgPSBQcm9jZXNzb3JPcHRpb25zKHZlcmJvc2l0eT0zKQogCiAgICAgICAgIGhh
bmRsZV9lcnJvciA9IFBhdGNoU3R5bGVFcnJvckhhbmRsZXIoZGlmZiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGVfcGF0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlX3BhdGgsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tb2NrX2lu
Y3JlbWVudF9lcnJvcl9jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9tb2NrX3N0ZGVycl93cml0ZSkKQEAgLTE3Niw3ICsxNzksOSBAQCBp
bmRleCBlZjY1YmVlLi5lM2RiNzBlIDEwMDY0NAogICAgICAgICBtZXNzYWdlID0gIm1lc3NhZ2Ui
CiAKICAgICAgICAgIyBDb25maXJtIGVycm9yIGlzIHJlcG9ydGFibGUuCi0gICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShvcHRpb25zLmlzX3JlcG9ydGFibGUoY2F0ZWdvcnksIGNvbmZpZGVuY2UpKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUob3B0aW9ucy5pc19yZXBvcnRhYmxlKGNhdGVnb3J5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZGVuY2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmls
ZV9wYXRoKSkKIAogICAgICAgICAjIENvbmZpcm0gZXJyb3IgY291bnQgaW5pdGlhbGl6ZWQgdG8g
emVyby4KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMCwgc2VsZi5fZXJyb3JfY291bnQpCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbHRlci5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsdGVyLnB5CmluZGV4IDFiNDE0
MjQuLjhkZDE4MDQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvZmlsdGVyLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmls
dGVyLnB5CkBAIC0yMywyMCArMjMsMTcgQEAKICIiIkNvbnRhaW5zIGZpbHRlci1yZWxhdGVkIGNv
ZGUuIiIiCiAKIAotY2xhc3MgQ2F0ZWdvcnlGaWx0ZXIob2JqZWN0KToKK2NsYXNzIF9DYXRlZ29y
eUZpbHRlcihvYmplY3QpOgogCiAgICAgIiIiRmlsdGVycyB3aGV0aGVyIHRvIGNoZWNrIHN0eWxl
IGNhdGVnb3JpZXMuIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsdGVyX3J1bGVzPU5v
bmUpOgogICAgICAgICAiIiJDcmVhdGUgYSBjYXRlZ29yeSBmaWx0ZXIuCiAKLSAgICAgICAgVGhp
cyBtZXRob2QgcGVyZm9ybXMgYXJndW1lbnQgdmFsaWRhdGlvbiBidXQgZG9lcyBub3Qgc3RyaXAK
LSAgICAgICAgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZSBzcGFjZS4KLQogICAgICAgICBBcmdz
OgogICAgICAgICAgIGZpbHRlcl9ydWxlczogQSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBhcmUgZmls
dGVyIHJ1bGVzLCB3aGljaAogICAgICAgICAgICAgICAgICAgICAgICAgYXJlIHN0cmluZ3MgYmVn
aW5uaW5nIHdpdGggdGhlIHBsdXMgb3IgbWludXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5
bWJvbCAoKy8tKS4gVGhlIGxpc3Qgc2hvdWxkIGluY2x1ZGUgYW55CisgICAgICAgICAgICAgICAg
ICAgICAgICBzeW1ib2wgKCsvLSkuICBUaGUgbGlzdCBzaG91bGQgaW5jbHVkZSBhbnkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgZmlsdGVyIHJ1bGVzIGF0IHRoZSBiZWdpbm5pbmcu
CiAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byB0aGUgZW1wdHkgbGlzdC4KIApA
QCAtNDgsMTIgKzQ1LDYgQEAgY2xhc3MgQ2F0ZWdvcnlGaWx0ZXIob2JqZWN0KToKICAgICAgICAg
aWYgZmlsdGVyX3J1bGVzIGlzIE5vbmU6CiAgICAgICAgICAgICBmaWx0ZXJfcnVsZXMgPSBbXQog
Ci0gICAgICAgIGZvciBydWxlIGluIGZpbHRlcl9ydWxlczoKLSAgICAgICAgICAgIGlmIG5vdCAo
cnVsZS5zdGFydHN3aXRoKCcrJykgb3IgcnVsZS5zdGFydHN3aXRoKCctJykpOgotICAgICAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgZmlsdGVyIHJ1bGUgIiVzIjogZXZlcnkg
cnVsZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVsZSBpbiB0aGUgLS1m
aWx0ZXIgZmxhZyBtdXN0IHN0YXJ0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICd3aXRoICsgb3IgLS4nICUgcnVsZSkKLQogICAgICAgICBzZWxmLl9maWx0ZXJfcnVsZXMgPSBm
aWx0ZXJfcnVsZXMKICAgICAgICAgc2VsZi5fc2hvdWxkX2NoZWNrX2NhdGVnb3J5ID0ge30gIyBD
YWNoZWQgZGljdGlvbmFyeSBvZiBjYXRlZ29yeSB0byBUcnVlL0ZhbHNlCiAKQEAgLTc0LDEzICs2
NSwxMyBAQCBjbGFzcyBDYXRlZ29yeUZpbHRlcihvYmplY3QpOgogICAgICAgICAiIiJSZXR1cm4g
d2hldGhlciB0aGUgY2F0ZWdvcnkgc2hvdWxkIGJlIGNoZWNrZWQuCiAKICAgICAgICAgVGhlIHJ1
bGVzIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIGEgY2F0ZWdvcnkgc2hvdWxkIGJlIGNoZWNrZWQK
LSAgICAgICAgYXJlIGFzIGZvbGxvd3MuIEJ5IGRlZmF1bHQgYWxsIGNhdGVnb3JpZXMgc2hvdWxk
IGJlIGNoZWNrZWQuCisgICAgICAgIGFyZSBhcyBmb2xsb3dzLiAgQnkgZGVmYXVsdCBhbGwgY2F0
ZWdvcmllcyBzaG91bGQgYmUgY2hlY2tlZC4KICAgICAgICAgVGhlbiBhcHBseSB0aGUgZmlsdGVy
IHJ1bGVzIGluIG9yZGVyIGZyb20gZmlyc3QgdG8gbGFzdCwgd2l0aAogICAgICAgICBsYXRlciBm
bGFncyB0YWtpbmcgcHJlY2VkZW5jZS4KIAogICAgICAgICBBIGZpbHRlciBydWxlIGFwcGxpZXMg
dG8gYSBjYXRlZ29yeSBpZiB0aGUgc3RyaW5nIGFmdGVyIHRoZQogICAgICAgICBsZWFkaW5nIHBs
dXMvbWludXMgKCsvLSkgbWF0Y2hlcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjYXRlZ29yeQotICAg
ICAgICBuYW1lLiBBIHBsdXMgKCspIG1lYW5zIHRoZSBjYXRlZ29yeSBzaG91bGQgYmUgY2hlY2tl
ZCwgd2hpbGUgYQorICAgICAgICBuYW1lLiAgQSBwbHVzICgrKSBtZWFucyB0aGUgY2F0ZWdvcnkg
c2hvdWxkIGJlIGNoZWNrZWQsIHdoaWxlIGEKICAgICAgICAgbWludXMgKC0pIG1lYW5zIHRoZSBj
YXRlZ29yeSBzaG91bGQgbm90IGJlIGNoZWNrZWQuCiAKICAgICAgICAgIiIiCkBAIC05NSwzICs4
NiwxMTQgQEAgY2xhc3MgQ2F0ZWdvcnlGaWx0ZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5fc2hv
dWxkX2NoZWNrX2NhdGVnb3J5W2NhdGVnb3J5XSA9IHNob3VsZF9jaGVjayAjIFVwZGF0ZSBjYWNo
ZS4KICAgICAgICAgcmV0dXJuIHNob3VsZF9jaGVjawogCisKK2NsYXNzIEZpbHRlckNvbmZpZ3Vy
YXRpb24ob2JqZWN0KToKKworICAgICIiIlN1cHBvcnRzIGZpbHRlcmluZyB3aXRoIHBhdGgtc3Bl
Y2lmaWMgYW5kIHVzZXItc3BlY2lmaWVkIHJ1bGVzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGJhc2VfcnVsZXM9Tm9uZSwgcGF0aF9zcGVjaWZpYz1Ob25lLCB1c2VyX3J1bGVzPU5vbmUp
OgorICAgICAgICAiIiJDcmVhdGUgYSBGaWx0ZXJDb25maWd1cmF0aW9uIGluc3RhbmNlLgorCisg
ICAgICAgIEFyZ3M6CisgICAgICAgICAgYmFzZV9ydWxlczogVGhlIHN0YXJ0aW5nIGxpc3Qgb2Yg
ZmlsdGVyIHJ1bGVzIHRvIHVzZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5n
LiAgVGhlIGRlZmF1bHQgaXMgdGhlIGVtcHR5IGxpc3QsIHdoaWNoCisgICAgICAgICAgICAgICAg
ICAgICAgYnkgaXRzZWxmIHdvdWxkIG1lYW4gdGhhdCBhbGwgY2F0ZWdvcmllcyBzaG91bGQgYmUK
KyAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkLgorCisgICAgICAgICAgcGF0aF9zcGVjaWZp
YzogQSBsaXN0IG9mIChzdWJfcGF0aHMsIHBhdGhfcnVsZXMpIHBhaXJzCisgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhhdCBzdG9yZXMgdGhlIHBhdGgtc3BlY2lmaWMgZmlsdGVyIHJ1bGVzIGZv
cgorICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZGluZyB0byB0aGUgYmFzZSBydWxlcy4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlICJzdWJfcGF0aHMiIHZhbHVlIGlzIGEg
bGlzdCBvZiBwYXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic3RyaW5ncy4gIElmIGEg
ZmlsZSBwYXRoIGNvbnRhaW5zIG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICBz
dWJzdHJpbmdzLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIHBhdGggcnVsZXMKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmUgYXBwZW5kZWQuICBUaGUgZmlyc3Qgc3Vic3RyaW5nIG1hdGNoIHRh
a2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkZW5jZSwgaS5lLiBvbmx5IHRoZSBm
aXJzdCBtYXRjaCB0cmlnZ2VycworICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGFwcGVuZC4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlICJwYXRoX3J1bGVzIiB2YWx1ZSBpcyB0
aGUgdHVwbGUgb2YgZmlsdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXMgdGhhdCBj
YW4gYmUgYXBwZW5kZWQgdG8gdGhlIGJhc2UgcnVsZXMuCisKKyAgICAgICAgICB1c2VyX3J1bGVz
OiBBIGxpc3Qgb2YgZmlsdGVyIHJ1bGVzIHRoYXQgaXMgYWx3YXlzIGFwcGVuZGVkCisgICAgICAg
ICAgICAgICAgICAgICAgdG8gdGhlIGJhc2UgcnVsZXMgYW5kIGFueSBwYXRoIHJ1bGVzLiAgSW4g
b3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICB3b3JkcywgdGhlIHVzZXIgcnVsZXMgdGFrZSBw
cmVjZWRlbmNlIG92ZXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgZXZlcnl0aGluZy4gIElu
IHByYWN0aWNlLCB0aGUgdXNlciBydWxlcyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICBwcm92
aWRlZCBieSB0aGUgdXNlciBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisKKyAgICAgICAgIiIiCisg
ICAgICAgIGlmIGJhc2VfcnVsZXMgaXMgTm9uZToKKyAgICAgICAgICAgIGJhc2VfcnVsZXMgPSBb
XQorICAgICAgICBpZiBwYXRoX3NwZWNpZmljIGlzIE5vbmU6CisgICAgICAgICAgICBwYXRoX3Nw
ZWNpZmljID0gW10KKyAgICAgICAgaWYgdXNlcl9ydWxlcyBpcyBOb25lOgorICAgICAgICAgICAg
dXNlcl9ydWxlcyA9IFtdCisKKyAgICAgICAgc2VsZi5fYmFzZV9ydWxlcyA9IGJhc2VfcnVsZXMK
KyAgICAgICAgc2VsZi5fcGF0aF9zcGVjaWZpYyA9IHBhdGhfc3BlY2lmaWMKKyAgICAgICAgIyBU
aGUgInBhdGhfcnVsZXMiIHZhbHVlcyBhcmUgdHVwbGVzIHJhdGhlciB0aGFuIGxpc3RzIHNvCisg
ICAgICAgICMgdGhleSBjYW4gYmUgdXNlZCBhcyBkaWN0aW9uYXJ5IGtleXMuCisKKyAgICAgICAg
IyBGSVhNRTogTWFrZSB1c2VyIHJ1bGVzIGludGVybmFsIGFmdGVyIHRoZSBGaWx0ZXJDb25maWd1
cmF0aW9uCisgICAgICAgICMgICAgICAgIGF0dHJpYnV0ZSBpcyByZW1vdmVkIGZyb20gUHJvY2Vz
c29yT3B0aW9ucyAoc2luY2UgYXQKKyAgICAgICAgIyAgICAgICAgdGhhdCBwb2ludCBBcmd1bWVu
dFByaW50ZXIgd2lsbCBubyBsb25nZXIgbmVlZCB0bworICAgICAgICAjICAgICAgICBhY2Nlc3Mg
RmlsdGVyQ29uZmlndXJhdGlvbi51c2VyX3J1bGVzKS4KKyAgICAgICAgc2VsZi51c2VyX3J1bGVz
ID0gdXNlcl9ydWxlcworCisgICAgICAgIHNlbGYuX3BhdGhfcnVsZXNfdG9fZmlsdGVyID0ge30K
KyAgICAgICAgIyBDYWNoZWQgZGljdGlvbmFyeSBvZiBwYXRoIHJ1bGVzIHRvIENhdGVnb3J5Rmls
dGVyIGluc3RhbmNlLgorCisgICAgICAgIHNlbGYuX3BhdGhfdG9fZmlsdGVyID0ge30KKyAgICAg
ICAgIyBDYWNoZWQgZGljdGlvbmFyeSBvZiBmaWxlIHBhdGggdG8gQ2F0ZWdvcnlGaWx0ZXIgaW5z
dGFuY2UuCisgICAgICAgICMKKyAgICAgICAgIyBUaGUgc2FtZSBDYXRlZ29yeUZpbHRlciBpbnN0
YW5jZSBjYW4gYmUgc2hhcmVkIGFjcm9zcworICAgICAgICAjIG11bHRpcGxlIGtleXMuIFRoaXMg
YWxsb3dzIHVzIHRvIHRha2UgZ3JlYXRlciBhZHZhbnRhZ2Ugb2YKKyAgICAgICAgIyB0aGUgY2Fj
aGluZyBkb25lIGJ5IENhdGVnb3J5RmlsdGVyLnNob3VsZF9jaGVjaygpLgorCisgICAgIyBVc2Vm
dWwgZm9yIHVuaXQgdGVzdGluZy4KKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAg
ICAgIiIiUmV0dXJuIHdoZXRoZXIgdGhpcyBGaWx0ZXJDb25maWd1cmF0aW9uIGlzIGVxdWFsIHRv
IGFub3RoZXIuIiIiCisgICAgICAgIGlmIHNlbGYuX2Jhc2VfcnVsZXMgIT0gb3RoZXIuX2Jhc2Vf
cnVsZXM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fcGF0aF9z
cGVjaWZpYyAhPSBvdGhlci5fcGF0aF9zcGVjaWZpYzoKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorICAgICAgICBpZiBzZWxmLnVzZXJfcnVsZXMgIT0gb3RoZXIudXNlcl9ydWxlczoKKyAgICAg
ICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAjIFVzZWZ1
bCBmb3IgdW5pdCB0ZXN0aW5nLgorICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAg
ICAjIFB5dGhvbiBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGRlZHVjZSB0aGlzIGZyb20gX19lcV9f
KCkuCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fX2VxX18ob3RoZXIpCisKKyAgICBkZWYgX3Bh
dGhfcnVsZXNfZnJvbV9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJEZXRlcm1pbmUgdGhl
IHBhdGgtc3BlY2lmaWMgcnVsZXMgdG8gdXNlLCBhbmQgcmV0dXJuIGFzIGEgdHVwbGUuIiIiCisg
ICAgICAgIGZvciAoc3ViX3BhdGhzLCBwYXRoX3J1bGVzKSBpbiBzZWxmLl9wYXRoX3NwZWNpZmlj
OgorICAgICAgICAgICAgZm9yIHN1Yl9wYXRoIGluIHN1Yl9wYXRoczoKKyAgICAgICAgICAgICAg
ICBpZiBwYXRoLmZpbmQoc3ViX3BhdGgpID4gLTE6CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBwYXRoX3J1bGVzCisgICAgICAgIHJldHVybiAoKSAjIERlZmF1bHQgdG8gdGhlIGVtcHR5IHR1
cGxlLgorCisgICAgZGVmIF9maWx0ZXJfZnJvbV9wYXRoX3J1bGVzKHNlbGYsIHBhdGhfcnVsZXMp
OgorICAgICAgICAiIiJSZXR1cm4gdGhlIENhdGVnb3J5RmlsdGVyIGFzc29jaWF0ZWQgdG8gYSBw
YXRoIHJ1bGVzIHR1cGxlLiIiIgorICAgICAgICAjIFdlIHJldXNlIHRoZSBzYW1lIENhdGVnb3J5
RmlsdGVyIHdoZXJlIHBvc3NpYmxlIHRvIHRha2UKKyAgICAgICAgIyBhZHZhbnRhZ2Ugb2YgdGhl
IGNhY2hpbmcgdGhleSBkby4KKyAgICAgICAgaWYgcGF0aF9ydWxlcyBub3QgaW4gc2VsZi5fcGF0
aF9ydWxlc190b19maWx0ZXI6CisgICAgICAgICAgICBydWxlcyA9IGxpc3Qoc2VsZi5fYmFzZV9y
dWxlcykgIyBNYWtlIGEgY29weQorICAgICAgICAgICAgcnVsZXMuZXh0ZW5kKHBhdGhfcnVsZXMp
CisgICAgICAgICAgICBydWxlcy5leHRlbmQoc2VsZi51c2VyX3J1bGVzKQorICAgICAgICAgICAg
c2VsZi5fcGF0aF9ydWxlc190b19maWx0ZXJbcGF0aF9ydWxlc10gPSBfQ2F0ZWdvcnlGaWx0ZXIo
cnVsZXMpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGhfcnVsZXNfdG9fZmlsdGVyW3BhdGhf
cnVsZXNdCisKKyAgICBkZWYgX2ZpbHRlcl9mcm9tX3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAg
ICIiIlJldHVybiB0aGUgQ2F0ZWdvcnlGaWx0ZXIgYXNzb2NpYXRlZCB0byBhIHBhdGguIiIiCisg
ICAgICAgIGlmIHBhdGggbm90IGluIHNlbGYuX3BhdGhfdG9fZmlsdGVyOgorICAgICAgICAgICAg
cGF0aF9ydWxlcyA9IHNlbGYuX3BhdGhfcnVsZXNfZnJvbV9wYXRoKHBhdGgpCisgICAgICAgICAg
ICBmaWx0ZXIgPSBzZWxmLl9maWx0ZXJfZnJvbV9wYXRoX3J1bGVzKHBhdGhfcnVsZXMpCisgICAg
ICAgICAgICBzZWxmLl9wYXRoX3RvX2ZpbHRlcltwYXRoXSA9IGZpbHRlcgorCisgICAgICAgIHJl
dHVybiBzZWxmLl9wYXRoX3RvX2ZpbHRlcltwYXRoXQorCisgICAgZGVmIHNob3VsZF9jaGVjayhz
ZWxmLCBjYXRlZ29yeSwgcGF0aCk6CisgICAgICAgICIiIlJldHVybiB3aGV0aGVyIHRoZSBnaXZl
biBjYXRlZ29yeSBzaG91bGQgYmUgY2hlY2tlZC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zp
bHRlcl9mcm9tX3BhdGgocGF0aCkuc2hvdWxkX2NoZWNrKGNhdGVnb3J5KQorCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbHRlcl91bml0dGVzdC5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsdGVyX3VuaXR0ZXN0LnB5Cmlu
ZGV4IDBiMTIxMjMuLmUyNWFhNGIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvZmlsdGVyX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvZmlsdGVyX3VuaXR0ZXN0LnB5CkBAIC0yMiwxMCArMjIsMTAgQEAKIAog
IiIiVW5pdCB0ZXN0cyBmb3IgZmlsdGVyLnB5LiIiIgogCi0KIGltcG9ydCB1bml0dGVzdAogCi1m
cm9tIGZpbHRlciBpbXBvcnQgQ2F0ZWdvcnlGaWx0ZXIKK2Zyb20gZmlsdGVyIGltcG9ydCBfQ2F0
ZWdvcnlGaWx0ZXIgYXMgQ2F0ZWdvcnlGaWx0ZXIKK2Zyb20gZmlsdGVyIGltcG9ydCBGaWx0ZXJD
b25maWd1cmF0aW9uCiAKIAogY2xhc3MgQ2F0ZWdvcnlGaWx0ZXJUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKQEAgLTMzLDExICszMywxNSBAQCBjbGFzcyBDYXRlZ29yeUZpbHRlclRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICIiIlRlc3RzIENhdGVnb3J5RmlsdGVyIGNsYXNzLiIiIgogCiAg
ICAgZGVmIHRlc3RfaW5pdChzZWxmKToKLSAgICAgICAgIiIiVGVzdCBfX2luaXRfXyBjb25zdHJ1
Y3Rvci4iIiIKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQ2F0ZWdvcnlG
aWx0ZXIsIFsibm9fcHJlZml4Il0pCi0gICAgICAgIENhdGVnb3J5RmlsdGVyKCkgIyBObyBWYWx1
ZUVycm9yOiB3b3JrcwotICAgICAgICBDYXRlZ29yeUZpbHRlcihbIisiXSkgIyBObyBWYWx1ZUVy
cm9yOiB3b3JrcwotICAgICAgICBDYXRlZ29yeUZpbHRlcihbIi0iXSkgIyBObyBWYWx1ZUVycm9y
OiB3b3JrcworICAgICAgICAiIiJUZXN0IF9faW5pdF9fIG1ldGhvZC4iIiIKKyAgICAgICAgIyBU
ZXN0IHRoYXQgdGhlIGF0dHJpYnV0ZXMgYXJlIGdldHRpbmcgc2V0IGNvcnJlY3RseS4KKyAgICAg
ICAgZmlsdGVyID0gQ2F0ZWdvcnlGaWx0ZXIoWyIrIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKFsiKyJdLCBmaWx0ZXIuX2ZpbHRlcl9ydWxlcykKKworICAgIGRlZiB0ZXN0X2luaXRfZGVm
YXVsdF9hcmd1bWVudHMoc2VsZik6CisgICAgICAgICIiIlRlc3QgX19pbml0X18gbWV0aG9kIGRl
ZmF1bHQgYXJndW1lbnRzLiIiIgorICAgICAgICBmaWx0ZXIgPSBDYXRlZ29yeUZpbHRlcigpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFtdLCBmaWx0ZXIuX2ZpbHRlcl9ydWxlcykKIAogICAg
IGRlZiB0ZXN0X3N0cihzZWxmKToKICAgICAgICAgIiIiVGVzdCBfX3N0cl9fICJ0byBzdHJpbmci
IG9wZXJhdG9yLiIiIgpAQCAtNTAsMTcgKzU0LDE2IEBAIGNsYXNzIENhdGVnb3J5RmlsdGVyVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGZpbHRlcjIgPSBDYXRlZ29yeUZpbHRlcihb
IithIiwgIitiIl0pCiAgICAgICAgIGZpbHRlcjMgPSBDYXRlZ29yeUZpbHRlcihbIitiIiwgIith
Il0pCiAKLSAgICAgICAgIyA9PSBjYWxscyBfX2VxX18uCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShmaWx0ZXIxID09IGZpbHRlcjIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmlsdGVyMSA9
PSBmaWx0ZXIzKSAjIENhbm5vdCB0ZXN0IHdpdGggYXNzZXJ0Tm90RXF1YWwuCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShmaWx0ZXIxLl9fZXFfXyhmaWx0ZXIyKSkKKyAgICAgICAgIyBTaG91bGQg
bm90IHRlc3Qgd2l0aCBhc3NlcnROb3RFcXVhbC4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShm
aWx0ZXIxLl9fZXFfXyhmaWx0ZXIzKSkKIAogICAgIGRlZiB0ZXN0X25lKHNlbGYpOgogICAgICAg
ICAiIiJUZXN0IF9fbmVfXyBpbmVxdWFsaXR5IGZ1bmN0aW9uLiIiIgotICAgICAgICAjICE9IGNh
bGxzIF9fbmVfXy4KICAgICAgICAgIyBCeSBkZWZhdWx0LCBfX25lX18gYWx3YXlzIHJldHVybnMg
dHJ1ZSBvbiBkaWZmZXJlbnQgb2JqZWN0cy4KICAgICAgICAgIyBUaHVzLCBqdXN0IGNoZWNrIHRo
ZSBkaXN0aW5ndWlzaGluZyBjYXNlIHRvIHZlcmlmeSB0aGF0IHRoZQogICAgICAgICAjIGNvZGUg
ZGVmaW5lcyBfX25lX18uCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoQ2F0ZWdvcnlGaWx0ZXIo
KSAhPSBDYXRlZ29yeUZpbHRlcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKENhdGVnb3J5
RmlsdGVyKCkuX19uZV9fKENhdGVnb3J5RmlsdGVyKCkpKQogCiAgICAgZGVmIHRlc3Rfc2hvdWxk
X2NoZWNrKHNlbGYpOgogICAgICAgICAiIiJUZXN0IHNob3VsZF9jaGVjaygpIG1ldGhvZC4iIiIK
QEAgLTgyLDMgKzg1LDk4IEBAIGNsYXNzIENhdGVnb3J5RmlsdGVyVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmlsdGVyLnNob3VsZF9jaGVjaygiYWJj
IikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWx0ZXIuc2hvdWxkX2NoZWNrKCJhIikpCiAK
KworY2xhc3MgRmlsdGVyQ29uZmlndXJhdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisg
ICAgIiIiVGVzdHMgRmlsdGVyQ29uZmlndXJhdGlvbiBjbGFzcy4iIiIKKworICAgIGRlZiBfY29u
ZmlnKHNlbGYsIGJhc2VfcnVsZXMsIHBhdGhfc3BlY2lmaWMsIHVzZXJfcnVsZXMpOgorICAgICAg
ICAiIiJSZXR1cm4gYSBGaWx0ZXJDb25maWd1cmF0aW9uIGluc3RhbmNlLiIiIgorICAgICAgICBy
ZXR1cm4gRmlsdGVyQ29uZmlndXJhdGlvbihiYXNlX3J1bGVzPWJhc2VfcnVsZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfc3BlY2lmaWM9cGF0aF9zcGVjaWZpYywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9ydWxlcz11c2VyX3J1bGVz
KQorCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBfX2luaXRfXyBt
ZXRob2QuIiIiCisgICAgICAgICMgVGVzdCB0aGF0IHRoZSBhdHRyaWJ1dGVzIGFyZSBnZXR0aW5n
IHNldCBjb3JyZWN0bHkuCisgICAgICAgICMgV2UgdXNlIHBhcmFtZXRlciB2YWx1ZXMgdGhhdCBh
cmUgZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHRzLgorICAgICAgICBiYXNlX3J1bGVzID0gWyIt
Il0KKyAgICAgICAgcGF0aF9zcGVjaWZpYyA9IFsoWyJwYXRoIl0sICgiK2EiLCkpXQorICAgICAg
ICB1c2VyX3J1bGVzID0gWyIrIl0KKworICAgICAgICBjb25maWcgPSBzZWxmLl9jb25maWcoYmFz
ZV9ydWxlcywgcGF0aF9zcGVjaWZpYywgdXNlcl9ydWxlcykKKworICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhiYXNlX3J1bGVzLCBjb25maWcuX2Jhc2VfcnVsZXMpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKHBhdGhfc3BlY2lmaWMsIGNvbmZpZy5fcGF0aF9zcGVjaWZpYykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHModXNlcl9ydWxlcywgY29uZmlnLnVzZXJfcnVsZXMpCisKKyAgICBk
ZWYgdGVzdF9kZWZhdWx0X2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhl
IGF0dHJpYnV0ZXMgYXJlIGdldHRpbmcgc2V0IGNvcnJlY3RseSB0byB0aGUgZGVmYXVsdHMuCisg
ICAgICAgIGNvbmZpZyA9IEZpbHRlckNvbmZpZ3VyYXRpb24oKQorCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKFtdLCBjb25maWcuX2Jhc2VfcnVsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKFtdLCBjb25maWcuX3BhdGhfc3BlY2lmaWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KFtdLCBjb25maWcudXNlcl9ydWxlcykKKworICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgorICAgICAg
ICAiIiJUZXN0IF9fZXFfXyBtZXRob2QuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGaWx0
ZXJDb25maWd1cmF0aW9uKCkuX19lcV9fKEZpbHRlckNvbmZpZ3VyYXRpb24oKSkpCisKKyAgICAg
ICAgIyBWZXJpZnkgdGhhdCBhIGRpZmZlcmVuY2UgaW4gYW55IGFyZ3VtZW50IGNhdXNlcyBlcXVh
bGl0eSB0byBmYWlsLgorICAgICAgICBjb25maWcgPSBGaWx0ZXJDb25maWd1cmF0aW9uKCkKKwor
ICAgICAgICAjIFRoZXNlIHBhcmFtZXRlciB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBk
ZWZhdWx0cy4KKyAgICAgICAgYmFzZV9ydWxlcyA9IFsiLSJdCisgICAgICAgIHBhdGhfc3BlY2lm
aWMgPSBbKFsicGF0aCJdLCAoIithIiwpKV0KKyAgICAgICAgdXNlcl9ydWxlcyA9IFsiKyJdCisK
KyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuX19lcV9fKEZpbHRlckNvbmZpZ3VyYXRp
b24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9ydWxl
cz1iYXNlX3J1bGVzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZmlnLl9fZXFfXyhG
aWx0ZXJDb25maWd1cmF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhdGhfc3BlY2lmaWM9cGF0aF9zcGVjaWZpYykpKQorICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKGNvbmZpZy5fX2VxX18oRmlsdGVyQ29uZmlndXJhdGlvbigKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX3J1bGVzPXVzZXJfcnVsZXMpKSkKKwor
ICAgIGRlZiB0ZXN0X25lKHNlbGYpOgorICAgICAgICAiIiJUZXN0IF9fbmVfXyBtZXRob2QuIiIi
CisgICAgICAgICMgQnkgZGVmYXVsdCwgX19uZV9fIGFsd2F5cyByZXR1cm5zIHRydWUgb24gZGlm
ZmVyZW50IG9iamVjdHMuCisgICAgICAgICMgVGh1cywganVzdCBjaGVjayB0aGUgZGlzdGluZ3Vp
c2hpbmcgY2FzZSB0byB2ZXJpZnkgdGhhdCB0aGUKKyAgICAgICAgIyBjb2RlIGRlZmluZXMgX19u
ZV9fLgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEZpbHRlckNvbmZpZ3VyYXRpb24oKS5fX25l
X18oRmlsdGVyQ29uZmlndXJhdGlvbigpKSkKKworICAgIGRlZiB0ZXN0X2Jhc2VfcnVsZXMoc2Vs
Zik6CisgICAgICAgICIiIlRlc3QgZWZmZWN0IG9mIGJhc2VfcnVsZXMgb24gc2hvdWxkX2NoZWNr
KCkuIiIiCisgICAgICAgIGJhc2VfcnVsZXMgPSBbIi1iIl0KKyAgICAgICAgcGF0aF9zcGVjaWZp
YyA9IFtdCisgICAgICAgIHVzZXJfcnVsZXMgPSBbXQorCisgICAgICAgIGNvbmZpZyA9IHNlbGYu
X2NvbmZpZyhiYXNlX3J1bGVzLCBwYXRoX3NwZWNpZmljLCB1c2VyX3J1bGVzKQorCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShjb25maWcuc2hvdWxkX2NoZWNrKCJhIiwgInBhdGgiKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuc2hvdWxkX2NoZWNrKCJiIiwgInBhdGgiKSkKKwor
ICAgIGRlZiB0ZXN0X3BhdGhfc3BlY2lmaWMoc2VsZik6CisgICAgICAgICIiIlRlc3QgZWZmZWN0
IG9mIHBhdGhfcnVsZXNfc3BlY2lmaWVyIG9uIHNob3VsZF9jaGVjaygpLiIiIgorICAgICAgICBi
YXNlX3J1bGVzID0gWyItIl0KKyAgICAgICAgcGF0aF9zcGVjaWZpYyA9IFsoWyJwYXRoMSJdLCAo
IitiIiwpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoWyJwYXRoMiJdLCAoIitjIiwpKV0K
KyAgICAgICAgdXNlcl9ydWxlcyA9IFtdCisKKyAgICAgICAgY29uZmlnID0gc2VsZi5fY29uZmln
KGJhc2VfcnVsZXMsIHBhdGhfc3BlY2lmaWMsIHVzZXJfcnVsZXMpCisKKyAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShjb25maWcuc2hvdWxkX2NoZWNrKCJjIiwgInBhdGgxIikpCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShjb25maWcuc2hvdWxkX2NoZWNrKCJjIiwgInBhdGgyIikpCisgICAgICAg
ICMgVGVzdCB0aGF0IGZpcnN0IG1hdGNoIHRha2VzIHByZWNlZGVuY2UuCisgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UoY29uZmlnLnNob3VsZF9jaGVjaygiYyIsICJwYXRoMi9wYXRoMSIpKQorCisg
ICAgZGVmIHRlc3RfdXNlcl9ydWxlcyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBlZmZlY3Qgb2Yg
dXNlcl9ydWxlcyBvbiBzaG91bGRfY2hlY2soKS4iIiIKKyAgICAgICAgYmFzZV9ydWxlcyA9IFsi
LSJdCisgICAgICAgIHBhdGhfc3BlY2lmaWMgPSBbXQorICAgICAgICB1c2VyX3J1bGVzID0gWyIr
YiJdCisKKyAgICAgICAgY29uZmlnID0gc2VsZi5fY29uZmlnKGJhc2VfcnVsZXMsIHBhdGhfc3Bl
Y2lmaWMsIHVzZXJfcnVsZXMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuc2hv
dWxkX2NoZWNrKCJhIiwgInBhdGgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5z
aG91bGRfY2hlY2soImIiLCAicGF0aCIpKQorCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL3Byb2Nlc3NvcnMvY3BwLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9wcm9jZXNzb3JzL2NwcC5weQppbmRleCBlMWY0MWE0Li5iYmU1Yzhh
IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3Byb2Nlc3Nv
cnMvY3BwLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvcHJvY2Vz
c29ycy9jcHAucHkKQEAgLTIwMzAsMjIgKzIwMzAsNiBAQCBkZWYgX2Ryb3BfY29tbW9uX3N1ZmZp
eGVzKGZpbGVuYW1lKToKICAgICByZXR1cm4gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0K
IAogCi1kZWYgX2lzX3Rlc3RfZmlsZW5hbWUoZmlsZW5hbWUpOgotICAgICIiIkRldGVybWluZXMg
aWYgdGhlIGdpdmVuIGZpbGVuYW1lIGhhcyBhIHN1ZmZpeCB0aGF0IGlkZW50aWZpZXMgaXQgYXMg
YSB0ZXN0LgotCi0gICAgQXJnczoKLSAgICAgIGZpbGVuYW1lOiBUaGUgaW5wdXQgZmlsZW5hbWUu
Ci0KLSAgICBSZXR1cm5zOgotICAgICAgVHJ1ZSBpZiAnZmlsZW5hbWUnIGxvb2tzIGxpa2UgYSB0
ZXN0LCBGYWxzZSBvdGhlcndpc2UuCi0gICAgIiIiCi0gICAgaWYgKGZpbGVuYW1lLmVuZHN3aXRo
KCdfdGVzdC5jcHAnKQotICAgICAgICBvciBmaWxlbmFtZS5lbmRzd2l0aCgnX3VuaXR0ZXN0LmNw
cCcpCi0gICAgICAgIG9yIGZpbGVuYW1lLmVuZHN3aXRoKCdfcmVndGVzdC5jcHAnKSk6Ci0gICAg
ICAgIHJldHVybiBUcnVlCi0gICAgcmV0dXJuIEZhbHNlCi0KLQogZGVmIF9jbGFzc2lmeV9pbmNs
dWRlKGZpbGVuYW1lLCBpbmNsdWRlLCBpc19zeXN0ZW0sIGluY2x1ZGVfc3RhdGUpOgogICAgICIi
IkZpZ3VyZXMgb3V0IHdoYXQga2luZCBvZiBoZWFkZXIgJ2luY2x1ZGUnIGlzLgogCkBAIC0yMTEw
LDcgKzIwOTQsNiBAQCBkZWYgX2NsYXNzaWZ5X2luY2x1ZGUoZmlsZW5hbWUsIGluY2x1ZGUsIGlz
X3N5c3RlbSwgaW5jbHVkZV9zdGF0ZSk6CiAgICAgcmV0dXJuIF9PVEhFUl9IRUFERVIKIAogCi0K
IGRlZiBjaGVja19pbmNsdWRlX2xpbmUoZmlsZW5hbWUsIGZpbGVfZXh0ZW5zaW9uLCBjbGVhbl9s
aW5lcywgbGluZV9udW1iZXIsIGluY2x1ZGVfc3RhdGUsIGVycm9yKToKICAgICAiIiJDaGVjayBy
dWxlcyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvICNpbmNsdWRlIGxpbmVzLgogCkBAIC0yMTI2LDE0
ICsyMTA5LDEyIEBAIGRlZiBjaGVja19pbmNsdWRlX2xpbmUoZmlsZW5hbWUsIGZpbGVfZXh0ZW5z
aW9uLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGluY2x1CiAgICAgICBpbmNsdWRlX3N0YXRl
OiBBbiBfSW5jbHVkZVN0YXRlIGluc3RhbmNlIGluIHdoaWNoIHRoZSBoZWFkZXJzIGFyZSBpbnNl
cnRlZC4KICAgICAgIGVycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMg
Zm91bmQuCiAgICAgIiIiCi0KLSAgICBpZiAoZmlsZW5hbWUuZmluZCgnV2ViS2l0VG9vbHMvV2Vi
S2l0QVBJVGVzdC8nKSA+PSAwCi0gICAgICAgIG9yIGZpbGVuYW1lLmZpbmQoJ1dlYktpdC9xdC9R
R1ZMYXVuY2hlci8nKSA+PSAwKToKLSAgICAgICAgIyBGaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSBh
cmUgY29uc3VtZXJzIG9mIHRoZSBXZWJLaXQgQVBJIGFuZAotICAgICAgICAjIHRoZXJlZm9yZSBk
byBub3QgZm9sbG93IHRoZSBzYW1lIGhlYWRlciBpbmNsdWRpbmcgZGlzY2lwbGluZSBhcwotICAg
ICAgICAjIFdlYkNvcmUuCi0gICAgICAgIHJldHVybgotCisgICAgIyBGSVhNRTogRm9yIHJlYWRh
YmlsaXR5IG9yIGFzIGEgcG9zc2libGUgb3B0aW1pemF0aW9uLCBjb25zaWRlcgorICAgICMgICAg
ICAgIGV4aXRpbmcgZWFybHkgaGVyZSBieSBjaGVja2luZyB3aGV0aGVyIHRoZSAiYnVpbGQvaW5j
bHVkZSIKKyAgICAjICAgICAgICBjYXRlZ29yeSBzaG91bGQgYmUgY2hlY2tlZCBmb3IgdGhlIGdp
dmVuIGZpbGVuYW1lLiAgVGhpcworICAgICMgICAgICAgIG1heSBpbnZvbHZlIGhhdmluZyB0aGUg
ZXJyb3IgaGFuZGxlciBjbGFzc2VzIGV4cG9zZSBhCisgICAgIyAgICAgICAgc2hvdWxkX2NoZWNr
KCkgbWV0aG9kLCBpbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwgX19jYWxsX18KKyAgICAjICAgICAg
ICBtZXRob2QuCiAgICAgbGluZSA9IGNsZWFuX2xpbmVzLmxpbmVzW2xpbmVfbnVtYmVyXQogCiAg
ICAgbWF0Y2hlZCA9IF9SRV9QQVRURVJOX0lOQ0xVREUuc2VhcmNoKGxpbmUpCkBAIC0yMTQ1LDEw
ICsyMTI2LDggQEAgZGVmIGNoZWNrX2luY2x1ZGVfbGluZShmaWxlbmFtZSwgZmlsZV9leHRlbnNp
b24sIGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgaW5jbHUKIAogICAgICMgTG9vayBmb3IgYW55
IG9mIHRoZSBzdHJlYW0gY2xhc3NlcyB0aGF0IGFyZSBwYXJ0IG9mIHN0YW5kYXJkIEMrKy4KICAg
ICBpZiBtYXRjaChyJyhmfGluZHxpb3xpfG98cGFyc2V8cGZ8c3RkaW98c3RyfCk/c3RyZWFtJCcs
IGluY2x1ZGUpOgotICAgICAgICAjIE1hbnkgdW5pdCB0ZXN0cyB1c2UgY291dCwgc28gd2UgZXhl
bXB0IHRoZW0uCi0gICAgICAgIGlmIG5vdCBfaXNfdGVzdF9maWxlbmFtZShmaWxlbmFtZSk6Ci0g
ICAgICAgICAgICBlcnJvcihsaW5lX251bWJlciwgJ3JlYWRhYmlsaXR5L3N0cmVhbXMnLCAzLAot
ICAgICAgICAgICAgICAgICAgJ1N0cmVhbXMgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC4nKQorICAg
ICAgICBlcnJvcihsaW5lX251bWJlciwgJ3JlYWRhYmlsaXR5L3N0cmVhbXMnLCAzLAorICAgICAg
ICAgICAgICAnU3RyZWFtcyBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLicpCiAKICAgICAjIExvb2sg
Zm9yIHNwZWNpZmljIGluY2x1ZGVzIHRvIGZpeC4KICAgICBpZiBpbmNsdWRlLnN0YXJ0c3dpdGgo
J3d0Zi8nKSBhbmQgbm90IGlzX3N5c3RlbToKQEAgLTIyOTEsNyArMjI3MCw3IEBAIGRlZiBjaGVj
a19sYW5ndWFnZShmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmaWxlX2V4dGVu
c2lvbiwgaW5jbHVkZV9zCiAgICAgICAgICAgICAgIChtYXRjaGVkLmdyb3VwKDEpLCBtYXRjaGVk
Lmdyb3VwKDIpKSkKIAogICAgICMgQ2hlY2sgdGhhdCB3ZSdyZSBub3QgdXNpbmcgUlRUSSBvdXRz
aWRlIG9mIHRlc3RpbmcgY29kZS4KLSAgICBpZiBzZWFyY2gocidcYmR5bmFtaWNfY2FzdDwnLCBs
aW5lKSBhbmQgbm90IF9pc190ZXN0X2ZpbGVuYW1lKGZpbGVuYW1lKToKKyAgICBpZiBzZWFyY2go
cidcYmR5bmFtaWNfY2FzdDwnLCBsaW5lKToKICAgICAgICAgZXJyb3IobGluZV9udW1iZXIsICdy
dW50aW1lL3J0dGknLCA1LAogICAgICAgICAgICAgICAnRG8gbm90IHVzZSBkeW5hbWljX2Nhc3Q8
Pi4gIElmIHlvdSBuZWVkIHRvIGNhc3Qgd2l0aGluIGEgY2xhc3MgJwogICAgICAgICAgICAgICAi
aGllcmFyY2h5LCB1c2Ugc3RhdGljX2Nhc3Q8PiB0byB1cGNhc3QuICBHb29nbGUgZG9lc24ndCBz
dXBwb3J0ICIKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
cHJvY2Vzc29ycy9jcHBfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL3Byb2Nlc3NvcnMvY3BwX3VuaXR0ZXN0LnB5CmluZGV4IGU1NTZjZDMuLjJhYTJhN2Eg
MTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvcHJvY2Vzc29y
cy9jcHBfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9wcm9jZXNzb3JzL2NwcF91bml0dGVzdC5weQpAQCAtMzc4LDEzICszNzgsOSBAQCBjbGFzcyBD
cHBTdHlsZVRlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CiAgICAgICAgICAgICAnRG8gbm90IHVzZSBk
eW5hbWljX2Nhc3Q8Pi4gIElmIHlvdSBuZWVkIHRvIGNhc3Qgd2l0aGluIGEgY2xhc3MgJwogICAg
ICAgICAgICAgJ2hpZXJhcmNoeSwgdXNlIHN0YXRpY19jYXN0PD4gdG8gdXBjYXN0LiAgR29vZ2xl
IGRvZXNuXCd0IHN1cHBvcnQgJwogICAgICAgICAgICAgJ1JUVEkuICBbcnVudGltZS9ydHRpXSBb
NV0nKQotICAgICAgICAjIGR5bmFtaWNfY2FzdCBpcyBkaXNhbGxvd2VkIGluIG1vc3QgZmlsZXMu
CisgICAgICAgICMgZHluYW1pY19jYXN0IGlzIGRpc2FsbG93ZWQgaW4gbW9zdCBmaWxlcyAuCiAg
ICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY3BwJywgc3RhdGVt
ZW50LCBlcnJvcl9tZXNzYWdlKQogICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19j
aGVjaygnZm9vLmgnLCBzdGF0ZW1lbnQsIGVycm9yX21lc3NhZ2UpCi0gICAgICAgICMgSXQgaXMg
ZXhwbGljaXRseSBhbGxvd2VkIGluIHRlc3RzLCBob3dldmVyLgotICAgICAgICBzZWxmLmFzc2Vy
dF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vX3Rlc3QuY3BwJywgc3RhdGVtZW50LCAnJykKLSAg
ICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvb191bml0dGVzdC5jcHAn
LCBzdGF0ZW1lbnQsICcnKQotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVj
aygnZm9vX3JlZ3Rlc3QuY3BwJywgc3RhdGVtZW50LCAnJykKIAogICAgICMgV2UgY2Fubm90IHRl
c3QgdGhpcyBmdW5jdGlvbmFsaXR5IGJlY2F1c2Ugb2YgZGlmZmVyZW5jZSBvZgogICAgICMgZnVu
Y3Rpb24gZGVmaW5pdGlvbnMuICBBbnl3YXksIHdlIG1heSBuZXZlciBlbmFibGUgdGhpcy4KQEAg
LTIwNTYsMTYgKzIwNTIsNiBAQCBjbGFzcyBPcmRlck9mSW5jbHVkZXNUZXN0KENwcFN0eWxlVGVz
dEJhc2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2luY2x1
ZGUgPGFzc2VydC5oPlxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJycpCiAKLSAgICBkZWYgdGVzdF93ZWJraXRfYXBpX3Rlc3RfZXhjbHVkZWQoc2VsZik6Ci0g
ICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdXZWJLaXRUb29scy9XZWJL
aXRBUElUZXN0L1Rlc3QuaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICcjaW5jbHVkZSAiZm9vLmgiXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnJykKLQotICAgIGRlZiB0ZXN0X3dlYmtpdF9hcGlfdGVzdF9leGNsdWRlZChz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ1dlYktpdC9x
dC9RR1ZMYXVuY2hlci9tYWluLmNwcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcjaW5jbHVkZSAiZm9vLmgiXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnJykKLQogICAgIGRlZiB0ZXN0X2NoZWNrX2xpbmVfYnJlYWtfYWZ0
ZXJfb3duX2hlYWRlcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNf
Y2hlY2soJ2Zvby5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnI2luY2x1ZGUgImNvbmZpZy5oIlxuJwo=
</data>
<flag name="review"
          id="30683"
          type_id="1"
          status="-"
          setter="hamaji"
    />
    <flag name="commit-queue"
          id="30684"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48134</attachid>
            <date>2010-02-04 05:40:23 -0800</date>
            <delta_ts>2010-02-05 01:20:56 -0800</delta_ts>
            <desc>Proposed patch 2</desc>
            <filename>_patch-33684-2.txt</filename>
            <type>text/plain</type>
            <size>53842</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAzZDA2OWEyLi5iODE4YTFjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTAtMDIt
MDMgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJvdmlkZWQgYSB3YXkgaW4gY2hl
Y2std2Via2l0LXN0eWxlIHRvIHNwZWNpZnkgZmlsdGVyIHJ1bGVzCisgICAgICAgIG9uIGEgcGVy
IGZpbGUgb3IgZm9sZGVyIGJhc2lzLCB2aWEgYSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzY4NAorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5OgorICAgICAgICAgIC0g
QWRkZWQgX1BBVEhfUlVMRVNfU1BFQ0lGSUVSIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisgICAg
ICAgICAgLSBJbiBQcm9jZXNzb3JPcHRpb25zIGNsYXNzLS0KKyAgICAgICAgICAgIC0gQ2hhbmdl
ZCB0aGUgQ2F0ZWdvcnlGaWx0ZXIgYXR0cmlidXRlIHRvIEZpbHRlckNvbmZpZ3VyYXRpb24uCisg
ICAgICAgICAgICAtIEFkZGVkIHBhdGggcGFyYW1ldGVyIHRvIGlzX3JlcG9ydGFibGUoKS4KKyAg
ICAgICAgICAtIFJlbmFtZWQgQXJndW1lbnREZWZhdWx0cyBmaWx0ZXJfcnVsZXMgYXR0cmlidXRl
IHRvCisgICAgICAgICAgICBiYXNlX2ZpbHRlcl9ydWxlcy4KKyAgICAgICAgICAtIFVwZGF0ZWQg
QXJndW1lbnRQcmludGVyIGNsYXNzLgorICAgICAgICAgIC0gQWRkZWQgZmlsdGVyIHJ1bGUgdmFs
aWRhdGlvbiB0byBBcmd1bWVudFBhcnNlciAoaW5zdGVhZCBvZgorICAgICAgICAgICAgaW4gQ2F0
ZWdvcnlGaWx0ZXIgY29uc3RydWN0b3IpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCB1bml0IHRlc3Rz
IGFzIG5lY2Vzc2FyeS4KKyAgICAgICAgICAtIEFkZGVkIHVuaXQgdGVzdHMgZm9yIFBBVEhfUlVM
RVNfU1BFQ0lGSUVSLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9lcnJvcl9o
YW5kbGVycy5weToKKyAgICAgICAgICAtIFVwZGF0ZWQgRGVmYXVsdFN0eWxlRXJyb3JIYW5kbGVy
IHRvIHVzZSBmaWxlIHBhdGggd2hlbgorICAgICAgICAgICAgY2FsbGluZyBpc19yZXBvcnRhYmxl
KCkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2Vycm9yX2hhbmRsZXJzX3Vu
aXR0ZXN0LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCB1bml0IHRlc3RzIGFzIG5lY2Vzc2FyeS4K
KworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsdGVyLnB5OgorICAgICAgICAg
IC0gTWFya2VkIENhdGVnb3J5RmlsdGVyIGludGVybmFsIHdpdGggYW4gdW5kZXJzY29yZS4KKyAg
ICAgICAgICAtIFJlbW92ZWQgYXJndW1lbnQgdmFsaWRhdGlvbiBmcm9tIENhdGVnb3J5RmlsdGVy
LgorICAgICAgICAgIC0gQWRkZWQgRmlsdGVyQ29uZmlndXJhdGlvbiBjbGFzcy4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsdGVyX3VuaXR0ZXN0LnB5OgorICAgICAgICAg
IC0gVXBkYXRlZCBDYXRlZ29yeUZpbHRlclRlc3QgY2xhc3MuCisgICAgICAgICAgLSBBZGRlZCBG
aWx0ZXJDb25maWd1cmF0aW9uVGVzdCB1bml0IHRlc3RzLgorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9wcm9jZXNzb3JzL2NwcC5weToKKyAgICAgICAgICAtIFJlbW92ZWQgX2lz
X3Rlc3RfZmlsZW5hbWUoKSBjb2RlLgorICAgICAgICAgIC0gUmVtb3ZlZCBoYXJkLWNvZGVkIHBh
dGggY2hlY2tzIGZyb20gY2hlY2tfaW5jbHVkZV9saW5lKCkuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL3Byb2Nlc3NvcnMvY3BwX3VuaXR0ZXN0LnB5OgorICAgICAgICAgIC0g
UmVtb3ZlZCB0aHJlZSB1bml0IHRlc3RzIHJlbGF0ZWQgdG8gZXhlbXB0ZWQgZmlsZXMuCisKIDIw
MTAtMDItMDIgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgU2hpbmljaGlybyBIYW1hamkuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggZGMxNGVhMy4uODFmMTBjZiAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMzcsNyAr
MzcsOCBAQCBpbXBvcnQgc3lzCiBmcm9tIC4uIHN0eWxlX3JlZmVyZW5jZXMgaW1wb3J0IHBhcnNl
X3BhdGNoCiBmcm9tIGVycm9yX2hhbmRsZXJzIGltcG9ydCBEZWZhdWx0U3R5bGVFcnJvckhhbmRs
ZXIKIGZyb20gZXJyb3JfaGFuZGxlcnMgaW1wb3J0IFBhdGNoU3R5bGVFcnJvckhhbmRsZXIKLWZy
b20gZmlsdGVyIGltcG9ydCBDYXRlZ29yeUZpbHRlcgorZnJvbSBmaWx0ZXIgaW1wb3J0IHZhbGlk
YXRlX2ZpbHRlcl9ydWxlcworZnJvbSBmaWx0ZXIgaW1wb3J0IEZpbHRlckNvbmZpZ3VyYXRpb24K
IGZyb20gcHJvY2Vzc29ycy5jb21tb24gaW1wb3J0IGNoZWNrX25vX2NhcnJpYWdlX3JldHVybgog
ZnJvbSBwcm9jZXNzb3JzLmNvbW1vbiBpbXBvcnQgY2F0ZWdvcmllcyBhcyBDb21tb25DYXRlZ29y
aWVzCiBmcm9tIHByb2Nlc3NvcnMuY3BwIGltcG9ydCBDcHBQcm9jZXNzb3IKQEAgLTg1LDYgKzg2
LDI3IEBAIFdFQktJVF9ERUZBVUxUX0ZJTFRFUl9SVUxFUyA9IFsKICAgICBdCiAKIAorIyBUaGUg
cGF0aC1zcGVjaWZpYyBmaWx0ZXIgcnVsZXMuCisjCisjIE9ubHkgdGhlIGZpcnN0IHN1YnN0cmlu
ZyBtYXRjaCBpcyB1c2VkLiAgU2VlIHRoZSBGaWx0ZXJDb25maWd1cmF0aW9uCisjIGRvY3VtZW50
YXRpb24gaW4gZmlsdGVyLnB5IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgbGlzdC4KK19Q
QVRIX1JVTEVTX1NQRUNJRklFUiA9IFsKKyAgICAjIEZpbGVzIGluIHRoZXNlIGRpcmVjdG9yaWVz
IGFyZSBjb25zdW1lcnMgb2YgdGhlIFdlYktpdAorICAgICMgQVBJIGFuZCB0aGVyZWZvcmUgZG8g
bm90IGZvbGxvdyB0aGUgc2FtZSBoZWFkZXIgaW5jbHVkaW5nCisgICAgIyBkaXNjaXBsaW5lIGFz
IFdlYkNvcmUuCisgICAgKFsiV2ViS2l0VG9vbHMvV2ViS2l0QVBJVGVzdC8iLAorICAgICAgIldl
YktpdC9xdC9RR1ZMYXVuY2hlci8iXSwKKyAgICAgKCItYnVpbGQvaW5jbHVkZSIsCisgICAgICAi
LXJlYWRhYmlsaXR5L3N0cmVhbXMiKSksCisgICAgIyBUaGVzZSBhcmUgdGVzdCBmaWxlIHBhdHRl
cm5zLgorICAgIChbIl90ZXN0LmNwcCIsCisgICAgICAiX3VuaXR0ZXN0LmNwcCIsCisgICAgICAi
X3JlZ3Rlc3QuY3BwIl0sCisgICAgICgiLXJlYWRhYmlsaXR5L3N0cmVhbXMiLCAgIyBNYW55IHVu
aXQgdGVzdHMgdXNlIGNvdXQuCisgICAgICAiLXJ1bnRpbWUvcnR0aSIpKSwKK10KKworCiAjIFNv
bWUgZmlsZXMgc2hvdWxkIGJlIHNraXBwZWQgd2hlbiBjaGVja2luZyBzdHlsZS4gRm9yIGV4YW1w
bGUsCiAjIFdlYktpdCBtYWludGFpbnMgc29tZSBmaWxlcyBpbiBNb3ppbGxhIHN0eWxlIG9uIHB1
cnBvc2UgdG8gZWFzZQogIyBmdXR1cmUgbWVyZ2VzLgpAQCAtMjAxLDQzICsyMjMsNTYgQEAgU3lu
dGF4OiAlKHByb2dyYW1fbmFtZSlzIFstLXZlcmJvc2U9I10gWy0tZ2l0LWNvbW1pdD08U2luZ2xl
Q29tbWl0Pl0gWy0tb3V0cHV0PXYKICAgICByZXR1cm4gdXNhZ2UKIAogCisjIEZJWE1FOiBFbGlt
aW5hdGUgc3VwcG9ydCBmb3IgImV4dHJhX2ZsYWdfdmFsdWVzIi4KKyMKKyMgRklYTUU6IFJlbW92
ZSBldmVyeXRoaW5nIGZyb20gUHJvY2Vzc29yT3B0aW9ucyBleGNlcHQgZm9yIHRoZQorIyAgICAg
ICAgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgcGFzc2VkIHZpYSB0aGUgY29tbWFuZCBsaW5lLCBh
bmQKKyMgICAgICAgIHJlbmFtZSB0byBzb21ldGhpbmcgbGlrZSBDaGVja1dlYktpdFN0eWxlT3B0
aW9ucy4gIFRoaXMKKyMgICAgICAgIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHJl
bW92aW5nIHRoZQorIyAgICAgICAgbWF4X3JlcG9ydHNfcGVyX2Vycm9yIGF0dHJpYnV0ZSBhbmQg
dGhlIGlzX3JlcG9ydGFibGUoKQorIyAgICAgICAgbWV0aG9kLiAgU2VlIGFsc28gdGhlIEZJWE1F
IGJlbG93IHRvIGNyZWF0ZSBhIG5ldyBjbGFzcworIyAgICAgICAgY2FsbGVkIHNvbWV0aGluZyBs
aWtlIENoZWNrZXJDb25maWd1cmF0aW9uLgorIwogIyBUaGlzIGNsYXNzIHNob3VsZCBub3QgaGF2
ZSBrbm93bGVkZ2Ugb2YgdGhlIGZsYWcga2V5IG5hbWVzLgogY2xhc3MgUHJvY2Vzc29yT3B0aW9u
cyhvYmplY3QpOgogCi0gICAgIiIiQSBjb250YWluZXIgdG8gc3RvcmUgb3B0aW9ucyB0byB1c2Ug
d2hlbiBjaGVja2luZyBzdHlsZS4KKyAgICAiIiJBIGNvbnRhaW5lciB0byBzdG9yZSBvcHRpb25z
IHBhc3NlZCB2aWEgdGhlIGNvbW1hbmQgbGluZS4KIAogICAgIEF0dHJpYnV0ZXM6Ci0gICAgICBv
dXRwdXRfZm9ybWF0OiBBIHN0cmluZyB0aGF0IGlzIHRoZSBvdXRwdXQgZm9ybWF0LiBUaGUgc3Vw
cG9ydGVkCi0gICAgICAgICAgICAgICAgICAgICBvdXRwdXQgZm9ybWF0cyBhcmUgImVtYWNzIiB3
aGljaCBlbWFjcyBjYW4gcGFyc2UKLSAgICAgICAgICAgICAgICAgICAgIGFuZCAidnM3IiB3aGlj
aCBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyA3IGNhbiBwYXJzZS4KLQotICAgICAgdmVyYm9zaXR5
OiBBbiBpbnRlZ2VyIGJldHdlZW4gMS01IGluY2x1c2l2ZSB0aGF0IHJlc3RyaWN0cyBvdXRwdXQK
LSAgICAgICAgICAgICAgICAgdG8gZXJyb3JzIHdpdGggYSBjb25maWRlbmNlIHNjb3JlIGF0IG9y
IGFib3ZlIHRoaXMgdmFsdWUuCi0gICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIDEsIHdo
aWNoIGRpc3BsYXlzIGFsbCBlcnJvcnMuCisgICAgICBleHRyYV9mbGFnX3ZhbHVlczogQSBzdHJp
bmctc3RyaW5nIGRpY3Rpb25hcnkgb2YgYWxsIGZsYWcga2V5LXZhbHVlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFpcnMgdGhhdCBhcmUgbm90IG90aGVyd2lzZSByZXByZXNlbnRlZCBieSB0
aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MuICBUaGUgZGVmYXVsdCBpcyB0aGUg
ZW1wdHkgZGljdGlvbmFyeS4KIAotICAgICAgZmlsdGVyOiBBIENhdGVnb3J5RmlsdGVyIGluc3Rh
bmNlLiBUaGUgZGVmYXVsdCBpcyB0aGUgZW1wdHkgZmlsdGVyLAotICAgICAgICAgICAgICB3aGlj
aCBtZWFucyB0aGF0IGFsbCBjYXRlZ29yaWVzIHNob3VsZCBiZSBjaGVja2VkLgorICAgICAgZmls
dGVyX2NvbmZpZ3VyYXRpb246IEEgRmlsdGVyQ29uZmlndXJhdGlvbiBpbnN0YW5jZS4gIFRoZSBk
ZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdGhlICJlbXB0eSIgZmlsdGVy
IGNvbmZpZ3VyYXRpb24sIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbnMg
dGhhdCBhbGwgZXJyb3JzIHNob3VsZCBiZSBjaGVja2VkLgogCiAgICAgICBnaXRfY29tbWl0OiBB
IHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGdpdCBjb21taXQgdG8gY2hlY2suCiAgICAgICAgICAg
ICAgICAgICBUaGUgZGVmYXVsdCBpcyBOb25lLgogCi0gICAgICBleHRyYV9mbGFnX3ZhbHVlczog
QSBzdHJpbmctc3RyaW5nIGRpY3Rpb25hcnkgb2YgYWxsIGZsYWcga2V5LXZhbHVlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgcGFpcnMgdGhhdCBhcmUgbm90IG90aGVyd2lzZSByZXByZXNlbnRl
ZCBieSB0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MuIFRoZSBkZWZhdWx0IGlz
IHRoZSBlbXB0eSBkaWN0aW9uYXJ5LgorICAgICAgbWF4X3JlcG9ydHNfcGVyX2Vycm9yOiBUaGUg
bWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIHRvIHJlcG9ydAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwZXIgZmlsZSwgcGVyIGNhdGVnb3J5LgogCi0gICAgIiIiCisgICAgICBvdXRwdXRf
Zm9ybWF0OiBBIHN0cmluZyB0aGF0IGlzIHRoZSBvdXRwdXQgZm9ybWF0LiAgVGhlIHN1cHBvcnRl
ZAorICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGZvcm1hdHMgYXJlICJlbWFjcyIgd2hpY2gg
ZW1hY3MgY2FuIHBhcnNlCisgICAgICAgICAgICAgICAgICAgICBhbmQgInZzNyIgd2hpY2ggTWlj
cm9zb2Z0IFZpc3VhbCBTdHVkaW8gNyBjYW4gcGFyc2UuCisKKyAgICAgIHZlcmJvc2l0eTogQW4g
aW50ZWdlciBiZXR3ZWVuIDEtNSBpbmNsdXNpdmUgdGhhdCByZXN0cmljdHMgb3V0cHV0CisgICAg
ICAgICAgICAgICAgIHRvIGVycm9ycyB3aXRoIGEgY29uZmlkZW5jZSBzY29yZSBhdCBvciBhYm92
ZSB0aGlzIHZhbHVlLgorICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyAxLCB3aGljaCBy
ZXBvcnRzIGFsbCBlcnJvcnMuCiAKKyAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwKLSAg
ICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdD0iZW1hY3MiLAotICAgICAgICAgICAgICAgICB2
ZXJib3NpdHk9MSwKLSAgICAgICAgICAgICAgICAgZmlsdGVyPU5vbmUsCi0gICAgICAgICAgICAg
ICAgIG1heF9yZXBvcnRzX3Blcl9jYXRlZ29yeT1Ob25lLAorICAgICAgICAgICAgICAgICBleHRy
YV9mbGFnX3ZhbHVlcz1Ob25lLAorICAgICAgICAgICAgICAgICBmaWx0ZXJfY29uZmlndXJhdGlv
biA9IE5vbmUsCiAgICAgICAgICAgICAgICAgIGdpdF9jb21taXQ9Tm9uZSwKLSAgICAgICAgICAg
ICAgICAgZXh0cmFfZmxhZ192YWx1ZXM9Tm9uZSk6CisgICAgICAgICAgICAgICAgIG1heF9yZXBv
cnRzX3Blcl9jYXRlZ29yeT1Ob25lLAorICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0PSJl
bWFjcyIsCisgICAgICAgICAgICAgICAgIHZlcmJvc2l0eT0xKToKICAgICAgICAgaWYgZXh0cmFf
ZmxhZ192YWx1ZXMgaXMgTm9uZToKICAgICAgICAgICAgIGV4dHJhX2ZsYWdfdmFsdWVzID0ge30K
LSAgICAgICAgaWYgZmlsdGVyIGlzIE5vbmU6Ci0gICAgICAgICAgICBmaWx0ZXIgPSBDYXRlZ29y
eUZpbHRlcigpCisgICAgICAgIGlmIGZpbHRlcl9jb25maWd1cmF0aW9uIGlzIE5vbmU6CisgICAg
ICAgICAgICBmaWx0ZXJfY29uZmlndXJhdGlvbiA9IEZpbHRlckNvbmZpZ3VyYXRpb24oKQogICAg
ICAgICBpZiBtYXhfcmVwb3J0c19wZXJfY2F0ZWdvcnkgaXMgTm9uZToKICAgICAgICAgICAgIG1h
eF9yZXBvcnRzX3Blcl9jYXRlZ29yeSA9IHt9CiAKQEAgLTI1Miw3ICsyODcsNyBAQCBjbGFzcyBQ
cm9jZXNzb3JPcHRpb25zKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdW
YWx1ZSBnaXZlbjogIiVzIi4nICUgdmVyYm9zaXR5KQogCiAgICAgICAgIHNlbGYuZXh0cmFfZmxh
Z192YWx1ZXMgPSBleHRyYV9mbGFnX3ZhbHVlcwotICAgICAgICBzZWxmLmZpbHRlciA9IGZpbHRl
cgorICAgICAgICBzZWxmLmZpbHRlcl9jb25maWd1cmF0aW9uID0gZmlsdGVyX2NvbmZpZ3VyYXRp
b24KICAgICAgICAgc2VsZi5naXRfY29tbWl0ID0gZ2l0X2NvbW1pdAogICAgICAgICBzZWxmLm1h
eF9yZXBvcnRzX3Blcl9jYXRlZ29yeSA9IG1heF9yZXBvcnRzX3Blcl9jYXRlZ29yeQogICAgICAg
ICBzZWxmLm91dHB1dF9mb3JtYXQgPSBvdXRwdXRfZm9ybWF0CkBAIC0yNjMsNyArMjk4LDcgQEAg
Y2xhc3MgUHJvY2Vzc29yT3B0aW9ucyhvYmplY3QpOgogICAgICAgICAiIiJSZXR1cm4gd2hldGhl
ciB0aGlzIFByb2Nlc3Nvck9wdGlvbnMgaW5zdGFuY2UgaXMgZXF1YWwgdG8gYW5vdGhlci4iIiIK
ICAgICAgICAgaWYgc2VsZi5leHRyYV9mbGFnX3ZhbHVlcyAhPSBvdGhlci5leHRyYV9mbGFnX3Zh
bHVlczoKICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBzZWxmLmZpbHRlciAh
PSBvdGhlci5maWx0ZXI6CisgICAgICAgIGlmIHNlbGYuZmlsdGVyX2NvbmZpZ3VyYXRpb24gIT0g
b3RoZXIuZmlsdGVyX2NvbmZpZ3VyYXRpb246CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAg
ICAgICAgaWYgc2VsZi5naXRfY29tbWl0ICE9IG90aGVyLmdpdF9jb21taXQ6CiAgICAgICAgICAg
ICByZXR1cm4gRmFsc2UKQEAgLTI3OCwxNSArMzEzLDE2IEBAIGNsYXNzIFByb2Nlc3Nvck9wdGlv
bnMob2JqZWN0KToKIAogICAgICMgVXNlZnVsIGZvciB1bml0IHRlc3RpbmcuCiAgICAgZGVmIF9f
bmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICMgUHl0aG9uIGRvZXMgbm90IGF1dG9tYXRpY2Fs
bHkgZGVkdWNlIGZyb20gX19lcV9fKCkuCi0gICAgICAgIHJldHVybiBub3QgKHNlbGYgPT0gb3Ro
ZXIpCisgICAgICAgICMgUHl0aG9uIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgZGVkdWNlIHRoaXMg
ZnJvbSBfX2VxX18oKS4KKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9fZXFfXyhvdGhlcikKIAot
ICAgIGRlZiBpc19yZXBvcnRhYmxlKHNlbGYsIGNhdGVnb3J5LCBjb25maWRlbmNlX2luX2Vycm9y
KToKKyAgICBkZWYgaXNfcmVwb3J0YWJsZShzZWxmLCBjYXRlZ29yeSwgY29uZmlkZW5jZV9pbl9l
cnJvciwgcGF0aCk6CiAgICAgICAgICIiIlJldHVybiB3aGV0aGVyIGFuIGVycm9yIGlzIHJlcG9y
dGFibGUuCiAKICAgICAgICAgQW4gZXJyb3IgaXMgcmVwb3J0YWJsZSBpZiB0aGUgY29uZmlkZW5j
ZSBpbiB0aGUgZXJyb3IKICAgICAgICAgaXMgYXQgbGVhc3QgdGhlIGN1cnJlbnQgdmVyYm9zaXR5
IGxldmVsLCBhbmQgaWYgdGhlIGN1cnJlbnQKLSAgICAgICAgZmlsdGVyIHNheXMgdGhhdCB0aGUg
Y2F0ZWdvcnkgc2hvdWxkIGJlIGNoZWNrZWQuCisgICAgICAgIGZpbHRlciBzYXlzIHRoYXQgdGhl
IGNhdGVnb3J5IHNob3VsZCBiZSBjaGVja2VkIGZvciB0aGUKKyAgICAgICAgZ2l2ZW4gcGF0aC4K
IAogICAgICAgICBBcmdzOgogICAgICAgICAgIGNhdGVnb3J5OiBBIHN0cmluZyB0aGF0IGlzIGEg
c3R5bGUgY2F0ZWdvcnkuCkBAIC0yOTQsMTUgKzMzMCwxMyBAQCBjbGFzcyBQcm9jZXNzb3JPcHRp
b25zKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcmVzZW50cyB0
aGUgYXBwbGljYXRpb24ncyBjb25maWRlbmNlIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhlIGVycm9yLiBBIGhpZ2hlciBudW1iZXIgc2lnbmlmaWVzIGdyZWF0ZXIKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWRlbmNlLgorICAgICAgICAgIHBhdGg6IFRo
ZSBwYXRoIG9mIHRoZSBmaWxlIGJlaW5nIGNoZWNrZWQKIAogICAgICAgICAiIiIKICAgICAgICAg
aWYgY29uZmlkZW5jZV9pbl9lcnJvciA8IHNlbGYudmVyYm9zaXR5OgogICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCiAKLSAgICAgICAgaWYgc2VsZi5maWx0ZXIgaXMgTm9uZToKLSAgICAgICAgICAg
IHJldHVybiBUcnVlICMgQWxsIGNhdGVnb3JpZXMgc2hvdWxkIGJlIGNoZWNrZWQgYnkgZGVmYXVs
dC4KLQotICAgICAgICByZXR1cm4gc2VsZi5maWx0ZXIuc2hvdWxkX2NoZWNrKGNhdGVnb3J5KQor
ICAgICAgICByZXR1cm4gc2VsZi5maWx0ZXJfY29uZmlndXJhdGlvbi5zaG91bGRfY2hlY2soY2F0
ZWdvcnksIHBhdGgpCiAKIAogIyBUaGlzIGNsYXNzIHNob3VsZCBub3QgaGF2ZSBrbm93bGVkZ2Ug
b2YgdGhlIGZsYWcga2V5IG5hbWVzLgpAQCAtMzEzLDE2ICszNDcsMTYgQEAgY2xhc3MgQXJndW1l
bnREZWZhdWx0cyhvYmplY3QpOgogICAgIEF0dHJpYnV0ZXM6CiAgICAgICBvdXRwdXRfZm9ybWF0
OiBBIHN0cmluZyB0aGF0IGlzIHRoZSBkZWZhdWx0IG91dHB1dCBmb3JtYXQuCiAgICAgICB2ZXJi
b3NpdHk6IEFuIGludGVnZXIgdGhhdCBpcyB0aGUgZGVmYXVsdCB2ZXJib3NpdHkgbGV2ZWwuCi0g
ICAgICBmaWx0ZXJfcnVsZXM6IEEgbGlzdCBvZiBzdHJpbmdzIHRoYXQgYXJlIGJvb2xlYW4gZmls
dGVyIHJ1bGVzCi0gICAgICAgICAgICAgICAgICAgIHRvIHByZXBlbmQgdG8gYW55IHVzZXItc3Bl
Y2lmaWVkIHJ1bGVzLgorICAgICAgYmFzZV9maWx0ZXJfcnVsZXM6IEEgbGlzdCBvZiBzdHJpbmdz
IHRoYXQgYXJlIGJvb2xlYW4gZmlsdGVyIHJ1bGVzCisgICAgICAgICAgICAgICAgICAgICAgICAg
dG8gcHJlcGVuZCB0byBhbnkgdXNlci1zcGVjaWZpZWQgcnVsZXMuCiAKICAgICAiIiIKIAogICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBkZWZhdWx0X291dHB1dF9mb3JtYXQsIGRlZmF1bHRfdmVyYm9z
aXR5LAotICAgICAgICAgICAgICAgICBkZWZhdWx0X2ZpbHRlcl9ydWxlcyk6CisgICAgICAgICAg
ICAgICAgIGRlZmF1bHRfYmFzZV9maWx0ZXJfcnVsZXMpOgogICAgICAgICBzZWxmLm91dHB1dF9m
b3JtYXQgPSBkZWZhdWx0X291dHB1dF9mb3JtYXQKICAgICAgICAgc2VsZi52ZXJib3NpdHkgPSBk
ZWZhdWx0X3ZlcmJvc2l0eQotICAgICAgICBzZWxmLmZpbHRlcl9ydWxlcyA9IGRlZmF1bHRfZmls
dGVyX3J1bGVzCisgICAgICAgIHNlbGYuYmFzZV9maWx0ZXJfcnVsZXMgPSBkZWZhdWx0X2Jhc2Vf
ZmlsdGVyX3J1bGVzCiAKIAogY2xhc3MgQXJndW1lbnRQcmludGVyKG9iamVjdCk6CkBAIC0zNDUs
MTEgKzM3OSwxMCBAQCBjbGFzcyBBcmd1bWVudFByaW50ZXIob2JqZWN0KToKIAogICAgICAgICBm
bGFnc1snb3V0cHV0J10gPSBvcHRpb25zLm91dHB1dF9mb3JtYXQKICAgICAgICAgZmxhZ3NbJ3Zl
cmJvc2UnXSA9IG9wdGlvbnMudmVyYm9zaXR5Ci0gICAgICAgIGlmIG9wdGlvbnMuZmlsdGVyOgot
ICAgICAgICAgICAgIyBPbmx5IGluY2x1ZGUgdGhlIGZpbHRlciBmbGFnIGlmIHJ1bGVzIGFyZSBw
cmVzZW50LgotICAgICAgICAgICAgZmlsdGVyX3N0cmluZyA9IHN0cihvcHRpb25zLmZpbHRlcikK
LSAgICAgICAgICAgIGlmIGZpbHRlcl9zdHJpbmc6Ci0gICAgICAgICAgICAgICAgZmxhZ3NbJ2Zp
bHRlciddID0gZmlsdGVyX3N0cmluZworICAgICAgICAjIE9ubHkgaW5jbHVkZSB0aGUgZmlsdGVy
IGZsYWcgaWYgdXNlci1wcm92aWRlZCBydWxlcyBhcmUgcHJlc2VudC4KKyAgICAgICAgdXNlcl9y
dWxlcyA9IG9wdGlvbnMuZmlsdGVyX2NvbmZpZ3VyYXRpb24udXNlcl9ydWxlcworICAgICAgICBp
ZiB1c2VyX3J1bGVzOgorICAgICAgICAgICAgZmxhZ3NbJ2ZpbHRlciddID0gIiwiLmpvaW4odXNl
cl9ydWxlcykKICAgICAgICAgaWYgb3B0aW9ucy5naXRfY29tbWl0OgogICAgICAgICAgICAgZmxh
Z3NbJ2dpdC1jb21taXQnXSA9IG9wdGlvbnMuZ2l0X2NvbW1pdAogCkBAIC00MDksNyArNDQyLDcg
QEAgY2xhc3MgQXJndW1lbnRQYXJzZXIob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYuZG9jX3By
aW50KCcgICAgJyArIGNhdGVnb3J5ICsgJ1xuJykKIAogICAgICAgICBzZWxmLmRvY19wcmludCgn
XG5EZWZhdWx0IGZpbHRlciBydWxlcyoqOlxuJykKLSAgICAgICAgZm9yIGZpbHRlcl9ydWxlIGlu
IHNvcnRlZChzZWxmLmRlZmF1bHRzLmZpbHRlcl9ydWxlcyk6CisgICAgICAgIGZvciBmaWx0ZXJf
cnVsZSBpbiBzb3J0ZWQoc2VsZi5kZWZhdWx0cy5iYXNlX2ZpbHRlcl9ydWxlcyk6CiAgICAgICAg
ICAgICBzZWxmLmRvY19wcmludCgnICAgICcgKyBmaWx0ZXJfcnVsZSArICdcbicpCiAgICAgICAg
IHNlbGYuZG9jX3ByaW50KCdcbioqVGhlIGNvbW1hbmQgYWx3YXlzIGV2YWx1YXRlcyB0aGUgYWJv
dmUgcnVsZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZCBiZWZvcmUgYW55IC0tZmls
dGVyIGZsYWcuXG5cbicpCkBAIC00MTcsMTAgKzQ1MCw3IEBAIGNsYXNzIEFyZ3VtZW50UGFyc2Vy
KG9iamVjdCk6CiAgICAgICAgIHN5cy5leGl0KDApCiAKICAgICBkZWYgX3BhcnNlX2ZpbHRlcl9m
bGFnKHNlbGYsIGZsYWdfdmFsdWUpOgotICAgICAgICAiIiJQYXJzZSB0aGUgdmFsdWUgb2YgdGhl
IC0tZmlsdGVyIGZsYWcuCi0KLSAgICAgICAgVGhlc2UgZmlsdGVycyBhcmUgYXBwbGllZCB3aGVu
IGRlY2lkaW5nIHdoZXRoZXIgdG8gZW1pdCBhIGdpdmVuCi0gICAgICAgIGVycm9yIG1lc3NhZ2Uu
CisgICAgICAgICIiIlBhcnNlIHRoZSAtLWZpbHRlciBmbGFnLCBhbmQgcmV0dXJuIGEgbGlzdCBv
ZiBmaWx0ZXIgcnVsZXMuCiAKICAgICAgICAgQXJnczoKICAgICAgICAgICBmbGFnX3ZhbHVlOiBB
IHN0cmluZyBvZiBjb21tYS1zZXBhcmF0ZWQgZmlsdGVyIHJ1bGVzLCBmb3IKQEAgLTQ1Nyw3ICs0
ODcsNyBAQCBjbGFzcyBBcmd1bWVudFBhcnNlcihvYmplY3QpOgogCiAgICAgICAgIG91dHB1dF9m
b3JtYXQgPSBzZWxmLmRlZmF1bHRzLm91dHB1dF9mb3JtYXQKICAgICAgICAgdmVyYm9zaXR5ID0g
c2VsZi5kZWZhdWx0cy52ZXJib3NpdHkKLSAgICAgICAgZmlsdGVyX3J1bGVzID0gc2VsZi5kZWZh
dWx0cy5maWx0ZXJfcnVsZXMKKyAgICAgICAgYmFzZV9ydWxlcyA9IHNlbGYuZGVmYXVsdHMuYmFz
ZV9maWx0ZXJfcnVsZXMKIAogICAgICAgICAjIFRoZSBmbGFncyBhbHJlYWR5IHN1cHBvcnRlZCBi
eSB0aGUgUHJvY2Vzc29yT3B0aW9ucyBjbGFzcy4KICAgICAgICAgZmxhZ3MgPSBbJ2hlbHAnLCAn
b3V0cHV0PScsICd2ZXJib3NlPScsICdmaWx0ZXI9JywgJ2dpdC1jb21taXQ9J10KQEAgLTQ4MCw2
ICs1MTAsNyBAQCBjbGFzcyBBcmd1bWVudFBhcnNlcihvYmplY3QpOgogCiAgICAgICAgIGV4dHJh
X2ZsYWdfdmFsdWVzID0ge30KICAgICAgICAgZ2l0X2NvbW1pdCA9IE5vbmUKKyAgICAgICAgdXNl
cl9ydWxlcyA9IFtdCiAKICAgICAgICAgZm9yIChvcHQsIHZhbCkgaW4gb3B0czoKICAgICAgICAg
ICAgIGlmIG9wdCA9PSAnLS1oZWxwJzoKQEAgLTQ5NCw3ICs1MjUsNyBAQCBjbGFzcyBBcmd1bWVu
dFBhcnNlcihvYmplY3QpOgogICAgICAgICAgICAgICAgIGlmIG5vdCB2YWw6CiAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2V4aXRfd2l0aF9jYXRlZ29yaWVzKCkKICAgICAgICAgICAgICAgICAj
IFByZXBlbmQgdGhlIGRlZmF1bHRzLgotICAgICAgICAgICAgICAgIGZpbHRlcl9ydWxlcyA9IGZp
bHRlcl9ydWxlcyArIHNlbGYuX3BhcnNlX2ZpbHRlcl9mbGFnKHZhbCkKKyAgICAgICAgICAgICAg
ICB1c2VyX3J1bGVzID0gc2VsZi5fcGFyc2VfZmlsdGVyX2ZsYWcodmFsKQogICAgICAgICAgICAg
ZWxzZToKICAgICAgICAgICAgICAgICBleHRyYV9mbGFnX3ZhbHVlc1tvcHRdID0gdmFsCiAKQEAg
LTUwOCwxNSArNTM5LDIwIEBAIGNsYXNzIEFyZ3VtZW50UGFyc2VyKG9iamVjdCk6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdhbGxvd2VkIG91dHB1dCBmb3JtYXRzIGFyZSBlbWFjcyBh
bmQgdnM3LicgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0KQog
CisgICAgICAgIGFsbF9jYXRlZ29yaWVzID0gc3R5bGVfY2F0ZWdvcmllcygpCisgICAgICAgIHZh
bGlkYXRlX2ZpbHRlcl9ydWxlcyh1c2VyX3J1bGVzLCBhbGxfY2F0ZWdvcmllcykKKwogICAgICAg
ICB2ZXJib3NpdHkgPSBpbnQodmVyYm9zaXR5KQogICAgICAgICBpZiAodmVyYm9zaXR5IDwgMSkg
b3IgKHZlcmJvc2l0eSA+IDUpOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxp
ZCAtLXZlcmJvc2UgdmFsdWUgJXM6IHZhbHVlIG11c3QgJwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnYmUgYmV0d2VlbiAxLTUuJyAlIHZlcmJvc2l0eSkKIAotICAgICAgICBmaWx0ZXIg
PSBDYXRlZ29yeUZpbHRlcihmaWx0ZXJfcnVsZXMpCisgICAgICAgIGZpbHRlcl9jb25maWd1cmF0
aW9uID0gRmlsdGVyQ29uZmlndXJhdGlvbihiYXNlX3J1bGVzPWJhc2VfcnVsZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfc3BlY2lmaWM9X1BBVEhfUlVMRVNfU1BF
Q0lGSUVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX3J1bGVzPXVz
ZXJfcnVsZXMpCiAKICAgICAgICAgb3B0aW9ucyA9IFByb2Nlc3Nvck9wdGlvbnMoZXh0cmFfZmxh
Z192YWx1ZXM9ZXh0cmFfZmxhZ192YWx1ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgZmlsdGVy
PWZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfY29uZmlndXJhdGlvbj1maWx0
ZXJfY29uZmlndXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICBnaXRfY29tbWl0PWdpdF9j
b21taXQsCiAgICAgICAgICAgICAgICAgICAgICAgbWF4X3JlcG9ydHNfcGVyX2NhdGVnb3J5PU1B
WF9SRVBPUlRTX1BFUl9DQVRFR09SWSwKICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9y
bWF0PW91dHB1dF9mb3JtYXQsCkBAIC02MjMsNiArNjU5LDE4IEBAIGNsYXNzIFByb2Nlc3NvckRp
c3BhdGNoZXIob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHByb2Nlc3NvcgogCiAKKyMgRklYTUU6
IFdoZW4gY3JlYXRpbmcgdGhlIG5ldyBDaGVja1dlYktpdFN0eWxlT3B0aW9ucyBjbGFzcyBhcwor
IyAgICAgICAgZGVzY3JpYmVkIGluIGEgRklYTUUgYWJvdmUsIGFkZCBhIG5ldyBjbGFzcyBoZXJl
IGNhbGxlZAorIyAgICAgICAgc29tZXRoaW5nIGxpa2UgQ2hlY2tlckNvbmZpZ3VyYXRpb24uICBU
aGUgY2xhc3Mgc2hvdWxkIGNvbnRhaW4KKyMgICAgICAgIGF0dHJpYnV0ZXMgZm9yIG9wdGlvbnMg
bmVlZGVkIHRvIHByb2Nlc3MgYSBmaWxlLiAgVGhpcyBpbmNsdWRlcworIyAgICAgICAgYSBzdWJz
ZXQgb2YgdGhlIENoZWNrV2ViS2l0U3R5bGVPcHRpb25zIGF0dHJpYnV0ZXMsIGEKKyMgICAgICAg
IEZpbHRlckNvbmZpZ3VyYXRpb24gYXR0cmlidXRlLCBhbiBzdGRlcnJfd3JpdGUgYXR0cmlidXRl
LCBhCisjICAgICAgICBtYXhfcmVwb3J0c19wZXJfY2F0ZWdvcnkgYXR0cmlidXRlLCBldGMuICBJ
dCBjYW4gYWxzbyBpbmNsdWRlCisjICAgICAgICB0aGUgaXNfcmVwb3J0YWJsZSgpIG1ldGhvZC4g
IFRoZSBTdHlsZUNoZWNrZXIgc2hvdWxkIGFjY2VwdAorIyAgICAgICAgYW4gaW5zdGFuY2Ugb2Yg
dGhpcyBjbGFzcyByYXRoZXIgdGhhbiBhIFByb2Nlc3Nvck9wdGlvbnMKKyMgICAgICAgIGluc3Rh
bmNlLgorCisKIGNsYXNzIFN0eWxlQ2hlY2tlcihvYmplY3QpOgogCiAgICAgIiIiU3VwcG9ydHMg
Y2hlY2tpbmcgc3R5bGUgaW4gZmlsZXMgYW5kIHBhdGNoZXMuCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkKaW5kZXggODE0
YmQ0MS4uM2JkMmMxYiAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQpAQCAtMzcsMTAgKzM3LDEzIEBACiBpbXBvcnQg
dW5pdHRlc3QKIAogaW1wb3J0IGNoZWNrZXIgYXMgc3R5bGUKK2Zyb20gY2hlY2tlciBpbXBvcnQg
X1BBVEhfUlVMRVNfU1BFQ0lGSUVSIGFzIFBBVEhfUlVMRVNfU1BFQ0lGSUVSCitmcm9tIGNoZWNr
ZXIgaW1wb3J0IHN0eWxlX2NhdGVnb3JpZXMKIGZyb20gY2hlY2tlciBpbXBvcnQgUHJvY2Vzc29y
RGlzcGF0Y2hlcgogZnJvbSBjaGVja2VyIGltcG9ydCBQcm9jZXNzb3JPcHRpb25zCiBmcm9tIGNo
ZWNrZXIgaW1wb3J0IFN0eWxlQ2hlY2tlcgotZnJvbSBmaWx0ZXIgaW1wb3J0IENhdGVnb3J5Rmls
dGVyCitmcm9tIGZpbHRlciBpbXBvcnQgdmFsaWRhdGVfZmlsdGVyX3J1bGVzCitmcm9tIGZpbHRl
ciBpbXBvcnQgRmlsdGVyQ29uZmlndXJhdGlvbgogZnJvbSBwcm9jZXNzb3JzLmNwcCBpbXBvcnQg
Q3BwUHJvY2Vzc29yCiBmcm9tIHByb2Nlc3NvcnMudGV4dCBpbXBvcnQgVGV4dFByb2Nlc3Nvcgog
CkBAIC01NCw3ICs1Nyw3IEBAIGNsYXNzIFByb2Nlc3Nvck9wdGlvbnNUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgIyBDaGVjayBkZWZhdWx0IHBhcmFtZXRlcnMuCiAgICAgICAgIG9w
dGlvbnMgPSBQcm9jZXNzb3JPcHRpb25zKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0
aW9ucy5leHRyYV9mbGFnX3ZhbHVlcywge30pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9w
dGlvbnMuZmlsdGVyLCBDYXRlZ29yeUZpbHRlcigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhvcHRpb25zLmZpbHRlcl9jb25maWd1cmF0aW9uLCBGaWx0ZXJDb25maWd1cmF0aW9uKCkpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMuZ2l0X2NvbW1pdCwgTm9uZSkKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5tYXhfcmVwb3J0c19wZXJfY2F0ZWdvcnksIHt9
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLm91dHB1dF9mb3JtYXQsICJlbWFj
cyIpCkBAIC03MCwxNCArNzMsMTUgQEAgY2xhc3MgUHJvY2Vzc29yT3B0aW9uc1Rlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICBQcm9jZXNzb3JPcHRpb25zKHZlcmJvc2l0eT01KSAjIHdv
cmtzCiAKICAgICAgICAgIyBDaGVjayBhdHRyaWJ1dGVzLgorICAgICAgICBmaWx0ZXJfY29uZmln
dXJhdGlvbiA9IEZpbHRlckNvbmZpZ3VyYXRpb24oYmFzZV9ydWxlcz1bIisiXSkKICAgICAgICAg
b3B0aW9ucyA9IFByb2Nlc3Nvck9wdGlvbnMoZXh0cmFfZmxhZ192YWx1ZXM9eyJleHRyYV92YWx1
ZSIgOiAyfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyPUNhdGVn
b3J5RmlsdGVyKFsiKyJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmls
dGVyX2NvbmZpZ3VyYXRpb249ZmlsdGVyX2NvbmZpZ3VyYXRpb24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdpdF9jb21taXQ9ImNvbW1pdCIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1heF9yZXBvcnRzX3Blcl9jYXRlZ29yeT17ImNhdGVnb3J5Ijog
M30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3JtYXQ9InZz
NyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2l0eT0zKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLmV4dHJhX2ZsYWdfdmFsdWVzLCB7ImV4dHJh
X3ZhbHVlIiA6IDJ9KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLmZpbHRlciwg
Q2F0ZWdvcnlGaWx0ZXIoWyIrIl0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25z
LmZpbHRlcl9jb25maWd1cmF0aW9uLCBmaWx0ZXJfY29uZmlndXJhdGlvbikKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMob3B0aW9ucy5naXRfY29tbWl0LCAiY29tbWl0IikKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMob3B0aW9ucy5tYXhfcmVwb3J0c19wZXJfY2F0ZWdvcnksIHsiY2F0ZWdv
cnkiOiAzfSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5vdXRwdXRfZm9ybWF0
LCAidnM3IikKQEAgLTg4LDE1ICs5MiwxOCBAQCBjbGFzcyBQcm9jZXNzb3JPcHRpb25zVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICMgPT0gY2FsbHMgX19lcV9fLgogICAgICAgICBz
ZWxmLmFzc2VydFRydWUoUHJvY2Vzc29yT3B0aW9ucygpID09IFByb2Nlc3Nvck9wdGlvbnMoKSkK
IAotICAgICAgICAjIFZlcmlmeSB0aGF0IGEgZGlmZmVyZW5jZSBpbiBhbnkgYXJndW1lbnQgY2F1
c2UgZXF1YWxpdHkgdG8gZmFpbC4KKyAgICAgICAgIyBWZXJpZnkgdGhhdCBhIGRpZmZlcmVuY2Ug
aW4gYW55IGFyZ3VtZW50IGNhdXNlcyBlcXVhbGl0eSB0byBmYWlsLgorICAgICAgICBmaWx0ZXJf
Y29uZmlndXJhdGlvbiA9IEZpbHRlckNvbmZpZ3VyYXRpb24oYmFzZV9ydWxlcz1bIisiXSkKICAg
ICAgICAgb3B0aW9ucyA9IFByb2Nlc3Nvck9wdGlvbnMoZXh0cmFfZmxhZ192YWx1ZXM9eyJleHRy
YV92YWx1ZSIgOiAxfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVy
PUNhdGVnb3J5RmlsdGVyKFsiKyJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmlsdGVyX2NvbmZpZ3VyYXRpb249ZmlsdGVyX2NvbmZpZ3VyYXRpb24sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdpdF9jb21taXQ9ImNvbW1pdCIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9yZXBvcnRzX3Blcl9jYXRlZ29yeT17ImNhdGVn
b3J5IjogM30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9mb3Jt
YXQ9InZzNyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2l0eT0x
KQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wdGlvbnMgPT0gUHJvY2Vzc29yT3B0aW9ucyhl
eHRyYV9mbGFnX3ZhbHVlcz17ImV4dHJhX3ZhbHVlIiA6IDJ9KSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZShvcHRpb25zID09IFByb2Nlc3Nvck9wdGlvbnMoZmlsdGVyPUNhdGVnb3J5RmlsdGVy
KFsiLSJdKSkpCisgICAgICAgIG5ld19jb25maWcgPSBGaWx0ZXJDb25maWd1cmF0aW9uKGJhc2Vf
cnVsZXM9WyItIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3B0aW9ucyA9PQorICAgICAg
ICAgICAgICAgICAgICAgICAgIFByb2Nlc3Nvck9wdGlvbnMoZmlsdGVyX2NvbmZpZ3VyYXRpb249
bmV3X2NvbmZpZykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3B0aW9ucyA9PSBQcm9jZXNz
b3JPcHRpb25zKGdpdF9jb21taXQ9ImNvbW1pdDIiKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShvcHRpb25zID09IFByb2Nlc3Nvck9wdGlvbnMobWF4X3JlcG9ydHNfcGVyX2NhdGVnb3J5PQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ImNh
dGVnb3J5IjogMn0pKQpAQCAtMTEzLDM2ICsxMjAsNDEgQEAgY2xhc3MgUHJvY2Vzc29yT3B0aW9u
c1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfaXNfcmVwb3J0YWJsZShz
ZWxmKToKICAgICAgICAgIiIiVGVzdCBpc19yZXBvcnRhYmxlKCkuIiIiCi0gICAgICAgIGZpbHRl
ciA9IENhdGVnb3J5RmlsdGVyKFsiLXh5eiJdKQotICAgICAgICBvcHRpb25zID0gUHJvY2Vzc29y
T3B0aW9ucyhmaWx0ZXI9ZmlsdGVyLCB2ZXJib3NpdHk9MykKKyAgICAgICAgZmlsdGVyX2NvbmZp
Z3VyYXRpb24gPSBGaWx0ZXJDb25maWd1cmF0aW9uKGJhc2VfcnVsZXM9WyIteHl6Il0pCisgICAg
ICAgIG9wdGlvbnMgPSBQcm9jZXNzb3JPcHRpb25zKGZpbHRlcl9jb25maWd1cmF0aW9uPWZpbHRl
cl9jb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJi
b3NpdHk9MykKIAogICAgICAgICAjIFRlc3QgdmVyYm9zaXR5Ci0gICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShvcHRpb25zLmlzX3JlcG9ydGFibGUoImFiYyIsIDMpKQotICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKG9wdGlvbnMuaXNfcmVwb3J0YWJsZSgiYWJjIiwgMikpCisgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShvcHRpb25zLmlzX3JlcG9ydGFibGUoImFiYyIsIDMsICJmb28uaCIpKQorICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKG9wdGlvbnMuaXNfcmVwb3J0YWJsZSgiYWJjIiwgMiwgImZvby5o
IikpCiAKICAgICAgICAgIyBUZXN0IGZpbHRlcgotICAgICAgICBzZWxmLmFzc2VydFRydWUob3B0
aW9ucy5pc19yZXBvcnRhYmxlKCJ4eSIsIDMpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9w
dGlvbnMuaXNfcmVwb3J0YWJsZSgieHl6IiwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShv
cHRpb25zLmlzX3JlcG9ydGFibGUoInh5IiwgMywgImZvby5oIikpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RmFsc2Uob3B0aW9ucy5pc19yZXBvcnRhYmxlKCJ4eXoiLCAzLCAiZm9vLmgiKSkKIAogCiBj
bGFzcyBHbG9iYWxWYXJpYWJsZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICIiIlRl
c3RzIHZhbGlkaXR5IG9mIHRoZSBnbG9iYWwgdmFyaWFibGVzLiIiIgogCisgICAgZGVmIF9hbGxf
Y2F0ZWdvcmllcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHN0eWxlLnN0eWxlX2NhdGVnb3JpZXMo
KQorCiAgICAgZGVmIGRlZmF1bHRzKHNlbGYpOgogICAgICAgICByZXR1cm4gc3R5bGUud2Via2l0
X2FyZ3VtZW50X2RlZmF1bHRzKCkKIAogICAgIGRlZiB0ZXN0X2ZpbHRlcl9ydWxlcyhzZWxmKToK
ICAgICAgICAgZGVmYXVsdHMgPSBzZWxmLmRlZmF1bHRzKCkKICAgICAgICAgYWxyZWFkeV9zZWVu
ID0gW10KLSAgICAgICAgYWxsX2NhdGVnb3JpZXMgPSBzdHlsZS5zdHlsZV9jYXRlZ29yaWVzKCkK
LSAgICAgICAgZm9yIHJ1bGUgaW4gZGVmYXVsdHMuZmlsdGVyX3J1bGVzOgorICAgICAgICB2YWxp
ZGF0ZV9maWx0ZXJfcnVsZXMoZGVmYXVsdHMuYmFzZV9maWx0ZXJfcnVsZXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9hbGxfY2F0ZWdvcmllcygpKQorICAgICAgICAjIEFs
c28gZG8gc29tZSBhZGRpdGlvbmFsIGNoZWNrcy4KKyAgICAgICAgZm9yIHJ1bGUgaW4gZGVmYXVs
dHMuYmFzZV9maWx0ZXJfcnVsZXM6CiAgICAgICAgICAgICAjIENoZWNrIG5vIGxlYWRpbmcgb3Ig
dHJhaWxpbmcgd2hpdGUgc3BhY2UuCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhydWxl
LCBydWxlLnN0cmlwKCkpCiAgICAgICAgICAgICAjIEFsbCBjYXRlZ29yaWVzIGFyZSBvbiBieSBk
ZWZhdWx0LCBzbyBkZWZhdWx0cyBzaG91bGQKICAgICAgICAgICAgICMgYmVnaW4gd2l0aCAtLgog
ICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bGUuc3RhcnRzd2l0aCgnLScpKQotICAgICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bGVbMTpdIGluIGFsbF9jYXRlZ29yaWVzKQogICAgICAg
ICAgICAgIyBDaGVjayBubyBydWxlIG9jY3VycyB0d2ljZS4KICAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RmFsc2UocnVsZSBpbiBhbHJlYWR5X3NlZW4pCiAgICAgICAgICAgICBhbHJlYWR5X3NlZW4u
YXBwZW5kKHJ1bGUpCkBAIC0xNTgsMTEgKzE3MCwyNyBAQCBjbGFzcyBHbG9iYWxWYXJpYWJsZXNU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgIyBvbiB2YWxpZCBhcmd1bWVudHMgZWxz
ZXdoZXJlLgogICAgICAgICBwYXJzZXIucGFyc2UoW10pICMgYXJndW1lbnRzIHZhbGlkOiBubyBl
cnJvciBvciBTeXN0ZW1FeGl0CiAKKyAgICBkZWYgdGVzdF9wYXRoX3J1bGVzX3NwZWNpZmllcihz
ZWxmKToKKyAgICAgICAgYWxsX2NhdGVnb3JpZXMgPSBzdHlsZV9jYXRlZ29yaWVzKCkKKyAgICAg
ICAgZm9yIChzdWJfcGF0aHMsIHBhdGhfcnVsZXMpIGluIFBBVEhfUlVMRVNfU1BFQ0lGSUVSOgor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UocGF0aF9ydWxlcywgdHVwbGUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaGVja2luZzogIiArIHN0cihwYXRoX3J1
bGVzKSkKKyAgICAgICAgICAgIHZhbGlkYXRlX2ZpbHRlcl9ydWxlcyhwYXRoX3J1bGVzLCBzZWxm
Ll9hbGxfY2F0ZWdvcmllcygpKQorCisgICAgICAgICMgVHJ5IHVzaW5nIHRoZSBwYXRoIHNwZWNp
ZmllciAoYXMgYW4gImVuZC10by1lbmQiIGNoZWNrKS4KKyAgICAgICAgY29uZmlnID0gRmlsdGVy
Q29uZmlndXJhdGlvbihwYXRoX3NwZWNpZmljPVBBVEhfUlVMRVNfU1BFQ0lGSUVSKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUoY29uZmlnLnNob3VsZF9jaGVjaygieHh4X2FueV9jYXRlZ29yeSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4eHhfbm9uX21h
dGNoaW5nX3BhdGgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5zaG91bGRfY2hl
Y2soInh4eF9hbnlfY2F0ZWdvcnkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiV2ViS2l0VG9vbHMvV2ViS2l0QVBJVGVzdC8iKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShjb25maWcuc2hvdWxkX2NoZWNrKCJidWlsZC9pbmNsdWRlIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXZWJLaXRUb29scy9XZWJLaXRB
UElUZXN0LyIpKQorCiAgICAgZGVmIHRlc3RfbWF4X3JlcG9ydHNfcGVyX2NhdGVnb3J5KHNlbGYp
OgogICAgICAgICAiIiJDaGVjayB0aGF0IE1BWF9SRVBPUlRTX1BFUl9DQVRFR09SWSBpcyB2YWxp
ZC4iIiIKLSAgICAgICAgY2F0ZWdvcmllcyA9IHN0eWxlLnN0eWxlX2NhdGVnb3JpZXMoKQorICAg
ICAgICBhbGxfY2F0ZWdvcmllcyA9IHNlbGYuX2FsbF9jYXRlZ29yaWVzKCkKICAgICAgICAgZm9y
IGNhdGVnb3J5IGluIHN0eWxlLk1BWF9SRVBPUlRTX1BFUl9DQVRFR09SWS5pdGVya2V5cygpOgot
ICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhdGVnb3J5IGluIGNhdGVnb3JpZXMsCisgICAg
ICAgICAgICBzZWxmLmFzc2VydFRydWUoY2F0ZWdvcnkgaW4gYWxsX2NhdGVnb3JpZXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ0tleSAiJXMiIGlzIG5vdCBhIGNhdGVnb3J5JyAlIGNh
dGVnb3J5KQogCiAKQEAgLTE3MiwxMiArMjAwLDE1IEBAIGNsYXNzIEFyZ3VtZW50UHJpbnRlclRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgX3ByaW50ZXIgPSBzdHlsZS5Bcmd1bWVudFBy
aW50ZXIoKQogCi0gICAgZGVmIF9jcmVhdGVfb3B0aW9ucyhzZWxmLCBvdXRwdXRfZm9ybWF0PSdl
bWFjcycsIHZlcmJvc2l0eT0zLAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX3J1bGVz
PVtdLCBnaXRfY29tbWl0PU5vbmUsCisgICAgZGVmIF9jcmVhdGVfb3B0aW9ucyhzZWxmLAorICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdD0nZW1hY3MnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdmVyYm9zaXR5PTMsCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX3J1
bGVzPVtdLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2l0X2NvbW1pdD1Ob25lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgZXh0cmFfZmxhZ192YWx1ZXM9e30pOgotICAgICAgICBmaWx0ZXIg
PSBDYXRlZ29yeUZpbHRlcihmaWx0ZXJfcnVsZXMpCisgICAgICAgIGZpbHRlcl9jb25maWd1cmF0
aW9uID0gRmlsdGVyQ29uZmlndXJhdGlvbih1c2VyX3J1bGVzPXVzZXJfcnVsZXMpCiAgICAgICAg
IHJldHVybiBzdHlsZS5Qcm9jZXNzb3JPcHRpb25zKGV4dHJhX2ZsYWdfdmFsdWVzPWV4dHJhX2Zs
YWdfdmFsdWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI9
ZmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfY29u
ZmlndXJhdGlvbj1maWx0ZXJfY29uZmlndXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2l0X2NvbW1pdD1naXRfY29tbWl0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZm9ybWF0PW91dHB1dF9mb3JtYXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2l0eT12ZXJib3NpdHkpCkBAIC0y
NTUsOCArMjg2LDggQEAgY2xhc3MgQXJndW1lbnRQYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKICAgICAgICAgcGFyc2UoWyctLW91dHB1dD12czcnXSkgIyB3b3JrcwogCiAgICAgICAgICMg
UGFzcyBhIGZpbHRlciBydWxlIG5vdCBiZWdpbm5pbmcgd2l0aCArIG9yIC0uCi0gICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBhcnNlLCBbJy0tZmlsdGVyPWZvbyddKQotICAg
ICAgICBwYXJzZShbJy0tZmlsdGVyPStmb28nXSkgIyB3b3JrcworICAgICAgICBzZWxmLmFzc2Vy
dFJhaXNlcyhWYWx1ZUVycm9yLCBwYXJzZSwgWyctLWZpbHRlcj1idWlsZCddKQorICAgICAgICBw
YXJzZShbJy0tZmlsdGVyPStidWlsZCddKSAjIHdvcmtzCiAgICAgICAgICMgUGFzcyBmaWxlcyBh
bmQgZ2l0LWNvbW1pdCBhdCB0aGUgc2FtZSB0aW1lLgogICAgICAgICBzZWxmLmFzc2VydFJhaXNl
cyhTeXN0ZW1FeGl0LCBwYXJzZSwgWyctLWdpdC1jb21taXQ9JywgJ2ZpbGUudHh0J10pCiAgICAg
ICAgICMgUGFzcyBhbiBleHRyYSBmbGFnIGFscmVhZHkgc3VwcG9ydGVkLgpAQCAtMjc3LDggKzMw
OCw5IEBAIGNsYXNzIEFyZ3VtZW50UGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5vdXRwdXRfZm9ybWF0LCAndnM3JykKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy52ZXJib3NpdHksIDMpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMuZmlsdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBDYXRlZ29yeUZpbHRlcihbIi0iLCAiK3doaXRlc3BhY2UiXSkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKG9wdGlvbnMuZmlsdGVyX2NvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZpbHRlckNvbmZpZ3VyYXRpb24oYmFzZV9ydWxlcz1bIi0iLCAiK3doaXRlc3Bh
Y2UiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfc3BlY2lmaWM9UEFUSF9S
VUxFU19TUEVDSUZJRVIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLmdpdF9j
b21taXQsIE5vbmUpCiAKICAgICBkZWYgdGVzdF9wYXJzZV9leHBsaWNpdF9hcmd1bWVudHMoc2Vs
Zik6CkBAIC0yOTEsMTMgKzMyMywyMSBAQCBjbGFzcyBBcmd1bWVudFBhcnNlclRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLnZlcmJvc2l0
eSwgNCkKICAgICAgICAgKGZpbGVzLCBvcHRpb25zKSA9IHBhcnNlKFsnLS1naXQtY29tbWl0PWNv
bW1pdCddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLmdpdF9jb21taXQsICdj
b21taXQnKQotICAgICAgICAoZmlsZXMsIG9wdGlvbnMpID0gcGFyc2UoWyctLWZpbHRlcj0rZm9v
LC1iYXInXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5maWx0ZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIENhdGVnb3J5RmlsdGVyKFsiLSIsICIrd2hpdGVzcGFjZSIs
ICIrZm9vIiwgIi1iYXIiXSkpCi0gICAgICAgICMgU3B1cmlvdXMgd2hpdGUgc3BhY2UgaW4gZmls
dGVyIHJ1bGVzLgotICAgICAgICAoZmlsZXMsIG9wdGlvbnMpID0gcGFyc2UoWyctLWZpbHRlcj0r
Zm9vICwtYmFyJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMuZmlsdGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBDYXRlZ29yeUZpbHRlcihbIi0iLCAiK3doaXRlc3Bh
Y2UiLCAiK2ZvbyIsICItYmFyIl0pKQorCisgICAgICAgICMgUGFzcyB1c2VyX3J1bGVzLgorICAg
ICAgICAoZmlsZXMsIG9wdGlvbnMpID0gcGFyc2UoWyctLWZpbHRlcj0rYnVpbGQsLXdoaXRlc3Bh
Y2UnXSkKKyAgICAgICAgY29uZmlnID0gb3B0aW9ucy5maWx0ZXJfY29uZmlndXJhdGlvbgorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLmZpbHRlcl9jb25maWd1cmF0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJDb25maWd1cmF0aW9uKGJhc2VfcnVsZXM9WyIt
IiwgIit3aGl0ZXNwYWNlIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX3Nw
ZWNpZmljPVBBVEhfUlVMRVNfU1BFQ0lGSUVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXNlcl9ydWxlcz1bIitidWlsZCIsICItd2hpdGVzcGFjZSJdKSkKKworICAgICAgICAjIFBh
c3Mgc3B1cmlvdXMgd2hpdGUgc3BhY2UgaW4gdXNlciBydWxlcy4KKyAgICAgICAgKGZpbGVzLCBv
cHRpb25zKSA9IHBhcnNlKFsnLS1maWx0ZXI9K2J1aWxkLCAtd2hpdGVzcGFjZSddKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLmZpbHRlcl9jb25maWd1cmF0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBGaWx0ZXJDb25maWd1cmF0aW9uKGJhc2VfcnVsZXM9WyItIiwg
Iit3aGl0ZXNwYWNlIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX3NwZWNp
ZmljPVBBVEhfUlVMRVNfU1BFQ0lGSUVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXNlcl9ydWxlcz1bIitidWlsZCIsICItd2hpdGVzcGFjZSJdKSkKIAogICAgICAgICAjIFBhc3Mg
ZXh0cmEgZmxhZyB2YWx1ZXMuCiAgICAgICAgIChmaWxlcywgb3B0aW9ucykgPSBwYXJzZShbJy0t
ZXh0cmEnXSwgWydleHRyYSddKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9lcnJvcl9oYW5kbGVycy5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3R5bGUvZXJyb3JfaGFuZGxlcnMucHkKaW5kZXggMzExNDBkZS4uMTk0MGUwMyAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9lcnJvcl9oYW5kbGVycy5w
eQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2Vycm9yX2hhbmRsZXJz
LnB5CkBAIC04Myw3ICs4Myw3IEBAIGNsYXNzIERlZmF1bHRTdHlsZUVycm9ySGFuZGxlcihvYmpl
Y3QpOgogCiAgICAgICAgICMgQSBzdHJpbmcgdG8gaW50ZWdlciBkaWN0aW9uYXJ5IGNhY2hlIG9m
IHRoZSBudW1iZXIgb2YgcmVwb3J0YWJsZQogICAgICAgICAjIGVycm9ycyBwZXIgY2F0ZWdvcnkg
cGFzc2VkIHRvIHRoaXMgaW5zdGFuY2UuCi0gICAgICAgIHNlbGYuX2NhdGVnb3J5X3RvdGFscyA9
IHsgfQorICAgICAgICBzZWxmLl9jYXRlZ29yeV90b3RhbHMgPSB7fQogCiAgICAgZGVmIF9hZGRf
cmVwb3J0YWJsZV9lcnJvcihzZWxmLCBjYXRlZ29yeSk6CiAgICAgICAgICIiIkluY3JlbWVudCB0
aGUgZXJyb3IgY291bnQgYW5kIHJldHVybiB0aGUgbmV3IGNhdGVnb3J5IHRvdGFsLiIiIgpAQCAt
MTA5LDcgKzEwOSw5IEBAIGNsYXNzIERlZmF1bHRTdHlsZUVycm9ySGFuZGxlcihvYmplY3QpOgog
ICAgICAgICBTZWUgdGhlIGRvY3N0cmluZyBvZiB0aGlzIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1h
dGlvbi4KIAogICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuaXNfcmVw
b3J0YWJsZShjYXRlZ29yeSwgY29uZmlkZW5jZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRp
b25zLmlzX3JlcG9ydGFibGUoY2F0ZWdvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uZmlkZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9maWxlX3BhdGgpOgogICAgICAgICAgICAgcmV0dXJuCiAKICAg
ICAgICAgY2F0ZWdvcnlfdG90YWwgPSBzZWxmLl9hZGRfcmVwb3J0YWJsZV9lcnJvcihjYXRlZ29y
eSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZXJyb3Jf
aGFuZGxlcnNfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L2Vycm9yX2hhbmRsZXJzX3VuaXR0ZXN0LnB5CmluZGV4IDgzYmRiYjkuLjFkN2U5OTggMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZXJyb3JfaGFuZGxlcnNf
dW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9lcnJv
cl9oYW5kbGVyc191bml0dGVzdC5weQpAQCAtNDgsMTEgKzQ4LDEyIEBAIGNsYXNzIERlZmF1bHRT
dHlsZUVycm9ySGFuZGxlclRlc3QoU3R5bGVFcnJvckhhbmRsZXJUZXN0QmFzZSk6CiAKICAgICAi
IiJUZXN0cyBEZWZhdWx0U3R5bGVFcnJvckhhbmRsZXIgY2xhc3MuIiIiCiAKKyAgICBfZmlsZV9w
YXRoID0gImZvby5oIgorCiAgICAgX2NhdGVnb3J5ID0gIndoaXRlc3BhY2UvdGFiIgogCiAgICAg
ZGVmIF9lcnJvcl9oYW5kbGVyKHNlbGYsIG9wdGlvbnMpOgotICAgICAgICBmaWxlX3BhdGggPSAi
Zm9vLmgiCi0gICAgICAgIHJldHVybiBEZWZhdWx0U3R5bGVFcnJvckhhbmRsZXIoZmlsZV9wYXRo
LAorICAgICAgICByZXR1cm4gRGVmYXVsdFN0eWxlRXJyb3JIYW5kbGVyKHNlbGYuX2ZpbGVfcGF0
aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21vY2tfaW5jcmVtZW50
X2Vycm9yX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuX21vY2tfc3RkZXJyX3dyaXRlKQpAQCAtODEsNyArODIsOSBAQCBjbGFzcyBEZWZhdWx0U3R5
bGVFcnJvckhhbmRsZXJUZXN0KFN0eWxlRXJyb3JIYW5kbGVyVGVzdEJhc2UpOgogICAgICAgICBz
ZWxmLl9jaGVja19pbml0aWFsaXplZCgpCiAKICAgICAgICAgIyBDb25maXJtIHRoZSBlcnJvciBp
cyBub3QgcmVwb3J0YWJsZS4KLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcHRpb25zLmlzX3Jl
cG9ydGFibGUoc2VsZi5fY2F0ZWdvcnksIGNvbmZpZGVuY2UpKQorICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKG9wdGlvbnMuaXNfcmVwb3J0YWJsZShzZWxmLl9jYXRlZ29yeSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlkZW5jZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZV9wYXRoKSkK
IAogICAgICAgICBzZWxmLl9jYWxsX2Vycm9yX2hhbmRsZXIob3B0aW9ucywgY29uZmlkZW5jZSkK
IApAQCAtMTQ3LDkgKzE1MCw5IEBAIGNsYXNzIFBhdGNoU3R5bGVFcnJvckhhbmRsZXJUZXN0KFN0
eWxlRXJyb3JIYW5kbGVyVGVzdEJhc2UpOgogCiAgICAgIiIiVGVzdHMgUGF0Y2hTdHlsZUVycm9y
SGFuZGxlciBjbGFzcy4iIiIKIAotICAgIGZpbGVfcGF0aCA9ICJfX2luaXRfXy5weSIKKyAgICBf
ZmlsZV9wYXRoID0gIl9faW5pdF9fLnB5IgogCi0gICAgcGF0Y2hfc3RyaW5nID0gIiIiZGlmZiAt
LWdpdCBhL19faW5pdF9fLnB5IGIvX19pbml0X18ucHkKKyAgICBfcGF0Y2hfc3RyaW5nID0gIiIi
ZGlmZiAtLWdpdCBhL19faW5pdF9fLnB5IGIvX19pbml0X18ucHkKIGluZGV4IGVmNjViZWUuLmUz
ZGI3MGUgMTAwNjQ0CiAtLS0gYS9fX2luaXRfXy5weQogKysrIGIvX19pbml0X18ucHkKQEAgLTE2
MCwxMyArMTYzLDEzIEBAIGluZGV4IGVmNjViZWUuLmUzZGI3MGUgMTAwNjQ0CiAiIiIKIAogICAg
IGRlZiB0ZXN0X2NhbGwoc2VsZik6Ci0gICAgICAgIHBhdGNoX2ZpbGVzID0gcGFyc2VfcGF0Y2go
c2VsZi5wYXRjaF9zdHJpbmcpCi0gICAgICAgIGRpZmYgPSBwYXRjaF9maWxlc1tzZWxmLmZpbGVf
cGF0aF0KKyAgICAgICAgcGF0Y2hfZmlsZXMgPSBwYXJzZV9wYXRjaChzZWxmLl9wYXRjaF9zdHJp
bmcpCisgICAgICAgIGRpZmYgPSBwYXRjaF9maWxlc1tzZWxmLl9maWxlX3BhdGhdCiAKICAgICAg
ICAgb3B0aW9ucyA9IFByb2Nlc3Nvck9wdGlvbnModmVyYm9zaXR5PTMpCiAKICAgICAgICAgaGFu
ZGxlX2Vycm9yID0gUGF0Y2hTdHlsZUVycm9ySGFuZGxlcihkaWZmLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZV9wYXRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfcGF0aCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21vY2tfaW5j
cmVtZW50X2Vycm9yX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX21vY2tfc3RkZXJyX3dyaXRlKQpAQCAtMTc2LDcgKzE3OSw5IEBAIGlu
ZGV4IGVmNjViZWUuLmUzZGI3MGUgMTAwNjQ0CiAgICAgICAgIG1lc3NhZ2UgPSAibWVzc2FnZSIK
IAogICAgICAgICAjIENvbmZpcm0gZXJyb3IgaXMgcmVwb3J0YWJsZS4KLSAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKG9wdGlvbnMuaXNfcmVwb3J0YWJsZShjYXRlZ29yeSwgY29uZmlkZW5jZSkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRpb25zLmlzX3JlcG9ydGFibGUoY2F0ZWdvcnksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlkZW5jZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxl
X3BhdGgpKQogCiAgICAgICAgICMgQ29uZmlybSBlcnJvciBjb3VudCBpbml0aWFsaXplZCB0byB6
ZXJvLgogICAgICAgICBzZWxmLmFzc2VydEVxdWFscygwLCBzZWxmLl9lcnJvcl9jb3VudCkKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsdGVyLnB5IGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9maWx0ZXIucHkKaW5kZXggMWI0MTQy
NC4uNDRlYTE2NiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9maWx0ZXIucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9maWx0
ZXIucHkKQEAgLTIzLDIwICsyMyw0MSBAQAogIiIiQ29udGFpbnMgZmlsdGVyLXJlbGF0ZWQgY29k
ZS4iIiIKIAogCi1jbGFzcyBDYXRlZ29yeUZpbHRlcihvYmplY3QpOgorZGVmIHZhbGlkYXRlX2Zp
bHRlcl9ydWxlcyhmaWx0ZXJfcnVsZXMsIGFsbF9jYXRlZ29yaWVzKToKKyAgICAiIiJWYWxpZGF0
ZSB0aGUgZ2l2ZW4gZmlsdGVyIHJ1bGVzLgorCisgICAgQXJnczoKKyAgICAgIGZpbHRlcl9ydWxl
czogQSBsaXN0IG9mIGJvb2xlYW4gZmlsdGVyIHJ1bGVzLgorICAgICAgYWxsX2NhdGVnb3JpZXM6
IEEgbGlzdCBvZiBjYXRlZ29yeSBuYW1lcy4KKworICAgICIiIgorICAgIGZvciBydWxlIGluIGZp
bHRlcl9ydWxlczoKKyAgICAgICAgaWYgbm90IChydWxlLnN0YXJ0c3dpdGgoJysnKSBvciBydWxl
LnN0YXJ0c3dpdGgoJy0nKSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlk
IGZpbHRlciBydWxlICIlcyI6IGV2ZXJ5IHJ1bGUgJworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAicnVsZSBtdXN0IHN0YXJ0IHdpdGggKyBvciAtLiIgJSBydWxlKQorCisgICAgICAgIG1h
dGNoZXNfc29tZV9jYXRlZ29yeSA9IEZhbHNlCisgICAgICAgIGZvciBjYXRlZ29yeSBpbiBhbGxf
Y2F0ZWdvcmllczoKKyAgICAgICAgICAgIGlmIGNhdGVnb3J5LnN0YXJ0c3dpdGgocnVsZVsxOl0p
OgorICAgICAgICAgICAgICAgIG1hdGNoZXNfc29tZV9jYXRlZ29yeSA9IFRydWUKKyAgICAgICAg
ICAgICAgICBicmVhaworICAgICAgICBpZiBub3QgbWF0Y2hlc19zb21lX2NhdGVnb3J5OgorICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU3VzcGVjdGVkIGluY29ycmVjdCBmaWx0ZXIgcnVs
ZSAiJXMiOiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgcnVsZSBkb2VzIG5v
dCBtYXRjaCB0aGUgYmVnaW5uaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9m
IGFueSBjYXRlZ29yeSBuYW1lLiIgJSBydWxlKQorCisKK2NsYXNzIF9DYXRlZ29yeUZpbHRlcihv
YmplY3QpOgogCiAgICAgIiIiRmlsdGVycyB3aGV0aGVyIHRvIGNoZWNrIHN0eWxlIGNhdGVnb3Jp
ZXMuIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsdGVyX3J1bGVzPU5vbmUpOgogICAg
ICAgICAiIiJDcmVhdGUgYSBjYXRlZ29yeSBmaWx0ZXIuCiAKLSAgICAgICAgVGhpcyBtZXRob2Qg
cGVyZm9ybXMgYXJndW1lbnQgdmFsaWRhdGlvbiBidXQgZG9lcyBub3Qgc3RyaXAKLSAgICAgICAg
bGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZSBzcGFjZS4KLQogICAgICAgICBBcmdzOgogICAgICAg
ICAgIGZpbHRlcl9ydWxlczogQSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBhcmUgZmlsdGVyIHJ1bGVz
LCB3aGljaAogICAgICAgICAgICAgICAgICAgICAgICAgYXJlIHN0cmluZ3MgYmVnaW5uaW5nIHdp
dGggdGhlIHBsdXMgb3IgbWludXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbCAoKy8t
KS4gVGhlIGxpc3Qgc2hvdWxkIGluY2x1ZGUgYW55CisgICAgICAgICAgICAgICAgICAgICAgICBz
eW1ib2wgKCsvLSkuICBUaGUgbGlzdCBzaG91bGQgaW5jbHVkZSBhbnkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQgZmlsdGVyIHJ1bGVzIGF0IHRoZSBiZWdpbm5pbmcuCiAgICAgICAg
ICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byB0aGUgZW1wdHkgbGlzdC4KIApAQCAtNDgsMTIg
KzY5LDYgQEAgY2xhc3MgQ2F0ZWdvcnlGaWx0ZXIob2JqZWN0KToKICAgICAgICAgaWYgZmlsdGVy
X3J1bGVzIGlzIE5vbmU6CiAgICAgICAgICAgICBmaWx0ZXJfcnVsZXMgPSBbXQogCi0gICAgICAg
IGZvciBydWxlIGluIGZpbHRlcl9ydWxlczoKLSAgICAgICAgICAgIGlmIG5vdCAocnVsZS5zdGFy
dHN3aXRoKCcrJykgb3IgcnVsZS5zdGFydHN3aXRoKCctJykpOgotICAgICAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgZmlsdGVyIHJ1bGUgIiVzIjogZXZlcnkgcnVsZSAnCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVsZSBpbiB0aGUgLS1maWx0ZXIgZmxh
ZyBtdXN0IHN0YXJ0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoICsg
b3IgLS4nICUgcnVsZSkKLQogICAgICAgICBzZWxmLl9maWx0ZXJfcnVsZXMgPSBmaWx0ZXJfcnVs
ZXMKICAgICAgICAgc2VsZi5fc2hvdWxkX2NoZWNrX2NhdGVnb3J5ID0ge30gIyBDYWNoZWQgZGlj
dGlvbmFyeSBvZiBjYXRlZ29yeSB0byBUcnVlL0ZhbHNlCiAKQEAgLTc0LDEzICs4OSwxMyBAQCBj
bGFzcyBDYXRlZ29yeUZpbHRlcihvYmplY3QpOgogICAgICAgICAiIiJSZXR1cm4gd2hldGhlciB0
aGUgY2F0ZWdvcnkgc2hvdWxkIGJlIGNoZWNrZWQuCiAKICAgICAgICAgVGhlIHJ1bGVzIGZvciBk
ZXRlcm1pbmluZyB3aGV0aGVyIGEgY2F0ZWdvcnkgc2hvdWxkIGJlIGNoZWNrZWQKLSAgICAgICAg
YXJlIGFzIGZvbGxvd3MuIEJ5IGRlZmF1bHQgYWxsIGNhdGVnb3JpZXMgc2hvdWxkIGJlIGNoZWNr
ZWQuCisgICAgICAgIGFyZSBhcyBmb2xsb3dzLiAgQnkgZGVmYXVsdCBhbGwgY2F0ZWdvcmllcyBz
aG91bGQgYmUgY2hlY2tlZC4KICAgICAgICAgVGhlbiBhcHBseSB0aGUgZmlsdGVyIHJ1bGVzIGlu
IG9yZGVyIGZyb20gZmlyc3QgdG8gbGFzdCwgd2l0aAogICAgICAgICBsYXRlciBmbGFncyB0YWtp
bmcgcHJlY2VkZW5jZS4KIAogICAgICAgICBBIGZpbHRlciBydWxlIGFwcGxpZXMgdG8gYSBjYXRl
Z29yeSBpZiB0aGUgc3RyaW5nIGFmdGVyIHRoZQogICAgICAgICBsZWFkaW5nIHBsdXMvbWludXMg
KCsvLSkgbWF0Y2hlcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjYXRlZ29yeQotICAgICAgICBuYW1l
LiBBIHBsdXMgKCspIG1lYW5zIHRoZSBjYXRlZ29yeSBzaG91bGQgYmUgY2hlY2tlZCwgd2hpbGUg
YQorICAgICAgICBuYW1lLiAgQSBwbHVzICgrKSBtZWFucyB0aGUgY2F0ZWdvcnkgc2hvdWxkIGJl
IGNoZWNrZWQsIHdoaWxlIGEKICAgICAgICAgbWludXMgKC0pIG1lYW5zIHRoZSBjYXRlZ29yeSBz
aG91bGQgbm90IGJlIGNoZWNrZWQuCiAKICAgICAgICAgIiIiCkBAIC05NSwzICsxMTAsMTQ1IEBA
IGNsYXNzIENhdGVnb3J5RmlsdGVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3Nob3VsZF9jaGVj
a19jYXRlZ29yeVtjYXRlZ29yeV0gPSBzaG91bGRfY2hlY2sgIyBVcGRhdGUgY2FjaGUuCiAgICAg
ICAgIHJldHVybiBzaG91bGRfY2hlY2sKIAorCitjbGFzcyBGaWx0ZXJDb25maWd1cmF0aW9uKG9i
amVjdCk6CisKKyAgICAiIiJTdXBwb3J0cyBmaWx0ZXJpbmcgd2l0aCBwYXRoLXNwZWNpZmljIGFu
ZCB1c2VyLXNwZWNpZmllZCBydWxlcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiYXNl
X3J1bGVzPU5vbmUsIHBhdGhfc3BlY2lmaWM9Tm9uZSwgdXNlcl9ydWxlcz1Ob25lKToKKyAgICAg
ICAgIiIiQ3JlYXRlIGEgRmlsdGVyQ29uZmlndXJhdGlvbiBpbnN0YW5jZS4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgIGJhc2VfcnVsZXM6IFRoZSBzdGFydGluZyBsaXN0IG9mIGZpbHRlciBy
dWxlcyB0byB1c2UgZm9yCisgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZy4gIFRoZSBk
ZWZhdWx0IGlzIHRoZSBlbXB0eSBsaXN0LCB3aGljaAorICAgICAgICAgICAgICAgICAgICAgIGJ5
IGl0c2VsZiB3b3VsZCBtZWFuIHRoYXQgYWxsIGNhdGVnb3JpZXMgc2hvdWxkIGJlCisgICAgICAg
ICAgICAgICAgICAgICAgY2hlY2tlZC4KKworICAgICAgICAgIHBhdGhfc3BlY2lmaWM6IEEgbGlz
dCBvZiAoc3ViX3BhdGhzLCBwYXRoX3J1bGVzKSBwYWlycworICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoYXQgc3RvcmVzIHRoZSBwYXRoLXNwZWNpZmljIGZpbHRlciBydWxlcyBmb3IKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRpbmcgdG8gdGhlIGJhc2UgcnVsZXMuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRoZSAic3ViX3BhdGhzIiB2YWx1ZSBpcyBhIGxpc3Qgb2Yg
cGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0cmluZ3MuICBJZiBhIGZpbGUgcGF0
aCBjb250YWlucyBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic3RyaW5n
cywgdGhlbiB0aGUgY29ycmVzcG9uZGluZyBwYXRoIHJ1bGVzCisgICAgICAgICAgICAgICAgICAg
ICAgICAgYXJlIGFwcGVuZGVkLiAgVGhlIGZpcnN0IHN1YnN0cmluZyBtYXRjaCB0YWtlcworICAg
ICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGVuY2UsIGkuZS4gb25seSB0aGUgZmlyc3QgbWF0
Y2ggdHJpZ2dlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICBhbiBhcHBlbmQuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRoZSAicGF0aF9ydWxlcyIgdmFsdWUgaXMgdGhlIHR1cGxl
IG9mIGZpbHRlcgorICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVzIHRoYXQgY2FuIGJlIGFw
cGVuZGVkIHRvIHRoZSBiYXNlIHJ1bGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB2
YWx1ZSBpcyBhIHR1cGxlIHJhdGhlciB0aGFuIGEgbGlzdCBzbyBpdAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbiBiZSB1c2VkIGFzIGEgZGljdGlvbmFyeSBrZXkuICBUaGUgZGljdGlvbmFy
eQorICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZvciBjYWNoaW5nIHB1cnBvc2VzIGluIHRo
ZSBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgY2xhc3Mu
CisKKyAgICAgICAgICB1c2VyX3J1bGVzOiBBIGxpc3Qgb2YgZmlsdGVyIHJ1bGVzIHRoYXQgaXMg
YWx3YXlzIGFwcGVuZGVkCisgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGJhc2UgcnVsZXMg
YW5kIGFueSBwYXRoIHJ1bGVzLiAgSW4gb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICB3b3Jk
cywgdGhlIHVzZXIgcnVsZXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlCisgICAgICAgICAgICAg
ICAgICAgICAgZXZlcnl0aGluZy4gIEluIHByYWN0aWNlLCB0aGUgdXNlciBydWxlcyBhcmUKKyAg
ICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCBieSB0aGUgdXNlciBmcm9tIHRoZSBjb21tYW5k
IGxpbmUuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGJhc2VfcnVsZXMgaXMgTm9uZToKKyAg
ICAgICAgICAgIGJhc2VfcnVsZXMgPSBbXQorICAgICAgICBpZiBwYXRoX3NwZWNpZmljIGlzIE5v
bmU6CisgICAgICAgICAgICBwYXRoX3NwZWNpZmljID0gW10KKyAgICAgICAgaWYgdXNlcl9ydWxl
cyBpcyBOb25lOgorICAgICAgICAgICAgdXNlcl9ydWxlcyA9IFtdCisKKyAgICAgICAgc2VsZi5f
YmFzZV9ydWxlcyA9IGJhc2VfcnVsZXMKKyAgICAgICAgc2VsZi5fcGF0aF9zcGVjaWZpYyA9IHBh
dGhfc3BlY2lmaWMKKworICAgICAgICAjIEZJWE1FOiBNYWtlIHVzZXIgcnVsZXMgaW50ZXJuYWwg
YWZ0ZXIgdGhlIEZpbHRlckNvbmZpZ3VyYXRpb24KKyAgICAgICAgIyAgICAgICAgYXR0cmlidXRl
IGlzIHJlbW92ZWQgZnJvbSBQcm9jZXNzb3JPcHRpb25zIChzaW5jZSBhdAorICAgICAgICAjICAg
ICAgICB0aGF0IHBvaW50IEFyZ3VtZW50UHJpbnRlciB3aWxsIG5vIGxvbmdlciBuZWVkIHRvCisg
ICAgICAgICMgICAgICAgIGFjY2VzcyBGaWx0ZXJDb25maWd1cmF0aW9uLnVzZXJfcnVsZXMpLgor
ICAgICAgICBzZWxmLnVzZXJfcnVsZXMgPSB1c2VyX3J1bGVzCisKKyAgICAgICAgc2VsZi5fcGF0
aF9ydWxlc190b19maWx0ZXIgPSB7fQorICAgICAgICAiIiJDYWNoZWQgZGljdGlvbmFyeSBvZiBw
YXRoIHJ1bGVzIHRvIENhdGVnb3J5RmlsdGVyIGluc3RhbmNlLiIiIgorCisgICAgICAgICMgVGhl
IHNhbWUgQ2F0ZWdvcnlGaWx0ZXIgaW5zdGFuY2UgY2FuIGJlIHNoYXJlZCBhY3Jvc3MKKyAgICAg
ICAgIyBtdWx0aXBsZSBrZXlzIGluIHRoaXMgZGljdGlvbmFyeS4gIFRoaXMgYWxsb3dzIHVzIHRv
IHRha2UKKyAgICAgICAgIyBncmVhdGVyIGFkdmFudGFnZSBvZiB0aGUgY2FjaGluZyBkb25lIGJ5
CisgICAgICAgICMgQ2F0ZWdvcnlGaWx0ZXIuc2hvdWxkX2NoZWNrKCkuCisgICAgICAgIHNlbGYu
X3BhdGhfdG9fZmlsdGVyID0ge30KKyAgICAgICAgIiIiQ2FjaGVkIGRpY3Rpb25hcnkgb2YgZmls
ZSBwYXRoIHRvIENhdGVnb3J5RmlsdGVyIGluc3RhbmNlLiIiIgorCisgICAgIyBVc2VmdWwgZm9y
IHVuaXQgdGVzdGluZy4KKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIi
UmV0dXJuIHdoZXRoZXIgdGhpcyBGaWx0ZXJDb25maWd1cmF0aW9uIGlzIGVxdWFsIHRvIGFub3Ro
ZXIuIiIiCisgICAgICAgIGlmIHNlbGYuX2Jhc2VfcnVsZXMgIT0gb3RoZXIuX2Jhc2VfcnVsZXM6
CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fcGF0aF9zcGVjaWZp
YyAhPSBvdGhlci5fcGF0aF9zcGVjaWZpYzoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAg
ICAgICBpZiBzZWxmLnVzZXJfcnVsZXMgIT0gb3RoZXIudXNlcl9ydWxlczoKKyAgICAgICAgICAg
IHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAjIFVzZWZ1bCBmb3Ig
dW5pdCB0ZXN0aW5nLgorICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAjIFB5
dGhvbiBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGRlZHVjZSB0aGlzIGZyb20gX19lcV9fKCkuCisg
ICAgICAgIHJldHVybiBub3Qgc2VsZi5fX2VxX18ob3RoZXIpCisKKyAgICBkZWYgX3BhdGhfcnVs
ZXNfZnJvbV9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJEZXRlcm1pbmUgdGhlIHBhdGgt
c3BlY2lmaWMgcnVsZXMgdG8gdXNlLCBhbmQgcmV0dXJuIGFzIGEgdHVwbGUuIiIiCisgICAgICAg
IGZvciAoc3ViX3BhdGhzLCBwYXRoX3J1bGVzKSBpbiBzZWxmLl9wYXRoX3NwZWNpZmljOgorICAg
ICAgICAgICAgZm9yIHN1Yl9wYXRoIGluIHN1Yl9wYXRoczoKKyAgICAgICAgICAgICAgICBpZiBw
YXRoLmZpbmQoc3ViX3BhdGgpID4gLTE6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXRo
X3J1bGVzCisgICAgICAgIHJldHVybiAoKSAjIERlZmF1bHQgdG8gdGhlIGVtcHR5IHR1cGxlLgor
CisgICAgZGVmIF9maWx0ZXJfZnJvbV9wYXRoX3J1bGVzKHNlbGYsIHBhdGhfcnVsZXMpOgorICAg
ICAgICAiIiJSZXR1cm4gdGhlIENhdGVnb3J5RmlsdGVyIGFzc29jaWF0ZWQgdG8gYSBwYXRoIHJ1
bGVzIHR1cGxlLiIiIgorICAgICAgICAjIFdlIHJldXNlIHRoZSBzYW1lIENhdGVnb3J5RmlsdGVy
IHdoZXJlIHBvc3NpYmxlIHRvIHRha2UKKyAgICAgICAgIyBhZHZhbnRhZ2Ugb2YgdGhlIGNhY2hp
bmcgdGhleSBkby4KKyAgICAgICAgaWYgcGF0aF9ydWxlcyBub3QgaW4gc2VsZi5fcGF0aF9ydWxl
c190b19maWx0ZXI6CisgICAgICAgICAgICBydWxlcyA9IGxpc3Qoc2VsZi5fYmFzZV9ydWxlcykg
IyBNYWtlIGEgY29weQorICAgICAgICAgICAgcnVsZXMuZXh0ZW5kKHBhdGhfcnVsZXMpCisgICAg
ICAgICAgICBydWxlcy5leHRlbmQoc2VsZi51c2VyX3J1bGVzKQorICAgICAgICAgICAgc2VsZi5f
cGF0aF9ydWxlc190b19maWx0ZXJbcGF0aF9ydWxlc10gPSBfQ2F0ZWdvcnlGaWx0ZXIocnVsZXMp
CisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGhfcnVsZXNfdG9fZmlsdGVyW3BhdGhfcnVsZXNd
CisKKyAgICBkZWYgX2ZpbHRlcl9mcm9tX3BhdGgoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIlJl
dHVybiB0aGUgQ2F0ZWdvcnlGaWx0ZXIgYXNzb2NpYXRlZCB0byBhIHBhdGguIiIiCisgICAgICAg
IGlmIHBhdGggbm90IGluIHNlbGYuX3BhdGhfdG9fZmlsdGVyOgorICAgICAgICAgICAgcGF0aF9y
dWxlcyA9IHNlbGYuX3BhdGhfcnVsZXNfZnJvbV9wYXRoKHBhdGgpCisgICAgICAgICAgICBmaWx0
ZXIgPSBzZWxmLl9maWx0ZXJfZnJvbV9wYXRoX3J1bGVzKHBhdGhfcnVsZXMpCisgICAgICAgICAg
ICBzZWxmLl9wYXRoX3RvX2ZpbHRlcltwYXRoXSA9IGZpbHRlcgorCisgICAgICAgIHJldHVybiBz
ZWxmLl9wYXRoX3RvX2ZpbHRlcltwYXRoXQorCisgICAgZGVmIHNob3VsZF9jaGVjayhzZWxmLCBj
YXRlZ29yeSwgcGF0aCk6CisgICAgICAgICIiIlJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBjYXRl
Z29yeSBzaG91bGQgYmUgY2hlY2tlZC4KKworICAgICAgICBUaGlzIG1ldGhvZCBkZXRlcm1pbmVz
IHdoZXRoZXIgYSBjYXRlZ29yeSBzaG91bGQgYmUgY2hlY2tlZAorICAgICAgICBieSBjaGVja2lu
ZyB0aGUgY2F0ZWdvcnkgbmFtZSBhZ2FpbnN0IHRoZSBmaWx0ZXIgcnVsZXMgZm9yCisgICAgICAg
IHRoZSBnaXZlbiBwYXRoLgorCisgICAgICAgIEZvciBhIGdpdmVuIHBhdGgsIHRoZSBmaWx0ZXIg
cnVsZXMgYXJlIHRoZSBjb21iaW5hdGlvbiBvZgorICAgICAgICB0aGUgYmFzZSBydWxlcywgdGhl
IHBhdGgtc3BlY2lmaWMgcnVsZXMsIGFuZCB0aGUgdXNlci1wcm92aWRlZAorICAgICAgICBydWxl
cyAtLSBpbiB0aGF0IG9yZGVyLiAgQXMgd2Ugd2lsbCBkZXNjcmliZSBiZWxvdywgbGF0ZXIgcnVs
ZXMKKyAgICAgICAgaW4gdGhlIGxpc3QgdGFrZSBwcmVjZWRlbmNlLiAgVGhlIHBhdGgtc3BlY2lm
aWMgcnVsZXMgYXJlIHRoZQorICAgICAgICBydWxlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJz
dCBlbGVtZW50IG9mIHRoZSAicGF0aF9zcGVjaWZpYyIKKyAgICAgICAgcGFyYW1ldGVyIHRoYXQg
Y29udGFpbnMgYSBzdHJpbmcgbWF0Y2hpbmcgc29tZSBzdWJzdHJpbmcgb2YKKyAgICAgICAgdGhl
IHBhdGguICBJZiB0aGVyZSBpcyBubyBzdWNoIGVsZW1lbnQsIHRoZXJlIGFyZSBubyBwYXRoLQor
ICAgICAgICBzcGVjaWZpYyBydWxlcyBmb3IgdGhhdCBwYXRoLgorCisgICAgICAgIEdpdmVuIGEg
bGlzdCBvZiBmaWx0ZXIgcnVsZXMsIHRoZSBsb2dpYyBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlcgor
ICAgICAgICBhIGNhdGVnb3J5IHNob3VsZCBiZSBjaGVja2VkIGlzIGFzIGZvbGxvd3MuICBCeSBk
ZWZhdWx0IGFsbAorICAgICAgICBjYXRlZ29yaWVzIHNob3VsZCBiZSBjaGVja2VkLiAgVGhlbiBh
cHBseSB0aGUgZmlsdGVyIHJ1bGVzIGluCisgICAgICAgIG9yZGVyIGZyb20gZmlyc3QgdG8gbGFz
dCwgd2l0aCBsYXRlciBmbGFncyB0YWtpbmcgcHJlY2VkZW5jZS4KKworICAgICAgICBBIGZpbHRl
ciBydWxlIGFwcGxpZXMgdG8gYSBjYXRlZ29yeSBpZiB0aGUgc3RyaW5nIGFmdGVyIHRoZQorICAg
ICAgICBsZWFkaW5nIHBsdXMvbWludXMgKCsvLSkgbWF0Y2hlcyB0aGUgYmVnaW5uaW5nIG9mIHRo
ZSBjYXRlZ29yeQorICAgICAgICBuYW1lLiAgQSBwbHVzICgrKSBtZWFucyB0aGUgY2F0ZWdvcnkg
c2hvdWxkIGJlIGNoZWNrZWQsIHdoaWxlIGEKKyAgICAgICAgbWludXMgKC0pIG1lYW5zIHRoZSBj
YXRlZ29yeSBzaG91bGQgbm90IGJlIGNoZWNrZWQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg
ICBjYXRlZ29yeTogVGhlIGNhdGVnb3J5IG5hbWUuCisgICAgICAgICAgcGF0aDogVGhlIHBhdGgg
b2YgdGhlIGZpbGUgYmVpbmcgY2hlY2tlZC4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJu
IHNlbGYuX2ZpbHRlcl9mcm9tX3BhdGgocGF0aCkuc2hvdWxkX2NoZWNrKGNhdGVnb3J5KQorCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2ZpbHRlcl91bml0
dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsdGVyX3VuaXR0
ZXN0LnB5CmluZGV4IDBiMTIxMjMuLmJkYmZmNzkgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsdGVyX3VuaXR0ZXN0LnB5CisrKyBiL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvZmlsdGVyX3VuaXR0ZXN0LnB5CkBAIC0yMiwxMCArMjIs
NjIgQEAKIAogIiIiVW5pdCB0ZXN0cyBmb3IgZmlsdGVyLnB5LiIiIgogCi0KIGltcG9ydCB1bml0
dGVzdAogCi1mcm9tIGZpbHRlciBpbXBvcnQgQ2F0ZWdvcnlGaWx0ZXIKK2Zyb20gZmlsdGVyIGlt
cG9ydCBfQ2F0ZWdvcnlGaWx0ZXIgYXMgQ2F0ZWdvcnlGaWx0ZXIKK2Zyb20gZmlsdGVyIGltcG9y
dCB2YWxpZGF0ZV9maWx0ZXJfcnVsZXMKK2Zyb20gZmlsdGVyIGltcG9ydCBGaWx0ZXJDb25maWd1
cmF0aW9uCisKKyMgT24gVGVzdGluZyBfX2VxX18oKSBhbmQgX19uZV9fKCk6CisjCisjIEluIHRo
ZSB0ZXN0cyBiZWxvdywgd2UgZGVsaWJlcmF0ZWx5IGRvIG5vdCB1c2UgYXNzZXJ0RXF1YWxzKCkg
b3IKKyMgYXNzZXJ0Tm90RXF1YWxzKCkgdG8gdGVzdCBfX2VxX18oKSBvciBfX25lX18oKS4gIFdl
IGRvIHRoaXMgdG8gYmUKKyMgdmVyeSBleHBsaWNpdCBhYm91dCB3aGF0IHdlIGFyZSB0ZXN0aW5n
LCBlc3BlY2lhbGx5IGluIHRoZSBjYXNlCisjIG9mIGFzc2VydE5vdEVxdWFscygpLgorIworIyBQ
YXJ0IG9mIHRoZSByZWFzb24gaXMgdGhhdCBpdCBpcyBub3QgaW1tZWRpYXRlbHkgY2xlYXIgd2hh
dAorIyBleHByZXNzaW9uIHRoZSB1bml0dGVzdCBtb2R1bGUgdXNlcyB0byBhc3NlcnQgIm5vdCBl
cXVhbHMiIC0tIHRoZQorIyBuZWdhdGlvbiBvZiBfX2VxX18oKSBvciBfX25lX18oKSwgd2hpY2gg
YXJlIG5vdCBuZWNlc3NhcmlseQorIyBlcXVpdmFsZW50IGV4cHJlc2lvbnMgaW4gUHl0aG9uLiAg
Rm9yIGV4YW1wbGUsIGZyb20gUHl0aG9uJ3MgIkRhdGEKKyMgTW9kZWwiIGRvY3VtZW50YXRpb24t
LQorIworIyAgICJUaGVyZSBhcmUgbm8gaW1wbGllZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBj
b21wYXJpc29uCisjICAgIG9wZXJhdG9ycy4gVGhlIHRydXRoIG9mIHg9PXkgZG9lcyBub3QgaW1w
bHkgdGhhdCB4IT15IGlzCisjICAgIGZhbHNlLiAgQWNjb3JkaW5nbHksIHdoZW4gZGVmaW5pbmcg
X19lcV9fKCksIG9uZSBzaG91bGQKKyMgICAgYWxzbyBkZWZpbmUgX19uZV9fKCkgc28gdGhhdCB0
aGUgb3BlcmF0b3JzIHdpbGwgYmVoYXZlIGFzCisjICAgIGV4cGVjdGVkLiIKKyMKKyMgICAoZnJv
bSBodHRwOi8vZG9jcy5weXRob24ub3JnL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3Qu
X19uZV9fICkKKworY2xhc3MgVmFsaWRhdGVGaWx0ZXJSdWxlc1Rlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgorCisgICAgIiIiVGVzdHMgdmFsaWRhdGVfZmlsdGVyX3J1bGVzKCkgZnVuY3Rpb24uIiIi
CisKKyAgICBkZWYgdGVzdF92YWxpZGF0ZV9maWx0ZXJfcnVsZXMoc2VsZik6CisgICAgICAgIGFs
bF9jYXRlZ29yaWVzID0gWyJ0YWJzIiwgIndoaXRlc3BhY2UiLCAiYnVpbGQvaW5jbHVkZSJdCisK
KyAgICAgICAgYmFkX3J1bGVzID0gWworICAgICAgICAgICAgInRhYnMiLAorICAgICAgICAgICAg
Iip0YWJzIiwKKyAgICAgICAgICAgICIgdGFicyIsCisgICAgICAgICAgICAiICt0YWJzIiwKKyAg
ICAgICAgICAgICIrd2hpdGVzcGFjZS9uZXdsaW5lIiwKKyAgICAgICAgICAgICIreHh4IiwKKyAg
ICAgICAgICAgIF0KKworICAgICAgICBnb29kX3J1bGVzID0gWworICAgICAgICAgICAgIit0YWJz
IiwKKyAgICAgICAgICAgICItdGFicyIsCisgICAgICAgICAgICAiK2J1aWxkIgorICAgICAgICAg
ICAgXQorCisgICAgICAgIGZvciBydWxlIGluIGJhZF9ydWxlczoKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHZhbGlkYXRlX2ZpbHRlcl9ydWxlcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFtydWxlXSwgYWxsX2NhdGVnb3JpZXMpCisKKyAgICAgICAg
Zm9yIHJ1bGUgaW4gZ29vZF9ydWxlczoKKyAgICAgICAgICAgICMgVGhpcyB3b3Jrczogbm8gZXJy
b3IuCisgICAgICAgICAgICB2YWxpZGF0ZV9maWx0ZXJfcnVsZXMoW3J1bGVdLCBhbGxfY2F0ZWdv
cmllcykKIAogCiBjbGFzcyBDYXRlZ29yeUZpbHRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpA
QCAtMzMsMTEgKzg1LDE1IEBAIGNsYXNzIENhdGVnb3J5RmlsdGVyVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgIiIiVGVzdHMgQ2F0ZWdvcnlGaWx0ZXIgY2xhc3MuIiIiCiAKICAgICBkZWYg
dGVzdF9pbml0KHNlbGYpOgotICAgICAgICAiIiJUZXN0IF9faW5pdF9fIGNvbnN0cnVjdG9yLiIi
IgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBDYXRlZ29yeUZpbHRlciwg
WyJub19wcmVmaXgiXSkKLSAgICAgICAgQ2F0ZWdvcnlGaWx0ZXIoKSAjIE5vIFZhbHVlRXJyb3I6
IHdvcmtzCi0gICAgICAgIENhdGVnb3J5RmlsdGVyKFsiKyJdKSAjIE5vIFZhbHVlRXJyb3I6IHdv
cmtzCi0gICAgICAgIENhdGVnb3J5RmlsdGVyKFsiLSJdKSAjIE5vIFZhbHVlRXJyb3I6IHdvcmtz
CisgICAgICAgICIiIlRlc3QgX19pbml0X18gbWV0aG9kLiIiIgorICAgICAgICAjIFRlc3QgdGhh
dCB0aGUgYXR0cmlidXRlcyBhcmUgZ2V0dGluZyBzZXQgY29ycmVjdGx5LgorICAgICAgICBmaWx0
ZXIgPSBDYXRlZ29yeUZpbHRlcihbIisiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWyIr
Il0sIGZpbHRlci5fZmlsdGVyX3J1bGVzKQorCisgICAgZGVmIHRlc3RfaW5pdF9kZWZhdWx0X2Fy
Z3VtZW50cyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBfX2luaXRfXyBtZXRob2QgZGVmYXVsdCBh
cmd1bWVudHMuIiIiCisgICAgICAgIGZpbHRlciA9IENhdGVnb3J5RmlsdGVyKCkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoW10sIGZpbHRlci5fZmlsdGVyX3J1bGVzKQogCiAgICAgZGVmIHRl
c3Rfc3RyKHNlbGYpOgogICAgICAgICAiIiJUZXN0IF9fc3RyX18gInRvIHN0cmluZyIgb3BlcmF0
b3IuIiIiCkBAIC01MCwxNyArMTA2LDIwIEBAIGNsYXNzIENhdGVnb3J5RmlsdGVyVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGZpbHRlcjIgPSBDYXRlZ29yeUZpbHRlcihbIithIiwg
IitiIl0pCiAgICAgICAgIGZpbHRlcjMgPSBDYXRlZ29yeUZpbHRlcihbIitiIiwgIithIl0pCiAK
LSAgICAgICAgIyA9PSBjYWxscyBfX2VxX18uCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWx0
ZXIxID09IGZpbHRlcjIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmlsdGVyMSA9PSBmaWx0
ZXIzKSAjIENhbm5vdCB0ZXN0IHdpdGggYXNzZXJ0Tm90RXF1YWwuCisgICAgICAgICMgU2VlIHRo
ZSBub3RlcyBhdCB0aGUgdG9wIG9mIHRoaXMgbW9kdWxlIGFib3V0IHRlc3RpbmcKKyAgICAgICAg
IyBfX2VxX18oKSBhbmQgX19uZV9fKCkuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWx0ZXIx
Ll9fZXFfXyhmaWx0ZXIyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaWx0ZXIxLl9fZXFf
XyhmaWx0ZXIzKSkKIAogICAgIGRlZiB0ZXN0X25lKHNlbGYpOgogICAgICAgICAiIiJUZXN0IF9f
bmVfXyBpbmVxdWFsaXR5IGZ1bmN0aW9uLiIiIgotICAgICAgICAjICE9IGNhbGxzIF9fbmVfXy4K
ICAgICAgICAgIyBCeSBkZWZhdWx0LCBfX25lX18gYWx3YXlzIHJldHVybnMgdHJ1ZSBvbiBkaWZm
ZXJlbnQgb2JqZWN0cy4KICAgICAgICAgIyBUaHVzLCBqdXN0IGNoZWNrIHRoZSBkaXN0aW5ndWlz
aGluZyBjYXNlIHRvIHZlcmlmeSB0aGF0IHRoZQogICAgICAgICAjIGNvZGUgZGVmaW5lcyBfX25l
X18uCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoQ2F0ZWdvcnlGaWx0ZXIoKSAhPSBDYXRlZ29y
eUZpbHRlcigpKQorICAgICAgICAjCisgICAgICAgICMgQWxzbywgc2VlIHRoZSBub3RlcyBhdCB0
aGUgdG9wIG9mIHRoaXMgbW9kdWxlIGFib3V0IHRlc3RpbmcKKyAgICAgICAgIyBfX2VxX18oKSBh
bmQgX19uZV9fKCkuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoQ2F0ZWdvcnlGaWx0ZXIoKS5f
X25lX18oQ2F0ZWdvcnlGaWx0ZXIoKSkpCiAKICAgICBkZWYgdGVzdF9zaG91bGRfY2hlY2soc2Vs
Zik6CiAgICAgICAgICIiIlRlc3Qgc2hvdWxkX2NoZWNrKCkgbWV0aG9kLiIiIgpAQCAtODIsMyAr
MTQxLDEwMyBAQCBjbGFzcyBDYXRlZ29yeUZpbHRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbHRlci5zaG91bGRfY2hlY2soImFiYyIpKQogICAg
ICAgICBzZWxmLmFzc2VydFRydWUoZmlsdGVyLnNob3VsZF9jaGVjaygiYSIpKQogCisKK2NsYXNz
IEZpbHRlckNvbmZpZ3VyYXRpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICIiIlRl
c3RzIEZpbHRlckNvbmZpZ3VyYXRpb24gY2xhc3MuIiIiCisKKyAgICBkZWYgX2NvbmZpZyhzZWxm
LCBiYXNlX3J1bGVzLCBwYXRoX3NwZWNpZmljLCB1c2VyX3J1bGVzKToKKyAgICAgICAgIiIiUmV0
dXJuIGEgRmlsdGVyQ29uZmlndXJhdGlvbiBpbnN0YW5jZS4iIiIKKyAgICAgICAgcmV0dXJuIEZp
bHRlckNvbmZpZ3VyYXRpb24oYmFzZV9ydWxlcz1iYXNlX3J1bGVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXRoX3NwZWNpZmljPXBhdGhfc3BlY2lmaWMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfcnVsZXM9dXNlcl9ydWxlcykKKworICAg
IGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgICIiIlRlc3QgX19pbml0X18gbWV0aG9kLiIi
IgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgYXR0cmlidXRlcyBhcmUgZ2V0dGluZyBzZXQgY29y
cmVjdGx5LgorICAgICAgICAjIFdlIHVzZSBwYXJhbWV0ZXIgdmFsdWVzIHRoYXQgYXJlIGRpZmZl
cmVudCBmcm9tIHRoZSBkZWZhdWx0cy4KKyAgICAgICAgYmFzZV9ydWxlcyA9IFsiLSJdCisgICAg
ICAgIHBhdGhfc3BlY2lmaWMgPSBbKFsicGF0aCJdLCAoIithIiwpKV0KKyAgICAgICAgdXNlcl9y
dWxlcyA9IFsiKyJdCisKKyAgICAgICAgY29uZmlnID0gc2VsZi5fY29uZmlnKGJhc2VfcnVsZXMs
IHBhdGhfc3BlY2lmaWMsIHVzZXJfcnVsZXMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
YmFzZV9ydWxlcywgY29uZmlnLl9iYXNlX3J1bGVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhwYXRoX3NwZWNpZmljLCBjb25maWcuX3BhdGhfc3BlY2lmaWMpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKHVzZXJfcnVsZXMsIGNvbmZpZy51c2VyX3J1bGVzKQorCisgICAgZGVmIHRlc3Rf
ZGVmYXVsdF9hcmd1bWVudHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSBhdHRyaWJ1
dGVzIGFyZSBnZXR0aW5nIHNldCBjb3JyZWN0bHkgdG8gdGhlIGRlZmF1bHRzLgorICAgICAgICBj
b25maWcgPSBGaWx0ZXJDb25maWd1cmF0aW9uKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhbXSwgY29uZmlnLl9iYXNlX3J1bGVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbXSwg
Y29uZmlnLl9wYXRoX3NwZWNpZmljKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhbXSwgY29u
ZmlnLnVzZXJfcnVsZXMpCisKKyAgICBkZWYgdGVzdF9lcShzZWxmKToKKyAgICAgICAgIiIiVGVz
dCBfX2VxX18gbWV0aG9kLiIiIgorICAgICAgICAjIFNlZSB0aGUgbm90ZXMgYXQgdGhlIHRvcCBv
ZiB0aGlzIG1vZHVsZSBhYm91dCB0ZXN0aW5nCisgICAgICAgICMgX19lcV9fKCkgYW5kIF9fbmVf
XygpLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoRmlsdGVyQ29uZmlndXJhdGlvbigpLl9fZXFf
XyhGaWx0ZXJDb25maWd1cmF0aW9uKCkpKQorCisgICAgICAgICMgVmVyaWZ5IHRoYXQgYSBkaWZm
ZXJlbmNlIGluIGFueSBhcmd1bWVudCBjYXVzZXMgZXF1YWxpdHkgdG8gZmFpbC4KKyAgICAgICAg
Y29uZmlnID0gRmlsdGVyQ29uZmlndXJhdGlvbigpCisKKyAgICAgICAgIyBUaGVzZSBwYXJhbWV0
ZXIgdmFsdWVzIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdHMuCisgICAgICAgIGJhc2Vf
cnVsZXMgPSBbIi0iXQorICAgICAgICBwYXRoX3NwZWNpZmljID0gWyhbInBhdGgiXSwgKCIrYSIs
KSldCisgICAgICAgIHVzZXJfcnVsZXMgPSBbIisiXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFs
c2UoY29uZmlnLl9fZXFfXyhGaWx0ZXJDb25maWd1cmF0aW9uKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfcnVsZXM9YmFzZV9ydWxlcykpKQorICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKGNvbmZpZy5fX2VxX18oRmlsdGVyQ29uZmlndXJhdGlvbigKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX3NwZWNpZmljPXBh
dGhfc3BlY2lmaWMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuX19lcV9fKEZp
bHRlckNvbmZpZ3VyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlcl9ydWxlcz11c2VyX3J1bGVzKSkpCisKKyAgICBkZWYgdGVzdF9uZShzZWxmKToK
KyAgICAgICAgIiIiVGVzdCBfX25lX18gbWV0aG9kLiIiIgorICAgICAgICAjIEJ5IGRlZmF1bHQs
IF9fbmVfXyBhbHdheXMgcmV0dXJucyB0cnVlIG9uIGRpZmZlcmVudCBvYmplY3RzLgorICAgICAg
ICAjIFRodXMsIGp1c3QgY2hlY2sgdGhlIGRpc3Rpbmd1aXNoaW5nIGNhc2UgdG8gdmVyaWZ5IHRo
YXQgdGhlCisgICAgICAgICMgY29kZSBkZWZpbmVzIF9fbmVfXy4KKyAgICAgICAgIworICAgICAg
ICAjIEFsc28sIHNlZSB0aGUgbm90ZXMgYXQgdGhlIHRvcCBvZiB0aGlzIG1vZHVsZSBhYm91dCB0
ZXN0aW5nCisgICAgICAgICMgX19lcV9fKCkgYW5kIF9fbmVfXygpLgorICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKEZpbHRlckNvbmZpZ3VyYXRpb24oKS5fX25lX18oRmlsdGVyQ29uZmlndXJhdGlv
bigpKSkKKworICAgIGRlZiB0ZXN0X2Jhc2VfcnVsZXMoc2VsZik6CisgICAgICAgICIiIlRlc3Qg
ZWZmZWN0IG9mIGJhc2VfcnVsZXMgb24gc2hvdWxkX2NoZWNrKCkuIiIiCisgICAgICAgIGJhc2Vf
cnVsZXMgPSBbIi1iIl0KKyAgICAgICAgcGF0aF9zcGVjaWZpYyA9IFtdCisgICAgICAgIHVzZXJf
cnVsZXMgPSBbXQorCisgICAgICAgIGNvbmZpZyA9IHNlbGYuX2NvbmZpZyhiYXNlX3J1bGVzLCBw
YXRoX3NwZWNpZmljLCB1c2VyX3J1bGVzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25m
aWcuc2hvdWxkX2NoZWNrKCJhIiwgInBhdGgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShj
b25maWcuc2hvdWxkX2NoZWNrKCJiIiwgInBhdGgiKSkKKworICAgIGRlZiB0ZXN0X3BhdGhfc3Bl
Y2lmaWMoc2VsZik6CisgICAgICAgICIiIlRlc3QgZWZmZWN0IG9mIHBhdGhfcnVsZXNfc3BlY2lm
aWVyIG9uIHNob3VsZF9jaGVjaygpLiIiIgorICAgICAgICBiYXNlX3J1bGVzID0gWyItIl0KKyAg
ICAgICAgcGF0aF9zcGVjaWZpYyA9IFsoWyJwYXRoMSJdLCAoIitiIiwpKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAoWyJwYXRoMiJdLCAoIitjIiwpKV0KKyAgICAgICAgdXNlcl9ydWxlcyA9
IFtdCisKKyAgICAgICAgY29uZmlnID0gc2VsZi5fY29uZmlnKGJhc2VfcnVsZXMsIHBhdGhfc3Bl
Y2lmaWMsIHVzZXJfcnVsZXMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuc2hv
dWxkX2NoZWNrKCJjIiwgInBhdGgxIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25maWcu
c2hvdWxkX2NoZWNrKCJjIiwgInBhdGgyIikpCisgICAgICAgICMgVGVzdCB0aGF0IGZpcnN0IG1h
dGNoIHRha2VzIHByZWNlZGVuY2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZmlnLnNo
b3VsZF9jaGVjaygiYyIsICJwYXRoMi9wYXRoMSIpKQorCisgICAgZGVmIHRlc3RfdXNlcl9ydWxl
cyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBlZmZlY3Qgb2YgdXNlcl9ydWxlcyBvbiBzaG91bGRf
Y2hlY2soKS4iIiIKKyAgICAgICAgYmFzZV9ydWxlcyA9IFsiLSJdCisgICAgICAgIHBhdGhfc3Bl
Y2lmaWMgPSBbXQorICAgICAgICB1c2VyX3J1bGVzID0gWyIrYiJdCisKKyAgICAgICAgY29uZmln
ID0gc2VsZi5fY29uZmlnKGJhc2VfcnVsZXMsIHBhdGhfc3BlY2lmaWMsIHVzZXJfcnVsZXMpCisK
KyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuc2hvdWxkX2NoZWNrKCJhIiwgInBhdGgi
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5zaG91bGRfY2hlY2soImIiLCAicGF0
aCIpKQorCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3By
b2Nlc3NvcnMvY3BwLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9wcm9j
ZXNzb3JzL2NwcC5weQppbmRleCBlMWY0MWE0Li5iYmU1YzhhIDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3Byb2Nlc3NvcnMvY3BwLnB5CisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvcHJvY2Vzc29ycy9jcHAucHkKQEAgLTIwMzAs
MjIgKzIwMzAsNiBAQCBkZWYgX2Ryb3BfY29tbW9uX3N1ZmZpeGVzKGZpbGVuYW1lKToKICAgICBy
ZXR1cm4gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0KIAogCi1kZWYgX2lzX3Rlc3RfZmls
ZW5hbWUoZmlsZW5hbWUpOgotICAgICIiIkRldGVybWluZXMgaWYgdGhlIGdpdmVuIGZpbGVuYW1l
IGhhcyBhIHN1ZmZpeCB0aGF0IGlkZW50aWZpZXMgaXQgYXMgYSB0ZXN0LgotCi0gICAgQXJnczoK
LSAgICAgIGZpbGVuYW1lOiBUaGUgaW5wdXQgZmlsZW5hbWUuCi0KLSAgICBSZXR1cm5zOgotICAg
ICAgVHJ1ZSBpZiAnZmlsZW5hbWUnIGxvb2tzIGxpa2UgYSB0ZXN0LCBGYWxzZSBvdGhlcndpc2Uu
Ci0gICAgIiIiCi0gICAgaWYgKGZpbGVuYW1lLmVuZHN3aXRoKCdfdGVzdC5jcHAnKQotICAgICAg
ICBvciBmaWxlbmFtZS5lbmRzd2l0aCgnX3VuaXR0ZXN0LmNwcCcpCi0gICAgICAgIG9yIGZpbGVu
YW1lLmVuZHN3aXRoKCdfcmVndGVzdC5jcHAnKSk6Ci0gICAgICAgIHJldHVybiBUcnVlCi0gICAg
cmV0dXJuIEZhbHNlCi0KLQogZGVmIF9jbGFzc2lmeV9pbmNsdWRlKGZpbGVuYW1lLCBpbmNsdWRl
LCBpc19zeXN0ZW0sIGluY2x1ZGVfc3RhdGUpOgogICAgICIiIkZpZ3VyZXMgb3V0IHdoYXQga2lu
ZCBvZiBoZWFkZXIgJ2luY2x1ZGUnIGlzLgogCkBAIC0yMTEwLDcgKzIwOTQsNiBAQCBkZWYgX2Ns
YXNzaWZ5X2luY2x1ZGUoZmlsZW5hbWUsIGluY2x1ZGUsIGlzX3N5c3RlbSwgaW5jbHVkZV9zdGF0
ZSk6CiAgICAgcmV0dXJuIF9PVEhFUl9IRUFERVIKIAogCi0KIGRlZiBjaGVja19pbmNsdWRlX2xp
bmUoZmlsZW5hbWUsIGZpbGVfZXh0ZW5zaW9uLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGlu
Y2x1ZGVfc3RhdGUsIGVycm9yKToKICAgICAiIiJDaGVjayBydWxlcyB0aGF0IGFyZSBhcHBsaWNh
YmxlIHRvICNpbmNsdWRlIGxpbmVzLgogCkBAIC0yMTI2LDE0ICsyMTA5LDEyIEBAIGRlZiBjaGVj
a19pbmNsdWRlX2xpbmUoZmlsZW5hbWUsIGZpbGVfZXh0ZW5zaW9uLCBjbGVhbl9saW5lcywgbGlu
ZV9udW1iZXIsIGluY2x1CiAgICAgICBpbmNsdWRlX3N0YXRlOiBBbiBfSW5jbHVkZVN0YXRlIGlu
c3RhbmNlIGluIHdoaWNoIHRoZSBoZWFkZXJzIGFyZSBpbnNlcnRlZC4KICAgICAgIGVycm9yOiBU
aGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCiAgICAgIiIiCi0KLSAg
ICBpZiAoZmlsZW5hbWUuZmluZCgnV2ViS2l0VG9vbHMvV2ViS2l0QVBJVGVzdC8nKSA+PSAwCi0g
ICAgICAgIG9yIGZpbGVuYW1lLmZpbmQoJ1dlYktpdC9xdC9RR1ZMYXVuY2hlci8nKSA+PSAwKToK
LSAgICAgICAgIyBGaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSBhcmUgY29uc3VtZXJzIG9mIHRoZSBX
ZWJLaXQgQVBJIGFuZAotICAgICAgICAjIHRoZXJlZm9yZSBkbyBub3QgZm9sbG93IHRoZSBzYW1l
IGhlYWRlciBpbmNsdWRpbmcgZGlzY2lwbGluZSBhcwotICAgICAgICAjIFdlYkNvcmUuCi0gICAg
ICAgIHJldHVybgotCisgICAgIyBGSVhNRTogRm9yIHJlYWRhYmlsaXR5IG9yIGFzIGEgcG9zc2li
bGUgb3B0aW1pemF0aW9uLCBjb25zaWRlcgorICAgICMgICAgICAgIGV4aXRpbmcgZWFybHkgaGVy
ZSBieSBjaGVja2luZyB3aGV0aGVyIHRoZSAiYnVpbGQvaW5jbHVkZSIKKyAgICAjICAgICAgICBj
YXRlZ29yeSBzaG91bGQgYmUgY2hlY2tlZCBmb3IgdGhlIGdpdmVuIGZpbGVuYW1lLiAgVGhpcwor
ICAgICMgICAgICAgIG1heSBpbnZvbHZlIGhhdmluZyB0aGUgZXJyb3IgaGFuZGxlciBjbGFzc2Vz
IGV4cG9zZSBhCisgICAgIyAgICAgICAgc2hvdWxkX2NoZWNrKCkgbWV0aG9kLCBpbiBhZGRpdGlv
biB0byB0aGUgdXN1YWwgX19jYWxsX18KKyAgICAjICAgICAgICBtZXRob2QuCiAgICAgbGluZSA9
IGNsZWFuX2xpbmVzLmxpbmVzW2xpbmVfbnVtYmVyXQogCiAgICAgbWF0Y2hlZCA9IF9SRV9QQVRU
RVJOX0lOQ0xVREUuc2VhcmNoKGxpbmUpCkBAIC0yMTQ1LDEwICsyMTI2LDggQEAgZGVmIGNoZWNr
X2luY2x1ZGVfbGluZShmaWxlbmFtZSwgZmlsZV9leHRlbnNpb24sIGNsZWFuX2xpbmVzLCBsaW5l
X251bWJlciwgaW5jbHUKIAogICAgICMgTG9vayBmb3IgYW55IG9mIHRoZSBzdHJlYW0gY2xhc3Nl
cyB0aGF0IGFyZSBwYXJ0IG9mIHN0YW5kYXJkIEMrKy4KICAgICBpZiBtYXRjaChyJyhmfGluZHxp
b3xpfG98cGFyc2V8cGZ8c3RkaW98c3RyfCk/c3RyZWFtJCcsIGluY2x1ZGUpOgotICAgICAgICAj
IE1hbnkgdW5pdCB0ZXN0cyB1c2UgY291dCwgc28gd2UgZXhlbXB0IHRoZW0uCi0gICAgICAgIGlm
IG5vdCBfaXNfdGVzdF9maWxlbmFtZShmaWxlbmFtZSk6Ci0gICAgICAgICAgICBlcnJvcihsaW5l
X251bWJlciwgJ3JlYWRhYmlsaXR5L3N0cmVhbXMnLCAzLAotICAgICAgICAgICAgICAgICAgJ1N0
cmVhbXMgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC4nKQorICAgICAgICBlcnJvcihsaW5lX251bWJl
ciwgJ3JlYWRhYmlsaXR5L3N0cmVhbXMnLCAzLAorICAgICAgICAgICAgICAnU3RyZWFtcyBhcmUg
aGlnaGx5IGRpc2NvdXJhZ2VkLicpCiAKICAgICAjIExvb2sgZm9yIHNwZWNpZmljIGluY2x1ZGVz
IHRvIGZpeC4KICAgICBpZiBpbmNsdWRlLnN0YXJ0c3dpdGgoJ3d0Zi8nKSBhbmQgbm90IGlzX3N5
c3RlbToKQEAgLTIyOTEsNyArMjI3MCw3IEBAIGRlZiBjaGVja19sYW5ndWFnZShmaWxlbmFtZSwg
Y2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmaWxlX2V4dGVuc2lvbiwgaW5jbHVkZV9zCiAgICAg
ICAgICAgICAgIChtYXRjaGVkLmdyb3VwKDEpLCBtYXRjaGVkLmdyb3VwKDIpKSkKIAogICAgICMg
Q2hlY2sgdGhhdCB3ZSdyZSBub3QgdXNpbmcgUlRUSSBvdXRzaWRlIG9mIHRlc3RpbmcgY29kZS4K
LSAgICBpZiBzZWFyY2gocidcYmR5bmFtaWNfY2FzdDwnLCBsaW5lKSBhbmQgbm90IF9pc190ZXN0
X2ZpbGVuYW1lKGZpbGVuYW1lKToKKyAgICBpZiBzZWFyY2gocidcYmR5bmFtaWNfY2FzdDwnLCBs
aW5lKToKICAgICAgICAgZXJyb3IobGluZV9udW1iZXIsICdydW50aW1lL3J0dGknLCA1LAogICAg
ICAgICAgICAgICAnRG8gbm90IHVzZSBkeW5hbWljX2Nhc3Q8Pi4gIElmIHlvdSBuZWVkIHRvIGNh
c3Qgd2l0aGluIGEgY2xhc3MgJwogICAgICAgICAgICAgICAiaGllcmFyY2h5LCB1c2Ugc3RhdGlj
X2Nhc3Q8PiB0byB1cGNhc3QuICBHb29nbGUgZG9lc24ndCBzdXBwb3J0ICIKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvcHJvY2Vzc29ycy9jcHBfdW5pdHRl
c3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL3Byb2Nlc3NvcnMvY3Bw
X3VuaXR0ZXN0LnB5CmluZGV4IGU1NTZjZDMuLjhiMWJmOWMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvcHJvY2Vzc29ycy9jcHBfdW5pdHRlc3QucHkKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9wcm9jZXNzb3JzL2NwcF91bml0
dGVzdC5weQpAQCAtMzgxLDEwICszODEsNiBAQCBjbGFzcyBDcHBTdHlsZVRlc3QoQ3BwU3R5bGVU
ZXN0QmFzZSk6CiAgICAgICAgICMgZHluYW1pY19jYXN0IGlzIGRpc2FsbG93ZWQgaW4gbW9zdCBm
aWxlcy4KICAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ2Zvby5jcHAn
LCBzdGF0ZW1lbnQsIGVycm9yX21lc3NhZ2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdl
X3J1bGVzX2NoZWNrKCdmb28uaCcsIHN0YXRlbWVudCwgZXJyb3JfbWVzc2FnZSkKLSAgICAgICAg
IyBJdCBpcyBleHBsaWNpdGx5IGFsbG93ZWQgaW4gdGVzdHMsIGhvd2V2ZXIuCi0gICAgICAgIHNl
bGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb29fdGVzdC5jcHAnLCBzdGF0ZW1lbnQs
ICcnKQotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vX3VuaXR0
ZXN0LmNwcCcsIHN0YXRlbWVudCwgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1
bGVzX2NoZWNrKCdmb29fcmVndGVzdC5jcHAnLCBzdGF0ZW1lbnQsICcnKQogCiAgICAgIyBXZSBj
YW5ub3QgdGVzdCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmVjYXVzZSBvZiBkaWZmZXJlbmNlIG9mCiAg
ICAgIyBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIEFueXdheSwgd2UgbWF5IG5ldmVyIGVuYWJsZSB0
aGlzLgpAQCAtMjA1NiwxNiArMjA1Miw2IEBAIGNsYXNzIE9yZGVyT2ZJbmNsdWRlc1Rlc3QoQ3Bw
U3R5bGVUZXN0QmFzZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICcjaW5jbHVkZSA8YXNzZXJ0Lmg+XG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnJykKIAotICAgIGRlZiB0ZXN0X3dlYmtpdF9hcGlfdGVzdF9leGNsdWRlZChz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfbGFuZ3VhZ2VfcnVsZXNfY2hlY2soJ1dlYktpdFRv
b2xzL1dlYktpdEFQSVRlc3QvVGVzdC5oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJyNpbmNsdWRlICJmb28uaCJcbicsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICcnKQotCi0gICAgZGVmIHRlc3Rfd2Via2l0X2FwaV90ZXN0X2V4
Y2x1ZGVkKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygn
V2ViS2l0L3F0L1FHVkxhdW5jaGVyL21haW4uY3BwJywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJyNpbmNsdWRlICJmb28uaCJcbicsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICcnKQotCiAgICAgZGVmIHRlc3RfY2hlY2tfbGluZV9i
cmVha19hZnRlcl9vd25faGVhZGVyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFn
ZV9ydWxlc19jaGVjaygnZm9vLmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICcjaW5jbHVkZSAiY29uZmlnLmgiXG4nCg==
</data>
<flag name="review"
          id="30754"
          type_id="1"
          status="+"
          setter="hamaji"
    />
    <flag name="commit-queue"
          id="30755"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
      

    </bug>

</bugzilla>