<?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>30651</bug_id>
          
          <creation_ts>2009-10-21 16:24:33 -0700</creation_ts>
          <short_desc>Crash when lot of nested tables are loaded</short_desc>
          <delta_ts>2009-11-17 21:24:34 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows Vista</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Rahul Kuchhal">kuchhal</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>hayato</cc>
    
    <cc>tkent</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>156699</commentid>
    <comment_count>0</comment_count>
    <who name="Rahul Kuchhal">kuchhal</who>
    <bug_when>2009-10-21 16:24:33 -0700</bug_when>
    <thetext>This is from http://code.google.com/p/chromium/issues/detail?id=20311

Safari also suffers a crash just like Chromium.

chrome_602e0000!WTF::HashTable&lt;WebCore::AtomicStringImpl *,WebCore::AtomicStringImpl *,WTF::IdentityExtractor&lt;WebCore::AtomicStringImpl *&gt;,WTF::PtrHash&lt;WebCore::AtomicStringImpl *&gt;,WTF::HashTraits&lt;WebCore::AtomicStringImpl *&gt;,WTF::HashTraits&lt;WebCore::AtomicStringImpl *&gt; &gt;::contains&lt;WebCore::AtomicStringImpl *,WTF::IdentityHashTranslator&lt;WebCore::AtomicStringImpl *,WebCore::AtomicStringImpl *,WTF::PtrHash&lt;WebCore::AtomicStringImpl *&gt; &gt; &gt;(class WebCore::AtomicStringImpl ** key = 0x00493034)+0x3
chrome_602e0000!WTF::HashTable&lt;WebCore::AtomicStringImpl *,WebCore::AtomicStringImpl *,WTF::IdentityExtractor&lt;WebCore::AtomicStringImpl *&gt;,WTF::PtrHash&lt;WebCore::AtomicStringImpl *&gt;,WTF::HashTraits&lt;WebCore::AtomicStringImpl *&gt;,WTF::HashTraits&lt;WebCore::AtomicStringImpl *&gt; &gt;::contains(class WebCore::AtomicStringImpl ** key = 0x00493034)+0x1a
chrome_602e0000!WTF::HashSet&lt;WebCore::AtomicStringImpl *,WTF::PtrHash&lt;WebCore::AtomicStringImpl *&gt;,WTF::HashTraits&lt;WebCore::AtomicStringImpl *&gt; &gt;::contains(class WebCore::AtomicStringImpl ** value = 0x00493034)+0x1a
chrome_602e0000!WebCore::HTMLParser::isAffectedByResidualStyle(class WebCore::AtomicString * tagName = 0x04489e20)+0x459
chrome_602e0000!WebCore::HTMLParser::popBlock(class WebCore::AtomicString * tagName = 0x04489e20, bool reportErrors = false)+0x118
chrome_602e0000!WebCore::HTMLParser::insertNode(class WebCore::Node * n = 0x0448fdc0, bool flat = false)+0xd1
chrome_602e0000!WebCore::HTMLParser::handleError(class WebCore::Node * n = 0x0448fdc0, bool flat = false, class WebCore::AtomicString * localName = 0x00f2306c, int tagPriority = 7)+0x1371
chrome_602e0000!WebCore::HTMLParser::insertNode(class WebCore::Node * n = 0x0448fdc0, bool flat = false)+0x173
chrome_602e0000!WebCore::HTMLParser::handleError(class WebCore::Node * n = 0x0448fdc0, bool flat = false, class WebCore::AtomicString * localName = 0x00f2306c, int tagPriority = 7)+0x1371
chrome_602e0000!WebCore::HTMLParser::insertNode(class WebCore::Node * n = 0x0448fdc0, bool flat = false)+0x173
chrome_602e0000!WebCore::HTMLParser::handleError(class WebCore::Node * n = 0x0448fdc0, bool flat = false, class WebCore::AtomicString * localName = 0x00f2306c, int tagPriority = 7)+0x1371
chrome_602e0000!WebCore::HTMLParser::insertNode(class WebCore::Node * n = 0x0448fdc0, bool flat = false)+0x173
chrome_602e0000!WebCore::HTMLParser::handleError(class WebCore::Node * n = 0x0448fdc0, bool flat = false, class WebCore::AtomicString * localName = 0x00f2306c, int tagPriority = 7)+0x1371
chrome_602e0000!WebCore::HTMLParser::insertNode(class WebCore::Node * n = 0x0448fdc0, bool flat = false)+0x173
chrome_602e0000!WebCore::HTMLParser::handleError(class WebCore::Node * n = 0x0448fdc0, bool flat = false, class WebCore::AtomicString * localName = 0x00f2306c, int tagPriority = 7)+0x1371
chrome_602e0000!WebCore::HTMLParser::insertNode(class WebCore::Node * n = 0x0448fdc0, bool flat = false)+0x173
chrome_602e0000!WebCore::HTMLParser::handleError(class WebCore::Node * n = 0x0448fdc0, bool flat = false, class WebCore::AtomicString * localName = 0x00f2306c, int tagPriority = 7)+0x1371
chrome_602e0000!WebCore::HTMLParser::insertNode(class WebCore::Node * n = 0x0448fdc0, bool flat = false)+0x173
chrome_602e0000!WebCore::HTMLParser::handleError(class WebCore::Node * n = 0x0448fdc0, bool flat = false, class WebCore::AtomicString * localName = 0x00f2306c, int tagPriority = 7)+0x1371
chrome_602e0000!WebCore::HTMLParser::insertNode(class WebCore::Node * n = 0x0448fdc0, bool flat = false)+0x173
chrome_602e0000!WebCore::HTMLParser::handleError(class WebCore::Node * n = 0x0448fdc0, bool flat = false, class WebCore::AtomicString * localName = 0x00f2306c, int tagPriority = 7)+0x1371
chrome_602e0000!WebCore::HTMLParser::insertNode(class WebCore::Node * n = 0x0448fdc0, bool flat = false)+0x173
chrome_602e0000!WebCore::HTMLParser::handleError(class WebCore::Node * n = 0x0448fdc0, bool flat = false, class WebCore::AtomicString * localName = 0x00f2306c, int tagPriority = 7)+0x1371
chrome_602e0000!WebCore::HTMLParser::insertNode(class WebCore::Node * n = 0x0448fdc0, bool flat = false)+0x173
chrome_602e0000!WebCore::HTMLParser::handleError(class WebCore::Node * n = 0x0448fdc0, bool flat = false, class WebCore::AtomicString * localName = 0x00f2306c, int tagPriority = 7)+0x1371
chrome_602e0000!WebCore::HTMLParser::insertNode(class WebCore::Node * n = 0x0448fdc0, bool flat = false)+0x173
chrome_602e0000!WebCore::HTMLParser::handleError(class WebCore::Node * n = 0x0448fdc0, bool flat = false, class WebCore::AtomicString * localName = 0x00f2306c, int tagPriority = 7)+0x1371
chrome_602e0000!WebCore::HTMLParser::insertNode(class WebCore::Node * n = 0x0448fdc0, bool flat = false)+0x173
chrome_602e0000!WebCore::HTMLParser::handleError(class WebCore::Node * n = 0x0448fdc0, bool flat = false, class WebCore::AtomicString * localName = 0x00f2306c, int tagPriority = 7)+0x1371
chrome_602e0000!WebCore::HTMLParser::insertNode(class WebCore::Node * n = 0x0448fdc0, bool flat = false)+0x173

