<?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>49513</bug_id>
          
          <creation_ts>2010-11-14 13:22:48 -0800</creation_ts>
          <short_desc>check-webkit-style should detect PassRefPtr usage in functions.</short_desc>
          <delta_ts>2010-11-14 17:17:54 -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>
          
          <blocked>49519</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Levin">levin</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>cjerdonek</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>hamaji</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>309103</commentid>
    <comment_count>0</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-14 13:22:48 -0800</bug_when>
    <thetext>This is a semi-common mistake for contributors so it would be good to detect it automatically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309104</commentid>
    <comment_count>1</comment_count>
      <attachid>73856</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-14 13:26:28 -0800</bug_when>
    <thetext>Created attachment 73856
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309116</commentid>
    <comment_count>2</comment_count>
      <attachid>73856</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-11-14 15:43:42 -0800</bug_when>
    <thetext>Comment on attachment 73856
Patch

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

&gt; WebKitTools/Scripts/webkitpy/style/checkers/cpp.py:1227
&gt; -    &quot;&quot;&quot;Reports for issues related to functions.
&gt; +    &quot;&quot;&quot;Reports for long function bodies.

For completeness,  this comment was recently changed in &lt;http://trac.webkit.org/changeset/71986&gt; from &quot;Reports for long function bodies&quot;  to &quot;Reports for issues related to functions&quot;. So, this patch is reverting to &quot;Reports for long function bodies&quot;, which is more descriptive of the purpose of this function.

&gt; WebKitTools/Scripts/webkitpy/style/checkers/cpp_unittest.py:227
&gt; +    # Similar to perform_function_lengths_check, but calls check_pass_ptr_usage
&gt; +    # instead of check_for_function_lengths.
&gt; +    def perform_pass_ptr_check(self, code):
&gt; +        error_collector = ErrorCollector(self.assert_)
&gt; +        function_state = cpp_style._FunctionState(self.min_confidence)
&gt; +        lines = code.split(&apos;\n&apos;)
&gt; +        cpp_style.remove_multi_line_comments(lines, error_collector)
&gt; +        lines = cpp_style.CleansedLines(lines)
&gt; +        for i in xrange(lines.num_lines()):
&gt; +            cpp_style.detect_functions(lines, i,
&gt; +                                       function_state, error_collector)
&gt; +            cpp_style.check_pass_ptr_usage(lines, i,
&gt; +                                           function_state, error_collector)
&gt; +        return error_collector.results()

This makes me sad :-(. As you pointed out in the comment, this code is almost identical to the code in CppStyleTestBase.perform_function_lengths_check().

Moreover, this code (or similarly structured code) seems to appear many times throughout cpp_unittest.py, including CppStyleTestBase.perform_single_line_lint(), CppStyleTestBase.perform_multi_line_lint(), CppStyleTestBase.perform_language_rules_check(), CppStyleTestBase.perform_function_lengths_check(), and CppStyleTestBase.perform_include_what_you_use(). It also shares a similar structure to CppChecker._process_lines().

Because this code appears in so many places we should try to factor out the common parts. We should consider using a strategy-like design pattern such that we define a function that takes both the source code and a callback function like:

def _process_lines(code, callback):
    error_collector = ErrorCollector(self.assert_)
    lines = code.split(&apos;\n&apos;)
    cpp_style.remove_multi_line_comments(lines, error_collector)
    lines = cpp_style.CleansedLines(lines)
    callback(lines, error_collector)
    return error_collector.results()

Then we could write perform_pass_ptr_check() as:

def perform_pass_ptr_check(self, code):
    function_state = cpp_style._FunctionState(self.min_confidence)
    def callback(lines, error_collector):
        for i in xrange(lines.num_lines()):
            cpp_style.detect_functions(lines, i, function_state, error_collector)
            cpp_style.check_pass_ptr_usage(lines, i, function_state, error_collector)
    return _process_lines(code, callback)

Similarly, we could clean up CppStyleTestBase.perform_single_line_lint(), CppStyleTestBase.perform_multi_line_lint(), CppStyleTestBase.perform_language_rules_check(), CppStyleTestBase.perform_function_lengths_check(), and CppStyleTestBase.perform_include_what_you_use().

It may be best to do this cleanup/refactoring in a separate bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309117</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-11-14 15:47:54 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 73856 [details])
&gt; [...]
&gt; def _process_lines(code, callback):
&gt;     error_collector = ErrorCollector(self.assert_)
&gt;     lines = code.split(&apos;\n&apos;)
&gt;     cpp_style.remove_multi_line_comments(lines, error_collector)
&gt;     lines = cpp_style.CleansedLines(lines)
&gt;     callback(lines, error_collector)
&gt;     return error_collector.results()
&gt; 

I meant to write the function prototype as: def _process_lines(self, code, callback). Even better if we could make this a class method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309125</commentid>
    <comment_count>4</comment_count>
      <attachid>73856</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-11-14 16:12:22 -0800</bug_when>
    <thetext>Comment on attachment 73856
Patch

Thank you David for filing bug #49519 to clean up the duplicate code.

This patch looks sane to me.

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309127</commentid>
    <comment_count>5</comment_count>
      <attachid>73856</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-14 16:16:40 -0800</bug_when>
    <thetext>Comment on attachment 73856
Patch

cq-, Will verbosify the ChangeLog a little :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309132</commentid>
    <comment_count>6</comment_count>
      <attachid>73864</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-14 16:43:25 -0800</bug_when>
    <thetext>Created attachment 73864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309133</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-14 16:45:50 -0800</bug_when>
    <thetext>Only changed the ChangeLog and added the word &quot;For&quot; here:
2748 class PassPtrTest(CppStyleTestBase):
2749     # For http://webkit.org/coding/RefPtr.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309139</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-14 17:16:43 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 73864:

inspector/elements-panel-xhtml-structure.xhtml

Please file bugs against the tests.  These tests were authored by apavlov@chromium.org and pfeldman@chromium.org.  The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309140</commentid>
    <comment_count>9</comment_count>
      <attachid>73864</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-14 17:17:48 -0800</bug_when>
    <thetext>Comment on attachment 73864
