<?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>32538</bug_id>
          
          <creation_ts>2009-12-14 20:43:48 -0800</creation_ts>
          <short_desc>[check-webkit-style] Add support for TAB check against text files</short_desc>
          <delta_ts>2009-12-16 21:31:47 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>171671</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-14 20:43:48 -0800</bug_when>
    <thetext>I sometimes put TAB characters into ChangeLog or *.js files mistakenly.  It would be good if check-webkit-style detected them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171672</commentid>
    <comment_count>1</comment_count>
      <attachid>44837</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-14 20:46:31 -0800</bug_when>
    <thetext>Created attachment 44837
Proposed patch

Wow, this is my first python code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171674</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-14 21:00:27 -0800</bug_when>
    <thetext>Tabs are disallowed in all files, unless the files are marked with the svn &quot;allow-tabs&quot; property.  I think this is definitely better than what we have now, but is an incomplete solution. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171685</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-14 21:12:40 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44837 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171695</commentid>
    <comment_count>4</comment_count>
      <attachid>44837</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2009-12-14 21:23:25 -0800</bug_when>
    <thetext>Comment on attachment 44837
Proposed patch

Though I&apos;m not a reviewer, I&apos;d like to put some comments. First of all, thanks for doing this. Actually, I wanted this feature long time...

As Eric mentioned, we may want to consider allow-tabs property. Maybe we can just use svn proplist for svn repositories, but are there any good ways to see the properties from git repository? If we cannot find a good solution, we may be able start from checking just ChangeLog, where I think most tab mistakes are done.

PEP8 says that we should put 2 blank lines between top level definitions. Though I don&apos;t know WebKit is using this style (I bet there&apos;re no official rule for python), I think it would be good to keep text_style.py consistent with cpp_style.py.

http://www.python.org/dev/peps/pep-0008/

&gt; +        elif &quot;ChangeLog&quot; in filename or file_extension in [&apos;.html&apos;, &apos;.js&apos;, &apos;.py&apos;, &apos;.txt&apos;]:

