<?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>17837</bug_id>
          
          <creation_ts>2008-03-13 16:09:10 -0700</creation_ts>
          <short_desc>Separate Windows Networking into CFNetwork and Curl Files</short_desc>
          <delta_ts>2008-03-18 16:23:33 -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>WebKit Misc.</component>
          <version>523.x (Safari 3)</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>
          
          <blocked>17730</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>zucker</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>73643</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2008-03-13 16:09:10 -0700</bug_when>
    <thetext>This patch splits some WebCore and WebKit files into generic, CFNetwork-specific, and Curl-Specific implementations of some network interface implementations.

It also extends the Curl authentication handle with some non-functional, but signature-compatible implementations that reduce the amount of conditional logic needed in WebKit/win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73652</commentid>
    <comment_count>1</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2008-03-13 16:57:22 -0700</bug_when>
    <thetext>Indicate relationship with 17730.  This bug implements part of the changes intended by Bug 17837.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73653</commentid>
    <comment_count>2</comment_count>
      <attachid>19750</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2008-03-13 17:04:31 -0700</bug_when>
    <thetext>Created attachment 19750
Split CFNetwork-specific code into separate files

This patch takes some CFNetwork-specific logic and moves the relevant code to new files.  Stubs for Curl versions of these routines are provided.

* Please note the use of &apos;svn cp&apos; to create the CFNet files, as this produces diff&apos;s that appear to involve large changes, when it is simply a copy/delete.
* Note that the Cairo targets are not yet updated to use these new Curl files.  These changes will be committed as part of Bug 17730 once these changes are in place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74029</commentid>
    <comment_count>3</comment_count>
      <attachid>19823</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2008-03-16 21:03:40 -0700</bug_when>
    <thetext>Created attachment 19823
Patch moving logic to WebCore

This revision places some implementation in WebCore/platform/network/curl, which reduces the amount of #ifdef&apos;s needed in WebKit.  Since the patch no longer adds any files, the project files are removed from this patch resulting in a smaller set of changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74130</commentid>
    <comment_count>4</comment_count>
      <attachid>19823</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-03-17 11:48:07 -0700</bug_when>
    <thetext>Comment on attachment 19823
Patch moving logic to WebCore

+#if PLATFORM(WIN) &amp;&amp; USE(CURL)
     static void setHostAllowsAnyHTTPSCertificate(const String&amp;);
     static void setClientCertificate(const String&amp; host, CFDataRef);
 #endif

You should probably include #if PLATFORM(CF) here as well, since you&apos;re using CFDataRef.

+#if PLATFORM(WIN)
+// FIXME:  The CFDataRef will need to be something else when
+// building without CoreFoundation
+static HashMap&lt;String, RetainPtr&lt;CFDataRef&gt; &gt;&amp; clientCerts()
+{
+    static HashMap&lt;String, RetainPtr&lt;CFDataRef&gt; &gt; certs;
+    return certs;
+}
+
+void ResourceHandle::setClientCertificate(const String&amp; host, CFDataRef cert)
+{
+    clientCerts().set(host.lower(), cert);
+}
+#endif

Ditto here.

+++ WebKit/win/WebDataSource.cpp	(working copy)
@@ -46,6 +46,7 @@
 #include &lt;WebCore/FrameLoader.h&gt;
 #include &lt;WebCore/KURL.h&gt;
 #pragma warning(pop)
+#include &lt;wtf/RetainPtr.h&gt;

Why is this needed?

+++ WebKit/win/WebError.cpp	(working copy)
@@ -28,7 +28,9 @@
 #include &quot;WebError.h&quot;
 #include &quot;WebKit.h&quot;
 
+#if USE(CFNETWORK)
 #include &lt;WebKitSystemInterface/WebKitSystemInterface.h&gt;
+#endif
 #pragma warning(push, 0)
 #include &lt;WebCore/BString.h&gt;
 #pragma warning(pop)

We normally put headers that are conditionally included in their own paragraph after all the unconditional headers.

+++ WebKit/win/WebURLAuthenticationChallenge.cpp	(working copy)
@@ -40,6 +40,7 @@
 #include &lt;WebCore/BString.h&gt;
 #include &lt;WebCore/ResourceHandle.h&gt;
 #pragma warning(pop)
+#include &lt;wtf/RetainPtr.h&gt;

Why is this needed?

@@ -168,7 +169,11 @@ HRESULT STDMETHODCALLTYPE WebURLAuthenti
     if (!webSender)
         return E_NOINTERFACE;
 
+#if USE(CFNETWORK)
     m_authenticationChallenge = AuthenticationChallenge(webChallenge-&gt;authenticationChallenge().cfURLAuthChallengeRef(), webSender-&gt;resourceHandle());
+#else
+    m_authenticationChallenge = AuthenticationChallenge(webSender-&gt;resourceHandle());
+#endif

I think it would be better to return E_FAIL here and not modify m_authenticationChallenge. Then you can remove the changes to AuthenticationChallenge

r- for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74135</commentid>
    <comment_count>5</comment_count>
      <attachid>19843</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2008-03-17 12:19:57 -0700</bug_when>
    <thetext>Created attachment 19843
Revision 2 based on aroben&apos;s review

* No longer construct dummy authentication-challenge object.  Default constructed &apos;blank&apos; object will function properly.
* Return E_FAIL for the case of attempt to create authentication/challenge pair in non-CFNetwork mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74136</commentid>
    <comment_count>6</comment_count>
      <attachid>19843</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-03-17 12:29:18 -0700</bug_when>
    <thetext>Comment on attachment 19843
Revision 2 based on aroben&apos;s review

I have the same comments as before about the WebCore changes. Plus you don&apos;t need to change AuthenticationChallenge.h at all anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74139</commentid>
    <comment_count>7</comment_count>
      <attachid>19845</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2008-03-17 12:52:25 -0700</bug_when>
    <thetext>Created attachment 19845
Revision 3 based on aroben&apos;s further comments.

* Removed unused constructor from curl/AuthenticationChallenge.h
* However:  Retained implementation of get and member variable so that normal use of AuthenticationChallenge object does not have to be commented out for Curl case.  This will eventually be used for &apos;real stuff&apos;.
* Cleaned up formatting.
* Removed some unneeded &quot;wtf/RetainPtr&quot; includes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74276</commentid>
    <comment_count>8</comment_count>
      <attachid>19845</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-03-18 10:34:47 -0700</bug_when>
    <thetext>Comment on attachment 19845
Revision 3 based on aroben&apos;s further comments.

I think this looks OK. I still haven&apos;t decided what I think about having these #ifdefs in WebKit. Maybe we can find some way of pushing the required functionality down into WebCore to avoid the #ifdef in WebKit.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74283</commentid>
    <comment_count>9</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2008-03-18 11:27:34 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I think this looks OK. I still haven&apos;t decided what I think about having these
&gt; #ifdefs in WebKit. Maybe we can find some way of pushing the required
&gt; functionality down into WebCore to avoid the #ifdef in WebKit.
&gt; 

I think that once the Curl implementation of some of these functions is up and running we can better determine how to move forward.  Right now the main obstacle to moving them to WebCore is that there are some member variables in the WebKit classes.  E.g., WebURLResponse holds onto an SSL certificate (dictionary ref) to ensure that this stays valid for the lifetime of the response.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74343</commentid>
    <comment_count>10</comment_count>
    <who name="Matt Lilek">dev+webkit</who>
    <bug_when>2008-03-18 16:23:33 -0700</bug_when>
    <thetext>Committed revision 31141.
=</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19750</attachid>
            <date>2008-03-13 17:04:31 -0700</date>
            <delta_ts>2008-03-16 21:03:40 -0700</delta_ts>
            <desc>Split CFNetwork-specific code into separate files</desc>
            <filename>WebKitCurlCFSplit.patch</filename>
            <type>text/plain</type>
            <size>83057</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMTA0NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDgtMDMtMTMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UHJvdmlkZSBzb21lIHN0dWIgaW1wbGVtZW50YXRpb25zIGZvciB0aGluZ3MgdGhhdCBXZWJLaXQK