Patch

Clearing flags on attachment: 73864

Committed r71989: &lt;http://trac.webkit.org/changeset/71989&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309141</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-14 17:17:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73856</attachid>
            <date>2010-11-14 13:26:28 -0800</date>
            <delta_ts>2010-11-14 16:43:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49513-20101114132627.patch</filename>
            <type>text/plain</type>
            <size>7700</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAyMDM1YTI5MWI2NjRmOWU5OTlmMzA3NDY3NTM4ZTBhNjA4NWI3YmNiLi5hZWNhOGU3
NWYyNzdiOGIwMGRlMjM0MjRhY2U0MTJkYWExNzI0ZmY5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTUgQEAK
IDIwMTAtMTEtMTQgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgogCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGNoZWNrLXdlYmtpdC1zdHls
ZSBzaG91bGQgZGV0ZWN0IFBhc3NSZWZQdHIgdXNhZ2UgaW4gZnVuY3Rpb25zLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk1MTMKKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5OiBBZGRlZCB0aGUgY2hlY2sg
KGFuZCBtaW5vciBjb21tZW50IGZpeCkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHk6IEFkZGVkIHRlc3RzIGZvciB0aGUgbmV3IGZ1bmN0
aW9uYWxpdHkuCisKKzIwMTAtMTEtMTQgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3Jn
PgorCiAgICAgICAgIFJldmlld2VkIGJ5IFNoaW5pY2hpcm8gSGFtYWppLgogCiAgICAgICAgIGNo
ZWNrLXdlYmtpdC1zdHlsZSBmdW5jdGlvbiBkZXRlY3Rpb24gYW5kIHRoZSBsaW5lIGNvdW50IHN0
eWxlIGNoZWNrcyBzaG91bGQgYmUgc2VwYXJhdGUuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weSBiL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CmluZGV4IGQ1MDRlNGE1NmIzNzQ0NzVm
YmUxZjc5ZTIzMmUxMTY5ODQwZWI1MjkuLjU5MGJiYTkyZWQwYjAxYzhhNDkwNzY0MmJhM2Y0ZjE5
ZTk2YzI1NGUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlcnMvY3BwLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlcnMvY3BwLnB5CkBAIC0xMjI0LDcgKzEyMjQsNyBAQCBkZWYgZGV0ZWN0X2Z1bmN0aW9u
cyhjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZ1bmN0aW9uX3N0YXRlLCBlcnJvcik6CiAKIAog
ZGVmIGNoZWNrX2Zvcl9mdW5jdGlvbl9sZW5ndGhzKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwg
ZnVuY3Rpb25fc3RhdGUsIGVycm9yKToKLSAgICAiIiJSZXBvcnRzIGZvciBpc3N1ZXMgcmVsYXRl
ZCB0byBmdW5jdGlvbnMuCisgICAgIiIiUmVwb3J0cyBmb3IgbG9uZyBmdW5jdGlvbiBib2RpZXMu
CiAKICAgICBGb3IgYW4gb3ZlcnZpZXcgd2h5IHRoaXMgaXMgZG9uZSwgc2VlOgogICAgIGh0dHA6
Ly9nb29nbGUtc3R5bGVndWlkZS5nb29nbGVjb2RlLmNvbS9zdm4vdHJ1bmsvY3BwZ3VpZGUueG1s
I1dyaXRlX1Nob3J0X0Z1bmN0aW9ucwpAQCAtMTI1MSw2ICsxMjUxLDMyIEBAIGRlZiBjaGVja19m
b3JfZnVuY3Rpb25fbGVuZ3RocyhjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZ1bmN0aW9uX3N0
YXRlLCBlcnJvcik6CiAgICAgICAgIGZ1bmN0aW9uX3N0YXRlLmNvdW50KGxpbmVfbnVtYmVyKSAg
IyBDb3VudCBub24tYmxhbmsvbm9uLWNvbW1lbnQgbGluZXMuCiAKIAorZGVmIGNoZWNrX3Bhc3Nf
cHRyX3VzYWdlKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZnVuY3Rpb25fc3RhdGUsIGVycm9y
KToKKyAgICAiIiJDaGVjayBmb3IgcHJvcGVyIHVzYWdlIG9mIFBhc3MqUHRyLgorCisgICAgQ3Vy
cmVudGx5IHRoaXMgaXMgbGltaXRlZCB0byBkZXRlY3RpbmcgZGVjbGFyYXRpb25zIG9mIFBhc3Mq
UHRyCisgICAgdmFyaWFibGVzIGluc2lkZSBvZiBmdW5jdGlvbnMuCisKKyAgICBBcmdzOgorICAg
ICAgY2xlYW5fbGluZXM6IEEgQ2xlYW5zZWRMaW5lcyBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBm
aWxlLgorICAgICAgbGluZV9udW1iZXI6IFRoZSBudW1iZXIgb2YgdGhlIGxpbmUgdG8gY2hlY2su
CisgICAgICBmdW5jdGlvbl9zdGF0ZTogQ3VycmVudCBmdW5jdGlvbiBuYW1lIGFuZCBsaW5lcyBp
biBib2R5IHNvIGZhci4KKyAgICAgIGVycm9yOiBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGFu
eSBlcnJvcnMgZm91bmQuCisgICAgIiIiCisgICAgaWYgbm90IGZ1bmN0aW9uX3N0YXRlLmluX2Ff
ZnVuY3Rpb246CisgICAgICAgIHJldHVybgorCisgICAgbGluZXMgPSBjbGVhbl9saW5lcy5saW5l
cworICAgIGxpbmUgPSBsaW5lc1tsaW5lX251bWJlcl0KKyAgICBpZiBsaW5lX251bWJlciA+PSBm
dW5jdGlvbl9zdGF0ZS5ib2R5X3N0YXJ0X2xpbmVfbnVtYmVyOgorICAgICAgICBtYXRjaGVkX3Bh
c3NfcHRyID0gbWF0Y2gocideXHMqUGFzcyhbQS1aXVtBLVphLXpdKilQdHI8JywgbGluZSkKKyAg
ICAgICAgaWYgbWF0Y2hlZF9wYXNzX3B0cjoKKyAgICAgICAgICAgIHR5cGVfbmFtZSA9ICdQYXNz
JXNQdHInICUgbWF0Y2hlZF9wYXNzX3B0ci5ncm91cCgxKQorICAgICAgICAgICAgZXJyb3IobGlu
ZV9udW1iZXIsICdyZWFkYWJpbGl0eS9wYXNzX3B0cicsIDUsCisgICAgICAgICAgICAgICAgICAn
TG9jYWwgdmFyaWFibGVzIHNob3VsZCBuZXZlciBiZSAlcyAoc2VlICcKKyAgICAgICAgICAgICAg
ICAgICdodHRwOi8vd2Via2l0Lm9yZy9jb2RpbmcvUmVmUHRyLmh0bWwpLicgJSB0eXBlX25hbWUp
CisKKwogZGVmIGNoZWNrX3NwYWNpbmcoZmlsZV9leHRlbnNpb24sIGNsZWFuX2xpbmVzLCBsaW5l
X251bWJlciwgZXJyb3IpOgogICAgICIiIkNoZWNrcyBmb3IgdGhlIGNvcnJlY3RuZXNzIG9mIHZh
cmlvdXMgc3BhY2luZyBpc3N1ZXMgaW4gdGhlIGNvZGUuCiAKQEAgLTI5MzMsNiArMjk1OSw3IEBA
IGRlZiBwcm9jZXNzX2xpbmUoZmlsZW5hbWUsIGZpbGVfZXh0ZW5zaW9uLAogICAgIGNoZWNrX2Zv
cl9mdW5jdGlvbl9sZW5ndGhzKGNsZWFuX2xpbmVzLCBsaW5lLCBmdW5jdGlvbl9zdGF0ZSwgZXJy
b3IpCiAgICAgaWYgc2VhcmNoKHInXGJOT0xJTlRcYicsIHJhd19saW5lc1tsaW5lXSk6ICAjIGln
bm9yZSBub2xpbnQgbGluZXMKICAgICAgICAgcmV0dXJuCisgICAgY2hlY2tfcGFzc19wdHJfdXNh
Z2UoY2xlYW5fbGluZXMsIGxpbmUsIGZ1bmN0aW9uX3N0YXRlLCBlcnJvcikKICAgICBjaGVja19m
b3JfbXVsdGlsaW5lX2NvbW1lbnRzX2FuZF9zdHJpbmdzKGNsZWFuX2xpbmVzLCBsaW5lLCBlcnJv
cikKICAgICBjaGVja19zdHlsZShjbGVhbl9saW5lcywgbGluZSwgZmlsZV9leHRlbnNpb24sIGNs
YXNzX3N0YXRlLCBmaWxlX3N0YXRlLCBlcnJvcikKICAgICBjaGVja19sYW5ndWFnZShmaWxlbmFt
ZSwgY2xlYW5fbGluZXMsIGxpbmUsIGZpbGVfZXh0ZW5zaW9uLCBpbmNsdWRlX3N0YXRlLApAQCAt
MzAxNyw2ICszMDQ0LDcgQEAgY2xhc3MgQ3BwQ2hlY2tlcihvYmplY3QpOgogICAgICAgICAncmVh
ZGFiaWxpdHkvbXVsdGlsaW5lX3N0cmluZycsCiAgICAgICAgICdyZWFkYWJpbGl0eS9uYW1pbmcn
LAogICAgICAgICAncmVhZGFiaWxpdHkvbnVsbCcsCisgICAgICAgICdyZWFkYWJpbGl0eS9wYXNz
X3B0cicsCiAgICAgICAgICdyZWFkYWJpbGl0eS9zdHJlYW1zJywKICAgICAgICAgJ3JlYWRhYmls
aXR5L3RvZG8nLAogICAgICAgICAncmVhZGFiaWxpdHkvdXRmOCcsCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0
LnB5CmluZGV4IDkwMzFlZDg1ODgxOGM4M2ViODY1ZjllNTBlYzY0NzA4MjY1MTc4MzguLjhjOTQ1
ZmRiMjk2N2RlMGZlOTY2NTI4MTk4OGVhMmRmYTYwNjgxNGYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5CisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0
LnB5CkBAIC0yMTEsNiArMjExLDIxIEBAIGNsYXNzIENwcFN0eWxlVGVzdEJhc2UodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uX3N0YXRlLCBlcnJvcl9jb2xsZWN0b3IpCiAgICAgICAgIHJldHVybiBlcnJv
cl9jb2xsZWN0b3IucmVzdWx0cygpCiAKKyAgICAjIFNpbWlsYXIgdG8gcGVyZm9ybV9mdW5jdGlv
bl9sZW5ndGhzX2NoZWNrLCBidXQgY2FsbHMgY2hlY2tfcGFzc19wdHJfdXNhZ2UKKyAgICAjIGlu
c3RlYWQgb2YgY2hlY2tfZm9yX2Z1bmN0aW9uX2xlbmd0aHMuCisgICAgZGVmIHBlcmZvcm1fcGFz
c19wdHJfY2hlY2soc2VsZiwgY29kZSk6CisgICAgICAgIGVycm9yX2NvbGxlY3RvciA9IEVycm9y
Q29sbGVjdG9yKHNlbGYuYXNzZXJ0XykKKyAgICAgICAgZnVuY3Rpb25fc3RhdGUgPSBjcHBfc3R5
bGUuX0Z1bmN0aW9uU3RhdGUoc2VsZi5taW5fY29uZmlkZW5jZSkKKyAgICAgICAgbGluZXMgPSBj
b2RlLnNwbGl0KCdcbicpCisgICAgICAgIGNwcF9zdHlsZS5yZW1vdmVfbXVsdGlfbGluZV9jb21t
ZW50cyhsaW5lcywgZXJyb3JfY29sbGVjdG9yKQorICAgICAgICBsaW5lcyA9IGNwcF9zdHlsZS5D
bGVhbnNlZExpbmVzKGxpbmVzKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGluZXMubnVtX2xp
bmVzKCkpOgorICAgICAgICAgICAgY3BwX3N0eWxlLmRldGVjdF9mdW5jdGlvbnMobGluZXMsIGks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbl9zdGF0ZSwg
ZXJyb3JfY29sbGVjdG9yKQorICAgICAgICAgICAgY3BwX3N0eWxlLmNoZWNrX3Bhc3NfcHRyX3Vz
YWdlKGxpbmVzLCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uX3N0YXRlLCBlcnJvcl9jb2xsZWN0b3IpCisgICAgICAgIHJldHVybiBlcnJvcl9j
b2xsZWN0b3IucmVzdWx0cygpCisKICAgICBkZWYgcGVyZm9ybV9pbmNsdWRlX3doYXRfeW91X3Vz
ZShzZWxmLCBjb2RlLCBmaWxlbmFtZT0nZm9vLmgnLCBpbz1jb2RlY3MpOgogICAgICAgICAjIEZp
cnN0LCBidWlsZCB1cCB0aGUgaW5jbHVkZSBzdGF0ZS4KICAgICAgICAgZXJyb3JfY29sbGVjdG9y
ID0gRXJyb3JDb2xsZWN0b3Ioc2VsZi5hc3NlcnRfKQpAQCAtMjczMCw2ICsyNzQ1LDY1IEBAIGNs
YXNzIE5vTm9uVmlydHVhbERlc3RydWN0b3JzVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAgICAg
ICAgICAgICAndmlydHVhbCBtZXRob2QocyksIG9uZSBkZWNsYXJlZCBhdCBsaW5lIDIuICBbcnVu
dGltZS92aXJ0dWFsXSBbNF0nXSkKIAogCitjbGFzcyBQYXNzUHRyVGVzdChDcHBTdHlsZVRlc3RC
YXNlKToKKyAgICAjIGh0dHA6Ly93ZWJraXQub3JnL2NvZGluZy9SZWZQdHIuaHRtbAorCisgICAg
ZGVmIGFzc2VydF9wYXNzX3B0cl9jaGVjayhzZWxmLCBjb2RlLCBleHBlY3RlZF9tZXNzYWdlKToK
KyAgICAgICAgIiIiQ2hlY2sgd2FybmluZ3MgZm9yIFBhc3MqUHRyIGFyZSBhcyBleHBlY3RlZC4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgIGNvZGU6IEMrKyBzb3VyY2UgY29kZSBleHBlY3Rl
ZCB0byBnZW5lcmF0ZSBhIHdhcm5pbmcgbWVzc2FnZS4KKyAgICAgICAgICBleHBlY3RlZF9tZXNz
YWdlOiBNZXNzYWdlIGV4cGVjdGVkIHRvIGJlIGdlbmVyYXRlZCBieSB0aGUgQysrIGNvZGUuCisg
ICAgICAgICIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZF9tZXNzYWdlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fcGFzc19wdHJfY2hlY2soY29k
ZSkpCisKKyAgICBkZWYgdGVzdF9wYXNzX3JlZl9wdHJfaW5fZnVuY3Rpb24oc2VsZik6CisgICAg
ICAgICMgTG9jYWwgdmFyaWFibGVzIHNob3VsZCBuZXZlciBiZSBQYXNzUmVmUHRyLgorICAgICAg
ICBzZWxmLmFzc2VydF9wYXNzX3B0cl9jaGVjaygKKyAgICAgICAgICAgICdpbnQgbXlGdW5jdGlv
bigpXG4nCisgICAgICAgICAgICAne1xuJworICAgICAgICAgICAgJyAgICBQYXNzUmVmUHRyPFR5
cGUxPiB2YXJpYWJsZSA9IHZhcmlhYmxlMjtcbicKKyAgICAgICAgICAgICd9JywKKyAgICAgICAg
ICAgICdMb2NhbCB2YXJpYWJsZXMgc2hvdWxkIG5ldmVyIGJlIFBhc3NSZWZQdHIgKHNlZSAnCisg
ICAgICAgICAgICAnaHR0cDovL3dlYmtpdC5vcmcvY29kaW5nL1JlZlB0ci5odG1sKS4gIFtyZWFk
YWJpbGl0eS9wYXNzX3B0cl0gWzVdJykKKworICAgIGRlZiB0ZXN0X3Bhc3Nfb3duX3B0cl9pbl9m
dW5jdGlvbihzZWxmKToKKyAgICAgICAgIyBMb2NhbCB2YXJpYWJsZXMgc2hvdWxkIG5ldmVyIGJl
IFBhc3NSZWZQdHIuCisgICAgICAgIHNlbGYuYXNzZXJ0X3Bhc3NfcHRyX2NoZWNrKAorICAgICAg
ICAgICAgJ2ludCBteUZ1bmN0aW9uKClcbicKKyAgICAgICAgICAgICd7XG4nCisgICAgICAgICAg
ICAnICAgIFBhc3NPd25QdHI8VHlwZTE+IHZhcmlhYmxlID0gdmFyaWFibGUyO1xuJworICAgICAg
ICAgICAgJ30nLAorICAgICAgICAgICAgJ0xvY2FsIHZhcmlhYmxlcyBzaG91bGQgbmV2ZXIgYmUg
UGFzc093blB0ciAoc2VlICcKKyAgICAgICAgICAgICdodHRwOi8vd2Via2l0Lm9yZy9jb2Rpbmcv
UmVmUHRyLmh0bWwpLiAgW3JlYWRhYmlsaXR5L3Bhc3NfcHRyXSBbNV0nKQorCisgICAgZGVmIHRl
c3RfcGFzc19vdGhlcl90eXBlX3B0cl9pbl9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgIyBMb2Nh
bCB2YXJpYWJsZXMgc2hvdWxkIG5ldmVyIGJlIFBhc3NSZWZQdHIuCisgICAgICAgIHNlbGYuYXNz
ZXJ0X3Bhc3NfcHRyX2NoZWNrKAorICAgICAgICAgICAgJ2ludCBteUZ1bmN0aW9uKClcbicKKyAg
ICAgICAgICAgICd7XG4nCisgICAgICAgICAgICAnICAgIFBhc3NPdGhlclR5cGVQdHI8VHlwZTE+
IHZhcmlhYmxlO1xuJworICAgICAgICAgICAgJ30nLAorICAgICAgICAgICAgJ0xvY2FsIHZhcmlh
YmxlcyBzaG91bGQgbmV2ZXIgYmUgUGFzc090aGVyVHlwZVB0ciAoc2VlICcKKyAgICAgICAgICAg
ICdodHRwOi8vd2Via2l0Lm9yZy9jb2RpbmcvUmVmUHRyLmh0bWwpLiAgW3JlYWRhYmlsaXR5L3Bh
c3NfcHRyXSBbNV0nKQorCisgICAgZGVmIHRlc3RfcGFzc19yZWZfcHRyX3JldHVybl92YWx1ZShz
ZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfcGFzc19wdHJfY2hlY2soCisgICAgICAgICAgICAn
UGFzc1JlZlB0cjxUeXBlMT5cbicKKyAgICAgICAgICAgICdteUZ1bmN0aW9uKGludClcbicKKyAg
ICAgICAgICAgICd7XG4nCisgICAgICAgICAgICAnfScsCisgICAgICAgICAgICAnJykKKworICAg
IGRlZiB0ZXN0X3Bhc3NfcmVmX3B0cl9wYXJhbWV0ZXJfdmFsdWUoc2VsZik6CisgICAgICAgIHNl
bGYuYXNzZXJ0X3Bhc3NfcHRyX2NoZWNrKAorICAgICAgICAgICAgJ2ludCBteUZ1bmN0aW9uKFBh
c3NSZWZQdHI8VHlwZTE+KVxuJworICAgICAgICAgICAgJ3tcbicKKyAgICAgICAgICAgICd9JywK
KyAgICAgICAgICAgICcnKQorCisKIGNsYXNzIFdlYktpdFN0eWxlVGVzdChDcHBTdHlsZVRlc3RC
YXNlKToKIAogICAgICMgZm9yIGh0dHA6Ly93ZWJraXQub3JnL2NvZGluZy9jb2Rpbmctc3R5bGUu
aHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73864</attachid>
            <date>2010-11-14 16:43:25 -0800</date>
            <delta_ts>2010-11-14 17:17:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49513-20101114164324.patch</filename>
            <type>text/plain</type>
            <size>8113</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAyMDM1YTI5MWI2NjRmOWU5OTlmMzA3NDY3NTM4ZTBhNjA4NWI3YmNiLi40MmJiNDM5
