<?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>71383</bug_id>
          
          <creation_ts>2011-11-02 12:22:11 -0700</creation_ts>
          <short_desc>Replace usage of StringImpl with String where possible in CharacterData and Text</short_desc>
          <delta_ts>2011-11-02 18:37:25 -0700</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>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Klein">adamk</reporter>
          <assigned_to name="Adam Klein">adamk</assigned_to>
          <cc>darin</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>494801</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-11-02 12:22:11 -0700</bug_when>
    <thetext>Replace usage of StringImpl with String where possible in CharacterData and Text</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494807</commentid>
    <comment_count>1</comment_count>
      <attachid>113351</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-11-02 12:26:14 -0700</bug_when>
    <thetext>Created attachment 113351
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494929</commentid>
    <comment_count>2</comment_count>
      <attachid>113351</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-02 14:44:37 -0700</bug_when>
    <thetext>Comment on attachment 113351
Patch

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

&gt; Source/WebCore/dom/CharacterData.cpp:42
&gt; -    StringImpl* dataImpl = data.impl() ? data.impl() : StringImpl::empty();
&gt; -    if (equal(m_data.get(), dataImpl))
&gt; +    if (m_data == data)

By moving the check for null strings into setDataAndUpdate, we have changed the behavior of this function. We will now call setDataAndUpdate and call textRemoved if the passed in data is a null string and the value of m_data is the empty string. Are you sure that&apos;s OK?

&gt; Source/WebCore/dom/CharacterData.cpp:164
&gt; -    return !m_data || m_data-&gt;containsOnlyWhitespace();
&gt; +    return !m_data.impl() || m_data.impl()-&gt;containsOnlyWhitespace();

I think we should make a String::containsOnlyWhitespace function instead of doing this here.

&gt; Source/WebCore/dom/CharacterData.cpp:177
&gt; +    m_data = !newData.isNull() ? newData : StringImpl::empty();

It used to be the caller’s responsibility to null-check the data. Now you have put the check inside this function. Why? Was there some benefit to doing so?

&gt; Source/WebCore/dom/CharacterData.h:27
&gt; +#include &quot;PlatformString.h&quot;

This is the old style of include, and should not be used in new code. The new style is:

    #include &lt;wtf/text/WTFString.h&gt;

&gt; Source/WebCore/dom/CharacterData.h:60
&gt; +    void setDataNoUpdate(const String&amp; data) { m_data = data; }

Maybe we should be asserting that data is not null?

Maybe this can be protected instead of public?

The name setDataNoUpdate is kind of caveman talk: “me set data, no update”. Maybe setDataWithoutUpdate? Or maybe we can figure out an even better name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495011</commentid>
    <comment_count>3</comment_count>
      <attachid>113351</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-11-02 16:12:59 -0700</bug_when>
    <thetext>Comment on attachment 113351
Patch

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

&gt;&gt; Source/WebCore/dom/CharacterData.cpp:42
&gt;&gt; +    if (m_data == data)
&gt; 
&gt; By moving the check for null strings into setDataAndUpdate, we have changed the behavior of this function. We will now call setDataAndUpdate and call textRemoved if the passed in data is a null string and the value of m_data is the empty string. Are you sure that&apos;s OK?

No, I&apos;m not sure it&apos;s ok, and I didn&apos;t actually mean to cause a behavior change here (forgot that empty and null strings aren&apos;t equal).  Brought back dataImpl.

&gt;&gt; Source/WebCore/dom/CharacterData.cpp:164
&gt;&gt; +    return !m_data.impl() || m_data.impl()-&gt;containsOnlyWhitespace();
&gt; 
&gt; I think we should make a String::containsOnlyWhitespace function instead of doing this here.

Done.

&gt;&gt; Source/WebCore/dom/CharacterData.cpp:177
&gt;&gt; +    m_data = !newData.isNull() ? newData : StringImpl::empty();
&gt; 
&gt; It used to be the caller’s responsibility to null-check the data. Now you have put the check inside this function. Why? Was there some benefit to doing so?

This was part of the same change above, where I tried to simplify setData().  Removed.

&gt;&gt; Source/WebCore/dom/CharacterData.h:27
&gt;&gt; +#include &quot;PlatformString.h&quot;
&gt; 
&gt; This is the old style of include, and should not be used in new code. The new style is:
&gt; 
&gt;     #include &lt;wtf/text/WTFString.h&gt;

Ah, I&apos;d seen that but didn&apos;t know it was the new style. Done.

&gt;&gt; Source/WebCore/dom/CharacterData.h:60
&gt;&gt; +    void setDataNoUpdate(const String&amp; data) { m_data = data; }
&gt; 
&gt; Maybe we should be asserting that data is not null?
&gt; 
&gt; Maybe this can be protected instead of public?
&gt; 
&gt; The name setDataNoUpdate is kind of caveman talk: “me set data, no update”. Maybe setDataWithoutUpdate? Or maybe we can figure out an even better name.

Added ASSERT.

It already is protected.

setDataWithoutUpdate sounds fine by me (this only has one caller, and that seems to be the intention). This is still a better name than setDataImpl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495012</commentid>
    <comment_count>4</comment_count>
      <attachid>113392</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-11-02 16:13:27 -0700</bug_when>
    <thetext>Created attachment 113392
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495020</commentid>
    <comment_count>5</comment_count>
      <attachid>113392</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-02 16:25:01 -0700</bug_when>
    <thetext>Comment on attachment 113392
Patch for landing

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

&gt; Source/WebCore/dom/CharacterData.cpp:44
&gt;      StringImpl* dataImpl = data.impl() ? data.impl() : StringImpl::empty();
&gt; -    if (equal(m_data.get(), dataImpl))
&gt; +    if (equal(m_data.impl(), dataImpl))
&gt;          return;

You don’t really need to use a StringImpl* for this. It could just be:

    const String&amp; nonNullData = data.isNull() ? data : String::empty();
    if (m_ data == nonNullData)
        return;

    [...]

    setDataAndUpdate(nonNullData, 0, oldLength, nonNullData.length());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495023</commentid>
    <comment_count>6</comment_count>
      <attachid>113392</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-11-02 16:28:29 -0700</bug_when>
    <thetext>Comment on attachment 113392
Patch for landing

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

&gt;&gt; Source/WebCore/dom/CharacterData.cpp:44
&gt;&gt;          return;
&gt; 
&gt; You don’t really need to use a StringImpl* for this. It could just be:
&gt; 
&gt;     const String&amp; nonNullData = data.isNull() ? data : String::empty();
&gt;     if (m_ data == nonNullData)
&gt;         return;
&gt; 
&gt;     [...]
&gt; 
&gt;     setDataAndUpdate(nonNullData, 0, oldLength, nonNullData.length());

Given that there&apos;s no such thing as String::empty() (only StringImpl::empty()), I&apos;m disinclined to use this approach, since I&apos;d still need to refer to StringImpl.

Or are you suggesting creating an |empty| method on String?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495029</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-02 16:31:53 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Given that there&apos;s no such thing as String::empty() (only StringImpl::empty()), I&apos;m disinclined to use this approach, since I&apos;d still need to refer to StringImpl.
&gt; 
&gt; Or are you suggesting creating an |empty| method on String?

I think it would probably be good to have a String::empty() function, but for an alternative that already works, we could just use emptyAtom.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495043</commentid>
    <comment_count>8</comment_count>
      <attachid>113400</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-11-02 16:39:16 -0700</bug_when>
    <thetext>Created attachment 113400
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495045</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-11-02 16:39:46 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Given that there&apos;s no such thing as String::empty() (only StringImpl::empty()), I&apos;m disinclined to use this approach, since I&apos;d still need to refer to StringImpl.
&gt; &gt; 
&gt; &gt; Or are you suggesting creating an |empty| method on String?
&gt; 
&gt; I think it would probably be good to have a String::empty() function, but for an alternative that already works, we could just use emptyAtom.

Done, using emptyAtom (though it required a static_cast to satisfy the ternary operator).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495047</commentid>
    <comment_count>10</comment_count>
      <attachid>113400</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-02 16:40:50 -0700</bug_when>
    <thetext>Comment on attachment 113400
Patch for landing

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

&gt; Source/WebCore/dom/CharacterData.cpp:42
&gt; +    const String&amp; nonNullData = !data.isNull() ? data : static_cast&lt;const String&amp;&gt;(emptyAtom);

We should adding a String::empty() function and use it here to clean this up some time soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495062</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-11-02 16:53:25 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 113400 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=113400&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/CharacterData.cpp:42
&gt; &gt; +    const String&amp; nonNullData = !data.isNull() ? data : static_cast&lt;const String&amp;&gt;(emptyAtom);
&gt; 
&gt; We should adding a String::empty() function and use it here to clean this up some time soon.

Are you thinking it&apos;d return a const String&amp;?  If so, the simplest thing&apos;d seem to just be

// static
const String&amp; String::empty()
{
    return emptyAtom;
}

in StringStatics.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495067</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-02 17:01:36 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; We should add a String::empty() function and use it here to clean this up some time soon.
&gt; 
&gt; Are you thinking it&apos;d return a const String&amp;?

Yes.

&gt; If so, the simplest thing&apos;d seem to just be
&gt; 
&gt; // static
&gt; const String&amp; String::empty()
&gt; {
&gt;     return emptyAtom;
&gt; }
&gt; 
&gt; in StringStatics.cpp

Maybe. We might also want to make it be an inlined access to a global so it’s fast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495071</commentid>
    <comment_count>13</comment_count>
      <attachid>113404</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-11-02 17:06:15 -0700</bug_when>
    <thetext>Created attachment 113404
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495072</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-11-02 17:07:17 -0700</bug_when>
    <thetext>So after all that, turns out String::empty() already exists.  Except it&apos;s called WTF::emptyString().

CharacterData no longer knows anything about StringImpl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495126</commentid>
    <comment_count>15</comment_count>
      <attachid>113404</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-02 18:29:15 -0700</bug_when>
    <thetext>Comment on attachment 113404
Patch for landing

Clearing flags on attachment: 113404

Committed r99128: &lt;http://trac.webkit.org/changeset/99128&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495127</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-02 18:29:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495131</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-02 18:37:25 -0700</bug_when>
    <thetext>Thanks for the cleanup, Adam! It&apos;s a great improvement.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113351</attachid>
            <date>2011-11-02 12:26:14 -0700</date>
            <delta_ts>2011-11-02 16:13:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71383-20111102122613.patch</filename>
            <type>text/plain</type>
            <size>10914</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg5MTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4MDcyY2FlMzA0ZTk2Njk0