KyAgICAgICAgdXNlcyBmb3IgcGVyZm9ybWluZyBhdXRoZW50aWNhdGlvbi9jaGFsbGVuZ2UgYWN0
aXZpdGllcy4gIFRoaXMKKyAgICAgICAgaXMgaW4gc3VwcG9ydCBvZiBodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzgzNworCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1Qg
Q0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNh
dGlvbkNoYWxsZW5nZS5oOgorICAgICAgICAoV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVu
Z2U6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlOjpzb3VyY2VIYW5kbGUpOgorCiAyMDA4LTAzLTEzICBEYW4gQmVybnN0
ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCShyZXZpc2lv
biAzMTA0MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgcHVibGljOgogICAgIGZyaWVuZCBMUkVT
VUxUIF9fc3RkY2FsbCBSZXNvdXJjZUhhbmRsZVduZFByb2MoSFdORCwgdW5zaWduZWQgbWVzc2Fn
ZSwgV1BBUkFNLCBMUEFSQU0pOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRG
T1JNKFFUKSB8fCBQTEFURk9STShXWCkKKyNpZiBQTEFURk9STShRVCkgfHwgVVNFKENVUkwpCiAg
ICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZ2V0SW50ZXJuYWwoKSB7IHJldHVybiBkLmdldCgp
OyB9CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCShyZXZpc2lvbiAzMTA0MikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgOiBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZUJhc2UocHJvdGVjdGlvblNwYWNlLCBwcm9wb3NlZENyZWRlbnRpYWws
IHByZXZpb3VzRmFpbHVyZUNvdW50LCByZXNwb25zZSwgZXJyb3IpCiAgICAgewogICAgIH0KKwor
ICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiBzb3VyY2VIYW5kbGUp
CisgICAgICAgIDogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlKCkKKyAgICAgICAgLCBtX3Nv
dXJjZUhhbmRsZShzb3VyY2VIYW5kbGUpCisgICAgeworICAgIH0KKworICAgIFJlc291cmNlSGFu
ZGxlKiBzb3VyY2VIYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUhhbmRsZS5nZXQoKTsg
fQorCisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBtX3NvdXJjZUhhbmRsZTsgICAgCiB9Owog
CiB9CkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2lu
L0NoYW5nZUxvZwkocmV2aXNpb24gMzEwNDQpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDA4LTAzLTEzICBCcmVudCBGdWxnaGFtICA8
YmZ1bGdoYW1AZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFByb3ZpZGUgc29tZSBzdHViIGltcGxlbWVudGF0aW9ucyBmb3IgdGhpbmdz
IHRoYXQgV2ViS2l0CisgICAgICAgIHVzZXMgZm9yIHBlcmZvcm1pbmcgYXV0aGVudGljYXRpb24v
Y2hhbGxlbmdlIGFjdGl2aXRpZXMuICBUaGlzCisgICAgICAgIGlzIGluIHN1cHBvcnQgb2YgaHR0
cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc4MzcKKworICAgICAgICAqIFdl
YkRhdGFTb3VyY2UuY3BwOgorICAgICAgICAqIFdlYkVycm9yLmNwcDogIFJlbW92ZSBDRk5ldHdv
cmstc3BlY2lmaWMgbG9naWMKKyAgICAgICAgKiBXZWJFcnJvckNGTmV0LmNwcDogQ29waWVkIGZy
b20gV2ViS2l0L3dpbi9XZWJFcnJvci5jcHAuCisgICAgICAgIChXZWJFcnJvcjo6c3NsUGVlckNl
cnRpZmljYXRlKToKKyAgICAgICAgKiBXZWJFcnJvckN1cmwuY3BwOiBDb3BpZWQgZnJvbSBXZWJL
aXQvd2luL1dlYkVycm9yLmNwcC4KKyAgICAgICAgKFdlYkVycm9yOjpzc2xQZWVyQ2VydGlmaWNh
dGUpOgorICAgICAgICAqIFdlYktpdC52Y3Byb2ovV2ViS2l0LnZjcHJvajoKKyAgICAgICAgKiBX
ZWJNdXRhYmxlVVJMUmVxdWVzdC5jcHA6IFJlbW92ZSBDRk5ldHdvcmstc3BlY2lmaWMgbG9naWMu
CisgICAgICAgICogV2ViTXV0YWJsZVVSTFJlcXVlc3RDRk5ldC5jcHA6IENvcGllZCBmcm9tIFdl
YktpdC93aW4vV2ViTXV0YWJsZVVSTFJlcXVlc3QuY3BwLgorICAgICAgICAoV2ViTXV0YWJsZVVS
TFJlcXVlc3Q6OnNldENsaWVudENlcnRpZmljYXRlKToKKyAgICAgICAgKiBXZWJNdXRhYmxlVVJM
UmVxdWVzdEN1cmwuY3BwOiBDb3BpZWQgZnJvbSBXZWJLaXQvd2luL1dlYk11dGFibGVVUkxSZXF1
ZXN0LmNwcC4KKyAgICAgICAgKFdlYk11dGFibGVVUkxSZXF1ZXN0OjpzZXRBbGxvd3NBbnlIVFRQ
U0NlcnRpZmljYXRlKToKKyAgICAgICAgKFdlYk11dGFibGVVUkxSZXF1ZXN0OjpzZXRDbGllbnRD
ZXJ0aWZpY2F0ZSk6CisgICAgICAgICogV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuY3Bw
OiAgQ29uZGl0aW9uYWxpemUgY29uc3RydWN0b3IKKyAgICAgICAgICBmb3IgYXV0aGVudGljYXRp
b24vY2hhbGxlbmdlIG1lbWJlci4KKyAgICAgICAgKFdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlOjppbml0V2l0aEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKiBXZWJVUkxS
ZXBvbnNlQ3VybC5jcHA6IENvcGllZCBmcm9tIFdlYktpdC93aW4vV2ViVVJMUmVzcG9uc2UuY3Bw
LgorICAgICAgICAoV2ViVVJMUmVzcG9uc2U6OnNzbFBlZXJDZXJ0aWZpY2F0ZSk6CisgICAgICAg
ICogV2ViVVJMUmVzcG9uc2UuY3BwOiAgUmVtb3ZlIENGTmV0d29yay1zcGVjaWZpYyBsb2dpYy4K
KyAgICAgICAgKiBXZWJVUkxSZXNwb25zZS5oOiBDb25kaXRpb25hbGl6ZSBDRk5ldHdvcmstc3Bl
Y2lmaWMgbWVtYmVyLgorICAgICAgICAqIFdlYlVSTFJlc3BvbnNlQ0ZOZXQuY3BwOiBDb3BpZWQg
ZnJvbSBXZWJLaXQvd2luL1dlYlVSTFJlc3BvbnNlLmNwcC4KKyAgICAgICAgKiBXZWJWaWV3LmNw
cDogIENvbmRpdGlvbmFsaXplIENGTmV0d29yay1zcGVjaWZpYyBuZXR3b3JrIHByb3RvY29sIHRl
c3QuCisgICAgICAgIChXZWJWaWV3OjpjYW5IYW5kbGVSZXF1ZXN0KToKKwogMjAwOC0wMy0xMyAg
QWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgQW5vdGhlciBXaW5kb3dz
IGJ1aWxkIGZpeCBhZnRlciByMzEwMzQKSW5kZXg6IFdlYktpdC93aW4vV2ViRGF0YVNvdXJjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJEYXRhU291cmNlLmNwcAkocmV2aXNpb24g
MzEwNDQpCisrKyBXZWJLaXQvd2luL1dlYkRhdGFTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvS1VSTC5oPgogI3ByYWdtYSB3YXJuaW5nKHBvcCkKKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkluZGV4OiBXZWJLaXQv
d2luL1dlYkVycm9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkVycm9yLmNwcAko
cmV2aXNpb24gMzEwNDQpCisrKyBXZWJLaXQvd2luL1dlYkVycm9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOCwxMCArMjgsMTAgQEAKICNpbmNsdWRlICJXZWJFcnJvci5oIgogI2luY2x1ZGUgIldl
YktpdC5oIgogCi0jaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUlu
dGVyZmFjZS5oPgogI3ByYWdtYSB3YXJuaW5nKHB1c2gsIDApCiAjaW5jbHVkZSA8V2ViQ29yZS9C
U3RyaW5nLmg+CiAjcHJhZ21hIHdhcm5pbmcocG9wKQorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTE5NywyOSArMTk3LDYgQEAgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJFcnJvcjo6aXNQbwogICAgIHJldHVybiBTX09LOwog
fQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkVycm9yOjpzc2xQZWVyQ2VydGlmaWNh
dGUoIAotICAgIC8qIFtyZXR2YWxdW291dF0gKi8gT0xFX0hBTkRMRSogcmVzdWx0KQotewotICAg
IGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAgICpyZXN1bHQgPSAw
OwotCi0gICAgaWYgKCFtX2NmRXJyb3JVc2VySW5mb0RpY3QpIHsKLSAgICAgICAgLy8gY29weSB1
c2VyaW5mbyBmcm9tIENGRXJyb3JSZWYKLSAgICAgICAgQ0ZFcnJvclJlZiBjZkVycm9yID0gbV9l
cnJvcjsKLSAgICAgICAgbV9jZkVycm9yVXNlckluZm9EaWN0LmFkb3B0Q0YoQ0ZFcnJvckNvcHlV
c2VySW5mbyhjZkVycm9yKSk7Ci0gICAgfQotCi0gICAgaWYgKCFtX2NmRXJyb3JVc2VySW5mb0Rp
Y3QpCi0gICAgICAgIHJldHVybiBFX0ZBSUw7Ci0KLSAgICB2b2lkKiBkYXRhID0gd2tHZXRTU0xQ
ZWVyQ2VydGlmaWNhdGVEYXRhKG1fY2ZFcnJvclVzZXJJbmZvRGljdC5nZXQoKSk7Ci0gICAgaWYg
KCFkYXRhKQotICAgICAgICByZXR1cm4gRV9GQUlMOwotICAgICpyZXN1bHQgPSAoT0xFX0hBTkRM
RSkoVUxPTkc2NClkYXRhOwotICAgIHJldHVybiAqcmVzdWx0ID8gU19PSyA6IEVfRkFJTDsKLX0K
LQogY29uc3QgUmVzb3VyY2VFcnJvciYgV2ViRXJyb3I6OnJlc291cmNlRXJyb3IoKSBjb25zdAog
ewogICAgIHJldHVybiBtX2Vycm9yOwpJbmRleDogV2ViS2l0L3dpbi9XZWJFcnJvckNGTmV0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkVycm9yQ0ZOZXQuY3BwCShyZXZpc2lvbiAz
MTAzNikJKGZyb20gV2ViS2l0L3dpbi9XZWJFcnJvci5jcHA6MzEwMzYpCisrKyBXZWJLaXQvd2lu
L1dlYkVycm9yQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRETEwuaCIKKyNpbmNs
dWRlICJXZWJFcnJvci5oIgorI2luY2x1ZGUgIldlYktpdC5oIgorCisjaW5jbHVkZSA8V2ViS2l0
U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgorI3ByYWdtYSB3YXJuaW5n
KHB1c2gsIDApCisjaW5jbHVkZSA8V2ViQ29yZS9CU3RyaW5nLmg+CisjcHJhZ21hIHdhcm5pbmco
cG9wKQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLy8gV2ViRXJyb3IgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK1dlYkVycm9yOjpXZWJFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvciwgSVBy
b3BlcnR5QmFnKiB1c2VySW5mbykKKyAgICA6IG1fcmVmQ291bnQoMCkKKyAgICAsIG1fZXJyb3Io
ZXJyb3IpCisgICAgLCBtX3VzZXJJbmZvKHVzZXJJbmZvKQoreworICAgIGdDbGFzc0NvdW50Kys7
Cit9CisKK1dlYkVycm9yOjp+V2ViRXJyb3IoKQoreworICAgIGdDbGFzc0NvdW50LS07Cit9CisK
K1dlYkVycm9yKiBXZWJFcnJvcjo6Y3JlYXRlSW5zdGFuY2UoY29uc3QgUmVzb3VyY2VFcnJvciYg
ZXJyb3IsIElQcm9wZXJ0eUJhZyogdXNlckluZm8pCit7CisgICAgV2ViRXJyb3IqIGluc3RhbmNl
ID0gbmV3IFdlYkVycm9yKGVycm9yLCB1c2VySW5mbyk7CisgICAgaW5zdGFuY2UtPkFkZFJlZigp
OworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworV2ViRXJyb3IqIFdlYkVycm9yOjpjcmVhdGVJ
bnN0YW5jZSgpCit7CisgICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKFJlc291cmNlRXJyb3IoKSk7
Cit9CisKKy8vIElVbmtub3duIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBXZWJFcnJvcjo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3Qp
Cit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9J
VW5rbm93bikpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2ViRXJyb3IqPih0
aGlzKTsKKyAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBDTFNJRF9XZWJFcnJvcikpCisg
ICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJFcnJvcio+KHRoaXMpOworICAgIGVs
c2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JV2ViRXJyb3IpKQorICAgICAgICAqcHB2T2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SVdlYkVycm9yKj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVh
bEdVSUQocmlpZCwgSUlEX0lXZWJFcnJvclByaXZhdGUpKQorICAgICAgICAqcHB2T2JqZWN0ID0g
c3RhdGljX2Nhc3Q8SVdlYkVycm9yUHJpdmF0ZSo+KHRoaXMpOworICAgIGVsc2UKKyAgICAgICAg
cmV0dXJuIEVfTk9JTlRFUkZBQ0U7CisKKyAgICBBZGRSZWYoKTsKKyAgICByZXR1cm4gU19PSzsK
K30KKworVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRXJyb3I6OkFkZFJlZih2b2lkKQorewor
ICAgIHJldHVybiArK21fcmVmQ291bnQ7Cit9CisKK1VMT05HIFNURE1FVEhPRENBTExUWVBFIFdl
YkVycm9yOjpSZWxlYXNlKHZvaWQpCit7CisgICAgVUxPTkcgbmV3UmVmID0gLS1tX3JlZkNvdW50
OworICAgIGlmICghbmV3UmVmKQorICAgICAgICBkZWxldGUodGhpcyk7CisKKyAgICByZXR1cm4g
bmV3UmVmOworfQorCisvLyBJV2ViRXJyb3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgV2ViRXJyb3I6OmluaXQoIAorICAgIC8qIFtpbl0gKi8gQlNUUiBkb21haW4sCisg
ICAgLyogW2luXSAqLyBpbnQgY29kZSwKKyAgICAvKiBbaW5dICovIEJTVFIgdXJsKQoreworICAg
IG1fZXJyb3IgPSBSZXNvdXJjZUVycm9yKFN0cmluZyhkb21haW4sIFN5c1N0cmluZ0xlbihkb21h
aW4pKSwgY29kZSwgU3RyaW5nKHVybCwgU3lzU3RyaW5nTGVuKHVybCkpLCBTdHJpbmcoKSk7Cisg
ICAgcmV0dXJuIFNfT0s7Cit9CisgIAorSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJFcnJv
cjo6Y29kZSggCisgICAgLyogW3JldHZhbF1bb3V0XSAqLyBpbnQqIHJlc3VsdCkKK3sKKyAgICAq
cmVzdWx0ID0gbV9lcnJvci5lcnJvckNvZGUoKTsKKyAgICByZXR1cm4gU19PSzsKK30KKyAgICAg
ICAgCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkVycm9yOjpkb21haW4oIAorICAgIC8q
IFtyZXR2YWxdW291dF0gKi8gQlNUUiogcmVzdWx0KQoreworICAgIGlmICghcmVzdWx0KQorICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgKnJlc3VsdCA9IEJTdHJpbmcobV9lcnJvci5k
b21haW4oKSkucmVsZWFzZSgpOworICAgIHJldHVybiBTX09LOworfQorICAgICAgICAgICAgICAg
CitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkVycm9yOjpsb2NhbGl6ZWREZXNjcmlwdGlv
biggCisgICAgLyogW3JldHZhbF1bb3V0XSAqLyBCU1RSKiByZXN1bHQpCit7CisgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICAqcmVzdWx0ID0gQlN0cmlu
ZyhtX2Vycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkpLnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
U19PSzsKK30KKworICAgICAgICAKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRXJyb3I6
OmxvY2FsaXplZEZhaWx1cmVSZWFzb24oIAorICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNUUiog
LypyZXN1bHQqLykKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gRV9O
T1RJTVBMOworfQorICAgICAgICAKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRXJyb3I6
OmxvY2FsaXplZFJlY292ZXJ5T3B0aW9ucyggCisgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJRW51
bVZBUklBTlQqKiAvKnJlc3VsdCovKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBFX05PVElNUEw7Cit9CisgICAgICAgIAorSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBXZWJFcnJvcjo6bG9jYWxpemVkUmVjb3ZlcnlTdWdnZXN0aW9uKCAKKyAgICAvKiBbcmV0dmFs
XVtvdXRdICovIEJTVFIqIC8qcmVzdWx0Ki8pCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKyAgICAgICAKK0hSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViRXJyb3I6OnJlY292ZXJBdHRlbXB0ZXIoIAorICAgIC8qIFtyZXR2YWxdW291dF0g
Ki8gSVVua25vd24qKiAvKnJlc3VsdCovKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBFX05PVElNUEw7Cit9CisgICAgICAgIAorSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBXZWJFcnJvcjo6dXNlckluZm8oIAorICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSVByb3Bl
cnR5QmFnKiogcmVzdWx0KQoreworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOworICAgICpyZXN1bHQgPSAwOworCisgICAgaWYgKCFtX3VzZXJJbmZvKQorICAgICAg
ICByZXR1cm4gRV9GQUlMOworCisgICAgcmV0dXJuIG1fdXNlckluZm8uY29weVJlZlRvKHJlc3Vs
dCk7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRXJyb3I6OmZhaWxpbmdVUkwo
IAorICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNUUiogcmVzdWx0KQoreworICAgIGlmICghcmVz
dWx0KQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgKnJlc3VsdCA9IEJTdHJpbmco
bV9lcnJvci5mYWlsaW5nVVJMKCkpLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gU19PSzsKK30KKwor
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJFcnJvcjo6aXNQb2xpY3lDaGFuZ2VFcnJvcigg
CisgICAgLyogW3JldHZhbF1bb3V0XSAqLyBCT09MICpyZXN1bHQpCit7CisgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICAqcmVzdWx0ID0gbV9lcnJvci5k
b21haW4oKSA9PSBTdHJpbmcoV2ViS2l0RXJyb3JEb21haW4pCisgICAgICAgICYmIG1fZXJyb3Iu
ZXJyb3JDb2RlKCkgPT0gV2ViS2l0RXJyb3JGcmFtZUxvYWRJbnRlcnJ1cHRlZEJ5UG9saWN5Q2hh
bmdlOworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdl
YkVycm9yOjpzc2xQZWVyQ2VydGlmaWNhdGUoIAorICAgIC8qIFtyZXR2YWxdW291dF0gKi8gT0xF
X0hBTkRMRSogcmVzdWx0KQoreworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOworICAgICpyZXN1bHQgPSAwOworCisgICAgaWYgKCFtX2NmRXJyb3JVc2VySW5mb0Rp
Y3QpIHsKKyAgICAgICAgLy8gY29weSB1c2VyaW5mbyBmcm9tIENGRXJyb3JSZWYKKyAgICAgICAg
Q0ZFcnJvclJlZiBjZkVycm9yID0gbV9lcnJvcjsKKyAgICAgICAgbV9jZkVycm9yVXNlckluZm9E
aWN0LmFkb3B0Q0YoQ0ZFcnJvckNvcHlVc2VySW5mbyhjZkVycm9yKSk7CisgICAgfQorCisgICAg
aWYgKCFtX2NmRXJyb3JVc2VySW5mb0RpY3QpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAg
ICB2b2lkKiBkYXRhID0gd2tHZXRTU0xQZWVyQ2VydGlmaWNhdGVEYXRhKG1fY2ZFcnJvclVzZXJJ
bmZvRGljdC5nZXQoKSk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gRV9GQUlMOwor
ICAgICpyZXN1bHQgPSAoT0xFX0hBTkRMRSkoVUxPTkc2NClkYXRhOworICAgIHJldHVybiAqcmVz
dWx0ID8gU19PSyA6IEVfRkFJTDsKK30KKworY29uc3QgUmVzb3VyY2VFcnJvciYgV2ViRXJyb3I6
OnJlc291cmNlRXJyb3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2Vycm9yOworfQpJbmRleDog
V2ViS2l0L3dpbi9XZWJFcnJvckNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dl
YkVycm9yQ0ZOZXQuY3BwCShyZXZpc2lvbiAzMTAzNikKKysrIFdlYktpdC93aW4vV2ViRXJyb3JD
Rk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMTcxICszMiwxMCBAQAogI3ByYWdtYSB3YXJu
aW5nKHB1c2gsIDApCiAjaW5jbHVkZSA8V2ViQ29yZS9CU3RyaW5nLmg+CiAjcHJhZ21hIHdhcm5p
bmcocG9wKQorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKLS8vIFdlYkVycm9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1XZWJFcnJvcjo6V2ViRXJyb3Io
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IsIElQcm9wZXJ0eUJhZyogdXNlckluZm8pCi0gICAg
OiBtX3JlZkNvdW50KDApCi0gICAgLCBtX2Vycm9yKGVycm9yKQotICAgICwgbV91c2VySW5mbyh1
c2VySW5mbykKLXsKLSAgICBnQ2xhc3NDb3VudCsrOwotfQotCi1XZWJFcnJvcjo6fldlYkVycm9y
KCkKLXsKLSAgICBnQ2xhc3NDb3VudC0tOwotfQotCi1XZWJFcnJvciogV2ViRXJyb3I6OmNyZWF0
ZUluc3RhbmNlKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yLCBJUHJvcGVydHlCYWcqIHVzZXJJ
bmZvKQotewotICAgIFdlYkVycm9yKiBpbnN0YW5jZSA9IG5ldyBXZWJFcnJvcihlcnJvciwgdXNl
ckluZm8pOwotICAgIGluc3RhbmNlLT5BZGRSZWYoKTsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci19
Ci0KLVdlYkVycm9yKiBXZWJFcnJvcjo6Y3JlYXRlSW5zdGFuY2UoKQotewotICAgIHJldHVybiBj
cmVhdGVJbnN0YW5jZShSZXNvdXJjZUVycm9yKCkpOwotfQotCi0vLyBJVW5rbm93biAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRXJyb3I6OlF1ZXJ5SW50ZXJmYWNl
KFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KQotewotICAgICpwcHZPYmplY3QgPSAwOwot
ICAgIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSVVua25vd24pKQotICAgICAgICAqcHB2T2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SVdlYkVycm9yKj4odGhpcyk7Ci0gICAgZWxzZSBpZiAoSXNFcXVh
bEdVSUQocmlpZCwgQ0xTSURfV2ViRXJyb3IpKQotICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8V2ViRXJyb3IqPih0aGlzKTsKLSAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJ
SURfSVdlYkVycm9yKSkKLSAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElXZWJFcnJv
cio+KHRoaXMpOwotICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JV2ViRXJyb3JQ
cml2YXRlKSkKLSAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElXZWJFcnJvclByaXZh
dGUqPih0aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBFX05PSU5URVJGQUNFOwotCi0g
ICAgQWRkUmVmKCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLVVMT05HIFNURE1FVEhPRENBTExU
WVBFIFdlYkVycm9yOjpBZGRSZWYodm9pZCkKLXsKLSAgICByZXR1cm4gKyttX3JlZkNvdW50Owot
fQotCi1VTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBXZWJFcnJvcjo6UmVsZWFzZSh2b2lkKQotewot
ICAgIFVMT05HIG5ld1JlZiA9IC0tbV9yZWZDb3VudDsKLSAgICBpZiAoIW5ld1JlZikKLSAgICAg
ICAgZGVsZXRlKHRoaXMpOwotCi0gICAgcmV0dXJuIG5ld1JlZjsKLX0KLQotLy8gSVdlYkVycm9y
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkVycm9yOjppbml0KCAK
LSAgICAvKiBbaW5dICovIEJTVFIgZG9tYWluLAotICAgIC8qIFtpbl0gKi8gaW50IGNvZGUsCi0g
ICAgLyogW2luXSAqLyBCU1RSIHVybCkKLXsKLSAgICBtX2Vycm9yID0gUmVzb3VyY2VFcnJvcihT
dHJpbmcoZG9tYWluLCBTeXNTdHJpbmdMZW4oZG9tYWluKSksIGNvZGUsIFN0cmluZyh1cmwsIFN5
c1N0cmluZ0xlbih1cmwpKSwgU3RyaW5nKCkpOwotICAgIHJldHVybiBTX09LOwotfQotICAKLUhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRXJyb3I6OmNvZGUoIAotICAgIC8qIFtyZXR2YWxd
W291dF0gKi8gaW50KiByZXN1bHQpCi17Ci0gICAgKnJlc3VsdCA9IG1fZXJyb3IuZXJyb3JDb2Rl
KCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0gICAgICAgIAotSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBXZWJFcnJvcjo6ZG9tYWluKCAKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJTVFIqIHJl
c3VsdCkKLXsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLQot
ICAgICpyZXN1bHQgPSBCU3RyaW5nKG1fZXJyb3IuZG9tYWluKCkpLnJlbGVhc2UoKTsKLSAgICBy
ZXR1cm4gU19PSzsKLX0KLSAgICAgICAgICAgICAgIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBXZWJFcnJvcjo6bG9jYWxpemVkRGVzY3JpcHRpb24oIAotICAgIC8qIFtyZXR2YWxdW291dF0g
Ki8gQlNUUiogcmVzdWx0KQotewotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOwotCi0gICAgKnJlc3VsdCA9IEJTdHJpbmcobV9lcnJvci5sb2NhbGl6ZWREZXNjcmlw
dGlvbigpKS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLSAgICAgICAgCi1IUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkVycm9yOjpsb2NhbGl6ZWRGYWlsdXJlUmVhc29uKCAK
LSAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJTVFIqIC8qcmVzdWx0Ki8pCi17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLSAgICAgICAgCi1IUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkVycm9yOjpsb2NhbGl6ZWRSZWNvdmVyeU9wdGlvbnMo
IAotICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSUVudW1WQVJJQU5UKiogLypyZXN1bHQqLykKLXsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gRV9OT1RJTVBMOwotfQotICAg
ICAgICAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRXJyb3I6OmxvY2FsaXplZFJlY292
ZXJ5U3VnZ2VzdGlvbiggCi0gICAgLyogW3JldHZhbF1bb3V0XSAqLyBCU1RSKiAvKnJlc3VsdCov
KQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBFX05PVElNUEw7Ci19
Ci0gICAgICAgCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkVycm9yOjpyZWNvdmVyQXR0
ZW1wdGVyKCAKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIElVbmtub3duKiogLypyZXN1bHQqLykK
LXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gRV9OT1RJTVBMOwotfQot
ICAgICAgICAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRXJyb3I6OnVzZXJJbmZvKCAK
LSAgICAvKiBbcmV0dmFsXVtvdXRdICovIElQcm9wZXJ0eUJhZyoqIHJlc3VsdCkKLXsKLSAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLSAgICAqcmVzdWx0ID0gMDsK
LQotICAgIGlmICghbV91c2VySW5mbykKLSAgICAgICAgcmV0dXJuIEVfRkFJTDsKLQotICAgIHJl
dHVybiBtX3VzZXJJbmZvLmNvcHlSZWZUbyhyZXN1bHQpOwotfQotCi1IUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFdlYkVycm9yOjpmYWlsaW5nVVJMKCAKLSAgICAvKiBbcmV0dmFsXVtvdXRdICov
IEJTVFIqIHJlc3VsdCkKLXsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIEVfUE9J
TlRFUjsKLQotICAgICpyZXN1bHQgPSBCU3RyaW5nKG1fZXJyb3IuZmFpbGluZ1VSTCgpKS5yZWxl
YXNlKCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
V2ViRXJyb3I6OmlzUG9saWN5Q2hhbmdlRXJyb3IoIAotICAgIC8qIFtyZXR2YWxdW291dF0gKi8g
Qk9PTCAqcmVzdWx0KQotewotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOwotCi0gICAgKnJlc3VsdCA9IG1fZXJyb3IuZG9tYWluKCkgPT0gU3RyaW5nKFdlYktpdEVy
cm9yRG9tYWluKQotICAgICAgICAmJiBtX2Vycm9yLmVycm9yQ29kZSgpID09IFdlYktpdEVycm9y
RnJhbWVMb2FkSW50ZXJydXB0ZWRCeVBvbGljeUNoYW5nZTsKLSAgICByZXR1cm4gU19PSzsKLX0K
LQogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJFcnJvcjo6c3NsUGVlckNlcnRpZmljYXRl
KCAKICAgICAvKiBbcmV0dmFsXVtvdXRdICovIE9MRV9IQU5ETEUqIHJlc3VsdCkKIHsKQEAgLTIx
OSw4ICs1OCwzIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRXJyb3I6OnNzbFAKICAg
ICAqcmVzdWx0ID0gKE9MRV9IQU5ETEUpKFVMT05HNjQpZGF0YTsKICAgICByZXR1cm4gKnJlc3Vs
dCA/IFNfT0sgOiBFX0ZBSUw7CiB9Ci0KLWNvbnN0IFJlc291cmNlRXJyb3ImIFdlYkVycm9yOjpy
ZXNvdXJjZUVycm9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lcnJvcjsKLX0KSW5kZXg6IFdl
YktpdC93aW4vV2ViRXJyb3JDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkVy
cm9yQ3VybC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvd2luL1dlYkVycm9yQ3VybC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdERMTC5oIgorI2luY2x1ZGUgIldlYkVycm9yLmgiCisjaW5j
bHVkZSAiV2ViS2l0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYkVycm9yOjpzc2xQZWVyQ2VydGlmaWNhdGUoIAorICAgIC8qIFty
ZXR2YWxdW291dF0gKi8gT0xFX0hBTkRMRSogcmVzdWx0KQoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBFX05PVElNUEw7Cit9CkluZGV4OiBXZWJLaXQvd2luL1dlYk11
dGFibGVVUkxSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYk11dGFibGVV
UkxSZXF1ZXN0LmNwcAkocmV2aXNpb24gMzEwNDQpCisrKyBXZWJLaXQvd2luL1dlYk11dGFibGVV
UkxSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw2ICszNiw3IEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb3JtRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3Vy
Y2VIYW5kbGUuaD4KICNwcmFnbWEgd2FybmluZyhwb3ApCisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMzE1LDQ1ICszMTYsNiBAQCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk11dGFibGVVUkxSCiAgICAgcmV0dXJuIEVfTk9U
SU1QTDsKIH0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVz
dDo6c2V0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZSh2b2lkKQotewotICAgIFJlc291cmNlSGFu
ZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShtX3JlcXVlc3QudXJsKCkuaG9z
dCgpKTsKLQotICAgIHJldHVybiBTX09LOwotfQotCi1zdGF0aWMgdm9pZCBkZWFsbG9jQ2VydENv
bnRleHQodm9pZCogcHRyLCB2b2lkKiBpbmZvKQotewotICAgIGlmIChwdHIpCi0gICAgICAgIENl
cnRGcmVlQ2VydGlmaWNhdGVDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UENDRVJUX0NPTlRFWFQ+
KHB0cikpOwotfQotCi1zdGF0aWMgQ0ZEYXRhUmVmIGNvcHlDZXJ0KFBDQ0VSVF9DT05URVhUIGNl
cnQpCi17Ci0gICAgc3RhdGljIENGQWxsb2NhdG9yUmVmIGNlcnREZWFsbG9jOwotICAgIFBDQ0VS
VF9DT05URVhUIGNlcnRDb3B5ID0gMDsKLSAgICBpZiAoIWNlcnREZWFsbG9jKSB7Ci0gICAgICAg
IENGQWxsb2NhdG9yQ29udGV4dCBhbGxvY0NvbnRleHQgPSB7Ci0gICAgICAgICAgICAwLCAwLCAw
LCAwLCAwLCAwLCAwLCBkZWFsbG9jQ2VydENvbnRleHQsIDAKLSAgICAgICAgfTsKLSAgICAgICAg
Y2VydERlYWxsb2MgPSBDRkFsbG9jYXRvckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAmYWxs
b2NDb250ZXh0KTsKLSAgICB9Ci0gICAgY2VydENvcHkgPSBDZXJ0RHVwbGljYXRlQ2VydGlmaWNh
dGVDb250ZXh0KGNlcnQpOwotICAgIHJldHVybiBDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHko
a0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGNlcnRD
b3B5KSwgc2l6ZW9mKCpjZXJ0Q29weSksIGNlcnREZWFsbG9jKTsKLX0KLQotSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6c2V0Q2xpZW50Q2VydGlmaWNhdGUo
Ci0gICAgLyogW2luXSAqLyBPTEVfSEFORExFIGNlcnQpCi17Ci0gICAgaWYgKCFjZXJ0KQotICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOwotCi0gICAgUENDRVJUX0NPTlRFWFQgY2VydENvbnRleHQg
PSByZWludGVycHJldF9jYXN0PFBDQ0VSVF9DT05URVhUPigoVUxPTkc2NCljZXJ0KTsKLSAgICBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZXJ0RGF0YShBZG9wdENGLCBjb3B5Q2VydChjZXJ0Q29udGV4
dCkpOwotICAgIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZShtX3JlcXVlc3Qu
dXJsKCkuaG9zdCgpLCBjZXJ0RGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KIC8v
IElXZWJNdXRhYmxlVVJMUmVxdWVzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6OnNldEZvcm1E
YXRhKGNvbnN0IFBhc3NSZWZQdHI8Rm9ybURhdGE+IGRhdGEpCkluZGV4OiBXZWJLaXQvd2luL1dl
Yk11dGFibGVVUkxSZXF1ZXN0Q0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2Vi
TXV0YWJsZVVSTFJlcXVlc3RDRk5ldC5jcHAJKHJldmlzaW9uIDMxMDM2KQkoZnJvbSBXZWJLaXQv
d2luL1dlYk11dGFibGVVUkxSZXF1ZXN0LmNwcDozMTAzNikKKysrIFdlYktpdC93aW4vV2ViTXV0
YWJsZVVSTFJlcXVlc3RDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzODIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERM
TC5oIgorI2luY2x1ZGUgIldlYk11dGFibGVVUkxSZXF1ZXN0LmgiCisKKyNpbmNsdWRlICJXZWJL
aXQuaCIKKyNpbmNsdWRlICJNYXJzaGFsbGluZ0hlbHBlcnMuaCIKKyNpbmNsdWRlICJXZWJLaXQu
aCIKKyNwcmFnbWEgd2FybmluZyhwdXNoLCAwKQorI2luY2x1ZGUgPFdlYkNvcmUvQlN0cmluZy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvQ1N0cmluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRm9ybURh
dGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjcHJhZ21hIHdhcm5p
bmcocG9wKQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLy8gSVdlYlVSTFJlcXVlc3Qg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCitXZWJNdXRhYmxlVVJMUmVxdWVzdDo6V2ViTXV0YWJsZVVSTFJlcXVlc3QoYm9v
bCBpc011dGFibGUpCisgICAgOiBtX3JlZkNvdW50KDApCisgICAgLCBtX2lzTXV0YWJsZShpc011
dGFibGUpCit7CisgICAgZ0NsYXNzQ291bnQrKzsKK30KKworV2ViTXV0YWJsZVVSTFJlcXVlc3Qq
IFdlYk11dGFibGVVUkxSZXF1ZXN0OjpjcmVhdGVJbnN0YW5jZSgpCit7CisgICAgV2ViTXV0YWJs
ZVVSTFJlcXVlc3QqIGluc3RhbmNlID0gbmV3IFdlYk11dGFibGVVUkxSZXF1ZXN0KHRydWUpOwor
ICAgIGluc3RhbmNlLT5BZGRSZWYoKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK1dlYk11
dGFibGVVUkxSZXF1ZXN0KiBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6Y3JlYXRlSW5zdGFuY2UoSVdl
Yk11dGFibGVVUkxSZXF1ZXN0KiByZXEpCit7CisgICAgV2ViTXV0YWJsZVVSTFJlcXVlc3QqIGlu
c3RhbmNlID0gbmV3IFdlYk11dGFibGVVUkxSZXF1ZXN0KHRydWUpOworICAgIGluc3RhbmNlLT5B
ZGRSZWYoKTsKKyAgICBpbnN0YW5jZS0+bV9yZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8V2ViTXV0YWJs
ZVVSTFJlcXVlc3QqPihyZXEpLT5tX3JlcXVlc3Q7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQor
CitXZWJNdXRhYmxlVVJMUmVxdWVzdCogV2ViTXV0YWJsZVVSTFJlcXVlc3Q6OmNyZWF0ZUluc3Rh
bmNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBXZWJNdXRhYmxlVVJM
UmVxdWVzdCogaW5zdGFuY2UgPSBuZXcgV2ViTXV0YWJsZVVSTFJlcXVlc3QodHJ1ZSk7CisgICAg
aW5zdGFuY2UtPkFkZFJlZigpOworICAgIGluc3RhbmNlLT5tX3JlcXVlc3QgPSByZXF1ZXN0Owor
ICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworV2ViTXV0YWJsZVVSTFJlcXVlc3QqIFdlYk11dGFi
bGVVUkxSZXF1ZXN0OjpjcmVhdGVJbW11dGFibGVJbnN0YW5jZSgpCit7CisgICAgV2ViTXV0YWJs
ZVVSTFJlcXVlc3QqIGluc3RhbmNlID0gbmV3IFdlYk11dGFibGVVUkxSZXF1ZXN0KGZhbHNlKTsK
KyAgICBpbnN0YW5jZS0+QWRkUmVmKCk7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCitXZWJN
dXRhYmxlVVJMUmVxdWVzdCogV2ViTXV0YWJsZVVSTFJlcXVlc3Q6OmNyZWF0ZUltbXV0YWJsZUlu
c3RhbmNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBXZWJNdXRhYmxl
VVJMUmVxdWVzdCogaW5zdGFuY2UgPSBuZXcgV2ViTXV0YWJsZVVSTFJlcXVlc3QoZmFsc2UpOwor
ICAgIGluc3RhbmNlLT5BZGRSZWYoKTsKKyAgICBpbnN0YW5jZS0+bV9yZXF1ZXN0ID0gcmVxdWVz
dDsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK1dlYk11dGFibGVVUkxSZXF1ZXN0Ojp+V2Vi
TXV0YWJsZVVSTFJlcXVlc3QoKQoreworICAgIGdDbGFzc0NvdW50LS07Cit9CisKKy8vIElVbmtu
b3duIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJM
UmVxdWVzdDo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCit7
CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElzRXF1YWxHVUlEKHJpaWQsIENMU0lEX1dl
Yk11dGFibGVVUkxSZXF1ZXN0KSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHRoaXM7CisgICAgZWxz
ZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lVbmtub3duKSkKKyAgICAgICAgKnBwdk9iamVj
dCA9IHN0YXRpY19jYXN0PElXZWJVUkxSZXF1ZXN0Kj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNF
cXVhbEdVSUQocmlpZCwgSUlEX0lXZWJNdXRhYmxlVVJMUmVxdWVzdCkgJiYgbV9pc011dGFibGUp
CisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2ViTXV0YWJsZVVSTFJlcXVlc3Qq
Pih0aGlzKTsKKyAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBfX3V1aWRvZihJV2ViTXV0
YWJsZVVSTFJlcXVlc3RQcml2YXRlKSkgJiYgbV9pc011dGFibGUpCisgICAgICAgICpwcHZPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxJV2ViTXV0YWJsZVVSTFJlcXVlc3RQcml2YXRlKj4odGhpcyk7Cisg
ICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lXZWJVUkxSZXF1ZXN0KSkKKyAgICAg
ICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElXZWJVUkxSZXF1ZXN0Kj4odGhpcyk7CisgICAg
ZWxzZQorICAgICAgICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKKworICAgIEFkZFJlZigpOworICAg
IHJldHVybiBTX09LOworfQorCitVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJM
UmVxdWVzdDo6QWRkUmVmKHZvaWQpCit7CisgICAgcmV0dXJuICsrbV9yZWZDb3VudDsKK30KKwor
VUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6OlJlbGVhc2Uodm9p
ZCkKK3sKKyAgICBVTE9ORyBuZXdSZWYgPSAtLW1fcmVmQ291bnQ7CisgICAgaWYgKCFuZXdSZWYp
CisgICAgICAgIGRlbGV0ZSh0aGlzKTsKKworICAgIHJldHVybiBuZXdSZWY7Cit9CisKKy8vIElX
ZWJVUkxSZXF1ZXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2Vi
TXV0YWJsZVVSTFJlcXVlc3Q6OnJlcXVlc3RXaXRoVVJMKCAKKyAgICAvKiBbaW5dICovIEJTVFIg
Lyp0aGVVUkwqLywKKyAgICAvKiBbb3B0aW9uYWxdW2luXSAqLyBXZWJVUkxSZXF1ZXN0Q2FjaGVQ
b2xpY3kgLypjYWNoZVBvbGljeSovLAorICAgIC8qIFtvcHRpb25hbF1baW5dICovIGRvdWJsZSAv
KnRpbWVvdXRJbnRlcnZhbCovKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTXV0YWJs
ZVVSTFJlcXVlc3Q6OmFsbEhUVFBIZWFkZXJGaWVsZHMoIAorICAgIC8qIFtyZXR2YWxdW291dF0g
Ki8gSVByb3BlcnR5QmFnKiogLypyZXN1bHQqLykKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYk11dGFibGVVUkxSZXF1ZXN0OjpjYWNoZVBvbGljeSggCisgICAgLyogW3JldHZhbF1bb3V0
XSAqLyBXZWJVUkxSZXF1ZXN0Q2FjaGVQb2xpY3kqIHJlc3VsdCkKK3sKKyAgICAqcmVzdWx0ID0g
a2l0KG1fcmVxdWVzdC5jYWNoZVBvbGljeSgpKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6SFRUUEJvZHkoIAor
ICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSVN0cmVhbSoqIC8qcmVzdWx0Ki8pCit7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6SFRUUEJvZHlTdHJlYW0oIAor
ICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSVN0cmVhbSoqIC8qcmVzdWx0Ki8pCit7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6SFRUUE1ldGhvZCggCisgICAg
LyogW3JldHZhbF1bb3V0XSAqLyBCU1RSKiByZXN1bHQpCit7CisgICAgQlN0cmluZyBodHRwTWV0
aG9kID0gQlN0cmluZyhtX3JlcXVlc3QuaHR0cE1ldGhvZCgpKTsKKyAgICAqcmVzdWx0ID0gaHR0
cE1ldGhvZC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6OkhUVFBTaG91bGRIYW5kbGVDb29raWVz
KCAKKyAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wqIC8qcmVzdWx0Ki8pCit7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6aW5pdFdpdGhVUkwoIAorICAg
IC8qIFtpbl0gKi8gQlNUUiB1cmwsCisgICAgLyogW29wdGlvbmFsXVtpbl0gKi8gV2ViVVJMUmVx
dWVzdENhY2hlUG9saWN5IGNhY2hlUG9saWN5LAorICAgIC8qIFtvcHRpb25hbF1baW5dICovIGRv
dWJsZSB0aW1lb3V0SW50ZXJ2YWwpCit7CisgICAgbV9yZXF1ZXN0LnNldFVSTChNYXJzaGFsbGlu
Z0hlbHBlcnM6OkJTVFJUb0tVUkwodXJsKSk7CisgICAgbV9yZXF1ZXN0LnNldENhY2hlUG9saWN5
KGNvcmUoY2FjaGVQb2xpY3kpKTsKKyAgICBtX3JlcXVlc3Quc2V0VGltZW91dEludGVydmFsKHRp
bWVvdXRJbnRlcnZhbCk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6bWFpbkRvY3VtZW50VVJMKCAKKyAgICAv
KiBbcmV0dmFsXVtvdXRdICovIEJTVFIqIHJlc3VsdCkKK3sKKyAgICAqcmVzdWx0ID0gTWFyc2hh
bGxpbmdIZWxwZXJzOjpLVVJMVG9CU1RSKG1fcmVxdWVzdC51cmwoKSk7CisgICAgcmV0dXJuIFNf
T0s7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6
OnRpbWVvdXRJbnRlcnZhbCggCisgICAgLyogW3JldHZhbF1bb3V0XSAqLyBkb3VibGUqIHJlc3Vs
dCkKK3sKKyAgICAqcmVzdWx0ID0gbV9yZXF1ZXN0LnRpbWVvdXRJbnRlcnZhbCgpOworICAgIHJl
dHVybiBTX09LOworfQorCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk11dGFibGVVUkxS
ZXF1ZXN0OjpVUkwoIAorICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNUUiogcmVzdWx0KQorewor
ICAgICpyZXN1bHQgPSBNYXJzaGFsbGluZ0hlbHBlcnM6OktVUkxUb0JTVFIobV9yZXF1ZXN0LnVy
bCgpKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBX
ZWJNdXRhYmxlVVJMUmVxdWVzdDo6dmFsdWVGb3JIVFRQSGVhZGVyRmllbGQoIAorICAgIC8qIFtp
bl0gKi8gQlNUUiBmaWVsZCwKKyAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJTVFIqIHJlc3VsdCkK
K3sKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICB9CisKKyAgICAqcmVzdWx0ID0gQlN0cmluZyht
X3JlcXVlc3QuaHR0cEhlYWRlckZpZWxkKFN0cmluZyhmaWVsZCwgU3lzU3RyaW5nTGVuKGZpZWxk
KSkpKS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6OmlzRW1wdHkoCisgICAgLyogW3JldHZhbF1b
b3V0XSAqLyBCT09MKiByZXN1bHQpCit7CisgICAgKnJlc3VsdCA9IG1fcmVxdWVzdC5pc0VtcHR5
KCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKKy8vIElXZWJNdXRhYmxlVVJMUmVxdWVzdCAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk11dGFibGVVUkxSZXF1ZXN0OjphZGRWYWx1ZSgg
CisgICAgLyogW2luXSAqLyBCU1RSIC8qdmFsdWUqLywKKyAgICAvKiBbaW5dICovIEJTVFIgLypm
aWVsZCovKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBFX05PVElN
UEw7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6
OnNldEFsbEhUVFBIZWFkZXJGaWVsZHMoIAorICAgIC8qIFtpbl0gKi8gSVByb3BlcnR5QmFnKiAv
KmhlYWRlckZpZWxkcyovKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTXV0YWJsZVVS
TFJlcXVlc3Q6OnNldENhY2hlUG9saWN5KCAKKyAgICAvKiBbaW5dICovIFdlYlVSTFJlcXVlc3RD
YWNoZVBvbGljeSBwb2xpY3kpCit7CisgICAgbV9yZXF1ZXN0LnNldENhY2hlUG9saWN5KGNvcmUo
cG9saWN5KSk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6OnNldEhUVFBCb2R5KCAKKyAgICAvKiBbaW5dICovIElT
dHJlYW0qIC8qZGF0YSovKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTXV0YWJsZVVS
TFJlcXVlc3Q6OnNldEhUVFBCb2R5U3RyZWFtKCAKKyAgICAvKiBbaW5dICovIElTdHJlYW0qIC8q
ZGF0YSovKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBFX05PVElN
UEw7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6
OnNldEhUVFBNZXRob2QoIAorICAgIC8qIFtpbl0gKi8gQlNUUiBtZXRob2QpCit7CisgICAgbV9y
ZXF1ZXN0LnNldEhUVFBNZXRob2QoU3RyaW5nKG1ldGhvZCkpOworICAgIHJldHVybiBTX09LOwor
fQorCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk11dGFibGVVUkxSZXF1ZXN0OjpzZXRI
VFRQU2hvdWxkSGFuZGxlQ29va2llcyggCisgICAgLyogW2luXSAqLyBCT09MIC8qaGFuZGxlQ29v
a2llcyovKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBFX05PVElN
UEw7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6
OnNldE1haW5Eb2N1bWVudFVSTCggCisgICAgLyogW2luXSAqLyBCU1RSIC8qdGhlVVJMKi8pCit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKwor
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6c2V0VGltZW91
dEludGVydmFsKCAKKyAgICAvKiBbaW5dICovIGRvdWJsZSAvKnRpbWVvdXRJbnRlcnZhbCovKQor
eworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisK
K0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6OnNldFVSTCgg
CisgICAgLyogW2luXSAqLyBCU1RSIHVybCkKK3sKKyAgICBtX3JlcXVlc3Quc2V0VVJMKE1hcnNo
YWxsaW5nSGVscGVyczo6QlNUUlRvS1VSTCh1cmwpKTsKKyAgICByZXR1cm4gU19PSzsKK30KKwor
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6c2V0VmFsdWUo
IAorICAgIC8qIFtpbl0gKi8gQlNUUiAvKnZhbHVlKi8sCisgICAgLyogW2luXSAqLyBCU1RSIC8q
ZmllbGQqLykKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gRV9OT1RJ
TVBMOworfQorCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk11dGFibGVVUkxSZXF1ZXN0
OjpzZXRBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKHZvaWQpCit7CisgICAgUmVzb3VyY2VIYW5k
bGU6OnNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKG1fcmVxdWVzdC51cmwoKS5ob3N0
KCkpOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK3N0YXRpYyB2b2lkIGRlYWxsb2NDZXJ0Q29u
dGV4dCh2b2lkKiBwdHIsIHZvaWQqIGluZm8pCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgQ2Vy
dEZyZWVDZXJ0aWZpY2F0ZUNvbnRleHQocmVpbnRlcnByZXRfY2FzdDxQQ0NFUlRfQ09OVEVYVD4o
cHRyKSk7Cit9CisKK3N0YXRpYyBDRkRhdGFSZWYgY29weUNlcnQoUENDRVJUX0NPTlRFWFQgY2Vy
dCkKK3sKKyAgICBzdGF0aWMgQ0ZBbGxvY2F0b3JSZWYgY2VydERlYWxsb2M7CisgICAgUENDRVJU
X0NPTlRFWFQgY2VydENvcHkgPSAwOworICAgIGlmICghY2VydERlYWxsb2MpIHsKKyAgICAgICAg
Q0ZBbGxvY2F0b3JDb250ZXh0IGFsbG9jQ29udGV4dCA9IHsKKyAgICAgICAgICAgIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIGRlYWxsb2NDZXJ0Q29udGV4dCwgMAorICAgICAgICB9OworICAgICAgICBj
ZXJ0RGVhbGxvYyA9IENGQWxsb2NhdG9yQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsICZhbGxv
Y0NvbnRleHQpOworICAgIH0KKyAgICBjZXJ0Q29weSA9IENlcnREdXBsaWNhdGVDZXJ0aWZpY2F0
ZUNvbnRleHQoY2VydCk7CisgICAgcmV0dXJuIENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oY2VydENv
cHkpLCBzaXplb2YoKmNlcnRDb3B5KSwgY2VydERlYWxsb2MpOworfQorCitIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIFdlYk11dGFibGVVUkxSZXF1ZXN0OjpzZXRDbGllbnRDZXJ0aWZpY2F0ZSgK
KyAgICAvKiBbaW5dICovIE9MRV9IQU5ETEUgY2VydCkKK3sKKyAgICBpZiAoIWNlcnQpCisgICAg
ICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBQQ0NFUlRfQ09OVEVYVCBjZXJ0Q29udGV4dCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8UENDRVJUX0NPTlRFWFQ+KChVTE9ORzY0KWNlcnQpOworICAgIFJl
dGFpblB0cjxDRkRhdGFSZWY+IGNlcnREYXRhKEFkb3B0Q0YsIGNvcHlDZXJ0KGNlcnRDb250ZXh0
KSk7CisgICAgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlKG1fcmVxdWVzdC51
cmwoKS5ob3N0KCksIGNlcnREYXRhLmdldCgpKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworLy8g
SVdlYk11dGFibGVVUkxSZXF1ZXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6c2V0Rm9ybURh
dGEoY29uc3QgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZGF0YSkKK3sKKyAgICBtX3JlcXVlc3Quc2V0
SFRUUEJvZHkoZGF0YSk7Cit9CisKK2NvbnN0IFBhc3NSZWZQdHI8Rm9ybURhdGE+IFdlYk11dGFi
bGVVUkxSZXF1ZXN0Ojpmb3JtRGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVxdWVzdC5o
dHRwQm9keSgpOworfQorCit2b2lkIFdlYk11dGFibGVVUkxSZXF1ZXN0OjphZGRIVFRQSGVhZGVy
RmllbGRzKGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlckZpZWxkcykKK3sKKyAgICBtX3JlcXVl
c3QuYWRkSFRUUEhlYWRlckZpZWxkcyhoZWFkZXJGaWVsZHMpOworfQorCitjb25zdCBIVFRQSGVh
ZGVyTWFwJiBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6aHR0cEhlYWRlckZpZWxkcygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCk7Cit9CisKK2NvbnN0IFJl
c291cmNlUmVxdWVzdCYgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6OnJlc291cmNlUmVxdWVzdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcmVxdWVzdDsKK30KSW5kZXg6IFdlYktpdC93aW4vV2ViTXV0
YWJsZVVSTFJlcXVlc3RDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJNdXRh
YmxlVVJMUmVxdWVzdENGTmV0LmNwcAkocmV2aXNpb24gMzEwMzYpCisrKyBXZWJLaXQvd2luL1dl
Yk11dGFibGVVUkxSZXF1ZXN0Q0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI5LDI5MiArMjksMTQgQEAKIAogI2luY2x1ZGUgIldlYktpdC5oIgogI2luY2x1ZGUgIk1hcnNo
YWxsaW5nSGVscGVycy5oIgotI2luY2x1ZGUgIldlYktpdC5oIgogI3ByYWdtYSB3YXJuaW5nKHB1
c2gsIDApCi0jaW5jbHVkZSA8V2ViQ29yZS9CU3RyaW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9D
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Gb3JtRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUmVzb3VyY2VIYW5kbGUuaD4KICNwcmFnbWEgd2FybmluZyhwb3ApCiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCi0vLyBJV2ViVVJMUmVxdWVzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdlYk11dGFibGVV
UkxSZXF1ZXN0OjpXZWJNdXRhYmxlVVJMUmVxdWVzdChib29sIGlzTXV0YWJsZSkKLSAgICA6IG1f
cmVmQ291bnQoMCkKLSAgICAsIG1faXNNdXRhYmxlKGlzTXV0YWJsZSkKLXsKLSAgICBnQ2xhc3ND
b3VudCsrOwotfQotCi1XZWJNdXRhYmxlVVJMUmVxdWVzdCogV2ViTXV0YWJsZVVSTFJlcXVlc3Q6
OmNyZWF0ZUluc3RhbmNlKCkKLXsKLSAgICBXZWJNdXRhYmxlVVJMUmVxdWVzdCogaW5zdGFuY2Ug
PSBuZXcgV2ViTXV0YWJsZVVSTFJlcXVlc3QodHJ1ZSk7Ci0gICAgaW5zdGFuY2UtPkFkZFJlZigp
OwotICAgIHJldHVybiBpbnN0YW5jZTsKLX0KLQotV2ViTXV0YWJsZVVSTFJlcXVlc3QqIFdlYk11
dGFibGVVUkxSZXF1ZXN0OjpjcmVhdGVJbnN0YW5jZShJV2ViTXV0YWJsZVVSTFJlcXVlc3QqIHJl
cSkKLXsKLSAgICBXZWJNdXRhYmxlVVJMUmVxdWVzdCogaW5zdGFuY2UgPSBuZXcgV2ViTXV0YWJs
ZVVSTFJlcXVlc3QodHJ1ZSk7Ci0gICAgaW5zdGFuY2UtPkFkZFJlZigpOwotICAgIGluc3RhbmNl
LT5tX3JlcXVlc3QgPSBzdGF0aWNfY2FzdDxXZWJNdXRhYmxlVVJMUmVxdWVzdCo+KHJlcSktPm1f
cmVxdWVzdDsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci19Ci0KLVdlYk11dGFibGVVUkxSZXF1ZXN0
KiBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6Y3JlYXRlSW5zdGFuY2UoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQotewotICAgIFdlYk11dGFibGVVUkxSZXF1ZXN0KiBpbnN0YW5jZSA9IG5l
dyBXZWJNdXRhYmxlVVJMUmVxdWVzdCh0cnVlKTsKLSAgICBpbnN0YW5jZS0+QWRkUmVmKCk7Ci0g
ICAgaW5zdGFuY2UtPm1fcmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAgcmV0dXJuIGluc3RhbmNlOwot
fQotCi1XZWJNdXRhYmxlVVJMUmVxdWVzdCogV2ViTXV0YWJsZVVSTFJlcXVlc3Q6OmNyZWF0ZUlt
bXV0YWJsZUluc3RhbmNlKCkKLXsKLSAgICBXZWJNdXRhYmxlVVJMUmVxdWVzdCogaW5zdGFuY2Ug
PSBuZXcgV2ViTXV0YWJsZVVSTFJlcXVlc3QoZmFsc2UpOwotICAgIGluc3RhbmNlLT5BZGRSZWYo
KTsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci19Ci0KLVdlYk11dGFibGVVUkxSZXF1ZXN0KiBXZWJN
dXRhYmxlVVJMUmVxdWVzdDo6Y3JlYXRlSW1tdXRhYmxlSW5zdGFuY2UoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIFdlYk11dGFibGVVUkxSZXF1ZXN0KiBpbnN0YW5jZSA9
IG5ldyBXZWJNdXRhYmxlVVJMUmVxdWVzdChmYWxzZSk7Ci0gICAgaW5zdGFuY2UtPkFkZFJlZigp
OwotICAgIGluc3RhbmNlLT5tX3JlcXVlc3QgPSByZXF1ZXN0OwotICAgIHJldHVybiBpbnN0YW5j
ZTsKLX0KLQotV2ViTXV0YWJsZVVSTFJlcXVlc3Q6On5XZWJNdXRhYmxlVVJMUmVxdWVzdCgpCi17
Ci0gICAgZ0NsYXNzQ291bnQtLTsKLX0KLQotLy8gSVVua25vd24gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk11dGFibGVVUkxSZXF1ZXN0OjpRdWVyeUludGVyZmFj
ZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKLXsKLSAgICAqcHB2T2JqZWN0ID0gMDsK
LSAgICBpZiAoSXNFcXVhbEdVSUQocmlpZCwgQ0xTSURfV2ViTXV0YWJsZVVSTFJlcXVlc3QpKQot
ICAgICAgICAqcHB2T2JqZWN0ID0gdGhpczsKLSAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlk
LCBJSURfSVVua25vd24pKQotICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVdlYlVS
TFJlcXVlc3QqPih0aGlzKTsKLSAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSVdl
Yk11dGFibGVVUkxSZXF1ZXN0KSAmJiBtX2lzTXV0YWJsZSkKLSAgICAgICAgKnBwdk9iamVjdCA9
IHN0YXRpY19jYXN0PElXZWJNdXRhYmxlVVJMUmVxdWVzdCo+KHRoaXMpOwotICAgIGVsc2UgaWYg
KElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElXZWJNdXRhYmxlVVJMUmVxdWVzdFByaXZhdGUp
KSAmJiBtX2lzTXV0YWJsZSkKLSAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElXZWJN
dXRhYmxlVVJMUmVxdWVzdFByaXZhdGUqPih0aGlzKTsKLSAgICBlbHNlIGlmIChJc0VxdWFsR1VJ
RChyaWlkLCBJSURfSVdlYlVSTFJlcXVlc3QpKQotICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SVdlYlVSTFJlcXVlc3QqPih0aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBF
X05PSU5URVJGQUNFOwotCi0gICAgQWRkUmVmKCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLVVM
T05HIFNURE1FVEhPRENBTExUWVBFIFdlYk11dGFibGVVUkxSZXF1ZXN0OjpBZGRSZWYodm9pZCkK
LXsKLSAgICByZXR1cm4gKyttX3JlZkNvdW50OwotfQotCi1VTE9ORyBTVERNRVRIT0RDQUxMVFlQ
RSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6UmVsZWFzZSh2b2lkKQotewotICAgIFVMT05HIG5ld1Jl
ZiA9IC0tbV9yZWZDb3VudDsKLSAgICBpZiAoIW5ld1JlZikKLSAgICAgICAgZGVsZXRlKHRoaXMp
OwotCi0gICAgcmV0dXJuIG5ld1JlZjsKLX0KLQogLy8gSVdlYlVSTFJlcXVlc3QgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6cmVx
dWVzdFdpdGhVUkwoIAotICAgIC8qIFtpbl0gKi8gQlNUUiAvKnRoZVVSTCovLAotICAgIC8qIFtv
cHRpb25hbF1baW5dICovIFdlYlVSTFJlcXVlc3RDYWNoZVBvbGljeSAvKmNhY2hlUG9saWN5Ki8s
Ci0gICAgLyogW29wdGlvbmFsXVtpbl0gKi8gZG91YmxlIC8qdGltZW91dEludGVydmFsKi8pCi17
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQot
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6YWxsSFRUUEhl
YWRlckZpZWxkcyggCi0gICAgLyogW3JldHZhbF1bb3V0XSAqLyBJUHJvcGVydHlCYWcqKiAvKnJl
c3VsdCovKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBFX05PVElN
UEw7Ci19Ci0KLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6
OmNhY2hlUG9saWN5KCAKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIFdlYlVSTFJlcXVlc3RDYWNo
ZVBvbGljeSogcmVzdWx0KQotewotICAgICpyZXN1bHQgPSBraXQobV9yZXF1ZXN0LmNhY2hlUG9s
aWN5KCkpOwotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYk11dGFibGVVUkxSZXF1ZXN0OjpIVFRQQm9keSggCi0gICAgLyogW3JldHZhbF1bb3V0XSAq
LyBJU3RyZWFtKiogLypyZXN1bHQqLykKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gRV9OT1RJTVBMOwotfQotCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk11
dGFibGVVUkxSZXF1ZXN0OjpIVFRQQm9keVN0cmVhbSggCi0gICAgLyogW3JldHZhbF1bb3V0XSAq
LyBJU3RyZWFtKiogLypyZXN1bHQqLykKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gRV9OT1RJTVBMOwotfQotCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk11
dGFibGVVUkxSZXF1ZXN0OjpIVFRQTWV0aG9kKCAKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJT
VFIqIHJlc3VsdCkKLXsKLSAgICBCU3RyaW5nIGh0dHBNZXRob2QgPSBCU3RyaW5nKG1fcmVxdWVz
dC5odHRwTWV0aG9kKCkpOwotICAgICpyZXN1bHQgPSBodHRwTWV0aG9kLnJlbGVhc2UoKTsKLSAg
ICByZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxl
VVJMUmVxdWVzdDo6SFRUUFNob3VsZEhhbmRsZUNvb2tpZXMoIAotICAgIC8qIFtyZXR2YWxdW291
dF0gKi8gQk9PTCogLypyZXN1bHQqLykKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gRV9OT1RJTVBMOwotfQotCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk11
dGFibGVVUkxSZXF1ZXN0Ojppbml0V2l0aFVSTCggCi0gICAgLyogW2luXSAqLyBCU1RSIHVybCwK
LSAgICAvKiBbb3B0aW9uYWxdW2luXSAqLyBXZWJVUkxSZXF1ZXN0Q2FjaGVQb2xpY3kgY2FjaGVQ
b2xpY3ksCi0gICAgLyogW29wdGlvbmFsXVtpbl0gKi8gZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkK
LXsKLSAgICBtX3JlcXVlc3Quc2V0VVJMKE1hcnNoYWxsaW5nSGVscGVyczo6QlNUUlRvS1VSTCh1
cmwpKTsKLSAgICBtX3JlcXVlc3Quc2V0Q2FjaGVQb2xpY3koY29yZShjYWNoZVBvbGljeSkpOwot
ICAgIG1fcmVxdWVzdC5zZXRUaW1lb3V0SW50ZXJ2YWwodGltZW91dEludGVydmFsKTsKLQotICAg
IHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk11dGFibGVV
UkxSZXF1ZXN0OjptYWluRG9jdW1lbnRVUkwoIAotICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNU
UiogcmVzdWx0KQotewotICAgICpyZXN1bHQgPSBNYXJzaGFsbGluZ0hlbHBlcnM6OktVUkxUb0JT
VFIobV9yZXF1ZXN0LnVybCgpKTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6dGltZW91dEludGVydmFsKCAKLSAg
ICAvKiBbcmV0dmFsXVtvdXRdICovIGRvdWJsZSogcmVzdWx0KQotewotICAgICpyZXN1bHQgPSBt
X3JlcXVlc3QudGltZW91dEludGVydmFsKCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6OlVSTCggCi0gICAgLyog
W3JldHZhbF1bb3V0XSAqLyBCU1RSKiByZXN1bHQpCi17Ci0gICAgKnJlc3VsdCA9IE1hcnNoYWxs
aW5nSGVscGVyczo6S1VSTFRvQlNUUihtX3JlcXVlc3QudXJsKCkpOwotICAgIHJldHVybiBTX09L
OwotfQotCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYk11dGFibGVVUkxSZXF1ZXN0Ojp2
YWx1ZUZvckhUVFBIZWFkZXJGaWVsZCggCi0gICAgLyogW2luXSAqLyBCU1RSIGZpZWxkLAotICAg
IC8qIFtyZXR2YWxdW291dF0gKi8gQlNUUiogcmVzdWx0KQotewotICAgIGlmICghcmVzdWx0KSB7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gRV9QT0lOVEVS
OwotICAgIH0KLQotICAgICpyZXN1bHQgPSBCU3RyaW5nKG1fcmVxdWVzdC5odHRwSGVhZGVyRmll
bGQoU3RyaW5nKGZpZWxkLCBTeXNTdHJpbmdMZW4oZmllbGQpKSkpLnJlbGVhc2UoKTsKLSAgICBy
ZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJM
UmVxdWVzdDo6aXNFbXB0eSgKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wqIHJlc3VsdCkK
LXsKLSAgICAqcmVzdWx0ID0gbV9yZXF1ZXN0LmlzRW1wdHkoKTsKLSAgICByZXR1cm4gU19PSzsK
LX0KLQotLy8gSVdlYk11dGFibGVVUkxSZXF1ZXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6OmFkZFZhbHVlKCAKLSAgICAvKiBbaW5dICovIEJTVFIg
Lyp2YWx1ZSovLAotICAgIC8qIFtpbl0gKi8gQlNUUiAvKmZpZWxkKi8pCi17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6c2V0QWxsSFRUUEhlYWRlckZpZWxk
cyggCi0gICAgLyogW2luXSAqLyBJUHJvcGVydHlCYWcqIC8qaGVhZGVyRmllbGRzKi8pCi17Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6c2V0Q2FjaGVQb2xp
Y3koIAotICAgIC8qIFtpbl0gKi8gV2ViVVJMUmVxdWVzdENhY2hlUG9saWN5IHBvbGljeSkKLXsK
LSAgICBtX3JlcXVlc3Quc2V0Q2FjaGVQb2xpY3koY29yZShwb2xpY3kpKTsKLSAgICByZXR1cm4g
U19PSzsKLX0KLQotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVz
dDo6c2V0SFRUUEJvZHkoIAotICAgIC8qIFtpbl0gKi8gSVN0cmVhbSogLypkYXRhKi8pCi17Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6c2V0SFRUUEJvZHlT
dHJlYW0oIAotICAgIC8qIFtpbl0gKi8gSVN0cmVhbSogLypkYXRhKi8pCi17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6c2V0SFRUUE1ldGhvZCggCi0gICAg
LyogW2luXSAqLyBCU1RSIG1ldGhvZCkKLXsKLSAgICBtX3JlcXVlc3Quc2V0SFRUUE1ldGhvZChT
dHJpbmcobWV0aG9kKSk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6OnNldEhUVFBTaG91bGRIYW5kbGVDb29raWVz
KCAKLSAgICAvKiBbaW5dICovIEJPT0wgLypoYW5kbGVDb29raWVzKi8pCi17Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6c2V0TWFpbkRvY3VtZW50VVJMKCAK
LSAgICAvKiBbaW5dICovIEJTVFIgLyp0aGVVUkwqLykKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gRV9OT1RJTVBMOwotfQotCi1IUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIFdlYk11dGFibGVVUkxSZXF1ZXN0OjpzZXRUaW1lb3V0SW50ZXJ2YWwoIAotICAgIC8qIFtp
bl0gKi8gZG91YmxlIC8qdGltZW91dEludGVydmFsKi8pCi17Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIEVfTk9USU1QTDsKLX0KLQotSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6c2V0VVJMKCAKLSAgICAvKiBbaW5dICovIEJTVFIg
dXJsKQotewotICAgIG1fcmVxdWVzdC5zZXRVUkwoTWFyc2hhbGxpbmdIZWxwZXJzOjpCU1RSVG9L
VVJMKHVybCkpOwotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIFdlYk11dGFibGVVUkxSZXF1ZXN0OjpzZXRWYWx1ZSggCi0gICAgLyogW2luXSAqLyBCU1RS
IC8qdmFsdWUqLywKLSAgICAvKiBbaW5dICovIEJTVFIgLypmaWVsZCovKQotewotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBFX05PVElNUEw7Ci19Ci0KIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6OnNldEFsbG93c0FueUhUVFBTQ2Vy
dGlmaWNhdGUodm9pZCkKIHsKICAgICBSZXNvdXJjZUhhbmRsZTo6c2V0SG9zdEFsbG93c0FueUhU
VFBTQ2VydGlmaWNhdGUobV9yZXF1ZXN0LnVybCgpLmhvc3QoKSk7CkBAIC0zNTMsMzAgKzc1LDMg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJNdXRhYmxlVVJMUgogICAgIFJlc291cmNl
SGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZShtX3JlcXVlc3QudXJsKCkuaG9zdCgpLCBjZXJ0
RGF0YS5nZXQoKSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9Ci0KLS8vIElXZWJNdXRhYmxlVVJMUmVx
dWVzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLXZvaWQgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6OnNldEZvcm1EYXRhKGNvbnN0IFBhc3NSZWZQ
dHI8Rm9ybURhdGE+IGRhdGEpCi17Ci0gICAgbV9yZXF1ZXN0LnNldEhUVFBCb2R5KGRhdGEpOwot
fQotCi1jb25zdCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6Zm9y
bURhdGEoKSBjb25zdAotewotICAgIHJldHVybiBtX3JlcXVlc3QuaHR0cEJvZHkoKTsKLX0KLQot
dm9pZCBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6YWRkSFRUUEhlYWRlckZpZWxkcyhjb25zdCBIVFRQ
SGVhZGVyTWFwJiBoZWFkZXJGaWVsZHMpCi17Ci0gICAgbV9yZXF1ZXN0LmFkZEhUVFBIZWFkZXJG
aWVsZHMoaGVhZGVyRmllbGRzKTsKLX0KLQotY29uc3QgSFRUUEhlYWRlck1hcCYgV2ViTXV0YWJs
ZVVSTFJlcXVlc3Q6Omh0dHBIZWFkZXJGaWVsZHMoKSBjb25zdAotewotICAgIHJldHVybiBtX3Jl
cXVlc3QuaHR0cEhlYWRlckZpZWxkcygpOwotfQotCi1jb25zdCBSZXNvdXJjZVJlcXVlc3QmIFdl
Yk11dGFibGVVUkxSZXF1ZXN0OjpyZXNvdXJjZVJlcXVlc3QoKSBjb25zdAotewotICAgIHJldHVy
biBtX3JlcXVlc3Q7Ci19CkluZGV4OiBXZWJLaXQvd2luL1dlYk11dGFibGVVUkxSZXF1ZXN0Q3Vy
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJNdXRhYmxlVVJMUmVxdWVzdEN1cmwu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3dpbi9XZWJNdXRhYmxlVVJMUmVxdWVzdEN1cmwu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRETEwuaCIKKyNpbmNsdWRlICJXZWJNdXRhYmxlVVJM
UmVxdWVzdC5oIgorCisjaW5jbHVkZSAiV2ViS2l0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCisvLyBJV2ViTXV0YWJsZVVSTFJlcXVlc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6c2V0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZSh2
b2lkKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBFX05PVElNUEw7
Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6OnNl
dENsaWVudENlcnRpZmljYXRlKAorICAgIC8qIFtpbl0gKi8gT0xFX0hBTkRMRSBjZXJ0KQorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBFX05PVElNUEw7Cit9CkluZGV4
OiBXZWJLaXQvd2luL1dlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvd2luL1dlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmNwcAkocmV2aXNp
b24gMzEwNDQpCisrKyBXZWJLaXQvd2luL1dlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQlN0
cmluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KICNwcmFnbWEgd2Fy
bmluZyhwb3ApCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIApAQCAtMTY4LDcgKzE2OSwxMSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYlVSTEF1dGhlbnRpCiAgICAgaWYgKCF3ZWJTZW5kZXIpCiAgICAgICAgIHJldHVybiBFX05P
SU5URVJGQUNFOwogCisjaWYgVVNFKENGTkVUV09SSykKICAgICBtX2F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uod2ViQ2hhbGxlbmdlLT5hdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSgpLmNmVVJMQXV0aENoYWxsZW5nZVJlZigpLCB3ZWJTZW5kZXItPnJlc291
cmNlSGFuZGxlKCkpOworI2Vsc2UKKyAgICBtX2F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0gQXV0
aGVudGljYXRpb25DaGFsbGVuZ2Uod2ViU2VuZGVyLT5yZXNvdXJjZUhhbmRsZSgpKTsKKyNlbmRp
ZgogCiAgICAgcmV0dXJuIFNfT0s7CiB9CkluZGV4OiBXZWJLaXQvd2luL1dlYlVSTFJlc3BvbnNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlVSTFJlc3BvbnNlLmNwcAkocmV2aXNp
b24gMzEwNDQpCisrKyBXZWJLaXQvd2luL1dlYlVSTFJlc3BvbnNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiTWFyc2hhbGxpbmdIZWxw
ZXJzLmgiCiAjaW5jbHVkZSAiV2ViTG9jYWxpemFibGVTdHJpbmdzLmgiCiAKLSNpbmNsdWRlIDxX
ZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8
d3RmL3BsYXRmb3JtLmg+CiAjcHJhZ21hIHdhcm5pbmcoIHB1c2gsIDAgKQogI2luY2x1ZGUgPFdl
YkNvcmUvQlN0cmluZy5oPgpAQCAtMzkxLDIyICszOTAsNiBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYlVSTFJlc3BvbnNlCiB9CiAKIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBX
ZWJVUkxSZXNwb25zZTo6c3NsUGVlckNlcnRpZmljYXRlKCAKLSAgICAvKiBbcmV0dmFsXVtvdXRd
ICovIE9MRV9IQU5ETEUqIHJlc3VsdCkKLXsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0
dXJuIEVfUE9JTlRFUjsKLSAgICAqcmVzdWx0ID0gMDsKLSAgICBDRkRpY3Rpb25hcnlSZWYgZGlj
dCA9IGNlcnRpZmljYXRlRGljdGlvbmFyeSgpOwotICAgIGlmICghZGljdCkKLSAgICAgICAgcmV0
dXJuIEVfRkFJTDsKLSAgICB2b2lkKiBkYXRhID0gd2tHZXRTU0xQZWVyQ2VydGlmaWNhdGVEYXRh
KGRpY3QpOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIEVfRkFJTDsKLSAgICAqcmVz
dWx0ID0gKE9MRV9IQU5ETEUpKFVMT05HNjQpZGF0YTsKLSAgICByZXR1cm4gKnJlc3VsdCA/IFNf
T0sgOiBFX0ZBSUw7Ci19Ci0KIC8vIFdlYlVSTFJlc3BvbnNlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFJFU1VMVCBXZWJV
UkxSZXNwb25zZTo6c3VnZ2VzdGVkRmlsZUV4dGVuc2lvbihCU1RSICpyZXN1bHQpCkBAIC00NjMs
MTQgKzQ0NiwzIEBAIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIFdlYlVSTFJlc3BvbnNlOjoKICAg
ICByZXR1cm4gbV9yZXNwb25zZTsKIH0KIAotQ0ZEaWN0aW9uYXJ5UmVmIFdlYlVSTFJlc3BvbnNl
OjpjZXJ0aWZpY2F0ZURpY3Rpb25hcnkoKSBjb25zdAotewotICAgIGlmIChtX1NTTENlcnRpZmlj
YXRlSW5mbykKLSAgICAgICAgcmV0dXJuIG1fU1NMQ2VydGlmaWNhdGVJbmZvLmdldCgpOwotCi0g
ICAgQ0ZVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNlID0gbV9yZXNwb25zZS5jZlVSTFJlc3BvbnNl
KCk7Ci0gICAgaWYgKCFjZlJlc3BvbnNlKQotICAgICAgICByZXR1cm4gMDsKLSAgICBtX1NTTENl
cnRpZmljYXRlSW5mbyA9IHdrR2V0U1NMQ2VydGlmaWNhdGVJbmZvKGNmUmVzcG9uc2UpOwotICAg
IHJldHVybiBtX1NTTENlcnRpZmljYXRlSW5mby5nZXQoKTsKLX0KSW5kZXg6IFdlYktpdC93aW4v
V2ViVVJMUmVzcG9uc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlVSTFJlc3BvbnNl
LmgJKHJldmlzaW9uIDMxMDQ0KQorKysgV2ViS2l0L3dpbi9XZWJVUkxSZXNwb25zZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw3ICs5MSw5IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIEhS
RVNVTFQgc3VnZ2VzdGVkRmlsZUV4dGVuc2lvbihCU1RSKiByZXN1bHQpOworI2lmIFVTRShDRk5F
VFdPUkspCiAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGNlcnRpZmljYXRlRGljdGlvbmFyeSgpIGNvbnN0
OworI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICBVTE9ORyBtX3JlZkNvdW50OwpJbmRleDogV2Vi
S2l0L3dpbi9XZWJVUkxSZXNwb25zZUNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2lu
L1dlYlVSTFJlc3BvbnNlQ0ZOZXQuY3BwCShyZXZpc2lvbiAzMTAzNikJKGZyb20gV2ViS2l0L3dp
bi9XZWJVUkxSZXNwb25zZS5jcHA6MzEwMzYpCisrKyBXZWJLaXQvd2luL1dlYlVSTFJlc3BvbnNl
Q0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDc2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRETEwuaCIKKyNpbmNsdWRl
ICJXZWJLaXQuaCIKKworI2luY2x1ZGUgIkhUVFBIZWFkZXJQcm9wZXJ0eUJhZy5oIgorI2luY2x1
ZGUgIk1hcnNoYWxsaW5nSGVscGVycy5oIgorI2luY2x1ZGUgIldlYkxvY2FsaXphYmxlU3RyaW5n
cy5oIgorCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVy
ZmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9wbGF0Zm9ybS5oPgorI3ByYWdtYSB3YXJuaW5nKCBwdXNo
LCAwICkKKyNpbmNsdWRlIDxXZWJDb3JlL0JTdHJpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0tV
UkwuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjcHJhZ21hIHdhcm5p
bmcoIHBvcCApCisjaW5jbHVkZSA8c2hsb2JqLmg+CisjaW5jbHVkZSA8c2hsd2FwaS5oPgorI2lu
Y2x1ZGUgPHRjaGFyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgTFBD
VFNUUiBDRkhUVFBNZXNzYWdlQ29weUxvY2FsaXplZFNob3J0RGVzY3JpcHRpb25Gb3JTdGF0dXND
b2RlKENGSW5kZXggc3RhdHVzQ29kZSkKK3sKKyAgICBMUENUU1RSIHJlc3VsdCA9IDA7CisgICAg
aWYgKHN0YXR1c0NvZGUgPCAxMDAgfHwgc3RhdHVzQ29kZSA+PSA2MDApCisgICAgICAgIHJlc3Vs
dCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJzZXJ2ZXIgZXJyb3IiLCAiSFRUUCByZXN1bHQgY29kZSBz
dHJpbmciKTsKKyAgICBlbHNlIGlmIChzdGF0dXNDb2RlID49IDEwMCAmJiBzdGF0dXNDb2RlIDw9
IDE5OSkgeworICAgICAgICBzd2l0Y2ggKHN0YXR1c0NvZGUpIHsKKyAgICAgICAgICAgIGNhc2Ug
MTAwOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJjb250aW51
ZSIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSAxMDE6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gTFBDVFNUUl9V
SV9TVFJJTkcoInN3aXRjaGluZyBwcm90b2NvbHMiLCAiSFRUUCByZXN1bHQgY29kZSBzdHJpbmci
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoImluZm9ybWF0aW9uYWwiLCAiSFRU
UCByZXN1bHQgY29kZSBzdHJpbmciKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0gZWxzZSBpZiAoc3RhdHVzQ29kZSA+PSAyMDAgJiYgc3RhdHVzQ29kZSA8PSAyOTkp
IHsKKyAgICAgICAgc3dpdGNoIChzdGF0dXNDb2RlKSB7CisgICAgICAgICAgICBjYXNlIDIwMDoK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklORygibm8gZXJyb3IiLCAi
SFRUUCByZXN1bHQgY29kZSBzdHJpbmciKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgMjAxOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RS
SU5HKCJjcmVhdGVkIiwgIkhUVFAgcmVzdWx0IGNvZGUgc3RyaW5nIik7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDIwMjoKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSBMUENUU1RSX1VJX1NUUklORygiYWNjZXB0ZWQiLCAiSFRUUCByZXN1bHQgY29kZSBzdHJpbmci
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjAzOgorICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJub24tYXV0aG9yaXRhdGl2ZSBp
bmZvcm1hdGlvbiIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSAyMDQ6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
TFBDVFNUUl9VSV9TVFJJTkcoIm5vIGNvbnRlbnQiLCAiSFRUUCByZXN1bHQgY29kZSBzdHJpbmci
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjA1OgorICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJyZXNldCBjb250ZW50IiwgIkhU
VFAgcmVzdWx0IGNvZGUgc3RyaW5nIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIDIwNjoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklO
RygicGFydGlhbCBjb250ZW50IiwgIkhUVFAgcmVzdWx0IGNvZGUgc3RyaW5nIik7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJl
c3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJzdWNjZXNzIiwgIkhUVFAgcmVzdWx0IGNvZGUgc3Ry
aW5nIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gCisgICAgfSBlbHNlIGlm
IChzdGF0dXNDb2RlID49IDMwMCAmJiBzdGF0dXNDb2RlIDw9IDM5OSkgeworICAgICAgICBzd2l0
Y2ggKHN0YXR1c0NvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgMzAwOgorICAgICAgICAgICAgICAg
IHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJtdWx0aXBsZSBjaG9pY2VzIiwgIkhUVFAgcmVz
dWx0IGNvZGUgc3RyaW5nIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIDMwMToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklORygibW92
ZWQgcGVybWFuZW50bHkiLCAiSFRUUCByZXN1bHQgY29kZSBzdHJpbmciKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMzAyOgorICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJmb3VuZCIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAzMDM6CisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoInNlZSBvdGhlciIsICJIVFRQIHJl
c3VsdCBjb2RlIHN0cmluZyIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSAzMDQ6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoIm5v
dCBtb2RpZmllZCIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSAzMDU6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
TFBDVFNUUl9VSV9TVFJJTkcoIm5lZWRzIHByb3h5IiwgIkhUVFAgcmVzdWx0IGNvZGUgc3RyaW5n
Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDMwNzoKKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklORygidGVtcG9yYXJpbHkgcmVkaXJl
Y3RlZCIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSAzMDY6ICAgLy8gMzA2IHN0YXR1cyBjb2RlIHVudXNlZCBpbiBI
VFRQCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RT
VFJfVUlfU1RSSU5HKCJyZWRpcmVjdGVkIiwgIkhUVFAgcmVzdWx0IGNvZGUgc3RyaW5nIik7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHN0YXR1c0Nv
ZGUgPj0gNDAwICYmIHN0YXR1c0NvZGUgPD0gNDk5KSB7CisgICAgICAgIHN3aXRjaCAoc3RhdHVz
Q29kZSkgeworICAgICAgICAgICAgY2FzZSA0MDA6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
TFBDVFNUUl9VSV9TVFJJTkcoImJhZCByZXF1ZXN0IiwgIkhUVFAgcmVzdWx0IGNvZGUgc3RyaW5n
Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDQwMToKKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklORygidW5hdXRob3JpemVkIiwgIkhU
VFAgcmVzdWx0IGNvZGUgc3RyaW5nIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIDQwMjoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklO
RygicGF5bWVudCByZXF1aXJlZCIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA0MDM6CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoImZvcmJpZGRlbiIsICJIVFRQIHJlc3VsdCBjb2Rl
IHN0cmluZyIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA0MDQ6
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoIm5vdCBmb3VuZCIs
ICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSA0MDU6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gTFBDVFNUUl9VSV9T
VFJJTkcoIm1ldGhvZCBub3QgYWxsb3dlZCIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA0MDY6CisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoInVuYWNjZXB0YWJsZSIsICJIVFRQIHJl
c3VsdCBjb2RlIHN0cmluZyIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSA0MDc6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoInBy
b3h5IGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkIiwgIkhUVFAgcmVzdWx0IGNvZGUgc3RyaW5nIik7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDQwODoKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklORygicmVxdWVzdCB0aW1lZCBvdXQiLCAi
SFRUUCByZXN1bHQgY29kZSBzdHJpbmciKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgNDA5OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RS
SU5HKCJjb25mbGljdCIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA0MTA6CisgICAgICAgICAgICAgICAgcmVzdWx0
ID0gTFBDVFNUUl9VSV9TVFJJTkcoIm5vIGxvbmdlciBleGlzdHMiLCAiSFRUUCByZXN1bHQgY29k
ZSBzdHJpbmciKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNDEx
OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJsZW5ndGggcmVx
dWlyZWQiLCAiSFRUUCByZXN1bHQgY29kZSBzdHJpbmciKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgNDEyOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RT
VFJfVUlfU1RSSU5HKCJwcmVjb25kaXRpb24gZmFpbGVkIiwgIkhUVFAgcmVzdWx0IGNvZGUgc3Ry
aW5nIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDQxMzoKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklORygicmVxdWVzdCB0b28gbGFy
Z2UiLCAiSFRUUCByZXN1bHQgY29kZSBzdHJpbmciKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgNDE0OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJf
VUlfU1RSSU5HKCJyZXF1ZXN0ZWQgVVJMIHRvbyBsb25nIiwgIkhUVFAgcmVzdWx0IGNvZGUgc3Ry
aW5nIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDQxNToKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklORygidW5zdXBwb3J0ZWQgbWVk
aWEgdHlwZSIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSA0MTY6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gTFBD
VFNUUl9VSV9TVFJJTkcoInJlcXVlc3RlZCByYW5nZSBub3Qgc2F0aXNmaWFibGUiLCAiSFRUUCBy
ZXN1bHQgY29kZSBzdHJpbmciKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgNDE3OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJl
eHBlY3RhdGlvbiBmYWlsZWQiLCAiSFRUUCByZXN1bHQgY29kZSBzdHJpbmciKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoImNsaWVudCBlcnJvciIsICJIVFRQIHJlc3VsdCBjb2Rl
IHN0cmluZyIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNl
IGlmIChzdGF0dXNDb2RlID49IDUwMCAmJiBzdGF0dXNDb2RlIDw9IDU5OSkgeworICAgICAgICBz
d2l0Y2ggKHN0YXR1c0NvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgNTAwOgorICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJpbnRlcm5hbCBzZXJ2ZXIgZXJyb3IiLCAi
SFRUUCByZXN1bHQgY29kZSBzdHJpbmciKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgNTAxOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RS
SU5HKCJ1bmltcGxlbWVudGVkIiwgIkhUVFAgcmVzdWx0IGNvZGUgc3RyaW5nIik7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDUwMjoKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBMUENUU1RSX1VJX1NUUklORygiYmFkIGdhdGV3YXkiLCAiSFRUUCByZXN1bHQgY29k
ZSBzdHJpbmciKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNTAz
OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJzZXJ2aWNlIHVu
YXZhaWxhYmxlIiwgIkhUVFAgcmVzdWx0IGNvZGUgc3RyaW5nIik7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIDUwNDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBM
UENUU1RSX1VJX1NUUklORygiZ2F0ZXdheSB0aW1lZCBvdXQiLCAiSFRUUCByZXN1bHQgY29kZSBz
dHJpbmciKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNTA1Ogor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJ1bnN1cHBvcnRlZCB2
ZXJzaW9uIiwgIkhUVFAgcmVzdWx0IGNvZGUgc3RyaW5nIik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RT
VFJfVUlfU1RSSU5HKCJzZXJ2ZXIgZXJyb3IiLCAiSFRUUCByZXN1bHQgY29kZSBzdHJpbmciKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0OworfQorCisvLyBJV2ViVVJMUmVzcG9uc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZWJVUkxSZXNwb25zZTo6
V2ViVVJMUmVzcG9uc2UoKQorICAgIDptX3JlZkNvdW50KDApCit7CisgICAgZ0NsYXNzQ291bnQr
KzsKK30KKworV2ViVVJMUmVzcG9uc2U6On5XZWJVUkxSZXNwb25zZSgpCit7CisgICAgZ0NsYXNz
Q291bnQtLTsKK30KKworV2ViVVJMUmVzcG9uc2UqIFdlYlVSTFJlc3BvbnNlOjpjcmVhdGVJbnN0
YW5jZSgpCit7CisgICAgV2ViVVJMUmVzcG9uc2UqIGluc3RhbmNlID0gbmV3IFdlYlVSTFJlc3Bv
bnNlKCk7CisgICAgLy8gZmFrZSBhbiBodHRwIHJlc3BvbnNlIC0gc28gaXQgaGFzIHRoZSBJV2Vi
SFRUUFVSTFJlc3BvbnNlIGludGVyZmFjZQorICAgIGluc3RhbmNlLT5tX3Jlc3BvbnNlID0gUmVz
b3VyY2VSZXNwb25zZShLVVJMKCJodHRwOi8vIiksIFN0cmluZygpLCAwLCBTdHJpbmcoKSwgU3Ry
aW5nKCkpOworICAgIGluc3RhbmNlLT5BZGRSZWYoKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9
CisKK1dlYlVSTFJlc3BvbnNlKiBXZWJVUkxSZXNwb25zZTo6Y3JlYXRlSW5zdGFuY2UoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgaWYgKHJlc3BvbnNlLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdlYlVSTFJlc3BvbnNlKiBpbnN0YW5jZSA9IG5l
dyBXZWJVUkxSZXNwb25zZSgpOworICAgIGluc3RhbmNlLT5BZGRSZWYoKTsKKyAgICBpbnN0YW5j
ZS0+bV9yZXNwb25zZSA9IHJlc3BvbnNlOworCisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCisv
LyBJVW5rbm93biAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVVJM
UmVzcG9uc2U6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KQor
eworICAgICpwcHZPYmplY3QgPSAwOworICAgIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSVVu
a25vd24pKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVdlYlVSTFJlc3BvbnNl
Kj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlkb2YodGhpcykp
KQorICAgICAgICAqcHB2T2JqZWN0ID0gdGhpczsKKyAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChy
aWlkLCBJSURfSVdlYlVSTFJlc3BvbnNlKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19j
YXN0PElXZWJVUkxSZXNwb25zZSo+KHRoaXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJp
aWQsIElJRF9JV2ViVVJMUmVzcG9uc2VQcml2YXRlKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0
YXRpY19jYXN0PElXZWJVUkxSZXNwb25zZVByaXZhdGUqPih0aGlzKTsKKyAgICBlbHNlIGlmICht
X3Jlc3BvbnNlLmlzSFRUUCgpICYmIElzRXF1YWxHVUlEKHJpaWQsIElJRF9JV2ViSFRUUFVSTFJl
c3BvbnNlKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElXZWJIVFRQVVJMUmVz
cG9uc2UqPih0aGlzKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBFX05PSU5URVJGQUNFOwor
CisgICAgQWRkUmVmKCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1VMT05HIFNURE1FVEhPRENB
TExUWVBFIFdlYlVSTFJlc3BvbnNlOjpBZGRSZWYodm9pZCkKK3sKKyAgICByZXR1cm4gKyttX3Jl
ZkNvdW50OworfQorCitVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBXZWJVUkxSZXNwb25zZTo6UmVs
ZWFzZSh2b2lkKQoreworICAgIFVMT05HIG5ld1JlZiA9IC0tbV9yZWZDb3VudDsKKyAgICBpZiAo
IW5ld1JlZikKKyAgICAgICAgZGVsZXRlKHRoaXMpOworCisgICAgcmV0dXJuIG5ld1JlZjsKK30K
KworLy8gSVdlYlVSTFJlc3BvbnNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViVVJMUmVzcG9uc2U6OmV4cGVjdGVkQ29udGVudExlbmd0aCggCisgICAgLyogW3Jl
dHZhbF1bb3V0XSAqLyBsb25nIGxvbmcqIHJlc3VsdCkKK3sKKyAgICAqcmVzdWx0ID0gbV9yZXNw
b25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJVUkxSZXNwb25zZTo6aW5pdFdpdGhVUkwoIAorICAg
IC8qIFtpbl0gKi8gQlNUUiB1cmwsCisgICAgLyogW2luXSAqLyBCU1RSIG1pbWVUeXBlLAorICAg
IC8qIFtpbl0gKi8gaW50IGV4cGVjdGVkQ29udGVudExlbmd0aCwKKyAgICAvKiBbaW5dICovIEJT
VFIgdGV4dEVuY29kaW5nTmFtZSkKK3sKKyAgICBtX3Jlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25z
ZShLVVJMKHVybCksIFN0cmluZyhtaW1lVHlwZSksIGV4cGVjdGVkQ29udGVudExlbmd0aCwgU3Ry
aW5nKHRleHRFbmNvZGluZ05hbWUpLCBTdHJpbmcoKSk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisK
K0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVVJMUmVzcG9uc2U6Ok1JTUVUeXBlKCAKKyAg
ICAvKiBbcmV0dmFsXVtvdXRdICovIEJTVFIqIHJlc3VsdCkKK3sKKyAgICBCU3RyaW5nIG1pbWVU
eXBlKG1fcmVzcG9uc2UubWltZVR5cGUoKSk7CisgICAgKnJlc3VsdCA9IG1pbWVUeXBlLnJlbGVh
c2UoKTsKKyAgICBpZiAoIW1fcmVzcG9uc2UubWltZVR5cGUoKS5pc051bGwoKSAmJiAhKnJlc3Vs
dCkKKyAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CisKKyAgICByZXR1cm4gU19PSzsKK30K
KworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJVUkxSZXNwb25zZTo6c3VnZ2VzdGVkRmls
ZW5hbWUoIAorICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNUUiogcmVzdWx0KQoreworICAgIGlm
ICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOworICAgIH0KKworICAgICpyZXN1bHQgPSAwOworCisgICAgaWYgKG1fcmVz
cG9uc2UudXJsKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgKnJl
c3VsdCA9IEJTdHJpbmcobV9yZXNwb25zZS5zdWdnZXN0ZWRGaWxlbmFtZSgpKS5yZWxlYXNlKCk7
CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVVJM
UmVzcG9uc2U6OnRleHRFbmNvZGluZ05hbWUoIAorICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNU
UiogcmVzdWx0KQoreworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gRV9JTlZBTElE
QVJHOworCisgICAgQlN0cmluZyB0ZXh0RW5jb2RpbmdOYW1lKG1fcmVzcG9uc2UudGV4dEVuY29k
aW5nTmFtZSgpKTsKKyAgICAqcmVzdWx0ID0gdGV4dEVuY29kaW5nTmFtZS5yZWxlYXNlKCk7Cisg
ICAgaWYgKCFtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKS5pc051bGwoKSAmJiAhKnJlc3Vs
dCkKKyAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CisKKyAgICByZXR1cm4gU19PSzsKK30K
KworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJVUkxSZXNwb25zZTo6VVJMKCAKKyAgICAv
KiBbcmV0dmFsXVtvdXRdICovIEJTVFIqIHJlc3VsdCkKK3sKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKworICAgIEJTdHJpbmcgdXJsKG1fcmVzcG9uc2Uu
dXJsKCkuc3RyaW5nKCkpOworICAgICpyZXN1bHQgPSB1cmwucmVsZWFzZSgpOworICAgIGlmICgh
bV9yZXNwb25zZS51cmwoKS5pc0VtcHR5KCkgJiYgISpyZXN1bHQpCisgICAgICAgIHJldHVybiBF
X09VVE9GTUVNT1JZOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKKy8vIElXZWJIVFRQVVJMUmVz
cG9uc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJVUkxSZXNwb25zZTo6YWxsSGVh
ZGVyRmllbGRzKCAKKyAgICAvKiBbcmV0dmFsXVtvdXRdICovIElQcm9wZXJ0eUJhZyoqIGhlYWRl
ckZpZWxkcykKK3sKKyAgICBBU1NFUlQobV9yZXNwb25zZS5pc0hUVFAoKSk7CisgICAgKmhlYWRl
ckZpZWxkcyA9IEhUVFBIZWFkZXJQcm9wZXJ0eUJhZzo6Y3JlYXRlSW5zdGFuY2UodGhpcyk7Cisg
ICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVVJMUmVz
cG9uc2U6OmxvY2FsaXplZFN0cmluZ0ZvclN0YXR1c0NvZGUoIAorICAgIC8qIFtpbl0gKi8gaW50
IHN0YXR1c0NvZGUsCisgICAgLyogW3JldHZhbF1bb3V0XSAqLyBCU1RSKiBzdGF0dXNTdHJpbmcp
Cit7CisgICAgQVNTRVJUKG1fcmVzcG9uc2UuaXNIVFRQKCkpOworICAgIGlmIChzdGF0dXNTdHJp
bmcpCisgICAgICAgICpzdGF0dXNTdHJpbmcgPSAwOworICAgIExQQ1RTVFIgc3RhdHVzVGV4dCA9
IENGSFRUUE1lc3NhZ2VDb3B5TG9jYWxpemVkU2hvcnREZXNjcmlwdGlvbkZvclN0YXR1c0NvZGUo
c3RhdHVzQ29kZSk7CisgICAgaWYgKCFzdGF0dXNUZXh0KQorICAgICAgICByZXR1cm4gRV9GQUlM
OworICAgIGlmIChzdGF0dXNTdHJpbmcpCisgICAgICAgICpzdGF0dXNTdHJpbmcgPSBTeXNBbGxv
Y1N0cmluZyhzdGF0dXNUZXh0KTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXZWJVUkxSZXNwb25zZTo6c3RhdHVzQ29kZSggCisgICAgLyogW3JldHZh
bF1bb3V0XSAqLyBpbnQqIHN0YXR1c0NvZGUpCit7CisgICAgQVNTRVJUKG1fcmVzcG9uc2UuaXNI
VFRQKCkpOworICAgIGlmIChzdGF0dXNDb2RlKQorICAgICAgICAqc3RhdHVzQ29kZSA9IG1fcmVz
cG9uc2UuaHR0cFN0YXR1c0NvZGUoKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBXZWJVUkxSZXNwb25zZTo6aXNBdHRhY2htZW50KCAKKyAgICAvKiBb
cmV0dmFsXVtvdXRdICovIEJPT0wgKmF0dGFjaG1lbnQpCit7CisgICAgKmF0dGFjaG1lbnQgPSBt
X3Jlc3BvbnNlLmlzQXR0YWNobWVudCgpOworICAgIHJldHVybiBTX09LOworfQorCisKK0hSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVVJMUmVzcG9uc2U6OnNzbFBlZXJDZXJ0aWZpY2F0ZSgg
CisgICAgLyogW3JldHZhbF1bb3V0XSAqLyBPTEVfSEFORExFKiByZXN1bHQpCit7CisgICAgaWYg
KCFyZXN1bHQpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisgICAgKnJlc3VsdCA9IDA7Cisg
ICAgQ0ZEaWN0aW9uYXJ5UmVmIGRpY3QgPSBjZXJ0aWZpY2F0ZURpY3Rpb25hcnkoKTsKKyAgICBp
ZiAoIWRpY3QpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisgICAgdm9pZCogZGF0YSA9IHdrR2V0
U1NMUGVlckNlcnRpZmljYXRlRGF0YShkaWN0KTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJl
dHVybiBFX0ZBSUw7CisgICAgKnJlc3VsdCA9IChPTEVfSEFORExFKShVTE9ORzY0KWRhdGE7Cisg
ICAgcmV0dXJuICpyZXN1bHQgPyBTX09LIDogRV9GQUlMOworfQorCisvLyBXZWJVUkxSZXNwb25z
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK0hSRVNVTFQgV2ViVVJMUmVzcG9uc2U6OnN1Z2dlc3RlZEZpbGVFeHRlbnNpb24o
QlNUUiAqcmVzdWx0KQoreworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOworCisgICAgKnJlc3VsdCA9IDA7CisKKyAgICBpZiAobV9yZXNwb25zZS5taW1lVHlwZSgp
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIEJTdHJpbmcgbWltZVR5
cGUobV9yZXNwb25zZS5taW1lVHlwZSgpKTsKKyAgICBIS0VZIGtleTsKKyAgICBMT05HIGVyciA9
IFJlZ09wZW5LZXlFeChIS0VZX0NMQVNTRVNfUk9PVCwgVEVYVCgiTUlNRVxcRGF0YWJhc2VcXENv
bnRlbnQgVHlwZSIpLCAwLCBLRVlfUVVFUllfVkFMVUUsICZrZXkpOworICAgIGlmICghZXJyKSB7
CisgICAgICAgIEhLRVkgc3ViS2V5OworICAgICAgICBlcnIgPSBSZWdPcGVuS2V5RXgoa2V5LCBt
aW1lVHlwZSwgMCwgS0VZX1FVRVJZX1ZBTFVFLCAmc3ViS2V5KTsKKyAgICAgICAgaWYgKCFlcnIp
IHsKKyAgICAgICAgICAgIERXT1JEIGtleVR5cGUgPSBSRUdfU1o7CisgICAgICAgICAgICBUQ0hB
UiBleHRlbnNpb25bTUFYX1BBVEhdOworICAgICAgICAgICAgRFdPUkQga2V5U2l6ZSA9IHNpemVv
ZihleHRlbnNpb24pL3NpemVvZihleHRlbnNpb25bMF0pOworICAgICAgICAgICAgZXJyID0gUmVn
UXVlcnlWYWx1ZUV4KHN1YktleSwgVEVYVCgiRXh0ZW5zaW9uIiksIDAsICZrZXlUeXBlLCAoTFBC
WVRFKWV4dGVuc2lvbiwgJmtleVNpemUpOworICAgICAgICAgICAgaWYgKCFlcnIgJiYga2V5VHlw
ZSAhPSBSRUdfU1opCisgICAgICAgICAgICAgICAgZXJyID0gRVJST1JfSU5WQUxJRF9EQVRBOwor
ICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgICAgIC8vIGZhbGxiYWNrIGhhbmRs
ZXJzCisgICAgICAgICAgICAgICAgaWYgKCFfdGNzY21wKG1pbWVUeXBlLCBURVhUKCJ0ZXh0L2h0
bWwiKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgX3Rjc2NweShleHRlbnNpb24sIFRFWFQoIi5o
dG1sIikpOworICAgICAgICAgICAgICAgICAgICBlcnIgPSAwOworICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIV90Y3NjbXAobWltZVR5cGUsIFRFWFQoImFwcGxpY2F0aW9uL3hodG1sK3htbCIp
KSkgeworICAgICAgICAgICAgICAgICAgICBfdGNzY3B5KGV4dGVuc2lvbiwgVEVYVCgiLnhodG1s
IikpOworICAgICAgICAgICAgICAgICAgICBlcnIgPSAwOworICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIV90Y3NjbXAobWltZVR5cGUsIFRFWFQoImltYWdlL3N2Zyt4bWwiKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgX3Rjc2NweShleHRlbnNpb24sIFRFWFQoIi5zdmciKSk7CisgICAgICAg
ICAgICAgICAgICAgIGVyciA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKCFlcnIpIHsKKyAgICAgICAgICAgICAgICAqcmVzdWx0ID0gU3lzQWxs
b2NTdHJpbmcoZXh0ZW5zaW9uKTsKKyAgICAgICAgICAgICAgICBpZiAoISpyZXN1bHQpCisgICAg
ICAgICAgICAgICAgICAgIGVyciA9IEVSUk9SX09VVE9GTUVNT1JZOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgUmVnQ2xvc2VLZXkoc3ViS2V5KTsKKyAgICAgICAgfQorICAgICAgICBSZWdD
bG9zZUtleShrZXkpOworICAgIH0KKworICAgIHJldHVybiBIUkVTVUxUX0ZST01fV0lOMzIoZXJy
KTsKK30KKworY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgV2ViVVJMUmVzcG9uc2U6OnJlc291cmNl
UmVzcG9uc2UoKSBjb25zdAoreworICAgIHJldHVybiBtX3Jlc3BvbnNlOworfQorCitDRkRpY3Rp
b25hcnlSZWYgV2ViVVJMUmVzcG9uc2U6OmNlcnRpZmljYXRlRGljdGlvbmFyeSgpIGNvbnN0Cit7
CisgICAgaWYgKG1fU1NMQ2VydGlmaWNhdGVJbmZvKQorICAgICAgICByZXR1cm4gbV9TU0xDZXJ0
aWZpY2F0ZUluZm8uZ2V0KCk7CisKKyAgICBDRlVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UgPSBt
X3Jlc3BvbnNlLmNmVVJMUmVzcG9uc2UoKTsKKyAgICBpZiAoIWNmUmVzcG9uc2UpCisgICAgICAg
IHJldHVybiAwOworICAgIG1fU1NMQ2VydGlmaWNhdGVJbmZvID0gd2tHZXRTU0xDZXJ0aWZpY2F0
ZUluZm8oY2ZSZXNwb25zZSk7CisgICAgcmV0dXJuIG1fU1NMQ2VydGlmaWNhdGVJbmZvLmdldCgp
OworfQpJbmRleDogV2ViS2l0L3dpbi9XZWJVUkxSZXNwb25zZUNGTmV0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvd2luL1dlYlVSTFJlc3BvbnNlQ0ZOZXQuY3BwCShyZXZpc2lvbiAzMTAzNikK
KysrIFdlYktpdC93aW4vV2ViVVJMUmVzcG9uc2VDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDQsMzUzICs0NCw4IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
Ci1zdGF0aWMgTFBDVFNUUiBDRkhUVFBNZXNzYWdlQ29weUxvY2FsaXplZFNob3J0RGVzY3JpcHRp
b25Gb3JTdGF0dXNDb2RlKENGSW5kZXggc3RhdHVzQ29kZSkKLXsKLSAgICBMUENUU1RSIHJlc3Vs
dCA9IDA7Ci0gICAgaWYgKHN0YXR1c0NvZGUgPCAxMDAgfHwgc3RhdHVzQ29kZSA+PSA2MDApCi0g
ICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJzZXJ2ZXIgZXJyb3IiLCAiSFRUUCBy
ZXN1bHQgY29kZSBzdHJpbmciKTsKLSAgICBlbHNlIGlmIChzdGF0dXNDb2RlID49IDEwMCAmJiBz
dGF0dXNDb2RlIDw9IDE5OSkgewotICAgICAgICBzd2l0Y2ggKHN0YXR1c0NvZGUpIHsKLSAgICAg
ICAgICAgIGNhc2UgMTAwOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RS
SU5HKCJjb250aW51ZSIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxMDE6Ci0gICAgICAgICAgICAgICAgcmVzdWx0
ID0gTFBDVFNUUl9VSV9TVFJJTkcoInN3aXRjaGluZyBwcm90b2NvbHMiLCAiSFRUUCByZXN1bHQg
Y29kZSBzdHJpbmciKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoImluZm9ybWF0
aW9uYWwiLCAiSFRUUCByZXN1bHQgY29kZSBzdHJpbmciKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoc3RhdHVzQ29kZSA+PSAyMDAgJiYgc3RhdHVz
Q29kZSA8PSAyOTkpIHsKLSAgICAgICAgc3dpdGNoIChzdGF0dXNDb2RlKSB7Ci0gICAgICAgICAg
ICBjYXNlIDIwMDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklORygi
bm8gZXJyb3IiLCAiSFRUUCByZXN1bHQgY29kZSBzdHJpbmciKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgMjAxOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQ
Q1RTVFJfVUlfU1RSSU5HKCJjcmVhdGVkIiwgIkhUVFAgcmVzdWx0IGNvZGUgc3RyaW5nIik7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDIwMjoKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklORygiYWNjZXB0ZWQiLCAiSFRUUCByZXN1bHQg
Y29kZSBzdHJpbmciKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
MjAzOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJub24tYXV0
aG9yaXRhdGl2ZSBpbmZvcm1hdGlvbiIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyMDQ6Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoIm5vIGNvbnRlbnQiLCAiSFRUUCByZXN1bHQg
Y29kZSBzdHJpbmciKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
MjA1OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJyZXNldCBj
b250ZW50IiwgIkhUVFAgcmVzdWx0IGNvZGUgc3RyaW5nIik7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIDIwNjoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBMUENU
U1RSX1VJX1NUUklORygicGFydGlhbCBjb250ZW50IiwgIkhUVFAgcmVzdWx0IGNvZGUgc3RyaW5n
Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJzdWNjZXNzIiwgIkhUVFAgcmVz
dWx0IGNvZGUgc3RyaW5nIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gCi0g
ICAgfSBlbHNlIGlmIChzdGF0dXNDb2RlID49IDMwMCAmJiBzdGF0dXNDb2RlIDw9IDM5OSkgewot
ICAgICAgICBzd2l0Y2ggKHN0YXR1c0NvZGUpIHsKLSAgICAgICAgICAgIGNhc2UgMzAwOgotICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJtdWx0aXBsZSBjaG9pY2Vz
IiwgIkhUVFAgcmVzdWx0IGNvZGUgc3RyaW5nIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIDMwMToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBMUENUU1RSX1VJ
X1NUUklORygibW92ZWQgcGVybWFuZW50bHkiLCAiSFRUUCByZXN1bHQgY29kZSBzdHJpbmciKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMzAyOgotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJmb3VuZCIsICJIVFRQIHJlc3VsdCBj
b2RlIHN0cmluZyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAz
MDM6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoInNlZSBvdGhl
ciIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSAzMDQ6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gTFBDVFNUUl9V
SV9TVFJJTkcoIm5vdCBtb2RpZmllZCIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAzMDU6Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoIm5lZWRzIHByb3h5IiwgIkhUVFAgcmVzdWx0
IGNvZGUgc3RyaW5nIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IDMwNzoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklORygidGVtcG9y
YXJpbHkgcmVkaXJlY3RlZCIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAzMDY6ICAgLy8gMzA2IHN0YXR1cyBjb2Rl
IHVudXNlZCBpbiBIVFRQCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJyZWRpcmVjdGVkIiwgIkhUVFAgcmVzdWx0IGNvZGUg
c3RyaW5nIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKHN0YXR1c0NvZGUgPj0gNDAwICYmIHN0YXR1c0NvZGUgPD0gNDk5KSB7Ci0gICAgICAgIHN3
aXRjaCAoc3RhdHVzQ29kZSkgewotICAgICAgICAgICAgY2FzZSA0MDA6Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoImJhZCByZXF1ZXN0IiwgIkhUVFAgcmVzdWx0
IGNvZGUgc3RyaW5nIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IDQwMToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklORygidW5hdXRo
b3JpemVkIiwgIkhUVFAgcmVzdWx0IGNvZGUgc3RyaW5nIik7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIDQwMjoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBMUENU
U1RSX1VJX1NUUklORygicGF5bWVudCByZXF1aXJlZCIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmlu
ZyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA0MDM6Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoImZvcmJpZGRlbiIsICJIVFRQ
IHJlc3VsdCBjb2RlIHN0cmluZyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSA0MDQ6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkco
Im5vdCBmb3VuZCIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSA0MDU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0g
TFBDVFNUUl9VSV9TVFJJTkcoIm1ldGhvZCBub3QgYWxsb3dlZCIsICJIVFRQIHJlc3VsdCBjb2Rl
IHN0cmluZyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA0MDY6
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoInVuYWNjZXB0YWJs
ZSIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSA0MDc6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gTFBDVFNUUl9V
SV9TVFJJTkcoInByb3h5IGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkIiwgIkhUVFAgcmVzdWx0IGNv
ZGUgc3RyaW5nIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDQw
ODoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklORygicmVxdWVzdCB0
aW1lZCBvdXQiLCAiSFRUUCByZXN1bHQgY29kZSBzdHJpbmciKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgNDA5OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQ
Q1RTVFJfVUlfU1RSSU5HKCJjb25mbGljdCIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA0MTA6Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoIm5vIGxvbmdlciBleGlzdHMiLCAiSFRU
UCByZXN1bHQgY29kZSBzdHJpbmciKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgNDExOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5H
KCJsZW5ndGggcmVxdWlyZWQiLCAiSFRUUCByZXN1bHQgY29kZSBzdHJpbmciKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNDEyOgotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJwcmVjb25kaXRpb24gZmFpbGVkIiwgIkhUVFAgcmVz
dWx0IGNvZGUgc3RyaW5nIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIDQxMzoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklORygicmVx
dWVzdCB0b28gbGFyZ2UiLCAiSFRUUCByZXN1bHQgY29kZSBzdHJpbmciKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNDE0OgotICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJyZXF1ZXN0ZWQgVVJMIHRvbyBsb25nIiwgIkhUVFAgcmVz
dWx0IGNvZGUgc3RyaW5nIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIDQxNToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklORygidW5z
dXBwb3J0ZWQgbWVkaWEgdHlwZSIsICJIVFRQIHJlc3VsdCBjb2RlIHN0cmluZyIpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA0MTY6Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoInJlcXVlc3RlZCByYW5nZSBub3Qgc2F0aXNmaWFi
bGUiLCAiSFRUUCByZXN1bHQgY29kZSBzdHJpbmciKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgNDE3OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJf
VUlfU1RSSU5HKCJleHBlY3RhdGlvbiBmYWlsZWQiLCAiSFRUUCByZXN1bHQgY29kZSBzdHJpbmci
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0ID0gTFBDVFNUUl9VSV9TVFJJTkcoImNsaWVudCBlcnJvciIsICJIVFRQ
IHJlc3VsdCBjb2RlIHN0cmluZyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmIChzdGF0dXNDb2RlID49IDUwMCAmJiBzdGF0dXNDb2RlIDw9IDU5OSkg
ewotICAgICAgICBzd2l0Y2ggKHN0YXR1c0NvZGUpIHsKLSAgICAgICAgICAgIGNhc2UgNTAwOgot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJpbnRlcm5hbCBzZXJ2
ZXIgZXJyb3IiLCAiSFRUUCByZXN1bHQgY29kZSBzdHJpbmciKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgNTAxOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQ
Q1RTVFJfVUlfU1RSSU5HKCJ1bmltcGxlbWVudGVkIiwgIkhUVFAgcmVzdWx0IGNvZGUgc3RyaW5n
Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDUwMjoKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklORygiYmFkIGdhdGV3YXkiLCAiSFRU
UCByZXN1bHQgY29kZSBzdHJpbmciKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgNTAzOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5H
KCJzZXJ2aWNlIHVuYXZhaWxhYmxlIiwgIkhUVFAgcmVzdWx0IGNvZGUgc3RyaW5nIik7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDUwNDoKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSBMUENUU1RSX1VJX1NUUklORygiZ2F0ZXdheSB0aW1lZCBvdXQiLCAiSFRUUCBy
ZXN1bHQgY29kZSBzdHJpbmciKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgNTA1OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJ1
bnN1cHBvcnRlZCB2ZXJzaW9uIiwgIkhUVFAgcmVzdWx0IGNvZGUgc3RyaW5nIik7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IExQQ1RTVFJfVUlfU1RSSU5HKCJzZXJ2ZXIgZXJyb3IiLCAiSFRUUCByZXN1bHQgY29k
ZSBzdHJpbmciKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBJV2ViVVJMUmVzcG9uc2UgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1XZWJV
UkxSZXNwb25zZTo6V2ViVVJMUmVzcG9uc2UoKQotICAgIDptX3JlZkNvdW50KDApCi17Ci0gICAg
Z0NsYXNzQ291bnQrKzsKLX0KLQotV2ViVVJMUmVzcG9uc2U6On5XZWJVUkxSZXNwb25zZSgpCi17
Ci0gICAgZ0NsYXNzQ291bnQtLTsKLX0KLQotV2ViVVJMUmVzcG9uc2UqIFdlYlVSTFJlc3BvbnNl
OjpjcmVhdGVJbnN0YW5jZSgpCi17Ci0gICAgV2ViVVJMUmVzcG9uc2UqIGluc3RhbmNlID0gbmV3
IFdlYlVSTFJlc3BvbnNlKCk7Ci0gICAgLy8gZmFrZSBhbiBodHRwIHJlc3BvbnNlIC0gc28gaXQg
aGFzIHRoZSBJV2ViSFRUUFVSTFJlc3BvbnNlIGludGVyZmFjZQotICAgIGluc3RhbmNlLT5tX3Jl
c3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZShLVVJMKCJodHRwOi8vIiksIFN0cmluZygpLCAwLCBT
dHJpbmcoKSwgU3RyaW5nKCkpOwotICAgIGluc3RhbmNlLT5BZGRSZWYoKTsKLSAgICByZXR1cm4g
aW5zdGFuY2U7Ci19Ci0KLVdlYlVSTFJlc3BvbnNlKiBXZWJVUkxSZXNwb25zZTo6Y3JlYXRlSW5z
dGFuY2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgaWYgKHJlc3Bv
bnNlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFdlYlVSTFJlc3BvbnNlKiBp
bnN0YW5jZSA9IG5ldyBXZWJVUkxSZXNwb25zZSgpOwotICAgIGluc3RhbmNlLT5BZGRSZWYoKTsK
LSAgICBpbnN0YW5jZS0+bV9yZXNwb25zZSA9IHJlc3BvbnNlOwotCi0gICAgcmV0dXJuIGluc3Rh
bmNlOwotfQotCi0vLyBJVW5rbm93biAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViVVJMUmVzcG9uc2U6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiog
cHB2T2JqZWN0KQotewotICAgICpwcHZPYmplY3QgPSAwOwotICAgIGlmIChJc0VxdWFsR1VJRChy
aWlkLCBJSURfSVVua25vd24pKQotICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVdl
YlVSTFJlc3BvbnNlKj4odGhpcyk7Ci0gICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191
dWlkb2YodGhpcykpKQotICAgICAgICAqcHB2T2JqZWN0ID0gdGhpczsKLSAgICBlbHNlIGlmIChJ
c0VxdWFsR1VJRChyaWlkLCBJSURfSVdlYlVSTFJlc3BvbnNlKSkKLSAgICAgICAgKnBwdk9iamVj
dCA9IHN0YXRpY19jYXN0PElXZWJVUkxSZXNwb25zZSo+KHRoaXMpOwotICAgIGVsc2UgaWYgKElz
RXF1YWxHVUlEKHJpaWQsIElJRF9JV2ViVVJMUmVzcG9uc2VQcml2YXRlKSkKLSAgICAgICAgKnBw
dk9iamVjdCA9IHN0YXRpY19jYXN0PElXZWJVUkxSZXNwb25zZVByaXZhdGUqPih0aGlzKTsKLSAg
ICBlbHNlIGlmIChtX3Jlc3BvbnNlLmlzSFRUUCgpICYmIElzRXF1YWxHVUlEKHJpaWQsIElJRF9J
V2ViSFRUUFVSTFJlc3BvbnNlKSkKLSAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElX
ZWJIVFRQVVJMUmVzcG9uc2UqPih0aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBFX05P
SU5URVJGQUNFOwotCi0gICAgQWRkUmVmKCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLVVMT05H
IFNURE1FVEhPRENBTExUWVBFIFdlYlVSTFJlc3BvbnNlOjpBZGRSZWYodm9pZCkKLXsKLSAgICBy
ZXR1cm4gKyttX3JlZkNvdW50OwotfQotCi1VTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBXZWJVUkxS
ZXNwb25zZTo6UmVsZWFzZSh2b2lkKQotewotICAgIFVMT05HIG5ld1JlZiA9IC0tbV9yZWZDb3Vu
dDsKLSAgICBpZiAoIW5ld1JlZikKLSAgICAgICAgZGVsZXRlKHRoaXMpOwotCi0gICAgcmV0dXJu
IG5ld1JlZjsKLX0KLQotLy8gSVdlYlVSTFJlc3BvbnNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgV2ViVVJMUmVzcG9uc2U6OmV4cGVjdGVkQ29udGVudExlbmd0aCgg
Ci0gICAgLyogW3JldHZhbF1bb3V0XSAqLyBsb25nIGxvbmcqIHJlc3VsdCkKLXsKLSAgICAqcmVz
dWx0ID0gbV9yZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKLSAgICByZXR1cm4gU19P
SzsKLX0KLQotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJVUkxSZXNwb25zZTo6aW5pdFdp
dGhVUkwoIAotICAgIC8qIFtpbl0gKi8gQlNUUiB1cmwsCi0gICAgLyogW2luXSAqLyBCU1RSIG1p
bWVUeXBlLAotICAgIC8qIFtpbl0gKi8gaW50IGV4cGVjdGVkQ29udGVudExlbmd0aCwKLSAgICAv
KiBbaW5dICovIEJTVFIgdGV4dEVuY29kaW5nTmFtZSkKLXsKLSAgICBtX3Jlc3BvbnNlID0gUmVz
b3VyY2VSZXNwb25zZShLVVJMKHVybCksIFN0cmluZyhtaW1lVHlwZSksIGV4cGVjdGVkQ29udGVu
dExlbmd0aCwgU3RyaW5nKHRleHRFbmNvZGluZ05hbWUpLCBTdHJpbmcoKSk7Ci0gICAgcmV0dXJu
IFNfT0s7Ci19Ci0KLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVVJMUmVzcG9uc2U6Ok1J
TUVUeXBlKCAKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJTVFIqIHJlc3VsdCkKLXsKLSAgICBC
U3RyaW5nIG1pbWVUeXBlKG1fcmVzcG9uc2UubWltZVR5cGUoKSk7Ci0gICAgKnJlc3VsdCA9IG1p
bWVUeXBlLnJlbGVhc2UoKTsKLSAgICBpZiAoIW1fcmVzcG9uc2UubWltZVR5cGUoKS5pc051bGwo
KSAmJiAhKnJlc3VsdCkKLSAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7Ci0KLSAgICByZXR1
cm4gU19PSzsKLX0KLQotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJVUkxSZXNwb25zZTo6
c3VnZ2VzdGVkRmlsZW5hbWUoIAotICAgIC8qIFtyZXR2YWxdW291dF0gKi8gQlNUUiogcmVzdWx0
KQotewotICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAgIH0KLQotICAgICpyZXN1bHQgPSAwOwotCi0g
ICAgaWYgKG1fcmVzcG9uc2UudXJsKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRV9GQUlM
OwotCi0gICAgKnJlc3VsdCA9IEJTdHJpbmcobV9yZXNwb25zZS5zdWdnZXN0ZWRGaWxlbmFtZSgp
KS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViVVJMUmVzcG9uc2U6OnRleHRFbmNvZGluZ05hbWUoIAotICAgIC8qIFtyZXR2YWxd
W291dF0gKi8gQlNUUiogcmVzdWx0KQotewotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1
cm4gRV9JTlZBTElEQVJHOwotCi0gICAgQlN0cmluZyB0ZXh0RW5jb2RpbmdOYW1lKG1fcmVzcG9u
c2UudGV4dEVuY29kaW5nTmFtZSgpKTsKLSAgICAqcmVzdWx0ID0gdGV4dEVuY29kaW5nTmFtZS5y
ZWxlYXNlKCk7Ci0gICAgaWYgKCFtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKS5pc051bGwo
KSAmJiAhKnJlc3VsdCkKLSAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7Ci0KLSAgICByZXR1
cm4gU19PSzsKLX0KLQotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJVUkxSZXNwb25zZTo6
VVJMKCAKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJTVFIqIHJlc3VsdCkKLXsKLSAgICBpZiAo
IXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKLQotICAgIEJTdHJpbmcgdXJs
KG1fcmVzcG9uc2UudXJsKCkuc3RyaW5nKCkpOwotICAgICpyZXN1bHQgPSB1cmwucmVsZWFzZSgp
OwotICAgIGlmICghbV9yZXNwb25zZS51cmwoKS5pc0VtcHR5KCkgJiYgISpyZXN1bHQpCi0gICAg
ICAgIHJldHVybiBFX09VVE9GTUVNT1JZOwotCi0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KIC8vIElX
ZWJIVFRQVVJMUmVzcG9uc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJVUkxSZXNw
b25zZTo6YWxsSGVhZGVyRmllbGRzKCAKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIElQcm9wZXJ0
eUJhZyoqIGhlYWRlckZpZWxkcykKLXsKLSAgICBBU1NFUlQobV9yZXNwb25zZS5pc0hUVFAoKSk7
Ci0gICAgKmhlYWRlckZpZWxkcyA9IEhUVFBIZWFkZXJQcm9wZXJ0eUJhZzo6Y3JlYXRlSW5zdGFu
Y2UodGhpcyk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgV2ViVVJMUmVzcG9uc2U6OmxvY2FsaXplZFN0cmluZ0ZvclN0YXR1c0NvZGUoIAotICAgIC8q
IFtpbl0gKi8gaW50IHN0YXR1c0NvZGUsCi0gICAgLyogW3JldHZhbF1bb3V0XSAqLyBCU1RSKiBz
dGF0dXNTdHJpbmcpCi17Ci0gICAgQVNTRVJUKG1fcmVzcG9uc2UuaXNIVFRQKCkpOwotICAgIGlm
IChzdGF0dXNTdHJpbmcpCi0gICAgICAgICpzdGF0dXNTdHJpbmcgPSAwOwotICAgIExQQ1RTVFIg
c3RhdHVzVGV4dCA9IENGSFRUUE1lc3NhZ2VDb3B5TG9jYWxpemVkU2hvcnREZXNjcmlwdGlvbkZv
clN0YXR1c0NvZGUoc3RhdHVzQ29kZSk7Ci0gICAgaWYgKCFzdGF0dXNUZXh0KQotICAgICAgICBy
ZXR1cm4gRV9GQUlMOwotICAgIGlmIChzdGF0dXNTdHJpbmcpCi0gICAgICAgICpzdGF0dXNTdHJp
bmcgPSBTeXNBbGxvY1N0cmluZyhzdGF0dXNUZXh0KTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQot
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJVUkxSZXNwb25zZTo6c3RhdHVzQ29kZSggCi0g
ICAgLyogW3JldHZhbF1bb3V0XSAqLyBpbnQqIHN0YXR1c0NvZGUpCi17Ci0gICAgQVNTRVJUKG1f
cmVzcG9uc2UuaXNIVFRQKCkpOwotICAgIGlmIChzdGF0dXNDb2RlKQotICAgICAgICAqc3RhdHVz
Q29kZSA9IG1fcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKTsKLSAgICByZXR1cm4gU19PSzsKLX0K
LQotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJVUkxSZXNwb25zZTo6aXNBdHRhY2htZW50
KCAKLSAgICAvKiBbcmV0dmFsXVtvdXRdICovIEJPT0wgKmF0dGFjaG1lbnQpCi17Ci0gICAgKmF0
dGFjaG1lbnQgPSBtX3Jlc3BvbnNlLmlzQXR0YWNobWVudCgpOwotICAgIHJldHVybiBTX09LOwot
fQotCi0KIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVVJMUmVzcG9uc2U6OnNzbFBlZXJD
ZXJ0aWZpY2F0ZSggCiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBPTEVfSEFORExFKiByZXN1bHQp
CiB7CkBAIC00MDksNjAgKzY0LDYgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJVUkxS
ZXNwb25zZQogCiAvLyBXZWJVUkxSZXNwb25zZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhSRVNVTFQgV2ViVVJMUmVzcG9u
c2U6OnN1Z2dlc3RlZEZpbGVFeHRlbnNpb24oQlNUUiAqcmVzdWx0KQotewotICAgIGlmICghcmVz
dWx0KQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotCi0gICAgKnJlc3VsdCA9IDA7Ci0KLSAg
ICBpZiAobV9yZXNwb25zZS5taW1lVHlwZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEVf
RkFJTDsKLQotICAgIEJTdHJpbmcgbWltZVR5cGUobV9yZXNwb25zZS5taW1lVHlwZSgpKTsKLSAg
ICBIS0VZIGtleTsKLSAgICBMT05HIGVyciA9IFJlZ09wZW5LZXlFeChIS0VZX0NMQVNTRVNfUk9P
VCwgVEVYVCgiTUlNRVxcRGF0YWJhc2VcXENvbnRlbnQgVHlwZSIpLCAwLCBLRVlfUVVFUllfVkFM
VUUsICZrZXkpOwotICAgIGlmICghZXJyKSB7Ci0gICAgICAgIEhLRVkgc3ViS2V5OwotICAgICAg
ICBlcnIgPSBSZWdPcGVuS2V5RXgoa2V5LCBtaW1lVHlwZSwgMCwgS0VZX1FVRVJZX1ZBTFVFLCAm
c3ViS2V5KTsKLSAgICAgICAgaWYgKCFlcnIpIHsKLSAgICAgICAgICAgIERXT1JEIGtleVR5cGUg
PSBSRUdfU1o7Ci0gICAgICAgICAgICBUQ0hBUiBleHRlbnNpb25bTUFYX1BBVEhdOwotICAgICAg
ICAgICAgRFdPUkQga2V5U2l6ZSA9IHNpemVvZihleHRlbnNpb24pL3NpemVvZihleHRlbnNpb25b
MF0pOwotICAgICAgICAgICAgZXJyID0gUmVnUXVlcnlWYWx1ZUV4KHN1YktleSwgVEVYVCgiRXh0
ZW5zaW9uIiksIDAsICZrZXlUeXBlLCAoTFBCWVRFKWV4dGVuc2lvbiwgJmtleVNpemUpOwotICAg
ICAgICAgICAgaWYgKCFlcnIgJiYga2V5VHlwZSAhPSBSRUdfU1opCi0gICAgICAgICAgICAgICAg
ZXJyID0gRVJST1JfSU5WQUxJRF9EQVRBOwotICAgICAgICAgICAgaWYgKGVycikgewotICAgICAg
ICAgICAgICAgIC8vIGZhbGxiYWNrIGhhbmRsZXJzCi0gICAgICAgICAgICAgICAgaWYgKCFfdGNz
Y21wKG1pbWVUeXBlLCBURVhUKCJ0ZXh0L2h0bWwiKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
X3Rjc2NweShleHRlbnNpb24sIFRFWFQoIi5odG1sIikpOwotICAgICAgICAgICAgICAgICAgICBl
cnIgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIV90Y3NjbXAobWltZVR5cGUsIFRF
WFQoImFwcGxpY2F0aW9uL3hodG1sK3htbCIpKSkgewotICAgICAgICAgICAgICAgICAgICBfdGNz
Y3B5KGV4dGVuc2lvbiwgVEVYVCgiLnhodG1sIikpOwotICAgICAgICAgICAgICAgICAgICBlcnIg
PSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIV90Y3NjbXAobWltZVR5cGUsIFRFWFQo
ImltYWdlL3N2Zyt4bWwiKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgX3Rjc2NweShleHRlbnNp
b24sIFRFWFQoIi5zdmciKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVyciA9IDA7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFlcnIpIHsKLSAgICAg
ICAgICAgICAgICAqcmVzdWx0ID0gU3lzQWxsb2NTdHJpbmcoZXh0ZW5zaW9uKTsKLSAgICAgICAg
ICAgICAgICBpZiAoISpyZXN1bHQpCi0gICAgICAgICAgICAgICAgICAgIGVyciA9IEVSUk9SX09V
VE9GTUVNT1JZOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVnQ2xvc2VLZXkoc3ViS2V5
KTsKLSAgICAgICAgfQotICAgICAgICBSZWdDbG9zZUtleShrZXkpOwotICAgIH0KLQotICAgIHJl
dHVybiBIUkVTVUxUX0ZST01fV0lOMzIoZXJyKTsKLX0KLQotY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgV2ViVVJMUmVzcG9uc2U6OnJlc291cmNlUmVzcG9uc2UoKSBjb25zdAotewotICAgIHJldHVy
biBtX3Jlc3BvbnNlOwotfQotCiBDRkRpY3Rpb25hcnlSZWYgV2ViVVJMUmVzcG9uc2U6OmNlcnRp
ZmljYXRlRGljdGlvbmFyeSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fU1NMQ2VydGlmaWNhdGVJbmZv
KQpJbmRleDogV2ViS2l0L3dpbi9XZWJVUkxSZXNwb25zZUN1cmwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC93aW4vV2ViVVJMUmVzcG9uc2VDdXJsLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktp
dC93aW4vV2ViVVJMUmVzcG9uc2VDdXJsLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RExMLmgi
CisjaW5jbHVkZSAiV2ViS2l0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBJ
V2ViSFRUUFVSTFJlc3BvbnNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVVJMUmVz
cG9uc2U6OnNzbFBlZXJDZXJ0aWZpY2F0ZSggCisgICAgLyogW3JldHZhbF1bb3V0XSAqLyBPTEVf
SEFORExFKiByZXN1bHQpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IEVfTk9USU1QTDsKK30KKworCkluZGV4OiBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDMxMDQ0KQorKysgV2ViS2l0
L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYyLDExICs5NjIsMTUgQEAgYm9v
bCBXZWJWaWV3OjpjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFdlYgogICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShTdHJpbmcocmVxdWVzdC51cmwoKS5wcm90b2NvbCgpKSwgImFib3V0IikpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCisjaWYgVVNFKENGTkVUV09SSykKICAgICBpZiAoQ0ZVUkxQcm90
b2NvbENhbkhhbmRsZVJlcXVlc3QocmVxdWVzdC5jZlVSTFJlcXVlc3QoKSkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgLy8gRklYTUU6IE1hYyBXZWJLaXQgY2FsbHMgX3JlcHJlc2VudGF0
aW9uRXhpc3RzRm9yVVJMU2NoZW1lIGhlcmUKICAgICByZXR1cm4gZmFsc2U7CisjZWxzZQorICAg
IHJldHVybiB0cnVlOworI2VuZGlmCiB9CiAKIFBhZ2UqIFdlYlZpZXc6OnBhZ2UoKQpJbmRleDog
V2ViS2l0L3dpbi9XZWJLaXQudmNwcm9qL1dlYktpdC52Y3Byb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L3dpbi9XZWJLaXQudmNwcm9qL1dlYktpdC52Y3Byb2oJKHJldmlzaW9uIDMxMDQ0KQorKysg
V2ViS2l0L3dpbi9XZWJLaXQudmNwcm9qL1dlYktpdC52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAg
LTkyNyw2ICs5MjcsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cV2ViRXJyb3JDRk5ldC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxXZWJGcmFtZS5jcHAiDQogCQkJCT4NCiAJ
CQk8L0ZpbGU+DQpAQCAtOTcxLDYgKzk3NSwxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxXZWJNdXRhYmxlVVJMUmVxdWVzdENGTmV0LmNw
cCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XFdlYk5vdGlmaWNhdGlvbi5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMTAzMSw2ICsx
MDM5LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXFdlYlVSTFJlc3BvbnNlQ0ZOZXQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cV2ViVmlldy5jcHAiDQogCQkJCT4NCiAJCQk8
L0ZpbGU+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19823</attachid>
            <date>2008-03-16 21:03:40 -0700</date>
            <delta_ts>2008-03-17 12:19:57 -0700</delta_ts>
            <desc>Patch moving logic to WebCore</desc>
            <filename>curl-patch</filename>
            <type>text/plain</type>
            <size>9198</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMTA3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDgtMDMtMTMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UHJvdmlkZSBzb21lIHN0dWIgaW1wbGVtZW50YXRpb25zIGZvciB0aGluZ3MgdGhhdCBXZWJLaXQK
