<?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>25376</bug_id>
          
          <creation_ts>2009-04-24 13:47:24 -0700</creation_ts>
          <short_desc>Refactor localStorage code for use in multi-process browsers</short_desc>
          <delta_ts>2009-06-29 13:21:11 -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>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>26629</dependson>
    
    <dependson>26658</dependson>
    
    <dependson>26698</dependson>
    
    <dependson>26732</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>michaeln</cc>
    
    <cc>playmobil</cc>
    
    <cc>sam</cc>
    
    <cc>yael</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>118722</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-04-24 13:47:24 -0700</bug_when>
    <thetext>This is my first WebKit ever bug.  I&apos;m not sure how to assign it to myself and I&apos;m also not exactly sure who to cc.  Anyhow...

This bug is to track the first step in getting localStorage 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 localStorage.  The two will call each other in such a way that a proxy layer can be added in between.  In multi-process browsers (like Chromium) the proxy layer will be used to marshal the data across its IPC mechanisms.

At first glance, there&apos;s not a huge amount of work necessary.  The Storage class is more or less a front end and LocalStorageArea is more or less a back end already.  The StorageEvent code isn&apos;t currently split up, but it shouldn&apos;t be hard to do.  It might make sense to rename the *StorageArea classes to *StorageBackend since this is what they&apos;ll be.

I&apos;ll continue to update this bug as I further scope the work.  I&apos;m hoping to start writing code for this in the next week or two.

FYI: The Chromium side of things will be tracked here: http://crbug.com/4360</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121336</commentid>
    <comment_count>1</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-05-14 11:04:46 -0700</bug_when>
    <thetext>Created a proposal for this here: http://docs.google.com/Doc?id=dhs4g97m_8cwths74m </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124262</commentid>
    <comment_count>2</comment_count>
      <attachid>30936</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-03 17:48:45 -0700</bug_when>
    <thetext>Created attachment 30936
The first patch.

In preparation for combining SessionStorage and LocalStorage into a single StorageManager, move the syncing bits out of LocalStorage and into its own class.
  
The next step is to combine LocalStorageArea and SessionStorageArea into one.  Then SessionStorage and LocalStorage can be combined.

Note that combining them will cut down on code paths that must be proxied, eliminate virtual dispatch, and allow Chromium to (eventually) write historical sessionStorage to disk when memory is getting tight.

Also remove a couple bits of cruft including code for quotas which is unnecessary (since a meta-data db is unnecessary since you can just count bytes as you read the local storage databases into memory).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124420</commentid>
    <comment_count>3</comment_count>
      <attachid>30978</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-04 18:24:37 -0700</bug_when>
    <thetext>Created attachment 30978
Revision of the last patch

Oops, a change I was making to &apos;contains&apos; (which I&apos;ve since undone) accidentally made it into the last patch.  I think this fixes it.

Would really appreciate if someone could take a look!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124425</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-06-04 19:25:39 -0700</bug_when>
    <thetext>I&apos;m really not at all familiar with the localstore code, so I&apos;m not in a great position to give you a real review. (Not that I have review rights anyway:)


28         count bytes as you read the local storage databases into memory

This implies to me the entire db is slurped into memory. Is that right?


65     : m_path(path.copy())

nit: is the call to .copy() really necessary


68     if (!path.isEmpty())
69         m_syncManager = StorageSyncManager::create(m_path);

nit: use the same (m_)path variable in the test and create call


115     ASSERT(origin);
116     if (!origin)
117         return String();

nit: which is it, required or not? One of them can probably go.


124     return pathByAppendingComponent(m_path, origin-&gt;databaseIdentifier() + &quot;.localstorage&quot;);

Oh, a unique database file per origin. I see this was pre-existing code.
Do you know why there is one per origin instead of one for all? Just curious.


WebCore/storage/StorageSyncManager.cpp
line 80: extra whitespace here


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124460</commentid>
    <comment_count>5</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-04 20:47:28 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I&apos;m really not at all familiar with the localstore code, so I&apos;m not in a great
&gt; position to give you a real review. (Not that I have review rights anyway:)
&gt; 
&gt; 
&gt; 28         count bytes as you read the local storage databases into memory
&gt; 
&gt; This implies to me the entire db is slurped into memory. Is that right?

Yes.  This is how it&apos;s always been.

&gt; 
&gt; 65     : m_path(path.copy())
&gt; 
&gt; nit: is the call to .copy() really necessary


This is how the original code was, but I can take a look to see if it&apos;s OK to skip the .copy().
 
&gt; 68     if (!path.isEmpty())
&gt; 69         m_syncManager = StorageSyncManager::create(m_path);
&gt; 
&gt; nit: use the same (m_)path variable in the test and create call

Oops.  Quite correct.
 
&gt; 115     ASSERT(origin);
&gt; 116     if (!origin)
&gt; 117         return String();
&gt; 
&gt; nit: which is it, required or not? One of them can probably go.

ASSERT will tell you there&apos;s a problem in debug mode, but WebKit will crash a few lines later without the if statement.  I don&apos;t know if there are actual cases where origin could be null or if this code was &quot;just in case&quot;.  Something I would like to do in the future is investigate this stuff, but I don&apos;t think it&apos;s a priority.

&gt; 124     return pathByAppendingComponent(m_path, origin-&gt;databaseIdentifier() +
&gt; &quot;.localstorage&quot;);
&gt; 
&gt; Oh, a unique database file per origin. I see this was pre-existing code.
&gt; Do you know why there is one per origin instead of one for all? Just curious.

Because there&apos;s a database per origin.

&gt; WebCore/storage/StorageSyncManager.cpp
&gt; line 80: extra whitespace here

Noted.

These really aren&apos;t enough changes for me to roll another patch as is, but I&apos;ll do it before this gets submitted.  Thanks for reviewing, Michael.  
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124582</commentid>
    <comment_count>6</comment_count>
      <attachid>31014</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-05 15:37:55 -0700</bug_when>
    <thetext>Created attachment 31014
Patch 2 in this set

I&apos;m trying to make these patches as small and self contained as possible.  I&apos;ll continue rolling them out while I wait on reviews for earlier ones.  I&apos;m now using git with a branch for each one, so I should be able to keep all the layers straight.....but prompt reviews are obviously going to make this easier on everyone.

This is the second patch in the set.  It takes another step towards abstracting out the sync process.  In this case, it&apos;s getting rid of all the &apos;internalGetItem&apos; (and associated calls) and instead replaces them with one virtual function call that&apos;ll block until the import is complete.

I&apos;m pretty sure that the behavior for setItem, removeItem, and clear are NOT safe.  getItem and contains do have a small optimization that is legit, but I&apos;m don&apos;t think it helps a whole lot in practice since, if it&apos;s not present right away, it&apos;ll block until the import is complete.

I&apos;ve made a FIXME comment about possible optimizations.  I&apos;d like to implement this after a couple more rounds of refactoring.

Unlike most svn patches, this needs to be applied with &apos;patch -p1&apos; instead of &apos;patch -p0&apos;.  I&apos;ll create a ChangeLog and finalize this patch once the first one is reviewed.  I&apos;m putting this (and probably more soon) up mostly as a FYI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124585</commentid>
    <comment_count>7</comment_count>
      <attachid>31016</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-05 16:04:44 -0700</bug_when>
    <thetext>Created attachment 31016
A _slight_ ref of patch 1

A couple tiny style changes from the last patch.

This is also now generated from &apos;git diff&apos; which means that StorageSyncManager.* shows up just as an add rather than a copy from LocalStorage.*.  This is significant because much of the code in this new file is actually unmodified...so the reviewers job is easier than it might otherwise appear.  :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124590</commentid>
    <comment_count>8</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-05 16:32:11 -0700</bug_when>
    <thetext>I figured it might help reviewers if I explained what I&apos;m doing in excruciating detail.

High level overview of structure:

*DOMWindow code*
Calls LocalStorage/SessionStorage to get a storage area
Creates a Storage object and returns it to the javascript implementation

*LocalStorage/SessionStorage code*
Keeps track of *StorageArea objects associated with each origin
Handles part of the syncing issues

*StorageArea/LocalStorageArea/SessionStorageArea*
Uses StorageMap to keep track of the actual data
Dispatches events
Handles the rest of the syncing and concurrency issues

*StorageMap*
Keeps the string -&gt; string map that is DOM Storage


Where I&apos;m headed:

I want to reorganize everything by function.  I want to have the event dispatching code in one place.  I want the syncing code in one place.  And I want the data mapping in one place.  To do this, I intend to pull the factory part of LocalStorage/SessionStorage into a StorageManager.  I want to pull the syncing part of LocalStorage into a StorageSyncManager.  I want to pull LocalStorageArea syncing code either into that manager or (more likely) a StorageAreaSync class.  I want to move the event dispatching into a StorageEventDispatcher class.

This is important for setting up proxies across processes.  For the StorageArea, StorageManager, and their helpers, the &quot;real&quot; implementation will live in Chromium&apos;s browser process (the main, unsandboxed one).  For StorageEventDispatcher, the &quot;real&quot; implementation will live in the renderer process and its proxy will live in the browser process.  If this doesn&apos;t make sense, let me know and I&apos;ll try to flesh it out further (or update the design doc :-)


As of right now, here&apos;s what I have planned in terms of patches.  This will probably change, but hopefully it can give you a high level overview of where I&apos;m going with this:

1: Pull LocalStorage sync code into its own class.
2: Clean up the LocalStorageCode for handling the initial import.
3: Pull the rest of the sync code out of localStorageArea.
4: Pull the event dispatching code out of *StorageArea.
5: Combine LocalStorageArea and SessionStorageArea.  Combine LocalStorage and SessionStorage into StorageManager.  All of the heavy lifting will have already been done in other patches.
6: Made the actual proxy split.


Once again, if you have questions PLEASE ASK!  I really want to keep moving forward on this, so I&apos;ll take whatever time necessary to explain what I&apos;m doing.  :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124608</commentid>
    <comment_count>9</comment_count>
      <attachid>31024</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-05 19:11:27 -0700</bug_when>
    <thetext>Created attachment 31024
Patch 3 in this set

Patch for item #3.  (Moving the rest of the syncing code out of LocalStorageArea.)

Once #1 and #2 are in, I&apos;ll make a ChangeLog for this one and add the new file to the visual studio project, make file, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124912</commentid>
    <comment_count>10</comment_count>
      <attachid>31085</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-09 01:12:11 -0700</bug_when>
    <thetext>Created attachment 31085
Patch 4 in this set

Combine LocalStorageArea and SessionStorageArea into StorageArea.  Next up, combine LocalStorage and SessionStorage into StorageManager.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125443</commentid>
    <comment_count>11</comment_count>
      <attachid>31193</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-12 00:13:37 -0700</bug_when>
    <thetext>Created attachment 31193
Patch 5 in this set

Merge SessionStorage and LocalStorage into a single StorageNamespace class (since that&apos;s essentially what they both were to begin with).

The next step is to add a proxy for StorageNamespace and StorageArea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126147</commentid>
    <comment_count>12</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2009-06-15 23:38:17 -0700</bug_when>
    <thetext>Why do we need some complicated multiprocess sync code in all local storage code when there is no way to build the WebKit tree in a multiprocess form?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126185</commentid>
    <comment_count>13</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-16 05:16:44 -0700</bug_when>
    <thetext>Chromium is a WebKit based browser that makes use of a multi-process based architecture.  You can find more details here: http://dev.chromium.org/developers/design-documents/multi-process-architecture

Please take a look at the patches I&apos;ve posted so far.  I think the architecture is actually simpler after them.  Stuff like syncing code is broken out into its own area.  What remained could then be combined and some virtual dispatch and tricks like having an &quot;internalFunctionFoo&quot; could be eliminated.

As for &quot;some complicated multiprocess sync code,&quot; I actually haven&apos;t posted any multi-process specific code yet.  It will make things more complex, but it&apos;s important so that Chromium and the rest of WebKit can continue sharing as much code as possible.

A couple of us met with a bunch of Apple guys (all of them in the cc list except for Maciej) to talk through the general strategy before.  One of the things we talked about was moving in the direction where it&apos;s easier for others to use WebKit in a multi-process manner.  We&apos;ve also discussed some of the details on the webkit-dev mailing list.  (I can dig up some of the thread names if that&apos;d be helpful.)

I think the benefits of sharing code will outweigh the negatives of added complexity.  And I think the 5 patches I&apos;ve posted so far will help reduce this added complexity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126339</commentid>
    <comment_count>14</comment_count>
      <attachid>31389</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-16 15:56:30 -0700</bug_when>
    <thetext>Created attachment 31389
patch 1 - v3

Synced the repo and generated the patch with svn-create-patch.  This should help the readability of StorageSyncManager.* (since it started as a copy of LocalStorage.*).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126368</commentid>
    <comment_count>15</comment_count>
      <attachid>31395</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-16 17:44:03 -0700</bug_when>
    <thetext>Created attachment 31395
patch 1 - v4

Added ENABLE(DOM_STORAGE) guards around the new files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126370</commentid>
    <comment_count>16</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-16 18:45:19 -0700</bug_when>
    <thetext>Note that I&apos;ve generated newer versions of the other patches (after syncing with head and adding guards) but they&apos;re almost the same, so I&apos;m not going to bother uploading them unless someone expresses any amount of interest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126656</commentid>
    <comment_count>17</comment_count>
      <attachid>31395</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-06-17 22:09:51 -0700</bug_when>
    <thetext>Comment on attachment 31395
patch 1 - v4

This refactoring seems like a good idea to me.  Reading over this change,
I spotted some stylistic things you&apos;ll want to fix.  Marking R- on account
of those.


&gt; Index: WebCore/storage/LocalStorage.cpp
...
&gt;  LocalStorage::LocalStorage(const String&amp; path)
&gt;      : m_path(path.copy())
&gt; +    , m_syncManager(0)

nit: no need for this line since RefPtr&apos;s default constructor is equivalent.
it is commonplace in webcore to exclude lines like this.


&gt;  {
&gt; -    // If the path is empty, we know we&apos;re never going to be using the thread for anything, so don&apos;t start it.
&gt; -    // In the future, we might also want to consider removing it from the DOM in that case - &lt;rdar://problem/5960470&gt;
&gt; -    if (path.isEmpty())
&gt; -        return;

Can you comment on why it makes sense to delete this comment?


&gt; @@ -92,54 +88,18 @@ PassRefPtr&lt;StorageArea&gt; LocalStorage::st
...
&gt; -    storageArea = LocalStorageArea::create(origin, this);
&gt; +    

nit: ^^^ looks like some extraneous white spaces on that new line.


&gt; Index: WebCore/storage/LocalStorageArea.cpp
...
&gt;  void LocalStorageArea::scheduleFinalSync()
&gt;  {
&gt; +    ASSERT(isMainThread());
&gt; +    if (!m_syncManager)
&gt; +        return;
&gt; +    

nit: ^^^ looks like some extraneous white spaces on that new line.


&gt; Index: WebCore/storage/StorageSyncManager.cpp
...
&gt; +void StorageSyncManager::close()
...
&gt; +    

nit: ^^^ looks like some extraneous white spaces on that new line.


&gt; +bool StorageSyncManager::scheduleImport(PassRefPtr&lt;LocalStorageArea&gt; area)
&gt;  {
&gt;      ASSERT(isMainThread());
&gt; -
&gt; +    

nit: ^^^ looks like some extraneous white spaces on that new line.


&gt; +void StorageSyncManager::scheduleSync(PassRefPtr&lt;LocalStorageArea&gt; area)
&gt;  {
&gt;      ASSERT(isMainThread());
&gt; +    

nit: ^^^ looks like some extraneous white spaces on that new line.


&gt;      if (m_thread)
&gt;          m_thread-&gt;scheduleSync(area);
&gt;  }

&gt; Index: WebCore/storage/StorageSyncManager.h
...
&gt; +    class StorageSyncManager: public ThreadSafeShared&lt;StorageSyncManager&gt; {

nit: need a space before the &quot;:&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126754</commentid>
    <comment_count>18</comment_count>
      <attachid>31504</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-18 12:54:07 -0700</bug_when>
    <thetext>Created attachment 31504
patch 1 - v5

(In reply to comment #17)
&gt; &gt;  {
&gt; &gt; -    // If the path is empty, we know we&apos;re never going to be using the thread for anything, so don&apos;t start it.
&gt; &gt; -    // In the future, we might also want to consider removing it from the DOM in that case - &lt;rdar://problem/5960470&gt;
&gt; &gt; -    if (path.isEmpty())
&gt; &gt; -        return;
&gt; 
&gt; Can you comment on why it makes sense to delete this comment?

The comment just doesn&apos;t really fit in anywhere now.  The patch check is gone since the manager now handles that stuff and the comment doesn&apos;t reflect the current thinking.  (https://bugs.webkit.org/show_bug.cgi?id=25894)

Once the re-factoring is done, it&apos;ll be easier to fix the behavior for WebKit while allowing browsers (with different philosophies) to opt out.  Doing so earlier will just make the diffs a lot more messy.  And given that this has been a problem since the beginning, I don&apos;t think it&apos;s a big deal to wait a bit on it.  :-)

&gt; &gt; @@ -92,54 +88,18 @@ PassRefPtr&lt;StorageArea&gt; LocalStorage::st
&gt; ...
&gt; &gt; -    storageArea = LocalStorageArea::create(origin, this);
&gt; &gt; +    
&gt; 
&gt; nit: ^^^ looks like some extraneous white spaces on that new line.

The spacing is as it was originally...I just removed an extra tab it appears.  I think the spacing is proper as it is now.

&gt; 
&gt; 
&gt; &gt; Index: WebCore/storage/LocalStorageArea.cpp
&gt; ...
&gt; &gt;  void LocalStorageArea::scheduleFinalSync()
&gt; &gt;  {
&gt; &gt; +    ASSERT(isMainThread());
&gt; &gt; +    if (!m_syncManager)
&gt; &gt; +        return;
&gt; &gt; +    
&gt; 
&gt; nit: ^^^ looks like some extraneous white spaces on that new line.

I guess I could remove it, but that code is logically grouped together.  It&apos;s doing sanity checks and deciding if it should bail completely...essentially testing assumptions which are made throughout the rest of the function.  I don&apos;t like how it reads when you remove the space, but I&apos;ll do it if you insist.

&gt; 
&gt; 
&gt; &gt; Index: WebCore/storage/StorageSyncManager.cpp
&gt; ...
&gt; &gt; +void StorageSyncManager::close()
&gt; ...
&gt; &gt; +    
&gt; 
&gt; nit: ^^^ looks like some extraneous white spaces on that new line.
&gt; 
&gt; 
&gt; &gt; +bool StorageSyncManager::scheduleImport(PassRefPtr&lt;LocalStorageArea&gt; area)
&gt; &gt;  {
&gt; &gt;      ASSERT(isMainThread());
&gt; &gt; -
&gt; &gt; +    
&gt; 
&gt; nit: ^^^ looks like some extraneous white spaces on that new line.
&gt; 
&gt; 
&gt; &gt; +void StorageSyncManager::scheduleSync(PassRefPtr&lt;LocalStorageArea&gt; area)
&gt; &gt;  {
&gt; &gt;      ASSERT(isMainThread());
&gt; &gt; +    
&gt; 
&gt; nit: ^^^ looks like some extraneous white spaces on that new line.

Same as above...I&apos;m putting a space between where I&apos;m testing assumptions and where the real code is.  This was done often in the code I started with, but I did add in a bunch of spaces to make it all consistent.

I went ahead and made all the changes you asked for because making progress is more important than these nits, but I think they&apos;ve decreased readability and consistency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127061</commentid>
    <comment_count>19</comment_count>
      <attachid>31571</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-19 16:32:39 -0700</bug_when>
    <thetext>Created attachment 31571
patch 1 - v6

Realized I misinterpreted Darin&apos;s comments.  Added back in the new lines without the trailing spaces.

I&apos;m pretty sure this is ready to +.  :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127459</commentid>
    <comment_count>20</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-06-22 14:56:25 -0700</bug_when>
    <thetext>Sorry I&apos;ve been absent through this whole process - I&apos;d like to take a thorough look before this lands, which I am doing right now.  I&apos;ll be more available from here on out!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127460</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-06-22 15:03:31 -0700</bug_when>
    <thetext>&gt; Sorry I&apos;ve been absent through this whole process - I&apos;d like to take a thorough
&gt; look before this lands, which I am doing right now.  I&apos;ll be more available
&gt; from here on out!

Looks like I just missed your message :(  I went ahead and committed this patch as http://trac.webkit.org/changeset/44959.

I&apos;m happy to revert or revise as you suggest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127464</commentid>
    <comment_count>22</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-22 15:13:29 -0700</bug_when>
    <thetext>If it&apos;s ok, I&apos;d like to keep this in for now (so that I can prepare the next patch).  These patches are really affecting my ability to get LocalStorage working in Chromium, and that in turn is holding up other people/projects (like extensions).  I really did want you feedback before we started checking anything in, but I felt somewhat backed into a corner.

There still are plenty of other patches to fix any issues you might have with the first patch, and we can always back the first out if there&apos;s some major architectural flaw.

As I&apos;ve mentioned (via private mail) I&apos;m more than happy to come by Apple to talk these patches through in person, on IRC, or whatever.  I know in person isn&apos;t normal, but it&apos;d probably be most efficient (and an excuse for me to ride my motorcycle :-).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127473</commentid>
    <comment_count>23</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-06-22 15:44:32 -0700</bug_when>
    <thetext>None of that was the issue - timing and availability was all.

Please keep me CC&apos;ed on future patches going forward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127477</commentid>
    <comment_count>24</comment_count>
      <attachid>31685</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-22 15:46:53 -0700</bug_when>
    <thetext>Created attachment 31685
patch 2 - v2

Simplify the interaction between LocalStorageArea/SessionStorageArea and StorageArea by creating a &quot;blockUntilImportComplete()&quot; function rather than bouncing back and forth between the child and parent classes in a somewhat unintuitive manner.

This patch also paves the way for LocalStorageArea and SessionStorageArea being merged into one.  It&apos;s part of several in a set which are separating syncing (to disk) code from the rest of the implementation so that local storage and session storage&apos;s code can be unified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127482</commentid>
    <comment_count>25</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-06-22 15:55:07 -0700</bug_when>
    <thetext>In general we try not to keep reusing the same back for a sequence of patches.  One bug -&gt; one patch makes it possible to track changes.  Could we try opening a new bug for the next patch(es) in the sequence please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127483</commentid>
    <comment_count>26</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-22 15:57:43 -0700</bug_when>
    <thetext>So f(In reply to comment #23)
&gt; Please keep me CC&apos;ed on future patches going forward. 

Pretty much all the work is happening in this bug, but I&apos;ll definitely keep that in mind in the future.

Here are the only bugs about LocalStorage that _might_ have been of interest:
https://bugs.webkit.org/show_bug.cgi?id=26356
https://bugs.webkit.org/show_bug.cgi?id=25970

These are even less related:
https://bugs.webkit.org/show_bug.cgi?id=26154
https://bugs.webkit.org/show_bug.cgi?id=26180

P.S. It&apos;d be awesome if you can take a look at the next patch today.  (It&apos;s pretty straightforward.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127486</commentid>
    <comment_count>27</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-22 16:01:25 -0700</bug_when>
    <thetext>Jeremy, stop monopolizing bradee-oh&apos;s attention! :) We need him for this bug: https://bugs.webkit.org/show_bug.cgi?id=26054</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127488</commentid>
    <comment_count>28</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-22 16:02:38 -0700</bug_when>
    <thetext>Moved discussion of the second patch to a new thread as requested: https://bugs.webkit.org/show_bug.cgi?id=26629

I&apos;m leaving patches 3-5 here for reference (until I cut a &quot;real&quot; version of each).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127677</commentid>
    <comment_count>29</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-06-23 13:47:15 -0700</bug_when>
    <thetext>Adding the broken out bugs as dependencies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128865</commentid>
    <comment_count>30</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-29 13:20:30 -0700</bug_when>
    <thetext>So is this bug still waiting to be landed?  Or should it be closed?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30936</attachid>
            <date>2009-06-03 17:48:45 -0700</date>
            <delta_ts>2009-06-04 18:24:37 -0700</delta_ts>
            <desc>The first patch.</desc>
            <filename>first.patch</filename>
            <type>text/plain</type>
            <size>41354</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDQwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjIgQEAKKzIwMDktMDYtMDMgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rmlyc3Qgc3RlcCBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUz
NzYKKworICAgICAgICBBZGQgU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcC9oCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorCisgICAgICAgIElu
IHByZXBhcmF0aW9uIGZvciBjb21iaW5pbmcgU2Vzc2lvblN0b3JhZ2UgYW5kIExvY2FsU3RvcmFn
ZSBpbnRvIGEKKyAgICAgICAgc2luZ2xlIFN0b3JhZ2VNYW5hZ2VyLCBtb3ZlIHRoZSBzeW5jaW5n
IGJpdHMgb3V0IG9mIExvY2FsU3RvcmFnZSBhbmQKKyAgICAgICAgaW50byBpdHMgb3duIGNsYXNz
LgorCisgICAgICAgIFRoZSBuZXh0IHN0ZXAgaXMgdG8gY29tYmluZSBMb2NhbFN0b3JhZ2VBcmVh
IGFuZCBTZXNzaW9uU3RvcmFnZUFyZWEKKyAgICAgICAgaW50byBvbmUuICBUaGVuIFNlc3Npb25T
dG9yYWdlIGFuZCBMb2NhbFN0b3JhZ2UgY2FuIGJlIGNvbWJpbmVkLgorCisgICAgICAgIE5vdGUg
dGhhdCBjb21iaW5pbmcgdGhlbSB3aWxsIGN1dCBkb3duIG9uIGNvZGUgcGF0aHMgdGhhdCBtdXN0
IGJlCisgICAgICAgIHByb3hpZWQsIGVsaW1pbmF0ZSB2aXJ0dWFsIGRpc3BhdGNoLCBhbmQgYWxs
b3cgQ2hyb21pdW0gdG8gKGV2ZW50dWFsbHkpCisgICAgICAgIHdyaXRlIGhpc3RvcmljYWwgc2Vz
c2lvblN0b3JhZ2UgdG8gZGlzayB3aGVuIG1lbW9yeSBpcyBnZXR0aW5nIHRpZ2h0LgorCisgICAg
ICAgIEFsc28gcmVtb3ZlIGEgY291cGxlIGJpdHMgb2YgY3J1ZnQgaW5jbHVkaW5nIGNvZGUgZm9y
IHF1b3RhcyB3aGljaCBpcworICAgICAgICB1bm5lY2Vzc2FyeSAoc2luY2UgYSBtZXRhLWRhdGEg
ZGIgaXMgdW5uZWNlc3Nhcnkgc2luY2UgeW91IGNhbiBqdXN0CisgICAgICAgIGNvdW50IGJ5dGVz
IGFzIHlvdSByZWFkIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlcyBpbnRvIG1lbW9yeSkuCisK
KyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
b2NhbFN0b3JhZ2U6OkxvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3Jh
Z2U6OnN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZTo6Y2xvc2Up
OgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlLmg6CisgICAgICAgICogc3RvcmFnZS9M
b2NhbFN0b3JhZ2VBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZUFyZWE6
OkxvY2FsU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6
c2NoZWR1bGVGaW5hbFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6
c3luY1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6cGVy
Zm9ybUltcG9ydCk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmg6CisgICAg
ICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VBcmVhOjpjcmVhdGUpOgorICAgICAgICAqIHN0b3Jh
Z2UvTG9jYWxTdG9yYWdlVGFzay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VU
YXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmg6
CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjopOgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlSW1wb3J0KToKKyAgICAgICAgKiBzdG9yYWdlL0xv
Y2FsU3RvcmFnZVRocmVhZC5jcHA6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJl
YWQuaDoKKyAgICAgICAgKiBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmg6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6U3RvcmFnZVN5
bmNNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6ZnVsbERh
dGFiYXNlRmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVN5bmNNYW5hZ2VyOjpj
bG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlU3luY01hbmFnZXI6OnNjaGVkdWxlSW1w
b3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6c2NoZWR1bGVTeW5j
KToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmguCisgICAgICAgIChXZWJDb3JlOjopOgorCiAy
MDA5LTA2LTAzICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IE5vdCByZXZpZXdlZCwgQ2hyb21pdW0gYnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA0
NDM2MSkKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTIwNzQs
NyArMjA3NCw5IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VFdmVudC5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnQuaCBcCiAJV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VNYXAuY3BwIFwKLQlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5o
CisJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuaCBcCisJV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VTeW5jTWFuYWdlci5jcHAgXAorCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIu
aAogZW5kaWYgIyBFTkQgRU5BQkxFX0RPTV9TVE9SQUdFCiAKICMgLS0tLQpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lv
biA0NDM2MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEzNDIs
NiArMTM0Miw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ET01fU1RPUkFHRT0xKSAKICAg
ICAgICAgc3RvcmFnZS9TdG9yYWdlRXZlbnQuY3BwIFwKICAgICAgICAgc3RvcmFnZS9TZXNzaW9u
U3RvcmFnZS5jcHAgXAogICAgICAgICBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJlYS5jcHAgXAor
ICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAgXAogICAgICAgICBiaW5kaW5n
cy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCiAKICAgICBJRExfQklORElOR1MgKz0gXApJbmRleDog
V2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
U291cmNlcy5ia2wJKHJldmlzaW9uIDQ0MzYxKQorKysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5i
a2wJKHdvcmtpbmcgY29weSkKQEAgLTEwMTMsNiArMTAxMyw3IEBAIFRoaXMgZmlsZSBjb250YWlu
cyB0aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlTWFwLmNwcAog
ICAgICAgICBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmNwcAogICAgICAgICBzdG9yYWdlL1Nlc3Np
b25TdG9yYWdlQXJlYS5jcHAKKyAgICAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3Bw
CiAgICAgPC9zZXQ+CiAKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNf
WE1MIj4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24g
NDQzNjEpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTQ2Myw2ICsxNTQ2MywxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3Jh
Z2VcU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcVmVyc2lvbkNoYW5nZUNhbGxiYWNrLmgiCiAJCQkJ
PgogCQkJPC9GaWxlPgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDQ0MzYxKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQyNTYsNiArNDI1Niw4IEBACiAJCUMwREZD
ODcwMERCNjg0MUEwMDNFQUU3QyAvKiBKU0NvbnNvbGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBERkM4NkYwREI2ODQxQTAwM0VBRTdD
IC8qIEpTQ29uc29sZUN1c3RvbS5jcHAgKi87IH07CiAJCUMxMDVEQTYyMEYzQUE2OEYwMDFERDQ0
RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMTA1REE2MTBGM0FBNjhGMDAxREQ0NEYgLyogVGV4dEVu
Y29kaW5nRGV0ZWN0b3JJQ1UuY3BwICovOyB9OwogCQlDMTA1REE2NDBGM0FBNkI4MDAxREQ0NEYg
LyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMxMDVEQTYzMEYzQUE2QjgwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdE
ZXRlY3Rvci5oICovOyB9OworCQlDNTY3MDEwNDBGRDZGODE2MDAxOUIwM0QgLyogU3RvcmFnZVN5
bmNNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDNTY3MDEwMjBGRDZGODE2MDAxOUIwM0QgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggKi87IH07
CisJCUM1NjcwMTA1MEZENkY4MTYwMDE5QjAzRCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU2NzAxMDMwRkQ2
RjgxNjAwMTlCMDNEIC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAgKi87IH07CiAJCUM2RDc0QUQ1
MDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0QUQzMDlBQTI4MkUwMDBC
MEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLzsgfTsKIAkJQzZENzRBRTQwOUFB
MjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFFMzA5QUEyOTBBMDAwQjBB
NTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLzsgfTsKIAkJRDA1Q0VEMjkwQTQw
QkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDVDRUQyNzBBNDBCQjJDMDBDNUFGMzggLyog
Rm9ybWF0QmxvY2tDb21tYW5kLmNwcCAqLzsgfTsKQEAgLTkwNTMsNiArOTA1NSw4IEBACiAJCUMw
REZDODZGMERCNjg0MUEwMDNFQUU3QyAvKiBKU0NvbnNvbGVDdXN0b20uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDb25zb2xlQ3VzdG9tLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzEwNURBNjEwRjNBQTY4RjAwMURENDRGIC8qIFRleHRFbmNv
ZGluZ0RldGVjdG9ySUNVLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzEwNURBNjMwRjNBQTZCODAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRFbmNvZGluZ0RldGVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1NjcwMTAyMEZENkY4MTYwMDE5QjAzRCAvKiBT
dG9yYWdlU3luY01hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Rv
cmFnZVN5bmNNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1NjcwMTAz
MEZENkY4MTYwMDE5QjAzRCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNl
bGVjdGlvbkxpc3RMZXZlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2Rp
ZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZE
NzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2
ZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDVDRUQyNzBBNDBCQjJDMDBD
NUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtOTY0Miw2ICs5NjQ2LDggQEAKIAkJCQk1MUUwQkFCRDBEQTU1NDg0MDBBOUU0
MTcgLyogU3RvcmFnZUV2ZW50LmlkbCAqLywKIAkJCQk1MUUwQkIzNzBEQTVBQ0I2MDBBOUU0MTcg
LyogU3RvcmFnZU1hcC5jcHAgKi8sCiAJCQkJNTFFMEJCMzYwREE1QUNCNjAwQTlFNDE3IC8qIFN0
b3JhZ2VNYXAuaCAqLywKKwkJCQlDNTY3MDEwMjBGRDZGODE2MDAxOUIwM0QgLyogU3RvcmFnZVN5
bmNNYW5hZ2VyLmggKi8sCisJCQkJQzU2NzAxMDMwRkQ2RjgxNjAwMTlCMDNEIC8qIFN0b3JhZ2VT
eW5jTWFuYWdlci5jcHAgKi8sCiAJCQkpOwogCQkJaW5kZW50V2lkdGggPSA0OwogCQkJcGF0aCA9
IHN0b3JhZ2U7CkBAIC0xNjc4OCw2ICsxNjc5NCw3IEBACiAJCQkJODQ1RTcyRjgwRkQyNjFFRTAw
QTg3RDc5IC8qIEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ1RTcyRkMwRkQyNjIzOTAw
QTg3RDc5IC8qIFNWR0ZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgxRUJGM0IwRkQzNEY0
MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUM1Njcw
MTA0MEZENkY4MTYwMDE5QjAzRCAvKiBTdG9yYWdlU3luY01hbmFnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpAQCAtMTg3ODEsNiArMTg3ODgsNyBAQAogCQkJCTA4MjM0MUM1MEZDRjNBOTUwMEQ3NUJENiAv
KiBXTUxTZWxlY3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg0NUU3MkZCMEZEMjYy
MzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDgxRUJGM0Ew
RkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQzU2NzAxMDUwRkQ2RjgxNjAwMTlCMDNEIC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCShyZXZpc2lvbiA0NDM2
MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5o
IgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2Vy
LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC02MiwxNSArNjMsMTAgQEAgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IExvY2FsU3RvcmFn
ZTo6bAogCiBMb2NhbFN0b3JhZ2U6OkxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCiAg
ICAgOiBtX3BhdGgocGF0aC5jb3B5KCkpCisgICAgLCBtX3N5bmNNYW5hZ2VyKDApCiB7Ci0gICAg
Ly8gSWYgdGhlIHBhdGggaXMgZW1wdHksIHdlIGtub3cgd2UncmUgbmV2ZXIgZ29pbmcgdG8gYmUg
dXNpbmcgdGhlIHRocmVhZCBmb3IgYW55dGhpbmcsIHNvIGRvbid0IHN0YXJ0IGl0LgotICAgIC8v
IEluIHRoZSBmdXR1cmUsIHdlIG1pZ2h0IGFsc28gd2FudCB0byBjb25zaWRlciByZW1vdmluZyBp
dCBmcm9tIHRoZSBET00gaW4gdGhhdCBjYXNlIC0gPHJkYXI6Ly9wcm9ibGVtLzU5NjA0NzA+Ci0g
ICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3RocmVhZCA9
IExvY2FsU3RvcmFnZVRocmVhZDo6Y3JlYXRlKCk7Ci0gICAgbV90aHJlYWQtPnN0YXJ0KCk7Ci0g
ICAgbV90aHJlYWQtPnNjaGVkdWxlSW1wb3J0KHRoaXMpOworICAgIGlmICghcGF0aC5pc0VtcHR5
KCkpCisgICAgICAgIG1fc3luY01hbmFnZXIgPSBTdG9yYWdlU3luY01hbmFnZXI6OmNyZWF0ZSht
X3BhdGgpOwogfQogCiBMb2NhbFN0b3JhZ2U6On5Mb2NhbFN0b3JhZ2UoKQpAQCAtOTAsNTQgKzg2
LDE4IEBAIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IExvY2FsU3RvcmFnZTo6c3QKICAgICAvLyBU
byBrbm93IGlmIGFuIGFyZWEgaGFzIHByZXZpb3VzbHkgYmVlbiBlc3RhYmxpc2hlZCwgd2UgbmVl
ZCB0byB3YWl0IHVudGlsIHRoaXMgTG9jYWxTdG9yYWdlIAogICAgIC8vIG9iamVjdCBoYXMgZmlu
aXNoZWQgaXQncyBBcmVhSW1wb3J0IHRhc2suCiAKLQogICAgIC8vIEZJWE1FOiBJZiB0aGUgc3Rv
cmFnZSBhcmVhIGlzIGJlaW5nIGVzdGFibGlzaGVkIGZvciB0aGUgZmlyc3QgdGltZSBoZXJlLCB3
ZSBuZWVkIHRvIAogICAgIC8vIHN5bmMgaXRzIGV4aXN0YW5jZSBhbmQgcXVvdGEgb3V0IHRvIGRp
c2sgdmlhIGFuIHRhc2sgb2YgdHlwZSBBcmVhU3luYwogCiAgICAgUmVmUHRyPExvY2FsU3RvcmFn
ZUFyZWE+IHN0b3JhZ2VBcmVhOwogICAgIGlmIChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFN
YXAuZ2V0KG9yaWdpbikpCiAgICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7Ci0g
ICAgICAgIAotICAgIHN0b3JhZ2VBcmVhID0gTG9jYWxTdG9yYWdlQXJlYTo6Y3JlYXRlKG9yaWdp
biwgdGhpcyk7CisgICAgCisgICAgc3RvcmFnZUFyZWEgPSBMb2NhbFN0b3JhZ2VBcmVhOjpjcmVh
dGUob3JpZ2luLCBtX3N5bmNNYW5hZ2VyKTsKICAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmln
aW4sIHN0b3JhZ2VBcmVhKTsKICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwogfQog
Ci1TdHJpbmcgTG9jYWxTdG9yYWdlOjpmdWxsRGF0YWJhc2VGaWxlbmFtZShTZWN1cml0eU9yaWdp
biogb3JpZ2luKQotewotICAgIC8vIEZJWE1FOiBPbmNlIHdlIGFjdHVhbGx5IHRyYWNrIG9yaWdp
bi9xdW90YSBlbnRyaWVzIHRvIHNlZSB3aGljaCBvcmlnaW5zIGhhdmUgbG9jYWwgc3RvcmFnZSBl
c3RhYmxpc2hlZCwKLSAgICAvLyB3ZSB3aWxsIHJldHVybiBhbiBlbXB0eSBwYXRoIG5hbWUgaWYg
dGhlIG9yaWdpbiBpc24ndCBhbGxvd2VkIHRvIGhhdmUgTG9jYWxTdG9yYWdlLgotICAgIC8vIFdl
J2xsIG5lZWQgdG8gd2FpdCBoZXJlIHVudGlsIHRoZSBBcmVhSW1wb3J0IHRhc2sgdG8gY29tcGxl
dGUgYmVmb3JlIG1ha2luZyB0aGF0IGRlY2lzaW9uLgotCi0gICAgaWYgKG1fcGF0aC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIEFTU0VSVChvcmlnaW4pOwotICAg
IGlmICghb3JpZ2luKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoIW1ha2VB
bGxEaXJlY3RvcmllcyhtX3BhdGgpKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlZCB0byBj
cmVhdGUgTG9jYWxTdG9yYWdlIGRhdGFiYXNlIHBhdGggJXMiLCBtX3BhdGgudXRmOCgpLmRhdGEo
KSk7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KG1fcGF0aCwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSAr
ICIubG9jYWxzdG9yYWdlIik7Ci19Ci0KLXZvaWQgTG9jYWxTdG9yYWdlOjpwZXJmb3JtSW1wb3J0
KCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIEZJWE1FOiBJbXBv
cnQgYWxsIGtub3duIGxvY2FsIHN0b3JhZ2Ugb3JpZ2lucyBoZXJlIGFsb25nIHdpdGggdGhlaXIg
cXVvdGFzCi19Ci0KLXZvaWQgTG9jYWxTdG9yYWdlOjpwZXJmb3JtU3luYygpCi17Ci0gICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBGSVhNRTogV3JpdGUgb3V0IG5ldyBvcmln
aW5zIGFuZCBxdW90YXMgaGVyZQotfQotCiB2b2lkIExvY2FsU3RvcmFnZTo6Y2xvc2UoKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0xNDUsMjggKzEwNSw4IEBAIHZvaWQgTG9j
YWxTdG9yYWdlOjpjbG9zZSgpCiAgICAgTG9jYWxTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKExvY2FsU3RvcmFnZUFyZWFNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
CiAgICAgICAgIGl0LT5zZWNvbmQtPnNjaGVkdWxlRmluYWxTeW5jKCk7Ci0KLSAgICBpZiAobV90
aHJlYWQpIHsKLSAgICAgICAgbV90aHJlYWQtPnRlcm1pbmF0ZSgpOwotICAgICAgICBtX3RocmVh
ZCA9IDA7Ci0gICAgfQotfQotCi1ib29sIExvY2FsU3RvcmFnZTo6c2NoZWR1bGVJbXBvcnQoUGFz
c1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVhKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0KLSAgICBpZiAobV90aHJlYWQpCi0gICAgICAgIG1fdGhyZWFkLT5zY2hlZHVsZUlt
cG9ydChhcmVhKTsKLQotICAgIHJldHVybiBtX3RocmVhZDsKLX0KLQotdm9pZCBMb2NhbFN0b3Jh
Z2U6OnNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCi17Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV90aHJlYWQpCi0gICAgICAgIG1f
dGhyZWFkLT5zY2hlZHVsZVN5bmMoYXJlYSk7CisgICAgCisgICAgbV9zeW5jTWFuYWdlciA9IDA7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2Nh
bFN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmgJ
KHJldmlzaW9uIDQ0MzYxKQorKysgV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNywyMCArMjcsMTcgQEAKICNkZWZpbmUgTG9jYWxTdG9yYWdlX2gKIAog
I2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEuaCIKLSNpbmNsdWRlICJMb2NhbFN0b3JhZ2VUYXNr
LmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW5IYXNoLmgiCiAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFBhZ2VHcm91cDsK
ICAgICBjbGFzcyBTdG9yYWdlQXJlYTsKKyAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI7CiAK
LSAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxMb2NhbFN0
b3JhZ2U+IHsKKyAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMb2Nh
bFN0b3JhZ2U+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIH5Mb2NhbFN0b3JhZ2UoKTsKIApAQCAt
NDgsOSArNDUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgUGFzc1JlZlB0cjxT
dG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qKTsKIAotICAgICAgICBib29s
IHNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4pOwotICAgICAgICB2
b2lkIHNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKLQogICAgICAg
ICB2b2lkIGNsb3NlKCk7CiAKICAgICBwcml2YXRlOgpAQCAtNTksMjEgKzUzLDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiwgUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+IExvY2Fs
U3RvcmFnZUFyZWFNYXA7CiAgICAgICAgIExvY2FsU3RvcmFnZUFyZWFNYXAgbV9zdG9yYWdlQXJl
YU1hcDsKIAotICAgICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPiBtX3RocmVhZDsKLQot
ICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgc3ViamVjdCB0byB0aHJlYWQgc3luY2hy
b25pemF0aW9uIGlzc3VlcwotICAgIHB1YmxpYzoKLSAgICAgICAgLy8gVG8gYmUgY2FsbGVkIGZy
b20gdGhlIGJhY2tncm91bmQgdGhyZWFkOgotICAgICAgICBTdHJpbmcgZnVsbERhdGFiYXNlRmls
ZW5hbWUoU2VjdXJpdHlPcmlnaW4qKTsKLQotICAgICAgICB2b2lkIHBlcmZvcm1JbXBvcnQoKTsK
LSAgICAgICAgdm9pZCBwZXJmb3JtU3luYygpOwotCi0gICAgcHJpdmF0ZToKICAgICAgICAgU3Ry
aW5nIG1fcGF0aDsKLQotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiwgdW5zaWduZWQgbG9uZyBsb25nLCBTZWN1cml0eU9yaWdpbkhhc2g+IFNlY3VyaXR5T3Jp
Z2luUXVvdGVNYXA7Ci0gICAgICAgIFNlY3VyaXR5T3JpZ2luUXVvdGVNYXAgbV9zZWN1cml0eU9y
aWdpblF1b3RlTWFwOworICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N5bmNN
YW5hZ2VyOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
c3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3Jh
Z2UvTG9jYWxTdG9yYWdlQXJlYS5jcHAJKHJldmlzaW9uIDQ0MzYxKQorKysgV2ViQ29yZS9zdG9y
YWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxOSArNDMsMTcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gSW5zdGVhZCwgcXVldWUgdXAgYSBiYXRjaCBvZiBp
dGVtcyB0byBzeW5jIGFuZCBhY3R1YWxseSBkbyB0aGUgc3luYyBhdCB0aGUgZm9sbG93aW5nIGlu
dGVydmFsLgogc3RhdGljIGNvbnN0IGRvdWJsZSBMb2NhbFN0b3JhZ2VTeW5jSW50ZXJ2YWwgPSAx
LjA7CiAKLUxvY2FsU3RvcmFnZUFyZWE6OkxvY2FsU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiwgTG9jYWxTdG9yYWdlKiBsb2NhbFN0b3JhZ2UpCitMb2NhbFN0b3JhZ2VBcmVhOjpM
b2NhbFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFn
ZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKICAgICA6IFN0b3JhZ2VBcmVhKG9yaWdpbikKICAg
ICAsIG1fc3luY1RpbWVyKHRoaXMsICZMb2NhbFN0b3JhZ2VBcmVhOjpzeW5jVGltZXJGaXJlZCkK
ICAgICAsIG1faXRlbXNDbGVhcmVkKGZhbHNlKQogICAgICwgbV9maW5hbFN5bmNTY2hlZHVsZWQo
ZmFsc2UpCi0gICAgLCBtX2xvY2FsU3RvcmFnZShsb2NhbFN0b3JhZ2UpCisgICAgLCBtX3N5bmNN
YW5hZ2VyKHN5bmNNYW5hZ2VyKQogICAgICwgbV9jbGVhckl0ZW1zV2hpbGVTeW5jaW5nKGZhbHNl
KQogICAgICwgbV9zeW5jU2NoZWR1bGVkKGZhbHNlKQogICAgICwgbV9pbXBvcnRDb21wbGV0ZShm
YWxzZSkKIHsKLSAgICBBU1NFUlQobV9sb2NhbFN0b3JhZ2UpOwotICAgIAotICAgIGlmICghbV9s
b2NhbFN0b3JhZ2UtPnNjaGVkdWxlSW1wb3J0KHRoaXMpKQorICAgIGlmICghbV9zeW5jTWFuYWdl
ciB8fCAhbV9zeW5jTWFuYWdlci0+c2NoZWR1bGVJbXBvcnQodGhpcykpCiAgICAgICAgIG1faW1w
b3J0Q29tcGxldGUgPSB0cnVlOwogfQogCkBAIC02Niw2ICs2NCwxMCBAQCBMb2NhbFN0b3JhZ2VB
cmVhOjp+TG9jYWxTdG9yYWdlQXJlYSgpCiAKIHZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6c2NoZWR1
bGVGaW5hbFN5bmMoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFt
X3N5bmNNYW5hZ2VyKQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgaWYgKG1fc3luY1RpbWVy
LmlzQWN0aXZlKCkpCiAgICAgICAgIG1fc3luY1RpbWVyLnN0b3AoKTsKICAgICBlbHNlIHsKQEAg
LTE2MSwyOCArMTYzLDYgQEAgdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKGNvbnN0
IAogICAgIGludGVybmFsUmVtb3ZlSXRlbShrZXksIGZyYW1lKTsKIH0KIAotYm9vbCBMb2NhbFN0
b3JhZ2VBcmVhOjpjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKLXsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG1faW1wb3J0Q29tcGxldGUpCi0gICAgICAg
IHJldHVybiBpbnRlcm5hbENvbnRhaW5zKGtleSk7Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9pbXBvcnRMb2NrKTsKLSAgICBpZiAobV9pbXBvcnRDb21wbGV0ZSkKLSAgICAgICAgcmV0dXJu
IGludGVybmFsQ29udGFpbnMoa2V5KTsKLQotICAgIGJvb2wgY29udGFpbmVkID0gaW50ZXJuYWxD
b250YWlucyhrZXkpOwotICAgIGlmIChjb250YWluZWQpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgd2hpbGUgKCFtX2ltcG9ydENvbXBsZXRlKQotICAgICAgICBtX2ltcG9ydENvbmRpdGlv
bi53YWl0KG1faW1wb3J0TG9jayk7Ci0gICAgQVNTRVJUKG1faW1wb3J0Q29tcGxldGUpOwotCi0g
ICAgcmV0dXJuIGludGVybmFsQ29udGFpbnMoa2V5KTsKLX0KLQogdm9pZCBMb2NhbFN0b3JhZ2VB
cmVhOjppdGVtQ2hhbmdlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1
ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0yNjYsNiArMjQ2LDggQEAgdm9pZCBMb2NhbFN0b3Jh
Z2VBcmVhOjpzY2hlZHVsZUNsZWFyKCkKIHZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6c3luY1RpbWVy
RmlyZWQoVGltZXI8TG9jYWxTdG9yYWdlQXJlYT4qKQogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgaWYgKCFtX3N5bmNNYW5hZ2VyKQorICAgICAgICByZXR1cm47CiAKICAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBtX2NoYW5nZWRJdGVtcy5iZWdp
bigpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBlbmQgPSBtX2NoYW5n
ZWRJdGVtcy5lbmQoKTsKQEAgLTI4OSw3ICsyNzEsNyBAQCB2b2lkIExvY2FsU3RvcmFnZUFyZWE6
OnN5bmNUaW1lckZpcmVkKFRpCiAgICAgICAgICAgICAvLyBwZXJmb3JtU3luYyBmdW5jdGlvbi4K
ICAgICAgICAgICAgIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOwogCi0gICAgICAgICAgICBt
X2xvY2FsU3RvcmFnZS0+c2NoZWR1bGVTeW5jKHRoaXMpOworICAgICAgICAgICAgbV9zeW5jTWFu
YWdlci0+c2NoZWR1bGVTeW5jKHRoaXMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMDQsOSAr
Mjg2LDExIEBAIHZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6cGVyZm9ybUltcG9ydCgpCiB7CiAgICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLmlzT3Blbigp
KTsKKyAgICBpZiAoIW1fc3luY01hbmFnZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmlu
ZyBkYXRhYmFzZUZpbGVuYW1lID0gbV9zeW5jTWFuYWdlci0+ZnVsbERhdGFiYXNlRmlsZW5hbWUo
c2VjdXJpdHlPcmlnaW4oKSk7CiAKLSAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFtZSA9IG1fbG9j
YWxTdG9yYWdlLT5mdWxsRGF0YWJhc2VGaWxlbmFtZShzZWN1cml0eU9yaWdpbigpKTsKLSAgICAK
ICAgICBpZiAoZGF0YWJhc2VGaWxlbmFtZS5pc0VtcHR5KCkpIHsKICAgICAgICAgTE9HX0VSUk9S
KCJGaWxlbmFtZSBmb3IgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSBpcyBlbXB0eSAtIGNhbm5vdCBv
cGVuIGZvciBwZXJzaXN0ZW50IHN0b3JhZ2UiKTsKICAgICAgICAgbWFya0ltcG9ydGVkKCk7Cklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmgJKHJldmlzaW9uIDQ0MzYxKQorKysgV2Vi
Q29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMjMg
KzI5LDI0IEBACiAjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKICNpbmNsdWRlICJTdG9yYWdl
QXJlYS5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJTdG9yYWdlU3luY01h
bmFnZXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLSAgICBjbGFzcyBMb2NhbFN0b3JhZ2U7CisgICAg
Y2xhc3MgU3RvcmFnZVN5bmNNYW5hZ2VyOwogICAgIAogICAgIGNsYXNzIExvY2FsU3RvcmFnZUFy
ZWEgOiBwdWJsaWMgU3RvcmFnZUFyZWEgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+
TG9jYWxTdG9yYWdlQXJlYSgpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3Rv
cmFnZUFyZWE+IGNyZWF0ZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBMb2NhbFN0b3JhZ2UqIGxv
Y2FsU3RvcmFnZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZUFyZWEob3JpZ2lu
LCBsb2NhbFN0b3JhZ2UpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3Jh
Z2VBcmVhPiBjcmVhdGUoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdl
U3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxTdG9y
YWdlQXJlYShvcmlnaW4sIHN5bmNNYW5hZ2VyKSk7IH0KIAogICAgICAgICB2b2lkIHNjaGVkdWxl
RmluYWxTeW5jKCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBMb2NhbFN0b3JhZ2VBcmVhKFNl
Y3VyaXR5T3JpZ2luKiwgTG9jYWxTdG9yYWdlKik7CisgICAgICAgIExvY2FsU3RvcmFnZUFyZWEo
U2VjdXJpdHlPcmlnaW4qLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFn
ZXIpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBpdGVtQ2hhbmdlZChjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUq
IHNvdXJjZUZyYW1lKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGl0ZW1SZW1vdmVkKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpOwpA
QCAtNjEsNyArNjIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAogICAgICAgICBi
b29sIG1fZmluYWxTeW5jU2NoZWR1bGVkOwogCi0gICAgICAgIExvY2FsU3RvcmFnZSogbV9sb2Nh
bFN0b3JhZ2U7CisgICAgICAgIFJlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IG1fc3luY01hbmFn
ZXI7CiAKICAgICAgICAgLy8gVGhlIGRhdGFiYXNlIGhhbmRsZSB3aWxsIG9ubHkgZXZlciBiZSBv
cGVuZWQgYW5kIHVzZWQgb24gdGhlIGJhY2tncm91bmQgdGhyZWFkLgogICAgICAgICBTUUxpdGVE
YXRhYmFzZSBtX2RhdGFiYXNlOwpAQCAtNzQsNyArNzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGdldEl0ZW0oY29uc3QgU3RyaW5nJikgY29uc3Q7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKICAgICAgICAg
dmlydHVhbCB2b2lkIHJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiwgRnJhbWUqIHNvdXJjZUZyYW1l
KTsKLSAgICAgICAgdmlydHVhbCBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25z
dDsKKyAgICAgICAgLy92aXJ0dWFsIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIGNv
bnN0OwogCiAgICAgICAgIC8vIENhbGxlZCBmcm9tIHRoZSBiYWNrZ3JvdW5kIHRocmVhZAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybUltcG9ydCgpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdl
L0xvY2FsU3RvcmFnZVRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VUYXNrLmNwcAkocmV2aXNpb24gNDQzNjEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9j
YWxTdG9yYWdlVGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE0ICs0MCw2IEBAIExvY2Fs
U3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFnZVRhc2soVHlwZSAKICAgICBBU1NFUlQobV90eXBlID09
IEFyZWFJbXBvcnQgfHwgbV90eXBlID09IEFyZWFTeW5jKTsKIH0KIAotTG9jYWxTdG9yYWdlVGFz
azo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIHR5cGUsIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBz
dG9yYWdlKQotICAgIDogbV90eXBlKHR5cGUpCi0gICAgLCBtX3N0b3JhZ2Uoc3RvcmFnZSkKLXsK
LSAgICBBU1NFUlQobV9zdG9yYWdlKTsKLSAgICBBU1NFUlQobV90eXBlID09IFN0b3JhZ2VJbXBv
cnQgfHwgbV90eXBlID09IFN0b3JhZ2VTeW5jKTsKLX0KLQogTG9jYWxTdG9yYWdlVGFzazo6TG9j
YWxTdG9yYWdlVGFzayhUeXBlIHR5cGUsIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPiB0
aHJlYWQpCiAgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fdGhyZWFkKHRocmVhZCkKQEAgLTU5
LDE0ICs1MSw2IEBAIExvY2FsU3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFnZVRhc2soVHlwZSAKIHZv
aWQgTG9jYWxTdG9yYWdlVGFzazo6cGVyZm9ybVRhc2soKQogewogICAgIHN3aXRjaCAobV90eXBl
KSB7Ci0gICAgICAgIGNhc2UgU3RvcmFnZUltcG9ydDoKLSAgICAgICAgICAgIEFTU0VSVChtX3N0
b3JhZ2UpOwotICAgICAgICAgICAgbV9zdG9yYWdlLT5wZXJmb3JtSW1wb3J0KCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTdG9yYWdlU3luYzoKLSAgICAgICAgICAgIEFTU0VS
VChtX3N0b3JhZ2UpOwotICAgICAgICAgICAgbV9zdG9yYWdlLT5wZXJmb3JtU3luYygpOwotICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJlYUltcG9ydDoKICAgICAgICAgICAgIEFT
U0VSVChtX2FyZWEpOwogICAgICAgICAgICAgbV9hcmVhLT5wZXJmb3JtSW1wb3J0KCk7CkluZGV4
OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgJKHJldmlzaW9uIDQ0MzYxKQorKysgV2ViQ29y
ZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTcgKzMy
LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIExvY2FsU3RvcmFnZTsK
ICAgICBjbGFzcyBMb2NhbFN0b3JhZ2VBcmVhOwogICAgIGNsYXNzIExvY2FsU3RvcmFnZVRocmVh
ZDsKIAogICAgIGNsYXNzIExvY2FsU3RvcmFnZVRhc2sgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJl
ZDxMb2NhbFN0b3JhZ2VUYXNrPiB7CiAgICAgcHVibGljOgotICAgICAgICBlbnVtIFR5cGUgeyBT
dG9yYWdlSW1wb3J0LCBTdG9yYWdlU3luYywgQXJlYUltcG9ydCwgQXJlYVN5bmMsIFRlcm1pbmF0
ZVRocmVhZCB9OworICAgICAgICBlbnVtIFR5cGUgeyBBcmVhSW1wb3J0LCBBcmVhU3luYywgVGVy
bWluYXRlVGhyZWFkIH07CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdl
VGFzaz4gY3JlYXRlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBzdG9yYWdlKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlVGFzayhTdG9yYWdlSW1wb3J0LCBzdG9yYWdl
KSk7IH0KICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRl
SW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkgeyByZXR1cm4gYWRvcHRS
ZWYobmV3IExvY2FsU3RvcmFnZVRhc2soQXJlYUltcG9ydCwgYXJlYSkpOyB9Ci0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZVN5bmMoUGFzc1JlZlB0cjxM
b2NhbFN0b3JhZ2U+IHN0b3JhZ2UpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2VU
YXNrKFN0b3JhZ2VTeW5jLCBzdG9yYWdlKSk7IH0KICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+
IGFyZWEpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKEFyZWFTeW5jLCBh
cmVhKSk7IH0KICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3Jl
YXRlVGVybWluYXRlKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPiB0aHJlYWQpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKFRlcm1pbmF0ZVRocmVhZCwgdGhyZWFk
KSk7IH0KIApAQCAtNTAsMTIgKzQ3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSwgUGFzc1JlZlB0cjxMb2NhbFN0
b3JhZ2VBcmVhPik7Ci0gICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSwgUGFzc1JlZlB0cjxM
b2NhbFN0b3JhZ2U+KTsKICAgICAgICAgTG9jYWxTdG9yYWdlVGFzayhUeXBlLCBQYXNzUmVmUHRy
PExvY2FsU3RvcmFnZVRocmVhZD4pOwogCiAgICAgICAgIFR5cGUgbV90eXBlOwogICAgICAgICBS
ZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gbV9hcmVhOwotICAgICAgICBSZWZQdHI8TG9jYWxTdG9y
YWdlPiBtX3N0b3JhZ2U7CiAgICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+IG1fdGhy
ZWFkOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuY3Bw
CShyZXZpc2lvbiA0NDM2MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSwxOCArODUsNiBAQCB2b2lkKiBMb2NhbFN0b3JhZ2VU
aHJlYWQ6OmxvY2FsU3RvcmFnZVRoCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTG9jYWxTdG9y
YWdlVGhyZWFkOjpzY2hlZHVsZUltcG9ydChQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gc3RvcmFn
ZSkKLXsKLSAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7Ci0gICAg
bV9xdWV1ZS5hcHBlbmQoTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlSW1wb3J0KHN0b3JhZ2UpKTsK
LX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VUaHJlYWQ6OnNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExv
Y2FsU3RvcmFnZT4gc3RvcmFnZSkKLXsKLSAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYg
bV90aHJlYWRJRCk7Ci0gICAgbV9xdWV1ZS5hcHBlbmQoTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRl
U3luYyhzdG9yYWdlKSk7Ci19Ci0KIHZvaWQgTG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZUlt
cG9ydChQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCiB7CiAgICAgQVNTRVJUKCFt
X3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0xv
Y2FsU3RvcmFnZVRocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0
b3JhZ2VUaHJlYWQuaAkocmV2aXNpb24gNDQzNjEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxT
dG9yYWdlVGhyZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgTG9jYWxTdG9yYWdlOwogICAgIGNsYXNzIExvY2Fs
U3RvcmFnZUFyZWE7CiAgICAgY2xhc3MgTG9jYWxTdG9yYWdlVGFzazsKIApAQCAtNDMsOCArNDIs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgYm9vbCBzdGFydCgpOwogCi0gICAg
ICAgIHZvaWQgc2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+KTsKLSAgICAg
ICAgdm9pZCBzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+KTsKICAgICAgICAg
dm9pZCBzY2hlZHVsZUltcG9ydChQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKICAgICAg
ICAgdm9pZCBzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPik7CiAKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oCShyZXZpc2lvbiA0NDM2MSkKKysrIFdlYkNvcmUv
c3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBA
CiAjaW5jbHVkZSAiU2Vzc2lvblN0b3JhZ2VBcmVhLmgiCiAKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VT
eW5jTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5j
TWFuYWdlci5jcHAJKHJldmlzaW9uIDQ0MzYxKQkoZnJvbSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxT
dG9yYWdlLmNwcDo0NDM2MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJMb2NhbFN0b3JhZ2UuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlQXJlYS5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTdG9yYWdl
QXJlYS5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBMb2NhbFN0b3JhZ2UqPiBMb2NhbFN0b3Jh
Z2VNYXA7CisKK3N0YXRpYyBMb2NhbFN0b3JhZ2VNYXAmIGxvY2FsU3RvcmFnZU1hcCgpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VNYXAsIGxvY2FsU3RvcmFnZU1hcCwg
KCkpOworICAgIHJldHVybiBsb2NhbFN0b3JhZ2VNYXA7Cit9CisKK1Bhc3NSZWZQdHI8TG9jYWxT
dG9yYWdlPiBMb2NhbFN0b3JhZ2U6OmxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCit7
CisgICAgY29uc3QgU3RyaW5nIGxvb2t1cFBhdGggPSBwYXRoLmlzTnVsbCgpID8gU3RyaW5nKCIi
KSA6IHBhdGg7CisgICAgTG9jYWxTdG9yYWdlTWFwOjppdGVyYXRvciBpdCA9IGxvY2FsU3RvcmFn
ZU1hcCgpLmZpbmQobG9va3VwUGF0aCk7CisgICAgaWYgKGl0ID09IGxvY2FsU3RvcmFnZU1hcCgp
LmVuZCgpKSB7CisgICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZSA9IGFk
b3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2UobG9va3VwUGF0aCkpOworICAgICAgICBsb2NhbFN0b3Jh
Z2VNYXAoKS5zZXQobG9va3VwUGF0aCwgbG9jYWxTdG9yYWdlLmdldCgpKTsKKyAgICAgICAgcmV0
dXJuIGxvY2FsU3RvcmFnZS5yZWxlYXNlKCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBpdC0+
c2Vjb25kOworfQorCitMb2NhbFN0b3JhZ2U6OkxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBh
dGgpCisgICAgOiBtX3BhdGgocGF0aC5jb3B5KCkpCit7CisgICAgLy8gSWYgdGhlIHBhdGggaXMg
ZW1wdHksIHdlIGtub3cgd2UncmUgbmV2ZXIgZ29pbmcgdG8gYmUgdXNpbmcgdGhlIHRocmVhZCBm
b3IgYW55dGhpbmcsIHNvIGRvbid0IHN0YXJ0IGl0LgorICAgIC8vIEluIHRoZSBmdXR1cmUsIHdl
IG1pZ2h0IGFsc28gd2FudCB0byBjb25zaWRlciByZW1vdmluZyBpdCBmcm9tIHRoZSBET00gaW4g
dGhhdCBjYXNlIC0gPHJkYXI6Ly9wcm9ibGVtLzU5NjA0NzA+CisgICAgaWYgKHBhdGguaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RocmVhZCA9IExvY2FsU3RvcmFnZVRocmVh
ZDo6Y3JlYXRlKCk7CisgICAgbV90aHJlYWQtPnN0YXJ0KCk7CisgICAgbV90aHJlYWQtPnNjaGVk
dWxlSW1wb3J0KHRoaXMpOworfQorCitMb2NhbFN0b3JhZ2U6On5Mb2NhbFN0b3JhZ2UoKQorewor
ICAgIEFTU0VSVChsb2NhbFN0b3JhZ2VNYXAoKS5nZXQobV9wYXRoKSA9PSB0aGlzKTsKKyAgICBs
b2NhbFN0b3JhZ2VNYXAoKS5yZW1vdmUobV9wYXRoKTsKK30KKworUGFzc1JlZlB0cjxTdG9yYWdl
QXJlYT4gTG9jYWxTdG9yYWdlOjpzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlIHNl
Y3VyaXR5IG9yaWdpbiBpbiBxdWVzdGlvbiBoYXMgbmV2ZXIgaGFkIGEgc3RvcmFnZSBhcmVhIGVz
dGFibGlzaGVkLAorICAgIC8vIHdlIG5lZWQgdG8gYXNrIGEgY2xpZW50IGNhbGwgaWYgZXN0YWJs
aXNoaW5nIGl0IGlzIG9rYXkuICBJZiB0aGUgY2xpZW50IGRlbmllcyB0aGUgcmVxdWVzdCwKKyAg
ICAvLyB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBudWxsLgorICAgIC8vIFRoZSBzb3VyY2VGcmFt
ZSBhcmd1bWVudCBleGlzdHMgZm9yIHRoZSBwdXJwb3NlIG9mIGFza2luZyBhIGNsaWVudC4KKyAg
ICAvLyBUbyBrbm93IGlmIGFuIGFyZWEgaGFzIHByZXZpb3VzbHkgYmVlbiBlc3RhYmxpc2hlZCwg
d2UgbmVlZCB0byB3YWl0IHVudGlsIHRoaXMgTG9jYWxTdG9yYWdlIAorICAgIC8vIG9iamVjdCBo
YXMgZmluaXNoZWQgaXQncyBBcmVhSW1wb3J0IHRhc2suCisKKworICAgIC8vIEZJWE1FOiBJZiB0
aGUgc3RvcmFnZSBhcmVhIGlzIGJlaW5nIGVzdGFibGlzaGVkIGZvciB0aGUgZmlyc3QgdGltZSBo
ZXJlLCB3ZSBuZWVkIHRvIAorICAgIC8vIHN5bmMgaXRzIGV4aXN0YW5jZSBhbmQgcXVvdGEgb3V0
IHRvIGRpc2sgdmlhIGFuIHRhc2sgb2YgdHlwZSBBcmVhU3luYworCisgICAgUmVmUHRyPExvY2Fs
U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhOworICAgIGlmIChzdG9yYWdlQXJlYSA9IG1fc3RvcmFn
ZUFyZWFNYXAuZ2V0KG9yaWdpbikpCisgICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNl
KCk7CisgICAgICAgIAorICAgIHN0b3JhZ2VBcmVhID0gTG9jYWxTdG9yYWdlQXJlYTo6Y3JlYXRl
KG9yaWdpbiwgdGhpcyk7CisgICAgbV9zdG9yYWdlQXJlYU1hcC5zZXQob3JpZ2luLCBzdG9yYWdl
QXJlYSk7CisgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKK30KKworU3RyaW5nIExv
Y2FsU3RvcmFnZTo6ZnVsbERhdGFiYXNlRmlsZW5hbWUoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikK
K3sKKyAgICAvLyBGSVhNRTogT25jZSB3ZSBhY3R1YWxseSB0cmFjayBvcmlnaW4vcXVvdGEgZW50
cmllcyB0byBzZWUgd2hpY2ggb3JpZ2lucyBoYXZlIGxvY2FsIHN0b3JhZ2UgZXN0YWJsaXNoZWQs
CisgICAgLy8gd2Ugd2lsbCByZXR1cm4gYW4gZW1wdHkgcGF0aCBuYW1lIGlmIHRoZSBvcmlnaW4g
aXNuJ3QgYWxsb3dlZCB0byBoYXZlIExvY2FsU3RvcmFnZS4KKyAgICAvLyBXZSdsbCBuZWVkIHRv
IHdhaXQgaGVyZSB1bnRpbCB0aGUgQXJlYUltcG9ydCB0YXNrIHRvIGNvbXBsZXRlIGJlZm9yZSBt
YWtpbmcgdGhhdCBkZWNpc2lvbi4KKworICAgIGlmIChtX3BhdGguaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBBU1NFUlQob3JpZ2luKTsKKyAgICBpZiAoIW9yaWdp
bikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaWYgKCFtYWtlQWxsRGlyZWN0b3Jp
ZXMobV9wYXRoKSkgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZWQgdG8gY3JlYXRlIExvY2Fs
U3RvcmFnZSBkYXRhYmFzZSBwYXRoICVzIiwgbV9wYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChtX3BhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyAiLmxvY2Fsc3Rv
cmFnZSIpOworfQorCit2b2lkIExvY2FsU3RvcmFnZTo6cGVyZm9ybUltcG9ydCgpCit7CisgICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBGSVhNRTogSW1wb3J0IGFsbCBrbm93
biBsb2NhbCBzdG9yYWdlIG9yaWdpbnMgaGVyZSBhbG9uZyB3aXRoIHRoZWlyIHF1b3RhcworfQor
Cit2b2lkIExvY2FsU3RvcmFnZTo6cGVyZm9ybVN5bmMoKQoreworICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOworCisgICAgLy8gRklYTUU6IFdyaXRlIG91dCBuZXcgb3JpZ2lucyBhbmQgcXVv
dGFzIGhlcmUKK30KKwordm9pZCBMb2NhbFN0b3JhZ2U6OmNsb3NlKCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworCisgICAgTG9jYWxTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKKyAgICBmb3IgKExvY2FsU3RvcmFnZUFyZWFNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
CisgICAgICAgIGl0LT5zZWNvbmQtPnNjaGVkdWxlRmluYWxTeW5jKCk7CisKKyAgICBpZiAobV90
aHJlYWQpIHsKKyAgICAgICAgbV90aHJlYWQtPnRlcm1pbmF0ZSgpOworICAgICAgICBtX3RocmVh
ZCA9IDA7CisgICAgfQorfQorCitib29sIExvY2FsU3RvcmFnZTo6c2NoZWR1bGVJbXBvcnQoUGFz
c1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVhKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisKKyAgICBpZiAobV90aHJlYWQpCisgICAgICAgIG1fdGhyZWFkLT5zY2hlZHVsZUlt
cG9ydChhcmVhKTsKKworICAgIHJldHVybiBtX3RocmVhZDsKK30KKwordm9pZCBMb2NhbFN0b3Jh
Z2U6OnNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV90aHJlYWQpCisgICAgICAgIG1f
dGhyZWFkLT5zY2hlZHVsZVN5bmMoYXJlYSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwCShyZXZpc2lvbiA0NDM2
MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCwxNCArMjQsMTMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiTG9jYWxTdG9yYWdlLmgiCisjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCiAK
ICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUg
IkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5o
IgotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKQEAgLTM5LDgyICsz
OCwyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IExvY2FsU3RvcmFnZSo+IExvY2FsU3RvcmFnZU1hcDsKLQotc3RhdGljIExvY2FsU3RvcmFnZU1h
cCYgbG9jYWxTdG9yYWdlTWFwKCkKK1Bhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBTdG9y
YWdlU3luY01hbmFnZXI6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VNYXAsIGxvY2FsU3RvcmFnZU1hcCwgKCkpOwotICAg
IHJldHVybiBsb2NhbFN0b3JhZ2VNYXA7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdl
U3luY01hbmFnZXIocGF0aCkpOwogfQogCi1QYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gTG9jYWxT
dG9yYWdlOjpsb2NhbFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIGNvbnN0IFN0
cmluZyBsb29rdXBQYXRoID0gcGF0aC5pc051bGwoKSA/IFN0cmluZygiIikgOiBwYXRoOwotICAg
IExvY2FsU3RvcmFnZU1hcDo6aXRlcmF0b3IgaXQgPSBsb2NhbFN0b3JhZ2VNYXAoKS5maW5kKGxv
b2t1cFBhdGgpOwotICAgIGlmIChpdCA9PSBsb2NhbFN0b3JhZ2VNYXAoKS5lbmQoKSkgewotICAg
ICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlPiBsb2NhbFN0b3JhZ2UgPSBhZG9wdFJlZihuZXcgTG9j
YWxTdG9yYWdlKGxvb2t1cFBhdGgpKTsKLSAgICAgICAgbG9jYWxTdG9yYWdlTWFwKCkuc2V0KGxv
b2t1cFBhdGgsIGxvY2FsU3RvcmFnZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBsb2NhbFN0b3Jh
Z2UucmVsZWFzZSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKLX0KLQot
TG9jYWxTdG9yYWdlOjpMb2NhbFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBwYXRoKQorU3RvcmFnZVN5
bmNNYW5hZ2VyOjpTdG9yYWdlU3luY01hbmFnZXIoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIDog
bV9wYXRoKHBhdGguY29weSgpKQogewotICAgIC8vIElmIHRoZSBwYXRoIGlzIGVtcHR5LCB3ZSBr
bm93IHdlJ3JlIG5ldmVyIGdvaW5nIHRvIGJlIHVzaW5nIHRoZSB0aHJlYWQgZm9yIGFueXRoaW5n
LCBzbyBkb24ndCBzdGFydCBpdC4KLSAgICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSBtaWdodCBhbHNv
IHdhbnQgdG8gY29uc2lkZXIgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgRE9NIGluIHRoYXQgY2FzZSAt
IDxyZGFyOi8vcHJvYmxlbS81OTYwNDcwPgotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIEFTU0VSVCghbV9wYXRoLmlzRW1wdHkoKSk7CiAKICAgICBtX3RocmVh
ZCA9IExvY2FsU3RvcmFnZVRocmVhZDo6Y3JlYXRlKCk7CiAgICAgbV90aHJlYWQtPnN0YXJ0KCk7
Ci0gICAgbV90aHJlYWQtPnNjaGVkdWxlSW1wb3J0KHRoaXMpOwotfQotCi1Mb2NhbFN0b3JhZ2U6
On5Mb2NhbFN0b3JhZ2UoKQotewotICAgIEFTU0VSVChsb2NhbFN0b3JhZ2VNYXAoKS5nZXQobV9w
YXRoKSA9PSB0aGlzKTsKLSAgICBsb2NhbFN0b3JhZ2VNYXAoKS5yZW1vdmUobV9wYXRoKTsKIH0K
IAotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gTG9jYWxTdG9yYWdlOjpzdG9yYWdlQXJlYShTZWN1
cml0eU9yaWdpbiogb3JpZ2luKQorU3RyaW5nIFN0b3JhZ2VTeW5jTWFuYWdlcjo6ZnVsbERhdGFi
YXNlRmlsZW5hbWUoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotCi0gICAgLy8gRklYTUU6IElmIHRoZSBzZWN1cml0eSBvcmlnaW4gaW4gcXVl
c3Rpb24gaGFzIG5ldmVyIGhhZCBhIHN0b3JhZ2UgYXJlYSBlc3RhYmxpc2hlZCwKLSAgICAvLyB3
ZSBuZWVkIHRvIGFzayBhIGNsaWVudCBjYWxsIGlmIGVzdGFibGlzaGluZyBpdCBpcyBva2F5LiAg
SWYgdGhlIGNsaWVudCBkZW5pZXMgdGhlIHJlcXVlc3QsCi0gICAgLy8gdGhpcyBtZXRob2Qgd2ls
bCByZXR1cm4gbnVsbC4KLSAgICAvLyBUaGUgc291cmNlRnJhbWUgYXJndW1lbnQgZXhpc3RzIGZv
ciB0aGUgcHVycG9zZSBvZiBhc2tpbmcgYSBjbGllbnQuCi0gICAgLy8gVG8ga25vdyBpZiBhbiBh
cmVhIGhhcyBwcmV2aW91c2x5IGJlZW4gZXN0YWJsaXNoZWQsIHdlIG5lZWQgdG8gd2FpdCB1bnRp
bCB0aGlzIExvY2FsU3RvcmFnZSAKLSAgICAvLyBvYmplY3QgaGFzIGZpbmlzaGVkIGl0J3MgQXJl
YUltcG9ydCB0YXNrLgotCi0KLSAgICAvLyBGSVhNRTogSWYgdGhlIHN0b3JhZ2UgYXJlYSBpcyBi
ZWluZyBlc3RhYmxpc2hlZCBmb3IgdGhlIGZpcnN0IHRpbWUgaGVyZSwgd2UgbmVlZCB0byAKLSAg
ICAvLyBzeW5jIGl0cyBleGlzdGFuY2UgYW5kIHF1b3RhIG91dCB0byBkaXNrIHZpYSBhbiB0YXNr
IG9mIHR5cGUgQXJlYVN5bmMKLQotICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBzdG9yYWdl
QXJlYTsKLSAgICBpZiAoc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhTWFwLmdldChvcmlnaW4p
KQotICAgICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwotICAgICAgICAKLSAgICBz
dG9yYWdlQXJlYSA9IExvY2FsU3RvcmFnZUFyZWE6OmNyZWF0ZShvcmlnaW4sIHRoaXMpOwotICAg
IG1fc3RvcmFnZUFyZWFNYXAuc2V0KG9yaWdpbiwgc3RvcmFnZUFyZWEpOwotICAgIHJldHVybiBz
dG9yYWdlQXJlYS5yZWxlYXNlKCk7Ci19Ci0KLVN0cmluZyBMb2NhbFN0b3JhZ2U6OmZ1bGxEYXRh
YmFzZUZpbGVuYW1lKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCi17Ci0gICAgLy8gRklYTUU6IE9u
Y2Ugd2UgYWN0dWFsbHkgdHJhY2sgb3JpZ2luL3F1b3RhIGVudHJpZXMgdG8gc2VlIHdoaWNoIG9y
aWdpbnMgaGF2ZSBsb2NhbCBzdG9yYWdlIGVzdGFibGlzaGVkLAotICAgIC8vIHdlIHdpbGwgcmV0
dXJuIGFuIGVtcHR5IHBhdGggbmFtZSBpZiB0aGUgb3JpZ2luIGlzbid0IGFsbG93ZWQgdG8gaGF2
ZSBMb2NhbFN0b3JhZ2UuCi0gICAgLy8gV2UnbGwgbmVlZCB0byB3YWl0IGhlcmUgdW50aWwgdGhl
IEFyZWFJbXBvcnQgdGFzayB0byBjb21wbGV0ZSBiZWZvcmUgbWFraW5nIHRoYXQgZGVjaXNpb24u
Ci0KLSAgICBpZiAobV9wYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
CiAgICAgQVNTRVJUKG9yaWdpbik7Ci0gICAgaWYgKCFvcmlnaW4pCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKIAogICAgIGlmICghbWFrZUFsbERpcmVjdG9yaWVzKG1fcGF0aCkpIHsKICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGVkIHRvIGNyZWF0ZSBMb2NhbFN0b3JhZ2UgZGF0YWJhc2UgcGF0
aCAlcyIsIG1fcGF0aC51dGY4KCkuZGF0YSgpKTsKQEAgLTEyNCw0NyArNjQsMzAgQEAgU3RyaW5n
IExvY2FsU3RvcmFnZTo6ZnVsbERhdGFiYXNlRmlsZW5hbQogICAgIHJldHVybiBwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQobV9wYXRoLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsgIi5s
b2NhbHN0b3JhZ2UiKTsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2U6OnBlcmZvcm1JbXBvcnQoKQot
ewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gRklYTUU6IEltcG9ydCBh
bGwga25vd24gbG9jYWwgc3RvcmFnZSBvcmlnaW5zIGhlcmUgYWxvbmcgd2l0aCB0aGVpciBxdW90
YXMKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2U6OnBlcmZvcm1TeW5jKCkKLXsKLSAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIEZJWE1FOiBXcml0ZSBvdXQgbmV3IG9yaWdpbnMg
YW5kIHF1b3RhcyBoZXJlCi19Ci0KLXZvaWQgTG9jYWxTdG9yYWdlOjpjbG9zZSgpCit2b2lkIFN0
b3JhZ2VTeW5jTWFuYWdlcjo6Y2xvc2UoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0KLSAgICBMb2NhbFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVh
TWFwLmVuZCgpOwotICAgIGZvciAoTG9jYWxTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNl
Y29uZC0+c2NoZWR1bGVGaW5hbFN5bmMoKTsKLQorICAgIAogICAgIGlmIChtX3RocmVhZCkgewog
ICAgICAgICBtX3RocmVhZC0+dGVybWluYXRlKCk7CiAgICAgICAgIG1fdGhyZWFkID0gMDsKICAg
ICB9CiB9CiAKLWJvb2wgTG9jYWxTdG9yYWdlOjpzY2hlZHVsZUltcG9ydChQYXNzUmVmUHRyPExv
Y2FsU3RvcmFnZUFyZWE+IGFyZWEpCitib29sIFN0b3JhZ2VTeW5jTWFuYWdlcjo6c2NoZWR1bGVJ
bXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVhKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0KKyAgICAKICAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIG1fdGhy
ZWFkLT5zY2hlZHVsZUltcG9ydChhcmVhKTsKIAogICAgIHJldHVybiBtX3RocmVhZDsKIH0KIAot
dm9pZCBMb2NhbFN0b3JhZ2U6OnNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFy
ZWE+IGFyZWEpCit2b2lkIFN0b3JhZ2VTeW5jTWFuYWdlcjo6c2NoZWR1bGVTeW5jKFBhc3NSZWZQ
dHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIAogICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgbV90aHJlYWQtPnNjaGVkdWxlU3lu
YyhhcmVhKTsKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgJKHJldmlz
aW9uIDQ0MzYxKQkoZnJvbSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmg6NDQzNjEpCisr
KyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIExvY2FsU3RvcmFnZV9oCisjZGVmaW5lIExvY2FsU3RvcmFnZV9oCisKKyNp
bmNsdWRlICJMb2NhbFN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGFzay5o
IgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRocmVhZC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luSGFzaC5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisgICAgY2xhc3MgUGFnZUdyb3VwOworICAgIGNsYXNzIFN0b3JhZ2VBcmVhOworCisgICAg
Y2xhc3MgTG9jYWxTdG9yYWdlIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8TG9jYWxTdG9yYWdl
PiB7CisgICAgcHVibGljOgorICAgICAgICB+TG9jYWxTdG9yYWdlKCk7CisKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBsb2NhbFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBw
YXRoKTsKKworICAgICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShTZWN1
cml0eU9yaWdpbiopOworCisgICAgICAgIGJvb2wgc2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxM
b2NhbFN0b3JhZ2VBcmVhPik7CisgICAgICAgIHZvaWQgc2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8
TG9jYWxTdG9yYWdlQXJlYT4pOworCisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAgIHByaXZh
dGU6CisgICAgICAgIExvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpOworCisgICAgICAg
IHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBSZWZQdHI8TG9jYWxTdG9y
YWdlQXJlYT4sIFNlY3VyaXR5T3JpZ2luSGFzaD4gTG9jYWxTdG9yYWdlQXJlYU1hcDsKKyAgICAg
ICAgTG9jYWxTdG9yYWdlQXJlYU1hcCBtX3N0b3JhZ2VBcmVhTWFwOworCisgICAgICAgIFJlZlB0
cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+IG1fdGhyZWFkOworCisgICAgLy8gVGhlIGZvbGxvd2luZyBt
ZW1iZXJzIGFyZSBzdWJqZWN0IHRvIHRocmVhZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzCisgICAg
cHVibGljOgorICAgICAgICAvLyBUbyBiZSBjYWxsZWQgZnJvbSB0aGUgYmFja2dyb3VuZCB0aHJl
YWQ6CisgICAgICAgIFN0cmluZyBmdWxsRGF0YWJhc2VGaWxlbmFtZShTZWN1cml0eU9yaWdpbiop
OworCisgICAgICAgIHZvaWQgcGVyZm9ybUltcG9ydCgpOworICAgICAgICB2b2lkIHBlcmZvcm1T
eW5jKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBTdHJpbmcgbV9wYXRoOworCisgICAgICAg
IHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCB1bnNpZ25lZCBsb25nIGxv
bmcsIFNlY3VyaXR5T3JpZ2luSGFzaD4gU2VjdXJpdHlPcmlnaW5RdW90ZU1hcDsKKyAgICAgICAg
U2VjdXJpdHlPcmlnaW5RdW90ZU1hcCBtX3NlY3VyaXR5T3JpZ2luUXVvdGVNYXA7CisgICAgfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTG9jYWxTdG9yYWdlX2gKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgJKHJldmlzaW9uIDQ0MzYxKQorKysg
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MywzMCArMjMsMjAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgTG9jYWxTdG9y
YWdlX2gKLSNkZWZpbmUgTG9jYWxTdG9yYWdlX2gKKyNpZm5kZWYgU3RvcmFnZVN5bmNNYW5hZ2Vy
X2gKKyNkZWZpbmUgU3RvcmFnZVN5bmNNYW5hZ2VyX2gKIAogI2luY2x1ZGUgIkxvY2FsU3RvcmFn
ZUFyZWEuaCIKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VUYXNrLmgiCiAjaW5jbHVkZSAiTG9jYWxT
dG9yYWdlVGhyZWFkLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCiAKLSNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBQYWdl
R3JvdXA7Ci0gICAgY2xhc3MgU3RvcmFnZUFyZWE7Ci0KLSAgICBjbGFzcyBMb2NhbFN0b3JhZ2Ug
OiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxMb2NhbFN0b3JhZ2U+IHsKKyAgICBjbGFzcyBTdG9y
YWdlU3luY01hbmFnZXI6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFN0b3JhZ2VTeW5jTWFuYWdl
cj4gewogICAgIHB1YmxpYzoKLSAgICAgICAgfkxvY2FsU3RvcmFnZSgpOwotCi0gICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gbG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYg
cGF0aCk7Ci0KLSAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEoU2Vj
dXJpdHlPcmlnaW4qKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5h
Z2VyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKIAogICAgICAgICBib29sIHNjaGVkdWxl
SW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4pOwogICAgICAgICB2b2lkIHNjaGVk
dWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKQEAgLTU0LDEwICs0NCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbG9zZSgpOwogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgTG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0KLSAgICAgICAg
dHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxMb2NhbFN0b3Jh
Z2VBcmVhPiwgU2VjdXJpdHlPcmlnaW5IYXNoPiBMb2NhbFN0b3JhZ2VBcmVhTWFwOwotICAgICAg
ICBMb2NhbFN0b3JhZ2VBcmVhTWFwIG1fc3RvcmFnZUFyZWFNYXA7CisgICAgICAgIFN0b3JhZ2VT
eW5jTWFuYWdlcihjb25zdCBTdHJpbmcmIHBhdGgpOwogCiAgICAgICAgIFJlZlB0cjxMb2NhbFN0
b3JhZ2VUaHJlYWQ+IG1fdGhyZWFkOwogCkBAIC02NiwxNiArNTMsMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAvLyBUbyBiZSBjYWxsZWQgZnJvbSB0aGUgYmFja2dyb3VuZCB0aHJl
YWQ6CiAgICAgICAgIFN0cmluZyBmdWxsRGF0YWJhc2VGaWxlbmFtZShTZWN1cml0eU9yaWdpbiop
OwogCi0gICAgICAgIHZvaWQgcGVyZm9ybUltcG9ydCgpOwotICAgICAgICB2b2lkIHBlcmZvcm1T
eW5jKCk7Ci0KICAgICBwcml2YXRlOgogICAgICAgICBTdHJpbmcgbV9wYXRoOwotCi0gICAgICAg
IHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCB1bnNpZ25lZCBsb25nIGxv
bmcsIFNlY3VyaXR5T3JpZ2luSGFzaD4gU2VjdXJpdHlPcmlnaW5RdW90ZU1hcDsKLSAgICAgICAg
U2VjdXJpdHlPcmlnaW5RdW90ZU1hcCBtX3NlY3VyaXR5T3JpZ2luUXVvdGVNYXA7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gTG9jYWxTdG9yYWdlX2gKKyNl
bmRpZiAvLyBTdG9yYWdlU3luY01hbmFnZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30978</attachid>
            <date>2009-06-04 18:24:37 -0700</date>
            <delta_ts>2009-06-05 16:04:44 -0700</delta_ts>
            <desc>Revision of the last patch</desc>
            <filename>first2.patch</filename>
            <type>text/plain</type>
            <size>40124</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDQ0NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjIgQEAKKzIwMDktMDYtMDQgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rmlyc3Qgc3RlcCBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUz
NzYKKworICAgICAgICBBZGQgU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcC9oCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorCisgICAgICAgIElu
IHByZXBhcmF0aW9uIGZvciBjb21iaW5pbmcgU2Vzc2lvblN0b3JhZ2UgYW5kIExvY2FsU3RvcmFn
ZSBpbnRvIGEKKyAgICAgICAgc2luZ2xlIFN0b3JhZ2VNYW5hZ2VyLCBtb3ZlIHRoZSBzeW5jaW5n
IGJpdHMgb3V0IG9mIExvY2FsU3RvcmFnZSBhbmQKKyAgICAgICAgaW50byBpdHMgb3duIGNsYXNz
LgorCisgICAgICAgIFRoZSBuZXh0IHN0ZXAgaXMgdG8gY29tYmluZSBMb2NhbFN0b3JhZ2VBcmVh
IGFuZCBTZXNzaW9uU3RvcmFnZUFyZWEKKyAgICAgICAgaW50byBvbmUuICBUaGVuIFNlc3Npb25T
dG9yYWdlIGFuZCBMb2NhbFN0b3JhZ2UgY2FuIGJlIGNvbWJpbmVkLgorCisgICAgICAgIE5vdGUg
dGhhdCBjb21iaW5pbmcgdGhlbSB3aWxsIGN1dCBkb3duIG9uIGNvZGUgcGF0aHMgdGhhdCBtdXN0
IGJlCisgICAgICAgIHByb3hpZWQsIGVsaW1pbmF0ZSB2aXJ0dWFsIGRpc3BhdGNoLCBhbmQgYWxs
b3cgQ2hyb21pdW0gdG8gKGV2ZW50dWFsbHkpCisgICAgICAgIHdyaXRlIGhpc3RvcmljYWwgc2Vz
c2lvblN0b3JhZ2UgdG8gZGlzayB3aGVuIG1lbW9yeSBpcyBnZXR0aW5nIHRpZ2h0LgorCisgICAg
ICAgIEFsc28gcmVtb3ZlIGEgY291cGxlIGJpdHMgb2YgY3J1ZnQgaW5jbHVkaW5nIGNvZGUgZm9y
IHF1b3RhcyB3aGljaCBpcworICAgICAgICB1bm5lY2Vzc2FyeSAoc2luY2UgYSBtZXRhLWRhdGEg
ZGIgaXMgdW5uZWNlc3Nhcnkgc2luY2UgeW91IGNhbiBqdXN0CisgICAgICAgIGNvdW50IGJ5dGVz
IGFzIHlvdSByZWFkIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlcyBpbnRvIG1lbW9yeSkuCisK
KyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
b2NhbFN0b3JhZ2U6OkxvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3Jh
Z2U6OnN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZTo6Y2xvc2Up
OgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlLmg6CisgICAgICAgICogc3RvcmFnZS9M
b2NhbFN0b3JhZ2VBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZUFyZWE6
OkxvY2FsU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6
c2NoZWR1bGVGaW5hbFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6
c3luY1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6cGVy
Zm9ybUltcG9ydCk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmg6CisgICAg
ICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VBcmVhOjpjcmVhdGUpOgorICAgICAgICAqIHN0b3Jh
Z2UvTG9jYWxTdG9yYWdlVGFzay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VU
YXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmg6
CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjopOgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlSW1wb3J0KToKKyAgICAgICAgKiBzdG9yYWdlL0xv
Y2FsU3RvcmFnZVRocmVhZC5jcHA6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJl
YWQuaDoKKyAgICAgICAgKiBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmg6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6U3RvcmFnZVN5
bmNNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6ZnVsbERh
dGFiYXNlRmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVN5bmNNYW5hZ2VyOjpj
bG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlU3luY01hbmFnZXI6OnNjaGVkdWxlSW1w
b3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6c2NoZWR1bGVTeW5j
KToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmguCisgICAgICAgIChXZWJDb3JlOjopOgorCiAy
MDA5LTA2LTA0ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgLSBy
ZXRyeSB0byBmaXggdGhlIFRpZ2VyIGJ1aWxkCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ0MzYxKQor
KysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjA3NCw3ICsyMDc0
LDkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50
LmNwcCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5oIFwKIAlXZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZU1hcC5jcHAgXAotCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmgKKwlXZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZU1hcC5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNN
YW5hZ2VyLmNwcCBcCisJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCiBlbmRp
ZiAjIEVORCBFTkFCTEVfRE9NX1NUT1JBR0UKIAogIyAtLS0tCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQ0MzYx
KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTM0Miw2ICsxMzQy
LDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RPTV9TVE9SQUdFPTEpIAogICAgICAgICBz
dG9yYWdlL1N0b3JhZ2VFdmVudC5jcHAgXAogICAgICAgICBzdG9yYWdlL1Nlc3Npb25TdG9yYWdl
LmNwcCBcCiAgICAgICAgIHN0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcCBcCisgICAgICAg
IHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pT
U3RvcmFnZUN1c3RvbS5jcHAKIAogICAgIElETF9CSU5ESU5HUyArPSBcCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2Vz
LmJrbAkocmV2aXNpb24gNDQzNjEpCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29y
a2luZyBjb3B5KQpAQCAtMTAxMyw2ICsxMDEzLDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBs
aXN0IG9mIGZpbGVzIG5lZQogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCiAgICAgICAg
IHN0b3JhZ2UvU2Vzc2lvblN0b3JhZ2UuY3BwCiAgICAgICAgIHN0b3JhZ2UvU2Vzc2lvblN0b3Jh
Z2VBcmVhLmNwcAorICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKICAgICA8
L3NldD4KIAogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19YTUwiPgpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0NDM2MSkK
KysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkK
QEAgLTE1NDYzLDYgKzE1NDYzLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3Jh
Z2VcU3RvcmFnZVN5bmNNYW5hZ2VyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFZlcnNpb25DaGFuZ2VDYWxsYmFjay5oIg0K
IAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NDM2MSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjU2LDYgKzQyNTYsOCBAQAog
CQlDMERGQzg3MDBEQjY4NDFBMDAzRUFFN0MgLyogSlNDb25zb2xlQ3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwREZDODZGMERCNjg0MUEw
MDNFQUU3QyAvKiBKU0NvbnNvbGVDdXN0b20uY3BwICovOyB9OwogCQlDMTA1REE2MjBGM0FBNjhG
MDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzEwNURBNjEwRjNBQTY4RjAwMURENDRGIC8q
IFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCAqLzsgfTsKIAkJQzEwNURBNjQwRjNBQTZCODAw
MURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVu
Y29kaW5nRGV0ZWN0b3IuaCAqLzsgfTsKKwkJQzU2NzAxMDQwRkQ2RjgxNjAwMTlCMDNEIC8qIFN0
b3JhZ2VTeW5jTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzU2NzAxMDIwRkQ2RjgxNjAwMTlCMDNEIC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5o
ICovOyB9OworCQlDNTY3MDEwNTBGRDZGODE2MDAxOUIwM0QgLyogU3RvcmFnZVN5bmNNYW5hZ2Vy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1Njcw
MTAzMEZENkY4MTYwMDE5QjAzRCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwICovOyB9OwogCQlD
NkQ3NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFEMzA5QUEy
ODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggKi87IH07CiAJCUM2RDc0
QUU0MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRTMwOUFBMjkw
QTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi87IH07CiAJCUQwNUNF
RDI5MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA1Q0VEMjcwQTQwQkIyQzAwQzVB
RjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi87IH07CkBAIC05MDUzLDYgKzkwNTUsOCBA
QAogCQlDMERGQzg2RjBEQjY4NDFBMDAzRUFFN0MgLyogSlNDb25zb2xlQ3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ29uc29sZUN1c3RvbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMxMDVEQTYxMEYzQUE2OEYwMDFERDQ0RiAvKiBU
ZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMxMDVEQTYzMEYzQUE2QjgwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3Rv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0RW5jb2RpbmdEZXRlY3Rv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTY3MDEwMjBGRDZGODE2MDAxOUIw
M0QgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0b3JhZ2VTeW5jTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
NTY3MDEwMzBGRDZGODE2MDAxOUIwM0QgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VTeW5jTWFuYWdlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBN
b2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9u
TGlzdExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjcwQTQw
QkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0QmxvY2tDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTk2NDIsNiArOTY0Niw4IEBACiAJCQkJNTFFMEJBQkQwREE1NTQ4
NDAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5pZGwgKi8sCiAJCQkJNTFFMEJCMzcwREE1QUNCNjAw
QTlFNDE3IC8qIFN0b3JhZ2VNYXAuY3BwICovLAogCQkJCTUxRTBCQjM2MERBNUFDQjYwMEE5RTQx
NyAvKiBTdG9yYWdlTWFwLmggKi8sCisJCQkJQzU2NzAxMDIwRkQ2RjgxNjAwMTlCMDNEIC8qIFN0
b3JhZ2VTeW5jTWFuYWdlci5oICovLAorCQkJCUM1NjcwMTAzMEZENkY4MTYwMDE5QjAzRCAvKiBT
dG9yYWdlU3luY01hbmFnZXIuY3BwICovLAogCQkJKTsKIAkJCWluZGVudFdpZHRoID0gNDsKIAkJ
CXBhdGggPSBzdG9yYWdlOwpAQCAtMTY3ODgsNiArMTY3OTQsNyBAQAogCQkJCTg0NUU3MkY4MEZE
MjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0NUU3MkZDMEZE
MjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4MUVCRjNC
MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlDNTY3MDEwNDBGRDZGODE2MDAxOUIwM0QgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTE4NzgxLDYgKzE4Nzg4LDcgQEAKIAkJCQkwODIzNDFDNTBGQ0YzQTk1MDBE
NzVCRDYgLyogV01MU2VsZWN0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NDVFNzJG
QjBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4
MUVCRjNBMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUM1NjcwMTA1MEZENkY4MTYwMDE5QjAzRCAvKiBTdG9yYWdlU3luY01hbmFnZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcAkocmV2aXNp
b24gNDQzNjEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdl
R3JvdXAuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VTeW5j
TWFuYWdlci5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNjIsMTUgKzYzLDEwIEBAIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBMb2Nh
bFN0b3JhZ2U6OmwKIAogTG9jYWxTdG9yYWdlOjpMb2NhbFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBw
YXRoKQogICAgIDogbV9wYXRoKHBhdGguY29weSgpKQorICAgICwgbV9zeW5jTWFuYWdlcigwKQog
ewotICAgIC8vIElmIHRoZSBwYXRoIGlzIGVtcHR5LCB3ZSBrbm93IHdlJ3JlIG5ldmVyIGdvaW5n
IHRvIGJlIHVzaW5nIHRoZSB0aHJlYWQgZm9yIGFueXRoaW5nLCBzbyBkb24ndCBzdGFydCBpdC4K
LSAgICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSBtaWdodCBhbHNvIHdhbnQgdG8gY29uc2lkZXIgcmVt
b3ZpbmcgaXQgZnJvbSB0aGUgRE9NIGluIHRoYXQgY2FzZSAtIDxyZGFyOi8vcHJvYmxlbS81OTYw
NDcwPgotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV90
aHJlYWQgPSBMb2NhbFN0b3JhZ2VUaHJlYWQ6OmNyZWF0ZSgpOwotICAgIG1fdGhyZWFkLT5zdGFy
dCgpOwotICAgIG1fdGhyZWFkLT5zY2hlZHVsZUltcG9ydCh0aGlzKTsKKyAgICBpZiAoIXBhdGgu
aXNFbXB0eSgpKQorICAgICAgICBtX3N5bmNNYW5hZ2VyID0gU3RvcmFnZVN5bmNNYW5hZ2VyOjpj
cmVhdGUobV9wYXRoKTsKIH0KIAogTG9jYWxTdG9yYWdlOjp+TG9jYWxTdG9yYWdlKCkKQEAgLTkw
LDU0ICs4NiwxOCBAQCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBMb2NhbFN0b3JhZ2U6OnN0CiAg
ICAgLy8gVG8ga25vdyBpZiBhbiBhcmVhIGhhcyBwcmV2aW91c2x5IGJlZW4gZXN0YWJsaXNoZWQs
IHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGlzIExvY2FsU3RvcmFnZSAKICAgICAvLyBvYmplY3Qg
aGFzIGZpbmlzaGVkIGl0J3MgQXJlYUltcG9ydCB0YXNrLgogCi0KICAgICAvLyBGSVhNRTogSWYg
dGhlIHN0b3JhZ2UgYXJlYSBpcyBiZWluZyBlc3RhYmxpc2hlZCBmb3IgdGhlIGZpcnN0IHRpbWUg
aGVyZSwgd2UgbmVlZCB0byAKICAgICAvLyBzeW5jIGl0cyBleGlzdGFuY2UgYW5kIHF1b3RhIG91
dCB0byBkaXNrIHZpYSBhbiB0YXNrIG9mIHR5cGUgQXJlYVN5bmMKIAogICAgIFJlZlB0cjxMb2Nh
bFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYTsKICAgICBpZiAoc3RvcmFnZUFyZWEgPSBtX3N0b3Jh
Z2VBcmVhTWFwLmdldChvcmlnaW4pKQogICAgICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFz
ZSgpOwotICAgICAgICAKLSAgICBzdG9yYWdlQXJlYSA9IExvY2FsU3RvcmFnZUFyZWE6OmNyZWF0
ZShvcmlnaW4sIHRoaXMpOworICAgIAorICAgIHN0b3JhZ2VBcmVhID0gTG9jYWxTdG9yYWdlQXJl
YTo6Y3JlYXRlKG9yaWdpbiwgbV9zeW5jTWFuYWdlcik7CiAgICAgbV9zdG9yYWdlQXJlYU1hcC5z
ZXQob3JpZ2luLCBzdG9yYWdlQXJlYSk7CiAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2Uo
KTsKIH0KIAotU3RyaW5nIExvY2FsU3RvcmFnZTo6ZnVsbERhdGFiYXNlRmlsZW5hbWUoU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbikKLXsKLSAgICAvLyBGSVhNRTogT25jZSB3ZSBhY3R1YWxseSB0cmFj
ayBvcmlnaW4vcXVvdGEgZW50cmllcyB0byBzZWUgd2hpY2ggb3JpZ2lucyBoYXZlIGxvY2FsIHN0
b3JhZ2UgZXN0YWJsaXNoZWQsCi0gICAgLy8gd2Ugd2lsbCByZXR1cm4gYW4gZW1wdHkgcGF0aCBu
YW1lIGlmIHRoZSBvcmlnaW4gaXNuJ3QgYWxsb3dlZCB0byBoYXZlIExvY2FsU3RvcmFnZS4KLSAg
ICAvLyBXZSdsbCBuZWVkIHRvIHdhaXQgaGVyZSB1bnRpbCB0aGUgQXJlYUltcG9ydCB0YXNrIHRv
IGNvbXBsZXRlIGJlZm9yZSBtYWtpbmcgdGhhdCBkZWNpc2lvbi4KLQotICAgIGlmIChtX3BhdGgu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBBU1NFUlQob3JpZ2lu
KTsKLSAgICBpZiAoIW9yaWdpbikKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgaWYg
KCFtYWtlQWxsRGlyZWN0b3JpZXMobV9wYXRoKSkgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZWQgdG8gY3JlYXRlIExvY2FsU3RvcmFnZSBkYXRhYmFzZSBwYXRoICVzIiwgbV9wYXRoLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX3BhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlm
aWVyKCkgKyAiLmxvY2Fsc3RvcmFnZSIpOwotfQotCi12b2lkIExvY2FsU3RvcmFnZTo6cGVyZm9y
bUltcG9ydCgpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBGSVhN
RTogSW1wb3J0IGFsbCBrbm93biBsb2NhbCBzdG9yYWdlIG9yaWdpbnMgaGVyZSBhbG9uZyB3aXRo
IHRoZWlyIHF1b3RhcwotfQotCi12b2lkIExvY2FsU3RvcmFnZTo6cGVyZm9ybVN5bmMoKQotewot
ICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gRklYTUU6IFdyaXRlIG91dCBu
ZXcgb3JpZ2lucyBhbmQgcXVvdGFzIGhlcmUKLX0KLQogdm9pZCBMb2NhbFN0b3JhZ2U6OmNsb3Nl
KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMTQ1LDI4ICsxMDUsOCBAQCB2
b2lkIExvY2FsU3RvcmFnZTo6Y2xvc2UoKQogICAgIExvY2FsU3RvcmFnZUFyZWFNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CiAgICAgZm9yIChMb2NhbFN0b3JhZ2VB
cmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQogICAgICAgICBpdC0+c2Vjb25kLT5zY2hlZHVsZUZpbmFsU3luYygpOwotCi0gICAg
aWYgKG1fdGhyZWFkKSB7Ci0gICAgICAgIG1fdGhyZWFkLT50ZXJtaW5hdGUoKTsKLSAgICAgICAg
bV90aHJlYWQgPSAwOwotICAgIH0KLX0KLQotYm9vbCBMb2NhbFN0b3JhZ2U6OnNjaGVkdWxlSW1w
b3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkKLXsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG1fdGhyZWFkKQotICAgICAgICBtX3RocmVhZC0+c2No
ZWR1bGVJbXBvcnQoYXJlYSk7Ci0KLSAgICByZXR1cm4gbV90aHJlYWQ7Ci19Ci0KLXZvaWQgTG9j
YWxTdG9yYWdlOjpzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVh
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fdGhyZWFkKQotICAg
ICAgICBtX3RocmVhZC0+c2NoZWR1bGVTeW5jKGFyZWEpOworICAgIAorICAgIG1fc3luY01hbmFn
ZXIgPSAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvTG9jYWxTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3Rv
cmFnZS5oCShyZXZpc2lvbiA0NDM2MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjAgKzI3LDE3IEBACiAjZGVmaW5lIExvY2FsU3RvcmFn
ZV9oCiAKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VBcmVhLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9y
YWdlVGFzay5oIgotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRocmVhZC5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luSGFzaC5oIgogCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBQYWdl
R3JvdXA7CiAgICAgY2xhc3MgU3RvcmFnZUFyZWE7CisgICAgY2xhc3MgU3RvcmFnZVN5bmNNYW5h
Z2VyOwogCi0gICAgY2xhc3MgTG9jYWxTdG9yYWdlIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8
TG9jYWxTdG9yYWdlPiB7CisgICAgY2xhc3MgTG9jYWxTdG9yYWdlIDogcHVibGljIFJlZkNvdW50
ZWQ8TG9jYWxTdG9yYWdlPiB7CiAgICAgcHVibGljOgogICAgICAgICB+TG9jYWxTdG9yYWdlKCk7
CiAKQEAgLTQ4LDkgKzQ1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFBhc3NS
ZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKik7CiAKLSAgICAg
ICAgYm9vbCBzY2hlZHVsZUltcG9ydChQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKLSAg
ICAgICAgdm9pZCBzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPik7Ci0K
ICAgICAgICAgdm9pZCBjbG9zZSgpOwogCiAgICAgcHJpdmF0ZToKQEAgLTU5LDIxICs1Myw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1
cml0eU9yaWdpbj4sIFJlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiwgU2VjdXJpdHlPcmlnaW5IYXNo
PiBMb2NhbFN0b3JhZ2VBcmVhTWFwOwogICAgICAgICBMb2NhbFN0b3JhZ2VBcmVhTWFwIG1fc3Rv
cmFnZUFyZWFNYXA7CiAKLSAgICAgICAgUmVmUHRyPExvY2FsU3RvcmFnZVRocmVhZD4gbV90aHJl
YWQ7Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5nIG1lbWJlcnMgYXJlIHN1YmplY3QgdG8gdGhyZWFk
IHN5bmNocm9uaXphdGlvbiBpc3N1ZXMKLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIFRvIGJlIGNh
bGxlZCBmcm9tIHRoZSBiYWNrZ3JvdW5kIHRocmVhZDoKLSAgICAgICAgU3RyaW5nIGZ1bGxEYXRh
YmFzZUZpbGVuYW1lKFNlY3VyaXR5T3JpZ2luKik7Ci0KLSAgICAgICAgdm9pZCBwZXJmb3JtSW1w
b3J0KCk7Ci0gICAgICAgIHZvaWQgcGVyZm9ybVN5bmMoKTsKLQotICAgIHByaXZhdGU6CiAgICAg
ICAgIFN0cmluZyBtX3BhdGg7Ci0KLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1
cml0eU9yaWdpbj4sIHVuc2lnbmVkIGxvbmcgbG9uZywgU2VjdXJpdHlPcmlnaW5IYXNoPiBTZWN1
cml0eU9yaWdpblF1b3RlTWFwOwotICAgICAgICBTZWN1cml0eU9yaWdpblF1b3RlTWFwIG1fc2Vj
dXJpdHlPcmlnaW5RdW90ZU1hcDsKKyAgICAgICAgUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4g
bV9zeW5jTWFuYWdlcjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwCShyZXZpc2lvbiA0NDM2MSkKKysrIFdlYkNv
cmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTkg
KzQzLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIEluc3RlYWQsIHF1ZXVlIHVwIGEgYmF0
Y2ggb2YgaXRlbXMgdG8gc3luYyBhbmQgYWN0dWFsbHkgZG8gdGhlIHN5bmMgYXQgdGhlIGZvbGxv
d2luZyBpbnRlcnZhbC4KIHN0YXRpYyBjb25zdCBkb3VibGUgTG9jYWxTdG9yYWdlU3luY0ludGVy
dmFsID0gMS4wOwogCi1Mb2NhbFN0b3JhZ2VBcmVhOjpMb2NhbFN0b3JhZ2VBcmVhKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4sIExvY2FsU3RvcmFnZSogbG9jYWxTdG9yYWdlKQorTG9jYWxTdG9yYWdl
QXJlYTo6TG9jYWxTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRy
PFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpCiAgICAgOiBTdG9yYWdlQXJlYShvcmln
aW4pCiAgICAgLCBtX3N5bmNUaW1lcih0aGlzLCAmTG9jYWxTdG9yYWdlQXJlYTo6c3luY1RpbWVy
RmlyZWQpCiAgICAgLCBtX2l0ZW1zQ2xlYXJlZChmYWxzZSkKICAgICAsIG1fZmluYWxTeW5jU2No
ZWR1bGVkKGZhbHNlKQotICAgICwgbV9sb2NhbFN0b3JhZ2UobG9jYWxTdG9yYWdlKQorICAgICwg
bV9zeW5jTWFuYWdlcihzeW5jTWFuYWdlcikKICAgICAsIG1fY2xlYXJJdGVtc1doaWxlU3luY2lu
ZyhmYWxzZSkKICAgICAsIG1fc3luY1NjaGVkdWxlZChmYWxzZSkKICAgICAsIG1faW1wb3J0Q29t
cGxldGUoZmFsc2UpCiB7Ci0gICAgQVNTRVJUKG1fbG9jYWxTdG9yYWdlKTsKLSAgICAKLSAgICBp
ZiAoIW1fbG9jYWxTdG9yYWdlLT5zY2hlZHVsZUltcG9ydCh0aGlzKSkKKyAgICBpZiAoIW1fc3lu
Y01hbmFnZXIgfHwgIW1fc3luY01hbmFnZXItPnNjaGVkdWxlSW1wb3J0KHRoaXMpKQogICAgICAg
ICBtX2ltcG9ydENvbXBsZXRlID0gdHJ1ZTsKIH0KIApAQCAtNjYsNiArNjQsMTAgQEAgTG9jYWxT
dG9yYWdlQXJlYTo6fkxvY2FsU3RvcmFnZUFyZWEoKQogCiB2b2lkIExvY2FsU3RvcmFnZUFyZWE6
OnNjaGVkdWxlRmluYWxTeW5jKCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IGlmICghbV9zeW5jTWFuYWdlcikKKyAgICAgICAgcmV0dXJuOworICAgIAogICAgIGlmIChtX3N5
bmNUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3N5bmNUaW1lci5zdG9wKCk7CiAgICAgZWxz
ZSB7CkBAIC0yNjYsNiArMjY4LDggQEAgdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpzY2hlZHVsZUNs
ZWFyKCkKIHZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6c3luY1RpbWVyRmlyZWQoVGltZXI8TG9jYWxT
dG9yYWdlQXJlYT4qKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFt
X3N5bmNNYW5hZ2VyKQorICAgICAgICByZXR1cm47CiAKICAgICBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPjo6aXRlcmF0b3IgaXQgPSBtX2NoYW5nZWRJdGVtcy5iZWdpbigpOwogICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBlbmQgPSBtX2NoYW5nZWRJdGVtcy5lbmQoKTsKQEAg
LTI4OSw3ICsyOTMsNyBAQCB2b2lkIExvY2FsU3RvcmFnZUFyZWE6OnN5bmNUaW1lckZpcmVkKFRp
CiAgICAgICAgICAgICAvLyBwZXJmb3JtU3luYyBmdW5jdGlvbi4KICAgICAgICAgICAgIGRpc2Fi
bGVTdWRkZW5UZXJtaW5hdGlvbigpOwogCi0gICAgICAgICAgICBtX2xvY2FsU3RvcmFnZS0+c2No
ZWR1bGVTeW5jKHRoaXMpOworICAgICAgICAgICAgbV9zeW5jTWFuYWdlci0+c2NoZWR1bGVTeW5j
KHRoaXMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMDQsOSArMzA4LDExIEBAIHZvaWQgTG9j
YWxTdG9yYWdlQXJlYTo6cGVyZm9ybUltcG9ydCgpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLmlzT3BlbigpKTsKKyAgICBpZiAoIW1fc3lu
Y01hbmFnZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBkYXRhYmFzZUZpbGVuYW1l
ID0gbV9zeW5jTWFuYWdlci0+ZnVsbERhdGFiYXNlRmlsZW5hbWUoc2VjdXJpdHlPcmlnaW4oKSk7
CiAKLSAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFtZSA9IG1fbG9jYWxTdG9yYWdlLT5mdWxsRGF0
YWJhc2VGaWxlbmFtZShzZWN1cml0eU9yaWdpbigpKTsKLSAgICAKICAgICBpZiAoZGF0YWJhc2VG
aWxlbmFtZS5pc0VtcHR5KCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGaWxlbmFtZSBmb3IgbG9j
YWwgc3RvcmFnZSBkYXRhYmFzZSBpcyBlbXB0eSAtIGNhbm5vdCBvcGVuIGZvciBwZXJzaXN0ZW50
IHN0b3JhZ2UiKTsKICAgICAgICAgbWFya0ltcG9ydGVkKCk7CkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvTG9jYWxTdG9yYWdlQXJlYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VBcmVhLmgJKHJldmlzaW9uIDQ0MzYxKQorKysgV2ViQ29yZS9zdG9yYWdlL0xvY2Fs
U3RvcmFnZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMjMgKzI5LDI0IEBACiAjaW5jbHVk
ZSAiU1FMaXRlRGF0YWJhc2UuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogI2luY2x1ZGUg
IlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIKICNpbmNsdWRl
ICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAKLSAgICBjbGFzcyBMb2NhbFN0b3JhZ2U7CisgICAgY2xhc3MgU3RvcmFnZVN5bmNN
YW5hZ2VyOwogICAgIAogICAgIGNsYXNzIExvY2FsU3RvcmFnZUFyZWEgOiBwdWJsaWMgU3RvcmFn
ZUFyZWEgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+TG9jYWxTdG9yYWdlQXJlYSgp
OwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGNyZWF0ZShT
ZWN1cml0eU9yaWdpbiogb3JpZ2luLCBMb2NhbFN0b3JhZ2UqIGxvY2FsU3RvcmFnZSkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZUFyZWEob3JpZ2luLCBsb2NhbFN0b3JhZ2UpKTsg
fQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBjcmVhdGUoU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNN
YW5hZ2VyKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlQXJlYShvcmlnaW4sIHN5
bmNNYW5hZ2VyKSk7IH0KIAogICAgICAgICB2b2lkIHNjaGVkdWxlRmluYWxTeW5jKCk7CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBMb2NhbFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiwgTG9j
YWxTdG9yYWdlKik7CisgICAgICAgIExvY2FsU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBQ
YXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpOwogCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBpdGVtQ2hhbmdlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBv
bGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGl0ZW1SZW1vdmVkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIG9sZFZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpOwpAQCAtNjEsNyArNjIsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAogICAgICAgICBib29sIG1fZmluYWxTeW5jU2No
ZWR1bGVkOwogCi0gICAgICAgIExvY2FsU3RvcmFnZSogbV9sb2NhbFN0b3JhZ2U7CisgICAgICAg
IFJlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IG1fc3luY01hbmFnZXI7CiAKICAgICAgICAgLy8g
VGhlIGRhdGFiYXNlIGhhbmRsZSB3aWxsIG9ubHkgZXZlciBiZSBvcGVuZWQgYW5kIHVzZWQgb24g
dGhlIGJhY2tncm91bmQgdGhyZWFkLgogICAgICAgICBTUUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNl
OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcAkocmV2aXNpb24gNDQzNjEp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDE0ICs0MCw2IEBAIExvY2FsU3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFnZVRhc2soVHlw
ZSAKICAgICBBU1NFUlQobV90eXBlID09IEFyZWFJbXBvcnQgfHwgbV90eXBlID09IEFyZWFTeW5j
KTsKIH0KIAotTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIHR5cGUsIFBh
c3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBzdG9yYWdlKQotICAgIDogbV90eXBlKHR5cGUpCi0gICAg
LCBtX3N0b3JhZ2Uoc3RvcmFnZSkKLXsKLSAgICBBU1NFUlQobV9zdG9yYWdlKTsKLSAgICBBU1NF
UlQobV90eXBlID09IFN0b3JhZ2VJbXBvcnQgfHwgbV90eXBlID09IFN0b3JhZ2VTeW5jKTsKLX0K
LQogTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIHR5cGUsIFBhc3NSZWZQ
dHI8TG9jYWxTdG9yYWdlVGhyZWFkPiB0aHJlYWQpCiAgICAgOiBtX3R5cGUodHlwZSkKICAgICAs
IG1fdGhyZWFkKHRocmVhZCkKQEAgLTU5LDE0ICs1MSw2IEBAIExvY2FsU3RvcmFnZVRhc2s6Okxv
Y2FsU3RvcmFnZVRhc2soVHlwZSAKIHZvaWQgTG9jYWxTdG9yYWdlVGFzazo6cGVyZm9ybVRhc2so
KQogewogICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgU3RvcmFnZUltcG9ydDoK
LSAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UpOwotICAgICAgICAgICAgbV9zdG9yYWdlLT5w
ZXJmb3JtSW1wb3J0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTdG9yYWdl
U3luYzoKLSAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UpOwotICAgICAgICAgICAgbV9zdG9y
YWdlLT5wZXJmb3JtU3luYygpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJl
YUltcG9ydDoKICAgICAgICAgICAgIEFTU0VSVChtX2FyZWEpOwogICAgICAgICAgICAgbV9hcmVh
LT5wZXJmb3JtSW1wb3J0KCk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFz
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgJKHJl
dmlzaW9uIDQ0MzYxKQorKysgV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsMTcgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
ICAgIGNsYXNzIExvY2FsU3RvcmFnZTsKICAgICBjbGFzcyBMb2NhbFN0b3JhZ2VBcmVhOwogICAg
IGNsYXNzIExvY2FsU3RvcmFnZVRocmVhZDsKIAogICAgIGNsYXNzIExvY2FsU3RvcmFnZVRhc2sg
OiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxMb2NhbFN0b3JhZ2VUYXNrPiB7CiAgICAgcHVibGlj
OgotICAgICAgICBlbnVtIFR5cGUgeyBTdG9yYWdlSW1wb3J0LCBTdG9yYWdlU3luYywgQXJlYUlt
cG9ydCwgQXJlYVN5bmMsIFRlcm1pbmF0ZVRocmVhZCB9OworICAgICAgICBlbnVtIFR5cGUgeyBB
cmVhSW1wb3J0LCBBcmVhU3luYywgVGVybWluYXRlVGhyZWFkIH07CiAKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlSW1wb3J0KFBhc3NSZWZQdHI8TG9j
YWxTdG9yYWdlPiBzdG9yYWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlVGFz
ayhTdG9yYWdlSW1wb3J0LCBzdG9yYWdlKSk7IH0KICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJl
YT4gYXJlYSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZVRhc2soQXJlYUltcG9y
dCwgYXJlYSkpOyB9Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZVRhc2s+
IGNyZWF0ZVN5bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IHN0b3JhZ2UpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKFN0b3JhZ2VTeW5jLCBzdG9yYWdlKSk7IH0KICAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlU3luYyhQYXNz
UmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2Nh
bFN0b3JhZ2VUYXNrKEFyZWFTeW5jLCBhcmVhKSk7IH0KICAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlVGVybWluYXRlKFBhc3NSZWZQdHI8TG9jYWxTdG9y
YWdlVGhyZWFkPiB0aHJlYWQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2VUYXNr
KFRlcm1pbmF0ZVRocmVhZCwgdGhyZWFkKSk7IH0KIApAQCAtNTAsMTIgKzQ3LDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIExvY2FsU3RvcmFnZVRhc2so
VHlwZSwgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPik7Ci0gICAgICAgIExvY2FsU3RvcmFn
ZVRhc2soVHlwZSwgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+KTsKICAgICAgICAgTG9jYWxTdG9y
YWdlVGFzayhUeXBlLCBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZVRocmVhZD4pOwogCiAgICAgICAg
IFR5cGUgbV90eXBlOwogICAgICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gbV9hcmVhOwot
ICAgICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlPiBtX3N0b3JhZ2U7CiAgICAgICAgIFJlZlB0cjxM
b2NhbFN0b3JhZ2VUaHJlYWQ+IG1fdGhyZWFkOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuY3BwCShyZXZpc2lvbiA0NDM2MSkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSwxOCArODUs
NiBAQCB2b2lkKiBMb2NhbFN0b3JhZ2VUaHJlYWQ6OmxvY2FsU3RvcmFnZVRoCiAgICAgcmV0dXJu
IDA7CiB9CiAKLXZvaWQgTG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZUltcG9ydChQYXNzUmVm
UHRyPExvY2FsU3RvcmFnZT4gc3RvcmFnZSkKLXsKLSAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVk
KCkgJiYgbV90aHJlYWRJRCk7Ci0gICAgbV9xdWV1ZS5hcHBlbmQoTG9jYWxTdG9yYWdlVGFzazo6
Y3JlYXRlSW1wb3J0KHN0b3JhZ2UpKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VUaHJlYWQ6OnNj
aGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gc3RvcmFnZSkKLXsKLSAgICBBU1NF
UlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7Ci0gICAgbV9xdWV1ZS5hcHBlbmQo
TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlU3luYyhzdG9yYWdlKSk7Ci19Ci0KIHZvaWQgTG9jYWxT
dG9yYWdlVGhyZWFkOjpzY2hlZHVsZUltcG9ydChQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+
IGFyZWEpCiB7CiAgICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOwpJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuaAkocmV2aXNpb24gNDQzNjEpCisr
KyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDcgKzMzLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgTG9jYWxT
dG9yYWdlOwogICAgIGNsYXNzIExvY2FsU3RvcmFnZUFyZWE7CiAgICAgY2xhc3MgTG9jYWxTdG9y
YWdlVGFzazsKIApAQCAtNDMsOCArNDIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgYm9vbCBzdGFydCgpOwogCi0gICAgICAgIHZvaWQgc2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0
cjxMb2NhbFN0b3JhZ2U+KTsKLSAgICAgICAgdm9pZCBzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxM
b2NhbFN0b3JhZ2U+KTsKICAgICAgICAgdm9pZCBzY2hlZHVsZUltcG9ydChQYXNzUmVmUHRyPExv
Y2FsU3RvcmFnZUFyZWE+KTsKICAgICAgICAgdm9pZCBzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxM
b2NhbFN0b3JhZ2VBcmVhPik7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oCShyZXZp
c2lvbiA0NDM2MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiU2Vzc2lvblN0b3JhZ2VBcmVhLmgi
CiAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDog
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAJKHJldmlzaW9uIDQ0MzYxKQkoZnJv
bSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcDo0NDM2MSkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2UuaCIKKworI2luY2x1ZGUgIkNT
dHJpbmcuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAi
TG9jYWxTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3Jv
dXAuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBM
b2NhbFN0b3JhZ2UqPiBMb2NhbFN0b3JhZ2VNYXA7CisKK3N0YXRpYyBMb2NhbFN0b3JhZ2VNYXAm
IGxvY2FsU3RvcmFnZU1hcCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMb2NhbFN0b3Jh
Z2VNYXAsIGxvY2FsU3RvcmFnZU1hcCwgKCkpOworICAgIHJldHVybiBsb2NhbFN0b3JhZ2VNYXA7
Cit9CisKK1Bhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBMb2NhbFN0b3JhZ2U6OmxvY2FsU3RvcmFn
ZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgY29uc3QgU3RyaW5nIGxvb2t1cFBhdGggPSBw
YXRoLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IHBhdGg7CisgICAgTG9jYWxTdG9yYWdlTWFwOjpp
dGVyYXRvciBpdCA9IGxvY2FsU3RvcmFnZU1hcCgpLmZpbmQobG9va3VwUGF0aCk7CisgICAgaWYg
KGl0ID09IGxvY2FsU3RvcmFnZU1hcCgpLmVuZCgpKSB7CisgICAgICAgIFJlZlB0cjxMb2NhbFN0
b3JhZ2U+IGxvY2FsU3RvcmFnZSA9IGFkb3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2UobG9va3VwUGF0
aCkpOworICAgICAgICBsb2NhbFN0b3JhZ2VNYXAoKS5zZXQobG9va3VwUGF0aCwgbG9jYWxTdG9y
YWdlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5yZWxlYXNlKCk7CisgICAg
fQorICAgIAorICAgIHJldHVybiBpdC0+c2Vjb25kOworfQorCitMb2NhbFN0b3JhZ2U6OkxvY2Fs
U3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgOiBtX3BhdGgocGF0aC5jb3B5KCkpCit7
CisgICAgLy8gSWYgdGhlIHBhdGggaXMgZW1wdHksIHdlIGtub3cgd2UncmUgbmV2ZXIgZ29pbmcg
dG8gYmUgdXNpbmcgdGhlIHRocmVhZCBmb3IgYW55dGhpbmcsIHNvIGRvbid0IHN0YXJ0IGl0Lgor
ICAgIC8vIEluIHRoZSBmdXR1cmUsIHdlIG1pZ2h0IGFsc28gd2FudCB0byBjb25zaWRlciByZW1v
dmluZyBpdCBmcm9tIHRoZSBET00gaW4gdGhhdCBjYXNlIC0gPHJkYXI6Ly9wcm9ibGVtLzU5NjA0
NzA+CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Ro
cmVhZCA9IExvY2FsU3RvcmFnZVRocmVhZDo6Y3JlYXRlKCk7CisgICAgbV90aHJlYWQtPnN0YXJ0
KCk7CisgICAgbV90aHJlYWQtPnNjaGVkdWxlSW1wb3J0KHRoaXMpOworfQorCitMb2NhbFN0b3Jh
Z2U6On5Mb2NhbFN0b3JhZ2UoKQoreworICAgIEFTU0VSVChsb2NhbFN0b3JhZ2VNYXAoKS5nZXQo
bV9wYXRoKSA9PSB0aGlzKTsKKyAgICBsb2NhbFN0b3JhZ2VNYXAoKS5yZW1vdmUobV9wYXRoKTsK
K30KKworUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gTG9jYWxTdG9yYWdlOjpzdG9yYWdlQXJlYShT
ZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisK
KyAgICAvLyBGSVhNRTogSWYgdGhlIHNlY3VyaXR5IG9yaWdpbiBpbiBxdWVzdGlvbiBoYXMgbmV2
ZXIgaGFkIGEgc3RvcmFnZSBhcmVhIGVzdGFibGlzaGVkLAorICAgIC8vIHdlIG5lZWQgdG8gYXNr
IGEgY2xpZW50IGNhbGwgaWYgZXN0YWJsaXNoaW5nIGl0IGlzIG9rYXkuICBJZiB0aGUgY2xpZW50
IGRlbmllcyB0aGUgcmVxdWVzdCwKKyAgICAvLyB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBudWxs
LgorICAgIC8vIFRoZSBzb3VyY2VGcmFtZSBhcmd1bWVudCBleGlzdHMgZm9yIHRoZSBwdXJwb3Nl
IG9mIGFza2luZyBhIGNsaWVudC4KKyAgICAvLyBUbyBrbm93IGlmIGFuIGFyZWEgaGFzIHByZXZp
b3VzbHkgYmVlbiBlc3RhYmxpc2hlZCwgd2UgbmVlZCB0byB3YWl0IHVudGlsIHRoaXMgTG9jYWxT
dG9yYWdlIAorICAgIC8vIG9iamVjdCBoYXMgZmluaXNoZWQgaXQncyBBcmVhSW1wb3J0IHRhc2su
CisKKworICAgIC8vIEZJWE1FOiBJZiB0aGUgc3RvcmFnZSBhcmVhIGlzIGJlaW5nIGVzdGFibGlz
aGVkIGZvciB0aGUgZmlyc3QgdGltZSBoZXJlLCB3ZSBuZWVkIHRvIAorICAgIC8vIHN5bmMgaXRz
IGV4aXN0YW5jZSBhbmQgcXVvdGEgb3V0IHRvIGRpc2sgdmlhIGFuIHRhc2sgb2YgdHlwZSBBcmVh
U3luYworCisgICAgUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhOworICAgIGlm
IChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpCisgICAgICAgIHJl
dHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7CisgICAgICAgIAorICAgIHN0b3JhZ2VBcmVhID0g
TG9jYWxTdG9yYWdlQXJlYTo6Y3JlYXRlKG9yaWdpbiwgdGhpcyk7CisgICAgbV9zdG9yYWdlQXJl
YU1hcC5zZXQob3JpZ2luLCBzdG9yYWdlQXJlYSk7CisgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJl
bGVhc2UoKTsKK30KKworU3RyaW5nIExvY2FsU3RvcmFnZTo6ZnVsbERhdGFiYXNlRmlsZW5hbWUo
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKK3sKKyAgICAvLyBGSVhNRTogT25jZSB3ZSBhY3R1YWxs
eSB0cmFjayBvcmlnaW4vcXVvdGEgZW50cmllcyB0byBzZWUgd2hpY2ggb3JpZ2lucyBoYXZlIGxv
Y2FsIHN0b3JhZ2UgZXN0YWJsaXNoZWQsCisgICAgLy8gd2Ugd2lsbCByZXR1cm4gYW4gZW1wdHkg
cGF0aCBuYW1lIGlmIHRoZSBvcmlnaW4gaXNuJ3QgYWxsb3dlZCB0byBoYXZlIExvY2FsU3RvcmFn
ZS4KKyAgICAvLyBXZSdsbCBuZWVkIHRvIHdhaXQgaGVyZSB1bnRpbCB0aGUgQXJlYUltcG9ydCB0
YXNrIHRvIGNvbXBsZXRlIGJlZm9yZSBtYWtpbmcgdGhhdCBkZWNpc2lvbi4KKworICAgIGlmICht
X3BhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBBU1NFUlQo
b3JpZ2luKTsKKyAgICBpZiAoIW9yaWdpbikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisg
ICAgaWYgKCFtYWtlQWxsRGlyZWN0b3JpZXMobV9wYXRoKSkgeworICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZWQgdG8gY3JlYXRlIExvY2FsU3RvcmFnZSBkYXRhYmFzZSBwYXRoICVzIiwgbV9wYXRo
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAg
cmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX3BhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJ
ZGVudGlmaWVyKCkgKyAiLmxvY2Fsc3RvcmFnZSIpOworfQorCit2b2lkIExvY2FsU3RvcmFnZTo6
cGVyZm9ybUltcG9ydCgpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICAv
LyBGSVhNRTogSW1wb3J0IGFsbCBrbm93biBsb2NhbCBzdG9yYWdlIG9yaWdpbnMgaGVyZSBhbG9u
ZyB3aXRoIHRoZWlyIHF1b3RhcworfQorCit2b2lkIExvY2FsU3RvcmFnZTo6cGVyZm9ybVN5bmMo
KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gRklYTUU6IFdyaXRl
IG91dCBuZXcgb3JpZ2lucyBhbmQgcXVvdGFzIGhlcmUKK30KKwordm9pZCBMb2NhbFN0b3JhZ2U6
OmNsb3NlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgTG9jYWxTdG9y
YWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKKyAgICBm
b3IgKExvY2FsU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPnNjaGVkdWxlRmlu
YWxTeW5jKCk7CisKKyAgICBpZiAobV90aHJlYWQpIHsKKyAgICAgICAgbV90aHJlYWQtPnRlcm1p
bmF0ZSgpOworICAgICAgICBtX3RocmVhZCA9IDA7CisgICAgfQorfQorCitib29sIExvY2FsU3Rv
cmFnZTo6c2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVhKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAobV90aHJlYWQpCisgICAg
ICAgIG1fdGhyZWFkLT5zY2hlZHVsZUltcG9ydChhcmVhKTsKKworICAgIHJldHVybiBtX3RocmVh
ZDsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2U6OnNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2Fs
U3RvcmFnZUFyZWE+IGFyZWEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBp
ZiAobV90aHJlYWQpCisgICAgICAgIG1fdGhyZWFkLT5zY2hlZHVsZVN5bmMoYXJlYSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3lu
Y01hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01h
bmFnZXIuY3BwCShyZXZpc2lvbiA0NDM2MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3lu
Y01hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNCArMjQsMTMgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlLmgiCisjaW5jbHVkZSAi
U3RvcmFnZVN5bmNNYW5hZ2VyLmgiCiAKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiU3Rv
cmFnZUFyZWEuaCIKQEAgLTM5LDgyICszOCwyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIExvY2FsU3RvcmFnZSo+IExvY2FsU3RvcmFnZU1hcDsK
LQotc3RhdGljIExvY2FsU3RvcmFnZU1hcCYgbG9jYWxTdG9yYWdlTWFwKCkKK1Bhc3NSZWZQdHI8
U3RvcmFnZVN5bmNNYW5hZ2VyPiBTdG9yYWdlU3luY01hbmFnZXI6OmNyZWF0ZShjb25zdCBTdHJp
bmcmIHBhdGgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VNYXAsIGxv
Y2FsU3RvcmFnZU1hcCwgKCkpOwotICAgIHJldHVybiBsb2NhbFN0b3JhZ2VNYXA7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlU3luY01hbmFnZXIocGF0aCkpOwogfQogCi1QYXNzUmVm
UHRyPExvY2FsU3RvcmFnZT4gTG9jYWxTdG9yYWdlOjpsb2NhbFN0b3JhZ2UoY29uc3QgU3RyaW5n
JiBwYXRoKQotewotICAgIGNvbnN0IFN0cmluZyBsb29rdXBQYXRoID0gcGF0aC5pc051bGwoKSA/
IFN0cmluZygiIikgOiBwYXRoOwotICAgIExvY2FsU3RvcmFnZU1hcDo6aXRlcmF0b3IgaXQgPSBs
b2NhbFN0b3JhZ2VNYXAoKS5maW5kKGxvb2t1cFBhdGgpOwotICAgIGlmIChpdCA9PSBsb2NhbFN0
b3JhZ2VNYXAoKS5lbmQoKSkgewotICAgICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlPiBsb2NhbFN0
b3JhZ2UgPSBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlKGxvb2t1cFBhdGgpKTsKLSAgICAgICAg
bG9jYWxTdG9yYWdlTWFwKCkuc2V0KGxvb2t1cFBhdGgsIGxvY2FsU3RvcmFnZS5nZXQoKSk7Ci0g
ICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UucmVsZWFzZSgpOwotICAgIH0KLSAgICAKLSAgICBy
ZXR1cm4gaXQtPnNlY29uZDsKLX0KLQotTG9jYWxTdG9yYWdlOjpMb2NhbFN0b3JhZ2UoY29uc3Qg
U3RyaW5nJiBwYXRoKQorU3RvcmFnZVN5bmNNYW5hZ2VyOjpTdG9yYWdlU3luY01hbmFnZXIoY29u
c3QgU3RyaW5nJiBwYXRoKQogICAgIDogbV9wYXRoKHBhdGguY29weSgpKQogewotICAgIC8vIElm
IHRoZSBwYXRoIGlzIGVtcHR5LCB3ZSBrbm93IHdlJ3JlIG5ldmVyIGdvaW5nIHRvIGJlIHVzaW5n
IHRoZSB0aHJlYWQgZm9yIGFueXRoaW5nLCBzbyBkb24ndCBzdGFydCBpdC4KLSAgICAvLyBJbiB0
aGUgZnV0dXJlLCB3ZSBtaWdodCBhbHNvIHdhbnQgdG8gY29uc2lkZXIgcmVtb3ZpbmcgaXQgZnJv
bSB0aGUgRE9NIGluIHRoYXQgY2FzZSAtIDxyZGFyOi8vcHJvYmxlbS81OTYwNDcwPgotICAgIGlm
IChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghbV9wYXRoLmlz
RW1wdHkoKSk7CiAKICAgICBtX3RocmVhZCA9IExvY2FsU3RvcmFnZVRocmVhZDo6Y3JlYXRlKCk7
CiAgICAgbV90aHJlYWQtPnN0YXJ0KCk7Ci0gICAgbV90aHJlYWQtPnNjaGVkdWxlSW1wb3J0KHRo
aXMpOwotfQotCi1Mb2NhbFN0b3JhZ2U6On5Mb2NhbFN0b3JhZ2UoKQotewotICAgIEFTU0VSVChs
b2NhbFN0b3JhZ2VNYXAoKS5nZXQobV9wYXRoKSA9PSB0aGlzKTsKLSAgICBsb2NhbFN0b3JhZ2VN
YXAoKS5yZW1vdmUobV9wYXRoKTsKIH0KIAotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gTG9jYWxT
dG9yYWdlOjpzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQorU3RyaW5nIFN0b3Jh
Z2VTeW5jTWFuYWdlcjo6ZnVsbERhdGFiYXNlRmlsZW5hbWUoU2VjdXJpdHlPcmlnaW4qIG9yaWdp
bikKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gRklYTUU6IElmIHRo
ZSBzZWN1cml0eSBvcmlnaW4gaW4gcXVlc3Rpb24gaGFzIG5ldmVyIGhhZCBhIHN0b3JhZ2UgYXJl
YSBlc3RhYmxpc2hlZCwKLSAgICAvLyB3ZSBuZWVkIHRvIGFzayBhIGNsaWVudCBjYWxsIGlmIGVz
dGFibGlzaGluZyBpdCBpcyBva2F5LiAgSWYgdGhlIGNsaWVudCBkZW5pZXMgdGhlIHJlcXVlc3Qs
Ci0gICAgLy8gdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbnVsbC4KLSAgICAvLyBUaGUgc291cmNl
RnJhbWUgYXJndW1lbnQgZXhpc3RzIGZvciB0aGUgcHVycG9zZSBvZiBhc2tpbmcgYSBjbGllbnQu
Ci0gICAgLy8gVG8ga25vdyBpZiBhbiBhcmVhIGhhcyBwcmV2aW91c2x5IGJlZW4gZXN0YWJsaXNo
ZWQsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGlzIExvY2FsU3RvcmFnZSAKLSAgICAvLyBvYmpl
Y3QgaGFzIGZpbmlzaGVkIGl0J3MgQXJlYUltcG9ydCB0YXNrLgotCi0KLSAgICAvLyBGSVhNRTog
SWYgdGhlIHN0b3JhZ2UgYXJlYSBpcyBiZWluZyBlc3RhYmxpc2hlZCBmb3IgdGhlIGZpcnN0IHRp
bWUgaGVyZSwgd2UgbmVlZCB0byAKLSAgICAvLyBzeW5jIGl0cyBleGlzdGFuY2UgYW5kIHF1b3Rh
IG91dCB0byBkaXNrIHZpYSBhbiB0YXNrIG9mIHR5cGUgQXJlYVN5bmMKLQotICAgIFJlZlB0cjxM
b2NhbFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYTsKLSAgICBpZiAoc3RvcmFnZUFyZWEgPSBtX3N0
b3JhZ2VBcmVhTWFwLmdldChvcmlnaW4pKQotICAgICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVs
ZWFzZSgpOwotICAgICAgICAKLSAgICBzdG9yYWdlQXJlYSA9IExvY2FsU3RvcmFnZUFyZWE6OmNy
ZWF0ZShvcmlnaW4sIHRoaXMpOwotICAgIG1fc3RvcmFnZUFyZWFNYXAuc2V0KG9yaWdpbiwgc3Rv
cmFnZUFyZWEpOwotICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7Ci19Ci0KLVN0cmlu
ZyBMb2NhbFN0b3JhZ2U6OmZ1bGxEYXRhYmFzZUZpbGVuYW1lKFNlY3VyaXR5T3JpZ2luKiBvcmln
aW4pCi17Ci0gICAgLy8gRklYTUU6IE9uY2Ugd2UgYWN0dWFsbHkgdHJhY2sgb3JpZ2luL3F1b3Rh
IGVudHJpZXMgdG8gc2VlIHdoaWNoIG9yaWdpbnMgaGF2ZSBsb2NhbCBzdG9yYWdlIGVzdGFibGlz
aGVkLAotICAgIC8vIHdlIHdpbGwgcmV0dXJuIGFuIGVtcHR5IHBhdGggbmFtZSBpZiB0aGUgb3Jp
Z2luIGlzbid0IGFsbG93ZWQgdG8gaGF2ZSBMb2NhbFN0b3JhZ2UuCi0gICAgLy8gV2UnbGwgbmVl
ZCB0byB3YWl0IGhlcmUgdW50aWwgdGhlIEFyZWFJbXBvcnQgdGFzayB0byBjb21wbGV0ZSBiZWZv
cmUgbWFraW5nIHRoYXQgZGVjaXNpb24uCi0KLSAgICBpZiAobV9wYXRoLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotCiAgICAgQVNTRVJUKG9yaWdpbik7Ci0gICAgaWYgKCFv
cmlnaW4pCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIGlmICghbWFrZUFsbERpcmVj
dG9yaWVzKG1fcGF0aCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGVkIHRvIGNyZWF0ZSBM
b2NhbFN0b3JhZ2UgZGF0YWJhc2UgcGF0aCAlcyIsIG1fcGF0aC51dGY4KCkuZGF0YSgpKTsKQEAg
LTEyNCw0NyArNjQsMzAgQEAgU3RyaW5nIExvY2FsU3RvcmFnZTo6ZnVsbERhdGFiYXNlRmlsZW5h
bQogICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9wYXRoLCBvcmlnaW4tPmRh
dGFiYXNlSWRlbnRpZmllcigpICsgIi5sb2NhbHN0b3JhZ2UiKTsKIH0KIAotdm9pZCBMb2NhbFN0
b3JhZ2U6OnBlcmZvcm1JbXBvcnQoKQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwot
Ci0gICAgLy8gRklYTUU6IEltcG9ydCBhbGwga25vd24gbG9jYWwgc3RvcmFnZSBvcmlnaW5zIGhl
cmUgYWxvbmcgd2l0aCB0aGVpciBxdW90YXMKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2U6OnBlcmZv
cm1TeW5jKCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIEZJWE1F
OiBXcml0ZSBvdXQgbmV3IG9yaWdpbnMgYW5kIHF1b3RhcyBoZXJlCi19Ci0KLXZvaWQgTG9jYWxT
dG9yYWdlOjpjbG9zZSgpCit2b2lkIFN0b3JhZ2VTeW5jTWFuYWdlcjo6Y2xvc2UoKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBMb2NhbFN0b3JhZ2VBcmVhTWFwOjppdGVy
YXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwotICAgIGZvciAoTG9jYWxTdG9yYWdl
QXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2NoZWR1bGVGaW5hbFN5bmMoKTsKLQorICAg
IAogICAgIGlmIChtX3RocmVhZCkgewogICAgICAgICBtX3RocmVhZC0+dGVybWluYXRlKCk7CiAg
ICAgICAgIG1fdGhyZWFkID0gMDsKICAgICB9CiB9CiAKLWJvb2wgTG9jYWxTdG9yYWdlOjpzY2hl
ZHVsZUltcG9ydChQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCitib29sIFN0b3Jh
Z2VTeW5jTWFuYWdlcjo6c2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVh
PiBhcmVhKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KKyAgICAKICAgICBpZiAo
bV90aHJlYWQpCiAgICAgICAgIG1fdGhyZWFkLT5zY2hlZHVsZUltcG9ydChhcmVhKTsKIAogICAg
IHJldHVybiBtX3RocmVhZDsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2U6OnNjaGVkdWxlU3luYyhQ
YXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCit2b2lkIFN0b3JhZ2VTeW5jTWFuYWdl
cjo6c2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIAogICAgIGlmIChtX3RocmVhZCkKICAgICAg
ICAgbV90aHJlYWQtPnNjaGVkdWxlU3luYyhhcmVhKTsKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlU3luY01hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZVN5bmNNYW5hZ2VyLmgJKHJldmlzaW9uIDQ0MzYxKQkoZnJvbSBXZWJDb3JlL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlLmg6NDQzNjEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5h
Z2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIExvY2FsU3RvcmFnZV9oCisjZGVm
aW5lIExvY2FsU3RvcmFnZV9oCisKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VBcmVhLmgiCisjaW5j
bHVkZSAiTG9jYWxTdG9yYWdlVGFzay5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRocmVhZC5o
IgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgUGFnZUdyb3VwOworICAgIGNs
YXNzIFN0b3JhZ2VBcmVhOworCisgICAgY2xhc3MgTG9jYWxTdG9yYWdlIDogcHVibGljIFRocmVh
ZFNhZmVTaGFyZWQ8TG9jYWxTdG9yYWdlPiB7CisgICAgcHVibGljOgorICAgICAgICB+TG9jYWxT
dG9yYWdlKCk7CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBsb2Nh
bFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBwYXRoKTsKKworICAgICAgICBQYXNzUmVmUHRyPFN0b3Jh
Z2VBcmVhPiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiopOworCisgICAgICAgIGJvb2wgc2No
ZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPik7CisgICAgICAgIHZvaWQg
c2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4pOworCisgICAgICAgIHZv
aWQgY2xvc2UoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIExvY2FsU3RvcmFnZShjb25zdCBT
dHJpbmcmIHBhdGgpOworCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+LCBSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4sIFNlY3VyaXR5T3JpZ2luSGFzaD4gTG9j
YWxTdG9yYWdlQXJlYU1hcDsKKyAgICAgICAgTG9jYWxTdG9yYWdlQXJlYU1hcCBtX3N0b3JhZ2VB
cmVhTWFwOworCisgICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+IG1fdGhyZWFkOwor
CisgICAgLy8gVGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBzdWJqZWN0IHRvIHRocmVhZCBzeW5j
aHJvbml6YXRpb24gaXNzdWVzCisgICAgcHVibGljOgorICAgICAgICAvLyBUbyBiZSBjYWxsZWQg
ZnJvbSB0aGUgYmFja2dyb3VuZCB0aHJlYWQ6CisgICAgICAgIFN0cmluZyBmdWxsRGF0YWJhc2VG
aWxlbmFtZShTZWN1cml0eU9yaWdpbiopOworCisgICAgICAgIHZvaWQgcGVyZm9ybUltcG9ydCgp
OworICAgICAgICB2b2lkIHBlcmZvcm1TeW5jKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBT
dHJpbmcgbV9wYXRoOworCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+LCB1bnNpZ25lZCBsb25nIGxvbmcsIFNlY3VyaXR5T3JpZ2luSGFzaD4gU2VjdXJpdHlP
cmlnaW5RdW90ZU1hcDsKKyAgICAgICAgU2VjdXJpdHlPcmlnaW5RdW90ZU1hcCBtX3NlY3VyaXR5
T3JpZ2luUXVvdGVNYXA7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gTG9jYWxTdG9yYWdlX2gKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01h
bmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2Vy
LmgJKHJldmlzaW9uIDQ0MzYxKQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywzMCArMjMsMjAgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLSNpZm5kZWYgTG9jYWxTdG9yYWdlX2gKLSNkZWZpbmUgTG9jYWxTdG9yYWdlX2gKKyNp
Zm5kZWYgU3RvcmFnZVN5bmNNYW5hZ2VyX2gKKyNkZWZpbmUgU3RvcmFnZVN5bmNNYW5hZ2VyX2gK
IAogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEuaCIKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VU
YXNrLmgiCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCi0jaW5jbHVkZSAiU2VjdXJp
dHlPcmlnaW5IYXNoLmgiCiAKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLSAgICBjbGFzcyBQYWdlR3JvdXA7Ci0gICAgY2xhc3MgU3RvcmFnZUFyZWE7Ci0K
LSAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxMb2NhbFN0
b3JhZ2U+IHsKKyAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI6IHB1YmxpYyBUaHJlYWRTYWZl
U2hhcmVkPFN0b3JhZ2VTeW5jTWFuYWdlcj4gewogICAgIHB1YmxpYzoKLSAgICAgICAgfkxvY2Fs
U3RvcmFnZSgpOwotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gbG9j
YWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0KLSAgICAgICAgUGFzc1JlZlB0cjxTdG9y
YWdlQXJlYT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qKTsKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKTsK
IAogICAgICAgICBib29sIHNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJl
YT4pOwogICAgICAgICB2b2lkIHNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFy
ZWE+KTsKQEAgLTU0LDEwICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9p
ZCBjbG9zZSgpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgTG9jYWxTdG9yYWdlKGNvbnN0IFN0
cmluZyYgcGF0aCk7Ci0KLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4sIFJlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiwgU2VjdXJpdHlPcmlnaW5IYXNoPiBMb2Nh
bFN0b3JhZ2VBcmVhTWFwOwotICAgICAgICBMb2NhbFN0b3JhZ2VBcmVhTWFwIG1fc3RvcmFnZUFy
ZWFNYXA7CisgICAgICAgIFN0b3JhZ2VTeW5jTWFuYWdlcihjb25zdCBTdHJpbmcmIHBhdGgpOwog
CiAgICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+IG1fdGhyZWFkOwogCkBAIC02Niwx
NiArNTMsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBUbyBiZSBjYWxsZWQg
ZnJvbSB0aGUgYmFja2dyb3VuZCB0aHJlYWQ6CiAgICAgICAgIFN0cmluZyBmdWxsRGF0YWJhc2VG
aWxlbmFtZShTZWN1cml0eU9yaWdpbiopOwogCi0gICAgICAgIHZvaWQgcGVyZm9ybUltcG9ydCgp
OwotICAgICAgICB2b2lkIHBlcmZvcm1TeW5jKCk7Ci0KICAgICBwcml2YXRlOgogICAgICAgICBT
dHJpbmcgbV9wYXRoOwotCi0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+LCB1bnNpZ25lZCBsb25nIGxvbmcsIFNlY3VyaXR5T3JpZ2luSGFzaD4gU2VjdXJpdHlP
cmlnaW5RdW90ZU1hcDsKLSAgICAgICAgU2VjdXJpdHlPcmlnaW5RdW90ZU1hcCBtX3NlY3VyaXR5
T3JpZ2luUXVvdGVNYXA7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gTG9jYWxTdG9yYWdlX2gKKyNlbmRpZiAvLyBTdG9yYWdlU3luY01hbmFnZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31014</attachid>
            <date>2009-06-05 15:37:55 -0700</date>
            <delta_ts>2009-06-22 15:46:53 -0700</delta_ts>
            <desc>Patch 2 in this set</desc>
            <filename>2.20090605.patch</filename>
            <type>text/plain</type>
            <size>10348</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcCBiL1dlYkNv
cmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcAppbmRleCAxZjBkNDcwLi41MGRjZDEwIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5jcHAKKysrIGIvV2Vi
Q29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwCkBAIC03OSwxMTIgKzc5LDYgQEAgdm9p
ZCBMb2NhbFN0b3JhZ2VBcmVhOjpzY2hlZHVsZUZpbmFsU3luYygpCiAgICAgbV9maW5hbFN5bmNT
Y2hlZHVsZWQgPSB0cnVlOwogfQogCi11bnNpZ25lZCBMb2NhbFN0b3JhZ2VBcmVhOjpsZW5ndGgo
KSBjb25zdAotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV9pbXBv
cnRDb21wbGV0ZSkKLSAgICAgICAgcmV0dXJuIGludGVybmFsTGVuZ3RoKCk7Ci0KLSAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9pbXBvcnRMb2NrKTsKLSAgICBpZiAobV9pbXBvcnRDb21wbGV0ZSkK
LSAgICAgICAgcmV0dXJuIGludGVybmFsTGVuZ3RoKCk7Ci0KLSAgICB3aGlsZSAoIW1faW1wb3J0
Q29tcGxldGUpCi0gICAgICAgIG1faW1wb3J0Q29uZGl0aW9uLndhaXQobV9pbXBvcnRMb2NrKTsK
LSAgICBBU1NFUlQobV9pbXBvcnRDb21wbGV0ZSk7Ci0gICAgCi0gICAgcmV0dXJuIGludGVybmFs
TGVuZ3RoKCk7Ci19Ci0KLVN0cmluZyBMb2NhbFN0b3JhZ2VBcmVhOjprZXkodW5zaWduZWQgaW5k
ZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0KLSAgICBpZiAobV9pbXBvcnRDb21wbGV0ZSkKLSAgICAgICAgcmV0dXJuIGludGVybmFs
S2V5KGluZGV4LCBlYyk7Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9pbXBvcnRMb2NrKTsK
LSAgICBpZiAobV9pbXBvcnRDb21wbGV0ZSkKLSAgICAgICAgcmV0dXJuIGludGVybmFsS2V5KGlu
ZGV4LCBlYyk7Ci0KLSAgICB3aGlsZSAoIW1faW1wb3J0Q29tcGxldGUpCi0gICAgICAgIG1faW1w
b3J0Q29uZGl0aW9uLndhaXQobV9pbXBvcnRMb2NrKTsKLSAgICBBU1NFUlQobV9pbXBvcnRDb21w
bGV0ZSk7Ci0KLSAgICByZXR1cm4gaW50ZXJuYWxLZXkoaW5kZXgsIGVjKTsKLX0KLQotU3RyaW5n
IExvY2FsU3RvcmFnZUFyZWE6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChtX2ltcG9ydENvbXBsZXRlKQot
ICAgICAgICByZXR1cm4gaW50ZXJuYWxHZXRJdGVtKGtleSk7Ci0KLSAgICBNdXRleExvY2tlciBs
b2NrZXIobV9pbXBvcnRMb2NrKTsKLSAgICBpZiAobV9pbXBvcnRDb21wbGV0ZSkKLSAgICAgICAg
cmV0dXJuIGludGVybmFsR2V0SXRlbShrZXkpOwotCi0gICAgU3RyaW5nIGl0ZW0gPSBpbnRlcm5h
bEdldEl0ZW0oa2V5KTsKLSAgICBpZiAoIWl0ZW0uaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBp
dGVtOwotCi0gICAgd2hpbGUgKCFtX2ltcG9ydENvbXBsZXRlKQotICAgICAgICBtX2ltcG9ydENv
bmRpdGlvbi53YWl0KG1faW1wb3J0TG9jayk7Ci0gICAgQVNTRVJUKG1faW1wb3J0Q29tcGxldGUp
OwotCi0gICAgcmV0dXJuIGludGVybmFsR2V0SXRlbShrZXkpOwotfQotCi12b2lkIExvY2FsU3Rv
cmFnZUFyZWE6OnNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUs
IEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogZnJhbWUpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLQotICAgIGlmIChtX2ltcG9ydENvbXBsZXRlKSB7Ci0gICAgICAgIGludGVybmFs
U2V0SXRlbShrZXksIHZhbHVlLCBlYywgZnJhbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faW1wb3J0TG9jayk7Ci0gICAgaW50ZXJuYWxTZXRJ
dGVtKGtleSwgdmFsdWUsIGVjLCBmcmFtZSk7Ci19Ci0KLXZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6
cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIGZyYW1lKQoteyAgICAKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG1faW1wb3J0Q29tcGxldGUpIHsKLSAg
ICAgICAgaW50ZXJuYWxSZW1vdmVJdGVtKGtleSwgZnJhbWUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faW1wb3J0TG9jayk7Ci0gICAgaW50ZXJu
YWxSZW1vdmVJdGVtKGtleSwgZnJhbWUpOwotfQotCi1ib29sIExvY2FsU3RvcmFnZUFyZWE6OmNv
bnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0KLSAgICBpZiAobV9pbXBvcnRDb21wbGV0ZSkKLSAgICAgICAgcmV0dXJuIGludGVy
bmFsQ29udGFpbnMoa2V5KTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2ltcG9ydExvY2sp
OwotICAgIGlmIChtX2ltcG9ydENvbXBsZXRlKQotICAgICAgICByZXR1cm4gaW50ZXJuYWxDb250
YWlucyhrZXkpOwotCi0gICAgYm9vbCBjb250YWluZWQgPSBpbnRlcm5hbENvbnRhaW5zKGtleSk7
Ci0gICAgaWYgKGNvbnRhaW5lZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICB3aGlsZSAo
IW1faW1wb3J0Q29tcGxldGUpCi0gICAgICAgIG1faW1wb3J0Q29uZGl0aW9uLndhaXQobV9pbXBv
cnRMb2NrKTsKLSAgICBBU1NFUlQobV9pbXBvcnRDb21wbGV0ZSk7Ci0KLSAgICByZXR1cm4gaW50
ZXJuYWxDb250YWlucyhrZXkpOwotfQotCiB2b2lkIExvY2FsU3RvcmFnZUFyZWE6Oml0ZW1DaGFu
Z2VkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJp
bmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKQEAgLTM3Myw2ICsyNjcsMjYgQEAgdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjptYXJr
SW1wb3J0ZWQoKQogICAgIG1faW1wb3J0Q29uZGl0aW9uLnNpZ25hbCgpOwogfQogCisvLyBGSVhN
RTogSW4gdGhlIGZ1dHVyZSwgd2Ugc2hvdWxkIGFsbG93IHVzZSBvZiBsb2NhbFN0b3JhZ2Ugd2hp
bGUgaXQncyBpbXBvcnRpbmcgKHdoZW4gc2FmZSB0byBkbyBzbykuCisvLyBCbG9ja2luZyBldmVy
eXRoaW5nIHVudGlsIHRoZSBpbXBvcnQgaXMgY29tcGxldGUgaXMgYnkgZmFyIHRoZSBzaW1wbGVz
dCBhbmQgc2FmZXN0IHRoaW5nIHRvIGRvLCBidXQKKy8vIHRoZXJlIGlzIGNlcnRhaW5seSByb29t
IGZvciBzYWZlIG9wdGltaXphdGlvbjogS2V5L2xlbmd0aCB3aWxsIG5ldmVyIGJlIGFibGUgdG8g
bWFrZSB1c2Ugb2Ygc3VjaCBhbgorLy8gb3B0aW1pemF0aW9uIChzaW5jZSB0aGUgb3JkZXIgb2Yg
aXRlcmF0aW9uIGNhbiBjaGFuZ2UgYXMgaXRlbXMgYXJlIGJlaW5nIGFkZGVkKS4gR2V0IGNhbiBy
ZXR1cm4gYW55CisvLyBpdGVtIGN1cnJlbnRseSBpbiB0aGUgbWFwLiBHZXQvcmVtb3ZlIGNhbiB3
b3JrIHdoZXRoZXIgb3Igbm90IGl0J3MgaW4gdGhlIG1hcCwgYnV0IHdlJ2xsIG5lZWQgYSBsaXN0
CisvLyBvZiBpdGVtcyB0aGUgaW1wb3J0IHNob3VsZCBub3Qgb3ZlcndyaXRlLiBDbGVhciBjYW4g
YWxzbyB3b3JrLCBidXQgaXQnbGwgbmVlZCB0byBraWxsIHRoZSBpbXBvcnQKKy8vIGpvYiBmaXJz
dC4KK3ZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKG1faW1wb3J0Q29t
cGxldGUpCisgICAgICAgIHJldHVybjsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2ltcG9y
dExvY2spOworICAgIHdoaWxlICghbV9pbXBvcnRDb21wbGV0ZSkKKyAgICAgICAgbV9pbXBvcnRD
b25kaXRpb24ud2FpdChtX2ltcG9ydExvY2spOworICAgIEFTU0VSVChtX2ltcG9ydENvbXBsZXRl
KTsKK30KKwogdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpzeW5jKGJvb2wgY2xlYXJJdGVtcywgY29u
c3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGl0ZW1zKQogewogICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEu
aCBiL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmgKaW5kZXggYzlkMTViMi4uZTM3
N2I1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaAorKysg
Yi9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5oCkBAIC02OSwxNCArNjksNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAvLyBUaGUgZm9sbG93aW5nIG1lbWJlcnMgYXJlIHN1
YmplY3QgdG8gdGhyZWFkIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuCiAgICAgcHVibGljOgotICAg
ICAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkCi0gICAgICAgIHZpcnR1YWwgdW5zaWdu
ZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGtleSh1bnNpZ25lZCBp
bmRleCwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFN0cmluZyBnZXRJ
dGVtKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SXRlbShj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYsIEZy
YW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJdGVtKGNvbnN0
IFN0cmluZyYsIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjb250
YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7Ci0KICAgICAgICAgLy8gQ2FsbGVkIGZyb20g
dGhlIGJhY2tncm91bmQgdGhyZWFkCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtSW1wb3J0
KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtU3luYygpOwpAQCAtOTQsNiArODYsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIG11dGFibGUgVGhyZWFkQ29uZGl0aW9uIG1f
aW1wb3J0Q29uZGl0aW9uOwogICAgICAgICBtdXRhYmxlIGJvb2wgbV9pbXBvcnRDb21wbGV0ZTsK
ICAgICAgICAgdm9pZCBtYXJrSW1wb3J0ZWQoKTsKKyAgICAgICAgdm9pZCBibG9ja1VudGlsSW1w
b3J0Q29tcGxldGUoKSBjb25zdDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwIGIvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VBcmVhLmNwcAppbmRleCAyN2Y5NjEyLi44ZWVhOTcxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlQXJlYS5jcHAKQEAgLTUyLDEzICs1MiwxNSBAQCBTdG9yYWdlQXJlYTo6flN0b3JhZ2VBcmVh
KCkKIHsKIH0KIAotdW5zaWduZWQgU3RvcmFnZUFyZWE6OmludGVybmFsTGVuZ3RoKCkgY29uc3QK
K3Vuc2lnbmVkIFN0b3JhZ2VBcmVhOjpsZW5ndGgoKSBjb25zdAogewogICAgIHJldHVybiBtX3N0
b3JhZ2VNYXAtPmxlbmd0aCgpOwogfQogCi1TdHJpbmcgU3RvcmFnZUFyZWE6OmludGVybmFsS2V5
KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK1N0cmluZyBTdG9yYWdl
QXJlYTo6a2V5KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKKyAg
ICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICAKICAgICBTdHJpbmcga2V5OwogICAg
IAogICAgIGlmICghbV9zdG9yYWdlTWFwLT5rZXkoaW5kZXgsIGtleSkpIHsKQEAgLTY5LDE0ICs3
MSwxNyBAQCBTdHJpbmcgU3RvcmFnZUFyZWE6OmludGVybmFsS2V5KHVuc2lnbmVkIGluZGV4LCBF
eGNlcHRpb25Db2RlJiBlYykgY29uc3QKICAgICByZXR1cm4ga2V5OwogfQogCi1TdHJpbmcgU3Rv
cmFnZUFyZWE6OmludGVybmFsR2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKK1N0cmlu
ZyBTdG9yYWdlQXJlYTo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKIHsKKyAgICBi
bG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICAKICAgICByZXR1cm4gbV9zdG9yYWdlTWFw
LT5nZXRJdGVtKGtleSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWE6OmludGVybmFsU2V0SXRlbShj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMs
IEZyYW1lKiBmcmFtZSkKK3ZvaWQgU3RvcmFnZUFyZWE6OnNldEl0ZW0oY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogZnJhbWUp
CiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc051bGwoKSk7CisgICAgYmxvY2tVbnRpbEltcG9ydENv
bXBsZXRlKCk7CiAgICAgCiAgICAgaWYgKGZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZh
dGVCcm93c2luZ0VuYWJsZWQoKSkgewogICAgICAgICBlYyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsK
QEAgLTEwMSw4ICsxMDYsMTAgQEAgdm9pZCBTdG9yYWdlQXJlYTo6aW50ZXJuYWxTZXRJdGVtKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHQKICAgICAgICAgaXRl
bUNoYW5nZWQoa2V5LCBvbGRWYWx1ZSwgdmFsdWUsIGZyYW1lKTsKIH0KIAotdm9pZCBTdG9yYWdl
QXJlYTo6aW50ZXJuYWxSZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSogZnJhbWUp
Cit2b2lkIFN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSog
ZnJhbWUpCiB7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgCiAgICAgaWYg
KGZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0xMTYsOCArMTIzLDEwIEBAIHZvaWQgU3RvcmFnZUFyZWE6Omlu
dGVybmFsUmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIGZyYW1lKQogICAgICAg
ICBpdGVtUmVtb3ZlZChrZXksIG9sZFZhbHVlLCBmcmFtZSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFy
ZWE6OmludGVybmFsQ2xlYXIoRnJhbWUqIGZyYW1lKQordm9pZCBTdG9yYWdlQXJlYTo6Y2xlYXIo
RnJhbWUqIGZyYW1lKQogeworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOworICAgIAog
ICAgIGlmIChmcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5wcml2YXRlQnJvd3NpbmdFbmFibGVk
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTEyNiw4ICsxMzUsMTAgQEAgdm9pZCBTdG9y
YWdlQXJlYTo6aW50ZXJuYWxDbGVhcihGcmFtZSogZnJhbWUpCiAgICAgYXJlYUNsZWFyZWQoZnJh
bWUpOwogfQogCi1ib29sIFN0b3JhZ2VBcmVhOjppbnRlcm5hbENvbnRhaW5zKGNvbnN0IFN0cmlu
ZyYga2V5KSBjb25zdAorYm9vbCBTdG9yYWdlQXJlYTo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBr
ZXkpIGNvbnN0CiB7CisgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CisgICAgCiAgICAg
cmV0dXJuIG1fc3RvcmFnZU1hcC0+Y29udGFpbnMoa2V5KTsKIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmggYi9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEu
aAppbmRleCAyMTYzMjg3Li4zODhiOTAyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZUFyZWEuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaApAQCAtNDQsMTMg
KzQ0LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1
YWwgflN0b3JhZ2VBcmVhKCk7CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsTGVuZ3RoKCk7IH0KLSAgICAgICAgdmlydHVh
bCBTdHJpbmcga2V5KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QgeyBy
ZXR1cm4gaW50ZXJuYWxLZXkoaW5kZXgsIGVjKTsgfQotICAgICAgICB2aXJ0dWFsIFN0cmluZyBn
ZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEdldEl0ZW0o
a2V5KTsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBzb3VyY2VGcmFt
ZSkgeyBpbnRlcm5hbFNldEl0ZW0oa2V5LCB2YWx1ZSwgZWMsIHNvdXJjZUZyYW1lKTsgfQotICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIHNv
dXJjZUZyYW1lKSB7IGludGVybmFsUmVtb3ZlSXRlbShrZXksIHNvdXJjZUZyYW1lKTsgfQotICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoRnJhbWUqIHNvdXJjZUZyYW1lKSB7IGludGVybmFsQ2xl
YXIoc291cmNlRnJhbWUpOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjb250YWlucyhjb25zdCBT
dHJpbmcmIGtleSkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxDb250YWlucyhrZXkpOyB9CisgICAg
ICAgIC8vIFRoZSBIVE1MNSBET00gU3RvcmFnZSBBUEkKKyAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBrZXkodW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkp
IGNvbnN0OworICAgICAgICB2b2lkIHNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogc291cmNlRnJhbWUpOworICAg
ICAgICB2b2lkIHJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBzb3VyY2VGcmFt
ZSk7CisgICAgICAgIHZvaWQgY2xlYXIoRnJhbWUqIHNvdXJjZUZyYW1lKTsKKyAgICAgICAgYm9v
bCBjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICBT
ZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSB7IHJldHVybiBtX3NlY3VyaXR5T3JpZ2lu
LmdldCgpOyB9CiAKQEAgLTU4LDE0ICs1OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qKTsKICAgICAgICAgU3RvcmFnZUFyZWEoU2Vj
dXJpdHlPcmlnaW4qLCBTdG9yYWdlQXJlYSopOwogICAgICAgICAgICAgICAgIAotICAgICAgICB1
bnNpZ25lZCBpbnRlcm5hbExlbmd0aCgpIGNvbnN0OwotICAgICAgICBTdHJpbmcgaW50ZXJuYWxL
ZXkodW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICAgICAgU3RyaW5n
IGludGVybmFsR2V0SXRlbShjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICAgICAgdm9pZCBpbnRl
cm5hbFNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmLCBGcmFtZSogc291cmNlRnJhbWUpOwotICAgICAgICB2b2lkIGludGVybmFsUmVt
b3ZlSXRlbShjb25zdCBTdHJpbmcmLCBGcmFtZSogc291cmNlRnJhbWUpOwotICAgICAgICB2b2lk
IGludGVybmFsQ2xlYXIoRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICAgICAgYm9vbCBpbnRlcm5h
bENvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsKLSAgICAgICAgCiAgICAgICAgIC8v
IFRoaXMgaXMgbWVhbnQgdG8gYmUgY2FsbGVkIGZyb20gYSBiYWNrZ3JvdW5kIHRocmVhZCBmb3Ig
TG9jYWxTdG9yYWdlQXJlYSdzIGJhY2tncm91bmQgdGhyZWFkIGltcG9ydCBwcm9jZWR1cmUuCiAg
ICAgICAgIHZvaWQgaW1wb3J0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSk7CiAKQEAgLTczLDYgKzY2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIHZvaWQgaXRlbUNoYW5nZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
b2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSkgPSAw
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgaXRlbVJlbW92ZWQoY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgb2xkVmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSkgPSAwOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgYXJlYUNsZWFyZWQoRnJhbWUqIHNvdXJjZUZyYW1lKSA9IDA7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdCB7IH0KIAogICAg
ICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fc2VjdXJpdHlPcmlnaW47CiAgICAgICAgIFJl
ZlB0cjxTdG9yYWdlTWFwPiBtX3N0b3JhZ2VNYXA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31016</attachid>
            <date>2009-06-05 16:04:44 -0700</date>
            <delta_ts>2009-06-16 15:56:30 -0700</delta_ts>
            <desc>A _slight_ ref of patch 1</desc>
            <filename>1.20090605.patch</filename>
            <type>text/plain</type>
            <size>29027</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MGI2ZjA2Zi4uZTI3N2MyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MiBAQAorMjAwOS0wNi0wNCAgSmVyZW15IE9ybG93
ICA8am9ybG93QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBGaXJzdCBzdGVwIGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNTM3NgorCisgICAgICAgIEFkZCBTdG9yYWdlU3luY01hbmFnZXIuY3Bw
L2gKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUucHJvOgor
ICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5i
a2w6CisKKyAgICAgICAgSW4gcHJlcGFyYXRpb24gZm9yIGNvbWJpbmluZyBTZXNzaW9uU3RvcmFn
ZSBhbmQgTG9jYWxTdG9yYWdlIGludG8gYQorICAgICAgICBzaW5nbGUgU3RvcmFnZU1hbmFnZXIs
IG1vdmUgdGhlIHN5bmNpbmcgYml0cyBvdXQgb2YgTG9jYWxTdG9yYWdlIGFuZAorICAgICAgICBp
bnRvIGl0cyBvd24gY2xhc3MuCisKKyAgICAgICAgVGhlIG5leHQgc3RlcCBpcyB0byBjb21iaW5l
IExvY2FsU3RvcmFnZUFyZWEgYW5kIFNlc3Npb25TdG9yYWdlQXJlYQorICAgICAgICBpbnRvIG9u
ZS4gIFRoZW4gU2Vzc2lvblN0b3JhZ2UgYW5kIExvY2FsU3RvcmFnZSBjYW4gYmUgY29tYmluZWQu
CisKKyAgICAgICAgTm90ZSB0aGF0IGNvbWJpbmluZyB0aGVtIHdpbGwgY3V0IGRvd24gb24gY29k
ZSBwYXRocyB0aGF0IG11c3QgYmUKKyAgICAgICAgcHJveGllZCwgZWxpbWluYXRlIHZpcnR1YWwg
ZGlzcGF0Y2gsIGFuZCBhbGxvdyBDaHJvbWl1bSB0byAoZXZlbnR1YWxseSkKKyAgICAgICAgd3Jp
dGUgaGlzdG9yaWNhbCBzZXNzaW9uU3RvcmFnZSB0byBkaXNrIHdoZW4gbWVtb3J5IGlzIGdldHRp
bmcgdGlnaHQuCisKKyAgICAgICAgQWxzbyByZW1vdmUgYSBjb3VwbGUgYml0cyBvZiBjcnVmdCBp
bmNsdWRpbmcgY29kZSBmb3IgcXVvdGFzIHdoaWNoIGlzCisgICAgICAgIHVubmVjZXNzYXJ5IChz
aW5jZSBhIG1ldGEtZGF0YSBkYiBpcyB1bm5lY2Vzc2FyeSBzaW5jZSB5b3UgY2FuIGp1c3QKKyAg
ICAgICAgY291bnQgYnl0ZXMgYXMgeW91IHJlYWQgdGhlIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2Vz
IGludG8gbWVtb3J5KS4KKworICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZTo6TG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxvY2FsU3RvcmFnZTo6c3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6TG9j
YWxTdG9yYWdlOjpjbG9zZSk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuaDoKKyAg
ICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TG9jYWxTdG9yYWdlQXJlYTo6TG9jYWxTdG9yYWdlQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpM
b2NhbFN0b3JhZ2VBcmVhOjpzY2hlZHVsZUZpbmFsU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpM
b2NhbFN0b3JhZ2VBcmVhOjpzeW5jVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpMb2Nh
bFN0b3JhZ2VBcmVhOjpwZXJmb3JtSW1wb3J0KToKKyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3Rv
cmFnZUFyZWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZUFyZWE6OmNyZWF0ZSk6
CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxvY2FsU3RvcmFnZVRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKiBzdG9yYWdlL0xv
Y2FsU3RvcmFnZVRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZVRhc2s6Oik6
CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVJbXBvcnQpOgorICAg
ICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcDoKKyAgICAgICAgKiBzdG9yYWdl
L0xvY2FsU3RvcmFnZVRocmVhZC5oOgorICAgICAgICAqIHN0b3JhZ2UvU2Vzc2lvblN0b3JhZ2Uu
aDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHA6IENvcGllZCBmcm9t
IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwLgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZVN5bmNNYW5hZ2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVN5bmNN
YW5hZ2VyOjpTdG9yYWdlU3luY01hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVN5
bmNNYW5hZ2VyOjpmdWxsRGF0YWJhc2VGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlU3luY01hbmFnZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFu
YWdlcjo6c2NoZWR1bGVJbXBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVN5bmNNYW5h
Z2VyOjpzY2hlZHVsZVN5bmMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2Vy
Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuaC4KKyAgICAgICAg
KFdlYkNvcmU6Oik6CisKIDIwMDktMDYtMDUgIFRvciBBcm5lIFZlc3Riw7ggIDx0b3IuYXJuZS52
ZXN0Ym9Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0KaW5kZXggNWZkMTQyMi4uZTYzODJiOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0yMDc2LDcgKzIwNzYsOSBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnQuY3BwIFwK
IAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmggXAogCVdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlTWFwLmNwcCBcCi0JV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VNYXAuaAorCVdlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlTWFwLmggXAorCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIu
Y3BwIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgKIGVuZGlmICMgRU5E
IEVOQUJMRV9ET01fU1RPUkFHRQogCiAjIC0tLS0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDc4MWM0ZDYuLmYzOGUwYzIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAt
MTM1Miw2ICsxMzUyLDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RPTV9TVE9SQUdFPTEp
IHsKICAgICAgICAgc3RvcmFnZS9TdG9yYWdlRXZlbnQuY3BwIFwKICAgICAgICAgc3RvcmFnZS9T
ZXNzaW9uU3RvcmFnZS5jcHAgXAogICAgICAgICBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlQXJlYS5j
cHAgXAorICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAgXAogICAgICAgICBi
aW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCiAKICAgICBJRExfQklORElOR1MgKz0gXApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNTg0YmVhYS4uMjMwZDlmYiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0xNTQ3MSw2ICsxNTQ3MSwx
NCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxzdG9yYWdlXFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFN0b3JhZ2VTeW5jTWFuYWdl
ci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5cc3RvcmFnZVxWZXJzaW9uQ2hhbmdlQ2FsbGJhY2suaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4N
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGIxNGIwNTEu
LmFmYjE2ODcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC00MjU2LDYgKzQyNTYsOCBAQAogCQlDMERGQzg3MDBEQjY4NDFBMDAzRUFFN0MgLyogSlNDb25z
b2xlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMwREZDODZGMERCNjg0MUEwMDNFQUU3QyAvKiBKU0NvbnNvbGVDdXN0b20uY3BwICovOyB9
OwogCQlDMTA1REE2MjBGM0FBNjhGMDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzEwNURB
NjEwRjNBQTY4RjAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCAqLzsgfTsK
IAkJQzEwNURBNjQwRjNBQTZCODAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMTA1REE2MzBGM0FB
NkI4MDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCAqLzsgfTsKKwkJQzUxMDJEOTQw
RkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8q
IFN0b3JhZ2VTeW5jTWFuYWdlci5oICovOyB9OworCQlDNTEwMkQ5NTBGRDlBQTJEMDBGQUZGMDQg
LyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM1MTAyRDkzMEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01h
bmFnZXIuY3BwICovOyB9OwogCQlDNkQ3NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2Vs
ZWN0aW9uTGlzdExldmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDNkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExl
dmVsLmggKi87IH07CiAJCUM2RDc0QUU0MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rp
b25MaXN0TGV2ZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzZENzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZl
bC5jcHAgKi87IH07CiAJCUQwNUNFRDI5MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0Nv
bW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi87IH07
CkBAIC05MDUzLDYgKzkwNTUsOCBAQAogCQlDMERGQzg2RjBEQjY4NDFBMDAzRUFFN0MgLyogSlND
b25zb2xlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
Q29uc29sZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMxMDVEQTYx
MEYzQUE2OEYwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMxMDVEQTYzMEYzQUE2QjgwMDFERDQ0RiAv
KiBUZXh0RW5jb2RpbmdEZXRlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUZXh0RW5jb2RpbmdEZXRlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
NTEwMkQ5MjBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VTeW5jTWFuYWdlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDNTEwMkQ5MzBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5
bmNNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3Jh
Z2VTeW5jTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQz
MDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2Rp
ZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0QmxvY2tDb21t
YW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2NDIsNiArOTY0Niw4IEBA
CiAJCQkJNTFFMEJBQkQwREE1NTQ4NDAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5pZGwgKi8sCiAJ
CQkJNTFFMEJCMzcwREE1QUNCNjAwQTlFNDE3IC8qIFN0b3JhZ2VNYXAuY3BwICovLAogCQkJCTUx
RTBCQjM2MERBNUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmggKi8sCisJCQkJQzUxMDJEOTIw
RkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICovLAorCQkJCUM1MTAyRDkz
MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwICovLAogCQkJKTsKIAkJ
CWluZGVudFdpZHRoID0gNDsKIAkJCXBhdGggPSBzdG9yYWdlOwpAQCAtMTY3ODgsNiArMTY3OTQs
NyBAQAogCQkJCTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA4MUVCRjNCMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODlDQ0M1MzBGNDRFOTgxMDBCNURBMTAgLyogUmVwbGFj
ZU5vZGVXaXRoU3BhbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCUM1MTAyRDk0MEZEOUFB
MkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTg3
ODEsNiArMTg3ODgsNyBAQAogCQkJCTg0NUU3MkZCMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDgxRUJGM0EwRkQzNEY0MTAwREE3NTU5IC8qIFNW
R0ZpbHRlckJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5Q0NDNTIwRjQ0RTk4MTAw
QjVEQTEwIC8qIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUM1MTAyRDk1MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbCBiL1dl
YkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCmluZGV4IGZiMWVhYjkuLjNjMDQ0YmMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCisrKyBiL1dlYkNvcmUvV2ViQ29yZVNvdXJj
ZXMuYmtsCkBAIC0xMDEzLDYgKzEwMTMsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qg
b2YgZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIHN0b3JhZ2UvU3RvcmFn
ZU1hcC5jcHAKICAgICAgICAgc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5jcHAKICAgICAgICAgc3Rv
cmFnZS9TZXNzaW9uU3RvcmFnZUFyZWEuY3BwCisgICAgICAgIHN0b3JhZ2UvU3RvcmFnZVN5bmNN
YW5hZ2VyLmNwcAogICAgIDwvc2V0PgogCiAgICAgPHNldCBhcHBlbmQ9IjEiIHZhcj0iV0VCQ09S
RV9TT1VSQ0VTX1hNTCI+CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdl
LmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCmluZGV4IDhiODRlMTcuLmM2
ZjIzNGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCisrKyBi
L1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VB
cmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCiAjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02MiwxNSArNjMsMTAgQEAg
UGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IExvY2FsU3RvcmFnZTo6bG9jYWxTdG9yYWdlKGNvbnN0
IFN0cmluZyYgcGF0aCkKIAogTG9jYWxTdG9yYWdlOjpMb2NhbFN0b3JhZ2UoY29uc3QgU3RyaW5n
JiBwYXRoKQogICAgIDogbV9wYXRoKHBhdGguY29weSgpKQorICAgICwgbV9zeW5jTWFuYWdlcigw
KQogewotICAgIC8vIElmIHRoZSBwYXRoIGlzIGVtcHR5LCB3ZSBrbm93IHdlJ3JlIG5ldmVyIGdv
aW5nIHRvIGJlIHVzaW5nIHRoZSB0aHJlYWQgZm9yIGFueXRoaW5nLCBzbyBkb24ndCBzdGFydCBp
dC4KLSAgICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSBtaWdodCBhbHNvIHdhbnQgdG8gY29uc2lkZXIg
cmVtb3ZpbmcgaXQgZnJvbSB0aGUgRE9NIGluIHRoYXQgY2FzZSAtIDxyZGFyOi8vcHJvYmxlbS81
OTYwNDcwPgotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV90aHJlYWQgPSBMb2NhbFN0b3JhZ2VUaHJlYWQ6OmNyZWF0ZSgpOwotICAgIG1fdGhyZWFkLT5z
dGFydCgpOwotICAgIG1fdGhyZWFkLT5zY2hlZHVsZUltcG9ydCh0aGlzKTsKKyAgICBpZiAoIW1f
cGF0aC5pc0VtcHR5KCkpCisgICAgICAgIG1fc3luY01hbmFnZXIgPSBTdG9yYWdlU3luY01hbmFn
ZXI6OmNyZWF0ZShtX3BhdGgpOwogfQogCiBMb2NhbFN0b3JhZ2U6On5Mb2NhbFN0b3JhZ2UoKQpA
QCAtOTAsNTQgKzg2LDE4IEBAIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IExvY2FsU3RvcmFnZTo6
c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKICAgICAvLyBUbyBrbm93IGlmIGFu
IGFyZWEgaGFzIHByZXZpb3VzbHkgYmVlbiBlc3RhYmxpc2hlZCwgd2UgbmVlZCB0byB3YWl0IHVu
dGlsIHRoaXMgTG9jYWxTdG9yYWdlIAogICAgIC8vIG9iamVjdCBoYXMgZmluaXNoZWQgaXQncyBB
cmVhSW1wb3J0IHRhc2suCiAKLQogICAgIC8vIEZJWE1FOiBJZiB0aGUgc3RvcmFnZSBhcmVhIGlz
IGJlaW5nIGVzdGFibGlzaGVkIGZvciB0aGUgZmlyc3QgdGltZSBoZXJlLCB3ZSBuZWVkIHRvIAog
ICAgIC8vIHN5bmMgaXRzIGV4aXN0YW5jZSBhbmQgcXVvdGEgb3V0IHRvIGRpc2sgdmlhIGFuIHRh
c2sgb2YgdHlwZSBBcmVhU3luYwogCiAgICAgUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IHN0b3Jh
Z2VBcmVhOwogICAgIGlmIChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdp
bikpCiAgICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7Ci0gICAgICAgIAotICAg
IHN0b3JhZ2VBcmVhID0gTG9jYWxTdG9yYWdlQXJlYTo6Y3JlYXRlKG9yaWdpbiwgdGhpcyk7Cisg
ICAgCisgICAgc3RvcmFnZUFyZWEgPSBMb2NhbFN0b3JhZ2VBcmVhOjpjcmVhdGUob3JpZ2luLCBt
X3N5bmNNYW5hZ2VyKTsKICAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VB
cmVhKTsKICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwogfQogCi1TdHJpbmcgTG9j
YWxTdG9yYWdlOjpmdWxsRGF0YWJhc2VGaWxlbmFtZShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQot
ewotICAgIC8vIEZJWE1FOiBPbmNlIHdlIGFjdHVhbGx5IHRyYWNrIG9yaWdpbi9xdW90YSBlbnRy
aWVzIHRvIHNlZSB3aGljaCBvcmlnaW5zIGhhdmUgbG9jYWwgc3RvcmFnZSBlc3RhYmxpc2hlZCwK
LSAgICAvLyB3ZSB3aWxsIHJldHVybiBhbiBlbXB0eSBwYXRoIG5hbWUgaWYgdGhlIG9yaWdpbiBp
c24ndCBhbGxvd2VkIHRvIGhhdmUgTG9jYWxTdG9yYWdlLgotICAgIC8vIFdlJ2xsIG5lZWQgdG8g
d2FpdCBoZXJlIHVudGlsIHRoZSBBcmVhSW1wb3J0IHRhc2sgdG8gY29tcGxldGUgYmVmb3JlIG1h
a2luZyB0aGF0IGRlY2lzaW9uLgotCi0gICAgaWYgKG1fcGF0aC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIEFTU0VSVChvcmlnaW4pOwotICAgIGlmICghb3JpZ2lu
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoIW1ha2VBbGxEaXJlY3Rvcmll
cyhtX3BhdGgpKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlZCB0byBjcmVhdGUgTG9jYWxT
dG9yYWdlIGRhdGFiYXNlIHBhdGggJXMiLCBtX3BhdGgudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KG1fcGF0aCwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICIubG9jYWxzdG9y
YWdlIik7Ci19Ci0KLXZvaWQgTG9jYWxTdG9yYWdlOjpwZXJmb3JtSW1wb3J0KCkKLXsKLSAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIEZJWE1FOiBJbXBvcnQgYWxsIGtub3du
IGxvY2FsIHN0b3JhZ2Ugb3JpZ2lucyBoZXJlIGFsb25nIHdpdGggdGhlaXIgcXVvdGFzCi19Ci0K
LXZvaWQgTG9jYWxTdG9yYWdlOjpwZXJmb3JtU3luYygpCi17Ci0gICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7Ci0KLSAgICAvLyBGSVhNRTogV3JpdGUgb3V0IG5ldyBvcmlnaW5zIGFuZCBxdW90
YXMgaGVyZQotfQotCiB2b2lkIExvY2FsU3RvcmFnZTo6Y2xvc2UoKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CkBAIC0xNDUsMjggKzEwNSw4IEBAIHZvaWQgTG9jYWxTdG9yYWdlOjpj
bG9zZSgpCiAgICAgTG9jYWxTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdl
QXJlYU1hcC5lbmQoKTsKICAgICBmb3IgKExvY2FsU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGl0
LT5zZWNvbmQtPnNjaGVkdWxlRmluYWxTeW5jKCk7Ci0KLSAgICBpZiAobV90aHJlYWQpIHsKLSAg
ICAgICAgbV90aHJlYWQtPnRlcm1pbmF0ZSgpOwotICAgICAgICBtX3RocmVhZCA9IDA7Ci0gICAg
fQotfQotCi1ib29sIExvY2FsU3RvcmFnZTo6c2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2Nh
bFN0b3JhZ2VBcmVhPiBhcmVhKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAg
ICBpZiAobV90aHJlYWQpCi0gICAgICAgIG1fdGhyZWFkLT5zY2hlZHVsZUltcG9ydChhcmVhKTsK
LQotICAgIHJldHVybiBtX3RocmVhZDsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2U6OnNjaGVkdWxl
U3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCi17Ci0gICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKLSAgICBpZiAobV90aHJlYWQpCi0gICAgICAgIG1fdGhyZWFkLT5zY2hl
ZHVsZVN5bmMoYXJlYSk7CisgICAgCisgICAgbV9zeW5jTWFuYWdlciA9IDA7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3Jh
Z2UuaCBiL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuaAppbmRleCAxZmQxZjdhLi43Mjdl
YzI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmgKKysrIGIvV2Vi
Q29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZS5oCkBAIC0yNywyMCArMjcsMTcgQEAKICNkZWZpbmUg
TG9jYWxTdG9yYWdlX2gKIAogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEuaCIKLSNpbmNsdWRl
ICJMb2NhbFN0b3JhZ2VUYXNrLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCiAj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCiAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAg
IGNsYXNzIFBhZ2VHcm91cDsKICAgICBjbGFzcyBTdG9yYWdlQXJlYTsKKyAgICBjbGFzcyBTdG9y
YWdlU3luY01hbmFnZXI7CiAKLSAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgVGhyZWFk
U2FmZVNoYXJlZDxMb2NhbFN0b3JhZ2U+IHsKKyAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxMb2NhbFN0b3JhZ2U+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIH5Mb2Nh
bFN0b3JhZ2UoKTsKIApAQCAtNDgsOSArNDUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4q
KTsKIAotICAgICAgICBib29sIHNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdl
QXJlYT4pOwotICAgICAgICB2b2lkIHNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFn
ZUFyZWE+KTsKLQogICAgICAgICB2b2lkIGNsb3NlKCk7CiAKICAgICBwcml2YXRlOgpAQCAtNTks
MjEgKzUzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+LCBTZWN1cml0
eU9yaWdpbkhhc2g+IExvY2FsU3RvcmFnZUFyZWFNYXA7CiAgICAgICAgIExvY2FsU3RvcmFnZUFy
ZWFNYXAgbV9zdG9yYWdlQXJlYU1hcDsKIAotICAgICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlVGhy
ZWFkPiBtX3RocmVhZDsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgc3ViamVj
dCB0byB0aHJlYWQgc3luY2hyb25pemF0aW9uIGlzc3VlcwotICAgIHB1YmxpYzoKLSAgICAgICAg
Ly8gVG8gYmUgY2FsbGVkIGZyb20gdGhlIGJhY2tncm91bmQgdGhyZWFkOgotICAgICAgICBTdHJp
bmcgZnVsbERhdGFiYXNlRmlsZW5hbWUoU2VjdXJpdHlPcmlnaW4qKTsKLQotICAgICAgICB2b2lk
IHBlcmZvcm1JbXBvcnQoKTsKLSAgICAgICAgdm9pZCBwZXJmb3JtU3luYygpOwotCi0gICAgcHJp
dmF0ZToKICAgICAgICAgU3RyaW5nIG1fcGF0aDsKLQotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgdW5zaWduZWQgbG9uZyBsb25nLCBTZWN1cml0eU9yaWdp
bkhhc2g+IFNlY3VyaXR5T3JpZ2luUXVvdGVNYXA7Ci0gICAgICAgIFNlY3VyaXR5T3JpZ2luUXVv
dGVNYXAgbV9zZWN1cml0eU9yaWdpblF1b3RlTWFwOworICAgICAgICBSZWZQdHI8U3RvcmFnZVN5
bmNNYW5hZ2VyPiBtX3N5bmNNYW5hZ2VyOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcCBiL1dl
YkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcAppbmRleCBjNDg2YmExLi4xZjBkNDcw
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5jcHAKKysrIGIv
V2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwCkBAIC00MywxOSArNDMsMTcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogLy8gSW5zdGVhZCwgcXVldWUgdXAgYSBiYXRjaCBvZiBpdGVt
cyB0byBzeW5jIGFuZCBhY3R1YWxseSBkbyB0aGUgc3luYyBhdCB0aGUgZm9sbG93aW5nIGludGVy
dmFsLgogc3RhdGljIGNvbnN0IGRvdWJsZSBMb2NhbFN0b3JhZ2VTeW5jSW50ZXJ2YWwgPSAxLjA7
CiAKLUxvY2FsU3RvcmFnZUFyZWE6OkxvY2FsU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbiwgTG9jYWxTdG9yYWdlKiBsb2NhbFN0b3JhZ2UpCitMb2NhbFN0b3JhZ2VBcmVhOjpMb2Nh
bFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5
bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKICAgICA6IFN0b3JhZ2VBcmVhKG9yaWdpbikKICAgICAs
IG1fc3luY1RpbWVyKHRoaXMsICZMb2NhbFN0b3JhZ2VBcmVhOjpzeW5jVGltZXJGaXJlZCkKICAg
ICAsIG1faXRlbXNDbGVhcmVkKGZhbHNlKQogICAgICwgbV9maW5hbFN5bmNTY2hlZHVsZWQoZmFs
c2UpCi0gICAgLCBtX2xvY2FsU3RvcmFnZShsb2NhbFN0b3JhZ2UpCisgICAgLCBtX3N5bmNNYW5h
Z2VyKHN5bmNNYW5hZ2VyKQogICAgICwgbV9jbGVhckl0ZW1zV2hpbGVTeW5jaW5nKGZhbHNlKQog
ICAgICwgbV9zeW5jU2NoZWR1bGVkKGZhbHNlKQogICAgICwgbV9pbXBvcnRDb21wbGV0ZShmYWxz
ZSkKIHsKLSAgICBBU1NFUlQobV9sb2NhbFN0b3JhZ2UpOwotICAgIAotICAgIGlmICghbV9sb2Nh
bFN0b3JhZ2UtPnNjaGVkdWxlSW1wb3J0KHRoaXMpKQorICAgIGlmICghbV9zeW5jTWFuYWdlciB8
fCAhbV9zeW5jTWFuYWdlci0+c2NoZWR1bGVJbXBvcnQodGhpcykpCiAgICAgICAgIG1faW1wb3J0
Q29tcGxldGUgPSB0cnVlOwogfQogCkBAIC02Niw2ICs2NCwxMCBAQCBMb2NhbFN0b3JhZ2VBcmVh
Ojp+TG9jYWxTdG9yYWdlQXJlYSgpCiAKIHZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6c2NoZWR1bGVG
aW5hbFN5bmMoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX3N5
bmNNYW5hZ2VyKQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgaWYgKG1fc3luY1RpbWVyLmlz
QWN0aXZlKCkpCiAgICAgICAgIG1fc3luY1RpbWVyLnN0b3AoKTsKICAgICBlbHNlIHsKQEAgLTI2
Niw2ICsyNjgsOCBAQCB2b2lkIExvY2FsU3RvcmFnZUFyZWE6OnNjaGVkdWxlQ2xlYXIoKQogdm9p
ZCBMb2NhbFN0b3JhZ2VBcmVhOjpzeW5jVGltZXJGaXJlZChUaW1lcjxMb2NhbFN0b3JhZ2VBcmVh
PiopCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fc3luY01hbmFn
ZXIpCisgICAgICAgIHJldHVybjsKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVy
YXRvciBpdCA9IG1fY2hhbmdlZEl0ZW1zLmJlZ2luKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz46Oml0ZXJhdG9yIGVuZCA9IG1fY2hhbmdlZEl0ZW1zLmVuZCgpOwpAQCAtMjg5LDcgKzI5
Myw3IEBAIHZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6c3luY1RpbWVyRmlyZWQoVGltZXI8TG9jYWxT
dG9yYWdlQXJlYT4qKQogICAgICAgICAgICAgLy8gcGVyZm9ybVN5bmMgZnVuY3Rpb24uCiAgICAg
ICAgICAgICBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKTsKIAotICAgICAgICAgICAgbV9sb2Nh
bFN0b3JhZ2UtPnNjaGVkdWxlU3luYyh0aGlzKTsKKyAgICAgICAgICAgIG1fc3luY01hbmFnZXIt
PnNjaGVkdWxlU3luYyh0aGlzKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzA0LDkgKzMwOCwx
MSBAQCB2b2lkIExvY2FsU3RvcmFnZUFyZWE6OnBlcmZvcm1JbXBvcnQoKQogewogICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7Cisg
ICAgaWYgKCFtX3N5bmNNYW5hZ2VyKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgZGF0
YWJhc2VGaWxlbmFtZSA9IG1fc3luY01hbmFnZXItPmZ1bGxEYXRhYmFzZUZpbGVuYW1lKHNlY3Vy
aXR5T3JpZ2luKCkpOwogCi0gICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX2xvY2FsU3Rv
cmFnZS0+ZnVsbERhdGFiYXNlRmlsZW5hbWUoc2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgCiAgICAg
aWYgKGRhdGFiYXNlRmlsZW5hbWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIExPR19FUlJPUigiRmls
ZW5hbWUgZm9yIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgaXMgZW1wdHkgLSBjYW5ub3Qgb3BlbiBm
b3IgcGVyc2lzdGVudCBzdG9yYWdlIik7CiAgICAgICAgIG1hcmtJbXBvcnRlZCgpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaCBiL1dlYkNvcmUvc3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VBcmVhLmgKaW5kZXggZjNjNmRjZS4uYzlkMTViMiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlQXJlYS5oCkBAIC0yOSwyMyArMjksMjQgQEAKICNpbmNsdWRlICJTUUxpdGVE
YXRhYmFzZS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFz
aC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAot
ICAgIGNsYXNzIExvY2FsU3RvcmFnZTsKKyAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI7CiAg
ICAgCiAgICAgY2xhc3MgTG9jYWxTdG9yYWdlQXJlYSA6IHB1YmxpYyBTdG9yYWdlQXJlYSB7CiAg
ICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5Mb2NhbFN0b3JhZ2VBcmVhKCk7CiAKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gY3JlYXRlKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4sIExvY2FsU3RvcmFnZSogbG9jYWxTdG9yYWdlKSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgTG9jYWxTdG9yYWdlQXJlYShvcmlnaW4sIGxvY2FsU3RvcmFnZSkpOyB9CisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGNyZWF0ZShTZWN1cml0eU9yaWdp
biogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2VBcmVhKG9yaWdpbiwgc3luY01hbmFnZXIp
KTsgfQogCiAgICAgICAgIHZvaWQgc2NoZWR1bGVGaW5hbFN5bmMoKTsKIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIExvY2FsU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBMb2NhbFN0b3JhZ2Uq
KTsKKyAgICAgICAgTG9jYWxTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFBhc3NSZWZQdHI8
U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcik7CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IGl0ZW1DaGFuZ2VkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBj
b25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgaXRlbVJlbW92ZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xk
VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7CkBAIC02MSw3ICs2Miw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIGJvb2wgbV9maW5hbFN5bmNTY2hlZHVsZWQ7CiAK
LSAgICAgICAgTG9jYWxTdG9yYWdlKiBtX2xvY2FsU3RvcmFnZTsKKyAgICAgICAgUmVmUHRyPFN0
b3JhZ2VTeW5jTWFuYWdlcj4gbV9zeW5jTWFuYWdlcjsKIAogICAgICAgICAvLyBUaGUgZGF0YWJh
c2UgaGFuZGxlIHdpbGwgb25seSBldmVyIGJlIG9wZW5lZCBhbmQgdXNlZCBvbiB0aGUgYmFja2dy
b3VuZCB0aHJlYWQuCiAgICAgICAgIFNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAgYi9XZWJDb3JlL3N0b3Jh
Z2UvTG9jYWxTdG9yYWdlVGFzay5jcHAKaW5kZXggM2Q1Yjk4Ny4uNjNlMDdlNSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3BwCisrKyBiL1dlYkNvcmUvc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcApAQCAtNDAsMTQgKzQwLDYgQEAgTG9jYWxTdG9yYWdl
VGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIHR5cGUsIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdl
QXJlYT4gYXJlYSkKICAgICBBU1NFUlQobV90eXBlID09IEFyZWFJbXBvcnQgfHwgbV90eXBlID09
IEFyZWFTeW5jKTsKIH0KIAotTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBl
IHR5cGUsIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBzdG9yYWdlKQotICAgIDogbV90eXBlKHR5
cGUpCi0gICAgLCBtX3N0b3JhZ2Uoc3RvcmFnZSkKLXsKLSAgICBBU1NFUlQobV9zdG9yYWdlKTsK
LSAgICBBU1NFUlQobV90eXBlID09IFN0b3JhZ2VJbXBvcnQgfHwgbV90eXBlID09IFN0b3JhZ2VT
eW5jKTsKLX0KLQogTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIHR5cGUs
IFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPiB0aHJlYWQpCiAgICAgOiBtX3R5cGUodHlw
ZSkKICAgICAsIG1fdGhyZWFkKHRocmVhZCkKQEAgLTU5LDE0ICs1MSw2IEBAIExvY2FsU3RvcmFn
ZVRhc2s6OkxvY2FsU3RvcmFnZVRhc2soVHlwZSB0eXBlLCBQYXNzUmVmUHRyPExvY2FsU3RvcmFn
ZVRocmVhZD4gdGhyCiB2b2lkIExvY2FsU3RvcmFnZVRhc2s6OnBlcmZvcm1UYXNrKCkKIHsKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewotICAgICAgICBjYXNlIFN0b3JhZ2VJbXBvcnQ6Ci0gICAgICAg
ICAgICBBU1NFUlQobV9zdG9yYWdlKTsKLSAgICAgICAgICAgIG1fc3RvcmFnZS0+cGVyZm9ybUlt
cG9ydCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3RvcmFnZVN5bmM6Ci0g
ICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlKTsKLSAgICAgICAgICAgIG1fc3RvcmFnZS0+cGVy
Zm9ybVN5bmMoKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFyZWFJbXBvcnQ6
CiAgICAgICAgICAgICBBU1NFUlQobV9hcmVhKTsKICAgICAgICAgICAgIG1fYXJlYS0+cGVyZm9y
bUltcG9ydCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2su
aCBiL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgKaW5kZXggNzkwNjNkMC4uMTli
Zjc5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAorKysg
Yi9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oCkBAIC0zMiwxNyArMzIsMTQgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgTG9jYWxTdG9yYWdlOwogICAgIGNs
YXNzIExvY2FsU3RvcmFnZUFyZWE7CiAgICAgY2xhc3MgTG9jYWxTdG9yYWdlVGhyZWFkOwogCiAg
ICAgY2xhc3MgTG9jYWxTdG9yYWdlVGFzayA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPExvY2Fs
U3RvcmFnZVRhc2s+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGVudW0gVHlwZSB7IFN0b3JhZ2VJ
bXBvcnQsIFN0b3JhZ2VTeW5jLCBBcmVhSW1wb3J0LCBBcmVhU3luYywgVGVybWluYXRlVGhyZWFk
IH07CisgICAgICAgIGVudW0gVHlwZSB7IEFyZWFJbXBvcnQsIEFyZWFTeW5jLCBUZXJtaW5hdGVU
aHJlYWQgfTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBj
cmVhdGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IHN0b3JhZ2UpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKFN0b3JhZ2VJbXBvcnQsIHN0b3JhZ2UpKTsgfQog
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVJbXBvcnQo
UGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVhKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
TG9jYWxTdG9yYWdlVGFzayhBcmVhSW1wb3J0LCBhcmVhKSk7IH0KLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlU3luYyhQYXNzUmVmUHRyPExvY2FsU3Rv
cmFnZT4gc3RvcmFnZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZVRhc2soU3Rv
cmFnZVN5bmMsIHN0b3JhZ2UpKTsgfQogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0
b3JhZ2VUYXNrPiBjcmVhdGVTeW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkg
eyByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZVRhc2soQXJlYVN5bmMsIGFyZWEpKTsg
fQogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVUZXJt
aW5hdGUoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+IHRocmVhZCkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IExvY2FsU3RvcmFnZVRhc2soVGVybWluYXRlVGhyZWFkLCB0aHJlYWQpKTsgfQog
CkBAIC01MCwxMiArNDcsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgTG9jYWxTdG9yYWdlVGFzayhUeXBlLCBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFy
ZWE+KTsKLSAgICAgICAgTG9jYWxTdG9yYWdlVGFzayhUeXBlLCBQYXNzUmVmUHRyPExvY2FsU3Rv
cmFnZT4pOwogICAgICAgICBMb2NhbFN0b3JhZ2VUYXNrKFR5cGUsIFBhc3NSZWZQdHI8TG9jYWxT
dG9yYWdlVGhyZWFkPik7CiAKICAgICAgICAgVHlwZSBtX3R5cGU7CiAgICAgICAgIFJlZlB0cjxM
b2NhbFN0b3JhZ2VBcmVhPiBtX2FyZWE7Ci0gICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2U+IG1f
c3RvcmFnZTsKICAgICAgICAgUmVmUHRyPExvY2FsU3RvcmFnZVRocmVhZD4gbV90aHJlYWQ7CiAg
ICAgfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5j
cHAgYi9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcAppbmRleCBkYTUwYzkw
Li5hZDIyZjkxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFk
LmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcApAQCAtODUs
MTggKzg1LDYgQEAgdm9pZCogTG9jYWxTdG9yYWdlVGhyZWFkOjpsb2NhbFN0b3JhZ2VUaHJlYWQo
KQogICAgIHJldHVybiAwOwogfQogCi12b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVJ
bXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IHN0b3JhZ2UpCi17Ci0gICAgQVNTRVJUKCFt
X3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOwotICAgIG1fcXVldWUuYXBwZW5kKExvY2Fs
U3RvcmFnZVRhc2s6OmNyZWF0ZUltcG9ydChzdG9yYWdlKSk7Ci19Ci0KLXZvaWQgTG9jYWxTdG9y
YWdlVGhyZWFkOjpzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IHN0b3JhZ2Up
Ci17Ci0gICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOwotICAgIG1f
cXVldWUuYXBwZW5kKExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZVN5bmMoc3RvcmFnZSkpOwotfQot
CiB2b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2Nh
bFN0b3JhZ2VBcmVhPiBhcmVhKQogewogICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBt
X3RocmVhZElEKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJl
YWQuaCBiL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuaAppbmRleCBlYjdkMWVm
Li5mODEwOGYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFk
LmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5oCkBAIC0zMyw3ICsz
Myw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIExvY2FsU3RvcmFnZTsK
ICAgICBjbGFzcyBMb2NhbFN0b3JhZ2VBcmVhOwogICAgIGNsYXNzIExvY2FsU3RvcmFnZVRhc2s7
CiAKQEAgLTQzLDggKzQyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wg
c3RhcnQoKTsKIAotICAgICAgICB2b2lkIHNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxT
dG9yYWdlPik7Ci0gICAgICAgIHZvaWQgc2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9y
YWdlPik7CiAgICAgICAgIHZvaWQgc2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3Jh
Z2VBcmVhPik7CiAgICAgICAgIHZvaWQgc2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9y
YWdlQXJlYT4pOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2Uu
aCBiL1dlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oCmluZGV4IDdiNTlhZWIuLjBkODdl
NjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oCisrKyBiL1dl
YkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVk
ZSAiU2Vzc2lvblN0b3JhZ2VBcmVhLmgiCiAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5j
TWFuYWdlci5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmRjYzM1Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKQEAgLTAsMCArMSw5NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCisKKyNpbmNsdWRl
ICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZpbGVTeXN0
ZW0uaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJl
YS5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gU3RvcmFnZVN5bmNNYW5hZ2VyOjpj
cmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3Rv
cmFnZVN5bmNNYW5hZ2VyKHBhdGgpKTsKK30KKworU3RvcmFnZVN5bmNNYW5hZ2VyOjpTdG9yYWdl
U3luY01hbmFnZXIoY29uc3QgU3RyaW5nJiBwYXRoKQorICAgIDogbV9wYXRoKHBhdGguY29weSgp
KQoreworICAgIEFTU0VSVCghbV9wYXRoLmlzRW1wdHkoKSk7CisKKyAgICBtX3RocmVhZCA9IExv
Y2FsU3RvcmFnZVRocmVhZDo6Y3JlYXRlKCk7CisgICAgbV90aHJlYWQtPnN0YXJ0KCk7Cit9CisK
K1N0cmluZyBTdG9yYWdlU3luY01hbmFnZXI6OmZ1bGxEYXRhYmFzZUZpbGVuYW1lKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4pCit7CisgICAgQVNTRVJUKG9yaWdpbik7CisKKyAgICBpZiAoIW1ha2VB
bGxEaXJlY3RvcmllcyhtX3BhdGgpKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlZCB0byBj
cmVhdGUgTG9jYWxTdG9yYWdlIGRhdGFiYXNlIHBhdGggJXMiLCBtX3BhdGgudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KG1fcGF0aCwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSAr
ICIubG9jYWxzdG9yYWdlIik7Cit9CisKK3ZvaWQgU3RvcmFnZVN5bmNNYW5hZ2VyOjpjbG9zZSgp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAKKyAgICBpZiAobV90aHJlYWQp
IHsKKyAgICAgICAgbV90aHJlYWQtPnRlcm1pbmF0ZSgpOworICAgICAgICBtX3RocmVhZCA9IDA7
CisgICAgfQorfQorCitib29sIFN0b3JhZ2VTeW5jTWFuYWdlcjo6c2NoZWR1bGVJbXBvcnQoUGFz
c1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVhKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgCisgICAgaWYgKG1fdGhyZWFkKQorICAgICAgICBtX3RocmVhZC0+c2NoZWR1
bGVJbXBvcnQoYXJlYSk7CisKKyAgICByZXR1cm4gbV90aHJlYWQ7Cit9CisKK3ZvaWQgU3RvcmFn
ZVN5bmNNYW5hZ2VyOjpzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBh
cmVhKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgCisgICAgaWYgKG1fdGhy
ZWFkKQorICAgICAgICBtX3RocmVhZC0+c2NoZWR1bGVTeW5jKGFyZWEpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNN
YW5hZ2VyLmggYi9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY0NzIyZgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaApAQCAtMCwwICsxLDYyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU3RvcmFn
ZVN5bmNNYW5hZ2VyX2gKKyNkZWZpbmUgU3RvcmFnZVN5bmNNYW5hZ2VyX2gKKworI2luY2x1ZGUg
IkxvY2FsU3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VUYXNrLmgiCisjaW5j
bHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCisKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjog
cHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U3RvcmFnZVN5bmNNYW5hZ2VyPiB7CisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IGNyZWF0ZShj
b25zdCBTdHJpbmcmIHBhdGgpOworCisgICAgICAgIGJvb2wgc2NoZWR1bGVJbXBvcnQoUGFzc1Jl
ZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPik7CisgICAgICAgIHZvaWQgc2NoZWR1bGVTeW5jKFBhc3NS
ZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4pOworCisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAg
IHByaXZhdGU6CisgICAgICAgIFN0b3JhZ2VTeW5jTWFuYWdlcihjb25zdCBTdHJpbmcmIHBhdGgp
OworCisgICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+IG1fdGhyZWFkOworCisgICAg
Ly8gVGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBzdWJqZWN0IHRvIHRocmVhZCBzeW5jaHJvbml6
YXRpb24gaXNzdWVzCisgICAgcHVibGljOgorICAgICAgICAvLyBUbyBiZSBjYWxsZWQgZnJvbSB0
aGUgYmFja2dyb3VuZCB0aHJlYWQ6CisgICAgICAgIFN0cmluZyBmdWxsRGF0YWJhc2VGaWxlbmFt
ZShTZWN1cml0eU9yaWdpbiopOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RyaW5nIG1fcGF0
aDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTdG9yYWdl
U3luY01hbmFnZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31024</attachid>
            <date>2009-06-05 19:11:27 -0700</date>
            <delta_ts>2009-06-23 13:38:15 -0700</delta_ts>
            <desc>Patch 3 in this set</desc>
            <filename>3.20090605.patch</filename>
            <type>text/plain</type>
            <size>40931</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYWZiMTY4Ny4u
MGY5OWY4YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTQyNTgsNiArNDI1OCw4IEBACiAJCUMxMDVEQTY0MEYzQUE2QjgwMDFERDQ0RiAvKiBUZXh0RW5j
b2RpbmdEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzEwNURBNjMwRjNBQTZCODAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmgg
Ki87IH07CiAJCUM1MTAyRDk0MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTAyRDky
MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuaCAqLzsgfTsKIAkJQzUxMDJE
OTUwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTEwMkQ5MzBGRDlBQTJEMDBGQUZG
MDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCAqLzsgfTsKKwkJQzUxMDJFQ0YwRkQ5RUY4QzAw
RkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzUxMDJFQ0QwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVh
U3luYy5oICovOyB9OworCQlDNTEwMkVEMDBGRDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFT
eW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1
MTAyRUNFMEZEOUVGOEMwMEZBRkYwNCAvKiBTdG9yYWdlQXJlYVN5bmMuY3BwICovOyB9OwogCQlD
NkQ3NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFEMzA5QUEy
ODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggKi87IH07CiAJCUM2RDc0
QUU0MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRTMwOUFBMjkw
QTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi87IH07CiAJCUQwNUNF
RDI5MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA1Q0VEMjcwQTQwQkIyQzAwQzVB
RjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi87IH07CkBAIC05MDU3LDYgKzkwNTksOCBA
QAogCQlDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEVuY29kaW5nRGV0ZWN0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8q
IFN0b3JhZ2VTeW5jTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dG9yYWdlU3luY01hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUxMDJE
OTMwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlU3luY01hbmFnZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDNTEwMkVDRDBGRDlFRjhDMDBGQUZGMDQgLyogU3RvcmFn
ZUFyZWFTeW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VBcmVh
U3luYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTEwMkVDRTBGRDlFRjhDMDBG
QUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFN0b3JhZ2VBcmVhU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExl
dmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBC
MEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJs
b2NrQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9y
bWF0QmxvY2tDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2NDEs
NiArOTY0NSw4IEBACiAJCQkJNTFFM0Y5RDEwREEwNUQ3MTAwMjUwOTExIC8qIFN0b3JhZ2UuaWRs
ICovLAogCQkJCTUxQkUzN0REMERBRUUwMEUwMDEwODVGQyAvKiBTdG9yYWdlQXJlYS5jcHAgKi8s
CiAJCQkJNTFCRTM3REUwREFFRTAwRTAwMTA4NUZDIC8qIFN0b3JhZ2VBcmVhLmggKi8sCisJCQkJ
QzUxMDJFQ0QwRkQ5RUY4QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5oICovLAorCQkJCUM1
MTAyRUNFMEZEOUVGOEMwMEZBRkYwNCAvKiBTdG9yYWdlQXJlYVN5bmMuY3BwICovLAogCQkJCTUx
RTBCQUJBMERBNTU0NzEwMEE5RTQxNyAvKiBTdG9yYWdlRXZlbnQuY3BwICovLAogCQkJCTUxRTBC
QUI5MERBNTU0NzEwMEE5RTQxNyAvKiBTdG9yYWdlRXZlbnQuaCAqLywKIAkJCQk1MUUwQkFCRDBE
QTU1NDg0MDBBOUU0MTcgLyogU3RvcmFnZUV2ZW50LmlkbCAqLywKQEAgLTE2Nzk1LDYgKzE2ODAx
LDcgQEAKIAkJCQkwODFFQkYzQjBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTg5Q0NDNTMwRjQ0RTk4MTAwQjVEQTEwIC8qIFJlcGxhY2VO
b2RlV2l0aFNwYW5Db21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTEwMkQ5NDBGRDlBQTJE
MDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlDNTEw
MkVDRjBGRDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFyZWFTeW5jLmggaW4gSGVhZGVycyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
QEAgLTE4Nzg5LDYgKzE4Nzk2LDcgQEAKIAkJCQkwODFFQkYzQTBGRDM0RjQxMDBEQTc1NTkgLyog
U1ZHRmlsdGVyQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODlDQ0M1MjBGNDRFOTgx
MDBCNURBMTAgLyogUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzUxMDJEOTUwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlDNTEwMkVEMDBGRDlFRjhDMDBGQUZGMDQgLyogU3RvcmFnZUFy
ZWFTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0xv
Y2FsU3RvcmFnZUFyZWEuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuY3Bw
CmluZGV4IGVlYTQ3NjQuLmYwNTliMjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VBcmVhLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5j
cHAKQEAgLTMwLDc2ICszMCw0NiBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9y
YWdlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgotI2luY2x1
ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VFdmVudC5oIgotI2luY2x1
ZGUgIlN1ZGRlblRlcm1pbmF0aW9uLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgiCisj
aW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Ly8gSWYgdGhlIExvY2FsU3RvcmFnZUFyZWEgdW5kZXJnb2VzIHJhcGlkIGNoYW5nZXMsIGRvbid0
IHN5bmMgZWFjaCBjaGFuZ2UgdG8gZGlzay4KLS8vIEluc3RlYWQsIHF1ZXVlIHVwIGEgYmF0Y2gg
b2YgaXRlbXMgdG8gc3luYyBhbmQgYWN0dWFsbHkgZG8gdGhlIHN5bmMgYXQgdGhlIGZvbGxvd2lu
ZyBpbnRlcnZhbC4KLXN0YXRpYyBjb25zdCBkb3VibGUgTG9jYWxTdG9yYWdlU3luY0ludGVydmFs
ID0gMS4wOwotCi1Mb2NhbFN0b3JhZ2VBcmVhOjpMb2NhbFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikK
LSAgICA6IFN0b3JhZ2VBcmVhKG9yaWdpbikKLSAgICAsIG1fc3luY1RpbWVyKHRoaXMsICZMb2Nh
bFN0b3JhZ2VBcmVhOjpzeW5jVGltZXJGaXJlZCkKLSAgICAsIG1faXRlbXNDbGVhcmVkKGZhbHNl
KQotICAgICwgbV9maW5hbFN5bmNTY2hlZHVsZWQoZmFsc2UpCi0gICAgLCBtX3N5bmNNYW5hZ2Vy
KHN5bmNNYW5hZ2VyKQotICAgICwgbV9jbGVhckl0ZW1zV2hpbGVTeW5jaW5nKGZhbHNlKQotICAg
ICwgbV9zeW5jU2NoZWR1bGVkKGZhbHNlKQotICAgICwgbV9pbXBvcnRDb21wbGV0ZShmYWxzZSkK
K1Bhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gTG9jYWxTdG9yYWdlQXJlYTo6Y3JlYXRlKFNl
Y3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5j
TWFuYWdlcikKIHsKLSAgICBpZiAoIW1fc3luY01hbmFnZXIgfHwgIW1fc3luY01hbmFnZXItPnNj
aGVkdWxlSW1wb3J0KHRoaXMpKQotICAgICAgICBtX2ltcG9ydENvbXBsZXRlID0gdHJ1ZTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZUFyZWEob3JpZ2luLCBzeW5jTWFuYWdl
cikpOwogfQogCi1Mb2NhbFN0b3JhZ2VBcmVhOjp+TG9jYWxTdG9yYWdlQXJlYSgpCitMb2NhbFN0
b3JhZ2VBcmVhOjpMb2NhbFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NS
ZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKKyAgICA6IFN0b3JhZ2VBcmVh
KG9yaWdpbikKKyAgICAsIG1fc3RvcmFnZUFyZWFTeW5jKFN0b3JhZ2VBcmVhU3luYzo6Y3JlYXRl
KHN5bmNNYW5hZ2VyLCB0aGlzKSkKKyAgICAsIG1fc3RvcmFnZVN5bmNNYW5hZ2VyKHN5bmNNYW5h
Z2VyKQogewotICAgIEFTU0VSVCghbV9zeW5jVGltZXIuaXNBY3RpdmUoKSk7CiB9CiAKIHZvaWQg
TG9jYWxTdG9yYWdlQXJlYTo6c2NoZWR1bGVGaW5hbFN5bmMoKQogewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX3N5bmNNYW5hZ2VyKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgaWYgKG1fc3luY1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fc3luY1RpbWVy
LnN0b3AoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiYWxhbmNl
ZCBieSB0aGUgY2FsbCB0byBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbiBpbiB0aGUKLSAgICAgICAg
Ly8gc3luY1RpbWVyRmlyZWQgZnVuY3Rpb24uCi0gICAgICAgIGRpc2FibGVTdWRkZW5UZXJtaW5h
dGlvbigpOwotICAgIH0KLSAgICBzeW5jVGltZXJGaXJlZCgmbV9zeW5jVGltZXIpOwotICAgIG1f
ZmluYWxTeW5jU2NoZWR1bGVkID0gdHJ1ZTsKKyAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1
bGVGaW5hbFN5bmMoKTsKIH0KIAogdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjppdGVtQ2hhbmdlZChj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBu
ZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0KLSAgICBzY2hlZHVsZUl0ZW1Gb3JTeW5jKGtleSwgbmV3VmFsdWUpOworICAgIG1fc3Rv
cmFnZUFyZWFTeW5jLT5zY2hlZHVsZUl0ZW1Gb3JTeW5jKGtleSwgbmV3VmFsdWUpOwogICAgIGRp
c3BhdGNoU3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBzb3VyY2VGcmFtZSk7
CiB9CiAKIHZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6aXRlbVJlbW92ZWQoY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSkKIHsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc2NoZWR1bGVJdGVtRm9yU3luYyhrZXksIFN0
cmluZygpKTsKKyAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVJdGVtRm9yU3luYyhrZXks
IFN0cmluZygpKTsKICAgICBkaXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCBTdHJp
bmcoKSwgc291cmNlRnJhbWUpOwogfQogCiB2b2lkIExvY2FsU3RvcmFnZUFyZWE6OmFyZWFDbGVh
cmVkKEZyYW1lKiBzb3VyY2VGcmFtZSkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
Ci0gICAgc2NoZWR1bGVDbGVhcigpOworICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUNs
ZWFyKCk7CiAgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoU3RyaW5nKCksIFN0cmluZygpLCBTdHJp
bmcoKSwgc291cmNlRnJhbWUpOwogfQogCkBAIC0xMjgsMjQ1ICs5OCw0IEBAIHZvaWQgTG9jYWxT
dG9yYWdlQXJlYTo6ZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgb2xkCiAgICAgICAgIGZyYW1lc1tpXS0+ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hXaW5k
b3dFdmVudChTdG9yYWdlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBr
ZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50
VVJJKCksIHNvdXJjZUZyYW1lLT5kb21XaW5kb3coKSkpOwogfQogCi12b2lkIExvY2FsU3RvcmFn
ZUFyZWE6OnNjaGVkdWxlSXRlbUZvclN5bmMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1f
ZmluYWxTeW5jU2NoZWR1bGVkKTsKLQotICAgIG1fY2hhbmdlZEl0ZW1zLnNldChrZXksIHZhbHVl
KTsKLSAgICBpZiAoIW1fc3luY1RpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgbV9zeW5jVGlt
ZXIuc3RhcnRPbmVTaG90KExvY2FsU3RvcmFnZVN5bmNJbnRlcnZhbCk7Ci0KLSAgICAgICAgLy8g
VGhlIGZvbGxvd2luZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVTdWRkZW5UZXJt
aW5hdGlvbiBpbiB0aGUKLSAgICAgICAgLy8gc3luY1RpbWVyRmlyZWQgZnVuY3Rpb24uCi0gICAg
ICAgIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOwotICAgIH0KLX0KLQotdm9pZCBMb2NhbFN0
b3JhZ2VBcmVhOjpzY2hlZHVsZUNsZWFyKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIEFTU0VSVCghbV9maW5hbFN5bmNTY2hlZHVsZWQpOwotCi0gICAgbV9jaGFuZ2VkSXRl
bXMuY2xlYXIoKTsKLSAgICBtX2l0ZW1zQ2xlYXJlZCA9IHRydWU7Ci0gICAgaWYgKCFtX3N5bmNU
aW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIG1fc3luY1RpbWVyLnN0YXJ0T25lU2hvdChMb2Nh
bFN0b3JhZ2VTeW5jSW50ZXJ2YWwpOwotCi0gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYmFs
YW5jZWQgYnkgdGhlIGNhbGwgdG8gZW5hYmxlU3VkZGVuVGVybWluYXRpb24gaW4gdGhlCi0gICAg
ICAgIC8vIHN5bmNUaW1lckZpcmVkIGZ1bmN0aW9uLgotICAgICAgICBkaXNhYmxlU3VkZGVuVGVy
bWluYXRpb24oKTsKLSAgICB9Ci19Ci0KLXZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6c3luY1RpbWVy
RmlyZWQoVGltZXI8TG9jYWxTdG9yYWdlQXJlYT4qKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgaWYgKCFtX3N5bmNNYW5hZ2VyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBtX2NoYW5nZWRJdGVtcy5iZWdp
bigpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBlbmQgPSBtX2NoYW5n
ZWRJdGVtcy5lbmQoKTsKLSAgICAKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X3N5bmNMb2NrKTsKLQotICAgICAgICBpZiAobV9pdGVtc0NsZWFyZWQpIHsKLSAgICAgICAgICAg
IG1faXRlbXNQZW5kaW5nU3luYy5jbGVhcigpOwotICAgICAgICAgICAgbV9jbGVhckl0ZW1zV2hp
bGVTeW5jaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIG1faXRlbXNDbGVhcmVkID0gZmFsc2U7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAg
bV9pdGVtc1BlbmRpbmdTeW5jLnNldChpdC0+Zmlyc3QuY29weSgpLCBpdC0+c2Vjb25kLmNvcHko
KSk7Ci0KLSAgICAgICAgaWYgKCFtX3N5bmNTY2hlZHVsZWQpIHsKLSAgICAgICAgICAgIG1fc3lu
Y1NjaGVkdWxlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYmFs
YW5jZWQgYnkgdGhlIGNhbGwgdG8gZW5hYmxlU3VkZGVuVGVybWluYXRpb24gaW4gdGhlCi0gICAg
ICAgICAgICAvLyBwZXJmb3JtU3luYyBmdW5jdGlvbi4KLSAgICAgICAgICAgIGRpc2FibGVTdWRk
ZW5UZXJtaW5hdGlvbigpOwotCi0gICAgICAgICAgICBtX3N5bmNNYW5hZ2VyLT5zY2hlZHVsZVN5
bmModGhpcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJh
bGFuY2VkIGJ5IHRoZSBjYWxscyB0byBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24gaW4gdGhlCi0g
ICAgLy8gc2NoZWR1bGVJdGVtRm9yU3luYywgc2NoZWR1bGVDbGVhciwgYW5kIHNjaGVkdWxlRmlu
YWxTeW5jIGZ1bmN0aW9ucy4KLSAgICBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpOwotCi0gICAg
bV9jaGFuZ2VkSXRlbXMuY2xlYXIoKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpwZXJm
b3JtSW1wb3J0KCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQo
IW1fZGF0YWJhc2UuaXNPcGVuKCkpOwotICAgIGlmICghbV9zeW5jTWFuYWdlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX3N5bmNNYW5hZ2VyLT5m
dWxsRGF0YWJhc2VGaWxlbmFtZShzZWN1cml0eU9yaWdpbigpKTsKLQotICAgIGlmIChkYXRhYmFz
ZUZpbGVuYW1lLmlzRW1wdHkoKSkgewotICAgICAgICBMT0dfRVJST1IoIkZpbGVuYW1lIGZvciBs
b2NhbCBzdG9yYWdlIGRhdGFiYXNlIGlzIGVtcHR5IC0gY2Fubm90IG9wZW4gZm9yIHBlcnNpc3Rl
bnQgc3RvcmFnZSIpOwotICAgICAgICBtYXJrSW1wb3J0ZWQoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKGRhdGFiYXNlRmlsZW5hbWUpKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG9wZW4gZGF0YWJhc2UgZmlsZSAlcyBmb3IgbG9j
YWwgc3RvcmFnZSIsIGRhdGFiYXNlRmlsZW5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIG1h
cmtJbXBvcnRlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX2RhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBJdGVtVGFibGUg
KGtleSBURVhUIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLCB2YWx1ZSBURVhUIE5PVCBOVUxM
IE9OIENPTkZMSUNUIEZBSUwpIikpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3Jl
YXRlIHRhYmxlIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOwotICAgICAgICBtYXJrSW1w
b3J0ZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCBrZXksIHZhbHVlIEZST00gSXRlbVRhYmxlIik7
Ci0gICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICBMT0df
RVJST1IoIlVuYWJsZSB0byBzZWxlY3QgaXRlbXMgZnJvbSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0
b3JhZ2UiKTsKLSAgICAgICAgbWFya0ltcG9ydGVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaXRlbU1hcDsKLQotICAgIGludCBy
ZXN1bHQgPSBxdWVyeS5zdGVwKCk7Ci0gICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cp
IHsKLSAgICAgICAgaXRlbU1hcC5zZXQocXVlcnkuZ2V0Q29sdW1uVGV4dCgwKSwgcXVlcnkuZ2V0
Q29sdW1uVGV4dCgxKSk7Ci0gICAgICAgIHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKLSAgICB9Ci0K
LSAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJF
cnJvciByZWFkaW5nIGl0ZW1zIGZyb20gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7Ci0g
ICAgICAgIG1hcmtJbXBvcnRlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1faW1wb3J0TG9jayk7Ci0gICAgCi0gICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gaXRlbU1hcC5iZWdpbigpOwotICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+OjppdGVyYXRvciBlbmQgPSBpdGVtTWFwLmVuZCgpOwotICAgIAotICAgIGZv
ciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGltcG9ydEl0ZW0oaXQtPmZpcnN0LCBpdC0+
c2Vjb25kKTsKLSAgICAKLSAgICBtX2ltcG9ydENvbXBsZXRlID0gdHJ1ZTsKLSAgICBtX2ltcG9y
dENvbmRpdGlvbi5zaWduYWwoKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjptYXJrSW1w
b3J0ZWQoKQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1faW1wb3J0TG9jayk7Ci0gICAgbV9pbXBvcnRDb21wbGV0ZSA9IHRydWU7Ci0g
ICAgbV9pbXBvcnRDb25kaXRpb24uc2lnbmFsKCk7Ci19Ci0KLS8vIEZJWE1FOiBJbiB0aGUgZnV0
dXJlLCB3ZSBzaG91bGQgYWxsb3cgdXNlIG9mIGxvY2FsU3RvcmFnZSB3aGlsZSBpdCdzIGltcG9y
dGluZyAod2hlbiBzYWZlIHRvIGRvIHNvKS4KLS8vIEJsb2NraW5nIGV2ZXJ5dGhpbmcgdW50aWwg
dGhlIGltcG9ydCBpcyBjb21wbGV0ZSBpcyBieSBmYXIgdGhlIHNpbXBsZXN0IGFuZCBzYWZlc3Qg
dGhpbmcgdG8gZG8sIGJ1dAotLy8gdGhlcmUgaXMgY2VydGFpbmx5IHJvb20gZm9yIHNhZmUgb3B0
aW1pemF0aW9uOiBLZXkvbGVuZ3RoIHdpbGwgbmV2ZXIgYmUgYWJsZSB0byBtYWtlIHVzZSBvZiBz
dWNoIGFuCi0vLyBvcHRpbWl6YXRpb24gKHNpbmNlIHRoZSBvcmRlciBvZiBpdGVyYXRpb24gY2Fu
IGNoYW5nZSBhcyBpdGVtcyBhcmUgYmVpbmcgYWRkZWQpLiBHZXQgY2FuIHJldHVybiBhbnkKLS8v
IGl0ZW0gY3VycmVudGx5IGluIHRoZSBtYXAuIEdldC9yZW1vdmUgY2FuIHdvcmsgd2hldGhlciBv
ciBub3QgaXQncyBpbiB0aGUgbWFwLCBidXQgd2UnbGwgbmVlZCBhIGxpc3QKLS8vIG9mIGl0ZW1z
IHRoZSBpbXBvcnQgc2hvdWxkIG5vdCBvdmVyd3JpdGUuIENsZWFyIGNhbiBhbHNvIHdvcmssIGJ1
dCBpdCdsbCBuZWVkIHRvIGtpbGwgdGhlIGltcG9ydAotLy8gam9iIGZpcnN0Lgotdm9pZCBMb2Nh
bFN0b3JhZ2VBcmVhOjpibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdAotewotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBGYXN0IHBhdGggdG8gYXZvaWQgbG9ja2lu
Zy4KLSAgICBpZiAobV9pbXBvcnRDb21wbGV0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1faW1wb3J0TG9jayk7Ci0gICAgd2hpbGUgKCFtX2ltcG9ydENvbXBs
ZXRlKQotICAgICAgICBtX2ltcG9ydENvbmRpdGlvbi53YWl0KG1faW1wb3J0TG9jayk7Ci0gICAg
QVNTRVJUKG1faW1wb3J0Q29tcGxldGUpOwotfQotCi12b2lkIExvY2FsU3RvcmFnZUFyZWE6OnN5
bmMoYm9vbCBjbGVhckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgaXRlbXMp
Ci17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2Uu
aXNPcGVuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSBjbGVhciBmbGFnIGlz
IHNldCwgdGhlbiB3ZSBjbGVhciBhbGwgaXRlbXMgb3V0IGJlZm9yZSB3ZSB3cml0ZSBhbnkgbmV3
IG9uZXMgaW4uCi0gICAgaWYgKGNsZWFySXRlbXMpIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50
IGNsZWFyKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBJdGVtVGFibGUiKTsKLSAgICAgICAgaWYg
KGNsZWFyLnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewotICAgICAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gcHJlcGFyZSBjbGVhciBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9j
YWwgc3RvcmFnZSBkYXRhYmFzZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpbnQgcmVzdWx0ID0gY2xlYXIuc3RlcCgpOwotICAgICAgICBpZiAo
cmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIGNsZWFyIGFsbCBpdGVtcyBpbiB0aGUgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSAtICVpIiwg
cmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFNR
TGl0ZVN0YXRlbWVudCBpbnNlcnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBW
QUxVRVMgKD8sID8pIik7Ci0gICAgaWYgKGluc2VydC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBpbnNlcnQgc3RhdGVtZW50
IC0gY2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmUobV9kYXRhYmFzZSwgIkRF
TEVURSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBrZXk9PyIpOwotICAgIGlmIChyZW1vdmUucHJlcGFy
ZSgpICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHByZXBh
cmUgZGVsZXRlIHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBsb2NhbCBzdG9yYWdlIGRhdGFi
YXNlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaXRlbXMuZW5kKCk7Ci0KLSAgICBmb3IgKEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGl0ZW1zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAvLyBCYXNlZCBvbiB0aGUgbnVsbC1uZXNzIG9mIHRo
ZSBzZWNvbmQgYXJndW1lbnQsIGRlY2lkZSB3aGV0aGVyIHRoaXMgaXMgYW4gaW5zZXJ0IG9yIGEg
ZGVsZXRlLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5ID0gaXQtPnNlY29uZC5pc051
bGwoKSA/IHJlbW92ZSA6IGluc2VydDsgICAgICAgIAotCi0gICAgICAgIHF1ZXJ5LmJpbmRUZXh0
KDEsIGl0LT5maXJzdCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBu
b24tbnVsbCwgd2UncmUgZG9pbmcgYW4gaW5zZXJ0LCBzbyBiaW5kIGl0IGFzIHRoZSB2YWx1ZS4g
Ci0gICAgICAgIGlmICghaXQtPnNlY29uZC5pc051bGwoKSkKLSAgICAgICAgICAgIHF1ZXJ5LmJp
bmRUZXh0KDIsIGl0LT5zZWNvbmQpOwotCi0gICAgICAgIGludCByZXN1bHQgPSBxdWVyeS5zdGVw
KCk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGl0ZW0gaW4gdGhlIGxvY2FsIHN0b3JhZ2UgZGF0
YWJhc2UgLSAlaSIsIHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIHF1ZXJ5LnJlc2V0KCk7Ci0gICAgfQotfQotCi12b2lkIExvY2FsU3RvcmFnZUFyZWE6
OnBlcmZvcm1TeW5jKCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIGJv
b2wgY2xlYXJJdGVtczsKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBpdGVtczsKLSAgICB7
Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3N5bmNMb2NrKTsKLQotICAgICAgICBBU1NF
UlQobV9zeW5jU2NoZWR1bGVkKTsKLQotICAgICAgICBjbGVhckl0ZW1zID0gbV9jbGVhckl0ZW1z
V2hpbGVTeW5jaW5nOwotICAgICAgICBtX2l0ZW1zUGVuZGluZ1N5bmMuc3dhcChpdGVtcyk7Ci0K
LSAgICAgICAgbV9jbGVhckl0ZW1zV2hpbGVTeW5jaW5nID0gZmFsc2U7Ci0gICAgICAgIG1fc3lu
Y1NjaGVkdWxlZCA9IGZhbHNlOwotICAgIH0KLQotICAgIHN5bmMoY2xlYXJJdGVtcywgaXRlbXMp
OwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBkaXNh
YmxlU3VkZGVuVGVybWluYXRpb24gaW4gdGhlCi0gICAgLy8gc3luY1RpbWVyRmlyZWQgZnVuY3Rp
b24uCi0gICAgZW5hYmxlU3VkZGVuVGVybWluYXRpb24oKTsKLX0KLQogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaCBi
L1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmgKaW5kZXggZTM3N2I1Mi4uNzRmNmZl
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaAorKysgYi9X
ZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5oCkBAIC0yNiwyMiArMjYsMTYgQEAKICNp
Zm5kZWYgTG9jYWxTdG9yYWdlQXJlYV9oCiAjZGVmaW5lIExvY2FsU3RvcmFnZUFyZWFfaAogCi0j
aW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgotI2lu
Y2x1ZGUgIlN0cmluZ0hhc2guaCIKLSNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFnZXIuaCIKLSNp
bmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAKKyAgICBjbGFzcyBTdG9yYWdlQXJlYVN5bmM7CiAgICAgY2xhc3MgU3Rv
cmFnZVN5bmNNYW5hZ2VyOwogICAgIAogICAgIGNsYXNzIExvY2FsU3RvcmFnZUFyZWEgOiBwdWJs
aWMgU3RvcmFnZUFyZWEgewogICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+TG9jYWxTdG9y
YWdlQXJlYSgpOwotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+
IGNyZWF0ZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFu
YWdlcj4gc3luY01hbmFnZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2VBcmVh
KG9yaWdpbiwgc3luY01hbmFnZXIpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2Nh
bFN0b3JhZ2VBcmVhPiBjcmVhdGUoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxT
dG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKTsKIAogICAgICAgICB2b2lkIHNjaGVkdWxl
RmluYWxTeW5jKCk7CiAKQEAgLTUyLDQxICs0NiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBpdGVtUmVtb3ZlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
U3RyaW5nJiBvbGRWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKICAgICAgICAgdmlydHVhbCB2
b2lkIGFyZWFDbGVhcmVkKEZyYW1lKiBzb3VyY2VGcmFtZSk7CiAKLSAgICAgICAgdm9pZCBzY2hl
ZHVsZUl0ZW1Gb3JTeW5jKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsK
LSAgICAgICAgdm9pZCBzY2hlZHVsZUNsZWFyKCk7CiAgICAgICAgIHZvaWQgZGlzcGF0Y2hTdG9y
YWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0
IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7CiAKLSAgICAgICAgVGltZXI8
TG9jYWxTdG9yYWdlQXJlYT4gbV9zeW5jVGltZXI7ICAgICAgICAKLSAgICAgICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4gbV9jaGFuZ2VkSXRlbXM7Ci0gICAgICAgIGJvb2wgbV9pdGVtc0NsZWFy
ZWQ7Ci0gICAgICAgIAotICAgICAgICBib29sIG1fZmluYWxTeW5jU2NoZWR1bGVkOwotCi0gICAg
ICAgIFJlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IG1fc3luY01hbmFnZXI7Ci0KLSAgICAgICAg
Ly8gVGhlIGRhdGFiYXNlIGhhbmRsZSB3aWxsIG9ubHkgZXZlciBiZSBvcGVuZWQgYW5kIHVzZWQg
b24gdGhlIGJhY2tncm91bmQgdGhyZWFkLgotICAgICAgICBTUUxpdGVEYXRhYmFzZSBtX2RhdGFi
YXNlOwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBzdWJqZWN0IHRvIHRocmVh
ZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzLgotICAgIHB1YmxpYzoKLSAgICAgICAgLy8gQ2FsbGVk
IGZyb20gdGhlIGJhY2tncm91bmQgdGhyZWFkCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
SW1wb3J0KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtU3luYygpOwotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgdm9pZCBzeW5jVGltZXJGaXJlZChUaW1lcjxMb2NhbFN0b3JhZ2VBcmVh
PiopOwotICAgICAgICB2b2lkIHN5bmMoYm9vbCBjbGVhckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiYgaXRlbXMpOwotCi0gICAgICAgIE11dGV4IG1fc3luY0xvY2s7Ci0gICAg
ICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1faXRlbXNQZW5kaW5nU3luYzsKLSAgICAgICAg
Ym9vbCBtX2NsZWFySXRlbXNXaGlsZVN5bmNpbmc7Ci0gICAgICAgIGJvb2wgbV9zeW5jU2NoZWR1
bGVkOwotCi0gICAgICAgIG11dGFibGUgTXV0ZXggbV9pbXBvcnRMb2NrOwotICAgICAgICBtdXRh
YmxlIFRocmVhZENvbmRpdGlvbiBtX2ltcG9ydENvbmRpdGlvbjsKLSAgICAgICAgbXV0YWJsZSBi
b29sIG1faW1wb3J0Q29tcGxldGU7Ci0gICAgICAgIHZvaWQgbWFya0ltcG9ydGVkKCk7Ci0gICAg
ICAgIHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3Q7CisgICAgICAgIFJlZlB0
cjxTdG9yYWdlQXJlYVN5bmM+IG1fc3RvcmFnZUFyZWFTeW5jOworICAgICAgICBSZWZQdHI8U3Rv
cmFnZVN5bmNNYW5hZ2VyPiBtX3N0b3JhZ2VTeW5jTWFuYWdlcjsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdl
VGFzay5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAKaW5kZXggNjNl
MDdlNS4uOTY1N2ZmMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRh
c2suY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcApAQCAtMjcs
MTIgKzI3LDEyIEBACiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGFzay5oIgogCiAjaW5jbHVkZSAi
TG9jYWxTdG9yYWdlLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlQXJlYS5oIgogI2luY2x1ZGUg
IkxvY2FsU3RvcmFnZVRocmVhZC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhU3luYy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUxvY2FsU3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFnZVRhc2so
VHlwZSB0eXBlLCBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCitMb2NhbFN0b3Jh
Z2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNrKFR5cGUgdHlwZSwgUGFzc1JlZlB0cjxTdG9yYWdlQXJl
YVN5bmM+IGFyZWEpCiAgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fYXJlYShhcmVhKQogewpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaCBiL1dlYkNvcmUv
c3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgKaW5kZXggMTliZjc5My4uMzEzMmE1MyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAorKysgYi9XZWJDb3JlL3N0
b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oCkBAIC0zMiwyNSArMzIsMjYgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0gICAgY2xhc3MgTG9jYWxTdG9yYWdlQXJlYTsKKyAgICBjbGFzcyBTdG9y
YWdlQXJlYVN5bmM7CiAgICAgY2xhc3MgTG9jYWxTdG9yYWdlVGhyZWFkOwogCisgICAgLy8gRklY
TUU6IFJlbmFtZSB0aGlzIGNsYXNzIHRvIFN0b3JhZ2VUYXNrCiAgICAgY2xhc3MgTG9jYWxTdG9y
YWdlVGFzayA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPExvY2FsU3RvcmFnZVRhc2s+IHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIGVudW0gVHlwZSB7IEFyZWFJbXBvcnQsIEFyZWFTeW5jLCBUZXJt
aW5hdGVUaHJlYWQgfTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VU
YXNrPiBjcmVhdGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVhKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlVGFzayhBcmVhSW1wb3J0LCBhcmVhKSk7IH0K
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlU3luYyhQ
YXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBM
b2NhbFN0b3JhZ2VUYXNrKEFyZWFTeW5jLCBhcmVhKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlSW1wb3J0KFBhc3NSZWZQdHI8U3RvcmFnZUFy
ZWFTeW5jPiBhcmVhKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlVGFzayhBcmVh
SW1wb3J0LCBhcmVhKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdl
VGFzaz4gY3JlYXRlU3luYyhQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4gYXJlYSkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZVRhc2soQXJlYVN5bmMsIGFyZWEpKTsgfQogICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVUZXJtaW5hdGUo
UGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+IHRocmVhZCkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IExvY2FsU3RvcmFnZVRhc2soVGVybWluYXRlVGhyZWFkLCB0aHJlYWQpKTsgfQogCiAgICAg
ICAgIHZvaWQgcGVyZm9ybVRhc2soKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIExvY2FsU3Rv
cmFnZVRhc2soVHlwZSwgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPik7CisgICAgICAgIExv
Y2FsU3RvcmFnZVRhc2soVHlwZSwgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYVN5bmM+KTsKICAgICAg
ICAgTG9jYWxTdG9yYWdlVGFzayhUeXBlLCBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZVRocmVhZD4p
OwogCiAgICAgICAgIFR5cGUgbV90eXBlOwotICAgICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlQXJl
YT4gbV9hcmVhOworICAgICAgICBSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBtX2FyZWE7CiAgICAg
ICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+IG1fdGhyZWFkOwogICAgIH07CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuY3BwIGIvV2ViQ29yZS9z
dG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAKaW5kZXggYWQyMmY5MS4uOWMxZDRmZCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAKKysrIGIvV2Vi
Q29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAKQEAgLTI3LDggKzI3LDggQEAKICNp
bmNsdWRlICJMb2NhbFN0b3JhZ2VUaHJlYWQuaCIKIAogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZS5o
IgotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEuaCIKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VU
YXNrLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtODUsMTMgKzg1LDEzIEBAIHZvaWQqIExvY2FsU3RvcmFnZVRocmVhZDo6bG9jYWxT
dG9yYWdlVGhyZWFkKCkKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2VUaHJl
YWQ6OnNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkKK3Zv
aWQgTG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZUltcG9ydChQYXNzUmVmUHRyPFN0b3JhZ2VB
cmVhU3luYz4gYXJlYSkKIHsKICAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJl
YWRJRCk7CiAgICAgbV9xdWV1ZS5hcHBlbmQoTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlSW1wb3J0
KGFyZWEpKTsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2VUaHJlYWQ6OnNjaGVkdWxlU3luYyhQYXNz
UmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCit2b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6
c2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBhcmVhKQogewogICAgIEFT
U0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKICAgICBtX3F1ZXVlLmFwcGVu
ZChMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVTeW5jKGFyZWEpKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuaCBiL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0
b3JhZ2VUaHJlYWQuaAppbmRleCBmODEwOGYxLi4yZWI3ZDRhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0xvY2Fs
U3RvcmFnZVRocmVhZC5oCkBAIC0zMywxNyArMzMsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi0gICAgY2xhc3MgTG9jYWxTdG9yYWdlQXJlYTsKKyAgICBjbGFzcyBTdG9yYWdlQXJlYVN5
bmM7CiAgICAgY2xhc3MgTG9jYWxTdG9yYWdlVGFzazsKIAorICAgIC8vIEZJWE1FOiBSZW5hbWUg
dGhpcyBjbGFzcyB0byBTdG9yYWdlVGhyZWFkCiAgICAgY2xhc3MgTG9jYWxTdG9yYWdlVGhyZWFk
IDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8TG9jYWxTdG9yYWdlVGhyZWFkPiB7CiAgICAgcHVi
bGljOgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+IGNyZWF0
ZSgpOwogCiAgICAgICAgIGJvb2wgc3RhcnQoKTsKIAotICAgICAgICB2b2lkIHNjaGVkdWxlSW1w
b3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4pOwotICAgICAgICB2b2lkIHNjaGVkdWxl
U3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKKyAgICAgICAgdm9pZCBzY2hlZHVs
ZUltcG9ydChQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4pOworICAgICAgICB2b2lkIHNjaGVk
dWxlU3luYyhQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4pOwogCiAgICAgICAgIC8vIENhbGxl
ZCBmcm9tIHRoZSBtYWluIHRocmVhZCB0byBzeW5jaHJvbm91c2x5IHNodXQgZG93biB0aGlzIHRo
cmVhZAogICAgICAgICB2b2lkIHRlcm1pbmF0ZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9y
YWdlL1Nlc3Npb25TdG9yYWdlQXJlYS5oIGIvV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdl
QXJlYS5oCmluZGV4IDNkYWQxYWYuLjRkZDVhOGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFn
ZS9TZXNzaW9uU3RvcmFnZUFyZWEuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3Jh
Z2VBcmVhLmgKQEAgLTM2LDggKzM2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1Ymxp
YzoKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2Vzc2lvblN0b3JhZ2VBcmVhPiBjcmVhdGUo
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFnZSogcGFnZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IFNlc3Npb25TdG9yYWdlQXJlYShvcmlnaW4sIHBhZ2UpKTsgfQogICAgICAgICBQYXNzUmVmUHRy
PFNlc3Npb25TdG9yYWdlQXJlYT4gY29weShTZWN1cml0eU9yaWdpbiosIFBhZ2UqKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgUGFnZSogcGFnZSgpIHsgcmV0dXJuIG1fcGFnZTsgfQogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgU2Vzc2lvblN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiwg
UGFnZSopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmggYi9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaAppbmRleCA1ZmYxMDAxLi4xMzYzOTNhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZUFyZWEuaApAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgU3RvcmFnZU1hcDsKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi0gICAg
Y2xhc3MgU3RvcmFnZUFyZWEgOiBwdWJsaWMgUmVmQ291bnRlZDxTdG9yYWdlQXJlYT4geworICAg
IGNsYXNzIFN0b3JhZ2VBcmVhIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U3RvcmFnZUFyZWE+
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgflN0b3JhZ2VBcmVhKCk7CiAgICAgICAg
IApAQCAtNTQsMTQgKzU0LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29s
IGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsKIAorICAgICAgICAvLyBDb3VsZCBi
ZSBjYWxsZWQgZnJvbSBhIGJhY2tncm91bmQgdGhyZWFkLgorICAgICAgICB2b2lkIGltcG9ydEl0
ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgICAgICBTZWN1
cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSB7IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luLmdl
dCgpOyB9CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3Jp
Z2luKik7CiAgICAgICAgIFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiwgU3RvcmFnZUFyZWEq
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgLy8gVGhpcyBpcyBtZWFudCB0byBiZSBjYWxs
ZWQgZnJvbSBhIGJhY2tncm91bmQgdGhyZWFkIGZvciBMb2NhbFN0b3JhZ2VBcmVhJ3MgYmFja2dy
b3VuZCB0aHJlYWQgaW1wb3J0IHByb2NlZHVyZS4KLSAgICAgICAgdm9pZCBpbXBvcnRJdGVtKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBpdGVtQ2hhbmdlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
U3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZy
YW1lKSA9IDA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNw
cCBiL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjBhZWI5ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcApAQCAtMCwwICsxLDMzNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgi
CisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5j
bHVkZSAiU1FMaXRlU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKKyNpbmNs
dWRlICJTdWRkZW5UZXJtaW5hdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIElm
IHRoZSBTdG9yYWdlQXJlYSB1bmRlcmdvZXMgcmFwaWQgY2hhbmdlcywgZG9uJ3Qgc3luYyBlYWNo
IGNoYW5nZSB0byBkaXNrLgorLy8gSW5zdGVhZCwgcXVldWUgdXAgYSBiYXRjaCBvZiBpdGVtcyB0
byBzeW5jIGFuZCBhY3R1YWxseSBkbyB0aGUgc3luYyBhdCB0aGUgZm9sbG93aW5nIGludGVydmFs
Lgorc3RhdGljIGNvbnN0IGRvdWJsZSBTdG9yYWdlU3luY0ludGVydmFsID0gMS4wOworCitQYXNz
UmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4gU3RvcmFnZUFyZWFTeW5jOjpjcmVhdGUoUGFzc1JlZlB0
cjxTdG9yYWdlU3luY01hbmFnZXI+IHN0b3JhZ2VTeW5jTWFuYWdlciwgUGFzc1JlZlB0cjxTdG9y
YWdlQXJlYT4gc3RvcmFnZUFyZWEpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdl
QXJlYVN5bmMoc3RvcmFnZVN5bmNNYW5hZ2VyLCBzdG9yYWdlQXJlYSkpOworfQorCitTdG9yYWdl
QXJlYVN5bmM6OlN0b3JhZ2VBcmVhU3luYyhQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4g
c3RvcmFnZVN5bmNNYW5hZ2VyLCBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSkK
KyAgICA6IG1fc3luY1RpbWVyKHRoaXMsICZTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVk
KQorICAgICwgbV9pdGVtc0NsZWFyZWQoZmFsc2UpCisgICAgLCBtX2ZpbmFsU3luY1NjaGVkdWxl
ZChmYWxzZSkKKyAgICAsIG1fc3RvcmFnZUFyZWEoc3RvcmFnZUFyZWEpCisgICAgLCBtX3N5bmNN
YW5hZ2VyKHN0b3JhZ2VTeW5jTWFuYWdlcikKKyAgICAsIG1fY2xlYXJJdGVtc1doaWxlU3luY2lu
ZyhmYWxzZSkKKyAgICAsIG1fc3luY1NjaGVkdWxlZChmYWxzZSkKKyAgICAsIG1faW1wb3J0Q29t
cGxldGUoZmFsc2UpCit7CisgICAgQVNTRVJUKG1fc3RvcmFnZUFyZWEpOworICAgIGlmICghbV9z
eW5jTWFuYWdlciB8fCAhbV9zeW5jTWFuYWdlci0+c2NoZWR1bGVJbXBvcnQodGhpcykpCisgICAg
ICAgIG1faW1wb3J0Q29tcGxldGUgPSB0cnVlOworfQorCisjaWZuZGVmIE5ERUJVRworU3RvcmFn
ZUFyZWFTeW5jOjp+U3RvcmFnZUFyZWFTeW5jKCkKK3sKKyAgICBBU1NFUlQoIW1fc3luY1RpbWVy
LmlzQWN0aXZlKCkpOworfQorI2VuZGlmCisKK3ZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVs
ZUZpbmFsU3luYygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1f
c3luY01hbmFnZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobV9zeW5jVGltZXIu
aXNBY3RpdmUoKSkKKyAgICAgICAgbV9zeW5jVGltZXIuc3RvcCgpOworICAgIGVsc2UgeworICAg
ICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJhbGFuY2VkIGJ5IHRoZSBjYWxsIHRvIGVuYWJsZVN1
ZGRlblRlcm1pbmF0aW9uIGluIHRoZQorICAgICAgICAvLyBzeW5jVGltZXJGaXJlZCBmdW5jdGlv
bi4KKyAgICAgICAgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CisgICAgfQorICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIHN5bmNocm9ub3VzLiAgV2Ugc2hvdWxkIGRvIGl0IG9uIHRoZSBiYWNrZ3Jv
dW5kIHByb2Nlc3MsIGJ1dAorICAgIC8vIHdlIHNob3VsZCBkbyBpdCBzYWZlbHkuCisgICAgc3lu
Y1RpbWVyRmlyZWQoJm1fc3luY1RpbWVyKTsKKyAgICBtX2ZpbmFsU3luY1NjaGVkdWxlZCA9IHRy
dWU7Cit9CisKK3ZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzY2hlZHVsZUl0ZW1Gb3JTeW5jKGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2ZpbmFsU3luY1NjaGVkdWxlZCk7CisKKyAgICBtX2No
YW5nZWRJdGVtcy5zZXQoa2V5LCB2YWx1ZSk7CisgICAgaWYgKCFtX3N5bmNUaW1lci5pc0FjdGl2
ZSgpKSB7CisgICAgICAgIG1fc3luY1RpbWVyLnN0YXJ0T25lU2hvdChTdG9yYWdlU3luY0ludGVy
dmFsKTsKKworICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJhbGFuY2VkIGJ5IHRoZSBjYWxs
IHRvIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uIGluIHRoZQorICAgICAgICAvLyBzeW5jVGltZXJG
aXJlZCBmdW5jdGlvbi4KKyAgICAgICAgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CisgICAg
fQorfQorCit2b2lkIFN0b3JhZ2VBcmVhU3luYzo6c2NoZWR1bGVDbGVhcigpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fZmluYWxTeW5jU2NoZWR1bGVkKTsK
KworICAgIG1fY2hhbmdlZEl0ZW1zLmNsZWFyKCk7CisgICAgbV9pdGVtc0NsZWFyZWQgPSB0cnVl
OworICAgIGlmICghbV9zeW5jVGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICBtX3N5bmNUaW1l
ci5zdGFydE9uZVNob3QoU3RvcmFnZVN5bmNJbnRlcnZhbCk7CisKKyAgICAgICAgLy8gVGhlIGZv
bGxvd2luZyBpcyBiYWxhbmNlZCBieSB0aGUgY2FsbCB0byBlbmFibGVTdWRkZW5UZXJtaW5hdGlv
biBpbiB0aGUKKyAgICAgICAgLy8gc3luY1RpbWVyRmlyZWQgZnVuY3Rpb24uCisgICAgICAgIGRp
c2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOworICAgIH0KK30KKwordm9pZCBTdG9yYWdlQXJlYVN5
bmM6OnN5bmNUaW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VBcmVhU3luYz4qKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX3N5bmNNYW5hZ2VyKQorICAgICAgICByZXR1
cm47CisKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBtX2NoYW5n
ZWRJdGVtcy5iZWdpbigpOworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBl
bmQgPSBtX2NoYW5nZWRJdGVtcy5lbmQoKTsKKyAgICAKKyAgICB7CisgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX3N5bmNMb2NrKTsKKworICAgICAgICBpZiAobV9pdGVtc0NsZWFyZWQpIHsK
KyAgICAgICAgICAgIG1faXRlbXNQZW5kaW5nU3luYy5jbGVhcigpOworICAgICAgICAgICAgbV9j
bGVhckl0ZW1zV2hpbGVTeW5jaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIG1faXRlbXNDbGVhcmVk
ID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICAgICAgbV9pdGVtc1BlbmRpbmdTeW5jLnNldChpdC0+Zmlyc3QuY29weSgpLCBpdC0+
c2Vjb25kLmNvcHkoKSk7CisKKyAgICAgICAgaWYgKCFtX3N5bmNTY2hlZHVsZWQpIHsKKyAgICAg
ICAgICAgIG1fc3luY1NjaGVkdWxlZCA9IHRydWU7CisKKyAgICAgICAgICAgIC8vIFRoZSBmb2xs
b3dpbmcgaXMgYmFsYW5jZWQgYnkgdGhlIGNhbGwgdG8gZW5hYmxlU3VkZGVuVGVybWluYXRpb24g
aW4gdGhlCisgICAgICAgICAgICAvLyBwZXJmb3JtU3luYyBmdW5jdGlvbi4KKyAgICAgICAgICAg
IGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOworCisgICAgICAgICAgICBtX3N5bmNNYW5hZ2Vy
LT5zY2hlZHVsZVN5bmModGhpcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGUgZm9s
bG93aW5nIGlzIGJhbGFuY2VkIGJ5IHRoZSBjYWxscyB0byBkaXNhYmxlU3VkZGVuVGVybWluYXRp
b24gaW4gdGhlCisgICAgLy8gc2NoZWR1bGVJdGVtRm9yU3luYywgc2NoZWR1bGVDbGVhciwgYW5k
IHNjaGVkdWxlRmluYWxTeW5jIGZ1bmN0aW9ucy4KKyAgICBlbmFibGVTdWRkZW5UZXJtaW5hdGlv
bigpOworCisgICAgbV9jaGFuZ2VkSXRlbXMuY2xlYXIoKTsKK30KKwordm9pZCBTdG9yYWdlQXJl
YVN5bmM6OnBlcmZvcm1JbXBvcnQoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwor
ICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7CisgICAgaWYgKCFtX3N5bmNNYW5hZ2Vy
KQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFtZSA9IG1fc3lu
Y01hbmFnZXItPmZ1bGxEYXRhYmFzZUZpbGVuYW1lKG1fc3RvcmFnZUFyZWEtPnNlY3VyaXR5T3Jp
Z2luKCkpOworCisgICAgaWYgKGRhdGFiYXNlRmlsZW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAg
IExPR19FUlJPUigiRmlsZW5hbWUgZm9yIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgaXMgZW1wdHkg
LSBjYW5ub3Qgb3BlbiBmb3IgcGVyc2lzdGVudCBzdG9yYWdlIik7CisgICAgICAgIG1hcmtJbXBv
cnRlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLm9w
ZW4oZGF0YWJhc2VGaWxlbmFtZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gb3Bl
biBkYXRhYmFzZSBmaWxlICVzIGZvciBsb2NhbCBzdG9yYWdlIiwgZGF0YWJhc2VGaWxlbmFtZS51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbWFya0ltcG9ydGVkKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJM
RSBJRiBOT1QgRVhJU1RTIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJF
UExBQ0UsIHZhbHVlIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKSkgeworICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGFibGUgSXRlbVRhYmxlIGZvciBsb2NhbCBz
dG9yYWdlIik7CisgICAgICAgIG1hcmtJbXBvcnRlZCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIGtl
eSwgdmFsdWUgRlJPTSBJdGVtVGFibGUiKTsKKyAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNR
TFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHNlbGVjdCBpdGVtcyBm
cm9tIEl0ZW1UYWJsZSBmb3IgbG9jYWwgc3RvcmFnZSIpOworICAgICAgICBtYXJrSW1wb3J0ZWQo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiBpdGVtTWFwOworCisgICAgaW50IHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKKyAgICB3aGls
ZSAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykgeworICAgICAgICBpdGVtTWFwLnNldChxdWVyeS5n
ZXRDb2x1bW5UZXh0KDApLCBxdWVyeS5nZXRDb2x1bW5UZXh0KDEpKTsKKyAgICAgICAgcmVzdWx0
ID0gcXVlcnkuc3RlcCgpOworICAgIH0KKworICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9u
ZSkgeworICAgICAgICBMT0dfRVJST1IoIkVycm9yIHJlYWRpbmcgaXRlbXMgZnJvbSBJdGVtVGFi
bGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKKyAgICAgICAgbWFya0ltcG9ydGVkKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9pbXBvcnRMb2NrKTsK
KyAgICAKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBpdGVtTWFw
LmJlZ2luKCk7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIGVuZCA9IGl0
ZW1NYXAuZW5kKCk7CisgICAgCisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAg
bV9zdG9yYWdlQXJlYS0+aW1wb3J0SXRlbShpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgIAor
ICAgIC8vIEJyZWFrIHRoZSAocmVmIGNvdW50KSBjeWNsZS4KKyAgICBtX3N0b3JhZ2VBcmVhID0g
MDsKKyAgICBtX2ltcG9ydENvbXBsZXRlID0gdHJ1ZTsKKyAgICBtX2ltcG9ydENvbmRpdGlvbi5z
aWduYWwoKTsKK30KKwordm9pZCBTdG9yYWdlQXJlYVN5bmM6Om1hcmtJbXBvcnRlZCgpCit7Cisg
ICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9p
bXBvcnRMb2NrKTsKKyAgICAvLyBCcmVhayB0aGUgKHJlZiBjb3VudCkgY3ljbGUuCisgICAgbV9z
dG9yYWdlQXJlYSA9IDA7CisgICAgbV9pbXBvcnRDb21wbGV0ZSA9IHRydWU7CisgICAgbV9pbXBv
cnRDb25kaXRpb24uc2lnbmFsKCk7Cit9CisKKy8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB3ZSBz
aG91bGQgYWxsb3cgdXNlIG9mIFN0b3JhZ2VBcmVhcyB3aGlsZSBpdCdzIGltcG9ydGluZyAod2hl
biBzYWZlIHRvIGRvIHNvKS4KKy8vIEJsb2NraW5nIGV2ZXJ5dGhpbmcgdW50aWwgdGhlIGltcG9y
dCBpcyBjb21wbGV0ZSBpcyBieSBmYXIgdGhlIHNpbXBsZXN0IGFuZCBzYWZlc3QgdGhpbmcgdG8g
ZG8sIGJ1dAorLy8gdGhlcmUgaXMgY2VydGFpbmx5IHJvb20gZm9yIHNhZmUgb3B0aW1pemF0aW9u
OiBLZXkvbGVuZ3RoIHdpbGwgbmV2ZXIgYmUgYWJsZSB0byBtYWtlIHVzZSBvZiBzdWNoIGFuCisv
LyBvcHRpbWl6YXRpb24gKHNpbmNlIHRoZSBvcmRlciBvZiBpdGVyYXRpb24gY2FuIGNoYW5nZSBh
cyBpdGVtcyBhcmUgYmVpbmcgYWRkZWQpLiBHZXQgY2FuIHJldHVybiBhbnkKKy8vIGl0ZW0gY3Vy
cmVudGx5IGluIHRoZSBtYXAuIEdldC9yZW1vdmUgY2FuIHdvcmsgd2hldGhlciBvciBub3QgaXQn
cyBpbiB0aGUgbWFwLCBidXQgd2UnbGwgbmVlZCBhIGxpc3QKKy8vIG9mIGl0ZW1zIHRoZSBpbXBv
cnQgc2hvdWxkIG5vdCBvdmVyd3JpdGUuIENsZWFyIGNhbiBhbHNvIHdvcmssIGJ1dCBpdCdsbCBu
ZWVkIHRvIGtpbGwgdGhlIGltcG9ydAorLy8gam9iIGZpcnN0Lgordm9pZCBTdG9yYWdlQXJlYVN5
bmM6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIC8vIEZhc3QgcGF0aCB0byBhdm9pZCBsb2NraW5nLgorICAgIGlm
IChtX2ltcG9ydENvbXBsZXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBNdXRleExvY2tlciBs
b2NrZXIobV9pbXBvcnRMb2NrKTsKKyAgICB3aGlsZSAoIW1faW1wb3J0Q29tcGxldGUpCisgICAg
ICAgIG1faW1wb3J0Q29uZGl0aW9uLndhaXQobV9pbXBvcnRMb2NrKTsKKyAgICBBU1NFUlQobV9p
bXBvcnRDb21wbGV0ZSk7CisgICAgQVNTRVJUKCFtX3N0b3JhZ2VBcmVhKTsKK30KKwordm9pZCBT
dG9yYWdlQXJlYVN5bmM6OnN5bmMoYm9vbCBjbGVhckl0ZW1zLCBjb25zdCBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiYgaXRlbXMpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAg
ICBpZiAoIW1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElm
IHRoZSBjbGVhciBmbGFnIGlzIHNldCwgdGhlbiB3ZSBjbGVhciBhbGwgaXRlbXMgb3V0IGJlZm9y
ZSB3ZSB3cml0ZSBhbnkgbmV3IG9uZXMgaW4uCisgICAgaWYgKGNsZWFySXRlbXMpIHsKKyAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyKG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBJdGVtVGFi
bGUiKTsKKyAgICAgICAgaWYgKGNsZWFyLnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgeworICAg
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBjbGVhciBzdGF0ZW1lbnQgLSBj
YW5ub3Qgd3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgcmVzdWx0ID0gY2xlYXIuc3Rl
cCgpOworICAgICAgICBpZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGNsZWFyIGFsbCBpdGVtcyBpbiB0aGUgbG9jYWwgc3RvcmFn
ZSBkYXRhYmFzZSAtICVpIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCBpbnNlcnQobV9kYXRhYmFzZSwgIklOU0VS
VCBJTlRPIEl0ZW1UYWJsZSBWQUxVRVMgKD8sID8pIik7CisgICAgaWYgKGluc2VydC5wcmVwYXJl
KCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFy
ZSBpbnNlcnQgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJh
c2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCByZW1v
dmUobV9kYXRhYmFzZSwgIkRFTEVURSBGUk9NIEl0ZW1UYWJsZSBXSEVSRSBrZXk9PyIpOworICAg
IGlmIChyZW1vdmUucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CisgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIHByZXBhcmUgZGVsZXRlIHN0YXRlbWVudCAtIGNhbm5vdCB3cml0ZSB0byBs
b2NhbCBzdG9yYWdlIGRhdGFiYXNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaXRlbXMuZW5kKCk7
CisKKyAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGl0ZW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAvLyBCYXNlZCBvbiB0
aGUgbnVsbC1uZXNzIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQsIGRlY2lkZSB3aGV0aGVyIHRoaXMg
aXMgYW4gaW5zZXJ0IG9yIGEgZGVsZXRlLgorICAgICAgICBTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5
ID0gaXQtPnNlY29uZC5pc051bGwoKSA/IHJlbW92ZSA6IGluc2VydDsgICAgICAgIAorCisgICAg
ICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIGl0LT5maXJzdCk7CisKKyAgICAgICAgLy8gSWYgdGhlIHNl
Y29uZCBhcmd1bWVudCBpcyBub24tbnVsbCwgd2UncmUgZG9pbmcgYW4gaW5zZXJ0LCBzbyBiaW5k
IGl0IGFzIHRoZSB2YWx1ZS4gCisgICAgICAgIGlmICghaXQtPnNlY29uZC5pc051bGwoKSkKKyAg
ICAgICAgICAgIHF1ZXJ5LmJpbmRUZXh0KDIsIGl0LT5zZWNvbmQpOworCisgICAgICAgIGludCBy
ZXN1bHQgPSBxdWVyeS5zdGVwKCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9u
ZSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGl0ZW0gaW4gdGhl
IGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgLSAlaSIsIHJlc3VsdCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIHF1ZXJ5LnJlc2V0KCk7CisgICAgfQorfQorCit2b2lk
IFN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybVN5bmMoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOworCisgICAgYm9vbCBjbGVhckl0ZW1zOworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IGl0ZW1zOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3luY0xvY2sp
OworCisgICAgICAgIEFTU0VSVChtX3N5bmNTY2hlZHVsZWQpOworCisgICAgICAgIGNsZWFySXRl
bXMgPSBtX2NsZWFySXRlbXNXaGlsZVN5bmNpbmc7CisgICAgICAgIG1faXRlbXNQZW5kaW5nU3lu
Yy5zd2FwKGl0ZW1zKTsKKworICAgICAgICBtX2NsZWFySXRlbXNXaGlsZVN5bmNpbmcgPSBmYWxz
ZTsKKyAgICAgICAgbV9zeW5jU2NoZWR1bGVkID0gZmFsc2U7CisgICAgfQorCisgICAgc3luYyhj
bGVhckl0ZW1zLCBpdGVtcyk7CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJhbGFuY2VkIGJ5
IHRoZSBjYWxsIHRvIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbiBpbiB0aGUKKyAgICAvLyBzeW5j
VGltZXJGaXJlZCBmdW5jdGlvbi4KKyAgICBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZUFyZWFTeW5jLmggYi9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ4ODdmYwotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaApAQCAtMCwwICsxLDk1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
U3RvcmFnZUFyZWFTeW5jX2gKKyNkZWZpbmUgU3RvcmFnZUFyZWFTeW5jX2gKKworI2luY2x1ZGUg
IlNRTGl0ZURhdGFiYXNlLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIlN0
b3JhZ2VTeW5jTWFuYWdlci5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgU3RvcmFnZUFyZWE7
ICAgIAorICAgIGNsYXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjsKKyAgICAKKyAgICBjbGFzcyBTdG9y
YWdlQXJlYVN5bmMgOiBwdWJsaWMgUmVmQ291bnRlZDxTdG9yYWdlQXJlYVN5bmM+IHsKKyAgICBw
dWJsaWM6CisjaWZuZGVmIE5ERUJVRworICAgICAgICB+U3RvcmFnZUFyZWFTeW5jKCk7CisjZW5k
aWYKKworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYVN5bmM+IGNyZWF0ZShQ
YXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3RvcmFnZVN5bmNNYW5hZ2VyLCBQYXNzUmVm
UHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSk7CisgICAgICAgIAorICAgICAgICB2b2lkIHNj
aGVkdWxlRmluYWxTeW5jKCk7CisgICAgICAgIHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRl
KCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzY2hlZHVsZUl0ZW1Gb3JTeW5jKGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICAgICAgdm9pZCBzY2hlZHVsZUNsZWFy
KCk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFN0b3JhZ2VBcmVhU3luYyhQYXNz
UmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3RvcmFnZVN5bmNNYW5hZ2VyLCBQYXNzUmVmUHRy
PFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSk7CisKKyAgICAgICAgCisgICAgICAgIHZvaWQgZGlz
cGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFs
dWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7CisKKyAgICAg
ICAgVGltZXI8U3RvcmFnZUFyZWFTeW5jPiBtX3N5bmNUaW1lcjsgICAgICAgIAorICAgICAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2NoYW5nZWRJdGVtczsKKyAgICAgICAgYm9vbCBtX2l0
ZW1zQ2xlYXJlZDsKKyAgICAgICAgCisgICAgICAgIGJvb2wgbV9maW5hbFN5bmNTY2hlZHVsZWQ7
CisKKyAgICAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBtX3N0b3JhZ2VBcmVhOworICAgICAgICBS
ZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N5bmNNYW5hZ2VyOworCisgICAgICAgIC8vIFRo
ZSBkYXRhYmFzZSBoYW5kbGUgd2lsbCBvbmx5IGV2ZXIgYmUgb3BlbmVkIGFuZCB1c2VkIG9uIHRo
ZSBiYWNrZ3JvdW5kIHRocmVhZC4KKyAgICAgICAgU1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsK
KworICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgc3ViamVjdCB0byB0aHJlYWQgc3lu
Y2hyb25pemF0aW9uIGlzc3Vlcy4KKyAgICBwdWJsaWM6CisgICAgICAgIC8vIENhbGxlZCBmcm9t
IHRoZSBiYWNrZ3JvdW5kIHRocmVhZAorICAgICAgICB2b2lkIHBlcmZvcm1JbXBvcnQoKTsKKyAg
ICAgICAgdm9pZCBwZXJmb3JtU3luYygpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBz
eW5jVGltZXJGaXJlZChUaW1lcjxTdG9yYWdlQXJlYVN5bmM+Kik7CisgICAgICAgIHZvaWQgc3lu
Yyhib29sIGNsZWFySXRlbXMsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBpdGVtcyk7
CisKKyAgICAgICAgTXV0ZXggbV9zeW5jTG9jazsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gbV9pdGVtc1BlbmRpbmdTeW5jOworICAgICAgICBib29sIG1fY2xlYXJJdGVtc1doaWxl
U3luY2luZzsKKyAgICAgICAgYm9vbCBtX3N5bmNTY2hlZHVsZWQ7CisKKyAgICAgICAgbXV0YWJs
ZSBNdXRleCBtX2ltcG9ydExvY2s7CisgICAgICAgIG11dGFibGUgVGhyZWFkQ29uZGl0aW9uIG1f
aW1wb3J0Q29uZGl0aW9uOworICAgICAgICBtdXRhYmxlIGJvb2wgbV9pbXBvcnRDb21wbGV0ZTsK
KyAgICAgICAgdm9pZCBtYXJrSW1wb3J0ZWQoKTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBTdG9yYWdlQXJlYVN5bmNfaApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZVN5bmNNYW5hZ2VyLmNwcAppbmRleCA4ZmRjYzM1Li5hZjMwZWUxIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZVN5bmNNYW5hZ2VyLmNwcApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkZyYW1l
VHJlZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKLSNpbmNs
dWRlICJTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhU3luYy5oIgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzQsNyAr
NzQsNyBAQCB2b2lkIFN0b3JhZ2VTeW5jTWFuYWdlcjo6Y2xvc2UoKQogICAgIH0KIH0KIAotYm9v
bCBTdG9yYWdlU3luY01hbmFnZXI6OnNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9y
YWdlQXJlYT4gYXJlYSkKK2Jvb2wgU3RvcmFnZVN5bmNNYW5hZ2VyOjpzY2hlZHVsZUltcG9ydChQ
YXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4gYXJlYSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIApAQCAtODQsNyArODQsNyBAQCBib29sIFN0b3JhZ2VTeW5jTWFuYWdlcjo6
c2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVhKQogICAgIHJl
dHVybiBtX3RocmVhZDsKIH0KIAotdm9pZCBTdG9yYWdlU3luY01hbmFnZXI6OnNjaGVkdWxlU3lu
YyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCit2b2lkIFN0b3JhZ2VTeW5jTWFu
YWdlcjo6c2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBhcmVhKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmggYi9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNN
YW5hZ2VyLmgKaW5kZXggZjY0NzIyZi4uZWM3MmQ3OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3lu
Y01hbmFnZXIuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEu
aCIKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VUYXNrLmgiCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdl
VGhyZWFkLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgiCiAKICNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CiAKQEAgLTM4LDggKzM5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IHB1YmxpYzoKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBj
cmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKIAotICAgICAgICBib29sIHNjaGVkdWxlSW1wb3J0
KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4pOwotICAgICAgICB2b2lkIHNjaGVkdWxlU3lu
YyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKKyAgICAgICAgYm9vbCBzY2hlZHVsZUlt
cG9ydChQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4pOworICAgICAgICB2b2lkIHNjaGVkdWxl
U3luYyhQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4pOwogCiAgICAgICAgIHZvaWQgY2xvc2Uo
KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31085</attachid>
            <date>2009-06-09 01:12:11 -0700</date>
            <delta_ts>2009-06-24 17:35:27 -0700</delta_ts>
            <desc>Patch 4 in this set</desc>
            <filename>4.20090608.patch</filename>
            <type>text/plain</type>
            <size>34967</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMGY5OWY4YS4u
YmIwOWQwMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTc3MSwxMCArNzcxLDYgQEAKIAkJNTE0MTg1RUYwQ0Q2NUYwNDAwNzYzQzk5IC8qIENoYW5nZVZl
cnNpb25XcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNDE4NUVEMENENjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5j
cHAgKi87IH07CiAJCTUxNEIzRjczMEM3MjIwNDcwMDA1MzBERiAvKiBGaWxlU3lzdGVtLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRCM0Y3MjBDNzIy
MDQ3MDAwNTMwREYgLyogRmlsZVN5c3RlbS5oICovOyB9OwogCQk1MTRCM0Y3NjBDNzIyMDU1MDAw
NTMwREYgLyogRmlsZVN5c3RlbU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNEIzRjc1MEM3MjIwNTUwMDA1MzBERiAvKiBGaWxlU3lzdGVtTWFj
Lm1tICovOyB9OwotCQk1MTRCNDlEQjBEQjZENkFEMDAxQzM3NzAgLyogTG9jYWxTdG9yYWdlQXJl
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0QjQ5
RDkwREI2RDZBRDAwMUMzNzcwIC8qIExvY2FsU3RvcmFnZUFyZWEuaCAqLzsgfTsKLQkJNTE0QjQ5
REMwREI2RDZBRDAwMUMzNzcwIC8qIExvY2FsU3RvcmFnZUFyZWEuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0QjQ5REEwREI2RDZBRDAwMUMzNzcw
IC8qIExvY2FsU3RvcmFnZUFyZWEuY3BwICovOyB9OwotCQk1MTRCNDlERjBEQjZENkI2MDAxQzM3
NzAgLyogU2Vzc2lvblN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTRCNDlERDBEQjZENkI2MDAxQzM3NzAgLyogU2Vzc2lvblN0b3Jh
Z2VBcmVhLmggKi87IH07Ci0JCTUxNEI0OUUwMERCNkQ2QjYwMDFDMzc3MCAvKiBTZXNzaW9uU3Rv
cmFnZUFyZWEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE0QjQ5REUwREI2RDZCNjAwMUMzNzcwIC8qIFNlc3Npb25TdG9yYWdlQXJlYS5jcHAgKi87
IH07CiAJCTUxNEM3NjM3MENFOTIyNUUwMDdFRjNDRCAvKiBKU1NRTEVycm9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjM1MENFOTIyNUUw
MDdFRjNDRCAvKiBKU1NRTEVycm9yLmNwcCAqLzsgfTsKIAkJNTE0Qzc2MzgwQ0U5MjI1RTAwN0VG
M0NEIC8qIEpTU1FMVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2MzYwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMVHJhbnNh
Y3Rpb24uY3BwICovOyB9OwogCQk1MTRDNzY0QzBDRTkyMzRFMDA3RUYzQ0QgLyogQXV0aGVudGlj
YXRpb25NYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNEM3NjQyMENFOTIzNEUwMDdFRjNDRCAvKiBBdXRoZW50aWNhdGlvbk1hYy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01Njk0LDEwICs1Njkw
LDYgQEAKIAkJNTE0MTg1RUQwQ0Q2NUYwNDAwNzYzQzk5IC8qIENoYW5nZVZlcnNpb25XcmFwcGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENoYW5nZVZlcnNpb25X
cmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0QjNGNzIwQzcyMjA0
NzAwMDUzMERGIC8qIEZpbGVTeXN0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmlsZVN5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRCM0Y3NTBD
NzIyMDU1MDAwNTMwREYgLyogRmlsZVN5c3RlbU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IEZpbGVTeXN0ZW1NYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTUxNEI0OUQ5MERCNkQ2QUQwMDFDMzc3MCAvKiBMb2NhbFN0b3JhZ2VBcmVhLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2FsU3RvcmFnZUFyZWEuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE0QjQ5REEwREI2RDZBRDAwMUMzNzcwIC8qIExv
Y2FsU3RvcmFnZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TG9jYWxTdG9yYWdlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNEI0
OUREMERCNkQ2QjYwMDFDMzc3MCAvKiBTZXNzaW9uU3RvcmFnZUFyZWEuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2Vzc2lvblN0b3JhZ2VBcmVhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTUxNEI0OURFMERCNkQ2QjYwMDFDMzc3MCAvKiBTZXNzaW9uU3RvcmFn
ZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Vzc2lvblN0
b3JhZ2VBcmVhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0Qzc2MzUwQ0U5
MjI1RTAwN0VGM0NEIC8qIEpTU1FMRXJyb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNTUUxFcnJvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxNEM3NjM2MENFOTIyNUUwMDdFRjNDRCAvKiBKU1NRTFRyYW5zYWN0aW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1FMVHJhbnNhY3Rpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRDNzY0MjBDRTkyMzRFMDA3RUYzQ0QgLyogQXV0
aGVudGljYXRpb25NYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0aGVu
dGljYXRpb25NYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2MDksOCArOTYw
MSw2IEBACiAJCQkJNTFGQUZFMzMwQ0VDQkYyRDAwQkIzRjI0IC8qIERhdGFiYXNlVHJhY2tlckNs
aWVudC5oICovLAogCQkJCTUxQkUzODI2MERBRUY3REEwMDEwODVGQyAvKiBMb2NhbFN0b3JhZ2Uu
Y3BwICovLAogCQkJCTUxQkUzODI3MERBRUY3REEwMDEwODVGQyAvKiBMb2NhbFN0b3JhZ2UuaCAq
LywKLQkJCQk1MTRCNDlEQTBEQjZENkFEMDAxQzM3NzAgLyogTG9jYWxTdG9yYWdlQXJlYS5jcHAg
Ki8sCi0JCQkJNTE0QjQ5RDkwREI2RDZBRDAwMUMzNzcwIC8qIExvY2FsU3RvcmFnZUFyZWEuaCAq
LywKIAkJCQk1MTFGMjMxMzBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9yYWdlVGFzay5jcHAg
Ki8sCiAJCQkJNTExRjIzMTQwREMxNjBEQTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRhc2suaCAq
LywKIAkJCQk1MTFGMjMxNTBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9yYWdlVGhyZWFkLmNw
cCAqLywKQEAgLTk2MzgsOCArOTYyOCw2IEBACiAJCQkJMUE3Q0NCMTgwQ0Q5NDY5QTAwQjdCNjRF
IC8qIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oICovLAogCQkJCTUxRTBCQjIyMERBNTcy
QTYwMEE5RTQxNyAvKiBTZXNzaW9uU3RvcmFnZS5jcHAgKi8sCiAJCQkJNTFFMEJCMjEwREE1NzJB
NjAwQTlFNDE3IC8qIFNlc3Npb25TdG9yYWdlLmggKi8sCi0JCQkJNTE0QjQ5REUwREI2RDZCNjAw
MUMzNzcwIC8qIFNlc3Npb25TdG9yYWdlQXJlYS5jcHAgKi8sCi0JCQkJNTE0QjQ5REQwREI2RDZC
NjAwMUMzNzcwIC8qIFNlc3Npb25TdG9yYWdlQXJlYS5oICovLAogCQkJCTUxRTNGOUM1MERBMDU5
REMwMDI1MDkxMSAvKiBTdG9yYWdlLmNwcCAqLywKIAkJCQk1MUUzRjlDNDBEQTA1OURDMDAyNTA5
MTEgLyogU3RvcmFnZS5oICovLAogCQkJCTUxRTNGOUQxMERBMDVENzEwMDI1MDkxMSAvKiBTdG9y
YWdlLmlkbCAqLywKQEAgLTE2MDc2LDcgKzE2MDY0LDYgQEAKIAkJCQk2NTZEMzczMjBBREJBNURF
MDBBNDU1NEQgLyogTG9hZGVyTlNVUkxFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2RTgx
RUQ3MEFCNUQ1RTkwMEM4NzgzNyAvKiBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxQkUzODI5MERBRUY3REEwMDEwODVGQyAvKiBMb2NhbFN0b3JhZ2Uu
aCBpbiBIZWFkZXJzICovLAotCQkJCTUxNEI0OURCMERCNkQ2QUQwMDFDMzc3MCAvKiBMb2NhbFN0
b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTFGMjMxODBEQzE2MERBMDA0RjAwMzIg
LyogTG9jYWxTdG9yYWdlVGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTExRjIzMUEwREMxNjBE
QTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1
MjA3QkUwOUJENDEwQTAwRjIwMzhEIC8qIExvY2FsaXplZFN0cmluZ3MuaCBpbiBIZWFkZXJzICov
LApAQCAtMTY1MTcsNyArMTY1MDQsNiBAQAogCQkJCTkzMzA5RTBFMDk5RTY0OTIwMDU2RTU4MSAv
KiBTZWxlY3Rpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdGQTY4MTBEMUYx
Njc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFF
MEJCMjMwREE1NzJBNjAwQTlFNDE3IC8qIFNlc3Npb25TdG9yYWdlLmggaW4gSGVhZGVycyAqLywK
LQkJCQk1MTRCNDlERjBEQjZENkI2MDAxQzM3NzAgLyogU2Vzc2lvblN0b3JhZ2VBcmVhLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzMwOUUxMDA5OUU2NDkyMDA1NkU1ODEgLyogU2V0Tm9kZUF0dHJp
YnV0ZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTRGMDgyNDVFNTkwMDFFOUFC
QyAvKiBTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI4QzQwRTgyMDMxQjAwQjI1
OTY1IC8qIFNoYWRvd0RhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMTgxNDEsNyArMTgxMjcsNiBA
QAogCQkJCTY1NkQzNzMzMEFEQkE1REUwMEE0NTU0RCAvKiBMb2FkZXJOU1VSTEV4dHJhcy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTA2RTgxRUVDMEFCNURBOTcwMEM4NzgzNyAvKiBMb2NhbEN1cnJl
bnRHcmFwaGljc0NvbnRleHQubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUJFMzgyODBEQUVGN0RB
MDAxMDg1RkMgLyogTG9jYWxTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxNEI0OURD
MERCNkQ2QUQwMDFDMzc3MCAvKiBMb2NhbFN0b3JhZ2VBcmVhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxMUYyMzE3MERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VUYXNrLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUxMUYyMzE5MERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VU
aHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1MjA3QzAwOUJENDEyMTAwRjIwMzhEIC8q
IExvY2FsaXplZFN0cmluZ3NNYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTE4NTQyLDcgKzE4NTI3
LDYgQEAKIAkJCQk0QThDOTZFQjBCRTY5MDMyMDA0RUVGRjAgLyogU2VsZWN0aW9uQ29udHJvbGxl
ck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDN0ZBNjgyMEQxRjE2NzkwMERCMjJBOSAvKiBT
ZWxlY3Rvck5vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTBCQjI0MERBNTcyQTYw
MEE5RTQxNyAvKiBTZXNzaW9uU3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTRCNDlF
MDBEQjZENkI2MDAxQzM3NzAgLyogU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzMzA5RTBGMDk5RTY0OTIwMDU2RTU4MSAvKiBTZXROb2RlQXR0cmlidXRlQ29tbWFu
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEM5QTVFQTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0
dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1RUI4QzMwRTgyMDMxQjAwQjI1OTY1IC8q
IFNoYWRvd0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3Jh
Z2UvTG9jYWxTdG9yYWdlLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCmlu
ZGV4IGM2ZjIzNGEuLjAwNjVlYjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0
b3JhZ2UuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCkBAIC0zMSw3
ICszMSw2IEBACiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlQXJlYS5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJTdG9yYWdl
QXJlYS5oIgpAQCAtODksMTEgKzg4LDExIEBAIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IExvY2Fs
U3RvcmFnZTo6c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKICAgICAvLyBGSVhN
RTogSWYgdGhlIHN0b3JhZ2UgYXJlYSBpcyBiZWluZyBlc3RhYmxpc2hlZCBmb3IgdGhlIGZpcnN0
IHRpbWUgaGVyZSwgd2UgbmVlZCB0byAKICAgICAvLyBzeW5jIGl0cyBleGlzdGFuY2UgYW5kIHF1
b3RhIG91dCB0byBkaXNrIHZpYSBhbiB0YXNrIG9mIHR5cGUgQXJlYVN5bmMKIAotICAgIFJlZlB0
cjxMb2NhbFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYTsKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+
IHN0b3JhZ2VBcmVhOwogICAgIGlmIChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0
KG9yaWdpbikpCiAgICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7CiAgICAgCi0g
ICAgc3RvcmFnZUFyZWEgPSBMb2NhbFN0b3JhZ2VBcmVhOjpjcmVhdGUob3JpZ2luLCBtX3N5bmNN
YW5hZ2VyKTsKKyAgICBzdG9yYWdlQXJlYSA9IFN0b3JhZ2VBcmVhOjpjcmVhdGVMb2NhbFN0b3Jh
Z2Uob3JpZ2luLCBtX3N5bmNNYW5hZ2VyKTsKICAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmln
aW4sIHN0b3JhZ2VBcmVhKTsKICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwogfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZS5oIGIvV2ViQ29yZS9zdG9y
YWdlL0xvY2FsU3RvcmFnZS5oCmluZGV4IDcyN2VjMjcuLjMxOTFjOGUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvTG9jYWxT
dG9yYWdlLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgTG9jYWxTdG9yYWdlX2gKICNkZWZp
bmUgTG9jYWxTdG9yYWdlX2gKIAotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEuaCIKICNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKIAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBA
IC01MCw3ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRlOgogICAgICAg
ICBMb2NhbFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBwYXRoKTsKIAotICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+LCBT
ZWN1cml0eU9yaWdpbkhhc2g+IExvY2FsU3RvcmFnZUFyZWFNYXA7CisgICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBSZWZQdHI8U3RvcmFnZUFyZWE+LCBTZWN1
cml0eU9yaWdpbkhhc2g+IExvY2FsU3RvcmFnZUFyZWFNYXA7CiAgICAgICAgIExvY2FsU3RvcmFn
ZUFyZWFNYXAgbV9zdG9yYWdlQXJlYU1hcDsKIAogICAgICAgICBTdHJpbmcgbV9wYXRoOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwIGIvV2ViQ29yZS9z
dG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3YTJhMzA1Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVh
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJMb2NhbFN0b3JhZ2VBcmVhLmgiCi0KLSNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSFRNTEVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5j
bHVkZSAiU3RvcmFnZUV2ZW50LmgiCi0jaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgiCi0jaW5j
bHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFz
c1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBMb2NhbFN0b3JhZ2VBcmVhOjpjcmVhdGUoU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5h
Z2VyKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlQXJlYShvcmlnaW4s
IHN5bmNNYW5hZ2VyKSk7Ci19Ci0KLUxvY2FsU3RvcmFnZUFyZWE6OkxvY2FsU3RvcmFnZUFyZWEo
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5
bmNNYW5hZ2VyKQotICAgIDogU3RvcmFnZUFyZWEob3JpZ2luKQotICAgICwgbV9zdG9yYWdlQXJl
YVN5bmMoU3RvcmFnZUFyZWFTeW5jOjpjcmVhdGUoc3luY01hbmFnZXIsIHRoaXMpKQotICAgICwg
bV9zdG9yYWdlU3luY01hbmFnZXIoc3luY01hbmFnZXIpCi17Ci19Ci0KLXZvaWQgTG9jYWxTdG9y
YWdlQXJlYTo6c2NoZWR1bGVGaW5hbFN5bmMoKQotewotICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5z
Y2hlZHVsZUZpbmFsU3luYygpOwotfQotCi12b2lkIExvY2FsU3RvcmFnZUFyZWE6Oml0ZW1DaGFu
Z2VkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJp
bmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpCi17Ci0gICAgbV9zdG9yYWdlQXJlYVN5
bmMtPnNjaGVkdWxlSXRlbUZvclN5bmMoa2V5LCBuZXdWYWx1ZSk7Ci0gICAgZGlzcGF0Y2hTdG9y
YWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lKTsKLX0KLQotdm9p
ZCBMb2NhbFN0b3JhZ2VBcmVhOjppdGVtUmVtb3ZlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
U3RyaW5nJiBvbGRWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQotewotICAgIG1fc3RvcmFnZUFy
ZWFTeW5jLT5zY2hlZHVsZUl0ZW1Gb3JTeW5jKGtleSwgU3RyaW5nKCkpOwotICAgIGRpc3BhdGNo
U3RvcmFnZUV2ZW50KGtleSwgb2xkVmFsdWUsIFN0cmluZygpLCBzb3VyY2VGcmFtZSk7Ci19Ci0K
LXZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6YXJlYUNsZWFyZWQoRnJhbWUqIHNvdXJjZUZyYW1lKQot
ewotICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUNsZWFyKCk7Ci0gICAgZGlzcGF0Y2hT
dG9yYWdlRXZlbnQoU3RyaW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgc291cmNlRnJhbWUpOwot
fQotCi12b2lkIExvY2FsU3RvcmFnZUFyZWE6OmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNv
bnN0Ci17Ci0gICAgbV9zdG9yYWdlQXJlYVN5bmMtPmJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgp
OwotfQotCi12b2lkIExvY2FsU3RvcmFnZUFyZWE6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1Zh
bHVlLCBGcmFtZSogc291cmNlRnJhbWUpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LQotICAgIFBhZ2UqIHBhZ2UgPSBzb3VyY2VGcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTmVlZCB0byBjb3B5IGFsbCByZWxldmFudCBmcmFt
ZXMgZnJvbSBldmVyeSBwYWdlIHRvIGEgdmVjdG9yLCBzaW5jZSBzZW5kaW5nIHRoZSBldmVudCB0
byBvbmUgZnJhbWUgbWlnaHQgbXV0YXRlIHRoZSBmcmFtZSB0cmVlCi0gICAgLy8gb2YgYW55IGdp
dmVuIHBhZ2UgaW4gdGhlIGdyb3VwLCBvciBtdXRhdGUgdGhlIHBhZ2UgZ3JvdXAgaXRzZWxmCi0g
ICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4gPiBmcmFtZXM7Ci0gICAgY29uc3QgSGFzaFNldDxQYWdl
Kj4mIHBhZ2VzID0gcGFnZS0+Z3JvdXAoKS5wYWdlcygpOwotICAgIAotICAgIEhhc2hTZXQ8UGFn
ZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWdlcy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8
UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICgqaXQpLT5tYWluRnJhbWUoKTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAg
IGlmIChmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlP
cmlnaW4oKSkpCi0gICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhbWVzLnNpemUoKTsg
KytpKQotICAgICAgICBmcmFtZXNbaV0tPmRvY3VtZW50KCktPmRpc3BhdGNoV2luZG93RXZlbnQo
U3RvcmFnZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwga2V5LCBvbGRW
YWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLCBz
b3VyY2VGcmFtZS0+ZG9tV2luZG93KCkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaCBiL1dlYkNvcmUv
c3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDJmZDc0ODIuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEu
aAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMb2NhbFN0b3JhZ2VBcmVhX2gK
LSNkZWZpbmUgTG9jYWxTdG9yYWdlQXJlYV9oCi0KLSNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi0gICAgY2xhc3MgU3RvcmFnZUFyZWFTeW5jOwot
ICAgIGNsYXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjsKLSAgICAKLSAgICBjbGFzcyBMb2NhbFN0b3Jh
Z2VBcmVhIDogcHVibGljIFN0b3JhZ2VBcmVhIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGNyZWF0ZShTZWN1cml0eU9yaWdpbiogb3Jp
Z2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIpOwotCi0gICAg
ICAgIHZvaWQgc2NoZWR1bGVGaW5hbFN5bmMoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIExv
Y2FsU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFu
YWdlcj4gc3luY01hbmFnZXIpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBpdGVtQ2hhbmdlZChj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBu
ZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGl0ZW1S
ZW1vdmVkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBGcmFtZSog
c291cmNlRnJhbWUpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYXJlYUNsZWFyZWQoRnJhbWUqIHNv
dXJjZUZyYW1lKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0
ZSgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUs
IEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0KLSAgICAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhU3luYz4g
bV9zdG9yYWdlQXJlYVN5bmM7Ci0gICAgICAgIFJlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IG1f
c3RvcmFnZVN5bmNNYW5hZ2VyOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIExvY2FsU3RvcmFnZUFyZWFfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdl
L1Nlc3Npb25TdG9yYWdlLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5jcHAK
aW5kZXggZTcwMjI3YS4uMGZjMjcxMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL1Nlc3Np
b25TdG9yYWdlLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2UuY3BwCkBA
IC01NCw3ICs1NCw3IEBAIFBhc3NSZWZQdHI8U2Vzc2lvblN0b3JhZ2U+IFNlc3Npb25TdG9yYWdl
Ojpjb3B5KFBhZ2UqIG5ld1BhZ2UpCiAgICAgCiAgICAgU2Vzc2lvblN0b3JhZ2VBcmVhTWFwOjpp
dGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwogICAgIGZvciAoU2Vzc2lvblN0
b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpICE9
IGVuZDsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxTZXNzaW9uU3RvcmFnZUFyZWE+IGFyZWFDb3B5
ID0gaS0+c2Vjb25kLT5jb3B5KGktPmZpcnN0LmdldCgpLCBuZXdQYWdlKTsKKyAgICAgICAgUmVm
UHRyPFN0b3JhZ2VBcmVhPiBhcmVhQ29weSA9IGktPnNlY29uZC0+Y29weShpLT5maXJzdC5nZXQo
KSwgbmV3UGFnZSk7CiAgICAgICAgIG5ld1Nlc3Npb24tPm1fc3RvcmFnZUFyZWFNYXAuc2V0KGkt
PmZpcnN0LCBhcmVhQ29weS5yZWxlYXNlKCkpOwogICAgIH0KICAgICAKQEAgLTYzLDExICs2Mywx
MSBAQCBQYXNzUmVmUHRyPFNlc3Npb25TdG9yYWdlPiBTZXNzaW9uU3RvcmFnZTo6Y29weShQYWdl
KiBuZXdQYWdlKQogCiBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTZXNzaW9uU3RvcmFnZTo6c3Rv
cmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKLSAgICBSZWZQdHI8U2Vzc2lvblN0
b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYTsKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VB
cmVhOwogICAgIGlmIChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikp
CiAgICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7CiAgICAgICAgIAotICAgIHN0
b3JhZ2VBcmVhID0gU2Vzc2lvblN0b3JhZ2VBcmVhOjpjcmVhdGUob3JpZ2luLCBtX3BhZ2UpOwor
ICAgIHN0b3JhZ2VBcmVhID0gU3RvcmFnZUFyZWE6OmNyZWF0ZVNlc3Npb25TdG9yYWdlKG9yaWdp
biwgbV9wYWdlKTsKICAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVh
KTsKICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmggYi9XZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0
b3JhZ2UuaAppbmRleCAwZDg3ZTY0Li42ZTYyYzRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3Jh
Z2UvU2Vzc2lvblN0b3JhZ2UuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2Uu
aApAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBTZXNzaW9uU3RvcmFnZV9oCiAKICNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbkhhc2guaCIKLSNpbmNsdWRlICJTZXNzaW9uU3RvcmFnZUFyZWEuaCIK
KyNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgUGFnZSogbV9wYWdlOwogICAgICAgICAKLSAgICAgICAgdHlwZWRl
ZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxTZXNzaW9uU3RvcmFnZUFy
ZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+IFNlc3Npb25TdG9yYWdlQXJlYU1hcDsKKyAgICAgICAg
dHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxTdG9yYWdlQXJl
YT4sIFNlY3VyaXR5T3JpZ2luSGFzaD4gU2Vzc2lvblN0b3JhZ2VBcmVhTWFwOwogICAgICAgICBT
ZXNzaW9uU3RvcmFnZUFyZWFNYXAgbV9zdG9yYWdlQXJlYU1hcDsKICAgICB9OwogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcCBiL1dlYkNvcmUvc3Rv
cmFnZS9TZXNzaW9uU3RvcmFnZUFyZWEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiNTllMmEwLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZUFy
ZWEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiU2Vzc2lvblN0b3JhZ2VBcmVhLmgiCi0KLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNsdWRlICJIVE1MRWxl
bWVudC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgot
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU3RvcmFnZUV2ZW50LmgiCi0j
aW5jbHVkZSAiU3RvcmFnZU1hcC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQ
dHI8U2Vzc2lvblN0b3JhZ2VBcmVhPiBTZXNzaW9uU3RvcmFnZUFyZWE6OmNvcHkoU2VjdXJpdHlP
cmlnaW4qIG9yaWdpbiwgUGFnZSogcGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNl
c3Npb25TdG9yYWdlQXJlYShvcmlnaW4sIHBhZ2UsIHRoaXMpKTsKLX0KLQotU2Vzc2lvblN0b3Jh
Z2VBcmVhOjpTZXNzaW9uU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFnZSog
cGFnZSkKLSAgICA6IFN0b3JhZ2VBcmVhKG9yaWdpbikKLSAgICAsIG1fcGFnZShwYWdlKQotewot
ICAgIEFTU0VSVChwYWdlKTsKLX0KLQotU2Vzc2lvblN0b3JhZ2VBcmVhOjpTZXNzaW9uU3RvcmFn
ZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFnZSogcGFnZSwgU2Vzc2lvblN0b3JhZ2VB
cmVhKiBhcmVhKQotICAgIDogU3RvcmFnZUFyZWEob3JpZ2luLCBhcmVhKQotICAgICwgbV9wYWdl
KHBhZ2UpCi17Ci0gICAgQVNTRVJUKHBhZ2UpOwotfQotCi12b2lkIFNlc3Npb25TdG9yYWdlQXJl
YTo6aXRlbUNoYW5nZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUs
IGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSkKLXsKLSAgICBkaXNw
YXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgc291cmNlRnJhbWUpOwot
fQotCi12b2lkIFNlc3Npb25TdG9yYWdlQXJlYTo6aXRlbVJlbW92ZWQoY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSkKLXsKLSAgICBk
aXNwYXRjaFN0b3JhZ2VFdmVudChrZXksIG9sZFZhbHVlLCBTdHJpbmcoKSwgc291cmNlRnJhbWUp
OwotfQotCi12b2lkIFNlc3Npb25TdG9yYWdlQXJlYTo6YXJlYUNsZWFyZWQoRnJhbWUqIHNvdXJj
ZUZyYW1lKQotewotICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50KFN0cmluZygpLCBTdHJpbmcoKSwg
U3RyaW5nKCksIHNvdXJjZUZyYW1lKTsKLX0KLQotdm9pZCBTZXNzaW9uU3RvcmFnZUFyZWE6OmJs
b2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpIGNvbnN0Ci17Ci19Ci0KLXZvaWQgU2Vzc2lvblN0b3Jh
Z2VBcmVhOjpkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3Ry
aW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1l
KQotewotICAgIC8vIEZvciBTZXNzaW9uU3RvcmFnZSBldmVudHMsIGVhY2ggZnJhbWUgaW4gdGhl
IHBhZ2UncyBmcmFtZXRyZWUgd2l0aCB0aGUgc2FtZSBvcmlnaW4gYXMgdGhpcyBTdG9yYWdlQXJl
YSBuZWVkcyB0byBiZSBub3RpZmllZCBvZiB0aGUgY2hhbmdlCi0gICAgVmVjdG9yPFJlZlB0cjxG
cmFtZT4gPiBmcmFtZXM7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewotICAg
ICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3Vy
aXR5T3JpZ2luKCkpKQotICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7Ci0gICAgfQot
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgZnJhbWVzW2ldLT5kb2N1bWVudCgpLT5kaXNwYXRjaFdpbmRvd0V2ZW50KFN0b3JhZ2VFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQsIGtleSwgb2xkVmFsdWUsIG5ld1Zh
bHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRVUkkoKSwgc291cmNlRnJhbWUt
PmRvbVdpbmRvdygpKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZUFyZWEuaCBiL1dlYkNvcmUvc3RvcmFnZS9T
ZXNzaW9uU3RvcmFnZUFyZWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRkMmYw
My4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgU2Vzc2lvblN0b3JhZ2VBcmVhX2gKLSNkZWZpbmUg
U2Vzc2lvblN0b3JhZ2VBcmVhX2gKLQotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIFBhZ2U7Ci0gICAgCi0gICAgY2xhc3MgU2Vzc2lv
blN0b3JhZ2VBcmVhIDogcHVibGljIFN0b3JhZ2VBcmVhIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNlc3Npb25TdG9yYWdlQXJlYT4gY3JlYXRlKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4sIFBhZ2UqIHBhZ2UpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXNzaW9uU3Rv
cmFnZUFyZWEob3JpZ2luLCBwYWdlKSk7IH0KLSAgICAgICAgUGFzc1JlZlB0cjxTZXNzaW9uU3Rv
cmFnZUFyZWE+IGNvcHkoU2VjdXJpdHlPcmlnaW4qLCBQYWdlKik7Ci0KLSAgICBwcml2YXRlOgot
ICAgICAgICBTZXNzaW9uU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBQYWdlKik7Ci0gICAg
ICAgIFNlc3Npb25TdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFBhZ2UqLCBTZXNzaW9uU3Rv
cmFnZUFyZWEqKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgaXRlbUNoYW5nZWQoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUs
IEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBpdGVtUmVtb3ZlZChj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgRnJhbWUqIHNvdXJjZUZy
YW1lKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFyZWFDbGVhcmVkKEZyYW1lKiBzb3VyY2VGcmFt
ZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25z
dDsKLQotICAgICAgICB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSog
c291cmNlRnJhbWUpOwotICAgICAgICAKLSAgICAgICAgUGFnZSogbV9wYWdlOwotICAgIH07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNlc3Npb25TdG9yYWdlQXJlYV9o
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwIGIvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VBcmVhLmNwcAppbmRleCA4ZWVhOTcxLi45Y2E0MTRlIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlQXJlYS5jcHAKQEAgLTI2LDMwICsyNiw2OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAKLSNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAi
U3RvcmFnZUV2ZW50LmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgiCiAjaW5jbHVkZSAi
U3RvcmFnZU1hcC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVN0b3JhZ2VBcmVhOjpTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiog
b3JpZ2luKQorUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZUFyZWE6OmNyZWF0ZUxvY2Fs
U3RvcmFnZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFu
YWdlcj4gc3luY01hbmFnZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJl
YShvcmlnaW4sIHN5bmNNYW5hZ2VyKSk7Cit9CisKK1N0b3JhZ2VBcmVhOjpTdG9yYWdlQXJlYShT
ZWN1cml0eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3lu
Y01hbmFnZXIpCiAgICAgOiBtX3NlY3VyaXR5T3JpZ2luKG9yaWdpbikKICAgICAsIG1fc3RvcmFn
ZU1hcChTdG9yYWdlTWFwOjpjcmVhdGUoKSkKKyAgICAsIG1fc3RvcmFnZUFyZWFTeW5jKDApCisg
ICAgLCBtX3N0b3JhZ2VTeW5jTWFuYWdlcihzeW5jTWFuYWdlcikKKyAgICAsIG1fc2Vzc2lvblN0
b3JhZ2VQYWdlKDApCiB7CisgICAgQVNTRVJUKG1fc2VjdXJpdHlPcmlnaW4pOworICAgIEFTU0VS
VChtX3N0b3JhZ2VNYXApOworICAgIAorICAgIC8vIEZJWE1FOiBJZiB0aGVyZSdzIG5vIGJhY2tp
bmcgc3RvcmFnZSBmb3IgTG9jYWxTdG9yYWdlLCB0aGUgZGVmYXVsdCBXZWJLaXQgYmVoYXZpb3Ig
c2hvdWxkIGJlIHRoYXQgb2YgcHJpdmF0ZSBicm93c2luZywKKyAgICAvLyBub3Qgc2lsZW50bHkg
aWdub3JpbmcgaXQuICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4
OTQKKyAgICBpZiAoc3luY01hbmFnZXIpIHsKKyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMgPSBT
dG9yYWdlQXJlYVN5bmM6OmNyZWF0ZShzeW5jTWFuYWdlciwgdGhpcyk7CisgICAgICAgIEFTU0VS
VChtX3N0b3JhZ2VBcmVhU3luYyk7CisgICAgICAgIEFTU0VSVChtX3N0b3JhZ2VTeW5jTWFuYWdl
cik7CisgICAgfQogfQogCi1TdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiwgU3RvcmFnZUFyZWEqIGFyZWEpCi0gICAgOiBtX3NlY3VyaXR5T3JpZ2luKG9yaWdp
bikKLSAgICAsIG1fc3RvcmFnZU1hcChhcmVhLT5tX3N0b3JhZ2VNYXApCitQYXNzUmVmUHRyPFN0
b3JhZ2VBcmVhPiBTdG9yYWdlQXJlYTo6Y3JlYXRlU2Vzc2lvblN0b3JhZ2UoU2VjdXJpdHlPcmln
aW4qIG9yaWdpbiwgUGFnZSogcGFnZSkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3Jh
Z2VBcmVhKG9yaWdpbiwgcGFnZSwgMCkpOwogfQogCi1TdG9yYWdlQXJlYTo6flN0b3JhZ2VBcmVh
KCkKK1Bhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVhOjpjb3B5KFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4sIFBhZ2UqIHBhZ2UpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9y
YWdlQXJlYShvcmlnaW4sIHBhZ2UsIHRoaXMpKTsKK30KKworU3RvcmFnZUFyZWE6OlN0b3JhZ2VB
cmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhZ2UqIHBhZ2UsIFN0b3JhZ2VBcmVhKiBhcmVh
KQorICAgIDogbV9zZWN1cml0eU9yaWdpbihvcmlnaW4pCisgICAgLCBtX3N0b3JhZ2VNYXAoYXJl
YS0+bV9zdG9yYWdlTWFwKQorICAgICwgbV9zdG9yYWdlQXJlYVN5bmMoMCkKKyAgICAsIG1fc3Rv
cmFnZVN5bmNNYW5hZ2VyKDApCisgICAgLCBtX3Nlc3Npb25TdG9yYWdlUGFnZShwYWdlKQorewor
ICAgIEFTU0VSVChtX3NlY3VyaXR5T3JpZ2luKTsKKyAgICBBU1NFUlQobV9zZXNzaW9uU3RvcmFn
ZVBhZ2UpOworICAgIAorICAgIGlmICghbV9zdG9yYWdlTWFwKSB7CisgICAgICAgIG1fc3RvcmFn
ZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZSgpOworICAgICAgICBBU1NFUlQobV9zdG9yYWdlTWFw
KTsKKyAgICB9CiB9CiAKIHVuc2lnbmVkIFN0b3JhZ2VBcmVhOjpsZW5ndGgoKSBjb25zdApAQCAt
MTAyLDggKzE0MCwxMSBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJgogICAgICAgICBtX3N0b3Jh
Z2VNYXAgPSBuZXdNYXAucmVsZWFzZSgpOwogCiAgICAgLy8gT25seSBub3RpZnkgdGhlIGNsaWVu
dCBpZiBhbiBpdGVtIHdhcyBhY3R1YWxseSBjaGFuZ2VkCi0gICAgaWYgKG9sZFZhbHVlICE9IHZh
bHVlKQotICAgICAgICBpdGVtQ2hhbmdlZChrZXksIG9sZFZhbHVlLCB2YWx1ZSwgZnJhbWUpOwor
ICAgIGlmIChvbGRWYWx1ZSAhPSB2YWx1ZSkgeworICAgICAgICBpZiAobV9zdG9yYWdlQXJlYVN5
bmMpCisgICAgICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+c2NoZWR1bGVJdGVtRm9yU3luYyhr
ZXksIHZhbHVlKTsKKyAgICAgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoa2V5LCBvbGRWYWx1ZSwg
dmFsdWUsIGZyYW1lKTsKKyAgICB9CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0o
Y29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBmcmFtZSkKQEAgLTExOSw4ICsxNjAsMTEgQEAgdm9p
ZCBTdG9yYWdlQXJlYTo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIGZyYW1l
KQogICAgICAgICBtX3N0b3JhZ2VNYXAgPSBuZXdNYXAucmVsZWFzZSgpOwogCiAgICAgLy8gT25s
eSBub3RpZnkgdGhlIGNsaWVudCBpZiBhbiBpdGVtIHdhcyBhY3R1YWxseSByZW1vdmVkCi0gICAg
aWYgKCFvbGRWYWx1ZS5pc051bGwoKSkKLSAgICAgICAgaXRlbVJlbW92ZWQoa2V5LCBvbGRWYWx1
ZSwgZnJhbWUpOworICAgIGlmICghb2xkVmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKG1f
c3RvcmFnZUFyZWFTeW5jKQorICAgICAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPnNjaGVkdWxl
SXRlbUZvclN5bmMoa2V5LCBTdHJpbmcoKSk7CisgICAgICAgIGRpc3BhdGNoU3RvcmFnZUV2ZW50
KGtleSwgb2xkVmFsdWUsIFN0cmluZygpLCBmcmFtZSk7CisgICAgfQogfQogCiB2b2lkIFN0b3Jh
Z2VBcmVhOjpjbGVhcihGcmFtZSogZnJhbWUpCkBAIC0xMzIsNyArMTc2LDkgQEAgdm9pZCBTdG9y
YWdlQXJlYTo6Y2xlYXIoRnJhbWUqIGZyYW1lKQogICAgIAogICAgIG1fc3RvcmFnZU1hcCA9IFN0
b3JhZ2VNYXA6OmNyZWF0ZSgpOwogICAgIAotICAgIGFyZWFDbGVhcmVkKGZyYW1lKTsKKyAgICBp
ZiAobV9zdG9yYWdlQXJlYVN5bmMpCisgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVs
ZUNsZWFyKCk7CisgICAgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoU3RyaW5nKCksIFN0cmluZygpLCBT
dHJpbmcoKSwgZnJhbWUpOwogfQogCiBib29sIFN0b3JhZ2VBcmVhOjpjb250YWlucyhjb25zdCBT
dHJpbmcmIGtleSkgY29uc3QKQEAgLTE0Nyw0ICsxOTMsNDkgQEAgdm9pZCBTdG9yYWdlQXJlYTo6
aW1wb3J0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBt
X3N0b3JhZ2VNYXAtPmltcG9ydEl0ZW0oa2V5LCB2YWx1ZSk7CiB9CiAKK3ZvaWQgU3RvcmFnZUFy
ZWE6OnNjaGVkdWxlRmluYWxTeW5jKCkKK3sKKyAgICBpZiAobV9zdG9yYWdlQXJlYVN5bmMpCisg
ICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUZpbmFsU3luYygpOworfQorCit2b2lk
IFN0b3JhZ2VBcmVhOjpibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdAoreworICAgIGlm
IChtX3N0b3JhZ2VBcmVhU3luYykKKyAgICAgICAgbV9zdG9yYWdlQXJlYVN5bmMtPmJsb2NrVW50
aWxJbXBvcnRDb21wbGV0ZSgpOworfQorCit2b2lkIFN0b3JhZ2VBcmVhOjpkaXNwYXRjaFN0b3Jh
Z2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3Qg
U3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQoreworICAgIC8vIFdlIG5lZWQg
dG8gY29weSBhbGwgcmVsZXZhbnQgZnJhbWVzIGZyb20gZXZlcnkgcGFnZSB0byBhIHZlY3RvciBz
aW5jZSBzZW5kaW5nIHRoZSBldmVudCB0byBvbmUgZnJhbWUgbWlnaHQgbXV0YXRlIHRoZSBmcmFt
ZSB0cmVlCisgICAgLy8gb2YgYW55IGdpdmVuIHBhZ2UgaW4gdGhlIGdyb3VwIG9yIG11dGF0ZSB0
aGUgcGFnZSBncm91cCBpdHNlbGYuCisgICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4gPiBmcmFtZXM7
CisgICAgCisgICAgaWYgKG1fc2Vzc2lvblN0b3JhZ2VQYWdlKSB7CisgICAgICAgIC8vIFNlbmQg
ZXZlbnRzIG9ubHkgdG8gb3VyIHBhZ2UuCisgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9z
ZXNzaW9uU3RvcmFnZVBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLT50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgICAg
ICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIEZJWE1FOiBXaGVuIGNhbiB0aGlzIG9jY3VyPworICAgICAgICBQYWdlKiBwYWdlID0g
c291cmNlRnJhbWUtPnBhZ2UoKTsKKyAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICAgICAgLy8gU2VuZCBldmVudHMgdG8gZXZlcnkgcGFnZS4KKyAg
ICAgICAgY29uc3QgSGFzaFNldDxQYWdlKj4mIHBhZ2VzID0gcGFnZS0+Z3JvdXAoKS5wYWdlcygp
OworICAgICAgICBIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFnZXMuZW5k
KCk7CisgICAgICAgIGZvciAoSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGFn
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBmb3IgKEZyYW1lKiBm
cmFtZSA9ICgqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+
dHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkt
PnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3VyaXR5T3JpZ2luKCkpKQorICAgICAgICAgICAg
ICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kp
CisgICAgICAgIGZyYW1lc1tpXS0+ZG9jdW1lbnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChTdG9y
YWdlRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCBrZXksIG9sZFZhbHVl
LCBuZXdWYWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50VVJJKCksIHNvdXJj
ZUZyYW1lLT5kb21XaW5kb3coKSkpOworfQorCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZUFyZWEuaCBiL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCmluZGV4IGIz
NDIyNjMuLjJmMTdlODMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5o
CisrKyBiL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCkBAIC0yNyw2ICsyNywxMCBAQAog
I2RlZmluZSBTdG9yYWdlQXJlYV9oCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgiCisj
aW5jbHVkZSAiU3RvcmFnZU1hcC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgog
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpA
QCAtMzYsMTMgKzQwLDE4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBGcmFt
ZTsKKyAgICBjbGFzcyBQYWdlOwogICAgIGNsYXNzIFNlY3VyaXR5T3JpZ2luOworICAgIGNsYXNz
IFN0b3JhZ2VBcmVhU3luYzsKICAgICBjbGFzcyBTdG9yYWdlTWFwOworICAgIGNsYXNzIFN0b3Jh
Z2VTeW5jTWFuYWdlcjsKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiAgICAgY2xh
c3MgU3RvcmFnZUFyZWEgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxTdG9yYWdlQXJlYT4gewog
ICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+U3RvcmFnZUFyZWEoKTsKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IGNyZWF0ZUxvY2FsU3RvcmFnZShTZWN1cml0eU9y
aWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIp
OworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gY3JlYXRlU2Vzc2lvblN0
b3JhZ2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFnZSogcGFnZSk7CisgICAgICAgIFBhc3NS
ZWZQdHI8U3RvcmFnZUFyZWE+IGNvcHkoU2VjdXJpdHlPcmlnaW4qLCBQYWdlKik7CiAgICAgICAg
IAogICAgICAgICAvLyBUaGUgSFRNTDUgRE9NIFN0b3JhZ2UgQVBJCiAgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0OwpAQCAtNTMsMjMgKzYyLDI4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdm9pZCBjbGVhcihGcmFtZSogc291cmNlRnJhbWUpOwogCiAgICAgICAgIGJvb2wg
Y29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0OworICAgICAgICB2b2lkIHNjaGVkdWxl
RmluYWxTeW5jKCk7CiAKICAgICAgICAgLy8gQ291bGQgYmUgY2FsbGVkIGZyb20gYSBiYWNrZ3Jv
dW5kIHRocmVhZC4KICAgICAgICAgdm9pZCBpbXBvcnRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICAgICAgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3Jp
Z2luKCkgeyByZXR1cm4gbV9zZWN1cml0eU9yaWdpbi5nZXQoKTsgfQogCiAgICAgcHJvdGVjdGVk
OgotICAgICAgICBTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiopOwotICAgICAgICBTdG9yYWdl
QXJlYShTZWN1cml0eU9yaWdpbiosIFN0b3JhZ2VBcmVhKik7CisgICAgICAgIFN0b3JhZ2VBcmVh
KFNlY3VyaXR5T3JpZ2luKiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+KTsKKyAgICAg
ICAgU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBQYWdlKik7CisgICAgICAgIFN0b3JhZ2VB
cmVhKFNlY3VyaXR5T3JpZ2luKiwgUGFnZSosIFN0b3JhZ2VBcmVhKik7CiAKICAgICBwcml2YXRl
OgotICAgICAgICB2aXJ0dWFsIHZvaWQgaXRlbUNoYW5nZWQoY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3Vy
Y2VGcmFtZSkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgaXRlbVJlbW92ZWQoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSkgPSAw
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgYXJlYUNsZWFyZWQoRnJhbWUqIHNvdXJjZUZyYW1lKSA9
IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25z
dCA9IDA7Ci0KKyAgICAgICAgdm9pZCBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdDsK
KyAgICAgICAgCisgICAgICAgIHZvaWQgZGlzcGF0Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZy
YW1lKiBzb3VyY2VGcmFtZSk7CisgICAgICAgIAogICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IG1fc2VjdXJpdHlPcmlnaW47CiAgICAgICAgIFJlZlB0cjxTdG9yYWdlTWFwPiBtX3N0b3Jh
Z2VNYXA7CisgICAgICAgIAorICAgICAgICBSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBtX3N0b3Jh
Z2VBcmVhU3luYzsKKyAgICAgICAgUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gbV9zdG9yYWdl
U3luY01hbmFnZXI7CisgICAgICAgIFBhZ2UqIG1fc2Vzc2lvblN0b3JhZ2VQYWdlOyAgLy8gTlVM
TCBpZmYgaXQncyBMb2NhbFN0b3JhZ2UKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcCBiL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCmluZGV4IDBhZWI5ZTcuLmUyZmZkOWQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCisrKyBiL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCkBAIC01NSw3ICs1NSwxMSBAQCBTdG9yYWdl
QXJlYVN5bmM6OlN0b3JhZ2VBcmVhU3luYyhQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4g
c3RvcmFnZVN5bmNNYW5hZwogICAgICwgbV9pbXBvcnRDb21wbGV0ZShmYWxzZSkKIHsKICAgICBB
U1NFUlQobV9zdG9yYWdlQXJlYSk7Ci0gICAgaWYgKCFtX3N5bmNNYW5hZ2VyIHx8ICFtX3N5bmNN
YW5hZ2VyLT5zY2hlZHVsZUltcG9ydCh0aGlzKSkKKyAgICBBU1NFUlQobV9zeW5jTWFuYWdlcik7
CisgICAgCisgICAgLy8gRklYTUU6IElmIGl0IGNhbid0IGltcG9ydCwgdGhlbiB0aGUgZGVmYXVs
dCBXZWJLaXQgYmVoYXZpb3Igc2hvdWxkIGJlIHRoYXQgb2YgcHJpdmF0ZSBicm93c2luZywKKyAg
ICAvLyBub3Qgc2lsZW50bHkgaWdub3JpbmcgaXQuICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjU4OTQKKyAgICBpZiAoIW1fc3luY01hbmFnZXItPnNjaGVkdWxlSW1w
b3J0KHRoaXMpKQogICAgICAgICBtX2ltcG9ydENvbXBsZXRlID0gdHJ1ZTsKIH0KIApAQCAtNjks
OCArNzMsNiBAQCBTdG9yYWdlQXJlYVN5bmM6On5TdG9yYWdlQXJlYVN5bmMoKQogdm9pZCBTdG9y
YWdlQXJlYVN5bmM6OnNjaGVkdWxlRmluYWxTeW5jKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIGlmICghbV9zeW5jTWFuYWdlcikKLSAgICAgICAgcmV0dXJuOwogICAgIAog
ICAgIGlmIChtX3N5bmNUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3N5bmNUaW1lci5zdG9w
KCk7CkBAIC0xMTksOCArMTIxLDYgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxlQ2xl
YXIoKQogdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnN5bmNUaW1lckZpcmVkKFRpbWVyPFN0b3JhZ2VB
cmVhU3luYz4qKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX3N5
bmNNYW5hZ2VyKQotICAgICAgICByZXR1cm47CiAKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5n
Pjo6aXRlcmF0b3IgaXQgPSBtX2NoYW5nZWRJdGVtcy5iZWdpbigpOwogICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+OjppdGVyYXRvciBlbmQgPSBtX2NoYW5nZWRJdGVtcy5lbmQoKTsKQEAgLTE1
OSw4ICsxNTksNiBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6cGVyZm9ybUltcG9ydCgpCiB7CiAg
ICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLmlzT3Bl
bigpKTsKLSAgICBpZiAoIW1fc3luY01hbmFnZXIpCi0gICAgICAgIHJldHVybjsKIAogICAgIFN0
cmluZyBkYXRhYmFzZUZpbGVuYW1lID0gbV9zeW5jTWFuYWdlci0+ZnVsbERhdGFiYXNlRmlsZW5h
bWUobV9zdG9yYWdlQXJlYS0+c2VjdXJpdHlPcmlnaW4oKSk7CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuaCBiL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJl
YVN5bmMuaAppbmRleCA4ZDg4N2ZjLi5iNDFiZGNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZUFyZWFTeW5jLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3lu
Yy5oCkBAIC0zNCw2ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAgIGNsYXNz
IEZyYW1lOwogICAgIGNsYXNzIFN0b3JhZ2VBcmVhOyAgICAKICAgICBjbGFzcyBTdG9yYWdlU3lu
Y01hbmFnZXI7CiAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNN
YW5hZ2VyLmggYi9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgKaW5kZXggZWM3
MmQ3OS4uYTFhOTNjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFu
YWdlci5oCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaApAQCAtMjYs
OSArMjYsOSBAQAogI2lmbmRlZiBTdG9yYWdlU3luY01hbmFnZXJfaAogI2RlZmluZSBTdG9yYWdl
U3luY01hbmFnZXJfaAogCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlQXJlYS5oIgogI2luY2x1ZGUg
IkxvY2FsU3RvcmFnZVRhc2suaCIKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VUaHJlYWQuaCIKKyNp
bmNsdWRlICJTdG9yYWdlQXJlYS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhU3luYy5oIgogCiAj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31193</attachid>
            <date>2009-06-12 00:13:37 -0700</date>
            <delta_ts>2009-06-25 14:32:41 -0700</delta_ts>
            <desc>Patch 5 in this set</desc>
            <filename>5.20090612.patch</filename>
            <type>text/plain</type>
            <size>45580</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmIwOWQwMy4u
MGE0ZDAxNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTgyOSw4ICs4MjksOCBAQAogCQk1MUIyNDE3QjBEOTMxRjNGMDBFODNGNUMgLyogTGVnYWN5V2Vi
QXJjaGl2ZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxQjI0MTdBMEQ5MzFGM0YwMEU4M0Y1QyAvKiBMZWdhY3lXZWJBcmNoaXZlTWFjLm1tICov
OyB9OwogCQk1MUJFMzdERjBEQUVFMDBFMDAxMDg1RkMgLyogU3RvcmFnZUFyZWEuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCRTM3REQwREFFRTAw
RTAwMTA4NUZDIC8qIFN0b3JhZ2VBcmVhLmNwcCAqLzsgfTsKIAkJNTFCRTM3RTAwREFFRTAwRTAw
MTA4NUZDIC8qIFN0b3JhZ2VBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUJFMzdERTBEQUVFMDBFMDAxMDg1RkMgLyogU3RvcmFnZUFyZWEuaCAq
LzsgfTsKLQkJNTFCRTM4MjgwREFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJFMzgyNjBEQUVG
N0RBMDAxMDg1RkMgLyogTG9jYWxTdG9yYWdlLmNwcCAqLzsgfTsKLQkJNTFCRTM4MjkwREFFRjdE
QTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFCRTM4MjcwREFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFn
ZS5oICovOyB9OworCQk1MUJFMzgyODBEQUVGN0RBMDAxMDg1RkMgLyogU3RvcmFnZU5hbWVzcGFj
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJF
MzgyNjBEQUVGN0RBMDAxMDg1RkMgLyogU3RvcmFnZU5hbWVzcGFjZS5jcHAgKi87IH07CisJCTUx
QkUzODI5MERBRUY3REEwMDEwODVGQyAvKiBTdG9yYWdlTmFtZXNwYWNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJFMzgyNzBEQUVGN0RBMDAxMDg1
RkMgLyogU3RvcmFnZU5hbWVzcGFjZS5oICovOyB9OwogCQk1MUMwQUEzOTBGMkFBMTBBMDAxNjQ4
QzIgLyogQ2FjaGVkRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxQzBBQTM4MEYyQUExMEEwMDE2NDhDMiAvKiBDYWNoZWRGcmFtZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxQzBBQTQxMEYy
QUExNUUwMDE2NDhDMiAvKiBDYWNoZWRGcmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUMwQUE0MDBGMkFBMTVFMDAxNjQ4QzIgLyogQ2FjaGVk
RnJhbWUuY3BwICovOyB9OwogCQk1MUM4MUI4OTBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0
b3J5UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxQzgxQjg3MEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJzZXIuY3BwICov
OyB9OwpAQCAtODQ0LDggKzg0NCw2IEBACiAJCTUxRTBCQUJDMERBNTU0NzEwMEE5RTQxNyAvKiBT
dG9yYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFFMEJBQkEwREE1NTQ3MTAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5jcHAgKi87IH07
CiAJCTUxRTBCQUVBMERBNTVENEEwMEE5RTQxNyAvKiBKU1N0b3JhZ2VFdmVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUUwQkFFODBEQTU1RDRB
MDBBOUU0MTcgLyogSlNTdG9yYWdlRXZlbnQuY3BwICovOyB9OwogCQk1MUUwQkFFQjBEQTU1RDRB
MDBBOUU0MTcgLyogSlNTdG9yYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTBCQUU5MERBNTVENEEwMEE5RTQxNyAvKiBKU1N0b3JhZ2VF
dmVudC5oICovOyB9OwotCQk1MUUwQkIyMzBEQTU3MkE2MDBBOUU0MTcgLyogU2Vzc2lvblN0b3Jh
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTBC
QjIxMERBNTcyQTYwMEE5RTQxNyAvKiBTZXNzaW9uU3RvcmFnZS5oICovOyB9OwotCQk1MUUwQkIy
NDBEQTU3MkE2MDBBOUU0MTcgLyogU2Vzc2lvblN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFMEJCMjIwREE1NzJBNjAwQTlFNDE3IC8q
IFNlc3Npb25TdG9yYWdlLmNwcCAqLzsgfTsKIAkJNTFFMEJCMzgwREE1QUNCNjAwQTlFNDE3IC8q
IFN0b3JhZ2VNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxRTBCQjM2MERBNUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmggKi87IH07CiAJCTUx
RTBCQjM5MERBNUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTBCQjM3MERBNUFDQjYwMEE5RTQxNyAv
KiBTdG9yYWdlTWFwLmNwcCAqLzsgfTsKIAkJNTFFMUVDQUYwQzkxQzU0NjAwREMyNTVCIC8qIEF1
dG9kcmFpbmVkUG9vbC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxRTFFQ0FEMEM5MUM1NDYwMERDMjU1QiAvKiBBdXRvZHJhaW5lZFBvb2wubW0gKi87
IH07CkBAIC01NzU0LDggKzU3NTIsOCBAQAogCQk1MUIyNDE3QTBEOTMxRjNGMDBFODNGNUMgLyog
TGVnYWN5V2ViQXJjaGl2ZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IExlZ2FjeVdlYkFyY2hpdmVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxQkUzN0REMERBRUUwMEUwMDEwODVGQyAvKiBTdG9yYWdlQXJlYS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlQXJlYS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxQkUzN0RFMERBRUUwMEUwMDEwODVGQyAvKiBTdG9yYWdlQXJl
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlQXJlYS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUJFMzgyNjBEQUVGN0RBMDAxMDg1RkMgLyogTG9j
YWxTdG9yYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2Fs
U3RvcmFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxQkUzODI3MERBRUY3
REEwMDEwODVGQyAvKiBMb2NhbFN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTG9jYWxTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQkUz
ODI2MERBRUY3REEwMDEwODVGQyAvKiBTdG9yYWdlTmFtZXNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VOYW1lc3BhY2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MUJFMzgyNzBEQUVGN0RBMDAxMDg1RkMgLyogU3RvcmFnZU5h
bWVzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlTmFtZXNw
YWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQzBBQTM4MEYyQUExMEEwMDE2
NDhDMiAvKiBDYWNoZWRGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
YWNoZWRGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUMwQUE0MDBGMkFB
MTVFMDAxNjQ4QzIgLyogQ2FjaGVkRnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ2FjaGVkRnJhbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MUM4MUI4NzBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0b3J5UGFyc2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGVFBEaXJlY3RvcnlQYXJzZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTc3MCw4ICs1NzY4LDYgQEAKIAkJNTFF
MEJBQkQwREE1NTQ4NDAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gU3RvcmFnZUV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTFFMEJBRTgwREE1NUQ0QTAwQTlFNDE3IC8qIEpTU3RvcmFnZUV2ZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RvcmFnZUV2ZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFMEJBRTkwREE1NUQ0QTAwQTlFNDE3IC8qIEpTU3RvcmFn
ZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RvcmFnZUV2ZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRTBCQjIxMERBNTcyQTYwMEE5RTQx
NyAvKiBTZXNzaW9uU3RvcmFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
ZXNzaW9uU3RvcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUUwQkIyMjBE
QTU3MkE2MDBBOUU0MTcgLyogU2Vzc2lvblN0b3JhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2Vzc2lvblN0b3JhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MUUwQkIzNjBEQTVBQ0I2MDBBOUU0MTcgLyogU3RvcmFnZU1hcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlTWFwLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxRTBCQjM3MERBNUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VNYXAuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUUxRUNBRDBDOTFDNTQ2MDBEQzI1NUIgLyog
QXV0b2RyYWluZWRQb29sLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gQXV0b2RyYWluZWRQb29sLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU5
OSw4ICs5NTk1LDYgQEAKIAkJCQkxQUQ1MUExMzBDQjU5Q0QzMDA5NTNEMTEgLyogRGF0YWJhc2VU
cmFja2VyLmNwcCAqLywKIAkJCQkxQUQ1MUExMjBDQjU5Q0QzMDA5NTNEMTEgLyogRGF0YWJhc2VU
cmFja2VyLmggKi8sCiAJCQkJNTFGQUZFMzMwQ0VDQkYyRDAwQkIzRjI0IC8qIERhdGFiYXNlVHJh
Y2tlckNsaWVudC5oICovLAotCQkJCTUxQkUzODI2MERBRUY3REEwMDEwODVGQyAvKiBMb2NhbFN0
b3JhZ2UuY3BwICovLAotCQkJCTUxQkUzODI3MERBRUY3REEwMDEwODVGQyAvKiBMb2NhbFN0b3Jh
Z2UuaCAqLywKIAkJCQk1MTFGMjMxMzBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9yYWdlVGFz
ay5jcHAgKi8sCiAJCQkJNTExRjIzMTQwREMxNjBEQTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRh
c2suaCAqLywKIAkJCQk1MTFGMjMxNTBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9yYWdlVGhy
ZWFkLmNwcCAqLywKQEAgLTk2MjYsOCArOTYyMCw2IEBACiAJCQkJMUE3Q0NCMjMwQ0Q5NDZGRDAw
QjdCNjRFIC8qIFNRTFRyYW5zYWN0aW9uLmlkbCAqLywKIAkJCQkxQTdDQ0IxNzBDRDk0NjlBMDBC
N0I2NEUgLyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oICovLAogCQkJCTFBN0NDQjE4MENEOTQ2
OUEwMEI3QjY0RSAvKiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCAqLywKLQkJCQk1MUUw
QkIyMjBEQTU3MkE2MDBBOUU0MTcgLyogU2Vzc2lvblN0b3JhZ2UuY3BwICovLAotCQkJCTUxRTBC
QjIxMERBNTcyQTYwMEE5RTQxNyAvKiBTZXNzaW9uU3RvcmFnZS5oICovLAogCQkJCTUxRTNGOUM1
MERBMDU5REMwMDI1MDkxMSAvKiBTdG9yYWdlLmNwcCAqLywKIAkJCQk1MUUzRjlDNDBEQTA1OURD
MDAyNTA5MTEgLyogU3RvcmFnZS5oICovLAogCQkJCTUxRTNGOUQxMERBMDVENzEwMDI1MDkxMSAv
KiBTdG9yYWdlLmlkbCAqLywKQEAgLTk2NDAsNiArOTYzMiw4IEBACiAJCQkJNTFFMEJBQkQwREE1
NTQ4NDAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5pZGwgKi8sCiAJCQkJNTFFMEJCMzcwREE1QUNC
NjAwQTlFNDE3IC8qIFN0b3JhZ2VNYXAuY3BwICovLAogCQkJCTUxRTBCQjM2MERBNUFDQjYwMEE5
RTQxNyAvKiBTdG9yYWdlTWFwLmggKi8sCisJCQkJNTFCRTM4MjYwREFFRjdEQTAwMTA4NUZDIC8q
IFN0b3JhZ2VOYW1lc3BhY2UuY3BwICovLAorCQkJCTUxQkUzODI3MERBRUY3REEwMDEwODVGQyAv
KiBTdG9yYWdlTmFtZXNwYWNlLmggKi8sCiAJCQkJQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8q
IFN0b3JhZ2VTeW5jTWFuYWdlci5oICovLAogCQkJCUM1MTAyRDkzMEZEOUFBMkQwMEZBRkYwNCAv
KiBTdG9yYWdlU3luY01hbmFnZXIuY3BwICovLAogCQkJKTsKQEAgLTE2MDYzLDcgKzE2MDU3LDcg
QEAKIAkJCQlBN0FEMkY4ODBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1NkQzNzMyMEFEQkE1REUwMEE0NTU0RCAvKiBMb2FkZXJOU1VSTEV4dHJhcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDZFODFFRDcwQUI1RDVFOTAwQzg3ODM3IC8qIExvY2FsQ3Vy
cmVudEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFCRTM4MjkwREFFRjdE
QTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFCRTM4Mjkw
REFFRjdEQTAwMTA4NUZDIC8qIFN0b3JhZ2VOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxMUYyMzE4MERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VUYXNrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTFGMjMxQTBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9yYWdlVGhyZWFk
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzUyMDdCRTA5QkQ0MTBBMDBGMjAzOEQgLyogTG9jYWxp
emVkU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjUwMyw3ICsxNjQ5Nyw2IEBACiAJCQkJ
MDg0QUVCRTUwRkI1MDVGQTAwMzg0ODNFIC8qIFNlbGVjdEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzMzA5RTBFMDk5RTY0OTIwMDU2RTU4MSAvKiBTZWxlY3Rpb25Db250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzdGQTY4MTBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JO
b2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFFMEJCMjMwREE1NzJBNjAwQTlFNDE3IC8q
IFNlc3Npb25TdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxMDA5OUU2NDkyMDA1
NkU1ODEgLyogU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
RjE5OTRGMDgyNDVFNTkwMDFFOUFCQyAvKiBTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM1RUI4QzQwRTgyMDMxQjAwQjI1OTY1IC8qIFNoYWRvd0RhdGEuaCBpbiBIZWFkZXJzICovLApA
QCAtMTgxMjYsNyArMTgxMTksNyBAQAogCQkJCUE3QUQyRjg3MEVDODlEMDcwMDhBQjAwMiAvKiBM
aW5rSGFzaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTZEMzczMzBBREJBNURFMDBBNDU1NEQg
LyogTG9hZGVyTlNVUkxFeHRyYXMubW0gaW4gU291cmNlcyAqLywKIAkJCQkwNkU4MUVFQzBBQjVE
QTk3MDBDODc4MzcgLyogTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0Lm1tIGluIFNvdXJjZXMg
Ki8sCi0JCQkJNTFCRTM4MjgwREFFRjdEQTAwMTA4NUZDIC8qIExvY2FsU3RvcmFnZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1MUJFMzgyODBEQUVGN0RBMDAxMDg1RkMgLyogU3RvcmFnZU5hbWVz
cGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTFGMjMxNzBEQzE2MERBMDA0RjAwMzIgLyog
TG9jYWxTdG9yYWdlVGFzay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTFGMjMxOTBEQzE2MERB
MDA0RjAwMzIgLyogTG9jYWxTdG9yYWdlVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
NTIwN0MwMDlCRDQxMjEwMEYyMDM4RCAvKiBMb2NhbGl6ZWRTdHJpbmdzTWFjLm1tIGluIFNvdXJj
ZXMgKi8sCkBAIC0xODUyNiw3ICsxODUxOSw2IEBACiAJCQkJOTMzMDlFMEQwOTlFNjQ5MjAwNTZF
NTgxIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEE4Qzk2
RUIwQkU2OTAzMjAwNEVFRkYwIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQlCQzdGQTY4MjBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUUwQkIyNDBEQTU3MkE2MDBBOUU0MTcgLyogU2Vzc2lv
blN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMEYwOTlFNjQ5MjAwNTZFNTgx
IC8qIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QzlB
NUVBMEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5ncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzVFQjhDMzBFODIwMzFCMDBCMjU5NjUgLyogU2hhZG93RGF0YS5jcHAgaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvV2ViQ29yZS9wYWdlL0Nocm9t
ZS5jcHAKaW5kZXggODZkZTgyZS4uMjE3MDcyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0No
cm9tZS5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAK
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0jaW5j
bHVkZSAiU2Vzc2lvblN0b3JhZ2UuaCIKKyNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgiCiAj
ZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTQ3LDggKzE0Nyw4IEBAIFBhZ2UqIENo
cm9tZTo6Y3JlYXRlV2luZG93KEZyYW1lKiBmcmFtZSwgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKICAgICBpZiAobmV3UGFn
ZSkgewotICAgICAgICBpZiAoU2Vzc2lvblN0b3JhZ2UqIG9sZFNlc3Npb25TdG9yYWdlID0gbV9w
YWdlLT5zZXNzaW9uU3RvcmFnZShmYWxzZSkpCi0gICAgICAgICAgICBuZXdQYWdlLT5zZXRTZXNz
aW9uU3RvcmFnZShvbGRTZXNzaW9uU3RvcmFnZS0+Y29weShuZXdQYWdlKSk7CisgICAgICAgIGlm
IChTdG9yYWdlTmFtZXNwYWNlKiBvbGRTZXNzaW9uU3RvcmFnZSA9IG1fcGFnZS0+c2Vzc2lvblN0
b3JhZ2UoZmFsc2UpKQorICAgICAgICAgICAgbmV3UGFnZS0+c2V0U2Vzc2lvblN0b3JhZ2Uob2xk
U2Vzc2lvblN0b3JhZ2UtPmNvcHkoKSk7CiAgICAgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5k
ZXggYmMxMTkyZC4uZTVjNzE1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5j
cHAKKysrIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTcwLDkgKzcwLDggQEAKICNl
bmRpZgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZS5o
IgotI2luY2x1ZGUgIlNlc3Npb25TdG9yYWdlLmgiCiAjaW5jbHVkZSAiU3RvcmFnZS5oIgorI2lu
Y2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgogI2Vu
ZGlmCiAKQEAgLTU2NCw3ICs1NjMsNyBAQCBTdG9yYWdlKiBET01XaW5kb3c6OmxvY2FsU3RvcmFn
ZSgpIGNvbnN0CiAgICAgaWYgKCFzZXR0aW5ncyB8fCAhc2V0dGluZ3MtPmxvY2FsU3RvcmFnZUVu
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBMb2NhbFN0b3JhZ2UqIGxvY2FsU3Rv
cmFnZSA9IHBhZ2UtPmdyb3VwKCkubG9jYWxTdG9yYWdlKCk7CisgICAgU3RvcmFnZU5hbWVzcGFj
ZSogbG9jYWxTdG9yYWdlID0gcGFnZS0+Z3JvdXAoKS5sb2NhbFN0b3JhZ2UoKTsKICAgICBSZWZQ
dHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gbG9jYWxTdG9yYWdlID8gbG9jYWxTdG9yYWdl
LT5zdG9yYWdlQXJlYShkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSkgOiAwOyAKICAgICBpZiAo
c3RvcmFnZUFyZWEpIHsKICAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kaWRV
c2VET01TdG9yYWdlKHN0b3JhZ2VBcmVhLmdldCgpLCB0cnVlLCBtX2ZyYW1lKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaCBiL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaApp
bmRleCA2ODYyY2RjLi5lYWM5MzZmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmgKKysrIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCkBAIC02MSw3ICs2MSw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBXZWJLaXRQb2ludDsKIAogI2lmIEVOQUJMRShET01f
U1RPUkFHRSkKLSAgICBjbGFzcyBTZXNzaW9uU3RvcmFnZTsKICAgICBjbGFzcyBTdG9yYWdlOwog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAppbmRleCA3MGI0NDU5Li45OWM1MTBhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC01Nyw5ICs1Nyw4IEBA
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdF
KQotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZS5oIgotI2luY2x1ZGUgIlNlc3Npb25TdG9yYWdlLmgi
CiAjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNlLmgi
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpAQCAtNTQ4LDE3ICs1
NDcsMTYgQEAgdm9pZCBQYWdlOjpzZXREZWJ1Z2dlcihKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikK
IH0KIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLVNlc3Npb25TdG9yYWdlKiBQYWdlOjpzZXNz
aW9uU3RvcmFnZShib29sIG9wdGlvbmFsQ3JlYXRlKQorU3RvcmFnZU5hbWVzcGFjZSogUGFnZTo6
c2Vzc2lvblN0b3JhZ2UoYm9vbCBvcHRpb25hbENyZWF0ZSkKIHsKICAgICBpZiAoIW1fc2Vzc2lv
blN0b3JhZ2UgJiYgb3B0aW9uYWxDcmVhdGUpCi0gICAgICAgIG1fc2Vzc2lvblN0b3JhZ2UgPSBT
ZXNzaW9uU3RvcmFnZTo6Y3JlYXRlKHRoaXMpOworICAgICAgICBtX3Nlc3Npb25TdG9yYWdlID0g
U3RvcmFnZU5hbWVzcGFjZTo6c2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UoKTsKIAogICAgIHJldHVy
biBtX3Nlc3Npb25TdG9yYWdlLmdldCgpOwogfQogCi12b2lkIFBhZ2U6OnNldFNlc3Npb25TdG9y
YWdlKFBhc3NSZWZQdHI8U2Vzc2lvblN0b3JhZ2U+IG5ld1N0b3JhZ2UpCit2b2lkIFBhZ2U6OnNl
dFNlc3Npb25TdG9yYWdlKFBhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gbmV3U3RvcmFnZSkK
IHsKLSAgICBBU1NFUlQobmV3U3RvcmFnZS0+cGFnZSgpID09IHRoaXMpOwogICAgIG1fc2Vzc2lv
blN0b3JhZ2UgPSBuZXdTdG9yYWdlOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bh
Z2UvUGFnZS5oIGIvV2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCBlZWRkMjRjLi5iMzkwZTg3IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisrKyBiL1dlYkNvcmUvcGFnZS9QYWdlLmgK
QEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFZpc2libGVT
ZWxlY3Rpb247CiAgICAgY2xhc3MgU2VsZWN0aW9uQ29udHJvbGxlcjsKICNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCi0gICAgY2xhc3MgU2Vzc2lvblN0b3JhZ2U7CisgICAgY2xhc3MgU3RvcmFnZU5h
bWVzcGFjZTsKICNlbmRpZgogICAgIGNsYXNzIFNldHRpbmdzOwogI2lmIEVOQUJMRShXTUwpCkBA
IC0xNzYsOCArMTc2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgdm9p
ZCB2aXNpdGVkU3RhdGVDaGFuZ2VkKFBhZ2VHcm91cCosIExpbmtIYXNoIHZpc2l0ZWRIYXNoKTsK
IAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSAgICAgICAgU2Vzc2lvblN0b3JhZ2UqIHNlc3Np
b25TdG9yYWdlKGJvb2wgb3B0aW9uYWxDcmVhdGUgPSB0cnVlKTsKLSAgICAgICAgdm9pZCBzZXRT
ZXNzaW9uU3RvcmFnZShQYXNzUmVmUHRyPFNlc3Npb25TdG9yYWdlPik7CisgICAgICAgIFN0b3Jh
Z2VOYW1lc3BhY2UqIHNlc3Npb25TdG9yYWdlKGJvb2wgb3B0aW9uYWxDcmVhdGUgPSB0cnVlKTsK
KyAgICAgICAgdm9pZCBzZXRTZXNzaW9uU3RvcmFnZShQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3Bh
Y2U+KTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdNTCkKQEAgLTI0OCw3ICsyNDgsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGludCBtX2N1c3RvbUhUTUxUb2tlbml6ZXJDaHVua1Np
emU7CiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgICAgIFJlZlB0cjxTZXNzaW9uU3Rv
cmFnZT4gbV9zZXNzaW9uU3RvcmFnZTsKKyAgICAgICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+
IG1fc2Vzc2lvblN0b3JhZ2U7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikgfHwgKFBMQVRG
T1JNKFdYKSAmJiBkZWZpbmVkKF9fV1hNU1dfXykpIHx8IChQTEFURk9STShRVCkgJiYgZGVmaW5l
ZChRX1dTX1dJTikpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcCBiL1dl
YkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCmluZGV4IGYwOTUxZWIuLjFiM2Q4NTMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9QYWdlR3Jv
dXAuY3BwCkBAIC0zMiw4ICszMiw4IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKIAogI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKLSNpbmNsdWRlICJMb2NhbFN0b3JhZ2UuaCIKICNpbmNsdWRlICJT
dG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oQ0hST01JVU0pCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgUGFnZUdyb3VwOjpj
bG9zZUxvY2FsU3RvcmFnZSgpCiAgICAgUGFnZUdyb3VwTWFwOjppdGVyYXRvciBlbmQgPSBwYWdl
R3JvdXBzLT5lbmQoKTsKIAogICAgIGZvciAoUGFnZUdyb3VwTWFwOjppdGVyYXRvciBpdCA9IHBh
Z2VHcm91cHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoTG9jYWxT
dG9yYWdlKiBsb2NhbFN0b3JhZ2UgPSBpdC0+c2Vjb25kLT5sb2NhbFN0b3JhZ2UoKSkKKyAgICAg
ICAgaWYgKFN0b3JhZ2VOYW1lc3BhY2UqIGxvY2FsU3RvcmFnZSA9IGl0LT5zZWNvbmQtPmxvY2Fs
U3RvcmFnZSgpKQogICAgICAgICAgICAgbG9jYWxTdG9yYWdlLT5jbG9zZSgpOwogICAgIH0KICNl
bmRpZgpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgUGFnZUdyb3VwOjphZGRQYWdlKFBhZ2UqIHBh
Z2UpCiAgICAgbV9wYWdlcy5hZGQocGFnZSk7CiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogICAg
IGlmICghbV9sb2NhbFN0b3JhZ2UpCi0gICAgICAgIG1fbG9jYWxTdG9yYWdlID0gTG9jYWxTdG9y
YWdlOjpsb2NhbFN0b3JhZ2UocGFnZS0+c2V0dGluZ3MoKS0+bG9jYWxTdG9yYWdlRGF0YWJhc2VQ
YXRoKCkpOworICAgICAgICBtX2xvY2FsU3RvcmFnZSA9IFN0b3JhZ2VOYW1lc3BhY2U6OmxvY2Fs
U3RvcmFnZU5hbWVzcGFjZShwYWdlLT5zZXR0aW5ncygpLT5sb2NhbFN0b3JhZ2VEYXRhYmFzZVBh
dGgoKSk7CiAjZW5kaWYKIH0KIApAQCAtMTg1LDcgKzE4NSw3IEBAIHZvaWQgUGFnZUdyb3VwOjpz
ZXRTaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyhib29sIHNob3VsZFRyYWNrKQogfQogCiAjaWYgRU5B
QkxFKERPTV9TVE9SQUdFKQotTG9jYWxTdG9yYWdlKiBQYWdlR3JvdXA6OmxvY2FsU3RvcmFnZSgp
CitTdG9yYWdlTmFtZXNwYWNlKiBQYWdlR3JvdXA6OmxvY2FsU3RvcmFnZSgpCiB7CiAgICAgcmV0
dXJuIG1fbG9jYWxTdG9yYWdlLmdldCgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1Bh
Z2VHcm91cC5oIGIvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5oCmluZGV4IDA5N2ZiODcuLjQ0NTI3
ZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaAorKysgYi9XZWJDb3JlL3Bh
Z2UvUGFnZUdyb3VwLmgKQEAgLTM0LDcgKzM0LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgIGNsYXNzIEtVUkw7Ci0gICAgY2xhc3MgTG9jYWxTdG9yYWdlOworICAgIGNsYXNzIFN0b3Jh
Z2VOYW1lc3BhY2U7CiAgICAgY2xhc3MgUGFnZTsKIAogICAgIGNsYXNzIFBhZ2VHcm91cCA6IE5v
bmNvcHlhYmxlIHsKQEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyKCkgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKICNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgICAgIExvY2FsU3RvcmFnZSogbG9jYWxTdG9yYWdlKCk7
CisgICAgICAgIFN0b3JhZ2VOYW1lc3BhY2UqIGxvY2FsU3RvcmFnZSgpOwogI2VuZGlmCiAKICAg
ICBwcml2YXRlOgpAQCAtNzgsNyArNzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgdW5zaWduZWQgbV9pZGVudGlmaWVyOwogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSAgICAg
ICAgUmVmUHRyPExvY2FsU3RvcmFnZT4gbV9sb2NhbFN0b3JhZ2U7CisgICAgICAgIFJlZlB0cjxT
dG9yYWdlTmFtZXNwYWNlPiBtX2xvY2FsU3RvcmFnZTsKICNlbmRpZgogICAgIH07CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwIGIvV2ViQ29yZS9zdG9yYWdl
L0xvY2FsU3RvcmFnZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwNjVlYjYu
LjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdl
LmgiCi0KLSNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2lu
Y2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1l
VHJlZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYWdlR3JvdXAuaCIKLSNpbmNs
dWRlICJTdG9yYWdlQXJlYS5oIgotI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgotI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nLCBMb2NhbFN0b3JhZ2UqPiBMb2NhbFN0b3JhZ2VNYXA7Ci0KLXN0
YXRpYyBMb2NhbFN0b3JhZ2VNYXAmIGxvY2FsU3RvcmFnZU1hcCgpCi17Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VNYXAsIGxvY2FsU3RvcmFnZU1hcCwgKCkpOwotICAgIHJl
dHVybiBsb2NhbFN0b3JhZ2VNYXA7Ci19Ci0KLVBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBMb2Nh
bFN0b3JhZ2U6OmxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgY29uc3Qg
U3RyaW5nIGxvb2t1cFBhdGggPSBwYXRoLmlzTnVsbCgpID8gU3RyaW5nKCIiKSA6IHBhdGg7Ci0g
ICAgTG9jYWxTdG9yYWdlTWFwOjppdGVyYXRvciBpdCA9IGxvY2FsU3RvcmFnZU1hcCgpLmZpbmQo
bG9va3VwUGF0aCk7Ci0gICAgaWYgKGl0ID09IGxvY2FsU3RvcmFnZU1hcCgpLmVuZCgpKSB7Ci0g
ICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3RvcmFnZSA9IGFkb3B0UmVmKG5ldyBM
b2NhbFN0b3JhZ2UobG9va3VwUGF0aCkpOwotICAgICAgICBsb2NhbFN0b3JhZ2VNYXAoKS5zZXQo
bG9va3VwUGF0aCwgbG9jYWxTdG9yYWdlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGxvY2FsU3Rv
cmFnZS5yZWxlYXNlKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBpdC0+c2Vjb25kOwotfQot
Ci1Mb2NhbFN0b3JhZ2U6OkxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCi0gICAgOiBt
X3BhdGgocGF0aC5jb3B5KCkpCi0gICAgLCBtX3N5bmNNYW5hZ2VyKDApCi17Ci0gICAgaWYgKCFt
X3BhdGguaXNFbXB0eSgpKQotICAgICAgICBtX3N5bmNNYW5hZ2VyID0gU3RvcmFnZVN5bmNNYW5h
Z2VyOjpjcmVhdGUobV9wYXRoKTsKLX0KLQotTG9jYWxTdG9yYWdlOjp+TG9jYWxTdG9yYWdlKCkK
LXsKLSAgICBBU1NFUlQobG9jYWxTdG9yYWdlTWFwKCkuZ2V0KG1fcGF0aCkgPT0gdGhpcyk7Ci0g
ICAgbG9jYWxTdG9yYWdlTWFwKCkucmVtb3ZlKG1fcGF0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8U3Rv
cmFnZUFyZWE+IExvY2FsU3RvcmFnZTo6c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdp
bikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gRklYTUU6IElmIHRo
ZSBzZWN1cml0eSBvcmlnaW4gaW4gcXVlc3Rpb24gaGFzIG5ldmVyIGhhZCBhIHN0b3JhZ2UgYXJl
YSBlc3RhYmxpc2hlZCwKLSAgICAvLyB3ZSBuZWVkIHRvIGFzayBhIGNsaWVudCBjYWxsIGlmIGVz
dGFibGlzaGluZyBpdCBpcyBva2F5LiAgSWYgdGhlIGNsaWVudCBkZW5pZXMgdGhlIHJlcXVlc3Qs
Ci0gICAgLy8gdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbnVsbC4KLSAgICAvLyBUaGUgc291cmNl
RnJhbWUgYXJndW1lbnQgZXhpc3RzIGZvciB0aGUgcHVycG9zZSBvZiBhc2tpbmcgYSBjbGllbnQu
Ci0gICAgLy8gVG8ga25vdyBpZiBhbiBhcmVhIGhhcyBwcmV2aW91c2x5IGJlZW4gZXN0YWJsaXNo
ZWQsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGlzIExvY2FsU3RvcmFnZSAKLSAgICAvLyBvYmpl
Y3QgaGFzIGZpbmlzaGVkIGl0J3MgQXJlYUltcG9ydCB0YXNrLgotCi0gICAgLy8gRklYTUU6IElm
IHRoZSBzdG9yYWdlIGFyZWEgaXMgYmVpbmcgZXN0YWJsaXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1l
IGhlcmUsIHdlIG5lZWQgdG8gCi0gICAgLy8gc3luYyBpdHMgZXhpc3RhbmNlIGFuZCBxdW90YSBv
dXQgdG8gZGlzayB2aWEgYW4gdGFzayBvZiB0eXBlIEFyZWFTeW5jCi0KLSAgICBSZWZQdHI8U3Rv
cmFnZUFyZWE+IHN0b3JhZ2VBcmVhOwotICAgIGlmIChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFy
ZWFNYXAuZ2V0KG9yaWdpbikpCi0gICAgICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7
Ci0gICAgCi0gICAgc3RvcmFnZUFyZWEgPSBTdG9yYWdlQXJlYTo6Y3JlYXRlTG9jYWxTdG9yYWdl
KG9yaWdpbiwgbV9zeW5jTWFuYWdlcik7Ci0gICAgbV9zdG9yYWdlQXJlYU1hcC5zZXQob3JpZ2lu
LCBzdG9yYWdlQXJlYSk7Ci0gICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKLX0KLQot
dm9pZCBMb2NhbFN0b3JhZ2U6OmNsb3NlKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgTG9jYWxTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJl
YU1hcC5lbmQoKTsKLSAgICBmb3IgKExvY2FsU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5z
ZWNvbmQtPnNjaGVkdWxlRmluYWxTeW5jKCk7Ci0gICAgCi0gICAgbV9zeW5jTWFuYWdlciA9IDA7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFn
ZS9Mb2NhbFN0b3JhZ2UuaCBiL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE5MWM4ZS4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL3N0
b3JhZ2UvTG9jYWxTdG9yYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgTG9jYWxT
dG9yYWdlX2gKLSNkZWZpbmUgTG9jYWxTdG9yYWdlX2gKLQotI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luSGFzaC5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBTdG9yYWdlQXJl
YTsKLSAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI7Ci0KLSAgICBjbGFzcyBMb2NhbFN0b3Jh
Z2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMb2NhbFN0b3JhZ2U+IHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIH5Mb2NhbFN0b3JhZ2UoKTsKLQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0
b3JhZ2U+IGxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpOwotCi0gICAgICAgIFBhc3NS
ZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKik7Ci0KLSAgICAg
ICAgdm9pZCBjbG9zZSgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTG9jYWxTdG9yYWdlKGNv
bnN0IFN0cmluZyYgcGF0aCk7Ci0KLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1
cml0eU9yaWdpbj4sIFJlZlB0cjxTdG9yYWdlQXJlYT4sIFNlY3VyaXR5T3JpZ2luSGFzaD4gTG9j
YWxTdG9yYWdlQXJlYU1hcDsKLSAgICAgICAgTG9jYWxTdG9yYWdlQXJlYU1hcCBtX3N0b3JhZ2VB
cmVhTWFwOwotCi0gICAgICAgIFN0cmluZyBtX3BhdGg7Ci0gICAgICAgIFJlZlB0cjxTdG9yYWdl
U3luY01hbmFnZXI+IG1fc3luY01hbmFnZXI7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gTG9jYWxTdG9yYWdlX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VU
YXNrLmNwcAppbmRleCA5NjU3ZmYzLi5hN2Q4OWNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3Jh
Z2UvTG9jYWxTdG9yYWdlVGFzay5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFn
ZVRhc2suY3BwCkBAIC0yNiw5ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiTG9jYWxTdG9yYWdlVGFzay5oIgogCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlLmgiCiAjaW5j
bHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgi
CisjaW5jbHVkZSAiU3RvcmFnZU5hbWVzcGFjZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuY3BwIGIvV2Vi
Q29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAKaW5kZXggOWMxZDRmZC4uYjJkYzUw
YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAKKysr
IGIvV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAKQEAgLTI2LDkgKzI2LDkg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VUaHJlYWQuaCIK
IAotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZS5oIgogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRhc2su
aCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYVN5bmMuaCIKKyNpbmNsdWRlICJTdG9yYWdlTmFtZXNw
YWNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9y
YWdlL1Nlc3Npb25TdG9yYWdlLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYzI3MTIuLjAwMDAwMDAKLS0tIGEv
V2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSAK
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTZXNzaW9uU3RvcmFnZS5oIgotCi0jaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVU
cmVlLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0j
aW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKLSNpbmNsdWRlICJTdG9yYWdlTWFwLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxTZXNzaW9uU3RvcmFnZT4gU2Vzc2lvblN0b3Jh
Z2U6OmNyZWF0ZShQYWdlKiBwYWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Vzc2lv
blN0b3JhZ2UocGFnZSkpOwotfQotCi1TZXNzaW9uU3RvcmFnZTo6U2Vzc2lvblN0b3JhZ2UoUGFn
ZSogcGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQotewotICAgIEFTU0VSVChtX3BhZ2UpOwotfQot
Ci1QYXNzUmVmUHRyPFNlc3Npb25TdG9yYWdlPiBTZXNzaW9uU3RvcmFnZTo6Y29weShQYWdlKiBu
ZXdQYWdlKQotewotICAgIEFTU0VSVChuZXdQYWdlKTsKLSAgICBSZWZQdHI8U2Vzc2lvblN0b3Jh
Z2U+IG5ld1Nlc3Npb24gPSBTZXNzaW9uU3RvcmFnZTo6Y3JlYXRlKG5ld1BhZ2UpOwotICAgIAot
ICAgIFNlc3Npb25TdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1h
cC5lbmQoKTsKLSAgICBmb3IgKFNlc3Npb25TdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaSA9IG1f
c3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewotICAgICAgICBSZWZQdHI8
U3RvcmFnZUFyZWE+IGFyZWFDb3B5ID0gaS0+c2Vjb25kLT5jb3B5KGktPmZpcnN0LmdldCgpLCBu
ZXdQYWdlKTsKLSAgICAgICAgbmV3U2Vzc2lvbi0+bV9zdG9yYWdlQXJlYU1hcC5zZXQoaS0+Zmly
c3QsIGFyZWFDb3B5LnJlbGVhc2UoKSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuZXdTZXNz
aW9uLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU2Vzc2lvblN0b3Jh
Z2U6OnN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCi17Ci0gICAgUmVmUHRyPFN0
b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYTsKLSAgICBpZiAoc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VB
cmVhTWFwLmdldChvcmlnaW4pKQotICAgICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgp
OwotICAgICAgICAKLSAgICBzdG9yYWdlQXJlYSA9IFN0b3JhZ2VBcmVhOjpjcmVhdGVTZXNzaW9u
U3RvcmFnZShvcmlnaW4sIG1fcGFnZSk7Ci0gICAgbV9zdG9yYWdlQXJlYU1hcC5zZXQob3JpZ2lu
LCBzdG9yYWdlQXJlYSk7Ci0gICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKLX0KLQot
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmggYi9XZWJDb3Jl
L3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NmU2MmM0Yy4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3JhZ2UuaAor
KysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBTZXNzaW9uU3RvcmFnZV9oCi0jZGVmaW5lIFNl
c3Npb25TdG9yYWdlX2gKLQotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgotI2luY2x1
ZGUgIlN0b3JhZ2VBcmVhLmgiCi0KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIFBh
Z2U7Ci0KLSAgICBjbGFzcyBTZXNzaW9uU3RvcmFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNlc3Np
b25TdG9yYWdlPiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXNz
aW9uU3RvcmFnZT4gY3JlYXRlKFBhZ2UqKTsKLSAgICAgICAgUGFzc1JlZlB0cjxTZXNzaW9uU3Rv
cmFnZT4gY29weShQYWdlKik7Ci0gICAgICAgIAotICAgICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VB
cmVhPiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiopOwotCi0jaWZuZGVmIE5ERUJVRwotICAg
ICAgICBQYWdlKiBwYWdlKCkgeyByZXR1cm4gbV9wYWdlOyB9Ci0jZW5kaWYKLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIFNlc3Npb25TdG9yYWdlKFBhZ2UqKTsKLQotICAgICAgICB2b2lkIGRpc3Bh
dGNoU3RvcmFnZUV2ZW50KFN0b3JhZ2VBcmVhKiwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFt
ZSk7Ci0KLSAgICAgICAgUGFnZSogbV9wYWdlOwotICAgICAgICAKLSAgICAgICAgdHlwZWRlZiBI
YXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxTdG9yYWdlQXJlYT4sIFNlY3Vy
aXR5T3JpZ2luSGFzaD4gU2Vzc2lvblN0b3JhZ2VBcmVhTWFwOwotICAgICAgICBTZXNzaW9uU3Rv
cmFnZUFyZWFNYXAgbV9zdG9yYWdlQXJlYU1hcDsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBTZXNzaW9uU3RvcmFnZV9oCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmNw
cAppbmRleCA5Y2E0MTRlLi5lMDBhOThkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZUFyZWEuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5jcHAKQEAgLTQw
LDE3ICs0MCwyMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8U3RvcmFn
ZUFyZWE+IFN0b3JhZ2VBcmVhOjpjcmVhdGVMb2NhbFN0b3JhZ2UoU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKQorUGFzc1Jl
ZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZUFyZWE6OmNyZWF0ZShTdG9yYWdlVHlwZSBzdG9yYWdl
VHlwZSwgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFn
ZXI+IHN5bmNNYW5hZ2VyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFyZWEo
b3JpZ2luLCBzeW5jTWFuYWdlcikpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3RvcmFnZUFy
ZWEoc3RvcmFnZVR5cGUsIG9yaWdpbiwgc3luY01hbmFnZXIpKTsKIH0KIAotU3RvcmFnZUFyZWE6
OlN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5
bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKLSAgICA6IG1fc2VjdXJpdHlPcmlnaW4ob3JpZ2luKQor
U3RvcmFnZUFyZWE6OlN0b3JhZ2VBcmVhKFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBTZWN1cml0
eU9yaWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFn
ZXIpCisgICAgOiBtX3N0b3JhZ2VUeXBlKHN0b3JhZ2VUeXBlKQorICAgICwgbV9zZWN1cml0eU9y
aWdpbihvcmlnaW4pCiAgICAgLCBtX3N0b3JhZ2VNYXAoU3RvcmFnZU1hcDo6Y3JlYXRlKCkpCiAg
ICAgLCBtX3N0b3JhZ2VBcmVhU3luYygwKQogICAgICwgbV9zdG9yYWdlU3luY01hbmFnZXIoc3lu
Y01hbmFnZXIpCi0gICAgLCBtX3Nlc3Npb25TdG9yYWdlUGFnZSgwKQorI2lmbmRlZiBOREVCVUcK
KyAgICAsIG1faXNTaHV0ZG93bihmYWxzZSkKKyNlbmRpZgogewogICAgIEFTU0VSVChtX3NlY3Vy
aXR5T3JpZ2luKTsKICAgICBBU1NFUlQobV9zdG9yYWdlTWFwKTsKQEAgLTY0LDM5ICs2NywzNiBA
QCBTdG9yYWdlQXJlYTo6U3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1Jl
ZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+CiAgICAgfQogfQogCi1QYXNzUmVmUHRyPFN0b3JhZ2VB
cmVhPiBTdG9yYWdlQXJlYTo6Y3JlYXRlU2Vzc2lvblN0b3JhZ2UoU2VjdXJpdHlPcmlnaW4qIG9y
aWdpbiwgUGFnZSogcGFnZSkKK1Bhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IFN0b3JhZ2VBcmVhOjpj
b3B5KFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
dG9yYWdlQXJlYShvcmlnaW4sIHBhZ2UsIDApKTsKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlQXJlYShvcmlnaW4sIHRoaXMpKTsKIH0K
IAotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gU3RvcmFnZUFyZWE6OmNvcHkoU2VjdXJpdHlPcmln
aW4qIG9yaWdpbiwgUGFnZSogcGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0b3Jh
Z2VBcmVhKG9yaWdpbiwgcGFnZSwgdGhpcykpOwotfQotCi1TdG9yYWdlQXJlYTo6U3RvcmFnZUFy
ZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFnZSogcGFnZSwgU3RvcmFnZUFyZWEqIGFyZWEp
Ci0gICAgOiBtX3NlY3VyaXR5T3JpZ2luKG9yaWdpbikKK1N0b3JhZ2VBcmVhOjpTdG9yYWdlQXJl
YShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBTdG9yYWdlQXJlYSogYXJlYSkKKyAgICA6IG1fc3Rv
cmFnZVR5cGUoYXJlYS0+bV9zdG9yYWdlVHlwZSkKKyAgICAsIG1fc2VjdXJpdHlPcmlnaW4ob3Jp
Z2luKQogICAgICwgbV9zdG9yYWdlTWFwKGFyZWEtPm1fc3RvcmFnZU1hcCkKICAgICAsIG1fc3Rv
cmFnZUFyZWFTeW5jKDApCi0gICAgLCBtX3N0b3JhZ2VTeW5jTWFuYWdlcigwKQotICAgICwgbV9z
ZXNzaW9uU3RvcmFnZVBhZ2UocGFnZSkKKyAgICAsIG1fc3RvcmFnZVN5bmNNYW5hZ2VyKGFyZWEt
Pm1fc3RvcmFnZVN5bmNNYW5hZ2VyKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1faXNTaHV0ZG93
bihhcmVhLT5tX2lzU2h1dGRvd24pCisjZW5kaWYKIHsKICAgICBBU1NFUlQobV9zZWN1cml0eU9y
aWdpbik7Ci0gICAgQVNTRVJUKG1fc2Vzc2lvblN0b3JhZ2VQYWdlKTsKLSAgICAKLSAgICBpZiAo
IW1fc3RvcmFnZU1hcCkgewotICAgICAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVh
dGUoKTsKLSAgICAgICAgQVNTRVJUKG1fc3RvcmFnZU1hcCk7Ci0gICAgfQorICAgIEFTU0VSVCht
X3N0b3JhZ2VNYXApOworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKIH0KIAogdW5zaWduZWQg
U3RvcmFnZUFyZWE6Omxlbmd0aCgpIGNvbnN0CiB7CisgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24p
OwogICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpOwogfQogCiBTdHJpbmcgU3RvcmFn
ZUFyZWE6OmtleSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Cisg
ICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgp
OwogICAgIAogICAgIFN0cmluZyBrZXk7CkBAIC0xMTEsNiArMTExLDcgQEAgU3RyaW5nIFN0b3Jh
Z2VBcmVhOjprZXkodW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogCiBT
dHJpbmcgU3RvcmFnZUFyZWE6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiB7Cisg
ICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgp
OwogICAgIAogICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmdldEl0ZW0oa2V5KTsKQEAgLTExOCw2
ICsxMTksNyBAQCBTdHJpbmcgU3RvcmFnZUFyZWE6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkp
IGNvbnN0CiAKIHZvaWQgU3RvcmFnZUFyZWE6OnNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogZnJhbWUpCiB7Cisg
ICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIEFTU0VSVCghdmFsdWUuaXNOdWxsKCkpOwog
ICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwogICAgIApAQCAtMTQ5LDYgKzE1MSw3IEBA
IHZvaWQgU3RvcmFnZUFyZWE6OnNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmCiAKIHZvaWQgU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0o
Y29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBmcmFtZSkKIHsKKyAgICBBU1NFUlQoIW1faXNTaHV0
ZG93bik7CiAgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiAgICAgCiAgICAgaWYgKGZy
YW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKQEAgLTE2
OSw2ICsxNzIsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhOjpyZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYg
a2V5LCBGcmFtZSogZnJhbWUpCiAKIHZvaWQgU3RvcmFnZUFyZWE6OmNsZWFyKEZyYW1lKiBmcmFt
ZSkKIHsKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiAgICAgYmxvY2tVbnRpbEltcG9ydENv
bXBsZXRlKCk7CiAgICAgCiAgICAgaWYgKGZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZh
dGVCcm93c2luZ0VuYWJsZWQoKSkKQEAgLTE4Myw2ICsxODcsNyBAQCB2b2lkIFN0b3JhZ2VBcmVh
OjpjbGVhcihGcmFtZSogZnJhbWUpCiAKIGJvb2wgU3RvcmFnZUFyZWE6OmNvbnRhaW5zKGNvbnN0
IFN0cmluZyYga2V5KSBjb25zdAogeworICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAgICBi
bG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKICAgICAKICAgICByZXR1cm4gbV9zdG9yYWdlTWFw
LT5jb250YWlucyhrZXkpOwpAQCAtMTkwLDE5ICsxOTUsMjQgQEAgYm9vbCBTdG9yYWdlQXJlYTo6
Y29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CiAKIHZvaWQgU3RvcmFnZUFyZWE6Omlt
cG9ydEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CisgICAg
QVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIG1fc3RvcmFnZU1hcC0+aW1wb3J0SXRlbShrZXks
IHZhbHVlKTsKIH0KIAotdm9pZCBTdG9yYWdlQXJlYTo6c2NoZWR1bGVGaW5hbFN5bmMoKQordm9p
ZCBTdG9yYWdlQXJlYTo6YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QKIHsKICAgICBp
ZiAobV9zdG9yYWdlQXJlYVN5bmMpCi0gICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVs
ZUZpbmFsU3luYygpOworICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+YmxvY2tVbnRpbEltcG9y
dENvbXBsZXRlKCk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWE6OmJsb2NrVW50aWxJbXBvcnRDb21w
bGV0ZSgpIGNvbnN0Cit2b2lkIFN0b3JhZ2VBcmVhOjpjbG9zZSgpCiB7CiAgICAgaWYgKG1fc3Rv
cmFnZUFyZWFTeW5jKQotICAgICAgICBtX3N0b3JhZ2VBcmVhU3luYy0+YmxvY2tVbnRpbEltcG9y
dENvbXBsZXRlKCk7CisgICAgICAgIG1fc3RvcmFnZUFyZWFTeW5jLT5zY2hlZHVsZUZpbmFsU3lu
YygpOworICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICBtX2lzU2h1dGRvd24gPSB0cnVlOworI2Vu
ZGlmCiB9CiAKIHZvaWQgU3RvcmFnZUFyZWE6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVl
LCBGcmFtZSogc291cmNlRnJhbWUpCkBAIC0yMTEsMTggKzIyMSwxOCBAQCB2b2lkIFN0b3JhZ2VB
cmVhOjpkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiBvbGRWYWx1ZQogICAgIC8vIG9mIGFueSBnaXZlbiBwYWdlIGluIHRoZSBncm91cCBvciBtdXRh
dGUgdGhlIHBhZ2UgZ3JvdXAgaXRzZWxmLgogICAgIFZlY3RvcjxSZWZQdHI8RnJhbWU+ID4gZnJh
bWVzOwogICAgIAotICAgIGlmIChtX3Nlc3Npb25TdG9yYWdlUGFnZSkgeworICAgIC8vIEZJWE1F
OiBXaGVuIGNhbiB0aGlzIG9jY3VyPworICAgIFBhZ2UqIHBhZ2UgPSBzb3VyY2VGcmFtZS0+cGFn
ZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChtX3N0
b3JhZ2VUeXBlID09IFNlc3Npb25TdG9yYWdlKSB7CiAgICAgICAgIC8vIFNlbmQgZXZlbnRzIG9u
bHkgdG8gb3VyIHBhZ2UuCi0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9zZXNzaW9uU3Rv
cmFnZVBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2
ZXJzZU5leHQoKSkgeworICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHBhZ2UtPm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewogICAg
ICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChz
ZWN1cml0eU9yaWdpbigpKSkKICAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsK
ICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXaGVuIGNhbiB0aGlz
IG9jY3VyPwotICAgICAgICBQYWdlKiBwYWdlID0gc291cmNlRnJhbWUtPnBhZ2UoKTsKLSAgICAg
ICAgaWYgKCFwYWdlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKICAgICAgICAgLy8g
U2VuZCBldmVudHMgdG8gZXZlcnkgcGFnZS4KICAgICAgICAgY29uc3QgSGFzaFNldDxQYWdlKj4m
IHBhZ2VzID0gcGFnZS0+Z3JvdXAoKS5wYWdlcygpOwogICAgICAgICBIYXNoU2V0PFBhZ2UqPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFnZXMuZW5kKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUFyZWEuaCBiL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCmluZGV4
IDJmMTdlODMuLjU0M2U3ZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJl
YS5oCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCkBAIC00NiwxMiArNDYsMTIg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFN0b3JhZ2VNYXA7CiAgICAgY2xhc3Mg
U3RvcmFnZVN5bmNNYW5hZ2VyOwogICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisgICAg
ZW51bSBTdG9yYWdlVHlwZSB7IExvY2FsU3RvcmFnZSwgU2Vzc2lvblN0b3JhZ2UgfTsKIAogICAg
IGNsYXNzIFN0b3JhZ2VBcmVhIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U3RvcmFnZUFyZWE+
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBj
cmVhdGVMb2NhbFN0b3JhZ2UoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9y
YWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U3RvcmFnZUFyZWE+IGNyZWF0ZVNlc3Npb25TdG9yYWdlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4s
IFBhZ2UqIHBhZ2UpOwotICAgICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBjb3B5KFNlY3Vy
aXR5T3JpZ2luKiwgUGFnZSopOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlQXJl
YT4gY3JlYXRlKFN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiosIFBhc3NSZWZQdHI8U3RvcmFn
ZVN5bmNNYW5hZ2VyPik7CisgICAgICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IGNvcHkoU2Vj
dXJpdHlPcmlnaW4qKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoZSBIVE1MNSBET00gU3RvcmFn
ZSBBUEkKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CkBAIC02MiwyOCArNjIsMzEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGNsZWFyKEZyYW1lKiBzb3VyY2VG
cmFtZSk7CiAKICAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgc2NoZWR1bGVGaW5hbFN5bmMoKTsKKyAgICAgICAgdm9pZCBjbG9zZSgp
OwogCiAgICAgICAgIC8vIENvdWxkIGJlIGNhbGxlZCBmcm9tIGEgYmFja2dyb3VuZCB0aHJlYWQu
CiAgICAgICAgIHZvaWQgaW1wb3J0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSk7CiAgICAgICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIHsgcmV0
dXJuIG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCk7IH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAg
U3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdl
cj4pOwotICAgICAgICBTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFBhZ2UqKTsKLSAgICAg
ICAgU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBQYWdlKiwgU3RvcmFnZUFyZWEqKTsKKyAg
ICAgICAgU3RvcmFnZUFyZWEoU3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiwgUGFzc1JlZlB0
cjxTdG9yYWdlU3luY01hbmFnZXI+KTsKKyAgICAgICAgU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmln
aW4qLCBTdG9yYWdlQXJlYSopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBibG9ja1Vu
dGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIHZvaWQgZGlzcGF0
Y2hTdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUs
IGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7CiAgICAgICAgIAor
ICAgICAgICBTdG9yYWdlVHlwZSBtX3N0b3JhZ2VUeXBlOwogICAgICAgICBSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IG1fc2VjdXJpdHlPcmlnaW47CiAgICAgICAgIFJlZlB0cjxTdG9yYWdlTWFwPiBt
X3N0b3JhZ2VNYXA7CiAgICAgICAgIAogICAgICAgICBSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBt
X3N0b3JhZ2VBcmVhU3luYzsKICAgICAgICAgUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gbV9z
dG9yYWdlU3luY01hbmFnZXI7Ci0gICAgICAgIFBhZ2UqIG1fc2Vzc2lvblN0b3JhZ2VQYWdlOyAg
Ly8gTlVMTCBpZmYgaXQncyBMb2NhbFN0b3JhZ2UKKyAgICAgICAgCisjaWZuZGVmIE5ERUJVRwor
ICAgICAgICBib29sIG1faXNTaHV0ZG93bjsKKyNlbmRpZgogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMu
Y3BwIGIvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKaW5kZXggZTJmZmQ5ZC4u
ZThiZWFmMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAK
KysrIGIvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAKQEAgLTc0LDYgKzc0LDkg
QEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnNjaGVkdWxlRmluYWxTeW5jKCkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIAorICAgIC8vIEZJWE1FOiBBdm9pZCByYWNlcyB3aXRo
b3V0IGhhdmluZyB0byBibG9jayBvbiB0aGUgaW1wb3J0IGhlcmUuCisgICAgYmxvY2tVbnRpbElt
cG9ydENvbXBsZXRlKCk7CisgICAgCiAgICAgaWYgKG1fc3luY1RpbWVyLmlzQWN0aXZlKCkpCiAg
ICAgICAgIG1fc3luY1RpbWVyLnN0b3AoKTsKICAgICBlbHNlIHsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
TmFtZXNwYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2VlZjAw
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VOYW1lc3BhY2UuY3Bw
CkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdG9yYWdlTmFtZXNwYWNl
LmgiCisKKy8vIEZJWE1FOiBEbyB3ZSBuZWVkIGFsbCBvZiB0aGVzZQorI2luY2x1ZGUgIkNTdHJp
bmcuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgor
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiUGFn
ZS5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCisj
aW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0
b3JhZ2VOYW1lc3BhY2UqPiBMb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXA7CisKK3N0YXRpYyBMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2VNYXAmIGxvY2FsU3RvcmFnZU5hbWVzcGFjZU1hcCgpCit7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXAsIGxvY2FsU3RvcmFn
ZU5hbWVzcGFjZU1hcCwgKCkpOworICAgIHJldHVybiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXA7
Cit9CisKK1Bhc3NSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZTo6bG9j
YWxTdG9yYWdlTmFtZXNwYWNlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBjb25zdCBTdHJp
bmcgbG9va3VwUGF0aCA9IHBhdGguaXNOdWxsKCkgPyBTdHJpbmcoIiIpIDogcGF0aDsKKyAgICBM
b2NhbFN0b3JhZ2VOYW1lc3BhY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbG9jYWxTdG9yYWdlTmFtZXNw
YWNlTWFwKCkuZmluZChsb29rdXBQYXRoKTsKKyAgICBpZiAoaXQgPT0gbG9jYWxTdG9yYWdlTmFt
ZXNwYWNlTWFwKCkuZW5kKCkpIHsKKyAgICAgICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IHN0
b3JhZ2VOYW1lc3BhY2UgPSBhZG9wdFJlZihuZXcgU3RvcmFnZU5hbWVzcGFjZShMb2NhbFN0b3Jh
Z2UsIGxvb2t1cFBhdGgpKTsKKyAgICAgICAgbG9jYWxTdG9yYWdlTmFtZXNwYWNlTWFwKCkuc2V0
KGxvb2t1cFBhdGgsIHN0b3JhZ2VOYW1lc3BhY2UuZ2V0KCkpOworICAgICAgICByZXR1cm4gc3Rv
cmFnZU5hbWVzcGFjZS5yZWxlYXNlKCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBpdC0+c2Vj
b25kOworfQorCitQYXNzUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IFN0b3JhZ2VOYW1lc3BhY2U6
OnNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0
b3JhZ2VOYW1lc3BhY2UoU2Vzc2lvblN0b3JhZ2UsIFN0cmluZygpKSk7Cit9CisKK1N0b3JhZ2VO
YW1lc3BhY2U6OlN0b3JhZ2VOYW1lc3BhY2UoU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUsIGNvbnN0
IFN0cmluZyYgcGF0aCkKKyAgICA6IG1fc3RvcmFnZVR5cGUoc3RvcmFnZVR5cGUpCisgICAgLCBt
X3BhdGgocGF0aC5jb3B5KCkpICAvLyBGSVhNRTogSXMgdGhlIC5jb3B5IG5lY2Vzc2FyeT8KKyAg
ICAsIG1fc3luY01hbmFnZXIoMCkKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2lzU2h1dGRvd24o
ZmFsc2UpCisjZW5kaWYKK3sKKyAgICBpZiAobV9zdG9yYWdlVHlwZSA9PSBMb2NhbFN0b3JhZ2Ug
JiYgIW1fcGF0aC5pc0VtcHR5KCkpCisgICAgICAgIG1fc3luY01hbmFnZXIgPSBTdG9yYWdlU3lu
Y01hbmFnZXI6OmNyZWF0ZShtX3BhdGgpOworfQorCitTdG9yYWdlTmFtZXNwYWNlOjp+U3RvcmFn
ZU5hbWVzcGFjZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAKKyAgICBp
ZiAobV9zdG9yYWdlVHlwZSA9PSBMb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAgQVNTRVJUKGxvY2Fs
U3RvcmFnZU5hbWVzcGFjZU1hcCgpLmdldChtX3BhdGgpID09IHRoaXMpOworICAgICAgICBsb2Nh
bFN0b3JhZ2VOYW1lc3BhY2VNYXAoKS5yZW1vdmUobV9wYXRoKTsKKyAgICB9Cit9CisKK1Bhc3NS
ZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gU3RvcmFnZU5hbWVzcGFjZTo6Y29weSgpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CisKKyAg
ICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gbmV3TmFtZXNwYWNlID0gYWRvcHRSZWYobmV3IFN0
b3JhZ2VOYW1lc3BhY2UobV9zdG9yYWdlVHlwZSwgbV9wYXRoKSk7CisKKyAgICBTdG9yYWdlQXJl
YU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKKyAgICBmb3IgKFN0
b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpICE9
IGVuZDsgKytpKSB7CisgICAgICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gYXJlYUNvcHkgPSBpLT5z
ZWNvbmQtPmNvcHkoaS0+Zmlyc3QuZ2V0KCkpOworICAgICAgICBuZXdOYW1lc3BhY2UtPm1fc3Rv
cmFnZUFyZWFNYXAuc2V0KGktPmZpcnN0LCBhcmVhQ29weS5yZWxlYXNlKCkpOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gbmV3TmFtZXNwYWNlLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxT
dG9yYWdlQXJlYT4gU3RvcmFnZU5hbWVzcGFjZTo6c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9p
c1NodXRkb3duKTsKKworICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWE7CisgICAg
aWYgKHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYU1hcC5nZXQob3JpZ2luKSkKKyAgICAgICAg
cmV0dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKKyAgICAKKyAgICBzdG9yYWdlQXJlYSA9IFN0
b3JhZ2VBcmVhOjpjcmVhdGUobV9zdG9yYWdlVHlwZSwgb3JpZ2luLCBtX3N5bmNNYW5hZ2VyKTsK
KyAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVhKTsKKyAgICByZXR1
cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOworfQorCit2b2lkIFN0b3JhZ2VOYW1lc3BhY2U6OmNs
b3NlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9pc1No
dXRkb3duKTsKKworICAgIFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VB
cmVhTWFwLmVuZCgpOworICAgIGZvciAoU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9z
dG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNv
bmQtPmNsb3NlKCk7CisgICAgICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICBtX2lzU2h1dGRvd24g
PSB0cnVlOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTmFtZXNwYWNlLmggYi9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZU5hbWVzcGFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZThm
ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZU5hbWVzcGFjZS5o
CkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBTdG9yYWdlTmFtZXNwYWNlX2gKKyNkZWZpbmUgU3RvcmFnZU5hbWVz
cGFjZV9oCisKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKKyNpbmNsdWRlICJTdG9y
YWdlQXJlYS5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBTdG9yYWdlQXJl
YTsKKyAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI7CisKKyAgICBjbGFzcyBTdG9yYWdlTmFt
ZXNwYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8U3RvcmFnZU5hbWVzcGFjZT4geworICAgIHB1Ymxp
YzoKKyAgICAgICAgflN0b3JhZ2VOYW1lc3BhY2UoKTsKKworICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSgpOworICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBsb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UoY29uc3QgU3RyaW5nJiBwYXRoKTsKKworICAgICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVh
PiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiopOworICAgICAgICBQYXNzUmVmUHRyPFN0b3Jh
Z2VOYW1lc3BhY2U+IGNvcHkoKTsKKyAgICAgICAgdm9pZCBjbG9zZSgpOworCisgICAgcHJpdmF0
ZToKKyAgICAgICAgU3RvcmFnZU5hbWVzcGFjZShTdG9yYWdlVHlwZSwgY29uc3QgU3RyaW5nJiBw
YXRoKTsKKworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwg
UmVmUHRyPFN0b3JhZ2VBcmVhPiwgU2VjdXJpdHlPcmlnaW5IYXNoPiBTdG9yYWdlQXJlYU1hcDsK
KyAgICAgICAgU3RvcmFnZUFyZWFNYXAgbV9zdG9yYWdlQXJlYU1hcDsKKworICAgICAgICBTdG9y
YWdlVHlwZSBtX3N0b3JhZ2VUeXBlOworICAgICAgICAgICAgICAgIAorICAgICAgICAvLyBPbmx5
IHVzZWQgaWZmIG1fc3RvcmFnZVR5cGUgPT0gTG9jYWxTdG9yYWdlIGFuZCB3ZSdyZSBwZXJzaXN0
ZW50LgorICAgICAgICBTdHJpbmcgbV9wYXRoOworICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNN
YW5hZ2VyPiBtX3N5bmNNYW5hZ2VyOworICAgICAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgICAg
IGJvb2wgbV9pc1NodXRkb3duOworI2VuZGlmCisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gU3RvcmFnZU5hbWVzcGFjZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31389</attachid>
            <date>2009-06-16 15:56:30 -0700</date>
            <delta_ts>2009-06-16 17:44:03 -0700</delta_ts>
            <desc>patch 1 - v3</desc>
            <filename>1.20090616.patch</filename>
            <type>text/plain</type>
            <size>40501</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDc0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjIgQEAKKzIwMDktMDYtMTYgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rmlyc3Qgc3RlcCBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUz
NzYKKworICAgICAgICBBZGQgU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcC9oCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorCisgICAgICAgIElu
IHByZXBhcmF0aW9uIGZvciBjb21iaW5pbmcgU2Vzc2lvblN0b3JhZ2UgYW5kIExvY2FsU3RvcmFn
ZSBpbnRvIGEKKyAgICAgICAgc2luZ2xlIFN0b3JhZ2VNYW5hZ2VyLCBtb3ZlIHRoZSBzeW5jaW5n
IGJpdHMgb3V0IG9mIExvY2FsU3RvcmFnZSBhbmQKKyAgICAgICAgaW50byBpdHMgb3duIGNsYXNz
LgorCisgICAgICAgIFRoZSBuZXh0IHN0ZXAgaXMgdG8gY29tYmluZSBMb2NhbFN0b3JhZ2VBcmVh
IGFuZCBTZXNzaW9uU3RvcmFnZUFyZWEKKyAgICAgICAgaW50byBvbmUuICBUaGVuIFNlc3Npb25T
dG9yYWdlIGFuZCBMb2NhbFN0b3JhZ2UgY2FuIGJlIGNvbWJpbmVkLgorCisgICAgICAgIE5vdGUg
dGhhdCBjb21iaW5pbmcgdGhlbSB3aWxsIGN1dCBkb3duIG9uIGNvZGUgcGF0aHMgdGhhdCBtdXN0
IGJlCisgICAgICAgIHByb3hpZWQsIGVsaW1pbmF0ZSB2aXJ0dWFsIGRpc3BhdGNoLCBhbmQgYWxs
b3cgQ2hyb21pdW0gdG8gKGV2ZW50dWFsbHkpCisgICAgICAgIHdyaXRlIGhpc3RvcmljYWwgc2Vz
c2lvblN0b3JhZ2UgdG8gZGlzayB3aGVuIG1lbW9yeSBpcyBnZXR0aW5nIHRpZ2h0LgorCisgICAg
ICAgIEFsc28gcmVtb3ZlIGEgY291cGxlIGJpdHMgb2YgY3J1ZnQgaW5jbHVkaW5nIGNvZGUgZm9y
IHF1b3RhcyB3aGljaCBpcworICAgICAgICB1bm5lY2Vzc2FyeSAoc2luY2UgYSBtZXRhLWRhdGEg
ZGIgaXMgdW5uZWNlc3Nhcnkgc2luY2UgeW91IGNhbiBqdXN0CisgICAgICAgIGNvdW50IGJ5dGVz
IGFzIHlvdSByZWFkIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlcyBpbnRvIG1lbW9yeSkuCisK
KyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
b2NhbFN0b3JhZ2U6OkxvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3Jh
Z2U6OnN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZTo6Y2xvc2Up
OgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlLmg6CisgICAgICAgICogc3RvcmFnZS9M
b2NhbFN0b3JhZ2VBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZUFyZWE6
OkxvY2FsU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6
c2NoZWR1bGVGaW5hbFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6
c3luY1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6cGVy
Zm9ybUltcG9ydCk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmg6CisgICAg
ICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VBcmVhOjpjcmVhdGUpOgorICAgICAgICAqIHN0b3Jh
Z2UvTG9jYWxTdG9yYWdlVGFzay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VU
YXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmg6
CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjopOgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlSW1wb3J0KToKKyAgICAgICAgKiBzdG9yYWdlL0xv
Y2FsU3RvcmFnZVRocmVhZC5jcHA6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJl
YWQuaDoKKyAgICAgICAgKiBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmg6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6U3RvcmFnZVN5
bmNNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6ZnVsbERh
dGFiYXNlRmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVN5bmNNYW5hZ2VyOjpj
bG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlU3luY01hbmFnZXI6OnNjaGVkdWxlSW1w
b3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6c2NoZWR1bGVTeW5j
KToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmguCisgICAgICAgIChXZWJDb3JlOjopOgorCiAy
MDA5LTA2LTE2ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ0NzQ1KQorKysg
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjA3OSw3ICsyMDc5LDkg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmNw
cCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5oIFwKIAlXZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZU1hcC5jcHAgXAotCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmgKKwlXZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZU1hcC5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5h
Z2VyLmNwcCBcCisJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCiBlbmRpZiAj
IEVORCBFTkFCTEVfRE9NX1NUT1JBR0UKIAogIyAtLS0tCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQ0NzQ1KQor
KysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTM2NCw2ICsxMzY0LDcg
QEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RPTV9TVE9SQUdFPTEpIAogICAgICAgICBzdG9y
YWdlL1N0b3JhZ2VFdmVudC5jcHAgXAogICAgICAgICBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmNw
cCBcCiAgICAgICAgIHN0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcCBcCisgICAgICAgIHN0
b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTU3Rv
cmFnZUN1c3RvbS5jcHAKIAogICAgIElETF9CSU5ESU5HUyArPSBcCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJr
bAkocmV2aXNpb24gNDQ3NDUpCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAxNSw2ICsxMDE1LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0
IG9mIGZpbGVzIG5lZQogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCiAgICAgICAgIHN0
b3JhZ2UvU2Vzc2lvblN0b3JhZ2UuY3BwCiAgICAgICAgIHN0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VB
cmVhLmNwcAorICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKICAgICA8L3Nl
dD4KIAogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19YTUwiPgpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0NDc0NSkKKysr
IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAg
LTE1NjU5LDYgKzE1NjU5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2Vc
U3RvcmFnZVN5bmNNYW5hZ2VyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFZlcnNpb25DaGFuZ2VDYWxsYmFjay5oIg0KIAkJ
CQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA0NDc0NSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjU4LDYgKzQyNTgsOCBAQAogCQlD
MERGQzg3MDBEQjY4NDFBMDAzRUFFN0MgLyogSlNDb25zb2xlQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwREZDODZGMERCNjg0MUEwMDNF
QUU3QyAvKiBKU0NvbnNvbGVDdXN0b20uY3BwICovOyB9OwogCQlDMTA1REE2MjBGM0FBNjhGMDAx
REQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzEwNURBNjEwRjNBQTY4RjAwMURENDRGIC8qIFRl
eHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCAqLzsgfTsKIAkJQzEwNURBNjQwRjNBQTZCODAwMURE
NDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29k
aW5nRGV0ZWN0b3IuaCAqLzsgfTsKKwkJQzUxMDJEOTQwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3Jh
Z2VTeW5jTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICov
OyB9OworCQlDNTEwMkQ5NTBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTAyRDkz
MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwICovOyB9OwogCQlDNkQ3
NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFEMzA5QUEyODJF
MDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggKi87IH07CiAJCUM2RDc0QUU0
MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRTMwOUFBMjkwQTAw
MEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi87IH07CiAJCUQwNUNFRDI5
MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4
IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi87IH07CkBAIC05MDU3LDYgKzkwNTksOCBAQAog
CQlDMERGQzg2RjBEQjY4NDFBMDAzRUFFN0MgLyogSlNDb25zb2xlQ3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ29uc29sZUN1c3RvbS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMxMDVEQTYxMEYzQUE2OEYwMDFERDQ0RiAvKiBUZXh0
RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUMxMDVEQTYzMEYzQUE2QjgwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3Rvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0RW5jb2RpbmdEZXRlY3Rvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTEwMkQ5MjBGRDlBQTJEMDBGQUZGMDQg
LyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0b3JhZ2VTeW5jTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTEw
MkQ5MzBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VTeW5jTWFuYWdlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2Rp
ZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlz
dExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjcwQTQwQkIy
QzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0QmxvY2tDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTk2NDYsNiArOTY1MCw4IEBACiAJCQkJNTFFMEJBQkQwREE1NTQ4NDAw
QTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5pZGwgKi8sCiAJCQkJNTFFMEJCMzcwREE1QUNCNjAwQTlF
NDE3IC8qIFN0b3JhZ2VNYXAuY3BwICovLAogCQkJCTUxRTBCQjM2MERBNUFDQjYwMEE5RTQxNyAv
KiBTdG9yYWdlTWFwLmggKi8sCisJCQkJQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3Jh
Z2VTeW5jTWFuYWdlci5oICovLAorCQkJCUM1MTAyRDkzMEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9y
YWdlU3luY01hbmFnZXIuY3BwICovLAogCQkJKTsKIAkJCWluZGVudFdpZHRoID0gNDsKIAkJCXBh
dGggPSBzdG9yYWdlOwpAQCAtMTY3OTUsNiArMTY4MDEsNyBAQAogCQkJCTA4MUVCRjNCMEZEMzRG
NDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxOEY4
MzFCODBGRDQ4Qzc4MDBEOEM1NkIgLyogV29ya2VyTG9hZGVyUHJveHkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4OUNDQzUzMEY0NEU5ODEwMEI1REExMCAvKiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29t
bWFuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzUxMDJEOTQwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0
b3JhZ2VTeW5jTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVBNzY4MDQwRkU3MTI2NDAw
QUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0xODc4OSw2
ICsxODc5Niw3IEBACiAJCQkJODQ1RTcyRkIwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwODFFQkYzQTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmls
dGVyQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODlDQ0M1MjBGNDRFOTgxMDBCNURB
MTAgLyogUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QzUxMDJEOTUwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCShyZXZpc2lvbiA0NDc0NSkK
KysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgog
I2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgi
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC02NCwxNSArNjUsMTAgQEAgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IExvY2FsU3RvcmFnZTo6
bAogCiBMb2NhbFN0b3JhZ2U6OkxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAg
OiBtX3BhdGgocGF0aC5jb3B5KCkpCisgICAgLCBtX3N5bmNNYW5hZ2VyKDApCiB7Ci0gICAgLy8g
SWYgdGhlIHBhdGggaXMgZW1wdHksIHdlIGtub3cgd2UncmUgbmV2ZXIgZ29pbmcgdG8gYmUgdXNp
bmcgdGhlIHRocmVhZCBmb3IgYW55dGhpbmcsIHNvIGRvbid0IHN0YXJ0IGl0LgotICAgIC8vIElu
IHRoZSBmdXR1cmUsIHdlIG1pZ2h0IGFsc28gd2FudCB0byBjb25zaWRlciByZW1vdmluZyBpdCBm
cm9tIHRoZSBET00gaW4gdGhhdCBjYXNlIC0gPHJkYXI6Ly9wcm9ibGVtLzU5NjA0NzA+Ci0gICAg
aWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3RocmVhZCA9IExv
Y2FsU3RvcmFnZVRocmVhZDo6Y3JlYXRlKCk7Ci0gICAgbV90aHJlYWQtPnN0YXJ0KCk7Ci0gICAg
bV90aHJlYWQtPnNjaGVkdWxlSW1wb3J0KHRoaXMpOworICAgIGlmICghbV9wYXRoLmlzRW1wdHko
KSkKKyAgICAgICAgbV9zeW5jTWFuYWdlciA9IFN0b3JhZ2VTeW5jTWFuYWdlcjo6Y3JlYXRlKG1f
cGF0aCk7CiB9CiAKIExvY2FsU3RvcmFnZTo6fkxvY2FsU3RvcmFnZSgpCkBAIC05Miw1NCArODgs
MTggQEAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gTG9jYWxTdG9yYWdlOjpzdAogICAgIC8vIFRv
IGtub3cgaWYgYW4gYXJlYSBoYXMgcHJldmlvdXNseSBiZWVuIGVzdGFibGlzaGVkLCB3ZSBuZWVk
IHRvIHdhaXQgdW50aWwgdGhpcyBMb2NhbFN0b3JhZ2UgCiAgICAgLy8gb2JqZWN0IGhhcyBmaW5p
c2hlZCBpdCdzIEFyZWFJbXBvcnQgdGFzay4KIAotCiAgICAgLy8gRklYTUU6IElmIHRoZSBzdG9y
YWdlIGFyZWEgaXMgYmVpbmcgZXN0YWJsaXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGhlcmUsIHdl
IG5lZWQgdG8gCiAgICAgLy8gc3luYyBpdHMgZXhpc3RhbmNlIGFuZCBxdW90YSBvdXQgdG8gZGlz
ayB2aWEgYW4gdGFzayBvZiB0eXBlIEFyZWFTeW5jCiAKICAgICBSZWZQdHI8TG9jYWxTdG9yYWdl
QXJlYT4gc3RvcmFnZUFyZWE7CiAgICAgaWYgKHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYU1h
cC5nZXQob3JpZ2luKSkKICAgICAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKLSAg
ICAgICAgCi0gICAgc3RvcmFnZUFyZWEgPSBMb2NhbFN0b3JhZ2VBcmVhOjpjcmVhdGUob3JpZ2lu
LCB0aGlzKTsKKyAgICAKKyAgICBzdG9yYWdlQXJlYSA9IExvY2FsU3RvcmFnZUFyZWE6OmNyZWF0
ZShvcmlnaW4sIG1fc3luY01hbmFnZXIpOwogICAgIG1fc3RvcmFnZUFyZWFNYXAuc2V0KG9yaWdp
biwgc3RvcmFnZUFyZWEpOwogICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7CiB9CiAK
LVN0cmluZyBMb2NhbFN0b3JhZ2U6OmZ1bGxEYXRhYmFzZUZpbGVuYW1lKFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4pCi17Ci0gICAgLy8gRklYTUU6IE9uY2Ugd2UgYWN0dWFsbHkgdHJhY2sgb3JpZ2lu
L3F1b3RhIGVudHJpZXMgdG8gc2VlIHdoaWNoIG9yaWdpbnMgaGF2ZSBsb2NhbCBzdG9yYWdlIGVz
dGFibGlzaGVkLAotICAgIC8vIHdlIHdpbGwgcmV0dXJuIGFuIGVtcHR5IHBhdGggbmFtZSBpZiB0
aGUgb3JpZ2luIGlzbid0IGFsbG93ZWQgdG8gaGF2ZSBMb2NhbFN0b3JhZ2UuCi0gICAgLy8gV2Un
bGwgbmVlZCB0byB3YWl0IGhlcmUgdW50aWwgdGhlIEFyZWFJbXBvcnQgdGFzayB0byBjb21wbGV0
ZSBiZWZvcmUgbWFraW5nIHRoYXQgZGVjaXNpb24uCi0KLSAgICBpZiAobV9wYXRoLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgQVNTRVJUKG9yaWdpbik7Ci0gICAg
aWYgKCFvcmlnaW4pCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmICghbWFrZUFs
bERpcmVjdG9yaWVzKG1fcGF0aCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGVkIHRvIGNy
ZWF0ZSBMb2NhbFN0b3JhZ2UgZGF0YWJhc2UgcGF0aCAlcyIsIG1fcGF0aC51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIH0KLQotICAgIHJldHVybiBwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQobV9wYXRoLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsg
Ii5sb2NhbHN0b3JhZ2UiKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2U6OnBlcmZvcm1JbXBvcnQo
KQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gRklYTUU6IEltcG9y
dCBhbGwga25vd24gbG9jYWwgc3RvcmFnZSBvcmlnaW5zIGhlcmUgYWxvbmcgd2l0aCB0aGVpciBx
dW90YXMKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2U6OnBlcmZvcm1TeW5jKCkKLXsKLSAgICBBU1NF
UlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIEZJWE1FOiBXcml0ZSBvdXQgbmV3IG9yaWdp
bnMgYW5kIHF1b3RhcyBoZXJlCi19Ci0KIHZvaWQgTG9jYWxTdG9yYWdlOjpjbG9zZSgpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTE0NywyOCArMTA3LDggQEAgdm9pZCBMb2Nh
bFN0b3JhZ2U6OmNsb3NlKCkKICAgICBMb2NhbFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQg
PSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwogICAgIGZvciAoTG9jYWxTdG9yYWdlQXJlYU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
ICAgICAgICAgaXQtPnNlY29uZC0+c2NoZWR1bGVGaW5hbFN5bmMoKTsKLQotICAgIGlmIChtX3Ro
cmVhZCkgewotICAgICAgICBtX3RocmVhZC0+dGVybWluYXRlKCk7Ci0gICAgICAgIG1fdGhyZWFk
ID0gMDsKLSAgICB9Ci19Ci0KLWJvb2wgTG9jYWxTdG9yYWdlOjpzY2hlZHVsZUltcG9ydChQYXNz
UmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLQotICAgIGlmIChtX3RocmVhZCkKLSAgICAgICAgbV90aHJlYWQtPnNjaGVkdWxlSW1w
b3J0KGFyZWEpOwotCi0gICAgcmV0dXJuIG1fdGhyZWFkOwotfQotCi12b2lkIExvY2FsU3RvcmFn
ZTo6c2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkKLXsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX3RocmVhZCkKLSAgICAgICAgbV90
aHJlYWQtPnNjaGVkdWxlU3luYyhhcmVhKTsKKyAgICAKKyAgICBtX3N5bmNNYW5hZ2VyID0gMDsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0xvY2Fs
U3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuaAko
cmV2aXNpb24gNDQ3NDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDIwICsyOSwxNyBAQAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAog
I2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEuaCIKLSNpbmNsdWRlICJMb2NhbFN0b3JhZ2VUYXNr
LmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW5IYXNoLmgiCiAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFBhZ2VHcm91cDsK
ICAgICBjbGFzcyBTdG9yYWdlQXJlYTsKKyAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI7CiAK
LSAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxMb2NhbFN0
b3JhZ2U+IHsKKyAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMb2Nh
bFN0b3JhZ2U+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIH5Mb2NhbFN0b3JhZ2UoKTsKIApAQCAt
NTAsOSArNDcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgUGFzc1JlZlB0cjxT
dG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qKTsKIAotICAgICAgICBib29s
IHNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4pOwotICAgICAgICB2
b2lkIHNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKLQogICAgICAg
ICB2b2lkIGNsb3NlKCk7CiAKICAgICBwcml2YXRlOgpAQCAtNjEsMjEgKzU1LDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiwgUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+IExvY2Fs
U3RvcmFnZUFyZWFNYXA7CiAgICAgICAgIExvY2FsU3RvcmFnZUFyZWFNYXAgbV9zdG9yYWdlQXJl
YU1hcDsKIAotICAgICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPiBtX3RocmVhZDsKLQot
ICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgc3ViamVjdCB0byB0aHJlYWQgc3luY2hy
b25pemF0aW9uIGlzc3VlcwotICAgIHB1YmxpYzoKLSAgICAgICAgLy8gVG8gYmUgY2FsbGVkIGZy
b20gdGhlIGJhY2tncm91bmQgdGhyZWFkOgotICAgICAgICBTdHJpbmcgZnVsbERhdGFiYXNlRmls
ZW5hbWUoU2VjdXJpdHlPcmlnaW4qKTsKLQotICAgICAgICB2b2lkIHBlcmZvcm1JbXBvcnQoKTsK
LSAgICAgICAgdm9pZCBwZXJmb3JtU3luYygpOwotCi0gICAgcHJpdmF0ZToKICAgICAgICAgU3Ry
aW5nIG1fcGF0aDsKLQotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiwgdW5zaWduZWQgbG9uZyBsb25nLCBTZWN1cml0eU9yaWdpbkhhc2g+IFNlY3VyaXR5T3Jp
Z2luUXVvdGVNYXA7Ci0gICAgICAgIFNlY3VyaXR5T3JpZ2luUXVvdGVNYXAgbV9zZWN1cml0eU9y
aWdpblF1b3RlTWFwOworICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N5bmNN
YW5hZ2VyOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
c3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3Jh
Z2UvTG9jYWxTdG9yYWdlQXJlYS5jcHAJKHJldmlzaW9uIDQ0NzQ1KQorKysgV2ViQ29yZS9zdG9y
YWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxOSArNDYsMTcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gSW5zdGVhZCwgcXVldWUgdXAgYSBiYXRjaCBvZiBp
dGVtcyB0byBzeW5jIGFuZCBhY3R1YWxseSBkbyB0aGUgc3luYyBhdCB0aGUgZm9sbG93aW5nIGlu
dGVydmFsLgogc3RhdGljIGNvbnN0IGRvdWJsZSBMb2NhbFN0b3JhZ2VTeW5jSW50ZXJ2YWwgPSAx
LjA7CiAKLUxvY2FsU3RvcmFnZUFyZWE6OkxvY2FsU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiwgTG9jYWxTdG9yYWdlKiBsb2NhbFN0b3JhZ2UpCitMb2NhbFN0b3JhZ2VBcmVhOjpM
b2NhbFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFn
ZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKICAgICA6IFN0b3JhZ2VBcmVhKG9yaWdpbikKICAg
ICAsIG1fc3luY1RpbWVyKHRoaXMsICZMb2NhbFN0b3JhZ2VBcmVhOjpzeW5jVGltZXJGaXJlZCkK
ICAgICAsIG1faXRlbXNDbGVhcmVkKGZhbHNlKQogICAgICwgbV9maW5hbFN5bmNTY2hlZHVsZWQo
ZmFsc2UpCi0gICAgLCBtX2xvY2FsU3RvcmFnZShsb2NhbFN0b3JhZ2UpCisgICAgLCBtX3N5bmNN
YW5hZ2VyKHN5bmNNYW5hZ2VyKQogICAgICwgbV9jbGVhckl0ZW1zV2hpbGVTeW5jaW5nKGZhbHNl
KQogICAgICwgbV9zeW5jU2NoZWR1bGVkKGZhbHNlKQogICAgICwgbV9pbXBvcnRDb21wbGV0ZShm
YWxzZSkKIHsKLSAgICBBU1NFUlQobV9sb2NhbFN0b3JhZ2UpOwotICAgIAotICAgIGlmICghbV9s
b2NhbFN0b3JhZ2UtPnNjaGVkdWxlSW1wb3J0KHRoaXMpKQorICAgIGlmICghbV9zeW5jTWFuYWdl
ciB8fCAhbV9zeW5jTWFuYWdlci0+c2NoZWR1bGVJbXBvcnQodGhpcykpCiAgICAgICAgIG1faW1w
b3J0Q29tcGxldGUgPSB0cnVlOwogfQogCkBAIC02OSw2ICs2NywxMCBAQCBMb2NhbFN0b3JhZ2VB
cmVhOjp+TG9jYWxTdG9yYWdlQXJlYSgpCiAKIHZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6c2NoZWR1
bGVGaW5hbFN5bmMoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFt
X3N5bmNNYW5hZ2VyKQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgaWYgKG1fc3luY1RpbWVy
LmlzQWN0aXZlKCkpCiAgICAgICAgIG1fc3luY1RpbWVyLnN0b3AoKTsKICAgICBlbHNlIHsKQEAg
LTI2OSw2ICsyNzEsOCBAQCB2b2lkIExvY2FsU3RvcmFnZUFyZWE6OnNjaGVkdWxlQ2xlYXIoKQog
dm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpzeW5jVGltZXJGaXJlZChUaW1lcjxMb2NhbFN0b3JhZ2VB
cmVhPiopCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fc3luY01h
bmFnZXIpCisgICAgICAgIHJldHVybjsKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpp
dGVyYXRvciBpdCA9IG1fY2hhbmdlZEl0ZW1zLmJlZ2luKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz46Oml0ZXJhdG9yIGVuZCA9IG1fY2hhbmdlZEl0ZW1zLmVuZCgpOwpAQCAtMjkyLDcg
KzI5Niw3IEBAIHZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6c3luY1RpbWVyRmlyZWQoVGkKICAgICAg
ICAgICAgIC8vIHBlcmZvcm1TeW5jIGZ1bmN0aW9uLgogICAgICAgICAgICAgZGlzYWJsZVN1ZGRl
blRlcm1pbmF0aW9uKCk7CiAKLSAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlLT5zY2hlZHVsZVN5
bmModGhpcyk7CisgICAgICAgICAgICBtX3N5bmNNYW5hZ2VyLT5zY2hlZHVsZVN5bmModGhpcyk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMwNyw5ICszMTEsMTEgQEAgdm9pZCBMb2NhbFN0b3Jh
Z2VBcmVhOjpwZXJmb3JtSW1wb3J0KCkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
ICAgICBBU1NFUlQoIW1fZGF0YWJhc2UuaXNPcGVuKCkpOworICAgIGlmICghbV9zeW5jTWFuYWdl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX3N5
bmNNYW5hZ2VyLT5mdWxsRGF0YWJhc2VGaWxlbmFtZShzZWN1cml0eU9yaWdpbigpKTsKIAotICAg
IFN0cmluZyBkYXRhYmFzZUZpbGVuYW1lID0gbV9sb2NhbFN0b3JhZ2UtPmZ1bGxEYXRhYmFzZUZp
bGVuYW1lKHNlY3VyaXR5T3JpZ2luKCkpOwotICAgIAogICAgIGlmIChkYXRhYmFzZUZpbGVuYW1l
LmlzRW1wdHkoKSkgewogICAgICAgICBMT0dfRVJST1IoIkZpbGVuYW1lIGZvciBsb2NhbCBzdG9y
YWdlIGRhdGFiYXNlIGlzIGVtcHR5IC0gY2Fubm90IG9wZW4gZm9yIHBlcnNpc3RlbnQgc3RvcmFn
ZSIpOwogICAgICAgICBtYXJrSW1wb3J0ZWQoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFn
ZUFyZWEuaAkocmV2aXNpb24gNDQ3NDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdl
QXJlYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjQgQEAKICNpbmNsdWRlICJTUUxp
dGVEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSAiU3RyaW5n
SGFzaC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IAotICAgIGNsYXNzIExvY2FsU3RvcmFnZTsKKyAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI7
CiAgICAgCiAgICAgY2xhc3MgTG9jYWxTdG9yYWdlQXJlYSA6IHB1YmxpYyBTdG9yYWdlQXJlYSB7
CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5Mb2NhbFN0b3JhZ2VBcmVhKCk7CiAKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gY3JlYXRlKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4sIExvY2FsU3RvcmFnZSogbG9jYWxTdG9yYWdlKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgTG9jYWxTdG9yYWdlQXJlYShvcmlnaW4sIGxvY2FsU3RvcmFnZSkpOyB9CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGNyZWF0ZShTZWN1cml0eU9y
aWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2VBcmVhKG9yaWdpbiwgc3luY01hbmFn
ZXIpKTsgfQogCiAgICAgICAgIHZvaWQgc2NoZWR1bGVGaW5hbFN5bmMoKTsKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIExvY2FsU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBMb2NhbFN0b3Jh
Z2UqKTsKKyAgICAgICAgTG9jYWxTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFBhc3NSZWZQ
dHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcik7CiAKICAgICAgICAgdmlydHVhbCB2
b2lkIGl0ZW1DaGFuZ2VkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVl
LCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgaXRlbVJlbW92ZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
b2xkVmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7CkBAIC02Myw3ICs2NCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIGJvb2wgbV9maW5hbFN5bmNTY2hlZHVsZWQ7
CiAKLSAgICAgICAgTG9jYWxTdG9yYWdlKiBtX2xvY2FsU3RvcmFnZTsKKyAgICAgICAgUmVmUHRy
PFN0b3JhZ2VTeW5jTWFuYWdlcj4gbV9zeW5jTWFuYWdlcjsKIAogICAgICAgICAvLyBUaGUgZGF0
YWJhc2UgaGFuZGxlIHdpbGwgb25seSBldmVyIGJlIG9wZW5lZCBhbmQgdXNlZCBvbiB0aGUgYmFj
a2dyb3VuZCB0aHJlYWQuCiAgICAgICAgIFNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CkluZGV4
OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3BwCShyZXZpc2lvbiA0NDc0NSkKKysrIFdl
YkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
MTQgKzQyLDYgQEAgTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIAogICAg
IEFTU0VSVChtX3R5cGUgPT0gQXJlYUltcG9ydCB8fCBtX3R5cGUgPT0gQXJlYVN5bmMpOwogfQog
Ci1Mb2NhbFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNrKFR5cGUgdHlwZSwgUGFzc1JlZlB0
cjxMb2NhbFN0b3JhZ2U+IHN0b3JhZ2UpCi0gICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1fc3Rv
cmFnZShzdG9yYWdlKQotewotICAgIEFTU0VSVChtX3N0b3JhZ2UpOwotICAgIEFTU0VSVChtX3R5
cGUgPT0gU3RvcmFnZUltcG9ydCB8fCBtX3R5cGUgPT0gU3RvcmFnZVN5bmMpOwotfQotCiBMb2Nh
bFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNrKFR5cGUgdHlwZSwgUGFzc1JlZlB0cjxMb2Nh
bFN0b3JhZ2VUaHJlYWQ+IHRocmVhZCkKICAgICA6IG1fdHlwZSh0eXBlKQogICAgICwgbV90aHJl
YWQodGhyZWFkKQpAQCAtNjEsMTQgKzUzLDYgQEAgTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9y
YWdlVGFzayhUeXBlIAogdm9pZCBMb2NhbFN0b3JhZ2VUYXNrOjpwZXJmb3JtVGFzaygpCiB7CiAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBTdG9yYWdlSW1wb3J0OgotICAgICAg
ICAgICAgQVNTRVJUKG1fc3RvcmFnZSk7Ci0gICAgICAgICAgICBtX3N0b3JhZ2UtPnBlcmZvcm1J
bXBvcnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFN0b3JhZ2VTeW5jOgot
ICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZSk7Ci0gICAgICAgICAgICBtX3N0b3JhZ2UtPnBl
cmZvcm1TeW5jKCk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcmVhSW1wb3J0
OgogICAgICAgICAgICAgQVNTRVJUKG1fYXJlYSk7CiAgICAgICAgICAgICBtX2FyZWEtPnBlcmZv
cm1JbXBvcnQoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAkocmV2aXNpb24g
NDQ3NDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCwxNyArMzQsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xh
c3MgTG9jYWxTdG9yYWdlOwogICAgIGNsYXNzIExvY2FsU3RvcmFnZUFyZWE7CiAgICAgY2xhc3Mg
TG9jYWxTdG9yYWdlVGhyZWFkOwogCiAgICAgY2xhc3MgTG9jYWxTdG9yYWdlVGFzayA6IHB1Ymxp
YyBUaHJlYWRTYWZlU2hhcmVkPExvY2FsU3RvcmFnZVRhc2s+IHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIGVudW0gVHlwZSB7IFN0b3JhZ2VJbXBvcnQsIFN0b3JhZ2VTeW5jLCBBcmVhSW1wb3J0LCBB
cmVhU3luYywgVGVybWluYXRlVGhyZWFkIH07CisgICAgICAgIGVudW0gVHlwZSB7IEFyZWFJbXBv
cnQsIEFyZWFTeW5jLCBUZXJtaW5hdGVUaHJlYWQgfTsKIAotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3Jh
Z2U+IHN0b3JhZ2UpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKFN0b3Jh
Z2VJbXBvcnQsIHN0b3JhZ2UpKTsgfQogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0
b3JhZ2VUYXNrPiBjcmVhdGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVh
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlVGFzayhBcmVhSW1wb3J0LCBhcmVh
KSk7IH0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRl
U3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gc3RvcmFnZSkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IExvY2FsU3RvcmFnZVRhc2soU3RvcmFnZVN5bmMsIHN0b3JhZ2UpKTsgfQogICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVTeW5jKFBhc3NSZWZQdHI8
TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFn
ZVRhc2soQXJlYVN5bmMsIGFyZWEpKTsgfQogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2Nh
bFN0b3JhZ2VUYXNrPiBjcmVhdGVUZXJtaW5hdGUoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUaHJl
YWQ+IHRocmVhZCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZVRhc2soVGVybWlu
YXRlVGhyZWFkLCB0aHJlYWQpKTsgfQogCkBAIC01MiwxMiArNDksMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgTG9jYWxTdG9yYWdlVGFzayhUeXBlLCBQ
YXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKLSAgICAgICAgTG9jYWxTdG9yYWdlVGFzayhU
eXBlLCBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4pOwogICAgICAgICBMb2NhbFN0b3JhZ2VUYXNr
KFR5cGUsIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPik7CiAKICAgICAgICAgVHlwZSBt
X3R5cGU7CiAgICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBtX2FyZWE7Ci0gICAgICAg
IFJlZlB0cjxMb2NhbFN0b3JhZ2U+IG1fc3RvcmFnZTsKICAgICAgICAgUmVmUHRyPExvY2FsU3Rv
cmFnZVRocmVhZD4gbV90aHJlYWQ7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0xv
Y2FsU3RvcmFnZVRocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2Fs
U3RvcmFnZVRocmVhZC5jcHAJKHJldmlzaW9uIDQ0NzQ1KQorKysgV2ViQ29yZS9zdG9yYWdlL0xv
Y2FsU3RvcmFnZVRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDE4ICs4Nyw2IEBAIHZv
aWQqIExvY2FsU3RvcmFnZVRocmVhZDo6bG9jYWxTdG9yYWdlVGgKICAgICByZXR1cm4gMDsKIH0K
IAotdm9pZCBMb2NhbFN0b3JhZ2VUaHJlYWQ6OnNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9j
YWxTdG9yYWdlPiBzdG9yYWdlKQotewotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBt
X3RocmVhZElEKTsKLSAgICBtX3F1ZXVlLmFwcGVuZChMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVJ
bXBvcnQoc3RvcmFnZSkpOwotfQotCi12b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVT
eW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBzdG9yYWdlKQotewotICAgIEFTU0VSVCghbV9x
dWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKLSAgICBtX3F1ZXVlLmFwcGVuZChMb2NhbFN0
b3JhZ2VUYXNrOjpjcmVhdGVTeW5jKHN0b3JhZ2UpKTsKLX0KLQogdm9pZCBMb2NhbFN0b3JhZ2VU
aHJlYWQ6OnNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkK
IHsKICAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5oCShyZXZpc2lvbiA0NDc0NSkKKysrIFdlYkNv
cmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyAr
MzUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBMb2NhbFN0b3JhZ2U7
CiAgICAgY2xhc3MgTG9jYWxTdG9yYWdlQXJlYTsKICAgICBjbGFzcyBMb2NhbFN0b3JhZ2VUYXNr
OwogCkBAIC00NSw4ICs0NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29s
IHN0YXJ0KCk7CiAKLSAgICAgICAgdm9pZCBzY2hlZHVsZUltcG9ydChQYXNzUmVmUHRyPExvY2Fs
U3RvcmFnZT4pOwotICAgICAgICB2b2lkIHNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3Rv
cmFnZT4pOwogICAgICAgICB2b2lkIHNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9y
YWdlQXJlYT4pOwogICAgICAgICB2b2lkIHNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3Rv
cmFnZUFyZWE+KTsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmgJKHJldmlzaW9uIDQ0
NzQ1KQorKysgV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJTZXNzaW9uU3RvcmFnZUFyZWEuaCIKIAogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAkocmV2aXNpb24gNDQ3NDUpCShmcm9tIFdlYkNv
cmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwOjQ0NzQ1KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VTeW5jTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZS5oIgorCisjaWYgRU5BQkxFKERPTV9TVE9S
QUdFKQorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFt
ZVRyZWUuaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCisjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIExvY2FsU3RvcmFnZSo+IExvY2FsU3RvcmFnZU1hcDsKKworc3Rh
dGljIExvY2FsU3RvcmFnZU1hcCYgbG9jYWxTdG9yYWdlTWFwKCkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKExvY2FsU3RvcmFnZU1hcCwgbG9jYWxTdG9yYWdlTWFwLCAoKSk7CisgICAgcmV0
dXJuIGxvY2FsU3RvcmFnZU1hcDsKK30KKworUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IExvY2Fs
U3RvcmFnZTo6bG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBjb25zdCBT
dHJpbmcgbG9va3VwUGF0aCA9IHBhdGguaXNOdWxsKCkgPyBTdHJpbmcoIiIpIDogcGF0aDsKKyAg
ICBMb2NhbFN0b3JhZ2VNYXA6Oml0ZXJhdG9yIGl0ID0gbG9jYWxTdG9yYWdlTWFwKCkuZmluZChs
b29rdXBQYXRoKTsKKyAgICBpZiAoaXQgPT0gbG9jYWxTdG9yYWdlTWFwKCkuZW5kKCkpIHsKKyAg
ICAgICAgUmVmUHRyPExvY2FsU3RvcmFnZT4gbG9jYWxTdG9yYWdlID0gYWRvcHRSZWYobmV3IExv
Y2FsU3RvcmFnZShsb29rdXBQYXRoKSk7CisgICAgICAgIGxvY2FsU3RvcmFnZU1hcCgpLnNldChs
b29rdXBQYXRoLCBsb2NhbFN0b3JhZ2UuZ2V0KCkpOworICAgICAgICByZXR1cm4gbG9jYWxTdG9y
YWdlLnJlbGVhc2UoKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Cit9CisK
K0xvY2FsU3RvcmFnZTo6TG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCkKKyAgICA6IG1f
cGF0aChwYXRoLmNvcHkoKSkKK3sKKyAgICAvLyBJZiB0aGUgcGF0aCBpcyBlbXB0eSwgd2Uga25v
dyB3ZSdyZSBuZXZlciBnb2luZyB0byBiZSB1c2luZyB0aGUgdGhyZWFkIGZvciBhbnl0aGluZywg
c28gZG9uJ3Qgc3RhcnQgaXQuCisgICAgLy8gSW4gdGhlIGZ1dHVyZSwgd2UgbWlnaHQgYWxzbyB3
YW50IHRvIGNvbnNpZGVyIHJlbW92aW5nIGl0IGZyb20gdGhlIERPTSBpbiB0aGF0IGNhc2UgLSA8
cmRhcjovL3Byb2JsZW0vNTk2MDQ3MD4KKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fdGhyZWFkID0gTG9jYWxTdG9yYWdlVGhyZWFkOjpjcmVhdGUoKTsK
KyAgICBtX3RocmVhZC0+c3RhcnQoKTsKKyAgICBtX3RocmVhZC0+c2NoZWR1bGVJbXBvcnQodGhp
cyk7Cit9CisKK0xvY2FsU3RvcmFnZTo6fkxvY2FsU3RvcmFnZSgpCit7CisgICAgQVNTRVJUKGxv
Y2FsU3RvcmFnZU1hcCgpLmdldChtX3BhdGgpID09IHRoaXMpOworICAgIGxvY2FsU3RvcmFnZU1h
cCgpLnJlbW92ZShtX3BhdGgpOworfQorCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBMb2NhbFN0
b3JhZ2U6OnN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIEZJWE1FOiBJZiB0aGUgc2VjdXJpdHkgb3JpZ2lu
IGluIHF1ZXN0aW9uIGhhcyBuZXZlciBoYWQgYSBzdG9yYWdlIGFyZWEgZXN0YWJsaXNoZWQsCisg
ICAgLy8gd2UgbmVlZCB0byBhc2sgYSBjbGllbnQgY2FsbCBpZiBlc3RhYmxpc2hpbmcgaXQgaXMg
b2theS4gIElmIHRoZSBjbGllbnQgZGVuaWVzIHRoZSByZXF1ZXN0LAorICAgIC8vIHRoaXMgbWV0
aG9kIHdpbGwgcmV0dXJuIG51bGwuCisgICAgLy8gVGhlIHNvdXJjZUZyYW1lIGFyZ3VtZW50IGV4
aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2YgYXNraW5nIGEgY2xpZW50LgorICAgIC8vIFRvIGtub3cg
aWYgYW4gYXJlYSBoYXMgcHJldmlvdXNseSBiZWVuIGVzdGFibGlzaGVkLCB3ZSBuZWVkIHRvIHdh
aXQgdW50aWwgdGhpcyBMb2NhbFN0b3JhZ2UgCisgICAgLy8gb2JqZWN0IGhhcyBmaW5pc2hlZCBp
dCdzIEFyZWFJbXBvcnQgdGFzay4KKworCisgICAgLy8gRklYTUU6IElmIHRoZSBzdG9yYWdlIGFy
ZWEgaXMgYmVpbmcgZXN0YWJsaXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGhlcmUsIHdlIG5lZWQg
dG8gCisgICAgLy8gc3luYyBpdHMgZXhpc3RhbmNlIGFuZCBxdW90YSBvdXQgdG8gZGlzayB2aWEg
YW4gdGFzayBvZiB0eXBlIEFyZWFTeW5jCisKKyAgICBSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4g
c3RvcmFnZUFyZWE7CisgICAgaWYgKHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYU1hcC5nZXQo
b3JpZ2luKSkKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKKyAgICAgICAg
CisgICAgc3RvcmFnZUFyZWEgPSBMb2NhbFN0b3JhZ2VBcmVhOjpjcmVhdGUob3JpZ2luLCB0aGlz
KTsKKyAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVhKTsKKyAgICBy
ZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOworfQorCitTdHJpbmcgTG9jYWxTdG9yYWdlOjpm
dWxsRGF0YWJhc2VGaWxlbmFtZShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIC8vIEZJ
WE1FOiBPbmNlIHdlIGFjdHVhbGx5IHRyYWNrIG9yaWdpbi9xdW90YSBlbnRyaWVzIHRvIHNlZSB3
aGljaCBvcmlnaW5zIGhhdmUgbG9jYWwgc3RvcmFnZSBlc3RhYmxpc2hlZCwKKyAgICAvLyB3ZSB3
aWxsIHJldHVybiBhbiBlbXB0eSBwYXRoIG5hbWUgaWYgdGhlIG9yaWdpbiBpc24ndCBhbGxvd2Vk
IHRvIGhhdmUgTG9jYWxTdG9yYWdlLgorICAgIC8vIFdlJ2xsIG5lZWQgdG8gd2FpdCBoZXJlIHVu
dGlsIHRoZSBBcmVhSW1wb3J0IHRhc2sgdG8gY29tcGxldGUgYmVmb3JlIG1ha2luZyB0aGF0IGRl
Y2lzaW9uLgorCisgICAgaWYgKG1fcGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgIEFTU0VSVChvcmlnaW4pOworICAgIGlmICghb3JpZ2luKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhtX3BhdGgpKSB7
CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlZCB0byBjcmVhdGUgTG9jYWxTdG9yYWdlIGRhdGFi
YXNlIHBhdGggJXMiLCBtX3BhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fcGF0
aCwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICIubG9jYWxzdG9yYWdlIik7Cit9CisK
K3ZvaWQgTG9jYWxTdG9yYWdlOjpwZXJmb3JtSW1wb3J0KCkKK3sKKyAgICBBU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKKworICAgIC8vIEZJWE1FOiBJbXBvcnQgYWxsIGtub3duIGxvY2FsIHN0b3Jh
Z2Ugb3JpZ2lucyBoZXJlIGFsb25nIHdpdGggdGhlaXIgcXVvdGFzCit9CisKK3ZvaWQgTG9jYWxT
dG9yYWdlOjpwZXJmb3JtU3luYygpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisK
KyAgICAvLyBGSVhNRTogV3JpdGUgb3V0IG5ldyBvcmlnaW5zIGFuZCBxdW90YXMgaGVyZQorfQor
Cit2b2lkIExvY2FsU3RvcmFnZTo6Y2xvc2UoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisKKyAgICBMb2NhbFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VB
cmVhTWFwLmVuZCgpOworICAgIGZvciAoTG9jYWxTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQg
PSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQt
PnNlY29uZC0+c2NoZWR1bGVGaW5hbFN5bmMoKTsKKworICAgIGlmIChtX3RocmVhZCkgeworICAg
ICAgICBtX3RocmVhZC0+dGVybWluYXRlKCk7CisgICAgICAgIG1fdGhyZWFkID0gMDsKKyAgICB9
Cit9CisKK2Jvb2wgTG9jYWxTdG9yYWdlOjpzY2hlZHVsZUltcG9ydChQYXNzUmVmUHRyPExvY2Fs
U3RvcmFnZUFyZWE+IGFyZWEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAg
IGlmIChtX3RocmVhZCkKKyAgICAgICAgbV90aHJlYWQtPnNjaGVkdWxlSW1wb3J0KGFyZWEpOwor
CisgICAgcmV0dXJuIG1fdGhyZWFkOworfQorCit2b2lkIExvY2FsU3RvcmFnZTo6c2NoZWR1bGVT
eW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIGlmIChtX3RocmVhZCkKKyAgICAgICAgbV90aHJlYWQtPnNjaGVk
dWxlU3luYyhhcmVhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKERPTV9TVE9SQUdFKQorCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNN
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5h
Z2VyLmNwcAkocmV2aXNpb24gNDQ3NDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNN
YW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTYgKzI0LDEzIEBACiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZS5oIgotCi0jaWYgRU5BQkxF
KERPTV9TVE9SQUdFKQorI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgogCiAjaW5jbHVk
ZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGaWxlU3lz
dGVtLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNs
dWRlICJMb2NhbFN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBh
Z2VHcm91cC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCkBAIC00MSw4MiArMzgsMjMgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBMb2NhbFN0
b3JhZ2UqPiBMb2NhbFN0b3JhZ2VNYXA7Ci0KLXN0YXRpYyBMb2NhbFN0b3JhZ2VNYXAmIGxvY2Fs
U3RvcmFnZU1hcCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VNYXAs
IGxvY2FsU3RvcmFnZU1hcCwgKCkpOwotICAgIHJldHVybiBsb2NhbFN0b3JhZ2VNYXA7Ci19Ci0K
LVBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBMb2NhbFN0b3JhZ2U6OmxvY2FsU3RvcmFnZShjb25z
dCBTdHJpbmcmIHBhdGgpCitQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gU3RvcmFnZVN5
bmNNYW5hZ2VyOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIGNvbnN0IFN0cmlu
ZyBsb29rdXBQYXRoID0gcGF0aC5pc051bGwoKSA/IFN0cmluZygiIikgOiBwYXRoOwotICAgIExv
Y2FsU3RvcmFnZU1hcDo6aXRlcmF0b3IgaXQgPSBsb2NhbFN0b3JhZ2VNYXAoKS5maW5kKGxvb2t1
cFBhdGgpOwotICAgIGlmIChpdCA9PSBsb2NhbFN0b3JhZ2VNYXAoKS5lbmQoKSkgewotICAgICAg
ICBSZWZQdHI8TG9jYWxTdG9yYWdlPiBsb2NhbFN0b3JhZ2UgPSBhZG9wdFJlZihuZXcgTG9jYWxT
dG9yYWdlKGxvb2t1cFBhdGgpKTsKLSAgICAgICAgbG9jYWxTdG9yYWdlTWFwKCkuc2V0KGxvb2t1
cFBhdGgsIGxvY2FsU3RvcmFnZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2Uu
cmVsZWFzZSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFN0b3JhZ2VTeW5jTWFuYWdlcihwYXRoKSk7CiB9CiAKLUxvY2FsU3Rv
cmFnZTo6TG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCkKK1N0b3JhZ2VTeW5jTWFuYWdl
cjo6U3RvcmFnZVN5bmNNYW5hZ2VyKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICA6IG1fcGF0aChw
YXRoLmNvcHkoKSkKIHsKLSAgICAvLyBJZiB0aGUgcGF0aCBpcyBlbXB0eSwgd2Uga25vdyB3ZSdy
ZSBuZXZlciBnb2luZyB0byBiZSB1c2luZyB0aGUgdGhyZWFkIGZvciBhbnl0aGluZywgc28gZG9u
J3Qgc3RhcnQgaXQuCi0gICAgLy8gSW4gdGhlIGZ1dHVyZSwgd2UgbWlnaHQgYWxzbyB3YW50IHRv
IGNvbnNpZGVyIHJlbW92aW5nIGl0IGZyb20gdGhlIERPTSBpbiB0aGF0IGNhc2UgLSA8cmRhcjov
L3Byb2JsZW0vNTk2MDQ3MD4KLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKKyAgICBBU1NFUlQoIW1fcGF0aC5pc0VtcHR5KCkpOwogCiAgICAgbV90aHJlYWQgPSBMb2Nh
bFN0b3JhZ2VUaHJlYWQ6OmNyZWF0ZSgpOwogICAgIG1fdGhyZWFkLT5zdGFydCgpOwotICAgIG1f
dGhyZWFkLT5zY2hlZHVsZUltcG9ydCh0aGlzKTsKLX0KLQotTG9jYWxTdG9yYWdlOjp+TG9jYWxT
dG9yYWdlKCkKLXsKLSAgICBBU1NFUlQobG9jYWxTdG9yYWdlTWFwKCkuZ2V0KG1fcGF0aCkgPT0g
dGhpcyk7Ci0gICAgbG9jYWxTdG9yYWdlTWFwKCkucmVtb3ZlKG1fcGF0aCk7CiB9CiAKLVBhc3NS
ZWZQdHI8U3RvcmFnZUFyZWE+IExvY2FsU3RvcmFnZTo6c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmln
aW4qIG9yaWdpbikKK1N0cmluZyBTdG9yYWdlU3luY01hbmFnZXI6OmZ1bGxEYXRhYmFzZUZpbGVu
YW1lKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLQotICAgIC8vIEZJWE1FOiBJZiB0aGUgc2VjdXJpdHkgb3JpZ2luIGluIHF1ZXN0aW9uIGhh
cyBuZXZlciBoYWQgYSBzdG9yYWdlIGFyZWEgZXN0YWJsaXNoZWQsCi0gICAgLy8gd2UgbmVlZCB0
byBhc2sgYSBjbGllbnQgY2FsbCBpZiBlc3RhYmxpc2hpbmcgaXQgaXMgb2theS4gIElmIHRoZSBj
bGllbnQgZGVuaWVzIHRoZSByZXF1ZXN0LAotICAgIC8vIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJu
IG51bGwuCi0gICAgLy8gVGhlIHNvdXJjZUZyYW1lIGFyZ3VtZW50IGV4aXN0cyBmb3IgdGhlIHB1
cnBvc2Ugb2YgYXNraW5nIGEgY2xpZW50LgotICAgIC8vIFRvIGtub3cgaWYgYW4gYXJlYSBoYXMg
cHJldmlvdXNseSBiZWVuIGVzdGFibGlzaGVkLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhpcyBM
b2NhbFN0b3JhZ2UgCi0gICAgLy8gb2JqZWN0IGhhcyBmaW5pc2hlZCBpdCdzIEFyZWFJbXBvcnQg
dGFzay4KLQotCi0gICAgLy8gRklYTUU6IElmIHRoZSBzdG9yYWdlIGFyZWEgaXMgYmVpbmcgZXN0
YWJsaXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGhlcmUsIHdlIG5lZWQgdG8gCi0gICAgLy8gc3lu
YyBpdHMgZXhpc3RhbmNlIGFuZCBxdW90YSBvdXQgdG8gZGlzayB2aWEgYW4gdGFzayBvZiB0eXBl
IEFyZWFTeW5jCi0KLSAgICBSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWE7Ci0g
ICAgaWYgKHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYU1hcC5nZXQob3JpZ2luKSkKLSAgICAg
ICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKLSAgICAgICAgCi0gICAgc3RvcmFnZUFy
ZWEgPSBMb2NhbFN0b3JhZ2VBcmVhOjpjcmVhdGUob3JpZ2luLCB0aGlzKTsKLSAgICBtX3N0b3Jh
Z2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVhKTsKLSAgICByZXR1cm4gc3RvcmFnZUFy
ZWEucmVsZWFzZSgpOwotfQotCi1TdHJpbmcgTG9jYWxTdG9yYWdlOjpmdWxsRGF0YWJhc2VGaWxl
bmFtZShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQotewotICAgIC8vIEZJWE1FOiBPbmNlIHdlIGFj
dHVhbGx5IHRyYWNrIG9yaWdpbi9xdW90YSBlbnRyaWVzIHRvIHNlZSB3aGljaCBvcmlnaW5zIGhh
dmUgbG9jYWwgc3RvcmFnZSBlc3RhYmxpc2hlZCwKLSAgICAvLyB3ZSB3aWxsIHJldHVybiBhbiBl
bXB0eSBwYXRoIG5hbWUgaWYgdGhlIG9yaWdpbiBpc24ndCBhbGxvd2VkIHRvIGhhdmUgTG9jYWxT
dG9yYWdlLgotICAgIC8vIFdlJ2xsIG5lZWQgdG8gd2FpdCBoZXJlIHVudGlsIHRoZSBBcmVhSW1w
b3J0IHRhc2sgdG8gY29tcGxldGUgYmVmb3JlIG1ha2luZyB0aGF0IGRlY2lzaW9uLgotCi0gICAg
aWYgKG1fcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQogICAgIEFT
U0VSVChvcmlnaW4pOwotICAgIGlmICghb3JpZ2luKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CiAKICAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhtX3BhdGgpKSB7CiAgICAgICAgIExPR19F
UlJPUigiVW5hYmxlZCB0byBjcmVhdGUgTG9jYWxTdG9yYWdlIGRhdGFiYXNlIHBhdGggJXMiLCBt
X3BhdGgudXRmOCgpLmRhdGEoKSk7CkBAIC0xMjYsNTIgKzY0LDMyIEBAIFN0cmluZyBMb2NhbFN0
b3JhZ2U6OmZ1bGxEYXRhYmFzZUZpbGVuYW0KICAgICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KG1fcGF0aCwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICIubG9jYWxzdG9y
YWdlIik7CiB9CiAKLXZvaWQgTG9jYWxTdG9yYWdlOjpwZXJmb3JtSW1wb3J0KCkKLXsKLSAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIEZJWE1FOiBJbXBvcnQgYWxsIGtub3du
IGxvY2FsIHN0b3JhZ2Ugb3JpZ2lucyBoZXJlIGFsb25nIHdpdGggdGhlaXIgcXVvdGFzCi19Ci0K
LXZvaWQgTG9jYWxTdG9yYWdlOjpwZXJmb3JtU3luYygpCi17Ci0gICAgQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7Ci0KLSAgICAvLyBGSVhNRTogV3JpdGUgb3V0IG5ldyBvcmlnaW5zIGFuZCBxdW90
YXMgaGVyZQotfQotCi12b2lkIExvY2FsU3RvcmFnZTo6Y2xvc2UoKQordm9pZCBTdG9yYWdlU3lu
Y01hbmFnZXI6OmNsb3NlKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAg
TG9jYWxTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQo
KTsKLSAgICBmb3IgKExvY2FsU3RvcmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdl
QXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnNj
aGVkdWxlRmluYWxTeW5jKCk7Ci0KKyAgICAKICAgICBpZiAobV90aHJlYWQpIHsKICAgICAgICAg
bV90aHJlYWQtPnRlcm1pbmF0ZSgpOwogICAgICAgICBtX3RocmVhZCA9IDA7CiAgICAgfQogfQog
Ci1ib29sIExvY2FsU3RvcmFnZTo6c2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3Jh
Z2VBcmVhPiBhcmVhKQorYm9vbCBTdG9yYWdlU3luY01hbmFnZXI6OnNjaGVkdWxlSW1wb3J0KFBh
c3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotCisgICAgCiAgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICBtX3RocmVhZC0+c2No
ZWR1bGVJbXBvcnQoYXJlYSk7CiAKICAgICByZXR1cm4gbV90aHJlYWQ7CiB9CiAKLXZvaWQgTG9j
YWxTdG9yYWdlOjpzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVh
KQordm9pZCBTdG9yYWdlU3luY01hbmFnZXI6OnNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2Fs
U3RvcmFnZUFyZWE+IGFyZWEpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAK
ICAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIG1fdGhyZWFkLT5zY2hlZHVsZVN5bmMoYXJlYSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShET01fU1RP
UkFHRSkKLQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaAkocmV2aXNpb24g
NDQ3NDUpCShmcm9tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuaDo0NDc0NSkKKysrIFdl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgTG9jYWxTdG9yYWdlX2gKKyNkZWZpbmUgTG9jYWxTdG9yYWdlX2gKKworI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKKworI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEuaCIKKyNpbmNs
dWRlICJMb2NhbFN0b3JhZ2VUYXNrLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgi
CisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBQYWdlR3JvdXA7CisgICAgY2xh
c3MgU3RvcmFnZUFyZWE7CisKKyAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgVGhyZWFk
U2FmZVNoYXJlZDxMb2NhbFN0b3JhZ2U+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5Mb2NhbFN0
b3JhZ2UoKTsKKworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2Fs
U3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpOworCisgICAgICAgIFBhc3NSZWZQdHI8U3RvcmFn
ZUFyZWE+IHN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKik7CisKKyAgICAgICAgYm9vbCBzY2hl
ZHVsZUltcG9ydChQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKKyAgICAgICAgdm9pZCBz
Y2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPik7CisKKyAgICAgICAgdm9p
ZCBjbG9zZSgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgTG9jYWxTdG9yYWdlKGNvbnN0IFN0
cmluZyYgcGF0aCk7CisKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4sIFJlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiwgU2VjdXJpdHlPcmlnaW5IYXNoPiBMb2Nh
bFN0b3JhZ2VBcmVhTWFwOworICAgICAgICBMb2NhbFN0b3JhZ2VBcmVhTWFwIG1fc3RvcmFnZUFy
ZWFNYXA7CisKKyAgICAgICAgUmVmUHRyPExvY2FsU3RvcmFnZVRocmVhZD4gbV90aHJlYWQ7CisK
KyAgICAvLyBUaGUgZm9sbG93aW5nIG1lbWJlcnMgYXJlIHN1YmplY3QgdG8gdGhyZWFkIHN5bmNo
cm9uaXphdGlvbiBpc3N1ZXMKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIFRvIGJlIGNhbGxlZCBm
cm9tIHRoZSBiYWNrZ3JvdW5kIHRocmVhZDoKKyAgICAgICAgU3RyaW5nIGZ1bGxEYXRhYmFzZUZp
bGVuYW1lKFNlY3VyaXR5T3JpZ2luKik7CisKKyAgICAgICAgdm9pZCBwZXJmb3JtSW1wb3J0KCk7
CisgICAgICAgIHZvaWQgcGVyZm9ybVN5bmMoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFN0
cmluZyBtX3BhdGg7CisKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4sIHVuc2lnbmVkIGxvbmcgbG9uZywgU2VjdXJpdHlPcmlnaW5IYXNoPiBTZWN1cml0eU9y
aWdpblF1b3RlTWFwOworICAgICAgICBTZWN1cml0eU9yaWdpblF1b3RlTWFwIG1fc2VjdXJpdHlP
cmlnaW5RdW90ZU1hcDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNlbmRpZiAvLyBMb2NhbFN0b3JhZ2VfaApJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaAkocmV2aXNpb24gNDQ3NDUpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDMyICsyMywyMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBMb2NhbFN0b3Jh
Z2VfaAotI2RlZmluZSBMb2NhbFN0b3JhZ2VfaAotCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQor
I2lmbmRlZiBTdG9yYWdlU3luY01hbmFnZXJfaAorI2RlZmluZSBTdG9yYWdlU3luY01hbmFnZXJf
aAogCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlQXJlYS5oIgogI2luY2x1ZGUgIkxvY2FsU3RvcmFn
ZVRhc2suaCIKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VUaHJlYWQuaCIKLSNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbkhhc2guaCIKIAotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotICAgIGNsYXNzIFBhZ2VHcm91cDsKLSAgICBjbGFzcyBTdG9yYWdlQXJlYTsK
LQotICAgIGNsYXNzIExvY2FsU3RvcmFnZSA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPExvY2Fs
U3RvcmFnZT4geworICAgIGNsYXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjogcHVibGljIFRocmVhZFNh
ZmVTaGFyZWQ8U3RvcmFnZVN5bmNNYW5hZ2VyPiB7CiAgICAgcHVibGljOgotICAgICAgICB+TG9j
YWxTdG9yYWdlKCk7Ci0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBs
b2NhbFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBwYXRoKTsKLQotICAgICAgICBQYXNzUmVmUHRyPFN0
b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiopOworICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgp
OwogCiAgICAgICAgIGJvb2wgc2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VB
cmVhPik7CiAgICAgICAgIHZvaWQgc2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdl
QXJlYT4pOwpAQCAtNTYsMTAgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIGNsb3NlKCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBMb2NhbFN0b3JhZ2UoY29uc3Qg
U3RyaW5nJiBwYXRoKTsKLQotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+IExv
Y2FsU3RvcmFnZUFyZWFNYXA7Ci0gICAgICAgIExvY2FsU3RvcmFnZUFyZWFNYXAgbV9zdG9yYWdl
QXJlYU1hcDsKKyAgICAgICAgU3RvcmFnZVN5bmNNYW5hZ2VyKGNvbnN0IFN0cmluZyYgcGF0aCk7
CiAKICAgICAgICAgUmVmUHRyPExvY2FsU3RvcmFnZVRocmVhZD4gbV90aHJlYWQ7CiAKQEAgLTY4
LDE4ICs1MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFRvIGJlIGNhbGxl
ZCBmcm9tIHRoZSBiYWNrZ3JvdW5kIHRocmVhZDoKICAgICAgICAgU3RyaW5nIGZ1bGxEYXRhYmFz
ZUZpbGVuYW1lKFNlY3VyaXR5T3JpZ2luKik7CiAKLSAgICAgICAgdm9pZCBwZXJmb3JtSW1wb3J0
KCk7Ci0gICAgICAgIHZvaWQgcGVyZm9ybVN5bmMoKTsKLQogICAgIHByaXZhdGU6CiAgICAgICAg
IFN0cmluZyBtX3BhdGg7Ci0KLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0
eU9yaWdpbj4sIHVuc2lnbmVkIGxvbmcgbG9uZywgU2VjdXJpdHlPcmlnaW5IYXNoPiBTZWN1cml0
eU9yaWdpblF1b3RlTWFwOwotICAgICAgICBTZWN1cml0eU9yaWdpblF1b3RlTWFwIG1fc2VjdXJp
dHlPcmlnaW5RdW90ZU1hcDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNl
bmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCi0KLSNlbmRpZiAvLyBMb2NhbFN0b3JhZ2VfaAor
I2VuZGlmIC8vIFN0b3JhZ2VTeW5jTWFuYWdlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31395</attachid>
            <date>2009-06-16 17:44:03 -0700</date>
            <delta_ts>2009-06-18 12:54:07 -0700</delta_ts>
            <desc>patch 1 - v4</desc>
            <filename>1.20090616.patch</filename>
            <type>text/plain</type>
            <size>40409</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDc0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjIgQEAKKzIwMDktMDYtMTYgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rmlyc3Qgc3RlcCBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUz
NzYKKworICAgICAgICBBZGQgU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcC9oCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorCisgICAgICAgIElu
IHByZXBhcmF0aW9uIGZvciBjb21iaW5pbmcgU2Vzc2lvblN0b3JhZ2UgYW5kIExvY2FsU3RvcmFn
ZSBpbnRvIGEKKyAgICAgICAgc2luZ2xlIFN0b3JhZ2VNYW5hZ2VyLCBtb3ZlIHRoZSBzeW5jaW5n
IGJpdHMgb3V0IG9mIExvY2FsU3RvcmFnZSBhbmQKKyAgICAgICAgaW50byBpdHMgb3duIGNsYXNz
LgorCisgICAgICAgIFRoZSBuZXh0IHN0ZXAgaXMgdG8gY29tYmluZSBMb2NhbFN0b3JhZ2VBcmVh
IGFuZCBTZXNzaW9uU3RvcmFnZUFyZWEKKyAgICAgICAgaW50byBvbmUuICBUaGVuIFNlc3Npb25T
dG9yYWdlIGFuZCBMb2NhbFN0b3JhZ2UgY2FuIGJlIGNvbWJpbmVkLgorCisgICAgICAgIE5vdGUg
dGhhdCBjb21iaW5pbmcgdGhlbSB3aWxsIGN1dCBkb3duIG9uIGNvZGUgcGF0aHMgdGhhdCBtdXN0
IGJlCisgICAgICAgIHByb3hpZWQsIGVsaW1pbmF0ZSB2aXJ0dWFsIGRpc3BhdGNoLCBhbmQgYWxs
b3cgQ2hyb21pdW0gdG8gKGV2ZW50dWFsbHkpCisgICAgICAgIHdyaXRlIGhpc3RvcmljYWwgc2Vz
c2lvblN0b3JhZ2UgdG8gZGlzayB3aGVuIG1lbW9yeSBpcyBnZXR0aW5nIHRpZ2h0LgorCisgICAg
ICAgIEFsc28gcmVtb3ZlIGEgY291cGxlIGJpdHMgb2YgY3J1ZnQgaW5jbHVkaW5nIGNvZGUgZm9y
IHF1b3RhcyB3aGljaCBpcworICAgICAgICB1bm5lY2Vzc2FyeSAoc2luY2UgYSBtZXRhLWRhdGEg
ZGIgaXMgdW5uZWNlc3Nhcnkgc2luY2UgeW91IGNhbiBqdXN0CisgICAgICAgIGNvdW50IGJ5dGVz
IGFzIHlvdSByZWFkIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlcyBpbnRvIG1lbW9yeSkuCisK
KyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
b2NhbFN0b3JhZ2U6OkxvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3Jh
Z2U6OnN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZTo6Y2xvc2Up
OgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlLmg6CisgICAgICAgICogc3RvcmFnZS9M
b2NhbFN0b3JhZ2VBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZUFyZWE6
OkxvY2FsU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6
c2NoZWR1bGVGaW5hbFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6
c3luY1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6cGVy
Zm9ybUltcG9ydCk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmg6CisgICAg
ICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VBcmVhOjpjcmVhdGUpOgorICAgICAgICAqIHN0b3Jh
Z2UvTG9jYWxTdG9yYWdlVGFzay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VU
YXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmg6
CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjopOgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlSW1wb3J0KToKKyAgICAgICAgKiBzdG9yYWdlL0xv
Y2FsU3RvcmFnZVRocmVhZC5jcHA6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJl
YWQuaDoKKyAgICAgICAgKiBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmg6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6U3RvcmFnZVN5
bmNNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6ZnVsbERh
dGFiYXNlRmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVN5bmNNYW5hZ2VyOjpj
bG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlU3luY01hbmFnZXI6OnNjaGVkdWxlSW1w
b3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6c2NoZWR1bGVTeW5j
KToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmguCisgICAgICAgIChXZWJDb3JlOjopOgorCiAy
MDA5LTA2LTE2ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ0NzQ1KQorKysg
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjA3OSw3ICsyMDc5LDkg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmNw
cCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5oIFwKIAlXZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZU1hcC5jcHAgXAotCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmgKKwlXZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZU1hcC5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5h
Z2VyLmNwcCBcCisJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCiBlbmRpZiAj
IEVORCBFTkFCTEVfRE9NX1NUT1JBR0UKIAogIyAtLS0tCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQ0NzQ1KQor
KysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTM2NCw2ICsxMzY0LDcg
QEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RPTV9TVE9SQUdFPTEpIAogICAgICAgICBzdG9y
YWdlL1N0b3JhZ2VFdmVudC5jcHAgXAogICAgICAgICBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmNw
cCBcCiAgICAgICAgIHN0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcCBcCisgICAgICAgIHN0
b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTU3Rv
cmFnZUN1c3RvbS5jcHAKIAogICAgIElETF9CSU5ESU5HUyArPSBcCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJr
bAkocmV2aXNpb24gNDQ3NDUpCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAxNSw2ICsxMDE1LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0
IG9mIGZpbGVzIG5lZQogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCiAgICAgICAgIHN0
b3JhZ2UvU2Vzc2lvblN0b3JhZ2UuY3BwCiAgICAgICAgIHN0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VB
cmVhLmNwcAorICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKICAgICA8L3Nl
dD4KIAogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19YTUwiPgpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0NDc0NSkKKysr
IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAg
LTE1NjU5LDYgKzE1NjU5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2Vc
U3RvcmFnZVN5bmNNYW5hZ2VyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFZlcnNpb25DaGFuZ2VDYWxsYmFjay5oIg0KIAkJ
CQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA0NDc0NSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjU4LDYgKzQyNTgsOCBAQAogCQlD
MERGQzg3MDBEQjY4NDFBMDAzRUFFN0MgLyogSlNDb25zb2xlQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwREZDODZGMERCNjg0MUEwMDNF
QUU3QyAvKiBKU0NvbnNvbGVDdXN0b20uY3BwICovOyB9OwogCQlDMTA1REE2MjBGM0FBNjhGMDAx
REQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzEwNURBNjEwRjNBQTY4RjAwMURENDRGIC8qIFRl
eHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCAqLzsgfTsKIAkJQzEwNURBNjQwRjNBQTZCODAwMURE
NDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29k
aW5nRGV0ZWN0b3IuaCAqLzsgfTsKKwkJQzUxMDJEOTQwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3Jh
Z2VTeW5jTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICov
OyB9OworCQlDNTEwMkQ5NTBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTAyRDkz
MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwICovOyB9OwogCQlDNkQ3
NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFEMzA5QUEyODJF
MDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggKi87IH07CiAJCUM2RDc0QUU0
MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRTMwOUFBMjkwQTAw
MEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi87IH07CiAJCUQwNUNFRDI5
MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4
IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi87IH07CkBAIC05MDU3LDYgKzkwNTksOCBAQAog
CQlDMERGQzg2RjBEQjY4NDFBMDAzRUFFN0MgLyogSlNDb25zb2xlQ3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ29uc29sZUN1c3RvbS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMxMDVEQTYxMEYzQUE2OEYwMDFERDQ0RiAvKiBUZXh0
RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUMxMDVEQTYzMEYzQUE2QjgwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3Rvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0RW5jb2RpbmdEZXRlY3Rvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTEwMkQ5MjBGRDlBQTJEMDBGQUZGMDQg
LyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0b3JhZ2VTeW5jTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTEw
MkQ5MzBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VTeW5jTWFuYWdlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2Rp
ZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlz
dExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjcwQTQwQkIy
QzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0QmxvY2tDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTk2NDYsNiArOTY1MCw4IEBACiAJCQkJNTFFMEJBQkQwREE1NTQ4NDAw
QTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5pZGwgKi8sCiAJCQkJNTFFMEJCMzcwREE1QUNCNjAwQTlF
NDE3IC8qIFN0b3JhZ2VNYXAuY3BwICovLAogCQkJCTUxRTBCQjM2MERBNUFDQjYwMEE5RTQxNyAv
KiBTdG9yYWdlTWFwLmggKi8sCisJCQkJQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3Jh
Z2VTeW5jTWFuYWdlci5oICovLAorCQkJCUM1MTAyRDkzMEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9y
YWdlU3luY01hbmFnZXIuY3BwICovLAogCQkJKTsKIAkJCWluZGVudFdpZHRoID0gNDsKIAkJCXBh
dGggPSBzdG9yYWdlOwpAQCAtMTY3OTUsNiArMTY4MDEsNyBAQAogCQkJCTA4MUVCRjNCMEZEMzRG
NDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxOEY4
MzFCODBGRDQ4Qzc4MDBEOEM1NkIgLyogV29ya2VyTG9hZGVyUHJveHkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4OUNDQzUzMEY0NEU5ODEwMEI1REExMCAvKiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29t
bWFuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzUxMDJEOTQwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0
b3JhZ2VTeW5jTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVBNzY4MDQwRkU3MTI2NDAw
QUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0xODc4OSw2
ICsxODc5Niw3IEBACiAJCQkJODQ1RTcyRkIwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwODFFQkYzQTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmls
dGVyQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODlDQ0M1MjBGNDRFOTgxMDBCNURB
MTAgLyogUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QzUxMDJEOTUwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCShyZXZpc2lvbiA0NDc0NSkK
KysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgog
I2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgi
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC02NCwxNSArNjUsMTAgQEAgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IExvY2FsU3RvcmFnZTo6
bAogCiBMb2NhbFN0b3JhZ2U6OkxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAg
OiBtX3BhdGgocGF0aC5jb3B5KCkpCisgICAgLCBtX3N5bmNNYW5hZ2VyKDApCiB7Ci0gICAgLy8g
SWYgdGhlIHBhdGggaXMgZW1wdHksIHdlIGtub3cgd2UncmUgbmV2ZXIgZ29pbmcgdG8gYmUgdXNp
bmcgdGhlIHRocmVhZCBmb3IgYW55dGhpbmcsIHNvIGRvbid0IHN0YXJ0IGl0LgotICAgIC8vIElu
IHRoZSBmdXR1cmUsIHdlIG1pZ2h0IGFsc28gd2FudCB0byBjb25zaWRlciByZW1vdmluZyBpdCBm
cm9tIHRoZSBET00gaW4gdGhhdCBjYXNlIC0gPHJkYXI6Ly9wcm9ibGVtLzU5NjA0NzA+Ci0gICAg
aWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3RocmVhZCA9IExv
Y2FsU3RvcmFnZVRocmVhZDo6Y3JlYXRlKCk7Ci0gICAgbV90aHJlYWQtPnN0YXJ0KCk7Ci0gICAg
bV90aHJlYWQtPnNjaGVkdWxlSW1wb3J0KHRoaXMpOworICAgIGlmICghbV9wYXRoLmlzRW1wdHko
KSkKKyAgICAgICAgbV9zeW5jTWFuYWdlciA9IFN0b3JhZ2VTeW5jTWFuYWdlcjo6Y3JlYXRlKG1f
cGF0aCk7CiB9CiAKIExvY2FsU3RvcmFnZTo6fkxvY2FsU3RvcmFnZSgpCkBAIC05Miw1NCArODgs
MTggQEAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gTG9jYWxTdG9yYWdlOjpzdAogICAgIC8vIFRv
IGtub3cgaWYgYW4gYXJlYSBoYXMgcHJldmlvdXNseSBiZWVuIGVzdGFibGlzaGVkLCB3ZSBuZWVk
IHRvIHdhaXQgdW50aWwgdGhpcyBMb2NhbFN0b3JhZ2UgCiAgICAgLy8gb2JqZWN0IGhhcyBmaW5p
c2hlZCBpdCdzIEFyZWFJbXBvcnQgdGFzay4KIAotCiAgICAgLy8gRklYTUU6IElmIHRoZSBzdG9y
YWdlIGFyZWEgaXMgYmVpbmcgZXN0YWJsaXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGhlcmUsIHdl
IG5lZWQgdG8gCiAgICAgLy8gc3luYyBpdHMgZXhpc3RhbmNlIGFuZCBxdW90YSBvdXQgdG8gZGlz
ayB2aWEgYW4gdGFzayBvZiB0eXBlIEFyZWFTeW5jCiAKICAgICBSZWZQdHI8TG9jYWxTdG9yYWdl
QXJlYT4gc3RvcmFnZUFyZWE7CiAgICAgaWYgKHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYU1h
cC5nZXQob3JpZ2luKSkKICAgICAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKLSAg
ICAgICAgCi0gICAgc3RvcmFnZUFyZWEgPSBMb2NhbFN0b3JhZ2VBcmVhOjpjcmVhdGUob3JpZ2lu
LCB0aGlzKTsKKyAgICAKKyAgICBzdG9yYWdlQXJlYSA9IExvY2FsU3RvcmFnZUFyZWE6OmNyZWF0
ZShvcmlnaW4sIG1fc3luY01hbmFnZXIpOwogICAgIG1fc3RvcmFnZUFyZWFNYXAuc2V0KG9yaWdp
biwgc3RvcmFnZUFyZWEpOwogICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7CiB9CiAK
LVN0cmluZyBMb2NhbFN0b3JhZ2U6OmZ1bGxEYXRhYmFzZUZpbGVuYW1lKFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4pCi17Ci0gICAgLy8gRklYTUU6IE9uY2Ugd2UgYWN0dWFsbHkgdHJhY2sgb3JpZ2lu
L3F1b3RhIGVudHJpZXMgdG8gc2VlIHdoaWNoIG9yaWdpbnMgaGF2ZSBsb2NhbCBzdG9yYWdlIGVz
dGFibGlzaGVkLAotICAgIC8vIHdlIHdpbGwgcmV0dXJuIGFuIGVtcHR5IHBhdGggbmFtZSBpZiB0
aGUgb3JpZ2luIGlzbid0IGFsbG93ZWQgdG8gaGF2ZSBMb2NhbFN0b3JhZ2UuCi0gICAgLy8gV2Un
bGwgbmVlZCB0byB3YWl0IGhlcmUgdW50aWwgdGhlIEFyZWFJbXBvcnQgdGFzayB0byBjb21wbGV0
ZSBiZWZvcmUgbWFraW5nIHRoYXQgZGVjaXNpb24uCi0KLSAgICBpZiAobV9wYXRoLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgQVNTRVJUKG9yaWdpbik7Ci0gICAg
aWYgKCFvcmlnaW4pCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmICghbWFrZUFs
bERpcmVjdG9yaWVzKG1fcGF0aCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGVkIHRvIGNy
ZWF0ZSBMb2NhbFN0b3JhZ2UgZGF0YWJhc2UgcGF0aCAlcyIsIG1fcGF0aC51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIH0KLQotICAgIHJldHVybiBwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQobV9wYXRoLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsg
Ii5sb2NhbHN0b3JhZ2UiKTsKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2U6OnBlcmZvcm1JbXBvcnQo
KQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gRklYTUU6IEltcG9y
dCBhbGwga25vd24gbG9jYWwgc3RvcmFnZSBvcmlnaW5zIGhlcmUgYWxvbmcgd2l0aCB0aGVpciBx
dW90YXMKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2U6OnBlcmZvcm1TeW5jKCkKLXsKLSAgICBBU1NF
UlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIEZJWE1FOiBXcml0ZSBvdXQgbmV3IG9yaWdp
bnMgYW5kIHF1b3RhcyBoZXJlCi19Ci0KIHZvaWQgTG9jYWxTdG9yYWdlOjpjbG9zZSgpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTE0NywyOCArMTA3LDggQEAgdm9pZCBMb2Nh
bFN0b3JhZ2U6OmNsb3NlKCkKICAgICBMb2NhbFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQg
PSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwogICAgIGZvciAoTG9jYWxTdG9yYWdlQXJlYU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
ICAgICAgICAgaXQtPnNlY29uZC0+c2NoZWR1bGVGaW5hbFN5bmMoKTsKLQotICAgIGlmIChtX3Ro
cmVhZCkgewotICAgICAgICBtX3RocmVhZC0+dGVybWluYXRlKCk7Ci0gICAgICAgIG1fdGhyZWFk
ID0gMDsKLSAgICB9Ci19Ci0KLWJvb2wgTG9jYWxTdG9yYWdlOjpzY2hlZHVsZUltcG9ydChQYXNz
UmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLQotICAgIGlmIChtX3RocmVhZCkKLSAgICAgICAgbV90aHJlYWQtPnNjaGVkdWxlSW1w
b3J0KGFyZWEpOwotCi0gICAgcmV0dXJuIG1fdGhyZWFkOwotfQotCi12b2lkIExvY2FsU3RvcmFn
ZTo6c2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkKLXsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX3RocmVhZCkKLSAgICAgICAgbV90
aHJlYWQtPnNjaGVkdWxlU3luYyhhcmVhKTsKKyAgICAKKyAgICBtX3N5bmNNYW5hZ2VyID0gMDsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0xvY2Fs
U3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuaAko
cmV2aXNpb24gNDQ3NDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDIwICsyOSwxNyBAQAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAog
I2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEuaCIKLSNpbmNsdWRlICJMb2NhbFN0b3JhZ2VUYXNr
LmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW5IYXNoLmgiCiAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFBhZ2VHcm91cDsK
ICAgICBjbGFzcyBTdG9yYWdlQXJlYTsKKyAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI7CiAK
LSAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxMb2NhbFN0
b3JhZ2U+IHsKKyAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMb2Nh
bFN0b3JhZ2U+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIH5Mb2NhbFN0b3JhZ2UoKTsKIApAQCAt
NTAsOSArNDcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgUGFzc1JlZlB0cjxT
dG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qKTsKIAotICAgICAgICBib29s
IHNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4pOwotICAgICAgICB2
b2lkIHNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKLQogICAgICAg
ICB2b2lkIGNsb3NlKCk7CiAKICAgICBwcml2YXRlOgpAQCAtNjEsMjEgKzU1LDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiwgUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+IExvY2Fs
U3RvcmFnZUFyZWFNYXA7CiAgICAgICAgIExvY2FsU3RvcmFnZUFyZWFNYXAgbV9zdG9yYWdlQXJl
YU1hcDsKIAotICAgICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPiBtX3RocmVhZDsKLQot
ICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgc3ViamVjdCB0byB0aHJlYWQgc3luY2hy
b25pemF0aW9uIGlzc3VlcwotICAgIHB1YmxpYzoKLSAgICAgICAgLy8gVG8gYmUgY2FsbGVkIGZy
b20gdGhlIGJhY2tncm91bmQgdGhyZWFkOgotICAgICAgICBTdHJpbmcgZnVsbERhdGFiYXNlRmls
ZW5hbWUoU2VjdXJpdHlPcmlnaW4qKTsKLQotICAgICAgICB2b2lkIHBlcmZvcm1JbXBvcnQoKTsK
LSAgICAgICAgdm9pZCBwZXJmb3JtU3luYygpOwotCi0gICAgcHJpdmF0ZToKICAgICAgICAgU3Ry
aW5nIG1fcGF0aDsKLQotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiwgdW5zaWduZWQgbG9uZyBsb25nLCBTZWN1cml0eU9yaWdpbkhhc2g+IFNlY3VyaXR5T3Jp
Z2luUXVvdGVNYXA7Ci0gICAgICAgIFNlY3VyaXR5T3JpZ2luUXVvdGVNYXAgbV9zZWN1cml0eU9y
aWdpblF1b3RlTWFwOworICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N5bmNN
YW5hZ2VyOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
c3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3Jh
Z2UvTG9jYWxTdG9yYWdlQXJlYS5jcHAJKHJldmlzaW9uIDQ0NzQ1KQorKysgV2ViQ29yZS9zdG9y
YWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxOSArNDYsMTcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gSW5zdGVhZCwgcXVldWUgdXAgYSBiYXRjaCBvZiBp
dGVtcyB0byBzeW5jIGFuZCBhY3R1YWxseSBkbyB0aGUgc3luYyBhdCB0aGUgZm9sbG93aW5nIGlu
dGVydmFsLgogc3RhdGljIGNvbnN0IGRvdWJsZSBMb2NhbFN0b3JhZ2VTeW5jSW50ZXJ2YWwgPSAx
LjA7CiAKLUxvY2FsU3RvcmFnZUFyZWE6OkxvY2FsU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiwgTG9jYWxTdG9yYWdlKiBsb2NhbFN0b3JhZ2UpCitMb2NhbFN0b3JhZ2VBcmVhOjpM
b2NhbFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFn
ZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikKICAgICA6IFN0b3JhZ2VBcmVhKG9yaWdpbikKICAg
ICAsIG1fc3luY1RpbWVyKHRoaXMsICZMb2NhbFN0b3JhZ2VBcmVhOjpzeW5jVGltZXJGaXJlZCkK
ICAgICAsIG1faXRlbXNDbGVhcmVkKGZhbHNlKQogICAgICwgbV9maW5hbFN5bmNTY2hlZHVsZWQo
ZmFsc2UpCi0gICAgLCBtX2xvY2FsU3RvcmFnZShsb2NhbFN0b3JhZ2UpCisgICAgLCBtX3N5bmNN
YW5hZ2VyKHN5bmNNYW5hZ2VyKQogICAgICwgbV9jbGVhckl0ZW1zV2hpbGVTeW5jaW5nKGZhbHNl
KQogICAgICwgbV9zeW5jU2NoZWR1bGVkKGZhbHNlKQogICAgICwgbV9pbXBvcnRDb21wbGV0ZShm
YWxzZSkKIHsKLSAgICBBU1NFUlQobV9sb2NhbFN0b3JhZ2UpOwotICAgIAotICAgIGlmICghbV9s
b2NhbFN0b3JhZ2UtPnNjaGVkdWxlSW1wb3J0KHRoaXMpKQorICAgIGlmICghbV9zeW5jTWFuYWdl
ciB8fCAhbV9zeW5jTWFuYWdlci0+c2NoZWR1bGVJbXBvcnQodGhpcykpCiAgICAgICAgIG1faW1w
b3J0Q29tcGxldGUgPSB0cnVlOwogfQogCkBAIC02OSw2ICs2NywxMCBAQCBMb2NhbFN0b3JhZ2VB
cmVhOjp+TG9jYWxTdG9yYWdlQXJlYSgpCiAKIHZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6c2NoZWR1
bGVGaW5hbFN5bmMoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFt
X3N5bmNNYW5hZ2VyKQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgaWYgKG1fc3luY1RpbWVy
LmlzQWN0aXZlKCkpCiAgICAgICAgIG1fc3luY1RpbWVyLnN0b3AoKTsKICAgICBlbHNlIHsKQEAg
LTI2OSw2ICsyNzEsOCBAQCB2b2lkIExvY2FsU3RvcmFnZUFyZWE6OnNjaGVkdWxlQ2xlYXIoKQog
dm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpzeW5jVGltZXJGaXJlZChUaW1lcjxMb2NhbFN0b3JhZ2VB
cmVhPiopCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fc3luY01h
bmFnZXIpCisgICAgICAgIHJldHVybjsKIAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpp
dGVyYXRvciBpdCA9IG1fY2hhbmdlZEl0ZW1zLmJlZ2luKCk7CiAgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz46Oml0ZXJhdG9yIGVuZCA9IG1fY2hhbmdlZEl0ZW1zLmVuZCgpOwpAQCAtMjkyLDcg
KzI5Niw3IEBAIHZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6c3luY1RpbWVyRmlyZWQoVGkKICAgICAg
ICAgICAgIC8vIHBlcmZvcm1TeW5jIGZ1bmN0aW9uLgogICAgICAgICAgICAgZGlzYWJsZVN1ZGRl
blRlcm1pbmF0aW9uKCk7CiAKLSAgICAgICAgICAgIG1fbG9jYWxTdG9yYWdlLT5zY2hlZHVsZVN5
bmModGhpcyk7CisgICAgICAgICAgICBtX3N5bmNNYW5hZ2VyLT5zY2hlZHVsZVN5bmModGhpcyk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMwNyw5ICszMTEsMTEgQEAgdm9pZCBMb2NhbFN0b3Jh
Z2VBcmVhOjpwZXJmb3JtSW1wb3J0KCkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
ICAgICBBU1NFUlQoIW1fZGF0YWJhc2UuaXNPcGVuKCkpOworICAgIGlmICghbV9zeW5jTWFuYWdl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX3N5
bmNNYW5hZ2VyLT5mdWxsRGF0YWJhc2VGaWxlbmFtZShzZWN1cml0eU9yaWdpbigpKTsKIAotICAg
IFN0cmluZyBkYXRhYmFzZUZpbGVuYW1lID0gbV9sb2NhbFN0b3JhZ2UtPmZ1bGxEYXRhYmFzZUZp
bGVuYW1lKHNlY3VyaXR5T3JpZ2luKCkpOwotICAgIAogICAgIGlmIChkYXRhYmFzZUZpbGVuYW1l
LmlzRW1wdHkoKSkgewogICAgICAgICBMT0dfRVJST1IoIkZpbGVuYW1lIGZvciBsb2NhbCBzdG9y
YWdlIGRhdGFiYXNlIGlzIGVtcHR5IC0gY2Fubm90IG9wZW4gZm9yIHBlcnNpc3RlbnQgc3RvcmFn
ZSIpOwogICAgICAgICBtYXJrSW1wb3J0ZWQoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2Nh
bFN0b3JhZ2VBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFn
ZUFyZWEuaAkocmV2aXNpb24gNDQ3NDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdl
QXJlYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMyArMzEsMjQgQEAKICNpbmNsdWRlICJTUUxp
dGVEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSAiU3RyaW5n
SGFzaC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IAotICAgIGNsYXNzIExvY2FsU3RvcmFnZTsKKyAgICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI7
CiAgICAgCiAgICAgY2xhc3MgTG9jYWxTdG9yYWdlQXJlYSA6IHB1YmxpYyBTdG9yYWdlQXJlYSB7
CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5Mb2NhbFN0b3JhZ2VBcmVhKCk7CiAKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gY3JlYXRlKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4sIExvY2FsU3RvcmFnZSogbG9jYWxTdG9yYWdlKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgTG9jYWxTdG9yYWdlQXJlYShvcmlnaW4sIGxvY2FsU3RvcmFnZSkpOyB9CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGNyZWF0ZShTZWN1cml0eU9y
aWdpbiogb3JpZ2luLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2VBcmVhKG9yaWdpbiwgc3luY01hbmFn
ZXIpKTsgfQogCiAgICAgICAgIHZvaWQgc2NoZWR1bGVGaW5hbFN5bmMoKTsKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIExvY2FsU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qLCBMb2NhbFN0b3Jh
Z2UqKTsKKyAgICAgICAgTG9jYWxTdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiosIFBhc3NSZWZQ
dHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcik7CiAKICAgICAgICAgdmlydHVhbCB2
b2lkIGl0ZW1DaGFuZ2VkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVl
LCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgaXRlbVJlbW92ZWQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
b2xkVmFsdWUsIEZyYW1lKiBzb3VyY2VGcmFtZSk7CkBAIC02Myw3ICs2NCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIGJvb2wgbV9maW5hbFN5bmNTY2hlZHVsZWQ7
CiAKLSAgICAgICAgTG9jYWxTdG9yYWdlKiBtX2xvY2FsU3RvcmFnZTsKKyAgICAgICAgUmVmUHRy
PFN0b3JhZ2VTeW5jTWFuYWdlcj4gbV9zeW5jTWFuYWdlcjsKIAogICAgICAgICAvLyBUaGUgZGF0
YWJhc2UgaGFuZGxlIHdpbGwgb25seSBldmVyIGJlIG9wZW5lZCBhbmQgdXNlZCBvbiB0aGUgYmFj
a2dyb3VuZCB0aHJlYWQuCiAgICAgICAgIFNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CkluZGV4
OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3BwCShyZXZpc2lvbiA0NDc0NSkKKysrIFdl
YkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
MTQgKzQyLDYgQEAgTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIAogICAg
IEFTU0VSVChtX3R5cGUgPT0gQXJlYUltcG9ydCB8fCBtX3R5cGUgPT0gQXJlYVN5bmMpOwogfQog
Ci1Mb2NhbFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNrKFR5cGUgdHlwZSwgUGFzc1JlZlB0
cjxMb2NhbFN0b3JhZ2U+IHN0b3JhZ2UpCi0gICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1fc3Rv
cmFnZShzdG9yYWdlKQotewotICAgIEFTU0VSVChtX3N0b3JhZ2UpOwotICAgIEFTU0VSVChtX3R5
cGUgPT0gU3RvcmFnZUltcG9ydCB8fCBtX3R5cGUgPT0gU3RvcmFnZVN5bmMpOwotfQotCiBMb2Nh
bFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNrKFR5cGUgdHlwZSwgUGFzc1JlZlB0cjxMb2Nh
bFN0b3JhZ2VUaHJlYWQ+IHRocmVhZCkKICAgICA6IG1fdHlwZSh0eXBlKQogICAgICwgbV90aHJl
YWQodGhyZWFkKQpAQCAtNjEsMTQgKzUzLDYgQEAgTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9y
YWdlVGFzayhUeXBlIAogdm9pZCBMb2NhbFN0b3JhZ2VUYXNrOjpwZXJmb3JtVGFzaygpCiB7CiAg
ICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBTdG9yYWdlSW1wb3J0OgotICAgICAg
ICAgICAgQVNTRVJUKG1fc3RvcmFnZSk7Ci0gICAgICAgICAgICBtX3N0b3JhZ2UtPnBlcmZvcm1J
bXBvcnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFN0b3JhZ2VTeW5jOgot
ICAgICAgICAgICAgQVNTRVJUKG1fc3RvcmFnZSk7Ci0gICAgICAgICAgICBtX3N0b3JhZ2UtPnBl
cmZvcm1TeW5jKCk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcmVhSW1wb3J0
OgogICAgICAgICAgICAgQVNTRVJUKG1fYXJlYSk7CiAgICAgICAgICAgICBtX2FyZWEtPnBlcmZv
cm1JbXBvcnQoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAkocmV2aXNpb24g
NDQ3NDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCwxNyArMzQsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xh
c3MgTG9jYWxTdG9yYWdlOwogICAgIGNsYXNzIExvY2FsU3RvcmFnZUFyZWE7CiAgICAgY2xhc3Mg
TG9jYWxTdG9yYWdlVGhyZWFkOwogCiAgICAgY2xhc3MgTG9jYWxTdG9yYWdlVGFzayA6IHB1Ymxp
YyBUaHJlYWRTYWZlU2hhcmVkPExvY2FsU3RvcmFnZVRhc2s+IHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIGVudW0gVHlwZSB7IFN0b3JhZ2VJbXBvcnQsIFN0b3JhZ2VTeW5jLCBBcmVhSW1wb3J0LCBB
cmVhU3luYywgVGVybWluYXRlVGhyZWFkIH07CisgICAgICAgIGVudW0gVHlwZSB7IEFyZWFJbXBv
cnQsIEFyZWFTeW5jLCBUZXJtaW5hdGVUaHJlYWQgfTsKIAotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3Jh
Z2U+IHN0b3JhZ2UpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKFN0b3Jh
Z2VJbXBvcnQsIHN0b3JhZ2UpKTsgfQogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0
b3JhZ2VUYXNrPiBjcmVhdGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVh
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlVGFzayhBcmVhSW1wb3J0LCBhcmVh
KSk7IH0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRl
U3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gc3RvcmFnZSkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IExvY2FsU3RvcmFnZVRhc2soU3RvcmFnZVN5bmMsIHN0b3JhZ2UpKTsgfQogICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVTeW5jKFBhc3NSZWZQdHI8
TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFn
ZVRhc2soQXJlYVN5bmMsIGFyZWEpKTsgfQogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2Nh
bFN0b3JhZ2VUYXNrPiBjcmVhdGVUZXJtaW5hdGUoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUaHJl
YWQ+IHRocmVhZCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZVRhc2soVGVybWlu
YXRlVGhyZWFkLCB0aHJlYWQpKTsgfQogCkBAIC01MiwxMiArNDksMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgTG9jYWxTdG9yYWdlVGFzayhUeXBlLCBQ
YXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKLSAgICAgICAgTG9jYWxTdG9yYWdlVGFzayhU
eXBlLCBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4pOwogICAgICAgICBMb2NhbFN0b3JhZ2VUYXNr
KFR5cGUsIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPik7CiAKICAgICAgICAgVHlwZSBt
X3R5cGU7CiAgICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBtX2FyZWE7Ci0gICAgICAg
IFJlZlB0cjxMb2NhbFN0b3JhZ2U+IG1fc3RvcmFnZTsKICAgICAgICAgUmVmUHRyPExvY2FsU3Rv
cmFnZVRocmVhZD4gbV90aHJlYWQ7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0xv
Y2FsU3RvcmFnZVRocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2Fs
U3RvcmFnZVRocmVhZC5jcHAJKHJldmlzaW9uIDQ0NzQ1KQorKysgV2ViQ29yZS9zdG9yYWdlL0xv
Y2FsU3RvcmFnZVRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDE4ICs4Nyw2IEBAIHZv
aWQqIExvY2FsU3RvcmFnZVRocmVhZDo6bG9jYWxTdG9yYWdlVGgKICAgICByZXR1cm4gMDsKIH0K
IAotdm9pZCBMb2NhbFN0b3JhZ2VUaHJlYWQ6OnNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9j
YWxTdG9yYWdlPiBzdG9yYWdlKQotewotICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAmJiBt
X3RocmVhZElEKTsKLSAgICBtX3F1ZXVlLmFwcGVuZChMb2NhbFN0b3JhZ2VUYXNrOjpjcmVhdGVJ
bXBvcnQoc3RvcmFnZSkpOwotfQotCi12b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVT
eW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBzdG9yYWdlKQotewotICAgIEFTU0VSVCghbV9x
dWV1ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKLSAgICBtX3F1ZXVlLmFwcGVuZChMb2NhbFN0
b3JhZ2VUYXNrOjpjcmVhdGVTeW5jKHN0b3JhZ2UpKTsKLX0KLQogdm9pZCBMb2NhbFN0b3JhZ2VU
aHJlYWQ6OnNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkK
IHsKICAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5oCShyZXZpc2lvbiA0NDc0NSkKKysrIFdlYkNv
cmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyAr
MzUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBMb2NhbFN0b3JhZ2U7
CiAgICAgY2xhc3MgTG9jYWxTdG9yYWdlQXJlYTsKICAgICBjbGFzcyBMb2NhbFN0b3JhZ2VUYXNr
OwogCkBAIC00NSw4ICs0NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29s
IHN0YXJ0KCk7CiAKLSAgICAgICAgdm9pZCBzY2hlZHVsZUltcG9ydChQYXNzUmVmUHRyPExvY2Fs
U3RvcmFnZT4pOwotICAgICAgICB2b2lkIHNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3Rv
cmFnZT4pOwogICAgICAgICB2b2lkIHNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9y
YWdlQXJlYT4pOwogICAgICAgICB2b2lkIHNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3Rv
cmFnZUFyZWE+KTsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmgJKHJldmlzaW9uIDQ0
NzQ1KQorKysgV2ViQ29yZS9zdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJTZXNzaW9uU3RvcmFnZUFyZWEuaCIKIAogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAkocmV2aXNpb24gNDQ3NDUpCShmcm9tIFdlYkNv
cmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwOjQ0NzQ1KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VTeW5jTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZS5oIgorCisjaWYgRU5BQkxFKERPTV9TVE9S
QUdFKQorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFt
ZVRyZWUuaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCisjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIExvY2FsU3RvcmFnZSo+IExvY2FsU3RvcmFnZU1hcDsKKworc3Rh
dGljIExvY2FsU3RvcmFnZU1hcCYgbG9jYWxTdG9yYWdlTWFwKCkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKExvY2FsU3RvcmFnZU1hcCwgbG9jYWxTdG9yYWdlTWFwLCAoKSk7CisgICAgcmV0
dXJuIGxvY2FsU3RvcmFnZU1hcDsKK30KKworUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IExvY2Fs
U3RvcmFnZTo6bG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBjb25zdCBT
dHJpbmcgbG9va3VwUGF0aCA9IHBhdGguaXNOdWxsKCkgPyBTdHJpbmcoIiIpIDogcGF0aDsKKyAg
ICBMb2NhbFN0b3JhZ2VNYXA6Oml0ZXJhdG9yIGl0ID0gbG9jYWxTdG9yYWdlTWFwKCkuZmluZChs
b29rdXBQYXRoKTsKKyAgICBpZiAoaXQgPT0gbG9jYWxTdG9yYWdlTWFwKCkuZW5kKCkpIHsKKyAg
ICAgICAgUmVmUHRyPExvY2FsU3RvcmFnZT4gbG9jYWxTdG9yYWdlID0gYWRvcHRSZWYobmV3IExv
Y2FsU3RvcmFnZShsb29rdXBQYXRoKSk7CisgICAgICAgIGxvY2FsU3RvcmFnZU1hcCgpLnNldChs
b29rdXBQYXRoLCBsb2NhbFN0b3JhZ2UuZ2V0KCkpOworICAgICAgICByZXR1cm4gbG9jYWxTdG9y
YWdlLnJlbGVhc2UoKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Cit9CisK
K0xvY2FsU3RvcmFnZTo6TG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCkKKyAgICA6IG1f
cGF0aChwYXRoLmNvcHkoKSkKK3sKKyAgICAvLyBJZiB0aGUgcGF0aCBpcyBlbXB0eSwgd2Uga25v
dyB3ZSdyZSBuZXZlciBnb2luZyB0byBiZSB1c2luZyB0aGUgdGhyZWFkIGZvciBhbnl0aGluZywg
c28gZG9uJ3Qgc3RhcnQgaXQuCisgICAgLy8gSW4gdGhlIGZ1dHVyZSwgd2UgbWlnaHQgYWxzbyB3
YW50IHRvIGNvbnNpZGVyIHJlbW92aW5nIGl0IGZyb20gdGhlIERPTSBpbiB0aGF0IGNhc2UgLSA8
cmRhcjovL3Byb2JsZW0vNTk2MDQ3MD4KKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fdGhyZWFkID0gTG9jYWxTdG9yYWdlVGhyZWFkOjpjcmVhdGUoKTsK
KyAgICBtX3RocmVhZC0+c3RhcnQoKTsKKyAgICBtX3RocmVhZC0+c2NoZWR1bGVJbXBvcnQodGhp
cyk7Cit9CisKK0xvY2FsU3RvcmFnZTo6fkxvY2FsU3RvcmFnZSgpCit7CisgICAgQVNTRVJUKGxv
Y2FsU3RvcmFnZU1hcCgpLmdldChtX3BhdGgpID09IHRoaXMpOworICAgIGxvY2FsU3RvcmFnZU1h
cCgpLnJlbW92ZShtX3BhdGgpOworfQorCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBMb2NhbFN0
b3JhZ2U6OnN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIEZJWE1FOiBJZiB0aGUgc2VjdXJpdHkgb3JpZ2lu
IGluIHF1ZXN0aW9uIGhhcyBuZXZlciBoYWQgYSBzdG9yYWdlIGFyZWEgZXN0YWJsaXNoZWQsCisg
ICAgLy8gd2UgbmVlZCB0byBhc2sgYSBjbGllbnQgY2FsbCBpZiBlc3RhYmxpc2hpbmcgaXQgaXMg
b2theS4gIElmIHRoZSBjbGllbnQgZGVuaWVzIHRoZSByZXF1ZXN0LAorICAgIC8vIHRoaXMgbWV0
aG9kIHdpbGwgcmV0dXJuIG51bGwuCisgICAgLy8gVGhlIHNvdXJjZUZyYW1lIGFyZ3VtZW50IGV4
aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2YgYXNraW5nIGEgY2xpZW50LgorICAgIC8vIFRvIGtub3cg
aWYgYW4gYXJlYSBoYXMgcHJldmlvdXNseSBiZWVuIGVzdGFibGlzaGVkLCB3ZSBuZWVkIHRvIHdh
aXQgdW50aWwgdGhpcyBMb2NhbFN0b3JhZ2UgCisgICAgLy8gb2JqZWN0IGhhcyBmaW5pc2hlZCBp
dCdzIEFyZWFJbXBvcnQgdGFzay4KKworCisgICAgLy8gRklYTUU6IElmIHRoZSBzdG9yYWdlIGFy
ZWEgaXMgYmVpbmcgZXN0YWJsaXNoZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGhlcmUsIHdlIG5lZWQg
dG8gCisgICAgLy8gc3luYyBpdHMgZXhpc3RhbmNlIGFuZCBxdW90YSBvdXQgdG8gZGlzayB2aWEg
YW4gdGFzayBvZiB0eXBlIEFyZWFTeW5jCisKKyAgICBSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4g
c3RvcmFnZUFyZWE7CisgICAgaWYgKHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYU1hcC5nZXQo
b3JpZ2luKSkKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKKyAgICAgICAg
CisgICAgc3RvcmFnZUFyZWEgPSBMb2NhbFN0b3JhZ2VBcmVhOjpjcmVhdGUob3JpZ2luLCB0aGlz
KTsKKyAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVhKTsKKyAgICBy
ZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOworfQorCitTdHJpbmcgTG9jYWxTdG9yYWdlOjpm
dWxsRGF0YWJhc2VGaWxlbmFtZShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQoreworICAgIC8vIEZJ
WE1FOiBPbmNlIHdlIGFjdHVhbGx5IHRyYWNrIG9yaWdpbi9xdW90YSBlbnRyaWVzIHRvIHNlZSB3
aGljaCBvcmlnaW5zIGhhdmUgbG9jYWwgc3RvcmFnZSBlc3RhYmxpc2hlZCwKKyAgICAvLyB3ZSB3
aWxsIHJldHVybiBhbiBlbXB0eSBwYXRoIG5hbWUgaWYgdGhlIG9yaWdpbiBpc24ndCBhbGxvd2Vk
IHRvIGhhdmUgTG9jYWxTdG9yYWdlLgorICAgIC8vIFdlJ2xsIG5lZWQgdG8gd2FpdCBoZXJlIHVu
dGlsIHRoZSBBcmVhSW1wb3J0IHRhc2sgdG8gY29tcGxldGUgYmVmb3JlIG1ha2luZyB0aGF0IGRl
Y2lzaW9uLgorCisgICAgaWYgKG1fcGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgIEFTU0VSVChvcmlnaW4pOworICAgIGlmICghb3JpZ2luKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhtX3BhdGgpKSB7
CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlZCB0byBjcmVhdGUgTG9jYWxTdG9yYWdlIGRhdGFi
YXNlIHBhdGggJXMiLCBtX3BhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fcGF0
aCwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICIubG9jYWxzdG9yYWdlIik7Cit9CisK
K3ZvaWQgTG9jYWxTdG9yYWdlOjpwZXJmb3JtSW1wb3J0KCkKK3sKKyAgICBBU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKKworICAgIC8vIEZJWE1FOiBJbXBvcnQgYWxsIGtub3duIGxvY2FsIHN0b3Jh
Z2Ugb3JpZ2lucyBoZXJlIGFsb25nIHdpdGggdGhlaXIgcXVvdGFzCit9CisKK3ZvaWQgTG9jYWxT
dG9yYWdlOjpwZXJmb3JtU3luYygpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisK
KyAgICAvLyBGSVhNRTogV3JpdGUgb3V0IG5ldyBvcmlnaW5zIGFuZCBxdW90YXMgaGVyZQorfQor
Cit2b2lkIExvY2FsU3RvcmFnZTo6Y2xvc2UoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisKKyAgICBMb2NhbFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VB
cmVhTWFwLmVuZCgpOworICAgIGZvciAoTG9jYWxTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQg
PSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQt
PnNlY29uZC0+c2NoZWR1bGVGaW5hbFN5bmMoKTsKKworICAgIGlmIChtX3RocmVhZCkgeworICAg
ICAgICBtX3RocmVhZC0+dGVybWluYXRlKCk7CisgICAgICAgIG1fdGhyZWFkID0gMDsKKyAgICB9
Cit9CisKK2Jvb2wgTG9jYWxTdG9yYWdlOjpzY2hlZHVsZUltcG9ydChQYXNzUmVmUHRyPExvY2Fs
U3RvcmFnZUFyZWE+IGFyZWEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAg
IGlmIChtX3RocmVhZCkKKyAgICAgICAgbV90aHJlYWQtPnNjaGVkdWxlSW1wb3J0KGFyZWEpOwor
CisgICAgcmV0dXJuIG1fdGhyZWFkOworfQorCit2b2lkIExvY2FsU3RvcmFnZTo6c2NoZWR1bGVT
eW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIGlmIChtX3RocmVhZCkKKyAgICAgICAgbV90aHJlYWQtPnNjaGVk
dWxlU3luYyhhcmVhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKERPTV9TVE9SQUdFKQorCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNN
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5h
Z2VyLmNwcAkocmV2aXNpb24gNDQ3NDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNN
YW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMb2NhbFN0b3JhZ2UuaCIKKyNpbmNsdWRlICJTdG9y
YWdlU3luY01hbmFnZXIuaCIKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIApAQCAtMzMsNyAr
MzMsNiBAQAogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lVHJlZS5oIgotI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFy
ZWEuaCIKQEAgLTQxLDgyICs0MCwyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIExvY2FsU3RvcmFnZSo+IExvY2FsU3RvcmFnZU1hcDsKLQotc3Rh
dGljIExvY2FsU3RvcmFnZU1hcCYgbG9jYWxTdG9yYWdlTWFwKCkKK1Bhc3NSZWZQdHI8U3RvcmFn
ZVN5bmNNYW5hZ2VyPiBTdG9yYWdlU3luY01hbmFnZXI6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHBh
dGgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VNYXAsIGxvY2FsU3Rv
cmFnZU1hcCwgKCkpOwotICAgIHJldHVybiBsb2NhbFN0b3JhZ2VNYXA7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTdG9yYWdlU3luY01hbmFnZXIocGF0aCkpOwogfQogCi1QYXNzUmVmUHRyPExv
Y2FsU3RvcmFnZT4gTG9jYWxTdG9yYWdlOjpsb2NhbFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBwYXRo
KQotewotICAgIGNvbnN0IFN0cmluZyBsb29rdXBQYXRoID0gcGF0aC5pc051bGwoKSA/IFN0cmlu
ZygiIikgOiBwYXRoOwotICAgIExvY2FsU3RvcmFnZU1hcDo6aXRlcmF0b3IgaXQgPSBsb2NhbFN0
b3JhZ2VNYXAoKS5maW5kKGxvb2t1cFBhdGgpOwotICAgIGlmIChpdCA9PSBsb2NhbFN0b3JhZ2VN
YXAoKS5lbmQoKSkgewotICAgICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlPiBsb2NhbFN0b3JhZ2Ug
PSBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlKGxvb2t1cFBhdGgpKTsKLSAgICAgICAgbG9jYWxT
dG9yYWdlTWFwKCkuc2V0KGxvb2t1cFBhdGgsIGxvY2FsU3RvcmFnZS5nZXQoKSk7Ci0gICAgICAg
IHJldHVybiBsb2NhbFN0b3JhZ2UucmVsZWFzZSgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
aXQtPnNlY29uZDsKLX0KLQotTG9jYWxTdG9yYWdlOjpMb2NhbFN0b3JhZ2UoY29uc3QgU3RyaW5n
JiBwYXRoKQorU3RvcmFnZVN5bmNNYW5hZ2VyOjpTdG9yYWdlU3luY01hbmFnZXIoY29uc3QgU3Ry
aW5nJiBwYXRoKQogICAgIDogbV9wYXRoKHBhdGguY29weSgpKQogewotICAgIC8vIElmIHRoZSBw
YXRoIGlzIGVtcHR5LCB3ZSBrbm93IHdlJ3JlIG5ldmVyIGdvaW5nIHRvIGJlIHVzaW5nIHRoZSB0
aHJlYWQgZm9yIGFueXRoaW5nLCBzbyBkb24ndCBzdGFydCBpdC4KLSAgICAvLyBJbiB0aGUgZnV0
dXJlLCB3ZSBtaWdodCBhbHNvIHdhbnQgdG8gY29uc2lkZXIgcmVtb3ZpbmcgaXQgZnJvbSB0aGUg
RE9NIGluIHRoYXQgY2FzZSAtIDxyZGFyOi8vcHJvYmxlbS81OTYwNDcwPgotICAgIGlmIChwYXRo
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghbV9wYXRoLmlzRW1wdHko
KSk7CiAKICAgICBtX3RocmVhZCA9IExvY2FsU3RvcmFnZVRocmVhZDo6Y3JlYXRlKCk7CiAgICAg
bV90aHJlYWQtPnN0YXJ0KCk7Ci0gICAgbV90aHJlYWQtPnNjaGVkdWxlSW1wb3J0KHRoaXMpOwot
fQotCi1Mb2NhbFN0b3JhZ2U6On5Mb2NhbFN0b3JhZ2UoKQotewotICAgIEFTU0VSVChsb2NhbFN0
b3JhZ2VNYXAoKS5nZXQobV9wYXRoKSA9PSB0aGlzKTsKLSAgICBsb2NhbFN0b3JhZ2VNYXAoKS5y
ZW1vdmUobV9wYXRoKTsKIH0KIAotUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gTG9jYWxTdG9yYWdl
OjpzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luKQorU3RyaW5nIFN0b3JhZ2VTeW5j
TWFuYWdlcjo6ZnVsbERhdGFiYXNlRmlsZW5hbWUoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKIHsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gRklYTUU6IElmIHRoZSBzZWN1
cml0eSBvcmlnaW4gaW4gcXVlc3Rpb24gaGFzIG5ldmVyIGhhZCBhIHN0b3JhZ2UgYXJlYSBlc3Rh
Ymxpc2hlZCwKLSAgICAvLyB3ZSBuZWVkIHRvIGFzayBhIGNsaWVudCBjYWxsIGlmIGVzdGFibGlz
aGluZyBpdCBpcyBva2F5LiAgSWYgdGhlIGNsaWVudCBkZW5pZXMgdGhlIHJlcXVlc3QsCi0gICAg
Ly8gdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbnVsbC4KLSAgICAvLyBUaGUgc291cmNlRnJhbWUg
YXJndW1lbnQgZXhpc3RzIGZvciB0aGUgcHVycG9zZSBvZiBhc2tpbmcgYSBjbGllbnQuCi0gICAg
Ly8gVG8ga25vdyBpZiBhbiBhcmVhIGhhcyBwcmV2aW91c2x5IGJlZW4gZXN0YWJsaXNoZWQsIHdl
IG5lZWQgdG8gd2FpdCB1bnRpbCB0aGlzIExvY2FsU3RvcmFnZSAKLSAgICAvLyBvYmplY3QgaGFz
IGZpbmlzaGVkIGl0J3MgQXJlYUltcG9ydCB0YXNrLgotCi0KLSAgICAvLyBGSVhNRTogSWYgdGhl
IHN0b3JhZ2UgYXJlYSBpcyBiZWluZyBlc3RhYmxpc2hlZCBmb3IgdGhlIGZpcnN0IHRpbWUgaGVy
ZSwgd2UgbmVlZCB0byAKLSAgICAvLyBzeW5jIGl0cyBleGlzdGFuY2UgYW5kIHF1b3RhIG91dCB0
byBkaXNrIHZpYSBhbiB0YXNrIG9mIHR5cGUgQXJlYVN5bmMKLQotICAgIFJlZlB0cjxMb2NhbFN0
b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYTsKLSAgICBpZiAoc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VB
cmVhTWFwLmdldChvcmlnaW4pKQotICAgICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgp
OwotICAgICAgICAKLSAgICBzdG9yYWdlQXJlYSA9IExvY2FsU3RvcmFnZUFyZWE6OmNyZWF0ZShv
cmlnaW4sIHRoaXMpOwotICAgIG1fc3RvcmFnZUFyZWFNYXAuc2V0KG9yaWdpbiwgc3RvcmFnZUFy
ZWEpOwotICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7Ci19Ci0KLVN0cmluZyBMb2Nh
bFN0b3JhZ2U6OmZ1bGxEYXRhYmFzZUZpbGVuYW1lKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCi17
Ci0gICAgLy8gRklYTUU6IE9uY2Ugd2UgYWN0dWFsbHkgdHJhY2sgb3JpZ2luL3F1b3RhIGVudHJp
ZXMgdG8gc2VlIHdoaWNoIG9yaWdpbnMgaGF2ZSBsb2NhbCBzdG9yYWdlIGVzdGFibGlzaGVkLAot
ICAgIC8vIHdlIHdpbGwgcmV0dXJuIGFuIGVtcHR5IHBhdGggbmFtZSBpZiB0aGUgb3JpZ2luIGlz
bid0IGFsbG93ZWQgdG8gaGF2ZSBMb2NhbFN0b3JhZ2UuCi0gICAgLy8gV2UnbGwgbmVlZCB0byB3
YWl0IGhlcmUgdW50aWwgdGhlIEFyZWFJbXBvcnQgdGFzayB0byBjb21wbGV0ZSBiZWZvcmUgbWFr
aW5nIHRoYXQgZGVjaXNpb24uCi0KLSAgICBpZiAobV9wYXRoLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotCiAgICAgQVNTRVJUKG9yaWdpbik7Ci0gICAgaWYgKCFvcmlnaW4p
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIGlmICghbWFrZUFsbERpcmVjdG9yaWVz
KG1fcGF0aCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGVkIHRvIGNyZWF0ZSBMb2NhbFN0
b3JhZ2UgZGF0YWJhc2UgcGF0aCAlcyIsIG1fcGF0aC51dGY4KCkuZGF0YSgpKTsKQEAgLTEyNiw0
NyArNjYsMzAgQEAgU3RyaW5nIExvY2FsU3RvcmFnZTo6ZnVsbERhdGFiYXNlRmlsZW5hbQogICAg
IHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9wYXRoLCBvcmlnaW4tPmRhdGFiYXNl
SWRlbnRpZmllcigpICsgIi5sb2NhbHN0b3JhZ2UiKTsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2U6
OnBlcmZvcm1JbXBvcnQoKQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAg
Ly8gRklYTUU6IEltcG9ydCBhbGwga25vd24gbG9jYWwgc3RvcmFnZSBvcmlnaW5zIGhlcmUgYWxv
bmcgd2l0aCB0aGVpciBxdW90YXMKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2U6OnBlcmZvcm1TeW5j
KCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIEZJWE1FOiBXcml0
ZSBvdXQgbmV3IG9yaWdpbnMgYW5kIHF1b3RhcyBoZXJlCi19Ci0KLXZvaWQgTG9jYWxTdG9yYWdl
OjpjbG9zZSgpCit2b2lkIFN0b3JhZ2VTeW5jTWFuYWdlcjo6Y2xvc2UoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBMb2NhbFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBl
bmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwotICAgIGZvciAoTG9jYWxTdG9yYWdlQXJlYU1h
cDo6aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgaXQtPnNlY29uZC0+c2NoZWR1bGVGaW5hbFN5bmMoKTsKLQorICAgIAogICAg
IGlmIChtX3RocmVhZCkgewogICAgICAgICBtX3RocmVhZC0+dGVybWluYXRlKCk7CiAgICAgICAg
IG1fdGhyZWFkID0gMDsKICAgICB9CiB9CiAKLWJvb2wgTG9jYWxTdG9yYWdlOjpzY2hlZHVsZUlt
cG9ydChQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCitib29sIFN0b3JhZ2VTeW5j
TWFuYWdlcjo6c2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVh
KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KKyAgICAKICAgICBpZiAobV90aHJl
YWQpCiAgICAgICAgIG1fdGhyZWFkLT5zY2hlZHVsZUltcG9ydChhcmVhKTsKIAogICAgIHJldHVy
biBtX3RocmVhZDsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2U6OnNjaGVkdWxlU3luYyhQYXNzUmVm
UHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCit2b2lkIFN0b3JhZ2VTeW5jTWFuYWdlcjo6c2No
ZWR1bGVTeW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIAogICAgIGlmIChtX3RocmVhZCkKICAgICAgICAgbV90
aHJlYWQtPnNjaGVkdWxlU3luYyhhcmVhKTsKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlU3luY01hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5
bmNNYW5hZ2VyLmgJKHJldmlzaW9uIDQ0NzQ1KQkoZnJvbSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxT
dG9yYWdlLmg6NDQ3NDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIExvY2FsU3RvcmFnZV9oCisjZGVmaW5lIExv
Y2FsU3RvcmFnZV9oCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNpbmNsdWRlICJMb2Nh
bFN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGFzay5oIgorI2luY2x1ZGUg
IkxvY2FsU3RvcmFnZVRocmVhZC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgor
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xh
c3MgUGFnZUdyb3VwOworICAgIGNsYXNzIFN0b3JhZ2VBcmVhOworCisgICAgY2xhc3MgTG9jYWxT
dG9yYWdlIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8TG9jYWxTdG9yYWdlPiB7CisgICAgcHVi
bGljOgorICAgICAgICB+TG9jYWxTdG9yYWdlKCk7CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8TG9jYWxTdG9yYWdlPiBsb2NhbFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBwYXRoKTsKKworICAg
ICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiop
OworCisgICAgICAgIGJvb2wgc2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VB
cmVhPik7CisgICAgICAgIHZvaWQgc2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdl
QXJlYT4pOworCisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAgIHByaXZhdGU6CisgICAgICAg
IExvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpOworCisgICAgICAgIHR5cGVkZWYgSGFz
aE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4sIFNl
Y3VyaXR5T3JpZ2luSGFzaD4gTG9jYWxTdG9yYWdlQXJlYU1hcDsKKyAgICAgICAgTG9jYWxTdG9y
YWdlQXJlYU1hcCBtX3N0b3JhZ2VBcmVhTWFwOworCisgICAgICAgIFJlZlB0cjxMb2NhbFN0b3Jh
Z2VUaHJlYWQ+IG1fdGhyZWFkOworCisgICAgLy8gVGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBz
dWJqZWN0IHRvIHRocmVhZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzCisgICAgcHVibGljOgorICAg
ICAgICAvLyBUbyBiZSBjYWxsZWQgZnJvbSB0aGUgYmFja2dyb3VuZCB0aHJlYWQ6CisgICAgICAg
IFN0cmluZyBmdWxsRGF0YWJhc2VGaWxlbmFtZShTZWN1cml0eU9yaWdpbiopOworCisgICAgICAg
IHZvaWQgcGVyZm9ybUltcG9ydCgpOworICAgICAgICB2b2lkIHBlcmZvcm1TeW5jKCk7CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBTdHJpbmcgbV9wYXRoOworCisgICAgICAgIHR5cGVkZWYgSGFz
aE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCB1bnNpZ25lZCBsb25nIGxvbmcsIFNlY3VyaXR5
T3JpZ2luSGFzaD4gU2VjdXJpdHlPcmlnaW5RdW90ZU1hcDsKKyAgICAgICAgU2VjdXJpdHlPcmln
aW5RdW90ZU1hcCBtX3NlY3VyaXR5T3JpZ2luUXVvdGVNYXA7CisgICAgfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQorCisjZW5kaWYg
Ly8gTG9jYWxTdG9yYWdlX2gKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFn
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgJ
KHJldmlzaW9uIDQ0NzQ1KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMywzMiArMjMsMjIgQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICov
CiAKLSNpZm5kZWYgTG9jYWxTdG9yYWdlX2gKLSNkZWZpbmUgTG9jYWxTdG9yYWdlX2gKKyNpZm5k
ZWYgU3RvcmFnZVN5bmNNYW5hZ2VyX2gKKyNkZWZpbmUgU3RvcmFnZVN5bmNNYW5hZ2VyX2gKIAog
I2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEuaCIK
ICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VUYXNrLmgiCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhy
ZWFkLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCiAKLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBQYWdlR3JvdXA7Ci0g
ICAgY2xhc3MgU3RvcmFnZUFyZWE7Ci0KLSAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBwdWJsaWMg
VGhyZWFkU2FmZVNoYXJlZDxMb2NhbFN0b3JhZ2U+IHsKKyAgICBjbGFzcyBTdG9yYWdlU3luY01h
bmFnZXI6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFN0b3JhZ2VTeW5jTWFuYWdlcj4gewogICAg
IHB1YmxpYzoKLSAgICAgICAgfkxvY2FsU3RvcmFnZSgpOwotCi0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPExvY2FsU3RvcmFnZT4gbG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0K
LSAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmln
aW4qKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBjcmVh
dGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKIAogICAgICAgICBib29sIHNjaGVkdWxlSW1wb3J0KFBh
c3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4pOwogICAgICAgICB2b2lkIHNjaGVkdWxlU3luYyhQ
YXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKQEAgLTU2LDEwICs0Niw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbG9zZSgpOwogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgTG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0KLSAgICAgICAgdHlwZWRlZiBI
YXNoTWFwPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFJlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiwg
U2VjdXJpdHlPcmlnaW5IYXNoPiBMb2NhbFN0b3JhZ2VBcmVhTWFwOwotICAgICAgICBMb2NhbFN0
b3JhZ2VBcmVhTWFwIG1fc3RvcmFnZUFyZWFNYXA7CisgICAgICAgIFN0b3JhZ2VTeW5jTWFuYWdl
cihjb25zdCBTdHJpbmcmIHBhdGgpOwogCiAgICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2VUaHJl
YWQ+IG1fdGhyZWFkOwogCkBAIC02OCwxOCArNTUsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAvLyBUbyBiZSBjYWxsZWQgZnJvbSB0aGUgYmFja2dyb3VuZCB0aHJlYWQ6CiAgICAg
ICAgIFN0cmluZyBmdWxsRGF0YWJhc2VGaWxlbmFtZShTZWN1cml0eU9yaWdpbiopOwogCi0gICAg
ICAgIHZvaWQgcGVyZm9ybUltcG9ydCgpOwotICAgICAgICB2b2lkIHBlcmZvcm1TeW5jKCk7Ci0K
ICAgICBwcml2YXRlOgogICAgICAgICBTdHJpbmcgbV9wYXRoOwotCi0gICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCB1bnNpZ25lZCBsb25nIGxvbmcsIFNlY3Vy
aXR5T3JpZ2luSGFzaD4gU2VjdXJpdHlPcmlnaW5RdW90ZU1hcDsKLSAgICAgICAgU2VjdXJpdHlP
cmlnaW5RdW90ZU1hcCBtX3NlY3VyaXR5T3JpZ2luUXVvdGVNYXA7CiAgICAgfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKERPTV9TVE9SQUdFKQogCi0jZW5k
aWYgLy8gTG9jYWxTdG9yYWdlX2gKKyNlbmRpZiAvLyBTdG9yYWdlU3luY01hbmFnZXJfaAo=
</data>
<flag name="review"
          id="16062"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31504</attachid>
            <date>2009-06-18 12:54:07 -0700</date>
            <delta_ts>2009-06-19 16:32:39 -0700</delta_ts>
            <desc>patch 1 - v5</desc>
            <filename>1.20090618.patch</filename>
            <type>text/plain</type>
            <size>40342</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDc0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjIgQEAKKzIwMDktMDYtMTYgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rmlyc3Qgc3RlcCBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUz
NzYKKworICAgICAgICBBZGQgU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcC9oCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorCisgICAgICAgIElu
IHByZXBhcmF0aW9uIGZvciBjb21iaW5pbmcgU2Vzc2lvblN0b3JhZ2UgYW5kIExvY2FsU3RvcmFn
ZSBpbnRvIGEKKyAgICAgICAgc2luZ2xlIFN0b3JhZ2VNYW5hZ2VyLCBtb3ZlIHRoZSBzeW5jaW5n
IGJpdHMgb3V0IG9mIExvY2FsU3RvcmFnZSBhbmQKKyAgICAgICAgaW50byBpdHMgb3duIGNsYXNz
LgorCisgICAgICAgIFRoZSBuZXh0IHN0ZXAgaXMgdG8gY29tYmluZSBMb2NhbFN0b3JhZ2VBcmVh
IGFuZCBTZXNzaW9uU3RvcmFnZUFyZWEKKyAgICAgICAgaW50byBvbmUuICBUaGVuIFNlc3Npb25T
dG9yYWdlIGFuZCBMb2NhbFN0b3JhZ2UgY2FuIGJlIGNvbWJpbmVkLgorCisgICAgICAgIE5vdGUg
dGhhdCBjb21iaW5pbmcgdGhlbSB3aWxsIGN1dCBkb3duIG9uIGNvZGUgcGF0aHMgdGhhdCBtdXN0
IGJlCisgICAgICAgIHByb3hpZWQsIGVsaW1pbmF0ZSB2aXJ0dWFsIGRpc3BhdGNoLCBhbmQgYWxs
b3cgQ2hyb21pdW0gdG8gKGV2ZW50dWFsbHkpCisgICAgICAgIHdyaXRlIGhpc3RvcmljYWwgc2Vz
c2lvblN0b3JhZ2UgdG8gZGlzayB3aGVuIG1lbW9yeSBpcyBnZXR0aW5nIHRpZ2h0LgorCisgICAg
ICAgIEFsc28gcmVtb3ZlIGEgY291cGxlIGJpdHMgb2YgY3J1ZnQgaW5jbHVkaW5nIGNvZGUgZm9y
IHF1b3RhcyB3aGljaCBpcworICAgICAgICB1bm5lY2Vzc2FyeSAoc2luY2UgYSBtZXRhLWRhdGEg
ZGIgaXMgdW5uZWNlc3Nhcnkgc2luY2UgeW91IGNhbiBqdXN0CisgICAgICAgIGNvdW50IGJ5dGVz
IGFzIHlvdSByZWFkIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlcyBpbnRvIG1lbW9yeSkuCisK
KyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
b2NhbFN0b3JhZ2U6OkxvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3Jh
Z2U6OnN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZTo6Y2xvc2Up
OgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlLmg6CisgICAgICAgICogc3RvcmFnZS9M
b2NhbFN0b3JhZ2VBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZUFyZWE6
OkxvY2FsU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6
c2NoZWR1bGVGaW5hbFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6
c3luY1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6cGVy
Zm9ybUltcG9ydCk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmg6CisgICAg
ICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VBcmVhOjpjcmVhdGUpOgorICAgICAgICAqIHN0b3Jh
Z2UvTG9jYWxTdG9yYWdlVGFzay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VU
YXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmg6
CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjopOgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlSW1wb3J0KToKKyAgICAgICAgKiBzdG9yYWdlL0xv
Y2FsU3RvcmFnZVRocmVhZC5jcHA6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJl
YWQuaDoKKyAgICAgICAgKiBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmg6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6U3RvcmFnZVN5
bmNNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6ZnVsbERh
dGFiYXNlRmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVN5bmNNYW5hZ2VyOjpj
bG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlU3luY01hbmFnZXI6OnNjaGVkdWxlSW1w
b3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6c2NoZWR1bGVTeW5j
KToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmguCisgICAgICAgIChXZWJDb3JlOjopOgorCiAy
MDA5LTA2LTE2ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ0NzQ1KQorKysg
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjA3OSw3ICsyMDc5LDkg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmNw
cCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5oIFwKIAlXZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZU1hcC5jcHAgXAotCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmgKKwlXZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZU1hcC5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5h
Z2VyLmNwcCBcCisJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCiBlbmRpZiAj
IEVORCBFTkFCTEVfRE9NX1NUT1JBR0UKIAogIyAtLS0tCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQ0NzQ1KQor
KysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTM2NCw2ICsxMzY0LDcg
QEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RPTV9TVE9SQUdFPTEpIAogICAgICAgICBzdG9y
YWdlL1N0b3JhZ2VFdmVudC5jcHAgXAogICAgICAgICBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmNw
cCBcCiAgICAgICAgIHN0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcCBcCisgICAgICAgIHN0
b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTU3Rv
cmFnZUN1c3RvbS5jcHAKIAogICAgIElETF9CSU5ESU5HUyArPSBcCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJr
bAkocmV2aXNpb24gNDQ3NDUpCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAxNSw2ICsxMDE1LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0
IG9mIGZpbGVzIG5lZQogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCiAgICAgICAgIHN0
b3JhZ2UvU2Vzc2lvblN0b3JhZ2UuY3BwCiAgICAgICAgIHN0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VB
cmVhLmNwcAorICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKICAgICA8L3Nl
dD4KIAogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19YTUwiPgpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0NDc0NSkKKysr
IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAg
LTE1NjU5LDYgKzE1NjU5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2Vc
U3RvcmFnZVN5bmNNYW5hZ2VyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFZlcnNpb25DaGFuZ2VDYWxsYmFjay5oIg0KIAkJ
CQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA0NDc0NSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjU4LDYgKzQyNTgsOCBAQAogCQlD
MERGQzg3MDBEQjY4NDFBMDAzRUFFN0MgLyogSlNDb25zb2xlQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwREZDODZGMERCNjg0MUEwMDNF
QUU3QyAvKiBKU0NvbnNvbGVDdXN0b20uY3BwICovOyB9OwogCQlDMTA1REE2MjBGM0FBNjhGMDAx
REQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzEwNURBNjEwRjNBQTY4RjAwMURENDRGIC8qIFRl
eHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCAqLzsgfTsKIAkJQzEwNURBNjQwRjNBQTZCODAwMURE
NDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29k
aW5nRGV0ZWN0b3IuaCAqLzsgfTsKKwkJQzUxMDJEOTQwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3Jh
Z2VTeW5jTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICov
OyB9OworCQlDNTEwMkQ5NTBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTAyRDkz
MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwICovOyB9OwogCQlDNkQ3
NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFEMzA5QUEyODJF
MDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggKi87IH07CiAJCUM2RDc0QUU0
MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRTMwOUFBMjkwQTAw
MEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi87IH07CiAJCUQwNUNFRDI5
MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4
IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi87IH07CkBAIC05MDU3LDYgKzkwNTksOCBAQAog
CQlDMERGQzg2RjBEQjY4NDFBMDAzRUFFN0MgLyogSlNDb25zb2xlQ3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ29uc29sZUN1c3RvbS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMxMDVEQTYxMEYzQUE2OEYwMDFERDQ0RiAvKiBUZXh0
RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUMxMDVEQTYzMEYzQUE2QjgwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3Rvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0RW5jb2RpbmdEZXRlY3Rvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTEwMkQ5MjBGRDlBQTJEMDBGQUZGMDQg
LyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0b3JhZ2VTeW5jTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTEw
MkQ5MzBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VTeW5jTWFuYWdlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2Rp
ZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlz
dExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjcwQTQwQkIy
QzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0QmxvY2tDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTk2NDYsNiArOTY1MCw4IEBACiAJCQkJNTFFMEJBQkQwREE1NTQ4NDAw
QTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5pZGwgKi8sCiAJCQkJNTFFMEJCMzcwREE1QUNCNjAwQTlF
NDE3IC8qIFN0b3JhZ2VNYXAuY3BwICovLAogCQkJCTUxRTBCQjM2MERBNUFDQjYwMEE5RTQxNyAv
KiBTdG9yYWdlTWFwLmggKi8sCisJCQkJQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3Jh
Z2VTeW5jTWFuYWdlci5oICovLAorCQkJCUM1MTAyRDkzMEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9y
YWdlU3luY01hbmFnZXIuY3BwICovLAogCQkJKTsKIAkJCWluZGVudFdpZHRoID0gNDsKIAkJCXBh
dGggPSBzdG9yYWdlOwpAQCAtMTY3OTUsNiArMTY4MDEsNyBAQAogCQkJCTA4MUVCRjNCMEZEMzRG
NDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxOEY4
MzFCODBGRDQ4Qzc4MDBEOEM1NkIgLyogV29ya2VyTG9hZGVyUHJveHkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4OUNDQzUzMEY0NEU5ODEwMEI1REExMCAvKiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29t
bWFuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzUxMDJEOTQwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0
b3JhZ2VTeW5jTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVBNzY4MDQwRkU3MTI2NDAw
QUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0xODc4OSw2
ICsxODc5Niw3IEBACiAJCQkJODQ1RTcyRkIwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwODFFQkYzQTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmls
dGVyQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODlDQ0M1MjBGNDRFOTgxMDBCNURB
MTAgLyogUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QzUxMDJEOTUwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCShyZXZpc2lvbiA0NDc0NSkK
KysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgog
I2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgi
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC02NSwxNCArNjYsOCBAQCBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gTG9jYWxTdG9yYWdlOjps
CiBMb2NhbFN0b3JhZ2U6OkxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgOiBt
X3BhdGgocGF0aC5jb3B5KCkpCiB7Ci0gICAgLy8gSWYgdGhlIHBhdGggaXMgZW1wdHksIHdlIGtu
b3cgd2UncmUgbmV2ZXIgZ29pbmcgdG8gYmUgdXNpbmcgdGhlIHRocmVhZCBmb3IgYW55dGhpbmcs
IHNvIGRvbid0IHN0YXJ0IGl0LgotICAgIC8vIEluIHRoZSBmdXR1cmUsIHdlIG1pZ2h0IGFsc28g
d2FudCB0byBjb25zaWRlciByZW1vdmluZyBpdCBmcm9tIHRoZSBET00gaW4gdGhhdCBjYXNlIC0g
PHJkYXI6Ly9wcm9ibGVtLzU5NjA0NzA+Ci0gICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3RocmVhZCA9IExvY2FsU3RvcmFnZVRocmVhZDo6Y3JlYXRlKCk7
Ci0gICAgbV90aHJlYWQtPnN0YXJ0KCk7Ci0gICAgbV90aHJlYWQtPnNjaGVkdWxlSW1wb3J0KHRo
aXMpOworICAgIGlmICghbV9wYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zeW5jTWFuYWdlciA9
IFN0b3JhZ2VTeW5jTWFuYWdlcjo6Y3JlYXRlKG1fcGF0aCk7CiB9CiAKIExvY2FsU3RvcmFnZTo6
fkxvY2FsU3RvcmFnZSgpCkBAIC05Miw1NCArODcsMTggQEAgUGFzc1JlZlB0cjxTdG9yYWdlQXJl
YT4gTG9jYWxTdG9yYWdlOjpzdAogICAgIC8vIFRvIGtub3cgaWYgYW4gYXJlYSBoYXMgcHJldmlv
dXNseSBiZWVuIGVzdGFibGlzaGVkLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhpcyBMb2NhbFN0
b3JhZ2UgCiAgICAgLy8gb2JqZWN0IGhhcyBmaW5pc2hlZCBpdCdzIEFyZWFJbXBvcnQgdGFzay4K
IAotCiAgICAgLy8gRklYTUU6IElmIHRoZSBzdG9yYWdlIGFyZWEgaXMgYmVpbmcgZXN0YWJsaXNo
ZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGhlcmUsIHdlIG5lZWQgdG8gCiAgICAgLy8gc3luYyBpdHMg
ZXhpc3RhbmNlIGFuZCBxdW90YSBvdXQgdG8gZGlzayB2aWEgYW4gdGFzayBvZiB0eXBlIEFyZWFT
eW5jCiAKICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWE7CiAgICAgaWYg
KHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYU1hcC5nZXQob3JpZ2luKSkKICAgICAgICAgcmV0
dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKLSAgICAgICAgCi0gICAgc3RvcmFnZUFyZWEgPSBM
b2NhbFN0b3JhZ2VBcmVhOjpjcmVhdGUob3JpZ2luLCB0aGlzKTsKKyAgICAKKyAgICBzdG9yYWdl
QXJlYSA9IExvY2FsU3RvcmFnZUFyZWE6OmNyZWF0ZShvcmlnaW4sIG1fc3luY01hbmFnZXIpOwog
ICAgIG1fc3RvcmFnZUFyZWFNYXAuc2V0KG9yaWdpbiwgc3RvcmFnZUFyZWEpOwogICAgIHJldHVy
biBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7CiB9CiAKLVN0cmluZyBMb2NhbFN0b3JhZ2U6OmZ1bGxE
YXRhYmFzZUZpbGVuYW1lKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCi17Ci0gICAgLy8gRklYTUU6
IE9uY2Ugd2UgYWN0dWFsbHkgdHJhY2sgb3JpZ2luL3F1b3RhIGVudHJpZXMgdG8gc2VlIHdoaWNo
IG9yaWdpbnMgaGF2ZSBsb2NhbCBzdG9yYWdlIGVzdGFibGlzaGVkLAotICAgIC8vIHdlIHdpbGwg
cmV0dXJuIGFuIGVtcHR5IHBhdGggbmFtZSBpZiB0aGUgb3JpZ2luIGlzbid0IGFsbG93ZWQgdG8g
aGF2ZSBMb2NhbFN0b3JhZ2UuCi0gICAgLy8gV2UnbGwgbmVlZCB0byB3YWl0IGhlcmUgdW50aWwg
dGhlIEFyZWFJbXBvcnQgdGFzayB0byBjb21wbGV0ZSBiZWZvcmUgbWFraW5nIHRoYXQgZGVjaXNp
b24uCi0KLSAgICBpZiAobV9wYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotCi0gICAgQVNTRVJUKG9yaWdpbik7Ci0gICAgaWYgKCFvcmlnaW4pCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLQotICAgIGlmICghbWFrZUFsbERpcmVjdG9yaWVzKG1fcGF0aCkpIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGVkIHRvIGNyZWF0ZSBMb2NhbFN0b3JhZ2UgZGF0YWJhc2Ug
cGF0aCAlcyIsIG1fcGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIH0KLQotICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9wYXRoLCBv
cmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsgIi5sb2NhbHN0b3JhZ2UiKTsKLX0KLQotdm9p
ZCBMb2NhbFN0b3JhZ2U6OnBlcmZvcm1JbXBvcnQoKQotewotICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwotCi0gICAgLy8gRklYTUU6IEltcG9ydCBhbGwga25vd24gbG9jYWwgc3RvcmFnZSBv
cmlnaW5zIGhlcmUgYWxvbmcgd2l0aCB0aGVpciBxdW90YXMKLX0KLQotdm9pZCBMb2NhbFN0b3Jh
Z2U6OnBlcmZvcm1TeW5jKCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAg
IC8vIEZJWE1FOiBXcml0ZSBvdXQgbmV3IG9yaWdpbnMgYW5kIHF1b3RhcyBoZXJlCi19Ci0KIHZv
aWQgTG9jYWxTdG9yYWdlOjpjbG9zZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
QEAgLTE0NywyOCArMTA2LDggQEAgdm9pZCBMb2NhbFN0b3JhZ2U6OmNsb3NlKCkKICAgICBMb2Nh
bFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0b3JhZ2VBcmVhTWFwLmVuZCgpOwog
ICAgIGZvciAoTG9jYWxTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N0b3JhZ2VBcmVh
TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgaXQtPnNlY29uZC0+c2NoZWR1
bGVGaW5hbFN5bmMoKTsKLQotICAgIGlmIChtX3RocmVhZCkgewotICAgICAgICBtX3RocmVhZC0+
dGVybWluYXRlKCk7Ci0gICAgICAgIG1fdGhyZWFkID0gMDsKLSAgICB9Ci19Ci0KLWJvb2wgTG9j
YWxTdG9yYWdlOjpzY2hlZHVsZUltcG9ydChQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFy
ZWEpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChtX3RocmVhZCkK
LSAgICAgICAgbV90aHJlYWQtPnNjaGVkdWxlSW1wb3J0KGFyZWEpOwotCi0gICAgcmV0dXJuIG1f
dGhyZWFkOwotfQotCi12b2lkIExvY2FsU3RvcmFnZTo6c2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8
TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
ICAgIGlmIChtX3RocmVhZCkKLSAgICAgICAgbV90aHJlYWQtPnNjaGVkdWxlU3luYyhhcmVhKTsK
KyAgICAKKyAgICBtX3N5bmNNYW5hZ2VyID0gMDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuaAkocmV2aXNpb24gNDQ3NDUpCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDIwICsyOSwxNyBA
QAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFyZWEu
aCIKLSNpbmNsdWRlICJMb2NhbFN0b3JhZ2VUYXNrLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9yYWdl
VGhyZWFkLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCiAKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotICAgIGNsYXNzIFBhZ2VHcm91cDsKICAgICBjbGFzcyBTdG9yYWdlQXJlYTsKKyAg
ICBjbGFzcyBTdG9yYWdlU3luY01hbmFnZXI7CiAKLSAgICBjbGFzcyBMb2NhbFN0b3JhZ2UgOiBw
dWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxMb2NhbFN0b3JhZ2U+IHsKKyAgICBjbGFzcyBMb2NhbFN0
b3JhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMb2NhbFN0b3JhZ2U+IHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIH5Mb2NhbFN0b3JhZ2UoKTsKIApAQCAtNTAsOSArNDcsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEoU2Vj
dXJpdHlPcmlnaW4qKTsKIAotICAgICAgICBib29sIHNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8
TG9jYWxTdG9yYWdlQXJlYT4pOwotICAgICAgICB2b2lkIHNjaGVkdWxlU3luYyhQYXNzUmVmUHRy
PExvY2FsU3RvcmFnZUFyZWE+KTsKLQogICAgICAgICB2b2lkIGNsb3NlKCk7CiAKICAgICBwcml2
YXRlOgpAQCAtNjEsMjEgKzU1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB0eXBl
ZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgUmVmUHRyPExvY2FsU3RvcmFnZUFy
ZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+IExvY2FsU3RvcmFnZUFyZWFNYXA7CiAgICAgICAgIExv
Y2FsU3RvcmFnZUFyZWFNYXAgbV9zdG9yYWdlQXJlYU1hcDsKIAotICAgICAgICBSZWZQdHI8TG9j
YWxTdG9yYWdlVGhyZWFkPiBtX3RocmVhZDsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVy
cyBhcmUgc3ViamVjdCB0byB0aHJlYWQgc3luY2hyb25pemF0aW9uIGlzc3VlcwotICAgIHB1Ymxp
YzoKLSAgICAgICAgLy8gVG8gYmUgY2FsbGVkIGZyb20gdGhlIGJhY2tncm91bmQgdGhyZWFkOgot
ICAgICAgICBTdHJpbmcgZnVsbERhdGFiYXNlRmlsZW5hbWUoU2VjdXJpdHlPcmlnaW4qKTsKLQot
ICAgICAgICB2b2lkIHBlcmZvcm1JbXBvcnQoKTsKLSAgICAgICAgdm9pZCBwZXJmb3JtU3luYygp
OwotCi0gICAgcHJpdmF0ZToKICAgICAgICAgU3RyaW5nIG1fcGF0aDsKLQotICAgICAgICB0eXBl
ZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgdW5zaWduZWQgbG9uZyBsb25nLCBT
ZWN1cml0eU9yaWdpbkhhc2g+IFNlY3VyaXR5T3JpZ2luUXVvdGVNYXA7Ci0gICAgICAgIFNlY3Vy
aXR5T3JpZ2luUXVvdGVNYXAgbV9zZWN1cml0eU9yaWdpblF1b3RlTWFwOworICAgICAgICBSZWZQ
dHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N5bmNNYW5hZ2VyOwogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5jcHAJKHJl
dmlzaW9uIDQ0NzQ1KQorKysgV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NiwxOSArNDYsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8g
SW5zdGVhZCwgcXVldWUgdXAgYSBiYXRjaCBvZiBpdGVtcyB0byBzeW5jIGFuZCBhY3R1YWxseSBk
byB0aGUgc3luYyBhdCB0aGUgZm9sbG93aW5nIGludGVydmFsLgogc3RhdGljIGNvbnN0IGRvdWJs
ZSBMb2NhbFN0b3JhZ2VTeW5jSW50ZXJ2YWwgPSAxLjA7CiAKLUxvY2FsU3RvcmFnZUFyZWE6Okxv
Y2FsU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgTG9jYWxTdG9yYWdlKiBsb2Nh
bFN0b3JhZ2UpCitMb2NhbFN0b3JhZ2VBcmVhOjpMb2NhbFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikK
ICAgICA6IFN0b3JhZ2VBcmVhKG9yaWdpbikKICAgICAsIG1fc3luY1RpbWVyKHRoaXMsICZMb2Nh
bFN0b3JhZ2VBcmVhOjpzeW5jVGltZXJGaXJlZCkKICAgICAsIG1faXRlbXNDbGVhcmVkKGZhbHNl
KQogICAgICwgbV9maW5hbFN5bmNTY2hlZHVsZWQoZmFsc2UpCi0gICAgLCBtX2xvY2FsU3RvcmFn
ZShsb2NhbFN0b3JhZ2UpCisgICAgLCBtX3N5bmNNYW5hZ2VyKHN5bmNNYW5hZ2VyKQogICAgICwg
bV9jbGVhckl0ZW1zV2hpbGVTeW5jaW5nKGZhbHNlKQogICAgICwgbV9zeW5jU2NoZWR1bGVkKGZh
bHNlKQogICAgICwgbV9pbXBvcnRDb21wbGV0ZShmYWxzZSkKIHsKLSAgICBBU1NFUlQobV9sb2Nh
bFN0b3JhZ2UpOwotICAgIAotICAgIGlmICghbV9sb2NhbFN0b3JhZ2UtPnNjaGVkdWxlSW1wb3J0
KHRoaXMpKQorICAgIGlmICghbV9zeW5jTWFuYWdlciB8fCAhbV9zeW5jTWFuYWdlci0+c2NoZWR1
bGVJbXBvcnQodGhpcykpCiAgICAgICAgIG1faW1wb3J0Q29tcGxldGUgPSB0cnVlOwogfQogCkBA
IC02OSw2ICs2Nyw5IEBAIExvY2FsU3RvcmFnZUFyZWE6On5Mb2NhbFN0b3JhZ2VBcmVhKCkKIAog
dm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpzY2hlZHVsZUZpbmFsU3luYygpCiB7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fc3luY01hbmFnZXIpCisgICAgICAgIHJldHVy
bjsKICAgICBpZiAobV9zeW5jVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9zeW5jVGltZXIu
c3RvcCgpOwogICAgIGVsc2UgewpAQCAtMjY5LDYgKzI3MCw4IEBAIHZvaWQgTG9jYWxTdG9yYWdl
QXJlYTo6c2NoZWR1bGVDbGVhcigpCiB2b2lkIExvY2FsU3RvcmFnZUFyZWE6OnN5bmNUaW1lckZp
cmVkKFRpbWVyPExvY2FsU3RvcmFnZUFyZWE+KikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIGlmICghbV9zeW5jTWFuYWdlcikKKyAgICAgICAgcmV0dXJuOwogCiAgICAgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gbV9jaGFuZ2VkSXRlbXMuYmVnaW4o
KTsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgZW5kID0gbV9jaGFuZ2Vk
SXRlbXMuZW5kKCk7CkBAIC0yOTIsNyArMjk1LDcgQEAgdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpz
eW5jVGltZXJGaXJlZChUaQogICAgICAgICAgICAgLy8gcGVyZm9ybVN5bmMgZnVuY3Rpb24uCiAg
ICAgICAgICAgICBkaXNhYmxlU3VkZGVuVGVybWluYXRpb24oKTsKIAotICAgICAgICAgICAgbV9s
b2NhbFN0b3JhZ2UtPnNjaGVkdWxlU3luYyh0aGlzKTsKKyAgICAgICAgICAgIG1fc3luY01hbmFn
ZXItPnNjaGVkdWxlU3luYyh0aGlzKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzA3LDkgKzMx
MCwxMSBAQCB2b2lkIExvY2FsU3RvcmFnZUFyZWE6OnBlcmZvcm1JbXBvcnQoKQogewogICAgIEFT
U0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCghbV9kYXRhYmFzZS5pc09wZW4oKSk7
CisgICAgaWYgKCFtX3N5bmNNYW5hZ2VyKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcg
ZGF0YWJhc2VGaWxlbmFtZSA9IG1fc3luY01hbmFnZXItPmZ1bGxEYXRhYmFzZUZpbGVuYW1lKHNl
Y3VyaXR5T3JpZ2luKCkpOwogCi0gICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWUgPSBtX2xvY2Fs
U3RvcmFnZS0+ZnVsbERhdGFiYXNlRmlsZW5hbWUoc2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgCiAg
ICAgaWYgKGRhdGFiYXNlRmlsZW5hbWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIExPR19FUlJPUigi
RmlsZW5hbWUgZm9yIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgaXMgZW1wdHkgLSBjYW5ub3Qgb3Bl
biBmb3IgcGVyc2lzdGVudCBzdG9yYWdlIik7CiAgICAgICAgIG1hcmtJbXBvcnRlZCgpOwpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5oCShyZXZpc2lvbiA0NDc0NSkKKysrIFdlYkNv
cmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIzICsz
MSwyNCBAQAogI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFy
ZWEuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi0gICAgY2xhc3MgTG9jYWxTdG9yYWdlOworICAgIGNs
YXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjsKICAgICAKICAgICBjbGFzcyBMb2NhbFN0b3JhZ2VBcmVh
IDogcHVibGljIFN0b3JhZ2VBcmVhIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkxv
Y2FsU3RvcmFnZUFyZWEoKTsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3Jh
Z2VBcmVhPiBjcmVhdGUoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgTG9jYWxTdG9yYWdlKiBsb2Nh
bFN0b3JhZ2UpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2VBcmVhKG9yaWdpbiwg
bG9jYWxTdG9yYWdlKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdl
QXJlYT4gY3JlYXRlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFBhc3NSZWZQdHI8U3RvcmFnZVN5
bmNNYW5hZ2VyPiBzeW5jTWFuYWdlcikgeyByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFn
ZUFyZWEob3JpZ2luLCBzeW5jTWFuYWdlcikpOyB9CiAKICAgICAgICAgdm9pZCBzY2hlZHVsZUZp
bmFsU3luYygpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgTG9jYWxTdG9yYWdlQXJlYShTZWN1
cml0eU9yaWdpbiosIExvY2FsU3RvcmFnZSopOworICAgICAgICBMb2NhbFN0b3JhZ2VBcmVhKFNl
Y3VyaXR5T3JpZ2luKiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2Vy
KTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgaXRlbUNoYW5nZWQoY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBz
b3VyY2VGcmFtZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBpdGVtUmVtb3ZlZChjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKQEAg
LTYzLDcgKzY0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgYm9v
bCBtX2ZpbmFsU3luY1NjaGVkdWxlZDsKIAotICAgICAgICBMb2NhbFN0b3JhZ2UqIG1fbG9jYWxT
dG9yYWdlOworICAgICAgICBSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBtX3N5bmNNYW5hZ2Vy
OwogCiAgICAgICAgIC8vIFRoZSBkYXRhYmFzZSBoYW5kbGUgd2lsbCBvbmx5IGV2ZXIgYmUgb3Bl
bmVkIGFuZCB1c2VkIG9uIHRoZSBiYWNrZ3JvdW5kIHRocmVhZC4KICAgICAgICAgU1FMaXRlRGF0
YWJhc2UgbV9kYXRhYmFzZTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAJ
KHJldmlzaW9uIDQ0NzQ1KQorKysgV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNCArNDIsNiBAQCBMb2NhbFN0b3JhZ2VUYXNrOjpMb2Nh
bFN0b3JhZ2VUYXNrKFR5cGUgCiAgICAgQVNTRVJUKG1fdHlwZSA9PSBBcmVhSW1wb3J0IHx8IG1f
dHlwZSA9PSBBcmVhU3luYyk7CiB9CiAKLUxvY2FsU3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFnZVRh
c2soVHlwZSB0eXBlLCBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gc3RvcmFnZSkKLSAgICA6IG1f
dHlwZSh0eXBlKQotICAgICwgbV9zdG9yYWdlKHN0b3JhZ2UpCi17Ci0gICAgQVNTRVJUKG1fc3Rv
cmFnZSk7Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBTdG9yYWdlSW1wb3J0IHx8IG1fdHlwZSA9PSBT
dG9yYWdlU3luYyk7Ci19Ci0KIExvY2FsU3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFnZVRhc2soVHlw
ZSB0eXBlLCBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZVRocmVhZD4gdGhyZWFkKQogICAgIDogbV90
eXBlKHR5cGUpCiAgICAgLCBtX3RocmVhZCh0aHJlYWQpCkBAIC02MSwxNCArNTMsNiBAQCBMb2Nh
bFN0b3JhZ2VUYXNrOjpMb2NhbFN0b3JhZ2VUYXNrKFR5cGUgCiB2b2lkIExvY2FsU3RvcmFnZVRh
c2s6OnBlcmZvcm1UYXNrKCkKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgICAgICBjYXNl
IFN0b3JhZ2VJbXBvcnQ6Ci0gICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlKTsKLSAgICAgICAg
ICAgIG1fc3RvcmFnZS0+cGVyZm9ybUltcG9ydCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgU3RvcmFnZVN5bmM6Ci0gICAgICAgICAgICBBU1NFUlQobV9zdG9yYWdlKTsKLSAg
ICAgICAgICAgIG1fc3RvcmFnZS0+cGVyZm9ybVN5bmMoKTsKLSAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEFyZWFJbXBvcnQ6CiAgICAgICAgICAgICBBU1NFUlQobV9hcmVhKTsKICAg
ICAgICAgICAgIG1fYXJlYS0+cGVyZm9ybUltcG9ydCgpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdl
L0xvY2FsU3RvcmFnZVRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxT
dG9yYWdlVGFzay5oCShyZXZpc2lvbiA0NDc0NSkKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0
b3JhZ2VUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE3ICszNCwxNCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBMb2NhbFN0b3JhZ2U7CiAgICAgY2xhc3MgTG9jYWxT
dG9yYWdlQXJlYTsKICAgICBjbGFzcyBMb2NhbFN0b3JhZ2VUaHJlYWQ7CiAKICAgICBjbGFzcyBM
b2NhbFN0b3JhZ2VUYXNrIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8TG9jYWxTdG9yYWdlVGFz
az4gewogICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBUeXBlIHsgU3RvcmFnZUltcG9ydCwgU3Rv
cmFnZVN5bmMsIEFyZWFJbXBvcnQsIEFyZWFTeW5jLCBUZXJtaW5hdGVUaHJlYWQgfTsKKyAgICAg
ICAgZW51bSBUeXBlIHsgQXJlYUltcG9ydCwgQXJlYVN5bmMsIFRlcm1pbmF0ZVRocmVhZCB9Owog
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZUltcG9y
dChQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gc3RvcmFnZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3
IExvY2FsU3RvcmFnZVRhc2soU3RvcmFnZUltcG9ydCwgc3RvcmFnZSkpOyB9CiAgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZUltcG9ydChQYXNzUmVmUHRy
PExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbFN0b3Jh
Z2VUYXNrKEFyZWFJbXBvcnQsIGFyZWEpKTsgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxM
b2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVTeW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBzdG9y
YWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlVGFzayhTdG9yYWdlU3luYywg
c3RvcmFnZSkpOyB9CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZVRhc2s+
IGNyZWF0ZVN5bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVhKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlVGFzayhBcmVhU3luYywgYXJlYSkpOyB9CiAgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNyZWF0ZVRlcm1pbmF0ZShQYXNz
UmVmUHRyPExvY2FsU3RvcmFnZVRocmVhZD4gdGhyZWFkKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
TG9jYWxTdG9yYWdlVGFzayhUZXJtaW5hdGVUaHJlYWQsIHRocmVhZCkpOyB9CiAKQEAgLTUyLDEy
ICs0OSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBM
b2NhbFN0b3JhZ2VUYXNrKFR5cGUsIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4pOwotICAg
ICAgICBMb2NhbFN0b3JhZ2VUYXNrKFR5cGUsIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPik7CiAg
ICAgICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSwgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VUaHJl
YWQ+KTsKIAogICAgICAgICBUeXBlIG1fdHlwZTsKICAgICAgICAgUmVmUHRyPExvY2FsU3RvcmFn
ZUFyZWE+IG1fYXJlYTsKLSAgICAgICAgUmVmUHRyPExvY2FsU3RvcmFnZT4gbV9zdG9yYWdlOwog
ICAgICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPiBtX3RocmVhZDsKICAgICB9OwogCklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcAkocmV2aXNpb24gNDQ3NDUp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODcsMTggKzg3LDYgQEAgdm9pZCogTG9jYWxTdG9yYWdlVGhyZWFkOjpsb2NhbFN0b3Jh
Z2VUaAogICAgIHJldHVybiAwOwogfQogCi12b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6c2NoZWR1
bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IHN0b3JhZ2UpCi17Ci0gICAgQVNTRVJU
KCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOwotICAgIG1fcXVldWUuYXBwZW5kKExv
Y2FsU3RvcmFnZVRhc2s6OmNyZWF0ZUltcG9ydChzdG9yYWdlKSk7Ci19Ci0KLXZvaWQgTG9jYWxT
dG9yYWdlVGhyZWFkOjpzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IHN0b3Jh
Z2UpCi17Ci0gICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYmIG1fdGhyZWFkSUQpOwotICAg
IG1fcXVldWUuYXBwZW5kKExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZVN5bmMoc3RvcmFnZSkpOwot
fQotCiB2b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxM
b2NhbFN0b3JhZ2VBcmVhPiBhcmVhKQogewogICAgIEFTU0VSVCghbV9xdWV1ZS5raWxsZWQoKSAm
JiBtX3RocmVhZElEKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmgJKHJl
dmlzaW9uIDQ0NzQ1KQorKysgV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
ICAgIGNsYXNzIExvY2FsU3RvcmFnZTsKICAgICBjbGFzcyBMb2NhbFN0b3JhZ2VBcmVhOwogICAg
IGNsYXNzIExvY2FsU3RvcmFnZVRhc2s7CiAKQEAgLTQ1LDggKzQ0LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgICAgIGJvb2wgc3RhcnQoKTsKIAotICAgICAgICB2b2lkIHNjaGVkdWxl
SW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPik7Ci0gICAgICAgIHZvaWQgc2NoZWR1bGVT
eW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPik7CiAgICAgICAgIHZvaWQgc2NoZWR1bGVJbXBv
cnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPik7CiAgICAgICAgIHZvaWQgc2NoZWR1bGVT
eW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4pOwogCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvU2Vzc2lvblN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lv
blN0b3JhZ2UuaAkocmV2aXNpb24gNDQ3NDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0
b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIlNlc3Np
b25TdG9yYWdlQXJlYS5oIgogCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwCShyZXZp
c2lvbiA0NDc0NSkJKGZyb20gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZS5jcHA6NDQ3NDUp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlLmgi
CisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUFy
ZWEuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVk
ZSAiU3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgTG9jYWxTdG9yYWdlKj4g
TG9jYWxTdG9yYWdlTWFwOworCitzdGF0aWMgTG9jYWxTdG9yYWdlTWFwJiBsb2NhbFN0b3JhZ2VN
YXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTG9jYWxTdG9yYWdlTWFwLCBsb2NhbFN0
b3JhZ2VNYXAsICgpKTsKKyAgICByZXR1cm4gbG9jYWxTdG9yYWdlTWFwOworfQorCitQYXNzUmVm
UHRyPExvY2FsU3RvcmFnZT4gTG9jYWxTdG9yYWdlOjpsb2NhbFN0b3JhZ2UoY29uc3QgU3RyaW5n
JiBwYXRoKQoreworICAgIGNvbnN0IFN0cmluZyBsb29rdXBQYXRoID0gcGF0aC5pc051bGwoKSA/
IFN0cmluZygiIikgOiBwYXRoOworICAgIExvY2FsU3RvcmFnZU1hcDo6aXRlcmF0b3IgaXQgPSBs
b2NhbFN0b3JhZ2VNYXAoKS5maW5kKGxvb2t1cFBhdGgpOworICAgIGlmIChpdCA9PSBsb2NhbFN0
b3JhZ2VNYXAoKS5lbmQoKSkgeworICAgICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlPiBsb2NhbFN0
b3JhZ2UgPSBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlKGxvb2t1cFBhdGgpKTsKKyAgICAgICAg
bG9jYWxTdG9yYWdlTWFwKCkuc2V0KGxvb2t1cFBhdGgsIGxvY2FsU3RvcmFnZS5nZXQoKSk7Cisg
ICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UucmVsZWFzZSgpOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gaXQtPnNlY29uZDsKK30KKworTG9jYWxTdG9yYWdlOjpMb2NhbFN0b3JhZ2UoY29uc3Qg
U3RyaW5nJiBwYXRoKQorICAgIDogbV9wYXRoKHBhdGguY29weSgpKQoreworICAgIC8vIElmIHRo
ZSBwYXRoIGlzIGVtcHR5LCB3ZSBrbm93IHdlJ3JlIG5ldmVyIGdvaW5nIHRvIGJlIHVzaW5nIHRo
ZSB0aHJlYWQgZm9yIGFueXRoaW5nLCBzbyBkb24ndCBzdGFydCBpdC4KKyAgICAvLyBJbiB0aGUg
ZnV0dXJlLCB3ZSBtaWdodCBhbHNvIHdhbnQgdG8gY29uc2lkZXIgcmVtb3ZpbmcgaXQgZnJvbSB0
aGUgRE9NIGluIHRoYXQgY2FzZSAtIDxyZGFyOi8vcHJvYmxlbS81OTYwNDcwPgorICAgIGlmIChw
YXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90aHJlYWQgPSBMb2NhbFN0
b3JhZ2VUaHJlYWQ6OmNyZWF0ZSgpOworICAgIG1fdGhyZWFkLT5zdGFydCgpOworICAgIG1fdGhy
ZWFkLT5zY2hlZHVsZUltcG9ydCh0aGlzKTsKK30KKworTG9jYWxTdG9yYWdlOjp+TG9jYWxTdG9y
YWdlKCkKK3sKKyAgICBBU1NFUlQobG9jYWxTdG9yYWdlTWFwKCkuZ2V0KG1fcGF0aCkgPT0gdGhp
cyk7CisgICAgbG9jYWxTdG9yYWdlTWFwKCkucmVtb3ZlKG1fcGF0aCk7Cit9CisKK1Bhc3NSZWZQ
dHI8U3RvcmFnZUFyZWE+IExvY2FsU3RvcmFnZTo6c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gRklYTUU6
IElmIHRoZSBzZWN1cml0eSBvcmlnaW4gaW4gcXVlc3Rpb24gaGFzIG5ldmVyIGhhZCBhIHN0b3Jh
Z2UgYXJlYSBlc3RhYmxpc2hlZCwKKyAgICAvLyB3ZSBuZWVkIHRvIGFzayBhIGNsaWVudCBjYWxs
IGlmIGVzdGFibGlzaGluZyBpdCBpcyBva2F5LiAgSWYgdGhlIGNsaWVudCBkZW5pZXMgdGhlIHJl
cXVlc3QsCisgICAgLy8gdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbnVsbC4KKyAgICAvLyBUaGUg
c291cmNlRnJhbWUgYXJndW1lbnQgZXhpc3RzIGZvciB0aGUgcHVycG9zZSBvZiBhc2tpbmcgYSBj
bGllbnQuCisgICAgLy8gVG8ga25vdyBpZiBhbiBhcmVhIGhhcyBwcmV2aW91c2x5IGJlZW4gZXN0
YWJsaXNoZWQsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGlzIExvY2FsU3RvcmFnZSAKKyAgICAv
LyBvYmplY3QgaGFzIGZpbmlzaGVkIGl0J3MgQXJlYUltcG9ydCB0YXNrLgorCisKKyAgICAvLyBG
SVhNRTogSWYgdGhlIHN0b3JhZ2UgYXJlYSBpcyBiZWluZyBlc3RhYmxpc2hlZCBmb3IgdGhlIGZp
cnN0IHRpbWUgaGVyZSwgd2UgbmVlZCB0byAKKyAgICAvLyBzeW5jIGl0cyBleGlzdGFuY2UgYW5k
IHF1b3RhIG91dCB0byBkaXNrIHZpYSBhbiB0YXNrIG9mIHR5cGUgQXJlYVN5bmMKKworICAgIFJl
ZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYTsKKyAgICBpZiAoc3RvcmFnZUFyZWEg
PSBtX3N0b3JhZ2VBcmVhTWFwLmdldChvcmlnaW4pKQorICAgICAgICByZXR1cm4gc3RvcmFnZUFy
ZWEucmVsZWFzZSgpOworICAgICAgICAKKyAgICBzdG9yYWdlQXJlYSA9IExvY2FsU3RvcmFnZUFy
ZWE6OmNyZWF0ZShvcmlnaW4sIHRoaXMpOworICAgIG1fc3RvcmFnZUFyZWFNYXAuc2V0KG9yaWdp
biwgc3RvcmFnZUFyZWEpOworICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7Cit9CisK
K1N0cmluZyBMb2NhbFN0b3JhZ2U6OmZ1bGxEYXRhYmFzZUZpbGVuYW1lKFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4pCit7CisgICAgLy8gRklYTUU6IE9uY2Ugd2UgYWN0dWFsbHkgdHJhY2sgb3JpZ2lu
L3F1b3RhIGVudHJpZXMgdG8gc2VlIHdoaWNoIG9yaWdpbnMgaGF2ZSBsb2NhbCBzdG9yYWdlIGVz
dGFibGlzaGVkLAorICAgIC8vIHdlIHdpbGwgcmV0dXJuIGFuIGVtcHR5IHBhdGggbmFtZSBpZiB0
aGUgb3JpZ2luIGlzbid0IGFsbG93ZWQgdG8gaGF2ZSBMb2NhbFN0b3JhZ2UuCisgICAgLy8gV2Un
bGwgbmVlZCB0byB3YWl0IGhlcmUgdW50aWwgdGhlIEFyZWFJbXBvcnQgdGFzayB0byBjb21wbGV0
ZSBiZWZvcmUgbWFraW5nIHRoYXQgZGVjaXNpb24uCisKKyAgICBpZiAobV9wYXRoLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgQVNTRVJUKG9yaWdpbik7CisgICAg
aWYgKCFvcmlnaW4pCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGlmICghbWFrZUFs
bERpcmVjdG9yaWVzKG1fcGF0aCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGVkIHRvIGNy
ZWF0ZSBMb2NhbFN0b3JhZ2UgZGF0YWJhc2UgcGF0aCAlcyIsIG1fcGF0aC51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKworICAgIHJldHVybiBwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQobV9wYXRoLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsg
Ii5sb2NhbHN0b3JhZ2UiKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2U6OnBlcmZvcm1JbXBvcnQo
KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gRklYTUU6IEltcG9y
dCBhbGwga25vd24gbG9jYWwgc3RvcmFnZSBvcmlnaW5zIGhlcmUgYWxvbmcgd2l0aCB0aGVpciBx
dW90YXMKK30KKwordm9pZCBMb2NhbFN0b3JhZ2U6OnBlcmZvcm1TeW5jKCkKK3sKKyAgICBBU1NF
UlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIEZJWE1FOiBXcml0ZSBvdXQgbmV3IG9yaWdp
bnMgYW5kIHF1b3RhcyBoZXJlCit9CisKK3ZvaWQgTG9jYWxTdG9yYWdlOjpjbG9zZSgpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIExvY2FsU3RvcmFnZUFyZWFNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CisgICAgZm9yIChMb2NhbFN0b3Jh
Z2VBcmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT5zY2hlZHVsZUZpbmFsU3luYygpOworCisg
ICAgaWYgKG1fdGhyZWFkKSB7CisgICAgICAgIG1fdGhyZWFkLT50ZXJtaW5hdGUoKTsKKyAgICAg
ICAgbV90aHJlYWQgPSAwOworICAgIH0KK30KKworYm9vbCBMb2NhbFN0b3JhZ2U6OnNjaGVkdWxl
SW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKG1fdGhyZWFkKQorICAgICAgICBtX3RocmVhZC0+
c2NoZWR1bGVJbXBvcnQoYXJlYSk7CisKKyAgICByZXR1cm4gbV90aHJlYWQ7Cit9CisKK3ZvaWQg
TG9jYWxTdG9yYWdlOjpzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBh
cmVhKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fdGhyZWFkKQor
ICAgICAgICBtX3RocmVhZC0+c2NoZWR1bGVTeW5jKGFyZWEpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCisKSW5kZXg6IFdlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwCShyZXZpc2lvbiA0NDc0NSkKKysrIFdlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3
ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxvY2FsU3Rv
cmFnZS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VTeW5jTWFuYWdlci5oIgogCiAjaWYgRU5BQkxFKERP
TV9TVE9SQUdFKQogCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiTG9j
YWxTdG9yYWdlQXJlYS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAu
aCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgpAQCAtNDEsODMgKzQwLDIyIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgTG9jYWxTdG9yYWdlKj4g
TG9jYWxTdG9yYWdlTWFwOwotCi1zdGF0aWMgTG9jYWxTdG9yYWdlTWFwJiBsb2NhbFN0b3JhZ2VN
YXAoKQorUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IFN0b3JhZ2VTeW5jTWFuYWdlcjo6
Y3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExv
Y2FsU3RvcmFnZU1hcCwgbG9jYWxTdG9yYWdlTWFwLCAoKSk7Ci0gICAgcmV0dXJuIGxvY2FsU3Rv
cmFnZU1hcDsKLX0KLQotUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IExvY2FsU3RvcmFnZTo6bG9j
YWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBjb25zdCBTdHJpbmcgbG9va3Vw
UGF0aCA9IHBhdGguaXNOdWxsKCkgPyBTdHJpbmcoIiIpIDogcGF0aDsKLSAgICBMb2NhbFN0b3Jh
Z2VNYXA6Oml0ZXJhdG9yIGl0ID0gbG9jYWxTdG9yYWdlTWFwKCkuZmluZChsb29rdXBQYXRoKTsK
LSAgICBpZiAoaXQgPT0gbG9jYWxTdG9yYWdlTWFwKCkuZW5kKCkpIHsKLSAgICAgICAgUmVmUHRy
PExvY2FsU3RvcmFnZT4gbG9jYWxTdG9yYWdlID0gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZShs
b29rdXBQYXRoKSk7Ci0gICAgICAgIGxvY2FsU3RvcmFnZU1hcCgpLnNldChsb29rdXBQYXRoLCBs
b2NhbFN0b3JhZ2UuZ2V0KCkpOwotICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLnJlbGVhc2Uo
KTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdG9yYWdlU3luY01hbmFnZXIocGF0aCkpOwogfQogCi1Mb2NhbFN0b3JhZ2U6Okxv
Y2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCitTdG9yYWdlU3luY01hbmFnZXI6OlN0b3Jh
Z2VTeW5jTWFuYWdlcihjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgOiBtX3BhdGgocGF0aC5jb3B5
KCkpCiB7Ci0gICAgLy8gSWYgdGhlIHBhdGggaXMgZW1wdHksIHdlIGtub3cgd2UncmUgbmV2ZXIg
Z29pbmcgdG8gYmUgdXNpbmcgdGhlIHRocmVhZCBmb3IgYW55dGhpbmcsIHNvIGRvbid0IHN0YXJ0
IGl0LgotICAgIC8vIEluIHRoZSBmdXR1cmUsIHdlIG1pZ2h0IGFsc28gd2FudCB0byBjb25zaWRl
ciByZW1vdmluZyBpdCBmcm9tIHRoZSBET00gaW4gdGhhdCBjYXNlIC0gPHJkYXI6Ly9wcm9ibGVt
LzU5NjA0NzA+Ci0gICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KKyAg
ICBBU1NFUlQoIW1fcGF0aC5pc0VtcHR5KCkpOwogICAgIG1fdGhyZWFkID0gTG9jYWxTdG9yYWdl
VGhyZWFkOjpjcmVhdGUoKTsKICAgICBtX3RocmVhZC0+c3RhcnQoKTsKLSAgICBtX3RocmVhZC0+
c2NoZWR1bGVJbXBvcnQodGhpcyk7Ci19Ci0KLUxvY2FsU3RvcmFnZTo6fkxvY2FsU3RvcmFnZSgp
Ci17Ci0gICAgQVNTRVJUKGxvY2FsU3RvcmFnZU1hcCgpLmdldChtX3BhdGgpID09IHRoaXMpOwot
ICAgIGxvY2FsU3RvcmFnZU1hcCgpLnJlbW92ZShtX3BhdGgpOwotfQotCi1QYXNzUmVmUHRyPFN0
b3JhZ2VBcmVhPiBMb2NhbFN0b3JhZ2U6OnN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKiBvcmln
aW4pCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIEZJWE1FOiBJZiB0
aGUgc2VjdXJpdHkgb3JpZ2luIGluIHF1ZXN0aW9uIGhhcyBuZXZlciBoYWQgYSBzdG9yYWdlIGFy
ZWEgZXN0YWJsaXNoZWQsCi0gICAgLy8gd2UgbmVlZCB0byBhc2sgYSBjbGllbnQgY2FsbCBpZiBl
c3RhYmxpc2hpbmcgaXQgaXMgb2theS4gIElmIHRoZSBjbGllbnQgZGVuaWVzIHRoZSByZXF1ZXN0
LAotICAgIC8vIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIG51bGwuCi0gICAgLy8gVGhlIHNvdXJj
ZUZyYW1lIGFyZ3VtZW50IGV4aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2YgYXNraW5nIGEgY2xpZW50
LgotICAgIC8vIFRvIGtub3cgaWYgYW4gYXJlYSBoYXMgcHJldmlvdXNseSBiZWVuIGVzdGFibGlz
aGVkLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhpcyBMb2NhbFN0b3JhZ2UgCi0gICAgLy8gb2Jq
ZWN0IGhhcyBmaW5pc2hlZCBpdCdzIEFyZWFJbXBvcnQgdGFzay4KLQotCi0gICAgLy8gRklYTUU6
IElmIHRoZSBzdG9yYWdlIGFyZWEgaXMgYmVpbmcgZXN0YWJsaXNoZWQgZm9yIHRoZSBmaXJzdCB0
aW1lIGhlcmUsIHdlIG5lZWQgdG8gCi0gICAgLy8gc3luYyBpdHMgZXhpc3RhbmNlIGFuZCBxdW90
YSBvdXQgdG8gZGlzayB2aWEgYW4gdGFzayBvZiB0eXBlIEFyZWFTeW5jCi0KLSAgICBSZWZQdHI8
TG9jYWxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWE7Ci0gICAgaWYgKHN0b3JhZ2VBcmVhID0gbV9z
dG9yYWdlQXJlYU1hcC5nZXQob3JpZ2luKSkKLSAgICAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJl
bGVhc2UoKTsKLSAgICAgICAgCi0gICAgc3RvcmFnZUFyZWEgPSBMb2NhbFN0b3JhZ2VBcmVhOjpj
cmVhdGUob3JpZ2luLCB0aGlzKTsKLSAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0
b3JhZ2VBcmVhKTsKLSAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwogfQogCi1TdHJp
bmcgTG9jYWxTdG9yYWdlOjpmdWxsRGF0YWJhc2VGaWxlbmFtZShTZWN1cml0eU9yaWdpbiogb3Jp
Z2luKQorU3RyaW5nIFN0b3JhZ2VTeW5jTWFuYWdlcjo6ZnVsbERhdGFiYXNlRmlsZW5hbWUoU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbikKIHsKLSAgICAvLyBGSVhNRTogT25jZSB3ZSBhY3R1YWxseSB0
cmFjayBvcmlnaW4vcXVvdGEgZW50cmllcyB0byBzZWUgd2hpY2ggb3JpZ2lucyBoYXZlIGxvY2Fs
IHN0b3JhZ2UgZXN0YWJsaXNoZWQsCi0gICAgLy8gd2Ugd2lsbCByZXR1cm4gYW4gZW1wdHkgcGF0
aCBuYW1lIGlmIHRoZSBvcmlnaW4gaXNuJ3QgYWxsb3dlZCB0byBoYXZlIExvY2FsU3RvcmFnZS4K
LSAgICAvLyBXZSdsbCBuZWVkIHRvIHdhaXQgaGVyZSB1bnRpbCB0aGUgQXJlYUltcG9ydCB0YXNr
IHRvIGNvbXBsZXRlIGJlZm9yZSBtYWtpbmcgdGhhdCBkZWNpc2lvbi4KLQotICAgIGlmIChtX3Bh
dGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KICAgICBBU1NFUlQob3Jp
Z2luKTsKLSAgICBpZiAoIW9yaWdpbikKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCiAgICAg
aWYgKCFtYWtlQWxsRGlyZWN0b3JpZXMobV9wYXRoKSkgewogICAgICAgICBMT0dfRVJST1IoIlVu
YWJsZWQgdG8gY3JlYXRlIExvY2FsU3RvcmFnZSBkYXRhYmFzZSBwYXRoICVzIiwgbV9wYXRoLnV0
ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0xMjYsNDUgKzY0LDI1
IEBAIFN0cmluZyBMb2NhbFN0b3JhZ2U6OmZ1bGxEYXRhYmFzZUZpbGVuYW0KICAgICByZXR1cm4g
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fcGF0aCwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZp
ZXIoKSArICIubG9jYWxzdG9yYWdlIik7CiB9CiAKLXZvaWQgTG9jYWxTdG9yYWdlOjpwZXJmb3Jt
SW1wb3J0KCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIEZJWE1F
OiBJbXBvcnQgYWxsIGtub3duIGxvY2FsIHN0b3JhZ2Ugb3JpZ2lucyBoZXJlIGFsb25nIHdpdGgg
dGhlaXIgcXVvdGFzCi19Ci0KLXZvaWQgTG9jYWxTdG9yYWdlOjpwZXJmb3JtU3luYygpCi17Ci0g
ICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBGSVhNRTogV3JpdGUgb3V0IG5l
dyBvcmlnaW5zIGFuZCBxdW90YXMgaGVyZQotfQotCi12b2lkIExvY2FsU3RvcmFnZTo6Y2xvc2Uo
KQordm9pZCBTdG9yYWdlU3luY01hbmFnZXI6OmNsb3NlKCkKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotCi0gICAgTG9jYWxTdG9yYWdlQXJlYU1hcDo6aXRlcmF0b3IgZW5kID0gbV9z
dG9yYWdlQXJlYU1hcC5lbmQoKTsKLSAgICBmb3IgKExvY2FsU3RvcmFnZUFyZWFNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIGl0LT5zZWNvbmQtPnNjaGVkdWxlRmluYWxTeW5jKCk7Ci0KICAgICBpZiAobV90aHJlYWQp
IHsKICAgICAgICAgbV90aHJlYWQtPnRlcm1pbmF0ZSgpOwogICAgICAgICBtX3RocmVhZCA9IDA7
CiAgICAgfQogfQogCi1ib29sIExvY2FsU3RvcmFnZTo6c2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0
cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVhKQorYm9vbCBTdG9yYWdlU3luY01hbmFnZXI6OnNjaGVk
dWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotCiAgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICBtX3RocmVh
ZC0+c2NoZWR1bGVJbXBvcnQoYXJlYSk7CiAKICAgICByZXR1cm4gbV90aHJlYWQ7CiB9CiAKLXZv
aWQgTG9jYWxTdG9yYWdlOjpzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVh
PiBhcmVhKQordm9pZCBTdG9yYWdlU3luY01hbmFnZXI6OnNjaGVkdWxlU3luYyhQYXNzUmVmUHRy
PExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICBpZiAobV90aHJlYWQpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5h
Z2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5o
CShyZXZpc2lvbiA0NDc0NSkJKGZyb20gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZS5oOjQ0
NzQ1KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBMb2NhbFN0b3JhZ2VfaAorI2RlZmluZSBMb2NhbFN0b3JhZ2Vf
aAorCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlQXJl
YS5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRhc2suaCIKKyNpbmNsdWRlICJMb2NhbFN0b3Jh
Z2VUaHJlYWQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKKworI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFBhZ2VHcm91
cDsKKyAgICBjbGFzcyBTdG9yYWdlQXJlYTsKKworICAgIGNsYXNzIExvY2FsU3RvcmFnZSA6IHB1
YmxpYyBUaHJlYWRTYWZlU2hhcmVkPExvY2FsU3RvcmFnZT4geworICAgIHB1YmxpYzoKKyAgICAg
ICAgfkxvY2FsU3RvcmFnZSgpOworCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3Rv
cmFnZT4gbG9jYWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisKKyAgICAgICAgUGFzc1Jl
ZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qKTsKKworICAgICAg
ICBib29sIHNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4pOworICAg
ICAgICB2b2lkIHNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKKwor
ICAgICAgICB2b2lkIGNsb3NlKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBMb2NhbFN0b3Jh
Z2UoY29uc3QgU3RyaW5nJiBwYXRoKTsKKworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiwgUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+LCBTZWN1cml0eU9yaWdp
bkhhc2g+IExvY2FsU3RvcmFnZUFyZWFNYXA7CisgICAgICAgIExvY2FsU3RvcmFnZUFyZWFNYXAg
bV9zdG9yYWdlQXJlYU1hcDsKKworICAgICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPiBt
X3RocmVhZDsKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgc3ViamVjdCB0byB0
aHJlYWQgc3luY2hyb25pemF0aW9uIGlzc3VlcworICAgIHB1YmxpYzoKKyAgICAgICAgLy8gVG8g
YmUgY2FsbGVkIGZyb20gdGhlIGJhY2tncm91bmQgdGhyZWFkOgorICAgICAgICBTdHJpbmcgZnVs
bERhdGFiYXNlRmlsZW5hbWUoU2VjdXJpdHlPcmlnaW4qKTsKKworICAgICAgICB2b2lkIHBlcmZv
cm1JbXBvcnQoKTsKKyAgICAgICAgdm9pZCBwZXJmb3JtU3luYygpOworCisgICAgcHJpdmF0ZToK
KyAgICAgICAgU3RyaW5nIG1fcGF0aDsKKworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiwgdW5zaWduZWQgbG9uZyBsb25nLCBTZWN1cml0eU9yaWdpbkhhc2g+
IFNlY3VyaXR5T3JpZ2luUXVvdGVNYXA7CisgICAgICAgIFNlY3VyaXR5T3JpZ2luUXVvdGVNYXAg
bV9zZWN1cml0eU9yaWdpblF1b3RlTWFwOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKKworI2VuZGlmIC8vIExvY2FsU3Rv
cmFnZV9oCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCShyZXZpc2lvbiA0
NDc0NSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMsMzIgKzIzLDIyIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVm
IExvY2FsU3RvcmFnZV9oCi0jZGVmaW5lIExvY2FsU3RvcmFnZV9oCisjaWZuZGVmIFN0b3JhZ2VT
eW5jTWFuYWdlcl9oCisjZGVmaW5lIFN0b3JhZ2VTeW5jTWFuYWdlcl9oCiAKICNpZiBFTkFCTEUo
RE9NX1NUT1JBR0UpCiAKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSAi
TG9jYWxTdG9yYWdlVGFzay5oIgogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRocmVhZC5oIgotI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgogCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgUGFnZUdyb3VwOwotICAgIGNsYXNzIFN0
b3JhZ2VBcmVhOwotCi0gICAgY2xhc3MgTG9jYWxTdG9yYWdlIDogcHVibGljIFRocmVhZFNhZmVT
aGFyZWQ8TG9jYWxTdG9yYWdlPiB7CisgICAgY2xhc3MgU3RvcmFnZVN5bmNNYW5hZ2VyIDogcHVi
bGljIFRocmVhZFNhZmVTaGFyZWQ8U3RvcmFnZVN5bmNNYW5hZ2VyPiB7CiAgICAgcHVibGljOgot
ICAgICAgICB+TG9jYWxTdG9yYWdlKCk7Ci0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9j
YWxTdG9yYWdlPiBsb2NhbFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBwYXRoKTsKLQotICAgICAgICBQ
YXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiopOworICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIHBhdGgpOwogCiAgICAgICAgIGJvb2wgc2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxM
b2NhbFN0b3JhZ2VBcmVhPik7CiAgICAgICAgIHZvaWQgc2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8
TG9jYWxTdG9yYWdlQXJlYT4pOwpAQCAtNTYsMTAgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIGNsb3NlKCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBMb2NhbFN0
b3JhZ2UoY29uc3QgU3RyaW5nJiBwYXRoKTsKLQotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiwgUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+LCBTZWN1cml0eU9y
aWdpbkhhc2g+IExvY2FsU3RvcmFnZUFyZWFNYXA7Ci0gICAgICAgIExvY2FsU3RvcmFnZUFyZWFN
YXAgbV9zdG9yYWdlQXJlYU1hcDsKKyAgICAgICAgU3RvcmFnZVN5bmNNYW5hZ2VyKGNvbnN0IFN0
cmluZyYgcGF0aCk7CiAKICAgICAgICAgUmVmUHRyPExvY2FsU3RvcmFnZVRocmVhZD4gbV90aHJl
YWQ7CiAKQEAgLTY4LDE4ICs1NSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8v
IFRvIGJlIGNhbGxlZCBmcm9tIHRoZSBiYWNrZ3JvdW5kIHRocmVhZDoKICAgICAgICAgU3RyaW5n
IGZ1bGxEYXRhYmFzZUZpbGVuYW1lKFNlY3VyaXR5T3JpZ2luKik7CiAKLSAgICAgICAgdm9pZCBw
ZXJmb3JtSW1wb3J0KCk7Ci0gICAgICAgIHZvaWQgcGVyZm9ybVN5bmMoKTsKLQogICAgIHByaXZh
dGU6CiAgICAgICAgIFN0cmluZyBtX3BhdGg7Ci0KLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJl
ZlB0cjxTZWN1cml0eU9yaWdpbj4sIHVuc2lnbmVkIGxvbmcgbG9uZywgU2VjdXJpdHlPcmlnaW5I
YXNoPiBTZWN1cml0eU9yaWdpblF1b3RlTWFwOwotICAgICAgICBTZWN1cml0eU9yaWdpblF1b3Rl
TWFwIG1fc2VjdXJpdHlPcmlnaW5RdW90ZU1hcDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKLSNlbmRpZiAvLyBMb2Nh
bFN0b3JhZ2VfaAorI2VuZGlmIC8vIFN0b3JhZ2VTeW5jTWFuYWdlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31571</attachid>
            <date>2009-06-19 16:32:39 -0700</date>
            <delta_ts>2009-06-22 14:46:30 -0700</delta_ts>
            <desc>patch 1 - v6</desc>
            <filename>1.20090619.patch</filename>
            <type>text/plain</type>
            <size>40384</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDc0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjIgQEAKKzIwMDktMDYtMTYgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rmlyc3Qgc3RlcCBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUz
NzYKKworICAgICAgICBBZGQgU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcC9oCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgorCisgICAgICAgIElu
IHByZXBhcmF0aW9uIGZvciBjb21iaW5pbmcgU2Vzc2lvblN0b3JhZ2UgYW5kIExvY2FsU3RvcmFn
ZSBpbnRvIGEKKyAgICAgICAgc2luZ2xlIFN0b3JhZ2VNYW5hZ2VyLCBtb3ZlIHRoZSBzeW5jaW5n
IGJpdHMgb3V0IG9mIExvY2FsU3RvcmFnZSBhbmQKKyAgICAgICAgaW50byBpdHMgb3duIGNsYXNz
LgorCisgICAgICAgIFRoZSBuZXh0IHN0ZXAgaXMgdG8gY29tYmluZSBMb2NhbFN0b3JhZ2VBcmVh
IGFuZCBTZXNzaW9uU3RvcmFnZUFyZWEKKyAgICAgICAgaW50byBvbmUuICBUaGVuIFNlc3Npb25T
dG9yYWdlIGFuZCBMb2NhbFN0b3JhZ2UgY2FuIGJlIGNvbWJpbmVkLgorCisgICAgICAgIE5vdGUg
dGhhdCBjb21iaW5pbmcgdGhlbSB3aWxsIGN1dCBkb3duIG9uIGNvZGUgcGF0aHMgdGhhdCBtdXN0
IGJlCisgICAgICAgIHByb3hpZWQsIGVsaW1pbmF0ZSB2aXJ0dWFsIGRpc3BhdGNoLCBhbmQgYWxs
b3cgQ2hyb21pdW0gdG8gKGV2ZW50dWFsbHkpCisgICAgICAgIHdyaXRlIGhpc3RvcmljYWwgc2Vz
c2lvblN0b3JhZ2UgdG8gZGlzayB3aGVuIG1lbW9yeSBpcyBnZXR0aW5nIHRpZ2h0LgorCisgICAg
ICAgIEFsc28gcmVtb3ZlIGEgY291cGxlIGJpdHMgb2YgY3J1ZnQgaW5jbHVkaW5nIGNvZGUgZm9y
IHF1b3RhcyB3aGljaCBpcworICAgICAgICB1bm5lY2Vzc2FyeSAoc2luY2UgYSBtZXRhLWRhdGEg
ZGIgaXMgdW5uZWNlc3Nhcnkgc2luY2UgeW91IGNhbiBqdXN0CisgICAgICAgIGNvdW50IGJ5dGVz
IGFzIHlvdSByZWFkIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlcyBpbnRvIG1lbW9yeSkuCisK
KyAgICAgICAgKiBzdG9yYWdlL0xvY2FsU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
b2NhbFN0b3JhZ2U6OkxvY2FsU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3Jh
Z2U6OnN0b3JhZ2VBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZTo6Y2xvc2Up
OgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlLmg6CisgICAgICAgICogc3RvcmFnZS9M
b2NhbFN0b3JhZ2VBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsU3RvcmFnZUFyZWE6
OkxvY2FsU3RvcmFnZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6
c2NoZWR1bGVGaW5hbFN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6
c3luY1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlQXJlYTo6cGVy
Zm9ybUltcG9ydCk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmg6CisgICAg
ICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VBcmVhOjpjcmVhdGUpOgorICAgICAgICAqIHN0b3Jh
Z2UvTG9jYWxTdG9yYWdlVGFzay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VU
YXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmg6
CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VUYXNrOjopOgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlSW1wb3J0KToKKyAgICAgICAgKiBzdG9yYWdlL0xv
Y2FsU3RvcmFnZVRocmVhZC5jcHA6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJl
YWQuaDoKKyAgICAgICAgKiBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmg6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6U3RvcmFnZVN5
bmNNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6ZnVsbERh
dGFiYXNlRmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVN5bmNNYW5hZ2VyOjpj
bG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlU3luY01hbmFnZXI6OnNjaGVkdWxlSW1w
b3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VTeW5jTWFuYWdlcjo6c2NoZWR1bGVTeW5j
KToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmguCisgICAgICAgIChXZWJDb3JlOjopOgorCiAy
MDA5LTA2LTE2ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDQ0NzQ1KQorKysg
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjA3OSw3ICsyMDc5LDkg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmNw
cCBcCiAJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5oIFwKIAlXZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZU1hcC5jcHAgXAotCVdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlTWFwLmgKKwlXZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZU1hcC5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5h
Z2VyLmNwcCBcCisJV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCiBlbmRpZiAj
IEVORCBFTkFCTEVfRE9NX1NUT1JBR0UKIAogIyAtLS0tCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQ0NzQ1KQor
KysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTM2NCw2ICsxMzY0LDcg
QEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0RPTV9TVE9SQUdFPTEpIAogICAgICAgICBzdG9y
YWdlL1N0b3JhZ2VFdmVudC5jcHAgXAogICAgICAgICBzdG9yYWdlL1Nlc3Npb25TdG9yYWdlLmNw
cCBcCiAgICAgICAgIHN0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VBcmVhLmNwcCBcCisgICAgICAgIHN0
b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTU3Rv
cmFnZUN1c3RvbS5jcHAKIAogICAgIElETF9CSU5ESU5HUyArPSBcCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJr
bAkocmV2aXNpb24gNDQ3NDUpCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAxNSw2ICsxMDE1LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0
IG9mIGZpbGVzIG5lZQogICAgICAgICBzdG9yYWdlL1N0b3JhZ2VNYXAuY3BwCiAgICAgICAgIHN0
b3JhZ2UvU2Vzc2lvblN0b3JhZ2UuY3BwCiAgICAgICAgIHN0b3JhZ2UvU2Vzc2lvblN0b3JhZ2VB
cmVhLmNwcAorICAgICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKICAgICA8L3Nl
dD4KIAogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9IldFQkNPUkVfU09VUkNFU19YTUwiPgpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0NDc0NSkKKysr
IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAg
LTE1NjU5LDYgKzE1NjU5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2Vc
U3RvcmFnZVN5bmNNYW5hZ2VyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFZlcnNpb25DaGFuZ2VDYWxsYmFjay5oIg0KIAkJ
CQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA0NDc0NSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjU4LDYgKzQyNTgsOCBAQAogCQlD
MERGQzg3MDBEQjY4NDFBMDAzRUFFN0MgLyogSlNDb25zb2xlQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwREZDODZGMERCNjg0MUEwMDNF
QUU3QyAvKiBKU0NvbnNvbGVDdXN0b20uY3BwICovOyB9OwogCQlDMTA1REE2MjBGM0FBNjhGMDAx
REQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzEwNURBNjEwRjNBQTY4RjAwMURENDRGIC8qIFRl
eHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCAqLzsgfTsKIAkJQzEwNURBNjQwRjNBQTZCODAwMURE
NDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDMTA1REE2MzBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29k
aW5nRGV0ZWN0b3IuaCAqLzsgfTsKKwkJQzUxMDJEOTQwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3Jh
Z2VTeW5jTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5oICov
OyB9OworCQlDNTEwMkQ5NTBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1MTAyRDkz
MEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwICovOyB9OwogCQlDNkQ3
NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFEMzA5QUEyODJF
MDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggKi87IH07CiAJCUM2RDc0QUU0
MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRTMwOUFBMjkwQTAw
MEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi87IH07CiAJCUQwNUNFRDI5
MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4
IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi87IH07CkBAIC05MDU3LDYgKzkwNTksOCBAQAog
CQlDMERGQzg2RjBEQjY4NDFBMDAzRUFFN0MgLyogSlNDb25zb2xlQ3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ29uc29sZUN1c3RvbS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMxMDVEQTYxMEYzQUE2OEYwMDFERDQ0RiAvKiBUZXh0
RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUMxMDVEQTYzMEYzQUE2QjgwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3Rvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0RW5jb2RpbmdEZXRlY3Rvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTEwMkQ5MjBGRDlBQTJEMDBGQUZGMDQg
LyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0b3JhZ2VTeW5jTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTEw
MkQ5MzBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VTeW5jTWFuYWdlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2Rp
ZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlz
dExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjcwQTQwQkIy
QzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0QmxvY2tDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTk2NDYsNiArOTY1MCw4IEBACiAJCQkJNTFFMEJBQkQwREE1NTQ4NDAw
QTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5pZGwgKi8sCiAJCQkJNTFFMEJCMzcwREE1QUNCNjAwQTlF
NDE3IC8qIFN0b3JhZ2VNYXAuY3BwICovLAogCQkJCTUxRTBCQjM2MERBNUFDQjYwMEE5RTQxNyAv
KiBTdG9yYWdlTWFwLmggKi8sCisJCQkJQzUxMDJEOTIwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3Jh
Z2VTeW5jTWFuYWdlci5oICovLAorCQkJCUM1MTAyRDkzMEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9y
YWdlU3luY01hbmFnZXIuY3BwICovLAogCQkJKTsKIAkJCWluZGVudFdpZHRoID0gNDsKIAkJCXBh
dGggPSBzdG9yYWdlOwpAQCAtMTY3OTUsNiArMTY4MDEsNyBAQAogCQkJCTA4MUVCRjNCMEZEMzRG
NDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxOEY4
MzFCODBGRDQ4Qzc4MDBEOEM1NkIgLyogV29ya2VyTG9hZGVyUHJveHkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4OUNDQzUzMEY0NEU5ODEwMEI1REExMCAvKiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29t
bWFuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzUxMDJEOTQwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0
b3JhZ2VTeW5jTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVBNzY4MDQwRkU3MTI2NDAw
QUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0xODc4OSw2
ICsxODc5Niw3IEBACiAJCQkJODQ1RTcyRkIwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwODFFQkYzQTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmls
dGVyQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODlDQ0M1MjBGNDRFOTgxMDBCNURB
MTAgLyogUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QzUxMDJEOTUwRkQ5QUEyRDAwRkFGRjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCShyZXZpc2lvbiA0NDc0NSkK
KysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgog
I2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCisjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgi
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC02NSwxNCArNjYsOCBAQCBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gTG9jYWxTdG9yYWdlOjps
CiBMb2NhbFN0b3JhZ2U6OkxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgOiBt
X3BhdGgocGF0aC5jb3B5KCkpCiB7Ci0gICAgLy8gSWYgdGhlIHBhdGggaXMgZW1wdHksIHdlIGtu
b3cgd2UncmUgbmV2ZXIgZ29pbmcgdG8gYmUgdXNpbmcgdGhlIHRocmVhZCBmb3IgYW55dGhpbmcs
IHNvIGRvbid0IHN0YXJ0IGl0LgotICAgIC8vIEluIHRoZSBmdXR1cmUsIHdlIG1pZ2h0IGFsc28g
d2FudCB0byBjb25zaWRlciByZW1vdmluZyBpdCBmcm9tIHRoZSBET00gaW4gdGhhdCBjYXNlIC0g
PHJkYXI6Ly9wcm9ibGVtLzU5NjA0NzA+Ci0gICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3RocmVhZCA9IExvY2FsU3RvcmFnZVRocmVhZDo6Y3JlYXRlKCk7
Ci0gICAgbV90aHJlYWQtPnN0YXJ0KCk7Ci0gICAgbV90aHJlYWQtPnNjaGVkdWxlSW1wb3J0KHRo
aXMpOworICAgIGlmICghbV9wYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zeW5jTWFuYWdlciA9
IFN0b3JhZ2VTeW5jTWFuYWdlcjo6Y3JlYXRlKG1fcGF0aCk7CiB9CiAKIExvY2FsU3RvcmFnZTo6
fkxvY2FsU3RvcmFnZSgpCkBAIC05Miw1NCArODcsMTggQEAgUGFzc1JlZlB0cjxTdG9yYWdlQXJl
YT4gTG9jYWxTdG9yYWdlOjpzdAogICAgIC8vIFRvIGtub3cgaWYgYW4gYXJlYSBoYXMgcHJldmlv
dXNseSBiZWVuIGVzdGFibGlzaGVkLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhpcyBMb2NhbFN0
b3JhZ2UgCiAgICAgLy8gb2JqZWN0IGhhcyBmaW5pc2hlZCBpdCdzIEFyZWFJbXBvcnQgdGFzay4K
IAotCiAgICAgLy8gRklYTUU6IElmIHRoZSBzdG9yYWdlIGFyZWEgaXMgYmVpbmcgZXN0YWJsaXNo
ZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGhlcmUsIHdlIG5lZWQgdG8gCiAgICAgLy8gc3luYyBpdHMg
ZXhpc3RhbmNlIGFuZCBxdW90YSBvdXQgdG8gZGlzayB2aWEgYW4gdGFzayBvZiB0eXBlIEFyZWFT
eW5jCiAKICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWE7CiAgICAgaWYg
KHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdlQXJlYU1hcC5nZXQob3JpZ2luKSkKICAgICAgICAgcmV0
dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKLSAgICAgICAgCi0gICAgc3RvcmFnZUFyZWEgPSBM
b2NhbFN0b3JhZ2VBcmVhOjpjcmVhdGUob3JpZ2luLCB0aGlzKTsKKworICAgIHN0b3JhZ2VBcmVh
ID0gTG9jYWxTdG9yYWdlQXJlYTo6Y3JlYXRlKG9yaWdpbiwgbV9zeW5jTWFuYWdlcik7CiAgICAg
bV9zdG9yYWdlQXJlYU1hcC5zZXQob3JpZ2luLCBzdG9yYWdlQXJlYSk7CiAgICAgcmV0dXJuIHN0
b3JhZ2VBcmVhLnJlbGVhc2UoKTsKIH0KIAotU3RyaW5nIExvY2FsU3RvcmFnZTo6ZnVsbERhdGFi
YXNlRmlsZW5hbWUoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKLXsKLSAgICAvLyBGSVhNRTogT25j
ZSB3ZSBhY3R1YWxseSB0cmFjayBvcmlnaW4vcXVvdGEgZW50cmllcyB0byBzZWUgd2hpY2ggb3Jp
Z2lucyBoYXZlIGxvY2FsIHN0b3JhZ2UgZXN0YWJsaXNoZWQsCi0gICAgLy8gd2Ugd2lsbCByZXR1
cm4gYW4gZW1wdHkgcGF0aCBuYW1lIGlmIHRoZSBvcmlnaW4gaXNuJ3QgYWxsb3dlZCB0byBoYXZl
IExvY2FsU3RvcmFnZS4KLSAgICAvLyBXZSdsbCBuZWVkIHRvIHdhaXQgaGVyZSB1bnRpbCB0aGUg
QXJlYUltcG9ydCB0YXNrIHRvIGNvbXBsZXRlIGJlZm9yZSBtYWtpbmcgdGhhdCBkZWNpc2lvbi4K
LQotICAgIGlmIChtX3BhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0K
LSAgICBBU1NFUlQob3JpZ2luKTsKLSAgICBpZiAoIW9yaWdpbikKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotCi0gICAgaWYgKCFtYWtlQWxsRGlyZWN0b3JpZXMobV9wYXRoKSkgewotICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZWQgdG8gY3JlYXRlIExvY2FsU3RvcmFnZSBkYXRhYmFzZSBwYXRo
ICVzIiwgbV9wYXRoLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX3BhdGgsIG9yaWdp
bi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyAiLmxvY2Fsc3RvcmFnZSIpOwotfQotCi12b2lkIExv
Y2FsU3RvcmFnZTo6cGVyZm9ybUltcG9ydCgpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7Ci0KLSAgICAvLyBGSVhNRTogSW1wb3J0IGFsbCBrbm93biBsb2NhbCBzdG9yYWdlIG9yaWdp
bnMgaGVyZSBhbG9uZyB3aXRoIHRoZWlyIHF1b3RhcwotfQotCi12b2lkIExvY2FsU3RvcmFnZTo6
cGVyZm9ybVN5bmMoKQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8g
RklYTUU6IFdyaXRlIG91dCBuZXcgb3JpZ2lucyBhbmQgcXVvdGFzIGhlcmUKLX0KLQogdm9pZCBM
b2NhbFN0b3JhZ2U6OmNsb3NlKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAt
MTQ3LDI4ICsxMDYsOCBAQCB2b2lkIExvY2FsU3RvcmFnZTo6Y2xvc2UoKQogICAgIExvY2FsU3Rv
cmFnZUFyZWFNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3RvcmFnZUFyZWFNYXAuZW5kKCk7CiAgICAg
Zm9yIChMb2NhbFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBpdCA9IG1fc3RvcmFnZUFyZWFNYXAu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICBpdC0+c2Vjb25kLT5zY2hlZHVsZUZp
bmFsU3luYygpOwotCi0gICAgaWYgKG1fdGhyZWFkKSB7Ci0gICAgICAgIG1fdGhyZWFkLT50ZXJt
aW5hdGUoKTsKLSAgICAgICAgbV90aHJlYWQgPSAwOwotICAgIH0KLX0KLQotYm9vbCBMb2NhbFN0
b3JhZ2U6OnNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkK
LXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG1fdGhyZWFkKQotICAg
ICAgICBtX3RocmVhZC0+c2NoZWR1bGVJbXBvcnQoYXJlYSk7Ci0KLSAgICByZXR1cm4gbV90aHJl
YWQ7Ci19Ci0KLXZvaWQgTG9jYWxTdG9yYWdlOjpzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxMb2Nh
bFN0b3JhZ2VBcmVhPiBhcmVhKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAg
aWYgKG1fdGhyZWFkKQotICAgICAgICBtX3RocmVhZC0+c2NoZWR1bGVTeW5jKGFyZWEpOworICAg
IAorICAgIG1fc3luY01hbmFnZXIgPSAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL0xvY2FsU3RvcmFnZS5oCShyZXZpc2lvbiA0NDc0NSkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMjAgKzI5LDE3IEBACiAj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQogCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlQXJlYS5oIgot
I2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRhc2suaCIKLSNpbmNsdWRlICJMb2NhbFN0b3JhZ2VUaHJl
YWQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKIAogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi0gICAgY2xhc3MgUGFnZUdyb3VwOwogICAgIGNsYXNzIFN0b3JhZ2VBcmVhOworICAgIGNs
YXNzIFN0b3JhZ2VTeW5jTWFuYWdlcjsKIAotICAgIGNsYXNzIExvY2FsU3RvcmFnZSA6IHB1Ymxp
YyBUaHJlYWRTYWZlU2hhcmVkPExvY2FsU3RvcmFnZT4geworICAgIGNsYXNzIExvY2FsU3RvcmFn
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPExvY2FsU3RvcmFnZT4gewogICAgIHB1YmxpYzoKICAgICAg
ICAgfkxvY2FsU3RvcmFnZSgpOwogCkBAIC01MCw5ICs0Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICBQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYShTZWN1cml0
eU9yaWdpbiopOwogCi0gICAgICAgIGJvb2wgc2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2Nh
bFN0b3JhZ2VBcmVhPik7Ci0gICAgICAgIHZvaWQgc2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8TG9j
YWxTdG9yYWdlQXJlYT4pOwotCiAgICAgICAgIHZvaWQgY2xvc2UoKTsKIAogICAgIHByaXZhdGU6
CkBAIC02MSwyMSArNTUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4s
IFNlY3VyaXR5T3JpZ2luSGFzaD4gTG9jYWxTdG9yYWdlQXJlYU1hcDsKICAgICAgICAgTG9jYWxT
dG9yYWdlQXJlYU1hcCBtX3N0b3JhZ2VBcmVhTWFwOwogCi0gICAgICAgIFJlZlB0cjxMb2NhbFN0
b3JhZ2VUaHJlYWQ+IG1fdGhyZWFkOwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBtZW1iZXJzIGFy
ZSBzdWJqZWN0IHRvIHRocmVhZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzCi0gICAgcHVibGljOgot
ICAgICAgICAvLyBUbyBiZSBjYWxsZWQgZnJvbSB0aGUgYmFja2dyb3VuZCB0aHJlYWQ6Ci0gICAg
ICAgIFN0cmluZyBmdWxsRGF0YWJhc2VGaWxlbmFtZShTZWN1cml0eU9yaWdpbiopOwotCi0gICAg
ICAgIHZvaWQgcGVyZm9ybUltcG9ydCgpOwotICAgICAgICB2b2lkIHBlcmZvcm1TeW5jKCk7Ci0K
LSAgICBwcml2YXRlOgogICAgICAgICBTdHJpbmcgbV9wYXRoOwotCi0gICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCB1bnNpZ25lZCBsb25nIGxvbmcsIFNlY3Vy
aXR5T3JpZ2luSGFzaD4gU2VjdXJpdHlPcmlnaW5RdW90ZU1hcDsKLSAgICAgICAgU2VjdXJpdHlP
cmlnaW5RdW90ZU1hcCBtX3NlY3VyaXR5T3JpZ2luUXVvdGVNYXA7CisgICAgICAgIFJlZlB0cjxT
dG9yYWdlU3luY01hbmFnZXI+IG1fc3luY01hbmFnZXI7CiAgICAgfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcAkocmV2aXNp
b24gNDQ3NDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDE5ICs0NiwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBJbnN0
ZWFkLCBxdWV1ZSB1cCBhIGJhdGNoIG9mIGl0ZW1zIHRvIHN5bmMgYW5kIGFjdHVhbGx5IGRvIHRo
ZSBzeW5jIGF0IHRoZSBmb2xsb3dpbmcgaW50ZXJ2YWwuCiBzdGF0aWMgY29uc3QgZG91YmxlIExv
Y2FsU3RvcmFnZVN5bmNJbnRlcnZhbCA9IDEuMDsKIAotTG9jYWxTdG9yYWdlQXJlYTo6TG9jYWxT
dG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBMb2NhbFN0b3JhZ2UqIGxvY2FsU3Rv
cmFnZSkKK0xvY2FsU3RvcmFnZUFyZWE6OkxvY2FsU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IHN5bmNNYW5hZ2VyKQogICAg
IDogU3RvcmFnZUFyZWEob3JpZ2luKQogICAgICwgbV9zeW5jVGltZXIodGhpcywgJkxvY2FsU3Rv
cmFnZUFyZWE6OnN5bmNUaW1lckZpcmVkKQogICAgICwgbV9pdGVtc0NsZWFyZWQoZmFsc2UpCiAg
ICAgLCBtX2ZpbmFsU3luY1NjaGVkdWxlZChmYWxzZSkKLSAgICAsIG1fbG9jYWxTdG9yYWdlKGxv
Y2FsU3RvcmFnZSkKKyAgICAsIG1fc3luY01hbmFnZXIoc3luY01hbmFnZXIpCiAgICAgLCBtX2Ns
ZWFySXRlbXNXaGlsZVN5bmNpbmcoZmFsc2UpCiAgICAgLCBtX3N5bmNTY2hlZHVsZWQoZmFsc2Up
CiAgICAgLCBtX2ltcG9ydENvbXBsZXRlKGZhbHNlKQogewotICAgIEFTU0VSVChtX2xvY2FsU3Rv
cmFnZSk7Ci0gICAgCi0gICAgaWYgKCFtX2xvY2FsU3RvcmFnZS0+c2NoZWR1bGVJbXBvcnQodGhp
cykpCisgICAgaWYgKCFtX3N5bmNNYW5hZ2VyIHx8ICFtX3N5bmNNYW5hZ2VyLT5zY2hlZHVsZUlt
cG9ydCh0aGlzKSkKICAgICAgICAgbV9pbXBvcnRDb21wbGV0ZSA9IHRydWU7CiB9CiAKQEAgLTY5
LDYgKzY3LDEwIEBAIExvY2FsU3RvcmFnZUFyZWE6On5Mb2NhbFN0b3JhZ2VBcmVhKCkKIAogdm9p
ZCBMb2NhbFN0b3JhZ2VBcmVhOjpzY2hlZHVsZUZpbmFsU3luYygpCiB7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fc3luY01hbmFnZXIpCisgICAgICAgIHJldHVybjsK
KwogICAgIGlmIChtX3N5bmNUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3N5bmNUaW1lci5z
dG9wKCk7CiAgICAgZWxzZSB7CkBAIC0yNjksNiArMjcxLDggQEAgdm9pZCBMb2NhbFN0b3JhZ2VB
cmVhOjpzY2hlZHVsZUNsZWFyKCkKIHZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6c3luY1RpbWVyRmly
ZWQoVGltZXI8TG9jYWxTdG9yYWdlQXJlYT4qKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgaWYgKCFtX3N5bmNNYW5hZ2VyKQorICAgICAgICByZXR1cm47CiAKICAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBtX2NoYW5nZWRJdGVtcy5iZWdpbigp
OwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+OjppdGVyYXRvciBlbmQgPSBtX2NoYW5nZWRJ
dGVtcy5lbmQoKTsKQEAgLTI5Miw3ICsyOTYsNyBAQCB2b2lkIExvY2FsU3RvcmFnZUFyZWE6OnN5
bmNUaW1lckZpcmVkKFRpCiAgICAgICAgICAgICAvLyBwZXJmb3JtU3luYyBmdW5jdGlvbi4KICAg
ICAgICAgICAgIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOwogCi0gICAgICAgICAgICBtX2xv
Y2FsU3RvcmFnZS0+c2NoZWR1bGVTeW5jKHRoaXMpOworICAgICAgICAgICAgbV9zeW5jTWFuYWdl
ci0+c2NoZWR1bGVTeW5jKHRoaXMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMDcsOSArMzEx
LDExIEBAIHZvaWQgTG9jYWxTdG9yYWdlQXJlYTo6cGVyZm9ybUltcG9ydCgpCiB7CiAgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLmlzT3BlbigpKTsK
KyAgICBpZiAoIW1fc3luY01hbmFnZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBk
YXRhYmFzZUZpbGVuYW1lID0gbV9zeW5jTWFuYWdlci0+ZnVsbERhdGFiYXNlRmlsZW5hbWUoc2Vj
dXJpdHlPcmlnaW4oKSk7CiAKLSAgICBTdHJpbmcgZGF0YWJhc2VGaWxlbmFtZSA9IG1fbG9jYWxT
dG9yYWdlLT5mdWxsRGF0YWJhc2VGaWxlbmFtZShzZWN1cml0eU9yaWdpbigpKTsKLSAgICAKICAg
ICBpZiAoZGF0YWJhc2VGaWxlbmFtZS5pc0VtcHR5KCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJG
aWxlbmFtZSBmb3IgbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSBpcyBlbXB0eSAtIGNhbm5vdCBvcGVu
IGZvciBwZXJzaXN0ZW50IHN0b3JhZ2UiKTsKICAgICAgICAgbWFya0ltcG9ydGVkKCk7CkluZGV4
OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmgJKHJldmlzaW9uIDQ0NzQ1KQorKysgV2ViQ29y
ZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjMgKzMx
LDI0IEBACiAjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKICNpbmNsdWRlICJTdG9yYWdlQXJl
YS5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJTdG9yYWdlU3luY01hbmFn
ZXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLSAgICBjbGFzcyBMb2NhbFN0b3JhZ2U7CisgICAgY2xh
c3MgU3RvcmFnZVN5bmNNYW5hZ2VyOwogICAgIAogICAgIGNsYXNzIExvY2FsU3RvcmFnZUFyZWEg
OiBwdWJsaWMgU3RvcmFnZUFyZWEgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+TG9j
YWxTdG9yYWdlQXJlYSgpOwogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFn
ZUFyZWE+IGNyZWF0ZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBMb2NhbFN0b3JhZ2UqIGxvY2Fs
U3RvcmFnZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFnZUFyZWEob3JpZ2luLCBs
b2NhbFN0b3JhZ2UpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VB
cmVhPiBjcmVhdGUoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUGFzc1JlZlB0cjxTdG9yYWdlU3lu
Y01hbmFnZXI+IHN5bmNNYW5hZ2VyKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdl
QXJlYShvcmlnaW4sIHN5bmNNYW5hZ2VyKSk7IH0KIAogICAgICAgICB2b2lkIHNjaGVkdWxlRmlu
YWxTeW5jKCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBMb2NhbFN0b3JhZ2VBcmVhKFNlY3Vy
aXR5T3JpZ2luKiwgTG9jYWxTdG9yYWdlKik7CisgICAgICAgIExvY2FsU3RvcmFnZUFyZWEoU2Vj
dXJpdHlPcmlnaW4qLCBQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gc3luY01hbmFnZXIp
OwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBpdGVtQ2hhbmdlZChjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNv
dXJjZUZyYW1lKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGl0ZW1SZW1vdmVkKGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpOwpAQCAt
NjMsNyArNjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAogICAgICAgICBib29s
IG1fZmluYWxTeW5jU2NoZWR1bGVkOwogCi0gICAgICAgIExvY2FsU3RvcmFnZSogbV9sb2NhbFN0
b3JhZ2U7CisgICAgICAgIFJlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IG1fc3luY01hbmFnZXI7
CiAKICAgICAgICAgLy8gVGhlIGRhdGFiYXNlIGhhbmRsZSB3aWxsIG9ubHkgZXZlciBiZSBvcGVu
ZWQgYW5kIHVzZWQgb24gdGhlIGJhY2tncm91bmQgdGhyZWFkLgogICAgICAgICBTUUxpdGVEYXRh
YmFzZSBtX2RhdGFiYXNlOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcAko
cmV2aXNpb24gNDQ3NDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDE0ICs0Miw2IEBAIExvY2FsU3RvcmFnZVRhc2s6OkxvY2Fs
U3RvcmFnZVRhc2soVHlwZSAKICAgICBBU1NFUlQobV90eXBlID09IEFyZWFJbXBvcnQgfHwgbV90
eXBlID09IEFyZWFTeW5jKTsKIH0KIAotTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFz
ayhUeXBlIHR5cGUsIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBzdG9yYWdlKQotICAgIDogbV90
eXBlKHR5cGUpCi0gICAgLCBtX3N0b3JhZ2Uoc3RvcmFnZSkKLXsKLSAgICBBU1NFUlQobV9zdG9y
YWdlKTsKLSAgICBBU1NFUlQobV90eXBlID09IFN0b3JhZ2VJbXBvcnQgfHwgbV90eXBlID09IFN0
b3JhZ2VTeW5jKTsKLX0KLQogTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBl
IHR5cGUsIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPiB0aHJlYWQpCiAgICAgOiBtX3R5
cGUodHlwZSkKICAgICAsIG1fdGhyZWFkKHRocmVhZCkKQEAgLTYxLDE0ICs1Myw2IEBAIExvY2Fs
U3RvcmFnZVRhc2s6OkxvY2FsU3RvcmFnZVRhc2soVHlwZSAKIHZvaWQgTG9jYWxTdG9yYWdlVGFz
azo6cGVyZm9ybVRhc2soKQogewogICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2Ug
U3RvcmFnZUltcG9ydDoKLSAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UpOwotICAgICAgICAg
ICAgbV9zdG9yYWdlLT5wZXJmb3JtSW1wb3J0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBTdG9yYWdlU3luYzoKLSAgICAgICAgICAgIEFTU0VSVChtX3N0b3JhZ2UpOwotICAg
ICAgICAgICAgbV9zdG9yYWdlLT5wZXJmb3JtU3luYygpOwotICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQXJlYUltcG9ydDoKICAgICAgICAgICAgIEFTU0VSVChtX2FyZWEpOwogICAg
ICAgICAgICAgbV9hcmVhLT5wZXJmb3JtSW1wb3J0KCk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2Uv
TG9jYWxTdG9yYWdlVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0
b3JhZ2VUYXNrLmgJKHJldmlzaW9uIDQ0NzQ1KQorKysgV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3Rv
cmFnZVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTcgKzM0LDE0IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIExvY2FsU3RvcmFnZTsKICAgICBjbGFzcyBMb2NhbFN0
b3JhZ2VBcmVhOwogICAgIGNsYXNzIExvY2FsU3RvcmFnZVRocmVhZDsKIAogICAgIGNsYXNzIExv
Y2FsU3RvcmFnZVRhc2sgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxMb2NhbFN0b3JhZ2VUYXNr
PiB7CiAgICAgcHVibGljOgotICAgICAgICBlbnVtIFR5cGUgeyBTdG9yYWdlSW1wb3J0LCBTdG9y
YWdlU3luYywgQXJlYUltcG9ydCwgQXJlYVN5bmMsIFRlcm1pbmF0ZVRocmVhZCB9OworICAgICAg
ICBlbnVtIFR5cGUgeyBBcmVhSW1wb3J0LCBBcmVhU3luYywgVGVybWluYXRlVGhyZWFkIH07CiAK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlSW1wb3J0
KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBzdG9yYWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
TG9jYWxTdG9yYWdlVGFzayhTdG9yYWdlSW1wb3J0LCBzdG9yYWdlKSk7IH0KICAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlSW1wb3J0KFBhc3NSZWZQdHI8
TG9jYWxTdG9yYWdlQXJlYT4gYXJlYSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExvY2FsU3RvcmFn
ZVRhc2soQXJlYUltcG9ydCwgYXJlYSkpOyB9Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExv
Y2FsU3RvcmFnZVRhc2s+IGNyZWF0ZVN5bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+IHN0b3Jh
Z2UpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKFN0b3JhZ2VTeW5jLCBz
dG9yYWdlKSk7IH0KICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4g
Y3JlYXRlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKEFyZWFTeW5jLCBhcmVhKSk7IH0KICAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlVGVybWluYXRlKFBhc3NS
ZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPiB0aHJlYWQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBM
b2NhbFN0b3JhZ2VUYXNrKFRlcm1pbmF0ZVRocmVhZCwgdGhyZWFkKSk7IH0KIApAQCAtNTIsMTIg
KzQ5LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIExv
Y2FsU3RvcmFnZVRhc2soVHlwZSwgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPik7Ci0gICAg
ICAgIExvY2FsU3RvcmFnZVRhc2soVHlwZSwgUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+KTsKICAg
ICAgICAgTG9jYWxTdG9yYWdlVGFzayhUeXBlLCBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZVRocmVh
ZD4pOwogCiAgICAgICAgIFR5cGUgbV90eXBlOwogICAgICAgICBSZWZQdHI8TG9jYWxTdG9yYWdl
QXJlYT4gbV9hcmVhOwotICAgICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlPiBtX3N0b3JhZ2U7CiAg
ICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2VUaHJlYWQ+IG1fdGhyZWFkOwogICAgIH07CiAKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuY3BwCShyZXZpc2lvbiA0NDc0NSkK
KysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NywxOCArODcsNiBAQCB2b2lkKiBMb2NhbFN0b3JhZ2VUaHJlYWQ6OmxvY2FsU3RvcmFn
ZVRoCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVs
ZUltcG9ydChQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gc3RvcmFnZSkKLXsKLSAgICBBU1NFUlQo
IW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7Ci0gICAgbV9xdWV1ZS5hcHBlbmQoTG9j
YWxTdG9yYWdlVGFzazo6Y3JlYXRlSW1wb3J0KHN0b3JhZ2UpKTsKLX0KLQotdm9pZCBMb2NhbFN0
b3JhZ2VUaHJlYWQ6OnNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gc3RvcmFn
ZSkKLXsKLSAgICBBU1NFUlQoIW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7Ci0gICAg
bV9xdWV1ZS5hcHBlbmQoTG9jYWxTdG9yYWdlVGFzazo6Y3JlYXRlU3luYyhzdG9yYWdlKSk7Ci19
Ci0KIHZvaWQgTG9jYWxTdG9yYWdlVGhyZWFkOjpzY2hlZHVsZUltcG9ydChQYXNzUmVmUHRyPExv
Y2FsU3RvcmFnZUFyZWE+IGFyZWEpCiB7CiAgICAgQVNTRVJUKCFtX3F1ZXVlLmtpbGxlZCgpICYm
IG1fdGhyZWFkSUQpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuaAkocmV2
aXNpb24gNDQ3NDUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGhyZWFkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0g
ICAgY2xhc3MgTG9jYWxTdG9yYWdlOwogICAgIGNsYXNzIExvY2FsU3RvcmFnZUFyZWE7CiAgICAg
Y2xhc3MgTG9jYWxTdG9yYWdlVGFzazsKIApAQCAtNDUsOCArNDQsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgYm9vbCBzdGFydCgpOwogCi0gICAgICAgIHZvaWQgc2NoZWR1bGVJ
bXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+KTsKLSAgICAgICAgdm9pZCBzY2hlZHVsZVN5
bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2U+KTsKICAgICAgICAgdm9pZCBzY2hlZHVsZUltcG9y
dChQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKICAgICAgICAgdm9pZCBzY2hlZHVsZVN5
bmMoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPik7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9TZXNzaW9uU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9u
U3RvcmFnZS5oCShyZXZpc2lvbiA0NDc0NSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3Rv
cmFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiU2Vzc2lv
blN0b3JhZ2VBcmVhLmgiCiAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAJKHJldmlz
aW9uIDQ0NzQ1KQkoZnJvbSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcDo0NDc0NSkK
KysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2UuaCIK
KworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNs
dWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlQXJl
YS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRl
ICJTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBMb2NhbFN0b3JhZ2UqPiBM
b2NhbFN0b3JhZ2VNYXA7CisKK3N0YXRpYyBMb2NhbFN0b3JhZ2VNYXAmIGxvY2FsU3RvcmFnZU1h
cCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VNYXAsIGxvY2FsU3Rv
cmFnZU1hcCwgKCkpOworICAgIHJldHVybiBsb2NhbFN0b3JhZ2VNYXA7Cit9CisKK1Bhc3NSZWZQ
dHI8TG9jYWxTdG9yYWdlPiBMb2NhbFN0b3JhZ2U6OmxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcm
IHBhdGgpCit7CisgICAgY29uc3QgU3RyaW5nIGxvb2t1cFBhdGggPSBwYXRoLmlzTnVsbCgpID8g
U3RyaW5nKCIiKSA6IHBhdGg7CisgICAgTG9jYWxTdG9yYWdlTWFwOjppdGVyYXRvciBpdCA9IGxv
Y2FsU3RvcmFnZU1hcCgpLmZpbmQobG9va3VwUGF0aCk7CisgICAgaWYgKGl0ID09IGxvY2FsU3Rv
cmFnZU1hcCgpLmVuZCgpKSB7CisgICAgICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2U+IGxvY2FsU3Rv
cmFnZSA9IGFkb3B0UmVmKG5ldyBMb2NhbFN0b3JhZ2UobG9va3VwUGF0aCkpOworICAgICAgICBs
b2NhbFN0b3JhZ2VNYXAoKS5zZXQobG9va3VwUGF0aCwgbG9jYWxTdG9yYWdlLmdldCgpKTsKKyAg
ICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5yZWxlYXNlKCk7CisgICAgfQorICAgIAorICAgIHJl
dHVybiBpdC0+c2Vjb25kOworfQorCitMb2NhbFN0b3JhZ2U6OkxvY2FsU3RvcmFnZShjb25zdCBT
dHJpbmcmIHBhdGgpCisgICAgOiBtX3BhdGgocGF0aC5jb3B5KCkpCit7CisgICAgLy8gSWYgdGhl
IHBhdGggaXMgZW1wdHksIHdlIGtub3cgd2UncmUgbmV2ZXIgZ29pbmcgdG8gYmUgdXNpbmcgdGhl
IHRocmVhZCBmb3IgYW55dGhpbmcsIHNvIGRvbid0IHN0YXJ0IGl0LgorICAgIC8vIEluIHRoZSBm
dXR1cmUsIHdlIG1pZ2h0IGFsc28gd2FudCB0byBjb25zaWRlciByZW1vdmluZyBpdCBmcm9tIHRo
ZSBET00gaW4gdGhhdCBjYXNlIC0gPHJkYXI6Ly9wcm9ibGVtLzU5NjA0NzA+CisgICAgaWYgKHBh
dGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RocmVhZCA9IExvY2FsU3Rv
cmFnZVRocmVhZDo6Y3JlYXRlKCk7CisgICAgbV90aHJlYWQtPnN0YXJ0KCk7CisgICAgbV90aHJl
YWQtPnNjaGVkdWxlSW1wb3J0KHRoaXMpOworfQorCitMb2NhbFN0b3JhZ2U6On5Mb2NhbFN0b3Jh
Z2UoKQoreworICAgIEFTU0VSVChsb2NhbFN0b3JhZ2VNYXAoKS5nZXQobV9wYXRoKSA9PSB0aGlz
KTsKKyAgICBsb2NhbFN0b3JhZ2VNYXAoKS5yZW1vdmUobV9wYXRoKTsKK30KKworUGFzc1JlZlB0
cjxTdG9yYWdlQXJlYT4gTG9jYWxTdG9yYWdlOjpzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiog
b3JpZ2luKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBGSVhNRTog
SWYgdGhlIHNlY3VyaXR5IG9yaWdpbiBpbiBxdWVzdGlvbiBoYXMgbmV2ZXIgaGFkIGEgc3RvcmFn
ZSBhcmVhIGVzdGFibGlzaGVkLAorICAgIC8vIHdlIG5lZWQgdG8gYXNrIGEgY2xpZW50IGNhbGwg
aWYgZXN0YWJsaXNoaW5nIGl0IGlzIG9rYXkuICBJZiB0aGUgY2xpZW50IGRlbmllcyB0aGUgcmVx
dWVzdCwKKyAgICAvLyB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBudWxsLgorICAgIC8vIFRoZSBz
b3VyY2VGcmFtZSBhcmd1bWVudCBleGlzdHMgZm9yIHRoZSBwdXJwb3NlIG9mIGFza2luZyBhIGNs
aWVudC4KKyAgICAvLyBUbyBrbm93IGlmIGFuIGFyZWEgaGFzIHByZXZpb3VzbHkgYmVlbiBlc3Rh
Ymxpc2hlZCwgd2UgbmVlZCB0byB3YWl0IHVudGlsIHRoaXMgTG9jYWxTdG9yYWdlIAorICAgIC8v
IG9iamVjdCBoYXMgZmluaXNoZWQgaXQncyBBcmVhSW1wb3J0IHRhc2suCisKKworICAgIC8vIEZJ
WE1FOiBJZiB0aGUgc3RvcmFnZSBhcmVhIGlzIGJlaW5nIGVzdGFibGlzaGVkIGZvciB0aGUgZmly
c3QgdGltZSBoZXJlLCB3ZSBuZWVkIHRvIAorICAgIC8vIHN5bmMgaXRzIGV4aXN0YW5jZSBhbmQg
cXVvdGEgb3V0IHRvIGRpc2sgdmlhIGFuIHRhc2sgb2YgdHlwZSBBcmVhU3luYworCisgICAgUmVm
UHRyPExvY2FsU3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhOworICAgIGlmIChzdG9yYWdlQXJlYSA9
IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpCisgICAgICAgIHJldHVybiBzdG9yYWdlQXJl
YS5yZWxlYXNlKCk7CisgICAgICAgIAorICAgIHN0b3JhZ2VBcmVhID0gTG9jYWxTdG9yYWdlQXJl
YTo6Y3JlYXRlKG9yaWdpbiwgdGhpcyk7CisgICAgbV9zdG9yYWdlQXJlYU1hcC5zZXQob3JpZ2lu
LCBzdG9yYWdlQXJlYSk7CisgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKK30KKwor
U3RyaW5nIExvY2FsU3RvcmFnZTo6ZnVsbERhdGFiYXNlRmlsZW5hbWUoU2VjdXJpdHlPcmlnaW4q
IG9yaWdpbikKK3sKKyAgICAvLyBGSVhNRTogT25jZSB3ZSBhY3R1YWxseSB0cmFjayBvcmlnaW4v
cXVvdGEgZW50cmllcyB0byBzZWUgd2hpY2ggb3JpZ2lucyBoYXZlIGxvY2FsIHN0b3JhZ2UgZXN0
YWJsaXNoZWQsCisgICAgLy8gd2Ugd2lsbCByZXR1cm4gYW4gZW1wdHkgcGF0aCBuYW1lIGlmIHRo
ZSBvcmlnaW4gaXNuJ3QgYWxsb3dlZCB0byBoYXZlIExvY2FsU3RvcmFnZS4KKyAgICAvLyBXZSds
bCBuZWVkIHRvIHdhaXQgaGVyZSB1bnRpbCB0aGUgQXJlYUltcG9ydCB0YXNrIHRvIGNvbXBsZXRl
IGJlZm9yZSBtYWtpbmcgdGhhdCBkZWNpc2lvbi4KKworICAgIGlmIChtX3BhdGguaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBBU1NFUlQob3JpZ2luKTsKKyAgICBp
ZiAoIW9yaWdpbikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaWYgKCFtYWtlQWxs
RGlyZWN0b3JpZXMobV9wYXRoKSkgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZWQgdG8gY3Jl
YXRlIExvY2FsU3RvcmFnZSBkYXRhYmFzZSBwYXRoICVzIiwgbV9wYXRoLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgcmV0dXJuIHBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChtX3BhdGgsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyAi
LmxvY2Fsc3RvcmFnZSIpOworfQorCit2b2lkIExvY2FsU3RvcmFnZTo6cGVyZm9ybUltcG9ydCgp
Cit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBGSVhNRTogSW1wb3J0
IGFsbCBrbm93biBsb2NhbCBzdG9yYWdlIG9yaWdpbnMgaGVyZSBhbG9uZyB3aXRoIHRoZWlyIHF1
b3RhcworfQorCit2b2lkIExvY2FsU3RvcmFnZTo6cGVyZm9ybVN5bmMoKQoreworICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gRklYTUU6IFdyaXRlIG91dCBuZXcgb3JpZ2lu
cyBhbmQgcXVvdGFzIGhlcmUKK30KKwordm9pZCBMb2NhbFN0b3JhZ2U6OmNsb3NlKCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgTG9jYWxTdG9yYWdlQXJlYU1hcDo6aXRl
cmF0b3IgZW5kID0gbV9zdG9yYWdlQXJlYU1hcC5lbmQoKTsKKyAgICBmb3IgKExvY2FsU3RvcmFn
ZUFyZWFNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdG9yYWdlQXJlYU1hcC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPnNjaGVkdWxlRmluYWxTeW5jKCk7CisKKyAg
ICBpZiAobV90aHJlYWQpIHsKKyAgICAgICAgbV90aHJlYWQtPnRlcm1pbmF0ZSgpOworICAgICAg
ICBtX3RocmVhZCA9IDA7CisgICAgfQorfQorCitib29sIExvY2FsU3RvcmFnZTo6c2NoZWR1bGVJ
bXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVhKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAobV90aHJlYWQpCisgICAgICAgIG1fdGhyZWFkLT5z
Y2hlZHVsZUltcG9ydChhcmVhKTsKKworICAgIHJldHVybiBtX3RocmVhZDsKK30KKwordm9pZCBM
b2NhbFN0b3JhZ2U6OnNjaGVkdWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+IGFy
ZWEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV90aHJlYWQpCisg
ICAgICAgIG1fdGhyZWFkLT5zY2hlZHVsZVN5bmMoYXJlYSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShET01fU1RPUkFHRSkKKwpJbmRleDogV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAJKHJldmlzaW9uIDQ0NzQ1KQorKysgV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcg
KzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTG9jYWxTdG9y
YWdlLmgiCisjaW5jbHVkZSAiU3RvcmFnZVN5bmNNYW5hZ2VyLmgiCiAKICNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCiAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNsdWRlICJMb2Nh
bFN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5o
IgogI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCkBAIC00MSw4MyArNDAsMjIgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBMb2NhbFN0b3JhZ2UqPiBM
b2NhbFN0b3JhZ2VNYXA7Ci0KLXN0YXRpYyBMb2NhbFN0b3JhZ2VNYXAmIGxvY2FsU3RvcmFnZU1h
cCgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChMb2NhbFN0b3JhZ2VNYXAsIGxvY2FsU3Rv
cmFnZU1hcCwgKCkpOwotICAgIHJldHVybiBsb2NhbFN0b3JhZ2VNYXA7Ci19Ci0KLVBhc3NSZWZQ
dHI8TG9jYWxTdG9yYWdlPiBMb2NhbFN0b3JhZ2U6OmxvY2FsU3RvcmFnZShjb25zdCBTdHJpbmcm
IHBhdGgpCitQYXNzUmVmUHRyPFN0b3JhZ2VTeW5jTWFuYWdlcj4gU3RvcmFnZVN5bmNNYW5hZ2Vy
OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIGNvbnN0IFN0cmluZyBsb29rdXBQ
YXRoID0gcGF0aC5pc051bGwoKSA/IFN0cmluZygiIikgOiBwYXRoOwotICAgIExvY2FsU3RvcmFn
ZU1hcDo6aXRlcmF0b3IgaXQgPSBsb2NhbFN0b3JhZ2VNYXAoKS5maW5kKGxvb2t1cFBhdGgpOwot
ICAgIGlmIChpdCA9PSBsb2NhbFN0b3JhZ2VNYXAoKS5lbmQoKSkgewotICAgICAgICBSZWZQdHI8
TG9jYWxTdG9yYWdlPiBsb2NhbFN0b3JhZ2UgPSBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlKGxv
b2t1cFBhdGgpKTsKLSAgICAgICAgbG9jYWxTdG9yYWdlTWFwKCkuc2V0KGxvb2t1cFBhdGgsIGxv
Y2FsU3RvcmFnZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UucmVsZWFzZSgp
OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFN0b3JhZ2VTeW5jTWFuYWdlcihwYXRoKSk7CiB9CiAKLUxvY2FsU3RvcmFnZTo6TG9j
YWxTdG9yYWdlKGNvbnN0IFN0cmluZyYgcGF0aCkKK1N0b3JhZ2VTeW5jTWFuYWdlcjo6U3RvcmFn
ZVN5bmNNYW5hZ2VyKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICA6IG1fcGF0aChwYXRoLmNvcHko
KSkKIHsKLSAgICAvLyBJZiB0aGUgcGF0aCBpcyBlbXB0eSwgd2Uga25vdyB3ZSdyZSBuZXZlciBn
b2luZyB0byBiZSB1c2luZyB0aGUgdGhyZWFkIGZvciBhbnl0aGluZywgc28gZG9uJ3Qgc3RhcnQg
aXQuCi0gICAgLy8gSW4gdGhlIGZ1dHVyZSwgd2UgbWlnaHQgYWxzbyB3YW50IHRvIGNvbnNpZGVy
IHJlbW92aW5nIGl0IGZyb20gdGhlIERPTSBpbiB0aGF0IGNhc2UgLSA8cmRhcjovL3Byb2JsZW0v
NTk2MDQ3MD4KLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQorICAg
IEFTU0VSVCghbV9wYXRoLmlzRW1wdHkoKSk7CiAgICAgbV90aHJlYWQgPSBMb2NhbFN0b3JhZ2VU
aHJlYWQ6OmNyZWF0ZSgpOwogICAgIG1fdGhyZWFkLT5zdGFydCgpOwotICAgIG1fdGhyZWFkLT5z
Y2hlZHVsZUltcG9ydCh0aGlzKTsKLX0KLQotTG9jYWxTdG9yYWdlOjp+TG9jYWxTdG9yYWdlKCkK
LXsKLSAgICBBU1NFUlQobG9jYWxTdG9yYWdlTWFwKCkuZ2V0KG1fcGF0aCkgPT0gdGhpcyk7Ci0g
ICAgbG9jYWxTdG9yYWdlTWFwKCkucmVtb3ZlKG1fcGF0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8U3Rv
cmFnZUFyZWE+IExvY2FsU3RvcmFnZTo6c3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qIG9yaWdp
bikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gRklYTUU6IElmIHRo
ZSBzZWN1cml0eSBvcmlnaW4gaW4gcXVlc3Rpb24gaGFzIG5ldmVyIGhhZCBhIHN0b3JhZ2UgYXJl
YSBlc3RhYmxpc2hlZCwKLSAgICAvLyB3ZSBuZWVkIHRvIGFzayBhIGNsaWVudCBjYWxsIGlmIGVz
dGFibGlzaGluZyBpdCBpcyBva2F5LiAgSWYgdGhlIGNsaWVudCBkZW5pZXMgdGhlIHJlcXVlc3Qs
Ci0gICAgLy8gdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbnVsbC4KLSAgICAvLyBUaGUgc291cmNl
RnJhbWUgYXJndW1lbnQgZXhpc3RzIGZvciB0aGUgcHVycG9zZSBvZiBhc2tpbmcgYSBjbGllbnQu
Ci0gICAgLy8gVG8ga25vdyBpZiBhbiBhcmVhIGhhcyBwcmV2aW91c2x5IGJlZW4gZXN0YWJsaXNo
ZWQsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGlzIExvY2FsU3RvcmFnZSAKLSAgICAvLyBvYmpl
Y3QgaGFzIGZpbmlzaGVkIGl0J3MgQXJlYUltcG9ydCB0YXNrLgotCi0KLSAgICAvLyBGSVhNRTog
SWYgdGhlIHN0b3JhZ2UgYXJlYSBpcyBiZWluZyBlc3RhYmxpc2hlZCBmb3IgdGhlIGZpcnN0IHRp
bWUgaGVyZSwgd2UgbmVlZCB0byAKLSAgICAvLyBzeW5jIGl0cyBleGlzdGFuY2UgYW5kIHF1b3Rh
IG91dCB0byBkaXNrIHZpYSBhbiB0YXNrIG9mIHR5cGUgQXJlYVN5bmMKLQotICAgIFJlZlB0cjxM
b2NhbFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYTsKLSAgICBpZiAoc3RvcmFnZUFyZWEgPSBtX3N0
b3JhZ2VBcmVhTWFwLmdldChvcmlnaW4pKQotICAgICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVs
ZWFzZSgpOwotICAgICAgICAKLSAgICBzdG9yYWdlQXJlYSA9IExvY2FsU3RvcmFnZUFyZWE6OmNy
ZWF0ZShvcmlnaW4sIHRoaXMpOwotICAgIG1fc3RvcmFnZUFyZWFNYXAuc2V0KG9yaWdpbiwgc3Rv
cmFnZUFyZWEpOwotICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7CiB9CiAKLVN0cmlu
ZyBMb2NhbFN0b3JhZ2U6OmZ1bGxEYXRhYmFzZUZpbGVuYW1lKFNlY3VyaXR5T3JpZ2luKiBvcmln
aW4pCitTdHJpbmcgU3RvcmFnZVN5bmNNYW5hZ2VyOjpmdWxsRGF0YWJhc2VGaWxlbmFtZShTZWN1
cml0eU9yaWdpbiogb3JpZ2luKQogewotICAgIC8vIEZJWE1FOiBPbmNlIHdlIGFjdHVhbGx5IHRy
YWNrIG9yaWdpbi9xdW90YSBlbnRyaWVzIHRvIHNlZSB3aGljaCBvcmlnaW5zIGhhdmUgbG9jYWwg
c3RvcmFnZSBlc3RhYmxpc2hlZCwKLSAgICAvLyB3ZSB3aWxsIHJldHVybiBhbiBlbXB0eSBwYXRo
IG5hbWUgaWYgdGhlIG9yaWdpbiBpc24ndCBhbGxvd2VkIHRvIGhhdmUgTG9jYWxTdG9yYWdlLgot
ICAgIC8vIFdlJ2xsIG5lZWQgdG8gd2FpdCBoZXJlIHVudGlsIHRoZSBBcmVhSW1wb3J0IHRhc2sg
dG8gY29tcGxldGUgYmVmb3JlIG1ha2luZyB0aGF0IGRlY2lzaW9uLgotCi0gICAgaWYgKG1fcGF0
aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQogICAgIEFTU0VSVChvcmln
aW4pOwotICAgIGlmICghb3JpZ2luKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KICAgICBp
ZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhtX3BhdGgpKSB7CiAgICAgICAgIExPR19FUlJPUigiVW5h
YmxlZCB0byBjcmVhdGUgTG9jYWxTdG9yYWdlIGRhdGFiYXNlIHBhdGggJXMiLCBtX3BhdGgudXRm
OCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTEyNiwzNSArNjQsMTcg
QEAgU3RyaW5nIExvY2FsU3RvcmFnZTo6ZnVsbERhdGFiYXNlRmlsZW5hbQogICAgIHJldHVybiBw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9wYXRoLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmll
cigpICsgIi5sb2NhbHN0b3JhZ2UiKTsKIH0KIAotdm9pZCBMb2NhbFN0b3JhZ2U6OnBlcmZvcm1J
bXBvcnQoKQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gRklYTUU6
IEltcG9ydCBhbGwga25vd24gbG9jYWwgc3RvcmFnZSBvcmlnaW5zIGhlcmUgYWxvbmcgd2l0aCB0
aGVpciBxdW90YXMKLX0KLQotdm9pZCBMb2NhbFN0b3JhZ2U6OnBlcmZvcm1TeW5jKCkKLXsKLSAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIEZJWE1FOiBXcml0ZSBvdXQgbmV3
IG9yaWdpbnMgYW5kIHF1b3RhcyBoZXJlCi19Ci0KLXZvaWQgTG9jYWxTdG9yYWdlOjpjbG9zZSgp
Cit2b2lkIFN0b3JhZ2VTeW5jTWFuYWdlcjo6Y2xvc2UoKQogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAKLSAgICBMb2NhbFN0b3JhZ2VBcmVhTWFwOjppdGVyYXRvciBlbmQgPSBtX3N0
b3JhZ2VBcmVhTWFwLmVuZCgpOwotICAgIGZvciAoTG9jYWxTdG9yYWdlQXJlYU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3N0b3JhZ2VBcmVhTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaXQtPnNlY29uZC0+c2NoZWR1bGVGaW5hbFN5bmMoKTsKLQogICAgIGlmIChtX3RocmVhZCkg
ewogICAgICAgICBtX3RocmVhZC0+dGVybWluYXRlKCk7CiAgICAgICAgIG1fdGhyZWFkID0gMDsK
ICAgICB9CiB9CiAKLWJvb2wgTG9jYWxTdG9yYWdlOjpzY2hlZHVsZUltcG9ydChQYXNzUmVmUHRy
PExvY2FsU3RvcmFnZUFyZWE+IGFyZWEpCitib29sIFN0b3JhZ2VTeW5jTWFuYWdlcjo6c2NoZWR1
bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBhcmVhKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAKQEAgLTE2NCw5ICs4NCwxMCBAQCBib29sIExvY2FsU3RvcmFn
ZTo6c2NoZWR1bGVJbXBvcnQoUGFzc1JlCiAgICAgcmV0dXJuIG1fdGhyZWFkOwogfQogCi12b2lk
IExvY2FsU3RvcmFnZTo6c2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4g
YXJlYSkKK3ZvaWQgU3RvcmFnZVN5bmNNYW5hZ2VyOjpzY2hlZHVsZVN5bmMoUGFzc1JlZlB0cjxM
b2NhbFN0b3JhZ2VBcmVhPiBhcmVhKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisK
ICAgICBpZiAobV90aHJlYWQpCiAgICAgICAgIG1fdGhyZWFkLT5zY2hlZHVsZVN5bmMoYXJlYSk7
CiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCShyZXZpc2lvbiA0NDc0
NSkJKGZyb20gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZS5oOjQ0NzQ1KQorKysgV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBMb2NhbFN0b3JhZ2VfaAorI2RlZmluZSBMb2NhbFN0b3JhZ2VfaAorCisjaWYgRU5BQkxF
KERPTV9TVE9SQUdFKQorCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlQXJlYS5oIgorI2luY2x1ZGUg
IkxvY2FsU3RvcmFnZVRhc2suaCIKKyNpbmNsdWRlICJMb2NhbFN0b3JhZ2VUaHJlYWQuaCIKKyNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFBhZ2VHcm91cDsKKyAgICBjbGFzcyBT
dG9yYWdlQXJlYTsKKworICAgIGNsYXNzIExvY2FsU3RvcmFnZSA6IHB1YmxpYyBUaHJlYWRTYWZl
U2hhcmVkPExvY2FsU3RvcmFnZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgfkxvY2FsU3RvcmFn
ZSgpOworCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2FsU3RvcmFnZT4gbG9jYWxTdG9y
YWdlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisKKyAgICAgICAgUGFzc1JlZlB0cjxTdG9yYWdlQXJl
YT4gc3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnaW4qKTsKKworICAgICAgICBib29sIHNjaGVkdWxl
SW1wb3J0KFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJlYT4pOworICAgICAgICB2b2lkIHNjaGVk
dWxlU3luYyhQYXNzUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+KTsKKworICAgICAgICB2b2lkIGNs
b3NlKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBMb2NhbFN0b3JhZ2UoY29uc3QgU3RyaW5n
JiBwYXRoKTsKKworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiwgUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+IExvY2FsU3Rv
cmFnZUFyZWFNYXA7CisgICAgICAgIExvY2FsU3RvcmFnZUFyZWFNYXAgbV9zdG9yYWdlQXJlYU1h
cDsKKworICAgICAgICBSZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPiBtX3RocmVhZDsKKworICAg
IC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgc3ViamVjdCB0byB0aHJlYWQgc3luY2hyb25p
emF0aW9uIGlzc3VlcworICAgIHB1YmxpYzoKKyAgICAgICAgLy8gVG8gYmUgY2FsbGVkIGZyb20g
dGhlIGJhY2tncm91bmQgdGhyZWFkOgorICAgICAgICBTdHJpbmcgZnVsbERhdGFiYXNlRmlsZW5h
bWUoU2VjdXJpdHlPcmlnaW4qKTsKKworICAgICAgICB2b2lkIHBlcmZvcm1JbXBvcnQoKTsKKyAg
ICAgICAgdm9pZCBwZXJmb3JtU3luYygpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RyaW5n
IG1fcGF0aDsKKworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiwgdW5zaWduZWQgbG9uZyBsb25nLCBTZWN1cml0eU9yaWdpbkhhc2g+IFNlY3VyaXR5T3JpZ2lu
UXVvdGVNYXA7CisgICAgICAgIFNlY3VyaXR5T3JpZ2luUXVvdGVNYXAgbV9zZWN1cml0eU9yaWdp
blF1b3RlTWFwOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShET01fU1RPUkFHRSkKKworI2VuZGlmIC8vIExvY2FsU3RvcmFnZV9oCkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCShyZXZpc2lvbiA0NDc0NSkKKysrIFdlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMzIg
KzIzLDIyIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIExvY2FsU3RvcmFnZV9o
Ci0jZGVmaW5lIExvY2FsU3RvcmFnZV9oCisjaWZuZGVmIFN0b3JhZ2VTeW5jTWFuYWdlcl9oCisj
ZGVmaW5lIFN0b3JhZ2VTeW5jTWFuYWdlcl9oCiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAK
ICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGFz
ay5oIgogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZVRocmVhZC5oIgotI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luSGFzaC5oIgogCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi0gICAgY2xhc3MgUGFnZUdyb3VwOwotICAgIGNsYXNzIFN0b3JhZ2VBcmVhOwotCi0g
ICAgY2xhc3MgTG9jYWxTdG9yYWdlIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8TG9jYWxTdG9y
YWdlPiB7CisgICAgY2xhc3MgU3RvcmFnZVN5bmNNYW5hZ2VyIDogcHVibGljIFRocmVhZFNhZmVT
aGFyZWQ8U3RvcmFnZVN5bmNNYW5hZ2VyPiB7CiAgICAgcHVibGljOgotICAgICAgICB+TG9jYWxT
dG9yYWdlKCk7Ci0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlPiBsb2Nh
bFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBwYXRoKTsKLQotICAgICAgICBQYXNzUmVmUHRyPFN0b3Jh
Z2VBcmVhPiBzdG9yYWdlQXJlYShTZWN1cml0eU9yaWdpbiopOworICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdG9yYWdlU3luY01hbmFnZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpOwog
CiAgICAgICAgIGJvb2wgc2NoZWR1bGVJbXBvcnQoUGFzc1JlZlB0cjxMb2NhbFN0b3JhZ2VBcmVh
Pik7CiAgICAgICAgIHZvaWQgc2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlQXJl
YT4pOwpAQCAtNTYsMTAgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IGNsb3NlKCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBMb2NhbFN0b3JhZ2UoY29uc3QgU3Ry
aW5nJiBwYXRoKTsKLQotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiwgUmVmUHRyPExvY2FsU3RvcmFnZUFyZWE+LCBTZWN1cml0eU9yaWdpbkhhc2g+IExvY2Fs
U3RvcmFnZUFyZWFNYXA7Ci0gICAgICAgIExvY2FsU3RvcmFnZUFyZWFNYXAgbV9zdG9yYWdlQXJl
YU1hcDsKKyAgICAgICAgU3RvcmFnZVN5bmNNYW5hZ2VyKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAK
ICAgICAgICAgUmVmUHRyPExvY2FsU3RvcmFnZVRocmVhZD4gbV90aHJlYWQ7CiAKQEAgLTY4LDE4
ICs1NSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFRvIGJlIGNhbGxlZCBm
cm9tIHRoZSBiYWNrZ3JvdW5kIHRocmVhZDoKICAgICAgICAgU3RyaW5nIGZ1bGxEYXRhYmFzZUZp
bGVuYW1lKFNlY3VyaXR5T3JpZ2luKik7CiAKLSAgICAgICAgdm9pZCBwZXJmb3JtSW1wb3J0KCk7
Ci0gICAgICAgIHZvaWQgcGVyZm9ybVN5bmMoKTsKLQogICAgIHByaXZhdGU6CiAgICAgICAgIFN0
cmluZyBtX3BhdGg7Ci0KLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTZWN1cml0eU9y
aWdpbj4sIHVuc2lnbmVkIGxvbmcgbG9uZywgU2VjdXJpdHlPcmlnaW5IYXNoPiBTZWN1cml0eU9y
aWdpblF1b3RlTWFwOwotICAgICAgICBTZWN1cml0eU9yaWdpblF1b3RlTWFwIG1fc2VjdXJpdHlP
cmlnaW5RdW90ZU1hcDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKLSNlbmRpZiAvLyBMb2NhbFN0b3JhZ2VfaAorI2Vu
ZGlmIC8vIFN0b3JhZ2VTeW5jTWFuYWdlcl9oCg==
</data>
<flag name="review"
          id="16205"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31685</attachid>
            <date>2009-06-22 15:46:53 -0700</date>
            <delta_ts>2009-06-22 16:01:06 -0700</delta_ts>
            <desc>patch 2 - v2</desc>
            <filename>2.20090622.patch</filename>
            <type>text/plain</type>
            <size>11942</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDk2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMDktMDYtMjIgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U2ltcGxpZnkgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gTG9jYWxTdG9yYWdlQXJlYS9TZXNzaW9u
U3RvcmFnZUFyZWEKKyAgICAgICAgYW5kIFN0b3JhZ2VBcmVhIGJ5IGNyZWF0aW5nIGEgImJsb2Nr
VW50aWxJbXBvcnRDb21wbGV0ZSgpIiBmdW5jdGlvbgorICAgICAgICByYXRoZXIgdGhhbiBib3Vu
Y2luZyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRoZSBjaGlsZCBhbmQgcGFyZW50CisgICAgICAg
IGNsYXNzZXMgaW4gYSBzb21ld2hhdCB1bmludHVpdGl2ZSBtYW5uZXIuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBhbHNvIHBhdmVzIHRoZSB3YXkgZm9yIExvY2FsU3RvcmFnZUFyZWEgYW5kCisgICAg
ICAgIFNlc3Npb25TdG9yYWdlQXJlYSBiZWluZyBtZXJnZWQgaW50byBvbmUuICBJdCdzIHBhcnQg
b2Ygc2V2ZXJhbCBpbiBhCisgICAgICAgIHNldCB3aGljaCBhcmUgc2VwYXJhdGluZyBzeW5jaW5n
ICh0byBkaXNrKSBjb2RlIGZyb20gdGhlIHJlc3Qgb2YgdGhlCisgICAgICAgIGltcGxlbWVudGF0
aW9uIHNvIHRoYXQgbG9jYWwgc3RvcmFnZSBhbmQgc2Vzc2lvbiBzdG9yYWdlJ3MgY29kZSBjYW4g
YmUKKyAgICAgICAgdW5pZmllZC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjUzNzYKKworICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlQXJl
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhbFN0b3JhZ2VBcmVhOjpibG9ja1VudGlsSW1w
b3J0Q29tcGxldGUpOgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5oOgorICAg
ICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZUFyZWE6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6a2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpnZXRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VBcmVhOjpzZXRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpy
ZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpjbGVhcik6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYTo6Y29udGFpbnMpOgorICAgICAgICAqIHN0b3JhZ2Uv
U3RvcmFnZUFyZWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhOjpibG9ja1VudGls
SW1wb3J0Q29tcGxldGUpOgorCiAyMDA5LTA2LTIyICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5jcHAJKHJldmlzaW9uIDQ0OTYwKQorKysgV2ViQ29y
ZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMTIg
KzgyLDYgQEAgdm9pZCBMb2NhbFN0b3JhZ2VBcmVhOjpzY2hlZHVsZUZpbmFsU3luYwogICAgIG1f
ZmluYWxTeW5jU2NoZWR1bGVkID0gdHJ1ZTsKIH0KIAotdW5zaWduZWQgTG9jYWxTdG9yYWdlQXJl
YTo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAg
aWYgKG1faW1wb3J0Q29tcGxldGUpCi0gICAgICAgIHJldHVybiBpbnRlcm5hbExlbmd0aCgpOwot
Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faW1wb3J0TG9jayk7Ci0gICAgaWYgKG1faW1wb3J0
Q29tcGxldGUpCi0gICAgICAgIHJldHVybiBpbnRlcm5hbExlbmd0aCgpOwotCi0gICAgd2hpbGUg
KCFtX2ltcG9ydENvbXBsZXRlKQotICAgICAgICBtX2ltcG9ydENvbmRpdGlvbi53YWl0KG1faW1w
b3J0TG9jayk7Ci0gICAgQVNTRVJUKG1faW1wb3J0Q29tcGxldGUpOwotICAgIAotICAgIHJldHVy
biBpbnRlcm5hbExlbmd0aCgpOwotfQotCi1TdHJpbmcgTG9jYWxTdG9yYWdlQXJlYTo6a2V5KHVu
c2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG1faW1wb3J0Q29tcGxldGUpCi0gICAgICAgIHJldHVy
biBpbnRlcm5hbEtleShpbmRleCwgZWMpOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faW1w
b3J0TG9jayk7Ci0gICAgaWYgKG1faW1wb3J0Q29tcGxldGUpCi0gICAgICAgIHJldHVybiBpbnRl
cm5hbEtleShpbmRleCwgZWMpOwotCi0gICAgd2hpbGUgKCFtX2ltcG9ydENvbXBsZXRlKQotICAg
ICAgICBtX2ltcG9ydENvbmRpdGlvbi53YWl0KG1faW1wb3J0TG9jayk7Ci0gICAgQVNTRVJUKG1f
aW1wb3J0Q29tcGxldGUpOwotCi0gICAgcmV0dXJuIGludGVybmFsS2V5KGluZGV4LCBlYyk7Ci19
Ci0KLVN0cmluZyBMb2NhbFN0b3JhZ2VBcmVhOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBj
b25zdAotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV9pbXBvcnRD
b21wbGV0ZSkKLSAgICAgICAgcmV0dXJuIGludGVybmFsR2V0SXRlbShrZXkpOwotCi0gICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1faW1wb3J0TG9jayk7Ci0gICAgaWYgKG1faW1wb3J0Q29tcGxldGUp
Ci0gICAgICAgIHJldHVybiBpbnRlcm5hbEdldEl0ZW0oa2V5KTsKLQotICAgIFN0cmluZyBpdGVt
ID0gaW50ZXJuYWxHZXRJdGVtKGtleSk7Ci0gICAgaWYgKCFpdGVtLmlzTnVsbCgpKQotICAgICAg
ICByZXR1cm4gaXRlbTsKLQotICAgIHdoaWxlICghbV9pbXBvcnRDb21wbGV0ZSkKLSAgICAgICAg
bV9pbXBvcnRDb25kaXRpb24ud2FpdChtX2ltcG9ydExvY2spOwotICAgIEFTU0VSVChtX2ltcG9y
dENvbXBsZXRlKTsKLQotICAgIHJldHVybiBpbnRlcm5hbEdldEl0ZW0oa2V5KTsKLX0KLQotdm9p
ZCBMb2NhbFN0b3JhZ2VBcmVhOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZyYW1lKQotewotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV9pbXBvcnRDb21wbGV0ZSkgewotICAgICAg
ICBpbnRlcm5hbFNldEl0ZW0oa2V5LCB2YWx1ZSwgZWMsIGZyYW1lKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2ltcG9ydExvY2spOwotICAgIGlu
dGVybmFsU2V0SXRlbShrZXksIHZhbHVlLCBlYywgZnJhbWUpOwotfQotCi12b2lkIExvY2FsU3Rv
cmFnZUFyZWE6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBmcmFtZSkKLXsg
ICAgCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChtX2ltcG9ydENvbXBs
ZXRlKSB7Ci0gICAgICAgIGludGVybmFsUmVtb3ZlSXRlbShrZXksIGZyYW1lKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2ltcG9ydExvY2spOwot
ICAgIGludGVybmFsUmVtb3ZlSXRlbShrZXksIGZyYW1lKTsKLX0KLQotYm9vbCBMb2NhbFN0b3Jh
Z2VBcmVhOjpjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG1faW1wb3J0Q29tcGxldGUpCi0gICAgICAgIHJl
dHVybiBpbnRlcm5hbENvbnRhaW5zKGtleSk7Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9p
bXBvcnRMb2NrKTsKLSAgICBpZiAobV9pbXBvcnRDb21wbGV0ZSkKLSAgICAgICAgcmV0dXJuIGlu
dGVybmFsQ29udGFpbnMoa2V5KTsKLQotICAgIGJvb2wgY29udGFpbmVkID0gaW50ZXJuYWxDb250
YWlucyhrZXkpOwotICAgIGlmIChjb250YWluZWQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgd2hpbGUgKCFtX2ltcG9ydENvbXBsZXRlKQotICAgICAgICBtX2ltcG9ydENvbmRpdGlvbi53
YWl0KG1faW1wb3J0TG9jayk7Ci0gICAgQVNTRVJUKG1faW1wb3J0Q29tcGxldGUpOwotCi0gICAg
cmV0dXJuIGludGVybmFsQ29udGFpbnMoa2V5KTsKLX0KLQogdm9pZCBMb2NhbFN0b3JhZ2VBcmVh
OjppdGVtQ2hhbmdlZChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwg
Y29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZUZyYW1lKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CkBAIC0zNzYsNiArMjcwLDI3IEBAIHZvaWQgTG9jYWxTdG9yYWdl
QXJlYTo6bWFya0ltcG9ydGVkKCkKICAgICBtX2ltcG9ydENvbmRpdGlvbi5zaWduYWwoKTsKIH0K
IAorLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHdlIHNob3VsZCBhbGxvdyB1c2Ugb2YgbG9jYWxT
dG9yYWdlIHdoaWxlIGl0J3MgaW1wb3J0aW5nICh3aGVuIHNhZmUgdG8gZG8gc28pLgorLy8gQmxv
Y2tpbmcgZXZlcnl0aGluZyB1bnRpbCB0aGUgaW1wb3J0IGlzIGNvbXBsZXRlIGlzIGJ5IGZhciB0
aGUgc2ltcGxlc3QgYW5kIHNhZmVzdCB0aGluZyB0byBkbywgYnV0CisvLyB0aGVyZSBpcyBjZXJ0
YWlubHkgcm9vbSBmb3Igc2FmZSBvcHRpbWl6YXRpb246IEtleS9sZW5ndGggd2lsbCBuZXZlciBi
ZSBhYmxlIHRvIG1ha2UgdXNlIG9mIHN1Y2ggYW4KKy8vIG9wdGltaXphdGlvbiAoc2luY2UgdGhl
IG9yZGVyIG9mIGl0ZXJhdGlvbiBjYW4gY2hhbmdlIGFzIGl0ZW1zIGFyZSBiZWluZyBhZGRlZCku
IEdldCBjYW4gcmV0dXJuIGFueQorLy8gaXRlbSBjdXJyZW50bHkgaW4gdGhlIG1hcC4gR2V0L3Jl
bW92ZSBjYW4gd29yayB3aGV0aGVyIG9yIG5vdCBpdCdzIGluIHRoZSBtYXAsIGJ1dCB3ZSdsbCBu
ZWVkIGEgbGlzdAorLy8gb2YgaXRlbXMgdGhlIGltcG9ydCBzaG91bGQgbm90IG92ZXJ3cml0ZS4g
Q2xlYXIgY2FuIGFsc28gd29yaywgYnV0IGl0J2xsIG5lZWQgdG8ga2lsbCB0aGUgaW1wb3J0Cisv
LyBqb2IgZmlyc3QuCit2b2lkIExvY2FsU3RvcmFnZUFyZWE6OmJsb2NrVW50aWxJbXBvcnRDb21w
bGV0ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIEZh
c3QgcGF0aCB0byBhdm9pZCBsb2NraW5nLgorICAgIGlmIChtX2ltcG9ydENvbXBsZXRlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9pbXBvcnRMb2NrKTsKKyAg
ICB3aGlsZSAoIW1faW1wb3J0Q29tcGxldGUpCisgICAgICAgIG1faW1wb3J0Q29uZGl0aW9uLndh
aXQobV9pbXBvcnRMb2NrKTsKKyAgICBBU1NFUlQobV9pbXBvcnRDb21wbGV0ZSk7Cit9CisKIHZv
aWQgTG9jYWxTdG9yYWdlQXJlYTo6c3luYyhib29sIGNsZWFySXRlbXMsIGNvbnN0IEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+JiBpdGVtcykKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VBcmVhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZUFyZWEuaAkocmV2aXNpb24gNDQ5NjApCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlQXJlYS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSwx
NCArNzEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAvLyBUaGUgZm9sbG93aW5nIG1l
bWJlcnMgYXJlIHN1YmplY3QgdG8gdGhyZWFkIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuCiAgICAg
cHVibGljOgotICAgICAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkCi0gICAgICAgIHZp
cnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGtl
eSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgICAgICB2aXJ0dWFs
IFN0cmluZyBnZXRJdGVtKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZv
aWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0
aW9uQ29kZSYsIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVJdGVtKGNvbnN0IFN0cmluZyYsIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIHZpcnR1
YWwgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7Ci0KICAgICAgICAgLy8g
Q2FsbGVkIGZyb20gdGhlIGJhY2tncm91bmQgdGhyZWFkCiAgICAgICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtSW1wb3J0KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtU3luYygpOwpAQCAt
OTYsNiArODgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIG11dGFibGUgVGhyZWFk
Q29uZGl0aW9uIG1faW1wb3J0Q29uZGl0aW9uOwogICAgICAgICBtdXRhYmxlIGJvb2wgbV9pbXBv
cnRDb21wbGV0ZTsKICAgICAgICAgdm9pZCBtYXJrSW1wb3J0ZWQoKTsKKyAgICAgICAgdm9pZCBi
bG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKSBjb25zdDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5jcHAJKHJldmlzaW9uIDQ0OTYwKQor
KysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQs
MTMgKzU0LDE1IEBAIFN0b3JhZ2VBcmVhOjp+U3RvcmFnZUFyZWEoKQogewogfQogCi11bnNpZ25l
ZCBTdG9yYWdlQXJlYTo6aW50ZXJuYWxMZW5ndGgoKSBjb25zdAordW5zaWduZWQgU3RvcmFnZUFy
ZWE6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+bGVuZ3RoKCk7
CiB9CiAKLVN0cmluZyBTdG9yYWdlQXJlYTo6aW50ZXJuYWxLZXkodW5zaWduZWQgaW5kZXgsIEV4
Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorU3RyaW5nIFN0b3JhZ2VBcmVhOjprZXkodW5zaWduZWQg
aW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogeworICAgIGJsb2NrVW50aWxJbXBvcnRD
b21wbGV0ZSgpOworICAgIAogICAgIFN0cmluZyBrZXk7CiAgICAgCiAgICAgaWYgKCFtX3N0b3Jh
Z2VNYXAtPmtleShpbmRleCwga2V5KSkgewpAQCAtNzEsMTQgKzczLDE3IEBAIFN0cmluZyBTdG9y
YWdlQXJlYTo6aW50ZXJuYWxLZXkodW5zaWduZWQKICAgICByZXR1cm4ga2V5OwogfQogCi1TdHJp
bmcgU3RvcmFnZUFyZWE6OmludGVybmFsR2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QK
K1N0cmluZyBTdG9yYWdlQXJlYTo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKIHsK
KyAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKKyAgICAKICAgICByZXR1cm4gbV9zdG9y
YWdlTWFwLT5nZXRJdGVtKGtleSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWE6OmludGVybmFsU2V0
SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMsIEZyYW1lKiBmcmFtZSkKK3ZvaWQgU3RvcmFnZUFyZWE6OnNldEl0ZW0oY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSog
ZnJhbWUpCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc051bGwoKSk7CisgICAgYmxvY2tVbnRpbElt
cG9ydENvbXBsZXRlKCk7CiAgICAgCiAgICAgaWYgKGZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCkt
PnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkgewogICAgICAgICBlYyA9IFFVT1RBX0VYQ0VFREVE
X0VSUjsKQEAgLTEwMyw4ICsxMDgsMTAgQEAgdm9pZCBTdG9yYWdlQXJlYTo6aW50ZXJuYWxTZXRJ
dGVtKGNvbnN0IAogICAgICAgICBpdGVtQ2hhbmdlZChrZXksIG9sZFZhbHVlLCB2YWx1ZSwgZnJh
bWUpOwogfQogCi12b2lkIFN0b3JhZ2VBcmVhOjppbnRlcm5hbFJlbW92ZUl0ZW0oY29uc3QgU3Ry
aW5nJiBrZXksIEZyYW1lKiBmcmFtZSkKK3ZvaWQgU3RvcmFnZUFyZWE6OnJlbW92ZUl0ZW0oY29u
c3QgU3RyaW5nJiBrZXksIEZyYW1lKiBmcmFtZSkKIHsKKyAgICBibG9ja1VudGlsSW1wb3J0Q29t
cGxldGUoKTsKKyAgICAKICAgICBpZiAoZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+cHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTExOCw4ICsxMjUsMTAg
QEAgdm9pZCBTdG9yYWdlQXJlYTo6aW50ZXJuYWxSZW1vdmVJdGVtKGNvbgogICAgICAgICBpdGVt
UmVtb3ZlZChrZXksIG9sZFZhbHVlLCBmcmFtZSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWE6Omlu
dGVybmFsQ2xlYXIoRnJhbWUqIGZyYW1lKQordm9pZCBTdG9yYWdlQXJlYTo6Y2xlYXIoRnJhbWUq
IGZyYW1lKQogeworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOworICAgIAogICAgIGlm
IChmcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKQEAgLTEyOCw4ICsxMzcsMTAgQEAgdm9pZCBTdG9yYWdlQXJl
YTo6aW50ZXJuYWxDbGVhcihGcmFtZSogZgogICAgIGFyZWFDbGVhcmVkKGZyYW1lKTsKIH0KIAot
Ym9vbCBTdG9yYWdlQXJlYTo6aW50ZXJuYWxDb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29u
c3QKK2Jvb2wgU3RvcmFnZUFyZWE6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAog
eworICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOworICAgIAogICAgIHJldHVybiBtX3N0
b3JhZ2VNYXAtPmNvbnRhaW5zKGtleSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlQXJlYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCShy
ZXZpc2lvbiA0NDk2MCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NiwyOCArNDYsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1Ymxp
YzoKICAgICAgICAgdmlydHVhbCB+U3RvcmFnZUFyZWEoKTsKICAgICAgICAgCi0gICAgICAgIHZp
cnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxMZW5ndGgoKTsg
fQotICAgICAgICB2aXJ0dWFsIFN0cmluZyBrZXkodW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEtleShpbmRleCwgZWMpOyB9Ci0gICAgICAg
IHZpcnR1YWwgU3RyaW5nIGdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0IHsgcmV0dXJu
IGludGVybmFsR2V0SXRlbShrZXkpOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRJdGVtKGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywg
RnJhbWUqIHNvdXJjZUZyYW1lKSB7IGludGVybmFsU2V0SXRlbShrZXksIHZhbHVlLCBlYywgc291
cmNlRnJhbWUpOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmlu
ZyYga2V5LCBGcmFtZSogc291cmNlRnJhbWUpIHsgaW50ZXJuYWxSZW1vdmVJdGVtKGtleSwgc291
cmNlRnJhbWUpOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhcihGcmFtZSogc291cmNlRnJh
bWUpIHsgaW50ZXJuYWxDbGVhcihzb3VyY2VGcmFtZSk7IH0KLSAgICAgICAgdmlydHVhbCBib29s
IGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdCB7IHJldHVybiBpbnRlcm5hbENvbnRh
aW5zKGtleSk7IH0KLSAgICAgICAgCisgICAgICAgIC8vIFRoZSBIVE1MNSBET00gU3RvcmFnZSBB
UEkKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBrZXko
dW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdDsKKyAgICAgICAgU3RyaW5n
IGdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0OworICAgICAgICB2b2lkIHNldEl0ZW0o
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVj
LCBGcmFtZSogc291cmNlRnJhbWUpOworICAgICAgICB2b2lkIHJlbW92ZUl0ZW0oY29uc3QgU3Ry
aW5nJiBrZXksIEZyYW1lKiBzb3VyY2VGcmFtZSk7CisgICAgICAgIHZvaWQgY2xlYXIoRnJhbWUq
IHNvdXJjZUZyYW1lKTsKKworICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5
KSBjb25zdDsKKwogICAgICAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSB7IHJl
dHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgpOyB9CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
IFN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2luKik7CiAgICAgICAgIFN0b3JhZ2VBcmVhKFNlY3Vy
aXR5T3JpZ2luKiwgU3RvcmFnZUFyZWEqKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgdW5z
aWduZWQgaW50ZXJuYWxMZW5ndGgoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIGludGVybmFsS2V5
KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBp
bnRlcm5hbEdldEl0ZW0oY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgaW50ZXJu
YWxTZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRp
b25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICAgICAgdm9pZCBpbnRlcm5hbFJlbW92
ZUl0ZW0oY29uc3QgU3RyaW5nJiwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICAgICAgdm9pZCBp
bnRlcm5hbENsZWFyKEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIGJvb2wgaW50ZXJuYWxD
b250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7Ci0gICAgICAgIAogICAgICAgICAvLyBU
aGlzIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIGEgYmFja2dyb3VuZCB0aHJlYWQgZm9yIExv
Y2FsU3RvcmFnZUFyZWEncyBiYWNrZ3JvdW5kIHRocmVhZCBpbXBvcnQgcHJvY2VkdXJlLgogICAg
ICAgICB2b2lkIGltcG9ydEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUpOwogCkBAIC03NSw2ICs2OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmly
dHVhbCB2b2lkIGl0ZW1DaGFuZ2VkKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9s
ZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpID0gMDsK
ICAgICAgICAgdmlydHVhbCB2b2lkIGl0ZW1SZW1vdmVkKGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIG9sZFZhbHVlLCBGcmFtZSogc291cmNlRnJhbWUpID0gMDsKICAgICAgICAgdmly
dHVhbCB2b2lkIGFyZWFDbGVhcmVkKEZyYW1lKiBzb3VyY2VGcmFtZSkgPSAwOworICAgICAgICB2
aXJ0dWFsIHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3QgeyB9CiAKICAgICAg
ICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwogICAgICAgICBSZWZQ
dHI8U3RvcmFnZU1hcD4gbV9zdG9yYWdlTWFwOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>