We may want to add &apos;.pm&apos;, &apos;.php&apos;, and &apos;WebKitTools/Scripts/*&apos; ?

&gt; +            line_numbers = set();
&gt; +            for line in diff.lines:
&gt; +                # When deleted line is not set, it means that
&gt; +                # the line is newly added.
&gt; +                if not line[0]:
&gt; +                    line_numbers.add(line[1])
&gt; +
&gt; +            def error_for_patch(filename, line_number, message):
&gt; +                if line_number in line_numbers:
&gt; +                    text_style.error(filename, line_number, message)
&gt; +
&gt; +            text_style.process_file(filename, error=error_for_patch)

We can factor out this code and the similar code for cpp_style? As for the place of initialization of line_numbers, David suggested me that we should delay the initialization so that we don&apos;t need to initialize line_numbers if there are no errors. By the way, I think it would be better to set None instead of set() as the initial value of line_numbers.

&gt; +def error_count():
&gt; +    &quot;&quot;&quot;Returns the global caount of erported errors.&quot;&quot;&quot;

typo: &quot;global count of reported errors&quot;?

&gt; -- 
&gt; 1.6.3.3

I&apos;m not sure what&apos;s this :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171730</commentid>
    <comment_count>5</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-12-14 23:00:38 -0800</bug_when>
    <thetext>From what I understand TABs are allowed in js files in the test directory. (Although there tends to be a style, the lack of a style (such as allowing TABs) is touted as further testing the js engine.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171747</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-15 00:42:00 -0800</bug_when>
    <thetext>A couple high-level comments:

(1) The proposed text_style.process_file function has a lot of overlap with cpp_style.process_file.  It might be worth creating a check_webkit_style.py module and moving the cpp_style.process_file to that location.  We could do the branching between file types there.  This will also allow us to keep additional logic out of the check-webkit-style command-line wrapper.  Since the text-file specific logic is minimal, for now you could keep it in check_webkit_style.py. 

(2) In general, I think we should aim to reduce the amount of logic in the check-webkit-style file rather than add more.  We will have better test coverage if we keep check-webkit-style as close to a command-line wrapper as possible.  Note, for example, that the process_patch function which is getting expanded is not currently covered by the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171907</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-15 10:06:36 -0800</bug_when>
    <thetext>(In reply to comment #6)

&gt; It might be worth creating a check_webkit_style.py
&gt; module and moving the cpp_style.process_file to that location.
&gt; ...
&gt; Since the text-file specific logic is minimal, for now you 
&gt; could keep it in check_webkit_style.py.

On second thought, style.py would be a better, simpler name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171935</commentid>
    <comment_count>8</comment_count>
      <attachid>44837</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-12-15 11:19:39 -0800</bug_when>
    <thetext>Comment on attachment 44837
Proposed patch

text_style.py should have unit test(s).

r- for the missing unit tests. (Plus there are a number of other comments in this bug that should be considered when doing a second patch.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172175</commentid>
    <comment_count>9</comment_count>
      <attachid>44944</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-15 22:53:21 -0800</bug_when>
    <thetext>Created attachment 44944
Proposed patch (rev.2)

Thank you for the comments. I followed them, and rewrote the code almost entirely.

I understand we should move more code from cpp_style.py to the common module. But I didn&apos;t it for now to avoid behavior change and refactoring at the same time.


&gt; &gt; -- 
&gt; &gt; 1.6.3.3
&gt;
&gt; I&apos;m not sure what&apos;s this :)

Please ignore it. It was a footer produced by &quot;git format-patch&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172177</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-15 22:57:51 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44944 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172178</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-15 23:18:44 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=44944) [details]
&gt; Proposed patch (rev.2)
&gt; 
&gt; Thank you for the comments. I followed them, and rewrote the code almost
&gt; entirely.

Kent, I just added you to the CC for these two reports:

https://bugs.webkit.org/show_bug.cgi?id=32487
https://bugs.webkit.org/show_bug.cgi?id=32592

I should have thought to do that sooner since the first one will affect this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172217</commentid>
    <comment_count>12</comment_count>
      <attachid>44956</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-16 01:36:18 -0800</bug_when>
    <thetext>Created attachment 44956
Proposed patch (rev.3)

* Resolve conflicts with r52189</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172220</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-16 01:41:23 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44956 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172331</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-16 09:29:00 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=44956) [details]
&gt; Proposed patch (rev.3)

Looking a lot better, thanks!

The check-webkit-style doc string should probably be updated:

&gt; &quot;&quot;&quot;Does WebKit-lint on C/C++ files.

I think the code will be simpler if this just takes a filename:

&gt; +def can_handle(filename, extension):

The calling code won&apos;t have to split out the file extension (I count this being done four times in various calling code):

&gt; file_extension = os.path.splitext(filename)[1]

The unit tests will be simpler:

&gt; +        self.assert_(text_style.can_handle(&apos;foo.css&apos;, &apos;.css&apos;))
&gt; +        self.assert_(text_style.can_handle(&apos;foo.html&apos;, &apos;.html&apos;))
&gt; +        self.assert_(text_style.can_handle(&apos;foo.idl&apos;, &apos;.idl&apos;))

Also, the second parameter is redundant data and introduces the possible error case of the given extension not matching the true extension.

&gt; +++ b/WebKitTools/Scripts/modules/style.py
&gt; @@ -0,0 +1,101 @@
&gt; +# Copyright (C) 2009 Google Inc. All rights reserved.
&gt; +#

Does Apple copyright need to be added above and in other new files?  I&apos;m not sure.

&gt; +    It reports erros to the given error function.

errors

&gt; +&quot;&quot;&quot;Frontend of some style-checker modules.&quot;&quot;&quot;

Front end

&gt; +    if cpp_style.can_handle(filename, file_extension) or filename == &apos;-&apos;:
&gt; +        cpp_style.process_file(filename)
&gt; +    elif text_style.can_handle(filename, file_extension):
&gt; +        text_style.process_file(filename)

It might be worth adding in the doc string of the *.process_file methods that they still process the file even if passed a filename they can&apos;t &quot;handle&quot;.  That way future developers don&apos;t add parameter checking code at the top of the *.process_file implementations that call can_handle and prematurely exit if they don&apos;t.

Some might argue that process_file should prematurely exit.  But for testing purposes, etc, I do think process_file should attempt to process all files as you are currently doing.

&gt; +def process_file_data(filename, lines, error):

&gt; +        if &apos;\t&apos; in line:
&gt; +            error(filename, line_number, &apos;whitespace/tab&apos;, 5, &apos;Line contains tab character.&apos;)

This is nearly identical to the whitespace/tab checking code at the beginning of cpp_style.check_style:

&gt;    if line.find(&apos;\t&apos;) != -1:
&gt;        error(filename, line_number, &apos;whitespace/tab&apos;, 1,
&gt;              &apos;Tab found; better to use spaces&apos;)

It might be good to define a check_whitespace_tab() method in cpp_style and have text_style call that one.

I anticipate that there will be a lot of overlap between the style-checking rules of various file types.  So it would be good if we can begin to establish a pattern of sharing the code for those checks where possible.

&gt; +        # Do not suuprot for filename=&apos;-. cpp_style handles it.

Not sure what this is trying to say -- also typo in &quot;support&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172345</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-16 09:48:31 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=44956) [details]
&gt; Proposed patch (rev.3)

Last comment:

&gt; +    try:
&gt; +        # Do not suuprot for filename=&apos;-. cpp_style handles it.
&gt; +        lines = codecs.open(filename, &apos;r&apos;, &apos;utf8&apos;, &apos;replace&apos;).read().split(&apos;\n&apos;)
&gt; +    except IOError:
&gt; +        sys.stderr.write(&quot;Skipping input &apos;%s&apos;: Can&apos;t open for reading\n&quot; % filename)
&gt; +        return

This chunk of code is nearly identical to the corresponding chunk of code in cpp_style.process_file (except cpp_style&apos;s also has the filename == &apos;-&apos; logic).  For maintainability, it looks like it would be better to refactor so both files use a common &quot;get_lines&quot; function.  Perhaps that new function could accept filename &quot;-&quot;, but in text_style.py you could check for &quot;-&quot; before calling get_lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172446</commentid>
    <comment_count>16</comment_count>
      <attachid>44956</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-12-16 11:57:00 -0800</bug_when>
    <thetext>Comment on attachment 44956
Proposed patch (rev.3)

r+ *if* text_style.can_handle is changed to return false for files in the LayoutTests directory.

Also, please consider adding your new unit test files to WebKitTools/Scripts/run-webkit-unittests and fixing the nits below.

Chris made a number of good points that would be nice to address in a future patch.

&gt; diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
&gt; +        * Scripts/modules/text_style.py:
&gt; +          Added. This is a liner module for generic text files. It supports

typo: liner


&gt; diff --git a/WebKitTools/Scripts/modules/style.py b/WebKitTools/Scripts/modules/style.py
&gt; +# FIXME: Move more code from cpp_style to here.
&gt; +# check-webkit-style sholud not refer cpp_style directly.

typo: sholud


&gt; +def parse_arguments(args, additional_flags=[], display_help=False):
&gt; +    &quot;&quot;&quot;Parses the command line arguments.
&gt; +
&gt; +    See cpp_style.parse_arguments() for detail.


s/detail/details/



&gt; diff --git a/WebKitTools/Scripts/modules/text_style.py b/WebKitTools/Scripts/modules/text_style.py
&gt; +&quot;&quot;&quot;Does WebKit-lint on text files.
&gt; +
&gt; +This modules shares error count, filter setting, output setting, etc. with cpp_style.

s/modules/module/


&gt; +def process_file_data(filename, lines, error):
&gt; +    &quot;&quot;&quot;Performs lint check for text on the specified lines.
&gt; +
&gt; +    It reports erros to the given error function.

typo: erros


&gt; +def process_file(filename, error=cpp_style.error):
&gt; +    &quot;&quot;&quot;Performs lint check for text on a single file.&quot;&quot;&quot;
&gt; +    try:
&gt; +        # Do not suuprot for filename=&apos;-. cpp_style handles it.

typo: suuprot


&gt; +def can_handle(filename, extension):
&gt; +    &quot;&quot;&quot;Checks if this module supports for the specified file type.

remove &quot;for&quot;

&gt; +    return (&quot;ChangeLog&quot; in filename
&gt; +            or &quot;WebKitTools/Scripts/&quot; in filename
&gt; +            or extension 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;))

Please make this *not handle* files in the LayoutTest directory. TABs, while infrequent, are allowed in js and html files there. (Tabs in the files there ensure that the js and html parsing handle them correctly.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172462</commentid>
    <comment_count>17</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-12-16 12:17:23 -0800</bug_when>
    <thetext>*** Bug 29509 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172634</commentid>
    <comment_count>18</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-16 21:19:39 -0800</bug_when>
    <thetext>(In reply to comment #14)
(In reply to comment #15)
(In reply to comment #16)

Thank you for the comments.

* I fixed all of typos.

* As for code sharing with cpp_style.py, I have added FIXME comments for now.

&gt; &gt; +    return (&quot;ChangeLog&quot; in filename
&gt; &gt; +            or &quot;WebKitTools/Scripts/&quot; in filename
&gt; &gt; +            or extension 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;))
&gt; 
&gt; Please make this *not handle* files in the LayoutTest directory. TABs, while
&gt; infrequent, are allowed in js and html files there. (Tabs in the files there
&gt; ensure that the js and html parsing handle them correctly.)

I see. I changed it so that &quot;LayoutTests/*&quot; is excluded.
But I want files in LayoutTests are also checked. I&apos;ll investigate whether CSS/HTML/JS parsing tests are put into specific directories or not.

&gt; Also, please consider adding your new unit test files to
&gt; WebKitTools/Scripts/run-webkit-unittests and fixing the nits below.

Added.

I&apos;ll commit the change manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172635</commentid>
    <comment_count>19</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-16 21:31:47 -0800</bug_when>
    <thetext>Landed as r52232
http://trac.webkit.org/changeset/52232</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44837</attachid>
            <date>2009-12-14 20:46:31 -0800</date>
            <delta_ts>2009-12-15 22:53:21 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-text-style-1.patch</filename>
            <type>text/plain</type>
            <size>6063</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">RnJvbSBiMmY4NjY2NmRlNGM5YzcxNzZhMzE0Y2MyZWJmYmY2ZGZlMzBiMTk0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW50IFRhbXVyYSA8dGtlbnRAY2hyb21pdW0ub3JnPgpEYXRl
OiBUdWUsIDE1IERlYyAyMDA5IDEzOjM5OjIwICswOTAwClN1YmplY3Q6IFtQQVRDSF0gdGV4dC1z
dHlsZS0xCgotLS0KIFdlYktpdFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgIHwg
ICAxMCArKysrCiBXZWJLaXRUb29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZSAgICB8ICAg
MjAgKysrKysrKy0KIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy90ZXh0X3N0eWxlLnB5IHwg
ICA3MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA5OCBp
bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYktpdFRv
b2xzL1NjcmlwdHMvbW9kdWxlcy90ZXh0X3N0eWxlLnB5CgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDc0MWM2ODEuLmZiNDg0
NDkgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAwOS0xMi0xNCAgS2VudCBUYW11cmEgIDx0a2Vu
dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgY2hlY2std2Via2l0LXN0eWxlIHN1cHBvcnRzIGZvciBUQUIgY2hlY2sgYWdhaW5z
dCB0ZXh0IGZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzI1MzgKKworICAgICAgICAqIFNjcmlwdHMvY2hlY2std2Via2l0LXN0eWxlOgorICAg
ICAgICAqIFNjcmlwdHMvbW9kdWxlcy90ZXh0X3N0eWxlLnB5OiBBZGRlZC4KKwogMjAwOS0xMi0x
NCAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHJvYmVydGhvZ2FuLm5ldD4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvY2hl
Y2std2Via2l0LXN0eWxlIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay13ZWJraXQtc3R5bGUK
aW5kZXggNTcwOWNmMC4uMTUxYmQ0NCAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9j
aGVjay13ZWJraXQtc3R5bGUKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay13ZWJraXQt
c3R5bGUKQEAgLTM2LDYgKzM2LDcgQEAgaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKIAogaW1w
b3J0IG1vZHVsZXMuY3BwX3N0eWxlIGFzIGNwcF9zdHlsZQoraW1wb3J0IG1vZHVsZXMudGV4dF9z
dHlsZSBhcyB0ZXh0X3N0eWxlCiBmcm9tIG1vZHVsZXMuZGlmZl9wYXJzZXIgaW1wb3J0IERpZmZQ
YXJzZXIKIGZyb20gbW9kdWxlcy5zY20gaW1wb3J0IGRldGVjdF9zY21fc3lzdGVtCiAKQEAgLTEy
MSw2ICsxMjIsMjAgQEAgZGVmIHByb2Nlc3NfcGF0Y2gocGF0Y2hfc3RyaW5nKToKIAogICAgICAg
ICAgICAgY3BwX3N0eWxlLnByb2Nlc3NfZmlsZShmaWxlbmFtZSwgZXJyb3I9ZXJyb3JfZm9yX3Bh
dGNoKQogCisgICAgICAgIGVsaWYgIkNoYW5nZUxvZyIgaW4gZmlsZW5hbWUgb3IgZmlsZV9leHRl
bnNpb24gaW4gWycuaHRtbCcsICcuanMnLCAnLnB5JywgJy50eHQnXToKKyAgICAgICAgICAgIGxp
bmVfbnVtYmVycyA9IHNldCgpOworICAgICAgICAgICAgZm9yIGxpbmUgaW4gZGlmZi5saW5lczoK
KyAgICAgICAgICAgICAgICAjIFdoZW4gZGVsZXRlZCBsaW5lIGlzIG5vdCBzZXQsIGl0IG1lYW5z
IHRoYXQKKyAgICAgICAgICAgICAgICAjIHRoZSBsaW5lIGlzIG5ld2x5IGFkZGVkLgorICAgICAg
ICAgICAgICAgIGlmIG5vdCBsaW5lWzBdOgorICAgICAgICAgICAgICAgICAgICBsaW5lX251bWJl
cnMuYWRkKGxpbmVbMV0pCisKKyAgICAgICAgICAgIGRlZiBlcnJvcl9mb3JfcGF0Y2goZmlsZW5h
bWUsIGxpbmVfbnVtYmVyLCBtZXNzYWdlKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lX251bWJl
ciBpbiBsaW5lX251bWJlcnM6CisgICAgICAgICAgICAgICAgICAgIHRleHRfc3R5bGUuZXJyb3Io
ZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBtZXNzYWdlKQorCisgICAgICAgICAgICB0ZXh0X3N0eWxl
LnByb2Nlc3NfZmlsZShmaWxlbmFtZSwgZXJyb3I9ZXJyb3JfZm9yX3BhdGNoKQorCiAKIGRlZiBt
YWluKCk6CiAgICAgY3BwX3N0eWxlLnVzZV93ZWJraXRfc3R5bGVzKCkKQEAgLTE0Miw2ICsxNTcs
NyBAQCBkZWYgbWFpbigpOgogICAgIGlmIGZpbGVzOgogICAgICAgICBmb3IgZmlsZW5hbWUgaW4g
ZmlsZXM6CiAgICAgICAgICAgICBjcHBfc3R5bGUucHJvY2Vzc19maWxlKGZpbGVuYW1lKQorICAg
ICAgICAgICAgdGV4dF9zdHlsZS5wcm9jZXNzX2ZpbGUoZmlsZW5hbWUpCiAKICAgICBlbHNlOgog
ICAgICAgICBjd2QgPSBvcy5wYXRoLmFic3BhdGgoJy4nKQpAQCAtMTU4LDggKzE3NCw4IEBAIGRl
ZiBtYWluKCk6CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwcm9jZXNzX3BhdGNoKHNjbS5j
cmVhdGVfcGF0Y2goKSkKIAotICAgIHN5cy5zdGRlcnIud3JpdGUoJ1RvdGFsIGVycm9ycyBmb3Vu
ZDogJWRcbicgJSBjcHBfc3R5bGUuZXJyb3JfY291bnQoKSkKLSAgICBzeXMuZXhpdChjcHBfc3R5
bGUuZXJyb3JfY291bnQoKSA+IDApCisgICAgc3lzLnN0ZGVyci53cml0ZSgnVG90YWwgZXJyb3Jz
IGZvdW5kOiAlZFxuJyAlIChjcHBfc3R5bGUuZXJyb3JfY291bnQoKSArIHRleHRfc3R5bGUuZXJy
b3JfY291bnQoKSkpCisgICAgc3lzLmV4aXQoY3BwX3N0eWxlLmVycm9yX2NvdW50KCkgKyB0ZXh0
X3N0eWxlLmVycm9yX2NvdW50KCkgPiAwKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvdGV4dF9zdHlsZS5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy90ZXh0X3N0eWxlLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOTFhZjYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL21vZHVsZXMvdGV4dF9zdHlsZS5weQpAQCAtMCwwICsxLDcwIEBACisjIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworIiIiRG9lcyBXZWJLaXQtbGludCBvbiB0ZXh0IGZpbGVzLiIiIgorCitp
bXBvcnQgY29kZWNzCitpbXBvcnQgc3lzCisKK2NsYXNzIF9UZXh0U3R5bGVTdGF0ZShvYmplY3Qp
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5lcnJvcl9jb3VudCA9IDAK
KworICAgIGRlZiBpbmNyZW1lbnRfZXJyb3JfY291bnQoc2VsZik6CisgICAgICAgIHNlbGYuZXJy
b3JfY291bnQgKz0gMQorCisKK190ZXh0X3N0eWxlX3N0YXRlID0gX1RleHRTdHlsZVN0YXRlKCkK
KworZGVmIGVycm9yX2NvdW50KCk6CisgICAgIiIiUmV0dXJucyB0aGUgZ2xvYmFsIGNhb3VudCBv
ZiBlcnBvcnRlZCBlcnJvcnMuIiIiCisgICAgcmV0dXJuIF90ZXh0X3N0eWxlX3N0YXRlLmVycm9y
X2NvdW50CisKK2RlZiBlcnJvcihmaWxlbmFtZSwgbGluZV9udW1iZXIsIG1lc3NhZ2UpOgorICAg
IF90ZXh0X3N0eWxlX3N0YXRlLmluY3JlbWVudF9lcnJvcl9jb3VudCgpCisgICAgc3lzLnN0ZGVy
ci53cml0ZSgnJXM6JXM6ICAlc1xuJyAlIChmaWxlbmFtZSwgbGluZV9udW1iZXIsIG1lc3NhZ2Up
KQorCitkZWYgcHJvY2Vzc19maWxlKGZpbGVuYW1lLCBlcnJvcj1lcnJvcik6CisgICAgdHJ5Ogor
ICAgICAgICBpZiBmaWxlbmFtZSA9PSAnLSc6CisgICAgICAgICAgICBsaW5lcyA9IGNvZGVjcy5T
dHJlYW1SZWFkZXJXcml0ZXIoc3lzLnN0ZGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvZGVjcy5nZXRyZWFkZXIoJ3V0ZjgnKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY3MuZ2V0d3JpdGVyKCd1dGY4
JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcGxh
Y2UnKS5yZWFkKCkuc3BsaXQoJ1xuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVz
ID0gY29kZWNzLm9wZW4oZmlsZW5hbWUsICdyJywgJ3V0ZjgnLCAncmVwbGFjZScpLnJlYWQoKS5z
cGxpdCgnXG4nKQorCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHN5cy5zdGRlcnIud3Jp
dGUoCisgICAgICAgICAgICAiU2tpcHBpbmcgaW5wdXQgJyVzJzogQ2FuJ3Qgb3BlbiBmb3IgcmVh
ZGluZ1xuIiAlIGZpbGVuYW1lKQorICAgICAgICByZXR1cm4KKworICAgIGxpbmVzID0gKFsnLy8g
YWRqdXN0IGxpbmUgbnVtYmVycyddICsgbGluZXMpCisgICAgZm9yIGxpbmVfbnVtYmVyLCBsaW5l
IGluIGVudW1lcmF0ZShsaW5lcyk6CisgICAgICAgIGlmICdcdCcgaW4gbGluZToKKyAgICAgICAg
ICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgJ0xpbmUgY29udGFpbnMgdGFiIGNoYXJh
Y3Rlci4nKQotLSAKMS42LjMuMwoK
</data>
<flag name="review"
          id="26755"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44944</attachid>
            <date>2009-12-15 22:53:21 -0800</date>
            <delta_ts>2009-12-16 01:36:18 -0800</delta_ts>
            <desc>Proposed patch (rev.2)</desc>
            <filename>0001-text-style-2.patch</filename>
            <type>text/plain</type>
            <size>20496</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">RnJvbSA5YzQ4NWE3NDU0ZGE2NDQ0Mzg0Y2JjMzQxYmJiYmUxNjI0ODc4ZDcyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW50IFRhbXVyYSA8dGtlbnRAY2hyb21pdW0ub3JnPgpEYXRl
OiBUdWUsIDE1IERlYyAyMDA5IDEzOjM5OjIwICswOTAwClN1YmplY3Q6IFtQQVRDSF0gdGV4dC1z
dHlsZS0yCgotLS0KIFdlYktpdFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAxOCArKysKIFdlYktpdFRvb2xzL1NjcmlwdHMvY2hlY2std2Via2l0LXN0eWxl
ICAgICAgICAgICAgIHwgICA0OCArKy0tLS0tLS0KIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxl
cy9jcHBfc3R5bGUucHkgICAgICAgICAgIHwgICAxNSArKystCiBXZWJLaXRUb29scy9TY3JpcHRz
L21vZHVsZXMvY3BwX3N0eWxlX3VuaXR0ZXN0LnB5ICB8ICAgMTUgKysrCiBXZWJLaXRUb29scy9T
Y3JpcHRzL21vZHVsZXMvc3R5bGUucHkgICAgICAgICAgICAgICB8ICAxMDEgKysrKysrKysrKysr
KysrKysrCiBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvdGV4dF9zdHlsZS5weSAgICAgICAg
ICB8ICAgNjggKysrKysrKysrKysrCiBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvdGV4dF9z
dHlsZV91bml0dGVzdC5weSB8ICAxMDkgKysrKysrKysrKysrKysrKysrKysKIDcgZmlsZXMgY2hh
bmdlZCwgMzMyIGluc2VydGlvbnMoKyksIDQyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw
NjQ0IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9zdHlsZS5weQogY3JlYXRlIG1vZGUgMTAw
NjQ0IFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy90ZXh0X3N0eWxlLnB5CiBjcmVhdGUgbW9k
ZSAxMDA2NDQgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3RleHRfc3R5bGVfdW5pdHRlc3Qu
cHkKCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFu
Z2VMb2cKaW5kZXggNzQxYzY4MS4uYWRhMDlkYiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDA5
LTEyLTE1ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBjaGVjay13ZWJraXQtc3R5bGUgc3Vw
cG9ydHMgZm9yIFRBQiBjaGVjayBhZ2FpbnN0IHRleHQgZmlsZXMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjUzOAorCisgICAgICAgIHRleHRfc3R5
bGUucHkgaXMgYSBtb2R1bGUgdG8gY2hlY2sgc3R5bGUgZm9yIHRleHQgZmlsZXMsIGFuZAorICAg
ICAgICBzdXBwb3J0cyBvbmx5IGZvciBUQUIgY2hlY2tpbmcgYXQgdGhpcyBtb21lbnQuCisgICAg
ICAgIHN0eWxlLnB5IGRpc3BhdGNoZXMgZmlsZXMgdG8gYW4gYXBwcm9wcmlhdGUgc3R5bGUgY2hl
Y2tlciBtb2R1bGUuCisKKyAgICAgICAgKiBTY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZToKKyAg
ICAgICAgKiBTY3JpcHRzL21vZHVsZXMvY3BwX3N0eWxlLnB5OgorICAgICAgICAqIFNjcmlwdHMv
bW9kdWxlcy9jcHBfc3R5bGVfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy9tb2R1bGVz
L3N0eWxlLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvdGV4dF9zdHlsZS5w
eTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy9tb2R1bGVzL3RleHRfc3R5bGVfdW5pdHRlc3Qu
cHk6IEFkZGVkLgorCiAyMDA5LTEyLTE0ICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAcm9iZXJ0aG9n
YW4ubmV0PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay13ZWJraXQtc3R5bGUgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL2NoZWNrLXdlYmtpdC1zdHlsZQppbmRleCA1NzA5Y2YwLi5hMDI1ZThjIDEwMDc1NQotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZQorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZQpAQCAtMzYsNyArMzYsNyBAQCBpbXBvcnQgb3Mu
cGF0aAogaW1wb3J0IHN5cwogCiBpbXBvcnQgbW9kdWxlcy5jcHBfc3R5bGUgYXMgY3BwX3N0eWxl
Ci1mcm9tIG1vZHVsZXMuZGlmZl9wYXJzZXIgaW1wb3J0IERpZmZQYXJzZXIKK2ltcG9ydCBtb2R1
bGVzLnN0eWxlIGFzIHN0eWxlCiBmcm9tIG1vZHVsZXMuc2NtIGltcG9ydCBkZXRlY3Rfc2NtX3N5
c3RlbQogCiAKQEAgLTkwLDQyICs5MCwxMCBAQCBTeW50YXg6ICUocHJvZ3JhbV9uYW1lKXMgWy0t
dmVyYm9zZT0jXSBbLS1naXQtY29tbWl0PTxTaW5nbGVDb21taXQ+XSBbLS1vdXRwdXQ9dgogIiIi
ICUgeydwcm9ncmFtX25hbWUnOiBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKX0KIAogCi1k
ZWYgcHJvY2Vzc19wYXRjaChwYXRjaF9zdHJpbmcpOgotICAgICIiIkRvZXMgbGludCBvbiBhIHNp
bmdsZSBwYXRjaC4KLQotICAgIEFyZ3M6Ci0gICAgICBwYXRjaF9zdHJpbmc6IEEgc3RyaW5nIG9m
IGEgcGF0Y2guCi0gICAgIiIiCi0gICAgcGF0Y2ggPSBEaWZmUGFyc2VyKHBhdGNoX3N0cmluZy5z
cGxpdGxpbmVzKCkpCi0gICAgZm9yIGZpbGVuYW1lLCBkaWZmIGluIHBhdGNoLmZpbGVzLml0ZXJp
dGVtcygpOgotICAgICAgICBmaWxlX2V4dGVuc2lvbiA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5h
bWUpWzFdCi0KLSAgICAgICAgaWYgZmlsZV9leHRlbnNpb24gaW4gWycuY3BwJywgJy5jJywgJy5o
J106Ci0gICAgICAgICAgICBsaW5lX251bWJlcnMgPSBzZXQoKQotCi0gICAgICAgICAgICBkZWYg
ZXJyb3JfZm9yX3BhdGNoKGZpbGVuYW1lLCBsaW5lX251bWJlciwgY2F0ZWdvcnksIGNvbmZpZGVu
Y2UsIG1lc3NhZ2UpOgotICAgICAgICAgICAgICAgICIiIldyYXBwZXIgZnVuY3Rpb24gb2YgY3Bw
X3N0eWxlLmVycm9yIGZvciBwYXRjaGVzLgotCi0gICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlv
biBvdXRwdXRzIGVycm9ycyBvbmx5IGlmIHRoZSBsaW5lIG51bWJlcgotICAgICAgICAgICAgICAg
IGNvcnJlc3BvbmRzIHRvIGxpbmVzIHdoaWNoIGFyZSBtb2RpZmllZCBvciBhZGRlZC4KLSAgICAg
ICAgICAgICAgICAiIiIKLSAgICAgICAgICAgICAgICBpZiBub3QgbGluZV9udW1iZXJzOgotICAg
ICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBkaWZmLmxpbmVzOgotICAgICAgICAgICAgICAg
ICAgICAgICAgIyBXaGVuIGRlbGV0ZWQgbGluZSBpcyBub3Qgc2V0LCBpdCBtZWFucyB0aGF0Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBsaW5lIGlzIG5ld2x5IGFkZGVkLgotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmVbMF06Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGluZV9udW1iZXJzLmFkZChsaW5lWzFdKQotCi0gICAgICAgICAgICAgICAgaWYgbGlu
ZV9udW1iZXIgaW4gbGluZV9udW1iZXJzOgotICAgICAgICAgICAgICAgICAgICBjcHBfc3R5bGUu
ZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBjYXRlZ29yeSwgY29uZmlkZW5jZSwgbWVzc2Fn
ZSkKLQotICAgICAgICAgICAgY3BwX3N0eWxlLnByb2Nlc3NfZmlsZShmaWxlbmFtZSwgZXJyb3I9
ZXJyb3JfZm9yX3BhdGNoKQotCi0KIGRlZiBtYWluKCk6Ci0gICAgY3BwX3N0eWxlLnVzZV93ZWJr
aXRfc3R5bGVzKCkKKyAgICBzdHlsZS51c2Vfd2Via2l0X3N0eWxlcygpCiAKLSAgICAoZmlsZXMs
IGZsYWdzKSA9IGNwcF9zdHlsZS5wYXJzZV9hcmd1bWVudHMoc3lzLmFyZ3ZbMTpdLCBbImdpdC1j
b21taXQ9Il0pCisgICAgKGZpbGVzLCBmbGFncykgPSBzdHlsZS5wYXJzZV9hcmd1bWVudHMoc3lz
LmFyZ3ZbMTpdLCBbImdpdC1jb21taXQ9Il0pCiAKICAgICAjIENoYW5nZSBzdGRlcnIgdG8gd3Jp
dGUgd2l0aCByZXBsYWNlbWVudCBjaGFyYWN0ZXJzIHNvIHdlIGRvbid0IGRpZQogICAgICMgaWYg
d2UgdHJ5IHRvIHByaW50IHNvbWV0aGluZyBjb250YWluaW5nIG5vbi1BU0NJSSBjaGFyYWN0ZXJz
LgpAQCAtMTQxLDcgKzEwOSw3IEBAIGRlZiBtYWluKCk6CiAKICAgICBpZiBmaWxlczoKICAgICAg
ICAgZm9yIGZpbGVuYW1lIGluIGZpbGVzOgotICAgICAgICAgICAgY3BwX3N0eWxlLnByb2Nlc3Nf
ZmlsZShmaWxlbmFtZSkKKyAgICAgICAgICAgIHN0eWxlLnByb2Nlc3NfZmlsZShmaWxlbmFtZSkK
IAogICAgIGVsc2U6CiAgICAgICAgIGN3ZCA9IG9zLnBhdGguYWJzcGF0aCgnLicpCkBAIC0xNTQs
MTIgKzEyMiwxMiBAQCBkZWYgbWFpbigpOgogICAgICAgICAgICAgICAgICMgc3RhcnQgdGhlcmUg
KHNlZSBnaXQgZGlmZiAtLWhlbHAgZm9yIGluZm9ybWF0aW9uIGFib3V0IGhvdyAuLi4gdXN1YWxs
eSB3b3JrcykuCiAgICAgICAgICAgICAgICAgY29tbWl0ID0gY29tbWl0Wzpjb21taXQuZmluZCgn
Li4nKV0KICAgICAgICAgICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAiV2FybmluZzogUmFu
Z2VzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciAtLWdpdC1jb21taXQuIENoZWNraW5nIGFsbCBjaGFu
Z2VzIHNpbmNlICVzLlxuIiAlIGNvbW1pdAotICAgICAgICAgICAgcHJvY2Vzc19wYXRjaChzY20u
Y3JlYXRlX3BhdGNoX3NpbmNlX2xvY2FsX2NvbW1pdChjb21taXQpKQorICAgICAgICAgICAgc3R5
bGUucHJvY2Vzc19wYXRjaChzY20uY3JlYXRlX3BhdGNoX3NpbmNlX2xvY2FsX2NvbW1pdChjb21t
aXQpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJvY2Vzc19wYXRjaChzY20uY3JlYXRl
X3BhdGNoKCkpCisgICAgICAgICAgICBzdHlsZS5wcm9jZXNzX3BhdGNoKHNjbS5jcmVhdGVfcGF0
Y2goKSkKIAotICAgIHN5cy5zdGRlcnIud3JpdGUoJ1RvdGFsIGVycm9ycyBmb3VuZDogJWRcbicg
JSBjcHBfc3R5bGUuZXJyb3JfY291bnQoKSkKLSAgICBzeXMuZXhpdChjcHBfc3R5bGUuZXJyb3Jf
Y291bnQoKSA+IDApCisgICAgc3lzLnN0ZGVyci53cml0ZSgnVG90YWwgZXJyb3JzIGZvdW5kOiAl
ZFxuJyAlIHN0eWxlLmVycm9yX2NvdW50KCkpCisgICAgc3lzLmV4aXQoc3R5bGUuZXJyb3JfY291
bnQoKSA+IDApCiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jcHBfc3R5bGUucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL21vZHVsZXMvY3BwX3N0eWxlLnB5CmluZGV4IGYyNjg2MTAuLjFlZTc3NzUgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jcHBfc3R5bGUucHkKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NwcF9zdHlsZS5weQpAQCAtMzE2Niw4ICszMTY2LDcgQEAg
ZGVmIHByb2Nlc3NfZmlsZShmaWxlbmFtZSwgZXJyb3I9ZXJyb3IpOgogCiAgICAgIyBXaGVuIHJl
YWRpbmcgZnJvbSBzdGRpbiwgdGhlIGV4dGVuc2lvbiBpcyB1bmtub3duLCBzbyBubyBjcHBfc3R5
bGUgdGVzdHMKICAgICAjIHNob3VsZCByZWx5IG9uIHRoZSBleHRlbnNpb24uCi0gICAgaWYgKGZp
bGVuYW1lICE9ICctJyBhbmQgZmlsZV9leHRlbnNpb24gIT0gJ2gnIGFuZCBmaWxlX2V4dGVuc2lv
biAhPSAnY3BwJwotICAgICAgICBhbmQgZmlsZV9leHRlbnNpb24gIT0gJ2MnKToKKyAgICBpZiAo
ZmlsZW5hbWUgIT0gJy0nIGFuZCBub3QgY2FuX2hhbmRsZShmaWxlbmFtZSwgJy4nICsgZmlsZV9l
eHRlbnNpb24pKToKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnSWdub3JpbmcgJXM7IG5vdCBh
IC5jcHAsIC5jIG9yIC5oIGZpbGVcbicgJSBmaWxlbmFtZSkKICAgICBlbHNlOgogICAgICAgICBw
cm9jZXNzX2ZpbGVfZGF0YShmaWxlbmFtZSwgZmlsZV9leHRlbnNpb24sIGxpbmVzLCBlcnJvcikK
QEAgLTMyODIsNiArMzI4MSwxOCBAQCBkZWYgdXNlX3dlYmtpdF9zdHlsZXMoKToKICAgICBdCiAK
IAorZGVmIGNhbl9oYW5kbGUoZmlsZW5hbWUsIGV4dGVuc2lvbik6CisgICAgIiIiQ2hlY2tzIGlm
IHRoaXMgbW9kdWxlIHN1cHBvcnRzIGZvciB0aGUgc3BlY2lmaWVkIGZpbGUgdHlwZS4KKworICAg
IEFyZ3M6CisgICAgICBmaWxlbmFtZTogQSBmaWxlbmFtZS4gSXQgbWF5IGNvbnRhaW4gZGlyZWN0
b3J5IG5hbWVzLgorICAgICAgZXh0ZW5zaW9uOiBUaGUgZXh0ZW5zaW9uIHBhcnQgb2YgdGhlIGFi
b3ZlLiBJdCBzaG91bGQgYmUgYW4gZW1wdHkgc3RyaW5nCisgICAgICBpZiB0aGUgZmlsZW5hbWUg
aGFzIG5vIGRvdCBpbiBpdHMgbmFtZSB3aXRob3V0IGRpcmVjdG9yeSBuYW1lcy4gSXQgc2hvdWxk
CisgICAgICBzdGFydCB3aXRoIGRvdCBpZiBpdCBpcyBub3QgZW1wdHkuCisgICAgICIiIgorICAg
IHJldHVybiBleHRlbnNpb24gaW4gKCcuaCcsICcuY3BwJywgJy5jJykKKworCiBkZWYgbWFpbigp
OgogICAgIHN5cy5zdGRlcnIud3JpdGUoCiAgICAgICAgICcnJyoqKioqKioqKioqKioqKioqKioq
KiBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyAqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jcHBfc3R5bGVfdW5pdHRlc3QucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwX3N0eWxlX3VuaXR0ZXN0LnB5CmluZGV4IDQx
Yzg4OGMuLmE4YWMwZWYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9j
cHBfc3R5bGVfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2Nw
cF9zdHlsZV91bml0dGVzdC5weQpAQCAtMzcxNSw2ICszNzE1LDIxIEBAIGNsYXNzIFdlYktpdFN0
eWxlVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAgICAgICAgcGFzcwogCiAKKyAgICBkZWYgdGVz
dF9jYW5faGFuZGxlKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyBmb3IgY3BwX3N0eWxlLmNhbl9o
YW5kbGUoKS4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5bGUuY2FuX2hhbmRs
ZSgnJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydF8oY3BwX3N0eWxlLmNhbl9oYW5kbGUoJ2Zv
by5oJywgJy5oJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgY3BwX3N0eWxlLmNhbl9oYW5k
bGUoJ2Zvby5oJywgJ2gnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5bGUuY2Fu
X2hhbmRsZSgnZm9vLmhwcCcsICcuaHBwJykpCisgICAgICAgIHNlbGYuYXNzZXJ0XyhjcHBfc3R5
bGUuY2FuX2hhbmRsZSgnZm9vLmMnLCAnLmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKGNwcF9z
dHlsZS5jYW5faGFuZGxlKCdmb28uY3BwJywgJy5jcHAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRf
KG5vdCBjcHBfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmNjJywgJy5jYycpKQorICAgICAgICBzZWxm
LmFzc2VydF8obm90IGNwcF9zdHlsZS5jYW5faGFuZGxlKCdmb28uY3h4JywgJy5jeHgnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLkMnLCAnLkMn
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLm1t
JywgJy5tbScpKQorICAgICAgICBzZWxmLmFzc2VydF8obm90IGNwcF9zdHlsZS5jYW5faGFuZGxl
KCctJywgJy0nKSkKKworCiBkZWYgdGVhckRvd24oKToKICAgICAiIiJBIGdsb2JhbCBjaGVjayB0
byBtYWtlIHN1cmUgYWxsIGVycm9yLWNhdGVnb3JpZXMgaGF2ZSBiZWVuIHRlc3RlZC4KIApkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3N0eWxlLnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy9tb2R1bGVzL3N0eWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjc3NzJiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL21v
ZHVsZXMvc3R5bGUucHkKQEAgLTAsMCArMSwxMDEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJG
cm9udGVuZCBvZiBzb21lIHN0eWxlLWNoZWNrZXIgbW9kdWxlcy4iIiIKKworIyBGSVhNRTogTW92
ZSBtb3JlIGNvZGUgZnJvbSBjcHBfc3R5bGUgdG8gaGVyZS4KKyMgY2hlY2std2Via2l0LXN0eWxl
IHNob2x1ZCBub3QgcmVmZXIgY3BwX3N0eWxlIGRpcmVjdGx5LgorCitpbXBvcnQgb3MucGF0aAor
CitpbXBvcnQgbW9kdWxlcy5jcHBfc3R5bGUgYXMgY3BwX3N0eWxlCitpbXBvcnQgbW9kdWxlcy50
ZXh0X3N0eWxlIGFzIHRleHRfc3R5bGUKK2Zyb20gbW9kdWxlcy5kaWZmX3BhcnNlciBpbXBvcnQg
RGlmZlBhcnNlcgorCisKK2RlZiB1c2Vfd2Via2l0X3N0eWxlcygpOgorICAgICIiIkNvbmZpZ3Vy
ZXMgdGhpcyBtb2R1bGUgZm9yIFdlYktpdCBzdHlsZS4iIiIKKyAgICBjcHBfc3R5bGUudXNlX3dl
YmtpdF9zdHlsZXMoKQorCisKK2RlZiBwYXJzZV9hcmd1bWVudHMoYXJncywgYWRkaXRpb25hbF9m
bGFncz1bXSk6CisgICAgIiIiUGFyc2VzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorCisg
ICAgU2VlIGNwcF9zdHlsZS5wYXJzZV9hcmd1bWVudHMoKSBmb3IgZGV0YWlsLgorICAgICIiIgor
ICAgIHJldHVybiBjcHBfc3R5bGUucGFyc2VfYXJndW1lbnRzKGFyZ3MsIGFkZGl0aW9uYWxfZmxh
Z3MpCisKKworZGVmIHByb2Nlc3NfZmlsZShmaWxlbmFtZSk6CisgICAgIiIiQ2hlY2tzIHN0eWxl
IGZvciB0aGUgc3BlY2lmaWVkIGZpbGUuCisKKyAgICBJZiB0aGUgc3BlY2lmaWVkIGZpbGVuYW1l
IGlzICctJywgYXBwbGllcyBjcHBfc3R5bGUgdG8gdGhlIHN0YW5kYXJkIGlucHV0LgorICAgICIi
IgorICAgIGZpbGVfZXh0ZW5zaW9uID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMV0KKyAg
ICBpZiBjcHBfc3R5bGUuY2FuX2hhbmRsZShmaWxlbmFtZSwgZmlsZV9leHRlbnNpb24pIG9yIGZp
bGVuYW1lID09ICctJzoKKyAgICAgICAgY3BwX3N0eWxlLnByb2Nlc3NfZmlsZShmaWxlbmFtZSkK
KyAgICBlbGlmIHRleHRfc3R5bGUuY2FuX2hhbmRsZShmaWxlbmFtZSwgZmlsZV9leHRlbnNpb24p
OgorICAgICAgICB0ZXh0X3N0eWxlLnByb2Nlc3NfZmlsZShmaWxlbmFtZSkKKworCitkZWYgcHJv
Y2Vzc19wYXRjaChwYXRjaF9zdHJpbmcpOgorICAgICIiIkRvZXMgbGludCBvbiBhIHNpbmdsZSBw
YXRjaC4KKworICAgIEFyZ3M6CisgICAgICBwYXRjaF9zdHJpbmc6IEEgc3RyaW5nIG9mIGEgcGF0
Y2guCisgICAgIiIiCisgICAgcGF0Y2ggPSBEaWZmUGFyc2VyKHBhdGNoX3N0cmluZy5zcGxpdGxp
bmVzKCkpCisgICAgZm9yIGZpbGVuYW1lLCBkaWZmIGluIHBhdGNoLmZpbGVzLml0ZXJpdGVtcygp
OgorICAgICAgICBmaWxlX2V4dGVuc2lvbiA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzFd
CisgICAgICAgIGxpbmVfbnVtYmVycyA9IHNldCgpCisKKyAgICAgICAgZGVmIGVycm9yX2Zvcl9w
YXRjaChmaWxlbmFtZSwgbGluZV9udW1iZXIsIGNhdGVnb3J5LCBjb25maWRlbmNlLCBtZXNzYWdl
KToKKyAgICAgICAgICAgICIiIldyYXBwZXIgZnVuY3Rpb24gb2YgY3BwX3N0eWxlLmVycm9yIGZv
ciBwYXRjaGVzLgorCisgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIG91dHB1dHMgZXJyb3JzIG9u
bHkgaWYgdGhlIGxpbmUgbnVtYmVyCisgICAgICAgICAgICBjb3JyZXNwb25kcyB0byBsaW5lcyB3
aGljaCBhcmUgbW9kaWZpZWQgb3IgYWRkZWQuCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAg
IGlmIG5vdCBsaW5lX251bWJlcnM6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZGlmZi5s
aW5lczoKKyAgICAgICAgICAgICAgICAgICAgIyBXaGVuIGRlbGV0ZWQgbGluZSBpcyBub3Qgc2V0
LCBpdCBtZWFucyB0aGF0CisgICAgICAgICAgICAgICAgICAgICMgdGhlIGxpbmUgaXMgbmV3bHkg
YWRkZWQuCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lWzBdOgorICAgICAgICAgICAg
ICAgICAgICAgICAgbGluZV9udW1iZXJzLmFkZChsaW5lWzFdKQorCisgICAgICAgICAgICBpZiBs
aW5lX251bWJlciBpbiBsaW5lX251bWJlcnM6CisgICAgICAgICAgICAgICAgY3BwX3N0eWxlLmVy
cm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgY2F0ZWdvcnksIGNvbmZpZGVuY2UsIG1lc3NhZ2Up
CisKKyAgICAgICAgaWYgY3BwX3N0eWxlLmNhbl9oYW5kbGUoZmlsZW5hbWUsIGZpbGVfZXh0ZW5z
aW9uKToKKyAgICAgICAgICAgIGNwcF9zdHlsZS5wcm9jZXNzX2ZpbGUoZmlsZW5hbWUsIGVycm9y
PWVycm9yX2Zvcl9wYXRjaCkKKyAgICAgICAgZWxpZiB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoZmls
ZW5hbWUsIGZpbGVfZXh0ZW5zaW9uKToKKyAgICAgICAgICAgIHRleHRfc3R5bGUucHJvY2Vzc19m
aWxlKGZpbGVuYW1lLCBlcnJvcj1lcnJvcl9mb3JfcGF0Y2gpCisKKworZGVmIGVycm9yX2NvdW50
KCk6CisgICAgIiIiUmV0dXJucyB0aGUgdG90YWwgZXJyb3IgY291bnQuIiIiCisgICAgcmV0dXJu
IGNwcF9zdHlsZS5lcnJvcl9jb3VudCgpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRz
L21vZHVsZXMvdGV4dF9zdHlsZS5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy90ZXh0
X3N0eWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MTY5NzMKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvdGV4dF9zdHlsZS5w
eQpAQCAtMCwwICsxLDY4IEBACisjIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6
CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiRG9lcyBXZWJLaXQtbGlu
dCBvbiB0ZXh0IGZpbGVzLgorCitUaGlzIG1vZHVsZXMgc2hhcmVzIGVycm9yIGNvdW50LCBmaWx0
ZXIgc2V0dGluZywgb3V0cHV0IHNldHRpbmcsIGV0Yy4gd2l0aCBjcHBfc3R5bGUuCisiIiIKKwor
aW1wb3J0IGNvZGVjcworaW1wb3J0IHN5cworCitpbXBvcnQgY3BwX3N0eWxlCisKKworZGVmIHBy
b2Nlc3NfZmlsZV9kYXRhKGZpbGVuYW1lLCBsaW5lcywgZXJyb3IpOgorICAgIGxpbmVzID0gKFsn
Ly8gYWRqdXN0IGxpbmUgbnVtYmVycyB0byBtYWtlIHRoZSBmaXJzdCBsaW5lIDEuJ10gKyBsaW5l
cykKKyAgICBmb3IgbGluZV9udW1iZXIsIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKToKKyAgICAg
ICAgaWYgJ1x0JyBpbiBsaW5lOgorICAgICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVt
YmVyLCAnd2hpdGVzcGFjZS90YWInLCA1LCAnTGluZSBjb250YWlucyB0YWIgY2hhcmFjdGVyLicp
CisKKworZGVmIHByb2Nlc3NfZmlsZShmaWxlbmFtZSwgZXJyb3I9Y3BwX3N0eWxlLmVycm9yKToK
KyAgICB0cnk6CisgICAgICAgICMgRG8gbm90IHN1dXByb3QgZm9yIGZpbGVuYW1lPSctLiBjcHBf
c3R5bGUgaGFuZGxlcyBpdC4KKyAgICAgICAgbGluZXMgPSBjb2RlY3Mub3BlbihmaWxlbmFtZSwg
J3InLCAndXRmOCcsICdyZXBsYWNlJykucmVhZCgpLnNwbGl0KCdcbicpCisgICAgZXhjZXB0IElP
RXJyb3I6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlNraXBwaW5nIGlucHV0ICclcyc6IENh
bid0IG9wZW4gZm9yIHJlYWRpbmdcbiIgJSBmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuCisgICAg
cHJvY2Vzc19maWxlX2RhdGEoZmlsZW5hbWUsIGxpbmVzLCBlcnJvcikKKworCitkZWYgY2FuX2hh
bmRsZShmaWxlbmFtZSwgZXh0ZW5zaW9uKToKKyAgICAiIiJDaGVja3MgaWYgdGhpcyBtb2R1bGUg
c3VwcG9ydHMgZm9yIHRoZSBzcGVjaWZpZWQgZmlsZSB0eXBlLgorCisgICAgQXJnczoKKyAgICAg
IGZpbGVuYW1lOiBBIGZpbGVuYW1lLiBJdCBtYXkgY29udGFpbiBkaXJlY3RvcnkgbmFtZXMuCisg
ICAgICBleHRlbnNpb246IFRoZSBleHRlbnNpb24gcGFydCBvZiB0aGUgYWJvdmUuIEl0IHNob3Vs
ZCBiZSBhbiBlbXB0eSBzdHJpbmcKKyAgICAgIGlmIHRoZSBmaWxlbmFtZSBoYXMgbm8gZG90IGlu
IGl0cyBuYW1lIHdpdGhvdXQgZGlyZWN0b3J5IG5hbWVzLiBJdCBzaG91bGQKKyAgICAgIHN0YXJ0
IHdpdGggZG90IGlmIGl0IGlzIG5vdCBlbXB0eS4KKyAgICAiIiIKKyAgICByZXR1cm4gKCJDaGFu
Z2VMb2ciIGluIGZpbGVuYW1lCisgICAgICAgICAgICBvciAiV2ViS2l0VG9vbHMvU2NyaXB0cy8i
IGluIGZpbGVuYW1lCisgICAgICAgICAgICBvciBleHRlbnNpb24gaW4gKCcuY3NzJywgJy5odG1s
JywgJy5pZGwnLCAnLmpzJywgJy5tbScsICcucGhwJywgJy5wbScsICcucHknLCAnLnR4dCcpKQpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3RleHRfc3R5bGVfdW5pdHRl
c3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvdGV4dF9zdHlsZV91bml0dGVzdC5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTIzODA3Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3RleHRfc3R5bGVfdW5pdHRlc3Qu
cHkKQEAgLTAsMCArMSwxMDkgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworIiIiVW5pdCB0ZXN0IGZvciB0ZXh0X3N0eWxlLnB5LiIiIgorCitpbXBvcnQgdW5pdHRlc3QK
KworaW1wb3J0IHRleHRfc3R5bGUKKworCitjbGFzcyBUZXh0U3R5bGVUZXN0Q2FzZSh1bml0dGVz
dC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdENhc2UgZm9yIHRleHRfc3R5bGUucHkiIiIKKworICAg
IGRlZiBhc3NlcnROb0Vycm9yKHNlbGYsIGxpbmVzKToKKyAgICAgICAgIiIiQXNzZXJ0cyB0aGF0
IHRoZSBzcGVjaWZpZWQgbGluZXMgaGFzIG5vIGVycm9ycy4iIiIKKyAgICAgICAgc2VsZi5oYWRf
ZXJyb3IgPSBGYWxzZQorCisgICAgICAgIGRlZiBlcnJvcl9mb3JfdGVzdChmaWxlbmFtZSwgbGlu
ZV9udW1iZXIsIGNhdGVnb3J5LCBjb25maWRlbmNlLCBtZXNzYWdlKToKKyAgICAgICAgICAgICIi
IlJlY29yZHMgaWYgYW4gZXJyb3Igb2NjdXJzLiIiIgorICAgICAgICAgICAgc2VsZi5oYWRfZXJy
b3IgPSBUcnVlCisKKyAgICAgICAgdGV4dF9zdHlsZS5wcm9jZXNzX2ZpbGVfZGF0YSgnJywgbGlu
ZXMsIGVycm9yX2Zvcl90ZXN0KQorICAgICAgICBzZWxmLmFzc2VydF8obm90IHNlbGYuaGFkX2Vy
cm9yLCAnJXMgc2hvdWxkIG5vdCBoYXZlIGFueSBlcnJvcnMuJyAlIGxpbmVzKQorCisgICAgZGVm
IGFzc2VydEVycm9yKHNlbGYsIGxpbmVzLCBleHBlY3RlZF9saW5lX251bWJlcik6CisgICAgICAg
ICIiIkFzc2VydHMgdGhhdCB0aGUgc3BlY2lmaWVkIGxpbmVzIGhhcyBhbiBlcnJvci4iIiIKKyAg
ICAgICAgc2VsZi5oYWRfZXJyb3IgPSBGYWxzZQorCisgICAgICAgIGRlZiBlcnJvcl9mb3JfdGVz
dChmaWxlbmFtZSwgbGluZV9udW1iZXIsIGNhdGVnb3J5LCBjb25maWRlbmNlLCBtZXNzYWdlKToK
KyAgICAgICAgICAgICIiIkNoZWNrcyBpZiB0aGUgZXhwZWN0ZWQgZXJyb3Igb2NjdXJzLiIiIgor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRfbGluZV9udW1iZXIsIGxpbmVf
bnVtYmVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ3doaXRlc3BhY2UvdGFiJywg
Y2F0ZWdvcnkpCisgICAgICAgICAgICBzZWxmLmhhZF9lcnJvciA9IFRydWUKKworICAgICAgICB0
ZXh0X3N0eWxlLnByb2Nlc3NfZmlsZV9kYXRhKCcnLCBsaW5lcywgZXJyb3JfZm9yX3Rlc3QpCisg
ICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLmhhZF9lcnJvciwgJyVzIHNob3VsZCBoYXZlIGFuIGVy
cm9yIFt3aGl0ZXNwYWNlL3RhYl0uJyAlIGxpbmVzKQorCisKKyAgICBkZWYgdGVzdF9ub19lcnJv
cihzZWxmKToKKyAgICAgICAgIiIiVGVzdHMgZm9yIG5vIGVycm9yIGNhc2VzLiIiIgorICAgICAg
ICBzZWxmLmFzc2VydE5vRXJyb3IoWycnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb0Vycm9yKFsn
YWJjIGRlZicsICdnZ2cnXSkKKworCisgICAgZGVmIHRlc3RfZXJyb3Ioc2VsZik6CisgICAgICAg
ICIiIlRlc3RzIGZvciBlcnJvciBjYXNlcy4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcnJvcihb
JzIwMDktMTItMTZcdEtlbnQgVGFtdXJhXHQ8dGtlbnRAY2hyb21pdW0ub3JnPiddLCAxKQorICAg
ICAgICBzZWxmLmFzc2VydEVycm9yKFsnMjAwOS0xMi0xNiBLZW50IFRhbXVyYSA8dGtlbnRAY2hy
b21pdW0ub3JnPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICcnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAnXHRSZXZpZXdlZCBieSBOT0JPRFkuJ10sIDMpCisKKworICAgIGRlZiB0
ZXN0X2Nhbl9oYW5kbGUoc2VsZik6CisgICAgICAgICIiIlRlc3RzIGZvciB0ZXh0X3N0eWxlLmNh
bl9oYW5kbGUoKS4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9o
YW5kbGUoJycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9o
YW5kbGUoJy0nLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyh0ZXh0X3N0eWxlLmNhbl9oYW5k
bGUoJ0NoYW5nZUxvZycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUuY2Fu
X2hhbmRsZSgnV2ViQ29yZS9DaGFuZ2VMb2cnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyh0
ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ0Zvb0NoYW5nZUxvZy5iYWsnLCAnLmJhaycpKQorICAgICAg
ICBzZWxmLmFzc2VydF8obm90IHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnV2ViS2l0VG9vbHMvU2Ny
aXB0cycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUuY2FuX2hhbmRsZSgn
V2ViS2l0VG9vbHMvU2NyaXB0cy9jaGVjay13ZWJraXQ9c3R5bGUnLCAnJykpCisgICAgICAgIHNl
bGYuYXNzZXJ0Xyh0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ1dlYktpdFRvb2xzL1NjcmlwdHMvbW9k
dWxlcy90ZXh0X3N0eWxlLnB5JywgJy5weScpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0Xyh0ZXh0
X3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5jc3MnLCAnLmNzcycpKQorICAgICAgICBzZWxmLmFzc2Vy
dF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdmb28uaHRtbCcsICcuaHRtbCcpKQorICAgICAgICBz
ZWxmLmFzc2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdmb28uaWRsJywgJy5pZGwnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmpzJywgJy5qcycp
KQorICAgICAgICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdmb28ubW0nLCAn
Lm1tJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyh0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5w
aHAnLCAnLnBocCcpKQorICAgICAgICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxl
KCdmb28ucG0nLCAnLnBtJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyh0ZXh0X3N0eWxlLmNhbl9o
YW5kbGUoJ2Zvby5weScsICcucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUu
Y2FuX2hhbmRsZSgnZm9vLnR4dCcsICcudHh0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qg
dGV4dF9zdHlsZS5jYW5faGFuZGxlKCdmb28uYycsICcuYycpKQorICAgICAgICBzZWxmLmFzc2Vy
dF8obm90IHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmMnLCAnLmNwcCcpKQorICAgICAgICBz
ZWxmLmFzc2VydF8obm90IHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmMnLCAnLmgnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5wbmcnLCAn
LnBuZycpKQorICAgICAgICBzZWxmLmFzc2VydF8obm90IHRleHRfc3R5bGUuY2FuX2hhbmRsZSgn
Zm9vLmMvYmFyLnBuZycsICcucG5nJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgdGV4dF9z
dHlsZS5jYW5faGFuZGxlKCdXZWJLaXQvRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5zdHJpbmdz
JywgJy5zdHJpbmdzJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgdGV4dF9zdHlsZS5jYW5f
aGFuZGxlKCdNYWtlZmlsZScsICcnKSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgor
ICAgIHVuaXR0ZXN0Lm1haW4oKQotLSAKMS42LjMuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44956</attachid>
            <date>2009-12-16 01:36:18 -0800</date>
            <delta_ts>2009-12-16 11:56:59 -0800</delta_ts>
            <desc>Proposed patch (rev.3)</desc>
            <filename>0001-text-style-3.patch</filename>
            <type>text/plain</type>
            <size>20872</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">RnJvbSAyNTRhYzQ1ZTg2MTA5NTJlZTk2YTE5ZTg3MjI4OWE5ZTk3MzE1MjM0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW50IFRhbXVyYSA8dGtlbnRAY2hyb21pdW0ub3JnPgpEYXRl
OiBUdWUsIDE1IERlYyAyMDA5IDEzOjM5OjIwICswOTAwClN1YmplY3Q6IFtQQVRDSF0gdGV4dC1z
dHlsZS0zCgotLS0KIFdlYktpdFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAyMiArKysrCiBXZWJLaXRUb29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHls
ZSAgICAgICAgICAgICB8ICAgNDkgKystLS0tLS0tCiBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVs
ZXMvY3BwX3N0eWxlLnB5ICAgICAgICAgICB8ICAgMTUgKysrLQogV2ViS2l0VG9vbHMvU2NyaXB0
cy9tb2R1bGVzL2NwcF9zdHlsZV91bml0dGVzdC5weSAgfCAgIDE1ICsrKwogV2ViS2l0VG9vbHMv
U2NyaXB0cy9tb2R1bGVzL3N0eWxlLnB5ICAgICAgICAgICAgICAgfCAgMTAxICsrKysrKysrKysr
KysrKysrKwogV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3RleHRfc3R5bGUucHkgICAgICAg
ICAgfCAgIDczICsrKysrKysrKysrKysKIFdlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy90ZXh0
X3N0eWxlX3VuaXR0ZXN0LnB5IHwgIDEwOSArKysrKysrKysrKysrKysrKysrKwogNyBmaWxlcyBj
aGFuZ2VkLCAzNDIgaW5zZXJ0aW9ucygrKSwgNDIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx
MDA2NDQgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3N0eWxlLnB5CiBjcmVhdGUgbW9kZSAx
MDA2NDQgV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3RleHRfc3R5bGUucHkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvdGV4dF9zdHlsZV91bml0dGVz
dC5weQoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0No
YW5nZUxvZwppbmRleCBkNThjNWNhLi5mYmJiNWE3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9D
aGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIw
MDktMTItMTUgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGNoZWNrLXdlYmtpdC1zdHlsZSBz
dXBwb3J0cyBmb3IgVEFCIGNoZWNrIGFnYWluc3QgdGV4dCBmaWxlcy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyNTM4CisKKyAgICAgICAgKiBTY3Jp
cHRzL2NoZWNrLXdlYmtpdC1zdHlsZToKKyAgICAgICAgICBNb3ZlIHByb2Nlc3NfcGF0Y2goKSB0
byBzdHlsZS5weS4KKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvY3BwX3N0eWxlLnB5OgorICAg
ICAgICAgIEFkZCBjYW5faGFuZGxlKCkuCisgICAgICAgICogU2NyaXB0cy9tb2R1bGVzL2NwcF9z
dHlsZV91bml0dGVzdC5weToKKyAgICAgICAgICBBZGQgdGVzdHMgZm9yIGNhbl9oYW5kbGUoKS4K
KyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvc3R5bGUucHk6CisgICAgICAgICAgQWRkZWQuIFRo
aXMgaXMgYSBmcm9udC1lbmQgb2YgY3BwX3N0eWxlIGFuZCB0ZXh0X3N0eWxlLiBJdCBkaXNwYXRj
aGVzCisgICAgICAgICAgZmlsZXMgdG8gYW4gYXBwcm9wcmlhdGUgbGludGVyLgorICAgICAgICAq
IFNjcmlwdHMvbW9kdWxlcy90ZXh0X3N0eWxlLnB5OgorICAgICAgICAgIEFkZGVkLiBUaGlzIGlz
IGEgbGluZXIgbW9kdWxlIGZvciBnZW5lcmljIHRleHQgZmlsZXMuIEl0IHN1cHBvcnRzCisgICAg
ICAgICAgb25seSBmb3IgVEFCIGNoZWNraW5nIGF0IHRoaXMgbW9tZW50LgorICAgICAgICAqIFNj
cmlwdHMvbW9kdWxlcy90ZXh0X3N0eWxlX3VuaXR0ZXN0LnB5OgorICAgICAgICAgIEFkZGVkLiBU
ZXN0cyBmb3IgdGV4dF9zdHlsZS5weS4KKwogMjAwOS0xMi0xNSAgQ2hyaXMgSmVyZG9uZWsgIDxj
aHJpcy5qZXJkb25la0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2
aW4uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL2NoZWNrLXdlYmtpdC1zdHlsZSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvY2hlY2std2Via2l0LXN0eWxlCmluZGV4IGRjZWNhMmEuLmUz
MDcyZjIgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvY2hlY2std2Via2l0LXN0eWxl
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvY2hlY2std2Via2l0LXN0eWxlCkBAIC00NywxMCAr
NDcsMTEgQEAgaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKIAogaW1wb3J0IG1vZHVsZXMuY3Bw
X3N0eWxlIGFzIGNwcF9zdHlsZQotZnJvbSBtb2R1bGVzLmRpZmZfcGFyc2VyIGltcG9ydCBEaWZm
UGFyc2VyCitpbXBvcnQgbW9kdWxlcy5zdHlsZSBhcyBzdHlsZQogZnJvbSBtb2R1bGVzLnNjbSBp
bXBvcnQgZGV0ZWN0X3NjbV9zeXN0ZW0KIAogCisjIEZJWE1FOiBBdm9pZCBjcHBfc3R5bGUgZGVw
ZW5kZW5jeS4KIGNwcF9zdHlsZS5fVVNBR0UgPSAiIiIKIFN5bnRheDogJShwcm9ncmFtX25hbWUp
cyBbLS12ZXJib3NlPSNdIFstLWdpdC1jb21taXQ9PFNpbmdsZUNvbW1pdD5dIFstLW91dHB1dD12
czddCiAgICAgICAgIFstLWZpbHRlcj0teCwreSwuLi5dIFtmaWxlXSAuLi4KQEAgLTExNSw0MyAr
MTE2LDExIEBAIFN5bnRheDogJShwcm9ncmFtX25hbWUpcyBbLS12ZXJib3NlPSNdIFstLWdpdC1j
b21taXQ9PFNpbmdsZUNvbW1pdD5dIFstLW91dHB1dD12CiAgICAgfQogCiAKLWRlZiBwcm9jZXNz
X3BhdGNoKHBhdGNoX3N0cmluZyk6Ci0gICAgIiIiRG9lcyBsaW50IG9uIGEgc2luZ2xlIHBhdGNo
LgotCi0gICAgQXJnczoKLSAgICAgIHBhdGNoX3N0cmluZzogQSBzdHJpbmcgb2YgYSBwYXRjaC4K
LSAgICAiIiIKLSAgICBwYXRjaCA9IERpZmZQYXJzZXIocGF0Y2hfc3RyaW5nLnNwbGl0bGluZXMo
KSkKLSAgICBmb3IgZmlsZW5hbWUsIGRpZmYgaW4gcGF0Y2guZmlsZXMuaXRlcml0ZW1zKCk6Ci0g
ICAgICAgIGZpbGVfZXh0ZW5zaW9uID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMV0KLQot
ICAgICAgICBpZiBmaWxlX2V4dGVuc2lvbiBpbiBbJy5jcHAnLCAnLmMnLCAnLmgnXToKLSAgICAg
ICAgICAgIGxpbmVfbnVtYmVycyA9IHNldCgpCi0KLSAgICAgICAgICAgIGRlZiBlcnJvcl9mb3Jf
cGF0Y2goZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBjYXRlZ29yeSwgY29uZmlkZW5jZSwgbWVzc2Fn
ZSk6Ci0gICAgICAgICAgICAgICAgIiIiV3JhcHBlciBmdW5jdGlvbiBvZiBjcHBfc3R5bGUuZXJy
b3IgZm9yIHBhdGNoZXMuCi0KLSAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIG91dHB1dHMg
ZXJyb3JzIG9ubHkgaWYgdGhlIGxpbmUgbnVtYmVyCi0gICAgICAgICAgICAgICAgY29ycmVzcG9u
ZHMgdG8gbGluZXMgd2hpY2ggYXJlIG1vZGlmaWVkIG9yIGFkZGVkLgotICAgICAgICAgICAgICAg
ICIiIgotICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lX251bWJlcnM6Ci0gICAgICAgICAgICAg
ICAgICAgIGZvciBsaW5lIGluIGRpZmYubGluZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAj
IFdoZW4gZGVsZXRlZCBsaW5lIGlzIG5vdCBzZXQsIGl0IG1lYW5zIHRoYXQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICMgdGhlIGxpbmUgaXMgbmV3bHkgYWRkZWQuCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiBub3QgbGluZVswXToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5l
X251bWJlcnMuYWRkKGxpbmVbMV0pCi0KLSAgICAgICAgICAgICAgICBpZiBsaW5lX251bWJlciBp
biBsaW5lX251bWJlcnM6Ci0gICAgICAgICAgICAgICAgICAgIGNwcF9zdHlsZS5lcnJvcihmaWxl
bmFtZSwgbGluZV9udW1iZXIsIGNhdGVnb3J5LCBjb25maWRlbmNlLCBtZXNzYWdlKQotCi0gICAg
ICAgICAgICBjcHBfc3R5bGUucHJvY2Vzc19maWxlKGZpbGVuYW1lLCBlcnJvcj1lcnJvcl9mb3Jf
cGF0Y2gpCi0KLQogZGVmIG1haW4oKToKLSAgICBjcHBfc3R5bGUuX0RFRkFVTFRfRklMVEVSX1JV
TEVTID0gY3BwX3N0eWxlLl9XRUJLSVRfRklMVEVSX1JVTEVTCisgICAgc3R5bGUudXNlX3dlYmtp
dF9zdHlsZXMoKQogCi0gICAgKGZpbGVzLCBmbGFncykgPSBjcHBfc3R5bGUucGFyc2VfYXJndW1l
bnRzKHN5cy5hcmd2WzE6XSwgWyJnaXQtY29tbWl0PSJdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X2hlbHA9VHJ1ZSkKKyAgICAoZmlsZXMs
IGZsYWdzKSA9IHN0eWxlLnBhcnNlX2FyZ3VtZW50cyhzeXMuYXJndlsxOl0sIFsiZ2l0LWNvbW1p
dD0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5
X2hlbHA9VHJ1ZSkKIAogICAgICMgQ2hhbmdlIHN0ZGVyciB0byB3cml0ZSB3aXRoIHJlcGxhY2Vt
ZW50IGNoYXJhY3RlcnMgc28gd2UgZG9uJ3QgZGllCiAgICAgIyBpZiB3ZSB0cnkgdG8gcHJpbnQg
c29tZXRoaW5nIGNvbnRhaW5pbmcgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCkBAIC0xNjcsNyArMTM2
LDcgQEAgZGVmIG1haW4oKToKIAogICAgIGlmIGZpbGVzOgogICAgICAgICBmb3IgZmlsZW5hbWUg
aW4gZmlsZXM6Ci0gICAgICAgICAgICBjcHBfc3R5bGUucHJvY2Vzc19maWxlKGZpbGVuYW1lKQor
ICAgICAgICAgICAgc3R5bGUucHJvY2Vzc19maWxlKGZpbGVuYW1lKQogCiAgICAgZWxzZToKICAg
ICAgICAgY3dkID0gb3MucGF0aC5hYnNwYXRoKCcuJykKQEAgLTE4MywxMCArMTUyLDEwIEBAIGRl
ZiBtYWluKCk6CiAgICAgICAgICAgICBwYXRjaCA9IHNjbS5jcmVhdGVfcGF0Y2hfc2luY2VfbG9j
YWxfY29tbWl0KGNvbW1pdCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHBhdGNoID0gc2Nt
LmNyZWF0ZV9wYXRjaCgpCi0gICAgICAgIHByb2Nlc3NfcGF0Y2gocGF0Y2gpCisgICAgICAgIHN0
eWxlLnByb2Nlc3NfcGF0Y2gocGF0Y2gpCiAKLSAgICBzeXMuc3RkZXJyLndyaXRlKCdUb3RhbCBl
cnJvcnMgZm91bmQ6ICVkXG4nICUgY3BwX3N0eWxlLmVycm9yX2NvdW50KCkpCi0gICAgc3lzLmV4
aXQoY3BwX3N0eWxlLmVycm9yX2NvdW50KCkgPiAwKQorICAgIHN5cy5zdGRlcnIud3JpdGUoJ1Rv
dGFsIGVycm9ycyBmb3VuZDogJWRcbicgJSBzdHlsZS5lcnJvcl9jb3VudCgpKQorICAgIHN5cy5l
eGl0KHN0eWxlLmVycm9yX2NvdW50KCkgPiAwKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5f
XyI6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwX3N0eWxlLnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NwcF9zdHlsZS5weQppbmRleCBkYzlkODc0
Li4yMmQ3N2Q0IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwX3N0
eWxlLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jcHBfc3R5bGUucHkKQEAg
LTMxNTgsOCArMzE1OCw3IEBAIGRlZiBwcm9jZXNzX2ZpbGUoZmlsZW5hbWUsIGVycm9yPWVycm9y
KToKIAogICAgICMgV2hlbiByZWFkaW5nIGZyb20gc3RkaW4sIHRoZSBleHRlbnNpb24gaXMgdW5r
bm93biwgc28gbm8gY3BwX3N0eWxlIHRlc3RzCiAgICAgIyBzaG91bGQgcmVseSBvbiB0aGUgZXh0
ZW5zaW9uLgotICAgIGlmIChmaWxlbmFtZSAhPSAnLScgYW5kIGZpbGVfZXh0ZW5zaW9uICE9ICdo
JyBhbmQgZmlsZV9leHRlbnNpb24gIT0gJ2NwcCcKLSAgICAgICAgYW5kIGZpbGVfZXh0ZW5zaW9u
ICE9ICdjJyk6CisgICAgaWYgKGZpbGVuYW1lICE9ICctJyBhbmQgbm90IGNhbl9oYW5kbGUoZmls
ZW5hbWUsICcuJyArIGZpbGVfZXh0ZW5zaW9uKSk6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUo
J0lnbm9yaW5nICVzOyBub3QgYSAuY3BwLCAuYyBvciAuaCBmaWxlXG4nICUgZmlsZW5hbWUpCiAg
ICAgZWxzZToKICAgICAgICAgcHJvY2Vzc19maWxlX2RhdGEoZmlsZW5hbWUsIGZpbGVfZXh0ZW5z
aW9uLCBsaW5lcywgZXJyb3IpCkBAIC0zMjYxLDMgKzMyNjAsMTUgQEAgZGVmIHBhcnNlX2FyZ3Vt
ZW50cyhhcmdzLCBhZGRpdGlvbmFsX2ZsYWdzPVtdLCBkaXNwbGF5X2hlbHA9RmFsc2UpOgogICAg
IF9zZXRfZmlsdGVycyhmaWx0ZXJzKQogCiAgICAgcmV0dXJuIChmaWxlbmFtZXMsIGFkZGl0aW9u
YWxfZmxhZ192YWx1ZXMpCisKKworZGVmIGNhbl9oYW5kbGUoZmlsZW5hbWUsIGV4dGVuc2lvbik6
CisgICAgIiIiQ2hlY2tzIGlmIHRoaXMgbW9kdWxlIHN1cHBvcnRzIGZvciB0aGUgc3BlY2lmaWVk
IGZpbGUgdHlwZS4KKworICAgIEFyZ3M6CisgICAgICBmaWxlbmFtZTogQSBmaWxlbmFtZS4gSXQg
bWF5IGNvbnRhaW4gZGlyZWN0b3J5IG5hbWVzLgorICAgICAgZXh0ZW5zaW9uOiBUaGUgZXh0ZW5z
aW9uIHBhcnQgb2YgdGhlIGFib3ZlLiBJdCBzaG91bGQgYmUgYW4gZW1wdHkgc3RyaW5nCisgICAg
ICBpZiB0aGUgZmlsZW5hbWUgaGFzIG5vIGRvdCBpbiBpdHMgbmFtZSB3aXRob3V0IGRpcmVjdG9y
eSBuYW1lcy4gSXQgc2hvdWxkCisgICAgICBzdGFydCB3aXRoIGRvdCBpZiBpdCBpcyBub3QgZW1w
dHkuCisgICAgICIiIgorICAgIHJldHVybiBleHRlbnNpb24gaW4gKCcuaCcsICcuY3BwJywgJy5j
JykKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jcHBfc3R5bGVfdW5p
dHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwX3N0eWxlX3VuaXR0ZXN0
LnB5CmluZGV4IDFhY2ZjNjAuLjgyN2UyODAgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvbW9kdWxlcy9jcHBfc3R5bGVfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy9tb2R1bGVzL2NwcF9zdHlsZV91bml0dGVzdC5weQpAQCAtMzcxNyw2ICszNzE3LDIxIEBAIGNs
YXNzIFdlYktpdFN0eWxlVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAgICAgICAgcGFzcwogCiAK
KyAgICBkZWYgdGVzdF9jYW5faGFuZGxlKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyBmb3IgY3Bw
X3N0eWxlLmNhbl9oYW5kbGUoKS4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5
bGUuY2FuX2hhbmRsZSgnJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydF8oY3BwX3N0eWxlLmNh
bl9oYW5kbGUoJ2Zvby5oJywgJy5oJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgY3BwX3N0
eWxlLmNhbl9oYW5kbGUoJ2Zvby5oJywgJ2gnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBj
cHBfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmhwcCcsICcuaHBwJykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0XyhjcHBfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmMnLCAnLmMnKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRfKGNwcF9zdHlsZS5jYW5faGFuZGxlKCdmb28uY3BwJywgJy5jcHAnKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLmNjJywgJy5jYycpKQor
ICAgICAgICBzZWxmLmFzc2VydF8obm90IGNwcF9zdHlsZS5jYW5faGFuZGxlKCdmb28uY3h4Jywg
Jy5jeHgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5bGUuY2FuX2hhbmRsZSgn
Zm9vLkMnLCAnLkMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjcHBfc3R5bGUuY2FuX2hh
bmRsZSgnZm9vLm1tJywgJy5tbScpKQorICAgICAgICBzZWxmLmFzc2VydF8obm90IGNwcF9zdHls
ZS5jYW5faGFuZGxlKCctJywgJy0nKSkKKworCiBkZWYgdGVhckRvd24oKToKICAgICAiIiJBIGds
b2JhbCBjaGVjayB0byBtYWtlIHN1cmUgYWxsIGVycm9yLWNhdGVnb3JpZXMgaGF2ZSBiZWVuIHRl
c3RlZC4KIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3N0eWxlLnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3N0eWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmIzN2JiMjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL21vZHVsZXMvc3R5bGUucHkKQEAgLTAsMCArMSwxMDEgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisiIiJGcm9udGVuZCBvZiBzb21lIHN0eWxlLWNoZWNrZXIgbW9kdWxlcy4iIiIKKwor
IyBGSVhNRTogTW92ZSBtb3JlIGNvZGUgZnJvbSBjcHBfc3R5bGUgdG8gaGVyZS4KKyMgY2hlY2st
d2Via2l0LXN0eWxlIHNob2x1ZCBub3QgcmVmZXIgY3BwX3N0eWxlIGRpcmVjdGx5LgorCitpbXBv
cnQgb3MucGF0aAorCitpbXBvcnQgbW9kdWxlcy5jcHBfc3R5bGUgYXMgY3BwX3N0eWxlCitpbXBv
cnQgbW9kdWxlcy50ZXh0X3N0eWxlIGFzIHRleHRfc3R5bGUKK2Zyb20gbW9kdWxlcy5kaWZmX3Bh
cnNlciBpbXBvcnQgRGlmZlBhcnNlcgorCisKK2RlZiB1c2Vfd2Via2l0X3N0eWxlcygpOgorICAg
ICIiIkNvbmZpZ3VyZXMgdGhpcyBtb2R1bGUgZm9yIFdlYktpdCBzdHlsZS4iIiIKKyAgICBjcHBf
c3R5bGUuX0RFRkFVTFRfRklMVEVSX1JVTEVTID0gY3BwX3N0eWxlLl9XRUJLSVRfRklMVEVSX1JV
TEVTCisKKworZGVmIHBhcnNlX2FyZ3VtZW50cyhhcmdzLCBhZGRpdGlvbmFsX2ZsYWdzPVtdLCBk
aXNwbGF5X2hlbHA9RmFsc2UpOgorICAgICIiIlBhcnNlcyB0aGUgY29tbWFuZCBsaW5lIGFyZ3Vt
ZW50cy4KKworICAgIFNlZSBjcHBfc3R5bGUucGFyc2VfYXJndW1lbnRzKCkgZm9yIGRldGFpbC4K
KyAgICAiIiIKKyAgICByZXR1cm4gY3BwX3N0eWxlLnBhcnNlX2FyZ3VtZW50cyhhcmdzLCBhZGRp
dGlvbmFsX2ZsYWdzLCBkaXNwbGF5X2hlbHApCisKKworZGVmIHByb2Nlc3NfZmlsZShmaWxlbmFt
ZSk6CisgICAgIiIiQ2hlY2tzIHN0eWxlIGZvciB0aGUgc3BlY2lmaWVkIGZpbGUuCisKKyAgICBJ
ZiB0aGUgc3BlY2lmaWVkIGZpbGVuYW1lIGlzICctJywgYXBwbGllcyBjcHBfc3R5bGUgdG8gdGhl
IHN0YW5kYXJkIGlucHV0LgorICAgICIiIgorICAgIGZpbGVfZXh0ZW5zaW9uID0gb3MucGF0aC5z
cGxpdGV4dChmaWxlbmFtZSlbMV0KKyAgICBpZiBjcHBfc3R5bGUuY2FuX2hhbmRsZShmaWxlbmFt
ZSwgZmlsZV9leHRlbnNpb24pIG9yIGZpbGVuYW1lID09ICctJzoKKyAgICAgICAgY3BwX3N0eWxl
LnByb2Nlc3NfZmlsZShmaWxlbmFtZSkKKyAgICBlbGlmIHRleHRfc3R5bGUuY2FuX2hhbmRsZShm
aWxlbmFtZSwgZmlsZV9leHRlbnNpb24pOgorICAgICAgICB0ZXh0X3N0eWxlLnByb2Nlc3NfZmls
ZShmaWxlbmFtZSkKKworCitkZWYgcHJvY2Vzc19wYXRjaChwYXRjaF9zdHJpbmcpOgorICAgICIi
IkRvZXMgbGludCBvbiBhIHNpbmdsZSBwYXRjaC4KKworICAgIEFyZ3M6CisgICAgICBwYXRjaF9z
dHJpbmc6IEEgc3RyaW5nIG9mIGEgcGF0Y2guCisgICAgIiIiCisgICAgcGF0Y2ggPSBEaWZmUGFy
c2VyKHBhdGNoX3N0cmluZy5zcGxpdGxpbmVzKCkpCisgICAgZm9yIGZpbGVuYW1lLCBkaWZmIGlu
IHBhdGNoLmZpbGVzLml0ZXJpdGVtcygpOgorICAgICAgICBmaWxlX2V4dGVuc2lvbiA9IG9zLnBh
dGguc3BsaXRleHQoZmlsZW5hbWUpWzFdCisgICAgICAgIGxpbmVfbnVtYmVycyA9IHNldCgpCisK
KyAgICAgICAgZGVmIGVycm9yX2Zvcl9wYXRjaChmaWxlbmFtZSwgbGluZV9udW1iZXIsIGNhdGVn
b3J5LCBjb25maWRlbmNlLCBtZXNzYWdlKToKKyAgICAgICAgICAgICIiIldyYXBwZXIgZnVuY3Rp
b24gb2YgY3BwX3N0eWxlLmVycm9yIGZvciBwYXRjaGVzLgorCisgICAgICAgICAgICBUaGlzIGZ1
bmN0aW9uIG91dHB1dHMgZXJyb3JzIG9ubHkgaWYgdGhlIGxpbmUgbnVtYmVyCisgICAgICAgICAg
ICBjb3JyZXNwb25kcyB0byBsaW5lcyB3aGljaCBhcmUgbW9kaWZpZWQgb3IgYWRkZWQuCisgICAg
ICAgICAgICAiIiIKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lX251bWJlcnM6CisgICAgICAgICAg
ICAgICAgZm9yIGxpbmUgaW4gZGlmZi5saW5lczoKKyAgICAgICAgICAgICAgICAgICAgIyBXaGVu
IGRlbGV0ZWQgbGluZSBpcyBub3Qgc2V0LCBpdCBtZWFucyB0aGF0CisgICAgICAgICAgICAgICAg
ICAgICMgdGhlIGxpbmUgaXMgbmV3bHkgYWRkZWQuCisgICAgICAgICAgICAgICAgICAgIGlmIG5v
dCBsaW5lWzBdOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9udW1iZXJzLmFkZChsaW5l
WzFdKQorCisgICAgICAgICAgICBpZiBsaW5lX251bWJlciBpbiBsaW5lX251bWJlcnM6CisgICAg
ICAgICAgICAgICAgY3BwX3N0eWxlLmVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgY2F0ZWdv
cnksIGNvbmZpZGVuY2UsIG1lc3NhZ2UpCisKKyAgICAgICAgaWYgY3BwX3N0eWxlLmNhbl9oYW5k
bGUoZmlsZW5hbWUsIGZpbGVfZXh0ZW5zaW9uKToKKyAgICAgICAgICAgIGNwcF9zdHlsZS5wcm9j
ZXNzX2ZpbGUoZmlsZW5hbWUsIGVycm9yPWVycm9yX2Zvcl9wYXRjaCkKKyAgICAgICAgZWxpZiB0
ZXh0X3N0eWxlLmNhbl9oYW5kbGUoZmlsZW5hbWUsIGZpbGVfZXh0ZW5zaW9uKToKKyAgICAgICAg
ICAgIHRleHRfc3R5bGUucHJvY2Vzc19maWxlKGZpbGVuYW1lLCBlcnJvcj1lcnJvcl9mb3JfcGF0
Y2gpCisKKworZGVmIGVycm9yX2NvdW50KCk6CisgICAgIiIiUmV0dXJucyB0aGUgdG90YWwgZXJy
b3IgY291bnQuIiIiCisgICAgcmV0dXJuIGNwcF9zdHlsZS5lcnJvcl9jb3VudCgpCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvdGV4dF9zdHlsZS5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvbW9kdWxlcy90ZXh0X3N0eWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjdkMTY4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL21vZHVsZXMvdGV4dF9zdHlsZS5weQpAQCAtMCwwICsxLDczIEBACisjIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworIiIiRG9lcyBXZWJLaXQtbGludCBvbiB0ZXh0IGZpbGVzLgorCitUaGlzIG1vZHVsZXMg
c2hhcmVzIGVycm9yIGNvdW50LCBmaWx0ZXIgc2V0dGluZywgb3V0cHV0IHNldHRpbmcsIGV0Yy4g
d2l0aCBjcHBfc3R5bGUuCisiIiIKKworaW1wb3J0IGNvZGVjcworaW1wb3J0IHN5cworCitpbXBv
cnQgY3BwX3N0eWxlCisKKworZGVmIHByb2Nlc3NfZmlsZV9kYXRhKGZpbGVuYW1lLCBsaW5lcywg
ZXJyb3IpOgorICAgICIiIlBlcmZvcm1zIGxpbnQgY2hlY2sgZm9yIHRleHQgb24gdGhlIHNwZWNp
ZmllZCBsaW5lcy4KKworICAgIEl0IHJlcG9ydHMgZXJyb3MgdG8gdGhlIGdpdmVuIGVycm9yIGZ1
bmN0aW9uLgorICAgICIiIgorICAgIGxpbmVzID0gKFsnLy8gYWRqdXN0IGxpbmUgbnVtYmVycyB0
byBtYWtlIHRoZSBmaXJzdCBsaW5lIDEuJ10gKyBsaW5lcykKKyAgICBmb3IgbGluZV9udW1iZXIs
IGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKToKKyAgICAgICAgaWYgJ1x0JyBpbiBsaW5lOgorICAg
ICAgICAgICAgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCAnd2hpdGVzcGFjZS90YWInLCA1
LCAnTGluZSBjb250YWlucyB0YWIgY2hhcmFjdGVyLicpCisKKworZGVmIHByb2Nlc3NfZmlsZShm
aWxlbmFtZSwgZXJyb3I9Y3BwX3N0eWxlLmVycm9yKToKKyAgICAiIiJQZXJmb3JtcyBsaW50IGNo
ZWNrIGZvciB0ZXh0IG9uIGEgc2luZ2xlIGZpbGUuIiIiCisgICAgdHJ5OgorICAgICAgICAjIERv
IG5vdCBzdXVwcm90IGZvciBmaWxlbmFtZT0nLS4gY3BwX3N0eWxlIGhhbmRsZXMgaXQuCisgICAg
ICAgIGxpbmVzID0gY29kZWNzLm9wZW4oZmlsZW5hbWUsICdyJywgJ3V0ZjgnLCAncmVwbGFjZScp
LnJlYWQoKS5zcGxpdCgnXG4nKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBzeXMuc3Rk
ZXJyLndyaXRlKCJTa2lwcGluZyBpbnB1dCAnJXMnOiBDYW4ndCBvcGVuIGZvciByZWFkaW5nXG4i
ICUgZmlsZW5hbWUpCisgICAgICAgIHJldHVybgorICAgIHByb2Nlc3NfZmlsZV9kYXRhKGZpbGVu
YW1lLCBsaW5lcywgZXJyb3IpCisKKworZGVmIGNhbl9oYW5kbGUoZmlsZW5hbWUsIGV4dGVuc2lv
bik6CisgICAgIiIiQ2hlY2tzIGlmIHRoaXMgbW9kdWxlIHN1cHBvcnRzIGZvciB0aGUgc3BlY2lm
aWVkIGZpbGUgdHlwZS4KKworICAgIEFyZ3M6CisgICAgICBmaWxlbmFtZTogQSBmaWxlbmFtZS4g
SXQgbWF5IGNvbnRhaW4gZGlyZWN0b3J5IG5hbWVzLgorICAgICAgZXh0ZW5zaW9uOiBUaGUgZXh0
ZW5zaW9uIHBhcnQgb2YgdGhlIGFib3ZlLiBJdCBzaG91bGQgYmUgYW4gZW1wdHkgc3RyaW5nCisg
ICAgICBpZiB0aGUgZmlsZW5hbWUgaGFzIG5vIGRvdCBpbiBpdHMgbmFtZSB3aXRob3V0IGRpcmVj
dG9yeSBuYW1lcy4gSXQgc2hvdWxkCisgICAgICBzdGFydCB3aXRoIGRvdCBpZiBpdCBpcyBub3Qg
ZW1wdHkuCisgICAgIiIiCisgICAgcmV0dXJuICgiQ2hhbmdlTG9nIiBpbiBmaWxlbmFtZQorICAg
ICAgICAgICAgb3IgIldlYktpdFRvb2xzL1NjcmlwdHMvIiBpbiBmaWxlbmFtZQorICAgICAgICAg
ICAgb3IgZXh0ZW5zaW9uIGluICgnLmNzcycsICcuaHRtbCcsICcuaWRsJywgJy5qcycsICcubW0n
LCAnLnBocCcsICcucG0nLCAnLnB5JywgJy50eHQnKSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvbW9kdWxlcy90ZXh0X3N0eWxlX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy9tb2R1bGVzL3RleHRfc3R5bGVfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uN2UyMzgwNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvbW9kdWxlcy90ZXh0X3N0eWxlX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsMTA5IEBACisj
IS91c3IvYmluL3B5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0Ogor
IworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlVuaXQgdGVzdCBmb3IgdGV4
dF9zdHlsZS5weS4iIiIKKworaW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCB0ZXh0X3N0eWxlCisK
KworY2xhc3MgVGV4dFN0eWxlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRl
c3RDYXNlIGZvciB0ZXh0X3N0eWxlLnB5IiIiCisKKyAgICBkZWYgYXNzZXJ0Tm9FcnJvcihzZWxm
LCBsaW5lcyk6CisgICAgICAgICIiIkFzc2VydHMgdGhhdCB0aGUgc3BlY2lmaWVkIGxpbmVzIGhh
cyBubyBlcnJvcnMuIiIiCisgICAgICAgIHNlbGYuaGFkX2Vycm9yID0gRmFsc2UKKworICAgICAg
ICBkZWYgZXJyb3JfZm9yX3Rlc3QoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBjYXRlZ29yeSwgY29u
ZmlkZW5jZSwgbWVzc2FnZSk6CisgICAgICAgICAgICAiIiJSZWNvcmRzIGlmIGFuIGVycm9yIG9j
Y3Vycy4iIiIKKyAgICAgICAgICAgIHNlbGYuaGFkX2Vycm9yID0gVHJ1ZQorCisgICAgICAgIHRl
eHRfc3R5bGUucHJvY2Vzc19maWxlX2RhdGEoJycsIGxpbmVzLCBlcnJvcl9mb3JfdGVzdCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRfKG5vdCBzZWxmLmhhZF9lcnJvciwgJyVzIHNob3VsZCBub3QgaGF2
ZSBhbnkgZXJyb3JzLicgJSBsaW5lcykKKworICAgIGRlZiBhc3NlcnRFcnJvcihzZWxmLCBsaW5l
cywgZXhwZWN0ZWRfbGluZV9udW1iZXIpOgorICAgICAgICAiIiJBc3NlcnRzIHRoYXQgdGhlIHNw
ZWNpZmllZCBsaW5lcyBoYXMgYW4gZXJyb3IuIiIiCisgICAgICAgIHNlbGYuaGFkX2Vycm9yID0g
RmFsc2UKKworICAgICAgICBkZWYgZXJyb3JfZm9yX3Rlc3QoZmlsZW5hbWUsIGxpbmVfbnVtYmVy
LCBjYXRlZ29yeSwgY29uZmlkZW5jZSwgbWVzc2FnZSk6CisgICAgICAgICAgICAiIiJDaGVja3Mg
aWYgdGhlIGV4cGVjdGVkIGVycm9yIG9jY3Vycy4iIiIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKGV4cGVjdGVkX2xpbmVfbnVtYmVyLCBsaW5lX251bWJlcikKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKCd3aGl0ZXNwYWNlL3RhYicsIGNhdGVnb3J5KQorICAgICAgICAgICAg
c2VsZi5oYWRfZXJyb3IgPSBUcnVlCisKKyAgICAgICAgdGV4dF9zdHlsZS5wcm9jZXNzX2ZpbGVf
ZGF0YSgnJywgbGluZXMsIGVycm9yX2Zvcl90ZXN0KQorICAgICAgICBzZWxmLmFzc2VydF8oc2Vs
Zi5oYWRfZXJyb3IsICclcyBzaG91bGQgaGF2ZSBhbiBlcnJvciBbd2hpdGVzcGFjZS90YWJdLicg
JSBsaW5lcykKKworCisgICAgZGVmIHRlc3Rfbm9fZXJyb3Ioc2VsZik6CisgICAgICAgICIiIlRl
c3RzIGZvciBubyBlcnJvciBjYXNlcy4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnROb0Vycm9yKFsn
J10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm9FcnJvcihbJ2FiYyBkZWYnLCAnZ2dnJ10pCisKKwor
ICAgIGRlZiB0ZXN0X2Vycm9yKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyBmb3IgZXJyb3IgY2Fz
ZXMuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXJyb3IoWycyMDA5LTEyLTE2XHRLZW50IFRhbXVy
YVx0PHRrZW50QGNocm9taXVtLm9yZz4nXSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcnJvcihb
JzIwMDktMTItMTYgS2VudCBUYW11cmEgPHRrZW50QGNocm9taXVtLm9yZz4nLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x0UmV2aWV3
ZWQgYnkgTk9CT0RZLiddLCAzKQorCisKKyAgICBkZWYgdGVzdF9jYW5faGFuZGxlKHNlbGYpOgor
ICAgICAgICAiIiJUZXN0cyBmb3IgdGV4dF9zdHlsZS5jYW5faGFuZGxlKCkuIiIiCisgICAgICAg
IHNlbGYuYXNzZXJ0Xyhub3QgdGV4dF9zdHlsZS5jYW5faGFuZGxlKCcnLCAnJykpCisgICAgICAg
IHNlbGYuYXNzZXJ0Xyhub3QgdGV4dF9zdHlsZS5jYW5faGFuZGxlKCctJywgJycpKQorICAgICAg
ICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdDaGFuZ2VMb2cnLCAnJykpCisg
ICAgICAgIHNlbGYuYXNzZXJ0Xyh0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ1dlYkNvcmUvQ2hhbmdl
TG9nJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdG
b29DaGFuZ2VMb2cuYmFrJywgJy5iYWsnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB0ZXh0
X3N0eWxlLmNhbl9oYW5kbGUoJ1dlYktpdFRvb2xzL1NjcmlwdHMnLCAnJykpCisgICAgICAgIHNl
bGYuYXNzZXJ0Xyh0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ1dlYktpdFRvb2xzL1NjcmlwdHMvY2hl
Y2std2Via2l0PXN0eWxlJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5j
YW5faGFuZGxlKCdXZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvdGV4dF9zdHlsZS5weScsICcu
cHknKSkKKworICAgICAgICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdmb28u
Y3NzJywgJy5jc3MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUuY2FuX2hhbmRs
ZSgnZm9vLmh0bWwnLCAnLmh0bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKHRleHRfc3R5bGUu
Y2FuX2hhbmRsZSgnZm9vLmlkbCcsICcuaWRsJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyh0ZXh0
X3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5qcycsICcuanMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRf
KHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLm1tJywgJy5tbScpKQorICAgICAgICBzZWxmLmFz
c2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdmb28ucGhwJywgJy5waHAnKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRfKHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnZm9vLnBtJywgJy5wbScpKQorICAg
ICAgICBzZWxmLmFzc2VydF8odGV4dF9zdHlsZS5jYW5faGFuZGxlKCdmb28ucHknLCAnLnB5Jykp
CisgICAgICAgIHNlbGYuYXNzZXJ0Xyh0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby50eHQnLCAn
LnR4dCcpKQorICAgICAgICBzZWxmLmFzc2VydF8obm90IHRleHRfc3R5bGUuY2FuX2hhbmRsZSgn
Zm9vLmMnLCAnLmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9o
YW5kbGUoJ2Zvby5jJywgJy5jcHAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB0ZXh0X3N0
eWxlLmNhbl9oYW5kbGUoJ2Zvby5jJywgJy5oJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qg
dGV4dF9zdHlsZS5jYW5faGFuZGxlKCdmb28ucG5nJywgJy5wbmcnKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRfKG5vdCB0ZXh0X3N0eWxlLmNhbl9oYW5kbGUoJ2Zvby5jL2Jhci5wbmcnLCAnLnBuZycp
KQorICAgICAgICBzZWxmLmFzc2VydF8obm90IHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnV2ViS2l0
L0VuZ2xpc2gubHByb2ovTG9jYWxpemFibGUuc3RyaW5ncycsICcuc3RyaW5ncycpKQorICAgICAg
ICBzZWxmLmFzc2VydF8obm90IHRleHRfc3R5bGUuY2FuX2hhbmRsZSgnTWFrZWZpbGUnLCAnJykp
CisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKLS0g
CjEuNi4zLjMKCg==
</data>
<flag name="review"
          id="26892"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="26949"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>