KyAgICAgICAgdXNlcyBmb3IgcGVyZm9ybWluZyBhdXRoZW50aWNhdGlvbi9jaGFsbGVuZ2UgYWN0
aXZpdGllcy4gIFRoaXMKKyAgICAgICAgaXMgaW4gc3VwcG9ydCBvZiBodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzgzNworCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1Qg
Q0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNh
dGlvbkNoYWxsZW5nZS5oOgorICAgICAgICAoV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVu
Z2U6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlOjpzb3VyY2VIYW5kbGUpOgorCiAyMDA4LTAzLTE1ICBNYXJrIE1lbnRv
dmFpICA8bWFya0Btb3hpZW5ldC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYW5kIGxhbmRlZCBi
eSBEYXJpbi4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5o
CShyZXZpc2lvbiAzMTA3OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDExIEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgQ0ZSdW5Mb29wUmVmIGxvYWRlclJ1bkxvb3AoKTsKICAgICBDRlVSTENvbm5lY3Rpb25S
ZWYgY29ubmVjdGlvbigpIGNvbnN0OwogICAgIENGVVJMQ29ubmVjdGlvblJlZiByZWxlYXNlQ29u
bmVjdGlvbkZvckRvd25sb2FkKCk7CisgICAgc3RhdGljIHZvaWQgc2V0SG9zdEFsbG93c0FueUhU
VFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIHZvaWQgc2V0Q2xpZW50
Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0LCBDRkRhdGFSZWYpOworI2VuZGlmCiAKKyNp
ZiBQTEFURk9STShXSU4pICYmIFVTRShDVVJMKQogICAgIHN0YXRpYyB2b2lkIHNldEhvc3RBbGxv
d3NBbnlIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyB2b2lkIHNl
dENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgQ0ZEYXRhUmVmKTsKICNlbmRp
ZgpAQCAtMTM3LDcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICBmcmllbmQgTFJFU1VMVCBfX3N0ZGNh
bGwgUmVzb3VyY2VIYW5kbGVXbmRQcm9jKEhXTkQsIHVuc2lnbmVkIG1lc3NhZ2UsIFdQQVJBTSwg
TFBBUkFNKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwg
UExBVEZPUk0oV1gpCisjaWYgUExBVEZPUk0oUVQpIHx8IFVTRShDVVJMKQogICAgIFJlc291cmNl
SGFuZGxlSW50ZXJuYWwqIGdldEludGVybmFsKCkgeyByZXR1cm4gZC5nZXQoKTsgfQogI2VuZGlm
CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UuaAkocmV2aXNpb24gMzEwNzgpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIDogQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VCYXNlKHByb3RlY3Rpb25TcGFjZSwgcHJvcG9zZWRDcmVkZW50aWFsLCBwcmV2aW91c0Zh
aWx1cmVDb3VudCwgcmVzcG9uc2UsIGVycm9yKQogICAgIHsKICAgICB9CisKKyAgICBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJjZUhhbmRsZSogc291cmNlSGFuZGxlKQorICAgICAgICA6
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZSgpCisgICAgICAgICwgbV9zb3VyY2VIYW5kbGUo
c291cmNlSGFuZGxlKQorICAgIHsKKyAgICB9CisKKyAgICBSZXNvdXJjZUhhbmRsZSogc291cmNl
SGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VIYW5kbGUuZ2V0KCk7IH0KKworICAgIFJl
ZlB0cjxSZXNvdXJjZUhhbmRsZT4gbV9zb3VyY2VIYW5kbGU7ICAgIAogfTsKIAogfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1
cmwuY3BwCShyZXZpc2lvbiAzMTA3OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDEzIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiYgYWxsb3dz
QW55SFRUUFNDZXJ0aWZpY2F0ZUhvc3RzKCkKK3sKKyAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+
IGhvc3RzOworCisgICAgcmV0dXJuIGhvc3RzOworfQorCiBSZXNvdXJjZUhhbmRsZUludGVybmFs
Ojp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgpCiB7CiAgICAgZnJlZShtX3VybCk7CkBAIC03Miw2
ICs3OSwyNiBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzdXBwb3J0c0J1ZmZlcmVkRGF0CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55
SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QpCit7CisgICAgYWxsb3dzQW55SFRU
UFNDZXJ0aWZpY2F0ZUhvc3RzKCkuYWRkKGhvc3QubG93ZXIoKSk7Cit9CisKKyNpZiBQTEFURk9S
TShXSU4pCisvLyBGSVhNRTogIFRoZSBDRkRhdGFSZWYgd2lsbCBuZWVkIHRvIGJlIHNvbWV0aGlu
ZyBlbHNlIHdoZW4KKy8vIGJ1aWxkaW5nIHdpdGhvdXQgQ29yZUZvdW5kYXRpb24KK3N0YXRpYyBI
YXNoTWFwPFN0cmluZywgUmV0YWluUHRyPENGRGF0YVJlZj4gPiYgY2xpZW50Q2VydHMoKQorewor
ICAgIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPENGRGF0YVJlZj4gPiBjZXJ0czsK
KyAgICByZXR1cm4gY2VydHM7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENl
cnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgQ0ZEYXRhUmVmIGNlcnQpCit7CisgICAgY2xp
ZW50Q2VydHMoKS5zZXQoaG9zdC5sb3dlcigpLCBjZXJ0KTsKK30KKyNlbmRpZgorCiB2b2lkIFJl
c291cmNlSGFuZGxlOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQogewogICAgIGQtPm1f
ZGVmZXJzTG9hZGluZyA9IGRlZmVyczsKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAzMTA3OCkKKysrIFdlYktp
dC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDgtMDMt
MTMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJvdmlkZSBzb21lIHN0dWIgaW1wbGVt
ZW50YXRpb25zIGZvciB0aGluZ3MgdGhhdCBXZWJLaXQKKyAgICAgICAgdXNlcyBmb3IgcGVyZm9y
bWluZyBhdXRoZW50aWNhdGlvbi9jaGFsbGVuZ2UgYWN0aXZpdGllcy4gIFRoaXMKKyAgICAgICAg
aXMgaW4gc3VwcG9ydCBvZiBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzgzNworCisgICAgICAgICogV2ViRGF0YVNvdXJjZS5jcHA6CisgICAgICAgICogV2ViRXJyb3Iu
Y3BwOiAgQ29uZGl0aW9uYWxpemUgQ0ZOZXR3b3JrLXNwZWNpZmljIGxvZ2ljCisgICAgICAgICog
V2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuY3BwOiAgQ29uZGl0aW9uYWxpemUgY29uc3Ry
dWN0b3IKKyAgICAgICAgICBmb3IgYXV0aGVudGljYXRpb24vY2hhbGxlbmdlIG1lbWJlci4KKyAg
ICAgICAgKFdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjppbml0V2l0aEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKiBXZWJVUkxSZXNwb25zZS5jcHA6ICBSZW1vdmUgQ0ZO
ZXR3b3JrLXNwZWNpZmljIGxvZ2ljLgorICAgICAgICAqIFdlYlVSTFJlc3BvbnNlLmg6IENvbmRp
dGlvbmFsaXplIENGTmV0d29yay1zcGVjaWZpYyBtZW1iZXIuCisgICAgICAgICogV2ViVmlldy5j
cHA6ICBDb25kaXRpb25hbGl6ZSBDRk5ldHdvcmstc3BlY2lmaWMgbmV0d29yayBwcm90b2NvbCB0
ZXN0LgorICAgICAgICAoV2ViVmlldzo6Y2FuSGFuZGxlUmVxdWVzdCk6CisKIDIwMDgtMDMtMTQg
IFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBQR08gYnVp
bGQgZml4ZXMuCkluZGV4OiBXZWJLaXQvd2luL1dlYkRhdGFTb3VyY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC93aW4vV2ViRGF0YVNvdXJjZS5jcHAJKHJldmlzaW9uIDMxMDc4KQorKysgV2Vi
S2l0L3dpbi9XZWJEYXRhU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0tV
UkwuaD4KICNwcmFnbWEgd2FybmluZyhwb3ApCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApJbmRleDogV2ViS2l0L3dpbi9XZWJFcnJvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJFcnJvci5jcHAJKHJldmlzaW9uIDMxMDc4
KQorKysgV2ViS2l0L3dpbi9XZWJFcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4
LDkgQEAKICNpbmNsdWRlICJXZWJFcnJvci5oIgogI2luY2x1ZGUgIldlYktpdC5oIgogCisjaWYg
VVNFKENGTkVUV09SSykKICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lz
dGVtSW50ZXJmYWNlLmg+CisjZW5kaWYKICNwcmFnbWEgd2FybmluZyhwdXNoLCAwKQogI2luY2x1
ZGUgPFdlYkNvcmUvQlN0cmluZy5oPgogI3ByYWdtYSB3YXJuaW5nKHBvcCkKQEAgLTIxMywxMCAr
MjE1LDEyIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRXJyb3I6OnNzbFAKICAgICBp
ZiAoIW1fY2ZFcnJvclVzZXJJbmZvRGljdCkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAorI2lm
IFVTRShDRk5FVFdPUkspCiAgICAgdm9pZCogZGF0YSA9IHdrR2V0U1NMUGVlckNlcnRpZmljYXRl
RGF0YShtX2NmRXJyb3JVc2VySW5mb0RpY3QuZ2V0KCkpOwogICAgIGlmICghZGF0YSkKICAgICAg
ICAgcmV0dXJuIEVfRkFJTDsKICAgICAqcmVzdWx0ID0gKE9MRV9IQU5ETEUpKFVMT05HNjQpZGF0
YTsKKyNlbmRpZgogICAgIHJldHVybiAqcmVzdWx0ID8gU19PSyA6IEVfRkFJTDsKIH0KIApJbmRl
eDogV2ViS2l0L3dpbi9XZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L3dpbi9XZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5jcHAJKHJldmlz
aW9uIDMxMDc4KQorKysgV2ViS2l0L3dpbi9XZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0JT
dHJpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CiAjcHJhZ21hIHdh
cm5pbmcocG9wKQorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKQEAgLTE2OCw3ICsxNjksMTEgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBXZWJVUkxBdXRoZW50aQogICAgIGlmICghd2ViU2VuZGVyKQogICAgICAgICByZXR1cm4gRV9O
T0lOVEVSRkFDRTsKIAorI2lmIFVTRShDRk5FVFdPUkspCiAgICAgbV9hdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHdlYkNoYWxsZW5nZS0+YXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoKS5jZlVSTEF1dGhDaGFsbGVuZ2VSZWYoKSwgd2ViU2VuZGVyLT5yZXNv
dXJjZUhhbmRsZSgpKTsKKyNlbHNlCisgICAgbV9hdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHdlYlNlbmRlci0+cmVzb3VyY2VIYW5kbGUoKSk7CisjZW5k
aWYKIAogICAgIHJldHVybiBTX09LOwogfQpJbmRleDogV2ViS2l0L3dpbi9XZWJVUkxSZXNwb25z
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJVUkxSZXNwb25zZS5jcHAJKHJldmlz
aW9uIDMxMDc4KQorKysgV2ViS2l0L3dpbi9XZWJVUkxSZXNwb25zZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5Nyw2ICszOTcsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlVSTFJl
c3BvbnNlCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAgICAg
KnJlc3VsdCA9IDA7CisKKyNpZiBVU0UoQ0ZORVRXT1JLKQogICAgIENGRGljdGlvbmFyeVJlZiBk
aWN0ID0gY2VydGlmaWNhdGVEaWN0aW9uYXJ5KCk7CiAgICAgaWYgKCFkaWN0KQogICAgICAgICBy
ZXR1cm4gRV9GQUlMOwpAQCAtNDA0LDYgKzQwNiw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgV2ViVVJMUmVzcG9uc2UKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7
CiAgICAgKnJlc3VsdCA9IChPTEVfSEFORExFKShVTE9ORzY0KWRhdGE7CisjZW5kaWYKKwogICAg
IHJldHVybiAqcmVzdWx0ID8gU19PSyA6IEVfRkFJTDsKIH0KIApAQCAtNDYzLDYgKzQ2Nyw3IEBA
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIFdlYlVSTFJlc3BvbnNlOjoKICAgICByZXR1cm4gbV9y
ZXNwb25zZTsKIH0KIAorI2lmIFVTRShDRk5FVFdPUkspCiBDRkRpY3Rpb25hcnlSZWYgV2ViVVJM
UmVzcG9uc2U6OmNlcnRpZmljYXRlRGljdGlvbmFyeSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fU1NM
Q2VydGlmaWNhdGVJbmZvKQpAQCAtNDc0LDMgKzQ3OSw0IEBAIENGRGljdGlvbmFyeVJlZiBXZWJV
UkxSZXNwb25zZTo6Y2VydGlmaWMKICAgICBtX1NTTENlcnRpZmljYXRlSW5mbyA9IHdrR2V0U1NM
Q2VydGlmaWNhdGVJbmZvKGNmUmVzcG9uc2UpOwogICAgIHJldHVybiBtX1NTTENlcnRpZmljYXRl
SW5mby5nZXQoKTsKIH0KKyNlbmRpZgpJbmRleDogV2ViS2l0L3dpbi9XZWJVUkxSZXNwb25zZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViVVJMUmVzcG9uc2UuaAkocmV2aXNpb24gMzEw
NzgpCisrKyBXZWJLaXQvd2luL1dlYlVSTFJlc3BvbnNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkx
LDEyICs5MSwxOCBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBIUkVTVUxUIHN1Z2dlc3Rl
ZEZpbGVFeHRlbnNpb24oQlNUUiogcmVzdWx0KTsKKworI2lmIFVTRShDRk5FVFdPUkspCiAgICAg
Q0ZEaWN0aW9uYXJ5UmVmIGNlcnRpZmljYXRlRGljdGlvbmFyeSgpIGNvbnN0OworI2VuZGlmCiAK
IHByb3RlY3RlZDoKICAgICBVTE9ORyBtX3JlZkNvdW50OwogICAgIFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UgbV9yZXNwb25zZTsKKworI2lmIFVTRShDRk5FVFdPUkspCiAgICAgbXV0YWJsZSBS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBtX1NTTENlcnRpZmljYXRlSW5mbzsgICAgLy8gdGhp
cyBlbnN1cmVzIGNlcnRpZmljYXRlIGNvbnRleHRzIGFyZSB2YWxpZCBmb3IgdGhlIGxpZmV0aW1l
IG9mIHRoaXMgV2ViVVJMUmVzcG9uc2UuCisjZW5kaWYKIH07CiAKICNlbmRpZgpJbmRleDogV2Vi
S2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZpZXcuY3Bw
CShyZXZpc2lvbiAzMTA3OCkKKysrIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk2MiwxMSArOTYyLDE1IEBAIGJvb2wgV2ViVmlldzo6Y2FuSGFuZGxlUmVxdWVzdChj
b25zdCBXZWIKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoU3RyaW5nKHJlcXVlc3QudXJsKCku
cHJvdG9jb2woKSksICJhYm91dCIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorI2lmIFVTRShD
Rk5FVFdPUkspCiAgICAgaWYgKENGVVJMUHJvdG9jb2xDYW5IYW5kbGVSZXF1ZXN0KHJlcXVlc3Qu
Y2ZVUkxSZXF1ZXN0KCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIEZJWE1FOiBN
YWMgV2ViS2l0IGNhbGxzIF9yZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVSTFNjaGVtZSBoZXJlCiAg
ICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgogfQogCiBQ
YWdlKiBXZWJWaWV3OjpwYWdlKCkK
</data>
<flag name="review"
          id="8673"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19843</attachid>
            <date>2008-03-17 12:19:57 -0700</date>
            <delta_ts>2008-03-17 12:52:25 -0700</delta_ts>
            <desc>Revision 2 based on aroben&apos;s review</desc>
            <filename>curl-patch</filename>
            <type>text/plain</type>
            <size>9222</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMTA5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDgtMDMtMTMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UHJvdmlkZSBzb21lIHN0dWIgaW1wbGVtZW50YXRpb25zIGZvciB0aGluZ3MgdGhhdCBXZWJLaXQK
