<?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>30362</bug_id>
          
          <creation_ts>2009-10-14 11:06:04 -0700</creation_ts>
          <short_desc>check-webkit-style is wrong about indent checking in namespaces in header files</short_desc>
          <delta_ts>2009-10-16 11:47:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carol Szabo">carol</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>154613</commentid>
    <comment_count>0</comment_count>
    <who name="Carol Szabo">carol</who>
    <bug_when>2009-10-14 11:06:04 -0700</bug_when>
    <thetext>check-webkit-style has not been updated to reflect the new style-guidelines referring to not indenting in a namespace even in a header file.
Also check-webkit-style was purposefully coded to not warn about missing spaces between numbers and binary operators such as &lt;&lt;, which is not conforming to the webkit style guidelines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154631</commentid>
    <comment_count>1</comment_count>
      <attachid>41179</attachid>
    <who name="Carol Szabo">carol</who>
    <bug_when>2009-10-14 12:38:08 -0700</bug_when>
    <thetext>Created attachment 41179
Proposed Patch

This patch addresses some of the issues seen with check-webkit-style
It has limited handling of preprocessor directives, thus it may generate a few false errors when a #if directive with #else clause is used at the end of a statement such as here:
namespace test {
void f(
#if HAVE(LONG_LONG_INT)
    long long int);
#else
    long int);
#endif
}

It will complain about the spacing before the 6th line since it will think that the function declaration has finished on the 4th line.

But it addresses many false errors about indentation in header files containing the namespace reserved word. Also it improves handling of spacing around binary operators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154928</commentid>
    <comment_count>2</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-15 15:53:34 -0700</bug_when>
    <thetext>I should be able to look at this patch in a few hours.

But I&apos;m concerned about supporting this style:

namespace test {
void f(
#if HAVE(LONG_LONG_INT)
    long long int);
#else
    long int);
#endif
}

Code like this breaks a several things 
* indenting in editor (like emacs for example) 
* makes any interline checks in check-webkit-style more fragile as you&apos;re noting.

Personally, rather than change check-webkit-style, I&apos;d much prefer discourage this coding pattern in favor of any of the following:

namespace test {
void f(
#if HAVE(LONG_LONG_INT)
    long long int
#else
    long int
#endif
);
}
or

namespace test {
#if HAVE(LONG_LONG_INT)
void f(long long int);
#else
void f(long int);
#endif
}

or

namespace test {
#if HAVE(LONG_LONG_INT)
typedef long long int ReallyLongInt;
#else
typedef long int ReallyLongInt;
#endif
void f(ReallyLongInt);
}

I&apos;d almost recommend putting something in check-webkit-style to avoid the given style but first that would have to be discussed on webkit-dev.

Comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154963</commentid>
    <comment_count>3</comment_count>
    <who name="Carol Szabo">carol</who>
    <bug_when>2009-10-15 18:08:10 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I should be able to look at this patch in a few hours.
&gt; 
&gt; But I&apos;m concerned about supporting this style:
&gt; 
&gt; namespace test {
&gt; void f(
&gt; #if HAVE(LONG_LONG_INT)
&gt;     long long int);
&gt; #else
&gt;     long int);
&gt; #endif
&gt; }
&gt; 
&gt; Code like this breaks a several things 
&gt; * indenting in editor (like emacs for example) 
&gt; * makes any interline checks in check-webkit-style more fragile as you&apos;re
&gt; noting.
&gt; 
&gt; Personally, rather than change check-webkit-style, I&apos;d much prefer discourage
&gt; this coding pattern in favor of any of the following:
&gt; 
&gt; namespace test {
&gt; void f(
&gt; #if HAVE(LONG_LONG_INT)
&gt;     long long int
&gt; #else
&gt;     long int
&gt; #endif
&gt; );
&gt; }
&gt; or
&gt; 
&gt; namespace test {
&gt; #if HAVE(LONG_LONG_INT)
&gt; void f(long long int);
&gt; #else
&gt; void f(long int);
&gt; #endif
&gt; }
&gt; 
&gt; or
&gt; 
&gt; namespace test {
&gt; #if HAVE(LONG_LONG_INT)
&gt; typedef long long int ReallyLongInt;
&gt; #else
&gt; typedef long int ReallyLongInt;
&gt; #endif
&gt; void f(ReallyLongInt);
&gt; }
&gt; 
&gt; I&apos;d almost recommend putting something in check-webkit-style to avoid the given
&gt; style but first that would have to be discussed on webkit-dev.
&gt; 
&gt; Comments?