ZjVjZDczYWUyM2Q4MGMwZmNiNzA0OGZhLi4yMDMzZDM5ZWE2ZWM1OTIzYTAzYzE1ZTg5M2JjMzcx
ODE4YmRkYWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMTEtMDIgIEFkYW0g
S2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVwbGFjZSB1c2FnZSBvZiBT
dHJpbmdJbXBsIHdpdGggU3RyaW5nIHdoZXJlIHBvc3NpYmxlIGluIENoYXJhY3RlckRhdGEgYW5k
IFRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcx
MzgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUnlv
c3VrZSBOaXdhLCBpbiBodHRwOi8vd2Via2l0Lm9yZy9iLzcwODYyLCBhc2tlZCBtZSB0byByZXBs
YWNlIHVzYWdlcworICAgICAgICBvZiBTdHJpbmcgd2l0aCBTdHJpbmdJbXBsLiBJJ3ZlIGRvbmUg
bW9yZSB0aGFuIHdoYXQgaGUgYXNrZWQgaW4gdGhpcworICAgICAgICBwYXRjaCwgdGhlIGJpZ2dl
c3QgY2hhbmdlIGJlaW5nIHRoYXQgQ2hhcmFjdGVyRGF0YSBub3cgaG9sZHMgYSBTdHJpbmcKKyAg
ICAgICAgaW5zdGVhZCBvZiBhIFJlZlB0cjxTdHJpbmdJbXBsPi4KKworICAgICAgICBObyBuZXcg
dGVzdHMsIGFzIHRoaXMgc2hvdWxkIGhhdmUgbm8gZWZmZWN0IG9uIGJlaGF2aW9yLgorCisgICAg
ICAgICogZG9tL0NoYXJhY3RlckRhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVy
RGF0YTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpzdWJzdHJp
bmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnBhcnNlckFwcGVuZERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6YXBwZW5kRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjppbnNlcnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkNoYXJhY3RlckRhdGE6OmRlbGV0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFj
dGVyRGF0YTo6cmVwbGFjZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6
Y29udGFpbnNPbmx5V2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRh
OjpzZXREYXRhQW5kVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnVw
ZGF0ZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OmRpc3BhdGNo
TW9kaWZpZWRFdmVudCk6CisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpDaGFy
YWN0ZXJEYXRhOjpkYXRhSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpD
aGFyYWN0ZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnNldERhdGFO
b1VwZGF0ZSk6CisgICAgICAgICogZG9tL1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dDo6c3BsaXRUZXh0KToKKwogMjAxMS0xMC0yOCAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBDb25uZWN0IENDVGhyZWFkUHJveHkgdG8gRnJhbWVS
YXRlQ29udHJvbGxlciBhbmQgU2NoZWR1bGVyU3RhdGVNYWNoaW5lIHZpYSBDQ1NjaGVkdWxlcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCmluZGV4IDVkOWMxYjdmNzJmMzk5YWQ2OTc5
ODkzMGM1MWFlYTlhOTVjZmRkMmMuLjMzMThlOTk5NjdjMDExNzY3MzMwZjA4MzAyM2ZlMzkzODVj
ZjVjMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKQEAgLTM5LDEzICszOSwx
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0RGF0YShj
b25zdCBTdHJpbmcmIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKQogewotICAgIFN0cmluZ0ltcGwqIGRh
dGFJbXBsID0gZGF0YS5pbXBsKCkgPyBkYXRhLmltcGwoKSA6IFN0cmluZ0ltcGw6OmVtcHR5KCk7
Ci0gICAgaWYgKGVxdWFsKG1fZGF0YS5nZXQoKSwgZGF0YUltcGwpKQorICAgIGlmIChtX2RhdGEg
PT0gZGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbGVu
Z3RoKCk7CiAKLSAgICBzZXREYXRhQW5kVXBkYXRlKGRhdGFJbXBsLCAwLCBvbGRMZW5ndGgsIGRh
dGFJbXBsLT5sZW5ndGgoKSk7CisgICAgc2V0RGF0YUFuZFVwZGF0ZShkYXRhLCAwLCBvbGRMZW5n
dGgsIGRhdGEubGVuZ3RoKCkpOwogICAgIGRvY3VtZW50KCktPnRleHRSZW1vdmVkKHRoaXMsIDAs
IG9sZExlbmd0aCk7CiB9CiAKQEAgLTU1LDEyICs1NCwxMiBAQCBTdHJpbmcgQ2hhcmFjdGVyRGF0
YTo6c3Vic3RyaW5nRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBFeGNlcHRp
b25DbwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJu
IG1fZGF0YS0+c3Vic3RyaW5nKG9mZnNldCwgY291bnQpOworICAgIHJldHVybiBtX2RhdGEuc3Vi
c3RyaW5nKG9mZnNldCwgY291bnQpOwogfQogCiB1bnNpZ25lZCBDaGFyYWN0ZXJEYXRhOjpwYXJz
ZXJBcHBlbmREYXRhKGNvbnN0IFVDaGFyKiBkYXRhLCB1bnNpZ25lZCBkYXRhTGVuZ3RoLCB1bnNp
Z25lZCBsZW5ndGhMaW1pdCkKIHsKLSAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2RhdGEtPmxl
bmd0aCgpOworICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG1fZGF0YS5sZW5ndGgoKTsKIAogICAg
IHVuc2lnbmVkIGVuZCA9IG1pbihkYXRhTGVuZ3RoLCBsZW5ndGhMaW1pdCAtIG9sZExlbmd0aCk7
CiAKQEAgLTc3LDkgKzc2LDcgQEAgdW5zaWduZWQgQ2hhcmFjdGVyRGF0YTo6cGFyc2VyQXBwZW5k
RGF0YShjb25zdCBVQ2hhciogZGF0YSwgdW5zaWduZWQgZGF0YUxlbmd0aCwKICAgICBpZiAoIWVu
ZCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBTdHJpbmcgbmV3U3RyID0gbV9kYXRhOwotICAg
IG5ld1N0ci5hcHBlbmQoZGF0YSwgZW5kKTsKLSAgICBtX2RhdGEgPSBuZXdTdHIuaW1wbCgpOwor
ICAgIG1fZGF0YS5hcHBlbmQoZGF0YSwgZW5kKTsKIAogICAgIHVwZGF0ZVJlbmRlcmVyKG9sZExl
bmd0aCwgMCk7CiAgICAgLy8gV2UgZG9uJ3QgY2FsbCBkaXNwYXRjaE1vZGlmaWVkRXZlbnQgaGVy
ZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlCkBAIC05NSw3ICs5Miw3IEBAIHZvaWQgQ2hhcmFj
dGVyRGF0YTo6YXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKQog
ICAgIFN0cmluZyBuZXdTdHIgPSBtX2RhdGE7CiAgICAgbmV3U3RyLmFwcGVuZChkYXRhKTsKIAot
ICAgIHNldERhdGFBbmRVcGRhdGUobmV3U3RyLmltcGwoKSwgbV9kYXRhLT5sZW5ndGgoKSwgMCwg
ZGF0YS5sZW5ndGgoKSk7CisgICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIsIG1fZGF0YS5sZW5n
dGgoKSwgMCwgZGF0YS5sZW5ndGgoKSk7CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNhbGwg
dGV4dEluc2VydGVkIGhlcmU/CiB9CkBAIC0xMDksNyArMTA2LDcgQEAgdm9pZCBDaGFyYWN0ZXJE
YXRhOjppbnNlcnREYXRhKHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiBkYXRhLCBFeGNl
cHRpb25Db2QKICAgICBTdHJpbmcgbmV3U3RyID0gbV9kYXRhOwogICAgIG5ld1N0ci5pbnNlcnQo
ZGF0YSwgb2Zmc2V0KTsKIAotICAgIHNldERhdGFBbmRVcGRhdGUobmV3U3RyLmltcGwoKSwgb2Zm
c2V0LCAwLCBkYXRhLmxlbmd0aCgpKTsKKyAgICBzZXREYXRhQW5kVXBkYXRlKG5ld1N0ciwgb2Zm
c2V0LCAwLCBkYXRhLmxlbmd0aCgpKTsKIAogICAgIGRvY3VtZW50KCktPnRleHRJbnNlcnRlZCh0
aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkpOwogfQpAQCAtMTI5LDcgKzEyNiw3IEBAIHZvaWQg
Q2hhcmFjdGVyRGF0YTo6ZGVsZXRlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50
LCBFeGNlcHRpb25Db2RlJiBlCiAgICAgU3RyaW5nIG5ld1N0ciA9IG1fZGF0YTsKICAgICBuZXdT
dHIucmVtb3ZlKG9mZnNldCwgcmVhbENvdW50KTsKIAotICAgIHNldERhdGFBbmRVcGRhdGUobmV3
U3RyLmltcGwoKSwgb2Zmc2V0LCBjb3VudCwgMCk7CisgICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdT
dHIsIG9mZnNldCwgY291bnQsIDApOwogCiAgICAgZG9jdW1lbnQoKS0+dGV4dFJlbW92ZWQodGhp
cywgb2Zmc2V0LCByZWFsQ291bnQpOwogfQpAQCAtMTUwLDcgKzE0Nyw3IEBAIHZvaWQgQ2hhcmFj
dGVyRGF0YTo6cmVwbGFjZURhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29u
c3QgU3RyaW5nJiBkCiAgICAgbmV3U3RyLnJlbW92ZShvZmZzZXQsIHJlYWxDb3VudCk7CiAgICAg
bmV3U3RyLmluc2VydChkYXRhLCBvZmZzZXQpOwogCi0gICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdT
dHIuaW1wbCgpLCBvZmZzZXQsIGNvdW50LCBkYXRhLmxlbmd0aCgpKTsKKyAgICBzZXREYXRhQW5k
VXBkYXRlKG5ld1N0ciwgb2Zmc2V0LCBjb3VudCwgZGF0YS5sZW5ndGgoKSk7CiAKICAgICAvLyB1
cGRhdGUgdGhlIG1hcmtlcnMgZm9yIHNwZWxsIGNoZWNraW5nIGFuZCBncmFtbWFyIGNoZWNraW5n
CiAgICAgZG9jdW1lbnQoKS0+dGV4dFJlbW92ZWQodGhpcywgb2Zmc2V0LCByZWFsQ291bnQpOwpA
QCAtMTY0LDcgKzE2MSw3IEBAIFN0cmluZyBDaGFyYWN0ZXJEYXRhOjpub2RlVmFsdWUoKSBjb25z
dAogCiBib29sIENoYXJhY3RlckRhdGE6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSBjb25zdAog
ewotICAgIHJldHVybiAhbV9kYXRhIHx8IG1fZGF0YS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgp
OworICAgIHJldHVybiAhbV9kYXRhLmltcGwoKSB8fCBtX2RhdGEuaW1wbCgpLT5jb250YWluc09u
bHlXaGl0ZXNwYWNlKCk7CiB9CiAKIHZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0Tm9kZVZhbHVlKGNv
bnN0IFN0cmluZyYgbm9kZVZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTE3MiwxNCArMTY5
LDE0IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0Tm9kZVZhbHVlKGNvbnN0IFN0cmluZyYgbm9k
ZVZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBzZXREYXRhKG5vZGVWYWx1ZSwgZWMpOwog
fQogCi12b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGFBbmRVcGRhdGUoUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBuZXdEYXRhLCB1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgdW5zaWduZWQg
b2xkTGVuZ3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgpCit2b2lkIENoYXJhY3RlckRhdGE6OnNldERh
dGFBbmRVcGRhdGUoY29uc3QgU3RyaW5nJiBuZXdEYXRhLCB1bnNpZ25lZCBvZmZzZXRPZlJlcGxh
Y2VkRGF0YSwgdW5zaWduZWQgb2xkTGVuZ3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgpCiB7CiAgICAg
aWYgKGRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPnNl
bGVjdGlvbigpLT50ZXh0V2lsbEJlUmVwbGFjZWQodGhpcywgb2Zmc2V0T2ZSZXBsYWNlZERhdGEs
IG9sZExlbmd0aCwgbmV3TGVuZ3RoKTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gb2xkRGF0YSA9
IG1fZGF0YTsKLSAgICBtX2RhdGEgPSBuZXdEYXRhOworICAgIFN0cmluZyBvbGREYXRhID0gbV9k
YXRhOworICAgIG1fZGF0YSA9ICFuZXdEYXRhLmlzTnVsbCgpID8gbmV3RGF0YSA6IFN0cmluZ0lt
cGw6OmVtcHR5KCk7CiAgICAgdXBkYXRlUmVuZGVyZXIob2Zmc2V0T2ZSZXBsYWNlZERhdGEsIG9s
ZExlbmd0aCk7Ci0gICAgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KG9sZERhdGEuZ2V0KCkpOworICAg
IGRpc3BhdGNoTW9kaWZpZWRFdmVudChvbGREYXRhKTsKIH0KIAogdm9pZCBDaGFyYWN0ZXJEYXRh
Ojp1cGRhdGVSZW5kZXJlcih1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgdW5zaWduZWQg
bGVuZ3RoT2ZSZXBsYWNlZERhdGEpCkBAIC0xODcsNyArMTg0LDcgQEAgdm9pZCBDaGFyYWN0ZXJE
YXRhOjp1cGRhdGVSZW5kZXJlcih1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgdW5zaWdu
ZWQgbGVuZ3QKICAgICBpZiAoKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcklzTmVlZGVkKE5vZGVS
ZW5kZXJpbmdDb250ZXh0KHRoaXMsIHJlbmRlcmVyKCktPnN0eWxlKCkpKSkgJiYgYXR0YWNoZWQo
KSkKICAgICAgICAgcmVhdHRhY2goKTsKICAgICBlbHNlIGlmIChyZW5kZXJlcigpKQotICAgICAg
ICB0b1JlbmRlclRleHQocmVuZGVyZXIoKSktPnNldFRleHRXaXRoT2Zmc2V0KG1fZGF0YSwgb2Zm
c2V0T2ZSZXBsYWNlZERhdGEsIGxlbmd0aE9mUmVwbGFjZWREYXRhKTsKKyAgICAgICAgdG9SZW5k
ZXJUZXh0KHJlbmRlcmVyKCkpLT5zZXRUZXh0V2l0aE9mZnNldChtX2RhdGEuaW1wbCgpLCBvZmZz
ZXRPZlJlcGxhY2VkRGF0YSwgbGVuZ3RoT2ZSZXBsYWNlZERhdGEpOwogfQogCiAjaWYgRU5BQkxF
KE1VVEFUSU9OX09CU0VSVkVSUykKQEAgLTIzMiw3ICsyMjksNyBAQCBzdGF0aWMgdm9pZCBlbnF1
ZXVlQ2hhcmFjdGVyRGF0YU11dGF0aW9uUmVjb3JkKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYg
b2xkRGF0YQogfQogI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAKLXZvaWQg
Q2hhcmFjdGVyRGF0YTo6ZGlzcGF0Y2hNb2RpZmllZEV2ZW50KFN0cmluZ0ltcGwqIG9sZERhdGEp
Cit2b2lkIENoYXJhY3RlckRhdGE6OmRpc3BhdGNoTW9kaWZpZWRFdmVudChjb25zdCBTdHJpbmcm
IG9sZERhdGEpCiB7CiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKICAgICBlbnF1ZXVl
Q2hhcmFjdGVyRGF0YU11dGF0aW9uUmVjb3JkKHRoaXMsIG9sZERhdGEpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9D
aGFyYWN0ZXJEYXRhLmgKaW5kZXggNjYxZTExMDYzNzcyMmQzNDhmN2ZjODVkYTQwZjU1ZTM5MjZj
MTIyMi4uOTQwYTc1MDg2YTgwMGMwZjhiNWZmODFhMDdkNWIzMTdlYTFiMzIwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ2hhcmFjdGVyRGF0YS5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIENoYXJhY3Rl
ckRhdGFfaAogCiAjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzEsNyArMzIsNyBAQCBjbGFzcyBDaGFyYWN0
ZXJEYXRhIDogcHVibGljIE5vZGUgewogcHVibGljOgogICAgIFN0cmluZyBkYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhOyB9CiAgICAgdm9pZCBzZXREYXRhKGNvbnN0IFN0cmluZyYsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2RhdGEt
Pmxlbmd0aCgpOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
Lmxlbmd0aCgpOyB9CiAgICAgU3RyaW5nIHN1YnN0cmluZ0RhdGEodW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBjb3VudCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgYXBwZW5kRGF0YShjb25z
dCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBpbnNlcnREYXRhKHVuc2lnbmVk
IG9mZnNldCwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtNDAsNyArNDEsNyBA
QCBwdWJsaWM6CiAKICAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSBjb25zdDsKIAot
ICAgIFN0cmluZ0ltcGwqIGRhdGFJbXBsKCkgeyByZXR1cm4gbV9kYXRhLmdldCgpOyB9CisgICAg
U3RyaW5nSW1wbCogZGF0YUltcGwoKSB7IHJldHVybiBtX2RhdGEuaW1wbCgpOyB9CiAKICAgICAv
LyBMaWtlIGFwcGVuZERhdGEsIGJ1dCBvcHRpbWl6ZWQgZm9yIHRoZSBwYXJzZXIgKGUuZy4sIG5v
IG11dGF0aW9uIGV2ZW50cykuCiAgICAgLy8gUmV0dXJucyBob3cgbXVjaCBjb3VsZCBiZSBhZGRl
ZCBiZWZvcmUgbGVuZ3RoIGxpbWl0IHdhcyBtZXQuCkBAIC00OSwxNSArNTAsMTUgQEAgcHVibGlj
OgogcHJvdGVjdGVkOgogICAgIENoYXJhY3RlckRhdGEoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBTdHJpbmcmIHRleHQsIENvbnN0cnVjdGlvblR5cGUgdHlwZSkKICAgICAgICAgOiBOb2RlKGRv
Y3VtZW50LCB0eXBlKQotICAgICAgICAsIG1fZGF0YSh0ZXh0LmltcGwoKSA/IHRleHQuaW1wbCgp
IDogU3RyaW5nSW1wbDo6ZW1wdHkoKSkKKyAgICAgICAgLCBtX2RhdGEoIXRleHQuaXNOdWxsKCkg
PyB0ZXh0IDogU3RyaW5nSW1wbDo6ZW1wdHkoKSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh0eXBl
ID09IENyZWF0ZUNvbW1lbnQgfHwgdHlwZSA9PSBDcmVhdGVUZXh0KTsKICAgICB9CiAKICAgICB2
aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25zdCBOb2RlUmVuZGVyaW5nQ29udGV4dCYp
OwogCi0gICAgdm9pZCBzZXREYXRhSW1wbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGltcGwpIHsg
bV9kYXRhID0gaW1wbDsgfQotICAgIHZvaWQgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KFN0cmluZ0lt
cGwqIG9sZFZhbHVlKTsKKyAgICB2b2lkIHNldERhdGFOb1VwZGF0ZShjb25zdCBTdHJpbmcmIGRh
dGEpIHsgbV9kYXRhID0gZGF0YTsgfQorICAgIHZvaWQgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KGNv
bnN0IFN0cmluZyYgb2xkVmFsdWUpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIG5v
ZGVWYWx1ZSgpIGNvbnN0OwpAQCAtNjUsMTQgKzY2LDEzIEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBib29sIGlzQ2hhcmFjdGVyRGF0YU5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAg
dmlydHVhbCBpbnQgbWF4Q2hhcmFjdGVyT2Zmc2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IG9mZnNldEluQ2hhcmFjdGVycygpIGNvbnN0OwotICAgIHZvaWQgc2V0RGF0YUFuZFVwZGF0ZShQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+LCB1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgdW5z
aWduZWQgb2xkTGVuZ3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgpOworICAgIHZvaWQgc2V0RGF0YUFu
ZFVwZGF0ZShjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgdW5z
aWduZWQgb2xkTGVuZ3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwogICAgIHZvaWQgdXBkYXRlUmVu
ZGVyZXIodW5zaWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIHVuc2lnbmVkIGxlbmd0aE9mUmVw
bGFjZWREYXRhKTsKICAgICB2b2lkIGNoZWNrQ2hhckRhdGFPcGVyYXRpb24odW5zaWduZWQgb2Zm
c2V0LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9kYXRhOwor
ICAgIFN0cmluZyBtX2RhdGE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBDaGFyYWN0ZXJEYXRhX2gKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Rl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCmluZGV4IGVkNDg0MzI0MWNlNDY2
ZTA0ZjkxOTAwNmZkZWI4NTQ3YmY4ODIxNjcuLjg0MWE1OWYwZTZkNzgyYTE5ZDljM2JjMWQ5YjEz
MjUwMTVmYzU2NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAKQEAgLTU1LDExICs1NSwxMSBAQCBQYXNzUmVm
UHRyPFRleHQ+IFRleHQ6OnNwbGl0VGV4dCh1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4g
b2xkU3RyID0gZGF0YUltcGwoKTsKLSAgICBSZWZQdHI8VGV4dD4gbmV3VGV4dCA9IHZpcnR1YWxD
cmVhdGUob2xkU3RyLT5zdWJzdHJpbmcob2Zmc2V0KSk7Ci0gICAgc2V0RGF0YUltcGwob2xkU3Ry
LT5zdWJzdHJpbmcoMCwgb2Zmc2V0KSk7CisgICAgU3RyaW5nIG9sZFN0ciA9IGRhdGEoKTsKKyAg
ICBSZWZQdHI8VGV4dD4gbmV3VGV4dCA9IHZpcnR1YWxDcmVhdGUob2xkU3RyLnN1YnN0cmluZyhv
ZmZzZXQpKTsKKyAgICBzZXREYXRhTm9VcGRhdGUob2xkU3RyLnN1YnN0cmluZygwLCBvZmZzZXQp
KTsKIAotICAgIGRpc3BhdGNoTW9kaWZpZWRFdmVudChvbGRTdHIuZ2V0KCkpOworICAgIGRpc3Bh
dGNoTW9kaWZpZWRFdmVudChvbGRTdHIpOwogCiAgICAgaWYgKHBhcmVudE5vZGUoKSkKICAgICAg
ICAgcGFyZW50Tm9kZSgpLT5pbnNlcnRCZWZvcmUobmV3VGV4dC5nZXQoKSwgbmV4dFNpYmxpbmco
KSwgZWMpOwpAQCAtNzAsNyArNzAsNyBAQCBQYXNzUmVmUHRyPFRleHQ+IFRleHQ6OnNwbGl0VGV4
dCh1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICBkb2N1bWVudCgp
LT50ZXh0Tm9kZVNwbGl0KHRoaXMpOwogCiAgICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHRv
UmVuZGVyVGV4dChyZW5kZXJlcigpKS0+c2V0VGV4dFdpdGhPZmZzZXQoZGF0YUltcGwoKSwgMCwg
b2xkU3RyLT5sZW5ndGgoKSk7CisgICAgICAgIHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKS0+c2V0
VGV4dFdpdGhPZmZzZXQoZGF0YUltcGwoKSwgMCwgb2xkU3RyLmxlbmd0aCgpKTsKIAogICAgIHJl
dHVybiBuZXdUZXh0LnJlbGVhc2UoKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113392</attachid>
            <date>2011-11-02 16:13:27 -0700</date>
            <delta_ts>2011-11-02 16:39:14 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-71383-20111102161326.patch</filename>
            <type>text/plain</type>
            <size>12228</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTkxMTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGU5
