<?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>118849</bug_id>
          
          <creation_ts>2013-07-18 06:23:24 -0700</creation_ts>
          <short_desc>[Curl] Http response code 401 (Authentication required) is not handled.</short_desc>
          <delta_ts>2014-01-14 11:47:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>0</everconfirmed>
          <reporter>peavo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>galpeter</cc>
    
    <cc>jy_lizl</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>909731</commentid>
    <comment_count>0</comment_count>
    <who name="">peavo</who>
    <bug_when>2013-07-18 06:23:24 -0700</bug_when>
    <thetext>The current Curl implementation does not handle a 401 response.
When receiving http code 401, we need to give a notification that authorization is required, by calling the appropriate notification method.
This gives a WebKit client the possibility to present a password dialog to the user.
In response to this, we should provide Curl with the given username and password, so another request can be sent with the given credentials.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909827</commentid>
    <comment_count>1</comment_count>
      <attachid>207008</attachid>
    <who name="">peavo</who>
    <bug_when>2013-07-18 11:53:06 -0700</bug_when>
    <thetext>Created attachment 207008
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910040</commentid>
    <comment_count>2</comment_count>
    <who name="Peter Gal">galpeter</who>
    <bug_when>2013-07-19 01:11:37 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=207008&amp;action=review

This looks cool, I&apos;ve also wanted to implement this :)

&gt; Source/WebCore/platform/network/curl/ResourceHandleManager.cpp:299
&gt; +    err = curl_easy_getinfo(h, CURLINFO_EFFECTIVE_URL, &amp;url);

The &apos;err&apos;-s are only set but not used elsewhere, this could cause compiler warnings.

&gt; Source/WebCore/platform/network/curl/ResourceHandleManager.cpp:823
&gt; +            // &lt;rdar://problem/7174050&gt; - For URLs that match the paths of those previously challenged for HTTP Basic authentication, 
&gt; +            // try and reuse the credential preemptively, as allowed by RFC 2617.

I don&apos;t know if we should keep this rdar url as we don&apos;t have a way to access it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910115</commentid>
    <comment_count>3</comment_count>
      <attachid>207083</attachid>
    <who name="">peavo</who>
    <bug_when>2013-07-19 05:53:16 -0700</bug_when>
    <thetext>Created attachment 207083
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910116</commentid>
    <comment_count>4</comment_count>
    <who name="">peavo</who>
    <bug_when>2013-07-19 05:55:18 -0700</bug_when>
    <thetext>(In reply to comment #2)

Thanks for reviewing! Updated patch according to comments.


&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=207008&amp;action=review
&gt; 
&gt; This looks cool, I&apos;ve also wanted to implement this :)
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/ResourceHandleManager.cpp:299
&gt; &gt; +    err = curl_easy_getinfo(h, CURLINFO_EFFECTIVE_URL, &amp;url);
&gt; 
&gt; The &apos;err&apos;-s are only set but not used elsewhere, this could cause compiler warnings.
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/ResourceHandleManager.cpp:823
&gt; &gt; +            // &lt;rdar://problem/7174050&gt; - For URLs that match the paths of those previously challenged for HTTP Basic authentication, 
&gt; &gt; +            // try and reuse the credential preemptively, as allowed by RFC 2617.
&gt; 
&gt; I don&apos;t know if we should keep this rdar url as we don&apos;t have a way to access it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910215</commentid>
    <comment_count>5</comment_count>
      <attachid>207083</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-07-19 10:28:38 -0700</bug_when>
    <thetext>Comment on attachment 207083
Patch

Nice job! r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910216</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-07-19 10:30:03 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; Source/WebCore/platform/network/curl/ResourceHandleManager.cpp:823
&gt; &gt; +            // &lt;rdar://problem/7174050&gt; - For URLs that match the paths of those previously challenged for HTTP Basic authentication, 
&gt; &gt; +            // try and reuse the credential preemptively, as allowed by RFC 2617.
&gt; 
&gt; I don&apos;t know if we should keep this rdar url as we don&apos;t have a way to access it.

Please leave the rdar tag in place.  This is a reminder why we added this code on the CFNetwork side, and I imagine it would be good to have on the cURL side as well.  The bug had to do with authentication on certain wireless routers that failed if this case was not handled properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910240</commentid>
    <comment_count>7</comment_count>
      <attachid>207083</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-19 10:51:31 -0700</bug_when>
    <thetext>Comment on attachment 207083
Patch

Clearing flags on attachment: 207083

Committed r152908: &lt;http://trac.webkit.org/changeset/152908&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910241</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-19 10:51:33 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910245</commentid>
    <comment_count>9</comment_count>
    <who name="">peavo</who>
    <bug_when>2013-07-19 11:05:02 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 207083 [details])
&gt; Nice job! r=me.

Thanks for the review, Brent :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963649</commentid>
    <comment_count>10</comment_count>
    <who name="await_me">jy_lizl</who>
    <bug_when>2014-01-01 17:30:58 -0800</bug_when>
    <thetext>In this patch,when given username and password was wrong,Will webkit or curl  resend the request?
And Does WebCore resend the request ?  or client? or Curl automatic?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964201</commentid>
    <comment_count>11</comment_count>
    <who name="">peavo</who>
    <bug_when>2014-01-03 11:39:52 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; In this patch,when given username and password was wrong,Will webkit or curl  resend the request?
&gt; And Does WebCore resend the request ?  or client? or Curl automatic?

When given username or password is incorrect, I believe we will receive another 401 response, and give the user another chance to provide credentials.
If new credentials are provided, we will give the user/password to curl by calling  curl_easy_setopt(curlHandle, CURLOPT_USERPWD, usernameAndPassword).
AFAIK this will make curl resend the request automatically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>964539</commentid>
    <comment_count>12</comment_count>
    <who name="await_me">jy_lizl</who>
    <bug_when>2014-01-05 19:09:41 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; In this patch,when given username and password was wrong,Will webkit or curl  resend the request?
&gt; &gt; And Does WebCore resend the request ?  or client? or Curl automatic?
&gt; 
&gt; When given username or password is incorrect, I believe we will receive another 401 response, and give the user another chance to provide credentials.
&gt; If new credentials are provided, we will give the user/password to curl by calling  curl_easy_setopt(curlHandle, CURLOPT_USERPWD, usernameAndPassword).
&gt; AFAIK this will make curl resend the request automatically.

Thanks for your replay.
I had met some problems.My browser  is developed on WinCE SYS。
I had patched  the webcore part of this patch to my browser and code FrameLoaderClientWinCE::dispatchDidReceiveAuthenticationChallenge() as follow:
void FrameLoaderClientWinCE::dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&amp; challenge)
{
    String user;
    String pwd;
    if (m_webView-&gt;requestAuthentication(challenge,user,pwd) == 0)
    {
        Credential credential(user,pwd,CredentialPersistenceNone);
        challenge.authenticationClient()-&gt;receivedCredential(challenge,credential);
        return;
    }
    
    challenge.authenticationClient()-&gt;receivedRequestToContinueWithoutCredential(challenge);
}

In WebView::requestAuthentication()，I will give user a dialog to input username and password.

In expect,when visit a website with basic authentication,browser should given user a dialog to input username and password.if username and password is correct,the page will dispaly.if username and password is incorrect,browser  should given user a dialog again until user inputs a right username and password or cancel the visit.

In actually,on my browser,if user&apos;s first input is correct,the request page will be dispalyed. but if  the first input is incorrect,whaterver the second input is ,401 error page will be displayed and there is not dialog yet.

When degbugging in curl,I find &quot;hand-&gt;state.authproblem&quot; has been set to &quot;true&quot; when user inputs wrong usename and password. Then request will be ended with 401 error.
I don&apos;t  know why it does not work well as expectation.Does this patch could implement the expectation as above?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967959</commentid>
    <comment_count>13</comment_count>
    <who name="">peavo</who>
    <bug_when>2014-01-14 11:47:08 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; In this patch,when given username and password was wrong,Will webkit or curl  resend the request?
&gt; &gt; &gt; And Does WebCore resend the request ?  or client? or Curl automatic?
&gt; &gt; 
&gt; &gt; When given username or password is incorrect, I believe we will receive another 401 response, and give the user another chance to provide credentials.
&gt; &gt; If new credentials are provided, we will give the user/password to curl by calling  curl_easy_setopt(curlHandle, CURLOPT_USERPWD, usernameAndPassword).
&gt; &gt; AFAIK this will make curl resend the request automatically.
&gt; 
&gt; Thanks for your replay.
&gt; I had met some problems.My browser  is developed on WinCE SYS。
&gt; I had patched  the webcore part of this patch to my browser and code FrameLoaderClientWinCE::dispatchDidReceiveAuthenticationChallenge() as follow:
&gt; void FrameLoaderClientWinCE::dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&amp; challenge)
&gt; {
&gt;     String user;
&gt;     String pwd;
&gt;     if (m_webView-&gt;requestAuthentication(challenge,user,pwd) == 0)
&gt;     {
&gt;         Credential credential(user,pwd,CredentialPersistenceNone);
&gt;         challenge.authenticationClient()-&gt;receivedCredential(challenge,credential);
&gt;         return;
&gt;     }
&gt; 
&gt;     challenge.authenticationClient()-&gt;receivedRequestToContinueWithoutCredential(challenge);
&gt; }
&gt; 
&gt; In WebView::requestAuthentication()，I will give user a dialog to input username and password.
&gt; 

I think this code looks fine.

&gt; In expect,when visit a website with basic authentication,browser should given user a dialog to input username and password.if username and password is correct,the page will dispaly.if username and password is incorrect,browser  should given user a dialog again until user inputs a right username and password or cancel the visit.
&gt; 
&gt; In actually,on my browser,if user&apos;s first input is correct,the request page will be dispalyed. but if  the first input is incorrect,whaterver the second input is ,401 error page will be displayed and there is not dialog yet.
&gt; 

I guess the behaviour also depends on how many times the server will send back a 401 response, before it sends an error page. Have you tried other sites? How does other browsers behave on your test site?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207008</attachid>
            <date>2013-07-18 11:53:06 -0700</date>
            <delta_ts>2013-07-19 05:53:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118849-20130718205241.patch</filename>
            <type>text/plain</type>
            <size>21265</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Mjg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEzLTA3LTE4ICBwZWF2b0Bv
