<?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>128450</bug_id>
          
          <creation_ts>2014-02-08 00:14:54 -0800</creation_ts>
          <short_desc>Remove unnecessary spinLock in JSLock.</short_desc>
          <delta_ts>2014-02-10 11:35:20 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>128451</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>978323</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-02-08 00:14:54 -0800</bug_when>
    <thetext>Instead of having DropAllLock acquire JSLock&apos;s spinLock and then passing it into dropAllLocks(), dropAllLocksUnconditionally(), and grabAllLocks(), let those JSLock methods acquire the spinLock themselves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978338</commentid>
    <comment_count>1</comment_count>
      <attachid>223560</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-02-08 00:30:14 -0800</bug_when>
    <thetext>Created attachment 223560
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978387</commentid>
    <comment_count>2</comment_count>
      <attachid>223560</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-02-08 10:47:53 -0800</bug_when>
    <thetext>Comment on attachment 223560
the patch.

This code implies that the spinlock guards m_lockCount, and that multiple threads might point to the same JSLock. If so, it&apos;s not valid to read m_lockCount without holding the spinlock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978443</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-02-08 15:11:30 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 223560 [details])
&gt; This code implies that the spinlock guards m_lockCount, and that multiple threads might point to the same JSLock. If so, it&apos;s not valid to read m_lockCount without holding the spinlock.

I think you misread the code.  But I’ll rename some variables and field to make things clearer first before we revisit this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978750</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-02-09 23:19:08 -0800</bug_when>
    <thetext>Upon further inspection of the JSLock code, we discovered that the spinLock is not actually necessary because the JSLock’s mutex already provide the needed protection for JSLock’s internal state.  The only remaining issue is that we’ll need to add some memory barriers to so we don’t have issues with out of order read-writes on Weak Memory Ordering architectures like ARM.

We also need to clear JSLock::m_ownerThread when unlocking the JSLock.

Patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978751</commentid>
    <comment_count>5</comment_count>
      <attachid>223678</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-02-09 23:19:53 -0800</bug_when>
    <thetext>Created attachment 223678
patch 2: removes spinLock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978752</commentid>
    <comment_count>6</comment_count>
      <attachid>223678</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-09 23:22:13 -0800</bug_when>
    <thetext>Comment on attachment 223678
patch 2: removes spinLock.

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

This looks right to me.  I recommend getting a second review since this is tricky code.  Also please remove any unnecessary scopes now that you&apos;re not using them for the destruction of SpinLockHolders.