Open the attached html to see the crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156701</commentid>
    <comment_count>1</comment_count>
      <attachid>41616</attachid>
    <who name="Rahul Kuchhal">kuchhal</who>
    <bug_when>2009-10-21 16:25:15 -0700</bug_when>
    <thetext>Created attachment 41616
html to reproduce crash</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161510</commentid>
    <comment_count>2</comment_count>
      <attachid>42735</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2009-11-08 23:13:52 -0800</bug_when>
    <thetext>Created attachment 42735
Fix infinite mutual recursion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161512</commentid>
    <comment_count>3</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2009-11-08 23:36:20 -0800</bug_when>
    <thetext>I figured out why this happens:

The root cause is infinite mutual recursive in HTMLParser.

1. Suppose HTMLParser&apos;s m_blockStack is in the following state:

   4095   tbody
   4094   table
   4093   td
   4092   tr
   4091   tbody
   4091   table
   ...

   And a next token to be processed is |tr|.

2. HTMLParser:insertNode(|tr|) is called.

   Before trying to insert |tr|, HTML:insertNode method checks whether m_blocksInStack reaches cMaxBlockDepth (=4096) or not.
   Because it reaches cMaxBlockDepth, the top emlement, |tbody|, is popped from the m_blockStack.

   m_blockStack is now in the following state:

   4095
   4094   table
   4093   td
   4092   tr
   4091   tbody
   4091   table
   ...

3. Try to insert |tr| element, but |tr| element must be a child of |tbody|. m_current-&gt;addChild(n) failed and handleError is called.

4. In HTML:handleError, a parent element of |tr| is deduced and |tbody| is pushed to m_blockStack.

  4095   tbody
  4094   table
  4093   td
  4092   tr
  4091   tbody
  4091   table
  ...


  Because the error is handled, insertNode(|tr|) is called *again* at the end of handleError.

5. Back to 1, causing infinite mutually recursive call between HTMLParser::insertNode and HTMLParser::handleErrors.


I&apos;ve created a patch to avoid the infinite mutual recursive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161627</commentid>
    <comment_count>4</comment_count>
      <attachid>42735</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-09 10:03:42 -0800</bug_when>
    <thetext>Comment on attachment 42735
Fix infinite mutual recursion

This will probably cause performance regression if it&apos;s not inlined. The insertNode function is quite hot, and calling a function for tagPriorityOfNode is probably going to make it too slow.

I&apos;m just going to say review- because it seems easy to mark it inline.

I think all three of these functions should be marked inline and put at the top of the file before calls to them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161864</commentid>
    <comment_count>5</comment_count>
      <attachid>42817</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2009-11-09 17:45:09 -0800</bug_when>
    <thetext>Created attachment 42817
Make three functions inline</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161871</commentid>
    <comment_count>6</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2009-11-09 17:48:13 -0800</bug_when>
    <thetext>Thank you for the review.
I made three functions inline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162787</commentid>
    <comment_count>7</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2009-11-11 21:05:33 -0800</bug_when>
    <thetext>Hi, darin

Could you review this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163346</commentid>
    <comment_count>8</comment_count>
      <attachid>42817</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-13 09:29:34 -0800</bug_when>
    <thetext>Comment on attachment 42817
Make three functions inline

r=me

The key here is performance. We&apos;ll need to carefully test to see this has not made parsing slower.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164412</commentid>
    <comment_count>9</comment_count>
      <attachid>42817</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-17 18:15:17 -0800</bug_when>
    <thetext>Comment on attachment 42817