dXRsb29rLmNvbSAgPHBlYXZvQG91dGxvb2suY29tPgorCisgICAgICAgIFtDdXJsXSBIdHRwIHJl
c3BvbnNlIGNvZGUgNDAxIChBdXRoZW50aWNhdGlvbiByZXF1aXJlZCkgaXMgbm90IGhhbmRsZWQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg4NDkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgY3Vy
cmVudCBDdXJsIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGhhbmRsZSBhIDQwMSByZXNwb25zZS4K
KyAgICAgICAgV2hlbiByZWNlaXZpbmcgaHR0cCBjb2RlIDQwMSwgd2UgbmVlZCB0byBnaXZlIGEg
bm90aWZpY2F0aW9uIHRoYXQgYXV0aG9yaXphdGlvbiBpcyByZXF1aXJlZCwgYnkgY2FsbGluZyB0
aGUgYXBwcm9wcmlhdGUgbm90aWZpY2F0aW9uIG1ldGhvZC4KKyAgICAgICAgVGhpcyBnaXZlcyBh
IFdlYktpdCBjbGllbnQgdGhlIHBvc3NpYmlsaXR5IHRvIHByZXNlbnQgYSBwYXNzd29yZCBkaWFs
b2cgdG8gdGhlIHVzZXIuCisgICAgICAgIEluIHJlc3BvbnNlIHRvIHRoaXMsIHdlIHNob3VsZCBw
cm92aWRlIEN1cmwgd2l0aCB0aGUgZ2l2ZW4gdXNlcm5hbWUgYW5kIHBhc3N3b3JkLCBzbyBhbm90
aGVyIHJlcXVlc3QgY2FuIGJlIHNlbnQgd2l0aCB0aGUgZ2l2ZW4gY3JlZGVudGlhbHMuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgICAgICBB
ZGRlZCBtZXRob2QgdG8gY2hlY2sgaWYgY3JlZGVudGlhbCBzdG9yYWdlIHNob3VsZCBiZSB1c2Vk
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oOgor
ICAgICAgICAgICAgQWRkZWQgbWVtYmVyIHRvIGtlZXAgdHJhY2sgb2YgbnVtYmVyIG9mIGF1dGhl
bnRpY2F0aW9uIGZhaWx1cmVzLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRl
cm5hbDo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOgorICAgICAgICAgICAgQWRkZWQg
bWV0aG9kIHRvIGNoZWNrIGlmIGNyZWRlbnRpYWwgc3RvcmFnZSBzaG91bGQgYmUgdXNlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpOgorICAgICAgICAgICAgSW1wbGVtZW50IG1ldGhvZDsgbm90aWZ5IGNsaWVudCB3
aGVuIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGU6OnJlY2VpdmVkQ3JlZGVudGlhbCk6CisgICAgICAgICAgICBJbXBsZW1lbnQgbWV0
aG9kOyBwcm92aWRlIEN1cmwgd2l0aCBwYXNzd29yZCBhbmQgdXNlcm5hbWUgd2hlbiBhdmFpbGFi
bGUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRSZXF1ZXN0VG9D
b250aW51ZVdpdGhvdXRDcmVkZW50aWFsKToKKyAgICAgICAgICAgIEltcGxlbWVudCBtZXRob2Q7
IHJlc2V0IEN1cmwgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKToKKyAgICAgICAgICAgIEltcGxlbWVu
dCBtZXRob2Q7IG5vdGlmeSBjbGllbnQgdGhhdCBhdXRob3JpemF0aW9uIGhhcyBiZWVuIGNhbmNl
bGxlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5h
Z2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzSHR0cEF1dGhlbnRpY2F0aW9uKToKKyAgICAg
ICAgICAgIEFkZGVkIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGh0dHAgY29kZSBpcyBhbiAnQXV0aG9y
aXphdGlvbiByZXF1aXJlZCcgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OmdldFByb3RlY3Rpb25T
cGFjZSk6CisgICAgICAgICAgICBBZGRlZCBmdW5jdGlvbiB0byBpbml0aWFsaXplIGEgcHJvdGVj
dGlvbiBzcGFjZSBvYmplY3QgZnJvbSBhIEN1cmwgaGFuZGxlIGFuZCBhIHJlc3BvbnNlIG9iamVj
dC4gCisgICAgICAgIChXZWJDb3JlOjpoZWFkZXJDYWxsYmFjayk6CisgICAgICAgICAgICBOb3Rp
ZnkgY2xpZW50IHdoZW4gYXV0aG9yaXphdGlvbiBpcyByZXF1aXJlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6YXBwbHlBdXRoZW50aWNhdGlvblRvUmVxdWVzdCk6
CisgICAgICAgICAgICBBZGRlZCBtZXRob2QgdG8gc2V0IEN1cmwgdXNlcm5hbWUgYW5kIHBhc3N3
b3JkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjppbml0aWFsaXpl
SGFuZGxlKToKKyAgICAgICAgICAgIFVzZSBtZXRob2QgdG8gc2V0IEN1cmwgdXNlcm5hbWUgYW5k
IHBhc3N3b3JkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZU1hbmFnZXIuaDoKKyAgICAgICAgICAgIEFkZGVkIG1ldGhvZCB0byBzZXQgQ3VybCB1c2VybmFt
ZSBhbmQgcGFzc3dvcmQuCisKIDIwMTMtMDctMTggIFByYXZlZW4gUiBKYWRoYXYgIDxwcmF2ZWVu
LmpAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgT25seSB0aGUgZmlyc3QgY2FsbCB0byAnc3RvcCcg
bWV0aG9kIG9mIEF1ZGlvQnVmZmVyU291cmNlTm9kZSBtdXN0IGJlIGVudGVydGFpbmVkLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUu
aAkocmV2aXNpb24gMTUyNzgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOSArMTA3LDkgQEAgcHVibGlj
OgogCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBVU0UoQ0ZORVRXT1JLKQogICAgIHZvaWQgd2lsbFNl
bmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGly
ZWN0UmVzcG9uc2UpOwotICAgIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKTsKICNl
bmRpZgogI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKENGTkVUV09SSykgfHwgVVNFKENVUkwpIHx8
IFVTRShTT1VQKQorICAgIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKTsKICAgICB2
b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYpOwogICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZENyZWRlbnRpYWwoY29uc3Qg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDcmVkZW50aWFsJik7CiAgICAgdmlydHVh
bCB2b2lkIHJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwpAQCAtMTY1LDcgKzE2NSw2IEBAIHB1YmxpYzoKICNp
ZiBVU0UoU09VUCkKICAgICB2b2lkIGNvbnRpbnVlRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2Up
OwogICAgIHZvaWQgc2VuZFBlbmRpbmdSZXF1ZXN0KCk7Ci0gICAgYm9vbCBzaG91bGRVc2VDcmVk
ZW50aWFsU3RvcmFnZSgpOwogICAgIGJvb2wgY2FuY2VsbGVkT3JDbGllbnRsZXNzKCk7CiAgICAg
dm9pZCBlbnN1cmVSZWFkQnVmZmVyKCk7CiAgICAgc3RhdGljIFNvdXBTZXNzaW9uKiBkZWZhdWx0
U2Vzc2lvbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgJKHJldmlzaW9uIDE1Mjc4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgLCBtX3VybCgwKQogICAgICAgICAgICAgLCBtX2N1c3RvbUhlYWRlcnMoMCkKICAg
ICAgICAgICAgICwgbV9jYW5jZWxsZWQoZmFsc2UpCisgICAgICAgICAgICAsIG1fYXV0aEZhaWx1
cmVDb3VudCgwKQogICAgICAgICAgICAgLCBtX2Zvcm1EYXRhU3RyZWFtKGxvYWRlcikKICNlbmRp
ZgogI2lmIFVTRShTT1VQKQpAQCAtMTg1LDYgKzE4Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QqIG1fY3VzdG9tSGVhZGVyczsKICAgICAgICAgUmVz
b3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogICAgICAgICBib29sIG1fY2FuY2VsbGVkOworICAg
ICAgICB1bnNpZ25lZCBzaG9ydCBtX2F1dGhGYWlsdXJlQ291bnQ7CiAKICAgICAgICAgRm9ybURh
dGFTdHJlYW0gbV9mb3JtRGF0YVN0cmVhbTsKICAgICAgICAgVmVjdG9yPGNoYXI+IG1fcG9zdEJ5
dGVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNl
SGFuZGxlQ3VybC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAJKHJldmlzaW9uIDE1Mjc4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGUuaCIKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiQ3Jl
ZGVudGlhbFN0b3JhZ2UuaCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5o
IgpAQCAtMTY4LDYgKzE2OSwxMSBAQCBib29sIFJlc291cmNlSGFuZGxlOjpsb2Fkc0Jsb2NrZWQo
KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBSZXNvdXJjZUhhbmRsZTo6c2hvdWxkVXNl
Q3JlZGVudGlhbFN0b3JhZ2UoKQoreworICAgIHJldHVybiAoIWNsaWVudCgpIHx8IGNsaWVudCgp
LT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzKSkgJiYgZmlyc3RSZXF1ZXN0KCkudXJs
KCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpOworfQorCiB2b2lkIFJlc291cmNlSGFuZGxlOjpw
bGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3Rv
cmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQogewogICAgIFdlYkNvcmVTeW5jaHJvbm91c0xv
YWRlciBzeW5jTG9hZGVyOwpAQCAtMTgyLDI1ICsxODgsNzggQEAgdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6cGxhdGZvcm1Mb2FkUmVzb3VyYwogICAgIHJlc3BvbnNlID0gc3luY0xvYWRlci5yZXNvdXJj
ZVJlc3BvbnNlKCk7CiB9CiAKLS8vc3R1YnMgbmVlZGVkIGZvciB3aW5kb3dzIHZlcnNpb24KLXZv
aWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25z
dCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIAordm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiBjaGFsbGVuZ2UpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAoc2hvdWxkVXNl
Q3JlZGVudGlhbFN0b3JhZ2UoKSkgeworICAgICAgICBpZiAoIWQtPm1faW5pdGlhbENyZWRlbnRp
YWwuaXNFbXB0eSgpIHx8IGNoYWxsZW5nZS5wcmV2aW91c0ZhaWx1cmVDb3VudCgpKSB7CisgICAg
ICAgICAgICAvLyBUaGUgc3RvcmVkIGNyZWRlbnRpYWwgd2Fzbid0IGFjY2VwdGVkLCBzdG9wIHVz
aW5nIGl0LgorICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiBoZXJlLCBz
aW5jZSBhIGRpZmZlcmVudCBjcmVkZW50aWFsIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIHN0b3Jl
ZCBieSBhbm90aGVyIFJlc291cmNlSGFuZGxlLAorICAgICAgICAgICAgLy8gYnV0IHRoZSBvYnNl
cnZhYmxlIGVmZmVjdCBzaG91bGQgYmUgdmVyeSBtaW5vciwgaWYgYW55LgorICAgICAgICAgICAg
Q3JlZGVudGlhbFN0b3JhZ2U6OnJlbW92ZShjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjaGFsbGVuZ2UucHJldmlvdXNGYWlsdXJlQ291bnQo
KSkgeworICAgICAgICAgICAgQ3JlZGVudGlhbCBjcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3Jh
Z2U6OmdldChjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkpOworICAgICAgICAgICAgaWYgKCFj
cmVkZW50aWFsLmlzRW1wdHkoKSAmJiBjcmVkZW50aWFsICE9IGQtPm1faW5pdGlhbENyZWRlbnRp
YWwpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpID09
IENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpOworICAgICAgICAgICAgICAgIGlmIChjaGFsbGVu
Z2UuZmFpbHVyZVJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA9PSA0MDEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gU3RvcmUgdGhlIGNyZWRlbnRpYWwgYmFjaywgcG9zc2libHkgYWRkaW5n
IGl0IGFzIGEgZGVmYXVsdCBmb3IgdGhpcyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAg
IENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoY3JlZGVudGlhbCwgY2hhbGxlbmdlLnByb3RlY3Rpb25T
cGFjZSgpLCBjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkudXJsKCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBTdHJpbmcgdXNlcnBhc3MgPSBjcmVkZW50aWFsLnVzZXIo
KSArICI6IiArIGNyZWRlbnRpYWwucGFzc3dvcmQoKTsKKyAgICAgICAgICAgICAgICBjdXJsX2Vh
c3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1VTRVJQV0QsIHVzZXJwYXNzLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZSA9IGNoYWxsZW5nZTsKKyAg
ICAKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UodGhpcywgZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlKTsKIH0KIAot
dm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJiwgY29uc3QgQ3JlZGVudGlhbCYpIAordm9pZCBSZXNvdXJjZUhhbmRsZTo6
cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVu
Z2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBpZiAoY2hhbGxlbmdlICE9IGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGNyZWRlbnRpYWwuaXNFbXB0eSgpKSB7CisgICAgICAgIHJl
Y2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2UpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KCkpIHsKKyAgICAgICAgaWYgKGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS5odHRwU3RhdHVz
Q29kZSgpID09IDQwMSkgeworICAgICAgICAgICAgS1VSTCB1cmxUb1N0b3JlID0gY2hhbGxlbmdl
LmZhaWx1cmVSZXNwb25zZSgpLnVybCgpOworICAgICAgICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6
OnNldChjcmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIHVybFRvU3RvcmUp
OworICAgICAgICB9CisgICAgfQorCisgICAgU3RyaW5nIHVzZXJwYXNzID0gY3JlZGVudGlhbC51
c2VyKCkgKyAiOiIgKyBjcmVkZW50aWFsLnBhc3N3b3JkKCk7CisgICAgY3VybF9lYXN5X3NldG9w
dChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9VU0VSUFdELCB1c2VycGFzcy51dGY4KCkuZGF0YSgpKTsK
KworICAgIGNsZWFyQXV0aGVudGljYXRpb24oKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6
cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJikgCit2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RU
b0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
IGNoYWxsZW5nZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChjaGFsbGVuZ2Ug
IT0gZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJp
bmcgdXNlcnBhc3MgPSAiIjsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJM
T1BUX1VTRVJQV0QsIHVzZXJwYXNzLnV0ZjgoKS5kYXRhKCkpOworCisgICAgY2xlYXJBdXRoZW50
aWNhdGlvbigpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENhbmNlbGxhdGlv
bihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCit2b2lkIFJlc291cmNlSGFuZGxlOjpy
ZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxl
bmdlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKGNoYWxsZW5nZSAhPSBkLT5t
X2N1cnJlbnRXZWJDaGFsbGVuZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjbGllbnQo
KSkKKyAgICAgICAgY2xpZW50KCktPnJlY2VpdmVkQ2FuY2VsbGF0aW9uKHRoaXMsIGNoYWxsZW5n
ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1h
bmFnZXIuY3BwCShyZXZpc2lvbiAxNTI3ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlTWFuYWdlci5oIgogCisjaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKICNpbmNsdWRl
ICJEYXRhVVJMLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCkBAIC0xMzcsNiArMTM4LDExIEBAIGlubGluZSBzdGF0aWMgYm9vbCBpc0h0
dHBSZWRpcmVjdChpbnQgc3QKICAgICByZXR1cm4gMzAwIDw9IHN0YXR1c0NvZGUgJiYgc3RhdHVz
Q29kZSA8IDQwMCAmJiBzdGF0dXNDb2RlICE9IDMwNDsKIH0KIAoraW5saW5lIHN0YXRpYyBib29s
IGlzSHR0cEF1dGhlbnRpY2F0aW9uKGludCBzdGF0dXNDb2RlKQoreworICAgIHJldHVybiBzdGF0
dXNDb2RlID09IDQwMTsKK30KKwogUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpSZXNvdXJjZUhhbmRs
ZU1hbmFnZXIoKQogICAgIDogbV9kb3dubG9hZFRpbWVyKHRoaXMsICZSZXNvdXJjZUhhbmRsZU1h
bmFnZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjaykKICAgICAsIG1fY29va2llSmFyRmlsZU5hbWUo
Y29va2llSmFyUGF0aCgpKQpAQCAtMjc5LDYgKzI4NSw1MiBAQCBzdGF0aWMgYm9vbCBpc0FwcGVu
ZGFibGVIZWFkZXIoY29uc3QgU3RyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgUHJv
dGVjdGlvblNwYWNlIGdldFByb3RlY3Rpb25TcGFjZShDVVJMKiBoLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBDVVJMY29kZSBlcnI7CisKKyAgICBsb25nIHBvcnQg
PSAwOworICAgIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZvKGgsIENVUkxJTkZPX1BSSU1BUllfUE9S
VCwgJnBvcnQpOworCisgICAgbG9uZyBhdmFpbGFibGVBdXRoID0gQ1VSTEFVVEhfTk9ORTsKKyAg
ICBlcnIgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhoLCBDVVJMSU5GT19IVFRQQVVUSF9BVkFJTCwgJmF2
YWlsYWJsZUF1dGgpOworCisgICAgY29uc3QgY2hhciogdXJsID0gMDsKKyAgICBlcnIgPSBjdXJs
X2Vhc3lfZ2V0aW5mbyhoLCBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMLCAmdXJsKTsKKworICAgIEtV
Ukwga3VybChQYXJzZWRVUkxTdHJpbmcsIHVybCk7CisKKyAgICBTdHJpbmcgaG9zdCA9IGt1cmwu
aG9zdCgpOworICAgIFN0cmluZyBwcm90b2NvbCA9IGt1cmwucHJvdG9jb2woKTsKKworICAgIFN0
cmluZyByZWFsbTsKKworICAgIFN0cmluZyBhdXRoSGVhZGVyID0gcmVzcG9uc2UuaHR0cEhlYWRl
ckZpZWxkKCJXV1ctQXV0aGVudGljYXRlIik7CisgICAgY29uc3QgU3RyaW5nIHJlYWxtU3RyaW5n
ID0gInJlYWxtPSI7CisgICAgaW50IHJlYWxtUG9zID0gYXV0aEhlYWRlci5maW5kKHJlYWxtU3Ry
aW5nKTsKKyAgICBpZiAocmVhbG1Qb3MgPiAwKQorICAgICAgICByZWFsbSA9IGF1dGhIZWFkZXIu
c3Vic3RyaW5nKHJlYWxtUG9zICsgcmVhbG1TdHJpbmcubGVuZ3RoKCkpOworCisgICAgUHJvdGVj
dGlvblNwYWNlU2VydmVyVHlwZSBzZXJ2ZXJUeXBlID0gUHJvdGVjdGlvblNwYWNlU2VydmVySFRU
UDsKKyAgICBpZiAocHJvdG9jb2wgPT0gImh0dHBzIikKKyAgICAgICAgc2VydmVyVHlwZSA9IFBy
b3RlY3Rpb25TcGFjZVNlcnZlckhUVFBTOworCisgICAgUHJvdGVjdGlvblNwYWNlQXV0aGVudGlj
YXRpb25TY2hlbWUgYXV0aFNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2No
ZW1lVW5rbm93bjsKKworICAgIGlmIChhdmFpbGFibGVBdXRoICYgQ1VSTEFVVEhfQkFTSUMpCisg
ICAgICAgIGF1dGhTY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhU
VFBCYXNpYzsKKyAgICBpZiAoYXZhaWxhYmxlQXV0aCAmIENVUkxBVVRIX0RJR0VTVCkKKyAgICAg
ICAgYXV0aFNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERp
Z2VzdDsKKyAgICBpZiAoYXZhaWxhYmxlQXV0aCAmIENVUkxBVVRIX0dTU05FR09USUFURSkKKyAg
ICAgICAgYXV0aFNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lTmVn
b3RpYXRlOworICAgIGlmIChhdmFpbGFibGVBdXRoICYgQ1VSTEFVVEhfTlRMTSkKKyAgICAgICAg
YXV0aFNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lTlRMTTsKKwor
ICAgIFByb3RlY3Rpb25TcGFjZSBwcm90ZWN0aW9uU3BhY2UoaG9zdCwgcG9ydCwgc2VydmVyVHlw
ZSwgcmVhbG0sIGF1dGhTY2hlbWUpOworCisgICAgcmV0dXJuIHByb3RlY3Rpb25TcGFjZTsKK30K
KwogLyoKICAqIFRoaXMgaXMgYmVpbmcgY2FsbGVkIGZvciBlYWNoIEhUVFAgaGVhZGVyIGluIHRo
ZSByZXNwb25zZS4gVGhpcyBpbmNsdWRlcyAnXHJcbicKICAqIGZvciB0aGUgbGFzdCBsaW5lIG9m
IHRoZSBoZWFkZXIuCkBAIC0zNTAsNiArNDAyLDE0IEBAIHN0YXRpYyBzaXplX3QgaGVhZGVyQ2Fs
bGJhY2soY2hhciogcHRyLAogCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKICAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChpc0h0dHBBdXRoZW50aWNhdGlvbihodHRw
Q29kZSkpIHsKKyAgICAgICAgICAgIFByb3RlY3Rpb25TcGFjZSBwcm90ZWN0aW9uU3BhY2UgPSBn
ZXRQcm90ZWN0aW9uU3BhY2UoZC0+bV9oYW5kbGUsIGQtPm1fcmVzcG9uc2UpOworICAgICAgICAg
ICAgQ3JlZGVudGlhbCBjcmVkZW50aWFsOworICAgICAgICAgICAgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UgY2hhbGxlbmdlKHByb3RlY3Rpb25TcGFjZSwgY3JlZGVudGlhbCwgZC0+bV9hdXRoRmFp
bHVyZUNvdW50LCBkLT5tX3Jlc3BvbnNlLCBSZXNvdXJjZUVycm9yKCkpOworICAgICAgICAgICAg
Y2hhbGxlbmdlLnNldEF1dGhlbnRpY2F0aW9uQ2xpZW50KGpvYik7CisgICAgICAgICAgICBqb2It
PmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjaGFsbGVuZ2UpOworICAgICAgICAg
ICAgZC0+bV9hdXRoRmFpbHVyZUNvdW50Kys7CisgICAgICAgICAgICByZXR1cm4gdG90YWxTaXpl
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNsaWVudCkKQEAgLTc1Miw2ICs4MTIsNDEgQEAg
dm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnN0YXJ0Sm9iKFJlcwogICAgIH0KIH0KIAordm9p
ZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmFwcGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3QoUmVz
b3VyY2VIYW5kbGUqIGhhbmRsZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIC8v
IG1fdXNlci9tX3Bhc3MgYXJlIGNyZWRlbnRpYWxzIGdpdmVuIG1hbnVhbGx5LCBmb3IgaW5zdGFu
Y2UsIGJ5IHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIFhNTEh0dHBSZXF1ZXN0Lm9wZW4oKS4KKyAg
ICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOworCisg
ICAgaWYgKGhhbmRsZS0+c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSkgeworICAgICAgICBp
ZiAoZC0+bV91c2VyLmlzRW1wdHkoKSAmJiBkLT5tX3Bhc3MuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzE3NDA1MD4gLSBGb3IgVVJMcyB0aGF0IG1hdGNoIHRo
ZSBwYXRocyBvZiB0aG9zZSBwcmV2aW91c2x5IGNoYWxsZW5nZWQgZm9yIEhUVFAgQmFzaWMgYXV0
aGVudGljYXRpb24sIAorICAgICAgICAgICAgLy8gdHJ5IGFuZCByZXVzZSB0aGUgY3JlZGVudGlh
bCBwcmVlbXB0aXZlbHksIGFzIGFsbG93ZWQgYnkgUkZDIDI2MTcuCisgICAgICAgICAgICBkLT5t
X2luaXRpYWxDcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChyZXF1ZXN0LnVybCgp
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkg
YSBwcm90ZWN0aW9uIHNwYWNlIGtub3duIGZvciB0aGUgVVJMLCB1cGRhdGUgc3RvcmVkIGNyZWRl
bnRpYWxzCisgICAgICAgICAgICAvLyBiZWZvcmUgc2VuZGluZyBhIHJlcXVlc3QuIFRoaXMgbWFr
ZXMgaXQgcG9zc2libGUgdG8gaW1wbGVtZW50IGxvZ291dCBieSBzZW5kaW5nIGFuCisgICAgICAg
ICAgICAvLyBYTUxIdHRwUmVxdWVzdCB3aXRoIGtub3duIGluY29ycmVjdCBjcmVkZW50aWFscywg
YW5kIGFib3J0aW5nIGl0IGltbWVkaWF0ZWx5IChzbyB0aGF0CisgICAgICAgICAgICAvLyBhbiBh
dXRoZW50aWNhdGlvbiBkaWFsb2cgZG9lc24ndCBwb3AgdXApLgorICAgICAgICAgICAgQ3JlZGVu
dGlhbFN0b3JhZ2U6OnNldChDcmVkZW50aWFsKGQtPm1fdXNlciwgZC0+bV9wYXNzLCBDcmVkZW50
aWFsUGVyc2lzdGVuY2VOb25lKSwgcmVxdWVzdC51cmwoKSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBTdHJpbmcgdXNlciA9IGQtPm1fdXNlcjsKKyAgICBTdHJpbmcgcGFzc3dvcmQgPSBkLT5t
X3Bhc3M7CisKKyAgICBpZiAoIWQtPm1faW5pdGlhbENyZWRlbnRpYWwuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHVzZXIgPSBkLT5tX2luaXRpYWxDcmVkZW50aWFsLnVzZXIoKTsKKyAgICAgICAgcGFz
c3dvcmQgPSBkLT5tX2luaXRpYWxDcmVkZW50aWFsLnBhc3N3b3JkKCk7CisgICAgfQorCisgICAg
Ly8gSXQgc2VlbXMgd2UgbmVlZCB0byBzZXQgQ1VSTE9QVF9VU0VSUFdEIGV2ZW4gaWYgdXNlcm5h
bWUgYW5kIHBhc3N3b3JkIGlzIGVtcHR5LgorICAgIC8vIE90aGVyd2lzZSBjVVJMIHdpbGwgbm90
IGF1dG9tYXRpY2FsbHkgY29udGludWUgd2l0aCBhIG5ldyByZXF1ZXN0IGFmdGVyIGEgNDAxIHJl
c3BvbnNlLgorCisgICAgLy8gY3VybCBDVVJMT1BUX1VTRVJQV0QgZXhwZWN0cyB1c2VybmFtZTpw
YXNzd29yZAorICAgIFN0cmluZyB1c2VycGFzcyA9IHVzZXIgKyAiOiIgKyBwYXNzd29yZDsKKyAg
ICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1VTRVJQV0QsIHVzZXJwYXNz
LnV0ZjgoKS5kYXRhKCkpOworfQorCiB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlh
bGl6ZUhhbmRsZShSZXNvdXJjZUhhbmRsZSogam9iKQogewogICAgIHN0YXRpYyBjb25zdCBpbnQg
YWxsb3dlZFByb3RvY29scyA9IENVUkxQUk9UT19GSUxFIHwgQ1VSTFBST1RPX0ZUUCB8IENVUkxQ
Uk9UT19GVFBTIHwgQ1VSTFBST1RPX0hUVFAgfCBDVVJMUFJPVE9fSFRUUFM7CkBAIC04NTksMTEg
Kzk1NCw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjppbml0aWFsaXplSGEKICAgICAg
ICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9IVFRQSEVBREVSLCBoZWFk
ZXJzKTsKICAgICAgICAgZC0+bV9jdXN0b21IZWFkZXJzID0gaGVhZGVyczsKICAgICB9Ci0gICAg
Ly8gY3VybCBDVVJMT1BUX1VTRVJQV0QgZXhwZWN0cyB1c2VybmFtZTpwYXNzd29yZAotICAgIGlm
IChkLT5tX3VzZXIubGVuZ3RoKCkgfHwgZC0+bV9wYXNzLmxlbmd0aCgpKSB7Ci0gICAgICAgIFN0
cmluZyB1c2VycGFzcyA9IGQtPm1fdXNlciArICI6IiArIGQtPm1fcGFzczsKLSAgICAgICAgY3Vy
bF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9VU0VSUFdELCB1c2VycGFzcy51dGY4
KCkuZGF0YSgpKTsKLSAgICB9CisKKyAgICBhcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KGpv
Yiwgam9iLT5maXJzdFJlcXVlc3QoKSk7CiAKICAgICAvLyBTZXQgcHJveHkgb3B0aW9ucyBpZiB3
ZSBoYXZlIHRoZW0uCiAgICAgaWYgKG1fcHJveHkubGVuZ3RoKCkpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyLmgJKHJldmlzaW9uIDE1Mjc4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtODEsNiArODEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVtb3ZlU2NoZWR1bGVkSm9iKFJl
c291cmNlSGFuZGxlKik7CiAgICAgdm9pZCBzdGFydEpvYihSZXNvdXJjZUhhbmRsZSopOwogICAg
IGJvb2wgc3RhcnRTY2hlZHVsZWRKb2JzKCk7CisgICAgdm9pZCBhcHBseUF1dGhlbnRpY2F0aW9u
VG9SZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICB2b2lk
IGluaXRpYWxpemVIYW5kbGUoUmVzb3VyY2VIYW5kbGUqKTsKIApJbmRleDogU291cmNlL1dlYktp
dC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTUyODUxKQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTMtMDctMTggIHBlYXZvQG91dGxvb2suY29t
ICA8cGVhdm9Ab3V0bG9vay5jb20+CisKKyAgICAgICAgW0N1cmxdIEh0dHAgcmVzcG9uc2UgY29k
ZSA0MDEgKEF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKSBpcyBub3QgaGFuZGxlZC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODg0OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjdXJyZW50IEN1cmwg
aW1wbGVtZW50YXRpb24gZG9lcyBub3QgaGFuZGxlIGEgNDAxIHJlc3BvbnNlLgorICAgICAgICBX
aGVuIHJlY2VpdmluZyBodHRwIGNvZGUgNDAxLCB3ZSBuZWVkIHRvIGdpdmUgYSBub3RpZmljYXRp
b24gdGhhdCBhdXRob3JpemF0aW9uIGlzIHJlcXVpcmVkLCBieSBjYWxsaW5nIHRoZSBhcHByb3By
aWF0ZSBub3RpZmljYXRpb24gbWV0aG9kLgorICAgICAgICBUaGlzIGdpdmVzIGEgV2ViS2l0IGNs
aWVudCB0aGUgcG9zc2liaWxpdHkgdG8gcHJlc2VudCBhIHBhc3N3b3JkIGRpYWxvZyB0byB0aGUg
dXNlci4KKyAgICAgICAgSW4gcmVzcG9uc2UgdG8gdGhpcywgd2Ugc2hvdWxkIHByb3ZpZGUgQ3Vy
bCB3aXRoIHRoZSBnaXZlbiB1c2VybmFtZSBhbmQgcGFzc3dvcmQsIHNvIGFub3RoZXIgcmVxdWVz
dCBjYW4gYmUgc2VudCB3aXRoIHRoZSBnaXZlbiBjcmVkZW50aWFscy4KKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6
CisgICAgICAgICAgICBJbXBsZW1lbnQgZW1wdHkgbWV0aG9kOyB1c2UgdGhlIHNhbWUgaW1wbGVt
ZW50YXRpb24gYXMgdGhlIENGTmV0d29yayB2ZXJzaW9uIGRvZXMsCisgICAgICAgICAgICBub3Rp
ZnkgZGVsZWdhdGUgd2hlbiBhdXRob3JpemF0aW9uIGlzIHJlcXVpcmVkLiAKKyAgICAgICAgKiBX
ZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNlbmRlckN1cmwuY3BwOgorICAgICAgICAoV2Vi
VVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTZW5kZXI6OmNhbmNlbEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKToKKyAgICAgICAgICAgIEltcGxlbWVudCBlbXB0eSBtZXRob2Q7IHVzZSB0aGUgc2Ft
ZSBpbXBsZW1lbnRhdGlvbiBhcyB0aGUgQ0ZOZXR3b3JrIHZlcnNpb24gZG9lczsKKyAgICAgICAg
KFdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2VuZGVyOjpjb250aW51ZVdpdGhvdXRDcmVk
ZW50aWFsRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAgICAgSW1wbGVtZW50
IGVtcHR5IG1ldGhvZDsgdXNlIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIGFzIHRoZSBDRk5ldHdv
cmsgdmVyc2lvbiBkb2VzOworICAgICAgICAoV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2VT
ZW5kZXI6OnVzZUNyZWRlbnRpYWwpOgorICAgICAgICAgICAgSW1wbGVtZW50IGVtcHR5IG1ldGhv
ZDsgdXNlIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIGFzIHRoZSBDRk5ldHdvcmsgdmVyc2lvbiBk
b2VzOworCiAyMDEzLTA3LTE3ICBLYW5naWwgSGFuICA8a2FuZ2lsLmhhbkBzYW1zdW5nLmNvbT4K
IAogICAgICAgICBVc2UgdG9IVE1MTWVkaWFFbGVtZW50CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNlbmRlckN1cmwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2VuZGVy
Q3VybC5jcHAJKHJldmlzaW9uIDE1Mjc4MCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlVSTEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2VuZGVyQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxpbml0Z3VpZC5oPgogI2luY2x1ZGUgIldlYlVSTEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlU2VuZGVyLmgiCiAKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIldlYktpdC5oIgogI2luY2x1ZGUgIldlYlVSTEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLmgiCiAjaW5jbHVkZSAiV2ViVVJMQ3JlZGVudGlhbC5oIgpAQCAtNDIsMjEgKzQxLDM3
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBX
ZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNlbmRlcjo6Y2FuY2VsQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UoCiAgICAgICAgIC8qIFtpbl0gKi8gSVdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKiBjaGFsbGVuZ2UpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRV9G
QUlMOworICAgIENPTVB0cjxXZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZT4gd2ViQ2hhbGxl
bmdlKFF1ZXJ5LCBjaGFsbGVuZ2UpOworICAgIGlmICghd2ViQ2hhbGxlbmdlKQorICAgICAgICBy
ZXR1cm4gRV9GQUlMOworCisgICAgbV9jbGllbnQtPnJlY2VpdmVkQ2FuY2VsbGF0aW9uKHdlYkNo
YWxsZW5nZS0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKSk7CisgICAgcmV0dXJuIFNfT0s7CiB9
CiAKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VTZW5kZXI6OmNvbnRpbnVlV2l0aG91dENyZWRlbnRpYWxGb3JBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSgKICAgICAgICAgLyogW2luXSAqLyBJV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uq
IGNoYWxsZW5nZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBFX0ZBSUw7
CisgICAgQ09NUHRyPFdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlPiB3ZWJDaGFsbGVuZ2Uo
UXVlcnksIGNoYWxsZW5nZSk7CisgICAgaWYgKCF3ZWJDaGFsbGVuZ2UpCisgICAgICAgIHJldHVy
biBFX0ZBSUw7CisKKyAgICBtX2NsaWVudC0+cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhv
dXRDcmVkZW50aWFsKHdlYkNoYWxsZW5nZS0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKSk7Cisg
ICAgcmV0dXJuIFNfT0s7CiB9CiAKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VTZW5kZXI6OnVzZUNyZWRlbnRpYWwoCiAgICAgICAgIC8qIFtp
bl0gKi8gSVdlYlVSTENyZWRlbnRpYWwqIGNyZWRlbnRpYWwsIAogICAgICAgICAvKiBbaW5dICov
IElXZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSogY2hhbGxlbmdlKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEVfRkFJTDsKKyAgICBDT01QdHI8V2ViVVJMQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2U+IHdlYkNoYWxsZW5nZShRdWVyeSwgY2hhbGxlbmdlKTsKKyAgICBp
ZiAoIXdlYkNoYWxsZW5nZSkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKyAgICAKKyAgICBDT01Q
dHI8V2ViVVJMQ3JlZGVudGlhbD4gd2ViQ3JlZGVudGlhbDsKKyAgICBpZiAoIWNyZWRlbnRpYWwg
fHwgRkFJTEVEKGNyZWRlbnRpYWwtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKFdlYlVSTENyZWRl
bnRpYWwpLCAodm9pZCoqKSZ3ZWJDcmVkZW50aWFsKSkpCisgICAgICAgIHJldHVybiBFX0ZBSUw7
CisKKyAgICBtX2NsaWVudC0+cmVjZWl2ZWRDcmVkZW50aWFsKHdlYkNoYWxsZW5nZS0+YXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoKSwgd2ViQ3JlZGVudGlhbC0+Y3JlZGVudGlhbCgpKTsKKyAgICBy
ZXR1cm4gU19PSzsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJKHJldmlzaW9uIDE1Mjc4MCkK
KysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw2IEBAIGJvb2wgV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OnNob3VsZFVzZUNyZWQKIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYgY2hhbGxlbmdlKQogewotI2lmIFVTRShDRk5FVFdPUkspCiAgICAgQVNTRVJUKGNoYWxs
ZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpKTsKIAogICAgIFdlYlZpZXcqIHdlYlZpZXcgPSBt
X3dlYkZyYW1lLT53ZWJWaWV3KCk7CkBAIC0xNTgsOSArMTU3LDYgQEAgdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZQogICAgIC8vIElmIHRoZSBSZXNvdXJjZUxvYWREZWxl
Z2F0ZSBkb2Vzbid0IGV4aXN0IG9yIGZhaWxzIHRvIGhhbmRsZSB0aGUgY2FsbCwgd2UgdGVsbCB0
aGUgUmVzb3VyY2VIYW5kbGUKICAgICAvLyB0byBjb250aW51ZSB3aXRob3V0IGNyZWRlbnRpYWwg
LSB0aGlzIGlzIHRoZSBiZXN0IGFwcHJveGltYXRpb24gb2YgTWFjIGJlaGF2aW9yCiAgICAgY2hh
bGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVX
aXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2UpOwotI2Vsc2UKLSAgIG5vdEltcGxlbWVudGVkKCk7
Ci0jZW5kaWYKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDYW5j
ZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRlciogbG9hZGVyLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVu
Z2UpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207083</attachid>
            <date>2013-07-19 05:53:16 -0700</date>
            <delta_ts>2013-07-19 10:51:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118849-20130719145258.patch</filename>
            <type>text/plain</type>
            <size>21500</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Mjg1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEzLTA3LTE4ICBwZWF2b0Bv