ZmE1NGEzNTcwNGJkZmE1ZTc5ZTY4ODZjN2U2OGVjMzJjYzIxYzUuLmNhMDU0Nzc2YjNmNWIyZWQ0
YjFkNGRkOWQ0ZmNlZmU5NWZjYzA5ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEzIEBACisyMDExLTExLTAyICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJlcGxhY2UgdXNhZ2Ugb2YgU3RyaW5nSW1wbCB3aXRoIFN0cmluZyB3aGVyZSBw
b3NzaWJsZSBpbiBDaGFyYWN0ZXJEYXRhIGFuZCBUZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTM4MworCisgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgorCisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisgICAgICAgIChX
VEY6OlN0cmluZzo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSk6IEFkZGVkIG5ldyBtZXRob2QuCisK
IDIwMTEtMTEtMDIgIEFsZXhleSBTaGFiYWxpbiAgPGEuc2hhYmFsaW5AZ21haWwuY29tPgogCiAg
ICAgICAgIFRFWFRSRUwgaW4gbGliamF2YXNjcmlwdGNvcmVndGstMS4wLnNvLjAuMTEuMCBvbiB4
ODYgKG9yIGk1ODYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWI1NWU1ZGY3ODY3YmJlZjE0YWQ5YWU1NzkwZjJi
ZTEzOTJiNTUyNy4uM2Q5OTFiYTk3OGE3YjljN2E0YTYyNTNiNmEzODRhNGYyMGU0YWY3MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDExLTExLTAyICBBZGFtIEtsZWluICA8YWRhbWtA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlcGxhY2UgdXNhZ2Ugb2YgU3RyaW5nSW1wbCB3aXRo
IFN0cmluZyB3aGVyZSBwb3NzaWJsZSBpbiBDaGFyYWN0ZXJEYXRhIGFuZCBUZXh0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTM4MworCisgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJ5b3N1a2UgTml3YSwgaW4gaHR0
cDovL3dlYmtpdC5vcmcvYi83MDg2MiwgYXNrZWQgbWUgdG8gcmVwbGFjZSB1c2FnZXMKKyAgICAg
ICAgb2YgU3RyaW5nIHdpdGggU3RyaW5nSW1wbC4gSSd2ZSBkb25lIG1vcmUgdGhhbiB3aGF0IGhl
IGFza2VkIGluIHRoaXMKKyAgICAgICAgcGF0Y2gsIHRoZSBiaWdnZXN0IGNoYW5nZSBiZWluZyB0
aGF0IENoYXJhY3RlckRhdGEgbm93IGhvbGRzIGEgU3RyaW5nCisgICAgICAgIGluc3RlYWQgb2Yg
YSBSZWZQdHI8U3RyaW5nSW1wbD4uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhcyB0aGlzIHNo
b3VsZCBoYXZlIG5vIGVmZmVjdCBvbiBiZWhhdmlvci4KKworICAgICAgICAqIGRvbS9DaGFyYWN0
ZXJEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnNldERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c3Vic3RyaW5nRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpwYXJzZXJBcHBlbmREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNoYXJhY3RlckRhdGE6OmFwcGVuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hh
cmFjdGVyRGF0YTo6aW5zZXJ0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRh
OjpkZWxldGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnJlcGxhY2VE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OmNvbnRhaW5zT25seVdoaXRl
c3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZFVwZGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjp1cGRhdGVSZW5kZXJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1vZGlmaWVkRXZlbnQpOgor
ICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0
ZXJEYXRhOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6ZGF0YUlt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6Q2hhcmFjdGVyRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpzZXREYXRhV2l0aG91dFVwZGF0ZSk6Cisg
ICAgICAgICogZG9tL1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dDo6c3BsaXRUZXh0
KToKKwogMjAxMS0xMS0wMiAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgSW5maW5pdGUgcmVjdXJzaW9uIGluIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
OjptYXJrQWxsQ2xpZW50c0ZvckludmFsaWRhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi90ZXh0L1dURlN0cmluZy5oCmluZGV4IDc4NzIxZDQ4NzY4MGQwODExOTUzYzg2NTg1MmVjM2I1
ZmRiNDViMWUuLmE4ZmQ2OTRhYmRlZjlmODdjMDVmNTg2MWZlZjlhMTRhMzIyNGI4ZTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmgKQEAgLTMyMyw2ICszMjMs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNvbnRhaW5zT25seUFTQ0lJKCkgY29uc3QgeyByZXR1
cm4gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCkpOyB9CiAgICAg
Ym9vbCBjb250YWluc09ubHlMYXRpbjEoKSBjb25zdCB7IHJldHVybiBjaGFyYWN0ZXJzQXJlQWxs
TGF0aW4xKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCkpOyB9CisgICAgYm9vbCBjb250YWluc09ubHlX
aGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gIW1faW1wbCB8fCBtX2ltcGwtPmNvbnRhaW5zT25s
eVdoaXRlc3BhY2UoKTsgfQogCiAgICAgLy8gSGFzaCB0YWJsZSBkZWxldGVkIHZhbHVlcywgd2hp
Y2ggYXJlIG9ubHkgY29uc3RydWN0ZWQgYW5kIG5ldmVyIGNvcGllZCBvciBkZXN0cm95ZWQuCiAg
ICAgU3RyaW5nKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX2ltcGwoV1RGOjpI
YXNoVGFibGVEZWxldGVkVmFsdWUpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0NoYXJhY3RlckRhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3Bw
CmluZGV4IDVkOWMxYjdmNzJmMzk5YWQ2OTc5ODkzMGM1MWFlYTlhOTVjZmRkMmMuLjkzMGQ2YWUy
YjRhOTFiYjJmODRiNmQ5YTRmNjBjYWI4M2RkMTE0YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFj
dGVyRGF0YS5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdm9pZCBD
aGFyYWN0ZXJEYXRhOjpzZXREYXRhKGNvbnN0IFN0cmluZyYgZGF0YSwgRXhjZXB0aW9uQ29kZSYp
CiB7CiAgICAgU3RyaW5nSW1wbCogZGF0YUltcGwgPSBkYXRhLmltcGwoKSA/IGRhdGEuaW1wbCgp
IDogU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICBpZiAoZXF1YWwobV9kYXRhLmdldCgpLCBkYXRh
SW1wbCkpCisgICAgaWYgKGVxdWFsKG1fZGF0YS5pbXBsKCksIGRhdGFJbXBsKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbGVuZ3RoKCk7CkBAIC01NSwxMiAr
NTUsMTIgQEAgU3RyaW5nIENoYXJhY3RlckRhdGE6OnN1YnN0cmluZ0RhdGEodW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBjb3VudCwgRXhjZXB0aW9uQ28KICAgICBpZiAoZWMpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVybiBtX2RhdGEtPnN1YnN0cmluZyhvZmZzZXQsIGNv
dW50KTsKKyAgICByZXR1cm4gbV9kYXRhLnN1YnN0cmluZyhvZmZzZXQsIGNvdW50KTsKIH0KIAog
dW5zaWduZWQgQ2hhcmFjdGVyRGF0YTo6cGFyc2VyQXBwZW5kRGF0YShjb25zdCBVQ2hhciogZGF0
YSwgdW5zaWduZWQgZGF0YUxlbmd0aCwgdW5zaWduZWQgbGVuZ3RoTGltaXQpCiB7Ci0gICAgdW5z
aWduZWQgb2xkTGVuZ3RoID0gbV9kYXRhLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBvbGRMZW5n
dGggPSBtX2RhdGEubGVuZ3RoKCk7CiAKICAgICB1bnNpZ25lZCBlbmQgPSBtaW4oZGF0YUxlbmd0
aCwgbGVuZ3RoTGltaXQgLSBvbGRMZW5ndGgpOwogCkBAIC03Nyw5ICs3Nyw3IEBAIHVuc2lnbmVk
IENoYXJhY3RlckRhdGE6OnBhcnNlckFwcGVuZERhdGEoY29uc3QgVUNoYXIqIGRhdGEsIHVuc2ln
bmVkIGRhdGFMZW5ndGgsCiAgICAgaWYgKCFlbmQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
U3RyaW5nIG5ld1N0ciA9IG1fZGF0YTsKLSAgICBuZXdTdHIuYXBwZW5kKGRhdGEsIGVuZCk7Ci0g
ICAgbV9kYXRhID0gbmV3U3RyLmltcGwoKTsKKyAgICBtX2RhdGEuYXBwZW5kKGRhdGEsIGVuZCk7
CiAKICAgICB1cGRhdGVSZW5kZXJlcihvbGRMZW5ndGgsIDApOwogICAgIC8vIFdlIGRvbid0IGNh
bGwgZGlzcGF0Y2hNb2RpZmllZEV2ZW50IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZQpA
QCAtOTUsNyArOTMsNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OmFwcGVuZERhdGEoY29uc3QgU3Ry
aW5nJiBkYXRhLCBFeGNlcHRpb25Db2RlJikKICAgICBTdHJpbmcgbmV3U3RyID0gbV9kYXRhOwog
ICAgIG5ld1N0ci5hcHBlbmQoZGF0YSk7CiAKLSAgICBzZXREYXRhQW5kVXBkYXRlKG5ld1N0ci5p
bXBsKCksIG1fZGF0YS0+bGVuZ3RoKCksIDAsIGRhdGEubGVuZ3RoKCkpOworICAgIHNldERhdGFB
bmRVcGRhdGUobmV3U3RyLCBtX2RhdGEubGVuZ3RoKCksIDAsIGRhdGEubGVuZ3RoKCkpOwogCiAg
ICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjYWxsIHRleHRJbnNlcnRlZCBoZXJlPwogfQpAQCAtMTA5
LDcgKzEwNyw3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6aW5zZXJ0RGF0YSh1bnNpZ25lZCBvZmZz
ZXQsIGNvbnN0IFN0cmluZyYgZGF0YSwgRXhjZXB0aW9uQ29kCiAgICAgU3RyaW5nIG5ld1N0ciA9
IG1fZGF0YTsKICAgICBuZXdTdHIuaW5zZXJ0KGRhdGEsIG9mZnNldCk7CiAKLSAgICBzZXREYXRh
QW5kVXBkYXRlKG5ld1N0ci5pbXBsKCksIG9mZnNldCwgMCwgZGF0YS5sZW5ndGgoKSk7CisgICAg
c2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIsIG9mZnNldCwgMCwgZGF0YS5sZW5ndGgoKSk7CiAKICAg
ICBkb2N1bWVudCgpLT50ZXh0SW5zZXJ0ZWQodGhpcywgb2Zmc2V0LCBkYXRhLmxlbmd0aCgpKTsK
IH0KQEAgLTEyOSw3ICsxMjcsNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OmRlbGV0ZURhdGEodW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZQogICAgIFN0cmlu
ZyBuZXdTdHIgPSBtX2RhdGE7CiAgICAgbmV3U3RyLnJlbW92ZShvZmZzZXQsIHJlYWxDb3VudCk7
CiAKLSAgICBzZXREYXRhQW5kVXBkYXRlKG5ld1N0ci5pbXBsKCksIG9mZnNldCwgY291bnQsIDAp
OworICAgIHNldERhdGFBbmRVcGRhdGUobmV3U3RyLCBvZmZzZXQsIGNvdW50LCAwKTsKIAogICAg
IGRvY3VtZW50KCktPnRleHRSZW1vdmVkKHRoaXMsIG9mZnNldCwgcmVhbENvdW50KTsKIH0KQEAg
LTE1MCw3ICsxNDgsNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnJlcGxhY2VEYXRhKHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgY291bnQsIGNvbnN0IFN0cmluZyYgZAogICAgIG5ld1N0ci5yZW1v
dmUob2Zmc2V0LCByZWFsQ291bnQpOwogICAgIG5ld1N0ci5pbnNlcnQoZGF0YSwgb2Zmc2V0KTsK
IAotICAgIHNldERhdGFBbmRVcGRhdGUobmV3U3RyLmltcGwoKSwgb2Zmc2V0LCBjb3VudCwgZGF0
YS5sZW5ndGgoKSk7CisgICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIsIG9mZnNldCwgY291bnQs
IGRhdGEubGVuZ3RoKCkpOwogCiAgICAgLy8gdXBkYXRlIHRoZSBtYXJrZXJzIGZvciBzcGVsbCBj
aGVja2luZyBhbmQgZ3JhbW1hciBjaGVja2luZwogICAgIGRvY3VtZW50KCktPnRleHRSZW1vdmVk
KHRoaXMsIG9mZnNldCwgcmVhbENvdW50KTsKQEAgLTE2NCw3ICsxNjIsNyBAQCBTdHJpbmcgQ2hh
cmFjdGVyRGF0YTo6bm9kZVZhbHVlKCkgY29uc3QKIAogYm9vbCBDaGFyYWN0ZXJEYXRhOjpjb250
YWluc09ubHlXaGl0ZXNwYWNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1fZGF0YSB8fCBtX2Rh
dGEtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKTsKKyAgICByZXR1cm4gbV9kYXRhLmNvbnRhaW5z
T25seVdoaXRlc3BhY2UoKTsKIH0KIAogdm9pZCBDaGFyYWN0ZXJEYXRhOjpzZXROb2RlVmFsdWUo
Y29uc3QgU3RyaW5nJiBub2RlVmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTcyLDE0ICsx
NzAsMTQgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpzZXROb2RlVmFsdWUoY29uc3QgU3RyaW5nJiBu
b2RlVmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHNldERhdGEobm9kZVZhbHVlLCBlYyk7
CiB9CiAKLXZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZFVwZGF0ZShQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IG5ld0RhdGEsIHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWREYXRhLCB1bnNpZ25l
ZCBvbGRMZW5ndGgsIHVuc2lnbmVkIG5ld0xlbmd0aCkKK3ZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0
RGF0YUFuZFVwZGF0ZShjb25zdCBTdHJpbmcmIG5ld0RhdGEsIHVuc2lnbmVkIG9mZnNldE9mUmVw
bGFjZWREYXRhLCB1bnNpZ25lZCBvbGRMZW5ndGgsIHVuc2lnbmVkIG5ld0xlbmd0aCkKIHsKICAg
ICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+
c2VsZWN0aW9uKCktPnRleHRXaWxsQmVSZXBsYWNlZCh0aGlzLCBvZmZzZXRPZlJlcGxhY2VkRGF0
YSwgb2xkTGVuZ3RoLCBuZXdMZW5ndGgpOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBvbGREYXRh
ID0gbV9kYXRhOworICAgIFN0cmluZyBvbGREYXRhID0gbV9kYXRhOwogICAgIG1fZGF0YSA9IG5l
d0RhdGE7CiAgICAgdXBkYXRlUmVuZGVyZXIob2Zmc2V0T2ZSZXBsYWNlZERhdGEsIG9sZExlbmd0
aCk7Ci0gICAgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KG9sZERhdGEuZ2V0KCkpOworICAgIGRpc3Bh
dGNoTW9kaWZpZWRFdmVudChvbGREYXRhKTsKIH0KIAogdm9pZCBDaGFyYWN0ZXJEYXRhOjp1cGRh
dGVSZW5kZXJlcih1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgdW5zaWduZWQgbGVuZ3Ro
T2ZSZXBsYWNlZERhdGEpCkBAIC0xODcsNyArMTg1LDcgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjp1
cGRhdGVSZW5kZXJlcih1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgdW5zaWduZWQgbGVu
Z3QKICAgICBpZiAoKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcklzTmVlZGVkKE5vZGVSZW5kZXJp
bmdDb250ZXh0KHRoaXMsIHJlbmRlcmVyKCktPnN0eWxlKCkpKSkgJiYgYXR0YWNoZWQoKSkKICAg
ICAgICAgcmVhdHRhY2goKTsKICAgICBlbHNlIGlmIChyZW5kZXJlcigpKQotICAgICAgICB0b1Jl
bmRlclRleHQocmVuZGVyZXIoKSktPnNldFRleHRXaXRoT2Zmc2V0KG1fZGF0YSwgb2Zmc2V0T2ZS
ZXBsYWNlZERhdGEsIGxlbmd0aE9mUmVwbGFjZWREYXRhKTsKKyAgICAgICAgdG9SZW5kZXJUZXh0
KHJlbmRlcmVyKCkpLT5zZXRUZXh0V2l0aE9mZnNldChtX2RhdGEuaW1wbCgpLCBvZmZzZXRPZlJl
cGxhY2VkRGF0YSwgbGVuZ3RoT2ZSZXBsYWNlZERhdGEpOwogfQogCiAjaWYgRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKQEAgLTIzMiw3ICsyMzAsNyBAQCBzdGF0aWMgdm9pZCBlbnF1ZXVlQ2hh
cmFjdGVyRGF0YU11dGF0aW9uUmVjb3JkKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgb2xkRGF0
YQogfQogI2VuZGlmIC8vIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAKLXZvaWQgQ2hhcmFj
dGVyRGF0YTo6ZGlzcGF0Y2hNb2RpZmllZEV2ZW50KFN0cmluZ0ltcGwqIG9sZERhdGEpCit2b2lk
IENoYXJhY3RlckRhdGE6OmRpc3BhdGNoTW9kaWZpZWRFdmVudChjb25zdCBTdHJpbmcmIG9sZERh
dGEpCiB7CiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKICAgICBlbnF1ZXVlQ2hhcmFj
dGVyRGF0YU11dGF0aW9uUmVjb3JkKHRoaXMsIG9sZERhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0
ZXJEYXRhLmgKaW5kZXggNjYxZTExMDYzNzcyMmQzNDhmN2ZjODVkYTQwZjU1ZTM5MjZjMTIyMi4u
MTgyMGUyY2ZkMDU1YzNhZmVmYTcyMGFmZDY3NTZiZmQ4NmVlODgxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2hhcmFjdGVyRGF0YS5oCkBAIC0yNCw2ICsyNCw3IEBACiAjZGVmaW5lIENoYXJhY3RlckRhdGFf
aAogCiAjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTMxLDcgKzMyLDcgQEAgY2xhc3MgQ2hhcmFjdGVy
RGF0YSA6IHB1YmxpYyBOb2RlIHsKIHB1YmxpYzoKICAgICBTdHJpbmcgZGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YTsgfQogICAgIHZvaWQgc2V0RGF0YShjb25zdCBTdHJpbmcmLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLT5s
ZW5ndGgoKTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5s
ZW5ndGgoKTsgfQogICAgIFN0cmluZyBzdWJzdHJpbmdEYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgY291bnQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGFwcGVuZERhdGEoY29uc3Qg
U3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgaW5zZXJ0RGF0YSh1bnNpZ25lZCBv
ZmZzZXQsIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTQwLDcgKzQxLDcgQEAg
cHVibGljOgogCiAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKCkgY29uc3Q7CiAKLSAg
ICBTdHJpbmdJbXBsKiBkYXRhSW1wbCgpIHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQorICAgIFN0
cmluZ0ltcGwqIGRhdGFJbXBsKCkgeyByZXR1cm4gbV9kYXRhLmltcGwoKTsgfQogCiAgICAgLy8g
TGlrZSBhcHBlbmREYXRhLCBidXQgb3B0aW1pemVkIGZvciB0aGUgcGFyc2VyIChlLmcuLCBubyBt
dXRhdGlvbiBldmVudHMpLgogICAgIC8vIFJldHVybnMgaG93IG11Y2ggY291bGQgYmUgYWRkZWQg
YmVmb3JlIGxlbmd0aCBsaW1pdCB3YXMgbWV0LgpAQCAtNDksMTUgKzUwLDE5IEBAIHB1YmxpYzoK
IHByb3RlY3RlZDoKICAgICBDaGFyYWN0ZXJEYXRhKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
U3RyaW5nJiB0ZXh0LCBDb25zdHJ1Y3Rpb25UeXBlIHR5cGUpCiAgICAgICAgIDogTm9kZShkb2N1
bWVudCwgdHlwZSkKLSAgICAgICAgLCBtX2RhdGEodGV4dC5pbXBsKCkgPyB0ZXh0LmltcGwoKSA6
IFN0cmluZ0ltcGw6OmVtcHR5KCkpCisgICAgICAgICwgbV9kYXRhKCF0ZXh0LmlzTnVsbCgpID8g
dGV4dCA6IFN0cmluZ0ltcGw6OmVtcHR5KCkpCiAgICAgewogICAgICAgICBBU1NFUlQodHlwZSA9
PSBDcmVhdGVDb21tZW50IHx8IHR5cGUgPT0gQ3JlYXRlVGV4dCk7CiAgICAgfQogCiAgICAgdmly
dHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoY29uc3QgTm9kZVJlbmRlcmluZ0NvbnRleHQmKTsK
IAotICAgIHZvaWQgc2V0RGF0YUltcGwoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBpbXBsKSB7IG1f
ZGF0YSA9IGltcGw7IH0KLSAgICB2b2lkIGRpc3BhdGNoTW9kaWZpZWRFdmVudChTdHJpbmdJbXBs
KiBvbGRWYWx1ZSk7CisgICAgdm9pZCBzZXREYXRhV2l0aG91dFVwZGF0ZShjb25zdCBTdHJpbmcm
IGRhdGEpCisgICAgeworICAgICAgICBBU1NFUlQoIWRhdGEuaXNOdWxsKCkpOworICAgICAgICBt
X2RhdGEgPSBkYXRhOworICAgIH0KKyAgICB2b2lkIGRpc3BhdGNoTW9kaWZpZWRFdmVudChjb25z
dCBTdHJpbmcmIG9sZFZhbHVlKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIFN0cmluZyBub2Rl
VmFsdWUoKSBjb25zdDsKQEAgLTY1LDE0ICs3MCwxMyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCBpc0NoYXJhY3RlckRhdGFOb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgaW50IG1heENoYXJhY3Rlck9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBv
ZmZzZXRJbkNoYXJhY3RlcnMoKSBjb25zdDsKLSAgICB2b2lkIHNldERhdGFBbmRVcGRhdGUoUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiwgdW5zaWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIHVuc2ln
bmVkIG9sZExlbmd0aCwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKKyAgICB2b2lkIHNldERhdGFBbmRV
cGRhdGUoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIHVuc2ln
bmVkIG9sZExlbmd0aCwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKICAgICB2b2lkIHVwZGF0ZVJlbmRl
cmVyKHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWREYXRhLCB1bnNpZ25lZCBsZW5ndGhPZlJlcGxh
Y2VkRGF0YSk7CiAgICAgdm9pZCBjaGVja0NoYXJEYXRhT3BlcmF0aW9uKHVuc2lnbmVkIG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fZGF0YTsKKyAg
ICBTdHJpbmcgbV9kYXRhOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gQ2hhcmFjdGVyRGF0YV9oCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAppbmRleCBlZDQ4NDMyNDFjZTQ2NmUw
NGY5MTkwMDZmZGViODU0N2JmODgyMTY3Li42YjVmN2Y3YjQ1YmFmY2E0ZTc3N2Q3YTk0NjQ0YjQ1
NDBmM2VmZThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCkBAIC01NSwxMSArNTUsMTEgQEAgUGFzc1JlZlB0
cjxUZXh0PiBUZXh0OjpzcGxpdFRleHQodW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBl
YykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG9s
ZFN0ciA9IGRhdGFJbXBsKCk7Ci0gICAgUmVmUHRyPFRleHQ+IG5ld1RleHQgPSB2aXJ0dWFsQ3Jl
YXRlKG9sZFN0ci0+c3Vic3RyaW5nKG9mZnNldCkpOwotICAgIHNldERhdGFJbXBsKG9sZFN0ci0+
c3Vic3RyaW5nKDAsIG9mZnNldCkpOworICAgIFN0cmluZyBvbGRTdHIgPSBkYXRhKCk7CisgICAg
UmVmUHRyPFRleHQ+IG5ld1RleHQgPSB2aXJ0dWFsQ3JlYXRlKG9sZFN0ci5zdWJzdHJpbmcob2Zm
c2V0KSk7CisgICAgc2V0RGF0YVdpdGhvdXRVcGRhdGUob2xkU3RyLnN1YnN0cmluZygwLCBvZmZz
ZXQpKTsKIAotICAgIGRpc3BhdGNoTW9kaWZpZWRFdmVudChvbGRTdHIuZ2V0KCkpOworICAgIGRp
c3BhdGNoTW9kaWZpZWRFdmVudChvbGRTdHIpOwogCiAgICAgaWYgKHBhcmVudE5vZGUoKSkKICAg
ICAgICAgcGFyZW50Tm9kZSgpLT5pbnNlcnRCZWZvcmUobmV3VGV4dC5nZXQoKSwgbmV4dFNpYmxp
bmcoKSwgZWMpOwpAQCAtNzAsNyArNzAsNyBAQCBQYXNzUmVmUHRyPFRleHQ+IFRleHQ6OnNwbGl0
VGV4dCh1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICBkb2N1bWVu
dCgpLT50ZXh0Tm9kZVNwbGl0KHRoaXMpOwogCiAgICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAg
IHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKS0+c2V0VGV4dFdpdGhPZmZzZXQoZGF0YUltcGwoKSwg
MCwgb2xkU3RyLT5sZW5ndGgoKSk7CisgICAgICAgIHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKS0+
c2V0VGV4dFdpdGhPZmZzZXQoZGF0YUltcGwoKSwgMCwgb2xkU3RyLmxlbmd0aCgpKTsKIAogICAg
IHJldHVybiBuZXdUZXh0LnJlbGVhc2UoKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113400</attachid>
            <date>2011-11-02 16:39:16 -0700</date>
            <delta_ts>2011-11-02 17:06:12 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-71383-20111102163915.patch</filename>
            <type>text/plain</type>
            <size>12515</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTkxMTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGU5