&gt; Source/JavaScriptCore/runtime/JSLock.cpp:113
&gt;      {

This nesting scope is no longer necessary now that you&apos;ve removed the SpinLockHolder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978753</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-02-09 23:25:15 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Upon further inspection of the JSLock code, we discovered that the spinLock is not actually necessary because the JSLock’s mutex already provide the needed protection for JSLock’s internal state.  The only remaining issue is that we’ll need to add some memory barriers to so we don’t have issues with out of order read-writes on Weak Memory Ordering architectures like ARM.

The out of order read-writes here refer to reads and writes of the value of JSLock::m_ownerThread since we’re using it for the ownership test without requiring a lock around its access.

(In reply to comment #6)
&gt; &gt; Source/JavaScriptCore/runtime/JSLock.cpp:113
&gt; &gt;      {
&gt; 
&gt; This nesting scope is no longer necessary now that you&apos;ve removed the SpinLockHolder.

Thanks for the review.  As indicated in the ChangeLog, I deliberately left the scope in place so that the diff does not look bigger than it has to (to make it clearer as to what actually change).  I had intend to remove it in a subsequent patch.  However, if you and the 2nd reviewer agrees on removing it right away, I can remove it before landing this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978755</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-09 23:28:37 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #4)
&gt; &gt; Upon further inspection of the JSLock code, we discovered that the spinLock is not actually necessary because the JSLock’s mutex already provide the needed protection for JSLock’s internal state.  The only remaining issue is that we’ll need to add some memory barriers to so we don’t have issues with out of order read-writes on Weak Memory Ordering architectures like ARM.
&gt; 
&gt; The out of order read-writes here refer to reads and writes of the value of JSLock::m_ownerThread since we’re using it for the ownership test without requiring a lock around its access.
&gt; 
&gt; (In reply to comment #6)
&gt; &gt; &gt; Source/JavaScriptCore/runtime/JSLock.cpp:113
&gt; &gt; &gt;      {
&gt; &gt; 
&gt; &gt; This nesting scope is no longer necessary now that you&apos;ve removed the SpinLockHolder.
&gt; 
&gt; Thanks for the review.  As indicated in the ChangeLog, I deliberately left the scope in place so that the diff does not look bigger than it has to (to make it clearer as to what actually change).  I had intend to remove it in a subsequent patch.  However, if you and the 2nd reviewer agrees on removing it right away, I can remove it before landing this patch.

FWIW, I would have found this change easier to read if you had removed the scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978918</commentid>
    <comment_count>9</comment_count>
      <attachid>223678</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-02-10 09:27:32 -0800</bug_when>
    <thetext>Comment on attachment 223678
patch 2: removes spinLock.

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

&gt; Source/JavaScriptCore/runtime/JSLock.h:122
&gt;          ThreadIdentifier m_ownerThread;

Let&apos;s use std::atomic for m_ownerThread.

Advantages:

(1) You can remove 5 paragraphs of text from your ChangeLog, and from the minds of any programmers who work with this code.

(2) The code will not mysteriously start failing if someone changes ThreadIdentifier into a struct.

Disadvantages:

(1) Maybe a little slower.

I assert that (1) does not matter, but if you think it does, you can always specify memory_order_acquire / memory_order_release to get identical performance to what you have here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978927</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-10 09:46:05 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 223678 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=223678&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSLock.h:122
&gt; &gt;          ThreadIdentifier m_ownerThread;
&gt; 
&gt; Let&apos;s use std::atomic for m_ownerThread.
&gt; 
&gt; Advantages:
&gt; 
&gt; (1) You can remove 5 paragraphs of text from your ChangeLog, and from the minds of any programmers who work with this code.

I would have removed those 5 paragraphs anyway. ;-)  I also don&apos;t think that the memory fence is necessary.  The memory allocator will have already executed the required fences.

The allocator would have *had* to execute a fence because:

- If this kind of weirdness was actually possible, I suspect a lot of intentionally racy algorithms would start failing.

- A block of freed memory cannot make its way from thread A to thread B without some synchronization, which would lead to all the required fences being executed on thread A and thread B.

&gt; 
&gt; (2) The code will not mysteriously start failing if someone changes ThreadIdentifier into a struct.

I think there is a lot of code that will mysteriously start failing if someone made that change.

&gt; 
&gt; Disadvantages:
&gt; 
&gt; (1) Maybe a little slower.
&gt; 
&gt; I assert that (1) does not matter, but if you think it does, you can always specify memory_order_acquire / memory_order_release to get identical performance to what you have here.

Using std::atomic without it being necessary risks creating a cargo cult.  I actually don&apos;t think there&apos;s anything crazy about this field, or the way it is accessed, and we don&apos;t need a memory fence here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978930</commentid>
    <comment_count>11</comment_count>
      <attachid>223678</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-10 09:47:55 -0800</bug_when>
    <thetext>Comment on attachment 223678
patch 2: removes spinLock.

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

&gt; Source/JavaScriptCore/ChangeLog:62
&gt; +           Consider the following scenario:
&gt; +           1. Thread A allocated some heap memory M1 for some use.
&gt; +           2. Thread A writes its thread id to memory M1.
&gt; +              The written value is flushed to memory.
&gt; +           3. Thread A frees memory M1. Thread A&apos;s thread id remains in memory M1.
&gt; +
&gt; +           4. Thread B allocates a JSLock which coincidentally gets located in M1.
&gt; +              Thread B writes its thread id to the lock&apos;s m_ownerThread.
&gt; +              The thread id is present in the CPU write back buffer but is not
&gt; +              flushed to memory yet.
&gt; +
&gt; +           5. Before B&apos;s thread id is flushed to memory, Thread A gets a hold
&gt; +              of the JSLock and checks its m_ownerThread.
&gt; +
&gt; +              Because Thread B&apos;s thread id is still in the write back buffer.
&gt; +              the m_ownerThread value that Thread A sees is the stale value of
&gt; +              Thread A&apos;s thread id. This erroneously tells Thread A that it
&gt; +              owns the JSLock when it doesn&apos;t.
&gt; +
&gt; +           To prevent this issue (unlikely as it may be), we execute a memory
&gt; +           barrier instruction right before we read m_ownerThread and right
&gt; +           after we write to it to ensure the store to m_ownerThread in memory
&gt; +           is completed before reads from it are executed.

I don&apos;t think that this issue is a real thing.  There&apos;s no way for thread B to allocate memory in the same place where thread A freed memory without all of the required synchronization being executed.

&gt; Source/JavaScriptCore/runtime/JSLock.cpp:158
&gt; +    WTF::loadLoadFence();    

Get rid of this.

&gt; Source/JavaScriptCore/runtime/JSLock.cpp:165
&gt; +    WTF::storeStoreFence();

Get rid of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978954</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-02-10 10:29:10 -0800</bug_when>
    <thetext>I agree: the malloc case would be a bug in malloc. Malloc&apos;s one job is to ensure that all writes to a memory location &quot;happens before&quot; reuse of that memory location.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978956</commentid>
    <comment_count>13</comment_count>
      <attachid>223725</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-02-10 10:32:03 -0800</bug_when>
    <thetext>Created attachment 223725
patch for landing.

Thanks for Geoff’s and Filip’s feedback.  In this updated patch, I did the following:
1. removed the memory fences
2. changed setOwnerThread() into an inline function since it is now a trivial single assignment.
3. removed the unnecessary scoping in JSLock::lock() now that reviewers have had a chance to see the diffs before its removal.
4. removed the ChangeLog comments about the necessity for a memory barrier/fence.
5. added a paragraph to explain how weak memory ordering can cause Thread B to not see Thread A’s id in m_ownerThread when doing an ownership test, but that is immaterial because Thread B will see a 0 (written out courtesy of the memory fence in the last mutex unlock) and know that it does not own the lock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978974</commentid>
    <comment_count>14</comment_count>
      <attachid>223725</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-02-10 11:28:06 -0800</bug_when>
    <thetext>Comment on attachment 223725
patch for landing.

Per my offline conversation with fpizlo, his r+ from the previous patch applies to this updated patch as well.  Will land shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978978</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-02-10 11:35:20 -0800</bug_when>
    <thetext>Landed in r163804: &lt;http://trac.webkit.org/r163804&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223560</attachid>
            <date>2014-02-08 00:30:14 -0800</date>
            <delta_ts>2014-02-09 23:19:53 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-128450.patch</filename>
            <type>text/plain</type>
            <size>5717</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzNzAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBA
CisyMDE0LTAyLTA4ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBE
cm9wQWxsTG9ja3Mgc2hvdWxkIGxldCBKU0xvY2sgbG9jayBpdHMgc3BpbkxvY2suCisgICAgICAg
IDxodHRwczovL3dlYmtpdC5vcmcvYi8xMjg0NTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBoYXZpbmcgRHJvcEFsbExvY2sgYWNx
dWlyZSBKU0xvY2sncyBzcGluTG9jayBhbmQgdGhlbiBwYXNzaW5nCisgICAgICAgIGl0IGludG8g
ZHJvcEFsbExvY2tzKCksIGRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseSgpLCBhbmQgZ3JhYkFs
bExvY2tzKCksCisgICAgICAgIGxldCB0aG9zZSBKU0xvY2sgbWV0aG9kcyBhY3F1aXJlIHRoZSBz
cGluTG9jayB0aGVtc2VsdmVzLgorCisgICAgICAgICogcnVudGltZS9KU0xvY2suY3BwOgorICAg
ICAgICAoSlNDOjpKU0xvY2s6OmRyb3BBbGxMb2Nrcyk6CisgICAgICAgIChKU0M6OkpTTG9jazo6
ZHJvcEFsbExvY2tzVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpncmFi
QWxsTG9ja3MpOgorICAgICAgICAoSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExv
Y2tzKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3M6On5Ecm9wQWxsTG9ja3Mp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisKIDIwMTQtMDItMDcgIE1hcmsgTGFtICA8
bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEpTTG9jayBzaG91bGQgbm90ICJyZXN0b3Jl
IiBWTSBzdGFjayB2YWx1ZXMgaWYgaXQgZGlkIG5vdCByZS1ncmFiIGxvY2tzLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCShyZXZpc2lvbiAxNjM3MDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDYsOSArMjA2LDEwIEBAIGJvb2wgSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5n
TG9jaygKIC8vCiAKIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGxvY2tz
IHRoYXQgd2VyZSBkcm9wcGVkLgotdW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3MoU3Bpbkxv
Y2smIHNwaW5Mb2NrKQordW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3MoKQogewotICAgIEFT
U0VSVF9VTlVTRUQoc3BpbkxvY2ssIHNwaW5Mb2NrLklzSGVsZCgpKTsKKyAgICBTcGluTG9ja0hv
bGRlciBob2xkZXIoJm1fc3BpbkxvY2spOworCiAgICAgLy8gQ2hlY2sgaWYgdGhpcyB0aHJlYWQg
aXMgY3VycmVudGx5IGhvbGRpbmcgdGhlIGxvY2suCiAgICAgLy8gRklYTUU6IE1heWJlIHdlIHdh
bnQgdG8gcmVxdWlyZSB0aGlzLCBndWFyZCB3aXRoIGFuIEFTU0VSVD8KICAgICB1bnNpZ25lZCBs
b2NrQ291bnQgPSBtX2xvY2tDb3VudDsKQEAgLTIzNyw5ICsyMzgsMTAgQEAgdW5zaWduZWQgSlNM
b2NrOjpkcm9wQWxsTG9ja3MoU3BpbkxvY2smIAogICAgIHJldHVybiBsb2NrQ291bnQ7CiB9CiAK
LXVuc2lnbmVkIEpTTG9jazo6ZHJvcEFsbExvY2tzVW5jb25kaXRpb25hbGx5KFNwaW5Mb2NrJiBz
cGluTG9jaykKK3Vuc2lnbmVkIEpTTG9jazo6ZHJvcEFsbExvY2tzVW5jb25kaXRpb25hbGx5KCkK
IHsKLSAgICBBU1NFUlRfVU5VU0VEKHNwaW5Mb2NrLCBzcGluTG9jay5Jc0hlbGQoKSk7CisgICAg
U3BpbkxvY2tIb2xkZXIgaG9sZGVyKCZtX3NwaW5Mb2NrKTsKKwogICAgIC8vIENoZWNrIGlmIHRo
aXMgdGhyZWFkIGlzIGN1cnJlbnRseSBob2xkaW5nIHRoZSBsb2NrLgogICAgIC8vIEZJWE1FOiBN
YXliZSB3ZSB3YW50IHRvIHJlcXVpcmUgdGhpcywgZ3VhcmQgd2l0aCBhbiBBU1NFUlQ/CiAgICAg
dW5zaWduZWQgbG9ja0NvdW50ID0gbV9sb2NrQ291bnQ7CkBAIC0yNjIsMjkgKzI2NCwzMiBAQCB1
bnNpZ25lZCBKU0xvY2s6OmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uCiAgICAgcmV0dXJuIGxvY2tD
b3VudDsKIH0KIAotdm9pZCBKU0xvY2s6OmdyYWJBbGxMb2Nrcyh1bnNpZ25lZCBsb2NrQ291bnQs
IFNwaW5Mb2NrJiBzcGluTG9jaykKK3ZvaWQgSlNMb2NrOjpncmFiQWxsTG9ja3ModW5zaWduZWQg
bG9ja0NvdW50KQogewotICAgIEFTU0VSVChzcGluTG9jay5Jc0hlbGQoKSk7CiAgICAgLy8gSWYg
bm8gbG9ja3Mgd2VyZSBkcm9wcGVkLCBub3RoaW5nIHRvIGRvIQogICAgIGlmICghbG9ja0NvdW50
KQogICAgICAgICByZXR1cm47CiAKICAgICBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQg
PSBXVEY6OmN1cnJlbnRUaHJlYWQoKTsKLSAgICAvLyBDaGVjayBpZiB0aGlzIHRocmVhZCBpcyBj
dXJyZW50bHkgaG9sZGluZyB0aGUgbG9jay4KLSAgICAvLyBGSVhNRTogTWF5YmUgd2Ugd2FudCB0
byBwcm9oaWJpdCB0aGlzLCBndWFyZCBhZ2FpbnN0IHdpdGggYW4gQVNTRVJUPwotICAgIGlmICht
X293bmVyVGhyZWFkID09IGN1cnJlbnRUaHJlYWQgJiYgbV9sb2NrQ291bnQpIHsKLSAgICAgICAg
bV9sb2NrQ291bnQgKz0gbG9ja0NvdW50OwotICAgICAgICAtLW1fbG9ja0Ryb3BEZXB0aDsKLSAg
ICAgICAgcmV0dXJuOworICAgIHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgaG9sZGVyKCZtX3Nw
aW5Mb2NrKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyB0aHJlYWQgaXMgY3VycmVudGx5IGhv
bGRpbmcgdGhlIGxvY2suCisgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSB3YW50IHRvIHByb2hp
Yml0IHRoaXMsIGd1YXJkIGFnYWluc3Qgd2l0aCBhbiBBU1NFUlQ/CisgICAgICAgIGlmIChtX293
bmVyVGhyZWFkID09IGN1cnJlbnRUaHJlYWQgJiYgbV9sb2NrQ291bnQpIHsKKyAgICAgICAgICAg
IG1fbG9ja0NvdW50ICs9IGxvY2tDb3VudDsKKyAgICAgICAgICAgIC0tbV9sb2NrRHJvcERlcHRo
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogCi0gICAgc3BpbkxvY2su
VW5sb2NrKCk7CiAgICAgbV9sb2NrLmxvY2soKTsKLSAgICBzcGluTG9jay5Mb2NrKCk7CiAKLSAg
ICBtX293bmVyVGhyZWFkID0gY3VycmVudFRocmVhZDsKLSAgICBBU1NFUlQoIW1fbG9ja0NvdW50
KTsKLSAgICBtX2xvY2tDb3VudCA9IGxvY2tDb3VudDsKKyAgICB7CisgICAgICAgIFNwaW5Mb2Nr
SG9sZGVyIGhvbGRlcigmbV9zcGluTG9jayk7CisgICAgICAgIG1fb3duZXJUaHJlYWQgPSBjdXJy
ZW50VGhyZWFkOworICAgICAgICBBU1NFUlQoIW1fbG9ja0NvdW50KTsKKyAgICAgICAgbV9sb2Nr
Q291bnQgPSBsb2NrQ291bnQ7CisgICAgfQogICAgIC0tbV9sb2NrRHJvcERlcHRoOwogCiAgICAg
V1RGVGhyZWFkRGF0YSYgdGhyZWFkRGF0YSA9IHd0ZlRocmVhZERhdGEoKTsKQEAgLTI5OSwxMyAr
MzA0LDExIEBAIEpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoRXhlY1MKIHsKICAg
ICBpZiAoIW1fdm0pCiAgICAgICAgIHJldHVybjsKLSAgICBTcGluTG9jayYgc3BpbkxvY2sgPSBt
X3ZtLT5hcGlMb2NrKCkubV9zcGluTG9jazsKLSAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJnNw
aW5Mb2NrKTsKIAogICAgIGlmIChhbHdheXNEcm9wTG9ja3MpCi0gICAgICAgIG1fbG9ja0NvdW50
ID0gbV92bS0+YXBpTG9jaygpLmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseShzcGluTG9jayk7
CisgICAgICAgIG1fbG9ja0NvdW50ID0gbV92bS0+YXBpTG9jaygpLmRyb3BBbGxMb2Nrc1VuY29u
ZGl0aW9uYWxseSgpOwogICAgIGVsc2UKLSAgICAgICAgbV9sb2NrQ291bnQgPSBtX3ZtLT5hcGlM
b2NrKCkuZHJvcEFsbExvY2tzKHNwaW5Mb2NrKTsKKyAgICAgICAgbV9sb2NrQ291bnQgPSBtX3Zt
LT5hcGlMb2NrKCkuZHJvcEFsbExvY2tzKCk7CiB9CiAKIEpTTG9jazo6RHJvcEFsbExvY2tzOjpE
cm9wQWxsTG9ja3MoVk0qIHZtLCBBbHdheXNEcm9wTG9ja3NUYWcgYWx3YXlzRHJvcExvY2tzKQpA
QCAtMzE0LDIyICszMTcsMTggQEAgSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhW
TSogdgogewogICAgIGlmICghbV92bSkKICAgICAgICAgcmV0dXJuOwotICAgIFNwaW5Mb2NrJiBz
cGluTG9jayA9IG1fdm0tPmFwaUxvY2soKS5tX3NwaW5Mb2NrOwotICAgIFNwaW5Mb2NrSG9sZGVy
IGhvbGRlcigmc3BpbkxvY2spOwogCiAgICAgaWYgKGFsd2F5c0Ryb3BMb2NrcykKLSAgICAgICAg
bV9sb2NrQ291bnQgPSBtX3ZtLT5hcGlMb2NrKCkuZHJvcEFsbExvY2tzVW5jb25kaXRpb25hbGx5
KHNwaW5Mb2NrKTsKKyAgICAgICAgbV9sb2NrQ291bnQgPSBtX3ZtLT5hcGlMb2NrKCkuZHJvcEFs
bExvY2tzVW5jb25kaXRpb25hbGx5KCk7CiAgICAgZWxzZQotICAgICAgICBtX2xvY2tDb3VudCA9
IG1fdm0tPmFwaUxvY2soKS5kcm9wQWxsTG9ja3Moc3BpbkxvY2spOworICAgICAgICBtX2xvY2tD
b3VudCA9IG1fdm0tPmFwaUxvY2soKS5kcm9wQWxsTG9ja3MoKTsKIH0KIAogSlNMb2NrOjpEcm9w
QWxsTG9ja3M6On5Ecm9wQWxsTG9ja3MoKQogewogICAgIGlmICghbV92bSkKICAgICAgICAgcmV0
dXJuOwotICAgIFNwaW5Mb2NrJiBzcGluTG9jayA9IG1fdm0tPmFwaUxvY2soKS5tX3NwaW5Mb2Nr
OwotICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOwotICAgIG1fdm0tPmFwaUxv
Y2soKS5ncmFiQWxsTG9ja3MobV9sb2NrQ291bnQsIHNwaW5Mb2NrKTsKKyAgICBtX3ZtLT5hcGlM
b2NrKCkuZ3JhYkFsbExvY2tzKG1fbG9ja0NvdW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAkocmV2aXNpb24gMTYz
NzAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExMyw5ICsxMTMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfTsKIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIHVuc2lnbmVkIGRyb3BBbGxMb2NrcyhTcGluTG9jayYpOwot
ICAgICAgICB1bnNpZ25lZCBkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoU3BpbkxvY2smKTsK
LSAgICAgICAgdm9pZCBncmFiQWxsTG9ja3ModW5zaWduZWQgbG9ja0NvdW50LCBTcGluTG9jayYp
OworICAgICAgICB1bnNpZ25lZCBkcm9wQWxsTG9ja3MoKTsKKyAgICAgICAgdW5zaWduZWQgZHJv
cEFsbExvY2tzVW5jb25kaXRpb25hbGx5KCk7CisgICAgICAgIHZvaWQgZ3JhYkFsbExvY2tzKHVu
c2lnbmVkIGxvY2tDb3VudCk7CiAKICAgICAgICAgU3BpbkxvY2sgbV9zcGluTG9jazsKICAgICAg
ICAgTXV0ZXggbV9sb2NrOwo=
</data>
<flag name="review"
          id="247603"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223678</attachid>
            <date>2014-02-09 23:19:53 -0800</date>
            <delta_ts>2014-02-10 10:32:03 -0800</delta_ts>
            <desc>patch 2: removes spinLock.</desc>
            <filename>bug-128450.patch</filename>
            <type>text/plain</type>
            <size>13177</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzNzY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBA
QAorMjAxNC0wMi0wOSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVtb3ZlIHVubmVjZXNzYXJ5IHNwaW5Mb2NrIGluIEpTTG9jay4KKyAgICAgICAgPGh0dHBzOi8v
d2Via2l0Lm9yZy9iLzEyODQ1MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGUgSlNMb2NrJ3MgbXV0ZXggYWxyZWFkeSBwcm92aWRlcyBwcm90ZWN0
aW9uIGZvciB3cml0ZSBhY2Nlc3MgdG8KKyAgICAgICAgSlNMb2NrJ3MgaW50ZXJuYWwgc3RhdGUu
IFRoZSBvbmx5IEpTTG9jayBzdGF0ZSB0aGF0IG5lZWRzIHRvIGJlIHJlYWQKKyAgICAgICAgZnJv
bSBhbnkgdGhyZWFkIGluY2x1ZGluZyB0aHJlYWRzIHRoYXQgZG9uJ3Qgb3duIHRoZSBKU0xvY2sg
aXMKKyAgICAgICAgbV9vd25lclRocmVhZCwgd2hpY2ggaXMgdXNlZCBpbiBjdXJyZW50VGhyZWFk
SXNIb2xkaW5nTG9jaygpIHRvIGRvIGFuCisgICAgICAgIG93bmVyc2hpcCB0ZXN0IG9uIHRoZSBs
b2NrLgorCisgICAgICAgIEluIGdlbmVyYWwsIGl0IGlzIHNhZmUgZm9yIG90aGVyIHRocmVhZHMg
dG8gcmVhZCBmcm9tIG1fb3duZXJUaHJlYWQKKyAgICAgICAgYmVjYXVzZSB0aGV5IG9ubHkgbmVl
ZCB0byBrbm93IHdoZXRoZXIgaXRzIHZhbHVlIG1hdGNoZXMgdGhlaXIgb3duCisgICAgICAgIHRo
cmVhZCBpZCAocHJvdmlkZWQgYnkgV1RGOjpjdXJyZW50VGhyZWFkKCkpLgorCisgICAgICAgIEhl
cmUgYXJlIHRoZSBzY2VuYXJpb3MgZm9yIGhvdyB0aGUgb3duZXJzaGlwIHRlc3QgY2FuIGdvOgor
CisgICAgICAgIDEuIFRoZSBKU0xvY2sgaGFzIGp1c3QgYmVlbiBpbml0aWFsaXplZCBhbmQgaXMg
bm90IG93bmVkIGJ5IGFueSB0aHJlYWQuCisKKyAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBtX293
bmVyVGhyZWFkIHdpbGwgYmUgMCBhbmQgd2lsbCBub3QgbWF0Y2ggYW55IHRocmVhZCdzCisgICAg
ICAgICAgIHRocmVhZCBpZC4gVGhlIGNoZWNraW5nIHRocmVhZCB3aWxsIGtub3cgdGhhdCBpdCBu
ZWVkcyB0byBsb2NrIHRoZQorICAgICAgICAgICBKU0xvY2sgYmVmb3JlIHVzaW5nIHRoZSBWTS4K
KworICAgICAgICAyLiBUaGUgSlNMb2NrIHdhcyBwcmV2aW91c2x5IGxvY2tlZCwgYnV0IG5vdyBp
cyB1bmxvY2tlZC4KKworICAgICAgICAgICBXaGVuIHdlIHVubG9jayBpdCBpbiBKU0xvY2s6OnVu
bG9jaygpLCB0aGUgb3duZXIgdGhyZWFkIGNsZWFycworICAgICAgICAgICBtX293bmVyVGhyZWFk
IHRvIDAuIEhlbmNlLCB0aGlzIGNhc2UgaXMgdGhlIHNhbWUgYXMgKDEpIGFib3ZlLgorCisgICAg
ICAgIDMuIFRoZSBKU0xvY2sgaXMgbG9ja2VkIGJ5IFRocmVhZCBBLiBUaHJlYWQgQiBpcyBjaGVj
a2luZyBvd25lcnNoaXAuCisKKyAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBtX293bmVyVGhyZWFk
IHdpbGwgY29udGFpbnMgdGhlIFRocmVhZCBBJ3MgdGhyZWFkIGlkLgorICAgICAgICAgICBUaHJl
YWQgQiB3aWxsIHNlZSB0aGF0IHRoZSB0aHJlYWQgaWQgZG9lcyBub3QgbWF0Y2ggaXRzIG93biBh
bmQgd2lsbAorICAgICAgICAgICBwcm9jZWVkIHRvIGJsb2NrIG9uIHRoZSBKU0xvY2sncyBtdXRl
eCB0byB3YWl0IGZvciBpdHMgdHVybiB0byB1c2UKKyAgICAgICAgICAgdGhlIFZNLgorCisgICAg
ICAgIDQuIENvbXBsaWNhdGlvbnMgaW4gV2VhayBNZW1vcnkgT3JkZXJpbmcgYXJjaGl0ZWN0dXJl
cy4KKworICAgICAgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nIHNjZW5hcmlvOgorICAgICAg
ICAgICAxLiBUaHJlYWQgQSBhbGxvY2F0ZWQgc29tZSBoZWFwIG1lbW9yeSBNMSBmb3Igc29tZSB1
c2UuCisgICAgICAgICAgIDIuIFRocmVhZCBBIHdyaXRlcyBpdHMgdGhyZWFkIGlkIHRvIG1lbW9y
eSBNMS4KKyAgICAgICAgICAgICAgVGhlIHdyaXR0ZW4gdmFsdWUgaXMgZmx1c2hlZCB0byBtZW1v
cnkuCisgICAgICAgICAgIDMuIFRocmVhZCBBIGZyZWVzIG1lbW9yeSBNMS4gVGhyZWFkIEEncyB0
aHJlYWQgaWQgcmVtYWlucyBpbiBtZW1vcnkgTTEuCisKKyAgICAgICAgICAgNC4gVGhyZWFkIEIg
YWxsb2NhdGVzIGEgSlNMb2NrIHdoaWNoIGNvaW5jaWRlbnRhbGx5IGdldHMgbG9jYXRlZCBpbiBN
MS4KKyAgICAgICAgICAgICAgVGhyZWFkIEIgd3JpdGVzIGl0cyB0aHJlYWQgaWQgdG8gdGhlIGxv
Y2sncyBtX293bmVyVGhyZWFkLgorICAgICAgICAgICAgICBUaGUgdGhyZWFkIGlkIGlzIHByZXNl
bnQgaW4gdGhlIENQVSB3cml0ZSBiYWNrIGJ1ZmZlciBidXQgaXMgbm90CisgICAgICAgICAgICAg
IGZsdXNoZWQgdG8gbWVtb3J5IHlldC4KKworICAgICAgICAgICA1LiBCZWZvcmUgQidzIHRocmVh
ZCBpZCBpcyBmbHVzaGVkIHRvIG1lbW9yeSwgVGhyZWFkIEEgZ2V0cyBhIGhvbGQKKyAgICAgICAg
ICAgICAgb2YgdGhlIEpTTG9jayBhbmQgY2hlY2tzIGl0cyBtX293bmVyVGhyZWFkLgorCisgICAg
ICAgICAgICAgIEJlY2F1c2UgVGhyZWFkIEIncyB0aHJlYWQgaWQgaXMgc3RpbGwgaW4gdGhlIHdy
aXRlIGJhY2sgYnVmZmVyLgorICAgICAgICAgICAgICB0aGUgbV9vd25lclRocmVhZCB2YWx1ZSB0
aGF0IFRocmVhZCBBIHNlZXMgaXMgdGhlIHN0YWxlIHZhbHVlIG9mCisgICAgICAgICAgICAgIFRo
cmVhZCBBJ3MgdGhyZWFkIGlkLiBUaGlzIGVycm9uZW91c2x5IHRlbGxzIFRocmVhZCBBIHRoYXQg
aXQKKyAgICAgICAgICAgICAgb3ducyB0aGUgSlNMb2NrIHdoZW4gaXQgZG9lc24ndC4KKworICAg
ICAgICAgICBUbyBwcmV2ZW50IHRoaXMgaXNzdWUgKHVubGlrZWx5IGFzIGl0IG1heSBiZSksIHdl
IGV4ZWN1dGUgYSBtZW1vcnkKKyAgICAgICAgICAgYmFycmllciBpbnN0cnVjdGlvbiByaWdodCBi
ZWZvcmUgd2UgcmVhZCBtX293bmVyVGhyZWFkIGFuZCByaWdodAorICAgICAgICAgICBhZnRlciB3
ZSB3cml0ZSB0byBpdCB0byBlbnN1cmUgdGhlIHN0b3JlIHRvIG1fb3duZXJUaHJlYWQgaW4gbWVt
b3J5CisgICAgICAgICAgIGlzIGNvbXBsZXRlZCBiZWZvcmUgcmVhZHMgZnJvbSBpdCBhcmUgZXhl
Y3V0ZWQuCisKKyAgICAgICAgQXBhcnQgZnJvbSByZW1vdmluZyB0aGUgdW5uZWVkZWQgc3BpbiBs
b2NrIGNvZGUsIEkgYWxzbyBjaGFuZ2VkIHRoZQorICAgICAgICBKU0xvY2sgY29kZSB0byB1c2Ug
Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSBhbmQgc2V0T3duZXJUaHJlYWQoKQorICAgICAg
ICBpbnN0ZWFkIG9mIGFjY2Vzc2luZyBtX293bmVyVGhyZWFkIGRpcmVjdGx5LiBUaGVzZSBmdW5j
dGlvbnMgd2lsbCB0YWtlCisgICAgICAgIGNhcmUgZXhlY3V0aW5nIHRoZSBuZWVkZWQgbWVtb3J5
IGJhcnJpZXJzIGZvciBhY2Nlc3NpbmcgbV9vd25lclRocmVhZC4KKworICAgICAgICAqIHJ1bnRp
bWUvSlNMb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpKU0xvY2spOgorCisgICAgICAg
IChKU0M6OkpTTG9jazo6bG9jayk6CisgICAgICAgIC0gUmVtb3ZlZCBzcGluTG9jayBidXQgbGVm
dCB0aGUgaW5kZW50YXRpb24gYXMgaXMgdG8ga2VlcCB0aGUgZGlmZiB0byBhCisgICAgICAgICAg
bWluaW11bSBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5LiBXaWxsIHVuaW5kZW50IGluIGEgc3Vic2Vx
dWVudCBwYXRjaC4KKworICAgICAgICAoSlNDOjpKU0xvY2s6OnVubG9jayk6CisgICAgICAgIC0g
QmVmb3JlIHVubG9ja2luZyB0aGUgbXV0ZXgsIGNsZWFyIG1fb3duZXJUaHJlYWQgdG8gaW5kaWNh
dGUgdGhhdCB0aGUKKyAgICAgICAgICBsb2NrIGlzIG5vIGxvbmdlciBvd25lZC4KKworICAgICAg
ICAoSlNDOjpKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKToKKyAgICAgICAgLSBS
ZW1vdmVkIHRoZSBjaGVjayBvZiBtX2xvY2tDb3VudCBmb3IgZGV0ZXJtaW5pbmcgb3duZXJzaGlw
LiBDaGVja2luZworICAgICAgICAgIG1fb3duZXJUaHJlYWQgaXMgc3VmZmljaWVudC4KKyAgICAg
ICAgLSBBZGRlZCBuZWVkZWQgbWVtb3J5IGJhcnJpZXIgYmVmb3JlIHJlYWRpbmcgbV9vd25lclRo
cmVhZC4KKworICAgICAgICAoSlNDOjpKU0xvY2s6OnNldE93bmVyVGhyZWFkKToKKyAgICAgICAg
LSBVdGlsaXR5IGZ1bmN0aW9uIHRvIHNldCBtX293bmVyVGhyZWFkIHNvIHRoYXQgd2UgY2FuIGFk
ZCB0aGUgbmVlZGVkCisgICAgICAgICAgbWVtb3J5IGJhcnJpZXIgYWZ0ZXIgc2V0dGluZyBtX293
bmVyVGhyZWFkIGluIG9uZSBwbGFjZS4KKworICAgICAgICAoSlNDOjpKU0xvY2s6OmRyb3BBbGxM
b2Nrcyk6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZHJvcEFsbExvY2tzVW5jb25kaXRpb25hbGx5
KToKKyAgICAgICAgLSBSZW5hbWVkIGxvY2FsIGxvY2tzVG9Ecm9wIHRvIHRoZSBiZXR0ZXIgbmFt
ZSBkcm9wcGVkTG9ja0NvdW50LgorICAgICAgICAtIENsZWFyIG1fb3duZXJUaHJlYWQgc2luY2Ug
d2UncmUgdW5sb2NraW5nIHRoZSBKU0xvY2suCisKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpncmFi
QWxsTG9ja3MpOgorICAgICAgICAtIFJlbW92ZWQgdW5uZWVkZWQgbG9jayBvd25lcnNoaXAgdGVz
dCBmb3IgbG9jayByZS1lbnRyeSBjYXNlIGJlY2F1c2UKKyAgICAgICAgICBncmFiQWxsTG9ja3Mo
KSBpcyBuZXZlciB1c2VkIHRvIHJlLWVudGVyIGEgbG9ja2VkIEpTTG9jay4KKyAgICAgICAgLSBB
ZGRlZCBuZWVkZWQgbWVtb3J5IGJhcnJpZXIgYWZ0ZXIgc2V0dGluZyBtX293bmVyVGhyZWFkLgor
CisgICAgICAgIChKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MpOgorICAg
ICAgICAoSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nrczo6fkRyb3BBbGxMb2Nrcyk6CisgICAgICAg
ICogcnVudGltZS9KU0xvY2suaDoKKwogMjAxNC0wMi0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIE5ldmVyIGluY2x1ZGUgKklubGluZXMuaCBmaWxlcyBpbiBp
bnRlcmZhY2UgaGVhZGVycywgYW5kIG5ldmVyIGluY2x1ZGUgKklubGluZXMuaCB3aGVuIHlvdSBj
b3VsZCBpbmNsdWRlIE9wZXJhdGlvbnMuaCBpbnN0ZWFkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHJldmlzaW9uIDE2Mzc1MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsy
Nyw2IEBACiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAK
LSNpZiBVU0UoUFRIUkVBRFMpCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2VuZGlmCi0KIG5hbWVz
cGFjZSBKU0MgewogCiBNdXRleCogR2xvYmFsSlNMb2NrOjpzX3NoYXJlZEluc3RhbmNlTG9jayA9
IDA7CkBAIC05MCw3ICs4Niw2IEBAIEpTTG9jazo6SlNMb2NrKFZNKiB2bSkKICAgICAsIG1fbG9j
a0Ryb3BEZXB0aCgwKQogICAgICwgbV92bSh2bSkKIHsKLSAgICBtX3NwaW5Mb2NrLkluaXQoKTsK
IH0KIAogSlNMb2NrOjp+SlNMb2NrKCkKQEAgLTEwNyw4ICsxMDIsNyBAQCB2b2lkIEpTTG9jazo6
bG9jaygpCiB7CiAgICAgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkID0gV1RGOjpjdXJy
ZW50VGhyZWFkKCk7CiAgICAgewotICAgICAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJm1fc3Bp
bkxvY2spOwotICAgICAgICBpZiAobV9vd25lclRocmVhZCA9PSBjdXJyZW50VGhyZWFkICYmIG1f
bG9ja0NvdW50KSB7CisgICAgICAgIGlmIChjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKSB7
CiAgICAgICAgICAgICBtX2xvY2tDb3VudCsrOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CkBAIC0xMTcsMTUgKzExMSwxNSBAQCB2b2lkIEpTTG9jazo6bG9jaygpCiAgICAgbV9sb2Nr
LmxvY2soKTsKIAogICAgIHsKLSAgICAgICAgU3BpbkxvY2tIb2xkZXIgaG9sZGVyKCZtX3NwaW5M
b2NrKTsKLSAgICAgICAgbV9vd25lclRocmVhZCA9IGN1cnJlbnRUaHJlYWQ7CisgICAgICAgIHNl
dE93bmVyVGhyZWFkKGN1cnJlbnRUaHJlYWQpOwogICAgICAgICBBU1NFUlQoIW1fbG9ja0NvdW50
KTsKICAgICAgICAgbV9sb2NrQ291bnQgPSAxOwogCiAgICAgICAgIFdURlRocmVhZERhdGEmIHRo
cmVhZERhdGEgPSB3dGZUaHJlYWREYXRhKCk7CiAKICAgICAgICAgaWYgKCFtX3ZtLT5zdGFja1Bv
aW50ZXJBdFZNRW50cnkpIHsKLSAgICAgICAgICAgIG1fdm0tPnN0YWNrUG9pbnRlckF0Vk1FbnRy
eSA9ICZob2xkZXI7IC8vIEEgcHJveHkgZm9yIHRoZSBjdXJyZW50IHN0YWNrIHBvaW50ZXIuCisg
ICAgICAgICAgICB2b2lkKiBwID0gJnA7CisgICAgICAgICAgICBtX3ZtLT5zdGFja1BvaW50ZXJB
dFZNRW50cnkgPSBwOyAvLyBBIHByb3h5IGZvciB0aGUgY3VycmVudCBzdGFjayBwb2ludGVyLgog
ICAgICAgICAgICAgdGhyZWFkRGF0YS5zZXRTYXZlZFJlc2VydmVkWm9uZVNpemUobV92bS0+dXBk
YXRlU3RhY2tMaW1pdFdpdGhSZXNlcnZlZFpvbmVTaXplKE9wdGlvbnM6OnJlc2VydmVkWm9uZVNp
emUoKSkpOwogICAgICAgICB9CiAKQEAgLTEzNSw4ICsxMjksNyBAQCB2b2lkIEpTTG9jazo6bG9j
aygpCiAKIHZvaWQgSlNMb2NrOjp1bmxvY2soKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRl
cigmbV9zcGluTG9jayk7Ci0gICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkp
OworICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogCiAg
ICAgbV9sb2NrQ291bnQtLTsKIApAQCAtMTQ1LDYgKzEzOCw3IEBAIHZvaWQgSlNMb2NrOjp1bmxv
Y2soKQogICAgICAgICAgICAgbV92bS0+c3RhY2tQb2ludGVyQXRWTUVudHJ5ID0gbnVsbHB0cjsK
ICAgICAgICAgICAgIG1fdm0tPnVwZGF0ZVN0YWNrTGltaXRXaXRoUmVzZXJ2ZWRab25lU2l6ZSh3
dGZUaHJlYWREYXRhKCkuc2F2ZWRSZXNlcnZlZFpvbmVTaXplKCkpOwogICAgICAgICB9CisgICAg
ICAgIHNldE93bmVyVGhyZWFkKDApOwogICAgICAgICBtX2xvY2sudW5sb2NrKCk7CiAgICAgfQog
fQpAQCAtMTYxLDcgKzE1NSwxNCBAQCB2b2lkIEpTTG9jazo6dW5sb2NrKEV4ZWNTdGF0ZSogZXhl
YykKIAogYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkKIHsKLSAgICBy
ZXR1cm4gbV9sb2NrQ291bnQgJiYgbV9vd25lclRocmVhZCA9PSBXVEY6OmN1cnJlbnRUaHJlYWQo
KTsKKyAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsgICAgCisgICAgcmV0dXJuIG1fb3duZXJUaHJl
YWQgPT0gV1RGOjpjdXJyZW50VGhyZWFkKCk7Cit9CisKK3ZvaWQgSlNMb2NrOjpzZXRPd25lclRo
cmVhZChUaHJlYWRJZGVudGlmaWVyIG93bmVyKQoreworICAgIG1fb3duZXJUaHJlYWQgPSBvd25l
cjsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogfQogCiAvLyBUaGlzIGlzIGZhaXJseSBu
YXN0eS4gIFdlIGFsbG93IG11bHRpcGxlIHRocmVhZHMgdG8gcnVuIG9uIHRoZSBzYW1lCkBAIC0y
MDYsMTMgKzIwNywxMSBAQCBib29sIEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2so
CiAvLwogCiAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBsb2NrcyB0aGF0
IHdlcmUgZHJvcHBlZC4KLXVuc2lnbmVkIEpTTG9jazo6ZHJvcEFsbExvY2tzKFNwaW5Mb2NrJiBz
cGluTG9jaykKK3Vuc2lnbmVkIEpTTG9jazo6ZHJvcEFsbExvY2tzKCkKIHsKLSAgICBBU1NFUlRf
VU5VU0VEKHNwaW5Mb2NrLCBzcGluTG9jay5Jc0hlbGQoKSk7CiAgICAgLy8gQ2hlY2sgaWYgdGhp
cyB0aHJlYWQgaXMgY3VycmVudGx5IGhvbGRpbmcgdGhlIGxvY2suCiAgICAgLy8gRklYTUU6IE1h
eWJlIHdlIHdhbnQgdG8gcmVxdWlyZSB0aGlzLCBndWFyZCB3aXRoIGFuIEFTU0VSVD8KLSAgICB1
bnNpZ25lZCBsb2Nrc1RvRHJvcCA9IG1fbG9ja0NvdW50OwotICAgIGlmICghbG9ja3NUb0Ryb3Ag
fHwgbV9vd25lclRocmVhZCAhPSBXVEY6OmN1cnJlbnRUaHJlYWQoKSkKKyAgICBpZiAoIWN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gRG9u
J3QgZHJvcCB0aGUgbG9ja3MgaWYgdGhleSd2ZSBhbHJlYWR5IGJlZW4gZHJvcHBlZCBvbmNlLgpA
QCAtMjI4LDIyICsyMjcsMjMgQEAgdW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3MoU3Bpbkxv
Y2smIAogCiAgICAgLy8gbV9sb2NrRHJvcERlcHRoIGlzIG9ubHkgaW5jcmVtZW50ZWQgaWYgYW55
IGxvY2tzIHdlcmUgZHJvcHBlZC4KICAgICArK21fbG9ja0Ryb3BEZXB0aDsKKworICAgIHVuc2ln
bmVkIGRyb3BwZWRMb2NrQ291bnQgPSBtX2xvY2tDb3VudDsKICAgICBtX2xvY2tDb3VudCA9IDA7
CiAgICAgaWYgKG1fdm0pIHsKICAgICAgICAgbV92bS0+c3RhY2tQb2ludGVyQXRWTUVudHJ5ID0g
bnVsbHB0cjsKICAgICAgICAgbV92bS0+dXBkYXRlU3RhY2tMaW1pdFdpdGhSZXNlcnZlZFpvbmVT
aXplKHd0ZlRocmVhZERhdGEoKS5zYXZlZFJlc2VydmVkWm9uZVNpemUoKSk7CiAgICAgfQorICAg
IHNldE93bmVyVGhyZWFkKDApOwogICAgIG1fbG9jay51bmxvY2soKTsKLSAgICByZXR1cm4gbG9j
a3NUb0Ryb3A7CisgICAgcmV0dXJuIGRyb3BwZWRMb2NrQ291bnQ7CiB9CiAKLXVuc2lnbmVkIEpT
TG9jazo6ZHJvcEFsbExvY2tzVW5jb25kaXRpb25hbGx5KFNwaW5Mb2NrJiBzcGluTG9jaykKK3Vu
c2lnbmVkIEpTTG9jazo6ZHJvcEFsbExvY2tzVW5jb25kaXRpb25hbGx5KCkKIHsKLSAgICBBU1NF
UlRfVU5VU0VEKHNwaW5Mb2NrLCBzcGluTG9jay5Jc0hlbGQoKSk7CiAgICAgLy8gQ2hlY2sgaWYg
dGhpcyB0aHJlYWQgaXMgY3VycmVudGx5IGhvbGRpbmcgdGhlIGxvY2suCiAgICAgLy8gRklYTUU6
IE1heWJlIHdlIHdhbnQgdG8gcmVxdWlyZSB0aGlzLCBndWFyZCB3aXRoIGFuIEFTU0VSVD8KLSAg
ICB1bnNpZ25lZCBsb2Nrc1RvRHJvcCA9IG1fbG9ja0NvdW50OwotICAgIGlmICghbG9ja3NUb0Ry
b3AgfHwgbV9vd25lclRocmVhZCAhPSBXVEY6OmN1cnJlbnRUaHJlYWQoKSkKKyAgICBpZiAoIWN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgV1RG
VGhyZWFkRGF0YSYgdGhyZWFkRGF0YSA9IHd0ZlRocmVhZERhdGEoKTsKQEAgLTI1MywzNiArMjUz
LDI5IEBAIHVuc2lnbmVkIEpTTG9jazo6ZHJvcEFsbExvY2tzVW5jb25kaXRpb24KIAogICAgIC8v
IG1fbG9ja0Ryb3BEZXB0aCBpcyBvbmx5IGluY3JlbWVudGVkIGlmIGFueSBsb2NrcyB3ZXJlIGRy
b3BwZWQuCiAgICAgKyttX2xvY2tEcm9wRGVwdGg7CisKKyAgICB1bnNpZ25lZCBkcm9wcGVkTG9j
a0NvdW50ID0gbV9sb2NrQ291bnQ7CiAgICAgbV9sb2NrQ291bnQgPSAwOwogICAgIGlmIChtX3Zt
KSB7CiAgICAgICAgIG1fdm0tPnN0YWNrUG9pbnRlckF0Vk1FbnRyeSA9IG51bGxwdHI7CiAgICAg
ICAgIG1fdm0tPnVwZGF0ZVN0YWNrTGltaXRXaXRoUmVzZXJ2ZWRab25lU2l6ZSh3dGZUaHJlYWRE
YXRhKCkuc2F2ZWRSZXNlcnZlZFpvbmVTaXplKCkpOwogICAgIH0KKyAgICBzZXRPd25lclRocmVh
ZCgwKTsKICAgICBtX2xvY2sudW5sb2NrKCk7Ci0gICAgcmV0dXJuIGxvY2tzVG9Ecm9wOworICAg
IHJldHVybiBkcm9wcGVkTG9ja0NvdW50OwogfQogCi12b2lkIEpTTG9jazo6Z3JhYkFsbExvY2tz
KHVuc2lnbmVkIGRyb3BwZWRMb2NrQ291bnQsIFNwaW5Mb2NrJiBzcGluTG9jaykKK3ZvaWQgSlNM
b2NrOjpncmFiQWxsTG9ja3ModW5zaWduZWQgZHJvcHBlZExvY2tDb3VudCkKIHsKLSAgICBBU1NF
UlQoc3BpbkxvY2suSXNIZWxkKCkpOwogICAgIC8vIElmIG5vIGxvY2tzIHdlcmUgZHJvcHBlZCwg
bm90aGluZyB0byBkbyEKICAgICBpZiAoIWRyb3BwZWRMb2NrQ291bnQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFRocmVhZElkZW50aWZpZXIgY3VycmVudFRocmVhZCA9IFdURjo6Y3VycmVudFRo
cmVhZCgpOwotICAgIC8vIENoZWNrIGlmIHRoaXMgdGhyZWFkIGlzIGN1cnJlbnRseSBob2xkaW5n
IHRoZSBsb2NrLgotICAgIC8vIEZJWE1FOiBNYXliZSB3ZSB3YW50IHRvIHByb2hpYml0IHRoaXMs
IGd1YXJkIGFnYWluc3Qgd2l0aCBhbiBBU1NFUlQ/Ci0gICAgaWYgKG1fb3duZXJUaHJlYWQgPT0g
Y3VycmVudFRocmVhZCAmJiBtX2xvY2tDb3VudCkgewotICAgICAgICBtX2xvY2tDb3VudCArPSBk
cm9wcGVkTG9ja0NvdW50OwotICAgICAgICAtLW1fbG9ja0Ryb3BEZXB0aDsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBBU1NFUlQoIWN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwog
Ci0gICAgc3BpbkxvY2suVW5sb2NrKCk7CiAgICAgbV9sb2NrLmxvY2soKTsKLSAgICBzcGluTG9j
ay5Mb2NrKCk7CiAKLSAgICBtX293bmVyVGhyZWFkID0gY3VycmVudFRocmVhZDsKKyAgICBzZXRP
d25lclRocmVhZChXVEY6OmN1cnJlbnRUaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX2xvY2tDb3Vu
dCk7CiAgICAgbV9sb2NrQ291bnQgPSBkcm9wcGVkTG9ja0NvdW50OwogICAgIC0tbV9sb2NrRHJv
cERlcHRoOwpAQCAtMjk5LDEzICsyOTIsMTEgQEAgSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BB
bGxMb2NrcyhFeGVjUwogewogICAgIGlmICghbV92bSkKICAgICAgICAgcmV0dXJuOwotICAgIFNw
aW5Mb2NrJiBzcGluTG9jayA9IG1fdm0tPmFwaUxvY2soKS5tX3NwaW5Mb2NrOwotICAgIFNwaW5M
b2NrSG9sZGVyIGhvbGRlcigmc3BpbkxvY2spOwogCiAgICAgaWYgKGFsd2F5c0Ryb3BMb2NrcykK
LSAgICAgICAgbV9kcm9wcGVkTG9ja0NvdW50ID0gbV92bS0+YXBpTG9jaygpLmRyb3BBbGxMb2Nr
c1VuY29uZGl0aW9uYWxseShzcGluTG9jayk7CisgICAgICAgIG1fZHJvcHBlZExvY2tDb3VudCA9
IG1fdm0tPmFwaUxvY2soKS5kcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoKTsKICAgICBlbHNl
Ci0gICAgICAgIG1fZHJvcHBlZExvY2tDb3VudCA9IG1fdm0tPmFwaUxvY2soKS5kcm9wQWxsTG9j
a3Moc3BpbkxvY2spOworICAgICAgICBtX2Ryb3BwZWRMb2NrQ291bnQgPSBtX3ZtLT5hcGlMb2Nr
KCkuZHJvcEFsbExvY2tzKCk7CiB9CiAKIEpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9j
a3MoVk0qIHZtLCBBbHdheXNEcm9wTG9ja3NUYWcgYWx3YXlzRHJvcExvY2tzKQpAQCAtMzE0LDIy
ICszMDUsMTggQEAgSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhWTSogdgogewog
ICAgIGlmICghbV92bSkKICAgICAgICAgcmV0dXJuOwotICAgIFNwaW5Mb2NrJiBzcGluTG9jayA9
IG1fdm0tPmFwaUxvY2soKS5tX3NwaW5Mb2NrOwotICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigm
c3BpbkxvY2spOwogCiAgICAgaWYgKGFsd2F5c0Ryb3BMb2NrcykKLSAgICAgICAgbV9kcm9wcGVk
TG9ja0NvdW50ID0gbV92bS0+YXBpTG9jaygpLmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseShz
cGluTG9jayk7CisgICAgICAgIG1fZHJvcHBlZExvY2tDb3VudCA9IG1fdm0tPmFwaUxvY2soKS5k
cm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoKTsKICAgICBlbHNlCi0gICAgICAgIG1fZHJvcHBl
ZExvY2tDb3VudCA9IG1fdm0tPmFwaUxvY2soKS5kcm9wQWxsTG9ja3Moc3BpbkxvY2spOworICAg
ICAgICBtX2Ryb3BwZWRMb2NrQ291bnQgPSBtX3ZtLT5hcGlMb2NrKCkuZHJvcEFsbExvY2tzKCk7
CiB9CiAKIEpTTG9jazo6RHJvcEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKCkKIHsKICAgICBpZiAo
IW1fdm0pCiAgICAgICAgIHJldHVybjsKLSAgICBTcGluTG9jayYgc3BpbkxvY2sgPSBtX3ZtLT5h
cGlMb2NrKCkubV9zcGluTG9jazsKLSAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJnNwaW5Mb2Nr
KTsKLSAgICBtX3ZtLT5hcGlMb2NrKCkuZ3JhYkFsbExvY2tzKG1fZHJvcHBlZExvY2tDb3VudCwg
c3BpbkxvY2spOworICAgIG1fdm0tPmFwaUxvY2soKS5ncmFiQWxsTG9ja3MobV9kcm9wcGVkTG9j
a0NvdW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suaAkocmV2aXNpb24gMTYzNzUyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYgQEAK
ICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVENTcGluTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMTMsMTEg
KzExMiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfTsKIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIHVuc2lnbmVkIGRyb3BBbGxMb2NrcyhTcGluTG9jayYpOwotICAgICAgICB1bnNpZ25l
ZCBkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoU3BpbkxvY2smKTsKLSAgICAgICAgdm9pZCBn
cmFiQWxsTG9ja3ModW5zaWduZWQgbG9ja0NvdW50LCBTcGluTG9jayYpOworICAgICAgICB2b2lk
IHNldE93bmVyVGhyZWFkKFRocmVhZElkZW50aWZpZXIpOworCisgICAgICAgIHVuc2lnbmVkIGRy
b3BBbGxMb2NrcygpOworICAgICAgICB1bnNpZ25lZCBkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFs
bHkoKTsKKyAgICAgICAgdm9pZCBncmFiQWxsTG9ja3ModW5zaWduZWQgbG9ja0NvdW50KTsKIAot
ICAgICAgICBTcGluTG9jayBtX3NwaW5Mb2NrOwogICAgICAgICBNdXRleCBtX2xvY2s7CiAgICAg
ICAgIFRocmVhZElkZW50aWZpZXIgbV9vd25lclRocmVhZDsKICAgICAgICAgaW50cHRyX3QgbV9s
b2NrQ291bnQ7Cg==
</data>
<flag name="review"
          id="247732"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223725</attachid>
            <date>2014-02-10 10:32:03 -0800</date>
            <delta_ts>2014-02-10 11:28:06 -0800</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-128450.patch</filename>
            <type>text/plain</type>
            <size>12229</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzNzY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBA
CisyMDE0LTAyLTA5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW1vdmUgdW5uZWNlc3Nhcnkgc3BpbkxvY2sgaW4gSlNMb2NrLgorICAgICAgICA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMTI4NDUwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoZSBKU0xvY2sncyBtdXRleCBhbHJlYWR5IHByb3ZpZGVzIHByb3RlY3Rp
b24gZm9yIHdyaXRlIGFjY2VzcyB0bworICAgICAgICBKU0xvY2sncyBpbnRlcm5hbCBzdGF0ZS4g
VGhlIG9ubHkgSlNMb2NrIHN0YXRlIHRoYXQgbmVlZHMgdG8gYmUgcmVhZAorICAgICAgICBmcm9t
IGFueSB0aHJlYWQgaW5jbHVkaW5nIHRocmVhZHMgdGhhdCBkb24ndCBvd24gdGhlIEpTTG9jayBp
cworICAgICAgICBtX293bmVyVGhyZWFkLCB3aGljaCBpcyB1c2VkIGluIGN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCkgdG8gZG8gYW4KKyAgICAgICAgb3duZXJzaGlwIHRlc3Qgb24gdGhlIGxv
Y2suCisKKyAgICAgICAgSXQgaXMgc2FmZSBmb3Igb3RoZXIgdGhyZWFkcyB0byByZWFkIGZyb20g
bV9vd25lclRocmVhZCBiZWNhdXNlIHRoZXkKKyAgICAgICAgb25seSBuZWVkIHRvIGtub3cgd2hl
dGhlciBpdHMgdmFsdWUgbWF0Y2hlcyB0aGVpciBvd24gdGhyZWFkIGlkCisgICAgICAgIChwcm92
aWRlZCBieSBXVEY6OmN1cnJlbnRUaHJlYWQoKSkuCisKKyAgICAgICAgSGVyZSBhcmUgdGhlIHNj
ZW5hcmlvcyBmb3IgaG93IHRoZSBvd25lcnNoaXAgdGVzdCBjYW4gZ286CisKKyAgICAgICAgMS4g
VGhlIEpTTG9jayBoYXMganVzdCBiZWVuIGluaXRpYWxpemVkIGFuZCBpcyBub3Qgb3duZWQgYnkg
YW55IHRocmVhZC4KKworICAgICAgICAgICBJbiB0aGlzIGNhc2UsIG1fb3duZXJUaHJlYWQgd2ls
bCBiZSAwIGFuZCB3aWxsIG5vdCBtYXRjaCBhbnkgdGhyZWFkJ3MKKyAgICAgICAgICAgdGhyZWFk
IGlkLiBUaGUgY2hlY2tpbmcgdGhyZWFkIHdpbGwga25vdyB0aGF0IGl0IG5lZWRzIHRvIGxvY2sg
dGhlCisgICAgICAgICAgIEpTTG9jayBiZWZvcmUgdXNpbmcgdGhlIFZNLgorCisgICAgICAgIDIu
IFRoZSBKU0xvY2sgd2FzIHByZXZpb3VzbHkgbG9ja2VkLCBidXQgbm93IGlzIHVubG9ja2VkLgor
CisgICAgICAgICAgIFdoZW4gd2UgdW5sb2NrIGl0IGluIEpTTG9jazo6dW5sb2NrKCksIHRoZSBv
d25lciB0aHJlYWQgY2xlYXJzCisgICAgICAgICAgIG1fb3duZXJUaHJlYWQgdG8gMC4gSGVuY2Us
IHRoaXMgY2FzZSBpcyB0aGUgc2FtZSBhcyAoMSkgYWJvdmUuCisKKyAgICAgICAgMy4gVGhlIEpT
TG9jayBpcyBsb2NrZWQgYnkgVGhyZWFkIEEuIFRocmVhZCBCIGlzIGNoZWNraW5nIG93bmVyc2hp
cC4KKworICAgICAgICAgICBJbiB0aGlzIGNhc2UsIG1fb3duZXJUaHJlYWQgd2lsbCBjb250YWlu
cyB0aGUgVGhyZWFkIEEncyB0aHJlYWQgaWQuCisgICAgICAgICAgIFRocmVhZCBCIHdpbGwgc2Vl
IHRoYXQgdGhlIHRocmVhZCBpZCBkb2VzIG5vdCBtYXRjaCBpdHMgb3duIGFuZCB3aWxsCisgICAg
ICAgICAgIHByb2NlZWQgdG8gYmxvY2sgb24gdGhlIEpTTG9jaydzIG11dGV4IHRvIHdhaXQgZm9y
IGl0cyB0dXJuIHRvIHVzZQorICAgICAgICAgICB0aGUgVk0uCisKKyAgICAgICAgICAgV2l0aCBX
ZWFrIE1lbW9yeSBPcmRlcmluZyBhcmNoaXRlY3R1cmVzLCBUaHJlYWQgQSdzIHRocmVhZCBpZCBt
YXkKKyAgICAgICAgICAgbm90IGdldCB3cml0dGVuIG91dCB0byBtZW1vcnkgYmVmb3JlIFRocmVh
ZCBCIGluc3BlY3RzIG1fb3duZXJUaHJlYWQuCisgICAgICAgICAgIEhvd2V2ZXIsIHRob3VnaCBU
aHJlYWQgQiBtYXkgbm90IHNlZSBUaHJlYWQgQSdzIHRocmVhZCBpZCBpbgorICAgICAgICAgICBt
X293bmVyVGhyZWFkLCBpdCB3aWxsIHNlZSAwIHdoaWNoIGlzIHRoZSBsYXN0IHZhbHVlIHdyaXR0
ZW4gdG8gaXQKKyAgICAgICAgICAgYmVmb3JlIHRoZSBKU0xvY2sgbXV0ZXggd2FzIHVubG9ja2Vk
LiBUaGUgbXV0ZXggdW5sb2NrIHdvdWxkIGhhdmUKKyAgICAgICAgICAgZXhlY3V0ZWQgYSBtZW1v
cnkgZmVuY2Ugd2hpY2ggd291bGQgaGF2ZSBmbHVzaGVkIHRoZSAwIHRvCisgICAgICAgICAgIG1f
b3duZXJUaHJlYWQgaW4gbWVtb3J5LiBIZW5jZSwgVGhyZWFkIEIgd2lsbCBrbm93IHRoYXQgaXQg
ZG9lcyBub3QKKyAgICAgICAgICAgb3duIHRoZSBsb2NrLgorCisgICAgICAgIEFwYXJ0IGZyb20g
cmVtb3ZpbmcgdGhlIHVubmVlZGVkIHNwaW4gbG9jayBjb2RlLCBJIGFsc28gY2hhbmdlZCB0aGUK
KyAgICAgICAgSlNMb2NrIGNvZGUgdG8gdXNlIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkg
YW5kIHNldE93bmVyVGhyZWFkKCkKKyAgICAgICAgaW5zdGVhZCBvZiBhY2Nlc3NpbmcgbV9vd25l
clRocmVhZCBkaXJlY3RseS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNMb2NrOjpKU0xvY2spOgorCisgICAgICAgIChKU0M6OkpTTG9jazo6bG9jayk6
CisgICAgICAgIC0gUmVtb3ZlZCBzcGluTG9jayBidXQgbGVmdCB0aGUgaW5kZW50YXRpb24gYXMg
aXMgdG8ga2VlcCB0aGUgZGlmZiB0byBhCisgICAgICAgICAgbWluaW11bSBmb3IgYmV0dGVyIHJl
YWRhYmlsaXR5LiBXaWxsIHVuaW5kZW50IGluIGEgc3Vic2VxdWVudCBwYXRjaC4KKworICAgICAg
ICAoSlNDOjpKU0xvY2s6OnVubG9jayk6CisgICAgICAgIC0gQmVmb3JlIHVubG9ja2luZyB0aGUg
bXV0ZXgsIGNsZWFyIG1fb3duZXJUaHJlYWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUKKyAgICAgICAg
ICBsb2NrIGlzIG5vIGxvbmdlciBvd25lZC4KKworICAgICAgICAoSlNDOjpKU0xvY2s6OmN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdMb2NrKToKKyAgICAgICAgLSBSZW1vdmVkIHRoZSBjaGVjayBvZiBt
X2xvY2tDb3VudCBmb3IgZGV0ZXJtaW5pbmcgb3duZXJzaGlwLiBDaGVja2luZworICAgICAgICAg
IG1fb3duZXJUaHJlYWQgaXMgc3VmZmljaWVudC4KKworICAgICAgICAoSlNDOjpKU0xvY2s6OmRy
b3BBbGxMb2Nrcyk6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZHJvcEFsbExvY2tzVW5jb25kaXRp
b25hbGx5KToKKyAgICAgICAgLSBSZW5hbWVkIGxvY2FsIGxvY2tzVG9Ecm9wIHRvIHRoZSBiZXR0
ZXIgbmFtZSBkcm9wcGVkTG9ja0NvdW50LgorICAgICAgICAtIENsZWFyIG1fb3duZXJUaHJlYWQg
c2luY2Ugd2UncmUgdW5sb2NraW5nIHRoZSBKU0xvY2suCisKKyAgICAgICAgKEpTQzo6SlNMb2Nr
OjpncmFiQWxsTG9ja3MpOgorICAgICAgICAtIFJlbW92ZWQgdW5uZWVkZWQgbG9jayBvd25lcnNo
aXAgdGVzdCBmb3IgbG9jayByZS1lbnRyeSBjYXNlIGJlY2F1c2UKKyAgICAgICAgICBncmFiQWxs
TG9ja3MoKSBpcyBuZXZlciB1c2VkIHRvIHJlLWVudGVyIGEgbG9ja2VkIEpTTG9jay4KKworICAg
ICAgICAoSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKToKKyAgICAgICAg
KEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3M6On5Ecm9wQWxsTG9ja3MpOgorCisgICAgICAgICog
cnVudGltZS9KU0xvY2suaDoKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpzZXRPd25lclRocmVhZCk6
CisKIDIwMTQtMDItMDkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBOZXZlciBpbmNsdWRlICpJbmxpbmVzLmggZmlsZXMgaW4gaW50ZXJmYWNlIGhlYWRlcnMsIGFu
ZCBuZXZlciBpbmNsdWRlICpJbmxpbmVzLmggd2hlbiB5b3UgY291bGQgaW5jbHVkZSBPcGVyYXRp
b25zLmggaW5zdGVhZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2su
Y3BwCShyZXZpc2lvbiAxNjM3NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMCArMjcsNiBAQAogI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogCi0jaWYgVVNFKFBUSFJFQURTKQot
I2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgSlNDIHsKIAogTXV0ZXgq
IEdsb2JhbEpTTG9jazo6c19zaGFyZWRJbnN0YW5jZUxvY2sgPSAwOwpAQCAtOTAsNyArODYsNiBA
QCBKU0xvY2s6OkpTTG9jayhWTSogdm0pCiAgICAgLCBtX2xvY2tEcm9wRGVwdGgoMCkKICAgICAs
IG1fdm0odm0pCiB7Ci0gICAgbV9zcGluTG9jay5Jbml0KCk7CiB9CiAKIEpTTG9jazo6fkpTTG9j
aygpCkBAIC0xMDYsMzcgKzEwMSwzMSBAQCB2b2lkIEpTTG9jazo6d2lsbERlc3Ryb3lWTShWTSog
dm0pCiB2b2lkIEpTTG9jazo6bG9jaygpCiB7CiAgICAgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50
VGhyZWFkID0gV1RGOjpjdXJyZW50VGhyZWFkKCk7Ci0gICAgewotICAgICAgICBTcGluTG9ja0hv
bGRlciBob2xkZXIoJm1fc3BpbkxvY2spOwotICAgICAgICBpZiAobV9vd25lclRocmVhZCA9PSBj
dXJyZW50VGhyZWFkICYmIG1fbG9ja0NvdW50KSB7Ci0gICAgICAgICAgICBtX2xvY2tDb3VudCsr
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaWYgKGN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCkpIHsKKyAgICAgICAgbV9sb2NrQ291bnQrKzsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIG1fbG9jay5sb2NrKCk7CiAKLSAgICB7Ci0gICAgICAgIFNwaW5Mb2Nr
SG9sZGVyIGhvbGRlcigmbV9zcGluTG9jayk7Ci0gICAgICAgIG1fb3duZXJUaHJlYWQgPSBjdXJy
ZW50VGhyZWFkOwotICAgICAgICBBU1NFUlQoIW1fbG9ja0NvdW50KTsKLSAgICAgICAgbV9sb2Nr
Q291bnQgPSAxOwotCi0gICAgICAgIFdURlRocmVhZERhdGEmIHRocmVhZERhdGEgPSB3dGZUaHJl
YWREYXRhKCk7Ci0KLSAgICAgICAgaWYgKCFtX3ZtLT5zdGFja1BvaW50ZXJBdFZNRW50cnkpIHsK
LSAgICAgICAgICAgIG1fdm0tPnN0YWNrUG9pbnRlckF0Vk1FbnRyeSA9ICZob2xkZXI7IC8vIEEg
cHJveHkgZm9yIHRoZSBjdXJyZW50IHN0YWNrIHBvaW50ZXIuCi0gICAgICAgICAgICB0aHJlYWRE
YXRhLnNldFNhdmVkUmVzZXJ2ZWRab25lU2l6ZShtX3ZtLT51cGRhdGVTdGFja0xpbWl0V2l0aFJl
c2VydmVkWm9uZVNpemUoT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpKSk7Ci0gICAgICAgIH0K
KyAgICBzZXRPd25lclRocmVhZChjdXJyZW50VGhyZWFkKTsKKyAgICBBU1NFUlQoIW1fbG9ja0Nv
dW50KTsKKyAgICBtX2xvY2tDb3VudCA9IDE7CisKKyAgICBXVEZUaHJlYWREYXRhJiB0aHJlYWRE
YXRhID0gd3RmVGhyZWFkRGF0YSgpOwogCi0gICAgICAgIG1fdm0tPnNldExhc3RTdGFja1RvcCh0
aHJlYWREYXRhLnNhdmVkTGFzdFN0YWNrVG9wKCkpOworICAgIGlmICghbV92bS0+c3RhY2tQb2lu
dGVyQXRWTUVudHJ5KSB7CisgICAgICAgIHZvaWQqIHAgPSAmcDsKKyAgICAgICAgbV92bS0+c3Rh
Y2tQb2ludGVyQXRWTUVudHJ5ID0gcDsgLy8gQSBwcm94eSBmb3IgdGhlIGN1cnJlbnQgc3RhY2sg
cG9pbnRlci4KKyAgICAgICAgdGhyZWFkRGF0YS5zZXRTYXZlZFJlc2VydmVkWm9uZVNpemUobV92
bS0+dXBkYXRlU3RhY2tMaW1pdFdpdGhSZXNlcnZlZFpvbmVTaXplKE9wdGlvbnM6OnJlc2VydmVk
Wm9uZVNpemUoKSkpOwogICAgIH0KKworICAgIG1fdm0tPnNldExhc3RTdGFja1RvcCh0aHJlYWRE
YXRhLnNhdmVkTGFzdFN0YWNrVG9wKCkpOwogfQogCiB2b2lkIEpTTG9jazo6dW5sb2NrKCkKIHsK
LSAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJm1fc3BpbkxvY2spOwotICAgIEFTU0VSVChjdXJy
ZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50VGhy
ZWFkSXNIb2xkaW5nTG9jaygpKTsKIAogICAgIG1fbG9ja0NvdW50LS07CiAKQEAgLTE0NSw2ICsx
MzQsNyBAQCB2b2lkIEpTTG9jazo6dW5sb2NrKCkKICAgICAgICAgICAgIG1fdm0tPnN0YWNrUG9p
bnRlckF0Vk1FbnRyeSA9IG51bGxwdHI7CiAgICAgICAgICAgICBtX3ZtLT51cGRhdGVTdGFja0xp
bWl0V2l0aFJlc2VydmVkWm9uZVNpemUod3RmVGhyZWFkRGF0YSgpLnNhdmVkUmVzZXJ2ZWRab25l
U2l6ZSgpKTsKICAgICAgICAgfQorICAgICAgICBzZXRPd25lclRocmVhZCgwKTsKICAgICAgICAg
bV9sb2NrLnVubG9jaygpOwogICAgIH0KIH0KQEAgLTE2MSw3ICsxNTEsNyBAQCB2b2lkIEpTTG9j
azo6dW5sb2NrKEV4ZWNTdGF0ZSogZXhlYykKIAogYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCkKIHsKLSAgICByZXR1cm4gbV9sb2NrQ291bnQgJiYgbV9vd25lclRocmVh
ZCA9PSBXVEY6OmN1cnJlbnRUaHJlYWQoKTsKKyAgICByZXR1cm4gbV9vd25lclRocmVhZCA9PSBX
VEY6OmN1cnJlbnRUaHJlYWQoKTsKIH0KIAogLy8gVGhpcyBpcyBmYWlybHkgbmFzdHkuICBXZSBh
bGxvdyBtdWx0aXBsZSB0aHJlYWRzIHRvIHJ1biBvbiB0aGUgc2FtZQpAQCAtMjA2LDEzICsxOTYs
MTEgQEAgYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKAogLy8KIAogLy8g
VGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgbG9ja3MgdGhhdCB3ZXJlIGRyb3Bw
ZWQuCi11bnNpZ25lZCBKU0xvY2s6OmRyb3BBbGxMb2NrcyhTcGluTG9jayYgc3BpbkxvY2spCit1
bnNpZ25lZCBKU0xvY2s6OmRyb3BBbGxMb2NrcygpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChzcGlu
TG9jaywgc3BpbkxvY2suSXNIZWxkKCkpOwogICAgIC8vIENoZWNrIGlmIHRoaXMgdGhyZWFkIGlz
IGN1cnJlbnRseSBob2xkaW5nIHRoZSBsb2NrLgogICAgIC8vIEZJWE1FOiBNYXliZSB3ZSB3YW50
IHRvIHJlcXVpcmUgdGhpcywgZ3VhcmQgd2l0aCBhbiBBU1NFUlQ/Ci0gICAgdW5zaWduZWQgbG9j
a3NUb0Ryb3AgPSBtX2xvY2tDb3VudDsKLSAgICBpZiAoIWxvY2tzVG9Ecm9wIHx8IG1fb3duZXJU
aHJlYWQgIT0gV1RGOjpjdXJyZW50VGhyZWFkKCkpCisgICAgaWYgKCFjdXJyZW50VGhyZWFkSXNI
b2xkaW5nTG9jaygpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIERvbid0IGRyb3AgdGhl
IGxvY2tzIGlmIHRoZXkndmUgYWxyZWFkeSBiZWVuIGRyb3BwZWQgb25jZS4KQEAgLTIyOCwyMiAr
MjE2LDIzIEBAIHVuc2lnbmVkIEpTTG9jazo6ZHJvcEFsbExvY2tzKFNwaW5Mb2NrJiAKIAogICAg
IC8vIG1fbG9ja0Ryb3BEZXB0aCBpcyBvbmx5IGluY3JlbWVudGVkIGlmIGFueSBsb2NrcyB3ZXJl
IGRyb3BwZWQuCiAgICAgKyttX2xvY2tEcm9wRGVwdGg7CisKKyAgICB1bnNpZ25lZCBkcm9wcGVk
TG9ja0NvdW50ID0gbV9sb2NrQ291bnQ7CiAgICAgbV9sb2NrQ291bnQgPSAwOwogICAgIGlmICht
X3ZtKSB7CiAgICAgICAgIG1fdm0tPnN0YWNrUG9pbnRlckF0Vk1FbnRyeSA9IG51bGxwdHI7CiAg
ICAgICAgIG1fdm0tPnVwZGF0ZVN0YWNrTGltaXRXaXRoUmVzZXJ2ZWRab25lU2l6ZSh3dGZUaHJl
YWREYXRhKCkuc2F2ZWRSZXNlcnZlZFpvbmVTaXplKCkpOwogICAgIH0KKyAgICBzZXRPd25lclRo
cmVhZCgwKTsKICAgICBtX2xvY2sudW5sb2NrKCk7Ci0gICAgcmV0dXJuIGxvY2tzVG9Ecm9wOwor
ICAgIHJldHVybiBkcm9wcGVkTG9ja0NvdW50OwogfQogCi11bnNpZ25lZCBKU0xvY2s6OmRyb3BB
bGxMb2Nrc1VuY29uZGl0aW9uYWxseShTcGluTG9jayYgc3BpbkxvY2spCit1bnNpZ25lZCBKU0xv
Y2s6OmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseSgpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChz
cGluTG9jaywgc3BpbkxvY2suSXNIZWxkKCkpOwogICAgIC8vIENoZWNrIGlmIHRoaXMgdGhyZWFk
IGlzIGN1cnJlbnRseSBob2xkaW5nIHRoZSBsb2NrLgogICAgIC8vIEZJWE1FOiBNYXliZSB3ZSB3
YW50IHRvIHJlcXVpcmUgdGhpcywgZ3VhcmQgd2l0aCBhbiBBU1NFUlQ/Ci0gICAgdW5zaWduZWQg
bG9ja3NUb0Ryb3AgPSBtX2xvY2tDb3VudDsKLSAgICBpZiAoIWxvY2tzVG9Ecm9wIHx8IG1fb3du
ZXJUaHJlYWQgIT0gV1RGOjpjdXJyZW50VGhyZWFkKCkpCisgICAgaWYgKCFjdXJyZW50VGhyZWFk
SXNIb2xkaW5nTG9jaygpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFdURlRocmVhZERhdGEm
IHRocmVhZERhdGEgPSB3dGZUaHJlYWREYXRhKCk7CkBAIC0yNTMsMzYgKzI0MiwyOSBAQCB1bnNp
Z25lZCBKU0xvY2s6OmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uCiAKICAgICAvLyBtX2xvY2tEcm9w
RGVwdGggaXMgb25seSBpbmNyZW1lbnRlZCBpZiBhbnkgbG9ja3Mgd2VyZSBkcm9wcGVkLgogICAg
ICsrbV9sb2NrRHJvcERlcHRoOworCisgICAgdW5zaWduZWQgZHJvcHBlZExvY2tDb3VudCA9IG1f
bG9ja0NvdW50OwogICAgIG1fbG9ja0NvdW50ID0gMDsKICAgICBpZiAobV92bSkgewogICAgICAg
ICBtX3ZtLT5zdGFja1BvaW50ZXJBdFZNRW50cnkgPSBudWxscHRyOwogICAgICAgICBtX3ZtLT51
cGRhdGVTdGFja0xpbWl0V2l0aFJlc2VydmVkWm9uZVNpemUod3RmVGhyZWFkRGF0YSgpLnNhdmVk
UmVzZXJ2ZWRab25lU2l6ZSgpKTsKICAgICB9CisgICAgc2V0T3duZXJUaHJlYWQoMCk7CiAgICAg
bV9sb2NrLnVubG9jaygpOwotICAgIHJldHVybiBsb2Nrc1RvRHJvcDsKKyAgICByZXR1cm4gZHJv
cHBlZExvY2tDb3VudDsKIH0KIAotdm9pZCBKU0xvY2s6OmdyYWJBbGxMb2Nrcyh1bnNpZ25lZCBk
cm9wcGVkTG9ja0NvdW50LCBTcGluTG9jayYgc3BpbkxvY2spCit2b2lkIEpTTG9jazo6Z3JhYkFs
bExvY2tzKHVuc2lnbmVkIGRyb3BwZWRMb2NrQ291bnQpCiB7Ci0gICAgQVNTRVJUKHNwaW5Mb2Nr
LklzSGVsZCgpKTsKICAgICAvLyBJZiBubyBsb2NrcyB3ZXJlIGRyb3BwZWQsIG5vdGhpbmcgdG8g
ZG8hCiAgICAgaWYgKCFkcm9wcGVkTG9ja0NvdW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBU
aHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQgPSBXVEY6OmN1cnJlbnRUaHJlYWQoKTsKLSAg
ICAvLyBDaGVjayBpZiB0aGlzIHRocmVhZCBpcyBjdXJyZW50bHkgaG9sZGluZyB0aGUgbG9jay4K
LSAgICAvLyBGSVhNRTogTWF5YmUgd2Ugd2FudCB0byBwcm9oaWJpdCB0aGlzLCBndWFyZCBhZ2Fp
bnN0IHdpdGggYW4gQVNTRVJUPwotICAgIGlmIChtX293bmVyVGhyZWFkID09IGN1cnJlbnRUaHJl
YWQgJiYgbV9sb2NrQ291bnQpIHsKLSAgICAgICAgbV9sb2NrQ291bnQgKz0gZHJvcHBlZExvY2tD
b3VudDsKLSAgICAgICAgLS1tX2xvY2tEcm9wRGVwdGg7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgQVNTRVJUKCFjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKIAotICAgIHNwaW5M
b2NrLlVubG9jaygpOwogICAgIG1fbG9jay5sb2NrKCk7Ci0gICAgc3BpbkxvY2suTG9jaygpOwog
Ci0gICAgbV9vd25lclRocmVhZCA9IGN1cnJlbnRUaHJlYWQ7CisgICAgc2V0T3duZXJUaHJlYWQo
V1RGOjpjdXJyZW50VGhyZWFkKCkpOwogICAgIEFTU0VSVCghbV9sb2NrQ291bnQpOwogICAgIG1f
bG9ja0NvdW50ID0gZHJvcHBlZExvY2tDb3VudDsKICAgICAtLW1fbG9ja0Ryb3BEZXB0aDsKQEAg
LTI5OSwxMyArMjgxLDExIEBAIEpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoRXhl
Y1MKIHsKICAgICBpZiAoIW1fdm0pCiAgICAgICAgIHJldHVybjsKLSAgICBTcGluTG9jayYgc3Bp
bkxvY2sgPSBtX3ZtLT5hcGlMb2NrKCkubV9zcGluTG9jazsKLSAgICBTcGluTG9ja0hvbGRlciBo
b2xkZXIoJnNwaW5Mb2NrKTsKIAogICAgIGlmIChhbHdheXNEcm9wTG9ja3MpCi0gICAgICAgIG1f
ZHJvcHBlZExvY2tDb3VudCA9IG1fdm0tPmFwaUxvY2soKS5kcm9wQWxsTG9ja3NVbmNvbmRpdGlv
bmFsbHkoc3BpbkxvY2spOworICAgICAgICBtX2Ryb3BwZWRMb2NrQ291bnQgPSBtX3ZtLT5hcGlM
b2NrKCkuZHJvcEFsbExvY2tzVW5jb25kaXRpb25hbGx5KCk7CiAgICAgZWxzZQotICAgICAgICBt
X2Ryb3BwZWRMb2NrQ291bnQgPSBtX3ZtLT5hcGlMb2NrKCkuZHJvcEFsbExvY2tzKHNwaW5Mb2Nr
KTsKKyAgICAgICAgbV9kcm9wcGVkTG9ja0NvdW50ID0gbV92bS0+YXBpTG9jaygpLmRyb3BBbGxM
b2NrcygpOwogfQogCiBKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKFZNKiB2bSwg
QWx3YXlzRHJvcExvY2tzVGFnIGFsd2F5c0Ryb3BMb2NrcykKQEAgLTMxNCwyMiArMjk0LDE4IEBA
IEpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoVk0qIHYKIHsKICAgICBpZiAoIW1f
dm0pCiAgICAgICAgIHJldHVybjsKLSAgICBTcGluTG9jayYgc3BpbkxvY2sgPSBtX3ZtLT5hcGlM
b2NrKCkubV9zcGluTG9jazsKLSAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJnNwaW5Mb2NrKTsK
IAogICAgIGlmIChhbHdheXNEcm9wTG9ja3MpCi0gICAgICAgIG1fZHJvcHBlZExvY2tDb3VudCA9
IG1fdm0tPmFwaUxvY2soKS5kcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoc3BpbkxvY2spOwor
ICAgICAgICBtX2Ryb3BwZWRMb2NrQ291bnQgPSBtX3ZtLT5hcGlMb2NrKCkuZHJvcEFsbExvY2tz
VW5jb25kaXRpb25hbGx5KCk7CiAgICAgZWxzZQotICAgICAgICBtX2Ryb3BwZWRMb2NrQ291bnQg
PSBtX3ZtLT5hcGlMb2NrKCkuZHJvcEFsbExvY2tzKHNwaW5Mb2NrKTsKKyAgICAgICAgbV9kcm9w
cGVkTG9ja0NvdW50ID0gbV92bS0+YXBpTG9jaygpLmRyb3BBbGxMb2NrcygpOwogfQogCiBKU0xv
Y2s6OkRyb3BBbGxMb2Nrczo6fkRyb3BBbGxMb2NrcygpCiB7CiAgICAgaWYgKCFtX3ZtKQogICAg
ICAgICByZXR1cm47Ci0gICAgU3BpbkxvY2smIHNwaW5Mb2NrID0gbV92bS0+YXBpTG9jaygpLm1f
c3BpbkxvY2s7Ci0gICAgU3BpbkxvY2tIb2xkZXIgaG9sZGVyKCZzcGluTG9jayk7Ci0gICAgbV92
bS0+YXBpTG9jaygpLmdyYWJBbGxMb2NrcyhtX2Ryb3BwZWRMb2NrQ291bnQsIHNwaW5Mb2NrKTsK
KyAgICBtX3ZtLT5hcGlMb2NrKCkuZ3JhYkFsbExvY2tzKG1fZHJvcHBlZExvY2tDb3VudCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNMb2NrLmgJKHJldmlzaW9uIDE2Mzc1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RDU3BpbkxvY2suaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTEzLDExICsxMTIsMTIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH07CiAKICAgICBwcml2YXRlOgotICAgICAgICB1bnNp
Z25lZCBkcm9wQWxsTG9ja3MoU3BpbkxvY2smKTsKLSAgICAgICAgdW5zaWduZWQgZHJvcEFsbExv
Y2tzVW5jb25kaXRpb25hbGx5KFNwaW5Mb2NrJik7Ci0gICAgICAgIHZvaWQgZ3JhYkFsbExvY2tz
KHVuc2lnbmVkIGxvY2tDb3VudCwgU3BpbkxvY2smKTsKKyAgICAgICAgdm9pZCBzZXRPd25lclRo
cmVhZChUaHJlYWRJZGVudGlmaWVyIG93bmVyKSB7IG1fb3duZXJUaHJlYWQgPSBvd25lcjsgfQor
CisgICAgICAgIHVuc2lnbmVkIGRyb3BBbGxMb2NrcygpOworICAgICAgICB1bnNpZ25lZCBkcm9w
QWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoKTsKKyAgICAgICAgdm9pZCBncmFiQWxsTG9ja3ModW5z
aWduZWQgbG9ja0NvdW50KTsKIAotICAgICAgICBTcGluTG9jayBtX3NwaW5Mb2NrOwogICAgICAg
ICBNdXRleCBtX2xvY2s7CiAgICAgICAgIFRocmVhZElkZW50aWZpZXIgbV9vd25lclRocmVhZDsK
ICAgICAgICAgaW50cHRyX3QgbV9sb2NrQ291bnQ7Cg==
</data>
<flag name="review"
          id="247790"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>