<?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>94882</bug_id>
          
          <creation_ts>2012-08-23 17:50:57 -0700</creation_ts>
          <short_desc>[V8] V8DOMWindowShell should use ScopedPersistent</short_desc>
          <delta_ts>2012-08-23 22:59:22 -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 Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>703606</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-23 17:50:57 -0700</bug_when>
    <thetext>[V8] V8DOMWindowShell should use ScopedPersistent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703608</commentid>
    <comment_count>1</comment_count>
      <attachid>160297</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-23 17:51:23 -0700</bug_when>
    <thetext>Created attachment 160297
Work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703722</commentid>
    <comment_count>2</comment_count>
      <attachid>160323</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-23 21:31:38 -0700</bug_when>
    <thetext>Created attachment 160323
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703725</commentid>
    <comment_count>3</comment_count>
      <attachid>160323</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-23 21:44:15 -0700</bug_when>
    <thetext>Comment on attachment 160323
Patch

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

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:200
&gt; +    ASSERT(m_context.get().IsEmpty() || !m_global.get().IsEmpty());

Shall we implement ScopedContext::isEmpty() to avoid m_context.get().IsEmpty() repeatedly?

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:-201
&gt; -#ifndef NDEBUG
&gt; -        V8GCController::unregisterGlobalHandle(this, m_global);
&gt; -#endif

Are you intending to remove this?

&gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:464
&gt; +    m_context.get()-&gt;Global()-&gt;ForceSet(v8::String::New(&quot;document&quot;), documentWrapper, static_cast&lt;v8::PropertyAttribute&gt;(v8::ReadOnly | v8::DontDelete));

Shall we implement ScopedPersistent::operator-&gt; so that we can write this like m_context-&gt;Global() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703729</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-23 21:51:55 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 160323 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=160323&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:200
&gt; &gt; +    ASSERT(m_context.get().IsEmpty() || !m_global.get().IsEmpty());
&gt; 
&gt; Shall we implement ScopedContext::isEmpty() to avoid m_context.get().IsEmpty() repeatedly?

Sure.

&gt; &gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:-201
&gt; &gt; -#ifndef NDEBUG
&gt; &gt; -        V8GCController::unregisterGlobalHandle(this, m_global);
&gt; &gt; -#endif
&gt; 
&gt; Are you intending to remove this?

Yes.  I&apos;ve never found the registerGlobalHandle thing useful.  We can add it to ScopedPersistent if we want.

&gt; &gt; Source/WebCore/bindings/v8/V8DOMWindowShell.cpp:464
&gt; &gt; +    m_context.get()-&gt;Global()-&gt;ForceSet(v8::String::New(&quot;document&quot;), documentWrapper, static_cast&lt;v8::PropertyAttribute&gt;(v8::ReadOnly | v8::DontDelete));
&gt; 
&gt; Shall we implement ScopedPersistent::operator-&gt; so that we can write this like m_context-&gt;Global() ?

Sure.

Do you mind if I do those things in a followup patch?  I&apos;ll deploy them to all the uses of ScopedPersistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703730</commentid>
    <comment_count>5</comment_count>
      <attachid>160323</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-23 21:53:05 -0700</bug_when>
    <thetext>Comment on attachment 160323
Patch

&gt; Do you mind if I do those things in a followup patch?

Sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703774</commentid>
    <comment_count>6</comment_count>
      <attachid>160323</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-23 22:59:18 -0700</bug_when>
    <thetext>Comment on attachment 160323
Patch

Clearing flags on attachment: 160323

Committed r126544: &lt;http://trac.webkit.org/changeset/126544&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703775</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-23 22:59:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160297</attachid>
            <date>2012-08-23 17:51:23 -0700</date>
            <delta_ts>2012-08-23 21:31:35 -0700</delta_ts>
            <desc>Work in progress</desc>
            <filename>bug-94882-20120823175120.patch</filename>
            <type>text/plain</type>
            <size>20426</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2NDg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2Q0ZDZhMjYxYzlhNDI0
