<?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>25436</bug_id>
          
          <creation_ts>2009-04-27 15:58:30 -0700</creation_ts>
          <short_desc>Refactor appCache for use in multi-process browsers</short_desc>
          <delta_ts>2009-07-29 16:41:48 -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>All</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Nordman">michaeln</reporter>
          <assigned_to name="Michael Nordman">michaeln</assigned_to>
          <cc>andersca</cc>
    
    <cc>andreip</cc>
    
    <cc>ap</cc>
    
    <cc>emacemac7</cc>
    
    <cc>jorlow</cc>
    
    <cc>michaeln</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>119042</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-04-27 15:58:30 -0700</bug_when>
    <thetext>This bug is to track the first step in getting appCache working in
Chromium.  The high level plan was discussed offline with Brady, Maciej,
Anders, and Sam.

The basic idea is to have a clear split between a &quot;front end&quot; and a &quot;back end&quot;
of the appCache. The two will call each other in such a way that a proxy layer
can be added in between.

This document provides an overview of this approach.
http://docs.google.com/Doc?id=dvvc3n9_0dkfddscs
The language in that doc (at this moment) is a little stale and doesn&apos;t reflect our desire to land this in webkit sooner rather than later.

The front/back split should be relatively straight forward to pull off for the scriptable API. I have some code in progress that I&apos;ll attach to the bug report to demonstrate that part of things.

The front/back split for resource loading is less straight forward. I&apos;ve been working towards an impl for chromium in which the loading from an appCache (including the loading of fallback resources) take place inside of ResourceHandle from WebCore&apos;s point of view. I have not looked closely at how to pull that part off on WebCore&apos;s side of the wire (so to speak).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119515</commentid>
    <comment_count>1</comment_count>
      <attachid>29920</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-04-30 13:55:26 -0700</bug_when>
    <thetext>Created attachment 29920
outline of some interfaces

Hello, The attached patch is obviously not ready for submission. I&apos;m fishing for feedback on the general direction and the interfaces.

Some comments on how I see these classes being used in a single-process model vs a multi-process model.

When built into a single process

* the &apos;backend&apos; appache code is NOT used on the &apos;main&apos; webkit thread
* for the sake of discussion, lets call the thread it is used on the
&apos;backend&apos; webkit thread
* the single process &apos;frontend&apos; classes post tasks to the backend thread
* sync apis are handled by waiting on a WaitableEvent in the frontend
classes, which the will get signaled by the backend thread when done
* async api completion is handled by posting tasks to the &apos;main&apos;
thread (probably easier to setup than having the main thead wait for
multple waitable event handles in the main message loop)
* generally, backend classes running on the &apos;backend&apos; thread don&apos;t
block that thread for file io. Any blocking file io work gets pushed
off to a seperate file io handling thread(s). (This is similar to what
we require of code that executes on chrome&apos;s IPC thread in the main
browser process)

When built into a multi-process

* the &apos;backend&apos; code is NOT used in the renderer at all
* it is used on the IPC thread in the main browser process (and it
doesn&apos;t block that thread)
* the multiprocess &apos;frontend&apos; classes send IPC message instead of
posting thread tasks (sync and async)
* the &apos;frontend&apos; code is NOT used in the browser process all all</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119576</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-01 01:45:26 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; When built into a single process

Having a separate thread for appcache doesn&apos;t feel natural to me. It&apos;s just a part of the loader, why should it have a life of its own?

It is true that some appcache operations are rather time consuming, and it may be nice to move them to a secondary thread. Two distinct examples are loading from disk database and prefix lookup for fallback.

The patch does not include any examples of how the new interfaces will be used in loader. It is not clear if there are many calls that can be made asynchronous. E.g., ResourceLoader::load() needs to look up appcache resources synchronously before creating a ResourceHandle, and ResourceLoader::willSendRequest() needs to do the same before returning.

&gt; When built into a multi-process

I don&apos;t know how resource loading is implemented in Chromium sufficiently well to comment. Maybe it would make sense to discuss this on the mailing list in order to determine whether this should be a model for other projects potentially using WebKit in multi-process configuration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119620</commentid>
    <comment_count>3</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-05-01 12:24:36 -0700</bug_when>
    <thetext>&gt; I don&apos;t know how resource loading is implemented in Chromium sufficiently well
&gt; to comment. Maybe it would make sense to discuss this on the mailing list in
&gt; order to determine whether this should be a model for other projects
&gt; potentially using WebKit in multi-process configuration.

One of our goals indeed is to be useful to other multi-process configurations in the future. 

As for your comment about using the mailing list, this is somewhat ironic since we&apos;ve been told that it&apos;s much more helpful to have these kinds of discussions in bugs rather than the mailing list.  :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119622</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-05-01 12:50:33 -0700</bug_when>
    <thetext> &gt; Having a separate thread for appcache doesn&apos;t feel natural to me. It&apos;s just a
&gt; part of the loader, why should it have a life of its own?

The point of this refactoring is to be able to reuse the same core appcache code out of process. When these classes are used out of process, they will be running on a seperate thread. So I&apos;d like to have the single process impl be similarly arranged.

The intricate dependencies between the &apos;loader&apos; and the appcache make reuse very impractical. A big part of this proposal involves moving those points of integration (for resource loading) closer to ResourceHandle (inside of the ResourceHandle really since the cache hit detection and retrieval will actually occur on the far side of the ipc wire in chrome). 

&gt; The patch does not include any examples of how the new interfaces will be used
&gt; in loader. It is not clear if there are many calls that can be made
&gt; asynchronous. E.g., ResourceLoader::load() needs to look up appcache resources
&gt; synchronously before creating a ResourceHandle, and
&gt; ResourceLoader::willSendRequest() needs to do the same before returning.

Right, how to use the ApplicationCacheInterceptor interface in webkit (single-process) is the crux of this (for the single-process impl). Looking for some webkit expertise to provide some insight. My best guess is something like

Introduce a new ResourceHandle class that wraps the existing ResourceHandle class (call the latter ResourceHandleRaw or something?). Have the new wrapper use the interceptor interfaces and perhaps never create the &apos;raw&apos; handle or drop the raw handle in the fallback case.

Note that this work would NOT be required in order to use these classes in Chrome.


&gt; I don&apos;t know how resource loading is implemented in Chromium sufficiently well
&gt; to comment.

Chrome is actually pretty well setup to employ this flavor of ApplicationCacheInterceptor interface. See http://codereview.chromium.org/79036 for for how this fits in there.

&gt; Maybe it would make sense to discuss this on the mailing list in
&gt; order to determine whether this should be a model for other projects
&gt; potentially using WebKit in multi-process configuration.

What jeremy said ;)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119623</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-01 13:08:00 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; As for your comment about using the mailing list, this is somewhat ironic since
&gt; we&apos;ve been told that it&apos;s much more helpful to have these kinds of discussions
&gt; in bugs rather than the mailing list.  :-)

I imagine this was probably said about a discussion of some particular bug, not of a general design issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119625</commentid>
    <comment_count>6</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-05-01 13:16:33 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; As for your comment about using the mailing list, this is somewhat ironic since
&gt; &gt; we&apos;ve been told that it&apos;s much more helpful to have these kinds of discussions
&gt; &gt; in bugs rather than the mailing list.  :-)
&gt; 
&gt; I imagine this was probably said about a discussion of some particular bug, not
&gt; of a general design issue.
&gt; 

I sent an email to the list on the subject.  Back to the topic at hand...  :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119866</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-05-04 12:30:04 -0700</bug_when>
    <thetext>&gt; Having a separate thread for appcache doesn&apos;t feel natural to me.
&gt;
&gt; It is true that some appcache operations are rather time consuming, and it may
&gt; be nice to move them to a secondary thread. Two distinct examples are loading
&gt; from disk database and prefix lookup for fallback.

The requirement (in my proposal) that the backend thread doesn&apos;t do blocking IO (or anything that makes this thread unresponsive for an extended period) seems somewhat unnatural, its a background thread so why not let it block. But considering that this thread will be servicing requests for all pages, I think it does make sense.

New topic... tactics...

Assuming we&apos;ll proceed with a refactor involving a front/back split (details of that split aside for a moment), what&apos;s a good way to have the refactored impl co-exist with the existing impl until we&apos;re ready to make a switch. (I think its safe to say that this will take more than a single patch to pull off). Would this be acceptable?

1. Define a new ENABLE(APPLICATION_CACHE) flag for this feature distinct from ENABLE(OFFLINE_WEB_APPLICATIONS) flag. Make them be mutually exclusive.  Perhaps call it EXPERIMENTAL_APPLICATION_CACHE until enough is in place to be functional.

2. Submit the front-end classes that don&apos;t do anything yet.
2a. Land the WebApplicationCache and WebApplicationCacheContext base classes. And have the default factory method return a NOOP implementation.
2b. Rework DOMApplicationCache (and related points of integration to support event targeting and the window.applicationCache property) to call the new front-end, to respect the new ENABLE flag.

3. Start work on the back-end

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119930</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-05 00:18:33 -0700</bug_when>
    <thetext>&gt; New topic... tactics...

For the record, I do not feel that my concerns in comment 2 have been fully addressed. Since they are not particularly concrete, this does not block refactoring, but I&apos;d be happier if we shared a common vision about how this code should work.

I think that the best way forward is to discuss general multi-process loader architecture on the mailing list, with appcache design being a natural part of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119989</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-05-05 10:43:32 -0700</bug_when>
    <thetext>(In reply to comment #8)

Thnx for responding Alexey.

&gt; For the record, I do not feel that my concerns in comment 2 have been fully
&gt; addressed.

I don&apos;t think they have either, this is not nearly settled. Honestly I&apos;m not sure we&apos;ll have those concerns worked thru until we have some experimental code to look at that functions to some degree in single-process and multi-process browsers.

&gt; Since they are not particularly concrete, this does not block
&gt; refactoring, but I&apos;d be happier if we shared a common vision about how this
&gt; code should work.

Me too about sharing a common vision.

Glad to hear you don&apos;t want to block coding progress on resolving all of the questions. I think an initial patch as outlined in &apos;tactics&apos; opens the door to some experimental coding to figure out the shape of the answer. How &apos;bout i put together that initial patch (for the front-end machinations) and send it out for review? WDYT?

&gt; I think that the best way forward is to discuss general multi-process loader
&gt; architecture on the mailing list, with appcache design being a natural part of
&gt; it.

Ok, sounds good, i&apos;ll post something to the list and refer to this bug.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120258</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-07 02:17:06 -0700</bug_when>
    <thetext>&gt; some experimental coding to figure out the shape of the answer. How &apos;bout i put
&gt; together that initial patch (for the front-end machinations) and send it out
&gt; for review? WDYT?

A reviewer (myself or someone else) will need to understand a plan for how the new interfaces will fit in existing code and logic, both in multi-process and single-process cases. It is not necessary or desirable to do all the work at once, and it is of course fine to correct details of the initial design once they become clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120333</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-05-07 13:28:14 -0700</bug_when>
    <thetext> &gt; A reviewer (myself or someone else) will need to understand a plan for how the
&gt; new interfaces will fit in existing code and logic, both in multi-process and
&gt; single-process cases.

Lets start with just the &apos;frontend&apos; pieces. The interfaces in the &apos;frontend&apos; subdirectory (of the patch attached here) are used by Frame, HTMLHtmlElement, and DOMApplicationCache.

* Frame owns a WebApplicationCacheContext instance. (unlike the existing code)

* DOMApplicationCache gets a reference to WebApplicationCache via Frame.appcachecontext(), script invoked method  calls result in the corresponding call to WebApplicationCache methods. (similar to the existing code)

* DOMApplicationCache ISA WebApplicationCacheDelegate, delegate method overrides surface the corresponding event to script. (decoupled from the backend, unlike the existing code)

* HTMLHtmlElement invokes selectAppCacheWithManifest (similar to the existing appcache code)

Concrete impls of the WebApplicationCacheContext and WebApplicationCache classes serve as proxies to communicate with the &apos;backend&apos;. They contain very little logic. In a single-process browser, the proxy boils down to thread messaging. In a multi-process browser, the proxy employs IPC. The settable factory method for WebApplicationCacheContext creates the appropiate impl for the hosting browser.

Anything there unclear?


Also, a potential reviewer has some extra credit work that could be done as well.
* Read thru this, http://docs.google.com/Doc?id=dvvc3n9_0dkfddscs
* Look at the patch &quot;outline of some interfaces&quot; patch attached to this issue
* Look at this chromium patch, http://codereview.chromium.org/79036
* Ask questions to clarify
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120337</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-05-07 13:46:09 -0700</bug_when>
    <thetext>Another possible way to split things that could result in greater code reuse would be to formalize the internal interface between the front and back pieces. Define that in an abstract class. Create a different impl of that interface depending.

I haven&apos;t gotten that far yet. So far I&apos;ve been formalizing the interface between stuff outside of the appcache system and the appcache system itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123315</commentid>
    <comment_count>13</comment_count>
      <attachid>30714</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-05-27 13:02:59 -0700</bug_when>
    <thetext>Created attachment 30714
ApplicationCacheFrontend interface and usage</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123316</commentid>
    <comment_count>14</comment_count>
      <attachid>30715</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-05-27 13:26:17 -0700</bug_when>
    <thetext>Created attachment 30715
ApplicationCacheFrontend interface and usage</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123320</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-05-27 13:48:51 -0700</bug_when>
    <thetext>Hi,

I&apos;ve uploaded a first patch along these lines. There is not much meat in this patch, mostly it&apos;s about setting up to do parallel development of a new implementation of this feature set.

I&apos;ve setup added a new loader/appcache2 directory to contain the new impl, and have begun svn copying things into it starting with DOMApplicationCache*. And setup a new ENABLE(APPLICATiON_CACHE) flag.

I&apos;ve named the &apos;frontend&apos; class ApplicationCacheFrontend, but I&apos;m very open to suggestion on nameing. I&apos;d like to reserve the obvious names (like ApplicationCache and ApplicationCacheContext) for use as the names of the &apos;backend&apos; classes as that is where most of the &apos;model&apos; logic will be.

This patch does not yet address how/where resource loading out of the appcache is handled.

This builds and the tests pass in two different environments.
1) Standard/webkit client with ENABLE(OFFLINE_WEB_APPLICATIONS) defined.
2) Chromium/webkit client with ENABLE(APPLICATION_CACHE) defined.

As far as other class names go... something along these lines is what i have in mind.

class ApplicationCacheFrontend;  // in this patch

class ApplicationCacheBackendProxy;
class ApplicationCacheFrontendProxy;

class ApplicationCacheBackend;  // i had been calling this ApplicationCacheService previously
class ApplicationCacheContext;
class ApplicationCacheRequestHandler;  // i had been calling this ApplicationCacheInterceptor previously
class ApplicationCacheGroup;
class ApplicationCacheUpdateTask;  // factored out of ApplicationCacheGroup, the update and validate logic
class ApplicationCache;
class ApplicationCacheEntry;
class ApplicationCacheDatabase;


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123447</commentid>
    <comment_count>16</comment_count>
      <attachid>30744</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-05-28 12:45:23 -0700</bug_when>
    <thetext>Created attachment 30744
ApplicationCacheFrontend interface and usage (rev 3)

Uploaded a new patch in response to some review comments from this patches sister in chromium-land...

http://codereview.chromium.org/113554

This rev gets rid of an abstract interface per the discussion on the webkit list about avoiding virtual methods whenever possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123507</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-05-28 18:26:56 -0700</bug_when>
    <thetext>How do I assign this bug to myself?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123650</commentid>
    <comment_count>18</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-05-29 16:30:37 -0700</bug_when>
    <thetext>&gt; // Called during frame navigation when a new document is committed.
&gt; virtual void selectInitialCache(const KURL&amp; documentURL,
&gt;                                 ApplicationCacheID cacheDocumentWasLoadedFrom);

ooops... i missed a &apos;virtual&apos; keyword</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123937</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-06-01 23:27:48 -0700</bug_when>
    <thetext>I still don&apos;t understand how we can use an out of process appcache with synchronous ResourceLoader code.

Maybe we should first make appcache asynchronous without splitting it into frontend and backend or moving it out of process? That would need to be done anyway, and it seems that the result of such refactoring will make it easier to define the best interface for a split appcache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124035</commentid>
    <comment_count>20</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-06-02 12:58:31 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; I still don&apos;t understand how we can use an out of process appcache with
&gt; synchronous ResourceLoader code.

Understood. I&apos;ll point out that chrome supports the synchronous ResourceLoader interfaces today, out of process. We can use an out of process appcache in the same fashion.

There is very little in the patch I&apos;ve submitted for review related to this part of things, the only bits are the additional fields added to ResourceResponseBase and ResourceRequestBase (behind the the new ENABLE(APPLICATION_CACHE) flag).

I&apos;m looking for a review of this modest patch at this time. I realize the details of resource loading are still obscure. Not having a place to submit code (a flag to put code behind), is blocking me.

(more on resource loading later)

&gt; Maybe we should first make appcache asynchronous without splitting it into
&gt; frontend and backend or moving it out of process? That would need to be done
&gt; anyway, and it seems that the result of such refactoring will make it easier to
&gt; define the best interface for a split appcache.

There is a milestone I would like to reach sooner rather than later.
* This feature being functional in chrome.

I&apos;m not too keen on doing a ton of work, only to then be in a position to do a ton more work prior to hitting that milestone. Every other webkit based browser has a functional (if not ideal) implementation of this feature set while Chrome is out in the cold.  If we followed the phases you outline, every other webkit based browser would have a slightly more functional appcache implmentation available to it, while Chrome would still be out in the cold.

I&apos;d like to bring up a new implementation of this system with Chrome as a first class citizen. Let&apos;s walk and chew gum at the same time, make it async and make it accommodate a remoting layer.

The remoting layer should be a small part provided the &apos;backend&apos; doesn&apos;t have insidious dependencies on Frame* and Document* (and vice versa).

------------------

I&apos;ll try again to describe what I have in mind for appcache resource loading.

Make appcahe resource loading a function of ResourceHandle and not a function of the &quot;loader&quot;. The additional fields of ResourceRequestBase and ResourceResponseBase in the patch I&apos;ve submitted for review are sufficient inputs and outputs to facilitate that. (ResourceHandle is remotable and is already remoted in chrome).

Change when the appcache is consulted during resource loads. Currently the appcache is consulted prior to consulting the memory cache. Reverse that order and make the memory cache sensitive to which appcache a cached resource was loaded from. (There would no longer be a need for the appcache to perform additional memory caching as it does in its current form).

The &quot;loader&quot; does not perform reads from the appcache directly, it does so indirectly thru ResourceHandle.

------------------

If that is not clear, please ask me specific questions to clarify what I&apos;m driving at.

What I&apos;m not clear on are the details of how the memory cache and the loader are plugged together, and how to make the memory cache sensitive to appcaches.













</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124041</commentid>
    <comment_count>21</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-06-02 13:26:14 -0700</bug_when>
    <thetext>&gt; If that is not clear, please ask me specific questions to clarify what I&apos;m
&gt; driving at.

Also, if you see an alternative approach, please do share.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124208</commentid>
    <comment_count>22</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-06-03 13:45:04 -0700</bug_when>
    <thetext>Discussing this with Michael offline - I&apos;m not convinced that ResourceHandle is the right place to have appcache logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124383</commentid>
    <comment_count>23</comment_count>
      <attachid>30744</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-06-04 14:17:48 -0700</bug_when>
    <thetext>Comment on attachment 30744
ApplicationCacheFrontend interface and usage (rev 3)

We&apos;ve discussed the refactoring on IRC for some time, and I think that we have some agreement on how to move forward.

- ResourceHandle should be left unchanged, as it is primarily just an interface to platform-specific code.
- A new class should be introduced, that will incorporate both network and appcache loading. This is pretty much what Michael suggested above, in fact.
- Application cache implementation should not use global data, so that it could support Chrome&apos;s incognito mode.
- As much as possible, we should move in small steps, and avoid ifdefs that are forking the logic.

Getting appcache work on Chrome is definitely a priority. What needs to be done is figuring out what small incremental steps that are needed to get it work can be done separately. One example we could come up with was getting rid of global data in appcache - with luck, there is a path with very little divergence in logic needed at any point (and once Chrome works, further refactoring will remove the rest).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124394</commentid>
    <comment_count>24</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-06-04 15:59:25 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 30744 [review])
&gt; We&apos;ve discussed the refactoring on IRC for some time, and I think that we have
&gt; some agreement on how to move forward.
&gt; 
&gt; - ResourceHandle should be left unchanged, as it is primarily just an interface
&gt; to platform-specific code.
&gt; - A new class should be introduced, that will incorporate both network and
&gt; appcache loading. This is pretty much what Michael suggested above, in fact.
&gt; - Application cache implementation should not use global data, so that it could
&gt; support Chrome&apos;s incognito mode.
&gt; - As much as possible, we should move in small steps, and avoid ifdefs that are
&gt; forking the logic.
&gt; 
&gt; Getting appcache work on Chrome is definitely a priority. What needs to be done
&gt; is figuring out what small incremental steps that are needed to get it work can
&gt; be done separately. One example we could come up with was getting rid of global
&gt; data in appcache - with luck, there is a path with very little divergence in
&gt; logic needed at any point (and once Chrome works, further refactoring will
&gt; remove the rest).

Alexey may have overstated the amount of agreement we have on some points :) In summary we agreed on what to build, but not on the steps to take to build it.

We have been discussing this on IRC/email for the last few days, a few hours total. We did agree in principal on the end result, the design of the resulting code. I&apos;m real happy about that much. Until earlier today, I have had little indication of whether where I&apos;m trying to go with this would be acceptable or not.

We don&apos;t entirely agree on the blocking and tackling tactics (sequencing of the work) to get there.

Alexey is lobbying for incremental steps the move the current code base to the new design. I&apos;m lobbying for an initially clean slate, and incrementally putting new code, and branching existing code with modifications, onto the new slate. There are pros and cons each way.

Cons to the incremental approach.

* I would have to study whats there and plot a course (sequence of patches) that maintains functional parity with the current system every step of the way. I haven&apos;t done that and I&apos;m not sure how twisty or turny such a course would be. I do think it will take some doing just to figure out what the options are. Time and effort that could be spent more productively going in a straight line starting from a clean slate. Honestly, I&apos;m not sure what the first step along this path should be?

* Each incremental change puts at risk existing users of this feature. Functional parity and stability should be maintained at every step of the way... but will that be achieved... bugs happen?

* While the refactoring is happening, other unrelated mods will be happening too. A big part of the refactoring will be removing dependencies between appcache core classes and other webcore classes. This could be like a game of whack-a-mole depending on what else is going on in the interim.

* To my way of thinking, this is an extra layer of complexity that doesn&apos;t need to be there. Its an artificial constraint.

* Chrome has nothing on this feature yet. Every other webkit based browser has a functional appcache. Even a barely functional and buggy cut at this in chrome is of value. Getting to this milestone sooner rather than later would be good for the community. The incremental approach (calling for full functionality and stability at every step of the way) is at odds with this goal of getting chrome something usable (if not of shippable quality) quickly.

Cons to the clean-slate approach

* Context switch when doing code reviews.

* The need to resolve conflicts with incompatible changes because many others will not be compiling with the new flag.

Anyway... that&apos;s where we left our discussion. I&apos;m not convinced the extra complexity is a good thing, it adds a new dimension to the puzzle that needs additional solving.


 
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124412</commentid>
    <comment_count>25</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-04 16:57:06 -0700</bug_when>
    <thetext>Something that might be a con of the clean slate approach is that the final product will probably be different in some non-essential ways from the current AppCache implementation.  This will make it harder for others to make changes in the future.

Overall, I can DEFINITELY empathize.  I think I could have had a pretty good LocalStorage implementation done by now had I started from scratch.  Instead, I had to spend a LOT of time studying what&apos;s there now.  And I&apos;ve been hit by pretty much every issue you mentioned in the cons for the incremental approach.

(In reply to comment #24)
&gt; * I would have to study whats there and plot a course (sequence of patches)
&gt; that maintains functional parity with the current system every step of the way.
&gt; I haven&apos;t done that and I&apos;m not sure how twisty or turny such a course would
&gt; be. I do think it will take some doing just to figure out what the options are.
&gt; Time and effort that could be spent more productively going in a straight line
&gt; starting from a clean slate. Honestly, I&apos;m not sure what the first step along
&gt; this path should be?

This definitely was an issue for me.  The only way I could move forward was by writing a lot of throw-away code to basically prototype everything I was planning on doing.  I&apos;ve even stopped and thrown away code as I write each patch because I realize things are getting too complicated and I need to break things into smaller functional parts.

And I say all of this knowing that LocalStorage is a much simpler and more atomic chunk of code than AppCache.  Taking everything into account, I actually think Michael&apos;s approach is probably the best one here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126889</commentid>
    <comment_count>26</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-06-18 23:19:31 -0700</bug_when>
    <thetext>Another option that wasn&apos;t mentioned yet is to create a development branch in the WebKit repository - that way, the trunk won&apos;t be polluted with branched code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127654</commentid>
    <comment_count>27</comment_count>
      <attachid>31726</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-06-23 12:27:56 -0700</bug_when>
    <thetext>Created attachment 31726
ApplicationCacheFrontent + ApplicationCacheBridge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127662</commentid>
    <comment_count>28</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-06-23 12:51:29 -0700</bug_when>
    <thetext>Hello, here&apos;s an update on this.

I&apos;ve continued working down a straight line approach to help flesh out details and hopefully inform me of a way to move this into the project more incrementatlly. The newly uploaded patch shows that work. New in the patch is an ApplicationCacheBridge interface and concrete impl for use in a single-process browser. The &apos;frontend&apos; talks thru the &apos;bridge&apos; to the &apos;backend&apos;. In chrome, the bridge is an ipc layer.

I&apos;ve also been working out what series of incrementation steps will get this feature where it wants to go. I don&apos;t have the path from start to finish mapped out, but i do think i see some initial steps to take. The &apos;fat&apos; resource handle is key, so I&apos;ve been focusing on that more recently.

1) v8 bindings for DOMApplicationCache, uttlerly independent of common code, can go in anytime

2) ResourceHandle &apos;interceptor&apos; infrastructure. I&apos;ve spun off a new bug for this specifically, https://bugs.webkit.org/show_bug.cgi?id=26655.

3) TBD
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130702</commentid>
    <comment_count>29</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-07-09 12:42:36 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; Another option that wasn&apos;t mentioned yet is to create a development branch in
&gt; the WebKit repository - that way, the trunk won&apos;t be polluted with branched
&gt; code.

This individual feature isn&apos;t worth a branch. That would complicate chrome/webkit integration workflow considerably. The chrome team just spent a lot of time unbranching/forking, we want to work on tip-of-tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135726</commentid>
    <comment_count>30</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-07-29 16:41:48 -0700</bug_when>
    <thetext>Closing...  turns out this was a big digression... we&apos;re (chrome and safari) not going to share a common implementation after all... at least not for the foreseeable future.

In lieu of having a common impl, we&apos;re putting in place an interface that the two impls can both live behind. I&apos;ve opened a seperate bug to track that work and patches.
https://bugs.webkit.org/show_bug.cgi?id=27821

The conclusion we got to is reasonable, the time taken to reach that conclusion was not.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29920</attachid>
            <date>2009-04-30 13:55:26 -0700</date>
            <delta_ts>2009-05-27 13:02:59 -0700</delta_ts>
            <desc>outline of some interfaces</desc>
            <filename>appcache-interfaces.patch</filename>
            <type>text/plain</type>
            <size>29213</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQzMDgz
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMDktMDQt
MzAgIE1pY2hhZWwgTm9yZG1hbiAgPHNldCBtaWNoYWVsbkBnb29nbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYXBwY2FjaGU6IEFkZGVk
LgorICAgICAgICAqIGFwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVDb21tb24uaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEOjpHbG9iYWxB
cHBsaWNhdGlvbkNhY2hlQ29udGV4dElEKToKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAg
ICogYXBwY2FjaGUvYmFja2VuZDogQWRkZWQuCisgICAgICAgICogYXBwY2FjaGUvYmFja2VuZC9B
cHBsaWNhdGlvbkNhY2hlQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKiBhcHBjYWNoZS9iYWNr
ZW5kL0FwcGxpY2F0aW9uQ2FjaGVJbnRlcmNlcHRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVJbnRlcmNlcHRvcjo6Sm9iRGVsZWdhdGU6On5Kb2JEZWxlZ2F0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlSW50ZXJjZXB0b3I6OkFwcGxp
Y2F0aW9uQ2FjaGVJbnRlcmNlcHRvcik6CisgICAgICAgICogYXBwY2FjaGUvYmFja2VuZC9BcHBs
aWNhdGlvbkNhY2hlU2VydmljZS5oOiBBZGRlZC4KKyAgICAgICAgKiBhcHBjYWNoZS9mcm9udGVu
ZDogQWRkZWQuCisgICAgICAgICogYXBwY2FjaGUvZnJvbnRlbmQvV2ViQXBwbGljYXRpb25DYWNo
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0
ZTo6fldlYkFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJB
cHBsaWNhdGlvbkNhY2hlRGVsZWdhdGU6Oik6CisgICAgICAgIChXZWJDb3JlOjpXZWJBcHBsaWNh
dGlvbkNhY2hlRGVsZWdhdGU6OmNhbGxWaXJ0dWFsTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkFwcGxpY2F0aW9uQ2FjaGU6OldlYkFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViQXBwbGljYXRpb25DYWNoZTo6fldlYkFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViQXBwbGljYXRpb25DYWNoZTo6Y2FsbENoZWNraW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxFcnJvcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJBcHBsaWNhdGlvbkNhY2hlOjpjYWxsTm9VcGRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViQXBwbGljYXRpb25DYWNoZTo6Y2FsbERvd25sb2FkaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxQcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJBcHBsaWNhdGlvbkNhY2hlOjpjYWxsVXBkYXRlUmVhZHkpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViQXBwbGljYXRpb25DYWNoZTo6Y2FsbENhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJBcHBsaWNhdGlvbkNhY2hlOjpjYWxsT2Jzb2xldGUpOgorICAgICAgICAqIGFwcGNhY2hlL2Zy
b250ZW5kL1dlYkFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0Lmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViQXBwbGljYXRpb25DYWNoZUNvbnRleHQ6OmdldENvbnRleHRJRCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJBcHBsaWNhdGlvbkNhY2hlQ29udGV4dDo6fldlYkFwcGxpY2F0aW9uQ2Fj
aGVDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0
OjpzZXRDb250ZXh0SUQpOgorCiAyMDA5LTA0LTMwICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtv
dkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgQ2hyb21pdW0gYnVpbGQgZml4
LgpJbmRleDogYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUNvbW1vbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGFwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVDb21tb24uaAkocmV2aXNpb24gMCkKKysrIGFwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVDb21tb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICog
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBBcHBsaWNhdGlvbkNhY2hlQ29tbW9uX2gKKyNkZWZpbmUgQXBwbGljYXRp
b25DYWNoZUNvbW1vbl9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIC8vIFR5cGVzIGFu
ZCBjb25zdGFudHMgdXNlZCBieSB0aGUgZnJvbnQgYW5kIGJhY2sgZW5kcworCisgICAgdHlwZWRl
ZiBsb25nIGxvbmcgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2VJRDsgIC8vIHNxbGl0ZSByb3dpZAor
ICAgIHR5cGVkZWYgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2VJRCBBcHBsaWNhdGlvbkNhY2hlSUQ7
CisgICAgdHlwZWRlZiBpbnQgQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRDsKKworICAgIHN0cnVj
dCBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEIHsKKyAgICAgICAgR2xvYmFsQXBwbGlj
YXRpb25DYWNoZUNvbnRleHRJRCgpCisgICAgICAgICAgICA6IG1fY29udGV4dElEKDApCisgICAg
ICAgICAgICAsIG1fcHJvY2Vzc0lEKDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQoQXBwbGljYXRpb25DYWNoZUNvbnRleHRJ
RCBjb250ZXh0SUQsIGludCBwcm9jZXNzSUQpCisgICAgICAgICAgICA6IG1fY29udGV4dElEKGNv
bnRleHRJRCkKKyAgICAgICAgICAgICwgbV9wcm9jZXNzSUQocHJvY2Vzc0lEKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEIG1fY29udGV4
dElEOworICAgICAgICBpbnQgbV9wcm9jZXNzSUQ7CisgICAgfTsKKworICAgIGVudW0gQXBwbGlj
YXRpb25DYWNoZUNvbnRleHRUeXBlIHsKKyAgICAgICAgTWFpbkZyYW1lQ29udGV4dCwKKyAgICAg
ICAgU3ViRnJhbWVDb250ZXh0LAorICAgICAgICBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0LAorICAg
ICAgICBTaGFyZWRXb3JrZXJDb250ZXh0CisgICAgfTsKKworICAgIGVudW0gV2VsbEtub3duQXBw
bGljYXRpb25DYWNoZUlEcyB7CisgICAgICAgIE5vQXBwbGljYXRpb25DYWNoZUlEID0gMCwKKyAg
ICAgICAgTm9BcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEID0gMCwKKyAgICAgICAgVW5rbm93bkFw
cGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQgPSAtMSwKKyAgICB9OworCisgICAgZW51bSBBcHBsaWNh
dGlvbkNhY2hlU3RhdHVzIHsKKyAgICAgICAgVU5DQUNIRUQgPSAwLAorICAgICAgICBJRExFID0g
MSwKKyAgICAgICAgQ0hFQ0tJTkcgPSAyLAorICAgICAgICBET1dOTE9BRElORyA9IDMsCisgICAg
ICAgIFVQREFURVJFQURZID0gNCwKKyAgICAgICAgT0JTT0xFVEUgPSA1CisgICAgfTsKKworfSAg
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBhcHBj
YWNoZS9BcHBsaWNhdGlvbkNhY2hlQ29tbW9uLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1
dGFibGUKICAgKyAqCgpJbmRleDogYXBwY2FjaGUvYmFja2VuZC9BcHBsaWNhdGlvbkNhY2hlQ29u
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGFwcGNhY2hlL2JhY2tlbmQvQXBwbGljYXRpb25DYWNoZUNv
bnRleHQuaAkocmV2aXNpb24gMCkKKysrIGFwcGNhY2hlL2JhY2tlbmQvQXBwbGljYXRpb25DYWNo
ZUNvbnRleHQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXBw
bGljYXRpb25DYWNoZUNvbnRleHRfaAorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIi4u
L0FwcGxpY2F0aW9uQ2FjaGVDb21tb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAg
Ly8gRm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlOworICAg
IGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVJbnRlcmNlcHRvcjsKKyAgICBjbGFzcyBBcHBsaWNhdGlv
bkNhY2hlU2VydmljZTsKKyAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlQ29udGV4dERlbGVnYXRl
OworCisgICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZUNvbnRleHREZWxlZ2F0ZSB7CisgICAgcHVi
bGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgb25TZWxlY3RlZChpbnQgc2VsZWN0Q29va2llLCBB
cHBsaWNhdGlvbkNhY2hlSUQgc2VsZWN0ZWRDYWNoZUlEKSA9IDA7CisKKyAgICAgICAgLy8gRXZl
bnRzIHJlbGF0ZWQgdG8gdGhlIHNlbGVjdGVkIGFwcGNhY2hlIGFyZSBhbHNvIHN1cmZhY2VkIHRv
IGNsaWVudHMKKyAgICAgICAgLy8gdGhydSB0aGUgY2FjaGUgY29udGV4dCBkZWxlZ2F0ZS4KKyAg
ICAgICAgdmlydHVhbCB2b2lkIG9uQ2hlY2tpbmcoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBvbkVycm9yKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgb25Ob1VwZGF0ZSgpID0gMDsK
KyAgICAgICAgdmlydHVhbCB2b2lkIG9uRG93bmxvYWRpbmcoKSA9IDA7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBvblByb2dyZXNzKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgb25VcGRhdGVS
ZWFkeSgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIG9uQ2FjaGVkKCkgPSAwOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgb25PYnNvbGV0ZSgpID0gMDsKKyAgICB9OworCisgICAgY2xhc3MgQXBw
bGljYXRpb25DYWNoZUNvbnRleHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgQXBwbGljYXRpb25D
YWNoZUNvbnRleHRUeXBlIGdldFR5cGUoKSBjb25zdDsKKworICAgICAgICBBcHBsaWNhdGlvbkNh
Y2hlQ29udGV4dERlbGVnYXRlKiBnZXREZWxlZ2F0ZSgpIGNvbnN0OworICAgICAgICB2b2lkIHNl
dERlbGVnYXRlKEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0RGVsZWdhdGUqIGRlbGVnYXRlKTsKKwor
ICAgICAgICAvLyBVbHRpbWF0ZWx5IGNhbGxlZCB3aGVuIGxvYWRpbmcgcmVzb3VyY2VzIGludG8g
YSBjb250ZXh0CisgICAgICAgIC8vIFJldHVybnMgYW4gaW50ZXJjZXB0b3IsIG1heSByZXR1cm4g
TlVMTCBpZiB0aGVyZSBpcyBubyBjaGFuY2UgdGhlCisgICAgICAgIC8vIHJlc291cmNlIHdpbGwg
YmUgbG9hZGVkIGZyb20gYW4gYXBwY2FjaGUuCisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVJbnRl
cmNlcHRvciogY3JlYXRlSW50ZXJjZXB0b3IoCisgICAgICAgICAgICBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBib29sIGlzTWFpblJlc291cmNlKTsKKworICAgICAgICAv
LyBVbHRpbWF0ZWx5IGNhbGxlZCB3aGVuIGEgbmV3IGRvY3VtZW50IGlzIGNvbW1pdHRlZCB0byBh
IGNvbnRleHQKKyAgICAgICAgdm9pZCBzZWxlY3RDYWNoZShpbnQgc2VsZWN0Q29va2llLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVJRCBjYWNoZURvY3VtZW50V2FzTG9hZGVk
RnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBtYW5pZnN0VVJMKTsK
KworICAgICAgICAvLyBVbHRpbWF0ZWx5IGNhbGxlZCBpbiByZXNwb25zZSB0byB0aGUgc2NyaXB0
YWJsZSBhcHBsaWNhdGlvbiBjYWNoZSBBUEkuCisgICAgICAgIC8vIE1ldGhvZHMgcmVsYXRlZCB0
byB0aGUgc2VsZWN0ZWQgYXBwYWNoZSBhcmUgYWxzbyBzdXJmYWNlZCB0byBjbGllbnRzCisgICAg
ICAgIC8vIHRocnUgdGhlIGNhY2hlIGNvbnRleHQgY2xhc3MuCisgICAgICAgIEFwcGxpY2F0aW9u
Q2FjaGVTdGF0dXMgc3RhdHVzKCkgY29uc3Q7CisgICAgICAgIGJvb2wgdXBkYXRlKCk7CisgICAg
ICAgIGJvb2wgc3dhcENhY2hlKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgQXBw
bGljYXRpb25DYWNoZVNlcnZpY2U7CisKKyAgICAgICAgLy8gQ2FsbGVycyBzaG91bGQgdXNlIHRo
ZSBBcHBsaWNhdGlvbkNhY2hlU2VydmljZTo6Y3JlYXRlQ2FjaGVDb250ZXh0IG1ldGhvZC4KKyAg
ICAgICAgQXBwbGljYXRpb25DYWNoZUNvbnRleHQoQXBwbGljYXRpb25DYWNoZVNlcnZpY2UqIHNl
cnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdsb2JhbEFwcGxp
Y2F0aW9uQ2FjaGVDb250ZXh0SUQmIG1fY29udGV4dElEKTsKKworICAgICAgICBBcHBsaWNhdGlv
bkNhY2hlU2VydmljZSogbV9zZXJ2aWNlOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlQ29udGV4
dFR5cGUgbV9jb250ZXh0VHlwZTsKKyAgICAgICAgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRl
eHRJRCBtX2NvbnRleHRJRDsKKyAgICAgICAgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJ
RCBtX3BhcmVudENvbnRleHRJRDsKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUNvbnRleHREZWxl
Z2F0ZSogbV9kZWxlZ2F0ZTsKKyAgICAgICAgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IG1fYXBw
bGljYXRpb25DYWNoZTsKKyAgICB9OworCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKClByb3BlcnR5IGNoYW5nZXMgb246IGFwcGNhY2hlL2JhY2tlbmQvQXBwbGljYXRpb25DYWNo
ZUNvbnRleHQuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4
OiBhcHBjYWNoZS9iYWNrZW5kL0FwcGxpY2F0aW9uQ2FjaGVJbnRlcmNlcHRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGFwcGNhY2hlL2JhY2tlbmQvQXBwbGljYXRpb25DYWNoZUludGVyY2VwdG9yLmgJKHJl
dmlzaW9uIDApCisrKyBhcHBjYWNoZS9iYWNrZW5kL0FwcGxpY2F0aW9uQ2FjaGVJbnRlcmNlcHRv
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAwOSwgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBcHBsaWNhdGlv
bkNhY2hlSW50ZXJjZXB0b3JfaAorI2RlZmluZSBBcHBsaWNhdGlvbkNhY2hlSW50ZXJjZXB0b3Jf
aAorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNp
bmNsdWRlICIuLi9BcHBsaWNhdGlvbkNhY2hlQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworICAvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucworICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hl
Q29udGV4dDsKKworICAvLyBUaGUgZW1iZWRkaW5nIGJyb3dzZXIgc2hvdWxkIHVzZSB0aGlzIGlu
dGVyZmFjZSB0byBhbGxvdyB0aGUgYXBwY2FjaGUgCisgIC8vIHN5c3RlbSB0byBpbnRlcmNlcHQg
cmVzb3VyY2UgbG9hZHMuIEEgbmV3IGludGVyY2VwdG9yIHNob3VsZCBiZSBjcmVhdGVkCisgIC8v
IGZvciBlYWNoIHJlc291cmNlIGxvYWQsIGFuZCBpdHMgbWV0aG9kcyBzaG91bGQgYmUgY2FsbGVk
IGR1cmluZyB0aGUgCisgIC8vIGNvdXJzZSBvZiBoYW5kbGluZyB0aGUgcmVxdWVzdCB0byBhbGxv
dyB0aGUgYXBwY2FjaGUgdG8gaW50ZXJ2ZW5lIGFuZCAKKyAgLy8gcmV0dXJuIGEgY2FjaGVkIHJl
c3BvbnNlLiBBIGluc3RhbmNlIGhhbmRsZXMgYSBzaW5nbGUgcmVzb3VyY2UgbG9hZCB3aGljaAor
ICAvLyBtYXkgaW52b2x2ZSBhIG1vcmUgdGhhbiBvbmUgcmVxdWVzdCB3aGVuIHJlZGlyZWN0aW9u
IGlzIGludm9sdmVkLiBUaGUKKyAgLy8gaW50ZXJjZXB0b3Igc2hvdWxkIG5vdCBiZSBkZWxldGVk
IHVudGlsIHRoZSByZXNwb25zZSBhbmQgYWxsIGRhdGEgaGFzCisgIC8vIGJlZW4gZGVsaXZlcmVk
IHRvIHRoZSByZXF1ZXN0b3IuCisgIC8vIFRPRE8obWljaGFlbG4pOiB3b3JrIHRocnUgdGhlIGxp
ZmVjeWxlIG9mIHRoZXNlIG9iamVjdHMsIHdoYXQgc2hvdWxkCisgIC8vIGJlIHJlZmNvdW50ZWQg
YW5kIHdoYXQgc2hvdWxkIGtlZXAgYW4gaW50ZXJjZXB0b3IsIGNvbnRleHQsIGNhY2hlIGFsaXZl
PworICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlSW50ZXJjZXB0b3IgeworICBwdWJsaWM6CisKKyAg
ICAgIC8vIEZvcndhcmQgZGVjbGFyYXRpb25zIG9mIG5lc3RlZCBjbGFzc2VzCisgICAgICBjbGFz
cyBKb2I7CisgICAgICBjbGFzcyBKb2JEZWxlZ2F0ZTsKKworICAgICAgSm9iKiBtYXliZUludGVy
Y2VwdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOworICAgICAgSm9iKiBtYXliZUZh
bGxiYWNrT25SZWRpcmVjdChjb25zdCBLVVJMJiBsb2NhdGlvbik7CisgICAgICBKb2IqIG1heWJl
RmFsbGJhY2tPblJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKTsKKwor
ICAgICAgY2xhc3MgSm9iIHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgICB2b2lkIHN0YXJ0KEpv
YkRlbGVnYXRlICpkZWxlZ2F0ZSk7CisgICAgICAgICAgfkpvYigpOworICAgICAgfTsKKworICAg
ICAgY2xhc3MgSm9iRGVsZWdhdGUgeworICAgICAgcHVibGljOgorICAgICAgICAgIC8vIFRPRE8o
bWljaGFlbG4pOiBhbGxvdyBmb3Igc3RyZWFtaW5nIG9mIHRoZSByZXNwb25zZSBkYXRhCisgICAg
ICAgICAgdmlydHVhbCB2b2lkIG9uSm9iQ29tcGxldGUoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhcmVkQnVm
ZmVyKiByZXNwb25zZURhdGEpID0gMDsKKyAgICAgICAgICB2aXJ0dWFsIHZvaWQgb25Kb2JGYWls
ZWQoKTsKKyAgICAgICAgICB2aXJ0dWFsIHZvaWQgb25Kb2JTaG91bGROb3RIYXZlSW50ZXJjZXB0
ZWQoKSA9IDA7CisgICAgICAgICAgdmlydHVhbCB+Sm9iRGVsZWdhdGUoKSB7fQorICAgICAgfTsK
KworICAgIHByb3RlY3RlZDoKKyAgICAgICAgZnJpZW5kIEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0
OworCisgICAgICAgIC8vIENhbGxlcnMgc2hvdWxkIHVzZSBBcHBsaWNhdGlvbkNhY2hlQ29udGV4
dDo6Q3JlYXRlSW50ZXJjZXB0b3IKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUludGVyY2VwdG9y
KEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0KiBjYWNoZUNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGlzTWFpblJlc291cmNlKQorICAgICAgICAgICAgOiBt
X2NhY2hlQ29udGV4dChjYWNoZUNvbnRleHQpCisgICAgICAgICAgICAsIG1faXNNYWluUmVzb3Vy
Y2UoaXNNYWluUmVzb3VyY2UpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0
IEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0KiBtX2NhY2hlQ29udGV4dDsKKyAgICAgICAgY29uc3Qg
Ym9vbCBtX2lzTWFpblJlc291cmNlOworCisgICAgICAgIC8vIEluZm8gYWJvdXQgdGhlIGN1cnJl
bnQgcmVxdWVzdCBiZWluZyBpbnRlcmNlcHRlZC4gVGhpcyBpcyBzZXQgaW4gCisgICAgICAgIC8v
IG1heWJlSW50ZXJjZXB0IGFuZCB3aWxsIGJlIHZhbGlkIGF0IG1heWJlRmFsbGJhY2sgdGltZS4g
SW4gdGhlIGNhc2UKKyAgICAgICAgLy8gb2YgcmVkaXJlY3Rpb24sIG1heWJlSW50ZXJjZXB0IHdp
bGwgYmUgY2FsbGVkIGZvciBlYWNoIHJlZGlyZWN0aW9uCisgICAgICAgIC8vIHNvIHRoaXMgdmFs
dWUgY2FuIGNoYW5nZSBvdmVyIHRoZSBsaWZlIG9mIGFuIGludGVyY2VwdG9yIGluc3RhbmNlLgor
ICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsKKyAgICB9OworCit9OyAg
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBhcHBj
YWNoZS9iYWNrZW5kL0FwcGxpY2F0aW9uQ2FjaGVJbnRlcmNlcHRvci5oCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IGFwcGNhY2hlL2JhY2tlbmQvQXBwbGlj
YXRpb25DYWNoZVNlcnZpY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcHBjYWNoZS9iYWNrZW5kL0FwcGxp
Y2F0aW9uQ2FjaGVTZXJ2aWNlLmgJKHJldmlzaW9uIDApCisrKyBhcHBjYWNoZS9iYWNrZW5kL0Fw
cGxpY2F0aW9uQ2FjaGVTZXJ2aWNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQXBwbGljYXRpb25DYWNoZVNlcnZpY2VfaAorI2RlZmluZSBBcHBsaWNhdGlvbkNh
Y2hlU2VydmljZV9oCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiLi4vQXBwbGljYXRp
b25DYWNoZUNvbW1vbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICAvLyBGb3J3YXJk
IGRlY2xhcmF0aW9ucworICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVJbnRlcmNlcHRvcjsKKyAg
ICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlQ29udGV4dDsKKworICAgIC8vIFRoZSByb290IG9mIHRo
ZSBiYWNrZW5kIGFwcGNhY2hlIHN5c3RlbS4KKyAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlU2Vy
dmljZSB7CisgICAgcHVibGljOgorICAgICAgICAvLyBGYWN0b3J5IHRvIGNyZWF0ZSBhbiBpbnN0
YW5jZSBvcGVuZWQgb24gdGhlIGdpdmVuIGRhdGFfZGlyZWN0b3J5LgorICAgICAgICAvLyBUaGVy
ZSBzaG91bGQgb25seSBiZSBvbmUgc2VydmljZSBvcGVuIG9uIGEgZGlyZWN0b3J5LgorICAgICAg
ICBzdGF0aWMgQXBwbGljYXRpb25DYWNoZVNlcnZpY2UqIGNyZWF0ZShjb25zdCBTdHJpbmcmIGRh
dGFEaXJlY3RvcnkpOworCisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0KiBjcmVhdGVD
YWNoZUNvbnRleHQoCisgICAgICAgICAgICBjb25zdCBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29u
dGV4dElEICZjb250ZXh0SUQsCisgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlQ29udGV4dFR5
cGUgY29udGV4dFR5cGUsCisgICAgICAgICAgICBjb25zdCBHbG9iYWxBcHBsaWNhdGlvbkNhY2hl
Q29udGV4dElEICZwYXJlbnRJRCk7CisKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUNvbnRleHQq
IGdldENhY2hlQ29udGV4dCgKKyAgICAgICAgICAgIGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2Fj
aGVDb250ZXh0SUQgJmNvbnRleHRJRCk7CisKKyAgICAgICAgdm9pZCBkZXN0cm95Q2FjaGVDb250
ZXh0KAorICAgICAgICAgICAgY29uc3QgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCAm
Y29udGV4dElEKTsKKworICAgICAgICB2b2lkIGRlc3Ryb3lBbGxBcHBsaWNhdGlvbkNhY2hlQ29u
dGV4dHNGb3JQcm9jZXNzKGludCBwcm9jZXNzSUQpOworICAgICAgICAKKyAgICBwcml2YXRlOgor
ICAgICAgICAvLyBDYWxsZXJzIHNob3VsZCB1c2UgdGhlIENyZWF0ZSBtZXRob2QuCisgICAgICAg
IEFwcGxpY2F0aW9uQ2FjaGVTZXJ2aWNlKGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSk7CisK
KyAgICAgICAgU3RyaW5nIG1fZGF0YURpcmVjdG9yeTsKKyAgICAgICAgCisgICAgICAgIC8vIENv
bGxlY3Rpb24gb2YgYWN0aXZlIGNhY2hlIGNvbnRleHRzCisgICAgICAgIHR5cGVkZWYgSGFzaE1h
cDxHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElELCBBcHBsaWNhdGlvbkNhY2hlQ29udGV4
dCo+IENhY2hlQ29udGV4dE1hcDsKKyAgICAgICAgQ2FjaGVDb250ZXh0TWFwIG1fY2FjaGVDb250
ZXh0czsKKworICAgICAgICAvLyBDb2xsZWN0aW9uIG9mIGFjdGl2ZSBjYWNoZSBncm91cHMgYW5k
IGNhY2hlcywgdGhlIG1hbmlmZXN0VXJsIGlzIHRoZSBrZXkKKyAgICAgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgQXBwbGljYXRpb25DYWNoZUdyb3VwKj4gQ2FjaGVHcm91cE1hcDsKKyAgICAg
ICAgQ2FjaGVHcm91cE1hcCBtX2NhY2hlR3JvdXBzSW5NZW1vcnk7ICAgLy8gRXhjbHVkZXMgb2Jz
b2xldGUgY2FjaGUgZ3JvdXBzCisgICAgfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBhcHBjYWNoZS9iYWNrZW5kL0FwcGxpY2F0aW9u
Q2FjaGVTZXJ2aWNlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJ
bmRleDogYXBwY2FjaGUvZnJvbnRlbmQvV2ViQXBwbGljYXRpb25DYWNoZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGFwcGNhY2hlL2Zyb250ZW5kL1dlYkFwcGxpY2F0aW9uQ2FjaGUuaAkocmV2aXNpb24gMCkK
KysrIGFwcGNhY2hlL2Zyb250ZW5kL1dlYkFwcGxpY2F0aW9uQ2FjaGUuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQXBwbGljYXRpb25DYWNoZV9oCisKKyNp
bmNsdWRlICIuLi9BcHBsaWNhdGlvbkNhY2hlQ29tbW9uLmgiCisjaW5jbHVkZSAid3RmL1JlZkNv
dW50ZWQuaCIKKyNpbmNsdWRlICJ3dGYvVmVjdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZTsKKworLy8gQSBkZWxlZ2F0ZSBjbGFzcyB0byBz
dXBwb3J0IGZpcmluZyBldmVudHMgYmFjayBpbnRvIHNjcmlwdC4KK2NsYXNzIFdlYkFwcGxpY2F0
aW9uQ2FjaGVEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIG9uQ2hlY2tpbmco
V2ViQXBwbGljYXRpb25DYWNoZSogY2FjaGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb25FcnJv
cihXZWJBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSkgPSAwOyAgIAorICAgIHZpcnR1YWwgdm9pZCBv
bk5vVXBkYXRlKFdlYkFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKSA9IDA7ICAgIAorICAgIHZpcnR1
YWwgdm9pZCBvbkRvd25sb2FkaW5nKFdlYkFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIG9uUHJvZ3Jlc3MoV2ViQXBwbGljYXRpb25DYWNoZSogY2FjaGUpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgb25VcGRhdGVSZWFkeShXZWJBcHBsaWNhdGlvbkNhY2hlKiBj
YWNoZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvbkNhY2hlZChXZWJBcHBsaWNhdGlvbkNhY2hl
KiBjYWNoZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvbk9ic29sZXRlKFdlYkFwcGxpY2F0aW9u
Q2FjaGUqIGNhY2hlKSA9IDA7CisgICAgdmlydHVhbCB+V2ViQXBwbGljYXRpb25DYWNoZURlbGVn
YXRlKCkge30KKworcHJpdmF0ZToKKyAgICBmcmllbmQgV2ViQXBwbGljYXRpb25DYWNoZTsKKyAg
ICAKKyAgICAvLyBOT1RFOiB0aGVzZSBtdXN0IHJlbWFpbiBpbiB0aGUgb3JkZXIgYXMgdGhlIG1l
dGhvZHMgYXJlIGxpc3RlZCBhYm92ZQorICAgIC8vIFRPRE8obWljaGFlbG4pOiB0aGlzIGlzIHRv
b29vbyBmcmFnaWxlCisgICAgZW51bSBWVGFibGVJbmRleCB7IE9OQ0hFQ0tJTkcsIE9ORVJST1Is
IE9OTk9VUERBVEUsIE9ORE9XTkxPQURJTkcsCisgICAgICAgICAgICAgICAgICAgICAgIE9OUFJP
R1JFU1MsIE9OVVBEQVRFUkVBRFksIE9OQ0FDSEVELCBPTk9CU09MRVRFIH07CisKKyAgICB2b2lk
IGNhbGxWaXJ0dWFsTWV0aG9kKFZUYWJsZUluZGV4IGluZGV4LCBXZWJBcHBsaWNhdGlvbkNhY2hl
KiBjYWNoZSkgeworICAgICAgICB0eXBlZGVmIHZvaWQgKCpNZXRob2QpKFdlYkFwcGxpY2F0aW9u
Q2FjaGVEZWxlZ2F0ZSosIFdlYkFwcGxpY2F0aW9uQ2FjaGUqKTsKKyAgICAgICAgTWV0aG9kKiB2
dGFibGUgPSAqcmVpbnRlcnByZXRfY2FzdDxNZXRob2QqKj4odGhpcyk7CisgICAgICAgIHZ0YWJs
ZVtpbmRleF0odGhpcywgY2FjaGUpOworICAgIH0KK307CisKKy8vIEFuIGludGVyZmFjZSB0byB0
aGUgYXBwbGljYXRpb24gY2FjaGUgc3lzdGVtIGZvciB1c2UgYnkgdGhlIEpTQmluZGluZ3MgbGF5
ZXIuCisvLyBUaGUgV2ViQXBwbGljYXRpb25DYWNoZUNvbnRleHQgY2xhc3MgaXMgcmVzcG9uc2li
bGUgZm9yIGluc3RhbnRpYXRpbmcgYQorLy8gY29uY3JldGUgaW1wbGVtZW50YXRpb24gaW4gaXQn
cyBnZXRBcHBsaWNhdGlvbkNhY2hlIG1ldGhvZC4KK2NsYXNzIFdlYkFwcGxpY2F0aW9uQ2FjaGUg
eworcHVibGljOgorICAgIHZpcnR1YWwgQXBwbGljYXRpb25DYWNoZVN0YXR1cyBzdGF0dXMoKSBj
b25zdCA9IDA7ICAKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlKCkgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBzd2FwQ2FjaGUoKSA9IDA7ICAgCisKKyAgICAvLyBUT0RPKG1pY2hhZWxuKTogbWF5YmUg
d2Ugb25seSBuZWVkIHRvIHN1cHBvcnQgYSBzaW5nbGUgZGVsZWdhdGUsCisgICAgLy8gdGhlIERP
TUFwcGxpY2F0aW9uQ2FjaGUgb2JqZWN0CisgICAgdm9pZCBhdHRhY2hEZWxlZ2F0ZShXZWJBcHBs
aWNhdGlvbkNhY2hlRGVsZWdhdGUqIGRlbGVnYXRlKTsKKyAgICB2b2lkIGRldGFjaERlbGVnYXRl
KFdlYkFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZSogZGVsZWdhdGUpOworCitwcm90ZWN0ZWQ6Cisg
ICAgLy8gQ2FsbGVycyBzaG91bGQgdXNlIFdlYkFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0OjpnZXRB
cHBsaWNhdGlvbkNhY2hlKCkgdG8KKyAgICAvLyBnZXQgYSByZWZlcmVuY2UgdG8gYSBjb25jcmV0
ZSBpbnN0YW5jZS4gVGhlIGNhY2hlIGNvbnRleHQgb3ducyB0aGlzCisgICAgLy8gcmVmZXJlbmNl
LgorICAgIFdlYkFwcGxpY2F0aW9uQ2FjaGUoKSB7fQorICAgIHZpcnR1YWwgfldlYkFwcGxpY2F0
aW9uQ2FjaGUoKSB7fQorCisgICAgLy8gSGVscGVycyB0byBjYWxsIGFsbCBhdHRhY2hlZCBkZWxl
Z2F0ZXMgZm9yIGEgZ2l2ZW4gZXZlbnQuIEl0IGlzIE9LCisgICAgLy8gdG8gYXR0YWNoIGFuZCBk
ZXRhY2ggZGVsZWdhdGVzIHdoaWxlIGluIGEgZGVsZWdhdGUgY2FsbGJhY2suCisgICAgdm9pZCBj
YWxsQ2hlY2tpbmcoKSB7IGNhbGxBbGxEZWxlZ2F0ZXMoV2ViQXBwbGljYXRpb25DYWNoZURlbGVn
YXRlOjpPTkNIRUNLSU5HKTsgfQorICAgIHZvaWQgY2FsbEVycm9yKCkgeyBjYWxsQWxsRGVsZWdh
dGVzKFdlYkFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZTo6T05FUlJPUik7IH0gICAgCisgICAgdm9p
ZCBjYWxsTm9VcGRhdGUoKSB7IGNhbGxBbGxEZWxlZ2F0ZXMoV2ViQXBwbGljYXRpb25DYWNoZURl
bGVnYXRlOjpPTk5PVVBEQVRFKTsgfSAgICAKKyAgICB2b2lkIGNhbGxEb3dubG9hZGluZygpIHsg
Y2FsbEFsbERlbGVnYXRlcyhXZWJBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGU6Ok9ORE9XTkxPQURJ
TkcpOyB9CisgICAgdm9pZCBjYWxsUHJvZ3Jlc3MoKSB7IGNhbGxBbGxEZWxlZ2F0ZXMoV2ViQXBw
bGljYXRpb25DYWNoZURlbGVnYXRlOjpPTlBST0dSRVNTKTsgfQorICAgIHZvaWQgY2FsbFVwZGF0
ZVJlYWR5KCkgeyBjYWxsQWxsRGVsZWdhdGVzKFdlYkFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZTo6
T05VUERBVEVSRUFEWSk7IH0KKyAgICB2b2lkIGNhbGxDYWNoZWQoKSB7IGNhbGxBbGxEZWxlZ2F0
ZXMoV2ViQXBwbGljYXRpb25DYWNoZURlbGVnYXRlOjpPTkNBQ0hFRCk7IH0KKyAgICB2b2lkIGNh
bGxPYnNvbGV0ZSgpIHsgY2FsbEFsbERlbGVnYXRlcyhXZWJBcHBsaWNhdGlvbkNhY2hlRGVsZWdh
dGU6Ok9OT0JTT0xFVEUpOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBjYWxsQWxsRGVsZWdhdGVz
KFdlYkFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZTo6VlRhYmxlSW5kZXggbWV0aG9kSW5kZXgpOwor
CisgICAgLy8gTGlzdCBvZiBhdHRhY2hlZCBkZWxlZ2F0ZXMuCisgICAgdHlwZWRlZiBWZWN0b3I8
V2ViQXBwbGljYXRpb25DYWNoZURlbGVnYXRlKj4gRGVsZWdhdGVWZWN0b3I7CisgICAgRGVsZWdh
dGVWZWN0b3IgbV9kZWxlZ2F0ZXM7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgIC8vIFdlYkFwcGxpY2F0aW9uQ2FjaGVfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogYXBw
Y2FjaGUvZnJvbnRlbmQvV2ViQXBwbGljYXRpb25DYWNoZS5oCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IGFwcGNhY2hlL2Zyb250ZW5kL1dlYkFwcGxpY2F0
aW9uQ2FjaGVDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXBwY2FjaGUvZnJvbnRlbmQvV2ViQXBw
bGljYXRpb25DYWNoZUNvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIGFwcGNhY2hlL2Zyb250ZW5k
L1dlYkFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
IAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2ViQXBwbGljYXRpb25DYWNoZUNvbnRleHRfaAorCisjaW5jbHVkZSAi
Li4vQXBwbGljYXRpb25DYWNoZUNvbW1vbi5oIgorI2luY2x1ZGUgInd0Zi9QYXNzUmVmUHRyLmgi
CisjaW5jbHVkZSAiS1VSTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdlYkFw
cGxpY2F0aW9uQ2FjaGU7CisKKy8vIEFuIGludGVyZmFjZSB0byB0aGUgYXBwbGljYXRpb24gY2Fj
aGUgc3lzdGVtIGZvciB1c2UgZHVyaW5nIGZyYW1lIG9yIHdvcmtlcgorLy8gY3JlYXRpb24sIGRl
c3RydWN0aW9uLCBhbmQgbmF2aWdhdGlvbi4gRWFjaCBmcmFtZSBvciB3b3JrZXIgb3ducyBvbmUg
b2YKKy8vIHRoZXNlLgorY2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZUNvbnRleHQgeworcHVibGlj
OgorICAgIC8vIEZhY3RvcnkgbWV0aG9kIGNhbGxlZCBpbnRlcm5hbGx5IGJ5IFdlYkNvcmUgdG8g
Y3JlYXRlIGNvbmNyZXRlCisgICAgLy8gaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MuIElmIFNldEZh
Y3RvcnkgaGFzIGJlZW4gY2FsbGVkLCB0aGUgZmFjdG9yeQorICAgIC8vIGZ1bmN0aW9uIHByb3Zp
ZGVkIHRoZXJlIGlzIHVzZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlLCBvdGhlcndpc2UKKyAg
ICAvLyB0aGUgZGVmYXVsdCBzaW5nbGUtcHJvY2VzcyBpbXBsZW1lbnRhdGlvbiBpcyBjcmVhdGVk
LgorICAgIHN0YXRpYyBXZWJBcHBsaWNhdGlvbkNhY2hlQ29udGV4dCogY3JlYXRlKCk7CisgICAg
dHlwZWRlZiBXZWJBcHBsaWNhdGlvbkNhY2hlQ29udGV4dCogKCpGYWN0b3J5UHJvYykodm9pZCk7
CisgICAgc3RhdGljIHZvaWQgc2V0RmFjdG9yeShGYWN0b3J5UHJvYyBmYWN0b3J5X3Byb2MpOwor
CisgICAgLy8gUmV0dXJucyB0aGUgSUQgb2YgdGhpcyBjb250ZXh0LgorICAgIGNvbnN0IEdsb2Jh
bEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQmIGdldENvbnRleHRJRCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGV4dElEOyB9CisKKyAgICAvLyBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIGFuIG9iamVj
dCB0aGF0IHN1cHBvcnRzIHRoZSBzY3JpcHRhYmxlIEFQSS4KKyAgICB2aXJ0dWFsIFdlYkFwcGxp
Y2F0aW9uQ2FjaGUqIGdldEFwcGxpY2F0aW9uQ2FjaGUoKSA9IDA7CisKKyAgICAvLyBDYWxsZWQg
ZHVyaW5nIGZyYW1lIG9yIHdvcmtlciBjcmVhdGlvbi4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9u
Y2UuCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVDb250ZXh0KEFwcGxpY2F0aW9uQ2FjaGVD
b250ZXh0VHlwZSBjb250ZXh0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCYgcGFyZW50Q29udGV4dElE
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJBcHBsaWNhdGlvbkNhY2hl
Q29udGV4dERlbGVnYXRlKiBkZWxlZ2F0ZSkgPSAwOworCisgICAgLy8gQ2FsbGVkIGR1cmluZyBm
cmFtZSBuYXZpZ2F0aW9uIHdoZW4gYSBuZXcgZG9jdW1lbnQgaXMgY29tbWl0dGVkLiBBbHNvCisg
ICAgLy8gY2FsbGVkIHdoZW4gaW5pdGlhbGx5IGxvYWRpbmcgYSBzY3JpcHQgcmVzb3VyY2UgaW50
byBhIHdvcmtlciBjb250ZXh0LgorICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RDYWNoZVdpdGhvdXRN
YW5pZmVzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtV
UkwmIGRvY3VtZW50VVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXBwbGljYXRpb25DYWNoZUlEIGNhY2hlRG9jdW1lbnRXYXNMb2FkZWRGcm9tKSA9IDA7CisKKyAg
ICAvLyBDYWxsZWQgZHVyaW5nIGZyYW1lIG5hdmlnYXRpb24gYWZ0ZXIgYSBuZXcgZG9jdW1lbnQg
aGFzIGJlZW4gY29tbWl0dGVkCisgICAgLy8gYW5kIHRoZSBkb2N1bWVudCBoYXMgYSBtYW5pZmVz
dCBhdHRyaWJ1dGUuIEFsc28gY2FsbGVkIHdoZW4gaW5pdGlhbGx5CisgICAgLy8gbG9hZGluZyBh
IHNjcmlwdCByZXNvdXJjZSBoYXZpbmcgYSBtYW5pZmVzdCBhdHRyaWJ1dGUgaW50byBhIHdvcmtl
ciBjb250ZXh0LgorICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHRoZSBuYXZpZ2F0aW9uIHNo
b3VsZCBiZSByZXN0YXJ0ZWQgKHRoaXMgaXMgdG8gaGFuZGxlCisgICAgLy8gdGhlIGNhc2Ugd2hl
cmUgYSAnZm9yaWVnbicgcmVzb3VyY2Ugd2FzIGxvYWRlZCBmcm9tIHRoZSBjYWNoZSkuCisgICAg
dmlydHVhbCBib29sIHNlbGVjdENhY2hlV2l0aE1hbmlmZXN0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlSUQgY2FjaGVEb2N1
bWVudFdhc0xvYWRlZEZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBLVVJMJiBtYW5pZmVzdFVSTG9mQ2FjaGVEb2N1bWVudFdhc0xvYWRlZEZyb20sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBtYW5pZmVz
dFVSTCkgPSAwOworCisgICAgLy8gU2hvdWxkIGJlIGRlbGV0ZWQgdXBvbiBmcmFtZSBvciB3b3Jr
ZXIgZGVzdHJ1Y3Rpb24uCisgICAgdmlydHVhbCB+V2ViQXBwbGljYXRpb25DYWNoZUNvbnRleHQo
KSB7fQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBzZXRDb250ZXh0SUQoY29uc3QgR2xvYmFsQXBw
bGljYXRpb25DYWNoZUNvbnRleHRJRCYgY29udGV4dElEKSB7CisgICAgICAgIG1fY29udGV4dElE
ID0gY29udGV4dElEOworICAgIH0KKworICAgIEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0
SUQgbV9jb250ZXh0SUQ7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
IC8vIFdlYkFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0X2gKClByb3BlcnR5IGNoYW5nZXMgb246IGFw
cGNhY2hlL2Zyb250ZW5kL1dlYkFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0LmgKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30714</attachid>
            <date>2009-05-27 13:02:59 -0700</date>
            <delta_ts>2009-05-27 13:26:17 -0700</delta_ts>
            <desc>ApplicationCacheFrontend interface and usage</desc>
            <filename>appcache1.diff</filename>
            <type>text/plain</type>
            <size>69727</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ0MTk3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDktMDUt
MjcgIE1pY2hhZWwgTm9yZG1hbiAgPG1pY2hhZWxuQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI1NDM2CisgICAgICAgIFJlZmFjdG9yIGFwcENhY2hlIGZvciB1
c2UgaW4gbXVsdGktcHJvY2VzcyBicm93c2VycworCisgICAgICAgIDEpIFRoaXMgaW5pdGlhbCBw
YXRjaCBpcyBtb3N0bHkgYWJvdXQgYWxsb3dpbmcgZGV2ZWxvcG1lbnQgb2YgYSBuZXcgYXBwY2Fj
aGUgc3lzdGVtCisgICAgICAgIHdpdGhvdXQgZGlzcnVwdGluZyB0aGUgZXhpc3Rpbmcgc3lzdGVt
LiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEVOQUJMRSBmbGFnIGZvciB0aGUKKyAgICAgICAgbmV3IHN5
c3RlbSwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKSwgd2hpbGUgbGVhdmluZyB0aGUgZmxhZyBm
b3IgdGhlIGV4aXN0aW5nCisgICAgICAgIHN5c3RlbSBpbiBwbGFjZSwgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykuIFRoZXJlIGlzIHNvbWUgb3ZlcmxhcCBiZXR3ZWVuCisgICAgICAg
IHRoZSB0d28gbW9zdGx5IGFyb3VuZCB0aGUgd2luZG93LmFwcGxpY2F0aW9uQ2FjaGUgYXR0cmli
dXRlLgorCisgICAgICAgIDIpIEFsc28gZGVmaW5lcyBhbiBpbnRlcmZhY2UgdG8gdGhlIG5ldyBz
eXN0ZW0gZm9yIHVzZSBpbiB0aGUgZnJvbnRlbmQsIGNsYXNzCisgICAgICAgIEFwcGxpY2F0aW9u
Q2FjaGVGcm9udGVuZC4gVGhlIGludGVyZmFjZSBpcyBiZWluZyB1c2VkIGJ5IEZyYW1lTG9hZGVy
IGFuZAorICAgICAgICBET01BcHBsaWNhdGlvbkNhY2hlIGFuZCBIVE1MSHRtbEVsZW1lbnQuIFRo
ZXJlIGlzIG9ubHkgYSBzdHViIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIHRoaXMgaW50ZXJm
YWNlIGF0IHRoaXMgdGltZSB0aGF0IGRvZXMgbm8gaGFybS4KKworICAgICAgICAzKSBBbHNvIHdp
ZGVucyB0aGUgUmVzb3VyY2VSZXF1ZXN0QmFzZSBhbmQgUmVzb3VyY2VSZXNwb25zZUJhc2UgZGF0
YSBzdHJ1Y3R1cmVzCisgICAgICAgIHdpdGggYWRkaXRpb25hbCBkYXRhIG1lbWJlcnMgdG8gcHJv
dmlkZSBhZGRpdGlvbmFsIGlucHV0cyAoYW5kIG91dHB1dHMpIHRvCisgICAgICAgIChmcm9tKSB0
aGUgYmFja2VuZCB3aGVuIGxvYWRpbmcgYSBSZXNvdXJjZUhhbmRsZS4KKworICAgICAgICA0KSBS
ZXF1aXNpdGUgY3VzdG9tIFY4QmluZGluZ3MgZm9yIHRoZSBET01BcHBsaWNhdGlvbkNhY2hlIGlu
dGVyZmFjZS4gTW9zdCBvZgorICAgICAgICB0aGUgYmluZGluZ3Mgd29yayBpc24ndCBkZXN0aW5l
ZCBmb3IgdGhlIHdlYmtpdCByZXBvc2l0b3J5IGp1c3QgeWV0LCB0aGF0IHN0dWZmCisgICAgICAg
IGlzIHN0aWxsIGJlaW5nIG1pZ3JhdGVkIG92ZXIgaW4gZ2VuZXJhbC4KKworICAgICAgICA1KSBD
aGFuZ2VzIHRvIHRoZSBKU0JpbmRpbmdzIGZvciB0aGUgRE9NQXBwbGljYXRpb25DYWNoZSBpbnRl
cmZhY2UgdG8gYmluZCB0bworICAgICAgICB0aGUgbmV3IG9yIGV4aXN0aW5nIHN5c3RlbSBiYXNl
ZCBvbiB3aGljaCBFTkFCTEUgZmxhZyBpcyBzZXQuCisgICAgICAgIAorICAgICAgICBObyB0ZXN0
cyB5ZXQsIG5vdCBmdW5jdGlvbmFsIHlldC4KKwogMjAwOS0wNS0yNyAgRGF2aWQgTGV2aW4gIDxs
ZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0YWNob3dp
YWsuCkluZGV4OiBiaW5kaW5ncy9qcy9KU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL0pTRE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDQ0MTYzKQorKysgYmluZGluZ3MvanMvSlNET01BcHBsaWNhdGlvbkNhY2hlQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkpTRE9NQXBwbGljYXRpb25DYWNoZS5oIgogCi0jaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TKSB8fCBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiAKICNpbmNsdWRlICJBdG9taWNTdHJp
bmcuaCIKICNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hlLmgiCkBAIC02NCw3ICs2NCw3IEBA
IHZvaWQgSlNET01BcHBsaWNhdGlvbkNhY2hlOjptYXJrKCkKICAgICB9CiB9CiAKLSNpZiBFTkFC
TEUoQVBQTElDQVRJT05fQ0FDSEVfRFlOQU1JQ19FTlRSSUVTKQorI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpICYmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRV9EWU5BTUlDX0VO
VFJJRVMpCiAKIEpTVmFsdWUgSlNET01BcHBsaWNhdGlvbkNhY2hlOjpoYXNJdGVtKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKQEAgLTEwNSw3ICsxMDUsNyBAQCBKU1Zh
bHVlIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlKEV4CiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLSNlbmRpZiAvLyBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEVfRFlOQU1JQ19F
TlRSSUVTKQorI2VuZGlmIC8vIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICYmIEVO
QUJMRShBUFBMSUNBVElPTl9DQUNIRV9EWU5BTUlDX0VOVFJJRVMpCiAKIEpTVmFsdWUgSlNET01B
cHBsaWNhdGlvbkNhY2hlOjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKQEAgLTEzMyw0ICsxMzMsNCBAQCBKU1ZhbHVlIEpTRE9NQXBwbGlj
YXRpb25DYWNoZTo6cmVtb3ZlRXZlCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjZW5kaWYgLy8gRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQpJbmRl
eDogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRp
bmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNDQxNjMpCisrKyBiaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcg
QEAgdm9pZCBKU0RPTVdpbmRvdzo6bWFyaygpCiAgICAgbWFya0RPTU9iamVjdFdyYXBwZXIoZ2xv
YmFsRGF0YSwgaW1wbCgpLT5vcHRpb25hbFNlc3Npb25TdG9yYWdlKCkpOwogICAgIG1hcmtET01P
YmplY3RXcmFwcGVyKGdsb2JhbERhdGEsIGltcGwoKS0+b3B0aW9uYWxMb2NhbFN0b3JhZ2UoKSk7
CiAjZW5kaWYKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpIHx8IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkK
ICAgICBtYXJrRE9NT2JqZWN0V3JhcHBlcihnbG9iYWxEYXRhLCBpbXBsKCktPm9wdGlvbmFsQXBw
bGljYXRpb25DYWNoZSgpKTsKICNlbmRpZgogfQpJbmRleDogYmluZGluZ3MvanMvSlNFdmVudFRh
cmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAJKHJl
dmlzaW9uIDQ0MTYzKQorKysgYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgogI2lu
Y2x1ZGUgIlhNTEh0dHBSZXF1ZXN0VXBsb2FkLmgiCiAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJf
QVBQTElDQVRJT05TKQorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpIHx8IEVO
QUJMRShBUFBMSUNBVElPTl9DQUNIRSkKICNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hlLmgi
CiAjaW5jbHVkZSAiSlNET01BcHBsaWNhdGlvbkNhY2hlLmgiCiAjZW5kaWYKQEAgLTg0LDcgKzg0
LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgRXZlbnRUYXJnZQogICAgIGlmIChY
TUxIdHRwUmVxdWVzdFVwbG9hZCogdXBsb2FkID0gdGFyZ2V0LT50b1hNTEh0dHBSZXF1ZXN0VXBs
b2FkKCkpCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHVwbG9hZCk7CiAKLSNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNB
VElPTlMpIHx8IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKICAgICBpZiAoRE9NQXBwbGljYXRp
b25DYWNoZSogY2FjaGUgPSB0YXJnZXQtPnRvRE9NQXBwbGljYXRpb25DYWNoZSgpKQogICAgICAg
ICAvLyBET01BcHBsaWNhdGlvbkNhY2hlIGlzIGFsd2F5cyBjcmVhdGVkIHZpYSBKUywgc28gd2Ug
ZG9uJ3QgbmVlZCB0byB1c2UgY2FjaGVET01PYmplY3QoKSBoZXJlLgogICAgICAgICByZXR1cm4g
Z2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihleGVjLT5nbG9iYWxEYXRhKCksIGNhY2hlKTsKQEAg
LTExOSw3ICsxMTksNyBAQCBFdmVudFRhcmdldCogdG9FdmVudFRhcmdldChKU0M6OkpTVmFsdWUg
CiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCZKU0RPTVdpbmRvd1NoZWxsOjpzX2luZm8pKQogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KGFzT2JqZWN0KHZhbHVl
KSktPmltcGwoKTsKIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaWYg
RU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NB
Q0hFKQogICAgIENPTlZFUlRfVE9fRVZFTlRfVEFSR0VUKERPTUFwcGxpY2F0aW9uQ2FjaGUpCiAj
ZW5kaWYKIApJbmRleDogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NQXBwbGljYXRpb25DYWNoZUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NQXBwbGljYXRp
b25DYWNoZUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBiaW5kaW5ncy92OC9jdXN0b20vVjhE
T01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRE9NQXBwbGljYXRpb25DYWNo
ZS5oIgorCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorCisjaW5jbHVkZSAiVjhCaW5k
aW5nLmgiCisjaW5jbHVkZSAiVjhEb2N1bWVudC5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGlu
Zy5oIgorI2luY2x1ZGUgIlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlY4UHJv
eHkuaCIKKyNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBi
b29sIGtGaW5kT25seSA9IHRydWU7CitzdGF0aWMgY29uc3QgYm9vbCBrRmluZE9yQ3JlYXRlID0g
ZmFsc2U7CisKK3N0YXRpYyBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGFyZ3VtZW50VG9FdmVu
dExpc3RlbmVyKERPTUFwcGxpY2F0aW9uQ2FjaGUqIGFwcGNhY2hlLCB2ODo6TG9jYWw8djg6OlZh
bHVlPiB2YWx1ZSwgYm9vbCBmaW5kT25seSkKK3sKKyNpZiAwICYmIEVOQUJMRShXT1JLRVJTKQor
ICAgIC8vIEZJWE1FOiB0aGlzIGlzIG5vdCB0ZXN0ZWQgeWV0CisgICAgV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5KiB3b3JrZXJDb250ZXh0UHJveHkgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHk6OnJldHJpZXZlKCk7CisgICAgaWYgKHdvcmtlckNvbnRleHRQcm94eSkKKyAgICAgICAg
cmV0dXJuIHdvcmtlckNvbnRleHRQcm94eS0+ZmluZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5l
cih2YWx1ZSwgZmFsc2UsIGZpbmRPbmx5KTsKKyNlbmRpZgorCisgICAgVjhQcm94eSogcHJveHkg
PSBWOFByb3h5OjpyZXRyaWV2ZShhcHBjYWNoZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
KyAgICBpZiAocHJveHkpCisgICAgICAgIHJldHVybiBmaW5kT25seSA/IHByb3h5LT5GaW5kT2Jq
ZWN0RXZlbnRMaXN0ZW5lcih2YWx1ZSwgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICA6
IHByb3h5LT5GaW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKHZhbHVlLCBmYWxzZSk7CisK
KyAgICByZXR1cm4gUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPigpOworfQorCitzdGF0aWMgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IGV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KEV2ZW50TGlzdGVuZXIq
IGxpc3RlbmVyKQoreworICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3Rl
bmVyKj4obGlzdGVuZXIpKS0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKK30KKworc3RhdGljIGlubGlu
ZSBTdHJpbmcgdG9FdmVudFR5cGUodjg6OkxvY2FsPHY4OjpTdHJpbmc+IHZhbHVlKQoreworICAg
IFN0cmluZyBrZXkgPSB0b1dlYkNvcmVTdHJpbmcodmFsdWUpOworICAgIEFTU0VSVChrZXkuc3Rh
cnRzV2l0aCgib24iKSk7CisgICAgcmV0dXJuIGtleS5zdWJzdHJpbmcoMik7Cit9CisKKy8vIEhh
bmRsZXMgYXBwY2FjaGUub25mb29ldmVudCBhdHRyaWJ1dGUgZ2V0dGluZworQUNDRVNTT1JfR0VU
VEVSKERPTUFwcGxpY2F0aW9uQ2FjaGVFdmVudEhhbmRsZXIpCit7CisgICAgSU5DX1NUQVRTKCJE
T01BcHBsaWNhdGlvbkNhY2hlLm9uZXZlbnRfZ2V0dGVyIik7CisgICAgRE9NQXBwbGljYXRpb25D
YWNoZSogYXBwY2FjaGUgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxET01BcHBsaWNhdGlvbkNh
Y2hlPihWOENsYXNzSW5kZXg6OkRPTUFQUExJQ0FUSU9OQ0FDSEUsIGluZm8uSG9sZGVyKCkpOwor
ICAgIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gYXBwY2FjaGUtPmdldEF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIodG9FdmVudFR5cGUobmFtZSkpOworICAgIHJldHVybiBldmVudExpc3RlbmVyVG9W
OE9iamVjdChsaXN0ZW5lcik7Cit9CisKKy8vIEhhbmRsZXMgYXBwY2FjaGUub25mb29ldmVudCBh
dHRyaWJ1dGUgc2V0dGluZworQUNDRVNTT1JfU0VUVEVSKERPTUFwcGxpY2F0aW9uQ2FjaGVFdmVu
dEhhbmRsZXIpCit7CisgICAgSU5DX1NUQVRTKCJET01BcHBsaWNhdGlvbkNhY2hlLm9uZXZlbnRf
c2V0dGVyIik7CisgICAgRE9NQXBwbGljYXRpb25DYWNoZSogYXBwY2FjaGUgPSBWOFByb3h5OjpU
b05hdGl2ZU9iamVjdDxET01BcHBsaWNhdGlvbkNhY2hlPihWOENsYXNzSW5kZXg6OkRPTUFQUExJ
Q0FUSU9OQ0FDSEUsIGluZm8uSG9sZGVyKCkpOworICAgIFN0cmluZyBldmVudFR5cGUgPSB0b0V2
ZW50VHlwZShuYW1lKTsKKworICAgIGlmIChFdmVudExpc3RlbmVyKiBvbGRMaXN0ZW5lciA9IGFw
cGNhY2hlLT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSkpIHsKKyAgICAgICAg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IGV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KG9s
ZExpc3RlbmVyKTsKKyAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigp
LCBvYmplY3QsIFY4Q3VzdG9tOjprRE9NQXBwbGljYXRpb25DYWNoZUNhY2hlSW5kZXgpOworICAg
ICAgICBhcHBjYWNoZS0+Y2xlYXJBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSk7Cisg
ICAgfQorCisgICAgaWYgKHZhbHVlLT5Jc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IG5ld0xpc3RlbmVyID0gYXJndW1lbnRUb0V2ZW50TGlzdGVuZXIoYXBwY2Fj
aGUsIHZhbHVlLCBrRmluZE9yQ3JlYXRlKTsKKyAgICAgICAgaWYgKG5ld0xpc3RlbmVyKSB7Cisg
ICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBW
OEN1c3RvbTo6a0RPTUFwcGxpY2F0aW9uQ2FjaGVDYWNoZUluZGV4KTsKKyAgICAgICAgICAgIGFw
cGNhY2hlLT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbmV3TGlzdGVuZXIp
OworICAgICAgICB9CisgICAgfQorfQorCisvLyBIYW5kbGVzIGFwcGNhY2hlLmFkZEV2ZW50TGlz
dG5lcihuYW1lLCBmdW5jLCBjYXB0dXJlKSBtZXRob2QgY2FsbHMKK0NBTExCQUNLX0ZVTkNfREVD
TChET01BcHBsaWNhdGlvbkNhY2hlQWRkRXZlbnRMaXN0ZW5lcikKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTUFwcGxpY2F0aW9uQ2FjaGUuYWRkRXZlbnRMaXN0ZW5lcigpIik7CisgICAgRE9NQXBwbGlj
YXRpb25DYWNoZSogYXBwY2FjaGUgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxET01BcHBsaWNh
dGlvbkNhY2hlPihWOENsYXNzSW5kZXg6OkRPTUFQUExJQ0FUSU9OQ0FDSEUsIGFyZ3MuSG9sZGVy
KCkpOworCisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gYXJndW1lbnRUb0V2
ZW50TGlzdGVuZXIoYXBwY2FjaGUsIGFyZ3NbMV0sIGtGaW5kT3JDcmVhdGUpOworICAgIGlmIChs
aXN0ZW5lcikgeworICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCks
IGFyZ3NbMV0sIFY4Q3VzdG9tOjprRE9NQXBwbGljYXRpb25DYWNoZUNhY2hlSW5kZXgpOworICAg
ICAgICBTdHJpbmcgZXZlbnRUeXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOworICAgICAg
ICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKKyAgICAgICAgYXBw
Y2FjaGUtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7
CisgICAgfQorICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKKy8vIEhhbmRsZXMgYXBw
Y2FjaGUucmVtb3ZlRXZlbnRMaXN0bmVyKG5hbWUsIGZ1bmMsIGNhcHR1cmUpIG1ldGhvZCBjYWxs
cworQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTUFwcGxpY2F0aW9uQ2FjaGVSZW1vdmVFdmVudExpc3Rl
bmVyKQoreworICAgIElOQ19TVEFUUygiRE9NQXBwbGljYXRpb25DYWNoZS5yZW1vdmVFdmVudExp
c3RlbmVyKCkiKTsKKyAgICBET01BcHBsaWNhdGlvbkNhY2hlKiBhcHBjYWNoZSA9IFY4UHJveHk6
OlRvTmF0aXZlT2JqZWN0PERPTUFwcGxpY2F0aW9uQ2FjaGU+KFY4Q2xhc3NJbmRleDo6RE9NQVBQ
TElDQVRJT05DQUNIRSwgYXJncy5Ib2xkZXIoKSk7CisKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gbGlzdGVuZXIgPSBhcmd1bWVudFRvRXZlbnRMaXN0ZW5lcihhcHBjYWNoZSwgYXJnc1sxXSwg
a0ZpbmRPbmx5KTsKKyAgICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAgcmVtb3ZlSGlkZGVuRGVw
ZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOEN1c3RvbTo6a0RPTUFwcGxpY2F0aW9u
Q2FjaGVDYWNoZUluZGV4KTsKKyAgICAgICAgU3RyaW5nIGV2ZW50VHlwZSA9IHRvV2ViQ29yZVN0
cmluZyhhcmdzWzBdKTsKKyAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVh
blZhbHVlKCk7CisgICAgICAgIGFwcGNhY2hlLT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlw
ZSwgbGlzdGVuZXIuZ2V0KCksIHVzZUNhcHR1cmUpOworICAgIH0KKyAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gRU5B
QkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4RE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogZG9tL0V2ZW50VGFyZ2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBkb20vRXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiA0NDE2MykKKysrIGRvbS9FdmVu
dFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgWE1MSHR0cFJlcXVl
c3RVcGxvYWQqIEV2ZW50VGFyZ2V0Ojp0b1hNTAogICAgIHJldHVybiAwOwogfQogCi0jaWYgRU5B
QkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQ
TElDQVRJT05TKSB8fCBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiBET01BcHBsaWNhdGlvbkNh
Y2hlKiBFdmVudFRhcmdldDo6dG9ET01BcHBsaWNhdGlvbkNhY2hlKCkKIHsKICAgICByZXR1cm4g
MDsKSW5kZXg6IGRvbS9FdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9FdmVudFRhcmdl
dC5oCShyZXZpc2lvbiA0NDE2MykKKysrIGRvbS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBE
T01XaW5kb3cqIHRvRE9NV2luZG93KCk7CiAgICAgICAgIHZpcnR1YWwgWE1MSHR0cFJlcXVlc3Qq
IHRvWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICAgdmlydHVhbCBYTUxIdHRwUmVxdWVzdFVwbG9h
ZCogdG9YTUxIdHRwUmVxdWVzdFVwbG9hZCgpOwotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBM
SUNBVElPTlMpCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxF
KEFQUExJQ0FUSU9OX0NBQ0hFKQogICAgICAgICB2aXJ0dWFsIERPTUFwcGxpY2F0aW9uQ2FjaGUq
IHRvRE9NQXBwbGljYXRpb25DYWNoZSgpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNWRykKSW5kZXg6
IGh0bWwvSFRNTEh0bWxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxIdG1sRWxl
bWVudC5jcHAJKHJldmlzaW9uIDQ0MTYzKQorKysgaHRtbC9IVE1MSHRtbEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMywxNCArMjMsNDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVH
cm91cC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAK
KyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSAmJiBFTkFCTEUoQVBQTElDQVRJ
T05fQ0FDSEUpCisjZXJyb3IgQVBQTElDQVRJT05fQ0FDSEUgYW5kIE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIGZsYWdzCisjZW5kaWYKKworI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUdy
b3VwLmgiCisjZWxpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAorI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpIHx8IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKworc3RhdGljIHZv
aWQgc2VsZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3QoRnJhbWUqIGZyYW1lKQoreworI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpz
ZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdFVSTChmcmFtZSk7CisjZWxpZiBFTkFCTEUoQVBQTElD
QVRJT05fQ0FDSEUpCisgICAgZnJhbWUtPmxvYWRlcigpLT5zZWxlY3RBcHBsaWNhdGlvbkNhY2hl
V2l0aG91dE1hbmlmZXN0KCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc2VsZWN0Q2FjaGVX
aXRoTWFuaWZlc3QoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiBtYW5pZmVzdFVSTCkKK3sKKyNp
ZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cDo6c2VsZWN0Q2FjaGUoZnJhbWUsIG1hbmlmZXN0VVJMKTsKKyNlbGlmIEVOQUJMRShBUFBM
SUNBVElPTl9DQUNIRSkKKyAgICBmcmFtZS0+bG9hZGVyKCktPnNlbGVjdEFwcGxpY2F0aW9uQ2Fj
aGVXaXRoTWFuaWZlc3QobWFuaWZlc3RVUkwpOworI2VuZGlmCit9CisKKyNlbmRpZiAgLy8gRU5B
QkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hF
KQorCiBIVE1MSHRtbEVsZW1lbnQ6OkhUTUxIdG1sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9j
KQogewpAQCAtNTcsNyArODksNyBAQCBib29sIEhUTUxIdG1sRWxlbWVudDo6Y2hlY2tEVEQoY29u
c3QgTm9kCiAgICAgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKGZyYW1lc2V0VGFnKSB8fCBu
ZXdDaGlsZC0+aGFzVGFnTmFtZShub2ZyYW1lc1RhZyk7CiB9CiAKLSNpZiBFTkFCTEUoT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKQorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMp
IHx8IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKIHZvaWQgSFRNTEh0bWxFbGVtZW50OjppbnNl
cnRlZEludG9Eb2N1bWVudCgpCiB7CiAgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW50KCk7CkBAIC03MCwxMCArMTAyLDEwIEBAIHZvaWQgSFRNTEh0bWxFbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWUKIAogICAgIC8vIENoZWNrIHRoZSBtYW5pZmVzdCBhdHRyaWJ1dGUKICAgICBB
dG9taWNTdHJpbmcgbWFuaWZlc3QgPSBnZXRBdHRyaWJ1dGUobWFuaWZlc3RBdHRyKTsKLSAgICBp
ZiAobWFuaWZlc3QuaXNOdWxsKCkpCi0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c2Vs
ZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3RVUkwoZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CisgICAgaWYg
KG1hbmlmZXN0LmlzTnVsbCgpIHx8IG1hbmlmZXN0LmlzRW1wdHkoKSkKKyAgICAgICAgc2VsZWN0
Q2FjaGVXaXRob3V0TWFuaWZlc3QoZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CiAgICAgZWxzZQotICAg
ICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnNlbGVjdENhY2hlKGRvY3VtZW50KCktPmZyYW1l
KCksIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKG1hbmlmZXN0KSk7CisgICAgICAgIHNlbGVjdENh
Y2hlV2l0aE1hbmlmZXN0KGRvY3VtZW50KCktPmZyYW1lKCksIGRvY3VtZW50KCktPmNvbXBsZXRl
VVJMKG1hbmlmZXN0KSk7CiB9CiAjZW5kaWYKIApJbmRleDogaHRtbC9IVE1MSHRtbEVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxIdG1sRWxlbWVudC5oCShyZXZpc2lvbiA0NDE2MykK
KysrIGh0bWwvSFRNTEh0bWxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4g
MTE7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpOwog
Ci0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKSB8fCBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiAgICAgdmly
dHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAjZW5kaWYKIApJbmRleDogbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShy
ZXZpc2lvbiA0NDE2MykKKysrIGxvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk4LDYgKzk4LDEwIEBACiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgi
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyNpbmNsdWRlICJBcHBs
aWNhdGlvbkNhY2hlRnJvbnRlbmQuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNWRykKICNpbmNs
dWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR0xvY2F0YWJsZS5oIgpAQCAtMzAyLDYg
KzMwNiw5IEBAIEZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcihGcmFtZSogZnJhbWUsIEYKICNpZiBF
TkFCTEUoV01MKQogICAgICwgbV9mb3JjZVJlbG9hZFdtbERlY2soZmFsc2UpCiAjZW5kaWYKKyNp
ZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisgICAgLCBtX2FwcGNhY2hlRnJvbnRlbmQobmV3
IEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCgpKQorI2VuZGlmCiB7CiB9CiAKQEAgLTMzMSw2ICsz
MzgsMTYgQEAgdm9pZCBGcmFtZUxvYWRlcjo6aW5pdCgpCiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+Y2FuY2VsUGFyc2luZygpOwogICAgIG1fY3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCA9
IGZhbHNlOwogICAgIG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2UgPSB0cnVlOworCisjaWYgRU5BQkxF
KEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgIEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0VHlwZSBjb250
ZXh0VHlwZSA9IE1haW5GcmFtZUNvbnRleHQ7CisgICAgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNv
bnRleHRJRCBwYXJlbnRDb250ZXhJRCA9IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQ6
Om5vbmUoKTsKKyAgICBpZiAoRnJhbWUqIHBhcmVudEZyYW1lID0gbV9mcmFtZS0+cGFyZW50RnJh
bWUoKSkgeworICAgICAgICBjb250ZXh0VHlwZSA9IFN1YkZyYW1lQ29udGV4dDsKKyAgICAgICAg
cGFyZW50Q29udGV4SUQgPSBwYXJlbnRGcmFtZS0+bG9hZGVyKCktPmFwcGNhY2hlRnJvbnRlbmQo
KS0+Y29udGV4dElEKCk7CisgICAgfQorICAgIGFwcGNhY2hlRnJvbnRlbmQoKS0+aW5pdGlhbGl6
ZShjb250ZXh0VHlwZSwgcGFyZW50Q29udGV4SUQpOworI2VuZGlmCiB9CiAKIHZvaWQgRnJhbWVM
b2FkZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCkBAIC0xODQ0LDYgKzE4NjEsMTEg
QEAgYm9vbCBGcmFtZUxvYWRlcjo6Y2FuQ2FjaGVQYWdlQ29udGFpbmluZwogICAgICAgICAmJiAh
bV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZSgpCiAgICAgICAgICYmICFtX2RvY3Vt
ZW50TG9hZGVyLT5jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoKQogI2VuZGlmCisjaWYg
RU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGlu
dmVzdGlnYXRpbmcgY2FjaGluZyBmcmFtZXMgdGhhdCBoYXZlIGFuIGFzc29jaWF0ZWQKKyAgICAg
ICAgLy8gYXBwbGljYXRpb24gY2FjaGUuIDxyZGFyOi8vcHJvYmxlbS81OTE3ODk5PiB0cmFja3Mg
dGhhdCB3b3JrLgorICAgICAgICAmJiBhcHBjYWNoZUZyb250ZW5kKCktPmNhbkNhY2hlQ3VycmVu
dERvY3VtZW50SW5QYWdlQ2FjaGUoKQorI2VuZGlmCiAgICAgICAgICYmIG1fY2xpZW50LT5jYW5D
YWNoZVBhZ2UoKQogICAgICAgICA7CiB9CkBAIC0xOTk0LDYgKzIwMTYsMTAgQEAgYm9vbCBGcmFt
ZUxvYWRlcjo6bG9nQ2FuQ2FjaGVGcmFtZURlY2lzaQogICAgICAgICBpZiAobV9kb2N1bWVudExv
YWRlci0+Y2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwKCkpCiAgICAgICAgICAgICB7IFBD
TE9HKCIgICAtVGhlIERvY3VtZW50TG9hZGVyIGhhcyBhIGNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2Fj
aGVHcm91cCIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KICNlbmRpZgorI2lmIEVOQUJMRShBUFBM
SUNBVElPTl9DQUNIRSkKKyAgICAgICAgaWYgKCFhcHBjYWNoZUZyb250ZW5kKCktPmNhbkNhY2hl
Q3VycmVudERvY3VtZW50SW5QYWdlQ2FjaGUoKSkKKyAgICAgICAgICAgIHsgUENMT0coIiAgIC1V
c2luZyBhcHBsaWNhdGlvbiBjYWNoZSIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KKyNlbmRpZgog
ICAgICAgICBpZiAoIW1fY2xpZW50LT5jYW5DYWNoZVBhZ2UoKSkKICAgICAgICAgICAgIHsgUENM
T0coIiAgIC1UaGUgY2xpZW50IHNheXMgdGhpcyBmcmFtZSBjYW5ub3QgYmUgY2FjaGVkIik7IGNh
bm5vdENhY2hlID0gdHJ1ZTsgfQogICAgIH0gd2hpbGUgKGZhbHNlKTsKQEAgLTIwMDksMTkgKzIw
MzUsMTkgQEAgYm9vbCBGcmFtZUxvYWRlcjo6bG9nQ2FuQ2FjaGVGcmFtZURlY2lzaQogfQogI2Vu
ZGlmCiAKLXZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZUZpcnN0UGFydHlGb3JDb29raWVzKCkKK3Zv
aWQgRnJhbWVMb2FkZXI6OnVwZGF0ZVBvbGljeUJhc2VVUkwoKQogewogICAgIGlmIChtX2ZyYW1l
LT50cmVlKCktPnBhcmVudCgpKQotICAgICAgICBzZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhtX2Zy
YW1lLT50cmVlKCktPnBhcmVudCgpLT5kb2N1bWVudCgpLT5maXJzdFBhcnR5Rm9yQ29va2llcygp
KTsKKyAgICAgICAgc2V0UG9saWN5QmFzZVVSTChtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpLT5k
b2N1bWVudCgpLT5wb2xpY3lCYXNlVVJMKCkpOwogICAgIGVsc2UKLSAgICAgICAgc2V0Rmlyc3RQ
YXJ0eUZvckNvb2tpZXMobV9VUkwpOworICAgICAgICBzZXRQb2xpY3lCYXNlVVJMKG1fVVJMKTsK
IH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoY29uc3QgS1VS
TCYgdXJsKQordm9pZCBGcmFtZUxvYWRlcjo6c2V0UG9saWN5QmFzZVVSTChjb25zdCBLVVJMJiB1
cmwpCiB7Ci0gICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMo
dXJsKTsKKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRQb2xpY3lCYXNlVVJMKHVybCk7CiAg
ICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQt
PmxvYWRlcigpLT5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyh1cmwpOworICAgICAgICBjaGlsZC0+
bG9hZGVyKCktPnNldFBvbGljeUJhc2VVUkwodXJsKTsKIH0KIAogLy8gVGhpcyBkb2VzIHRoZSBz
YW1lIGtpbmQgb2Ygd29yayB0aGF0IGRpZE9wZW5VUkwgZG9lcywgZXhjZXB0IGl0IHJlbGllcyBv
biB0aGUgZmFjdApAQCAtMjg4NCw2ICsyOTEwLDkgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dHJhbnNp
dGlvblRvQ29tbWl0dGVkKAogCiAgICAgc2V0RG9jdW1lbnRMb2FkZXIobV9wcm92aXNpb25hbERv
Y3VtZW50TG9hZGVyLmdldCgpKTsKICAgICBzZXRQcm92aXNpb25hbERvY3VtZW50TG9hZGVyKDAp
OworI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICBzZWxlY3RJbml0aWFsQXBwbGlj
YXRpb25DYWNoZSgpOworI2VuZGlmCiAgICAgc2V0U3RhdGUoRnJhbWVTdGF0ZUNvbW1pdHRlZFBh
Z2UpOwogCiAgICAgLy8gSGFuZGxlIGFkZGluZyB0aGUgVVJMIHRvIHRoZSBiYWNrL2ZvcndhcmQg
bGlzdC4KQEAgLTM1NjksNiArMzU5OCwxMCBAQCB2b2lkIEZyYW1lTG9hZGVyOjphZGRFeHRyYUZp
ZWxkc1RvUmVxdWVzCiAgICAgICAgIGVsc2UgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJh
bWUtPmRvY3VtZW50KCkpCiAgICAgICAgICAgICByZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29r
aWVzKGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKICAgICB9CisgCisjaWYgRU5B
QkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgIGFwcGNhY2hlRnJvbnRlbmQoKS0+YWRkRXh0cmFG
aWVsZHNUb1JlcXVlc3QocmVxdWVzdCwgbWFpblJlc291cmNlKTsKKyNlbmRpZgogCiAgICAgLy8g
VGhlIHJlbWFpbmluZyBtb2RpZmljYXRpb25zIGFyZSBvbmx5IG5lY2Vzc2FyeSBmb3IgSFRUUCBh
bmQgSFRUUFMuCiAgICAgaWYgKCFyZXF1ZXN0LnVybCgpLmlzRW1wdHkoKSAmJiAhcmVxdWVzdC51
cmwoKS5wcm90b2NvbEluSFRUUEZhbWlseSgpKQpAQCAtNTI3Nyw0ICs1MzEwLDQ0IEBAIGJvb2wg
RnJhbWVMb2FkZXJDbGllbnQ6Omhhc0hUTUxWaWV3KCkgY28KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKworQXBwbGljYXRpb25DYWNoZUZyb250
ZW5kKiBGcmFtZUxvYWRlcjo6YXBwY2FjaGVGcm9udGVuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fYXBwY2FjaGVGcm9udGVuZC5nZXQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlcjo6c2VsZWN0
SW5pdGlhbEFwcGxpY2F0aW9uQ2FjaGUoKQoreworICAgIGNvbnN0IEtVUkwmIGRvY1VSTCA9IG1f
ZnJhbWUtPmRvY3VtZW50KCktPnVybCgpOworICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIGRv
Y1Jlc3BvbnNlID0gZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2UoKTsKKyAgICBhcHBjYWNoZUZy
b250ZW5kKCktPnNlbGVjdEluaXRpYWxDYWNoZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG9jVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb2NSZXNwb25zZS5hcHBsaWNhdGlvbkNhY2hlSUQoKSk7fQorCit2b2lkIEZyYW1l
TG9hZGVyOjpzZWxlY3RBcHBsaWNhdGlvbkNhY2hlV2l0aG91dE1hbmlmZXN0KCkKK3sKKyAgICBj
b25zdCBLVVJMJiBkb2NVUkwgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKTsKKyAgICBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiBkb2NSZXNwb25zZSA9IGRvY3VtZW50TG9hZGVyKCktPnJlc3Bv
bnNlKCk7CisgICAgYXBwY2FjaGVGcm9udGVuZCgpLT5zZWxlY3RGaW5hbENhY2hlV2l0aG91dE1h
bmlmZXN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NVUkws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY1Jlc3BvbnNlLmFw
cGxpY2F0aW9uQ2FjaGVJRCgpKTsKK30KKwordm9pZCBGcmFtZUxvYWRlcjo6c2VsZWN0QXBwbGlj
YXRpb25DYWNoZVdpdGhNYW5pZmVzdChjb25zdCBLVVJMJiBtYW5pZmVzdFVSTCkKK3sKKyAgICBj
b25zdCBLVVJMJiBkb2NVUkwgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKTsKKyAgICBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiBkb2NSZXNwb25zZSA9IGRvY3VtZW50TG9hZGVyKCktPnJlc3Bv
bnNlKCk7CisgICAgaWYgKCFhcHBjYWNoZUZyb250ZW5kKCktPnNlbGVjdEZpbmFsQ2FjaGVXaXRo
TWFuaWZlc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY1VS
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jUmVzcG9uc2Uu
YXBwbGljYXRpb25DYWNoZUlEKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvY1Jlc3BvbnNlLm1hbmlmZXN0VVJMKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0VVJMKSkgeworICAgICAgICAvLyBJdCdzIGEgZm9y
ZWlnbiBlbnRyeSwgcmVzdGFydCB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIGZyb20gdGhlIHRvcCBv
ZiB0aGUgbmF2aWdhdGlvbiBhbGdvcml0aG0uCisgICAgICAgIC8vIFRoZSBuYXZpZ2F0aW9uIHdp
bGwgbm90IHJlc3VsdCBpbiB0aGUgc2FtZSByZXNvdXJjZSBiZWluZyBsb2FkZWQsIGJlY2F1c2Ug
ImZvcmVpZ24iIGVudHJpZXMgYXJlIG5ldmVyIHBpY2tlZCBkdXJpbmcgbmF2aWdhdGlvbi4KKyAg
ICAgICAgc2NoZWR1bGVMb2NhdGlvbkNoYW5nZShkb2NVUkwsIHJlZmVycmVyKCksIHRydWUpOwor
ICAgIH0KK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBsb2FkZXIv
RnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNp
b24gNDQxNjMpCisrKyBsb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzAs
NiArNzAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFRleHRSZXNvdXJjZURl
Y29kZXI7CiAgICAgY2xhc3MgV2lkZ2V0OwogCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hF
KQorICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZDsKKyNlbmRpZgorCiAgICAgc3Ry
dWN0IEZyYW1lTG9hZFJlcXVlc3Q7CiAgICAgc3RydWN0IFNjaGVkdWxlZFJlZGlyZWN0aW9uOwog
ICAgIHN0cnVjdCBXaW5kb3dGZWF0dXJlczsKQEAgLTI0Miw2ICsyNDYsMTMgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIGxvYWRlZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKGNv
bnN0IENhY2hlZFJlc291cmNlKik7CiAgICAgICAgIHZvaWQgdGVsbENsaWVudEFib3V0UGFzdE1l
bW9yeUNhY2hlTG9hZHMoKTsKIAorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICAg
ICAgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kKiBhcHBjYWNoZUZyb250ZW5kKCkgY29uc3Q7Cisg
ICAgICAgIHZvaWQgc2VsZWN0SW5pdGlhbEFwcGxpY2F0aW9uQ2FjaGUoKTsKKyAgICAgICAgdm9p
ZCBzZWxlY3RBcHBsaWNhdGlvbkNhY2hlV2l0aG91dE1hbmlmZXN0KCk7CisgICAgICAgIHZvaWQg
c2VsZWN0QXBwbGljYXRpb25DYWNoZVdpdGhNYW5pZmVzdChjb25zdCBLVVJMJiBtYW5pZmVzdFVS
TCk7CisjZW5kaWYKKwogICAgICAgICB2b2lkIGNoZWNrTG9hZENvbXBsZXRlKCk7CiAgICAgICAg
IHZvaWQgZGV0YWNoRnJvbVBhcmVudCgpOwogCkBAIC02MzUsNiArNjQ2LDEwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICNpZiBFTkFCTEUoV01MKQogICAgICAgICBib29sIG1fZm9yY2VSZWxvYWRX
bWxEZWNrOwogI2VuZGlmCisKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisgICAgICAg
IE93blB0cjxBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQ+IG1fYXBwY2FjaGVGcm9udGVuZDsKKyNl
bmRpZgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGxvYWRlci9hcHBj
YWNoZTIvQXBwbGljYXRpb25DYWNoZUNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9hcHBj
YWNoZTIvQXBwbGljYXRpb25DYWNoZUNvbW1vbi5oCShyZXZpc2lvbiAwKQorKysgbG9hZGVyL2Fw
cGNhY2hlMi9BcHBsaWNhdGlvbkNhY2hlQ29tbW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
ODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICog
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQXBwbGljYXRpb25DYWNoZUNvbW1vbl9oCisjZGVmaW5lIEFwcGxp
Y2F0aW9uQ2FjaGVDb21tb25faAorCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICAvLyBUeXBlcyBhbmQgY29uc3RhbnRzIHVzZWQgYnkg
dGhlIGZyb250IGFuZCBiYWNrIGVuZHMKKworICAgIHR5cGVkZWYgbG9uZyBsb25nIEFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlSUQ7ICAvLyBhIDY0IGJpdCBzcWxpdGUgcm93aWQKKyAgICB0eXBlZGVm
IEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlSUQgQXBwbGljYXRpb25DYWNoZUlEOworICAgIHR5cGVk
ZWYgaW50IEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQ7CisKKyAgICBzdHJ1Y3QgR2xvYmFsQXBw
bGljYXRpb25DYWNoZUNvbnRleHRJRCB7CisgICAgICAgIEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVD
b250ZXh0SUQoKQorICAgICAgICAgICAgOiBtX2NvbnRleHRJRCgwKQorICAgICAgICAgICAgLCBt
X3Byb2Nlc3NJRCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBHbG9iYWxBcHBs
aWNhdGlvbkNhY2hlQ29udGV4dElEKEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQgY29udGV4dElE
LCBpbnQgcHJvY2Vzc0lEKQorICAgICAgICAgICAgOiBtX2NvbnRleHRJRChjb250ZXh0SUQpCisg
ICAgICAgICAgICAsIG1fcHJvY2Vzc0lEKHByb2Nlc3NJRCkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCBtX2NvbnRleHRJRDsKKyAgICAg
ICAgaW50IG1fcHJvY2Vzc0lEOworCisgICAgICAgIHN0YXRpYyBHbG9iYWxBcHBsaWNhdGlvbkNh
Y2hlQ29udGV4dElEIG5vbmUoKSB7IHJldHVybiBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4
dElEKCk7IH0KKyAgICB9OworCisgICAgZW51bSBBcHBsaWNhdGlvbkNhY2hlQ29udGV4dFR5cGUg
eworICAgICAgICBNYWluRnJhbWVDb250ZXh0LAorICAgICAgICBTdWJGcmFtZUNvbnRleHQsCisg
ICAgICAgIERlZGljYXRlZFdvcmtlckNvbnRleHQsCisgICAgICAgIFNoYXJlZFdvcmtlckNvbnRl
eHQKKyAgICB9OworCisgICAgZW51bSBXZWxsS25vd25BcHBsaWNhdGlvbkNhY2hlSURzIHsKKyAg
ICAgICAgTm9BcHBsaWNhdGlvbkNhY2hlSUQgPSAwLAorICAgICAgICBOb0FwcGxpY2F0aW9uQ2Fj
aGVDb250ZXh0SUQgPSAwLAorICAgICAgICBVbmtub3duQXBwbGljYXRpb25DYWNoZUNvbnRleHRJ
RCA9IC0xLAorICAgIH07CisKKyAgICBlbnVtIEFwcGxpY2F0aW9uQ2FjaGVTdGF0dXMgeworICAg
ICAgICBBUFBDQUNIRV9VTkNBQ0hFRCA9IDAsCisgICAgICAgIEFQUENBQ0hFX0lETEUgPSAxLAor
ICAgICAgICBBUFBDQUNIRV9DSEVDS0lORyA9IDIsCisgICAgICAgIEFQUENBQ0hFX0RPV05MT0FE
SU5HID0gMywKKyAgICAgICAgQVBQQ0FDSEVfVVBEQVRFUkVBRFkgPSA0LAorICAgICAgICBBUFBD
QUNIRV9PQlNPTEVURSA9IDUKKyAgICB9OworCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgIC8vIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyNlbmRpZiAgLy8gQXBwbGljYXRp
b25DYWNoZUNvbW1vbl9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBsb2FkZXIvYXBwY2FjaGUyL0Fw
cGxpY2F0aW9uQ2FjaGVDb21tb24uaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQog
ICArICoKCkluZGV4OiBsb2FkZXIvYXBwY2FjaGUyL0FwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gbG9hZGVyL2FwcGNhY2hlMi9BcHBsaWNhdGlvbkNhY2hlRnJvbnRl
bmQuY3BwCShyZXZpc2lvbiAwKQorKysgbG9hZGVyL2FwcGNhY2hlMi9BcHBsaWNhdGlvbkNhY2hl
RnJvbnRlbmQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZC5oIgorCisjaWYg
RU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQ6
OmluaXRpYWxpemUoQXBwbGljYXRpb25DYWNoZUNvbnRleHRUeXBlIGNvbnRleHRUeXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250
ZXh0SUQmIHBhcmVudENvbnRleHRJRCkKK3sKKyAgICBzdGF0aWMgaW50IG5leHRJRCA9IDE7Cisg
ICAgbV9jb250ZXh0VHlwZSA9IGNvbnRleHRUeXBlOworICAgIG1fY29udGV4dElEID0gR2xvYmFs
QXBwbGljYXRpb25DYWNoZUNvbnRleHRJRChuZXh0SUQrKywgMCk7CisgICAgLy8gRklYTUU6IHBy
b3h5IGFzeW5jaHJvbm91c2x5IHRvIHRoZSBiYWNrZW5kCit9CisKK3ZvaWQgQXBwbGljYXRpb25D
YWNoZUZyb250ZW5kOjpzZWxlY3RJbml0aWFsQ2FjaGUoY29uc3QgS1VSTCYgZG9jdW1lbnRVUkws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVJRCBjYWNo
ZURvY3VtZW50V2FzTG9hZGVkRnJvbSkKK3sKKyAgICAvLyBGSVhNRTogcHJveHkgYXN5bmNocm9u
b3VzbHkgdG8gdGhlIGJhY2tlbmQKKyAgICBtX2NhbkNhY2hlSW5QYWdlQ2FjaGUgPSBjYWNoZURv
Y3VtZW50V2FzTG9hZGVkRnJvbSA9PSBOb0FwcGxpY2F0aW9uQ2FjaGVJRDsKK30KKwordm9pZCBB
cHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQ6OnNlbGVjdEZpbmFsQ2FjaGVXaXRob3V0TWFuaWZlc3Qo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIGRvY3VtZW50
VVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hl
SUQgY2FjaGVEb2N1bWVudFdhc0xvYWRlZEZyb20pCit7CisgICAgLy8gRklYTUU6IHByb3h5IGFz
eW5jaHJvbm91c2x5IHRvIHRoZSBiYWNrZW5kCisgICAgbV9jYW5DYWNoZUluUGFnZUNhY2hlID0g
Y2FjaGVEb2N1bWVudFdhc0xvYWRlZEZyb20gPT0gTm9BcHBsaWNhdGlvbkNhY2hlSUQ7Cit9CisK
K2Jvb2wgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kOjpzZWxlY3RGaW5hbENhY2hlV2l0aE1hbmlm
ZXN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBkb2N1
bWVudFVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25D
YWNoZUlEIGNhY2hlRG9jdW1lbnRXYXNMb2FkZWRGcm9tLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBLVVJMJiBtYW5pZmVzdFVSTG9mQ2FjaGVEb2N1bWVudFdhc0xv
YWRlZEZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwm
IG1hbmlmZXN0VVJMKQoreworICAgIC8vIEZJWE1FOiBwcm94eSBhc3luY2hyb25vdXNseSB0byB0
aGUgYmFja2VuZAorICAgIG1fY2FuQ2FjaGVJblBhZ2VDYWNoZSA9IGZhbHNlOworCisgICAgLy8g
Q2hlY2sgZm9yIGEgZm9yZWlnbiBlbnRyaXkgYW5kIHJlc3RhcnQgdGhlIGN1cnJlbnQgbmF2aWdh
dGlvbiBpZiBkZXRlY3RlZCwKKyAgICAvLyB0aGUgZm9yZWlnbiBlbnRyeSB3aWxsIG5vdCBiZSBw
aWNrZWQgdXAgb24gcmVsb2FkLgorICAgIGlmICgoY2FjaGVEb2N1bWVudFdhc0xvYWRlZEZyb20g
IT0gTm9BcHBsaWNhdGlvbkNhY2hlSUQpCisgICAgICAgICYmIChtYW5pZmVzdFVSTCAhPSBtYW5p
ZmVzdFVSTG9mQ2FjaGVEb2N1bWVudFdhc0xvYWRlZEZyb20pKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUZy
b250ZW5kOjphZGRFeHRyYUZpZWxkc1RvUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGJvb2wgbWFpblJlc291cmNlKQoreworICAgIHJlcXVlc3Quc2V0QXBwbGljYXRpb25DYWNoZUNv
bnRleHRJRChjb250ZXh0SUQoKSk7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUZyb250ZW5k
OjpjYW5DYWNoZUN1cnJlbnREb2N1bWVudEluUGFnZUNhY2hlKCkgY29uc3QgCit7CisgICAgcmV0
dXJuIG1fY2FuQ2FjaGVJblBhZ2VDYWNoZTsKK30KKworQXBwbGljYXRpb25DYWNoZVN0YXR1cyBB
cHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQ6OnN0YXR1cygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6
IHJldHVybiBhIGNhY2hlZCBzdGF0dXMgdmFsdWUsIG9yIHByb3h5IHN5bmNocm9ub3VzbHkgdG8g
dGhlCisgICAgLy8gYmFja2VuZCBpZiB3ZSBoYXZlIG5vIGNhY2hlZCB2YWx1ZS4KKyAgICByZXR1
cm4gQVBQQ0FDSEVfVU5DQUNIRUQ7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUZyb250ZW5k
Ojp1cGRhdGUoKQoreworICAgIC8vIEZJWE1FOiBwcm94eSBzeW5jaHJvbm91c2x5IHRvIHRoZSBi
YWNrZW5kCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVGcm9u
dGVuZDo6c3dhcENhY2hlKCkKK3sKKyAgICAvLyBGSVhNRTogcHJveHkgc3luY2hyb25vdXNseSB0
byB0aGUgYmFja2VuZAorICAgIHJldHVybiBmYWxzZTsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmICAvLyBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogbG9hZGVyL2FwcGNhY2hlMi9B
cHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRh
YmxlCiAgICsgKgoKSW5kZXg6IGxvYWRlci9hcHBjYWNoZTIvQXBwbGljYXRpb25DYWNoZUZyb250
ZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL2FwcGNhY2hlMi9BcHBsaWNhdGlvbkNhY2hlRnJv
bnRlbmQuaAkocmV2aXNpb24gMCkKKysrIGxvYWRlci9hcHBjYWNoZTIvQXBwbGljYXRpb25DYWNo
ZUZyb250ZW5kLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJp
Z2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFw
cGxpY2F0aW9uQ2FjaGVGcm9udGVuZF9oCisjZGVmaW5lIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVu
ZF9oCisKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisKKyNpbmNsdWRlICJBcHBsaWNh
dGlvbkNhY2hlQ29tbW9uLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKyAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CisKKyAgICAvLyBFYWNoIGZyYW1lIGhh
cyBhbiBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQgd2hpY2ggc2VydmVzIGFzIGEgcHJveHkgdG8g
dGhlCisgICAgLy8gYmFja2VuZCBpbXBsbWVudGF0aW9uLgorICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQgYSBmdW5jdGlvbmFsIGluc3RhbmNlIG9mIHRoaXMgaW50ZXJmYWNlLCBmb3Igbm93IHRoaXMK
KyAgICAvLyBzdHViIGp1c3QgZGVtb25zdHJhdGVzIHNvbWUgb2YgdGhlIGxvZ2ljIHRoZSByZWFs
IGltcGxlbWVudGF0aW9uIHdpbGwgaGF2ZS4KKyAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlRnJv
bnRlbmQgeworICAgIHB1YmxpYzoKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kKCkK
KyAgICAgICAgICAgIDogbV9jb250ZXh0VHlwZShNYWluRnJhbWVDb250ZXh0KQorICAgICAgICAg
ICAgLCBtX2RlbGVnYXRlKDApCisgICAgICAgICAgICAsIG1fY2FuQ2FjaGVJblBhZ2VDYWNoZSh0
cnVlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICAvLyBEZWxldGVkIHVwb24gZnJh
bWUgZGVzdHJ1Y3Rpb24uCisgICAgICAgIH5BcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQoKSB7fQor
CisgICAgICAgIC8vIFJldHVybnMgdGhlIGFwcGNhY2hlIGNvbnRleHRJRCBmb3IgdGhpcyBpbnN0
YW5jZSwgZWFjaCBmcmFtZSBpcyB1bmlxdWVseQorICAgICAgICAvLyBpZGVudGlmaWVkIGJ5IHRo
aXMgSUQuCisgICAgICAgIGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQmIGNv
bnRleHRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dElEOyB9CisKKyAgICAgICAgLy8gUmV0
dXJucyB0aGUgYXBwY2FjaGUgY29udGV4dFR5cGUgZm9yIHRoaXMgaW5zdGFuY2UKKyAgICAgICAg
QXBwbGljYXRpb25DYWNoZUNvbnRleHRUeXBlIGNvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZXh0VHlwZTsgfQorCisgICAgICAgIC8vIENhbGxlZCBkdXJpbmcgZnJhbWUgY3JlYXRp
b24uIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLgorICAgICAgICB2b2lkIGluaXRpYWxpemUo
QXBwbGljYXRpb25DYWNoZUNvbnRleHRUeXBlIGNvbnRleHRUeXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCYgcGFyZW50Q29u
dGV4dElEKTsKKworICAgICAgICAvLyBDYWxsZWQgZHVyaW5nIGZyYW1lIG5hdmlnYXRpb24gd2hl
biBhIG5ldyBkb2N1bWVudCBpcyBjb21taXR0ZWQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZWxl
Y3RJbml0aWFsQ2FjaGUoY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZUlEIGNhY2hlRG9jdW1lbnRX
YXNMb2FkZWRGcm9tKTsKKworICAgICAgICAvLyBDYWxsZWQgYWZ0ZXIgcGFyc2luZyBvZiB0aGUg
SFRNTCBlbGVtZW50IGlzIGNvbXBsZXRlLCBhbmQgdGhlcmUgd2FzIG5vCisgICAgICAgIC8vIG1h
bmlmZXN0IGF0dHJpYnV0ZS4KKyAgICAgICAgdm9pZCBzZWxlY3RGaW5hbENhY2hlV2l0aG91dE1h
bmlmZXN0KGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZUlEIGNhY2hlRG9jdW1lbnRXYXNM
b2FkZWRGcm9tKTsKKworICAgICAgICAvLyBDYWxsZWQgYWZ0ZXIgcGFyc2luZyBvZiB0aGUgSFRN
TCBlbGVtZW50IGlzIGNvbXBsZXRlLCBhbmQgdGhlcmUgd2FzIGEKKyAgICAgICAgLy8gbWFuaWZl
c3QgYXR0cmlidXRlLiBSZXR1cm5zIGZhbHNlIGlmIHRoZSB0aGUgbmF2aWdhdGlvbiBzaG91bGQg
YmUgcmVzdGFydGVkLAorICAgICAgICAvLyB0aGlzIG9jY3VycyBpZiBhICdmb3JpZWduJyByZXNv
dXJjZSB3YXMgbG9hZGVkIGZyb20gdGhlIGNhY2hlLgorICAgICAgICBib29sIHNlbGVjdEZpbmFs
Q2FjaGVXaXRoTWFuaWZlc3QoY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlSUQgY2FjaGVEb2N1
bWVudFdhc0xvYWRlZEZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBLVVJMJiBtYW5pZmVzdFVSTG9mQ2FjaGVEb2N1bWVudFdhc0xvYWRlZEZyb20s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBt
YW5pZmVzdFVSTCk7CisKKyAgICAgICAgLy8gQ2FsbGVkIGJ5IEZyYW1lTG9hZGVyIHdoZW4gcHJl
cGFyaW5nIGEgcmVzb3VyY2UgcmVxdWVzdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb250ZXh0Lgor
ICAgICAgICB2b2lkIGFkZEV4dHJhRmllbGRzVG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgYm9vbCBtYWluUmVzb3VyY2UpOworCisgICAgICAgIC8vIENhbGxlZCBieSBGcmFtZUxv
YWRlciB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdGhlIGNvbnRlbnRzIGFyZSBlbGlnaWJsZSBmb3Ig
dGhlIHBhZ2UgY2FjaGUuCisgICAgICAgIGJvb2wgY2FuQ2FjaGVDdXJyZW50RG9jdW1lbnRJblBh
Z2VDYWNoZSgpIGNvbnN0OworCisgICAgICAgIC8vIFN1cHBvcnQgZm9yIHRoZSBzY3JpcHRhYmxl
IGludGVyZmFjZSBkZWZpbmVkIGJ5IERPTUFwcGxpY2F0b2luQ2FjaGUuaWRsCisgICAgICAgIGNs
YXNzIERlbGVnYXRlIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgdmlydHVhbCB2b2lk
IG9uQ2hlY2tpbmcoQXBwbGljYXRpb25DYWNoZUZyb250ZW5kKiBjYWNoZSkgPSAwOworICAgICAg
ICAgICAgdmlydHVhbCB2b2lkIG9uRXJyb3IoQXBwbGljYXRpb25DYWNoZUZyb250ZW5kKiBjYWNo
ZSkgPSAwOyAgIAorICAgICAgICAgICAgdmlydHVhbCB2b2lkIG9uTm9VcGRhdGUoQXBwbGljYXRp
b25DYWNoZUZyb250ZW5kKiBjYWNoZSkgPSAwOyAgICAKKyAgICAgICAgICAgIHZpcnR1YWwgdm9p
ZCBvbkRvd25sb2FkaW5nKEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCogY2FjaGUpID0gMDsKKyAg
ICAgICAgICAgIHZpcnR1YWwgdm9pZCBvblByb2dyZXNzKEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVu
ZCogY2FjaGUpID0gMDsKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBvblVwZGF0ZVJlYWR5KEFw
cGxpY2F0aW9uQ2FjaGVGcm9udGVuZCogY2FjaGUpID0gMDsKKyAgICAgICAgICAgIHZpcnR1YWwg
dm9pZCBvbkNhY2hlZChBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQqIGNhY2hlKSA9IDA7CisgICAg
ICAgICAgICB2aXJ0dWFsIHZvaWQgb25PYnNvbGV0ZShBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQq
IGNhY2hlKSA9IDA7CisgICAgICAgICAgICB2aXJ0dWFsIH5EZWxlZ2F0ZSgpIHt9CisgICAgICAg
IH07CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVTdGF0dXMgc3RhdHVzKCkgY29uc3Q7ICAKKyAg
ICAgICAgYm9vbCB1cGRhdGUoKTsKKyAgICAgICAgYm9vbCBzd2FwQ2FjaGUoKTsgICAKKyAgICAg
ICAgdm9pZCBzZXREZWxlZ2F0ZShEZWxlZ2F0ZSogZGVsZWdhdGUpIHsgbV9kZWxlZ2F0ZSA9IGRl
bGVnYXRlOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBHbG9iYWxBcHBsaWNhdGlvbkNhY2hl
Q29udGV4dElEIG1fY29udGV4dElEOworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlQ29udGV4dFR5
cGUgbV9jb250ZXh0VHlwZTsKKyAgICAgICAgRGVsZWdhdGUqIG1fZGVsZWdhdGU7CisgICAgICAg
IGJvb2wgbV9jYW5DYWNoZUluUGFnZUNhY2hlOworICAgIH07CisKK30gIC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAgLy8gRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorI2VuZGlmICAv
LyBXZWJBcHBsaWNhdGlvbkNhY2hlQ29udGV4dF9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBsb2Fk
ZXIvYXBwY2FjaGUyL0FwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZC5oCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IGxvYWRlci9hcHBjYWNoZTIvRE9NQXBwbGlj
YXRpb25DYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL2FwcGNhY2hlMi9ET01BcHBsaWNh
dGlvbkNhY2hlLmNwcAkocmV2aXNpb24gMCkKKysrIGxvYWRlci9hcHBjYWNoZTIvRE9NQXBwbGlj
YXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hlLmgiCisKKyNpZiBFTkFCTEUoQVBQ
TElDQVRJT05fQ0FDSEUpCisKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50RXhj
ZXB0aW9uLmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5j
bHVkZSAiU3RhdGljU3RyaW5nTGlzdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RPTUFw
cGxpY2F0aW9uQ2FjaGU6OkRPTUFwcGxpY2F0aW9uQ2FjaGUoRnJhbWUqIGZyYW1lKQorICAgIDog
bV9mcmFtZShmcmFtZSkKKyAgICAsIG1fYXBwY2FjaGVGcm9udGVuZChmcmFtZS0+bG9hZGVyKCkt
PmFwcGNhY2hlRnJvbnRlbmQoKSkKK3sKKyAgICBhcHBjYWNoZUZyb250ZW5kKCktPnNldERlbGVn
YXRlKHRoaXMpOworfQorCit2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmRpc2Nvbm5lY3RGcmFt
ZSgpCit7CisgICAgYXBwY2FjaGVGcm9udGVuZCgpLT5zZXREZWxlZ2F0ZSgwKTsKKyAgICBtX2Zy
YW1lID0gMDsKKyAgICBtX2FwcGNhY2hlRnJvbnRlbmQgPSAwOworfQorCit1bnNpZ25lZCBzaG9y
dCBET01BcHBsaWNhdGlvbkNhY2hlOjpzdGF0dXMoKSBjb25zdAoreworICAgIEFwcGxpY2F0aW9u
Q2FjaGVGcm9udGVuZCogY2FjaGUgPSBhcHBjYWNoZUZyb250ZW5kKCk7ICAgIAorICAgIGlmICgh
Y2FjaGUpCisgICAgICAgIHJldHVybiBVTkNBQ0hFRDsKKworICAgIHN3aXRjaCAoY2FjaGUtPnN0
YXR1cygpKSB7CisgICAgICAgIGNhc2UgQVBQQ0FDSEVfVU5DQUNIRUQ6CisgICAgICAgICAgICBy
ZXR1cm4gVU5DQUNIRUQ7CisgICAgICAgIGNhc2UgQVBQQ0FDSEVfQ0hFQ0tJTkc6CisgICAgICAg
ICAgICByZXR1cm4gQ0hFQ0tJTkc7CisgICAgICAgIGNhc2UgQVBQQ0FDSEVfRE9XTkxPQURJTkc6
CisgICAgICAgICAgICByZXR1cm4gRE9XTkxPQURJTkc7CisgICAgICAgIGNhc2UgQVBQQ0FDSEVf
SURMRToKKyAgICAgICAgICAgIHJldHVybiBJRExFOworICAgICAgICBjYXNlIEFQUENBQ0hFX09C
U09MRVRFOgorICAgICAgICAgICAgcmV0dXJuIE9CU09MRVRFOworICAgICAgICBjYXNlIEFQUENB
Q0hFX1VQREFURVJFQURZOgorICAgICAgICAgICAgcmV0dXJuIFVQREFURVJFQURZOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIERP
TUFwcGxpY2F0aW9uQ2FjaGU6OnVwZGF0ZShFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBcHBs
aWNhdGlvbkNhY2hlRnJvbnRlbmQqIGNhY2hlID0gYXBwY2FjaGVGcm9udGVuZCgpOyAgICAKKyAg
ICBpZiAoIWNhY2hlKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgY2FjaGUtPnVwZGF0ZSgpOworfQorCitib29sIERP
TUFwcGxpY2F0aW9uQ2FjaGU6OnN3YXBDYWNoZSgpCit7CisgICAgQXBwbGljYXRpb25DYWNoZUZy
b250ZW5kKiBjYWNoZSA9IGFwcGNhY2hlRnJvbnRlbmQoKTsgICAgCisgICAgaWYgKCFjYWNoZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGNhY2hlLT5zd2FwQ2FjaGUoKTsK
K30KKyAgICAKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6c3dhcENhY2hlKEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIGlmICghc3dhcENhY2hlKCkpCisgICAgICAgIGVjID0gSU5WQUxJRF9T
VEFURV9FUlI7Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIERPTUFwcGxpY2F0aW9uQ2Fj
aGU6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZyYW1l
ID8gbV9mcmFtZS0+ZG9jdW1lbnQoKSA6IDA7Cit9CisKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNo
ZTo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyLCBib29sKQoreworICAgIEV2ZW50TGlz
dGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlw
ZSk7CisgICAgaWYgKGl0ZXIgPT0gbV9ldmVudExpc3RlbmVycy5lbmQoKSkgeworICAgICAgICBM
aXN0ZW5lclZlY3RvciBsaXN0ZW5lcnM7CisgICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRM
aXN0ZW5lcik7CisgICAgICAgIG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVu
ZXJzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0g
aXRlci0+c2Vjb25kOworICAgICAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRvciBsaXN0
ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5l
bmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsKKyAgICAgICAgICAgIGlmICgqbGlzdGVuZXJJdGVyID09
IGV2ZW50TGlzdGVuZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOworICAgICAgICBt
X2V2ZW50TGlzdGVuZXJzLmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7CisgICAgfSAgICAKK30K
Kwordm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBldmVudExpc3RlbmVyLCBib29s
KQoreworICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3Rl
bmVycy5maW5kKGV2ZW50VHlwZSk7CisgICAgaWYgKGl0ZXIgPT0gbV9ldmVudExpc3RlbmVycy5l
bmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5l
cnMgPSBpdGVyLT5zZWNvbmQ7CisgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6Y29uc3RfaXRlcmF0
b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzLmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0
ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7CisgICAgICAgIGlmICgqbGlzdGVuZXJJdGVy
ID09IGV2ZW50TGlzdGVuZXIpIHsKKyAgICAgICAgICAgIGxpc3RlbmVycy5yZW1vdmUobGlzdGVu
ZXJJdGVyIC0gbGlzdGVuZXJzLmJlZ2luKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorfQorCitib29sIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICgh
ZXZlbnQgfHwgZXZlbnQtPnR5cGUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBFdmVudEV4
Y2VwdGlvbjo6VU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlI7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICBMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnNDb3B5ID0gbV9ldmVu
dExpc3RlbmVycy5nZXQoZXZlbnQtPnR5cGUoKSk7CisgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6
Y29uc3RfaXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzQ29weS5iZWdpbigpOyBsaXN0
ZW5lckl0ZXIgIT0gbGlzdGVuZXJzQ29weS5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsKKyAgICAg
ICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJn
ZXQodGhpcyk7CisgICAgICAgIGxpc3RlbmVySXRlci0+Z2V0KCktPmhhbmRsZUV2ZW50KGV2ZW50
LmdldCgpLCBmYWxzZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQ
cmV2ZW50ZWQoKTsKK30KKwordm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsTGlzdGVuZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQor
eworICAgIEFTU0VSVChtX2ZyYW1lKTsKKyAgICAKKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0g
RXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGZhbHNlLCBmYWxzZSk7CisgICAgaWYgKGxpc3RlbmVy
KSB7CisgICAgICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CisgICAgICAgIGV2ZW50LT5zZXRD
dXJyZW50VGFyZ2V0KHRoaXMpOworICAgICAgICBsaXN0ZW5lci0+aGFuZGxlRXZlbnQoZXZlbnQu
Z2V0KCksIGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNlKCksIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsg
ICAgCit9CisKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbENoZWNraW5nTGlzdGVuZXIo
KQoreworICAgIGNhbGxMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hlY2tpbmdFdmVudCwgbV9vbkNo
ZWNraW5nTGlzdGVuZXIuZ2V0KCkpOworfQorCit2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmNh
bGxFcnJvckxpc3RlbmVyKCkKK3sKKyAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLmVycm9y
RXZlbnQsIG1fb25FcnJvckxpc3RlbmVyLmdldCgpKTsKK30KKwordm9pZCBET01BcHBsaWNhdGlv
bkNhY2hlOjpjYWxsTm9VcGRhdGVMaXN0ZW5lcigpCit7CisgICAgY2FsbExpc3RlbmVyKGV2ZW50
TmFtZXMoKS5ub3VwZGF0ZUV2ZW50LCBtX29uTm9VcGRhdGVMaXN0ZW5lci5nZXQoKSk7Cit9CisK
K3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbERvd25sb2FkaW5nTGlzdGVuZXIoKQorewor
ICAgIGNhbGxMaXN0ZW5lcihldmVudE5hbWVzKCkuZG93bmxvYWRpbmdFdmVudCwgbV9vbkRvd25s
b2FkaW5nTGlzdGVuZXIuZ2V0KCkpOworfQorCit2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmNh
bGxQcm9ncmVzc0xpc3RlbmVyKCkKK3sKKyAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLnBy
b2dyZXNzRXZlbnQsIG1fb25Qcm9ncmVzc0xpc3RlbmVyLmdldCgpKTsKK30KKwordm9pZCBET01B
cHBsaWNhdGlvbkNhY2hlOjpjYWxsVXBkYXRlUmVhZHlMaXN0ZW5lcigpCit7CisgICAgY2FsbExp
c3RlbmVyKGV2ZW50TmFtZXMoKS51cGRhdGVyZWFkeUV2ZW50LCBtX29uVXBkYXRlUmVhZHlMaXN0
ZW5lci5nZXQoKSk7Cit9CisKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbENhY2hlZExp
c3RlbmVyKCkKK3sKKyAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLmNhY2hlZEV2ZW50LCBt
X29uQ2FjaGVkTGlzdGVuZXIuZ2V0KCkpOworfQorCit2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6
OmNhbGxPYnNvbGV0ZUxpc3RlbmVyKCkKK3sKKyAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygp
Lm9ic29sZXRlRXZlbnQsIG1fb25PYnNvbGV0ZUxpc3RlbmVyLmdldCgpKTsKK30KKworI2lmIFVT
RShWOCkKK1JlZlB0cjxFdmVudExpc3RlbmVyPiogRE9NQXBwbGljYXRpb25DYWNoZTo6Z2V0QXR0
cmlidXRlRXZlbnRMaXN0ZW5lclN0b3JhZ2UoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUp
Cit7CisgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2hlY2tpbmdFdmVudCkKKyAg
ICAgICAgcmV0dXJuICZtX29uQ2hlY2tpbmdMaXN0ZW5lcjsKKyAgICBlbHNlIGlmIChldmVudFR5
cGUgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQpCisgICAgICAgIHJldHVybiAmbV9vbkVycm9y
TGlzdGVuZXI7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5ub3VwZGF0
ZUV2ZW50KQorICAgICAgICByZXR1cm4gJm1fb25Ob1VwZGF0ZUxpc3RlbmVyOworICAgIGVsc2Ug
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZG93bmxvYWRpbmdFdmVudCkKKyAgICAgICAg
cmV0dXJuICZtX29uRG93bmxvYWRpbmdMaXN0ZW5lcjsKKyAgICBlbHNlIGlmIChldmVudFR5cGUg
PT0gZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQpCisgICAgICAgIHJldHVybiAmbV9vblByb2dy
ZXNzTGlzdGVuZXI7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS51cGRh
dGVyZWFkeUV2ZW50KQorICAgICAgICByZXR1cm4gJm1fb25VcGRhdGVSZWFkeUxpc3RlbmVyOwor
ICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2FjaGVkRXZlbnQpCisgICAg
ICAgIHJldHVybiAmbV9vbkNhY2hlZExpc3RlbmVyOworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9
PSBldmVudE5hbWVzKCkub2Jzb2xldGVFdmVudCkKKyAgICAgICAgcmV0dXJuICZtX29uT2Jzb2xl
dGVMaXN0ZW5lcjsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCitFdmVudExpc3Rl
bmVyKiBET01BcHBsaWNhdGlvbkNhY2hlOjpnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQoreworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiog
c3RvcmFnZSA9IGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXJTdG9yYWdlKGV2ZW50VHlwZSk7Cisg
ICAgQVNTRVJUKHN0b3JhZ2UpOworICAgIHJldHVybiAoKnN0b3JhZ2UpLmdldCgpOworfQorCit2
b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVu
ZXIpCit7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+KiBzdG9yYWdlID0gZ2V0QXR0cmlidXRl
RXZlbnRMaXN0ZW5lclN0b3JhZ2UoZXZlbnRUeXBlKTsKKyAgICBBU1NFUlQoc3RvcmFnZSk7Cisg
ICAgKCpzdG9yYWdlKSA9IGxpc3RlbmVyOworfQorCit2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6
OmNsZWFyQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSkKK3sKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4qIHN0b3JhZ2UgPSBnZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyU3RvcmFnZShldmVudFR5cGUpOworICAgIEFTU0VSVChzdG9yYWdlKTsKKyAg
ICAoKnN0b3JhZ2UpID0gMDsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBsb2FkZXIvYXBwY2FjaGUyL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IGxvYWRlci9hcHBjYWNoZTIvRE9NQXBw
bGljYXRpb25DYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9hcHBjYWNoZTIvRE9NQXBwbGlj
YXRpb25DYWNoZS5oCShyZXZpc2lvbiAwKQorKysgbG9hZGVyL2FwcGNhY2hlMi9ET01BcHBsaWNh
dGlvbkNhY2hlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRE9NQXBwbGlj
YXRpb25DYWNoZV9oCisjZGVmaW5lIERPTUFwcGxpY2F0aW9uQ2FjaGVfaAorCisjaWYgRU5BQkxF
KEFQUExJQ0FUSU9OX0NBQ0hFKQorCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUZyb250ZW5k
LmgiCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0
LmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBBdG9taWNTdHJpbmdJbXBsOworY2xhc3MgRE9NU3RyaW5nTGlzdDsKK2NsYXNzIEZyYW1lOwor
Y2xhc3MgS1VSTDsKK2NsYXNzIFN0cmluZzsKKyAgICAKK2NsYXNzIERPTUFwcGxpY2F0aW9uQ2Fj
aGUgOiBwdWJsaWMgUmVmQ291bnRlZDxET01BcHBsaWNhdGlvbkNhY2hlPiwgcHVibGljIEV2ZW50
VGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBBcHBsaWNhdGlvbkNh
Y2hlRnJvbnRlbmQ6OkRlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICAvLyBGSVhNRTogaW50ZWdyYXRl
IHdpdGggd29ya2VycworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTUFwcGxpY2F0aW9uQ2FjaGU+
IGNyZWF0ZShGcmFtZSogZnJhbWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01BcHBsaWNhdGlv
bkNhY2hlKGZyYW1lKSk7IH0KKyAgICB2b2lkIGRpc2Nvbm5lY3RGcmFtZSgpOworCisgICAgZW51
bSBTdGF0dXMgeworICAgICAgICBVTkNBQ0hFRCA9IDAsCisgICAgICAgIElETEUgPSAxLAorICAg
ICAgICBDSEVDS0lORyA9IDIsCisgICAgICAgIERPV05MT0FESU5HID0gMywKKyAgICAgICAgVVBE
QVRFUkVBRFkgPSA0LAorICAgICAgICBPQlNPTEVURSA9IDUKKyAgICB9OworCisgICAgdW5zaWdu
ZWQgc2hvcnQgc3RhdHVzKCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGUoRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgc3dhcENhY2hlKEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAKKyAgICB2aXJ0dWFs
IHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZl
bnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNo
RXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAKKyAgICB0eXBl
ZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gPiBMaXN0ZW5lclZlY3RvcjsKKyAgICB0
eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBMaXN0ZW5lclZlY3Rvcj4gRXZlbnRMaXN0ZW5l
cnNNYXA7CisgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzKCkgeyByZXR1cm4g
bV9ldmVudExpc3RlbmVyczsgfQorCisgICAgdXNpbmcgUmVmQ291bnRlZDxET01BcHBsaWNhdGlv
bkNhY2hlPjo6cmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ8RE9NQXBwbGljYXRpb25DYWNoZT46
OmRlcmVmOworCisgICAgdm9pZCBzZXRPbmNoZWNraW5nKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uQ2hlY2tpbmdMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7
IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbmNoZWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9vbkNo
ZWNraW5nTGlzdGVuZXIuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0T25lcnJvcihQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbkVycm9yTGlzdGVuZXIgPSBldmVu
dExpc3RlbmVyOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25lcnJvcigpIGNvbnN0IHsgcmV0dXJu
IG1fb25FcnJvckxpc3RlbmVyLmdldCgpOyB9CisKKyAgICB2b2lkIHNldE9ubm91cGRhdGUoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25Ob1VwZGF0ZUxpc3Rl
bmVyID0gZXZlbnRMaXN0ZW5lcjsgfQorICAgIEV2ZW50TGlzdGVuZXIqIG9ubm91cGRhdGUoKSBj
b25zdCB7IHJldHVybiBtX29uTm9VcGRhdGVMaXN0ZW5lci5nZXQoKTsgfQorCisgICAgdm9pZCBz
ZXRPbmRvd25sb2FkaW5nKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikg
eyBtX29uRG93bmxvYWRpbmdMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICBFdmVudExp
c3RlbmVyKiBvbmRvd25sb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9vbkRvd25sb2FkaW5nTGlz
dGVuZXIuZ2V0KCk7IH0KKyAgICAKKyAgICB2b2lkIHNldE9ucHJvZ3Jlc3MoUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25Qcm9ncmVzc0xpc3RlbmVyID0gZXZl
bnRMaXN0ZW5lcjsgfQorICAgIEV2ZW50TGlzdGVuZXIqIG9ucHJvZ3Jlc3MoKSBjb25zdCB7IHJl
dHVybiBtX29uUHJvZ3Jlc3NMaXN0ZW5lci5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRPbnVwZGF0
ZXJlYWR5KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uVXBk
YXRlUmVhZHlMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICBFdmVudExpc3RlbmVyKiBv
bnVwZGF0ZXJlYWR5KCkgY29uc3QgeyByZXR1cm4gbV9vblVwZGF0ZVJlYWR5TGlzdGVuZXIuZ2V0
KCk7IH0KKworICAgIHZvaWQgc2V0T25jYWNoZWQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBl
dmVudExpc3RlbmVyKSB7IG1fb25DYWNoZWRMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KKyAg
ICBFdmVudExpc3RlbmVyKiBvbmNhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fb25DYWNoZWRMaXN0
ZW5lci5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRPbm9ic29sZXRlKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uT2Jzb2xldGVMaXN0ZW5lciA9IGV2ZW50TGlz
dGVuZXI7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbm9ic29sZXRlKCkgY29uc3QgeyByZXR1cm4g
bV9vbk9ic29sZXRlTGlzdGVuZXIuZ2V0KCk7IH0KKworICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworICAgIERPTUFwcGxp
Y2F0aW9uQ2FjaGUqIHRvRE9NQXBwbGljYXRpb25DYWNoZSgpIHsgcmV0dXJuIHRoaXM7IH0KKwor
ICAgIHZvaWQgY2FsbENoZWNraW5nTGlzdGVuZXIoKTsKKyAgICB2b2lkIGNhbGxFcnJvckxpc3Rl
bmVyKCk7ICAgIAorICAgIHZvaWQgY2FsbE5vVXBkYXRlTGlzdGVuZXIoKTsgICAgCisgICAgdm9p
ZCBjYWxsRG93bmxvYWRpbmdMaXN0ZW5lcigpOworICAgIHZvaWQgY2FsbFByb2dyZXNzTGlzdGVu
ZXIoKTsKKyAgICB2b2lkIGNhbGxVcGRhdGVSZWFkeUxpc3RlbmVyKCk7CisgICAgdm9pZCBjYWxs
Q2FjaGVkTGlzdGVuZXIoKTsKKyAgICB2b2lkIGNhbGxPYnNvbGV0ZUxpc3RlbmVyKCk7CisKKyNp
ZiBVU0UoVjgpCisgICAgRXZlbnRMaXN0ZW5lciogZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7CisgICAgdm9pZCBzZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGxpc3RlbmVyKTsKKyAgICB2b2lkIGNsZWFyQXR0cmlidXRlRXZlbnRMaXN0ZW5l
cihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7CisjZW5kaWYKKyAgICAKK3ByaXZhdGU6
CisgICAgRE9NQXBwbGljYXRpb25DYWNoZShGcmFtZSopOworCisgICAgLy8gQXBwbGljYXRpb25D
YWNoZUZyb250ZW5kOjpEZWxlZ2F0ZSBpbnRlcmZhY2UKKyAgICB2aXJ0dWFsIHZvaWQgb25DaGVj
a2luZyhBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQqIGNhY2hlKSB7IGNhbGxDaGVja2luZ0xpc3Rl
bmVyKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcihBcHBsaWNhdGlvbkNhY2hlRnJvbnRl
bmQqIGNhY2hlKSB7IGNhbGxFcnJvckxpc3RlbmVyKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25O
b1VwZGF0ZShBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQqIGNhY2hlKSB7IGNhbGxOb1VwZGF0ZUxp
c3RlbmVyKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25Eb3dubG9hZGluZyhBcHBsaWNhdGlvbkNh
Y2hlRnJvbnRlbmQqIGNhY2hlKSB7IGNhbGxEb3dubG9hZGluZ0xpc3RlbmVyKCk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgb25Qcm9ncmVzcyhBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQqIGNhY2hlKSB7
IGNhbGxQcm9ncmVzc0xpc3RlbmVyKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25VcGRhdGVSZWFk
eShBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQqIGNhY2hlKSB7IGNhbGxVcGRhdGVSZWFkeUxpc3Rl
bmVyKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25DYWNoZWQoQXBwbGljYXRpb25DYWNoZUZyb250
ZW5kKiBjYWNoZSkgeyBjYWxsQ2FjaGVkTGlzdGVuZXIoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBv
bk9ic29sZXRlKEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCogY2FjaGUpIHsgY2FsbE9ic29sZXRl
TGlzdGVuZXIoKTsgfQorCisgICAgdm9pZCBjYWxsTGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcmVm
RXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJn
ZXQoKSB7IGRlcmVmKCk7IH0KKworICAgIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCogYXBwY2Fj
aGVGcm9udGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwY2FjaGVGcm9udGVuZDsgfQorICAgIGJv
b2wgc3dhcENhY2hlKCk7CisgICAgCisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25DaGVj
a2luZ0xpc3RlbmVyOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uRXJyb3JMaXN0ZW5l
cjsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbk5vVXBkYXRlTGlzdGVuZXI7CisgICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25Eb3dubG9hZGluZ0xpc3RlbmVyOworICAgIFJlZlB0
cjxFdmVudExpc3RlbmVyPiBtX29uUHJvZ3Jlc3NMaXN0ZW5lcjsKKyAgICBSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbV9vblVwZGF0ZVJlYWR5TGlzdGVuZXI7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IG1fb25DYWNoZWRMaXN0ZW5lcjsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbk9i
c29sZXRlTGlzdGVuZXI7CisgI2lmIFVTRShWOCkKKyAgICAvLyBSZXR1cm5zIGEgcG9pbnRlciB0
byB0aGUgYXBwcm9waWF0ZSBkYXRhIG1lbWJlciBhYm92ZQorICAgIFJlZlB0cjxFdmVudExpc3Rl
bmVyPiogZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lclN0b3JhZ2UoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUpOworI2VuZGlmCisKKyAgICBFdmVudExpc3RlbmVyc01hcCBtX2V2ZW50TGlz
dGVuZXJzOworCisKKyAgICBGcmFtZSogbV9mcmFtZTsKKyAgICBBcHBsaWNhdGlvbkNhY2hlRnJv
bnRlbmQqIG1fYXBwY2FjaGVGcm9udGVuZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKworI2VuZGlmIC8vIERPTUFw
cGxpY2F0aW9uQ2FjaGVfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogbG9hZGVyL2FwcGNhY2hlMi9E
T01BcHBsaWNhdGlvbkNhY2hlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAg
KyAqCgpJbmRleDogbG9hZGVyL2FwcGNhY2hlMi9ET01BcHBsaWNhdGlvbkNhY2hlLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBsb2FkZXIvYXBwY2FjaGUyL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaWRsCShyZXZp
c2lvbiAwKQorKysgbG9hZGVyL2FwcGNhY2hlMi9ET01BcHBsaWNhdGlvbkNhY2hlLmlkbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworIAorbW9kdWxlIGFwcGNhY2hlIHsKKyAKKyAgICBpbnRlcmZh
Y2UgWworICAgICAgICBDb25kaXRpb25hbD1BUFBMSUNBVElPTl9DQUNIRSwKKyAgICAgICAgQ3Vz
dG9tTWFya0Z1bmN0aW9uCisgICAgXSBET01BcHBsaWNhdGlvbkNhY2hlIHsKKyAgICAgICAgLy8g
dXBkYXRlIHN0YXR1cworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBVTkNBQ0hFRCA9IDA7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IElETEUgPSAxOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBDSEVDS0lORyA9IDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
IERPV05MT0FESU5HID0gMzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVVBEQVRFUkVB
RFkgPSA0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBPQlNPTEVURSA9IDU7CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CisKKyAgICAgICAg
dm9pZCB1cGRhdGUoKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAg
IHZvaWQgc3dhcENhY2hlKCkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworCisg
ICAgICAgIC8vIGV2ZW50cworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmNoZWNr
aW5nOworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOworICAgICAgICBh
dHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbm5vdXBkYXRlOworICAgICAgICBhdHRyaWJ1dGUgRXZl
bnRMaXN0ZW5lciBvbmRvd25sb2FkaW5nOworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5l
ciBvbnByb2dyZXNzOworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbnVwZGF0ZXJl
YWR5OworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmNhY2hlZDsKKyAgICAgICAg
YXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25vYnNvbGV0ZTsKKworICAgICAgICAvLyBFdmVudFRh
cmdldCBpbnRlcmZhY2UKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBhZGRFdmVudExpc3RlbmVyKGlu
IERPTVN0cmluZyB0eXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgW0N1c3RvbV0gdm9p
ZCByZW1vdmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VD
YXB0dXJlKTsKKyAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2ZW50IGV2dCkKKyAg
ICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CisgICAgfTsKKworfQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogbG9hZGVyL2FwcGNhY2hlMi9ET01BcHBsaWNhdGlvbkNhY2hlLmlkbApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBwYWdlL0RPTVdpbmRv
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiA0NDE2MykK
KysrIHBhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQAog
I2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAjZW5kaWYKIAotI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwg
RU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQogI2luY2x1ZGUgIkRPTUFwcGxpY2F0aW9uQ2FjaGUu
aCIKICNlbmRpZgogCkBAIC00MzUsNyArNDM1LDcgQEAgdm9pZCBET01XaW5kb3c6OmNsZWFyKCkK
ICAgICBtX2xvY2FsU3RvcmFnZSA9IDA7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwg
RU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQogICAgIGlmIChtX2FwcGxpY2F0aW9uQ2FjaGUpCiAg
ICAgICAgIG1fYXBwbGljYXRpb25DYWNoZS0+ZGlzY29ubmVjdEZyYW1lKCk7CiAgICAgbV9hcHBs
aWNhdGlvbkNhY2hlID0gMDsKQEAgLTUwNSw3ICs1MDUsNyBAQCBDb25zb2xlKiBET01XaW5kb3c6
OmNvbnNvbGUoKSBjb25zdAogICAgIHJldHVybiBtX2NvbnNvbGUuZ2V0KCk7CiB9CiAKLSNpZiBF
TkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9B
UFBMSUNBVElPTlMpIHx8IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKIERPTUFwcGxpY2F0aW9u
Q2FjaGUqIERPTVdpbmRvdzo6YXBwbGljYXRpb25DYWNoZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X2FwcGxpY2F0aW9uQ2FjaGUpCkluZGV4OiBwYWdlL0RPTVdpbmRvdy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHBhZ2UvRE9NV2luZG93LmgJKHJldmlzaW9uIDQ0MTYzKQorKysgcGFnZS9ET01XaW5kb3cuaAko
d29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgU3RvcmFnZTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSB8fCBFTkFCTEUoQVBQ
TElDQVRJT05fQ0FDSEUpCiAgICAgY2xhc3MgRE9NQXBwbGljYXRpb25DYWNoZTsKICNlbmRpZgog
CkBAIC0xOTYsNyArMTk2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIENvbnNv
bGUqIGNvbnNvbGUoKSBjb25zdDsKIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElP
TlMpCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQUExJ
Q0FUSU9OX0NBQ0hFKQogICAgICAgICBET01BcHBsaWNhdGlvbkNhY2hlKiBhcHBsaWNhdGlvbkNh
Y2hlKCkgY29uc3Q7CiAjZW5kaWYKIApAQCAtMzIxLDcgKzMyMSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgU3RvcmFnZSogb3B0aW9uYWxTZXNzaW9uU3RvcmFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2Vzc2lvblN0b3JhZ2UuZ2V0KCk7IH0KICAgICAgICAgU3RvcmFnZSogb3B0aW9u
YWxMb2NhbFN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsU3RvcmFnZS5nZXQoKTsgfQog
I2VuZGlmCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSB8fCBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiAg
ICAgICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIG9wdGlvbmFsQXBwbGljYXRpb25DYWNoZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYXBwbGljYXRpb25DYWNoZS5nZXQoKTsgfQogI2VuZGlmCiAKQEAgLTM1
Niw3ICszNTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIG11dGFibGUgUmVmUHRy
PFN0b3JhZ2U+IG1fc2Vzc2lvblN0b3JhZ2U7CiAgICAgICAgIG11dGFibGUgUmVmUHRyPFN0b3Jh
Z2U+IG1fbG9jYWxTdG9yYWdlOwogI2VuZGlmCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSB8fCBFTkFCTEUo
QVBQTElDQVRJT05fQ0FDSEUpCiAgICAgICAgIG11dGFibGUgUmVmUHRyPERPTUFwcGxpY2F0aW9u
Q2FjaGU+IG1fYXBwbGljYXRpb25DYWNoZTsKICNlbmRpZgogCkluZGV4OiBwYWdlL0RPTVdpbmRv
dy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcGFnZS9ET01XaW5kb3cuaWRsCShyZXZpc2lvbiA0NDE2MykK
KysrIHBhZ2UvRE9NV2luZG93LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBA
IG1vZHVsZSB3aW5kb3cgewogICAgICAgICBXZWJLaXRQb2ludCB3ZWJraXRDb252ZXJ0UG9pbnRG
cm9tUGFnZVRvTm9kZShpbiBOb2RlIG5vZGUsIGluIFdlYktpdFBvaW50IHApOwogICAgICAgICBX
ZWJLaXRQb2ludCB3ZWJraXRDb252ZXJ0UG9pbnRGcm9tTm9kZVRvUGFnZShpbiBOb2RlIG5vZGUs
IGluIFdlYktpdFBvaW50IHApOwogCi0jaWYgZGVmaW5lZChFTkFCTEVfT0ZGTElORV9XRUJfQVBQ
TElDQVRJT05TKSAmJiBFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TCisjaWYgKGRlZmlu
ZWQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgJiYgRU5BQkxFX09GRkxJTkVfV0VC
X0FQUExJQ0FUSU9OUykgfHwgKGRlZmluZWQoRU5BQkxFX0FQUExJQ0FUSU9OX0NBQ0hFKSAmJiBF
TkFCTEVfQVBQTElDQVRJT05fQ0FDSEUpCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01B
cHBsaWNhdGlvbkNhY2hlIGFwcGxpY2F0aW9uQ2FjaGU7CiAjZW5kaWYgICAgCiAjaWYgZGVmaW5l
ZChFTkFCTEVfREFUQUJBU0UpICYmIEVOQUJMRV9EQVRBQkFTRQpJbmRleDogcGFnZS9GcmFtZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDQ0MTYzKQorKysgcGFn
ZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNDgsNiArMTE0OCwxMSBAQCBIVE1MRnJh
bWVPd25lckVsZW1lbnQqIEZyYW1lOjpvd25lckVsZW1lCiAgICAgcmV0dXJuIG1fb3duZXJFbGVt
ZW50OwogfQogCitGcmFtZSogRnJhbWU6OnBhcmVudEZyYW1lKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gcGFyZW50RnJvbU93bmVyRWxlbWVudChvd25lckVsZW1lbnQoKSk7Cit9CisKIFJlbmRlclBh
cnQqIEZyYW1lOjpvd25lclJlbmRlcmVyKCkgY29uc3QKIHsKICAgICBIVE1MRnJhbWVPd25lckVs
ZW1lbnQqIG93bmVyRWxlbWVudCA9IG1fb3duZXJFbGVtZW50OwpJbmRleDogcGFnZS9GcmFtZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHBhZ2UvRnJhbWUuaAkocmV2aXNpb24gNDQxNjMpCisrKyBwYWdlL0Zy
YW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDcgQEAgcHVibGljOgogCiAgICAgUGFn
ZSogcGFnZSgpIGNvbnN0OwogICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50
KCkgY29uc3Q7CisgICAgRnJhbWUqIHBhcmVudEZyYW1lKCkgY29uc3Q7CiAKICAgICB2b2lkIHBh
Z2VEZXN0cm95ZWQoKTsKICAgICB2b2lkIGRpc2Nvbm5lY3RPd25lckVsZW1lbnQoKTsKSW5kZXg6
IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAkocmV2aXNpb24gNDQxNjMp
CisrKyBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Myw2ICs2Myw5IEBAIGF1dG9fcHRyPFJlc291cmNlUmVxdWVzdD4gUmVzb3VyY2VS
ZXF1ZXMKICAgICB9CiAgICAgcmVxdWVzdC0+c2V0SFRUUEJvZHkoZGF0YS0+bV9odHRwQm9keSk7
CiAgICAgcmVxdWVzdC0+c2V0QWxsb3dIVFRQQ29va2llcyhkYXRhLT5tX2FsbG93SFRUUENvb2tp
ZXMpOworI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICByZXF1ZXN0LT5zZXRBcHBs
aWNhdGlvbkNhY2hlQ29udGV4dElEKGRhdGEtPm1fYXBwY2FjaGVDb250ZXh0SUQpOworI2VuZGlm
CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKQEAgLTg0LDYgKzg3LDkgQEAgYXV0b19wdHI8Q3Jv
c3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPgogICAgIGlmIChtX2h0dHBCb2R5KQogICAgICAg
ICBkYXRhLT5tX2h0dHBCb2R5ID0gbV9odHRwQm9keS0+ZGVlcENvcHkoKTsKICAgICBkYXRhLT5t
X2FsbG93SFRUUENvb2tpZXMgPSBtX2FsbG93SFRUUENvb2tpZXM7CisjaWYgRU5BQkxFKEFQUExJ
Q0FUSU9OX0NBQ0hFKQorICAgIGRhdGEtPm1fYXBwY2FjaGVDb250ZXh0SUQgPSBtX2FwcGNhY2hl
Q29udGV4dElEOworI2VuZGlmCiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKSW5kZXg6IHBsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShyZXZpc2lvbiA0NDE2MykKKysrIHBsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw5IEBACiAjaW5jbHVkZSAiRm9ybURhdGEuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVk
ZSAiSFRUUEhlYWRlck1hcC5oIgorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyNpbmNs
dWRlICJBcHBsaWNhdGlvbkNhY2hlQ29tbW9uLmgiCisjZW5kaWYKIAogI2luY2x1ZGUgPG1lbW9y
eT4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC0xMTUsNiArMTE4LDEyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCByZXBvcnRVcGxvYWRQcm9ncmVzcygpIGNvbnN0IHsg
cmV0dXJuIG1fcmVwb3J0VXBsb2FkUHJvZ3Jlc3M7IH0KICAgICAgICAgdm9pZCBzZXRSZXBvcnRV
cGxvYWRQcm9ncmVzcyhib29sIHJlcG9ydFVwbG9hZFByb2dyZXNzKSB7IG1fcmVwb3J0VXBsb2Fk
UHJvZ3Jlc3MgPSByZXBvcnRVcGxvYWRQcm9ncmVzczsgfQogCisjaWYgRU5BQkxFKEFQUExJQ0FU
SU9OX0NBQ0hFKQorICAgICAgICAvLyBBbGxvd3MgdGhlIHJlcXVlc3QgdG8gYmUgbWF0Y2hlZCB1
cCB3aXRoIGl0cyBjYWNoZSBjb250ZXh0LgorICAgICAgICBHbG9iYWxBcHBsaWNhdGlvbkNhY2hl
Q29udGV4dElEIGFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQoKSBjb25zdCB7IHJldHVybiBtX2Fw
cGNhY2hlQ29udGV4dElEOyB9CisgICAgICAgIHZvaWQgc2V0QXBwbGljYXRpb25DYWNoZUNvbnRl
eHRJRChHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEIGlkKSB7IG1fYXBwY2FjaGVDb250
ZXh0SUQgPSBpZDsgfQorI2VuZGlmCisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIC8vIFVzZWQg
d2hlbiBSZXNvdXJjZVJlcXVlc3QgaXMgaW5pdGlhbGl6ZWQgZnJvbSBhIHBsYXRmb3JtIHJlcHJl
c2VudGF0aW9uIG9mIHRoZSByZXF1ZXN0CiAgICAgICAgIFJlc291cmNlUmVxdWVzdEJhc2UoKQpA
QCAtMTUyLDcgKzE2MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgbXV0YWJsZSBi
b29sIG1fcmVzb3VyY2VSZXF1ZXN0VXBkYXRlZDsKICAgICAgICAgbXV0YWJsZSBib29sIG1fcGxh
dGZvcm1SZXF1ZXN0VXBkYXRlZDsKICAgICAgICAgYm9vbCBtX3JlcG9ydFVwbG9hZFByb2dyZXNz
OwotCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgICAgICBHbG9iYWxBcHBsaWNh
dGlvbkNhY2hlQ29udGV4dElEIG1fYXBwY2FjaGVDb250ZXh0SUQ7CisjZW5kaWYKICAgICBwcml2
YXRlOgogICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGFzUmVzb3VyY2VSZXF1ZXN0KCkg
Y29uc3Q7CiAgICAgfTsKQEAgLTE3NCw2ICsxODUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGlu
Z0ZhbGxiYWNrQXJyYXk7CiAgICAgICAgIFJlZlB0cjxGb3JtRGF0YT4gbV9odHRwQm9keTsKICAg
ICAgICAgYm9vbCBtX2FsbG93SFRUUENvb2tpZXM7CisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NB
Q0hFKQorICAgICAgICBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEIG1fYXBwY2FjaGVD
b250ZXh0SUQ7CisjZW5kaWYKICAgICB9OwogICAgIAogICAgIHVuc2lnbmVkIGluaXRpYWxpemVN
YXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsKSW5kZXg6IHBsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCShyZXZpc2lvbiA0NDE2MykKKysrIHBsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2
ICs1NSwxMCBAQCBhdXRvX3B0cjxSZXNvdXJjZVJlc3BvbnNlPiBSZXNvdXJjZVJlc3BvCiAgICAg
cmVzcG9uc2UtPm1faGF2ZVBhcnNlZENhY2hlQ29udHJvbCA9IGRhdGEtPm1faGF2ZVBhcnNlZENh
Y2hlQ29udHJvbDsKICAgICByZXNwb25zZS0+bV9jYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZh
bGlkYXRlID0gZGF0YS0+bV9jYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlOwogICAg
IHJlc3BvbnNlLT5tX2NhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSA9IGRhdGEtPm1fY2FjaGVD
b250cm9sQ29udGFpbnNOb0NhY2hlOworI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAg
ICByZXNwb25zZS0+bV9hcHBjYWNoZUlEID0gZGF0YS0+bV9hcHBjYWNoZUlEOworICAgIHJlc3Bv
bnNlLT5tX21hbmlmZXN0VVJMID0gZGF0YS0+bV9tYW5pZmVzdFVSTDsKKyNlbmRpZgogICAgIHJl
dHVybiByZXNwb25zZTsKIH0KIApAQCAtNzQsNiArNzgsMTAgQEAgYXV0b19wdHI8Q3Jvc3NUaHJl
YWRSZXNvdXJjZVJlc3BvbnNlRGF0YQogICAgIGRhdGEtPm1faGF2ZVBhcnNlZENhY2hlQ29udHJv
bCA9IG1faGF2ZVBhcnNlZENhY2hlQ29udHJvbDsKICAgICBkYXRhLT5tX2NhY2hlQ29udHJvbENv
bnRhaW5zTXVzdFJldmFsaWRhdGUgPSBtX2NhY2hlQ29udHJvbENvbnRhaW5zTXVzdFJldmFsaWRh
dGU7CiAgICAgZGF0YS0+bV9jYWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGUgPSBtX2NhY2hlQ29u
dHJvbENvbnRhaW5zTm9DYWNoZTsKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisgICAg
ZGF0YS0+bV9hcHBjYWNoZUlEID0gbV9hcHBjYWNoZUlEOworICAgIGRhdGEtPm1fbWFuaWZlc3RV
UkwgPSBtX21hbmlmZXN0VVJMOworI2VuZGlmCiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKSW5kZXg6
IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBw
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHJldmlzaW9uIDQ0MTYzKQor
KysgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw5IEBACiAKICNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyNpbmNsdWRlICJBcHBs
aWNhdGlvbkNhY2hlQ29tbW9uLmgiCisjZW5kaWYKIAogI2luY2x1ZGUgPG1lbW9yeT4KIApAQCAt
ODQsNiArODcsMTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGFzdE1vZGlmaWVkRGF0ZSh0aW1l
X3QpOwogICAgIHRpbWVfdCBsYXN0TW9kaWZpZWREYXRlKCkgY29uc3Q7CiAKKyNpZiBFTkFCTEUo
QVBQTElDQVRJT05fQ0FDSEUpCisgICAgdm9pZCBzZXRBcHBsaWNhdGlvbkNhY2hlSUQoQXBwbGlj
YXRpb25DYWNoZUlEIGNhY2hlSUQpIHsgbV9hcHBjYWNoZUlEID0gY2FjaGVJRDsgfQorICAgIEFw
cGxpY2F0aW9uQ2FjaGVJRCBhcHBsaWNhdGlvbkNhY2hlSUQoKSBjb25zdCB7IHJldHVybiBtX2Fw
cGNhY2hlSUQ7IH0KKworICAgIHZvaWQgc2V0TWFuaWZlc3RVUkwoS1VSTCYgbWFuaWZlc3RVUkwp
IHsgbV9tYW5pZmVzdFVSTCA9IG1hbmlmZXN0VVJMOyB9CisgICAgY29uc3QgS1VSTCYgbWFuaWZl
c3RVUkwoKSBjb25zdCB7IHJldHVybiBtX21hbmlmZXN0VVJMOyB9CisjZW5kaWYKKwogICAgIGJv
b2wgY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlm
ICghbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sKQpAQCAtMTEyLDYgKzEyMyw5IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgLCBtX2h0dHBTdGF0dXNDb2RlKDApCiAgICAgICAgICwgbV9leHBpcmF0aW9u
RGF0ZSgwKQogICAgICAgICAsIG1fbGFzdE1vZGlmaWVkRGF0ZSgwKQorI2lmIEVOQUJMRShBUFBM
SUNBVElPTl9DQUNIRSkKKyAgICAgICAgLCBtX2FwcGNhY2hlSUQoTm9BcHBsaWNhdGlvbkNhY2hl
SUQpCisjZW5kaWYKICAgICAgICAgLCBtX2lzTnVsbCh0cnVlKQogICAgICAgICAsIG1faGF2ZVBh
cnNlZENhY2hlQ29udHJvbChmYWxzZSkKICAgICB7CkBAIC0xMjYsNiArMTQwLDkgQEAgcHJvdGVj
dGVkOgogICAgICAgICAsIG1faHR0cFN0YXR1c0NvZGUoMCkKICAgICAgICAgLCBtX2V4cGlyYXRp
b25EYXRlKDApCiAgICAgICAgICwgbV9sYXN0TW9kaWZpZWREYXRlKDApCisjaWYgRU5BQkxFKEFQ
UExJQ0FUSU9OX0NBQ0hFKQorICAgICAgICAsIG1fYXBwY2FjaGVJRChOb0FwcGxpY2F0aW9uQ2Fj
aGVJRCkKKyNlbmRpZgogICAgICAgICAsIG1faXNOdWxsKGZhbHNlKQogICAgICAgICAsIG1faGF2
ZVBhcnNlZENhY2hlQ29udHJvbChmYWxzZSkKICAgICB7CkBAIC0xNDksNiArMTY2LDEwIEBAIHBy
b3RlY3RlZDoKICAgICBIVFRQSGVhZGVyTWFwIG1faHR0cEhlYWRlckZpZWxkczsKICAgICB0aW1l
X3QgbV9leHBpcmF0aW9uRGF0ZTsKICAgICB0aW1lX3QgbV9sYXN0TW9kaWZpZWREYXRlOworI2lm
IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICBLVVJMIG1fbWFuaWZlc3RVUkw7CisgICAg
QXBwbGljYXRpb25DYWNoZUlEIG1fYXBwY2FjaGVJRDsKKyNlbmRpZgogICAgIGJvb2wgbV9pc051
bGwgOiAxOwogCiBwcml2YXRlOgpAQCAtMTczLDYgKzE5NCwxMCBAQCBzdHJ1Y3QgQ3Jvc3NUaHJl
YWRSZXNvdXJjZVJlc3BvbnNlRGF0YSB7CiAgICAgT3duUHRyPENyb3NzVGhyZWFkSFRUUEhlYWRl
ck1hcERhdGE+IG1faHR0cEhlYWRlcnM7CiAgICAgdGltZV90IG1fZXhwaXJhdGlvbkRhdGU7CiAg
ICAgdGltZV90IG1fbGFzdE1vZGlmaWVkRGF0ZTsKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FD
SEUpCisgICAgQXBwbGljYXRpb25DYWNoZUlEIG1fYXBwY2FjaGVJRDsKKyAgICBLVVJMIG1fbWFu
aWZlc3RVUkw7CisjZW5kaWYKICAgICBib29sIG1faGF2ZVBhcnNlZENhY2hlQ29udHJvbCA6IDE7
CiAgICAgYm9vbCBtX2NhY2hlQ29udHJvbENvbnRhaW5zTXVzdFJldmFsaWRhdGUgOiAxOwogICAg
IGJvb2wgbV9jYWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGUgOiAxOwpJbmRleDogcGxhdGZvcm0v
bmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9y
bS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVxdWVzdC5oCShyZXZpc2lvbiA0NDE2MykKKysr
IHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXF1ZXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDcgKzQ5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgOiBS
ZXNvdXJjZVJlcXVlc3RCYXNlKEtVUkwodXJsKSwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKICAg
ICAgICAgICAgICwgbV9yZXF1ZXN0b3JJRCgwKQogICAgICAgICAgICAgLCBtX3JlcXVlc3RvclBy
b2Nlc3NJRCgwKQotICAgICAgICAgICAgLCBtX2FwcENhY2hlQ29udGV4dElEKDApCiAgICAgICAg
ICAgICAsIG1fdGFyZ2V0VHlwZShUYXJnZXRJc1N1YlJlc291cmNlKQogICAgICAgICB7CiAgICAg
ICAgIH0KQEAgLTU4LDcgKzU3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAg
OiBSZXNvdXJjZVJlcXVlc3RCYXNlKHVybCwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKICAgICAg
ICAgICAgICwgbV9yZXF1ZXN0b3JJRCgwKQogICAgICAgICAgICAgLCBtX3JlcXVlc3RvclByb2Nl
c3NJRCgwKQotICAgICAgICAgICAgLCBtX2FwcENhY2hlQ29udGV4dElEKDApCiAgICAgICAgICAg
ICAsIG1fdGFyZ2V0VHlwZShUYXJnZXRJc1N1YlJlc291cmNlKQogICAgICAgICAgICAgLCBtX3Nl
Y3VyaXR5SW5mbyhzZWN1cml0eUluZm8pCiAgICAgICAgIHsKQEAgLTY4LDcgKzY2LDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHVybCwg
VXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKICAgICAgICAgICAgICwgbV9yZXF1ZXN0b3JJRCgwKQog
ICAgICAgICAgICAgLCBtX3JlcXVlc3RvclByb2Nlc3NJRCgwKQotICAgICAgICAgICAgLCBtX2Fw
cENhY2hlQ29udGV4dElEKDApCiAgICAgICAgICAgICAsIG1fdGFyZ2V0VHlwZShUYXJnZXRJc1N1
YlJlc291cmNlKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTc3LDcgKzc0LDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHVybCwgcG9s
aWN5KQogICAgICAgICAgICAgLCBtX3JlcXVlc3RvcklEKDApCiAgICAgICAgICAgICAsIG1fcmVx
dWVzdG9yUHJvY2Vzc0lEKDApCi0gICAgICAgICAgICAsIG1fYXBwQ2FjaGVDb250ZXh0SUQoMCkK
ICAgICAgICAgICAgICwgbV90YXJnZXRUeXBlKFRhcmdldElzU3ViUmVzb3VyY2UpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHNldEhUVFBSZWZlcnJlcihyZWZlcnJlcik7CkBAIC04Nyw3ICs4Myw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFz
ZShLVVJMKCksIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCiAgICAgICAgICAgICAsIG1fcmVxdWVz
dG9ySUQoMCkKICAgICAgICAgICAgICwgbV9yZXF1ZXN0b3JQcm9jZXNzSUQoMCkKLSAgICAgICAg
ICAgICwgbV9hcHBDYWNoZUNvbnRleHRJRCgwKQogICAgICAgICAgICAgLCBtX3RhcmdldFR5cGUo
VGFyZ2V0SXNTdWJSZXNvdXJjZSkKICAgICAgICAgewogICAgICAgICB9CkBAIC0xMDcsMTAgKzEw
Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IHJlcXVlc3RvclByb2Nlc3NJ
RCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdG9yUHJvY2Vzc0lEOyB9CiAgICAgICAgIHZvaWQg
c2V0UmVxdWVzdG9yUHJvY2Vzc0lEKGludCByZXF1ZXN0b3JQcm9jZXNzSUQpIHsgbV9yZXF1ZXN0
b3JQcm9jZXNzSUQgPSByZXF1ZXN0b3JQcm9jZXNzSUQ7IH0KIAotICAgICAgICAvLyBBbGxvd3Mg
dGhlIHJlcXVlc3QgdG8gYmUgbWF0Y2hlZCB1cCB3aXRoIGl0cyBhcHAgY2FjaGUgY29udGV4dC4K
LSAgICAgICAgaW50IGFwcENhY2hlQ29udGV4dElEKCkgY29uc3QgeyByZXR1cm4gbV9hcHBDYWNo
ZUNvbnRleHRJRDsgfQotICAgICAgICB2b2lkIHNldEFwcENhY2hlQ29udGV4dElEKGludCBpZCkg
eyBtX2FwcENhY2hlQ29udGV4dElEID0gaWQ7IH0KLQogICAgICAgICAvLyBPcGFxdWUgYnVmZmVy
IHRoYXQgZGVzY3JpYmVzIHRoZSBzZWN1cml0eSBzdGF0ZSAoaW5jbHVkaW5nIFNTTAogICAgICAg
ICAvLyBjb25uZWN0aW9uIHN0YXRlKSBmb3IgdGhlIHJlc291cmNlIHRoYXQgc2hvdWxkIGJlIHJl
cG9ydGVkIHdoZW4gdGhlCiAgICAgICAgIC8vIHJlc291cmNlIGhhcyBiZWVuIGxvYWRlZC4gIFRo
aXMgaXMgdXNlZCB0byBzaW11bGF0ZSBzZWN1cmUKQEAgLTEyOCw3ICsxMTksNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgaW50IG1fcmVxdWVzdG9ySUQ7CiAgICAgICAgIGludCBt
X3JlcXVlc3RvclByb2Nlc3NJRDsKLSAgICAgICAgaW50IG1fYXBwQ2FjaGVDb250ZXh0SUQ7CiAg
ICAgICAgIFRhcmdldFR5cGUgbV90YXJnZXRUeXBlOwogICAgICAgICBDU3RyaW5nIG1fc2VjdXJp
dHlJbmZvOwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30715</attachid>
            <date>2009-05-27 13:26:17 -0700</date>
            <delta_ts>2009-05-28 12:45:23 -0700</delta_ts>
            <desc>ApplicationCacheFrontend interface and usage</desc>
            <filename>appcache1.diff</filename>
            <type>text/plain</type>
            <size>81649</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ0MTk3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDktMDUt
MjcgIE1pY2hhZWwgTm9yZG1hbiAgPG1pY2hhZWxuQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI1NDM2CisgICAgICAgIFJlZmFjdG9yIGFwcENhY2hlIGZvciB1
c2UgaW4gbXVsdGktcHJvY2VzcyBicm93c2VycworCisgICAgICAgIDEpIFRoaXMgaW5pdGlhbCBw
YXRjaCBpcyBtb3N0bHkgYWJvdXQgYWxsb3dpbmcgZGV2ZWxvcG1lbnQgb2YgYSBuZXcgYXBwY2Fj
aGUgc3lzdGVtCisgICAgICAgIHdpdGhvdXQgZGlzcnVwdGluZyB0aGUgZXhpc3Rpbmcgc3lzdGVt
LiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEVOQUJMRSBmbGFnIGZvciB0aGUKKyAgICAgICAgbmV3IHN5
c3RlbSwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKSwgd2hpbGUgbGVhdmluZyB0aGUgZmxhZyBm
b3IgdGhlIGV4aXN0aW5nCisgICAgICAgIHN5c3RlbSBpbiBwbGFjZSwgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykuIFRoZXJlIGlzIHNvbWUgb3ZlcmxhcCBiZXR3ZWVuCisgICAgICAg
IHRoZSB0d28gbW9zdGx5IGFyb3VuZCB0aGUgd2luZG93LmFwcGxpY2F0aW9uQ2FjaGUgYXR0cmli
dXRlLgorCisgICAgICAgIDIpIEFsc28gZGVmaW5lcyBhbiBpbnRlcmZhY2UgdG8gdGhlIG5ldyBz
eXN0ZW0gZm9yIHVzZSBpbiB0aGUgZnJvbnRlbmQsIGNsYXNzCisgICAgICAgIEFwcGxpY2F0aW9u
Q2FjaGVGcm9udGVuZC4gVGhlIGludGVyZmFjZSBpcyBiZWluZyB1c2VkIGJ5IEZyYW1lTG9hZGVy
IGFuZAorICAgICAgICBET01BcHBsaWNhdGlvbkNhY2hlIGFuZCBIVE1MSHRtbEVsZW1lbnQuIFRo
ZXJlIGlzIG9ubHkgYSBzdHViIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIHRoaXMgaW50ZXJm
YWNlIGF0IHRoaXMgdGltZSB0aGF0IGRvZXMgbm8gaGFybS4KKworICAgICAgICAzKSBBbHNvIHdp
ZGVucyB0aGUgUmVzb3VyY2VSZXF1ZXN0QmFzZSBhbmQgUmVzb3VyY2VSZXNwb25zZUJhc2UgZGF0
YSBzdHJ1Y3R1cmVzCisgICAgICAgIHdpdGggYWRkaXRpb25hbCBkYXRhIG1lbWJlcnMgdG8gcHJv
dmlkZSBhZGRpdGlvbmFsIGlucHV0cyAoYW5kIG91dHB1dHMpIHRvCisgICAgICAgIChmcm9tKSB0
aGUgYmFja2VuZCB3aGVuIGxvYWRpbmcgYSBSZXNvdXJjZUhhbmRsZS4KKworICAgICAgICA0KSBS
ZXF1aXNpdGUgY3VzdG9tIFY4QmluZGluZ3MgZm9yIHRoZSBET01BcHBsaWNhdGlvbkNhY2hlIGlu
dGVyZmFjZS4gTW9zdCBvZgorICAgICAgICB0aGUgYmluZGluZ3Mgd29yayBpc24ndCBkZXN0aW5l
ZCBmb3IgdGhlIHdlYmtpdCByZXBvc2l0b3J5IGp1c3QgeWV0LCB0aGF0IHN0dWZmCisgICAgICAg
IGlzIHN0aWxsIGJlaW5nIG1pZ3JhdGVkIG92ZXIgaW4gZ2VuZXJhbC4KKworICAgICAgICA1KSBD
aGFuZ2VzIHRvIHRoZSBKU0JpbmRpbmdzIGZvciB0aGUgRE9NQXBwbGljYXRpb25DYWNoZSBpbnRl
cmZhY2UgdG8gYmluZCB0bworICAgICAgICB0aGUgbmV3IG9yIGV4aXN0aW5nIHN5c3RlbSBiYXNl
ZCBvbiB3aGljaCBFTkFCTEUgZmxhZyBpcyBzZXQuCisgICAgICAgIAorICAgICAgICBObyB0ZXN0
cyB5ZXQsIG5vdCBmdW5jdGlvbmFsIHlldC4KKwogMjAwOS0wNS0yNyAgRGF2aWQgTGV2aW4gIDxs
ZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0YWNob3dp
YWsuCkluZGV4OiBiaW5kaW5ncy9qcy9KU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL0pTRE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDQ0MTYzKQorKysgYmluZGluZ3MvanMvSlNET01BcHBsaWNhdGlvbkNhY2hlQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkpTRE9NQXBwbGljYXRpb25DYWNoZS5oIgogCi0jaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TKSB8fCBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiAKICNpbmNsdWRlICJBdG9taWNTdHJp
bmcuaCIKICNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hlLmgiCkBAIC02NCw3ICs2NCw3IEBA
IHZvaWQgSlNET01BcHBsaWNhdGlvbkNhY2hlOjptYXJrKCkKICAgICB9CiB9CiAKLSNpZiBFTkFC
TEUoQVBQTElDQVRJT05fQ0FDSEVfRFlOQU1JQ19FTlRSSUVTKQorI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpICYmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRV9EWU5BTUlDX0VO
VFJJRVMpCiAKIEpTVmFsdWUgSlNET01BcHBsaWNhdGlvbkNhY2hlOjpoYXNJdGVtKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKQEAgLTEwNSw3ICsxMDUsNyBAQCBKU1Zh
bHVlIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlKEV4CiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLSNlbmRpZiAvLyBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEVfRFlOQU1JQ19F
TlRSSUVTKQorI2VuZGlmIC8vIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICYmIEVO
QUJMRShBUFBMSUNBVElPTl9DQUNIRV9EWU5BTUlDX0VOVFJJRVMpCiAKIEpTVmFsdWUgSlNET01B
cHBsaWNhdGlvbkNhY2hlOjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKQEAgLTEzMyw0ICsxMzMsNCBAQCBKU1ZhbHVlIEpTRE9NQXBwbGlj
YXRpb25DYWNoZTo6cmVtb3ZlRXZlCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjZW5kaWYgLy8gRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQpJbmRl
eDogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRp
bmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNDQxNjMpCisrKyBiaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcg
QEAgdm9pZCBKU0RPTVdpbmRvdzo6bWFyaygpCiAgICAgbWFya0RPTU9iamVjdFdyYXBwZXIoZ2xv
YmFsRGF0YSwgaW1wbCgpLT5vcHRpb25hbFNlc3Npb25TdG9yYWdlKCkpOwogICAgIG1hcmtET01P
YmplY3RXcmFwcGVyKGdsb2JhbERhdGEsIGltcGwoKS0+b3B0aW9uYWxMb2NhbFN0b3JhZ2UoKSk7
CiAjZW5kaWYKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpIHx8IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkK
ICAgICBtYXJrRE9NT2JqZWN0V3JhcHBlcihnbG9iYWxEYXRhLCBpbXBsKCktPm9wdGlvbmFsQXBw
bGljYXRpb25DYWNoZSgpKTsKICNlbmRpZgogfQpJbmRleDogYmluZGluZ3MvanMvSlNFdmVudFRh
cmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAJKHJl
dmlzaW9uIDQ0MTYzKQorKysgYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgogI2lu
Y2x1ZGUgIlhNTEh0dHBSZXF1ZXN0VXBsb2FkLmgiCiAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJf
QVBQTElDQVRJT05TKQorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpIHx8IEVO
QUJMRShBUFBMSUNBVElPTl9DQUNIRSkKICNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hlLmgi
CiAjaW5jbHVkZSAiSlNET01BcHBsaWNhdGlvbkNhY2hlLmgiCiAjZW5kaWYKQEAgLTg0LDcgKzg0
LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgRXZlbnRUYXJnZQogICAgIGlmIChY
TUxIdHRwUmVxdWVzdFVwbG9hZCogdXBsb2FkID0gdGFyZ2V0LT50b1hNTEh0dHBSZXF1ZXN0VXBs
b2FkKCkpCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHVwbG9hZCk7CiAKLSNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNB
VElPTlMpIHx8IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKICAgICBpZiAoRE9NQXBwbGljYXRp
b25DYWNoZSogY2FjaGUgPSB0YXJnZXQtPnRvRE9NQXBwbGljYXRpb25DYWNoZSgpKQogICAgICAg
ICAvLyBET01BcHBsaWNhdGlvbkNhY2hlIGlzIGFsd2F5cyBjcmVhdGVkIHZpYSBKUywgc28gd2Ug
ZG9uJ3QgbmVlZCB0byB1c2UgY2FjaGVET01PYmplY3QoKSBoZXJlLgogICAgICAgICByZXR1cm4g
Z2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihleGVjLT5nbG9iYWxEYXRhKCksIGNhY2hlKTsKQEAg
LTExOSw3ICsxMTksNyBAQCBFdmVudFRhcmdldCogdG9FdmVudFRhcmdldChKU0M6OkpTVmFsdWUg
CiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCZKU0RPTVdpbmRvd1NoZWxsOjpzX2luZm8pKQogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KGFzT2JqZWN0KHZhbHVl
KSktPmltcGwoKTsKIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaWYg
RU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NB
Q0hFKQogICAgIENPTlZFUlRfVE9fRVZFTlRfVEFSR0VUKERPTUFwcGxpY2F0aW9uQ2FjaGUpCiAj
ZW5kaWYKIApJbmRleDogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NQXBwbGljYXRpb25DYWNoZUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NQXBwbGljYXRp
b25DYWNoZUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBiaW5kaW5ncy92OC9jdXN0b20vVjhE
T01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRE9NQXBwbGljYXRpb25DYWNo
ZS5oIgorCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorCisjaW5jbHVkZSAiVjhCaW5k
aW5nLmgiCisjaW5jbHVkZSAiVjhEb2N1bWVudC5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGlu
Zy5oIgorI2luY2x1ZGUgIlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlY4UHJv
eHkuaCIKKyNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBi
b29sIGtGaW5kT25seSA9IHRydWU7CitzdGF0aWMgY29uc3QgYm9vbCBrRmluZE9yQ3JlYXRlID0g
ZmFsc2U7CisKK3N0YXRpYyBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGFyZ3VtZW50VG9FdmVu
dExpc3RlbmVyKERPTUFwcGxpY2F0aW9uQ2FjaGUqIGFwcGNhY2hlLCB2ODo6TG9jYWw8djg6OlZh
bHVlPiB2YWx1ZSwgYm9vbCBmaW5kT25seSkKK3sKKyNpZiAwICYmIEVOQUJMRShXT1JLRVJTKQor
ICAgIC8vIEZJWE1FOiB0aGlzIGlzIG5vdCB0ZXN0ZWQgeWV0CisgICAgV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5KiB3b3JrZXJDb250ZXh0UHJveHkgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHk6OnJldHJpZXZlKCk7CisgICAgaWYgKHdvcmtlckNvbnRleHRQcm94eSkKKyAgICAgICAg
cmV0dXJuIHdvcmtlckNvbnRleHRQcm94eS0+ZmluZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5l
cih2YWx1ZSwgZmFsc2UsIGZpbmRPbmx5KTsKKyNlbmRpZgorCisgICAgVjhQcm94eSogcHJveHkg
PSBWOFByb3h5OjpyZXRyaWV2ZShhcHBjYWNoZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
KyAgICBpZiAocHJveHkpCisgICAgICAgIHJldHVybiBmaW5kT25seSA/IHByb3h5LT5GaW5kT2Jq
ZWN0RXZlbnRMaXN0ZW5lcih2YWx1ZSwgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICA6
IHByb3h5LT5GaW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKHZhbHVlLCBmYWxzZSk7CisK
KyAgICByZXR1cm4gUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPigpOworfQorCitzdGF0aWMgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IGV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KEV2ZW50TGlzdGVuZXIq
IGxpc3RlbmVyKQoreworICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3Rl
bmVyKj4obGlzdGVuZXIpKS0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKK30KKworc3RhdGljIGlubGlu
ZSBTdHJpbmcgdG9FdmVudFR5cGUodjg6OkxvY2FsPHY4OjpTdHJpbmc+IHZhbHVlKQoreworICAg
IFN0cmluZyBrZXkgPSB0b1dlYkNvcmVTdHJpbmcodmFsdWUpOworICAgIEFTU0VSVChrZXkuc3Rh
cnRzV2l0aCgib24iKSk7CisgICAgcmV0dXJuIGtleS5zdWJzdHJpbmcoMik7Cit9CisKKy8vIEhh
bmRsZXMgYXBwY2FjaGUub25mb29ldmVudCBhdHRyaWJ1dGUgZ2V0dGluZworQUNDRVNTT1JfR0VU
VEVSKERPTUFwcGxpY2F0aW9uQ2FjaGVFdmVudEhhbmRsZXIpCit7CisgICAgSU5DX1NUQVRTKCJE
T01BcHBsaWNhdGlvbkNhY2hlLm9uZXZlbnRfZ2V0dGVyIik7CisgICAgRE9NQXBwbGljYXRpb25D
YWNoZSogYXBwY2FjaGUgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxET01BcHBsaWNhdGlvbkNh
Y2hlPihWOENsYXNzSW5kZXg6OkRPTUFQUExJQ0FUSU9OQ0FDSEUsIGluZm8uSG9sZGVyKCkpOwor
ICAgIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gYXBwY2FjaGUtPmdldEF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIodG9FdmVudFR5cGUobmFtZSkpOworICAgIHJldHVybiBldmVudExpc3RlbmVyVG9W
OE9iamVjdChsaXN0ZW5lcik7Cit9CisKKy8vIEhhbmRsZXMgYXBwY2FjaGUub25mb29ldmVudCBh
dHRyaWJ1dGUgc2V0dGluZworQUNDRVNTT1JfU0VUVEVSKERPTUFwcGxpY2F0aW9uQ2FjaGVFdmVu
dEhhbmRsZXIpCit7CisgICAgSU5DX1NUQVRTKCJET01BcHBsaWNhdGlvbkNhY2hlLm9uZXZlbnRf
c2V0dGVyIik7CisgICAgRE9NQXBwbGljYXRpb25DYWNoZSogYXBwY2FjaGUgPSBWOFByb3h5OjpU
b05hdGl2ZU9iamVjdDxET01BcHBsaWNhdGlvbkNhY2hlPihWOENsYXNzSW5kZXg6OkRPTUFQUExJ
Q0FUSU9OQ0FDSEUsIGluZm8uSG9sZGVyKCkpOworICAgIFN0cmluZyBldmVudFR5cGUgPSB0b0V2
ZW50VHlwZShuYW1lKTsKKworICAgIGlmIChFdmVudExpc3RlbmVyKiBvbGRMaXN0ZW5lciA9IGFw
cGNhY2hlLT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSkpIHsKKyAgICAgICAg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IGV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KG9s
ZExpc3RlbmVyKTsKKyAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigp
LCBvYmplY3QsIFY4Q3VzdG9tOjprRE9NQXBwbGljYXRpb25DYWNoZUNhY2hlSW5kZXgpOworICAg
ICAgICBhcHBjYWNoZS0+Y2xlYXJBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSk7Cisg
ICAgfQorCisgICAgaWYgKHZhbHVlLT5Jc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IG5ld0xpc3RlbmVyID0gYXJndW1lbnRUb0V2ZW50TGlzdGVuZXIoYXBwY2Fj
aGUsIHZhbHVlLCBrRmluZE9yQ3JlYXRlKTsKKyAgICAgICAgaWYgKG5ld0xpc3RlbmVyKSB7Cisg
ICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBW
OEN1c3RvbTo6a0RPTUFwcGxpY2F0aW9uQ2FjaGVDYWNoZUluZGV4KTsKKyAgICAgICAgICAgIGFw
cGNhY2hlLT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbmV3TGlzdGVuZXIp
OworICAgICAgICB9CisgICAgfQorfQorCisvLyBIYW5kbGVzIGFwcGNhY2hlLmFkZEV2ZW50TGlz
dG5lcihuYW1lLCBmdW5jLCBjYXB0dXJlKSBtZXRob2QgY2FsbHMKK0NBTExCQUNLX0ZVTkNfREVD
TChET01BcHBsaWNhdGlvbkNhY2hlQWRkRXZlbnRMaXN0ZW5lcikKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTUFwcGxpY2F0aW9uQ2FjaGUuYWRkRXZlbnRMaXN0ZW5lcigpIik7CisgICAgRE9NQXBwbGlj
YXRpb25DYWNoZSogYXBwY2FjaGUgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxET01BcHBsaWNh
dGlvbkNhY2hlPihWOENsYXNzSW5kZXg6OkRPTUFQUExJQ0FUSU9OQ0FDSEUsIGFyZ3MuSG9sZGVy
KCkpOworCisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gYXJndW1lbnRUb0V2
ZW50TGlzdGVuZXIoYXBwY2FjaGUsIGFyZ3NbMV0sIGtGaW5kT3JDcmVhdGUpOworICAgIGlmIChs
aXN0ZW5lcikgeworICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCks
IGFyZ3NbMV0sIFY4Q3VzdG9tOjprRE9NQXBwbGljYXRpb25DYWNoZUNhY2hlSW5kZXgpOworICAg
ICAgICBTdHJpbmcgZXZlbnRUeXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOworICAgICAg
ICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKKyAgICAgICAgYXBw
Y2FjaGUtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7
CisgICAgfQorICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKKy8vIEhhbmRsZXMgYXBw
Y2FjaGUucmVtb3ZlRXZlbnRMaXN0bmVyKG5hbWUsIGZ1bmMsIGNhcHR1cmUpIG1ldGhvZCBjYWxs
cworQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTUFwcGxpY2F0aW9uQ2FjaGVSZW1vdmVFdmVudExpc3Rl
bmVyKQoreworICAgIElOQ19TVEFUUygiRE9NQXBwbGljYXRpb25DYWNoZS5yZW1vdmVFdmVudExp
c3RlbmVyKCkiKTsKKyAgICBET01BcHBsaWNhdGlvbkNhY2hlKiBhcHBjYWNoZSA9IFY4UHJveHk6
OlRvTmF0aXZlT2JqZWN0PERPTUFwcGxpY2F0aW9uQ2FjaGU+KFY4Q2xhc3NJbmRleDo6RE9NQVBQ
TElDQVRJT05DQUNIRSwgYXJncy5Ib2xkZXIoKSk7CisKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gbGlzdGVuZXIgPSBhcmd1bWVudFRvRXZlbnRMaXN0ZW5lcihhcHBjYWNoZSwgYXJnc1sxXSwg
a0ZpbmRPbmx5KTsKKyAgICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAgcmVtb3ZlSGlkZGVuRGVw
ZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOEN1c3RvbTo6a0RPTUFwcGxpY2F0aW9u
Q2FjaGVDYWNoZUluZGV4KTsKKyAgICAgICAgU3RyaW5nIGV2ZW50VHlwZSA9IHRvV2ViQ29yZVN0
cmluZyhhcmdzWzBdKTsKKyAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVh
blZhbHVlKCk7CisgICAgICAgIGFwcGNhY2hlLT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlw
ZSwgbGlzdGVuZXIuZ2V0KCksIHVzZUNhcHR1cmUpOworICAgIH0KKyAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gRU5B
QkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4RE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogZG9tL0V2ZW50VGFyZ2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBkb20vRXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiA0NDE2MykKKysrIGRvbS9FdmVu
dFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgWE1MSHR0cFJlcXVl
c3RVcGxvYWQqIEV2ZW50VGFyZ2V0Ojp0b1hNTAogICAgIHJldHVybiAwOwogfQogCi0jaWYgRU5B
QkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQ
TElDQVRJT05TKSB8fCBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiBET01BcHBsaWNhdGlvbkNh
Y2hlKiBFdmVudFRhcmdldDo6dG9ET01BcHBsaWNhdGlvbkNhY2hlKCkKIHsKICAgICByZXR1cm4g
MDsKSW5kZXg6IGRvbS9FdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9FdmVudFRhcmdl
dC5oCShyZXZpc2lvbiA0NDE2MykKKysrIGRvbS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBE
T01XaW5kb3cqIHRvRE9NV2luZG93KCk7CiAgICAgICAgIHZpcnR1YWwgWE1MSHR0cFJlcXVlc3Qq
IHRvWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICAgdmlydHVhbCBYTUxIdHRwUmVxdWVzdFVwbG9h
ZCogdG9YTUxIdHRwUmVxdWVzdFVwbG9hZCgpOwotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBM
SUNBVElPTlMpCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxF
KEFQUExJQ0FUSU9OX0NBQ0hFKQogICAgICAgICB2aXJ0dWFsIERPTUFwcGxpY2F0aW9uQ2FjaGUq
IHRvRE9NQXBwbGljYXRpb25DYWNoZSgpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNWRykKSW5kZXg6
IGh0bWwvSFRNTEh0bWxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxIdG1sRWxl
bWVudC5jcHAJKHJldmlzaW9uIDQ0MTYzKQorKysgaHRtbC9IVE1MSHRtbEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMywxNCArMjMsNDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVH
cm91cC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAK
KyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSAmJiBFTkFCTEUoQVBQTElDQVRJ
T05fQ0FDSEUpCisjZXJyb3IgQVBQTElDQVRJT05fQ0FDSEUgYW5kIE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIGZsYWdzCisjZW5kaWYKKworI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUdy
b3VwLmgiCisjZWxpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAorI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpIHx8IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKworc3RhdGljIHZv
aWQgc2VsZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3QoRnJhbWUqIGZyYW1lKQoreworI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpz
ZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdFVSTChmcmFtZSk7CisjZWxpZiBFTkFCTEUoQVBQTElD
QVRJT05fQ0FDSEUpCisgICAgZnJhbWUtPmxvYWRlcigpLT5zZWxlY3RBcHBsaWNhdGlvbkNhY2hl
V2l0aG91dE1hbmlmZXN0KCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc2VsZWN0Q2FjaGVX
aXRoTWFuaWZlc3QoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiBtYW5pZmVzdFVSTCkKK3sKKyNp
ZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cDo6c2VsZWN0Q2FjaGUoZnJhbWUsIG1hbmlmZXN0VVJMKTsKKyNlbGlmIEVOQUJMRShBUFBM
SUNBVElPTl9DQUNIRSkKKyAgICBmcmFtZS0+bG9hZGVyKCktPnNlbGVjdEFwcGxpY2F0aW9uQ2Fj
aGVXaXRoTWFuaWZlc3QobWFuaWZlc3RVUkwpOworI2VuZGlmCit9CisKKyNlbmRpZiAgLy8gRU5B
QkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hF
KQorCiBIVE1MSHRtbEVsZW1lbnQ6OkhUTUxIdG1sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9j
KQogewpAQCAtNTcsNyArODksNyBAQCBib29sIEhUTUxIdG1sRWxlbWVudDo6Y2hlY2tEVEQoY29u
c3QgTm9kCiAgICAgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKGZyYW1lc2V0VGFnKSB8fCBu
ZXdDaGlsZC0+aGFzVGFnTmFtZShub2ZyYW1lc1RhZyk7CiB9CiAKLSNpZiBFTkFCTEUoT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKQorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMp
IHx8IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKIHZvaWQgSFRNTEh0bWxFbGVtZW50OjppbnNl
cnRlZEludG9Eb2N1bWVudCgpCiB7CiAgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW50KCk7CkBAIC03MCwxMCArMTAyLDEwIEBAIHZvaWQgSFRNTEh0bWxFbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWUKIAogICAgIC8vIENoZWNrIHRoZSBtYW5pZmVzdCBhdHRyaWJ1dGUKICAgICBB
dG9taWNTdHJpbmcgbWFuaWZlc3QgPSBnZXRBdHRyaWJ1dGUobWFuaWZlc3RBdHRyKTsKLSAgICBp
ZiAobWFuaWZlc3QuaXNOdWxsKCkpCi0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c2Vs
ZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3RVUkwoZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CisgICAgaWYg
KG1hbmlmZXN0LmlzTnVsbCgpIHx8IG1hbmlmZXN0LmlzRW1wdHkoKSkKKyAgICAgICAgc2VsZWN0
Q2FjaGVXaXRob3V0TWFuaWZlc3QoZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CiAgICAgZWxzZQotICAg
ICAgICBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OnNlbGVjdENhY2hlKGRvY3VtZW50KCktPmZyYW1l
KCksIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKG1hbmlmZXN0KSk7CisgICAgICAgIHNlbGVjdENh
Y2hlV2l0aE1hbmlmZXN0KGRvY3VtZW50KCktPmZyYW1lKCksIGRvY3VtZW50KCktPmNvbXBsZXRl
VVJMKG1hbmlmZXN0KSk7CiB9CiAjZW5kaWYKIApJbmRleDogaHRtbC9IVE1MSHRtbEVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxIdG1sRWxlbWVudC5oCShyZXZpc2lvbiA0NDE2MykK
KysrIGh0bWwvSFRNTEh0bWxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4g
MTE7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpOwog
Ci0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKSB8fCBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiAgICAgdmly
dHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAjZW5kaWYKIApJbmRleDogbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShy
ZXZpc2lvbiA0NDE2MykKKysrIGxvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk4LDYgKzk4LDEwIEBACiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgi
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyNpbmNsdWRlICJBcHBs
aWNhdGlvbkNhY2hlRnJvbnRlbmQuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNWRykKICNpbmNs
dWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR0xvY2F0YWJsZS5oIgpAQCAtMzAyLDYg
KzMwNiw5IEBAIEZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcihGcmFtZSogZnJhbWUsIEYKICNpZiBF
TkFCTEUoV01MKQogICAgICwgbV9mb3JjZVJlbG9hZFdtbERlY2soZmFsc2UpCiAjZW5kaWYKKyNp
ZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisgICAgLCBtX2FwcGNhY2hlRnJvbnRlbmQobmV3
IEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCgpKQorI2VuZGlmCiB7CiB9CiAKQEAgLTMzMSw2ICsz
MzgsMTYgQEAgdm9pZCBGcmFtZUxvYWRlcjo6aW5pdCgpCiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+Y2FuY2VsUGFyc2luZygpOwogICAgIG1fY3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCA9
IGZhbHNlOwogICAgIG1fZGlkQ2FsbEltcGxpY2l0Q2xvc2UgPSB0cnVlOworCisjaWYgRU5BQkxF
KEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgIEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0VHlwZSBjb250
ZXh0VHlwZSA9IE1haW5GcmFtZUNvbnRleHQ7CisgICAgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNv
bnRleHRJRCBwYXJlbnRDb250ZXhJRCA9IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQ6
Om5vbmUoKTsKKyAgICBpZiAoRnJhbWUqIHBhcmVudEZyYW1lID0gbV9mcmFtZS0+cGFyZW50RnJh
bWUoKSkgeworICAgICAgICBjb250ZXh0VHlwZSA9IFN1YkZyYW1lQ29udGV4dDsKKyAgICAgICAg
cGFyZW50Q29udGV4SUQgPSBwYXJlbnRGcmFtZS0+bG9hZGVyKCktPmFwcGNhY2hlRnJvbnRlbmQo
KS0+Y29udGV4dElEKCk7CisgICAgfQorICAgIGFwcGNhY2hlRnJvbnRlbmQoKS0+aW5pdGlhbGl6
ZShjb250ZXh0VHlwZSwgcGFyZW50Q29udGV4SUQpOworI2VuZGlmCiB9CiAKIHZvaWQgRnJhbWVM
b2FkZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCkBAIC0xODQ0LDYgKzE4NjEsMTEg
QEAgYm9vbCBGcmFtZUxvYWRlcjo6Y2FuQ2FjaGVQYWdlQ29udGFpbmluZwogICAgICAgICAmJiAh
bV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZSgpCiAgICAgICAgICYmICFtX2RvY3Vt
ZW50TG9hZGVyLT5jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoKQogI2VuZGlmCisjaWYg
RU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGlu
dmVzdGlnYXRpbmcgY2FjaGluZyBmcmFtZXMgdGhhdCBoYXZlIGFuIGFzc29jaWF0ZWQKKyAgICAg
ICAgLy8gYXBwbGljYXRpb24gY2FjaGUuIDxyZGFyOi8vcHJvYmxlbS81OTE3ODk5PiB0cmFja3Mg
dGhhdCB3b3JrLgorICAgICAgICAmJiBhcHBjYWNoZUZyb250ZW5kKCktPmNhbkNhY2hlQ3VycmVu
dERvY3VtZW50SW5QYWdlQ2FjaGUoKQorI2VuZGlmCiAgICAgICAgICYmIG1fY2xpZW50LT5jYW5D
YWNoZVBhZ2UoKQogICAgICAgICA7CiB9CkBAIC0xOTk0LDYgKzIwMTYsMTAgQEAgYm9vbCBGcmFt
ZUxvYWRlcjo6bG9nQ2FuQ2FjaGVGcmFtZURlY2lzaQogICAgICAgICBpZiAobV9kb2N1bWVudExv
YWRlci0+Y2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwKCkpCiAgICAgICAgICAgICB7IFBD
TE9HKCIgICAtVGhlIERvY3VtZW50TG9hZGVyIGhhcyBhIGNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2Fj
aGVHcm91cCIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KICNlbmRpZgorI2lmIEVOQUJMRShBUFBM
SUNBVElPTl9DQUNIRSkKKyAgICAgICAgaWYgKCFhcHBjYWNoZUZyb250ZW5kKCktPmNhbkNhY2hl
Q3VycmVudERvY3VtZW50SW5QYWdlQ2FjaGUoKSkKKyAgICAgICAgICAgIHsgUENMT0coIiAgIC1V
c2luZyBhcHBsaWNhdGlvbiBjYWNoZSIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KKyNlbmRpZgog
ICAgICAgICBpZiAoIW1fY2xpZW50LT5jYW5DYWNoZVBhZ2UoKSkKICAgICAgICAgICAgIHsgUENM
T0coIiAgIC1UaGUgY2xpZW50IHNheXMgdGhpcyBmcmFtZSBjYW5ub3QgYmUgY2FjaGVkIik7IGNh
bm5vdENhY2hlID0gdHJ1ZTsgfQogICAgIH0gd2hpbGUgKGZhbHNlKTsKQEAgLTI4ODQsNiArMjkx
MCw5IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZCgKIAogICAgIHNl
dERvY3VtZW50TG9hZGVyKG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlci5nZXQoKSk7CiAgICAg
c2V0UHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigwKTsKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05f
Q0FDSEUpCisgICAgc2VsZWN0SW5pdGlhbEFwcGxpY2F0aW9uQ2FjaGUoKTsKKyNlbmRpZgogICAg
IHNldFN0YXRlKEZyYW1lU3RhdGVDb21taXR0ZWRQYWdlKTsKIAogICAgIC8vIEhhbmRsZSBhZGRp
bmcgdGhlIFVSTCB0byB0aGUgYmFjay9mb3J3YXJkIGxpc3QuCkBAIC0zNTY5LDYgKzM1OTgsMTAg
QEAgdm9pZCBGcmFtZUxvYWRlcjo6YWRkRXh0cmFGaWVsZHNUb1JlcXVlcwogICAgICAgICBlbHNl
IGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICAg
ICAgcmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhkb2N1bWVudC0+Zmlyc3RQYXJ0eUZv
ckNvb2tpZXMoKSk7CiAgICAgfQorIAorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAg
ICBhcHBjYWNoZUZyb250ZW5kKCktPmFkZEV4dHJhRmllbGRzVG9SZXF1ZXN0KHJlcXVlc3QsIG1h
aW5SZXNvdXJjZSk7CisjZW5kaWYKIAogICAgIC8vIFRoZSByZW1haW5pbmcgbW9kaWZpY2F0aW9u
cyBhcmUgb25seSBuZWNlc3NhcnkgZm9yIEhUVFAgYW5kIEhUVFBTLgogICAgIGlmICghcmVxdWVz
dC51cmwoKS5pc0VtcHR5KCkgJiYgIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJbkhUVFBGYW1pbHko
KSkKQEAgLTUyNzcsNCArNTMxMCw0NCBAQCBib29sIEZyYW1lTG9hZGVyQ2xpZW50OjpoYXNIVE1M
VmlldygpIGNvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05f
Q0FDSEUpCisKK0FwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCogRnJhbWVMb2FkZXI6OmFwcGNhY2hl
RnJvbnRlbmQoKSBjb25zdAoreworICAgIHJldHVybiBtX2FwcGNhY2hlRnJvbnRlbmQuZ2V0KCk7
Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXI6OnNlbGVjdEluaXRpYWxBcHBsaWNhdGlvbkNhY2hlKCkK
K3sKKyAgICBjb25zdCBLVVJMJiBkb2NVUkwgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKTsK
KyAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBkb2NSZXNwb25zZSA9IGRvY3VtZW50TG9hZGVy
KCktPnJlc3BvbnNlKCk7CisgICAgYXBwY2FjaGVGcm9udGVuZCgpLT5zZWxlY3RJbml0aWFsQ2Fj
aGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY1VSTCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jUmVzcG9uc2UuYXBwbGlj
YXRpb25DYWNoZUlEKCkpO30KKwordm9pZCBGcmFtZUxvYWRlcjo6c2VsZWN0QXBwbGljYXRpb25D
YWNoZVdpdGhvdXRNYW5pZmVzdCgpCit7CisgICAgY29uc3QgS1VSTCYgZG9jVVJMID0gbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+dXJsKCk7CisgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgZG9jUmVz
cG9uc2UgPSBkb2N1bWVudExvYWRlcigpLT5yZXNwb25zZSgpOworICAgIGFwcGNhY2hlRnJvbnRl
bmQoKS0+c2VsZWN0RmluYWxDYWNoZVdpdGhvdXRNYW5pZmVzdCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZG9jVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb2NSZXNwb25zZS5hcHBsaWNhdGlvbkNhY2hlSUQoKSk7Cit9CisK
K3ZvaWQgRnJhbWVMb2FkZXI6OnNlbGVjdEFwcGxpY2F0aW9uQ2FjaGVXaXRoTWFuaWZlc3QoY29u
c3QgS1VSTCYgbWFuaWZlc3RVUkwpCit7CisgICAgY29uc3QgS1VSTCYgZG9jVVJMID0gbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+dXJsKCk7CisgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgZG9jUmVz
cG9uc2UgPSBkb2N1bWVudExvYWRlcigpLT5yZXNwb25zZSgpOworICAgIGlmICghYXBwY2FjaGVG
cm9udGVuZCgpLT5zZWxlY3RGaW5hbENhY2hlV2l0aE1hbmlmZXN0KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NVUkwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvY1Jlc3BvbnNlLmFwcGxpY2F0aW9uQ2FjaGVJRCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NSZXNwb25zZS5tYW5pZmVz
dFVSTCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5pZmVz
dFVSTCkpIHsKKyAgICAgICAgLy8gSXQncyBhIGZvcmVpZ24gZW50cnksIHJlc3RhcnQgdGhlIGN1
cnJlbnQgbmF2aWdhdGlvbiBmcm9tIHRoZSB0b3Agb2YgdGhlIG5hdmlnYXRpb24gYWxnb3JpdGht
LgorICAgICAgICAvLyBUaGUgbmF2aWdhdGlvbiB3aWxsIG5vdCByZXN1bHQgaW4gdGhlIHNhbWUg
cmVzb3VyY2UgYmVpbmcgbG9hZGVkLCBiZWNhdXNlICJmb3JlaWduIiBlbnRyaWVzIGFyZSBuZXZl
ciBwaWNrZWQgZHVyaW5nIG5hdmlnYXRpb24uCisgICAgICAgIHNjaGVkdWxlTG9jYXRpb25DaGFu
Z2UoZG9jVVJMLCByZWZlcnJlcigpLCB0cnVlKTsKKyAgICB9Cit9CisjZW5kaWYKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDQ0MTYzKQorKysgbG9hZGVyL0ZyYW1l
TG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwogICAgIGNsYXNzIFdpZGdldDsK
IAorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICBjbGFzcyBBcHBsaWNhdGlvbkNh
Y2hlRnJvbnRlbmQ7CisjZW5kaWYKKwogICAgIHN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OwogICAg
IHN0cnVjdCBTY2hlZHVsZWRSZWRpcmVjdGlvbjsKICAgICBzdHJ1Y3QgV2luZG93RmVhdHVyZXM7
CkBAIC0yNDIsNiArMjQ2LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBs
b2FkZWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShjb25zdCBDYWNoZWRSZXNvdXJjZSopOwogICAg
ICAgICB2b2lkIHRlbGxDbGllbnRBYm91dFBhc3RNZW1vcnlDYWNoZUxvYWRzKCk7CiAKKyNpZiBF
TkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVu
ZCogYXBwY2FjaGVGcm9udGVuZCgpIGNvbnN0OworICAgICAgICB2b2lkIHNlbGVjdEluaXRpYWxB
cHBsaWNhdGlvbkNhY2hlKCk7CisgICAgICAgIHZvaWQgc2VsZWN0QXBwbGljYXRpb25DYWNoZVdp
dGhvdXRNYW5pZmVzdCgpOworICAgICAgICB2b2lkIHNlbGVjdEFwcGxpY2F0aW9uQ2FjaGVXaXRo
TWFuaWZlc3QoY29uc3QgS1VSTCYgbWFuaWZlc3RVUkwpOworI2VuZGlmCisKICAgICAgICAgdm9p
ZCBjaGVja0xvYWRDb21wbGV0ZSgpOwogICAgICAgICB2b2lkIGRldGFjaEZyb21QYXJlbnQoKTsK
IApAQCAtNjM1LDYgKzY0NiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKFdN
TCkKICAgICAgICAgYm9vbCBtX2ZvcmNlUmVsb2FkV21sRGVjazsKICNlbmRpZgorCisjaWYgRU5B
QkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgICAgICBPd25QdHI8QXBwbGljYXRpb25DYWNoZUZy
b250ZW5kPiBtX2FwcGNhY2hlRnJvbnRlbmQ7CisjZW5kaWYKICAgICB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBsb2FkZXIvYXBwY2FjaGUyL0FwcGxpY2F0aW9uQ2FjaGVDb21t
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIvYXBwY2FjaGUyL0FwcGxpY2F0aW9uQ2FjaGVDb21t
b24uaAkocmV2aXNpb24gMCkKKysrIGxvYWRlci9hcHBjYWNoZTIvQXBwbGljYXRpb25DYWNoZUNv
bW1vbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDA5LCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFwcGxpY2F0
aW9uQ2FjaGVDb21tb25faAorI2RlZmluZSBBcHBsaWNhdGlvbkNhY2hlQ29tbW9uX2gKKworI2lm
IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAg
Ly8gVHlwZXMgYW5kIGNvbnN0YW50cyB1c2VkIGJ5IHRoZSBmcm9udCBhbmQgYmFjayBlbmRzCisK
KyAgICB0eXBlZGVmIGxvbmcgbG9uZyBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZUlEOyAgLy8gYSA2
NCBiaXQgc3FsaXRlIHJvd2lkCisgICAgdHlwZWRlZiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZUlE
IEFwcGxpY2F0aW9uQ2FjaGVJRDsKKyAgICB0eXBlZGVmIGludCBBcHBsaWNhdGlvbkNhY2hlQ29u
dGV4dElEOworCisgICAgc3RydWN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQgewor
ICAgICAgICBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEKCkKKyAgICAgICAgICAgIDog
bV9jb250ZXh0SUQoMCkKKyAgICAgICAgICAgICwgbV9wcm9jZXNzSUQoMCkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRChBcHBs
aWNhdGlvbkNhY2hlQ29udGV4dElEIGNvbnRleHRJRCwgaW50IHByb2Nlc3NJRCkKKyAgICAgICAg
ICAgIDogbV9jb250ZXh0SUQoY29udGV4dElEKQorICAgICAgICAgICAgLCBtX3Byb2Nlc3NJRChw
cm9jZXNzSUQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEFwcGxpY2F0aW9uQ2Fj
aGVDb250ZXh0SUQgbV9jb250ZXh0SUQ7CisgICAgICAgIGludCBtX3Byb2Nlc3NJRDsKKworICAg
ICAgICBzdGF0aWMgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCBub25lKCkgeyByZXR1
cm4gR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCgpOyB9CisgICAgfTsKKworICAgIGVu
dW0gQXBwbGljYXRpb25DYWNoZUNvbnRleHRUeXBlIHsKKyAgICAgICAgTWFpbkZyYW1lQ29udGV4
dCwKKyAgICAgICAgU3ViRnJhbWVDb250ZXh0LAorICAgICAgICBEZWRpY2F0ZWRXb3JrZXJDb250
ZXh0LAorICAgICAgICBTaGFyZWRXb3JrZXJDb250ZXh0CisgICAgfTsKKworICAgIGVudW0gV2Vs
bEtub3duQXBwbGljYXRpb25DYWNoZUlEcyB7CisgICAgICAgIE5vQXBwbGljYXRpb25DYWNoZUlE
ID0gMCwKKyAgICAgICAgTm9BcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEID0gMCwKKyAgICAgICAg
VW5rbm93bkFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQgPSAtMSwKKyAgICB9OworCisgICAgZW51
bSBBcHBsaWNhdGlvbkNhY2hlU3RhdHVzIHsKKyAgICAgICAgQVBQQ0FDSEVfVU5DQUNIRUQgPSAw
LAorICAgICAgICBBUFBDQUNIRV9JRExFID0gMSwKKyAgICAgICAgQVBQQ0FDSEVfQ0hFQ0tJTkcg
PSAyLAorICAgICAgICBBUFBDQUNIRV9ET1dOTE9BRElORyA9IDMsCisgICAgICAgIEFQUENBQ0hF
X1VQREFURVJFQURZID0gNCwKKyAgICAgICAgQVBQQ0FDSEVfT0JTT0xFVEUgPSA1CisgICAgfTsK
KworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmICAvLyBFTkFCTEUoQVBQTElDQVRJ
T05fQ0FDSEUpCisjZW5kaWYgIC8vIEFwcGxpY2F0aW9uQ2FjaGVDb21tb25faAoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogbG9hZGVyL2FwcGNhY2hlMi9BcHBsaWNhdGlvbkNhY2hlQ29tbW9uLmgKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogbG9hZGVyL2FwcGNh
Y2hlMi9BcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9h
cHBjYWNoZTIvQXBwbGljYXRpb25DYWNoZUZyb250ZW5kLmNwcAkocmV2aXNpb24gMCkKKysrIGxv
YWRlci9hcHBjYWNoZTIvQXBwbGljYXRpb25DYWNoZUZyb250ZW5kLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBcHBs
aWNhdGlvbkNhY2hlRnJvbnRlbmQuaCIKKworI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkK
KworI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3ZvaWQgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kOjppbml0aWFsaXplKEFwcGxpY2F0aW9uQ2Fj
aGVDb250ZXh0VHlwZSBjb250ZXh0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEJiBwYXJlbnRDb250ZXh0SUQpCit7
CisgICAgc3RhdGljIGludCBuZXh0SUQgPSAxOworICAgIG1fY29udGV4dFR5cGUgPSBjb250ZXh0
VHlwZTsKKyAgICBtX2NvbnRleHRJRCA9IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQo
bmV4dElEKyssIDApOworICAgIC8vIEZJWE1FOiBwcm94eSBhc3luY2hyb25vdXNseSB0byB0aGUg
YmFja2VuZAorfQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZDo6c2VsZWN0SW5pdGlh
bENhY2hlKGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBcHBsaWNhdGlvbkNhY2hlSUQgY2FjaGVEb2N1bWVudFdhc0xvYWRlZEZyb20pCit7
CisgICAgLy8gRklYTUU6IHByb3h5IGFzeW5jaHJvbm91c2x5IHRvIHRoZSBiYWNrZW5kCisgICAg
bV9jYW5DYWNoZUluUGFnZUNhY2hlID0gY2FjaGVEb2N1bWVudFdhc0xvYWRlZEZyb20gPT0gTm9B
cHBsaWNhdGlvbkNhY2hlSUQ7Cit9CisKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kOjpz
ZWxlY3RGaW5hbENhY2hlV2l0aG91dE1hbmlmZXN0KAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBLVVJMJiBkb2N1bWVudFVSTCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZUlEIGNhY2hlRG9jdW1lbnRXYXNMb2FkZWRG
cm9tKQoreworICAgIC8vIEZJWE1FOiBwcm94eSBhc3luY2hyb25vdXNseSB0byB0aGUgYmFja2Vu
ZAorICAgIG1fY2FuQ2FjaGVJblBhZ2VDYWNoZSA9IGNhY2hlRG9jdW1lbnRXYXNMb2FkZWRGcm9t
ID09IE5vQXBwbGljYXRpb25DYWNoZUlEOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVGcm9u
dGVuZDo6c2VsZWN0RmluYWxDYWNoZVdpdGhNYW5pZmVzdCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVJRCBjYWNoZURvY3VtZW50V2FzTG9h
ZGVkRnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYg
bWFuaWZlc3RVUkxvZkNhY2hlRG9jdW1lbnRXYXNMb2FkZWRGcm9tLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBtYW5pZmVzdFVSTCkKK3sKKyAgICAvLyBG
SVhNRTogcHJveHkgYXN5bmNocm9ub3VzbHkgdG8gdGhlIGJhY2tlbmQKKyAgICBtX2NhbkNhY2hl
SW5QYWdlQ2FjaGUgPSBmYWxzZTsKKworICAgIC8vIENoZWNrIGZvciBhIGZvcmVpZ24gZW50cml5
IGFuZCByZXN0YXJ0IHRoZSBjdXJyZW50IG5hdmlnYXRpb24gaWYgZGV0ZWN0ZWQsCisgICAgLy8g
dGhlIGZvcmVpZ24gZW50cnkgd2lsbCBub3QgYmUgcGlja2VkIHVwIG9uIHJlbG9hZC4KKyAgICBp
ZiAoKGNhY2hlRG9jdW1lbnRXYXNMb2FkZWRGcm9tICE9IE5vQXBwbGljYXRpb25DYWNoZUlEKQor
ICAgICAgICAmJiAobWFuaWZlc3RVUkwgIT0gbWFuaWZlc3RVUkxvZkNhY2hlRG9jdW1lbnRXYXNM
b2FkZWRGcm9tKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZDo6YWRkRXh0cmFGaWVsZHNUb1Jl
cXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIG1haW5SZXNvdXJjZSkKK3sKKyAg
ICByZXF1ZXN0LnNldEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQoY29udGV4dElEKCkpOworfQor
Citib29sIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZDo6Y2FuQ2FjaGVDdXJyZW50RG9jdW1lbnRJ
blBhZ2VDYWNoZSgpIGNvbnN0IAoreworICAgIHJldHVybiBtX2NhbkNhY2hlSW5QYWdlQ2FjaGU7
Cit9CisKK0FwcGxpY2F0aW9uQ2FjaGVTdGF0dXMgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kOjpz
dGF0dXMoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiByZXR1cm4gYSBjYWNoZWQgc3RhdHVzIHZh
bHVlLCBvciBwcm94eSBzeW5jaHJvbm91c2x5IHRvIHRoZQorICAgIC8vIGJhY2tlbmQgaWYgd2Ug
aGF2ZSBubyBjYWNoZWQgdmFsdWUuCisgICAgcmV0dXJuIEFQUENBQ0hFX1VOQ0FDSEVEOworfQor
Citib29sIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZDo6dXBkYXRlKCkKK3sKKyAgICAvLyBGSVhN
RTogcHJveHkgc3luY2hyb25vdXNseSB0byB0aGUgYmFja2VuZAorICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQ6OnN3YXBDYWNoZSgpCit7CisgICAg
Ly8gRklYTUU6IHByb3h5IHN5bmNocm9ub3VzbHkgdG8gdGhlIGJhY2tlbmQKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gRU5BQkxF
KEFQUExJQ0FUSU9OX0NBQ0hFKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKClByb3BlcnR5
IGNoYW5nZXMgb246IGxvYWRlci9hcHBjYWNoZTIvQXBwbGljYXRpb25DYWNoZUZyb250ZW5kLmNw
cApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBsb2FkZXIv
YXBwY2FjaGUyL0FwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRl
ci9hcHBjYWNoZTIvQXBwbGljYXRpb25DYWNoZUZyb250ZW5kLmgJKHJldmlzaW9uIDApCisrKyBs
b2FkZXIvYXBwY2FjaGUyL0FwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmRfaAor
I2RlZmluZSBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmRfaAorCisjaWYgRU5BQkxFKEFQUExJQ0FU
SU9OX0NBQ0hFKQorCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUNvbW1vbi5oIgorI2luY2x1
ZGUgIktVUkwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgUmVzb3VyY2VS
ZXF1ZXN0OworCisgICAgLy8gRWFjaCBmcmFtZSBoYXMgYW4gQXBwbGljYXRpb25DYWNoZUZyb250
ZW5kIHdoaWNoIHNlcnZlcyBhcyBhIHByb3h5IHRvIHRoZQorICAgIC8vIGJhY2tlbmQgaW1wbG1l
bnRhdGlvbi4KKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IGEgZnVuY3Rpb25hbCBpbnN0YW5jZSBv
ZiB0aGlzIGludGVyZmFjZSwgZm9yIG5vdyB0aGlzCisgICAgLy8gc3R1YiBqdXN0IGRlbW9uc3Ry
YXRlcyBzb21lIG9mIHRoZSBsb2dpYyB0aGUgcmVhbCBpbXBsZW1lbnRhdGlvbiB3aWxsIGhhdmUu
CisgICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCgpCisgICAgICAgICAgICA6IG1fY29udGV4dFR5
cGUoTWFpbkZyYW1lQ29udGV4dCkKKyAgICAgICAgICAgICwgbV9kZWxlZ2F0ZSgwKQorICAgICAg
ICAgICAgLCBtX2NhbkNhY2hlSW5QYWdlQ2FjaGUodHJ1ZSkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgLy8gRGVsZXRlZCB1cG9uIGZyYW1lIGRlc3RydWN0aW9uLgorICAgICAgICB+
QXBwbGljYXRpb25DYWNoZUZyb250ZW5kKCkge30KKworICAgICAgICAvLyBSZXR1cm5zIHRoZSBh
cHBjYWNoZSBjb250ZXh0SUQgZm9yIHRoaXMgaW5zdGFuY2UsIGVhY2ggZnJhbWUgaXMgdW5pcXVl
bHkKKyAgICAgICAgLy8gaWRlbnRpZmllZCBieSB0aGlzIElELgorICAgICAgICBjb25zdCBHbG9i
YWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEJiBjb250ZXh0SUQoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRleHRJRDsgfQorCisgICAgICAgIC8vIFJldHVybnMgdGhlIGFwcGNhY2hlIGNvbnRleHRU
eXBlIGZvciB0aGlzIGluc3RhbmNlCisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0VHlw
ZSBjb250ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dFR5cGU7IH0KKworICAgICAg
ICAvLyBDYWxsZWQgZHVyaW5nIGZyYW1lIGNyZWF0aW9uLiBTaG91bGQgb25seSBiZSBjYWxsZWQg
b25jZS4KKyAgICAgICAgdm9pZCBpbml0aWFsaXplKEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0VHlw
ZSBjb250ZXh0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdsb2JhbEFwcGxp
Y2F0aW9uQ2FjaGVDb250ZXh0SUQmIHBhcmVudENvbnRleHRJRCk7CisKKyAgICAgICAgLy8gQ2Fs
bGVkIGR1cmluZyBmcmFtZSBuYXZpZ2F0aW9uIHdoZW4gYSBuZXcgZG9jdW1lbnQgaXMgY29tbWl0
dGVkLgorICAgICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0SW5pdGlhbENhY2hlKGNvbnN0IEtVUkwm
IGRvY3VtZW50VVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFw
cGxpY2F0aW9uQ2FjaGVJRCBjYWNoZURvY3VtZW50V2FzTG9hZGVkRnJvbSk7CisKKyAgICAgICAg
Ly8gQ2FsbGVkIGFmdGVyIHBhcnNpbmcgb2YgdGhlIEhUTUwgZWxlbWVudCBpcyBjb21wbGV0ZSwg
YW5kIHRoZXJlIHdhcyBubworICAgICAgICAvLyBtYW5pZmVzdCBhdHRyaWJ1dGUuCisgICAgICAg
IHZvaWQgc2VsZWN0RmluYWxDYWNoZVdpdGhvdXRNYW5pZmVzdChjb25zdCBLVVJMJiBkb2N1bWVu
dFVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxp
Y2F0aW9uQ2FjaGVJRCBjYWNoZURvY3VtZW50V2FzTG9hZGVkRnJvbSk7CisKKyAgICAgICAgLy8g
Q2FsbGVkIGFmdGVyIHBhcnNpbmcgb2YgdGhlIEhUTUwgZWxlbWVudCBpcyBjb21wbGV0ZSwgYW5k
IHRoZXJlIHdhcyBhCisgICAgICAgIC8vIG1hbmlmZXN0IGF0dHJpYnV0ZS4gUmV0dXJucyBmYWxz
ZSBpZiB0aGUgdGhlIG5hdmlnYXRpb24gc2hvdWxkIGJlIHJlc3RhcnRlZCwKKyAgICAgICAgLy8g
dGhpcyBvY2N1cnMgaWYgYSAnZm9yaWVnbicgcmVzb3VyY2Ugd2FzIGxvYWRlZCBmcm9tIHRoZSBj
YWNoZS4KKyAgICAgICAgYm9vbCBzZWxlY3RGaW5hbENhY2hlV2l0aE1hbmlmZXN0KGNvbnN0IEtV
UkwmIGRvY3VtZW50VVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXBwbGljYXRpb25DYWNoZUlEIGNhY2hlRG9jdW1lbnRXYXNMb2FkZWRGcm9tLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgbWFuaWZlc3RV
UkxvZkNhY2hlRG9jdW1lbnRXYXNMb2FkZWRGcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgbWFuaWZlc3RVUkwpOworCisgICAgICAgIC8v
IENhbGxlZCBieSBGcmFtZUxvYWRlciB3aGVuIHByZXBhcmluZyBhIHJlc291cmNlIHJlcXVlc3Qg
YXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dC4KKyAgICAgICAgdm9pZCBhZGRFeHRyYUZpZWxk
c1RvUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgbWFpblJlc291cmNlKTsK
KworICAgICAgICAvLyBDYWxsZWQgYnkgRnJhbWVMb2FkZXIgd2hlbiBkZWNpZGluZyB3aGV0aGVy
IHRoZSBjb250ZW50cyBhcmUgZWxpZ2libGUgZm9yIHRoZSBwYWdlIGNhY2hlLgorICAgICAgICBi
b29sIGNhbkNhY2hlQ3VycmVudERvY3VtZW50SW5QYWdlQ2FjaGUoKSBjb25zdDsKKworICAgICAg
ICAvLyBTdXBwb3J0IGZvciB0aGUgc2NyaXB0YWJsZSBpbnRlcmZhY2UgZGVmaW5lZCBieSBET01B
cHBsaWNhdG9pbkNhY2hlLmlkbAorICAgICAgICBjbGFzcyBEZWxlZ2F0ZSB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBvbkNoZWNraW5nKEFwcGxpY2F0aW9uQ2Fj
aGVGcm9udGVuZCogY2FjaGUpID0gMDsKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBvbkVycm9y
KEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCogY2FjaGUpID0gMDsgICAKKyAgICAgICAgICAgIHZp
cnR1YWwgdm9pZCBvbk5vVXBkYXRlKEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCogY2FjaGUpID0g
MDsgICAgCisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgb25Eb3dubG9hZGluZyhBcHBsaWNhdGlv
bkNhY2hlRnJvbnRlbmQqIGNhY2hlKSA9IDA7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgb25Q
cm9ncmVzcyhBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQqIGNhY2hlKSA9IDA7CisgICAgICAgICAg
ICB2aXJ0dWFsIHZvaWQgb25VcGRhdGVSZWFkeShBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQqIGNh
Y2hlKSA9IDA7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgb25DYWNoZWQoQXBwbGljYXRpb25D
YWNoZUZyb250ZW5kKiBjYWNoZSkgPSAwOworICAgICAgICAgICAgdmlydHVhbCB2b2lkIG9uT2Jz
b2xldGUoQXBwbGljYXRpb25DYWNoZUZyb250ZW5kKiBjYWNoZSkgPSAwOworICAgICAgICAgICAg
dmlydHVhbCB+RGVsZWdhdGUoKSB7fQorICAgICAgICB9OworICAgICAgICBBcHBsaWNhdGlvbkNh
Y2hlU3RhdHVzIHN0YXR1cygpIGNvbnN0OyAgCisgICAgICAgIGJvb2wgdXBkYXRlKCk7CisgICAg
ICAgIGJvb2wgc3dhcENhY2hlKCk7ICAgCisgICAgICAgIHZvaWQgc2V0RGVsZWdhdGUoRGVsZWdh
dGUqIGRlbGVnYXRlKSB7IG1fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsgfQorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCBtX2NvbnRleHRJRDsKKyAg
ICAgICAgQXBwbGljYXRpb25DYWNoZUNvbnRleHRUeXBlIG1fY29udGV4dFR5cGU7CisgICAgICAg
IERlbGVnYXRlKiBtX2RlbGVnYXRlOworICAgICAgICBib29sIG1fY2FuQ2FjaGVJblBhZ2VDYWNo
ZTsKKyAgICB9OworCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgIC8vIEVOQUJM
RShBUFBMSUNBVElPTl9DQUNIRSkKKyNlbmRpZiAgLy8gV2ViQXBwbGljYXRpb25DYWNoZUNvbnRl
eHRfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogbG9hZGVyL2FwcGNhY2hlMi9BcHBsaWNhdGlvbkNh
Y2hlRnJvbnRlbmQuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCklu
ZGV4OiBsb2FkZXIvYXBwY2FjaGUyL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGxvYWRlci9hcHBjYWNoZTIvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDQ0
MTYzKQkoZnJvbSBsb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHA6NDQxNjMp
CisrKyBsb2FkZXIvYXBwY2FjaGUyL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJET01BcHBs
aWNhdGlvbkNhY2hlLmgiCisKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQor
CisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZS5oIgorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2Fj
aGVHcm91cC5oIgorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oIgorI2luY2x1
ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVu
dEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIlN0YXRpY1N0cmluZ0xpc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitE
T01BcHBsaWNhdGlvbkNhY2hlOjpET01BcHBsaWNhdGlvbkNhY2hlKEZyYW1lKiBmcmFtZSkKKyAg
ICA6IG1fZnJhbWUoZnJhbWUpCit7Cit9CisKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6ZGlz
Y29ubmVjdEZyYW1lKCkKK3sKKyAgICBtX2ZyYW1lID0gMDsKK30KKworQXBwbGljYXRpb25DYWNo
ZSogRE9NQXBwbGljYXRpb25DYWNoZTo6YXNzb2NpYXRlZENhY2hlKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybiAwOworIAorICAgIHJldHVybiBtX2ZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZSgpOworfQorCit1bnNp
Z25lZCBzaG9ydCBET01BcHBsaWNhdGlvbkNhY2hlOjpzdGF0dXMoKSBjb25zdAoreworICAgIEFw
cGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gYXNzb2NpYXRlZENhY2hlKCk7ICAgIAorICAgIGlmICgh
Y2FjaGUpCisgICAgICAgIHJldHVybiBVTkNBQ0hFRDsKKworICAgIHN3aXRjaCAoY2FjaGUtPmdy
b3VwKCktPnVwZGF0ZVN0YXR1cygpKSB7CisgICAgICAgIGNhc2UgQXBwbGljYXRpb25DYWNoZUdy
b3VwOjpDaGVja2luZzoKKyAgICAgICAgICAgIHJldHVybiBDSEVDS0lORzsKKyAgICAgICAgY2Fz
ZSBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OkRvd25sb2FkaW5nOgorICAgICAgICAgICAgcmV0dXJu
IERPV05MT0FESU5HOworICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6SWRsZTog
eworICAgICAgICAgICAgaWYgKGNhY2hlLT5ncm91cCgpLT5pc09ic29sZXRlKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIE9CU09MRVRFOworICAgICAgICAgICAgaWYgKGNhY2hlICE9IGNhY2hl
LT5ncm91cCgpLT5uZXdlc3RDYWNoZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBVUERBVEVS
RUFEWTsKKyAgICAgICAgICAgIHJldHVybiBJRExFOworICAgICAgICB9CisgICAgfQorCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRE9NQXBwbGlj
YXRpb25DYWNoZTo6dXBkYXRlKEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFwcGxpY2F0aW9u
Q2FjaGUqIGNhY2hlID0gYXNzb2NpYXRlZENhY2hlKCk7CisgICAgaWYgKCFjYWNoZSkgeworICAg
ICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIGNhY2hlLT5ncm91cCgpLT51cGRhdGUobV9mcmFtZSwgQXBwbGljYXRpb25DYWNoZVVw
ZGF0ZVdpdGhvdXRCcm93c2luZ0NvbnRleHQpOworfQorCitib29sIERPTUFwcGxpY2F0aW9uQ2Fj
aGU6OnN3YXBDYWNoZSgpCit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgQXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSBtX2ZyYW1lLT5sb2FkZXIo
KS0+ZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZSgpOworICAgIGlmICghY2FjaGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIElmIHRoZSBncm91cCBvZiBhcHBsaWNh
dGlvbiBjYWNoZXMgdG8gd2hpY2ggY2FjaGUgYmVsb25ncyBoYXMgdGhlIGxpZmVjeWNsZSBzdGF0
dXMgb2Jzb2xldGUsIHVuYXNzb2NpYXRlIGRvY3VtZW50IGZyb20gY2FjaGUuCisgICAgaWYgKGNh
Y2hlLT5ncm91cCgpLT5pc09ic29sZXRlKCkpIHsKKyAgICAgICAgY2FjaGUtPmdyb3VwKCktPmRp
c2Fzc29jaWF0ZURvY3VtZW50TG9hZGVyKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRl
cigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gSWYgdGhlcmUgaXMg
bm8gbmV3ZXIgY2FjaGUsIHJhaXNlIGFuIElOVkFMSURfU1RBVEVfRVJSIGV4Y2VwdGlvbi4KKyAg
ICBBcHBsaWNhdGlvbkNhY2hlKiBuZXdlc3RDYWNoZSA9IGNhY2hlLT5ncm91cCgpLT5uZXdlc3RD
YWNoZSgpOworICAgIGlmIChjYWNoZSA9PSBuZXdlc3RDYWNoZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIEFTU0VSVChjYWNoZS0+Z3JvdXAoKSA9PSBuZXdlc3RDYWNoZS0+Z3Jv
dXAoKSk7CisgICAgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnNldEFwcGxp
Y2F0aW9uQ2FjaGUobmV3ZXN0Q2FjaGUpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorICAg
IAordm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpzd2FwQ2FjaGUoRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgaWYgKCFzd2FwQ2FjaGUoKSkKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VS
UjsKK30KKworUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBET01BcHBsaWNhdGlvbkNhY2hlOjpp
dGVtcygpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OworICAgIGlmIChBcHBsaWNhdGlv
bkNhY2hlKiBjYWNoZSA9IGFzc29jaWF0ZWRDYWNoZSgpKSB7CisgICAgICAgIHVuc2lnbmVkIG51
bUVudHJpZXMgPSBjYWNoZS0+bnVtRHluYW1pY0VudHJpZXMoKTsKKyAgICAgICAgcmVzdWx0LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobnVtRW50cmllcyk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1FbnRyaWVzOyArK2kpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNh
Y2hlLT5keW5hbWljRW50cnkoaSkpOworICAgIH0KKyAgICByZXR1cm4gU3RhdGljU3RyaW5nTGlz
dDo6YWRvcHQocmVzdWx0KTsKK30KKworYm9vbCBET01BcHBsaWNhdGlvbkNhY2hlOjpoYXNJdGVt
KGNvbnN0IEtVUkwmIHVybCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQXBwbGljYXRpb25D
YWNoZSogY2FjaGUgPSBhc3NvY2lhdGVkQ2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlKSB7CisgICAg
ICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAoIXVybC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQXBwbGljYXRpb25DYWNoZVJlc291
cmNlKiByZXNvdXJjZSA9IGNhY2hlLT5yZXNvdXJjZUZvclVSTCh1cmwuc3RyaW5nKCkpOworICAg
IHJldHVybiByZXNvdXJjZSAmJiAocmVzb3VyY2UtPnR5cGUoKSAmIEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZTo6RHluYW1pYyk7Cit9CisgICAgCit2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmFk
ZChjb25zdCBLVVJMJiB1cmwsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEFwcGxpY2F0aW9u
Q2FjaGUqIGNhY2hlID0gYXNzb2NpYXRlZENhY2hlKCk7CisgICAgaWYgKCFjYWNoZSkgeworICAg
ICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorIAor
ICAgIGlmICghdXJsLmlzVmFsaWQoKSkgeworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGlmICghY2FjaGUtPmFkZER5bmFtaWNF
bnRyeSh1cmwpKSB7CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIHVzZSB0aGUgKGN1cnJlbnRseSBu
b3Qgc3BlY2lmaWVkKSBzZWN1cml0eSBleGNlcHRpb25zIGluIEhUTUw1IDQuMy40CisgICAgICAg
IGVjID0gU0VDVVJJVFlfRVJSOworICAgIH0KK30KKwordm9pZCBET01BcHBsaWNhdGlvbkNhY2hl
OjpyZW1vdmUoY29uc3QgS1VSTCYgdXJsLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBcHBs
aWNhdGlvbkNhY2hlKiBjYWNoZSA9IGFzc29jaWF0ZWRDYWNoZSgpOworICAgIGlmICghY2FjaGUp
IHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBjYWNoZS0+cmVtb3ZlRHluYW1pY0VudHJ5KHVybCk7Cit9CisKK1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZyYW1lLT5kb2N1bWVudCgpOworfQorCit2
b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwg
Ym9vbCkKK3sKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRM
aXN0ZW5lcnMuZmluZChldmVudFR5cGUpOworICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0ZW5l
cnMuZW5kKCkpIHsKKyAgICAgICAgTGlzdGVuZXJWZWN0b3IgbGlzdGVuZXJzOworICAgICAgICBs
aXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOworICAgICAgICBtX2V2ZW50TGlzdGVuZXJz
LmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTGlzdGVu
ZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgZm9yIChMaXN0ZW5l
clZlY3Rvcjo6aXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzLmJlZ2luKCk7IGxpc3Rl
bmVySXRlciAhPSBsaXN0ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7CisgICAgICAgICAg
ICBpZiAoKmxpc3RlbmVySXRlciA9PSBldmVudExpc3RlbmVyKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVu
dExpc3RlbmVyKTsKKyAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0
ZW5lcnMpOworICAgIH0gICAgCit9CisKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6cmVtb3Zl
RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5l
ciogZXZlbnRMaXN0ZW5lciwgYm9vbCkKK3sKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0
b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOworICAgIGlmIChpdGVy
ID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBM
aXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gaXRlci0+c2Vjb25kOworICAgIGZvciAoTGlzdGVu
ZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdpbigp
OyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikgeworICAg
ICAgICBpZiAoKmxpc3RlbmVySXRlciA9PSBldmVudExpc3RlbmVyKSB7CisgICAgICAgICAgICBs
aXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVySXRlciAtIGxpc3RlbmVycy5iZWdpbigpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBET01BcHBsaWNhdGlv
bkNhY2hlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LT50eXBlKCkuaXNFbXB0eSgpKSB7
CisgICAgICAgIGVjID0gRXZlbnRFeGNlcHRpb246OlVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJS
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgTGlzdGVuZXJWZWN0b3Ig
bGlzdGVuZXJzQ29weSA9IG1fZXZlbnRMaXN0ZW5lcnMuZ2V0KGV2ZW50LT50eXBlKCkpOworICAg
IGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3Rl
bmVyc0NvcHkuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVyc0NvcHkuZW5kKCk7ICsr
bGlzdGVuZXJJdGVyKSB7CisgICAgICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CisgICAgICAg
IGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOworICAgICAgICBsaXN0ZW5lckl0ZXItPmdl
dCgpLT5oYW5kbGVFdmVudChldmVudC5nZXQoKSwgZmFsc2UpOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Cit9CisKK3ZvaWQgRE9NQXBwbGljYXRp
b25DYWNoZTo6Y2FsbExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVu
dExpc3RlbmVyKiBsaXN0ZW5lcikKK3sKKyAgICBBU1NFUlQobV9mcmFtZSk7CisgICAgCisgICAg
UmVmUHRyPEV2ZW50PiBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBmYWxzZSwgZmFs
c2UpOworICAgIGlmIChsaXN0ZW5lcikgeworICAgICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMp
OworICAgICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICAgICAgbGlzdGVu
ZXItPmhhbmRsZUV2ZW50KGV2ZW50LmdldCgpLCBmYWxzZSk7CisgICAgfQorICAgIAorICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQucmVsZWFzZSgpLCBl
Yyk7CisgICAgQVNTRVJUKCFlYyk7ICAgIAorfQorCit2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6
OmNhbGxDaGVja2luZ0xpc3RlbmVyKCkKK3sKKyAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygp
LmNoZWNraW5nRXZlbnQsIG1fb25DaGVja2luZ0xpc3RlbmVyLmdldCgpKTsKK30KKwordm9pZCBE
T01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRXJyb3JMaXN0ZW5lcigpCit7CisgICAgY2FsbExpc3Rl
bmVyKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBtX29uRXJyb3JMaXN0ZW5lci5nZXQoKSk7Cit9
CisKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbE5vVXBkYXRlTGlzdGVuZXIoKQorewor
ICAgIGNhbGxMaXN0ZW5lcihldmVudE5hbWVzKCkubm91cGRhdGVFdmVudCwgbV9vbk5vVXBkYXRl
TGlzdGVuZXIuZ2V0KCkpOworfQorCit2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxEb3du
bG9hZGluZ0xpc3RlbmVyKCkKK3sKKyAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLmRvd25s
b2FkaW5nRXZlbnQsIG1fb25Eb3dubG9hZGluZ0xpc3RlbmVyLmdldCgpKTsKK30KKwordm9pZCBE
T01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsUHJvZ3Jlc3NMaXN0ZW5lcigpCit7CisgICAgY2FsbExp
c3RlbmVyKGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50LCBtX29uUHJvZ3Jlc3NMaXN0ZW5lci5n
ZXQoKSk7Cit9CisKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbFVwZGF0ZVJlYWR5TGlz
dGVuZXIoKQoreworICAgIGNhbGxMaXN0ZW5lcihldmVudE5hbWVzKCkudXBkYXRlcmVhZHlFdmVu
dCwgbV9vblVwZGF0ZVJlYWR5TGlzdGVuZXIuZ2V0KCkpOworfQorCit2b2lkIERPTUFwcGxpY2F0
aW9uQ2FjaGU6OmNhbGxDYWNoZWRMaXN0ZW5lcigpCit7CisgICAgY2FsbExpc3RlbmVyKGV2ZW50
TmFtZXMoKS5jYWNoZWRFdmVudCwgbV9vbkNhY2hlZExpc3RlbmVyLmdldCgpKTsKK30KKwordm9p
ZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsT2Jzb2xldGVMaXN0ZW5lcigpCit7CisgICAgY2Fs
bExpc3RlbmVyKGV2ZW50TmFtZXMoKS5vYnNvbGV0ZUV2ZW50LCBtX29uT2Jzb2xldGVMaXN0ZW5l
ci5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCkluZGV4OiBsb2FkZXIvYXBwY2FjaGUyL0RPTUFw
cGxpY2F0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9hcHBjYWNoZTIvRE9NQXBw
bGljYXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDApCisrKyBsb2FkZXIvYXBwY2FjaGUyL0RPTUFw
cGxpY2F0aW9uQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsOCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRPTUFwcGxpY2F0aW9uQ2FjaGUuaCIKIAotI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9O
X0NBQ0hFKQogCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZS5oIgotI2luY2x1ZGUgIkFwcGxp
Y2F0aW9uQ2FjaGVHcm91cC5oIgotI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5o
IgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNs
dWRlICJFdmVudEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKQEAgLTQ0
LDQwICs0MCwzNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERPTUFwcGxpY2F0aW9uQ2FjaGU6
OkRPTUFwcGxpY2F0aW9uQ2FjaGUoRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkK
KyAgICAsIG1fYXBwY2FjaGVGcm9udGVuZChmcmFtZS0+bG9hZGVyKCktPmFwcGNhY2hlRnJvbnRl
bmQoKSkKIHsKKyAgICBhcHBjYWNoZUZyb250ZW5kKCktPnNldERlbGVnYXRlKHRoaXMpOwogfQog
CiB2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmRpc2Nvbm5lY3RGcmFtZSgpCiB7CisgICAgYXBw
Y2FjaGVGcm9udGVuZCgpLT5zZXREZWxlZ2F0ZSgwKTsKICAgICBtX2ZyYW1lID0gMDsKLX0KLQot
QXBwbGljYXRpb25DYWNoZSogRE9NQXBwbGljYXRpb25DYWNoZTo6YXNzb2NpYXRlZENhY2hlKCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotIAotICAgIHJl
dHVybiBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNo
ZSgpOworICAgIG1fYXBwY2FjaGVGcm9udGVuZCA9IDA7CiB9CiAKIHVuc2lnbmVkIHNob3J0IERP
TUFwcGxpY2F0aW9uQ2FjaGU6OnN0YXR1cygpIGNvbnN0CiB7Ci0gICAgQXBwbGljYXRpb25DYWNo
ZSogY2FjaGUgPSBhc3NvY2lhdGVkQ2FjaGUoKTsgICAgCisgICAgQXBwbGljYXRpb25DYWNoZUZy
b250ZW5kKiBjYWNoZSA9IGFwcGNhY2hlRnJvbnRlbmQoKTsgICAgCiAgICAgaWYgKCFjYWNoZSkK
ICAgICAgICAgcmV0dXJuIFVOQ0FDSEVEOwogCi0gICAgc3dpdGNoIChjYWNoZS0+Z3JvdXAoKS0+
dXBkYXRlU3RhdHVzKCkpIHsKLSAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OkNo
ZWNraW5nOgorICAgIHN3aXRjaCAoY2FjaGUtPnN0YXR1cygpKSB7CisgICAgICAgIGNhc2UgQVBQ
Q0FDSEVfVU5DQUNIRUQ6CisgICAgICAgICAgICByZXR1cm4gVU5DQUNIRUQ7CisgICAgICAgIGNh
c2UgQVBQQ0FDSEVfQ0hFQ0tJTkc6CiAgICAgICAgICAgICByZXR1cm4gQ0hFQ0tJTkc7Ci0gICAg
ICAgIGNhc2UgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpEb3dubG9hZGluZzoKKyAgICAgICAgY2Fz
ZSBBUFBDQUNIRV9ET1dOTE9BRElORzoKICAgICAgICAgICAgIHJldHVybiBET1dOTE9BRElORzsK
LSAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OklkbGU6IHsKLSAgICAgICAgICAg
IGlmIChjYWNoZS0+Z3JvdXAoKS0+aXNPYnNvbGV0ZSgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBPQlNPTEVURTsKLSAgICAgICAgICAgIGlmIChjYWNoZSAhPSBjYWNoZS0+Z3JvdXAoKS0+bmV3
ZXN0Q2FjaGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gVVBEQVRFUkVBRFk7CisgICAgICAg
IGNhc2UgQVBQQ0FDSEVfSURMRToKICAgICAgICAgICAgIHJldHVybiBJRExFOwotICAgICAgICB9
CisgICAgICAgIGNhc2UgQVBQQ0FDSEVfT0JTT0xFVEU6CisgICAgICAgICAgICByZXR1cm4gT0JT
T0xFVEU7CisgICAgICAgIGNhc2UgQVBQQ0FDSEVfVVBEQVRFUkVBRFk6CisgICAgICAgICAgICBy
ZXR1cm4gVVBEQVRFUkVBRFk7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC04NiwzOSArNzksMjIgQEAgdW5zaWduZWQgc2hvcnQgRE9NQXBwbGljYXRpb25DYWNoZTo6c3Rh
dAogCiB2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnVwZGF0ZShFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSA9IGFzc29jaWF0ZWRDYWNoZSgpOworICAg
IEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCogY2FjaGUgPSBhcHBjYWNoZUZyb250ZW5kKCk7ICAg
IAogICAgIGlmICghY2FjaGUpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBjYWNoZS0+Z3JvdXAoKS0+dXBkYXRlKG1f
ZnJhbWUsIEFwcGxpY2F0aW9uQ2FjaGVVcGRhdGVXaXRob3V0QnJvd3NpbmdDb250ZXh0KTsKKyAg
ICBjYWNoZS0+dXBkYXRlKCk7CiB9CiAKIGJvb2wgRE9NQXBwbGljYXRpb25DYWNoZTo6c3dhcENh
Y2hlKCkKIHsKLSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSA9IG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlKCk7CisgICAgQXBwbGljYXRpb25DYWNoZUZyb250
ZW5kKiBjYWNoZSA9IGFwcGNhY2hlRnJvbnRlbmQoKTsgICAgCiAgICAgaWYgKCFjYWNoZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gSWYgdGhlIGdyb3VwIG9mIGFwcGxpY2F0aW9u
IGNhY2hlcyB0byB3aGljaCBjYWNoZSBiZWxvbmdzIGhhcyB0aGUgbGlmZWN5Y2xlIHN0YXR1cyBv
YnNvbGV0ZSwgdW5hc3NvY2lhdGUgZG9jdW1lbnQgZnJvbSBjYWNoZS4KLSAgICBpZiAoY2FjaGUt
Pmdyb3VwKCktPmlzT2Jzb2xldGUoKSkgewotICAgICAgICBjYWNoZS0+Z3JvdXAoKS0+ZGlzYXNz
b2NpYXRlRG9jdW1lbnRMb2FkZXIobV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyBu
ZXdlciBjYWNoZSwgcmFpc2UgYW4gSU5WQUxJRF9TVEFURV9FUlIgZXhjZXB0aW9uLgotICAgIEFw
cGxpY2F0aW9uQ2FjaGUqIG5ld2VzdENhY2hlID0gY2FjaGUtPmdyb3VwKCktPm5ld2VzdENhY2hl
KCk7Ci0gICAgaWYgKGNhY2hlID09IG5ld2VzdENhY2hlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCi0gICAgQVNTRVJUKGNhY2hlLT5ncm91cCgpID09IG5ld2VzdENhY2hlLT5ncm91cCgp
KTsKLSAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+c2V0QXBwbGljYXRp
b25DYWNoZShuZXdlc3RDYWNoZSk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IGNhY2hlLT5zd2FwQ2FjaGUoKTsKIH0KICAgICAKIHZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6
c3dhcENhY2hlKEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTI3LDY4ICsxMDMsOSBAQCB2b2lkIERP
TUFwcGxpY2F0aW9uQ2FjaGU6OnN3YXBDYWNoZShFeGNlCiAgICAgICAgIGVjID0gSU5WQUxJRF9T
VEFURV9FUlI7CiB9CiAKLVBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gRE9NQXBwbGljYXRpb25D
YWNoZTo6aXRlbXMoKQotewotICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKLSAgICBpZiAoQXBw
bGljYXRpb25DYWNoZSogY2FjaGUgPSBhc3NvY2lhdGVkQ2FjaGUoKSkgewotICAgICAgICB1bnNp
Z25lZCBudW1FbnRyaWVzID0gY2FjaGUtPm51bUR5bmFtaWNFbnRyaWVzKCk7Ci0gICAgICAgIHJl
c3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bUVudHJpZXMpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtRW50cmllczsgKytpKQotICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChjYWNoZS0+ZHluYW1pY0VudHJ5KGkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXRpY1N0
cmluZ0xpc3Q6OmFkb3B0KHJlc3VsdCk7Ci19Ci0KLWJvb2wgRE9NQXBwbGljYXRpb25DYWNoZTo6
aGFzSXRlbShjb25zdCBLVVJMJiB1cmwsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFwcGxp
Y2F0aW9uQ2FjaGUqIGNhY2hlID0gYXNzb2NpYXRlZENhY2hlKCk7Ci0gICAgaWYgKCFjYWNoZSkg
ewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgaWYgKCF1cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGVjID0gU1lOVEFY
X0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZSogcmVzb3VyY2UgPSBjYWNoZS0+cmVzb3VyY2VGb3JVUkwodXJsLnN0cmluZygp
KTsKLSAgICByZXR1cm4gcmVzb3VyY2UgJiYgKHJlc291cmNlLT50eXBlKCkgJiBBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2U6OkR5bmFtaWMpOwotfQotICAgIAotdm9pZCBET01BcHBsaWNhdGlvbkNh
Y2hlOjphZGQoY29uc3QgS1VSTCYgdXJsLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBBcHBs
aWNhdGlvbkNhY2hlKiBjYWNoZSA9IGFzc29jaWF0ZWRDYWNoZSgpOwotICAgIGlmICghY2FjaGUp
IHsKLSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAKLSAgICBpZiAoIXVybC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJS
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgICBpZiAoIWNhY2hlLT5hZGRE
eW5hbWljRW50cnkodXJsKSkgewotICAgICAgICAvLyBUaGlzIHNob3VsZCB1c2UgdGhlIChjdXJy
ZW50bHkgbm90IHNwZWNpZmllZCkgc2VjdXJpdHkgZXhjZXB0aW9ucyBpbiBIVE1MNSA0LjMuNAot
ICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICB9Ci19Ci0KLXZvaWQgRE9NQXBwbGljYXRp
b25DYWNoZTo6cmVtb3ZlKGNvbnN0IEtVUkwmIHVybCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgQXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSBhc3NvY2lhdGVkQ2FjaGUoKTsKLSAgICBpZiAo
IWNhY2hlKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgY2FjaGUtPnJlbW92ZUR5bmFtaWNFbnRyeSh1cmwpOwotfQot
CiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBET01BcHBsaWNhdGlvbkNhY2hlOjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKTsK
KyAgICByZXR1cm4gbV9mcmFtZSA/IG1fZnJhbWUtPmRvY3VtZW50KCkgOiAwOwogfQogCiB2b2lk
IERPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwgYm9v
bCkKQEAgLTI5OCw2ICsyMTUsNTEgQEAgdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsT2Jz
b2xldGVMaQogICAgIGNhbGxMaXN0ZW5lcihldmVudE5hbWVzKCkub2Jzb2xldGVFdmVudCwgbV9v
bk9ic29sZXRlTGlzdGVuZXIuZ2V0KCkpOwogfQogCisjaWYgVVNFKFY4KQorUmVmUHRyPEV2ZW50
TGlzdGVuZXI+KiBET01BcHBsaWNhdGlvbkNhY2hlOjpnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVy
U3RvcmFnZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKK3sKKyAgICBpZiAoZXZlbnRU
eXBlID09IGV2ZW50TmFtZXMoKS5jaGVja2luZ0V2ZW50KQorICAgICAgICByZXR1cm4gJm1fb25D
aGVja2luZ0xpc3RlbmVyOworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCku
ZXJyb3JFdmVudCkKKyAgICAgICAgcmV0dXJuICZtX29uRXJyb3JMaXN0ZW5lcjsKKyAgICBlbHNl
IGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm5vdXBkYXRlRXZlbnQpCisgICAgICAgIHJl
dHVybiAmbV9vbk5vVXBkYXRlTGlzdGVuZXI7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS5kb3dubG9hZGluZ0V2ZW50KQorICAgICAgICByZXR1cm4gJm1fb25Eb3dubG9h
ZGluZ0xpc3RlbmVyOworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucHJv
Z3Jlc3NFdmVudCkKKyAgICAgICAgcmV0dXJuICZtX29uUHJvZ3Jlc3NMaXN0ZW5lcjsKKyAgICBl
bHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnVwZGF0ZXJlYWR5RXZlbnQpCisgICAg
ICAgIHJldHVybiAmbV9vblVwZGF0ZVJlYWR5TGlzdGVuZXI7CisgICAgZWxzZSBpZiAoZXZlbnRU
eXBlID09IGV2ZW50TmFtZXMoKS5jYWNoZWRFdmVudCkKKyAgICAgICAgcmV0dXJuICZtX29uQ2Fj
aGVkTGlzdGVuZXI7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5vYnNv
bGV0ZUV2ZW50KQorICAgICAgICByZXR1cm4gJm1fb25PYnNvbGV0ZUxpc3RlbmVyOworICAgIGVs
c2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK0V2ZW50TGlzdGVuZXIqIERPTUFwcGxpY2F0aW9u
Q2FjaGU6OmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUpCit7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+KiBzdG9yYWdlID0gZ2V0QXR0cmli
dXRlRXZlbnRMaXN0ZW5lclN0b3JhZ2UoZXZlbnRUeXBlKTsKKyAgICBBU1NFUlQoc3RvcmFnZSk7
CisgICAgcmV0dXJuICgqc3RvcmFnZSkuZ2V0KCk7Cit9CisKK3ZvaWQgRE9NQXBwbGljYXRpb25D
YWNoZTo6c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcikKK3sKKyAgICBSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4qIHN0b3JhZ2UgPSBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyU3RvcmFn
ZShldmVudFR5cGUpOworICAgIEFTU0VSVChzdG9yYWdlKTsKKyAgICAoKnN0b3JhZ2UpID0gbGlz
dGVuZXI7Cit9CisKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2xlYXJBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQoreworICAgIFJlZlB0cjxF
dmVudExpc3RlbmVyPiogc3RvcmFnZSA9IGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXJTdG9yYWdl
KGV2ZW50VHlwZSk7CisgICAgQVNTRVJUKHN0b3JhZ2UpOworICAgICgqc3RvcmFnZSkgPSAwOwor
fQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShP
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjZW5kaWYgLy8gRU5BQkxFKEFQUExJQ0FUSU9OX0NB
Q0hFKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogbG9hZGVyL2FwcGNhY2hlMi9ET01BcHBsaWNhdGlv
bkNhY2hlLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWVyZ2VpbmZvCgpJbmRleDogbG9hZGVy
L2FwcGNhY2hlMi9ET01BcHBsaWNhdGlvbkNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL2Fw
cGNhY2hlMi9ET01BcHBsaWNhdGlvbkNhY2hlLmgJKHJldmlzaW9uIDQ0MTYzKQkoZnJvbSBsb2Fk
ZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5oOjQ0MTYzKQorKysgbG9hZGVyL2FwcGNh
Y2hlMi9ET01BcHBsaWNhdGlvbkNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBET01BcHBsaWNhdGlvbkNhY2hlX2gKKyNkZWZpbmUgRE9NQXBwbGljYXRpb25DYWNo
ZV9oCisKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorCisjaW5jbHVkZSAi
QXRvbWljU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAi
RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBcHBsaWNhdGlvbkNh
Y2hlOworY2xhc3MgQXRvbWljU3RyaW5nSW1wbDsKK2NsYXNzIERPTVN0cmluZ0xpc3Q7CitjbGFz
cyBGcmFtZTsKK2NsYXNzIEtVUkw7CitjbGFzcyBTdHJpbmc7CisgICAgCitjbGFzcyBET01BcHBs
aWNhdGlvbkNhY2hlIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NQXBwbGljYXRpb25DYWNoZT4sIHB1
YmxpYyBFdmVudFRhcmdldCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RE9NQXBw
bGljYXRpb25DYWNoZT4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IERPTUFwcGxpY2F0aW9uQ2FjaGUoZnJhbWUpKTsgfQorICAgIHZvaWQgZGlzY29ubmVjdEZyYW1l
KCk7CisKKyAgICBlbnVtIFN0YXR1cyB7CisgICAgICAgIFVOQ0FDSEVEID0gMCwKKyAgICAgICAg
SURMRSA9IDEsCisgICAgICAgIENIRUNLSU5HID0gMiwKKyAgICAgICAgRE9XTkxPQURJTkcgPSAz
LAorICAgICAgICBVUERBVEVSRUFEWSA9IDQsCisgICAgICAgIE9CU09MRVRFID0gNQorICAgIH07
CisKKyAgICB1bnNpZ25lZCBzaG9ydCBzdGF0dXMoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHVw
ZGF0ZShFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzd2FwQ2FjaGUoRXhjZXB0aW9uQ29kZSYp
OworICAgIAorICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaXRlbXMoKTsKKyAgICBib29s
IGhhc0l0ZW0oY29uc3QgS1VSTCYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGFkZChjb25z
dCBLVVJMJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgcmVtb3ZlKGNvbnN0IEtVUkwmLCBF
eGNlcHRpb25Db2RlJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9v
bCB1c2VDYXB0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVy
ZSk7CisgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICAKKyAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gPiBMaXN0ZW5lclZlY3RvcjsKKyAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5n
LCBMaXN0ZW5lclZlY3Rvcj4gRXZlbnRMaXN0ZW5lcnNNYXA7CisgICAgRXZlbnRMaXN0ZW5lcnNN
YXAmIGV2ZW50TGlzdGVuZXJzKCkgeyByZXR1cm4gbV9ldmVudExpc3RlbmVyczsgfQorCisgICAg
dXNpbmcgUmVmQ291bnRlZDxET01BcHBsaWNhdGlvbkNhY2hlPjo6cmVmOworICAgIHVzaW5nIFJl
ZkNvdW50ZWQ8RE9NQXBwbGljYXRpb25DYWNoZT46OmRlcmVmOworCisgICAgdm9pZCBzZXRPbmNo
ZWNraW5nKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uQ2hl
Y2tpbmdMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbmNo
ZWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9vbkNoZWNraW5nTGlzdGVuZXIuZ2V0KCk7IH0KKwor
ICAgIHZvaWQgc2V0T25lcnJvcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVu
ZXIpIHsgbV9vbkVycm9yTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9CisgICAgRXZlbnRMaXN0
ZW5lciogb25lcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fb25FcnJvckxpc3RlbmVyLmdldCgpOyB9
CisKKyAgICB2b2lkIHNldE9ubm91cGRhdGUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVu
dExpc3RlbmVyKSB7IG1fb25Ob1VwZGF0ZUxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQorICAg
IEV2ZW50TGlzdGVuZXIqIG9ubm91cGRhdGUoKSBjb25zdCB7IHJldHVybiBtX29uTm9VcGRhdGVM
aXN0ZW5lci5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRPbmRvd25sb2FkaW5nKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uRG93bmxvYWRpbmdMaXN0ZW5lciA9
IGV2ZW50TGlzdGVuZXI7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbmRvd25sb2FkaW5nKCkgY29u
c3QgeyByZXR1cm4gbV9vbkRvd25sb2FkaW5nTGlzdGVuZXIuZ2V0KCk7IH0KKyAgICAKKyAgICB2
b2lkIHNldE9ucHJvZ3Jlc3MoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KSB7IG1fb25Qcm9ncmVzc0xpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQorICAgIEV2ZW50TGlz
dGVuZXIqIG9ucHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX29uUHJvZ3Jlc3NMaXN0ZW5lci5n
ZXQoKTsgfQorCisgICAgdm9pZCBzZXRPbnVwZGF0ZXJlYWR5KFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uVXBkYXRlUmVhZHlMaXN0ZW5lciA9IGV2ZW50TGlz
dGVuZXI7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbnVwZGF0ZXJlYWR5KCkgY29uc3QgeyByZXR1
cm4gbV9vblVwZGF0ZVJlYWR5TGlzdGVuZXIuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0T25jYWNo
ZWQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25DYWNoZWRM
aXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbmNhY2hlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fb25DYWNoZWRMaXN0ZW5lci5nZXQoKTsgfQorCisgICAgdm9pZCBz
ZXRPbm9ic29sZXRlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBt
X29uT2Jzb2xldGVMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICBFdmVudExpc3RlbmVy
KiBvbm9ic29sZXRlKCkgY29uc3QgeyByZXR1cm4gbV9vbk9ic29sZXRlTGlzdGVuZXIuZ2V0KCk7
IH0KKworICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGNvbnN0OworICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIHRvRE9NQXBwbGljYXRp
b25DYWNoZSgpIHsgcmV0dXJuIHRoaXM7IH0KKworICAgIHZvaWQgY2FsbENoZWNraW5nTGlzdGVu
ZXIoKTsKKyAgICB2b2lkIGNhbGxFcnJvckxpc3RlbmVyKCk7ICAgIAorICAgIHZvaWQgY2FsbE5v
VXBkYXRlTGlzdGVuZXIoKTsgICAgCisgICAgdm9pZCBjYWxsRG93bmxvYWRpbmdMaXN0ZW5lcigp
OworICAgIHZvaWQgY2FsbFByb2dyZXNzTGlzdGVuZXIoKTsKKyAgICB2b2lkIGNhbGxVcGRhdGVS
ZWFkeUxpc3RlbmVyKCk7CisgICAgdm9pZCBjYWxsQ2FjaGVkTGlzdGVuZXIoKTsKKyAgICB2b2lk
IGNhbGxPYnNvbGV0ZUxpc3RlbmVyKCk7CisgICAgCitwcml2YXRlOgorICAgIERPTUFwcGxpY2F0
aW9uQ2FjaGUoRnJhbWUqKTsKKyAgICB2b2lkIGNhbGxMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciopOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBy
ZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRh
cmdldCgpIHsgZGVyZWYoKTsgfQorCisgICAgQXBwbGljYXRpb25DYWNoZSogYXNzb2NpYXRlZENh
Y2hlKCkgY29uc3Q7CisgICAgYm9vbCBzd2FwQ2FjaGUoKTsKKyAgICAKKyAgICBSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbV9vbkNoZWNraW5nTGlzdGVuZXI7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IG1fb25FcnJvckxpc3RlbmVyOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uTm9V
cGRhdGVMaXN0ZW5lcjsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbkRvd25sb2FkaW5n
TGlzdGVuZXI7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25Qcm9ncmVzc0xpc3RlbmVy
OworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uVXBkYXRlUmVhZHlMaXN0ZW5lcjsKKyAg
ICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbkNhY2hlZExpc3RlbmVyOworICAgIFJlZlB0cjxF
dmVudExpc3RlbmVyPiBtX29uT2Jzb2xldGVMaXN0ZW5lcjsKKyAgICAKKyAgICBFdmVudExpc3Rl
bmVyc01hcCBtX2V2ZW50TGlzdGVuZXJzOworCisgICAgRnJhbWUqIG1fZnJhbWU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoT0ZGTElORV9XRUJfQVBQ
TElDQVRJT05TKQorCisjZW5kaWYgLy8gRE9NQXBwbGljYXRpb25DYWNoZV9oCkluZGV4OiBsb2Fk
ZXIvYXBwY2FjaGUyL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIv
YXBwY2FjaGUyL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaAkocmV2aXNpb24gMCkKKysrIGxvYWRlci9h
cHBjYWNoZTIvRE9NQXBwbGljYXRpb25DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsy
Niw5IEBACiAjaWZuZGVmIERPTUFwcGxpY2F0aW9uQ2FjaGVfaAogI2RlZmluZSBET01BcHBsaWNh
dGlvbkNhY2hlX2gKIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaWYg
RU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQogCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUZy
b250ZW5kLmgiCiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIkV2ZW50
VGFyZ2V0LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgpAQCAtMzgsMTUgKzM5LDE2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQXBwbGljYXRpb25DYWNoZTsKIGNsYXNz
IEF0b21pY1N0cmluZ0ltcGw7CiBjbGFzcyBET01TdHJpbmdMaXN0OwogY2xhc3MgRnJhbWU7CiBj
bGFzcyBLVVJMOwogY2xhc3MgU3RyaW5nOwogICAgIAotY2xhc3MgRE9NQXBwbGljYXRpb25DYWNo
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPERPTUFwcGxpY2F0aW9uQ2FjaGU+LCBwdWJsaWMgRXZlbnRU
YXJnZXQgeworY2xhc3MgRE9NQXBwbGljYXRpb25DYWNoZSA6IHB1YmxpYyBSZWZDb3VudGVkPERP
TUFwcGxpY2F0aW9uQ2FjaGU+LCBwdWJsaWMgRXZlbnRUYXJnZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZDo6RGVsZWdhdGUgewog
cHVibGljOgorICAgIC8vIEZJWE1FOiBpbnRlZ3JhdGUgd2l0aCB3b3JrZXJzCiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RE9NQXBwbGljYXRpb25DYWNoZT4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IERPTUFwcGxpY2F0aW9uQ2FjaGUoZnJhbWUpKTsgfQogICAgIHZv
aWQgZGlzY29ubmVjdEZyYW1lKCk7CiAKQEAgLTYwLDE1ICs2Miw5IEBAIHB1YmxpYzoKICAgICB9
OwogCiAgICAgdW5zaWduZWQgc2hvcnQgc3RhdHVzKCkgY29uc3Q7Ci0gICAgCiAgICAgdm9pZCB1
cGRhdGUoRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgc3dhcENhY2hlKEV4Y2VwdGlvbkNvZGUm
KTsKICAgICAKLSAgICBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGl0ZW1zKCk7Ci0gICAgYm9v
bCBoYXNJdGVtKGNvbnN0IEtVUkwmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBhZGQoY29u
c3QgS1VSTCYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHJlbW92ZShjb25zdCBLVVJMJiwg
RXhjZXB0aW9uQ29kZSYpOwotCiAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJv
b2wgdXNlQ2FwdHVyZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1
cmUpOwogICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBF
eGNlcHRpb25Db2RlJik7CkBAIC0xMTUsMTUgKzExMSwzMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
YWxsVXBkYXRlUmVhZHlMaXN0ZW5lcigpOwogICAgIHZvaWQgY2FsbENhY2hlZExpc3RlbmVyKCk7
CiAgICAgdm9pZCBjYWxsT2Jzb2xldGVMaXN0ZW5lcigpOworCisjaWYgVVNFKFY4KQorICAgIEV2
ZW50TGlzdGVuZXIqIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUpOworICAgIHZvaWQgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5l
cik7CisgICAgdm9pZCBjbGVhckF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUpOworI2VuZGlmCiAgICAgCiBwcml2YXRlOgogICAgIERPTUFwcGxpY2F0
aW9uQ2FjaGUoRnJhbWUqKTsKKworICAgIC8vIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZDo6RGVs
ZWdhdGUgaW50ZXJmYWNlCisgICAgdmlydHVhbCB2b2lkIG9uQ2hlY2tpbmcoQXBwbGljYXRpb25D
YWNoZUZyb250ZW5kKiBjYWNoZSkgeyBjYWxsQ2hlY2tpbmdMaXN0ZW5lcigpOyB9CisgICAgdmly
dHVhbCB2b2lkIG9uRXJyb3IoQXBwbGljYXRpb25DYWNoZUZyb250ZW5kKiBjYWNoZSkgeyBjYWxs
RXJyb3JMaXN0ZW5lcigpOyB9CisgICAgdmlydHVhbCB2b2lkIG9uTm9VcGRhdGUoQXBwbGljYXRp
b25DYWNoZUZyb250ZW5kKiBjYWNoZSkgeyBjYWxsTm9VcGRhdGVMaXN0ZW5lcigpOyB9CisgICAg
dmlydHVhbCB2b2lkIG9uRG93bmxvYWRpbmcoQXBwbGljYXRpb25DYWNoZUZyb250ZW5kKiBjYWNo
ZSkgeyBjYWxsRG93bmxvYWRpbmdMaXN0ZW5lcigpOyB9CisgICAgdmlydHVhbCB2b2lkIG9uUHJv
Z3Jlc3MoQXBwbGljYXRpb25DYWNoZUZyb250ZW5kKiBjYWNoZSkgeyBjYWxsUHJvZ3Jlc3NMaXN0
ZW5lcigpOyB9CisgICAgdmlydHVhbCB2b2lkIG9uVXBkYXRlUmVhZHkoQXBwbGljYXRpb25DYWNo
ZUZyb250ZW5kKiBjYWNoZSkgeyBjYWxsVXBkYXRlUmVhZHlMaXN0ZW5lcigpOyB9CisgICAgdmly
dHVhbCB2b2lkIG9uQ2FjaGVkKEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCogY2FjaGUpIHsgY2Fs
bENhY2hlZExpc3RlbmVyKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25PYnNvbGV0ZShBcHBsaWNh
dGlvbkNhY2hlRnJvbnRlbmQqIGNhY2hlKSB7IGNhbGxPYnNvbGV0ZUxpc3RlbmVyKCk7IH0KKwog
ICAgIHZvaWQgY2FsbExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVu
dExpc3RlbmVyKik7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyBy
ZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9
CiAKLSAgICBBcHBsaWNhdGlvbkNhY2hlKiBhc3NvY2lhdGVkQ2FjaGUoKSBjb25zdDsKKyAgICBB
cHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQqIGFwcGNhY2hlRnJvbnRlbmQoKSBjb25zdCB7IHJldHVy
biBtX2FwcGNhY2hlRnJvbnRlbmQ7IH0KICAgICBib29sIHN3YXBDYWNoZSgpOwogICAgIAogICAg
IFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uQ2hlY2tpbmdMaXN0ZW5lcjsKQEAgLTEzNCwxNCAr
MTQ3LDIwIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25VcGRhdGVS
ZWFkeUxpc3RlbmVyOwogICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uQ2FjaGVkTGlzdGVu
ZXI7CiAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25PYnNvbGV0ZUxpc3RlbmVyOwotICAg
IAorICNpZiBVU0UoVjgpCisgICAgLy8gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFwcHJvcGlh
dGUgZGF0YSBtZW1iZXIgYWJvdmUKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4qIGdldEF0dHJp
YnV0ZUV2ZW50TGlzdGVuZXJTdG9yYWdlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsK
KyNlbmRpZgorCiAgICAgRXZlbnRMaXN0ZW5lcnNNYXAgbV9ldmVudExpc3RlbmVyczsKIAorCiAg
ICAgRnJhbWUqIG1fZnJhbWU7CisgICAgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kKiBtX2FwcGNh
Y2hlRnJvbnRlbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBF
TkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2VuZGlmIC8vIEVOQUJMRShBUFBMSUNB
VElPTl9DQUNIRSkKIAogI2VuZGlmIC8vIERPTUFwcGxpY2F0aW9uQ2FjaGVfaAoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogbG9hZGVyL2FwcGNhY2hlMi9ET01BcHBsaWNhdGlvbkNhY2hlLmgKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOm1lcmdlaW5mbwoKSW5kZXg6IGxvYWRlci9hcHBjYWNoZTIvRE9NQXBw
bGljYXRpb25DYWNoZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL2FwcGNhY2hlMi9ET01BcHBs
aWNhdGlvbkNhY2hlLmlkbAkocmV2aXNpb24gNDQxNjMpCShmcm9tIGxvYWRlci9hcHBjYWNoZS9E
T01BcHBsaWNhdGlvbkNhY2hlLmlkbDo0NDE2MykKKysrIGxvYWRlci9hcHBjYWNoZTIvRE9NQXBw
bGljYXRpb25DYWNoZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworIAorbW9kdWxlIG9m
ZmxpbmUgeworIAorICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPU9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUywKKyAgICAgICAgQ3VzdG9tTWFya0Z1bmN0aW9uCisgICAgXSBET01B
cHBsaWNhdGlvbkNhY2hlIHsKKyAgICAgICAgLy8gdXBkYXRlIHN0YXR1cworICAgICAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCBVTkNBQ0hFRCA9IDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IElETEUgPSAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDSEVDS0lORyA9IDI7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPV05MT0FESU5HID0gMzsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgVVBEQVRFUkVBRFkgPSA0OworICAgICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBPQlNPTEVURSA9IDU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNp
Z25lZCBzaG9ydCBzdGF0dXM7CisKKyAgICAgICAgdm9pZCB1cGRhdGUoKQorICAgICAgICAgICAg
cmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgc3dhcENhY2hlKCkKKyAgICAgICAg
ICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworCisjaWYgZGVmaW5lZChFTkFCTEVfQVBQTElDQVRJ
T05fQ0FDSEVfRFlOQU1JQ19FTlRSSUVTKSAmJiBFTkFCTEVfQVBQTElDQVRJT05fQ0FDSEVfRFlO
QU1JQ19FTlRSSUVTCisgICAgICAgIC8vIGR5bmFtaWMgZW50cmllcworICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nTGlzdCBpdGVtczsKKyAgICAgICAgW0N1c3RvbV0gYm9vbGVh
biBoYXNJdGVtKGluIERPTVN0cmluZyB1cmwpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0
aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBhZGQoaW4gRE9NU3RyaW5nIHVyaSkKKyAgICAg
ICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHJlbW92
ZShpbiBET01TdHJpbmcgdXJpKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7Cisj
ZW5kaWYKKworICAgICAgICAvLyBldmVudHMKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVu
ZXIgb25jaGVja2luZzsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsK
KyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25ub3VwZGF0ZTsKKyAgICAgICAgYXR0
cmlidXRlIEV2ZW50TGlzdGVuZXIgb25kb3dubG9hZGluZzsKKyAgICAgICAgYXR0cmlidXRlIEV2
ZW50TGlzdGVuZXIgb25wcm9ncmVzczsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIg
b251cGRhdGVyZWFkeTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25jYWNoZWQ7
CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ub2Jzb2xldGU7CisKKyAgICAgICAg
Ly8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCisgICAgICAgIFtDdXN0b21dIHZvaWQgYWRkRXZlbnRM
aXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIFtD
dXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxp
c3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJv
b2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVu
dCBldnQpCisgICAgICAgICAgICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOworICAgIH07CisKK30K
SW5kZXg6IGxvYWRlci9hcHBjYWNoZTIvRE9NQXBwbGljYXRpb25DYWNoZS5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gbG9hZGVyL2FwcGNhY2hlMi9ET01BcHBsaWNhdGlvbkNhY2hlLmlkbAkocmV2aXNpb24g
MCkKKysrIGxvYWRlci9hcHBjYWNoZTIvRE9NQXBwbGljYXRpb25DYWNoZS5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDEwICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KICAKLW1vZHVs
ZSBvZmZsaW5lIHsKK21vZHVsZSBhcHBjYWNoZSB7CiAgCiAgICAgaW50ZXJmYWNlIFsKLSAgICAg
ICAgQ29uZGl0aW9uYWw9T0ZGTElORV9XRUJfQVBQTElDQVRJT05TLAorICAgICAgICBDb25kaXRp
b25hbD1BUFBMSUNBVElPTl9DQUNIRSwKICAgICAgICAgQ3VzdG9tTWFya0Z1bmN0aW9uCiAgICAg
XSBET01BcHBsaWNhdGlvbkNhY2hlIHsKICAgICAgICAgLy8gdXBkYXRlIHN0YXR1cwpAQCAtNDMs
MTcgKzQzLDYgQEAgbW9kdWxlIG9mZmxpbmUgewogICAgICAgICB2b2lkIHN3YXBDYWNoZSgpCiAg
ICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAotI2lmIGRlZmluZWQoRU5BQkxFX0FQ
UExJQ0FUSU9OX0NBQ0hFX0RZTkFNSUNfRU5UUklFUykgJiYgRU5BQkxFX0FQUExJQ0FUSU9OX0NB
Q0hFX0RZTkFNSUNfRU5UUklFUwotICAgICAgICAvLyBkeW5hbWljIGVudHJpZXMKLSAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZ0xpc3QgaXRlbXM7Ci0gICAgICAgIFtDdXN0b21d
IGJvb2xlYW4gaGFzSXRlbShpbiBET01TdHJpbmcgdXJsKQotICAgICAgICAgICAgcmFpc2VzKERP
TUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgYWRkKGluIERPTVN0cmluZyB1cmkp
Ci0gICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgW0N1c3RvbV0gdm9p
ZCByZW1vdmUoaW4gRE9NU3RyaW5nIHVyaSkKLSAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRp
b24pOwotI2VuZGlmCi0KICAgICAgICAgLy8gZXZlbnRzCiAgICAgICAgIGF0dHJpYnV0ZSBFdmVu
dExpc3RlbmVyIG9uY2hlY2tpbmc7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9u
ZXJyb3I7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBsb2FkZXIvYXBwY2FjaGUyL0RPTUFwcGxpY2F0
aW9uQ2FjaGUuaWRsCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptZXJnZWluZm8KCkluZGV4OiBwYWdl
L0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lv
biA0NDE2MykKKysrIHBhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyAr
NzYsNyBAQAogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAjZW5kaWYKIAotI2lmIEVOQUJMRShP
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykgfHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQogI2luY2x1ZGUgIkRPTUFwcGxpY2F0
aW9uQ2FjaGUuaCIKICNlbmRpZgogCkBAIC00MzUsNyArNDM1LDcgQEAgdm9pZCBET01XaW5kb3c6
OmNsZWFyKCkKICAgICBtX2xvY2FsU3RvcmFnZSA9IDA7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShP
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykgfHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQogICAgIGlmIChtX2FwcGxpY2F0aW9u
Q2FjaGUpCiAgICAgICAgIG1fYXBwbGljYXRpb25DYWNoZS0+ZGlzY29ubmVjdEZyYW1lKCk7CiAg
ICAgbV9hcHBsaWNhdGlvbkNhY2hlID0gMDsKQEAgLTUwNSw3ICs1MDUsNyBAQCBDb25zb2xlKiBE
T01XaW5kb3c6OmNvbnNvbGUoKSBjb25zdAogICAgIHJldHVybiBtX2NvbnNvbGUuZ2V0KCk7CiB9
CiAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2lmIEVOQUJMRShPRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpIHx8IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKIERPTUFw
cGxpY2F0aW9uQ2FjaGUqIERPTVdpbmRvdzo6YXBwbGljYXRpb25DYWNoZSgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2FwcGxpY2F0aW9uQ2FjaGUpCkluZGV4OiBwYWdlL0RPTVdpbmRvdy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHBhZ2UvRE9NV2luZG93LmgJKHJldmlzaW9uIDQ0MTYzKQorKysgcGFnZS9ET01X
aW5kb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgU3RvcmFnZTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VC
X0FQUExJQ0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSB8fCBF
TkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiAgICAgY2xhc3MgRE9NQXBwbGljYXRpb25DYWNoZTsK
ICNlbmRpZgogCkBAIC0xOTYsNyArMTk2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIENvbnNvbGUqIGNvbnNvbGUoKSBjb25zdDsKIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9B
UFBMSUNBVElPTlMpCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5B
QkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQogICAgICAgICBET01BcHBsaWNhdGlvbkNhY2hlKiBhcHBs
aWNhdGlvbkNhY2hlKCkgY29uc3Q7CiAjZW5kaWYKIApAQCAtMzIxLDcgKzMyMSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3RvcmFnZSogb3B0aW9uYWxTZXNzaW9uU3RvcmFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvblN0b3JhZ2UuZ2V0KCk7IH0KICAgICAgICAgU3RvcmFn
ZSogb3B0aW9uYWxMb2NhbFN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsU3RvcmFnZS5n
ZXQoKTsgfQogI2VuZGlmCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNp
ZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSB8fCBFTkFCTEUoQVBQTElDQVRJT05f
Q0FDSEUpCiAgICAgICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIG9wdGlvbmFsQXBwbGljYXRpb25D
YWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbGljYXRpb25DYWNoZS5nZXQoKTsgfQogI2VuZGlm
CiAKQEAgLTM1Niw3ICszNTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIG11dGFi
bGUgUmVmUHRyPFN0b3JhZ2U+IG1fc2Vzc2lvblN0b3JhZ2U7CiAgICAgICAgIG11dGFibGUgUmVm
UHRyPFN0b3JhZ2U+IG1fbG9jYWxTdG9yYWdlOwogI2VuZGlmCi0jaWYgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSB8
fCBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiAgICAgICAgIG11dGFibGUgUmVmUHRyPERPTUFw
cGxpY2F0aW9uQ2FjaGU+IG1fYXBwbGljYXRpb25DYWNoZTsKICNlbmRpZgogCkluZGV4OiBwYWdl
L0RPTVdpbmRvdy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9ET01XaW5kb3cuaWRsCShyZXZpc2lv
biA0NDE2MykKKysrIHBhZ2UvRE9NV2luZG93LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcg
KzE1Miw3IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBXZWJLaXRQb2ludCB3ZWJraXRDb252
ZXJ0UG9pbnRGcm9tUGFnZVRvTm9kZShpbiBOb2RlIG5vZGUsIGluIFdlYktpdFBvaW50IHApOwog
ICAgICAgICBXZWJLaXRQb2ludCB3ZWJraXRDb252ZXJ0UG9pbnRGcm9tTm9kZVRvUGFnZShpbiBO
b2RlIG5vZGUsIGluIFdlYktpdFBvaW50IHApOwogCi0jaWYgZGVmaW5lZChFTkFCTEVfT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKSAmJiBFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TCisj
aWYgKGRlZmluZWQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgJiYgRU5BQkxFX09G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgKGRlZmluZWQoRU5BQkxFX0FQUExJQ0FUSU9OX0NB
Q0hFKSAmJiBFTkFCTEVfQVBQTElDQVRJT05fQ0FDSEUpCiAgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01BcHBsaWNhdGlvbkNhY2hlIGFwcGxpY2F0aW9uQ2FjaGU7CiAjZW5kaWYgICAgCiAj
aWYgZGVmaW5lZChFTkFCTEVfREFUQUJBU0UpICYmIEVOQUJMRV9EQVRBQkFTRQpJbmRleDogcGFn
ZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDQ0MTYz
KQorKysgcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNDgsNiArMTE0OCwxMSBA
QCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIEZyYW1lOjpvd25lckVsZW1lCiAgICAgcmV0dXJuIG1f
b3duZXJFbGVtZW50OwogfQogCitGcmFtZSogRnJhbWU6OnBhcmVudEZyYW1lKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gcGFyZW50RnJvbU93bmVyRWxlbWVudChvd25lckVsZW1lbnQoKSk7Cit9CisK
IFJlbmRlclBhcnQqIEZyYW1lOjpvd25lclJlbmRlcmVyKCkgY29uc3QKIHsKICAgICBIVE1MRnJh
bWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCA9IG1fb3duZXJFbGVtZW50OwpJbmRleDogcGFn
ZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRnJhbWUuaAkocmV2aXNpb24gNDQxNjMpCisr
KyBwYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDcgQEAgcHVibGljOgog
CiAgICAgUGFnZSogcGFnZSgpIGNvbnN0OwogICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3du
ZXJFbGVtZW50KCkgY29uc3Q7CisgICAgRnJhbWUqIHBhcmVudEZyYW1lKCkgY29uc3Q7CiAKICAg
ICB2b2lkIHBhZ2VEZXN0cm95ZWQoKTsKICAgICB2b2lkIGRpc2Nvbm5lY3RPd25lckVsZW1lbnQo
KTsKSW5kZXg6IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAkocmV2aXNp
b24gNDQxNjMpCisrKyBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw5IEBAIGF1dG9fcHRyPFJlc291cmNlUmVxdWVzdD4g
UmVzb3VyY2VSZXF1ZXMKICAgICB9CiAgICAgcmVxdWVzdC0+c2V0SFRUUEJvZHkoZGF0YS0+bV9o
dHRwQm9keSk7CiAgICAgcmVxdWVzdC0+c2V0QWxsb3dIVFRQQ29va2llcyhkYXRhLT5tX2FsbG93
SFRUUENvb2tpZXMpOworI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICByZXF1ZXN0
LT5zZXRBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEKGRhdGEtPm1fYXBwY2FjaGVDb250ZXh0SUQp
OworI2VuZGlmCiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKQEAgLTg0LDYgKzg3LDkgQEAgYXV0
b19wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPgogICAgIGlmIChtX2h0dHBCb2R5
KQogICAgICAgICBkYXRhLT5tX2h0dHBCb2R5ID0gbV9odHRwQm9keS0+ZGVlcENvcHkoKTsKICAg
ICBkYXRhLT5tX2FsbG93SFRUUENvb2tpZXMgPSBtX2FsbG93SFRUUENvb2tpZXM7CisjaWYgRU5B
QkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgIGRhdGEtPm1fYXBwY2FjaGVDb250ZXh0SUQgPSBt
X2FwcGNhY2hlQ29udGV4dElEOworI2VuZGlmCiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKSW5kZXg6
IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShyZXZpc2lvbiA0NDE2MykKKysr
IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw5IEBACiAjaW5jbHVkZSAiRm9ybURhdGEuaCIKICNpbmNsdWRlICJLVVJMLmgi
CiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNI
RSkKKyNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlQ29tbW9uLmgiCisjZW5kaWYKIAogI2luY2x1
ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC0xMTUsNiArMTE4LDEyIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCByZXBvcnRVcGxvYWRQcm9ncmVzcygp
IGNvbnN0IHsgcmV0dXJuIG1fcmVwb3J0VXBsb2FkUHJvZ3Jlc3M7IH0KICAgICAgICAgdm9pZCBz
ZXRSZXBvcnRVcGxvYWRQcm9ncmVzcyhib29sIHJlcG9ydFVwbG9hZFByb2dyZXNzKSB7IG1fcmVw
b3J0VXBsb2FkUHJvZ3Jlc3MgPSByZXBvcnRVcGxvYWRQcm9ncmVzczsgfQogCisjaWYgRU5BQkxF
KEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgICAgICAvLyBBbGxvd3MgdGhlIHJlcXVlc3QgdG8gYmUg
bWF0Y2hlZCB1cCB3aXRoIGl0cyBjYWNoZSBjb250ZXh0LgorICAgICAgICBHbG9iYWxBcHBsaWNh
dGlvbkNhY2hlQ29udGV4dElEIGFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQoKSBjb25zdCB7IHJl
dHVybiBtX2FwcGNhY2hlQ29udGV4dElEOyB9CisgICAgICAgIHZvaWQgc2V0QXBwbGljYXRpb25D
YWNoZUNvbnRleHRJRChHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEIGlkKSB7IG1fYXBw
Y2FjaGVDb250ZXh0SUQgPSBpZDsgfQorI2VuZGlmCisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
IC8vIFVzZWQgd2hlbiBSZXNvdXJjZVJlcXVlc3QgaXMgaW5pdGlhbGl6ZWQgZnJvbSBhIHBsYXRm
b3JtIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXF1ZXN0CiAgICAgICAgIFJlc291cmNlUmVxdWVz
dEJhc2UoKQpAQCAtMTUyLDcgKzE2MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
bXV0YWJsZSBib29sIG1fcmVzb3VyY2VSZXF1ZXN0VXBkYXRlZDsKICAgICAgICAgbXV0YWJsZSBi
b29sIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZDsKICAgICAgICAgYm9vbCBtX3JlcG9ydFVwbG9h
ZFByb2dyZXNzOwotCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgICAgICBHbG9i
YWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEIG1fYXBwY2FjaGVDb250ZXh0SUQ7CisjZW5kaWYK
ICAgICBwcml2YXRlOgogICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGFzUmVzb3VyY2VS
ZXF1ZXN0KCkgY29uc3Q7CiAgICAgfTsKQEAgLTE3NCw2ICsxODUsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRp
b25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk7CiAgICAgICAgIFJlZlB0cjxGb3JtRGF0YT4gbV9odHRw
Qm9keTsKICAgICAgICAgYm9vbCBtX2FsbG93SFRUUENvb2tpZXM7CisjaWYgRU5BQkxFKEFQUExJ
Q0FUSU9OX0NBQ0hFKQorICAgICAgICBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEIG1f
YXBwY2FjaGVDb250ZXh0SUQ7CisjZW5kaWYKICAgICB9OwogICAgIAogICAgIHVuc2lnbmVkIGlu
aXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsKSW5kZXg6IHBsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCShyZXZpc2lvbiA0NDE2MykKKysr
IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NSw2ICs1NSwxMCBAQCBhdXRvX3B0cjxSZXNvdXJjZVJlc3BvbnNlPiBSZXNvdXJjZVJl
c3BvCiAgICAgcmVzcG9uc2UtPm1faGF2ZVBhcnNlZENhY2hlQ29udHJvbCA9IGRhdGEtPm1faGF2
ZVBhcnNlZENhY2hlQ29udHJvbDsKICAgICByZXNwb25zZS0+bV9jYWNoZUNvbnRyb2xDb250YWlu
c011c3RSZXZhbGlkYXRlID0gZGF0YS0+bV9jYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlk
YXRlOwogICAgIHJlc3BvbnNlLT5tX2NhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSA9IGRhdGEt
Pm1fY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlOworI2lmIEVOQUJMRShBUFBMSUNBVElPTl9D
QUNIRSkKKyAgICByZXNwb25zZS0+bV9hcHBjYWNoZUlEID0gZGF0YS0+bV9hcHBjYWNoZUlEOwor
ICAgIHJlc3BvbnNlLT5tX21hbmlmZXN0VVJMID0gZGF0YS0+bV9tYW5pZmVzdFVSTDsKKyNlbmRp
ZgogICAgIHJldHVybiByZXNwb25zZTsKIH0KIApAQCAtNzQsNiArNzgsMTAgQEAgYXV0b19wdHI8
Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YQogICAgIGRhdGEtPm1faGF2ZVBhcnNlZENh
Y2hlQ29udHJvbCA9IG1faGF2ZVBhcnNlZENhY2hlQ29udHJvbDsKICAgICBkYXRhLT5tX2NhY2hl
Q29udHJvbENvbnRhaW5zTXVzdFJldmFsaWRhdGUgPSBtX2NhY2hlQ29udHJvbENvbnRhaW5zTXVz
dFJldmFsaWRhdGU7CiAgICAgZGF0YS0+bV9jYWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGUgPSBt
X2NhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZTsKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FD
SEUpCisgICAgZGF0YS0+bV9hcHBjYWNoZUlEID0gbV9hcHBjYWNoZUlEOworICAgIGRhdGEtPm1f
bWFuaWZlc3RVUkwgPSBtX21hbmlmZXN0VVJMOworI2VuZGlmCiAgICAgcmV0dXJuIGRhdGE7CiB9
CiAKSW5kZXg6IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHJldmlzaW9u
IDQ0MTYzKQorKysgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBACiAKICNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgi
CiAjaW5jbHVkZSAiS1VSTC5oIgorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyNpbmNs
dWRlICJBcHBsaWNhdGlvbkNhY2hlQ29tbW9uLmgiCisjZW5kaWYKIAogI2luY2x1ZGUgPG1lbW9y
eT4KIApAQCAtODQsNiArODcsMTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGFzdE1vZGlmaWVk
RGF0ZSh0aW1lX3QpOwogICAgIHRpbWVfdCBsYXN0TW9kaWZpZWREYXRlKCkgY29uc3Q7CiAKKyNp
ZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisgICAgdm9pZCBzZXRBcHBsaWNhdGlvbkNhY2hl
SUQoQXBwbGljYXRpb25DYWNoZUlEIGNhY2hlSUQpIHsgbV9hcHBjYWNoZUlEID0gY2FjaGVJRDsg
fQorICAgIEFwcGxpY2F0aW9uQ2FjaGVJRCBhcHBsaWNhdGlvbkNhY2hlSUQoKSBjb25zdCB7IHJl
dHVybiBtX2FwcGNhY2hlSUQ7IH0KKworICAgIHZvaWQgc2V0TWFuaWZlc3RVUkwoS1VSTCYgbWFu
aWZlc3RVUkwpIHsgbV9tYW5pZmVzdFVSTCA9IG1hbmlmZXN0VVJMOyB9CisgICAgY29uc3QgS1VS
TCYgbWFuaWZlc3RVUkwoKSBjb25zdCB7IHJldHVybiBtX21hbmlmZXN0VVJMOyB9CisjZW5kaWYK
KwogICAgIGJvb2wgY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIGlmICghbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sKQpAQCAtMTEyLDYgKzEyMyw5IEBA
IHByb3RlY3RlZDoKICAgICAgICAgLCBtX2h0dHBTdGF0dXNDb2RlKDApCiAgICAgICAgICwgbV9l
eHBpcmF0aW9uRGF0ZSgwKQogICAgICAgICAsIG1fbGFzdE1vZGlmaWVkRGF0ZSgwKQorI2lmIEVO
QUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICAgICAgLCBtX2FwcGNhY2hlSUQoTm9BcHBsaWNh
dGlvbkNhY2hlSUQpCisjZW5kaWYKICAgICAgICAgLCBtX2lzTnVsbCh0cnVlKQogICAgICAgICAs
IG1faGF2ZVBhcnNlZENhY2hlQ29udHJvbChmYWxzZSkKICAgICB7CkBAIC0xMjYsNiArMTQwLDkg
QEAgcHJvdGVjdGVkOgogICAgICAgICAsIG1faHR0cFN0YXR1c0NvZGUoMCkKICAgICAgICAgLCBt
X2V4cGlyYXRpb25EYXRlKDApCiAgICAgICAgICwgbV9sYXN0TW9kaWZpZWREYXRlKDApCisjaWYg
RU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgICAgICAsIG1fYXBwY2FjaGVJRChOb0FwcGxp
Y2F0aW9uQ2FjaGVJRCkKKyNlbmRpZgogICAgICAgICAsIG1faXNOdWxsKGZhbHNlKQogICAgICAg
ICAsIG1faGF2ZVBhcnNlZENhY2hlQ29udHJvbChmYWxzZSkKICAgICB7CkBAIC0xNDksNiArMTY2
LDEwIEBAIHByb3RlY3RlZDoKICAgICBIVFRQSGVhZGVyTWFwIG1faHR0cEhlYWRlckZpZWxkczsK
ICAgICB0aW1lX3QgbV9leHBpcmF0aW9uRGF0ZTsKICAgICB0aW1lX3QgbV9sYXN0TW9kaWZpZWRE
YXRlOworI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICBLVVJMIG1fbWFuaWZlc3RV
Ukw7CisgICAgQXBwbGljYXRpb25DYWNoZUlEIG1fYXBwY2FjaGVJRDsKKyNlbmRpZgogICAgIGJv
b2wgbV9pc051bGwgOiAxOwogCiBwcml2YXRlOgpAQCAtMTczLDYgKzE5NCwxMCBAQCBzdHJ1Y3Qg
Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YSB7CiAgICAgT3duUHRyPENyb3NzVGhyZWFk
SFRUUEhlYWRlck1hcERhdGE+IG1faHR0cEhlYWRlcnM7CiAgICAgdGltZV90IG1fZXhwaXJhdGlv
bkRhdGU7CiAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVkRGF0ZTsKKyNpZiBFTkFCTEUoQVBQTElD
QVRJT05fQ0FDSEUpCisgICAgQXBwbGljYXRpb25DYWNoZUlEIG1fYXBwY2FjaGVJRDsKKyAgICBL
VVJMIG1fbWFuaWZlc3RVUkw7CisjZW5kaWYKICAgICBib29sIG1faGF2ZVBhcnNlZENhY2hlQ29u
dHJvbCA6IDE7CiAgICAgYm9vbCBtX2NhY2hlQ29udHJvbENvbnRhaW5zTXVzdFJldmFsaWRhdGUg
OiAxOwogICAgIGJvb2wgbV9jYWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGUgOiAxOwpJbmRleDog
cGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVxdWVzdC5oCShyZXZpc2lvbiA0
NDE2MykKKysrIHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXF1ZXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKEtVUkwodXJsKSwgVXNlUHJvdG9jb2xDYWNoZVBv
bGljeSkKICAgICAgICAgICAgICwgbV9yZXF1ZXN0b3JJRCgwKQogICAgICAgICAgICAgLCBtX3Jl
cXVlc3RvclByb2Nlc3NJRCgwKQotICAgICAgICAgICAgLCBtX2FwcENhY2hlQ29udGV4dElEKDAp
CiAgICAgICAgICAgICAsIG1fdGFyZ2V0VHlwZShUYXJnZXRJc1N1YlJlc291cmNlKQogICAgICAg
ICB7CiAgICAgICAgIH0KQEAgLTU4LDcgKzU3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHVybCwgVXNlUHJvdG9jb2xDYWNoZVBvbGlj
eSkKICAgICAgICAgICAgICwgbV9yZXF1ZXN0b3JJRCgwKQogICAgICAgICAgICAgLCBtX3JlcXVl
c3RvclByb2Nlc3NJRCgwKQotICAgICAgICAgICAgLCBtX2FwcENhY2hlQ29udGV4dElEKDApCiAg
ICAgICAgICAgICAsIG1fdGFyZ2V0VHlwZShUYXJnZXRJc1N1YlJlc291cmNlKQogICAgICAgICAg
ICAgLCBtX3NlY3VyaXR5SW5mbyhzZWN1cml0eUluZm8pCiAgICAgICAgIHsKQEAgLTY4LDcgKzY2
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RC
YXNlKHVybCwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKICAgICAgICAgICAgICwgbV9yZXF1ZXN0
b3JJRCgwKQogICAgICAgICAgICAgLCBtX3JlcXVlc3RvclByb2Nlc3NJRCgwKQotICAgICAgICAg
ICAgLCBtX2FwcENhY2hlQ29udGV4dElEKDApCiAgICAgICAgICAgICAsIG1fdGFyZ2V0VHlwZShU
YXJnZXRJc1N1YlJlc291cmNlKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTc3LDcgKzc0LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNl
KHVybCwgcG9saWN5KQogICAgICAgICAgICAgLCBtX3JlcXVlc3RvcklEKDApCiAgICAgICAgICAg
ICAsIG1fcmVxdWVzdG9yUHJvY2Vzc0lEKDApCi0gICAgICAgICAgICAsIG1fYXBwQ2FjaGVDb250
ZXh0SUQoMCkKICAgICAgICAgICAgICwgbV90YXJnZXRUeXBlKFRhcmdldElzU3ViUmVzb3VyY2Up
CiAgICAgICAgIHsKICAgICAgICAgICAgIHNldEhUVFBSZWZlcnJlcihyZWZlcnJlcik7CkBAIC04
Nyw3ICs4Myw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIDogUmVzb3VyY2VS
ZXF1ZXN0QmFzZShLVVJMKCksIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCiAgICAgICAgICAgICAs
IG1fcmVxdWVzdG9ySUQoMCkKICAgICAgICAgICAgICwgbV9yZXF1ZXN0b3JQcm9jZXNzSUQoMCkK
LSAgICAgICAgICAgICwgbV9hcHBDYWNoZUNvbnRleHRJRCgwKQogICAgICAgICAgICAgLCBtX3Rh
cmdldFR5cGUoVGFyZ2V0SXNTdWJSZXNvdXJjZSkKICAgICAgICAgewogICAgICAgICB9CkBAIC0x
MDcsMTAgKzEwMiw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IHJlcXVlc3Rv
clByb2Nlc3NJRCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdG9yUHJvY2Vzc0lEOyB9CiAgICAg
ICAgIHZvaWQgc2V0UmVxdWVzdG9yUHJvY2Vzc0lEKGludCByZXF1ZXN0b3JQcm9jZXNzSUQpIHsg
bV9yZXF1ZXN0b3JQcm9jZXNzSUQgPSByZXF1ZXN0b3JQcm9jZXNzSUQ7IH0KIAotICAgICAgICAv
LyBBbGxvd3MgdGhlIHJlcXVlc3QgdG8gYmUgbWF0Y2hlZCB1cCB3aXRoIGl0cyBhcHAgY2FjaGUg
Y29udGV4dC4KLSAgICAgICAgaW50IGFwcENhY2hlQ29udGV4dElEKCkgY29uc3QgeyByZXR1cm4g
bV9hcHBDYWNoZUNvbnRleHRJRDsgfQotICAgICAgICB2b2lkIHNldEFwcENhY2hlQ29udGV4dElE
KGludCBpZCkgeyBtX2FwcENhY2hlQ29udGV4dElEID0gaWQ7IH0KLQogICAgICAgICAvLyBPcGFx
dWUgYnVmZmVyIHRoYXQgZGVzY3JpYmVzIHRoZSBzZWN1cml0eSBzdGF0ZSAoaW5jbHVkaW5nIFNT
TAogICAgICAgICAvLyBjb25uZWN0aW9uIHN0YXRlKSBmb3IgdGhlIHJlc291cmNlIHRoYXQgc2hv
dWxkIGJlIHJlcG9ydGVkIHdoZW4gdGhlCiAgICAgICAgIC8vIHJlc291cmNlIGhhcyBiZWVuIGxv
YWRlZC4gIFRoaXMgaXMgdXNlZCB0byBzaW11bGF0ZSBzZWN1cmUKQEAgLTEyOCw3ICsxMTksNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgaW50IG1fcmVxdWVzdG9ySUQ7CiAgICAg
ICAgIGludCBtX3JlcXVlc3RvclByb2Nlc3NJRDsKLSAgICAgICAgaW50IG1fYXBwQ2FjaGVDb250
ZXh0SUQ7CiAgICAgICAgIFRhcmdldFR5cGUgbV90YXJnZXRUeXBlOwogICAgICAgICBDU3RyaW5n
IG1fc2VjdXJpdHlJbmZvOwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30744</attachid>
            <date>2009-05-28 12:45:23 -0700</date>
            <delta_ts>2009-06-23 12:30:16 -0700</delta_ts>
            <desc>ApplicationCacheFrontend interface and usage (rev 3)</desc>
            <filename>appcache1.3.diff</filename>
            <type>text/plain</type>
            <size>80350</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ0MTk3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDktMDUt
MjcgIE1pY2hhZWwgTm9yZG1hbiAgPG1pY2hhZWxuQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI1NDM2CisgICAgICAgIFJlZmFjdG9yIGFwcENhY2hlIGZvciB1
c2UgaW4gbXVsdGktcHJvY2VzcyBicm93c2VycworCisgICAgICAgIDEpIFRoaXMgaW5pdGlhbCBw
YXRjaCBpcyBtb3N0bHkgYWJvdXQgYWxsb3dpbmcgZGV2ZWxvcG1lbnQgb2YgYSBuZXcgYXBwY2Fj
aGUgc3lzdGVtCisgICAgICAgIHdpdGhvdXQgZGlzcnVwdGluZyB0aGUgZXhpc3Rpbmcgc3lzdGVt
LiBJdCBpbnRyb2R1Y2VzIGEgbmV3IEVOQUJMRSBmbGFnIGZvciB0aGUKKyAgICAgICAgbmV3IHN5
c3RlbSwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKSwgd2hpbGUgbGVhdmluZyB0aGUgZmxhZyBm
b3IgdGhlIGV4aXN0aW5nCisgICAgICAgIHN5c3RlbSBpbiBwbGFjZSwgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykuIFRoZXJlIGlzIHNvbWUgb3ZlcmxhcCBiZXR3ZWVuCisgICAgICAg
IHRoZSB0d28gbW9zdGx5IGFyb3VuZCB0aGUgd2luZG93LmFwcGxpY2F0aW9uQ2FjaGUgYXR0cmli
dXRlLgorCisgICAgICAgIDIpIEFsc28gZGVmaW5lcyBhbiBpbnRlcmZhY2UgdG8gdGhlIG5ldyBz
eXN0ZW0gZm9yIHVzZSBpbiB0aGUgZnJvbnRlbmQsIGNsYXNzCisgICAgICAgIEFwcGxpY2F0aW9u
Q2FjaGVGcm9udGVuZC4gVGhlIGludGVyZmFjZSBpcyBiZWluZyB1c2VkIGJ5IEZyYW1lTG9hZGVy
IGFuZAorICAgICAgICBET01BcHBsaWNhdGlvbkNhY2hlIGFuZCBIVE1MSHRtbEVsZW1lbnQuIFRo
ZXJlIGlzIG9ubHkgYSBzdHViIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIHRoaXMgaW50ZXJm
YWNlIGF0IHRoaXMgdGltZSB0aGF0IGRvZXMgbm8gaGFybS4KKworICAgICAgICAzKSBBbHNvIHdp
ZGVucyB0aGUgUmVzb3VyY2VSZXF1ZXN0QmFzZSBhbmQgUmVzb3VyY2VSZXNwb25zZUJhc2UgZGF0
YSBzdHJ1Y3R1cmVzCisgICAgICAgIHdpdGggYWRkaXRpb25hbCBkYXRhIG1lbWJlcnMgdG8gcHJv
dmlkZSBhZGRpdGlvbmFsIGlucHV0cyAoYW5kIG91dHB1dHMpIHRvCisgICAgICAgIChmcm9tKSB0
aGUgYmFja2VuZCB3aGVuIGxvYWRpbmcgYSBSZXNvdXJjZUhhbmRsZS4KKworICAgICAgICA0KSBS
ZXF1aXNpdGUgY3VzdG9tIFY4QmluZGluZ3MgZm9yIHRoZSBET01BcHBsaWNhdGlvbkNhY2hlIGlu
dGVyZmFjZS4gTW9zdCBvZgorICAgICAgICB0aGUgYmluZGluZ3Mgd29yayBpc24ndCBkZXN0aW5l
ZCBmb3IgdGhlIHdlYmtpdCByZXBvc2l0b3J5IGp1c3QgeWV0LCB0aGF0IHN0dWZmCisgICAgICAg
IGlzIHN0aWxsIGJlaW5nIG1pZ3JhdGVkIG92ZXIgaW4gZ2VuZXJhbC4KKworICAgICAgICA1KSBD
aGFuZ2VzIHRvIHRoZSBKU0JpbmRpbmdzIGZvciB0aGUgRE9NQXBwbGljYXRpb25DYWNoZSBpbnRl
cmZhY2UgdG8gYmluZCB0bworICAgICAgICB0aGUgbmV3IG9yIGV4aXN0aW5nIHN5c3RlbSBiYXNl
ZCBvbiB3aGljaCBFTkFCTEUgZmxhZyBpcyBzZXQuCisgICAgICAgIAorICAgICAgICBObyB0ZXN0
cyB5ZXQsIG5vdCBmdW5jdGlvbmFsIHlldC4KKwogMjAwOS0wNS0yNyAgRGF2aWQgTGV2aW4gIDxs
ZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0YWNob3dp
YWsuCkluZGV4OiBiaW5kaW5ncy9qcy9KU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL0pTRE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDQ0MTYzKQorKysgYmluZGluZ3MvanMvSlNET01BcHBsaWNhdGlvbkNhY2hlQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkpTRE9NQXBwbGljYXRpb25DYWNoZS5oIgogCi0jaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TKSB8fCBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiAKICNpbmNsdWRlICJBdG9taWNTdHJp
bmcuaCIKICNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hlLmgiCkBAIC02NCw3ICs2NCw3IEBA
IHZvaWQgSlNET01BcHBsaWNhdGlvbkNhY2hlOjptYXJrKCkKICAgICB9CiB9CiAKLSNpZiBFTkFC
TEUoQVBQTElDQVRJT05fQ0FDSEVfRFlOQU1JQ19FTlRSSUVTKQorI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpICYmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRV9EWU5BTUlDX0VO
VFJJRVMpCiAKIEpTVmFsdWUgSlNET01BcHBsaWNhdGlvbkNhY2hlOjpoYXNJdGVtKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKQEAgLTEwNSw3ICsxMDUsNyBAQCBKU1Zh
bHVlIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlKEV4CiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLSNlbmRpZiAvLyBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEVfRFlOQU1JQ19F
TlRSSUVTKQorI2VuZGlmIC8vIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICYmIEVO
QUJMRShBUFBMSUNBVElPTl9DQUNIRV9EWU5BTUlDX0VOVFJJRVMpCiAKIEpTVmFsdWUgSlNET01B
cHBsaWNhdGlvbkNhY2hlOjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKQEAgLTEzMyw0ICsxMzMsNCBAQCBKU1ZhbHVlIEpTRE9NQXBwbGlj
YXRpb25DYWNoZTo6cmVtb3ZlRXZlCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjZW5kaWYgLy8gRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQpJbmRl
eDogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRp
bmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNDQxNjMpCisrKyBiaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcg
QEAgdm9pZCBKU0RPTVdpbmRvdzo6bWFyaygpCiAgICAgbWFya0RPTU9iamVjdFdyYXBwZXIoZ2xv
YmFsRGF0YSwgaW1wbCgpLT5vcHRpb25hbFNlc3Npb25TdG9yYWdlKCkpOwogICAgIG1hcmtET01P
YmplY3RXcmFwcGVyKGdsb2JhbERhdGEsIGltcGwoKS0+b3B0aW9uYWxMb2NhbFN0b3JhZ2UoKSk7
CiAjZW5kaWYKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpIHx8IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkK
ICAgICBtYXJrRE9NT2JqZWN0V3JhcHBlcihnbG9iYWxEYXRhLCBpbXBsKCktPm9wdGlvbmFsQXBw
bGljYXRpb25DYWNoZSgpKTsKICNlbmRpZgogfQpJbmRleDogYmluZGluZ3MvanMvSlNFdmVudFRh
cmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAJKHJl
dmlzaW9uIDQ0MTYzKQorKysgYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgogI2lu
Y2x1ZGUgIlhNTEh0dHBSZXF1ZXN0VXBsb2FkLmgiCiAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJf
QVBQTElDQVRJT05TKQorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpIHx8IEVO
QUJMRShBUFBMSUNBVElPTl9DQUNIRSkKICNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hlLmgi
CiAjaW5jbHVkZSAiSlNET01BcHBsaWNhdGlvbkNhY2hlLmgiCiAjZW5kaWYKQEAgLTg0LDcgKzg0
LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgRXZlbnRUYXJnZQogICAgIGlmIChY
TUxIdHRwUmVxdWVzdFVwbG9hZCogdXBsb2FkID0gdGFyZ2V0LT50b1hNTEh0dHBSZXF1ZXN0VXBs
b2FkKCkpCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHVwbG9hZCk7CiAKLSNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNB
VElPTlMpIHx8IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKICAgICBpZiAoRE9NQXBwbGljYXRp
b25DYWNoZSogY2FjaGUgPSB0YXJnZXQtPnRvRE9NQXBwbGljYXRpb25DYWNoZSgpKQogICAgICAg
ICAvLyBET01BcHBsaWNhdGlvbkNhY2hlIGlzIGFsd2F5cyBjcmVhdGVkIHZpYSBKUywgc28gd2Ug
ZG9uJ3QgbmVlZCB0byB1c2UgY2FjaGVET01PYmplY3QoKSBoZXJlLgogICAgICAgICByZXR1cm4g
Z2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihleGVjLT5nbG9iYWxEYXRhKCksIGNhY2hlKTsKQEAg
LTExOSw3ICsxMTksNyBAQCBFdmVudFRhcmdldCogdG9FdmVudFRhcmdldChKU0M6OkpTVmFsdWUg
CiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCZKU0RPTVdpbmRvd1NoZWxsOjpzX2luZm8pKQogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KGFzT2JqZWN0KHZhbHVl
KSktPmltcGwoKTsKIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaWYg
RU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NB
Q0hFKQogICAgIENPTlZFUlRfVE9fRVZFTlRfVEFSR0VUKERPTUFwcGxpY2F0aW9uQ2FjaGUpCiAj
ZW5kaWYKIApJbmRleDogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NQXBwbGljYXRpb25DYWNoZUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NQXBwbGljYXRp
b25DYWNoZUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBiaW5kaW5ncy92OC9jdXN0b20vVjhE
T01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRE9NQXBwbGljYXRpb25DYWNo
ZS5oIgorCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorCisjaW5jbHVkZSAiVjhCaW5k
aW5nLmgiCisjaW5jbHVkZSAiVjhEb2N1bWVudC5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGlu
Zy5oIgorI2luY2x1ZGUgIlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlY4UHJv
eHkuaCIKKyNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBi
b29sIGtGaW5kT25seSA9IHRydWU7CitzdGF0aWMgY29uc3QgYm9vbCBrRmluZE9yQ3JlYXRlID0g
ZmFsc2U7CisKK3N0YXRpYyBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGFyZ3VtZW50VG9FdmVu
dExpc3RlbmVyKERPTUFwcGxpY2F0aW9uQ2FjaGUqIGFwcGNhY2hlLCB2ODo6TG9jYWw8djg6OlZh
bHVlPiB2YWx1ZSwgYm9vbCBmaW5kT25seSkKK3sKKyNpZiAwICYmIEVOQUJMRShXT1JLRVJTKQor
ICAgIC8vIEZJWE1FOiB0aGlzIGlzIG5vdCB0ZXN0ZWQgeWV0CisgICAgV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5KiB3b3JrZXJDb250ZXh0UHJveHkgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHk6OnJldHJpZXZlKCk7CisgICAgaWYgKHdvcmtlckNvbnRleHRQcm94eSkKKyAgICAgICAg
cmV0dXJuIHdvcmtlckNvbnRleHRQcm94eS0+ZmluZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5l
cih2YWx1ZSwgZmFsc2UsIGZpbmRPbmx5KTsKKyNlbmRpZgorCisgICAgVjhQcm94eSogcHJveHkg
PSBWOFByb3h5OjpyZXRyaWV2ZShhcHBjYWNoZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
KyAgICBpZiAocHJveHkpCisgICAgICAgIHJldHVybiBmaW5kT25seSA/IHByb3h5LT5GaW5kT2Jq
ZWN0RXZlbnRMaXN0ZW5lcih2YWx1ZSwgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICA6
IHByb3h5LT5GaW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKHZhbHVlLCBmYWxzZSk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZXZlbnRMaXN0
ZW5lclRvVjhPYmplY3QoRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIpCit7CisgICAgcmV0dXJuIChz
dGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPihsaXN0ZW5lcikpLT5nZXRMaXN0ZW5l
ck9iamVjdCgpOworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyB0b0V2ZW50VHlwZSh2ODo6TG9j
YWw8djg6OlN0cmluZz4gdmFsdWUpCit7CisgICAgU3RyaW5nIGtleSA9IHRvV2ViQ29yZVN0cmlu
Zyh2YWx1ZSk7CisgICAgQVNTRVJUKGtleS5zdGFydHNXaXRoKCJvbiIpKTsKKyAgICByZXR1cm4g
a2V5LnN1YnN0cmluZygyKTsKK30KKworLy8gSGFuZGxlcyBhcHBjYWNoZS5vbmZvb2V2ZW50IGF0
dHJpYnV0ZSBnZXR0aW5nCitBQ0NFU1NPUl9HRVRURVIoRE9NQXBwbGljYXRpb25DYWNoZUV2ZW50
SGFuZGxlcikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTUFwcGxpY2F0aW9uQ2FjaGUub25ldmVudF9n
ZXR0ZXIiKTsKKyAgICBET01BcHBsaWNhdGlvbkNhY2hlKiBhcHBjYWNoZSA9IFY4UHJveHk6OlRv
TmF0aXZlT2JqZWN0PERPTUFwcGxpY2F0aW9uQ2FjaGU+KFY4Q2xhc3NJbmRleDo6RE9NQVBQTElD
QVRJT05DQUNIRSwgaW5mby5Ib2xkZXIoKSk7CisgICAgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIg
PSBhcHBjYWNoZS0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0b0V2ZW50VHlwZShuYW1lKSk7
CisgICAgcmV0dXJuIGV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KGxpc3RlbmVyKTsKK30KKworLy8g
SGFuZGxlcyBhcHBjYWNoZS5vbmZvb2V2ZW50IGF0dHJpYnV0ZSBzZXR0aW5nCitBQ0NFU1NPUl9T
RVRURVIoRE9NQXBwbGljYXRpb25DYWNoZUV2ZW50SGFuZGxlcikKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTUFwcGxpY2F0aW9uQ2FjaGUub25ldmVudF9zZXR0ZXIiKTsKKyAgICBET01BcHBsaWNhdGlv
bkNhY2hlKiBhcHBjYWNoZSA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PERPTUFwcGxpY2F0aW9u
Q2FjaGU+KFY4Q2xhc3NJbmRleDo6RE9NQVBQTElDQVRJT05DQUNIRSwgaW5mby5Ib2xkZXIoKSk7
CisgICAgU3RyaW5nIGV2ZW50VHlwZSA9IHRvRXZlbnRUeXBlKG5hbWUpOworCisgICAgaWYgKEV2
ZW50TGlzdGVuZXIqIG9sZExpc3RlbmVyID0gYXBwY2FjaGUtPmdldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnRUeXBlKSkgeworICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0
ID0gZXZlbnRMaXN0ZW5lclRvVjhPYmplY3Qob2xkTGlzdGVuZXIpOworICAgICAgICByZW1vdmVI
aWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIG9iamVjdCwgVjhDdXN0b206OmtET01BcHBs
aWNhdGlvbkNhY2hlQ2FjaGVJbmRleCk7CisgICAgICAgIGFwcGNhY2hlLT5jbGVhckF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsKKyAgICB9CisKKyAgICBpZiAodmFsdWUtPklzRnVu
Y3Rpb24oKSkgeworICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbmV3TGlzdGVuZXIgPSBh
cmd1bWVudFRvRXZlbnRMaXN0ZW5lcihhcHBjYWNoZSwgdmFsdWUsIGtGaW5kT3JDcmVhdGUpOwor
ICAgICAgICBpZiAobmV3TGlzdGVuZXIpIHsKKyAgICAgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVu
ZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjprRE9NQXBwbGljYXRpb25DYWNo
ZUNhY2hlSW5kZXgpOworICAgICAgICAgICAgYXBwY2FjaGUtPnNldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnRUeXBlLCBuZXdMaXN0ZW5lcik7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8v
IEhhbmRsZXMgYXBwY2FjaGUuYWRkRXZlbnRMaXN0bmVyKG5hbWUsIGZ1bmMsIGNhcHR1cmUpIG1l
dGhvZCBjYWxscworQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTUFwcGxpY2F0aW9uQ2FjaGVBZGRFdmVu
dExpc3RlbmVyKQoreworICAgIElOQ19TVEFUUygiRE9NQXBwbGljYXRpb25DYWNoZS5hZGRFdmVu
dExpc3RlbmVyKCkiKTsKKyAgICBET01BcHBsaWNhdGlvbkNhY2hlKiBhcHBjYWNoZSA9IFY4UHJv
eHk6OlRvTmF0aXZlT2JqZWN0PERPTUFwcGxpY2F0aW9uQ2FjaGU+KFY4Q2xhc3NJbmRleDo6RE9N
QVBQTElDQVRJT05DQUNIRSwgYXJncy5Ib2xkZXIoKSk7CisKKyAgICBSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gbGlzdGVuZXIgPSBhcmd1bWVudFRvRXZlbnRMaXN0ZW5lcihhcHBjYWNoZSwgYXJnc1sx
XSwga0ZpbmRPckNyZWF0ZSk7CisgICAgaWYgKGxpc3RlbmVyKSB7CisgICAgICAgIGNyZWF0ZUhp
ZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjhDdXN0b206OmtET01BcHBs
aWNhdGlvbkNhY2hlQ2FjaGVJbmRleCk7CisgICAgICAgIFN0cmluZyBldmVudFR5cGUgPSB0b1dl
YkNvcmVTdHJpbmcoYXJnc1swXSk7CisgICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0t
PkJvb2xlYW5WYWx1ZSgpOworICAgICAgICBhcHBjYWNoZS0+YWRkRXZlbnRMaXN0ZW5lcihldmVu
dFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKKyAgICB9CisgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKK30KKworLy8gSGFuZGxlcyBhcHBjYWNoZS5yZW1vdmVFdmVudExpc3RuZXIobmFt
ZSwgZnVuYywgY2FwdHVyZSkgbWV0aG9kIGNhbGxzCitDQUxMQkFDS19GVU5DX0RFQ0woRE9NQXBw
bGljYXRpb25DYWNoZVJlbW92ZUV2ZW50TGlzdGVuZXIpCit7CisgICAgSU5DX1NUQVRTKCJET01B
cHBsaWNhdGlvbkNhY2hlLnJlbW92ZUV2ZW50TGlzdGVuZXIoKSIpOworICAgIERPTUFwcGxpY2F0
aW9uQ2FjaGUqIGFwcGNhY2hlID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8RE9NQXBwbGljYXRp
b25DYWNoZT4oVjhDbGFzc0luZGV4OjpET01BUFBMSUNBVElPTkNBQ0hFLCBhcmdzLkhvbGRlcigp
KTsKKworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGFyZ3VtZW50VG9FdmVu
dExpc3RlbmVyKGFwcGNhY2hlLCBhcmdzWzFdLCBrRmluZE9ubHkpOworICAgIGlmIChsaXN0ZW5l
cikgeworICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3Nb
MV0sIFY4Q3VzdG9tOjprRE9NQXBwbGljYXRpb25DYWNoZUNhY2hlSW5kZXgpOworICAgICAgICBT
dHJpbmcgZXZlbnRUeXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOworICAgICAgICBib29s
IHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKTsKKyAgICAgICAgYXBwY2FjaGUt
PnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVy
ZSk7CisgICAgfQorICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmICAvLyBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBiaW5kaW5ncy92OC9jdXN0b20vVjhET01BcHBsaWNhdGlvbkNhY2hl
Q3VzdG9tLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4
OiBkb20vRXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9FdmVudFRhcmdldC5jcHAJ
KHJldmlzaW9uIDQ0MTYzKQorKysgZG9tL0V2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQsNyArNjQsNyBAQCBYTUxIdHRwUmVxdWVzdFVwbG9hZCogRXZlbnRUYXJnZXQ6OnRvWE1M
CiAgICAgcmV0dXJuIDA7CiB9CiAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05T
KQorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpIHx8IEVOQUJMRShBUFBMSUNB
VElPTl9DQUNIRSkKIERPTUFwcGxpY2F0aW9uQ2FjaGUqIEV2ZW50VGFyZ2V0Ojp0b0RPTUFwcGxp
Y2F0aW9uQ2FjaGUoKQogewogICAgIHJldHVybiAwOwpJbmRleDogZG9tL0V2ZW50VGFyZ2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gZG9tL0V2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDQ0MTYzKQorKysgZG9t
L0V2ZW50VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIERPTVdpbmRvdyogdG9ET01XaW5kb3coKTsKICAg
ICAgICAgdmlydHVhbCBYTUxIdHRwUmVxdWVzdCogdG9YTUxIdHRwUmVxdWVzdCgpOwogICAgICAg
ICB2aXJ0dWFsIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB0b1hNTEh0dHBSZXF1ZXN0VXBsb2FkKCk7
Ci0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKSB8fCBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiAgICAgICAg
IHZpcnR1YWwgRE9NQXBwbGljYXRpb25DYWNoZSogdG9ET01BcHBsaWNhdGlvbkNhY2hlKCk7CiAj
ZW5kaWYKICNpZiBFTkFCTEUoU1ZHKQpJbmRleDogaHRtbC9IVE1MSHRtbEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGh0bWwvSFRNTEh0bWxFbGVtZW50LmNwcAkocmV2aXNpb24gNDQxNjMpCisr
KyBodG1sL0hUTUxIdG1sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE0ICsyMyw0
OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgog
Ci0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUdyb3VwLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKIAorLy8gRklYTUU6IFRoZSB1c2Ugb2YgdGhlc2Ug
dHdvIGZsYWdzIHRvIHNob3VsZCBiZSBhIHRlbXBvcmFyeSBzaXR1YXRpb24uIAorLy8gRXZlbnR1
YWxseSB3ZSBzaG91bGQgdXNlIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkgZm9yIHRoaXMgZmVh
dHVyZSBpbgorLy8gYWxsIGNhc2VzLgorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElP
TlMpICYmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyNlcnJvciBBUFBMSUNBVElPTl9DQUNI
RSBhbmQgT0ZGTElORV9XRUJfQVBQTElDQVRJT05TIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgZmxh
Z3MKKyNlbmRpZgorCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpbmNs
dWRlICJBcHBsaWNhdGlvbkNhY2hlR3JvdXAuaCIKKyNlbGlmIEVOQUJMRShBUFBMSUNBVElPTl9D
QUNIRSkKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
CisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQUExJQ0FU
SU9OX0NBQ0hFKQorCitzdGF0aWMgdm9pZCBzZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdChGcmFt
ZSogZnJhbWUpCit7CisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICBB
cHBsaWNhdGlvbkNhY2hlR3JvdXA6OnNlbGVjdENhY2hlV2l0aG91dE1hbmlmZXN0VVJMKGZyYW1l
KTsKKyNlbGlmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICBmcmFtZS0+bG9hZGVyKCkt
PnNlbGVjdEFwcGxpY2F0aW9uQ2FjaGVXaXRob3V0TWFuaWZlc3QoKTsKKyNlbmRpZgorfQorCitz
dGF0aWMgdm9pZCBzZWxlY3RDYWNoZVdpdGhNYW5pZmVzdChGcmFtZSogZnJhbWUsIGNvbnN0IEtV
UkwmIG1hbmlmZXN0VVJMKQoreworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMp
CisgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpzZWxlY3RDYWNoZShmcmFtZSwgbWFuaWZlc3RV
UkwpOworI2VsaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgIGZyYW1lLT5sb2FkZXIo
KS0+c2VsZWN0QXBwbGljYXRpb25DYWNoZVdpdGhNYW5pZmVzdChtYW5pZmVzdFVSTCk7CisjZW5k
aWYKK30KKworI2VuZGlmICAvLyBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSB8fCBF
TkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisKIEhUTUxIdG1sRWxlbWVudDo6SFRNTEh0bWxFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBI
VE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCiB7CkBAIC01Nyw3ICs5Miw3IEBAIGJvb2wgSFRNTEh0
bWxFbGVtZW50OjpjaGVja0RURChjb25zdCBOb2QKICAgICAgICAgICAgbmV3Q2hpbGQtPmhhc1Rh
Z05hbWUoZnJhbWVzZXRUYWcpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKG5vZnJhbWVzVGFnKTsK
IH0KIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQogdm9p
ZCBIVE1MSHRtbEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKICAgICBIVE1MRWxl
bWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKQEAgLTcwLDEwICsxMDUsMTAgQEAgdm9pZCBI
VE1MSHRtbEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZQogCiAgICAgLy8gQ2hlY2sgdGhlIG1h
bmlmZXN0IGF0dHJpYnV0ZQogICAgIEF0b21pY1N0cmluZyBtYW5pZmVzdCA9IGdldEF0dHJpYnV0
ZShtYW5pZmVzdEF0dHIpOwotICAgIGlmIChtYW5pZmVzdC5pc051bGwoKSkKLSAgICAgICAgQXBw
bGljYXRpb25DYWNoZUdyb3VwOjpzZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdFVSTChkb2N1bWVu
dCgpLT5mcmFtZSgpKTsKKyAgICBpZiAobWFuaWZlc3QuaXNOdWxsKCkgfHwgbWFuaWZlc3QuaXNF
bXB0eSgpKQorICAgICAgICBzZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdChkb2N1bWVudCgpLT5m
cmFtZSgpKTsKICAgICBlbHNlCi0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c2VsZWN0
Q2FjaGUoZG9jdW1lbnQoKS0+ZnJhbWUoKSwgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwobWFuaWZl
c3QpKTsKKyAgICAgICAgc2VsZWN0Q2FjaGVXaXRoTWFuaWZlc3QoZG9jdW1lbnQoKS0+ZnJhbWUo
KSwgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwobWFuaWZlc3QpKTsKIH0KICNlbmRpZgogCkluZGV4
OiBodG1sL0hUTUxIdG1sRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTEh0bWxFbGVt
ZW50LmgJKHJldmlzaW9uIDQ0MTYzKQorKysgaHRtbC9IVE1MSHRtbEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgdGFnUHJp
b3JpdHkoKSBjb25zdCB7IHJldHVybiAxMTsgfQogICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChj
b25zdCBOb2RlKiBuZXdDaGlsZCk7CiAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TKQorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpIHx8IEVOQUJMRShBUFBM
SUNBVElPTl9DQUNIRSkKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsK
ICNlbmRpZgogCkluZGV4OiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxv
YWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDQ0MTYzKQorKysgbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNiArOTgsMTAgQEAKICNpbmNsdWRlICJBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2UuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9O
X0NBQ0hFKQorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZC5oIgorI2VuZGlmCisK
ICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZH
TG9jYXRhYmxlLmgiCkBAIC0zMDIsNiArMzA2LDkgQEAgRnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVy
KEZyYW1lKiBmcmFtZSwgRgogI2lmIEVOQUJMRShXTUwpCiAgICAgLCBtX2ZvcmNlUmVsb2FkV21s
RGVjayhmYWxzZSkKICNlbmRpZgorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICAs
IG1fYXBwY2FjaGVGcm9udGVuZChuZXcgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kKCkpCisjZW5k
aWYKIHsKIH0KIApAQCAtMzMxLDYgKzMzOCwxNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjppbml0KCkK
ICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jYW5jZWxQYXJzaW5nKCk7CiAgICAgbV9jcmVhdGlu
Z0luaXRpYWxFbXB0eURvY3VtZW50ID0gZmFsc2U7CiAgICAgbV9kaWRDYWxsSW1wbGljaXRDbG9z
ZSA9IHRydWU7CisKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisgICAgQXBwbGljYXRp
b25DYWNoZUNvbnRleHRUeXBlIGNvbnRleHRUeXBlID0gTWFpbkZyYW1lQ29udGV4dDsKKyAgICBH
bG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEIHBhcmVudENvbnRleElEID0gR2xvYmFsQXBw
bGljYXRpb25DYWNoZUNvbnRleHRJRDo6bm9uZSgpOworICAgIGlmIChGcmFtZSogcGFyZW50RnJh
bWUgPSBtX2ZyYW1lLT5wYXJlbnRGcmFtZSgpKSB7CisgICAgICAgIGNvbnRleHRUeXBlID0gU3Vi
RnJhbWVDb250ZXh0OworICAgICAgICBwYXJlbnRDb250ZXhJRCA9IHBhcmVudEZyYW1lLT5sb2Fk
ZXIoKS0+YXBwY2FjaGVGcm9udGVuZCgpLT5jb250ZXh0SUQoKTsKKyAgICB9CisgICAgYXBwY2Fj
aGVGcm9udGVuZCgpLT5pbml0aWFsaXplKGNvbnRleHRUeXBlLCBwYXJlbnRDb250ZXhJRCk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVy
cykKQEAgLTE4NDQsNiArMTg2MSwxMSBAQCBib29sIEZyYW1lTG9hZGVyOjpjYW5DYWNoZVBhZ2VD
b250YWluaW5nCiAgICAgICAgICYmICFtX2RvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hl
KCkKICAgICAgICAgJiYgIW1fZG9jdW1lbnRMb2FkZXItPmNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2Fj
aGVHcm91cCgpCiAjZW5kaWYKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgaW52ZXN0aWdhdGluZyBjYWNoaW5nIGZyYW1lcyB0aGF0IGhh
dmUgYW4gYXNzb2NpYXRlZAorICAgICAgICAvLyBhcHBsaWNhdGlvbiBjYWNoZS4gPHJkYXI6Ly9w
cm9ibGVtLzU5MTc4OTk+IHRyYWNrcyB0aGF0IHdvcmsuCisgICAgICAgICYmIGFwcGNhY2hlRnJv
bnRlbmQoKS0+Y2FuQ2FjaGVDdXJyZW50RG9jdW1lbnRJblBhZ2VDYWNoZSgpCisjZW5kaWYKICAg
ICAgICAgJiYgbV9jbGllbnQtPmNhbkNhY2hlUGFnZSgpCiAgICAgICAgIDsKIH0KQEAgLTE5OTQs
NiArMjAxNiwxMCBAQCBib29sIEZyYW1lTG9hZGVyOjpsb2dDYW5DYWNoZUZyYW1lRGVjaXNpCiAg
ICAgICAgIGlmIChtX2RvY3VtZW50TG9hZGVyLT5jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3Jv
dXAoKSkKICAgICAgICAgICAgIHsgUENMT0coIiAgIC1UaGUgRG9jdW1lbnRMb2FkZXIgaGFzIGEg
Y2FuZGlkYXRlQXBwbGljYXRpb25DYWNoZUdyb3VwIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQog
I2VuZGlmCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgICAgICBpZiAoIWFwcGNh
Y2hlRnJvbnRlbmQoKS0+Y2FuQ2FjaGVDdXJyZW50RG9jdW1lbnRJblBhZ2VDYWNoZSgpKQorICAg
ICAgICAgICAgeyBQQ0xPRygiICAgLVVzaW5nIGFwcGxpY2F0aW9uIGNhY2hlIik7IGNhbm5vdENh
Y2hlID0gdHJ1ZTsgfQorI2VuZGlmCiAgICAgICAgIGlmICghbV9jbGllbnQtPmNhbkNhY2hlUGFn
ZSgpKQogICAgICAgICAgICAgeyBQQ0xPRygiICAgLVRoZSBjbGllbnQgc2F5cyB0aGlzIGZyYW1l
IGNhbm5vdCBiZSBjYWNoZWQiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9CiAgICAgfSB3aGlsZSAo
ZmFsc2UpOwpAQCAtMjg4NCw2ICsyOTEwLDkgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dHJhbnNpdGlv
blRvQ29tbWl0dGVkKAogCiAgICAgc2V0RG9jdW1lbnRMb2FkZXIobV9wcm92aXNpb25hbERvY3Vt
ZW50TG9hZGVyLmdldCgpKTsKICAgICBzZXRQcm92aXNpb25hbERvY3VtZW50TG9hZGVyKDApOwor
I2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICBzZWxlY3RJbml0aWFsQXBwbGljYXRp
b25DYWNoZSgpOworI2VuZGlmCiAgICAgc2V0U3RhdGUoRnJhbWVTdGF0ZUNvbW1pdHRlZFBhZ2Up
OwogCiAgICAgLy8gSGFuZGxlIGFkZGluZyB0aGUgVVJMIHRvIHRoZSBiYWNrL2ZvcndhcmQgbGlz
dC4KQEAgLTM1NjksNiArMzU5OCwxMCBAQCB2b2lkIEZyYW1lTG9hZGVyOjphZGRFeHRyYUZpZWxk
c1RvUmVxdWVzCiAgICAgICAgIGVsc2UgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUt
PmRvY3VtZW50KCkpCiAgICAgICAgICAgICByZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVz
KGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKICAgICB9CisgCisjaWYgRU5BQkxF
KEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgIGFwcGNhY2hlRnJvbnRlbmQoKS0+YWRkRXh0cmFGaWVs
ZHNUb1JlcXVlc3QocmVxdWVzdCwgbWFpblJlc291cmNlKTsKKyNlbmRpZgogCiAgICAgLy8gVGhl
IHJlbWFpbmluZyBtb2RpZmljYXRpb25zIGFyZSBvbmx5IG5lY2Vzc2FyeSBmb3IgSFRUUCBhbmQg
SFRUUFMuCiAgICAgaWYgKCFyZXF1ZXN0LnVybCgpLmlzRW1wdHkoKSAmJiAhcmVxdWVzdC51cmwo
KS5wcm90b2NvbEluSFRUUEZhbWlseSgpKQpAQCAtNTI3Nyw0ICs1MzEwLDQ1IEBAIGJvb2wgRnJh
bWVMb2FkZXJDbGllbnQ6Omhhc0hUTUxWaWV3KCkgY28KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
I2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKworQXBwbGljYXRpb25DYWNoZUZyb250ZW5k
KiBGcmFtZUxvYWRlcjo6YXBwY2FjaGVGcm9udGVuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
YXBwY2FjaGVGcm9udGVuZC5nZXQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlcjo6c2VsZWN0SW5p
dGlhbEFwcGxpY2F0aW9uQ2FjaGUoKQoreworICAgIGNvbnN0IEtVUkwmIGRvY1VSTCA9IG1fZnJh
bWUtPmRvY3VtZW50KCktPnVybCgpOworICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIGRvY1Jl
c3BvbnNlID0gZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2UoKTsKKyAgICBhcHBjYWNoZUZyb250
ZW5kKCktPnNlbGVjdEluaXRpYWxDYWNoZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZG9jVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkb2NSZXNwb25zZS5hcHBsaWNhdGlvbkNhY2hlSUQoKSk7Cit9CisKK3ZvaWQgRnJhbWVM
b2FkZXI6OnNlbGVjdEFwcGxpY2F0aW9uQ2FjaGVXaXRob3V0TWFuaWZlc3QoKQoreworICAgIGNv
bnN0IEtVUkwmIGRvY1VSTCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpOworICAgIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIGRvY1Jlc3BvbnNlID0gZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9u
c2UoKTsKKyAgICBhcHBjYWNoZUZyb250ZW5kKCktPnNlbGVjdEZpbmFsQ2FjaGVXaXRob3V0TWFu
aWZlc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY1VSTCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jUmVzcG9uc2UuYXBw
bGljYXRpb25DYWNoZUlEKCkpOworfQorCit2b2lkIEZyYW1lTG9hZGVyOjpzZWxlY3RBcHBsaWNh
dGlvbkNhY2hlV2l0aE1hbmlmZXN0KGNvbnN0IEtVUkwmIG1hbmlmZXN0VVJMKQoreworICAgIGNv
bnN0IEtVUkwmIGRvY1VSTCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpOworICAgIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIGRvY1Jlc3BvbnNlID0gZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9u
c2UoKTsKKyAgICBpZiAoIWFwcGNhY2hlRnJvbnRlbmQoKS0+c2VsZWN0RmluYWxDYWNoZVdpdGhN
YW5pZmVzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jVVJM
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NSZXNwb25zZS5h
cHBsaWNhdGlvbkNhY2hlSUQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG9jUmVzcG9uc2UubWFuaWZlc3RVUkwoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWFuaWZlc3RVUkwpKSB7CisgICAgICAgIC8vIEl0J3MgYSBmb3Jl
aWduIGVudHJ5LCByZXN0YXJ0IHRoZSBjdXJyZW50IG5hdmlnYXRpb24gZnJvbSB0aGUgdG9wIG9m
IHRoZSBuYXZpZ2F0aW9uIGFsZ29yaXRobS4KKyAgICAgICAgLy8gVGhlIG5hdmlnYXRpb24gd2ls
bCBub3QgcmVzdWx0IGluIHRoZSBzYW1lIHJlc291cmNlIGJlaW5nIGxvYWRlZCwgYmVjYXVzZSAi
Zm9yZWlnbiIgZW50cmllcyBhcmUgbmV2ZXIgcGlja2VkIGR1cmluZyBuYXZpZ2F0aW9uLgorICAg
ICAgICBzY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGRvY1VSTCwgcmVmZXJyZXIoKSwgdHJ1ZSk7Cisg
ICAgfQorfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGxvYWRlci9G
cmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lv
biA0NDE2MykKKysrIGxvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2
ICs3MCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgVGV4dFJlc291cmNlRGVj
b2RlcjsKICAgICBjbGFzcyBXaWRnZXQ7CiAKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUp
CisgICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kOworI2VuZGlmCisKICAgICBzdHJ1
Y3QgRnJhbWVMb2FkUmVxdWVzdDsKICAgICBzdHJ1Y3QgU2NoZWR1bGVkUmVkaXJlY3Rpb247CiAg
ICAgc3RydWN0IFdpbmRvd0ZlYXR1cmVzOwpAQCAtMjQyLDYgKzI0NiwxMyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgbG9hZGVkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoY29u
c3QgQ2FjaGVkUmVzb3VyY2UqKTsKICAgICAgICAgdm9pZCB0ZWxsQ2xpZW50QWJvdXRQYXN0TWVt
b3J5Q2FjaGVMb2FkcygpOwogCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgICAg
ICBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQqIGFwcGNhY2hlRnJvbnRlbmQoKSBjb25zdDsKKyAg
ICAgICAgdm9pZCBzZWxlY3RJbml0aWFsQXBwbGljYXRpb25DYWNoZSgpOworICAgICAgICB2b2lk
IHNlbGVjdEFwcGxpY2F0aW9uQ2FjaGVXaXRob3V0TWFuaWZlc3QoKTsKKyAgICAgICAgdm9pZCBz
ZWxlY3RBcHBsaWNhdGlvbkNhY2hlV2l0aE1hbmlmZXN0KGNvbnN0IEtVUkwmIG1hbmlmZXN0VVJM
KTsKKyNlbmRpZgorCiAgICAgICAgIHZvaWQgY2hlY2tMb2FkQ29tcGxldGUoKTsKICAgICAgICAg
dm9pZCBkZXRhY2hGcm9tUGFyZW50KCk7CiAKQEAgLTYzNSw2ICs2NDYsMTAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogI2lmIEVOQUJMRShXTUwpCiAgICAgICAgIGJvb2wgbV9mb3JjZVJlbG9hZFdt
bERlY2s7CiAjZW5kaWYKKworI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICAgICAg
T3duUHRyPEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZD4gbV9hcHBjYWNoZUZyb250ZW5kOworI2Vu
ZGlmCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogbG9hZGVyL2FwcGNh
Y2hlMi9BcHBsaWNhdGlvbkNhY2hlQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL2FwcGNh
Y2hlMi9BcHBsaWNhdGlvbkNhY2hlQ29tbW9uLmgJKHJldmlzaW9uIDApCisrKyBsb2FkZXIvYXBw
Y2FjaGUyL0FwcGxpY2F0aW9uQ2FjaGVDb21tb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBBcHBsaWNhdGlvbkNhY2hlQ29tbW9uX2gKKyNkZWZpbmUgQXBwbGlj
YXRpb25DYWNoZUNvbW1vbl9oCisKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworICAgIC8vIFR5cGVzIGFuZCBjb25zdGFudHMgdXNlZCBieSB0
aGUgZnJvbnQgYW5kIGJhY2sgZW5kcworCisgICAgdHlwZWRlZiBsb25nIGxvbmcgQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2VJRDsgIC8vIGEgNjQgYml0IHNxbGl0ZSByb3dpZAorICAgIHR5cGVkZWYg
QXBwbGljYXRpb25DYWNoZVN0b3JhZ2VJRCBBcHBsaWNhdGlvbkNhY2hlSUQ7CisgICAgdHlwZWRl
ZiBpbnQgQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRDsKKworICAgIHN0cnVjdCBHbG9iYWxBcHBs
aWNhdGlvbkNhY2hlQ29udGV4dElEIHsKKyAgICAgICAgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNv
bnRleHRJRCgpCisgICAgICAgICAgICA6IG1fY29udGV4dElEKDApCisgICAgICAgICAgICAsIG1f
cHJvY2Vzc0lEKDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEdsb2JhbEFwcGxp
Y2F0aW9uQ2FjaGVDb250ZXh0SUQoQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCBjb250ZXh0SUQs
IGludCBwcm9jZXNzSUQpCisgICAgICAgICAgICA6IG1fY29udGV4dElEKGNvbnRleHRJRCkKKyAg
ICAgICAgICAgICwgbV9wcm9jZXNzSUQocHJvY2Vzc0lEKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEIG1fY29udGV4dElEOworICAgICAg
ICBpbnQgbV9wcm9jZXNzSUQ7CisKKyAgICAgICAgc3RhdGljIEdsb2JhbEFwcGxpY2F0aW9uQ2Fj
aGVDb250ZXh0SUQgbm9uZSgpIHsgcmV0dXJuIEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0
SUQoKTsgfQorICAgIH07CisKKyAgICBlbnVtIEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0VHlwZSB7
CisgICAgICAgIE1haW5GcmFtZUNvbnRleHQsCisgICAgICAgIFN1YkZyYW1lQ29udGV4dCwKKyAg
ICAgICAgRGVkaWNhdGVkV29ya2VyQ29udGV4dCwKKyAgICAgICAgU2hhcmVkV29ya2VyQ29udGV4
dAorICAgIH07CisKKyAgICBlbnVtIFdlbGxLbm93bkFwcGxpY2F0aW9uQ2FjaGVJRHMgeworICAg
ICAgICBOb0FwcGxpY2F0aW9uQ2FjaGVJRCA9IDAsCisgICAgICAgIE5vQXBwbGljYXRpb25DYWNo
ZUNvbnRleHRJRCA9IDAsCisgICAgICAgIFVua25vd25BcHBsaWNhdGlvbkNhY2hlQ29udGV4dElE
ID0gLTEsCisgICAgfTsKKworICAgIGVudW0gQXBwbGljYXRpb25DYWNoZVN0YXR1cyB7CisgICAg
ICAgIEFQUENBQ0hFX1VOQ0FDSEVEID0gMCwKKyAgICAgICAgQVBQQ0FDSEVfSURMRSA9IDEsCisg
ICAgICAgIEFQUENBQ0hFX0NIRUNLSU5HID0gMiwKKyAgICAgICAgQVBQQ0FDSEVfRE9XTkxPQURJ
TkcgPSAzLAorICAgICAgICBBUFBDQUNIRV9VUERBVEVSRUFEWSA9IDQsCisgICAgICAgIEFQUENB
Q0hFX09CU09MRVRFID0gNQorICAgIH07CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAgLy8gRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorI2VuZGlmICAvLyBBcHBsaWNhdGlv
bkNhY2hlQ29tbW9uX2gKClByb3BlcnR5IGNoYW5nZXMgb246IGxvYWRlci9hcHBjYWNoZTIvQXBw
bGljYXRpb25DYWNoZUNvbW1vbi5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAg
ICsgKgoKSW5kZXg6IGxvYWRlci9hcHBjYWNoZTIvQXBwbGljYXRpb25DYWNoZUZyb250ZW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBsb2FkZXIvYXBwY2FjaGUyL0FwcGxpY2F0aW9uQ2FjaGVGcm9udGVu
ZC5jcHAJKHJldmlzaW9uIDApCisrKyBsb2FkZXIvYXBwY2FjaGUyL0FwcGxpY2F0aW9uQ2FjaGVG
cm9udGVuZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJp
Z2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUZyb250ZW5kLmgiCisKKyNpZiBF
TkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisKKyNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hl
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kwordm9pZCBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQ6OmluaXRpYWxpemUoQXBwbGljYXRpb25D
YWNoZUNvbnRleHRUeXBlIGNvbnRleHRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQmIHBhcmVudENvbnRleHRJRCkK
K3sKKyAgICBzdGF0aWMgaW50IG5leHRJRCA9IDE7CisgICAgbV9jb250ZXh0VHlwZSA9IGNvbnRl
eHRUeXBlOworICAgIG1fY29udGV4dElEID0gR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJ
RChuZXh0SUQrKywgMCk7CisgICAgLy8gRklYTUU6IHByb3h5IGFzeW5jaHJvbm91c2x5IHRvIHRo
ZSBiYWNrZW5kCit9CisKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kOjpzZWxlY3RJbml0
aWFsQ2FjaGUoY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVJRCBjYWNoZURvY3VtZW50V2FzTG9hZGVkRnJvbSkK
K3sKKyAgICAvLyBGSVhNRTogcHJveHkgYXN5bmNocm9ub3VzbHkgdG8gdGhlIGJhY2tlbmQKKyAg
ICBtX2NhbkNhY2hlSW5QYWdlQ2FjaGUgPSBjYWNoZURvY3VtZW50V2FzTG9hZGVkRnJvbSA9PSBO
b0FwcGxpY2F0aW9uQ2FjaGVJRDsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQ6
OnNlbGVjdEZpbmFsQ2FjaGVXaXRob3V0TWFuaWZlc3QoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlSUQgY2FjaGVEb2N1bWVudFdhc0xvYWRl
ZEZyb20pCit7CisgICAgLy8gRklYTUU6IHByb3h5IGFzeW5jaHJvbm91c2x5IHRvIHRoZSBiYWNr
ZW5kCisgICAgbV9jYW5DYWNoZUluUGFnZUNhY2hlID0gY2FjaGVEb2N1bWVudFdhc0xvYWRlZEZy
b20gPT0gTm9BcHBsaWNhdGlvbkNhY2hlSUQ7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUZy
b250ZW5kOjpzZWxlY3RGaW5hbENhY2hlV2l0aE1hbmlmZXN0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBkb2N1bWVudFVSTCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZUlEIGNhY2hlRG9jdW1lbnRXYXNM
b2FkZWRGcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJM
JiBtYW5pZmVzdFVSTG9mQ2FjaGVEb2N1bWVudFdhc0xvYWRlZEZyb20sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIG1hbmlmZXN0VVJMKQoreworICAgIC8v
IEZJWE1FOiBwcm94eSBhc3luY2hyb25vdXNseSB0byB0aGUgYmFja2VuZAorICAgIG1fY2FuQ2Fj
aGVJblBhZ2VDYWNoZSA9IGZhbHNlOworCisgICAgLy8gQ2hlY2sgZm9yIGEgZm9yZWlnbiBlbnRy
aXkgYW5kIHJlc3RhcnQgdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBpZiBkZXRlY3RlZCwKKyAgICAv
LyB0aGUgZm9yZWlnbiBlbnRyeSB3aWxsIG5vdCBiZSBwaWNrZWQgdXAgb24gcmVsb2FkLgorICAg
IGlmICgoY2FjaGVEb2N1bWVudFdhc0xvYWRlZEZyb20gIT0gTm9BcHBsaWNhdGlvbkNhY2hlSUQp
CisgICAgICAgICYmIChtYW5pZmVzdFVSTCAhPSBtYW5pZmVzdFVSTG9mQ2FjaGVEb2N1bWVudFdh
c0xvYWRlZEZyb20pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kOjphZGRFeHRyYUZpZWxkc1Rv
UmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgbWFpblJlc291cmNlKQorewor
ICAgIHJlcXVlc3Quc2V0QXBwbGljYXRpb25DYWNoZUNvbnRleHRJRChjb250ZXh0SUQoKSk7Cit9
CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kOjpjYW5DYWNoZUN1cnJlbnREb2N1bWVu
dEluUGFnZUNhY2hlKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1fY2FuQ2FjaGVJblBhZ2VDYWNo
ZTsKK30KKworQXBwbGljYXRpb25DYWNoZVN0YXR1cyBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQ6
OnN0YXR1cygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IHJldHVybiBhIGNhY2hlZCBzdGF0dXMg
dmFsdWUsIG9yIHByb3h5IHN5bmNocm9ub3VzbHkgdG8gdGhlCisgICAgLy8gYmFja2VuZCBpZiB3
ZSBoYXZlIG5vIGNhY2hlZCB2YWx1ZS4KKyAgICByZXR1cm4gQVBQQ0FDSEVfVU5DQUNIRUQ7Cit9
CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kOjp1cGRhdGUoKQoreworICAgIC8vIEZJ
WE1FOiBwcm94eSBzeW5jaHJvbm91c2x5IHRvIHRoZSBiYWNrZW5kCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZDo6c3dhcENhY2hlKCkKK3sKKyAg
ICAvLyBGSVhNRTogcHJveHkgc3luY2hyb25vdXNseSB0byB0aGUgYmFja2VuZAorICAgIHJldHVy
biBmYWxzZTsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmICAvLyBFTkFC
TEUoQVBQTElDQVRJT05fQ0FDSEUpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBsb2FkZXIvYXBwY2Fj
aGUyL0FwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4
ZWN1dGFibGUKICAgKyAqCgpJbmRleDogbG9hZGVyL2FwcGNhY2hlMi9BcHBsaWNhdGlvbkNhY2hl
RnJvbnRlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIvYXBwY2FjaGUyL0FwcGxpY2F0aW9uQ2Fj
aGVGcm9udGVuZC5oCShyZXZpc2lvbiAwKQorKysgbG9hZGVyL2FwcGNhY2hlMi9BcHBsaWNhdGlv
bkNhY2hlRnJvbnRlbmQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kX2gKKyNkZWZpbmUgQXBwbGljYXRpb25DYWNoZUZy
b250ZW5kX2gKKworI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKworI2luY2x1ZGUgIkFw
cGxpY2F0aW9uQ2FjaGVDb21tb24uaCIKKyNpbmNsdWRlICJLVVJMLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKKyAgICBjbGFzcyBET01BcHBs
aWNhdGlvbkNhY2hlOworCisgICAgLy8gRWFjaCBmcmFtZSBoYXMgYW4gQXBwbGljYXRpb25DYWNo
ZUZyb250ZW5kIHdoaWNoIHNlcnZlcyBhcyBhIHByb3h5IHRvIHRoZQorICAgIC8vIGJhY2tlbmQg
aW1wbG1lbnRhdGlvbi4KKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IGEgZnVuY3Rpb25hbCBpbnN0
YW5jZSBvZiB0aGlzIGludGVyZmFjZSwgZm9yIG5vdyB0aGlzCisgICAgLy8gc3R1YiBqdXN0IGRl
bW9uc3RyYXRlcyBzb21lIG9mIHRoZSBsb2dpYyB0aGUgcmVhbCBpbXBsZW1lbnRhdGlvbiB3aWxs
IGhhdmUuCisgICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCgpCisgICAgICAgICAgICA6IG1fY29u
dGV4dFR5cGUoTWFpbkZyYW1lQ29udGV4dCkKKyAgICAgICAgICAgICwgbV9ET01BcHBsaWNhdGlv
bkNhY2hlKDApCisgICAgICAgICAgICAsIG1fY2FuQ2FjaGVJblBhZ2VDYWNoZSh0cnVlKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICAvLyBEZWxldGVkIHVwb24gZnJhbWUgZGVzdHJ1
Y3Rpb24uCisgICAgICAgIH5BcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQoKSB7fQorCisgICAgICAg
IC8vIFJldHVybnMgdGhlIGFwcGNhY2hlIGNvbnRleHRJRCBmb3IgdGhpcyBpbnN0YW5jZSwgZWFj
aCBmcmFtZSBpcyB1bmlxdWVseQorICAgICAgICAvLyBpZGVudGlmaWVkIGJ5IHRoaXMgSUQuCisg
ICAgICAgIGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQmIGNvbnRleHRJRCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dElEOyB9CisKKyAgICAgICAgLy8gUmV0dXJucyB0aGUg
YXBwY2FjaGUgY29udGV4dFR5cGUgZm9yIHRoaXMgaW5zdGFuY2UKKyAgICAgICAgQXBwbGljYXRp
b25DYWNoZUNvbnRleHRUeXBlIGNvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0
VHlwZTsgfQorCisgICAgICAgIC8vIENhbGxlZCBkdXJpbmcgZnJhbWUgY3JlYXRpb24uIFNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBvbmNlLgorICAgICAgICB2b2lkIGluaXRpYWxpemUoQXBwbGljYXRp
b25DYWNoZUNvbnRleHRUeXBlIGNvbnRleHRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCYgcGFyZW50Q29udGV4dElEKTsK
KworICAgICAgICAvLyBDYWxsZWQgZHVyaW5nIGZyYW1lIG5hdmlnYXRpb24gd2hlbiBhIG5ldyBk
b2N1bWVudCBpcyBjb21taXR0ZWQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RJbml0aWFs
Q2FjaGUoY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZUlEIGNhY2hlRG9jdW1lbnRXYXNMb2FkZWRG
cm9tKTsKKworICAgICAgICAvLyBDYWxsZWQgYWZ0ZXIgcGFyc2luZyBvZiB0aGUgSFRNTCBlbGVt
ZW50IGlzIGNvbXBsZXRlLCBhbmQgdGhlcmUgd2FzIG5vCisgICAgICAgIC8vIG1hbmlmZXN0IGF0
dHJpYnV0ZS4KKyAgICAgICAgdm9pZCBzZWxlY3RGaW5hbENhY2hlV2l0aG91dE1hbmlmZXN0KGNv
bnN0IEtVUkwmIGRvY3VtZW50VVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZUlEIGNhY2hlRG9jdW1lbnRXYXNMb2FkZWRGcm9t
KTsKKworICAgICAgICAvLyBDYWxsZWQgYWZ0ZXIgcGFyc2luZyBvZiB0aGUgSFRNTCBlbGVtZW50
IGlzIGNvbXBsZXRlLCBhbmQgdGhlcmUgd2FzIGEKKyAgICAgICAgLy8gbWFuaWZlc3QgYXR0cmli
dXRlLiBSZXR1cm5zIGZhbHNlIGlmIHRoZSB0aGUgbmF2aWdhdGlvbiBzaG91bGQgYmUgcmVzdGFy
dGVkLAorICAgICAgICAvLyB0aGlzIG9jY3VycyBpZiBhICdmb3JpZWduJyByZXNvdXJjZSB3YXMg
bG9hZGVkIGZyb20gdGhlIGNhY2hlLgorICAgICAgICBib29sIHNlbGVjdEZpbmFsQ2FjaGVXaXRo
TWFuaWZlc3QoY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlSUQgY2FjaGVEb2N1bWVudFdhc0xv
YWRlZEZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBLVVJMJiBtYW5pZmVzdFVSTG9mQ2FjaGVEb2N1bWVudFdhc0xvYWRlZEZyb20sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBtYW5pZmVzdFVS
TCk7CisKKyAgICAgICAgLy8gQ2FsbGVkIGJ5IEZyYW1lTG9hZGVyIHdoZW4gcHJlcGFyaW5nIGEg
cmVzb3VyY2UgcmVxdWVzdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb250ZXh0LgorICAgICAgICB2
b2lkIGFkZEV4dHJhRmllbGRzVG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9v
bCBtYWluUmVzb3VyY2UpOworCisgICAgICAgIC8vIENhbGxlZCBieSBGcmFtZUxvYWRlciB3aGVu
IGRlY2lkaW5nIHdoZXRoZXIgdGhlIGNvbnRlbnRzIGFyZSBlbGlnaWJsZSBmb3IgdGhlIHBhZ2Ug
Y2FjaGUuCisgICAgICAgIGJvb2wgY2FuQ2FjaGVDdXJyZW50RG9jdW1lbnRJblBhZ2VDYWNoZSgp
IGNvbnN0OworCisgICAgICAgIC8vIFN1cHBvcnQgZm9yIHRoZSBzY3JpcHRhYmxlIGludGVyZmFj
ZSBkZWZpbmVkIGJ5IERPTUFwcGxpY2F0b2luQ2FjaGUuaWRsCisgICAgICAgIEFwcGxpY2F0aW9u
Q2FjaGVTdGF0dXMgc3RhdHVzKCkgY29uc3Q7ICAKKyAgICAgICAgYm9vbCB1cGRhdGUoKTsKKyAg
ICAgICAgYm9vbCBzd2FwQ2FjaGUoKTsgICAKKyAgICAgICAgdm9pZCBzZXRET01BcHBsaWNhdGlv
bkNhY2hlKERPTUFwcGxpY2F0aW9uQ2FjaGUqIGNsaWVudCkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKCFtX0RPTUFwcGxpY2F0aW9uQ2FjaGUpOworICAgICAgICAgICAgbV9ET01BcHBs
aWNhdGlvbkNhY2hlID0gY2xpZW50OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEIG1fY29udGV4dElEOworICAgICAgICBB
cHBsaWNhdGlvbkNhY2hlQ29udGV4dFR5cGUgbV9jb250ZXh0VHlwZTsKKyAgICAgICAgRE9NQXBw
bGljYXRpb25DYWNoZSogbV9ET01BcHBsaWNhdGlvbkNhY2hlOworICAgICAgICBib29sIG1fY2Fu
Q2FjaGVJblBhZ2VDYWNoZTsKKyAgICB9OworCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgIC8vIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyNlbmRpZiAgLy8gV2ViQXBwbGlj
YXRpb25DYWNoZUNvbnRleHRfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogbG9hZGVyL2FwcGNhY2hl
Mi9BcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0
YWJsZQogICArICoKCkluZGV4OiBsb2FkZXIvYXBwY2FjaGUyL0RPTUFwcGxpY2F0aW9uQ2FjaGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9hcHBjYWNoZTIvRE9NQXBwbGljYXRpb25DYWNoZS5j
cHAJKHJldmlzaW9uIDQ0MTYzKQkoZnJvbSBsb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25D
YWNoZS5jcHA6NDQxNjMpCisrKyBsb2FkZXIvYXBwY2FjaGUyL0RPTUFwcGxpY2F0aW9uQ2FjaGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hlLmgiCisKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJf
QVBQTElDQVRJT05TKQorCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZS5oIgorI2luY2x1ZGUg
IkFwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIgorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIK
KyNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIK
KyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIlN0YXRpY1N0cmluZ0xpc3QuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitET01BcHBsaWNhdGlvbkNhY2hlOjpET01BcHBsaWNhdGlvbkNhY2hlKEZy
YW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCit7Cit9CisKK3ZvaWQgRE9NQXBwbGlj
YXRpb25DYWNoZTo6ZGlzY29ubmVjdEZyYW1lKCkKK3sKKyAgICBtX2ZyYW1lID0gMDsKK30KKwor
QXBwbGljYXRpb25DYWNoZSogRE9NQXBwbGljYXRpb25DYWNoZTo6YXNzb2NpYXRlZENhY2hlKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybiAwOworIAorICAgIHJl
dHVybiBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNo
ZSgpOworfQorCit1bnNpZ25lZCBzaG9ydCBET01BcHBsaWNhdGlvbkNhY2hlOjpzdGF0dXMoKSBj
b25zdAoreworICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gYXNzb2NpYXRlZENhY2hlKCk7
ICAgIAorICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiBVTkNBQ0hFRDsKKworICAgIHN3
aXRjaCAoY2FjaGUtPmdyb3VwKCktPnVwZGF0ZVN0YXR1cygpKSB7CisgICAgICAgIGNhc2UgQXBw
bGljYXRpb25DYWNoZUdyb3VwOjpDaGVja2luZzoKKyAgICAgICAgICAgIHJldHVybiBDSEVDS0lO
RzsKKyAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OkRvd25sb2FkaW5nOgorICAg
ICAgICAgICAgcmV0dXJuIERPV05MT0FESU5HOworICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQ2Fj
aGVHcm91cDo6SWRsZTogeworICAgICAgICAgICAgaWYgKGNhY2hlLT5ncm91cCgpLT5pc09ic29s
ZXRlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9CU09MRVRFOworICAgICAgICAgICAgaWYg
KGNhY2hlICE9IGNhY2hlLT5ncm91cCgpLT5uZXdlc3RDYWNoZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBVUERBVEVSRUFEWTsKKyAgICAgICAgICAgIHJldHVybiBJRExFOworICAgICAgICB9
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6dXBkYXRlKEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gYXNzb2NpYXRlZENhY2hlKCk7CisgICAgaWYg
KCFjYWNoZSkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIGNhY2hlLT5ncm91cCgpLT51cGRhdGUobV9mcmFtZSwgQXBw
bGljYXRpb25DYWNoZVVwZGF0ZVdpdGhvdXRCcm93c2luZ0NvbnRleHQpOworfQorCitib29sIERP
TUFwcGxpY2F0aW9uQ2FjaGU6OnN3YXBDYWNoZSgpCit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgQXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSBt
X2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZSgpOwor
ICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIElmIHRoZSBn
cm91cCBvZiBhcHBsaWNhdGlvbiBjYWNoZXMgdG8gd2hpY2ggY2FjaGUgYmVsb25ncyBoYXMgdGhl
IGxpZmVjeWNsZSBzdGF0dXMgb2Jzb2xldGUsIHVuYXNzb2NpYXRlIGRvY3VtZW50IGZyb20gY2Fj
aGUuCisgICAgaWYgKGNhY2hlLT5ncm91cCgpLT5pc09ic29sZXRlKCkpIHsKKyAgICAgICAgY2Fj
aGUtPmdyb3VwKCktPmRpc2Fzc29jaWF0ZURvY3VtZW50TG9hZGVyKG1fZnJhbWUtPmxvYWRlcigp
LT5kb2N1bWVudExvYWRlcigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ly8gSWYgdGhlcmUgaXMgbm8gbmV3ZXIgY2FjaGUsIHJhaXNlIGFuIElOVkFMSURfU1RBVEVfRVJS
IGV4Y2VwdGlvbi4KKyAgICBBcHBsaWNhdGlvbkNhY2hlKiBuZXdlc3RDYWNoZSA9IGNhY2hlLT5n
cm91cCgpLT5uZXdlc3RDYWNoZSgpOworICAgIGlmIChjYWNoZSA9PSBuZXdlc3RDYWNoZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VSVChjYWNoZS0+Z3JvdXAoKSA9PSBu
ZXdlc3RDYWNoZS0+Z3JvdXAoKSk7CisgICAgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9h
ZGVyKCktPnNldEFwcGxpY2F0aW9uQ2FjaGUobmV3ZXN0Q2FjaGUpOworICAgIAorICAgIHJldHVy
biB0cnVlOworfQorICAgIAordm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpzd2FwQ2FjaGUoRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFzd2FwQ2FjaGUoKSkKKyAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKK30KKworUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBET01BcHBs
aWNhdGlvbkNhY2hlOjppdGVtcygpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OworICAg
IGlmIChBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSA9IGFzc29jaWF0ZWRDYWNoZSgpKSB7CisgICAg
ICAgIHVuc2lnbmVkIG51bUVudHJpZXMgPSBjYWNoZS0+bnVtRHluYW1pY0VudHJpZXMoKTsKKyAg
ICAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtRW50cmllcyk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FbnRyaWVzOyArK2kpCisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKGNhY2hlLT5keW5hbWljRW50cnkoaSkpOworICAgIH0KKyAgICByZXR1cm4g
U3RhdGljU3RyaW5nTGlzdDo6YWRvcHQocmVzdWx0KTsKK30KKworYm9vbCBET01BcHBsaWNhdGlv
bkNhY2hlOjpoYXNJdGVtKGNvbnN0IEtVUkwmIHVybCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgQXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSBhc3NvY2lhdGVkQ2FjaGUoKTsKKyAgICBpZiAo
IWNhY2hlKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIXVybC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZWMg
PSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQXBwbGlj
YXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IGNhY2hlLT5yZXNvdXJjZUZvclVSTCh1cmwu
c3RyaW5nKCkpOworICAgIHJldHVybiByZXNvdXJjZSAmJiAocmVzb3VyY2UtPnR5cGUoKSAmIEFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6RHluYW1pYyk7Cit9CisgICAgCit2b2lkIERPTUFwcGxp
Y2F0aW9uQ2FjaGU6OmFkZChjb25zdCBLVVJMJiB1cmwsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gYXNzb2NpYXRlZENhY2hlKCk7CisgICAgaWYg
KCFjYWNoZSkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1
cm47CisgICAgfQorIAorICAgIGlmICghdXJsLmlzVmFsaWQoKSkgeworICAgICAgICBlYyA9IFNZ
TlRBWF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGlmICghY2Fj
aGUtPmFkZER5bmFtaWNFbnRyeSh1cmwpKSB7CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIHVzZSB0
aGUgKGN1cnJlbnRseSBub3Qgc3BlY2lmaWVkKSBzZWN1cml0eSBleGNlcHRpb25zIGluIEhUTUw1
IDQuMy40CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgIH0KK30KKwordm9pZCBET01B
cHBsaWNhdGlvbkNhY2hlOjpyZW1vdmUoY29uc3QgS1VSTCYgdXJsLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSA9IGFzc29jaWF0ZWRDYWNoZSgpOwor
ICAgIGlmICghY2FjaGUpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBjYWNoZS0+cmVtb3ZlRHluYW1pY0VudHJ5KHVy
bCk7Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZyYW1lLT5kb2N1
bWVudCgpOworfQorCit2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZEV2ZW50TGlzdGVuZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lciwgYm9vbCkKK3sKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3Ig
aXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOworICAgIGlmIChpdGVyID09
IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpIHsKKyAgICAgICAgTGlzdGVuZXJWZWN0b3IgbGlzdGVu
ZXJzOworICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOworICAgICAgICBt
X2V2ZW50TGlzdGVuZXJzLmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgTGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXItPnNlY29uZDsKKyAgICAg
ICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJz
LmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVy
KSB7CisgICAgICAgICAgICBpZiAoKmxpc3RlbmVySXRlciA9PSBldmVudExpc3RlbmVyKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbGlzdGVu
ZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsKKyAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQo
ZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOworICAgIH0gICAgCit9CisKK3ZvaWQgRE9NQXBwbGljYXRp
b25DYWNoZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgRXZlbnRMaXN0ZW5lciogZXZlbnRMaXN0ZW5lciwgYm9vbCkKK3sKKyAgICBFdmVudExpc3Rl
bmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUp
OworICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gaXRlci0+c2Vjb25kOwor
ICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxp
c3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3Rl
bmVySXRlcikgeworICAgICAgICBpZiAoKmxpc3RlbmVySXRlciA9PSBldmVudExpc3RlbmVyKSB7
CisgICAgICAgICAgICBsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVySXRlciAtIGxpc3RlbmVycy5i
ZWdpbigpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9v
bCBET01BcHBsaWNhdGlvbkNhY2hlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LT50eXBl
KCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGVjID0gRXZlbnRFeGNlcHRpb246OlVOU1BFQ0lGSUVE
X0VWRU5UX1RZUEVfRVJSOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
TGlzdGVuZXJWZWN0b3IgbGlzdGVuZXJzQ29weSA9IG1fZXZlbnRMaXN0ZW5lcnMuZ2V0KGV2ZW50
LT50eXBlKCkpOworICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3Rl
bmVySXRlciA9IGxpc3RlbmVyc0NvcHkuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVy
c0NvcHkuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7CisgICAgICAgIGV2ZW50LT5zZXRUYXJnZXQo
dGhpcyk7CisgICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOworICAgICAgICBs
aXN0ZW5lckl0ZXItPmdldCgpLT5oYW5kbGVFdmVudChldmVudC5nZXQoKSwgZmFsc2UpOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Cit9CisKK3Zv
aWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKK3sKKyAgICBBU1NFUlQobV9mcmFt
ZSk7CisgICAgCisgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IEV2ZW50OjpjcmVhdGUoZXZlbnRU
eXBlLCBmYWxzZSwgZmFsc2UpOworICAgIGlmIChsaXN0ZW5lcikgeworICAgICAgICBldmVudC0+
c2V0VGFyZ2V0KHRoaXMpOworICAgICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsK
KyAgICAgICAgbGlzdGVuZXItPmhhbmRsZUV2ZW50KGV2ZW50LmdldCgpLCBmYWxzZSk7CisgICAg
fQorICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGRpc3BhdGNoRXZlbnQoZXZl
bnQucmVsZWFzZSgpLCBlYyk7CisgICAgQVNTRVJUKCFlYyk7ICAgIAorfQorCit2b2lkIERPTUFw
cGxpY2F0aW9uQ2FjaGU6OmNhbGxDaGVja2luZ0xpc3RlbmVyKCkKK3sKKyAgICBjYWxsTGlzdGVu
ZXIoZXZlbnROYW1lcygpLmNoZWNraW5nRXZlbnQsIG1fb25DaGVja2luZ0xpc3RlbmVyLmdldCgp
KTsKK30KKwordm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsRXJyb3JMaXN0ZW5lcigpCit7
CisgICAgY2FsbExpc3RlbmVyKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBtX29uRXJyb3JMaXN0
ZW5lci5nZXQoKSk7Cit9CisKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbE5vVXBkYXRl
TGlzdGVuZXIoKQoreworICAgIGNhbGxMaXN0ZW5lcihldmVudE5hbWVzKCkubm91cGRhdGVFdmVu
dCwgbV9vbk5vVXBkYXRlTGlzdGVuZXIuZ2V0KCkpOworfQorCit2b2lkIERPTUFwcGxpY2F0aW9u
Q2FjaGU6OmNhbGxEb3dubG9hZGluZ0xpc3RlbmVyKCkKK3sKKyAgICBjYWxsTGlzdGVuZXIoZXZl
bnROYW1lcygpLmRvd25sb2FkaW5nRXZlbnQsIG1fb25Eb3dubG9hZGluZ0xpc3RlbmVyLmdldCgp
KTsKK30KKwordm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsUHJvZ3Jlc3NMaXN0ZW5lcigp
Cit7CisgICAgY2FsbExpc3RlbmVyKGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50LCBtX29uUHJv
Z3Jlc3NMaXN0ZW5lci5nZXQoKSk7Cit9CisKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2Fs
bFVwZGF0ZVJlYWR5TGlzdGVuZXIoKQoreworICAgIGNhbGxMaXN0ZW5lcihldmVudE5hbWVzKCku
dXBkYXRlcmVhZHlFdmVudCwgbV9vblVwZGF0ZVJlYWR5TGlzdGVuZXIuZ2V0KCkpOworfQorCit2
b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxDYWNoZWRMaXN0ZW5lcigpCit7CisgICAgY2Fs
bExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jYWNoZWRFdmVudCwgbV9vbkNhY2hlZExpc3RlbmVyLmdl
dCgpKTsKK30KKwordm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxsT2Jzb2xldGVMaXN0ZW5l
cigpCit7CisgICAgY2FsbExpc3RlbmVyKGV2ZW50TmFtZXMoKS5vYnNvbGV0ZUV2ZW50LCBtX29u
T2Jzb2xldGVMaXN0ZW5lci5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCkluZGV4OiBsb2FkZXIv
YXBwY2FjaGUyL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9h
cHBjYWNoZTIvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDApCisrKyBsb2FkZXIv
YXBwY2FjaGUyL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwx
MiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRPTUFwcGxpY2F0aW9u
Q2FjaGUuaCIKIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaWYgRU5B
QkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQogCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZS5oIgot
I2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVHcm91cC5oIgotI2luY2x1ZGUgIkFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAi
RXZlbnQuaCIKICNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV2ZW50TGlz
dGVuZXIuaCIKQEAgLTQ0LDQwICs0MCwzNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERPTUFw
cGxpY2F0aW9uQ2FjaGU6OkRPTUFwcGxpY2F0aW9uQ2FjaGUoRnJhbWUqIGZyYW1lKQogICAgIDog
bV9mcmFtZShmcmFtZSkKKyAgICAsIG1fYXBwY2FjaGVGcm9udGVuZChmcmFtZS0+bG9hZGVyKCkt
PmFwcGNhY2hlRnJvbnRlbmQoKSkKIHsKKyAgICBhcHBjYWNoZUZyb250ZW5kKCktPnNldERPTUFw
cGxpY2F0aW9uQ2FjaGUodGhpcyk7CiB9CiAKIHZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6ZGlz
Y29ubmVjdEZyYW1lKCkKIHsKKyAgICBhcHBjYWNoZUZyb250ZW5kKCktPnNldERPTUFwcGxpY2F0
aW9uQ2FjaGUoMCk7CiAgICAgbV9mcmFtZSA9IDA7Ci19Ci0KLUFwcGxpY2F0aW9uQ2FjaGUqIERP
TUFwcGxpY2F0aW9uQ2FjaGU6OmFzc29jaWF0ZWRDYWNoZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2ZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAKLSAgICByZXR1cm4gbV9mcmFtZS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGUoKTsKKyAgICBtX2FwcGNhY2hl
RnJvbnRlbmQgPSAwOwogfQogCiB1bnNpZ25lZCBzaG9ydCBET01BcHBsaWNhdGlvbkNhY2hlOjpz
dGF0dXMoKSBjb25zdAogewotICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gYXNzb2NpYXRl
ZENhY2hlKCk7ICAgIAorICAgIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCogY2FjaGUgPSBhcHBj
YWNoZUZyb250ZW5kKCk7ICAgIAogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBVTkNB
Q0hFRDsKIAotICAgIHN3aXRjaCAoY2FjaGUtPmdyb3VwKCktPnVwZGF0ZVN0YXR1cygpKSB7Ci0g
ICAgICAgIGNhc2UgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpDaGVja2luZzoKKyAgICBzd2l0Y2gg
KGNhY2hlLT5zdGF0dXMoKSkgeworICAgICAgICBjYXNlIEFQUENBQ0hFX1VOQ0FDSEVEOgorICAg
ICAgICAgICAgcmV0dXJuIFVOQ0FDSEVEOworICAgICAgICBjYXNlIEFQUENBQ0hFX0NIRUNLSU5H
OgogICAgICAgICAgICAgcmV0dXJuIENIRUNLSU5HOwotICAgICAgICBjYXNlIEFwcGxpY2F0aW9u
Q2FjaGVHcm91cDo6RG93bmxvYWRpbmc6CisgICAgICAgIGNhc2UgQVBQQ0FDSEVfRE9XTkxPQURJ
Tkc6CiAgICAgICAgICAgICByZXR1cm4gRE9XTkxPQURJTkc7Ci0gICAgICAgIGNhc2UgQXBwbGlj
YXRpb25DYWNoZUdyb3VwOjpJZGxlOiB7Ci0gICAgICAgICAgICBpZiAoY2FjaGUtPmdyb3VwKCkt
PmlzT2Jzb2xldGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gT0JTT0xFVEU7Ci0gICAgICAg
ICAgICBpZiAoY2FjaGUgIT0gY2FjaGUtPmdyb3VwKCktPm5ld2VzdENhY2hlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFVQREFURVJFQURZOworICAgICAgICBjYXNlIEFQUENBQ0hFX0lETEU6
CiAgICAgICAgICAgICByZXR1cm4gSURMRTsKLSAgICAgICAgfQorICAgICAgICBjYXNlIEFQUENB
Q0hFX09CU09MRVRFOgorICAgICAgICAgICAgcmV0dXJuIE9CU09MRVRFOworICAgICAgICBjYXNl
IEFQUENBQ0hFX1VQREFURVJFQURZOgorICAgICAgICAgICAgcmV0dXJuIFVQREFURVJFQURZOwog
ICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODYsMzkgKzc5LDIyIEBAIHVu
c2lnbmVkIHNob3J0IERPTUFwcGxpY2F0aW9uQ2FjaGU6OnN0YXQKIAogdm9pZCBET01BcHBsaWNh
dGlvbkNhY2hlOjp1cGRhdGUoRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgQXBwbGljYXRpb25D
YWNoZSogY2FjaGUgPSBhc3NvY2lhdGVkQ2FjaGUoKTsKKyAgICBBcHBsaWNhdGlvbkNhY2hlRnJv
bnRlbmQqIGNhY2hlID0gYXBwY2FjaGVGcm9udGVuZCgpOyAgICAKICAgICBpZiAoIWNhY2hlKSB7
CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCi0gICAgY2FjaGUtPmdyb3VwKCktPnVwZGF0ZShtX2ZyYW1lLCBBcHBsaWNhdGlvbkNh
Y2hlVXBkYXRlV2l0aG91dEJyb3dzaW5nQ29udGV4dCk7CisgICAgY2FjaGUtPnVwZGF0ZSgpOwog
fQogCiBib29sIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnN3YXBDYWNoZSgpCiB7Ci0gICAgaWYgKCFt
X2ZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgQXBwbGljYXRpb25DYWNo
ZSogY2FjaGUgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRp
b25DYWNoZSgpOworICAgIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCogY2FjaGUgPSBhcHBjYWNo
ZUZyb250ZW5kKCk7ICAgIAogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIC8vIElmIHRoZSBncm91cCBvZiBhcHBsaWNhdGlvbiBjYWNoZXMgdG8gd2hpY2ggY2Fj
aGUgYmVsb25ncyBoYXMgdGhlIGxpZmVjeWNsZSBzdGF0dXMgb2Jzb2xldGUsIHVuYXNzb2NpYXRl
IGRvY3VtZW50IGZyb20gY2FjaGUuCi0gICAgaWYgKGNhY2hlLT5ncm91cCgpLT5pc09ic29sZXRl
KCkpIHsKLSAgICAgICAgY2FjaGUtPmdyb3VwKCktPmRpc2Fzc29jaWF0ZURvY3VtZW50TG9hZGVy
KG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gbmV3ZXIgY2FjaGUsIHJhaXNlIGFu
IElOVkFMSURfU1RBVEVfRVJSIGV4Y2VwdGlvbi4KLSAgICBBcHBsaWNhdGlvbkNhY2hlKiBuZXdl
c3RDYWNoZSA9IGNhY2hlLT5ncm91cCgpLT5uZXdlc3RDYWNoZSgpOwotICAgIGlmIChjYWNoZSA9
PSBuZXdlc3RDYWNoZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIEFTU0VSVChj
YWNoZS0+Z3JvdXAoKSA9PSBuZXdlc3RDYWNoZS0+Z3JvdXAoKSk7Ci0gICAgbV9mcmFtZS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnNldEFwcGxpY2F0aW9uQ2FjaGUobmV3ZXN0Q2FjaGUp
OwotICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBjYWNoZS0+c3dhcENhY2hlKCk7
CiB9CiAgICAgCiB2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnN3YXBDYWNoZShFeGNlcHRpb25D
b2RlJiBlYykKQEAgLTEyNyw2OCArMTAzLDkgQEAgdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpz
d2FwQ2FjaGUoRXhjZQogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogfQogCi1QYXNz
UmVmUHRyPERPTVN0cmluZ0xpc3Q+IERPTUFwcGxpY2F0aW9uQ2FjaGU6Oml0ZW1zKCkKLXsKLSAg
ICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7Ci0gICAgaWYgKEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hl
ID0gYXNzb2NpYXRlZENhY2hlKCkpIHsKLSAgICAgICAgdW5zaWduZWQgbnVtRW50cmllcyA9IGNh
Y2hlLT5udW1EeW5hbWljRW50cmllcygpOwotICAgICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShudW1FbnRyaWVzKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bUVudHJpZXM7ICsraSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY2FjaGUtPmR5bmFtaWNF
bnRyeShpKSk7Ci0gICAgfQotICAgIHJldHVybiBTdGF0aWNTdHJpbmdMaXN0OjphZG9wdChyZXN1
bHQpOwotfQotCi1ib29sIERPTUFwcGxpY2F0aW9uQ2FjaGU6Omhhc0l0ZW0oY29uc3QgS1VSTCYg
dXJsLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBBcHBsaWNhdGlvbkNhY2hlKiBjYWNoZSA9
IGFzc29jaWF0ZWRDYWNoZSgpOwotICAgIGlmICghY2FjaGUpIHsKLSAgICAgICAgZWMgPSBJTlZB
TElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICgh
dXJsLmlzVmFsaWQoKSkgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNl
ID0gY2FjaGUtPnJlc291cmNlRm9yVVJMKHVybC5zdHJpbmcoKSk7Ci0gICAgcmV0dXJuIHJlc291
cmNlICYmIChyZXNvdXJjZS0+dHlwZSgpICYgQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpEeW5h
bWljKTsKLX0KLSAgICAKLXZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6YWRkKGNvbnN0IEtVUkwm
IHVybCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQXBwbGljYXRpb25DYWNoZSogY2FjaGUg
PSBhc3NvY2lhdGVkQ2FjaGUoKTsKLSAgICBpZiAoIWNhY2hlKSB7Ci0gICAgICAgIGVjID0gSU5W
QUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gCi0gICAgaWYgKCF1cmwu
aXNWYWxpZCgpKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAgICAgCi0gICAgaWYgKCFjYWNoZS0+YWRkRHluYW1pY0VudHJ5KHVybCkpIHsK
LSAgICAgICAgLy8gVGhpcyBzaG91bGQgdXNlIHRoZSAoY3VycmVudGx5IG5vdCBzcGVjaWZpZWQp
IHNlY3VyaXR5IGV4Y2VwdGlvbnMgaW4gSFRNTDUgNC4zLjQKLSAgICAgICAgZWMgPSBTRUNVUklU
WV9FUlI7Ci0gICAgfQotfQotCi12b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnJlbW92ZShjb25z
dCBLVVJMJiB1cmwsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFwcGxpY2F0aW9uQ2FjaGUq
IGNhY2hlID0gYXNzb2NpYXRlZENhY2hlKCk7Ci0gICAgaWYgKCFjYWNoZSkgewotICAgICAgICBl
YyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAg
IGNhY2hlLT5yZW1vdmVEeW5hbWljRW50cnkodXJsKTsKLX0KLQogU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogRE9NQXBwbGljYXRpb25DYWNoZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCk7CisgICAgcmV0dXJuIG1fZnJhbWUg
PyBtX2ZyYW1lLT5kb2N1bWVudCgpIDogMDsKIH0KIAogdm9pZCBET01BcHBsaWNhdGlvbkNhY2hl
OjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIsIGJvb2wpCkBAIC0yOTgsNiArMjE1LDUx
IEBAIHZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbE9ic29sZXRlTGkKICAgICBjYWxsTGlz
dGVuZXIoZXZlbnROYW1lcygpLm9ic29sZXRlRXZlbnQsIG1fb25PYnNvbGV0ZUxpc3RlbmVyLmdl
dCgpKTsKIH0KIAorI2lmIFVTRShWOCkKK1JlZlB0cjxFdmVudExpc3RlbmVyPiogRE9NQXBwbGlj
YXRpb25DYWNoZTo6Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lclN0b3JhZ2UoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUpCit7CisgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCku
Y2hlY2tpbmdFdmVudCkKKyAgICAgICAgcmV0dXJuICZtX29uQ2hlY2tpbmdMaXN0ZW5lcjsKKyAg
ICBlbHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQpCisgICAgICAg
IHJldHVybiAmbV9vbkVycm9yTGlzdGVuZXI7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS5ub3VwZGF0ZUV2ZW50KQorICAgICAgICByZXR1cm4gJm1fb25Ob1VwZGF0ZUxp
c3RlbmVyOworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZG93bmxvYWRp
bmdFdmVudCkKKyAgICAgICAgcmV0dXJuICZtX29uRG93bmxvYWRpbmdMaXN0ZW5lcjsKKyAgICBl
bHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQpCisgICAgICAg
IHJldHVybiAmbV9vblByb2dyZXNzTGlzdGVuZXI7CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09
IGV2ZW50TmFtZXMoKS51cGRhdGVyZWFkeUV2ZW50KQorICAgICAgICByZXR1cm4gJm1fb25VcGRh
dGVSZWFkeUxpc3RlbmVyOworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCku
Y2FjaGVkRXZlbnQpCisgICAgICAgIHJldHVybiAmbV9vbkNhY2hlZExpc3RlbmVyOworICAgIGVs
c2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkub2Jzb2xldGVFdmVudCkKKyAgICAgICAg
cmV0dXJuICZtX29uT2Jzb2xldGVMaXN0ZW5lcjsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAw
OworfQorCitFdmVudExpc3RlbmVyKiBET01BcHBsaWNhdGlvbkNhY2hlOjpnZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQoreworICAgIFJlZlB0
cjxFdmVudExpc3RlbmVyPiogc3RvcmFnZSA9IGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXJTdG9y
YWdlKGV2ZW50VHlwZSk7CisgICAgQVNTRVJUKHN0b3JhZ2UpOworICAgIHJldHVybiAoKnN0b3Jh
Z2UpLmdldCgpOworfQorCit2b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OnNldEF0dHJpYnV0ZUV2
ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbGlzdGVuZXIpCit7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+KiBzdG9y
YWdlID0gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lclN0b3JhZ2UoZXZlbnRUeXBlKTsKKyAgICBB
U1NFUlQoc3RvcmFnZSk7CisgICAgKCpzdG9yYWdlKSA9IGxpc3RlbmVyOworfQorCit2b2lkIERP
TUFwcGxpY2F0aW9uQ2FjaGU6OmNsZWFyQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSkKK3sKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4qIHN0b3Jh
Z2UgPSBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyU3RvcmFnZShldmVudFR5cGUpOworICAgIEFT
U0VSVChzdG9yYWdlKTsKKyAgICAoKnN0b3JhZ2UpID0gMDsKK30KKyNlbmRpZgorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TKQorI2VuZGlmIC8vIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKClByb3BlcnR5IGNoYW5n
ZXMgb246IGxvYWRlci9hcHBjYWNoZTIvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOm1lcmdlaW5mbwoKSW5kZXg6IGxvYWRlci9hcHBjYWNoZTIvRE9NQXBwbGlj
YXRpb25DYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9hcHBjYWNoZTIvRE9NQXBwbGljYXRp
b25DYWNoZS5oCShyZXZpc2lvbiA0NDE2MykJKGZyb20gbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxp
Y2F0aW9uQ2FjaGUuaDo0NDE2MykKKysrIGxvYWRlci9hcHBjYWNoZTIvRE9NQXBwbGljYXRpb25D
YWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRE9NQXBwbGljYXRp
b25DYWNoZV9oCisjZGVmaW5lIERPTUFwcGxpY2F0aW9uQ2FjaGVfaAorCisjaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZ0hhc2guaCIK
KyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXBwbGljYXRpb25DYWNoZTsKK2NsYXNzIEF0b21pY1N0
cmluZ0ltcGw7CitjbGFzcyBET01TdHJpbmdMaXN0OworY2xhc3MgRnJhbWU7CitjbGFzcyBLVVJM
OworY2xhc3MgU3RyaW5nOworICAgIAorY2xhc3MgRE9NQXBwbGljYXRpb25DYWNoZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPERPTUFwcGxpY2F0aW9uQ2FjaGU+LCBwdWJsaWMgRXZlbnRUYXJnZXQgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTUFwcGxpY2F0aW9uQ2FjaGU+IGNyZWF0
ZShGcmFtZSogZnJhbWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01BcHBsaWNhdGlvbkNhY2hl
KGZyYW1lKSk7IH0KKyAgICB2b2lkIGRpc2Nvbm5lY3RGcmFtZSgpOworCisgICAgZW51bSBTdGF0
dXMgeworICAgICAgICBVTkNBQ0hFRCA9IDAsCisgICAgICAgIElETEUgPSAxLAorICAgICAgICBD
SEVDS0lORyA9IDIsCisgICAgICAgIERPV05MT0FESU5HID0gMywKKyAgICAgICAgVVBEQVRFUkVB
RFkgPSA0LAorICAgICAgICBPQlNPTEVURSA9IDUKKyAgICB9OworCisgICAgdW5zaWduZWQgc2hv
cnQgc3RhdHVzKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCB1cGRhdGUoRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgc3dhcENhY2hlKEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAKKyAgICBQYXNzUmVm
UHRyPERPTVN0cmluZ0xpc3Q+IGl0ZW1zKCk7CisgICAgYm9vbCBoYXNJdGVtKGNvbnN0IEtVUkwm
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBhZGQoY29uc3QgS1VSTCYsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2b2lkIHJlbW92ZShjb25zdCBLVVJMJiwgRXhjZXB0aW9uQ29kZSYpOworCisg
ICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7CisgICAg
dmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOworICAgIHZpcnR1YWwgYm9v
bCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2RlJik7CisgICAg
CisgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEV2ZW50TGlzdGVuZXI+ID4gTGlzdGVuZXJWZWN0
b3I7CisgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywgTGlzdGVuZXJWZWN0b3I+IEV2
ZW50TGlzdGVuZXJzTWFwOworICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVudExpc3RlbmVycygp
IHsgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lcnM7IH0KKworICAgIHVzaW5nIFJlZkNvdW50ZWQ8RE9N
QXBwbGljYXRpb25DYWNoZT46OnJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPERPTUFwcGxpY2F0
aW9uQ2FjaGU+OjpkZXJlZjsKKworICAgIHZvaWQgc2V0T25jaGVja2luZyhQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbkNoZWNraW5nTGlzdGVuZXIgPSBldmVu
dExpc3RlbmVyOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25jaGVja2luZygpIGNvbnN0IHsgcmV0
dXJuIG1fb25DaGVja2luZ0xpc3RlbmVyLmdldCgpOyB9CisKKyAgICB2b2lkIHNldE9uZXJyb3Io
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25FcnJvckxpc3Rl
bmVyID0gZXZlbnRMaXN0ZW5lcjsgfQorICAgIEV2ZW50TGlzdGVuZXIqIG9uZXJyb3IoKSBjb25z
dCB7IHJldHVybiBtX29uRXJyb3JMaXN0ZW5lci5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRPbm5v
dXBkYXRlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uTm9V
cGRhdGVMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbm5v
dXBkYXRlKCkgY29uc3QgeyByZXR1cm4gbV9vbk5vVXBkYXRlTGlzdGVuZXIuZ2V0KCk7IH0KKwor
ICAgIHZvaWQgc2V0T25kb3dubG9hZGluZyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIpIHsgbV9vbkRvd25sb2FkaW5nTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9Cisg
ICAgRXZlbnRMaXN0ZW5lciogb25kb3dubG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fb25Eb3du
bG9hZGluZ0xpc3RlbmVyLmdldCgpOyB9CisgICAgCisgICAgdm9pZCBzZXRPbnByb2dyZXNzKFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uUHJvZ3Jlc3NMaXN0
ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbnByb2dyZXNzKCkg
Y29uc3QgeyByZXR1cm4gbV9vblByb2dyZXNzTGlzdGVuZXIuZ2V0KCk7IH0KKworICAgIHZvaWQg
c2V0T251cGRhdGVyZWFkeShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIp
IHsgbV9vblVwZGF0ZVJlYWR5TGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9CisgICAgRXZlbnRM
aXN0ZW5lciogb251cGRhdGVyZWFkeSgpIGNvbnN0IHsgcmV0dXJuIG1fb25VcGRhdGVSZWFkeUxp
c3RlbmVyLmdldCgpOyB9CisKKyAgICB2b2lkIHNldE9uY2FjaGVkKFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uQ2FjaGVkTGlzdGVuZXIgPSBldmVudExpc3Rl
bmVyOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25jYWNoZWQoKSBjb25zdCB7IHJldHVybiBtX29u
Q2FjaGVkTGlzdGVuZXIuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0T25vYnNvbGV0ZShQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbk9ic29sZXRlTGlzdGVuZXIg
PSBldmVudExpc3RlbmVyOyB9CisgICAgRXZlbnRMaXN0ZW5lciogb25vYnNvbGV0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb25PYnNvbGV0ZUxpc3RlbmVyLmdldCgpOyB9CisKKyAgICB2aXJ0dWFsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKyAg
ICBET01BcHBsaWNhdGlvbkNhY2hlKiB0b0RPTUFwcGxpY2F0aW9uQ2FjaGUoKSB7IHJldHVybiB0
aGlzOyB9CisKKyAgICB2b2lkIGNhbGxDaGVja2luZ0xpc3RlbmVyKCk7CisgICAgdm9pZCBjYWxs
RXJyb3JMaXN0ZW5lcigpOyAgICAKKyAgICB2b2lkIGNhbGxOb1VwZGF0ZUxpc3RlbmVyKCk7ICAg
IAorICAgIHZvaWQgY2FsbERvd25sb2FkaW5nTGlzdGVuZXIoKTsKKyAgICB2b2lkIGNhbGxQcm9n
cmVzc0xpc3RlbmVyKCk7CisgICAgdm9pZCBjYWxsVXBkYXRlUmVhZHlMaXN0ZW5lcigpOworICAg
IHZvaWQgY2FsbENhY2hlZExpc3RlbmVyKCk7CisgICAgdm9pZCBjYWxsT2Jzb2xldGVMaXN0ZW5l
cigpOworICAgIAorcHJpdmF0ZToKKyAgICBET01BcHBsaWNhdGlvbkNhY2hlKEZyYW1lKik7Cisg
ICAgdm9pZCBjYWxsTGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50
TGlzdGVuZXIqKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJl
ZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0K
KworICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGFzc29jaWF0ZWRDYWNoZSgpIGNvbnN0OworICAgIGJv
b2wgc3dhcENhY2hlKCk7CisgICAgCisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25DaGVj
a2luZ0xpc3RlbmVyOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uRXJyb3JMaXN0ZW5l
cjsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbk5vVXBkYXRlTGlzdGVuZXI7CisgICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25Eb3dubG9hZGluZ0xpc3RlbmVyOworICAgIFJlZlB0
cjxFdmVudExpc3RlbmVyPiBtX29uUHJvZ3Jlc3NMaXN0ZW5lcjsKKyAgICBSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbV9vblVwZGF0ZVJlYWR5TGlzdGVuZXI7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IG1fb25DYWNoZWRMaXN0ZW5lcjsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbk9i
c29sZXRlTGlzdGVuZXI7CisgICAgCisgICAgRXZlbnRMaXN0ZW5lcnNNYXAgbV9ldmVudExpc3Rl
bmVyczsKKworICAgIEZyYW1lKiBtX2ZyYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKworI2VuZGlm
IC8vIERPTUFwcGxpY2F0aW9uQ2FjaGVfaApJbmRleDogbG9hZGVyL2FwcGNhY2hlMi9ET01BcHBs
aWNhdGlvbkNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL2FwcGNhY2hlMi9ET01BcHBsaWNh
dGlvbkNhY2hlLmgJKHJldmlzaW9uIDApCisrKyBsb2FkZXIvYXBwY2FjaGUyL0RPTUFwcGxpY2F0
aW9uQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOSBAQAogI2lmbmRlZiBET01B
cHBsaWNhdGlvbkNhY2hlX2gKICNkZWZpbmUgRE9NQXBwbGljYXRpb25DYWNoZV9oCiAKLSNpZiBF
TkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9D
QUNIRSkKIAorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZC5oIgogI2luY2x1ZGUg
IkF0b21pY1N0cmluZ0hhc2guaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUg
IkV2ZW50TGlzdGVuZXIuaCIKQEAgLTM4LDcgKzM5LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBBcHBsaWNhdGlvbkNhY2hlOwogY2xhc3MgQXRvbWljU3RyaW5nSW1wbDsKIGNs
YXNzIERPTVN0cmluZ0xpc3Q7CiBjbGFzcyBGcmFtZTsKQEAgLTQ3LDYgKzQ3LDcgQEAgY2xhc3Mg
U3RyaW5nOwogICAgIAogY2xhc3MgRE9NQXBwbGljYXRpb25DYWNoZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPERPTUFwcGxpY2F0aW9uQ2FjaGU+LCBwdWJsaWMgRXZlbnRUYXJnZXQgewogcHVibGljOgor
ICAgIC8vIEZJWE1FOiBpbnRlZ3JhdGUgd2l0aCB3b3JrZXJzCiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RE9NQXBwbGljYXRpb25DYWNoZT4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IERPTUFwcGxpY2F0aW9uQ2FjaGUoZnJhbWUpKTsgfQogICAgIHZvaWQgZGlzY29u
bmVjdEZyYW1lKCk7CiAKQEAgLTYwLDE1ICs2MSw5IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAg
dW5zaWduZWQgc2hvcnQgc3RhdHVzKCkgY29uc3Q7Ci0gICAgCiAgICAgdm9pZCB1cGRhdGUoRXhj
ZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgc3dhcENhY2hlKEV4Y2VwdGlvbkNvZGUmKTsKICAgICAK
LSAgICBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGl0ZW1zKCk7Ci0gICAgYm9vbCBoYXNJdGVt
KGNvbnN0IEtVUkwmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBhZGQoY29uc3QgS1VSTCYs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHJlbW92ZShjb25zdCBLVVJMJiwgRXhjZXB0aW9u
Q29kZSYpOwotCiAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2Fw
dHVyZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOwogICAg
IHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25D
b2RlJik7CkBAIC0xMTUsMTUgKzExMCwyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWxsVXBkYXRl
UmVhZHlMaXN0ZW5lcigpOwogICAgIHZvaWQgY2FsbENhY2hlZExpc3RlbmVyKCk7CiAgICAgdm9p
ZCBjYWxsT2Jzb2xldGVMaXN0ZW5lcigpOworCisjaWYgVVNFKFY4KQorICAgIEV2ZW50TGlzdGVu
ZXIqIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUpOworICAgIHZvaWQgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcik7CisgICAg
dm9pZCBjbGVhckF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUpOworI2VuZGlmCiAgICAgCiBwcml2YXRlOgogICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUo
RnJhbWUqKTsKKwogICAgIHZvaWQgY2FsbExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBFdmVudExpc3RlbmVyKik7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50
VGFyZ2V0KCkgeyByZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkg
eyBkZXJlZigpOyB9CiAKLSAgICBBcHBsaWNhdGlvbkNhY2hlKiBhc3NvY2lhdGVkQ2FjaGUoKSBj
b25zdDsKKyAgICBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQqIGFwcGNhY2hlRnJvbnRlbmQoKSBj
b25zdCB7IHJldHVybiBtX2FwcGNhY2hlRnJvbnRlbmQ7IH0KICAgICBib29sIHN3YXBDYWNoZSgp
OwogICAgIAogICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uQ2hlY2tpbmdMaXN0ZW5lcjsK
QEAgLTEzNCwxNCArMTM2LDIwIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IG1fb25VcGRhdGVSZWFkeUxpc3RlbmVyOwogICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29u
Q2FjaGVkTGlzdGVuZXI7CiAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25PYnNvbGV0ZUxp
c3RlbmVyOwotICAgIAorICNpZiBVU0UoVjgpCisgICAgLy8gUmV0dXJucyBhIHBvaW50ZXIgdG8g
dGhlIGFwcHJvcGlhdGUgZGF0YSBtZW1iZXIgYWJvdmUKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4qIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXJTdG9yYWdlKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlKTsKKyNlbmRpZgorCiAgICAgRXZlbnRMaXN0ZW5lcnNNYXAgbV9ldmVudExpc3Rl
bmVyczsKIAorCiAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgQXBwbGljYXRpb25DYWNoZUZyb250
ZW5kKiBtX2FwcGNhY2hlRnJvbnRlbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZiAvLyBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2VuZGlmIC8vIEVO
QUJMRShBUFBMSUNBVElPTl9DQUNIRSkKIAogI2VuZGlmIC8vIERPTUFwcGxpY2F0aW9uQ2FjaGVf
aAoKUHJvcGVydHkgY2hhbmdlcyBvbjogbG9hZGVyL2FwcGNhY2hlMi9ET01BcHBsaWNhdGlvbkNh
Y2hlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1lcmdlaW5mbwoKSW5kZXg6IGxvYWRlci9hcHBj
YWNoZTIvRE9NQXBwbGljYXRpb25DYWNoZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL2FwcGNh
Y2hlMi9ET01BcHBsaWNhdGlvbkNhY2hlLmlkbAkocmV2aXNpb24gNDQxNjMpCShmcm9tIGxvYWRl
ci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmlkbDo0NDE2MykKKysrIGxvYWRlci9hcHBj
YWNoZTIvRE9NQXBwbGljYXRpb25DYWNoZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
IAorbW9kdWxlIG9mZmxpbmUgeworIAorICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlv
bmFsPU9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUywKKyAgICAgICAgQ3VzdG9tTWFya0Z1bmN0aW9u
CisgICAgXSBET01BcHBsaWNhdGlvbkNhY2hlIHsKKyAgICAgICAgLy8gdXBkYXRlIHN0YXR1cwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBVTkNBQ0hFRCA9IDA7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0IElETEUgPSAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBD
SEVDS0lORyA9IDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPV05MT0FESU5HID0g
MzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVVBEQVRFUkVBRFkgPSA0OworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBPQlNPTEVURSA9IDU7CisgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CisKKyAgICAgICAgdm9pZCB1cGRhdGUoKQor
ICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgc3dhcENhY2hl
KCkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworCisjaWYgZGVmaW5lZChFTkFC
TEVfQVBQTElDQVRJT05fQ0FDSEVfRFlOQU1JQ19FTlRSSUVTKSAmJiBFTkFCTEVfQVBQTElDQVRJ
T05fQ0FDSEVfRFlOQU1JQ19FTlRSSUVTCisgICAgICAgIC8vIGR5bmFtaWMgZW50cmllcworICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nTGlzdCBpdGVtczsKKyAgICAgICAgW0N1
c3RvbV0gYm9vbGVhbiBoYXNJdGVtKGluIERPTVN0cmluZyB1cmwpCisgICAgICAgICAgICByYWlz
ZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBhZGQoaW4gRE9NU3RyaW5n
IHVyaSkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbQ3VzdG9t
XSB2b2lkIHJlbW92ZShpbiBET01TdHJpbmcgdXJpKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CisjZW5kaWYKKworICAgICAgICAvLyBldmVudHMKKyAgICAgICAgYXR0cmlidXRl
IEV2ZW50TGlzdGVuZXIgb25jaGVja2luZzsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVu
ZXIgb25lcnJvcjsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25ub3VwZGF0ZTsK
KyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25kb3dubG9hZGluZzsKKyAgICAgICAg
YXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25wcm9ncmVzczsKKyAgICAgICAgYXR0cmlidXRlIEV2
ZW50TGlzdGVuZXIgb251cGRhdGVyZWFkeTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVu
ZXIgb25jYWNoZWQ7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ub2Jzb2xldGU7
CisKKyAgICAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCisgICAgICAgIFtDdXN0b21dIHZv
aWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7
CisgICAgICAgIFtDdXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcg
dHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVu
dExpc3RlbmVyIGxpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hF
dmVudChpbiBFdmVudCBldnQpCisgICAgICAgICAgICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOwor
ICAgIH07CisKK30KSW5kZXg6IGxvYWRlci9hcHBjYWNoZTIvRE9NQXBwbGljYXRpb25DYWNoZS5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gbG9hZGVyL2FwcGNhY2hlMi9ET01BcHBsaWNhdGlvbkNhY2hlLmlk
bAkocmV2aXNpb24gMCkKKysrIGxvYWRlci9hcHBjYWNoZTIvRE9NQXBwbGljYXRpb25DYWNoZS5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEwICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAg
Ki8KICAKLW1vZHVsZSBvZmZsaW5lIHsKK21vZHVsZSBhcHBjYWNoZSB7CiAgCiAgICAgaW50ZXJm
YWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9T0ZGTElORV9XRUJfQVBQTElDQVRJT05TLAorICAg
ICAgICBDb25kaXRpb25hbD1BUFBMSUNBVElPTl9DQUNIRSwKICAgICAgICAgQ3VzdG9tTWFya0Z1
bmN0aW9uCiAgICAgXSBET01BcHBsaWNhdGlvbkNhY2hlIHsKICAgICAgICAgLy8gdXBkYXRlIHN0
YXR1cwpAQCAtNDMsMTcgKzQzLDYgQEAgbW9kdWxlIG9mZmxpbmUgewogICAgICAgICB2b2lkIHN3
YXBDYWNoZSgpCiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAotI2lmIGRlZmlu
ZWQoRU5BQkxFX0FQUExJQ0FUSU9OX0NBQ0hFX0RZTkFNSUNfRU5UUklFUykgJiYgRU5BQkxFX0FQ
UExJQ0FUSU9OX0NBQ0hFX0RZTkFNSUNfRU5UUklFUwotICAgICAgICAvLyBkeW5hbWljIGVudHJp
ZXMKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZ0xpc3QgaXRlbXM7Ci0gICAg
ICAgIFtDdXN0b21dIGJvb2xlYW4gaGFzSXRlbShpbiBET01TdHJpbmcgdXJsKQotICAgICAgICAg
ICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgYWRkKGluIERP
TVN0cmluZyB1cmkpCi0gICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAg
W0N1c3RvbV0gdm9pZCByZW1vdmUoaW4gRE9NU3RyaW5nIHVyaSkKLSAgICAgICAgICAgIHJhaXNl
cyhET01FeGNlcHRpb24pOwotI2VuZGlmCi0KICAgICAgICAgLy8gZXZlbnRzCiAgICAgICAgIGF0
dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uY2hlY2tpbmc7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVu
dExpc3RlbmVyIG9uZXJyb3I7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBsb2FkZXIvYXBwY2FjaGUy
L0RPTUFwcGxpY2F0aW9uQ2FjaGUuaWRsCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptZXJnZWluZm8K
CkluZGV4OiBwYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9ET01XaW5kb3cu
Y3BwCShyZXZpc2lvbiA0NDE2MykKKysrIHBhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNyArNzYsNyBAQAogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAjZW5kaWYKIAot
I2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaWYgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQogI2luY2x1ZGUg
IkRPTUFwcGxpY2F0aW9uQ2FjaGUuaCIKICNlbmRpZgogCkBAIC00MzUsNyArNDM1LDcgQEAgdm9p
ZCBET01XaW5kb3c6OmNsZWFyKCkKICAgICBtX2xvY2FsU3RvcmFnZSA9IDA7CiAjZW5kaWYKIAot
I2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaWYgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQogICAgIGlmICht
X2FwcGxpY2F0aW9uQ2FjaGUpCiAgICAgICAgIG1fYXBwbGljYXRpb25DYWNoZS0+ZGlzY29ubmVj
dEZyYW1lKCk7CiAgICAgbV9hcHBsaWNhdGlvbkNhY2hlID0gMDsKQEAgLTUwNSw3ICs1MDUsNyBA
QCBDb25zb2xlKiBET01XaW5kb3c6OmNvbnNvbGUoKSBjb25zdAogICAgIHJldHVybiBtX2NvbnNv
bGUuZ2V0KCk7CiB9CiAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpIHx8IEVOQUJMRShBUFBMSUNBVElPTl9D
QUNIRSkKIERPTUFwcGxpY2F0aW9uQ2FjaGUqIERPTVdpbmRvdzo6YXBwbGljYXRpb25DYWNoZSgp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2FwcGxpY2F0aW9uQ2FjaGUpCkluZGV4OiBwYWdlL0RPTVdp
bmRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRE9NV2luZG93LmgJKHJldmlzaW9uIDQ0MTYzKQor
KysgcGFnZS9ET01XaW5kb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU3RvcmFnZTsKICNlbmRpZgogCi0jaWYgRU5BQkxF
KE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElD
QVRJT05TKSB8fCBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiAgICAgY2xhc3MgRE9NQXBwbGlj
YXRpb25DYWNoZTsKICNlbmRpZgogCkBAIC0xOTYsNyArMTk2LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIENvbnNvbGUqIGNvbnNvbGUoKSBjb25zdDsKIAotI2lmIEVOQUJMRShP
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykgfHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQogICAgICAgICBET01BcHBsaWNhdGlv
bkNhY2hlKiBhcHBsaWNhdGlvbkNhY2hlKCkgY29uc3Q7CiAjZW5kaWYKIApAQCAtMzIxLDcgKzMy
MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3RvcmFnZSogb3B0aW9uYWxTZXNz
aW9uU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvblN0b3JhZ2UuZ2V0KCk7IH0KICAg
ICAgICAgU3RvcmFnZSogb3B0aW9uYWxMb2NhbFN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2xv
Y2FsU3RvcmFnZS5nZXQoKTsgfQogI2VuZGlmCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSB8fCBFTkFCTEUo
QVBQTElDQVRJT05fQ0FDSEUpCiAgICAgICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIG9wdGlvbmFs
QXBwbGljYXRpb25DYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbGljYXRpb25DYWNoZS5nZXQo
KTsgfQogI2VuZGlmCiAKQEAgLTM1Niw3ICszNTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIG11dGFibGUgUmVmUHRyPFN0b3JhZ2U+IG1fc2Vzc2lvblN0b3JhZ2U7CiAgICAgICAg
IG11dGFibGUgUmVmUHRyPFN0b3JhZ2U+IG1fbG9jYWxTdG9yYWdlOwogI2VuZGlmCi0jaWYgRU5B
QkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQ
TElDQVRJT05TKSB8fCBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiAgICAgICAgIG11dGFibGUg
UmVmUHRyPERPTUFwcGxpY2F0aW9uQ2FjaGU+IG1fYXBwbGljYXRpb25DYWNoZTsKICNlbmRpZgog
CkluZGV4OiBwYWdlL0RPTVdpbmRvdy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9ET01XaW5kb3cu
aWRsCShyZXZpc2lvbiA0NDE2MykKKysrIHBhZ2UvRE9NV2luZG93LmlkbAkod29ya2luZyBjb3B5
KQpAQCAtMTUyLDcgKzE1Miw3IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBXZWJLaXRQb2lu
dCB3ZWJraXRDb252ZXJ0UG9pbnRGcm9tUGFnZVRvTm9kZShpbiBOb2RlIG5vZGUsIGluIFdlYktp
dFBvaW50IHApOwogICAgICAgICBXZWJLaXRQb2ludCB3ZWJraXRDb252ZXJ0UG9pbnRGcm9tTm9k
ZVRvUGFnZShpbiBOb2RlIG5vZGUsIGluIFdlYktpdFBvaW50IHApOwogCi0jaWYgZGVmaW5lZChF
TkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSAmJiBFTkFCTEVfT0ZGTElORV9XRUJfQVBQ
TElDQVRJT05TCisjaWYgKGRlZmluZWQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykg
JiYgRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgKGRlZmluZWQoRU5BQkxFX0FQ
UExJQ0FUSU9OX0NBQ0hFKSAmJiBFTkFCTEVfQVBQTElDQVRJT05fQ0FDSEUpCiAgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBET01BcHBsaWNhdGlvbkNhY2hlIGFwcGxpY2F0aW9uQ2FjaGU7CiAj
ZW5kaWYgICAgCiAjaWYgZGVmaW5lZChFTkFCTEVfREFUQUJBU0UpICYmIEVOQUJMRV9EQVRBQkFT
RQpJbmRleDogcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFtZS5jcHAJKHJl
dmlzaW9uIDQ0MTYzKQorKysgcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNDgs
NiArMTE0OCwxMSBAQCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIEZyYW1lOjpvd25lckVsZW1lCiAg
ICAgcmV0dXJuIG1fb3duZXJFbGVtZW50OwogfQogCitGcmFtZSogRnJhbWU6OnBhcmVudEZyYW1l
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFyZW50RnJvbU93bmVyRWxlbWVudChvd25lckVsZW1l
bnQoKSk7Cit9CisKIFJlbmRlclBhcnQqIEZyYW1lOjpvd25lclJlbmRlcmVyKCkgY29uc3QKIHsK
ICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCA9IG1fb3duZXJFbGVtZW50
OwpJbmRleDogcGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRnJhbWUuaAkocmV2aXNp
b24gNDQxNjMpCisrKyBwYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDcg
QEAgcHVibGljOgogCiAgICAgUGFnZSogcGFnZSgpIGNvbnN0OwogICAgIEhUTUxGcmFtZU93bmVy
RWxlbWVudCogb3duZXJFbGVtZW50KCkgY29uc3Q7CisgICAgRnJhbWUqIHBhcmVudEZyYW1lKCkg
Y29uc3Q7CiAKICAgICB2b2lkIHBhZ2VEZXN0cm95ZWQoKTsKICAgICB2b2lkIGRpc2Nvbm5lY3RP
d25lckVsZW1lbnQoKTsKSW5kZXg6IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNl
LmNwcAkocmV2aXNpb24gNDQxNjMpCisrKyBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVz
dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw5IEBAIGF1dG9fcHRyPFJlc291
cmNlUmVxdWVzdD4gUmVzb3VyY2VSZXF1ZXMKICAgICB9CiAgICAgcmVxdWVzdC0+c2V0SFRUUEJv
ZHkoZGF0YS0+bV9odHRwQm9keSk7CiAgICAgcmVxdWVzdC0+c2V0QWxsb3dIVFRQQ29va2llcyhk
YXRhLT5tX2FsbG93SFRUUENvb2tpZXMpOworI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkK
KyAgICByZXF1ZXN0LT5zZXRBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEKGRhdGEtPm1fYXBwY2Fj
aGVDb250ZXh0SUQpOworI2VuZGlmCiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKQEAgLTg0LDYg
Kzg3LDkgQEAgYXV0b19wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPgogICAgIGlm
IChtX2h0dHBCb2R5KQogICAgICAgICBkYXRhLT5tX2h0dHBCb2R5ID0gbV9odHRwQm9keS0+ZGVl
cENvcHkoKTsKICAgICBkYXRhLT5tX2FsbG93SFRUUENvb2tpZXMgPSBtX2FsbG93SFRUUENvb2tp
ZXM7CisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgIGRhdGEtPm1fYXBwY2FjaGVD
b250ZXh0SUQgPSBtX2FwcGNhY2hlQ29udGV4dElEOworI2VuZGlmCiAgICAgcmV0dXJuIGRhdGE7
CiB9CiAKSW5kZXg6IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShyZXZpc2lv
biA0NDE2MykKKysrIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw5IEBACiAjaW5jbHVkZSAiRm9ybURhdGEuaCIKICNpbmNs
dWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgorI2lmIEVOQUJMRShBUFBM
SUNBVElPTl9DQUNIRSkKKyNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlQ29tbW9uLmgiCisjZW5k
aWYKIAogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC0xMTUs
NiArMTE4LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCByZXBvcnRVcGxv
YWRQcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwb3J0VXBsb2FkUHJvZ3Jlc3M7IH0KICAg
ICAgICAgdm9pZCBzZXRSZXBvcnRVcGxvYWRQcm9ncmVzcyhib29sIHJlcG9ydFVwbG9hZFByb2dy
ZXNzKSB7IG1fcmVwb3J0VXBsb2FkUHJvZ3Jlc3MgPSByZXBvcnRVcGxvYWRQcm9ncmVzczsgfQog
CisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgICAgICAvLyBBbGxvd3MgdGhlIHJl
cXVlc3QgdG8gYmUgbWF0Y2hlZCB1cCB3aXRoIGl0cyBjYWNoZSBjb250ZXh0LgorICAgICAgICBH
bG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEIGFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQo
KSBjb25zdCB7IHJldHVybiBtX2FwcGNhY2hlQ29udGV4dElEOyB9CisgICAgICAgIHZvaWQgc2V0
QXBwbGljYXRpb25DYWNoZUNvbnRleHRJRChHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElE
IGlkKSB7IG1fYXBwY2FjaGVDb250ZXh0SUQgPSBpZDsgfQorI2VuZGlmCisKICAgICBwcm90ZWN0
ZWQ6CiAgICAgICAgIC8vIFVzZWQgd2hlbiBSZXNvdXJjZVJlcXVlc3QgaXMgaW5pdGlhbGl6ZWQg
ZnJvbSBhIHBsYXRmb3JtIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXF1ZXN0CiAgICAgICAgIFJl
c291cmNlUmVxdWVzdEJhc2UoKQpAQCAtMTUyLDcgKzE2MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgbXV0YWJsZSBib29sIG1fcmVzb3VyY2VSZXF1ZXN0VXBkYXRlZDsKICAgICAg
ICAgbXV0YWJsZSBib29sIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZDsKICAgICAgICAgYm9vbCBt
X3JlcG9ydFVwbG9hZFByb2dyZXNzOwotCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQor
ICAgICAgICBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEIG1fYXBwY2FjaGVDb250ZXh0
SUQ7CisjZW5kaWYKICAgICBwcml2YXRlOgogICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IGFzUmVzb3VyY2VSZXF1ZXN0KCkgY29uc3Q7CiAgICAgfTsKQEAgLTE3NCw2ICsxODUsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVzcG9uc2VDb250
ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk7CiAgICAgICAgIFJlZlB0cjxGb3Jt
RGF0YT4gbV9odHRwQm9keTsKICAgICAgICAgYm9vbCBtX2FsbG93SFRUUENvb2tpZXM7CisjaWYg
RU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgICAgICBHbG9iYWxBcHBsaWNhdGlvbkNhY2hl
Q29udGV4dElEIG1fYXBwY2FjaGVDb250ZXh0SUQ7CisjZW5kaWYKICAgICB9OwogICAgIAogICAg
IHVuc2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsK
SW5kZXg6IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCShyZXZpc2lv
biA0NDE2MykKKysrIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSwxMCBAQCBhdXRvX3B0cjxSZXNvdXJjZVJlc3BvbnNl
PiBSZXNvdXJjZVJlc3BvCiAgICAgcmVzcG9uc2UtPm1faGF2ZVBhcnNlZENhY2hlQ29udHJvbCA9
IGRhdGEtPm1faGF2ZVBhcnNlZENhY2hlQ29udHJvbDsKICAgICByZXNwb25zZS0+bV9jYWNoZUNv
bnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlID0gZGF0YS0+bV9jYWNoZUNvbnRyb2xDb250YWlu
c011c3RSZXZhbGlkYXRlOwogICAgIHJlc3BvbnNlLT5tX2NhY2hlQ29udHJvbENvbnRhaW5zTm9D
YWNoZSA9IGRhdGEtPm1fY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlOworI2lmIEVOQUJMRShB
UFBMSUNBVElPTl9DQUNIRSkKKyAgICByZXNwb25zZS0+bV9hcHBjYWNoZUlEID0gZGF0YS0+bV9h
cHBjYWNoZUlEOworICAgIHJlc3BvbnNlLT5tX21hbmlmZXN0VVJMID0gZGF0YS0+bV9tYW5pZmVz
dFVSTDsKKyNlbmRpZgogICAgIHJldHVybiByZXNwb25zZTsKIH0KIApAQCAtNzQsNiArNzgsMTAg
QEAgYXV0b19wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YQogICAgIGRhdGEtPm1f
aGF2ZVBhcnNlZENhY2hlQ29udHJvbCA9IG1faGF2ZVBhcnNlZENhY2hlQ29udHJvbDsKICAgICBk
YXRhLT5tX2NhY2hlQ29udHJvbENvbnRhaW5zTXVzdFJldmFsaWRhdGUgPSBtX2NhY2hlQ29udHJv
bENvbnRhaW5zTXVzdFJldmFsaWRhdGU7CiAgICAgZGF0YS0+bV9jYWNoZUNvbnRyb2xDb250YWlu
c05vQ2FjaGUgPSBtX2NhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZTsKKyNpZiBFTkFCTEUoQVBQ
TElDQVRJT05fQ0FDSEUpCisgICAgZGF0YS0+bV9hcHBjYWNoZUlEID0gbV9hcHBjYWNoZUlEOwor
ICAgIGRhdGEtPm1fbWFuaWZlc3RVUkwgPSBtX21hbmlmZXN0VVJMOworI2VuZGlmCiAgICAgcmV0
dXJuIGRhdGE7CiB9CiAKSW5kZXg6IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNl
LmgJKHJldmlzaW9uIDQ0MTYzKQorKysgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNl
QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBACiAKICNpbmNsdWRlICJIVFRQ
SGVhZGVyTWFwLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9D
QUNIRSkKKyNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlQ29tbW9uLmgiCisjZW5kaWYKIAogI2lu
Y2x1ZGUgPG1lbW9yeT4KIApAQCAtODQsNiArODcsMTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
TGFzdE1vZGlmaWVkRGF0ZSh0aW1lX3QpOwogICAgIHRpbWVfdCBsYXN0TW9kaWZpZWREYXRlKCkg
Y29uc3Q7CiAKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisgICAgdm9pZCBzZXRBcHBs
aWNhdGlvbkNhY2hlSUQoQXBwbGljYXRpb25DYWNoZUlEIGNhY2hlSUQpIHsgbV9hcHBjYWNoZUlE
ID0gY2FjaGVJRDsgfQorICAgIEFwcGxpY2F0aW9uQ2FjaGVJRCBhcHBsaWNhdGlvbkNhY2hlSUQo
KSBjb25zdCB7IHJldHVybiBtX2FwcGNhY2hlSUQ7IH0KKworICAgIHZvaWQgc2V0TWFuaWZlc3RV
UkwoS1VSTCYgbWFuaWZlc3RVUkwpIHsgbV9tYW5pZmVzdFVSTCA9IG1hbmlmZXN0VVJMOyB9Cisg
ICAgY29uc3QgS1VSTCYgbWFuaWZlc3RVUkwoKSBjb25zdCB7IHJldHVybiBtX21hbmlmZXN0VVJM
OyB9CisjZW5kaWYKKwogICAgIGJvb2wgY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlKCkgY29u
c3QKICAgICB7CiAgICAgICAgIGlmICghbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sKQpAQCAtMTEy
LDYgKzEyMyw5IEBAIHByb3RlY3RlZDoKICAgICAgICAgLCBtX2h0dHBTdGF0dXNDb2RlKDApCiAg
ICAgICAgICwgbV9leHBpcmF0aW9uRGF0ZSgwKQogICAgICAgICAsIG1fbGFzdE1vZGlmaWVkRGF0
ZSgwKQorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICAgICAgLCBtX2FwcGNhY2hl
SUQoTm9BcHBsaWNhdGlvbkNhY2hlSUQpCisjZW5kaWYKICAgICAgICAgLCBtX2lzTnVsbCh0cnVl
KQogICAgICAgICAsIG1faGF2ZVBhcnNlZENhY2hlQ29udHJvbChmYWxzZSkKICAgICB7CkBAIC0x
MjYsNiArMTQwLDkgQEAgcHJvdGVjdGVkOgogICAgICAgICAsIG1faHR0cFN0YXR1c0NvZGUoMCkK
ICAgICAgICAgLCBtX2V4cGlyYXRpb25EYXRlKDApCiAgICAgICAgICwgbV9sYXN0TW9kaWZpZWRE
YXRlKDApCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgICAgICAsIG1fYXBwY2Fj
aGVJRChOb0FwcGxpY2F0aW9uQ2FjaGVJRCkKKyNlbmRpZgogICAgICAgICAsIG1faXNOdWxsKGZh
bHNlKQogICAgICAgICAsIG1faGF2ZVBhcnNlZENhY2hlQ29udHJvbChmYWxzZSkKICAgICB7CkBA
IC0xNDksNiArMTY2LDEwIEBAIHByb3RlY3RlZDoKICAgICBIVFRQSGVhZGVyTWFwIG1faHR0cEhl
YWRlckZpZWxkczsKICAgICB0aW1lX3QgbV9leHBpcmF0aW9uRGF0ZTsKICAgICB0aW1lX3QgbV9s
YXN0TW9kaWZpZWREYXRlOworI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICBLVVJM
IG1fbWFuaWZlc3RVUkw7CisgICAgQXBwbGljYXRpb25DYWNoZUlEIG1fYXBwY2FjaGVJRDsKKyNl
bmRpZgogICAgIGJvb2wgbV9pc051bGwgOiAxOwogCiBwcml2YXRlOgpAQCAtMTczLDYgKzE5NCwx
MCBAQCBzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YSB7CiAgICAgT3duUHRy
PENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+IG1faHR0cEhlYWRlcnM7CiAgICAgdGltZV90
IG1fZXhwaXJhdGlvbkRhdGU7CiAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVkRGF0ZTsKKyNpZiBF
TkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisgICAgQXBwbGljYXRpb25DYWNoZUlEIG1fYXBwY2Fj
aGVJRDsKKyAgICBLVVJMIG1fbWFuaWZlc3RVUkw7CisjZW5kaWYKICAgICBib29sIG1faGF2ZVBh
cnNlZENhY2hlQ29udHJvbCA6IDE7CiAgICAgYm9vbCBtX2NhY2hlQ29udHJvbENvbnRhaW5zTXVz
dFJldmFsaWRhdGUgOiAxOwogICAgIGJvb2wgbV9jYWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGUg
OiAxOwpJbmRleDogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVxdWVzdC5o
CShyZXZpc2lvbiA0NDE2MykKKysrIHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VS
ZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKEtVUkwodXJsKSwgVXNlUHJv
dG9jb2xDYWNoZVBvbGljeSkKICAgICAgICAgICAgICwgbV9yZXF1ZXN0b3JJRCgwKQogICAgICAg
ICAgICAgLCBtX3JlcXVlc3RvclByb2Nlc3NJRCgwKQotICAgICAgICAgICAgLCBtX2FwcENhY2hl
Q29udGV4dElEKDApCiAgICAgICAgICAgICAsIG1fdGFyZ2V0VHlwZShUYXJnZXRJc1N1YlJlc291
cmNlKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTU4LDcgKzU3LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHVybCwgVXNlUHJvdG9j
b2xDYWNoZVBvbGljeSkKICAgICAgICAgICAgICwgbV9yZXF1ZXN0b3JJRCgwKQogICAgICAgICAg
ICAgLCBtX3JlcXVlc3RvclByb2Nlc3NJRCgwKQotICAgICAgICAgICAgLCBtX2FwcENhY2hlQ29u
dGV4dElEKDApCiAgICAgICAgICAgICAsIG1fdGFyZ2V0VHlwZShUYXJnZXRJc1N1YlJlc291cmNl
KQogICAgICAgICAgICAgLCBtX3NlY3VyaXR5SW5mbyhzZWN1cml0eUluZm8pCiAgICAgICAgIHsK
QEAgLTY4LDcgKzY2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgOiBSZXNv
dXJjZVJlcXVlc3RCYXNlKHVybCwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKICAgICAgICAgICAg
ICwgbV9yZXF1ZXN0b3JJRCgwKQogICAgICAgICAgICAgLCBtX3JlcXVlc3RvclByb2Nlc3NJRCgw
KQotICAgICAgICAgICAgLCBtX2FwcENhY2hlQ29udGV4dElEKDApCiAgICAgICAgICAgICAsIG1f
dGFyZ2V0VHlwZShUYXJnZXRJc1N1YlJlc291cmNlKQogICAgICAgICB7CiAgICAgICAgIH0KQEAg
LTc3LDcgKzc0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgOiBSZXNvdXJj
ZVJlcXVlc3RCYXNlKHVybCwgcG9saWN5KQogICAgICAgICAgICAgLCBtX3JlcXVlc3RvcklEKDAp
CiAgICAgICAgICAgICAsIG1fcmVxdWVzdG9yUHJvY2Vzc0lEKDApCi0gICAgICAgICAgICAsIG1f
YXBwQ2FjaGVDb250ZXh0SUQoMCkKICAgICAgICAgICAgICwgbV90YXJnZXRUeXBlKFRhcmdldElz
U3ViUmVzb3VyY2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNldEhUVFBSZWZlcnJlcihyZWZl
cnJlcik7CkBAIC04Nyw3ICs4Myw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAg
IDogUmVzb3VyY2VSZXF1ZXN0QmFzZShLVVJMKCksIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCiAg
ICAgICAgICAgICAsIG1fcmVxdWVzdG9ySUQoMCkKICAgICAgICAgICAgICwgbV9yZXF1ZXN0b3JQ
cm9jZXNzSUQoMCkKLSAgICAgICAgICAgICwgbV9hcHBDYWNoZUNvbnRleHRJRCgwKQogICAgICAg
ICAgICAgLCBtX3RhcmdldFR5cGUoVGFyZ2V0SXNTdWJSZXNvdXJjZSkKICAgICAgICAgewogICAg
ICAgICB9CkBAIC0xMDcsMTAgKzEwMiw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
aW50IHJlcXVlc3RvclByb2Nlc3NJRCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdG9yUHJvY2Vz
c0lEOyB9CiAgICAgICAgIHZvaWQgc2V0UmVxdWVzdG9yUHJvY2Vzc0lEKGludCByZXF1ZXN0b3JQ
cm9jZXNzSUQpIHsgbV9yZXF1ZXN0b3JQcm9jZXNzSUQgPSByZXF1ZXN0b3JQcm9jZXNzSUQ7IH0K
IAotICAgICAgICAvLyBBbGxvd3MgdGhlIHJlcXVlc3QgdG8gYmUgbWF0Y2hlZCB1cCB3aXRoIGl0
cyBhcHAgY2FjaGUgY29udGV4dC4KLSAgICAgICAgaW50IGFwcENhY2hlQ29udGV4dElEKCkgY29u
c3QgeyByZXR1cm4gbV9hcHBDYWNoZUNvbnRleHRJRDsgfQotICAgICAgICB2b2lkIHNldEFwcENh
Y2hlQ29udGV4dElEKGludCBpZCkgeyBtX2FwcENhY2hlQ29udGV4dElEID0gaWQ7IH0KLQogICAg
ICAgICAvLyBPcGFxdWUgYnVmZmVyIHRoYXQgZGVzY3JpYmVzIHRoZSBzZWN1cml0eSBzdGF0ZSAo
aW5jbHVkaW5nIFNTTAogICAgICAgICAvLyBjb25uZWN0aW9uIHN0YXRlKSBmb3IgdGhlIHJlc291
cmNlIHRoYXQgc2hvdWxkIGJlIHJlcG9ydGVkIHdoZW4gdGhlCiAgICAgICAgIC8vIHJlc291cmNl
IGhhcyBiZWVuIGxvYWRlZC4gIFRoaXMgaXMgdXNlZCB0byBzaW11bGF0ZSBzZWN1cmUKQEAgLTEy
OCw3ICsxMTksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgaW50IG1fcmVxdWVz
dG9ySUQ7CiAgICAgICAgIGludCBtX3JlcXVlc3RvclByb2Nlc3NJRDsKLSAgICAgICAgaW50IG1f
YXBwQ2FjaGVDb250ZXh0SUQ7CiAgICAgICAgIFRhcmdldFR5cGUgbV90YXJnZXRUeXBlOwogICAg
ICAgICBDU3RyaW5nIG1fc2VjdXJpdHlJbmZvOwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31726</attachid>
            <date>2009-06-23 12:27:56 -0700</date>
            <delta_ts>2009-06-23 12:27:56 -0700</delta_ts>
            <desc>ApplicationCacheFrontent + ApplicationCacheBridge</desc>
            <filename>issue113554_7048.diff</filename>
            <type>text/plain</type>
            <size>113967</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IGRvbS9FdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9FdmVudFRhcmdldC5o
CShyZXZpc2lvbiA0NDIwMikKKysrIGRvbS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw3ICs1OSw3IEBACiAgICAgICAgIHZpcnR1YWwgRE9NV2luZG93KiB0b0RPTVdpbmRvdygp
OwogICAgICAgICB2aXJ0dWFsIFhNTEh0dHBSZXF1ZXN0KiB0b1hNTEh0dHBSZXF1ZXN0KCk7CiAg
ICAgICAgIHZpcnR1YWwgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHRvWE1MSHR0cFJlcXVlc3RVcGxv
YWQoKTsKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2lmIEVOQUJMRShP
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpIHx8IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKICAg
ICAgICAgdmlydHVhbCBET01BcHBsaWNhdGlvbkNhY2hlKiB0b0RPTUFwcGxpY2F0aW9uQ2FjaGUo
KTsKICNlbmRpZgogI2lmIEVOQUJMRShTVkcpCkluZGV4OiBkb20vRXZlbnRUYXJnZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGRvbS9FdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDQ0MjAyKQorKysgZG9t
L0V2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQAogICAgIHJl
dHVybiAwOwogfQogCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpZiBF
TkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSB8fCBFTkFCTEUoQVBQTElDQVRJT05fQ0FD
SEUpCiBET01BcHBsaWNhdGlvbkNhY2hlKiBFdmVudFRhcmdldDo6dG9ET01BcHBsaWNhdGlvbkNh
Y2hlKCkKIHsKICAgICByZXR1cm4gMDsKSW5kZXg6IHBhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHBhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiA0NDIwMikKKysrIHBhZ2UvRnJhbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTQ4LDYgKzExNDgsMTEgQEAKICAgICByZXR1cm4gbV9vd25lckVs
ZW1lbnQ7CiB9CiAKK0ZyYW1lKiBGcmFtZTo6cGFyZW50RnJhbWUoKSBjb25zdAoreworICAgIHJl
dHVybiBwYXJlbnRGcm9tT3duZXJFbGVtZW50KG93bmVyRWxlbWVudCgpKTsKK30KKwogUmVuZGVy
UGFydCogRnJhbWU6Om93bmVyUmVuZGVyZXIoKSBjb25zdAogewogICAgIEhUTUxGcmFtZU93bmVy
RWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9vd25lckVsZW1lbnQ7CkluZGV4OiBwYWdlL0RPTVdp
bmRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRE9NV2luZG93LmgJKHJldmlzaW9uIDQ0MjAyKQor
KysgcGFnZS9ET01XaW5kb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQAogICAg
IGNsYXNzIFN0b3JhZ2U7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNB
VElPTlMpCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQ
UExJQ0FUSU9OX0NBQ0hFKQogICAgIGNsYXNzIERPTUFwcGxpY2F0aW9uQ2FjaGU7CiAjZW5kaWYK
IApAQCAtMTk2LDcgKzE5Niw3IEBACiAKICAgICAgICAgQ29uc29sZSogY29uc29sZSgpIGNvbnN0
OwogCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZG
TElORV9XRUJfQVBQTElDQVRJT05TKSB8fCBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiAgICAg
ICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIGFwcGxpY2F0aW9uQ2FjaGUoKSBjb25zdDsKICNlbmRp
ZgogCkBAIC0zMjEsNyArMzIxLDcgQEAKICAgICAgICAgU3RvcmFnZSogb3B0aW9uYWxTZXNzaW9u
U3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvblN0b3JhZ2UuZ2V0KCk7IH0KICAgICAg
ICAgU3RvcmFnZSogb3B0aW9uYWxMb2NhbFN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2xvY2Fs
U3RvcmFnZS5nZXQoKTsgfQogI2VuZGlmCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSB8fCBFTkFCTEUoQVBQ
TElDQVRJT05fQ0FDSEUpCiAgICAgICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIG9wdGlvbmFsQXBw
bGljYXRpb25DYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbGljYXRpb25DYWNoZS5nZXQoKTsg
fQogI2VuZGlmCiAKQEAgLTM1Niw3ICszNTYsNyBAQAogICAgICAgICBtdXRhYmxlIFJlZlB0cjxT
dG9yYWdlPiBtX3Nlc3Npb25TdG9yYWdlOwogICAgICAgICBtdXRhYmxlIFJlZlB0cjxTdG9yYWdl
PiBtX2xvY2FsU3RvcmFnZTsKICNlbmRpZgotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNB
VElPTlMpCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQ
UExJQ0FUSU9OX0NBQ0hFKQogICAgICAgICBtdXRhYmxlIFJlZlB0cjxET01BcHBsaWNhdGlvbkNh
Y2hlPiBtX2FwcGxpY2F0aW9uQ2FjaGU7CiAjZW5kaWYKIApJbmRleDogcGFnZS9ET01XaW5kb3cu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRE9NV2luZG93LmlkbAkocmV2aXNpb24gNDQyMDIpCisr
KyBwYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQAog
ICAgICAgICBXZWJLaXRQb2ludCB3ZWJraXRDb252ZXJ0UG9pbnRGcm9tUGFnZVRvTm9kZShpbiBO
b2RlIG5vZGUsIGluIFdlYktpdFBvaW50IHApOwogICAgICAgICBXZWJLaXRQb2ludCB3ZWJraXRD
b252ZXJ0UG9pbnRGcm9tTm9kZVRvUGFnZShpbiBOb2RlIG5vZGUsIGluIFdlYktpdFBvaW50IHAp
OwogCi0jaWYgZGVmaW5lZChFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSAmJiBFTkFC
TEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TCisjaWYgKGRlZmluZWQoRU5BQkxFX09GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykgJiYgRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwg
KGRlZmluZWQoRU5BQkxFX0FQUExJQ0FUSU9OX0NBQ0hFKSAmJiBFTkFCTEVfQVBQTElDQVRJT05f
Q0FDSEUpCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01BcHBsaWNhdGlvbkNhY2hlIGFw
cGxpY2F0aW9uQ2FjaGU7CiAjZW5kaWYgICAgCiAjaWYgZGVmaW5lZChFTkFCTEVfREFUQUJBU0Up
ICYmIEVOQUJMRV9EQVRBQkFTRQpJbmRleDogcGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBh
Z2UvRnJhbWUuaAkocmV2aXNpb24gNDQyMDIpCisrKyBwYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk4LDYgKzk4LDcgQEAKIAogICAgIFBhZ2UqIHBhZ2UoKSBjb25zdDsKICAgICBIVE1M
RnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCgpIGNvbnN0OworICAgIEZyYW1lKiBwYXJl
bnRGcmFtZSgpIGNvbnN0OwogCiAgICAgdm9pZCBwYWdlRGVzdHJveWVkKCk7CiAgICAgdm9pZCBk
aXNjb25uZWN0T3duZXJFbGVtZW50KCk7CkluZGV4OiBwYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiA0NDIwMikKKysrIHBhZ2UvRE9N
V2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQAogI2luY2x1ZGUgIlN0
b3JhZ2VBcmVhLmgiCiAjZW5kaWYKIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElP
TlMpCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQUExJ
Q0FUSU9OX0NBQ0hFKQogI2luY2x1ZGUgIkRPTUFwcGxpY2F0aW9uQ2FjaGUuaCIKICNlbmRpZgog
CkBAIC00MzUsNyArNDM1LDcgQEAKICAgICBtX2xvY2FsU3RvcmFnZSA9IDA7CiAjZW5kaWYKIAot
I2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaWYgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQogICAgIGlmICht
X2FwcGxpY2F0aW9uQ2FjaGUpCiAgICAgICAgIG1fYXBwbGljYXRpb25DYWNoZS0+ZGlzY29ubmVj
dEZyYW1lKCk7CiAgICAgbV9hcHBsaWNhdGlvbkNhY2hlID0gMDsKQEAgLTUwNSw3ICs1MDUsNyBA
QAogICAgIHJldHVybiBtX2NvbnNvbGUuZ2V0KCk7CiB9CiAKLSNpZiBFTkFCTEUoT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TKQorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpIHx8
IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKIERPTUFwcGxpY2F0aW9uQ2FjaGUqIERPTVdpbmRv
dzo6YXBwbGljYXRpb25DYWNoZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2FwcGxpY2F0aW9uQ2Fj
aGUpCkluZGV4OiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVxdWVzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXF1ZXN0LmgJ
KHJldmlzaW9uIDQ0MjAyKQorKysgcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJl
cXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNiBAQAogICAgICAgICAgICAgOiBS
ZXNvdXJjZVJlcXVlc3RCYXNlKEtVUkwodXJsKSwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKICAg
ICAgICAgICAgICwgbV9yZXF1ZXN0b3JJRCgwKQogICAgICAgICAgICAgLCBtX3JlcXVlc3RvclBy
b2Nlc3NJRCgwKQotICAgICAgICAgICAgLCBtX2FwcENhY2hlQ29udGV4dElEKDApCiAgICAgICAg
ICAgICAsIG1fdGFyZ2V0VHlwZShUYXJnZXRJc1N1YlJlc291cmNlKQogICAgICAgICB7CiAgICAg
ICAgIH0KQEAgLTU4LDcgKzU3LDYgQEAKICAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFz
ZSh1cmwsIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCiAgICAgICAgICAgICAsIG1fcmVxdWVzdG9y
SUQoMCkKICAgICAgICAgICAgICwgbV9yZXF1ZXN0b3JQcm9jZXNzSUQoMCkKLSAgICAgICAgICAg
ICwgbV9hcHBDYWNoZUNvbnRleHRJRCgwKQogICAgICAgICAgICAgLCBtX3RhcmdldFR5cGUoVGFy
Z2V0SXNTdWJSZXNvdXJjZSkKICAgICAgICAgICAgICwgbV9zZWN1cml0eUluZm8oc2VjdXJpdHlJ
bmZvKQogICAgICAgICB7CkBAIC02OCw3ICs2Niw2IEBACiAgICAgICAgICAgICA6IFJlc291cmNl
UmVxdWVzdEJhc2UodXJsLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KQogICAgICAgICAgICAgLCBt
X3JlcXVlc3RvcklEKDApCiAgICAgICAgICAgICAsIG1fcmVxdWVzdG9yUHJvY2Vzc0lEKDApCi0g
ICAgICAgICAgICAsIG1fYXBwQ2FjaGVDb250ZXh0SUQoMCkKICAgICAgICAgICAgICwgbV90YXJn
ZXRUeXBlKFRhcmdldElzU3ViUmVzb3VyY2UpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtNzcs
NyArNzQsNiBAQAogICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHVybCwgcG9saWN5
KQogICAgICAgICAgICAgLCBtX3JlcXVlc3RvcklEKDApCiAgICAgICAgICAgICAsIG1fcmVxdWVz
dG9yUHJvY2Vzc0lEKDApCi0gICAgICAgICAgICAsIG1fYXBwQ2FjaGVDb250ZXh0SUQoMCkKICAg
ICAgICAgICAgICwgbV90YXJnZXRUeXBlKFRhcmdldElzU3ViUmVzb3VyY2UpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHNldEhUVFBSZWZlcnJlcihyZWZlcnJlcik7CkBAIC04Nyw3ICs4Myw2IEBA
CiAgICAgICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoS1VSTCgpLCBVc2VQcm90b2NvbENh
Y2hlUG9saWN5KQogICAgICAgICAgICAgLCBtX3JlcXVlc3RvcklEKDApCiAgICAgICAgICAgICAs
IG1fcmVxdWVzdG9yUHJvY2Vzc0lEKDApCi0gICAgICAgICAgICAsIG1fYXBwQ2FjaGVDb250ZXh0
SUQoMCkKICAgICAgICAgICAgICwgbV90YXJnZXRUeXBlKFRhcmdldElzU3ViUmVzb3VyY2UpCiAg
ICAgICAgIHsKICAgICAgICAgfQpAQCAtMTA3LDEwICsxMDIsNiBAQAogICAgICAgICBpbnQgcmVx
dWVzdG9yUHJvY2Vzc0lEKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0b3JQcm9jZXNzSUQ7IH0K
ICAgICAgICAgdm9pZCBzZXRSZXF1ZXN0b3JQcm9jZXNzSUQoaW50IHJlcXVlc3RvclByb2Nlc3NJ
RCkgeyBtX3JlcXVlc3RvclByb2Nlc3NJRCA9IHJlcXVlc3RvclByb2Nlc3NJRDsgfQogCi0gICAg
ICAgIC8vIEFsbG93cyB0aGUgcmVxdWVzdCB0byBiZSBtYXRjaGVkIHVwIHdpdGggaXRzIGFwcCBj
YWNoZSBjb250ZXh0LgotICAgICAgICBpbnQgYXBwQ2FjaGVDb250ZXh0SUQoKSBjb25zdCB7IHJl
dHVybiBtX2FwcENhY2hlQ29udGV4dElEOyB9Ci0gICAgICAgIHZvaWQgc2V0QXBwQ2FjaGVDb250
ZXh0SUQoaW50IGlkKSB7IG1fYXBwQ2FjaGVDb250ZXh0SUQgPSBpZDsgfQotCiAgICAgICAgIC8v
IE9wYXF1ZSBidWZmZXIgdGhhdCBkZXNjcmliZXMgdGhlIHNlY3VyaXR5IHN0YXRlIChpbmNsdWRp
bmcgU1NMCiAgICAgICAgIC8vIGNvbm5lY3Rpb24gc3RhdGUpIGZvciB0aGUgcmVzb3VyY2UgdGhh
dCBzaG91bGQgYmUgcmVwb3J0ZWQgd2hlbiB0aGUKICAgICAgICAgLy8gcmVzb3VyY2UgaGFzIGJl
ZW4gbG9hZGVkLiAgVGhpcyBpcyB1c2VkIHRvIHNpbXVsYXRlIHNlY3VyZQpAQCAtMTI4LDcgKzEx
OSw2IEBACiAKICAgICAgICAgaW50IG1fcmVxdWVzdG9ySUQ7CiAgICAgICAgIGludCBtX3JlcXVl
c3RvclByb2Nlc3NJRDsKLSAgICAgICAgaW50IG1fYXBwQ2FjaGVDb250ZXh0SUQ7CiAgICAgICAg
IFRhcmdldFR5cGUgbV90YXJnZXRUeXBlOwogICAgICAgICBDU3RyaW5nIG1fc2VjdXJpdHlJbmZv
OwogICAgIH07CkluZGV4OiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCShy
ZXZpc2lvbiA0NDIwMikKKysrIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQAogCiAjaW5jbHVkZSAiSFRUUEhlYWRl
ck1hcC5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUp
CisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUNvbW1vbi5oIgorI2VuZGlmCiAKICNpbmNsdWRl
IDxtZW1vcnk+CiAKQEAgLTg0LDYgKzg3LDE0IEBACiAgICAgdm9pZCBzZXRMYXN0TW9kaWZpZWRE
YXRlKHRpbWVfdCk7CiAgICAgdGltZV90IGxhc3RNb2RpZmllZERhdGUoKSBjb25zdDsKIAorI2lm
IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICB2b2lkIHNldEFwcGxpY2F0aW9uQ2FjaGVJ
RChBcHBsaWNhdGlvbkNhY2hlSUQgY2FjaGVJRCkgeyBtX2FwcGNhY2hlSUQgPSBjYWNoZUlEOyB9
CisgICAgQXBwbGljYXRpb25DYWNoZUlEIGFwcGxpY2F0aW9uQ2FjaGVJRCgpIGNvbnN0IHsgcmV0
dXJuIG1fYXBwY2FjaGVJRDsgfQorCisgICAgdm9pZCBzZXRNYW5pZmVzdFVSTChLVVJMJiBtYW5p
ZmVzdFVSTCkgeyBtX21hbmlmZXN0VVJMID0gbWFuaWZlc3RVUkw7IH0KKyAgICBjb25zdCBLVVJM
JiBtYW5pZmVzdFVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFuaWZlc3RVUkw7IH0KKyNlbmRpZgor
CiAgICAgYm9vbCBjYWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGUoKSBjb25zdAogICAgIHsKICAg
ICAgICAgaWYgKCFtX2hhdmVQYXJzZWRDYWNoZUNvbnRyb2wpCkBAIC0xMTIsNiArMTIzLDkgQEAK
ICAgICAgICAgLCBtX2h0dHBTdGF0dXNDb2RlKDApCiAgICAgICAgICwgbV9leHBpcmF0aW9uRGF0
ZSgwKQogICAgICAgICAsIG1fbGFzdE1vZGlmaWVkRGF0ZSgwKQorI2lmIEVOQUJMRShBUFBMSUNB
VElPTl9DQUNIRSkKKyAgICAgICAgLCBtX2FwcGNhY2hlSUQoTm9BcHBsaWNhdGlvbkNhY2hlSUQp
CisjZW5kaWYKICAgICAgICAgLCBtX2lzTnVsbCh0cnVlKQogICAgICAgICAsIG1faGF2ZVBhcnNl
ZENhY2hlQ29udHJvbChmYWxzZSkKICAgICB7CkBAIC0xMjYsNiArMTQwLDkgQEAKICAgICAgICAg
LCBtX2h0dHBTdGF0dXNDb2RlKDApCiAgICAgICAgICwgbV9leHBpcmF0aW9uRGF0ZSgwKQogICAg
ICAgICAsIG1fbGFzdE1vZGlmaWVkRGF0ZSgwKQorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNI
RSkKKyAgICAgICAgLCBtX2FwcGNhY2hlSUQoTm9BcHBsaWNhdGlvbkNhY2hlSUQpCisjZW5kaWYK
ICAgICAgICAgLCBtX2lzTnVsbChmYWxzZSkKICAgICAgICAgLCBtX2hhdmVQYXJzZWRDYWNoZUNv
bnRyb2woZmFsc2UpCiAgICAgewpAQCAtMTQ5LDYgKzE2NiwxMCBAQAogICAgIEhUVFBIZWFkZXJN
YXAgbV9odHRwSGVhZGVyRmllbGRzOwogICAgIHRpbWVfdCBtX2V4cGlyYXRpb25EYXRlOwogICAg
IHRpbWVfdCBtX2xhc3RNb2RpZmllZERhdGU7CisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hF
KQorICAgIEtVUkwgbV9tYW5pZmVzdFVSTDsKKyAgICBBcHBsaWNhdGlvbkNhY2hlSUQgbV9hcHBj
YWNoZUlEOworI2VuZGlmCiAgICAgYm9vbCBtX2lzTnVsbCA6IDE7CiAKIHByaXZhdGU6CkBAIC0x
NzMsNiArMTk0LDEwIEBACiAgICAgT3duUHRyPENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+
IG1faHR0cEhlYWRlcnM7CiAgICAgdGltZV90IG1fZXhwaXJhdGlvbkRhdGU7CiAgICAgdGltZV90
IG1fbGFzdE1vZGlmaWVkRGF0ZTsKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisgICAg
QXBwbGljYXRpb25DYWNoZUlEIG1fYXBwY2FjaGVJRDsKKyAgICBLVVJMIG1fbWFuaWZlc3RVUkw7
CisjZW5kaWYKICAgICBib29sIG1faGF2ZVBhcnNlZENhY2hlQ29udHJvbCA6IDE7CiAgICAgYm9v
bCBtX2NhY2hlQ29udHJvbENvbnRhaW5zTXVzdFJldmFsaWRhdGUgOiAxOwogICAgIGJvb2wgbV9j
YWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGUgOiAxOwpJbmRleDogcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZVJlcXVlc3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9uIDQ0MjAyKQorKysgcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDkgQEAKICNp
bmNsdWRlICJGb3JtRGF0YS5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJIVFRQSGVh
ZGVyTWFwLmgiCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorI2luY2x1ZGUgIkFwcGxp
Y2F0aW9uQ2FjaGVDb21tb24uaCIKKyNlbmRpZgogCiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTExNSw2ICsxMTgsMTIgQEAKICAgICAgICAgYm9vbCByZXBv
cnRVcGxvYWRQcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwb3J0VXBsb2FkUHJvZ3Jlc3M7
IH0KICAgICAgICAgdm9pZCBzZXRSZXBvcnRVcGxvYWRQcm9ncmVzcyhib29sIHJlcG9ydFVwbG9h
ZFByb2dyZXNzKSB7IG1fcmVwb3J0VXBsb2FkUHJvZ3Jlc3MgPSByZXBvcnRVcGxvYWRQcm9ncmVz
czsgfQogCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgICAgICAvLyBBbGxvd3Mg
dGhlIHJlcXVlc3QgdG8gYmUgbWF0Y2hlZCB1cCB3aXRoIGl0cyBjYWNoZSBjb250ZXh0LgorICAg
ICAgICBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEIGFwcGxpY2F0aW9uQ2FjaGVDb250
ZXh0SUQoKSBjb25zdCB7IHJldHVybiBtX2FwcGNhY2hlQ29udGV4dElEOyB9CisgICAgICAgIHZv
aWQgc2V0QXBwbGljYXRpb25DYWNoZUNvbnRleHRJRChHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29u
dGV4dElEIGlkKSB7IG1fYXBwY2FjaGVDb250ZXh0SUQgPSBpZDsgfQorI2VuZGlmCisKICAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIC8vIFVzZWQgd2hlbiBSZXNvdXJjZVJlcXVlc3QgaXMgaW5pdGlh
bGl6ZWQgZnJvbSBhIHBsYXRmb3JtIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXF1ZXN0CiAgICAg
ICAgIFJlc291cmNlUmVxdWVzdEJhc2UoKQpAQCAtMTUyLDcgKzE2MSw5IEBACiAgICAgICAgIG11
dGFibGUgYm9vbCBtX3Jlc291cmNlUmVxdWVzdFVwZGF0ZWQ7CiAgICAgICAgIG11dGFibGUgYm9v
bCBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQ7CiAgICAgICAgIGJvb2wgbV9yZXBvcnRVcGxvYWRQ
cm9ncmVzczsKLQorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICAgICAgR2xvYmFs
QXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCBtX2FwcGNhY2hlQ29udGV4dElEOworI2VuZGlmCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBhc1Jlc291cmNlUmVx
dWVzdCgpIGNvbnN0OwogICAgIH07CkBAIC0xNzQsNiArMTg1LDkgQEAKICAgICAgICAgVmVjdG9y
PFN0cmluZz4gbV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJh
eTsKICAgICAgICAgUmVmUHRyPEZvcm1EYXRhPiBtX2h0dHBCb2R5OwogICAgICAgICBib29sIG1f
YWxsb3dIVFRQQ29va2llczsKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisgICAgICAg
IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQgbV9hcHBjYWNoZUNvbnRleHRJRDsKKyNl
bmRpZgogICAgIH07CiAgICAgCiAgICAgdW5zaWduZWQgaW5pdGlhbGl6ZU1heGltdW1IVFRQQ29u
bmVjdGlvbkNvdW50UGVySG9zdCgpOwpJbmRleDogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJl
c3BvbnNlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJl
c3BvbnNlQmFzZS5jcHAJKHJldmlzaW9uIDQ0MjAyKQorKysgcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlc3BvbnNlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDEwIEBACiAg
ICAgcmVzcG9uc2UtPm1faGF2ZVBhcnNlZENhY2hlQ29udHJvbCA9IGRhdGEtPm1faGF2ZVBhcnNl
ZENhY2hlQ29udHJvbDsKICAgICByZXNwb25zZS0+bV9jYWNoZUNvbnRyb2xDb250YWluc011c3RS
ZXZhbGlkYXRlID0gZGF0YS0+bV9jYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlOwog
ICAgIHJlc3BvbnNlLT5tX2NhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSA9IGRhdGEtPm1fY2Fj
aGVDb250cm9sQ29udGFpbnNOb0NhY2hlOworI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkK
KyAgICByZXNwb25zZS0+bV9hcHBjYWNoZUlEID0gZGF0YS0+bV9hcHBjYWNoZUlEOworICAgIHJl
c3BvbnNlLT5tX21hbmlmZXN0VVJMID0gZGF0YS0+bV9tYW5pZmVzdFVSTDsKKyNlbmRpZgogICAg
IHJldHVybiByZXNwb25zZTsKIH0KIApAQCAtNzQsNiArNzgsMTAgQEAKICAgICBkYXRhLT5tX2hh
dmVQYXJzZWRDYWNoZUNvbnRyb2wgPSBtX2hhdmVQYXJzZWRDYWNoZUNvbnRyb2w7CiAgICAgZGF0
YS0+bV9jYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlID0gbV9jYWNoZUNvbnRyb2xD
b250YWluc011c3RSZXZhbGlkYXRlOwogICAgIGRhdGEtPm1fY2FjaGVDb250cm9sQ29udGFpbnNO
b0NhY2hlID0gbV9jYWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGU7CisjaWYgRU5BQkxFKEFQUExJ
Q0FUSU9OX0NBQ0hFKQorICAgIGRhdGEtPm1fYXBwY2FjaGVJRCA9IG1fYXBwY2FjaGVJRDsKKyAg
ICBkYXRhLT5tX21hbmlmZXN0VVJMID0gbV9tYW5pZmVzdFVSTDsKKyNlbmRpZgogICAgIHJldHVy
biBkYXRhOwogfQogCkluZGV4OiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5j
cHAJKHJldmlzaW9uIDQ0MjAyKQorKysgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RC
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOSBAQAogICAgIH0KICAgICByZXF1
ZXN0LT5zZXRIVFRQQm9keShkYXRhLT5tX2h0dHBCb2R5KTsKICAgICByZXF1ZXN0LT5zZXRBbGxv
d0hUVFBDb29raWVzKGRhdGEtPm1fYWxsb3dIVFRQQ29va2llcyk7CisjaWYgRU5BQkxFKEFQUExJ
Q0FUSU9OX0NBQ0hFKQorICAgIHJlcXVlc3QtPnNldEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQo
ZGF0YS0+bV9hcHBjYWNoZUNvbnRleHRJRCk7CisjZW5kaWYKICAgICByZXR1cm4gcmVxdWVzdDsK
IH0KIApAQCAtODQsNiArODcsOSBAQAogICAgIGlmIChtX2h0dHBCb2R5KQogICAgICAgICBkYXRh
LT5tX2h0dHBCb2R5ID0gbV9odHRwQm9keS0+ZGVlcENvcHkoKTsKICAgICBkYXRhLT5tX2FsbG93
SFRUUENvb2tpZXMgPSBtX2FsbG93SFRUUENvb2tpZXM7CisjaWYgRU5BQkxFKEFQUExJQ0FUSU9O
X0NBQ0hFKQorICAgIGRhdGEtPm1fYXBwY2FjaGVDb250ZXh0SUQgPSBtX2FwcGNhY2hlQ29udGV4
dElEOworI2VuZGlmCiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKSW5kZXg6IGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOERPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOERPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCShyZXZpc2lvbiAw
KQorKysgYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRPTUFwcGxpY2F0aW9uQ2FjaGUuaCIKKworI2lmIEVOQUJMRShBUFBMSUNBVElP
Tl9DQUNIRSkKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4RG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOE9iamVjdEV2ZW50
TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhVdGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgYm9vbCBrRmluZE9ubHkgPSB0cnVlOworc3RhdGlj
IGNvbnN0IGJvb2wga0ZpbmRPckNyZWF0ZSA9IGZhbHNlOworCitzdGF0aWMgUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiBhcmd1bWVudFRvRXZlbnRMaXN0ZW5lcihET01BcHBsaWNhdGlvbkNhY2hl
KiBhcHBjYWNoZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wgZmluZE9ubHkpCit7
CisjaWYgMCAmJiBFTkFCTEUoV09SS0VSUykKKyAgICAvLyBGSVhNRTogdGhpcyBpcyBub3QgdGVz
dGVkIHlldAorICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogd29ya2VyQ29udGV4dFBy
b3h5ID0gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpyZXRyaWV2ZSgpOworICAgIGlmICh3
b3JrZXJDb250ZXh0UHJveHkpCisgICAgICAgIHJldHVybiB3b3JrZXJDb250ZXh0UHJveHktPmZp
bmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodmFsdWUsIGZhbHNlLCBmaW5kT25seSk7Cisj
ZW5kaWYKKworICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoYXBwY2FjaGUt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYgKHByb3h5KQorICAgICAgICByZXR1
cm4gZmluZE9ubHkgPyBwcm94eS0+RmluZE9iamVjdEV2ZW50TGlzdGVuZXIodmFsdWUsIGZhbHNl
KQorICAgICAgICAgICAgICAgICAgICAgICAgOiBwcm94eS0+RmluZE9yQ3JlYXRlT2JqZWN0RXZl
bnRMaXN0ZW5lcih2YWx1ZSwgZmFsc2UpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IGV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KEV2ZW50TGlzdGVuZXIq
IGxpc3RlbmVyKQoreworICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3Rl
bmVyKj4obGlzdGVuZXIpKS0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKK30KKworc3RhdGljIGlubGlu
ZSBBcHBsaWNhdGlvbkNhY2hlRXZlbnRUeXBlIHRvRXZlbnRUeXBlKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiB2YWx1ZSkKK3sKKyAgICBTdHJpbmcga2V5ID0gdG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsK
KyAgICBBU1NFUlQoa2V5LnN0YXJ0c1dpdGgoIm9uIikpOworICAgIHJldHVybiBET01BcHBsaWNh
dGlvbkNhY2hlOjp0b0V2ZW50VHlwZShrZXkuc3Vic3RyaW5nKDIpKTsKK30KKworLy8gSGFuZGxl
cyBhcHBjYWNoZS5vbmZvb2V2ZW50IGF0dHJpYnV0ZSBnZXR0aW5nCitBQ0NFU1NPUl9HRVRURVIo
RE9NQXBwbGljYXRpb25DYWNoZUV2ZW50SGFuZGxlcikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTUFw
cGxpY2F0aW9uQ2FjaGUub25ldmVudF9nZXR0ZXIiKTsKKyAgICBET01BcHBsaWNhdGlvbkNhY2hl
KiBhcHBjYWNoZSA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PERPTUFwcGxpY2F0aW9uQ2FjaGU+
KFY4Q2xhc3NJbmRleDo6RE9NQVBQTElDQVRJT05DQUNIRSwgaW5mby5Ib2xkZXIoKSk7CisgICAg
RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBhcHBjYWNoZS0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0
ZW5lcih0b0V2ZW50VHlwZShuYW1lKSk7CisgICAgcmV0dXJuIGV2ZW50TGlzdGVuZXJUb1Y4T2Jq
ZWN0KGxpc3RlbmVyKTsKK30KKworLy8gSGFuZGxlcyBhcHBjYWNoZS5vbmZvb2V2ZW50IGF0dHJp
YnV0ZSBzZXR0aW5nCitBQ0NFU1NPUl9TRVRURVIoRE9NQXBwbGljYXRpb25DYWNoZUV2ZW50SGFu
ZGxlcikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTUFwcGxpY2F0aW9uQ2FjaGUub25ldmVudF9zZXR0
ZXIiKTsKKyAgICBET01BcHBsaWNhdGlvbkNhY2hlKiBhcHBjYWNoZSA9IFY4UHJveHk6OlRvTmF0
aXZlT2JqZWN0PERPTUFwcGxpY2F0aW9uQ2FjaGU+KFY4Q2xhc3NJbmRleDo6RE9NQVBQTElDQVRJ
T05DQUNIRSwgaW5mby5Ib2xkZXIoKSk7CisgICAgQXBwbGljYXRpb25DYWNoZUV2ZW50VHlwZSBl
dmVudFR5cGUgPSB0b0V2ZW50VHlwZShuYW1lKTsKKworICAgIGlmIChFdmVudExpc3RlbmVyKiBv
bGRMaXN0ZW5lciA9IGFwcGNhY2hlLT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlw
ZSkpIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IGV2ZW50TGlzdGVu
ZXJUb1Y4T2JqZWN0KG9sZExpc3RlbmVyKTsKKyAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5j
eShpbmZvLkhvbGRlcigpLCBvYmplY3QsIFY4Q3VzdG9tOjprRE9NQXBwbGljYXRpb25DYWNoZUNh
Y2hlSW5kZXgpOworICAgICAgICBhcHBjYWNoZS0+Y2xlYXJBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KGV2ZW50VHlwZSk7CisgICAgfQorCisgICAgaWYgKHZhbHVlLT5Jc0Z1bmN0aW9uKCkpIHsKKyAg
ICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG5ld0xpc3RlbmVyID0gYXJndW1lbnRUb0V2ZW50
TGlzdGVuZXIoYXBwY2FjaGUsIHZhbHVlLCBrRmluZE9yQ3JlYXRlKTsKKyAgICAgICAgaWYgKG5l
d0xpc3RlbmVyKSB7CisgICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9s
ZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6a0RPTUFwcGxpY2F0aW9uQ2FjaGVDYWNoZUluZGV4KTsK
KyAgICAgICAgICAgIGFwcGNhY2hlLT5zZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlw
ZSwgbmV3TGlzdGVuZXIpOworICAgICAgICB9CisgICAgfQorfQorCisvLyBIYW5kbGVzIGFwcGNh
Y2hlLmFkZEV2ZW50TGlzdG5lcihuYW1lLCBmdW5jLCBjYXB0dXJlKSBtZXRob2QgY2FsbHMKK0NB
TExCQUNLX0ZVTkNfREVDTChET01BcHBsaWNhdGlvbkNhY2hlQWRkRXZlbnRMaXN0ZW5lcikKK3sK
KyAgICBJTkNfU1RBVFMoIkRPTUFwcGxpY2F0aW9uQ2FjaGUuYWRkRXZlbnRMaXN0ZW5lcigpIik7
CisgICAgRE9NQXBwbGljYXRpb25DYWNoZSogYXBwY2FjaGUgPSBWOFByb3h5OjpUb05hdGl2ZU9i
amVjdDxET01BcHBsaWNhdGlvbkNhY2hlPihWOENsYXNzSW5kZXg6OkRPTUFQUExJQ0FUSU9OQ0FD
SEUsIGFyZ3MuSG9sZGVyKCkpOworCisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVy
ID0gYXJndW1lbnRUb0V2ZW50TGlzdGVuZXIoYXBwY2FjaGUsIGFyZ3NbMV0sIGtGaW5kT3JDcmVh
dGUpOworICAgIGlmIChsaXN0ZW5lcikgeworICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5
KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0sIFY4Q3VzdG9tOjprRE9NQXBwbGljYXRpb25DYWNoZUNh
Y2hlSW5kZXgpOworICAgICAgICBTdHJpbmcgZXZlbnRUeXBlID0gdG9XZWJDb3JlU3RyaW5nKGFy
Z3NbMF0pOworICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFsdWUo
KTsKKyAgICAgICAgYXBwY2FjaGUtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5l
ciwgdXNlQ2FwdHVyZSk7CisgICAgfQorICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisK
Ky8vIEhhbmRsZXMgYXBwY2FjaGUucmVtb3ZlRXZlbnRMaXN0bmVyKG5hbWUsIGZ1bmMsIGNhcHR1
cmUpIG1ldGhvZCBjYWxscworQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTUFwcGxpY2F0aW9uQ2FjaGVS
ZW1vdmVFdmVudExpc3RlbmVyKQoreworICAgIElOQ19TVEFUUygiRE9NQXBwbGljYXRpb25DYWNo
ZS5yZW1vdmVFdmVudExpc3RlbmVyKCkiKTsKKyAgICBET01BcHBsaWNhdGlvbkNhY2hlKiBhcHBj
YWNoZSA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PERPTUFwcGxpY2F0aW9uQ2FjaGU+KFY4Q2xh
c3NJbmRleDo6RE9NQVBQTElDQVRJT05DQUNIRSwgYXJncy5Ib2xkZXIoKSk7CisKKyAgICBSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBhcmd1bWVudFRvRXZlbnRMaXN0ZW5lcihhcHBj
YWNoZSwgYXJnc1sxXSwga0ZpbmRPbmx5KTsKKyAgICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAg
cmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOEN1c3RvbTo6
a0RPTUFwcGxpY2F0aW9uQ2FjaGVDYWNoZUluZGV4KTsKKyAgICAgICAgU3RyaW5nIGV2ZW50VHlw
ZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0g
YXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CisgICAgICAgIGFwcGNhY2hlLT5yZW1vdmVFdmVudExp
c3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIuZ2V0KCksIHVzZUNhcHR1cmUpOworICAgIH0KKyAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAgLy8gRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogYmluZGluZ3NcdjhcY3VzdG9tXFY4RE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogaHRtbC9IVE1MSHRt
bEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxIdG1sRWxlbWVudC5oCShyZXZpc2lv
biA0NDIwMikKKysrIGh0bWwvSFRNTEh0bWxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAKICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJu
IDExOyB9CiAgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKTsK
IAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaWYgRU5BQkxFKE9GRkxJ
TkVfV0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQogICAgIHZp
cnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogI2VuZGlmCiAKSW5kZXg6IGh0bWwv
SFRNTEh0bWxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxIdG1sRWxlbWVudC5j
cHAJKHJldmlzaW9uIDQ0MjAyKQorKysgaHRtbC9IVE1MSHRtbEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMywxNCArMjMsNDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJIVE1MSHRtbEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVHcm91cC5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAKKy8vIEZJ
WE1FOiBUaGUgdXNlIG9mIHRoZXNlIHR3byBmbGFncyB0byBzaG91bGQgYmUgYSB0ZW1wb3Jhcnkg
c2l0dWF0aW9uLiAKKy8vIEV2ZW50dWFsbHkgd2Ugc2hvdWxkIHVzZSBFTkFCTEUoQVBQTElDQVRJ
T05fQ0FDSEUpIGZvciB0aGlzIGZlYXR1cmUgaW4KKy8vIGFsbCBjYXNlcy4KKyNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSAmJiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisj
ZXJyb3IgQVBQTElDQVRJT05fQ0FDSEUgYW5kIE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUyBhcmUg
bXV0dWFsbHkgZXhjbHVzaXZlIGZsYWdzCisjZW5kaWYKKworI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUdyb3VwLmgiCisjZWxp
ZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKIAorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElP
TlMpIHx8IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKworc3RhdGljIHZvaWQgc2VsZWN0Q2Fj
aGVXaXRob3V0TWFuaWZlc3QoRnJhbWUqIGZyYW1lKQoreworI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpCisgICAgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpzZWxlY3RDYWNoZVdp
dGhvdXRNYW5pZmVzdFVSTChmcmFtZSk7CisjZWxpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUp
CisgICAgZnJhbWUtPmxvYWRlcigpLT5zZWxlY3RBcHBsaWNhdGlvbkNhY2hlV2l0aG91dE1hbmlm
ZXN0KCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc2VsZWN0Q2FjaGVXaXRoTWFuaWZlc3Qo
RnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiBtYW5pZmVzdFVSTCkKK3sKKyNpZiBFTkFCTEUoT0ZG
TElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c2VsZWN0
Q2FjaGUoZnJhbWUsIG1hbmlmZXN0VVJMKTsKKyNlbGlmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNI
RSkKKyAgICBmcmFtZS0+bG9hZGVyKCktPnNlbGVjdEFwcGxpY2F0aW9uQ2FjaGVXaXRoTWFuaWZl
c3QobWFuaWZlc3RVUkwpOworI2VuZGlmCit9CisKKyNlbmRpZiAgLy8gRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykgfHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorCiBIVE1MSHRt
bEVsZW1lbnQ6OkhUTUxIdG1sRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jKQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQogewpAQCAtNTcs
NyArOTIsNyBAQAogICAgICAgICAgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShmcmFtZXNldFRhZykg
fHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUobm9mcmFtZXNUYWcpOwogfQogCi0jaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TKSB8fCBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiB2b2lkIEhUTUxIdG1sRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewogICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9E
b2N1bWVudCgpOwpAQCAtNzAsMTAgKzEwNSwxMCBAQAogCiAgICAgLy8gQ2hlY2sgdGhlIG1hbmlm
ZXN0IGF0dHJpYnV0ZQogICAgIEF0b21pY1N0cmluZyBtYW5pZmVzdCA9IGdldEF0dHJpYnV0ZSht
YW5pZmVzdEF0dHIpOwotICAgIGlmIChtYW5pZmVzdC5pc051bGwoKSkKLSAgICAgICAgQXBwbGlj
YXRpb25DYWNoZUdyb3VwOjpzZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdFVSTChkb2N1bWVudCgp
LT5mcmFtZSgpKTsKKyAgICBpZiAobWFuaWZlc3QuaXNOdWxsKCkgfHwgbWFuaWZlc3QuaXNFbXB0
eSgpKQorICAgICAgICBzZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdChkb2N1bWVudCgpLT5mcmFt
ZSgpKTsKICAgICBlbHNlCi0gICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c2VsZWN0Q2Fj
aGUoZG9jdW1lbnQoKS0+ZnJhbWUoKSwgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwobWFuaWZlc3Qp
KTsKKyAgICAgICAgc2VsZWN0Q2FjaGVXaXRoTWFuaWZlc3QoZG9jdW1lbnQoKS0+ZnJhbWUoKSwg
ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwobWFuaWZlc3QpKTsKIH0KICNlbmRpZgogCkluZGV4OiBs
b2FkZXIvYXBwY2FjaGUyL0FwcGxpY2F0aW9uQ2FjaGVDb21tb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBs
b2FkZXIvYXBwY2FjaGUyL0FwcGxpY2F0aW9uQ2FjaGVDb21tb24uaAkocmV2aXNpb24gMCkKKysr
IGxvYWRlci9hcHBjYWNoZTIvQXBwbGljYXRpb25DYWNoZUNvbW1vbi5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBcHBsaWNhdGlvbkNhY2hlQ29tbW9uX2gKKyNk
ZWZpbmUgQXBwbGljYXRpb25DYWNoZUNvbW1vbl9oCisKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05f
Q0FDSEUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIC8vIFR5cGVzIGFuZCBjb25zdGFu
dHMgdXNlZCBieSB0aGUgZnJvbnQgYW5kIGJhY2sgZW5kcworCisgICAgdHlwZWRlZiBsb25nIGxv
bmcgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2VJRDsgIC8vIGEgNjQgYml0IHNxbGl0ZSByb3dpZAor
ICAgIHR5cGVkZWYgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2VJRCBBcHBsaWNhdGlvbkNhY2hlSUQ7
CisgICAgdHlwZWRlZiBpbnQgQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRDsKKworICAgIHN0cnVj
dCBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEIHsKKyAgICAgICAgR2xvYmFsQXBwbGlj
YXRpb25DYWNoZUNvbnRleHRJRCgpCisgICAgICAgICAgICA6IG1fY29udGV4dElEKDApCisgICAg
ICAgICAgICAsIG1fcHJvY2Vzc0lEKDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQoQXBwbGljYXRpb25DYWNoZUNvbnRleHRJ
RCBjb250ZXh0SUQsIGludCBwcm9jZXNzSUQpCisgICAgICAgICAgICA6IG1fY29udGV4dElEKGNv
bnRleHRJRCkKKyAgICAgICAgICAgICwgbV9wcm9jZXNzSUQocHJvY2Vzc0lEKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEIG1fY29udGV4
dElEOworICAgICAgICBpbnQgbV9wcm9jZXNzSUQ7CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQmIG90aGVyKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gKG1fY29udGV4dElEID09IG90aGVyLm1fY29udGV4
dElEKSAmJiAobV9wcm9jZXNzSUQgPT0gb3RoZXIubV9wcm9jZXNzSUQpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250
ZXh0SUQmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgR2xvYmFsQXBwbGljYXRp
b25DYWNoZUNvbnRleHRJRCBub25lKCkgeyByZXR1cm4gR2xvYmFsQXBwbGljYXRpb25DYWNoZUNv
bnRleHRJRCgpOyB9CisgICAgfTsKKworICAgIGVudW0gQXBwbGljYXRpb25DYWNoZUNvbnRleHRU
eXBlIHsKKyAgICAgICAgTWFpbkZyYW1lQ29udGV4dCwKKyAgICAgICAgU3ViRnJhbWVDb250ZXh0
LAorICAgICAgICBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0LAorICAgICAgICBTaGFyZWRXb3JrZXJD
b250ZXh0CisgICAgfTsKKworICAgIGVudW0gV2VsbEtub3duQXBwbGljYXRpb25DYWNoZUlEcyB7
CisgICAgICAgIE5vQXBwbGljYXRpb25DYWNoZUlEID0gMCwKKyAgICAgICAgTm9BcHBsaWNhdGlv
bkNhY2hlQ29udGV4dElEID0gMCwKKyAgICAgICAgVW5rbm93bkFwcGxpY2F0aW9uQ2FjaGVDb250
ZXh0SUQgPSAtMSwKKyAgICB9OworCisgICAgLy8gVGhlc2Ugc3RhdHVzIHZhbHVlcyBjb3JyZXNw
b25kIHdpdGggdGhvc2Ugc3BlY2lmaWVkIGJ5IHRoaXMgSFRNTDUgc3BlYy4KKyAgICBlbnVtIEFw
cGxpY2F0aW9uQ2FjaGVTdGF0dXMgeworICAgICAgICBBUFBDQUNIRV9VTkNBQ0hFRCA9IDAsCisg
ICAgICAgIEFQUENBQ0hFX0lETEUgPSAxLAorICAgICAgICBBUFBDQUNIRV9DSEVDS0lORyA9IDIs
CisgICAgICAgIEFQUENBQ0hFX0RPV05MT0FESU5HID0gMywKKyAgICAgICAgQVBQQ0FDSEVfVVBE
QVRFUkVBRFkgPSA0LAorICAgICAgICBBUFBDQUNIRV9PQlNPTEVURSA9IDUKKyAgICB9OworCisg
ICAgZW51bSBBcHBsaWNhdGlvbkNhY2hlRXZlbnRUeXBlIHsKKyAgICAgICAgQVBQQ0FDSEVfQ0hF
Q0tJTkdfRVZFTlQsCisgICAgICAgIEFQUENBQ0hFX0VSUk9SX0VWRU5ULAorICAgICAgICBBUFBD
QUNIRV9OT1VQREFURV9FVkVOVCwKKyAgICAgICAgQVBQQ0FDSEVfRE9XTkxPQURJTkdfRVZFTlQs
CisgICAgICAgIEFQUENBQ0hFX1BST0dSRVNTX0VWRU5ULAorICAgICAgICBBUFBDQUNIRV9VUERB
VEVSRUFEWV9FVkVOVCwKKyAgICAgICAgQVBQQ0FDSEVfQ0FDSEVEX0VWRU5ULAorICAgICAgICBB
UFBDQUNIRV9PQlNPTEVURV9FVkVOVCwKKyAgICAgICAgTlVNQkVSX09GX0FQUENBQ0hFX0VWRU5U
X1RZUEVTLAorICAgIH07CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8g
RU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorI2VuZGlmICAvLyBBcHBsaWNhdGlvbkNhY2hlQ29t
bW9uX2gKClByb3BlcnR5IGNoYW5nZXMgb246IGxvYWRlclxhcHBjYWNoZTJcQXBwbGljYXRpb25D
YWNoZUNvbW1vbi5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5k
ZXg6IGxvYWRlci9hcHBjYWNoZTIvQXBwbGljYXRpb25DYWNoZUZyb250ZW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBsb2FkZXIvYXBwY2FjaGUyL0FwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZC5jcHAJKHJl
dmlzaW9uIDApCisrKyBsb2FkZXIvYXBwY2FjaGUyL0FwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDA5LCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUZyb250ZW5kLmgiCisKKyNpZiBFTkFCTEUoQVBQ
TElDQVRJT05fQ0FDSEUpCisKKyNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlQnJpZGdlLmgiCisj
aW5jbHVkZSAiRE9NQXBwbGljYXRpb25DYWNoZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFdlIGtlZXAgYSBjb2xsZWN0aW9uIG9mIGFsbCBmcm9u
dGVuZCBpbnN0YW5jZXMgZm9yIGxvb2t1cCBieSBjb250ZXh0SUQuCisKK3R5cGVkZWYgSGFzaE1h
cDxpbnQsIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCo+IEZyb250ZW5kc01hcDsKKworc3RhdGlj
IEZyb250ZW5kc01hcCYgZnJvbnRlbmRzKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZy
b250ZW5kc01hcCwgc3RhdGljRnJvbnRlbmRzLCAoKSk7CisgICAgcmV0dXJuIHN0YXRpY0Zyb250
ZW5kczsKK30KKworCisvLyBzdGF0aWMKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kOjph
ZGRUb01hcChBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQqIGZyb250ZW5kKQoreworICAgIGZyb250
ZW5kcygpLmFkZChmcm9udGVuZC0+Y29udGV4dElEKCkubV9jb250ZXh0SUQsIGZyb250ZW5kKTsK
K30KKworLy8gc3RhdGljCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZDo6cmVtb3ZlRnJv
bU1hcChBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQqIGZyb250ZW5kKQoreworICAgIGZyb250ZW5k
cygpLnJlbW92ZShmcm9udGVuZC0+Y29udGV4dElEKCkubV9jb250ZXh0SUQpOworfQorCisvLyBz
dGF0aWMKK0FwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCogQXBwbGljYXRpb25DYWNoZUZyb250ZW5k
Ojpmcm9tQ29udGV4dElEKGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQgJmNv
bnRleHRJRCkKK3sKKyAgICBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQqIGZyb250ZW5kID0gZnJv
bnRlbmRzKCkuZ2V0KGNvbnRleHRJRC5tX2NvbnRleHRJRCk7CisgICAgcmV0dXJuIGZyb250ZW5k
OworfQorCitBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQ6OkFwcGxpY2F0aW9uQ2FjaGVGcm9udGVu
ZCgpCisgICAgOiBtX2NvbnRleHRUeXBlKE1haW5GcmFtZUNvbnRleHQpCisgICAgLCBtX0RPTUFw
cGxpY2F0aW9uQ2FjaGUoMCkKKyAgICAsIG1fY2FuQ2FjaGVJblBhZ2VDYWNoZShmYWxzZSkKKyAg
ICAsIG1faXNTZWxlY3RJblByb2dyZXNzKGZhbHNlKQorICAgICwgbV9jYWNoZVNlcXVlbmNlTnVt
YmVyKDApCisgICAgLCBtX2hhc0NhY2hlZFN0YXR1cyhmYWxzZSkKKyAgICAsIG1fY2FjaGVkU3Rh
dHVzKEFQUENBQ0hFX1VOQ0FDSEVEKQorICAgICwgbV9icmlkZ2UoQXBwbGljYXRpb25DYWNoZUJy
aWRnZTo6aW5zdGFuY2UoKSkKK3sKKyAgICBBU1NFUlQobV9icmlkZ2UpOworfQorCitBcHBsaWNh
dGlvbkNhY2hlRnJvbnRlbmQ6On5BcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQoKQoreworICAgIGlm
IChpc0luaXRpYWxpemVkKCkpIHsKKyAgICAgICAgbV9icmlkZ2UtPnVuaW5pdGlhbGl6ZUNvbnRl
eHRBc3luYyhjb250ZXh0SUQoKSk7CisgICAgICAgIHJlbW92ZUZyb21NYXAodGhpcyk7CisgICAg
fQorfQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZDo6aW5pdGlhbGl6ZUZvckZyYW1l
KEZyYW1lKiBmcmFtZSkKK3sKKyAgICBBU1NFUlQoZnJhbWUpOworICAgIEFwcGxpY2F0aW9uQ2Fj
aGVDb250ZXh0VHlwZSBjb250ZXh0VHlwZSA9IE1haW5GcmFtZUNvbnRleHQ7CisgICAgR2xvYmFs
QXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCBwYXJlbnRDb250ZXh0SUQgPSBHbG9iYWxBcHBsaWNh
dGlvbkNhY2hlQ29udGV4dElEOjpub25lKCk7CisgICAgaWYgKEZyYW1lKiBwYXJlbnRGcmFtZSA9
IGZyYW1lLT5wYXJlbnRGcmFtZSgpKSB7CisgICAgICAgIGNvbnRleHRUeXBlID0gU3ViRnJhbWVD
b250ZXh0OworICAgICAgICBwYXJlbnRDb250ZXh0SUQgPSBwYXJlbnRGcmFtZS0+bG9hZGVyKCkt
PmFwcGNhY2hlRnJvbnRlbmQoKS0+Y29udGV4dElEKCk7CisgICAgfQorICAgIGluaXRpYWxpemUo
Y29udGV4dFR5cGUsIHBhcmVudENvbnRleHRJRCk7Cit9CisKK3ZvaWQgQXBwbGljYXRpb25DYWNo
ZUZyb250ZW5kOjppbml0aWFsaXplKEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0VHlwZSBjb250ZXh0
VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEds
b2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQmIHBhcmVudENvbnRleHRJRCkKK3sKKyAgICBB
U1NFUlQoIWlzSW5pdGlhbGl6ZWQoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChpbnQsIG5l
eHRJRCwgKDEpKTsKKyAgICAvLyBGSVhNRTogc2V0IHRoZSBwcm9jZXNzSUQgZGF0YSBtZW1iZXIg
b2YgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRAorICAgIG1fY29udGV4dElEID0gR2xv
YmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRChuZXh0SUQrKywgMCk7CisgICAgbV9jb250ZXh0
VHlwZSA9IGNvbnRleHRUeXBlOworICAgIGFkZFRvTWFwKHRoaXMpOworICAgIG1fYnJpZGdlLT5p
bml0aWFsaXplQ29udGV4dEFzeW5jKGNvbnRleHRJRCgpLCBjb250ZXh0VHlwZSwgcGFyZW50Q29u
dGV4dElEKTsKK30KKworaW50IEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZDo6cHJlcGFyZUZvclNl
bGVjdENhbGwoKQoreworICAgIG1faXNTZWxlY3RJblByb2dyZXNzID0gdHJ1ZTsKKyAgICBtX2hh
c0NhY2hlZFN0YXR1cyA9IGZhbHNlOworICAgIHJldHVybiArK21fY2FjaGVTZXF1ZW5jZU51bWJl
cjsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQ6OnNlbGVjdEluaXRpYWxDYWNo
ZShjb25zdCBLVVJMJiBkb2N1bWVudFVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXBwbGljYXRpb25DYWNoZUlEIGNhY2hlRG9jdW1lbnRXYXNMb2FkZWRGcm9tKQoreworICAg
IGlmICghaXNJbml0aWFsaXplZCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9jYW5DYWNoZUlu
UGFnZUNhY2hlID0gY2FjaGVEb2N1bWVudFdhc0xvYWRlZEZyb20gPT0gTm9BcHBsaWNhdGlvbkNh
Y2hlSUQ7CisgICAgbV9icmlkZ2UtPnNlbGVjdEluaXRpYWxDYWNoZUFzeW5jKGNvbnRleHRJRCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVwYXJlRm9yU2VsZWN0
Q2FsbCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudFVS
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVEb2N1bWVudFdh
c0xvYWRlZEZyb20pOworfQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZDo6c2VsZWN0
Q2FjaGVXaXRob3V0TWFuaWZlc3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcHBsaWNhdGlvbkNhY2hlSUQgY2FjaGVEb2N1bWVudFdhc0xvYWRlZEZyb20pCit7Cisg
ICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NhbkNhY2hl
SW5QYWdlQ2FjaGUgPSBjYWNoZURvY3VtZW50V2FzTG9hZGVkRnJvbSA9PSBOb0FwcGxpY2F0aW9u
Q2FjaGVJRDsKKyAgICBtX2JyaWRnZS0+c2VsZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3RBc3luYyhj
b250ZXh0SUQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcmVwYXJlRm9yU2VsZWN0Q2FsbCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvY3VtZW50VVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhY2hlRG9jdW1lbnRXYXNMb2FkZWRGcm9tKTsKK30KKworYm9v
bCBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQ6OnNlbGVjdENhY2hlV2l0aE1hbmlmZXN0KAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBkb2N1bWVudFVSTCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZUlEIGNh
Y2hlRG9jdW1lbnRXYXNMb2FkZWRGcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBLVVJMJiBtYW5pZmVzdFVSTG9mQ2FjaGVEb2N1bWVudFdhc0xvYWRlZEZyb20s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIG1hbmlmZXN0
VVJMKQoreworICAgIGlmICghaXNJbml0aWFsaXplZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIG1fY2FuQ2FjaGVJblBhZ2VDYWNoZSA9IGZhbHNlOworICAgIG1fYnJpZGdlLT5zZWxl
Y3RDYWNoZVdpdGhNYW5pZmVzdEFzeW5jKGNvbnRleHRJRCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByZXBhcmVGb3JTZWxlY3RDYWxsKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRVUkwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVEb2N1bWVudFdhc0xvYWRl
ZEZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuaWZl
c3RVUkxvZkNhY2hlRG9jdW1lbnRXYXNMb2FkZWRGcm9tLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0VVJMKTsKKworICAgIC8vIENoZWNrIGZvciBh
IGZvcmVpZ24gZW50cml5IGFuZCByZXN0YXJ0IHRoZSBjdXJyZW50IG5hdmlnYXRpb24gaWYgZGV0
ZWN0ZWQsCisgICAgLy8gdGhlIGZvcmVpZ24gZW50cnkgd2lsbCBub3QgYmUgcGlja2VkIHVwIG9u
IHJlbG9hZC4KKyAgICBpZiAoKGNhY2hlRG9jdW1lbnRXYXNMb2FkZWRGcm9tICE9IE5vQXBwbGlj
YXRpb25DYWNoZUlEKQorICAgICAgICAmJiAobWFuaWZlc3RVUkwgIT0gbWFuaWZlc3RVUkxvZkNh
Y2hlRG9jdW1lbnRXYXNMb2FkZWRGcm9tKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZDo6YWRk
RXh0cmFGaWVsZHNUb1JlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIG1haW5S
ZXNvdXJjZSkKK3sKKyAgICBBU1NFUlQoaXNJbml0aWFsaXplZCgpKTsKKyAgICByZXF1ZXN0LnNl
dEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQoY29udGV4dElEKCkpOworfQorCitib29sIEFwcGxp
Y2F0aW9uQ2FjaGVGcm9udGVuZDo6Y2FuQ2FjaGVDdXJyZW50RG9jdW1lbnRJblBhZ2VDYWNoZSgp
IGNvbnN0IAoreworICAgIHJldHVybiBtX2NhbkNhY2hlSW5QYWdlQ2FjaGU7Cit9CisKK0FwcGxp
Y2F0aW9uQ2FjaGVTdGF0dXMgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kOjpzdGF0dXMoKSBjb25z
dAoreworICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOworICAgIGlmICghbV9oYXNDYWNoZWRT
dGF0dXMpIHsKKyAgICAgICAgQVNTRVJUKG1faXNTZWxlY3RJblByb2dyZXNzKTsKKyAgICAgICAg
bV9jYWNoZWRTdGF0dXMgPSBtX2JyaWRnZS0+c3RhdHVzKGNvbnRleHRJRCgpKTsKKyAgICAgICAg
bV9oYXNDYWNoZWRTdGF0dXMgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gbV9jYWNoZWRTdGF0
dXM7Cit9CisKK2Jvb2wgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kOjp1cGRhdGUoKQoreworICAg
IEFTU0VSVChpc0luaXRpYWxpemVkKCkpOworICAgIHJldHVybiBtX2JyaWRnZS0+c3RhcnRVcGRh
dGUoY29udGV4dElEKCkpOworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZDo6c3dh
cENhY2hlKCkKK3sKKyAgICBBU1NFUlQoaXNJbml0aWFsaXplZCgpKTsKKyAgICByZXR1cm4gbV9i
cmlkZ2UtPnN3YXBDYWNoZShjb250ZXh0SUQoKSk7Cit9CisKK3ZvaWQgQXBwbGljYXRpb25DYWNo
ZUZyb250ZW5kOjpub3RpZnlTZWxlY3RDb21wbGV0ZShBcHBsaWNhdGlvbkNhY2hlU3RhdHVzIHN0
YXR1cykKK3sKKyAgICBBU1NFUlQobV9pc1NlbGVjdEluUHJvZ3Jlc3MpOworICAgIG1faXNTZWxl
Y3RJblByb2dyZXNzID0gZmFsc2U7CisgICAgaWYgKCFtX2hhc0NhY2hlZFN0YXR1cykgeworICAg
ICAgICBtX2NhY2hlZFN0YXR1cyA9IHN0YXR1czsKKyAgICAgICAgbV9oYXNDYWNoZWRTdGF0dXMg
PSB0cnVlOworICAgIH0KK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQ6Om5vdGlm
eVN0YXR1c0NoYW5nZWQoQXBwbGljYXRpb25DYWNoZVN0YXR1cyBzdGF0dXMpCit7CisgICAgQVNT
RVJUKG1faGFzQ2FjaGVkU3RhdHVzKTsKKyAgICBtX2NhY2hlZFN0YXR1cyA9IHN0YXR1czsKK30K
Kwordm9pZCBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQ6Om5vdGlmeUV2ZW50TGlzdGVuZXIoQXBw
bGljYXRpb25DYWNoZUV2ZW50VHlwZSBldmVudFR5cGUpCit7CisgICAgaWYgKCFtX2lzU2VsZWN0
SW5Qcm9ncmVzcyAmJiBtX0RPTUFwcGxpY2F0aW9uQ2FjaGUpCisgICAgICAgICBtX0RPTUFwcGxp
Y2F0aW9uQ2FjaGUtPmNhbGxFdmVudExpc3RlbmVyKGV2ZW50VHlwZSk7Cit9CisKK30gIC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogbG9hZGVyXGFwcGNhY2hlMlxBcHBsaWNhdGlvbkNhY2hlRnJv
bnRlbmQuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6
IGxvYWRlci9hcHBjYWNoZTIvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
bG9hZGVyL2FwcGNhY2hlMi9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcAkocmV2aXNpb24gMCkKKysr
IGxvYWRlci9hcHBjYWNoZTIvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDEyICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRE9NQXBw
bGljYXRpb25DYWNoZS5oIgogCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykK
KyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiAKLSNpbmNsdWRlICJBcHBsaWNhdGlvbkNh
Y2hlLmgiCi0jaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUdyb3VwLmgiCi0jaW5jbHVkZSAiQXBw
bGljYXRpb25DYWNoZVJlc291cmNlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNp
bmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAi
RXZlbnRMaXN0ZW5lci5oIgpAQCAtNDQsODEgKzQwLDQwIEBACiAKIERPTUFwcGxpY2F0aW9uQ2Fj
aGU6OkRPTUFwcGxpY2F0aW9uQ2FjaGUoRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFt
ZSkKKyAgICAsIG1fYXBwY2FjaGVGcm9udGVuZChmcmFtZS0+bG9hZGVyKCktPmFwcGNhY2hlRnJv
bnRlbmQoKSkKIHsKKyAgICBhcHBjYWNoZUZyb250ZW5kKCktPnNldERPTUFwcGxpY2F0aW9uQ2Fj
aGUodGhpcyk7CiB9CiAKIHZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6ZGlzY29ubmVjdEZyYW1l
KCkKIHsKKyAgICBhcHBjYWNoZUZyb250ZW5kKCktPnNldERPTUFwcGxpY2F0aW9uQ2FjaGUoMCk7
CiAgICAgbV9mcmFtZSA9IDA7CisgICAgbV9hcHBjYWNoZUZyb250ZW5kID0gMDsKIH0KIAotQXBw
bGljYXRpb25DYWNoZSogRE9NQXBwbGljYXRpb25DYWNoZTo6YXNzb2NpYXRlZENhY2hlKCkgY29u
c3QKLXsKLSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotIAotICAgIHJldHVy
biBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZSgp
OwotfQotCiB1bnNpZ25lZCBzaG9ydCBET01BcHBsaWNhdGlvbkNhY2hlOjpzdGF0dXMoKSBjb25z
dAogewotICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gYXNzb2NpYXRlZENhY2hlKCk7ICAg
IAotICAgIGlmICghY2FjaGUpCi0gICAgICAgIHJldHVybiBVTkNBQ0hFRDsKLQotICAgIHN3aXRj
aCAoY2FjaGUtPmdyb3VwKCktPnVwZGF0ZVN0YXR1cygpKSB7Ci0gICAgICAgIGNhc2UgQXBwbGlj
YXRpb25DYWNoZUdyb3VwOjpDaGVja2luZzoKLSAgICAgICAgICAgIHJldHVybiBDSEVDS0lORzsK
LSAgICAgICAgY2FzZSBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OkRvd25sb2FkaW5nOgotICAgICAg
ICAgICAgcmV0dXJuIERPV05MT0FESU5HOwotICAgICAgICBjYXNlIEFwcGxpY2F0aW9uQ2FjaGVH
cm91cDo6SWRsZTogewotICAgICAgICAgICAgaWYgKGNhY2hlLT5ncm91cCgpLT5pc09ic29sZXRl
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE9CU09MRVRFOwotICAgICAgICAgICAgaWYgKGNh
Y2hlICE9IGNhY2hlLT5ncm91cCgpLT5uZXdlc3RDYWNoZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBVUERBVEVSRUFEWTsKLSAgICAgICAgICAgIHJldHVybiBJRExFOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgQXBw
bGljYXRpb25DYWNoZUZyb250ZW5kKiBjYWNoZSA9IGFwcGNhY2hlRnJvbnRlbmQoKTsKKyAgICBy
ZXR1cm4gY2FjaGUgPyBjYWNoZS0+c3RhdHVzKCkgOiBBUFBDQUNIRV9VTkNBQ0hFRDsKIH0KIAog
dm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjp1cGRhdGUoRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0g
ICAgQXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSBhc3NvY2lhdGVkQ2FjaGUoKTsKKyAgICBBcHBs
aWNhdGlvbkNhY2hlRnJvbnRlbmQqIGNhY2hlID0gYXBwY2FjaGVGcm9udGVuZCgpOwogICAgIGlm
ICghY2FjaGUpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICAKLSAgICBjYWNoZS0+Z3JvdXAoKS0+dXBkYXRlKG1fZnJhbWUsIEFw
cGxpY2F0aW9uQ2FjaGVVcGRhdGVXaXRob3V0QnJvd3NpbmdDb250ZXh0KTsKKyAgICBjYWNoZS0+
dXBkYXRlKCk7CiB9CiAKIGJvb2wgRE9NQXBwbGljYXRpb25DYWNoZTo6c3dhcENhY2hlKCkKIHsK
LSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBBcHBs
aWNhdGlvbkNhY2hlKiBjYWNoZSA9IG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
LT5hcHBsaWNhdGlvbkNhY2hlKCk7CisgICAgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kKiBjYWNo
ZSA9IGFwcGNhY2hlRnJvbnRlbmQoKTsKICAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBJZiB0aGUgZ3JvdXAgb2YgYXBwbGljYXRpb24gY2FjaGVzIHRvIHdo
aWNoIGNhY2hlIGJlbG9uZ3MgaGFzIHRoZSBsaWZlY3ljbGUgc3RhdHVzIG9ic29sZXRlLCB1bmFz
c29jaWF0ZSBkb2N1bWVudCBmcm9tIGNhY2hlLgotICAgIGlmIChjYWNoZS0+Z3JvdXAoKS0+aXNP
YnNvbGV0ZSgpKSB7Ci0gICAgICAgIGNhY2hlLT5ncm91cCgpLT5kaXNhc3NvY2lhdGVEb2N1bWVu
dExvYWRlcihtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIElmIHRoZXJlIGlzIG5vIG5ld2VyIGNhY2hlLCBy
YWlzZSBhbiBJTlZBTElEX1NUQVRFX0VSUiBleGNlcHRpb24uCi0gICAgQXBwbGljYXRpb25DYWNo
ZSogbmV3ZXN0Q2FjaGUgPSBjYWNoZS0+Z3JvdXAoKS0+bmV3ZXN0Q2FjaGUoKTsKLSAgICBpZiAo
Y2FjaGUgPT0gbmV3ZXN0Q2FjaGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBB
U1NFUlQoY2FjaGUtPmdyb3VwKCkgPT0gbmV3ZXN0Q2FjaGUtPmdyb3VwKCkpOwotICAgIG1fZnJh
bWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5zZXRBcHBsaWNhdGlvbkNhY2hlKG5ld2Vz
dENhY2hlKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gY2FjaGUtPnN3YXBD
YWNoZSgpOwogfQogICAgIAogdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpzd2FwQ2FjaGUoRXhj
ZXB0aW9uQ29kZSYgZWMpCkBAIC0xMjcsNzcgKzgyLDE4IEBACiAgICAgICAgIGVjID0gSU5WQUxJ
RF9TVEFURV9FUlI7CiB9CiAKLVBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gRE9NQXBwbGljYXRp
b25DYWNoZTo6aXRlbXMoKQotewotICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKLSAgICBpZiAo
QXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSBhc3NvY2lhdGVkQ2FjaGUoKSkgewotICAgICAgICB1
bnNpZ25lZCBudW1FbnRyaWVzID0gY2FjaGUtPm51bUR5bmFtaWNFbnRyaWVzKCk7Ci0gICAgICAg
IHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bUVudHJpZXMpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRW50cmllczsgKytpKQotICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChjYWNoZS0+ZHluYW1pY0VudHJ5KGkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXRp
Y1N0cmluZ0xpc3Q6OmFkb3B0KHJlc3VsdCk7Ci19Ci0KLWJvb2wgRE9NQXBwbGljYXRpb25DYWNo
ZTo6aGFzSXRlbShjb25zdCBLVVJMJiB1cmwsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFw
cGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gYXNzb2NpYXRlZENhY2hlKCk7Ci0gICAgaWYgKCFjYWNo
ZSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgaWYgKCF1cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGVjID0gU1lO
VEFYX0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZSogcmVzb3VyY2UgPSBjYWNoZS0+cmVzb3VyY2VGb3JVUkwodXJsLnN0cmlu
ZygpKTsKLSAgICByZXR1cm4gcmVzb3VyY2UgJiYgKHJlc291cmNlLT50eXBlKCkgJiBBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U6OkR5bmFtaWMpOwotfQotICAgIAotdm9pZCBET01BcHBsaWNhdGlv
bkNhY2hlOjphZGQoY29uc3QgS1VSTCYgdXJsLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBB
cHBsaWNhdGlvbkNhY2hlKiBjYWNoZSA9IGFzc29jaWF0ZWRDYWNoZSgpOwotICAgIGlmICghY2Fj
aGUpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAKLSAgICBpZiAoIXVybC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZWMgPSBTWU5UQVhf
RVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgICBpZiAoIWNhY2hlLT5h
ZGREeW5hbWljRW50cnkodXJsKSkgewotICAgICAgICAvLyBUaGlzIHNob3VsZCB1c2UgdGhlIChj
dXJyZW50bHkgbm90IHNwZWNpZmllZCkgc2VjdXJpdHkgZXhjZXB0aW9ucyBpbiBIVE1MNSA0LjMu
NAotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICB9Ci19Ci0KLXZvaWQgRE9NQXBwbGlj
YXRpb25DYWNoZTo6cmVtb3ZlKGNvbnN0IEtVUkwmIHVybCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgQXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSBhc3NvY2lhdGVkQ2FjaGUoKTsKLSAgICBp
ZiAoIWNhY2hlKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgCi0gICAgY2FjaGUtPnJlbW92ZUR5bmFtaWNFbnRyeSh1cmwpOwot
fQotCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBET01BcHBsaWNhdGlvbkNhY2hlOjpzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQo
KTsKKyAgICByZXR1cm4gbV9mcmFtZSA/IG1fZnJhbWUtPmRvY3VtZW50KCkgOiAwOwogfQogCi12
b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwg
Ym9vbCkKK3ZvaWQgRE9NQXBwbGljYXRpb25DYWNoZTo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50TmFtZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExp
c3RlbmVyLCBib29sKQogewotICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0g
bV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7CisgICAgRXZlbnRMaXN0ZW5lcnNNYXA6
Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnROYW1lKTsKICAgICBp
ZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKSB7CiAgICAgICAgIExpc3RlbmVyVmVj
dG9yIGxpc3RlbmVyczsKICAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsK
LSAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOworICAg
ICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVudE5hbWUsIGxpc3RlbmVycyk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgTGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXItPnNlY29uZDsK
ICAgICAgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlz
dGVuZXJzLmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnMuZW5kKCk7ICsrbGlzdGVu
ZXJJdGVyKSB7CkBAIC0yMDYsMTMgKzEwMiwxMyBAQAogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOwotICAgICAgICBtX2V2ZW50TGlz
dGVuZXJzLmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7CisgICAgICAgIG1fZXZlbnRMaXN0ZW5l
cnMuYWRkKGV2ZW50TmFtZSwgbGlzdGVuZXJzKTsKICAgICB9ICAgIAogfQogCi12b2lkIERPTUFw
cGxpY2F0aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCit2b2lkIERPTUFw
cGxpY2F0aW9uQ2FjaGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudE5hbWUsIEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCiB7Ci0gICAgRXZl
bnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZl
bnRUeXBlKTsKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRM
aXN0ZW5lcnMuZmluZChldmVudE5hbWUpOwogICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0ZW5l
cnMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTIzMSw3ICsxMjcsNyBAQAogICAg
ICAgICBlYyA9IEV2ZW50RXhjZXB0aW9uOjpVTlNQRUNJRklFRF9FVkVOVF9UWVBFX0VSUjsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgTGlzdGVuZXJWZWN0b3IgbGlz
dGVuZXJzQ29weSA9IG1fZXZlbnRMaXN0ZW5lcnMuZ2V0KGV2ZW50LT50eXBlKCkpOwogICAgIGZv
ciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVy
c0NvcHkuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVyc0NvcHkuZW5kKCk7ICsrbGlz
dGVuZXJJdGVyKSB7CiAgICAgICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CkBAIC0yNTgsNDYg
KzE1NCw1NiBAQAogICAgIEFTU0VSVCghZWMpOyAgICAKIH0KIAotdm9pZCBET01BcHBsaWNhdGlv
bkNhY2hlOjpjYWxsQ2hlY2tpbmdMaXN0ZW5lcigpCisvLyBzdGF0aWMKK2NvbnN0IEF0b21pY1N0
cmluZyYgRE9NQXBwbGljYXRpb25DYWNoZTo6dG9FdmVudE5hbWUoQXBwbGljYXRpb25DYWNoZUV2
ZW50VHlwZSBldmVudFR5cGUpCiB7Ci0gICAgY2FsbExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGVj
a2luZ0V2ZW50LCBtX29uQ2hlY2tpbmdMaXN0ZW5lci5nZXQoKSk7CisgICAgc3dpdGNoIChldmVu
dFR5cGUpIHsKKyAgICAgICAgY2FzZSBBUFBDQUNIRV9DSEVDS0lOR19FVkVOVDoKKyAgICAgICAg
ICAgIHJldHVybiBldmVudE5hbWVzKCkuY2hlY2tpbmdFdmVudDsKKyAgICAgICAgY2FzZSBBUFBD
QUNIRV9FUlJPUl9FVkVOVDoKKyAgICAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkuZXJyb3JF
dmVudDsKKyAgICAgICAgY2FzZSBBUFBDQUNIRV9OT1VQREFURV9FVkVOVDoKKyAgICAgICAgICAg
IHJldHVybiBldmVudE5hbWVzKCkubm91cGRhdGVFdmVudDsKKyAgICAgICAgY2FzZSBBUFBDQUNI
RV9ET1dOTE9BRElOR19FVkVOVDoKKyAgICAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkuZG93
bmxvYWRpbmdFdmVudDsKKyAgICAgICAgY2FzZSBBUFBDQUNIRV9QUk9HUkVTU19FVkVOVDoKKyAg
ICAgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudDsKKyAgICAgICAgY2Fz
ZSBBUFBDQUNIRV9VUERBVEVSRUFEWV9FVkVOVDoKKyAgICAgICAgICAgIHJldHVybiBldmVudE5h
bWVzKCkudXBkYXRlcmVhZHlFdmVudDsKKyAgICAgICAgY2FzZSBBUFBDQUNIRV9DQUNIRURfRVZF
TlQ6CisgICAgICAgICAgICByZXR1cm4gZXZlbnROYW1lcygpLmNhY2hlZEV2ZW50OworICAgICAg
ICBjYXNlIEFQUENBQ0hFX09CU09MRVRFX0VWRU5UOiAgICAgICAgICAgIAorICAgICAgICAgICAg
cmV0dXJuIGV2ZW50TmFtZXMoKS5vYnNvbGV0ZUV2ZW50OworICAgIH0KKyAgICBBU1NFUlQoZmFs
c2UpOworICAgIHJldHVybiBldmVudE5hbWVzKCkuYWJvcnRFdmVudDsKIH0KIAotdm9pZCBET01B
cHBsaWNhdGlvbkNhY2hlOjpjYWxsRXJyb3JMaXN0ZW5lcigpCisvLyBzdGF0aWMKK0FwcGxpY2F0
aW9uQ2FjaGVFdmVudFR5cGUgRE9NQXBwbGljYXRpb25DYWNoZTo6dG9FdmVudFR5cGUoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudE5hbWUpCiB7Ci0gICAgY2FsbExpc3RlbmVyKGV2ZW50TmFtZXMo
KS5lcnJvckV2ZW50LCBtX29uRXJyb3JMaXN0ZW5lci5nZXQoKSk7CisgICAgaWYgKGV2ZW50TmFt
ZSA9PSBldmVudE5hbWVzKCkuY2hlY2tpbmdFdmVudCkKKyAgICAgICAgcmV0dXJuIEFQUENBQ0hF
X0NIRUNLSU5HX0VWRU5UOworICAgIGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLmVycm9y
RXZlbnQpCisgICAgICAgIHJldHVybiBBUFBDQUNIRV9FUlJPUl9FVkVOVDsKKyAgICBpZiAoZXZl
bnROYW1lID09IGV2ZW50TmFtZXMoKS5ub3VwZGF0ZUV2ZW50KQorICAgICAgICByZXR1cm4gQVBQ
Q0FDSEVfTk9VUERBVEVfRVZFTlQ7CisgICAgaWYgKGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCku
ZG93bmxvYWRpbmdFdmVudCkKKyAgICAgICAgcmV0dXJuIEFQUENBQ0hFX0RPV05MT0FESU5HX0VW
RU5UOworICAgIGlmIChldmVudE5hbWUgPT0gZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQpCisg
ICAgICAgIHJldHVybiBBUFBDQUNIRV9QUk9HUkVTU19FVkVOVDsKKyAgICBpZiAoZXZlbnROYW1l
ID09IGV2ZW50TmFtZXMoKS51cGRhdGVyZWFkeUV2ZW50KQorICAgICAgICByZXR1cm4gQVBQQ0FD
SEVfVVBEQVRFUkVBRFlfRVZFTlQ7CisgICAgaWYgKGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCku
Y2FjaGVkRXZlbnQpCisgICAgICAgIHJldHVybiBBUFBDQUNIRV9DQUNIRURfRVZFTlQ7CisgICAg
aWYgKGV2ZW50TmFtZSA9PSBldmVudE5hbWVzKCkub2Jzb2xldGVFdmVudCkKKyAgICAgICAgcmV0
dXJuIEFQUENBQ0hFX09CU09MRVRFX0VWRU5UOworICAKKyAgICBBU1NFUlQoZmFsc2UpOworICAg
IHJldHVybiBOVU1CRVJfT0ZfQVBQQ0FDSEVfRVZFTlRfVFlQRVM7CiB9CiAKLXZvaWQgRE9NQXBw
bGljYXRpb25DYWNoZTo6Y2FsbE5vVXBkYXRlTGlzdGVuZXIoKQotewotICAgIGNhbGxMaXN0ZW5l
cihldmVudE5hbWVzKCkubm91cGRhdGVFdmVudCwgbV9vbk5vVXBkYXRlTGlzdGVuZXIuZ2V0KCkp
OwotfQogCi12b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxEb3dubG9hZGluZ0xpc3RlbmVy
KCkKLXsKLSAgICBjYWxsTGlzdGVuZXIoZXZlbnROYW1lcygpLmRvd25sb2FkaW5nRXZlbnQsIG1f
b25Eb3dubG9hZGluZ0xpc3RlbmVyLmdldCgpKTsKLX0KLQotdm9pZCBET01BcHBsaWNhdGlvbkNh
Y2hlOjpjYWxsUHJvZ3Jlc3NMaXN0ZW5lcigpCi17Ci0gICAgY2FsbExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5wcm9ncmVzc0V2ZW50LCBtX29uUHJvZ3Jlc3NMaXN0ZW5lci5nZXQoKSk7Ci19Ci0KLXZv
aWQgRE9NQXBwbGljYXRpb25DYWNoZTo6Y2FsbFVwZGF0ZVJlYWR5TGlzdGVuZXIoKQotewotICAg
IGNhbGxMaXN0ZW5lcihldmVudE5hbWVzKCkudXBkYXRlcmVhZHlFdmVudCwgbV9vblVwZGF0ZVJl
YWR5TGlzdGVuZXIuZ2V0KCkpOwotfQotCi12b2lkIERPTUFwcGxpY2F0aW9uQ2FjaGU6OmNhbGxD
YWNoZWRMaXN0ZW5lcigpCi17Ci0gICAgY2FsbExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jYWNoZWRF
dmVudCwgbV9vbkNhY2hlZExpc3RlbmVyLmdldCgpKTsKLX0KLQotdm9pZCBET01BcHBsaWNhdGlv
bkNhY2hlOjpjYWxsT2Jzb2xldGVMaXN0ZW5lcigpCi17Ci0gICAgY2FsbExpc3RlbmVyKGV2ZW50
TmFtZXMoKS5vYnNvbGV0ZUV2ZW50LCBtX29uT2Jzb2xldGVMaXN0ZW5lci5nZXQoKSk7Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShPRkZMSU5FX1dFQl9B
UFBMSUNBVElPTlMpCisjZW5kaWYgLy8gRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQpJbmRleDog
bG9hZGVyL2FwcGNhY2hlMi9BcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBsb2FkZXIvYXBwY2FjaGUyL0FwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZC5oCShyZXZpc2lvbiAw
KQorKysgbG9hZGVyL2FwcGNhY2hlMi9BcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXBwbGljYXRpb25DYWNoZUZyb250
ZW5kX2gKKyNkZWZpbmUgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kX2gKKworI2lmIEVOQUJMRShB
UFBMSUNBVElPTl9DQUNIRSkKKworI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVDb21tb24uaCIK
KyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlQnJpZGdlOworICAgIGNs
YXNzIEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VDbGllbnRJbXBsOworICAgIGNsYXNzIERPTUFwcGxp
Y2F0aW9uQ2FjaGU7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0
OworCisgICAgLy8gRWFjaCBmcmFtZSBhbmQgd29ya2VyIGhhcyBhbiBBcHBsaWNhdGlvbkNhY2hl
RnJvbnRlbmQgd2hpY2ggc2VydmVzIGFzIGEKKyAgICAvLyBmYWNhZGUgdG8gdGhlIGFjdHVhbCBp
bXBsbWVudGF0aW9uIHdoaWNoIG1heSBiZSBydW5uaW5nIGluIGFub3RoZXIgcHJvY2Vzcy4KKyAg
ICAvLyBGSVhNRTogaW50ZWdyYXRlIHdpdGggdGhlIGluc3BlY3RvcgorICAgIC8vIEZJWE1FOiBp
bnRlZ3JhdGUgd2l0aCB3b3JrZXJzCisgICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZUZyb250ZW5k
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCgpOworCisg
ICAgICAgIC8vIERlbGV0ZWQgdXBvbiBmcmFtZSBkZXN0cnVjdGlvbi4KKyAgICAgICAgfkFwcGxp
Y2F0aW9uQ2FjaGVGcm9udGVuZCgpOworCisgICAgICAgIC8vIFJldHVybnMgdGhlIGFwcGNhY2hl
IGNvbnRleHRJRCBmb3IgdGhpcyBpbnN0YW5jZSwgZWFjaCBmcmFtZSBpcyB1bmlxdWVseQorICAg
ICAgICAvLyBpZGVudGlmaWVkIGJ5IHRoaXMgSUQuCisgICAgICAgIGNvbnN0IEdsb2JhbEFwcGxp
Y2F0aW9uQ2FjaGVDb250ZXh0SUQmIGNvbnRleHRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4
dElEOyB9CisKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgYXBwY2FjaGUgY29udGV4dFR5cGUgZm9y
IHRoaXMgaW5zdGFuY2UKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUNvbnRleHRUeXBlIGNvbnRl
eHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0VHlwZTsgfQorCisgICAgICAgIC8vIENh
bGxlZCBkdXJpbmcgZnJhbWUgY3JlYXRpb24uIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLgor
ICAgICAgICB2b2lkIGluaXRpYWxpemVGb3JGcmFtZShGcmFtZSogZnJhbWUpOworCisgICAgICAg
IC8vIENhbGxlZCBkdXJpbmcgZnJhbWUgbmF2aWdhdGlvbiB3aGVuIGEgbmV3IGRvY3VtZW50IGlz
IGNvbW1pdHRlZC4KKyAgICAgICAgdm9pZCBzZWxlY3RJbml0aWFsQ2FjaGUoY29uc3QgS1VSTCYg
ZG9jdW1lbnRVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9u
Q2FjaGVJRCBjYWNoZURvY3VtZW50V2FzTG9hZGVkRnJvbSk7CisKKyAgICAgICAgLy8gQ2FsbGVk
IGFmdGVyIHBhcnNpbmcgb2YgdGhlIEhUTUwgZWxlbWVudCBpcyBjb21wbGV0ZSwgYW5kIHRoZXJl
IHdhcyBubworICAgICAgICAvLyBtYW5pZmVzdCBhdHRyaWJ1dGUuCisgICAgICAgIHZvaWQgc2Vs
ZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3QoY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZUlEIGNhY2hl
RG9jdW1lbnRXYXNMb2FkZWRGcm9tKTsKKworICAgICAgICAvLyBDYWxsZWQgYWZ0ZXIgcGFyc2lu
ZyBvZiB0aGUgSFRNTCBlbGVtZW50IGlzIGNvbXBsZXRlLCBhbmQgdGhlcmUgd2FzIGEKKyAgICAg
ICAgLy8gbWFuaWZlc3QgYXR0cmlidXRlLiBSZXR1cm5zIGZhbHNlIGlmIHRoZSB0aGUgbmF2aWdh
dGlvbiBzaG91bGQgYmUgcmVzdGFydGVkLAorICAgICAgICAvLyB0aGlzIG9jY3VycyBpZiBhICdm
b3JpZWduJyByZXNvdXJjZSB3YXMgbG9hZGVkIGZyb20gdGhlIGNhY2hlLgorICAgICAgICBib29s
IHNlbGVjdENhY2hlV2l0aE1hbmlmZXN0KGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVJRCBjYWNoZURv
Y3VtZW50V2FzTG9hZGVkRnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBLVVJMJiBtYW5pZmVzdFVSTG9mQ2FjaGVEb2N1bWVudFdhc0xvYWRlZEZyb20sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgbWFuaWZlc3RV
UkwpOworCisgICAgICAgIC8vIENhbGxlZCBieSBGcmFtZUxvYWRlciB3aGVuIHByZXBhcmluZyBh
IHJlc291cmNlIHJlcXVlc3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dC4KKyAgICAgICAg
dm9pZCBhZGRFeHRyYUZpZWxkc1RvUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJv
b2wgbWFpblJlc291cmNlKTsKKworICAgICAgICAvLyBDYWxsZWQgYnkgRnJhbWVMb2FkZXIgd2hl
biBkZWNpZGluZyB3aGV0aGVyIHRoZSBjb250ZW50cyBhcmUgZWxpZ2libGUgZm9yIHRoZSBwYWdl
IGNhY2hlLgorICAgICAgICBib29sIGNhbkNhY2hlQ3VycmVudERvY3VtZW50SW5QYWdlQ2FjaGUo
KSBjb25zdDsKKworICAgICAgICAvLyBTdXBwb3J0IGZvciB0aGUgc2NyaXB0YWJsZSBpbnRlcmZh
Y2UgZGVmaW5lZCBieSBET01BcHBsaWNhdG9pbkNhY2hlLmlkbAorICAgICAgICBBcHBsaWNhdGlv
bkNhY2hlU3RhdHVzIHN0YXR1cygpIGNvbnN0OyAgCisgICAgICAgIGJvb2wgdXBkYXRlKCk7Cisg
ICAgICAgIGJvb2wgc3dhcENhY2hlKCk7ICAgCisgICAgICAgIHZvaWQgc2V0RE9NQXBwbGljYXRp
b25DYWNoZShET01BcHBsaWNhdGlvbkNhY2hlKiBjbGllbnQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVCghbV9ET01BcHBsaWNhdGlvbkNhY2hlIHx8ICFjbGllbnQpOworICAgICAgICAg
ICAgQVNTRVJUKGlzSW5pdGlhbGl6ZWQoKSk7CisgICAgICAgICAgICBtX0RPTUFwcGxpY2F0aW9u
Q2FjaGUgPSBjbGllbnQ7CisgICAgICAgIH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgLy8g
bWV0aG9kcyBmb3IgdXNlIGJ5IHRoZSBicmlkZ2UgY2xpZW50CisgICAgICAgIGZyaWVuZCBBcHBs
aWNhdGlvbkNhY2hlQnJpZGdlQ2xpZW50SW1wbDsKKworICAgICAgICAvLyBSZXRyaWV2ZSB0aGUg
ZnJvbnRlbmQgb2JqZWN0IGZvciBhIGNvbnRleHRJRC4gSXQgaXMgYSBwcm9ncmFtbWluZyBlcnJv
cgorICAgICAgICAvLyB0byByZXRyaWV2ZSB0aGUgb2JqZWN0IG9uIHRoZSB3cm9uZyB0aHJlYWQu
CisgICAgICAgIHN0YXRpYyBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQqIGZyb21Db250ZXh0SUQo
Y29uc3QgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCAmY29udGV4dElEKTsKKworICAg
ICAgICAvLyBVc2VkIGJ5IHRoZSBicmlkZ2UgdG8gcHJldmVudCBzZW5kaW5nIG5vdGlmaWNhdGlv
biByZWxhdGVkIHRvIGEgcHJldmlvdXNseSBzZWxlY3RlZCBjYWNoZQorICAgICAgICBpbnQgY2Fj
aGVTZXF1ZW5jZU51bWJlcigpIHsgcmV0dXJuIG1fY2FjaGVTZXF1ZW5jZU51bWJlcjsgfQorCisg
ICAgICAgIC8vIENhbGxlZCBieSB0aGUgYmFja2VuZCBwcm94eSB0byBub3RpZnkgdGhlIGZyb250
ZW5kIG9mIGhhcHBlbmluZ3MgdG8gdGhlIHVuZGVybHlpbmcKKyAgICAgICAgLy8gYXBwY2FjaGUg
YXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dC4KKyAgICAgICAgdm9pZCBub3RpZnlTZWxlY3RD
b21wbGV0ZShBcHBsaWNhdGlvbkNhY2hlU3RhdHVzIHN0YXR1cyk7CisgICAgICAgIHZvaWQgbm90
aWZ5U3RhdHVzQ2hhbmdlZChBcHBsaWNhdGlvbkNhY2hlU3RhdHVzIHN0YXR1cyk7CisgICAgICAg
IHZvaWQgbm90aWZ5RXZlbnRMaXN0ZW5lcihBcHBsaWNhdGlvbkNhY2hlRXZlbnRUeXBlIGV2ZW50
VHlwZSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGluaXRpYWxpemUoQXBwbGljYXRp
b25DYWNoZUNvbnRleHRUeXBlIGNvbnRleHRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCYgcGFyZW50Q29udGV4dElEKTsK
KworICAgICAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRJ
RCAhPSBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEOjpub25lKCk7IH0KKyAgICAgICAg
aW50IHByZXBhcmVGb3JTZWxlY3RDYWxsKCk7CisKKyAgICAgICAgc3RhdGljIHZvaWQgYWRkVG9N
YXAoQXBwbGljYXRpb25DYWNoZUZyb250ZW5kKiBmcm9udGVuZCk7CisgICAgICAgIHN0YXRpYyB2
b2lkIHJlbW92ZUZyb21NYXAoQXBwbGljYXRpb25DYWNoZUZyb250ZW5kKiBmcm9udGVuZCk7CisK
KyAgICAgICAgLy8gU3lzdGVtIHdpZGUgdW5pcXVlIGlkIGZvciB0aGUgY29udGV4dC4KKyAgICAg
ICAgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCBtX2NvbnRleHRJRDsKKworICAgICAg
ICAvLyBUaGUgdHlwZSBvZiBjb250ZXh0LgorICAgICAgICBBcHBsaWNhdGlvbkNhY2hlQ29udGV4
dFR5cGUgbV9jb250ZXh0VHlwZTsKKworICAgICAgICAvLyBUaGUgRE9NIG9iamVjdCB0aHJ1IHdo
aWNoIHdlIHN1cmZhY2UgZXZlbnRzIHRvIHNjcmlwdC4KKyAgICAgICAgRE9NQXBwbGljYXRpb25D
YWNoZSogbV9ET01BcHBsaWNhdGlvbkNhY2hlOworCisgICAgICAgIGJvb2wgbV9jYW5DYWNoZUlu
UGFnZUNhY2hlOworICAgICAgICBib29sIG1faXNTZWxlY3RJblByb2dyZXNzOworICAgICAgICBp
bnQgbV9jYWNoZVNlcXVlbmNlTnVtYmVyOworCisgICAgICAgIC8vIFdlIGNhY2hlIHRoaXMgdmFs
dWUgdG8gYXZvaWQgcm91bmQgdHJpcHMgdG8gdGhlIGJhY2tlbmQgd2hlbiB0aGUKKyAgICAgICAg
Ly8gc3RhdHVzIG1ldGhvZCBpcyBjYWxsZWQuCisgICAgICAgIG11dGFibGUgYm9vbCBtX2hhc0Nh
Y2hlZFN0YXR1czsKKyAgICAgICAgbXV0YWJsZSBBcHBsaWNhdGlvbkNhY2hlU3RhdHVzIG1fY2Fj
aGVkU3RhdHVzOworCisgICAgICAgIC8vIE91ciBicmlkZ2UgdG8gdGhlIGJhY2tlbmQuCisgICAg
ICAgIEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2UqIG1fYnJpZGdlOworICAgIH07CisKK30gIC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQor
I2VuZGlmICAvLyBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmRfaAoKUHJvcGVydHkgY2hhbmdlcyBv
bjogbG9hZGVyXGFwcGNhY2hlMlxBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBsb2FkZXIvYXBwY2FjaGUyL0RP
TUFwcGxpY2F0aW9uQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIvYXBwY2FjaGUyL0RPTUFw
cGxpY2F0aW9uQ2FjaGUuaAkocmV2aXNpb24gMCkKKysrIGxvYWRlci9hcHBjYWNoZTIvRE9NQXBw
bGljYXRpb25DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiwxMCBAQAogI2lmbmRl
ZiBET01BcHBsaWNhdGlvbkNhY2hlX2gKICNkZWZpbmUgRE9NQXBwbGljYXRpb25DYWNoZV9oCiAK
LSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2lmIEVOQUJMRShBUFBMSUNB
VElPTl9DQUNIRSkKIAorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVDb21tb24uaCIKKyNpbmNs
dWRlICJBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQuaCIKICNpbmNsdWRlICJBdG9taWNTdHJpbmdI
YXNoLmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVy
LmgiCkBAIC0zOCw3ICs0MCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQXBw
bGljYXRpb25DYWNoZTsKIGNsYXNzIEF0b21pY1N0cmluZ0ltcGw7CiBjbGFzcyBET01TdHJpbmdM
aXN0OwogY2xhc3MgRnJhbWU7CkBAIC00NywzMiArNDgsMzMgQEAKICAgICAKIGNsYXNzIERPTUFw
cGxpY2F0aW9uQ2FjaGUgOiBwdWJsaWMgUmVmQ291bnRlZDxET01BcHBsaWNhdGlvbkNhY2hlPiwg
cHVibGljIEV2ZW50VGFyZ2V0IHsKIHB1YmxpYzoKKyAgICAvLyBGSVhNRTogaW50ZWdyYXRlIHdp
dGggd29ya2VycwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTUFwcGxpY2F0aW9uQ2FjaGU+IGNy
ZWF0ZShGcmFtZSogZnJhbWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBET01BcHBsaWNhdGlvbkNh
Y2hlKGZyYW1lKSk7IH0KICAgICB2b2lkIGRpc2Nvbm5lY3RGcmFtZSgpOwogCiAgICAgZW51bSBT
dGF0dXMgewotICAgICAgICBVTkNBQ0hFRCA9IDAsCi0gICAgICAgIElETEUgPSAxLAotICAgICAg
ICBDSEVDS0lORyA9IDIsCi0gICAgICAgIERPV05MT0FESU5HID0gMywKLSAgICAgICAgVVBEQVRF
UkVBRFkgPSA0LAotICAgICAgICBPQlNPTEVURSA9IDUKKyAgICAgICAgVU5DQUNIRUQgPSBBUFBD
QUNIRV9VTkNBQ0hFRCwKKyAgICAgICAgSURMRSA9IEFQUENBQ0hFX0lETEUsCisgICAgICAgIENI
RUNLSU5HID0gQVBQQ0FDSEVfQ0hFQ0tJTkcsCisgICAgICAgIERPV05MT0FESU5HID0gQVBQQ0FD
SEVfRE9XTkxPQURJTkcsCisgICAgICAgIFVQREFURVJFQURZID0gQVBQQ0FDSEVfVVBEQVRFUkVB
RFksCisgICAgICAgIE9CU09MRVRFID0gQVBQQ0FDSEVfT0JTT0xFVEUKICAgICB9OwogCiAgICAg
dW5zaWduZWQgc2hvcnQgc3RhdHVzKCkgY29uc3Q7Ci0gICAgCiAgICAgdm9pZCB1cGRhdGUoRXhj
ZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgc3dhcENhY2hlKEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAK
LSAgICBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGl0ZW1zKCk7Ci0gICAgYm9vbCBoYXNJdGVt
KGNvbnN0IEtVUkwmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBhZGQoY29uc3QgS1VSTCYs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHJlbW92ZShjb25zdCBLVVJMJiwgRXhjZXB0aW9u
Q29kZSYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2Fw
dHVyZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOworICAg
IC8vIEV2ZW50IGF0dHJpYnV0ZXMKKyAgICB2b2lkIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIo
QXBwbGljYXRpb25DYWNoZUV2ZW50VHlwZSB0eXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGV2ZW50TGlzdGVuZXIpIHsgbV9hdHRyaWJ1dGVFdmVudExpc3RlbmVyc1t0eXBlXSA9IGV2ZW50
TGlzdGVuZXI7IH0KKyAgICBFdmVudExpc3RlbmVyKiBnZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVy
KEFwcGxpY2F0aW9uQ2FjaGVFdmVudFR5cGUgdHlwZSkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVFdmVudExpc3RlbmVyc1t0eXBlXS5nZXQoKTsgfQorICAgIHZvaWQgY2xlYXJBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKEFwcGxpY2F0aW9uQ2FjaGVFdmVudFR5cGUgdHlwZSkgeyBtX2F0dHJpYnV0
ZUV2ZW50TGlzdGVuZXJzW3R5cGVdID0gMDsgfQorICAgIHZvaWQgY2FsbEV2ZW50TGlzdGVuZXIo
QXBwbGljYXRpb25DYWNoZUV2ZW50VHlwZSB0eXBlKSB7IGNhbGxMaXN0ZW5lcih0b0V2ZW50TmFt
ZSh0eXBlKSwgZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0eXBlKSk7IH0KKworICAgIC8vIEV2
ZW50VGFyZ2V0IGltcGwKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50TmFtZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1
c2VDYXB0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50TmFtZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7
CiAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICAKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gPiBMaXN0ZW5lclZlY3RvcjsKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBM
aXN0ZW5lclZlY3Rvcj4gRXZlbnRMaXN0ZW5lcnNNYXA7CiAgICAgRXZlbnRMaXN0ZW5lcnNNYXAm
IGV2ZW50TGlzdGVuZXJzKCkgeyByZXR1cm4gbV9ldmVudExpc3RlbmVyczsgfQpAQCAtODAsNjgg
KzgyLDU5IEBACiAgICAgdXNpbmcgUmVmQ291bnRlZDxET01BcHBsaWNhdGlvbkNhY2hlPjo6cmVm
OwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8RE9NQXBwbGljYXRpb25DYWNoZT46OmRlcmVmOwogCi0g
ICAgdm9pZCBzZXRPbmNoZWNraW5nKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0
ZW5lcikgeyBtX29uQ2hlY2tpbmdMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KLSAgICBFdmVu
dExpc3RlbmVyKiBvbmNoZWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV9vbkNoZWNraW5nTGlzdGVu
ZXIuZ2V0KCk7IH0KLQotICAgIHZvaWQgc2V0T25lcnJvcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbkVycm9yTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9
Ci0gICAgRXZlbnRMaXN0ZW5lciogb25lcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fb25FcnJvckxp
c3RlbmVyLmdldCgpOyB9Ci0KLSAgICB2b2lkIHNldE9ubm91cGRhdGUoUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25Ob1VwZGF0ZUxpc3RlbmVyID0gZXZlbnRM
aXN0ZW5lcjsgfQotICAgIEV2ZW50TGlzdGVuZXIqIG9ubm91cGRhdGUoKSBjb25zdCB7IHJldHVy
biBtX29uTm9VcGRhdGVMaXN0ZW5lci5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXRPbmRvd25sb2Fk
aW5nKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uRG93bmxv
YWRpbmdMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KLSAgICBFdmVudExpc3RlbmVyKiBvbmRv
d25sb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9vbkRvd25sb2FkaW5nTGlzdGVuZXIuZ2V0KCk7
IH0KLSAgICAKLSAgICB2b2lkIHNldE9ucHJvZ3Jlc3MoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBldmVudExpc3RlbmVyKSB7IG1fb25Qcm9ncmVzc0xpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsg
fQotICAgIEV2ZW50TGlzdGVuZXIqIG9ucHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX29uUHJv
Z3Jlc3NMaXN0ZW5lci5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXRPbnVwZGF0ZXJlYWR5KFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uVXBkYXRlUmVhZHlMaXN0
ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KLSAgICBFdmVudExpc3RlbmVyKiBvbnVwZGF0ZXJlYWR5
KCkgY29uc3QgeyByZXR1cm4gbV9vblVwZGF0ZVJlYWR5TGlzdGVuZXIuZ2V0KCk7IH0KLQotICAg
IHZvaWQgc2V0T25jYWNoZWQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KSB7IG1fb25DYWNoZWRMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KLSAgICBFdmVudExpc3Rl
bmVyKiBvbmNhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fb25DYWNoZWRMaXN0ZW5lci5nZXQoKTsg
fQotCi0gICAgdm9pZCBzZXRPbm9ic29sZXRlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZl
bnRMaXN0ZW5lcikgeyBtX29uT2Jzb2xldGVMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KLSAg
ICBFdmVudExpc3RlbmVyKiBvbm9ic29sZXRlKCkgY29uc3QgeyByZXR1cm4gbV9vbk9ic29sZXRl
TGlzdGVuZXIuZ2V0KCk7IH0KLQogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUq
IHRvRE9NQXBwbGljYXRpb25DYWNoZSgpIHsgcmV0dXJuIHRoaXM7IH0KIAotICAgIHZvaWQgY2Fs
bENoZWNraW5nTGlzdGVuZXIoKTsKLSAgICB2b2lkIGNhbGxFcnJvckxpc3RlbmVyKCk7ICAgIAot
ICAgIHZvaWQgY2FsbE5vVXBkYXRlTGlzdGVuZXIoKTsgICAgCi0gICAgdm9pZCBjYWxsRG93bmxv
YWRpbmdMaXN0ZW5lcigpOwotICAgIHZvaWQgY2FsbFByb2dyZXNzTGlzdGVuZXIoKTsKLSAgICB2
b2lkIGNhbGxVcGRhdGVSZWFkeUxpc3RlbmVyKCk7Ci0gICAgdm9pZCBjYWxsQ2FjaGVkTGlzdGVu
ZXIoKTsKLSAgICB2b2lkIGNhbGxPYnNvbGV0ZUxpc3RlbmVyKCk7Ci0gICAgCisgICAgLy8gRXhw
bGljaXRseSBuYW1lZCBhdHRyaWJ1dGUgZXZlbnQgbGlzdGVuZXIgaGVscGVycworICAgIHZvaWQg
c2V0T25jaGVja2luZyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKSB7IHNldEF0
dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQVBQQ0FDSEVfQ0hFQ0tJTkdfRVZFTlQsIGxpc3RlbmVyKTsg
fQorICAgIHZvaWQgc2V0T25lcnJvcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVy
KSB7IHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQVBQQ0FDSEVfRVJST1JfRVZFTlQsIGxpc3Rl
bmVyKTt9CisgICAgdm9pZCBzZXRPbm5vdXBkYXRlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
bGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBUFBDQUNIRV9OT1VQREFURV9F
VkVOVCwgbGlzdGVuZXIpOyB9CisgICAgdm9pZCBzZXRPbmRvd25sb2FkaW5nKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBUFBD
QUNIRV9ET1dOTE9BRElOR19FVkVOVCwgbGlzdGVuZXIpOyB9CisgICAgdm9pZCBzZXRPbnByb2dy
ZXNzKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsgc2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihBUFBDQUNIRV9QUk9HUkVTU19FVkVOVCwgbGlzdGVuZXIpOyB9CisgICAgdm9p
ZCBzZXRPbnVwZGF0ZXJlYWR5KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpIHsg
c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBUFBDQUNIRV9VUERBVEVSRUFEWV9FVkVOVCwgbGlz
dGVuZXIpOyB9CisgICAgdm9pZCBzZXRPbmNhY2hlZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGxpc3RlbmVyKSB7IHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQVBQQ0FDSEVfQ0FDSEVEX0VW
RU5ULCBsaXN0ZW5lcik7IH0KKyAgICB2b2lkIHNldE9ub2Jzb2xldGUoUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBsaXN0ZW5lcikgeyBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKEFQUENBQ0hF
X09CU09MRVRFX0VWRU5ULCBsaXN0ZW5lcik7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbmNoZWNr
aW5nKCkgY29uc3QgeyByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBUFBDQUNIRV9D
SEVDS0lOR19FVkVOVCk7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbmVycm9yKCkgY29uc3QgeyBy
ZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBUFBDQUNIRV9FUlJPUl9FVkVOVCk7IH0K
KyAgICBFdmVudExpc3RlbmVyKiBvbm5vdXBkYXRlKCkgY29uc3QgeyByZXR1cm4gZ2V0QXR0cmli
dXRlRXZlbnRMaXN0ZW5lcihBUFBDQUNIRV9OT1VQREFURV9FVkVOVCk7IH0KKyAgICBFdmVudExp
c3RlbmVyKiBvbmRvd25sb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihBUFBDQUNIRV9ET1dOTE9BRElOR19FVkVOVCk7IH0KKyAgICBFdmVudExpc3RlbmVy
KiBvbnByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihB
UFBDQUNIRV9QUk9HUkVTU19FVkVOVCk7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbnVwZGF0ZXJl
YWR5KCkgY29uc3QgeyByZXR1cm4gZ2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihBUFBDQUNIRV9V
UERBVEVSRUFEWV9FVkVOVCk7IH0KKyAgICBFdmVudExpc3RlbmVyKiBvbmNhY2hlZCgpIGNvbnN0
IHsgcmV0dXJuIGdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoQVBQQ0FDSEVfQ0FDSEVEX0VWRU5U
KTsgfQorICAgIEV2ZW50TGlzdGVuZXIqIG9ub2Jzb2xldGUoKSBjb25zdCB7IHJldHVybiBnZXRB
dHRyaWJ1dGVFdmVudExpc3RlbmVyKEFQUENBQ0hFX09CU09MRVRFX0VWRU5UKTsgfQorICAgIHZv
aWQgY2FsbENoZWNraW5nTGlzdGVuZXIoKSB7IGNhbGxFdmVudExpc3RlbmVyKEFQUENBQ0hFX0NI
RUNLSU5HX0VWRU5UKTsgfQorICAgIHZvaWQgY2FsbEVycm9yTGlzdGVuZXIoKSB7IGNhbGxFdmVu
dExpc3RlbmVyKEFQUENBQ0hFX0VSUk9SX0VWRU5UKTsgfQorICAgIHZvaWQgY2FsbE5vVXBkYXRl
TGlzdGVuZXIoKSB7IGNhbGxFdmVudExpc3RlbmVyKEFQUENBQ0hFX05PVVBEQVRFX0VWRU5UKTsg
fQorICAgIHZvaWQgY2FsbERvd25sb2FkaW5nTGlzdGVuZXIoKSB7IGNhbGxFdmVudExpc3RlbmVy
KEFQUENBQ0hFX0RPV05MT0FESU5HX0VWRU5UKTsgfQorICAgIHZvaWQgY2FsbFByb2dyZXNzTGlz
dGVuZXIoKSB7IGNhbGxFdmVudExpc3RlbmVyKEFQUENBQ0hFX1BST0dSRVNTX0VWRU5UKTsgfQor
ICAgIHZvaWQgY2FsbFVwZGF0ZVJlYWR5TGlzdGVuZXIoKSB7IGNhbGxFdmVudExpc3RlbmVyKEFQ
UENBQ0hFX1VQREFURVJFQURZX0VWRU5UKTsgfQorICAgIHZvaWQgY2FsbENhY2hlZExpc3RlbmVy
KCkgeyBjYWxsRXZlbnRMaXN0ZW5lcihBUFBDQUNIRV9DQUNIRURfRVZFTlQpOyB9CisgICAgdm9p
ZCBjYWxsT2Jzb2xldGVMaXN0ZW5lcigpIHsgY2FsbEV2ZW50TGlzdGVuZXIoQVBQQ0FDSEVfT0JT
T0xFVEVfRVZFTlQpOyB9CisKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiB0b0V2ZW50
TmFtZShBcHBsaWNhdGlvbkNhY2hlRXZlbnRUeXBlIGV2ZW50VHlwZSk7CisgICAgc3RhdGljIEFw
cGxpY2F0aW9uQ2FjaGVFdmVudFR5cGUgdG9FdmVudFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudE5hbWUpOworCiBwcml2YXRlOgogICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUoRnJhbWUqKTsK
KwogICAgIHZvaWQgY2FsbExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBF
dmVudExpc3RlbmVyKik7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkg
eyByZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigp
OyB9CiAKLSAgICBBcHBsaWNhdGlvbkNhY2hlKiBhc3NvY2lhdGVkQ2FjaGUoKSBjb25zdDsKKyAg
ICBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQqIGFwcGNhY2hlRnJvbnRlbmQoKSBjb25zdCB7IHJl
dHVybiBtX2FwcGNhY2hlRnJvbnRlbmQ7IH0KICAgICBib29sIHN3YXBDYWNoZSgpOwogICAgIAot
ICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uQ2hlY2tpbmdMaXN0ZW5lcjsKLSAgICBSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbV9vbkVycm9yTGlzdGVuZXI7Ci0gICAgUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IG1fb25Ob1VwZGF0ZUxpc3RlbmVyOwotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBt
X29uRG93bmxvYWRpbmdMaXN0ZW5lcjsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vblBy
b2dyZXNzTGlzdGVuZXI7Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25VcGRhdGVSZWFk
eUxpc3RlbmVyOwotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX29uQ2FjaGVkTGlzdGVuZXI7
Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25PYnNvbGV0ZUxpc3RlbmVyOwotICAgIAor
ICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBtX2F0dHJpYnV0ZUV2ZW50TGlzdGVuZXJzW05VTUJF
Ul9PRl9BUFBDQUNIRV9FVkVOVF9UWVBFU107CiAgICAgRXZlbnRMaXN0ZW5lcnNNYXAgbV9ldmVu
dExpc3RlbmVyczsKIAogICAgIEZyYW1lKiBtX2ZyYW1lOworICAgIEFwcGxpY2F0aW9uQ2FjaGVG
cm9udGVuZCogbV9hcHBjYWNoZUZyb250ZW5kOworCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2VuZGlm
IC8vIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKIAogI2VuZGlmIC8vIERPTUFwcGxpY2F0aW9u
Q2FjaGVfaApJbmRleDogbG9hZGVyL2FwcGNhY2hlMi9ET01BcHBsaWNhdGlvbkNhY2hlLmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBsb2FkZXIvYXBwY2FjaGUyL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaWRsCShy
ZXZpc2lvbiAwKQorKysgbG9hZGVyL2FwcGNhY2hlMi9ET01BcHBsaWNhdGlvbkNhY2hlLmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMjMsMTAgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwog
IAotbW9kdWxlIG9mZmxpbmUgeworbW9kdWxlIGFwcGNhY2hlIHsKICAKICAgICBpbnRlcmZhY2Ug
WwotICAgICAgICBDb25kaXRpb25hbD1PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMsCisgICAgICAg
IENvbmRpdGlvbmFsPUFQUExJQ0FUSU9OX0NBQ0hFLAogICAgICAgICBDdXN0b21NYXJrRnVuY3Rp
b24KICAgICBdIERPTUFwcGxpY2F0aW9uQ2FjaGUgewogICAgICAgICAvLyB1cGRhdGUgc3RhdHVz
CkBAIC00MywxNyArNDMsNiBAQAogICAgICAgICB2b2lkIHN3YXBDYWNoZSgpCiAgICAgICAgICAg
ICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAotI2lmIGRlZmluZWQoRU5BQkxFX0FQUExJQ0FUSU9O
X0NBQ0hFX0RZTkFNSUNfRU5UUklFUykgJiYgRU5BQkxFX0FQUExJQ0FUSU9OX0NBQ0hFX0RZTkFN
SUNfRU5UUklFUwotICAgICAgICAvLyBkeW5hbWljIGVudHJpZXMKLSAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZ0xpc3QgaXRlbXM7Ci0gICAgICAgIFtDdXN0b21dIGJvb2xlYW4g
aGFzSXRlbShpbiBET01TdHJpbmcgdXJsKQotICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlv
bik7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgYWRkKGluIERPTVN0cmluZyB1cmkpCi0gICAgICAg
ICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCByZW1vdmUo
aW4gRE9NU3RyaW5nIHVyaSkKLSAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwotI2Vu
ZGlmCi0KICAgICAgICAgLy8gZXZlbnRzCiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVy
IG9uY2hlY2tpbmc7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uZXJyb3I7Cklu
ZGV4OiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9GcmFtZUxv
YWRlci5jcHAJKHJldmlzaW9uIDQ0MjAyKQorKysgbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTgsNiArOTgsMTAgQEAKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2UuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorI2lu
Y2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZC5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUo
U1ZHKQogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTG9jYXRhYmxlLmgi
CkBAIC0zMDIsNiArMzA2LDkgQEAKICNpZiBFTkFCTEUoV01MKQogICAgICwgbV9mb3JjZVJlbG9h
ZFdtbERlY2soZmFsc2UpCiAjZW5kaWYKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisg
ICAgLCBtX2FwcGNhY2hlRnJvbnRlbmQobmV3IEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZCgpKQor
I2VuZGlmCiB7CiB9CiAKQEAgLTMzMSw2ICszMzgsMTAgQEAKICAgICBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5jYW5jZWxQYXJzaW5nKCk7CiAgICAgbV9jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50
ID0gZmFsc2U7CiAgICAgbV9kaWRDYWxsSW1wbGljaXRDbG9zZSA9IHRydWU7CisKKyNpZiBFTkFC
TEUoQVBQTElDQVRJT05fQ0FDSEUpCisgICAgYXBwY2FjaGVGcm9udGVuZCgpLT5pbml0aWFsaXpl
Rm9yRnJhbWUobV9mcmFtZSk7CisjZW5kaWYKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6c2V0RGVm
ZXJzTG9hZGluZyhib29sIGRlZmVycykKQEAgLTE4NDQsNiArMTg1NSwxMSBAQAogICAgICAgICAm
JiAhbV9kb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZSgpCiAgICAgICAgICYmICFtX2Rv
Y3VtZW50TG9hZGVyLT5jYW5kaWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAoKQogI2VuZGlmCisj
aWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGludmVzdGlnYXRpbmcgY2FjaGluZyBmcmFtZXMgdGhhdCBoYXZlIGFuIGFzc29jaWF0ZWQKKyAg
ICAgICAgLy8gYXBwbGljYXRpb24gY2FjaGUuIDxyZGFyOi8vcHJvYmxlbS81OTE3ODk5PiB0cmFj
a3MgdGhhdCB3b3JrLgorICAgICAgICAmJiBhcHBjYWNoZUZyb250ZW5kKCktPmNhbkNhY2hlQ3Vy
cmVudERvY3VtZW50SW5QYWdlQ2FjaGUoKQorI2VuZGlmCiAgICAgICAgICYmIG1fY2xpZW50LT5j
YW5DYWNoZVBhZ2UoKQogICAgICAgICA7CiB9CkBAIC0xOTk0LDYgKzIwMTAsMTAgQEAKICAgICAg
ICAgaWYgKG1fZG9jdW1lbnRMb2FkZXItPmNhbmRpZGF0ZUFwcGxpY2F0aW9uQ2FjaGVHcm91cCgp
KQogICAgICAgICAgICAgeyBQQ0xPRygiICAgLVRoZSBEb2N1bWVudExvYWRlciBoYXMgYSBjYW5k
aWRhdGVBcHBsaWNhdGlvbkNhY2hlR3JvdXAiKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9CiAjZW5k
aWYKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisgICAgICAgIGlmICghYXBwY2FjaGVG
cm9udGVuZCgpLT5jYW5DYWNoZUN1cnJlbnREb2N1bWVudEluUGFnZUNhY2hlKCkpCisgICAgICAg
ICAgICB7IFBDTE9HKCIgICAtVXNpbmcgYXBwbGljYXRpb24gY2FjaGUiKTsgY2Fubm90Q2FjaGUg
PSB0cnVlOyB9CisjZW5kaWYKICAgICAgICAgaWYgKCFtX2NsaWVudC0+Y2FuQ2FjaGVQYWdlKCkp
CiAgICAgICAgICAgICB7IFBDTE9HKCIgICAtVGhlIGNsaWVudCBzYXlzIHRoaXMgZnJhbWUgY2Fu
bm90IGJlIGNhY2hlZCIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KICAgICB9IHdoaWxlIChmYWxz
ZSk7CkBAIC0yODg4LDYgKzI5MDgsOSBAQAogCiAgICAgc2V0RG9jdW1lbnRMb2FkZXIobV9wcm92
aXNpb25hbERvY3VtZW50TG9hZGVyLmdldCgpKTsKICAgICBzZXRQcm92aXNpb25hbERvY3VtZW50
TG9hZGVyKDApOworI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICBzZWxlY3RJbml0
aWFsQXBwbGljYXRpb25DYWNoZSgpOworI2VuZGlmCiAgICAgc2V0U3RhdGUoRnJhbWVTdGF0ZUNv
bW1pdHRlZFBhZ2UpOwogCiAgICAgLy8gSGFuZGxlIGFkZGluZyB0aGUgVVJMIHRvIHRoZSBiYWNr
L2ZvcndhcmQgbGlzdC4KQEAgLTM1NzMsNiArMzU5NiwxMCBAQAogICAgICAgICBlbHNlIGlmIChE
b2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICAgICAgcmVx
dWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKSk7CiAgICAgfQorIAorI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyAgICBhcHBj
YWNoZUZyb250ZW5kKCktPmFkZEV4dHJhRmllbGRzVG9SZXF1ZXN0KHJlcXVlc3QsIG1haW5SZXNv
dXJjZSk7CisjZW5kaWYKIAogICAgIC8vIFRoZSByZW1haW5pbmcgbW9kaWZpY2F0aW9ucyBhcmUg
b25seSBuZWNlc3NhcnkgZm9yIEhUVFAgYW5kIEhUVFBTLgogICAgIGlmICghcmVxdWVzdC51cmwo
KS5pc0VtcHR5KCkgJiYgIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSkKQEAg
LTUyODEsNCArNTMwOCw0NSBAQAogICAgIHJldHVybiB0cnVlOwogfQogCisjaWYgRU5BQkxFKEFQ
UExJQ0FUSU9OX0NBQ0hFKQorCitBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQqIEZyYW1lTG9hZGVy
OjphcHBjYWNoZUZyb250ZW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hcHBjYWNoZUZyb250
ZW5kLmdldCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyOjpzZWxlY3RJbml0aWFsQXBwbGljYXRp
b25DYWNoZSgpCit7CisgICAgY29uc3QgS1VSTCYgZG9jVVJMID0gbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+dXJsKCk7CisgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgZG9jUmVzcG9uc2UgPSBkb2N1
bWVudExvYWRlcigpLT5yZXNwb25zZSgpOworICAgIGFwcGNhY2hlRnJvbnRlbmQoKS0+c2VsZWN0
SW5pdGlhbENhY2hlKGRvY1VSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb2NSZXNwb25zZS5hcHBsaWNhdGlvbkNhY2hlSUQoKSk7Cit9CisKK3ZvaWQgRnJh
bWVMb2FkZXI6OnNlbGVjdEFwcGxpY2F0aW9uQ2FjaGVXaXRob3V0TWFuaWZlc3QoKQoreworICAg
IGNvbnN0IEtVUkwmIGRvY1VSTCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpOworICAgIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIGRvY1Jlc3BvbnNlID0gZG9jdW1lbnRMb2FkZXIoKS0+cmVz
cG9uc2UoKTsKKyAgICBhcHBjYWNoZUZyb250ZW5kKCktPnNlbGVjdENhY2hlV2l0aG91dE1hbmlm
ZXN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NVUkwsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY1Jlc3BvbnNlLmFwcGxp
Y2F0aW9uQ2FjaGVJRCgpKTsKK30KKwordm9pZCBGcmFtZUxvYWRlcjo6c2VsZWN0QXBwbGljYXRp
b25DYWNoZVdpdGhNYW5pZmVzdChjb25zdCBLVVJMJiBtYW5pZmVzdFVSTCkKK3sKKyAgICBjb25z
dCBLVVJMJiBkb2NVUkwgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKTsKKyAgICBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiBkb2NSZXNwb25zZSA9IGRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNl
KCk7CisgICAgaWYgKCFhcHBjYWNoZUZyb250ZW5kKCktPnNlbGVjdENhY2hlV2l0aE1hbmlmZXN0
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NVUkwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY1Jlc3BvbnNlLmFwcGxpY2F0
aW9uQ2FjaGVJRCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b2NSZXNwb25zZS5tYW5pZmVzdFVSTCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYW5pZmVzdFVSTCkpIHsKKyAgICAgICAgLy8gSXQncyBhIGZvcmVpZ24gZW50
cnksIHJlc3RhcnQgdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBmcm9tIHRoZSB0b3Agb2YgdGhlIG5h
dmlnYXRpb24gYWxnb3JpdGhtLgorICAgICAgICAvLyBUaGUgbmF2aWdhdGlvbiB3aWxsIG5vdCBy
ZXN1bHQgaW4gdGhlIHNhbWUgcmVzb3VyY2UgYmVpbmcgbG9hZGVkLCBiZWNhdXNlICJmb3JlaWdu
IiBlbnRyaWVzIGFyZQorICAgICAgICAvLyBuZXZlciBwaWNrZWQgZHVyaW5nIG5hdmlnYXRpb24u
CisgICAgICAgIHNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoZG9jVVJMLCByZWZlcnJlcigpLCB0cnVl
KTsKKyAgICB9Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogbG9h
ZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJl
dmlzaW9uIDQ0MjAyKQorKysgbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDYgKzcwLDEwIEBACiAgICAgY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKICAgICBjbGFz
cyBXaWRnZXQ7CiAKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisgICAgY2xhc3MgQXBw
bGljYXRpb25DYWNoZUZyb250ZW5kOworI2VuZGlmCisKICAgICBzdHJ1Y3QgRnJhbWVMb2FkUmVx
dWVzdDsKICAgICBzdHJ1Y3QgU2NoZWR1bGVkUmVkaXJlY3Rpb247CiAgICAgc3RydWN0IFdpbmRv
d0ZlYXR1cmVzOwpAQCAtMjQzLDYgKzI0NywxMyBAQAogICAgICAgICB2b2lkIGxvYWRlZFJlc291
cmNlRnJvbU1lbW9yeUNhY2hlKGNvbnN0IENhY2hlZFJlc291cmNlKik7CiAgICAgICAgIHZvaWQg
dGVsbENsaWVudEFib3V0UGFzdE1lbW9yeUNhY2hlTG9hZHMoKTsKIAorI2lmIEVOQUJMRShBUFBM
SUNBVElPTl9DQUNIRSkKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kKiBhcHBjYWNo
ZUZyb250ZW5kKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2VsZWN0SW5pdGlhbEFwcGxpY2F0aW9u
Q2FjaGUoKTsKKyAgICAgICAgdm9pZCBzZWxlY3RBcHBsaWNhdGlvbkNhY2hlV2l0aG91dE1hbmlm
ZXN0KCk7CisgICAgICAgIHZvaWQgc2VsZWN0QXBwbGljYXRpb25DYWNoZVdpdGhNYW5pZmVzdChj
b25zdCBLVVJMJiBtYW5pZmVzdFVSTCk7CisjZW5kaWYKKwogICAgICAgICB2b2lkIGNoZWNrTG9h
ZENvbXBsZXRlKCk7CiAgICAgICAgIHZvaWQgZGV0YWNoRnJvbVBhcmVudCgpOwogCkBAIC02MzYs
NiArNjQ3LDEwIEBACiAjaWYgRU5BQkxFKFdNTCkKICAgICAgICAgYm9vbCBtX2ZvcmNlUmVsb2Fk
V21sRGVjazsKICNlbmRpZgorCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorICAgICAg
ICBPd25QdHI8QXBwbGljYXRpb25DYWNoZUZyb250ZW5kPiBtX2FwcGNhY2hlRnJvbnRlbmQ7Cisj
ZW5kaWYKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBiaW5kaW5ncy9q
cy9KU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdz
L2pzL0pTRE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAJKHJldmlzaW9uIDQ0MjAyKQorKysg
YmluZGluZ3MvanMvSlNET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTRE9N
QXBwbGljYXRpb25DYWNoZS5oIgogCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9O
UykKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSB8fCBFTkFCTEUoQVBQTElD
QVRJT05fQ0FDSEUpCiAKICNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKICNpbmNsdWRlICJET01B
cHBsaWNhdGlvbkNhY2hlLmgiCkBAIC02NCw3ICs2NCw3IEBACiAgICAgfQogfQogCi0jaWYgRU5B
QkxFKEFQUExJQ0FUSU9OX0NBQ0hFX0RZTkFNSUNfRU5UUklFUykKKyNpZiBFTkFCTEUoT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKSAmJiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEVfRFlOQU1JQ19F
TlRSSUVTKQogCiBKU1ZhbHVlIEpTRE9NQXBwbGljYXRpb25DYWNoZTo6aGFzSXRlbShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CkBAIC0xMDUsNyArMTA1LDcgQEAKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotI2VuZGlmIC8vIEVOQUJMRShBUFBMSUNBVElP
Tl9DQUNIRV9EWU5BTUlDX0VOVFJJRVMpCisjZW5kaWYgLy8gRU5BQkxFKE9GRkxJTkVfV0VCX0FQ
UExJQ0FUSU9OUykgJiYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFX0RZTkFNSUNfRU5UUklFUykK
IAogSlNWYWx1ZSBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewpAQCAtMTMzLDQgKzEzMyw0IEBACiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShPRkZMSU5FX1dFQl9B
UFBMSUNBVElPTlMpCisjZW5kaWYgLy8gRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykg
fHwgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQpJbmRleDogYmluZGluZ3MvanMvSlNFdmVudFRh
cmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAJKHJl
dmlzaW9uIDQ0MjAyKQorKysgYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgogI2lu
Y2x1ZGUgIlhNTEh0dHBSZXF1ZXN0VXBsb2FkLmgiCiAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJf
QVBQTElDQVRJT05TKQorI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpIHx8IEVO
QUJMRShBUFBMSUNBVElPTl9DQUNIRSkKICNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hlLmgi
CiAjaW5jbHVkZSAiSlNET01BcHBsaWNhdGlvbkNhY2hlLmgiCiAjZW5kaWYKQEAgLTg0LDcgKzg0
LDcgQEAKICAgICBpZiAoWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHVwbG9hZCA9IHRhcmdldC0+dG9Y
TUxIdHRwUmVxdWVzdFVwbG9hZCgpKQogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCB1cGxvYWQp
OwogCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZG
TElORV9XRUJfQVBQTElDQVRJT05TKSB8fCBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiAgICAg
aWYgKERPTUFwcGxpY2F0aW9uQ2FjaGUqIGNhY2hlID0gdGFyZ2V0LT50b0RPTUFwcGxpY2F0aW9u
Q2FjaGUoKSkKICAgICAgICAgLy8gRE9NQXBwbGljYXRpb25DYWNoZSBpcyBhbHdheXMgY3JlYXRl
ZCB2aWEgSlMsIHNvIHdlIGRvbid0IG5lZWQgdG8gdXNlIGNhY2hlRE9NT2JqZWN0KCkgaGVyZS4K
ICAgICAgICAgcmV0dXJuIGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBjYWNoZSk7CkBAIC0xMTksNyArMTE5LDcgQEAKICAgICBpZiAodmFsdWUuaXNPYmplY3Qo
JkpTRE9NV2luZG93U2hlbGw6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxK
U0RPTVdpbmRvd1NoZWxsKj4oYXNPYmplY3QodmFsdWUpKS0+aW1wbCgpOwogCi0jaWYgRU5BQkxF
KE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElD
QVRJT05TKSB8fCBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCiAgICAgQ09OVkVSVF9UT19FVkVO
VF9UQVJHRVQoRE9NQXBwbGljYXRpb25DYWNoZSkKICNlbmRpZgogCkluZGV4OiBiaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiA0NDIwMikKKysrIGJpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQAogICAgIG1hcmtE
T01PYmplY3RXcmFwcGVyKGdsb2JhbERhdGEsIGltcGwoKS0+b3B0aW9uYWxTZXNzaW9uU3RvcmFn
ZSgpKTsKICAgICBtYXJrRE9NT2JqZWN0V3JhcHBlcihnbG9iYWxEYXRhLCBpbXBsKCktPm9wdGlv
bmFsTG9jYWxTdG9yYWdlKCkpOwogI2VuZGlmCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSB8fCBFTkFCTEUo
QVBQTElDQVRJT05fQ0FDSEUpCiAgICAgbWFya0RPTU9iamVjdFdyYXBwZXIoZ2xvYmFsRGF0YSwg
aW1wbCgpLT5vcHRpb25hbEFwcGxpY2F0aW9uQ2FjaGUoKSk7CiAjZW5kaWYKIH0KSW5kZXg6IGxv
YWRlci9hcHBjYWNoZTIvQXBwbGljYXRpb25DYWNoZUJyaWRnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
bG9hZGVyL2FwcGNhY2hlMi9BcHBsaWNhdGlvbkNhY2hlQnJpZGdlLmNwcAkocmV2aXNpb24gMCkK
KysrIGxvYWRlci9hcHBjYWNoZTIvQXBwbGljYXRpb25DYWNoZUJyaWRnZS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
cHBsaWNhdGlvbkNhY2hlQnJpZGdlLmgiCisKKyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUp
CisKKyNpbmNsdWRlICJNYWluVGhyZWFkLmgiCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUJy
aWRnZUltcGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBzdGF0aWMgCitBcHBsaWNh
dGlvbkNhY2hlQnJpZGdlKiBBcHBsaWNhdGlvbkNhY2hlQnJpZGdlOjptX2luc3RhbmNlOworCisv
LyBzdGF0aWMKK3ZvaWQgQXBwbGljYXRpb25DYWNoZUJyaWRnZTo6c2V0SW5zdGFuY2UoQXBwbGlj
YXRpb25DYWNoZUJyaWRnZSogYnJpZGdlKQoreworICAgIEFTU0VSVCghbV9pbnN0YW5jZSk7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgCisgICAgbV9pbnN0YW5jZSA9IGJyaWRnZTsKK30K
KworLy8gc3RhdGljCitBcHBsaWNhdGlvbkNhY2hlQnJpZGdlKiBBcHBsaWNhdGlvbkNhY2hlQnJp
ZGdlOjppbnN0YW5jZSgpCit7CisgICAgaWYgKCFtX2luc3RhbmNlKQorICAgICAgICBBcHBsaWNh
dGlvbkNhY2hlQnJpZGdlSW1wbDo6c3RhcnR1cCgpOworICAgIHJldHVybiBtX2luc3RhbmNlOwor
fQorCit9ICAvLyBXZWJDb3JlCisKKyNlbmRpZiAgLy8gRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hF
KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogbG9hZGVyXGFwcGNhY2hlMlxBcHBsaWNhdGlvbkNhY2hl
QnJpZGdlLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4
OiBsb2FkZXIvYXBwY2FjaGUyL0FwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VDbGllbnRJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBsb2FkZXIvYXBwY2FjaGUyL0FwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VDbGll
bnRJbXBsLmNwcAkocmV2aXNpb24gMCkKKysrIGxvYWRlci9hcHBjYWNoZTIvQXBwbGljYXRpb25D
YWNoZUJyaWRnZUNsaWVudEltcGwuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc5IEBACisv
KgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUJyaWRnZUNs
aWVudEltcGwuaCIKKworI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKworI2luY2x1ZGUg
IkFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Zv
aWQgQXBwbGljYXRpb25DYWNoZUJyaWRnZUNsaWVudEltcGw6OnNlbGVjdENhY2hlQ29tcGxldGUo
Y29uc3QgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCAmY29udGV4dElELAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
Y2FjaGVTZXF1ZW5jZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZVN0YXR1cyBzdGF0dXMpCit7
CisgICAgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kKiBmcm9udGVuZCA9IEFwcGxpY2F0aW9uQ2Fj
aGVGcm9udGVuZDo6ZnJvbUNvbnRleHRJRChjb250ZXh0SUQpOworICAgIGlmIChmcm9udGVuZCAm
JiAoY2FjaGVTZXF1ZW5jZU51bWJlciA9PSBmcm9udGVuZC0+Y2FjaGVTZXF1ZW5jZU51bWJlcigp
KSkKKyAgICAgICAgZnJvbnRlbmQtPm5vdGlmeVNlbGVjdENvbXBsZXRlKHN0YXR1cyk7Cit9CisK
K3ZvaWQgQXBwbGljYXRpb25DYWNoZUJyaWRnZUNsaWVudEltcGw6Om5vdGlmeVN0YXR1c0NoYW5n
ZWQoY29uc3QgVmVjdG9yPEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQ+JiBjb250ZXh0
SURzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgY2FjaGVTZXF1ZW5jZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZVN0YXR1
cyBzdGF0dXMpICAKK3sKKyAgICBWZWN0b3I8R2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJ
RD46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0gY29udGV4dElEcy5iZWdpbigpOworICAgIFZlY3Rv
cjxHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
Y29udGV4dElEcy5lbmQoKTsKKyAgICBWZWN0b3I8R2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRl
eHRJRD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXI7CisgICAgZm9yIChpdGVyID0gYmVnaW47IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgQXBwbGljYXRpb25DYWNoZUZyb250ZW5kKiBmcm9u
dGVuZCA9IEFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZDo6ZnJvbUNvbnRleHRJRCgqaXRlcik7Cisg
ICAgICAgIGlmIChmcm9udGVuZCAmJiAoY2FjaGVTZXF1ZW5jZU51bWJlciA9PSBmcm9udGVuZC0+
Y2FjaGVTZXF1ZW5jZU51bWJlcigpKSkKKyAgICAgICAgICAgIGZyb250ZW5kLT5ub3RpZnlTdGF0
dXNDaGFuZ2VkKHN0YXR1cyk7CisgICAgfQorfQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVCcmlk
Z2VDbGllbnRJbXBsOjpub3RpZnlFdmVudExpc3RlbmVyKGNvbnN0IFZlY3RvcjxHbG9iYWxBcHBs
aWNhdGlvbkNhY2hlQ29udGV4dElEPiYgY29udGV4dElEcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNhY2hlU2VxdWVuY2VO
dW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVFdmVudFR5cGUgZXZlbnRUeXBlKQoreworICAgIFZl
Y3RvcjxHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEPjo6Y29uc3RfaXRlcmF0b3IgYmVn
aW4gPSBjb250ZXh0SURzLmJlZ2luKCk7CisgICAgVmVjdG9yPEdsb2JhbEFwcGxpY2F0aW9uQ2Fj
aGVDb250ZXh0SUQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBjb250ZXh0SURzLmVuZCgpOworICAg
IFZlY3RvcjxHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEPjo6Y29uc3RfaXRlcmF0b3Ig
aXRlcjsKKyAgICBmb3IgKGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAg
ICAgICBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQqIGZyb250ZW5kID0gQXBwbGljYXRpb25DYWNo
ZUZyb250ZW5kOjpmcm9tQ29udGV4dElEKCppdGVyKTsKKyAgICAgICAgaWYgKGZyb250ZW5kICYm
IChjYWNoZVNlcXVlbmNlTnVtYmVyID09IGZyb250ZW5kLT5jYWNoZVNlcXVlbmNlTnVtYmVyKCkp
KQorICAgICAgICAgICAgZnJvbnRlbmQtPm5vdGlmeUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKTsK
KyAgICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gRU5BQkxF
KEFQUExJQ0FUSU9OX0NBQ0hFKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogbG9hZGVyXGFwcGNhY2hl
MlxBcHBsaWNhdGlvbkNhY2hlQnJpZGdlQ2xpZW50SW1wbC5jcHAKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogbG9hZGVyL2FwcGNhY2hlMi9BcHBsaWNhdGlv
bkNhY2hlQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL2FwcGNhY2hlMi9BcHBsaWNhdGlv
bkNhY2hlQnJpZGdlLmgJKHJldmlzaW9uIDApCisrKyBsb2FkZXIvYXBwY2FjaGUyL0FwcGxpY2F0
aW9uQ2FjaGVCcmlkZ2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQXBwbGljYXRpb25DYWNoZUJyaWRnZV9oCisjZGVmaW5lIEFwcGxpY2F0aW9uQ2FjaGVCcmlk
Z2VfaAorCisjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorCisjaW5jbHVkZSAiQXBwbGlj
YXRpb25DYWNoZUNvbW1vbi5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlIDx3dGYvTWVz
c2FnZVF1ZXVlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIC8vIFRoaXMgaW50ZXJm
YWNlIGlzIHVzZWQgdG8gYnkgdGhlIGJyaWRnZSB0byBjYWxsIHRoZSBmcm9udGVuZC4KKyAgICBj
bGFzcyBBcHBsaWNhdGlvbkNhY2hlQnJpZGdlQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IHZpcnR1YWwgfkFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VDbGllbnQoKSB7fQorCisgICAgICAgIC8v
IENvbXBsZXRpb24gY2FsbGJhY2tzIGRlbGl2ZXJlZCBpbiByZXNwb25zZSB0byBvbmUgb2YgdGhl
IHNlbGVjdCBjYWNoZSBjYWxscworICAgICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0Q2FjaGVDb21w
bGV0ZShjb25zdCBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEICZjb250ZXh0SUQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYWNoZVNlcXVlbmNl
TnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNh
dGlvbkNhY2hlU3RhdHVzIHN0YXR1cykgPSAwOworCisgICAgICAgIC8vIEV2ZW50IHJlbGF0ZWQg
Y2FsbGJhY2tzIHRoYXQganVzdCBoYXBwZW4sIG5vdCBpbiBkaXJlY3QgcmVzcG9uc2UKKyAgICAg
ICAgLy8gdG8gYW4gYXN5bmMgbWV0aG9kIGNhbGwuIFRoZXNlIGFyZSBicm9hZGNhc3QgdG8gYSBj
b2xsZWN0aW9uIG9mIGNvbnRleHRzLgorICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3RhdHVz
Q2hhbmdlZChjb25zdCBWZWN0b3I8R2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRD4mIGNv
bnRleHRJRHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBj
YWNoZVNlcXVlbmNlTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcHBsaWNhdGlvbkNhY2hlU3RhdHVzIHN0YXR1c1ZhbHVlKSAgPSAwOworICAgICAgICB2
aXJ0dWFsIHZvaWQgbm90aWZ5RXZlbnRMaXN0ZW5lcihjb25zdCBWZWN0b3I8R2xvYmFsQXBwbGlj
YXRpb25DYWNoZUNvbnRleHRJRD4mIGNvbnRleHRJRHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBjYWNoZVNlcXVlbmNlTnVtYmVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlRXZlbnRUeXBlIGV2
ZW50VHlwZSkgPSAwOworICAgIH07CisKKyAgICAvLyBUaGUgY2xhc3MgaXMgdXNlZCBieSB0aGUg
ZnJvbnRlbmQgdG8gY2FsbCB0aGUgYmFja2VuZC4KKyAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hl
QnJpZGdlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2UoQXBw
bGljYXRpb25DYWNoZUJyaWRnZUNsaWVudCogY2xpZW50KQorICAgICAgICAgICAgOiBtX2NsaWVu
dChjbGllbnQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgfkFwcGxp
Y2F0aW9uQ2FjaGVCcmlkZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9pbnN0YW5j
ZSA9PSB0aGlzKQorICAgICAgICAgICAgICAgIHNldEluc3RhbmNlKDApOworICAgICAgICB9CisK
KyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBhc3luYyBtZXRob2RzIHNjaGVkdWxlIHRhc2tzIHRv
IGJlIHBlcmZvcm1lZCBpbiB0aGUKKyAgICAgICAgLy8gYmFja2VuZCBhbmQgcmV0dXJuIGltbWVk
aWF0ZWx5LgorCisgICAgICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQ29udGV4dEFzeW5jKGNv
bnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQgJmNvbnRleHRJRCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZUNvbnRl
eHRUeXBlIGNvbnRleHRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEJiBwYXJlbnRDb250
ZXh0SUQpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVuaW5pdGlhbGl6ZUNvbnRleHRBc3lu
Yyhjb25zdCBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEICZjb250ZXh0SUQpID0gMDsK
KworICAgICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0SW5pdGlhbENhY2hlQXN5bmMoY29uc3QgR2xv
YmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCAmY29udGV4dElELAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNhY2hlU2VxdWVuY2VOdW1iZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBk
b2N1bWVudFVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFwcGxpY2F0aW9uQ2FjaGVJRCBjYWNoZURvY3VtZW50V2FzTG9hZGVkRnJvbSkgPSAwOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0Q2FjaGVXaXRob3V0TWFuaWZlc3RBc3luYyhjb25zdCBH
bG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEICZjb250ZXh0SUQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYWNoZVNlcXVlbmNl
TnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBLVVJMJiBkb2N1bWVudFVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZUlEIGNhY2hlRG9jdW1l
bnRXYXNMb2FkZWRGcm9tKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RDYWNoZVdp
dGhNYW5pZmVzdEFzeW5jKGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQgJmNv
bnRleHRJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGNhY2hlU2VxdWVuY2VOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hl
SUQgY2FjaGVEb2N1bWVudFdhc0xvYWRlZEZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIG1hbmlmZXN0VVJMb2ZDYWNoZURv
Y3VtZW50V2FzTG9hZGVkRnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgbWFuaWZlc3RVUkwpID0gMDsKKworICAgICAgICAv
LyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgc2NoZWR1bGUgdGFza3MgdG8gYmUgcGVyZm9ybWVkIGlu
IHRoZSBiYWNrZW5kCisgICAgICAgIC8vIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uIHByaW9yIHRv
IHJldHVybmluZy4KKworICAgICAgICB2aXJ0dWFsIEFwcGxpY2F0aW9uQ2FjaGVTdGF0dXMgc3Rh
dHVzKGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQgJmNvbnRleHRJRCkgPSAw
OworICAgICAgICB2aXJ0dWFsIGJvb2wgc3RhcnRVcGRhdGUoY29uc3QgR2xvYmFsQXBwbGljYXRp
b25DYWNoZUNvbnRleHRJRCAmY29udGV4dElEKSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBz
d2FwQ2FjaGUoY29uc3QgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCAmY29udGV4dElE
KSA9IDA7CisKKyAgICAgICAgLy8gVGhlIGhvc3QgYnJvd3NlciBtYXkgb3ZlcnJpZGUgdGhlIGRl
ZmF1bHQgaW1wbGVtZW50YXRpb24gYnkgY3JlYXRpbmcKKyAgICAgICAgLy8gYSBjb25jcmV0ZSBp
bXBsIGluIGl0cyBzdGFydHVwIHNlcXVlbmNlIGFuZCBjYWxsaW5nIHNldEluc3RhbmNlIHByaW9y
CisgICAgICAgIC8vIHRvIGNvbnN0cnVjdGluZyBhbnkgQXBwbGljYXRpb25DYWNoZUZyb250ZW5k
IGluc3RhbmNlLiBPdGhlcndpc2UsCisgICAgICAgIC8vIG9uIHRoZSBmaXJzdCBjYWxsIHRvIGlu
c3RhbmNlKCksIHRoZSBkZWZhdWx0IEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJbXBsCisgICAgICAg
IC8vIHdpbGwgYmUgc3RhcnRlZCB1cC4KKworICAgICAgICBzdGF0aWMgdm9pZCBzZXRJbnN0YW5j
ZShBcHBsaWNhdGlvbkNhY2hlQnJpZGdlKiBicmlkZ2UpOworICAgICAgICBzdGF0aWMgQXBwbGlj
YXRpb25DYWNoZUJyaWRnZSogaW5zdGFuY2UoKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAg
QXBwbGljYXRpb25DYWNoZUJyaWRnZUNsaWVudCogbV9jbGllbnQ7CisgICAgICAgIHN0YXRpYyBB
cHBsaWNhdGlvbkNhY2hlQnJpZGdlKiBtX2luc3RhbmNlOworICAgIH07CisKK30gIC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gRU5BQkxFKEFQUExJQ0FUSU9OX0NBQ0hFKQorI2Vu
ZGlmICAvLyBBcHBsaWNhdGlvbkNhY2hlQnJpZGdlX2gKClByb3BlcnR5IGNoYW5nZXMgb246IGxv
YWRlclxhcHBjYWNoZTJcQXBwbGljYXRpb25DYWNoZUJyaWRnZS5oCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IGxvYWRlci9hcHBjYWNoZTIvQXBwbGljYXRp
b25DYWNoZUJyaWRnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIvYXBwY2FjaGUy
L0FwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VDbGllbnRJbXBsLmgJKHJldmlzaW9uIDApCisrKyBsb2Fk
ZXIvYXBwY2FjaGUyL0FwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VDbGllbnRJbXBsLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXBwbGljYXRpb25DYWNoZUJyaWRnZUNs
aWVudEltcGxfaAorI2RlZmluZSBBcHBsaWNhdGlvbkNhY2hlQnJpZGdlQ2xpZW50SW1wbF9oCisK
KyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisKKyNpbmNsdWRlICJBcHBsaWNhdGlvbkNh
Y2hlQnJpZGdlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKyAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmQ7CisKKyAgICAvLyBBbiBp
bXBsIHRoYXQgcGx1bWJzIGNhbGxiYWNrcyBmcm9tIHRoZSBicmlkZ2UgYmFjayB0byBmcm9udGVu
ZCBpbnN0YW5jZXMKKyAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlQnJpZGdlQ2xpZW50SW1wbCA6
IHB1YmxpYyBBcHBsaWNhdGlvbkNhY2hlQnJpZGdlQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIC8vIENvbXBsZXRpb24gY2FsbGJhY2tzIGRlbGl2ZXJlZCBpbiByZXNwb25zZSB0byBvbmUg
b2YgdGhlIHNlbGVjdCBjYWNoZSBjYWxscworICAgICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0Q2Fj
aGVDb21wbGV0ZShjb25zdCBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEICZjb250ZXh0
SUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYWNoZVNl
cXVlbmNlTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
cHBsaWNhdGlvbkNhY2hlU3RhdHVzIHN0YXR1cyk7CisKKyAgICAgICAgLy8gRXZlbnQgcmVsYXRl
ZCBjYWxsYmFja3MgdGhhdCBqdXN0IGhhcHBlbiwgbm90IGluIGRpcmVjdCByZXNwb25zZQorICAg
ICAgICAvLyB0byBhbiBhc3luYyBtZXRob2QgY2FsbC4gVGhlc2UgYXJlIGJyb2FkY2FzdCB0byBh
IGNvbGxlY3Rpb24gb2YgY29udGV4dHMuCisgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTdGF0
dXNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEPiYg
Y29udGV4dElEcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGNhY2hlU2VxdWVuY2VOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVTdGF0dXMgc3RhdHVzVmFsdWUpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5RXZlbnRMaXN0ZW5lcihjb25zdCBWZWN0b3I8R2xvYmFsQXBwbGljYXRp
b25DYWNoZUNvbnRleHRJRD4mIGNvbnRleHRJRHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBjYWNoZVNlcXVlbmNlTnVtYmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlRXZlbnRUeXBlIGV2ZW50
VHlwZSk7CisgICAgfTsKKworCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgIC8v
IEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyNlbmRpZiAgLy8gQXBwbGljYXRpb25DYWNoZUJy
aWRnZUNsaWVudEltcGxfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogbG9hZGVyXGFwcGNhY2hlMlxB
cHBsaWNhdGlvbkNhY2hlQnJpZGdlQ2xpZW50SW1wbC5oCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
b2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IGxvYWRlci9hcHBjYWNoZTIvQXBwbGljYXRpb25DYWNo
ZUJyaWRnZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9hcHBjYWNoZTIvQXBwbGljYXRp
b25DYWNoZUJyaWRnZUltcGwuY3BwCShyZXZpc2lvbiAwKQorKysgbG9hZGVyL2FwcGNhY2hlMi9B
cHBsaWNhdGlvbkNhY2hlQnJpZGdlSW1wbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQ0
IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUJy
aWRnZUltcGwuaCIKKworI2lmIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKworI2luY2x1ZGUg
IkFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiTWFpblRocmVh
ZC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gc3RhdGljCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJbXBsOjpzdGFydHVwKCkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9pbnN0YW5jZSk7
CisgICAgc2V0SW5zdGFuY2UobmV3IEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJbXBsKG5ldyBBcHBs
aWNhdGlvbkNhY2hlQnJpZGdlQ2xpZW50SW1wbCkpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgQXBw
bGljYXRpb25DYWNoZUJyaWRnZUltcGw6OnNodXRkb3duKCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJbXBsKiBpbnN0YW5jZSA9IHN0
YXRpY19jYXN0PEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJbXBsKj4obV9pbnN0YW5jZSk7CisgICAg
aWYgKGluc3RhbmNlKSB7CisgICAgICAgIGRlbGV0ZSBpbnN0YW5jZS0+bV9jbGllbnQ7CisgICAg
ICAgIGRlbGV0ZSBpbnN0YW5jZTsKKyAgICB9Cit9CisKK0FwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJ
bXBsOjpBcHBsaWNhdGlvbkNhY2hlQnJpZGdlSW1wbChBcHBsaWNhdGlvbkNhY2hlQnJpZGdlQ2xp
ZW50ICpjbGllbnQpCisgICAgOiBBcHBsaWNhdGlvbkNhY2hlQnJpZGdlKGNsaWVudCkKK3sKKyAg
ICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKGFwcGNhY2hlVGhyZWFkU3RhcnQsIHRoaXMsICJX
ZWJDb3JlOiBBcHBsaWNhdGlvbkNhY2hlIik7Cit9CisKK0FwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJ
bXBsOjp+QXBwbGljYXRpb25DYWNoZUJyaWRnZUltcGwoKQoreworICAgIG1fcXVldWUua2lsbCgp
OworICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSUQsIDApOworfQorCit2b2lk
IEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJbXBsOjpwb3N0VGFza1RvQmFja2VuZFRocmVhZChQYXNz
UmVmUHRyPFRhc2s+IHRhc2spCit7CisgICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1f
dGhyZWFkSUQpOworICAgIG1fcXVldWUuYXBwZW5kKHRhc2spOworfQorCit2b2lkIEFwcGxpY2F0
aW9uQ2FjaGVCcmlkZ2VJbXBsOjpwb3N0VGFza1RvRnJvbnRlbmRUaHJlYWQoUGFzc1JlZlB0cjxU
YXNrPiB0YXNrKQoreworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90aHJlYWRJRCk7
CisgICAgbV9mcm9udGVuZFF1ZXVlLmFwcGVuZCh0YXNrKTsKKyAgICBjYWxsT25NYWluVGhyZWFk
KHBlcmZvcm1Gcm9udGVuZFRocmVhZFRhc2ssIHRoaXMpOworfQorCisvLyBzdGF0aWMKK3ZvaWQg
QXBwbGljYXRpb25DYWNoZUJyaWRnZUltcGw6OnBlcmZvcm1Gcm9udGVuZFRocmVhZFRhc2sodm9p
ZCogc2VsZikKK3sKKyAgICBBcHBsaWNhdGlvbkNhY2hlQnJpZGdlSW1wbCogdGhpc1B0ciA9IHN0
YXRpY19jYXN0PEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJbXBsKj4oc2VsZik7CisgICAgUmVmUHRy
PFRhc2s+IHRhc2s7CisgICAgaWYgKHRoaXNQdHItPm1fZnJvbnRlbmRRdWV1ZS50cnlHZXRNZXNz
YWdlKHRhc2spKQorICAgICAgICB0YXNrLT5wZXJmb3JtVGFzayh0aGlzUHRyKTsKK30KKworLy8g
c3RhdGljCit2b2lkKiBBcHBsaWNhdGlvbkNhY2hlQnJpZGdlSW1wbDo6YXBwY2FjaGVUaHJlYWRT
dGFydCh2b2lkKiBzZWxmKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxBcHBsaWNhdGlvbkNh
Y2hlQnJpZGdlSW1wbCo+KHNlbGYpLT5hcHBjYWNoZVRocmVhZCgpOworfQorCit2b2lkKiBBcHBs
aWNhdGlvbkNhY2hlQnJpZGdlSW1wbDo6YXBwY2FjaGVUaHJlYWQoKQoreworICAgIHdoaWxlICh0
cnVlKSB7CisgICAgICAgIFJlZlB0cjxUYXNrPiB0YXNrOworICAgICAgICBpZiAoIW1fcXVldWUu
d2FpdEZvck1lc3NhZ2UodGFzaykpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdGFzay0+
cGVyZm9ybVRhc2sodGhpcyk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lkIEFwcGxp
Y2F0aW9uQ2FjaGVCcmlkZ2VJbXBsOjppbml0aWFsaXplQ29udGV4dEFzeW5jKGNvbnN0IEdsb2Jh
bEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQgJmNvbnRleHRJRCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hl
Q29udGV4dFR5cGUgY29udGV4dFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNv
bnRleHRJRCYgcGFyZW50Q29udGV4dElEKQoreworICAgIHBvc3RUYXNrVG9CYWNrZW5kVGhyZWFk
KEluaXRhbGlhemVDb250ZXh0VGFzazo6Y3JlYXRlKGNvbnRleHRJRCwgY29udGV4dFR5cGUsIHBh
cmVudENvbnRleHRJRCkpOworfQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJbXBsOjp1
bmluaXRpYWxpemVDb250ZXh0QXN5bmMoY29uc3QgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRl
eHRJRCAmY29udGV4dElEKQoreworICAgIHBvc3RUYXNrVG9CYWNrZW5kVGhyZWFkKFVuaW5pdGlh
bGl6ZUNvbnRleHRUYXNrOjpjcmVhdGUoY29udGV4dElEKSk7Cit9CisKK3ZvaWQgQXBwbGljYXRp
b25DYWNoZUJyaWRnZUltcGw6OnNlbGVjdEluaXRpYWxDYWNoZUFzeW5jKGNvbnN0IEdsb2JhbEFw
cGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQgJmNvbnRleHRJRCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNlcXVlbmNlTnVtYmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBLVVJMJiBkb2N1bWVudFVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZUlEIGNhY2hl
RG9jdW1lbnRXYXNMb2FkZWRGcm9tKQoreworICAgIHBvc3RUYXNrVG9CYWNrZW5kVGhyZWFkKFNl
bGVjdENhY2hlVGFzazo6Y3JlYXRlKGNvbnRleHRJRCwgc2VxdWVuY2VOdW1iZXIpKTsKK30KKwor
dm9pZCBBcHBsaWNhdGlvbkNhY2hlQnJpZGdlSW1wbDo6c2VsZWN0Q2FjaGVXaXRob3V0TWFuaWZl
c3RBc3luYyhjb25zdCBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEICZjb250ZXh0SUQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHNlcXVlbmNlTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIGRv
Y3VtZW50VVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVJRCBjYWNoZURvY3VtZW50V2Fz
TG9hZGVkRnJvbSkKK3sKKyAgICBwb3N0VGFza1RvQmFja2VuZFRocmVhZChTZWxlY3RDYWNoZVRh
c2s6OmNyZWF0ZShjb250ZXh0SUQsIHNlcXVlbmNlTnVtYmVyKSk7Cit9CisKK3ZvaWQgQXBwbGlj
YXRpb25DYWNoZUJyaWRnZUltcGw6OnNlbGVjdENhY2hlV2l0aE1hbmlmZXN0QXN5bmMoY29uc3Qg
R2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCAmY29udGV4dElELAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBz
ZXF1ZW5jZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBkb2N1bWVudFVSTCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
cHBsaWNhdGlvbkNhY2hlSUQgY2FjaGVEb2N1bWVudFdhc0xvYWRlZEZyb20sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgS1VSTCYgbWFuaWZlc3RVUkxvZkNhY2hlRG9jdW1lbnRXYXNMb2FkZWRGcm9tLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEtVUkwmIG1hbmlmZXN0VVJMKQoreworICAgIHBvc3RUYXNrVG9CYWNrZW5kVGhyZWFk
KFNlbGVjdENhY2hlVGFzazo6Y3JlYXRlKGNvbnRleHRJRCwgc2VxdWVuY2VOdW1iZXIpKTsKK30K
KworQXBwbGljYXRpb25DYWNoZVN0YXR1cyBBcHBsaWNhdGlvbkNhY2hlQnJpZGdlSW1wbDo6c3Rh
dHVzKGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQgJmNvbnRleHRJRCkKK3sK
KyAgICBSZWZQdHI8R2V0U3RhdHVzVGFzaz4gdGFzayA9IEdldFN0YXR1c1Rhc2s6OmNyZWF0ZShj
b250ZXh0SUQpOworICAgIHBvc3RUYXNrVG9CYWNrZW5kVGhyZWFkKHRhc2spOworICAgIHRhc2st
PndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgcmV0dXJuIHRhc2stPm1fc3RhdHVzOworfQorCiti
b29sIEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJbXBsOjpzdGFydFVwZGF0ZShjb25zdCBHbG9iYWxB
cHBsaWNhdGlvbkNhY2hlQ29udGV4dElEICZjb250ZXh0SUQpCit7CisgICAgQVNTRVJUKCFtX3F1
ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOworICAgIFJlZlB0cjxTdGFydFVwZGF0ZVRhc2s+
IHRhc2sgPSBTdGFydFVwZGF0ZVRhc2s6OmNyZWF0ZShjb250ZXh0SUQpOworICAgIHBvc3RUYXNr
VG9CYWNrZW5kVGhyZWFkKHRhc2spOworICAgIHRhc2stPndhaXRGb3JDb21wbGV0aW9uKCk7Cisg
ICAgcmV0dXJuIHRhc2stPm1fcmVzdWx0OworfQorCitib29sIEFwcGxpY2F0aW9uQ2FjaGVCcmlk
Z2VJbXBsOjpzd2FwQ2FjaGUoY29uc3QgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCAm
Y29udGV4dElEKQoreworICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElE
KTsKKyAgICBSZWZQdHI8U3dhcENhY2hlVGFzaz4gdGFzayA9IFN3YXBDYWNoZVRhc2s6OmNyZWF0
ZShjb250ZXh0SUQpOworICAgIHBvc3RUYXNrVG9CYWNrZW5kVGhyZWFkKHRhc2spOworICAgIHRh
c2stPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgcmV0dXJuIHRhc2stPm1fcmVzdWx0OworfQor
Cit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJbXBsOjpTeW5jVGFzazo6d2FpdEZvckNvbXBs
ZXRpb24oKSAgCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgbV9jb21w
bGV0aW9uQ29uZGl0aW9uLndhaXQobV9sb2NrKTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hl
QnJpZGdlSW1wbDo6U3luY1Rhc2s6OnNpZ25hbENvbXBsZXRpb24oKQoreworICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX2xvY2spOworICAgIG1fY29tcGxldGlvbkNvbmRpdGlvbi5zaWduYWwoKTsK
K30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlQnJpZGdlSW1wbDo6SW5pdGFsaWF6ZUNvbnRleHRU
YXNrOjpwZXJmb3JtVGFzayhBcHBsaWNhdGlvbkNhY2hlQnJpZGdlSW1wbCogYnJpZGdlKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgbWUKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlQnJp
ZGdlSW1wbDo6VW5pbml0aWFsaXplQ29udGV4dFRhc2s6OnBlcmZvcm1UYXNrKEFwcGxpY2F0aW9u
Q2FjaGVCcmlkZ2VJbXBsKiBicmlkZ2UpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCBtZQor
fQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJbXBsOjpTZWxlY3RDYWNoZVRhc2s6OnBl
cmZvcm1UYXNrKEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJbXBsKiBicmlkZ2UpCit7CisgICAgLy8g
RklYTUU6IGltcGxlbWVudCBtZQorICAgIGJyaWRnZS0+cG9zdFRhc2tUb0Zyb250ZW5kVGhyZWFk
KE5vdGlmeVNlbGVjdENvbXBsZXRlVGFzazo6Y3JlYXRlKG1fY29udGV4dElELAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY2FjaGVTZXF1ZW5jZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFBDQUNIRV9VTkNBQ0hF
RCkpOworfQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJbXBsOjpHZXRTdGF0dXNUYXNr
OjpwZXJmb3JtVGFzayhBcHBsaWNhdGlvbkNhY2hlQnJpZGdlSW1wbCogYnJpZGdlKQoreworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQgbWUKKyAgICBtX3N0YXR1cyA9IEFQUENBQ0hFX1VOQ0FDSEVE
OworICAgIHNpZ25hbENvbXBsZXRpb24oKTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlQnJp
ZGdlSW1wbDo6U3RhcnRVcGRhdGVUYXNrOjpwZXJmb3JtVGFzayhBcHBsaWNhdGlvbkNhY2hlQnJp
ZGdlSW1wbCogYnJpZGdlKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgbWUKKyAgICBtX3Jl
c3VsdCA9IGZhbHNlOworICAgIHNpZ25hbENvbXBsZXRpb24oKTsKK30KKwordm9pZCBBcHBsaWNh
dGlvbkNhY2hlQnJpZGdlSW1wbDo6U3dhcENhY2hlVGFzazo6cGVyZm9ybVRhc2soQXBwbGljYXRp
b25DYWNoZUJyaWRnZUltcGwqIGJyaWRnZSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IG1l
CisgICAgbV9yZXN1bHQgPSBmYWxzZTsKKyAgICBzaWduYWxDb21wbGV0aW9uKCk7Cit9CisKK3Zv
aWQgQXBwbGljYXRpb25DYWNoZUJyaWRnZUltcGw6Ok5vdGlmeVNlbGVjdENvbXBsZXRlVGFzazo6
cGVyZm9ybVRhc2soQXBwbGljYXRpb25DYWNoZUJyaWRnZUltcGwqIGJyaWRnZSkKK3sKKyAgICBi
cmlkZ2UtPm1fY2xpZW50LT5zZWxlY3RDYWNoZUNvbXBsZXRlKG1fY29udGV4dElELCBtX2NhY2hl
U2VxdWVuY2VOdW1iZXIsIG1fc3RhdHVzKTsKK30KKwordm9pZCBBcHBsaWNhdGlvbkNhY2hlQnJp
ZGdlSW1wbDo6Tm90aWZ5U3RhdHVzQ2hhbmdlZFRhc2s6OnBlcmZvcm1UYXNrKEFwcGxpY2F0aW9u
Q2FjaGVCcmlkZ2VJbXBsKiBicmlkZ2UpCit7CisgICAgYnJpZGdlLT5tX2NsaWVudC0+bm90aWZ5
U3RhdHVzQ2hhbmdlZChtX2NvbnRleHRJRHMsIG1fY2FjaGVTZXF1ZW5jZU51bWJlciwgbV9zdGF0
dXMpOworfQorCit2b2lkIEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJbXBsOjpOb3RpZnlFdmVudExp
c3RlbmVyVGFzazo6cGVyZm9ybVRhc2soQXBwbGljYXRpb25DYWNoZUJyaWRnZUltcGwqIGJyaWRn
ZSkKK3sKKyAgICBicmlkZ2UtPm1fY2xpZW50LT5ub3RpZnlFdmVudExpc3RlbmVyKG1fY29udGV4
dElEcywgbV9jYWNoZVNlcXVlbmNlTnVtYmVyLCBtX2V2ZW50VHlwZSk7Cit9CisKK30gIC8vIG5h
bWVzcGFjZSBXZWJjb3JlCisjZW5kaWYgIC8vIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKwoK
UHJvcGVydHkgY2hhbmdlcyBvbjogbG9hZGVyXGFwcGNhY2hlMlxBcHBsaWNhdGlvbkNhY2hlQnJp
ZGdlSW1wbC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRl
eDogbG9hZGVyL2FwcGNhY2hlMi9BcHBsaWNhdGlvbkNhY2hlQnJpZGdlSW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGxvYWRlci9hcHBjYWNoZTIvQXBwbGljYXRpb25DYWNoZUJyaWRnZUltcGwuaAkocmV2
aXNpb24gMCkKKysrIGxvYWRlci9hcHBjYWNoZTIvQXBwbGljYXRpb25DYWNoZUJyaWRnZUltcGwu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDksIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXBwbGljYXRpb25D
YWNoZUJyaWRnZUltcGxfaAorI2RlZmluZSBBcHBsaWNhdGlvbkNhY2hlQnJpZGdlSW1wbF9oCisK
KyNpZiBFTkFCTEUoQVBQTElDQVRJT05fQ0FDSEUpCisKKyNpbmNsdWRlICJBcHBsaWNhdGlvbkNh
Y2hlQnJpZGdlLmgiCisjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kOworICAgIGNsYXNzIEFw
cGxpY2F0aW9uQ2FjaGVUYXNrOworCisgICAgLy8gQSBpbXBsZW1lbnRhdGlvbiBmb3IgdXNlIGlu
IHNpbmdsZS1wcm9jZXNzIGJyb3dzZXJzLiBUaGlzIGltcGwgc3RhcnRzCisgICAgLy8gYSBiYWNr
Z3JvdW5kIHRocmVhZCBpbiB0aGUgY3VycmVudCBwcm9jZXNzIGFuZCBxdWV1ZXMgdGFza3MgdG8g
YmUgcGVyZm9ybWVkCisgICAgLy8gYnkgdGhlIGJhY2tlbmQgb24gdGhhdCB0aHJlYWQuIEFzeW5j
IHJlc3VsdHMgYXJlIGRlbGl2ZXJlZCBiYWNrIHRvIHRoZQorICAgIC8vIGZyb250ZW5kIHRocmVh
ZC4KKyAgICAvLworICAgIC8vIEZJWE1FOiBzb29uZXIsIHB1dCBpbiBwbGFjZSBpbnRlcmZhY2Vz
IGZvciB1c2UgYnkgYSBmYXR0ZXIgYXBwY2FjaGUKKyAgICAvLyBzYXZ2eSBSZXNvdXJjZUhhbmRs
ZSBzbyBhcHBjYWNoZWQgcmVzcG9uc2VzIGFyZSByZXRyaWV2ZWQgaW4gdGhlIGFjdAorICAgIC8v
IG9mIHJlc291cmNlIGhhbmRsZSBsb2FkaW5nLgorICAgIC8vIAorICAgIC8vIEZJWE1FOiBsYXRl
ciwgaW50ZWdyYXRlIHdpdGggd29ya2Vycy4gYWNjb21vZGF0ZSBtZXRob2QgY2FsbHMgYW5kIGNs
aWVudAorICAgIC8vIGNhbGxiYWNrcyBvbiB3b3JrZXIgdGhyZWFkcyB0b28uIEVpdGhlciBhbGxv
dyB0aGlzIGludGVyZmFjZSB0byBiZSB1c2VkIG9uCisgICAgLy8gd29ya2VyIHRocmVhZHMgdG9v
LCBvciB1c2UgYSB3b3JrZXIgc3BlY2lmaWMgJ2Zyb250ZW5kcHJveHknIHRvIHRvIHRoZQorICAg
IC8vIHRocmVhZCBob3BwaW5nIG9uIGJlaGFsZiBvZiB3b3JrZXJzIChwcm9iYWJseSB0aGUgbGF0
dGVyKS4KKyAgICAvLyBBdCBwcmVzZW50IHRoaXMgaW1wbCBjYW4gb25seSBiZSB1c2VkIG9uIHRo
ZSBtYWluIHRocmVhZC4KKyAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlQnJpZGdlSW1wbCA6IHB1
YmxpYyBBcHBsaWNhdGlvbkNhY2hlQnJpZGdlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIEEg
aG9zdCBicm93c2VyIHNob3VsZCBjYWxsIHN0YXJ0dXAgYW5kIHNodXRkb3duIG9uIHRoZSBtYWlu
IHRocmVhZAorICAgICAgICAvLyBhdCBicm93c2VyIHN0YXJ0dXAgYW5kIHNodXRkb3duIHRpbWUg
cmVzcGVjdGl2ZWx5LgorICAgICAgICBzdGF0aWMgdm9pZCBzdGFydHVwKCk7CisgICAgICAgIHN0
YXRpYyB2b2lkIHNodXRkb3duKCk7CisKKyAgICAgICAgLy8gQXBwbGljYXRpb25DYWNoZUJyaWRn
ZSBpbnRlcmZhY2UKKworICAgICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUNvbnRleHRBc3lu
Yyhjb25zdCBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEICZjb250ZXh0SUQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVD
b250ZXh0VHlwZSBjb250ZXh0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCYgcGFyZW50
Q29udGV4dElEKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVuaW5pdGlhbGl6ZUNvbnRleHRBc3lu
Yyhjb25zdCBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEICZjb250ZXh0SUQpOworCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RJbml0aWFsQ2FjaGVBc3luYyhjb25zdCBHbG9iYWxB
cHBsaWNhdGlvbkNhY2hlQ29udGV4dElEICZjb250ZXh0SUQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2VxdWVuY2VOdW1iZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBkb2N1bWVudFVS
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0
aW9uQ2FjaGVJRCBjYWNoZURvY3VtZW50V2FzTG9hZGVkRnJvbSk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBzZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdEFzeW5jKGNvbnN0IEdsb2JhbEFwcGxpY2F0
aW9uQ2FjaGVDb250ZXh0SUQgJmNvbnRleHRJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNlcXVlbmNlTnVtYmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBk
b2N1bWVudFVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXBwbGljYXRpb25DYWNoZUlEIGNhY2hlRG9jdW1lbnRXYXNMb2FkZWRGcm9tKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHNlbGVjdENhY2hlV2l0aE1hbmlmZXN0QXN5bmMoY29uc3Qg
R2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCAmY29udGV4dElELAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2VxdWVuY2VOdW1iZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEtVUkwmIGRvY3VtZW50VVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlSUQgY2FjaGVEb2N1bWVudFdhc0xvYWRlZEZy
b20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEtVUkwmIG1hbmlmZXN0VVJMb2ZDYWNoZURvY3VtZW50V2FzTG9hZGVkRnJvbSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYg
bWFuaWZlc3RVUkwpOworCisgICAgICAgIHZpcnR1YWwgQXBwbGljYXRpb25DYWNoZVN0YXR1cyBz
dGF0dXMoY29uc3QgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCAmY29udGV4dElEKTsK
KyAgICAgICAgdmlydHVhbCBib29sIHN0YXJ0VXBkYXRlKGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9u
Q2FjaGVDb250ZXh0SUQgJmNvbnRleHRJRCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBzd2FwQ2Fj
aGUoY29uc3QgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJRCAmY29udGV4dElEKTsKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJbXBsKEFwcGxpY2F0
aW9uQ2FjaGVCcmlkZ2VDbGllbnQqIGNsaWVudCk7CisgICAgICAgIHZpcnR1YWwgfkFwcGxpY2F0
aW9uQ2FjaGVCcmlkZ2VJbXBsKCk7CisKKyAgICAgICAgY2xhc3MgVGFzazsgIC8vIFNlZSB0aGUg
Y29uY3JldGUgdGFzayBjbGFzc2VzIGJlbG93LgorICAgICAgICB2b2lkIHBvc3RUYXNrVG9CYWNr
ZW5kVGhyZWFkKFBhc3NSZWZQdHI8VGFzaz4gdGFzayk7CisgICAgICAgIHZvaWQgcG9zdFRhc2tU
b0Zyb250ZW5kVGhyZWFkKFBhc3NSZWZQdHI8VGFzaz4gdGFzayk7CisKKyAgICAgICAgc3RhdGlj
IHZvaWQgcGVyZm9ybUZyb250ZW5kVGhyZWFkVGFzayh2b2lkKiBzZWxmKTsKKyAgICAgICAgc3Rh
dGljIHZvaWQqIGFwcGNhY2hlVGhyZWFkU3RhcnQodm9pZCopOworICAgICAgICB2b2lkKiBhcHBj
YWNoZVRocmVhZCgpOworCisgICAgICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAg
ICAgICAgTWVzc2FnZVF1ZXVlPFJlZlB0cjxUYXNrPiA+IG1fcXVldWU7CisgICAgICAgIE1lc3Nh
Z2VRdWV1ZTxSZWZQdHI8VGFzaz4gPiBtX2Zyb250ZW5kUXVldWU7CisKKyAgICAgICAgLy8gRklY
TUU6IHNvb25lciwgaW5zdGFudGlhdGUgdGhlIGJhY2tlbmQgb24gdGhlIGJhY2tncm91bmQgdGhy
ZWFkCisgICAgICAgIC8vIEFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kIG1fYXBwY2FjaGVCYWNrZW5k
CisKKyAgICAgICAgLy8gVGFzayBiYXNlIGNsYXNzCisgICAgICAgIGNsYXNzIFRhc2sgOiBwdWJs
aWMgVGhyZWFkU2FmZVNoYXJlZDxUYXNrPiB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQgbV9jb250ZXh0SUQ7ICAvLyBt
YW55LCBidXQgbm90IGFsbCwgdGFza3MgYXJlIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGNv
bnRleHQKKworICAgICAgICAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKEFwcGxpY2F0aW9u
Q2FjaGVCcmlkZ2VJbXBsKiBicmlkZ2UpID0gMDsKKyAgICAgICAgcHJvdGVjdGVkOgorICAgICAg
ICAgICAgZnJpZW5kIFRocmVhZFNhZmVTaGFyZWQ8VGFzaz47CisgICAgICAgICAgICBUYXNrKCkg
e30KKyAgICAgICAgICAgIFRhc2soY29uc3QgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRleHRJ
RCYgY29udGV4dElEKSA6IG1fY29udGV4dElEKGNvbnRleHRJRCkge30KKyAgICAgICAgICAgIHZp
cnR1YWwgflRhc2soKSB7fQorICAgICAgICB9OworCisgICAgICAgIC8vIFN5bmNUYXNrIGJhc2Ug
Y2xhc3MKKyAgICAgICAgY2xhc3MgU3luY1Rhc2sgOiBwdWJsaWMgVGFzayB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIHZvaWQgd2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgICAg
IHZvaWQgc2lnbmFsQ29tcGxldGlvbigpOworICAgICAgICBwcm90ZWN0ZWQ6CisgICAgICAgICAg
ICBTeW5jVGFzaygpIDogVGFzaygpIHt9CisgICAgICAgICAgICBTeW5jVGFzayhjb25zdCBHbG9i
YWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEJiBjb250ZXh0SUQpIDogVGFzayhjb250ZXh0SUQp
IHt9CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBNdXRleCBtX2xvY2s7CisgICAgICAg
ICAgICBUaHJlYWRDb25kaXRpb24gbV9jb21wbGV0aW9uQ29uZGl0aW9uOworICAgICAgICB9Owor
CisgICAgICAgIC8vIFNlbnQgZnJvbSB0aGUgZnJvbnRlbmQgdG8gdGhlIGJhY2tlbmQKKyAgICAg
ICAgY2xhc3MgSW5pdGFsaWF6ZUNvbnRleHRUYXNrIDogcHVibGljIFRhc2sgeworICAgICAgICBw
dWJsaWM6CisgICAgICAgICAgICBjb25zdCBBcHBsaWNhdGlvbkNhY2hlQ29udGV4dFR5cGUgbV9j
b250ZXh0VHlwZTsKKyAgICAgICAgICAgIGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250
ZXh0SUQmIG1fcGFyZW50Q29udGV4dElEOworCisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybVRhc2soQXBwbGljYXRpb25DYWNoZUJyaWRnZUltcGwqIGJyaWRnZSk7CisKKyAgICAgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluaXRhbGlhemVDb250ZXh0VGFzaz4gY3JlYXRlKGNvbnN0
IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQgJmNvbnRleHRJRCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0
aW9uQ2FjaGVDb250ZXh0VHlwZSBjb250ZXh0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdsb2JhbEFwcGxpY2F0
aW9uQ2FjaGVDb250ZXh0SUQmIHBhcmVudENvbnRleHRJRCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbmV3IEluaXRhbGlhemVDb250ZXh0VGFzayhjb250ZXh0SUQsIGNv
bnRleHRUeXBlLCBwYXJlbnRDb250ZXh0SUQpOworICAgICAgICAgICAgfQorICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgSW5pdGFsaWF6ZUNvbnRleHRUYXNrKGNvbnN0IEdsb2JhbEFwcGxp
Y2F0aW9uQ2FjaGVDb250ZXh0SUQmIGNvbnRleHRJRCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlQ29udGV4dFR5cGUgY29udGV4dFR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2xvYmFsQXBwbGljYXRpb25DYWNo
ZUNvbnRleHRJRCYgcGFyZW50Q29udGV4dElEKQorICAgICAgICAgICAgICAgIDogVGFzayhjb250
ZXh0SUQpCisgICAgICAgICAgICAgICAgLCBtX2NvbnRleHRUeXBlKGNvbnRleHRUeXBlKQorICAg
ICAgICAgICAgICAgICwgbV9wYXJlbnRDb250ZXh0SUQocGFyZW50Q29udGV4dElEKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIC8vIFNlbnQgZnJv
bSB0aGUgZnJvbnRlbmQgdG8gdGhlIGJhY2tlbmQKKyAgICAgICAgY2xhc3MgVW5pbml0aWFsaXpl
Q29udGV4dFRhc2sgOiBwdWJsaWMgVGFzayB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhBcHBsaWNhdGlvbkNhY2hlQnJpZGdlSW1wbCogYnJp
ZGdlKTsKKworICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VW5pbml0aWFsaXplQ29udGV4
dFRhc2s+IGNyZWF0ZShjb25zdCBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEICZjb250
ZXh0SUQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVbmluaXRp
YWxpemVDb250ZXh0VGFzayhjb250ZXh0SUQpOworICAgICAgICAgICAgfQorICAgICAgICAgcHJp
dmF0ZToKKyAgICAgICAgICAgIFVuaW5pdGlhbGl6ZUNvbnRleHRUYXNrKGNvbnN0IEdsb2JhbEFw
cGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQmIGNvbnRleHRJRCkgOiBUYXNrKGNvbnRleHRJRCkge30K
KyAgICAgICB9OworCisgICAgICAgIC8vIFNlbnQgZnJvbSB0aGUgZnJvbnRlbmQgdG8gdGhlIGJh
Y2tlbmQKKyAgICAgICAgY2xhc3MgU2VsZWN0Q2FjaGVUYXNrIDogcHVibGljIFRhc2sgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBjb25zdCBpbnQgbV9jYWNoZVNlcXVlbmNlTnVtYmVy
OworCisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soQXBwbGljYXRpb25DYWNo
ZUJyaWRnZUltcGwqIGJyaWRnZSk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBjcmVhdGUvY3Rv
ciB2YXJpYW50cyB0aGF0IGNvdmVyIGFsbCB1c2UgY2FzZXMKKyAgICAgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNlbGVjdENhY2hlVGFzaz4gY3JlYXRlKGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9u
Q2FjaGVDb250ZXh0SUQgJmNvbnRleHRJRCwgaW50IHNlcXVlbmNlTnVtYmVyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2VsZWN0Q2FjaGVUYXNrKGNvbnRleHRJ
RCwgc2VxdWVuY2VOdW1iZXIpOworICAgICAgICAgICAgfQorICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBTZWxlY3RDYWNoZVRhc2soY29uc3QgR2xvYmFsQXBwbGljYXRpb25DYWNoZUNvbnRl
eHRJRCYgY29udGV4dElELCBpbnQgc2VxdWVuY2VOdW1iZXIpCisgICAgICAgICAgICAgICAgOiBU
YXNrKGNvbnRleHRJRCkKKyAgICAgICAgICAgICAgICAsIG1fY2FjaGVTZXF1ZW5jZU51bWJlcihz
ZXF1ZW5jZU51bWJlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KworICAgICAgICAvLyBTZW50IGZyb20gdGhlIGZyb250ZW5kIHRvIHRoZSBiYWNrZW5kCisgICAg
ICAgIGNsYXNzIEdldFN0YXR1c1Rhc2sgOiBwdWJsaWMgU3luY1Rhc2sgeworICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlU3RhdHVzIG1fc3RhdHVzOworCisgICAg
ICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soQXBwbGljYXRpb25DYWNoZUJyaWRnZUlt
cGwqIGJyaWRnZSk7CisKKyAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdldFN0YXR1c1Rh
c2s+IGNyZWF0ZShjb25zdCBHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEICZjb250ZXh0
SUQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBHZXRTdGF0dXNU
YXNrKGNvbnRleHRJRCk7CisgICAgICAgICAgICB9CisgICAgICAgIHByaXZhdGU6CisgICAgICAg
ICAgICBHZXRTdGF0dXNUYXNrKGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQm
IGNvbnRleHRJRCkKKyAgICAgICAgICAgICAgICA6IFN5bmNUYXNrKGNvbnRleHRJRCkKKyAgICAg
ICAgICAgICAgICAsIG1fc3RhdHVzKEFQUENBQ0hFX1VOQ0FDSEVEKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgfQorCisgICAgICAgIH07CisKKyAgICAgICAgLy8gU2VudCBmcm9tIHRoZSBm
cm9udGVuZCB0byB0aGUgYmFja2VuZAorICAgICAgICBjbGFzcyBTdGFydFVwZGF0ZVRhc2sgOiBw
dWJsaWMgU3luY1Rhc2sgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBib29sIG1fcmVz
dWx0OworCisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soQXBwbGljYXRpb25D
YWNoZUJyaWRnZUltcGwqIGJyaWRnZSk7CisKKyAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0YXJ0VXBkYXRlVGFzaz4gY3JlYXRlKGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250
ZXh0SUQgJmNvbnRleHRJRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bmV3IFN0YXJ0VXBkYXRlVGFzayhjb250ZXh0SUQpOworICAgICAgICAgICAgfQorICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgU3RhcnRVcGRhdGVUYXNrKGNvbnN0IEdsb2JhbEFwcGxpY2F0
aW9uQ2FjaGVDb250ZXh0SUQmIGNvbnRleHRJRCkKKyAgICAgICAgICAgICAgICA6IFN5bmNUYXNr
KGNvbnRleHRJRCkKKyAgICAgICAgICAgICAgICAsIG1fcmVzdWx0KGZhbHNlKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIC8vIFNlbnQgZnJvbSB0
aGUgZnJvbnRlbmQgdG8gdGhlIGJhY2tlbmQKKyAgICAgICAgY2xhc3MgU3dhcENhY2hlVGFzayA6
IHB1YmxpYyBTeW5jVGFzayB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGJvb2wgbV9y
ZXN1bHQ7CisKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhBcHBsaWNhdGlv
bkNhY2hlQnJpZGdlSW1wbCogYnJpZGdlKTsKKworICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3dhcENhY2hlVGFzaz4gY3JlYXRlKGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250
ZXh0SUQgJmNvbnRleHRJRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bmV3IFN3YXBDYWNoZVRhc2soY29udGV4dElEKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcHJp
dmF0ZToKKyAgICAgICAgICAgIFN3YXBDYWNoZVRhc2soY29uc3QgR2xvYmFsQXBwbGljYXRpb25D
YWNoZUNvbnRleHRJRCYgY29udGV4dElEKQorICAgICAgICAgICAgICAgIDogU3luY1Rhc2soY29u
dGV4dElEKQorICAgICAgICAgICAgICAgICwgbV9yZXN1bHQoZmFsc2UpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgLy8gU2VudCBmcm9tIHRoZSBi
YWNrZW5kIHRvIHRoZSBmcm9udGVuZCBpbiByZXNwb25zZSB0byBhIFNlbGVjdENhY2hlVGFzawor
ICAgICAgICBjbGFzcyBOb3RpZnlTZWxlY3RDb21wbGV0ZVRhc2sgOiBwdWJsaWMgVGFzayB7Cisg
ICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGNvbnN0IGludCBtX2NhY2hlU2VxdWVuY2VOdW1i
ZXI7CisgICAgICAgICAgICBjb25zdCBBcHBsaWNhdGlvbkNhY2hlU3RhdHVzIG1fc3RhdHVzOwor
CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soQXBwbGljYXRpb25DYWNoZUJy
aWRnZUltcGwqIGJyaWRnZSk7CisKKyAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5vdGlm
eVNlbGVjdENvbXBsZXRlVGFzaz4gY3JlYXRlKGNvbnN0IEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVD
b250ZXh0SUQgJmNvbnRleHRJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZXF1ZW5jZU51bWJlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFw
cGxpY2F0aW9uQ2FjaGVTdGF0dXMgc3RhdHVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgTm90aWZ5U2VsZWN0Q29tcGxldGVUYXNrKGNvbnRleHRJRCwgc2VxdWVu
Y2VOdW1iZXIsIHN0YXR1cyk7CisgICAgICAgICAgICB9CisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBOb3RpZnlTZWxlY3RDb21wbGV0ZVRhc2soY29uc3QgR2xvYmFsQXBwbGljYXRpb25D
YWNoZUNvbnRleHRJRCAmY29udGV4dElELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBzZXF1ZW5jZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBcHBsaWNhdGlvbkNhY2hlU3RhdHVzIHN0YXR1cykKKyAgICAgICAgICAgICAgICA6
IFRhc2soY29udGV4dElEKQorICAgICAgICAgICAgICAgICwgbV9jYWNoZVNlcXVlbmNlTnVtYmVy
KHNlcXVlbmNlTnVtYmVyKQorICAgICAgICAgICAgICAgICwgbV9zdGF0dXMoc3RhdHVzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgIH07CisKKyAgICAgICAgLy8gU2Vu
dCBmcm9tIHRoZSBiYWNrZW5kIHRvIHRoZSBmcm9udGVuZCB0byBicm9hZGNhc3Qgc3RhdHVzIGNo
YW5nZXMKKyAgICAgICAgY2xhc3MgTm90aWZ5U3RhdHVzQ2hhbmdlZFRhc2sgOiBwdWJsaWMgVGFz
ayB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxHbG9iYWxBcHBs
aWNhdGlvbkNhY2hlQ29udGV4dElEPiBtX2NvbnRleHRJRHM7CisgICAgICAgICAgICBjb25zdCBp
bnQgbV9jYWNoZVNlcXVlbmNlTnVtYmVyOworICAgICAgICAgICAgY29uc3QgQXBwbGljYXRpb25D
YWNoZVN0YXR1cyBtX3N0YXR1czsKKworICAgICAgICAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1U
YXNrKEFwcGxpY2F0aW9uQ2FjaGVCcmlkZ2VJbXBsKiBicmlkZ2UpOworCisgICAgICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxOb3RpZnlTdGF0dXNDaGFuZ2VkVGFzaz4gY3JlYXRlKGNvbnN0IFZl
Y3RvcjxHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEPiAmY29udGV4dElEcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHNlcXVlbmNlTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlU3RhdHVzIHN0YXR1cykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5vdGlmeVN0YXR1c0No
YW5nZWRUYXNrKGNvbnRleHRJRHMsIHNlcXVlbmNlTnVtYmVyLCBzdGF0dXMpOworICAgICAgICAg
ICAgfQorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgTm90aWZ5U3RhdHVzQ2hhbmdlZFRh
c2soY29uc3QgVmVjdG9yPEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQ+ICZjb250ZXh0
SURzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNlcXVlbmNlTnVt
YmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25DYWNo
ZVN0YXR1cyBzdGF0dXMpCisgICAgICAgICAgICAgICAgOiBtX2NvbnRleHRJRHMoY29udGV4dElE
cykKKyAgICAgICAgICAgICAgICAsIG1fY2FjaGVTZXF1ZW5jZU51bWJlcihzZXF1ZW5jZU51bWJl
cikKKyAgICAgICAgICAgICAgICAsIG1fc3RhdHVzKHN0YXR1cykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICAvLyBTZW50IGZyb20gdGhlIGJhY2tl
bmQgdG8gdGhlIGZyb250ZW5kIHRvIGJyb2FkY2FzdCBldmVudHMKKyAgICAgICAgY2xhc3MgTm90
aWZ5RXZlbnRMaXN0ZW5lclRhc2sgOiBwdWJsaWMgVGFzayB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIGNvbnN0IFZlY3RvcjxHbG9iYWxBcHBsaWNhdGlvbkNhY2hlQ29udGV4dElEPiBt
X2NvbnRleHRJRHM7CisgICAgICAgICAgICBjb25zdCBpbnQgbV9jYWNoZVNlcXVlbmNlTnVtYmVy
OworICAgICAgICAgICAgY29uc3QgQXBwbGljYXRpb25DYWNoZUV2ZW50VHlwZSBtX2V2ZW50VHlw
ZTsKKworICAgICAgICAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKEFwcGxpY2F0aW9uQ2Fj
aGVCcmlkZ2VJbXBsKiBicmlkZ2UpOworCisgICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxO
b3RpZnlFdmVudExpc3RlbmVyVGFzaz4gY3JlYXRlKGNvbnN0IFZlY3RvcjxHbG9iYWxBcHBsaWNh
dGlvbkNhY2hlQ29udGV4dElEPiAmY29udGV4dElEcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNlcXVlbmNlTnVtYmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBcHBsaWNhdGlvbkNhY2hlRXZlbnRUeXBlIGV2ZW50VHlwZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5vdGlmeUV2ZW50TGlzdGVuZXJUYXNrKGNv
bnRleHRJRHMsIHNlcXVlbmNlTnVtYmVyLCBldmVudFR5cGUpOworICAgICAgICAgICAgfQorICAg
ICAgICBwcml2YXRlOgorICAgICAgICAgICAgTm90aWZ5RXZlbnRMaXN0ZW5lclRhc2soY29uc3Qg
VmVjdG9yPEdsb2JhbEFwcGxpY2F0aW9uQ2FjaGVDb250ZXh0SUQ+ICZjb250ZXh0SURzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNlcXVlbmNlTnVtYmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZUV2ZW50VHlw
ZSBldmVudFR5cGUpCisgICAgICAgICAgICAgICAgOiBtX2NvbnRleHRJRHMoY29udGV4dElEcykK
KyAgICAgICAgICAgICAgICAsIG1fY2FjaGVTZXF1ZW5jZU51bWJlcihzZXF1ZW5jZU51bWJlcikK
KyAgICAgICAgICAgICAgICAsIG1fZXZlbnRUeXBlKGV2ZW50VHlwZSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9OworCit9ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgIC8vIEVOQUJMRShBUFBMSUNBVElPTl9DQUNIRSkKKyNlbmRpZiAgLy8g
QXBwbGljYXRpb25DYWNoZUJyaWRnZUltcGxfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogbG9hZGVy
XGFwcGNhY2hlMlxBcHBsaWNhdGlvbkNhY2hlQnJpZGdlSW1wbC5oCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjplb2wtc3R5bGUKICAgKyBMRgoK
</data>

          </attachment>
      

    </bug>

</bugzilla>