Make three functions inline

Chromium performance bots should notice a perf change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164435</commentid>
    <comment_count>10</comment_count>
      <attachid>42817</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-11-17 21:02:30 -0800</bug_when>
    <thetext>Comment on attachment 42817
Make three functions inline

I&apos;m landing this patch manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164439</commentid>
    <comment_count>11</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-11-17 21:20:13 -0800</bug_when>
    <thetext>Committed r51101: &lt;http://trac.webkit.org/changeset/51101&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>41616</attachid>
            <date>2009-10-21 16:25:15 -0700</date>
            <delta_ts>2009-10-21 16:25:15 -0700</delta_ts>
            <desc>html to reproduce crash</desc>
            <filename>nested.html</filename>
            <type>text/html</type>
            <size>597</size>
            <attacher name="Rahul Kuchhal">kuchhal</attacher>
            
              <data encoding="base64">PGh0bWw+DQo8aGVhZD4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQ0KdGFibGUNCnsNCgli
b3JkZXI6IHNvbGlkIDFweCByZWQ7DQp9DQotLT48L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQ0KZnVuY3Rpb24gbmVzdGVkKCBkZXB0
aCwgbXNnICkNCnsNCglmb3IgKHZhciBpID0gMDsgaSA8IGRlcHRoOyArK2kpDQoJCWRvY3VtZW50
LndyaXRlKCAnPHRhYmxlPjx0cj48dGQ+JyApOw0KCWRvY3VtZW50LndyaXRlKCBkZXB0aCArICcg
TmVzdGVkIFRhYmxlczogJyArIG1zZyApOw0KCWZvciAodmFyIGkgPSAxOyBpIDwgZGVwdGg7ICsr
aSkNCgkJZG9jdW1lbnQud3JpdGUoICc8JyArICcvdHI+PCcgKyAnL3RkPjwnICsgJy90YWJsZT4n
ICk7DQoJZG9jdW1lbnQud3JpdGUoICdJbnNpZGUgJyArIGRlcHRoICsgJzogJyArIG1zZyArICc8
JyArICcvdHI+PCcgKyAnL3RkPjwnICsgJy90YWJsZT5PdXRzaWRlICcgKyBkZXB0aCArICc6ICcg
KyBtc2cgKTsNCn0NCm5lc3RlZCggMTAyNCwgIkZhaWxzIGluIENocm9tZSEiICk7DQovLy0tPjwv
c2NyaXB0Pg0KPC9ib2R5Pg0KPC9odG1sPg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42735</attachid>
            <date>2009-11-08 23:13:52 -0800</date>
            <delta_ts>2009-11-09 17:45:03 -0800</delta_ts>
            <desc>Fix infinite mutual recursion</desc>
            <filename>bug-30651-20091109161350.patch</filename>
            <type>text/plain</type>
            <size>7040</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmODBkZmY4Li5lN2Y3YWVhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMTEt
MDggIEhheWF0byBJdG8gIDxoYXlhdG9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdm9pZCBpbmZpbml0ZSBtdXR1YWwgcmVjdXJz
aW9uIHdoZW4gZGVlcGx5IG5lc3RlZCB0YWdzIGFyZSBsb2FkZWQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwNjUxCisKKyAgICAgICAgKiBmYXN0L3Bh
cnNlci9ibG9jay1uZXN0aW5nLWNhcC10YWJsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvcGFyc2VyL2Jsb2NrLW5lc3RpbmctY2FwLXRhYmxlLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvcGFyc2VyL3NjcmlwdC10ZXN0cy9ibG9jay1uZXN0aW5nLWNhcC10YWJsZS5q
czogQWRkZWQuCisKIDIwMDktMTEtMDIgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvcGFyc2VyL2Jsb2NrLW5lc3RpbmctY2FwLXRhYmxlLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvcGFyc2VyL2Jsb2NrLW5lc3RpbmctY2FwLXRhYmxl
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGZmYzE2
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9wYXJzZXIvYmxvY2stbmVzdGlu
Zy1jYXAtdGFibGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3QgdGhhdCB0aGUg
SFRNTCBwYXJzZXIgZG9lcyBub3QgYWxsb3cgdGhlIG5lc3RpbmcgZGVwdGggb2YgImJsb2NrLWxl
dmVsIiBlbGVtZW50cyB0byBleGNlZWQgNDA5NiB3aGVuIHVzaW5nIG5lc3RlZCB0YWJsZSB0YWcK
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgdDEwMjQucGFyZW50Tm9kZSA9
PT0gdGQxMDIyIGlzIHRydWUKK1BBU1MgdDEwMjMucGFyZW50Tm9kZSA9PT0gdGQxMDIyIGlzIHRy
dWUKK1BBU1MgdDEwMjQucHJldmlvdXNTaWJsaW5nID09PSB0MTAyMyBpcyB0cnVlCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9wYXJzZXIvYmxvY2stbmVzdGluZy1jYXAtdGFibGUuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvcGFyc2VyL2Jsb2NrLW5lc3RpbmctY2FwLXRhYmxlLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzNTE1ZQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvcGFyc2VyL2Jsb2NrLW5lc3RpbmctY2FwLXRhYmxlLmh0bWwKQEAg
LTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNj
cmlwdC10ZXN0cy9ibG9jay1uZXN0aW5nLWNhcC10YWJsZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3BhcnNlci9zY3JpcHQtdGVz
dHMvYmxvY2stbmVzdGluZy1jYXAtdGFibGUuanMgYi9MYXlvdXRUZXN0cy9mYXN0L3BhcnNlci9z
Y3JpcHQtdGVzdHMvYmxvY2stbmVzdGluZy1jYXAtdGFibGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYTM1M2I1OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvcGFyc2VyL3NjcmlwdC10ZXN0cy9ibG9jay1uZXN0aW5nLWNhcC10YWJsZS5qcwpAQCAt
MCwwICsxLDIwIEBACitkZXNjcmlwdGlvbignVGVzdCB0aGF0IHRoZSBIVE1MIHBhcnNlciBkb2Vz
IG5vdCBhbGxvdyB0aGUgbmVzdGluZyBkZXB0aCBvZiAiYmxvY2stbGV2ZWwiIGVsZW1lbnRzIHRv
IGV4Y2VlZCA0MDk2IHdoZW4gdXNpbmcgbmVzdGVkIHRhYmxlIHRhZycpOworCit2YXIgZGVwdGgg
PSAxMDI4OyAgLy8gPHRhYmxlPjx0Ym9keT48dHI+PHRkPiBjb25zdW1lcyA0IGJsb2Nrcy4gKDEw
MjggKiA0ID0gNDExMiA+IDQwOTYpLgordmFyIG1hcmt1cCA9ICIiOwordmFyIGk7Citmb3IgKGkg
PSAwOyBpIDwgZGVwdGg7ICsraSkKKyAgICBtYXJrdXAgKz0gIjx0YWJsZSBpZD0ndCIgKyBpICsg
Iic+PHRib2R5Pjx0cj48dGQgaWQ9J3RkIiArIGkgKyAiJz4iOwordmFyIGRvYyA9IGRvY3VtZW50
LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgpOworZG9jLmJvZHkuaW5uZXJIVE1M
ID0gbWFya3VwOworCit2YXIgdDEwMjMgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoInQxMDIzIik7Cit2
YXIgdDEwMjQgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoInQxMDI0Iik7CisKK3ZhciB0ZDEwMjIgPSBk
b2MuZ2V0RWxlbWVudEJ5SWQoInRkMTAyMiIpOworCitzaG91bGRCZSgidDEwMjQucGFyZW50Tm9k
ZSA9PT0gdGQxMDIyIiwgInRydWUiKTsKK3Nob3VsZEJlKCJ0MTAyMy5wYXJlbnROb2RlID09PSB0
ZDEwMjIiLCAidHJ1ZSIpOworc2hvdWxkQmUoInQxMDI0LnByZXZpb3VzU2libGluZyA9PT0gdDEw
MjMiLCAidHJ1ZSIpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2YxZTVmMC4u
NDNlYzE5NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAwOS0xMS0wOCAgSGF5YXRvIEl0byAgPGhheWF0b0Bn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEF2b2lkIGluZmluaXRlIG11dHVhbCByZWN1cnNpb24gd2hlbiBkZWVwbHkgbmVzdGVkIHRh
Z3MgYXJlIGxvYWRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzA2NTEKKworICAgICAgICBUZXN0OiBmYXN0L3BhcnNlci9ibG9jay1uZXN0aW5nLWNh
cC10YWJsZS5odG1sCisKKyAgICAgICAgKiBodG1sL0hUTUxQYXJzZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBhcnNlcjo6cGFyc2VUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjp0YWdQ
cmlvcml0eU9mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpsaW1pdEJsb2Nr
RGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZUFmdGVyTGlt
aXRCbG9ja0RlcHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6Omluc2VydE5vZGUp
OgorICAgICAgICAqIGh0bWwvSFRNTFBhcnNlci5oOgorCiAyMDA5LTExLTAxICBCcmlhbiBXZWlu
c3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBi
eSBNYXJrIFJvd2UuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAgYi9X
ZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAKaW5kZXggMWNiNDdhZS4uMjBiODFhOCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1M
UGFyc2VyLmNwcApAQCAtMjQxLDcgKzI0MSw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFBhcnNl
cjo6cGFyc2VUb2tlbihUb2tlbiogdCkKICAgICAgICAgd2hpbGUgKGNoYXJzTGVmdCkgewogICAg
ICAgICAgICAgLy8gc3BsaXQgbGFyZ2UgYmxvY2tzIG9mIHRleHQgdG8gbm9kZXMgb2YgbWFuYWdl
YWJsZSBzaXplCiAgICAgICAgICAgICBuID0gVGV4dDo6Y3JlYXRlV2l0aExlbmd0aExpbWl0KG1f
ZG9jdW1lbnQsIHRleHQsIGNoYXJzTGVmdCk7Ci0gICAgICAgICAgICBpZiAoIWluc2VydE5vZGUo
bi5nZXQoKSwgdC0+c2VsZkNsb3NpbmdUYWcpKQorICAgICAgICAgICAgaWYgKCFpbnNlcnROb2Rl
QWZ0ZXJMaW1pdEJsb2NrRGVwdGgobi5nZXQoKSwgdC0+c2VsZkNsb3NpbmdUYWcpKQogICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBuOwpAQCAtMjcx
LDcgKzI3MSw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFBhcnNlcjo6cGFyc2VUb2tlbihUb2tl
biogdCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghaW5zZXJ0Tm9kZShuLmdldCgpLCB0
LT5zZWxmQ2xvc2luZ1RhZykpIHsKKyAgICBpZiAoIWluc2VydE5vZGVBZnRlckxpbWl0QmxvY2tE
ZXB0aChuLmdldCgpLCB0LT5zZWxmQ2xvc2luZ1RhZykpIHsKICAgICAgICAgLy8gd2UgY291bGRu
J3QgaW5zZXJ0IHRoZSBub2RlCiAKICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewpA
QCAtMzI0LDI2ICszMjQsNDEgQEAgc3RhdGljIGJvb2wgaXNTY29waW5nVGFnKGNvbnN0IEF0b21p
Y1N0cmluZyYgdGFnTmFtZSkKICAgICByZXR1cm4gdGFnTmFtZSA9PSBhcHBsZXRUYWcgfHwgdGFn
TmFtZSA9PSBjYXB0aW9uVGFnIHx8IHRhZ05hbWUgPT0gdGRUYWcgfHwgdGFnTmFtZSA9PSB0aFRh
ZyB8fCB0YWdOYW1lID09IGJ1dHRvblRhZyB8fCB0YWdOYW1lID09IG1hcnF1ZWVUYWcgfHwgdGFn
TmFtZSA9PSBvYmplY3RUYWcgfHwgdGFnTmFtZSA9PSB0YWJsZVRhZyB8fCB0YWdOYW1lID09IGh0
bWxUYWc7CiB9CiAKK3N0YXRpYyBpbnQgdGFnUHJpb3JpdHlPZk5vZGUoTm9kZSogbikKK3sKKyAg
ICByZXR1cm4gbi0+aXNIVE1MRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihu
KS0+dGFnUHJpb3JpdHkoKSA6IDA7Cit9CisKK3ZvaWQgSFRNTFBhcnNlcjo6bGltaXRCbG9ja0Rl
cHRoKGludCB0YWdQcmlvcml0eSkKK3sKKyAgICBpZiAodGFnUHJpb3JpdHkgPj0gbWluQmxvY2tM
ZXZlbFRhZ1ByaW9yaXR5KSB7CisgICAgICAgIHdoaWxlIChtX2Jsb2Nrc0luU3RhY2sgPj0gY01h
eEJsb2NrRGVwdGgpCisgICAgICAgICAgICBwb3BCbG9jayhtX2Jsb2NrU3RhY2stPnRhZ05hbWUp
OworICAgIH0KK30KKworYm9vbCBIVE1MUGFyc2VyOjppbnNlcnROb2RlQWZ0ZXJMaW1pdEJsb2Nr
RGVwdGgoTm9kZSogbiwgYm9vbCBmbGF0KQoreworICAgIGxpbWl0QmxvY2tEZXB0aCh0YWdQcmlv
cml0eU9mTm9kZShuKSk7CisgICAgcmV0dXJuIGluc2VydE5vZGUobiwgZmxhdCk7Cit9CisKIGJv
b2wgSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlKiBuLCBib29sIGZsYXQpCiB7CiAgICAgUmVm
UHRyPE5vZGU+IHByb3RlY3ROb2RlKG4pOwogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2Nh
bE5hbWUgPSBuLT5sb2NhbE5hbWUoKTsKLSAgICBpbnQgdGFnUHJpb3JpdHkgPSBuLT5pc0hUTUxF
bGVtZW50KCkgPyBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4pLT50YWdQcmlvcml0eSgpIDog
MDsKICAgICAKICAgICAvLyA8dGFibGU+IGlzIG5ldmVyIGFsbG93ZWQgaW5zaWRlIHN0cmF5IHRh
YmxlIGNvbnRlbnQuICBBbHdheXMgcG9wIG91dCBvZiB0aGUgc3RyYXkgdGFibGUgY29udGVudAog
ICAgIC8vIGFuZCBjbG9zZSB1cCB0aGUgZmlyc3QgdGFibGUsIGFuZCB0aGVuIHN0YXJ0IHRoZSBz
ZWNvbmQgdGFibGUgYXMgYSBzaWJsaW5nLgogICAgIGlmIChtX2luU3RyYXlUYWJsZUNvbnRlbnQg
JiYgbG9jYWxOYW1lID09IHRhYmxlVGFnKQogICAgICAgICBwb3BCbG9jayh0YWJsZVRhZyk7CiAK
LSAgICBpZiAodGFnUHJpb3JpdHkgPj0gbWluQmxvY2tMZXZlbFRhZ1ByaW9yaXR5KSB7Ci0gICAg
ICAgIHdoaWxlIChtX2Jsb2Nrc0luU3RhY2sgPj0gY01heEJsb2NrRGVwdGgpCi0gICAgICAgICAg
ICBwb3BCbG9jayhtX2Jsb2NrU3RhY2stPnRhZ05hbWUpOwotICAgIH0KLQogICAgIGlmIChtX3Bh
cnNlclF1aXJrcyAmJiAhbV9wYXJzZXJRdWlya3MtPnNob3VsZEluc2VydE5vZGUobV9jdXJyZW50
LCBuKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaW50IHRhZ1ByaW9yaXR5ID0gdGFn
UHJpb3JpdHlPZk5vZGUobik7CisKICAgICAvLyBsZXQncyBiZSBzdHVwaWQgYW5kIGp1c3QgdHJ5
IHRvIGluc2VydCBpdC4KICAgICAvLyB0aGlzIHNob3VsZCB3b3JrIGlmIHRoZSBkb2N1bWVudCBp
cyB3ZWxsLWZvcm1lZAogICAgIE5vZGUqIG5ld05vZGUgPSBtX2N1cnJlbnQtPmFkZENoaWxkKG4p
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuaCBiL1dlYkNvcmUvaHRtbC9I
VE1MUGFyc2VyLmgKaW5kZXggMDk0NTgyNi4uN2Q5YWM2NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0hUTUxQYXJzZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5oCkBAIC0xMTEs
NiArMTExLDkgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHJvY2Vzc0Nsb3NlVGFnKFRva2VuKik7
CiAKKyAgICB2b2lkIGxpbWl0QmxvY2tEZXB0aChpbnQgdGFnUHJpb3JpdHkpOworICAgIAorICAg
IGJvb2wgaW5zZXJ0Tm9kZUFmdGVyTGltaXRCbG9ja0RlcHRoKE5vZGUqLCBib29sIGZsYXQgPSBm
YWxzZSk7CiAgICAgYm9vbCBpbnNlcnROb2RlKE5vZGUqLCBib29sIGZsYXQgPSBmYWxzZSk7CiAg
ICAgYm9vbCBoYW5kbGVFcnJvcihOb2RlKiwgYm9vbCBmbGF0LCBjb25zdCBBdG9taWNTdHJpbmcm
IGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KTs=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42817</attachid>
            <date>2009-11-09 17:45:09 -0800</date>
            <delta_ts>2009-11-17 21:24:34 -0800</delta_ts>
            <desc>Make three functions inline</desc>
            <filename>bug-30651-20091110104507.patch</filename>
            <type>text/plain</type>
            <size>6984</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmODBkZmY4Li5lN2Y3YWVhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMTEt
MDggIEhheWF0byBJdG8gIDxoYXlhdG9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdm9pZCBpbmZpbml0ZSBtdXR1YWwgcmVjdXJz
aW9uIHdoZW4gZGVlcGx5IG5lc3RlZCB0YWdzIGFyZSBsb2FkZWQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwNjUxCisKKyAgICAgICAgKiBmYXN0L3Bh
cnNlci9ibG9jay1uZXN0aW5nLWNhcC10YWJsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvcGFyc2VyL2Jsb2NrLW5lc3RpbmctY2FwLXRhYmxlLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvcGFyc2VyL3NjcmlwdC10ZXN0cy9ibG9jay1uZXN0aW5nLWNhcC10YWJsZS5q
czogQWRkZWQuCisKIDIwMDktMTEtMDIgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvcGFyc2VyL2Jsb2NrLW5lc3RpbmctY2FwLXRhYmxlLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvcGFyc2VyL2Jsb2NrLW5lc3RpbmctY2FwLXRhYmxl
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGZmYzE2
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9wYXJzZXIvYmxvY2stbmVzdGlu
Zy1jYXAtdGFibGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3QgdGhhdCB0aGUg
SFRNTCBwYXJzZXIgZG9lcyBub3QgYWxsb3cgdGhlIG5lc3RpbmcgZGVwdGggb2YgImJsb2NrLWxl
dmVsIiBlbGVtZW50cyB0byBleGNlZWQgNDA5NiB3aGVuIHVzaW5nIG5lc3RlZCB0YWJsZSB0YWcK
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgdDEwMjQucGFyZW50Tm9kZSA9
PT0gdGQxMDIyIGlzIHRydWUKK1BBU1MgdDEwMjMucGFyZW50Tm9kZSA9PT0gdGQxMDIyIGlzIHRy
dWUKK1BBU1MgdDEwMjQucHJldmlvdXNTaWJsaW5nID09PSB0MTAyMyBpcyB0cnVlCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9wYXJzZXIvYmxvY2stbmVzdGluZy1jYXAtdGFibGUuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvcGFyc2VyL2Jsb2NrLW5lc3RpbmctY2FwLXRhYmxlLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzNTE1ZQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvcGFyc2VyL2Jsb2NrLW5lc3RpbmctY2FwLXRhYmxlLmh0bWwKQEAg
LTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNj
cmlwdC10ZXN0cy9ibG9jay1uZXN0aW5nLWNhcC10YWJsZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3BhcnNlci9zY3JpcHQtdGVz
dHMvYmxvY2stbmVzdGluZy1jYXAtdGFibGUuanMgYi9MYXlvdXRUZXN0cy9mYXN0L3BhcnNlci9z
Y3JpcHQtdGVzdHMvYmxvY2stbmVzdGluZy1jYXAtdGFibGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYTM1M2I1OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvcGFyc2VyL3NjcmlwdC10ZXN0cy9ibG9jay1uZXN0aW5nLWNhcC10YWJsZS5qcwpAQCAt
MCwwICsxLDIwIEBACitkZXNjcmlwdGlvbignVGVzdCB0aGF0IHRoZSBIVE1MIHBhcnNlciBkb2Vz
IG5vdCBhbGxvdyB0aGUgbmVzdGluZyBkZXB0aCBvZiAiYmxvY2stbGV2ZWwiIGVsZW1lbnRzIHRv
IGV4Y2VlZCA0MDk2IHdoZW4gdXNpbmcgbmVzdGVkIHRhYmxlIHRhZycpOworCit2YXIgZGVwdGgg
PSAxMDI4OyAgLy8gPHRhYmxlPjx0Ym9keT48dHI+PHRkPiBjb25zdW1lcyA0IGJsb2Nrcy4gKDEw
MjggKiA0ID0gNDExMiA+IDQwOTYpLgordmFyIG1hcmt1cCA9ICIiOwordmFyIGk7Citmb3IgKGkg
PSAwOyBpIDwgZGVwdGg7ICsraSkKKyAgICBtYXJrdXAgKz0gIjx0YWJsZSBpZD0ndCIgKyBpICsg
Iic+PHRib2R5Pjx0cj48dGQgaWQ9J3RkIiArIGkgKyAiJz4iOwordmFyIGRvYyA9IGRvY3VtZW50
LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgpOworZG9jLmJvZHkuaW5uZXJIVE1M
ID0gbWFya3VwOworCit2YXIgdDEwMjMgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoInQxMDIzIik7Cit2
YXIgdDEwMjQgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoInQxMDI0Iik7CisKK3ZhciB0ZDEwMjIgPSBk
b2MuZ2V0RWxlbWVudEJ5SWQoInRkMTAyMiIpOworCitzaG91bGRCZSgidDEwMjQucGFyZW50Tm9k
ZSA9PT0gdGQxMDIyIiwgInRydWUiKTsKK3Nob3VsZEJlKCJ0MTAyMy5wYXJlbnROb2RlID09PSB0
ZDEwMjIiLCAidHJ1ZSIpOworc2hvdWxkQmUoInQxMDI0LnByZXZpb3VzU2libGluZyA9PT0gdDEw
MjMiLCAidHJ1ZSIpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2YxZTVmMC4u
NDNlYzE5NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAwOS0xMS0wOCAgSGF5YXRvIEl0byAgPGhheWF0b0Bn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEF2b2lkIGluZmluaXRlIG11dHVhbCByZWN1cnNpb24gd2hlbiBkZWVwbHkgbmVzdGVkIHRh
Z3MgYXJlIGxvYWRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzA2NTEKKworICAgICAgICBUZXN0OiBmYXN0L3BhcnNlci9ibG9jay1uZXN0aW5nLWNh
cC10YWJsZS5odG1sCisKKyAgICAgICAgKiBodG1sL0hUTUxQYXJzZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBhcnNlcjo6cGFyc2VUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjp0YWdQ
cmlvcml0eU9mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpsaW1pdEJsb2Nr
RGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZUFmdGVyTGlt
aXRCbG9ja0RlcHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6Omluc2VydE5vZGUp
OgorICAgICAgICAqIGh0bWwvSFRNTFBhcnNlci5oOgorCiAyMDA5LTExLTAxICBCcmlhbiBXZWlu
c3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBi
eSBNYXJrIFJvd2UuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAgYi9X
ZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAKaW5kZXggMWNiNDdhZS4uZjEzYzE5YiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1M
UGFyc2VyLmNwcApAQCAtMjAzLDYgKzIwMywyNSBAQCB2b2lkIEhUTUxQYXJzZXI6OnNldEN1cnJl
bnQoTm9kZSogbmV3Q3VycmVudCkKICAgICBtX2RpZFJlZkN1cnJlbnQgPSBkaWRSZWZOZXdDdXJy
ZW50OwogfQogCitpbmxpbmUgc3RhdGljIGludCB0YWdQcmlvcml0eU9mTm9kZShOb2RlKiBuKQor
eworICAgIHJldHVybiBuLT5pc0hUTUxFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dCo+KG4pLT50YWdQcmlvcml0eSgpIDogMDsKK30KKworaW5saW5lIHZvaWQgSFRNTFBhcnNlcjo6
bGltaXRCbG9ja0RlcHRoKGludCB0YWdQcmlvcml0eSkKK3sKKyAgICBpZiAodGFnUHJpb3JpdHkg
Pj0gbWluQmxvY2tMZXZlbFRhZ1ByaW9yaXR5KSB7CisgICAgICAgIHdoaWxlIChtX2Jsb2Nrc0lu
U3RhY2sgPj0gY01heEJsb2NrRGVwdGgpCisgICAgICAgICAgICBwb3BCbG9jayhtX2Jsb2NrU3Rh
Y2stPnRhZ05hbWUpOworICAgIH0KK30KKworaW5saW5lIGJvb2wgSFRNTFBhcnNlcjo6aW5zZXJ0
Tm9kZUFmdGVyTGltaXRCbG9ja0RlcHRoKE5vZGUqIG4sIGJvb2wgZmxhdCkKK3sKKyAgICBsaW1p
dEJsb2NrRGVwdGgodGFnUHJpb3JpdHlPZk5vZGUobikpOworICAgIHJldHVybiBpbnNlcnROb2Rl
KG4sIGZsYXQpOworfQorCiBQYXNzUmVmUHRyPE5vZGU+IEhUTUxQYXJzZXI6OnBhcnNlVG9rZW4o
VG9rZW4qIHQpCiB7CiAgICAgaWYgKCFtX3NraXBNb2RlVGFnLmlzTnVsbCgpKSB7CkBAIC0yNDEs
NyArMjYwLDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBIVE1MUGFyc2VyOjpwYXJzZVRva2VuKFRva2Vu
KiB0KQogICAgICAgICB3aGlsZSAoY2hhcnNMZWZ0KSB7CiAgICAgICAgICAgICAvLyBzcGxpdCBs
YXJnZSBibG9ja3Mgb2YgdGV4dCB0byBub2RlcyBvZiBtYW5hZ2VhYmxlIHNpemUKICAgICAgICAg
ICAgIG4gPSBUZXh0OjpjcmVhdGVXaXRoTGVuZ3RoTGltaXQobV9kb2N1bWVudCwgdGV4dCwgY2hh
cnNMZWZ0KTsKLSAgICAgICAgICAgIGlmICghaW5zZXJ0Tm9kZShuLmdldCgpLCB0LT5zZWxmQ2xv
c2luZ1RhZykpCisgICAgICAgICAgICBpZiAoIWluc2VydE5vZGVBZnRlckxpbWl0QmxvY2tEZXB0
aChuLmdldCgpLCB0LT5zZWxmQ2xvc2luZ1RhZykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG47CkBAIC0yNzEsNyArMjkwLDcgQEAgUGFzc1Jl
ZlB0cjxOb2RlPiBIVE1MUGFyc2VyOjpwYXJzZVRva2VuKFRva2VuKiB0KQogICAgICAgICB9CiAg
ICAgfQogCi0gICAgaWYgKCFpbnNlcnROb2RlKG4uZ2V0KCksIHQtPnNlbGZDbG9zaW5nVGFnKSkg
eworICAgIGlmICghaW5zZXJ0Tm9kZUFmdGVyTGltaXRCbG9ja0RlcHRoKG4uZ2V0KCksIHQtPnNl
bGZDbG9zaW5nVGFnKSkgewogICAgICAgICAvLyB3ZSBjb3VsZG4ndCBpbnNlcnQgdGhlIG5vZGUK
IAogICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7CkBAIC0zMjksMjEgKzM0OCwxNyBA
QCBib29sIEhUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZSogbiwgYm9vbCBmbGF0KQogICAgIFJl
ZlB0cjxOb2RlPiBwcm90ZWN0Tm9kZShuKTsKIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxOYW1lID0gbi0+bG9jYWxOYW1lKCk7Ci0gICAgaW50IHRhZ1ByaW9yaXR5ID0gbi0+aXNIVE1M
RWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuKS0+dGFnUHJpb3JpdHkoKSA6
IDA7CiAgICAgCiAgICAgLy8gPHRhYmxlPiBpcyBuZXZlciBhbGxvd2VkIGluc2lkZSBzdHJheSB0
YWJsZSBjb250ZW50LiAgQWx3YXlzIHBvcCBvdXQgb2YgdGhlIHN0cmF5IHRhYmxlIGNvbnRlbnQK
ICAgICAvLyBhbmQgY2xvc2UgdXAgdGhlIGZpcnN0IHRhYmxlLCBhbmQgdGhlbiBzdGFydCB0aGUg
c2Vjb25kIHRhYmxlIGFzIGEgc2libGluZy4KICAgICBpZiAobV9pblN0cmF5VGFibGVDb250ZW50
ICYmIGxvY2FsTmFtZSA9PSB0YWJsZVRhZykKICAgICAgICAgcG9wQmxvY2sodGFibGVUYWcpOwog
Ci0gICAgaWYgKHRhZ1ByaW9yaXR5ID49IG1pbkJsb2NrTGV2ZWxUYWdQcmlvcml0eSkgewotICAg
ICAgICB3aGlsZSAobV9ibG9ja3NJblN0YWNrID49IGNNYXhCbG9ja0RlcHRoKQotICAgICAgICAg
ICAgcG9wQmxvY2sobV9ibG9ja1N0YWNrLT50YWdOYW1lKTsKLSAgICB9Ci0KICAgICBpZiAobV9w
YXJzZXJRdWlya3MgJiYgIW1fcGFyc2VyUXVpcmtzLT5zaG91bGRJbnNlcnROb2RlKG1fY3VycmVu
dCwgbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGludCB0YWdQcmlvcml0eSA9IHRh
Z1ByaW9yaXR5T2ZOb2RlKG4pOworCiAgICAgLy8gbGV0J3MgYmUgc3R1cGlkIGFuZCBqdXN0IHRy
eSB0byBpbnNlcnQgaXQuCiAgICAgLy8gdGhpcyBzaG91bGQgd29yayBpZiB0aGUgZG9jdW1lbnQg
aXMgd2VsbC1mb3JtZWQKICAgICBOb2RlKiBuZXdOb2RlID0gbV9jdXJyZW50LT5hZGRDaGlsZChu
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MUGFyc2VyLmggYi9XZWJDb3JlL2h0bWwv
SFRNTFBhcnNlci5oCmluZGV4IDA5NDU4MjYuLjdkOWFjNjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aHRtbC9IVE1MUGFyc2VyLmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuaApAQCAtMTEx
LDYgKzExMSw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHByb2Nlc3NDbG9zZVRhZyhUb2tlbiop
OwogCisgICAgdm9pZCBsaW1pdEJsb2NrRGVwdGgoaW50IHRhZ1ByaW9yaXR5KTsKKyAgICAKKyAg
ICBib29sIGluc2VydE5vZGVBZnRlckxpbWl0QmxvY2tEZXB0aChOb2RlKiwgYm9vbCBmbGF0ID0g
ZmFsc2UpOwogICAgIGJvb2wgaW5zZXJ0Tm9kZShOb2RlKiwgYm9vbCBmbGF0ID0gZmFsc2UpOwog
ICAgIGJvb2wgaGFuZGxlRXJyb3IoTm9kZSosIGJvb2wgZmxhdCwgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbE5hbWUsIGludCB0YWdQcmlvcml0eSk7
</data>

          </attachment>
      

    </bug>

</bugzilla>