<?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>61318</bug_id>
          
          <creation_ts>2011-05-23 16:09:08 -0700</creation_ts>
          <short_desc>Make CachedResource take a ResourceRequest instead of just a url string.</short_desc>
          <delta_ts>2011-05-24 17:24:58 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>61015</blocked>
    
    <blocked>61223</blocked>
    
    <blocked>61225</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kbr</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>408441</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-05-23 16:09:08 -0700</bug_when>
    <thetext>This is necessary if we&apos;re going to cache anything more complex than subresources (e.g., resources that can be POST, requests with CORS headers, etc).  This patch will hopefully put the necessary infrastructure in place for these sorts of requests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408444</commentid>
    <comment_count>1</comment_count>
      <attachid>94513</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-05-23 16:10:07 -0700</bug_when>
    <thetext>Created attachment 94513
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408458</commentid>
    <comment_count>2</comment_count>
      <attachid>94513</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-23 16:36:47 -0700</bug_when>
    <thetext>Comment on attachment 94513
patch

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

I really like this direction.  Some minor questions / comments below.

&gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:135
&gt; -            KURL completeURL = m_document-&gt;completeURL(url);
&gt; +            KURL completeURL = m_document-&gt;completeURL(request.url());

Presumably request.url() is already complete, right?

&gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:341
&gt; +    if (request.url() != url)
&gt; +        request.setURL(url);

This basically has the effect of stripping the fragment identifier, right?

&gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:-373
&gt; -    CachedResource* newResource = createResource(resource-&gt;type(), KURL(ParsedURLString, url), resource-&gt;encoding());

Yay.  Every time you remove ParsedURLString, good things happen.

&gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:683
&gt; -    CachedResource* resource = requestResource(type, url, encoding, ResourceLoadPriorityUnresolved, true);
&gt; +    ResourceRequest request(m_document-&gt;completeURL(url));
&gt; +    CachedResource* resource = requestResource(type, request, encoding, ResourceLoadPriorityUnresolved, true);

Here the caller isn&apos;t supposed to provide a ResourceRequest?

&gt; Source/WebCore/loader/cache/CachedImage.cpp:228
&gt; -    m_shouldPaintBrokenImage = frame-&gt;loader()-&gt;client()-&gt;shouldPaintBrokenImage(KURL(ParsedURLString, m_url));
&gt; +    m_shouldPaintBrokenImage = frame-&gt;loader()-&gt;client()-&gt;shouldPaintBrokenImage(KURL(ParsedURLString, m_resourceRequest.url()));

Can&apos;t we get rid of the ParsedURLString here?  m_resourceRequest.url() should already be a KURL, right?

&gt; Source/WebCore/loader/cache/CachedResourceLoader.h:45
&gt; +class CachedRawResource;

CachedRawResource &lt;-- That&apos;s from the future, right?

&gt; Source/WebCore/loader/cache/CachedResource.cpp:268
&gt; +static bool reuseRequest(const ResourceRequest&amp; request)

reuseRequest =&gt; canReuseRequest ?

&gt; Source/WebCore/loader/cache/CachedResource.cpp:281
&gt; +// FIXME: This doesn&apos;t handle Access-Control headers yet, but when it does, it will need the
&gt; +// currently unused Document* to get a SecurityOrigin.
&gt; +bool CachedResource::allowReuseOfRequest(Document*, const ResourceRequest&amp; newRequest) const

I don&apos;t fully understand what this function does.  It seems like these cases can&apos;t occur yet, right?

&gt; Source/WebCore/loader/cache/CachedResource.h:99
&gt; +    const String&amp; url() const { return m_resourceRequest.url();}

Oh, I see.  This returns a string.  Can we return the underlying KURL from m_resourceRequest instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408467</commentid>
    <comment_count>3</comment_count>
      <attachid>94513</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-23 16:48:03 -0700</bug_when>
    <thetext>Comment on attachment 94513
patch

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

&gt; Source/WebCore/loader/cache/CachedResource.h:51
&gt; +class ResourceRequest;
&gt; +class ResourceResponse;

You are adding both a forward declaration and an include of ResourceRequest.h. And there has already been an include of ResourceResponse.

&gt; Source/WebCore/loader/cache/CachedResource.h:85
&gt; -    CachedResource(const String&amp; url, Type);
&gt; +    CachedResource(ResourceRequest, Type);

Does it need to be copied?

&gt; Source/WebCore/loader/ImageLoader.cpp:172
&gt; +            ResourceRequest request(document-&gt;completeURL(sourceURI(attr)));
&gt; +            newImage = document-&gt;cachedResourceLoader()-&gt;requestImage(request);

Here and elsewhere, we may be constructing ResourceRequest from invalid URLs. I&apos;m not sure if it&apos;s so great - perhaps we should have an assertion in ResourceRequest constructor.

I don&apos;t think if we have a clear design of who checks for invalid URLs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408488</commentid>
    <comment_count>4</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-05-23 17:09:59 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 94513 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94513&amp;action=review
&gt; &gt; Source/WebCore/loader/cache/CachedResource.cpp:268
&gt; &gt; +static bool reuseRequest(const ResourceRequest&amp; request)
&gt; 
&gt; reuseRequest =&gt; canReuseRequest ?
&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedResource.cpp:281
&gt; &gt; +// FIXME: This doesn&apos;t handle Access-Control headers yet, but when it does, it will need the
&gt; &gt; +// currently unused Document* to get a SecurityOrigin.
&gt; &gt; +bool CachedResource::allowReuseOfRequest(Document*, const ResourceRequest&amp; newRequest) const
&gt; 
&gt; I don&apos;t fully understand what this function does.  It seems like these cases can&apos;t occur yet, right?

Yeah, I&apos;m going to remove these two functions from this version, since they won&apos;t do anything meaningful yet.