ZmE1NGEzNTcwNGJkZmE1ZTc5ZTY4ODZjN2U2OGVjMzJjYzIxYzUuLmNhMDU0Nzc2YjNmNWIyZWQ0
YjFkNGRkOWQ0ZmNlZmU5NWZjYzA5ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEzIEBACisyMDExLTExLTAyICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJlcGxhY2UgdXNhZ2Ugb2YgU3RyaW5nSW1wbCB3aXRoIFN0cmluZyB3aGVyZSBw
b3NzaWJsZSBpbiBDaGFyYWN0ZXJEYXRhIGFuZCBUZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTM4MworCisgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgorCisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisgICAgICAgIChX
VEY6OlN0cmluZzo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSk6IEFkZGVkIG5ldyBtZXRob2QuCisK
IDIwMTEtMTEtMDIgIEFsZXhleSBTaGFiYWxpbiAgPGEuc2hhYmFsaW5AZ21haWwuY29tPgogCiAg
ICAgICAgIFRFWFRSRUwgaW4gbGliamF2YXNjcmlwdGNvcmVndGstMS4wLnNvLjAuMTEuMCBvbiB4
ODYgKG9yIGk1ODYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWI1NWU1ZGY3ODY3YmJlZjE0YWQ5YWU1NzkwZjJi
ZTEzOTJiNTUyNy4uM2Q5OTFiYTk3OGE3YjljN2E0YTYyNTNiNmEzODRhNGYyMGU0YWY3MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDExLTExLTAyICBBZGFtIEtsZWluICA8YWRhbWtA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlcGxhY2UgdXNhZ2Ugb2YgU3RyaW5nSW1wbCB3aXRo
IFN0cmluZyB3aGVyZSBwb3NzaWJsZSBpbiBDaGFyYWN0ZXJEYXRhIGFuZCBUZXh0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTM4MworCisgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJ5b3N1a2UgTml3YSwgaW4gaHR0
cDovL3dlYmtpdC5vcmcvYi83MDg2MiwgYXNrZWQgbWUgdG8gcmVwbGFjZSB1c2FnZXMKKyAgICAg
ICAgb2YgU3RyaW5nIHdpdGggU3RyaW5nSW1wbC4gSSd2ZSBkb25lIG1vcmUgdGhhbiB3aGF0IGhl
IGFza2VkIGluIHRoaXMKKyAgICAgICAgcGF0Y2gsIHRoZSBiaWdnZXN0IGNoYW5nZSBiZWluZyB0
aGF0IENoYXJhY3RlckRhdGEgbm93IGhvbGRzIGEgU3RyaW5nCisgICAgICAgIGluc3RlYWQgb2Yg
YSBSZWZQdHI8U3RyaW5nSW1wbD4uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhcyB0aGlzIHNo
b3VsZCBoYXZlIG5vIGVmZmVjdCBvbiBiZWhhdmlvci4KKworICAgICAgICAqIGRvbS9DaGFyYWN0
ZXJEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnNldERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c3Vic3RyaW5nRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpwYXJzZXJBcHBlbmREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNoYXJhY3RlckRhdGE6OmFwcGVuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hh
cmFjdGVyRGF0YTo6aW5zZXJ0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRh
OjpkZWxldGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnJlcGxhY2VE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OmNvbnRhaW5zT25seVdoaXRl
c3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZFVwZGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjp1cGRhdGVSZW5kZXJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1vZGlmaWVkRXZlbnQpOgor
ICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0
ZXJEYXRhOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6ZGF0YUlt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6Q2hhcmFjdGVyRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpzZXREYXRhV2l0aG91dFVwZGF0ZSk6Cisg
ICAgICAgICogZG9tL1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dDo6c3BsaXRUZXh0
KToKKwogMjAxMS0xMS0wMiAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgSW5maW5pdGUgcmVjdXJzaW9uIGluIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
OjptYXJrQWxsQ2xpZW50c0ZvckludmFsaWRhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi90ZXh0L1dURlN0cmluZy5oCmluZGV4IDc4NzIxZDQ4NzY4MGQwODExOTUzYzg2NTg1MmVjM2I1
ZmRiNDViMWUuLmE4ZmQ2OTRhYmRlZjlmODdjMDVmNTg2MWZlZjlhMTRhMzIyNGI4ZTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmgKQEAgLTMyMyw2ICszMjMs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNvbnRhaW5zT25seUFTQ0lJKCkgY29uc3QgeyByZXR1
cm4gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCkpOyB9CiAgICAg
Ym9vbCBjb250YWluc09ubHlMYXRpbjEoKSBjb25zdCB7IHJldHVybiBjaGFyYWN0ZXJzQXJlQWxs
TGF0aW4xKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCkpOyB9CisgICAgYm9vbCBjb250YWluc09ubHlX
aGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gIW1faW1wbCB8fCBtX2ltcGwtPmNvbnRhaW5zT25s
eVdoaXRlc3BhY2UoKTsgfQogCiAgICAgLy8gSGFzaCB0YWJsZSBkZWxldGVkIHZhbHVlcywgd2hp
Y2ggYXJlIG9ubHkgY29uc3RydWN0ZWQgYW5kIG5ldmVyIGNvcGllZCBvciBkZXN0cm95ZWQuCiAg
ICAgU3RyaW5nKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX2ltcGwoV1RGOjpI
YXNoVGFibGVEZWxldGVkVmFsdWUpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0NoYXJhY3RlckRhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3Bw
CmluZGV4IDVkOWMxYjdmNzJmMzk5YWQ2OTc5ODkzMGM1MWFlYTlhOTVjZmRkMmMuLmQyN2MzYzYx
NzRmMTM5ZDEyYWJlMTUzYjY0YTYzMmVlMDNlNTQwMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFj
dGVyRGF0YS5jcHAKQEAgLTM5LDEzICszOSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZv
aWQgQ2hhcmFjdGVyRGF0YTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIGRhdGEsIEV4Y2VwdGlvbkNv
ZGUmKQogewotICAgIFN0cmluZ0ltcGwqIGRhdGFJbXBsID0gZGF0YS5pbXBsKCkgPyBkYXRhLmlt
cGwoKSA6IFN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgaWYgKGVxdWFsKG1fZGF0YS5nZXQoKSwg
ZGF0YUltcGwpKQorICAgIGNvbnN0IFN0cmluZyYgbm9uTnVsbERhdGEgPSAhZGF0YS5pc051bGwo
KSA/IGRhdGEgOiBzdGF0aWNfY2FzdDxjb25zdCBTdHJpbmcmPihlbXB0eUF0b20pOworICAgIGlm
IChtX2RhdGEgPT0gbm9uTnVsbERhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVk
IG9sZExlbmd0aCA9IGxlbmd0aCgpOwogCi0gICAgc2V0RGF0YUFuZFVwZGF0ZShkYXRhSW1wbCwg
MCwgb2xkTGVuZ3RoLCBkYXRhSW1wbC0+bGVuZ3RoKCkpOworICAgIHNldERhdGFBbmRVcGRhdGUo
bm9uTnVsbERhdGEsIDAsIG9sZExlbmd0aCwgbm9uTnVsbERhdGEubGVuZ3RoKCkpOwogICAgIGRv
Y3VtZW50KCktPnRleHRSZW1vdmVkKHRoaXMsIDAsIG9sZExlbmd0aCk7CiB9CiAKQEAgLTU1LDEy
ICs1NSwxMiBAQCBTdHJpbmcgQ2hhcmFjdGVyRGF0YTo6c3Vic3RyaW5nRGF0YSh1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBFeGNlcHRpb25DbwogICAgIGlmIChlYykKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIG1fZGF0YS0+c3Vic3RyaW5nKG9mZnNldCwg
Y291bnQpOworICAgIHJldHVybiBtX2RhdGEuc3Vic3RyaW5nKG9mZnNldCwgY291bnQpOwogfQog
CiB1bnNpZ25lZCBDaGFyYWN0ZXJEYXRhOjpwYXJzZXJBcHBlbmREYXRhKGNvbnN0IFVDaGFyKiBk
YXRhLCB1bnNpZ25lZCBkYXRhTGVuZ3RoLCB1bnNpZ25lZCBsZW5ndGhMaW1pdCkKIHsKLSAgICB1
bnNpZ25lZCBvbGRMZW5ndGggPSBtX2RhdGEtPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIG9sZExl
bmd0aCA9IG1fZGF0YS5sZW5ndGgoKTsKIAogICAgIHVuc2lnbmVkIGVuZCA9IG1pbihkYXRhTGVu
Z3RoLCBsZW5ndGhMaW1pdCAtIG9sZExlbmd0aCk7CiAKQEAgLTc3LDkgKzc3LDcgQEAgdW5zaWdu
ZWQgQ2hhcmFjdGVyRGF0YTo6cGFyc2VyQXBwZW5kRGF0YShjb25zdCBVQ2hhciogZGF0YSwgdW5z
aWduZWQgZGF0YUxlbmd0aCwKICAgICBpZiAoIWVuZCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICBTdHJpbmcgbmV3U3RyID0gbV9kYXRhOwotICAgIG5ld1N0ci5hcHBlbmQoZGF0YSwgZW5kKTsK
LSAgICBtX2RhdGEgPSBuZXdTdHIuaW1wbCgpOworICAgIG1fZGF0YS5hcHBlbmQoZGF0YSwgZW5k
KTsKIAogICAgIHVwZGF0ZVJlbmRlcmVyKG9sZExlbmd0aCwgMCk7CiAgICAgLy8gV2UgZG9uJ3Qg
Y2FsbCBkaXNwYXRjaE1vZGlmaWVkRXZlbnQgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhl
CkBAIC05NSw3ICs5Myw3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6YXBwZW5kRGF0YShjb25zdCBT
dHJpbmcmIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKQogICAgIFN0cmluZyBuZXdTdHIgPSBtX2RhdGE7
CiAgICAgbmV3U3RyLmFwcGVuZChkYXRhKTsKIAotICAgIHNldERhdGFBbmRVcGRhdGUobmV3U3Ry
LmltcGwoKSwgbV9kYXRhLT5sZW5ndGgoKSwgMCwgZGF0YS5sZW5ndGgoKSk7CisgICAgc2V0RGF0
YUFuZFVwZGF0ZShuZXdTdHIsIG1fZGF0YS5sZW5ndGgoKSwgMCwgZGF0YS5sZW5ndGgoKSk7CiAK
ICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNhbGwgdGV4dEluc2VydGVkIGhlcmU/CiB9CkBAIC0x
MDksNyArMTA3LDcgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjppbnNlcnREYXRhKHVuc2lnbmVkIG9m
ZnNldCwgY29uc3QgU3RyaW5nJiBkYXRhLCBFeGNlcHRpb25Db2QKICAgICBTdHJpbmcgbmV3U3Ry
ID0gbV9kYXRhOwogICAgIG5ld1N0ci5pbnNlcnQoZGF0YSwgb2Zmc2V0KTsKIAotICAgIHNldERh
dGFBbmRVcGRhdGUobmV3U3RyLmltcGwoKSwgb2Zmc2V0LCAwLCBkYXRhLmxlbmd0aCgpKTsKKyAg
ICBzZXREYXRhQW5kVXBkYXRlKG5ld1N0ciwgb2Zmc2V0LCAwLCBkYXRhLmxlbmd0aCgpKTsKIAog
ICAgIGRvY3VtZW50KCktPnRleHRJbnNlcnRlZCh0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkp
OwogfQpAQCAtMTI5LDcgKzEyNyw3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6ZGVsZXRlRGF0YSh1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBFeGNlcHRpb25Db2RlJiBlCiAgICAgU3Ry
aW5nIG5ld1N0ciA9IG1fZGF0YTsKICAgICBuZXdTdHIucmVtb3ZlKG9mZnNldCwgcmVhbENvdW50
KTsKIAotICAgIHNldERhdGFBbmRVcGRhdGUobmV3U3RyLmltcGwoKSwgb2Zmc2V0LCBjb3VudCwg
MCk7CisgICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIsIG9mZnNldCwgY291bnQsIDApOwogCiAg
ICAgZG9jdW1lbnQoKS0+dGV4dFJlbW92ZWQodGhpcywgb2Zmc2V0LCByZWFsQ291bnQpOwogfQpA
QCAtMTUwLDcgKzE0OCw3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6cmVwbGFjZURhdGEodW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiBkCiAgICAgbmV3U3RyLnJl
bW92ZShvZmZzZXQsIHJlYWxDb3VudCk7CiAgICAgbmV3U3RyLmluc2VydChkYXRhLCBvZmZzZXQp
OwogCi0gICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIuaW1wbCgpLCBvZmZzZXQsIGNvdW50LCBk
YXRhLmxlbmd0aCgpKTsKKyAgICBzZXREYXRhQW5kVXBkYXRlKG5ld1N0ciwgb2Zmc2V0LCBjb3Vu
dCwgZGF0YS5sZW5ndGgoKSk7CiAKICAgICAvLyB1cGRhdGUgdGhlIG1hcmtlcnMgZm9yIHNwZWxs
IGNoZWNraW5nIGFuZCBncmFtbWFyIGNoZWNraW5nCiAgICAgZG9jdW1lbnQoKS0+dGV4dFJlbW92
ZWQodGhpcywgb2Zmc2V0LCByZWFsQ291bnQpOwpAQCAtMTY0LDcgKzE2Miw3IEBAIFN0cmluZyBD
aGFyYWN0ZXJEYXRhOjpub2RlVmFsdWUoKSBjb25zdAogCiBib29sIENoYXJhY3RlckRhdGE6OmNv
bnRhaW5zT25seVdoaXRlc3BhY2UoKSBjb25zdAogewotICAgIHJldHVybiAhbV9kYXRhIHx8IG1f
ZGF0YS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpOworICAgIHJldHVybiBtX2RhdGEuY29udGFp
bnNPbmx5V2hpdGVzcGFjZSgpOwogfQogCiB2b2lkIENoYXJhY3RlckRhdGE6OnNldE5vZGVWYWx1
ZShjb25zdCBTdHJpbmcmIG5vZGVWYWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xNzIsMTQg
KzE3MCwxNCBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnNldE5vZGVWYWx1ZShjb25zdCBTdHJpbmcm
IG5vZGVWYWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgc2V0RGF0YShub2RlVmFsdWUsIGVj
KTsKIH0KIAotdm9pZCBDaGFyYWN0ZXJEYXRhOjpzZXREYXRhQW5kVXBkYXRlKFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gbmV3RGF0YSwgdW5zaWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIHVuc2ln
bmVkIG9sZExlbmd0aCwgdW5zaWduZWQgbmV3TGVuZ3RoKQordm9pZCBDaGFyYWN0ZXJEYXRhOjpz
ZXREYXRhQW5kVXBkYXRlKGNvbnN0IFN0cmluZyYgbmV3RGF0YSwgdW5zaWduZWQgb2Zmc2V0T2ZS
ZXBsYWNlZERhdGEsIHVuc2lnbmVkIG9sZExlbmd0aCwgdW5zaWduZWQgbmV3TGVuZ3RoKQogewog
ICAgIGlmIChkb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgp
LT5zZWxlY3Rpb24oKS0+dGV4dFdpbGxCZVJlcGxhY2VkKHRoaXMsIG9mZnNldE9mUmVwbGFjZWRE
YXRhLCBvbGRMZW5ndGgsIG5ld0xlbmd0aCk7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG9sZERh
dGEgPSBtX2RhdGE7CisgICAgU3RyaW5nIG9sZERhdGEgPSBtX2RhdGE7CiAgICAgbV9kYXRhID0g
bmV3RGF0YTsKICAgICB1cGRhdGVSZW5kZXJlcihvZmZzZXRPZlJlcGxhY2VkRGF0YSwgb2xkTGVu
Z3RoKTsKLSAgICBkaXNwYXRjaE1vZGlmaWVkRXZlbnQob2xkRGF0YS5nZXQoKSk7CisgICAgZGlz
cGF0Y2hNb2RpZmllZEV2ZW50KG9sZERhdGEpOwogfQogCiB2b2lkIENoYXJhY3RlckRhdGE6OnVw
ZGF0ZVJlbmRlcmVyKHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWREYXRhLCB1bnNpZ25lZCBsZW5n
dGhPZlJlcGxhY2VkRGF0YSkKQEAgLTE4Nyw3ICsxODUsNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6
OnVwZGF0ZVJlbmRlcmVyKHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWREYXRhLCB1bnNpZ25lZCBs
ZW5ndAogICAgIGlmICgoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVySXNOZWVkZWQoTm9kZVJlbmRl
cmluZ0NvbnRleHQodGhpcywgcmVuZGVyZXIoKS0+c3R5bGUoKSkpKSAmJiBhdHRhY2hlZCgpKQog
ICAgICAgICByZWF0dGFjaCgpOwogICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHRv
UmVuZGVyVGV4dChyZW5kZXJlcigpKS0+c2V0VGV4dFdpdGhPZmZzZXQobV9kYXRhLCBvZmZzZXRP
ZlJlcGxhY2VkRGF0YSwgbGVuZ3RoT2ZSZXBsYWNlZERhdGEpOworICAgICAgICB0b1JlbmRlclRl
eHQocmVuZGVyZXIoKSktPnNldFRleHRXaXRoT2Zmc2V0KG1fZGF0YS5pbXBsKCksIG9mZnNldE9m
UmVwbGFjZWREYXRhLCBsZW5ndGhPZlJlcGxhY2VkRGF0YSk7CiB9CiAKICNpZiBFTkFCTEUoTVVU
QVRJT05fT0JTRVJWRVJTKQpAQCAtMjMyLDcgKzIzMCw3IEBAIHN0YXRpYyB2b2lkIGVucXVldWVD
aGFyYWN0ZXJEYXRhTXV0YXRpb25SZWNvcmQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvbGRE
YXRhCiB9CiAjZW5kaWYgLy8gRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKIAotdm9pZCBDaGFy
YWN0ZXJEYXRhOjpkaXNwYXRjaE1vZGlmaWVkRXZlbnQoU3RyaW5nSW1wbCogb2xkRGF0YSkKK3Zv
aWQgQ2hhcmFjdGVyRGF0YTo6ZGlzcGF0Y2hNb2RpZmllZEV2ZW50KGNvbnN0IFN0cmluZyYgb2xk
RGF0YSkKIHsKICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAgIGVucXVldWVDaGFy
YWN0ZXJEYXRhTXV0YXRpb25SZWNvcmQodGhpcywgb2xkRGF0YSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJh
Y3RlckRhdGEuaAppbmRleCA2NjFlMTEwNjM3NzIyZDM0OGY3ZmM4NWRhNDBmNTVlMzkyNmMxMjIy
Li4xODIwZTJjZmQwNTVjM2FmZWZhNzIwYWZkNjc1NmJmZDg2ZWU4ODE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGFyYWN0ZXJEYXRhLmgKQEAgLTI0LDYgKzI0LDcgQEAKICNkZWZpbmUgQ2hhcmFjdGVyRGF0
YV9oCiAKICNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzEsNyArMzIsNyBAQCBjbGFzcyBDaGFyYWN0
ZXJEYXRhIDogcHVibGljIE5vZGUgewogcHVibGljOgogICAgIFN0cmluZyBkYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhOyB9CiAgICAgdm9pZCBzZXREYXRhKGNvbnN0IFN0cmluZyYsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2RhdGEt
Pmxlbmd0aCgpOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
Lmxlbmd0aCgpOyB9CiAgICAgU3RyaW5nIHN1YnN0cmluZ0RhdGEodW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBjb3VudCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgYXBwZW5kRGF0YShjb25z
dCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBpbnNlcnREYXRhKHVuc2lnbmVk
IG9mZnNldCwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtNDAsNyArNDEsNyBA
QCBwdWJsaWM6CiAKICAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSBjb25zdDsKIAot
ICAgIFN0cmluZ0ltcGwqIGRhdGFJbXBsKCkgeyByZXR1cm4gbV9kYXRhLmdldCgpOyB9CisgICAg
U3RyaW5nSW1wbCogZGF0YUltcGwoKSB7IHJldHVybiBtX2RhdGEuaW1wbCgpOyB9CiAKICAgICAv
LyBMaWtlIGFwcGVuZERhdGEsIGJ1dCBvcHRpbWl6ZWQgZm9yIHRoZSBwYXJzZXIgKGUuZy4sIG5v
IG11dGF0aW9uIGV2ZW50cykuCiAgICAgLy8gUmV0dXJucyBob3cgbXVjaCBjb3VsZCBiZSBhZGRl
ZCBiZWZvcmUgbGVuZ3RoIGxpbWl0IHdhcyBtZXQuCkBAIC00OSwxNSArNTAsMTkgQEAgcHVibGlj
OgogcHJvdGVjdGVkOgogICAgIENoYXJhY3RlckRhdGEoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBTdHJpbmcmIHRleHQsIENvbnN0cnVjdGlvblR5cGUgdHlwZSkKICAgICAgICAgOiBOb2RlKGRv
Y3VtZW50LCB0eXBlKQotICAgICAgICAsIG1fZGF0YSh0ZXh0LmltcGwoKSA/IHRleHQuaW1wbCgp
IDogU3RyaW5nSW1wbDo6ZW1wdHkoKSkKKyAgICAgICAgLCBtX2RhdGEoIXRleHQuaXNOdWxsKCkg
PyB0ZXh0IDogU3RyaW5nSW1wbDo6ZW1wdHkoKSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh0eXBl
ID09IENyZWF0ZUNvbW1lbnQgfHwgdHlwZSA9PSBDcmVhdGVUZXh0KTsKICAgICB9CiAKICAgICB2
aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25zdCBOb2RlUmVuZGVyaW5nQ29udGV4dCYp
OwogCi0gICAgdm9pZCBzZXREYXRhSW1wbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGltcGwpIHsg
bV9kYXRhID0gaW1wbDsgfQotICAgIHZvaWQgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KFN0cmluZ0lt
cGwqIG9sZFZhbHVlKTsKKyAgICB2b2lkIHNldERhdGFXaXRob3V0VXBkYXRlKGNvbnN0IFN0cmlu
ZyYgZGF0YSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghZGF0YS5pc051bGwoKSk7CisgICAgICAg
IG1fZGF0YSA9IGRhdGE7CisgICAgfQorICAgIHZvaWQgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KGNv
bnN0IFN0cmluZyYgb2xkVmFsdWUpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIG5v
ZGVWYWx1ZSgpIGNvbnN0OwpAQCAtNjUsMTQgKzcwLDEzIEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBib29sIGlzQ2hhcmFjdGVyRGF0YU5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAg
dmlydHVhbCBpbnQgbWF4Q2hhcmFjdGVyT2Zmc2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IG9mZnNldEluQ2hhcmFjdGVycygpIGNvbnN0OwotICAgIHZvaWQgc2V0RGF0YUFuZFVwZGF0ZShQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+LCB1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgdW5z
aWduZWQgb2xkTGVuZ3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgpOworICAgIHZvaWQgc2V0RGF0YUFu
ZFVwZGF0ZShjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgdW5z
aWduZWQgb2xkTGVuZ3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwogICAgIHZvaWQgdXBkYXRlUmVu
ZGVyZXIodW5zaWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIHVuc2lnbmVkIGxlbmd0aE9mUmVw
bGFjZWREYXRhKTsKICAgICB2b2lkIGNoZWNrQ2hhckRhdGFPcGVyYXRpb24odW5zaWduZWQgb2Zm
c2V0LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9kYXRhOwor
ICAgIFN0cmluZyBtX2RhdGE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBDaGFyYWN0ZXJEYXRhX2gKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Rl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCmluZGV4IGVkNDg0MzI0MWNlNDY2
ZTA0ZjkxOTAwNmZkZWI4NTQ3YmY4ODIxNjcuLjZiNWY3ZjdiNDViYWZjYTRlNzc3ZDdhOTQ2NDRi
NDU0MGYzZWZlOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAKQEAgLTU1LDExICs1NSwxMSBAQCBQYXNzUmVm
UHRyPFRleHQ+IFRleHQ6OnNwbGl0VGV4dCh1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4g
b2xkU3RyID0gZGF0YUltcGwoKTsKLSAgICBSZWZQdHI8VGV4dD4gbmV3VGV4dCA9IHZpcnR1YWxD
cmVhdGUob2xkU3RyLT5zdWJzdHJpbmcob2Zmc2V0KSk7Ci0gICAgc2V0RGF0YUltcGwob2xkU3Ry
LT5zdWJzdHJpbmcoMCwgb2Zmc2V0KSk7CisgICAgU3RyaW5nIG9sZFN0ciA9IGRhdGEoKTsKKyAg
ICBSZWZQdHI8VGV4dD4gbmV3VGV4dCA9IHZpcnR1YWxDcmVhdGUob2xkU3RyLnN1YnN0cmluZyhv
ZmZzZXQpKTsKKyAgICBzZXREYXRhV2l0aG91dFVwZGF0ZShvbGRTdHIuc3Vic3RyaW5nKDAsIG9m
ZnNldCkpOwogCi0gICAgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KG9sZFN0ci5nZXQoKSk7CisgICAg
ZGlzcGF0Y2hNb2RpZmllZEV2ZW50KG9sZFN0cik7CiAKICAgICBpZiAocGFyZW50Tm9kZSgpKQog
ICAgICAgICBwYXJlbnROb2RlKCktPmluc2VydEJlZm9yZShuZXdUZXh0LmdldCgpLCBuZXh0U2li
bGluZygpLCBlYyk7CkBAIC03MCw3ICs3MCw3IEBAIFBhc3NSZWZQdHI8VGV4dD4gVGV4dDo6c3Bs
aXRUZXh0KHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGRvY3Vt
ZW50KCktPnRleHROb2RlU3BsaXQodGhpcyk7CiAKICAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAg
ICAgdG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpLT5zZXRUZXh0V2l0aE9mZnNldChkYXRhSW1wbCgp
LCAwLCBvbGRTdHItPmxlbmd0aCgpKTsKKyAgICAgICAgdG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkp
LT5zZXRUZXh0V2l0aE9mZnNldChkYXRhSW1wbCgpLCAwLCBvbGRTdHIubGVuZ3RoKCkpOwogCiAg
ICAgcmV0dXJuIG5ld1RleHQucmVsZWFzZSgpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113404</attachid>
            <date>2011-11-02 17:06:15 -0700</date>
            <delta_ts>2011-11-02 18:29:15 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-71383-20111102170614.patch</filename>
            <type>text/plain</type>
            <size>12485</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTkxMTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGU5
