<?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>54574</bug_id>
          
          <creation_ts>2011-02-16 11:22:46 -0800</creation_ts>
          <short_desc>Refactor pumpTokenizer loop</short_desc>
          <delta_ts>2011-02-18 09:26:09 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>54355</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Tony Gentilcore">tonyg</reporter>
          <assigned_to name="Tony Gentilcore">tonyg</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>352213</commentid>
    <comment_count>0</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-02-16 11:22:46 -0800</bug_when>
    <thetext>Refactor pumpTokenizer loop</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352230</commentid>
    <comment_count>1</comment_count>
      <attachid>82669</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-02-16 11:43:51 -0800</bug_when>
    <thetext>Created attachment 82669
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352232</commentid>
    <comment_count>2</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-02-16 11:47:06 -0800</bug_when>
    <thetext>Hey Eric, Please let me know what you think of this. The main problem with bug 54355 seemed to be that I was duplicating the second half of the pumpTokenizer loop in resumeParsingAfterYield() because that method didn&apos;t know whether we are resuming from a yield just before a token or just before a script. In addition to cleaning up the loop, this will make those tricky parts go away in that patch. Happy to discuss on IRC if it isn&apos;t clear how they relate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352237</commentid>
    <comment_count>3</comment_count>
      <attachid>82669</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-16 11:57:20 -0800</bug_when>
    <thetext>Comment on attachment 82669
Patch

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

&gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:203
&gt; +bool HTMLDocumentParser::shouldContinueParsingAfterRunningScripts(SynchronousMode mode, HTMLParserScheduler::PumpSession session)

Is it ok to pass the PumpSession by value?

&gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:205
&gt; +    // JavaScript may have stopped or detached the parser.

These comments are kind of silly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352278</commentid>
    <comment_count>4</comment_count>
      <attachid>82680</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-02-16 12:57:12 -0800</bug_when>
    <thetext>Created attachment 82680
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352279</commentid>
    <comment_count>5</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-02-16 12:57:21 -0800</bug_when>
    <thetext>&gt; Is it ok to pass the PumpSession by value?

Oops. Good catch, I mistakenly thought we were passing by val to shouldContinueParsing(), but I see now that isn&apos;t.

&gt; &gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:205
&gt; &gt; +    // JavaScript may have stopped or detached the parser.
&gt; 
&gt; These comments are kind of silly.

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352317</commentid>
    <comment_count>6</comment_count>
      <attachid>82669</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-16 13:58:57 -0800</bug_when>
    <thetext>Comment on attachment 82669
Patch

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

I think this is nicer.  It a bit confusing how deep in the callstack the actual scheduling occurs.  I wonder if there is some better way to return all the way back to the pumpTokenizer loop before executing the actual &quot;schedule me to resume later&quot; command.

&gt;&gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:203
&gt;&gt; +bool HTMLDocumentParser::shouldContinueParsingAfterRunningScripts(SynchronousMode mode, HTMLParserScheduler::PumpSession session)
&gt; 
&gt; Is it ok to pass the PumpSession by value?

It&apos;s not. :)

&gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:210
&gt; +    if (m_treeBuilder-&gt;isPaused()) {

So why is this isPaused instead of isWaitingForScripts?  I don&apos;t understand the difference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352337</commentid>
    <comment_count>7</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-02-16 14:15:58 -0800</bug_when>
    <thetext>&gt; I think this is nicer.  It a bit confusing how deep in the callstack the actual scheduling occurs.  I wonder if there is some better way to return all the way back to the pumpTokenizer loop before executing the actual &quot;schedule me to resume later&quot; command.

What if PumpSession gets a new bool: &quot;needsYield.&quot; Then HTMLParserScheduler::shouldContinueParsing() would be renamed HTMLParserScheduler::checkForYieldBeforeToken() and rather than actually scheduling the resume, it would just set the needsYield bit. Then pumpTokenizer() can do something like this after its while-loop:

if (session.needsYield)
  m_parserScheduler-&gt;scheduleForResume();

This changes the semantic from HTMLParserScheduler demanding that the parser yield to HTMLParserScheduler suggesting that the parser yield. Should be less prone to misuse.

&gt; &gt; Is it ok to pass the PumpSession by value?
&gt; 
&gt; It&apos;s not. :)

Fixed.

