<?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>61016</bug_id>
          
          <creation_ts>2011-05-17 19:00:57 -0700</creation_ts>
          <short_desc>[WebWorkers][Chromium] Use v8 Isolates for in-process implementation of WebWorkers</short_desc>
          <delta_ts>2011-08-18 16:24:13 -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>
          <dependson>61017</dependson>
    
    <dependson>61963</dependson>
    
    <dependson>62164</dependson>
    
    <dependson>62345</dependson>
    
    <dependson>62653</dependson>
    
    <dependson>63041</dependson>
    
    <dependson>65004</dependson>
    
    <dependson>65778</dependson>
          <blocked>66509</blocked>
    
    <blocked>66511</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Dmitry Lomov">dslomov</reporter>
          <assigned_to name="Dmitry Lomov">dslomov</assigned_to>
          <cc>abarth</cc>
    
    <cc>antonm</cc>
    
    <cc>ap</cc>
    
    <cc>dimich</cc>
    
    <cc>dslomov</cc>
    
    <cc>fishd</cc>
    
    <cc>jianli</cc>
    
    <cc>leandrogracia</cc>
    
    <cc>levin</cc>
    
    <cc>lukezarko+bugzilla</cc>
    
    <cc>michaeln</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>405464</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-05-17 19:00:57 -0700</bug_when>
    <thetext>V8 now supports multiple instances of virtual machine in one process, dubbed isolates.

We should use them for the implementation of shared workers in chromium port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407412</commentid>
    <comment_count>1</comment_count>
      <attachid>94291</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-05-20 16:54:18 -0700</bug_when>
    <thetext>Created attachment 94291
First bit of work

This is a first bit of the work -  by no means complete.

The main challenge is moving static bits of WebCore V8 bindings to per-isolate storage. To this end, I have added a per-isolate embedded data to V8, and this patch utilizes that to cache FuntionTemplates for V8 bindings.
Moving remainder of static state over to isolates is in the works. 

I&apos;d appreciate comments from interested parties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408083</commentid>
    <comment_count>2</comment_count>
      <attachid>94291</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-05-23 11:05:45 -0700</bug_when>
    <thetext>Comment on attachment 94291
First bit of work

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

Loks good overall.
Mostly minor style nits - a few more substantive comments.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:2165
&gt; +    if (!data-&gt;rawTemplateMap().contains(&amp;info)) {

Use &quot;find&quot; instead of contains to only do the lookup once. (Right now it does contains and get).

Sketch of code:

result = data-&gt;rawTemplateMap().find(&amp;info);
if (result != end)
    return result...;

v8::Persistent&lt;v8::FunctionTemplate&gt; rawTemplate = createRawTemplate();
data-&gt;rawTemplateMap().add(&amp;info, rawTemplate);
return rawTemplate;

&gt; Source/WebCore/bindings/v8/V8Binding.cpp:51
&gt; +V8BindingPerIsolateData::V8BindingPerIsolateData(v8::Isolate* isolate) {

{ on next line (in many places).

&gt; Source/WebCore/bindings/v8/V8Binding.cpp:57
&gt; +// static

Chromium does these &quot;static&quot; comments but WebKit doesn&apos;t.

&gt; Source/WebCore/bindings/v8/V8Binding.cpp:60
&gt; +    if (embedderData != 0) {

Do use {} for single line clauses and avoid comparisons to 0.

&gt; Source/WebCore/bindings/v8/V8Binding.cpp:71
&gt; +    if (data != 0) {

Ditto.

&gt; Source/WebCore/bindings/v8/V8Binding.h:59
&gt; +        static void dispose(v8::Isolate* isolate);

isolate -- param name adds no information so don&apos;t include it.

&gt; Source/WebCore/bindings/v8/V8Binding.h:67
&gt; +        V8BindingPerIsolateData(v8::Isolate* isolate);

Ditto.

&gt; Source/WebKit/chromium/src/PlatformBridge.cpp:1048
&gt; +    return new WorkerMessagingProxy(worker);

Is there a different code path for shared workers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408626</commentid>
    <comment_count>3</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-05-23 21:22:04 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 94291 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94291&amp;action=review
&gt; 
&gt; Loks good overall.
&gt; Mostly minor style nits - a few more substantive comments.
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:2165
&gt; &gt; +    if (!data-&gt;rawTemplateMap().contains(&amp;info)) {
&gt; 
&gt; Use &quot;find&quot; instead of contains to only do the lookup once. (Right now it does contains and get).
&gt; 
&gt; Sketch of code:
&gt; 
&gt; result = data-&gt;rawTemplateMap().find(&amp;info);
&gt; if (result != end)
&gt;     return result...;
&gt; 
&gt; v8::Persistent&lt;v8::FunctionTemplate&gt; rawTemplate = createRawTemplate();
&gt; data-&gt;rawTemplateMap().add(&amp;info, rawTemplate);
&gt; return rawTemplate;
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8Binding.cpp:51
&gt; &gt; +V8BindingPerIsolateData::V8BindingPerIsolateData(v8::Isolate* isolate) {
&gt; 
&gt; { on next line (in many places).
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8Binding.cpp:57
&gt; &gt; +// static
&gt; 
&gt; Chromium does these &quot;static&quot; comments but WebKit doesn&apos;t.
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8Binding.cpp:60
&gt; &gt; +    if (embedderData != 0) {
&gt; 
&gt; Do use {} for single line clauses and avoid comparisons to 0.
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8Binding.cpp:71
&gt; &gt; +    if (data != 0) {
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8Binding.h:59
&gt; &gt; +        static void dispose(v8::Isolate* isolate);
&gt; 
&gt; isolate -- param name adds no information so don&apos;t include it.
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8Binding.h:67
&gt; &gt; +        V8BindingPerIsolateData(v8::Isolate* isolate);
&gt; 
&gt; Ditto.

Thanks for taking a look - fixed all of the above
&gt; 
&gt; &gt; Source/WebKit/chromium/src/PlatformBridge.cpp:1048
&gt; &gt; +    return new WorkerMessagingProxy(worker);
&gt; 
&gt; Is there a different code path for shared workers?

Yes there is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413802</commentid>
    <comment_count>4</comment_count>
      <attachid>95694</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-06-01 18:06:33 -0700</bug_when>
    <thetext>Created attachment 95694
This patch makes simple worker actually work in-process in Chrome</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413804</commentid>
    <comment_count>5</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-06-01 18:08:27 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=95694) [details]
&gt; This patch makes simple worker actually work in-process in Chrome

This is not a landable patch again, but gives a good overview of a minimal set of changes to be done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413841</commentid>
    <comment_count>6</comment_count>
      <attachid>95694</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-06-01 19:25:46 -0700</bug_when>
    <thetext>Comment on attachment 95694
This patch makes simple worker actually work in-process in Chrome

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

&gt; Source/WebCore/bindings/v8/V8Binding.cpp:62
&gt; +    if (embedderData) { return static_cast&lt;V8BindingPerIsolateData*&gt;(embedderData); }

It&apos;s possible to avoid this &apos;if&apos; - by assuming the data is always there. It&apos;s possible to initialize it in the ScriptController. The &apos;if&apos; will consume few clocks every time...

Also, we could have V8 expose Isolate::GetCurrentIsolateData() to avoid one extra non-inlinable call. Of course, only if it actually saves part of the expected perf problem :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450953</commentid>
    <comment_count>7</comment_count>
      <attachid>103883</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-14 15:16:30 -0700</bug_when>
    <thetext>Created attachment 103883
This adds an implementation of in-process dedicated workers to chromium port. 

The crux of the matter is the reimplementation of WebWorkerClientImpl. WebWorkerClientImpl now 
implements all three of Worker{Loader,Context,Object}Proxies and delegates the implementation to 
WebKit&apos;s standard WorkerMessagingProxy.
For now, we have 3 implementations of workers in chromium WebKit:
          - In-process dedicated workers (this checkin)
          - Inter-process shared workers
          - Inter-process dedicated workers (defunct after this checkin)
This patch extracts some new common interfaces (WebCommonWorkerBase and WebCommonWorkerClient) for these 
three implementations. 
Removing the remainings of inter-process dedicated workers -related classes is left for a separate patch 
(it will require coordinated changes on chromuium side).

Chromium trybots are happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451240</commentid>
    <comment_count>8</comment_count>
      <attachid>103883</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-08-15 12:59:43 -0700</bug_when>
    <thetext>Comment on attachment 103883
This adds an implementation of in-process dedicated workers to chromium port. 

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

I think we can do better than adding WebCommonFooBase interfaces.  Let&apos;s try to just make use of WebCommonFoo, or switch to WebFooBase.

&gt; Source/WebKit/chromium/public/WebCommonWorkerClient.h:53
&gt; +class WebCommonWorkerClient : public WebCommonWorkerClientBase {

WebCommonWorkerClientBase is a funny name.  Isn&apos;t WebCommonWorkerClient already
supposed to be the interface that represents the common functions needed by all
types of worker clients?

I see this comment above WebCommonWorkerClient:

// This interface contains common APIs used by both shared and dedicated
// workers.

&gt; Source/WebKit/chromium/public/WebCommonWorkerClientBase.h:56
&gt; +}

WebKit API headers normally put a comment here to indicate the close of the namespace.

You can see this in part 3 of the coding style guide: http://www.webkit.org/coding/coding-style.html

&gt; Source/WebKit/chromium/src/WebCommonWorkerBase.h:45
&gt; +    virtual WebView* webView() const = 0;

we normally drop the &quot;web&quot; prefix on method names that return a WebFoo type.

&gt; Source/WebKit/chromium/src/WebCommonWorkerBase.h:47
&gt; +

nit: only one new line here please</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451296</commentid>
    <comment_count>9</comment_count>
      <attachid>103883</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-15 14:31:18 -0700</bug_when>
    <thetext>Comment on attachment 103883
This adds an implementation of in-process dedicated workers to chromium port. 

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

Re Web*Base classes - as I said, after this patch, we will be in a bit of  temporary situation where we will have 2 implementations of dedicated workers, one defunct. I think complete removal of inter-process workers and subsequent clean-up should be a separate patch. Awkward naming reflect that.

&gt;&gt; Source/WebKit/chromium/public/WebCommonWorkerClient.h:53
&gt;&gt; +class WebCommonWorkerClient : public WebCommonWorkerClientBase {
&gt; 
&gt; WebCommonWorkerClientBase is a funny name.  Isn&apos;t WebCommonWorkerClient already
&gt; supposed to be the interface that represents the common functions needed by all
&gt; types of worker clients?
&gt; 
&gt; I see this comment above WebCommonWorkerClient:
&gt; 
&gt; // This interface contains common APIs used by both shared and dedicated
&gt; // workers.

WebCommonWorkerClient unfortunately has a bunch of methods that are unnecessary and cumbersome to implement in a new world of in-proc dedicated workers (postMessage* and others that are supposed to work on _main_ thread) - hence the need for a base interface shared between all 3 worker implementation. The idea is that after the dedicated worker implementation cleanup these methods will go away and WebCommonWorkerClientBase will merge back into WebCommonWorkerClient.

&gt;&gt; Source/WebKit/chromium/public/WebCommonWorkerClientBase.h:56
&gt;&gt; +}
&gt; 
&gt; WebKit API headers normally put a comment here to indicate the close of the namespace.
&gt; 
&gt; You can see this in part 3 of the coding style guide: http://www.webkit.org/coding/coding-style.html

Done.

&gt;&gt; Source/WebKit/chromium/src/WebCommonWorkerBase.h:45
&gt;&gt; +    virtual WebView* webView() const = 0;
&gt; 
&gt; we normally drop the &quot;web&quot; prefix on method names that return a WebFoo type.

Done.

&gt;&gt; Source/WebKit/chromium/src/WebCommonWorkerBase.h:47
&gt;&gt; +
&gt; 
&gt; nit: only one new line here please

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451299</commentid>
    <comment_count>10</comment_count>
      <attachid>103954</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-15 14:35:21 -0700</bug_when>
    <thetext>Created attachment 103954
CR feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451404</commentid>
    <comment_count>11</comment_count>
      <attachid>103954</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-08-15 17:04:55 -0700</bug_when>
    <thetext>Comment on attachment 103954
CR feedback

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

&gt; Source/WebCore/workers/WorkerMessagingProxy.h:53
&gt; +        virtual ~WorkerMessagingProxy();

This shouldn&apos;t be exposed because no one should ever call it. This class is self-deleting. (There should probably be a comment before this destructor.)

Also it is odd that it is virtual at all as discussed.

&gt; Source/WebKit/chromium/ChangeLog:14
&gt; +        three implementations. 

Why are new interfaces needed?

Why are we keeping the old interfaces?

What does shared workers use? (There is a lot of code that got deleted in WebWorkerClientImpl. Did shared workers avoid using that?)

&gt; Source/WebKit/chromium/src/WebSharedWorkerImpl.h:68
&gt; +    WebCommonWorkerClientBase* commonClientBase() { return m_client; }

What about the other method from WebCommonWorkerBase?

&gt; Source/WebKit/chromium/src/WebWorkerBase.h:96
&gt; +    virtual WebView* view() const { return m_webView; }

The comment about &quot;WebCore::WorkerLoaderProxy methods:&quot; should change to &quot;WebCommonWorkerBase&quot; and the &quot;WebView* view&quot; method should be part of that group.

&gt; Source/WebKit/chromium/src/WebWorkerClientImpl.cpp:82
&gt;      //     return new WorkerMessagingProxy(worker);

Should this commented out code be removed?

&gt; Source/WebKit/chromium/src/WebWorkerClientImpl.cpp:95
&gt; +    : m_proxy(adoptPtr(new WorkerMessagingProxy(worker)))

As noted previously, WorkerMessagingProxy is self-deleting so best not to store it in a OwnPtr.

Perhaps we should expose a WorkerMessagingProxy::create method which only returns a WorkerMessagingProxy* to emphasize this.

&gt; Source/WebKit/chromium/src/WebWorkerClientImpl.h:53
&gt; +using WebCore::SerializedScriptValue;

Avoid using in header files.

&gt; Source/WebKit/chromium/src/WebWorkerClientImpl.h:-57
&gt; -    WebWorkerClientImpl(WebCore::Worker*);

Note that Source/WebKit/chromium/src/* try to keep the methods in the file in the same order as the declaration in the class so these rearrangements here should result in the same rearrangements in the .cpp file.

&gt; Source/WebKit/chromium/src/WebWorkerClientImpl.h:67
&gt; +    virtual ~WebWorkerClientImpl();

Why did this become public and why was it private before?

&gt; Source/WebKit/chromium/src/WebWorkerClientImpl.h:114
&gt; +    virtual WebCommonWorkerClientBase* commonClientBase() { return this; }

WebCommonWorkerBase methods?

&gt; Source/WebKit/chromium/src/WebWorkerImpl.cpp:77
&gt; +WebCommonWorkerClientBase* WebWorkerImpl::commonClientBase()

Wrong location.

&gt; Source/WebKit/chromium/src/WebWorkerImpl.h:69
&gt; +    virtual WebCommonWorkerClientBase* commonClientBase();

other methods for WebCommonWorkerBase?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451428</commentid>
    <comment_count>12</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-08-15 17:52:55 -0700</bug_when>
    <thetext>Ok, I get this now.


State of the world before this patch:

Chromium relies on WebWorkerBase and WebCommonWorkerClient right now to do common operations for Workers across both shared workers and dedicated workers.

WebSharedWorker (WSW) and WebWorker derive from WebWorkerBase (WWB).

WebSharedWorkerClient (WSWC) and WebWorkerClient derive from WebCommonWorkerClient (WCWC).

Oddly, we have &quot;Base&quot;  and &quot;Common&quot; both seemingly being used to mean common functionality (maybe one is used for interfaces and the other for implementations....)

State of the world with this patch:

Chromium will no longer use ipc for dedicated workers, so WebWorker and WebWorkerClient are dead code. Also WWB and WCWC are only used by the ipc plumbing in chromium but no where else and they are essentially no longer base classes but instead part of WSW and WSWC respectively.

The introduction of new Base and Common into what will be the new versions of WWB and WCWC is pretty confusing, so instead I suggested renaming the new versions to NewWebWorkerBase and NewWebCommonWorkerClient temporarily while we do the transition of Chromium code to stop using WWB and WCWC.


Future patches (my interpretation):

1. Remove usage of WWB in Chromium and switch to either WSW or NewWebWorkerBase. Ditto for WCWC.

2. Change WebKit/chromium code to remove WWB and move the remaining functionality to WSW and typedef NewWWB WWB. Ditto for WCWC. 

3. Switch Chromium to use WWB instead of WWB. Ditto for WCWC.

4. Rename NewWWB to WWB. Ditto for WCWC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451430</commentid>
    <comment_count>13</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-15 17:55:58 -0700</bug_when>
    <thetext>Yes this is accurate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451436</commentid>
    <comment_count>14</comment_count>
      <attachid>103954</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-15 18:04:26 -0700</bug_when>
    <thetext>Comment on attachment 103954
CR feedback

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

&gt;&gt; Source/WebCore/workers/WorkerMessagingProxy.h:53
&gt;&gt; +        virtual ~WorkerMessagingProxy();
&gt; 
&gt; This shouldn&apos;t be exposed because no one should ever call it. This class is self-deleting. (There should probably be a comment before this destructor.)
&gt; 
&gt; Also it is odd that it is virtual at all as discussed.

Done.

&gt;&gt; Source/WebKit/chromium/ChangeLog:14
&gt;&gt; +        three implementations. 
&gt; 
&gt; Why are new interfaces needed?
&gt; 
&gt; Why are we keeping the old interfaces?
&gt; 
&gt; What does shared workers use? (There is a lot of code that got deleted in WebWorkerClientImpl. Did shared workers avoid using that?)

&gt; Why are new interfaces needed?
&gt; Why are we keeping the old interfaces?
As I noted already, after this patch we will have 3 implementations of workers, one defunct.  Doing a full cleanup will require coordinated changes on chromium side, that is why I am doing this in two steps
&gt; What does shared workers use?
Nomenclature is: WebWorker is dedicated worker, WebSharedWorker is shared worker. These changes only affect dedicated workers.

&gt;&gt; Source/WebKit/chromium/src/WebSharedWorkerImpl.h:68
&gt;&gt; +    WebCommonWorkerClientBase* commonClientBase() { return m_client; }
&gt; 
&gt; What about the other method from WebCommonWorkerBase?

It comes from WebWorkerBase

&gt;&gt; Source/WebKit/chromium/src/WebWorkerBase.h:96
&gt;&gt; +    virtual WebView* view() const { return m_webView; }
&gt; 
&gt; The comment about &quot;WebCore::WorkerLoaderProxy methods:&quot; should change to &quot;WebCommonWorkerBase&quot; and the &quot;WebView* view&quot; method should be part of that group.

Done

&gt;&gt; Source/WebKit/chromium/src/WebWorkerClientImpl.cpp:82
&gt;&gt;      //     return new WorkerMessagingProxy(worker);
&gt; 
&gt; Should this commented out code be removed?

With pleasure.

&gt;&gt; Source/WebKit/chromium/src/WebWorkerClientImpl.cpp:95
&gt;&gt; +    : m_proxy(adoptPtr(new WorkerMessagingProxy(worker)))
&gt; 
&gt; As noted previously, WorkerMessagingProxy is self-deleting so best not to store it in a OwnPtr.
&gt; 
&gt; Perhaps we should expose a WorkerMessagingProxy::create method which only returns a WorkerMessagingProxy* to emphasize this.

Done (removed OwnPtr)

&gt;&gt; Source/WebKit/chromium/src/WebWorkerClientImpl.h:53
&gt;&gt; +using WebCore::SerializedScriptValue;
&gt; 
&gt; Avoid using in header files.

Done.

&gt;&gt; Source/WebKit/chromium/src/WebWorkerClientImpl.h:-57
&gt;&gt; -    WebWorkerClientImpl(WebCore::Worker*);
&gt; 
&gt; Note that Source/WebKit/chromium/src/* try to keep the methods in the file in the same order as the declaration in the class so these rearrangements here should result in the same rearrangements in the .cpp file.

Done

&gt;&gt; Source/WebKit/chromium/src/WebWorkerClientImpl.h:67
&gt;&gt; +    virtual ~WebWorkerClientImpl();
&gt; 
&gt; Why did this become public and why was it private before?

Done (change undone).

&gt;&gt; Source/WebKit/chromium/src/WebWorkerClientImpl.h:114

&gt; 
&gt; WebCommonWorkerBase methods?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451453</commentid>
    <comment_count>15</comment_count>
      <attachid>103993</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-15 19:10:20 -0700</bug_when>
    <thetext>Created attachment 103993
CR feedback.

Addressed the comments and rename confusing *Base and Common*Base stuff into New* classes. Got rid of extra files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451803</commentid>
    <comment_count>16</comment_count>
      <attachid>103993</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-08-16 12:51:02 -0700</bug_when>
    <thetext>Comment on attachment 103993
CR feedback.

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

This looks good to me pending a little bit of clean up and a few comments.

&gt; Source/WebKit/chromium/ChangeLog:13
&gt; +        This patch extracts some new common interfaces (WebCommonWorkerBase and WebCommonWorkerClient) for these 

Update names: WebCommonWorkerBase and WebCommonWorkerClient

&gt; Source/WebKit/chromium/public/WebCommonWorkerClient.h:47
&gt; +class NewWebCommonWorkerClient {

It feels like this class should have a comment just like WebCommonWorkerClient has one.

Also all of these methods are simply about calling things on the main webkit thread so I suspect some simplification of the comments below could happen if there were a top level comment.

&gt; Source/WebKit/chromium/src/WebSharedWorkerImpl.h:67
&gt; +    // WebCommonWorkerBase methods:

s/WebCommonWorkerBase/NewWebWorkerBase/

&gt; Source/WebKit/chromium/src/WebWorkerBase.h:61
&gt; +class NewWebWorkerBase : public WebCore::WorkerLoaderProxy {

Comment for this class (like there is one for WWB below).

&gt; Source/WebKit/chromium/src/WebWorkerClientImpl.h:41
&gt; +

It doesn&apos;t seem like a blank line is needed here.

&gt; Source/WebKit/chromium/src/WebWorkerImpl.h:68
&gt; +    // WebCommonWorkerBase methods:

WebCommonWorkerBase update name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451832</commentid>
    <comment_count>17</comment_count>
      <attachid>103993</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-16 13:41:15 -0700</bug_when>
    <thetext>Comment on attachment 103993
CR feedback.

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

&gt;&gt; Source/WebKit/chromium/src/WebSharedWorkerImpl.h:67
&gt;&gt; +    // WebCommonWorkerBase methods:
&gt; 
&gt; s/WebCommonWorkerBase/NewWebWorkerBase/

Done.

&gt;&gt; Source/WebKit/chromium/src/WebWorkerBase.h:61
&gt;&gt; +class NewWebWorkerBase : public WebCore::WorkerLoaderProxy {
&gt; 
&gt; Comment for this class (like there is one for WWB below).

Done.

&gt;&gt; Source/WebKit/chromium/src/WebWorkerClientImpl.h:41
&gt;&gt; +
&gt; 
&gt; It doesn&apos;t seem like a blank line is needed here.

The blank line divides WebCore and WebKit headers. Most of WebKit follows this convention.

&gt;&gt; Source/WebKit/chromium/src/WebWorkerImpl.h:68
&gt;&gt; +    // WebCommonWorkerBase methods:
&gt; 
&gt; WebCommonWorkerBase update name.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451836</commentid>
    <comment_count>18</comment_count>
      <attachid>104084</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-16 13:45:01 -0700</bug_when>
    <thetext>Created attachment 104084
CR feedback (changes in comments)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451847</commentid>
    <comment_count>19</comment_count>
      <attachid>104084</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-08-16 13:49:54 -0700</bug_when>
    <thetext>Comment on attachment 104084
CR feedback (changes in comments)

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

LGTM.

&gt; Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.h:56
&gt; +class WebCommonWorkerClientBase;

Rename issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451861</commentid>
    <comment_count>20</comment_count>
      <attachid>104089</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-16 14:15:42 -0700</bug_when>
    <thetext>Created attachment 104089
Rename issue fixed (thanks David!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451887</commentid>
    <comment_count>21</comment_count>
      <attachid>104089</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-08-16 14:52:39 -0700</bug_when>
    <thetext>Comment on attachment 104089
Rename issue fixed (thanks David!)

LGTM!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453169</commentid>
    <comment_count>22</comment_count>
      <attachid>104089</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-08-18 11:21:15 -0700</bug_when>
    <thetext>Comment on attachment 104089
Rename issue fixed (thanks David!)

We&apos;ll deal with any other feedback about the Chromium WebKit public api in follow up patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453174</commentid>
    <comment_count>23</comment_count>
      <attachid>104089</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-08-18 11:23:29 -0700</bug_when>
    <thetext>Comment on attachment 104089
Rename issue fixed (thanks David!)

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

&gt; Source/WebKit/chromium/public/WebCommonWorkerClient.h:47
&gt; +class NewWebCommonWorkerClient {

Interfaces are supposed to be named with a Web prefix.  However, I understand
that this is just a temporary thing.

&gt; Source/WebKit/chromium/public/WebCommonWorkerClient.h:58
&gt; +

nit: only one new line here

&gt; Source/WebKit/chromium/src/WebWorkerBase.h:60
&gt; +

nit: only one new line here

&gt; Source/WebKit/chromium/src/WebWorkerBase.h:70
&gt; +

nit: only one new line here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453340</commentid>
    <comment_count>24</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-18 14:07:08 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/93330. Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94291</attachid>
            <date>2011-05-20 16:54:18 -0700</date>
            <delta_ts>2011-06-01 18:06:33 -0700</delta_ts>
            <desc>First bit of work</desc>
            <filename>61016-a.patch</filename>
            <type>text/plain</type>
            <size>6204</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KaW5kZXggZjIwMmQ3NS4uNWRkMjhkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTIxNjEsMTQgKzIxNjEsMjAgQEAg
RU5ECiAKIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke2NsYXNzTmFtZX06
OkdldFJhd1RlbXBsYXRlKCkKIHsKLSAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfVJhd0NhY2hlID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsK
LSAgICByZXR1cm4gJHtjbGFzc05hbWV9UmF3Q2FjaGU7CisgICAgVjhCaW5kaW5nUGVySXNvbGF0
ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOworICAgIGlm
ICghZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5jb250YWlucygmaW5mbykpIHsKKyAgICAgICAgZGF0
YS0+cmF3VGVtcGxhdGVNYXAoKS5hZGQoJmluZm8sIGNyZWF0ZVJhd1RlbXBsYXRlKCkpOworICAg
IH0KKyAgICByZXR1cm4gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5nZXQoJmluZm8pOwogfQogCi12
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gJHtjbGFzc05hbWV9OjpHZXRUZW1w
bGF0ZSgpXAordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1l
fTo6R2V0VGVtcGxhdGUoKQogewotICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gJHtjbGFzc05hbWV9Q2FjaGUgPSBDb25maWd1cmUke2NsYXNzTmFtZX1UZW1w
bGF0ZShHZXRSYXdUZW1wbGF0ZSgpKTsKLSAgICByZXR1cm4gJHtjbGFzc05hbWV9Q2FjaGU7Cisg
ICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0
YTo6Y3VycmVudCgpOworICAgIGlmICghZGF0YS0+dGVtcGxhdGVNYXAoKS5jb250YWlucygmaW5m
bykpIHsKKyAgICAgICAgZGF0YS0+dGVtcGxhdGVNYXAoKS5hZGQoJmluZm8sIENvbmZpZ3VyZSR7
Y2xhc3NOYW1lfVRlbXBsYXRlKEdldFJhd1RlbXBsYXRlKCkpKTsKKyAgICB9CisgICAgcmV0dXJu
IGRhdGEtPnRlbXBsYXRlTWFwKCkuZ2V0KCZpbmZvKTsKIH0KIAogYm9vbCAke2NsYXNzTmFtZX06
Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwCmluZGV4IDJhY2QyOWEuLjY1OTA3ZTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcApAQCAtNDcsNiArNDcsMzIgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCisKK1Y4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpWOEJpbmRp
bmdQZXJJc29sYXRlRGF0YSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkgeworfQorCitWOEJpbmRpbmdQ
ZXJJc29sYXRlRGF0YTo6flY4QmluZGluZ1Blcklzb2xhdGVEYXRhKCkgeworfQorCisvLyBzdGF0
aWMKK1Y4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Z2V0
KHY4OjpJc29sYXRlKiBpc29sYXRlKSB7CisgICAgdm9pZCogZW1iZWRkZXJEYXRhID0gaXNvbGF0
ZS0+R2V0RGF0YSgpOworICAgIGlmIChlbWJlZGRlckRhdGEgIT0gMCkgeworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqPihlbWJlZGRlckRhdGEpOwor
ICAgIH0KKyAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IG5ldyBWOEJpbmRpbmdQ
ZXJJc29sYXRlRGF0YShpc29sYXRlKTsKKyAgICBpc29sYXRlLT5TZXREYXRhKGRhdGEpOworICAg
IHJldHVybiBkYXRhOworfQorCisvLyBzdGF0aWMKK3ZvaWQgVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGE6OmRpc3Bvc2Uodjg6Oklzb2xhdGUqIGlzb2xhdGUpIHsKKyAgICB2b2lkKiBkYXRhID0gaXNv
bGF0ZS0+R2V0RGF0YSgpOworICAgIGlmIChkYXRhICE9IDApIHsKKyAgICAgICAgZGVsZXRlIHN0
YXRpY19jYXN0PFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKj4oZGF0YSk7CisgICAgfQorfQorCiAv
LyBXZWJDb3JlU3RyaW5nUmVzb3VyY2UgaXMgYSBoZWxwZXIgY2xhc3MgZm9yIHY4RXh0ZXJuYWxT
dHJpbmcuIEl0IGlzIHVzZWQKIC8vIHRvIG1hbmFnZSB0aGUgbGlmZS1jeWNsZSBvZiB0aGUgdW5k
ZXJseWluZyBidWZmZXIgb2YgdGhlIGV4dGVybmFsIHN0cmluZy4KIGNsYXNzIFdlYkNvcmVTdHJp
bmdSZXNvdXJjZSA6IHB1YmxpYyB2ODo6U3RyaW5nOjpFeHRlcm5hbFN0cmluZ1Jlc291cmNlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKaW5kZXggNzg3M2I1NC4uOThmZWJi
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKQEAgLTUwLDYgKzUwLDI3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB9OwogICAgIHR5cGVkZWYgQmluZGluZ1NlY3Vy
aXR5PFY4QmluZGluZz4gVjhCaW5kaW5nU2VjdXJpdHk7CiAKKyAgICBjbGFzcyBWOEJpbmRpbmdQ
ZXJJc29sYXRlRGF0YSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgVjhCaW5kaW5nUGVy
SXNvbGF0ZURhdGEqIGdldCh2ODo6SXNvbGF0ZSogaXNvbGF0ZSk7CisgICAgICAgIHN0YXRpYyBW
OEJpbmRpbmdQZXJJc29sYXRlRGF0YSogY3VycmVudCgpIHsKKyAgICAgICAgICAgIHJldHVybiBn
ZXQodjg6Oklzb2xhdGU6OkdldEN1cnJlbnQoKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGlj
IHZvaWQgZGlzcG9zZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSk7CisKKyAgICAgICAgdHlwZWRlZiBI
YXNoTWFwPFdyYXBwZXJUeXBlSW5mbyosIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiA+IFRlbXBsYXRlTWFwOworCisgICAgICAgIFRlbXBsYXRlTWFwJiByYXdUZW1wbGF0ZU1h
cCgpIHsgcmV0dXJuIG1fcmF3VGVtcGxhdGVzOyB9CisgICAgICAgIFRlbXBsYXRlTWFwJiB0ZW1w
bGF0ZU1hcCgpIHsgcmV0dXJuIG1fdGVtcGxhdGVzOyB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSk7CisgICAgICAg
IH5WOEJpbmRpbmdQZXJJc29sYXRlRGF0YSgpOworCisgICAgICAgIFRlbXBsYXRlTWFwIG1fcmF3
VGVtcGxhdGVzOworICAgICAgICBUZW1wbGF0ZU1hcCBtX3RlbXBsYXRlczsKKyAgICB9OworCiAg
ICAgZW51bSBFeHRlcm5hbE1vZGUgewogICAgICAgICBFeHRlcm5hbGl6ZSwKICAgICAgICAgRG9O
b3RFeHRlcm5hbGl6ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKaW5kZXggZWI3MjUyYi4uOGE2NTkyZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHkuY3BwCkBAIC0xLDUgKzEsNCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLyogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC04NCwxMCArODMsMTMgQEAgV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5OjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkoV29ya2Vy
Q29udGV4dCogd29ya2VyQ28KICAgICAsIG1fcmVjdXJzaW9uKDApCiB7CiAgICAgaW5pdFY4SWZO
ZWVkZWQoKTsKKyAgICBtX2lzb2xhdGUgPSB2ODo6SXNvbGF0ZTo6TmV3KCk7CiB9CiAKIFdvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eTo6fldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSgpCiB7
CisgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmRpc3Bvc2UobV9pc29sYXRlKTsKKyAgICBt
X2lzb2xhdGUtPkRpc3Bvc2UoKTsKICAgICBkaXNwb3NlKCk7CiB9CiAKQEAgLTE4Nyw2ICsxODks
NyBAQCBib29sIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Zm9yZ2V0VjhFdmVudE9iamVj
dChFdmVudCogZXZlbnQpCiAKIFNjcmlwdFZhbHVlIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUs
IGNvbnN0IFRleHRQb3NpdGlvbjAmIHNjcmlwdFN0YXJ0UG9zaXRpb24sIFdvcmtlckNvbnRleHRF
eGVjdXRpb25TdGF0ZSogc3RhdGUpCiB7CisgICAgdjg6Oklzb2xhdGU6OlNjb3BlIGlzb2xhdGVT
Y29wZShtX2lzb2xhdGUpOwogICAgIHY4OjpIYW5kbGVTY29wZSBoczsKIAogICAgIGlmICghaW5p
dENvbnRleHRJZk5lZWRlZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAppbmRleCBlNzBjM2QyLi4xNDljMDkx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHkuaApAQCAtODYsNiArODYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgV29ya2VyQ29udGV4dCogbV93b3JrZXJDb250ZXh0OwogICAgICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gbV9jb250ZXh0OworICAgICAgICB2ODo6SXNvbGF0ZSog
bV9pc29sYXRlOwogICAgICAgICBpbnQgbV9yZWN1cnNpb247CiAKICAgICAgICAgVmVjdG9yPEV2
ZW50Kj4gbV9ldmVudHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Q
bGF0Zm9ybUJyaWRnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybUJy
aWRnZS5jcHAKaW5kZXggZDgyNWQyNC4uZjc4MDk2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1CcmlkZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1BsYXRmb3JtQnJpZGdlLmNwcApAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUg
IldlYlZpZXdDbGllbnQuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogI2luY2x1ZGUgIldl
YldvcmtlckNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJXb3JrZXJNZXNzYWdpbmdQcm94eS5oIgog
CiAjaWYgUExBVEZPUk0oQ0cpCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgpA
QCAtMTA0NCw3ICsxMDQ1LDcgQEAgYm9vbCBQbGF0Zm9ybUJyaWRnZTo6cG9wdXBzQWxsb3dlZChO
UFAgbnBwKQogCiBXb3JrZXJDb250ZXh0UHJveHkqIFdvcmtlckNvbnRleHRQcm94eTo6Y3JlYXRl
KFdvcmtlciogd29ya2VyKQogewotICAgIHJldHVybiBXZWJXb3JrZXJDbGllbnRJbXBsOjpjcmVh
dGVXb3JrZXJDb250ZXh0UHJveHkod29ya2VyKTsKKyAgICByZXR1cm4gbmV3IFdvcmtlck1lc3Nh
Z2luZ1Byb3h5KHdvcmtlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="commit-queue"
          id="87583"
          type_id="3"
          status="-"
          setter="dslomov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95694</attachid>
            <date>2011-06-01 18:06:33 -0700</date>
            <delta_ts>2011-08-14 15:16:30 -0700</delta_ts>
            <desc>This patch makes simple worker actually work in-process in Chrome</desc>
            <filename>61016.patch</filename>
            <type>text/plain</type>
            <size>11391</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KaW5kZXggZjIwMmQ3NS4uMzc1ZGY2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTIxNjEsMTQgKzIxNjEsMzAgQEAg
RU5ECiAKIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke2NsYXNzTmFtZX06
OkdldFJhd1RlbXBsYXRlKCkKIHsKLSAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfVJhd0NhY2hlID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsK
LSAgICByZXR1cm4gJHtjbGFzc05hbWV9UmF3Q2FjaGU7CisgICAgVjhCaW5kaW5nUGVySXNvbGF0
ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOworICAgIFY4
QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gCisg
ICAgICAgIGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CisgICAgaWYgKHJlc3Vs
dCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKSB7CisgICAgICAgIHJldHVybiByZXN1
bHQtPnNlY29uZDsKKyAgICB9CisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZV9zY29wZTsKKyAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPSBjcmVhdGVSYXdU
ZW1wbGF0ZSgpOworICAgIGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuYWRkKCZpbmZvLCB0ZW1wbCk7
CisgICAgcmV0dXJuIHRlbXBsOwogfQogCi12ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gJHtjbGFzc05hbWV9OjpHZXRUZW1wbGF0ZSgpXAordjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfTo6R2V0VGVtcGxhdGUoKQogewotICAgIHN0YXRp
YyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gJHtjbGFzc05hbWV9Q2FjaGUg
PSBDb25maWd1cmUke2NsYXNzTmFtZX1UZW1wbGF0ZShHZXRSYXdUZW1wbGF0ZSgpKTsKLSAgICBy
ZXR1cm4gJHtjbGFzc05hbWV9Q2FjaGU7CisgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRh
dGEgPSBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOworICAgIFY4QmluZGluZ1Bl
cklzb2xhdGVEYXRhOjpUZW1wbGF0ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gCisgICAgICAgIGRh
dGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CisgICAgaWYgKHJlc3VsdCAhPSBkYXRhLT50
ZW1wbGF0ZU1hcCgpLmVuZCgpKSB7CisgICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZDsKKyAg
ICB9CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0gCisg
ICAgICAgIENvbmZpZ3VyZSR7Y2xhc3NOYW1lfVRlbXBsYXRlKEdldFJhd1RlbXBsYXRlKCkpOwor
ICAgIGRhdGEtPnRlbXBsYXRlTWFwKCkuYWRkKCZpbmZvLCB0ZW1wbCk7CisgICAgcmV0dXJuIHRl
bXBsOwogfQogCiBib29sICR7Y2xhc3NOYW1lfTo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9N
RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5oCmluZGV4IGIwNDI2
MDYuLmU5MzE1NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURh
dGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmgKQEAgLTg1LDcg
Kzg1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7ICsraSkgewogICAg
ICAgICAgICAgRE9NRGF0YVN0b3JlKiBzdG9yZSA9IGxpc3RbaV07Ci0gICAgICAgICAgICBBU1NF
UlQoc3RvcmUtPmRvbURhdGEoKS0+b3duaW5nVGhyZWFkKCkgPT0gV1RGOjpjdXJyZW50VGhyZWFk
KCkpOworICAgICAgICAgICAgaWYoc3RvcmUtPmRvbURhdGEoKS0+b3duaW5nVGhyZWFkKCkgIT0g
V1RGOjpjdXJyZW50VGhyZWFkKCkpIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBET01XcmFwcGVy
TWFwPFQ+KiBkb21NYXAgPSBzdGF0aWNfY2FzdDxET01XcmFwcGVyTWFwPFQ+Kj4oc3RvcmUtPmdl
dERPTVdyYXBwZXJNYXAobWFwVHlwZSkpOwogICAgICAgICAgICAgaWYgKGRvbU1hcC0+cmVtb3Zl
SWZQcmVzZW50KGRvbU9iamVjdCwgdjhPYmplY3QpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhCaW5kaW5nLmNwcAppbmRleCAyYWNkMjlhLi5jZjU3ZmExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAKQEAgLTQ3LDYgKzQ3LDMwIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorCitWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VjhCaW5kaW5nUGVySXNv
bGF0ZURhdGEodjg6Oklzb2xhdGUqIGlzb2xhdGUpCit7Cit9CisKK1Y4QmluZGluZ1Blcklzb2xh
dGVEYXRhOjp+VjhCaW5kaW5nUGVySXNvbGF0ZURhdGEoKQoreworfQorCitWOEJpbmRpbmdQZXJJ
c29sYXRlRGF0YSogVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmdldCh2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKK3sKKyAgICB2b2lkKiBlbWJlZGRlckRhdGEgPSBpc29sYXRlLT5HZXREYXRhKCk7Cisg
ICAgaWYgKGVtYmVkZGVyRGF0YSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VjhCaW5kaW5nUGVySXNv
bGF0ZURhdGEqPihlbWJlZGRlckRhdGEpOyB9CisgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEq
IGRhdGEgPSBuZXcgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEoaXNvbGF0ZSk7CisgICAgaXNvbGF0
ZS0+U2V0RGF0YShkYXRhKTsKKyAgICByZXR1cm4gZGF0YTsKK30KKwordm9pZCBWOEJpbmRpbmdQ
ZXJJc29sYXRlRGF0YTo6ZGlzcG9zZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICB2b2lk
KiBkYXRhID0gaXNvbGF0ZS0+R2V0RGF0YSgpOworICAgIGlmIChkYXRhKSB7IGRlbGV0ZSBzdGF0
aWNfY2FzdDxWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSo+KGRhdGEpOyAgfQorfQorCiAvLyBXZWJD
b3JlU3RyaW5nUmVzb3VyY2UgaXMgYSBoZWxwZXIgY2xhc3MgZm9yIHY4RXh0ZXJuYWxTdHJpbmcu
IEl0IGlzIHVzZWQKIC8vIHRvIG1hbmFnZSB0aGUgbGlmZS1jeWNsZSBvZiB0aGUgdW5kZXJseWlu
ZyBidWZmZXIgb2YgdGhlIGV4dGVybmFsIHN0cmluZy4KIGNsYXNzIFdlYkNvcmVTdHJpbmdSZXNv
dXJjZSA6IHB1YmxpYyB2ODo6U3RyaW5nOjpFeHRlcm5hbFN0cmluZ1Jlc291cmNlIHsKQEAgLTU0
MCwxMCArNTY0LDEwIEBAIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPiBjb25maWd1cmVUZW1wbGF0
ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4KIAogdjg6OlBlcnNpc3RlbnQ8
djg6OlN0cmluZz4gZ2V0VG9TdHJpbmdOYW1lKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJpbmc+LCB2YWx1ZSwgKCkpOwotICAgIGlmICh2YWx1ZS5J
c0VtcHR5KCkpCi0gICAgICAgIHZhbHVlID0gdjg6OlBlcnNpc3RlbnQ8djg6OlN0cmluZz46Ok5l
dyh2ODo6U3RyaW5nOjpOZXcoInRvU3RyaW5nIikpOwotICAgIHJldHVybiB2YWx1ZTsKKyAgICB2
ODo6UGVyc2lzdGVudDx2ODo6U3RyaW5nPiYgdG9TdHJpbmdOYW1lID0gVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGE6OmN1cnJlbnQoKS0+dG9TdHJpbmdOYW1lKCk7CisgICAgaWYgKHRvU3RyaW5nTmFt
ZS5Jc0VtcHR5KCkpCisgICAgICAgIHRvU3RyaW5nTmFtZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpT
dHJpbmc+OjpOZXcodjg6OlN0cmluZzo6TmV3KCJ0b1N0cmluZyIpKTsKKyAgICByZXR1cm4gKnRv
U3RyaW5nTmFtZTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25zdHJ1Y3Rv
clRvU3RyaW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC01NjQsNyArNTg4LDcgQEAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25zdHJ1Y3RvclRvU3RyaW5nKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCiAKIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBnZXRUb1N0cmluZ1RlbXBsYXRlKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiwgdG9TdHJpbmdUZW1wbGF0ZSwgKCkpOwor
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiYgdG9TdHJpbmdUZW1wbGF0
ZSA9IFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpjdXJyZW50KCktPnRvU3RyaW5nVGVtcGxhdGUo
KTsKICAgICBpZiAodG9TdHJpbmdUZW1wbGF0ZS5Jc0VtcHR5KCkpCiAgICAgICAgIHRvU3RyaW5n
VGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyh2ODo6
RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KGNvbnN0cnVjdG9yVG9TdHJpbmcpKTsKICAgICByZXR1cm4g
dG9TdHJpbmdUZW1wbGF0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4QmluZGluZy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKaW5k
ZXggNzg3M2I1NC4uMjJlNmUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhCaW5kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5n
LmgKQEAgLTUwLDYgKzUwLDMxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB9OwogICAgIHR5
cGVkZWYgQmluZGluZ1NlY3VyaXR5PFY4QmluZGluZz4gVjhCaW5kaW5nU2VjdXJpdHk7CiAKKyAg
ICBjbGFzcyBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSB7CisgICAgcHVibGljOgorICAgICAgICBz
dGF0aWMgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGdldCh2ODo6SXNvbGF0ZSogaXNvbGF0ZSk7
CisgICAgICAgIHN0YXRpYyBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogY3VycmVudCgpIHsKKyAg
ICAgICAgICAgIHJldHVybiBnZXQodjg6Oklzb2xhdGU6OkdldEN1cnJlbnQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgc3RhdGljIHZvaWQgZGlzcG9zZSh2ODo6SXNvbGF0ZSopOworCisgICAgICAg
IHR5cGVkZWYgSGFzaE1hcDxXcmFwcGVyVHlwZUluZm8qLCB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gPiBUZW1wbGF0ZU1hcDsKKworICAgICAgICBUZW1wbGF0ZU1hcCYgcmF3
VGVtcGxhdGVNYXAoKSB7IHJldHVybiBtX3Jhd1RlbXBsYXRlczsgfQorICAgICAgICBUZW1wbGF0
ZU1hcCYgdGVtcGxhdGVNYXAoKSB7IHJldHVybiBtX3RlbXBsYXRlczsgfQorICAgICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6U3RyaW5nPiYgdG9TdHJpbmdOYW1lKCkgeyByZXR1cm4gbV90b1N0cmlu
Z05hbWU7IH0KKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+JiB0
b1N0cmluZ1RlbXBsYXRlKCkgeyByZXR1cm4gbV90b1N0cmluZ1RlbXBsYXRlOyB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSh2ODo6SXNvbGF0ZSopOwor
ICAgICAgICB+VjhCaW5kaW5nUGVySXNvbGF0ZURhdGEoKTsKKworICAgICAgICBUZW1wbGF0ZU1h
cCBtX3Jhd1RlbXBsYXRlczsKKyAgICAgICAgVGVtcGxhdGVNYXAgbV90ZW1wbGF0ZXM7CisgICAg
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJpbmc+IG1fdG9TdHJpbmdOYW1lOworICAgICAgICB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gbV90b1N0cmluZ1RlbXBsYXRlOwor
ICAgIH07CisKICAgICBlbnVtIEV4dGVybmFsTW9kZSB7CiAgICAgICAgIEV4dGVybmFsaXplLAog
ICAgICAgICBEb05vdEV4dGVybmFsaXplCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1h
cC5jcHAKaW5kZXggNDBkMWRjMy4uNjBhYzljOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhET01NYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4RE9NTWFwLmNwcApAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgdmlzaXRET01Ob2Rlc0luQ3Vy
cmVudFRocmVhZChET01XcmFwcGVyTWFwPE5vZGU+OjpWaXNpdG9yKiB2aXNpdG9yKQogICAgIERP
TURhdGFMaXN0JiBsaXN0ID0gRE9NRGF0YVN0b3JlOjphbGxTdG9yZXMoKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyArK2kpIHsKICAgICAgICAgRE9NRGF0YVN0b3Jl
KiBzdG9yZSA9IGxpc3RbaV07Ci0gICAgICAgIGlmICghc3RvcmUtPmRvbURhdGEoKS0+b3duaW5n
VGhyZWFkKCkgPT0gV1RGOjpjdXJyZW50VGhyZWFkKCkpCisgICAgICAgIGlmIChzdG9yZS0+ZG9t
RGF0YSgpLT5vd25pbmdUaHJlYWQoKSAhPSBXVEY6OmN1cnJlbnRUaHJlYWQoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHN0b3JlLT5kb21Ob2RlTWFwKCkudmlzaXQoc3RvcmUs
IHZpc2l0b3IpOwpAQCAtMTM1LDcgKzEzNSw3IEBAIHZvaWQgdmlzaXRET01PYmplY3RzSW5DdXJy
ZW50VGhyZWFkKERPTVdyYXBwZXJNYXA8dm9pZD46OlZpc2l0b3IqIHZpc2l0b3IpCiAgICAgRE9N
RGF0YUxpc3QmIGxpc3QgPSBET01EYXRhU3RvcmU6OmFsbFN0b3JlcygpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICBET01EYXRhU3RvcmUq
IHN0b3JlID0gbGlzdFtpXTsKLSAgICAgICAgaWYgKCFzdG9yZS0+ZG9tRGF0YSgpLT5vd25pbmdU
aHJlYWQoKSA9PSBXVEY6OmN1cnJlbnRUaHJlYWQoKSkKKyAgICAgICAgaWYgKHN0b3JlLT5kb21E
YXRhKCktPm93bmluZ1RocmVhZCgpICE9IFdURjo6Y3VycmVudFRocmVhZCgpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgc3RvcmUtPmRvbU9iamVjdE1hcCgpLnZpc2l0KHN0b3Jl
LCB2aXNpdG9yKTsKQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIHZpc2l0QWN0aXZlRE9NT2JqZWN0
c0luQ3VycmVudFRocmVhZChET01XcmFwcGVyTWFwPHZvaWQ+OjpWaXNpdG9yKiB2aXNpdG9yKQog
ICAgIERPTURhdGFMaXN0JiBsaXN0ID0gRE9NRGF0YVN0b3JlOjphbGxTdG9yZXMoKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyArK2kpIHsKICAgICAgICAgRE9NRGF0
YVN0b3JlKiBzdG9yZSA9IGxpc3RbaV07Ci0gICAgICAgIGlmICghc3RvcmUtPmRvbURhdGEoKS0+
b3duaW5nVGhyZWFkKCkgPT0gV1RGOjpjdXJyZW50VGhyZWFkKCkpCisgICAgICAgIGlmIChzdG9y
ZS0+ZG9tRGF0YSgpLT5vd25pbmdUaHJlYWQoKSAhPSBXVEY6OmN1cnJlbnRUaHJlYWQoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHN0b3JlLT5hY3RpdmVEb21PYmplY3RNYXAo
KS52aXNpdChzdG9yZSwgdmlzaXRvcik7CkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCB2aXNpdERP
TVNWR0VsZW1lbnRJbnN0YW5jZXNJbkN1cnJlbnRUaHJlYWQoRE9NV3JhcHBlck1hcDxTVkdFbGVt
ZW50SW5zdGFuY2UKICAgICBET01EYXRhTGlzdCYgbGlzdCA9IERPTURhdGFTdG9yZTo6YWxsU3Rv
cmVzKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIERPTURhdGFTdG9yZSogc3RvcmUgPSBsaXN0W2ldOwotICAgICAgICBpZiAoIXN0b3Jl
LT5kb21EYXRhKCktPm93bmluZ1RocmVhZCgpID09IFdURjo6Y3VycmVudFRocmVhZCgpKQorICAg
ICAgICBpZiAoc3RvcmUtPmRvbURhdGEoKS0+b3duaW5nVGhyZWFkKCkgIT0gV1RGOjpjdXJyZW50
VGhyZWFkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBzdG9yZS0+ZG9tU3Zn
RWxlbWVudEluc3RhbmNlTWFwKCkudmlzaXQoc3RvcmUsIHZpc2l0b3IpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94
eS5jcHAKaW5kZXggZWI3MjUyYi4uOGE2NTkyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCkBAIC0x
LDUgKzEsNCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLyogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCkBAIC04NCwxMCArODMsMTMgQEAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpXb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHkoV29ya2VyQ29udGV4dCogd29ya2VyQ28KICAgICAsIG1f
cmVjdXJzaW9uKDApCiB7CiAgICAgaW5pdFY4SWZOZWVkZWQoKTsKKyAgICBtX2lzb2xhdGUgPSB2
ODo6SXNvbGF0ZTo6TmV3KCk7CiB9CiAKIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6fldv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSgpCiB7CisgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGE6OmRpc3Bvc2UobV9pc29sYXRlKTsKKyAgICBtX2lzb2xhdGUtPkRpc3Bvc2UoKTsKICAgICBk
aXNwb3NlKCk7CiB9CiAKQEAgLTE4Nyw2ICsxODksNyBAQCBib29sIFdvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eTo6Zm9yZ2V0VjhFdmVudE9iamVjdChFdmVudCogZXZlbnQpCiAKIFNjcmlwdFZh
bHVlIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBz
Y3JpcHQsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFRleHRQb3NpdGlvbjAmIHNjcmlw
dFN0YXJ0UG9zaXRpb24sIFdvcmtlckNvbnRleHRFeGVjdXRpb25TdGF0ZSogc3RhdGUpCiB7Cisg
ICAgdjg6Oklzb2xhdGU6OlNjb3BlIGlzb2xhdGVTY29wZShtX2lzb2xhdGUpOwogICAgIHY4OjpI
YW5kbGVTY29wZSBoczsKIAogICAgIGlmICghaW5pdENvbnRleHRJZk5lZWRlZCgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHkuaAppbmRleCBlNzBjM2QyLi4xNDljMDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaApAQCAtODYs
NiArODYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgV29ya2VyQ29udGV4dCog
bV93b3JrZXJDb250ZXh0OwogICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gbV9j
b250ZXh0OworICAgICAgICB2ODo6SXNvbGF0ZSogbV9pc29sYXRlOwogICAgICAgICBpbnQgbV9y
ZWN1cnNpb247CiAKICAgICAgICAgVmVjdG9yPEV2ZW50Kj4gbV9ldmVudHM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybUJyaWRnZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybUJyaWRnZS5jcHAKaW5kZXggZDgyNWQyNC4uZjc4
MDk2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1Ccmlk
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtQnJpZGdlLmNw
cApAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgIldlYlZpZXdDbGllbnQuaCIKICNpbmNsdWRl
ICJXZWJWaWV3SW1wbC5oIgogI2luY2x1ZGUgIldlYldvcmtlckNsaWVudEltcGwuaCIKKyNpbmNs
dWRlICJXb3JrZXJNZXNzYWdpbmdQcm94eS5oIgogCiAjaWYgUExBVEZPUk0oQ0cpCiAjaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgpAQCAtMTA0NCw3ICsxMDQ1LDcgQEAgYm9vbCBQ
bGF0Zm9ybUJyaWRnZTo6cG9wdXBzQWxsb3dlZChOUFAgbnBwKQogCiBXb3JrZXJDb250ZXh0UHJv
eHkqIFdvcmtlckNvbnRleHRQcm94eTo6Y3JlYXRlKFdvcmtlciogd29ya2VyKQogewotICAgIHJl
dHVybiBXZWJXb3JrZXJDbGllbnRJbXBsOjpjcmVhdGVXb3JrZXJDb250ZXh0UHJveHkod29ya2Vy
KTsKKyAgICByZXR1cm4gbmV3IFdvcmtlck1lc3NhZ2luZ1Byb3h5KHdvcmtlcik7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNjcmlwdENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggMTBiYzY4Zi4uNmU1OGRjMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2NyaXB0Q29udHJvbGxlci5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2NyaXB0Q29udHJvbGxlci5jcHAKQEAg
LTQ4LDggKzQ4LDggQEAgdm9pZCBXZWJTY3JpcHRDb250cm9sbGVyOjpyZWdpc3RlckV4dGVuc2lv
bih2ODo6RXh0ZW5zaW9uKiBleHRlbnNpb24pCiAKIHZvaWQgV2ViU2NyaXB0Q29udHJvbGxlcjo6
ZW5hYmxlVjhTaW5nbGVUaHJlYWRNb2RlKCkKIHsKLSAgICBlbmFibGVTdHJpbmdJbXBsQ2FjaGUo
KTsKLSAgICBlbmFibGVGYXN0ZXJET01TdG9yZUFjY2VzcygpOworICAgIC8vZW5hYmxlU3RyaW5n
SW1wbENhY2hlKCk7CisgICAgLy9lbmFibGVGYXN0ZXJET01TdG9yZUFjY2VzcygpOwogfQogCiB2
b2lkIFdlYlNjcmlwdENvbnRyb2xsZXI6OmZsdXNoQ29uc29sZU1lc3NhZ2VzKCkK
</data>
<flag name="commit-queue"
          id="89243"
          type_id="3"
          status="-"
          setter="dslomov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103883</attachid>
            <date>2011-08-14 15:16:30 -0700</date>
            <delta_ts>2011-08-15 14:35:21 -0700</delta_ts>
            <desc>This adds an implementation of in-process dedicated workers to chromium port. </desc>
            <filename>61016.patch</filename>
            <type>text/plain</type>
            <size>60938</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MzkwM2Y4Li5kNzgxOWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTEtMDgtMTQgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEwMTYKKyAgICAg
ICAgW1dlYldvcmtlcnNdW0Nocm9taXVtXSBVc2UgdjggSXNvbGF0ZXMgZm9yIGluLXByb2Nlc3Mg
aW1wbGVtZW50YXRpb24gb2YgV2ViV29ya2Vycy4KKyAgICAgICAgVGhpcyBhZGRzIGFuIGltcGxl
bWVudGF0aW9uIG9mIGluLXByb2Nlc3MgZGVkaWNhdGVkIHdvcmtlcnMgdG8gY2hyb21pdW0gcG9y
dC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3Zl
cmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJNZXNzYWdp
bmdQcm94eS5oOiBNYWRlIGRlc3RydWN0b3IgcHVibGljIHRvIGVuYWJsZSB1c2luZyBXb3JrZXJN
ZXNzYWdpbmdQcm94eSBpbiBjaHJvbWl1bSBwb3J0LgorCiAyMDExLTA4LTE0ICBLYWxldiBMZW1i
ZXIgIDxrYWxldmxlbWJlckBnbWFpbC5jb20+CiAKICAgICAgICAgRml4IEdUSyBXaW5kb3dzIGJ1
aWxkIGFmdGVyIHI5MjMwOC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyTWVzc2FnaW5nUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2Fn
aW5nUHJveHkuaAppbmRleCAzNzMxNDgwLi42N2NjYTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oCkBAIC01MCw2ICs1MCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV29ya2VyTWVzc2FnaW5n
UHJveHkpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAgIFdv
cmtlck1lc3NhZ2luZ1Byb3h5KFdvcmtlciopOworICAgICAgICB2aXJ0dWFsIH5Xb3JrZXJNZXNz
YWdpbmdQcm94eSgpOwogCiAgICAgICAgIC8vIEltcGxlbWVudGF0aW9ucyBvZiBXb3JrZXJDb250
ZXh0UHJveHkuCiAgICAgICAgIC8vIChPbmx5IHVzZSB0aGVzZSBtZXRob2RzIGluIHRoZSB3b3Jr
ZXIgb2JqZWN0IHRocmVhZC4pCkBAIC04OSw3ICs5MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIFdvcmtlckV4Y2VwdGlvblRhc2s7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBXb3JrZXJUaHJlYWRBY3Rpdml0eVJlcG9ydFRhc2s7CiAKLSAgICAgICAgdmlydHVh
bCB+V29ya2VyTWVzc2FnaW5nUHJveHkoKTsKIAogICAgICAgICB2b2lkIHdvcmtlckNvbnRleHRE
ZXN0cm95ZWRJbnRlcm5hbCgpOwogICAgICAgICB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eUlu
dGVybmFsKGJvb2wgY29uZmlybWluZ01lc3NhZ2UsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjA1NDIwYy4uYmViMjUwOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NSBAQAorMjAxMS0wOC0xNCAgRG1pdHJ5IExv
bW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MTAxNgorICAgICAgICBbV2ViV29ya2Vyc11bQ2hyb21pdW1d
IFVzZSB2OCBJc29sYXRlcyBmb3IgaW4tcHJvY2VzcyBpbXBsZW1lbnRhdGlvbiBvZiBXZWJXb3Jr
ZXJzLgorICAgICAgICBUaGlzIGFkZHMgYW4gaW1wbGVtZW50YXRpb24gb2YgaW4tcHJvY2VzcyBk
ZWRpY2F0ZWQgd29ya2VycyB0byBjaHJvbWl1bSBwb3J0LgorICAgICAgICBUaGUgY3J1eCBvZiB0
aGUgbWF0dGVyIGlzIHRoZSByZWltcGxlbWVudGF0aW9uIG9mIFdlYldvcmtlckNsaWVudEltcGwu
IFdlYldvcmtlckNsaWVudEltcGwgbm93IAorICAgICAgICBpbXBsZW1lbnRzIGFsbCB0aHJlZSBv
ZiBXb3JrZXJ7TG9hZGVyLENvbnRleHQsT2JqZWN0fVByb3hpZXMgYW5kIGRlbGVnYXRlcyB0aGUg
aW1wbGVtZW50YXRpb24gdG8gCisgICAgICAgIFdlYktpdCdzIHN0YW5kYXJkIFdvcmtlck1lc3Nh
Z2luZ1Byb3h5LgorICAgICAgICBGb3Igbm93LCB3ZSBoYXZlIDMgaW1wbGVtZW50YXRpb25zIG9m
IHdvcmtlcnMgaW4gY2hyb21pdW0gV2ViS2l0OgorICAgICAgICAgIC0gSW4tcHJvY2VzcyBkZWRp
Y2F0ZWQgd29ya2VycyAodGhpcyBjaGVja2luKQorICAgICAgICAgIC0gSW50ZXItcHJvY2VzcyBz
aGFyZWQgd29ya2VycworICAgICAgICAgIC0gSW50ZXItcHJvY2VzcyBkZWRpY2F0ZWQgd29ya2Vy
cyAoZGVmdW5jdCBhZnRlciB0aGlzIGNoZWNraW4pCisgICAgICAgIFRoaXMgcGF0Y2ggZXh0cmFj
dHMgc29tZSBuZXcgY29tbW9uIGludGVyZmFjZXMgKFdlYkNvbW1vbldvcmtlckJhc2UgYW5kIFdl
YkNvbW1vbldvcmtlckNsaWVudCkgZm9yIHRoZXNlIAorICAgICAgICB0aHJlZSBpbXBsZW1lbnRh
dGlvbnMuIAorICAgICAgICBSZW1vdmluZyB0aGUgcmVtYWluaW5ncyBvZiBpbnRlci1wcm9jZXNz
IGRlZGljYXRlZCB3b3JrZXJzIC1yZWxhdGVkIGNsYXNzZXMgaXMgbGVmdCBmb3IgYSBzZXBhcmF0
ZSBwYXRjaCAKKyAgICAgICAgKGl0IHdpbGwgcmVxdWlyZSBjb29yZGluYXRlZCBjaGFuZ2VzIG9u
IGNocm9tdWl1bSBzaWRlKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYkNvbW1vbldvcmtl
ckNsaWVudC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJDb21tb25Xb3JrZXJDbGllbnRCYXNlLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNoYXJlZFdvcmtlcklt
cGwuaC4KKyAgICAgICAgKiBzcmMvRGF0YWJhc2VPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZTo6QWxsb3dEYXRhYmFzZU1haW5UaHJl
YWRCcmlkZ2UpOgorICAgICAgICAoV2ViS2l0OjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRn
ZTo6YWxsb3dEYXRhYmFzZVRhc2spOgorICAgICAgICAoV2ViS2l0OjphbGxvd0RhdGFiYXNlRm9y
V29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmNhbkVzdGFibGlz
aERhdGFiYXNlKToKKyAgICAgICAgKiBzcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6b3BlbkZpbGVTeXN0ZW1IZWxwZXIpOgorICAgICAgICAqIHNyYy9X
ZWJDb21tb25Xb3JrZXJCYXNlLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJTaGFyZWRXb3Jr
ZXJJbXBsLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OmNvbW1vbkNs
aWVudEJhc2UpOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJCYXNlLmg6CisgICAgICAgIChXZWJL
aXQ6OldlYldvcmtlckJhc2U6OndlYlZpZXcpOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJDbGll
bnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6Y3JlYXRl
V29ya2VyQ29udGV4dFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1w
bDo6V2ViV29ya2VyQ2xpZW50SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVu
dEltcGw6On5XZWJXb3JrZXJDbGllbnRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2Vy
Q2xpZW50SW1wbDo6c3RhcnRXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29y
a2VyQ2xpZW50SW1wbDo6dGVybWluYXRlV29ya2VyQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6
OldlYldvcmtlckNsaWVudEltcGw6OnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6d29ya2VyT2JqZWN0RGVzdHJveWVk
KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6Y29ubmVjdFRvSW5zcGVj
dG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6ZGlzY29ubmVjdEZy
b21JbnNwZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpzZW5k
TWVzc2FnZVRvSW5zcGVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1w
bDo6cG9zdFRhc2tUb0xvYWRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudElt
cGw6OnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YldvcmtlckNsaWVudEltcGw6OnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmpl
Y3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpyZXBvcnRQZW5kaW5n
QWN0aXZpdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjp3b3JrZXJD
b250ZXh0Q2xvc2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6cG9z
dEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xp
ZW50SW1wbDo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3Rvcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OndvcmtlckNvbnRleHREZXN0cm95
ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjp3ZWJWaWV3KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6YWxsb3dGaWxlU3lzdGVtKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6b3BlbkZpbGVTeXN0ZW0pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjphbGxvd0RhdGFiYXNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEZXZUb29sc01lc3NhZ2Up
OgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmg6CisgICAgICAgIChXZWJLaXQ6
OldlYldvcmtlckNsaWVudEltcGw6OmNvbW1vbkNsaWVudEJhc2UpOgorICAgICAgICAqIHNyYy9X
ZWJXb3JrZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VySW1wbDo6Y29tbW9u
Q2xpZW50QmFzZSk6CisgICAgICAgICogc3JjL1dlYldvcmtlckltcGwuaDoKKyAgICAgICAgKiBz
cmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RPcGVuRmlsZVN5c3RlbVRvTWFp
blRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2U6Om9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkKToKKyAgICAgICAgKiBzcmMvV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oOgorCiAyMDExLTA4LTEyICBGYWR5IFNhbXVlbCAgPGZz
YW11ZWxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlZmFjdG9yaW5nIG9mIFBvcHVwTWVudUNo
cm9taXVtIEZvciBSZWFkYWJpbGl0eSBhbmQgTWFpbnRhaW5hYmlsaXR5CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAKaW5kZXggZWM5OGVjYy4uZDkyMDMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cApAQCAtMTE4LDYgKzExOCw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJD
b2xvck5hbWUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb21tb24uaCcsCiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb21tb25Xb3JrZXJDbGllbnQuaCcsCisgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJDb21tb25Xb3JrZXJDbGllbnRCYXNlLmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViQ29tcG9zaXRpb25VbmRlcmxpbmUuaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJDb25zb2xlTWVzc2FnZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YkNvbnRleHRNZW51RGF0YS5oJywKQEAgLTQzMiw2ICs0MzMsNyBAQAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViQ2FjaGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbG9yLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21tb24uY3BwJywKKyAgICAgICAgICAgICAgICAn
c3JjL1dlYkNvbW1vbldvcmtlckJhc2UuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDcm9z
c09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJDU3RyaW5nLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDdXJzb3JJbmZvLmNwcCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21tb25Xb3Jr
ZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtl
ckNsaWVudC5oCmluZGV4IDM1MmEyYzAuLjJjZDI2NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oCkBAIC0zMiw2ICsz
Miw3IEBACiAjZGVmaW5lIFdlYkNvbW1vbldvcmtlckNsaWVudF9oCiAKICNpbmNsdWRlICJXZWJD
b21tb24uaCIKKyNpbmNsdWRlICJXZWJDb21tb25Xb3JrZXJDbGllbnRCYXNlLmgiCiAjaW5jbHVk
ZSAiV2ViRmlsZVN5c3RlbS5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ5LDcgKzUwLDcg
QEAgY2xhc3MgV2ViV29ya2VyQ2xpZW50OwogLy8gd29ya2Vycy4KIC8vIEFsbCBmdW5jdGlvbnMg
YXJlIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCBiYWNrIG9uIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVk
CiAvLyB0aGUgV29ya2VyIG9iamVjdCwgdW5sZXNzIG5vdGVkLgotY2xhc3MgV2ViQ29tbW9uV29y
a2VyQ2xpZW50IHsKK2NsYXNzIFdlYkNvbW1vbldvcmtlckNsaWVudCA6IHB1YmxpYyBXZWJDb21t
b25Xb3JrZXJDbGllbnRCYXNlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2Vw
dGlvblRvV29ya2VyT2JqZWN0KAogICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGVycm9yU3RyaW5n
LCBpbnQgbGluZU51bWJlciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkNvbW1vbldvcmtlckNsaWVudEJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudEJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5hMGI3MmQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViQ29tbW9uV29ya2VyQ2xpZW50QmFzZS5oCkBAIC0wLDAgKzEsNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYkNvbW1vbldvcmtlckNsaWVudEJhc2VfaAorI2RlZmluZSBXZWJDb21tb25X
b3JrZXJDbGllbnRCYXNlX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldl
YkZpbGVTeXN0ZW0uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkZyYW1lOwor
Y2xhc3MgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOworY2xhc3MgV2ViU3RyaW5nOworY2xhc3Mg
V2ViV29ya2VyOworCitjbGFzcyBXZWJDb21tb25Xb3JrZXJDbGllbnRCYXNlIHsKK3B1YmxpYzoK
KyAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVhZCBiZWZvcmUgb3BlbmluZyBh
IHdlYiBkYXRhYmFzZS4KKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dEYXRhYmFzZShXZWJGcmFtZSos
IGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgb24gdGhlIG1h
aW4gd2Via2l0IHRocmVhZCBiZWZvcmUgb3BlbmluZyBhIGZpbGUgc3lzdGVtLgorICAgIHZpcnR1
YWwgYm9vbCBhbGxvd0ZpbGVTeXN0ZW0oKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgb24gdGhlIG1h
aW4gd2Via2l0IHRocmVhZCBiZWZvcmUgb3BlbmluZyBhIGZpbGUgc3lzdGVtLgorICAgIHZpcnR1
YWwgdm9pZCBvcGVuRmlsZVN5c3RlbShXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6
ZSwgYm9vbCBjcmVhdGUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqKSA9IDA7Cit9OworCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VP
YnNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRhYmFzZU9ic2VydmVy
LmNwcAppbmRleCA1MWM0OGQ4Li5mNTNlNDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9EYXRhYmFzZU9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9EYXRhYmFzZU9ic2VydmVyLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUg
IkNyb3NzVGhyZWFkVGFzay5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkNvbW1vbldvcmtlckJhc2UuaCIK
ICNpbmNsdWRlICJXZWJDb21tb25Xb3JrZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJEYXRhYmFz
ZS5oIgogI2luY2x1ZGUgIldlYkRhdGFiYXNlT2JzZXJ2ZXIuaCIKQEAgLTQ2LDcgKzQ3LDcgQEAK
ICNpbmNsdWRlICJXZWJQZXJtaXNzaW9uQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViU2VjdXJpdHlP
cmlnaW4uaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgotI2luY2x1ZGUgIldlYldvcmtlcklt
cGwuaCIKKyNpbmNsdWRlICJXZWJXb3JrZXJCYXNlLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4
dC5oIgogI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCiAjaW5jbHVkZSAiV29ya2VyU2Ny
aXB0Q29udHJvbGxlci5oIgpAQCAtNjQsNyArNjUsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBhbGxv
d0RhdGFiYXNlTW9kZVtdID0gImFsbG93RGF0YWJhc2VNb2RlIjsKIC8vIGNhbGwgYmFjayB0byB0
aGUgd29ya2VyIGNvbnRleHQuCiBjbGFzcyBBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZSA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRn
ZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFsbG93RGF0YWJhc2VNYWluVGhy
ZWFkQnJpZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRl
clByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBj
b21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNv
bnN0IFdURjo6U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXpl
KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlPiBj
cmVhdGUoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25z
dCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50QmFzZSogY29tbW9uQ2xp
ZW50LCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6
OlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKICAgICB7
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlk
Z2Uod29ya2VyTG9hZGVyUHJveHksIG1vZGUsIGNvbW1vbkNsaWVudCwgZnJhbWUsIG5hbWUsIGRp
c3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7CiAgICAgfQpAQCAtOTIsNyArOTMsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdl
KFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgV1RG
OjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJG
cmFtZSogZnJhbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYg
ZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKKyAgICBBbGxvd0RhdGFi
YXNlTWFpblRocmVhZEJyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9h
ZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnRC
YXNlKiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIG5h
bWUsIGNvbnN0IFdURjo6U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0
ZWRTaXplKQogICAgICAgICA6IG1fd29ya2VyTG9hZGVyUHJveHkod29ya2VyTG9hZGVyUHJveHkp
CiAgICAgICAgICwgbV9tb2RlKG1vZGUpCiAgICAgewpAQCAtMTAzLDcgKzEwNCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6QWxsb3dDcm9zc1Ro
cmVhZEFjY2Vzcyh0aGlzKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFsbG93RGF0YWJh
c2VUYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdlYkNvbW1v
bldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdURjo6
U3RyaW5nIG5hbWUsIGNvbnN0IFdURjo6U3RyaW5nIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25n
IGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+
IGJyaWRnZSkKKyAgICBzdGF0aWMgdm9pZCBhbGxvd0RhdGFiYXNlVGFzayhXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBXZWJDb21tb25Xb3JrZXJDbGllbnRCYXNlKiBj
b21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcgbmFtZSwgY29u
c3QgV1RGOjpTdHJpbmcgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwg
UGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlKQogICAgIHsK
ICAgICAgICAgaWYgKGNvbW1vbkNsaWVudCkKICAgICAgICAgICAgIGJyaWRnZS0+c2lnbmFsQ29t
cGxldGVkKGNvbW1vbkNsaWVudC0+YWxsb3dEYXRhYmFzZShmcmFtZSwgbmFtZSwgZGlzcGxheU5h
bWUsIGVzdGltYXRlZFNpemUpKTsKQEAgLTEyMiw3ICsxMjMsNyBAQCBwcml2YXRlOgogICAgIFdU
Rjo6U3RyaW5nIG1fbW9kZTsKIH07CiAKLWJvb2wgYWxsb3dEYXRhYmFzZUZvcldvcmtlcihXZWJD
b21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBX
ZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSkKK2Jvb2wgYWxsb3dEYXRhYmFzZUZvcldvcmtlcihXZWJDb21tb25X
b3JrZXJDbGllbnRCYXNlKiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2Vi
U3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25n
IGVzdGltYXRlZFNpemUpCiB7CiAgICAgV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlciog
Y29udHJvbGxlciA9IFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJG
b3JDb250ZXh0KCk7CiAgICAgV2ViQ29yZTo6V29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9
IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKQEAgLTE2NSw4ICsxNjYsOCBAQCBib29sIERh
dGFiYXNlT2JzZXJ2ZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dAogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgICAgICBXb3JrZXJDb250
ZXh0KiB3b3JrZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpOwogICAgICAgICBXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVy
UHJveHkgPSAmd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7Ci0g
ICAgICAgIFdlYldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PFdlYldvcmtlckJh
c2UqPih3b3JrZXJMb2FkZXJQcm94eSk7Ci0gICAgICAgIHJldHVybiBhbGxvd0RhdGFiYXNlRm9y
V29ya2VyKHdlYldvcmtlci0+Y29tbW9uQ2xpZW50KCksIHdlYldvcmtlci0+d2ViVmlldygpLT5t
YWluRnJhbWUoKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOworICAgICAgICBX
ZWJDb21tb25Xb3JrZXJCYXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxXZWJDb21tb25Xb3Jr
ZXJCYXNlKj4od29ya2VyTG9hZGVyUHJveHkpOworICAgICAgICByZXR1cm4gYWxsb3dEYXRhYmFz
ZUZvcldvcmtlcih3ZWJXb3JrZXItPmNvbW1vbkNsaWVudEJhc2UoKSwgd2ViV29ya2VyLT53ZWJW
aWV3KCktPm1haW5GcmFtZSgpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CiAj
ZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCmlu
ZGV4IGIzM2NlMmEuLmEyZmVlYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKQEAgLTQwLDcgKzQwLDggQEAKICNp
bmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2suaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJh
Y2tzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJXZWJDb21tb25X
b3JrZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJDb21tb25Xb3JrZXJCYXNlLmgiCisjaW5jbHVk
ZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50QmFzZS5oIgogI2luY2x1ZGUgIldlYkZpbGVFcnJvci5o
IgogI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJXZWJGaWxlU3lzdGVtQ2Fs
bGJhY2tzSW1wbC5oIgpAQCAtNDgsNyArNDksNyBAQAogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5o
IgogI2luY2x1ZGUgIldlYlBlcm1pc3Npb25DbGllbnQuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1w
bC5oIgotI2luY2x1ZGUgIldlYldvcmtlckltcGwuaCIKKyNpbmNsdWRlICJXZWJXb3JrZXJCYXNl
LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2UuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKQEAgLTgwLDcg
KzgxLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgb3BlbkZpbGVTeXN0ZW1Nb2RlW10gPSAib3BlbkZp
bGVTeXN0ZW1Nb2RlIjsKIC8vIGNhbGwgYmFjayB0byB0aGUgd29ya2VyIGNvbnRleHQuCiBjbGFz
cyBBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlPiBjcmVhdGUo
V2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6
OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZT4gY3JlYXRl
KFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgV1RG
OjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudEJhc2UqIGNvbW1vbkNsaWVudCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWxsb3dGaWxlU3lzdGVtTWFpblRo
cmVhZEJyaWRnZSh3b3JrZXJMb2FkZXJQcm94eSwgbW9kZSwgY29tbW9uQ2xpZW50KSk7CiAgICAg
fQpAQCAtMTA3LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQWxs
b3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSog
d29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25Xb3Jr
ZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKKyAgICBBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJp
ZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3Qg
V1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudEJhc2UqIGNvbW1vbkNsaWVu
dCkKICAgICAgICAgOiBtX3dvcmtlckxvYWRlclByb3h5KHdvcmtlckxvYWRlclByb3h5KQogICAg
ICAgICAsIG1fbW9kZShtb2RlKQogICAgIHsKQEAgLTExNiw3ICsxMTcsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhp
cykpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhbGxvd0ZpbGVTeXN0ZW1UYXNrKFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdlYkNvbW1vbldvcmtlckNsaWVu
dCogY29tbW9uQ2xpZW50LCBQYXNzUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlk
Z2U+IGJyaWRnZSkKKyAgICBzdGF0aWMgdm9pZCBhbGxvd0ZpbGVTeXN0ZW1UYXNrKFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdlYkNvbW1vbldvcmtlckNsaWVudEJh
c2UqIGNvbW1vbkNsaWVudCwgUGFzc1JlZlB0cjxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJp
ZGdlPiBicmlkZ2UpCiAgICAgewogICAgICAgICBpZiAoY29tbW9uQ2xpZW50KQogICAgICAgICAg
ICAgYnJpZGdlLT5zaWduYWxDb21wbGV0ZWQoY29tbW9uQ2xpZW50LT5hbGxvd0ZpbGVTeXN0ZW0o
KSk7CkBAIC0xMzUsNyArMTM2LDcgQEAgcHJpdmF0ZToKICAgICBXVEY6OlN0cmluZyBtX21vZGU7
CiB9OwogCi1ib29sIGFsbG93RmlsZVN5c3RlbUZvcldvcmtlcihXZWJDb21tb25Xb3JrZXJDbGll
bnQqIGNvbW1vbkNsaWVudCkKK2Jvb2wgYWxsb3dGaWxlU3lzdGVtRm9yV29ya2VyKFdlYkNvbW1v
bldvcmtlckNsaWVudEJhc2UqIGNvbW1vbkNsaWVudCkKIHsKICAgICBXb3JrZXJTY3JpcHRDb250
cm9sbGVyKiBjb250cm9sbGVyID0gV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6Y29udHJvbGxlckZv
ckNvbnRleHQoKTsKICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gY29udHJvbGxl
ci0+d29ya2VyQ29udGV4dCgpOwpAQCAtMTU4LDcgKzE1OSw3IEBAIGJvb2wgYWxsb3dGaWxlU3lz
dGVtRm9yV29ya2VyKFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KQogICAgIHJl
dHVybiBicmlkZ2UtPnJlc3VsdCgpOwogfQogCi12b2lkIG9wZW5GaWxlU3lzdGVtRm9yV29ya2Vy
KFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBl
IHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNr
cyogY2FsbGJhY2tzLCBib29sIHN5bmNocm9ub3VzKQordm9pZCBvcGVuRmlsZVN5c3RlbUZvcldv
cmtlcihXZWJDb21tb25Xb3JrZXJDbGllbnRCYXNlKiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0
ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzKiBjYWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMpCiB7CiAgICAgV29ya2VyU2Ny
aXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRy
b2xsZXJGb3JDb250ZXh0KCk7CiAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IGNv
bnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKQEAgLTIwNCwxMSArMjA1LDEyIEBAIHN0YXRpYyB2
b2lkIG9wZW5GaWxlU3lzdGVtSGVscGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IEFzeW5jRmlsZVN5c3RlCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgICAgIFdvcmtlckNvbnRl
eHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCk7
CiAgICAgICAgIFdvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICZ3b3JrZXJD
b250ZXh0LT50aHJlYWQoKS0+d29ya2VyTG9hZGVyUHJveHkoKTsKLSAgICAgICAgV2ViV29ya2Vy
QmFzZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRl
clByb3h5KTsKLSAgICAgICAgaWYgKCFhbGxvd0ZpbGVTeXN0ZW1Gb3JXb3JrZXIod2ViV29ya2Vy
LT5jb21tb25DbGllbnQoKSkpCisgICAgICAgIFdlYkNvbW1vbldvcmtlckJhc2UqIHdlYldvcmtl
ciA9IHN0YXRpY19jYXN0PFdlYkNvbW1vbldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94eSk7
CisgICAgICAgIGlmICghYWxsb3dGaWxlU3lzdGVtRm9yV29ya2VyKHdlYldvcmtlci0+Y29tbW9u
Q2xpZW50QmFzZSgpKSkKICAgICAgICAgICAgIGFsbG93ZWQgPSBmYWxzZTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgb3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIod2ViV29ya2VyLT5jb21tb25D
bGllbnQoKSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIHNpemUsIGNy
ZWF0ZSA9PSBDcmVhdGVJZk5vdFByZXNlbnQsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1w
bChjYWxsYmFja3MsIHR5cGUsIGNvbnRleHQsIHN5bmNocm9ub3VzKSwgc3luY2hyb25vdXMpOwor
ICAgICAgICAgICAgb3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIod2ViV29ya2VyLT5jb21tb25DbGll
bnRCYXNlKCksIHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXplLCBj
cmVhdGUgPT0gQ3JlYXRlSWZOb3RQcmVzZW50LCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0lt
cGwoY2FsbGJhY2tzLCB0eXBlLCBjb250ZXh0LCBzeW5jaHJvbm91cyksIHN5bmNocm9ub3VzKTsK
KwogI2Vsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbW1vbldvcmtlckJhc2UuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNvbW1vbldvcmtlckJhc2UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmQ5OWFiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tbW9uV29ya2VyQmFzZS5oCkBAIC0wLDAgKzEs
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdlYkNvbW1vbldvcmtlckJhc2VfaAorI2RlZmluZSBXZWJDb21tb25Xb3Jr
ZXJCYXNlX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbldvcmtlckNsaWVudC5oIgorI2luY2x1ZGUg
IldlYlZpZXcuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgorCisjaWYgRU5BQkxF
KFdPUktFUlMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJDb21tb25Xb3JrZXJC
YXNlIDogcHVibGljIFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5IHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIFdlYkNvbW1vbldvcmtlckNsaWVudEJhc2UqIGNvbW1vbkNsaWVudEJhc2UoKSA9IDA7
CisgICAgdmlydHVhbCBXZWJWaWV3KiB3ZWJWaWV3KCkgY29uc3QgPSAwOworfTsKKworCit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmgKaW5kZXggZDFiNjRiYS4uNDFjNjFl
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2hhcmVkV29ya2Vy
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNoYXJlZFdvcmtlcklt
cGwuaApAQCAtNjQsNiArNjQsOSBAQCBwdWJsaWM6CiAgICAgV2ViV29ya2VyQ2xpZW50KiBjbGll
bnQoKTsKICAgICBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCgpIHsgcmV0dXJu
IG1fY2xpZW50OyB9CiAKKyAgICAvLyBXZWJDb21tb25Xb3JrZXJCYXNlIG1ldGhvZHM6CisgICAg
V2ViQ29tbW9uV29ya2VyQ2xpZW50QmFzZSogY29tbW9uQ2xpZW50QmFzZSgpIHsgcmV0dXJuIG1f
Y2xpZW50OyB9CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB+V2ViU2hhcmVkV29ya2VySW1wbCgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNl
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmgKaW5kZXggYjBl
NTFmMS4uZjA0ZTU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
V29ya2VyQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJh
c2UuaApAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShXT1JLRVJTKQogCiAjaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkNvbW1vbldvcmtlckJhc2Uu
aCIKICNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgogI2luY2x1ZGUgIldvcmtlckxvYWRlclBy
b3h5LmgiCiAjaW5jbHVkZSAiV29ya2VyT2JqZWN0UHJveHkuaCIKQEAgLTU5LDcgKzYwLDcgQEAg
Y2xhc3MgV2ViV29ya2VyQ2xpZW50OwogLy8gY29kZSB1c2VkIGJ5IGJvdGggaW1wbGVtZW50YXRp
b24gY2xhc3NlcywgaW5jbHVkaW5nIGltcGxlbWVudGF0aW9ucyBvZiB0aGUKIC8vIFdvcmtlck9i
amVjdFByb3h5IGFuZCBXb3JrZXJMb2FkZXJQcm94eSBpbnRlcmZhY2VzLgogY2xhc3MgV2ViV29y
a2VyQmFzZSA6IHB1YmxpYyBXZWJDb3JlOjpXb3JrZXJPYmplY3RQcm94eQotICAgICAgICAgICAg
ICAgICAgICAsIHB1YmxpYyBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eQorICAgICAgICAgICAg
ICAgICAgICAsIHB1YmxpYyBXZWJDb21tb25Xb3JrZXJCYXNlCiAgICAgICAgICAgICAgICAgICAg
ICwgcHVibGljIFdlYkZyYW1lQ2xpZW50IHsKIHB1YmxpYzoKICAgICBXZWJXb3JrZXJCYXNlKCk7
CkBAIC05MiwxMSArOTMsMTAgQEAgcHVibGljOgogICAgIC8vIEV4ZWN1dGVzIHRoZSBnaXZlbiB0
YXNrIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFRhc2tUb01h
aW5UaHJlYWQoUGFzc093blB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
Pik7CiAKLSAgICBXZWJWaWV3KiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3OyB9
Ci0KLSAgICB2aXJ0dWFsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KCkgPSAw
OworICAgIHZpcnR1YWwgV2ViVmlldyogd2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmll
dzsgfQogCiBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNv
bW1vbkNsaWVudCgpID0gMDsKICAgICB2aXJ0dWFsIFdlYldvcmtlckNsaWVudCogY2xpZW50KCkg
PSAwOwogCiAgICAgdm9pZCBzZXRXb3JrZXJUaHJlYWQoUGFzc1JlZlB0cjxXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWQ+IHRocmVhZCkgeyBtX3dvcmtlclRocmVhZCA9IHRocmVhZDsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcAppbmRleCBj
MTk4Y2NmLi42MjkzZTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJXb3JrZXJDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJXb3JrZXJDbGllbnRJbXBsLmNwcApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgIldlYktp
dC5oIgogI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgogI2luY2x1ZGUgIldlYk1lc3NhZ2VQb3J0
Q2hhbm5lbC5oIgorI2luY2x1ZGUgIldlYlBlcm1pc3Npb25DbGllbnQuaCIKICNpbmNsdWRlICJX
ZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJVUkwuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5o
IgpAQCAtNjksMTcgKzcwLDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi0vLyBXaGVuIFdlYktpdCBjcmVhdGVzIGEgV29ya2VyQ29udGV4dFByb3h5
IG9iamVjdCwgd2UgY2hlY2sgaWYgd2UncmUgaW4gdGhlCi0vLyByZW5kZXJlciBvciB3b3JrZXIg
cHJvY2Vzcy4gIElmIHRoZSBsYXR0ZXIsIHRoZW4gd2UganVzdCB1c2UKLS8vIFdvcmtlck1lc3Nh
Z2luZ1Byb3h5LgotLy8KLS8vIElmIHdlJ3JlIGluIHRoZSByZW5kZXJlciBwcm9jZXNzLCB0aGVu
IHdlIG5lZWQgdXNlIHRoZSBnbHVlIHByb3ZpZGVkCi0vLyBXZWJXb3JrZXIgb2JqZWN0IHRvIHRh
bGsgdG8gdGhlIHdvcmtlciBwcm9jZXNzIG92ZXIgSVBDLiAgVGhlIHdvcmtlciBwcm9jZXNzCi0v
LyB0YWxrcyB0byBXb3JrZXIqIHVzaW5nIFdvcmtlck9iamVjdFByb3h5LCB3aGljaCB3ZSBpbXBs
ZW1lbnQgb24KLS8vIFdlYldvcmtlckNsaWVudEltcGwuCi0vLwotLy8gTm90ZSB0aGF0IGlmIHdl
J3JlIHJ1bm5pbmcgZWFjaCB3b3JrZXIgaW4gYSBzZXBhcmF0ZSBwcm9jZXNzLCB0aGVuIG5lc3Rl
ZAotLy8gd29ya2VycyBlbmQgdXAgdXNpbmcgdGhlIHNhbWUgY29kZXBhdGggYXMgdGhlIHJlbmRl
cmVyIHByb2Nlc3MuCisvLyBDaHJvbWl1bS1zcGVjaWZpYyB3cmFwcGVyIG92ZXIgV29ya2VyTWVz
c2FnaW5nUHJveHkuCisvLyBEZWxlZ2F0ZXMgaW1wbGVtZW50YXRpb24gb2YgV29ya2Vye0xvYWRl
cixDb250ZXh0LE9iamVjdH1Qcm94eSB0byBXb3JrZXJNZXNzYWdpbmdQcm94eS4KIAogLy8gc3Rh
dGljCiBXb3JrZXJDb250ZXh0UHJveHkqIFdlYldvcmtlckNsaWVudEltcGw6OmNyZWF0ZVdvcmtl
ckNvbnRleHRQcm94eShXb3JrZXIqIHdvcmtlcikKQEAgLTg5LDM2NyArODEsMTU5IEBAIFdvcmtl
ckNvbnRleHRQcm94eSogV2ViV29ya2VyQ2xpZW50SW1wbDo6Y3JlYXRlV29ya2VyQ29udGV4dFBy
b3h5KFdvcmtlciogd29ya2VyCiAgICAgLy8gaWYgKCF3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+aXNEb2N1bWVudCgpKQogICAgIC8vICAgICByZXR1cm4gbmV3IFdvcmtlck1lc3Nh
Z2luZ1Byb3h5KHdvcmtlcik7CiAKLSAgICBXZWJXb3JrZXIqIHdlYldvcmtlciA9IDA7Ci0gICAg
V2ViV29ya2VyQ2xpZW50SW1wbCogcHJveHkgPSBuZXcgV2ViV29ya2VyQ2xpZW50SW1wbCh3b3Jr
ZXIpOwotCiAgICAgaWYgKHdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3Vt
ZW50KCkpIHsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1l
bnQqPigKLSAgICAgICAgICAgIHdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAg
ICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPih3b3JrZXIt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgICAgIFdlYkZyYW1lSW1wbCogd2ViRnJh
bWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgICAg
IHdlYldvcmtlciA9IHdlYkZyYW1lLT5jbGllbnQoKS0+Y3JlYXRlV29ya2VyKHdlYkZyYW1lLCBw
cm94eSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7
Ci0gICAgICAgIGlmICghY29udHJvbGxlcikgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIERlZGlj
YXRlZFdvcmtlclRocmVhZCogdGhyZWFkID0gc3RhdGljX2Nhc3Q8RGVkaWNhdGVkV29ya2VyVGhy
ZWFkKj4oY29udHJvbGxlci0+d29ya2VyQ29udGV4dCgpLT50aHJlYWQoKSk7Ci0gICAgICAgIFdv
cmtlck9iamVjdFByb3h5KiB3b3JrZXJPYmplY3RQcm94eSA9ICZ0aHJlYWQtPndvcmtlck9iamVj
dFByb3h5KCk7Ci0gICAgICAgIFdlYldvcmtlckltcGwqIGltcGwgPSByZWludGVycHJldF9jYXN0
PFdlYldvcmtlckltcGwqPih3b3JrZXJPYmplY3RQcm94eSk7Ci0gICAgICAgIHdlYldvcmtlciA9
IGltcGwtPmNsaWVudCgpLT5jcmVhdGVXb3JrZXIocHJveHkpOwotICAgIH0KLQotICAgIHByb3h5
LT5zZXRXZWJXb3JrZXIod2ViV29ya2VyKTsKLSAgICByZXR1cm4gcHJveHk7CisgICAgICAgIFdl
YldvcmtlckNsaWVudEltcGwqIHByb3h5ID0gbmV3IFdlYldvcmtlckNsaWVudEltcGwod29ya2Vy
LCB3ZWJGcmFtZSk7CisgICAgICAgIHJldHVybiBwcm94eTsgCisgICAgfSAKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKIH0KIAotV2ViV29ya2VyQ2xpZW50SW1wbDo6
V2ViV29ya2VyQ2xpZW50SW1wbChXb3JrZXIqIHdvcmtlcikKLSAgICA6IG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCh3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAsIG1fd29y
a2VyKHdvcmtlcikKLSAgICAsIG1fYXNrZWRUb1Rlcm1pbmF0ZShmYWxzZSkKLSAgICAsIG1fdW5j
b25maXJtZWRNZXNzYWdlQ291bnQoMCkKLSAgICAsIG1fd29ya2VyQ29udGV4dEhhZFBlbmRpbmdB
Y3Rpdml0eShmYWxzZSkKLSAgICAsIG1fd29ya2VyVGhyZWFkSWQoY3VycmVudFRocmVhZCgpKQor
V2ViV29ya2VyQ2xpZW50SW1wbDo6V2ViV29ya2VyQ2xpZW50SW1wbChXb3JrZXIqIHdvcmtlciwg
V2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSkKKyAgICA6IG1fcHJveHkoYWRvcHRQdHIobmV3IFdvcmtl
ck1lc3NhZ2luZ1Byb3h5KHdvcmtlcikpKQorICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
KHdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV93ZWJGcmFtZSh3ZWJG
cmFtZSkgICAgCiAgICAgLCBtX3BhZ2VJbnNwZWN0b3IoMCkKLXsKLX0KIAotV2ViV29ya2VyQ2xp
ZW50SW1wbDo6fldlYldvcmtlckNsaWVudEltcGwoKQogewogfQogCi12b2lkIFdlYldvcmtlckNs
aWVudEltcGw6OnNldFdlYldvcmtlcihXZWJXb3JrZXIqIHdlYldvcmtlcikKLXsKLSAgICBtX3dl
YldvcmtlciA9IHdlYldvcmtlcjsKLX0KLQotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpzdGFy
dFdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNv
dXJjZUNvZGUpCitXZWJXb3JrZXJDbGllbnRJbXBsOjp+V2ViV29ya2VyQ2xpZW50SW1wbCgpCiB7
Ci0gICAgLy8gV29ya2VyLnRlcm1pbmF0ZSgpIGNvdWxkIGJlIGNhbGxlZCBmcm9tIEpTIGJlZm9y
ZSB0aGUgY29udGV4dCBpcyBzdGFydGVkLgotICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzTWFpblRocmVhZCgpKSB7Ci0gICAgICAgIFdlYldv
cmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soCi0g
ICAgICAgICAgICAmc3RhcnRXb3JrZXJDb250ZXh0VGFzaywKLSAgICAgICAgICAgIEFsbG93Q3Jv
c3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICBzY3JpcHRVUkwuc3RyaW5nKCksCi0g
ICAgICAgICAgICB1c2VyQWdlbnQsCi0gICAgICAgICAgICBzb3VyY2VDb2RlKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgc3RhcnRXb3JrZXJDb250ZXh0SW50ZXJuYWwoc2NyaXB0VVJM
LCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUpOwogfQogCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6
OnN0YXJ0V29ya2VyQ29udGV4dEludGVybmFsKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3Qg
V1RGOjpTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZUNvZGUpCit2
b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBz
Y3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNv
ZGUpCiB7Ci0gICAgbV93ZWJXb3JrZXItPnN0YXJ0V29ya2VyQ29udGV4dChzY3JpcHRVUkwsIHVz
ZXJBZ2VudCwgc291cmNlQ29kZSk7Ci0gICAgbV93b3JrZXJDb250ZXh0SGFkUGVuZGluZ0FjdGl2
aXR5ID0gdHJ1ZTsgLy8gV29ya2VyIGluaXRpYWxpemF0aW9uIG1lYW5zIGEgcGVuZGluZyBhY3Rp
dml0eS4KKyAgICBSZWZQdHI8RGVkaWNhdGVkV29ya2VyVGhyZWFkPiB0aHJlYWQgPSBEZWRpY2F0
ZWRXb3JrZXJUaHJlYWQ6OmNyZWF0ZShzY3JpcHRVUkwsIHVzZXJBZ2VudCwgc291cmNlQ29kZSwg
KnRoaXMsICp0aGlzKTsKKyAgICBtX3Byb3h5LT53b3JrZXJUaHJlYWRDcmVhdGVkKHRocmVhZCk7
CisgICAgdGhyZWFkLT5zdGFydCgpOwogfQogCiB2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnRl
cm1pbmF0ZVdvcmtlckNvbnRleHQoKQogewotICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX2Fza2VkVG9UZXJtaW5hdGUgPSB0cnVlOwotICAgIGlmICgh
aXNNYWluVGhyZWFkKCkpIHsKLSAgICAgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9N
YWluVGhyZWFkKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZ0ZXJtaW5hdGVXb3Jr
ZXJDb250ZXh0VGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIG1fd2ViV29ya2VyLT50ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCk7
CisgICAgbV9wcm94eS0+dGVybWluYXRlV29ya2VyQ29udGV4dCgpOwogICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LmdldCgpLCB0aGlzKTsKIH0KIAogdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0
TWVzc2FnZVRvV29ya2VyQ29udGV4dCgKLSAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gbWVzc2FnZSwKLSAgICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBj
aGFubmVscykKKyAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIAor
ICAgIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzKQogewotICAgIC8v
IFdvcmtlci50ZXJtaW5hdGUoKSBjb3VsZCBiZSBjYWxsZWQgZnJvbSBKUyBiZWZvcmUgdGhlIGNv
bnRleHQgaXMgc3RhcnRlZC4KLSAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQotICAgICAgICBy
ZXR1cm47Ci0gICAgKyttX3VuY29uZmlybWVkTWVzc2FnZUNvdW50OwotICAgIGlmICghaXNNYWlu
VGhyZWFkKCkpIHsKLSAgICAgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhy
ZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHRUYXNrLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZS0+dG9XaXJlU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbHMpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSB3ZWJDaGFubmVscyhjaGFu
bmVscy5nZXQoKSA/IGNoYW5uZWxzLT5zaXplKCkgOiAwKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHdlYkNoYW5uZWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYk1lc3NhZ2VQb3J0
Q2hhbm5lbCogd2ViY2hhbm5lbCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKmNoYW5uZWxz
KVtpXS0+Y2hhbm5lbCgpLT53ZWJDaGFubmVsUmVsZWFzZSgpOwotICAgICAgICB3ZWJjaGFubmVs
LT5zZXRDbGllbnQoMCk7Ci0gICAgICAgIHdlYkNoYW5uZWxzW2ldID0gd2ViY2hhbm5lbDsKLSAg
ICB9Ci0gICAgbV93ZWJXb3JrZXItPnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KG1lc3NhZ2Ut
PnRvV2lyZVN0cmluZygpLCB3ZWJDaGFubmVscyk7CisgICAgbV9wcm94eS0+cG9zdE1lc3NhZ2VU
b1dvcmtlckNvbnRleHQodmFsdWUsIHBvcnRzKTsKIH0KIAogYm9vbCBXZWJXb3JrZXJDbGllbnRJ
bXBsOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogewotICAgIHJldHVybiAhbV9hc2tlZFRv
VGVybWluYXRlCi0gICAgICAgICAgICYmIChtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50IHx8IG1f
d29ya2VyQ29udGV4dEhhZFBlbmRpbmdBY3Rpdml0eSk7CisgICAgcmV0dXJuIG1fcHJveHktPmhh
c1BlbmRpbmdBY3Rpdml0eSgpOwogfQogCiB2b2lkIFdlYldvcmtlckNsaWVudEltcGw6Ondvcmtl
ck9iamVjdERlc3Ryb3llZCgpCiB7Ci0gICAgaWYgKGlzTWFpblRocmVhZCgpKSB7Ci0gICAgICAg
IG1fd2ViV29ya2VyLT53b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKLSAgICAgICAgbV93b3JrZXIg
PSAwOwotICAgIH0KLSAgICAvLyBFdmVuIGlmIHRoaXMgaXMgY2FsbGVkIG9uIHRoZSBtYWluIHRo
cmVhZCwgdGhlcmUgY291bGQgYmUgYSBxdWV1ZWQgdGFzayBmb3IKLSAgICAvLyB0aGlzIG9iamVj
dCwgc28gZG9uJ3QgZGVsZXRlIGl0IHJpZ2h0IGF3YXkuCi0gICAgV2ViV29ya2VyQmFzZTo6ZGlz
cGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyT2JqZWN0RGVz
dHJveWVkVGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKKyAgICBt
X3Byb3h5LT53b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGll
bnRJbXBsOjpjb25uZWN0VG9JbnNwZWN0b3IoV29ya2VyQ29udGV4dFByb3h5OjpQYWdlSW5zcGVj
dG9yKiBwYWdlSW5zcGVjdG9yKQorI2lmIEVOQUJMRShJTlNQRUNUT1IpCit2b2lkIFdlYldvcmtl
ckNsaWVudEltcGw6OmNvbm5lY3RUb0luc3BlY3RvcihQYWdlSW5zcGVjdG9yKiBpbnNwZWN0b3Ip
CiB7CisgICAgbV9wcm94eS0+Y29ubmVjdFRvSW5zcGVjdG9yKGluc3BlY3Rvcik7CiAgICAgQVNT
RVJUKCFtX3BhZ2VJbnNwZWN0b3IpOwotICAgIG1fcGFnZUluc3BlY3RvciA9IHBhZ2VJbnNwZWN0
b3I7Ci0gICAgbV93ZWJXb3JrZXItPmF0dGFjaERldlRvb2xzKCk7CisgICAgbV9wYWdlSW5zcGVj
dG9yID0gaW5zcGVjdG9yOwogfQogCiB2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OmRpc2Nvbm5l
Y3RGcm9tSW5zcGVjdG9yKCkKIHsKLSAgICBpZiAoIW1fYXNrZWRUb1Rlcm1pbmF0ZSkKLSAgICAg
ICAgbV93ZWJXb3JrZXItPmRldGFjaERldlRvb2xzKCk7CiAgICAgbV9wYWdlSW5zcGVjdG9yID0g
MDsKKyAgICBtX3Byb3h5LT5kaXNjb25uZWN0RnJvbUluc3BlY3RvcigpOwogfQogCiB2b2lkIFdl
YldvcmtlckNsaWVudEltcGw6OnNlbmRNZXNzYWdlVG9JbnNwZWN0b3IoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQogewotICAgIG1fd2ViV29ya2VyLT5kaXNwYXRjaERldlRvb2xzTWVzc2FnZShtZXNz
YWdlKTsKKyAgICBtX3Byb3h5LT5zZW5kTWVzc2FnZVRvSW5zcGVjdG9yKG1lc3NhZ2UpOwogfQor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCiAKLXZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6
cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2Vi
TWVzc2FnZVBvcnRDaGFubmVsQXJyYXkmIGNoYW5uZWxzKQotewotICAgIE93blB0cjxNZXNzYWdl
UG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMyOwotICAgIGlmIChjaGFubmVscy5zaXplKCkpIHsK
LSAgICAgICAgY2hhbm5lbHMyID0gYWRvcHRQdHIobmV3IE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5
KGNoYW5uZWxzLnNpemUoKSkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoYW5u
ZWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9y
dENoYW5uZWw+IHBsYXRmb3JtX2NoYW5uZWwgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpjcmVhdGUoY2hhbm5lbHNbaV0pOwotICAgICAg
ICAgICAgY2hhbm5lbHNbaV0tPnNldENsaWVudChwbGF0Zm9ybV9jaGFubmVsLmdldCgpKTsKLSAg
ICAgICAgICAgICgqY2hhbm5lbHMyKVtpXSA9IE1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y3JlYXRlKHBs
YXRmb3JtX2NoYW5uZWwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGN1cnJlbnRUaHJl
YWQoKSAhPSBtX3dvcmtlclRocmVhZElkKSB7Ci0gICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0TWVzc2FnZVRvV29ya2VyT2Jq
ZWN0VGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5n
KG1lc3NhZ2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFubmVsczIucmVsZWFzZSgpKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0VGFzayhtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuZ2V0KCksIHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZSwgY2hhbm5lbHMyLnJlbGVhc2UoKSk7Ci19CiAKLXZvaWQgV2ViV29ya2VyQ2xp
ZW50SW1wbDo6cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFdlYlN0cmluZyYgZXJy
b3JNZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHNvdXJjZVVSTCkKK3ZvaWQg
V2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdFRhc2tUb0xvYWRlcihQYXNzT3duUHRyPFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCiB7Ci0gICAgaWYgKGN1cnJlbnRUaHJlYWQoKSAh
PSBtX3dvcmtlclRocmVhZElkKSB7Ci0gICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3RU
YXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcoZXJy
b3JNZXNzYWdlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKHNvdXJjZVVSTCkpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJvb2wgdW5oYW5kbGVkID0gbV93b3JrZXIt
PmRpc3BhdGNoRXZlbnQoRXJyb3JFdmVudDo6Y3JlYXRlKGVycm9yTWVzc2FnZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
b3VyY2VVUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGluZU51bWJlcikpOwotICAgIGlmICh1bmhhbmRsZWQpCi0gICAg
ICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKGVycm9yTWVzc2Fn
ZSwgbGluZU51bWJlciwgc291cmNlVVJMLCAwKTsKKyAgICBtX3Byb3h5LT5wb3N0VGFza1RvTG9h
ZGVyKHRhc2spOwogfQogCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RDb25zb2xlTWVz
c2FnZVRvV29ya2VyT2JqZWN0KGludCBkZXN0aW5hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvdXJjZUlkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbWVzc2FnZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBtZXNzYWdlTGV2ZWwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYg
bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgc291cmNlVVJM
KQordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRl
eHQoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBT
dHJpbmcmIG1vZGUpCiB7Ci0gICAgaWYgKGN1cnJlbnRUaHJlYWQoKSAhPSBtX3dvcmtlclRocmVh
ZElkKSB7Ci0gICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soY3JlYXRl
Q2FsbGJhY2tUYXNrKCZwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2ssCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUlkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZUxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcobWVzc2FnZSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN0cmluZyhzb3VyY2VVUkwpKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZE1lc3NhZ2Uoc3RhdGlj
X2Nhc3Q8TWVzc2FnZVNvdXJjZT4oc291cmNlSWQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNZXNzYWdlVHlwZT4obWVzc2FnZVR5cGUpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNZXNz
YWdlTGV2ZWw+KG1lc3NhZ2VMZXZlbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN0cmluZyhtZXNzYWdlKSwgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKHNvdXJjZVVSTCksIDApOworICAgIG1fcHJv
eHktPnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCh0YXNrLCBtb2RlKTsKIH0KIAotdm9p
ZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChp
bnQgc291cmNlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBtZXNzYWdlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VMZXZlbCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2Vi
U3RyaW5nJiBzb3VyY2VVUkwpCit2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RNZXNzYWdl
VG9Xb3JrZXJPYmplY3QoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQ
YXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBwb3J0cykKIHsKLSAgICBwb3N0Q29u
c29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCgwLCBzb3VyY2VJZCwgbWVzc2FnZVR5cGUsIG1lc3Nh
Z2VMZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKKyAgICBtX3Byb3h5LT5w
b3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KHZhbHVlLCBwb3J0cyk7CiB9CiAKIHZvaWQgV2ViV29y
a2VyQ2xpZW50SW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGJvb2wgaGFzUGVu
ZGluZ0FjdGl2aXR5KQogewotICAgIC8vIHVuY29uZmlybWVkX21lc3NhZ2VfY291bnRfIGNhbiBv
bmx5IGJlIHVwZGF0ZWQgb24gdGhlIHRocmVhZCB3aGVyZSBpdCdzCi0gICAgLy8gYWNjZXNzZWQu
ICBPdGhlcndpc2UgdGhlcmUgYXJlIHJhY2UgY29uZGl0aW9ucyB3aXRoIHY4J3MgZ2FyYmFnZQot
ICAgIC8vIGNvbGxlY3Rpb24uCi0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFz
ayhjcmVhdGVDYWxsYmFja1Rhc2soJmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdFRhc2ss
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQZW5kaW5nQWN0aXZpdHkpKTsK
KyAgICBtX3Byb3h5LT5jb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoaGFzUGVuZGluZ0Fj
dGl2aXR5KTsKIH0KIAogdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpyZXBvcnRQZW5kaW5nQWN0
aXZpdHkoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCiB7Ci0gICAgLy8gU2VlIGFib3ZlIGNvbW1l
bnQgaW4gY29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0LgotICAgIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZyZXBvcnRQZW5kaW5nQWN0
aXZpdHlUYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGVuZGluZ0Fj
dGl2aXR5KSk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6d29ya2VyQ29udGV4dERl
c3Ryb3llZCgpCi17Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3b3JrZXJDb250ZXh0
VGVybWluYXRlZChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCksIHRoaXMpOworICAgIG1f
cHJveHktPnJlcG9ydFBlbmRpbmdBY3Rpdml0eShoYXNQZW5kaW5nQWN0aXZpdHkpOwogfQogCiB2
b2lkIFdlYldvcmtlckNsaWVudEltcGw6OndvcmtlckNvbnRleHRDbG9zZWQoKQogeworICAgIG1f
cHJveHktPndvcmtlckNvbnRleHRDbG9zZWQoKTsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGllbnRJ
bXBsOjpkaXNwYXRjaERldlRvb2xzTWVzc2FnZShjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCit2
b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291
cmNlVVJMKQogewotICAgIGlmIChtX3BhZ2VJbnNwZWN0b3IpCi0gICAgICAgIG1fcGFnZUluc3Bl
Y3Rvci0+ZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlcihtZXNzYWdlKTsKLX0KLQotdm9pZCBXZWJX
b3JrZXJDbGllbnRJbXBsOjpzdGFydFdvcmtlckNvbnRleHRUYXNrKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNjcmlwdFVSTCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIHVzZXJBZ2VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpCi17Ci0gICAgdGhpc1B0ci0+c3Rh
cnRXb3JrZXJDb250ZXh0SW50ZXJuYWwoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHNjcmlwdFVSTCks
IHVzZXJBZ2VudCwgc291cmNlQ29kZSk7CisgICAgbV9wcm94eS0+cG9zdEV4Y2VwdGlvblRvV29y
a2VyT2JqZWN0KGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKIH0KIAotdm9p
ZCBXZWJXb3JrZXJDbGllbnRJbXBsOjp0ZXJtaW5hdGVXb3JrZXJDb250ZXh0VGFzayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlzUHRyKQordm9p
ZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChN
ZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVs
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZVVSTCkKIHsKLSAgICB0aGlzUHRyLT5tX3dlYldvcmtlci0+dGVybWluYXRlV29ya2VyQ29u
dGV4dCgpOworICAgIG1fcHJveHktPnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KHNv
dXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CiB9Ci0K
LXZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHRUYXNr
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0
aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc093blB0cjxNZXNzYWdlUG9ydENo
YW5uZWxBcnJheT4gY2hhbm5lbHMpCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKK3ZvaWQgV2ViV29y
a2VyQ2xpZW50SW1wbDo6cG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQogewotICAgIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5IHdlYkNoYW5uZWxzKGNo
YW5uZWxzLmdldCgpID8gY2hhbm5lbHMtPnNpemUoKSA6IDApOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB3ZWJDaGFubmVscy5zaXplKCk7ICsraSkgewotICAgICAgICB3ZWJDaGFubmVs
c1tpXSA9ICgqY2hhbm5lbHMpW2ldLT5jaGFubmVsKCktPndlYkNoYW5uZWxSZWxlYXNlKCk7Ci0g
ICAgICAgIHdlYkNoYW5uZWxzW2ldLT5zZXRDbGllbnQoMCk7Ci0gICAgfQotCi0gICAgdGhpc1B0
ci0+bV93ZWJXb3JrZXItPnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KG1lc3NhZ2UsIHdlYkNo
YW5uZWxzKTsKKyAgICBtX3Byb3h5LT5wb3N0TWVzc2FnZVRvUGFnZUluc3BlY3RvcihtZXNzYWdl
KTsKIH0KKyNlbmRpZgogCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6Ondvcmtlck9iamVjdERl
c3Ryb3llZFRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJ
bXBsKiB0aGlzUHRyKQordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjp3b3JrZXJDb250ZXh0RGVz
dHJveWVkKCkKIHsKLSAgICBpZiAodGhpc1B0ci0+bV93b3JrZXIpIC8vIENoZWNrIHdlIGhhdmVu
J3QgYWxyZWFkIGNhbGxlZCB0aGlzLgotICAgICAgICB0aGlzUHRyLT5tX3dlYldvcmtlci0+d29y
a2VyT2JqZWN0RGVzdHJveWVkKCk7Ci0gICAgZGVsZXRlIHRoaXNQdHI7CisgICAgbV9wcm94eS0+
d29ya2VyQ29udGV4dERlc3Ryb3llZCgpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCB0
aGlzKTsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2Vy
T2JqZWN0VGFzaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xp
ZW50SW1wbCogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzT3duUHRyPE1lc3Nh
Z2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscykKLXsKLQotICAgIGlmICh0aGlzUHRyLT5tX3dv
cmtlcikgewotICAgICAgICBPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMgPQotICAgICAg
ICAgICAgTWVzc2FnZVBvcnQ6OmVudGFuZ2xlUG9ydHMoKmNvbnRleHQsIGNoYW5uZWxzKTsKLSAg
ICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZE1lc3NhZ2UgPQot
ICAgICAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShtZXNzYWdl
KTsKLSAgICAgICAgdGhpc1B0ci0+bV93b3JrZXItPmRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50
OjpjcmVhdGUocG9ydHMucmVsZWFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkTWVzc2FnZS5yZWxlYXNl
KCkpKTsKLSAgICB9CitXZWJWaWV3KiBXZWJXb3JrZXJDbGllbnRJbXBsOjp3ZWJWaWV3KCkgY29u
c3QgCit7ICAgCisgICAgcmV0dXJuIG1fd2ViRnJhbWUtPnZpZXcoKTsgCiB9CiAKLXZvaWQgV2Vi
V29ya2VyQ2xpZW50SW1wbDo6cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0VGFzaygKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQ
dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwpCitib29sIFdlYldvcmtlckNsaWVudEltcGw6OmFsbG93Rmls
ZVN5c3RlbSgpIAogewotICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAgIGlmICh0aGlzUHRy
LT5tX3dvcmtlcikKLSAgICAgICAgaGFuZGxlZCA9IHRoaXNQdHItPm1fd29ya2VyLT5kaXNwYXRj
aEV2ZW50KEVycm9yRXZlbnQ6OmNyZWF0ZShlcnJvck1lc3NhZ2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291
cmNlVVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIpKTsKLSAgICBpZiAoIWhhbmRsZWQpCi0g
ICAgICAgIHRoaXNQdHItPm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cmVwb3J0RXhjZXB0aW9u
KGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMLCAwKTsKKyAgICBXZWJLaXQ6Oldl
YlZpZXdJbXBsKiB3ZWJWaWV3ID0gbV93ZWJGcmFtZS0+dmlld0ltcGwoKTsKKyAgICByZXR1cm4g
IXdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKSB8fCB3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50
KCktPmFsbG93RmlsZVN5c3RlbShtX3dlYkZyYW1lKTsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGll
bnRJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc291cmNlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVzc2FnZVR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
bWVzc2FnZUxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxp
bmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3ZvaWQgV2ViV29ya2Vy
Q2xpZW50SW1wbDo6b3BlbkZpbGVTeXN0ZW0oV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25n
IGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MpCiB7Ci0gICAgdGhp
c1B0ci0+bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRNZXNzYWdlKHN0YXRpY19jYXN0PE1l
c3NhZ2VTb3VyY2U+KHNvdXJjZUlkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWVzc2FnZVR5cGU+KG1lc3NhZ2VUeXBlKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8TWVzc2FnZUxldmVsPihtZXNzYWdlTGV2ZWwpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VV
UkwsIDApOworICAgICBtX3dlYkZyYW1lLT5jbGllbnQoKS0+b3BlbkZpbGVTeXN0ZW0obV93ZWJG
cmFtZSwgdHlwZSwgc2l6ZSwgY3JlYXRlLCBjYWxsYmFja3MpOwogfQogCi12b2lkIFdlYldvcmtl
ckNsaWVudEltcGw6OmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdFRhc2soU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlzUHRy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQorYm9vbCBXZWJXb3JrZXJDbGllbnRJbXBs
OjphbGxvd0RhdGFiYXNlKFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBX
ZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpIAogewot
ICAgIHRoaXNQdHItPm1fdW5jb25maXJtZWRNZXNzYWdlQ291bnQtLTsKLSAgICB0aGlzUHRyLT5t
X3dvcmtlckNvbnRleHRIYWRQZW5kaW5nQWN0aXZpdHkgPSBoYXNQZW5kaW5nQWN0aXZpdHk7Cisg
ICAgIFdlYktpdDo6V2ViVmlld0ltcGwqIHdlYlZpZXcgPSBtX3dlYkZyYW1lLT52aWV3SW1wbCgp
OworICAgICByZXR1cm4gIXdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKSB8fCB3ZWJWaWV3LT5w
ZXJtaXNzaW9uQ2xpZW50KCktPmFsbG93RGF0YWJhc2UobV93ZWJGcmFtZSwgbmFtZSwgZGlzcGxh
eU5hbWUsIGVzdGltYXRlZFNpemUpOwogfQotCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnJl
cG9ydFBlbmRpbmdBY3Rpdml0eVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJX
b3JrZXJDbGllbnRJbXBsKiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQorIAordm9pZCBX
ZWJXb3JrZXJDbGllbnRJbXBsOjpkaXNwYXRjaERldlRvb2xzTWVzc2FnZShjb25zdCBXZWJTdHJp
bmcmIG1lc3NhZ2UpCiB7Ci0gICAgdGhpc1B0ci0+bV93b3JrZXJDb250ZXh0SGFkUGVuZGluZ0Fj
dGl2aXR5ID0gaGFzUGVuZGluZ0FjdGl2aXR5OworICAgIGlmIChtX3BhZ2VJbnNwZWN0b3IpCisg
ICAgICAgIG1fcGFnZUluc3BlY3Rvci0+ZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlcihtZXNzYWdl
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmgKaW5kZXggYzI3MGZmYy4uODAwNGQ5MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuaApA
QCAtMzMsOSArMzMsMTMgQEAKIAogI2lmIEVOQUJMRShXT1JLRVJTKQogCisjaW5jbHVkZSAiV2Vi
Q29tbW9uV29ya2VyQmFzZS5oIgogI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRl
ICJXZWJXb3JrZXJDbGllbnQuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0UHJveHkuaCIKKyNp
bmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgorI2luY2x1ZGUgIldvcmtlck1lc3NhZ2luZ1By
b3h5LmgiCisjaW5jbHVkZSAiV29ya2VyT2JqZWN0UHJveHkuaCIKICNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CkBAIC00NSwyNSArNDksMjkgQEAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIH0K
IAogbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0OwordXNpbmcgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOwogY2xhc3MgV2ViV29y
a2VyOworY2xhc3MgV2ViRnJhbWVJbXBsOwogCi0vLyBUaGUgcHVycG9zZSBvZiB0aGlzIGNsYXNz
IGlzIHRvIHByb3ZpZGUgYSBXb3JrZXJDb250ZXh0UHJveHkKLS8vIGltcGxlbWVudGF0aW9uIHRo
YXQgd2UgY2FuIGdpdmUgdG8gV2ViS2l0LiAgSW50ZXJuYWxseSwgaXQgY29udmVydHMgdGhlCi0v
LyBkYXRhIHR5cGVzIHRvIENocm9tZSBjb21wYXRpYmxlIG9uZXMgc28gdGhhdCByZW5kZXJlciBj
b2RlIGNhbiB1c2UgaXQgb3ZlcgotLy8gSVBDLgorLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBjaHJv
bWl1bSBpbXBsZW1lbnRhdGlvbiBmb3IgV29ya2VyQ29udGV4dFByb3h0LCBXb3JrZXJPYmplY3RQ
cm94eSBhbWQgV29ya2VyTG9hZGVyUHJveHkKKy8vIGZvciBpbi1wcm9jIGRlZGljYXRlZCB3b3Jr
ZXJzLiBJdCBhbHNvIGFjdHMgYXMgYSBicmlkZ2UgZm9yIHdvcmtlcnMgdG8gY2hyb21pdW0gaW1w
bGVtZW50YXRpb24gb2YgZmlsZSBzeXN0ZW1zLAorLy8gZGF0YWJhc2VzIGFuZCBvdGhlciByZWxh
dGVkIGZ1bmN0aW9uYWxpdHkuCisvLworLy8gSW4gZXNzZW5jZSwgdGhpcyBjbGFzcyB3cmFwcyBX
b3JrZXJNZXNzYWdpbmdQcm94eS4KIGNsYXNzIFdlYldvcmtlckNsaWVudEltcGwgOiBwdWJsaWMg
V2ViQ29yZTo6V29ya2VyQ29udGV4dFByb3h5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICwg
cHVibGljIFdlYldvcmtlckNsaWVudCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVi
bGljIFdlYkNvcmU6Oldvcmtlck9iamVjdFByb3h5CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgcHVibGljIFdlYkNvbW1vbldvcmtlckJhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
LCBwdWJsaWMgV2ViQ29tbW9uV29ya2VyQ2xpZW50QmFzZSB7CiBwdWJsaWM6Ci0gICAgV2ViV29y
a2VyQ2xpZW50SW1wbChXZWJDb3JlOjpXb3JrZXIqKTsKKyAgICB2aXJ0dWFsIH5XZWJXb3JrZXJD
bGllbnRJbXBsKCk7CiAKICAgICAvLyBXZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHkgRmFjdG9y
eS4KICAgICBzdGF0aWMgV2ViQ29yZTo6V29ya2VyQ29udGV4dFByb3h5KiBjcmVhdGVXb3JrZXJD
b250ZXh0UHJveHkoV2ViQ29yZTo6V29ya2VyKik7Ci0gICAgdm9pZCBzZXRXZWJXb3JrZXIoV2Vi
V29ya2VyKik7CiAKICAgICAvLyBXZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHkgbWV0aG9kczoK
ICAgICAvLyBUaGVzZSBhcmUgY2FsbGVkIG9uIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSB3
b3JrZXIuICBJbiB0aGUgcmVuZGVyZXIKLSAgICAvLyBwcm9jZXNzLCB0aGlzIHdpbGwgYmUgdGhl
IG1haW4gV2ViS2l0IHRocmVhZC4gIEluIHRoZSB3b3JrZXIgcHJvY2VzcywgdGhpcwotICAgIC8v
IHdpbGwgYmUgdGhlIHRocmVhZCBvZiB0aGUgZXhlY3V0aW5nIHdvcmtlciAobm90IHRoZSBtYWlu
IFdlYktpdCB0aHJlYWQpLgorICAgIC8vIHByb2Nlc3MsIHRoaXMgd2lsbCBiZSB0aGUgbWFpbiBX
ZWJLaXQgdGhyZWFkLgogICAgIHZpcnR1YWwgdm9pZCBzdGFydFdvcmtlckNvbnRleHQoY29uc3Qg
V2ViQ29yZTo6S1VSTCYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBXVEY6OlN0cmluZyYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBXVEY6OlN0cmluZyYpOwpAQCAtNzQsMTAzICs4Miw0NiBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCB3b3Jr
ZXJPYmplY3REZXN0cm95ZWQoKTsKIAorI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgdmlydHVh
bCB2b2lkIGNvbm5lY3RUb0luc3BlY3RvcihXb3JrZXJDb250ZXh0UHJveHk6OlBhZ2VJbnNwZWN0
b3IqKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdEZyb21JbnNwZWN0b3IoKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb0luc3BlY3Rvcihjb25zdCBTdHJpbmcmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3IoY29uc3QgU3RyaW5nJik7Cisj
ZW5kaWYKKyAgICAvLyBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSBtZXRob2RzOgorICAgIHZp
cnR1YWwgdm9pZCBwb3N0VGFza1RvTG9hZGVyKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzaz4pOworICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFza0Zvck1vZGVUb1dvcmtlckNv
bnRleHQoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiwgY29uc3QgU3Ry
aW5nJiBtb2RlKTsKIAotICAgIC8vIFdlYldvcmtlckNsaWVudCBtZXRob2RzOgotICAgIC8vIFRo
ZXNlIGFyZSBjYWxsZWQgb24gdGhlIG1haW4gV2ViS2l0IHRocmVhZC4KLSAgICB2aXJ0dWFsIHZv
aWQgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBXZWJTdHJpbmcmLCBjb25zdCBXZWJN
ZXNzYWdlUG9ydENoYW5uZWxBcnJheSYpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0RXhjZXB0aW9u
VG9Xb3JrZXJPYmplY3QoY29uc3QgV2ViU3RyaW5nJiwgaW50LCBjb25zdCBXZWJTdHJpbmcmKTsK
KyAgICAvLyBXZWJDb3JlOjpXb3JrZXJPYmplY3RQcm94eSBtZXRob2RzOgorICAgIHZpcnR1YWwg
dm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiwgUGFzc093blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxB
cnJheT4pOworICAgIHZpcnR1YWwgdm9pZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZVVSTCk7CiAKLSAgICAvLyBGSVhNRTogdGhlIGJlbG93IGlzIGZvciBjb21wYXRpYmlsaXR5
IG9ubHkgYW5kIHNob3VsZCBiZQotICAgIC8vIHJlbW92ZWQgb25jZSBDaHJvbWl1bSBpcyB1cGRh
dGVkIHRvIHJlbW92ZSBtZXNzYWdlCi0gICAgLy8gZGVzdGluYXRpb24gcGFyYW1ldGVyIDxodHRw
Oi8vd2Via2l0Lm9yZy9iLzM3MTU1Pi4KLSAgICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNz
YWdlVG9Xb3JrZXJPYmplY3QoaW50LCBpbnQsIGludCwgaW50LCBjb25zdCBXZWJTdHJpbmcmLCBp
bnQsIGNvbnN0IFdlYlN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3Nh
Z2VUb1dvcmtlck9iamVjdChpbnQsIGludCwgaW50LCBjb25zdCBXZWJTdHJpbmcmLCBpbnQsIGNv
bnN0IFdlYlN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dv
cmtlck9iamVjdChXZWJDb3JlOjpNZXNzYWdlU291cmNlLCBXZWJDb3JlOjpNZXNzYWdlVHlwZSwg
V2ViQ29yZTo6TWVzc2FnZUxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbmZpcm1NZXNzYWdl
RnJvbVdvcmtlck9iamVjdChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0UGVuZGluZ0Fj
dGl2aXR5KGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkKCk7CiAg
ICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWQoKTsKLSAgICB2aXJ0dWFsIFdl
YldvcmtlciogY3JlYXRlV29ya2VyKFdlYldvcmtlckNsaWVudCopIHsgcmV0dXJuIDA7IH0KLSAg
ICB2aXJ0dWFsIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlciogbm90aWZpY2F0aW9uUHJlc2VudGVy
KCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBOb3RpZmljYXRpb25zIG5vdCB5ZXQgc3VwcG9y
dGVkIGluIHdvcmtlcnMuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICB2aXJ0dWFsIFdl
YkFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjcmVhdGVBcHBsaWNhdGlvbkNhY2hlSG9zdChXZWJBcHBs
aWNhdGlvbkNhY2hlSG9zdENsaWVudCopIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
YWxsb3dEYXRhYmFzZShXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2Vi
U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQotICAgIHsK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dGaWxlU3lzdGVtKCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisKKyAgICAv
LyBXZWJXb3JrZXJDbGllbnRCYXNlIG1ldGhvZHMuCisgICAgdmlydHVhbCBib29sIGFsbG93RGF0
YWJhc2UoV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYg
ZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CisgICAgdmlydHVhbCBi
b29sIGFsbG93RmlsZVN5c3RlbSgpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuRmlsZVN5c3RlbShX
ZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaERldlRvb2xzTWVzc2FnZShjb25zdCBXZWJTdHJpbmcmKTsK
IAotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIH5XZWJXb3JrZXJDbGllbnRJbXBsKCk7CisgICAgdmly
dHVhbCBXZWJDb21tb25Xb3JrZXJDbGllbnRCYXNlKiBjb21tb25DbGllbnRCYXNlKCkgeyByZXR1
cm4gdGhpczsgfQorICAgIHZpcnR1YWwgV2ViVmlldyogd2ViVmlldygpIGNvbnN0OwogCi0gICAg
Ly8gTWV0aG9kcyB1c2VkIHRvIHN1cHBvcnQgV2ViV29ya2VyQ2xpZW50SW1wbCBiZWluZyBjb25z
dHJ1Y3RlZCBvbiB3b3JrZXIKLSAgICAvLyB0aHJlYWRzLgotICAgIC8vIFRoZXNlIHRhc2tzIGFy
ZSBkaXNwYXRjaGVkIG9uIHRoZSBXZWJLaXQgdGhyZWFkLgotICAgIHN0YXRpYyB2b2lkIHN0YXJ0
V29ya2VyQ29udGV4dFRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVu
dEltcGwqIHRoaXNQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBXVEY6OlN0cmluZyYgc2NyaXB0VVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHVzZXJBZ2VudCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VDb2RlKTsK
LSAgICBzdGF0aWMgdm9pZCB0ZXJtaW5hdGVXb3JrZXJDb250ZXh0VGFzayhXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIpOwotICAgIHN0YXRp
YyB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0VGFzayhXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlzUHRyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYgbWVz
c2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFz
c093blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpOwotICAg
IHN0YXRpYyB2b2lkIHdvcmtlck9iamVjdERlc3Ryb3llZFRhc2soV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIpOwotCi0gICAgLy8gVGhlc2Ug
dGFza3MgYXJlIGRpc3BhdGNoZWQgb24gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHdvcmtl
ciAoaS5lLgotICAgIC8vIG1haW4gV2ViS2l0IHRocmVhZCBpbiByZW5kZXJlciBwcm9jZXNzLCBh
bmQgdGhlIHdvcmtlciB0aHJlYWQgaW4gdGhlCi0gICAgLy8gd29ya2VyIHByb2Nlc3MpLgotICAg
IHN0YXRpYyB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3RUYXNrKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYg
bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
YXNzT3duUHRyPFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscyk7Ci0g
ICAgc3RhdGljIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0VGFzayhXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6
U3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYgc291cmNlVVJMKTsKLSAgICBzdGF0
aWMgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2soV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHNvdXJjZUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbWVzc2FnZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBtZXNzYWdlTGV2ZWwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBt
ZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCk7Ci0gICAgc3Rh
dGljIHZvaWQgY29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0VGFzayhXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFz
UGVuZGluZ0FjdGl2aXR5KTsKLSAgICBzdGF0aWMgdm9pZCByZXBvcnRQZW5kaW5nQWN0aXZpdHlU
YXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlz
UHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNQ
ZW5kaW5nQWN0aXZpdHkpOwotCi0gICAgdm9pZCBzdGFydFdvcmtlckNvbnRleHRJbnRlcm5hbChj
b25zdCBXZWJDb3JlOjpLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFdURjo6U3RyaW5nJiB1c2VyQWdl
bnQsIGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VDb2RlKTsKK3ByaXZhdGU6CisgICAgV2ViV29y
a2VyQ2xpZW50SW1wbChXZWJDb3JlOjpXb3JrZXIqLCBXZWJGcmFtZUltcGwqKTsKIAorICAgIE93
blB0cjxXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eT4gbV9wcm94eTsKICAgICAvLyBHdWFy
ZCBhZ2FpbnN0IGNvbnRleHQgZnJvbSBiZWluZyBkZXN0cm95ZWQgYmVmb3JlIGEgd29ya2VyIGV4
aXRzLgotICAgIFJlZlB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7Ci0KLSAgICBXZWJDb3JlOjpXb3JrZXIqIG1fd29ya2VyOwotICAg
IFdlYldvcmtlciogbV93ZWJXb3JrZXI7Ci0gICAgYm9vbCBtX2Fza2VkVG9UZXJtaW5hdGU7Ci0g
ICAgdW5zaWduZWQgbV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudDsKLSAgICBib29sIG1fd29ya2Vy
Q29udGV4dEhhZFBlbmRpbmdBY3Rpdml0eTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya2Vy
VGhyZWFkSWQ7Ci0gICAgV29ya2VyQ29udGV4dFByb3h5OjpQYWdlSW5zcGVjdG9yKiBtX3BhZ2VJ
bnNwZWN0b3I7CisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsKKyAgICBXZWJGcmFtZUltcGwqIG1fd2ViRnJhbWU7CisgICAgV2ViQ29y
ZTo6V29ya2VyQ29udGV4dFByb3h5OjpQYWdlSW5zcGVjdG9yKiBtX3BhZ2VJbnNwZWN0b3I7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYldvcmtlckltcGwuY3BwCmluZGV4IDZjOWY0NWMuLjQ2MWVhNWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwuY3BwCkBAIC03NCw2ICs3NCwxMSBAQCBX
ZWJXb3JrZXJJbXBsOjp+V2ViV29ya2VySW1wbCgpCiB7CiB9CiAKK1dlYkNvbW1vbldvcmtlckNs
aWVudEJhc2UqIFdlYldvcmtlckltcGw6OmNvbW1vbkNsaWVudEJhc2UoKQoreworICAgIHJldHVy
biBtX2NsaWVudDsKK30KKwogV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBXZWJXb3JrZXJJbXBsOjpj
b21tb25DbGllbnQoKQogewogICAgIHJldHVybiBtX2NsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYldvcmtlckltcGwuaAppbmRleCA3OWM5YzU0Li4zOWEzMjI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmgKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VySW1wbC5oCkBAIC02NSw2ICs2NSw5IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYldvcmtlckNsaWVudCogY2xpZW50KCkgeyByZXR1cm4g
bV9jbGllbnQ7IH0KICAgICB2aXJ0dWFsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xp
ZW50KCk7CiAKKyAgICAvLyBXZWJDb21tb25Xb3JrZXJCYXNlIG1ldGhvZHM6CisgICAgdmlydHVh
bCBXZWJDb21tb25Xb3JrZXJDbGllbnRCYXNlKiBjb21tb25DbGllbnRCYXNlKCk7CisKIHByaXZh
dGU6CiAgICAgdmlydHVhbCB+V2ViV29ya2VySW1wbCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2UuY3BwCmluZGV4IDE3Yzc3NTQuLjNmZDAxNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2Uu
Y3BwCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlOjpzdG9wKCkKICAgICB9CiB9CiAKLXZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZTo6cG9zdE9wZW5GaWxlU3lzdGVtVG9NYWluVGhyZWFkKFdlYkNvbW1vbldvcmtlckNsaWVu
dCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXpl
LCBib29sIGNyZWF0ZSwgY29uc3QgU3RyaW5nJiBtb2RlKQordm9pZCBXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlOjpwb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQoV2ViQ29tbW9u
V29ya2VyQ2xpZW50QmFzZSogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUs
IGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgY29uc3QgU3RyaW5nJiBtb2RlKQogewogICAg
IGRpc3BhdGNoVGFza1RvTWFpblRocmVhZCgKICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZv
cGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZCwKQEAgLTI1MSw3ICsyNTEsNyBAQCB2b2lkIFdvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RSZWFkRGlyZWN0b3J5VG9NYWluVGhyZWFk
KFdlYkZpbGVTeXN0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVh
ZEFjY2Vzcyh0aGlzKSwgbW9kZSkpOwogfQogCi12b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2U6Om9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRmlsZVN5c3RlbTo6
VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2UqIGJyaWRnZSwgY29uc3QgU3RyaW5nJiBtb2RlKQordm9pZCBXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29ya2VyQ2xpZW50QmFzZSogY29tbW9uQ2xp
ZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0
ZSwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSogYnJpZGdlLCBjb25zdCBTdHJpbmcm
IG1vZGUpCiB7CiAgICAgaWYgKCFjb21tb25DbGllbnQpCiAgICAgICAgIGJyaWRnZS0+ZGlkRmFp
bE9uTWFpblRocmVhZChXZWJGaWxlRXJyb3JBYm9ydCwgbW9kZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlLmgKaW5kZXggYmI0ODQ3OS4uMjdiODE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaApA
QCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEFzeW5jRmlsZVN5c3Rl
bTsKIGNsYXNzIE1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzOwogY2xhc3MgVGhyZWFkYWJs
ZUNhbGxiYWNrc0JyaWRnZVdyYXBwZXI7Ci1jbGFzcyBXZWJDb21tb25Xb3JrZXJDbGllbnQ7Citj
bGFzcyBXZWJDb21tb25Xb3JrZXJDbGllbnRCYXNlOwogY2xhc3MgV2ViRmlsZVN5c3RlbUNhbGxi
YWNrczsKIHN0cnVjdCBXZWJGaWxlSW5mbzsKIHN0cnVjdCBXZWJGaWxlU3lzdGVtRW50cnk7CkBA
IC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBNZXRob2RzIHRoYXQgY3Jl
YXRlIGFuIGluc3RhbmNlIGFuZCBwb3N0IGFuIGluaXRpYWwgcmVxdWVzdCB0YXNrIHRvIHRoZSBt
YWluIHRocmVhZC4gVGhleSBtdXN0IGJlIGNhbGxlZCBvbiB0aGUgd29ya2VyIHRocmVhZC4KLSAg
ICB2b2lkIHBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChXZWJDb21tb25Xb3JrZXJDbGll
bnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIGNv
bnN0IFN0cmluZyYgbW9kZSk7CisgICAgdm9pZCBwb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJl
YWQoV2ViQ29tbW9uV29ya2VyQ2xpZW50QmFzZSosIFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcg
bG9uZyBzaXplLCBib29sIGNyZWF0ZSwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICB2b2lkIHBv
c3RNb3ZlVG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBz
cmNQYXRoLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBkZXN0UGF0aCwgY29uc3QgU3RyaW5nJiBtb2Rl
KTsKICAgICB2b2lkIHBvc3RDb3B5VG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBX
ZWJDb3JlOjpLVVJMJiBzcmNQYXRoLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBkZXN0UGF0aCwgY29u
c3QgU3RyaW5nJiBtb2RlKTsKICAgICB2b2lkIHBvc3RSZW1vdmVUb01haW5UaHJlYWQoV2ViRmls
ZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7
CkBAIC0xMTAsNyArMTEwLDcgQEAgcHJpdmF0ZToKICAgICBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiwgV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqKTsKIAogICAgIC8vIE1ldGhv
ZHMgdGhhdCBhcmUgdG8gYmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICBzdGF0aWMg
dm9pZCBvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiwgV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9u
ZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
KiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbU9u
TWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29y
a2VyQ2xpZW50QmFzZSosIFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29s
IGNyZWF0ZSwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0IFN0cmluZyYg
bW9kZSk7CiAgICAgc3RhdGljIHZvaWQgbW92ZU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHNy
Y1BhdGgsIGNvbnN0IFdlYkNvcmU6OktVUkwmIGRlc3RQYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICBzdGF0aWMgdm9pZCBjb3B5
T25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lz
dGVtKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgc3JjUGF0aCwgY29uc3QgV2ViQ29yZTo6S1VSTCYg
ZGVzdFBhdGgsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcm
IG1vZGUpOwogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwm
IHBhdGgsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1v
ZGUpOwo=
</data>
<flag name="review"
          id="99597"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103954</attachid>
            <date>2011-08-15 14:35:21 -0700</date>
            <delta_ts>2011-08-15 19:11:00 -0700</delta_ts>
            <desc>CR feedback</desc>
            <filename>61016.patch</filename>
            <type>text/plain</type>
            <size>60932</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MDIwZDY0Li41MzM1ZjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTEtMDgtMTQgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEwMTYKKyAgICAg
ICAgW1dlYldvcmtlcnNdW0Nocm9taXVtXSBVc2UgdjggSXNvbGF0ZXMgZm9yIGluLXByb2Nlc3Mg
aW1wbGVtZW50YXRpb24gb2YgV2ViV29ya2Vycy4KKyAgICAgICAgVGhpcyBhZGRzIGFuIGltcGxl
bWVudGF0aW9uIG9mIGluLXByb2Nlc3MgZGVkaWNhdGVkIHdvcmtlcnMgdG8gY2hyb21pdW0gcG9y
dC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3Zl
cmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJNZXNzYWdp
bmdQcm94eS5oOiBNYWRlIGRlc3RydWN0b3IgcHVibGljIHRvIGVuYWJsZSB1c2luZyBXb3JrZXJN
ZXNzYWdpbmdQcm94eSBpbiBjaHJvbWl1bSBwb3J0LgorCiAyMDExLTA4LTE1ICBDYXJ5IENsYXJr
ICA8Y2FyeWNsYXJrQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aXNlIFNraWEgb24gQ2hyb21l
IE1hYyB0byByZXR1cm4gZmFsbGJhY2sgZm9udHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKaW5kZXggMzczMTQ4MC4uNjdjY2E3OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaApAQCAtNTAsNiArNTAs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdv
cmtlck1lc3NhZ2luZ1Byb3h5KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGlj
OgogICAgICAgICBXb3JrZXJNZXNzYWdpbmdQcm94eShXb3JrZXIqKTsKKyAgICAgICAgdmlydHVh
bCB+V29ya2VyTWVzc2FnaW5nUHJveHkoKTsKIAogICAgICAgICAvLyBJbXBsZW1lbnRhdGlvbnMg
b2YgV29ya2VyQ29udGV4dFByb3h5LgogICAgICAgICAvLyAoT25seSB1c2UgdGhlc2UgbWV0aG9k
cyBpbiB0aGUgd29ya2VyIG9iamVjdCB0aHJlYWQuKQpAQCAtODksNyArOTAsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBXb3JrZXJFeGNlcHRpb25UYXNrOwog
ICAgICAgICBmcmllbmQgY2xhc3MgV29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrOwogCi0g
ICAgICAgIHZpcnR1YWwgfldvcmtlck1lc3NhZ2luZ1Byb3h5KCk7CiAKICAgICAgICAgdm9pZCB3
b3JrZXJDb250ZXh0RGVzdHJveWVkSW50ZXJuYWwoKTsKICAgICAgICAgdm9pZCByZXBvcnRQZW5k
aW5nQWN0aXZpdHlJbnRlcm5hbChib29sIGNvbmZpcm1pbmdNZXNzYWdlLCBib29sIGhhc1BlbmRp
bmdBY3Rpdml0eSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGUxMmQ5MjEuLjZmY2I4
NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzUgQEAKKzIwMTEtMDgt
MTQgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KKworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEwMTYKKyAgICAgICAgW1dlYldvcmtl
cnNdW0Nocm9taXVtXSBVc2UgdjggSXNvbGF0ZXMgZm9yIGluLXByb2Nlc3MgaW1wbGVtZW50YXRp
b24gb2YgV2ViV29ya2Vycy4KKyAgICAgICAgVGhpcyBhZGRzIGFuIGltcGxlbWVudGF0aW9uIG9m
IGluLXByb2Nlc3MgZGVkaWNhdGVkIHdvcmtlcnMgdG8gY2hyb21pdW0gcG9ydC4KKyAgICAgICAg
VGhlIGNydXggb2YgdGhlIG1hdHRlciBpcyB0aGUgcmVpbXBsZW1lbnRhdGlvbiBvZiBXZWJXb3Jr
ZXJDbGllbnRJbXBsLiBXZWJXb3JrZXJDbGllbnRJbXBsIG5vdyAKKyAgICAgICAgaW1wbGVtZW50
cyBhbGwgdGhyZWUgb2YgV29ya2Vye0xvYWRlcixDb250ZXh0LE9iamVjdH1Qcm94aWVzIGFuZCBk
ZWxlZ2F0ZXMgdGhlIGltcGxlbWVudGF0aW9uIHRvIAorICAgICAgICBXZWJLaXQncyBzdGFuZGFy
ZCBXb3JrZXJNZXNzYWdpbmdQcm94eS4KKyAgICAgICAgRm9yIG5vdywgd2UgaGF2ZSAzIGltcGxl
bWVudGF0aW9ucyBvZiB3b3JrZXJzIGluIGNocm9taXVtIFdlYktpdDoKKyAgICAgICAgICAtIElu
LXByb2Nlc3MgZGVkaWNhdGVkIHdvcmtlcnMgKHRoaXMgY2hlY2tpbikKKyAgICAgICAgICAtIElu
dGVyLXByb2Nlc3Mgc2hhcmVkIHdvcmtlcnMKKyAgICAgICAgICAtIEludGVyLXByb2Nlc3MgZGVk
aWNhdGVkIHdvcmtlcnMgKGRlZnVuY3QgYWZ0ZXIgdGhpcyBjaGVja2luKQorICAgICAgICBUaGlz
IHBhdGNoIGV4dHJhY3RzIHNvbWUgbmV3IGNvbW1vbiBpbnRlcmZhY2VzIChXZWJDb21tb25Xb3Jr
ZXJCYXNlIGFuZCBXZWJDb21tb25Xb3JrZXJDbGllbnQpIGZvciB0aGVzZSAKKyAgICAgICAgdGhy
ZWUgaW1wbGVtZW50YXRpb25zLiAKKyAgICAgICAgUmVtb3ZpbmcgdGhlIHJlbWFpbmluZ3Mgb2Yg
aW50ZXItcHJvY2VzcyBkZWRpY2F0ZWQgd29ya2VycyAtcmVsYXRlZCBjbGFzc2VzIGlzIGxlZnQg
Zm9yIGEgc2VwYXJhdGUgcGF0Y2ggCisgICAgICAgIChpdCB3aWxsIHJlcXVpcmUgY29vcmRpbmF0
ZWQgY2hhbmdlcyBvbiBjaHJvbXVpdW0gc2lkZSkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9X
ZWJDb21tb25Xb3JrZXJDbGllbnQuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViQ29tbW9uV29ya2Vy
Q2xpZW50QmFzZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
aGFyZWRXb3JrZXJJbXBsLmguCisgICAgICAgICogc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYktpdDo6QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U6OkFsbG93RGF0
YWJhc2VNYWluVGhyZWFkQnJpZGdlKToKKyAgICAgICAgKFdlYktpdDo6QWxsb3dEYXRhYmFzZU1h
aW5UaHJlYWRCcmlkZ2U6OmFsbG93RGF0YWJhc2VUYXNrKToKKyAgICAgICAgKFdlYktpdDo6YWxs
b3dEYXRhYmFzZUZvcldvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZU9ic2VydmVy
OjpjYW5Fc3RhYmxpc2hEYXRhYmFzZSk6CisgICAgICAgICogc3JjL0xvY2FsRmlsZVN5c3RlbUNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZW5GaWxlU3lzdGVtSGVscGVyKToKKyAg
ICAgICAgKiBzcmMvV2ViQ29tbW9uV29ya2VyQmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMv
V2ViU2hhcmVkV29ya2VySW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJ
bXBsOjpjb21tb25DbGllbnRCYXNlKToKKyAgICAgICAgKiBzcmMvV2ViV29ya2VyQmFzZS5oOgor
ICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJCYXNlOjp3ZWJWaWV3KToKKyAgICAgICAgKiBzcmMv
V2ViV29ya2VyQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVu
dEltcGw6OmNyZWF0ZVdvcmtlckNvbnRleHRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYldv
cmtlckNsaWVudEltcGw6OldlYldvcmtlckNsaWVudEltcGwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJXb3JrZXJDbGllbnRJbXBsOjp+V2ViV29ya2VyQ2xpZW50SW1wbCk6CisgICAgICAgIChXZWJL
aXQ6OldlYldvcmtlckNsaWVudEltcGw6OnN0YXJ0V29ya2VyQ29udGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OnRlcm1pbmF0ZVdvcmtlckNvbnRleHQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyQ29u
dGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6Omhhc1BlbmRpbmdB
Y3Rpdml0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6Ondvcmtlck9i
amVjdERlc3Ryb3llZCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OmNv
bm5lY3RUb0luc3BlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6
OmRpc2Nvbm5lY3RGcm9tSW5zcGVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xp
ZW50SW1wbDo6c2VuZE1lc3NhZ2VUb0luc3BlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYldv
cmtlckNsaWVudEltcGw6OnBvc3RUYXNrVG9Mb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJX
b3JrZXJDbGllbnRJbXBsOjpwb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6Y29uZmlybU1lc3NhZ2VG
cm9tV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6
cmVwb3J0UGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50
SW1wbDo6d29ya2VyQ29udGV4dENsb3NlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNs
aWVudEltcGw6OnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYldvcmtlckNsaWVudEltcGw6OnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdE1lc3NhZ2VUb1BhZ2VJ
bnNwZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjp3b3JrZXJD
b250ZXh0RGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6
d2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OmFsbG93Rmls
ZVN5c3RlbSk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6Om9wZW5GaWxl
U3lzdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6YWxsb3dEYXRh
YmFzZSk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OmRpc3BhdGNoRGV2
VG9vbHNNZXNzYWdlKToKKyAgICAgICAgKiBzcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5oOgorICAg
ICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpjb21tb25DbGllbnRCYXNlKToKKyAg
ICAgICAgKiBzcmMvV2ViV29ya2VySW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtl
ckltcGw6OmNvbW1vbkNsaWVudEJhc2UpOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJJbXBsLmg6
CisgICAgICAgICogc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0T3BlbkZp
bGVTeXN0ZW1Ub01haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlOjpvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZCk6CisgICAgICAgICog
c3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaDoKKwogMjAxMS0wOC0xNSAgTmlj
byBXZWJlciAgPHRoYWtpc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBJbXBs
ZW1lbnQgc2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXAKaW5kZXggZWM1NGJkNy4uODE2NDQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApA
QCAtMTIwLDYgKzEyMCw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb2xvck5hbWUu
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDb21tb24uaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJDb21tb25Xb3JrZXJDbGllbnQuaCcsCisgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJDb21tb25Xb3JrZXJDbGllbnRCYXNlLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViQ29tcG9zaXRpb25VbmRlcmxpbmUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJDb25zb2xlTWVzc2FnZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNvbnRleHRN
ZW51RGF0YS5oJywKQEAgLTQzNCw2ICs0MzUsNyBAQAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
Q2FjaGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbG9yLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJDb21tb24uY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkNv
bW1vbldvcmtlckJhc2UuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDU3RyaW5n
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDdXJzb3JJbmZvLmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21tb25Xb3JrZXJDbGllbnQu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5o
CmluZGV4IDM1MmEyYzAuLjJjZDI2NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oCkBAIC0zMiw2ICszMiw3IEBACiAj
ZGVmaW5lIFdlYkNvbW1vbldvcmtlckNsaWVudF9oCiAKICNpbmNsdWRlICJXZWJDb21tb24uaCIK
KyNpbmNsdWRlICJXZWJDb21tb25Xb3JrZXJDbGllbnRCYXNlLmgiCiAjaW5jbHVkZSAiV2ViRmls
ZVN5c3RlbS5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ5LDcgKzUwLDcgQEAgY2xhc3Mg
V2ViV29ya2VyQ2xpZW50OwogLy8gd29ya2Vycy4KIC8vIEFsbCBmdW5jdGlvbnMgYXJlIGV4cGVj
dGVkIHRvIGJlIGNhbGxlZCBiYWNrIG9uIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkCiAvLyB0aGUg
V29ya2VyIG9iamVjdCwgdW5sZXNzIG5vdGVkLgotY2xhc3MgV2ViQ29tbW9uV29ya2VyQ2xpZW50
IHsKK2NsYXNzIFdlYkNvbW1vbldvcmtlckNsaWVudCA6IHB1YmxpYyBXZWJDb21tb25Xb3JrZXJD
bGllbnRCYXNlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29y
a2VyT2JqZWN0KAogICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbGlu
ZU51bWJlciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNv
bW1vbldvcmtlckNsaWVudEJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkNvbW1vbldvcmtlckNsaWVudEJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jZmY3NDZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViQ29tbW9uV29ya2VyQ2xpZW50QmFzZS5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYkNvbW1vbldvcmtlckNsaWVudEJhc2VfaAorI2RlZmluZSBXZWJDb21tb25Xb3JrZXJDbGll
bnRCYXNlX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYkZpbGVTeXN0
ZW0uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2Vi
Tm90aWZpY2F0aW9uUHJlc2VudGVyOworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2ViV29ya2Vy
OworCitjbGFzcyBXZWJDb21tb25Xb3JrZXJDbGllbnRCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBD
YWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVhZCBiZWZvcmUgb3BlbmluZyBhIHdlYiBkYXRh
YmFzZS4KKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dEYXRhYmFzZShXZWJGcmFtZSosIGNvbnN0IFdl
YlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0
IHRocmVhZCBiZWZvcmUgb3BlbmluZyBhIGZpbGUgc3lzdGVtLgorICAgIHZpcnR1YWwgYm9vbCBh
bGxvd0ZpbGVTeXN0ZW0oKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0
IHRocmVhZCBiZWZvcmUgb3BlbmluZyBhIGZpbGUgc3lzdGVtLgorICAgIHZpcnR1YWwgdm9pZCBv
cGVuRmlsZVN5c3RlbShXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBj
cmVhdGUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9EYXRhYmFzZU9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFi
YXNlT2JzZXJ2ZXIuY3BwCmluZGV4IDUxYzQ4ZDguLmI0Njc4ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCkBAIC0zOCw2ICszOCw3IEBA
CiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiV2ViQ29tbW9uV29y
a2VyQmFzZS5oIgogI2luY2x1ZGUgIldlYkNvbW1vbldvcmtlckNsaWVudC5oIgogI2luY2x1ZGUg
IldlYkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiV2ViRGF0YWJhc2VPYnNlcnZlci5oIgpAQCAtNDYs
NyArNDcsNyBAQAogI2luY2x1ZGUgIldlYlBlcm1pc3Npb25DbGllbnQuaCIKICNpbmNsdWRlICJX
ZWJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCi0jaW5jbHVkZSAi
V2ViV29ya2VySW1wbC5oIgorI2luY2x1ZGUgIldlYldvcmtlckJhc2UuaCIKICNpbmNsdWRlICJX
b3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKICNpbmNsdWRl
ICJXb3JrZXJTY3JpcHRDb250cm9sbGVyLmgiCkBAIC02NCw3ICs2NSw3IEBAIHN0YXRpYyBjb25z
dCBjaGFyIGFsbG93RGF0YWJhc2VNb2RlW10gPSAiYWxsb3dEYXRhYmFzZU1vZGUiOwogLy8gY2Fs
bCBiYWNrIHRvIHRoZSB3b3JrZXIgY29udGV4dC4KIGNsYXNzIEFsbG93RGF0YWJhc2VNYWluVGhy
ZWFkQnJpZGdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFsbG93RGF0YWJhc2VNYWlu
VGhyZWFkQnJpZGdlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QWxsb3dEYXRh
YmFzZU1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSog
d29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25Xb3Jr
ZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXVEY6OlN0cmlu
ZyYgbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5UaHJl
YWRCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVy
UHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnRCYXNl
KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUs
IGNvbnN0IFdURjo6U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBbGxvd0RhdGFiYXNlTWFp
blRocmVhZEJyaWRnZSh3b3JrZXJMb2FkZXJQcm94eSwgbW9kZSwgY29tbW9uQ2xpZW50LCBmcmFt
ZSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKICAgICB9CkBAIC05Miw3ICs5
Myw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQWxsb3dEYXRhYmFzZU1haW5U
aHJlYWRCcmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5
LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25D
bGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNvbnN0IFdU
Rjo6U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQorICAg
IEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5
KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldv
cmtlckNsaWVudEJhc2UqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXVEY6
OlN0cmluZyYgbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUpCiAgICAgICAgIDogbV93b3JrZXJMb2FkZXJQcm94eSh3b3JrZXJM
b2FkZXJQcm94eSkKICAgICAgICAgLCBtX21vZGUobW9kZSkKICAgICB7CkBAIC0xMDMsNyArMTA0
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
YWxsb3dEYXRhYmFzZVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwg
Y29uc3QgV1RGOjpTdHJpbmcgbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcgZGlzcGxheU5hbWUsIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNlTWFpblRo
cmVhZEJyaWRnZT4gYnJpZGdlKQorICAgIHN0YXRpYyB2b2lkIGFsbG93RGF0YWJhc2VUYXNrKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdlYkNvbW1vbldvcmtlckNs
aWVudEJhc2UqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXVEY6OlN0cmlu
ZyBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3Rp
bWF0ZWRTaXplLCBQYXNzUmVmUHRyPEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlPiBicmlk
Z2UpCiAgICAgewogICAgICAgICBpZiAoY29tbW9uQ2xpZW50KQogICAgICAgICAgICAgYnJpZGdl
LT5zaWduYWxDb21wbGV0ZWQoY29tbW9uQ2xpZW50LT5hbGxvd0RhdGFiYXNlKGZyYW1lLCBuYW1l
LCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOwpAQCAtMTIyLDcgKzEyMyw3IEBAIHByaXZh
dGU6CiAgICAgV1RGOjpTdHJpbmcgbV9tb2RlOwogfTsKIAotYm9vbCBhbGxvd0RhdGFiYXNlRm9y
V29ya2VyKFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSogZnJh
bWUsIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBkaXNwbGF5TmFtZSwg
dW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQorYm9vbCBhbGxvd0RhdGFiYXNlRm9yV29ya2Vy
KFdlYkNvbW1vbldvcmtlckNsaWVudEJhc2UqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUqIGZyYW1l
LCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGlzcGxheU5hbWUsIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKIHsKICAgICBXZWJDb3JlOjpXb3JrZXJTY3JpcHRD
b250cm9sbGVyKiBjb250cm9sbGVyID0gV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6
Y29udHJvbGxlckZvckNvbnRleHQoKTsKICAgICBXZWJDb3JlOjpXb3JrZXJDb250ZXh0KiB3b3Jr
ZXJDb250ZXh0ID0gY29udHJvbGxlci0+d29ya2VyQ29udGV4dCgpOwpAQCAtMTY1LDggKzE2Niw4
IEBAIGJvb2wgRGF0YWJhc2VPYnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0CiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgICAg
IFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0
Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgICAgIFdvcmtlckxvYWRlclByb3h5KiB3
b3JrZXJMb2FkZXJQcm94eSA9ICZ3b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29ya2VyTG9hZGVy
UHJveHkoKTsKLSAgICAgICAgV2ViV29ya2VyQmFzZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8
V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKLSAgICAgICAgcmV0dXJuIGFsbG93
RGF0YWJhc2VGb3JXb3JrZXIod2ViV29ya2VyLT5jb21tb25DbGllbnQoKSwgd2ViV29ya2VyLT53
ZWJWaWV3KCktPm1haW5GcmFtZSgpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSk7
CisgICAgICAgIFdlYkNvbW1vbldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PFdl
YkNvbW1vbldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94eSk7CisgICAgICAgIHJldHVybiBh
bGxvd0RhdGFiYXNlRm9yV29ya2VyKHdlYldvcmtlci0+Y29tbW9uQ2xpZW50QmFzZSgpLCB3ZWJX
b3JrZXItPnZpZXcoKS0+bWFpbkZyYW1lKCksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRT
aXplKTsKICNlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1
bS5jcHAKaW5kZXggYjMzY2UyYS4uYTJmZWViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcApAQCAtNDAsNyArNDAs
OCBAQAogI2luY2x1ZGUgIkZpbGVTeXN0ZW1DYWxsYmFjay5oIgogI2luY2x1ZGUgIkZpbGVTeXN0
ZW1DYWxsYmFja3MuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIldl
YkNvbW1vbldvcmtlckNsaWVudC5oIgorI2luY2x1ZGUgIldlYkNvbW1vbldvcmtlckJhc2UuaCIK
KyNpbmNsdWRlICJXZWJDb21tb25Xb3JrZXJDbGllbnRCYXNlLmgiCiAjaW5jbHVkZSAiV2ViRmls
ZUVycm9yLmgiCiAjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIldlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsLmgiCkBAIC00OCw3ICs0OSw3IEBACiAjaW5jbHVkZSAiV2ViRnJh
bWVJbXBsLmgiCiAjaW5jbHVkZSAiV2ViUGVybWlzc2lvbkNsaWVudC5oIgogI2luY2x1ZGUgIldl
YlZpZXdJbXBsLmgiCi0jaW5jbHVkZSAiV2ViV29ya2VySW1wbC5oIgorI2luY2x1ZGUgIldlYldv
cmtlckJhc2UuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgpA
QCAtODAsNyArODEsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBvcGVuRmlsZVN5c3RlbU1vZGVbXSA9
ICJvcGVuRmlsZVN5c3RlbU1vZGUiOwogLy8gY2FsbCBiYWNrIHRvIHRoZSB3b3JrZXIgY29udGV4
dC4KIGNsYXNzIEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2UgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZT4gewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+
IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNv
bnN0IFdURjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVu
dCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdl
PiBjcmVhdGUoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBj
b25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50QmFzZSogY29tbW9u
Q2xpZW50KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBbGxvd0ZpbGVTeXN0
ZW1NYWluVGhyZWFkQnJpZGdlKHdvcmtlckxvYWRlclByb3h5LCBtb2RlLCBjb21tb25DbGllbnQp
KTsKICAgICB9CkBAIC0xMDcsNyArMTA4LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToK
LSAgICBBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlKFdlYkNvcmU6OldvcmtlckxvYWRl
clByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNv
bW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KQorICAgIEFsbG93RmlsZVN5c3RlbU1haW5U
aHJlYWRCcmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5
LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50QmFzZSogY29t
bW9uQ2xpZW50KQogICAgICAgICA6IG1fd29ya2VyTG9hZGVyUHJveHkod29ya2VyTG9hZGVyUHJv
eHkpCiAgICAgICAgICwgbV9tb2RlKG1vZGUpCiAgICAgewpAQCAtMTE2LDcgKzExNyw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFj
Y2Vzcyh0aGlzKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFsbG93RmlsZVN5c3RlbVRh
c2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgV2ViQ29tbW9uV29y
a2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFBhc3NSZWZQdHI8QWxsb3dGaWxlU3lzdGVtTWFpblRo
cmVhZEJyaWRnZT4gYnJpZGdlKQorICAgIHN0YXRpYyB2b2lkIGFsbG93RmlsZVN5c3RlbVRhc2so
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgV2ViQ29tbW9uV29ya2Vy
Q2xpZW50QmFzZSogY29tbW9uQ2xpZW50LCBQYXNzUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1haW5U
aHJlYWRCcmlkZ2U+IGJyaWRnZSkKICAgICB7CiAgICAgICAgIGlmIChjb21tb25DbGllbnQpCiAg
ICAgICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChjb21tb25DbGllbnQtPmFsbG93Rmls
ZVN5c3RlbSgpKTsKQEAgLTEzNSw3ICsxMzYsNyBAQCBwcml2YXRlOgogICAgIFdURjo6U3RyaW5n
IG1fbW9kZTsKIH07CiAKLWJvb2wgYWxsb3dGaWxlU3lzdGVtRm9yV29ya2VyKFdlYkNvbW1vbldv
cmtlckNsaWVudCogY29tbW9uQ2xpZW50KQorYm9vbCBhbGxvd0ZpbGVTeXN0ZW1Gb3JXb3JrZXIo
V2ViQ29tbW9uV29ya2VyQ2xpZW50QmFzZSogY29tbW9uQ2xpZW50KQogewogICAgIFdvcmtlclNj
cmlwdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpjb250
cm9sbGVyRm9yQ29udGV4dCgpOwogICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBj
b250cm9sbGVyLT53b3JrZXJDb250ZXh0KCk7CkBAIC0xNTgsNyArMTU5LDcgQEAgYm9vbCBhbGxv
d0ZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQp
CiAgICAgcmV0dXJuIGJyaWRnZS0+cmVzdWx0KCk7CiB9CiAKLXZvaWQgb3BlbkZpbGVTeXN0ZW1G
b3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0
ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzKiBjYWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMpCit2b2lkIG9wZW5GaWxlU3lz
dGVtRm9yV29ya2VyKFdlYkNvbW1vbldvcmtlckNsaWVudEJhc2UqIGNvbW1vbkNsaWVudCwgV2Vi
RmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdlYkZp
bGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcywgYm9vbCBzeW5jaHJvbm91cykKIHsKICAgICBX
b3JrZXJTY3JpcHRDb250cm9sbGVyKiBjb250cm9sbGVyID0gV29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6Y29udHJvbGxlckZvckNvbnRleHQoKTsKICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250
ZXh0ID0gY29udHJvbGxlci0+d29ya2VyQ29udGV4dCgpOwpAQCAtMjA0LDExICsyMDUsMTIgQEAg
c3RhdGljIHZvaWQgb3BlbkZpbGVTeXN0ZW1IZWxwZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgQXN5bmNGaWxlU3lzdGUKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICAgICAgV29y
a2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihj
b250ZXh0KTsKICAgICAgICAgV29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5ID0g
JndvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOwotICAgICAgICBX
ZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxXZWJXb3JrZXJCYXNlKj4od29y
a2VyTG9hZGVyUHJveHkpOwotICAgICAgICBpZiAoIWFsbG93RmlsZVN5c3RlbUZvcldvcmtlcih3
ZWJXb3JrZXItPmNvbW1vbkNsaWVudCgpKSkKKyAgICAgICAgV2ViQ29tbW9uV29ya2VyQmFzZSog
d2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8V2ViQ29tbW9uV29ya2VyQmFzZSo+KHdvcmtlckxvYWRl
clByb3h5KTsKKyAgICAgICAgaWYgKCFhbGxvd0ZpbGVTeXN0ZW1Gb3JXb3JrZXIod2ViV29ya2Vy
LT5jb21tb25DbGllbnRCYXNlKCkpKQogICAgICAgICAgICAgYWxsb3dlZCA9IGZhbHNlOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcih3ZWJXb3JrZXIt
PmNvbW1vbkNsaWVudCgpLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwg
c2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJlc2VudCwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxs
YmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25vdXMpLCBzeW5jaHJv
bm91cyk7CisgICAgICAgICAgICBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcih3ZWJXb3JrZXItPmNv
bW1vbkNsaWVudEJhc2UoKSwgc3RhdGljX2Nhc3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSks
IHNpemUsIGNyZWF0ZSA9PSBDcmVhdGVJZk5vdFByZXNlbnQsIG5ldyBXZWJGaWxlU3lzdGVtQ2Fs
bGJhY2tzSW1wbChjYWxsYmFja3MsIHR5cGUsIGNvbnRleHQsIHN5bmNocm9ub3VzKSwgc3luY2hy
b25vdXMpOworCiAjZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tbW9uV29ya2VyQmFz
ZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQ29tbW9uV29ya2VyQmFzZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZWY0OWEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJDb21tb25Xb3JrZXJCYXNlLmgKQEAg
LTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2ViQ29tbW9uV29ya2VyQmFzZV9oCisjZGVmaW5lIFdlYkNv
bW1vbldvcmtlckJhc2VfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCisj
aW5jbHVkZSAiV2ViVmlldy5oIgorI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCisKKyNp
ZiBFTkFCTEUoV09SS0VSUykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkNvbW1v
bldvcmtlckJhc2UgOiBwdWJsaWMgV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkgeworcHVibGlj
OgorICAgIHZpcnR1YWwgV2ViQ29tbW9uV29ya2VyQ2xpZW50QmFzZSogY29tbW9uQ2xpZW50QmFz
ZSgpID0gMDsKKyAgICB2aXJ0dWFsIFdlYlZpZXcqIHZpZXcoKSBjb25zdCA9IDA7Cit9OworCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmgKaW5kZXggZDFiNjRiYS4uNDFj
NjFlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2hhcmVkV29y
a2VySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNoYXJlZFdvcmtl
ckltcGwuaApAQCAtNjQsNiArNjQsOSBAQCBwdWJsaWM6CiAgICAgV2ViV29ya2VyQ2xpZW50KiBj
bGllbnQoKTsKICAgICBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCgpIHsgcmV0
dXJuIG1fY2xpZW50OyB9CiAKKyAgICAvLyBXZWJDb21tb25Xb3JrZXJCYXNlIG1ldGhvZHM6Cisg
ICAgV2ViQ29tbW9uV29ya2VyQ2xpZW50QmFzZSogY29tbW9uQ2xpZW50QmFzZSgpIHsgcmV0dXJu
IG1fY2xpZW50OyB9CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB+V2ViU2hhcmVkV29ya2VySW1w
bCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJC
YXNlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmgKaW5kZXgg
YjBlNTFmMS4uYjFmMzYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViV29ya2VyQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtl
ckJhc2UuaApAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShXT1JLRVJTKQogCiAjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkNvbW1vbldvcmtlckJh
c2UuaCIKICNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgogI2luY2x1ZGUgIldvcmtlckxvYWRl
clByb3h5LmgiCiAjaW5jbHVkZSAiV29ya2VyT2JqZWN0UHJveHkuaCIKQEAgLTU5LDcgKzYwLDcg
QEAgY2xhc3MgV2ViV29ya2VyQ2xpZW50OwogLy8gY29kZSB1c2VkIGJ5IGJvdGggaW1wbGVtZW50
YXRpb24gY2xhc3NlcywgaW5jbHVkaW5nIGltcGxlbWVudGF0aW9ucyBvZiB0aGUKIC8vIFdvcmtl
ck9iamVjdFByb3h5IGFuZCBXb3JrZXJMb2FkZXJQcm94eSBpbnRlcmZhY2VzLgogY2xhc3MgV2Vi
V29ya2VyQmFzZSA6IHB1YmxpYyBXZWJDb3JlOjpXb3JrZXJPYmplY3RQcm94eQotICAgICAgICAg
ICAgICAgICAgICAsIHB1YmxpYyBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eQorICAgICAgICAg
ICAgICAgICAgICAsIHB1YmxpYyBXZWJDb21tb25Xb3JrZXJCYXNlCiAgICAgICAgICAgICAgICAg
ICAgICwgcHVibGljIFdlYkZyYW1lQ2xpZW50IHsKIHB1YmxpYzoKICAgICBXZWJXb3JrZXJCYXNl
KCk7CkBAIC05MiwxMSArOTMsMTAgQEAgcHVibGljOgogICAgIC8vIEV4ZWN1dGVzIHRoZSBnaXZl
biB0YXNrIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFRhc2tU
b01haW5UaHJlYWQoUGFzc093blB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPik7CiAKLSAgICBXZWJWaWV3KiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3
OyB9Ci0KLSAgICB2aXJ0dWFsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KCkg
PSAwOworICAgIHZpcnR1YWwgV2ViVmlldyogdmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmll
dzsgfQogCiBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNv
bW1vbkNsaWVudCgpID0gMDsKICAgICB2aXJ0dWFsIFdlYldvcmtlckNsaWVudCogY2xpZW50KCkg
PSAwOwogCiAgICAgdm9pZCBzZXRXb3JrZXJUaHJlYWQoUGFzc1JlZlB0cjxXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWQ+IHRocmVhZCkgeyBtX3dvcmtlclRocmVhZCA9IHRocmVhZDsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcAppbmRleCBj
MTk4Y2NmLi5jNmJkZTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJXb3JrZXJDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJXb3JrZXJDbGllbnRJbXBsLmNwcApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgIldlYktp
dC5oIgogI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgogI2luY2x1ZGUgIldlYk1lc3NhZ2VQb3J0
Q2hhbm5lbC5oIgorI2luY2x1ZGUgIldlYlBlcm1pc3Npb25DbGllbnQuaCIKICNpbmNsdWRlICJX
ZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJVUkwuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5o
IgpAQCAtNjksMTcgKzcwLDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi0vLyBXaGVuIFdlYktpdCBjcmVhdGVzIGEgV29ya2VyQ29udGV4dFByb3h5
IG9iamVjdCwgd2UgY2hlY2sgaWYgd2UncmUgaW4gdGhlCi0vLyByZW5kZXJlciBvciB3b3JrZXIg
cHJvY2Vzcy4gIElmIHRoZSBsYXR0ZXIsIHRoZW4gd2UganVzdCB1c2UKLS8vIFdvcmtlck1lc3Nh
Z2luZ1Byb3h5LgotLy8KLS8vIElmIHdlJ3JlIGluIHRoZSByZW5kZXJlciBwcm9jZXNzLCB0aGVu
IHdlIG5lZWQgdXNlIHRoZSBnbHVlIHByb3ZpZGVkCi0vLyBXZWJXb3JrZXIgb2JqZWN0IHRvIHRh
bGsgdG8gdGhlIHdvcmtlciBwcm9jZXNzIG92ZXIgSVBDLiAgVGhlIHdvcmtlciBwcm9jZXNzCi0v
LyB0YWxrcyB0byBXb3JrZXIqIHVzaW5nIFdvcmtlck9iamVjdFByb3h5LCB3aGljaCB3ZSBpbXBs
ZW1lbnQgb24KLS8vIFdlYldvcmtlckNsaWVudEltcGwuCi0vLwotLy8gTm90ZSB0aGF0IGlmIHdl
J3JlIHJ1bm5pbmcgZWFjaCB3b3JrZXIgaW4gYSBzZXBhcmF0ZSBwcm9jZXNzLCB0aGVuIG5lc3Rl
ZAotLy8gd29ya2VycyBlbmQgdXAgdXNpbmcgdGhlIHNhbWUgY29kZXBhdGggYXMgdGhlIHJlbmRl
cmVyIHByb2Nlc3MuCisvLyBDaHJvbWl1bS1zcGVjaWZpYyB3cmFwcGVyIG92ZXIgV29ya2VyTWVz
c2FnaW5nUHJveHkuCisvLyBEZWxlZ2F0ZXMgaW1wbGVtZW50YXRpb24gb2YgV29ya2Vye0xvYWRl
cixDb250ZXh0LE9iamVjdH1Qcm94eSB0byBXb3JrZXJNZXNzYWdpbmdQcm94eS4KIAogLy8gc3Rh
dGljCiBXb3JrZXJDb250ZXh0UHJveHkqIFdlYldvcmtlckNsaWVudEltcGw6OmNyZWF0ZVdvcmtl
ckNvbnRleHRQcm94eShXb3JrZXIqIHdvcmtlcikKQEAgLTg5LDM2NyArODEsMTU5IEBAIFdvcmtl
ckNvbnRleHRQcm94eSogV2ViV29ya2VyQ2xpZW50SW1wbDo6Y3JlYXRlV29ya2VyQ29udGV4dFBy
b3h5KFdvcmtlciogd29ya2VyCiAgICAgLy8gaWYgKCF3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+aXNEb2N1bWVudCgpKQogICAgIC8vICAgICByZXR1cm4gbmV3IFdvcmtlck1lc3Nh
Z2luZ1Byb3h5KHdvcmtlcik7CiAKLSAgICBXZWJXb3JrZXIqIHdlYldvcmtlciA9IDA7Ci0gICAg
V2ViV29ya2VyQ2xpZW50SW1wbCogcHJveHkgPSBuZXcgV2ViV29ya2VyQ2xpZW50SW1wbCh3b3Jr
ZXIpOwotCiAgICAgaWYgKHdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3Vt
ZW50KCkpIHsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1l
bnQqPigKLSAgICAgICAgICAgIHdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAg
ICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPih3b3JrZXIt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgICAgIFdlYkZyYW1lSW1wbCogd2ViRnJh
bWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgICAg
IHdlYldvcmtlciA9IHdlYkZyYW1lLT5jbGllbnQoKS0+Y3JlYXRlV29ya2VyKHdlYkZyYW1lLCBw
cm94eSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7
Ci0gICAgICAgIGlmICghY29udHJvbGxlcikgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIERlZGlj
YXRlZFdvcmtlclRocmVhZCogdGhyZWFkID0gc3RhdGljX2Nhc3Q8RGVkaWNhdGVkV29ya2VyVGhy
ZWFkKj4oY29udHJvbGxlci0+d29ya2VyQ29udGV4dCgpLT50aHJlYWQoKSk7Ci0gICAgICAgIFdv
cmtlck9iamVjdFByb3h5KiB3b3JrZXJPYmplY3RQcm94eSA9ICZ0aHJlYWQtPndvcmtlck9iamVj
dFByb3h5KCk7Ci0gICAgICAgIFdlYldvcmtlckltcGwqIGltcGwgPSByZWludGVycHJldF9jYXN0
PFdlYldvcmtlckltcGwqPih3b3JrZXJPYmplY3RQcm94eSk7Ci0gICAgICAgIHdlYldvcmtlciA9
IGltcGwtPmNsaWVudCgpLT5jcmVhdGVXb3JrZXIocHJveHkpOwotICAgIH0KLQotICAgIHByb3h5
LT5zZXRXZWJXb3JrZXIod2ViV29ya2VyKTsKLSAgICByZXR1cm4gcHJveHk7CisgICAgICAgIFdl
YldvcmtlckNsaWVudEltcGwqIHByb3h5ID0gbmV3IFdlYldvcmtlckNsaWVudEltcGwod29ya2Vy
LCB3ZWJGcmFtZSk7CisgICAgICAgIHJldHVybiBwcm94eTsgCisgICAgfSAKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKIH0KIAotV2ViV29ya2VyQ2xpZW50SW1wbDo6
V2ViV29ya2VyQ2xpZW50SW1wbChXb3JrZXIqIHdvcmtlcikKLSAgICA6IG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCh3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAsIG1fd29y
a2VyKHdvcmtlcikKLSAgICAsIG1fYXNrZWRUb1Rlcm1pbmF0ZShmYWxzZSkKLSAgICAsIG1fdW5j
b25maXJtZWRNZXNzYWdlQ291bnQoMCkKLSAgICAsIG1fd29ya2VyQ29udGV4dEhhZFBlbmRpbmdB
Y3Rpdml0eShmYWxzZSkKLSAgICAsIG1fd29ya2VyVGhyZWFkSWQoY3VycmVudFRocmVhZCgpKQor
V2ViV29ya2VyQ2xpZW50SW1wbDo6V2ViV29ya2VyQ2xpZW50SW1wbChXb3JrZXIqIHdvcmtlciwg
V2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSkKKyAgICA6IG1fcHJveHkoYWRvcHRQdHIobmV3IFdvcmtl
ck1lc3NhZ2luZ1Byb3h5KHdvcmtlcikpKQorICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
KHdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV93ZWJGcmFtZSh3ZWJG
cmFtZSkgICAgCiAgICAgLCBtX3BhZ2VJbnNwZWN0b3IoMCkKLXsKLX0KIAotV2ViV29ya2VyQ2xp
ZW50SW1wbDo6fldlYldvcmtlckNsaWVudEltcGwoKQogewogfQogCi12b2lkIFdlYldvcmtlckNs
aWVudEltcGw6OnNldFdlYldvcmtlcihXZWJXb3JrZXIqIHdlYldvcmtlcikKLXsKLSAgICBtX3dl
YldvcmtlciA9IHdlYldvcmtlcjsKLX0KLQotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpzdGFy
dFdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNv
dXJjZUNvZGUpCitXZWJXb3JrZXJDbGllbnRJbXBsOjp+V2ViV29ya2VyQ2xpZW50SW1wbCgpCiB7
Ci0gICAgLy8gV29ya2VyLnRlcm1pbmF0ZSgpIGNvdWxkIGJlIGNhbGxlZCBmcm9tIEpTIGJlZm9y
ZSB0aGUgY29udGV4dCBpcyBzdGFydGVkLgotICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzTWFpblRocmVhZCgpKSB7Ci0gICAgICAgIFdlYldv
cmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soCi0g
ICAgICAgICAgICAmc3RhcnRXb3JrZXJDb250ZXh0VGFzaywKLSAgICAgICAgICAgIEFsbG93Q3Jv
c3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICBzY3JpcHRVUkwuc3RyaW5nKCksCi0g
ICAgICAgICAgICB1c2VyQWdlbnQsCi0gICAgICAgICAgICBzb3VyY2VDb2RlKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgc3RhcnRXb3JrZXJDb250ZXh0SW50ZXJuYWwoc2NyaXB0VVJM
LCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUpOwogfQogCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6
OnN0YXJ0V29ya2VyQ29udGV4dEludGVybmFsKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3Qg
V1RGOjpTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZUNvZGUpCit2
b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBz
Y3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNv
ZGUpCiB7Ci0gICAgbV93ZWJXb3JrZXItPnN0YXJ0V29ya2VyQ29udGV4dChzY3JpcHRVUkwsIHVz
ZXJBZ2VudCwgc291cmNlQ29kZSk7Ci0gICAgbV93b3JrZXJDb250ZXh0SGFkUGVuZGluZ0FjdGl2
aXR5ID0gdHJ1ZTsgLy8gV29ya2VyIGluaXRpYWxpemF0aW9uIG1lYW5zIGEgcGVuZGluZyBhY3Rp
dml0eS4KKyAgICBSZWZQdHI8RGVkaWNhdGVkV29ya2VyVGhyZWFkPiB0aHJlYWQgPSBEZWRpY2F0
ZWRXb3JrZXJUaHJlYWQ6OmNyZWF0ZShzY3JpcHRVUkwsIHVzZXJBZ2VudCwgc291cmNlQ29kZSwg
KnRoaXMsICp0aGlzKTsKKyAgICBtX3Byb3h5LT53b3JrZXJUaHJlYWRDcmVhdGVkKHRocmVhZCk7
CisgICAgdGhyZWFkLT5zdGFydCgpOwogfQogCiB2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnRl
cm1pbmF0ZVdvcmtlckNvbnRleHQoKQogewotICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX2Fza2VkVG9UZXJtaW5hdGUgPSB0cnVlOwotICAgIGlmICgh
aXNNYWluVGhyZWFkKCkpIHsKLSAgICAgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9N
YWluVGhyZWFkKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZ0ZXJtaW5hdGVXb3Jr
ZXJDb250ZXh0VGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIG1fd2ViV29ya2VyLT50ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCk7
CisgICAgbV9wcm94eS0+dGVybWluYXRlV29ya2VyQ29udGV4dCgpOwogICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LmdldCgpLCB0aGlzKTsKIH0KIAogdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0
TWVzc2FnZVRvV29ya2VyQ29udGV4dCgKLSAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gbWVzc2FnZSwKLSAgICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBj
aGFubmVscykKKyAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIAor
ICAgIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzKQogewotICAgIC8v
IFdvcmtlci50ZXJtaW5hdGUoKSBjb3VsZCBiZSBjYWxsZWQgZnJvbSBKUyBiZWZvcmUgdGhlIGNv
bnRleHQgaXMgc3RhcnRlZC4KLSAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQotICAgICAgICBy
ZXR1cm47Ci0gICAgKyttX3VuY29uZmlybWVkTWVzc2FnZUNvdW50OwotICAgIGlmICghaXNNYWlu
VGhyZWFkKCkpIHsKLSAgICAgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhy
ZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHRUYXNrLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZS0+dG9XaXJlU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbHMpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSB3ZWJDaGFubmVscyhjaGFu
bmVscy5nZXQoKSA/IGNoYW5uZWxzLT5zaXplKCkgOiAwKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHdlYkNoYW5uZWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYk1lc3NhZ2VQb3J0
Q2hhbm5lbCogd2ViY2hhbm5lbCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKmNoYW5uZWxz
KVtpXS0+Y2hhbm5lbCgpLT53ZWJDaGFubmVsUmVsZWFzZSgpOwotICAgICAgICB3ZWJjaGFubmVs
LT5zZXRDbGllbnQoMCk7Ci0gICAgICAgIHdlYkNoYW5uZWxzW2ldID0gd2ViY2hhbm5lbDsKLSAg
ICB9Ci0gICAgbV93ZWJXb3JrZXItPnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KG1lc3NhZ2Ut
PnRvV2lyZVN0cmluZygpLCB3ZWJDaGFubmVscyk7CisgICAgbV9wcm94eS0+cG9zdE1lc3NhZ2VU
b1dvcmtlckNvbnRleHQodmFsdWUsIHBvcnRzKTsKIH0KIAogYm9vbCBXZWJXb3JrZXJDbGllbnRJ
bXBsOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogewotICAgIHJldHVybiAhbV9hc2tlZFRv
VGVybWluYXRlCi0gICAgICAgICAgICYmIChtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50IHx8IG1f
d29ya2VyQ29udGV4dEhhZFBlbmRpbmdBY3Rpdml0eSk7CisgICAgcmV0dXJuIG1fcHJveHktPmhh
c1BlbmRpbmdBY3Rpdml0eSgpOwogfQogCiB2b2lkIFdlYldvcmtlckNsaWVudEltcGw6Ondvcmtl
ck9iamVjdERlc3Ryb3llZCgpCiB7Ci0gICAgaWYgKGlzTWFpblRocmVhZCgpKSB7Ci0gICAgICAg
IG1fd2ViV29ya2VyLT53b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKLSAgICAgICAgbV93b3JrZXIg
PSAwOwotICAgIH0KLSAgICAvLyBFdmVuIGlmIHRoaXMgaXMgY2FsbGVkIG9uIHRoZSBtYWluIHRo
cmVhZCwgdGhlcmUgY291bGQgYmUgYSBxdWV1ZWQgdGFzayBmb3IKLSAgICAvLyB0aGlzIG9iamVj
dCwgc28gZG9uJ3QgZGVsZXRlIGl0IHJpZ2h0IGF3YXkuCi0gICAgV2ViV29ya2VyQmFzZTo6ZGlz
cGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyT2JqZWN0RGVz
dHJveWVkVGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKKyAgICBt
X3Byb3h5LT53b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGll
bnRJbXBsOjpjb25uZWN0VG9JbnNwZWN0b3IoV29ya2VyQ29udGV4dFByb3h5OjpQYWdlSW5zcGVj
dG9yKiBwYWdlSW5zcGVjdG9yKQorI2lmIEVOQUJMRShJTlNQRUNUT1IpCit2b2lkIFdlYldvcmtl
ckNsaWVudEltcGw6OmNvbm5lY3RUb0luc3BlY3RvcihQYWdlSW5zcGVjdG9yKiBpbnNwZWN0b3Ip
CiB7CisgICAgbV9wcm94eS0+Y29ubmVjdFRvSW5zcGVjdG9yKGluc3BlY3Rvcik7CiAgICAgQVNT
RVJUKCFtX3BhZ2VJbnNwZWN0b3IpOwotICAgIG1fcGFnZUluc3BlY3RvciA9IHBhZ2VJbnNwZWN0
b3I7Ci0gICAgbV93ZWJXb3JrZXItPmF0dGFjaERldlRvb2xzKCk7CisgICAgbV9wYWdlSW5zcGVj
dG9yID0gaW5zcGVjdG9yOwogfQogCiB2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OmRpc2Nvbm5l
Y3RGcm9tSW5zcGVjdG9yKCkKIHsKLSAgICBpZiAoIW1fYXNrZWRUb1Rlcm1pbmF0ZSkKLSAgICAg
ICAgbV93ZWJXb3JrZXItPmRldGFjaERldlRvb2xzKCk7CiAgICAgbV9wYWdlSW5zcGVjdG9yID0g
MDsKKyAgICBtX3Byb3h5LT5kaXNjb25uZWN0RnJvbUluc3BlY3RvcigpOwogfQogCiB2b2lkIFdl
YldvcmtlckNsaWVudEltcGw6OnNlbmRNZXNzYWdlVG9JbnNwZWN0b3IoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQogewotICAgIG1fd2ViV29ya2VyLT5kaXNwYXRjaERldlRvb2xzTWVzc2FnZShtZXNz
YWdlKTsKKyAgICBtX3Byb3h5LT5zZW5kTWVzc2FnZVRvSW5zcGVjdG9yKG1lc3NhZ2UpOwogfQor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCiAKLXZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6
cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2Vi
TWVzc2FnZVBvcnRDaGFubmVsQXJyYXkmIGNoYW5uZWxzKQotewotICAgIE93blB0cjxNZXNzYWdl
UG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMyOwotICAgIGlmIChjaGFubmVscy5zaXplKCkpIHsK
LSAgICAgICAgY2hhbm5lbHMyID0gYWRvcHRQdHIobmV3IE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5
KGNoYW5uZWxzLnNpemUoKSkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoYW5u
ZWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9y
dENoYW5uZWw+IHBsYXRmb3JtX2NoYW5uZWwgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpjcmVhdGUoY2hhbm5lbHNbaV0pOwotICAgICAg
ICAgICAgY2hhbm5lbHNbaV0tPnNldENsaWVudChwbGF0Zm9ybV9jaGFubmVsLmdldCgpKTsKLSAg
ICAgICAgICAgICgqY2hhbm5lbHMyKVtpXSA9IE1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y3JlYXRlKHBs
YXRmb3JtX2NoYW5uZWwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGN1cnJlbnRUaHJl
YWQoKSAhPSBtX3dvcmtlclRocmVhZElkKSB7Ci0gICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0TWVzc2FnZVRvV29ya2VyT2Jq
ZWN0VGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5n
KG1lc3NhZ2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFubmVsczIucmVsZWFzZSgpKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0VGFzayhtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuZ2V0KCksIHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZSwgY2hhbm5lbHMyLnJlbGVhc2UoKSk7Ci19CiAKLXZvaWQgV2ViV29ya2VyQ2xp
ZW50SW1wbDo6cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFdlYlN0cmluZyYgZXJy
b3JNZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHNvdXJjZVVSTCkKK3ZvaWQg
V2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdFRhc2tUb0xvYWRlcihQYXNzT3duUHRyPFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCiB7Ci0gICAgaWYgKGN1cnJlbnRUaHJlYWQoKSAh
PSBtX3dvcmtlclRocmVhZElkKSB7Ci0gICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3RU
YXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcoZXJy
b3JNZXNzYWdlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKHNvdXJjZVVSTCkpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJvb2wgdW5oYW5kbGVkID0gbV93b3JrZXIt
PmRpc3BhdGNoRXZlbnQoRXJyb3JFdmVudDo6Y3JlYXRlKGVycm9yTWVzc2FnZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
b3VyY2VVUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGluZU51bWJlcikpOwotICAgIGlmICh1bmhhbmRsZWQpCi0gICAg
ICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKGVycm9yTWVzc2Fn
ZSwgbGluZU51bWJlciwgc291cmNlVVJMLCAwKTsKKyAgICBtX3Byb3h5LT5wb3N0VGFza1RvTG9h
ZGVyKHRhc2spOwogfQogCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RDb25zb2xlTWVz
c2FnZVRvV29ya2VyT2JqZWN0KGludCBkZXN0aW5hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvdXJjZUlkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbWVzc2FnZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBtZXNzYWdlTGV2ZWwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYg
bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgc291cmNlVVJM
KQordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRl
eHQoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBT
dHJpbmcmIG1vZGUpCiB7Ci0gICAgaWYgKGN1cnJlbnRUaHJlYWQoKSAhPSBtX3dvcmtlclRocmVh
ZElkKSB7Ci0gICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soY3JlYXRl
Q2FsbGJhY2tUYXNrKCZwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2ssCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUlkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZUxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcobWVzc2FnZSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN0cmluZyhzb3VyY2VVUkwpKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZE1lc3NhZ2Uoc3RhdGlj
X2Nhc3Q8TWVzc2FnZVNvdXJjZT4oc291cmNlSWQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNZXNzYWdlVHlwZT4obWVzc2FnZVR5cGUpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNZXNz
YWdlTGV2ZWw+KG1lc3NhZ2VMZXZlbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN0cmluZyhtZXNzYWdlKSwgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKHNvdXJjZVVSTCksIDApOworICAgIG1fcHJv
eHktPnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCh0YXNrLCBtb2RlKTsKIH0KIAotdm9p
ZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChp
bnQgc291cmNlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBtZXNzYWdlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VMZXZlbCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2Vi
U3RyaW5nJiBzb3VyY2VVUkwpCit2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RNZXNzYWdl
VG9Xb3JrZXJPYmplY3QoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQ
YXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBwb3J0cykKIHsKLSAgICBwb3N0Q29u
c29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCgwLCBzb3VyY2VJZCwgbWVzc2FnZVR5cGUsIG1lc3Nh
Z2VMZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKKyAgICBtX3Byb3h5LT5w
b3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KHZhbHVlLCBwb3J0cyk7CiB9CiAKIHZvaWQgV2ViV29y
a2VyQ2xpZW50SW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGJvb2wgaGFzUGVu
ZGluZ0FjdGl2aXR5KQogewotICAgIC8vIHVuY29uZmlybWVkX21lc3NhZ2VfY291bnRfIGNhbiBv
bmx5IGJlIHVwZGF0ZWQgb24gdGhlIHRocmVhZCB3aGVyZSBpdCdzCi0gICAgLy8gYWNjZXNzZWQu
ICBPdGhlcndpc2UgdGhlcmUgYXJlIHJhY2UgY29uZGl0aW9ucyB3aXRoIHY4J3MgZ2FyYmFnZQot
ICAgIC8vIGNvbGxlY3Rpb24uCi0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFz
ayhjcmVhdGVDYWxsYmFja1Rhc2soJmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdFRhc2ss
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQZW5kaW5nQWN0aXZpdHkpKTsK
KyAgICBtX3Byb3h5LT5jb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoaGFzUGVuZGluZ0Fj
dGl2aXR5KTsKIH0KIAogdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpyZXBvcnRQZW5kaW5nQWN0
aXZpdHkoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCiB7Ci0gICAgLy8gU2VlIGFib3ZlIGNvbW1l
bnQgaW4gY29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0LgotICAgIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZyZXBvcnRQZW5kaW5nQWN0
aXZpdHlUYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGVuZGluZ0Fj
dGl2aXR5KSk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6d29ya2VyQ29udGV4dERl
c3Ryb3llZCgpCi17Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3b3JrZXJDb250ZXh0
VGVybWluYXRlZChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCksIHRoaXMpOworICAgIG1f
cHJveHktPnJlcG9ydFBlbmRpbmdBY3Rpdml0eShoYXNQZW5kaW5nQWN0aXZpdHkpOwogfQogCiB2
b2lkIFdlYldvcmtlckNsaWVudEltcGw6OndvcmtlckNvbnRleHRDbG9zZWQoKQogeworICAgIG1f
cHJveHktPndvcmtlckNvbnRleHRDbG9zZWQoKTsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGllbnRJ
bXBsOjpkaXNwYXRjaERldlRvb2xzTWVzc2FnZShjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCit2
b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291
cmNlVVJMKQogewotICAgIGlmIChtX3BhZ2VJbnNwZWN0b3IpCi0gICAgICAgIG1fcGFnZUluc3Bl
Y3Rvci0+ZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlcihtZXNzYWdlKTsKLX0KLQotdm9pZCBXZWJX
b3JrZXJDbGllbnRJbXBsOjpzdGFydFdvcmtlckNvbnRleHRUYXNrKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNjcmlwdFVSTCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIHVzZXJBZ2VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpCi17Ci0gICAgdGhpc1B0ci0+c3Rh
cnRXb3JrZXJDb250ZXh0SW50ZXJuYWwoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHNjcmlwdFVSTCks
IHVzZXJBZ2VudCwgc291cmNlQ29kZSk7CisgICAgbV9wcm94eS0+cG9zdEV4Y2VwdGlvblRvV29y
a2VyT2JqZWN0KGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKIH0KIAotdm9p
ZCBXZWJXb3JrZXJDbGllbnRJbXBsOjp0ZXJtaW5hdGVXb3JrZXJDb250ZXh0VGFzayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlzUHRyKQordm9p
ZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChN
ZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVs
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZVVSTCkKIHsKLSAgICB0aGlzUHRyLT5tX3dlYldvcmtlci0+dGVybWluYXRlV29ya2VyQ29u
dGV4dCgpOworICAgIG1fcHJveHktPnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KHNv
dXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CiB9Ci0K
LXZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHRUYXNr
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0
aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc093blB0cjxNZXNzYWdlUG9ydENo
YW5uZWxBcnJheT4gY2hhbm5lbHMpCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKK3ZvaWQgV2ViV29y
a2VyQ2xpZW50SW1wbDo6cG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQogewotICAgIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5IHdlYkNoYW5uZWxzKGNo
YW5uZWxzLmdldCgpID8gY2hhbm5lbHMtPnNpemUoKSA6IDApOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB3ZWJDaGFubmVscy5zaXplKCk7ICsraSkgewotICAgICAgICB3ZWJDaGFubmVs
c1tpXSA9ICgqY2hhbm5lbHMpW2ldLT5jaGFubmVsKCktPndlYkNoYW5uZWxSZWxlYXNlKCk7Ci0g
ICAgICAgIHdlYkNoYW5uZWxzW2ldLT5zZXRDbGllbnQoMCk7Ci0gICAgfQotCi0gICAgdGhpc1B0
ci0+bV93ZWJXb3JrZXItPnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KG1lc3NhZ2UsIHdlYkNo
YW5uZWxzKTsKKyAgICBtX3Byb3h5LT5wb3N0TWVzc2FnZVRvUGFnZUluc3BlY3RvcihtZXNzYWdl
KTsKIH0KKyNlbmRpZgogCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6Ondvcmtlck9iamVjdERl
c3Ryb3llZFRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJ
bXBsKiB0aGlzUHRyKQordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjp3b3JrZXJDb250ZXh0RGVz
dHJveWVkKCkKIHsKLSAgICBpZiAodGhpc1B0ci0+bV93b3JrZXIpIC8vIENoZWNrIHdlIGhhdmVu
J3QgYWxyZWFkIGNhbGxlZCB0aGlzLgotICAgICAgICB0aGlzUHRyLT5tX3dlYldvcmtlci0+d29y
a2VyT2JqZWN0RGVzdHJveWVkKCk7Ci0gICAgZGVsZXRlIHRoaXNQdHI7CisgICAgbV9wcm94eS0+
d29ya2VyQ29udGV4dERlc3Ryb3llZCgpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCB0
aGlzKTsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2Vy
T2JqZWN0VGFzaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xp
ZW50SW1wbCogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzT3duUHRyPE1lc3Nh
Z2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscykKLXsKLQotICAgIGlmICh0aGlzUHRyLT5tX3dv
cmtlcikgewotICAgICAgICBPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMgPQotICAgICAg
ICAgICAgTWVzc2FnZVBvcnQ6OmVudGFuZ2xlUG9ydHMoKmNvbnRleHQsIGNoYW5uZWxzKTsKLSAg
ICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZE1lc3NhZ2UgPQot
ICAgICAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShtZXNzYWdl
KTsKLSAgICAgICAgdGhpc1B0ci0+bV93b3JrZXItPmRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50
OjpjcmVhdGUocG9ydHMucmVsZWFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkTWVzc2FnZS5yZWxlYXNl
KCkpKTsKLSAgICB9CitXZWJWaWV3KiBXZWJXb3JrZXJDbGllbnRJbXBsOjp2aWV3KCkgY29uc3Qg
Cit7ICAgCisgICAgcmV0dXJuIG1fd2ViRnJhbWUtPnZpZXcoKTsgCiB9CiAKLXZvaWQgV2ViV29y
a2VyQ2xpZW50SW1wbDo6cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0VGFzaygKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwpCitib29sIFdlYldvcmtlckNsaWVudEltcGw6OmFsbG93RmlsZVN5
c3RlbSgpIAogewotICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAgIGlmICh0aGlzUHRyLT5t
X3dvcmtlcikKLSAgICAgICAgaGFuZGxlZCA9IHRoaXNQdHItPm1fd29ya2VyLT5kaXNwYXRjaEV2
ZW50KEVycm9yRXZlbnQ6OmNyZWF0ZShlcnJvck1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNl
VVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIpKTsKLSAgICBpZiAoIWhhbmRsZWQpCi0gICAg
ICAgIHRoaXNQdHItPm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKGVy
cm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMLCAwKTsKKyAgICBXZWJLaXQ6OldlYlZp
ZXdJbXBsKiB3ZWJWaWV3ID0gbV93ZWJGcmFtZS0+dmlld0ltcGwoKTsKKyAgICByZXR1cm4gIXdl
YlZpZXctPnBlcm1pc3Npb25DbGllbnQoKSB8fCB3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCkt
PmFsbG93RmlsZVN5c3RlbShtX3dlYkZyYW1lKTsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGllbnRJ
bXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2soU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgc291cmNlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVzc2FnZVR5cGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVz
c2FnZUxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVO
dW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3ZvaWQgV2ViV29ya2VyQ2xp
ZW50SW1wbDo6b3BlbkZpbGVTeXN0ZW0oV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxv
bmcgc2l6ZSwgYm9vbCBjcmVhdGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MpCiB7Ci0gICAgdGhpc1B0
ci0+bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRNZXNzYWdlKHN0YXRpY19jYXN0PE1lc3Nh
Z2VTb3VyY2U+KHNvdXJjZUlkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWVzc2FnZVR5cGU+KG1lc3NhZ2VUeXBlKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8TWVzc2FnZUxldmVsPihtZXNzYWdlTGV2ZWwpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkws
IDApOworICAgICBtX3dlYkZyYW1lLT5jbGllbnQoKS0+b3BlbkZpbGVTeXN0ZW0obV93ZWJGcmFt
ZSwgdHlwZSwgc2l6ZSwgY3JlYXRlLCBjYWxsYmFja3MpOwogfQogCi12b2lkIFdlYldvcmtlckNs
aWVudEltcGw6OmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdFRhc2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlzUHRyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQorYm9vbCBXZWJXb3JrZXJDbGllbnRJbXBsOjph
bGxvd0RhdGFiYXNlKFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJT
dHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpIAogewotICAg
IHRoaXNQdHItPm1fdW5jb25maXJtZWRNZXNzYWdlQ291bnQtLTsKLSAgICB0aGlzUHRyLT5tX3dv
cmtlckNvbnRleHRIYWRQZW5kaW5nQWN0aXZpdHkgPSBoYXNQZW5kaW5nQWN0aXZpdHk7CisgICAg
IFdlYktpdDo6V2ViVmlld0ltcGwqIHdlYlZpZXcgPSBtX3dlYkZyYW1lLT52aWV3SW1wbCgpOwor
ICAgICByZXR1cm4gIXdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKSB8fCB3ZWJWaWV3LT5wZXJt
aXNzaW9uQ2xpZW50KCktPmFsbG93RGF0YWJhc2UobV93ZWJGcmFtZSwgbmFtZSwgZGlzcGxheU5h
bWUsIGVzdGltYXRlZFNpemUpOwogfQotCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnJlcG9y
dFBlbmRpbmdBY3Rpdml0eVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3Jr
ZXJDbGllbnRJbXBsKiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQorIAordm9pZCBXZWJX
b3JrZXJDbGllbnRJbXBsOjpkaXNwYXRjaERldlRvb2xzTWVzc2FnZShjb25zdCBXZWJTdHJpbmcm
IG1lc3NhZ2UpCiB7Ci0gICAgdGhpc1B0ci0+bV93b3JrZXJDb250ZXh0SGFkUGVuZGluZ0FjdGl2
aXR5ID0gaGFzUGVuZGluZ0FjdGl2aXR5OworICAgIGlmIChtX3BhZ2VJbnNwZWN0b3IpCisgICAg
ICAgIG1fcGFnZUluc3BlY3Rvci0+ZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlcihtZXNzYWdlKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmgKaW5kZXggYzI3MGZmYy4uMTBmMmE5ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuaApAQCAt
MzMsOSArMzMsMTMgQEAKIAogI2lmIEVOQUJMRShXT1JLRVJTKQogCisjaW5jbHVkZSAiV2ViQ29t
bW9uV29ya2VyQmFzZS5oIgogI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJX
ZWJXb3JrZXJDbGllbnQuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0UHJveHkuaCIKKyNpbmNs
dWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgorI2luY2x1ZGUgIldvcmtlck1lc3NhZ2luZ1Byb3h5
LmgiCisjaW5jbHVkZSAiV29ya2VyT2JqZWN0UHJveHkuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CkBAIC00NSwyNSArNDksMjkgQEAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIH0KIAog
bmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
OwordXNpbmcgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOwogY2xhc3MgV2ViV29ya2Vy
OworY2xhc3MgV2ViRnJhbWVJbXBsOwogCi0vLyBUaGUgcHVycG9zZSBvZiB0aGlzIGNsYXNzIGlz
IHRvIHByb3ZpZGUgYSBXb3JrZXJDb250ZXh0UHJveHkKLS8vIGltcGxlbWVudGF0aW9uIHRoYXQg
d2UgY2FuIGdpdmUgdG8gV2ViS2l0LiAgSW50ZXJuYWxseSwgaXQgY29udmVydHMgdGhlCi0vLyBk
YXRhIHR5cGVzIHRvIENocm9tZSBjb21wYXRpYmxlIG9uZXMgc28gdGhhdCByZW5kZXJlciBjb2Rl
IGNhbiB1c2UgaXQgb3ZlcgotLy8gSVBDLgorLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBjaHJvbWl1
bSBpbXBsZW1lbnRhdGlvbiBmb3IgV29ya2VyQ29udGV4dFByb3h0LCBXb3JrZXJPYmplY3RQcm94
eSBhbWQgV29ya2VyTG9hZGVyUHJveHkKKy8vIGZvciBpbi1wcm9jIGRlZGljYXRlZCB3b3JrZXJz
LiBJdCBhbHNvIGFjdHMgYXMgYSBicmlkZ2UgZm9yIHdvcmtlcnMgdG8gY2hyb21pdW0gaW1wbGVt
ZW50YXRpb24gb2YgZmlsZSBzeXN0ZW1zLAorLy8gZGF0YWJhc2VzIGFuZCBvdGhlciByZWxhdGVk
IGZ1bmN0aW9uYWxpdHkuCisvLworLy8gSW4gZXNzZW5jZSwgdGhpcyBjbGFzcyB3cmFwcyBXb3Jr
ZXJNZXNzYWdpbmdQcm94eS4KIGNsYXNzIFdlYldvcmtlckNsaWVudEltcGwgOiBwdWJsaWMgV2Vi
Q29yZTo6V29ya2VyQ29udGV4dFByb3h5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVi
bGljIFdlYldvcmtlckNsaWVudCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGlj
IFdlYkNvcmU6Oldvcmtlck9iamVjdFByb3h5CisgICAgICAgICAgICAgICAgICAgICAgICAgICwg
cHVibGljIFdlYkNvbW1vbldvcmtlckJhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLCBw
dWJsaWMgV2ViQ29tbW9uV29ya2VyQ2xpZW50QmFzZSB7CiBwdWJsaWM6Ci0gICAgV2ViV29ya2Vy
Q2xpZW50SW1wbChXZWJDb3JlOjpXb3JrZXIqKTsKKyAgICB2aXJ0dWFsIH5XZWJXb3JrZXJDbGll
bnRJbXBsKCk7CiAKICAgICAvLyBXZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHkgRmFjdG9yeS4K
ICAgICBzdGF0aWMgV2ViQ29yZTo6V29ya2VyQ29udGV4dFByb3h5KiBjcmVhdGVXb3JrZXJDb250
ZXh0UHJveHkoV2ViQ29yZTo6V29ya2VyKik7Ci0gICAgdm9pZCBzZXRXZWJXb3JrZXIoV2ViV29y
a2VyKik7CiAKICAgICAvLyBXZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHkgbWV0aG9kczoKICAg
ICAvLyBUaGVzZSBhcmUgY2FsbGVkIG9uIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSB3b3Jr
ZXIuICBJbiB0aGUgcmVuZGVyZXIKLSAgICAvLyBwcm9jZXNzLCB0aGlzIHdpbGwgYmUgdGhlIG1h
aW4gV2ViS2l0IHRocmVhZC4gIEluIHRoZSB3b3JrZXIgcHJvY2VzcywgdGhpcwotICAgIC8vIHdp
bGwgYmUgdGhlIHRocmVhZCBvZiB0aGUgZXhlY3V0aW5nIHdvcmtlciAobm90IHRoZSBtYWluIFdl
YktpdCB0aHJlYWQpLgorICAgIC8vIHByb2Nlc3MsIHRoaXMgd2lsbCBiZSB0aGUgbWFpbiBXZWJL
aXQgdGhyZWFkLgogICAgIHZpcnR1YWwgdm9pZCBzdGFydFdvcmtlckNvbnRleHQoY29uc3QgV2Vi
Q29yZTo6S1VSTCYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBX
VEY6OlN0cmluZyYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBX
VEY6OlN0cmluZyYpOwpAQCAtNzQsMTAzICs4Miw0NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJP
YmplY3REZXN0cm95ZWQoKTsKIAorI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgdmlydHVhbCB2
b2lkIGNvbm5lY3RUb0luc3BlY3RvcihXb3JrZXJDb250ZXh0UHJveHk6OlBhZ2VJbnNwZWN0b3Iq
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdEZyb21JbnNwZWN0b3IoKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb0luc3BlY3Rvcihjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3IoY29uc3QgU3RyaW5nJik7CisjZW5k
aWYKKyAgICAvLyBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSBtZXRob2RzOgorICAgIHZpcnR1
YWwgdm9pZCBwb3N0VGFza1RvTG9hZGVyKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzaz4pOworICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRl
eHQoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiwgY29uc3QgU3RyaW5n
JiBtb2RlKTsKIAotICAgIC8vIFdlYldvcmtlckNsaWVudCBtZXRob2RzOgotICAgIC8vIFRoZXNl
IGFyZSBjYWxsZWQgb24gdGhlIG1haW4gV2ViS2l0IHRocmVhZC4KLSAgICB2aXJ0dWFsIHZvaWQg
cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBXZWJTdHJpbmcmLCBjb25zdCBXZWJNZXNz
YWdlUG9ydENoYW5uZWxBcnJheSYpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0RXhjZXB0aW9uVG9X
b3JrZXJPYmplY3QoY29uc3QgV2ViU3RyaW5nJiwgaW50LCBjb25zdCBXZWJTdHJpbmcmKTsKKyAg
ICAvLyBXZWJDb3JlOjpXb3JrZXJPYmplY3RQcm94eSBtZXRob2RzOgorICAgIHZpcnR1YWwgdm9p
ZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiwgUGFzc093blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxBcnJh
eT4pOworICAgIHZpcnR1YWwgdm9pZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCk7CiAKLSAgICAvLyBGSVhNRTogdGhlIGJlbG93IGlzIGZvciBjb21wYXRpYmlsaXR5IG9u
bHkgYW5kIHNob3VsZCBiZQotICAgIC8vIHJlbW92ZWQgb25jZSBDaHJvbWl1bSBpcyB1cGRhdGVk
IHRvIHJlbW92ZSBtZXNzYWdlCi0gICAgLy8gZGVzdGluYXRpb24gcGFyYW1ldGVyIDxodHRwOi8v
d2Via2l0Lm9yZy9iLzM3MTU1Pi4KLSAgICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdl
VG9Xb3JrZXJPYmplY3QoaW50LCBpbnQsIGludCwgaW50LCBjb25zdCBXZWJTdHJpbmcmLCBpbnQs
IGNvbnN0IFdlYlN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VU
b1dvcmtlck9iamVjdChpbnQsIGludCwgaW50LCBjb25zdCBXZWJTdHJpbmcmLCBpbnQsIGNvbnN0
IFdlYlN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtl
ck9iamVjdChXZWJDb3JlOjpNZXNzYWdlU291cmNlLCBXZWJDb3JlOjpNZXNzYWdlVHlwZSwgV2Vi
Q29yZTo6TWVzc2FnZUxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbmZpcm1NZXNzYWdlRnJv
bVdvcmtlck9iamVjdChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2
aXR5KGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkKCk7CiAgICAg
dmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWQoKTsKLSAgICB2aXJ0dWFsIFdlYldv
cmtlciogY3JlYXRlV29ya2VyKFdlYldvcmtlckNsaWVudCopIHsgcmV0dXJuIDA7IH0KLSAgICB2
aXJ0dWFsIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlciogbm90aWZpY2F0aW9uUHJlc2VudGVyKCkK
LSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBOb3RpZmljYXRpb25zIG5vdCB5ZXQgc3VwcG9ydGVk
IGluIHdvcmtlcnMuCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICB2aXJ0dWFsIFdlYkFw
cGxpY2F0aW9uQ2FjaGVIb3N0KiBjcmVhdGVBcHBsaWNhdGlvbkNhY2hlSG9zdChXZWJBcHBsaWNh
dGlvbkNhY2hlSG9zdENsaWVudCopIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGJvb2wgYWxs
b3dEYXRhYmFzZShXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dGaWxlU3lzdGVtKCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisKKyAgICAvLyBX
ZWJXb3JrZXJDbGllbnRCYXNlIG1ldGhvZHMuCisgICAgdmlydHVhbCBib29sIGFsbG93RGF0YWJh
c2UoV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CisgICAgdmlydHVhbCBib29s
IGFsbG93RmlsZVN5c3RlbSgpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuRmlsZVN5c3RlbShXZWJG
aWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERldlRvb2xzTWVzc2FnZShjb25zdCBXZWJTdHJpbmcmKTsKIAot
cHJpdmF0ZToKLSAgICB2aXJ0dWFsIH5XZWJXb3JrZXJDbGllbnRJbXBsKCk7CisgICAgdmlydHVh
bCBXZWJDb21tb25Xb3JrZXJDbGllbnRCYXNlKiBjb21tb25DbGllbnRCYXNlKCkgeyByZXR1cm4g
dGhpczsgfQorICAgIHZpcnR1YWwgV2ViVmlldyogdmlldygpIGNvbnN0OwogCi0gICAgLy8gTWV0
aG9kcyB1c2VkIHRvIHN1cHBvcnQgV2ViV29ya2VyQ2xpZW50SW1wbCBiZWluZyBjb25zdHJ1Y3Rl
ZCBvbiB3b3JrZXIKLSAgICAvLyB0aHJlYWRzLgotICAgIC8vIFRoZXNlIHRhc2tzIGFyZSBkaXNw
YXRjaGVkIG9uIHRoZSBXZWJLaXQgdGhyZWFkLgotICAgIHN0YXRpYyB2b2lkIHN0YXJ0V29ya2Vy
Q29udGV4dFRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwq
IHRoaXNQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBX
VEY6OlN0cmluZyYgc2NyaXB0VVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHVzZXJBZ2VudCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VDb2RlKTsKLSAgICBz
dGF0aWMgdm9pZCB0ZXJtaW5hdGVXb3JrZXJDb250ZXh0VGFzayhXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIpOwotICAgIHN0YXRpYyB2b2lk
IHBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0VGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc093blB0
cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpOwotICAgIHN0YXRp
YyB2b2lkIHdvcmtlck9iamVjdERlc3Ryb3llZFRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIpOwotCi0gICAgLy8gVGhlc2UgdGFza3Mg
YXJlIGRpc3BhdGNoZWQgb24gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHdvcmtlciAoaS5l
LgotICAgIC8vIG1haW4gV2ViS2l0IHRocmVhZCBpbiByZW5kZXJlciBwcm9jZXNzLCBhbmQgdGhl
IHdvcmtlciB0aHJlYWQgaW4gdGhlCi0gICAgLy8gd29ya2VyIHByb2Nlc3MpLgotICAgIHN0YXRp
YyB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3RUYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2Fn
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzT3du
UHRyPFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscyk7Ci0gICAgc3Rh
dGljIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0VGFzayhXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6U3RyaW5n
JiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYgc291cmNlVVJMKTsKLSAgICBzdGF0aWMgdm9p
ZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2soV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvdXJj
ZUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgbWVzc2FnZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBtZXNzYWdlTGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCk7Ci0gICAgc3RhdGljIHZv
aWQgY29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0VGFzayhXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzUGVuZGlu
Z0FjdGl2aXR5KTsKLSAgICBzdGF0aWMgdm9pZCByZXBvcnRQZW5kaW5nQWN0aXZpdHlUYXNrKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlzUHRyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNQZW5kaW5n
QWN0aXZpdHkpOwotCi0gICAgdm9pZCBzdGFydFdvcmtlckNvbnRleHRJbnRlcm5hbChjb25zdCBX
ZWJDb3JlOjpLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFdURjo6U3RyaW5nJiB1c2VyQWdlbnQsIGNv
bnN0IFdURjo6U3RyaW5nJiBzb3VyY2VDb2RlKTsKK3ByaXZhdGU6CisgICAgV2ViV29ya2VyQ2xp
ZW50SW1wbChXZWJDb3JlOjpXb3JrZXIqLCBXZWJGcmFtZUltcGwqKTsKIAorICAgIE93blB0cjxX
ZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eT4gbV9wcm94eTsKICAgICAvLyBHdWFyZCBhZ2Fp
bnN0IGNvbnRleHQgZnJvbSBiZWluZyBkZXN0cm95ZWQgYmVmb3JlIGEgd29ya2VyIGV4aXRzLgot
ICAgIFJlZlB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ7Ci0KLSAgICBXZWJDb3JlOjpXb3JrZXIqIG1fd29ya2VyOwotICAgIFdlYldv
cmtlciogbV93ZWJXb3JrZXI7Ci0gICAgYm9vbCBtX2Fza2VkVG9UZXJtaW5hdGU7Ci0gICAgdW5z
aWduZWQgbV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudDsKLSAgICBib29sIG1fd29ya2VyQ29udGV4
dEhhZFBlbmRpbmdBY3Rpdml0eTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya2VyVGhyZWFk
SWQ7Ci0gICAgV29ya2VyQ29udGV4dFByb3h5OjpQYWdlSW5zcGVjdG9yKiBtX3BhZ2VJbnNwZWN0
b3I7CisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dDsKKyAgICBXZWJGcmFtZUltcGwqIG1fd2ViRnJhbWU7CisgICAgV2ViQ29yZTo6V29y
a2VyQ29udGV4dFByb3h5OjpQYWdlSW5zcGVjdG9yKiBtX3BhZ2VJbnNwZWN0b3I7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJXb3JrZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldv
cmtlckltcGwuY3BwCmluZGV4IDZjOWY0NWMuLjQ2MWVhNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwuY3BwCkBAIC03NCw2ICs3NCwxMSBAQCBXZWJXb3Jr
ZXJJbXBsOjp+V2ViV29ya2VySW1wbCgpCiB7CiB9CiAKK1dlYkNvbW1vbldvcmtlckNsaWVudEJh
c2UqIFdlYldvcmtlckltcGw6OmNvbW1vbkNsaWVudEJhc2UoKQoreworICAgIHJldHVybiBtX2Ns
aWVudDsKK30KKwogV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBXZWJXb3JrZXJJbXBsOjpjb21tb25D
bGllbnQoKQogewogICAgIHJldHVybiBtX2NsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYldvcmtlckltcGwuaAppbmRleCA3OWM5YzU0Li4zOWEzMjI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VySW1wbC5oCkBAIC02NSw2ICs2NSw5IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFdlYldvcmtlckNsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGll
bnQ7IH0KICAgICB2aXJ0dWFsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KCk7
CiAKKyAgICAvLyBXZWJDb21tb25Xb3JrZXJCYXNlIG1ldGhvZHM6CisgICAgdmlydHVhbCBXZWJD
b21tb25Xb3JrZXJDbGllbnRCYXNlKiBjb21tb25DbGllbnRCYXNlKCk7CisKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB+V2ViV29ya2VySW1wbCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3Bw
CmluZGV4IDE3Yzc3NTQuLjNmZDAxNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCkBA
IC0xNTYsNyArMTU2LDcgQEAgdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpz
dG9wKCkKICAgICB9CiB9CiAKLXZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6
cG9zdE9wZW5GaWxlU3lzdGVtVG9NYWluVGhyZWFkKFdlYkNvbW1vbldvcmtlckNsaWVudCogY29t
bW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29s
IGNyZWF0ZSwgY29uc3QgU3RyaW5nJiBtb2RlKQordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlOjpwb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQoV2ViQ29tbW9uV29ya2Vy
Q2xpZW50QmFzZSogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcg
bG9uZyBzaXplLCBib29sIGNyZWF0ZSwgY29uc3QgU3RyaW5nJiBtb2RlKQogewogICAgIGRpc3Bh
dGNoVGFza1RvTWFpblRocmVhZCgKICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZvcGVuRmls
ZVN5c3RlbU9uTWFpblRocmVhZCwKQEAgLTI1MSw3ICsyNTEsNyBAQCB2b2lkIFdvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RSZWFkRGlyZWN0b3J5VG9NYWluVGhyZWFkKFdlYkZp
bGVTeXN0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vz
cyh0aGlzKSwgbW9kZSkpOwogfQogCi12b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2U6Om9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBX
ZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0
eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2UqIGJyaWRnZSwgY29uc3QgU3RyaW5nJiBtb2RlKQordm9pZCBXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlOjpvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29ya2VyQ2xpZW50QmFzZSogY29tbW9uQ2xpZW50LCBX
ZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSogYnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUp
CiB7CiAgICAgaWYgKCFjb21tb25DbGllbnQpCiAgICAgICAgIGJyaWRnZS0+ZGlkRmFpbE9uTWFp
blRocmVhZChXZWJGaWxlRXJyb3JBYm9ydCwgbW9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmggYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgK
aW5kZXggYmI0ODQ3OS4uMjdiODE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaApAQCAtNTIs
NyArNTIsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEFzeW5jRmlsZVN5c3RlbTsKIGNs
YXNzIE1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzOwogY2xhc3MgVGhyZWFkYWJsZUNhbGxi
YWNrc0JyaWRnZVdyYXBwZXI7Ci1jbGFzcyBXZWJDb21tb25Xb3JrZXJDbGllbnQ7CitjbGFzcyBX
ZWJDb21tb25Xb3JrZXJDbGllbnRCYXNlOwogY2xhc3MgV2ViRmlsZVN5c3RlbUNhbGxiYWNrczsK
IHN0cnVjdCBXZWJGaWxlSW5mbzsKIHN0cnVjdCBXZWJGaWxlU3lzdGVtRW50cnk7CkBAIC04Nyw3
ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBNZXRob2RzIHRoYXQgY3JlYXRlIGFu
IGluc3RhbmNlIGFuZCBwb3N0IGFuIGluaXRpYWwgcmVxdWVzdCB0YXNrIHRvIHRoZSBtYWluIHRo
cmVhZC4gVGhleSBtdXN0IGJlIGNhbGxlZCBvbiB0aGUgd29ya2VyIHRocmVhZC4KLSAgICB2b2lk
IHBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChXZWJDb21tb25Xb3JrZXJDbGllbnQqLCBX
ZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIGNvbnN0IFN0
cmluZyYgbW9kZSk7CisgICAgdm9pZCBwb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQoV2Vi
Q29tbW9uV29ya2VyQ2xpZW50QmFzZSosIFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9uZyBz
aXplLCBib29sIGNyZWF0ZSwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICB2b2lkIHBvc3RNb3Zl
VG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBzcmNQYXRo
LCBjb25zdCBXZWJDb3JlOjpLVVJMJiBkZXN0UGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAg
ICB2b2lkIHBvc3RDb3B5VG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3Jl
OjpLVVJMJiBzcmNQYXRoLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBkZXN0UGF0aCwgY29uc3QgU3Ry
aW5nJiBtb2RlKTsKICAgICB2b2lkIHBvc3RSZW1vdmVUb01haW5UaHJlYWQoV2ViRmlsZVN5c3Rl
bSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7CkBAIC0x
MTAsNyArMTEwLDcgQEAgcHJpdmF0ZToKICAgICBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqKTsKIAogICAgIC8vIE1ldGhvZHMgdGhh
dCBhcmUgdG8gYmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICBzdGF0aWMgdm9pZCBv
cGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiwgV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25n
IHNpemUsIGJvb2wgY3JlYXRlLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29u
c3QgU3RyaW5nJiBtb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbU9uTWFpblRo
cmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29ya2VyQ2xp
ZW50QmFzZSosIFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0
ZSwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7
CiAgICAgc3RhdGljIHZvaWQgbW92ZU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHNyY1BhdGgs
IGNvbnN0IFdlYkNvcmU6OktVUkwmIGRlc3RQYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICBzdGF0aWMgdm9pZCBjb3B5T25NYWlu
VGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiwg
Y29uc3QgV2ViQ29yZTo6S1VSTCYgc3JjUGF0aCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZGVzdFBh
dGgsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1vZGUp
OwogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgs
IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1vZGUpOwo=
</data>
<flag name="review"
          id="99673"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103993</attachid>
            <date>2011-08-15 19:10:20 -0700</date>
            <delta_ts>2011-08-16 13:45:01 -0700</delta_ts>
            <desc>CR feedback.</desc>
            <filename>61016.patch</filename>
            <type>text/plain</type>
            <size>54675</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNTI3OTQ1NS4uYTc5ODNkOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MiBAQAorMjAxMS0wOC0xNSAgRG1pdHJ5IExv
bW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MTAxNgorICAgICAgICBbV2ViV29ya2Vyc11bQ2hyb21pdW1d
IFVzZSB2OCBJc29sYXRlcyBmb3IgaW4tcHJvY2VzcyBpbXBsZW1lbnRhdGlvbiBvZiBXZWJXb3Jr
ZXJzLgorICAgICAgICBUaGlzIGFkZHMgYW4gaW1wbGVtZW50YXRpb24gb2YgaW4tcHJvY2VzcyBk
ZWRpY2F0ZWQgd29ya2VycyB0byBjaHJvbWl1bSBwb3J0LgorICAgICAgICBUaGUgY3J1eCBvZiB0
aGUgbWF0dGVyIGlzIHRoZSByZWltcGxlbWVudGF0aW9uIG9mIFdlYldvcmtlckNsaWVudEltcGwu
IFdlYldvcmtlckNsaWVudEltcGwgbm93IAorICAgICAgICBpbXBsZW1lbnRzIGFsbCB0aHJlZSBv
ZiBXb3JrZXJ7TG9hZGVyLENvbnRleHQsT2JqZWN0fVByb3hpZXMgYW5kIGRlbGVnYXRlcyB0aGUg
aW1wbGVtZW50YXRpb24gdG8gCisgICAgICAgIFdlYktpdCdzIHN0YW5kYXJkIFdvcmtlck1lc3Nh
Z2luZ1Byb3h5LgorICAgICAgICBGb3Igbm93LCB3ZSBoYXZlIDMgaW1wbGVtZW50YXRpb25zIG9m
IHdvcmtlcnMgaW4gY2hyb21pdW0gV2ViS2l0OgorICAgICAgICAgIC0gSW4tcHJvY2VzcyBkZWRp
Y2F0ZWQgd29ya2VycyAodGhpcyBjaGVja2luKQorICAgICAgICAgIC0gSW50ZXItcHJvY2VzcyBz
aGFyZWQgd29ya2VycworICAgICAgICAgIC0gSW50ZXItcHJvY2VzcyBkZWRpY2F0ZWQgd29ya2Vy
cyAoZGVmdW5jdCBhZnRlciB0aGlzIGNoZWNraW4pCisgICAgICAgIFRoaXMgcGF0Y2ggZXh0cmFj
dHMgc29tZSBuZXcgY29tbW9uIGludGVyZmFjZXMgKFdlYkNvbW1vbldvcmtlckJhc2UgYW5kIFdl
YkNvbW1vbldvcmtlckNsaWVudCkgZm9yIHRoZXNlIAorICAgICAgICB0aHJlZSBpbXBsZW1lbnRh
dGlvbnMuIAorICAgICAgICBSZW1vdmluZyB0aGUgcmVtYWluaW5ncyBvZiBpbnRlci1wcm9jZXNz
IGRlZGljYXRlZCB3b3JrZXJzIC1yZWxhdGVkIGNsYXNzZXMgaXMgbGVmdCBmb3IgYSBzZXBhcmF0
ZSBwYXRjaCAKKyAgICAgICAgKGl0IHdpbGwgcmVxdWlyZSBjb29yZGluYXRlZCBjaGFuZ2VzIG9u
IGNocm9tdWl1bSBzaWRlKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHB1YmxpYy9XZWJDb21tb25Xb3JrZXJDbGllbnQuaDoKKyAgICAgICAgKiBz
cmMvRGF0YWJhc2VPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkFsbG93RGF0YWJhc2VN
YWluVGhyZWFkQnJpZGdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpBbGxvd0RhdGFiYXNl
TWFpblRocmVhZEJyaWRnZTo6QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZTo6YWxsb3dEYXRhYmFzZVRh
c2spOgorICAgICAgICAoV2ViS2l0OjphbGxvd0RhdGFiYXNlRm9yV29ya2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKToKKyAgICAg
ICAgKiBzcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
b3BlbkZpbGVTeXN0ZW1IZWxwZXIpOgorICAgICAgICAqIHNyYy9XZWJTaGFyZWRXb3JrZXJJbXBs
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6Om5ld0NvbW1vbkNsaWVu
dCk6CisgICAgICAgICogc3JjL1dlYldvcmtlckJhc2UuaDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
V29ya2VyQmFzZTo6dmlldyk6CisgICAgICAgICogc3JjL1dlYldvcmtlckNsaWVudEltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpjcmVhdGVXb3JrZXJDb250
ZXh0UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpzdGFydFdv
cmtlckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjp0ZXJt
aW5hdGVXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1w
bDo6cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3Jr
ZXJDbGllbnRJbXBsOjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJX
b3JrZXJDbGllbnRJbXBsOjp3b3JrZXJPYmplY3REZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpjb25uZWN0VG9JbnNwZWN0b3IpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpkaXNjb25uZWN0RnJvbUluc3BlY3Rvcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OnNlbmRNZXNzYWdlVG9JbnNwZWN0b3Ip
OgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0TWVzc2FnZVRvUGFn
ZUluc3BlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OnBvc3RU
YXNrVG9Mb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0
VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJD
bGllbnRJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViV29ya2VyQ2xpZW50SW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6cmVwb3J0UGVuZGluZ0FjdGl2aXR5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6d29ya2VyQ29udGV4dENs
b3NlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OnBvc3RFeGNlcHRp
b25Ub1dvcmtlck9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6
OnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
V29ya2VyQ2xpZW50SW1wbDo6d29ya2VyQ29udGV4dERlc3Ryb3llZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYldvcmtlckNsaWVudEltcGw6OmFsbG93RmlsZVN5c3RlbSk6CisgICAgICAgIChXZWJL
aXQ6OldlYldvcmtlckNsaWVudEltcGw6Om9wZW5GaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYktp
dDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6YWxsb3dEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYldvcmtlckNsaWVudEltcGw6OmRpc3BhdGNoRGV2VG9vbHNNZXNzYWdlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6dmlldyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YldvcmtlckNsaWVudEltcGw6OldlYldvcmtlckNsaWVudEltcGwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJXb3JrZXJDbGllbnRJbXBsOjp+V2ViV29ya2VyQ2xpZW50SW1wbCk6CisgICAgICAgICog
c3JjL1dlYldvcmtlckNsaWVudEltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xp
ZW50SW1wbDo6bmV3Q29tbW9uQ2xpZW50KToKKyAgICAgICAgKiBzcmMvV2ViV29ya2VySW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckltcGw6Om5ld0NvbW1vbkNsaWVudCk6Cisg
ICAgICAgICogc3JjL1dlYldvcmtlckltcGwuaDoKKyAgICAgICAgKiBzcmMvV29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZCk6CisgICAg
ICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6Om9wZW5GaWxlU3lz
dGVtT25NYWluVGhyZWFkKToKKyAgICAgICAgKiBzcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZS5oOgorCiAyMDExLTA4LTE1ICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gQWRkIFdlYkZyYW1lQ2xpZW50OjpkaWRBZG9wdFVS
TExvYWRlcigpIG5vdGlmaWNhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViQ29tbW9uV29ya2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJDb21tb25Xb3JrZXJDbGllbnQuaAppbmRleCAzNTJhMmMwLi40OTQ0YWY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21tb25Xb3JrZXJD
bGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21tb25Xb3Jr
ZXJDbGllbnQuaApAQCAtNDQsMTIgKzQ0LDI1IEBAIGNsYXNzIFdlYlN0cmluZzsKIGNsYXNzIFdl
YldvcmtlcjsKIGNsYXNzIFdlYldvcmtlckNsaWVudDsKIAorY2xhc3MgTmV3V2ViQ29tbW9uV29y
a2VyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRo
cmVhZCBiZWZvcmUgb3BlbmluZyBhIHdlYiBkYXRhYmFzZS4KKyAgICB2aXJ0dWFsIGJvb2wgYWxs
b3dEYXRhYmFzZShXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSA9IDA7CisKKyAg
ICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVhZCBiZWZvcmUgb3BlbmluZyBhIGZp
bGUgc3lzdGVtLgorICAgIHZpcnR1YWwgYm9vbCBhbGxvd0ZpbGVTeXN0ZW0oKSA9IDA7CisKKyAg
ICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVhZCBiZWZvcmUgb3BlbmluZyBhIGZp
bGUgc3lzdGVtLgorICAgIHZpcnR1YWwgdm9pZCBvcGVuRmlsZVN5c3RlbShXZWJGaWxlU3lzdGVt
OjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFj
a3MqKSA9IDA7Cit9OworCisKIC8vIFByb3ZpZGVzIGFuIGludGVyZmFjZSBiYWNrIHRvIHRoZSBp
bi1wYWdlIHNjcmlwdCBvYmplY3QgZm9yIGEgd29ya2VyLgogLy8gVGhpcyBpbnRlcmZhY2UgY29u
dGFpbnMgY29tbW9uIEFQSXMgdXNlZCBieSBib3RoIHNoYXJlZCBhbmQgZGVkaWNhdGVkCiAvLyB3
b3JrZXJzLgogLy8gQWxsIGZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGJhY2sg
b24gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQKIC8vIHRoZSBXb3JrZXIgb2JqZWN0LCB1bmxlc3Mg
bm90ZWQuCi1jbGFzcyBXZWJDb21tb25Xb3JrZXJDbGllbnQgeworY2xhc3MgV2ViQ29tbW9uV29y
a2VyQ2xpZW50IDogcHVibGljIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCB7CiBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdCgKICAgICAgICAgY29u
c3QgV2ViU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGxpbmVOdW1iZXIsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRhYmFzZU9ic2VydmVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCmluZGV4IDUxYzQ4ZDguLjI2
ZjVkMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2Jz
ZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2
ZXIuY3BwCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSAiV2ViUGVybWlzc2lvbkNsaWVudC5o
IgogI2luY2x1ZGUgIldlYlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiV2ViVmlld0ltcGwu
aCIKLSNpbmNsdWRlICJXZWJXb3JrZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViV29ya2VyQmFzZS5o
IgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94
eS5oIgogI2luY2x1ZGUgIldvcmtlclNjcmlwdENvbnRyb2xsZXIuaCIKQEAgLTY0LDcgKzY0LDcg
QEAgc3RhdGljIGNvbnN0IGNoYXIgYWxsb3dEYXRhYmFzZU1vZGVbXSA9ICJhbGxvd0RhdGFiYXNl
TW9kZSI7CiAvLyBjYWxsIGJhY2sgdG8gdGhlIHdvcmtlciBjb250ZXh0LgogY2xhc3MgQWxsb3dE
YXRhYmFzZU1haW5UaHJlYWRCcmlkZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWxs
b3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZT4gY3JlYXRlKFdlYkNvcmU6Oldvcmtl
ckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUs
IFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSogZnJhbWUsIGNv
bnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgZGlzcGxheU5hbWUsIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBbGxvd0Rh
dGFiYXNlTWFpblRocmVhZEJyaWRnZT4gY3JlYXRlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5
KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUsIE5ld1dlYkNvbW1v
bldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdURjo6
U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxv
bmcgZXN0aW1hdGVkU2l6ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWxs
b3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2Uod29ya2VyTG9hZGVyUHJveHksIG1vZGUsIGNvbW1v
bkNsaWVudCwgZnJhbWUsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7CiAgICAg
fQpAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEFsbG93
RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3Jr
ZXJMb2FkZXJQcm94eSwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNs
aWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBu
YW1lLCBjb25zdCBXVEY6OlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1h
dGVkU2l6ZSkKKyAgICBBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZShXZWJDb3JlOjpXb3Jr
ZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2Rl
LCBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUqIGZyYW1l
LCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCiAgICAgICAgIDogbV93b3JrZXJMb2FkZXJQ
cm94eSh3b3JrZXJMb2FkZXJQcm94eSkKICAgICAgICAgLCBtX21vZGUobW9kZSkKICAgICB7CkBA
IC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJDb3JlOjpBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgYWxsb3dEYXRhYmFzZVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZy
YW1lKiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcgbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxBbGxvd0Rh
dGFiYXNlTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlKQorICAgIHN0YXRpYyB2b2lkIGFsbG93RGF0
YWJhc2VUYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE5ld1dl
YkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0
IFdURjo6U3RyaW5nIG5hbWUsIGNvbnN0IFdURjo6U3RyaW5nIGRpc3BsYXlOYW1lLCB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRC
cmlkZ2U+IGJyaWRnZSkKICAgICB7CiAgICAgICAgIGlmIChjb21tb25DbGllbnQpCiAgICAgICAg
ICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChjb21tb25DbGllbnQtPmFsbG93RGF0YWJhc2Uo
ZnJhbWUsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKSk7CkBAIC0xMjIsNyArMTIy
LDcgQEAgcHJpdmF0ZToKICAgICBXVEY6OlN0cmluZyBtX21vZGU7CiB9OwogCi1ib29sIGFsbG93
RGF0YWJhc2VGb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdl
YkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCitib29sIGFsbG93RGF0YWJh
c2VGb3JXb3JrZXIoTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZy
YW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRpc3Bs
YXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCiB7CiAgICAgV2ViQ29yZTo6V29y
a2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdlYkNvcmU6OldvcmtlclNjcmlwdENv
bnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAgV2ViQ29yZTo6V29ya2VyQ29u
dGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKQEAgLTE2
NSw4ICsxNjUsOCBAQCBib29sIERhdGFiYXNlT2JzZXJ2ZXI6OmNhbkVzdGFibGlzaERhdGFiYXNl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dAogI2lmIEVOQUJMRShXT1JLRVJT
KQogICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29y
a2VyQ29udGV4dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgICAgICBXb3JrZXJMb2Fk
ZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndv
cmtlckxvYWRlclByb3h5KCk7Ci0gICAgICAgIFdlYldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0
YXRpY19jYXN0PFdlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94eSk7Ci0gICAgICAgIHJl
dHVybiBhbGxvd0RhdGFiYXNlRm9yV29ya2VyKHdlYldvcmtlci0+Y29tbW9uQ2xpZW50KCksIHdl
Yldvcmtlci0+d2ViVmlldygpLT5tYWluRnJhbWUoKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGlt
YXRlZFNpemUpOworICAgICAgICBOZXdXZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNf
Y2FzdDxOZXdXZWJXb3JrZXJCYXNlKj4od29ya2VyTG9hZGVyUHJveHkpOworICAgICAgICByZXR1
cm4gYWxsb3dEYXRhYmFzZUZvcldvcmtlcih3ZWJXb3JrZXItPm5ld0NvbW1vbkNsaWVudCgpLCB3
ZWJXb3JrZXItPnZpZXcoKS0+bWFpbkZyYW1lKCksIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0
ZWRTaXplKTsKICNlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJv
bWl1bS5jcHAKaW5kZXggYjMzY2UyYS4uZGZlNWNkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcApAQCAtNDAsNyAr
NDAsNiBAQAogI2luY2x1ZGUgIkZpbGVTeXN0ZW1DYWxsYmFjay5oIgogI2luY2x1ZGUgIkZpbGVT
eXN0ZW1DYWxsYmFja3MuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUg
IldlYkNvbW1vbldvcmtlckNsaWVudC5oIgogI2luY2x1ZGUgIldlYkZpbGVFcnJvci5oIgogI2lu
Y2x1ZGUgIldlYkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJXZWJGaWxlU3lzdGVtQ2FsbGJhY2tz
SW1wbC5oIgpAQCAtNDgsNyArNDcsNyBAQAogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgogI2lu
Y2x1ZGUgIldlYlBlcm1pc3Npb25DbGllbnQuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgot
I2luY2x1ZGUgIldlYldvcmtlckltcGwuaCIKKyNpbmNsdWRlICJXZWJXb3JrZXJCYXNlLmgiCiAj
aW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2UuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKQEAgLTgwLDcgKzc5LDcg
QEAgc3RhdGljIGNvbnN0IGNoYXIgb3BlbkZpbGVTeXN0ZW1Nb2RlW10gPSAib3BlbkZpbGVTeXN0
ZW1Nb2RlIjsKIC8vIGNhbGwgYmFjayB0byB0aGUgd29ya2VyIGNvbnRleHQuCiBjbGFzcyBBbGxv
d0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlPiBjcmVhdGUoV2ViQ29y
ZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmlu
ZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQpCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZT4gY3JlYXRlKFdlYkNv
cmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgV1RGOjpTdHJp
bmcmIG1vZGUsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJp
ZGdlKHdvcmtlckxvYWRlclByb3h5LCBtb2RlLCBjb21tb25DbGllbnQpKTsKICAgICB9CkBAIC0x
MDcsNyArMTA2LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBBbGxvd0ZpbGVT
eXN0ZW1NYWluVGhyZWFkQnJpZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJM
b2FkZXJQcm94eSwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVu
dCogY29tbW9uQ2xpZW50KQorICAgIEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2UoV2Vi
Q29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0
cmluZyYgbW9kZSwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQpCiAgICAg
ICAgIDogbV93b3JrZXJMb2FkZXJQcm94eSh3b3JrZXJMb2FkZXJQcm94eSkKICAgICAgICAgLCBt
X21vZGUobW9kZSkKICAgICB7CkBAIC0xMTYsNyArMTE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgYWxsb3dGaWxlU3lzdGVtVGFzayhXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1v
bkNsaWVudCwgUGFzc1JlZlB0cjxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlPiBicmlk
Z2UpCisgICAgc3RhdGljIHZvaWQgYWxsb3dGaWxlU3lzdGVtVGFzayhXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1v
bkNsaWVudCwgUGFzc1JlZlB0cjxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlPiBicmlk
Z2UpCiAgICAgewogICAgICAgICBpZiAoY29tbW9uQ2xpZW50KQogICAgICAgICAgICAgYnJpZGdl
LT5zaWduYWxDb21wbGV0ZWQoY29tbW9uQ2xpZW50LT5hbGxvd0ZpbGVTeXN0ZW0oKSk7CkBAIC0x
MzUsNyArMTM0LDcgQEAgcHJpdmF0ZToKICAgICBXVEY6OlN0cmluZyBtX21vZGU7CiB9OwogCi1i
b29sIGFsbG93RmlsZVN5c3RlbUZvcldvcmtlcihXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1v
bkNsaWVudCkKK2Jvb2wgYWxsb3dGaWxlU3lzdGVtRm9yV29ya2VyKE5ld1dlYkNvbW1vbldvcmtl
ckNsaWVudCogY29tbW9uQ2xpZW50KQogewogICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpjb250cm9sbGVyRm9yQ29udGV4dCgp
OwogICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBjb250cm9sbGVyLT53b3JrZXJD
b250ZXh0KCk7CkBAIC0xNTgsNyArMTU3LDcgQEAgYm9vbCBhbGxvd0ZpbGVTeXN0ZW1Gb3JXb3Jr
ZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQpCiAgICAgcmV0dXJuIGJyaWRn
ZS0+cmVzdWx0KCk7CiB9CiAKLXZvaWQgb3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViQ29tbW9u
V29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9u
ZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFj
a3MsIGJvb2wgc3luY2hyb25vdXMpCit2b2lkIG9wZW5GaWxlU3lzdGVtRm9yV29ya2VyKE5ld1dl
YkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5
cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyog
Y2FsbGJhY2tzLCBib29sIHN5bmNocm9ub3VzKQogewogICAgIFdvcmtlclNjcmlwdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpjb250cm9sbGVyRm9yQ29u
dGV4dCgpOwogICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBjb250cm9sbGVyLT53
b3JrZXJDb250ZXh0KCk7CkBAIC0yMDQsMTEgKzIwMywxMiBAQCBzdGF0aWMgdm9pZCBvcGVuRmls
ZVN5c3RlbUhlbHBlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBBc3luY0ZpbGVT
eXN0ZQogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJD
b250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpOwogICAgICAgICBX
b3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmd29ya2VyQ29udGV4dC0+dGhy
ZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7Ci0gICAgICAgIFdlYldvcmtlckJhc2UqIHdlYldv
cmtlciA9IHN0YXRpY19jYXN0PFdlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94eSk7Ci0g
ICAgICAgIGlmICghYWxsb3dGaWxlU3lzdGVtRm9yV29ya2VyKHdlYldvcmtlci0+Y29tbW9uQ2xp
ZW50KCkpKQorICAgICAgICBOZXdXZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2Fz
dDxOZXdXZWJXb3JrZXJCYXNlKj4od29ya2VyTG9hZGVyUHJveHkpOworICAgICAgICBpZiAoIWFs
bG93RmlsZVN5c3RlbUZvcldvcmtlcih3ZWJXb3JrZXItPm5ld0NvbW1vbkNsaWVudCgpKSkKICAg
ICAgICAgICAgIGFsbG93ZWQgPSBmYWxzZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgb3Bl
bkZpbGVTeXN0ZW1Gb3JXb3JrZXIod2ViV29ya2VyLT5jb21tb25DbGllbnQoKSwgc3RhdGljX2Nh
c3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIHNpemUsIGNyZWF0ZSA9PSBDcmVhdGVJZk5v
dFByZXNlbnQsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MsIHR5cGUs
IGNvbnRleHQsIHN5bmNocm9ub3VzKSwgc3luY2hyb25vdXMpOworICAgICAgICAgICAgb3BlbkZp
bGVTeXN0ZW1Gb3JXb3JrZXIod2ViV29ya2VyLT5uZXdDb21tb25DbGllbnQoKSwgc3RhdGljX2Nh
c3Q8V2ViRmlsZVN5c3RlbTo6VHlwZT4odHlwZSksIHNpemUsIGNyZWF0ZSA9PSBDcmVhdGVJZk5v
dFByZXNlbnQsIG5ldyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MsIHR5cGUs
IGNvbnRleHQsIHN5bmNocm9ub3VzKSwgc3luY2hyb25vdXMpOworCiAjZWxzZQogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViU2hhcmVkV29ya2VySW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2hhcmVkV29ya2VySW1wbC5oCmluZGV4IGQxYjY0YmEuLmI2OWI4MjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmgKQEAg
LTY0LDYgKzY0LDkgQEAgcHVibGljOgogICAgIFdlYldvcmtlckNsaWVudCogY2xpZW50KCk7CiAg
ICAgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSB7IHJldHVybiBtX2NsaWVu
dDsgfQogCisgICAgLy8gV2ViQ29tbW9uV29ya2VyQmFzZSBtZXRob2RzOgorICAgIE5ld1dlYkNv
bW1vbldvcmtlckNsaWVudCogbmV3Q29tbW9uQ2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0K
KwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIH5XZWJTaGFyZWRXb3JrZXJJbXBsKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaAppbmRleCBiMGU1MWYxLi5iYTg3
MTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNl
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oCkBAIC0z
NCw5ICszNCwxMSBAQAogI2lmIEVOQUJMRShXT1JLRVJTKQogCiAjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkNvbW1vbldvcmtlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCiAjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIK
ICNpbmNsdWRlICJXb3JrZXJPYmplY3RQcm94eS5oIgorI2luY2x1ZGUgIldvcmtlclRocmVhZC5o
IgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
CkBAIC01NSwxNyArNTcsMjYgQEAgY2xhc3MgV2ViVmlldzsKIGNsYXNzIFdlYldvcmtlcjsKIGNs
YXNzIFdlYldvcmtlckNsaWVudDsKIAorCitjbGFzcyBOZXdXZWJXb3JrZXJCYXNlIDogcHVibGlj
IFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIE5ld1dl
YkNvbW1vbldvcmtlckNsaWVudCogbmV3Q29tbW9uQ2xpZW50KCkgPSAwOworICAgIHZpcnR1YWwg
V2ViVmlldyogdmlldygpIGNvbnN0ID0gMDsKK307CisKKworCiAvLyBCYXNlIGNsYXNzIGZvciBX
ZWJTaGFyZWRXb3JrZXJJbXBsIGFuZCBXZWJXb3JrZXJJbXBsLiBJdCBjb250YWlucyBjb21tb24K
IC8vIGNvZGUgdXNlZCBieSBib3RoIGltcGxlbWVudGF0aW9uIGNsYXNzZXMsIGluY2x1ZGluZyBp
bXBsZW1lbnRhdGlvbnMgb2YgdGhlCiAvLyBXb3JrZXJPYmplY3RQcm94eSBhbmQgV29ya2VyTG9h
ZGVyUHJveHkgaW50ZXJmYWNlcy4KIGNsYXNzIFdlYldvcmtlckJhc2UgOiBwdWJsaWMgV2ViQ29y
ZTo6V29ya2VyT2JqZWN0UHJveHkKLSAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViQ29y
ZTo6V29ya2VyTG9hZGVyUHJveHkKKyAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgTmV3V2Vi
V29ya2VyQmFzZQogICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJGcmFtZUNsaWVudCB7
CiBwdWJsaWM6CiAgICAgV2ViV29ya2VyQmFzZSgpOwogICAgIHZpcnR1YWwgfldlYldvcmtlckJh
c2UoKTsKIAotICAgIC8vIFdlYkNvcmU6Oldvcmtlck9iamVjdFByb3h5IG1ldGhvZHM6CisgICAg
Ly8gV2ViQ29tbW9uV29ya2VyQmFzZSBtZXRob2RzOgogICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVz
c2FnZVRvV29ya2VyT2JqZWN0KAogICAgICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4sCiAgICAgICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRD
aGFubmVsQXJyYXk+KTsKQEAgLTc5LDYgKzkwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCByZXBvcnRQZW5kaW5nQWN0aXZpdHkoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHdvcmtlckNv
bnRleHRDbG9zZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3llZCgp
OworICAgIHZpcnR1YWwgV2ViVmlldyogdmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldzsg
fQogCiAgICAgLy8gV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkgbWV0aG9kczoKICAgICB2aXJ0
dWFsIHZvaWQgcG9zdFRhc2tUb0xvYWRlcihQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2s+KTsKQEAgLTkyLDExICsxMDQsOCBAQCBwdWJsaWM6CiAgICAgLy8g
RXhlY3V0ZXMgdGhlIGdpdmVuIHRhc2sgb24gdGhlIG1haW4gdGhyZWFkLgogICAgIHN0YXRpYyB2
b2lkIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKIAotICAgIFdlYlZpZXcqIHdlYlZpZXcoKSBjb25zdCB7
IHJldHVybiBtX3dlYlZpZXc7IH0KLQotICAgIHZpcnR1YWwgV2ViQ29tbW9uV29ya2VyQ2xpZW50
KiBjb21tb25DbGllbnQoKSA9IDA7Ci0KIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIFdlYkNvbW1v
bldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KCkgPSAwOwogICAgIHZpcnR1YWwgV2ViV29ya2Vy
Q2xpZW50KiBjbGllbnQoKSA9IDA7CiAKICAgICB2b2lkIHNldFdvcmtlclRocmVhZChQYXNzUmVm
UHRyPFdlYkNvcmU6OldvcmtlclRocmVhZD4gdGhyZWFkKSB7IG1fd29ya2VyVGhyZWFkID0gdGhy
ZWFkOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJD
bGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVu
dEltcGwuY3BwCmluZGV4IGMxOThjY2YuLmU4MWU3NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuY3BwCkBAIC01OSw2ICs1OSw3IEBA
CiAjaW5jbHVkZSAiV2ViS2l0LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCiAjaW5jbHVk
ZSAiV2ViTWVzc2FnZVBvcnRDaGFubmVsLmgiCisjaW5jbHVkZSAiV2ViUGVybWlzc2lvbkNsaWVu
dC5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUgIldlYlVSTC5oIgogI2luY2x1
ZGUgIldlYlZpZXdJbXBsLmgiCkBAIC02OSwzODcgKzcwLDE2NCBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLS8vIFdoZW4gV2ViS2l0IGNyZWF0ZXMg
YSBXb3JrZXJDb250ZXh0UHJveHkgb2JqZWN0LCB3ZSBjaGVjayBpZiB3ZSdyZSBpbiB0aGUKLS8v
IHJlbmRlcmVyIG9yIHdvcmtlciBwcm9jZXNzLiAgSWYgdGhlIGxhdHRlciwgdGhlbiB3ZSBqdXN0
IHVzZQotLy8gV29ya2VyTWVzc2FnaW5nUHJveHkuCi0vLwotLy8gSWYgd2UncmUgaW4gdGhlIHJl
bmRlcmVyIHByb2Nlc3MsIHRoZW4gd2UgbmVlZCB1c2UgdGhlIGdsdWUgcHJvdmlkZWQKLS8vIFdl
YldvcmtlciBvYmplY3QgdG8gdGFsayB0byB0aGUgd29ya2VyIHByb2Nlc3Mgb3ZlciBJUEMuICBU
aGUgd29ya2VyIHByb2Nlc3MKLS8vIHRhbGtzIHRvIFdvcmtlciogdXNpbmcgV29ya2VyT2JqZWN0
UHJveHksIHdoaWNoIHdlIGltcGxlbWVudCBvbgotLy8gV2ViV29ya2VyQ2xpZW50SW1wbC4KLS8v
Ci0vLyBOb3RlIHRoYXQgaWYgd2UncmUgcnVubmluZyBlYWNoIHdvcmtlciBpbiBhIHNlcGFyYXRl
IHByb2Nlc3MsIHRoZW4gbmVzdGVkCi0vLyB3b3JrZXJzIGVuZCB1cCB1c2luZyB0aGUgc2FtZSBj
b2RlcGF0aCBhcyB0aGUgcmVuZGVyZXIgcHJvY2Vzcy4KKy8vIENocm9taXVtLXNwZWNpZmljIHdy
YXBwZXIgb3ZlciBXb3JrZXJNZXNzYWdpbmdQcm94eS4KKy8vIERlbGVnYXRlcyBpbXBsZW1lbnRh
dGlvbiBvZiBXb3JrZXJ7TG9hZGVyLENvbnRleHQsT2JqZWN0fVByb3h5IHRvIFdvcmtlck1lc3Nh
Z2luZ1Byb3h5LgogCiAvLyBzdGF0aWMKIFdvcmtlckNvbnRleHRQcm94eSogV2ViV29ya2VyQ2xp
ZW50SW1wbDo6Y3JlYXRlV29ya2VyQ29udGV4dFByb3h5KFdvcmtlciogd29ya2VyKQogewotICAg
IC8vIFNwZWNpYWwgYmVoYXZpb3IgZm9yIG11bHRpcGxlIHdvcmtlcnMgcGVyIHByb2Nlc3MuCi0g
ICAgLy8gRklYTUU6IHY4IGRvZXNuJ3Qgc3VwcG9ydCBtb3JlIHRoYW4gb25lIHdvcmtlcnMgcGVy
IHByb2Nlc3MuCi0gICAgLy8gaWYgKCF3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
aXNEb2N1bWVudCgpKQotICAgIC8vICAgICByZXR1cm4gbmV3IFdvcmtlck1lc3NhZ2luZ1Byb3h5
KHdvcmtlcik7Ci0KLSAgICBXZWJXb3JrZXIqIHdlYldvcmtlciA9IDA7Ci0gICAgV2ViV29ya2Vy
Q2xpZW50SW1wbCogcHJveHkgPSBuZXcgV2ViV29ya2VyQ2xpZW50SW1wbCh3b3JrZXIpOwotCiAg
ICAgaWYgKHdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50KCkpIHsK
LSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPigKLSAg
ICAgICAgICAgIHdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPih3b3JrZXItPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJG
cmFtZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgICAgIHdlYldvcmtl
ciA9IHdlYkZyYW1lLT5jbGllbnQoKS0+Y3JlYXRlV29ya2VyKHdlYkZyYW1lLCBwcm94eSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9
IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7Ci0gICAgICAg
IGlmICghY29udHJvbGxlcikgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIERlZGljYXRlZFdvcmtl
clRocmVhZCogdGhyZWFkID0gc3RhdGljX2Nhc3Q8RGVkaWNhdGVkV29ya2VyVGhyZWFkKj4oY29u
dHJvbGxlci0+d29ya2VyQ29udGV4dCgpLT50aHJlYWQoKSk7Ci0gICAgICAgIFdvcmtlck9iamVj
dFByb3h5KiB3b3JrZXJPYmplY3RQcm94eSA9ICZ0aHJlYWQtPndvcmtlck9iamVjdFByb3h5KCk7
Ci0gICAgICAgIFdlYldvcmtlckltcGwqIGltcGwgPSByZWludGVycHJldF9jYXN0PFdlYldvcmtl
ckltcGwqPih3b3JrZXJPYmplY3RQcm94eSk7Ci0gICAgICAgIHdlYldvcmtlciA9IGltcGwtPmNs
aWVudCgpLT5jcmVhdGVXb3JrZXIocHJveHkpOwotICAgIH0KLQotICAgIHByb3h5LT5zZXRXZWJX
b3JrZXIod2ViV29ya2VyKTsKLSAgICByZXR1cm4gcHJveHk7Ci19Ci0KLVdlYldvcmtlckNsaWVu
dEltcGw6OldlYldvcmtlckNsaWVudEltcGwoV29ya2VyKiB3b3JrZXIpCi0gICAgOiBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQod29ya2VyLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAg
LCBtX3dvcmtlcih3b3JrZXIpCi0gICAgLCBtX2Fza2VkVG9UZXJtaW5hdGUoZmFsc2UpCi0gICAg
LCBtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50KDApCi0gICAgLCBtX3dvcmtlckNvbnRleHRIYWRQ
ZW5kaW5nQWN0aXZpdHkoZmFsc2UpCi0gICAgLCBtX3dvcmtlclRocmVhZElkKGN1cnJlbnRUaHJl
YWQoKSkKLSAgICAsIG1fcGFnZUluc3BlY3RvcigwKQotewotfQotCi1XZWJXb3JrZXJDbGllbnRJ
bXBsOjp+V2ViV29ya2VyQ2xpZW50SW1wbCgpCi17CisgICAgICAgIFdlYldvcmtlckNsaWVudElt
cGwqIHByb3h5ID0gbmV3IFdlYldvcmtlckNsaWVudEltcGwod29ya2VyLCB3ZWJGcmFtZSk7Cisg
ICAgICAgIHJldHVybiBwcm94eTsgCisgICAgfSAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpzZXRXZWJXb3Jr
ZXIoV2ViV29ya2VyKiB3ZWJXb3JrZXIpCit2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnN0YXJ0
V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgdXNlckFn
ZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpCiB7Ci0gICAgbV93ZWJXb3JrZXIgPSB3ZWJX
b3JrZXI7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6c3RhcnRXb3JrZXJDb250ZXh0
KGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlKQotewot
ICAgIC8vIFdvcmtlci50ZXJtaW5hdGUoKSBjb3VsZCBiZSBjYWxsZWQgZnJvbSBKUyBiZWZvcmUg
dGhlIGNvbnRleHQgaXMgc3RhcnRlZC4KLSAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKCFpc01haW5UaHJlYWQoKSkgewotICAgICAgICBXZWJXb3Jr
ZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKAotICAg
ICAgICAgICAgJnN0YXJ0V29ya2VyQ29udGV4dFRhc2ssCi0gICAgICAgICAgICBBbGxvd0Nyb3Nz
VGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAgICAgICAgc2NyaXB0VVJMLnN0cmluZygpLAotICAg
ICAgICAgICAgdXNlckFnZW50LAotICAgICAgICAgICAgc291cmNlQ29kZSkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIHN0YXJ0V29ya2VyQ29udGV4dEludGVybmFsKHNjcmlwdFVSTCwg
dXNlckFnZW50LCBzb3VyY2VDb2RlKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpz
dGFydFdvcmtlckNvbnRleHRJbnRlcm5hbChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFdU
Rjo6U3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VDb2RlKQotewot
ICAgIG1fd2ViV29ya2VyLT5zdGFydFdvcmtlckNvbnRleHQoc2NyaXB0VVJMLCB1c2VyQWdlbnQs
IHNvdXJjZUNvZGUpOwotICAgIG1fd29ya2VyQ29udGV4dEhhZFBlbmRpbmdBY3Rpdml0eSA9IHRy
dWU7IC8vIFdvcmtlciBpbml0aWFsaXphdGlvbiBtZWFucyBhIHBlbmRpbmcgYWN0aXZpdHkuCisg
ICAgUmVmUHRyPERlZGljYXRlZFdvcmtlclRocmVhZD4gdGhyZWFkID0gRGVkaWNhdGVkV29ya2Vy
VGhyZWFkOjpjcmVhdGUoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUsICp0aGlzLCAq
dGhpcyk7CisgICAgbV9wcm94eS0+d29ya2VyVGhyZWFkQ3JlYXRlZCh0aHJlYWQpOworICAgIHRo
cmVhZC0+c3RhcnQoKTsKIH0KIAogdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjp0ZXJtaW5hdGVX
b3JrZXJDb250ZXh0KCkKIHsKLSAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9hc2tlZFRvVGVybWluYXRlID0gdHJ1ZTsKLSAgICBpZiAoIWlzTWFpblRo
cmVhZCgpKSB7Ci0gICAgICAgIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVh
ZCgKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmdGVybWluYXRlV29ya2VyQ29udGV4
dFRhc2ssIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBtX3dlYldvcmtlci0+dGVybWluYXRlV29ya2VyQ29udGV4dCgpOworICAgIG1f
cHJveHktPnRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndvcmtlckNvbnRleHRUZXJtaW5hdGVkKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5n
ZXQoKSwgdGhpcyk7CiB9CiAKIHZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdE1lc3NhZ2VU
b1dvcmtlckNvbnRleHQoCi0gICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1l
c3NhZ2UsCi0gICAgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMp
CisgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCAKKyAgICBQYXNz
T3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBwb3J0cykKIHsKLSAgICAvLyBXb3JrZXIu
dGVybWluYXRlKCkgY291bGQgYmUgY2FsbGVkIGZyb20gSlMgYmVmb3JlIHRoZSBjb250ZXh0IGlz
IHN0YXJ0ZWQuCi0gICAgaWYgKG1fYXNrZWRUb1Rlcm1pbmF0ZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgICsrbV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudDsKLSAgICBpZiAoIWlzTWFpblRocmVhZCgp
KSB7Ci0gICAgICAgIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVh
dGVDYWxsYmFja1Rhc2soJnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0VGFzaywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UtPnRvV2ly
ZVN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxzKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkgd2ViQ2hhbm5lbHMoY2hhbm5lbHMuZ2V0
KCkgPyBjaGFubmVscy0+c2l6ZSgpIDogMCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3
ZWJDaGFubmVscy5zaXplKCk7ICsraSkgewotICAgICAgICBXZWJNZXNzYWdlUG9ydENoYW5uZWwq
IHdlYmNoYW5uZWwgPQotICAgICAgICAgICAgICAgICAgICAgICAgKCpjaGFubmVscylbaV0tPmNo
YW5uZWwoKS0+d2ViQ2hhbm5lbFJlbGVhc2UoKTsKLSAgICAgICAgd2ViY2hhbm5lbC0+c2V0Q2xp
ZW50KDApOwotICAgICAgICB3ZWJDaGFubmVsc1tpXSA9IHdlYmNoYW5uZWw7Ci0gICAgfQotICAg
IG1fd2ViV29ya2VyLT5wb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChtZXNzYWdlLT50b1dpcmVT
dHJpbmcoKSwgd2ViQ2hhbm5lbHMpOworICAgIG1fcHJveHktPnBvc3RNZXNzYWdlVG9Xb3JrZXJD
b250ZXh0KHZhbHVlLCBwb3J0cyk7CiB9CiAKIGJvb2wgV2ViV29ya2VyQ2xpZW50SW1wbDo6aGFz
UGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1fYXNrZWRUb1Rlcm1pbmF0
ZQotICAgICAgICAgICAmJiAobV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudCB8fCBtX3dvcmtlckNv
bnRleHRIYWRQZW5kaW5nQWN0aXZpdHkpOworICAgIHJldHVybiBtX3Byb3h5LT5oYXNQZW5kaW5n
QWN0aXZpdHkoKTsKIH0KIAogdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjp3b3JrZXJPYmplY3RE
ZXN0cm95ZWQoKQogewotICAgIGlmIChpc01haW5UaHJlYWQoKSkgewotICAgICAgICBtX3dlYldv
cmtlci0+d29ya2VyT2JqZWN0RGVzdHJveWVkKCk7Ci0gICAgICAgIG1fd29ya2VyID0gMDsKLSAg
ICB9Ci0gICAgLy8gRXZlbiBpZiB0aGlzIGlzIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQsIHRo
ZXJlIGNvdWxkIGJlIGEgcXVldWVkIHRhc2sgZm9yCi0gICAgLy8gdGhpcyBvYmplY3QsIHNvIGRv
bid0IGRlbGV0ZSBpdCByaWdodCBhd2F5LgotICAgIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFz
a1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlck9iamVjdERlc3Ryb3llZFRh
c2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7CisgICAgbV9wcm94eS0+
d29ya2VyT2JqZWN0RGVzdHJveWVkKCk7CiB9CiAKLXZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6
Y29ubmVjdFRvSW5zcGVjdG9yKFdvcmtlckNvbnRleHRQcm94eTo6UGFnZUluc3BlY3RvciogcGFn
ZUluc3BlY3RvcikKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQordm9pZCBXZWJXb3JrZXJDbGllbnRJ
bXBsOjpjb25uZWN0VG9JbnNwZWN0b3IoUGFnZUluc3BlY3RvciogaW5zcGVjdG9yKQogeworICAg
IG1fcHJveHktPmNvbm5lY3RUb0luc3BlY3RvcihpbnNwZWN0b3IpOwogICAgIEFTU0VSVCghbV9w
YWdlSW5zcGVjdG9yKTsKLSAgICBtX3BhZ2VJbnNwZWN0b3IgPSBwYWdlSW5zcGVjdG9yOwotICAg
IG1fd2ViV29ya2VyLT5hdHRhY2hEZXZUb29scygpOworICAgIG1fcGFnZUluc3BlY3RvciA9IGlu
c3BlY3RvcjsKIH0KIAogdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpkaXNjb25uZWN0RnJvbUlu
c3BlY3RvcigpCiB7Ci0gICAgaWYgKCFtX2Fza2VkVG9UZXJtaW5hdGUpCi0gICAgICAgIG1fd2Vi
V29ya2VyLT5kZXRhY2hEZXZUb29scygpOwogICAgIG1fcGFnZUluc3BlY3RvciA9IDA7CisgICAg
bV9wcm94eS0+ZGlzY29ubmVjdEZyb21JbnNwZWN0b3IoKTsKIH0KIAogdm9pZCBXZWJXb3JrZXJD
bGllbnRJbXBsOjpzZW5kTWVzc2FnZVRvSW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
IHsKLSAgICBtX3dlYldvcmtlci0+ZGlzcGF0Y2hEZXZUb29sc01lc3NhZ2UobWVzc2FnZSk7Cisg
ICAgbV9wcm94eS0+c2VuZE1lc3NhZ2VUb0luc3BlY3RvcihtZXNzYWdlKTsKIH0KIAotdm9pZCBX
ZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KGNvbnN0IFdlYlN0
cmluZyYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSYgY2hhbm5lbHMpCit2
b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+
IGNoYW5uZWxzMjsKLSAgICBpZiAoY2hhbm5lbHMuc2l6ZSgpKSB7Ci0gICAgICAgIGNoYW5uZWxz
MiA9IGFkb3B0UHRyKG5ldyBNZXNzYWdlUG9ydENoYW5uZWxBcnJheShjaGFubmVscy5zaXplKCkp
KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGFubmVscy5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgUmVmUHRyPFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsPiBwbGF0Zm9y
bV9jaGFubmVsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybU1lc3NhZ2VQ
b3J0Q2hhbm5lbDo6Y3JlYXRlKGNoYW5uZWxzW2ldKTsKLSAgICAgICAgICAgIGNoYW5uZWxzW2ld
LT5zZXRDbGllbnQocGxhdGZvcm1fY2hhbm5lbC5nZXQoKSk7Ci0gICAgICAgICAgICAoKmNoYW5u
ZWxzMilbaV0gPSBNZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZShwbGF0Zm9ybV9jaGFubmVsKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChjdXJyZW50VGhyZWFkKCkgIT0gbV93b3JrZXJU
aHJlYWRJZCkgewotICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKGNy
ZWF0ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2ssCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFs
bG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyhtZXNzYWdlKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhbm5lbHMyLnJlbGVhc2UoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcG9z
dE1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2sobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgp
LCB0aGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsIGNoYW5u
ZWxzMi5yZWxlYXNlKCkpOworICAgIG1fcHJveHktPnBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9y
KG1lc3NhZ2UpOwogfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKIAotdm9pZCBXZWJX
b3JrZXJDbGllbnRJbXBsOjpwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29uc3QgV2ViU3Ry
aW5nJiBlcnJvck1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgc291cmNlVVJM
KQordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0VGFza1RvTG9hZGVyKFBhc3NPd25QdHI8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKIHsKLSAgICBpZiAoY3VycmVudFRo
cmVhZCgpICE9IG1fd29ya2VyVGhyZWFkSWQpIHsKLSAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJnBvc3RFeGNlcHRpb25Ub1dvcmtl
ck9iamVjdFRhc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZyhlcnJvck1lc3NhZ2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcoc291cmNl
VVJMKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYm9vbCB1bmhhbmRsZWQgPSBt
X3dvcmtlci0+ZGlzcGF0Y2hFdmVudChFcnJvckV2ZW50OjpjcmVhdGUoZXJyb3JNZXNzYWdlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZVVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyKSk7Ci0gICAgaWYgKHVuaGFuZGxl
ZCkKLSAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5yZXBvcnRFeGNlcHRpb24oZXJy
b3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwsIDApOworICAgIG1fcHJveHktPnBvc3RU
YXNrVG9Mb2FkZXIodGFzayk7CiB9CiAKLXZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdENv
bnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoaW50IGRlc3RpbmF0aW9uLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc291cmNl
SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBtZXNzYWdlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VMZXZlbCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2Vi
U3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBz
b3VyY2VVUkwpCit2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RUYXNrRm9yTW9kZVRvV29y
a2VyQ29udGV4dChQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ss
IGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKLSAgICBpZiAoY3VycmVudFRocmVhZCgpICE9IG1fd29y
a2VyVGhyZWFkSWQpIHsKLSAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFz
ayhjcmVhdGVDYWxsYmFja1Rhc2soJnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0VGFz
aywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlSWQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1lc3NhZ2VUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlTGV2ZWwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyhtZXNzYWdl
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKHNvdXJjZVVSTCkpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkTWVzc2Fn
ZShzdGF0aWNfY2FzdDxNZXNzYWdlU291cmNlPihzb3VyY2VJZCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1lc3NhZ2VUeXBlPihtZXNzYWdl
VHlwZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PE1lc3NhZ2VMZXZlbD4obWVzc2FnZUxldmVsKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nKG1lc3NhZ2UpLCBsaW5lTnVtYmVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcoc291cmNlVVJMKSwgMCk7Cisg
ICAgbV9wcm94eS0+cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KHRhc2ssIG1vZGUpOwog
fQogCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2Vy
T2JqZWN0KGludCBzb3VyY2VJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VUeXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVzc2FnZUxl
dmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBXZWJTdHJpbmcmIHNvdXJjZVVSTCkKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cG9z
dE1lc3NhZ2VUb1dvcmtlck9iamVjdChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
dmFsdWUsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzKQogewotICAg
IHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KDAsIHNvdXJjZUlkLCBtZXNzYWdlVHlw
ZSwgbWVzc2FnZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworICAgIG1f
cHJveHktPnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QodmFsdWUsIHBvcnRzKTsKIH0KIAogdm9p
ZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoYm9v
bCBoYXNQZW5kaW5nQWN0aXZpdHkpCiB7Ci0gICAgLy8gdW5jb25maXJtZWRfbWVzc2FnZV9jb3Vu
dF8gY2FuIG9ubHkgYmUgdXBkYXRlZCBvbiB0aGUgdGhyZWFkIHdoZXJlIGl0J3MKLSAgICAvLyBh
Y2Nlc3NlZC4gIE90aGVyd2lzZSB0aGVyZSBhcmUgcmFjZSBjb25kaXRpb25zIHdpdGggdjgncyBn
YXJiYWdlCi0gICAgLy8gY29sbGVjdGlvbi4KLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmY29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2Jq
ZWN0VGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1BlbmRpbmdBY3Rp
dml0eSkpOworICAgIG1fcHJveHktPmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChoYXNQ
ZW5kaW5nQWN0aXZpdHkpOwogfQogCiB2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnJlcG9ydFBl
bmRpbmdBY3Rpdml0eShib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKIHsKLSAgICAvLyBTZWUgYWJv
dmUgY29tbWVudCBpbiBjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QuCi0gICAgbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJnJlcG9ydFBl
bmRpbmdBY3Rpdml0eVRhc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQ
ZW5kaW5nQWN0aXZpdHkpKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjp3b3JrZXJD
b250ZXh0RGVzdHJveWVkKCkKLXsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Ondvcmtl
ckNvbnRleHRUZXJtaW5hdGVkKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSwgdGhpcyk7
CisgICAgbV9wcm94eS0+cmVwb3J0UGVuZGluZ0FjdGl2aXR5KGhhc1BlbmRpbmdBY3Rpdml0eSk7
CiB9CiAKIHZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6d29ya2VyQ29udGV4dENsb3NlZCgpCiB7
CisgICAgbV9wcm94eS0+d29ya2VyQ29udGV4dENsb3NlZCgpOwogfQogCi12b2lkIFdlYldvcmtl
ckNsaWVudEltcGw6OmRpc3BhdGNoRGV2VG9vbHNNZXNzYWdlKGNvbnN0IFdlYlN0cmluZyYgbWVz
c2FnZSkKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdEV4Y2VwdGlvblRvV29ya2VyT2Jq
ZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwpCiB7Ci0gICAgaWYgKG1fcGFnZUluc3BlY3RvcikKLSAgICAgICAgbV9w
YWdlSW5zcGVjdG9yLT5kaXNwYXRjaE1lc3NhZ2VGcm9tV29ya2VyKG1lc3NhZ2UpOworICAgIG1f
cHJveHktPnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChlcnJvck1lc3NhZ2UsIGxpbmVOdW1i
ZXIsIHNvdXJjZVVSTCk7CiB9CiAKLXZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6c3RhcnRXb3Jr
ZXJDb250ZXh0VGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudElt
cGwqIHRoaXNQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiBzY3JpcHRVUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBz
b3VyY2VDb2RlKQordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VU
b1dvcmtlck9iamVjdChNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVz
c2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKLSAgICB0aGlzUHRyLT5zdGFydFdvcmtlckNvbnRl
eHRJbnRlcm5hbChLVVJMKFBhcnNlZFVSTFN0cmluZywgc2NyaXB0VVJMKSwgdXNlckFnZW50LCBz
b3VyY2VDb2RlKTsKKyAgICBtX3Byb3h5LT5wb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVj
dChzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOwog
fQogCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnRlcm1pbmF0ZVdvcmtlckNvbnRleHRUYXNr
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQ
dHIpCit2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OndvcmtlckNvbnRleHREZXN0cm95ZWQoKQog
ewotICAgIHRoaXNQdHItPm1fd2ViV29ya2VyLT50ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCk7Cisg
ICAgbV9wcm94eS0+d29ya2VyQ29udGV4dERlc3Ryb3llZCgpOworICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQobV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LmdldCgpLCB0aGlzKTsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0TWVz
c2FnZVRvV29ya2VyQ29udGV4dFRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
YXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscykKK2Jvb2wgV2ViV29y
a2VyQ2xpZW50SW1wbDo6YWxsb3dGaWxlU3lzdGVtKCkgCiB7Ci0gICAgV2ViTWVzc2FnZVBvcnRD
aGFubmVsQXJyYXkgd2ViQ2hhbm5lbHMoY2hhbm5lbHMuZ2V0KCkgPyBjaGFubmVscy0+c2l6ZSgp
IDogMCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYkNoYW5uZWxzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIHdlYkNoYW5uZWxzW2ldID0gKCpjaGFubmVscylbaV0tPmNoYW5uZWwo
KS0+d2ViQ2hhbm5lbFJlbGVhc2UoKTsKLSAgICAgICAgd2ViQ2hhbm5lbHNbaV0tPnNldENsaWVu
dCgwKTsKLSAgICB9Ci0KLSAgICB0aGlzUHRyLT5tX3dlYldvcmtlci0+cG9zdE1lc3NhZ2VUb1dv
cmtlckNvbnRleHQobWVzc2FnZSwgd2ViQ2hhbm5lbHMpOworICAgIFdlYktpdDo6V2ViVmlld0lt
cGwqIHdlYlZpZXcgPSBtX3dlYkZyYW1lLT52aWV3SW1wbCgpOworICAgIHJldHVybiAhd2ViVmll
dy0+cGVybWlzc2lvbkNsaWVudCgpIHx8IHdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKS0+YWxs
b3dGaWxlU3lzdGVtKG1fd2ViRnJhbWUpOwogfQogCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6
Ondvcmtlck9iamVjdERlc3Ryb3llZFRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlzUHRyKQordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpv
cGVuRmlsZVN5c3RlbShXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBi
b29sIGNyZWF0ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcykKIHsKLSAgICBpZiAodGhpc1B0ci0+bV93
b3JrZXIpIC8vIENoZWNrIHdlIGhhdmVuJ3QgYWxyZWFkIGNhbGxlZCB0aGlzLgotICAgICAgICB0
aGlzUHRyLT5tX3dlYldvcmtlci0+d29ya2VyT2JqZWN0RGVzdHJveWVkKCk7Ci0gICAgZGVsZXRl
IHRoaXNQdHI7CisgICAgIG1fd2ViRnJhbWUtPmNsaWVudCgpLT5vcGVuRmlsZVN5c3RlbShtX3dl
YkZyYW1lLCB0eXBlLCBzaXplLCBjcmVhdGUsIGNhbGxiYWNrcyk7CiB9CiAKLXZvaWQgV2ViV29y
a2VyQ2xpZW50SW1wbDo6cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2soCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hh
bm5lbHMpCitib29sIFdlYldvcmtlckNsaWVudEltcGw6OmFsbG93RGF0YWJhc2UoV2ViRnJhbWUq
LCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGlzcGxheU5hbWUsIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkgCiB7Ci0KLSAgICBpZiAodGhpc1B0ci0+bV93b3Jr
ZXIpIHsKLSAgICAgICAgT3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+IHBvcnRzID0KLSAgICAgICAg
ICAgIE1lc3NhZ2VQb3J0OjplbnRhbmdsZVBvcnRzKCpjb250ZXh0LCBjaGFubmVscyk7Ci0gICAg
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRNZXNzYWdlID0KLSAg
ICAgICAgICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUobWVzc2FnZSk7
Ci0gICAgICAgIHRoaXNQdHItPm1fd29ya2VyLT5kaXNwYXRjaEV2ZW50KE1lc3NhZ2VFdmVudDo6
Y3JlYXRlKHBvcnRzLnJlbGVhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZE1lc3NhZ2UucmVsZWFzZSgp
KSk7Ci0gICAgfQorICAgICBXZWJLaXQ6OldlYlZpZXdJbXBsKiB3ZWJWaWV3ID0gbV93ZWJGcmFt
ZS0+dmlld0ltcGwoKTsKKyAgICAgcmV0dXJuICF3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCkg
fHwgd2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpLT5hbGxvd0RhdGFiYXNlKG1fd2ViRnJhbWUs
IG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKIH0KLQotdm9pZCBXZWJXb3JrZXJD
bGllbnRJbXBsOjpwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3RUYXNrKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCkKKyAKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEZXZU
b29sc01lc3NhZ2UoY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQogewotICAgIGJvb2wgaGFuZGxl
ZCA9IGZhbHNlOwotICAgIGlmICh0aGlzUHRyLT5tX3dvcmtlcikKLSAgICAgICAgaGFuZGxlZCA9
IHRoaXNQdHItPm1fd29ya2VyLT5kaXNwYXRjaEV2ZW50KEVycm9yRXZlbnQ6OmNyZWF0ZShlcnJv
ck1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1i
ZXIpKTsKLSAgICBpZiAoIWhhbmRsZWQpCi0gICAgICAgIHRoaXNQdHItPm1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291
cmNlVVJMLCAwKTsKKyAgICBpZiAobV9wYWdlSW5zcGVjdG9yKQorICAgICAgICBtX3BhZ2VJbnNw
ZWN0b3ItPmRpc3BhdGNoTWVzc2FnZUZyb21Xb3JrZXIobWVzc2FnZSk7CiB9CiAKLXZvaWQgV2Vi
V29ya2VyQ2xpZW50SW1wbDo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3RUYXNrKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBs
KiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IHNvdXJjZUlkLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VUeXBlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IG1lc3NhZ2VMZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCi17Ci0g
ICAgdGhpc1B0ci0+bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRNZXNzYWdlKHN0YXRpY19j
YXN0PE1lc3NhZ2VTb3VyY2U+KHNvdXJjZUlkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWVzc2FnZVR5cGU+KG1lc3NhZ2VU
eXBlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8TWVzc2FnZUxldmVsPihtZXNzYWdlTGV2ZWwpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBsaW5lTnVtYmVyLCBz
b3VyY2VVUkwsIDApOworV2ViVmlldyogV2ViV29ya2VyQ2xpZW50SW1wbDo6dmlldygpIGNvbnN0
IAoreyAgIAorICAgIHJldHVybiBtX3dlYkZyYW1lLT52aWV3KCk7IAogfQogCi12b2lkIFdlYldv
cmtlckNsaWVudEltcGw6OmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdFRhc2soU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlz
UHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQorV2ViV29ya2VyQ2xpZW50SW1wbDo6
V2ViV29ya2VyQ2xpZW50SW1wbChXb3JrZXIqIHdvcmtlciwgV2ViRnJhbWVJbXBsKiB3ZWJGcmFt
ZSkKKyAgICA6IG1fcHJveHkobmV3IFdvcmtlck1lc3NhZ2luZ1Byb3h5KHdvcmtlcikpCisgICAg
LCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQod29ya2VyLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpCisgICAgLCBtX3dlYkZyYW1lKHdlYkZyYW1lKSAgICAKKyAgICAsIG1fcGFnZUluc3BlY3Rv
cigwKQorCiB7Ci0gICAgdGhpc1B0ci0+bV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudC0tOwotICAg
IHRoaXNQdHItPm1fd29ya2VyQ29udGV4dEhhZFBlbmRpbmdBY3Rpdml0eSA9IGhhc1BlbmRpbmdB
Y3Rpdml0eTsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpyZXBvcnRQZW5kaW5nQWN0
aXZpdHlUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1w
bCogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKK1dlYldvcmtlckNsaWVudEltcGw6On5X
ZWJXb3JrZXJDbGllbnRJbXBsKCkKIHsKLSAgICB0aGlzUHRyLT5tX3dvcmtlckNvbnRleHRIYWRQ
ZW5kaW5nQWN0aXZpdHkgPSBoYXNQZW5kaW5nQWN0aXZpdHk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2Vy
Q2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50
SW1wbC5oCmluZGV4IGMyNzBmZmMuLjNkMjM0MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmgKQEAgLTMzLDM3ICszMyw0MCBAQAogCiAj
aWYgRU5BQkxFKFdPUktFUlMpCiAKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CisjaW5jbHVkZSAiV29ya2VyQ29udGV4dFByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyTG9hZGVy
UHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJNZXNzYWdpbmdQcm94eS5oIgorI2luY2x1ZGUgIldv
cmtlck9iamVjdFByb3h5LmgiCisKICNpbmNsdWRlICJXZWJGaWxlU3lzdGVtLmgiCisjaW5jbHVk
ZSAiV2ViV29ya2VyQmFzZS5oIgogI2luY2x1ZGUgIldlYldvcmtlckNsaWVudC5oIgotI2luY2x1
ZGUgIldvcmtlckNvbnRleHRQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotbmFtZXNw
YWNlIFdlYkNvcmUgewotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLX0KIAogbmFtZXNw
YWNlIFdlYktpdCB7CiBjbGFzcyBXZWJXb3JrZXI7CitjbGFzcyBXZWJGcmFtZUltcGw7CiAKLS8v
IFRoZSBwdXJwb3NlIG9mIHRoaXMgY2xhc3MgaXMgdG8gcHJvdmlkZSBhIFdvcmtlckNvbnRleHRQ
cm94eQotLy8gaW1wbGVtZW50YXRpb24gdGhhdCB3ZSBjYW4gZ2l2ZSB0byBXZWJLaXQuICBJbnRl
cm5hbGx5LCBpdCBjb252ZXJ0cyB0aGUKLS8vIGRhdGEgdHlwZXMgdG8gQ2hyb21lIGNvbXBhdGli
bGUgb25lcyBzbyB0aGF0IHJlbmRlcmVyIGNvZGUgY2FuIHVzZSBpdCBvdmVyCi0vLyBJUEMuCisv
LyBUaGlzIGNsYXNzIHByb3ZpZGVzIGNocm9taXVtIGltcGxlbWVudGF0aW9uIGZvciBXb3JrZXJD
b250ZXh0UHJveHQsIFdvcmtlck9iamVjdFByb3h5IGFtZCBXb3JrZXJMb2FkZXJQcm94eQorLy8g
Zm9yIGluLXByb2MgZGVkaWNhdGVkIHdvcmtlcnMuIEl0IGFsc28gYWN0cyBhcyBhIGJyaWRnZSBm
b3Igd29ya2VycyB0byBjaHJvbWl1bSBpbXBsZW1lbnRhdGlvbiBvZiBmaWxlIHN5c3RlbXMsCisv
LyBkYXRhYmFzZXMgYW5kIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4KKy8vCisvLyBJbiBl
c3NlbmNlLCB0aGlzIGNsYXNzIHdyYXBzIFdvcmtlck1lc3NhZ2luZ1Byb3h5LgogY2xhc3MgV2Vi
V29ya2VyQ2xpZW50SW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViV29ya2VyQ2xpZW50IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViQ29yZTo6V29ya2VyT2JqZWN0UHJveHkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgTmV3V2ViV29ya2VyQmFzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQg
ewogcHVibGljOgotICAgIFdlYldvcmtlckNsaWVudEltcGwoV2ViQ29yZTo6V29ya2VyKik7Ci0K
ICAgICAvLyBXZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHkgRmFjdG9yeS4KICAgICBzdGF0aWMg
V2ViQ29yZTo6V29ya2VyQ29udGV4dFByb3h5KiBjcmVhdGVXb3JrZXJDb250ZXh0UHJveHkoV2Vi
Q29yZTo6V29ya2VyKik7Ci0gICAgdm9pZCBzZXRXZWJXb3JrZXIoV2ViV29ya2VyKik7CiAKICAg
ICAvLyBXZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHkgbWV0aG9kczoKICAgICAvLyBUaGVzZSBh
cmUgY2FsbGVkIG9uIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZSB3b3JrZXIuICBJbiB0aGUg
cmVuZGVyZXIKLSAgICAvLyBwcm9jZXNzLCB0aGlzIHdpbGwgYmUgdGhlIG1haW4gV2ViS2l0IHRo
cmVhZC4gIEluIHRoZSB3b3JrZXIgcHJvY2VzcywgdGhpcwotICAgIC8vIHdpbGwgYmUgdGhlIHRo
cmVhZCBvZiB0aGUgZXhlY3V0aW5nIHdvcmtlciAobm90IHRoZSBtYWluIFdlYktpdCB0aHJlYWQp
LgorICAgIC8vIHByb2Nlc3MsIHRoaXMgd2lsbCBiZSB0aGUgbWFpbiBXZWJLaXQgdGhyZWFkLgog
ICAgIHZpcnR1YWwgdm9pZCBzdGFydFdvcmtlckNvbnRleHQoY29uc3QgV2ViQ29yZTo6S1VSTCYs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYp
OwpAQCAtNzQsMTAzICs3Nyw0OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc1BlbmRp
bmdBY3Rpdml0eSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJPYmplY3REZXN0cm95
ZWQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0VG9JbnNwZWN0b3IoV29ya2VyQ29udGV4
dFByb3h5OjpQYWdlSW5zcGVjdG9yKik7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICB2aXJ0
dWFsIHZvaWQgY29ubmVjdFRvSW5zcGVjdG9yKFdlYkNvcmU6OldvcmtlckNvbnRleHRQcm94eTo6
UGFnZUluc3BlY3RvciopOwogICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0RnJvbUluc3BlY3Rv
cigpOwogICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvSW5zcGVjdG9yKGNvbnN0IFN0cmlu
ZyYpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3Rvcihjb25zdCBT
dHJpbmcmKTsKKyNlbmRpZgorICAgIC8vIFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5IG1ldGhv
ZHM6CisgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RU
YXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2s+LCBjb25zdCBTdHJpbmcmIG1vZGUpOwogCi0gICAgLy8gV2ViV29y
a2VyQ2xpZW50IG1ldGhvZHM6Ci0gICAgLy8gVGhlc2UgYXJlIGNhbGxlZCBvbiB0aGUgbWFpbiBX
ZWJLaXQgdGhyZWFkLgotICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0
KGNvbnN0IFdlYlN0cmluZyYsIGNvbnN0IFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5Jik7Ci0g
ICAgdmlydHVhbCB2b2lkIHBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25zdCBXZWJTdHJp
bmcmLCBpbnQsIGNvbnN0IFdlYlN0cmluZyYpOworICAgIC8vIFdlYkNvcmU6Oldvcmtlck9iamVj
dFByb3h5IG1ldGhvZHM6CisgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmpl
Y3QoUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzT3duUHRy
PFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5Pik7CisgICAgdmlydHVhbCB2b2lkIHBv
c3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50
IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKIAotICAgIC8vIEZJWE1FOiB0
aGUgYmVsb3cgaXMgZm9yIGNvbXBhdGliaWxpdHkgb25seSBhbmQgc2hvdWxkIGJlCi0gICAgLy8g
cmVtb3ZlZCBvbmNlIENocm9taXVtIGlzIHVwZGF0ZWQgdG8gcmVtb3ZlIG1lc3NhZ2UKLSAgICAv
LyBkZXN0aW5hdGlvbiBwYXJhbWV0ZXIgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzcxNTU+LgotICAg
IHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChpbnQsIGludCwg
aW50LCBpbnQsIGNvbnN0IFdlYlN0cmluZyYsIGludCwgY29uc3QgV2ViU3RyaW5nJik7Ci0gICAg
dmlydHVhbCB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KGludCwgaW50LCBp
bnQsIGNvbnN0IFdlYlN0cmluZyYsIGludCwgY29uc3QgV2ViU3RyaW5nJik7CisgICAgdmlydHVh
bCB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KFdlYkNvcmU6Ok1lc3NhZ2VT
b3VyY2UsIFdlYkNvcmU6Ok1lc3NhZ2VUeXBlLCBXZWJDb3JlOjpNZXNzYWdlTGV2ZWwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKICAg
ICB2aXJ0dWFsIHZvaWQgY29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGJvb2wpOwogICAg
IHZpcnR1YWwgdm9pZCByZXBvcnRQZW5kaW5nQWN0aXZpdHkoYm9vbCk7CiAgICAgdmlydHVhbCB2
b2lkIHdvcmtlckNvbnRleHRDbG9zZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4
dERlc3Ryb3llZCgpOwotICAgIHZpcnR1YWwgV2ViV29ya2VyKiBjcmVhdGVXb3JrZXIoV2ViV29y
a2VyQ2xpZW50KikgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgV2ViTm90aWZpY2F0aW9uUHJl
c2VudGVyKiBub3RpZmljYXRpb25QcmVzZW50ZXIoKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6
IE5vdGlmaWNhdGlvbnMgbm90IHlldCBzdXBwb3J0ZWQgaW4gd29ya2Vycy4KLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotICAgIHZpcnR1YWwgV2ViQXBwbGljYXRpb25DYWNoZUhvc3QqIGNyZWF0
ZUFwcGxpY2F0aW9uQ2FjaGVIb3N0KFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50KikgeyBy
ZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgYm9vbCBhbGxvd0RhdGFiYXNlKFdlYkZyYW1lKiwgY29u
c3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUpCi0gICAgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHZpcnR1YWwgYm9vbCBhbGxvd0Zp
bGVTeXN0ZW0oKQotICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KKworICAgIC8vIFdlYldvcmtlckNsaWVudEJhc2UgbWV0aG9k
czoKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dEYXRhYmFzZShXZWJGcmFtZSosIGNvbnN0IFdlYlN0
cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBl
c3RpbWF0ZWRTaXplKTsKKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dGaWxlU3lzdGVtKCk7CisgICAg
dmlydHVhbCB2b2lkIG9wZW5GaWxlU3lzdGVtKFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9u
ZyBzaXplLCBib29sIGNyZWF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrcyopOwogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGV2VG9v
bHNNZXNzYWdlKGNvbnN0IFdlYlN0cmluZyYpOwogCisgICAgLy8gV2ViQ29tbWVudFdvcmtlckJh
c2UgbWV0aG9kczoKKyAgICB2aXJ0dWFsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogbmV3Q29t
bW9uQ2xpZW50KCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgV2ViVmlldyogdmlldygp
IGNvbnN0OworCiBwcml2YXRlOgorICAgIFdlYldvcmtlckNsaWVudEltcGwoV2ViQ29yZTo6V29y
a2VyKiwgV2ViRnJhbWVJbXBsKik7CiAgICAgdmlydHVhbCB+V2ViV29ya2VyQ2xpZW50SW1wbCgp
OwogCi0gICAgLy8gTWV0aG9kcyB1c2VkIHRvIHN1cHBvcnQgV2ViV29ya2VyQ2xpZW50SW1wbCBi
ZWluZyBjb25zdHJ1Y3RlZCBvbiB3b3JrZXIKLSAgICAvLyB0aHJlYWRzLgotICAgIC8vIFRoZXNl
IHRhc2tzIGFyZSBkaXNwYXRjaGVkIG9uIHRoZSBXZWJLaXQgdGhyZWFkLgotICAgIHN0YXRpYyB2
b2lkIHN0YXJ0V29ya2VyQ29udGV4dFRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldv
cmtlckNsaWVudEltcGwqIHRoaXNQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYgc2NyaXB0VVJMLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHVzZXJBZ2VudCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBzb3Vy
Y2VDb2RlKTsKLSAgICBzdGF0aWMgdm9pZCB0ZXJtaW5hdGVXb3JrZXJDb250ZXh0VGFzayhXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIpOwot
ICAgIHN0YXRpYyB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0VGFzayhXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlzUHRyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXVEY6OlN0
cmluZyYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUGFzc093blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5l
bHMpOwotICAgIHN0YXRpYyB2b2lkIHdvcmtlck9iamVjdERlc3Ryb3llZFRhc2soV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIpOwotCi0gICAg
Ly8gVGhlc2UgdGFza3MgYXJlIGRpc3BhdGNoZWQgb24gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQg
dGhlIHdvcmtlciAoaS5lLgotICAgIC8vIG1haW4gV2ViS2l0IHRocmVhZCBpbiByZW5kZXJlciBw
cm9jZXNzLCBhbmQgdGhlIHdvcmtlciB0aHJlYWQgaW4gdGhlCi0gICAgLy8gd29ya2VyIHByb2Nl
c3MpLgotICAgIHN0YXRpYyB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3RUYXNrKFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXVEY6
OlN0cmluZyYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQYXNzT3duUHRyPFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFu
bmVscyk7Ci0gICAgc3RhdGljIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0VGFzayhX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhp
c1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYgc291cmNlVVJMKTsK
LSAgICBzdGF0aWMgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2soV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCog
dGhpc1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IHNvdXJjZUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbWVzc2FnZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXNzYWdlTGV2ZWwsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6
U3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCk7
Ci0gICAgc3RhdGljIHZvaWQgY29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0VGFzayhXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhp
c1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsKLSAgICBzdGF0aWMgdm9pZCByZXBvcnRQZW5kaW5n
QWN0aXZpdHlUYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJ
bXBsKiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOwotCi0gICAgdm9pZCBzdGFydFdvcmtlckNvbnRleHRJ
bnRlcm5hbChjb25zdCBXZWJDb3JlOjpLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFdURjo6U3RyaW5n
JiB1c2VyQWdlbnQsIGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VDb2RlKTsKLQorICAgIFdlYkNv
cmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5KiBtX3Byb3h5OwogICAgIC8vIEd1YXJkIGFnYWluc3Qg
Y29udGV4dCBmcm9tIGJlaW5nIGRlc3Ryb3llZCBiZWZvcmUgYSB3b3JrZXIgZXhpdHMuCiAgICAg
UmVmUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dDsKLQotICAgIFdlYkNvcmU6OldvcmtlciogbV93b3JrZXI7Ci0gICAgV2ViV29ya2Vy
KiBtX3dlYldvcmtlcjsKLSAgICBib29sIG1fYXNrZWRUb1Rlcm1pbmF0ZTsKLSAgICB1bnNpZ25l
ZCBtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50OwotICAgIGJvb2wgbV93b3JrZXJDb250ZXh0SGFk
UGVuZGluZ0FjdGl2aXR5OwotICAgIFRocmVhZElkZW50aWZpZXIgbV93b3JrZXJUaHJlYWRJZDsK
LSAgICBXb3JrZXJDb250ZXh0UHJveHk6OlBhZ2VJbnNwZWN0b3IqIG1fcGFnZUluc3BlY3RvcjsK
KyAgICBXZWJGcmFtZUltcGwqIG1fd2ViRnJhbWU7CisgICAgV2ViQ29yZTo6V29ya2VyQ29udGV4
dFByb3h5OjpQYWdlSW5zcGVjdG9yKiBtX3BhZ2VJbnNwZWN0b3I7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJX
b3JrZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwu
Y3BwCmluZGV4IDZjOWY0NWMuLmRjMTYzYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYldvcmtlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYldvcmtlckltcGwuY3BwCkBAIC03NCw2ICs3NCwxMSBAQCBXZWJXb3JrZXJJbXBsOjp+
V2ViV29ya2VySW1wbCgpCiB7CiB9CiAKK05ld1dlYkNvbW1vbldvcmtlckNsaWVudCogV2ViV29y
a2VySW1wbDo6bmV3Q29tbW9uQ2xpZW50KCkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQ7Cit9CisK
IFdlYkNvbW1vbldvcmtlckNsaWVudCogV2ViV29ya2VySW1wbDo6Y29tbW9uQ2xpZW50KCkKIHsK
ICAgICByZXR1cm4gbV9jbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJXb3JrZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3Jr
ZXJJbXBsLmgKaW5kZXggNzljOWM1NC4uYjAzOTMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViV29ya2VySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYldvcmtlckltcGwuaApAQCAtNjUsNiArNjUsOSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBXZWJXb3JrZXJDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAgICAg
dmlydHVhbCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCgpOwogCisgICAgLy8g
V2ViQ29tbW9uV29ya2VyQmFzZSBtZXRob2RzOgorICAgIHZpcnR1YWwgTmV3V2ViQ29tbW9uV29y
a2VyQ2xpZW50KiBuZXdDb21tb25DbGllbnQoKTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIH5X
ZWJXb3JrZXJJbXBsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKaW5kZXggMTdjNzc1
NC4uMTNmZWY5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKQEAgLTE1Niw3ICsxNTYs
NyBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnN0b3AoKQogICAgIH0K
IH0KIAotdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0T3BlbkZpbGVT
eXN0ZW1Ub01haW5UaHJlYWQoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdl
YkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBjb25z
dCBTdHJpbmcmIG1vZGUpCit2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBv
c3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNv
bW1vbkNsaWVudCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9v
bCBjcmVhdGUsIGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKICAgICBkaXNwYXRjaFRhc2tUb01haW5U
aHJlYWQoCiAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkZpbGVTeXN0ZW1Pbk1haW5U
aHJlYWQsCkBAIC0yNTEsNyArMjUxLDcgQEAgdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlOjpwb3N0UmVhZERpcmVjdG9yeVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGUKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIG1vZGUp
KTsKIH0KIAotdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpvcGVuRmlsZVN5
c3RlbU9uTWFpblRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29ya2Vy
Q2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25n
IHNpemUsIGJvb2wgY3JlYXRlLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiBicmlk
Z2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZTo6b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpU
eXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZSogYnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUpCiB7CiAgICAgaWYgKCFj
b21tb25DbGllbnQpCiAgICAgICAgIGJyaWRnZS0+ZGlkRmFpbE9uTWFpblRocmVhZChXZWJGaWxl
RXJyb3JBYm9ydCwgbW9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgKaW5kZXggYmI0ODQ3OS4u
MDI4ZjMzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaApAQCAtMzUsNiArMzUsNyBAQAogCiAj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCisjaW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2Vi
RmlsZUVycm9yLmgiCiAjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIldlYlZl
Y3Rvci5oIgpAQCAtNTIsNyArNTMsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEFzeW5j
RmlsZVN5c3RlbTsKIGNsYXNzIE1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzOwogY2xhc3Mg
VGhyZWFkYWJsZUNhbGxiYWNrc0JyaWRnZVdyYXBwZXI7Ci1jbGFzcyBXZWJDb21tb25Xb3JrZXJD
bGllbnQ7CitjbGFzcyBXZWJDb21tb25Xb3JrZXJDbGllbnRCYXNlOwogY2xhc3MgV2ViRmlsZVN5
c3RlbUNhbGxiYWNrczsKIHN0cnVjdCBXZWJGaWxlSW5mbzsKIHN0cnVjdCBXZWJGaWxlU3lzdGVt
RW50cnk7CkBAIC04Nyw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBNZXRob2Rz
IHRoYXQgY3JlYXRlIGFuIGluc3RhbmNlIGFuZCBwb3N0IGFuIGluaXRpYWwgcmVxdWVzdCB0YXNr
IHRvIHRoZSBtYWluIHRocmVhZC4gVGhleSBtdXN0IGJlIGNhbGxlZCBvbiB0aGUgd29ya2VyIHRo
cmVhZC4KLSAgICB2b2lkIHBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChXZWJDb21tb25X
b3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBj
cmVhdGUsIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgdm9pZCBwb3N0T3BlbkZpbGVTeXN0ZW1U
b01haW5UaHJlYWQoTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiwgV2ViRmlsZVN5c3RlbTo6VHlw
ZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAg
IHZvaWQgcG9zdE1vdmVUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6
OktVUkwmIHNyY1BhdGgsIGNvbnN0IFdlYkNvcmU6OktVUkwmIGRlc3RQYXRoLCBjb25zdCBTdHJp
bmcmIG1vZGUpOwogICAgIHZvaWQgcG9zdENvcHlUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSos
IGNvbnN0IFdlYkNvcmU6OktVUkwmIHNyY1BhdGgsIGNvbnN0IFdlYkNvcmU6OktVUkwmIGRlc3RQ
YXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQgcG9zdFJlbW92ZVRvTWFpblRocmVh
ZChXZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcGF0aCwgY29uc3QgU3RyaW5n
JiBtb2RlKTsKQEAgLTExMCw3ICsxMTEsNyBAQCBwcml2YXRlOgogICAgIFdvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqLCBXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyopOwogCiAgICAg
Ly8gTWV0aG9kcyB0aGF0IGFyZSB0byBiZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgotICAg
IHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpU
eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1vZGUpOworICAgIHN0YXRpYyB2b2lkIG9wZW5GaWxl
U3lzdGVtT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBOZXdX
ZWJDb21tb25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6
ZSwgYm9vbCBjcmVhdGUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBT
dHJpbmcmIG1vZGUpOwogICAgIHN0YXRpYyB2b2lkIG1vdmVPbk1haW5UaHJlYWQoV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpL
VVJMJiBzcmNQYXRoLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBkZXN0UGF0aCwgV29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgc3RhdGljIHZv
aWQgY29weU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2Vi
RmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHNyY1BhdGgsIGNvbnN0IFdlYkNvcmU6
OktVUkwmIGRlc3RQYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3Qg
U3RyaW5nJiBtb2RlKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVPbk1haW5UaHJlYWQoV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3Jl
OjpLVVJMJiBwYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3Ry
aW5nJiBtb2RlKTsK
</data>
<flag name="review"
          id="99710"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104084</attachid>
            <date>2011-08-16 13:45:01 -0700</date>
            <delta_ts>2011-08-16 14:15:42 -0700</delta_ts>
            <desc>CR feedback (changes in comments)</desc>
            <filename>61016.patch</filename>
            <type>text/plain</type>
            <size>54956</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMTEwYjhlYy4uOTA0MmJmNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MiBAQAorMjAxMS0wOC0xNSAgRG1pdHJ5IExv
bW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MTAxNgorICAgICAgICBbV2ViV29ya2Vyc11bQ2hyb21pdW1d
IFVzZSB2OCBJc29sYXRlcyBmb3IgaW4tcHJvY2VzcyBpbXBsZW1lbnRhdGlvbiBvZiBXZWJXb3Jr
ZXJzLgorICAgICAgICBUaGlzIGFkZHMgYW4gaW1wbGVtZW50YXRpb24gb2YgaW4tcHJvY2VzcyBk
ZWRpY2F0ZWQgd29ya2VycyB0byBjaHJvbWl1bSBwb3J0LgorICAgICAgICBUaGUgY3J1eCBvZiB0
aGUgbWF0dGVyIGlzIHRoZSByZWltcGxlbWVudGF0aW9uIG9mIFdlYldvcmtlckNsaWVudEltcGwu
IFdlYldvcmtlckNsaWVudEltcGwgbm93IAorICAgICAgICBpbXBsZW1lbnRzIGFsbCB0aHJlZSBv
ZiBXb3JrZXJ7TG9hZGVyLENvbnRleHQsT2JqZWN0fVByb3hpZXMgYW5kIGRlbGVnYXRlcyB0aGUg
aW1wbGVtZW50YXRpb24gdG8gCisgICAgICAgIFdlYktpdCdzIHN0YW5kYXJkIFdvcmtlck1lc3Nh
Z2luZ1Byb3h5LgorICAgICAgICBGb3Igbm93LCB3ZSBoYXZlIDMgaW1wbGVtZW50YXRpb25zIG9m
IHdvcmtlcnMgaW4gY2hyb21pdW0gV2ViS2l0OgorICAgICAgICAgIC0gSW4tcHJvY2VzcyBkZWRp
Y2F0ZWQgd29ya2VycyAodGhpcyBjaGVja2luKQorICAgICAgICAgIC0gSW50ZXItcHJvY2VzcyBz
aGFyZWQgd29ya2VycworICAgICAgICAgIC0gSW50ZXItcHJvY2VzcyBkZWRpY2F0ZWQgd29ya2Vy
cyAoZGVmdW5jdCBhZnRlciB0aGlzIGNoZWNraW4pCisgICAgICAgIFRoaXMgcGF0Y2ggZXh0cmFj
dHMgc29tZSBuZXcgY29tbW9uIGludGVyZmFjZXMgKFdlYkNvbW1vbldvcmtlckJhc2UgYW5kIFdl
YkNvbW1vbldvcmtlckNsaWVudCkgZm9yIHRoZXNlIAorICAgICAgICB0aHJlZSBpbXBsZW1lbnRh
dGlvbnMuIAorICAgICAgICBSZW1vdmluZyB0aGUgcmVtYWluaW5ncyBvZiBpbnRlci1wcm9jZXNz
IGRlZGljYXRlZCB3b3JrZXJzIC1yZWxhdGVkIGNsYXNzZXMgaXMgbGVmdCBmb3IgYSBzZXBhcmF0
ZSBwYXRjaCAKKyAgICAgICAgKGl0IHdpbGwgcmVxdWlyZSBjb29yZGluYXRlZCBjaGFuZ2VzIG9u
IGNocm9tdWl1bSBzaWRlKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHB1YmxpYy9XZWJDb21tb25Xb3JrZXJDbGllbnQuaDoKKyAgICAgICAgKiBz
cmMvRGF0YWJhc2VPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkFsbG93RGF0YWJhc2VN
YWluVGhyZWFkQnJpZGdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpBbGxvd0RhdGFiYXNl
TWFpblRocmVhZEJyaWRnZTo6QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZTo6YWxsb3dEYXRhYmFzZVRh
c2spOgorICAgICAgICAoV2ViS2l0OjphbGxvd0RhdGFiYXNlRm9yV29ya2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKToKKyAgICAg
ICAgKiBzcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
b3BlbkZpbGVTeXN0ZW1IZWxwZXIpOgorICAgICAgICAqIHNyYy9XZWJTaGFyZWRXb3JrZXJJbXBs
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6Om5ld0NvbW1vbkNsaWVu
dCk6CisgICAgICAgICogc3JjL1dlYldvcmtlckJhc2UuaDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
V29ya2VyQmFzZTo6dmlldyk6CisgICAgICAgICogc3JjL1dlYldvcmtlckNsaWVudEltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpjcmVhdGVXb3JrZXJDb250
ZXh0UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpzdGFydFdv
cmtlckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjp0ZXJt
aW5hdGVXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1w
bDo6cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3Jr
ZXJDbGllbnRJbXBsOjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJX
b3JrZXJDbGllbnRJbXBsOjp3b3JrZXJPYmplY3REZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpjb25uZWN0VG9JbnNwZWN0b3IpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpkaXNjb25uZWN0RnJvbUluc3BlY3Rvcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OnNlbmRNZXNzYWdlVG9JbnNwZWN0b3Ip
OgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0TWVzc2FnZVRvUGFn
ZUluc3BlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OnBvc3RU
YXNrVG9Mb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0
VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJD
bGllbnRJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViV29ya2VyQ2xpZW50SW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6cmVwb3J0UGVuZGluZ0FjdGl2aXR5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6d29ya2VyQ29udGV4dENs
b3NlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OnBvc3RFeGNlcHRp
b25Ub1dvcmtlck9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6
OnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
V29ya2VyQ2xpZW50SW1wbDo6d29ya2VyQ29udGV4dERlc3Ryb3llZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYldvcmtlckNsaWVudEltcGw6OmFsbG93RmlsZVN5c3RlbSk6CisgICAgICAgIChXZWJL
aXQ6OldlYldvcmtlckNsaWVudEltcGw6Om9wZW5GaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYktp
dDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6YWxsb3dEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYldvcmtlckNsaWVudEltcGw6OmRpc3BhdGNoRGV2VG9vbHNNZXNzYWdlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6dmlldyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YldvcmtlckNsaWVudEltcGw6OldlYldvcmtlckNsaWVudEltcGwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJXb3JrZXJDbGllbnRJbXBsOjp+V2ViV29ya2VyQ2xpZW50SW1wbCk6CisgICAgICAgICog
c3JjL1dlYldvcmtlckNsaWVudEltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xp
ZW50SW1wbDo6bmV3Q29tbW9uQ2xpZW50KToKKyAgICAgICAgKiBzcmMvV2ViV29ya2VySW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckltcGw6Om5ld0NvbW1vbkNsaWVudCk6Cisg
ICAgICAgICogc3JjL1dlYldvcmtlckltcGwuaDoKKyAgICAgICAgKiBzcmMvV29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZCk6CisgICAg
ICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6Om9wZW5GaWxlU3lz
dGVtT25NYWluVGhyZWFkKToKKyAgICAgICAgKiBzcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZS5oOgorCiAyMDExLTA4LTE2ICBTdGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIHNob3VsZCBhbGxvdyBpdHMg
aG9zdFdpbmRvdyB0byBiZSBOVUxMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJDb21tb25Xb3JrZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oCmluZGV4IDM1MmEyYzAuLjQ5NDRhZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtl
ckNsaWVudC5oCkBAIC00NCwxMiArNDQsMjUgQEAgY2xhc3MgV2ViU3RyaW5nOwogY2xhc3MgV2Vi
V29ya2VyOwogY2xhc3MgV2ViV29ya2VyQ2xpZW50OwogCitjbGFzcyBOZXdXZWJDb21tb25Xb3Jr
ZXJDbGllbnQgeworcHVibGljOgorICAgIC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQgdGhy
ZWFkIGJlZm9yZSBvcGVuaW5nIGEgd2ViIGRhdGFiYXNlLgorICAgIHZpcnR1YWwgYm9vbCBhbGxv
d0RhdGFiYXNlKFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpID0gMDsKKworICAg
IC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQgdGhyZWFkIGJlZm9yZSBvcGVuaW5nIGEgZmls
ZSBzeXN0ZW0uCisgICAgdmlydHVhbCBib29sIGFsbG93RmlsZVN5c3RlbSgpID0gMDsKKworICAg
IC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQgdGhyZWFkIGJlZm9yZSBvcGVuaW5nIGEgZmls
ZSBzeXN0ZW0uCisgICAgdmlydHVhbCB2b2lkIG9wZW5GaWxlU3lzdGVtKFdlYkZpbGVTeXN0ZW06
OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNr
cyopID0gMDsKK307CisKKwogLy8gUHJvdmlkZXMgYW4gaW50ZXJmYWNlIGJhY2sgdG8gdGhlIGlu
LXBhZ2Ugc2NyaXB0IG9iamVjdCBmb3IgYSB3b3JrZXIuCiAvLyBUaGlzIGludGVyZmFjZSBjb250
YWlucyBjb21tb24gQVBJcyB1c2VkIGJ5IGJvdGggc2hhcmVkIGFuZCBkZWRpY2F0ZWQKIC8vIHdv
cmtlcnMuCiAvLyBBbGwgZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0byBiZSBjYWxsZWQgYmFjayBv
biB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZAogLy8gdGhlIFdvcmtlciBvYmplY3QsIHVubGVzcyBu
b3RlZC4KLWNsYXNzIFdlYkNvbW1vbldvcmtlckNsaWVudCB7CitjbGFzcyBXZWJDb21tb25Xb3Jr
ZXJDbGllbnQgOiBwdWJsaWMgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50IHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KAogICAgICAgICBjb25z
dCBXZWJTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbGluZU51bWJlciwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAKaW5kZXggNTFjNDhkOC4uMjZm
NWQxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNl
cnZlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZl
ci5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlICJXZWJQZXJtaXNzaW9uQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiV2ViU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5o
IgotI2luY2x1ZGUgIldlYldvcmtlckltcGwuaCIKKyNpbmNsdWRlICJXZWJXb3JrZXJCYXNlLmgi
CiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5
LmgiCiAjaW5jbHVkZSAiV29ya2VyU2NyaXB0Q29udHJvbGxlci5oIgpAQCAtNjQsNyArNjQsNyBA
QCBzdGF0aWMgY29uc3QgY2hhciBhbGxvd0RhdGFiYXNlTW9kZVtdID0gImFsbG93RGF0YWJhc2VN
b2RlIjsKIC8vIGNhbGwgYmFjayB0byB0aGUgd29ya2VyIGNvbnRleHQuCiBjbGFzcyBBbGxvd0Rh
dGFiYXNlTWFpblRocmVhZEJyaWRnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBbGxv
d0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29ya2Vy
TG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwg
V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29u
c3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFsbG93RGF0
YWJhc2VNYWluVGhyZWFkQnJpZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkq
IHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgTmV3V2ViQ29tbW9u
V29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpT
dHJpbmcmIG5hbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBbGxv
d0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZSh3b3JrZXJMb2FkZXJQcm94eSwgbW9kZSwgY29tbW9u
Q2xpZW50LCBmcmFtZSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKICAgICB9
CkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQWxsb3dE
YXRhYmFzZU1haW5UaHJlYWRCcmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtl
ckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xp
ZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIG5h
bWUsIGNvbnN0IFdURjo6U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0
ZWRTaXplKQorICAgIEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlKFdlYkNvcmU6Oldvcmtl
ckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUs
IE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSogZnJhbWUs
IGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKICAgICAgICAgOiBtX3dvcmtlckxvYWRlclBy
b3h5KHdvcmtlckxvYWRlclByb3h5KQogICAgICAgICAsIG1fbW9kZShtb2RlKQogICAgIHsKQEAg
LTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYkNvcmU6OkFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBhbGxvd0RhdGFiYXNlVGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJh
bWUqIGZyYW1lLCBjb25zdCBXVEY6OlN0cmluZyBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyBkaXNw
bGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPEFsbG93RGF0
YWJhc2VNYWluVGhyZWFkQnJpZGdlPiBicmlkZ2UpCisgICAgc3RhdGljIHZvaWQgYWxsb3dEYXRh
YmFzZVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTmV3V2Vi
Q29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3Qg
V1RGOjpTdHJpbmcgbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJy
aWRnZT4gYnJpZGdlKQogICAgIHsKICAgICAgICAgaWYgKGNvbW1vbkNsaWVudCkKICAgICAgICAg
ICAgIGJyaWRnZS0+c2lnbmFsQ29tcGxldGVkKGNvbW1vbkNsaWVudC0+YWxsb3dEYXRhYmFzZShm
cmFtZSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKQEAgLTEyMiw3ICsxMjIs
NyBAQCBwcml2YXRlOgogICAgIFdURjo6U3RyaW5nIG1fbW9kZTsKIH07CiAKLWJvb2wgYWxsb3dE
YXRhYmFzZUZvcldvcmtlcihXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2Vi
RnJhbWUqIGZyYW1lLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKK2Jvb2wgYWxsb3dEYXRhYmFz
ZUZvcldvcmtlcihOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJh
bWUqIGZyYW1lLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKIHsKICAgICBXZWJDb3JlOjpXb3Jr
ZXJTY3JpcHRDb250cm9sbGVyKiBjb250cm9sbGVyID0gV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29u
dHJvbGxlcjo6Y29udHJvbGxlckZvckNvbnRleHQoKTsKICAgICBXZWJDb3JlOjpXb3JrZXJDb250
ZXh0KiB3b3JrZXJDb250ZXh0ID0gY29udHJvbGxlci0+d29ya2VyQ29udGV4dCgpOwpAQCAtMTY1
LDggKzE2NSw4IEBAIGJvb2wgRGF0YWJhc2VPYnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2Uo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0CiAjaWYgRU5BQkxFKFdPUktFUlMp
CiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxXb3Jr
ZXJDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgICAgIFdvcmtlckxvYWRl
clByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICZ3b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29y
a2VyTG9hZGVyUHJveHkoKTsKLSAgICAgICAgV2ViV29ya2VyQmFzZSogd2ViV29ya2VyID0gc3Rh
dGljX2Nhc3Q8V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKLSAgICAgICAgcmV0
dXJuIGFsbG93RGF0YWJhc2VGb3JXb3JrZXIod2ViV29ya2VyLT5jb21tb25DbGllbnQoKSwgd2Vi
V29ya2VyLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSk7CisgICAgICAgIE5ld1dlYldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19j
YXN0PE5ld1dlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94eSk7CisgICAgICAgIHJldHVy
biBhbGxvd0RhdGFiYXNlRm9yV29ya2VyKHdlYldvcmtlci0+bmV3Q29tbW9uQ2xpZW50KCksIHdl
Yldvcmtlci0+dmlldygpLT5tYWluRnJhbWUoKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRl
ZFNpemUpOwogI2Vsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9t
aXVtLmNwcAppbmRleCBiMzNjZTJhLi5kZmU1Y2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCkBAIC00MCw3ICs0
MCw2IEBACiAjaW5jbHVkZSAiRmlsZVN5c3RlbUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRmlsZVN5
c3RlbUNhbGxiYWNrcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAi
V2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRmlsZUVycm9yLmgiCiAjaW5j
bHVkZSAiV2ViRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJ
bXBsLmgiCkBAIC00OCw3ICs0Nyw3IEBACiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCiAjaW5j
bHVkZSAiV2ViUGVybWlzc2lvbkNsaWVudC5oIgogI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCi0j
aW5jbHVkZSAiV2ViV29ya2VySW1wbC5oIgorI2luY2x1ZGUgIldlYldvcmtlckJhc2UuaCIKICNp
bmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZS5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgpAQCAtODAsNyArNzksNyBA
QCBzdGF0aWMgY29uc3QgY2hhciBvcGVuRmlsZVN5c3RlbU1vZGVbXSA9ICJvcGVuRmlsZVN5c3Rl
bU1vZGUiOwogLy8gY2FsbCBiYWNrIHRvIHRoZSB3b3JrZXIgY29udGV4dC4KIGNsYXNzIEFsbG93
RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJDb3Jl
OjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5n
JiBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlPiBjcmVhdGUoV2ViQ29y
ZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmlu
ZyYgbW9kZSwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQpCiAgICAgewog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlk
Z2Uod29ya2VyTG9hZGVyUHJveHksIG1vZGUsIGNvbW1vbkNsaWVudCkpOwogICAgIH0KQEAgLTEw
Nyw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEFsbG93RmlsZVN5
c3RlbU1haW5UaHJlYWRCcmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxv
YWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50
KiBjb21tb25DbGllbnQpCisgICAgQWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZShXZWJD
b3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3Ry
aW5nJiBtb2RlLCBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKICAgICAg
ICAgOiBtX3dvcmtlckxvYWRlclByb3h5KHdvcmtlckxvYWRlclByb3h5KQogICAgICAgICAsIG1f
bW9kZShtb2RlKQogICAgIHsKQEAgLTExNiw3ICsxMTUsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhbGxvd0ZpbGVTeXN0ZW1UYXNrKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9u
Q2xpZW50LCBQYXNzUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRn
ZSkKKyAgICBzdGF0aWMgdm9pZCBhbGxvd0ZpbGVTeXN0ZW1UYXNrKFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9u
Q2xpZW50LCBQYXNzUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRn
ZSkKICAgICB7CiAgICAgICAgIGlmIChjb21tb25DbGllbnQpCiAgICAgICAgICAgICBicmlkZ2Ut
PnNpZ25hbENvbXBsZXRlZChjb21tb25DbGllbnQtPmFsbG93RmlsZVN5c3RlbSgpKTsKQEAgLTEz
NSw3ICsxMzQsNyBAQCBwcml2YXRlOgogICAgIFdURjo6U3RyaW5nIG1fbW9kZTsKIH07CiAKLWJv
b2wgYWxsb3dGaWxlU3lzdGVtRm9yV29ya2VyKFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9u
Q2xpZW50KQorYm9vbCBhbGxvd0ZpbGVTeXN0ZW1Gb3JXb3JrZXIoTmV3V2ViQ29tbW9uV29ya2Vy
Q2xpZW50KiBjb21tb25DbGllbnQpCiB7CiAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7
CiAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNv
bnRleHQoKTsKQEAgLTE1OCw3ICsxNTcsNyBAQCBib29sIGFsbG93RmlsZVN5c3RlbUZvcldvcmtl
cihXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKICAgICByZXR1cm4gYnJpZGdl
LT5yZXN1bHQoKTsKIH0KIAotdm9pZCBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcihXZWJDb21tb25X
b3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25n
IGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNr
cywgYm9vbCBzeW5jaHJvbm91cykKK3ZvaWQgb3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoTmV3V2Vi
Q29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlw
ZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBj
YWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMpCiB7CiAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250
ZXh0KCk7CiAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndv
cmtlckNvbnRleHQoKTsKQEAgLTIwNCwxMSArMjAzLDEyIEBAIHN0YXRpYyB2b2lkIG9wZW5GaWxl
U3lzdGVtSGVscGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5
c3RlCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNv
bnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCk7CiAgICAgICAgIFdv
cmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICZ3b3JrZXJDb250ZXh0LT50aHJl
YWQoKS0+d29ya2VyTG9hZGVyUHJveHkoKTsKLSAgICAgICAgV2ViV29ya2VyQmFzZSogd2ViV29y
a2VyID0gc3RhdGljX2Nhc3Q8V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKLSAg
ICAgICAgaWYgKCFhbGxvd0ZpbGVTeXN0ZW1Gb3JXb3JrZXIod2ViV29ya2VyLT5jb21tb25DbGll
bnQoKSkpCisgICAgICAgIE5ld1dlYldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0
PE5ld1dlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94eSk7CisgICAgICAgIGlmICghYWxs
b3dGaWxlU3lzdGVtRm9yV29ya2VyKHdlYldvcmtlci0+bmV3Q29tbW9uQ2xpZW50KCkpKQogICAg
ICAgICAgICAgYWxsb3dlZCA9IGZhbHNlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBvcGVu
RmlsZVN5c3RlbUZvcldvcmtlcih3ZWJXb3JrZXItPmNvbW1vbkNsaWVudCgpLCBzdGF0aWNfY2Fz
dDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90
UHJlc2VudCwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwg
Y29udGV4dCwgc3luY2hyb25vdXMpLCBzeW5jaHJvbm91cyk7CisgICAgICAgICAgICBvcGVuRmls
ZVN5c3RlbUZvcldvcmtlcih3ZWJXb3JrZXItPm5ld0NvbW1vbkNsaWVudCgpLCBzdGF0aWNfY2Fz
dDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90
UHJlc2VudCwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwg
Y29udGV4dCwgc3luY2hyb25vdXMpLCBzeW5jaHJvbm91cyk7CisKICNlbHNlCiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmgKaW5kZXggZDFiNjRiYS4uNTAzNjQyNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2hhcmVkV29ya2VySW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuaApAQCAt
NjQsNiArNjQsOSBAQCBwdWJsaWM6CiAgICAgV2ViV29ya2VyQ2xpZW50KiBjbGllbnQoKTsKICAg
ICBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50
OyB9CiAKKyAgICAvLyBOZXdXZWJXb3JrZXJCYXNlIG1ldGhvZHM6CisgICAgTmV3V2ViQ29tbW9u
V29ya2VyQ2xpZW50KiBuZXdDb21tb25DbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQorCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgfldlYlNoYXJlZFdvcmtlckltcGwoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oCmluZGV4IGIwZTUxZjEuLjk1NmFiOGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmgKQEAgLTM0LDkg
KzM0LDExIEBACiAjaWYgRU5BQkxFKFdPUktFUlMpCiAKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCisjaW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiV2ViRnJhbWVDbGllbnQuaCIKICNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgogI2lu
Y2x1ZGUgIldvcmtlck9iamVjdFByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAg
LTU1LDE3ICs1NywzMCBAQCBjbGFzcyBXZWJWaWV3OwogY2xhc3MgV2ViV29ya2VyOwogY2xhc3Mg
V2ViV29ya2VyQ2xpZW50OwogCisKKy8vIEJhc2UgY2xhc3MgZm9yIFdlYlNoYXJlZFdvcmtlcklt
cGwsIFdlYldvcmtlckNsaWVudEltcGwgYW5kIChkZWZ1bmN0KSBXZWJXb3JrZXJJbXBsCisvLyBj
b250YWluaW5nIGNvbW1vbiBpbnRlcmZhY2UgZm9yIHNoYXJlZCB3b3JrZXJzIGFuZCBkZWRpY2F0
ZWQgaW4tcHJvYyB3b3JrZXJzIGltcGxlbWVudGF0aW9uLgorLy8KKy8vIEZJWE1FOiBSZW5hbWUg
dGhpcyBjbGFzcyBpbnRvIFdlYldvcmtlckJhc2UsIG1lcmdlIGV4aXN0aW5nIFdlYldvcmtlckJh
c2UgYW5kIFdlYlNoYXJlZFdvcmtlci4KK2NsYXNzIE5ld1dlYldvcmtlckJhc2UgOiBwdWJsaWMg
V2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkgeworcHVibGljOgorICAgIHZpcnR1YWwgTmV3V2Vi
Q29tbW9uV29ya2VyQ2xpZW50KiBuZXdDb21tb25DbGllbnQoKSA9IDA7CisgICAgdmlydHVhbCBX
ZWJWaWV3KiB2aWV3KCkgY29uc3QgPSAwOworfTsKKworCisKIC8vIEJhc2UgY2xhc3MgZm9yIFdl
YlNoYXJlZFdvcmtlckltcGwgYW5kIFdlYldvcmtlckltcGwuIEl0IGNvbnRhaW5zIGNvbW1vbgog
Ly8gY29kZSB1c2VkIGJ5IGJvdGggaW1wbGVtZW50YXRpb24gY2xhc3NlcywgaW5jbHVkaW5nIGlt
cGxlbWVudGF0aW9ucyBvZiB0aGUKIC8vIFdvcmtlck9iamVjdFByb3h5IGFuZCBXb3JrZXJMb2Fk
ZXJQcm94eSBpbnRlcmZhY2VzLgogY2xhc3MgV2ViV29ya2VyQmFzZSA6IHB1YmxpYyBXZWJDb3Jl
OjpXb3JrZXJPYmplY3RQcm94eQotICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJDb3Jl
OjpXb3JrZXJMb2FkZXJQcm94eQorICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBOZXdXZWJX
b3JrZXJCYXNlCiAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFdlYkZyYW1lQ2xpZW50IHsK
IHB1YmxpYzoKICAgICBXZWJXb3JrZXJCYXNlKCk7CiAgICAgdmlydHVhbCB+V2ViV29ya2VyQmFz
ZSgpOwogCi0gICAgLy8gV2ViQ29yZTo6V29ya2VyT2JqZWN0UHJveHkgbWV0aG9kczoKKyAgICAv
LyBXZWJDb21tb25Xb3JrZXJCYXNlIG1ldGhvZHM6CiAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNz
YWdlVG9Xb3JrZXJPYmplY3QoCiAgICAgICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiwKICAgICAgICAgUGFzc093blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENo
YW5uZWxBcnJheT4pOwpAQCAtNzksNiArOTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29u
dGV4dENsb3NlZCgpOwogICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0RGVzdHJveWVkKCk7
CisgICAgdmlydHVhbCBXZWJWaWV3KiB2aWV3KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3OyB9
CiAKICAgICAvLyBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSBtZXRob2RzOgogICAgIHZpcnR1
YWwgdm9pZCBwb3N0VGFza1RvTG9hZGVyKFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4pOwpAQCAtOTIsMTEgKzEwOCw4IEBAIHB1YmxpYzoKICAgICAvLyBF
eGVjdXRlcyB0aGUgZ2l2ZW4gdGFzayBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgc3RhdGljIHZv
aWQgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4pOwogCi0gICAgV2ViVmlldyogd2ViVmlldygpIGNvbnN0IHsg
cmV0dXJuIG1fd2ViVmlldzsgfQotCi0gICAgdmlydHVhbCBXZWJDb21tb25Xb3JrZXJDbGllbnQq
IGNvbW1vbkNsaWVudCgpID0gMDsKLQogcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgV2ViQ29tbW9u
V29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSA9IDA7CiAgICAgdmlydHVhbCBXZWJXb3JrZXJD
bGllbnQqIGNsaWVudCgpID0gMDsKIAogICAgIHZvaWQgc2V0V29ya2VyVGhyZWFkKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6V29ya2VyVGhyZWFkPiB0aHJlYWQpIHsgbV93b3JrZXJUaHJlYWQgPSB0aHJl
YWQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNs
aWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50
SW1wbC5jcHAKaW5kZXggYzE5OGNjZi4uZTgxZTc0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5jcHAKQEAgLTU5LDYgKzU5LDcgQEAK
ICNpbmNsdWRlICJXZWJLaXQuaCIKICNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKICNpbmNsdWRl
ICJXZWJNZXNzYWdlUG9ydENoYW5uZWwuaCIKKyNpbmNsdWRlICJXZWJQZXJtaXNzaW9uQ2xpZW50
LmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVk
ZSAiV2ViVmlld0ltcGwuaCIKQEAgLTY5LDM4NyArNzAsMTY0IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotLy8gV2hlbiBXZWJLaXQgY3JlYXRlcyBh
IFdvcmtlckNvbnRleHRQcm94eSBvYmplY3QsIHdlIGNoZWNrIGlmIHdlJ3JlIGluIHRoZQotLy8g
cmVuZGVyZXIgb3Igd29ya2VyIHByb2Nlc3MuICBJZiB0aGUgbGF0dGVyLCB0aGVuIHdlIGp1c3Qg
dXNlCi0vLyBXb3JrZXJNZXNzYWdpbmdQcm94eS4KLS8vCi0vLyBJZiB3ZSdyZSBpbiB0aGUgcmVu
ZGVyZXIgcHJvY2VzcywgdGhlbiB3ZSBuZWVkIHVzZSB0aGUgZ2x1ZSBwcm92aWRlZAotLy8gV2Vi
V29ya2VyIG9iamVjdCB0byB0YWxrIHRvIHRoZSB3b3JrZXIgcHJvY2VzcyBvdmVyIElQQy4gIFRo
ZSB3b3JrZXIgcHJvY2VzcwotLy8gdGFsa3MgdG8gV29ya2VyKiB1c2luZyBXb3JrZXJPYmplY3RQ
cm94eSwgd2hpY2ggd2UgaW1wbGVtZW50IG9uCi0vLyBXZWJXb3JrZXJDbGllbnRJbXBsLgotLy8K
LS8vIE5vdGUgdGhhdCBpZiB3ZSdyZSBydW5uaW5nIGVhY2ggd29ya2VyIGluIGEgc2VwYXJhdGUg
cHJvY2VzcywgdGhlbiBuZXN0ZWQKLS8vIHdvcmtlcnMgZW5kIHVwIHVzaW5nIHRoZSBzYW1lIGNv
ZGVwYXRoIGFzIHRoZSByZW5kZXJlciBwcm9jZXNzLgorLy8gQ2hyb21pdW0tc3BlY2lmaWMgd3Jh
cHBlciBvdmVyIFdvcmtlck1lc3NhZ2luZ1Byb3h5LgorLy8gRGVsZWdhdGVzIGltcGxlbWVudGF0
aW9uIG9mIFdvcmtlcntMb2FkZXIsQ29udGV4dCxPYmplY3R9UHJveHkgdG8gV29ya2VyTWVzc2Fn
aW5nUHJveHkuCiAKIC8vIHN0YXRpYwogV29ya2VyQ29udGV4dFByb3h5KiBXZWJXb3JrZXJDbGll
bnRJbXBsOjpjcmVhdGVXb3JrZXJDb250ZXh0UHJveHkoV29ya2VyKiB3b3JrZXIpCiB7Ci0gICAg
Ly8gU3BlY2lhbCBiZWhhdmlvciBmb3IgbXVsdGlwbGUgd29ya2VycyBwZXIgcHJvY2Vzcy4KLSAg
ICAvLyBGSVhNRTogdjggZG9lc24ndCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgd29ya2VycyBwZXIg
cHJvY2Vzcy4KLSAgICAvLyBpZiAoIXdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5p
c0RvY3VtZW50KCkpCi0gICAgLy8gICAgIHJldHVybiBuZXcgV29ya2VyTWVzc2FnaW5nUHJveHko
d29ya2VyKTsKLQotICAgIFdlYldvcmtlciogd2ViV29ya2VyID0gMDsKLSAgICBXZWJXb3JrZXJD
bGllbnRJbXBsKiBwcm94eSA9IG5ldyBXZWJXb3JrZXJDbGllbnRJbXBsKHdvcmtlcik7Ci0KICAg
ICBpZiAod29ya2VyLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSkgewot
ICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KAotICAg
ICAgICAgICAgd29ya2VyLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHdvcmtlci0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKTsKICAgICAgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZy
YW1lSW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKLSAgICAgICAgd2ViV29ya2Vy
ID0gd2ViRnJhbWUtPmNsaWVudCgpLT5jcmVhdGVXb3JrZXIod2ViRnJhbWUsIHByb3h5KTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBjb250cm9sbGVyID0g
V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6Y29udHJvbGxlckZvckNvbnRleHQoKTsKLSAgICAgICAg
aWYgKCFjb250cm9sbGVyKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgRGVkaWNhdGVkV29ya2Vy
VGhyZWFkKiB0aHJlYWQgPSBzdGF0aWNfY2FzdDxEZWRpY2F0ZWRXb3JrZXJUaHJlYWQqPihjb250
cm9sbGVyLT53b3JrZXJDb250ZXh0KCktPnRocmVhZCgpKTsKLSAgICAgICAgV29ya2VyT2JqZWN0
UHJveHkqIHdvcmtlck9iamVjdFByb3h5ID0gJnRocmVhZC0+d29ya2VyT2JqZWN0UHJveHkoKTsK
LSAgICAgICAgV2ViV29ya2VySW1wbCogaW1wbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViV29ya2Vy
SW1wbCo+KHdvcmtlck9iamVjdFByb3h5KTsKLSAgICAgICAgd2ViV29ya2VyID0gaW1wbC0+Y2xp
ZW50KCktPmNyZWF0ZVdvcmtlcihwcm94eSk7Ci0gICAgfQotCi0gICAgcHJveHktPnNldFdlYldv
cmtlcih3ZWJXb3JrZXIpOwotICAgIHJldHVybiBwcm94eTsKLX0KLQotV2ViV29ya2VyQ2xpZW50
SW1wbDo6V2ViV29ya2VyQ2xpZW50SW1wbChXb3JrZXIqIHdvcmtlcikKLSAgICA6IG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCh3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAs
IG1fd29ya2VyKHdvcmtlcikKLSAgICAsIG1fYXNrZWRUb1Rlcm1pbmF0ZShmYWxzZSkKLSAgICAs
IG1fdW5jb25maXJtZWRNZXNzYWdlQ291bnQoMCkKLSAgICAsIG1fd29ya2VyQ29udGV4dEhhZFBl
bmRpbmdBY3Rpdml0eShmYWxzZSkKLSAgICAsIG1fd29ya2VyVGhyZWFkSWQoY3VycmVudFRocmVh
ZCgpKQotICAgICwgbV9wYWdlSW5zcGVjdG9yKDApCi17Ci19Ci0KLVdlYldvcmtlckNsaWVudElt
cGw6On5XZWJXb3JrZXJDbGllbnRJbXBsKCkKLXsKKyAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1w
bCogcHJveHkgPSBuZXcgV2ViV29ya2VyQ2xpZW50SW1wbCh3b3JrZXIsIHdlYkZyYW1lKTsKKyAg
ICAgICAgcmV0dXJuIHByb3h5OyAKKyAgICB9IAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiAwOwogfQogCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnNldFdlYldvcmtl
cihXZWJXb3JrZXIqIHdlYldvcmtlcikKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6c3RhcnRX
b3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdl
bnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkKIHsKLSAgICBtX3dlYldvcmtlciA9IHdlYldv
cmtlcjsKLX0KLQotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpzdGFydFdvcmtlckNvbnRleHQo
Y29uc3QgS1VSTCYgc2NyaXB0VVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpCi17Ci0g
ICAgLy8gV29ya2VyLnRlcm1pbmF0ZSgpIGNvdWxkIGJlIGNhbGxlZCBmcm9tIEpTIGJlZm9yZSB0
aGUgY29udGV4dCBpcyBzdGFydGVkLgotICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIWlzTWFpblRocmVhZCgpKSB7Ci0gICAgICAgIFdlYldvcmtl
ckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soCi0gICAg
ICAgICAgICAmc3RhcnRXb3JrZXJDb250ZXh0VGFzaywKLSAgICAgICAgICAgIEFsbG93Q3Jvc3NU
aHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICBzY3JpcHRVUkwuc3RyaW5nKCksCi0gICAg
ICAgICAgICB1c2VyQWdlbnQsCi0gICAgICAgICAgICBzb3VyY2VDb2RlKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgc3RhcnRXb3JrZXJDb250ZXh0SW50ZXJuYWwoc2NyaXB0VVJMLCB1
c2VyQWdlbnQsIHNvdXJjZUNvZGUpOwotfQotCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnN0
YXJ0V29ya2VyQ29udGV4dEludGVybmFsKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgV1RG
OjpTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZUNvZGUpCi17Ci0g
ICAgbV93ZWJXb3JrZXItPnN0YXJ0V29ya2VyQ29udGV4dChzY3JpcHRVUkwsIHVzZXJBZ2VudCwg
c291cmNlQ29kZSk7Ci0gICAgbV93b3JrZXJDb250ZXh0SGFkUGVuZGluZ0FjdGl2aXR5ID0gdHJ1
ZTsgLy8gV29ya2VyIGluaXRpYWxpemF0aW9uIG1lYW5zIGEgcGVuZGluZyBhY3Rpdml0eS4KKyAg
ICBSZWZQdHI8RGVkaWNhdGVkV29ya2VyVGhyZWFkPiB0aHJlYWQgPSBEZWRpY2F0ZWRXb3JrZXJU
aHJlYWQ6OmNyZWF0ZShzY3JpcHRVUkwsIHVzZXJBZ2VudCwgc291cmNlQ29kZSwgKnRoaXMsICp0
aGlzKTsKKyAgICBtX3Byb3h5LT53b3JrZXJUaHJlYWRDcmVhdGVkKHRocmVhZCk7CisgICAgdGhy
ZWFkLT5zdGFydCgpOwogfQogCiB2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnRlcm1pbmF0ZVdv
cmtlckNvbnRleHQoKQogewotICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX2Fza2VkVG9UZXJtaW5hdGUgPSB0cnVlOwotICAgIGlmICghaXNNYWluVGhy
ZWFkKCkpIHsKLSAgICAgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFk
KAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZ0ZXJtaW5hdGVXb3JrZXJDb250ZXh0
VGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIG1fd2ViV29ya2VyLT50ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCk7CisgICAgbV9w
cm94eS0+dGVybWluYXRlV29ya2VyQ29udGV4dCgpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0Lmdl
dCgpLCB0aGlzKTsKIH0KIAogdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0TWVzc2FnZVRv
V29ya2VyQ29udGV4dCgKLSAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVz
c2FnZSwKLSAgICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscykK
KyAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIAorICAgIFBhc3NP
d25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzKQogewotICAgIC8vIFdvcmtlci50
ZXJtaW5hdGUoKSBjb3VsZCBiZSBjYWxsZWQgZnJvbSBKUyBiZWZvcmUgdGhlIGNvbnRleHQgaXMg
c3RhcnRlZC4KLSAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQotICAgICAgICByZXR1cm47Ci0g
ICAgKyttX3VuY29uZmlybWVkTWVzc2FnZUNvdW50OwotICAgIGlmICghaXNNYWluVGhyZWFkKCkp
IHsKLSAgICAgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0
ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHRUYXNrLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS0+dG9XaXJl
U3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbHMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSB3ZWJDaGFubmVscyhjaGFubmVscy5nZXQo
KSA/IGNoYW5uZWxzLT5zaXplKCkgOiAwKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdl
YkNoYW5uZWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbCog
d2ViY2hhbm5lbCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKmNoYW5uZWxzKVtpXS0+Y2hh
bm5lbCgpLT53ZWJDaGFubmVsUmVsZWFzZSgpOwotICAgICAgICB3ZWJjaGFubmVsLT5zZXRDbGll
bnQoMCk7Ci0gICAgICAgIHdlYkNoYW5uZWxzW2ldID0gd2ViY2hhbm5lbDsKLSAgICB9Ci0gICAg
bV93ZWJXb3JrZXItPnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KG1lc3NhZ2UtPnRvV2lyZVN0
cmluZygpLCB3ZWJDaGFubmVscyk7CisgICAgbV9wcm94eS0+cG9zdE1lc3NhZ2VUb1dvcmtlckNv
bnRleHQodmFsdWUsIHBvcnRzKTsKIH0KIAogYm9vbCBXZWJXb3JrZXJDbGllbnRJbXBsOjpoYXNQ
ZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogewotICAgIHJldHVybiAhbV9hc2tlZFRvVGVybWluYXRl
Ci0gICAgICAgICAgICYmIChtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50IHx8IG1fd29ya2VyQ29u
dGV4dEhhZFBlbmRpbmdBY3Rpdml0eSk7CisgICAgcmV0dXJuIG1fcHJveHktPmhhc1BlbmRpbmdB
Y3Rpdml0eSgpOwogfQogCiB2b2lkIFdlYldvcmtlckNsaWVudEltcGw6Ondvcmtlck9iamVjdERl
c3Ryb3llZCgpCiB7Ci0gICAgaWYgKGlzTWFpblRocmVhZCgpKSB7Ci0gICAgICAgIG1fd2ViV29y
a2VyLT53b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKLSAgICAgICAgbV93b3JrZXIgPSAwOwotICAg
IH0KLSAgICAvLyBFdmVuIGlmIHRoaXMgaXMgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCwgdGhl
cmUgY291bGQgYmUgYSBxdWV1ZWQgdGFzayBmb3IKLSAgICAvLyB0aGlzIG9iamVjdCwgc28gZG9u
J3QgZGVsZXRlIGl0IHJpZ2h0IGF3YXkuCi0gICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNr
VG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyT2JqZWN0RGVzdHJveWVkVGFz
aywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKKyAgICBtX3Byb3h5LT53
b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpj
b25uZWN0VG9JbnNwZWN0b3IoV29ya2VyQ29udGV4dFByb3h5OjpQYWdlSW5zcGVjdG9yKiBwYWdl
SW5zcGVjdG9yKQorI2lmIEVOQUJMRShJTlNQRUNUT1IpCit2b2lkIFdlYldvcmtlckNsaWVudElt
cGw6OmNvbm5lY3RUb0luc3BlY3RvcihQYWdlSW5zcGVjdG9yKiBpbnNwZWN0b3IpCiB7CisgICAg
bV9wcm94eS0+Y29ubmVjdFRvSW5zcGVjdG9yKGluc3BlY3Rvcik7CiAgICAgQVNTRVJUKCFtX3Bh
Z2VJbnNwZWN0b3IpOwotICAgIG1fcGFnZUluc3BlY3RvciA9IHBhZ2VJbnNwZWN0b3I7Ci0gICAg
bV93ZWJXb3JrZXItPmF0dGFjaERldlRvb2xzKCk7CisgICAgbV9wYWdlSW5zcGVjdG9yID0gaW5z
cGVjdG9yOwogfQogCiB2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OmRpc2Nvbm5lY3RGcm9tSW5z
cGVjdG9yKCkKIHsKLSAgICBpZiAoIW1fYXNrZWRUb1Rlcm1pbmF0ZSkKLSAgICAgICAgbV93ZWJX
b3JrZXItPmRldGFjaERldlRvb2xzKCk7CiAgICAgbV9wYWdlSW5zcGVjdG9yID0gMDsKKyAgICBt
X3Byb3h5LT5kaXNjb25uZWN0RnJvbUluc3BlY3RvcigpOwogfQogCiB2b2lkIFdlYldvcmtlckNs
aWVudEltcGw6OnNlbmRNZXNzYWdlVG9JbnNwZWN0b3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQog
ewotICAgIG1fd2ViV29ya2VyLT5kaXNwYXRjaERldlRvb2xzTWVzc2FnZShtZXNzYWdlKTsKKyAg
ICBtX3Byb3h5LT5zZW5kTWVzc2FnZVRvSW5zcGVjdG9yKG1lc3NhZ2UpOwogfQogCi12b2lkIFdl
YldvcmtlckNsaWVudEltcGw6OnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoY29uc3QgV2ViU3Ry
aW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5JiBjaGFubmVscykKK3Zv
aWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3IoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQogewotICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4g
Y2hhbm5lbHMyOwotICAgIGlmIChjaGFubmVscy5zaXplKCkpIHsKLSAgICAgICAgY2hhbm5lbHMy
ID0gYWRvcHRQdHIobmV3IE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KGNoYW5uZWxzLnNpemUoKSkp
OwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoYW5uZWxzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw+IHBsYXRmb3Jt
X2NoYW5uZWwgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsOjpjcmVhdGUoY2hhbm5lbHNbaV0pOwotICAgICAgICAgICAgY2hhbm5lbHNbaV0t
PnNldENsaWVudChwbGF0Zm9ybV9jaGFubmVsLmdldCgpKTsKLSAgICAgICAgICAgICgqY2hhbm5l
bHMyKVtpXSA9IE1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y3JlYXRlKHBsYXRmb3JtX2NoYW5uZWwpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGN1cnJlbnRUaHJlYWQoKSAhPSBtX3dvcmtlclRo
cmVhZElkKSB7Ci0gICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0VGFzaywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxs
b3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKG1lc3NhZ2UpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFubmVsczIucmVsZWFzZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwb3N0
TWVzc2FnZVRvV29ya2VyT2JqZWN0VGFzayhtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCks
IHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgY2hhbm5l
bHMyLnJlbGVhc2UoKSk7CisgICAgbV9wcm94eS0+cG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3Io
bWVzc2FnZSk7CiB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwogCi12b2lkIFdlYldv
cmtlckNsaWVudEltcGw6OnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25zdCBXZWJTdHJp
bmcmIGVycm9yTWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBzb3VyY2VVUkwp
Cit2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQogewotICAgIGlmIChjdXJyZW50VGhy
ZWFkKCkgIT0gbV93b3JrZXJUaHJlYWRJZCkgewotICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdEV4Y2VwdGlvblRvV29ya2Vy
T2JqZWN0VGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nKGVycm9yTWVzc2FnZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyhzb3VyY2VV
UkwpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBib29sIHVuaGFuZGxlZCA9IG1f
d29ya2VyLT5kaXNwYXRjaEV2ZW50KEVycm9yRXZlbnQ6OmNyZWF0ZShlcnJvck1lc3NhZ2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc291cmNlVVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIpKTsKLSAgICBpZiAodW5oYW5kbGVk
KQotICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnJlcG9ydEV4Y2VwdGlvbihlcnJv
ck1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCwgMCk7CisgICAgbV9wcm94eS0+cG9zdFRh
c2tUb0xvYWRlcih0YXNrKTsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0Q29u
c29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChpbnQgZGVzdGluYXRpb24sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb3VyY2VJ
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IG1lc3NhZ2VUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVzc2FnZUxldmVsLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJT
dHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHNv
dXJjZVVSTCkKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdFRhc2tGb3JNb2RlVG9Xb3Jr
ZXJDb250ZXh0KFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywg
Y29uc3QgU3RyaW5nJiBtb2RlKQogewotICAgIGlmIChjdXJyZW50VGhyZWFkKCkgIT0gbV93b3Jr
ZXJUaHJlYWRJZCkgewotICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNr
KGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3RUYXNr
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VMZXZlbCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKG1lc3NhZ2Up
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcoc291cmNlVVJMKSkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRNZXNzYWdl
KHN0YXRpY19jYXN0PE1lc3NhZ2VTb3VyY2U+KHNvdXJjZUlkKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWVzc2FnZVR5cGU+KG1lc3NhZ2VU
eXBlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8TWVzc2FnZUxldmVsPihtZXNzYWdlTGV2ZWwpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTdHJpbmcobWVzc2FnZSksIGxpbmVOdW1iZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyhzb3VyY2VVUkwpLCAwKTsKKyAg
ICBtX3Byb3h5LT5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQodGFzaywgbW9kZSk7CiB9
CiAKLXZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJP
YmplY3QoaW50IHNvdXJjZUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVzc2FnZVR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXNzYWdlTGV2
ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFdlYlN0cmluZyYgc291cmNlVVJMKQordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0
TWVzc2FnZVRvV29ya2VyT2JqZWN0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2
YWx1ZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gcG9ydHMpCiB7Ci0gICAg
cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoMCwgc291cmNlSWQsIG1lc3NhZ2VUeXBl
LCBtZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CisgICAgbV9w
cm94eS0+cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdCh2YWx1ZSwgcG9ydHMpOwogfQogCiB2b2lk
IFdlYldvcmtlckNsaWVudEltcGw6OmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29s
IGhhc1BlbmRpbmdBY3Rpdml0eSkKIHsKLSAgICAvLyB1bmNvbmZpcm1lZF9tZXNzYWdlX2NvdW50
XyBjYW4gb25seSBiZSB1cGRhdGVkIG9uIHRoZSB0aHJlYWQgd2hlcmUgaXQncwotICAgIC8vIGFj
Y2Vzc2VkLiAgT3RoZXJ3aXNlIHRoZXJlIGFyZSByYWNlIGNvbmRpdGlvbnMgd2l0aCB2OCdzIGdh
cmJhZ2UKLSAgICAvLyBjb2xsZWN0aW9uLgotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmpl
Y3RUYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGVuZGluZ0FjdGl2
aXR5KSk7CisgICAgbV9wcm94eS0+Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGhhc1Bl
bmRpbmdBY3Rpdml0eSk7CiB9CiAKIHZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cmVwb3J0UGVu
ZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQogewotICAgIC8vIFNlZSBhYm92
ZSBjb21tZW50IGluIGNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdC4KLSAgICBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmcmVwb3J0UGVu
ZGluZ0FjdGl2aXR5VGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1Bl
bmRpbmdBY3Rpdml0eSkpOwotfQotCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6OndvcmtlckNv
bnRleHREZXN0cm95ZWQoKQotewotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d29ya2Vy
Q29udGV4dFRlcm1pbmF0ZWQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCB0aGlzKTsK
KyAgICBtX3Byb3h5LT5yZXBvcnRQZW5kaW5nQWN0aXZpdHkoaGFzUGVuZGluZ0FjdGl2aXR5KTsK
IH0KIAogdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjp3b3JrZXJDb250ZXh0Q2xvc2VkKCkKIHsK
KyAgICBtX3Byb3h5LT53b3JrZXJDb250ZXh0Q2xvc2VkKCk7CiB9CiAKLXZvaWQgV2ViV29ya2Vy
Q2xpZW50SW1wbDo6ZGlzcGF0Y2hEZXZUb29sc01lc3NhZ2UoY29uc3QgV2ViU3RyaW5nJiBtZXNz
YWdlKQordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmpl
Y3QoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCkKIHsKLSAgICBpZiAobV9wYWdlSW5zcGVjdG9yKQotICAgICAgICBtX3Bh
Z2VJbnNwZWN0b3ItPmRpc3BhdGNoTWVzc2FnZUZyb21Xb3JrZXIobWVzc2FnZSk7CisgICAgbV9w
cm94eS0+cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGVycm9yTWVzc2FnZSwgbGluZU51bWJl
ciwgc291cmNlVVJMKTsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpzdGFydFdvcmtl
ckNvbnRleHRUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1w
bCogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTdHJpbmcmIHNjcmlwdFVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNv
dXJjZUNvZGUpCit2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RDb25zb2xlTWVzc2FnZVRv
V29ya2VyT2JqZWN0KE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNz
YWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMKQogewotICAgIHRoaXNQdHItPnN0YXJ0V29ya2VyQ29udGV4
dEludGVybmFsKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBzY3JpcHRVUkwpLCB1c2VyQWdlbnQsIHNv
dXJjZUNvZGUpOworICAgIG1fcHJveHktPnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0
KHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CiB9
CiAKLXZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6dGVybWluYXRlV29ya2VyQ29udGV4dFRhc2so
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0
cikKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6d29ya2VyQ29udGV4dERlc3Ryb3llZCgpCiB7
Ci0gICAgdGhpc1B0ci0+bV93ZWJXb3JrZXItPnRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKTsKKyAg
ICBtX3Byb3h5LT53b3JrZXJDb250ZXh0RGVzdHJveWVkKCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3b3JrZXJDb250ZXh0VGVybWluYXRlZChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuZ2V0KCksIHRoaXMpOwogfQogCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RNZXNz
YWdlVG9Xb3JrZXJDb250ZXh0VGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBh
c3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKQorYm9vbCBXZWJXb3Jr
ZXJDbGllbnRJbXBsOjphbGxvd0ZpbGVTeXN0ZW0oKSAKIHsKLSAgICBXZWJNZXNzYWdlUG9ydENo
YW5uZWxBcnJheSB3ZWJDaGFubmVscyhjaGFubmVscy5nZXQoKSA/IGNoYW5uZWxzLT5zaXplKCkg
OiAwKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViQ2hhbm5lbHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgd2ViQ2hhbm5lbHNbaV0gPSAoKmNoYW5uZWxzKVtpXS0+Y2hhbm5lbCgp
LT53ZWJDaGFubmVsUmVsZWFzZSgpOwotICAgICAgICB3ZWJDaGFubmVsc1tpXS0+c2V0Q2xpZW50
KDApOwotICAgIH0KLQotICAgIHRoaXNQdHItPm1fd2ViV29ya2VyLT5wb3N0TWVzc2FnZVRvV29y
a2VyQ29udGV4dChtZXNzYWdlLCB3ZWJDaGFubmVscyk7CisgICAgV2ViS2l0OjpXZWJWaWV3SW1w
bCogd2ViVmlldyA9IG1fd2ViRnJhbWUtPnZpZXdJbXBsKCk7CisgICAgcmV0dXJuICF3ZWJWaWV3
LT5wZXJtaXNzaW9uQ2xpZW50KCkgfHwgd2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpLT5hbGxv
d0ZpbGVTeXN0ZW0obV93ZWJGcmFtZSk7CiB9CiAKLXZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6
d29ya2VyT2JqZWN0RGVzdHJveWVkVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIpCit2b2lkIFdlYldvcmtlckNsaWVudEltcGw6Om9w
ZW5GaWxlU3lzdGVtKFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJv
b2wgY3JlYXRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzKQogewotICAgIGlmICh0aGlzUHRyLT5tX3dv
cmtlcikgLy8gQ2hlY2sgd2UgaGF2ZW4ndCBhbHJlYWQgY2FsbGVkIHRoaXMuCi0gICAgICAgIHRo
aXNQdHItPm1fd2ViV29ya2VyLT53b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKLSAgICBkZWxldGUg
dGhpc1B0cjsKKyAgICAgbV93ZWJGcmFtZS0+Y2xpZW50KCktPm9wZW5GaWxlU3lzdGVtKG1fd2Vi
RnJhbWUsIHR5cGUsIHNpemUsIGNyZWF0ZSwgY2FsbGJhY2tzKTsKIH0KIAotdm9pZCBXZWJXb3Jr
ZXJDbGllbnRJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0VGFzaygKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFu
bmVscykKK2Jvb2wgV2ViV29ya2VyQ2xpZW50SW1wbDo6YWxsb3dEYXRhYmFzZShXZWJGcmFtZSos
IGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSAKIHsKLQotICAgIGlmICh0aGlzUHRyLT5tX3dvcmtl
cikgewotICAgICAgICBPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMgPQotICAgICAgICAg
ICAgTWVzc2FnZVBvcnQ6OmVudGFuZ2xlUG9ydHMoKmNvbnRleHQsIGNoYW5uZWxzKTsKLSAgICAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZE1lc3NhZ2UgPQotICAg
ICAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShtZXNzYWdlKTsK
LSAgICAgICAgdGhpc1B0ci0+bV93b3JrZXItPmRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50Ojpj
cmVhdGUocG9ydHMucmVsZWFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkTWVzc2FnZS5yZWxlYXNlKCkp
KTsKLSAgICB9CisgICAgIFdlYktpdDo6V2ViVmlld0ltcGwqIHdlYlZpZXcgPSBtX3dlYkZyYW1l
LT52aWV3SW1wbCgpOworICAgICByZXR1cm4gIXdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKSB8
fCB3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCktPmFsbG93RGF0YWJhc2UobV93ZWJGcmFtZSwg
bmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOwogfQotCi12b2lkIFdlYldvcmtlckNs
aWVudEltcGw6OnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdFRhc2soCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlzUHRyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgc291cmNlVVJMKQorIAordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpkaXNwYXRjaERldlRv
b2xzTWVzc2FnZShjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgYm9vbCBoYW5kbGVk
ID0gZmFsc2U7Ci0gICAgaWYgKHRoaXNQdHItPm1fd29ya2VyKQotICAgICAgICBoYW5kbGVkID0g
dGhpc1B0ci0+bV93b3JrZXItPmRpc3BhdGNoRXZlbnQoRXJyb3JFdmVudDo6Y3JlYXRlKGVycm9y
TWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VVUkwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJl
cikpOwotICAgIGlmICghaGFuZGxlZCkKLSAgICAgICAgdGhpc1B0ci0+bV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5yZXBvcnRFeGNlcHRpb24oZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3Vy
Y2VVUkwsIDApOworICAgIGlmIChtX3BhZ2VJbnNwZWN0b3IpCisgICAgICAgIG1fcGFnZUluc3Bl
Y3Rvci0+ZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlcihtZXNzYWdlKTsKIH0KIAotdm9pZCBXZWJX
b3JrZXJDbGllbnRJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2soU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwq
IHRoaXNQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgc291cmNlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVzc2FnZVR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgbWVzc2FnZUxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKLXsKLSAg
ICB0aGlzUHRyLT5tX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZE1lc3NhZ2Uoc3RhdGljX2Nh
c3Q8TWVzc2FnZVNvdXJjZT4oc291cmNlSWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNZXNzYWdlVHlwZT4obWVzc2FnZVR5
cGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxNZXNzYWdlTGV2ZWw+KG1lc3NhZ2VMZXZlbCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNv
dXJjZVVSTCwgMCk7CitXZWJWaWV3KiBXZWJXb3JrZXJDbGllbnRJbXBsOjp2aWV3KCkgY29uc3Qg
Cit7ICAgCisgICAgcmV0dXJuIG1fd2ViRnJhbWUtPnZpZXcoKTsgCiB9CiAKLXZvaWQgV2ViV29y
a2VyQ2xpZW50SW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0VGFzayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQ
dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCitXZWJXb3JrZXJDbGllbnRJbXBsOjpX
ZWJXb3JrZXJDbGllbnRJbXBsKFdvcmtlciogd29ya2VyLCBXZWJGcmFtZUltcGwqIHdlYkZyYW1l
KQorICAgIDogbV9wcm94eShuZXcgV29ya2VyTWVzc2FnaW5nUHJveHkod29ya2VyKSkKKyAgICAs
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCh3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSkKKyAgICAsIG1fd2ViRnJhbWUod2ViRnJhbWUpICAgIAorICAgICwgbV9wYWdlSW5zcGVjdG9y
KDApCisKIHsKLSAgICB0aGlzUHRyLT5tX3VuY29uZmlybWVkTWVzc2FnZUNvdW50LS07Ci0gICAg
dGhpc1B0ci0+bV93b3JrZXJDb250ZXh0SGFkUGVuZGluZ0FjdGl2aXR5ID0gaGFzUGVuZGluZ0Fj
dGl2aXR5OwogfQogCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnJlcG9ydFBlbmRpbmdBY3Rp
dml0eVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBs
KiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQorV2ViV29ya2VyQ2xpZW50SW1wbDo6fldl
YldvcmtlckNsaWVudEltcGwoKQogewotICAgIHRoaXNQdHItPm1fd29ya2VyQ29udGV4dEhhZFBl
bmRpbmdBY3Rpdml0eSA9IGhhc1BlbmRpbmdBY3Rpdml0eTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJD
bGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJ
bXBsLmgKaW5kZXggYzI3MGZmYy4uM2QyMzQxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuaApAQCAtMzMsMzcgKzMzLDQwIEBACiAKICNp
ZiBFTkFCTEUoV09SS0VSUykKIAorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
KyNpbmNsdWRlICJXb3JrZXJDb250ZXh0UHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQ
cm94eS5oIgorI2luY2x1ZGUgIldvcmtlck1lc3NhZ2luZ1Byb3h5LmgiCisjaW5jbHVkZSAiV29y
a2VyT2JqZWN0UHJveHkuaCIKKwogI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRl
ICJXZWJXb3JrZXJCYXNlLmgiCiAjaW5jbHVkZSAiV2ViV29ya2VyQ2xpZW50LmgiCi0jaW5jbHVk
ZSAiV29ya2VyQ29udGV4dFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotfQogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIGNsYXNzIFdlYldvcmtlcjsKK2NsYXNzIFdlYkZyYW1lSW1wbDsKIAotLy8g
VGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBpcyB0byBwcm92aWRlIGEgV29ya2VyQ29udGV4dFBy
b3h5Ci0vLyBpbXBsZW1lbnRhdGlvbiB0aGF0IHdlIGNhbiBnaXZlIHRvIFdlYktpdC4gIEludGVy
bmFsbHksIGl0IGNvbnZlcnRzIHRoZQotLy8gZGF0YSB0eXBlcyB0byBDaHJvbWUgY29tcGF0aWJs
ZSBvbmVzIHNvIHRoYXQgcmVuZGVyZXIgY29kZSBjYW4gdXNlIGl0IG92ZXIKLS8vIElQQy4KKy8v
IFRoaXMgY2xhc3MgcHJvdmlkZXMgY2hyb21pdW0gaW1wbGVtZW50YXRpb24gZm9yIFdvcmtlckNv
bnRleHRQcm94dCwgV29ya2VyT2JqZWN0UHJveHkgYW1kIFdvcmtlckxvYWRlclByb3h5CisvLyBm
b3IgaW4tcHJvYyBkZWRpY2F0ZWQgd29ya2Vycy4gSXQgYWxzbyBhY3RzIGFzIGEgYnJpZGdlIGZv
ciB3b3JrZXJzIHRvIGNocm9taXVtIGltcGxlbWVudGF0aW9uIG9mIGZpbGUgc3lzdGVtcywKKy8v
IGRhdGFiYXNlcyBhbmQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgorLy8KKy8vIEluIGVz
c2VuY2UsIHRoaXMgY2xhc3Mgd3JhcHMgV29ya2VyTWVzc2FnaW5nUHJveHkuCiBjbGFzcyBXZWJX
b3JrZXJDbGllbnRJbXBsIDogcHVibGljIFdlYkNvcmU6OldvcmtlckNvbnRleHRQcm94eQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJXb3JrZXJDbGllbnQgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJDb3JlOjpXb3JrZXJPYmplY3RQcm94eQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBOZXdXZWJXb3JrZXJCYXNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCB7
CiBwdWJsaWM6Ci0gICAgV2ViV29ya2VyQ2xpZW50SW1wbChXZWJDb3JlOjpXb3JrZXIqKTsKLQog
ICAgIC8vIFdlYkNvcmU6OldvcmtlckNvbnRleHRQcm94eSBGYWN0b3J5LgogICAgIHN0YXRpYyBX
ZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHkqIGNyZWF0ZVdvcmtlckNvbnRleHRQcm94eShXZWJD
b3JlOjpXb3JrZXIqKTsKLSAgICB2b2lkIHNldFdlYldvcmtlcihXZWJXb3JrZXIqKTsKIAogICAg
IC8vIFdlYkNvcmU6OldvcmtlckNvbnRleHRQcm94eSBtZXRob2RzOgogICAgIC8vIFRoZXNlIGFy
ZSBjYWxsZWQgb24gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHdvcmtlci4gIEluIHRoZSBy
ZW5kZXJlcgotICAgIC8vIHByb2Nlc3MsIHRoaXMgd2lsbCBiZSB0aGUgbWFpbiBXZWJLaXQgdGhy
ZWFkLiAgSW4gdGhlIHdvcmtlciBwcm9jZXNzLCB0aGlzCi0gICAgLy8gd2lsbCBiZSB0aGUgdGhy
ZWFkIG9mIHRoZSBleGVjdXRpbmcgd29ya2VyIChub3QgdGhlIG1haW4gV2ViS2l0IHRocmVhZCku
CisgICAgLy8gcHJvY2VzcywgdGhpcyB3aWxsIGJlIHRoZSBtYWluIFdlYktpdCB0aHJlYWQuCiAg
ICAgdmlydHVhbCB2b2lkIHN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBXZWJDb3JlOjpLVVJMJiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJik7
CkBAIC03NCwxMDMgKzc3LDQ4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGlu
Z0FjdGl2aXR5KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHdvcmtlck9iamVjdERlc3Ryb3ll
ZCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGNvbm5lY3RUb0luc3BlY3RvcihXb3JrZXJDb250ZXh0
UHJveHk6OlBhZ2VJbnNwZWN0b3IqKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIHZpcnR1
YWwgdm9pZCBjb25uZWN0VG9JbnNwZWN0b3IoV2ViQ29yZTo6V29ya2VyQ29udGV4dFByb3h5OjpQ
YWdlSW5zcGVjdG9yKik7CiAgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3RGcm9tSW5zcGVjdG9y
KCk7CiAgICAgdmlydHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9JbnNwZWN0b3IoY29uc3QgU3RyaW5n
Jik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yKGNvbnN0IFN0
cmluZyYpOworI2VuZGlmCisgICAgLy8gV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkgbWV0aG9k
czoKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tUb0xvYWRlcihQYXNzT3duUHRyPFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFRh
c2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4sIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAKLSAgICAvLyBXZWJXb3Jr
ZXJDbGllbnQgbWV0aG9kczoKLSAgICAvLyBUaGVzZSBhcmUgY2FsbGVkIG9uIHRoZSBtYWluIFdl
YktpdCB0aHJlYWQuCi0gICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3Qo
Y29uc3QgV2ViU3RyaW5nJiwgY29uc3QgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFdlYlN0cmlu
ZyYsIGludCwgY29uc3QgV2ViU3RyaW5nJik7CisgICAgLy8gV2ViQ29yZTo6V29ya2VyT2JqZWN0
UHJveHkgbWV0aG9kczoKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVj
dChQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NPd25QdHI8
V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9z
dEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogCi0gICAgLy8gRklYTUU6IHRo
ZSBiZWxvdyBpcyBmb3IgY29tcGF0aWJpbGl0eSBvbmx5IGFuZCBzaG91bGQgYmUKLSAgICAvLyBy
ZW1vdmVkIG9uY2UgQ2hyb21pdW0gaXMgdXBkYXRlZCB0byByZW1vdmUgbWVzc2FnZQotICAgIC8v
IGRlc3RpbmF0aW9uIHBhcmFtZXRlciA8aHR0cDovL3dlYmtpdC5vcmcvYi8zNzE1NT4uCi0gICAg
dmlydHVhbCB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KGludCwgaW50LCBp
bnQsIGludCwgY29uc3QgV2ViU3RyaW5nJiwgaW50LCBjb25zdCBXZWJTdHJpbmcmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoaW50LCBpbnQsIGlu
dCwgY29uc3QgV2ViU3RyaW5nJiwgaW50LCBjb25zdCBXZWJTdHJpbmcmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoV2ViQ29yZTo6TWVzc2FnZVNv
dXJjZSwgV2ViQ29yZTo6TWVzc2FnZVR5cGUsIFdlYkNvcmU6Ok1lc3NhZ2VMZXZlbCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogICAg
IHZpcnR1YWwgdm9pZCBjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoYm9vbCk7CiAgICAg
dmlydHVhbCB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sKTsKICAgICB2aXJ0dWFsIHZv
aWQgd29ya2VyQ29udGV4dENsb3NlZCgpOwogICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0
RGVzdHJveWVkKCk7Ci0gICAgdmlydHVhbCBXZWJXb3JrZXIqIGNyZWF0ZVdvcmtlcihXZWJXb3Jr
ZXJDbGllbnQqKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBXZWJOb3RpZmljYXRpb25QcmVz
ZW50ZXIqIG5vdGlmaWNhdGlvblByZXNlbnRlcigpCi0gICAgewotICAgICAgICAvLyBGSVhNRTog
Tm90aWZpY2F0aW9ucyBub3QgeWV0IHN1cHBvcnRlZCBpbiB3b3JrZXJzLgotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgdmlydHVhbCBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogY3JlYXRl
QXBwbGljYXRpb25DYWNoZUhvc3QoV2ViQXBwbGljYXRpb25DYWNoZUhvc3RDbGllbnQqKSB7IHJl
dHVybiAwOyB9Ci0gICAgdmlydHVhbCBib29sIGFsbG93RGF0YWJhc2UoV2ViRnJhbWUqLCBjb25z
dCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgdmlydHVhbCBib29sIGFsbG93Rmls
ZVN5c3RlbSgpCi0gICAgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQorCisgICAgLy8gV2ViV29ya2VyQ2xpZW50QmFzZSBtZXRob2Rz
OgorICAgIHZpcnR1YWwgYm9vbCBhbGxvd0RhdGFiYXNlKFdlYkZyYW1lKiwgY29uc3QgV2ViU3Ry
aW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUpOworICAgIHZpcnR1YWwgYm9vbCBhbGxvd0ZpbGVTeXN0ZW0oKTsKKyAgICB2
aXJ0dWFsIHZvaWQgb3BlbkZpbGVTeXN0ZW0oV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25n
IHNpemUsIGJvb2wgY3JlYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJG
aWxlU3lzdGVtQ2FsbGJhY2tzKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZXZUb29s
c01lc3NhZ2UoY29uc3QgV2ViU3RyaW5nJik7CiAKKyAgICAvLyBXZWJDb21tZW50V29ya2VyQmFz
ZSBtZXRob2RzOgorICAgIHZpcnR1YWwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBuZXdDb21t
b25DbGllbnQoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBXZWJWaWV3KiB2aWV3KCkg
Y29uc3Q7CisKIHByaXZhdGU6CisgICAgV2ViV29ya2VyQ2xpZW50SW1wbChXZWJDb3JlOjpXb3Jr
ZXIqLCBXZWJGcmFtZUltcGwqKTsKICAgICB2aXJ0dWFsIH5XZWJXb3JrZXJDbGllbnRJbXBsKCk7
CiAKLSAgICAvLyBNZXRob2RzIHVzZWQgdG8gc3VwcG9ydCBXZWJXb3JrZXJDbGllbnRJbXBsIGJl
aW5nIGNvbnN0cnVjdGVkIG9uIHdvcmtlcgotICAgIC8vIHRocmVhZHMuCi0gICAgLy8gVGhlc2Ug
dGFza3MgYXJlIGRpc3BhdGNoZWQgb24gdGhlIFdlYktpdCB0aHJlYWQuCi0gICAgc3RhdGljIHZv
aWQgc3RhcnRXb3JrZXJDb250ZXh0VGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29y
a2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBzY3JpcHRVUkwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYgdXNlckFnZW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJj
ZUNvZGUpOwotICAgIHN0YXRpYyB2b2lkIHRlcm1pbmF0ZVdvcmtlckNvbnRleHRUYXNrKFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0cik7Ci0g
ICAgc3RhdGljIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHRUYXNrKFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6U3Ry
aW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQYXNzT3duUHRyPFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVs
cyk7Ci0gICAgc3RhdGljIHZvaWQgd29ya2VyT2JqZWN0RGVzdHJveWVkVGFzayhXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0cik7Ci0KLSAgICAv
LyBUaGVzZSB0YXNrcyBhcmUgZGlzcGF0Y2hlZCBvbiB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0
aGUgd29ya2VyIChpLmUuCi0gICAgLy8gbWFpbiBXZWJLaXQgdGhyZWFkIGluIHJlbmRlcmVyIHBy
b2Nlc3MsIGFuZCB0aGUgd29ya2VyIHRocmVhZCBpbiB0aGUKLSAgICAvLyB3b3JrZXIgcHJvY2Vz
cykuCi0gICAgc3RhdGljIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2soV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlzUHRyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6
U3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5u
ZWxzKTsKLSAgICBzdGF0aWMgdm9pZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3RUYXNrKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlz
UHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VVUkwpOwot
ICAgIHN0YXRpYyB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0VGFzayhXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0
aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgc291cmNlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBtZXNzYWdlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VMZXZlbCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV1RGOjpT
dHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYgc291cmNlVVJMKTsK
LSAgICBzdGF0aWMgdm9pZCBjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3RUYXNrKFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlz
UHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOwotICAgIHN0YXRpYyB2b2lkIHJlcG9ydFBlbmRpbmdB
Y3Rpdml0eVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudElt
cGwqIHRoaXNQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGhhc1BlbmRpbmdBY3Rpdml0eSk7Ci0KLSAgICB2b2lkIHN0YXJ0V29ya2VyQ29udGV4dElu
dGVybmFsKGNvbnN0IFdlYkNvcmU6OktVUkwmIHNjcmlwdFVSTCwgY29uc3QgV1RGOjpTdHJpbmcm
IHVzZXJBZ2VudCwgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZUNvZGUpOwotCisgICAgV2ViQ29y
ZTo6V29ya2VyTWVzc2FnaW5nUHJveHkqIG1fcHJveHk7CiAgICAgLy8gR3VhcmQgYWdhaW5zdCBj
b250ZXh0IGZyb20gYmVpbmcgZGVzdHJveWVkIGJlZm9yZSBhIHdvcmtlciBleGl0cy4KICAgICBS
ZWZQdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0OwotCi0gICAgV2ViQ29yZTo6V29ya2VyKiBtX3dvcmtlcjsKLSAgICBXZWJXb3JrZXIq
IG1fd2ViV29ya2VyOwotICAgIGJvb2wgbV9hc2tlZFRvVGVybWluYXRlOwotICAgIHVuc2lnbmVk
IG1fdW5jb25maXJtZWRNZXNzYWdlQ291bnQ7Ci0gICAgYm9vbCBtX3dvcmtlckNvbnRleHRIYWRQ
ZW5kaW5nQWN0aXZpdHk7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX3dvcmtlclRocmVhZElkOwot
ICAgIFdvcmtlckNvbnRleHRQcm94eTo6UGFnZUluc3BlY3RvciogbV9wYWdlSW5zcGVjdG9yOwor
ICAgIFdlYkZyYW1lSW1wbCogbV93ZWJGcmFtZTsKKyAgICBXZWJDb3JlOjpXb3JrZXJDb250ZXh0
UHJveHk6OlBhZ2VJbnNwZWN0b3IqIG1fcGFnZUluc3BlY3RvcjsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldv
cmtlckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VySW1wbC5j
cHAKaW5kZXggNmM5ZjQ1Yy4uZGMxNjNhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViV29ya2VySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViV29ya2VySW1wbC5jcHAKQEAgLTc0LDYgKzc0LDExIEBAIFdlYldvcmtlckltcGw6On5X
ZWJXb3JrZXJJbXBsKCkKIHsKIH0KIAorTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBXZWJXb3Jr
ZXJJbXBsOjpuZXdDb21tb25DbGllbnQoKQoreworICAgIHJldHVybiBtX2NsaWVudDsKK30KKwog
V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBXZWJXb3JrZXJJbXBsOjpjb21tb25DbGllbnQoKQogewog
ICAgIHJldHVybiBtX2NsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYldvcmtlckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtl
ckltcGwuaAppbmRleCA3OWM5YzU0Li45NDdhMTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViV29ya2VySW1wbC5oCkBAIC02NSw2ICs2NSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIFdlYldvcmtlckNsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KICAgICB2
aXJ0dWFsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KCk7CiAKKyAgICAvLyBO
ZXdXZWJXb3JrZXJCYXNlIG1ldGhvZHM6CisgICAgdmlydHVhbCBOZXdXZWJDb21tb25Xb3JrZXJD
bGllbnQqIG5ld0NvbW1vbkNsaWVudCgpOworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgfldlYldv
cmtlckltcGwoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcAppbmRleCAxN2M3NzU0Li4x
M2ZlZjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcApAQCAtMTU2LDcgKzE1Niw3IEBA
IHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6c3RvcCgpCiAgICAgfQogfQog
Ci12b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RPcGVuRmlsZVN5c3Rl
bVRvTWFpblRocmVhZChXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRmls
ZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIGNvbnN0IFN0
cmluZyYgbW9kZSkKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE9w
ZW5GaWxlU3lzdGVtVG9NYWluVGhyZWFkKE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9u
Q2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNy
ZWF0ZSwgY29uc3QgU3RyaW5nJiBtb2RlKQogewogICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVh
ZCgKICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVh
ZCwKQEAgLTI1MSw3ICsyNTEsNyBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2U6OnBvc3RSZWFkRGlyZWN0b3J5VG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgbW9kZSkpOwog
fQogCi12b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6Om9wZW5GaWxlU3lzdGVt
T25NYWluVGhyZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb21tb25Xb3JrZXJDbGll
bnQqIGNvbW1vbkNsaWVudCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6
ZSwgYm9vbCBjcmVhdGUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqIGJyaWRnZSwg
Y29uc3QgU3RyaW5nJiBtb2RlKQordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
OjpvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTmV3
V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUg
dHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlKiBicmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKICAgICBpZiAoIWNvbW1v
bkNsaWVudCkKICAgICAgICAgYnJpZGdlLT5kaWRGYWlsT25NYWluVGhyZWFkKFdlYkZpbGVFcnJv
ckFib3J0LCBtb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaAppbmRleCBiYjQ4NDc5Li4wMjhm
MzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKKyNpbmNsdWRlICJXZWJDb21tb25Xb3JrZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJGaWxl
RXJyb3IuaCIKICNpbmNsdWRlICJXZWJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiV2ViVmVjdG9y
LmgiCkBAIC01Miw3ICs1Myw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgQXN5bmNGaWxl
U3lzdGVtOwogY2xhc3MgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M7CiBjbGFzcyBUaHJl
YWRhYmxlQ2FsbGJhY2tzQnJpZGdlV3JhcHBlcjsKLWNsYXNzIFdlYkNvbW1vbldvcmtlckNsaWVu
dDsKK2NsYXNzIFdlYkNvbW1vbldvcmtlckNsaWVudEJhc2U7CiBjbGFzcyBXZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzOwogc3RydWN0IFdlYkZpbGVJbmZvOwogc3RydWN0IFdlYkZpbGVTeXN0ZW1FbnRy
eTsKQEAgLTg3LDcgKzg4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIE1ldGhvZHMgdGhh
dCBjcmVhdGUgYW4gaW5zdGFuY2UgYW5kIHBvc3QgYW4gaW5pdGlhbCByZXF1ZXN0IHRhc2sgdG8g
dGhlIG1haW4gdGhyZWFkLiBUaGV5IG11c3QgYmUgY2FsbGVkIG9uIHRoZSB3b3JrZXIgdGhyZWFk
LgotICAgIHZvaWQgcG9zdE9wZW5GaWxlU3lzdGVtVG9NYWluVGhyZWFkKFdlYkNvbW1vbldvcmtl
ckNsaWVudCosIFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0
ZSwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICB2b2lkIHBvc3RPcGVuRmlsZVN5c3RlbVRvTWFp
blRocmVhZChOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBs
b25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9p
ZCBwb3N0TW92ZVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6S1VS
TCYgc3JjUGF0aCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZGVzdFBhdGgsIGNvbnN0IFN0cmluZyYg
bW9kZSk7CiAgICAgdm9pZCBwb3N0Q29weVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiwgY29u
c3QgV2ViQ29yZTo6S1VSTCYgc3JjUGF0aCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZGVzdFBhdGgs
IGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBwb3N0UmVtb3ZlVG9NYWluVGhyZWFkKFdl
YkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBjb25zdCBTdHJpbmcmIG1v
ZGUpOwpAQCAtMTEwLDcgKzExMSw3IEBAIHByaXZhdGU6CiAgICAgV29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSosIFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKik7CiAKICAgICAvLyBN
ZXRob2RzIHRoYXQgYXJlIHRvIGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgc3Rh
dGljIHZvaWQgb3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFdlYkNvbW1vbldvcmtlckNsaWVudCosIFdlYkZpbGVTeXN0ZW06OlR5cGUs
IGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgc3RhdGljIHZvaWQgb3BlbkZpbGVTeXN0
ZW1Pbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE5ld1dlYkNv
bW1vbldvcmtlckNsaWVudCosIFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBi
b29sIGNyZWF0ZSwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0IFN0cmlu
ZyYgbW9kZSk7CiAgICAgc3RhdGljIHZvaWQgbW92ZU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwm
IHNyY1BhdGgsIGNvbnN0IFdlYkNvcmU6OktVUkwmIGRlc3RQYXRoLCBXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICBzdGF0aWMgdm9pZCBj
b3B5T25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxl
U3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgc3JjUGF0aCwgY29uc3QgV2ViQ29yZTo6S1VS
TCYgZGVzdFBhdGgsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJp
bmcmIG1vZGUpOwogICAgIHN0YXRpYyB2b2lkIHJlbW92ZU9uTWFpblRocmVhZChXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktV
UkwmIHBhdGgsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcm
IG1vZGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104089</attachid>
            <date>2011-08-16 14:15:42 -0700</date>
            <delta_ts>2011-08-18 11:23:29 -0700</delta_ts>
            <desc>Rename issue fixed (thanks David!)</desc>
            <filename>61016.patch</filename>
            <type>text/plain</type>
            <size>54756</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMTEwYjhlYy4uOTA0MmJmNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MiBAQAorMjAxMS0wOC0xNSAgRG1pdHJ5IExv
bW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MTAxNgorICAgICAgICBbV2ViV29ya2Vyc11bQ2hyb21pdW1d
IFVzZSB2OCBJc29sYXRlcyBmb3IgaW4tcHJvY2VzcyBpbXBsZW1lbnRhdGlvbiBvZiBXZWJXb3Jr
ZXJzLgorICAgICAgICBUaGlzIGFkZHMgYW4gaW1wbGVtZW50YXRpb24gb2YgaW4tcHJvY2VzcyBk
ZWRpY2F0ZWQgd29ya2VycyB0byBjaHJvbWl1bSBwb3J0LgorICAgICAgICBUaGUgY3J1eCBvZiB0
aGUgbWF0dGVyIGlzIHRoZSByZWltcGxlbWVudGF0aW9uIG9mIFdlYldvcmtlckNsaWVudEltcGwu
IFdlYldvcmtlckNsaWVudEltcGwgbm93IAorICAgICAgICBpbXBsZW1lbnRzIGFsbCB0aHJlZSBv
ZiBXb3JrZXJ7TG9hZGVyLENvbnRleHQsT2JqZWN0fVByb3hpZXMgYW5kIGRlbGVnYXRlcyB0aGUg
aW1wbGVtZW50YXRpb24gdG8gCisgICAgICAgIFdlYktpdCdzIHN0YW5kYXJkIFdvcmtlck1lc3Nh
Z2luZ1Byb3h5LgorICAgICAgICBGb3Igbm93LCB3ZSBoYXZlIDMgaW1wbGVtZW50YXRpb25zIG9m
IHdvcmtlcnMgaW4gY2hyb21pdW0gV2ViS2l0OgorICAgICAgICAgIC0gSW4tcHJvY2VzcyBkZWRp
Y2F0ZWQgd29ya2VycyAodGhpcyBjaGVja2luKQorICAgICAgICAgIC0gSW50ZXItcHJvY2VzcyBz
aGFyZWQgd29ya2VycworICAgICAgICAgIC0gSW50ZXItcHJvY2VzcyBkZWRpY2F0ZWQgd29ya2Vy
cyAoZGVmdW5jdCBhZnRlciB0aGlzIGNoZWNraW4pCisgICAgICAgIFRoaXMgcGF0Y2ggZXh0cmFj
dHMgc29tZSBuZXcgY29tbW9uIGludGVyZmFjZXMgKFdlYkNvbW1vbldvcmtlckJhc2UgYW5kIFdl
YkNvbW1vbldvcmtlckNsaWVudCkgZm9yIHRoZXNlIAorICAgICAgICB0aHJlZSBpbXBsZW1lbnRh
dGlvbnMuIAorICAgICAgICBSZW1vdmluZyB0aGUgcmVtYWluaW5ncyBvZiBpbnRlci1wcm9jZXNz
IGRlZGljYXRlZCB3b3JrZXJzIC1yZWxhdGVkIGNsYXNzZXMgaXMgbGVmdCBmb3IgYSBzZXBhcmF0
ZSBwYXRjaCAKKyAgICAgICAgKGl0IHdpbGwgcmVxdWlyZSBjb29yZGluYXRlZCBjaGFuZ2VzIG9u
IGNocm9tdWl1bSBzaWRlKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHB1YmxpYy9XZWJDb21tb25Xb3JrZXJDbGllbnQuaDoKKyAgICAgICAgKiBz
cmMvRGF0YWJhc2VPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkFsbG93RGF0YWJhc2VN
YWluVGhyZWFkQnJpZGdlOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpBbGxvd0RhdGFiYXNl
TWFpblRocmVhZEJyaWRnZTo6QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZTo6YWxsb3dEYXRhYmFzZVRh
c2spOgorICAgICAgICAoV2ViS2l0OjphbGxvd0RhdGFiYXNlRm9yV29ya2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlT2JzZXJ2ZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKToKKyAgICAg
ICAgKiBzcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
b3BlbkZpbGVTeXN0ZW1IZWxwZXIpOgorICAgICAgICAqIHNyYy9XZWJTaGFyZWRXb3JrZXJJbXBs
Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6Om5ld0NvbW1vbkNsaWVu
dCk6CisgICAgICAgICogc3JjL1dlYldvcmtlckJhc2UuaDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
V29ya2VyQmFzZTo6dmlldyk6CisgICAgICAgICogc3JjL1dlYldvcmtlckNsaWVudEltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpjcmVhdGVXb3JrZXJDb250
ZXh0UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpzdGFydFdv
cmtlckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjp0ZXJt
aW5hdGVXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1w
bDo6cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3Jr
ZXJDbGllbnRJbXBsOjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJX
b3JrZXJDbGllbnRJbXBsOjp3b3JrZXJPYmplY3REZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpjb25uZWN0VG9JbnNwZWN0b3IpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpkaXNjb25uZWN0RnJvbUluc3BlY3Rvcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OnNlbmRNZXNzYWdlVG9JbnNwZWN0b3Ip
OgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0TWVzc2FnZVRvUGFn
ZUluc3BlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OnBvc3RU
YXNrVG9Mb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0
VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJD
bGllbnRJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViV29ya2VyQ2xpZW50SW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6cmVwb3J0UGVuZGluZ0FjdGl2aXR5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6d29ya2VyQ29udGV4dENs
b3NlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6OnBvc3RFeGNlcHRp
b25Ub1dvcmtlck9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckNsaWVudEltcGw6
OnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
V29ya2VyQ2xpZW50SW1wbDo6d29ya2VyQ29udGV4dERlc3Ryb3llZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYldvcmtlckNsaWVudEltcGw6OmFsbG93RmlsZVN5c3RlbSk6CisgICAgICAgIChXZWJL
aXQ6OldlYldvcmtlckNsaWVudEltcGw6Om9wZW5GaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYktp
dDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6YWxsb3dEYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYldvcmtlckNsaWVudEltcGw6OmRpc3BhdGNoRGV2VG9vbHNNZXNzYWdlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViV29ya2VyQ2xpZW50SW1wbDo6dmlldyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YldvcmtlckNsaWVudEltcGw6OldlYldvcmtlckNsaWVudEltcGwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJXb3JrZXJDbGllbnRJbXBsOjp+V2ViV29ya2VyQ2xpZW50SW1wbCk6CisgICAgICAgICog
c3JjL1dlYldvcmtlckNsaWVudEltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQ2xp
ZW50SW1wbDo6bmV3Q29tbW9uQ2xpZW50KToKKyAgICAgICAgKiBzcmMvV2ViV29ya2VySW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYldvcmtlckltcGw6Om5ld0NvbW1vbkNsaWVudCk6Cisg
ICAgICAgICogc3JjL1dlYldvcmtlckltcGwuaDoKKyAgICAgICAgKiBzcmMvV29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZCk6CisgICAg
ICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6Om9wZW5GaWxlU3lz
dGVtT25NYWluVGhyZWFkKToKKyAgICAgICAgKiBzcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZS5oOgorCiAyMDExLTA4LTE2ICBTdGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIHNob3VsZCBhbGxvdyBpdHMg
aG9zdFdpbmRvdyB0byBiZSBOVUxMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJDb21tb25Xb3JrZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oCmluZGV4IDM1MmEyYzAuLjQ5NDRhZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtl
ckNsaWVudC5oCkBAIC00NCwxMiArNDQsMjUgQEAgY2xhc3MgV2ViU3RyaW5nOwogY2xhc3MgV2Vi
V29ya2VyOwogY2xhc3MgV2ViV29ya2VyQ2xpZW50OwogCitjbGFzcyBOZXdXZWJDb21tb25Xb3Jr
ZXJDbGllbnQgeworcHVibGljOgorICAgIC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQgdGhy
ZWFkIGJlZm9yZSBvcGVuaW5nIGEgd2ViIGRhdGFiYXNlLgorICAgIHZpcnR1YWwgYm9vbCBhbGxv
d0RhdGFiYXNlKFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpID0gMDsKKworICAg
IC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQgdGhyZWFkIGJlZm9yZSBvcGVuaW5nIGEgZmls
ZSBzeXN0ZW0uCisgICAgdmlydHVhbCBib29sIGFsbG93RmlsZVN5c3RlbSgpID0gMDsKKworICAg
IC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQgdGhyZWFkIGJlZm9yZSBvcGVuaW5nIGEgZmls
ZSBzeXN0ZW0uCisgICAgdmlydHVhbCB2b2lkIG9wZW5GaWxlU3lzdGVtKFdlYkZpbGVTeXN0ZW06
OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNr
cyopID0gMDsKK307CisKKwogLy8gUHJvdmlkZXMgYW4gaW50ZXJmYWNlIGJhY2sgdG8gdGhlIGlu
LXBhZ2Ugc2NyaXB0IG9iamVjdCBmb3IgYSB3b3JrZXIuCiAvLyBUaGlzIGludGVyZmFjZSBjb250
YWlucyBjb21tb24gQVBJcyB1c2VkIGJ5IGJvdGggc2hhcmVkIGFuZCBkZWRpY2F0ZWQKIC8vIHdv
cmtlcnMuCiAvLyBBbGwgZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0byBiZSBjYWxsZWQgYmFjayBv
biB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZAogLy8gdGhlIFdvcmtlciBvYmplY3QsIHVubGVzcyBu
b3RlZC4KLWNsYXNzIFdlYkNvbW1vbldvcmtlckNsaWVudCB7CitjbGFzcyBXZWJDb21tb25Xb3Jr
ZXJDbGllbnQgOiBwdWJsaWMgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50IHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KAogICAgICAgICBjb25z
dCBXZWJTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbGluZU51bWJlciwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAKaW5kZXggNTFjNDhkOC4uMjZm
NWQxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNl
cnZlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZl
ci5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlICJXZWJQZXJtaXNzaW9uQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiV2ViU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5o
IgotI2luY2x1ZGUgIldlYldvcmtlckltcGwuaCIKKyNpbmNsdWRlICJXZWJXb3JrZXJCYXNlLmgi
CiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5
LmgiCiAjaW5jbHVkZSAiV29ya2VyU2NyaXB0Q29udHJvbGxlci5oIgpAQCAtNjQsNyArNjQsNyBA
QCBzdGF0aWMgY29uc3QgY2hhciBhbGxvd0RhdGFiYXNlTW9kZVtdID0gImFsbG93RGF0YWJhc2VN
b2RlIjsKIC8vIGNhbGwgYmFjayB0byB0aGUgd29ya2VyIGNvbnRleHQuCiBjbGFzcyBBbGxvd0Rh
dGFiYXNlTWFpblRocmVhZEJyaWRnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBbGxv
d0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29ya2Vy
TG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwg
V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29u
c3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFsbG93RGF0
YWJhc2VNYWluVGhyZWFkQnJpZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkq
IHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgTmV3V2ViQ29tbW9u
V29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpT
dHJpbmcmIG5hbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9u
ZyBlc3RpbWF0ZWRTaXplKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBbGxv
d0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZSh3b3JrZXJMb2FkZXJQcm94eSwgbW9kZSwgY29tbW9u
Q2xpZW50LCBmcmFtZSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKICAgICB9
CkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQWxsb3dE
YXRhYmFzZU1haW5UaHJlYWRCcmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtl
ckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xp
ZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIG5h
bWUsIGNvbnN0IFdURjo6U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0
ZWRTaXplKQorICAgIEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlKFdlYkNvcmU6Oldvcmtl
ckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUs
IE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSogZnJhbWUs
IGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKICAgICAgICAgOiBtX3dvcmtlckxvYWRlclBy
b3h5KHdvcmtlckxvYWRlclByb3h5KQogICAgICAgICAsIG1fbW9kZShtb2RlKQogICAgIHsKQEAg
LTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYkNvcmU6OkFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBhbGxvd0RhdGFiYXNlVGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJh
bWUqIGZyYW1lLCBjb25zdCBXVEY6OlN0cmluZyBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyBkaXNw
bGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPEFsbG93RGF0
YWJhc2VNYWluVGhyZWFkQnJpZGdlPiBicmlkZ2UpCisgICAgc3RhdGljIHZvaWQgYWxsb3dEYXRh
YmFzZVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTmV3V2Vi
Q29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3Qg
V1RGOjpTdHJpbmcgbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJy
aWRnZT4gYnJpZGdlKQogICAgIHsKICAgICAgICAgaWYgKGNvbW1vbkNsaWVudCkKICAgICAgICAg
ICAgIGJyaWRnZS0+c2lnbmFsQ29tcGxldGVkKGNvbW1vbkNsaWVudC0+YWxsb3dEYXRhYmFzZShm
cmFtZSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpKTsKQEAgLTEyMiw3ICsxMjIs
NyBAQCBwcml2YXRlOgogICAgIFdURjo6U3RyaW5nIG1fbW9kZTsKIH07CiAKLWJvb2wgYWxsb3dE
YXRhYmFzZUZvcldvcmtlcihXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2Vi
RnJhbWUqIGZyYW1lLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKK2Jvb2wgYWxsb3dEYXRhYmFz
ZUZvcldvcmtlcihOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJh
bWUqIGZyYW1lLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKIHsKICAgICBXZWJDb3JlOjpXb3Jr
ZXJTY3JpcHRDb250cm9sbGVyKiBjb250cm9sbGVyID0gV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29u
dHJvbGxlcjo6Y29udHJvbGxlckZvckNvbnRleHQoKTsKICAgICBXZWJDb3JlOjpXb3JrZXJDb250
ZXh0KiB3b3JrZXJDb250ZXh0ID0gY29udHJvbGxlci0+d29ya2VyQ29udGV4dCgpOwpAQCAtMTY1
LDggKzE2NSw4IEBAIGJvb2wgRGF0YWJhc2VPYnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2Uo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0CiAjaWYgRU5BQkxFKFdPUktFUlMp
CiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxXb3Jr
ZXJDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgICAgIFdvcmtlckxvYWRl
clByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICZ3b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29y
a2VyTG9hZGVyUHJveHkoKTsKLSAgICAgICAgV2ViV29ya2VyQmFzZSogd2ViV29ya2VyID0gc3Rh
dGljX2Nhc3Q8V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKLSAgICAgICAgcmV0
dXJuIGFsbG93RGF0YWJhc2VGb3JXb3JrZXIod2ViV29ya2VyLT5jb21tb25DbGllbnQoKSwgd2Vi
V29ya2VyLT53ZWJWaWV3KCktPm1haW5GcmFtZSgpLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSk7CisgICAgICAgIE5ld1dlYldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19j
YXN0PE5ld1dlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94eSk7CisgICAgICAgIHJldHVy
biBhbGxvd0RhdGFiYXNlRm9yV29ya2VyKHdlYldvcmtlci0+bmV3Q29tbW9uQ2xpZW50KCksIHdl
Yldvcmtlci0+dmlldygpLT5tYWluRnJhbWUoKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRl
ZFNpemUpOwogI2Vsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9t
aXVtLmNwcAppbmRleCBiMzNjZTJhLi5kZmU1Y2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCkBAIC00MCw3ICs0
MCw2IEBACiAjaW5jbHVkZSAiRmlsZVN5c3RlbUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRmlsZVN5
c3RlbUNhbGxiYWNrcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAi
V2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRmlsZUVycm9yLmgiCiAjaW5j
bHVkZSAiV2ViRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJ
bXBsLmgiCkBAIC00OCw3ICs0Nyw3IEBACiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCiAjaW5j
bHVkZSAiV2ViUGVybWlzc2lvbkNsaWVudC5oIgogI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCi0j
aW5jbHVkZSAiV2ViV29ya2VySW1wbC5oIgorI2luY2x1ZGUgIldlYldvcmtlckJhc2UuaCIKICNp
bmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZS5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgpAQCAtODAsNyArNzksNyBA
QCBzdGF0aWMgY29uc3QgY2hhciBvcGVuRmlsZVN5c3RlbU1vZGVbXSA9ICJvcGVuRmlsZVN5c3Rl
bU1vZGUiOwogLy8gY2FsbCBiYWNrIHRvIHRoZSB3b3JrZXIgY29udGV4dC4KIGNsYXNzIEFsbG93
RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJDb3Jl
OjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5n
JiBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlPiBjcmVhdGUoV2ViQ29y
ZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmlu
ZyYgbW9kZSwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQpCiAgICAgewog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlk
Z2Uod29ya2VyTG9hZGVyUHJveHksIG1vZGUsIGNvbW1vbkNsaWVudCkpOwogICAgIH0KQEAgLTEw
Nyw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEFsbG93RmlsZVN5
c3RlbU1haW5UaHJlYWRCcmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxv
YWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50
KiBjb21tb25DbGllbnQpCisgICAgQWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZShXZWJD
b3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3Ry
aW5nJiBtb2RlLCBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKICAgICAg
ICAgOiBtX3dvcmtlckxvYWRlclByb3h5KHdvcmtlckxvYWRlclByb3h5KQogICAgICAgICAsIG1f
bW9kZShtb2RlKQogICAgIHsKQEAgLTExNiw3ICsxMTUsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhbGxvd0ZpbGVTeXN0ZW1UYXNrKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9u
Q2xpZW50LCBQYXNzUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRn
ZSkKKyAgICBzdGF0aWMgdm9pZCBhbGxvd0ZpbGVTeXN0ZW1UYXNrKFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9u
Q2xpZW50LCBQYXNzUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRn
ZSkKICAgICB7CiAgICAgICAgIGlmIChjb21tb25DbGllbnQpCiAgICAgICAgICAgICBicmlkZ2Ut
PnNpZ25hbENvbXBsZXRlZChjb21tb25DbGllbnQtPmFsbG93RmlsZVN5c3RlbSgpKTsKQEAgLTEz
NSw3ICsxMzQsNyBAQCBwcml2YXRlOgogICAgIFdURjo6U3RyaW5nIG1fbW9kZTsKIH07CiAKLWJv
b2wgYWxsb3dGaWxlU3lzdGVtRm9yV29ya2VyKFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9u
Q2xpZW50KQorYm9vbCBhbGxvd0ZpbGVTeXN0ZW1Gb3JXb3JrZXIoTmV3V2ViQ29tbW9uV29ya2Vy
Q2xpZW50KiBjb21tb25DbGllbnQpCiB7CiAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7
CiAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNv
bnRleHQoKTsKQEAgLTE1OCw3ICsxNTcsNyBAQCBib29sIGFsbG93RmlsZVN5c3RlbUZvcldvcmtl
cihXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKICAgICByZXR1cm4gYnJpZGdl
LT5yZXN1bHQoKTsKIH0KIAotdm9pZCBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcihXZWJDb21tb25X
b3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25n
IGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNr
cywgYm9vbCBzeW5jaHJvbm91cykKK3ZvaWQgb3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoTmV3V2Vi
Q29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlw
ZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBj
YWxsYmFja3MsIGJvb2wgc3luY2hyb25vdXMpCiB7CiAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250
ZXh0KCk7CiAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndv
cmtlckNvbnRleHQoKTsKQEAgLTIwNCwxMSArMjAzLDEyIEBAIHN0YXRpYyB2b2lkIG9wZW5GaWxl
U3lzdGVtSGVscGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5
c3RlCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNv
bnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCk7CiAgICAgICAgIFdv
cmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICZ3b3JrZXJDb250ZXh0LT50aHJl
YWQoKS0+d29ya2VyTG9hZGVyUHJveHkoKTsKLSAgICAgICAgV2ViV29ya2VyQmFzZSogd2ViV29y
a2VyID0gc3RhdGljX2Nhc3Q8V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKLSAg
ICAgICAgaWYgKCFhbGxvd0ZpbGVTeXN0ZW1Gb3JXb3JrZXIod2ViV29ya2VyLT5jb21tb25DbGll
bnQoKSkpCisgICAgICAgIE5ld1dlYldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0
PE5ld1dlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94eSk7CisgICAgICAgIGlmICghYWxs
b3dGaWxlU3lzdGVtRm9yV29ya2VyKHdlYldvcmtlci0+bmV3Q29tbW9uQ2xpZW50KCkpKQogICAg
ICAgICAgICAgYWxsb3dlZCA9IGZhbHNlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBvcGVu
RmlsZVN5c3RlbUZvcldvcmtlcih3ZWJXb3JrZXItPmNvbW1vbkNsaWVudCgpLCBzdGF0aWNfY2Fz
dDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90
UHJlc2VudCwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwg
Y29udGV4dCwgc3luY2hyb25vdXMpLCBzeW5jaHJvbm91cyk7CisgICAgICAgICAgICBvcGVuRmls
ZVN5c3RlbUZvcldvcmtlcih3ZWJXb3JrZXItPm5ld0NvbW1vbkNsaWVudCgpLCBzdGF0aWNfY2Fz
dDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90
UHJlc2VudCwgbmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwg
Y29udGV4dCwgc3luY2hyb25vdXMpLCBzeW5jaHJvbm91cyk7CisKICNlbHNlCiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmgKaW5kZXggZDFiNjRiYS4uNTAzNjQyNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2hhcmVkV29ya2VySW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuaApAQCAt
NjQsNiArNjQsOSBAQCBwdWJsaWM6CiAgICAgV2ViV29ya2VyQ2xpZW50KiBjbGllbnQoKTsKICAg
ICBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50
OyB9CiAKKyAgICAvLyBOZXdXZWJXb3JrZXJCYXNlIG1ldGhvZHM6CisgICAgTmV3V2ViQ29tbW9u
V29ya2VyQ2xpZW50KiBuZXdDb21tb25DbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQorCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgfldlYlNoYXJlZFdvcmtlckltcGwoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oCmluZGV4IGIwZTUxZjEuLjk1NmFiOGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmgKQEAgLTM0LDkg
KzM0LDExIEBACiAjaWYgRU5BQkxFKFdPUktFUlMpCiAKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCisjaW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiV2ViRnJhbWVDbGllbnQuaCIKICNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgogI2lu
Y2x1ZGUgIldvcmtlck9iamVjdFByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAg
LTU1LDE3ICs1NywzMCBAQCBjbGFzcyBXZWJWaWV3OwogY2xhc3MgV2ViV29ya2VyOwogY2xhc3Mg
V2ViV29ya2VyQ2xpZW50OwogCisKKy8vIEJhc2UgY2xhc3MgZm9yIFdlYlNoYXJlZFdvcmtlcklt
cGwsIFdlYldvcmtlckNsaWVudEltcGwgYW5kIChkZWZ1bmN0KSBXZWJXb3JrZXJJbXBsCisvLyBj
b250YWluaW5nIGNvbW1vbiBpbnRlcmZhY2UgZm9yIHNoYXJlZCB3b3JrZXJzIGFuZCBkZWRpY2F0
ZWQgaW4tcHJvYyB3b3JrZXJzIGltcGxlbWVudGF0aW9uLgorLy8KKy8vIEZJWE1FOiBSZW5hbWUg
dGhpcyBjbGFzcyBpbnRvIFdlYldvcmtlckJhc2UsIG1lcmdlIGV4aXN0aW5nIFdlYldvcmtlckJh
c2UgYW5kIFdlYlNoYXJlZFdvcmtlci4KK2NsYXNzIE5ld1dlYldvcmtlckJhc2UgOiBwdWJsaWMg
V2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkgeworcHVibGljOgorICAgIHZpcnR1YWwgTmV3V2Vi
Q29tbW9uV29ya2VyQ2xpZW50KiBuZXdDb21tb25DbGllbnQoKSA9IDA7CisgICAgdmlydHVhbCBX
ZWJWaWV3KiB2aWV3KCkgY29uc3QgPSAwOworfTsKKworCisKIC8vIEJhc2UgY2xhc3MgZm9yIFdl
YlNoYXJlZFdvcmtlckltcGwgYW5kIFdlYldvcmtlckltcGwuIEl0IGNvbnRhaW5zIGNvbW1vbgog
Ly8gY29kZSB1c2VkIGJ5IGJvdGggaW1wbGVtZW50YXRpb24gY2xhc3NlcywgaW5jbHVkaW5nIGlt
cGxlbWVudGF0aW9ucyBvZiB0aGUKIC8vIFdvcmtlck9iamVjdFByb3h5IGFuZCBXb3JrZXJMb2Fk
ZXJQcm94eSBpbnRlcmZhY2VzLgogY2xhc3MgV2ViV29ya2VyQmFzZSA6IHB1YmxpYyBXZWJDb3Jl
OjpXb3JrZXJPYmplY3RQcm94eQotICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJDb3Jl
OjpXb3JrZXJMb2FkZXJQcm94eQorICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBOZXdXZWJX
b3JrZXJCYXNlCiAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFdlYkZyYW1lQ2xpZW50IHsK
IHB1YmxpYzoKICAgICBXZWJXb3JrZXJCYXNlKCk7CiAgICAgdmlydHVhbCB+V2ViV29ya2VyQmFz
ZSgpOwogCi0gICAgLy8gV2ViQ29yZTo6V29ya2VyT2JqZWN0UHJveHkgbWV0aG9kczoKKyAgICAv
LyBXZWJDb21tb25Xb3JrZXJCYXNlIG1ldGhvZHM6CiAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNz
YWdlVG9Xb3JrZXJPYmplY3QoCiAgICAgICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiwKICAgICAgICAgUGFzc093blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENo
YW5uZWxBcnJheT4pOwpAQCAtNzksNiArOTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29u
dGV4dENsb3NlZCgpOwogICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0RGVzdHJveWVkKCk7
CisgICAgdmlydHVhbCBXZWJWaWV3KiB2aWV3KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3OyB9
CiAKICAgICAvLyBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSBtZXRob2RzOgogICAgIHZpcnR1
YWwgdm9pZCBwb3N0VGFza1RvTG9hZGVyKFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4pOwpAQCAtOTIsMTEgKzEwOCw4IEBAIHB1YmxpYzoKICAgICAvLyBF
eGVjdXRlcyB0aGUgZ2l2ZW4gdGFzayBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgc3RhdGljIHZv
aWQgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4pOwogCi0gICAgV2ViVmlldyogd2ViVmlldygpIGNvbnN0IHsg
cmV0dXJuIG1fd2ViVmlldzsgfQotCi0gICAgdmlydHVhbCBXZWJDb21tb25Xb3JrZXJDbGllbnQq
IGNvbW1vbkNsaWVudCgpID0gMDsKLQogcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgV2ViQ29tbW9u
V29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSA9IDA7CiAgICAgdmlydHVhbCBXZWJXb3JrZXJD
bGllbnQqIGNsaWVudCgpID0gMDsKIAogICAgIHZvaWQgc2V0V29ya2VyVGhyZWFkKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6V29ya2VyVGhyZWFkPiB0aHJlYWQpIHsgbV93b3JrZXJUaHJlYWQgPSB0aHJl
YWQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNs
aWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50
SW1wbC5jcHAKaW5kZXggYzE5OGNjZi4uZTgxZTc0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5jcHAKQEAgLTU5LDYgKzU5LDcgQEAK
ICNpbmNsdWRlICJXZWJLaXQuaCIKICNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKICNpbmNsdWRl
ICJXZWJNZXNzYWdlUG9ydENoYW5uZWwuaCIKKyNpbmNsdWRlICJXZWJQZXJtaXNzaW9uQ2xpZW50
LmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVk
ZSAiV2ViVmlld0ltcGwuaCIKQEAgLTY5LDM4NyArNzAsMTY0IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotLy8gV2hlbiBXZWJLaXQgY3JlYXRlcyBh
IFdvcmtlckNvbnRleHRQcm94eSBvYmplY3QsIHdlIGNoZWNrIGlmIHdlJ3JlIGluIHRoZQotLy8g
cmVuZGVyZXIgb3Igd29ya2VyIHByb2Nlc3MuICBJZiB0aGUgbGF0dGVyLCB0aGVuIHdlIGp1c3Qg
dXNlCi0vLyBXb3JrZXJNZXNzYWdpbmdQcm94eS4KLS8vCi0vLyBJZiB3ZSdyZSBpbiB0aGUgcmVu
ZGVyZXIgcHJvY2VzcywgdGhlbiB3ZSBuZWVkIHVzZSB0aGUgZ2x1ZSBwcm92aWRlZAotLy8gV2Vi
V29ya2VyIG9iamVjdCB0byB0YWxrIHRvIHRoZSB3b3JrZXIgcHJvY2VzcyBvdmVyIElQQy4gIFRo
ZSB3b3JrZXIgcHJvY2VzcwotLy8gdGFsa3MgdG8gV29ya2VyKiB1c2luZyBXb3JrZXJPYmplY3RQ
cm94eSwgd2hpY2ggd2UgaW1wbGVtZW50IG9uCi0vLyBXZWJXb3JrZXJDbGllbnRJbXBsLgotLy8K
LS8vIE5vdGUgdGhhdCBpZiB3ZSdyZSBydW5uaW5nIGVhY2ggd29ya2VyIGluIGEgc2VwYXJhdGUg
cHJvY2VzcywgdGhlbiBuZXN0ZWQKLS8vIHdvcmtlcnMgZW5kIHVwIHVzaW5nIHRoZSBzYW1lIGNv
ZGVwYXRoIGFzIHRoZSByZW5kZXJlciBwcm9jZXNzLgorLy8gQ2hyb21pdW0tc3BlY2lmaWMgd3Jh
cHBlciBvdmVyIFdvcmtlck1lc3NhZ2luZ1Byb3h5LgorLy8gRGVsZWdhdGVzIGltcGxlbWVudGF0
aW9uIG9mIFdvcmtlcntMb2FkZXIsQ29udGV4dCxPYmplY3R9UHJveHkgdG8gV29ya2VyTWVzc2Fn
aW5nUHJveHkuCiAKIC8vIHN0YXRpYwogV29ya2VyQ29udGV4dFByb3h5KiBXZWJXb3JrZXJDbGll
bnRJbXBsOjpjcmVhdGVXb3JrZXJDb250ZXh0UHJveHkoV29ya2VyKiB3b3JrZXIpCiB7Ci0gICAg
Ly8gU3BlY2lhbCBiZWhhdmlvciBmb3IgbXVsdGlwbGUgd29ya2VycyBwZXIgcHJvY2Vzcy4KLSAg
ICAvLyBGSVhNRTogdjggZG9lc24ndCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgd29ya2VycyBwZXIg
cHJvY2Vzcy4KLSAgICAvLyBpZiAoIXdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5p
c0RvY3VtZW50KCkpCi0gICAgLy8gICAgIHJldHVybiBuZXcgV29ya2VyTWVzc2FnaW5nUHJveHko
d29ya2VyKTsKLQotICAgIFdlYldvcmtlciogd2ViV29ya2VyID0gMDsKLSAgICBXZWJXb3JrZXJD
bGllbnRJbXBsKiBwcm94eSA9IG5ldyBXZWJXb3JrZXJDbGllbnRJbXBsKHdvcmtlcik7Ci0KICAg
ICBpZiAod29ya2VyLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSkgewot
ICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KAotICAg
ICAgICAgICAgd29ya2VyLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHdvcmtlci0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKTsKICAgICAgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZy
YW1lSW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKLSAgICAgICAgd2ViV29ya2Vy
ID0gd2ViRnJhbWUtPmNsaWVudCgpLT5jcmVhdGVXb3JrZXIod2ViRnJhbWUsIHByb3h5KTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBjb250cm9sbGVyID0g
V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6Y29udHJvbGxlckZvckNvbnRleHQoKTsKLSAgICAgICAg
aWYgKCFjb250cm9sbGVyKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgRGVkaWNhdGVkV29ya2Vy
VGhyZWFkKiB0aHJlYWQgPSBzdGF0aWNfY2FzdDxEZWRpY2F0ZWRXb3JrZXJUaHJlYWQqPihjb250
cm9sbGVyLT53b3JrZXJDb250ZXh0KCktPnRocmVhZCgpKTsKLSAgICAgICAgV29ya2VyT2JqZWN0
UHJveHkqIHdvcmtlck9iamVjdFByb3h5ID0gJnRocmVhZC0+d29ya2VyT2JqZWN0UHJveHkoKTsK
LSAgICAgICAgV2ViV29ya2VySW1wbCogaW1wbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViV29ya2Vy
SW1wbCo+KHdvcmtlck9iamVjdFByb3h5KTsKLSAgICAgICAgd2ViV29ya2VyID0gaW1wbC0+Y2xp
ZW50KCktPmNyZWF0ZVdvcmtlcihwcm94eSk7Ci0gICAgfQotCi0gICAgcHJveHktPnNldFdlYldv
cmtlcih3ZWJXb3JrZXIpOwotICAgIHJldHVybiBwcm94eTsKLX0KLQotV2ViV29ya2VyQ2xpZW50
SW1wbDo6V2ViV29ya2VyQ2xpZW50SW1wbChXb3JrZXIqIHdvcmtlcikKLSAgICA6IG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCh3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAs
IG1fd29ya2VyKHdvcmtlcikKLSAgICAsIG1fYXNrZWRUb1Rlcm1pbmF0ZShmYWxzZSkKLSAgICAs
IG1fdW5jb25maXJtZWRNZXNzYWdlQ291bnQoMCkKLSAgICAsIG1fd29ya2VyQ29udGV4dEhhZFBl
bmRpbmdBY3Rpdml0eShmYWxzZSkKLSAgICAsIG1fd29ya2VyVGhyZWFkSWQoY3VycmVudFRocmVh
ZCgpKQotICAgICwgbV9wYWdlSW5zcGVjdG9yKDApCi17Ci19Ci0KLVdlYldvcmtlckNsaWVudElt
cGw6On5XZWJXb3JrZXJDbGllbnRJbXBsKCkKLXsKKyAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1w
bCogcHJveHkgPSBuZXcgV2ViV29ya2VyQ2xpZW50SW1wbCh3b3JrZXIsIHdlYkZyYW1lKTsKKyAg
ICAgICAgcmV0dXJuIHByb3h5OyAKKyAgICB9IAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiAwOwogfQogCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnNldFdlYldvcmtl
cihXZWJXb3JrZXIqIHdlYldvcmtlcikKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6c3RhcnRX
b3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdl
bnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSkKIHsKLSAgICBtX3dlYldvcmtlciA9IHdlYldv
cmtlcjsKLX0KLQotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpzdGFydFdvcmtlckNvbnRleHQo
Y29uc3QgS1VSTCYgc2NyaXB0VVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpCi17Ci0g
ICAgLy8gV29ya2VyLnRlcm1pbmF0ZSgpIGNvdWxkIGJlIGNhbGxlZCBmcm9tIEpTIGJlZm9yZSB0
aGUgY29udGV4dCBpcyBzdGFydGVkLgotICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIWlzTWFpblRocmVhZCgpKSB7Ci0gICAgICAgIFdlYldvcmtl
ckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soCi0gICAg
ICAgICAgICAmc3RhcnRXb3JrZXJDb250ZXh0VGFzaywKLSAgICAgICAgICAgIEFsbG93Q3Jvc3NU
aHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICBzY3JpcHRVUkwuc3RyaW5nKCksCi0gICAg
ICAgICAgICB1c2VyQWdlbnQsCi0gICAgICAgICAgICBzb3VyY2VDb2RlKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgc3RhcnRXb3JrZXJDb250ZXh0SW50ZXJuYWwoc2NyaXB0VVJMLCB1
c2VyQWdlbnQsIHNvdXJjZUNvZGUpOwotfQotCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnN0
YXJ0V29ya2VyQ29udGV4dEludGVybmFsKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgV1RG
OjpTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZUNvZGUpCi17Ci0g
ICAgbV93ZWJXb3JrZXItPnN0YXJ0V29ya2VyQ29udGV4dChzY3JpcHRVUkwsIHVzZXJBZ2VudCwg
c291cmNlQ29kZSk7Ci0gICAgbV93b3JrZXJDb250ZXh0SGFkUGVuZGluZ0FjdGl2aXR5ID0gdHJ1
ZTsgLy8gV29ya2VyIGluaXRpYWxpemF0aW9uIG1lYW5zIGEgcGVuZGluZyBhY3Rpdml0eS4KKyAg
ICBSZWZQdHI8RGVkaWNhdGVkV29ya2VyVGhyZWFkPiB0aHJlYWQgPSBEZWRpY2F0ZWRXb3JrZXJU
aHJlYWQ6OmNyZWF0ZShzY3JpcHRVUkwsIHVzZXJBZ2VudCwgc291cmNlQ29kZSwgKnRoaXMsICp0
aGlzKTsKKyAgICBtX3Byb3h5LT53b3JrZXJUaHJlYWRDcmVhdGVkKHRocmVhZCk7CisgICAgdGhy
ZWFkLT5zdGFydCgpOwogfQogCiB2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnRlcm1pbmF0ZVdv
cmtlckNvbnRleHQoKQogewotICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX2Fza2VkVG9UZXJtaW5hdGUgPSB0cnVlOwotICAgIGlmICghaXNNYWluVGhy
ZWFkKCkpIHsKLSAgICAgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFk
KAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZ0ZXJtaW5hdGVXb3JrZXJDb250ZXh0
VGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIG1fd2ViV29ya2VyLT50ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCk7CisgICAgbV9w
cm94eS0+dGVybWluYXRlV29ya2VyQ29udGV4dCgpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d29ya2VyQ29udGV4dFRlcm1pbmF0ZWQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0Lmdl
dCgpLCB0aGlzKTsKIH0KIAogdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0TWVzc2FnZVRv
V29ya2VyQ29udGV4dCgKLSAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVz
c2FnZSwKLSAgICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscykK
KyAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIAorICAgIFBhc3NP
d25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IHBvcnRzKQogewotICAgIC8vIFdvcmtlci50
ZXJtaW5hdGUoKSBjb3VsZCBiZSBjYWxsZWQgZnJvbSBKUyBiZWZvcmUgdGhlIGNvbnRleHQgaXMg
c3RhcnRlZC4KLSAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQotICAgICAgICByZXR1cm47Ci0g
ICAgKyttX3VuY29uZmlybWVkTWVzc2FnZUNvdW50OwotICAgIGlmICghaXNNYWluVGhyZWFkKCkp
IHsKLSAgICAgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0
ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHRUYXNrLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS0+dG9XaXJl
U3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbHMpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSB3ZWJDaGFubmVscyhjaGFubmVscy5nZXQo
KSA/IGNoYW5uZWxzLT5zaXplKCkgOiAwKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdl
YkNoYW5uZWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbCog
d2ViY2hhbm5lbCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKmNoYW5uZWxzKVtpXS0+Y2hh
bm5lbCgpLT53ZWJDaGFubmVsUmVsZWFzZSgpOwotICAgICAgICB3ZWJjaGFubmVsLT5zZXRDbGll
bnQoMCk7Ci0gICAgICAgIHdlYkNoYW5uZWxzW2ldID0gd2ViY2hhbm5lbDsKLSAgICB9Ci0gICAg
bV93ZWJXb3JrZXItPnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KG1lc3NhZ2UtPnRvV2lyZVN0
cmluZygpLCB3ZWJDaGFubmVscyk7CisgICAgbV9wcm94eS0+cG9zdE1lc3NhZ2VUb1dvcmtlckNv
bnRleHQodmFsdWUsIHBvcnRzKTsKIH0KIAogYm9vbCBXZWJXb3JrZXJDbGllbnRJbXBsOjpoYXNQ
ZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogewotICAgIHJldHVybiAhbV9hc2tlZFRvVGVybWluYXRl
Ci0gICAgICAgICAgICYmIChtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50IHx8IG1fd29ya2VyQ29u
dGV4dEhhZFBlbmRpbmdBY3Rpdml0eSk7CisgICAgcmV0dXJuIG1fcHJveHktPmhhc1BlbmRpbmdB
Y3Rpdml0eSgpOwogfQogCiB2b2lkIFdlYldvcmtlckNsaWVudEltcGw6Ondvcmtlck9iamVjdERl
c3Ryb3llZCgpCiB7Ci0gICAgaWYgKGlzTWFpblRocmVhZCgpKSB7Ci0gICAgICAgIG1fd2ViV29y
a2VyLT53b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKLSAgICAgICAgbV93b3JrZXIgPSAwOwotICAg
IH0KLSAgICAvLyBFdmVuIGlmIHRoaXMgaXMgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCwgdGhl
cmUgY291bGQgYmUgYSBxdWV1ZWQgdGFzayBmb3IKLSAgICAvLyB0aGlzIG9iamVjdCwgc28gZG9u
J3QgZGVsZXRlIGl0IHJpZ2h0IGF3YXkuCi0gICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNr
VG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyT2JqZWN0RGVzdHJveWVkVGFz
aywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKKyAgICBtX3Byb3h5LT53
b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpj
b25uZWN0VG9JbnNwZWN0b3IoV29ya2VyQ29udGV4dFByb3h5OjpQYWdlSW5zcGVjdG9yKiBwYWdl
SW5zcGVjdG9yKQorI2lmIEVOQUJMRShJTlNQRUNUT1IpCit2b2lkIFdlYldvcmtlckNsaWVudElt
cGw6OmNvbm5lY3RUb0luc3BlY3RvcihQYWdlSW5zcGVjdG9yKiBpbnNwZWN0b3IpCiB7CisgICAg
bV9wcm94eS0+Y29ubmVjdFRvSW5zcGVjdG9yKGluc3BlY3Rvcik7CiAgICAgQVNTRVJUKCFtX3Bh
Z2VJbnNwZWN0b3IpOwotICAgIG1fcGFnZUluc3BlY3RvciA9IHBhZ2VJbnNwZWN0b3I7Ci0gICAg
bV93ZWJXb3JrZXItPmF0dGFjaERldlRvb2xzKCk7CisgICAgbV9wYWdlSW5zcGVjdG9yID0gaW5z
cGVjdG9yOwogfQogCiB2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OmRpc2Nvbm5lY3RGcm9tSW5z
cGVjdG9yKCkKIHsKLSAgICBpZiAoIW1fYXNrZWRUb1Rlcm1pbmF0ZSkKLSAgICAgICAgbV93ZWJX
b3JrZXItPmRldGFjaERldlRvb2xzKCk7CiAgICAgbV9wYWdlSW5zcGVjdG9yID0gMDsKKyAgICBt
X3Byb3h5LT5kaXNjb25uZWN0RnJvbUluc3BlY3RvcigpOwogfQogCiB2b2lkIFdlYldvcmtlckNs
aWVudEltcGw6OnNlbmRNZXNzYWdlVG9JbnNwZWN0b3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQog
ewotICAgIG1fd2ViV29ya2VyLT5kaXNwYXRjaERldlRvb2xzTWVzc2FnZShtZXNzYWdlKTsKKyAg
ICBtX3Byb3h5LT5zZW5kTWVzc2FnZVRvSW5zcGVjdG9yKG1lc3NhZ2UpOwogfQogCi12b2lkIFdl
YldvcmtlckNsaWVudEltcGw6OnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoY29uc3QgV2ViU3Ry
aW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5JiBjaGFubmVscykKK3Zv
aWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3IoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQogewotICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4g
Y2hhbm5lbHMyOwotICAgIGlmIChjaGFubmVscy5zaXplKCkpIHsKLSAgICAgICAgY2hhbm5lbHMy
ID0gYWRvcHRQdHIobmV3IE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KGNoYW5uZWxzLnNpemUoKSkp
OwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoYW5uZWxzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw+IHBsYXRmb3Jt
X2NoYW5uZWwgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsOjpjcmVhdGUoY2hhbm5lbHNbaV0pOwotICAgICAgICAgICAgY2hhbm5lbHNbaV0t
PnNldENsaWVudChwbGF0Zm9ybV9jaGFubmVsLmdldCgpKTsKLSAgICAgICAgICAgICgqY2hhbm5l
bHMyKVtpXSA9IE1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y3JlYXRlKHBsYXRmb3JtX2NoYW5uZWwpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGN1cnJlbnRUaHJlYWQoKSAhPSBtX3dvcmtlclRo
cmVhZElkKSB7Ci0gICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0VGFzaywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxs
b3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKG1lc3NhZ2UpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFubmVsczIucmVsZWFzZSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwb3N0
TWVzc2FnZVRvV29ya2VyT2JqZWN0VGFzayhtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCks
IHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgY2hhbm5l
bHMyLnJlbGVhc2UoKSk7CisgICAgbV9wcm94eS0+cG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3Io
bWVzc2FnZSk7CiB9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwogCi12b2lkIFdlYldv
cmtlckNsaWVudEltcGw6OnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25zdCBXZWJTdHJp
bmcmIGVycm9yTWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBzb3VyY2VVUkwp
Cit2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQogewotICAgIGlmIChjdXJyZW50VGhy
ZWFkKCkgIT0gbV93b3JrZXJUaHJlYWRJZCkgewotICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdEV4Y2VwdGlvblRvV29ya2Vy
T2JqZWN0VGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nKGVycm9yTWVzc2FnZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyhzb3VyY2VV
UkwpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBib29sIHVuaGFuZGxlZCA9IG1f
d29ya2VyLT5kaXNwYXRjaEV2ZW50KEVycm9yRXZlbnQ6OmNyZWF0ZShlcnJvck1lc3NhZ2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc291cmNlVVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIpKTsKLSAgICBpZiAodW5oYW5kbGVk
KQotICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnJlcG9ydEV4Y2VwdGlvbihlcnJv
ck1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCwgMCk7CisgICAgbV9wcm94eS0+cG9zdFRh
c2tUb0xvYWRlcih0YXNrKTsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0Q29u
c29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChpbnQgZGVzdGluYXRpb24sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb3VyY2VJ
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IG1lc3NhZ2VUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVzc2FnZUxldmVsLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJT
dHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHNv
dXJjZVVSTCkKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdFRhc2tGb3JNb2RlVG9Xb3Jr
ZXJDb250ZXh0KFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywg
Y29uc3QgU3RyaW5nJiBtb2RlKQogewotICAgIGlmIChjdXJyZW50VGhyZWFkKCkgIT0gbV93b3Jr
ZXJUaHJlYWRJZCkgewotICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNr
KGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3RUYXNr
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VJZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VMZXZlbCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKG1lc3NhZ2Up
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcoc291cmNlVVJMKSkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRNZXNzYWdl
KHN0YXRpY19jYXN0PE1lc3NhZ2VTb3VyY2U+KHNvdXJjZUlkKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8TWVzc2FnZVR5cGU+KG1lc3NhZ2VU
eXBlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8TWVzc2FnZUxldmVsPihtZXNzYWdlTGV2ZWwpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTdHJpbmcobWVzc2FnZSksIGxpbmVOdW1iZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyhzb3VyY2VVUkwpLCAwKTsKKyAg
ICBtX3Byb3h5LT5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQodGFzaywgbW9kZSk7CiB9
CiAKLXZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJP
YmplY3QoaW50IHNvdXJjZUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVzc2FnZVR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZXNzYWdlTGV2
ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFdlYlN0cmluZyYgc291cmNlVVJMKQordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0
TWVzc2FnZVRvV29ya2VyT2JqZWN0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2
YWx1ZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gcG9ydHMpCiB7Ci0gICAg
cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoMCwgc291cmNlSWQsIG1lc3NhZ2VUeXBl
LCBtZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CisgICAgbV9w
cm94eS0+cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdCh2YWx1ZSwgcG9ydHMpOwogfQogCiB2b2lk
IFdlYldvcmtlckNsaWVudEltcGw6OmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29s
IGhhc1BlbmRpbmdBY3Rpdml0eSkKIHsKLSAgICAvLyB1bmNvbmZpcm1lZF9tZXNzYWdlX2NvdW50
XyBjYW4gb25seSBiZSB1cGRhdGVkIG9uIHRoZSB0aHJlYWQgd2hlcmUgaXQncwotICAgIC8vIGFj
Y2Vzc2VkLiAgT3RoZXJ3aXNlIHRoZXJlIGFyZSByYWNlIGNvbmRpdGlvbnMgd2l0aCB2OCdzIGdh
cmJhZ2UKLSAgICAvLyBjb2xsZWN0aW9uLgotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmpl
Y3RUYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGVuZGluZ0FjdGl2
aXR5KSk7CisgICAgbV9wcm94eS0+Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGhhc1Bl
bmRpbmdBY3Rpdml0eSk7CiB9CiAKIHZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6cmVwb3J0UGVu
ZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQogewotICAgIC8vIFNlZSBhYm92
ZSBjb21tZW50IGluIGNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdC4KLSAgICBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmcmVwb3J0UGVu
ZGluZ0FjdGl2aXR5VGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1Bl
bmRpbmdBY3Rpdml0eSkpOwotfQotCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6OndvcmtlckNv
bnRleHREZXN0cm95ZWQoKQotewotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d29ya2Vy
Q29udGV4dFRlcm1pbmF0ZWQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCB0aGlzKTsK
KyAgICBtX3Byb3h5LT5yZXBvcnRQZW5kaW5nQWN0aXZpdHkoaGFzUGVuZGluZ0FjdGl2aXR5KTsK
IH0KIAogdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjp3b3JrZXJDb250ZXh0Q2xvc2VkKCkKIHsK
KyAgICBtX3Byb3h5LT53b3JrZXJDb250ZXh0Q2xvc2VkKCk7CiB9CiAKLXZvaWQgV2ViV29ya2Vy
Q2xpZW50SW1wbDo6ZGlzcGF0Y2hEZXZUb29sc01lc3NhZ2UoY29uc3QgV2ViU3RyaW5nJiBtZXNz
YWdlKQordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmpl
Y3QoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCkKIHsKLSAgICBpZiAobV9wYWdlSW5zcGVjdG9yKQotICAgICAgICBtX3Bh
Z2VJbnNwZWN0b3ItPmRpc3BhdGNoTWVzc2FnZUZyb21Xb3JrZXIobWVzc2FnZSk7CisgICAgbV9w
cm94eS0+cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGVycm9yTWVzc2FnZSwgbGluZU51bWJl
ciwgc291cmNlVVJMKTsKIH0KIAotdm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpzdGFydFdvcmtl
ckNvbnRleHRUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1w
bCogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTdHJpbmcmIHNjcmlwdFVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNv
dXJjZUNvZGUpCit2b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RDb25zb2xlTWVzc2FnZVRv
V29ya2VyT2JqZWN0KE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNz
YWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMKQogewotICAgIHRoaXNQdHItPnN0YXJ0V29ya2VyQ29udGV4
dEludGVybmFsKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBzY3JpcHRVUkwpLCB1c2VyQWdlbnQsIHNv
dXJjZUNvZGUpOworICAgIG1fcHJveHktPnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0
KHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CiB9
CiAKLXZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6dGVybWluYXRlV29ya2VyQ29udGV4dFRhc2so
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0
cikKK3ZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6d29ya2VyQ29udGV4dERlc3Ryb3llZCgpCiB7
Ci0gICAgdGhpc1B0ci0+bV93ZWJXb3JrZXItPnRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKTsKKyAg
ICBtX3Byb3h5LT53b3JrZXJDb250ZXh0RGVzdHJveWVkKCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjp3b3JrZXJDb250ZXh0VGVybWluYXRlZChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuZ2V0KCksIHRoaXMpOwogfQogCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnBvc3RNZXNz
YWdlVG9Xb3JrZXJDb250ZXh0VGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBh
c3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKQorYm9vbCBXZWJXb3Jr
ZXJDbGllbnRJbXBsOjphbGxvd0ZpbGVTeXN0ZW0oKSAKIHsKLSAgICBXZWJNZXNzYWdlUG9ydENo
YW5uZWxBcnJheSB3ZWJDaGFubmVscyhjaGFubmVscy5nZXQoKSA/IGNoYW5uZWxzLT5zaXplKCkg
OiAwKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViQ2hhbm5lbHMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgd2ViQ2hhbm5lbHNbaV0gPSAoKmNoYW5uZWxzKVtpXS0+Y2hhbm5lbCgp
LT53ZWJDaGFubmVsUmVsZWFzZSgpOwotICAgICAgICB3ZWJDaGFubmVsc1tpXS0+c2V0Q2xpZW50
KDApOwotICAgIH0KLQotICAgIHRoaXNQdHItPm1fd2ViV29ya2VyLT5wb3N0TWVzc2FnZVRvV29y
a2VyQ29udGV4dChtZXNzYWdlLCB3ZWJDaGFubmVscyk7CisgICAgV2ViS2l0OjpXZWJWaWV3SW1w
bCogd2ViVmlldyA9IG1fd2ViRnJhbWUtPnZpZXdJbXBsKCk7CisgICAgcmV0dXJuICF3ZWJWaWV3
LT5wZXJtaXNzaW9uQ2xpZW50KCkgfHwgd2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpLT5hbGxv
d0ZpbGVTeXN0ZW0obV93ZWJGcmFtZSk7CiB9CiAKLXZvaWQgV2ViV29ya2VyQ2xpZW50SW1wbDo6
d29ya2VyT2JqZWN0RGVzdHJveWVkVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIpCit2b2lkIFdlYldvcmtlckNsaWVudEltcGw6Om9w
ZW5GaWxlU3lzdGVtKFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJv
b2wgY3JlYXRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzKQogewotICAgIGlmICh0aGlzUHRyLT5tX3dv
cmtlcikgLy8gQ2hlY2sgd2UgaGF2ZW4ndCBhbHJlYWQgY2FsbGVkIHRoaXMuCi0gICAgICAgIHRo
aXNQdHItPm1fd2ViV29ya2VyLT53b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKLSAgICBkZWxldGUg
dGhpc1B0cjsKKyAgICAgbV93ZWJGcmFtZS0+Y2xpZW50KCktPm9wZW5GaWxlU3lzdGVtKG1fd2Vi
RnJhbWUsIHR5cGUsIHNpemUsIGNyZWF0ZSwgY2FsbGJhY2tzKTsKIH0KIAotdm9pZCBXZWJXb3Jr
ZXJDbGllbnRJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0VGFzaygKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFu
bmVscykKK2Jvb2wgV2ViV29ya2VyQ2xpZW50SW1wbDo6YWxsb3dEYXRhYmFzZShXZWJGcmFtZSos
IGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSAKIHsKLQotICAgIGlmICh0aGlzUHRyLT5tX3dvcmtl
cikgewotICAgICAgICBPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMgPQotICAgICAgICAg
ICAgTWVzc2FnZVBvcnQ6OmVudGFuZ2xlUG9ydHMoKmNvbnRleHQsIGNoYW5uZWxzKTsKLSAgICAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZE1lc3NhZ2UgPQotICAg
ICAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShtZXNzYWdlKTsK
LSAgICAgICAgdGhpc1B0ci0+bV93b3JrZXItPmRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50Ojpj
cmVhdGUocG9ydHMucmVsZWFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkTWVzc2FnZS5yZWxlYXNlKCkp
KTsKLSAgICB9CisgICAgIFdlYktpdDo6V2ViVmlld0ltcGwqIHdlYlZpZXcgPSBtX3dlYkZyYW1l
LT52aWV3SW1wbCgpOworICAgICByZXR1cm4gIXdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKSB8
fCB3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCktPmFsbG93RGF0YWJhc2UobV93ZWJGcmFtZSwg
bmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOwogfQotCi12b2lkIFdlYldvcmtlckNs
aWVudEltcGw6OnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdFRhc2soCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlzUHRyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgc291cmNlVVJMKQorIAordm9pZCBXZWJXb3JrZXJDbGllbnRJbXBsOjpkaXNwYXRjaERldlRv
b2xzTWVzc2FnZShjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgYm9vbCBoYW5kbGVk
ID0gZmFsc2U7Ci0gICAgaWYgKHRoaXNQdHItPm1fd29ya2VyKQotICAgICAgICBoYW5kbGVkID0g
dGhpc1B0ci0+bV93b3JrZXItPmRpc3BhdGNoRXZlbnQoRXJyb3JFdmVudDo6Y3JlYXRlKGVycm9y
TWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VVUkwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJl
cikpOwotICAgIGlmICghaGFuZGxlZCkKLSAgICAgICAgdGhpc1B0ci0+bV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5yZXBvcnRFeGNlcHRpb24oZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3Vy
Y2VVUkwsIDApOworICAgIGlmIChtX3BhZ2VJbnNwZWN0b3IpCisgICAgICAgIG1fcGFnZUluc3Bl
Y3Rvci0+ZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlcihtZXNzYWdlKTsKIH0KIAotdm9pZCBXZWJX
b3JrZXJDbGllbnRJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2soU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwq
IHRoaXNQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgc291cmNlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVzc2FnZVR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgbWVzc2FnZUxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKLXsKLSAg
ICB0aGlzUHRyLT5tX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZE1lc3NhZ2Uoc3RhdGljX2Nh
c3Q8TWVzc2FnZVNvdXJjZT4oc291cmNlSWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNZXNzYWdlVHlwZT4obWVzc2FnZVR5
cGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxNZXNzYWdlTGV2ZWw+KG1lc3NhZ2VMZXZlbCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNv
dXJjZVVSTCwgMCk7CitXZWJWaWV3KiBXZWJXb3JrZXJDbGllbnRJbXBsOjp2aWV3KCkgY29uc3Qg
Cit7ICAgCisgICAgcmV0dXJuIG1fd2ViRnJhbWUtPnZpZXcoKTsgCiB9CiAKLXZvaWQgV2ViV29y
a2VyQ2xpZW50SW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0VGFzayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQ
dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCitXZWJXb3JrZXJDbGllbnRJbXBsOjpX
ZWJXb3JrZXJDbGllbnRJbXBsKFdvcmtlciogd29ya2VyLCBXZWJGcmFtZUltcGwqIHdlYkZyYW1l
KQorICAgIDogbV9wcm94eShuZXcgV29ya2VyTWVzc2FnaW5nUHJveHkod29ya2VyKSkKKyAgICAs
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCh3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSkKKyAgICAsIG1fd2ViRnJhbWUod2ViRnJhbWUpICAgIAorICAgICwgbV9wYWdlSW5zcGVjdG9y
KDApCisKIHsKLSAgICB0aGlzUHRyLT5tX3VuY29uZmlybWVkTWVzc2FnZUNvdW50LS07Ci0gICAg
dGhpc1B0ci0+bV93b3JrZXJDb250ZXh0SGFkUGVuZGluZ0FjdGl2aXR5ID0gaGFzUGVuZGluZ0Fj
dGl2aXR5OwogfQogCi12b2lkIFdlYldvcmtlckNsaWVudEltcGw6OnJlcG9ydFBlbmRpbmdBY3Rp
dml0eVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBs
KiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQorV2ViV29ya2VyQ2xpZW50SW1wbDo6fldl
YldvcmtlckNsaWVudEltcGwoKQogewotICAgIHRoaXNQdHItPm1fd29ya2VyQ29udGV4dEhhZFBl
bmRpbmdBY3Rpdml0eSA9IGhhc1BlbmRpbmdBY3Rpdml0eTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJD
bGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJ
bXBsLmgKaW5kZXggYzI3MGZmYy4uM2QyMzQxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuaApAQCAtMzMsMzcgKzMzLDQwIEBACiAKICNp
ZiBFTkFCTEUoV09SS0VSUykKIAorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
KyNpbmNsdWRlICJXb3JrZXJDb250ZXh0UHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQ
cm94eS5oIgorI2luY2x1ZGUgIldvcmtlck1lc3NhZ2luZ1Byb3h5LmgiCisjaW5jbHVkZSAiV29y
a2VyT2JqZWN0UHJveHkuaCIKKwogI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRl
ICJXZWJXb3JrZXJCYXNlLmgiCiAjaW5jbHVkZSAiV2ViV29ya2VyQ2xpZW50LmgiCi0jaW5jbHVk
ZSAiV29ya2VyQ29udGV4dFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotfQogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIGNsYXNzIFdlYldvcmtlcjsKK2NsYXNzIFdlYkZyYW1lSW1wbDsKIAotLy8g
VGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBpcyB0byBwcm92aWRlIGEgV29ya2VyQ29udGV4dFBy
b3h5Ci0vLyBpbXBsZW1lbnRhdGlvbiB0aGF0IHdlIGNhbiBnaXZlIHRvIFdlYktpdC4gIEludGVy
bmFsbHksIGl0IGNvbnZlcnRzIHRoZQotLy8gZGF0YSB0eXBlcyB0byBDaHJvbWUgY29tcGF0aWJs
ZSBvbmVzIHNvIHRoYXQgcmVuZGVyZXIgY29kZSBjYW4gdXNlIGl0IG92ZXIKLS8vIElQQy4KKy8v
IFRoaXMgY2xhc3MgcHJvdmlkZXMgY2hyb21pdW0gaW1wbGVtZW50YXRpb24gZm9yIFdvcmtlckNv
bnRleHRQcm94dCwgV29ya2VyT2JqZWN0UHJveHkgYW1kIFdvcmtlckxvYWRlclByb3h5CisvLyBm
b3IgaW4tcHJvYyBkZWRpY2F0ZWQgd29ya2Vycy4gSXQgYWxzbyBhY3RzIGFzIGEgYnJpZGdlIGZv
ciB3b3JrZXJzIHRvIGNocm9taXVtIGltcGxlbWVudGF0aW9uIG9mIGZpbGUgc3lzdGVtcywKKy8v
IGRhdGFiYXNlcyBhbmQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgorLy8KKy8vIEluIGVz
c2VuY2UsIHRoaXMgY2xhc3Mgd3JhcHMgV29ya2VyTWVzc2FnaW5nUHJveHkuCiBjbGFzcyBXZWJX
b3JrZXJDbGllbnRJbXBsIDogcHVibGljIFdlYkNvcmU6OldvcmtlckNvbnRleHRQcm94eQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJXb3JrZXJDbGllbnQgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJDb3JlOjpXb3JrZXJPYmplY3RQcm94eQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBOZXdXZWJXb3JrZXJCYXNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCB7
CiBwdWJsaWM6Ci0gICAgV2ViV29ya2VyQ2xpZW50SW1wbChXZWJDb3JlOjpXb3JrZXIqKTsKLQog
ICAgIC8vIFdlYkNvcmU6OldvcmtlckNvbnRleHRQcm94eSBGYWN0b3J5LgogICAgIHN0YXRpYyBX
ZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHkqIGNyZWF0ZVdvcmtlckNvbnRleHRQcm94eShXZWJD
b3JlOjpXb3JrZXIqKTsKLSAgICB2b2lkIHNldFdlYldvcmtlcihXZWJXb3JrZXIqKTsKIAogICAg
IC8vIFdlYkNvcmU6OldvcmtlckNvbnRleHRQcm94eSBtZXRob2RzOgogICAgIC8vIFRoZXNlIGFy
ZSBjYWxsZWQgb24gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHdvcmtlci4gIEluIHRoZSBy
ZW5kZXJlcgotICAgIC8vIHByb2Nlc3MsIHRoaXMgd2lsbCBiZSB0aGUgbWFpbiBXZWJLaXQgdGhy
ZWFkLiAgSW4gdGhlIHdvcmtlciBwcm9jZXNzLCB0aGlzCi0gICAgLy8gd2lsbCBiZSB0aGUgdGhy
ZWFkIG9mIHRoZSBleGVjdXRpbmcgd29ya2VyIChub3QgdGhlIG1haW4gV2ViS2l0IHRocmVhZCku
CisgICAgLy8gcHJvY2VzcywgdGhpcyB3aWxsIGJlIHRoZSBtYWluIFdlYktpdCB0aHJlYWQuCiAg
ICAgdmlydHVhbCB2b2lkIHN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBXZWJDb3JlOjpLVVJMJiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJik7
CkBAIC03NCwxMDMgKzc3LDQ4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGlu
Z0FjdGl2aXR5KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHdvcmtlck9iamVjdERlc3Ryb3ll
ZCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGNvbm5lY3RUb0luc3BlY3RvcihXb3JrZXJDb250ZXh0
UHJveHk6OlBhZ2VJbnNwZWN0b3IqKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIHZpcnR1
YWwgdm9pZCBjb25uZWN0VG9JbnNwZWN0b3IoV2ViQ29yZTo6V29ya2VyQ29udGV4dFByb3h5OjpQ
YWdlSW5zcGVjdG9yKik7CiAgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3RGcm9tSW5zcGVjdG9y
KCk7CiAgICAgdmlydHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9JbnNwZWN0b3IoY29uc3QgU3RyaW5n
Jik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yKGNvbnN0IFN0
cmluZyYpOworI2VuZGlmCisgICAgLy8gV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkgbWV0aG9k
czoKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tUb0xvYWRlcihQYXNzT3duUHRyPFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFRh
c2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4sIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAKLSAgICAvLyBXZWJXb3Jr
ZXJDbGllbnQgbWV0aG9kczoKLSAgICAvLyBUaGVzZSBhcmUgY2FsbGVkIG9uIHRoZSBtYWluIFdl
YktpdCB0aHJlYWQuCi0gICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3Qo
Y29uc3QgV2ViU3RyaW5nJiwgY29uc3QgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFdlYlN0cmlu
ZyYsIGludCwgY29uc3QgV2ViU3RyaW5nJik7CisgICAgLy8gV2ViQ29yZTo6V29ya2VyT2JqZWN0
UHJveHkgbWV0aG9kczoKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVj
dChQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NPd25QdHI8
V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9z
dEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogCi0gICAgLy8gRklYTUU6IHRo
ZSBiZWxvdyBpcyBmb3IgY29tcGF0aWJpbGl0eSBvbmx5IGFuZCBzaG91bGQgYmUKLSAgICAvLyBy
ZW1vdmVkIG9uY2UgQ2hyb21pdW0gaXMgdXBkYXRlZCB0byByZW1vdmUgbWVzc2FnZQotICAgIC8v
IGRlc3RpbmF0aW9uIHBhcmFtZXRlciA8aHR0cDovL3dlYmtpdC5vcmcvYi8zNzE1NT4uCi0gICAg
dmlydHVhbCB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KGludCwgaW50LCBp
bnQsIGludCwgY29uc3QgV2ViU3RyaW5nJiwgaW50LCBjb25zdCBXZWJTdHJpbmcmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoaW50LCBpbnQsIGlu
dCwgY29uc3QgV2ViU3RyaW5nJiwgaW50LCBjb25zdCBXZWJTdHJpbmcmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoV2ViQ29yZTo6TWVzc2FnZVNv
dXJjZSwgV2ViQ29yZTo6TWVzc2FnZVR5cGUsIFdlYkNvcmU6Ok1lc3NhZ2VMZXZlbCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogICAg
IHZpcnR1YWwgdm9pZCBjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoYm9vbCk7CiAgICAg
dmlydHVhbCB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sKTsKICAgICB2aXJ0dWFsIHZv
aWQgd29ya2VyQ29udGV4dENsb3NlZCgpOwogICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0
RGVzdHJveWVkKCk7Ci0gICAgdmlydHVhbCBXZWJXb3JrZXIqIGNyZWF0ZVdvcmtlcihXZWJXb3Jr
ZXJDbGllbnQqKSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBXZWJOb3RpZmljYXRpb25QcmVz
ZW50ZXIqIG5vdGlmaWNhdGlvblByZXNlbnRlcigpCi0gICAgewotICAgICAgICAvLyBGSVhNRTog
Tm90aWZpY2F0aW9ucyBub3QgeWV0IHN1cHBvcnRlZCBpbiB3b3JrZXJzLgotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgdmlydHVhbCBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogY3JlYXRl
QXBwbGljYXRpb25DYWNoZUhvc3QoV2ViQXBwbGljYXRpb25DYWNoZUhvc3RDbGllbnQqKSB7IHJl
dHVybiAwOyB9Ci0gICAgdmlydHVhbCBib29sIGFsbG93RGF0YWJhc2UoV2ViRnJhbWUqLCBjb25z
dCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgdmlydHVhbCBib29sIGFsbG93Rmls
ZVN5c3RlbSgpCi0gICAgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQorCisgICAgLy8gV2ViV29ya2VyQ2xpZW50QmFzZSBtZXRob2Rz
OgorICAgIHZpcnR1YWwgYm9vbCBhbGxvd0RhdGFiYXNlKFdlYkZyYW1lKiwgY29uc3QgV2ViU3Ry
aW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUpOworICAgIHZpcnR1YWwgYm9vbCBhbGxvd0ZpbGVTeXN0ZW0oKTsKKyAgICB2
aXJ0dWFsIHZvaWQgb3BlbkZpbGVTeXN0ZW0oV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25n
IHNpemUsIGJvb2wgY3JlYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJG
aWxlU3lzdGVtQ2FsbGJhY2tzKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZXZUb29s
c01lc3NhZ2UoY29uc3QgV2ViU3RyaW5nJik7CiAKKyAgICAvLyBXZWJDb21tZW50V29ya2VyQmFz
ZSBtZXRob2RzOgorICAgIHZpcnR1YWwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBuZXdDb21t
b25DbGllbnQoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBXZWJWaWV3KiB2aWV3KCkg
Y29uc3Q7CisKIHByaXZhdGU6CisgICAgV2ViV29ya2VyQ2xpZW50SW1wbChXZWJDb3JlOjpXb3Jr
ZXIqLCBXZWJGcmFtZUltcGwqKTsKICAgICB2aXJ0dWFsIH5XZWJXb3JrZXJDbGllbnRJbXBsKCk7
CiAKLSAgICAvLyBNZXRob2RzIHVzZWQgdG8gc3VwcG9ydCBXZWJXb3JrZXJDbGllbnRJbXBsIGJl
aW5nIGNvbnN0cnVjdGVkIG9uIHdvcmtlcgotICAgIC8vIHRocmVhZHMuCi0gICAgLy8gVGhlc2Ug
dGFza3MgYXJlIGRpc3BhdGNoZWQgb24gdGhlIFdlYktpdCB0aHJlYWQuCi0gICAgc3RhdGljIHZv
aWQgc3RhcnRXb3JrZXJDb250ZXh0VGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29y
a2VyQ2xpZW50SW1wbCogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBzY3JpcHRVUkwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYgdXNlckFnZW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJj
ZUNvZGUpOwotICAgIHN0YXRpYyB2b2lkIHRlcm1pbmF0ZVdvcmtlckNvbnRleHRUYXNrKFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0cik7Ci0g
ICAgc3RhdGljIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHRUYXNrKFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudEltcGwqIHRoaXNQdHIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6U3Ry
aW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQYXNzT3duUHRyPFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVs
cyk7Ci0gICAgc3RhdGljIHZvaWQgd29ya2VyT2JqZWN0RGVzdHJveWVkVGFzayhXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQ2xpZW50SW1wbCogdGhpc1B0cik7Ci0KLSAgICAv
LyBUaGVzZSB0YXNrcyBhcmUgZGlzcGF0Y2hlZCBvbiB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0
aGUgd29ya2VyIChpLmUuCi0gICAgLy8gbWFpbiBXZWJLaXQgdGhyZWFkIGluIHJlbmRlcmVyIHBy
b2Nlc3MsIGFuZCB0aGUgd29ya2VyIHRocmVhZCBpbiB0aGUKLSAgICAvLyB3b3JrZXIgcHJvY2Vz
cykuCi0gICAgc3RhdGljIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdFRhc2soV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlzUHRyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6
U3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5u
ZWxzKTsKLSAgICBzdGF0aWMgdm9pZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3RUYXNrKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlz
UHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VVUkwpOwot
ICAgIHN0YXRpYyB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0VGFzayhXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0
aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgc291cmNlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBtZXNzYWdlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lc3NhZ2VMZXZlbCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV1RGOjpT
dHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYgc291cmNlVVJMKTsK
LSAgICBzdGF0aWMgdm9pZCBjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3RUYXNrKFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJDbGllbnRJbXBsKiB0aGlz
UHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOwotICAgIHN0YXRpYyB2b2lkIHJlcG9ydFBlbmRpbmdB
Y3Rpdml0eVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckNsaWVudElt
cGwqIHRoaXNQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGhhc1BlbmRpbmdBY3Rpdml0eSk7Ci0KLSAgICB2b2lkIHN0YXJ0V29ya2VyQ29udGV4dElu
dGVybmFsKGNvbnN0IFdlYkNvcmU6OktVUkwmIHNjcmlwdFVSTCwgY29uc3QgV1RGOjpTdHJpbmcm
IHVzZXJBZ2VudCwgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZUNvZGUpOwotCisgICAgV2ViQ29y
ZTo6V29ya2VyTWVzc2FnaW5nUHJveHkqIG1fcHJveHk7CiAgICAgLy8gR3VhcmQgYWdhaW5zdCBj
b250ZXh0IGZyb20gYmVpbmcgZGVzdHJveWVkIGJlZm9yZSBhIHdvcmtlciBleGl0cy4KICAgICBS
ZWZQdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0OwotCi0gICAgV2ViQ29yZTo6V29ya2VyKiBtX3dvcmtlcjsKLSAgICBXZWJXb3JrZXIq
IG1fd2ViV29ya2VyOwotICAgIGJvb2wgbV9hc2tlZFRvVGVybWluYXRlOwotICAgIHVuc2lnbmVk
IG1fdW5jb25maXJtZWRNZXNzYWdlQ291bnQ7Ci0gICAgYm9vbCBtX3dvcmtlckNvbnRleHRIYWRQ
ZW5kaW5nQWN0aXZpdHk7Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX3dvcmtlclRocmVhZElkOwot
ICAgIFdvcmtlckNvbnRleHRQcm94eTo6UGFnZUluc3BlY3RvciogbV9wYWdlSW5zcGVjdG9yOwor
ICAgIFdlYkZyYW1lSW1wbCogbV93ZWJGcmFtZTsKKyAgICBXZWJDb3JlOjpXb3JrZXJDb250ZXh0
UHJveHk6OlBhZ2VJbnNwZWN0b3IqIG1fcGFnZUluc3BlY3RvcjsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldv
cmtlckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VySW1wbC5j
cHAKaW5kZXggNmM5ZjQ1Yy4uZGMxNjNhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViV29ya2VySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViV29ya2VySW1wbC5jcHAKQEAgLTc0LDYgKzc0LDExIEBAIFdlYldvcmtlckltcGw6On5X
ZWJXb3JrZXJJbXBsKCkKIHsKIH0KIAorTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBXZWJXb3Jr
ZXJJbXBsOjpuZXdDb21tb25DbGllbnQoKQoreworICAgIHJldHVybiBtX2NsaWVudDsKK30KKwog
V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBXZWJXb3JrZXJJbXBsOjpjb21tb25DbGllbnQoKQogewog
ICAgIHJldHVybiBtX2NsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYldvcmtlckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtl
ckltcGwuaAppbmRleCA3OWM5YzU0Li45NDdhMTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViV29ya2VySW1wbC5oCkBAIC02NSw2ICs2NSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIFdlYldvcmtlckNsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KICAgICB2
aXJ0dWFsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KCk7CiAKKyAgICAvLyBO
ZXdXZWJXb3JrZXJCYXNlIG1ldGhvZHM6CisgICAgdmlydHVhbCBOZXdXZWJDb21tb25Xb3JrZXJD
bGllbnQqIG5ld0NvbW1vbkNsaWVudCgpOworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgfldlYldv
cmtlckltcGwoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcAppbmRleCAxN2M3NzU0Li4x
M2ZlZjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcApAQCAtMTU2LDcgKzE1Niw3IEBA
IHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6c3RvcCgpCiAgICAgfQogfQog
Ci12b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RPcGVuRmlsZVN5c3Rl
bVRvTWFpblRocmVhZChXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRmls
ZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIGNvbnN0IFN0
cmluZyYgbW9kZSkKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE9w
ZW5GaWxlU3lzdGVtVG9NYWluVGhyZWFkKE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9u
Q2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNy
ZWF0ZSwgY29uc3QgU3RyaW5nJiBtb2RlKQogewogICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVh
ZCgKICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVh
ZCwKQEAgLTI1MSw3ICsyNTEsNyBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2U6OnBvc3RSZWFkRGlyZWN0b3J5VG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgbW9kZSkpOwog
fQogCi12b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6Om9wZW5GaWxlU3lzdGVt
T25NYWluVGhyZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb21tb25Xb3JrZXJDbGll
bnQqIGNvbW1vbkNsaWVudCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6
ZSwgYm9vbCBjcmVhdGUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqIGJyaWRnZSwg
Y29uc3QgU3RyaW5nJiBtb2RlKQordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
OjpvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTmV3
V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUg
dHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlKiBicmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKICAgICBpZiAoIWNvbW1v
bkNsaWVudCkKICAgICAgICAgYnJpZGdlLT5kaWRGYWlsT25NYWluVGhyZWFkKFdlYkZpbGVFcnJv
ckFib3J0LCBtb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaAppbmRleCBiYjQ4NDc5Li4yODk1
YWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oCkBAIC01MSw4ICs1MSw4IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBjbGFzcyBBc3luY0ZpbGVTeXN0ZW07CiBjbGFzcyBNYWluVGhyZWFkRmls
ZVN5c3RlbUNhbGxiYWNrczsKK2NsYXNzIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudDsKIGNsYXNz
IFRocmVhZGFibGVDYWxsYmFja3NCcmlkZ2VXcmFwcGVyOwotY2xhc3MgV2ViQ29tbW9uV29ya2Vy
Q2xpZW50OwogY2xhc3MgV2ViRmlsZVN5c3RlbUNhbGxiYWNrczsKIHN0cnVjdCBXZWJGaWxlSW5m
bzsKIHN0cnVjdCBXZWJGaWxlU3lzdGVtRW50cnk7CkBAIC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICAvLyBNZXRob2RzIHRoYXQgY3JlYXRlIGFuIGluc3RhbmNlIGFuZCBwb3N0
IGFuIGluaXRpYWwgcmVxdWVzdCB0YXNrIHRvIHRoZSBtYWluIHRocmVhZC4gVGhleSBtdXN0IGJl
IGNhbGxlZCBvbiB0aGUgd29ya2VyIHRocmVhZC4KLSAgICB2b2lkIHBvc3RPcGVuRmlsZVN5c3Rl
bVRvTWFpblRocmVhZChXZWJDb21tb25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBl
LCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAg
dm9pZCBwb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQoTmV3V2ViQ29tbW9uV29ya2VyQ2xp
ZW50KiwgV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBj
b25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQgcG9zdE1vdmVUb01haW5UaHJlYWQoV2ViRmls
ZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHNyY1BhdGgsIGNvbnN0IFdlYkNvcmU6OktV
UkwmIGRlc3RQYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQgcG9zdENvcHlUb01h
aW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHNyY1BhdGgsIGNv
bnN0IFdlYkNvcmU6OktVUkwmIGRlc3RQYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZv
aWQgcG9zdFJlbW92ZVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6
S1VSTCYgcGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsKQEAgLTExMCw3ICsxMTAsNyBAQCBwcml2
YXRlOgogICAgIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoV2ViQ29yZTo6V29ya2Vy
TG9hZGVyUHJveHkqLCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5
c3RlbUNhbGxiYWNrcyopOwogCiAgICAgLy8gTWV0aG9kcyB0aGF0IGFyZSB0byBiZSBjYWxsZWQg
b24gdGhlIG1haW4gdGhyZWFkLgotICAgIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtT25NYWlu
VGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb21tb25Xb3JrZXJD
bGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUs
IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1vZGUpOwor
ICAgIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lz
dGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHN0YXRpYyB2b2lkIG1v
dmVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVT
eXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBzcmNQYXRoLCBjb25zdCBXZWJDb3JlOjpLVVJM
JiBkZXN0UGF0aCwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0IFN0cmlu
ZyYgbW9kZSk7CiAgICAgc3RhdGljIHZvaWQgY29weU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwm
IHNyY1BhdGgsIGNvbnN0IFdlYkNvcmU6OktVUkwmIGRlc3RQYXRoLCBXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICBzdGF0aWMgdm9pZCBy
ZW1vdmVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZp
bGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsK
</data>
<flag name="review"
          id="99823"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="100176"
          type_id="3"
          status="-"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>