(In reply to comment #3)
&gt; (From update of attachment 94513 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94513&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedResource.h:85
&gt; &gt; -    CachedResource(const String&amp; url, Type);
&gt; &gt; +    CachedResource(ResourceRequest, Type);
&gt; 
&gt; Does it need to be copied?

CachedResource needs to make a copy internally, but that&apos;s a red herring.

I had left this as a copy because there&apos;s one subclass constructor CachedImage(Image*) that doesn&apos;t take a ResourceRequest and I didn&apos;t see an obvious way to get it to play nicely with a ResourceRequest&amp; (probably a failure of my C++ knowledge).  Alternatively, I can just make this constructor take a dummy ResourceRequest.

&gt; 
&gt; &gt; Source/WebCore/loader/ImageLoader.cpp:172
&gt; &gt; +            ResourceRequest request(document-&gt;completeURL(sourceURI(attr)));
&gt; &gt; +            newImage = document-&gt;cachedResourceLoader()-&gt;requestImage(request);
&gt; 
&gt; Here and elsewhere, we may be constructing ResourceRequest from invalid URLs. I&apos;m not sure if it&apos;s so great - perhaps we should have an assertion in ResourceRequest constructor.
&gt; 
&gt; I don&apos;t think if we have a clear design of who checks for invalid URLs.

When I passed an incomplete URL to ResourceRequest&apos;s constructor, it ASSERTed in KURL due to the url being invalid.  Is that sufficient?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408497</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-23 17:21:25 -0700</bug_when>
    <thetext>&gt; I didn&apos;t see an obvious way to get it to play nicely with a ResourceRequest&amp;

You can&apos;t bind a temporary to a non-const reference, but a const reference should be OK.

&gt; When I passed an incomplete URL to ResourceRequest&apos;s constructor, it ASSERTed in KURL due to the url being invalid.  Is that sufficient?

What was the assertion? There is none in KURL::string(), and relying on some other method being called and asserting could be weak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408502</commentid>
    <comment_count>6</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-05-23 17:28:56 -0700</bug_when>
    <thetext>
&gt; &gt; When I passed an incomplete URL to ResourceRequest&apos;s constructor, it ASSERTed in KURL due to the url being invalid.  Is that sufficient?

Yeah, it should be.  Doh.

&gt; 
&gt; What was the assertion? There is none in KURL::string(), and relying on some other method being called and asserting could be weak.

The interesting bit of the stack:

ASSERTION FAILED: !url.length() || isSchemeFirstChar(url[0])
/Volumes/MacintoshHD2/src/webkit3/Source/WebCore/platform/KURL.cpp(292) : void WebCore::checkEncodedString(const WTF::String&amp;)
1   WebCore::checkEncodedString(WTF::String const&amp;)
2   WebCore::KURL::parse(WTF::String const&amp;)
3   WebCore::KURL::KURL(WebCore::ParsedURLStringTag, WTF::String const&amp;)
4   WebCore::ResourceRequest::ResourceRequest(WTF::String const&amp;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408510</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-23 17:36:55 -0700</bug_when>
    <thetext>&gt; 2   WebCore::KURL::parse(WTF::String const&amp;)
&gt; 3   WebCore::KURL::KURL(WebCore::ParsedURLStringTag, WTF::String const&amp;)
&gt; 4   WebCore::ResourceRequest::ResourceRequest(WTF::String const&amp;)

So, a string version of the constructor is used here, meaning that the KURL is converted to string and then back to KURL. This is certainly not how it should be! Relying on this bug for diagnostics is not right.

In the code that I quoted originally, we directly pass a KURL from completeURL. Hopefully, we don&apos;t create another ResourceRequest from scratch with a stringified URL later?

&gt; &gt; +            ResourceRequest request(document-&gt;completeURL(sourceURI(attr)));
&gt; &gt; +            newImage = document-&gt;cachedResourceLoader()-&gt;requestImage(request);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408919</commentid>
    <comment_count>8</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-05-24 09:30:03 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; 2   WebCore::KURL::parse(WTF::String const&amp;)
&gt; &gt; 3   WebCore::KURL::KURL(WebCore::ParsedURLStringTag, WTF::String const&amp;)
&gt; &gt; 4   WebCore::ResourceRequest::ResourceRequest(WTF::String const&amp;)
&gt; 
&gt; So, a string version of the constructor is used here, meaning that the KURL is converted to string and then back to KURL. This is certainly not how it should be! Relying on this bug for diagnostics is not right.

With a few extra lines this time, sorry for cutting the stack too soon:

ASSERTION FAILED: !url.length() || isSchemeFirstChar(url[0])
/Volumes/MacintoshHD2/src/webkit3/Source/WebCore/platform/KURL.cpp(292) : void WebCore::checkEncodedString(const WTF::String&amp;)
1   WebCore::checkEncodedString(WTF::String const&amp;)
2   WebCore::KURL::parse(WTF::String const&amp;)
3   WebCore::KURL::KURL(WebCore::ParsedURLStringTag, WTF::String const&amp;)
4   WebCore::ResourceRequest::ResourceRequest(WTF::String const&amp;)
5   WebCore::ScriptElement::requestScript(WTF::String const&amp;)
6   WebCore::ScriptElement::prepareScript(WTF::TextPosition&lt;WTF::OneBasedNumber&gt; const&amp;, WebCore::ScriptElement::LegacyTypeSupport)
7   WebCore::HTMLScriptRunner::runScript(WebCore::Element*, WTF::TextPosition&lt;WTF::OneBasedNumber&gt; const&amp;)
8   WebCore::HTMLScriptRunner::execute(WTF::PassRefPtr&lt;WebCore::Element&gt;, WTF::TextPosition&lt;WTF::OneBasedNumber&gt; const&amp;)

We don&apos;t appear to be doing a KURL-&gt;String-&gt;KURL conversion here, this is where we do the initial String-&gt;KURL conversion (but we get this stack with the completeURL() omitted).

&gt; 
&gt; In the code that I quoted originally, we directly pass a KURL from completeURL. Hopefully, we don&apos;t create another ResourceRequest from scratch with a stringified URL later?
&gt; 
&gt; &gt; &gt; +            ResourceRequest request(document-&gt;completeURL(sourceURI(attr)));
&gt; &gt; &gt; +            newImage = document-&gt;cachedResourceLoader()-&gt;requestImage(request);

We should just be copying ResourceRequests once we enter CachedResourceLoader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408928</commentid>
    <comment_count>9</comment_count>
      <attachid>94629</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-05-24 09:41:11 -0700</bug_when>
    <thetext>Created attachment 94629
patch #2

Ok, I think I&apos;ve addressed all comments.

Please let me know if I wasn&apos;t clear (or was obviously wrong) in my explanation of what we appear to be doing in the String-&gt;KURL-&gt;ResourceRequest(KURL&amp;) flow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408941</commentid>
    <comment_count>10</comment_count>
      <attachid>94629</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-05-24 09:59:36 -0700</bug_when>
    <thetext>Comment on attachment 94629
patch #2

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

&gt; Source/WebCore/svg/SVGFEImageElement.cpp:76
&gt; -    m_cachedImage = ownerDocument()-&gt;cachedResourceLoader()-&gt;requestImage(href());
&gt; +    ResourceRequest request(ownerDocument()-&gt;completeURL(href()));
&gt; +    m_cachedImage = ownerDocument()-&gt;cachedResourceLoader()-&gt;requestImage(request);

Was there some particular reason to change CachedResourceLoader::requestSomeConcreteType() methods take ResourceRequest too?  This complicates the call sites.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409129</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-24 12:44:40 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 94629 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94629&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/svg/SVGFEImageElement.cpp:76
&gt; &gt; -    m_cachedImage = ownerDocument()-&gt;cachedResourceLoader()-&gt;requestImage(href());
&gt; &gt; +    ResourceRequest request(ownerDocument()-&gt;completeURL(href()));
&gt; &gt; +    m_cachedImage = ownerDocument()-&gt;cachedResourceLoader()-&gt;requestImage(request);
&gt; 
&gt; Was there some particular reason to change CachedResourceLoader::requestSomeConcreteType() methods take ResourceRequest too?  This complicates the call sites.

We&apos;re going to use at least the image call sites for Bug 61015</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409134</commentid>
    <comment_count>12</comment_count>
      <attachid>94629</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-24 12:51:30 -0700</bug_when>
    <thetext>Comment on attachment 94629
patch #2

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

&gt; Source/WebCore/loader/cache/CachedResourceLoader.h:67
&gt; +    CachedImage* requestImage(ResourceRequest&amp;);
&gt; +    CachedCSSStyleSheet* requestCSSStyleSheet(ResourceRequest&amp;, const String&amp; charset, ResourceLoadPriority = ResourceLoadPriorityUnresolved);
&gt; +    CachedCSSStyleSheet* requestUserCSSStyleSheet(ResourceRequest&amp;, const String&amp; charset);
&gt; +    CachedScript* requestScript(ResourceRequest&amp;, const String&amp; charset);
&gt; +    CachedFont* requestFont(ResourceRequest&amp;);

It&apos;s slightly subtle that these take non-const references.  It&apos;s not super intuitive that issuing the resource request can change the request itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409135</commentid>
    <comment_count>13</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-05-24 12:52:17 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 94629 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94629&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/svg/SVGFEImageElement.cpp:76
&gt; &gt; -    m_cachedImage = ownerDocument()-&gt;cachedResourceLoader()-&gt;requestImage(href());
&gt; &gt; +    ResourceRequest request(ownerDocument()-&gt;completeURL(href()));
&gt; &gt; +    m_cachedImage = ownerDocument()-&gt;cachedResourceLoader()-&gt;requestImage(request);
&gt; 
&gt; Was there some particular reason to change CachedResourceLoader::requestSomeConcreteType() methods take ResourceRequest too?  This complicates the call sites.

The fundamental problem is that when calling CachedResourceLoader::requestSomeConcreteType(), the request will either fail or get sent to ResourceLoadScheduler before the function returns, so if a callsite needs to have custom headers, they need to be set before calling requestSomeConcreteType().

In addition to this implementation, we could have two version of each requestSomeConreteType(), one that takes a String and one that takes a ResourceRequest.  That seems sort of nasty.

I suppose we could also leave them as String until we need to switch any given one to ResourceRequest, but I don&apos;t like being inconsistent between types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409138</commentid>
    <comment_count>14</comment_count>
      <attachid>94629</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-24 12:53:05 -0700</bug_when>
    <thetext>Comment on attachment 94629
patch #2

I agree that this makes the call sites slightly more verbose, but that seems better than having some of functions use URLs and others use ResourceRequests.  We can either to the API conversion in this patch or the next patch, but doing it in this patch is probably best since this patch shouldn&apos;t have any behavior changes and the next patches all introduce new behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409142</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-24 13:11:56 -0700</bug_when>
    <thetext>I don&apos;t think that I&apos;ve taken my point across well enough. Let&apos;s look at the same code snippet that I quoted before:

&gt; +            ResourceRequest request(document-&gt;completeURL(sourceURI(attr)));
&gt; +            newImage = document-&gt;cachedResourceLoader()-&gt;requestImage(request);

What is going to assert if the URL is invalid? Even more importantly, what is going to happen at runtime if it is invalid? Will we be making client calls with an invalid URL, will we pipe it down to network stack, potentially even loading something if it has a different idea of invalid URL?

You said that you had an assertion failure, but that was some entirely different code path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409143</commentid>
    <comment_count>16</comment_count>
      <attachid>94629</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-24 13:13:13 -0700</bug_when>
    <thetext>Comment on attachment 94629
patch #2

Feel free to cq+ back if you think this should be landed as is - but I&apos;d like to take initiative away from robot hands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409168</commentid>
    <comment_count>17</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-05-24 13:35:08 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; I don&apos;t think that I&apos;ve taken my point across well enough. Let&apos;s look at the same code snippet that I quoted before:
&gt; 
&gt; &gt; +            ResourceRequest request(document-&gt;completeURL(sourceURI(attr)));
&gt; &gt; +            newImage = document-&gt;cachedResourceLoader()-&gt;requestImage(request);
&gt; 
&gt; What is going to assert if the URL is invalid? Even more importantly, what is going to happen at runtime if it is invalid? Will we be making client calls with an invalid URL, will we pipe it down to network stack, potentially even loading something if it has a different idea of invalid URL?
&gt; 
&gt; You said that you had an assertion failure, but that was some entirely different code path.

We should still be able to make use of the url validity check in CachedResourceLoadeer::requestResource()  (http://trac.webkit.org/browser/trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp#L320).  That check is now using the KURL from the ResourceRequest (with fragments removed).

So I think that even if we do end up with an invalid KURL on a ResourceRequest, we&apos;ll fail in CachedResourceLoader and exit before it goes to the network stack.

Did I understand this time?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409184</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-24 13:55:45 -0700</bug_when>
    <thetext>That makes sense.

Not all requests go through CachedResourceLoader::requestResource() though. I think that it would be better if we could assert that the URL is valid in ResourceRequest constructor, so that they wouldn&apos;t enter low level loader interface at all. There is never a reason to actually have an invalid URL in ResourceRequest, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409230</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-24 14:55:14 -0700</bug_when>
    <thetext>&gt; Not all requests go through CachedResourceLoader::requestResource() though. I think that it would be better if we could assert that the URL is valid in ResourceRequest constructor, so that they wouldn&apos;t enter low level loader interface at all. There is never a reason to actually have an invalid URL in ResourceRequest, right?

Alexey, if it&apos;s ok with you, I&apos;d like to land this patch to unblock the other three bugs.  I&apos;ll post a patch adding the ASSERT shortly thereafter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409255</commentid>
    <comment_count>20</comment_count>
      <attachid>94629</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-05-24 15:15:57 -0700</bug_when>
    <thetext>Comment on attachment 94629
patch #2

After discussing this on #webkit, it sounds like we probably have enough guarantees of the validity of the URL.  ResourceHandle&apos;s constructor guarantees we won&apos;t go to the network stack with an invalid url, and it was already possible to have a ResourceRequest with an invalid KURL via its 0-argument constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409333</commentid>
    <comment_count>21</comment_count>
      <attachid>94629</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-24 17:24:51 -0700</bug_when>
    <thetext>Comment on attachment 94629
patch #2

Clearing flags on attachment: 94629

Committed r87239: &lt;http://trac.webkit.org/changeset/87239&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409334</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-24 17:24:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94513</attachid>
            <date>2011-05-23 16:10:07 -0700</date>
            <delta_ts>2011-05-24 09:41:11 -0700</delta_ts>
            <desc>patch</desc>
            <filename>rr.txt</filename>
            <type>text/plain</type>
            <size>39958</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg3MDc1KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDUsNyArMjQ1LDggQEAKIAogICAgIEFTU0VSVCghbV9jYWNoZWRTY3JpcHQpOwogICAgIC8v
IEZJWE1FOiBJZiBzb3VyY2VVcmwgaXMgZW1wdHksIHdlIHNob3VsZCBkaXNwYXRjaEVycm9yRXZl
bnQoKS4KLSAgICBtX2NhY2hlZFNjcmlwdCA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVk
UmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChzb3VyY2VVcmwsIHNjcmlwdENoYXJzZXQo
KSk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QobV9lbGVtZW50LT5kb2N1bWVudCgpLT5j
b21wbGV0ZVVSTChzb3VyY2VVcmwpKTsKKyAgICBtX2NhY2hlZFNjcmlwdCA9IG1fZWxlbWVudC0+
ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChyZXF1ZXN0
LCBzY3JpcHRDaGFyc2V0KCkpOwogICAgIG1faXNFeHRlcm5hbFNjcmlwdCA9IHRydWU7CiAKICAg
ICBpZiAobV9jYWNoZWRTY3JpcHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2lu
Z0luc3RydWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vz
c2luZ0luc3RydWN0aW9uLmNwcAkocmV2aXNpb24gODcwNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDkgKzE2
MSwxMCBAQAogICAgICAgICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgIGRvY3Vt
ZW50KCktPmFkZFBlbmRpbmdTaGVldCgpOwogICAgICAgICAgICAgCisgICAgICAgICAgICBSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdChkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChocmVmKSk7CiAjaWYg
RU5BQkxFKFhTTFQpCiAgICAgICAgICAgICBpZiAobV9pc1hTTCkKLSAgICAgICAgICAgICAgICBt
X2NhY2hlZFNoZWV0ID0gZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVz
dFhTTFN0eWxlU2hlZXQodXJsKTsKKyAgICAgICAgICAgICAgICBtX2NhY2hlZFNoZWV0ID0gZG9j
dW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdFhTTFN0eWxlU2hlZXQocmVx
dWVzdCk7CiAgICAgICAgICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgICAgIHsKQEAgLTE3MSw3
ICsxNzIsNyBAQAogICAgICAgICAgICAgICAgIGlmIChjaGFyc2V0LmlzRW1wdHkoKSkKICAgICAg
ICAgICAgICAgICAgICAgY2hhcnNldCA9IGRvY3VtZW50KCktPmNoYXJzZXQoKTsKIAotICAgICAg
ICAgICAgICAgIG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRl
cigpLT5yZXF1ZXN0Q1NTU3R5bGVTaGVldCh1cmwsIGNoYXJzZXQpOworICAgICAgICAgICAgICAg
IG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1
ZXN0Q1NTU3R5bGVTaGVldChyZXF1ZXN0LCBjaGFyc2V0KTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChtX2NhY2hlZFNoZWV0KQogICAgICAgICAgICAgICAgIG1fY2FjaGVkU2hlZXQt
PmFkZENsaWVudCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3MTAzKQorKysgU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzMgQEAKKzIw
MTEtMDUtMjMgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgQ2FjaGVkUmVzb3Vy
Y2VzIHRvIHRha2UgYSBSZXNvdXJjZVJlcXVlc3QgaW5zdGVhZCBvZgorICAgICAgICBhIHVybCBp
biB0aGVpciBjb25zdHJ1Y3RvcnMgYW5kIHByb3ZpZGUgYSB2ZXJ5IG1pbmltYWwgc2V0IG9mCisg
ICAgICAgIGNhc2VzIGZvciBhdm9pZGluZyByZXVzaW5nIGEgQ2FjaGVkUmVzb3VyY2UuIFRoZSBS
ZXNvdXJjZVJlcXVlc3QKKyAgICAgICAgcGFydCBvZiB0aGlzIGNoYW5nZSByZXF1aXJlcyBwdXNo
aW5nIHJlc3BvbnNpYmlsaXR5CisgICAgICAgIGZvciBjYWxsaW5nIERvY3VtZW50Ojpjb21wbGV0
ZVVSTCgpIHRvIHRoZSBjYWxsZXIsIGluc3RlYWQgb2YKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VM
b2FkZXIsIHNpbmNlIFJlc291cmNlUmVxdWVzdCBBU1NFUlRzIGlmIGl0CisgICAgICAgIGlzIGNv
bnN0cnVjdGVkIHdpdGggYW4gaW52YWxpZCB1cmwuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMzE4CisKKyAgICAgICAgUmVmYWN0b3IsIG5vIG5l
dyB0ZXN0cy4KKworICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUpOgorICAgICAgICAqIGNz
cy9DU1NJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlVmFsdWU6OmNh
Y2hlZEltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTSW1wb3J0UnVsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NJbXBvcnRSdWxlOjppbnNlcnRlZEludG9QYXJlbnQpOgorICAgICAgICAqIGRv
bS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2lu
Z0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2hlZXQpOgorICAgICAgICAqIGRvbS9TY3JpcHRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnJlcXVlc3RTY3JpcHQp
OgorICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxMaW5rRWxlbWVudDo6cHJvY2Vzcyk6CisgICAgICAgICogbG9hZGVyL0ltYWdlTG9hZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCk6
CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkQ1NTU3R5bGVTaGVldDo6Q2FjaGVkQ1NTU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRDU1NTdHlsZVNoZWV0OjpkaWRBZGRDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkQ1NTU3R5bGVTaGVldDo6Y2hlY2tOb3RpZnkpOgorICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgICogbG9hZGVy
L2NhY2hlL0NhY2hlZEZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkRm9udDo6Q2Fj
aGVkRm9udCk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaDoKKyAgICAgICAg
KiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
SW1hZ2U6OkNhY2hlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpjaGVj
a1Nob3VsZFBhaW50QnJva2VuSW1hZ2UpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJ
bWFnZS5oOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6Q2FjaGVkUmVzb3VyY2UpOgorICAgICAgICAo
V2ViQ29yZTo6cmV1c2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
OjphbGxvd1JldXNlT2ZSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
OjpyZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmNhblVz
ZUNhY2hlVmFsaWRhdG9yKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2Uu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpyZXNvdXJjZVJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnVybCk6CisgICAgICAgICogbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlUmVxdWVz
dDo6bG9hZCk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRTY3JpcHQ6OkNhY2hlZFNjcmlwdCk6CisgICAgICAgICogbG9h
ZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5oOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRY
U0xTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFhTTFN0eWxlU2hlZXQ6
OkNhY2hlZFhTTFN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkWFNMU3R5bGVT
aGVldDo6ZGlkQWRkQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFhTTFN0eWxlU2hl
ZXQ6OmNoZWNrTm90aWZ5KToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVT
aGVldC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6cmVxdWVzdEltYWdlUmVzb3VyY2UpOgorICAgICAg
ICAqIHN2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Rm9udEZhY2VVcmlFbGVtZW50Ojpsb2FkRm9udCk6CisgICAgICAgICogeG1sL1hTTEltcG9ydFJ1
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0KToKKwog
MjAxMS0wNS0yMyAgTWF0dGhldyBEZWxhbmV5ICA8bWRlbGFuZXlAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gODcwNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw4IEBA
CiAgICAgaWYgKGhyZWZFbGVtZW50ICYmIGhyZWZFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBo
cmVmRWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jYWNoZWRJ
bWFnZSA9IG93bmVyRG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdElt
YWdlKGhyZWYoKSk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qob3duZXJEb2N1bWVudCgp
LT5jb21wbGV0ZVVSTChocmVmKCkpKTsKKyAgICBtX2NhY2hlZEltYWdlID0gb3duZXJEb2N1bWVu
dCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0SW1hZ2UocmVxdWVzdCk7CiAKICAg
ICBpZiAobV9jYWNoZWRJbWFnZSkKICAgICAgICAgbV9jYWNoZWRJbWFnZS0+YWRkQ2xpZW50KHRo
aXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5j
cHAJKHJldmlzaW9uIDg3MDc1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJp
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDggQEAKICAgICBTdHJpbmcg
aHJlZiA9IGdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7CiAgICAgaWYgKCFocmVm
LmlzTnVsbCgpKSB7ICAgICAgICAKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hl
ZFJlc291cmNlTG9hZGVyID0gZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKLSAg
ICAgICAgbV9jYWNoZWRGb250ID0gY2FjaGVkUmVzb3VyY2VMb2FkZXItPnJlcXVlc3RGb250KGhy
ZWYpOworICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChkb2N1bWVudCgpLT5jb21wbGV0
ZVVSTChocmVmKSk7CisgICAgICAgIG1fY2FjaGVkRm9udCA9IGNhY2hlZFJlc291cmNlTG9hZGVy
LT5yZXF1ZXN0Rm9udChyZXF1ZXN0KTsKICAgICAgICAgaWYgKG1fY2FjaGVkRm9udCkgewogICAg
ICAgICAgICAgbV9jYWNoZWRGb250LT5hZGRDbGllbnQodGhpcyk7CiAgICAgICAgICAgICBtX2Nh
Y2hlZEZvbnQtPmJlZ2luTG9hZElmTmVlZGVkKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHJldmlzaW9uIDg3MDc1KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjUsNyArMjY1LDggQEAKICAgICAgICAgfSBlbHNlIGlmIChtX3JlbEF0dHJpYnV0ZS5t
X2lzTGlua1ByZXJlbmRlcikKICAgICAgICAgICAgIHR5cGUgPSBDYWNoZWRSZXNvdXJjZTo6TGlu
a1ByZXJlbmRlcjsKIAotICAgICAgICBtX2NhY2hlZExpbmtSZXNvdXJjZSA9IGRvY3VtZW50KCkt
PmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnJlcXVlc3RMaW5rUmVzb3VyY2UodHlwZSwgbV91cmws
IHByaW9yaXR5KTsKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IGxpbmtSZXF1ZXN0KGRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKG1fdXJsKSk7CisgICAgICAgIG1fY2FjaGVkTGlua1Jlc291cmNlID0g
ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdExpbmtSZXNvdXJjZSh0
eXBlLCBsaW5rUmVxdWVzdCwgcHJpb3JpdHkpOwogICAgICAgICBpZiAobV9jYWNoZWRMaW5rUmVz
b3VyY2UpCiAgICAgICAgICAgICBtX2NhY2hlZExpbmtSZXNvdXJjZS0+YWRkQ2xpZW50KHRoaXMp
OwogICAgIH0KQEAgLTMwNiw3ICszMDcsOCBAQAogCiAgICAgICAgIC8vIExvYWQgc3R5bGVzaGVl
dHMgdGhhdCBhcmUgbm90IG5lZWRlZCBmb3IgdGhlIHJlbmRlcmluZyBpbW1lZGlhdGVseSB3aXRo
IGxvdyBwcmlvcml0eS4KICAgICAgICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkgPSBi
bG9ja2luZyA/IFJlc291cmNlTG9hZFByaW9yaXR5VW5yZXNvbHZlZCA6IFJlc291cmNlTG9hZFBy
aW9yaXR5VmVyeUxvdzsKLSAgICAgICAgbV9jYWNoZWRTaGVldCA9IGRvY3VtZW50KCktPmNhY2hl
ZFJlc291cmNlTG9hZGVyKCktPnJlcXVlc3RDU1NTdHlsZVNoZWV0KG1fdXJsLCBjaGFyc2V0LCBw
cmlvcml0eSk7CisgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KGRvY3VtZW50KCktPmNv
bXBsZXRlVVJMKG1fdXJsKSk7CisgICAgICAgIG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVudCgpLT5j
YWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0Q1NTU3R5bGVTaGVldChyZXF1ZXN0LCBjaGFy
c2V0LCBwcmlvcml0eSk7CiAgICAgICAgIAogICAgICAgICBpZiAobV9jYWNoZWRTaGVldCkKICAg
ICAgICAgICAgIG1fY2FjaGVkU2hlZXQtPmFkZENsaWVudCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCShyZXZpc2lvbiA4NzA3NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNyAr
MjQ1LDggQEAKICAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZG9jdW1lbnQgPyBt
X2RvY3VtZW50LT5mcmFtZSgpID8gbV9kb2N1bWVudC0+ZnJhbWUoKS0+c2V0dGluZ3MoKSA6IDAg
OiAwOwogICAgICAgICAgICAgYm9vbCBhbGxvd0Rvd25sb2FkaW5nID0gZm91bmRTVkdGb250IHx8
IChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+ZG93bmxvYWRhYmxlQmluYXJ5Rm9udHNFbmFibGVkKCkp
OwogICAgICAgICAgICAgaWYgKGFsbG93RG93bmxvYWRpbmcgJiYgaXRlbS0+aXNTdXBwb3J0ZWRG
b3JtYXQoKSAmJiBtX2RvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgQ2FjaGVkRm9udCogY2Fj
aGVkRm9udCA9IG1fZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnJlcXVlc3RGb250
KGl0ZW0tPnJlc291cmNlKCkpOworICAgICAgICAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1
ZXN0KG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGl0ZW0tPnJlc291cmNlKCkpKTsKKyAgICAgICAg
ICAgICAgICBDYWNoZWRGb250KiBjYWNoZWRGb250ID0gbV9kb2N1bWVudC0+Y2FjaGVkUmVzb3Vy
Y2VMb2FkZXIoKS0+cmVxdWVzdEZvbnQocmVxdWVzdCk7CiAgICAgICAgICAgICAgICAgaWYgKGNh
Y2hlZEZvbnQpIHsKICAgICAgICAgICAgICAgICAgICAgc291cmNlID0gbmV3IENTU0ZvbnRGYWNl
U291cmNlKGl0ZW0tPnJlc291cmNlKCksIGNhY2hlZEZvbnQpOwogI2lmIEVOQUJMRShTVkdfRk9O
VFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUuY3BwCShyZXZpc2lvbiA4NzA3
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKIAogI2luY2x1
ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
Ik1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUxvYWRlci5oIgpAQCAtNzEsNyArNzIsOCBAQAogICAgIGlmICghbV9hY2Nlc3Nl
ZEltYWdlKSB7CiAgICAgICAgIG1fYWNjZXNzZWRJbWFnZSA9IHRydWU7CiAKLSAgICAgICAgaWYg
KENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGxvYWRlci0+cmVxdWVzdEltYWdlKHVybCkpIHsK
KyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QobG9hZGVyLT5kb2N1bWVudCgpLT5jb21w
bGV0ZVVSTCh1cmwpKTsKKyAgICAgICAgaWYgKENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGxv
YWRlci0+cmVxdWVzdEltYWdlKHJlcXVlc3QpKSB7CiAgICAgICAgICAgICBjYWNoZWRJbWFnZS0+
YWRkQ2xpZW50KHRoaXMpOwogICAgICAgICAgICAgbV9pbWFnZSA9IFN0eWxlQ2FjaGVkSW1hZ2U6
OmNyZWF0ZShjYWNoZWRJbWFnZSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NJbXBvcnRSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
SW1wb3J0UnVsZS5jcHAJKHJldmlzaW9uIDg3MDc1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ltcG9ydFJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTAgKzEzNCwxMSBAQAogICAg
ICAgICByb290ID0gY3VycjsKICAgICB9CiAKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChw
YXJlbnRTaGVldC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoYWJzSHJlZikpOwogICAgIGlmIChw
YXJlbnRTaGVldC0+aXNVc2VyU3R5bGVTaGVldCgpKQotICAgICAgICBtX2NhY2hlZFNoZWV0ID0g
Y2FjaGVkUmVzb3VyY2VMb2FkZXItPnJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldChhYnNIcmVmLCBw
YXJlbnRTaGVldC0+Y2hhcnNldCgpKTsKKyAgICAgICAgbV9jYWNoZWRTaGVldCA9IGNhY2hlZFJl
c291cmNlTG9hZGVyLT5yZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQocmVxdWVzdCwgcGFyZW50U2hl
ZXQtPmNoYXJzZXQoKSk7CiAgICAgZWxzZQotICAgICAgICBtX2NhY2hlZFNoZWV0ID0gY2FjaGVk
UmVzb3VyY2VMb2FkZXItPnJlcXVlc3RDU1NTdHlsZVNoZWV0KGFic0hyZWYsIHBhcmVudFNoZWV0
LT5jaGFyc2V0KCkpOworICAgICAgICBtX2NhY2hlZFNoZWV0ID0gY2FjaGVkUmVzb3VyY2VMb2Fk
ZXItPnJlcXVlc3RDU1NTdHlsZVNoZWV0KHJlcXVlc3QsIHBhcmVudFNoZWV0LT5jaGFyc2V0KCkp
OwogICAgIGlmIChtX2NhY2hlZFNoZWV0KSB7CiAgICAgICAgIC8vIGlmIHRoZSBpbXBvcnQgcnVs
ZSBpcyBpc3N1ZWQgZHluYW1pY2FsbHksIHRoZSBzaGVldCBtYXkgYmUKICAgICAgICAgLy8gcmVt
b3ZlZCBmcm9tIHRoZSBwZW5kaW5nIHNoZWV0IGNvdW50LCBzbyBsZXQgdGhlIGRvYyBrbm93Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuY3BwCShyZXZpc2lvbiA4NzA3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkWFNMU3R5bGVTaGVldC5oIgogI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJYU0xTdHlsZVNoZWV0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk4LDcgKzk5
LDggQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgbV9jYWNoZWRTaGVl
dCA9IGNhY2hlZFJlc291cmNlTG9hZGVyLT5yZXF1ZXN0WFNMU3R5bGVTaGVldChhYnNIcmVmKTsK
KyAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChjYWNoZWRSZXNvdXJjZUxvYWRlci0+ZG9jdW1l
bnQoKS0+Y29tcGxldGVVUkwoYWJzSHJlZikpOworICAgIG1fY2FjaGVkU2hlZXQgPSBjYWNoZWRS
ZXNvdXJjZUxvYWRlci0+cmVxdWVzdFhTTFN0eWxlU2hlZXQocmVxdWVzdCk7CiAgICAgCiAgICAg
aWYgKG1fY2FjaGVkU2hlZXQpIHsKICAgICAgICAgbV9jYWNoZWRTaGVldC0+YWRkQ2xpZW50KHRo
aXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcAko
cmV2aXNpb24gODcwNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9u
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDggKzU2LDggQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1DYWNoZWRGb250OjpDYWNoZWRGb250KGNvbnN0IFN0cmluZyAmdXJsKQotICAgIDog
Q2FjaGVkUmVzb3VyY2UodXJsLCBGb250UmVzb3VyY2UpCitDYWNoZWRGb250OjpDYWNoZWRGb250
KFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQorICAgIDogQ2FjaGVkUmVzb3VyY2Uo
cmVzb3VyY2VSZXF1ZXN0LCBGb250UmVzb3VyY2UpCiAgICAgLCBtX2ZvbnREYXRhKDApCiAgICAg
LCBtX2xvYWRJbml0aWF0ZWQoZmFsc2UpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmgJKHJldmlzaW9uIDg3MDc1KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogCiAgICAgY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVl
dCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7CiAgICAgcHVibGljOgotICAgICAgICBDYWNoZWRD
U1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwor
ICAgICAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmlu
ZyYgY2hhcnNldCk7CiAgICAgICAgIHZpcnR1YWwgfkNhY2hlZENTU1N0eWxlU2hlZXQoKTsKIAog
ICAgICAgICBjb25zdCBTdHJpbmcgc2hlZXRUZXh0KGJvb2wgZW5mb3JjZU1JTUVUeXBlID0gdHJ1
ZSwgYm9vbCogaGFzVmFsaWRNSU1FVHlwZSA9IDApIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuaAkocmV2aXNpb24gODcwNzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAKIAogICAgIGNsYXNzIENhY2hlZFNjcmlwdCA6IHB1YmxpYyBDYWNoZWRS
ZXNvdXJjZSB7CiAgICAgcHVibGljOgotICAgICAgICBDYWNoZWRTY3JpcHQoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7CisgICAgICAgIENhY2hlZFNjcmlwdChSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwogICAgICAgICB2aXJ0dWFsIH5D
YWNoZWRTY3JpcHQoKTsKIAogICAgICAgICBjb25zdCBTdHJpbmcmIHNjcmlwdCgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oCShyZXZpc2lvbiA4NzA3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogY2xhc3MgQ2FjaGVkRm9udCA6IHB1YmxpYyBDYWNoZWRS
ZXNvdXJjZSB7CiBwdWJsaWM6Ci0gICAgQ2FjaGVkRm9udChjb25zdCBTdHJpbmcmIHVybCk7Cisg
ICAgQ2FjaGVkRm9udChSZXNvdXJjZVJlcXVlc3QmKTsKICAgICB2aXJ0dWFsIH5DYWNoZWRGb250
KCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNh
Y2hlZFJlc291cmNlTG9hZGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gODcwNzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSwyOCArNTUsMjggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1z
dGF0aWMgQ2FjaGVkUmVzb3VyY2UqIGNyZWF0ZVJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBl
IHR5cGUsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQorc3RhdGljIENh
Y2hlZFJlc291cmNlKiBjcmVhdGVSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKIHsKICAgICBz
d2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgot
ICAgICAgICByZXR1cm4gbmV3IENhY2hlZEltYWdlKHVybC5zdHJpbmcoKSk7CisgICAgICAgIHJl
dHVybiBuZXcgQ2FjaGVkSW1hZ2UocmVxdWVzdCk7CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
Q1NTU3R5bGVTaGVldDoKLSAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRDU1NTdHlsZVNoZWV0KHVy
bC5zdHJpbmcoKSwgY2hhcnNldCk7CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkQ1NTU3R5bGVT
aGVldChyZXF1ZXN0LCBjaGFyc2V0KTsKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6
Ci0gICAgICAgIHJldHVybiBuZXcgQ2FjaGVkU2NyaXB0KHVybC5zdHJpbmcoKSwgY2hhcnNldCk7
CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkU2NyaXB0KHJlcXVlc3QsIGNoYXJzZXQpOwogICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIG5ldyBD
YWNoZWRGb250KHVybC5zdHJpbmcoKSk7CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkRm9udChy
ZXF1ZXN0KTsKICNpZiBFTkFCTEUoWFNMVCkKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xT
dHlsZVNoZWV0OgotICAgICAgICByZXR1cm4gbmV3IENhY2hlZFhTTFN0eWxlU2hlZXQodXJsLnN0
cmluZygpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRYU0xTdHlsZVNoZWV0KHJlcXVlc3Qp
OwogI2VuZGlmCiAjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCiAgICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6TGlua1ByZWZldGNoOgotICAgICAgICByZXR1cm4gbmV3IENhY2hlZFJlc291cmNlKHVy
bC5zdHJpbmcoKSwgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaCk7CisgICAgICAgIHJldHVy
biBuZXcgQ2FjaGVkUmVzb3VyY2UocmVxdWVzdCwgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRj
aCk7CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZXJlbmRlcjoKLSAgICAgICAgcmV0
dXJuIG5ldyBDYWNoZWRSZXNvdXJjZSh1cmwuc3RyaW5nKCksIENhY2hlZFJlc291cmNlOjpMaW5r
UHJlcmVuZGVyKTsKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRSZXNvdXJjZShyZXF1ZXN0LCBD
YWNoZWRSZXNvdXJjZTo6TGlua1ByZXJlbmRlcik7CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
TGlua1N1YnJlc291cmNlOgotICAgICAgICByZXR1cm4gbmV3IENhY2hlZFJlc291cmNlKHVybC5z
dHJpbmcoKSwgQ2FjaGVkUmVzb3VyY2U6OkxpbmtTdWJyZXNvdXJjZSk7CisgICAgICAgIHJldHVy
biBuZXcgQ2FjaGVkUmVzb3VyY2UocmVxdWVzdCwgQ2FjaGVkUmVzb3VyY2U6OkxpbmtTdWJyZXNv
dXJjZSk7CiAjZW5kaWYKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMjQs
NyArMTI0LDcgQEAKICAgICByZXR1cm4gbV9kb2N1bWVudCA/IG1fZG9jdW1lbnQtPmZyYW1lKCkg
OiAwOwogfQogCi1DYWNoZWRJbWFnZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RJbWFn
ZShjb25zdCBTdHJpbmcmIHVybCkKK0NhY2hlZEltYWdlKiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
cmVxdWVzdEltYWdlKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBpZiAoRnJhbWUq
IGYgPSBmcmFtZSgpKSB7CiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGYtPnNldHRpbmdz
KCk7CkBAIC0xMzIsMTMgKzEzMiwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAg
ICAgaWYgKGYtPmxvYWRlcigpLT5wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNoZWQoKSkg
ewotICAgICAgICAgICAgS1VSTCBjb21wbGV0ZVVSTCA9IG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJM
KHVybCk7CisgICAgICAgICAgICBLVVJMIGNvbXBsZXRlVVJMID0gbV9kb2N1bWVudC0+Y29tcGxl
dGVVUkwocmVxdWVzdC51cmwoKSk7CiAgICAgICAgICAgICBpZiAoY29tcGxldGVVUkwuaXNWYWxp
ZCgpICYmIGNhblJlcXVlc3QoQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIGNvbXBsZXRl
VVJMKSkKICAgICAgICAgICAgICAgICBQaW5nTG9hZGVyOjpsb2FkSW1hZ2UoZiwgY29tcGxldGVV
UkwpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9Ci0gICAgQ2FjaGVk
SW1hZ2UqIHJlc291cmNlID0gc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2UqPihyZXF1ZXN0UmVzb3Vy
Y2UoQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIHVybCwgU3RyaW5nKCkpKTsKKyAgICBD
YWNoZWRJbWFnZSogcmVzb3VyY2UgPSBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZSo+KHJlcXVlc3RS
ZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSwgcmVxdWVzdCwgU3RyaW5nKCkp
KTsKICAgICBpZiAoYXV0b0xvYWRJbWFnZXMoKSAmJiByZXNvdXJjZSAmJiByZXNvdXJjZS0+c3Rp
bGxOZWVkc0xvYWQoKSkgewogICAgICAgICByZXNvdXJjZS0+c2V0TG9hZGluZyh0cnVlKTsKICAg
ICAgICAgbG9hZChyZXNvdXJjZSwgdHJ1ZSk7CkBAIC0xNDYsMjYgKzE0NiwyOSBAQAogICAgIHJl
dHVybiByZXNvdXJjZTsKIH0KIAotQ2FjaGVkRm9udCogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJl
cXVlc3RGb250KGNvbnN0IFN0cmluZyYgdXJsKQorQ2FjaGVkRm9udCogQ2FjaGVkUmVzb3VyY2VM
b2FkZXI6OnJlcXVlc3RGb250KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkRm9udCo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJj
ZTo6Rm9udFJlc291cmNlLCB1cmwsIFN0cmluZygpKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PENhY2hlZEZvbnQqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJj
ZSwgcmVxdWVzdCwgU3RyaW5nKCkpKTsKIH0KIAotQ2FjaGVkQ1NTU3R5bGVTaGVldCogQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBTdHJpbmcmIGNoYXJzZXQsIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQorQ2Fj
aGVkQ1NTU3R5bGVTaGVldCogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RDU1NTdHlsZVNo
ZWV0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBSZXNv
dXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2Fj
aGVkQ1NTU3R5bGVTaGVldCo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5
bGVTaGVldCwgdXJsLCBjaGFyc2V0LCBwcmlvcml0eSkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxDYWNoZWRDU1NTdHlsZVNoZWV0Kj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpD
U1NTdHlsZVNoZWV0LCByZXF1ZXN0LCBjaGFyc2V0LCBwcmlvcml0eSkpOwogfQogCi1DYWNoZWRD
U1NTdHlsZVNoZWV0KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFVzZXJDU1NTdHlsZVNo
ZWV0KGNvbnN0IFN0cmluZyYgcmVxdWVzdFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQorQ2Fj
aGVkQ1NTU3R5bGVTaGVldCogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RVc2VyQ1NTU3R5
bGVTaGVldChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkK
IHsKLSAgICBLVVJMIHVybCA9IE1lbW9yeUNhY2hlOjpyZW1vdmVGcmFnbWVudElkZW50aWZpZXJJ
Zk5lZWRlZChLVVJMKEtVUkwoKSwgcmVxdWVzdFVSTCkpOworICAgIEtVUkwgdXJsID0gTWVtb3J5
Q2FjaGU6OnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVkKHJlcXVlc3QudXJsKCkpOwog
CiAgICAgaWYgKENhY2hlZFJlc291cmNlKiBleGlzdGluZyA9IG1lbW9yeUNhY2hlKCktPnJlc291
cmNlRm9yVVJMKHVybCkpIHsKICAgICAgICAgaWYgKGV4aXN0aW5nLT50eXBlKCkgPT0gQ2FjaGVk
UmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q2FjaGVkQ1NTU3R5bGVTaGVldCo+KGV4aXN0aW5nKTsKICAgICAgICAgbWVtb3J5Q2FjaGUoKS0+
cmVtb3ZlKGV4aXN0aW5nKTsKICAgICB9Ci0gICAgQ2FjaGVkQ1NTU3R5bGVTaGVldCogdXNlclNo
ZWV0ID0gbmV3IENhY2hlZENTU1N0eWxlU2hlZXQodXJsLCBjaGFyc2V0KTsKKyAgICBpZiAodXJs
LnN0cmluZygpICE9IHJlcXVlc3QudXJsKCkpCisgICAgICAgIHJlcXVlc3Quc2V0VVJMKHVybCk7
CisKKyAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KiB1c2VyU2hlZXQgPSBuZXcgQ2FjaGVkQ1NTU3R5
bGVTaGVldChyZXF1ZXN0LCBjaGFyc2V0KTsKICAgICAKICAgICBib29sIGluQ2FjaGUgPSBtZW1v
cnlDYWNoZSgpLT5hZGQodXNlclNoZWV0KTsKICAgICBpZiAoIWluQ2FjaGUpCkBAIC0xNzksMjQg
KzE4MiwyNCBAQAogICAgIHJldHVybiB1c2VyU2hlZXQ7CiB9CiAKLUNhY2hlZFNjcmlwdCogQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgY2hhcnNldCkKK0NhY2hlZFNjcmlwdCogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJl
cXVlc3RTY3JpcHQoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJz
ZXQpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhY2hlZFNjcmlwdCo+KHJlcXVlc3RSZXNv
dXJjZShDYWNoZWRSZXNvdXJjZTo6U2NyaXB0LCB1cmwsIGNoYXJzZXQpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q2FjaGVkU2NyaXB0Kj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNl
OjpTY3JpcHQsIHJlcXVlc3QsIGNoYXJzZXQpKTsKIH0KIAogI2lmIEVOQUJMRShYU0xUKQotQ2Fj
aGVkWFNMU3R5bGVTaGVldCogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RYU0xTdHlsZVNo
ZWV0KGNvbnN0IFN0cmluZyYgdXJsKQorQ2FjaGVkWFNMU3R5bGVTaGVldCogQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OnJlcXVlc3RYU0xTdHlsZVNoZWV0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
IHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkWFNMU3R5bGVTaGVldCo+KHJlcXVlc3RS
ZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldCwgdXJsLCBTdHJpbmcoKSkpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWNoZWRYU0xTdHlsZVNoZWV0Kj4ocmVxdWVzdFJlc291
cmNlKENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0LCByZXF1ZXN0LCBTdHJpbmcoKSkpOwog
fQogI2VuZGlmCiAKICNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKLUNhY2hlZFJlc291cmNlKiBD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdExpbmtSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6
VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3Jp
dHkpCitDYWNoZWRSZXNvdXJjZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RMaW5rUmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKIHsKICAgICBBU1NFUlQoZnJhbWUoKSk7
CiAgICAgQVNTRVJUKHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaCB8fCB0eXBl
ID09IENhY2hlZFJlc291cmNlOjpMaW5rUHJlcmVuZGVyIHx8IHR5cGUgPT0gQ2FjaGVkUmVzb3Vy
Y2U6OkxpbmtTdWJyZXNvdXJjZSk7Ci0gICAgcmV0dXJuIHJlcXVlc3RSZXNvdXJjZSh0eXBlLCB1
cmwsIFN0cmluZygpLCBwcmlvcml0eSk7CisgICAgcmV0dXJuIHJlcXVlc3RSZXNvdXJjZSh0eXBl
LCByZXF1ZXN0LCBTdHJpbmcoKSwgcHJpb3JpdHkpOwogfQogI2VuZGlmCiAKQEAgLTMwOCw5ICsz
MTEsOSBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1DYWNoZWRSZXNvdXJjZSogQ2FjaGVkUmVz
b3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBj
b25zdCBTdHJpbmcmIHJlc291cmNlVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIFJlc291cmNl
TG9hZFByaW9yaXR5IHByaW9yaXR5LCBib29sIGZvclByZWxvYWQpCitDYWNoZWRSZXNvdXJjZSog
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlw
ZSB0eXBlLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwg
UmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHksIGJvb2wgZm9yUHJlbG9hZCkKIHsKLSAgICBL
VVJMIHVybCA9IG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHJlc291cmNlVVJMKTsKKyAgICBLVVJM
IHVybCA9IHJlcXVlc3QudXJsKCk7CiAgICAgCiAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNh
Y2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UgJyVzJywgY2hhcnNldCAnJXMnLCBw
cmlvcml0eT0lZCwgZm9yUHJlbG9hZD0ldSIsIHVybC5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCks
IGNoYXJzZXQubGF0aW4xKCkuZGF0YSgpLCBwcmlvcml0eSwgZm9yUHJlbG9hZCk7CiAgICAgCkBA
IC0zMzQsMTMgKzMzNywxNiBAQAogICAgIC8vIFNlZSBpZiB3ZSBjYW4gdXNlIGFuIGV4aXN0aW5n
IHJlc291cmNlIGZyb20gdGhlIGNhY2hlLgogICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9
IG1lbW9yeUNhY2hlKCktPnJlc291cmNlRm9yVVJMKHVybCk7CiAKLSAgICBzd2l0Y2ggKGRldGVy
bWluZVJldmFsaWRhdGlvblBvbGljeSh0eXBlLCBmb3JQcmVsb2FkLCByZXNvdXJjZSkpIHsKKyAg
ICBpZiAocmVxdWVzdC51cmwoKSAhPSB1cmwpCisgICAgICAgIHJlcXVlc3Quc2V0VVJMKHVybCk7
CisKKyAgICBzd2l0Y2ggKGRldGVybWluZVJldmFsaWRhdGlvblBvbGljeSh0eXBlLCBmb3JQcmVs
b2FkLCByZXNvdXJjZSwgcmVxdWVzdCkpIHsKICAgICBjYXNlIExvYWQ6Ci0gICAgICAgIHJlc291
cmNlID0gbG9hZFJlc291cmNlKHR5cGUsIHVybCwgY2hhcnNldCwgcHJpb3JpdHkpOworICAgICAg
ICByZXNvdXJjZSA9IGxvYWRSZXNvdXJjZSh0eXBlLCByZXF1ZXN0LCBjaGFyc2V0LCBwcmlvcml0
eSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUmVsb2FkOgogICAgICAgICBtZW1vcnlDYWNo
ZSgpLT5yZW1vdmUocmVzb3VyY2UpOwotICAgICAgICByZXNvdXJjZSA9IGxvYWRSZXNvdXJjZSh0
eXBlLCB1cmwsIGNoYXJzZXQsIHByaW9yaXR5KTsKKyAgICAgICAgcmVzb3VyY2UgPSBsb2FkUmVz
b3VyY2UodHlwZSwgcmVxdWVzdCwgY2hhcnNldCwgcHJpb3JpdHkpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFJldmFsaWRhdGU6CiAgICAgICAgIHJlc291cmNlID0gcmV2YWxpZGF0ZVJlc291
cmNlKHJlc291cmNlLCBwcmlvcml0eSk7CkBAIC0zNzAsNyArMzc2LDcgQEAKICAgICAKICAgICAv
LyBDb3B5IHRoZSBVUkwgb3V0IG9mIHRoZSByZXNvdXJjZSB0byBiZSByZXZhbGlkYXRlZCBpbiBj
YXNlIGl0IGdldHMgZGVsZXRlZCBieSB0aGUgcmVtb3ZlKCkgY2FsbCBiZWxvdy4KICAgICBTdHJp
bmcgdXJsID0gcmVzb3VyY2UtPnVybCgpOwotICAgIENhY2hlZFJlc291cmNlKiBuZXdSZXNvdXJj
ZSA9IGNyZWF0ZVJlc291cmNlKHJlc291cmNlLT50eXBlKCksIEtVUkwoUGFyc2VkVVJMU3RyaW5n
LCB1cmwpLCByZXNvdXJjZS0+ZW5jb2RpbmcoKSk7CisgICAgQ2FjaGVkUmVzb3VyY2UqIG5ld1Jl
c291cmNlID0gY3JlYXRlUmVzb3VyY2UocmVzb3VyY2UtPnR5cGUoKSwgcmVzb3VyY2UtPnJlc291
cmNlUmVxdWVzdCgpLCByZXNvdXJjZS0+ZW5jb2RpbmcoKSk7CiAgICAgCiAgICAgTE9HKFJlc291
cmNlTG9hZGluZywgIlJlc291cmNlICVwIGNyZWF0ZWQgdG8gcmV2YWxpZGF0ZSAlcCIsIG5ld1Jl
c291cmNlLCByZXNvdXJjZSk7CiAgICAgbmV3UmVzb3VyY2UtPnNldFJlc291cmNlVG9SZXZhbGlk
YXRlKHJlc291cmNlKTsKQEAgLTM4NSwxMyArMzkxLDEzIEBACiAgICAgcmV0dXJuIG5ld1Jlc291
cmNlOwogfQogCi1DYWNoZWRSZXNvdXJjZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmxvYWRSZXNv
dXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCitDYWNoZWRSZXNv
dXJjZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmxvYWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6
VHlwZSB0eXBlLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNl
dCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCiB7Ci0gICAgQVNTRVJUKCFtZW1vcnlD
YWNoZSgpLT5yZXNvdXJjZUZvclVSTCh1cmwpKTsKKyAgICBBU1NFUlQoIW1lbW9yeUNhY2hlKCkt
PnJlc291cmNlRm9yVVJMKHJlcXVlc3QudXJsKCkpKTsKICAgICAKLSAgICBMT0coUmVzb3VyY2VM
b2FkaW5nLCAiTG9hZGluZyBDYWNoZWRSZXNvdXJjZSBmb3IgJyVzJy4iLCB1cmwuc3RyaW5nKCku
bGF0aW4xKCkuZGF0YSgpKTsKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiTG9hZGluZyBDYWNo
ZWRSZXNvdXJjZSBmb3IgJyVzJy4iLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRh
dGEoKSk7CiAgICAgCi0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gY3JlYXRlUmVzb3Vy
Y2UodHlwZSwgdXJsLCBjaGFyc2V0KTsKKyAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBj
cmVhdGVSZXNvdXJjZSh0eXBlLCByZXF1ZXN0LCBjaGFyc2V0KTsKICAgICAKICAgICBib29sIGlu
Q2FjaGUgPSBtZW1vcnlDYWNoZSgpLT5hZGQocmVzb3VyY2UpOwogICAgIApAQCAtNDE3LDExICs0
MjMsMTEgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgbV92YWxpZGF0ZWRVUkxz
LmFkZCh1cmwuc3RyaW5nKCkpOworICAgIG1fdmFsaWRhdGVkVVJMcy5hZGQocmVxdWVzdC51cmwo
KSk7CiAgICAgcmV0dXJuIHJlc291cmNlOwogfQogCi1DYWNoZWRSZXNvdXJjZUxvYWRlcjo6UmV2
YWxpZGF0aW9uUG9saWN5IENhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRp
b25Qb2xpY3koQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgYm9vbCBmb3JQcmVsb2FkLCBDYWNo
ZWRSZXNvdXJjZSogZXhpc3RpbmdSZXNvdXJjZSkgY29uc3QKK0NhY2hlZFJlc291cmNlTG9hZGVy
OjpSZXZhbGlkYXRpb25Qb2xpY3kgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJldmFs
aWRhdGlvblBvbGljeShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBib29sIGZvclByZWxvYWQs
IENhY2hlZFJlc291cmNlKiBleGlzdGluZ1Jlc291cmNlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IG5ld1JlcXVlc3QpIGNvbnN0CiB7CiAgICAgaWYgKCFleGlzdGluZ1Jlc291cmNlKQogICAgICAg
ICByZXR1cm4gTG9hZDsKQEAgLTQ1NCw2ICs0NjAsMTEgQEAKICAgICAgICAgcmV0dXJuIFJlbG9h
ZDsKICAgICB9CiAKKyAgICBpZiAoIWV4aXN0aW5nUmVzb3VyY2UtPmFsbG93UmV1c2VPZlJlcXVl
c3QobV9kb2N1bWVudCwgbmV3UmVxdWVzdCkpIHsKKyAgICAgICAgTE9HKFJlc291cmNlTG9hZGlu
ZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3kgcmVs
b2FkaW5nIGR1ZSB0byBSZXNvdXJjZVJlcXVlc3QgaW5jb21wYXRpYmlsaXR5Iik7CisgICAgICAg
IHJldHVybiBSZWxvYWQ7CisgICAgfQorCiAgICAgLy8gQXZvaWQgbG9hZGluZyB0aGUgc2FtZSBy
ZXNvdXJjZSBtdWx0aXBsZSB0aW1lcyBmb3IgYSBzaW5nbGUgZG9jdW1lbnQsIGV2ZW4gaWYgdGhl
IGNhY2hlIHBvbGljaWVzIHdvdWxkIHRlbGwgdXMgdG8uCiAgICAgaWYgKG1fdmFsaWRhdGVkVVJM
cy5jb250YWlucyhleGlzdGluZ1Jlc291cmNlLT51cmwoKSkpCiAgICAgICAgIHJldHVybiBVc2U7
CkBAIC02NjgsNyArNjc5LDggQEAKICAgICBpZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6U2Ny
aXB0IHx8IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQpCiAgICAgICAgIGVu
Y29kaW5nID0gY2hhcnNldC5pc0VtcHR5KCkgPyBtX2RvY3VtZW50LT5jaGFyc2V0KCkgOiBjaGFy
c2V0OwogCi0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVxdWVzdFJlc291cmNlKHR5
cGUsIHVybCwgZW5jb2RpbmcsIFJlc291cmNlTG9hZFByaW9yaXR5VW5yZXNvbHZlZCwgdHJ1ZSk7
CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QobV9kb2N1bWVudC0+Y29tcGxldGVVUkwodXJs
KSk7CisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVxdWVzdFJlc291cmNlKHR5cGUs
IHJlcXVlc3QsIGVuY29kaW5nLCBSZXNvdXJjZUxvYWRQcmlvcml0eVVucmVzb2x2ZWQsIHRydWUp
OwogICAgIGlmICghcmVzb3VyY2UgfHwgKG1fcHJlbG9hZHMgJiYgbV9wcmVsb2Fkcy0+Y29udGFp
bnMocmVzb3VyY2UpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHJlc291cmNlLT5pbmNyZWFzZVBy
ZWxvYWRDb3VudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhT
TFN0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gODcwNzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDggKzM3LDggQEAKIAogI2lmIEVOQUJMRShYU0xUKQogCi1DYWNoZWRYU0xTdHlsZVNo
ZWV0OjpDYWNoZWRYU0xTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyAmdXJsKQotICAgIDogQ2FjaGVk
UmVzb3VyY2UodXJsLCBYU0xTdHlsZVNoZWV0KQorQ2FjaGVkWFNMU3R5bGVTaGVldDo6Q2FjaGVk
WFNMU3R5bGVTaGVldChSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKKyAgICA6IENh
Y2hlZFJlc291cmNlKHJlc291cmNlUmVxdWVzdCwgWFNMU3R5bGVTaGVldCkKICAgICAsIG1fZGVj
b2RlcihUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQveHNsIikpCiB7CiAgICAgLy8g
SXQncyBYTUwgd2Ugd2FudC4KQEAgLTQ5LDcgKzQ5LDcgQEAKIHZvaWQgQ2FjaGVkWFNMU3R5bGVT
aGVldDo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjKQogeyAgCiAgICAgaWYg
KCFpc0xvYWRpbmcoKSkKLSAgICAgICAgYy0+c2V0WFNMU3R5bGVTaGVldChtX3VybCwgbV9yZXNw
b25zZS51cmwoKSwgbV9zaGVldCk7CisgICAgICAgIGMtPnNldFhTTFN0eWxlU2hlZXQobV9yZXNv
dXJjZVJlcXVlc3QudXJsKCksIG1fcmVzcG9uc2UudXJsKCksIG1fc2hlZXQpOwogfQogCiB2b2lk
IENhY2hlZFhTTFN0eWxlU2hlZXQ6OnNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYgY2hzKQpAQCAt
ODQsNyArODQsNyBAQAogICAgIAogICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcobV9j
bGllbnRzKTsKICAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQgKmMgPSB3Lm5leHQoKSkK
LSAgICAgICAgYy0+c2V0WFNMU3R5bGVTaGVldChtX3VybCwgbV9yZXNwb25zZS51cmwoKSwgbV9z
aGVldCk7CisgICAgICAgIGMtPnNldFhTTFN0eWxlU2hlZXQobV9yZXNvdXJjZVJlcXVlc3QudXJs
KCksIG1fcmVzcG9uc2UudXJsKCksIG1fc2hlZXQpOwogfQogCiB2b2lkIENhY2hlZFhTTFN0eWxl
U2hlZXQ6OmVycm9yKENhY2hlZFJlc291cmNlOjpTdGF0dXMgc3RhdHVzKQpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA4NzA3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDggKzUyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DYWNoZWRJ
bWFnZTo6Q2FjaGVkSW1hZ2UoY29uc3QgU3RyaW5nJiB1cmwpCi0gICAgOiBDYWNoZWRSZXNvdXJj
ZSh1cmwsIEltYWdlUmVzb3VyY2UpCitDYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoUmVzb3VyY2VS
ZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCisgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJl
cXVlc3QsIEltYWdlUmVzb3VyY2UpCiAgICAgLCBtX2ltYWdlKDApCiAgICAgLCBtX2RlY29kZWRE
YXRhRGVsZXRpb25UaW1lcih0aGlzLCAmQ2FjaGVkSW1hZ2U6OmRlY29kZWREYXRhRGVsZXRpb25U
aW1lckZpcmVkKQogICAgICwgbV9zaG91bGRQYWludEJyb2tlbkltYWdlKHRydWUpCkBAIC02Miw3
ICs2Miw3IEBACiB9CiAKIENhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShJbWFnZSogaW1hZ2UpCi0g
ICAgOiBDYWNoZWRSZXNvdXJjZShTdHJpbmcoKSwgSW1hZ2VSZXNvdXJjZSkKKyAgICA6IENhY2hl
ZFJlc291cmNlKFJlc291cmNlUmVxdWVzdCgpLCBJbWFnZVJlc291cmNlKQogICAgICwgbV9pbWFn
ZShpbWFnZSkKICAgICAsIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyKHRoaXMsICZDYWNoZWRJ
bWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQpCiAgICAgLCBtX3Nob3VsZFBhaW50
QnJva2VuSW1hZ2UodHJ1ZSkKQEAgLTIyNSw3ICsyMjUsNyBAQAogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSA9IGZyYW1lLT5s
b2FkZXIoKS0+Y2xpZW50KCktPnNob3VsZFBhaW50QnJva2VuSW1hZ2UoS1VSTChQYXJzZWRVUkxT
dHJpbmcsIG1fdXJsKSk7CisgICAgbV9zaG91bGRQYWludEJyb2tlbkltYWdlID0gZnJhbWUtPmxv
YWRlcigpLT5jbGllbnQoKS0+c2hvdWxkUGFpbnRCcm9rZW5JbWFnZShLVVJMKFBhcnNlZFVSTFN0
cmluZywgbV9yZXNvdXJjZVJlcXVlc3QudXJsKCkpKTsKIH0KIAogdm9pZCBDYWNoZWRJbWFnZTo6
Y2xlYXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
TG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlTG9hZGVyLmgJKHJldmlzaW9uIDg3MDc1KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYg
KzQyLDcgQEAKIGNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBDYWNoZWRGb250Owog
Y2xhc3MgQ2FjaGVkSW1hZ2U7CitjbGFzcyBDYWNoZWRSYXdSZXNvdXJjZTsKIGNsYXNzIENhY2hl
ZFJlc291cmNlUmVxdWVzdDsKIGNsYXNzIENhY2hlZFNjcmlwdDsKIGNsYXNzIENhY2hlZFhTTFN0
eWxlU2hlZXQ7CkBAIC02MCwxNyArNjEsMTcgQEAKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlcihE
b2N1bWVudCopOwogICAgIH5DYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCi0gICAgQ2FjaGVkSW1h
Z2UqIHJlcXVlc3RJbWFnZShjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgQ2FjaGVkQ1NTU3R5bGVT
aGVldCogcmVxdWVzdENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQ
cmlvcml0eVVucmVzb2x2ZWQpOwotICAgIENhY2hlZENTU1N0eWxlU2hlZXQqIHJlcXVlc3RVc2Vy
Q1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsK
LSAgICBDYWNoZWRTY3JpcHQqIHJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgY2hhcnNldCk7Ci0gICAgQ2FjaGVkRm9udCogcmVxdWVzdEZvbnQoY29uc3QgU3Ry
aW5nJiB1cmwpOworICAgIENhY2hlZEltYWdlKiByZXF1ZXN0SW1hZ2UoUmVzb3VyY2VSZXF1ZXN0
Jik7CisgICAgQ2FjaGVkQ1NTU3R5bGVTaGVldCogcmVxdWVzdENTU1N0eWxlU2hlZXQoUmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSA9
IFJlc291cmNlTG9hZFByaW9yaXR5VW5yZXNvbHZlZCk7CisgICAgQ2FjaGVkQ1NTU3R5bGVTaGVl
dCogcmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0KFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmlu
ZyYgY2hhcnNldCk7CisgICAgQ2FjaGVkU2NyaXB0KiByZXF1ZXN0U2NyaXB0KFJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7CisgICAgQ2FjaGVkRm9udCogcmVxdWVzdEZv
bnQoUmVzb3VyY2VSZXF1ZXN0Jik7CiAKICNpZiBFTkFCTEUoWFNMVCkKLSAgICBDYWNoZWRYU0xT
dHlsZVNoZWV0KiByZXF1ZXN0WFNMU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVybCk7CisgICAg
Q2FjaGVkWFNMU3R5bGVTaGVldCogcmVxdWVzdFhTTFN0eWxlU2hlZXQoUmVzb3VyY2VSZXF1ZXN0
Jik7CiAjZW5kaWYKICNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKLSAgICBDYWNoZWRSZXNvdXJj
ZSogcmVxdWVzdExpbmtSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgU3RyaW5n
ICZ1cmwsIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3Jp
dHlVbnJlc29sdmVkKTsKKyAgICBDYWNoZWRSZXNvdXJjZSogcmVxdWVzdExpbmtSZXNvdXJjZShD
YWNoZWRSZXNvdXJjZTo6VHlwZSwgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VMb2FkUHJpb3Jp
dHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eVVucmVzb2x2ZWQpOwogI2VuZGlmCiAKICAgICAvLyBM
b2dzIGFuIGFjY2VzcyBkZW5pZWQgbWVzc2FnZSB0byB0aGUgY29uc29sZSBmb3IgdGhlIHNwZWNp
ZmllZCBVUkwuCkBAIC0xMDgsMTMgKzEwOSwxMyBAQAogICAgIHZvaWQgcHJpbnRQcmVsb2FkU3Rh
dHMoKTsKICAgICAKIHByaXZhdGU6Ci0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVlc3RSZXNvdXJj
ZShDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
Y2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlv
cml0eVVucmVzb2x2ZWQsIGJvb2wgaXNQcmVsb2FkID0gZmFsc2UpOworICAgIENhY2hlZFJlc291
cmNlKiByZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIFJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgPSBSZXNvdXJj
ZUxvYWRQcmlvcml0eVVucmVzb2x2ZWQsIGJvb2wgaXNQcmVsb2FkID0gZmFsc2UpOwogICAgIENh
Y2hlZFJlc291cmNlKiByZXZhbGlkYXRlUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqLCBSZXNvdXJj
ZUxvYWRQcmlvcml0eSBwcmlvcml0eSk7Ci0gICAgQ2FjaGVkUmVzb3VyY2UqIGxvYWRSZXNvdXJj
ZShDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgY2hhcnNl
dCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpOworICAgIENhY2hlZFJlc291cmNlKiBs
b2FkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0
IFN0cmluZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkpOwogICAgIHZvaWQgcmVxdWVz
dFByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIGNoYXJzZXQpOwogCiAgICAgZW51bSBSZXZhbGlkYXRpb25Qb2xpY3kgeyBVc2UsIFJl
dmFsaWRhdGUsIFJlbG9hZCwgTG9hZCB9OwotICAgIFJldmFsaWRhdGlvblBvbGljeSBkZXRlcm1p
bmVSZXZhbGlkYXRpb25Qb2xpY3koQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIGJvb2wgZm9yUHJlbG9h
ZCwgQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5nUmVzb3VyY2UpIGNvbnN0OworICAgIFJldmFsaWRh
dGlvblBvbGljeSBkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3koQ2FjaGVkUmVzb3VyY2U6OlR5
cGUsIGJvb2wgZm9yUHJlbG9hZCwgQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5nUmVzb3VyY2UsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYpIGNvbnN0OwogICAgIAogICAgIHZvaWQgbm90aWZ5TG9hZGVk
RnJvbU1lbW9yeUNhY2hlKENhY2hlZFJlc291cmNlKik7CiAgICAgYm9vbCBjYW5SZXF1ZXN0KENh
Y2hlZFJlc291cmNlOjpUeXBlLCBjb25zdCBLVVJMJiwgYm9vbCBmb3JQcmVsb2FkID0gZmFsc2Up
OwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5
bGVTaGVldC5oCShyZXZpc2lvbiA4NzA3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAK
ICNpZiBFTkFCTEUoWFNMVCkKICAgICBjbGFzcyBDYWNoZWRYU0xTdHlsZVNoZWV0IDogcHVibGlj
IENhY2hlZFJlc291cmNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENhY2hlZFhTTFN0eWxlU2hl
ZXQoY29uc3QgU3RyaW5nJiB1cmwpOworICAgICAgICBDYWNoZWRYU0xTdHlsZVNoZWV0KFJlc291
cmNlUmVxdWVzdCYpOwogCiAgICAgICAgIGNvbnN0IFN0cmluZyYgc2hlZXQoKSBjb25zdCB7IHJl
dHVybiBtX3NoZWV0OyB9CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZEltYWdlLmgJKHJldmlzaW9uIDg3MDc1KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAK
ICAgICBmcmllbmQgY2xhc3MgTWVtb3J5Q2FjaGU7CiAKIHB1YmxpYzoKLSAgICBDYWNoZWRJbWFn
ZShjb25zdCBTdHJpbmcmIHVybCk7CisgICAgQ2FjaGVkSW1hZ2UoUmVzb3VyY2VSZXF1ZXN0Jik7
CiAgICAgQ2FjaGVkSW1hZ2UoSW1hZ2UqKTsKICAgICB2aXJ0dWFsIH5DYWNoZWRJbWFnZSgpOwog
ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2UuY3BwCShyZXZpc2lvbiA4NzA3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDggKzc4LDggQEAKIHN0YXRp
YyBSZWZDb3VudGVkTGVha0NvdW50ZXIgY2FjaGVkUmVzb3VyY2VMZWFrQ291bnRlcigiQ2FjaGVk
UmVzb3VyY2UiKTsKICNlbmRpZgogCi1DYWNoZWRSZXNvdXJjZTo6Q2FjaGVkUmVzb3VyY2UoY29u
c3QgU3RyaW5nJiB1cmwsIFR5cGUgdHlwZSkKLSAgICA6IG1fdXJsKHVybCkKK0NhY2hlZFJlc291
cmNlOjpDYWNoZWRSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCwgVHlwZSB0eXBlKQor
ICAgIDogbV9yZXNvdXJjZVJlcXVlc3QocmVxdWVzdCkKICAgICAsIG1fcmVxdWVzdCgwKQogICAg
ICwgbV9sb2FkUHJpb3JpdHkoZGVmYXVsdFByaW9yaXR5Rm9yUmVzb3VyY2VUeXBlKHR5cGUpKQog
ICAgICwgbV9yZXNwb25zZVRpbWVzdGFtcChjdXJyZW50VGltZSgpKQpAQCAtMjY1LDYgKzI2NSwy
NCBAQAogICAgICAgICBkZWxldGUgdGhpczsKIH0KIAorc3RhdGljIGJvb2wgcmV1c2VSZXF1ZXN0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBpZiAoIXJlcXVlc3QuaHR0
cEhlYWRlckZpZWxkKCJDYWNoZS1Db250cm9sIikuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgaWYgKHJlcXVlc3QuaHR0cE1ldGhvZCgpICE9ICJHRVQiKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisgICAgCisvLyBG
SVhNRTogVGhpcyBkb2Vzbid0IGhhbmRsZSBBY2Nlc3MtQ29udHJvbCBoZWFkZXJzIHlldCwgYnV0
IHdoZW4gaXQgZG9lcywgaXQgd2lsbCBuZWVkIHRoZQorLy8gY3VycmVudGx5IHVudXNlZCBEb2N1
bWVudCogdG8gZ2V0IGEgU2VjdXJpdHlPcmlnaW4uCitib29sIENhY2hlZFJlc291cmNlOjphbGxv
d1JldXNlT2ZSZXF1ZXN0KERvY3VtZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1
ZXN0KSBjb25zdAoreworICAgIHJldHVybiByZXVzZVJlcXVlc3QobmV3UmVxdWVzdCkgJiYgcmV1
c2VSZXF1ZXN0KG1fcmVzb3VyY2VSZXF1ZXN0KTsKK30KKwogdm9pZCBDYWNoZWRSZXNvdXJjZTo6
YWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQpCiB7CiAgICAgYWRkQ2xpZW50
VG9TZXQoY2xpZW50KTsKQEAgLTMxMiw3ICszMzAsOSBAQAogICAgICAgICAgICAgLy8gV2UgYWxs
b3cgbm9uLXNlY3VyZSBjb250ZW50IHRvIGJlIHJldXNlZCBpbiBoaXN0b3J5LCBidXQgd2UgZG8g
bm90IGFsbG93IHNlY3VyZSBjb250ZW50IHRvIGJlIHJldXNlZC4KICAgICAgICAgICAgIGlmIChw
cm90b2NvbElzKHVybCgpLCAiaHR0cHMiKSkKICAgICAgICAgICAgICAgICBtZW1vcnlDYWNoZSgp
LT5yZW1vdmUodGhpcyk7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICB9IGVsc2UgaWYgKCFhbGxv
d1JldXNlT2ZSZXF1ZXN0KCkpCisgICAgICAgICAgICBtZW1vcnlDYWNoZSgpLT5yZW1vdmUodGhp
cyk7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1lbW9yeUNhY2hlKCktPnBydW5lKCk7CiAg
ICAgfQogICAgIC8vIFRoaXMgb2JqZWN0IG1heSBiZSBkZWFkIGhlcmUuCkBAIC01MTQsNyArNTM0
LDcgQEAKICAgICBpZiAobV9sb2FkaW5nIHx8IGVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fcmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0
b3JlKCkpCisgICAgaWYgKG1fcmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkg
fHwgIWFsbG93UmV1c2VPZlJlcXVlc3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJl
dHVybiBtX3Jlc3BvbnNlLmhhc0NhY2hlVmFsaWRhdG9yRmllbGRzKCk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAkocmV2aXNpb24gODcw
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAjaW5jbHVkZSAiUHVyZ2VQcmlvcml0eS5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFByaW9y
aXR5LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VS
ZXNwb25zZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CkBAIC00Niw2ICs0Nyw4IEBACiBjbGFzcyBGcmFtZTsKIGNsYXNzIEluc3Bl
Y3RvclJlc291cmNlOwogY2xhc3MgUHVyZ2VhYmxlQnVmZmVyOworY2xhc3MgUmVzb3VyY2VSZXF1
ZXN0OworY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIAogLy8gQSByZXNvdXJjZSB0aGF0IGlzIGhl
bGQgaW4gdGhlIGNhY2hlLiBDbGFzc2VzIHdobyB3YW50IHRvIHVzZSB0aGlzIG9iamVjdCBzaG91
bGQgZGVyaXZlCiAvLyBmcm9tIENhY2hlZFJlc291cmNlQ2xpZW50LCB0byBnZXQgdGhlIGZ1bmN0
aW9uIGNhbGxzIGluIGNhc2UgdGhlIHJlcXVlc3RlZCBkYXRhIGhhcyBhcnJpdmVkLgpAQCAtNzks
NyArODIsNyBAQAogICAgICAgICBEZWNvZGVFcnJvcgogICAgIH07CiAKLSAgICBDYWNoZWRSZXNv
dXJjZShjb25zdCBTdHJpbmcmIHVybCwgVHlwZSk7CisgICAgQ2FjaGVkUmVzb3VyY2UoUmVzb3Vy
Y2VSZXF1ZXN0LCBUeXBlKTsKICAgICB2aXJ0dWFsIH5DYWNoZWRSZXNvdXJjZSgpOwogICAgIAog
ICAgIHZpcnR1YWwgdm9pZCBsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJj
ZUxvYWRlcikgIHsgbG9hZChjYWNoZWRSZXNvdXJjZUxvYWRlciwgZmFsc2UsIERvU2VjdXJpdHlD
aGVjaywgdHJ1ZSk7IH0KQEAgLTkyLDcgKzk1LDkgQEAKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAK
LSAgICBjb25zdCBTdHJpbmcgJnVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CisgICAgUmVz
b3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QoKSB7IHJldHVybiBtX3Jlc291cmNlUmVxdWVz
dDsgfQorICAgIGNvbnN0IFN0cmluZyYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVJl
cXVlc3QudXJsKCk7fQorICAgIGJvb2wgYWxsb3dSZXVzZU9mUmVxdWVzdChEb2N1bWVudCogPSAw
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QgPSBSZXNvdXJjZVJlcXVlc3QoKSkg
Y29uc3Q7CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4o
bV90eXBlKTsgfQogICAgIAogICAgIFJlc291cmNlTG9hZFByaW9yaXR5IGxvYWRQcmlvcml0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9hZFByaW9yaXR5OyB9CkBAIC0yMjksNyArMjM0LDcgQEAKICAg
ICAKICAgICBIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+IG1fY2xpZW50czsK
IAotICAgIFN0cmluZyBtX3VybDsKKyAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXNvdXJjZVJlcXVl
c3Q7CiAgICAgU3RyaW5nIG1fYWNjZXB0OwogICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCogbV9y
ZXF1ZXN0OwogICAgIFJlc291cmNlTG9hZFByaW9yaXR5IG1fbG9hZFByaW9yaXR5OwpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVx
dWVzdC5jcHAJKHJldmlzaW9uIDg3MDc1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcg
QEAKIHsKICAgICBSZWZQdHI8Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0PiByZXF1ZXN0ID0gYWRvcHRS
ZWYobmV3IENhY2hlZFJlc291cmNlUmVxdWVzdChjYWNoZWRSZXNvdXJjZUxvYWRlciwgcmVzb3Vy
Y2UsIGluY3JlbWVudGFsKSk7CiAKLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0
KHJlc291cmNlLT51cmwoKSk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlc291cmNlUmVxdWVzdCA9
IHJlc291cmNlLT5yZXNvdXJjZVJlcXVlc3QoKTsKICAgICByZXNvdXJjZVJlcXVlc3Quc2V0VGFy
Z2V0VHlwZShjYWNoZWRSZXNvdXJjZVR5cGVUb1RhcmdldFR5cGUocmVzb3VyY2UtPnR5cGUoKSkp
OwogCiAgICAgaWYgKCFyZXNvdXJjZS0+YWNjZXB0KCkuaXNFbXB0eSgpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAko
cmV2aXNpb24gODcwNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NT
U3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1DYWNoZWRDU1NTdHlsZVNoZWV0OjpDYWNoZWRDU1NTdHlsZVNoZWV0
KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCi0gICAgOiBDYWNoZWRS
ZXNvdXJjZSh1cmwsIENTU1N0eWxlU2hlZXQpCitDYWNoZWRDU1NTdHlsZVNoZWV0OjpDYWNoZWRD
U1NTdHlsZVNoZWV0KFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBjb25zdCBTdHJp
bmcmIGNoYXJzZXQpCisgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVlc3QsIENTU1N0
eWxlU2hlZXQpCiAgICAgLCBtX2RlY29kZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0
ZXh0L2NzcyIsIGNoYXJzZXQpKQogewogICAgIC8vIFByZWZlciB0ZXh0L2NzcyBidXQgYWNjZXB0
IGFueSB0eXBlIChkZWxsLmNvbSBzZXJ2ZXMgYSBzdHlsZXNoZWV0CkBAIC01Myw3ICs1Myw3IEBA
CiB2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNs
aWVudCAqYykKIHsKICAgICBpZiAoIWlzTG9hZGluZygpKQotICAgICAgICBjLT5zZXRDU1NTdHls
ZVNoZWV0KG1fdXJsLCBtX3Jlc3BvbnNlLnVybCgpLCBtX2RlY29kZXItPmVuY29kaW5nKCkubmFt
ZSgpLCB0aGlzKTsKKyAgICAgICAgYy0+c2V0Q1NTU3R5bGVTaGVldChtX3Jlc291cmNlUmVxdWVz
dC51cmwoKSwgbV9yZXNwb25zZS51cmwoKSwgbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKSwg
dGhpcyk7CiB9CiAKIHZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6YWxsQ2xpZW50c1JlbW92ZWQo
KQpAQCAtMTEzLDcgKzExMyw3IEBACiAKICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3
KG1fY2xpZW50cyk7CiAgICAgd2hpbGUgKENhY2hlZFJlc291cmNlQ2xpZW50ICpjID0gdy5uZXh0
KCkpCi0gICAgICAgIGMtPnNldENTU1N0eWxlU2hlZXQobV91cmwsIG1fcmVzcG9uc2UudXJsKCks
IG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCksIHRoaXMpOworICAgICAgICBjLT5zZXRDU1NT
dHlsZVNoZWV0KG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLCBtX3Jlc3BvbnNlLnVybCgpLCBtX2Rl
Y29kZXItPmVuY29kaW5nKCkubmFtZSgpLCB0aGlzKTsKIH0KIAogdm9pZCBDYWNoZWRDU1NTdHls
ZVNoZWV0OjplcnJvcihDYWNoZWRSZXNvdXJjZTo6U3RhdHVzIHN0YXR1cykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCShyZXZpc2lvbiA4NzA3
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw4ICs0MCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ2Fj
aGVkU2NyaXB0OjpDYWNoZWRTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
Y2hhcnNldCkKLSAgICA6IENhY2hlZFJlc291cmNlKHVybCwgU2NyaXB0KQorQ2FjaGVkU2NyaXB0
OjpDYWNoZWRTY3JpcHQoUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGNvbnN0IFN0
cmluZyYgY2hhcnNldCkKKyAgICA6IENhY2hlZFJlc291cmNlKHJlc291cmNlUmVxdWVzdCwgU2Ny
aXB0KQogICAgICwgbV9kZWNvZGVyKFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgiYXBwbGlj
YXRpb24vamF2YXNjcmlwdCIsIGNoYXJzZXQpKQogICAgICwgbV9kZWNvZGVkRGF0YURlbGV0aW9u
VGltZXIodGhpcywgJkNhY2hlZFNjcmlwdDo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQp
CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDg3
MDc1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTYxLDEzICsxNjEsMTYgQEAKICAgICAgICAgaWYgKG1fbG9hZE1hbnVhbGx5KSB7
CiAgICAgICAgICAgICBib29sIGF1dG9Mb2FkT3RoZXJJbWFnZXMgPSBkb2N1bWVudC0+Y2FjaGVk
UmVzb3VyY2VMb2FkZXIoKS0+YXV0b0xvYWRJbWFnZXMoKTsKICAgICAgICAgICAgIGRvY3VtZW50
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5zZXRBdXRvTG9hZEltYWdlcyhmYWxzZSk7Ci0gICAg
ICAgICAgICBuZXdJbWFnZSA9IG5ldyBDYWNoZWRJbWFnZShzb3VyY2VVUkkoYXR0cikpOworICAg
ICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBSZXNvdXJjZVJlcXVlc3QoZG9jdW1l
bnQtPmNvbXBsZXRlVVJMKHNvdXJjZVVSSShhdHRyKSkpOworICAgICAgICAgICAgbmV3SW1hZ2Ug
PSBuZXcgQ2FjaGVkSW1hZ2UocmVxdWVzdCk7CiAgICAgICAgICAgICBuZXdJbWFnZS0+c2V0TG9h
ZGluZyh0cnVlKTsKICAgICAgICAgICAgIG5ld0ltYWdlLT5zZXRPd25pbmdDYWNoZWRSZXNvdXJj
ZUxvYWRlcihkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CiAgICAgICAgICAgICBk
b2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+bV9kb2N1bWVudFJlc291cmNlcy5zZXQo
bmV3SW1hZ2UtPnVybCgpLCBuZXdJbWFnZSk7CiAgICAgICAgICAgICBkb2N1bWVudC0+Y2FjaGVk
UmVzb3VyY2VMb2FkZXIoKS0+c2V0QXV0b0xvYWRJbWFnZXMoYXV0b0xvYWRPdGhlckltYWdlcyk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmV3SW1hZ2UgPSBkb2N1bWVudC0+Y2FjaGVk
UmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdEltYWdlKHNvdXJjZVVSSShhdHRyKSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChkb2N1bWVudC0+
Y29tcGxldGVVUkwoc291cmNlVVJJKGF0dHIpKSk7CisgICAgICAgICAgICBuZXdJbWFnZSA9IGRv
Y3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0SW1hZ2UocmVxdWVzdCk7Cisg
ICAgICAgIH0KIAogICAgICAgICAvLyBJZiB3ZSBkbyBub3QgaGF2ZSBhbiBpbWFnZSBoZXJlLCBp
dCBtZWFucyB0aGF0IGEgY3Jvc3Mtc2l0ZQogICAgICAgICAvLyB2aW9sYXRpb24gb2NjdXJyZWQu
Cg==
</data>
<flag name="review"
          id="87818"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="87819"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94629</attachid>
            <date>2011-05-24 09:41:11 -0700</date>
            <delta_ts>2011-05-24 17:24:51 -0700</delta_ts>
            <desc>patch #2</desc>
            <filename>rr2.txt</filename>
            <type>text/plain</type>
            <size>44322</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg3MDc1KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDUsNyArMjQ1LDggQEAKIAogICAgIEFTU0VSVCghbV9jYWNoZWRTY3JpcHQpOwogICAgIC8v
IEZJWE1FOiBJZiBzb3VyY2VVcmwgaXMgZW1wdHksIHdlIHNob3VsZCBkaXNwYXRjaEVycm9yRXZl
bnQoKS4KLSAgICBtX2NhY2hlZFNjcmlwdCA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVk
UmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChzb3VyY2VVcmwsIHNjcmlwdENoYXJzZXQo
KSk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QobV9lbGVtZW50LT5kb2N1bWVudCgpLT5j
b21wbGV0ZVVSTChzb3VyY2VVcmwpKTsKKyAgICBtX2NhY2hlZFNjcmlwdCA9IG1fZWxlbWVudC0+
ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChyZXF1ZXN0
LCBzY3JpcHRDaGFyc2V0KCkpOwogICAgIG1faXNFeHRlcm5hbFNjcmlwdCA9IHRydWU7CiAKICAg
ICBpZiAobV9jYWNoZWRTY3JpcHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2lu
Z0luc3RydWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vz
c2luZ0luc3RydWN0aW9uLmNwcAkocmV2aXNpb24gODcwNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDkgKzE2
MSwxMCBAQAogICAgICAgICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgIGRvY3Vt
ZW50KCktPmFkZFBlbmRpbmdTaGVldCgpOwogICAgICAgICAgICAgCisgICAgICAgICAgICBSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdChkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChocmVmKSk7CiAjaWYg
RU5BQkxFKFhTTFQpCiAgICAgICAgICAgICBpZiAobV9pc1hTTCkKLSAgICAgICAgICAgICAgICBt
X2NhY2hlZFNoZWV0ID0gZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVz
dFhTTFN0eWxlU2hlZXQodXJsKTsKKyAgICAgICAgICAgICAgICBtX2NhY2hlZFNoZWV0ID0gZG9j
dW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdFhTTFN0eWxlU2hlZXQocmVx
dWVzdCk7CiAgICAgICAgICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgICAgIHsKQEAgLTE3MSw3
ICsxNzIsNyBAQAogICAgICAgICAgICAgICAgIGlmIChjaGFyc2V0LmlzRW1wdHkoKSkKICAgICAg
ICAgICAgICAgICAgICAgY2hhcnNldCA9IGRvY3VtZW50KCktPmNoYXJzZXQoKTsKIAotICAgICAg
ICAgICAgICAgIG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRl
cigpLT5yZXF1ZXN0Q1NTU3R5bGVTaGVldCh1cmwsIGNoYXJzZXQpOworICAgICAgICAgICAgICAg
IG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1
ZXN0Q1NTU3R5bGVTaGVldChyZXF1ZXN0LCBjaGFyc2V0KTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChtX2NhY2hlZFNoZWV0KQogICAgICAgICAgICAgICAgIG1fY2FjaGVkU2hlZXQt
PmFkZENsaWVudCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3MTAzKQorKysgU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzMgQEAKKzIw
MTEtMDUtMjMgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgQ2FjaGVkUmVzb3Vy
Y2VzIHRvIHRha2UgYSBSZXNvdXJjZVJlcXVlc3QgaW5zdGVhZCBvZgorICAgICAgICBhIHVybCBp
biB0aGVpciBjb25zdHJ1Y3RvcnMgYW5kIHByb3ZpZGUgYSB2ZXJ5IG1pbmltYWwgc2V0IG9mCisg
ICAgICAgIGNhc2VzIGZvciBhdm9pZGluZyByZXVzaW5nIGEgQ2FjaGVkUmVzb3VyY2UuIFRoZSBS
ZXNvdXJjZVJlcXVlc3QKKyAgICAgICAgcGFydCBvZiB0aGlzIGNoYW5nZSByZXF1aXJlcyBwdXNo
aW5nIHJlc3BvbnNpYmlsaXR5CisgICAgICAgIGZvciBjYWxsaW5nIERvY3VtZW50Ojpjb21wbGV0
ZVVSTCgpIHRvIHRoZSBjYWxsZXIsIGluc3RlYWQgb2YKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VM
b2FkZXIsIHNpbmNlIFJlc291cmNlUmVxdWVzdCBBU1NFUlRzIGlmIGl0CisgICAgICAgIGlzIGNv
bnN0cnVjdGVkIHdpdGggYW4gaW52YWxpZCB1cmwuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMzE4CisKKyAgICAgICAgUmVmYWN0b3IsIG5vIG5l
dyB0ZXN0cy4KKworICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUpOgorICAgICAgICAqIGNz
cy9DU1NJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlVmFsdWU6OmNh
Y2hlZEltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTSW1wb3J0UnVsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NJbXBvcnRSdWxlOjppbnNlcnRlZEludG9QYXJlbnQpOgorICAgICAgICAqIGRv
bS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2lu
Z0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2hlZXQpOgorICAgICAgICAqIGRvbS9TY3JpcHRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnJlcXVlc3RTY3JpcHQp
OgorICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxMaW5rRWxlbWVudDo6cHJvY2Vzcyk6CisgICAgICAgICogbG9hZGVyL0ltYWdlTG9hZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCk6
CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkQ1NTU3R5bGVTaGVldDo6Q2FjaGVkQ1NTU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRDU1NTdHlsZVNoZWV0OjpkaWRBZGRDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkQ1NTU3R5bGVTaGVldDo6Y2hlY2tOb3RpZnkpOgorICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgICogbG9hZGVy
L2NhY2hlL0NhY2hlZEZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkRm9udDo6Q2Fj
aGVkRm9udCk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaDoKKyAgICAgICAg
KiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
SW1hZ2U6OkNhY2hlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpjaGVj
a1Nob3VsZFBhaW50QnJva2VuSW1hZ2UpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJ
bWFnZS5oOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6Q2FjaGVkUmVzb3VyY2UpOgorICAgICAgICAo
V2ViQ29yZTo6cmV1c2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
OjphbGxvd1JldXNlT2ZSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
OjpyZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmNhblVz
ZUNhY2hlVmFsaWRhdG9yKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2Uu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpyZXNvdXJjZVJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnVybCk6CisgICAgICAgICogbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlUmVxdWVz
dDo6bG9hZCk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRTY3JpcHQ6OkNhY2hlZFNjcmlwdCk6CisgICAgICAgICogbG9h
ZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5oOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRY
U0xTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFhTTFN0eWxlU2hlZXQ6
OkNhY2hlZFhTTFN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkWFNMU3R5bGVT
aGVldDo6ZGlkQWRkQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFhTTFN0eWxlU2hl
ZXQ6OmNoZWNrTm90aWZ5KToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVT
aGVldC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6cmVxdWVzdEltYWdlUmVzb3VyY2UpOgorICAgICAg
ICAqIHN2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Rm9udEZhY2VVcmlFbGVtZW50Ojpsb2FkRm9udCk6CisgICAgICAgICogeG1sL1hTTEltcG9ydFJ1
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0KToKKwog
MjAxMS0wNS0yMyAgTWF0dGhldyBEZWxhbmV5ICA8bWRlbGFuZXlAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gODcwNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw4IEBA
CiAgICAgaWYgKGhyZWZFbGVtZW50ICYmIGhyZWZFbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBo
cmVmRWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jYWNoZWRJ
bWFnZSA9IG93bmVyRG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdElt
YWdlKGhyZWYoKSk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qob3duZXJEb2N1bWVudCgp
LT5jb21wbGV0ZVVSTChocmVmKCkpKTsKKyAgICBtX2NhY2hlZEltYWdlID0gb3duZXJEb2N1bWVu
dCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0SW1hZ2UocmVxdWVzdCk7CiAKICAg
ICBpZiAobV9jYWNoZWRJbWFnZSkKICAgICAgICAgbV9jYWNoZWRJbWFnZS0+YWRkQ2xpZW50KHRo
aXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5j
cHAJKHJldmlzaW9uIDg3MDc1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJp
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDggQEAKICAgICBTdHJpbmcg
aHJlZiA9IGdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7CiAgICAgaWYgKCFocmVm
LmlzTnVsbCgpKSB7ICAgICAgICAKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hl
ZFJlc291cmNlTG9hZGVyID0gZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKLSAg
ICAgICAgbV9jYWNoZWRGb250ID0gY2FjaGVkUmVzb3VyY2VMb2FkZXItPnJlcXVlc3RGb250KGhy
ZWYpOworICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChkb2N1bWVudCgpLT5jb21wbGV0
ZVVSTChocmVmKSk7CisgICAgICAgIG1fY2FjaGVkRm9udCA9IGNhY2hlZFJlc291cmNlTG9hZGVy
LT5yZXF1ZXN0Rm9udChyZXF1ZXN0KTsKICAgICAgICAgaWYgKG1fY2FjaGVkRm9udCkgewogICAg
ICAgICAgICAgbV9jYWNoZWRGb250LT5hZGRDbGllbnQodGhpcyk7CiAgICAgICAgICAgICBtX2Nh
Y2hlZEZvbnQtPmJlZ2luTG9hZElmTmVlZGVkKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHJldmlzaW9uIDg3MDc1KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjUsNyArMjY1LDggQEAKICAgICAgICAgfSBlbHNlIGlmIChtX3JlbEF0dHJpYnV0ZS5t
X2lzTGlua1ByZXJlbmRlcikKICAgICAgICAgICAgIHR5cGUgPSBDYWNoZWRSZXNvdXJjZTo6TGlu
a1ByZXJlbmRlcjsKIAotICAgICAgICBtX2NhY2hlZExpbmtSZXNvdXJjZSA9IGRvY3VtZW50KCkt
PmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnJlcXVlc3RMaW5rUmVzb3VyY2UodHlwZSwgbV91cmws
IHByaW9yaXR5KTsKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IGxpbmtSZXF1ZXN0KGRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKG1fdXJsKSk7CisgICAgICAgIG1fY2FjaGVkTGlua1Jlc291cmNlID0g
ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+cmVxdWVzdExpbmtSZXNvdXJjZSh0
eXBlLCBsaW5rUmVxdWVzdCwgcHJpb3JpdHkpOwogICAgICAgICBpZiAobV9jYWNoZWRMaW5rUmVz
b3VyY2UpCiAgICAgICAgICAgICBtX2NhY2hlZExpbmtSZXNvdXJjZS0+YWRkQ2xpZW50KHRoaXMp
OwogICAgIH0KQEAgLTMwNiw3ICszMDcsOCBAQAogCiAgICAgICAgIC8vIExvYWQgc3R5bGVzaGVl
dHMgdGhhdCBhcmUgbm90IG5lZWRlZCBmb3IgdGhlIHJlbmRlcmluZyBpbW1lZGlhdGVseSB3aXRo
IGxvdyBwcmlvcml0eS4KICAgICAgICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkgPSBi
bG9ja2luZyA/IFJlc291cmNlTG9hZFByaW9yaXR5VW5yZXNvbHZlZCA6IFJlc291cmNlTG9hZFBy
aW9yaXR5VmVyeUxvdzsKLSAgICAgICAgbV9jYWNoZWRTaGVldCA9IGRvY3VtZW50KCktPmNhY2hl
ZFJlc291cmNlTG9hZGVyKCktPnJlcXVlc3RDU1NTdHlsZVNoZWV0KG1fdXJsLCBjaGFyc2V0LCBw
cmlvcml0eSk7CisgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KGRvY3VtZW50KCktPmNv
bXBsZXRlVVJMKG1fdXJsKSk7CisgICAgICAgIG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVudCgpLT5j
YWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0Q1NTU3R5bGVTaGVldChyZXF1ZXN0LCBjaGFy
c2V0LCBwcmlvcml0eSk7CiAgICAgICAgIAogICAgICAgICBpZiAobV9jYWNoZWRTaGVldCkKICAg
ICAgICAgICAgIG1fY2FjaGVkU2hlZXQtPmFkZENsaWVudCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAJKHJldmlzaW9u
IDg3MDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsOCArMTk0LDEwIEBACiB7CiAgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKCJpbXBvcnQiLCBtX3J1bGUuZGF0YSgpLCBtX3J1bGUuc2l6ZSgpKSkgewog
ICAgICAgICBTdHJpbmcgdmFsdWUgPSBwYXJzZUNTU1N0cmluZ09yVVJMKG1fcnVsZVZhbHVlLmRh
dGEoKSwgbV9ydWxlVmFsdWUuc2l6ZSgpKTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5wcmVsb2Fk
KENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0LCB2YWx1ZSwgU3RyaW5nKCksIG1fc2Nhbm5p
bmdCb2R5KTsKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFJl
c291cmNlUmVxdWVzdCByZXF1ZXN0KG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHZhbHVlKSk7Cisg
ICAgICAgICAgICBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5wcmVsb2FkKENh
Y2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0LCByZXF1ZXN0LCBTdHJpbmcoKSwgbV9zY2Fubmlu
Z0JvZHkpOworICAgICAgICB9CiAgICAgICAgIG1fc3RhdGUgPSBJbml0aWFsOwogICAgIH0gZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoImNoYXJzZXQiLCBtX3J1bGUuZGF0YSgpLCBtX3J1bGUu
c2l6ZSgpKSkKICAgICAgICAgbV9zdGF0ZSA9IEluaXRpYWw7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAJKHJldmlzaW9uIDg3
MDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDEyICsxMjYsMTMgQEAKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIg
PSBkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAgICAgICAgUmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwobV91cmxUb0xvYWQpOwogICAgICAg
ICBpZiAobV90YWdOYW1lID09IHNjcmlwdFRhZykKLSAgICAgICAgICAgIGNhY2hlZFJlc291cmNl
TG9hZGVyLT5wcmVsb2FkKENhY2hlZFJlc291cmNlOjpTY3JpcHQsIG1fdXJsVG9Mb2FkLCBtX2No
YXJzZXQsIHNjYW5uaW5nQm9keSk7CisgICAgICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci0+
cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6U2NyaXB0LCByZXF1ZXN0LCBtX2NoYXJzZXQsIHNjYW5u
aW5nQm9keSk7CiAgICAgICAgIGVsc2UgaWYgKG1fdGFnTmFtZSA9PSBpbWdUYWcgfHwgKG1fdGFn
TmFtZSA9PSBpbnB1dFRhZyAmJiBtX2lucHV0SXNJbWFnZSkpCi0gICAgICAgICAgICBjYWNoZWRS
ZXNvdXJjZUxvYWRlci0+cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSwgbV91
cmxUb0xvYWQsIFN0cmluZygpLCBzY2FubmluZ0JvZHkpOworICAgICAgICAgICAgY2FjaGVkUmVz
b3VyY2VMb2FkZXItPnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIHJlcXVl
c3QsIFN0cmluZygpLCBzY2FubmluZ0JvZHkpOwogICAgICAgICBlbHNlIGlmIChtX3RhZ05hbWUg
PT0gbGlua1RhZyAmJiBtX2xpbmtJc1N0eWxlU2hlZXQgJiYgbV9saW5rTWVkaWFBdHRyaWJ1dGVJ
c1NjcmVlbikgCi0gICAgICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci0+cHJlbG9hZChDYWNo
ZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCwgbV91cmxUb0xvYWQsIG1fY2hhcnNldCwgc2Nhbm5p
bmdCb2R5KTsKKyAgICAgICAgICAgIGNhY2hlZFJlc291cmNlTG9hZGVyLT5wcmVsb2FkKENhY2hl
ZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0LCByZXF1ZXN0LCBtX2NoYXJzZXQsIHNjYW5uaW5nQm9k
eSk7CiAgICAgfQogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV90YWdOYW1lOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9y
LmNwcAkocmV2aXNpb24gODcwNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDcgKzI0NSw4IEBACiAgICAgICAgICAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBtX2RvY3VtZW50ID8gbV9kb2N1bWVudC0+ZnJhbWUoKSA/IG1f
ZG9jdW1lbnQtPmZyYW1lKCktPnNldHRpbmdzKCkgOiAwIDogMDsKICAgICAgICAgICAgIGJvb2wg
YWxsb3dEb3dubG9hZGluZyA9IGZvdW5kU1ZHRm9udCB8fCAoc2V0dGluZ3MgJiYgc2V0dGluZ3Mt
PmRvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCgpKTsKICAgICAgICAgICAgIGlmIChhbGxv
d0Rvd25sb2FkaW5nICYmIGl0ZW0tPmlzU3VwcG9ydGVkRm9ybWF0KCkgJiYgbV9kb2N1bWVudCkg
ewotICAgICAgICAgICAgICAgIENhY2hlZEZvbnQqIGNhY2hlZEZvbnQgPSBtX2RvY3VtZW50LT5j
YWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0Rm9udChpdGVtLT5yZXNvdXJjZSgpKTsKKyAg
ICAgICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChtX2RvY3VtZW50LT5jb21wbGV0
ZVVSTChpdGVtLT5yZXNvdXJjZSgpKSk7CisgICAgICAgICAgICAgICAgQ2FjaGVkRm9udCogY2Fj
aGVkRm9udCA9IG1fZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnJlcXVlc3RGb250
KHJlcXVlc3QpOwogICAgICAgICAgICAgICAgIGlmIChjYWNoZWRGb250KSB7CiAgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZSA9IG5ldyBDU1NGb250RmFjZVNvdXJjZShpdGVtLT5yZXNvdXJjZSgp
LCBjYWNoZWRGb250KTsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ltYWdlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NJbWFnZVZhbHVlLmNwcAkocmV2aXNpb24gODcwNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTSW1hZ2VWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNp
bmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCiAKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgi
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKQEAg
LTcxLDcgKzcyLDggQEAKICAgICBpZiAoIW1fYWNjZXNzZWRJbWFnZSkgewogICAgICAgICBtX2Fj
Y2Vzc2VkSW1hZ2UgPSB0cnVlOwogCi0gICAgICAgIGlmIChDYWNoZWRJbWFnZSogY2FjaGVkSW1h
Z2UgPSBsb2FkZXItPnJlcXVlc3RJbWFnZSh1cmwpKSB7CisgICAgICAgIFJlc291cmNlUmVxdWVz
dCByZXF1ZXN0KGxvYWRlci0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKSk7CisgICAgICAg
IGlmIChDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBsb2FkZXItPnJlcXVlc3RJbWFnZShyZXF1
ZXN0KSkgewogICAgICAgICAgICAgY2FjaGVkSW1hZ2UtPmFkZENsaWVudCh0aGlzKTsKICAgICAg
ICAgICAgIG1faW1hZ2UgPSBTdHlsZUNhY2hlZEltYWdlOjpjcmVhdGUoY2FjaGVkSW1hZ2UpOwog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCShyZXZpc2lv
biA4NzA3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM0LDEwICsxMzQsMTEgQEAKICAgICAgICAgcm9vdCA9IGN1cnI7CiAgICAg
fQogCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QocGFyZW50U2hlZXQtPmRvY3VtZW50KCkt
PmNvbXBsZXRlVVJMKGFic0hyZWYpKTsKICAgICBpZiAocGFyZW50U2hlZXQtPmlzVXNlclN0eWxl
U2hlZXQoKSkKLSAgICAgICAgbV9jYWNoZWRTaGVldCA9IGNhY2hlZFJlc291cmNlTG9hZGVyLT5y
ZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQoYWJzSHJlZiwgcGFyZW50U2hlZXQtPmNoYXJzZXQoKSk7
CisgICAgICAgIG1fY2FjaGVkU2hlZXQgPSBjYWNoZWRSZXNvdXJjZUxvYWRlci0+cmVxdWVzdFVz
ZXJDU1NTdHlsZVNoZWV0KHJlcXVlc3QsIHBhcmVudFNoZWV0LT5jaGFyc2V0KCkpOwogICAgIGVs
c2UKLSAgICAgICAgbV9jYWNoZWRTaGVldCA9IGNhY2hlZFJlc291cmNlTG9hZGVyLT5yZXF1ZXN0
Q1NTU3R5bGVTaGVldChhYnNIcmVmLCBwYXJlbnRTaGVldC0+Y2hhcnNldCgpKTsKKyAgICAgICAg
bV9jYWNoZWRTaGVldCA9IGNhY2hlZFJlc291cmNlTG9hZGVyLT5yZXF1ZXN0Q1NTU3R5bGVTaGVl
dChyZXF1ZXN0LCBwYXJlbnRTaGVldC0+Y2hhcnNldCgpKTsKICAgICBpZiAobV9jYWNoZWRTaGVl
dCkgewogICAgICAgICAvLyBpZiB0aGUgaW1wb3J0IHJ1bGUgaXMgaXNzdWVkIGR5bmFtaWNhbGx5
LCB0aGUgc2hlZXQgbWF5IGJlCiAgICAgICAgIC8vIHJlbW92ZWQgZnJvbSB0aGUgcGVuZGluZyBz
aGVldCBjb3VudCwgc28gbGV0IHRoZSBkb2Mga25vdwpJbmRleDogU291cmNlL1dlYkNvcmUveG1s
L1hTTEltcG9ydFJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xJ
bXBvcnRSdWxlLmNwcAkocmV2aXNpb24gODcwNzUpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFNM
SW1wb3J0UnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1
ZGUgIkNhY2hlZFhTTFN0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiWFNMU3R5bGVTaGVldC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05OCw3ICs5OSw4IEBACiAgICAgICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAotICAgIG1fY2FjaGVkU2hlZXQgPSBjYWNoZWRSZXNvdXJjZUxvYWRl
ci0+cmVxdWVzdFhTTFN0eWxlU2hlZXQoYWJzSHJlZik7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJl
cXVlc3QoY2FjaGVkUmVzb3VyY2VMb2FkZXItPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGFic0hy
ZWYpKTsKKyAgICBtX2NhY2hlZFNoZWV0ID0gY2FjaGVkUmVzb3VyY2VMb2FkZXItPnJlcXVlc3RY
U0xTdHlsZVNoZWV0KHJlcXVlc3QpOwogICAgIAogICAgIGlmIChtX2NhY2hlZFNoZWV0KSB7CiAg
ICAgICAgIG1fY2FjaGVkU2hlZXQtPmFkZENsaWVudCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAJKHJldmlzaW9uIDg3MDc1KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw4ICs1Niw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ2FjaGVkRm9udDo6Q2Fj
aGVkRm9udChjb25zdCBTdHJpbmcgJnVybCkKLSAgICA6IENhY2hlZFJlc291cmNlKHVybCwgRm9u
dFJlc291cmNlKQorQ2FjaGVkRm9udDo6Q2FjaGVkRm9udChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlc291cmNlUmVxdWVzdCkKKyAgICA6IENhY2hlZFJlc291cmNlKHJlc291cmNlUmVxdWVzdCwg
Rm9udFJlc291cmNlKQogICAgICwgbV9mb250RGF0YSgwKQogICAgICwgbV9sb2FkSW5pdGlhdGVk
KGZhbHNlKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0
eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkQ1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiA4NzA3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcg
KzM3LDcgQEAKIAogICAgIGNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQgOiBwdWJsaWMgQ2FjaGVk
UmVzb3VyY2UgewogICAgIHB1YmxpYzoKLSAgICAgICAgQ2FjaGVkQ1NTU3R5bGVTaGVldChjb25z
dCBTdHJpbmcmIFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKKyAgICAgICAgQ2FjaGVkQ1NT
U3R5bGVTaGVldChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQp
OwogICAgICAgICB2aXJ0dWFsIH5DYWNoZWRDU1NTdHlsZVNoZWV0KCk7CiAKICAgICAgICAgY29u
c3QgU3RyaW5nIHNoZWV0VGV4dChib29sIGVuZm9yY2VNSU1FVHlwZSA9IHRydWUsIGJvb2wqIGhh
c1ZhbGlkTUlNRVR5cGUgPSAwKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRTY3JpcHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkU2NyaXB0LmgJKHJldmlzaW9uIDg3MDc1KQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3
IEBACiAKICAgICBjbGFzcyBDYWNoZWRTY3JpcHQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2Ugewog
ICAgIHB1YmxpYzoKLSAgICAgICAgQ2FjaGVkU2NyaXB0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcmIGNoYXJzZXQpOworICAgICAgICBDYWNoZWRTY3JpcHQoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKICAgICAgICAgdmlydHVhbCB+Q2FjaGVk
U2NyaXB0KCk7CiAKICAgICAgICAgY29uc3QgU3RyaW5nJiBzY3JpcHQoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAkocmV2aXNpb24gODcwNzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw3ICs0Niw3IEBACiAKIGNsYXNzIENhY2hlZEZvbnQgOiBwdWJsaWMgQ2FjaGVkUmVzb3Vy
Y2UgewogcHVibGljOgotICAgIENhY2hlZEZvbnQoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIENh
Y2hlZEZvbnQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgdmlydHVhbCB+Q2FjaGVkRm9u
dCgpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiBj
YWNoZWRSZXNvdXJjZUxvYWRlcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDg3MDc1KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTUsMjggKzU1LDI4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIENhY2hlZFJlc291cmNlKiBjcmVhdGVSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlw
ZSB0eXBlLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKK3N0YXRpYyBD
YWNoZWRSZXNvdXJjZSogY3JlYXRlUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCiB7CiAgICAg
c3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToK
LSAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRJbWFnZSh1cmwuc3RyaW5nKCkpOworICAgICAgICBy
ZXR1cm4gbmV3IENhY2hlZEltYWdlKHJlcXVlc3QpOwogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkNTU1N0eWxlU2hlZXQ6Ci0gICAgICAgIHJldHVybiBuZXcgQ2FjaGVkQ1NTU3R5bGVTaGVldCh1
cmwuc3RyaW5nKCksIGNoYXJzZXQpOworICAgICAgICByZXR1cm4gbmV3IENhY2hlZENTU1N0eWxl
U2hlZXQocmVxdWVzdCwgY2hhcnNldCk7CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0
OgotICAgICAgICByZXR1cm4gbmV3IENhY2hlZFNjcmlwdCh1cmwuc3RyaW5nKCksIGNoYXJzZXQp
OworICAgICAgICByZXR1cm4gbmV3IENhY2hlZFNjcmlwdChyZXF1ZXN0LCBjaGFyc2V0KTsKICAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBuZXcg
Q2FjaGVkRm9udCh1cmwuc3RyaW5nKCkpOworICAgICAgICByZXR1cm4gbmV3IENhY2hlZEZvbnQo
cmVxdWVzdCk7CiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNM
U3R5bGVTaGVldDoKLSAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRYU0xTdHlsZVNoZWV0KHVybC5z
dHJpbmcoKSk7CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkWFNMU3R5bGVTaGVldChyZXF1ZXN0
KTsKICNlbmRpZgogI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQogICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OkxpbmtQcmVmZXRjaDoKLSAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRSZXNvdXJjZSh1
cmwuc3RyaW5nKCksIENhY2hlZFJlc291cmNlOjpMaW5rUHJlZmV0Y2gpOworICAgICAgICByZXR1
cm4gbmV3IENhY2hlZFJlc291cmNlKHJlcXVlc3QsIENhY2hlZFJlc291cmNlOjpMaW5rUHJlZmV0
Y2gpOwogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVyZW5kZXI6Ci0gICAgICAgIHJl
dHVybiBuZXcgQ2FjaGVkUmVzb3VyY2UodXJsLnN0cmluZygpLCBDYWNoZWRSZXNvdXJjZTo6TGlu
a1ByZXJlbmRlcik7CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkUmVzb3VyY2UocmVxdWVzdCwg
Q2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVyZW5kZXIpOwogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkxpbmtTdWJyZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRSZXNvdXJjZSh1cmwu
c3RyaW5nKCksIENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2UpOworICAgICAgICByZXR1
cm4gbmV3IENhY2hlZFJlc291cmNlKHJlcXVlc3QsIENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVz
b3VyY2UpOwogI2VuZGlmCiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTI0
LDcgKzEyNCw3IEBACiAgICAgcmV0dXJuIG1fZG9jdW1lbnQgPyBtX2RvY3VtZW50LT5mcmFtZSgp
IDogMDsKIH0KIAotQ2FjaGVkSW1hZ2UqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0SW1h
Z2UoY29uc3QgU3RyaW5nJiB1cmwpCitDYWNoZWRJbWFnZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OnJlcXVlc3RJbWFnZShSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgaWYgKEZyYW1l
KiBmID0gZnJhbWUoKSkgewogICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmLT5zZXR0aW5n
cygpOwpAQCAtMTMyLDEzICsxMzIsMTMgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAg
ICAgIGlmIChmLT5sb2FkZXIoKS0+cGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkKCkp
IHsKLSAgICAgICAgICAgIEtVUkwgY29tcGxldGVVUkwgPSBtX2RvY3VtZW50LT5jb21wbGV0ZVVS
TCh1cmwpOwotICAgICAgICAgICAgaWYgKGNvbXBsZXRlVVJMLmlzVmFsaWQoKSAmJiBjYW5SZXF1
ZXN0KENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlLCBjb21wbGV0ZVVSTCkpCi0gICAgICAg
ICAgICAgICAgUGluZ0xvYWRlcjo6bG9hZEltYWdlKGYsIGNvbXBsZXRlVVJMKTsKKyAgICAgICAg
ICAgIEtVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QudXJsKCk7CisgICAgICAgICAgICBpZiAocmVx
dWVzdFVSTC5pc1ZhbGlkKCkgJiYgY2FuUmVxdWVzdChDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNv
dXJjZSwgcmVxdWVzdFVSTCkpCisgICAgICAgICAgICAgICAgUGluZ0xvYWRlcjo6bG9hZEltYWdl
KGYsIHJlcXVlc3RVUkwpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgQ2FjaGVkSW1hZ2UqIHJlc291cmNlID0gc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2UqPihy
ZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIHVybCwgU3RyaW5n
KCkpKTsKKyAgICBDYWNoZWRJbWFnZSogcmVzb3VyY2UgPSBzdGF0aWNfY2FzdDxDYWNoZWRJbWFn
ZSo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSwgcmVxdWVz
dCwgU3RyaW5nKCkpKTsKICAgICBpZiAoYXV0b0xvYWRJbWFnZXMoKSAmJiByZXNvdXJjZSAmJiBy
ZXNvdXJjZS0+c3RpbGxOZWVkc0xvYWQoKSkgewogICAgICAgICByZXNvdXJjZS0+c2V0TG9hZGlu
Zyh0cnVlKTsKICAgICAgICAgbG9hZChyZXNvdXJjZSwgdHJ1ZSk7CkBAIC0xNDYsMjYgKzE0Niwy
OSBAQAogICAgIHJldHVybiByZXNvdXJjZTsKIH0KIAotQ2FjaGVkRm9udCogQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OnJlcXVlc3RGb250KGNvbnN0IFN0cmluZyYgdXJsKQorQ2FjaGVkRm9udCogQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RGb250KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
IHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkRm9udCo+KHJlcXVlc3RSZXNvdXJjZShD
YWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlLCB1cmwsIFN0cmluZygpKSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PENhY2hlZEZvbnQqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6
OkZvbnRSZXNvdXJjZSwgcmVxdWVzdCwgU3RyaW5nKCkpKTsKIH0KIAotQ2FjaGVkQ1NTU3R5bGVT
aGVldCogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RDU1NTdHlsZVNoZWV0KGNvbnN0IFN0
cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIFJlc291cmNlTG9hZFByaW9yaXR5IHBy
aW9yaXR5KQorQ2FjaGVkQ1NTU3R5bGVTaGVldCogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVl
c3RDU1NTdHlsZVNoZWV0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3RyaW5nJiBj
aGFyc2V0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKIHsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q2FjaGVkQ1NTU3R5bGVTaGVldCo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNv
dXJjZTo6Q1NTU3R5bGVTaGVldCwgdXJsLCBjaGFyc2V0LCBwcmlvcml0eSkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDYWNoZWRDU1NTdHlsZVNoZWV0Kj4ocmVxdWVzdFJlc291cmNlKENhY2hl
ZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0LCByZXF1ZXN0LCBjaGFyc2V0LCBwcmlvcml0eSkpOwog
fQogCi1DYWNoZWRDU1NTdHlsZVNoZWV0KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFVz
ZXJDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgcmVxdWVzdFVSTCwgY29uc3QgU3RyaW5nJiBj
aGFyc2V0KQorQ2FjaGVkQ1NTU3R5bGVTaGVldCogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVl
c3RVc2VyQ1NTU3R5bGVTaGVldChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmlu
ZyYgY2hhcnNldCkKIHsKLSAgICBLVVJMIHVybCA9IE1lbW9yeUNhY2hlOjpyZW1vdmVGcmFnbWVu
dElkZW50aWZpZXJJZk5lZWRlZChLVVJMKEtVUkwoKSwgcmVxdWVzdFVSTCkpOworICAgIEtVUkwg
dXJsID0gTWVtb3J5Q2FjaGU6OnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVkKHJlcXVl
c3QudXJsKCkpOwogCiAgICAgaWYgKENhY2hlZFJlc291cmNlKiBleGlzdGluZyA9IG1lbW9yeUNh
Y2hlKCktPnJlc291cmNlRm9yVVJMKHVybCkpIHsKICAgICAgICAgaWYgKGV4aXN0aW5nLT50eXBl
KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQpCiAgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q2FjaGVkQ1NTU3R5bGVTaGVldCo+KGV4aXN0aW5nKTsKICAgICAgICAgbWVt
b3J5Q2FjaGUoKS0+cmVtb3ZlKGV4aXN0aW5nKTsKICAgICB9Ci0gICAgQ2FjaGVkQ1NTU3R5bGVT
aGVldCogdXNlclNoZWV0ID0gbmV3IENhY2hlZENTU1N0eWxlU2hlZXQodXJsLCBjaGFyc2V0KTsK
KyAgICBpZiAodXJsLnN0cmluZygpICE9IHJlcXVlc3QudXJsKCkpCisgICAgICAgIHJlcXVlc3Qu
c2V0VVJMKHVybCk7CisKKyAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KiB1c2VyU2hlZXQgPSBuZXcg
Q2FjaGVkQ1NTU3R5bGVTaGVldChyZXF1ZXN0LCBjaGFyc2V0KTsKICAgICAKICAgICBib29sIGlu
Q2FjaGUgPSBtZW1vcnlDYWNoZSgpLT5hZGQodXNlclNoZWV0KTsKICAgICBpZiAoIWluQ2FjaGUp
CkBAIC0xNzksMjQgKzE4MiwyNCBAQAogICAgIHJldHVybiB1c2VyU2hlZXQ7CiB9CiAKLUNhY2hl
ZFNjcmlwdCogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKK0NhY2hlZFNjcmlwdCogQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OnJlcXVlc3RTY3JpcHQoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBT
dHJpbmcmIGNoYXJzZXQpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhY2hlZFNjcmlwdCo+
KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6U2NyaXB0LCB1cmwsIGNoYXJzZXQpKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkU2NyaXB0Kj4ocmVxdWVzdFJlc291cmNlKENh
Y2hlZFJlc291cmNlOjpTY3JpcHQsIHJlcXVlc3QsIGNoYXJzZXQpKTsKIH0KIAogI2lmIEVOQUJM
RShYU0xUKQotQ2FjaGVkWFNMU3R5bGVTaGVldCogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVl
c3RYU0xTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsKQorQ2FjaGVkWFNMU3R5bGVTaGVldCog
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RYU0xTdHlsZVNoZWV0KFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkWFNMU3R5bGVTaGVl
dCo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldCwgdXJsLCBT
dHJpbmcoKSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWNoZWRYU0xTdHlsZVNoZWV0Kj4o
cmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0LCByZXF1ZXN0LCBT
dHJpbmcoKSkpOwogfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKLUNhY2hl
ZFJlc291cmNlKiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdExpbmtSZXNvdXJjZShDYWNo
ZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgUmVzb3VyY2VMb2FkUHJp
b3JpdHkgcHJpb3JpdHkpCitDYWNoZWRSZXNvdXJjZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJl
cXVlc3RMaW5rUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKIHsKICAgICBBU1NF
UlQoZnJhbWUoKSk7CiAgICAgQVNTRVJUKHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVm
ZXRjaCB8fCB0eXBlID09IENhY2hlZFJlc291cmNlOjpMaW5rUHJlcmVuZGVyIHx8IHR5cGUgPT0g
Q2FjaGVkUmVzb3VyY2U6OkxpbmtTdWJyZXNvdXJjZSk7Ci0gICAgcmV0dXJuIHJlcXVlc3RSZXNv
dXJjZSh0eXBlLCB1cmwsIFN0cmluZygpLCBwcmlvcml0eSk7CisgICAgcmV0dXJuIHJlcXVlc3RS
ZXNvdXJjZSh0eXBlLCByZXF1ZXN0LCBTdHJpbmcoKSwgcHJpb3JpdHkpOwogfQogI2VuZGlmCiAK
QEAgLTMwOCw5ICszMTEsOSBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1DYWNoZWRSZXNvdXJj
ZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6
VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHJlc291cmNlVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJz
ZXQsIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5LCBib29sIGZvclByZWxvYWQpCitDYWNo
ZWRSZXNvdXJjZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZShDYWNoZWRS
ZXNvdXJjZTo6VHlwZSB0eXBlLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmlu
ZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHksIGJvb2wgZm9yUHJlbG9h
ZCkKIHsKLSAgICBLVVJMIHVybCA9IG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHJlc291cmNlVVJM
KTsKKyAgICBLVVJMIHVybCA9IHJlcXVlc3QudXJsKCk7CiAgICAgCiAgICAgTE9HKFJlc291cmNl
TG9hZGluZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UgJyVzJywgY2hh
cnNldCAnJXMnLCBwcmlvcml0eT0lZCwgZm9yUHJlbG9hZD0ldSIsIHVybC5zdHJpbmcoKS5sYXRp
bjEoKS5kYXRhKCksIGNoYXJzZXQubGF0aW4xKCkuZGF0YSgpLCBwcmlvcml0eSwgZm9yUHJlbG9h
ZCk7CiAgICAgCkBAIC0zMzQsMTMgKzMzNywxNiBAQAogICAgIC8vIFNlZSBpZiB3ZSBjYW4gdXNl
IGFuIGV4aXN0aW5nIHJlc291cmNlIGZyb20gdGhlIGNhY2hlLgogICAgIENhY2hlZFJlc291cmNl
KiByZXNvdXJjZSA9IG1lbW9yeUNhY2hlKCktPnJlc291cmNlRm9yVVJMKHVybCk7CiAKKyAgICBp
ZiAocmVxdWVzdC51cmwoKSAhPSB1cmwpCisgICAgICAgIHJlcXVlc3Quc2V0VVJMKHVybCk7CisK
ICAgICBzd2l0Y2ggKGRldGVybWluZVJldmFsaWRhdGlvblBvbGljeSh0eXBlLCBmb3JQcmVsb2Fk
LCByZXNvdXJjZSkpIHsKICAgICBjYXNlIExvYWQ6Ci0gICAgICAgIHJlc291cmNlID0gbG9hZFJl
c291cmNlKHR5cGUsIHVybCwgY2hhcnNldCwgcHJpb3JpdHkpOworICAgICAgICByZXNvdXJjZSA9
IGxvYWRSZXNvdXJjZSh0eXBlLCByZXF1ZXN0LCBjaGFyc2V0LCBwcmlvcml0eSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgUmVsb2FkOgogICAgICAgICBtZW1vcnlDYWNoZSgpLT5yZW1vdmUo
cmVzb3VyY2UpOwotICAgICAgICByZXNvdXJjZSA9IGxvYWRSZXNvdXJjZSh0eXBlLCB1cmwsIGNo
YXJzZXQsIHByaW9yaXR5KTsKKyAgICAgICAgcmVzb3VyY2UgPSBsb2FkUmVzb3VyY2UodHlwZSwg
cmVxdWVzdCwgY2hhcnNldCwgcHJpb3JpdHkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFJl
dmFsaWRhdGU6CiAgICAgICAgIHJlc291cmNlID0gcmV2YWxpZGF0ZVJlc291cmNlKHJlc291cmNl
LCBwcmlvcml0eSk7CkBAIC0zNzAsNyArMzc2LDcgQEAKICAgICAKICAgICAvLyBDb3B5IHRoZSBV
Ukwgb3V0IG9mIHRoZSByZXNvdXJjZSB0byBiZSByZXZhbGlkYXRlZCBpbiBjYXNlIGl0IGdldHMg
ZGVsZXRlZCBieSB0aGUgcmVtb3ZlKCkgY2FsbCBiZWxvdy4KICAgICBTdHJpbmcgdXJsID0gcmVz
b3VyY2UtPnVybCgpOwotICAgIENhY2hlZFJlc291cmNlKiBuZXdSZXNvdXJjZSA9IGNyZWF0ZVJl
c291cmNlKHJlc291cmNlLT50eXBlKCksIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCByZXNv
dXJjZS0+ZW5jb2RpbmcoKSk7CisgICAgQ2FjaGVkUmVzb3VyY2UqIG5ld1Jlc291cmNlID0gY3Jl
YXRlUmVzb3VyY2UocmVzb3VyY2UtPnR5cGUoKSwgcmVzb3VyY2UtPnJlc291cmNlUmVxdWVzdCgp
LCByZXNvdXJjZS0+ZW5jb2RpbmcoKSk7CiAgICAgCiAgICAgTE9HKFJlc291cmNlTG9hZGluZywg
IlJlc291cmNlICVwIGNyZWF0ZWQgdG8gcmV2YWxpZGF0ZSAlcCIsIG5ld1Jlc291cmNlLCByZXNv
dXJjZSk7CiAgICAgbmV3UmVzb3VyY2UtPnNldFJlc291cmNlVG9SZXZhbGlkYXRlKHJlc291cmNl
KTsKQEAgLTM4NSwxMyArMzkxLDEzIEBACiAgICAgcmV0dXJuIG5ld1Jlc291cmNlOwogfQogCi1D
YWNoZWRSZXNvdXJjZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmxvYWRSZXNvdXJjZShDYWNoZWRS
ZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNl
dCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCitDYWNoZWRSZXNvdXJjZSogQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OmxvYWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgUmVzb3VyY2VM
b2FkUHJpb3JpdHkgcHJpb3JpdHkpCiB7Ci0gICAgQVNTRVJUKCFtZW1vcnlDYWNoZSgpLT5yZXNv
dXJjZUZvclVSTCh1cmwpKTsKKyAgICBBU1NFUlQoIW1lbW9yeUNhY2hlKCktPnJlc291cmNlRm9y
VVJMKHJlcXVlc3QudXJsKCkpKTsKICAgICAKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiTG9h
ZGluZyBDYWNoZWRSZXNvdXJjZSBmb3IgJyVzJy4iLCB1cmwuc3RyaW5nKCkubGF0aW4xKCkuZGF0
YSgpKTsKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiTG9hZGluZyBDYWNoZWRSZXNvdXJjZSBm
b3IgJyVzJy4iLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CiAgICAg
Ci0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gY3JlYXRlUmVzb3VyY2UodHlwZSwgdXJs
LCBjaGFyc2V0KTsKKyAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBjcmVhdGVSZXNvdXJj
ZSh0eXBlLCByZXF1ZXN0LCBjaGFyc2V0KTsKICAgICAKICAgICBib29sIGluQ2FjaGUgPSBtZW1v
cnlDYWNoZSgpLT5hZGQocmVzb3VyY2UpOwogICAgIApAQCAtNDE3LDcgKzQyMyw3IEBACiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIG1fdmFsaWRhdGVkVVJMcy5hZGQodXJsLnN0cmlu
ZygpKTsKKyAgICBtX3ZhbGlkYXRlZFVSTHMuYWRkKHJlcXVlc3QudXJsKCkpOwogICAgIHJldHVy
biByZXNvdXJjZTsKIH0KIApAQCAtNjMyLDcgKzYzOCw3IEBACiAgICAgcmV0dXJuIG1fcmVxdWVz
dENvdW50OwogfQogICAgIAotdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cHJlbG9hZChDYWNo
ZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBj
aGFyc2V0LCBib29sIHJlZmVyZW5jZWRGcm9tQm9keSkKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIGJvb2wgcmVmZXJlbmNlZEZyb21Cb2R5KQog
ewogICAgIC8vIEZJWE1FOiBSaXAgdGhpcyBvdXQgd2hlbiB3ZSBhcmUgc3VyZSBpdCBpcyBubyBs
b25nZXIgbmVjZXNzYXJ5IChldmVuIGZvciBtb2JpbGUpLgogICAgIFVOVVNFRF9QQVJBTShyZWZl
cmVuY2VkRnJvbUJvZHkpOwpAQCAtNjQyLDExICs2NDgsMTEgQEAKICAgICBpZiAoIWhhc1JlbmRl
cmluZyAmJiAhY2FuQmxvY2tQYXJzZXIpIHsKICAgICAgICAgLy8gRG9uJ3QgcHJlbG9hZCBzdWJy
ZXNvdXJjZXMgdGhhdCBjYW4ndCBibG9jayB0aGUgcGFyc2VyIGJlZm9yZSB3ZSBoYXZlIHNvbWV0
aGluZyB0byBkcmF3LgogICAgICAgICAvLyBUaGlzIGhlbHBzIHByZXZlbnQgcHJlbG9hZHMgZnJv
bSBkZWxheWluZyBmaXJzdCBkaXNwbGF5IHdoZW4gYmFuZHdpZHRoIGlzIGxpbWl0ZWQuCi0gICAg
ICAgIFBlbmRpbmdQcmVsb2FkIHBlbmRpbmdQcmVsb2FkID0geyB0eXBlLCB1cmwsIGNoYXJzZXQg
fTsKKyAgICAgICAgUGVuZGluZ1ByZWxvYWQgcGVuZGluZ1ByZWxvYWQgPSB7IHR5cGUsIHJlcXVl
c3QsIGNoYXJzZXQgfTsKICAgICAgICAgbV9wZW5kaW5nUHJlbG9hZHMuYXBwZW5kKHBlbmRpbmdQ
cmVsb2FkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICByZXF1ZXN0UHJlbG9hZCh0eXBl
LCB1cmwsIGNoYXJzZXQpOworICAgIHJlcXVlc3RQcmVsb2FkKHR5cGUsIHJlcXVlc3QsIGNoYXJz
ZXQpOwogfQogCiB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpjaGVja0ZvclBlbmRpbmdQcmVs
b2FkcygpIApAQCAtNjU2LDE5ICs2NjIsMTkgQEAKICAgICB3aGlsZSAoIW1fcGVuZGluZ1ByZWxv
YWRzLmlzRW1wdHkoKSkgewogICAgICAgICBQZW5kaW5nUHJlbG9hZCBwcmVsb2FkID0gbV9wZW5k
aW5nUHJlbG9hZHMudGFrZUZpcnN0KCk7CiAgICAgICAgIC8vIERvbid0IHJlcXVlc3QgcHJlbG9h
ZCBpZiB0aGUgcmVzb3VyY2UgYWxyZWFkeSBsb2FkZWQgbm9ybWFsbHkgKHRoaXMgd2lsbCByZXN1
bHQgaW4gZG91YmxlIGxvYWQgaWYgdGhlIHBhZ2UgaXMgYmVpbmcgcmVsb2FkZWQgd2l0aCBjYWNo
ZWQgcmVzdWx0cyBpZ25vcmVkKS4KLSAgICAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZShtX2RvY3Vt
ZW50LT5jb21wbGV0ZVVSTChwcmVsb2FkLm1fdXJsKSkpCi0gICAgICAgICAgICByZXF1ZXN0UHJl
bG9hZChwcmVsb2FkLm1fdHlwZSwgcHJlbG9hZC5tX3VybCwgcHJlbG9hZC5tX2NoYXJzZXQpOwor
ICAgICAgICBpZiAoIWNhY2hlZFJlc291cmNlKHByZWxvYWQubV9yZXF1ZXN0LnVybCgpKSkKKyAg
ICAgICAgICAgIHJlcXVlc3RQcmVsb2FkKHByZWxvYWQubV90eXBlLCBwcmVsb2FkLm1fcmVxdWVz
dCwgcHJlbG9hZC5tX2NoYXJzZXQpOwogICAgIH0KICAgICBtX3BlbmRpbmdQcmVsb2Fkcy5jbGVh
cigpOwogfQogCi12b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UHJlbG9hZChDYWNo
ZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBj
aGFyc2V0KQordm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFByZWxvYWQoQ2FjaGVk
UmVzb3VyY2U6OlR5cGUgdHlwZSwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJp
bmcmIGNoYXJzZXQpCiB7CiAgICAgU3RyaW5nIGVuY29kaW5nOwogICAgIGlmICh0eXBlID09IENh
Y2hlZFJlc291cmNlOjpTY3JpcHQgfHwgdHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVT
aGVldCkKICAgICAgICAgZW5jb2RpbmcgPSBjaGFyc2V0LmlzRW1wdHkoKSA/IG1fZG9jdW1lbnQt
PmNoYXJzZXQoKSA6IGNoYXJzZXQ7CiAKLSAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBy
ZXF1ZXN0UmVzb3VyY2UodHlwZSwgdXJsLCBlbmNvZGluZywgUmVzb3VyY2VMb2FkUHJpb3JpdHlV
bnJlc29sdmVkLCB0cnVlKTsKKyAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSByZXF1ZXN0
UmVzb3VyY2UodHlwZSwgcmVxdWVzdCwgZW5jb2RpbmcsIFJlc291cmNlTG9hZFByaW9yaXR5VW5y
ZXNvbHZlZCwgdHJ1ZSk7CiAgICAgaWYgKCFyZXNvdXJjZSB8fCAobV9wcmVsb2FkcyAmJiBtX3By
ZWxvYWRzLT5jb250YWlucyhyZXNvdXJjZSkpKQogICAgICAgICByZXR1cm47CiAgICAgcmVzb3Vy
Y2UtPmluY3JlYXNlUHJlbG9hZENvdW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiA4NzA3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQAogCiAjaWYgRU5BQkxFKFhTTFQpCiAKLUNh
Y2hlZFhTTFN0eWxlU2hlZXQ6OkNhY2hlZFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nICZ1cmwp
Ci0gICAgOiBDYWNoZWRSZXNvdXJjZSh1cmwsIFhTTFN0eWxlU2hlZXQpCitDYWNoZWRYU0xTdHls
ZVNoZWV0OjpDYWNoZWRYU0xTdHlsZVNoZWV0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3Vy
Y2VSZXF1ZXN0KQorICAgIDogQ2FjaGVkUmVzb3VyY2UocmVzb3VyY2VSZXF1ZXN0LCBYU0xTdHls
ZVNoZWV0KQogICAgICwgbV9kZWNvZGVyKFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4
dC94c2wiKSkKIHsKICAgICAvLyBJdCdzIFhNTCB3ZSB3YW50LgpAQCAtNDksNyArNDksNyBAQAog
dm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGll
bnQqIGMpCiB7ICAKICAgICBpZiAoIWlzTG9hZGluZygpKQotICAgICAgICBjLT5zZXRYU0xTdHls
ZVNoZWV0KG1fdXJsLCBtX3Jlc3BvbnNlLnVybCgpLCBtX3NoZWV0KTsKKyAgICAgICAgYy0+c2V0
WFNMU3R5bGVTaGVldChtX3Jlc291cmNlUmVxdWVzdC51cmwoKSwgbV9yZXNwb25zZS51cmwoKSwg
bV9zaGVldCk7CiB9CiAKIHZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6c2V0RW5jb2RpbmcoY29u
c3QgU3RyaW5nJiBjaHMpCkBAIC04NCw3ICs4NCw3IEBACiAgICAgCiAgICAgQ2FjaGVkUmVzb3Vy
Y2VDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOwogICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNs
aWVudCAqYyA9IHcubmV4dCgpKQotICAgICAgICBjLT5zZXRYU0xTdHlsZVNoZWV0KG1fdXJsLCBt
X3Jlc3BvbnNlLnVybCgpLCBtX3NoZWV0KTsKKyAgICAgICAgYy0+c2V0WFNMU3R5bGVTaGVldCht
X3Jlc291cmNlUmVxdWVzdC51cmwoKSwgbV9yZXNwb25zZS51cmwoKSwgbV9zaGVldCk7CiB9CiAK
IHZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1cyBz
dGF0dXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5j
cHAJKHJldmlzaW9uIDg3MDc1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUNhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShjb25zdCBTdHJpbmcmIHVybCkK
LSAgICA6IENhY2hlZFJlc291cmNlKHVybCwgSW1hZ2VSZXNvdXJjZSkKK0NhY2hlZEltYWdlOjpD
YWNoZWRJbWFnZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKKyAgICA6
IENhY2hlZFJlc291cmNlKHJlc291cmNlUmVxdWVzdCwgSW1hZ2VSZXNvdXJjZSkKICAgICAsIG1f
aW1hZ2UoMCkKICAgICAsIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyKHRoaXMsICZDYWNoZWRJ
bWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQpCiAgICAgLCBtX3Nob3VsZFBhaW50
QnJva2VuSW1hZ2UodHJ1ZSkKQEAgLTYyLDcgKzYyLDcgQEAKIH0KIAogQ2FjaGVkSW1hZ2U6OkNh
Y2hlZEltYWdlKEltYWdlKiBpbWFnZSkKLSAgICA6IENhY2hlZFJlc291cmNlKFN0cmluZygpLCBJ
bWFnZVJlc291cmNlKQorICAgIDogQ2FjaGVkUmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0KCksIElt
YWdlUmVzb3VyY2UpCiAgICAgLCBtX2ltYWdlKGltYWdlKQogICAgICwgbV9kZWNvZGVkRGF0YURl
bGV0aW9uVGltZXIodGhpcywgJkNhY2hlZEltYWdlOjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJG
aXJlZCkKICAgICAsIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSh0cnVlKQpAQCAtMjI1LDcgKzIy
NSw3IEBACiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zaG91bGRQ
YWludEJyb2tlbkltYWdlID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+c2hvdWxkUGFpbnRC
cm9rZW5JbWFnZShLVVJMKFBhcnNlZFVSTFN0cmluZywgbV91cmwpKTsKKyAgICBtX3Nob3VsZFBh
aW50QnJva2VuSW1hZ2UgPSBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5zaG91bGRQYWludEJy
b2tlbkltYWdlKG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpKTsKIH0KIAogdm9pZCBDYWNoZWRJbWFn
ZTo6Y2xlYXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlTG9hZGVyLmgJKHJldmlzaW9uIDg3MDc1KQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDE3ICs2MCwxNyBAQAogICAgIENhY2hlZFJlc291cmNlTG9hZGVyKERvY3VtZW50Kik7CiAgICAg
fkNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAKLSAgICBDYWNoZWRJbWFnZSogcmVxdWVzdEltYWdl
KGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KiByZXF1ZXN0Q1NT
U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBSZXNv
dXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5VW5yZXNvbHZl
ZCk7Ci0gICAgQ2FjaGVkQ1NTU3R5bGVTaGVldCogcmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0KGNv
bnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwotICAgIENhY2hlZFNjcmlw
dCogcmVxdWVzdFNjcmlwdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0
KTsKLSAgICBDYWNoZWRGb250KiByZXF1ZXN0Rm9udChjb25zdCBTdHJpbmcmIHVybCk7CisgICAg
Q2FjaGVkSW1hZ2UqIHJlcXVlc3RJbWFnZShSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBDYWNoZWRD
U1NTdHlsZVNoZWV0KiByZXF1ZXN0Q1NTU3R5bGVTaGVldChSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBTdHJpbmcmIGNoYXJzZXQsIFJlc291cmNlTG9hZFByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJp
b3JpdHlVbnJlc29sdmVkKTsKKyAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KiByZXF1ZXN0VXNlckNT
U1N0eWxlU2hlZXQoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKKyAg
ICBDYWNoZWRTY3JpcHQqIHJlcXVlc3RTY3JpcHQoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3Ry
aW5nJiBjaGFyc2V0KTsKKyAgICBDYWNoZWRGb250KiByZXF1ZXN0Rm9udChSZXNvdXJjZVJlcXVl
c3QmKTsKIAogI2lmIEVOQUJMRShYU0xUKQotICAgIENhY2hlZFhTTFN0eWxlU2hlZXQqIHJlcXVl
c3RYU0xTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICBDYWNoZWRYU0xTdHlsZVNo
ZWV0KiByZXF1ZXN0WFNMU3R5bGVTaGVldChSZXNvdXJjZVJlcXVlc3QmKTsKICNlbmRpZgogI2lm
IEVOQUJMRShMSU5LX1BSRUZFVENIKQotICAgIENhY2hlZFJlc291cmNlKiByZXF1ZXN0TGlua1Jl
c291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlLCBjb25zdCBTdHJpbmcgJnVybCwgUmVzb3VyY2VM
b2FkUHJpb3JpdHkgcHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eVVucmVzb2x2ZWQpOwor
ICAgIENhY2hlZFJlc291cmNlKiByZXF1ZXN0TGlua1Jlc291cmNlKENhY2hlZFJlc291cmNlOjpU
eXBlLCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUxvYWRQcmlvcml0eSA9IFJlc291cmNlTG9h
ZFByaW9yaXR5VW5yZXNvbHZlZCk7CiAjZW5kaWYKIAogICAgIC8vIExvZ3MgYW4gYWNjZXNzIGRl
bmllZCBtZXNzYWdlIHRvIHRoZSBjb25zb2xlIGZvciB0aGUgc3BlY2lmaWVkIFVSTC4KQEAgLTEw
MywxNSArMTAzLDE1IEBACiAgICAgCiAgICAgdm9pZCBjbGVhclByZWxvYWRzKCk7CiAgICAgdm9p
ZCBjbGVhclBlbmRpbmdQcmVsb2FkcygpOwotICAgIHZvaWQgcHJlbG9hZChDYWNoZWRSZXNvdXJj
ZTo6VHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgYm9vbCBy
ZWZlcmVuY2VkRnJvbUJvZHkpOworICAgIHZvaWQgcHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6VHlw
ZSwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBib29sIHJlZmVyZW5j
ZWRGcm9tQm9keSk7CiAgICAgdm9pZCBjaGVja0ZvclBlbmRpbmdQcmVsb2FkcygpOwogICAgIHZv
aWQgcHJpbnRQcmVsb2FkU3RhdHMoKTsKICAgICAKIHByaXZhdGU6Ci0gICAgQ2FjaGVkUmVzb3Vy
Y2UqIHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkg
PSBSZXNvdXJjZUxvYWRQcmlvcml0eVVucmVzb2x2ZWQsIGJvb2wgaXNQcmVsb2FkID0gZmFsc2Up
OworICAgIENhY2hlZFJlc291cmNlKiByZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5
cGUsIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgUmVzb3VyY2VMb2Fk
UHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eVVucmVzb2x2ZWQsIGJvb2wgaXNQcmVsb2Fk
ID0gZmFsc2UpOwogICAgIENhY2hlZFJlc291cmNlKiByZXZhbGlkYXRlUmVzb3VyY2UoQ2FjaGVk
UmVzb3VyY2UqLCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSk7Ci0gICAgQ2FjaGVkUmVz
b3VyY2UqIGxvYWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpOwotICAg
IHZvaWQgcmVxdWVzdFByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOworICAgIENhY2hlZFJlc291cmNlKiBsb2FkUmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmlu
ZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkpOworICAgIHZvaWQgcmVxdWVzdFByZWxv
YWQoQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIFJlc291cmNlUmVxdWVzdCYgdXJsLCBjb25zdCBTdHJp
bmcmIGNoYXJzZXQpOwogCiAgICAgZW51bSBSZXZhbGlkYXRpb25Qb2xpY3kgeyBVc2UsIFJldmFs
aWRhdGUsIFJlbG9hZCwgTG9hZCB9OwogICAgIFJldmFsaWRhdGlvblBvbGljeSBkZXRlcm1pbmVS
ZXZhbGlkYXRpb25Qb2xpY3koQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIGJvb2wgZm9yUHJlbG9hZCwg
Q2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5nUmVzb3VyY2UpIGNvbnN0OwpAQCAtMTM1LDcgKzEzNSw3
IEBACiAgICAgT3duUHRyPExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj4gPiBtX3ByZWxvYWRz
OwogICAgIHN0cnVjdCBQZW5kaW5nUHJlbG9hZCB7CiAgICAgICAgIENhY2hlZFJlc291cmNlOjpU
eXBlIG1fdHlwZTsKLSAgICAgICAgU3RyaW5nIG1fdXJsOworICAgICAgICBSZXNvdXJjZVJlcXVl
c3QgbV9yZXF1ZXN0OwogICAgICAgICBTdHJpbmcgbV9jaGFyc2V0OwogICAgIH07CiAgICAgRGVx
dWU8UGVuZGluZ1ByZWxvYWQ+IG1fcGVuZGluZ1ByZWxvYWRzOwpJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5oCShyZXZpc2lvbiA4
NzA3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpZiBFTkFCTEUoWFNMVCkKICAg
ICBjbGFzcyBDYWNoZWRYU0xTdHlsZVNoZWV0IDogcHVibGljIENhY2hlZFJlc291cmNlIHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIENhY2hlZFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwp
OworICAgICAgICBDYWNoZWRYU0xTdHlsZVNoZWV0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwog
CiAgICAgICAgIGNvbnN0IFN0cmluZyYgc2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0OyB9
CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
LmgJKHJldmlzaW9uIDg3MDc1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKICAgICBmcmllbmQgY2xh
c3MgTWVtb3J5Q2FjaGU7CiAKIHB1YmxpYzoKLSAgICBDYWNoZWRJbWFnZShjb25zdCBTdHJpbmcm
IHVybCk7CisgICAgQ2FjaGVkSW1hZ2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgQ2Fj
aGVkSW1hZ2UoSW1hZ2UqKTsKICAgICB2aXJ0dWFsIH5DYWNoZWRJbWFnZSgpOwogICAgIApJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCShy
ZXZpc2lvbiA4NzA3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDggKzc4LDggQEAKIHN0YXRpYyBSZWZDb3Vu
dGVkTGVha0NvdW50ZXIgY2FjaGVkUmVzb3VyY2VMZWFrQ291bnRlcigiQ2FjaGVkUmVzb3VyY2Ui
KTsKICNlbmRpZgogCi1DYWNoZWRSZXNvdXJjZTo6Q2FjaGVkUmVzb3VyY2UoY29uc3QgU3RyaW5n
JiB1cmwsIFR5cGUgdHlwZSkKLSAgICA6IG1fdXJsKHVybCkKK0NhY2hlZFJlc291cmNlOjpDYWNo
ZWRSZXNvdXJjZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFR5cGUgdHlwZSkKKyAg
ICA6IG1fcmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpCiAgICAgLCBtX3JlcXVlc3QoMCkKICAgICAs
IG1fbG9hZFByaW9yaXR5KGRlZmF1bHRQcmlvcml0eUZvclJlc291cmNlVHlwZSh0eXBlKSkKICAg
ICAsIG1fcmVzcG9uc2VUaW1lc3RhbXAoY3VycmVudFRpbWUoKSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCShyZXZpc2lvbiA4NzA3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNs
dWRlICJQdXJnZVByaW9yaXR5LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNl
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KQEAgLTc5LDcgKzgwLDcgQEAKICAgICAgICAgRGVjb2RlRXJyb3IKICAgICB9OwogCi0g
ICAgQ2FjaGVkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIFR5cGUpOworICAgIENhY2hlZFJl
c291cmNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFR5cGUpOwogICAgIHZpcnR1YWwgfkNhY2hl
ZFJlc291cmNlKCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VM
b2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyKSAgeyBsb2FkKGNhY2hlZFJlc291cmNlTG9hZGVy
LCBmYWxzZSwgRG9TZWN1cml0eUNoZWNrLCB0cnVlKTsgfQpAQCAtOTIsNyArOTMsOCBAQAogCiAg
ICAgdmlydHVhbCBib29sIHNob3VsZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KIAotICAgIGNvbnN0IFN0cmluZyAmdXJsKCkgY29uc3QgeyByZXR1
cm4gbV91cmw7IH0KKyAgICBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCgpIHsgcmV0
dXJuIG1fcmVzb3VyY2VSZXF1ZXN0OyB9CisgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3QudXJsKCk7fQogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KICAgICAKICAgICBSZXNvdXJjZUxv
YWRQcmlvcml0eSBsb2FkUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiBtX2xvYWRQcmlvcml0eTsg
fQpAQCAtMjI5LDcgKzIzMSw3IEBACiAgICAgCiAgICAgSGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVz
b3VyY2VDbGllbnQqPiBtX2NsaWVudHM7CiAKLSAgICBTdHJpbmcgbV91cmw7CisgICAgUmVzb3Vy
Y2VSZXF1ZXN0IG1fcmVzb3VyY2VSZXF1ZXN0OwogICAgIFN0cmluZyBtX2FjY2VwdDsKICAgICBD
YWNoZWRSZXNvdXJjZVJlcXVlc3QqIG1fcmVxdWVzdDsKICAgICBSZXNvdXJjZUxvYWRQcmlvcml0
eSBtX2xvYWRQcmlvcml0eTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZVJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCShyZXZpc2lvbiA4NzA3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBACiB7CiAgICAgUmVmUHRyPENhY2hlZFJlc291cmNl
UmVxdWVzdD4gcmVxdWVzdCA9IGFkb3B0UmVmKG5ldyBDYWNoZWRSZXNvdXJjZVJlcXVlc3QoY2Fj
aGVkUmVzb3VyY2VMb2FkZXIsIHJlc291cmNlLCBpbmNyZW1lbnRhbCkpOwogCi0gICAgUmVzb3Vy
Y2VSZXF1ZXN0IHJlc291cmNlUmVxdWVzdChyZXNvdXJjZS0+dXJsKCkpOworICAgIFJlc291cmNl
UmVxdWVzdCByZXNvdXJjZVJlcXVlc3QgPSByZXNvdXJjZS0+cmVzb3VyY2VSZXF1ZXN0KCk7CiAg
ICAgcmVzb3VyY2VSZXF1ZXN0LnNldFRhcmdldFR5cGUoY2FjaGVkUmVzb3VyY2VUeXBlVG9UYXJn
ZXRUeXBlKHJlc291cmNlLT50eXBlKCkpKTsKIAogICAgIGlmICghcmVzb3VyY2UtPmFjY2VwdCgp
LmlzRW1wdHkoKSkKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICByZXF1ZXN0LmdldCgpLCBy
ZXNvdXJjZVJlcXVlc3QsIHByaW9yaXR5LCBzZWN1cml0eUNoZWNrLCBzZW5kUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzKTsKICAgICBpZiAoIWxvYWRlciB8fCBsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0
YXRlKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdoYXQgaWYgcmVzb3VyY2VzIGluIG90aGVyIGZy
YW1lcyB3ZXJlIHdhaXRpbmcgZm9yIHRoaXMgcmV2YWxpZGF0aW9uPwotICAgICAgICBMT0coUmVz
b3VyY2VMb2FkaW5nLCAiQ2Fubm90IHN0YXJ0IGxvYWRpbmcgJyVzJyIsIHJlc291cmNlLT51cmwo
KS5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2Fubm90
IHN0YXJ0IGxvYWRpbmcgJyVzJyIsIHJlc291cmNlLT51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5k
YXRhKCkpOwogICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci0+ZGVjcmVtZW50UmVxdWVzdENv
dW50KHJlc291cmNlKTsKICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPmxvYWRGaW5pc2hp
bmcoKTsKICAgICAgICAgaWYgKHJlc291cmNlLT5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKSAKQEAg
LTE1MSw3ICsxNTEsNyBAQAogCiAgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlci5nZXQoKSk7
CiAgICAgQVNTRVJUKCFtX3Jlc291cmNlLT5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKTsKLSAgICBM
T0coUmVzb3VyY2VMb2FkaW5nLCAiUmVjZWl2ZWQgJyVzJy4iLCBtX3Jlc291cmNlLT51cmwoKS5s
YXRpbjEoKS5kYXRhKCkpOworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZWNlaXZlZCAnJXMn
LiIsIG1fcmVzb3VyY2UtPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CiAKICAgICAv
LyBQcmV2ZW50IHRoZSBkb2N1bWVudCBmcm9tIGJlaW5nIGRlc3Ryb3llZCBiZWZvcmUgd2UgYXJl
IGRvbmUgd2l0aAogICAgIC8vIHRoZSBjYWNoZWRSZXNvdXJjZUxvYWRlciB0aGF0IGl0IHdpbGwg
ZGVsZXRlIHdoZW4gdGhlIGRvY3VtZW50IGdldHMgZGVsZXRlZC4KQEAgLTE4Myw3ICsxODMsNyBA
QAogICAgIGlmIChtX2ZpbmlzaGluZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9HKFJlc291
cmNlTG9hZGluZywgIkZhaWxlZCB0byBsb2FkICclcycgKGNhbmNlbGxlZD0lZCkuXG4iLCBtX3Jl
c291cmNlLT51cmwoKS5sYXRpbjEoKS5kYXRhKCksIGNhbmNlbGxlZCk7CisgICAgTE9HKFJlc291
cmNlTG9hZGluZywgIkZhaWxlZCB0byBsb2FkICclcycgKGNhbmNlbGxlZD0lZCkuXG4iLCBtX3Jl
c291cmNlLT51cmwoKS5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCksIGNhbmNlbGxlZCk7CiAKICAg
ICAvLyBQcmV2ZW50IHRoZSBkb2N1bWVudCBmcm9tIGJlaW5nIGRlc3Ryb3llZCBiZWZvcmUgd2Ug
YXJlIGRvbmUgd2l0aAogICAgIC8vIHRoZSBjYWNoZWRSZXNvdXJjZUxvYWRlciB0aGF0IGl0IHdp
bGwgZGVsZXRlIHdoZW4gdGhlIGRvY3VtZW50IGdldHMgZGVsZXRlZC4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJKHJl
dmlzaW9uIDg3MDc1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0
eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNyw4IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotQ2FjaGVkQ1NTU3R5bGVTaGVldDo6Q2FjaGVkQ1NTU3R5bGVTaGVldChj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQotICAgIDogQ2FjaGVkUmVz
b3VyY2UodXJsLCBDU1NTdHlsZVNoZWV0KQorQ2FjaGVkQ1NTU3R5bGVTaGVldDo6Q2FjaGVkQ1NT
U3R5bGVTaGVldChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgY29uc3Qg
U3RyaW5nJiBjaGFyc2V0KQorICAgIDogQ2FjaGVkUmVzb3VyY2UocmVzb3VyY2VSZXF1ZXN0LCBD
U1NTdHlsZVNoZWV0KQogICAgICwgbV9kZWNvZGVyKFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0
ZSgidGV4dC9jc3MiLCBjaGFyc2V0KSkKIHsKICAgICAvLyBQcmVmZXIgdGV4dC9jc3MgYnV0IGFj
Y2VwdCBhbnkgdHlwZSAoZGVsbC5jb20gc2VydmVzIGEgc3R5bGVzaGVldApAQCAtNTMsNyArNTMs
NyBAQAogdm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQgKmMpCiB7CiAgICAgaWYgKCFpc0xvYWRpbmcoKSkKLSAgICAgICAgYy0+c2V0Q1NT
U3R5bGVTaGVldChtX3VybCwgbV9yZXNwb25zZS51cmwoKSwgbV9kZWNvZGVyLT5lbmNvZGluZygp
Lm5hbWUoKSwgdGhpcyk7CisgICAgICAgIGMtPnNldENTU1N0eWxlU2hlZXQobV9yZXNvdXJjZVJl
cXVlc3QudXJsKCksIG1fcmVzcG9uc2UudXJsKCksIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1l
KCksIHRoaXMpOwogfQogCiB2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OmFsbENsaWVudHNSZW1v
dmVkKCkKQEAgLTExMyw3ICsxMTMsNyBAQAogCiAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxr
ZXIgdyhtX2NsaWVudHMpOwogICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCAqYyA9IHcu
bmV4dCgpKQotICAgICAgICBjLT5zZXRDU1NTdHlsZVNoZWV0KG1fdXJsLCBtX3Jlc3BvbnNlLnVy
bCgpLCBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpLCB0aGlzKTsKKyAgICAgICAgYy0+c2V0
Q1NTU3R5bGVTaGVldChtX3Jlc291cmNlUmVxdWVzdC51cmwoKSwgbV9yZXNwb25zZS51cmwoKSwg
bV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKSwgdGhpcyk7CiB9CiAKIHZvaWQgQ2FjaGVkQ1NT
U3R5bGVTaGVldDo6ZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1cyBzdGF0dXMpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmNwcAkocmV2aXNpb24g
ODcwNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUNhY2hlZFNjcmlwdDo6Q2FjaGVkU2NyaXB0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIGNoYXJzZXQpCi0gICAgOiBDYWNoZWRSZXNvdXJjZSh1cmwsIFNjcmlwdCkKK0NhY2hlZFNj
cmlwdDo6Q2FjaGVkU2NyaXB0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0
LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCisgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJl
cXVlc3QsIFNjcmlwdCkKICAgICAsIG1fZGVjb2RlcihUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVh
dGUoImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiLCBjaGFyc2V0KSkKICAgICAsIG1fZGVjb2RlZERh
dGFEZWxldGlvblRpbWVyKHRoaXMsICZDYWNoZWRTY3JpcHQ6OmRlY29kZWREYXRhRGVsZXRpb25U
aW1lckZpcmVkKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNh
Y2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5
Q2FjaGUuY3BwCShyZXZpc2lvbiA4NzA3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9NZW1vcnlDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAKICAgICAK
ICAgICByZXNvdXJjZUFjY2Vzc2VkKHJlc291cmNlKTsKICAgICAKLSAgICBMT0coUmVzb3VyY2VM
b2FkaW5nLCAiTWVtb3J5Q2FjaGU6OmFkZCBBZGRlZCAnJXMnLCByZXNvdXJjZSAlcFxuIiwgcmVz
b3VyY2UtPnVybCgpLmxhdGluMSgpLmRhdGEoKSwgcmVzb3VyY2UpOworICAgIExPRyhSZXNvdXJj
ZUxvYWRpbmcsICJNZW1vcnlDYWNoZTo6YWRkIEFkZGVkICclcycsIHJlc291cmNlICVwXG4iLCBy
ZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpLCByZXNvdXJjZSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTMyNCw3ICszMjQsNyBAQAogCiB2b2lkIE1lbW9yeUNhY2hl
OjpldmljdChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCiB7Ci0gICAgTE9HKFJlc291cmNlTG9h
ZGluZywgIkV2aWN0aW5nIHJlc291cmNlICVwIGZvciAnJXMnIGZyb20gY2FjaGUiLCByZXNvdXJj
ZSwgcmVzb3VyY2UtPnVybCgpLmxhdGluMSgpLmRhdGEoKSk7CisgICAgTE9HKFJlc291cmNlTG9h
ZGluZywgIkV2aWN0aW5nIHJlc291cmNlICVwIGZvciAnJXMnIGZyb20gY2FjaGUiLCByZXNvdXJj
ZSwgcmVzb3VyY2UtPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CiAgICAgLy8gVGhl
IHJlc291cmNlIG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGJ5IHNvbWVvbmUgb3RoZXIg
dGhhbiBvdXIgY2FsbGVyLAogICAgIC8vIHdobyBuZWVkZWQgYSBmcmVzaCBjb3B5IGZvciBhIHJl
bG9hZC4gU2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ3OSNj
Nj4uCiAgICAgaWYgKHJlc291cmNlLT5pbkNhY2hlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9JbWFnZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ltYWdlTG9hZGVyLmNwcAkocmV2aXNpb24gODcwNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvSW1hZ2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsMTMgKzE2MSwxNiBA
QAogICAgICAgICBpZiAobV9sb2FkTWFudWFsbHkpIHsKICAgICAgICAgICAgIGJvb2wgYXV0b0xv
YWRPdGhlckltYWdlcyA9IGRvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5hdXRvTG9h
ZEltYWdlcygpOwogICAgICAgICAgICAgZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCkt
PnNldEF1dG9Mb2FkSW1hZ2VzKGZhbHNlKTsKLSAgICAgICAgICAgIG5ld0ltYWdlID0gbmV3IENh
Y2hlZEltYWdlKHNvdXJjZVVSSShhdHRyKSk7CisgICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdCA9IFJlc291cmNlUmVxdWVzdChkb2N1bWVudC0+Y29tcGxldGVVUkwoc291cmNlVVJJ
KGF0dHIpKSk7CisgICAgICAgICAgICBuZXdJbWFnZSA9IG5ldyBDYWNoZWRJbWFnZShyZXF1ZXN0
KTsKICAgICAgICAgICAgIG5ld0ltYWdlLT5zZXRMb2FkaW5nKHRydWUpOwogICAgICAgICAgICAg
bmV3SW1hZ2UtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKGRvY3VtZW50LT5jYWNoZWRS
ZXNvdXJjZUxvYWRlcigpKTsKICAgICAgICAgICAgIGRvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpLT5tX2RvY3VtZW50UmVzb3VyY2VzLnNldChuZXdJbWFnZS0+dXJsKCksIG5ld0ltYWdl
KTsKICAgICAgICAgICAgIGRvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5zZXRBdXRv
TG9hZEltYWdlcyhhdXRvTG9hZE90aGVySW1hZ2VzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBuZXdJbWFnZSA9IGRvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0
SW1hZ2Uoc291cmNlVVJJKGF0dHIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJl
c291cmNlUmVxdWVzdCByZXF1ZXN0KGRvY3VtZW50LT5jb21wbGV0ZVVSTChzb3VyY2VVUkkoYXR0
cikpKTsKKyAgICAgICAgICAgIG5ld0ltYWdlID0gZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9h
ZGVyKCktPnJlcXVlc3RJbWFnZShyZXF1ZXN0KTsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIElm
IHdlIGRvIG5vdCBoYXZlIGFuIGltYWdlIGhlcmUsIGl0IG1lYW5zIHRoYXQgYSBjcm9zcy1zaXRl
CiAgICAgICAgIC8vIHZpb2xhdGlvbiBvY2N1cnJlZC4K
</data>

          </attachment>
      

    </bug>

</bugzilla>