<?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>72566</bug_id>
          
          <creation_ts>2011-11-16 17:04:56 -0800</creation_ts>
          <short_desc>Add a list of contribution areas</short_desc>
          <delta_ts>2011-11-16 22:22:35 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          <blocked>72243</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>504414</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-16 17:04:56 -0800</bug_when>
    <thetext>In order to implement the first iteration of change log analyzer, we need a list of contribution areas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504421</commentid>
    <comment_count>1</comment_count>
      <attachid>115489</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-16 17:09:52 -0800</bug_when>
    <thetext>Created attachment 115489
Adds contributionareas.py</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504422</commentid>
    <comment_count>2</comment_count>
      <attachid>115489</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-16 17:13:36 -0800</bug_when>
    <thetext>Comment on attachment 115489
Adds contributionareas.py

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

&gt; Tools/Scripts/webkitpy/common/config/contributionareas.py:73
&gt; +USE_NAME = None

USE_NAME ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504426</commentid>
    <comment_count>3</comment_count>
      <attachid>115489</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-16 17:16:08 -0800</bug_when>
    <thetext>Comment on attachment 115489
Adds contributionareas.py

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

&gt; Tools/Scripts/webkitpy/common/config/contributionareas.py:51
&gt; +        self._tokens = []
&gt; +        for token in tokens:
&gt; +            if token == USE_NAME:
&gt; +                self._tokens.append(self._name_to_token(name))
&gt; +            else:
&gt; +                self._tokens.append(token)

You want to use map() for this I think.

&gt; Tools/Scripts/webkitpy/common/config/contributionareas.py:82
&gt; +    ContributionArea(&apos;ARM JIT&apos;, [&apos;arm&apos;]),
&gt; +# FIXME: &apos;Accelerated compositing / GPU acceleration&apos;
&gt; +    ContributionArea(&apos;Accessibility&apos;, [USE_NAME]),
&gt; +    ContributionArea(&apos;Android port&apos;, [&apos;android&apos;]),
&gt; +    ContributionArea(&apos;Animation&apos;, [USE_NAME, &apos;animator&apos;]),
&gt; +    ContributionArea(&apos;Apple\&apos;s Windows port&apos;, [&apos;win&apos;, &apos;windows&apos;]),  # FIXME: need to exclude chromium...
&gt; +    ContributionArea(&apos;Autotools Build&apos;, [&apos;autotools&apos;]),
&gt; +    ContributionArea(&apos;Basic types and data structures (WTF)&apos;, [&apos;wtf&apos;]),

I might have used _Area instead.  1. to indicate that it&apos;s private to this module 2. to make it shorter to read?

&gt; Tools/Scripts/webkitpy/common/config/contributionareas.py:92
&gt; +    ContributionArea(&apos;Cairo&apos;, [USE_NAME]),

Instead of of having this special &quot;USE_NAME&quot; value, I would have just had it automatically use the name when tokens is None.

&gt; Tools/Scripts/webkitpy/common/config/contributionareas_unittest.py:54
&gt; +        self._assert_areas_for_touched_files(areas, [&apos;WebCore/css/&apos;], [&apos;CSS&apos;])

Why the trailing / ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504429</commentid>
    <comment_count>4</comment_count>
      <attachid>115489</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-16 17:19:30 -0800</bug_when>
    <thetext>Comment on attachment 115489
Adds contributionareas.py

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

&gt; Tools/Scripts/webkitpy/common/config/contributionareas.py:44
&gt; +    def __init__(self, name, tokens):

Yeah, just give &apos;tokens&apos; a default value of = None and use the name when that&apos;s the case.  If folks need to specify the name + otehr directories, they should have to explicitly list the name as well.

Also, why is this &quot;tokens&quot; instead of &quot;directories&quot;?  Are the tokens used for some sort of regexp to possibly match many files/directories?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504437</commentid>
    <comment_count>5</comment_count>
      <attachid>115489</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-16 17:27:10 -0800</bug_when>
    <thetext>Comment on attachment 115489
Adds contributionareas.py

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

&gt;&gt; Tools/Scripts/webkitpy/common/config/contributionareas.py:73
&gt;&gt; +USE_NAME = None
&gt; 
&gt; USE_NAME ?

Means that the token is the contribution area name itself.

&gt;&gt; Tools/Scripts/webkitpy/common/config/contributionareas.py:92

&gt; 
&gt; Instead of of having this special &quot;USE_NAME&quot; value, I would have just had it automatically use the name when tokens is None.

I had to use both USE_NAME and &apos;animator&apos; for &apos;animation&apos; but I guess that&apos;s rare enough.

&gt;&gt; Tools/Scripts/webkitpy/common/config/contributionareas_unittest.py:54
&gt;&gt; +        self._assert_areas_for_touched_files(areas, [&apos;WebCore/css/&apos;], [&apos;CSS&apos;])
&gt; 
&gt; Why the trailing / ?

It shouldn&apos;t matter but I changed one of them to use / and omitted / from the rest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504441</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-16 17:28:55 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Also, why is this &quot;tokens&quot; instead of &quot;directories&quot;?  Are the tokens used for some sort of regexp to possibly match many files/directories?

Yes. This class is in its infancy :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504447</commentid>
    <comment_count>7</comment_count>
      <attachid>115492</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-16 17:32:14 -0800</bug_when>
    <thetext>Created attachment 115492
Fixed per comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504525</commentid>
    <comment_count>8</comment_count>
      <attachid>115492</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-16 19:58:51 -0800</bug_when>
    <thetext>Comment on attachment 115492
Fixed per comments

I may have lead you astray encouraging you to _ prefix your classes.  But this seems fine.  I&apos;m not sure I fully understand the Intersection class, but I&apos;m looking forward to see where this goes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504531</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-16 20:47:29 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 115492 [details])
&gt; I may have lead you astray encouraging you to _ prefix your classes.  But this seems fine.  I&apos;m not sure I fully understand the Intersection class, but I&apos;m looking forward to see where this goes.

_Intersection class is and&apos;s whereas _Area is or&apos;s. So if you have _Area(&apos;blah&apos;, [&apos;foo&apos;, &apos;bar&apos;]) then it&apos;ll match file paths that contain foo or bar whereas _Area(&apos;blah&apos;, [Intersection(&apos;foo&apos;, &apos;bar&apos;)]) only matches file paths that contain both foo and bar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504557</commentid>
    <comment_count>10</comment_count>
      <attachid>115492</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-16 22:22:29 -0800</bug_when>
    <thetext>Comment on attachment 115492
Fixed per comments

Clearing flags on attachment: 115492

Committed r100562: &lt;http://trac.webkit.org/changeset/100562&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504558</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-16 22:22:35 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115489</attachid>
            <date>2011-11-16 17:09:52 -0800</date>
            <delta_ts>2011-11-16 17:32:11 -0800</delta_ts>
            <desc>Adds contributionareas.py</desc>
            <filename>bug-72566-20111116170951.patch</filename>
            <type>text/plain</type>
            <size>14836</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwMDUzMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1IEBACisyMDExLTExLTE2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIEFkZCBhIGxpc3Qgb2YgY29udHJpYnV0aW9uIGFyZWFzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU2NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIENvbnRyaWJ1dGlvbkFyZWFz
IGNsYXNzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbnRy
aWJ1dGlvbmFyZWFzLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9jb25maWcvY29udHJpYnV0aW9uYXJlYXNfdW5pdHRlc3QucHk6IEFkZGVkLgorCiAyMDExLTEx
LTE2ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW05SV1RdIHNw
ZWN1bGF0aXZlIGZpeCBmb3IgbXVsdGlwbGUgc3VicHJvY2VzcyB0ZXN0IG9uIGN5Z3dpbgpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbnRyaWJ1dGlvbmFyZWFz
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9j
b250cmlidXRpb25hcmVhcy5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2NvbmZpZy9jb250cmlidXRpb25hcmVhcy5weQkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMTcgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgcmUKKworCitjbGFzcyBJbnRl
cnNlY3Rpb24ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKnRva2Vucyk6CisgICAg
ICAgIHNlbGYuX3Rva2VucyA9IHRva2VucworCisgICAgZGVmIG1hdGNoZXMoc2VsZiwgdG9rZW5z
KToKKyAgICAgICAgZm9yIHRva2VuIGluIHNlbGYuX3Rva2VuczoKKyAgICAgICAgICAgIGlmIHRv
a2VuIG5vdCBpbiB0b2tlbnMgYW5kICh0b2tlbiArICdzJykgbm90IGluIHRva2VuczoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitjbGFzcyBD
b250cmlidXRpb25BcmVhKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHRv
a2Vucyk6CisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX3Rva2VucyA9
IFtdCisgICAgICAgIGZvciB0b2tlbiBpbiB0b2tlbnM6CisgICAgICAgICAgICBpZiB0b2tlbiA9
PSBVU0VfTkFNRToKKyAgICAgICAgICAgICAgICBzZWxmLl90b2tlbnMuYXBwZW5kKHNlbGYuX25h
bWVfdG9fdG9rZW4obmFtZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNl
bGYuX3Rva2Vucy5hcHBlbmQodG9rZW4pCisKKyAgICBkZWYgX25hbWVfdG9fdG9rZW4oc2VsZiwg
d29yZCk6CisgICAgICAgIHRva2VuID0gd29yZC5sb3dlcigpCisgICAgICAgIHJldHVybiB0b2tl
bls6LTFdIGlmIHdvcmRbLTFdID09ICdzJyBlbHNlIHRva2VuCisKKyAgICBkZWYgbWF0Y2hlcyhz
ZWxmLCB0b2tlbnMpOgorICAgICAgICAjIEZJWE1FOiBTdXBwb3J0IHBsdXJhaXphdGlvbiBwcm9w
ZXJseQorICAgICAgICBmb3IgdG9rZW4gaW4gc2VsZi5fdG9rZW5zOgorICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZSh0b2tlbiwgSW50ZXJzZWN0aW9uKToKKyAgICAgICAgICAgICAgICBpZiB0b2tl
bi5tYXRjaGVzKHRva2Vucyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAg
ICAgICAgICBlbGlmIHRva2VuIGluIHRva2VucyBvciAodG9rZW4gKyAncycpIGluIHRva2VuczoK
KyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAg
IGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIHRv
a2VucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rva2VucworCitVU0VfTkFNRSA9IE5v
bmUKK2NvbnRyaWJ1dGlvbl9hcmVhcyA9IFsKKyAgICBDb250cmlidXRpb25BcmVhKCdBUk0gSklU
JywgWydhcm0nXSksCisjIEZJWE1FOiAnQWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgLyBHUFUgYWNj
ZWxlcmF0aW9uJworICAgIENvbnRyaWJ1dGlvbkFyZWEoJ0FjY2Vzc2liaWxpdHknLCBbVVNFX05B
TUVdKSwKKyAgICBDb250cmlidXRpb25BcmVhKCdBbmRyb2lkIHBvcnQnLCBbJ2FuZHJvaWQnXSks
CisgICAgQ29udHJpYnV0aW9uQXJlYSgnQW5pbWF0aW9uJywgW1VTRV9OQU1FLCAnYW5pbWF0b3In
XSksCisgICAgQ29udHJpYnV0aW9uQXJlYSgnQXBwbGVcJ3MgV2luZG93cyBwb3J0JywgWyd3aW4n
LCAnd2luZG93cyddKSwgICMgRklYTUU6IG5lZWQgdG8gZXhjbHVkZSBjaHJvbWl1bS4uLgorICAg
IENvbnRyaWJ1dGlvbkFyZWEoJ0F1dG90b29scyBCdWlsZCcsIFsnYXV0b3Rvb2xzJ10pLAorICAg
IENvbnRyaWJ1dGlvbkFyZWEoJ0Jhc2ljIHR5cGVzIGFuZCBkYXRhIHN0cnVjdHVyZXMgKFdURikn
LCBbJ3d0ZiddKSwKKyMgRklYTUU6ICdCaWRpcmVjdGlvbmFsIHRleHQnCisjIEZJWE1FOiAnQnVp
bGQvdGVzdCBpbmZyYXN0cnVjdHVyZSAoc3R1ZmYgdW5kZXIgVG9vbHMvU2NyaXB0cyknCisgICAg
Q29udHJpYnV0aW9uQXJlYSgnQ01ha2UgQnVpbGQnLCBbJ2NtYWtlbGlzdCddKSwKKyAgICBDb250
cmlidXRpb25BcmVhKCdDU1MgKENhc2NhZGluZyBTdHlsZSBTaGVldHMpJywgWydjc3MnXSksCisg
ICAgQ29udHJpYnV0aW9uQXJlYSgnQ1NTIFRyYW5zZm9ybXMnLCBbSW50ZXJzZWN0aW9uKCdjc3Mn
LCAndHJhbnNmb3JtcycpXSksCisgICAgQ29udHJpYnV0aW9uQXJlYSgnQ1NTL1NWRyBGaWx0ZXJz
JywgW0ludGVyc2VjdGlvbignY3NzJywgJ2ZpbHRlcnMnKSwgSW50ZXJzZWN0aW9uKCdzdmcnLCAn
ZmlsdGVycycpXSksCisgICAgQ29udHJpYnV0aW9uQXJlYSgnQ1VSTCBIVFRQIEJhY2tlbmQnLCBb
J0NVUkwnXSksCisgICAgQ29udHJpYnV0aW9uQXJlYSgnUmVzb3VyY2UgQ2FjaGUnLCBbSW50ZXJz
ZWN0aW9uKCdsb2FkZXInLCAnY2FjaGUnKV0pLAorICAgIENvbnRyaWJ1dGlvbkFyZWEoJ01lbW9y
eSBDYWNoZScsIFtJbnRlcnNlY3Rpb24oJ2dyYXBoaWNzJywgJ2NhY2hlJyldKSwKKyAgICBDb250
cmlidXRpb25BcmVhKCdDYWlybycsIFtVU0VfTkFNRV0pLAorICAgIENvbnRyaWJ1dGlvbkFyZWEo
J0NhbnZhcycsIFtVU0VfTkFNRV0pLAorICAgIENvbnRyaWJ1dGlvbkFyZWEoJ0Nocm9taXVtIExp
bnV4JywgW0ludGVyc2VjdGlvbignY2hyb21pdW0nLCAnbGludXgnKV0pLAorIyBGSVhNRTogJ0Nv
bW1pdCBRdWV1ZScKKyAgICBDb250cmlidXRpb25BcmVhKCdDb3JlIERPTScsIFsnZG9tJ10pLAor
ICAgIENvbnRyaWJ1dGlvbkFyZWEoJ0NvcmUgR3JhcGhpY3MnLCBbJ2NnJ10pLAorICAgIENvbnRy
aWJ1dGlvbkFyZWEoJ0JpbmRpbmdzJywgW1VTRV9OQU1FXSksCisgICAgQ29udHJpYnV0aW9uQXJl
YSgnRE9NIFN0b3JhZ2UnLCBbJ3N0b3JhZ2UnXSksCisgICAgQ29udHJpYnV0aW9uQXJlYSgnRHJh
ZyBhbmQgRHJvcCcsIFsnZHJhZyddKSwKKyAgICBDb250cmlidXRpb25BcmVhKCdEdW1wUmVuZGVy
VHJlZScsIFtVU0VfTkFNRV0pLAorICAgIENvbnRyaWJ1dGlvbkFyZWEoJ0VGTCcsIFsnZWZsJ10p
LAorICAgIENvbnRyaWJ1dGlvbkFyZWEoJ0VkaXRpbmcgLyBTZWxlY3Rpb24nLCBbJ2VkaXRpbmcn
XSksCisgICAgQ29udHJpYnV0aW9uQXJlYSgnRXZlbnQgSGFuZGxpbmcnLCBbJ2V2ZW50J10pLAor
ICAgIENvbnRyaWJ1dGlvbkFyZWEoJ0Zhc3RNYWxsb2MnLCBbVVNFX05BTUVdKSwKKyAgICBDb250
cmlidXRpb25BcmVhKCdGaWxlIEFQSScsIFsnZmlsZWFwaSddKSwKKyAgICBDb250cmlidXRpb25B
cmVhKCdGb250cycsIFtVU0VfTkFNRV0pLAorICAgIENvbnRyaWJ1dGlvbkFyZWEoJ0Zvcm1zJywg
W1VTRV9OQU1FXSksCisjIEZJWE1FOiAnRnJhbWUgRmxhdHRlbmluZycKKyAgICBDb250cmlidXRp
b25BcmVhKCdGcmFtZSBMb2FkZXInLCBbVVNFX05BTUVdKSwKKyMgRklYTUU6ICdHZW5lcmFsJyBN
YXliZSBhdXRvLWRldGVjdCBwZW9wbGUgY29udHJpYnV0aW5nIHRvIGFsbCBzdWJkaXJlY3Rvcmll
cz8KKyAgICBDb250cmlidXRpb25BcmVhKCdHZW9sb2NhdGlvbiBBUEknLCBbJ2dlb2xvY2F0aW9u
J10pLAorICAgIENvbnRyaWJ1dGlvbkFyZWEoJ0dyYXBoaWNzJywgWydncmFwaGljcyddKSwKKyAg
ICBDb250cmlidXRpb25BcmVhKCdIVE1MJywgWydodG1sJ10pLAorICAgIENvbnRyaWJ1dGlvbkFy
ZWEoJ0hUTUwgUGFyc2VyJywgW0ludGVyc2VjdGlvbignaHRtbCcsICdwYXJzZXInKV0pLCAgIyBG
SVhNRTogbWF0Y2hlcyBodG1sL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAKKyAgICBDb250cmlidXRp
b25BcmVhKCdIVE1MNSBNZWRpYSBTdXBwb3J0JywgWydtZWRpYSddKSwKKyAgICBDb250cmlidXRp
b25BcmVhKCdIaXN0b3J5JywgWydoaXN0b3J5J10pLAorIyBGSVhNRTogJ0hpdCB0ZXN0aW5nJwor
ICAgIENvbnRyaWJ1dGlvbkFyZWEoJ0ltYWdlIERlY29kZXInLCBbJ2ltYWdlZGVjb2RlciddKSwK
KyMgRklYTUU6ICdJbnB1dCBtZXRob2RzJworICAgIENvbnRyaWJ1dGlvbkFyZWEoJ0pTQyBCaW5k
aW5ncycsIFtJbnRlcnNlY3Rpb24oJ2JpbmRpbmdzJywgJ2pzJyldKSwKKyAgICBDb250cmlidXRp
b25BcmVhKCdKYXZhU2NyaXB0Q29yZScsIFtVU0VfTkFNRV0pLAorICAgIENvbnRyaWJ1dGlvbkFy
ZWEoJ0phdmFTY3JpcHRDb3JlIFJlZ3VsYXIgRXhwcmVzc2lvbnMnLCBbSW50ZXJzZWN0aW9uKCdK
YXZhU2NyaXB0Q29yZScsICdyZWdleHAnKV0pLAorIyBGSVhNRTogJ0xheW91dCB0ZXN0cycgYnV0
IHdoYXQgZG9lcyBpdCBtZWFuIHRvIHNheSB5b3UncmUgYW4gZXhwZXJ0IG9uIGxheW91dCB0ZXN0
cz8gTWF5YmUgd29ya2VkIG9uIHRvb2xzPworICAgIENvbnRyaWJ1dGlvbkFyZWEoJ0xvYWRlcics
IFsnbG9hZGVyJ10pLAorICAgIENvbnRyaWJ1dGlvbkFyZWEoJ01hdGhNTCcsIFtVU0VfTkFNRV0p
LAorICAgIENvbnRyaWJ1dGlvbkFyZWEoJ01lbW9yeSBVc2UgLyBMZWFrcycsIFsnbGVha3MnXSks
ICAjIFByb2JhYmx5IG5lZWQgbW9yZSB0b2tlbnMKKyAgICBDb250cmlidXRpb25BcmVhKCdNZXNz
YWdlUG9ydHMnLCBbVVNFX05BTUVdKSwKKyAgICBDb250cmlidXRpb25BcmVhKCdOZXR3b3JrJywg
W0ludGVyc2VjdGlvbigncGxhdGZvcm0nLCAnbmV0d29yaycpXSksCisgICAgQ29udHJpYnV0aW9u
QXJlYSgnbmV3LXJ1bi13ZWJraXQtdGVzdHMnLCBbJ2xheW91dF90ZXN0cyddKSwKKyAgICBDb250
cmlidXRpb25BcmVhKCdPcGVuVkcgZ3JhcGhpY3MgYmFja2VuZCcsIFsnb3BlbnZnJ10pLAorIyBG
SVhNRTogJ1BlcmZvcm1hbmNlJworICAgIENvbnRyaWJ1dGlvbkFyZWEoJ1BsdWctaW5zJywgWydw
bHVnaW5zJ10pLAorICAgIENvbnRyaWJ1dGlvbkFyZWEoJ1ByaW50aW5nJywgWydwcmludGluZycs
ICdwcmludCddKSwKKyAgICBDb250cmlidXRpb25BcmVhKCdSZW5kZXJpbmcnLCBbVVNFX05BTUVd
KSwKKyAgICBDb250cmlidXRpb25BcmVhKCdTVkcgKFNjYWxhYmxlIFZlY3RvciBHcmFwaGljcykn
LCBbJ3N2ZyddKSwKKyAgICBDb250cmlidXRpb25BcmVhKCdTY3JvbGxiYXJzJywgWydzY3JvbGwn
XSksCisgICAgQ29udHJpYnV0aW9uQXJlYSgnU2VjdXJpdHknLCBbVVNFX05BTUVdKSwgICMgUHJv
YmFibHkgbmVlZCBtb3JlIHRva2VucworIyBGSVhNRTogJ1NoYWRvdyBET00nCisgICAgQ29udHJp
YnV0aW9uQXJlYSgnU2tpYScsIFtVU0VfTkFNRV0pLAorICAgIENvbnRyaWJ1dGlvbkFyZWEoJ1Nv
dXAgTmV0d29yayBCYWNrZW5kJywgWydzb3VwJ10pLAorIyBGSVhNRTogJ1NwZWxsIENoZWNraW5n
JyBqdXN0IG5lZWQgdG9rZW5zCisgICAgQ29udHJpYnV0aW9uQXJlYSgnVGFibGVzJywgWydodG1s
dGFibGUnLCAncmVuZGVydGFibGUnXSksCisjIEZJWE1FOiAnVGV4dCBFbmNvZGluZycKKyMgRklY
TUU6ICdUZXh0IExheW91dCcKKyAgICBDb250cmlidXRpb25BcmVhKCdUaGUgQ2hyb21pdW0gUG9y
dCcsIFsnY2hyb21pdW0nXSksCisgICAgQ29udHJpYnV0aW9uQXJlYSgnVGhlIEVGTFdlYktpdCBQ
b3J0JywgWydlZmwnXSksCisgICAgQ29udHJpYnV0aW9uQXJlYSgnVGhlIFdlYktpdEdUSysgUG9y
dCcsIFsnZ3RrJ10pLAorICAgIENvbnRyaWJ1dGlvbkFyZWEoJ1RoZSBIYWlrdSBQb3J0JywgWydo
YWlrdSddKSwKKyAgICBDb250cmlidXRpb25BcmVhKCdUaGUgUXRXZWJLaXQgUG9ydCcsIFsncXQn
XSksCisgICAgQ29udHJpYnV0aW9uQXJlYSgnVGhlIFdpbkNFIFBvcnQnLCBbJ3dpbmNlJ10pLAor
ICAgIENvbnRyaWJ1dGlvbkFyZWEoJ1RoZSBXaW5DYWlybyBQb3J0JywgWydjYWlybyddKSwKKyAg
ICBDb250cmlidXRpb25BcmVhKCdUaGUgd3hXZWJLaXQgUG9ydCcsIFsnd3gnXSksCisgICAgQ29u
dHJpYnV0aW9uQXJlYSgnVGhyZWFkaW5nJywgWyd0aHJlYWQnXSksCisgICAgQ29udHJpYnV0aW9u
QXJlYSgnVG9vbHMnLCBbVVNFX05BTUVdKSwKKyAgICBDb250cmlidXRpb25BcmVhKCdUb3VjaCBT
dXBwb3J0JywgWyd0b3VjaCddKSwKKyAgICBDb250cmlidXRpb25BcmVhKCdUcmFuc2Zvcm1zJywg
Wyd0cmFuc2Zvcm1zJ10pLCAgIyBUaGVyZSdzIGFsc28gQ1NTIHRyYW5zZm9ybXMKKyAgICBDb250
cmlidXRpb25BcmVhKCdUcmFuc2l0aW9ucycsIFsndHJhbnNpdGlvbnMnXSksICAjIFRoaXMgb25s
eSBtYXRjaGVzIHRyYW5zaXRpb24gZXZlbnRzIGF0IHRoZSBtb21lbnQKKyAgICBDb250cmlidXRp
b25BcmVhKCdVUkwgUGFyc2luZycsIFsnS1VSTCddKSwgICMgUHJvYmFibHkgbmVlZCBtb3JlIHRv
a2VucworICAgIENvbnRyaWJ1dGlvbkFyZWEoJ1Y4JywgWyd2OCddKSwKKyAgICBDb250cmlidXRp
b25BcmVhKCdWOCBCaW5kaW5ncycsIFtJbnRlcnNlY3Rpb24oJ2JpbmRpbmdzJywgJ3Y4JyldKSwK
KyAgICBDb250cmlidXRpb25BcmVhKCdXZWIgSW5zcGVjdG9yIC8gRGV2ZWxvcGVyIFRvb2xzJywg
WydpbnNwZWN0b3InXSksCisgICAgQ29udHJpYnV0aW9uQXJlYSgnV2ViIFRpbWluZycsIFsnUGVy
Zm9ybWFuY2VOYXZpZ2F0aW9uJywgJ1BlcmZvcm1hbmNlVGltaW5nJ10pLCAgIyBtb3JlIHRva2Vu
cz8KKyAgICBDb250cmlidXRpb25BcmVhKCdXZWJBcmNoaXZlJywgW1VTRV9OQU1FXSksCisgICAg
Q29udHJpYnV0aW9uQXJlYSgnV2ViQ29yZSBJY29uIERhdGFiYXNlJywgWydpY29uJ10pLAorICAg
IENvbnRyaWJ1dGlvbkFyZWEoJ1dlYkdMJywgWyd3ZWJnbCddKSwKKyAgICBDb250cmlidXRpb25B
cmVhKCdXZWJLaXQgV2Vic2l0ZXMnLCBbJ3dlYnNpdGVzJ10pLAorICAgIENvbnRyaWJ1dGlvbkFy
ZWEoJ1dlYktpdDInLCBbVVNFX05BTUVdKSwKKyAgICBDb250cmlidXRpb25BcmVhKCdXZWJTUUwg
RGF0YWJhc2VzJywgW0ludGVyc2VjdGlvbignc3RvcmFnZScsICdkYXRhYmFzZScpXSksCisgICAg
Q29udHJpYnV0aW9uQXJlYSgnV2ViU29ja2V0cycsIFtVU0VfTkFNRV0pLAorICAgIENvbnRyaWJ1
dGlvbkFyZWEoJ1dvcmtlcnMnLCBbVVNFX05BTUVdKSwKKyAgICBDb250cmlidXRpb25BcmVhKCdY
TUwnLCBbVVNFX05BTUVdKSwKKyAgICBDb250cmlidXRpb25BcmVhKCdYTUxIdHRwUmVxdWVzdCcs
IFtVU0VfTkFNRV0pLAorICAgIENvbnRyaWJ1dGlvbkFyZWEoJ1hTTFQnLCBbVVNFX05BTUVdKSwK
KyAgICBDb250cmlidXRpb25BcmVhKCdYU1NBdWRpdG9yJywgW1VTRV9OQU1FXSksCisgICAgQ29u
dHJpYnV0aW9uQXJlYSgnV2ViS2l0IEFQSSBUZXN0cycsIFsnVGVzdFdlYktpdEFQSSddKSwKKyAg
ICBDb250cmlidXRpb25BcmVhKCd3ZWJraXQtcGF0Y2gnLCBbSW50ZXJzZWN0aW9uKCd3ZWJraXRw
eScsICdjb21tYW5kcycpXSksCitdCisKKworY2xhc3MgQ29udHJpYnV0aW9uQXJlYXMob2JqZWN0
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZXN5c3RlbSwgdGFibGU9Y29udHJpYnV0aW9u
X2FyZWFzKToKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW0KKyAgICAgICAg
c2VsZi5fY29udHJpYnV0aW9uX2FyZWFzID0gdGFibGUKKworICAgIGRlZiBfc3BsaXRfcGF0aChz
ZWxmLCBwYXRoKToKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgd2hpbGUgcGF0aCBhbmQg
bGVuKHBhdGgpOgorICAgICAgICAgICAgbmV4dF9wYXRoLCB0YWlsID0gc2VsZi5fZmlsZXN5c3Rl
bS5zcGxpdChwYXRoKQorICAgICAgICAgICAgaWYgcGF0aCA9PSBuZXh0X3BhdGg6CisgICAgICAg
ICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHRhaWwgYW5kIGxlbih0YWlsKToKKyAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRhaWwpCisgICAgICAgICAgICBwYXRoID0gbmV4dF9w
YXRoCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfc3BsaXRfY2FtZWxjYXNlKHNl
bGYsIG5hbWUsIHRyYW5zZm9ybT1sYW1iZGEgeDogeCk6CisgICAgICAgIHJlc3VsdCA9IFtdCisg
ICAgICAgIHdoaWxlIG5hbWUgYW5kIGxlbihuYW1lKToKKyAgICAgICAgICAgIG0gPSByZS5tYXRj
aCgnXihbQS1aXVthLXowLTldKyl8KFtBLVowLTldKyg/PShbQS1aXVthLXowLTldfFwufCQpKSkn
LCBuYW1lKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHRyYW5zZm9ybShtLmdyb3VwKDApKSkKKyAgICAgICAgICAgICAgICBuYW1lID0gbmFtZVttLmVu
ZCgpOl0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAor
ICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgYXJlYXNfZm9yX3RvdWNoZWRfZmlsZXMo
c2VsZiwgdG91Y2hlZF9maWxlcyk6CisgICAgICAgIGFyZWFzID0gc2V0KCkKKyAgICAgICAgZm9y
IGZpbGVfcGF0aCBpbiB0b3VjaGVkX2ZpbGVzOgorICAgICAgICAgICAgc3BsaXRfZmlsZV9wYXRo
ID0gc2VsZi5fc3BsaXRfcGF0aChmaWxlX3BhdGgpCisgICAgICAgICAgICB0b2tlbml6ZWRfZmls
ZV9wYXRoID0gTm9uZQorICAgICAgICAgICAgdG9rZW5pemVkX2ZpbGVfcGF0aCA9IHN1bShbc2Vs
Zi5fc3BsaXRfY2FtZWxjYXNlKHRva2VuLCBsYW1iZGEgeDogeC5sb3dlcigpKSBmb3IgdG9rZW4g
aW4gc3BsaXRfZmlsZV9wYXRoXSwgW10pCisgICAgICAgICAgICBmb3IgYXJlYSBpbiBzZWxmLl9j
b250cmlidXRpb25fYXJlYXM6CisgICAgICAgICAgICAgICAgaWYgYXJlYS5tYXRjaGVzKHNwbGl0
X2ZpbGVfcGF0aCkgb3IgYXJlYS5tYXRjaGVzKHRva2VuaXplZF9maWxlX3BhdGgpOgorICAgICAg
ICAgICAgICAgICAgICBhcmVhcy5hZGQoYXJlYS5uYW1lKCkpCisgICAgICAgIHJldHVybiBhcmVh
cwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbnRyaWJ1dGlv
bmFyZWFzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2NvbmZpZy9jb250cmlidXRpb25hcmVhc191bml0dGVzdC5weQkocmV2aXNpb24gMCkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9jb250cmlidXRpb25hcmVh
c191bml0dGVzdC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAorIyBDb3B5cmlnaHQg
KGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIC5jb250cmlidXRpb25hcmVhcyBpbXBvcnQg
SW50ZXJzZWN0aW9uCitmcm9tIC5jb250cmlidXRpb25hcmVhcyBpbXBvcnQgQ29udHJpYnV0aW9u
QXJlYQorZnJvbSAuY29udHJpYnV0aW9uYXJlYXMgaW1wb3J0IENvbnRyaWJ1dGlvbkFyZWFzCitm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2NrRmls
ZVN5c3RlbQorCisKK2NsYXNzIENvbnRyaWJ1dGlvbkFyZWFzVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CisKKyAgICBkZWYgdGVzdF9jb250cmlidXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoQ29udHJpYnV0aW9uQXJlYSgnQ1NTJywgW05vbmVdKS50b2tlbnMoKSwgWydjc3Mn
XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb250cmlidXRpb25BcmVhKCdGb3JtcycsIFsn
aW5wdXQnLCBOb25lXSkudG9rZW5zKCksIFsnaW5wdXQnLCAnZm9ybSddKQorCisgICAgZGVmIF9h
c3NlcnRfYXJlYXNfZm9yX3RvdWNoZWRfZmlsZXMoc2VsZiwgYXJlYXMsIGZpbGVzLCBleHBlY3Rl
ZF9hcmVhcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJlYXMuYXJlYXNfZm9yX3RvdWNo
ZWRfZmlsZXMoZmlsZXMpLCBzZXQoZXhwZWN0ZWRfYXJlYXMpKQorCisgICAgZGVmIHRlc3RfYXJl
YXNfZm9yX3RvdWNoZWRfZmlsZXMoc2VsZik6CisgICAgICAgIGFyZWFzID0gQ29udHJpYnV0aW9u
QXJlYXMoTW9ja0ZpbGVTeXN0ZW0oKSwgWworICAgICAgICAgICAgQ29udHJpYnV0aW9uQXJlYSgn
Q1NTJywgWydjc3MnXSksCisgICAgICAgICAgICBDb250cmlidXRpb25BcmVhKCdIVE1MJywgWydo
dG1sJ10pLAorICAgICAgICAgICAgQ29udHJpYnV0aW9uQXJlYSgnRm9ybXMnLCBbJ2Zvcm1zJywg
J2lucHV0J10pLAorICAgICAgICAgICAgQ29udHJpYnV0aW9uQXJlYSgnQ1NTIFRyYW5zZm9ybXMn
LCBbSW50ZXJzZWN0aW9uKCdjc3MnLCAndHJhbnNmb3JtcycpXSksCisgICAgICAgIF0pCisgICAg
ICAgIHNlbGYuX2Fzc2VydF9hcmVhc19mb3JfdG91Y2hlZF9maWxlcyhhcmVhcywgW10sIFtdKQor
ICAgICAgICBzZWxmLl9hc3NlcnRfYXJlYXNfZm9yX3RvdWNoZWRfZmlsZXMoYXJlYXMsIFsnV2Vi
Q29yZS9jc3MvJ10sIFsnQ1NTJ10pCisgICAgICAgIHNlbGYuX2Fzc2VydF9hcmVhc19mb3JfdG91
Y2hlZF9maWxlcyhhcmVhcywgWydXZWJDb3JlL2h0bWwvJ10sIFsnSFRNTCddKQorICAgICAgICBz
ZWxmLl9hc3NlcnRfYXJlYXNfZm9yX3RvdWNoZWRfZmlsZXMoYXJlYXMsIFsnV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5jcHAnLCAnV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50Lmgn
XSwgWydDU1MnLCAnSFRNTCddKQorICAgICAgICBzZWxmLl9hc3NlcnRfYXJlYXNfZm9yX3RvdWNo
ZWRfZmlsZXMoYXJlYXMsIFsnV2ViQ29yZS8nXSwgW10pCisgICAgICAgIHNlbGYuX2Fzc2VydF9h
cmVhc19mb3JfdG91Y2hlZF9maWxlcyhhcmVhcywgWydXZWJDb3JlL2h0bWwyLyddLCBbXSkKKyAg
ICAgICAgc2VsZi5fYXNzZXJ0X2FyZWFzX2Zvcl90b3VjaGVkX2ZpbGVzKGFyZWFzLCBbJ1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCddLCBbJ0hUTUwnLCAnRm9ybXMnXSkKKyAgICAg
ICAgc2VsZi5fYXNzZXJ0X2FyZWFzX2Zvcl90b3VjaGVkX2ZpbGVzKGFyZWFzLCBbJ1dlYkNvcmUv
c3ZnL3RyYW5zZm9ybXMnXSwgW10pCisgICAgICAgIHNlbGYuX2Fzc2VydF9hcmVhc19mb3JfdG91
Y2hlZF9maWxlcyhhcmVhcywgWydXZWJDb3JlL2Nzcy90cmFuc2Zvcm1zJ10sIFsnQ1NTJywgJ0NT
UyBUcmFuc2Zvcm1zJ10pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115492</attachid>
            <date>2011-11-16 17:32:14 -0800</date>
            <delta_ts>2011-11-16 22:22:29 -0800</delta_ts>
            <desc>Fixed per comments</desc>
            <filename>bug-72566-20111116173213.patch</filename>
            <type>text/plain</type>
            <size>13300</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwMDUzMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1IEBACisyMDExLTExLTE2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIEFkZCBhIGxpc3Qgb2YgY29udHJpYnV0aW9uIGFyZWFzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU2NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIENvbnRyaWJ1dGlvbkFyZWFz
IGNsYXNzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbnRy
aWJ1dGlvbmFyZWFzLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9jb25maWcvY29udHJpYnV0aW9uYXJlYXNfdW5pdHRlc3QucHk6IEFkZGVkLgorCiAyMDExLTEx
LTE2ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW05SV1RdIHNw
ZWN1bGF0aXZlIGZpeCBmb3IgbXVsdGlwbGUgc3VicHJvY2VzcyB0ZXN0IG9uIGN5Z3dpbgpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbnRyaWJ1dGlvbmFyZWFz
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9j
b250cmlidXRpb25hcmVhcy5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2NvbmZpZy9jb250cmlidXRpb25hcmVhcy5weQkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMTEgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgcmUKKworCitjbGFzcyBfSW50
ZXJzZWN0aW9uKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICp0b2tlbnMpOgorICAg
ICAgICBzZWxmLl90b2tlbnMgPSB0b2tlbnMKKworICAgIGRlZiBtYXRjaGVzKHNlbGYsIHRva2Vu
cyk6CisgICAgICAgIGZvciB0b2tlbiBpbiBzZWxmLl90b2tlbnM6CisgICAgICAgICAgICBpZiB0
b2tlbiBub3QgaW4gdG9rZW5zIGFuZCAodG9rZW4gKyAncycpIG5vdCBpbiB0b2tlbnM6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKworY2xhc3Mg
X0FyZWEob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgdG9rZW5zPU5vbmUp
OgorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl90b2tlbnMgPSB0b2tl
bnMgaWYgdG9rZW5zIGVsc2UgW3NlbGYuX25hbWVfdG9fdG9rZW4obmFtZSldCisKKyAgICBkZWYg
X25hbWVfdG9fdG9rZW4oc2VsZiwgd29yZCk6CisgICAgICAgIHRva2VuID0gd29yZC5sb3dlcigp
CisgICAgICAgIHJldHVybiB0b2tlbls6LTFdIGlmIHdvcmRbLTFdID09ICdzJyBlbHNlIHRva2Vu
CisKKyAgICBkZWYgbWF0Y2hlcyhzZWxmLCB0b2tlbnMpOgorICAgICAgICAjIEZJWE1FOiBTdXBw
b3J0IHBsdXJhaXphdGlvbiBwcm9wZXJseQorICAgICAgICBmb3IgdG9rZW4gaW4gc2VsZi5fdG9r
ZW5zOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0b2tlbiwgX0ludGVyc2VjdGlvbik6Cisg
ICAgICAgICAgICAgICAgaWYgdG9rZW4ubWF0Y2hlcyh0b2tlbnMpOgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxpZiB0b2tlbiBpbiB0b2tlbnMgb3IgKHRv
a2VuICsgJ3MnKSBpbiB0b2tlbnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAg
ICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX25hbWUKKworICAgIGRlZiB0b2tlbnMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90
b2tlbnMKKworY29udHJpYnV0aW9uX2FyZWFzID0gWworICAgIF9BcmVhKCdBUk0gSklUJywgWydh
cm0nXSksCisjIEZJWE1FOiAnQWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgLyBHUFUgYWNjZWxlcmF0
aW9uJworICAgIF9BcmVhKCdBY2Nlc3NpYmlsaXR5JyksCisgICAgX0FyZWEoJ0FuZHJvaWQgcG9y
dCcsIFsnYW5kcm9pZCddKSwKKyAgICBfQXJlYSgnQW5pbWF0aW9uJywgWydhbmltYXRpb24nLCAn
YW5pbWF0b3InXSksCisgICAgX0FyZWEoJ0FwcGxlXCdzIFdpbmRvd3MgcG9ydCcsIFsnd2luJywg
J3dpbmRvd3MnXSksICAjIEZJWE1FOiBuZWVkIHRvIGV4Y2x1ZGUgY2hyb21pdW0uLi4KKyAgICBf
QXJlYSgnQXV0b3Rvb2xzIEJ1aWxkJywgWydhdXRvdG9vbHMnXSksCisgICAgX0FyZWEoJ0Jhc2lj
IHR5cGVzIGFuZCBkYXRhIHN0cnVjdHVyZXMgKFdURiknLCBbJ3d0ZiddKSwKKyMgRklYTUU6ICdC
aWRpcmVjdGlvbmFsIHRleHQnCisjIEZJWE1FOiAnQnVpbGQvdGVzdCBpbmZyYXN0cnVjdHVyZSAo
c3R1ZmYgdW5kZXIgVG9vbHMvU2NyaXB0cyknCisgICAgX0FyZWEoJ0NNYWtlIEJ1aWxkJywgWydj
bWFrZWxpc3QnXSksCisgICAgX0FyZWEoJ0NTUyAoQ2FzY2FkaW5nIFN0eWxlIFNoZWV0cyknLCBb
J2NzcyddKSwKKyAgICBfQXJlYSgnQ1NTIFRyYW5zZm9ybXMnLCBbX0ludGVyc2VjdGlvbignY3Nz
JywgJ3RyYW5zZm9ybXMnKV0pLAorICAgIF9BcmVhKCdDU1MvU1ZHIEZpbHRlcnMnLCBbX0ludGVy
c2VjdGlvbignY3NzJywgJ2ZpbHRlcnMnKSwgX0ludGVyc2VjdGlvbignc3ZnJywgJ2ZpbHRlcnMn
KV0pLAorICAgIF9BcmVhKCdDVVJMIEhUVFAgQmFja2VuZCcsIFsnQ1VSTCddKSwKKyAgICBfQXJl
YSgnUmVzb3VyY2UgQ2FjaGUnLCBbX0ludGVyc2VjdGlvbignbG9hZGVyJywgJ2NhY2hlJyldKSwK
KyAgICBfQXJlYSgnTWVtb3J5IENhY2hlJywgW19JbnRlcnNlY3Rpb24oJ2dyYXBoaWNzJywgJ2Nh
Y2hlJyldKSwKKyAgICBfQXJlYSgnQ2Fpcm8nKSwKKyAgICBfQXJlYSgnQ2FudmFzJyksCisgICAg
X0FyZWEoJ0Nocm9taXVtIExpbnV4JywgW19JbnRlcnNlY3Rpb24oJ2Nocm9taXVtJywgJ2xpbnV4
JyldKSwKKyMgRklYTUU6ICdDb21taXQgUXVldWUnCisgICAgX0FyZWEoJ0NvcmUgRE9NJywgWydk
b20nXSksCisgICAgX0FyZWEoJ0NvcmUgR3JhcGhpY3MnLCBbJ2NnJ10pLAorICAgIF9BcmVhKCdC
aW5kaW5ncycpLAorICAgIF9BcmVhKCdET00gU3RvcmFnZScsIFsnc3RvcmFnZSddKSwKKyAgICBf
QXJlYSgnRHJhZyBhbmQgRHJvcCcsIFsnZHJhZyddKSwKKyAgICBfQXJlYSgnRHVtcFJlbmRlclRy
ZWUnKSwKKyAgICBfQXJlYSgnRUZMJywgWydlZmwnXSksCisgICAgX0FyZWEoJ0VkaXRpbmcgLyBT
ZWxlY3Rpb24nLCBbJ2VkaXRpbmcnXSksCisgICAgX0FyZWEoJ0V2ZW50IEhhbmRsaW5nJywgWydl
dmVudCddKSwKKyAgICBfQXJlYSgnRmFzdE1hbGxvYycpLAorICAgIF9BcmVhKCdGaWxlIEFQSScs
IFsnZmlsZWFwaSddKSwKKyAgICBfQXJlYSgnRm9udHMnKSwKKyAgICBfQXJlYSgnRm9ybXMnKSwK
KyMgRklYTUU6ICdGcmFtZSBGbGF0dGVuaW5nJworICAgIF9BcmVhKCdGcmFtZSBMb2FkZXInKSwK
KyMgRklYTUU6ICdHZW5lcmFsJyBNYXliZSBhdXRvLWRldGVjdCBwZW9wbGUgY29udHJpYnV0aW5n
IHRvIGFsbCBzdWJkaXJlY3Rvcmllcz8KKyAgICBfQXJlYSgnR2VvbG9jYXRpb24gQVBJJywgWydn
ZW9sb2NhdGlvbiddKSwKKyAgICBfQXJlYSgnR3JhcGhpY3MnLCBbJ2dyYXBoaWNzJ10pLAorICAg
IF9BcmVhKCdIVE1MJywgWydodG1sJ10pLAorICAgIF9BcmVhKCdIVE1MIFBhcnNlcicsIFtfSW50
ZXJzZWN0aW9uKCdodG1sJywgJ3BhcnNlcicpXSksICAjIEZJWE1FOiBtYXRjaGVzIGh0bWwvdHJh
Y2svV2ViVlRUUGFyc2VyLmNwcAorICAgIF9BcmVhKCdIVE1MNSBNZWRpYSBTdXBwb3J0JywgWydt
ZWRpYSddKSwKKyAgICBfQXJlYSgnSGlzdG9yeScsIFsnaGlzdG9yeSddKSwKKyMgRklYTUU6ICdI
aXQgdGVzdGluZycKKyAgICBfQXJlYSgnSW1hZ2UgRGVjb2RlcicsIFsnaW1hZ2VkZWNvZGVyJ10p
LAorIyBGSVhNRTogJ0lucHV0IG1ldGhvZHMnCisgICAgX0FyZWEoJ0pTQyBCaW5kaW5ncycsIFtf
SW50ZXJzZWN0aW9uKCdiaW5kaW5ncycsICdqcycpXSksCisgICAgX0FyZWEoJ0phdmFTY3JpcHRD
b3JlJyksCisgICAgX0FyZWEoJ0phdmFTY3JpcHRDb3JlIFJlZ3VsYXIgRXhwcmVzc2lvbnMnLCBb
X0ludGVyc2VjdGlvbignSmF2YVNjcmlwdENvcmUnLCAncmVnZXhwJyldKSwKKyMgRklYTUU6ICdM
YXlvdXQgdGVzdHMnIGJ1dCB3aGF0IGRvZXMgaXQgbWVhbiB0byBzYXkgeW91J3JlIGFuIGV4cGVy
dCBvbiBsYXlvdXQgdGVzdHM/IE1heWJlIHdvcmtlZCBvbiB0b29scz8KKyAgICBfQXJlYSgnTG9h
ZGVyJywgWydsb2FkZXInXSksCisgICAgX0FyZWEoJ01hdGhNTCcpLAorICAgIF9BcmVhKCdNZW1v
cnkgVXNlIC8gTGVha3MnLCBbJ2xlYWtzJ10pLCAgIyBQcm9iYWJseSBuZWVkIG1vcmUgdG9rZW5z
CisgICAgX0FyZWEoJ01lc3NhZ2VQb3J0cycpLAorICAgIF9BcmVhKCdOZXR3b3JrJywgW19JbnRl
cnNlY3Rpb24oJ3BsYXRmb3JtJywgJ25ldHdvcmsnKV0pLAorICAgIF9BcmVhKCduZXctcnVuLXdl
YmtpdC10ZXN0cycsIFsnbGF5b3V0X3Rlc3RzJ10pLAorICAgIF9BcmVhKCdPcGVuVkcgZ3JhcGhp
Y3MgYmFja2VuZCcsIFsnb3BlbnZnJ10pLAorIyBGSVhNRTogJ1BlcmZvcm1hbmNlJworICAgIF9B
cmVhKCdQbHVnLWlucycsIFsncGx1Z2lucyddKSwKKyAgICBfQXJlYSgnUHJpbnRpbmcnLCBbJ3By
aW50aW5nJywgJ3ByaW50J10pLAorICAgIF9BcmVhKCdSZW5kZXJpbmcnKSwKKyAgICBfQXJlYSgn
U1ZHIChTY2FsYWJsZSBWZWN0b3IgR3JhcGhpY3MpJywgWydzdmcnXSksCisgICAgX0FyZWEoJ1Nj
cm9sbGJhcnMnLCBbJ3Njcm9sbCddKSwKKyAgICBfQXJlYSgnU2VjdXJpdHknKSwgICMgUHJvYmFi
bHkgbmVlZCBtb3JlIHRva2VucworIyBGSVhNRTogJ1NoYWRvdyBET00nCisgICAgX0FyZWEoJ1Nr
aWEnKSwKKyAgICBfQXJlYSgnU291cCBOZXR3b3JrIEJhY2tlbmQnLCBbJ3NvdXAnXSksCisjIEZJ
WE1FOiAnU3BlbGwgQ2hlY2tpbmcnIGp1c3QgbmVlZCB0b2tlbnMKKyAgICBfQXJlYSgnVGFibGVz
JywgWydodG1sdGFibGUnLCAncmVuZGVydGFibGUnXSksCisjIEZJWE1FOiAnVGV4dCBFbmNvZGlu
ZycKKyMgRklYTUU6ICdUZXh0IExheW91dCcKKyAgICBfQXJlYSgnVGhlIENocm9taXVtIFBvcnQn
LCBbJ2Nocm9taXVtJ10pLAorICAgIF9BcmVhKCdUaGUgRUZMV2ViS2l0IFBvcnQnLCBbJ2VmbCdd
KSwKKyAgICBfQXJlYSgnVGhlIFdlYktpdEdUSysgUG9ydCcsIFsnZ3RrJ10pLAorICAgIF9BcmVh
KCdUaGUgSGFpa3UgUG9ydCcsIFsnaGFpa3UnXSksCisgICAgX0FyZWEoJ1RoZSBRdFdlYktpdCBQ
b3J0JywgWydxdCddKSwKKyAgICBfQXJlYSgnVGhlIFdpbkNFIFBvcnQnLCBbJ3dpbmNlJ10pLAor
ICAgIF9BcmVhKCdUaGUgV2luQ2Fpcm8gUG9ydCcsIFsnY2Fpcm8nXSksCisgICAgX0FyZWEoJ1Ro
ZSB3eFdlYktpdCBQb3J0JywgWyd3eCddKSwKKyAgICBfQXJlYSgnVGhyZWFkaW5nJywgWyd0aHJl
YWQnXSksCisgICAgX0FyZWEoJ1Rvb2xzJyksCisgICAgX0FyZWEoJ1RvdWNoIFN1cHBvcnQnLCBb
J3RvdWNoJ10pLAorICAgIF9BcmVhKCdUcmFuc2Zvcm1zJywgWyd0cmFuc2Zvcm1zJ10pLCAgIyBU
aGVyZSdzIGFsc28gQ1NTIHRyYW5zZm9ybXMKKyAgICBfQXJlYSgnVHJhbnNpdGlvbnMnLCBbJ3Ry
YW5zaXRpb25zJ10pLCAgIyBUaGlzIG9ubHkgbWF0Y2hlcyB0cmFuc2l0aW9uIGV2ZW50cyBhdCB0
aGUgbW9tZW50CisgICAgX0FyZWEoJ1VSTCBQYXJzaW5nJywgWydLVVJMJ10pLCAgIyBQcm9iYWJs
eSBuZWVkIG1vcmUgdG9rZW5zCisgICAgX0FyZWEoJ1Y4JywgWyd2OCddKSwKKyAgICBfQXJlYSgn
VjggQmluZGluZ3MnLCBbX0ludGVyc2VjdGlvbignYmluZGluZ3MnLCAndjgnKV0pLAorICAgIF9B
cmVhKCdXZWIgSW5zcGVjdG9yIC8gRGV2ZWxvcGVyIFRvb2xzJywgWydpbnNwZWN0b3InXSksCisg
ICAgX0FyZWEoJ1dlYiBUaW1pbmcnLCBbJ1BlcmZvcm1hbmNlTmF2aWdhdGlvbicsICdQZXJmb3Jt
YW5jZVRpbWluZyddKSwgICMgbW9yZSB0b2tlbnM/CisgICAgX0FyZWEoJ1dlYkFyY2hpdmUnKSwK
KyAgICBfQXJlYSgnV2ViQ29yZSBJY29uIERhdGFiYXNlJywgWydpY29uJ10pLAorICAgIF9BcmVh
KCdXZWJHTCcsIFsnd2ViZ2wnXSksCisgICAgX0FyZWEoJ1dlYktpdCBXZWJzaXRlcycsIFsnd2Vi
c2l0ZXMnXSksCisgICAgX0FyZWEoJ1dlYktpdDInKSwKKyAgICBfQXJlYSgnV2ViU1FMIERhdGFi
YXNlcycsIFtfSW50ZXJzZWN0aW9uKCdzdG9yYWdlJywgJ2RhdGFiYXNlJyldKSwKKyAgICBfQXJl
YSgnV2ViU29ja2V0cycpLAorICAgIF9BcmVhKCdXb3JrZXJzJyksCisgICAgX0FyZWEoJ1hNTCcp
LAorICAgIF9BcmVhKCdYTUxIdHRwUmVxdWVzdCcpLAorICAgIF9BcmVhKCdYU0xUJyksCisgICAg
X0FyZWEoJ1hTU0F1ZGl0b3InKSwKKyAgICBfQXJlYSgnV2ViS2l0IEFQSSBUZXN0cycsIFsnVGVz
dFdlYktpdEFQSSddKSwKKyAgICBfQXJlYSgnd2Via2l0LXBhdGNoJywgW19JbnRlcnNlY3Rpb24o
J3dlYmtpdHB5JywgJ2NvbW1hbmRzJyldKSwKK10KKworCitjbGFzcyBDb250cmlidXRpb25BcmVh
cyhvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlc3lzdGVtLCB0YWJsZT1jb250
cmlidXRpb25fYXJlYXMpOgorICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gZmlsZXN5c3RlbQor
ICAgICAgICBzZWxmLl9jb250cmlidXRpb25fYXJlYXMgPSB0YWJsZQorCisgICAgZGVmIF9zcGxp
dF9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICB3aGlsZSBw
YXRoIGFuZCBsZW4ocGF0aCk6CisgICAgICAgICAgICBuZXh0X3BhdGgsIHRhaWwgPSBzZWxmLl9m
aWxlc3lzdGVtLnNwbGl0KHBhdGgpCisgICAgICAgICAgICBpZiBwYXRoID09IG5leHRfcGF0aDoK
KyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgdGFpbCBhbmQgbGVuKHRhaWwp
OgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGFpbCkKKyAgICAgICAgICAgIHBhdGgg
PSBuZXh0X3BhdGgKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9zcGxpdF9jYW1l
bGNhc2Uoc2VsZiwgbmFtZSwgdHJhbnNmb3JtPWxhbWJkYSB4OiB4KToKKyAgICAgICAgcmVzdWx0
ID0gW10KKyAgICAgICAgd2hpbGUgbmFtZSBhbmQgbGVuKG5hbWUpOgorICAgICAgICAgICAgbSA9
IHJlLm1hdGNoKCdeKFtBLVpdW2EtejAtOV0rKXwoW0EtWjAtOV0rKD89KFtBLVpdW2EtejAtOV18
XC58JCkpKScsIG5hbWUpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQodHJhbnNmb3JtKG0uZ3JvdXAoMCkpKQorICAgICAgICAgICAgICAgIG5hbWUgPSBu
YW1lW20uZW5kKCk6XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0CisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBhcmVhc19mb3JfdG91Y2hl
ZF9maWxlcyhzZWxmLCB0b3VjaGVkX2ZpbGVzKToKKyAgICAgICAgYXJlYXMgPSBzZXQoKQorICAg
ICAgICBmb3IgZmlsZV9wYXRoIGluIHRvdWNoZWRfZmlsZXM6CisgICAgICAgICAgICBzcGxpdF9m
aWxlX3BhdGggPSBzZWxmLl9zcGxpdF9wYXRoKGZpbGVfcGF0aCkKKyAgICAgICAgICAgIHRva2Vu
aXplZF9maWxlX3BhdGggPSBOb25lCisgICAgICAgICAgICB0b2tlbml6ZWRfZmlsZV9wYXRoID0g
c3VtKFtzZWxmLl9zcGxpdF9jYW1lbGNhc2UodG9rZW4sIGxhbWJkYSB4OiB4Lmxvd2VyKCkpIGZv
ciB0b2tlbiBpbiBzcGxpdF9maWxlX3BhdGhdLCBbXSkKKyAgICAgICAgICAgIGZvciBhcmVhIGlu
IHNlbGYuX2NvbnRyaWJ1dGlvbl9hcmVhczoKKyAgICAgICAgICAgICAgICBpZiBhcmVhLm1hdGNo
ZXMoc3BsaXRfZmlsZV9wYXRoKSBvciBhcmVhLm1hdGNoZXModG9rZW5pemVkX2ZpbGVfcGF0aCk6
CisgICAgICAgICAgICAgICAgICAgIGFyZWFzLmFkZChhcmVhLm5hbWUoKSkKKyAgICAgICAgcmV0
dXJuIGFyZWFzCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvY29u
dHJpYnV0aW9uYXJlYXNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vY29uZmlnL2NvbnRyaWJ1dGlvbmFyZWFzX3VuaXR0ZXN0LnB5CShyZXZp
c2lvbiAwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL2NvbnRyaWJ1
dGlvbmFyZWFzX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxIEBACisjIENv
cHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
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
VUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gLmNvbnRyaWJ1dGlvbmFyZWFz
IGltcG9ydCBfSW50ZXJzZWN0aW9uCitmcm9tIC5jb250cmlidXRpb25hcmVhcyBpbXBvcnQgX0Fy
ZWEKK2Zyb20gLmNvbnRyaWJ1dGlvbmFyZWFzIGltcG9ydCBDb250cmlidXRpb25BcmVhcworZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVT
eXN0ZW0KKworCitjbGFzcyBDb250cmlidXRpb25BcmVhc1Rlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgorCisgICAgZGVmIHRlc3RfY29udHJpYnV0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKF9BcmVhKCdDU1MnKS50b2tlbnMoKSwgWydjc3MnXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChfQXJlYSgnRm9ybXMnLCBbJ2lucHV0J10pLnRva2VucygpLCBbJ2lucHV0J10pCisK
KyAgICBkZWYgX2Fzc2VydF9hcmVhc19mb3JfdG91Y2hlZF9maWxlcyhzZWxmLCBhcmVhcywgZmls
ZXMsIGV4cGVjdGVkX2FyZWFzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmVhcy5hcmVh
c19mb3JfdG91Y2hlZF9maWxlcyhmaWxlcyksIHNldChleHBlY3RlZF9hcmVhcykpCisKKyAgICBk
ZWYgdGVzdF9hcmVhc19mb3JfdG91Y2hlZF9maWxlcyhzZWxmKToKKyAgICAgICAgYXJlYXMgPSBD
b250cmlidXRpb25BcmVhcyhNb2NrRmlsZVN5c3RlbSgpLCBbCisgICAgICAgICAgICBfQXJlYSgn
Q1NTJyksCisgICAgICAgICAgICBfQXJlYSgnSFRNTCcpLAorICAgICAgICAgICAgX0FyZWEoJ0Zv
cm1zJywgWydmb3JtcycsICdpbnB1dCddKSwKKyAgICAgICAgICAgIF9BcmVhKCdDU1MgVHJhbnNm
b3JtcycsIFtfSW50ZXJzZWN0aW9uKCdjc3MnLCAndHJhbnNmb3JtcycpXSksCisgICAgICAgIF0p
CisgICAgICAgIHNlbGYuX2Fzc2VydF9hcmVhc19mb3JfdG91Y2hlZF9maWxlcyhhcmVhcywgW10s
IFtdKQorICAgICAgICBzZWxmLl9hc3NlcnRfYXJlYXNfZm9yX3RvdWNoZWRfZmlsZXMoYXJlYXMs
IFsnV2ViQ29yZS9jc3MnXSwgWydDU1MnXSkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2FyZWFzX2Zv
cl90b3VjaGVkX2ZpbGVzKGFyZWFzLCBbJ1dlYkNvcmUvaHRtbC8nXSwgWydIVE1MJ10pCisgICAg
ICAgIHNlbGYuX2Fzc2VydF9hcmVhc19mb3JfdG91Y2hlZF9maWxlcyhhcmVhcywgWydXZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCcsICdXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1l
bnQuaCddLCBbJ0NTUycsICdIVE1MJ10pCisgICAgICAgIHNlbGYuX2Fzc2VydF9hcmVhc19mb3Jf
dG91Y2hlZF9maWxlcyhhcmVhcywgWydXZWJDb3JlJ10sIFtdKQorICAgICAgICBzZWxmLl9hc3Nl
cnRfYXJlYXNfZm9yX3RvdWNoZWRfZmlsZXMoYXJlYXMsIFsnV2ViQ29yZS9odG1sMiddLCBbXSkK
KyAgICAgICAgc2VsZi5fYXNzZXJ0X2FyZWFzX2Zvcl90b3VjaGVkX2ZpbGVzKGFyZWFzLCBbJ1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCddLCBbJ0hUTUwnLCAnRm9ybXMnXSkKKyAg
ICAgICAgc2VsZi5fYXNzZXJ0X2FyZWFzX2Zvcl90b3VjaGVkX2ZpbGVzKGFyZWFzLCBbJ1dlYkNv
cmUvc3ZnL3RyYW5zZm9ybXMnXSwgW10pCisgICAgICAgIHNlbGYuX2Fzc2VydF9hcmVhc19mb3Jf
dG91Y2hlZF9maWxlcyhhcmVhcywgWydXZWJDb3JlL2Nzcy90cmFuc2Zvcm1zJ10sIFsnQ1NTJywg
J0NTUyBUcmFuc2Zvcm1zJ10pCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>