ZmE1NGEzNTcwNGJkZmE1ZTc5ZTY4ODZjN2U2OGVjMzJjYzIxYzUuLmNhMDU0Nzc2YjNmNWIyZWQ0
YjFkNGRkOWQ0ZmNlZmU5NWZjYzA5ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEzIEBACisyMDExLTExLTAyICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJlcGxhY2UgdXNhZ2Ugb2YgU3RyaW5nSW1wbCB3aXRoIFN0cmluZyB3aGVyZSBw
b3NzaWJsZSBpbiBDaGFyYWN0ZXJEYXRhIGFuZCBUZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTM4MworCisgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgorCisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisgICAgICAgIChX
VEY6OlN0cmluZzo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSk6IEFkZGVkIG5ldyBtZXRob2QuCisK
IDIwMTEtMTEtMDIgIEFsZXhleSBTaGFiYWxpbiAgPGEuc2hhYmFsaW5AZ21haWwuY29tPgogCiAg
ICAgICAgIFRFWFRSRUwgaW4gbGliamF2YXNjcmlwdGNvcmVndGstMS4wLnNvLjAuMTEuMCBvbiB4
ODYgKG9yIGk1ODYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWI1NWU1ZGY3ODY3YmJlZjE0YWQ5YWU1NzkwZjJi
ZTEzOTJiNTUyNy4uM2Q5OTFiYTk3OGE3YjljN2E0YTYyNTNiNmEzODRhNGYyMGU0YWY3MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDExLTExLTAyICBBZGFtIEtsZWluICA8YWRhbWtA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlcGxhY2UgdXNhZ2Ugb2YgU3RyaW5nSW1wbCB3aXRo
IFN0cmluZyB3aGVyZSBwb3NzaWJsZSBpbiBDaGFyYWN0ZXJEYXRhIGFuZCBUZXh0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTM4MworCisgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJ5b3N1a2UgTml3YSwgaW4gaHR0
cDovL3dlYmtpdC5vcmcvYi83MDg2MiwgYXNrZWQgbWUgdG8gcmVwbGFjZSB1c2FnZXMKKyAgICAg
ICAgb2YgU3RyaW5nIHdpdGggU3RyaW5nSW1wbC4gSSd2ZSBkb25lIG1vcmUgdGhhbiB3aGF0IGhl
IGFza2VkIGluIHRoaXMKKyAgICAgICAgcGF0Y2gsIHRoZSBiaWdnZXN0IGNoYW5nZSBiZWluZyB0
aGF0IENoYXJhY3RlckRhdGEgbm93IGhvbGRzIGEgU3RyaW5nCisgICAgICAgIGluc3RlYWQgb2Yg
YSBSZWZQdHI8U3RyaW5nSW1wbD4uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhcyB0aGlzIHNo
b3VsZCBoYXZlIG5vIGVmZmVjdCBvbiBiZWhhdmlvci4KKworICAgICAgICAqIGRvbS9DaGFyYWN0
ZXJEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnNldERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c3Vic3RyaW5nRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpwYXJzZXJBcHBlbmREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNoYXJhY3RlckRhdGE6OmFwcGVuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hh
cmFjdGVyRGF0YTo6aW5zZXJ0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRh
OjpkZWxldGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnJlcGxhY2VE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OmNvbnRhaW5zT25seVdoaXRl
c3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c2V0RGF0YUFuZFVwZGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjp1cGRhdGVSZW5kZXJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1vZGlmaWVkRXZlbnQpOgor
ICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0
ZXJEYXRhOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6ZGF0YUlt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6Q2hhcmFjdGVyRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpzZXREYXRhV2l0aG91dFVwZGF0ZSk6Cisg
ICAgICAgICogZG9tL1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dDo6c3BsaXRUZXh0
KToKKwogMjAxMS0xMS0wMiAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgSW5maW5pdGUgcmVjdXJzaW9uIGluIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVy
OjptYXJrQWxsQ2xpZW50c0ZvckludmFsaWRhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi90ZXh0L1dURlN0cmluZy5oCmluZGV4IDc4NzIxZDQ4NzY4MGQwODExOTUzYzg2NTg1MmVjM2I1
ZmRiNDViMWUuLmE4ZmQ2OTRhYmRlZjlmODdjMDVmNTg2MWZlZjlhMTRhMzIyNGI4ZTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmgKQEAgLTMyMyw2ICszMjMs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNvbnRhaW5zT25seUFTQ0lJKCkgY29uc3QgeyByZXR1
cm4gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCkpOyB9CiAgICAg
Ym9vbCBjb250YWluc09ubHlMYXRpbjEoKSBjb25zdCB7IHJldHVybiBjaGFyYWN0ZXJzQXJlQWxs
TGF0aW4xKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCkpOyB9CisgICAgYm9vbCBjb250YWluc09ubHlX
aGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gIW1faW1wbCB8fCBtX2ltcGwtPmNvbnRhaW5zT25s
eVdoaXRlc3BhY2UoKTsgfQogCiAgICAgLy8gSGFzaCB0YWJsZSBkZWxldGVkIHZhbHVlcywgd2hp
Y2ggYXJlIG9ubHkgY29uc3RydWN0ZWQgYW5kIG5ldmVyIGNvcGllZCBvciBkZXN0cm95ZWQuCiAg
ICAgU3RyaW5nKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX2ltcGwoV1RGOjpI
YXNoVGFibGVEZWxldGVkVmFsdWUpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0NoYXJhY3RlckRhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3Bw
CmluZGV4IDVkOWMxYjdmNzJmMzk5YWQ2OTc5ODkzMGM1MWFlYTlhOTVjZmRkMmMuLjNhNWZkNmZl
ZGIwOWJhZjIyNGM0NWI0ZTU0NDY1ZTk2NWI0OGNhNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFj
dGVyRGF0YS5jcHAKQEAgLTM5LDEzICszOSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZv
aWQgQ2hhcmFjdGVyRGF0YTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIGRhdGEsIEV4Y2VwdGlvbkNv
ZGUmKQogewotICAgIFN0cmluZ0ltcGwqIGRhdGFJbXBsID0gZGF0YS5pbXBsKCkgPyBkYXRhLmlt
cGwoKSA6IFN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgaWYgKGVxdWFsKG1fZGF0YS5nZXQoKSwg
ZGF0YUltcGwpKQorICAgIGNvbnN0IFN0cmluZyYgbm9uTnVsbERhdGEgPSAhZGF0YS5pc051bGwo
KSA/IGRhdGEgOiBlbXB0eVN0cmluZygpOworICAgIGlmIChtX2RhdGEgPT0gbm9uTnVsbERhdGEp
CiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGxlbmd0aCgpOwog
Ci0gICAgc2V0RGF0YUFuZFVwZGF0ZShkYXRhSW1wbCwgMCwgb2xkTGVuZ3RoLCBkYXRhSW1wbC0+
bGVuZ3RoKCkpOworICAgIHNldERhdGFBbmRVcGRhdGUobm9uTnVsbERhdGEsIDAsIG9sZExlbmd0
aCwgbm9uTnVsbERhdGEubGVuZ3RoKCkpOwogICAgIGRvY3VtZW50KCktPnRleHRSZW1vdmVkKHRo
aXMsIDAsIG9sZExlbmd0aCk7CiB9CiAKQEAgLTU1LDEyICs1NSwxMiBAQCBTdHJpbmcgQ2hhcmFj
dGVyRGF0YTo6c3Vic3RyaW5nRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBF
eGNlcHRpb25DbwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAg
cmV0dXJuIG1fZGF0YS0+c3Vic3RyaW5nKG9mZnNldCwgY291bnQpOworICAgIHJldHVybiBtX2Rh
dGEuc3Vic3RyaW5nKG9mZnNldCwgY291bnQpOwogfQogCiB1bnNpZ25lZCBDaGFyYWN0ZXJEYXRh
OjpwYXJzZXJBcHBlbmREYXRhKGNvbnN0IFVDaGFyKiBkYXRhLCB1bnNpZ25lZCBkYXRhTGVuZ3Ro
LCB1bnNpZ25lZCBsZW5ndGhMaW1pdCkKIHsKLSAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2Rh
dGEtPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG1fZGF0YS5sZW5ndGgoKTsK
IAogICAgIHVuc2lnbmVkIGVuZCA9IG1pbihkYXRhTGVuZ3RoLCBsZW5ndGhMaW1pdCAtIG9sZExl
bmd0aCk7CiAKQEAgLTc3LDkgKzc3LDcgQEAgdW5zaWduZWQgQ2hhcmFjdGVyRGF0YTo6cGFyc2Vy
QXBwZW5kRGF0YShjb25zdCBVQ2hhciogZGF0YSwgdW5zaWduZWQgZGF0YUxlbmd0aCwKICAgICBp
ZiAoIWVuZCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBTdHJpbmcgbmV3U3RyID0gbV9kYXRh
OwotICAgIG5ld1N0ci5hcHBlbmQoZGF0YSwgZW5kKTsKLSAgICBtX2RhdGEgPSBuZXdTdHIuaW1w
bCgpOworICAgIG1fZGF0YS5hcHBlbmQoZGF0YSwgZW5kKTsKIAogICAgIHVwZGF0ZVJlbmRlcmVy
KG9sZExlbmd0aCwgMCk7CiAgICAgLy8gV2UgZG9uJ3QgY2FsbCBkaXNwYXRjaE1vZGlmaWVkRXZl
bnQgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlCkBAIC05NSw3ICs5Myw3IEBAIHZvaWQg
Q2hhcmFjdGVyRGF0YTo6YXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIGRhdGEsIEV4Y2VwdGlvbkNv
ZGUmKQogICAgIFN0cmluZyBuZXdTdHIgPSBtX2RhdGE7CiAgICAgbmV3U3RyLmFwcGVuZChkYXRh
KTsKIAotICAgIHNldERhdGFBbmRVcGRhdGUobmV3U3RyLmltcGwoKSwgbV9kYXRhLT5sZW5ndGgo
KSwgMCwgZGF0YS5sZW5ndGgoKSk7CisgICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIsIG1fZGF0
YS5sZW5ndGgoKSwgMCwgZGF0YS5sZW5ndGgoKSk7CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIHdl
IGNhbGwgdGV4dEluc2VydGVkIGhlcmU/CiB9CkBAIC0xMDksNyArMTA3LDcgQEAgdm9pZCBDaGFy
YWN0ZXJEYXRhOjppbnNlcnREYXRhKHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiBkYXRh
LCBFeGNlcHRpb25Db2QKICAgICBTdHJpbmcgbmV3U3RyID0gbV9kYXRhOwogICAgIG5ld1N0ci5p
bnNlcnQoZGF0YSwgb2Zmc2V0KTsKIAotICAgIHNldERhdGFBbmRVcGRhdGUobmV3U3RyLmltcGwo
KSwgb2Zmc2V0LCAwLCBkYXRhLmxlbmd0aCgpKTsKKyAgICBzZXREYXRhQW5kVXBkYXRlKG5ld1N0
ciwgb2Zmc2V0LCAwLCBkYXRhLmxlbmd0aCgpKTsKIAogICAgIGRvY3VtZW50KCktPnRleHRJbnNl
cnRlZCh0aGlzLCBvZmZzZXQsIGRhdGEubGVuZ3RoKCkpOwogfQpAQCAtMTI5LDcgKzEyNyw3IEBA
IHZvaWQgQ2hhcmFjdGVyRGF0YTo6ZGVsZXRlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGNvdW50LCBFeGNlcHRpb25Db2RlJiBlCiAgICAgU3RyaW5nIG5ld1N0ciA9IG1fZGF0YTsKICAg
ICBuZXdTdHIucmVtb3ZlKG9mZnNldCwgcmVhbENvdW50KTsKIAotICAgIHNldERhdGFBbmRVcGRh
dGUobmV3U3RyLmltcGwoKSwgb2Zmc2V0LCBjb3VudCwgMCk7CisgICAgc2V0RGF0YUFuZFVwZGF0
ZShuZXdTdHIsIG9mZnNldCwgY291bnQsIDApOwogCiAgICAgZG9jdW1lbnQoKS0+dGV4dFJlbW92
ZWQodGhpcywgb2Zmc2V0LCByZWFsQ291bnQpOwogfQpAQCAtMTUwLDcgKzE0OCw3IEBAIHZvaWQg
Q2hhcmFjdGVyRGF0YTo6cmVwbGFjZURhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3Vu
dCwgY29uc3QgU3RyaW5nJiBkCiAgICAgbmV3U3RyLnJlbW92ZShvZmZzZXQsIHJlYWxDb3VudCk7
CiAgICAgbmV3U3RyLmluc2VydChkYXRhLCBvZmZzZXQpOwogCi0gICAgc2V0RGF0YUFuZFVwZGF0
ZShuZXdTdHIuaW1wbCgpLCBvZmZzZXQsIGNvdW50LCBkYXRhLmxlbmd0aCgpKTsKKyAgICBzZXRE
YXRhQW5kVXBkYXRlKG5ld1N0ciwgb2Zmc2V0LCBjb3VudCwgZGF0YS5sZW5ndGgoKSk7CiAKICAg
ICAvLyB1cGRhdGUgdGhlIG1hcmtlcnMgZm9yIHNwZWxsIGNoZWNraW5nIGFuZCBncmFtbWFyIGNo
ZWNraW5nCiAgICAgZG9jdW1lbnQoKS0+dGV4dFJlbW92ZWQodGhpcywgb2Zmc2V0LCByZWFsQ291
bnQpOwpAQCAtMTY0LDcgKzE2Miw3IEBAIFN0cmluZyBDaGFyYWN0ZXJEYXRhOjpub2RlVmFsdWUo
KSBjb25zdAogCiBib29sIENoYXJhY3RlckRhdGE6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSBj
b25zdAogewotICAgIHJldHVybiAhbV9kYXRhIHx8IG1fZGF0YS0+Y29udGFpbnNPbmx5V2hpdGVz
cGFjZSgpOworICAgIHJldHVybiBtX2RhdGEuY29udGFpbnNPbmx5V2hpdGVzcGFjZSgpOwogfQog
CiB2b2lkIENoYXJhY3RlckRhdGE6OnNldE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmIG5vZGVWYWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xNzIsMTQgKzE3MCwxNCBAQCB2b2lkIENoYXJhY3Rl
ckRhdGE6OnNldE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmIG5vZGVWYWx1ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiAgICAgc2V0RGF0YShub2RlVmFsdWUsIGVjKTsKIH0KIAotdm9pZCBDaGFyYWN0ZXJE
YXRhOjpzZXREYXRhQW5kVXBkYXRlKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gbmV3RGF0YSwgdW5z
aWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIHVuc2lnbmVkIG9sZExlbmd0aCwgdW5zaWduZWQg
bmV3TGVuZ3RoKQordm9pZCBDaGFyYWN0ZXJEYXRhOjpzZXREYXRhQW5kVXBkYXRlKGNvbnN0IFN0
cmluZyYgbmV3RGF0YSwgdW5zaWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIHVuc2lnbmVkIG9s
ZExlbmd0aCwgdW5zaWduZWQgbmV3TGVuZ3RoKQogewogICAgIGlmIChkb2N1bWVudCgpLT5mcmFt
ZSgpKQogICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+dGV4dFdpbGxC
ZVJlcGxhY2VkKHRoaXMsIG9mZnNldE9mUmVwbGFjZWREYXRhLCBvbGRMZW5ndGgsIG5ld0xlbmd0
aCk7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG9sZERhdGEgPSBtX2RhdGE7CisgICAgU3RyaW5n
IG9sZERhdGEgPSBtX2RhdGE7CiAgICAgbV9kYXRhID0gbmV3RGF0YTsKICAgICB1cGRhdGVSZW5k
ZXJlcihvZmZzZXRPZlJlcGxhY2VkRGF0YSwgb2xkTGVuZ3RoKTsKLSAgICBkaXNwYXRjaE1vZGlm
aWVkRXZlbnQob2xkRGF0YS5nZXQoKSk7CisgICAgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KG9sZERh
dGEpOwogfQogCiB2b2lkIENoYXJhY3RlckRhdGE6OnVwZGF0ZVJlbmRlcmVyKHVuc2lnbmVkIG9m
ZnNldE9mUmVwbGFjZWREYXRhLCB1bnNpZ25lZCBsZW5ndGhPZlJlcGxhY2VkRGF0YSkKQEAgLTE4
Nyw3ICsxODUsNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnVwZGF0ZVJlbmRlcmVyKHVuc2lnbmVk
IG9mZnNldE9mUmVwbGFjZWREYXRhLCB1bnNpZ25lZCBsZW5ndAogICAgIGlmICgoIXJlbmRlcmVy
KCkgfHwgIXJlbmRlcmVySXNOZWVkZWQoTm9kZVJlbmRlcmluZ0NvbnRleHQodGhpcywgcmVuZGVy
ZXIoKS0+c3R5bGUoKSkpKSAmJiBhdHRhY2hlZCgpKQogICAgICAgICByZWF0dGFjaCgpOwogICAg
IGVsc2UgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKS0+
c2V0VGV4dFdpdGhPZmZzZXQobV9kYXRhLCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgbGVuZ3RoT2ZS
ZXBsYWNlZERhdGEpOworICAgICAgICB0b1JlbmRlclRleHQocmVuZGVyZXIoKSktPnNldFRleHRX
aXRoT2Zmc2V0KG1fZGF0YS5pbXBsKCksIG9mZnNldE9mUmVwbGFjZWREYXRhLCBsZW5ndGhPZlJl
cGxhY2VkRGF0YSk7CiB9CiAKICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQpAQCAtMjMy
LDcgKzIzMCw3IEBAIHN0YXRpYyB2b2lkIGVucXVldWVDaGFyYWN0ZXJEYXRhTXV0YXRpb25SZWNv
cmQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvbGREYXRhCiB9CiAjZW5kaWYgLy8gRU5BQkxF
KE1VVEFUSU9OX09CU0VSVkVSUykKIAotdm9pZCBDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1vZGlm
aWVkRXZlbnQoU3RyaW5nSW1wbCogb2xkRGF0YSkKK3ZvaWQgQ2hhcmFjdGVyRGF0YTo6ZGlzcGF0
Y2hNb2RpZmllZEV2ZW50KGNvbnN0IFN0cmluZyYgb2xkRGF0YSkKIHsKICNpZiBFTkFCTEUoTVVU
QVRJT05fT0JTRVJWRVJTKQogICAgIGVucXVldWVDaGFyYWN0ZXJEYXRhTXV0YXRpb25SZWNvcmQo
dGhpcywgb2xkRGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVy
RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaAppbmRleCA2NjFlMTEw
NjM3NzIyZDM0OGY3ZmM4NWRhNDBmNTVlMzkyNmMxMjIyLi5mMmFhZjgxNTM0OWQ0ZWNmMWRhNmRh
YmQyOWIzZTdkYjVlYzg5ZjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFj
dGVyRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgKQEAgLTI0
LDYgKzI0LDcgQEAKICNkZWZpbmUgQ2hhcmFjdGVyRGF0YV9oCiAKICNpbmNsdWRlICJOb2RlLmgi
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMzEsNyArMzIsNyBAQCBjbGFzcyBDaGFyYWN0ZXJEYXRhIDogcHVibGljIE5vZGUgewog
cHVibGljOgogICAgIFN0cmluZyBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAgICAg
dm9pZCBzZXREYXRhKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPmxlbmd0aCgpOyB9CisgICAgdW5zaWdu
ZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmxlbmd0aCgpOyB9CiAgICAgU3RyaW5n
IHN1YnN0cmluZ0RhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgRXhjZXB0aW9u
Q29kZSYpOwogICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdm9pZCBpbnNlcnREYXRhKHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiwg
RXhjZXB0aW9uQ29kZSYpOwpAQCAtNDAsNyArNDEsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNv
bnRhaW5zT25seVdoaXRlc3BhY2UoKSBjb25zdDsKIAotICAgIFN0cmluZ0ltcGwqIGRhdGFJbXBs
KCkgeyByZXR1cm4gbV9kYXRhLmdldCgpOyB9CisgICAgU3RyaW5nSW1wbCogZGF0YUltcGwoKSB7
IHJldHVybiBtX2RhdGEuaW1wbCgpOyB9CiAKICAgICAvLyBMaWtlIGFwcGVuZERhdGEsIGJ1dCBv
cHRpbWl6ZWQgZm9yIHRoZSBwYXJzZXIgKGUuZy4sIG5vIG11dGF0aW9uIGV2ZW50cykuCiAgICAg
Ly8gUmV0dXJucyBob3cgbXVjaCBjb3VsZCBiZSBhZGRlZCBiZWZvcmUgbGVuZ3RoIGxpbWl0IHdh
cyBtZXQuCkBAIC00OSwxNSArNTAsMTkgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIENoYXJh
Y3RlckRhdGEoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIENvbnN0cnVj
dGlvblR5cGUgdHlwZSkKICAgICAgICAgOiBOb2RlKGRvY3VtZW50LCB0eXBlKQotICAgICAgICAs
IG1fZGF0YSh0ZXh0LmltcGwoKSA/IHRleHQuaW1wbCgpIDogU3RyaW5nSW1wbDo6ZW1wdHkoKSkK
KyAgICAgICAgLCBtX2RhdGEoIXRleHQuaXNOdWxsKCkgPyB0ZXh0IDogZW1wdHlTdHJpbmcoKSkK
ICAgICB7CiAgICAgICAgIEFTU0VSVCh0eXBlID09IENyZWF0ZUNvbW1lbnQgfHwgdHlwZSA9PSBD
cmVhdGVUZXh0KTsKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChj
b25zdCBOb2RlUmVuZGVyaW5nQ29udGV4dCYpOwogCi0gICAgdm9pZCBzZXREYXRhSW1wbChQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IGltcGwpIHsgbV9kYXRhID0gaW1wbDsgfQotICAgIHZvaWQgZGlz
cGF0Y2hNb2RpZmllZEV2ZW50KFN0cmluZ0ltcGwqIG9sZFZhbHVlKTsKKyAgICB2b2lkIHNldERh
dGFXaXRob3V0VXBkYXRlKGNvbnN0IFN0cmluZyYgZGF0YSkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghZGF0YS5pc051bGwoKSk7CisgICAgICAgIG1fZGF0YSA9IGRhdGE7CisgICAgfQorICAgIHZv
aWQgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KGNvbnN0IFN0cmluZyYgb2xkVmFsdWUpOwogCiBwcml2
YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVWYWx1ZSgpIGNvbnN0OwpAQCAtNjUsMTQgKzcw
LDEzIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzQ2hhcmFjdGVyRGF0YU5vZGUoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBpbnQgbWF4Q2hhcmFjdGVyT2Zmc2V0
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIG9mZnNldEluQ2hhcmFjdGVycygpIGNvbnN0Owot
ICAgIHZvaWQgc2V0RGF0YUFuZFVwZGF0ZShQYXNzUmVmUHRyPFN0cmluZ0ltcGw+LCB1bnNpZ25l
ZCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgdW5zaWduZWQgb2xkTGVuZ3RoLCB1bnNpZ25lZCBuZXdM
ZW5ndGgpOworICAgIHZvaWQgc2V0RGF0YUFuZFVwZGF0ZShjb25zdCBTdHJpbmcmLCB1bnNpZ25l
ZCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgdW5zaWduZWQgb2xkTGVuZ3RoLCB1bnNpZ25lZCBuZXdM
ZW5ndGgpOwogICAgIHZvaWQgdXBkYXRlUmVuZGVyZXIodW5zaWduZWQgb2Zmc2V0T2ZSZXBsYWNl
ZERhdGEsIHVuc2lnbmVkIGxlbmd0aE9mUmVwbGFjZWREYXRhKTsKICAgICB2b2lkIGNoZWNrQ2hh
ckRhdGFPcGVyYXRpb24odW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gbV9kYXRhOworICAgIFN0cmluZyBtX2RhdGE7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBDaGFyYWN0ZXJEYXRhX2gKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Rl
eHQuY3BwCmluZGV4IGVkNDg0MzI0MWNlNDY2ZTA0ZjkxOTAwNmZkZWI4NTQ3YmY4ODIxNjcuLjZi
NWY3ZjdiNDViYWZjYTRlNzc3ZDdhOTQ2NDRiNDU0MGYzZWZlOGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAK
QEAgLTU1LDExICs1NSwxMSBAQCBQYXNzUmVmUHRyPFRleHQ+IFRleHQ6OnNwbGl0VGV4dCh1bnNp
Z25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gb2xkU3RyID0gZGF0YUltcGwoKTsKLSAgICBSZWZQ
dHI8VGV4dD4gbmV3VGV4dCA9IHZpcnR1YWxDcmVhdGUob2xkU3RyLT5zdWJzdHJpbmcob2Zmc2V0
KSk7Ci0gICAgc2V0RGF0YUltcGwob2xkU3RyLT5zdWJzdHJpbmcoMCwgb2Zmc2V0KSk7CisgICAg
U3RyaW5nIG9sZFN0ciA9IGRhdGEoKTsKKyAgICBSZWZQdHI8VGV4dD4gbmV3VGV4dCA9IHZpcnR1
YWxDcmVhdGUob2xkU3RyLnN1YnN0cmluZyhvZmZzZXQpKTsKKyAgICBzZXREYXRhV2l0aG91dFVw
ZGF0ZShvbGRTdHIuc3Vic3RyaW5nKDAsIG9mZnNldCkpOwogCi0gICAgZGlzcGF0Y2hNb2RpZmll
ZEV2ZW50KG9sZFN0ci5nZXQoKSk7CisgICAgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KG9sZFN0cik7
CiAKICAgICBpZiAocGFyZW50Tm9kZSgpKQogICAgICAgICBwYXJlbnROb2RlKCktPmluc2VydEJl
Zm9yZShuZXdUZXh0LmdldCgpLCBuZXh0U2libGluZygpLCBlYyk7CkBAIC03MCw3ICs3MCw3IEBA
IFBhc3NSZWZQdHI8VGV4dD4gVGV4dDo6c3BsaXRUZXh0KHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0
aW9uQ29kZSYgZWMpCiAgICAgICAgIGRvY3VtZW50KCktPnRleHROb2RlU3BsaXQodGhpcyk7CiAK
ICAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgdG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpLT5z
ZXRUZXh0V2l0aE9mZnNldChkYXRhSW1wbCgpLCAwLCBvbGRTdHItPmxlbmd0aCgpKTsKKyAgICAg
ICAgdG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpLT5zZXRUZXh0V2l0aE9mZnNldChkYXRhSW1wbCgp
LCAwLCBvbGRTdHIubGVuZ3RoKCkpOwogCiAgICAgcmV0dXJuIG5ld1RleHQucmVsZWFzZSgpOwog
fQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>