NDViNTQyNDYyYWM1NjU2NDQ5ZTBlZDA4ZS4uZWI0MjhjYzU0YjY3ZjNiZjg5NGQyNTMxY2NkYTg5
ZTM1MzUwMDY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQzIEBACiAyMDEyLTA4LTIzICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKKyAgICAgICAgW1Y4XSBWOERPTVdpbmRvd1No
ZWxsIHNob3VsZCB1c2UgU2NvcGVkUGVyc2lzdGVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ4ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFu
Z2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBk
ZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMh
KS4KKworICAgICAgICAqIGJpbmRpbmdzL3Y4L1Njb3BlZFBlcnNpc3RlbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjb3BlZFBlcnNpc3RlbnQ6OmFkb3B0KToKKyAgICAgICAgKFNjb3BlZFBlcnNp
c3RlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZVY4SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjppc0NvbnRleHRJbml0aWFsaXpl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpkaXNwb3NlQ29udGV4dEhh
bmRsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6ZGVzdHJveUdsb2Jh
bCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpjbGVhckZvckNsb3NlKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmNsZWFyRm9yTmF2aWdhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjppbml0Q29udGV4dElmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OnNldENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6dXBkYXRlRG9jdW1lbnRXcmFwcGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmNsZWFyRG9jdW1lbnRXcmFwcGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OnVwZGF0ZURvY3VtZW50V3Jh
cHBlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmNsZWFyRG9j
dW1lbnRXcmFwcGVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6
c2V0U2VjdXJpdHlUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjp1
cGRhdGVEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpnZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtQWRkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtUmVtb3ZlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVTZWN1cml0eU9yaWdpbik6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5k
b3dTaGVsbDo6Y29udGV4dCk6CisgICAgICAgIChWOERPTVdpbmRvd1NoZWxsKToKKworMjAxMi0w
OC0yMyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCiAgICAgICAgIFtWOF0gVjhB
YnN0cmFjdEV2ZW50TGlzdGVuZXIgcmUtaW1wbGVtZW50cyBTY29wZWRQZXJzaXN0ZW50IGJ5IGhh
bmQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0ODcz
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njb3BlZFBlcnNpc3Rl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njb3BlZFBlcnNpc3RlbnQuaAppbmRl
eCBkYjVkNmVkNmY4MzNkMDQ3ODc0ZGYwNmZlNmQ2ZDgxNjE5MjVjZmUzLi5mNWQ2OTZjY2MzNmE2
NWI2NTEyYmM1OTU4NzU1MWIyZGM0ZTZmOWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY29wZWRQZXJzaXN0ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NvcGVkUGVyc2lzdGVudC5oCkBAIC02MCw2ICs2MCwxMiBAQCBwdWJsaWM6CiAgICAg
ICAgIG1faGFuZGxlID0gdjg6OlBlcnNpc3RlbnQ8VD46Ok5ldyhoYW5kbGUpOwogICAgIH0KIAor
ICAgIHZvaWQgYWRvcHQodjg6OlBlcnNpc3RlbnQ8VD4gaGFuZGxlKQorICAgIHsKKyAgICAgICAg
Y2xlYXIoKTsKKyAgICAgICAgbV9oYW5kbGUgPSBoYW5kbGU7CisgICAgfQorCiAgICAgLy8gTm90
ZTogVGhpcyBpcyBjbGVhciBpbiB0aGUgT3duUHRyIHNlbnNlLCBub3QgdGhlIHY4OjpIYW5kbGUg
c2Vuc2UuCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAppbmRleCAzZTZhNzhlMjRmY2VkNzllM2NkMzY3
NWY1NjhhNzdkMjE2NDFjNTRjLi4wN2JhMWMwY2E2MzczMzdlNTNkM2ExZDNiNTZlMjY4MWQ5ZmM1
ZGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1No
ZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxs
LmNwcApAQCAtMTU4LDYgKzE1OCwzMSBAQCBzdGF0aWMgdm9pZCByZXBvcnRVbnNhZmVKYXZhU2Ny
aXB0QWNjZXNzKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBob3N0LCB2ODo6QWNjZXNzVAogICAgIHRh
cmdldFdpbmRvdy0+cHJpbnRFcnJvck1lc3NhZ2UodGFyZ2V0V2luZG93LT5jcm9zc0RvbWFpbkFj
Y2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coQmluZGluZ1N0YXRlOjppbnN0YW5jZSgp
KSkpOwogfQogCitzdGF0aWMgdm9pZCBpbml0aWFsaXplVjhJZk5lZWRlZCgpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFs
c2U7CisgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisgICAgaW5pdGlhbGl6
ZWQgPSB0cnVlOworCisgICAgdjg6OlY4OjpJZ25vcmVPdXRPZk1lbW9yeUV4Y2VwdGlvbigpOwor
ICAgIHY4OjpWODo6U2V0RmF0YWxFcnJvckhhbmRsZXIocmVwb3J0RmF0YWxFcnJvckluVjgpOwor
ICAgIHY4OjpWODo6U2V0R2xvYmFsR0NQcm9sb2d1ZUNhbGxiYWNrKCZWOEdDQ29udHJvbGxlcjo6
Z2NQcm9sb2d1ZSk7CisgICAgdjg6OlY4OjpTZXRHbG9iYWxHQ0VwaWxvZ3VlQ2FsbGJhY2soJlY4
R0NDb250cm9sbGVyOjpnY0VwaWxvZ3VlKTsKKyAgICB2ODo6Vjg6OkFkZE1lc3NhZ2VMaXN0ZW5l
cigmdjhVbmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIpOworICAgIHY4OjpWODo6U2V0RmFpbGVkQWNj
ZXNzQ2hlY2tDYWxsYmFja0Z1bmN0aW9uKHJlcG9ydFVuc2FmZUphdmFTY3JpcHRBY2Nlc3MpOwor
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIFNjcmlwdFByb2ZpbGVyOjppbml0
aWFsaXplKCk7CisjZW5kaWYKKyAgICBWOFBlcklzb2xhdGVEYXRhOjplbnN1cmVJbml0aWFsaXpl
ZCh2ODo6SXNvbGF0ZTo6R2V0Q3VycmVudCgpKTsKKworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhl
IGZvbGxvd2luZyAyIGxpbmVzIHdoZW4gVjggZGVmYXVsdCBoYXMgY2hhbmdlZC4KKyAgICBjb25z
dCBjaGFyIGVzNVJlYWRvbmx5RmxhZ1tdID0gIi0tZXM1X3JlYWRvbmx5IjsKKyAgICB2ODo6Vjg6
OlNldEZsYWdzRnJvbVN0cmluZyhlczVSZWFkb25seUZsYWcsIHNpemVvZihlczVSZWFkb25seUZs
YWcpKTsKK30KKwogUGFzc1JlZlB0cjxWOERPTVdpbmRvd1NoZWxsPiBWOERPTVdpbmRvd1NoZWxs
OjpjcmVhdGUoRnJhbWUqIGZyYW1lKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhET01X
aW5kb3dTaGVsbChmcmFtZSkpOwpAQCAtMTcyLDE2ICsxOTcsMTUgQEAgYm9vbCBWOERPTVdpbmRv
d1NoZWxsOjppc0NvbnRleHRJbml0aWFsaXplZCgpCiB7CiAgICAgLy8gbV9jb250ZXh0LCBtX2ds
b2JhbCwgYW5kIG1fd3JhcHBlckJvaWxlcnBsYXRlcyBzaG91bGQKICAgICAvLyBhbGwgYmUgbm9u
LWVtcHR5IGlmIGlmIG1fY29udGV4dCBpcyBub24tZW1wdHkuCi0gICAgQVNTRVJUKG1fY29udGV4
dC5Jc0VtcHR5KCkgfHwgIW1fZ2xvYmFsLklzRW1wdHkoKSk7Ci0gICAgcmV0dXJuICFtX2NvbnRl
eHQuSXNFbXB0eSgpOworICAgIEFTU0VSVChtX2NvbnRleHQuZ2V0KCkuSXNFbXB0eSgpIHx8ICFt
X2dsb2JhbC5nZXQoKS5Jc0VtcHR5KCkpOworICAgIHJldHVybiAhbV9jb250ZXh0LmdldCgpLklz
RW1wdHkoKTsKIH0KIAogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkaXNwb3NlQ29udGV4dEhhbmRs
ZXMoKQogewotICAgIGlmICghbV9jb250ZXh0LklzRW1wdHkoKSkgewotICAgICAgICBtX2ZyYW1l
LT5sb2FkZXIoKS0+Y2xpZW50KCktPndpbGxSZWxlYXNlU2NyaXB0Q29udGV4dChtX2NvbnRleHQs
IDApOwotICAgICAgICBtX2NvbnRleHQuRGlzcG9zZSgpOwotICAgICAgICBtX2NvbnRleHQuQ2xl
YXIoKTsKKyAgICBpZiAoIW1fY29udGV4dC5nZXQoKS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgbV9m
cmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT53aWxsUmVsZWFzZVNjcmlwdENvbnRleHQobV9jb250
ZXh0LmdldCgpLCAwKTsKKyAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CiAKICAgICAgICAgLy8g
SXQncyBsaWtlbHkgdGhhdCBkaXNwb3NpbmcgdGhlIGNvbnRleHQgaGFzIGNyZWF0ZWQgYSBsb3Qg
b2YKICAgICAgICAgLy8gZ2FyYmFnZS4gTm90aWZ5IFY4IGFib3V0IHRoaXMgc28gaXQnbGwgaGF2
ZSBhIGNoYW5jZSBvZiBjbGVhbmluZwpAQCAtMTk1LDQ4ICsyMTksNDAgQEAgdm9pZCBWOERPTVdp
bmRvd1NoZWxsOjpkaXNwb3NlQ29udGV4dEhhbmRsZXMoKQogCiB2b2lkIFY4RE9NV2luZG93U2hl
bGw6OmRlc3Ryb3lHbG9iYWwoKQogewotICAgIGlmICghbV9nbG9iYWwuSXNFbXB0eSgpKSB7Ci0j
aWZuZGVmIE5ERUJVRwotICAgICAgICBWOEdDQ29udHJvbGxlcjo6dW5yZWdpc3Rlckdsb2JhbEhh
bmRsZSh0aGlzLCBtX2dsb2JhbCk7Ci0jZW5kaWYKLSAgICAgICAgbV9nbG9iYWwuRGlzcG9zZSgp
OwotICAgICAgICBtX2dsb2JhbC5DbGVhcigpOwotICAgIH0KKyAgICBtX2dsb2JhbC5jbGVhcigp
OwogfQogCiB2b2lkIFY4RE9NV2luZG93U2hlbGw6OmNsZWFyRm9yQ2xvc2UoKQogewotICAgIGlm
ICghbV9jb250ZXh0LklzRW1wdHkoKSkgewotICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CisgICAgaWYgKG1fY29udGV4dC5nZXQoKS5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKIAotICAgICAgICBjbGVhckRvY3VtZW50V3JhcHBlcigpOwotICAgICAgICBkaXNwb3NlQ29u
dGV4dEhhbmRsZXMoKTsKLSAgICB9CisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwor
ICAgIGNsZWFyRG9jdW1lbnRXcmFwcGVyKCk7CisgICAgZGlzcG9zZUNvbnRleHRIYW5kbGVzKCk7
CiB9CiAKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6Y2xlYXJGb3JOYXZpZ2F0aW9uKCkKIHsKLSAg
ICBpZiAoIW1fY29udGV4dC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhh
bmRsZTsKLSAgICAgICAgY2xlYXJEb2N1bWVudFdyYXBwZXIoKTsKLQotICAgICAgICB2ODo6Q29u
dGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fY29udGV4dCk7CisgICAgaWYgKG1fY29udGV4dC5n
ZXQoKS5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICAvLyBDbGVhciB0aGUg
ZG9jdW1lbnQgd3JhcHBlciBjYWNoZSBiZWZvcmUgdHVybmluZyBvbiBhY2Nlc3MgY2hlY2tzIG9u
Ci0gICAgICAgIC8vIHRoZSBvbGQgRE9NV2luZG93IHdyYXBwZXIuIFRoaXMgd2F5LCBhY2Nlc3Mg
dG8gdGhlIGRvY3VtZW50IHdyYXBwZXIKLSAgICAgICAgLy8gd2lsbCBiZSBwcm90ZWN0ZWQgYnkg
dGhlIHNlY3VyaXR5IGNoZWNrcyBvbiB0aGUgRE9NV2luZG93IHdyYXBwZXIuCi0gICAgICAgIGNs
ZWFyRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKTsKKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2Nv
cGU7CisgICAgY2xlYXJEb2N1bWVudFdyYXBwZXIoKTsKIAotICAgICAgICAvLyBUdXJuIG9uIGFj
Y2VzcyBjaGVjayBvbiB0aGUgb2xkIERPTVdpbmRvdyB3cmFwcGVyLgotICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIo
VjhET01XaW5kb3c6OkdldFRlbXBsYXRlKCksIG1fZ2xvYmFsKTsKLSAgICAgICAgQVNTRVJUKCF3
cmFwcGVyLklzRW1wdHkoKSk7Ci0gICAgICAgIHdyYXBwZXItPlR1cm5PbkFjY2Vzc0NoZWNrKCk7
CisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjcmVhdGUgYSBuZXcgTG9jYWwgaGFuZGxlIGhlcmU/
CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShtX2NvbnRleHQuZ2V0KCkpOwog
Ci0gICAgICAgIC8vIFNlcGFyYXRlIHRoZSBjb250ZXh0IGZyb20gaXRzIGdsb2JhbCBvYmplY3Qu
Ci0gICAgICAgIG1fY29udGV4dC0+RGV0YWNoR2xvYmFsKCk7CisgICAgLy8gQ2xlYXIgdGhlIGRv
Y3VtZW50IHdyYXBwZXIgY2FjaGUgYmVmb3JlIHR1cm5pbmcgb24gYWNjZXNzIGNoZWNrcyBvbgor
ICAgIC8vIHRoZSBvbGQgRE9NV2luZG93IHdyYXBwZXIuIFRoaXMgd2F5LCBhY2Nlc3MgdG8gdGhl
IGRvY3VtZW50IHdyYXBwZXIKKyAgICAvLyB3aWxsIGJlIHByb3RlY3RlZCBieSB0aGUgc2VjdXJp
dHkgY2hlY2tzIG9uIHRoZSBET01XaW5kb3cgd3JhcHBlci4KKyAgICBjbGVhckRvY3VtZW50V3Jh
cHBlckNhY2hlKCk7CiAKLSAgICAgICAgZGlzcG9zZUNvbnRleHRIYW5kbGVzKCk7Ci0gICAgfQor
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd2luZG93V3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6
bG9va3VwRE9NV3JhcHBlcihWOERPTVdpbmRvdzo6R2V0VGVtcGxhdGUoKSwgbV9nbG9iYWwuZ2V0
KCkpOworICAgIEFTU0VSVCghd2luZG93V3JhcHBlci5Jc0VtcHR5KCkpOworICAgIHdpbmRvd1dy
YXBwZXItPlR1cm5PbkFjY2Vzc0NoZWNrKCk7CisgICAgbV9jb250ZXh0LmdldCgpLT5EZXRhY2hH
bG9iYWwoKTsKKyAgICBkaXNwb3NlQ29udGV4dEhhbmRsZXMoKTsKIH0KIAogLy8gQ3JlYXRlIGEg
bmV3IGVudmlyb25tZW50IGFuZCBzZXR1cCB0aGUgZ2xvYmFsIG9iamVjdC4KQEAgLTI3Niw2NyAr
MjkyLDM1IEBAIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6Y2xlYXJGb3JOYXZpZ2F0aW9uKCkKIC8v
IGl0IHdvbid0IGJlIGFibGUgdG8gcmVhY2ggdGhlIG91dGVyIHdpbmRvdyB2aWEgaXRzIGdsb2Jh
bCBvYmplY3QuCiBib29sIFY4RE9NV2luZG93U2hlbGw6OmluaXRDb250ZXh0SWZOZWVkZWQoKQog
ewotICAgIC8vIEJhaWwgb3V0IGlmIHRoZSBjb250ZXh0IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlh
bGl6ZWQuCi0gICAgaWYgKCFtX2NvbnRleHQuSXNFbXB0eSgpKQorICAgIGlmICghbV9jb250ZXh0
LmdldCgpLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAvLyBDcmVhdGUg
YSBoYW5kbGUgc2NvcGUgZm9yIGFsbCBsb2NhbCBoYW5kbGVzLgogICAgIHY4OjpIYW5kbGVTY29w
ZSBoYW5kbGVTY29wZTsKIAotICAgIC8vIFNldHVwIHRoZSBzZWN1cml0eSBoYW5kbGVycyBhbmQg
bWVzc2FnZSBsaXN0ZW5lci4gVGhpcyBvbmx5IGhhcwotICAgIC8vIHRvIGJlIGRvbmUgb25jZS4K
LSAgICBzdGF0aWMgYm9vbCBpc1Y4SW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWlzVjhJ
bml0aWFsaXplZCkgewotICAgICAgICAvLyBUZWxscyBWOCBub3QgdG8gY2FsbCB0aGUgZGVmYXVs
dCBPT00gaGFuZGxlciwgYmluZGluZyBjb2RlCi0gICAgICAgIC8vIHdpbGwgaGFuZGxlIGl0Lgot
ICAgICAgICB2ODo6Vjg6Oklnbm9yZU91dE9mTWVtb3J5RXhjZXB0aW9uKCk7Ci0gICAgICAgIHY4
OjpWODo6U2V0RmF0YWxFcnJvckhhbmRsZXIocmVwb3J0RmF0YWxFcnJvckluVjgpOwotCi0gICAg
ICAgIHY4OjpWODo6U2V0R2xvYmFsR0NQcm9sb2d1ZUNhbGxiYWNrKCZWOEdDQ29udHJvbGxlcjo6
Z2NQcm9sb2d1ZSk7Ci0gICAgICAgIHY4OjpWODo6U2V0R2xvYmFsR0NFcGlsb2d1ZUNhbGxiYWNr
KCZWOEdDQ29udHJvbGxlcjo6Z2NFcGlsb2d1ZSk7Ci0KLSAgICAgICAgdjg6OlY4OjpBZGRNZXNz
YWdlTGlzdGVuZXIoJnY4VW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyKTsKLQotICAgICAgICB2ODo6
Vjg6OlNldEZhaWxlZEFjY2Vzc0NoZWNrQ2FsbGJhY2tGdW5jdGlvbihyZXBvcnRVbnNhZmVKYXZh
U2NyaXB0QWNjZXNzKTsKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICAgICAg
U2NyaXB0UHJvZmlsZXI6OmluaXRpYWxpemUoKTsKLSNlbmRpZgotICAgICAgICBWOFBlcklzb2xh
dGVEYXRhOjplbnN1cmVJbml0aWFsaXplZCh2ODo6SXNvbGF0ZTo6R2V0Q3VycmVudCgpKTsKLQot
ICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBmb2xsb3dpbmcgMiBsaW5lcyB3aGVuIFY4IGRl
ZmF1bHQgaGFzIGNoYW5nZWQuCi0gICAgICAgIGNvbnN0IGNoYXIgZXM1UmVhZG9ubHlGbGFnW10g
PSAiLS1lczVfcmVhZG9ubHkiOwotICAgICAgICB2ODo6Vjg6OlNldEZsYWdzRnJvbVN0cmluZyhl
czVSZWFkb25seUZsYWcsIHNpemVvZihlczVSZWFkb25seUZsYWcpKTsKKyAgICBpbml0aWFsaXpl
VjhJZk5lZWRlZCgpOwogCi0gICAgICAgIGlzVjhJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQot
Ci0gICAgbV9jb250ZXh0ID0gY3JlYXRlTmV3Q29udGV4dChtX2dsb2JhbCwgMCwgMCk7Ci0gICAg
aWYgKG1fY29udGV4dC5Jc0VtcHR5KCkpCisgICAgbV9jb250ZXh0LmFkb3B0KGNyZWF0ZU5ld0Nv
bnRleHQobV9nbG9iYWwuZ2V0KCksIDAsIDApKTsKKyAgICBpZiAobV9jb250ZXh0LmdldCgpLklz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdjg6OkxvY2FsPHY4OjpDb250
ZXh0PiB2OENvbnRleHQgPSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0KTsK
LSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKHY4Q29udGV4dCk7CisgICAgdjg6
OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3
KG1fY29udGV4dC5nZXQoKSk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShj
b250ZXh0KTsKIAotICAgIC8vIFN0b3JlIHRoZSBmaXJzdCBnbG9iYWwgb2JqZWN0IGNyZWF0ZWQg
c28gd2UgY2FuIHJldXNlIGl0LgotICAgIGlmIChtX2dsb2JhbC5Jc0VtcHR5KCkpIHsKLSAgICAg
ICAgbV9nbG9iYWwgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHY4Q29udGV4dC0+
R2xvYmFsKCkpOwotICAgICAgICAvLyBCYWlsIG91dCBpZiBhbGxvY2F0aW9uIG9mIHRoZSBmaXJz
dCBnbG9iYWwgb2JqZWN0cyBmYWlscy4KLSAgICAgICAgaWYgKG1fZ2xvYmFsLklzRW1wdHkoKSkg
eworICAgIGlmIChtX2dsb2JhbC5nZXQoKS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgbV9nbG9iYWwu
c2V0KGNvbnRleHQtPkdsb2JhbCgpKTsKKyAgICAgICAgaWYgKG1fZ2xvYmFsLmdldCgpLklzRW1w
dHkoKSkgewogICAgICAgICAgICAgZGlzcG9zZUNvbnRleHRIYW5kbGVzKCk7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIFY4R0ND
b250cm9sbGVyOjpyZWdpc3Rlckdsb2JhbEhhbmRsZShQUk9YWSwgdGhpcywgbV9nbG9iYWwpOwot
I2VuZGlmCiAgICAgfQogCi0gICAgbV9wZXJDb250ZXh0RGF0YSA9IFY4UGVyQ29udGV4dERhdGE6
OmNyZWF0ZShtX2NvbnRleHQpOworICAgIG1fcGVyQ29udGV4dERhdGEgPSBWOFBlckNvbnRleHRE
YXRhOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsKICAgICBpZiAoIW1fcGVyQ29udGV4dERhdGEt
PmluaXQoKSkgewogICAgICAgICBkaXNwb3NlQ29udGV4dEhhbmRsZXMoKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICghaW5zdGFsbERPTVdpbmRvdyh2OENvbnRleHQs
IG1fZnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpKSkgeworICAgIGlmICghaW5zdGFsbERP
TVdpbmRvdyhjb250ZXh0LCBtX2ZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSkpIHsKICAg
ICAgICAgZGlzcG9zZUNvbnRleHRIYW5kbGVzKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CkBAIC0zNDYsOSArMzMwLDkgQEAgYm9vbCBWOERPTVdpbmRvd1NoZWxsOjppbml0Q29udGV4
dElmTmVlZGVkKCkKICAgICBzZXRTZWN1cml0eVRva2VuKCk7CiAKICAgICBpZiAobV9mcmFtZS0+
ZG9jdW1lbnQoKSkKLSAgICAgICAgdjhDb250ZXh0LT5BbGxvd0NvZGVHZW5lcmF0aW9uRnJvbVN0
cmluZ3MobV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93
RXZhbCgwLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlN1cHByZXNzUmVwb3J0KSk7CisgICAgICAg
IGNvbnRleHQtPkFsbG93Q29kZUdlbmVyYXRpb25Gcm9tU3RyaW5ncyhtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dFdmFsKDAsIENvbnRlbnRTZWN1cml0
eVBvbGljeTo6U3VwcHJlc3NSZXBvcnQpKTsKIAotICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGll
bnQoKS0+ZGlkQ3JlYXRlU2NyaXB0Q29udGV4dChtX2NvbnRleHQsIDAsIDApOworICAgIG1fZnJh
bWUtPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlkQ3JlYXRlU2NyaXB0Q29udGV4dChtX2NvbnRleHQu
Z2V0KCksIDAsIDApOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcuIFdlIHNob3VsZCBh
Y3R1YWxseSBkbyB0aGlzIGZvciB0aGUgcHJvcGVyIHdvcmxkIG9uY2UKICAgICAvLyB3ZSBkbyBp
c29sYXRlZCB3b3JsZHMgdGhlIFdlYkNvcmUgd2F5LgpAQCAtNDAwLDEyICszODQsNyBAQCB2ODo6
UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlTmV3Q29udGV4
dCh2ODo6SGFuZGxlPHY4OjpPYgogCiB2b2lkIFY4RE9NV2luZG93U2hlbGw6OnNldENvbnRleHQo
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKIHsKLSAgICAvLyBpZiB3ZSBhbHJlYWR5
IGhhdmUgYSBjb250ZXh0LCBjbGVhciBpdCBiZWZvcmUgc2V0dGluZyB0aGUgbmV3IG9uZS4KLSAg
ICBpZiAoIW1fY29udGV4dC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgbV9jb250ZXh0LkRpc3Bvc2Uo
KTsKLSAgICAgICAgbV9jb250ZXh0LkNsZWFyKCk7Ci0gICAgfQotICAgIG1fY29udGV4dCA9IHY4
OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0Pjo6TmV3KGNvbnRleHQpOworICAgIG1fY29udGV4dC5z
ZXQoY29udGV4dCk7CiB9CiAKIGJvb2wgVjhET01XaW5kb3dTaGVsbDo6aW5zdGFsbERPTVdpbmRv
dyh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0LCBET01XaW5kb3cqIHdpbmRvdykKQEAg
LTQzNSwyMiArNDE0LDEzIEBAIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6dXBkYXRlRG9jdW1lbnRX
cmFwcGVyKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcikKIHsKICAgICBjbGVhckRvY3Vt
ZW50V3JhcHBlcigpOwogCi0gICAgQVNTRVJUKG1fZG9jdW1lbnQuSXNFbXB0eSgpKTsKLSAgICBt
X2RvY3VtZW50ID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyKTsKLSNp
Zm5kZWYgTkRFQlVHCi0gICAgVjhHQ0NvbnRyb2xsZXI6OnJlZ2lzdGVyR2xvYmFsSGFuZGxlKFBS
T1hZLCB0aGlzLCBtX2RvY3VtZW50KTsKLSNlbmRpZgorICAgIEFTU0VSVChtX2RvY3VtZW50Lmdl
dCgpLklzRW1wdHkoKSk7CisgICAgbV9kb2N1bWVudC5zZXQod3JhcHBlcik7CiB9CiAKIHZvaWQg
VjhET01XaW5kb3dTaGVsbDo6Y2xlYXJEb2N1bWVudFdyYXBwZXIoKQogewotICAgIGlmICghbV9k
b2N1bWVudC5Jc0VtcHR5KCkpIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIFY4R0NDb250cm9s
bGVyOjp1bnJlZ2lzdGVyR2xvYmFsSGFuZGxlKHRoaXMsIG1fZG9jdW1lbnQpOwotI2VuZGlmCi0g
ICAgICAgIG1fZG9jdW1lbnQuRGlzcG9zZSgpOwotICAgICAgICBtX2RvY3VtZW50LkNsZWFyKCk7
Ci0gICAgfQorICAgIG1fZG9jdW1lbnQuY2xlYXIoKTsKIH0KIAogc3RhdGljIHZvaWQgY2hlY2tE
b2N1bWVudFdyYXBwZXIodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyLCBEb2N1bWVudCog
ZG9jdW1lbnQpCkBAIC00NjIsNyArNDMyLDggQEAgc3RhdGljIHZvaWQgY2hlY2tEb2N1bWVudFdy
YXBwZXIodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyLCBEb2N1bWVudCogZG9jdW0KIHZv
aWQgVjhET01XaW5kb3dTaGVsbDo6dXBkYXRlRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKQogewogICAg
IHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29u
dGV4dFNjb3BlKG1fY29udGV4dCk7CisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSB1c2UgYSBuZXcg
TG9jYWwgaGFuZGxlIGhlcmU/CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZSht
X2NvbnRleHQuZ2V0KCkpOwogCiAgICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyBubyBmcmFtZSwg
Tm9kZVRvVjhPYmplY3QgbWlnaHQgZ2V0IHRoZQogICAgIC8vIGRvY3VtZW50IHdyYXBwZXIgZm9y
IGEgZG9jdW1lbnQgdGhhdCBpcyBhYm91dCB0byBiZSBkZWxldGVkLgpAQCAtNDcxLDE2ICs0NDIs
MTcgQEAgdm9pZCBWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1bWVudFdyYXBwZXJDYWNoZSgp
CiAgICAgLy8gd3JhcHBlciBjbGVhcmVkLiBVc2luZyB0aGUgY2xlYXJlZCBnbG9iYWwgaGFuZGxl
IHdpbGwgbGVhZCB0bwogICAgIC8vIGNyYXNoZXMuIEluIHRoaXMgY2FzZSB3ZSBjbGVhciB0aGUg
Y2FjaGUgYW5kIGxldCB0aGUgRE9NV2luZG93CiAgICAgLy8gYWNjZXNzb3IgaGFuZGxlIGFjY2Vz
cyB0byB0aGUgZG9jdW1lbnQuCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBiZSBwb3Nz
aWJsZSBhbnltb3JlLgogICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewog
ICAgICAgICBjbGVhckRvY3VtZW50V3JhcHBlckNhY2hlKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZG9jdW1lbnRXcmFwcGVyID0gdG9WOCht
X2ZyYW1lLT5kb2N1bWVudCgpKTsKLSAgICBBU1NFUlQoZG9jdW1lbnRXcmFwcGVyID09IG1fZG9j
dW1lbnQgfHwgbV9kb2N1bWVudC5Jc0VtcHR5KCkpOwotICAgIGlmIChtX2RvY3VtZW50LklzRW1w
dHkoKSkKKyAgICBBU1NFUlQoZG9jdW1lbnRXcmFwcGVyID09IG1fZG9jdW1lbnQuZ2V0KCkgfHwg
bV9kb2N1bWVudC5nZXQoKS5Jc0VtcHR5KCkpOworICAgIGlmIChtX2RvY3VtZW50LmdldCgpLklz
RW1wdHkoKSkKICAgICAgICAgdXBkYXRlRG9jdW1lbnRXcmFwcGVyKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QoZG9jdW1lbnRXcmFwcGVyKSk7Ci0gICAgY2hlY2tEb2N1bWVudFdyYXBwZXIo
bV9kb2N1bWVudCwgbV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgY2hlY2tEb2N1bWVudFdyYXBw
ZXIobV9kb2N1bWVudC5nZXQoKSwgbV9mcmFtZS0+ZG9jdW1lbnQoKSk7CiAKICAgICAvLyBJZiBp
bnN0YW50aWF0aW9uIG9mIHRoZSBkb2N1bWVudCB3cmFwcGVyIGZhaWxzLCBjbGVhciB0aGUgY2Fj
aGUKICAgICAvLyBhbmQgbGV0IHRoZSBET01XaW5kb3cgYWNjZXNzb3IgaGFuZGxlIGFjY2VzcyB0
byB0aGUgZG9jdW1lbnQuCkBAIC00ODksMjcgKzQ2MSwyOCBAQCB2b2lkIFY4RE9NV2luZG93U2hl
bGw6OnVwZGF0ZURvY3VtZW50V3JhcHBlckNhY2hlKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBBU1NFUlQoZG9jdW1lbnRXcmFwcGVyLT5Jc09iamVjdCgpKTsKLSAgICBtX2NvbnRleHQt
Pkdsb2JhbCgpLT5Gb3JjZVNldCh2ODo6U3RyaW5nOjpOZXcoImRvY3VtZW50IiksIGRvY3VtZW50
V3JhcHBlciwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6UmVhZE9ubHkg
fCB2ODo6RG9udERlbGV0ZSkpOworICAgIG1fY29udGV4dC5nZXQoKS0+R2xvYmFsKCktPkZvcmNl
U2V0KHY4OjpTdHJpbmc6Ok5ldygiZG9jdW1lbnQiKSwgZG9jdW1lbnRXcmFwcGVyLCBzdGF0aWNf
Y2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpSZWFkT25seSB8IHY4OjpEb250RGVsZXRl
KSk7CiAKICAgICAvLyBXZSBhbHNvIHN0YXNoIGEgcmVmZXJlbmNlIHRvIHRoZSBkb2N1bWVudCBv
biB0aGUgcmVhbCBnbG9iYWwgb2JqZWN0IHNvIHRoYXQKICAgICAvLyBET01XaW5kb3cgb2JqZWN0
cyB3ZSBvYnRhaW4gZnJvbSBKYXZhU2NyaXB0IHJlZmVyZW5jZXMgYXJlIGd1YXJhbnRlZWQgdG8g
aGF2ZQogICAgIC8vIGxpdmUgRG9jdW1lbnQgb2JqZWN0cy4KLSAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHY4UmVhbEdsb2JhbCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QobV9jb250
ZXh0LT5HbG9iYWwoKS0+R2V0UHJvdG90eXBlKCkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gdjhSZWFsR2xvYmFsID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChtX2NvbnRleHQu
Z2V0KCktPkdsb2JhbCgpLT5HZXRQcm90b3R5cGUoKSk7CiAgICAgdjhSZWFsR2xvYmFsLT5TZXRI
aWRkZW5WYWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6ZG9jdW1lbnQoKSwgZG9jdW1lbnRXcmFw
cGVyKTsKIH0KIAogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpjbGVhckRvY3VtZW50V3JhcHBlckNh
Y2hlKCkKIHsKLSAgICBBU1NFUlQoIW1fY29udGV4dC5Jc0VtcHR5KCkpOwotICAgIG1fY29udGV4
dC0+R2xvYmFsKCktPkZvcmNlRGVsZXRlKHY4OjpTdHJpbmc6Ok5ldygiZG9jdW1lbnQiKSk7Cisg
ICAgQVNTRVJUKCFtX2NvbnRleHQuZ2V0KCkuSXNFbXB0eSgpKTsKKyAgICBtX2NvbnRleHQuZ2V0
KCktPkdsb2JhbCgpLT5Gb3JjZURlbGV0ZSh2ODo6U3RyaW5nOjpOZXcoImRvY3VtZW50IikpOwog
fQogCiB2b2lkIFY4RE9NV2luZG93U2hlbGw6OnNldFNlY3VyaXR5VG9rZW4oKQogewogICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgLy8gU2V0dXAgc2Vj
dXJpdHkgb3JpZ2luIGFuZCBzZWN1cml0eSB0b2tlbi4KKworICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZG4ndCBiZSBwb3NzaWJsZSBhbnltb3JlLgogICAgIGlmICghZG9jdW1lbnQpIHsKLSAgICAg
ICAgbV9jb250ZXh0LT5Vc2VEZWZhdWx0U2VjdXJpdHlUb2tlbigpOworICAgICAgICBtX2NvbnRl
eHQuZ2V0KCktPlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTUyOSwyMiArNTAyLDIzIEBAIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6c2V0U2Vj
dXJpdHlUb2tlbigpCiAgICAgLy8gY2FzZSwgd2UgdXNlIHRoZSBnbG9iYWwgb2JqZWN0IGFzIHRo
ZSBzZWN1cml0eSB0b2tlbiB0byBhdm9pZAogICAgIC8vIGNhbGxpbmcgY2FuQWNjZXNzIHdoZW4g
YSBzY3JpcHQgYWNjZXNzZXMgaXRzIG93biBvYmplY3RzLgogICAgIGlmICh0b2tlbi5pc0VtcHR5
KCkgfHwgdG9rZW4gPT0gIm51bGwiKSB7Ci0gICAgICAgIG1fY29udGV4dC0+VXNlRGVmYXVsdFNl
Y3VyaXR5VG9rZW4oKTsKKyAgICAgICAgbV9jb250ZXh0LmdldCgpLT5Vc2VEZWZhdWx0U2VjdXJp
dHlUb2tlbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQ1N0cmluZyB1dGY4VG9r
ZW4gPSB0b2tlbi51dGY4KCk7CiAgICAgLy8gTk9URTogVjggZG9lcyBpZGVudGl0eSBjb21wYXJp
c29uIGluIGZhc3QgcGF0aCwgbXVzdCB1c2UgYSBzeW1ib2wKICAgICAvLyBhcyB0aGUgc2VjdXJp
dHkgdG9rZW4uCi0gICAgbV9jb250ZXh0LT5TZXRTZWN1cml0eVRva2VuKHY4OjpTdHJpbmc6Ok5l
d1N5bWJvbCh1dGY4VG9rZW4uZGF0YSgpLCB1dGY4VG9rZW4ubGVuZ3RoKCkpKTsKKyAgICBtX2Nv
bnRleHQuZ2V0KCktPlNldFNlY3VyaXR5VG9rZW4odjg6OlN0cmluZzo6TmV3U3ltYm9sKHV0ZjhU
b2tlbi5kYXRhKCksIHV0ZjhUb2tlbi5sZW5ndGgoKSkpOwogfQogCiB2b2lkIFY4RE9NV2luZG93
U2hlbGw6OnVwZGF0ZURvY3VtZW50KCkKIHsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3Qg
YmUgcG9zc2libGUgYW55bW9yZS4KICAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChtX2dsb2JhbC5Jc0VtcHR5KCkpCisgICAgaWYgKG1fZ2xv
YmFsLmdldCgpLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhlcmUgaXMg
YW4gZXhpc3RpbmcgSmF2YVNjcmlwdCB3cmFwcGVyIGZvciB0aGUgZ2xvYmFsIG9iamVjdApAQCAt
NTYxLDkgKzUzNSw5IEBAIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6dXBkYXRlRG9jdW1lbnQoKQog
ICAgIHVwZGF0ZVNlY3VyaXR5T3JpZ2luKCk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBn
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IHByb3BlcnR5LCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IHByb3BlcnR5LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewot
ICAgIC8vIEZJWE1FKGFudG9ubSk6IGNvbnNpZGVyIHBhc3NpbmcgQXRvbWljU3RyaW5nSW1wbCBk
aXJlY3RseS4KKyAgICAvLyBGSVhNRTogY29uc2lkZXIgcGFzc2luZyBBdG9taWNTdHJpbmdJbXBs
IGRpcmVjdGx5LgogICAgIEF0b21pY1N0cmluZyBuYW1lID0gdG9XZWJDb3JlQXRvbWljU3RyaW5n
KHByb3BlcnR5KTsKICAgICBIVE1MRG9jdW1lbnQqIGh0bWxEb2N1bWVudCA9IFY4SFRNTERvY3Vt
ZW50Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICBBU1NFUlQoaHRtbERvY3VtZW50KTsK
QEAgLTU3Niw0MCArNTUwLDQwIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IHByb3BlcnR5LCBjb25zdCB2ODo6QWNjZXNzb3JJCiAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpuYW1lZEl0ZW1B
ZGRlZChIVE1MRG9jdW1lbnQqIGRvYywgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQordm9pZCBW
OERPTVdpbmRvd1NoZWxsOjpuYW1lZEl0ZW1BZGRlZChIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7CiAgICAgaWYgKCFpbml0Q29udGV4dElmTmVlZGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsK
LSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fY29udGV4dCk7CisgICAgdjg6
OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShtX2NvbnRleHQuZ2V0KCkpOwogCi0gICAgQVNT
RVJUKCFtX2RvY3VtZW50LklzRW1wdHkoKSk7Ci0gICAgY2hlY2tEb2N1bWVudFdyYXBwZXIobV9k
b2N1bWVudCwgZG9jKTsKLSAgICBtX2RvY3VtZW50LT5TZXRBY2Nlc3Nvcih2OFN0cmluZyhuYW1l
KSwgZ2V0dGVyKTsKKyAgICBBU1NFUlQoIW1fZG9jdW1lbnQuZ2V0KCkuSXNFbXB0eSgpKTsKKyAg
ICBjaGVja0RvY3VtZW50V3JhcHBlcihtX2RvY3VtZW50LmdldCgpLCBkb2N1bWVudCk7CisgICAg
bV9kb2N1bWVudC5nZXQoKS0+U2V0QWNjZXNzb3IodjhTdHJpbmcobmFtZSksIGdldHRlcik7CiB9
CiAKLXZvaWQgVjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtUmVtb3ZlZChIVE1MRG9jdW1lbnQq
IGRvYywgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQordm9pZCBWOERPTVdpbmRvd1NoZWxsOjpu
YW1lZEl0ZW1SZW1vdmVkKEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSkKIHsKLSAgICBpZiAoZG9jLT5oYXNOYW1lZEl0ZW0obmFtZS5pbXBsKCkpIHx8IGRv
Yy0+aGFzRXh0cmFOYW1lZEl0ZW0obmFtZS5pbXBsKCkpKQorICAgIGlmIChkb2N1bWVudC0+aGFz
TmFtZWRJdGVtKG5hbWUuaW1wbCgpKSB8fCBkb2N1bWVudC0+aGFzRXh0cmFOYW1lZEl0ZW0obmFt
ZS5pbXBsKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWluaXRDb250ZXh0SWZOZWVk
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3Bl
OwotICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUobV9jb250ZXh0KTsKKyAgICB2
ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fY29udGV4dC5nZXQoKSk7CiAKLSAgICBB
U1NFUlQoIW1fZG9jdW1lbnQuSXNFbXB0eSgpKTsKLSAgICBjaGVja0RvY3VtZW50V3JhcHBlciht
X2RvY3VtZW50LCBkb2MpOwotICAgIG1fZG9jdW1lbnQtPkRlbGV0ZSh2OFN0cmluZyhuYW1lKSk7
CisgICAgQVNTRVJUKCFtX2RvY3VtZW50LmdldCgpLklzRW1wdHkoKSk7CisgICAgY2hlY2tEb2N1
bWVudFdyYXBwZXIobV9kb2N1bWVudC5nZXQoKSwgZG9jdW1lbnQpOworICAgIG1fZG9jdW1lbnQu
Z2V0KCktPkRlbGV0ZSh2OFN0cmluZyhuYW1lKSk7CiB9CiAKIHZvaWQgVjhET01XaW5kb3dTaGVs
bDo6dXBkYXRlU2VjdXJpdHlPcmlnaW4oKQogewotICAgIGlmIChtX2NvbnRleHQuSXNFbXB0eSgp
KQorICAgIGlmIChtX2NvbnRleHQuZ2V0KCkuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29w
ZTsKICAgICBzZXRTZWN1cml0eVRva2VuKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuaAppbmRleCBiMjViYmZjNDg4ZWQ3ZDZkNTM5OTVjZjY5
YzVjYTk2ZjIwNWY4MWVhLi5lMmZmODE5MzcwZTM1ZGRlMGZhNWY4ZGNlMDE5NWIyYjgxMTMwN2Fl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oCkBA
IC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIFY4RE9NV2luZG93U2hlbGxfaAogI2RlZmluZSBWOERP
TVdpbmRvd1NoZWxsX2gKIAorI2luY2x1ZGUgIlNjb3BlZFBlcnNpc3RlbnQuaCIKICNpbmNsdWRl
ICJWOFBlckNvbnRleHREYXRhLmgiCiAjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTUyLDcgKzUzLDcgQEAgY2xhc3MgVjhET01XaW5kb3dT
aGVsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFY4RE9NV2luZG93U2hlbGw+IHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxWOERPTVdpbmRvd1NoZWxsPiBjcmVhdGUoRnJhbWUqKTsKIAot
ICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRleHQ7IH0KKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAKICAgICAvLyBVcGRhdGUgZG9jdW1lbnQgb2JqZWN0
IG9mIHRoZSBmcmFtZS4KICAgICB2b2lkIHVwZGF0ZURvY3VtZW50KCk7CkBAIC05OSw5ICsxMDAs
OSBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPFY4UGVyQ29udGV4dERhdGE+IG1fcGVyQ29udGV4
dERhdGE7CiAKLSAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gbV9jb250ZXh0OwotICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fZ2xvYmFsOwotICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+IG1fZG9jdW1lbnQ7CisgICAgU2NvcGVkUGVyc2lzdGVudDx2ODo6Q29udGV4
dD4gbV9jb250ZXh0OworICAgIFNjb3BlZFBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9nbG9iYWw7
CisgICAgU2NvcGVkUGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2RvY3VtZW50OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160323</attachid>
            <date>2012-08-23 21:31:38 -0700</date>
            <delta_ts>2012-08-23 22:59:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94882-20120823213134.patch</filename>
            <type>text/plain</type>
            <size>20574</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2NDg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2Q0ZDZhMjYxYzlhNDI0