KyAgICAgICAgdXNlcyBmb3IgcGVyZm9ybWluZyBhdXRoZW50aWNhdGlvbi9jaGFsbGVuZ2UgYWN0
aXZpdGllcy4gIFRoaXMKKyAgICAgICAgaXMgaW4gc3VwcG9ydCBvZiBodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzgzNworCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1Qg
Q0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNh
dGlvbkNoYWxsZW5nZS5oOgorICAgICAgICAoV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVu
Z2U6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlOjpzb3VyY2VIYW5kbGUpOgorCiAyMDA4LTAzLTE2ICBNYWNpZWogU3Rh
Y2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgTm90IHJldmlld2VkLCBqdXN0IGZp
eGluZyBhbiBpbmNvbXBsZXRlIGNvbW1lbnQgZnJvbSB0aGUgbGFzdCBjb21taXQuCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24gMzEwOTIp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTE4LDcgKzExOCwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENGUnVuTG9vcFJl
ZiBsb2FkZXJSdW5Mb29wKCk7CiAgICAgQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm5lY3Rpb24oKSBj
b25zdDsKICAgICBDRlVSTENvbm5lY3Rpb25SZWYgcmVsZWFzZUNvbm5lY3Rpb25Gb3JEb3dubG9h
ZCgpOworICAgIHN0YXRpYyB2b2lkIHNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKGNv
bnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB2b2lkIHNldENsaWVudENlcnRpZmljYXRlKGNvbnN0
IFN0cmluZyYgaG9zdCwgQ0ZEYXRhUmVmKTsKKyNlbmRpZgogCisjaWYgUExBVEZPUk0oV0lOKSAm
JiBVU0UoQ1VSTCkKICAgICBzdGF0aWMgdm9pZCBzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZp
Y2F0ZShjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgdm9pZCBzZXRDbGllbnRDZXJ0aWZpY2F0
ZShjb25zdCBTdHJpbmcmIGhvc3QsIENGRGF0YVJlZik7CiAjZW5kaWYKQEAgLTEzNyw3ICsxNDEs
NyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIExSRVNVTFQgX19zdGRjYWxsIFJlc291cmNlSGFuZGxl
V25kUHJvYyhIV05ELCB1bnNpZ25lZCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7CiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKQorI2lm
IFBMQVRGT1JNKFFUKSB8fCBVU0UoQ1VSTCkKICAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBn
ZXRJbnRlcm5hbCgpIHsgcmV0dXJuIGQuZ2V0KCk7IH0KICNlbmRpZgogCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLmgJKHJldmlzaW9uIDMxMDkyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksMTYg
QEAgcHVibGljOgogICAgICAgICA6IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZShwcm90ZWN0
aW9uU3BhY2UsIHByb3Bvc2VkQ3JlZGVudGlhbCwgcHJldmlvdXNGYWlsdXJlQ291bnQsIHJlc3Bv
bnNlLCBlcnJvcikKICAgICB7CiAgICAgfQorCisgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
UmVzb3VyY2VIYW5kbGUqIHNvdXJjZUhhbmRsZSkKKyAgICAgICAgOiBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZUJhc2UoKQorICAgICAgICAsIG1fc291cmNlSGFuZGxlKHNvdXJjZUhhbmRsZSkKKyAg
ICB7CisgICAgfQorCisgICAgUmVzb3VyY2VIYW5kbGUqIHNvdXJjZUhhbmRsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc291cmNlSGFuZGxlLmdldCgpOyB9CisKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5k
bGU+IG1fc291cmNlSGFuZGxlOyAgICAKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAkocmV2aXNpb24g
MzEwOTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1
cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxMyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK3N0YXRpYyBIYXNoU2V0PFN0cmluZz4mIGFsbG93c0FueUhUVFBTQ2VydGlmaWNh
dGVIb3N0cygpCit7CisgICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBob3N0czsKKworICAgIHJl
dHVybiBob3N0czsKK30KKwogUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxl
SW50ZXJuYWwoKQogewogICAgIGZyZWUobV91cmwpOwpAQCAtNzIsNiArNzksMjYgQEAgYm9vbCBS
ZXNvdXJjZUhhbmRsZTo6c3VwcG9ydHNCdWZmZXJlZERhdAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0SG9zdEFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGUo
Y29uc3QgU3RyaW5nJiBob3N0KQoreworICAgIGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0
cygpLmFkZChob3N0Lmxvd2VyKCkpOworfQorCisjaWYgUExBVEZPUk0oV0lOKQorLy8gRklYTUU6
ICBUaGUgQ0ZEYXRhUmVmIHdpbGwgbmVlZCB0byBiZSBzb21ldGhpbmcgZWxzZSB3aGVuCisvLyBi
dWlsZGluZyB3aXRob3V0IAorc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiA+JiBjbGllbnRDZXJ0cygpCit7CisgICAgc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiA+IGNlcnRzOworICAgIHJldHVybiBjZXJ0czsKK30KKwordm9pZCBS
ZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0LCBD
RkRhdGFSZWYgY2VydCkKK3sKKyAgICBjbGllbnRDZXJ0cygpLnNldChob3N0Lmxvd2VyKCksIGNl
cnQpOworfQorI2VuZGlmCisKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldERlZmVyc0xvYWRpbmco
Ym9vbCBkZWZlcnMpCiB7CiAgICAgZC0+bV9kZWZlcnNMb2FkaW5nID0gZGVmZXJzOwpJbmRleDog
V2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDMxMDkyKQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyMSBAQAorMjAwOC0wMy0xMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGdt
YWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQcm92aWRlIHNvbWUgc3R1YiBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoaW5ncyB0aGF0IFdlYktp
dAorICAgICAgICB1c2VzIGZvciBwZXJmb3JtaW5nIGF1dGhlbnRpY2F0aW9uL2NoYWxsZW5nZSBh
Y3Rpdml0aWVzLiAgVGhpcworICAgICAgICBpcyBpbiBzdXBwb3J0IG9mIGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODM3CisKKyAgICAgICAgKiBXZWJEYXRhU291cmNl
LmNwcDoKKyAgICAgICAgKiBXZWJFcnJvci5jcHA6ICBDb25kaXRpb25hbGl6ZSBDRk5ldHdvcmst
c3BlY2lmaWMgbG9naWMKKyAgICAgICAgKiBXZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5j
cHA6ICBDb25kaXRpb25hbGl6ZSBoYW5kbGluZworICAgICAgICAgIG9mIGF1dGhlbnRpY2F0aW9u
L2NoYWxsZW5nZSBtZW1iZXIuCisgICAgICAgIChXZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZTo6aW5pdFdpdGhBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgICogV2ViVVJMUmVz
cG9uc2UuY3BwOiAgUmVtb3ZlIENGTmV0d29yay1zcGVjaWZpYyBsb2dpYy4KKyAgICAgICAgKiBX
ZWJVUkxSZXNwb25zZS5oOiBDb25kaXRpb25hbGl6ZSBDRk5ldHdvcmstc3BlY2lmaWMgbWVtYmVy
LgorICAgICAgICAqIFdlYlZpZXcuY3BwOiAgQ29uZGl0aW9uYWxpemUgQ0ZOZXR3b3JrLXNwZWNp
ZmljIG5ldHdvcmsgcHJvdG9jb2wgdGVzdC4KKyAgICAgICAgKFdlYlZpZXc6OmNhbkhhbmRsZVJl
cXVlc3QpOgorCiAyMDA4LTAzLTE0ICBTdGV2ZSBGYWxrZW5idXJnICA8c2ZhbGtlbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUEdPIGJ1aWxkIGZpeGVzLgpJbmRleDogV2ViS2l0L3dpbi9XZWJEYXRh
U291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkRhdGFTb3VyY2UuY3BwCShy
ZXZpc2lvbiAzMTA5MikKKysrIFdlYktpdC93aW4vV2ViRGF0YVNvdXJjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9LVVJMLmg+CiAjcHJhZ21hIHdhcm5pbmcocG9wKQorI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKSW5kZXg6
IFdlYktpdC93aW4vV2ViRXJyb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViRXJy
b3IuY3BwCShyZXZpc2lvbiAzMTA5MikKKysrIFdlYktpdC93aW4vV2ViRXJyb3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw5IEBACiAjaW5jbHVkZSAiV2ViRXJyb3IuaCIKICNpbmNs
dWRlICJXZWJLaXQuaCIKIAorI2lmIFVTRShDRk5FVFdPUkspCiAjaW5jbHVkZSA8V2ViS2l0U3lz
dGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgorI2VuZGlmCiAjcHJhZ21hIHdh
cm5pbmcocHVzaCwgMCkKICNpbmNsdWRlIDxXZWJDb3JlL0JTdHJpbmcuaD4KICNwcmFnbWEgd2Fy
bmluZyhwb3ApCkBAIC0yMTMsMTAgKzIxNSwxMiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYkVycm9yOjpzc2xQCiAgICAgaWYgKCFtX2NmRXJyb3JVc2VySW5mb0RpY3QpCiAgICAgICAg
IHJldHVybiBFX0ZBSUw7CiAKKyNpZiBVU0UoQ0ZORVRXT1JLKQogICAgIHZvaWQqIGRhdGEgPSB3
a0dldFNTTFBlZXJDZXJ0aWZpY2F0ZURhdGEobV9jZkVycm9yVXNlckluZm9EaWN0LmdldCgpKTsK
ICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAgICAgKnJlc3VsdCA9IChP
TEVfSEFORExFKShVTE9ORzY0KWRhdGE7CisjZW5kaWYKICAgICByZXR1cm4gKnJlc3VsdCA/IFNf
T0sgOiBFX0ZBSUw7CiB9CiAKSW5kZXg6IFdlYktpdC93aW4vV2ViVVJMQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViVVJMQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UuY3BwCShyZXZpc2lvbiAzMTA5MikKKysrIFdlYktpdC93aW4vV2ViVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9CU3RyaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJj
ZUhhbmRsZS5oPgogI3ByYWdtYSB3YXJuaW5nKHBvcCkKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0xNjgsOSArMTY5LDE0IEBAIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVVJMQXV0aGVudGkKICAgICBpZiAoIXdlYlNlbmRl
cikKICAgICAgICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7CiAKKyNpZiBVU0UoQ0ZORVRXT1JLKQog
ICAgIG1fYXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSh3
ZWJDaGFsbGVuZ2UtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCkuY2ZVUkxBdXRoQ2hhbGxlbmdl
UmVmKCksIHdlYlNlbmRlci0+cmVzb3VyY2VIYW5kbGUoKSk7CiAKICAgICByZXR1cm4gU19PSzsK
KyNlbHNlCisKKyAgICByZXR1cm4gRV9GQUlMOworI2VuZGlmCiB9CiAKIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OmVycm9yKApJbmRleDog
V2ViS2l0L3dpbi9XZWJVUkxSZXNwb25zZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9X
ZWJVUkxSZXNwb25zZS5jcHAJKHJldmlzaW9uIDMxMDkyKQorKysgV2ViS2l0L3dpbi9XZWJVUkxS
ZXNwb25zZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Nyw2ICszOTcsOCBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYlVSTFJlc3BvbnNlCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IHJldHVybiBFX1BPSU5URVI7CiAgICAgKnJlc3VsdCA9IDA7CisKKyNpZiBVU0UoQ0ZORVRXT1JL
KQogICAgIENGRGljdGlvbmFyeVJlZiBkaWN0ID0gY2VydGlmaWNhdGVEaWN0aW9uYXJ5KCk7CiAg
ICAgaWYgKCFkaWN0KQogICAgICAgICByZXR1cm4gRV9GQUlMOwpAQCAtNDA0LDYgKzQwNiw4IEBA
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVVJMUmVzcG9uc2UKICAgICBpZiAoIWRhdGEp
CiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAgICAgKnJlc3VsdCA9IChPTEVfSEFORExFKShVTE9O
RzY0KWRhdGE7CisjZW5kaWYKKwogICAgIHJldHVybiAqcmVzdWx0ID8gU19PSyA6IEVfRkFJTDsK
IH0KIApAQCAtNDYzLDYgKzQ2Nyw3IEBAIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIFdlYlVSTFJl
c3BvbnNlOjoKICAgICByZXR1cm4gbV9yZXNwb25zZTsKIH0KIAorI2lmIFVTRShDRk5FVFdPUksp
CiBDRkRpY3Rpb25hcnlSZWYgV2ViVVJMUmVzcG9uc2U6OmNlcnRpZmljYXRlRGljdGlvbmFyeSgp
IGNvbnN0CiB7CiAgICAgaWYgKG1fU1NMQ2VydGlmaWNhdGVJbmZvKQpAQCAtNDc0LDMgKzQ3OSw0
IEBAIENGRGljdGlvbmFyeVJlZiBXZWJVUkxSZXNwb25zZTo6Y2VydGlmaWMKICAgICBtX1NTTENl
cnRpZmljYXRlSW5mbyA9IHdrR2V0U1NMQ2VydGlmaWNhdGVJbmZvKGNmUmVzcG9uc2UpOwogICAg
IHJldHVybiBtX1NTTENlcnRpZmljYXRlSW5mby5nZXQoKTsKIH0KKyNlbmRpZgpJbmRleDogV2Vi
S2l0L3dpbi9XZWJVUkxSZXNwb25zZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViVVJM
UmVzcG9uc2UuaAkocmV2aXNpb24gMzEwOTIpCisrKyBXZWJLaXQvd2luL1dlYlVSTFJlc3BvbnNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDEyICs5MSwxOCBAQCBwdWJsaWM6CiAKIHByb3RlY3Rl
ZDoKICAgICBIUkVTVUxUIHN1Z2dlc3RlZEZpbGVFeHRlbnNpb24oQlNUUiogcmVzdWx0KTsKKwor
I2lmIFVTRShDRk5FVFdPUkspCiAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGNlcnRpZmljYXRlRGljdGlv
bmFyeSgpIGNvbnN0OworI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICBVTE9ORyBtX3JlZkNvdW50
OwogICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKworI2lmIFVTRShD
Rk5FVFdPUkspCiAgICAgbXV0YWJsZSBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBtX1NTTENl
cnRpZmljYXRlSW5mbzsgICAgLy8gdGhpcyBlbnN1cmVzIGNlcnRpZmljYXRlIGNvbnRleHRzIGFy
ZSB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoaXMgV2ViVVJMUmVzcG9uc2UuCisjZW5kaWYK
IH07CiAKICNlbmRpZgpJbmRleDogV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiAzMTA5MikKKysrIFdlYktpdC93aW4v
V2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2MiwxMSArOTYyLDE1IEBAIGJvb2wgV2Vi
Vmlldzo6Y2FuSGFuZGxlUmVxdWVzdChjb25zdCBXZWIKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UoU3RyaW5nKHJlcXVlc3QudXJsKCkucHJvdG9jb2woKSksICJhYm91dCIpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAorI2lmIFVTRShDRk5FVFdPUkspCiAgICAgaWYgKENGVVJMUHJvdG9jb2xD
YW5IYW5kbGVSZXF1ZXN0KHJlcXVlc3QuY2ZVUkxSZXF1ZXN0KCkpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIC8vIEZJWE1FOiBNYWMgV2ViS2l0IGNhbGxzIF9yZXByZXNlbnRhdGlvbkV4
aXN0c0ZvclVSTFNjaGVtZSBoZXJlCiAgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICByZXR1
cm4gdHJ1ZTsKKyNlbmRpZgogfQogCiBQYWdlKiBXZWJWaWV3OjpwYWdlKCkK
</data>
<flag name="review"
          id="8680"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19845</attachid>
            <date>2008-03-17 12:52:25 -0700</date>
            <delta_ts>2008-03-18 10:34:47 -0700</delta_ts>
            <desc>Revision 3 based on aroben&apos;s further comments.</desc>
            <filename>curl-patch</filename>
            <type>text/plain</type>
            <size>8793</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMTA5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDgtMDMtMTMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UHJvdmlkZSBzb21lIHN0dWIgaW1wbGVtZW50YXRpb25zIGZvciB0aGluZ3MgdGhhdCBXZWJLaXQK