dXRsb29rLmNvbSAgPHBlYXZvQG91dGxvb2suY29tPgorCisgICAgICAgIFtDdXJsXSBIdHRwIHJl
c3BvbnNlIGNvZGUgNDAxIChBdXRoZW50aWNhdGlvbiByZXF1aXJlZCkgaXMgbm90IGhhbmRsZWQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg4NDkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgY3Vy
cmVudCBDdXJsIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGhhbmRsZSBhIDQwMSByZXNwb25zZS4K
KyAgICAgICAgV2hlbiByZWNlaXZpbmcgaHR0cCBjb2RlIDQwMSwgd2UgbmVlZCB0byBnaXZlIGEg
bm90aWZpY2F0aW9uIHRoYXQgYXV0aG9yaXphdGlvbiBpcyByZXF1aXJlZCwgYnkgY2FsbGluZyB0
aGUgYXBwcm9wcmlhdGUgbm90aWZpY2F0aW9uIG1ldGhvZC4KKyAgICAgICAgVGhpcyBnaXZlcyBh
IFdlYktpdCBjbGllbnQgdGhlIHBvc3NpYmlsaXR5IHRvIHByZXNlbnQgYSBwYXNzd29yZCBkaWFs
b2cgdG8gdGhlIHVzZXIuCisgICAgICAgIEluIHJlc3BvbnNlIHRvIHRoaXMsIHdlIHNob3VsZCBw
cm92aWRlIEN1cmwgd2l0aCB0aGUgZ2l2ZW4gdXNlcm5hbWUgYW5kIHBhc3N3b3JkLCBzbyBhbm90
aGVyIHJlcXVlc3QgY2FuIGJlIHNlbnQgd2l0aCB0aGUgZ2l2ZW4gY3JlZGVudGlhbHMuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgICAgICBB
ZGRlZCBtZXRob2QgdG8gY2hlY2sgaWYgY3JlZGVudGlhbCBzdG9yYWdlIHNob3VsZCBiZSB1c2Vk
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oOgor
ICAgICAgICAgICAgQWRkZWQgbWVtYmVyIHRvIGtlZXAgdHJhY2sgb2YgbnVtYmVyIG9mIGF1dGhl
bnRpY2F0aW9uIGZhaWx1cmVzLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRl
cm5hbDo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOgorICAgICAgICAgICAgQWRkZWQg
bWV0aG9kIHRvIGNoZWNrIGlmIGNyZWRlbnRpYWwgc3RvcmFnZSBzaG91bGQgYmUgdXNlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpOgorICAgICAgICAgICAgSW1wbGVtZW50IG1ldGhvZDsgbm90aWZ5IGNsaWVudCB3
aGVuIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGU6OnJlY2VpdmVkQ3JlZGVudGlhbCk6CisgICAgICAgICAgICBJbXBsZW1lbnQgbWV0
aG9kOyBwcm92aWRlIEN1cmwgd2l0aCBwYXNzd29yZCBhbmQgdXNlcm5hbWUgd2hlbiBhdmFpbGFi
bGUuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRSZXF1ZXN0VG9D
b250aW51ZVdpdGhvdXRDcmVkZW50aWFsKToKKyAgICAgICAgICAgIEltcGxlbWVudCBtZXRob2Q7
IHJlc2V0IEN1cmwgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKToKKyAgICAgICAgICAgIEltcGxlbWVu
dCBtZXRob2Q7IG5vdGlmeSBjbGllbnQgdGhhdCBhdXRob3JpemF0aW9uIGhhcyBiZWVuIGNhbmNl
bGxlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5h
Z2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzSHR0cEF1dGhlbnRpY2F0aW9uKToKKyAgICAg
ICAgICAgIEFkZGVkIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGh0dHAgY29kZSBpcyBhbiAnQXV0aG9y
aXphdGlvbiByZXF1aXJlZCcgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OmdldFByb3RlY3Rpb25T
cGFjZSk6CisgICAgICAgICAgICBBZGRlZCBmdW5jdGlvbiB0byBpbml0aWFsaXplIGEgcHJvdGVj
dGlvbiBzcGFjZSBvYmplY3QgZnJvbSBhIEN1cmwgaGFuZGxlIGFuZCBhIHJlc3BvbnNlIG9iamVj
dC4gCisgICAgICAgIChXZWJDb3JlOjpoZWFkZXJDYWxsYmFjayk6CisgICAgICAgICAgICBOb3Rp
ZnkgY2xpZW50IHdoZW4gYXV0aG9yaXphdGlvbiBpcyByZXF1aXJlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6YXBwbHlBdXRoZW50aWNhdGlvblRvUmVxdWVzdCk6
CisgICAgICAgICAgICBBZGRlZCBtZXRob2QgdG8gc2V0IEN1cmwgdXNlcm5hbWUgYW5kIHBhc3N3
b3JkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjppbml0aWFsaXpl
SGFuZGxlKToKKyAgICAgICAgICAgIFVzZSBtZXRob2QgdG8gc2V0IEN1cmwgdXNlcm5hbWUgYW5k
IHBhc3N3b3JkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZU1hbmFnZXIuaDoKKyAgICAgICAgICAgIEFkZGVkIG1ldGhvZCB0byBzZXQgQ3VybCB1c2VybmFt
ZSBhbmQgcGFzc3dvcmQuCisKIDIwMTMtMDctMTggIFByYXZlZW4gUiBKYWRoYXYgIDxwcmF2ZWVu
LmpAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgT25seSB0aGUgZmlyc3QgY2FsbCB0byAnc3RvcCcg
bWV0aG9kIG9mIEF1ZGlvQnVmZmVyU291cmNlTm9kZSBtdXN0IGJlIGVudGVydGFpbmVkLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUu
aAkocmV2aXNpb24gMTUyNzgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOSArMTA3LDkgQEAgcHVibGlj
OgogCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBVU0UoQ0ZORVRXT1JLKQogICAgIHZvaWQgd2lsbFNl
bmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGly
ZWN0UmVzcG9uc2UpOwotICAgIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKTsKICNl
bmRpZgogI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKENGTkVUV09SSykgfHwgVVNFKENVUkwpIHx8
IFVTRShTT1VQKQorICAgIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKTsKICAgICB2
b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYpOwogICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZENyZWRlbnRpYWwoY29uc3Qg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDcmVkZW50aWFsJik7CiAgICAgdmlydHVh
bCB2b2lkIHJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwpAQCAtMTY1LDcgKzE2NSw2IEBAIHB1YmxpYzoKICNp
ZiBVU0UoU09VUCkKICAgICB2b2lkIGNvbnRpbnVlRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2Up
OwogICAgIHZvaWQgc2VuZFBlbmRpbmdSZXF1ZXN0KCk7Ci0gICAgYm9vbCBzaG91bGRVc2VDcmVk
ZW50aWFsU3RvcmFnZSgpOwogICAgIGJvb2wgY2FuY2VsbGVkT3JDbGllbnRsZXNzKCk7CiAgICAg
dm9pZCBlbnN1cmVSZWFkQnVmZmVyKCk7CiAgICAgc3RhdGljIFNvdXBTZXNzaW9uKiBkZWZhdWx0
U2Vzc2lvbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgJKHJldmlzaW9uIDE1Mjc4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgLCBtX3VybCgwKQogICAgICAgICAgICAgLCBtX2N1c3RvbUhlYWRlcnMoMCkKICAg
ICAgICAgICAgICwgbV9jYW5jZWxsZWQoZmFsc2UpCisgICAgICAgICAgICAsIG1fYXV0aEZhaWx1
cmVDb3VudCgwKQogICAgICAgICAgICAgLCBtX2Zvcm1EYXRhU3RyZWFtKGxvYWRlcikKICNlbmRp
ZgogI2lmIFVTRShTT1VQKQpAQCAtMTg1LDYgKzE4Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QqIG1fY3VzdG9tSGVhZGVyczsKICAgICAgICAgUmVz
b3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogICAgICAgICBib29sIG1fY2FuY2VsbGVkOworICAg
ICAgICB1bnNpZ25lZCBzaG9ydCBtX2F1dGhGYWlsdXJlQ291bnQ7CiAKICAgICAgICAgRm9ybURh
dGFTdHJlYW0gbV9mb3JtRGF0YVN0cmVhbTsKICAgICAgICAgVmVjdG9yPGNoYXI+IG1fcG9zdEJ5
dGVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNl
SGFuZGxlQ3VybC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAJKHJldmlzaW9uIDE1Mjc4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGUuaCIKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiQ3Jl
ZGVudGlhbFN0b3JhZ2UuaCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5o
IgpAQCAtMTY4LDYgKzE2OSwxMSBAQCBib29sIFJlc291cmNlSGFuZGxlOjpsb2Fkc0Jsb2NrZWQo
KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBSZXNvdXJjZUhhbmRsZTo6c2hvdWxkVXNl
Q3JlZGVudGlhbFN0b3JhZ2UoKQoreworICAgIHJldHVybiAoIWNsaWVudCgpIHx8IGNsaWVudCgp
LT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzKSkgJiYgZmlyc3RSZXF1ZXN0KCkudXJs
KCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpOworfQorCiB2b2lkIFJlc291cmNlSGFuZGxlOjpw
bGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3Rv
cmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQogewogICAgIFdlYkNvcmVTeW5jaHJvbm91c0xv
YWRlciBzeW5jTG9hZGVyOwpAQCAtMTgyLDI1ICsxODgsNzggQEAgdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6cGxhdGZvcm1Mb2FkUmVzb3VyYwogICAgIHJlc3BvbnNlID0gc3luY0xvYWRlci5yZXNvdXJj
ZVJlc3BvbnNlKCk7CiB9CiAKLS8vc3R1YnMgbmVlZGVkIGZvciB3aW5kb3dzIHZlcnNpb24KLXZv
aWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25z
dCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIAordm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiBjaGFsbGVuZ2UpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAoc2hvdWxkVXNl
Q3JlZGVudGlhbFN0b3JhZ2UoKSkgeworICAgICAgICBpZiAoIWQtPm1faW5pdGlhbENyZWRlbnRp
YWwuaXNFbXB0eSgpIHx8IGNoYWxsZW5nZS5wcmV2aW91c0ZhaWx1cmVDb3VudCgpKSB7CisgICAg
ICAgICAgICAvLyBUaGUgc3RvcmVkIGNyZWRlbnRpYWwgd2Fzbid0IGFjY2VwdGVkLCBzdG9wIHVz
aW5nIGl0LgorICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiBoZXJlLCBz
aW5jZSBhIGRpZmZlcmVudCBjcmVkZW50aWFsIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIHN0b3Jl
ZCBieSBhbm90aGVyIFJlc291cmNlSGFuZGxlLAorICAgICAgICAgICAgLy8gYnV0IHRoZSBvYnNl
cnZhYmxlIGVmZmVjdCBzaG91bGQgYmUgdmVyeSBtaW5vciwgaWYgYW55LgorICAgICAgICAgICAg
Q3JlZGVudGlhbFN0b3JhZ2U6OnJlbW92ZShjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjaGFsbGVuZ2UucHJldmlvdXNGYWlsdXJlQ291bnQo
KSkgeworICAgICAgICAgICAgQ3JlZGVudGlhbCBjcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3Jh
Z2U6OmdldChjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkpOworICAgICAgICAgICAgaWYgKCFj
cmVkZW50aWFsLmlzRW1wdHkoKSAmJiBjcmVkZW50aWFsICE9IGQtPm1faW5pdGlhbENyZWRlbnRp
YWwpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpID09
IENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpOworICAgICAgICAgICAgICAgIGlmIChjaGFsbGVu
Z2UuZmFpbHVyZVJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA9PSA0MDEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gU3RvcmUgdGhlIGNyZWRlbnRpYWwgYmFjaywgcG9zc2libHkgYWRkaW5n
IGl0IGFzIGEgZGVmYXVsdCBmb3IgdGhpcyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAg
IENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoY3JlZGVudGlhbCwgY2hhbGxlbmdlLnByb3RlY3Rpb25T
cGFjZSgpLCBjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkudXJsKCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBTdHJpbmcgdXNlcnBhc3MgPSBjcmVkZW50aWFsLnVzZXIo
KSArICI6IiArIGNyZWRlbnRpYWwucGFzc3dvcmQoKTsKKyAgICAgICAgICAgICAgICBjdXJsX2Vh
c3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1VTRVJQV0QsIHVzZXJwYXNzLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZSA9IGNoYWxsZW5nZTsKKyAg
ICAKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UodGhpcywgZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlKTsKIH0KIAot
dm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJiwgY29uc3QgQ3JlZGVudGlhbCYpIAordm9pZCBSZXNvdXJjZUhhbmRsZTo6
cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVu
Z2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBpZiAoY2hhbGxlbmdlICE9IGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGNyZWRlbnRpYWwuaXNFbXB0eSgpKSB7CisgICAgICAgIHJl
Y2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2UpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KCkpIHsKKyAgICAgICAgaWYgKGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS5odHRwU3RhdHVz
Q29kZSgpID09IDQwMSkgeworICAgICAgICAgICAgS1VSTCB1cmxUb1N0b3JlID0gY2hhbGxlbmdl
LmZhaWx1cmVSZXNwb25zZSgpLnVybCgpOworICAgICAgICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6
OnNldChjcmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIHVybFRvU3RvcmUp
OworICAgICAgICB9CisgICAgfQorCisgICAgU3RyaW5nIHVzZXJwYXNzID0gY3JlZGVudGlhbC51
c2VyKCkgKyAiOiIgKyBjcmVkZW50aWFsLnBhc3N3b3JkKCk7CisgICAgY3VybF9lYXN5X3NldG9w
dChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9VU0VSUFdELCB1c2VycGFzcy51dGY4KCkuZGF0YSgpKTsK
KworICAgIGNsZWFyQXV0aGVudGljYXRpb24oKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6
cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJikgCit2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RU
b0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
IGNoYWxsZW5nZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChjaGFsbGVuZ2Ug
IT0gZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJp
bmcgdXNlcnBhc3MgPSAiIjsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJM
T1BUX1VTRVJQV0QsIHVzZXJwYXNzLnV0ZjgoKS5kYXRhKCkpOworCisgICAgY2xlYXJBdXRoZW50
aWNhdGlvbigpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENhbmNlbGxhdGlv
bihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCit2b2lkIFJlc291cmNlSGFuZGxlOjpy
ZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxl
bmdlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKGNoYWxsZW5nZSAhPSBkLT5t
X2N1cnJlbnRXZWJDaGFsbGVuZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjbGllbnQo
KSkKKyAgICAgICAgY2xpZW50KCktPnJlY2VpdmVkQ2FuY2VsbGF0aW9uKHRoaXMsIGNoYWxsZW5n
ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1h
bmFnZXIuY3BwCShyZXZpc2lvbiAxNTI3ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlTWFuYWdlci5oIgogCisjaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKICNpbmNsdWRl
ICJEYXRhVVJMLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCkBAIC0xMzcsNiArMTM4LDExIEBAIGlubGluZSBzdGF0aWMgYm9vbCBpc0h0
dHBSZWRpcmVjdChpbnQgc3QKICAgICByZXR1cm4gMzAwIDw9IHN0YXR1c0NvZGUgJiYgc3RhdHVz
Q29kZSA8IDQwMCAmJiBzdGF0dXNDb2RlICE9IDMwNDsKIH0KIAoraW5saW5lIHN0YXRpYyBib29s
IGlzSHR0cEF1dGhlbnRpY2F0aW9uKGludCBzdGF0dXNDb2RlKQoreworICAgIHJldHVybiBzdGF0
dXNDb2RlID09IDQwMTsKK30KKwogUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpSZXNvdXJjZUhhbmRs
ZU1hbmFnZXIoKQogICAgIDogbV9kb3dubG9hZFRpbWVyKHRoaXMsICZSZXNvdXJjZUhhbmRsZU1h
bmFnZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjaykKICAgICAsIG1fY29va2llSmFyRmlsZU5hbWUo
Y29va2llSmFyUGF0aCgpKQpAQCAtMjc5LDYgKzI4NSw1OCBAQCBzdGF0aWMgYm9vbCBpc0FwcGVu
ZGFibGVIZWFkZXIoY29uc3QgU3RyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgYm9v
bCBnZXRQcm90ZWN0aW9uU3BhY2UoQ1VSTCogaCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UsIFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQoreworICAgIENVUkxjb2Rl
IGVycjsKKworICAgIGxvbmcgcG9ydCA9IDA7CisgICAgZXJyID0gY3VybF9lYXN5X2dldGluZm8o
aCwgQ1VSTElORk9fUFJJTUFSWV9QT1JULCAmcG9ydCk7CisgICAgaWYgKGVyciAhPSBDVVJMRV9P
SykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbG9uZyBhdmFpbGFibGVBdXRoID0gQ1VS
TEFVVEhfTk9ORTsKKyAgICBlcnIgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhoLCBDVVJMSU5GT19IVFRQ
QVVUSF9BVkFJTCwgJmF2YWlsYWJsZUF1dGgpOworICAgIGlmIChlcnIgIT0gQ1VSTEVfT0spCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IGNoYXIqIHVybCA9IDA7CisgICAgZXJy
ID0gY3VybF9lYXN5X2dldGluZm8oaCwgQ1VSTElORk9fRUZGRUNUSVZFX1VSTCwgJnVybCk7Cisg
ICAgaWYgKGVyciAhPSBDVVJMRV9PSykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgS1VS
TCBrdXJsKFBhcnNlZFVSTFN0cmluZywgdXJsKTsKKworICAgIFN0cmluZyBob3N0ID0ga3VybC5o
b3N0KCk7CisgICAgU3RyaW5nIHByb3RvY29sID0ga3VybC5wcm90b2NvbCgpOworCisgICAgU3Ry
aW5nIHJlYWxtOworCisgICAgU3RyaW5nIGF1dGhIZWFkZXIgPSByZXNwb25zZS5odHRwSGVhZGVy
RmllbGQoIldXVy1BdXRoZW50aWNhdGUiKTsKKyAgICBjb25zdCBTdHJpbmcgcmVhbG1TdHJpbmcg
PSAicmVhbG09IjsKKyAgICBpbnQgcmVhbG1Qb3MgPSBhdXRoSGVhZGVyLmZpbmQocmVhbG1TdHJp
bmcpOworICAgIGlmIChyZWFsbVBvcyA+IDApCisgICAgICAgIHJlYWxtID0gYXV0aEhlYWRlci5z
dWJzdHJpbmcocmVhbG1Qb3MgKyByZWFsbVN0cmluZy5sZW5ndGgoKSk7CisKKyAgICBQcm90ZWN0
aW9uU3BhY2VTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQ
OworICAgIGlmIChwcm90b2NvbCA9PSAiaHR0cHMiKQorICAgICAgICBzZXJ2ZXJUeXBlID0gUHJv
dGVjdGlvblNwYWNlU2VydmVySFRUUFM7CisKKyAgICBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNh
dGlvblNjaGVtZSBhdXRoU2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hl
bWVVbmtub3duOworCisgICAgaWYgKGF2YWlsYWJsZUF1dGggJiBDVVJMQVVUSF9CQVNJQykKKyAg
ICAgICAgYXV0aFNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRU
UEJhc2ljOworICAgIGlmIChhdmFpbGFibGVBdXRoICYgQ1VSTEFVVEhfRElHRVNUKQorICAgICAg
ICBhdXRoU2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQRGln
ZXN0OworICAgIGlmIChhdmFpbGFibGVBdXRoICYgQ1VSTEFVVEhfR1NTTkVHT1RJQVRFKQorICAg
ICAgICBhdXRoU2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVOZWdv
dGlhdGU7CisgICAgaWYgKGF2YWlsYWJsZUF1dGggJiBDVVJMQVVUSF9OVExNKQorICAgICAgICBh
dXRoU2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVOVExNOworCisg
ICAgcHJvdGVjdGlvblNwYWNlID0gUHJvdGVjdGlvblNwYWNlKGhvc3QsIHBvcnQsIHNlcnZlclR5
cGUsIHJlYWxtLCBhdXRoU2NoZW1lKTsKKworICAgIHJldHVybiB0cnVlOworfQorCiAvKgogICog
VGhpcyBpcyBiZWluZyBjYWxsZWQgZm9yIGVhY2ggSFRUUCBoZWFkZXIgaW4gdGhlIHJlc3BvbnNl
LiBUaGlzIGluY2x1ZGVzICdcclxuJwogICogZm9yIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGhlYWRl
ci4KQEAgLTM1MCw2ICs0MDgsMTYgQEAgc3RhdGljIHNpemVfdCBoZWFkZXJDYWxsYmFjayhjaGFy
KiBwdHIsCiAKICAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxTaXplOwogICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKGlzSHR0cEF1dGhlbnRpY2F0aW9uKGh0dHBDb2RlKSkgewor
ICAgICAgICAgICAgUHJvdGVjdGlvblNwYWNlIHByb3RlY3Rpb25TcGFjZTsKKyAgICAgICAgICAg
IGlmIChnZXRQcm90ZWN0aW9uU3BhY2UoZC0+bV9oYW5kbGUsIGQtPm1fcmVzcG9uc2UsIHByb3Rl
Y3Rpb25TcGFjZSkpIHsKKyAgICAgICAgICAgICAgICBDcmVkZW50aWFsIGNyZWRlbnRpYWw7Cisg
ICAgICAgICAgICAgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdlKHByb3RlY3Rp
b25TcGFjZSwgY3JlZGVudGlhbCwgZC0+bV9hdXRoRmFpbHVyZUNvdW50LCBkLT5tX3Jlc3BvbnNl
LCBSZXNvdXJjZUVycm9yKCkpOworICAgICAgICAgICAgICAgIGNoYWxsZW5nZS5zZXRBdXRoZW50
aWNhdGlvbkNsaWVudChqb2IpOworICAgICAgICAgICAgICAgIGpvYi0+ZGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSk7CisgICAgICAgICAgICAgICAgZC0+bV9hdXRo
RmFpbHVyZUNvdW50Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChjbGllbnQpCkBAIC03NTIsNiArODIw
LDQxIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzdGFydEpvYihSZXMKICAgICB9CiB9
CiAKK3ZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjphcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1
ZXN0KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sK
KyAgICAvLyBtX3VzZXIvbV9wYXNzIGFyZSBjcmVkZW50aWFscyBnaXZlbiBtYW51YWxseSwgZm9y
IGluc3RhbmNlLCBieSB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBYTUxIdHRwUmVxdWVzdC5vcGVu
KCkuCisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwo
KTsKKworICAgIGlmIChoYW5kbGUtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCkpIHsKKyAg
ICAgICAgaWYgKGQtPm1fdXNlci5pc0VtcHR5KCkgJiYgZC0+bV9wYXNzLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzcxNzQwNTA+IC0gRm9yIFVSTHMgdGhhdCBt
YXRjaCB0aGUgcGF0aHMgb2YgdGhvc2UgcHJldmlvdXNseSBjaGFsbGVuZ2VkIGZvciBIVFRQIEJh
c2ljIGF1dGhlbnRpY2F0aW9uLCAKKyAgICAgICAgICAgIC8vIHRyeSBhbmQgcmV1c2UgdGhlIGNy
ZWRlbnRpYWwgcHJlZW1wdGl2ZWx5LCBhcyBhbGxvd2VkIGJ5IFJGQyAyNjE3LgorICAgICAgICAg
ICAgZC0+bV9pbml0aWFsQ3JlZGVudGlhbCA9IENyZWRlbnRpYWxTdG9yYWdlOjpnZXQocmVxdWVz
dC51cmwoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBh
bHJlYWR5IGEgcHJvdGVjdGlvbiBzcGFjZSBrbm93biBmb3IgdGhlIFVSTCwgdXBkYXRlIHN0b3Jl
ZCBjcmVkZW50aWFscworICAgICAgICAgICAgLy8gYmVmb3JlIHNlbmRpbmcgYSByZXF1ZXN0LiBU
aGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCBsb2dvdXQgYnkgc2VuZGluZyBhbgor
ICAgICAgICAgICAgLy8gWE1MSHR0cFJlcXVlc3Qgd2l0aCBrbm93biBpbmNvcnJlY3QgY3JlZGVu
dGlhbHMsIGFuZCBhYm9ydGluZyBpdCBpbW1lZGlhdGVseSAoc28gdGhhdAorICAgICAgICAgICAg
Ly8gYW4gYXV0aGVudGljYXRpb24gZGlhbG9nIGRvZXNuJ3QgcG9wIHVwKS4KKyAgICAgICAgICAg
IENyZWRlbnRpYWxTdG9yYWdlOjpzZXQoQ3JlZGVudGlhbChkLT5tX3VzZXIsIGQtPm1fcGFzcywg
Q3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSksIHJlcXVlc3QudXJsKCkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgU3RyaW5nIHVzZXIgPSBkLT5tX3VzZXI7CisgICAgU3RyaW5nIHBhc3N3b3Jk
ID0gZC0+bV9wYXNzOworCisgICAgaWYgKCFkLT5tX2luaXRpYWxDcmVkZW50aWFsLmlzRW1wdHko
KSkgeworICAgICAgICB1c2VyID0gZC0+bV9pbml0aWFsQ3JlZGVudGlhbC51c2VyKCk7CisgICAg
ICAgIHBhc3N3b3JkID0gZC0+bV9pbml0aWFsQ3JlZGVudGlhbC5wYXNzd29yZCgpOworICAgIH0K
KworICAgIC8vIEl0IHNlZW1zIHdlIG5lZWQgdG8gc2V0IENVUkxPUFRfVVNFUlBXRCBldmVuIGlm
IHVzZXJuYW1lIGFuZCBwYXNzd29yZCBpcyBlbXB0eS4KKyAgICAvLyBPdGhlcndpc2UgY1VSTCB3
aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGNvbnRpbnVlIHdpdGggYSBuZXcgcmVxdWVzdCBhZnRlciBh
IDQwMSByZXNwb25zZS4KKworICAgIC8vIGN1cmwgQ1VSTE9QVF9VU0VSUFdEIGV4cGVjdHMgdXNl
cm5hbWU6cGFzc3dvcmQKKyAgICBTdHJpbmcgdXNlcnBhc3MgPSB1c2VyICsgIjoiICsgcGFzc3dv
cmQ7CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9VU0VSUFdELCB1
c2VycGFzcy51dGY4KCkuZGF0YSgpKTsKK30KKwogdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6
OmluaXRpYWxpemVIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGpvYikKIHsKICAgICBzdGF0aWMgY29u
c3QgaW50IGFsbG93ZWRQcm90b2NvbHMgPSBDVVJMUFJPVE9fRklMRSB8IENVUkxQUk9UT19GVFAg
fCBDVVJMUFJPVE9fRlRQUyB8IENVUkxQUk9UT19IVFRQIHwgQ1VSTFBST1RPX0hUVFBTOwpAQCAt
ODU5LDExICs5NjIsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhh
CiAgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfSFRUUEhFQURF
UiwgaGVhZGVycyk7CiAgICAgICAgIGQtPm1fY3VzdG9tSGVhZGVycyA9IGhlYWRlcnM7CiAgICAg
fQotICAgIC8vIGN1cmwgQ1VSTE9QVF9VU0VSUFdEIGV4cGVjdHMgdXNlcm5hbWU6cGFzc3dvcmQK
LSAgICBpZiAoZC0+bV91c2VyLmxlbmd0aCgpIHx8IGQtPm1fcGFzcy5sZW5ndGgoKSkgewotICAg
ICAgICBTdHJpbmcgdXNlcnBhc3MgPSBkLT5tX3VzZXIgKyAiOiIgKyBkLT5tX3Bhc3M7Ci0gICAg
ICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfVVNFUlBXRCwgdXNlcnBh
c3MudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQorCisgICAgYXBwbHlBdXRoZW50aWNhdGlvblRvUmVx
dWVzdChqb2IsIGpvYi0+Zmlyc3RSZXF1ZXN0KCkpOwogCiAgICAgLy8gU2V0IHByb3h5IG9wdGlv
bnMgaWYgd2UgaGF2ZSB0aGVtLgogICAgIGlmIChtX3Byb3h5Lmxlbmd0aCgpKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlTWFuYWdlci5oCShyZXZpc2lvbiAxNTI3ODApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgxLDYgKzgxLDcgQEAgcHJpdmF0ZToKICAgICBib29sIHJlbW92ZVNjaGVkdWxl
ZEpvYihSZXNvdXJjZUhhbmRsZSopOwogICAgIHZvaWQgc3RhcnRKb2IoUmVzb3VyY2VIYW5kbGUq
KTsKICAgICBib29sIHN0YXJ0U2NoZWR1bGVkSm9icygpOworICAgIHZvaWQgYXBwbHlBdXRoZW50
aWNhdGlvblRvUmVxdWVzdChSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVxdWVzdCYpOwogCiAg
ICAgdm9pZCBpbml0aWFsaXplSGFuZGxlKFJlc291cmNlSGFuZGxlKik7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE1Mjg1MSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEzLTA3LTE4ICBwZWF2b0BvdXRs
b29rLmNvbSAgPHBlYXZvQG91dGxvb2suY29tPgorCisgICAgICAgIFtDdXJsXSBIdHRwIHJlc3Bv
bnNlIGNvZGUgNDAxIChBdXRoZW50aWNhdGlvbiByZXF1aXJlZCkgaXMgbm90IGhhbmRsZWQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg4NDkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgY3VycmVu
dCBDdXJsIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGhhbmRsZSBhIDQwMSByZXNwb25zZS4KKyAg
ICAgICAgV2hlbiByZWNlaXZpbmcgaHR0cCBjb2RlIDQwMSwgd2UgbmVlZCB0byBnaXZlIGEgbm90
aWZpY2F0aW9uIHRoYXQgYXV0aG9yaXphdGlvbiBpcyByZXF1aXJlZCwgYnkgY2FsbGluZyB0aGUg
YXBwcm9wcmlhdGUgbm90aWZpY2F0aW9uIG1ldGhvZC4KKyAgICAgICAgVGhpcyBnaXZlcyBhIFdl
YktpdCBjbGllbnQgdGhlIHBvc3NpYmlsaXR5IHRvIHByZXNlbnQgYSBwYXNzd29yZCBkaWFsb2cg
dG8gdGhlIHVzZXIuCisgICAgICAgIEluIHJlc3BvbnNlIHRvIHRoaXMsIHdlIHNob3VsZCBwcm92
aWRlIEN1cmwgd2l0aCB0aGUgZ2l2ZW4gdXNlcm5hbWUgYW5kIHBhc3N3b3JkLCBzbyBhbm90aGVy
IHJlcXVlc3QgY2FuIGJlIHNlbnQgd2l0aCB0aGUgZ2l2ZW4gY3JlZGVudGlhbHMuCisKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UpOgorICAgICAgICAgICAgSW1wbGVtZW50IGVtcHR5IG1ldGhvZDsgdXNlIHRoZSBzYW1l
IGltcGxlbWVudGF0aW9uIGFzIHRoZSBDRk5ldHdvcmsgdmVyc2lvbiBkb2VzLAorICAgICAgICAg
ICAgbm90aWZ5IGRlbGVnYXRlIHdoZW4gYXV0aG9yaXphdGlvbiBpcyByZXF1aXJlZC4gCisgICAg
ICAgICogV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTZW5kZXJDdXJsLmNwcDoKKyAgICAg
ICAgKFdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2VuZGVyOjpjYW5jZWxBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSk6CisgICAgICAgICAgICBJbXBsZW1lbnQgZW1wdHkgbWV0aG9kOyB1c2Ug
dGhlIHNhbWUgaW1wbGVtZW50YXRpb24gYXMgdGhlIENGTmV0d29yayB2ZXJzaW9uIGRvZXMuCisg
ICAgICAgIChXZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNlbmRlcjo6Y29udGludWVXaXRo
b3V0Q3JlZGVudGlhbEZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgICAgIElt
cGxlbWVudCBlbXB0eSBtZXRob2Q7IHVzZSB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiBhcyB0aGUg
Q0ZOZXR3b3JrIHZlcnNpb24gZG9lcy4KKyAgICAgICAgKFdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlU2VuZGVyOjp1c2VDcmVkZW50aWFsKToKKyAgICAgICAgICAgIEltcGxlbWVudCBlbXB0
eSBtZXRob2Q7IHVzZSB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiBhcyB0aGUgQ0ZOZXR3b3JrIHZl
cnNpb24gZG9lcy4KKwogMjAxMy0wNy0xNyAgS2FuZ2lsIEhhbiAgPGthbmdpbC5oYW5Ac2Ftc3Vu
Zy5jb20+CiAKICAgICAgICAgVXNlIHRvSFRNTE1lZGlhRWxlbWVudApJbmRleDogU291cmNlL1dl
YktpdC93aW4vV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTZW5kZXJDdXJsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZVNlbmRlckN1cmwuY3BwCShyZXZpc2lvbiAxNTI3ODApCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNlbmRlckN1cmwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8aW5pdGd1aWQuaD4KICNpbmNsdWRlICJXZWJV
UkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNlbmRlci5oIgogCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKICNpbmNsdWRlICJXZWJVUkxBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZS5oIgogI2luY2x1ZGUgIldlYlVSTENyZWRlbnRpYWwuaCIKQEAgLTQyLDIx
ICs0MSwzNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTZW5kZXI6OmNhbmNlbEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKAogICAgICAgICAvKiBbaW5dICovIElXZWJVUkxBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSogY2hhbGxlbmdlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIEVfRkFJTDsKKyAgICBDT01QdHI8V2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2U+IHdl
YkNoYWxsZW5nZShRdWVyeSwgY2hhbGxlbmdlKTsKKyAgICBpZiAoIXdlYkNoYWxsZW5nZSkKKyAg
ICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIG1fY2xpZW50LT5yZWNlaXZlZENhbmNlbGxhdGlv
bih3ZWJDaGFsbGVuZ2UtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCkpOworICAgIHJldHVybiBT
X09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlVSTEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlU2VuZGVyOjpjb250aW51ZVdpdGhvdXRDcmVkZW50aWFsRm9yQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoCiAgICAgICAgIC8qIFtpbl0gKi8gSVdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKiBjaGFsbGVuZ2UpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
RV9GQUlMOworICAgIENPTVB0cjxXZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZT4gd2ViQ2hh
bGxlbmdlKFF1ZXJ5LCBjaGFsbGVuZ2UpOworICAgIGlmICghd2ViQ2hhbGxlbmdlKQorICAgICAg
ICByZXR1cm4gRV9GQUlMOworCisgICAgbV9jbGllbnQtPnJlY2VpdmVkUmVxdWVzdFRvQ29udGlu
dWVXaXRob3V0Q3JlZGVudGlhbCh3ZWJDaGFsbGVuZ2UtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KCkpOworICAgIHJldHVybiBTX09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdl
YlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2VuZGVyOjp1c2VDcmVkZW50aWFsKAogICAgICAg
ICAvKiBbaW5dICovIElXZWJVUkxDcmVkZW50aWFsKiBjcmVkZW50aWFsLCAKICAgICAgICAgLyog
W2luXSAqLyBJV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UqIGNoYWxsZW5nZSkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBFX0ZBSUw7CisgICAgQ09NUHRyPFdlYlVS
TEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlPiB3ZWJDaGFsbGVuZ2UoUXVlcnksIGNoYWxsZW5nZSk7
CisgICAgaWYgKCF3ZWJDaGFsbGVuZ2UpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisgICAgCisg
ICAgQ09NUHRyPFdlYlVSTENyZWRlbnRpYWw+IHdlYkNyZWRlbnRpYWw7CisgICAgaWYgKCFjcmVk
ZW50aWFsIHx8IEZBSUxFRChjcmVkZW50aWFsLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihXZWJV
UkxDcmVkZW50aWFsKSwgKHZvaWQqKikmd2ViQ3JlZGVudGlhbCkpKQorICAgICAgICByZXR1cm4g
RV9GQUlMOworCisgICAgbV9jbGllbnQtPnJlY2VpdmVkQ3JlZGVudGlhbCh3ZWJDaGFsbGVuZ2Ut
PmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCksIHdlYkNyZWRlbnRpYWwtPmNyZWRlbnRpYWwoKSk7
CisgICAgcmV0dXJuIFNfT0s7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiAx
NTI3ODApCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNiBAQCBib29sIFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpzaG91bGRVc2VDcmVkCiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9h
ZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKIHsKLSNpZiBVU0UoQ0ZORVRXT1JLKQogICAgIEFTU0VS
VChjaGFsbGVuZ2UuYXV0aGVudGljYXRpb25DbGllbnQoKSk7CiAKICAgICBXZWJWaWV3KiB3ZWJW
aWV3ID0gbV93ZWJGcmFtZS0+d2ViVmlldygpOwpAQCAtMTU4LDkgKzE1Nyw2IEBAIHZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmUKICAgICAvLyBJZiB0aGUgUmVzb3VyY2VM
b2FkRGVsZWdhdGUgZG9lc24ndCBleGlzdCBvciBmYWlscyB0byBoYW5kbGUgdGhlIGNhbGwsIHdl
IHRlbGwgdGhlIFJlc291cmNlSGFuZGxlCiAgICAgLy8gdG8gY29udGludWUgd2l0aG91dCBjcmVk
ZW50aWFsIC0gdGhpcyBpcyB0aGUgYmVzdCBhcHByb3hpbWF0aW9uIG9mIE1hYyBiZWhhdmlvcgog
ICAgIGNoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZFJlcXVlc3RUb0Nv
bnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY2hhbGxlbmdlKTsKLSNlbHNlCi0gICBub3RJbXBsZW1l
bnRlZCgpOwotI2VuZGlmCiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNo
RGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y2hhbGxlbmdlKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>