NDViNTQyNDYyYWM1NjU2NDQ5ZTBlZDA4ZS4uNTQ1N2RhY2U4NWEwNmM3M2U1MDFmMjUwYjA2YTk2
ZjQ2NWYyODA4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ0IEBACiAyMDEyLTA4LTIzICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKKyAgICAgICAgW1Y4XSBWOERPTVdpbmRvd1No
ZWxsIHNob3VsZCB1c2UgU2NvcGVkUGVyc2lzdGVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ4ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHVwZGF0ZXMgVjhET01XaW5kb3dTaGVs
bCB0byB1c2UgU2NvcGVkUGVyc2lzdGVudCByYXRoZXIgdGhhbgorICAgICAgICBtYW51YWxseSBt
YW5hZ2luZyB2ODo6UGVyc2lzdGVudCBoYW5kbGVzLiBJJ3ZlIGFsc28gZml4ZWQgc29tZSBzdHls
ZQorICAgICAgICBpc3N1ZXMgaW4gY29kZSBJIG5lZWRlZCB0byBlZGl0IGZvciB0aGlzIHBhdGNo
LiBUaGlzIGNsYXNzIGNvdWxkIHVzZQorICAgICAgICBtb3JlIHRvdWNodXAsIGJ1dCBJJ20gZ29p
bmcgdG8gaG9sZCBvZmYgdW50aWwgdGhlIG5leHQgcGF0Y2guCisKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9TY29wZWRQZXJzaXN0ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRQZXJzaXN0
ZW50OjphZG9wdCk6CisgICAgICAgIChTY29wZWRQZXJzaXN0ZW50KToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxp
emVWOElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhE
T01XaW5kb3dTaGVsbDo6aXNDb250ZXh0SW5pdGlhbGl6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
VjhET01XaW5kb3dTaGVsbDo6ZGlzcG9zZUNvbnRleHRIYW5kbGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4RE9NV2luZG93U2hlbGw6OmRlc3Ryb3lHbG9iYWwpOgorICAgICAgICAoV2ViQ29yZTo6
VjhET01XaW5kb3dTaGVsbDo6Y2xlYXJGb3JDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpWOERP
TVdpbmRvd1NoZWxsOjpjbGVhckZvck5hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VjhE
T01XaW5kb3dTaGVsbDo6aW5pdENvbnRleHRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpW
OERPTVdpbmRvd1NoZWxsOjpzZXRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2lu
ZG93U2hlbGw6OnVwZGF0ZURvY3VtZW50V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpWOERP
TVdpbmRvd1NoZWxsOjpjbGVhckRvY3VtZW50V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpW
OERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1bWVudFdyYXBwZXJDYWNoZSk6CisgICAgICAgIChX
ZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpjbGVhckRvY3VtZW50V3JhcHBlckNhY2hlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OnNldFNlY3VyaXR5VG9rZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6
Om5hbWVkSXRlbUFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6Om5h
bWVkSXRlbVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6dXBk
YXRlU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hl
bGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmNvbnRleHQpOgorICAg
ICAgICAoVjhET01XaW5kb3dTaGVsbCk6CisKKzIwMTItMDgtMjMgIEFkYW0gQmFydGggIDxhYmFy
dGhAd2Via2l0Lm9yZz4KKwogICAgICAgICBbVjhdIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyIHJl
LWltcGxlbWVudHMgU2NvcGVkUGVyc2lzdGVudCBieSBoYW5kCiAgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDg3MwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY29wZWRQZXJzaXN0ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY29wZWRQZXJzaXN0ZW50LmgKaW5kZXggZGI1ZDZlZDZmODMzZDA0Nzg3NGRm
MDZmZTZkNmQ4MTYxOTI1Y2ZlMy4uZjVkNjk2Y2NjMzZhNjViNjUxMmJjNTk1ODc1NTFiMmRjNGU2
ZjljZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NvcGVkUGVyc2lz
dGVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njb3BlZFBlcnNpc3RlbnQu
aApAQCAtNjAsNiArNjAsMTIgQEAgcHVibGljOgogICAgICAgICBtX2hhbmRsZSA9IHY4OjpQZXJz
aXN0ZW50PFQ+OjpOZXcoaGFuZGxlKTsKICAgICB9CiAKKyAgICB2b2lkIGFkb3B0KHY4OjpQZXJz
aXN0ZW50PFQ+IGhhbmRsZSkKKyAgICB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIG1faGFu
ZGxlID0gaGFuZGxlOworICAgIH0KKwogICAgIC8vIE5vdGU6IFRoaXMgaXMgY2xlYXIgaW4gdGhl
IE93blB0ciBzZW5zZSwgbm90IHRoZSB2ODo6SGFuZGxlIHNlbnNlLgogICAgIHZvaWQgY2xlYXIo
KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2lu
ZG93U2hlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVs
bC5jcHAKaW5kZXggM2U2YTc4ZTI0ZmNlZDc5ZTNjZDM2NzVmNTY4YTc3ZDIxNjQxYzU0Yy4uMDUx
ODhlNjJiMGI4MjI5MmZlZmU2ODM5OTRjNGZhYTRkNGYxMzVjMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKQEAgLTE1OCw2ICsxNTgsMzEg
QEAgc3RhdGljIHZvaWQgcmVwb3J0VW5zYWZlSmF2YVNjcmlwdEFjY2Vzcyh2ODo6TG9jYWw8djg6
Ok9iamVjdD4gaG9zdCwgdjg6OkFjY2Vzc1QKICAgICB0YXJnZXRXaW5kb3ctPnByaW50RXJyb3JN
ZXNzYWdlKHRhcmdldFdpbmRvdy0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZl
RE9NV2luZG93KEJpbmRpbmdTdGF0ZTo6aW5zdGFuY2UoKSkpKTsKIH0KIAorc3RhdGljIHZvaWQg
aW5pdGlhbGl6ZVY4SWZOZWVkZWQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisK
KyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmIChpbml0aWFsaXpl
ZCkKKyAgICAgICAgcmV0dXJuOworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIHY4OjpW
ODo6SWdub3JlT3V0T2ZNZW1vcnlFeGNlcHRpb24oKTsKKyAgICB2ODo6Vjg6OlNldEZhdGFsRXJy
b3JIYW5kbGVyKHJlcG9ydEZhdGFsRXJyb3JJblY4KTsKKyAgICB2ODo6Vjg6OlNldEdsb2JhbEdD
UHJvbG9ndWVDYWxsYmFjaygmVjhHQ0NvbnRyb2xsZXI6OmdjUHJvbG9ndWUpOworICAgIHY4OjpW
ODo6U2V0R2xvYmFsR0NFcGlsb2d1ZUNhbGxiYWNrKCZWOEdDQ29udHJvbGxlcjo6Z2NFcGlsb2d1
ZSk7CisgICAgdjg6OlY4OjpBZGRNZXNzYWdlTGlzdGVuZXIoJnY4VW5jYXVnaHRFeGNlcHRpb25I
YW5kbGVyKTsKKyAgICB2ODo6Vjg6OlNldEZhaWxlZEFjY2Vzc0NoZWNrQ2FsbGJhY2tGdW5jdGlv
bihyZXBvcnRVbnNhZmVKYXZhU2NyaXB0QWNjZXNzKTsKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKKyAgICBTY3JpcHRQcm9maWxlcjo6aW5pdGlhbGl6ZSgpOworI2VuZGlmCisgICAg
VjhQZXJJc29sYXRlRGF0YTo6ZW5zdXJlSW5pdGlhbGl6ZWQodjg6Oklzb2xhdGU6OkdldEN1cnJl
bnQoKSk7CisKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBmb2xsb3dpbmcgMiBsaW5lcyB3aGVu
IFY4IGRlZmF1bHQgaGFzIGNoYW5nZWQuCisgICAgY29uc3QgY2hhciBlczVSZWFkb25seUZsYWdb
XSA9ICItLWVzNV9yZWFkb25seSI7CisgICAgdjg6OlY4OjpTZXRGbGFnc0Zyb21TdHJpbmcoZXM1
UmVhZG9ubHlGbGFnLCBzaXplb2YoZXM1UmVhZG9ubHlGbGFnKSk7Cit9CisKIFBhc3NSZWZQdHI8
VjhET01XaW5kb3dTaGVsbD4gVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlKEZyYW1lKiBmcmFtZSkK
IHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4RE9NV2luZG93U2hlbGwoZnJhbWUpKTsKQEAg
LTE3MiwxNiArMTk3LDE1IEBAIGJvb2wgVjhET01XaW5kb3dTaGVsbDo6aXNDb250ZXh0SW5pdGlh
bGl6ZWQoKQogewogICAgIC8vIG1fY29udGV4dCwgbV9nbG9iYWwsIGFuZCBtX3dyYXBwZXJCb2ls
ZXJwbGF0ZXMgc2hvdWxkCiAgICAgLy8gYWxsIGJlIG5vbi1lbXB0eSBpZiBpZiBtX2NvbnRleHQg
aXMgbm9uLWVtcHR5LgotICAgIEFTU0VSVChtX2NvbnRleHQuSXNFbXB0eSgpIHx8ICFtX2dsb2Jh
bC5Jc0VtcHR5KCkpOwotICAgIHJldHVybiAhbV9jb250ZXh0LklzRW1wdHkoKTsKKyAgICBBU1NF
UlQobV9jb250ZXh0LmdldCgpLklzRW1wdHkoKSB8fCAhbV9nbG9iYWwuZ2V0KCkuSXNFbXB0eSgp
KTsKKyAgICByZXR1cm4gIW1fY29udGV4dC5nZXQoKS5Jc0VtcHR5KCk7CiB9CiAKIHZvaWQgVjhE
T01XaW5kb3dTaGVsbDo6ZGlzcG9zZUNvbnRleHRIYW5kbGVzKCkKIHsKLSAgICBpZiAoIW1fY29u
dGV4dC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT53
aWxsUmVsZWFzZVNjcmlwdENvbnRleHQobV9jb250ZXh0LCAwKTsKLSAgICAgICAgbV9jb250ZXh0
LkRpc3Bvc2UoKTsKLSAgICAgICAgbV9jb250ZXh0LkNsZWFyKCk7CisgICAgaWYgKCFtX2NvbnRl
eHQuZ2V0KCkuSXNFbXB0eSgpKSB7CisgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQo
KS0+d2lsbFJlbGVhc2VTY3JpcHRDb250ZXh0KG1fY29udGV4dC5nZXQoKSwgMCk7CisgICAgICAg
IG1fY29udGV4dC5jbGVhcigpOwogCiAgICAgICAgIC8vIEl0J3MgbGlrZWx5IHRoYXQgZGlzcG9z
aW5nIHRoZSBjb250ZXh0IGhhcyBjcmVhdGVkIGEgbG90IG9mCiAgICAgICAgIC8vIGdhcmJhZ2Uu
IE5vdGlmeSBWOCBhYm91dCB0aGlzIHNvIGl0J2xsIGhhdmUgYSBjaGFuY2Ugb2YgY2xlYW5pbmcK
QEAgLTE5NSw0OCArMjE5LDQwIEBAIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6ZGlzcG9zZUNvbnRl
eHRIYW5kbGVzKCkKIAogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkZXN0cm95R2xvYmFsKCkKIHsK
LSAgICBpZiAoIW1fZ2xvYmFsLklzRW1wdHkoKSkgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAg
VjhHQ0NvbnRyb2xsZXI6OnVucmVnaXN0ZXJHbG9iYWxIYW5kbGUodGhpcywgbV9nbG9iYWwpOwot
I2VuZGlmCi0gICAgICAgIG1fZ2xvYmFsLkRpc3Bvc2UoKTsKLSAgICAgICAgbV9nbG9iYWwuQ2xl
YXIoKTsKLSAgICB9CisgICAgbV9nbG9iYWwuY2xlYXIoKTsKIH0KIAogdm9pZCBWOERPTVdpbmRv
d1NoZWxsOjpjbGVhckZvckNsb3NlKCkKIHsKLSAgICBpZiAoIW1fY29udGV4dC5Jc0VtcHR5KCkp
IHsKLSAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIGlmIChtX2NvbnRl
eHQuZ2V0KCkuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgY2xlYXJEb2N1
bWVudFdyYXBwZXIoKTsKLSAgICAgICAgZGlzcG9zZUNvbnRleHRIYW5kbGVzKCk7Ci0gICAgfQor
ICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICBjbGVhckRvY3VtZW50V3JhcHBl
cigpOworICAgIGRpc3Bvc2VDb250ZXh0SGFuZGxlcygpOwogfQogCiB2b2lkIFY4RE9NV2luZG93
U2hlbGw6OmNsZWFyRm9yTmF2aWdhdGlvbigpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQuSXNFbXB0
eSgpKSB7Ci0gICAgICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGU7Ci0gICAgICAgIGNsZWFyRG9j
dW1lbnRXcmFwcGVyKCk7Ci0KLSAgICAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29w
ZShtX2NvbnRleHQpOworICAgIGlmIChtX2NvbnRleHQuZ2V0KCkuSXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgLy8gQ2xlYXIgdGhlIGRvY3VtZW50IHdyYXBwZXIgY2FjaGUg
YmVmb3JlIHR1cm5pbmcgb24gYWNjZXNzIGNoZWNrcyBvbgotICAgICAgICAvLyB0aGUgb2xkIERP
TVdpbmRvdyB3cmFwcGVyLiBUaGlzIHdheSwgYWNjZXNzIHRvIHRoZSBkb2N1bWVudCB3cmFwcGVy
Ci0gICAgICAgIC8vIHdpbGwgYmUgcHJvdGVjdGVkIGJ5IHRoZSBzZWN1cml0eSBjaGVja3Mgb24g
dGhlIERPTVdpbmRvdyB3cmFwcGVyLgotICAgICAgICBjbGVhckRvY3VtZW50V3JhcHBlckNhY2hl
KCk7CisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIGNsZWFyRG9jdW1lbnRX
cmFwcGVyKCk7CiAKLSAgICAgICAgLy8gVHVybiBvbiBhY2Nlc3MgY2hlY2sgb24gdGhlIG9sZCBE
T01XaW5kb3cgd3JhcHBlci4KLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVy
ID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4RE9NV2luZG93OjpHZXRUZW1wbGF0
ZSgpLCBtX2dsb2JhbCk7Ci0gICAgICAgIEFTU0VSVCghd3JhcHBlci5Jc0VtcHR5KCkpOwotICAg
ICAgICB3cmFwcGVyLT5UdXJuT25BY2Nlc3NDaGVjaygpOworICAgIC8vIEZJWE1FOiBTaG91bGQg
d2UgY3JlYXRlIGEgbmV3IExvY2FsIGhhbmRsZSBoZXJlPworICAgIHY4OjpDb250ZXh0OjpTY29w
ZSBjb250ZXh0U2NvcGUobV9jb250ZXh0LmdldCgpKTsKIAotICAgICAgICAvLyBTZXBhcmF0ZSB0
aGUgY29udGV4dCBmcm9tIGl0cyBnbG9iYWwgb2JqZWN0LgotICAgICAgICBtX2NvbnRleHQtPkRl
dGFjaEdsb2JhbCgpOworICAgIC8vIENsZWFyIHRoZSBkb2N1bWVudCB3cmFwcGVyIGNhY2hlIGJl
Zm9yZSB0dXJuaW5nIG9uIGFjY2VzcyBjaGVja3Mgb24KKyAgICAvLyB0aGUgb2xkIERPTVdpbmRv
dyB3cmFwcGVyLiBUaGlzIHdheSwgYWNjZXNzIHRvIHRoZSBkb2N1bWVudCB3cmFwcGVyCisgICAg
Ly8gd2lsbCBiZSBwcm90ZWN0ZWQgYnkgdGhlIHNlY3VyaXR5IGNoZWNrcyBvbiB0aGUgRE9NV2lu
ZG93IHdyYXBwZXIuCisgICAgY2xlYXJEb2N1bWVudFdyYXBwZXJDYWNoZSgpOwogCi0gICAgICAg
IGRpc3Bvc2VDb250ZXh0SGFuZGxlcygpOwotICAgIH0KKyAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdpbmRvd1dyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhET01X
aW5kb3c6OkdldFRlbXBsYXRlKCksIG1fZ2xvYmFsLmdldCgpKTsKKyAgICBBU1NFUlQoIXdpbmRv
d1dyYXBwZXIuSXNFbXB0eSgpKTsKKyAgICB3aW5kb3dXcmFwcGVyLT5UdXJuT25BY2Nlc3NDaGVj
aygpOworICAgIG1fY29udGV4dC5nZXQoKS0+RGV0YWNoR2xvYmFsKCk7CisgICAgZGlzcG9zZUNv
bnRleHRIYW5kbGVzKCk7CiB9CiAKIC8vIENyZWF0ZSBhIG5ldyBlbnZpcm9ubWVudCBhbmQgc2V0
dXAgdGhlIGdsb2JhbCBvYmplY3QuCkBAIC0yNzYsNjcgKzI5MiwzNSBAQCB2b2lkIFY4RE9NV2lu
ZG93U2hlbGw6OmNsZWFyRm9yTmF2aWdhdGlvbigpCiAvLyBpdCB3b24ndCBiZSBhYmxlIHRvIHJl
YWNoIHRoZSBvdXRlciB3aW5kb3cgdmlhIGl0cyBnbG9iYWwgb2JqZWN0LgogYm9vbCBWOERPTVdp
bmRvd1NoZWxsOjppbml0Q29udGV4dElmTmVlZGVkKCkKIHsKLSAgICAvLyBCYWlsIG91dCBpZiB0
aGUgY29udGV4dCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgotICAgIGlmICghbV9jb250
ZXh0LklzRW1wdHkoKSkKKyAgICBpZiAoIW1fY29udGV4dC5nZXQoKS5Jc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgLy8gQ3JlYXRlIGEgaGFuZGxlIHNjb3BlIGZvciBhbGwg
bG9jYWwgaGFuZGxlcy4KICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAKLSAgICAv
LyBTZXR1cCB0aGUgc2VjdXJpdHkgaGFuZGxlcnMgYW5kIG1lc3NhZ2UgbGlzdGVuZXIuIFRoaXMg
b25seSBoYXMKLSAgICAvLyB0byBiZSBkb25lIG9uY2UuCi0gICAgc3RhdGljIGJvb2wgaXNWOElu
aXRpYWxpemVkID0gZmFsc2U7Ci0gICAgaWYgKCFpc1Y4SW5pdGlhbGl6ZWQpIHsKLSAgICAgICAg
Ly8gVGVsbHMgVjggbm90IHRvIGNhbGwgdGhlIGRlZmF1bHQgT09NIGhhbmRsZXIsIGJpbmRpbmcg
Y29kZQotICAgICAgICAvLyB3aWxsIGhhbmRsZSBpdC4KLSAgICAgICAgdjg6OlY4OjpJZ25vcmVP
dXRPZk1lbW9yeUV4Y2VwdGlvbigpOwotICAgICAgICB2ODo6Vjg6OlNldEZhdGFsRXJyb3JIYW5k
bGVyKHJlcG9ydEZhdGFsRXJyb3JJblY4KTsKLQotICAgICAgICB2ODo6Vjg6OlNldEdsb2JhbEdD
UHJvbG9ndWVDYWxsYmFjaygmVjhHQ0NvbnRyb2xsZXI6OmdjUHJvbG9ndWUpOwotICAgICAgICB2
ODo6Vjg6OlNldEdsb2JhbEdDRXBpbG9ndWVDYWxsYmFjaygmVjhHQ0NvbnRyb2xsZXI6OmdjRXBp
bG9ndWUpOwotCi0gICAgICAgIHY4OjpWODo6QWRkTWVzc2FnZUxpc3RlbmVyKCZ2OFVuY2F1Z2h0
RXhjZXB0aW9uSGFuZGxlcik7Ci0KLSAgICAgICAgdjg6OlY4OjpTZXRGYWlsZWRBY2Nlc3NDaGVj
a0NhbGxiYWNrRnVuY3Rpb24ocmVwb3J0VW5zYWZlSmF2YVNjcmlwdEFjY2Vzcyk7Ci0jaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgICAgIFNjcmlwdFByb2ZpbGVyOjppbml0aWFs
aXplKCk7Ci0jZW5kaWYKLSAgICAgICAgVjhQZXJJc29sYXRlRGF0YTo6ZW5zdXJlSW5pdGlhbGl6
ZWQodjg6Oklzb2xhdGU6OkdldEN1cnJlbnQoKSk7Ci0KLSAgICAgICAgLy8gRklYTUU6IFJlbW92
ZSB0aGUgZm9sbG93aW5nIDIgbGluZXMgd2hlbiBWOCBkZWZhdWx0IGhhcyBjaGFuZ2VkLgotICAg
ICAgICBjb25zdCBjaGFyIGVzNVJlYWRvbmx5RmxhZ1tdID0gIi0tZXM1X3JlYWRvbmx5IjsKLSAg
ICAgICAgdjg6OlY4OjpTZXRGbGFnc0Zyb21TdHJpbmcoZXM1UmVhZG9ubHlGbGFnLCBzaXplb2Yo
ZXM1UmVhZG9ubHlGbGFnKSk7CisgICAgaW5pdGlhbGl6ZVY4SWZOZWVkZWQoKTsKIAotICAgICAg
ICBpc1Y4SW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIG1fY29udGV4dCA9IGNyZWF0
ZU5ld0NvbnRleHQobV9nbG9iYWwsIDAsIDApOwotICAgIGlmIChtX2NvbnRleHQuSXNFbXB0eSgp
KQorICAgIG1fY29udGV4dC5hZG9wdChjcmVhdGVOZXdDb250ZXh0KG1fZ2xvYmFsLmdldCgpLCAw
LCAwKSk7CisgICAgaWYgKG1fY29udGV4dC5nZXQoKS5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdjg6Okxv
Y2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fY29udGV4dCk7Ci0gICAgdjg6OkNvbnRleHQ6OlNjb3Bl
IGNvbnRleHRTY29wZSh2OENvbnRleHQpOworICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29u
dGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhtX2NvbnRleHQuZ2V0KCkpOworICAg
IHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoY29udGV4dCk7CiAKLSAgICAvLyBTdG9y
ZSB0aGUgZmlyc3QgZ2xvYmFsIG9iamVjdCBjcmVhdGVkIHNvIHdlIGNhbiByZXVzZSBpdC4KLSAg
ICBpZiAobV9nbG9iYWwuSXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fZ2xvYmFsID0gdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh2OENvbnRleHQtPkdsb2JhbCgpKTsKLSAgICAgICAgLy8g
QmFpbCBvdXQgaWYgYWxsb2NhdGlvbiBvZiB0aGUgZmlyc3QgZ2xvYmFsIG9iamVjdHMgZmFpbHMu
Ci0gICAgICAgIGlmIChtX2dsb2JhbC5Jc0VtcHR5KCkpIHsKKyAgICBpZiAobV9nbG9iYWwuZ2V0
KCkuSXNFbXB0eSgpKSB7CisgICAgICAgIG1fZ2xvYmFsLnNldChjb250ZXh0LT5HbG9iYWwoKSk7
CisgICAgICAgIGlmIChtX2dsb2JhbC5nZXQoKS5Jc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGRp
c3Bvc2VDb250ZXh0SGFuZGxlcygpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBWOEdDQ29udHJvbGxlcjo6cmVnaXN0ZXJHbG9i
YWxIYW5kbGUoUFJPWFksIHRoaXMsIG1fZ2xvYmFsKTsKLSNlbmRpZgogICAgIH0KIAotICAgIG1f
cGVyQ29udGV4dERhdGEgPSBWOFBlckNvbnRleHREYXRhOjpjcmVhdGUobV9jb250ZXh0KTsKKyAg
ICBtX3BlckNvbnRleHREYXRhID0gVjhQZXJDb250ZXh0RGF0YTo6Y3JlYXRlKG1fY29udGV4dC5n
ZXQoKSk7CiAgICAgaWYgKCFtX3BlckNvbnRleHREYXRhLT5pbml0KCkpIHsKICAgICAgICAgZGlz
cG9zZUNvbnRleHRIYW5kbGVzKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICBpZiAoIWluc3RhbGxET01XaW5kb3codjhDb250ZXh0LCBtX2ZyYW1lLT5kb2N1bWVudCgpLT5k
b21XaW5kb3coKSkpIHsKKyAgICBpZiAoIWluc3RhbGxET01XaW5kb3coY29udGV4dCwgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkpKSB7CiAgICAgICAgIGRpc3Bvc2VDb250ZXh0SGFu
ZGxlcygpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMzQ2LDkgKzMzMCw5IEBA
IGJvb2wgVjhET01XaW5kb3dTaGVsbDo6aW5pdENvbnRleHRJZk5lZWRlZCgpCiAgICAgc2V0U2Vj
dXJpdHlUb2tlbigpOwogCiAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgIHY4
Q29udGV4dC0+QWxsb3dDb2RlR2VuZXJhdGlvbkZyb21TdHJpbmdzKG1fZnJhbWUtPmRvY3VtZW50
KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd0V2YWwoMCwgQ29udGVudFNlY3VyaXR5
UG9saWN5OjpTdXBwcmVzc1JlcG9ydCkpOworICAgICAgICBjb250ZXh0LT5BbGxvd0NvZGVHZW5l
cmF0aW9uRnJvbVN0cmluZ3MobV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5UG9s
aWN5KCktPmFsbG93RXZhbCgwLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlN1cHByZXNzUmVwb3J0
KSk7CiAKLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpZENyZWF0ZVNjcmlwdENv
bnRleHQobV9jb250ZXh0LCAwLCAwKTsKKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkt
PmRpZENyZWF0ZVNjcmlwdENvbnRleHQobV9jb250ZXh0LmdldCgpLCAwLCAwKTsKIAogICAgIC8v
IEZJWE1FOiBUaGlzIGlzIHdyb25nLiBXZSBzaG91bGQgYWN0dWFsbHkgZG8gdGhpcyBmb3IgdGhl
IHByb3BlciB3b3JsZCBvbmNlCiAgICAgLy8gd2UgZG8gaXNvbGF0ZWQgd29ybGRzIHRoZSBXZWJD
b3JlIHdheS4KQEAgLTQwMCwxMiArMzg0LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+
IFY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2IKIAog
dm9pZCBWOERPTVdpbmRvd1NoZWxsOjpzZXRDb250ZXh0KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNvbnRleHQpCiB7Ci0gICAgLy8gaWYgd2UgYWxyZWFkeSBoYXZlIGEgY29udGV4dCwgY2xlYXIg
aXQgYmVmb3JlIHNldHRpbmcgdGhlIG5ldyBvbmUuCi0gICAgaWYgKCFtX2NvbnRleHQuSXNFbXB0
eSgpKSB7Ci0gICAgICAgIG1fY29udGV4dC5EaXNwb3NlKCk7Ci0gICAgICAgIG1fY29udGV4dC5D
bGVhcigpOwotICAgIH0KLSAgICBtX2NvbnRleHQgPSB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4
dD46Ok5ldyhjb250ZXh0KTsKKyAgICBtX2NvbnRleHQuc2V0KGNvbnRleHQpOwogfQogCiBib29s
IFY4RE9NV2luZG93U2hlbGw6Omluc3RhbGxET01XaW5kb3codjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY29udGV4dCwgRE9NV2luZG93KiB3aW5kb3cpCkBAIC00MzUsMjIgKzQxNCwxMyBAQCB2b2lk
IFY4RE9NV2luZG93U2hlbGw6OnVwZGF0ZURvY3VtZW50V3JhcHBlcih2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZXIpCiB7CiAgICAgY2xlYXJEb2N1bWVudFdyYXBwZXIoKTsKIAotICAgIEFT
U0VSVChtX2RvY3VtZW50LklzRW1wdHkoKSk7Ci0gICAgbV9kb2N1bWVudCA9IHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcik7Ci0jaWZuZGVmIE5ERUJVRwotICAgIFY4R0ND
b250cm9sbGVyOjpyZWdpc3Rlckdsb2JhbEhhbmRsZShQUk9YWSwgdGhpcywgbV9kb2N1bWVudCk7
Ci0jZW5kaWYKKyAgICBBU1NFUlQobV9kb2N1bWVudC5nZXQoKS5Jc0VtcHR5KCkpOworICAgIG1f
ZG9jdW1lbnQuc2V0KHdyYXBwZXIpOwogfQogCiB2b2lkIFY4RE9NV2luZG93U2hlbGw6OmNsZWFy
RG9jdW1lbnRXcmFwcGVyKCkKIHsKLSAgICBpZiAoIW1fZG9jdW1lbnQuSXNFbXB0eSgpKSB7Ci0j
aWZuZGVmIE5ERUJVRwotICAgICAgICBWOEdDQ29udHJvbGxlcjo6dW5yZWdpc3Rlckdsb2JhbEhh
bmRsZSh0aGlzLCBtX2RvY3VtZW50KTsKLSNlbmRpZgotICAgICAgICBtX2RvY3VtZW50LkRpc3Bv
c2UoKTsKLSAgICAgICAgbV9kb2N1bWVudC5DbGVhcigpOwotICAgIH0KKyAgICBtX2RvY3VtZW50
LmNsZWFyKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNoZWNrRG9jdW1lbnRXcmFwcGVyKHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcHBlciwgRG9jdW1lbnQqIGRvY3VtZW50KQpAQCAtNDYyLDcgKzQz
Miw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrRG9jdW1lbnRXcmFwcGVyKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gd3JhcHBlciwgRG9jdW1lbnQqIGRvY3VtCiB2b2lkIFY4RE9NV2luZG93U2hlbGw6OnVw
ZGF0ZURvY3VtZW50V3JhcHBlckNhY2hlKCkKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7Ci0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShtX2NvbnRleHQpOwor
ICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdXNlIGEgbmV3IExvY2FsIGhhbmRsZSBoZXJlPworICAg
IHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUobV9jb250ZXh0LmdldCgpKTsKIAogICAg
IC8vIElmIHRoZSBkb2N1bWVudCBoYXMgbm8gZnJhbWUsIE5vZGVUb1Y4T2JqZWN0IG1pZ2h0IGdl
dCB0aGUKICAgICAvLyBkb2N1bWVudCB3cmFwcGVyIGZvciBhIGRvY3VtZW50IHRoYXQgaXMgYWJv
dXQgdG8gYmUgZGVsZXRlZC4KQEAgLTQ3MSwxNiArNDQyLDE3IEBAIHZvaWQgVjhET01XaW5kb3dT
aGVsbDo6dXBkYXRlRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKQogICAgIC8vIHdyYXBwZXIgY2xlYXJl
ZC4gVXNpbmcgdGhlIGNsZWFyZWQgZ2xvYmFsIGhhbmRsZSB3aWxsIGxlYWQgdG8KICAgICAvLyBj
cmFzaGVzLiBJbiB0aGlzIGNhc2Ugd2UgY2xlYXIgdGhlIGNhY2hlIGFuZCBsZXQgdGhlIERPTVdp
bmRvdwogICAgIC8vIGFjY2Vzc29yIGhhbmRsZSBhY2Nlc3MgdG8gdGhlIGRvY3VtZW50LgorICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgYmUgcG9zc2libGUgYW55bW9yZS4KICAgICBpZiAo
IW1fZnJhbWUtPmRvY3VtZW50KCktPmZyYW1lKCkpIHsKICAgICAgICAgY2xlYXJEb2N1bWVudFdy
YXBwZXJDYWNoZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGRvY3VtZW50V3JhcHBlciA9IHRvVjgobV9mcmFtZS0+ZG9jdW1lbnQoKSk7Ci0g
ICAgQVNTRVJUKGRvY3VtZW50V3JhcHBlciA9PSBtX2RvY3VtZW50IHx8IG1fZG9jdW1lbnQuSXNF
bXB0eSgpKTsKLSAgICBpZiAobV9kb2N1bWVudC5Jc0VtcHR5KCkpCisgICAgQVNTRVJUKGRvY3Vt
ZW50V3JhcHBlciA9PSBtX2RvY3VtZW50LmdldCgpIHx8IG1fZG9jdW1lbnQuZ2V0KCkuSXNFbXB0
eSgpKTsKKyAgICBpZiAobV9kb2N1bWVudC5nZXQoKS5Jc0VtcHR5KCkpCiAgICAgICAgIHVwZGF0
ZURvY3VtZW50V3JhcHBlcih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGRvY3VtZW50V3Jh
cHBlcikpOwotICAgIGNoZWNrRG9jdW1lbnRXcmFwcGVyKG1fZG9jdW1lbnQsIG1fZnJhbWUtPmRv
Y3VtZW50KCkpOworICAgIGNoZWNrRG9jdW1lbnRXcmFwcGVyKG1fZG9jdW1lbnQuZ2V0KCksIG1f
ZnJhbWUtPmRvY3VtZW50KCkpOwogCiAgICAgLy8gSWYgaW5zdGFudGlhdGlvbiBvZiB0aGUgZG9j
dW1lbnQgd3JhcHBlciBmYWlscywgY2xlYXIgdGhlIGNhY2hlCiAgICAgLy8gYW5kIGxldCB0aGUg
RE9NV2luZG93IGFjY2Vzc29yIGhhbmRsZSBhY2Nlc3MgdG8gdGhlIGRvY3VtZW50LgpAQCAtNDg5
LDI3ICs0NjEsMjggQEAgdm9pZCBWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1bWVudFdyYXBw
ZXJDYWNoZSgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUKGRvY3VtZW50V3Jh
cHBlci0+SXNPYmplY3QoKSk7Ci0gICAgbV9jb250ZXh0LT5HbG9iYWwoKS0+Rm9yY2VTZXQodjg6
OlN0cmluZzo6TmV3KCJkb2N1bWVudCIpLCBkb2N1bWVudFdyYXBwZXIsIHN0YXRpY19jYXN0PHY4
OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6OlJlYWRPbmx5IHwgdjg6OkRvbnREZWxldGUpKTsKKyAg
ICBtX2NvbnRleHQuZ2V0KCktPkdsb2JhbCgpLT5Gb3JjZVNldCh2ODo6U3RyaW5nOjpOZXcoImRv
Y3VtZW50IiksIGRvY3VtZW50V3JhcHBlciwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmli
dXRlPih2ODo6UmVhZE9ubHkgfCB2ODo6RG9udERlbGV0ZSkpOwogCiAgICAgLy8gV2UgYWxzbyBz
dGFzaCBhIHJlZmVyZW5jZSB0byB0aGUgZG9jdW1lbnQgb24gdGhlIHJlYWwgZ2xvYmFsIG9iamVj
dCBzbyB0aGF0CiAgICAgLy8gRE9NV2luZG93IG9iamVjdHMgd2Ugb2J0YWluIGZyb20gSmF2YVNj
cmlwdCByZWZlcmVuY2VzIGFyZSBndWFyYW50ZWVkIHRvIGhhdmUKICAgICAvLyBsaXZlIERvY3Vt
ZW50IG9iamVjdHMuCi0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB2OFJlYWxHbG9iYWwgPSB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KG1fY29udGV4dC0+R2xvYmFsKCktPkdldFByb3Rv
dHlwZSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHY4UmVhbEdsb2JhbCA9IHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3QobV9jb250ZXh0LmdldCgpLT5HbG9iYWwoKS0+R2V0UHJv
dG90eXBlKCkpOwogICAgIHY4UmVhbEdsb2JhbC0+U2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9w
ZXJ0eU5hbWU6OmRvY3VtZW50KCksIGRvY3VtZW50V3JhcHBlcik7CiB9CiAKIHZvaWQgVjhET01X
aW5kb3dTaGVsbDo6Y2xlYXJEb2N1bWVudFdyYXBwZXJDYWNoZSgpCiB7Ci0gICAgQVNTRVJUKCFt
X2NvbnRleHQuSXNFbXB0eSgpKTsKLSAgICBtX2NvbnRleHQtPkdsb2JhbCgpLT5Gb3JjZURlbGV0
ZSh2ODo6U3RyaW5nOjpOZXcoImRvY3VtZW50IikpOworICAgIEFTU0VSVCghbV9jb250ZXh0Lmdl
dCgpLklzRW1wdHkoKSk7CisgICAgbV9jb250ZXh0LmdldCgpLT5HbG9iYWwoKS0+Rm9yY2VEZWxl
dGUodjg6OlN0cmluZzo6TmV3KCJkb2N1bWVudCIpKTsKIH0KIAogdm9pZCBWOERPTVdpbmRvd1No
ZWxsOjpzZXRTZWN1cml0eVRva2VuKCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2Zy
YW1lLT5kb2N1bWVudCgpOwotICAgIC8vIFNldHVwIHNlY3VyaXR5IG9yaWdpbiBhbmQgc2VjdXJp
dHkgdG9rZW4uCisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgcG9zc2libGUgYW55
bW9yZS4KICAgICBpZiAoIWRvY3VtZW50KSB7Ci0gICAgICAgIG1fY29udGV4dC0+VXNlRGVmYXVs
dFNlY3VyaXR5VG9rZW4oKTsKKyAgICAgICAgbV9jb250ZXh0LmdldCgpLT5Vc2VEZWZhdWx0U2Vj
dXJpdHlUb2tlbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MjksMjIgKzUwMiwy
MyBAQCB2b2lkIFY4RE9NV2luZG93U2hlbGw6OnNldFNlY3VyaXR5VG9rZW4oKQogICAgIC8vIGNh
c2UsIHdlIHVzZSB0aGUgZ2xvYmFsIG9iamVjdCBhcyB0aGUgc2VjdXJpdHkgdG9rZW4gdG8gYXZv
aWQKICAgICAvLyBjYWxsaW5nIGNhbkFjY2VzcyB3aGVuIGEgc2NyaXB0IGFjY2Vzc2VzIGl0cyBv
d24gb2JqZWN0cy4KICAgICBpZiAodG9rZW4uaXNFbXB0eSgpIHx8IHRva2VuID09ICJudWxsIikg
ewotICAgICAgICBtX2NvbnRleHQtPlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7CisgICAgICAg
IG1fY29udGV4dC5nZXQoKS0+VXNlRGVmYXVsdFNlY3VyaXR5VG9rZW4oKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIENTdHJpbmcgdXRmOFRva2VuID0gdG9rZW4udXRmOCgpOwogICAg
IC8vIE5PVEU6IFY4IGRvZXMgaWRlbnRpdHkgY29tcGFyaXNvbiBpbiBmYXN0IHBhdGgsIG11c3Qg
dXNlIGEgc3ltYm9sCiAgICAgLy8gYXMgdGhlIHNlY3VyaXR5IHRva2VuLgotICAgIG1fY29udGV4
dC0+U2V0U2VjdXJpdHlUb2tlbih2ODo6U3RyaW5nOjpOZXdTeW1ib2wodXRmOFRva2VuLmRhdGEo
KSwgdXRmOFRva2VuLmxlbmd0aCgpKSk7CisgICAgbV9jb250ZXh0LmdldCgpLT5TZXRTZWN1cml0
eVRva2VuKHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCh1dGY4VG9rZW4uZGF0YSgpLCB1dGY4VG9rZW4u
bGVuZ3RoKCkpKTsKIH0KIAogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1bWVudCgp
CiB7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIHBvc3NpYmxlIGFueW1vcmUuCiAg
ICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
bV9nbG9iYWwuSXNFbXB0eSgpKQorICAgIGlmIChtX2dsb2JhbC5nZXQoKS5Jc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoZXJlIGlzIGFuIGV4aXN0aW5nIEphdmFTY3JpcHQg
d3JhcHBlciBmb3IgdGhlIGdsb2JhbCBvYmplY3QKQEAgLTU2MSw5ICs1MzUsOSBAQCB2b2lkIFY4
RE9NV2luZG93U2hlbGw6OnVwZGF0ZURvY3VtZW50KCkKICAgICB1cGRhdGVTZWN1cml0eU9yaWdp
bigpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBwcm9wZXJ0eSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3N0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBwcm9wZXJ0eSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKLSAgICAvLyBGSVhNRShhbnRvbm0pOiBj
b25zaWRlciBwYXNzaW5nIEF0b21pY1N0cmluZ0ltcGwgZGlyZWN0bHkuCisgICAgLy8gRklYTUU6
IENvbnNpZGVyIHBhc3NpbmcgQXRvbWljU3RyaW5nSW1wbCBkaXJlY3RseS4KICAgICBBdG9taWNT
dHJpbmcgbmFtZSA9IHRvV2ViQ29yZUF0b21pY1N0cmluZyhwcm9wZXJ0eSk7CiAgICAgSFRNTERv
Y3VtZW50KiBodG1sRG9jdW1lbnQgPSBWOEhUTUxEb2N1bWVudDo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7CiAgICAgQVNTRVJUKGh0bWxEb2N1bWVudCk7CkBAIC01NzYsNDAgKzU1MCw0MCBAQCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBwcm9wZXJ0
eSwgY29uc3Qgdjg6OkFjY2Vzc29ySQogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAK
LXZvaWQgVjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtQWRkZWQoSFRNTERvY3VtZW50KiBkb2Ms
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKK3ZvaWQgVjhET01XaW5kb3dTaGVsbDo6bmFtZWRJ
dGVtQWRkZWQoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KQogewogICAgIGlmICghaW5pdENvbnRleHRJZk5lZWRlZCgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgdjg6OkNvbnRleHQ6OlNjb3Bl
IGNvbnRleHRTY29wZShtX2NvbnRleHQpOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0
U2NvcGUobV9jb250ZXh0LmdldCgpKTsKIAotICAgIEFTU0VSVCghbV9kb2N1bWVudC5Jc0VtcHR5
KCkpOwotICAgIGNoZWNrRG9jdW1lbnRXcmFwcGVyKG1fZG9jdW1lbnQsIGRvYyk7Ci0gICAgbV9k
b2N1bWVudC0+U2V0QWNjZXNzb3IodjhTdHJpbmcobmFtZSksIGdldHRlcik7CisgICAgQVNTRVJU
KCFtX2RvY3VtZW50LmdldCgpLklzRW1wdHkoKSk7CisgICAgY2hlY2tEb2N1bWVudFdyYXBwZXIo
bV9kb2N1bWVudC5nZXQoKSwgZG9jdW1lbnQpOworICAgIG1fZG9jdW1lbnQuZ2V0KCktPlNldEFj
Y2Vzc29yKHY4U3RyaW5nKG5hbWUpLCBnZXR0ZXIpOwogfQogCi12b2lkIFY4RE9NV2luZG93U2hl
bGw6Om5hbWVkSXRlbVJlbW92ZWQoSFRNTERvY3VtZW50KiBkb2MsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSkKK3ZvaWQgVjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtUmVtb3ZlZChIVE1MRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7Ci0gICAgaWYgKGRv
Yy0+aGFzTmFtZWRJdGVtKG5hbWUuaW1wbCgpKSB8fCBkb2MtPmhhc0V4dHJhTmFtZWRJdGVtKG5h
bWUuaW1wbCgpKSkKKyAgICBpZiAoZG9jdW1lbnQtPmhhc05hbWVkSXRlbShuYW1lLmltcGwoKSkg
fHwgZG9jdW1lbnQtPmhhc0V4dHJhTmFtZWRJdGVtKG5hbWUuaW1wbCgpKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKCFpbml0Q29udGV4dElmTmVlZGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKLSAgICB2ODo6Q29udGV4dDo6U2Nv
cGUgY29udGV4dFNjb3BlKG1fY29udGV4dCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRl
eHRTY29wZShtX2NvbnRleHQuZ2V0KCkpOwogCi0gICAgQVNTRVJUKCFtX2RvY3VtZW50LklzRW1w
dHkoKSk7Ci0gICAgY2hlY2tEb2N1bWVudFdyYXBwZXIobV9kb2N1bWVudCwgZG9jKTsKLSAgICBt
X2RvY3VtZW50LT5EZWxldGUodjhTdHJpbmcobmFtZSkpOworICAgIEFTU0VSVCghbV9kb2N1bWVu
dC5nZXQoKS5Jc0VtcHR5KCkpOworICAgIGNoZWNrRG9jdW1lbnRXcmFwcGVyKG1fZG9jdW1lbnQu
Z2V0KCksIGRvY3VtZW50KTsKKyAgICBtX2RvY3VtZW50LmdldCgpLT5EZWxldGUodjhTdHJpbmco
bmFtZSkpOwogfQogCiB2b2lkIFY4RE9NV2luZG93U2hlbGw6OnVwZGF0ZVNlY3VyaXR5T3JpZ2lu
KCkKIHsKLSAgICBpZiAobV9jb250ZXh0LklzRW1wdHkoKSkKKyAgICBpZiAobV9jb250ZXh0Lmdl
dCgpLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHY4OjpIYW5kbGVTY29wZSBzY29w
ZTsKKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgc2V0U2VjdXJpdHlUb2tl
bigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdp
bmRvd1NoZWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxs
LmgKaW5kZXggYjI1YmJmYzQ4OGVkN2Q2ZDUzOTk1Y2Y2OWM1Y2E5NmYyMDVmODFlYS4uZTJmZjgx
OTM3MGUzNWRkZTBmYTVmOGRjZTAxOTViMmI4MTEzMDdhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuaApAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRl
ZiBWOERPTVdpbmRvd1NoZWxsX2gKICNkZWZpbmUgVjhET01XaW5kb3dTaGVsbF9oCiAKKyNpbmNs
dWRlICJTY29wZWRQZXJzaXN0ZW50LmgiCiAjaW5jbHVkZSAiVjhQZXJDb250ZXh0RGF0YS5oIgog
I2luY2x1ZGUgIldyYXBwZXJUeXBlSW5mby5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBA
IC01Miw3ICs1Myw3IEBAIGNsYXNzIFY4RE9NV2luZG93U2hlbGwgOiBwdWJsaWMgUmVmQ291bnRl
ZDxWOERPTVdpbmRvd1NoZWxsPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VjhE
T01XaW5kb3dTaGVsbD4gY3JlYXRlKEZyYW1lKik7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9CisgICAgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsg
fQogCiAgICAgLy8gVXBkYXRlIGRvY3VtZW50IG9iamVjdCBvZiB0aGUgZnJhbWUuCiAgICAgdm9p
ZCB1cGRhdGVEb2N1bWVudCgpOwpAQCAtOTksOSArMTAwLDkgQEAgcHJpdmF0ZToKIAogICAgIE93
blB0cjxWOFBlckNvbnRleHREYXRhPiBtX3BlckNvbnRleHREYXRhOwogCi0gICAgdjg6OlBlcnNp
c3RlbnQ8djg6OkNvbnRleHQ+IG1fY29udGV4dDsKLSAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0PiBtX2dsb2JhbDsKLSAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2RvY3VtZW50
OworICAgIFNjb3BlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IG1fY29udGV4dDsKKyAgICBTY29w
ZWRQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fZ2xvYmFsOworICAgIFNjb3BlZFBlcnNpc3RlbnQ8
djg6Ok9iamVjdD4gbV9kb2N1bWVudDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>