KyAgICAgICAgdXNlcyBmb3IgcGVyZm9ybWluZyBhdXRoZW50aWNhdGlvbi9jaGFsbGVuZ2UgYWN0
aXZpdGllcy4gIFRoaXMKKyAgICAgICAgaXMgaW4gc3VwcG9ydCBvZiBodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzgzNworCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1Qg
Q0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNh
dGlvbkNoYWxsZW5nZS5oOgorICAgICAgICAoV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVu
Z2U6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlOjpzb3VyY2VIYW5kbGUpOgorCiAyMDA4LTAzLTE2ICBNYWNpZWogU3Rh
Y2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgTm90IHJldmlld2VkLCBqdXN0IGZp
eGluZyBhbiBpbmNvbXBsZXRlIGNvbW1lbnQgZnJvbSB0aGUgbGFzdCBjb21taXQuCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24gMzEwOTIp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTE4LDggKzExOCwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENGUnVuTG9vcFJl
ZiBsb2FkZXJSdW5Mb29wKCk7CiAgICAgQ0ZVUkxDb25uZWN0aW9uUmVmIGNvbm5lY3Rpb24oKSBj
b25zdDsKICAgICBDRlVSTENvbm5lY3Rpb25SZWYgcmVsZWFzZUNvbm5lY3Rpb25Gb3JEb3dubG9h
ZCgpOworICAgIHN0YXRpYyB2b2lkIHNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKGNv
bnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB2b2lkIHNldENsaWVudENlcnRpZmljYXRlKGNvbnN0
IFN0cmluZyYgaG9zdCwgQ0ZEYXRhUmVmKTsKKyNlbmRpZgogCisjaWYgUExBVEZPUk0oV0lOKSAm
JiBVU0UoQ1VSTCkKICAgICBzdGF0aWMgdm9pZCBzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZp
Y2F0ZShjb25zdCBTdHJpbmcmKTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENV
UkwpICYmIFBMQVRGT1JNKENGKQogICAgIHN0YXRpYyB2b2lkIHNldENsaWVudENlcnRpZmljYXRl
KGNvbnN0IFN0cmluZyYgaG9zdCwgQ0ZEYXRhUmVmKTsKICNlbmRpZgogCkBAIC0xMzcsNyArMTQz
LDcgQEAgcHVibGljOgogICAgIGZyaWVuZCBMUkVTVUxUIF9fc3RkY2FsbCBSZXNvdXJjZUhhbmRs
ZVduZFByb2MoSFdORCwgdW5zaWduZWQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0pOwogI2VuZGlm
CiAKLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkKKyNp
ZiBQTEFURk9STShRVCkgfHwgVVNFKENVUkwpCiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCog
Z2V0SW50ZXJuYWwoKSB7IHJldHVybiBkLmdldCgpOyB9CiAjZW5kaWYKIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZS5oCShyZXZpc2lvbiAzMTA5MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDEw
IEBAIHB1YmxpYzoKICAgICAgICAgOiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UocHJvdGVj
dGlvblNwYWNlLCBwcm9wb3NlZENyZWRlbnRpYWwsIHByZXZpb3VzRmFpbHVyZUNvdW50LCByZXNw
b25zZSwgZXJyb3IpCiAgICAgewogICAgIH0KKworICAgIFJlc291cmNlSGFuZGxlKiBzb3VyY2VI
YW5kbGUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUhhbmRsZS5nZXQoKTsgfQorCisgICAgUmVm
UHRyPFJlc291cmNlSGFuZGxlPiBtX3NvdXJjZUhhbmRsZTsgICAgCiB9OwogCiB9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3Vy
bC5jcHAJKHJldmlzaW9uIDMxMDkyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
UmVzb3VyY2VIYW5kbGVDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsMTMgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgSGFzaFNldDxTdHJpbmc+JiBhbGxvd3NB
bnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoKQoreworICAgIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4g
aG9zdHM7CisKKyAgICByZXR1cm4gaG9zdHM7Cit9CisKIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6
On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKIHsKICAgICBmcmVlKG1fdXJsKTsKQEAgLTcyLDYg
Kzc5LDI2IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN1cHBvcnRzQnVmZmVyZWREYXQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldEhvc3RBbGxvd3NBbnlI
VFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCkKK3sKKyAgICBhbGxvd3NBbnlIVFRQ
U0NlcnRpZmljYXRlSG9zdHMoKS5hZGQoaG9zdC5sb3dlcigpKTsKK30KKworI2lmIFBMQVRGT1JN
KFdJTikgJiYgUExBVEZPUk0oQ0YpCisvLyBGSVhNRTogIFRoZSBDRkRhdGFSZWYgd2lsbCBuZWVk
IHRvIGJlIHNvbWV0aGluZyBlbHNlIHdoZW4KKy8vIGJ1aWxkaW5nIHdpdGhvdXQgCitzdGF0aWMg
SGFzaE1hcDxTdHJpbmcsIFJldGFpblB0cjxDRkRhdGFSZWY+ID4mIGNsaWVudENlcnRzKCkKK3sK
KyAgICBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFJldGFpblB0cjxDRkRhdGFSZWY+ID4gY2VydHM7
CisgICAgcmV0dXJuIGNlcnRzOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnRD
ZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QsIENGRGF0YVJlZiBjZXJ0KQoreworICAgIGNs
aWVudENlcnRzKCkuc2V0KGhvc3QubG93ZXIoKSwgY2VydCk7Cit9CisjZW5kaWYKKwogdm9pZCBS
ZXNvdXJjZUhhbmRsZTo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKIHsKICAgICBkLT5t
X2RlZmVyc0xvYWRpbmcgPSBkZWZlcnM7CkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gMzEwOTIpCisrKyBXZWJL
aXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDA4LTAz
LTEzICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AZ21haWwuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGUgc29tZSBzdHViIGltcGxl
bWVudGF0aW9ucyBmb3IgdGhpbmdzIHRoYXQgV2ViS2l0CisgICAgICAgIHVzZXMgZm9yIHBlcmZv
cm1pbmcgYXV0aGVudGljYXRpb24vY2hhbGxlbmdlIGFjdGl2aXRpZXMuICBUaGlzCisgICAgICAg
IGlzIGluIHN1cHBvcnQgb2YgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc4MzcKKworICAgICAgICAqIFdlYkRhdGFTb3VyY2UuY3BwOgorICAgICAgICAqIFdlYkVycm9y
LmNwcDogIENvbmRpdGlvbmFsaXplIENGTmV0d29yay1zcGVjaWZpYyBsb2dpYworICAgICAgICAq
IFdlYlVSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmNwcDogIENvbmRpdGlvbmFsaXplIGNvbnN0
cnVjdG9yCisgICAgICAgICAgZm9yIGF1dGhlbnRpY2F0aW9uL2NoYWxsZW5nZSBtZW1iZXIuCisg
ICAgICAgIChXZWJVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6aW5pdFdpdGhBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSk6CisgICAgICAgICogV2ViVVJMUmVzcG9uc2UuY3BwOiAgUmVtb3ZlIENG
TmV0d29yay1zcGVjaWZpYyBsb2dpYy4KKyAgICAgICAgKiBXZWJVUkxSZXNwb25zZS5oOiBDb25k
aXRpb25hbGl6ZSBDRk5ldHdvcmstc3BlY2lmaWMgbWVtYmVyLgorICAgICAgICAqIFdlYlZpZXcu
Y3BwOiAgQ29uZGl0aW9uYWxpemUgQ0ZOZXR3b3JrLXNwZWNpZmljIG5ldHdvcmsgcHJvdG9jb2wg
dGVzdC4KKyAgICAgICAgKFdlYlZpZXc6OmNhbkhhbmRsZVJlcXVlc3QpOgorCiAyMDA4LTAzLTE0
ICBTdGV2ZSBGYWxrZW5idXJnICA8c2ZhbGtlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUEdPIGJ1
aWxkIGZpeGVzLgpJbmRleDogV2ViS2l0L3dpbi9XZWJFcnJvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L3dpbi9XZWJFcnJvci5jcHAJKHJldmlzaW9uIDMxMDkyKQorKysgV2ViS2l0L3dpbi9X
ZWJFcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwxNCBAQAogI2luY2x1ZGUg
IldlYkVycm9yLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCiAKLSNpbmNsdWRlIDxXZWJLaXRTeXN0
ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAjcHJhZ21hIHdhcm5pbmcocHVz
aCwgMCkKICNpbmNsdWRlIDxXZWJDb3JlL0JTdHJpbmcuaD4KICNwcmFnbWEgd2FybmluZyhwb3Ap
CiAKKyNpZiBVU0UoQ0ZORVRXT1JLKQorI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9X
ZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAogLy8gV2ViRXJyb3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMTMsMTAgKzIxNiwxMiBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkVycm9yOjpzc2xQCiAgICAgaWYgKCFtX2NmRXJyb3JV
c2VySW5mb0RpY3QpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKKyNpZiBVU0UoQ0ZORVRXT1JL
KQogICAgIHZvaWQqIGRhdGEgPSB3a0dldFNTTFBlZXJDZXJ0aWZpY2F0ZURhdGEobV9jZkVycm9y
VXNlckluZm9EaWN0LmdldCgpKTsKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBFX0ZB
SUw7CiAgICAgKnJlc3VsdCA9IChPTEVfSEFORExFKShVTE9ORzY0KWRhdGE7CisjZW5kaWYKICAg
ICByZXR1cm4gKnJlc3VsdCA/IFNfT0sgOiBFX0ZBSUw7CiB9CiAKSW5kZXg6IFdlYktpdC93aW4v
V2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93
aW4vV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuY3BwCShyZXZpc2lvbiAzMTA5MikKKysr
IFdlYktpdC93aW4vV2ViVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjgsOSArMTY4LDE0IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVVJM
QXV0aGVudGkKICAgICBpZiAoIXdlYlNlbmRlcikKICAgICAgICAgcmV0dXJuIEVfTk9JTlRFUkZB
Q0U7CiAKKyNpZiBVU0UoQ0ZORVRXT1JLKQogICAgIG1fYXV0aGVudGljYXRpb25DaGFsbGVuZ2Ug
PSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSh3ZWJDaGFsbGVuZ2UtPmF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKCkuY2ZVUkxBdXRoQ2hhbGxlbmdlUmVmKCksIHdlYlNlbmRlci0+cmVzb3VyY2VIYW5k
bGUoKSk7CiAKICAgICByZXR1cm4gU19PSzsKKyNlbHNlCisKKyAgICByZXR1cm4gRV9GQUlMOwor
I2VuZGlmCiB9CiAKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVVJMQXV0aGVudGljYXRp
b25DaGFsbGVuZ2U6OmVycm9yKApJbmRleDogV2ViS2l0L3dpbi9XZWJVUkxSZXNwb25zZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJVUkxSZXNwb25zZS5jcHAJKHJldmlzaW9uIDMx
MDkyKQorKysgV2ViS2l0L3dpbi9XZWJVUkxSZXNwb25zZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5Nyw2ICszOTcsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlVSTFJlc3BvbnNl
CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAgICAgKnJlc3Vs
dCA9IDA7CisKKyNpZiBVU0UoQ0ZORVRXT1JLKQogICAgIENGRGljdGlvbmFyeVJlZiBkaWN0ID0g
Y2VydGlmaWNhdGVEaWN0aW9uYXJ5KCk7CiAgICAgaWYgKCFkaWN0KQogICAgICAgICByZXR1cm4g
RV9GQUlMOwpAQCAtNDA0LDYgKzQwNiw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2Vi
VVJMUmVzcG9uc2UKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAgICAg
KnJlc3VsdCA9IChPTEVfSEFORExFKShVTE9ORzY0KWRhdGE7CisjZW5kaWYKKwogICAgIHJldHVy
biAqcmVzdWx0ID8gU19PSyA6IEVfRkFJTDsKIH0KIApAQCAtNDYzLDYgKzQ2Nyw3IEBAIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIFdlYlVSTFJlc3BvbnNlOjoKICAgICByZXR1cm4gbV9yZXNwb25z
ZTsKIH0KIAorI2lmIFVTRShDRk5FVFdPUkspCiBDRkRpY3Rpb25hcnlSZWYgV2ViVVJMUmVzcG9u
c2U6OmNlcnRpZmljYXRlRGljdGlvbmFyeSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fU1NMQ2VydGlm
aWNhdGVJbmZvKQpAQCAtNDc0LDMgKzQ3OSw0IEBAIENGRGljdGlvbmFyeVJlZiBXZWJVUkxSZXNw
b25zZTo6Y2VydGlmaWMKICAgICBtX1NTTENlcnRpZmljYXRlSW5mbyA9IHdrR2V0U1NMQ2VydGlm
aWNhdGVJbmZvKGNmUmVzcG9uc2UpOwogICAgIHJldHVybiBtX1NTTENlcnRpZmljYXRlSW5mby5n
ZXQoKTsKIH0KKyNlbmRpZgpJbmRleDogV2ViS2l0L3dpbi9XZWJVUkxSZXNwb25zZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC93aW4vV2ViVVJMUmVzcG9uc2UuaAkocmV2aXNpb24gMzEwOTIpCisr
KyBXZWJLaXQvd2luL1dlYlVSTFJlc3BvbnNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDEyICs5
MSwxOCBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBIUkVTVUxUIHN1Z2dlc3RlZEZpbGVF
eHRlbnNpb24oQlNUUiogcmVzdWx0KTsKKworI2lmIFVTRShDRk5FVFdPUkspCiAgICAgQ0ZEaWN0
aW9uYXJ5UmVmIGNlcnRpZmljYXRlRGljdGlvbmFyeSgpIGNvbnN0OworI2VuZGlmCiAKIHByb3Rl
Y3RlZDoKICAgICBVTE9ORyBtX3JlZkNvdW50OwogICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UgbV9yZXNwb25zZTsKKworI2lmIFVTRShDRk5FVFdPUkspCiAgICAgbXV0YWJsZSBSZXRhaW5Q
dHI8Q0ZEaWN0aW9uYXJ5UmVmPiBtX1NTTENlcnRpZmljYXRlSW5mbzsgICAgLy8gdGhpcyBlbnN1
cmVzIGNlcnRpZmljYXRlIGNvbnRleHRzIGFyZSB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRo
aXMgV2ViVVJMUmVzcG9uc2UuCisjZW5kaWYKIH07CiAKICNlbmRpZgpJbmRleDogV2ViS2l0L3dp
bi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZp
c2lvbiAzMTA5MikKKysrIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk2MiwxMSArOTYyLDE1IEBAIGJvb2wgV2ViVmlldzo6Y2FuSGFuZGxlUmVxdWVzdChjb25zdCBX
ZWIKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoU3RyaW5nKHJlcXVlc3QudXJsKCkucHJvdG9j
b2woKSksICJhYm91dCIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorI2lmIFVTRShDRk5FVFdP
UkspCiAgICAgaWYgKENGVVJMUHJvdG9jb2xDYW5IYW5kbGVSZXF1ZXN0KHJlcXVlc3QuY2ZVUkxS
ZXF1ZXN0KCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIEZJWE1FOiBNYWMgV2Vi
S2l0IGNhbGxzIF9yZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVSTFNjaGVtZSBoZXJlCiAgICAgcmV0
dXJuIGZhbHNlOworI2Vsc2UKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgogfQogCiBQYWdlKiBX
ZWJWaWV3OjpwYWdlKCkK
</data>
<flag name="review"
          id="8682"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>