<?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>44280</bug_id>
          
          <creation_ts>2010-08-19 11:40:00 -0700</creation_ts>
          <short_desc>Add modifier key info to policy client functions in WebKit2</short_desc>
          <delta_ts>2010-08-19 16:43:34 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>266860</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-08-19 11:40:00 -0700</bug_when>
    <thetext>Add modifier key info to policy client functions in WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266871</commentid>
    <comment_count>1</comment_count>
      <attachid>64883</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-08-19 11:51:06 -0700</bug_when>
    <thetext>Created attachment 64883
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266873</commentid>
    <comment_count>2</comment_count>
      <attachid>64883</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-08-19 11:56:56 -0700</bug_when>
    <thetext>Comment on attachment 64883
Patch

&gt; @@ -521,21 +521,23 @@ void WebPageProxy::didReceiveMessage(Cor
&gt;          case WebPageProxyMessage::DecidePolicyForNavigationAction: {
&gt;              uint64_t frameID;
&gt;              uint32_t navigationType;
&gt; +            uint32_t modifiers;
&gt;              String url;
&gt;              uint64_t listenerID;
&gt; -            if (!arguments-&gt;decode(CoreIPC::Out(frameID, navigationType, url, listenerID)))
&gt; +            if (!arguments-&gt;decode(CoreIPC::Out(frameID, navigationType, modifiers, url, listenerID)))
&gt;                  return;
&gt; -            decidePolicyForNavigationAction(webFrame(frameID), static_cast&lt;NavigationType&gt;(navigationType), url, listenerID);
&gt; +            decidePolicyForNavigationAction(webFrame(frameID), static_cast&lt;NavigationType&gt;(navigationType), static_cast&lt;WebEvent::Modifiers&gt;(modifiers), url, listenerID);
&gt;              break;
&gt;          }
&gt;          case WebPageProxyMessage::DecidePolicyForNewWindowAction: {
&gt;              uint64_t frameID;
&gt;              uint32_t navigationType;
&gt; +            uint32_t modifiers;

Can we use WebEvent::Modifiers here?


&gt; +static uint32_t modifiersForNavigationAction(const NavigationAction&amp; navigationAction)
&gt; +{
&gt; +    uint32_t modifiers = 0;
&gt; +    if (const UIEventWithKeyState* keyStateEvent = findEventWithKeyState(const_cast&lt;Event*&gt;(navigationAction.event()))) {
&gt; +        if (keyStateEvent-&gt;shiftKey())
&gt; +            modifiers |= WebEvent::ShiftKey;
&gt; +        if (keyStateEvent-&gt;ctrlKey())
&gt; +            modifiers |= WebEvent::ControlKey;
&gt; +        if (keyStateEvent-&gt;altKey())
&gt; +            modifiers |= WebEvent::AltKey;
&gt; +        if (keyStateEvent-&gt;metaKey())
&gt; +            modifiers |= WebEvent::MetaKey;
&gt; +    }
&gt; +
&gt; +    return modifiers;
&gt; +}

And here?

&gt;  void WebFrameLoaderClient::dispatchDecidePolicyForMIMEType(FramePolicyFunction function, const String&amp; MIMEType, const ResourceRequest&amp; request)
&gt;  {
&gt;      WebPage* webPage = m_frame-&gt;page();
&gt; @@ -436,8 +455,10 @@ void WebFrameLoaderClient::dispatchDecid
&gt;      // FIXME: Pass the frame name.
&gt;      const String&amp; url = request.url().string(); // FIXME: Pass entire request.
&gt;  
&gt; +    uint32_t modifiers = modifiersForNavigationAction(navigationAction);
&gt; +
&gt;      WebProcess::shared().connection()-&gt;send(WebPageProxyMessage::DecidePolicyForNewWindowAction, webPage-&gt;pageID(),
&gt; -                                            CoreIPC::In(m_frame-&gt;frameID(), (uint32_t)navigationAction.type(), url, listenerID));
&gt; +                                            CoreIPC::In(m_frame-&gt;frameID(), (uint32_t)navigationAction.type(), modifiers, url, listenerID));
&gt;  }

And here?

&gt;  void WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(FramePolicyFunction function, const NavigationAction&amp; navigationAction, const ResourceRequest&amp; request, PassRefPtr&lt;FormState&gt;)
&gt; @@ -451,8 +472,10 @@ void WebFrameLoaderClient::dispatchDecid
&gt;      // FIXME: Pass more than just the navigation action type.
&gt;      const String&amp; url = request.url().string(); // FIXME: Pass entire request.
&gt;  
&gt; +    uint32_t modifiers = modifiersForNavigationAction(navigationAction);
&gt; +
&gt;      WebProcess::shared().connection()-&gt;send(WebPageProxyMessage::DecidePolicyForNavigationAction, webPage-&gt;pageID(),
&gt; -                                            CoreIPC::In(m_frame-&gt;frameID(), (uint32_t)navigationAction.type(), url, listenerID));
&gt; +                                            CoreIPC::In(m_frame-&gt;frameID(), (uint32_t)navigationAction.type(), modifiers, url, listenerID));
&gt;  }