&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:210
&gt; &gt; +    if (m_treeBuilder-&gt;isPaused()) {
&gt; 
&gt; So why is this isPaused instead of isWaitingForScripts?  I don&apos;t understand the difference.

isWaitingForScripts() returns m_treeBuilder-&gt;isPaused(), so they are exactly equivalent. Since isWaitingForScripts() is a virtual method it doesn&apos;t seem desirable to call in this hot loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352344</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-16 14:19:03 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; I think this is nicer.  It a bit confusing how deep in the callstack the actual scheduling occurs.  I wonder if there is some better way to return all the way back to the pumpTokenizer loop before executing the actual &quot;schedule me to resume later&quot; command.
&gt; 
&gt; What if PumpSession gets a new bool: &quot;needsYield.&quot; Then HTMLParserScheduler::shouldContinueParsing() would be renamed HTMLParserScheduler::checkForYieldBeforeToken() and rather than actually scheduling the resume, it would just set the needsYield bit. Then pumpTokenizer() can do something like this after its while-loop:
&gt; 
&gt; if (session.needsYield)
&gt;   m_parserScheduler-&gt;scheduleForResume();
&gt; 
&gt; This changes the semantic from HTMLParserScheduler demanding that the parser yield to HTMLParserScheduler suggesting that the parser yield. Should be less prone to misuse.

I like it!  Do you want to do that in a second patch or would such a re-write make this patch betteR?  Your call.

&gt; &gt; &gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:210
&gt; &gt; &gt; +    if (m_treeBuilder-&gt;isPaused()) {
&gt; &gt; 
&gt; &gt; So why is this isPaused instead of isWaitingForScripts?  I don&apos;t understand the difference.
&gt; 
&gt; isWaitingForScripts() returns m_treeBuilder-&gt;isPaused(), so they are exactly equivalent. Since isWaitingForScripts() is a virtual method it doesn&apos;t seem desirable to call in this hot loop.

Hmm..  Ok.  Maybe we should rename isPaused to isPausedWaitingForScripts. :)  I&apos;m not sure if there are other things which cause us to pause bsides scripts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352345</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-16 14:20:26 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; &gt; I think this is nicer.  It a bit confusing how deep in the callstack the actual scheduling occurs.  I wonder if there is some better way to return all the way back to the pumpTokenizer loop before executing the actual &quot;schedule me to resume later&quot; command.
&gt; &gt; 
&gt; &gt; What if PumpSession gets a new bool: &quot;needsYield.&quot; Then HTMLParserScheduler::shouldContinueParsing() would be renamed HTMLParserScheduler::checkForYieldBeforeToken() and rather than actually scheduling the resume, it would just set the needsYield bit. Then pumpTokenizer() can do something like this after its while-loop:
&gt; &gt; 
&gt; &gt; if (session.needsYield)
&gt; &gt;   m_parserScheduler-&gt;scheduleForResume();
&gt; &gt; 
&gt; &gt; This changes the semantic from HTMLParserScheduler demanding that the parser yield to HTMLParserScheduler suggesting that the parser yield. Should be less prone to misuse.
&gt; 
&gt; I like it!  Do you want to do that in a second patch or would such a re-write make this patch betteR?  Your call.

I suspect checkForYieldBeforeToken would still return a bool to yield or not?  Not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352350</commentid>
    <comment_count>10</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-02-16 14:23:43 -0800</bug_when>
    <thetext>&gt; Do you want to do that in a second patch or would such a re-write make this patch betteR?

I&apos;d like to get any refactoring out of the way in this patch.

&gt; I suspect checkForYieldBeforeToken would still return a bool to yield or not?  Not sure.

Let me try it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352482</commentid>
    <comment_count>11</comment_count>
      <attachid>82726</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-02-16 17:15:39 -0800</bug_when>
    <thetext>Created attachment 82726
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352483</commentid>
    <comment_count>12</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-02-16 17:17:50 -0800</bug_when>
    <thetext>Ready for another look. I think this is much cleaner, let me know what you think.

I decided not to touch the isPaused vs isWaitingForScripts thing in this change. But to answer your earlier question, the only thing that can caused the tree builder to be paused is a script.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352964</commentid>
    <comment_count>13</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-02-17 09:19:36 -0800</bug_when>
    <thetext>I noticed that in the diff it is kind of hard to see how nice the tokenizer loop is now:

    PumpSession session;
    while (canTakeNextToken(mode, session) &amp;&amp; !session.needsYield) {
        m_sourceTracker.start(m_input, m_token);
        if (!m_tokenizer-&gt;nextToken(m_input.current(), m_token))
            break;
        m_sourceTracker.end(m_input, m_token);

        m_xssFilter.filterToken(m_token);

        m_treeBuilder-&gt;constructTreeFromToken(m_token);
        m_token.clear();
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353110</commentid>
    <comment_count>14</comment_count>
      <attachid>82726</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-17 12:45:55 -0800</bug_when>
    <thetext>Comment on attachment 82726
Patch

I think this is an improvement.  Assuming it didn&apos;t regress perf r+. (Sorry for the slow review, been sick for a week and sleeping most of the days...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353114</commentid>
    <comment_count>15</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-02-17 12:48:20 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 82726 [details])
&gt; I think this is an improvement.  Assuming it didn&apos;t regress perf r+. (Sorry for the slow review, been sick for a week and sleeping most of the days...)

Thanks. Hope you are feeling better.

I updated the perf numbers in the ChangeLog. Counterintuitively to me, it seems to have gotten faster. I&apos;m not planning to look at the asm to figure out why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353627</commentid>
    <comment_count>16</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-02-18 09:26:09 -0800</bug_when>
    <thetext>Committed r79006: &lt;http://trac.webkit.org/changeset/79006&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82669</attachid>
            <date>2011-02-16 11:43:51 -0800</date>
            <delta_ts>2011-02-16 17:15:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54574-20110216114350.patch</filename>
            <type>text/plain</type>
            <size>8367</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzg1NzAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5Njg4M2VhYjY3YWI5MGMz
NjU2ZTk0Mjg4ZjY3YWMxMzg4ZmIxNzczLi5hYTgxNzFmM2NjZmRjNjhhMDA0N2FmYmZlMjdjMDY3
Y2YzYjk4YWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDItMTYgIFRvbnkg
R2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBwdW1wVG9rZW5pemVyIGxvb3AKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NTc0CisKKyAg
ICAgICAgMS4gVGhpcyBtYWtlcyBwdW1wVG9rZW5pemVyKCkgc2FmZSB0byBjYWxsIHdoZW4gd2Fp
dGluZyBmb3IgYSBzY3JpcHQgb3Igd2hlbiBhYm91dCB0byBnZXQKKyAgICAgICAgICAgdGhlIG5l
eHQgdG9rZW4sIGFsdGhvdWdoIEFTU0VSVHMgc3RpbGwgZW5mb3JjZSB0aGF0IHdlIGFyZW4ndCB3
YWl0aW5nIGZvciBhIHNjcmlwdC4gVGhpcworICAgICAgICAgICBlbmFibGVzIHJlc3VtZVBhcnNp
bmdBZnRlcllpZWxkKCkgdG8gY2FsbCBwdW1wVG9rZW5pemVyIHdpdGggbm8gbW9kaWZpY2F0aW9u
cyBldmVuIGlmIHdlCisgICAgICAgICAgIHlpZWxkIGJlZm9yZSBydW5uaW5nIGEgc2NyaXB0IHJh
dGhlciB0aGFuIGJlZm9yZSB0YWtpbmcgYSB0b2tlbiAoc2VlIGJ1ZyA1NDM1NSkuCisgICAgICAg
IDIuIGlzV2FpdGluZ0ZvclNjcmlwdHMoKSByZXR1cm5zIG1fdHJlZUJ1aWxkZXItPmlzUGF1c2Vk
KCkgYW5kIGlzIG1vcmUgcmVhZGFibGUsIHNvIGNoYW5nZQorICAgICAgICAgICBBU1NFUlRzIHRv
IGNhbGwgaXQgaW5zdGVhZC4KKyAgICAgICAgMy4gVGhpcyBhbHNvIHBpY2tzIHVwIHRoZSByZWZD
b3VudCA+PSAxIGFzc2VydCB3aGVuIHN0b3BwZWQuCisKKyAgICAgICAgVGVzdGVkIFBlcmZvcm1h
bmNlVGVzdHMvUGFyc2VyIGFuZCB0aGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhbnkgc2lnbmlm
aWNhbnQgY2hhbmdlLgorICAgICAgICBCZWZvcmU6CisgICAgICAgICAgYXZnIDk4NS4wNQorICAg
ICAgICAgIG1lZGlhbiA5ODUuNQorICAgICAgICAgIHN0ZGV2IDMuMDA3OTA2MjQ4NTM5MDA3Cisg
ICAgICAgICAgbWluIDk4MAorICAgICAgICAgIG1heCA5OTAKKyAgICAgICAgQWZ0ZXI6CisgICAg
ICAgICAgYXZnIDk4NS4xNQorICAgICAgICAgIG1lZGlhbiA5ODUKKyAgICAgICAgICBzdGRldiAz
LjU5NTQ4MzI3NzY2OTM1OTMKKyAgICAgICAgICBtaW4gOTc5CisgICAgICAgICAgbWF4IDk5NAor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisg
ICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6cnVuU2NyaXB0c0ZvclBhdXNlZFRyZWVCdWlsZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6c2hvdWxkQ29udGludWVQ
YXJzaW5nQWZ0ZXJSdW5uaW5nU2NyaXB0cyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1l
bnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50
UGFyc2VyOjpyZXN1bWVQYXJzaW5nQWZ0ZXJTY3JpcHRFeGVjdXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hl
ZXRzKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaDoKKwogMjAx
MS0wMi0xNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggNzkzZjdlNTYwZDZlNWRmMDMzNWUyYmQ3YzA1Y2Iz
NzEwMTVmY2Y3Zi4uYjRjOTQ1ZmM1YWQxMTIxNWQ1ZmYyNWNiYWIxMzMyNWMzMmRjZDY0YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3Bw
CkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNp
bmdBZnRlcllpZWxkKCkKIAogYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJ1blNjcmlwdHNGb3JQ
YXVzZWRUcmVlQnVpbGRlcigpCiB7Ci0gICAgQVNTRVJUKG1fdHJlZUJ1aWxkZXItPmlzUGF1c2Vk
KCkpOworICAgIEFTU0VSVChpc1dhaXRpbmdGb3JTY3JpcHRzKCkpOwogCiAgICAgVGV4dFBvc2l0
aW9uMSBzY3JpcHRTdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0
aW9uKCk7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQgPSBtX3RyZWVCdWlsZGVy
LT50YWtlU2NyaXB0VG9Qcm9jZXNzKHNjcmlwdFN0YXJ0UG9zaXRpb24pOwpAQCAtMjAwLDEwICsy
MDAsMzMgQEAgYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJ1blNjcmlwdHNGb3JQYXVzZWRUcmVl
QnVpbGRlcigpCiAgICAgcmV0dXJuIG1fc2NyaXB0UnVubmVyLT5leGVjdXRlKHNjcmlwdEVsZW1l
bnQucmVsZWFzZSgpLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIH0KIAorYm9vbCBIVE1MRG9jdW1l
bnRQYXJzZXI6OnNob3VsZENvbnRpbnVlUGFyc2luZ0FmdGVyUnVubmluZ1NjcmlwdHMoU3luY2hy
b25vdXNNb2RlIG1vZGUsIEhUTUxQYXJzZXJTY2hlZHVsZXI6OlB1bXBTZXNzaW9uIHNlc3Npb24p
Cit7CisgICAgLy8gSmF2YVNjcmlwdCBtYXkgaGF2ZSBzdG9wcGVkIG9yIGRldGFjaGVkIHRoZSBw
YXJzZXIuCisgICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBUaGUgcGFyc2VyIHdpbGwgcGF1c2UgaXRzZWxmIHdoZW4gd2FpdGluZyBvbiBhIHNjcmlw
dCB0byBsb2FkIG9yIHJ1bi4KKyAgICBpZiAobV90cmVlQnVpbGRlci0+aXNQYXVzZWQoKSkgewor
ICAgICAgICAvLyBJZiB3ZSdyZSBwYXVzZWQgd2FpdGluZyBmb3IgYSBzY3JpcHQsIHdlIHRyeSB0
byBleGVjdXRlIHNjcmlwdHMgYmVmb3JlIGNvbnRpbnVpbmcuCisgICAgICAgIGJvb2wgc2hvdWxk
Q29udGludWVQYXJzaW5nID0gcnVuU2NyaXB0c0ZvclBhdXNlZFRyZWVCdWlsZGVyKCk7CisgICAg
ICAgIG1fdHJlZUJ1aWxkZXItPnNldFBhdXNlZCghc2hvdWxkQ29udGludWVQYXJzaW5nKTsKKwor
ICAgICAgICAvLyBKYXZhU2NyaXB0IG1heSBoYXZlIHN0b3BwZWQgb3IgZGV0YWNoZWQgdGhlIHBh
cnNlci4KKyAgICAgICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIGlmICghc2hvdWxkQ29udGludWVQYXJzaW5nKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBtb2RlID09IEZvcmNlU3luY2hyb25vdXMg
fHwgbV9wYXJzZXJTY2hlZHVsZXItPnNob3VsZENvbnRpbnVlUGFyc2luZyhzZXNzaW9uKTsKK30K
Kwogdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIoU3luY2hyb25vdXNNb2Rl
IG1vZGUpCiB7CiAgICAgQVNTRVJUKCFpc1N0b3BwZWQoKSk7Ci0gICAgQVNTRVJUKCFtX3RyZWVC
dWlsZGVyLT5pc1BhdXNlZCgpKTsKKyAgICBBU1NFUlQoIWlzV2FpdGluZ0ZvclNjcmlwdHMoKSk7
CiAgICAgQVNTRVJUKCFpc1NjaGVkdWxlZEZvclJlc3VtZSgpKTsKICAgICAvLyBBU1NFUlQgdGhh
dCB0aGlzIG9iamVjdCBpcyBib3RoIGF0dGFjaGVkIHRvIHRoZSBEb2N1bWVudCBhbmQgcHJvdGVj
dGVkLgogICAgIEFTU0VSVChyZWZDb3VudCgpID49IDIpOwpAQCAtMjE2LDggKzIzOSw3IEBAIHZv
aWQgSFRNTERvY3VtZW50UGFyc2VyOjpwdW1wVG9rZW5pemVyKFN5bmNocm9ub3VzTW9kZSBtb2Rl
KQogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxXcml0ZUhUTUwoZG9jdW1lbnQoKSwgbV9pbnB1dC5jdXJyZW50
KCkubGVuZ3RoKCksIG1fdG9rZW5pemVyLT5saW5lTnVtYmVyKCkpOwogCiAgICAgSFRNTFBhcnNl
clNjaGVkdWxlcjo6UHVtcFNlc3Npb24gc2Vzc2lvbjsKLSAgICAvLyBGSVhNRTogVGhpcyBsb29w
IGJvZHkgaGFzIGlzIG5vdyB0b28gbG9uZyBhbmQgbmVlZHMgY2xlYW51cC4KLSAgICB3aGlsZSAo
bW9kZSA9PSBGb3JjZVN5bmNocm9ub3VzIHx8IG1fcGFyc2VyU2NoZWR1bGVyLT5zaG91bGRDb250
aW51ZVBhcnNpbmcoc2Vzc2lvbikpIHsKKyAgICB3aGlsZSAoc2hvdWxkQ29udGludWVQYXJzaW5n
QWZ0ZXJSdW5uaW5nU2NyaXB0cyhtb2RlLCBzZXNzaW9uKSkgewogICAgICAgICAvLyBGSVhNRTog
SXQncyB3cm9uZyBmb3IgdGhlIEhUTUxEb2N1bWVudFBhcnNlciB0byByZWFjaCBiYWNrIHRvIHRo
ZQogICAgICAgICAvLyAgICAgICAgRnJhbWUsIGJ1dCB0aGlzIGFwcHJvYWNoIGlzIGhvdyB0aGUg
b2xkIHBhcnNlciBoYW5kbGVkCiAgICAgICAgIC8vICAgICAgICBzdG9wcGluZyB3aGVuIHRoZSBw
YWdlIGFzc2lnbnMgd2luZG93LmxvY2F0aW9uLiAgV2hhdCByZWFsbHkKQEAgLTIzNywzMSArMjU5
LDE2IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpwdW1wVG9rZW5pemVyKFN5bmNocm9ub3Vz
TW9kZSBtb2RlKQogCiAgICAgICAgIG1fdHJlZUJ1aWxkZXItPmNvbnN0cnVjdFRyZWVGcm9tVG9r
ZW4obV90b2tlbik7CiAgICAgICAgIG1fdG9rZW4uY2xlYXIoKTsKLQotICAgICAgICAvLyBKYXZh
U2NyaXB0IG1heSBoYXZlIHN0b3BwZWQgb3IgZGV0YWNoZWQgdGhlIHBhcnNlci4KLSAgICAgICAg
aWYgKGlzU3RvcHBlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIFRoZSBw
YXJzZXIgd2lsbCBwYXVzZSBpdHNlbGYgd2hlbiB3YWl0aW5nIG9uIGEgc2NyaXB0IHRvIGxvYWQg
b3IgcnVuLgotICAgICAgICBpZiAoIW1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBJZiB3ZSdyZSBwYXVzZWQgd2FpdGluZyBmb3Ig
YSBzY3JpcHQsIHdlIHRyeSB0byBleGVjdXRlIHNjcmlwdHMgYmVmb3JlIGNvbnRpbnVpbmcuCi0g
ICAgICAgIGJvb2wgc2hvdWxkQ29udGludWVQYXJzaW5nID0gcnVuU2NyaXB0c0ZvclBhdXNlZFRy
ZWVCdWlsZGVyKCk7Ci0gICAgICAgIG1fdHJlZUJ1aWxkZXItPnNldFBhdXNlZCghc2hvdWxkQ29u
dGludWVQYXJzaW5nKTsKLQotICAgICAgICAvLyBKYXZhU2NyaXB0IG1heSBoYXZlIHN0b3BwZWQg
b3IgZGV0YWNoZWQgdGhlIHBhcnNlci4KLSAgICAgICAgaWYgKGlzU3RvcHBlZCgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghc2hvdWxkQ29udGludWVQYXJzaW5nKQotICAg
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgLy8gRW5zdXJlIHdlIGhhdmVuJ3QgYmVlbiB0
b3RhbGx5IGRlcmVmJ2VkIGFmdGVyIHB1bXBpbmcuIEFueSBjYWxsZXIgb2YgdGhpcwogICAgIC8v
IGZ1bmN0aW9uIHNob3VsZCBiZSBob2xkaW5nIGEgUmVmUHRyIHRvIHRoaXMgdG8gZW5zdXJlIHdl
IHdlcmVuJ3QgZGVsZXRlZC4KICAgICBBU1NFUlQocmVmQ291bnQoKSA+PSAxKTsKIAorICAgIC8v
IEphdmFTY3JpcHQgbWF5IGhhdmUgc3RvcHBlZCBvciBkZXRhY2hlZCB0aGUgcGFyc2VyLgorICAg
IGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKGlzV2FpdGluZ0Zv
clNjcmlwdHMoKSkgewogICAgICAgICBBU1NFUlQobV90b2tlbml6ZXItPnN0YXRlKCkgPT0gSFRN
TFRva2VuaXplcjo6RGF0YVN0YXRlKTsKICAgICAgICAgaWYgKCFtX3ByZWxvYWRTY2FubmVyKSB7
CkBAIC00MzksNyArNDQ2LDcgQEAgYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OmlzV2FpdGluZ0Zv
clNjcmlwdHMoKSBjb25zdAogdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmdB
ZnRlclNjcmlwdEV4ZWN1dGlvbigpCiB7CiAgICAgQVNTRVJUKCFpblNjcmlwdEV4ZWN1dGlvbigp
KTsKLSAgICBBU1NFUlQoIW1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkpOworICAgIEFTU0VSVCgh
aXNXYWl0aW5nRm9yU2NyaXB0cygpKTsKIAogICAgIG1fcHJlbG9hZFNjYW5uZXIuY2xlYXIoKTsK
ICAgICBwdW1wVG9rZW5pemVySWZQb3NzaWJsZShBbGxvd1lpZWxkKTsKQEAgLTQ3OCw3ICs0ODUs
NyBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3Vy
Y2UqIGNhY2hlZFJlc291cmNlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNTRVJU
KG1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkpOworICAgIEFTU0VSVChpc1dhaXRpbmdGb3JTY3Jp
cHRzKCkpOwogICAgIC8vIE5vdGU6IFdlIG9ubHkgZXZlciB3YWl0IG9uIG9uZSBzY3JpcHQgYXQg
YSB0aW1lLCBzbyB3ZSBhbHdheXMga25vdyB0aGlzCiAgICAgLy8gaXMgdGhlIG9uZSB3ZSB3ZXJl
IHdhaXRpbmcgb24gYW5kIGNhbiB1bi1wYXVzZSB0aGUgdHJlZSBidWlsZGVyLgogICAgIG1fdHJl
ZUJ1aWxkZXItPnNldFBhdXNlZChmYWxzZSk7CkBAIC01MDQsNyArNTExLDcgQEAgdm9pZCBIVE1M
RG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCkKICAg
ICBSZWZQdHI8SFRNTERvY3VtZW50UGFyc2VyPiBwcm90ZWN0KHRoaXMpOwogCiAgICAgQVNTRVJU
KCFtX3NjcmlwdFJ1bm5lci0+aXNFeGVjdXRpbmdTY3JpcHQoKSk7Ci0gICAgQVNTRVJUKG1fdHJl
ZUJ1aWxkZXItPmlzUGF1c2VkKCkpOworICAgIEFTU0VSVChpc1dhaXRpbmdGb3JTY3JpcHRzKCkp
OwogICAgIC8vIE5vdGU6IFdlIG9ubHkgZXZlciB3YWl0IG9uIG9uZSBzY3JpcHQgYXQgYSB0aW1l
LCBzbyB3ZSBhbHdheXMga25vdyB0aGlzCiAgICAgLy8gaXMgdGhlIG9uZSB3ZSB3ZXJlIHdhaXRp
bmcgb24gYW5kIGNhbiB1bi1wYXVzZSB0aGUgdHJlZSBidWlsZGVyLgogICAgIG1fdHJlZUJ1aWxk
ZXItPnNldFBhdXNlZChmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxEb2N1bWVudFBhcnNlci5oCmluZGV4IGJlMmNhMWJhMjc5ZGQwMzBiNmU4YWU4ZjU3MDVkMGNi
Yzk0NmFlNTkuLmY0MDk4MjFmY2E3NTBjYjNhMzg4ODIyYTE3NzAyNTMzYTNmMmQ3Y2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCkBAIC0y
OSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKICNpbmNsdWRl
ICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKICNpbmNsdWRlICJIVE1MSW5wdXRTdHJl
YW0uaCIKKyNpbmNsdWRlICJIVE1MUGFyc2VyU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiSFRNTFNj
cmlwdFJ1bm5lckhvc3QuaCIKICNpbmNsdWRlICJIVE1MU291cmNlVHJhY2tlci5oIgogI2luY2x1
ZGUgIkhUTUxUb2tlbi5oIgpAQCAtNDMsNyArNDQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBEb2N1bWVudDsKIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CiBjbGFzcyBIVE1MRG9jdW1l
bnQ7Ci1jbGFzcyBIVE1MUGFyc2VyU2NoZWR1bGVyOwogY2xhc3MgSFRNTFRva2VuaXplcjsKIGNs
YXNzIEhUTUxTY3JpcHRSdW5uZXI7CiBjbGFzcyBIVE1MVHJlZUJ1aWxkZXI7CkBAIC0xMTYsNiAr
MTE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQWxsb3dZaWVsZCwKICAgICAgICAgRm9yY2VTeW5j
aHJvbm91cywKICAgICB9OworICAgIGJvb2wgc2hvdWxkQ29udGludWVQYXJzaW5nQWZ0ZXJSdW5u
aW5nU2NyaXB0cyhTeW5jaHJvbm91c01vZGUsIEhUTUxQYXJzZXJTY2hlZHVsZXI6OlB1bXBTZXNz
aW9uKTsKICAgICB2b2lkIHB1bXBUb2tlbml6ZXIoU3luY2hyb25vdXNNb2RlKTsKICAgICB2b2lk
IHB1bXBUb2tlbml6ZXJJZlBvc3NpYmxlKFN5bmNocm9ub3VzTW9kZSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82680</attachid>
            <date>2011-02-16 12:57:12 -0800</date>
            <delta_ts>2011-02-16 17:15:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54574-20110216125710.patch</filename>
            <type>text/plain</type>
            <size>9201</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzg1NzAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5Njg4M2VhYjY3YWI5MGMz
NjU2ZTk0Mjg4ZjY3YWMxMzg4ZmIxNzczLi5hYTgxNzFmM2NjZmRjNjhhMDA0N2FmYmZlMjdjMDY3
Y2YzYjk4YWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDItMTYgIFRvbnkg
R2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBwdW1wVG9rZW5pemVyIGxvb3AKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NTc0CisKKyAg
ICAgICAgMS4gVGhpcyBtYWtlcyBwdW1wVG9rZW5pemVyKCkgc2FmZSB0byBjYWxsIHdoZW4gd2Fp
dGluZyBmb3IgYSBzY3JpcHQgb3Igd2hlbiBhYm91dCB0byBnZXQKKyAgICAgICAgICAgdGhlIG5l
eHQgdG9rZW4sIGFsdGhvdWdoIEFTU0VSVHMgc3RpbGwgZW5mb3JjZSB0aGF0IHdlIGFyZW4ndCB3
YWl0aW5nIGZvciBhIHNjcmlwdC4gVGhpcworICAgICAgICAgICBlbmFibGVzIHJlc3VtZVBhcnNp
bmdBZnRlcllpZWxkKCkgdG8gY2FsbCBwdW1wVG9rZW5pemVyIHdpdGggbm8gbW9kaWZpY2F0aW9u
cyBldmVuIGlmIHdlCisgICAgICAgICAgIHlpZWxkIGJlZm9yZSBydW5uaW5nIGEgc2NyaXB0IHJh
dGhlciB0aGFuIGJlZm9yZSB0YWtpbmcgYSB0b2tlbiAoc2VlIGJ1ZyA1NDM1NSkuCisgICAgICAg
IDIuIGlzV2FpdGluZ0ZvclNjcmlwdHMoKSByZXR1cm5zIG1fdHJlZUJ1aWxkZXItPmlzUGF1c2Vk
KCkgYW5kIGlzIG1vcmUgcmVhZGFibGUsIHNvIGNoYW5nZQorICAgICAgICAgICBBU1NFUlRzIHRv
IGNhbGwgaXQgaW5zdGVhZC4KKyAgICAgICAgMy4gVGhpcyBhbHNvIHBpY2tzIHVwIHRoZSByZWZD
b3VudCA+PSAxIGFzc2VydCB3aGVuIHN0b3BwZWQuCisKKyAgICAgICAgVGVzdGVkIFBlcmZvcm1h
bmNlVGVzdHMvUGFyc2VyIGFuZCB0aGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhbnkgc2lnbmlm
aWNhbnQgY2hhbmdlLgorICAgICAgICBCZWZvcmU6CisgICAgICAgICAgYXZnIDk4NS4wNQorICAg
ICAgICAgIG1lZGlhbiA5ODUuNQorICAgICAgICAgIHN0ZGV2IDMuMDA3OTA2MjQ4NTM5MDA3Cisg
ICAgICAgICAgbWluIDk4MAorICAgICAgICAgIG1heCA5OTAKKyAgICAgICAgQWZ0ZXI6CisgICAg
ICAgICAgYXZnIDk4NS4xNQorICAgICAgICAgIG1lZGlhbiA5ODUKKyAgICAgICAgICBzdGRldiAz
LjU5NTQ4MzI3NzY2OTM1OTMKKyAgICAgICAgICBtaW4gOTc5CisgICAgICAgICAgbWF4IDk5NAor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisg
ICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6cnVuU2NyaXB0c0ZvclBhdXNlZFRyZWVCdWlsZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6c2hvdWxkQ29udGludWVQ
YXJzaW5nQWZ0ZXJSdW5uaW5nU2NyaXB0cyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1l
bnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50
UGFyc2VyOjpyZXN1bWVQYXJzaW5nQWZ0ZXJTY3JpcHRFeGVjdXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hl
ZXRzKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaDoKKwogMjAx
MS0wMi0xNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggNzkzZjdlNTYwZDZlNWRmMDMzNWUyYmQ3YzA1Y2Iz
NzEwMTVmY2Y3Zi4uMWNmNDg4YzVlOWQxMjA2NzFiMjg5ZGM2MTE5Y2U1YWM3NTYxNTU2NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3Bw
CkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNp
bmdBZnRlcllpZWxkKCkKIAogYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJ1blNjcmlwdHNGb3JQ
YXVzZWRUcmVlQnVpbGRlcigpCiB7Ci0gICAgQVNTRVJUKG1fdHJlZUJ1aWxkZXItPmlzUGF1c2Vk
KCkpOworICAgIEFTU0VSVChpc1dhaXRpbmdGb3JTY3JpcHRzKCkpOwogCiAgICAgVGV4dFBvc2l0
aW9uMSBzY3JpcHRTdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uMTo6YmVsb3dSYW5nZVBvc2l0
aW9uKCk7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IHNjcmlwdEVsZW1lbnQgPSBtX3RyZWVCdWlsZGVy
LT50YWtlU2NyaXB0VG9Qcm9jZXNzKHNjcmlwdFN0YXJ0UG9zaXRpb24pOwpAQCAtMjAwLDEwICsy
MDAsMzEgQEAgYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJ1blNjcmlwdHNGb3JQYXVzZWRUcmVl
QnVpbGRlcigpCiAgICAgcmV0dXJuIG1fc2NyaXB0UnVubmVyLT5leGVjdXRlKHNjcmlwdEVsZW1l
bnQucmVsZWFzZSgpLCBzY3JpcHRTdGFydFBvc2l0aW9uKTsKIH0KIAorYm9vbCBIVE1MRG9jdW1l
bnRQYXJzZXI6OnNob3VsZENvbnRpbnVlUGFyc2luZ0FmdGVyUnVubmluZ1NjcmlwdHMoU3luY2hy
b25vdXNNb2RlIG1vZGUsIFB1bXBTZXNzaW9uJiBzZXNzaW9uKQoreworICAgIGlmIChpc1N0b3Bw
ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhlIHBhcnNlciB3aWxsIHBh
dXNlIGl0c2VsZiB3aGVuIHdhaXRpbmcgb24gYSBzY3JpcHQgdG8gbG9hZCBvciBydW4uCisgICAg
aWYgKG1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkpIHsKKyAgICAgICAgLy8gSWYgd2UncmUgcGF1
c2VkIHdhaXRpbmcgZm9yIGEgc2NyaXB0LCB3ZSB0cnkgdG8gZXhlY3V0ZSBzY3JpcHRzIGJlZm9y
ZSBjb250aW51aW5nLgorICAgICAgICBib29sIHNob3VsZENvbnRpbnVlUGFyc2luZyA9IHJ1blNj
cmlwdHNGb3JQYXVzZWRUcmVlQnVpbGRlcigpOworICAgICAgICBtX3RyZWVCdWlsZGVyLT5zZXRQ
YXVzZWQoIXNob3VsZENvbnRpbnVlUGFyc2luZyk7CisKKyAgICAgICAgaWYgKGlzU3RvcHBlZCgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghc2hvdWxkQ29udGlu
dWVQYXJzaW5nKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVy
biBtb2RlID09IEZvcmNlU3luY2hyb25vdXMgfHwgbV9wYXJzZXJTY2hlZHVsZXItPnNob3VsZENv
bnRpbnVlUGFyc2luZyhzZXNzaW9uKTsKK30KKwogdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnB1
bXBUb2tlbml6ZXIoU3luY2hyb25vdXNNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKCFpc1N0b3Bw
ZWQoKSk7Ci0gICAgQVNTRVJUKCFtX3RyZWVCdWlsZGVyLT5pc1BhdXNlZCgpKTsKKyAgICBBU1NF
UlQoIWlzV2FpdGluZ0ZvclNjcmlwdHMoKSk7CiAgICAgQVNTRVJUKCFpc1NjaGVkdWxlZEZvclJl
c3VtZSgpKTsKICAgICAvLyBBU1NFUlQgdGhhdCB0aGlzIG9iamVjdCBpcyBib3RoIGF0dGFjaGVk
IHRvIHRoZSBEb2N1bWVudCBhbmQgcHJvdGVjdGVkLgogICAgIEFTU0VSVChyZWZDb3VudCgpID49
IDIpOwpAQCAtMjE1LDkgKzIzNiw4IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpwdW1wVG9r
ZW5pemVyKFN5bmNocm9ub3VzTW9kZSBtb2RlKQogICAgIC8vIG11Y2ggd2UgcGFyc2VkIGFzIHBh
cnQgb2YgZGlkV3JpdGVIVE1MIGluc3RlYWQgb2Ygd2lsbFdyaXRlSFRNTC4KICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsV3JpdGVIVE1MKGRvY3VtZW50KCksIG1faW5wdXQuY3VycmVudCgpLmxlbmd0aCgpLCBt
X3Rva2VuaXplci0+bGluZU51bWJlcigpKTsKIAotICAgIEhUTUxQYXJzZXJTY2hlZHVsZXI6OlB1
bXBTZXNzaW9uIHNlc3Npb247Ci0gICAgLy8gRklYTUU6IFRoaXMgbG9vcCBib2R5IGhhcyBpcyBu
b3cgdG9vIGxvbmcgYW5kIG5lZWRzIGNsZWFudXAuCi0gICAgd2hpbGUgKG1vZGUgPT0gRm9yY2VT
eW5jaHJvbm91cyB8fCBtX3BhcnNlclNjaGVkdWxlci0+c2hvdWxkQ29udGludWVQYXJzaW5nKHNl
c3Npb24pKSB7CisgICAgUHVtcFNlc3Npb24gc2Vzc2lvbjsKKyAgICB3aGlsZSAoc2hvdWxkQ29u
dGludWVQYXJzaW5nQWZ0ZXJSdW5uaW5nU2NyaXB0cyhtb2RlLCBzZXNzaW9uKSkgewogICAgICAg
ICAvLyBGSVhNRTogSXQncyB3cm9uZyBmb3IgdGhlIEhUTUxEb2N1bWVudFBhcnNlciB0byByZWFj
aCBiYWNrIHRvIHRoZQogICAgICAgICAvLyAgICAgICAgRnJhbWUsIGJ1dCB0aGlzIGFwcHJvYWNo
IGlzIGhvdyB0aGUgb2xkIHBhcnNlciBoYW5kbGVkCiAgICAgICAgIC8vICAgICAgICBzdG9wcGlu
ZyB3aGVuIHRoZSBwYWdlIGFzc2lnbnMgd2luZG93LmxvY2F0aW9uLiAgV2hhdCByZWFsbHkKQEAg
LTIzNywzMSArMjU3LDE2IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpwdW1wVG9rZW5pemVy
KFN5bmNocm9ub3VzTW9kZSBtb2RlKQogCiAgICAgICAgIG1fdHJlZUJ1aWxkZXItPmNvbnN0cnVj
dFRyZWVGcm9tVG9rZW4obV90b2tlbik7CiAgICAgICAgIG1fdG9rZW4uY2xlYXIoKTsKLQotICAg
ICAgICAvLyBKYXZhU2NyaXB0IG1heSBoYXZlIHN0b3BwZWQgb3IgZGV0YWNoZWQgdGhlIHBhcnNl
ci4KLSAgICAgICAgaWYgKGlzU3RvcHBlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIC8vIFRoZSBwYXJzZXIgd2lsbCBwYXVzZSBpdHNlbGYgd2hlbiB3YWl0aW5nIG9uIGEgc2Ny
aXB0IHRvIGxvYWQgb3IgcnVuLgotICAgICAgICBpZiAoIW1fdHJlZUJ1aWxkZXItPmlzUGF1c2Vk
KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBJZiB3ZSdyZSBwYXVzZWQg
d2FpdGluZyBmb3IgYSBzY3JpcHQsIHdlIHRyeSB0byBleGVjdXRlIHNjcmlwdHMgYmVmb3JlIGNv
bnRpbnVpbmcuCi0gICAgICAgIGJvb2wgc2hvdWxkQ29udGludWVQYXJzaW5nID0gcnVuU2NyaXB0
c0ZvclBhdXNlZFRyZWVCdWlsZGVyKCk7Ci0gICAgICAgIG1fdHJlZUJ1aWxkZXItPnNldFBhdXNl
ZCghc2hvdWxkQ29udGludWVQYXJzaW5nKTsKLQotICAgICAgICAvLyBKYXZhU2NyaXB0IG1heSBo
YXZlIHN0b3BwZWQgb3IgZGV0YWNoZWQgdGhlIHBhcnNlci4KLSAgICAgICAgaWYgKGlzU3RvcHBl
ZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghc2hvdWxkQ29udGludWVQ
YXJzaW5nKQotICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgLy8gRW5zdXJlIHdlIGhh
dmVuJ3QgYmVlbiB0b3RhbGx5IGRlcmVmJ2VkIGFmdGVyIHB1bXBpbmcuIEFueSBjYWxsZXIgb2Yg
dGhpcwogICAgIC8vIGZ1bmN0aW9uIHNob3VsZCBiZSBob2xkaW5nIGEgUmVmUHRyIHRvIHRoaXMg
dG8gZW5zdXJlIHdlIHdlcmVuJ3QgZGVsZXRlZC4KICAgICBBU1NFUlQocmVmQ291bnQoKSA+PSAx
KTsKIAorICAgIC8vIEphdmFTY3JpcHQgbWF5IGhhdmUgc3RvcHBlZCBvciBkZXRhY2hlZCB0aGUg
cGFyc2VyLgorICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYg
KGlzV2FpdGluZ0ZvclNjcmlwdHMoKSkgewogICAgICAgICBBU1NFUlQobV90b2tlbml6ZXItPnN0
YXRlKCkgPT0gSFRNTFRva2VuaXplcjo6RGF0YVN0YXRlKTsKICAgICAgICAgaWYgKCFtX3ByZWxv
YWRTY2FubmVyKSB7CkBAIC00MzksNyArNDQ0LDcgQEAgYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6
OmlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdAogdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJl
c3VtZVBhcnNpbmdBZnRlclNjcmlwdEV4ZWN1dGlvbigpCiB7CiAgICAgQVNTRVJUKCFpblNjcmlw
dEV4ZWN1dGlvbigpKTsKLSAgICBBU1NFUlQoIW1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkpOwor
ICAgIEFTU0VSVCghaXNXYWl0aW5nRm9yU2NyaXB0cygpKTsKIAogICAgIG1fcHJlbG9hZFNjYW5u
ZXIuY2xlYXIoKTsKICAgICBwdW1wVG9rZW5pemVySWZQb3NzaWJsZShBbGxvd1lpZWxkKTsKQEAg
LTQ3OCw3ICs0ODMsNyBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQo
Q2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgQVNTRVJUKG1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkpOworICAgIEFTU0VSVChpc1dh
aXRpbmdGb3JTY3JpcHRzKCkpOwogICAgIC8vIE5vdGU6IFdlIG9ubHkgZXZlciB3YWl0IG9uIG9u
ZSBzY3JpcHQgYXQgYSB0aW1lLCBzbyB3ZSBhbHdheXMga25vdyB0aGlzCiAgICAgLy8gaXMgdGhl
IG9uZSB3ZSB3ZXJlIHdhaXRpbmcgb24gYW5kIGNhbiB1bi1wYXVzZSB0aGUgdHJlZSBidWlsZGVy
LgogICAgIG1fdHJlZUJ1aWxkZXItPnNldFBhdXNlZChmYWxzZSk7CkBAIC01MDQsNyArNTA5LDcg
QEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxl
c2hlZXRzKCkKICAgICBSZWZQdHI8SFRNTERvY3VtZW50UGFyc2VyPiBwcm90ZWN0KHRoaXMpOwog
CiAgICAgQVNTRVJUKCFtX3NjcmlwdFJ1bm5lci0+aXNFeGVjdXRpbmdTY3JpcHQoKSk7Ci0gICAg
QVNTRVJUKG1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkpOworICAgIEFTU0VSVChpc1dhaXRpbmdG
b3JTY3JpcHRzKCkpOwogICAgIC8vIE5vdGU6IFdlIG9ubHkgZXZlciB3YWl0IG9uIG9uZSBzY3Jp
cHQgYXQgYSB0aW1lLCBzbyB3ZSBhbHdheXMga25vdyB0aGlzCiAgICAgLy8gaXMgdGhlIG9uZSB3
ZSB3ZXJlIHdhaXRpbmcgb24gYW5kIGNhbiB1bi1wYXVzZSB0aGUgdHJlZSBidWlsZGVyLgogICAg
IG1fdHJlZUJ1aWxkZXItPnNldFBhdXNlZChmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCmluZGV4IGJlMmNhMWJhMjc5ZGQwMzBiNmU4
YWU4ZjU3MDVkMGNiYzk0NmFlNTkuLjlhNGNjZjc1ZjNjZGJiNzIzY2QwMDlhMjMxOTZkYjI1MWJj
NjhmMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVu
dFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBh
cnNlci5oCkBAIC01MSw2ICs1MSw4IEBAIGNsYXNzIEhUTUxQcmVsb2FkU2Nhbm5lcjsKIGNsYXNz
IFNjcmlwdENvbnRyb2xsZXI7CiBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlOwogCitzdHJ1Y3QgUHVt
cFNlc3Npb247CisKIGNsYXNzIEhUTUxEb2N1bWVudFBhcnNlciA6ICBwdWJsaWMgU2NyaXB0YWJs
ZURvY3VtZW50UGFyc2VyLCBIVE1MU2NyaXB0UnVubmVySG9zdCwgQ2FjaGVkUmVzb3VyY2VDbGll
bnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtMTE2LDYgKzEx
OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIEFsbG93WWllbGQsCiAgICAgICAgIEZvcmNlU3luY2hy
b25vdXMsCiAgICAgfTsKKyAgICBib29sIHNob3VsZENvbnRpbnVlUGFyc2luZ0FmdGVyUnVubmlu
Z1NjcmlwdHMoU3luY2hyb25vdXNNb2RlLCBQdW1wU2Vzc2lvbiYpOwogICAgIHZvaWQgcHVtcFRv
a2VuaXplcihTeW5jaHJvbm91c01vZGUpOwogICAgIHZvaWQgcHVtcFRva2VuaXplcklmUG9zc2li
bGUoU3luY2hyb25vdXNNb2RlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFBhcnNlclNjaGVkdWxlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFBhcnNlclNjaGVkdWxlci5oCmluZGV4IGM0MTVjNjIxYWI5ODkwNTg2MGFkYmMxNjJhYjA4
Y2I0NzMzNDA2OTkuLmJkYjExYjRiMGJjNzI2MTExNGY4NmFiODZkZmVhOTVlYjQ2NjI0MGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJTY2hlZHVsZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VyU2NoZWR1bGVyLmgK
QEAgLTM0LDYgKzM0LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTERvY3Vt
ZW50UGFyc2VyOwogCitzdHJ1Y3QgUHVtcFNlc3Npb24geworICAgIFB1bXBTZXNzaW9uKCkKKyAg
ICAgICAgOiBwcm9jZXNzZWRUb2tlbnMoMCkKKyAgICAgICAgLCBzdGFydFRpbWUoY3VycmVudFRp
bWUoKSkKKyAgICB7CisgICAgfQorCisgICAgaW50IHByb2Nlc3NlZFRva2VuczsKKyAgICBkb3Vi
bGUgc3RhcnRUaW1lOworfTsKKwogY2xhc3MgSFRNTFBhcnNlclNjaGVkdWxlciB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSFRNTFBhcnNlclNjaGVkdWxlcik7IFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgpAQCAtNDMsMTcgKzU0LDYgQEAgcHVibGljOgogICAgIH0KICAgICB+
SFRNTFBhcnNlclNjaGVkdWxlcigpOwogCi0gICAgc3RydWN0IFB1bXBTZXNzaW9uIHsKLSAgICAg
ICAgUHVtcFNlc3Npb24oKQotICAgICAgICAgICAgOiBwcm9jZXNzZWRUb2tlbnMoMCkKLSAgICAg
ICAgICAgICwgc3RhcnRUaW1lKGN1cnJlbnRUaW1lKCkpCi0gICAgICAgIHsKLSAgICAgICAgfQot
Ci0gICAgICAgIGludCBwcm9jZXNzZWRUb2tlbnM7Ci0gICAgICAgIGRvdWJsZSBzdGFydFRpbWU7
Ci0gICAgfTsKLQogICAgIC8vIElubGluZSBhcyB0aGlzIGlzIGNhbGxlZCBhZnRlciBldmVyeSB0
b2tlbiBpbiB0aGUgcGFyc2VyLgogICAgIGJvb2wgc2hvdWxkQ29udGludWVQYXJzaW5nKFB1bXBT
ZXNzaW9uJiBzZXNzaW9uKQogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82726</attachid>
            <date>2011-02-16 17:15:39 -0800</date>
            <delta_ts>2011-02-17 12:54:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54574-20110216171538.patch</filename>
            <type>text/plain</type>
            <size>9628</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzg1NzAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5Njg4M2VhYjY3YWI5MGMz
NjU2ZTk0Mjg4ZjY3YWMxMzg4ZmIxNzczLi5kNjg2NGJiOWYxODc4MzE1MjAzNzNjZjFjOWU3NTAw
OTk2YzRhMDdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDItMTYgIFRvbnkg
R2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBwdW1wVG9rZW5pemVyIGxvb3AKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NTc0CisKKyAg
ICAgICAgMS4gVGhpcyBtYWtlcyBwdW1wVG9rZW5pemVyKCkgc2FmZSB0byBjYWxsIHdoZW4gd2Fp
dGluZyBmb3IgYSBzY3JpcHQgb3Igd2hlbiBhYm91dCB0byBnZXQKKyAgICAgICAgICAgdGhlIG5l
eHQgdG9rZW4sIGFsdGhvdWdoIEFTU0VSVHMgc3RpbGwgZW5mb3JjZSB0aGF0IHdlIGFyZW4ndCB3
YWl0aW5nIGZvciBhIHNjcmlwdC4gVGhpcworICAgICAgICAgICBlbmFibGVzIHJlc3VtZVBhcnNp
bmdBZnRlcllpZWxkKCkgdG8gY2FsbCBwdW1wVG9rZW5pemVyIHdpdGggbm8gbW9kaWZpY2F0aW9u
cyBldmVuIGlmIHdlCisgICAgICAgICAgIHlpZWxkIGJlZm9yZSBydW5uaW5nIGEgc2NyaXB0IHJh
dGhlciB0aGFuIGJlZm9yZSB0YWtpbmcgYSB0b2tlbiAoc2VlIGJ1ZyA1NDM1NSkuCisgICAgICAg
IDIuIFRoaXMgYWxzbyBwaWNrcyB1cCB0aGUgcmVmQ291bnQgPj0gMSBhc3NlcnQgd2hlbiBzdG9w
cGVkLgorCisgICAgICAgIFRlc3RlZCBQZXJmb3JtYW5jZVRlc3RzL1BhcnNlciB0byB2ZXJpZnkg
bm8gcmVncmVzc2lvbi4gSWYgYW55dGhpbmcgaXQgZ290IGZhc3Rlci4KKyAgICAgICAgQmVmb3Jl
OgorICAgICAgICAgIGF2ZyA5ODUuMDUKKyAgICAgICAgICBtZWRpYW4gOTg1LjUKKyAgICAgICAg
ICBzdGRldiAzLjAwNzkwNjI0ODUzOTAwNworICAgICAgICAgIG1pbiA5ODAKKyAgICAgICAgICBt
YXggOTkwCisgICAgICAgIEFmdGVyOgorICAgICAgICAgIGF2ZyA5ODAuMDUKKyAgICAgICAgICBt
ZWRpYW4gOTgxCisgICAgICAgICAgc3RkZXYgMy4xMjIwOTg2NTMxNDk4MzMKKyAgICAgICAgICBt
aW4gOTc0CisgICAgICAgICAgbWF4IDk4NQorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNl
IG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3Vt
ZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6Y2Fu
VGFrZU5leHRUb2tlbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFy
c2VyOjpwdW1wVG9rZW5pemVyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQ
YXJzZXIuaDoKKwogMjAxMS0wMi0xNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggNzkzZjdlNTYwZDZlNWRm
MDMzNWUyYmQ3YzA1Y2IzNzEwMTVmY2Y3Zi4uZGZiYTk1OTQzZmY1NjYzZDRiMjliNWFiZmM0YmJl
YTNjMTRiNjA1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERv
Y3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9j
dW1lbnRQYXJzZXIuY3BwCkBAIC0yMDAsNiArMjAwLDM2IEBAIGJvb2wgSFRNTERvY3VtZW50UGFy
c2VyOjpydW5TY3JpcHRzRm9yUGF1c2VkVHJlZUJ1aWxkZXIoKQogICAgIHJldHVybiBtX3Njcmlw
dFJ1bm5lci0+ZXhlY3V0ZShzY3JpcHRFbGVtZW50LnJlbGVhc2UoKSwgc2NyaXB0U3RhcnRQb3Np
dGlvbik7CiB9CiAKK2Jvb2wgSFRNTERvY3VtZW50UGFyc2VyOjpjYW5UYWtlTmV4dFRva2VuKFN5
bmNocm9ub3VzTW9kZSBtb2RlLCBQdW1wU2Vzc2lvbiYgc2Vzc2lvbikKK3sKKyAgICBpZiAoaXNT
dG9wcGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRoZSBwYXJzZXIgd2ls
bCBwYXVzZSBpdHNlbGYgd2hlbiB3YWl0aW5nIG9uIGEgc2NyaXB0IHRvIGxvYWQgb3IgcnVuLgor
ICAgIGlmIChtX3RyZWVCdWlsZGVyLT5pc1BhdXNlZCgpKSB7CisgICAgICAgIC8vIElmIHdlJ3Jl
IHBhdXNlZCB3YWl0aW5nIGZvciBhIHNjcmlwdCwgd2UgdHJ5IHRvIGV4ZWN1dGUgc2NyaXB0cyBi
ZWZvcmUgY29udGludWluZy4KKyAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZVBhcnNpbmcgPSBy
dW5TY3JpcHRzRm9yUGF1c2VkVHJlZUJ1aWxkZXIoKTsKKyAgICAgICAgbV90cmVlQnVpbGRlci0+
c2V0UGF1c2VkKCFzaG91bGRDb250aW51ZVBhcnNpbmcpOworICAgICAgICBpZiAoIXNob3VsZENv
bnRpbnVlUGFyc2luZyB8fCBpc1N0b3BwZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogSXQncyB3cm9uZyBmb3IgdGhlIEhUTUxEb2N1bWVudFBh
cnNlciB0byByZWFjaCBiYWNrIHRvIHRoZQorICAgIC8vICAgICAgICBGcmFtZSwgYnV0IHRoaXMg
YXBwcm9hY2ggaXMgaG93IHRoZSBvbGQgcGFyc2VyIGhhbmRsZWQKKyAgICAvLyAgICAgICAgc3Rv
cHBpbmcgd2hlbiB0aGUgcGFnZSBhc3NpZ25zIHdpbmRvdy5sb2NhdGlvbi4gIFdoYXQgcmVhbGx5
CisgICAgLy8gICAgICAgIHNob3VsZCBoYXBwZW4gaXMgdGhhdCBhc3NpZ25pbmcgd2luZG93Lmxv
Y2F0aW9uIGNhdXNlcyB0aGUKKyAgICAvLyAgICAgICAgcGFyc2VyIHRvIHN0b3AgcGFyc2luZyBj
bGVhbmx5LiAgVGhlIHByb2JsZW0gaXMgd2UncmUgbm90CisgICAgLy8gICAgICAgIHBlcnBhcmVk
IHRvIGRvIHRoYXQgYXQgZXZlcnkgcG9pbnQgd2hlcmUgd2UgcnVuIEphdmFTY3JpcHQuCisgICAg
aWYgKCFtX3RyZWVCdWlsZGVyLT5pc1BhcnNpbmdGcmFnbWVudCgpCisgICAgICAgICYmIGRvY3Vt
ZW50KCktPmZyYW1lKCkgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bmF2aWdhdGlvblNjaGVkdWxl
cigpLT5sb2NhdGlvbkNoYW5nZVBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKG1vZGUgPT0gQWxsb3dZaWVsZCkKKyAgICAgICAgbV9wYXJzZXJTY2hlZHVsZXItPmNo
ZWNrRm9yWWllbGRCZWZvcmVUb2tlbihzZXNzaW9uKTsKKworICAgIHJldHVybiB0cnVlOworfQor
CiB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6cHVtcFRva2VuaXplcihTeW5jaHJvbm91c01vZGUg
bW9kZSkKIHsKICAgICBBU1NFUlQoIWlzU3RvcHBlZCgpKTsKQEAgLTIxNSwxOSArMjQ1LDggQEAg
dm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIoU3luY2hyb25vdXNNb2RlIG1v
ZGUpCiAgICAgLy8gbXVjaCB3ZSBwYXJzZWQgYXMgcGFydCBvZiBkaWRXcml0ZUhUTUwgaW5zdGVh
ZCBvZiB3aWxsV3JpdGVIVE1MLgogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBj
b29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxXcml0ZUhUTUwoZG9jdW1lbnQo
KSwgbV9pbnB1dC5jdXJyZW50KCkubGVuZ3RoKCksIG1fdG9rZW5pemVyLT5saW5lTnVtYmVyKCkp
OwogCi0gICAgSFRNTFBhcnNlclNjaGVkdWxlcjo6UHVtcFNlc3Npb24gc2Vzc2lvbjsKLSAgICAv
LyBGSVhNRTogVGhpcyBsb29wIGJvZHkgaGFzIGlzIG5vdyB0b28gbG9uZyBhbmQgbmVlZHMgY2xl
YW51cC4KLSAgICB3aGlsZSAobW9kZSA9PSBGb3JjZVN5bmNocm9ub3VzIHx8IG1fcGFyc2VyU2No
ZWR1bGVyLT5zaG91bGRDb250aW51ZVBhcnNpbmcoc2Vzc2lvbikpIHsKLSAgICAgICAgLy8gRklY
TUU6IEl0J3Mgd3JvbmcgZm9yIHRoZSBIVE1MRG9jdW1lbnRQYXJzZXIgdG8gcmVhY2ggYmFjayB0
byB0aGUKLSAgICAgICAgLy8gICAgICAgIEZyYW1lLCBidXQgdGhpcyBhcHByb2FjaCBpcyBob3cg
dGhlIG9sZCBwYXJzZXIgaGFuZGxlZAotICAgICAgICAvLyAgICAgICAgc3RvcHBpbmcgd2hlbiB0
aGUgcGFnZSBhc3NpZ25zIHdpbmRvdy5sb2NhdGlvbi4gIFdoYXQgcmVhbGx5Ci0gICAgICAgIC8v
ICAgICAgICBzaG91bGQgaGFwcGVuIGlzIHRoYXQgYXNzaWduaW5nIHdpbmRvdy5sb2NhdGlvbiBj
YXVzZXMgdGhlCi0gICAgICAgIC8vICAgICAgICBwYXJzZXIgdG8gc3RvcCBwYXJzaW5nIGNsZWFu
bHkuICBUaGUgcHJvYmxlbSBpcyB3ZSdyZSBub3QKLSAgICAgICAgLy8gICAgICAgIHBlcnBhcmVk
IHRvIGRvIHRoYXQgYXQgZXZlcnkgcG9pbnQgd2hlcmUgd2UgcnVuIEphdmFTY3JpcHQuCi0gICAg
ICAgIGlmICghbV90cmVlQnVpbGRlci0+aXNQYXJzaW5nRnJhZ21lbnQoKQotICAgICAgICAgICAg
JiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpLT5uYXZpZ2F0aW9u
U2NoZWR1bGVyKCktPmxvY2F0aW9uQ2hhbmdlUGVuZGluZygpKQotICAgICAgICAgICAgYnJlYWs7
Ci0KKyAgICBQdW1wU2Vzc2lvbiBzZXNzaW9uOworICAgIHdoaWxlIChjYW5UYWtlTmV4dFRva2Vu
KG1vZGUsIHNlc3Npb24pICYmICFzZXNzaW9uLm5lZWRzWWllbGQpIHsKICAgICAgICAgbV9zb3Vy
Y2VUcmFja2VyLnN0YXJ0KG1faW5wdXQsIG1fdG9rZW4pOwogICAgICAgICBpZiAoIW1fdG9rZW5p
emVyLT5uZXh0VG9rZW4obV9pbnB1dC5jdXJyZW50KCksIG1fdG9rZW4pKQogICAgICAgICAgICAg
YnJlYWs7CkBAIC0yMzcsMzEgKzI1NiwxOCBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6cHVt
cFRva2VuaXplcihTeW5jaHJvbm91c01vZGUgbW9kZSkKIAogICAgICAgICBtX3RyZWVCdWlsZGVy
LT5jb25zdHJ1Y3RUcmVlRnJvbVRva2VuKG1fdG9rZW4pOwogICAgICAgICBtX3Rva2VuLmNsZWFy
KCk7Ci0KLSAgICAgICAgLy8gSmF2YVNjcmlwdCBtYXkgaGF2ZSBzdG9wcGVkIG9yIGRldGFjaGVk
IHRoZSBwYXJzZXIuCi0gICAgICAgIGlmIChpc1N0b3BwZWQoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICAvLyBUaGUgcGFyc2VyIHdpbGwgcGF1c2UgaXRzZWxmIHdoZW4gd2FpdGlu
ZyBvbiBhIHNjcmlwdCB0byBsb2FkIG9yIHJ1bi4KLSAgICAgICAgaWYgKCFtX3RyZWVCdWlsZGVy
LT5pc1BhdXNlZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gSWYgd2Un
cmUgcGF1c2VkIHdhaXRpbmcgZm9yIGEgc2NyaXB0LCB3ZSB0cnkgdG8gZXhlY3V0ZSBzY3JpcHRz
IGJlZm9yZSBjb250aW51aW5nLgotICAgICAgICBib29sIHNob3VsZENvbnRpbnVlUGFyc2luZyA9
IHJ1blNjcmlwdHNGb3JQYXVzZWRUcmVlQnVpbGRlcigpOwotICAgICAgICBtX3RyZWVCdWlsZGVy
LT5zZXRQYXVzZWQoIXNob3VsZENvbnRpbnVlUGFyc2luZyk7Ci0KLSAgICAgICAgLy8gSmF2YVNj
cmlwdCBtYXkgaGF2ZSBzdG9wcGVkIG9yIGRldGFjaGVkIHRoZSBwYXJzZXIuCi0gICAgICAgIGlm
IChpc1N0b3BwZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIXNob3Vs
ZENvbnRpbnVlUGFyc2luZykKLSAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIC8vIEVu
c3VyZSB3ZSBoYXZlbid0IGJlZW4gdG90YWxseSBkZXJlZidlZCBhZnRlciBwdW1waW5nLiBBbnkg
Y2FsbGVyIG9mIHRoaXMKICAgICAvLyBmdW5jdGlvbiBzaG91bGQgYmUgaG9sZGluZyBhIFJlZlB0
ciB0byB0aGlzIHRvIGVuc3VyZSB3ZSB3ZXJlbid0IGRlbGV0ZWQuCiAgICAgQVNTRVJUKHJlZkNv
dW50KCkgPj0gMSk7CiAKKyAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChzZXNzaW9uLm5lZWRzWWllbGQpCisgICAgICAgIG1fcGFyc2VyU2NoZWR1bGVyLT5z
Y2hlZHVsZUZvclJlc3VtZSgpOworCiAgICAgaWYgKGlzV2FpdGluZ0ZvclNjcmlwdHMoKSkgewog
ICAgICAgICBBU1NFUlQobV90b2tlbml6ZXItPnN0YXRlKCkgPT0gSFRNTFRva2VuaXplcjo6RGF0
YVN0YXRlKTsKICAgICAgICAgaWYgKCFtX3ByZWxvYWRTY2FubmVyKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCmluZGV4IGJlMmNhMWJhMjc5
ZGQwMzBiNmU4YWU4ZjU3MDVkMGNiYzk0NmFlNTkuLjIzYzMxYTA5MDg5OTE2M2M4YjBkODM4OWY4
ZjA4MjQ5ZmQwZDNjNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxEb2N1bWVudFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxE
b2N1bWVudFBhcnNlci5oCkBAIC01MSw2ICs1MSw4IEBAIGNsYXNzIEhUTUxQcmVsb2FkU2Nhbm5l
cjsKIGNsYXNzIFNjcmlwdENvbnRyb2xsZXI7CiBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlOwogCitz
dHJ1Y3QgUHVtcFNlc3Npb247CisKIGNsYXNzIEhUTUxEb2N1bWVudFBhcnNlciA6ICBwdWJsaWMg
U2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLCBIVE1MU2NyaXB0UnVubmVySG9zdCwgQ2FjaGVkUmVz
b3VyY2VDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAt
MTE2LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIEFsbG93WWllbGQsCiAgICAgICAgIEZv
cmNlU3luY2hyb25vdXMsCiAgICAgfTsKKyAgICBib29sIGNhblRha2VOZXh0VG9rZW4oU3luY2hy
b25vdXNNb2RlLCBQdW1wU2Vzc2lvbiYpOwogICAgIHZvaWQgcHVtcFRva2VuaXplcihTeW5jaHJv
bm91c01vZGUpOwogICAgIHZvaWQgcHVtcFRva2VuaXplcklmUG9zc2libGUoU3luY2hyb25vdXNN
b2RlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNl
clNjaGVkdWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VyU2No
ZWR1bGVyLmNwcAppbmRleCA1NmRiMWFhMDBjZjNhMWFlOGM1NmFhZmM4ODFkZjA1YmI4MTA4NjE4
Li45OWMwOTA3NjZlZjY5MzI3ZGM2Nzg3ZGU3MDk5NjQwYzczYWVkYTg1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VyU2NoZWR1bGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VyU2NoZWR1bGVyLmNwcApAQCAtOTMs
NiArOTMsMTIgQEAgdm9pZCBIVE1MUGFyc2VyU2NoZWR1bGVyOjpjb250aW51ZU5leHRDaHVua1Rp
bWVyRmlyZWQoVGltZXI8SFRNTFBhcnNlclNjaGVkdWxlcj4KICAgICBtX3BhcnNlci0+cmVzdW1l
UGFyc2luZ0FmdGVyWWllbGQoKTsKIH0KIAordm9pZCBIVE1MUGFyc2VyU2NoZWR1bGVyOjpzY2hl
ZHVsZUZvclJlc3VtZSgpCit7CisgICAgbV9jb250aW51ZU5leHRDaHVua1RpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKK30KKworCiB2b2lkIEhUTUxQYXJzZXJTY2hlZHVsZXI6OnN1c3BlbmQoKQogewog
ICAgIEFTU0VSVCghbV9pc1N1c3BlbmRlZFdpdGhBY3RpdmVUaW1lcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VyU2NoZWR1bGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VyU2NoZWR1bGVyLmgKaW5kZXggYzQxNWM2MjFh
Yjk4OTA1ODYwYWRiYzE2MmFiMDhjYjQ3MzM0MDY5OS4uZDMyZTc0NWJhOThiNTIxYzNiYjkzMTVm
NTk1NGUyZWFmYmU5NzMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFBhcnNlclNjaGVkdWxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxQYXJzZXJTY2hlZHVsZXIuaApAQCAtMzQsNiArMzQsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBIVE1MRG9jdW1lbnRQYXJzZXI7CiAKK3N0cnVjdCBQdW1wU2Vzc2lvbiB7Cisg
ICAgUHVtcFNlc3Npb24oKQorICAgICAgICA6IHByb2Nlc3NlZFRva2VucygwKQorICAgICAgICAs
IHN0YXJ0VGltZShjdXJyZW50VGltZSgpKQorICAgICAgICAsIG5lZWRzWWllbGQoZmFsc2UpCisg
ICAgeworICAgIH0KKworICAgIGludCBwcm9jZXNzZWRUb2tlbnM7CisgICAgZG91YmxlIHN0YXJ0
VGltZTsKKyAgICBib29sIG5lZWRzWWllbGQ7Cit9OworCiBjbGFzcyBIVE1MUGFyc2VyU2NoZWR1
bGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIVE1MUGFyc2VyU2NoZWR1bGVyKTsgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC00MywzNCArNTYsMTkgQEAgcHVibGlj
OgogICAgIH0KICAgICB+SFRNTFBhcnNlclNjaGVkdWxlcigpOwogCi0gICAgc3RydWN0IFB1bXBT
ZXNzaW9uIHsKLSAgICAgICAgUHVtcFNlc3Npb24oKQotICAgICAgICAgICAgOiBwcm9jZXNzZWRU
b2tlbnMoMCkKLSAgICAgICAgICAgICwgc3RhcnRUaW1lKGN1cnJlbnRUaW1lKCkpCi0gICAgICAg
IHsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBwcm9jZXNzZWRUb2tlbnM7Ci0gICAgICAgIGRv
dWJsZSBzdGFydFRpbWU7Ci0gICAgfTsKLQogICAgIC8vIElubGluZSBhcyB0aGlzIGlzIGNhbGxl
ZCBhZnRlciBldmVyeSB0b2tlbiBpbiB0aGUgcGFyc2VyLgotICAgIGJvb2wgc2hvdWxkQ29udGlu
dWVQYXJzaW5nKFB1bXBTZXNzaW9uJiBzZXNzaW9uKQorICAgIHZvaWQgY2hlY2tGb3JZaWVsZEJl
Zm9yZVRva2VuKFB1bXBTZXNzaW9uJiBzZXNzaW9uKQogICAgIHsKICAgICAgICAgaWYgKHNlc3Np
b24ucHJvY2Vzc2VkVG9rZW5zID4gbV9wYXJzZXJDaHVua1NpemUpIHsKICAgICAgICAgICAgIHNl
c3Npb24ucHJvY2Vzc2VkVG9rZW5zID0gMDsKICAgICAgICAgICAgIGRvdWJsZSBlbGFwc2VkVGlt
ZSA9IGN1cnJlbnRUaW1lKCkgLSBzZXNzaW9uLnN0YXJ0VGltZTsKLSAgICAgICAgICAgIGlmIChl
bGFwc2VkVGltZSA+IG1fcGFyc2VyVGltZUxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgLy8gU2No
ZWR1bGUgdGhlIHBhcnNlciB0byBjb250aW51ZSBhbmQgeWllbGQgZnJvbSB0aGUgcGFyc2VyLgot
ICAgICAgICAgICAgICAgIG1fY29udGludWVOZXh0Q2h1bmtUaW1lci5zdGFydE9uZVNob3QoMCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGVsYXBzZWRUaW1lID4gbV9wYXJzZXJUaW1lTGltaXQpCisgICAgICAgICAgICAgICAg
c2Vzc2lvbi5uZWVkc1lpZWxkID0gdHJ1ZTsKICAgICAgICAgfQotCiAgICAgICAgICsrc2Vzc2lv
bi5wcm9jZXNzZWRUb2tlbnM7Ci0gICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIHZv
aWQgc2NoZWR1bGVGb3JSZXN1bWUoKTsKICAgICBib29sIGlzU2NoZWR1bGVkRm9yUmVzdW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9pc1N1c3BlbmRlZFdpdGhBY3RpdmVUaW1lciB8fCBtX2NvbnRpbnVl
TmV4dENodW5rVGltZXIuaXNBY3RpdmUoKTsgfQogCiAgICAgdm9pZCBzdXNwZW5kKCk7Cg==
</data>
<flag name="review"
          id="74419"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="74558"
          type_id="3"
          status="+"
          setter="tonyg"
    />
          </attachment>
      

    </bug>

</bugzilla>