Then its good because my patch flags that code (despite the fact that that was not the intent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154974</commentid>
    <comment_count>4</comment_count>
      <attachid>41179</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-15 19:53:05 -0700</bug_when>
    <thetext>Comment on attachment 41179
Proposed Patch

Thanks for taking care of this! Just a few things to address and this will be in.

Something that I think is pretty important when changing this tool: Did you try running this over the current WebKit code base to ensure that it doesn&apos;t introduce (lots of) false positives?


&gt; Index: WebKitTools/ChangeLog
&gt; +2009-10-14  Carol Szabo  &lt;carol.szabo@nokia.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +

Ideally this would have:
   bug title
   link to bug

   description

You have these elements in here but not quite in this format.

&gt; +        check-webkit style is wrong about indent checking in namespaces in
&gt; +        header files also it does not allow spaces around the equal sign
&gt; +        inside &apos;if&apos; statements and around binary operators that take 
&gt; +        numeric literals and it reports false errors for the / operator
&gt; +        when part of a filename in the #include directive.

It would be nice to add some punctuation in here. Also, there are a lot of &quot;and&quot;s joining sentences which would be nice to break up.


&gt; +        https://bugs.webkit.org/show_bug.cgi?id=30362
&gt; +
&gt; +        * Scripts/modules/cpp_style.py:
&gt; +        Improved indentation checking and space checking around
&gt; +        binary operators. While the checks are still not perfect,
&gt; +        they are clearly better than before.
&gt; +        * Scripts/modules/cpp_style_unittest.py:
&gt; +        Added test cases for the newly supported checks and modified old
&gt; +        test cases to match the new guidelines

Nice explanations.

&gt; Index: WebKitTools/Scripts/modules/cpp_style.py
&gt; @@ -1533,16 +1533,15 @@ def check_spacing(filename, clean_lines,


&gt; +    if search(r&apos;[\w.]=[\w.]&apos;, line):
&gt;          error(filename, line_number, &apos;whitespace/operators&apos;, 4,
&gt; -              &apos;Missing spaces around =&apos;)
&gt; +            &apos;Missing spaces around =&apos;)

This change in spacing is incorrect.

&gt; @@ -1699,50 +1696,34 @@ def check_namespace_indentation(filename

&gt; +    looking_for_semicolon = False;
&gt;      line_offset = 0
&gt; +    in_preprocessor_directive = False;
&gt; +    for current_line in clean_lines.elided[line_number + 1:]:
&gt; +        line_offset += 1

&gt; +        if current_line.strip() == &apos;&apos;:
Use
        if not current_line.strip():

&gt; +            continue
&gt; +        if not current_indentation_level:
&gt; +            if not (in_preprocessor_directive or looking_for_semicolon):
&gt; +                if not match(r&apos;\S&apos;, current_line):
&gt;                      error(filename, line_number + line_offset, &apos;whitespace/indent&apos;, 4,
&gt; +                        &apos;Code inside a namespace should not be indented.&apos;)

This isn&apos;t indented correctly. (It should use the open paren on the previous line.)

&gt; +            if in_preprocessor_directive or (current_line.strip()[0] == &apos;#&apos;):  # This takes care of preprocessor directive syntax

Please put one space before end of line comments and end them with punctuation.

&gt; +                in_preprocessor_directive = current_line[-1] == &apos;\\&apos;
&gt; +            else:
&gt; +                looking_for_semicolon = ((current_line.find(&apos;;&apos;) == -1) and (current_line.strip()[-1] != &apos;}&apos;)) or (current_line[-1] == &apos;\\&apos;)
&gt; +        else:
&gt; +            looking_for_semicolon = False; # if we have a brace we may not need a semicolon

s/if we have a brace we may not need a semicolon/If we have a brace, we may not need a semicolon./


&gt; Index: WebKitTools/Scripts/modules/cpp_style_unittest.py

Where are the tests for these items?

Also, it does not allow spaces 
   * around the equal sign inside &apos;if&apos; statements and 
   * around binary operators that take numeric literals.

It reports false errors for the / operator when part of a filename in the #include directive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154975</commentid>
    <comment_count>5</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-15 19:54:38 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Then its good because my patch flags that code (despite the fact that that was
&gt; not the intent.

Cool. I misread your comment #1 when I read it quickly. Now I understand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155004</commentid>
    <comment_count>6</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-15 21:52:03 -0700</bug_when>
    <thetext>fyi, I just r+ a fix for the same issue (namespace indentation) that was pretty
minimal in scope (https://bugs.webkit.org/show_bug.cgi?id=30426). I still think
there is a lot of value on what you did here with some fixes as mentioned
above. You can still basically replace the code as you are doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155110</commentid>
    <comment_count>7</comment_count>
      <attachid>41291</attachid>
    <who name="Carol Szabo">carol</who>
    <bug_when>2009-10-16 09:43:33 -0700</bug_when>
    <thetext>Created attachment 41291
Proposed Patch

This addresses Levin&apos;s comments.
I have run the check-webkit-style scripth before and after my changes through the entire WebKit source and I have spot checked issues. At the moment other than the scenario described earlier in the comments, which I understand not to be a favored code style anyway, I saw no false warnings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155149</commentid>
    <comment_count>8</comment_count>
      <attachid>41291</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-16 11:15:11 -0700</bug_when>
    <thetext>Comment on attachment 41291
Proposed Patch


&gt; Index: WebKitTools/Scripts/modules/cpp_style.py
&gt; +    if current_indentation_level &gt; 0:
&gt; +        error(filename, line_number, &apos;whitespace/indent&apos;, 4,
&gt; +                          &apos;namespace should never be indented.&apos;)

The indentation is off here.

I&apos;ll fix this on landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155155</commentid>
    <comment_count>9</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-16 11:47:30 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/49690</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41179</attachid>
            <date>2009-10-14 12:38:08 -0700</date>
            <delta_ts>2009-10-16 09:43:33 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>patchFor30362-1.patch</filename>
            <type>text/plain</type>
            <size>12906</size>
            <attacher name="Carol Szabo">carol</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDQ5NTc0KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMDktMTAtMTQgIENhcm9sIFN6YWJvICA8Y2Fy
b2wuc3phYm9Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGNoZWNrLXdlYmtpdCBzdHlsZSBpcyB3cm9uZyBhYm91dCBpbmRlbnQgY2hl
Y2tpbmcgaW4gbmFtZXNwYWNlcyBpbgorICAgICAgICBoZWFkZXIgZmlsZXMgYWxzbyBpdCBkb2Vz
IG5vdCBhbGxvdyBzcGFjZXMgYXJvdW5kIHRoZSBlcXVhbCBzaWduCisgICAgICAgIGluc2lkZSAn
aWYnIHN0YXRlbWVudHMgYW5kIGFyb3VuZCBiaW5hcnkgb3BlcmF0b3JzIHRoYXQgdGFrZSAKKyAg
ICAgICAgbnVtZXJpYyBsaXRlcmFscyBhbmQgaXQgcmVwb3J0cyBmYWxzZSBlcnJvcnMgZm9yIHRo
ZSAvIG9wZXJhdG9yCisgICAgICAgIHdoZW4gcGFydCBvZiBhIGZpbGVuYW1lIGluIHRoZSAjaW5j
bHVkZSBkaXJlY3RpdmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zMDM2MgorCisgICAgICAgICogU2NyaXB0cy9tb2R1bGVzL2NwcF9zdHlsZS5weToK
KyAgICAgICAgSW1wcm92ZWQgaW5kZW50YXRpb24gY2hlY2tpbmcgYW5kIHNwYWNlIGNoZWNraW5n
IGFyb3VuZAorICAgICAgICBiaW5hcnkgb3BlcmF0b3JzLiBXaGlsZSB0aGUgY2hlY2tzIGFyZSBz
dGlsbCBub3QgcGVyZmVjdCwKKyAgICAgICAgdGhleSBhcmUgY2xlYXJseSBiZXR0ZXIgdGhhbiBi
ZWZvcmUuCisgICAgICAgICogU2NyaXB0cy9tb2R1bGVzL2NwcF9zdHlsZV91bml0dGVzdC5weToK
KyAgICAgICAgQWRkZWQgdGVzdCBjYXNlcyBmb3IgdGhlIG5ld2x5IHN1cHBvcnRlZCBjaGVja3Mg
YW5kIG1vZGlmaWVkIG9sZAorICAgICAgICB0ZXN0IGNhc2VzIHRvIG1hdGNoIHRoZSBuZXcgZ3Vp
ZGVsaW5lcworCiAyMDA5LTEwLTE0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogV2ViS2l0VG9vbHMvU2Ny
aXB0cy9tb2R1bGVzL2NwcF9zdHlsZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3Jp
cHRzL21vZHVsZXMvY3BwX3N0eWxlLnB5CShyZXZpc2lvbiA0OTU3NCkKKysrIFdlYktpdFRvb2xz
L1NjcmlwdHMvbW9kdWxlcy9jcHBfc3R5bGUucHkJKHdvcmtpbmcgY29weSkKQEAgLTE1MzMsMTYg
KzE1MzMsMTUgQEAgZGVmIGNoZWNrX3NwYWNpbmcoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLAogCiAg
ICAgIyBEb24ndCB0cnkgdG8gZG8gc3BhY2luZyBjaGVja3MgZm9yIG9wZXJhdG9yIG1ldGhvZHMK
ICAgICBsaW5lID0gcmUuc3ViKHInb3BlcmF0b3IoPT18IT18PHw8PHw8PXw+PXw+Pnw+KVwoJywg
J29wZXJhdG9yXCgnLCBsaW5lKQotCi0gICAgIyBXZSBhbGxvdyBuby1zcGFjZXMgYXJvdW5kID0g
d2l0aGluIGFuIGlmOiAiaWYgKCAoYT1Gb28oKSkgPT0gMCApIi4KLSAgICAjIE90aGVyd2lzZSBu
b3QuICBOb3RlIHdlIG9ubHkgY2hlY2sgZm9yIG5vbi1zcGFjZXMgb24gKmJvdGgqIHNpZGVzOwot
ICAgICMgc29tZXRpbWVzIHBlb3BsZSBwdXQgbm9uLXNwYWNlcyBvbiBvbmUgc2lkZSB3aGVuIGFs
aWduaW5nID0ncyBhbW9uZwotICAgICMgbWFueSBsaW5lcyAobm90IHRoYXQgdGhpcyBpcyBiZWhh
dmlvciB0aGF0IEkgYXBwcm92ZSBvZi4uLikKLSAgICBpZiBzZWFyY2gocidbXHcuXT1bXHcuXScs
IGxpbmUpIGFuZCBub3Qgc2VhcmNoKHInXGIoaWZ8d2hpbGUpICcsIGxpbmUpOgorICAgICMgRG9u
J3QgdHJ5IHRvIGRvIHNwYWNpbmcgY2hlY2tzIGZvciAjaW5jbHVkZSBzdGF0ZW1lbnRzIGF0IG1p
bmltdW0gaXQKKyAgICAjIG1lc3NlcyB1cCBjaGVja3MgZm9yIHNwYWNpbmcgYXJvdW5kIC8KKyAg
ICBpZiBtYXRjaChyJ1xzKiNccyppbmNsdWRlJywgbGluZSk6CisgICAgICAgIHJldHVybgorICAg
IGlmIHNlYXJjaChyJ1tcdy5dPVtcdy5dJywgbGluZSk6CiAgICAgICAgIGVycm9yKGZpbGVuYW1l
LCBsaW5lX251bWJlciwgJ3doaXRlc3BhY2Uvb3BlcmF0b3JzJywgNCwKLSAgICAgICAgICAgICAg
J01pc3Npbmcgc3BhY2VzIGFyb3VuZCA9JykKKyAgICAgICAgICAgICdNaXNzaW5nIHNwYWNlcyBh
cm91bmQgPScpCiAKLSAgICAjIEZJWE1FOiBJdCdzIG5vdCBvayB0byBoYXZlIHNwYWNlcyBhcm91
bmQgYmluYXJ5IG9wZXJhdG9ycyBsaWtlICsgLSAqIC8gLgorICAgICMgRklYTUU6IEl0J3Mgbm90
IG9rIHRvIGhhdmUgc3BhY2VzIGFyb3VuZCBiaW5hcnkgb3BlcmF0b3JzIGxpa2UgLgogCiAgICAg
IyBZb3Ugc2hvdWxkIGFsd2F5cyBoYXZlIHdoaXRlc3BhY2UgYXJvdW5kIGJpbmFyeSBvcGVyYXRv
cnMuCiAgICAgIyBBbGFzLCB3ZSBjYW4ndCB0ZXN0IDwgb3IgPiBiZWNhdXNlIHRoZXkncmUgbGVn
aXRpbWF0ZWx5IHVzZWQgc2FucyBzcGFjZXMKQEAgLTE1NTksOSArMTU1OCw3IEBAIGRlZiBjaGVj
a19zcGFjaW5nKGZpbGVuYW1lLCBjbGVhbl9saW5lcywKICAgICBpZiBtYXRjaGVkOgogICAgICAg
ICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL29wZXJhdG9ycycsIDMs
CiAgICAgICAgICAgICAgICdNaXNzaW5nIHNwYWNlcyBhcm91bmQgJXMnICUgbWF0Y2hlZC5ncm91
cCgxKSkKLSAgICAjIFdlIGFsbG93IG5vLXNwYWNlcyBhcm91bmQgPDwgYW5kID4+IHdoZW4gdXNl
ZCBsaWtlIHRoaXM6IDEwPDwyMCwgYnV0Ci0gICAgIyBub3Qgb3RoZXJ3aXNlIChwYXJ0aWN1bGFy
bHksIG5vdCB3aGVuIHVzZWQgYXMgc3RyZWFtcykKLSAgICBtYXRjaGVkID0gc2VhcmNoKHInW14w
LTlcc10oPDx8Pj4pW14wLTlccz1dJywgbGluZSkKKyAgICBtYXRjaGVkID0gc2VhcmNoKHInW15c
c10oPDx8Pj4pW15ccz1dJywgbGluZSkKICAgICBpZiBtYXRjaGVkOgogICAgICAgICBlcnJvcihm
aWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL29wZXJhdG9ycycsIDMsCiAgICAgICAg
ICAgICAgICdNaXNzaW5nIHNwYWNlcyBhcm91bmQgJXMnICUgbWF0Y2hlZC5ncm91cCgxKSkKQEAg
LTE2OTksNTAgKzE2OTYsMzQgQEAgZGVmIGNoZWNrX25hbWVzcGFjZV9pbmRlbnRhdGlvbihmaWxl
bmFtZQogICAgIGlmIG5vdCBuYW1lc3BhY2VfbWF0Y2g6CiAgICAgICAgIHJldHVybgogCi0gICAg
bmFtZXNwYWNlX2luZGVudGF0aW9uID0gbmFtZXNwYWNlX21hdGNoLmdyb3VwKCduYW1lc3BhY2Vf
aW5kZW50YXRpb24nKQotCi0gICAgaXNfaGVhZGVyX2ZpbGUgPSBmaWxlX2V4dGVuc2lvbiA9PSAn
aCcKLSAgICBpc19pbXBsZW1lbnRhdGlvbl9maWxlID0gbm90IGlzX2hlYWRlcl9maWxlCisgICAg
Y3VycmVudF9pbmRlbnRhdGlvbl9sZXZlbCA9IGxlbihuYW1lc3BhY2VfbWF0Y2guZ3JvdXAoJ25h
bWVzcGFjZV9pbmRlbnRhdGlvbicpKQorICAgIGlmIGN1cnJlbnRfaW5kZW50YXRpb25fbGV2ZWwg
PiAwOgorICAgICAgICBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsICd3aGl0ZXNwYWNlL2lu
ZGVudCcsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICduYW1lc3BhY2Ugc2hvdWxkIG5l
dmVyIGJlIGluZGVudGVkLicpCisgICAgICAgIHJldHVybgorICAgIGxvb2tpbmdfZm9yX3NlbWlj
b2xvbiA9IEZhbHNlOwogICAgIGxpbmVfb2Zmc2V0ID0gMAorICAgIGluX3ByZXByb2Nlc3Nvcl9k
aXJlY3RpdmUgPSBGYWxzZTsKKyAgICBmb3IgY3VycmVudF9saW5lIGluIGNsZWFuX2xpbmVzLmVs
aWRlZFtsaW5lX251bWJlciArIDE6XToKKyAgICAgICAgbGluZV9vZmZzZXQgKz0gMQogCi0gICAg
aWYgaXNfaGVhZGVyX2ZpbGU6Ci0gICAgICAgIGlubmVyX2luZGVudGF0aW9uID0gbmFtZXNwYWNl
X2luZGVudGF0aW9uICsgJyAnICogNAotCi0gICAgICAgIGZvciBjdXJyZW50X2xpbmUgaW4gY2xl
YW5fbGluZXMucmF3X2xpbmVzW2xpbmVfbnVtYmVyICsgMTpdOgotICAgICAgICAgICAgbGluZV9v
ZmZzZXQgKz0gMQotCi0gICAgICAgICAgICAjIFNraXAgbm90IG9ubHkgZW1wdHkgbGluZXMgYnV0
IGFsc28gdGhvc2Ugd2l0aCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KLSAgICAgICAgICAgICMg
R290byBsYWJlbHMgZG9uJ3Qgb2NjdXIgaW4gaGVhZGVyIGZpbGVzLCBzbyBubyBuZWVkIHRvIGNo
ZWNrIGZvciB0aG9zZS4KLSAgICAgICAgICAgIGlmIGN1cnJlbnRfbGluZS5zdHJpcCgpID09ICcn
IG9yIGN1cnJlbnRfbGluZS5zdGFydHN3aXRoKCcjJyk6Ci0gICAgICAgICAgICAgICAgY29udGlu
dWUKLQotICAgICAgICAgICAgaWYgbm90IGN1cnJlbnRfbGluZS5zdGFydHN3aXRoKGlubmVyX2lu
ZGVudGF0aW9uKToKLSAgICAgICAgICAgICAgICAjIElmIHNvbWV0aGluZyB1bmluZGVudGVkIHdh
cyBkaXNjb3ZlcmVkLCBtYWtlIHN1cmUgaXQncyBhIGNsb3NpbmcgYnJhY2UuCi0gICAgICAgICAg
ICAgICAgaWYgbm90IGN1cnJlbnRfbGluZS5zdGFydHN3aXRoKG5hbWVzcGFjZV9pbmRlbnRhdGlv
biArICd9Jyk6CisgICAgICAgIGlmIGN1cnJlbnRfbGluZS5zdHJpcCgpID09ICcnOgorICAgICAg
ICAgICAgY29udGludWUKKyAgICAgICAgaWYgbm90IGN1cnJlbnRfaW5kZW50YXRpb25fbGV2ZWw6
CisgICAgICAgICAgICBpZiBub3QgKGluX3ByZXByb2Nlc3Nvcl9kaXJlY3RpdmUgb3IgbG9va2lu
Z19mb3Jfc2VtaWNvbG9uKToKKyAgICAgICAgICAgICAgICBpZiBub3QgbWF0Y2gocidcUycsIGN1
cnJlbnRfbGluZSk6CiAgICAgICAgICAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251
bWJlciArIGxpbmVfb2Zmc2V0LCAnd2hpdGVzcGFjZS9pbmRlbnQnLCA0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAnSW4gYSBoZWFkZXIsIGNvZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3Vs
ZCBiZSBpbmRlbnRlZC4nKQotICAgICAgICAgICAgICAgIGJyZWFrCi0KLSAgICBpZiBpc19pbXBs
ZW1lbnRhdGlvbl9maWxlOgotICAgICAgICBmb3IgY3VycmVudF9saW5lIGluIGNsZWFuX2xpbmVz
LnJhd19saW5lc1tsaW5lX251bWJlciArIDE6XToKLSAgICAgICAgICAgIGxpbmVfb2Zmc2V0ICs9
IDEKLQotICAgICAgICAgICAgIyBTa2lwIG5vdCBvbmx5IGVtcHR5IGxpbmVzIGJ1dCBhbHNvIHRo
b3NlIHdpdGggKGdvdG8pIGxhYmVscy4KLSAgICAgICAgICAgICMgVGhlIGdvdG8gbGFiZWwgcmVn
ZXhwIGFjY2VwdHMgc3BhY2VzIG9yIHRoZSBiZWdpbm5pbmcgb2YgYQotICAgICAgICAgICAgIyBj
b21tZW50IChpZiBhbnl0aGluZykgYWZ0ZXIgdGhlIGluaXRpYWwgY29sb24uCi0gICAgICAgICAg
ICBpZiBjdXJyZW50X2xpbmUuc3RyaXAoKSA9PSAnJyBvciBtYXRjaChyJ1x3K1xzKjooW1xzXC9d
LiopPyQnLCBjdXJyZW50X2xpbmUpOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAg
ICAgICAgIHJlbWFpbmluZ19saW5lID0gY3VycmVudF9saW5lW2xlbihuYW1lc3BhY2VfaW5kZW50
YXRpb24pOl0KLSAgICAgICAgICAgIGlmIG5vdCBtYXRjaChyJ1xTJywgcmVtYWluaW5nX2xpbmUp
OgotICAgICAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciArIGxpbmVfb2Zm
c2V0LCAnd2hpdGVzcGFjZS9pbmRlbnQnLCA0LAotICAgICAgICAgICAgICAgICAgICAgICdJbiBh
biBpbXBsZW1lbnRhdGlvbiBmaWxlLCBjb2RlIGluc2lkZSBhIG5hbWVzcGFjZSBzaG91bGQgbm90
IGJlIGluZGVudGVkLicpCi0KLSAgICAgICAgICAgICMgSnVzdCBjaGVjayB0aGUgZmlyc3Qgbm9u
LWVtcHR5IGxpbmUgaW4gYW55IGNhc2UsIGJlY2F1c2UKLSAgICAgICAgICAgICMgb3RoZXJ3aXNl
IHdlIHdvdWxkIG5lZWQgdG8gY291bnQgb3BlbmVkIGFuZCBjbG9zZWQgYnJhY2VzLAotICAgICAg
ICAgICAgIyB3aGljaCBpcyBvYnZpb3VzbHkgYSBsb3QgbW9yZSBjb21wbGljYXRlZC4KLSAgICAg
ICAgICAgIGJyZWFrCi0KKyAgICAgICAgICAgICAgICAgICAgICAgICdDb2RlIGluc2lkZSBhIG5h
bWVzcGFjZSBzaG91bGQgbm90IGJlIGluZGVudGVkLicpCisgICAgICAgICAgICBpZiBpbl9wcmVw
cm9jZXNzb3JfZGlyZWN0aXZlIG9yIChjdXJyZW50X2xpbmUuc3RyaXAoKVswXSA9PSAnIycpOiAg
IyBUaGlzIHRha2VzIGNhcmUgb2YgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBzeW50YXgKKyAgICAg
ICAgICAgICAgICBpbl9wcmVwcm9jZXNzb3JfZGlyZWN0aXZlID0gY3VycmVudF9saW5lWy0xXSA9
PSAnXFwnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvb2tpbmdfZm9yX3Nl
bWljb2xvbiA9ICgoY3VycmVudF9saW5lLmZpbmQoJzsnKSA9PSAtMSkgYW5kIChjdXJyZW50X2xp
bmUuc3RyaXAoKVstMV0gIT0gJ30nKSkgb3IgKGN1cnJlbnRfbGluZVstMV0gPT0gJ1xcJykKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvb2tpbmdfZm9yX3NlbWljb2xvbiA9IEZhbHNlOyAj
IGlmIHdlIGhhdmUgYSBicmFjZSB3ZSBtYXkgbm90IG5lZWQgYSBzZW1pY29sb24KKyAgICAgICAg
IAorICAgICAgICBjdXJyZW50X2luZGVudGF0aW9uX2xldmVsICs9IGN1cnJlbnRfbGluZS5jb3Vu
dCgneycpIC0gY3VycmVudF9saW5lLmNvdW50KCd9JykKKyAgICAgICAgaWYgY3VycmVudF9pbmRl
bnRhdGlvbl9sZXZlbCA8IDA6CisgICAgICAgICAgICBicmVhazsKIAogZGVmIGNoZWNrX3VzaW5n
X3N0ZChmaWxlbmFtZSwgY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBlcnJvcik6CiAgICAgIiIi
TG9va3MgZm9yICd1c2luZyBzdGQ6OmZvbzsnIHN0YXRlbWVudHMgd2hpY2ggc2hvdWxkIGJlIHJl
cGxhY2VkIHdpdGggJ3VzaW5nIG5hbWVzcGFjZSBzdGQ7Jy4KSW5kZXg6IFdlYktpdFRvb2xzL1Nj
cmlwdHMvbW9kdWxlcy9jcHBfc3R5bGVfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NwcF9zdHlsZV91bml0dGVzdC5weQkocmV2aXNpb24gNDk1
NzQpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwX3N0eWxlX3VuaXR0ZXN0LnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0yODA2LDE0ICsyODA2LDE0IEBAIGNsYXNzIFdlYktpdFN0eWxl
VGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAgICAgICAgICAgICdXZWlyZCBudW1iZXIgb2Ygc3Bh
Y2VzIGF0IGxpbmUtc3RhcnQuICBBcmUgeW91IHVzaW5nIGEgNC1zcGFjZSBpbmRlbnQ/ICBbd2hp
dGVzcGFjZS9pbmRlbnRdIFszXScpCiAgICAgICAgICMgRklYTUU6IE5vIHRlc3RzIGZvciA4LXNw
YWNlcy4KIAotICAgICAgICAjIDMuIEluIGEgaGVhZGVyLCBjb2RlIGluc2lkZSBhIG5hbWVzcGFj
ZSBzaG91bGQgYmUgaW5kZW50ZWQuCisgICAgICAgICMgMy4gSW4gYSBoZWFkZXIsIGNvZGUgaW5z
aWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuCiAgICAgICAgIHNlbGYuYXNz
ZXJ0X211bHRpX2xpbmVfbGludCgKICAgICAgICAgICAgICduYW1lc3BhY2UgV2ViQ29yZSB7XG5c
bicKICAgICAgICAgICAgICcgICAgY2xhc3MgRG9jdW1lbnQge1xuJwogICAgICAgICAgICAgJyAg
ICAgICAgaW50IG15VmFyaWFibGU7XG4nCiAgICAgICAgICAgICAnICAgIH07XG4nCiAgICAgICAg
ICAgICAnfScsCi0gICAgICAgICAgICAnJywKKyAgICAgICAgICAgICdDb2RlIGluc2lkZSBhIG5h
bWVzcGFjZSBzaG91bGQgbm90IGJlIGluZGVudGVkLiAgW3doaXRlc3BhY2UvaW5kZW50XSBbNF0n
LAogICAgICAgICAgICAgJ2Zvby5oJykKICAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9s
aW50KAogICAgICAgICAgICAgJ25hbWVzcGFjZSBPdXRlck5hbWVzcGFjZSB7XG4nCkBAIC0yODIy
LDcgKzI4MjIsNyBAQCBjbGFzcyBXZWJLaXRTdHlsZVRlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CiAg
ICAgICAgICAgICAnICAgICAgICB9O1xuJwogICAgICAgICAgICAgJyAgICB9O1xuJwogICAgICAg
ICAgICAgJ30nLAotICAgICAgICAgICAgJycsCisgICAgICAgICAgICBbJ0NvZGUgaW5zaWRlIGEg
bmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuICBbd2hpdGVzcGFjZS9pbmRlbnRdIFs0
XScsICduYW1lc3BhY2Ugc2hvdWxkIG5ldmVyIGJlIGluZGVudGVkLiAgW3doaXRlc3BhY2UvaW5k
ZW50XSBbNF0nXSwKICAgICAgICAgICAgICdmb28uaCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0X211
bHRpX2xpbmVfbGludCgKICAgICAgICAgICAgICduYW1lc3BhY2UgV2ViQ29yZSB7XG4nCkBAIC0y
ODMxLDE1ICsyODMxLDE0IEBAIGNsYXNzIFdlYktpdFN0eWxlVGVzdChDcHBTdHlsZVRlc3RCYXNl
KToKICAgICAgICAgICAgICcgICAgfTtcbicKICAgICAgICAgICAgICcjZW5kaWZcbicKICAgICAg
ICAgICAgICd9JywKLSAgICAgICAgICAgICcnLAorICAgICAgICAgICAgJ0NvZGUgaW5zaWRlIGEg
bmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuICBbd2hpdGVzcGFjZS9pbmRlbnRdIFs0
XScsCiAgICAgICAgICAgICAnZm9vLmgnKQogICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5l
X2xpbnQoCiAgICAgICAgICAgICAnbmFtZXNwYWNlIFdlYkNvcmUge1xuJwogICAgICAgICAgICAg
J2NsYXNzIERvY3VtZW50IHtcbicKICAgICAgICAgICAgICd9O1xuJwogICAgICAgICAgICAgJ30n
LAotICAgICAgICAgICAgJ0luIGEgaGVhZGVyLCBjb2RlIGluc2lkZSBhIG5hbWVzcGFjZSBzaG91
bGQgYmUgaW5kZW50ZWQuJwotICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvaW5kZW50XSBbNF0n
LAorICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAnZm9vLmgnKQogCiAgICAgICAgICMgNC4g
SW4gYW4gaW1wbGVtZW50YXRpb24gZmlsZSAoZmlsZXMgd2l0aCB0aGUgZXh0ZW5zaW9uIC5jcHAs
IC5jCkBAIC0yODU4LDE0ICsyODU3LDUyIEBAIGNsYXNzIFdlYktpdFN0eWxlVGVzdChDcHBTdHls
ZVRlc3RCYXNlKToKICAgICAgICAgICAgICduYW1lc3BhY2UgT3V0ZXJOYW1lc3BhY2Uge1xuJwog
ICAgICAgICAgICAgJ25hbWVzcGFjZSBJbm5lck5hbWVzcGFjZSB7XG4nCiAgICAgICAgICAgICAn
RG9jdW1lbnQ6OkZvbygpIHsgfVxuJwotICAgICAgICAgICAgJ30nLAotICAgICAgICAgICAgJycs
CisgICAgICAgICAgICAnICAgIHZvaWQqIHA7XG4nCisgICAgICAgICAgICAnfVxuJworICAgICAg
ICAgICAgJ31cbicsCisgICAgICAgICAgICAnQ29kZSBpbnNpZGUgYSBuYW1lc3BhY2Ugc2hvdWxk
IG5vdCBiZSBpbmRlbnRlZC4gIFt3aGl0ZXNwYWNlL2luZGVudF0gWzRdJywKICAgICAgICAgICAg
ICdmb28uY3BwJykKICAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAg
ICAgICAgJyAgICBuYW1lc3BhY2UgV2ViQ29yZSB7XG5cbicKLSAgICAgICAgICAgICdzdGFydDog
IC8vIFBvaW50bGVzcyBjb2RlLCBidXQgdGVzdHMgdGhlIGxhYmVsIHJlZ2V4cC5cbicKLSAgICAg
ICAgICAgICcgICAgZ290byBzdGFydDtcbicKLSAgICAgICAgICAgICcgICAgfScsCisgICAgICAg
ICAgICAnbmFtZXNwYWNlIE91dGVyTmFtZXNwYWNlIHtcbicKKyAgICAgICAgICAgICduYW1lc3Bh
Y2UgSW5uZXJOYW1lc3BhY2Uge1xuJworICAgICAgICAgICAgJ0RvY3VtZW50OjpGb28oKSB7IH1c
bicKKyAgICAgICAgICAgICd9XG4nCisgICAgICAgICAgICAnICAgIHZvaWQqIHA7XG4nCisgICAg
ICAgICAgICAnfVxuJywKKyAgICAgICAgICAgICdDb2RlIGluc2lkZSBhIG5hbWVzcGFjZSBzaG91
bGQgbm90IGJlIGluZGVudGVkLiAgW3doaXRlc3BhY2UvaW5kZW50XSBbNF0nLAorICAgICAgICAg
ICAgJ2Zvby5jcHAnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAg
ICAgICAgICAnbmFtZXNwYWNlIFdlYkNvcmUge1xuXG4nCisgICAgICAgICAgICAnICAgIGNvbnN0
IGNoYXIqIGZvbyA9ICJzdGFydDo7IlxuJworICAgICAgICAgICAgJyAgICAgICAgImRmc2ZzZnMi
O1xuJworICAgICAgICAgICAgJ31cbicsCisgICAgICAgICAgICAnQ29kZSBpbnNpZGUgYSBuYW1l
c3BhY2Ugc2hvdWxkIG5vdCBiZSBpbmRlbnRlZC4gIFt3aGl0ZXNwYWNlL2luZGVudF0gWzRdJywK
KyAgICAgICAgICAgICdmb28uY3BwJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9s
aW50KAorICAgICAgICAgICAgJ25hbWVzcGFjZSBXZWJDb3JlIHtcblxuJworICAgICAgICAgICAg
J2NvbnN0IGNoYXIqIGZvbyh2b2lkKiBhID0gIjsiLCAgLy8gO1xuJworICAgICAgICAgICAgJyAg
ICB2b2lkKiBiKTtcbicKKyAgICAgICAgICAgICcgICAgdm9pZCogcDtcbicKKyAgICAgICAgICAg
ICd9XG4nLAorICAgICAgICAgICAgJ0NvZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3Qg
YmUgaW5kZW50ZWQuICBbd2hpdGVzcGFjZS9pbmRlbnRdIFs0XScsCisgICAgICAgICAgICAnZm9v
LmNwcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAg
ICduYW1lc3BhY2UgV2ViQ29yZSB7XG5cbicKKyAgICAgICAgICAgICdjb25zdCBjaGFyKiBmb29b
XSA9IHtcbicKKyAgICAgICAgICAgICcgICAgInZvaWQqIGIpOyIsICAvLyA7XG4nCisgICAgICAg
ICAgICAnICAgICJhc2ZkZiIsXG4nCisgICAgICAgICAgICAnICAgIH1cbicKKyAgICAgICAgICAg
ICcgICAgdm9pZCogcDtcbicKKyAgICAgICAgICAgICd9XG4nLAorICAgICAgICAgICAgJ0NvZGUg
aW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuICBbd2hpdGVzcGFjZS9p
bmRlbnRdIFs0XScsCisgICAgICAgICAgICAnZm9vLmNwcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0
X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICduYW1lc3BhY2UgV2ViQ29yZSB7XG5cbicK
KyAgICAgICAgICAgICdjb25zdCBjaGFyKiBmb29bXSA9IHtcbicKKyAgICAgICAgICAgICcgICAg
InZvaWQqIGIpOyIsICAvLyB9XG4nCisgICAgICAgICAgICAnICAgICJhc2ZkZiIsXG4nCisgICAg
ICAgICAgICAnICAgIH1cbicKKyAgICAgICAgICAgICd9XG4nLAogICAgICAgICAgICAgJycsCiAg
ICAgICAgICAgICAnZm9vLmNwcCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGlu
dCgKQEAgLTI4NzUsMTQgKzI5MTIsMjggQEAgY2xhc3MgV2ViS2l0U3R5bGVUZXN0KENwcFN0eWxl
VGVzdEJhc2UpOgogICAgICAgICAgICAgJ3N0YXJ0OiAgLy8gaW5maW5pdGUgbG9vcHMgYXJlIGZ1
biFcbicKICAgICAgICAgICAgICcgICAgICAgIGdvdG8gc3RhcnQ7XG4nCiAgICAgICAgICAgICAn
ICAgIH0nLAotICAgICAgICAgICAgJycsCisgICAgICAgICAgICAnbmFtZXNwYWNlIHNob3VsZCBu
ZXZlciBiZSBpbmRlbnRlZC4gIFt3aGl0ZXNwYWNlL2luZGVudF0gWzRdJywKICAgICAgICAgICAg
ICdmb28uY3BwJykKICAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAogICAgICAg
ICAgICAgJ25hbWVzcGFjZSBXZWJDb3JlIHtcbicKICAgICAgICAgICAgICcgICAgRG9jdW1lbnQ6
OkZvbygpIHsgfVxuJwogICAgICAgICAgICAgJ30nLAotICAgICAgICAgICAgJ0luIGFuIGltcGxl
bWVudGF0aW9uIGZpbGUsIGNvZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5k
ZW50ZWQuJwotICAgICAgICAgICAgJyAgW3doaXRlc3BhY2UvaW5kZW50XSBbNF0nLAorICAgICAg
ICAgICAgJ0NvZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuICBb
d2hpdGVzcGFjZS9pbmRlbnRdIFs0XScsCisgICAgICAgICAgICAnZm9vLmNwcCcpCisgICAgICAg
IHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICduYW1lc3BhY2UgV2Vi
Q29yZSB7XG4nCisgICAgICAgICAgICAnI2RlZmluZSBhYmMoeCkgeDsgXFxcbicKKyAgICAgICAg
ICAgICcgICAgeFxuJworICAgICAgICAgICAgJ30nLAorICAgICAgICAgICAgJycsCisgICAgICAg
ICAgICAnZm9vLmNwcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAg
ICAgICAgICAgICduYW1lc3BhY2UgV2ViQ29yZSB7XG4nCisgICAgICAgICAgICAnI2RlZmluZSBh
YmMoeCkgeDsgXFxcbicKKyAgICAgICAgICAgICcgICAgeFxuJworICAgICAgICAgICAgJyAgICB2
b2lkKiB4OycKKyAgICAgICAgICAgICd9JywKKyAgICAgICAgICAgICdDb2RlIGluc2lkZSBhIG5h
bWVzcGFjZSBzaG91bGQgbm90IGJlIGluZGVudGVkLiAgW3doaXRlc3BhY2UvaW5kZW50XSBbNF0n
LAogICAgICAgICAgICAgJ2Zvby5jcHAnKQogCiAgICAgICAgICMgNS4gQSBjYXNlIGxhYmVsIHNo
b3VsZCBsaW5lIHVwIHdpdGggaXRzIHN3aXRjaCBzdGF0ZW1lbnQuIFRoZQpAQCAtMzI0OCw3ICsz
Mjk5LDcgQEAgY2xhc3MgV2ViS2l0U3R5bGVUZXN0KENwcFN0eWxlVGVzdEJhc2UpOgogICAgICAg
ICAgICAgJ25hbWVzcGFjZSBXZWJDb3JlIHtcbicKICAgICAgICAgICAgICcgICAgaW50IGZvbztc
bicKICAgICAgICAgICAgICd9O1xuJywKLSAgICAgICAgICAgICcnKQorICAgICAgICAgICAgJ0Nv
ZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuICBbd2hpdGVzcGFj
ZS9pbmRlbnRdIFs0XScpCiAgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKICAg
ICAgICAgICAgICdmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbicKICAgICAgICAgICAg
ICcgICAgRG9Tb21ldGhpbmcoKTtcbicK
</data>
<flag name="review"
          id="22514"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41291</attachid>
            <date>2009-10-16 09:43:33 -0700</date>
            <delta_ts>2009-10-16 11:15:11 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>patchFor30362-2.patch</filename>
            <type>text/plain</type>
            <size>11907</size>
            <attacher name="Carol Szabo">carol</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDQ5NTc0KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMDktMTAtMTQgIENhcm9sIFN6YWJvICA8Y2Fy
b2wuc3phYm9Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisKKyAgICAgICAgY2hlY2std2Via2l0LXN0eWxlIGlzIHdyb25nIGFib3V0IGluZGVudCBj
aGVja2luZyBpbiBuYW1lc3BhY2VzCisgICAgICAgIGluIGhlYWRlciBmaWxlcyBhbmQgYSBmZXcg
b3RoZXIgdGhpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMDM2MgorCisgICAgICAgIFRoZSBmZXcgb3RoZXIgdGhpbmdzIGluY2x1ZGU6CisgICAg
ICAgIGNoZWNrLXdlYmtpdC1zdHlsZSBkb2VzIG5vdCByZXF1aXJlIHNwYWNlcyBhcm91bmQgdGhl
IGVxdWFsIHNpZ24KKyAgICAgICAgaW5zaWRlICdpZicgc3RhdGVtZW50cyBhbmQgYXJvdW5kIGJp
bmFyeSBvcGVyYXRvcnMgdGhhdCB0YWtlIAorICAgICAgICBudW1lcmljIGxpdGVyYWxzLgorICAg
ICAgICBjaGVjay13ZWJraXQtc3R5bGUgcmVwb3J0cyBmYWxzZSBlcnJvcnMgZm9yIHRoZSAvIG9w
ZXJhdG9yCisgICAgICAgIHdoZW4gcGFydCBvZiBhIGZpbGVuYW1lIGluIHRoZSAjaW5jbHVkZSBk
aXJlY3RpdmUuCisKKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvY3BwX3N0eWxlLnB5OgorICAg
ICAgICBJbXByb3ZlZCBpbmRlbnRhdGlvbiBjaGVja2luZyBhbmQgc3BhY2UgY2hlY2tpbmcgYXJv
dW5kCisgICAgICAgIGJpbmFyeSBvcGVyYXRvcnMuIFdoaWxlIHRoZSBjaGVja3MgYXJlIHN0aWxs
IG5vdCBwZXJmZWN0LAorICAgICAgICB0aGV5IGFyZSBjbGVhcmx5IGJldHRlciB0aGFuIGJlZm9y
ZS4KKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvY3BwX3N0eWxlX3VuaXR0ZXN0LnB5OgorICAg
ICAgICBBZGRlZCB0ZXN0IGNhc2VzIGZvciB0aGUgbmV3bHkgc3VwcG9ydGVkIGNoZWNrcyBhbmQg
bW9kaWZpZWQgb2xkCisgICAgICAgIHRlc3QgY2FzZXMgdG8gbWF0Y2ggdGhlIG5ldyBndWlkZWxp
bmVzCisKIDIwMDktMTAtMTQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRz
L21vZHVsZXMvY3BwX3N0eWxlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMv
bW9kdWxlcy9jcHBfc3R5bGUucHkJKHJldmlzaW9uIDQ5NjgyKQorKysgV2ViS2l0VG9vbHMvU2Ny
aXB0cy9tb2R1bGVzL2NwcF9zdHlsZS5weQkod29ya2luZyBjb3B5KQpAQCAtMTUzMywxNiArMTUz
MywxNSBAQCBkZWYgY2hlY2tfc3BhY2luZyhmaWxlbmFtZSwgY2xlYW5fbGluZXMsCiAKICAgICAj
IERvbid0IHRyeSB0byBkbyBzcGFjaW5nIGNoZWNrcyBmb3Igb3BlcmF0b3IgbWV0aG9kcwogICAg
IGxpbmUgPSByZS5zdWIocidvcGVyYXRvcig9PXwhPXw8fDw8fDw9fD49fD4+fD4pXCgnLCAnb3Bl
cmF0b3JcKCcsIGxpbmUpCi0KLSAgICAjIFdlIGFsbG93IG5vLXNwYWNlcyBhcm91bmQgPSB3aXRo
aW4gYW4gaWY6ICJpZiAoIChhPUZvbygpKSA9PSAwICkiLgotICAgICMgT3RoZXJ3aXNlIG5vdC4g
IE5vdGUgd2Ugb25seSBjaGVjayBmb3Igbm9uLXNwYWNlcyBvbiAqYm90aCogc2lkZXM7Ci0gICAg
IyBzb21ldGltZXMgcGVvcGxlIHB1dCBub24tc3BhY2VzIG9uIG9uZSBzaWRlIHdoZW4gYWxpZ25p
bmcgPSdzIGFtb25nCi0gICAgIyBtYW55IGxpbmVzIChub3QgdGhhdCB0aGlzIGlzIGJlaGF2aW9y
IHRoYXQgSSBhcHByb3ZlIG9mLi4uKQotICAgIGlmIHNlYXJjaChyJ1tcdy5dPVtcdy5dJywgbGlu
ZSkgYW5kIG5vdCBzZWFyY2gocidcYihpZnx3aGlsZSkgJywgbGluZSk6CisgICAgIyBEb24ndCB0
cnkgdG8gZG8gc3BhY2luZyBjaGVja3MgZm9yICNpbmNsdWRlIHN0YXRlbWVudHMgYXQgbWluaW11
bSBpdAorICAgICMgbWVzc2VzIHVwIGNoZWNrcyBmb3Igc3BhY2luZyBhcm91bmQgLworICAgIGlm
IG1hdGNoKHInXHMqI1xzKmluY2x1ZGUnLCBsaW5lKToKKyAgICAgICAgcmV0dXJuCisgICAgaWYg
c2VhcmNoKHInW1x3Ll09W1x3Ll0nLCBsaW5lKToKICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxp
bmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9vcGVyYXRvcnMnLCA0LAogICAgICAgICAgICAgICAnTWlz
c2luZyBzcGFjZXMgYXJvdW5kID0nKQogCi0gICAgIyBGSVhNRTogSXQncyBub3Qgb2sgdG8gaGF2
ZSBzcGFjZXMgYXJvdW5kIGJpbmFyeSBvcGVyYXRvcnMgbGlrZSArIC0gKiAvIC4KKyAgICAjIEZJ
WE1FOiBJdCdzIG5vdCBvayB0byBoYXZlIHNwYWNlcyBhcm91bmQgYmluYXJ5IG9wZXJhdG9ycyBs
aWtlIC4KIAogICAgICMgWW91IHNob3VsZCBhbHdheXMgaGF2ZSB3aGl0ZXNwYWNlIGFyb3VuZCBi
aW5hcnkgb3BlcmF0b3JzLgogICAgICMgQWxhcywgd2UgY2FuJ3QgdGVzdCA8IG9yID4gYmVjYXVz
ZSB0aGV5J3JlIGxlZ2l0aW1hdGVseSB1c2VkIHNhbnMgc3BhY2VzCkBAIC0xNTU5LDEyICsxNTU4
LDYgQEAgZGVmIGNoZWNrX3NwYWNpbmcoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLAogICAgIGlmIG1h
dGNoZWQ6CiAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3doaXRlc3BhY2Uv
b3BlcmF0b3JzJywgMywKICAgICAgICAgICAgICAgJ01pc3Npbmcgc3BhY2VzIGFyb3VuZCAlcycg
JSBtYXRjaGVkLmdyb3VwKDEpKQotICAgICMgV2UgYWxsb3cgbm8tc3BhY2VzIGFyb3VuZCA8PCBh
bmQgPj4gd2hlbiB1c2VkIGxpa2UgdGhpczogMTA8PDIwLCBidXQKLSAgICAjIG5vdCBvdGhlcndp
c2UgKHBhcnRpY3VsYXJseSwgbm90IHdoZW4gdXNlZCBhcyBzdHJlYW1zKQotICAgIG1hdGNoZWQg
PSBzZWFyY2gocidbXjAtOVxzXSg8PHw+PilbXjAtOVxzPV0nLCBsaW5lKQotICAgIGlmIG1hdGNo
ZWQ6Ci0gICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ3doaXRlc3BhY2Uvb3Bl
cmF0b3JzJywgMywKLSAgICAgICAgICAgICAgJ01pc3Npbmcgc3BhY2VzIGFyb3VuZCAlcycgJSBt
YXRjaGVkLmdyb3VwKDEpKQogCiAgICAgIyBUaGVyZSBzaG91bGRuJ3QgYmUgc3BhY2UgYXJvdW5k
IHVuYXJ5IG9wZXJhdG9ycwogICAgIG1hdGNoZWQgPSBzZWFyY2gocicoIVxzfH5cc3xbXHNdLS1b
XHM7XXxbXHNdXCtcK1tccztdKScsIGxpbmUpCkBAIC0xNjk5LDI5ICsxNjkyLDMyIEBAIGRlZiBj
aGVja19uYW1lc3BhY2VfaW5kZW50YXRpb24oZmlsZW5hbWUKICAgICBpZiBub3QgbmFtZXNwYWNl
X21hdGNoOgogICAgICAgICByZXR1cm4KIAotICAgIG5hbWVzcGFjZV9pbmRlbnRhdGlvbiA9IG5h
bWVzcGFjZV9tYXRjaC5ncm91cCgnbmFtZXNwYWNlX2luZGVudGF0aW9uJykKLQorICAgIGN1cnJl
bnRfaW5kZW50YXRpb25fbGV2ZWwgPSBsZW4obmFtZXNwYWNlX21hdGNoLmdyb3VwKCduYW1lc3Bh
Y2VfaW5kZW50YXRpb24nKSkKKyAgICBpZiBjdXJyZW50X2luZGVudGF0aW9uX2xldmVsID4gMDoK
KyAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS9pbmRlbnQn
LCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAnbmFtZXNwYWNlIHNob3VsZCBuZXZlciBi
ZSBpbmRlbnRlZC4nKQorICAgICAgICByZXR1cm4KKyAgICBsb29raW5nX2Zvcl9zZW1pY29sb24g
PSBGYWxzZTsKICAgICBsaW5lX29mZnNldCA9IDAKLQotICAgIGZvciBjdXJyZW50X2xpbmUgaW4g
Y2xlYW5fbGluZXMucmF3X2xpbmVzW2xpbmVfbnVtYmVyICsgMTpdOgorICAgIGluX3ByZXByb2Nl
c3Nvcl9kaXJlY3RpdmUgPSBGYWxzZTsKKyAgICBmb3IgY3VycmVudF9saW5lIGluIGNsZWFuX2xp
bmVzLmVsaWRlZFtsaW5lX251bWJlciArIDE6XToKICAgICAgICAgbGluZV9vZmZzZXQgKz0gMQot
Ci0gICAgICAgICMgU2tpcCBub3Qgb25seSBlbXB0eSBsaW5lcyBidXQgYWxzbyB0aG9zZSB3aXRo
IChnb3RvKSBsYWJlbHMuCi0gICAgICAgICMgVGhlIGdvdG8gbGFiZWwgcmVnZXhwIGFjY2VwdHMg
c3BhY2VzIG9yIHRoZSBiZWdpbm5pbmcgb2YgYQotICAgICAgICAjIGNvbW1lbnQgKGlmIGFueXRo
aW5nKSBhZnRlciB0aGUgaW5pdGlhbCBjb2xvbi4KLSAgICAgICAgaWYgY3VycmVudF9saW5lLnN0
cmlwKCkgPT0gJycgb3IgbWF0Y2gocidcdytccyo6KFtcc1wvXS4qKT8kJywgY3VycmVudF9saW5l
KToKKyAgICAgICAgaWYgbm90IGN1cnJlbnRfbGluZS5zdHJpcCgpOgogICAgICAgICAgICAgY29u
dGludWUKLQotICAgICAgICByZW1haW5pbmdfbGluZSA9IGN1cnJlbnRfbGluZVtsZW4obmFtZXNw
YWNlX2luZGVudGF0aW9uKTpdCi0gICAgICAgIGlmIG5vdCBtYXRjaChyJ1xTJywgcmVtYWluaW5n
X2xpbmUpOgotICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyICsgbGluZV9v
ZmZzZXQsICd3aGl0ZXNwYWNlL2luZGVudCcsIDQsCi0gICAgICAgICAgICAgICAgICAnQ29kZSBp
bnNpZGUgYSBuYW1lc3BhY2Ugc2hvdWxkIG5vdCBiZSBpbmRlbnRlZC4nKQotCi0gICAgICAgICMg
SnVzdCBjaGVjayB0aGUgZmlyc3Qgbm9uLWVtcHR5IGxpbmUgaW4gYW55IGNhc2UsIGJlY2F1c2UK
LSAgICAgICAgIyBvdGhlcndpc2Ugd2Ugd291bGQgbmVlZCB0byBjb3VudCBvcGVuZWQgYW5kIGNs
b3NlZCBicmFjZXMsCi0gICAgICAgICMgd2hpY2ggaXMgb2J2aW91c2x5IGEgbG90IG1vcmUgY29t
cGxpY2F0ZWQuCi0gICAgICAgIGJyZWFrCi0KKyAgICAgICAgaWYgbm90IGN1cnJlbnRfaW5kZW50
YXRpb25fbGV2ZWw6CisgICAgICAgICAgICBpZiBub3QgKGluX3ByZXByb2Nlc3Nvcl9kaXJlY3Rp
dmUgb3IgbG9va2luZ19mb3Jfc2VtaWNvbG9uKToKKyAgICAgICAgICAgICAgICBpZiBub3QgbWF0
Y2gocidcUycsIGN1cnJlbnRfbGluZSk6CisgICAgICAgICAgICAgICAgICAgIGVycm9yKGZpbGVu
YW1lLCBsaW5lX251bWJlciArIGxpbmVfb2Zmc2V0LCAnd2hpdGVzcGFjZS9pbmRlbnQnLCA0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29kZSBpbnNpZGUgYSBuYW1lc3BhY2Ugc2hvdWxk
IG5vdCBiZSBpbmRlbnRlZC4nKQorICAgICAgICAgICAgaWYgaW5fcHJlcHJvY2Vzc29yX2RpcmVj
dGl2ZSBvciAoY3VycmVudF9saW5lLnN0cmlwKClbMF0gPT0gJyMnKTogIyBUaGlzIHRha2VzIGNh
cmUgb2YgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBzeW50YXguCisgICAgICAgICAgICAgICAgaW5f
cHJlcHJvY2Vzc29yX2RpcmVjdGl2ZSA9IGN1cnJlbnRfbGluZVstMV0gPT0gJ1xcJworICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb29raW5nX2Zvcl9zZW1pY29sb24gPSAoKGN1
cnJlbnRfbGluZS5maW5kKCc7JykgPT0gLTEpIGFuZCAoY3VycmVudF9saW5lLnN0cmlwKClbLTFd
ICE9ICd9JykpIG9yIChjdXJyZW50X2xpbmVbLTFdID09ICdcXCcpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBsb29raW5nX2Zvcl9zZW1pY29sb24gPSBGYWxzZTsgIyBJZiB3ZSBoYXZlIGEg
YnJhY2Ugd2UgbWF5IG5vdCBuZWVkIGEgc2VtaWNvbG9uLgorICAgICAgICBjdXJyZW50X2luZGVu
dGF0aW9uX2xldmVsICs9IGN1cnJlbnRfbGluZS5jb3VudCgneycpIC0gY3VycmVudF9saW5lLmNv
dW50KCd9JykKKyAgICAgICAgaWYgY3VycmVudF9pbmRlbnRhdGlvbl9sZXZlbCA8IDA6CisgICAg
ICAgICAgICBicmVhazsKIAogZGVmIGNoZWNrX3VzaW5nX3N0ZChmaWxlbmFtZSwgY2xlYW5fbGlu
ZXMsIGxpbmVfbnVtYmVyLCBlcnJvcik6CiAgICAgIiIiTG9va3MgZm9yICd1c2luZyBzdGQ6OmZv
bzsnIHN0YXRlbWVudHMgd2hpY2ggc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggJ3VzaW5nIG5hbWVz
cGFjZSBzdGQ7Jy4KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jcHBfc3R5bGVf
dW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2Nw
cF9zdHlsZV91bml0dGVzdC5weQkocmV2aXNpb24gNDk2ODIpCisrKyBXZWJLaXRUb29scy9TY3Jp
cHRzL21vZHVsZXMvY3BwX3N0eWxlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMjY1
LDYgKzEyNjUsMTIgQEAgY2xhc3MgQ3BwU3R5bGVUZXN0KENwcFN0eWxlVGVzdEJhc2UpOgogICAg
ICAgICBzZWxmLmFzc2VydF9saW50KCdhPEZvbyY+IHQgPDw9ICZiIHwgJmM7JywgJycpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2E8Rm9vKj4gdCA8PD0gJmIgJiAmYzsgIC8vIFRlc3QnLCAn
JykKICAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnYTxGb28qPiB0IDw8PSAqYiAvICZjOyAgLy8g
VGVzdCcsICcnKQorICAgICAgICBzZWxmLmFzc2VydF9saW50KCdpZiAoYT1iID09IDEpJywgJ01p
c3Npbmcgc3BhY2VzIGFyb3VuZCA9ICBbd2hpdGVzcGFjZS9vcGVyYXRvcnNdIFs0XScpCisgICAg
ICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2EgPSAxPDwyMCcsICdNaXNzaW5nIHNwYWNlcyBhcm91bmQg
PDwgIFt3aGl0ZXNwYWNlL29wZXJhdG9yc10gWzNdJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbGlu
dCgnaWYgKGEgPSBiID09IDEpJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2EgPSAx
IDw8IDIwJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgnI2luY2x1
ZGUgImNvbmZpZy5oIlxuI2luY2x1ZGUgPHN5cy9pby5oPlxuJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICcnKQogCiAgICAgZGVmIHRlc3Rfc3BhY2luZ19iZWZvcmVfbGFz
dF9zZW1pY29sb24oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2NhbGxfZnVuY3Rp
b24oKSA7JywKQEAgLTI4MTMsNyArMjgxOSw3IEBAIGNsYXNzIFdlYktpdFN0eWxlVGVzdChDcHBT
dHlsZVRlc3RCYXNlKToKICAgICAgICAgICAgICcgICAgaW50IG15VmFyaWFibGU7XG4nCiAgICAg
ICAgICAgICAnfTtcbicKICAgICAgICAgICAgICd9JywKLSAgICAgICAgICAgICcnLAorICAgICAg
ICAgICAgJ0NvZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuICBb
d2hpdGVzcGFjZS9pbmRlbnRdIFs0XScsCiAgICAgICAgICAgICAnZm9vLmgnKQogICAgICAgICBz
ZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCiAgICAgICAgICAgICAnbmFtZXNwYWNlIE91dGVy
TmFtZXNwYWNlIHtcbicKQEAgLTI4MjIsNyArMjgyOCw3IEBAIGNsYXNzIFdlYktpdFN0eWxlVGVz
dChDcHBTdHlsZVRlc3RCYXNlKToKICAgICAgICAgICAgICd9O1xuJwogICAgICAgICAgICAgJ307
XG4nCiAgICAgICAgICAgICAnfScsCi0gICAgICAgICAgICAnJywKKyAgICAgICAgICAgIFsnQ29k
ZSBpbnNpZGUgYSBuYW1lc3BhY2Ugc2hvdWxkIG5vdCBiZSBpbmRlbnRlZC4gIFt3aGl0ZXNwYWNl
L2luZGVudF0gWzRdJywgJ25hbWVzcGFjZSBzaG91bGQgbmV2ZXIgYmUgaW5kZW50ZWQuICBbd2hp
dGVzcGFjZS9pbmRlbnRdIFs0XSddLAogICAgICAgICAgICAgJ2Zvby5oJykKICAgICAgICAgc2Vs
Zi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAogICAgICAgICAgICAgJ25hbWVzcGFjZSBXZWJDb3Jl
IHtcbicKQEAgLTI4MzEsNyArMjgzNyw3IEBAIGNsYXNzIFdlYktpdFN0eWxlVGVzdChDcHBTdHls
ZVRlc3RCYXNlKToKICAgICAgICAgICAgICd9O1xuJwogICAgICAgICAgICAgJyNlbmRpZlxuJwog
ICAgICAgICAgICAgJ30nLAotICAgICAgICAgICAgJycsCisgICAgICAgICAgICAnQ29kZSBpbnNp
ZGUgYSBuYW1lc3BhY2Ugc2hvdWxkIG5vdCBiZSBpbmRlbnRlZC4gIFt3aGl0ZXNwYWNlL2luZGVu
dF0gWzRdJywKICAgICAgICAgICAgICdmb28uaCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0X211bHRp
X2xpbmVfbGludCgKICAgICAgICAgICAgICduYW1lc3BhY2UgV2ViQ29yZSB7XG4nCkBAIC0yODU3
LDE0ICsyODYzLDUyIEBAIGNsYXNzIFdlYktpdFN0eWxlVGVzdChDcHBTdHlsZVRlc3RCYXNlKToK
ICAgICAgICAgICAgICduYW1lc3BhY2UgT3V0ZXJOYW1lc3BhY2Uge1xuJwogICAgICAgICAgICAg
J25hbWVzcGFjZSBJbm5lck5hbWVzcGFjZSB7XG4nCiAgICAgICAgICAgICAnRG9jdW1lbnQ6OkZv
bygpIHsgfVxuJwotICAgICAgICAgICAgJ30nLAotICAgICAgICAgICAgJycsCisgICAgICAgICAg
ICAnICAgIHZvaWQqIHA7XG4nCisgICAgICAgICAgICAnfVxuJworICAgICAgICAgICAgJ31cbics
CisgICAgICAgICAgICAnQ29kZSBpbnNpZGUgYSBuYW1lc3BhY2Ugc2hvdWxkIG5vdCBiZSBpbmRl
bnRlZC4gIFt3aGl0ZXNwYWNlL2luZGVudF0gWzRdJywKICAgICAgICAgICAgICdmb28uY3BwJykK
ICAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAgICAgJyAgICBu
YW1lc3BhY2UgV2ViQ29yZSB7XG5cbicKLSAgICAgICAgICAgICdzdGFydDogIC8vIFBvaW50bGVz
cyBjb2RlLCBidXQgdGVzdHMgdGhlIGxhYmVsIHJlZ2V4cC5cbicKLSAgICAgICAgICAgICcgICAg
Z290byBzdGFydDtcbicKLSAgICAgICAgICAgICcgICAgfScsCisgICAgICAgICAgICAnbmFtZXNw
YWNlIE91dGVyTmFtZXNwYWNlIHtcbicKKyAgICAgICAgICAgICduYW1lc3BhY2UgSW5uZXJOYW1l
c3BhY2Uge1xuJworICAgICAgICAgICAgJ0RvY3VtZW50OjpGb28oKSB7IH1cbicKKyAgICAgICAg
ICAgICd9XG4nCisgICAgICAgICAgICAnICAgIHZvaWQqIHA7XG4nCisgICAgICAgICAgICAnfVxu
JywKKyAgICAgICAgICAgICdDb2RlIGluc2lkZSBhIG5hbWVzcGFjZSBzaG91bGQgbm90IGJlIGlu
ZGVudGVkLiAgW3doaXRlc3BhY2UvaW5kZW50XSBbNF0nLAorICAgICAgICAgICAgJ2Zvby5jcHAn
KQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnbmFt
ZXNwYWNlIFdlYkNvcmUge1xuXG4nCisgICAgICAgICAgICAnICAgIGNvbnN0IGNoYXIqIGZvbyA9
ICJzdGFydDo7IlxuJworICAgICAgICAgICAgJyAgICAgICAgImRmc2ZzZnMiO1xuJworICAgICAg
ICAgICAgJ31cbicsCisgICAgICAgICAgICAnQ29kZSBpbnNpZGUgYSBuYW1lc3BhY2Ugc2hvdWxk
IG5vdCBiZSBpbmRlbnRlZC4gIFt3aGl0ZXNwYWNlL2luZGVudF0gWzRdJywKKyAgICAgICAgICAg
ICdmb28uY3BwJykKKyAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAorICAgICAg
ICAgICAgJ25hbWVzcGFjZSBXZWJDb3JlIHtcblxuJworICAgICAgICAgICAgJ2NvbnN0IGNoYXIq
IGZvbyh2b2lkKiBhID0gIjsiLCAgLy8gO1xuJworICAgICAgICAgICAgJyAgICB2b2lkKiBiKTtc
bicKKyAgICAgICAgICAgICcgICAgdm9pZCogcDtcbicKKyAgICAgICAgICAgICd9XG4nLAorICAg
ICAgICAgICAgJ0NvZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQu
ICBbd2hpdGVzcGFjZS9pbmRlbnRdIFs0XScsCisgICAgICAgICAgICAnZm9vLmNwcCcpCisgICAg
ICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKKyAgICAgICAgICAgICduYW1lc3BhY2Ug
V2ViQ29yZSB7XG5cbicKKyAgICAgICAgICAgICdjb25zdCBjaGFyKiBmb29bXSA9IHtcbicKKyAg
ICAgICAgICAgICcgICAgInZvaWQqIGIpOyIsICAvLyA7XG4nCisgICAgICAgICAgICAnICAgICJh
c2ZkZiIsXG4nCisgICAgICAgICAgICAnICAgIH1cbicKKyAgICAgICAgICAgICcgICAgdm9pZCog
cDtcbicKKyAgICAgICAgICAgICd9XG4nLAorICAgICAgICAgICAgJ0NvZGUgaW5zaWRlIGEgbmFt
ZXNwYWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuICBbd2hpdGVzcGFjZS9pbmRlbnRdIFs0XScs
CisgICAgICAgICAgICAnZm9vLmNwcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVf
bGludCgKKyAgICAgICAgICAgICduYW1lc3BhY2UgV2ViQ29yZSB7XG5cbicKKyAgICAgICAgICAg
ICdjb25zdCBjaGFyKiBmb29bXSA9IHtcbicKKyAgICAgICAgICAgICcgICAgInZvaWQqIGIpOyIs
ICAvLyB9XG4nCisgICAgICAgICAgICAnICAgICJhc2ZkZiIsXG4nCisgICAgICAgICAgICAnICAg
IH1cbicKKyAgICAgICAgICAgICd9XG4nLAogICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAn
Zm9vLmNwcCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKQEAgLTI4NzQs
NyArMjkxOCw3IEBAIGNsYXNzIFdlYktpdFN0eWxlVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAg
ICAgICAgICAgICdzdGFydDogIC8vIGluZmluaXRlIGxvb3BzIGFyZSBmdW4hXG4nCiAgICAgICAg
ICAgICAnICAgICAgICBnb3RvIHN0YXJ0O1xuJwogICAgICAgICAgICAgJyAgICB9JywKLSAgICAg
ICAgICAgICcnLAorICAgICAgICAgICAgJ25hbWVzcGFjZSBzaG91bGQgbmV2ZXIgYmUgaW5kZW50
ZWQuICBbd2hpdGVzcGFjZS9pbmRlbnRdIFs0XScsCiAgICAgICAgICAgICAnZm9vLmNwcCcpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKICAgICAgICAgICAgICduYW1lc3Bh
Y2UgV2ViQ29yZSB7XG4nCkBAIC0yODgzLDYgKzI5MjcsMjEgQEAgY2xhc3MgV2ViS2l0U3R5bGVU
ZXN0KENwcFN0eWxlVGVzdEJhc2UpOgogICAgICAgICAgICAgJ0NvZGUgaW5zaWRlIGEgbmFtZXNw
YWNlIHNob3VsZCBub3QgYmUgaW5kZW50ZWQuJwogICAgICAgICAgICAgJyAgW3doaXRlc3BhY2Uv
aW5kZW50XSBbNF0nLAogICAgICAgICAgICAgJ2Zvby5jcHAnKQorICAgICAgICBzZWxmLmFzc2Vy
dF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAnbmFtZXNwYWNlIFdlYkNvcmUge1xuJwor
ICAgICAgICAgICAgJyNkZWZpbmUgYWJjKHgpIHg7IFxcXG4nCisgICAgICAgICAgICAnICAgIHhc
bicKKyAgICAgICAgICAgICd9JywKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgJ2Zvby5j
cHAnKQorICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCisgICAgICAgICAgICAn
bmFtZXNwYWNlIFdlYkNvcmUge1xuJworICAgICAgICAgICAgJyNkZWZpbmUgYWJjKHgpIHg7IFxc
XG4nCisgICAgICAgICAgICAnICAgIHhcbicKKyAgICAgICAgICAgICcgICAgdm9pZCogeDsnCisg
ICAgICAgICAgICAnfScsCisgICAgICAgICAgICAnQ29kZSBpbnNpZGUgYSBuYW1lc3BhY2Ugc2hv
dWxkIG5vdCBiZSBpbmRlbnRlZC4gIFt3aGl0ZXNwYWNlL2luZGVudF0gWzRdJywKKyAgICAgICAg
ICAgICdmb28uY3BwJykKIAogICAgICAgICAjIDUuIEEgY2FzZSBsYWJlbCBzaG91bGQgbGluZSB1
cCB3aXRoIGl0cyBzd2l0Y2ggc3RhdGVtZW50LiBUaGUKICAgICAgICAgIyAgICBjYXNlIHN0YXRl
bWVudCBpcyBpbmRlbnRlZC4KQEAgLTMyNDcsNyArMzMwNiw3IEBAIGNsYXNzIFdlYktpdFN0eWxl
VGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAgICAgICAgICAgICduYW1lc3BhY2UgV2ViQ29yZSB7
XG4nCiAgICAgICAgICAgICAnaW50IGZvbztcbicKICAgICAgICAgICAgICd9O1xuJywKLSAgICAg
ICAgICAgICcnKQorICAgICAgICAgICAgJ0NvZGUgaW5zaWRlIGEgbmFtZXNwYWNlIHNob3VsZCBu
b3QgYmUgaW5kZW50ZWQuICBbd2hpdGVzcGFjZS9pbmRlbnRdIFs0XScpCiAgICAgICAgIHNlbGYu
YXNzZXJ0X211bHRpX2xpbmVfbGludCgKICAgICAgICAgICAgICdmb3IgKGludCBpID0gMDsgaSA8
IDEwOyBpKyspIHtcbicKICAgICAgICAgICAgICcgICAgRG9Tb21ldGhpbmcoKTtcbicK
</data>
<flag name="review"
          id="22645"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="22661"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>