And here?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266878</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-08-19 12:02:05 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 64883 [details])
&gt; &gt; @@ -521,21 +521,23 @@ void WebPageProxy::didReceiveMessage(Cor
&gt; &gt;          case WebPageProxyMessage::DecidePolicyForNavigationAction: {
&gt; &gt;              uint64_t frameID;
&gt; &gt;              uint32_t navigationType;
&gt; &gt; +            uint32_t modifiers;
&gt; &gt;              String url;
&gt; &gt;              uint64_t listenerID;
&gt; &gt; -            if (!arguments-&gt;decode(CoreIPC::Out(frameID, navigationType, url, listenerID)))
&gt; &gt; +            if (!arguments-&gt;decode(CoreIPC::Out(frameID, navigationType, modifiers, url, listenerID)))
&gt; &gt;                  return;
&gt; &gt; -            decidePolicyForNavigationAction(webFrame(frameID), static_cast&lt;NavigationType&gt;(navigationType), url, listenerID);
&gt; &gt; +            decidePolicyForNavigationAction(webFrame(frameID), static_cast&lt;NavigationType&gt;(navigationType), static_cast&lt;WebEvent::Modifiers&gt;(modifiers), url, listenerID);
&gt; &gt;              break;
&gt; &gt;          }
&gt; &gt;          case WebPageProxyMessage::DecidePolicyForNewWindowAction: {
&gt; &gt;              uint64_t frameID;
&gt; &gt;              uint32_t navigationType;
&gt; &gt; +            uint32_t modifiers;
&gt; 
&gt; Can we use WebEvent::Modifiers here?
&gt; 

No. We need to give an explicit size when encoding/decoding. This will all be better with your typed IPC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266964</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-08-19 14:28:09 -0700</bug_when>
    <thetext>Landed in r65699.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267042</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-19 16:43:34 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65699 might have broken SnowLeopard Intel Release (Tests)
The following changes are on the blame list:
http://trac.webkit.org/changeset/65699
http://trac.webkit.org/changeset/65700
http://trac.webkit.org/changeset/65701
http://trac.webkit.org/changeset/65702
http://trac.webkit.org/changeset/65703
http://trac.webkit.org/changeset/65704
http://trac.webkit.org/changeset/65705
http://trac.webkit.org/changeset/65706
http://trac.webkit.org/changeset/65707
http://trac.webkit.org/changeset/65708
http://trac.webkit.org/changeset/65709
http://trac.webkit.org/changeset/65710
http://trac.webkit.org/changeset/65711
http://trac.webkit.org/changeset/65712
http://trac.webkit.org/changeset/65713</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64883</attachid>
            <date>2010-08-19 11:51:06 -0700</date>
            <delta_ts>2010-08-19 11:56:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>16506</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTY4NikKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDgtMTkgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbW9k
aWZpZXIga2V5IGluZm8gdG8gcG9saWN5IGNsaWVudCBmdW5jdGlvbnMgaW4gV2ViS2l0MgorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vODE4NTI5OD4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MjgwCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mv
V0tBUElDYXN0Lmg6CisgICAgICAgIEFkZCBjb252ZXJzaW9uIGZ1bmN0aW9uIGZvciBtb2RpZmll
cnMgYW5kIHJlbmFtZSBhbiBpbmNvcnJlY3RseSBuYW1lZAorICAgICAgICB0b1dLIHRvIHRvUmVm
LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oOgorICAgICAgICBBZGQgV0tF
dmVudE1vZGlmaWVycyBlbnVtLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5l
d1dpbmRvd0FjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQb2xpY3lDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQb2xpY3lDbGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQb2xpY3lDbGllbnQ6OmRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlv
bik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBvbGljeUNsaWVudC5oOgorICAgICAgICBQaXBl
IHRocm91Z2ggbW9kaWZpZXIgaW5mby4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0Ojptb2RpZmll
cnNGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbik6CisgICAgICAgIEdldCBtb2RpZmllciBpbmZvIG91dCBvZiB0aGUgTmF2
aWdhdGlvbkluZm8gY2xhc3MgaW4gdGhlIHNhbWUgbWFubmVyIGFzCisgICAgICAgIFdlYktpdDEu
CisKIDIwMTAtMDgtMTggIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CShyZXZpc2lvbiA2NTY3MykKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUyMSwyMSArNTIxLDIzIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRSZWNlaXZlTWVzc2FnZShDb3IKICAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpE
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOiB7CiAgICAgICAgICAgICB1aW50NjRfdCBm
cmFtZUlEOwogICAgICAgICAgICAgdWludDMyX3QgbmF2aWdhdGlvblR5cGU7CisgICAgICAgICAg
ICB1aW50MzJfdCBtb2RpZmllcnM7CiAgICAgICAgICAgICBTdHJpbmcgdXJsOwogICAgICAgICAg
ICAgdWludDY0X3QgbGlzdGVuZXJJRDsKLSAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNv
ZGUoQ29yZUlQQzo6T3V0KGZyYW1lSUQsIG5hdmlnYXRpb25UeXBlLCB1cmwsIGxpc3RlbmVySUQp
KSkKKyAgICAgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGZyYW1l
SUQsIG5hdmlnYXRpb25UeXBlLCBtb2RpZmllcnMsIHVybCwgbGlzdGVuZXJJRCkpKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24od2ViRnJhbWUoZnJhbWVJRCksIHN0YXRpY19jYXN0PE5hdmlnYXRpb25UeXBlPihuYXZp
Z2F0aW9uVHlwZSksIHVybCwgbGlzdGVuZXJJRCk7CisgICAgICAgICAgICBkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKHdlYkZyYW1lKGZyYW1lSUQpLCBzdGF0aWNfY2FzdDxOYXZpZ2F0
aW9uVHlwZT4obmF2aWdhdGlvblR5cGUpLCBzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZpZXJz
Pihtb2RpZmllcnMpLCB1cmwsIGxpc3RlbmVySUQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpEZWNpZGVQb2xpY3lGb3JO
ZXdXaW5kb3dBY3Rpb246IHsKICAgICAgICAgICAgIHVpbnQ2NF90IGZyYW1lSUQ7CiAgICAgICAg
ICAgICB1aW50MzJfdCBuYXZpZ2F0aW9uVHlwZTsKKyAgICAgICAgICAgIHVpbnQzMl90IG1vZGlm
aWVyczsKICAgICAgICAgICAgIFN0cmluZyB1cmw7CiAgICAgICAgICAgICB1aW50NjRfdCBsaXN0
ZW5lcklEOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQo
ZnJhbWVJRCwgbmF2aWdhdGlvblR5cGUsIHVybCwgbGlzdGVuZXJJRCkpKQorICAgICAgICAgICAg
aWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQoZnJhbWVJRCwgbmF2aWdhdGlvblR5
cGUsIG1vZGlmaWVycywgdXJsLCBsaXN0ZW5lcklEKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKHdlYkZyYW1lKGZy
YW1lSUQpLCBzdGF0aWNfY2FzdDxOYXZpZ2F0aW9uVHlwZT4obmF2aWdhdGlvblR5cGUpLCB1cmws
IGxpc3RlbmVySUQpOworICAgICAgICAgICAgZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9u
KHdlYkZyYW1lKGZyYW1lSUQpLCBzdGF0aWNfY2FzdDxOYXZpZ2F0aW9uVHlwZT4obmF2aWdhdGlv
blR5cGUpLCBzdGF0aWNfY2FzdDxXZWJFdmVudDo6TW9kaWZpZXJzPihtb2RpZmllcnMpLCB1cmws
IGxpc3RlbmVySUQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZTogewpAQCAtODMw
LDE3ICs4MzIsMTcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpcnN0VmlzdWFsbHlOb25FbQog
CiAvLyBQb2xpY3lDbGllbnQKIAotdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb24oV2ViRnJhbWVQcm94eSogZnJhbWUsIE5hdmlnYXRpb25UeXBlIG5hdmln
YXRpb25UeXBlLCBjb25zdCBTdHJpbmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCkKK3ZvaWQg
V2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdlYkZyYW1lUHJv
eHkqIGZyYW1lLCBOYXZpZ2F0aW9uVHlwZSBuYXZpZ2F0aW9uVHlwZSwgV2ViRXZlbnQ6Ok1vZGlm
aWVycyBtb2RpZmllcnMsIGNvbnN0IFN0cmluZyYgdXJsLCB1aW50NjRfdCBsaXN0ZW5lcklEKQog
ewogICAgIFJlZlB0cjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+IGxpc3RlbmVyID0gZnJh
bWUtPnNldFVwUG9saWN5TGlzdGVuZXJQcm94eShsaXN0ZW5lcklEKTsKLSAgICBpZiAoIW1fcG9s
aWN5Q2xpZW50LmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24odGhpcywgbmF2aWdhdGlv
blR5cGUsIHVybCwgZnJhbWUsIGxpc3RlbmVyLmdldCgpKSkKKyAgICBpZiAoIW1fcG9saWN5Q2xp
ZW50LmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24odGhpcywgbmF2aWdhdGlvblR5cGUs
IG1vZGlmaWVycywgdXJsLCBmcmFtZSwgbGlzdGVuZXIuZ2V0KCkpKQogICAgICAgICBsaXN0ZW5l
ci0+dXNlKCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5k
b3dBY3Rpb24oV2ViRnJhbWVQcm94eSogZnJhbWUsIE5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25U
eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCkKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oV2ViRnJhbWVQcm94eSogZnJh
bWUsIE5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlLCBXZWJFdmVudDo6TW9kaWZpZXJzIG1v
ZGlmaWVycywgY29uc3QgU3RyaW5nJiB1cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQpCiB7CiAgICAg
UmVmUHRyPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4gbGlzdGVuZXIgPSBmcmFtZS0+c2V0
VXBQb2xpY3lMaXN0ZW5lclByb3h5KGxpc3RlbmVySUQpOwotICAgIGlmICghbV9wb2xpY3lDbGll
bnQuZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKHRoaXMsIG5hdmlnYXRpb25UeXBlLCB1
cmwsIGZyYW1lLCBsaXN0ZW5lci5nZXQoKSkpCisgICAgaWYgKCFtX3BvbGljeUNsaWVudC5kZWNp
ZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24odGhpcywgbmF2aWdhdGlvblR5cGUsIG1vZGlmaWVy
cywgdXJsLCBmcmFtZSwgbGlzdGVuZXIuZ2V0KCkpKQogICAgICAgICBsaXN0ZW5lci0+dXNlKCk7
CiB9CiAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA2NTY3MykKKysr
IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAs
OCArMTkwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZENoYW5nZVByb2dyZXNzKGRvdWJsZSk7
CiAgICAgdm9pZCBkaWRGaW5pc2hQcm9ncmVzcygpOwogICAgIAotICAgIHZvaWQgZGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXZWJGcmFtZVByb3h5KiwgV2ViQ29yZTo6TmF2aWdhdGlv
blR5cGUgbmF2aWdhdGlvblR5cGUsIGNvbnN0IFdURjo6U3RyaW5nJiB1cmwsIHVpbnQ2NF90IGxp
c3RlbmVySUQpOwotICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKFdlYkZy
YW1lUHJveHkqLCBXZWJDb3JlOjpOYXZpZ2F0aW9uVHlwZSBuYXZpZ2F0aW9uVHlwZSwgY29uc3Qg
V1RGOjpTdHJpbmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCk7CisgICAgdm9pZCBkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdlYkZyYW1lUHJveHkqLCBXZWJDb3JlOjpOYXZpZ2F0
aW9uVHlwZSBuYXZpZ2F0aW9uVHlwZSwgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMsIGNv
bnN0IFdURjo6U3RyaW5nJiB1cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQpOworICAgIHZvaWQgZGVj
aWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKFdlYkZyYW1lUHJveHkqLCBXZWJDb3JlOjpOYXZp
Z2F0aW9uVHlwZSBuYXZpZ2F0aW9uVHlwZSwgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMs
IGNvbnN0IFdURjo6U3RyaW5nJiB1cmwsIHVpbnQ2NF90IGxpc3RlbmVySUQpOwogICAgIHZvaWQg
ZGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUoV2ViRnJhbWVQcm94eSosIGNvbnN0IFdURjo6U3RyaW5n
JiBNSU1FVHlwZSwgY29uc3QgV1RGOjpTdHJpbmcmIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCk7
CiAKICAgICB2b2lkIHdpbGxTdWJtaXRGb3JtKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBXZWJGcmFt
ZVByb3h5KiBmcmFtZVNvdXJjZSwgVmVjdG9yPHN0ZDo6cGFpcjxXVEY6OlN0cmluZywgV1RGOjpT
dHJpbmc+ID4mIHRleHRGaWVsZFZhbHVlcywgdWludDY0X3QgbGlzdGVuZXJJRCk7CkluZGV4OiBX
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQb2xpY3lDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvVUlQcm9jZXNzL1dlYlBvbGljeUNsaWVudC5jcHAJKHJldmlzaW9uIDY1NjczKQorKysgV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUG9saWN5Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUs
MjEgKzQ1LDIxIEBAIHZvaWQgV2ViUG9saWN5Q2xpZW50Ojppbml0aWFsaXplKGNvbnN0IFcKICAg
ICAgICAgbWVtc2V0KCZtX3BhZ2VQb2xpY3lDbGllbnQsIDAsIHNpemVvZihtX3BhZ2VQb2xpY3lD
bGllbnQpKTsKIH0KIAotYm9vbCBXZWJQb2xpY3lDbGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb24oV2ViUGFnZVByb3h5KiBwYWdlLCBOYXZpZ2F0aW9uVHlwZSB0eXBlLCBjb25z
dCBTdHJpbmcmIHVybCwgV2ViRnJhbWVQcm94eSogZnJhbWUsIFdlYkZyYW1lUG9saWN5TGlzdGVu
ZXJQcm94eSogbGlzdGVuZXIpCitib29sIFdlYlBvbGljeUNsaWVudDo6ZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbihXZWJQYWdlUHJveHkqIHBhZ2UsIE5hdmlnYXRpb25UeXBlIHR5cGUs
IFdlYkV2ZW50OjpNb2RpZmllcnMgbW9kaWZpZXJzLCBjb25zdCBTdHJpbmcmIHVybCwgV2ViRnJh
bWVQcm94eSogZnJhbWUsIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSogbGlzdGVuZXIpCiB7
CiAgICAgaWYgKCFtX3BhZ2VQb2xpY3lDbGllbnQuZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9wYWdlUG9saWN5Q2xpZW50LmRl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24odG9SZWYocGFnZSksIHRvV0sodHlwZSksIHRv
VVJMUmVmKHVybC5pbXBsKCkpLCB0b1JlZihmcmFtZSksIHRvUmVmKGxpc3RlbmVyKSwgbV9wYWdl
UG9saWN5Q2xpZW50LmNsaWVudEluZm8pOworICAgIG1fcGFnZVBvbGljeUNsaWVudC5kZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKHRvUmVmKHBhZ2UpLCB0b1JlZih0eXBlKSwgdG9SZWYo
bW9kaWZpZXJzKSwgdG9VUkxSZWYodXJsLmltcGwoKSksIHRvUmVmKGZyYW1lKSwgdG9SZWYobGlz
dGVuZXIpLCBtX3BhZ2VQb2xpY3lDbGllbnQuY2xpZW50SW5mbyk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgV2ViUG9saWN5Q2xpZW50OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rp
b24oV2ViUGFnZVByb3h5KiBwYWdlLCBOYXZpZ2F0aW9uVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcm
IHVybCwgV2ViRnJhbWVQcm94eSogZnJhbWUsIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSog
bGlzdGVuZXIpCitib29sIFdlYlBvbGljeUNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93
QWN0aW9uKFdlYlBhZ2VQcm94eSogcGFnZSwgTmF2aWdhdGlvblR5cGUgdHlwZSwgV2ViRXZlbnQ6
Ok1vZGlmaWVycyBtb2RpZmllcnMsIGNvbnN0IFN0cmluZyYgdXJsLCBXZWJGcmFtZVByb3h5KiBm
cmFtZSwgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KiBsaXN0ZW5lcikKIHsKICAgICBpZiAo
IW1fcGFnZVBvbGljeUNsaWVudC5kZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24pCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fcGFnZVBvbGljeUNsaWVudC5kZWNpZGVQb2xpY3lG
b3JOZXdXaW5kb3dBY3Rpb24odG9SZWYocGFnZSksIHRvV0sodHlwZSksIHRvVVJMUmVmKHVybC5p
bXBsKCkpLCB0b1JlZihmcmFtZSksIHRvUmVmKGxpc3RlbmVyKSwgbV9wYWdlUG9saWN5Q2xpZW50
LmNsaWVudEluZm8pOworICAgIG1fcGFnZVBvbGljeUNsaWVudC5kZWNpZGVQb2xpY3lGb3JOZXdX
aW5kb3dBY3Rpb24odG9SZWYocGFnZSksIHRvUmVmKHR5cGUpLCB0b1JlZihtb2RpZmllcnMpLCB0
b1VSTFJlZih1cmwuaW1wbCgpKSwgdG9SZWYoZnJhbWUpLCB0b1JlZihsaXN0ZW5lciksIG1fcGFn
ZVBvbGljeUNsaWVudC5jbGllbnRJbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDog
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUG9saWN5Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUG9saWN5Q2xpZW50LmgJKHJldmlzaW9uIDY1NjczKQorKysgV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUG9saWN5Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICNkZWZpbmUgV2ViUG9saWN5Q2xpZW50X2gKIAogI2luY2x1ZGUgIldLUGFnZS5oIgor
I2luY2x1ZGUgIldlYkV2ZW50LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVz
Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIApAQCAtNDEsOCArNDIsOCBAQCBwdWJsaWM6
CiAgICAgV2ViUG9saWN5Q2xpZW50KCk7CiAgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFdLUGFn
ZVBvbGljeUNsaWVudCopOwogCi0gICAgYm9vbCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0
aW9uKFdlYlBhZ2VQcm94eSosIFdlYkNvcmU6Ok5hdmlnYXRpb25UeXBlLCBjb25zdCBXVEY6OlN0
cmluZyYgdXJsLCBXZWJGcmFtZVByb3h5KiwgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Kik7
Ci0gICAgYm9vbCBkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oV2ViUGFnZVByb3h5Kiwg
V2ViQ29yZTo6TmF2aWdhdGlvblR5cGUsIGNvbnN0IFdURjo6U3RyaW5nJiB1cmwsIFdlYkZyYW1l
UHJveHkqLCBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkqKTsKKyAgICBib29sIGRlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb24oV2ViUGFnZVByb3h5KiwgV2ViQ29yZTo6TmF2aWdhdGlv
blR5cGUsIFdlYkV2ZW50OjpNb2RpZmllcnMsIGNvbnN0IFdURjo6U3RyaW5nJiB1cmwsIFdlYkZy
YW1lUHJveHkqLCBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkqKTsKKyAgICBib29sIGRlY2lk
ZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihXZWJQYWdlUHJveHkqLCBXZWJDb3JlOjpOYXZpZ2F0
aW9uVHlwZSwgV2ViRXZlbnQ6Ok1vZGlmaWVycywgY29uc3QgV1RGOjpTdHJpbmcmIHVybCwgV2Vi
RnJhbWVQcm94eSosIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSopOwogICAgIGJvb2wgZGVj
aWRlUG9saWN5Rm9yTUlNRVR5cGUoV2ViUGFnZVByb3h5KiwgY29uc3QgV1RGOjpTdHJpbmcmLCBj
b25zdCBXVEY6OlN0cmluZyYgdXJsLCBXZWJGcmFtZVByb3h5KiwgV2ViRnJhbWVQb2xpY3lMaXN0
ZW5lclByb3h5Kik7CiAKIHByaXZhdGU6CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9X
S0FQSUNhc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNh
c3QuaAkocmV2aXNpb24gNjU2NzMpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNh
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiV0tCYXNl
LmgiCiAjaW5jbHVkZSAiV0tQYWdlLmgiCisjaW5jbHVkZSAiV2ViRXZlbnQuaCIKICNpbmNsdWRl
ICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJVUkwuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lTG9hZGVyVHlwZXMuaD4KQEAgLTE1MSwxMiArMTUyLDE0IEBAIGlubGluZSBXS1VSTFJlZiB0
b0NvcGllZFVSTFJlZihjb25zdCBXVEYKICAgICByZXR1cm4gdG9SZWYod2ViVVJMLnJlbGVhc2Uo
KS5yZWxlYXNlUmVmKCkpOwogfQogCisvKiBFbnVtIGNvbnZlcnNpb25zICovCisKIGlubGluZSBX
S1R5cGVJRCB0b1JlZihXZWJLaXQ6OkFQSU9iamVjdDo6VHlwZSB0eXBlKQogewogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxXS1R5cGVJRD4odHlwZSk7CiB9CiAKLWlubGluZSBXS0ZyYW1lTmF2aWdh
dGlvblR5cGUgdG9XSyhXZWJDb3JlOjpOYXZpZ2F0aW9uVHlwZSB0eXBlKQoraW5saW5lIFdLRnJh
bWVOYXZpZ2F0aW9uVHlwZSB0b1JlZihXZWJDb3JlOjpOYXZpZ2F0aW9uVHlwZSB0eXBlKQogewog
ICAgIFdLRnJhbWVOYXZpZ2F0aW9uVHlwZSB3a1R5cGUgPSBrV0tGcmFtZU5hdmlnYXRpb25UeXBl
T3RoZXI7CiAKQEAgLTE4NCw0ICsxODcsMTggQEAgaW5saW5lIFdLRnJhbWVOYXZpZ2F0aW9uVHlw
ZSB0b1dLKFdlYkNvcgogICAgIHJldHVybiB3a1R5cGU7CiB9CiAKK2lubGluZSBXS0V2ZW50TW9k
aWZpZXJzIHRvUmVmKFdlYktpdDo6V2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMpCit7Cisg
ICAgV0tFdmVudE1vZGlmaWVycyB3a01vZGlmaWVycyA9IDA7CisgICAgaWYgKG1vZGlmaWVycyAm
IFdlYktpdDo6V2ViRXZlbnQ6OlNoaWZ0S2V5KQorICAgICAgICB3a01vZGlmaWVycyB8PSBrV0tF
dmVudE1vZGlmaWVyc1NoaWZ0S2V5OworICAgIGlmIChtb2RpZmllcnMgJiBXZWJLaXQ6OldlYkV2
ZW50OjpDb250cm9sS2V5KQorICAgICAgICB3a01vZGlmaWVycyB8PSBrV0tFdmVudE1vZGlmaWVy
c0NvbnRyb2xLZXk7CisgICAgaWYgKG1vZGlmaWVycyAmIFdlYktpdDo6V2ViRXZlbnQ6OkFsdEtl
eSkKKyAgICAgICAgd2tNb2RpZmllcnMgfD0ga1dLRXZlbnRNb2RpZmllcnNBbHRLZXk7CisgICAg
aWYgKG1vZGlmaWVycyAmIFdlYktpdDo6V2ViRXZlbnQ6Ok1ldGFLZXkpCisgICAgICAgIHdrTW9k
aWZpZXJzIHw9IGtXS0V2ZW50TW9kaWZpZXJzTWV0YUtleTsKKyAgICByZXR1cm4gd2tNb2RpZmll
cnM7Cit9CisKICNlbmRpZiAvLyBXS0FQSUNhc3RfaApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQ
YWdlLmgJKHJldmlzaW9uIDY1NjczKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDE0IEBAIGVudW0gewogfTsKIHR5cGVkZWYg
dWludDMyX3QgV0tGcmFtZU5hdmlnYXRpb25UeXBlOwogCitlbnVtIHsKKyAgICBrV0tFdmVudE1v
ZGlmaWVyc1NoaWZ0S2V5ID0gMSA8PCAwLAorICAgIGtXS0V2ZW50TW9kaWZpZXJzQ29udHJvbEtl
eSA9IDEgPDwgMSwKKyAgICBrV0tFdmVudE1vZGlmaWVyc0FsdEtleSA9IDEgPDwgMiwKKyAgICBr
V0tFdmVudE1vZGlmaWVyc01ldGFLZXkgPSAxIDw8IDMKK307Cit0eXBlZGVmIHVpbnQzMl90IFdL
RXZlbnRNb2RpZmllcnM7CisKIC8vIEZyYW1lTG9hZCBDbGllbnQKIHR5cGVkZWYgdm9pZCAoKldL
UGFnZURpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWVDYWxsYmFjaykoV0tQYWdlUmVmIHBh
Z2UsIFdLRnJhbWVSZWYgZnJhbWUsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwogdHlwZWRlZiB2
b2lkICgqV0tQYWdlRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9y
RnJhbWVDYWxsYmFjaykoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIGNvbnN0IHZv
aWQgKmNsaWVudEluZm8pOwpAQCAtMTAwLDggKzEwOCw4IEBAIHN0cnVjdCBXS1BhZ2VMb2FkZXJD
bGllbnQgewogdHlwZWRlZiBzdHJ1Y3QgV0tQYWdlTG9hZGVyQ2xpZW50IFdLUGFnZUxvYWRlckNs
aWVudDsKIAogLy8gUG9saWN5IENsaWVudC4KLXR5cGVkZWYgdm9pZCAoKldLUGFnZURlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb25DYWxsYmFjaykoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVO
YXZpZ2F0aW9uVHlwZSBuYXZpZ2F0aW9uVHlwZSwgV0tVUkxSZWYgdXJsLCBXS0ZyYW1lUmVmIGZy
YW1lLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXIsIGNvbnN0IHZvaWQgKmNsaWVu
dEluZm8pOwotdHlwZWRlZiB2b2lkICgqV0tQYWdlRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0
aW9uQ2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lTmF2aWdhdGlvblR5cGUgbmF2aWdh
dGlvblR5cGUsIFdLVVJMUmVmIHVybCwgV0tGcmFtZVJlZiBmcmFtZSwgV0tGcmFtZVBvbGljeUxp
c3RlbmVyUmVmIGxpc3RlbmVyLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9p
ZCAoKldLUGFnZURlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25DYWxsYmFjaykoV0tQYWdl
UmVmIHBhZ2UsIFdLRnJhbWVOYXZpZ2F0aW9uVHlwZSBuYXZpZ2F0aW9uVHlwZSwgV0tFdmVudE1v
ZGlmaWVycyBtb2RpZmllcnMsIFdLVVJMUmVmIHVybCwgV0tGcmFtZVJlZiBmcmFtZSwgV0tGcmFt
ZVBvbGljeUxpc3RlbmVyUmVmIGxpc3RlbmVyLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5
cGVkZWYgdm9pZCAoKldLUGFnZURlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbkNhbGxiYWNr
KShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZU5hdmlnYXRpb25UeXBlIG5hdmlnYXRpb25UeXBlLCBX
S0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgV0tVUkxSZWYgdXJsLCBXS0ZyYW1lUmVmIGZyYW1l
LCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXIsIGNvbnN0IHZvaWQgKmNsaWVudElu
Zm8pOwogdHlwZWRlZiB2b2lkICgqV0tQYWdlRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGVDYWxsYmFj
aykoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIE1JTUVUeXBlLCBXS1VSTFJlZiB1cmwsIFdL
RnJhbWVSZWYgZnJhbWUsIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiBsaXN0ZW5lciwgY29uc3Qg
dm9pZCAqY2xpZW50SW5mbyk7CiAKIHN0cnVjdCBXS1BhZ2VQb2xpY3lDbGllbnQgewpJbmRleDog
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiA2NTY3MykKKysrIFdlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDEyICszMiwxMyBAQAogI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKICNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJFcnJvcnMuaCIKKyNpbmNsdWRl
ICJXZWJFdmVudC5oIgogI2luY2x1ZGUgIldlYkZyYW1lLmgiCiAjaW5jbHVkZSAiV2ViTmF2aWdh
dGlvbkRhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdl
UHJveHlNZXNzYWdlS2luZHMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHlNZXNzYWdlS2lu
ZHMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5
TWVzc2FnZUtpbmRzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DaHJv
bWUuaD4KQEAgLTUzLDYgKzU0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1Byb2dyZXNzVHJhY2tlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VFcnJvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVUlFdmVudFdpdGhLZXlTdGF0ZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvV2lkZ2V0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dG
ZWF0dXJlcy5oPgogCkBAIC00MTEsNiArNDEzLDIzIEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoU2hvdygKICAgICB3ZWJQYWdlLT5zaG93KCk7CiB9CiAKK3N0YXRpYyB1aW50
MzJfdCBtb2RpZmllcnNGb3JOYXZpZ2F0aW9uQWN0aW9uKGNvbnN0IE5hdmlnYXRpb25BY3Rpb24m
IG5hdmlnYXRpb25BY3Rpb24pCit7CisgICAgdWludDMyX3QgbW9kaWZpZXJzID0gMDsKKyAgICBp
ZiAoY29uc3QgVUlFdmVudFdpdGhLZXlTdGF0ZSoga2V5U3RhdGVFdmVudCA9IGZpbmRFdmVudFdp
dGhLZXlTdGF0ZShjb25zdF9jYXN0PEV2ZW50Kj4obmF2aWdhdGlvbkFjdGlvbi5ldmVudCgpKSkp
IHsKKyAgICAgICAgaWYgKGtleVN0YXRlRXZlbnQtPnNoaWZ0S2V5KCkpCisgICAgICAgICAgICBt
b2RpZmllcnMgfD0gV2ViRXZlbnQ6OlNoaWZ0S2V5OworICAgICAgICBpZiAoa2V5U3RhdGVFdmVu
dC0+Y3RybEtleSgpKQorICAgICAgICAgICAgbW9kaWZpZXJzIHw9IFdlYkV2ZW50OjpDb250cm9s
S2V5OworICAgICAgICBpZiAoa2V5U3RhdGVFdmVudC0+YWx0S2V5KCkpCisgICAgICAgICAgICBt
b2RpZmllcnMgfD0gV2ViRXZlbnQ6OkFsdEtleTsKKyAgICAgICAgaWYgKGtleVN0YXRlRXZlbnQt
Pm1ldGFLZXkoKSkKKyAgICAgICAgICAgIG1vZGlmaWVycyB8PSBXZWJFdmVudDo6TWV0YUtleTsK
KyAgICB9CisKKyAgICByZXR1cm4gbW9kaWZpZXJzOworfQorCiB2b2lkIFdlYkZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck1JTUVUeXBlKEZyYW1lUG9saWN5RnVuY3Rp
b24gZnVuY3Rpb24sIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCkKIHsKICAgICBXZWJQYWdlKiB3ZWJQYWdlID0gbV9mcmFtZS0+cGFnZSgpOwpA
QCAtNDM2LDggKzQ1NSwxMCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERl
Y2lkCiAgICAgLy8gRklYTUU6IFBhc3MgdGhlIGZyYW1lIG5hbWUuCiAgICAgY29uc3QgU3RyaW5n
JiB1cmwgPSByZXF1ZXN0LnVybCgpLnN0cmluZygpOyAvLyBGSVhNRTogUGFzcyBlbnRpcmUgcmVx
dWVzdC4KIAorICAgIHVpbnQzMl90IG1vZGlmaWVycyA9IG1vZGlmaWVyc0Zvck5hdmlnYXRpb25B
Y3Rpb24obmF2aWdhdGlvbkFjdGlvbik7CisKICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25u
ZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGVjaWRlUG9saWN5Rm9yTmV3V2lu
ZG93QWN0aW9uLCB3ZWJQYWdlLT5wYWdlSUQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29yZUlQQzo6SW4obV9mcmFtZS0+ZnJhbWVJRCgpLCAodWludDMy
X3QpbmF2aWdhdGlvbkFjdGlvbi50eXBlKCksIHVybCwgbGlzdGVuZXJJRCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlSVBDOjpJbihtX2ZyYW1lLT5m
cmFtZUlEKCksICh1aW50MzJfdCluYXZpZ2F0aW9uQWN0aW9uLnR5cGUoKSwgbW9kaWZpZXJzLCB1
cmwsIGxpc3RlbmVySUQpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0
Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVu
Y3Rpb24sIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIG5hdmlnYXRpb25BY3Rpb24sIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KQpAQCAtNDUxLDgg
KzQ3MiwxMCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkCiAgICAg
Ly8gRklYTUU6IFBhc3MgbW9yZSB0aGFuIGp1c3QgdGhlIG5hdmlnYXRpb24gYWN0aW9uIHR5cGUu
CiAgICAgY29uc3QgU3RyaW5nJiB1cmwgPSByZXF1ZXN0LnVybCgpLnN0cmluZygpOyAvLyBGSVhN
RTogUGFzcyBlbnRpcmUgcmVxdWVzdC4KIAorICAgIHVpbnQzMl90IG1vZGlmaWVycyA9IG1vZGlm
aWVyc0Zvck5hdmlnYXRpb25BY3Rpb24obmF2aWdhdGlvbkFjdGlvbik7CisKICAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6RGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiwgd2ViUGFnZS0+cGFnZUlEKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmVJUEM6OkluKG1fZnJhbWUt
PmZyYW1lSUQoKSwgKHVpbnQzMl90KW5hdmlnYXRpb25BY3Rpb24udHlwZSgpLCB1cmwsIGxpc3Rl
bmVySUQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29y
ZUlQQzo6SW4obV9mcmFtZS0+ZnJhbWVJRCgpLCAodWludDMyX3QpbmF2aWdhdGlvbkFjdGlvbi50
eXBlKCksIG1vZGlmaWVycywgdXJsLCBsaXN0ZW5lcklEKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmNhbmNlbFBvbGljeUNoZWNrKCkK
</data>
<flag name="review"
          id="53531"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>