M2NlNTM0MzY1MWEzYTEwMjI2MjdjOWY5NzQ3OTdmMzA3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjQgQEAK
IDIwMTAtMTEtMTQgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgogCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGNoZWNrLXdlYmtpdC1zdHls
ZSBzaG91bGQgZGV0ZWN0IFBhc3NSZWZQdHIgdXNhZ2UgaW4gZnVuY3Rpb25zLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk1MTMKKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5OgorICAgICAgICAoY2hlY2tf
Zm9yX2Z1bmN0aW9uX2xlbmd0aHMpOiBSZXZlcnQgYSBjb21tZW50IGNoYW5nZSB0aGF0IEkKKyAg
ICAgICAgIGFjY2lkZW50YWxseSBtYWRlIGluIHI3MTk4Ni4KKyAgICAgICAgKGNoZWNrX3Bhc3Nf
cHRyX3VzYWdlKTogQWRkZWQgdGhlIGNvZGUgdG8gZG8gdGhlIGNoZWNrLgorICAgICAgICAocHJv
Y2Vzc19saW5lKTogQWRkZWQgdGhlIGNhbGwgdG8gY2hlY2tfcGFzc19wdHJfdXNhZ2UuCisgICAg
ICAgIChDcHBDaGVja2VyKTogQWRkZWQgdGhlIG5ldyBlcnJvciBjYXRlZ29yeS4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weToKKyAgICAg
ICAgKENwcFN0eWxlVGVzdEJhc2U6OnBlcmZvcm1fcGFzc19wdHJfY2hlY2spOiBSdW5zIHRoZSBu
ZXcgY2hlY2sgZm9yCisgICAgICAgICB0ZXN0aW5nIHB1cnBvc2VzLgorICAgICAgICAoUGFzc1B0
clRlc3Q6OiopOiBUaGUgY2xhc3MvZnVuY3Rpb25zIHRvIHVuaXQgdGVzdCB0aGUgbmV3CisgICAg
ICAgICBmdW5jdGlvbmFsaXR5LgorCisyMDEwLTExLTE0ICBEYXZpZCBMZXZpbiAgPGxldmluQGNo
cm9taXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBTaGluaWNoaXJvIEhhbWFqaS4KIAog
ICAgICAgICBjaGVjay13ZWJraXQtc3R5bGUgZnVuY3Rpb24gZGV0ZWN0aW9uIGFuZCB0aGUgbGlu
ZSBjb3VudCBzdHlsZSBjaGVja3Mgc2hvdWxkIGJlIHNlcGFyYXRlLgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQppbmRleCBkNTA0ZTRh
NTZiMzc0NDc1ZmJlMWY3OWUyMzJlMTE2OTg0MGViNTI5Li41OTBiYmE5MmVkMGIwMWM4YTQ5MDc2
NDJiYTNmNGYxOWU5NmMyNTRlIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQpAQCAtMTIyNCw3ICsxMjI0LDcgQEAgZGVmIGRldGVj
dF9mdW5jdGlvbnMoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmdW5jdGlvbl9zdGF0ZSwgZXJy
b3IpOgogCiAKIGRlZiBjaGVja19mb3JfZnVuY3Rpb25fbGVuZ3RocyhjbGVhbl9saW5lcywgbGlu
ZV9udW1iZXIsIGZ1bmN0aW9uX3N0YXRlLCBlcnJvcik6Ci0gICAgIiIiUmVwb3J0cyBmb3IgaXNz
dWVzIHJlbGF0ZWQgdG8gZnVuY3Rpb25zLgorICAgICIiIlJlcG9ydHMgZm9yIGxvbmcgZnVuY3Rp
b24gYm9kaWVzLgogCiAgICAgRm9yIGFuIG92ZXJ2aWV3IHdoeSB0aGlzIGlzIGRvbmUsIHNlZToK
ICAgICBodHRwOi8vZ29vZ2xlLXN0eWxlZ3VpZGUuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rL2Nw
cGd1aWRlLnhtbCNXcml0ZV9TaG9ydF9GdW5jdGlvbnMKQEAgLTEyNTEsNiArMTI1MSwzMiBAQCBk
ZWYgY2hlY2tfZm9yX2Z1bmN0aW9uX2xlbmd0aHMoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBm
dW5jdGlvbl9zdGF0ZSwgZXJyb3IpOgogICAgICAgICBmdW5jdGlvbl9zdGF0ZS5jb3VudChsaW5l
X251bWJlcikgICMgQ291bnQgbm9uLWJsYW5rL25vbi1jb21tZW50IGxpbmVzLgogCiAKK2RlZiBj
aGVja19wYXNzX3B0cl91c2FnZShjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZ1bmN0aW9uX3N0
YXRlLCBlcnJvcik6CisgICAgIiIiQ2hlY2sgZm9yIHByb3BlciB1c2FnZSBvZiBQYXNzKlB0ci4K
KworICAgIEN1cnJlbnRseSB0aGlzIGlzIGxpbWl0ZWQgdG8gZGV0ZWN0aW5nIGRlY2xhcmF0aW9u
cyBvZiBQYXNzKlB0cgorICAgIHZhcmlhYmxlcyBpbnNpZGUgb2YgZnVuY3Rpb25zLgorCisgICAg
QXJnczoKKyAgICAgIGNsZWFuX2xpbmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFp
bmluZyB0aGUgZmlsZS4KKyAgICAgIGxpbmVfbnVtYmVyOiBUaGUgbnVtYmVyIG9mIHRoZSBsaW5l
IHRvIGNoZWNrLgorICAgICAgZnVuY3Rpb25fc3RhdGU6IEN1cnJlbnQgZnVuY3Rpb24gbmFtZSBh
bmQgbGluZXMgaW4gYm9keSBzbyBmYXIuCisgICAgICBlcnJvcjogVGhlIGZ1bmN0aW9uIHRvIGNh
bGwgd2l0aCBhbnkgZXJyb3JzIGZvdW5kLgorICAgICIiIgorICAgIGlmIG5vdCBmdW5jdGlvbl9z
dGF0ZS5pbl9hX2Z1bmN0aW9uOgorICAgICAgICByZXR1cm4KKworICAgIGxpbmVzID0gY2xlYW5f
bGluZXMubGluZXMKKyAgICBsaW5lID0gbGluZXNbbGluZV9udW1iZXJdCisgICAgaWYgbGluZV9u
dW1iZXIgPj0gZnVuY3Rpb25fc3RhdGUuYm9keV9zdGFydF9saW5lX251bWJlcjoKKyAgICAgICAg
bWF0Y2hlZF9wYXNzX3B0ciA9IG1hdGNoKHInXlxzKlBhc3MoW0EtWl1bQS1aYS16XSopUHRyPCcs
IGxpbmUpCisgICAgICAgIGlmIG1hdGNoZWRfcGFzc19wdHI6CisgICAgICAgICAgICB0eXBlX25h
bWUgPSAnUGFzcyVzUHRyJyAlIG1hdGNoZWRfcGFzc19wdHIuZ3JvdXAoMSkKKyAgICAgICAgICAg
IGVycm9yKGxpbmVfbnVtYmVyLCAncmVhZGFiaWxpdHkvcGFzc19wdHInLCA1LAorICAgICAgICAg
ICAgICAgICAgJ0xvY2FsIHZhcmlhYmxlcyBzaG91bGQgbmV2ZXIgYmUgJXMgKHNlZSAnCisgICAg
ICAgICAgICAgICAgICAnaHR0cDovL3dlYmtpdC5vcmcvY29kaW5nL1JlZlB0ci5odG1sKS4nICUg
dHlwZV9uYW1lKQorCisKIGRlZiBjaGVja19zcGFjaW5nKGZpbGVfZXh0ZW5zaW9uLCBjbGVhbl9s
aW5lcywgbGluZV9udW1iZXIsIGVycm9yKToKICAgICAiIiJDaGVja3MgZm9yIHRoZSBjb3JyZWN0
bmVzcyBvZiB2YXJpb3VzIHNwYWNpbmcgaXNzdWVzIGluIHRoZSBjb2RlLgogCkBAIC0yOTMzLDYg
KzI5NTksNyBAQCBkZWYgcHJvY2Vzc19saW5lKGZpbGVuYW1lLCBmaWxlX2V4dGVuc2lvbiwKICAg
ICBjaGVja19mb3JfZnVuY3Rpb25fbGVuZ3RocyhjbGVhbl9saW5lcywgbGluZSwgZnVuY3Rpb25f
c3RhdGUsIGVycm9yKQogICAgIGlmIHNlYXJjaChyJ1xiTk9MSU5UXGInLCByYXdfbGluZXNbbGlu
ZV0pOiAgIyBpZ25vcmUgbm9saW50IGxpbmVzCiAgICAgICAgIHJldHVybgorICAgIGNoZWNrX3Bh
c3NfcHRyX3VzYWdlKGNsZWFuX2xpbmVzLCBsaW5lLCBmdW5jdGlvbl9zdGF0ZSwgZXJyb3IpCiAg
ICAgY2hlY2tfZm9yX211bHRpbGluZV9jb21tZW50c19hbmRfc3RyaW5ncyhjbGVhbl9saW5lcywg
bGluZSwgZXJyb3IpCiAgICAgY2hlY2tfc3R5bGUoY2xlYW5fbGluZXMsIGxpbmUsIGZpbGVfZXh0
ZW5zaW9uLCBjbGFzc19zdGF0ZSwgZmlsZV9zdGF0ZSwgZXJyb3IpCiAgICAgY2hlY2tfbGFuZ3Vh
Z2UoZmlsZW5hbWUsIGNsZWFuX2xpbmVzLCBsaW5lLCBmaWxlX2V4dGVuc2lvbiwgaW5jbHVkZV9z
dGF0ZSwKQEAgLTMwMTcsNiArMzA0NCw3IEBAIGNsYXNzIENwcENoZWNrZXIob2JqZWN0KToKICAg
ICAgICAgJ3JlYWRhYmlsaXR5L211bHRpbGluZV9zdHJpbmcnLAogICAgICAgICAncmVhZGFiaWxp
dHkvbmFtaW5nJywKICAgICAgICAgJ3JlYWRhYmlsaXR5L251bGwnLAorICAgICAgICAncmVhZGFi
aWxpdHkvcGFzc19wdHInLAogICAgICAgICAncmVhZGFiaWxpdHkvc3RyZWFtcycsCiAgICAgICAg
ICdyZWFkYWJpbGl0eS90b2RvJywKICAgICAgICAgJ3JlYWRhYmlsaXR5L3V0ZjgnLApkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5p
dHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2Nw
cF91bml0dGVzdC5weQppbmRleCA5MDMxZWQ4NTg4MThjODNlYjg2NWY5ZTUwZWM2NDcwODI2NTE3
ODM4Li4xM2IwNTNjYmY0OTU0ZDgzMThkNzJjM2ExNzkxMjMyOGMyMjQ5NWRlIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVz
dC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2Nw
cF91bml0dGVzdC5weQpAQCAtMjExLDYgKzIxMSwyMSBAQCBjbGFzcyBDcHBTdHlsZVRlc3RCYXNl
KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbl9zdGF0ZSwgZXJyb3JfY29sbGVjdG9yKQogICAgICAgICBy
ZXR1cm4gZXJyb3JfY29sbGVjdG9yLnJlc3VsdHMoKQogCisgICAgIyBTaW1pbGFyIHRvIHBlcmZv
cm1fZnVuY3Rpb25fbGVuZ3Roc19jaGVjaywgYnV0IGNhbGxzIGNoZWNrX3Bhc3NfcHRyX3VzYWdl
CisgICAgIyBpbnN0ZWFkIG9mIGNoZWNrX2Zvcl9mdW5jdGlvbl9sZW5ndGhzLgorICAgIGRlZiBw
ZXJmb3JtX3Bhc3NfcHRyX2NoZWNrKHNlbGYsIGNvZGUpOgorICAgICAgICBlcnJvcl9jb2xsZWN0
b3IgPSBFcnJvckNvbGxlY3RvcihzZWxmLmFzc2VydF8pCisgICAgICAgIGZ1bmN0aW9uX3N0YXRl
ID0gY3BwX3N0eWxlLl9GdW5jdGlvblN0YXRlKHNlbGYubWluX2NvbmZpZGVuY2UpCisgICAgICAg
IGxpbmVzID0gY29kZS5zcGxpdCgnXG4nKQorICAgICAgICBjcHBfc3R5bGUucmVtb3ZlX211bHRp
X2xpbmVfY29tbWVudHMobGluZXMsIGVycm9yX2NvbGxlY3RvcikKKyAgICAgICAgbGluZXMgPSBj
cHBfc3R5bGUuQ2xlYW5zZWRMaW5lcyhsaW5lcykKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxp
bmVzLm51bV9saW5lcygpKToKKyAgICAgICAgICAgIGNwcF9zdHlsZS5kZXRlY3RfZnVuY3Rpb25z
KGxpbmVzLCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b25fc3RhdGUsIGVycm9yX2NvbGxlY3RvcikKKyAgICAgICAgICAgIGNwcF9zdHlsZS5jaGVja19w
YXNzX3B0cl91c2FnZShsaW5lcywgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbl9zdGF0ZSwgZXJyb3JfY29sbGVjdG9yKQorICAgICAgICByZXR1
cm4gZXJyb3JfY29sbGVjdG9yLnJlc3VsdHMoKQorCiAgICAgZGVmIHBlcmZvcm1faW5jbHVkZV93
aGF0X3lvdV91c2Uoc2VsZiwgY29kZSwgZmlsZW5hbWU9J2Zvby5oJywgaW89Y29kZWNzKToKICAg
ICAgICAgIyBGaXJzdCwgYnVpbGQgdXAgdGhlIGluY2x1ZGUgc3RhdGUuCiAgICAgICAgIGVycm9y
X2NvbGxlY3RvciA9IEVycm9yQ29sbGVjdG9yKHNlbGYuYXNzZXJ0XykKQEAgLTI3MzAsNiArMjc0
NSw2NSBAQCBjbGFzcyBOb05vblZpcnR1YWxEZXN0cnVjdG9yc1Rlc3QoQ3BwU3R5bGVUZXN0QmFz
ZSk6CiAgICAgICAgICAgICAgJ3ZpcnR1YWwgbWV0aG9kKHMpLCBvbmUgZGVjbGFyZWQgYXQgbGlu
ZSAyLiAgW3J1bnRpbWUvdmlydHVhbF0gWzRdJ10pCiAKIAorY2xhc3MgUGFzc1B0clRlc3QoQ3Bw
U3R5bGVUZXN0QmFzZSk6CisgICAgIyBGb3IgaHR0cDovL3dlYmtpdC5vcmcvY29kaW5nL1JlZlB0
ci5odG1sCisKKyAgICBkZWYgYXNzZXJ0X3Bhc3NfcHRyX2NoZWNrKHNlbGYsIGNvZGUsIGV4cGVj
dGVkX21lc3NhZ2UpOgorICAgICAgICAiIiJDaGVjayB3YXJuaW5ncyBmb3IgUGFzcypQdHIgYXJl
IGFzIGV4cGVjdGVkLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgY29kZTogQysrIHNvdXJj
ZSBjb2RlIGV4cGVjdGVkIHRvIGdlbmVyYXRlIGEgd2FybmluZyBtZXNzYWdlLgorICAgICAgICAg
IGV4cGVjdGVkX21lc3NhZ2U6IE1lc3NhZ2UgZXhwZWN0ZWQgdG8gYmUgZ2VuZXJhdGVkIGJ5IHRo
ZSBDKysgY29kZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVj
dGVkX21lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGVyZm9ybV9wYXNz
X3B0cl9jaGVjayhjb2RlKSkKKworICAgIGRlZiB0ZXN0X3Bhc3NfcmVmX3B0cl9pbl9mdW5jdGlv
bihzZWxmKToKKyAgICAgICAgIyBMb2NhbCB2YXJpYWJsZXMgc2hvdWxkIG5ldmVyIGJlIFBhc3NS
ZWZQdHIuCisgICAgICAgIHNlbGYuYXNzZXJ0X3Bhc3NfcHRyX2NoZWNrKAorICAgICAgICAgICAg
J2ludCBteUZ1bmN0aW9uKClcbicKKyAgICAgICAgICAgICd7XG4nCisgICAgICAgICAgICAnICAg
IFBhc3NSZWZQdHI8VHlwZTE+IHZhcmlhYmxlID0gdmFyaWFibGUyO1xuJworICAgICAgICAgICAg
J30nLAorICAgICAgICAgICAgJ0xvY2FsIHZhcmlhYmxlcyBzaG91bGQgbmV2ZXIgYmUgUGFzc1Jl
ZlB0ciAoc2VlICcKKyAgICAgICAgICAgICdodHRwOi8vd2Via2l0Lm9yZy9jb2RpbmcvUmVmUHRy
Lmh0bWwpLiAgW3JlYWRhYmlsaXR5L3Bhc3NfcHRyXSBbNV0nKQorCisgICAgZGVmIHRlc3RfcGFz
c19vd25fcHRyX2luX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICAjIExvY2FsIHZhcmlhYmxlcyBz
aG91bGQgbmV2ZXIgYmUgUGFzc1JlZlB0ci4KKyAgICAgICAgc2VsZi5hc3NlcnRfcGFzc19wdHJf
Y2hlY2soCisgICAgICAgICAgICAnaW50IG15RnVuY3Rpb24oKVxuJworICAgICAgICAgICAgJ3tc
bicKKyAgICAgICAgICAgICcgICAgUGFzc093blB0cjxUeXBlMT4gdmFyaWFibGUgPSB2YXJpYWJs
ZTI7XG4nCisgICAgICAgICAgICAnfScsCisgICAgICAgICAgICAnTG9jYWwgdmFyaWFibGVzIHNo
b3VsZCBuZXZlciBiZSBQYXNzT3duUHRyIChzZWUgJworICAgICAgICAgICAgJ2h0dHA6Ly93ZWJr
aXQub3JnL2NvZGluZy9SZWZQdHIuaHRtbCkuICBbcmVhZGFiaWxpdHkvcGFzc19wdHJdIFs1XScp
CisKKyAgICBkZWYgdGVzdF9wYXNzX290aGVyX3R5cGVfcHRyX2luX2Z1bmN0aW9uKHNlbGYpOgor
ICAgICAgICAjIExvY2FsIHZhcmlhYmxlcyBzaG91bGQgbmV2ZXIgYmUgUGFzc1JlZlB0ci4KKyAg
ICAgICAgc2VsZi5hc3NlcnRfcGFzc19wdHJfY2hlY2soCisgICAgICAgICAgICAnaW50IG15RnVu
Y3Rpb24oKVxuJworICAgICAgICAgICAgJ3tcbicKKyAgICAgICAgICAgICcgICAgUGFzc090aGVy
VHlwZVB0cjxUeXBlMT4gdmFyaWFibGU7XG4nCisgICAgICAgICAgICAnfScsCisgICAgICAgICAg
ICAnTG9jYWwgdmFyaWFibGVzIHNob3VsZCBuZXZlciBiZSBQYXNzT3RoZXJUeXBlUHRyIChzZWUg
JworICAgICAgICAgICAgJ2h0dHA6Ly93ZWJraXQub3JnL2NvZGluZy9SZWZQdHIuaHRtbCkuICBb
cmVhZGFiaWxpdHkvcGFzc19wdHJdIFs1XScpCisKKyAgICBkZWYgdGVzdF9wYXNzX3JlZl9wdHJf
cmV0dXJuX3ZhbHVlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9wYXNzX3B0cl9jaGVjaygK
KyAgICAgICAgICAgICdQYXNzUmVmUHRyPFR5cGUxPlxuJworICAgICAgICAgICAgJ215RnVuY3Rp
b24oaW50KVxuJworICAgICAgICAgICAgJ3tcbicKKyAgICAgICAgICAgICd9JywKKyAgICAgICAg
ICAgICcnKQorCisgICAgZGVmIHRlc3RfcGFzc19yZWZfcHRyX3BhcmFtZXRlcl92YWx1ZShzZWxm
KToKKyAgICAgICAgc2VsZi5hc3NlcnRfcGFzc19wdHJfY2hlY2soCisgICAgICAgICAgICAnaW50
IG15RnVuY3Rpb24oUGFzc1JlZlB0cjxUeXBlMT4pXG4nCisgICAgICAgICAgICAne1xuJworICAg
ICAgICAgICAgJ30nLAorICAgICAgICAgICAgJycpCisKKwogY2xhc3MgV2ViS2l0U3R5bGVUZXN0
KENwcFN0eWxlVGVzdEJhc2UpOgogCiAgICAgIyBmb3IgaHR0cDovL3dlYmtpdC5vcmcvY29kaW5n
L2NvZGluZy1zdHlsZS5odG1sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>