<?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>89123</bug_id>
          
          <creation_ts>2012-06-14 13:32:47 -0700</creation_ts>
          <short_desc>JSLock should be per-JSGlobalData</short_desc>
          <delta_ts>2012-06-27 16:08:41 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>89807</dependson>
    
    <dependson>89809</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>jochen</cc>
    
    <cc>kbalazs</cc>
    
    <cc>levin+threading</cc>
    
    <cc>ossy</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>649433</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-14 13:32:47 -0700</bug_when>
    <thetext>Currently JSLock is a global lock. It also doesn&apos;t quite work with our GCActivityCallback. To make it easier for clients to use the JSC API safely in a concurrent fashion, we should change JSLock to be per-JSGlobalData. The locking model is then: whenever something is about to touch JSC, it needs to take the JSLock in the JSGlobalData for the VM it is about to interact with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649853</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-06-14 21:59:17 -0700</bug_when>
    <thetext>JSLock is legacy. If you plan to introduce a new threading model in JSC, it should probably not build on top of that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650408</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-15 12:40:34 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; JSLock is legacy. If you plan to introduce a new threading model in JSC, it should probably not build on top of that.

I&apos;m not sure what you mean by this. Does the fact that it&apos;s &quot;legacy&quot; mean I can&apos;t modify its functionality? Because whatever new thing I create needs to be locked in all the same places as JSLock. So why not just call it JSLock?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650411</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-15 12:44:23 -0700</bug_when>
    <thetext>To be more concrete, I&apos;ve written a patch that changes how JSLock works so that each JSGlobalData has its own JSLock (which I&apos;ve dubbed an API lock), and whenever anybody wants to interact with that JSGlobalData or its associated context, they must first acquire its API lock.

It seems to work fine. It passes all unit tests and passes most unit tests with --threaded turned on. The only ones that it doesn&apos;t pass with --threaded are just timeouts from all the stuff that the extra JS threads are doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650643</commentid>
    <comment_count>4</comment_count>
      <attachid>147925</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-15 17:32:34 -0700</bug_when>
    <thetext>Created attachment 147925
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650652</commentid>
    <comment_count>5</comment_count>
      <attachid>147925</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-15 17:51:24 -0700</bug_when>
    <thetext>Comment on attachment 147925
Patch

Attachment 147925 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12961734</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650653</commentid>
    <comment_count>6</comment_count>
      <attachid>147925</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-15 17:53:59 -0700</bug_when>
    <thetext>Comment on attachment 147925
Patch

Attachment 147925 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12960749</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650654</commentid>
    <comment_count>7</comment_count>
      <attachid>147925</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-15 17:56:39 -0700</bug_when>
    <thetext>Comment on attachment 147925
Patch

Attachment 147925 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12966541</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650680</commentid>
    <comment_count>8</comment_count>
      <attachid>147925</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-06-15 18:49:55 -0700</bug_when>
    <thetext>Comment on attachment 147925
Patch

Attachment 147925 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12964692</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650686</commentid>
    <comment_count>9</comment_count>
      <attachid>147925</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-06-15 19:02:46 -0700</bug_when>
    <thetext>Comment on attachment 147925
Patch

Attachment 147925 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12955938</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651159</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-17 21:45:16 -0700</bug_when>
    <thetext>Qt build failed:

/usr/bin/gold: /storage/WebKit-qt-ews/WebKitBuild/Release/Source/JavaScriptCore/release/libJavaScriptCore.a(JSGlobalData.o): in function JSC::JSGlobalData::~JSGlobalData():JSGlobalData.cpp(.text+0x2aba): error: undefined reference to &apos;JSC::IncrementalSweeper::signalAndWaitForExit()&apos;
/usr/bin/gold: /storage/WebKit-qt-ews/WebKitBuild/Release/Source/JavaScriptCore/release/libJavaScriptCore.a(JSGlobalData.o): in function JSC::JSGlobalData::~JSGlobalData():JSGlobalData.cpp(.text+0x402e): error: undefined reference to &apos;JSC::IncrementalFailed to run &quot;[&apos;Tools/Scripts/build-webkit&apos;, &apos;--release&apos;, &apos;--qt&apos;, &apos;--makeargs=&quot;-j12&quot;&apos;]&quot; exit_code: 2

Windows build failed:

3&gt;..\..\runtime\JSLock.cpp(268) : error C2511: &apos;JSC::JSLock::JSLock(JSC::ExecState *)&apos; : overloaded member function not found in &apos;JSC::JSLock&apos;
3&gt;        c:\cygwin\home\buildbot\webkit\source\javascriptcore\runtime\JSLock.h(79) : see declaration of &apos;JSC::JSLock&apos;
3&gt;..\..\runtime\JSLock.cpp(299) : error C2059: syntax error : &apos;}&apos;
3&gt;..\..\runtime\JSLock.cpp(300) : error C2612: trailing &apos;end of file&apos; illegal in base/member initializer list
3&gt;..\..\runtime\JSLock.cpp(300) : fatal error C1004: unexpected end-of-file found

GTK build failed:

./.libs/libjavascriptcoregtk-3.0.so: error: undefined reference to &apos;JSC::IncrementalSweeper::signalAndWaitForExit()&apos;
collect2: error: ld returned 1 exit status</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651173</commentid>
    <comment_count>11</comment_count>
      <attachid>147925</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-17 22:26:41 -0700</bug_when>
    <thetext>Comment on attachment 147925
Patch

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

Good first step, but it looks like this needs a bit more work.

&gt; Source/JavaScriptCore/ChangeLog:109
&gt; +        (JSC::GlobalJSLock::GlobalJSLock): This is our new global lock that must be taken when creating new contexts.
&gt; +        (JSC::GlobalJSLock::~GlobalJSLock):

I didn&apos;t understand this part. What data does the global lock protect?

&gt; Source/JavaScriptCore/jsc.cpp:686
&gt; +    globalData.clear();

This should be automatic.

&gt; Source/JavaScriptCore/heap/Heap.cpp:173
&gt; +    if (globalData-&gt;isSharedInstance() &amp;&amp; !isValidSharedInstanceThreadState(globalData))

Even non-&quot;shared instance&quot; VMs need locking, since they need mutual exclusion against GC on another thread. So, I think you should remove the isSharedInstance() escape from this ASSERT, and similar ASSERTs.

&gt; Source/JavaScriptCore/heap/Heap.cpp:326
&gt; +    ASSERT(m_globalData-&gt;apiLock().currentThreadIsHoldingLock() || !m_globalData-&gt;isSharedInstance());

Same comment about isSharedInstance() ASSERTs.

&gt; Source/JavaScriptCore/heap/Heap.cpp:337
&gt; +    ASSERT(m_globalData-&gt;apiLock().currentThreadIsHoldingLock() || !m_globalData-&gt;isSharedInstance());

Same comment about isSharedInstance() ASSERTs.

&gt; Source/JavaScriptCore/heap/Heap.cpp:691
&gt; +    ASSERT(globalData()-&gt;apiLock().currentThreadIsHoldingLock());

Same comment about isSharedInstance() ASSERTs.

&gt; Source/JavaScriptCore/runtime/JSGlobalData.cpp:230
&gt; +    // This must be the very first thing we do before tearing down any more of this object
&gt; +    // because the Heap&apos;s GCActivityCallback could run another GC on a remote thread.
&gt; +    heap.activityCallback()-&gt;signalAndWaitForExit();
&gt; +    heap.sweeper()-&gt;signalAndWaitForExit();

Trying to reason through this signal and wait tear-down phase hurt my brain a little bit.

The fundamental problem we&apos;re trying to solve here is that a timer might fire with a pointer to an invalid context (since JSGlobalData tear-down may have freed the memory pointed to by the context). (The timer itself will still be valid since it&apos;s referenced by the run loop.)

One possible alternative is to have our timers ref / deref the JSGlobalData. Maybe we can come up with something better.

&gt; Source/JavaScriptCore/runtime/JSGlobalData.h:185
&gt; +        JSLock m_apiLock;

Do we only need this lock for API clients, or does WebKit need to use it too?

&gt; Source/JavaScriptCore/runtime/JSLock.cpp:79
&gt; +    if (m_globalData-&gt;refCount() &gt; 1)
&gt; +        m_globalData-&gt;apiLock().unlock();

It&apos;s a bit sketchy to test the refCount of something that can be ref&apos;d/deref&apos;d on multiple threads. Is there another way to do this?

&gt; Source/JavaScriptCore/runtime/JSLock.cpp:99
&gt; +    if (m_lockBehavior == SilenceAssertionsOnly)

I don&apos;t think we can support SilenceAssertionsOnly mode anymore, can we?

&gt; Source/JavaScriptCore/runtime/JSLock.cpp:106
&gt; +            SpinLockHolder holder(&amp;m_spinLock);

I don&apos;t think the extra layer of locking buys us anything. Is this a speedup on something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651402</commentid>
    <comment_count>12</comment_count>
      <attachid>147925</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-18 08:25:41 -0700</bug_when>
    <thetext>Comment on attachment 147925
Patch

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

&gt; Source/JavaScriptCore/API/APIShims.h:-45
&gt; -        m_globalData-&gt;heap.activityCallback()-&gt;synchronize();

I think you need to keep this call to synchronize(). Otherwise, if JSC usage starts on thread A, then continues on thread B, and thread A exits, the GC timer stops firing forever.

For the same reason, I think you need to *add* a synchronize function to the incremental sweeper.

I believe it&apos;s OK to remove the other two synchronize() calls, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651428</commentid>
    <comment_count>13</comment_count>
      <attachid>147925</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-18 09:13:29 -0700</bug_when>
    <thetext>Comment on attachment 147925
Patch

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

&gt; Source/JavaScriptCore/heap/IncrementalSweeper.cpp:78
&gt; +void IncrementalSweeper::signalAndWaitForExit()

Now that my brain hurts a little less, here&apos;s one scenario that could go make signalAndWaitForExit go wrong:
(1) Timer fires on thread A, enters function prologue for timerDidFire
(2) Thread A is interrupted
(3) Thread B deletes JSGlobalData
(4) Thread A resumes timerDidFire and dereferences a bunch of deleted memory

The simplest thing that could go wrong in (4) is that thisObject-&gt;m_deathMutex is garbage, so the lock deadlocks.

Here&apos;s an alternative strategy that I think would work:
(1) Give the GC activity callback and incremental sweeper a mutex, and a JSGlobalData* m_globalData
(2) Change timerDidFire to lock the mutex, then, if m_globalData is NULL, release the mutex, delete the callback object (canceling the timer), and return early
    (*) This is thread-safe because, once NULL, m_globalData will never become non-NULL again
(5) Change ~JSGlobalData to call invalidate(), which:
    (a) locks the mutex
    (b) if the timer&apos;s run loop is the current run loop, releases the mutex and deletes the callback object (canceling the timer)
    (b) else, sets m_globalData to NULL and changes the timer fire date to the distant past (this ensures timely termination on another thread)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654124</commentid>
    <comment_count>14</comment_count>
      <attachid>148705</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-20 18:45:32 -0700</bug_when>
    <thetext>Created attachment 148705
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654152</commentid>
    <comment_count>15</comment_count>
      <attachid>148705</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-20 19:10:31 -0700</bug_when>
    <thetext>Comment on attachment 148705
Patch

Attachment 148705 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13018070</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654159</commentid>
    <comment_count>16</comment_count>
      <attachid>148705</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-20 19:15:46 -0700</bug_when>
    <thetext>Comment on attachment 148705
Patch

Attachment 148705 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13012086</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654173</commentid>
    <comment_count>17</comment_count>
      <attachid>148705</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-20 19:29:23 -0700</bug_when>
    <thetext>Comment on attachment 148705
Patch

Attachment 148705 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13011078</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654177</commentid>
    <comment_count>18</comment_count>
      <attachid>148705</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-20 19:41:03 -0700</bug_when>
    <thetext>Comment on attachment 148705
Patch

Attachment 148705 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13022042</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654185</commentid>
    <comment_count>19</comment_count>
      <attachid>148705</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-20 20:04:24 -0700</bug_when>
    <thetext>Comment on attachment 148705
Patch

Attachment 148705 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13025004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654213</commentid>
    <comment_count>20</comment_count>
      <attachid>148705</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-06-20 21:16:53 -0700</bug_when>
    <thetext>Comment on attachment 148705
Patch

Attachment 148705 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13022067</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654707</commentid>
    <comment_count>21</comment_count>
      <attachid>148843</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-21 11:05:13 -0700</bug_when>
    <thetext>Created attachment 148843
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654734</commentid>
    <comment_count>22</comment_count>
      <attachid>148843</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-21 11:28:38 -0700</bug_when>
    <thetext>Comment on attachment 148843
Patch

Attachment 148843 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13034204</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654752</commentid>
    <comment_count>23</comment_count>
      <attachid>148843</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-21 11:39:22 -0700</bug_when>
    <thetext>Comment on attachment 148843
Patch

Attachment 148843 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13039155</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654761</commentid>
    <comment_count>24</comment_count>
      <attachid>148843</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-21 11:49:59 -0700</bug_when>
    <thetext>Comment on attachment 148843
Patch

Attachment 148843 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13033189</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654796</commentid>
    <comment_count>25</comment_count>
      <attachid>148843</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-21 12:29:05 -0700</bug_when>
    <thetext>Comment on attachment 148843
Patch

Attachment 148843 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13039169</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654855</commentid>
    <comment_count>26</comment_count>
      <attachid>148843</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-21 13:55:31 -0700</bug_when>
    <thetext>Comment on attachment 148843
Patch

Attachment 148843 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13039188</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654897</commentid>
    <comment_count>27</comment_count>
      <attachid>148890</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-21 14:50:59 -0700</bug_when>
    <thetext>Created attachment 148890
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654925</commentid>
    <comment_count>28</comment_count>
      <attachid>148890</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-21 15:14:54 -0700</bug_when>
    <thetext>Comment on attachment 148890
Patch

Attachment 148890 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13028255</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654928</commentid>
    <comment_count>29</comment_count>
      <attachid>148898</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-21 15:17:45 -0700</bug_when>
    <thetext>Created attachment 148898
Try to fix Qt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654966</commentid>
    <comment_count>30</comment_count>
      <attachid>148898</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-21 15:43:41 -0700</bug_when>
    <thetext>Comment on attachment 148898
Try to fix Qt

Attachment 148898 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13035207</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654971</commentid>
    <comment_count>31</comment_count>
      <attachid>148904</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-21 15:45:37 -0700</bug_when>
    <thetext>Created attachment 148904
Try to fix Qt again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655083</commentid>
    <comment_count>32</comment_count>
      <attachid>148904</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-21 17:50:30 -0700</bug_when>
    <thetext>Comment on attachment 148904
Try to fix Qt again

Attachment 148904 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13025256</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655084</commentid>
    <comment_count>33</comment_count>
      <attachid>148925</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-21 17:51:13 -0700</bug_when>
    <thetext>Created attachment 148925
Trying to fix windows now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655151</commentid>
    <comment_count>34</comment_count>
      <attachid>148925</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-21 19:05:44 -0700</bug_when>
    <thetext>Comment on attachment 148925
Trying to fix windows now

Attachment 148925 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13028307</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655163</commentid>
    <comment_count>35</comment_count>
      <attachid>148944</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-21 19:33:30 -0700</bug_when>
    <thetext>Created attachment 148944
Trying windows again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655186</commentid>
    <comment_count>36</comment_count>
      <attachid>148944</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-21 20:03:22 -0700</bug_when>
    <thetext>Comment on attachment 148944
Trying windows again

Attachment 148944 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13038289</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655198</commentid>
    <comment_count>37</comment_count>
      <attachid>148950</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-21 20:23:21 -0700</bug_when>
    <thetext>Created attachment 148950
Windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655209</commentid>
    <comment_count>38</comment_count>
      <attachid>148954</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-21 20:46:44 -0700</bug_when>
    <thetext>Created attachment 148954
Windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655227</commentid>
    <comment_count>39</comment_count>
      <attachid>148954</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-21 21:26:35 -0700</bug_when>
    <thetext>Comment on attachment 148954
Windows

Attachment 148954 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13027355</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655455</commentid>
    <comment_count>40</comment_count>
      <attachid>149025</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-22 07:46:25 -0700</bug_when>
    <thetext>Created attachment 149025
Win</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655753</commentid>
    <comment_count>41</comment_count>
      <attachid>149025</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-06-22 14:00:25 -0700</bug_when>
    <thetext>Comment on attachment 149025
Win

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

&gt; Source/JavaScriptCore/runtime/JSLock.cpp:42
&gt; +static pthread_mutex_t giantGlobalJSLock = PTHREAD_MUTEX_INITIALIZER;

I&apos;m not sure that &apos;giant&apos; adds much here, but sure, why not. :o)

&gt; Source/JavaScriptCore/runtime/JSLock.cpp:100
&gt; +    {

Looks like this extra block is redundant, the scope goes to the end of the function anyway – should be able to remove.

&gt; Source/WebCore/bridge/c/c_class.cpp:51
&gt; +    // FIXME: Should we acquire a JSLock here?

Doesn&apos;t look like this code touches JSC, I&apos;d delete this FIXME, looks like this was just junk code.

If you think there is a real risk, then keep the fixme &amp; file new bugzilla bugs to track that this should be investigated. (though I think this is unnecessary)

&gt; Source/WebCore/bridge/jni/jsc/JavaClassJSC.cpp:66
&gt; +                // FIXME: Should we acquire a JSLock here?

Ditto to c_class, delete the FIXME.

&gt; Source/WebCore/bridge/jni/jsc/JavaClassJSC.cpp:82
&gt; +                // FIXME: Should we acquire a JSLock here?

Ditto to c_class, delete the FIXME.

&gt; Source/WebCore/bridge/jni/jsc/JavaClassJSC.cpp:103
&gt; +    // FIXME: Should we acquire a JSLock here?

Ditto to c_class, delete the FIXME.

&gt; Source/WebCore/bridge/jni/jsc/JavaMethodJSC.cpp:114
&gt; +        // FIXME: Should we acquire a JSLock here?

Ditto to c_class, delete the FIXME.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655790</commentid>
    <comment_count>42</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-22 14:43:27 -0700</bug_when>
    <thetext>Committed r121058: &lt;http://trac.webkit.org/changeset/121058&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656046</commentid>
    <comment_count>43</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-06-23 01:53:55 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; Committed r121058: &lt;http://trac.webkit.org/changeset/121058&gt;

It made plugin tests assert, I filed a new bug report for it - https://bugs.webkit.org/show_bug.cgi?id=89807</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656071</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-23 06:28:29 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 89809</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657006</commentid>
    <comment_count>45</comment_count>
      <attachid>149392</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-25 16:46:36 -0700</bug_when>
    <thetext>Created attachment 149392
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657661</commentid>
    <comment_count>46</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-06-26 09:43:12 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; Created an attachment (id=149392) [details]
&gt; Patch

Isn&apos;t it already landed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657665</commentid>
    <comment_count>47</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-26 09:47:54 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (In reply to comment #45)
&gt; &gt; Created an attachment (id=149392) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; Isn&apos;t it already landed?

No, it was rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657666</commentid>
    <comment_count>48</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-06-26 09:49:12 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (In reply to comment #45)
&gt; &gt; Created an attachment (id=149392) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; Isn&apos;t it already landed?
No, it isn&apos;t. http://trac.webkit.org/changeset/121058 was the original patch, which was rolled out by http://trac.webkit.org/changeset/121098. I think it is the fixed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658770</commentid>
    <comment_count>49</comment_count>
      <attachid>149392</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-27 12:13:13 -0700</bug_when>
    <thetext>Comment on attachment 149392
Patch

r=me on the new changes

I think &quot;sharedInstanceLock&quot; would be a better name than &quot;giantGlobalJSLock&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658942</commentid>
    <comment_count>50</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-06-27 16:08:41 -0700</bug_when>
    <thetext>Committed r121381: &lt;http://trac.webkit.org/changeset/121381&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147925</attachid>
            <date>2012-06-15 17:32:34 -0700</date>
            <delta_ts>2012-06-20 18:45:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89123-20120615173234.patch</filename>
            <type>text/plain</type>
            <size>216715</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwNTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1MSBA
QAorMjAxMi0wNi0xNSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9BUElTaGltcy5oOiBSZW1v
dmUgY2FsbHMgdG8gc3luY2hyb25pemUuIEFkZCBSZWZQdHJzIHRvIEpTR2xvYmFsRGF0YSB0byBr
ZWVwIAorICAgICAgICBpdCBhbGl2ZSB1bnRpbCB0aGUgQVBJU2hpbSBpcyBkZXN0cm95ZWQuIE1v
dmUgdGhlIHN0YXJ0IG9mIHRoZSB0aW1lb3V0Q2hlY2tlciB0byBiZSAKKyAgICAgICAgYWZ0ZXIg
d2UndmUgYWNxdWlyZWQgdGhlIEFQSSBsb2NrIGFuZCBzdG9wIGl0IHByaW9yIHRvIHJlbGVhc2lu
ZyBpdC4KKyAgICAgICAgKEpTQzo6QVBJRW50cnlTaGltV2l0aG91dExvY2s6OkFQSUVudHJ5U2hp
bVdpdGhvdXRMb2NrKToKKyAgICAgICAgKEpTQzo6QVBJRW50cnlTaGltV2l0aG91dExvY2s6On5B
UElFbnRyeVNoaW1XaXRob3V0TG9jayk6CisgICAgICAgIChBUElFbnRyeVNoaW1XaXRob3V0TG9j
ayk6CisgICAgICAgIChKU0M6OkFQSUVudHJ5U2hpbTo6QVBJRW50cnlTaGltKToKKyAgICAgICAg
KEpTQzo6QVBJRW50cnlTaGltOjp+QVBJRW50cnlTaGltKToKKyAgICAgICAgKEpTQzo6QVBJQ2Fs
bGJhY2tTaGltOjp+QVBJQ2FsbGJhY2tTaGltKToKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UmVm
LmNwcDoKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dENyZWF0ZSk6IE5vIG5lZWQgdG8gbG9jayBi
ZWZvcmUgY2FsbGluZyBKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwLiBUaGUgCisgICAgICAg
IGdsb2JhbCBsb2NrIHdpbGwgYmUgYWNxdWlyZWQgaW5zaWRlIHNoYXJlZEluc3RhbmNlKCksIGFu
ZCBsb2NraW5nIGlzIGhhbmRsZWQgZmluZSBieSAKKyAgICAgICAgSlNHbG9iYWxDb250ZXh0Q3Jl
YXRlSW5Hcm91cC4KKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXApOiBTaW1p
bGFyIHRvIGpzY21haW4gaW4ganNjLmNwcC4gV2UgbmVlZCB0byBiZSBtb3JlIGNhcmVmdWwgCisg
ICAgICAgIGFuZCB1c2UgdGhlIGdsb2JhbCBsb2NrIHdoZW4gd2UgY2FuIHBvdGVudGlhbGx5IGNh
bGwgY3JlYXRlQ29udGV4dEdyb3VwKCkuCisgICAgICAgIChKU0dsb2JhbENvbnRleHRSZWxlYXNl
KTogVGlnaHRlbiB0aGUgYWNxdWlzaXRpb24gYW5kIHJlbGVhc2Ugb2YgdGhlIEFQSSBsb2NrIHdo
ZW4gcmVsZWFzaW5nIAorICAgICAgICBhIGdsb2JhbCBjb250ZXh0LiBJZiB0aGUgbG9jayBpcyB0
aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGNvbnRleHQsIHdlIHdhbnQgdG8gcmVsZWFzZSBpdCAK
KyAgICAgICAgYmVmb3JlIHRyeWluZyB0byByZXN0b3JlIHRoZSBzYXZlZElkZW50aWZpZXJUYWJs
ZS4KKyAgICAgICAgKEpTQ29udGV4dENyZWF0ZUJhY2t0cmFjZSk6CisgICAgICAgICogaGVhcC9D
b3BpZWRTcGFjZS5jcHA6IAorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVT
bG93Q2FzZSk6IE1ha2Ugc3VyZSB3ZSdyZSBob2xkaW5nIHRoZSBBUEkgbG9jayBpZiB3ZSBoaXQg
dGhlIAorICAgICAgICBhbGxvY2F0aW9uIHNsb3cgcGF0aC4gVGhpcyBqdXN0IGNhdGNoZXMgcGVv
cGxlIHdobyBhY2NpZGVudGFsbHkgdG8gYnJlYWsgdGhlIHJ1bGVzIGFuZCBleGVjdXRlIEpTIAor
ICAgICAgICB3aGlsZSB0aGV5IGRvbid0IGhvbGQgdGhlIGxvY2suCisgICAgICAgICogaGVhcC9I
ZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6IEFkanVzdCB0aGUgZGVzdHJ1Y3Rp
b24gb3JkZXIgb2YgdGhlIEdDQWN0aXZpdHlDYWxsYmFjayBhbmQgdGhlIEluY3JlbWVudGFsU3dl
ZXBlci4KKyAgICAgICAgKEpTQzo6SGVhcDo6fkhlYXApOiBNYWtlIHN1cmUgdGhhdCB3ZSBob2xk
IHRoZSBBUEkgbG9jayB3aGVuIHdlJ3JlIGRlc3Ryb3lpbmcgdGhlIEhlYXAuCisgICAgICAgIChK
U0M6OkhlYXA6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKTogRGl0dG8uCisgICAgICAgIChKU0M6Okhl
YXA6OnByb3RlY3QpOiBEaXR0byBmb3IgcHJvdGVjdGluZyBvYmplY3RzLgorICAgICAgICAoSlND
OjpIZWFwOjp1bnByb3RlY3QpOiBEaXR0byBmb3IgdW5wcm90ZWN0aW5nIG9iamVjdHMuCisgICAg
ICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOiBEaXR0byBmb3IgY29sbGVjdGlvbnMuCisgICAgICAg
ICogaGVhcC9IZWFwLmg6CisgICAgICAgIChIZWFwKToKKyAgICAgICAgKiBoZWFwL0luY3JlbWVu
dGFsU3dlZXBlci5jcHA6IE1hZGUgbW9kaWZpY2F0aW9ucyBzaW1pbGFyIHRvIHRob3NlIGluIERl
ZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2sgCisgICAgICAgIHRvIHNodXQgZG93biB0aGUgSW5jcmVt
ZW50YWxTd2VlcGVyIGluIHRocmVhZC1zYWZlIGZhc2hpb24uCisgICAgICAgIChKU0M6OkluY3Jl
bWVudGFsU3dlZXBlcjo6dGltZXJEaWRGaXJlKToKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxT
d2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3
ZWVwZXI6OmludmFsaWRhdGUpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SW5jcmVt
ZW50YWxTd2VlcGVyOjpzaWduYWxBbmRXYWl0Rm9yRXhpdCk6CisgICAgICAgIChKU0M6OkluY3Jl
bWVudGFsU3dlZXBlcjo6fkluY3JlbWVudGFsU3dlZXBlcik6CisgICAgICAgICogaGVhcC9JbmNy
ZW1lbnRhbFN3ZWVwZXIuaDoKKyAgICAgICAgKEluY3JlbWVudGFsU3dlZXBlcik6CisgICAgICAg
ICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOiAKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZVNsb3dDYXNlKTogRGl0dG8gZm9yIHNsb3cgcGF0aCBhbGxvY2F0aW9uIGlu
IE1hcmtlZFNwYWNlLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOiAKKyAgICAgICAg
KEpTQzo6TWFya2VkQmxvY2s6OnN3ZWVwKTogRGl0dG8gZm9yIHN3ZWVwaW5nIGJsb2NrcyBpbiBN
YXJrZWRTcGFjZS4KKyAgICAgICAgKiBoZWFwL1dlYWtTZXQuY3BwOgorICAgICAgICAoSlNDOjpX
ZWFrU2V0Ojpzd2VlcCk6IERpdHRvIGZvciBmaW5hbGl6aW5nIGJsb2NrcyBpbiBNYXJrZWRTcGFj
ZS4KKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25HQyk6CisgICAgICAgIChm
dW5jdGlvblJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KToKKyAgICAgICAgKGpzY21haW4pOiBIYXZl
IHRvIGJlIG1vcmUgY2FyZWZ1bCB3aGVuIHdlJ3JlIGNyZWF0aW5nIGEgbmV3IEpTR2xvYmFsRGF0
YSBvYmplY3QgCisgICAgICAgIGJ5IHRha2luZyB0aGUgYmlnIGdsb2JhbCBsb2NrIGZpcnN0LCB0
aGVuIGNhbGxpbmcgY3JlYXRlKCkuCisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6Y2hlY2tTeW50YXgpOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6Cisg
ICAgICAgICogcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwOgorICAgICAgICAoSlNDOjpE
ZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjYW5jZWwpOiBEaWRuJ3QgYWN0dWFsbHkgY2hhbmdl
IGFueXRoaW5nIGhlcmUuCisgICAgICAgIChKU0M6OkRlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6
OmludmFsaWRhdGUpOiBFbXB0eSBmdW5jdGlvbiBmb3Igbm9uLUNGIHBsYXRmb3Jtcy4KKyAgICAg
ICAgKEpTQyk6CisgICAgICAgIChKU0M6OkRlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OnNpZ25h
bEFuZFdhaXRGb3JFeGl0KTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9HQ0FjdGl2aXR5Q2Fs
bGJhY2suaDoKKyAgICAgICAgKEpTQzo6R0NBY3Rpdml0eUNhbGxiYWNrOjp3aWxsQ29sbGVjdCk6
IERpZG4ndCBjaGFuZ2UgdGhpcyBlaXRoZXIuCisgICAgICAgIChKU0M6OkdDQWN0aXZpdHlDYWxs
YmFjazo6aW52YWxpZGF0ZSk6IEFkZGVkIG5ldyB2aXJ0dWFsIGZ1bmN0aW9uIHRoYXQgcHV0cyB0
aGUgR0NBY3Rpdml0eUNhbGxiYWNrIAorICAgICAgICBpbnRvIGEgc3RhdGUgd2hlcmUgdGhlIHRp
bWVyIHdpbGwgbm90IGZpcmUgYW55IG1vcmUsIG1ha2luZyBpdCBzYWZlIHRvIGRlc3Ryb3kgaXQg
YW5kIHRoZSBjb250ZXh0CisgICAgICAgIHdpdGggd2hpY2ggaXQgaXMgYXNzb2NpYXRlZC4KKyAg
ICAgICAgKEpTQzo6R0NBY3Rpdml0eUNhbGxiYWNrOjpzaWduYWxBbmRXYWl0Rm9yRXhpdCk6IEFk
ZGVkIG5ldyB2aXJ0dWFsIGZ1bmN0aW9uIHRoYXQgfkpTR2xvYmFsRGF0YSBjYWxscyB0byAKKyAg
ICAgICAgc2h1dCBkb3duIHRoZSBHQ0FjdGl2aXR5Q2FsbGJhY2sgaW4gYSB0aHJlYWQtc2FmZSBt
YW5uZXIuIFRoZXJlIGFyZSB0d28gY2FzZXMgdGhpcyBmdW5jdGlvbiBtdXN0IAorICAgICAgICBh
Y2NvdW50IGZvcjogdGhlIEdDQWN0aXZpdHlDYWxsYmFjayBpcyBib3VuZCB0byB0aGUgY3VycmVu
dCB0aHJlYWQgb3IgaXQgaXMgYm91bmQgdG8gc29tZSBvdGhlciB0aHJlYWQuCisgICAgICAgIElm
IGl0IGlzIGJvdW5kIHRvIHRoZSBjdXJyZW50IHRocmVhZCwgd2UgbXVzdCBkZXN0cm95IGl0IG91
cnNlbHZlcy4gSWYgaXQgaXMgYm91bmQgdG8gc29tZSBvdGhlciB0aHJlYWQsIAorICAgICAgICB0
aGVuIHdlIHNpZ25hbCB0byBpdCB0byBkZXN0cm95IGl0c2VsZiBhbmQgd2FpdCB1bnRpbCBpdCBo
YXMgZmluaXNoZWQuCisgICAgICAgIChEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAg
ICAgKiBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFja0NGLmNwcDoKKyAgICAgICAgKERlZmF1bHRH
Q0FjdGl2aXR5Q2FsbGJhY2tQbGF0Zm9ybURhdGEpOgorICAgICAgICAoSlNDOjpEZWZhdWx0R0NB
Y3Rpdml0eUNhbGxiYWNrUGxhdGZvcm1EYXRhOjp0aW1lckRpZEZpcmUpOiBDaGFuZ2VkIHRvIGNo
ZWNrIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCAKKyAgICAgICAgb2YgZWFjaCB3YWtpbmcgcGVy
aW9kIGlmIGl0IHNob3VsZCBkZXN0cm95IGl0c2VsZiBiYXNlZCBvbiBzb21lIGZsYWdzIHRoYXQg
Y2FuIGJlIHNldCBieSBhbm90aGVyIHRocmVhZCAKKyAgICAgICAgdHJ5aW5nIHRvIHRlYXIgZG93
biB0aGUgSlNHbG9iYWxEYXRhIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBhc3NvY2lhdGVkIHdpdGgu
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNr
OjppbnZhbGlkYXRlKTogU2VlIGRlc2NyaXB0aW9uIGFib3ZlLgorICAgICAgICAoSlNDOjpEZWZh
dWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpzaWduYWxBbmRXYWl0Rm9yRXhpdCk6IERpdHRvLgorICAg
ICAgICAoSlNDOjpEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjp+RGVmYXVsdEdDQWN0aXZpdHlD
YWxsYmFjayk6IFJlbW92ZWQgb2xkIHNodXRkb3duIGNvZGUgc2luY2UgaXQgbm93IG11c3QgCisg
ICAgICAgIGJlIGNhbGxlZCBmcm9tIGludmFsaWRhdGUoKS4KKyAgICAgICAgKEpTQzo6RGVmYXVs
dEdDQWN0aXZpdHlDYWxsYmFjazo6Y29tbW9uQ29uc3RydWN0b3IpOiBJbnRpYWxpemUgbmV3IHZh
cmlhYmxlcyBpbiB0aGUgcGxhdGZvcm0gZGF0YSBzdHJ1Y3QuCisgICAgICAgIFdlIGFsc28gbm93
IHN0b3JlIHRoZSBlbnRpcmUgcGxhdGZvcm0gZGF0YSBzdHJ1Y3QgaW4gdGhlIGNvbnRleHQgaW5m
byBmb3IgdGhlIHJ1bmxvb3AgY2FsbGJhY2suCisgICAgICAgIChKU0M6OkRlZmF1bHRHQ0FjdGl2
aXR5Q2FsbGJhY2s6OmRpZEFsbG9jYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKTogU2luY2Ug
SlNHbG9iYWxEYXRhIGlzIG5vdyBUaHJlYWRTYWZlUmVmQ291bnRlZCwgd2Ugbm8gbG9uZ2VyIG5l
ZWQgdG8gCisgICAgICAgIHdvcnJ5IGFib3V0IHRoZSBUaHJlYWRSZXN0cmljdGlvblZlcmlmaWVy
LgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEpOiBXZSBub3cgc2ln
bmFsIHRoZSBIZWFwJ3MgYWN0aXZpdHkgY2FsbGJhY2sgZmlyc3QgdGhpbmcgaW4gdGhlIAorICAg
ICAgICBkZXN0cnVjdG9yIHRvIHByZXZlbnQgaXQgZnJvbSBkZXBlbmRpbmcgb24gYW55IG90aGVy
IGl0ZW1zIHRoYXQgY291bGQgaGF2ZSBiZWVuIGRlc3Ryb3llZC4KKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5jZSk6IExvY2sgdGhlIG5ldyBnbG9iYWwgbG9jayBub3cu
CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2VJbnRlcm5hbCk6IAor
ICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0dsb2JhbERhdGEp
OiBDaGFuZ2UgdG8gVGhyZWFkU2FmZVJlZkNvdW50ZWQuCisgICAgICAgIChKU0M6OkpTR2xvYmFs
RGF0YTo6YXBpTG9jayk6IEFjY2Vzc29yIHRvIG5ldyBBUEkgbG9jayBmaWVsZC4KKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6On5KU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0
KToKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpHbG9iYWxKU0xvY2s6Okdsb2JhbEpTTG9jayk6IFRoaXMgaXMgb3VyIG5ldyBnbG9i
YWwgbG9jayB0aGF0IG11c3QgYmUgdGFrZW4gd2hlbiBjcmVhdGluZyBuZXcgY29udGV4dHMuCisg
ICAgICAgIChKU0M6Okdsb2JhbEpTTG9jazo6fkdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0M6
OkpTTG9ja0hvbGRlcjo6SlNMb2NrSG9sZGVyKTogVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBh
IE11dGV4TG9ja2VyIGZvciBKU0xvY2tzLiBJdCBrZWVwcyBhIFJlZlB0ciB0byAKKyAgICAgICAg
dGhlIHJlbGV2YW50IEpTR2xvYmFsRGF0YSB0byBtYWtlIHN1cmUgdGhhdCBpdCB3aWxsIHN0aWxs
IGJlIHRoZXJlIHdoZW4gaXQgbmVlZHMgdG8gdW5sb2NrIGl0c2VsZiBpbiB0aGUgCisgICAgICAg
IGRlc3RydWN0b3IuCisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6fkpTTG9ja0hvbGRlcik6
CisgICAgICAgIChKU0M6OkpTTG9jazo6SlNMb2NrKTogVGhpcyBpcyB0aGUgcGVyLUpTR2xvYmFs
RGF0YSBkYXRhIHN0cnVjdHVyZSB0aGF0IGhhbmRsZXMgYWxsIG9mIHlvdXIgcmUtZW50cmFudCBB
UEkgbG9ja2luZyBuZWVkcy4KKyAgICAgICAgKEpTQzo6SlNMb2NrOjp+SlNMb2NrKTogVGhlIGN1
cnJlbnQgdGhyZWFkIG11c3QgYmUgaG9sZGluZyB0aGUgbG9jayB3aGVuIHdlIGRlc3Ryb3kgYSBs
b2NrLiBJdCB0aGVuIGRyb3BzIGFsbCAKKyAgICAgICAgb2YgdGhlc2UgbG9ja3MuCisgICAgICAg
IChKU0M6OkpTTG9jazo6bG9jayk6IFdlIHN0aWxsIHN1cHBvcnQgdGhlIFNpbGVuY2VBc3NlcnRp
b25zT25seSBmZWF0dXJlLCBidXQgb25seSBpbiBhIGN1cnNvcnkgbWFubmVyLiBBbGwgCisgICAg
ICAgIGxvY2tzIGNyZWF0ZWQgYXMgcGFydCBvZiBhIEpTR2xvYmFsRGF0YSBkbyBub3QgdXNlIHRo
aXMgYmVoYXZpb3IuIFdlIHVzZSBvdXIgdGVtcG9yYXJ5IHNwaW5sb2NrIHRvIGNoZWNrIAorICAg
ICAgICB3aG8gb3ducyB0aGUgbG9jay4gSWYgd2Ugb3duIGl0IGFscmVhZHksIHRoZW4gd2UganVz
dCBpbmNyZW1lbnQgdGhlIGxvY2sgY291bnQgYW5kIHJldHVybi4gT3RoZXJ3aXNlLCB3ZSByZWxl
YXNlCisgICAgICAgIHRoZSBzcGlubG9jayBhbmQgd2FpdCBmb3IgdGhlIHJlYWwgbG9jay4gV2hl
biB3ZSBjb21lIGJhY2sgZnJvbSB0aGF0IHdlIGtub3cgd2UgaG9sZCB0aGUgbXV0ZXggbm93LCBz
byB3ZSAKKyAgICAgICAgcmVhY3F1aXJlIHRoZSBzcGlubG9jaywgc3RvcmUgb3Vyc2VsdmVzIGFz
IHRoZSBuZXcgb3duZXIsIGFuZCBzZXQgdGhlIGxvY2sgY291bnQgdG8gMS4KKyAgICAgICAgKEpT
Qzo6SlNMb2NrOjp1bmxvY2spOiBGb3IgdW5sb2NraW5nIHdlIGdyYWIgdGhlIHNwaW5sb2NrIGFu
ZCBkZWNyZW1lbnQgdGhlIGxvY2sgY291bnQuIElmIHRoZSBsb2NrIGNvdW50IGhpdHMgMCwgCisg
ICAgICAgIHRoZW4gd2UgdW5sb2NrIHRoZSBtdXRleC4gV2UgYXJlIHByZXZlbnRlZCBmcm9tIGlt
bWVkaWF0ZWx5IHRyeWluZyB0byByZWFjcXVpcmUgdGhlIGxvY2sgYnkgdGhlIGZhY3QgdGhhdCBs
b2NrKCkKKyAgICAgICAgY2hlY2tzIHRoZSBsb2NrIGNvdW50IGFsb25nIHdpdGggdGhlIG93bmVy
IHRocmVhZCB3aGVuIGNoZWNraW5nIGZvciByZS1lbnRyYW5jeS4KKyAgICAgICAgKEpTQzo6SlNM
b2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jayk6CisgICAgICAgIChKU0M6OkpTTG9jazo6
ZHJvcEFsbExvY2tzKTogRHJvcHMgYWxsIGxvY2tzIGhlbGQgYnkgdGhlIGN1cnJlbnQgdGhyZWFk
LCB1bmxlc3Mgc29tZWJvZHkgaGFzIGFscmVhZHkgZG9uZSBzbywKKyAgICAgICAgaW4gd2hpY2gg
Y2FzZSB3ZSBpZ25vcmUgdGhlIHJlcXVlc3QgYW5kIGtlZXAgdGhlIGxvY2tzIGxvY2tlZC4gVGhp
cyBwcmV2ZW50cyB1cyBmcm9tIG11Y2tpbmcgdXAgdGhlIHN0YWNrCisgICAgICAgIGxpa2UgdGhl
IGNvbW1lbnQgaW4gdGhlIGZpbGUgZXhwbGFpbnMuIFJldHVybnMgdGhlIG51bWJlciBvZiB0aW1l
cyB1bmxvY2soKSB3YXMgY2FsbGVkIGZvciB1c2Ugd2l0aCAKKyAgICAgICAgZ3JhYkFsbExvY2tz
KCkgbGF0ZXIuCisgICAgICAgIChKU0M6OkpTTG9jazo6ZHJvcEFsbExvY2tzVW5jb25kaXRpb25h
bGx5KTogU29tZXRpbWVzIHlvdSBuZWVkIHRvIGp1c3QgZHJvcCBhbGwgb2YgeW91ciBsb2Nrcywg
cmVnYXJkbGVzcyBvZiAKKyAgICAgICAgdGhlIGxvY2sgZGVwdGguIFRoaXMgaXMgZXNwZWNpYWxs
eSBoYW5keSBmb3Igc3BlY2lhbCBjYXNlcyBsaWtlIHdoZW4gdGhlIEpTR2xvYmFsRGF0YSBpcyBi
ZWluZyB0b3JuIGRvd24uIAorICAgICAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGltZXMgdW5s
b2NrKCkgd2FzIGNhbGxlZCBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoYXQgbnVtYmVyIHdpdGggZ3Jh
YkFsbExvY2tzKCkgbGF0ZXIuCisgICAgICAgIChKU0M6OkpTTG9jazo6Z3JhYkFsbExvY2tzKTog
R3JhYnMgdGhlIGxvY2sgYXMgbWFueSB0aW1lcyBhcyB5b3UgdGVsbCBpdC4gVGhpcyBpcyB1c2Vk
IHRvIHJlLWVudGVyIGEgbG9jayB0byAKKyAgICAgICAgc2FtZSAiZGVwdGgiIGFzIHlvdSB3ZXJl
IGJlZm9yZSB5b3UgY2FsbGVkIGRyb3BBbGxMb2NrcygpIG9yIGRyb3BBbGxMb2Nrc1VuY29uZGl0
aW9uYWxseSgpLgorICAgICAgICAoSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExv
Y2tzKTogVGhpcyBvYmplY3QgaXMgdXNlZCB0byBwcm92aWRlIGFuIFJBSUkgaW50ZXJmYWNlIHRv
IGRyb3BwaW5nIGFsbCAKKyAgICAgICAgbG9ja3MgYW5kIHRoZW4gcmVhY3F1aXJpbmcgdGhlbSBh
dCB0aGUgY29uY2x1c2lvbiBvZiB0aGUgY3VycmVudCBzY29wZS4gU2FtZSBmdW5jdGlvbmFsaXR5
IGFzIGJlZm9yZS4KKyAgICAgICAgKEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3M6On5Ecm9wQWxs
TG9ja3MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNMb2NrLmg6CisgICAgICAgIChHbG9iYWxKU0xv
Y2spOiAKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0xvY2tIb2xkZXIpOgorICAgICAgICAo
SlNMb2NrKToKKyAgICAgICAgKERyb3BBbGxMb2Nrcyk6CisgICAgICAgICogcnVudGltZS9XZWFr
R0NNYXAuaDoKKyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpzZXQpOgorICAgICAgICAqIHRlc3RS
ZWdFeHAuY3BwOgorICAgICAgICAocmVhbE1haW4pOiBTYW1lIGFzIGpzY21haW4gaW4ganNjLmNw
cC4KKwogMjAxMi0wNi0xNSAgWW9uZyBMaSAgPHlvbGlAcmltLmNvbT4KIAogICAgICAgICBbQmxh
Y2tCZXJyeV0gUHV0IHBsYXRmb3JtLXNwZWNpZmljIEdDIHBvbGljeSBpbiBHQ0FjdGl2aXR5Q2Fs
bGJhY2sKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0MKIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgIGV4ZWMtPmhlYXAoKS0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMzA3LDcgKzMwNyw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQygKICNpZm5kZWYgTkRFQlVH
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVsZWFzZUV4ZWN1dGFibGVN
ZW1vcnkoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgZXhlYy0+Z2xvYmFs
RGF0YSgpLnJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTY2Nyw5ICs2NjcsMTMgQEAgc3RhdGljIHZvaWQg
cGFyc2VBcmd1bWVudHMoaW50IGFyZ2MsIGNoYQogCiBpbnQganNjbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLQot
ICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0
ZShUaHJlYWRTdGFja1R5cGVMYXJnZSwgTGFyZ2VIZWFwKTsKKyAgICAKKyAgICBSZWZQdHI8SlNH
bG9iYWxEYXRhPiBnbG9iYWxEYXRhOworICAgIHsKKyAgICAgICAgR2xvYmFsSlNMb2NrIGdsb2Jh
bExvY2s7CisgICAgICAgIGdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZShUaHJlYWRT
dGFja1R5cGVMYXJnZSwgTGFyZ2VIZWFwKTsKKyAgICB9CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
Z2xvYmFsRGF0YS5nZXQoKSk7CiAKICAgICBDb21tYW5kTGluZSBvcHRpb25zOwogICAgIHBhcnNl
QXJndW1lbnRzKGFyZ2MsIGFyZ3YsIG9wdGlvbnMpOwpAQCAtNjc5LDYgKzY4Myw4IEBAIGludCBq
c2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBpZiAob3B0aW9ucy5pbnRlcmFjdGl2
ZSAmJiBzdWNjZXNzKQogICAgICAgICBydW5JbnRlcmFjdGl2ZShnbG9iYWxPYmplY3QpOwogCisg
ICAgZ2xvYmFsRGF0YS5jbGVhcigpOworCiAgICAgcmV0dXJuIHN1Y2Nlc3MgPyAwIDogMzsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0UmVnRXhwLmNwcAkocmV2aXNpb24gMTIwNDc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OTUsOSArNDk1LDEzIEBAIHN0YXRpYyB2b2lkIHBhcnNlQXJndW1lbnRzKGludCBhcmdj
LCBjaGEKIAogaW50IHJlYWxNYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+
IGdsb2JhbERhdGE7CiAKLSAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBnbG9iYWxEYXRhID0gSlNH
bG9iYWxEYXRhOjpjcmVhdGUoVGhyZWFkU3RhY2tUeXBlTGFyZ2UsIExhcmdlSGVhcCk7CisgICAg
eworICAgICAgICBHbG9iYWxKU0xvY2sgZ2xvYmFsTG9jazsKKyAgICAgICAgZ2xvYmFsRGF0YSA9
IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKFRocmVhZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOwor
ICAgIH0KKyAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhLmdldCgpKTsKIAogICAgIENv
bW1hbmRMaW5lIG9wdGlvbnM7CiAgICAgcGFyc2VBcmd1bWVudHMoYXJnYywgYXJndiwgb3B0aW9u
cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSVNoaW1zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElTaGltcy5oCShyZXZpc2lvbiAxMjA0
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSVNoaW1zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDE4ICs0MiwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIFVOVVNFRF9QQVJBTShy
ZWdpc3RlclRocmVhZCk7CiAgICAgICAgIGlmIChyZWdpc3RlclRocmVhZCkKICAgICAgICAgICAg
IGdsb2JhbERhdGEtPmhlYXAubWFjaGluZVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7Ci0g
ICAgICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5hY3Rpdml0eUNhbGxiYWNrKCktPnN5bmNocm9uaXpl
KCk7Ci0gICAgICAgIG1fZ2xvYmFsRGF0YS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsKICAgICB9
CiAKICAgICB+QVBJRW50cnlTaGltV2l0aG91dExvY2soKQogICAgIHsKLSAgICAgICAgbV9nbG9i
YWxEYXRhLT50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAgICAgICAgIHd0ZlRocmVhZERhdGEoKS5z
ZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKG1fZW50cnlJZGVudGlmaWVyVGFibGUpOwogICAgIH0K
IAotcHJpdmF0ZToKLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKK3Byb3RlY3RlZDoK
KyAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBtX2dsb2JhbERhdGE7CiAgICAgSWRlbnRpZmllclRh
YmxlKiBtX2VudHJ5SWRlbnRpZmllclRhYmxlOwogfTsKIApAQCAtNjIsMTkgKzU5LDI0IEBAIHB1
YmxpYzoKICAgICAvLyBOb3JtYWwgQVBJIGVudHJ5CiAgICAgQVBJRW50cnlTaGltKEV4ZWNTdGF0
ZSogZXhlYywgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUpCiAgICAgICAgIDogQVBJRW50cnlT
aGltV2l0aG91dExvY2soJmV4ZWMtPmdsb2JhbERhdGEoKSwgcmVnaXN0ZXJUaHJlYWQpCi0gICAg
ICAgICwgbV9sb2NrKGV4ZWMpCiAgICAgeworICAgICAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2so
KS5sb2NrKCk7CisgICAgICAgIG1fZ2xvYmFsRGF0YS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsK
ICAgICB9CiAKICAgICAvLyBKU1Byb3BlcnR5TmFtZUFjY3VtdWxhdG9yIG9ubHkgaGFzIGEgZ2xv
YmFsRGF0YS4KICAgICBBUElFbnRyeVNoaW0oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29s
IHJlZ2lzdGVyVGhyZWFkID0gdHJ1ZSkKICAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRob3V0TG9j
ayhnbG9iYWxEYXRhLCByZWdpc3RlclRocmVhZCkKLSAgICAgICAgLCBtX2xvY2soZ2xvYmFsRGF0
YS0+aXNTaGFyZWRJbnN0YW5jZSgpID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpCiAgICAgeworICAgICAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5sb2NrKCk7CisgICAg
ICAgIG1fZ2xvYmFsRGF0YS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsKICAgICB9CiAKLXByaXZh
dGU6Ci0gICAgSlNMb2NrIG1fbG9jazsKKyAgICB+QVBJRW50cnlTaGltKCkKKyAgICB7CisgICAg
ICAgIG1fZ2xvYmFsRGF0YS0+dGltZW91dENoZWNrZXIuc3RvcCgpOworICAgICAgICBtX2dsb2Jh
bERhdGEtPmFwaUxvY2soKS51bmxvY2soKTsKKyAgICB9CiB9OwogCiBjbGFzcyBBUElDYWxsYmFj
a1NoaW0gewpAQCAtODgsNyArOTAsNiBAQCBwdWJsaWM6CiAKICAgICB+QVBJQ2FsbGJhY2tTaGlt
KCkKICAgICB7Ci0gICAgICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5hY3Rpdml0eUNhbGxiYWNrKCkt
PnN5bmNocm9uaXplKCk7CiAgICAgICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRp
ZmllclRhYmxlKG1fZ2xvYmFsRGF0YS0+aWRlbnRpZmllclRhYmxlKTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHJldmlzaW9uIDEy
MDQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNiBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNHbG9iYWxD
b250ZXh0Q3JlYXRlCiAgICAgLy8gSWYgdGhlIGFwcGxpY2F0aW9uIHdhcyBsaW5rZWQgYmVmb3Jl
IEpTR2xvYmFsQ29udGV4dENyZWF0ZSB3YXMgY2hhbmdlZCB0byB1c2UgYSB1bmlxdWUgSlNHbG9i
YWxEYXRhLAogICAgIC8vIHdlIHVzZSBhIHNoYXJlZCBvbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRp
YmlsaXR5LgogICAgIGlmIChOU1ZlcnNpb25PZkxpbmtUaW1lTGlicmFyeSgiSmF2YVNjcmlwdENv
cmUiKSA8PSB3ZWJraXRGaXJzdFZlcnNpb25XaXRoQ29uY3VycmVudEdsb2JhbENvbnRleHRzKSB7
Ci0gICAgICAgIEpTTG9jayBsb2NrKExvY2tGb3JSZWFsKTsKICAgICAgICAgcmV0dXJuIEpTR2xv
YmFsQ29udGV4dENyZWF0ZUluR3JvdXAodG9SZWYoJkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFu
Y2UoKSksIGdsb2JhbE9iamVjdENsYXNzKTsKICAgICB9CiAjZW5kaWYgLy8gT1MoREFSV0lOKQpA
QCAtOTAsOCArODksMTEgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0
ZQogewogICAgIGluaXRpYWxpemVUaHJlYWRpbmcoKTsKIAotICAgIEpTTG9jayBsb2NrKExvY2tG
b3JSZWFsKTsKLSAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBnbG9iYWxEYXRhID0gZ3JvdXAgPyBQ
YXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4odG9KUyhncm91cCkpIDogSlNHbG9iYWxEYXRhOjpjcmVh
dGVDb250ZXh0R3JvdXAoVGhyZWFkU3RhY2tUeXBlU21hbGwpOworICAgIFJlZlB0cjxKU0dsb2Jh
bERhdGE+IGdsb2JhbERhdGE7CisgICAgeworICAgICAgICBHbG9iYWxKU0xvY2sgZ2xvYmFsTG9j
azsKKyAgICAgICAgZ2xvYmFsRGF0YSA9IGdyb3VwID8gUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+
KHRvSlMoZ3JvdXApKSA6IEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKFRocmVhZFN0
YWNrVHlwZVNtYWxsKTsKKyAgICB9CiAKICAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKGdsb2Jh
bERhdGEuZ2V0KCksIGZhbHNlKTsKIApAQCAtMTI0LDE4ICsxMjYsMTkgQEAgSlNHbG9iYWxDb250
ZXh0UmVmIEpTR2xvYmFsQ29udGV4dFJldGFpbgogCiB2b2lkIEpTR2xvYmFsQ29udGV4dFJlbGVh
c2UoSlNHbG9iYWxDb250ZXh0UmVmIGN0eCkKIHsKKyAgICBJZGVudGlmaWVyVGFibGUqIHNhdmVk
SWRlbnRpZmllclRhYmxlOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBK
U0xvY2sgbG9jayhleGVjKTsKKyAgICB7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwot
ICAgIElkZW50aWZpZXJUYWJsZSogc2F2ZWRJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWREYXRh
KCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShnbG9iYWxEYXRhLmlkZW50aWZpZXJUYWJsZSk7
CisgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
KyAgICAgICAgc2F2ZWRJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVu
dElkZW50aWZpZXJUYWJsZShnbG9iYWxEYXRhLmlkZW50aWZpZXJUYWJsZSk7CiAKLSAgICBib29s
IHByb3RlY3RDb3VudElzWmVybyA9IEhlYXA6OmhlYXAoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVj
dCgpKS0+dW5wcm90ZWN0KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7Ci0gICAgaWYgKHBy
b3RlY3RDb3VudElzWmVybykgewotICAgICAgICBnbG9iYWxEYXRhLmhlYXAuYWN0aXZpdHlDYWxs
YmFjaygpLT5zeW5jaHJvbml6ZSgpOwotICAgICAgICBnbG9iYWxEYXRhLmhlYXAucmVwb3J0QWJh
bmRvbmVkT2JqZWN0R3JhcGgoKTsKKyAgICAgICAgYm9vbCBwcm90ZWN0Q291bnRJc1plcm8gPSBI
ZWFwOjpoZWFwKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPnVucHJvdGVjdChleGVjLT5k
eW5hbWljR2xvYmFsT2JqZWN0KCkpOworICAgICAgICBpZiAocHJvdGVjdENvdW50SXNaZXJvKQor
ICAgICAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7
CisgICAgICAgIGdsb2JhbERhdGEuZGVyZWYoKTsKICAgICB9Ci0gICAgZ2xvYmFsRGF0YS5kZXJl
ZigpOwogCiAgICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoc2F2
ZWRJZGVudGlmaWVyVGFibGUpOwogfQpAQCAtMTY2LDcgKzE2OSw3IEBAIEpTR2xvYmFsQ29udGV4
dFJlZiBKU0NvbnRleHRHZXRHbG9iYWxDb24KIEpTU3RyaW5nUmVmIEpTQ29udGV4dENyZWF0ZUJh
Y2t0cmFjZShKU0NvbnRleHRSZWYgY3R4LCB1bnNpZ25lZCBtYXhTdGFja1NpemUpCiB7CiAgICAg
RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTTG9jayBsb2NrKGV4ZWMpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAg
IFVTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db3BpZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29waWVkU3BhY2UuY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDcg
QEAgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeUFsbG9jYXRlUwogICAgIGlmIChpc092
ZXJzaXplKGJ5dGVzKSkKICAgICAgICAgcmV0dXJuIHRyeUFsbG9jYXRlT3ZlcnNpemUoYnl0ZXMs
IG91dFB0cik7CiAgICAgCisgICAgQVNTRVJUKG1faGVhcC0+Z2xvYmFsRGF0YSgpLT5hcGlMb2Nr
KCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgbV9oZWFwLT5kaWRBbGxvY2F0
ZShtX2FsbG9jYXRvci5jdXJyZW50Q2FwYWNpdHkoKSk7CiAKICAgICBpZiAoIWFkZE5ld0Jsb2Nr
KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxMjA0
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYwLDE1ICsxNjAsOSBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBwcm9wb3J0aW9uYWxI
ZWFwU2l6CiAgICAgcmV0dXJuIDEuMjUgKiBoZWFwU2l6ZTsKIH0KIAotc3RhdGljIGlubGluZSBi
b29sIGlzVmFsaWRTaGFyZWRJbnN0YW5jZVRocmVhZFN0YXRlKCkKK3N0YXRpYyBpbmxpbmUgYm9v
bCBpc1ZhbGlkU2hhcmVkSW5zdGFuY2VUaHJlYWRTdGF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEpCiB7Ci0gICAgaWYgKCFKU0xvY2s6OmxvY2tDb3VudCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIUpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGdsb2Jh
bERhdGEtPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpOwogfQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgaXNWYWxpZFRocmVhZFN0YXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKQEAgLTE3Niw3ICsxNzAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFRocmVhZFN0
YXRlKEpTCiAgICAgaWYgKGdsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZSAhPSB3dGZUaHJlYWRE
YXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoZ2xvYmFsRGF0YS0+aXNTaGFyZWRJbnN0YW5jZSgpICYmICFpc1ZhbGlkU2hhcmVk
SW5zdGFuY2VUaHJlYWRTdGF0ZSgpKQorICAgIGlmIChnbG9iYWxEYXRhLT5pc1NoYXJlZEluc3Rh
bmNlKCkgJiYgIWlzVmFsaWRTaGFyZWRJbnN0YW5jZVRocmVhZFN0YXRlKGdsb2JhbERhdGEpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0NSw4ICsyMzks
NiBAQCBIZWFwOjpIZWFwKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSGVhCiAgICAgLCBtX29w
ZXJhdGlvbkluUHJvZ3Jlc3MoTm9PcGVyYXRpb24pCiAgICAgLCBtX29iamVjdFNwYWNlKHRoaXMp
CiAgICAgLCBtX3N0b3JhZ2VTcGFjZSh0aGlzKQotICAgICwgbV9hY3Rpdml0eUNhbGxiYWNrKERl
ZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1fc3dlZXBlcihJ
bmNyZW1lbnRhbFN3ZWVwZXI6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fbWFjaGluZVRocmVhZHMo
dGhpcykKICAgICAsIG1fc2hhcmVkRGF0YShnbG9iYWxEYXRhKQogICAgICwgbV9zbG90VmlzaXRv
cihtX3NoYXJlZERhdGEpCkBAIC0yNTUsMTIgKzI0NywxNSBAQCBIZWFwOjpIZWFwKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgSGVhCiAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAg
ICAsIG1fbGFzdEdDTGVuZ3RoKDApCiAgICAgLCBtX2xhc3RDb2RlRGlzY2FyZFRpbWUoV1RGOjpj
dXJyZW50VGltZSgpKQorICAgICwgbV9hY3Rpdml0eUNhbGxiYWNrKERlZmF1bHRHQ0FjdGl2aXR5
Q2FsbGJhY2s6OmNyZWF0ZSh0aGlzKSkKKyAgICAsIG1fc3dlZXBlcihJbmNyZW1lbnRhbFN3ZWVw
ZXI6OmNyZWF0ZSh0aGlzKSkKIHsKICAgICBtX3N0b3JhZ2VTcGFjZS5pbml0KCk7CiB9CiAKIEhl
YXA6On5IZWFwKCkKIHsKKyAgICBBU1NFUlQobV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVu
dFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiB9CiAKIGJvb2wgSGVhcDo6aXNQYWdlZE91dChkb3Vi
bGUgZGVhZGxpbmUpCkBAIC0yNzQsNiArMjY5LDcgQEAgdm9pZCBIZWFwOjpsYXN0Q2hhbmNlVG9G
aW5hbGl6ZSgpCiB7CiAgICAgQVNTRVJUKCFtX2dsb2JhbERhdGEtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QpOwogICAgIEFTU0VSVChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwor
ICAgIEFTU0VSVChtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
TG9jaygpKTsKIAogICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgYSByZWxlYXNlLW1vZGUgY3Jhc2gg
b25jZSB3ZSdyZSBzdXJlIG5vIG9uZSdzIGRvaW5nIHRoaXMuCiAgICAgaWYgKHNpemVfdCBzaXpl
ID0gbV9wcm90ZWN0ZWRWYWx1ZXMuc2l6ZSgpKQpAQCAtMzI3LDcgKzMyMyw3IEBAIHZvaWQgSGVh
cDo6ZGlkQWJhbmRvbihzaXplX3QgYnl0ZXMpCiB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBr
KQogewogICAgIEFTU0VSVChrKTsKLSAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNI
b2xkaW5nTG9jaygpIHx8ICFtX2dsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSk7CisgICAg
QVNTRVJUKG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2Nr
KCkgfHwgIW1fZ2xvYmFsRGF0YS0+aXNTaGFyZWRJbnN0YW5jZSgpKTsKIAogICAgIGlmICghay5p
c0NlbGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzM4LDcgKzMzNCw3IEBAIHZvaWQgSGVhcDo6
cHJvdGVjdChKU1ZhbHVlIGspCiBib29sIEhlYXA6OnVucHJvdGVjdChKU1ZhbHVlIGspCiB7CiAg
ICAgQVNTRVJUKGspOwotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdM
b2NrKCkgfHwgIW1fZ2xvYmFsRGF0YS0+aXNTaGFyZWRJbnN0YW5jZSgpKTsKKyAgICBBU1NFUlQo
bV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSB8fCAh
bV9nbG9iYWxEYXRhLT5pc1NoYXJlZEluc3RhbmNlKCkpOwogCiAgICAgaWYgKCFrLmlzQ2VsbCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02OTIsNiArNjg4LDcgQEAgdm9pZCBIZWFwOjpj
b2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5n
UmVnaW9uKCJHYXJiYWdlIENvbGxlY3Rpb24iKTsKICAgICAKICAgICBHQ1BIQVNFKENvbGxlY3Qp
OworICAgIEFTU0VSVChnbG9iYWxEYXRhKCktPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xk
aW5nTG9jaygpKTsKICAgICBBU1NFUlQoZ2xvYmFsRGF0YSgpLT5pZGVudGlmaWVyVGFibGUgPT0g
d3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CiAgICAgQVNTRVJUKG1f
aXNTYWZlVG9Db2xsZWN0KTsKICAgICBKQVZBU0NSSVBUQ09SRV9HQ19CRUdJTigpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsOSArMjIwLDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxWZWN0b3I8VmFsdWVTdHJpbmdQYWly
PiogPiBtX3RlbXBTb3J0aW5nVmVjdG9yczsKICAgICAgICAgT3duUHRyPEhhc2hTZXQ8TWFya2Vk
QXJndW1lbnRCdWZmZXIqPiA+IG1fbWFya0xpc3RTZXQ7CiAKLSAgICAgICAgT3duUHRyPEdDQWN0
aXZpdHlDYWxsYmFjaz4gbV9hY3Rpdml0eUNhbGxiYWNrOwotICAgICAgICBPd25QdHI8SW5jcmVt
ZW50YWxTd2VlcGVyPiBtX3N3ZWVwZXI7Ci0gICAgICAgIAogICAgICAgICBNYWNoaW5lVGhyZWFk
cyBtX21hY2hpbmVUaHJlYWRzOwogICAgICAgICAKICAgICAgICAgTWFya1N0YWNrVGhyZWFkU2hh
cmVkRGF0YSBtX3NoYXJlZERhdGE7CkBAIC0yNDAsNiArMjM3LDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGRvdWJsZSBtX2xhc3RDb2RlRGlzY2FyZFRpbWU7CiAKICAgICAgICAgRG91Ymx5
TGlua2VkTGlzdDxFeGVjdXRhYmxlQmFzZT4gbV9jb21waWxlZENvZGU7CisgICAgICAgIAorICAg
ICAgICBPd25QdHI8R0NBY3Rpdml0eUNhbGxiYWNrPiBtX2FjdGl2aXR5Q2FsbGJhY2s7CisgICAg
ICAgIE93blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IG1fc3dlZXBlcjsKICAgICB9OwogCiAgICAg
aW5saW5lIGJvb2wgSGVhcDo6c2hvdWxkQ29sbGVjdCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAJKHJldmlzaW9uIDEyMDQ3
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwLDI3ICsyMCw4MSBAQCBzdGF0aWMgY29uc3QgQ0ZUaW1lSW50
ZXJ2YWwgc3dlZXBUaW1lTXVsCiAgCiB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6dGltZXJEaWRG
aXJlKENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkKiBpbmZvKQogewotICAgIEhlYXAqIGhlYXAgPSBz
dGF0aWNfY2FzdDxIZWFwKj4oaW5mbyk7Ci0gICAgQVBJRW50cnlTaGltIHNoaW0oaGVhcC0+Z2xv
YmFsRGF0YSgpKTsKLSAgICBoZWFwLT5zd2VlcGVyKCktPmRvU3dlZXAoV1RGOjptb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWUoKSk7CisgICAgSW5jcmVtZW50YWxTd2VlcGVyKiB0aGlzT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SW5jcmVtZW50YWxTd2VlcGVyKj4oaW5mbyk7CisgICAgSGVhcCogaGVh
cCA9IHN0YXRpY19jYXN0PEhlYXAqPih0aGlzT2JqZWN0LT5tX2hlYXApOworICAgIHsKKyAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPm1fZGVhdGhNdXRleCk7CisgICAgICAg
IGlmICh0aGlzT2JqZWN0LT5tX2lzRGVhZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBpZiAodGhpc09iamVjdC0+bV9zaG91bGREaWUpIHsKKyAgICAgICAgICAgIGhlYXAtPmFjdGl2
aXR5Q2FsbGJhY2soKS0+aW52YWxpZGF0ZSgpOworICAgICAgICAgICAgdGhpc09iamVjdC0+bV9k
ZWF0aENvbmRpdGlvbi5zaWduYWwoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIHRoaXNPYmplY3QtPm1faXNBd2FrZSA9IHRydWU7CisgICAgfQorCisgICAgewor
ICAgICAgICBBUElFbnRyeVNoaW0gc2hpbShoZWFwLT5nbG9iYWxEYXRhKCkpOworICAgICAgICBo
ZWFwLT5zd2VlcGVyKCktPmRvU3dlZXAoV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KSk7CisgICAgfQorCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIodGhpc09iamVj
dC0+bV9kZWF0aE11dGV4KTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9pc0F3YWtlID0gZmFsc2U7
CisgICAgICAgIGlmICh0aGlzT2JqZWN0LT5tX3Nob3VsZERpZSkgeworICAgICAgICAgICAgaGVh
cC0+YWN0aXZpdHlDYWxsYmFjaygpLT5pbnZhbGlkYXRlKCk7CisgICAgICAgICAgICB0aGlzT2Jq
ZWN0LT5tX2RlYXRoQ29uZGl0aW9uLnNpZ25hbCgpOworICAgICAgICB9CisgICAgfQogfQogICAg
IAogSW5jcmVtZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIoSGVhcCogaGVhcCwgQ0ZS
dW5Mb29wUmVmIHJ1bkxvb3ApCiAgICAgOiBtX2hlYXAoaGVhcCkKICAgICAsIG1fY3VycmVudEJs
b2NrVG9Td2VlcEluZGV4KDApCisgICAgLCBtX3Nob3VsZERpZShmYWxzZSkKKyAgICAsIG1faXNE
ZWFkKGZhbHNlKQorICAgICwgbV9pc0F3YWtlKGZhbHNlKQogICAgICwgbV9sZW5ndGhPZkxhc3RT
d2VlcEluY3JlbWVudCgwLjApCiB7CiAgICAgbWVtc2V0KCZtX2NvbnRleHQsIDAsIHNpemVvZihD
RlJ1bkxvb3BUaW1lckNvbnRleHQpKTsKLSAgICBtX2NvbnRleHQuaW5mbyA9IG1faGVhcDsKKyAg
ICBtX2NvbnRleHQuaW5mbyA9IHRoaXM7CiAgICAgbV9ydW5Mb29wID0gcnVuTG9vcDsKICAgICBt
X3RpbWVyLmFkb3B0Q0YoQ0ZSdW5Mb29wVGltZXJDcmVhdGUoMCwgQ0ZBYnNvbHV0ZVRpbWVHZXRD
dXJyZW50KCksIGRlY2FkZSwgMCwgMCwgJnRpbWVyRGlkRmlyZSwgJm1fY29udGV4dCkpOwogICAg
IENGUnVuTG9vcEFkZFRpbWVyKG1fcnVuTG9vcC5nZXQoKSwgbV90aW1lci5nZXQoKSwga0NGUnVu
TG9vcENvbW1vbk1vZGVzKTsKIH0KIAotSW5jcmVtZW50YWxTd2VlcGVyOjp+SW5jcmVtZW50YWxT
d2VlcGVyKCkKK3ZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjppbnZhbGlkYXRlKCkKIHsKKyAgICBB
U1NFUlQobV9zaG91bGREaWUpOworICAgIEFTU0VSVCghbV9pc0RlYWQpOwogICAgIENGUnVuTG9v
cFJlbW92ZVRpbWVyKG1fcnVuTG9vcC5nZXQoKSwgbV90aW1lci5nZXQoKSwga0NGUnVuTG9vcENv
bW1vbk1vZGVzKTsKICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUobV90aW1lci5nZXQoKSk7
CisgICAgbV9pc0RlYWQgPSB0cnVlOworfQorCit2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6c2ln
bmFsQW5kV2FpdEZvckV4aXQoKQoreworICAgIHVuc2lnbmVkIGxvY2tzVG9QaWNrVXAgPSBtX2hl
YXAtPmdsb2JhbERhdGEoKS0+YXBpTG9jaygpLmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseSgp
OworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2RlYXRoTXV0ZXgpOworICAgIG1fc2hvdWxkRGll
ID0gdHJ1ZTsKKyAgICAvLyBJZiB0aGUgYWN0aXZpdHkgY2FsbGJhY2sgaXMgY3VycmVudGx5IGF3
YWtlLCB0aGF0IG1lYW5zIHRoYXQgaXQgaXMgcnVubmluZyBvbiBhbm90aGVyIAorICAgIC8vIHRo
cmVhZC4gV2UgbmVlZCB0byBzaWduYWwgaXQgYW5kIHdhaXQgdW50aWwgaXQgaGFzIGludmFsaWRh
dGVkIGl0c2VsZi4KKyAgICBpZiAobV9pc0F3YWtlKSB7CisgICAgICAgIHdoaWxlICghbV9pc0Rl
YWQpCisgICAgICAgICAgICBtX2RlYXRoQ29uZGl0aW9uLndhaXQobV9kZWF0aE11dGV4KTsKKyAg
ICAvLyBUaGUgYWN0aXZpdHkgY2FsbGJhY2sgY291bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGFueSB0
aHJlYWQsIGluY2x1ZGluZyB0aGlzIG9uZSwgc28gd2UgCisgICAgLy8gbmVlZCB0byBzaHV0IGl0
IGRvd24gb3Vyc2VsdmVzLgorICAgIH0gZWxzZQorICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAg
bV9oZWFwLT5nbG9iYWxEYXRhKCktPmFwaUxvY2soKS5ncmFiQWxsTG9ja3MobG9ja3NUb1BpY2tV
cCk7Cit9CisKK0luY3JlbWVudGFsU3dlZXBlcjo6fkluY3JlbWVudGFsU3dlZXBlcigpCit7Cisg
ICAgaW52YWxpZGF0ZSgpOwogfQogCiBQYXNzT3duUHRyPEluY3JlbWVudGFsU3dlZXBlcj4gSW5j
cmVtZW50YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCShyZXZpc2lvbiAxMjA0Nzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjIsNiArMjIsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25Q
dHI8SW5jcmVtZW50YWxTd2VlcGVyPiBjcmVhdGUoSGVhcCopOwogICAgIHZvaWQgc3RhcnRTd2Vl
cGluZyhjb25zdCBIYXNoU2V0PE1hcmtlZEJsb2NrKj4mIGJsb2NrU25hcHNob3QpOwogCisgICAg
dm9pZCBpbnZhbGlkYXRlKCk7CisgICAgdm9pZCBzaWduYWxBbmRXYWl0Rm9yRXhpdCgpOworCiBw
cml2YXRlOgogI2lmIFVTRShDRikKICAgICBJbmNyZW1lbnRhbFN3ZWVwZXIoSGVhcCosIENGUnVu
TG9vcFJlZik7CkBAIC0zNiw3ICszOSwxMyBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxDRlJ1
bkxvb3BUaW1lclJlZj4gbV90aW1lcjsKICAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wUmVmPiBtX3J1
bkxvb3A7CiAgICAgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IG1fY29udGV4dDsKLSAgIAorCisgICAg
TXV0ZXggbV9kZWF0aE11dGV4OworICAgIFRocmVhZENvbmRpdGlvbiBtX2RlYXRoQ29uZGl0aW9u
OworICAgIGJvb2wgbV9zaG91bGREaWU7CisgICAgYm9vbCBtX2lzRGVhZDsKKyAgICBib29sIG1f
aXNBd2FrZTsKKyAKICAgICBkb3VibGUgbV9sZW5ndGhPZkxhc3RTd2VlcEluY3JlbWVudDsgCiAg
ICAgVmVjdG9yPE1hcmtlZEJsb2NrKj4gbV9ibG9ja3NUb1N3ZWVwOwogI2Vsc2UKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNp
b24gMTIwNDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgIkdDQWN0aXZp
dHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEu
aCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01
Niw2ICs1Nyw3IEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXQKICAg
ICAKIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSgpCiB7CisgICAgQVNT
RVJUKG1faGVhcC0+Z2xvYmFsRGF0YSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGlu
Z0xvY2soKSk7CiAjaWYgQ09MTEVDVF9PTl9FVkVSWV9BTExPQ0FUSU9OCiAgICAgbV9oZWFwLT5j
b2xsZWN0QWxsR2FyYmFnZSgpOwogICAgIEFTU0VSVChtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9n
cmVzcyA9PSBOb09wZXJhdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBA
QCBNYXJrZWRCbG9jazo6RnJlZUxpc3QgTWFya2VkQmxvY2s6OnNwZWNpCiBNYXJrZWRCbG9jazo6
RnJlZUxpc3QgTWFya2VkQmxvY2s6OnN3ZWVwKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCiB7CiAgICAg
SEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTih0aGlzKTsKKyAgICBBU1NFUlQoaGVhcCgp
LT5nbG9iYWxEYXRhKCktPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsK
IAogICAgIG1fd2Vha1NldC5zd2VlcCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9XZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtCbG9jay5jcHAJKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw4ICsxMjcsMTAg
QEAgdm9pZCBXZWFrQmxvY2s6OnJlYXAoKQogICAgICAgICBpZiAod2Vha0ltcGwtPnN0YXRlKCkg
PiBXZWFrSW1wbDo6RGVhZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChI
ZWFwOjppc01hcmtlZCh3ZWFrSW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYg
KEhlYXA6OmlzTWFya2VkKHdlYWtJbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpKSB7CisgICAgICAg
ICAgICBBU1NFUlQod2Vha0ltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkxpdmUpOwogICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KIAogICAgICAgICB3ZWFrSW1wbC0+c2V0U3RhdGUo
V2Vha0ltcGw6OkRlYWQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1dlYWtTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtTZXQuY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9XZWFrU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUg
IldlYWtTZXQuaCIKIAogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQyLDYgKzQzLDcgQEAgV2Vha1NldDo6fldlYWtT
ZXQoKQogCiB2b2lkIFdlYWtTZXQ6OnN3ZWVwKCkKIHsKKyAgICBBU1NFUlQobV9oZWFwLT5nbG9i
YWxEYXRhKCktPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKICAgICBm
b3IgKFdlYWtCbG9jayogYmxvY2sgPSBtX2Jsb2Nrcy5oZWFkKCk7IGJsb2NrOyBibG9jayA9IGJs
b2NrLT5uZXh0KCkpCiAgICAgICAgIGJsb2NrLT5zd2VlcCgpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMTIwNDc4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGJvb2wgY2hlY2tTeW50
YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUqIHJl
dHVybmVkRXhjZXB0aW9uKQogewotICAgIEpTTG9jayBsb2NrKGV4ZWMpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuaWRlbnRpZmll
clRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwogCiAg
ICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRl
KGV4ZWMsIHNvdXJjZSk7CkBAIC01Myw3ICs1Myw3IEBAIGJvb2wgY2hlY2tTeW50YXgoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCAKIAogSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBKU1ZhbHVlKiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKLSAgICBKU0xvY2sg
bG9jayhleGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBBU1NFUlQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVu
dElkZW50aWZpZXJUYWJsZSgpKTsKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmlzQ29sbGVj
dG9yQnVzeSgpKQogICAgICAgICBDUkFTSCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwCShyZXZpc2lvbiAxMjA0
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMSArNTAsMTUgQEAgdm9pZCBEZWZhdWx0R0NBY3Rp
dml0eUNhbGxiYWNrOjp3aWxsQ29sbAogewogfQogCi12b2lkIERlZmF1bHRHQ0FjdGl2aXR5Q2Fs
bGJhY2s6OnN5bmNocm9uaXplKCkKK3ZvaWQgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6Y2Fu
Y2VsKCkKIHsKIH0KIAotdm9pZCBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjYW5jZWwoKQor
dm9pZCBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjppbnZhbGlkYXRlKCkKK3sKK30KKwordm9p
ZCBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpzaWduYWxBbmRXYWl0Rm9yRXhpdCgpCiB7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFj
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZp
dHlDYWxsYmFjay5oCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCArNDUs
OSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+R0NBY3Rpdml0eUNhbGxiYWNrKCkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIGRpZEFsbG9jYXRlKHNpemVfdCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHdp
bGxDb2xsZWN0KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplKCkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIGNhbmNlbCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIHNpZ25hbEFuZFdhaXRGb3JFeGl0KCkgeyB9CiAgICAgYm9v
bCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2VuYWJsZWQ7IH0KICAgICB2b2lkIHNldEVu
YWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZW5hYmxlZCA9IGVuYWJsZWQ7IH0KIApAQCAtNzAsOCAr
NzEsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQWxsb2NhdGUoc2l6ZV90KTsK
ICAgICB2aXJ0dWFsIHZvaWQgd2lsbENvbGxlY3QoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY2hy
b25pemUoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCk7CisgICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2lnbmFsQW5kV2FpdEZvckV4aXQoKTsKIAog
I2lmIFVTRShDRikKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dDQWN0aXZpdHlDYWxsYmFja0NGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2tDRi5jcHAJKHJldmlzaW9uIDEyMDQ3
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFja0NG
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTIgQEAgc3RydWN0IERlZmF1bHRHQ0Fj
dGl2aXR5Q2FsbGJhY2tQbGF0Zm9ybQogICAgIFJldGFpblB0cjxDRlJ1bkxvb3BSZWY+IHJ1bkxv
b3A7CiAgICAgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IGNvbnRleHQ7CiAgICAgZG91YmxlIGRlbGF5
OworICAgIGJvb2wgc2hvdWxkRGllOworICAgIGJvb2wgaXNBd2FrZTsKKyAgICBib29sIGlzRGVh
ZDsKKyAgICBIZWFwKiBoZWFwOworICAgIE11dGV4IGNhbGxiYWNrRGVhZE11dGV4OworICAgIFRo
cmVhZENvbmRpdGlvbiBjYWxsYmFja0RlYWRDb25kaXRpb247CiB9OwogCiBjb25zdCBkb3VibGUg
Z2NUaW1lU2xpY2VQZXJNQiA9IDAuMDE7IC8vIFBlcmNlbnRhZ2Ugb2YgQ1BVIHRpbWUgd2Ugd2ls
bCBzcGVuZCB0byByZWNsYWltIDEgTUIKQEAgLTYyLDIwICs2OCw3NCBAQCBjb25zdCBDRlRpbWVJ
bnRlcnZhbCBob3VyID0gNjAgKiA2MDsKIAogdm9pZCBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNr
UGxhdGZvcm1EYXRhOjp0aW1lckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJSZWYsIHZvaWQgKmluZm8p
CiB7Ci0gICAgSGVhcCogaGVhcCA9IHN0YXRpY19jYXN0PEhlYXAqPihpbmZvKTsKLSAgICBpZiAo
IWhlYXAtPmFjdGl2aXR5Q2FsbGJhY2soKS0+aXNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsK
KyAgICBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrUGxhdGZvcm1EYXRhKiBkYXRhID0gc3RhdGlj
X2Nhc3Q8RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFja1BsYXRmb3JtRGF0YSo+KGluZm8pOworICAg
IEhlYXAqIGhlYXAgPSBkYXRhLT5oZWFwOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKGRhdGEtPmNhbGxiYWNrRGVhZE11dGV4KTsKKyAgICAgICAgaWYgKGRhdGEtPmlzRGVhZCkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoZGF0YS0+c2hvdWxkRGllKSB7Cisg
ICAgICAgICAgICBoZWFwLT5hY3Rpdml0eUNhbGxiYWNrKCktPmludmFsaWRhdGUoKTsKKyAgICAg
ICAgICAgIGRhdGEtPmNhbGxiYWNrRGVhZENvbmRpdGlvbi5zaWduYWwoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQogCi0gICAgQVBJRW50cnlTaGltIHNoaW0oaGVhcC0+Z2xvYmFs
RGF0YSgpKTsKLSNpZiAhUExBVEZPUk0oSU9TKQotICAgIGRvdWJsZSBzdGFydFRpbWUgPSBXVEY6
Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwotICAgIGlmIChoZWFwLT5pc1BhZ2VkT3V0
KHN0YXJ0VGltZSArIHBhZ2luZ1RpbWVPdXQpKSB7Ci0gICAgICAgIGhlYXAtPmFjdGl2aXR5Q2Fs
bGJhY2soKS0+Y2FuY2VsKCk7Ci0gICAgICAgIGhlYXAtPmluY3JlYXNlTGFzdEdDTGVuZ3RoKHBh
Z2luZ1RpbWVPdXQpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGRhdGEtPmlzQXdha2UgPSB0
cnVlOwogICAgIH0KKworICAgIHsKKyAgICAgICAgQVBJRW50cnlTaGltIHNoaW0oaGVhcC0+Z2xv
YmFsRGF0YSgpKTsKKworICAgICAgICBpZiAoaGVhcC0+YWN0aXZpdHlDYWxsYmFjaygpLT5pc0Vu
YWJsZWQoKSkgeworI2lmICFQTEFURk9STShJT1MpCisgICAgICAgICAgICBkb3VibGUgc3RhcnRU
aW1lID0gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICAgICAgICAgIGlm
IChoZWFwLT5pc1BhZ2VkT3V0KHN0YXJ0VGltZSArIHBhZ2luZ1RpbWVPdXQpKSB7CisgICAgICAg
ICAgICAgICAgaGVhcC0+YWN0aXZpdHlDYWxsYmFjaygpLT5jYW5jZWwoKTsKKyAgICAgICAgICAg
ICAgICBoZWFwLT5pbmNyZWFzZUxhc3RHQ0xlbmd0aChwYWdpbmdUaW1lT3V0KTsKKyAgICAgICAg
ICAgIH0gZWxzZSAKKyAgICAgICAgICAgICAgICBoZWFwLT5jb2xsZWN0QWxsR2FyYmFnZSgpOwor
I2Vsc2UKKyAgICAgICAgICAgIGhlYXAtPmNvbGxlY3RBbGxHYXJiYWdlKCk7CiAjZW5kaWYKLSAg
ICBoZWFwLT5jb2xsZWN0QWxsR2FyYmFnZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgewor
ICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoZGF0YS0+Y2FsbGJhY2tEZWFkTXV0ZXgpOworICAg
ICAgICBkYXRhLT5pc0F3YWtlID0gZmFsc2U7CisgICAgICAgIGlmIChkYXRhLT5zaG91bGREaWUp
IHsKKyAgICAgICAgICAgIGhlYXAtPmFjdGl2aXR5Q2FsbGJhY2soKS0+aW52YWxpZGF0ZSgpOwor
ICAgICAgICAgICAgZGF0YS0+Y2FsbGJhY2tEZWFkQ29uZGl0aW9uLnNpZ25hbCgpOworICAgICAg
ICB9CisgICAgfQorfQorCisvLyBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNhbGxiYWNr
RGVhZE11dGV4IGhlbGQuCit2b2lkIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmludmFsaWRh
dGUoKQoreworICAgIEFTU0VSVChkLT5zaG91bGREaWUpOworICAgIEFTU0VSVCghZC0+aXNEZWFk
KTsKKyAgICBDRlJ1bkxvb3BSZW1vdmVUaW1lcihkLT5ydW5Mb29wLmdldCgpLCBkLT50aW1lci5n
ZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKKyAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRh
dGUoZC0+dGltZXIuZ2V0KCkpOworICAgIGQtPmlzRGVhZCA9IHRydWU7Cit9CisKK3ZvaWQgRGVm
YXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6c2lnbmFsQW5kV2FpdEZvckV4aXQoKQoreworICAgIHVu
c2lnbmVkIGxvY2tzVG9QaWNrVXAgPSBkLT5oZWFwLT5nbG9iYWxEYXRhKCktPmFwaUxvY2soKS5k
cm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoKTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIoZC0+
Y2FsbGJhY2tEZWFkTXV0ZXgpOworICAgIGQtPnNob3VsZERpZSA9IHRydWU7CisgICAgLy8gSWYg
dGhlIGFjdGl2aXR5IGNhbGxiYWNrIGlzIGN1cnJlbnRseSBhd2FrZSwgdGhhdCBtZWFucyB0aGF0
IGl0IGlzIHJ1bm5pbmcgb24gYW5vdGhlciAKKyAgICAvLyB0aHJlYWQuIFdlIG5lZWQgdG8gc2ln
bmFsIGl0IGFuZCB3YWl0IHVudGlsIGl0IGhhcyBpbnZhbGlkYXRlZCBpdHNlbGYuCisgICAgaWYg
KGQtPmlzQXdha2UpIHsKKyAgICAgICAgd2hpbGUgKCFkLT5pc0RlYWQpCisgICAgICAgICAgICBk
LT5jYWxsYmFja0RlYWRDb25kaXRpb24ud2FpdChkLT5jYWxsYmFja0RlYWRNdXRleCk7CisgICAg
Ly8gVGhlIGFjdGl2aXR5IGNhbGxiYWNrIGNvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCBhbnkgdGhy
ZWFkLCBpbmNsdWRpbmcgdGhpcyBvbmUsIHNvIHdlIAorICAgIC8vIG5lZWQgdG8gc2h1dCBpdCBk
b3duIG91cnNlbHZlcy4KKyAgICB9IGVsc2UKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgIGQt
PmhlYXAtPmdsb2JhbERhdGEoKS0+YXBpTG9jaygpLmdyYWJBbGxMb2Nrcyhsb2Nrc1RvUGlja1Vw
KTsKIH0KIAogRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6RGVmYXVsdEdDQWN0aXZpdHlDYWxs
YmFjayhIZWFwKiBoZWFwKQpAQCAtOTAsOCArMTUwLDggQEAgRGVmYXVsdEdDQWN0aXZpdHlDYWxs
YmFjazo6RGVmYXVsdEdDQWN0aQogCiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjp+RGVmYXVs
dEdDQWN0aXZpdHlDYWxsYmFjaygpCiB7Ci0gICAgQ0ZSdW5Mb29wUmVtb3ZlVGltZXIoZC0+cnVu
TG9vcC5nZXQoKSwgZC0+dGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Ci0gICAg
Q0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKGQtPnRpbWVyLmdldCgpKTsKKyAgICBBU1NFUlQoZC0+
aXNEZWFkKTsKKyAgICBpbnZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgRGVmYXVsdEdDQWN0aXZpdHlD
YWxsYmFjazo6Y29tbW9uQ29uc3RydWN0b3IoSGVhcCogaGVhcCwgQ0ZSdW5Mb29wUmVmIHJ1bkxv
b3ApCkBAIC05OSw3ICsxNTksMTEgQEAgdm9pZCBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpj
b21tb25DbwogICAgIGQgPSBhZG9wdFB0cihuZXcgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFja1Bs
YXRmb3JtRGF0YSk7CiAKICAgICBtZW1zZXQoJmQtPmNvbnRleHQsIDAsIHNpemVvZihDRlJ1bkxv
b3BUaW1lckNvbnRleHQpKTsKLSAgICBkLT5jb250ZXh0LmluZm8gPSBoZWFwOworICAgIGQtPmNv
bnRleHQuaW5mbyA9IGQuZ2V0KCk7CisgICAgZC0+aGVhcCA9IGhlYXA7CisgICAgZC0+aXNEZWFk
ID0gZmFsc2U7CisgICAgZC0+c2hvdWxkRGllID0gZmFsc2U7CisgICAgZC0+aXNBd2FrZSA9IGZh
bHNlOwogICAgIGQtPnJ1bkxvb3AgPSBydW5Mb29wOwogICAgIGQtPnRpbWVyLmFkb3B0Q0YoQ0ZS
dW5Mb29wVGltZXJDcmVhdGUoMCwgZGVjYWRlLCBkZWNhZGUsIDAsIDAsIERlZmF1bHRHQ0FjdGl2
aXR5Q2FsbGJhY2tQbGF0Zm9ybURhdGE6OnRpbWVyRGlkRmlyZSwgJmQtPmNvbnRleHQpKTsKICAg
ICBkLT5kZWxheSA9IGRlY2FkZTsKQEAgLTEyNyw3ICsxOTEsNyBAQCB2b2lkIERlZmF1bHRHQ0Fj
dGl2aXR5Q2FsbGJhY2s6OmRpZEFsbG9jCiAgICAgLy8gV2UgcHJldGVuZCBpdCdzIG9uZSBieXRl
IHNvIHRoYXQgd2UgZG9uJ3QgaWdub3JlIHRoaXMgYWxsb2NhdGlvbiBlbnRpcmVseS4KICAgICBp
ZiAoIWJ5dGVzKQogICAgICAgICBieXRlcyA9IDE7Ci0gICAgSGVhcCogaGVhcCA9IHN0YXRpY19j
YXN0PEhlYXAqPihkLT5jb250ZXh0LmluZm8pOworICAgIEhlYXAqIGhlYXAgPSBkLT5oZWFwOwog
ICAgIGRvdWJsZSBnY1RpbWVTbGljZSA9IHN0ZDo6bWluKChzdGF0aWNfY2FzdDxkb3VibGU+KGJ5
dGVzKSAvIE1CKSAqIGdjVGltZVNsaWNlUGVyTUIsIG1heEdDVGltZVNsaWNlKTsKICAgICBkb3Vi
bGUgbmV3RGVsYXkgPSBoZWFwLT5sYXN0R0NMZW5ndGgoKSAvIGdjVGltZVNsaWNlOwogICAgIHNj
aGVkdWxlVGltZXIoZC5nZXQoKSwgbmV3RGVsYXkpOwpAQCAtMTM4LDE1ICsyMDIsNiBAQCB2b2lk
IERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OndpbGxDb2xsCiAgICAgY2FuY2VsVGltZXIoZC5n
ZXQoKSk7CiB9CiAKLXZvaWQgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6c3luY2hyb25pemUo
KQotewotICAgIGlmIChDRlJ1bkxvb3BHZXRDdXJyZW50KCkgPT0gZC0+cnVuTG9vcC5nZXQoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIENGUnVuTG9vcFJlbW92ZVRpbWVyKGQtPnJ1bkxvb3AuZ2V0
KCksIGQtPnRpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwotICAgIGQtPnJ1bkxv
b3AgPSBDRlJ1bkxvb3BHZXRDdXJyZW50KCk7Ci0gICAgQ0ZSdW5Mb29wQWRkVGltZXIoZC0+cnVu
TG9vcC5nZXQoKSwgZC0+dGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Ci19Ci0K
IHZvaWQgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6Y2FuY2VsKCkKIHsKICAgICBjYW5jZWxU
aW1lcihkLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQs
MTAgQEAKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkRlYnVnZ2Vy
QWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRl
ICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNs
dWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCisjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVy
LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIK
ICNpbmNsdWRlICJKU0FQSVZhbHVlV3JhcHBlci5oIgpAQCAtMTgwLDEyICsxODIsOSBAQCBKU0ds
b2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiB7CiAgICAgaW50ZXJwcmV0ZXIg
PSBuZXcgSW50ZXJwcmV0ZXI7CiAKLSAgICBpZiAoaXNTaGFyZWRJbnN0YW5jZSgpKQotICAgICAg
ICB0dXJuT2ZmVmVyaWZpZXIoKTsKLQogICAgIC8vIE5lZWQgdG8gYmUgY2FyZWZ1bCB0byBrZWVw
IGV2ZXJ5dGhpbmcgY29uc2lzdGVudCBoZXJlCisgICAgSlNMb2NrSG9sZGVyIGxvY2sodGhpcyk7
CiAgICAgSWRlbnRpZmllclRhYmxlKiBleGlzdGluZ0VudHJ5SWRlbnRpZmllclRhYmxlID0gd3Rm
VGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoaWRlbnRpZmllclRhYmxlKTsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIHN0cnVjdHVyZVN0
cnVjdHVyZS5zZXQoKnRoaXMsIFN0cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzKSk7CiAg
ICAgZGVidWdnZXJBY3RpdmF0aW9uU3RydWN0dXJlLnNldCgqdGhpcywgRGVidWdnZXJBY3RpdmF0
aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgYWN0aXZhdGlv
blN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlz
LCAwLCBqc051bGwoKSkpOwpAQCAtMjI0LDYgKzIyMywxMSBAQCBKU0dsb2JhbERhdGE6OkpTR2xv
YmFsRGF0YShHbG9iYWxEYXRhVHlwCiAKIEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCiB7
CisgICAgQVNTRVJUKG1fYXBpTG9jay5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKKyAg
ICAvLyBUaGlzIG11c3QgYmUgdGhlIHZlcnkgZmlyc3QgdGhpbmcgd2UgZG8gYmVmb3JlIHRlYXJp
bmcgZG93biBhbnkgbW9yZSBvZiB0aGlzIG9iamVjdAorICAgIC8vIGJlY2F1c2UgdGhlIEhlYXAn
cyBHQ0FjdGl2aXR5Q2FsbGJhY2sgY291bGQgcnVuIGFub3RoZXIgR0Mgb24gYSByZW1vdGUgdGhy
ZWFkLgorICAgIGhlYXAuYWN0aXZpdHlDYWxsYmFjaygpLT5zaWduYWxBbmRXYWl0Rm9yRXhpdCgp
OworICAgIGhlYXAuc3dlZXBlcigpLT5zaWduYWxBbmRXYWl0Rm9yRXhpdCgpOwogICAgIGhlYXAu
bGFzdENoYW5jZVRvRmluYWxpemUoKTsKIAogICAgIGRlbGV0ZSBpbnRlcnByZXRlcjsKQEAgLTMx
Myw2ICszMTcsNyBAQCBib29sIEpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2VFeGlzdHMoCiAK
IEpTR2xvYmFsRGF0YSYgSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5jZSgpCiB7CisgICAgR2xv
YmFsSlNMb2NrIGdsb2JhbExvY2s7CiAgICAgSlNHbG9iYWxEYXRhKiYgaW5zdGFuY2UgPSBzaGFy
ZWRJbnN0YW5jZUludGVybmFsKCk7CiAgICAgaWYgKCFpbnN0YW5jZSkgewogICAgICAgICBpbnN0
YW5jZSA9IGFkb3B0UmVmKG5ldyBKU0dsb2JhbERhdGEoQVBJU2hhcmVkLCBUaHJlYWRTdGFja1R5
cGVTbWFsbCwgU21hbGxIZWFwKSkubGVha1JlZigpOwpAQCAtMzIzLDcgKzMyOCw2IEBAIEpTR2xv
YmFsRGF0YSYgSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW4KIAogSlNHbG9iYWxEYXRhKiYgSlNH
bG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5jZUludGVybmFsKCkKIHsKLSAgICBBU1NFUlQoSlNMb2Nr
OjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKICAgICBzdGF0aWMgSlNHbG9iYWxEYXRh
KiBzaGFyZWRJbnN0YW5jZTsKICAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24g
MTIwNDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5j
bHVkZSAiSW50cmluc2ljLmgiCiAjaW5jbHVkZSAiSklUU3R1YnMuaCIKKyNpbmNsdWRlICJKU0xv
Y2suaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5j
bHVkZSAiTnVtZXJpY1N0cmluZ3MuaCIKQEAgLTQ2LDggKzQ3LDggQEAKICNpbmNsdWRlIDx3dGYv
QnVtcFBvaW50ZXJBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvU2ltcGxlU3RhdHMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KICNpbmNsdWRlIDx3dGYvV1RGVGhy
ZWFkRGF0YS5oPgogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKQEAgLTE1Miw3ICsxNTMsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogI2VuZGlmCiAKLSAgICBjbGFzcyBKU0dsb2JhbERh
dGEgOiBwdWJsaWMgUmVmQ291bnRlZDxKU0dsb2JhbERhdGE+IHsKKyAgICBjbGFzcyBKU0dsb2Jh
bERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SlNHbG9iYWxEYXRhPiB7CiAgICAg
cHVibGljOgogICAgICAgICAvLyBXZWJDb3JlIGhhcyBhIG9uZS10by1vbmUgbWFwcGluZyBvZiB0
aHJlYWRzIHRvIEpTR2xvYmFsRGF0YXM7CiAgICAgICAgIC8vIGVpdGhlciBjcmVhdGUoKSBvciBj
cmVhdGVMZWFrZWQoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZQpAQCAtMTgwLDYgKzE4MSwx
MCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIG1ha2VVc2FibGVGcm9tTXVsdGlw
bGVUaHJlYWRzKCkgeyBoZWFwLm1hY2hpbmVUaHJlYWRzKCkubWFrZVVzYWJsZUZyb21NdWx0aXBs
ZVRocmVhZHMoKTsgfQogCisgICAgcHJpdmF0ZToKKyAgICAgICAgSlNMb2NrIG1fYXBpTG9jazsK
KworICAgIHB1YmxpYzoKICAgICAgICAgSGVhcCBoZWFwOyAvLyBUaGUgaGVhcCBpcyBvdXIgZmly
c3QgZGF0YSBtZW1iZXIgdG8gZW5zdXJlIHRoYXQgaXQncyBkZXN0cnVjdGVkIGFmdGVyIGFsbCB0
aGUgb2JqZWN0cyB0aGF0IHJlZmVyZW5jZSBpdC4KIAogICAgICAgICBHbG9iYWxEYXRhVHlwZSBn
bG9iYWxEYXRhVHlwZTsKQEAgLTQwOSw2ICs0MTQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oZmxvYXQ2NCwgRmxvYXQ2NCk7CiAjdW5kZWYg
cmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24KIAorICAgICAgICBKU0xvY2smIGFwaUxvY2soKSB7
IHJldHVybiBtX2FwaUxvY2s7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTIwNDc4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0
YXRpYyBpbmxpbmUgdm9pZAogCiBKU0dsb2JhbE9iamVjdDo6fkpTR2xvYmFsT2JqZWN0KCkKIHsK
LSAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKKyAgICBB
U1NFUlQoZ2xvYmFsRGF0YSgpLmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygp
KTsKIAogICAgIGlmIChtX2RlYnVnZ2VyKQogICAgICAgICBtX2RlYnVnZ2VyLT5kZXRhY2godGhp
cyk7CkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6ZGVzdHJveShKU0Nl
bGwqIGNlbAogCiB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KEpTT2JqZWN0KiB0aGlzVmFsdWUp
CiB7Ci0gICAgQVNTRVJUKEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7Cisg
ICAgQVNTRVJUKGdsb2JhbERhdGEoKS5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xv
Y2soKSk7CiAgICAgCiAgICAgc3RydWN0dXJlKCktPmRpc2FibGVTcGVjaWZpY0Z1bmN0aW9uVHJh
Y2tpbmcoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3Bw
CShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJIZWFw
LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIlNjb3BlQ2hhaW4uaCIKIApAQCAtMzgs
OTQgKzM5LDEyOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiAoT1MoREFSV0lOKSB8fCBVU0UoUFRI
UkVBRFMpKQogCiAvLyBBY3F1aXJlIHRoaXMgbXV0ZXggYmVmb3JlIGFjY2Vzc2luZyBsb2NrLXJl
bGF0ZWQgZGF0YS4KLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgSlNNdXRleCA9IFBUSFJFQURfTVVU
RVhfSU5JVElBTElaRVI7CitzdGF0aWMgcHRocmVhZF9tdXRleF90IGdpYW50R2xvYmFsSlNMb2Nr
ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKIAotLy8gVGhyZWFkLXNwZWNpZmljIGtleSB0
aGF0IHRlbGxzIHdoZXRoZXIgYSB0aHJlYWQgaG9sZHMgdGhlIEpTTXV0ZXgsIGFuZCBob3cgbWFu
eSB0aW1lcyBpdCB3YXMgdGFrZW4gcmVjdXJzaXZlbHkuCi1wdGhyZWFkX2tleV90IEpTTG9ja0Nv
dW50OworR2xvYmFsSlNMb2NrOjpHbG9iYWxKU0xvY2soKQoreworICAgIHB0aHJlYWRfbXV0ZXhf
bG9jaygmZ2lhbnRHbG9iYWxKU0xvY2spOworfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVKU0xvY2tD
b3VudCgpCitHbG9iYWxKU0xvY2s6On5HbG9iYWxKU0xvY2soKQogewotICAgIHB0aHJlYWRfa2V5
X2NyZWF0ZSgmSlNMb2NrQ291bnQsIDApOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnaWFu
dEdsb2JhbEpTTG9jayk7CiB9CiAKLXB0aHJlYWRfb25jZV90IGNyZWF0ZUpTTG9ja0NvdW50T25j
ZSA9IFBUSFJFQURfT05DRV9JTklUOworSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoRXhlY1N0
YXRlKiBleGVjKQorICAgIDogbV9nbG9iYWxEYXRhKCZleGVjLT5nbG9iYWxEYXRhKCkpCit7Cisg
ICAgbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkubG9jaygpOworfQogCi0vLyBMb2NrIG5lc3Rpbmcg
Y291bnQuCi1pbnRwdHJfdCBKU0xvY2s6OmxvY2tDb3VudCgpCitKU0xvY2tIb2xkZXI6OkpTTG9j
a0hvbGRlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCisgICAgOiBtX2dsb2JhbERhdGEoZ2xv
YmFsRGF0YSkKIHsKLSAgICBwdGhyZWFkX29uY2UoJmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3Jl
YXRlSlNMb2NrQ291bnQpOworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKK30K
IAotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGludHB0cl90PihwdGhyZWFkX2dldHNwZWNp
ZmljKEpTTG9ja0NvdW50KSk7CitKU0xvY2tIb2xkZXI6OkpTTG9ja0hvbGRlcihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCisgICAgOiBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCit7CisgICAg
bV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkubG9jaygpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRMb2Nr
Q291bnQoaW50cHRyX3QgY291bnQpCitKU0xvY2tIb2xkZXI6On5KU0xvY2tIb2xkZXIoKQogewot
ICAgIEFTU0VSVChjb3VudCA+PSAwKTsKLSAgICBwdGhyZWFkX3NldHNwZWNpZmljKEpTTG9ja0Nv
dW50LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjb3VudCkpOworICAgIC8vIFdlIG9ubHkgdW5s
b2NrIGlmIHdlIGtub3cgdGhhdCBjbGVhcmluZyB0aGUgZ2xvYmFsIGRhdGEKKyAgICAvLyB3b24n
dCBkZXN0cm95IGl0IGJlY2F1c2Ugd2UgbmVlZCB0byBob2xkIHRoZSBsb2NrIHdoaWxlIAorICAg
IC8vIHdlIGRlc3Ryb3kgYSBKU0dsb2JhbERhdGEuIFRoZSBkZXN0cnVjdG9yIGZvciBKU0dsb2Jh
bERhdGEKKyAgICAvLyB3aWxsIHJlbGVhc2UgdGhlIGxvY2sgZm9yIHVzLgorICAgIGlmIChtX2ds
b2JhbERhdGEtPnJlZkNvdW50KCkgPiAxKQorICAgICAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2so
KS51bmxvY2soKTsKIH0KIAotSlNMb2NrOjpKU0xvY2soRXhlY1N0YXRlKiBleGVjKQotICAgIDog
bV9sb2NrQmVoYXZpb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLmlzU2hhcmVkSW5zdGFuY2UoKSA/IExv
Y2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5KQorSlNMb2NrOjpKU0xvY2soKQorICAg
IDogbV9sb2NrQmVoYXZpb3IoTG9ja0ZvclJlYWwpCisgICAgLCBtX2xvY2tDb3VudCgwKQogewot
ICAgIGxvY2sobV9sb2NrQmVoYXZpb3IpOworICAgIG1fc3BpbkxvY2suSW5pdCgpOwogfQogCi1K
U0xvY2s6OkpTTG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAgOiBtX2xvY2tCZWhh
dmlvcihnbG9iYWxEYXRhLT5pc1NoYXJlZEluc3RhbmNlKCkgPyBMb2NrRm9yUmVhbCA6IFNpbGVu
Y2VBc3NlcnRpb25zT25seSkKK0pTTG9jazo6fkpTTG9jaygpCiB7Ci0gICAgbG9jayhtX2xvY2tC
ZWhhdmlvcik7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOworICAg
IGRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseSgpOwogfQogCi12b2lkIEpTTG9jazo6bG9jayhK
U0xvY2tCZWhhdmlvciBsb2NrQmVoYXZpb3IpCit2b2lkIEpTTG9jazo6bG9jaygpCiB7CiAjaWZk
ZWYgTkRFQlVHCiAgICAgLy8gTG9ja2luZyAibm90IGZvciByZWFsIiBpcyBhIGRlYnVnLW9ubHkg
ZmVhdHVyZS4KLSAgICBpZiAobG9ja0JlaGF2aW9yID09IFNpbGVuY2VBc3NlcnRpb25zT25seSkK
KyAgICBpZiAobV9sb2NrQmVoYXZpb3IgPT0gU2lsZW5jZUFzc2VydGlvbnNPbmx5KQogICAgICAg
ICByZXR1cm47CiAjZW5kaWYKIAotICAgIHB0aHJlYWRfb25jZSgmY3JlYXRlSlNMb2NrQ291bnRP
bmNlLCBjcmVhdGVKU0xvY2tDb3VudCk7Ci0KLSAgICBpbnRwdHJfdCBjdXJyZW50TG9ja0NvdW50
ID0gbG9ja0NvdW50KCk7Ci0gICAgaWYgKCFjdXJyZW50TG9ja0NvdW50ICYmIGxvY2tCZWhhdmlv
ciA9PSBMb2NrRm9yUmVhbCkgewotICAgICAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9tdXRleF9s
b2NrKCZKU011dGV4KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsICFyZXN1bHQpOwor
ICAgIGlmIChtX2xvY2tCZWhhdmlvciA9PSBMb2NrRm9yUmVhbCkgeworICAgICAgICBUaHJlYWRJ
ZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQgPSBXVEY6OmN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAg
eworICAgICAgICAgICAgU3BpbkxvY2tIb2xkZXIgaG9sZGVyKCZtX3NwaW5Mb2NrKTsKKyAgICAg
ICAgICAgIGlmIChtX293bmVyVGhyZWFkID09IGN1cnJlbnRUaHJlYWQgJiYgbV9sb2NrQ291bnQp
IHsKKyAgICAgICAgICAgICAgICBtX2xvY2tDb3VudCsrOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1fbG9jay5sb2NrKCk7CisK
KyAgICAgICAgeworICAgICAgICAgICAgU3BpbkxvY2tIb2xkZXIgaG9sZGVyKCZtX3NwaW5Mb2Nr
KTsKKyAgICAgICAgICAgIG1fb3duZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkOworICAgICAgICAg
ICAgQVNTRVJUKCFtX2xvY2tDb3VudCk7CisgICAgICAgICAgICBtX2xvY2tDb3VudCA9IDE7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBtX293bmVyVGhyZWFkID0gV1RGOjpjdXJy
ZW50VGhyZWFkKCk7CisgICAgICAgIG1fbG9ja0NvdW50Kys7CiAgICAgfQotICAgIHNldExvY2tD
b3VudChjdXJyZW50TG9ja0NvdW50ICsgMSk7CiB9CiAKLXZvaWQgSlNMb2NrOjp1bmxvY2soSlNM
b2NrQmVoYXZpb3IgbG9ja0JlaGF2aW9yKQordm9pZCBKU0xvY2s6OnVubG9jaygpCiB7Ci0gICAg
QVNTRVJUKGxvY2tDb3VudCgpKTsKLQogI2lmZGVmIE5ERUJVRwogICAgIC8vIExvY2tpbmcgIm5v
dCBmb3IgcmVhbCIgaXMgYSBkZWJ1Zy1vbmx5IGZlYXR1cmUuCi0gICAgaWYgKGxvY2tCZWhhdmlv
ciA9PSBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpCisgICAgaWYgKG1fbG9ja0JlaGF2aW9yID09IFNp
bGVuY2VBc3NlcnRpb25zT25seSkKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKLSAgICBpbnRw
dHJfdCBuZXdMb2NrQ291bnQgPSBsb2NrQ291bnQoKSAtIDE7Ci0gICAgc2V0TG9ja0NvdW50KG5l
d0xvY2tDb3VudCk7Ci0gICAgaWYgKCFuZXdMb2NrQ291bnQgJiYgbG9ja0JlaGF2aW9yID09IExv
Y2tGb3JSZWFsKSB7Ci0gICAgICAgIGludCByZXN1bHQgPSBwdGhyZWFkX211dGV4X3VubG9jaygm
SlNNdXRleCk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCAhcmVzdWx0KTsKLSAgICB9
CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOworCisgICAgaWYgKG1f
bG9ja0JlaGF2aW9yID09IExvY2tGb3JSZWFsKSB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGhv
bGRlcigmbV9zcGluTG9jayk7CisgICAgICAgIG1fbG9ja0NvdW50LS07CisgICAgCisgICAgICAg
IGlmICghbV9sb2NrQ291bnQpCisgICAgICAgICAgICBtX2xvY2sudW5sb2NrKCk7CisgICAgfSBl
bHNlCisgICAgICAgIG1fbG9ja0NvdW50LS07CiB9CiAKIHZvaWQgSlNMb2NrOjpsb2NrKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICBsb2NrKGV4ZWMtPmdsb2JhbERhdGEoKS5pc1NoYXJlZEluc3Rh
bmNlKCkgPyBMb2NrRm9yUmVhbCA6IFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgZXhlYy0+
Z2xvYmFsRGF0YSgpLmFwaUxvY2soKS5sb2NrKCk7CiB9CiAKIHZvaWQgSlNMb2NrOjp1bmxvY2so
RXhlY1N0YXRlKiBleGVjKQogewotICAgIHVubG9jayhleGVjLT5nbG9iYWxEYXRhKCkuaXNTaGFy
ZWRJbnN0YW5jZSgpID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IGV4ZWMtPmdsb2JhbERhdGEoKS5hcGlMb2NrKCkudW5sb2NrKCk7CiB9CiAKIGJvb2wgSlNMb2Nr
OjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpCiB7Ci0gICAgcHRocmVhZF9vbmNlKCZjcmVh
dGVKU0xvY2tDb3VudE9uY2UsIGNyZWF0ZUpTTG9ja0NvdW50KTsKLSAgICByZXR1cm4gISFwdGhy
ZWFkX2dldHNwZWNpZmljKEpTTG9ja0NvdW50KTsKKyNpZmRlZiBOREVCVUcKKyAgICByZXR1cm4g
bV9sb2NrQmVoYXZpb3IgPT0gU2lsZW5jZUFzc2VydGlvbnNPbmx5IHx8IChtX2xvY2tDb3VudCAm
JiBtX293bmVyVGhyZWFkID09IFdURjo6Y3VycmVudFRocmVhZCgpKTsKKyNlbHNlCisgICAgcmV0
dXJuIG1fbG9ja0NvdW50ICYmIG1fb3duZXJUaHJlYWQgPT0gV1RGOjpjdXJyZW50VGhyZWFkKCk7
CisjZW5kaWYKIH0KIAogLy8gVGhpcyBpcyBmYWlybHkgbmFzdHkuICBXZSBhbGxvdyBtdWx0aXBs
ZSB0aHJlYWRzIHRvIHJ1biBvbiB0aGUgc2FtZQpAQCAtMTY4LDc0ICsyMDMsNzUgQEAgYm9vbCBK
U0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKAogLy8gb3JkZXIgaW4gd2hpY2ggdGhl
eSB3ZXJlIG1hZGUgLSB0aG91Z2ggaW1wbGVtZW50aW5nIHRoZSBsZXNzIHJlc3RyaWN0aXZlIHBv
bGljeQogLy8gd291bGQgbGlrZWx5IGluY3JlYXNlIGNvbXBsZXhpdHkgYW5kIG92ZXJoZWFkLgog
Ly8KLXN0YXRpYyB1bnNpZ25lZCBsb2NrRHJvcERlcHRoID0gMDsKIAotSlNMb2NrOjpEcm9wQWxs
TG9ja3M6OkRyb3BBbGxMb2NrcyhFeGVjU3RhdGUqIGV4ZWMpCi0gICAgOiBtX2xvY2tCZWhhdmlv
cihleGVjLT5nbG9iYWxEYXRhKCkuaXNTaGFyZWRJbnN0YW5jZSgpID8gTG9ja0ZvclJlYWwgOiBT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpCisvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJl
ciBvZiBsb2NrcyB0aGF0IHdlcmUgZHJvcHBlZC4KK3Vuc2lnbmVkIEpTTG9jazo6ZHJvcEFsbExv
Y2tzKCkKIHsKLSAgICBwdGhyZWFkX29uY2UoJmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRl
SlNMb2NrQ291bnQpOwotCi0gICAgaWYgKGxvY2tEcm9wRGVwdGgrKykgewotICAgICAgICBtX2xv
Y2tDb3VudCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1fbG9ja0Ryb3BE
ZXB0aCsrKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fbG9ja0NvdW50ID0gSlNMb2NrOjps
b2NrQ291bnQoKTsKLSAgICBmb3IgKGludHB0cl90IGkgPSAwOyBpIDwgbV9sb2NrQ291bnQ7IGkr
KykKLSAgICAgICAgSlNMb2NrOjp1bmxvY2sobV9sb2NrQmVoYXZpb3IpOworICAgIHJldHVybiBk
cm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoKTsKIH0KIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6
OkRyb3BBbGxMb2NrcyhKU0xvY2tCZWhhdmlvciBKU0xvY2tCZWhhdmlvcikKLSAgICA6IG1fbG9j
a0JlaGF2aW9yKEpTTG9ja0JlaGF2aW9yKQordW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3NV
bmNvbmRpdGlvbmFsbHkoKQogewotICAgIHB0aHJlYWRfb25jZSgmY3JlYXRlSlNMb2NrQ291bnRP
bmNlLCBjcmVhdGVKU0xvY2tDb3VudCk7Ci0KLSAgICBpZiAobG9ja0Ryb3BEZXB0aCsrKSB7Ci0g
ICAgICAgIG1fbG9ja0NvdW50ID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IEl0IGlzIG5lY2Vzc2FyeSB0byBkcm9wIGV2ZW4gInVucmVhbCIgbG9ja3MsIGJlY2F1c2UgaGF2
aW5nIGEgbm9uLXplcm8gbG9jayBjb3VudAotICAgIC8vIHdpbGwgcHJldmVudCBhIHJlYWwgbG9j
ayBmcm9tIGJlaW5nIHRha2VuLgorICAgIHVuc2lnbmVkIGxvY2tDb3VudCA9IG1fbG9ja0NvdW50
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsb2NrQ291bnQ7IGkrKykKKyAgICAgICAg
dW5sb2NrKCk7CiAKLSAgICBtX2xvY2tDb3VudCA9IEpTTG9jazo6bG9ja0NvdW50KCk7Ci0gICAg
Zm9yIChpbnRwdHJfdCBpID0gMDsgaSA8IG1fbG9ja0NvdW50OyBpKyspCi0gICAgICAgIEpTTG9j
azo6dW5sb2NrKG1fbG9ja0JlaGF2aW9yKTsKKyAgICByZXR1cm4gbG9ja0NvdW50OwogfQogCi1K
U0xvY2s6OkRyb3BBbGxMb2Nrczo6fkRyb3BBbGxMb2NrcygpCit2b2lkIEpTTG9jazo6Z3JhYkFs
bExvY2tzKHVuc2lnbmVkIGxvY2tDb3VudCkKIHsKLSAgICBmb3IgKGludHB0cl90IGkgPSAwOyBp
IDwgbV9sb2NrQ291bnQ7IGkrKykKLSAgICAgICAgSlNMb2NrOjpsb2NrKG1fbG9ja0JlaGF2aW9y
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9ja0NvdW50OyBpKyspCisgICAgICAg
IGxvY2soKTsKIAotICAgIC0tbG9ja0Ryb3BEZXB0aDsKKyAgICBtX2xvY2tEcm9wRGVwdGgtLTsK
IH0KIAotI2Vsc2UgLy8gKE9TKERBUldJTikgfHwgVVNFKFBUSFJFQURTKSkKK0pTTG9jazo6RHJv
cEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoRXhlY1N0YXRlKiBleGVjKQorICAgIDogbV9sb2NrQ291
bnQoMCkKKyAgICAsIG1fbG9ja0JlaGF2aW9yKExvY2tGb3JSZWFsKQorICAgICwgbV9nbG9iYWxE
YXRhKCZleGVjLT5nbG9iYWxEYXRhKCkpCit7CisgICAgbV9sb2NrQ291bnQgPSBtX2dsb2JhbERh
dGEtPmFwaUxvY2soKS5kcm9wQWxsTG9ja3MoKTsKK30KIAotSlNMb2NrOjpKU0xvY2soRXhlY1N0
YXRlKikKLSAgICA6IG1fbG9ja0JlaGF2aW9yKFNpbGVuY2VBc3NlcnRpb25zT25seSkKK0pTTG9j
azo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQor
ICAgIDogbV9sb2NrQ291bnQoMCkKKyAgICAsIG1fbG9ja0JlaGF2aW9yKExvY2tGb3JSZWFsKQor
ICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiB7CisgICAgbV9sb2NrQ291bnQgPSBtX2ds
b2JhbERhdGEtPmFwaUxvY2soKS5kcm9wQWxsTG9ja3MoKTsKIH0KIAotLy8gSWYgdGhyZWFkaW5n
IHN1cHBvcnQgaXMgb2ZmLCBzZXQgdGhlIGxvY2sgY291bnQgdG8gYSBjb25zdGFudCB2YWx1ZSBv
ZiAxIHNvIHNzZXJ0aW9ucwotLy8gdGhhdCB0aGUgbG9jayBpcyBoZWxkIGRvbid0IGZhaWwKLWlu
dHB0cl90IEpTTG9jazo6bG9ja0NvdW50KCkKKy8qCitKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJv
cEFsbExvY2tzKEpTTG9ja0JlaGF2aW9yIEpTTG9ja0JlaGF2aW9yKQorICAgIDogbV9sb2NrQmVo
YXZpb3IoSlNMb2NrQmVoYXZpb3IpCisgICAgLCBtX2dsb2JhbERhdGEoSlNHbG9iYWxEYXRhOjpz
aGFyZWRJbnN0YW5jZSgpKQogewotICAgIHJldHVybiAxOworICAgIC8vIEl0IGlzIG5lY2Vzc2Fy
eSB0byBkcm9wIGV2ZW4gInVucmVhbCIgbG9ja3MsIGJlY2F1c2UgaGF2aW5nIGEgbm9uLXplcm8g
bG9jayBjb3VudAorICAgIC8vIHdpbGwgcHJldmVudCBhIHJlYWwgbG9jayBmcm9tIGJlaW5nIHRh
a2VuLgorICAgIG1fbG9ja0NvdW50ID0gbV9nbG9iYWxEYXRhLmFwaUxvY2soKS5kcm9wQWxsTG9j
a3MoKTsKIH0KKyovCiAKLWJvb2wgSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygp
CitKU0xvY2s6OkRyb3BBbGxMb2Nrczo6fkRyb3BBbGxMb2NrcygpCiB7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZ3JhYkFsbExvY2tzKG1fbG9ja0NvdW50
KTsKIH0KIAotdm9pZCBKU0xvY2s6OmxvY2soSlNMb2NrQmVoYXZpb3IpCisjZWxzZSAvLyAoT1Mo
REFSV0lOKSB8fCBVU0UoUFRIUkVBRFMpKQorCitKU0xvY2s6OkpTTG9jayhFeGVjU3RhdGUqKQor
ICAgIDogbV9sb2NrQmVoYXZpb3IoU2lsZW5jZUFzc2VydGlvbnNPbmx5KQogewogfQogCi12b2lk
IEpTTG9jazo6dW5sb2NrKEpTTG9ja0JlaGF2aW9yKQorYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdMb2NrKCkKIHsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBKU0xvY2s6
OmxvY2soRXhlY1N0YXRlKikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9j
ay5oCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsOSBAQAogCiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RDU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01Myw1MyArNTYsNjQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBlbnVtIEpTTG9ja0JlaGF2aW9yIHsgU2lsZW5jZUFzc2VydGlv
bnNPbmx5LCBMb2NrRm9yUmVhbCB9OwogCisgICAgLy8gVGhpcyBjbGFzcyBzaG91bGQgb25seSBi
ZSB1c2VkIGxvY2FsbHkgd2l0aGluIEFQSSBjYWxscyB0byBkbyBtaXNjZWxsYW5lb3VzIAorICAg
IC8vIG5vbi10aHJlYWQtc2FmZSB0aGluZ3MgbGlrZSBncmFiYmluZyB0aGUgc2hhcmVkIGdsb2Jh
bCBkYXRhLCBldGMuCisgICAgY2xhc3MgR2xvYmFsSlNMb2NrIHsKKyAgICAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoR2xvYmFsSlNMb2NrKTsKKyAgICBwdWJsaWM6CisgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIEdsb2JhbEpTTG9jaygpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+R2xv
YmFsSlNMb2NrKCk7CisgICAgfTsKKworICAgIGNsYXNzIEpTTG9ja0hvbGRlciB7CisgICAgcHVi
bGljOgorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRh
Kik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTTG9ja0hvbGRlcihKU0dsb2JhbERhdGEm
KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNMb2NrSG9sZGVyKEV4ZWNTdGF0ZSopOwor
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5KU0xvY2tIb2xkZXIoKTsKKyAgICBwcml2YXRl
OgorICAgICAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBtX2dsb2JhbERhdGE7CisgICAgfTsKKwog
ICAgIGNsYXNzIEpTTG9jayB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEpTTG9jayk7
CiAgICAgcHVibGljOgotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0xvY2soRXhlY1N0YXRl
Kik7Ci0gICAgICAgIEpTTG9jayhKU0dsb2JhbERhdGEqKTsKKyAgICAgICAgSlNMb2NrKCk7Cisg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5KU0xvY2soKTsKKworICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGxvY2soKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxv
Y2soKTsKIAotICAgICAgICBKU0xvY2soSlNMb2NrQmVoYXZpb3IgbG9ja0JlaGF2aW9yKQotICAg
ICAgICAgICAgOiBtX2xvY2tCZWhhdmlvcihsb2NrQmVoYXZpb3IpCi0gICAgICAgIHsKLSNpZmRl
ZiBOREVCVUcKLSAgICAgICAgICAgIC8vIExvY2tpbmcgIm5vdCBmb3IgcmVhbCIgaXMgYSBkZWJ1
Zy1vbmx5IGZlYXR1cmUuCi0gICAgICAgICAgICBpZiAobG9ja0JlaGF2aW9yID09IFNpbGVuY2VB
c3NlcnRpb25zT25seSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICAgICAg
ICAgIGxvY2sobG9ja0JlaGF2aW9yKTsKLSAgICAgICAgfQotCi0gICAgICAgIH5KU0xvY2soKQot
ICAgICAgICB7IAotI2lmZGVmIE5ERUJVRwotICAgICAgICAgICAgLy8gTG9ja2luZyAibm90IGZv
ciByZWFsIiBpcyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICAgICAgICAgIGlmIChtX2xvY2tC
ZWhhdmlvciA9PSBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotI2VuZGlmCi0gICAgICAgICAgICB1bmxvY2sobV9sb2NrQmVoYXZpb3IpOyAKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgbG9jayhK
U0xvY2tCZWhhdmlvcik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHVu
bG9jayhKU0xvY2tCZWhhdmlvcik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGxvY2soRXhlY1N0YXRl
Kik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHVubG9jayhFeGVjU3RhdGUqKTsKKyAgICAgICAgc3Rh
dGljIHZvaWQgbG9jayhKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgc3RhdGljIHZvaWQgdW5sb2Nr
KEpTR2xvYmFsRGF0YSYpOworCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY3VycmVu
dFRocmVhZElzSG9sZGluZ0xvY2soKTsKIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgaW50cHRyX3QgbG9ja0NvdW50KCk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7CisgICAgICAgIHVuc2lnbmVkIGRy
b3BBbGxMb2NrcygpOworICAgICAgICB1bnNpZ25lZCBkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFs
bHkoKTsKKyAgICAgICAgdm9pZCBncmFiQWxsTG9ja3ModW5zaWduZWQgbG9ja0NvdW50KTsKIAog
ICAgICAgICBKU0xvY2tCZWhhdmlvciBtX2xvY2tCZWhhdmlvcjsKKyAgICAgICAgU3BpbkxvY2sg
bV9zcGluTG9jazsKKyAgICAgICAgTXV0ZXggbV9sb2NrOworICAgICAgICBUaHJlYWRJZGVudGlm
aWVyIG1fb3duZXJUaHJlYWQ7CisgICAgICAgIGludHB0cl90IG1fbG9ja0NvdW50OworICAgICAg
ICB1bnNpZ25lZCBtX2xvY2tEcm9wRGVwdGg7CiAKICAgICAgICAgY2xhc3MgRHJvcEFsbExvY2tz
IHsKICAgICAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERyb3BBbGxMb2Nrcyk7CiAgICAg
ICAgIHB1YmxpYzoKICAgICAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIERyb3BBbGxMb2NrcyhF
eGVjU3RhdGUqIGV4ZWMpOwotICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRHJvcEFsbExv
Y2tzKEpTTG9ja0JlaGF2aW9yKTsKKyAgICAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIERyb3BB
bGxMb2NrcyhKU0dsb2JhbERhdGEqKTsKICAgICAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5E
cm9wQWxsTG9ja3MoKTsKICAgICAgICAgICAgIAogICAgICAgICBwcml2YXRlOgogICAgICAgICAg
ICAgaW50cHRyX3QgbV9sb2NrQ291bnQ7CiAgICAgICAgICAgICBKU0xvY2tCZWhhdmlvciBtX2xv
Y2tCZWhhdmlvcjsKKyAgICAgICAgICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IG1fZ2xvYmFsRGF0
YTsKICAgICAgICAgfTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrR0NNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrR0NNYXAuaAkocmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDggKzc1LDkgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gSGFuZGxlVHlwZXM8TWFwcGVkVHlwZT46OmdldEZyb21T
bG90KGNvbnN0X2Nhc3Q8SlNWYWx1ZSo+KCZpbXBsLT5qc1ZhbHVlKCkpKTsKICAgICB9CiAKLSAg
ICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBjb25zdCBLZXlUeXBlJiBrZXksIEV4dGVybmFsVHlw
ZSB2YWx1ZSkKKyAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEtl
eVR5cGUmIGtleSwgRXh0ZXJuYWxUeXBlIHZhbHVlKQogICAgIHsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xk
aW5nTG9jaygpKTsKICAgICAgICAgdHlwZW5hbWUgTWFwVHlwZTo6QWRkUmVzdWx0IHJlc3VsdCA9
IG1fbWFwLmFkZChrZXksIDApOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQogICAg
ICAgICAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShyZXN1bHQuaXRlcmF0b3ItPnNlY29uZCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA1MTApCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMzcgQEAKKzIwMTItMDYtMTUgIE1hcmsgSGFo
bmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBKU0xvY2sgc2hvdWxk
IGJlIHBlci1KU0dsb2JhbERhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg5MTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBDdXJyZW50IHJlZ3Jlc3Npb24gdGVzdHMgYXJlIHN1
ZmZpY2llbnQuCisKKyAgICAgICAgQ2hhbmdlZCBhbGwgc2l0ZXMgdGhhdCB1c2VkIEpTTG9jayB0
byBpbnN0ZWFkIHVzZSB0aGUgbmV3IEpTTG9ja0hvbGRlcgorICAgICAgICBhbmQgcGFzcyBpbiB0
aGUgY29ycmVjdCBKUyBjb250ZXh0IHRoYXQgdGhlIGNvZGUgaXMgYWJvdXQgdG8gaW50ZXJhY3Qg
d2l0aCB0aGF0IAorICAgICAgICBuZWVkcyBwcm90ZWN0aW9uLgorCisgICAgICAgICogYmluZGlu
Z3MvanMvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdFNvb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5vdyk6CisgICAgICAgIChX
ZWJDb3JlOjpHQ0NvbnRyb2xsZXI6OmRpc2NhcmRBbGxDb21waWxlZENvZGUpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFjay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0N1c3RvbVZvaWRDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYW1lc3BhY2VVUkkpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
RXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVu
dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExpc3Rl
bmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlw
dEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0Ojpu
b2RlQXNTY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0luamVjdGVkU2NyaXB0SG9z
dDo6aW5zcGVjdGVkT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luamVjdGVkU2Ny
aXB0TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6
OmNyZWF0ZUluamVjdGVkU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0
TWFuYWdlcjo6Y2FuQWNjZXNzSW5zcGVjdGVkV2luZG93KToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0xhenlFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2ZW50
TGlzdGVuZXI6OmluaXRpYWxpemVKU0Z1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U01haW5UaHJlYWRFeGVjU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWFpblRocmVhZEV4
ZWNTdGF0ZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTXV0YXRpb25DYWxs
YmFja0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU011dGF0aW9uQ2FsbGJhY2s6Omhh
bmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2Rl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNr
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2Fs
bGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2Fs
bEZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1
YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZVNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1
bmN0aW9ucyk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZUZ1bmN0aW9uSW5Db250ZXh0
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3JpcHRDYWNoZWRGcmFtZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpyZXN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6aW5pdFNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250
cm9sbGVyOjp1cGRhdGVEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9s
bGVyOjpjYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjpiaW5kaW5nUm9vdE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjp3aW5kb3dTY3JpcHROUE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRDb250cm9sbGVyOjpqc09iamVjdEZvclBsdWdpbkVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1Nl
cnZlcjo6ZGlzcGF0Y2hEaWRQYXVzZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RXZl
bnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpldmVudExpc3RlbmVySGFuZGxlckJv
ZHkpOgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnRMaXN0ZW5lckhhbmRsZXJMb2NhdGlvbik6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRGdW5jdGlvbkNhbGw6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDYWxsYmFjazo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdEdsb2JhbE9iamVjdDo6cmVtb3ZlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRW
YWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6Z2V0U3RyaW5nKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6On5Xb3JrZXJTY3JpcHRDb250cm9sbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQp
OgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZGlzYWJsZUV2YWwpOgor
ICAgICAgICAqIGJpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOgorICAgICAgICAoX2Rp
ZEV4ZWN1dGUpOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgY2FsbFdlYlNjcmlwdE1ldGhv
ZDp3aXRoQXJndW1lbnRzOl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgZXZhbHVhdGVX
ZWJTY3JpcHQ6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBzZXRWYWx1ZTpmb3JLZXk6
XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCB2YWx1ZUZvcktleTpdKToKKyAgICAgICAg
KC1bV2ViU2NyaXB0T2JqZWN0IHJlbW92ZVdlYlNjcmlwdEtleTpdKToKKyAgICAgICAgKC1bV2Vi
U2NyaXB0T2JqZWN0IGhhc1dlYlNjcmlwdEtleTpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2Jq
ZWN0IHN0cmluZ1JlcHJlc2VudGF0aW9uXSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCB3
ZWJTY3JpcHRWYWx1ZUF0SW5kZXg6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBzZXRX
ZWJTY3JpcHRWYWx1ZUF0SW5kZXg6dmFsdWU6XSk6CisgICAgICAgICgrW1dlYlNjcmlwdE9iamVj
dCBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6b3JpZ2luUm9vdE9iamVjdDpyb290T2JqZWN0Ol0p
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAg
ICAoR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKiBicmlkZ2UvTlBf
anNvYmplY3QuY3BwOgorICAgICAgICAoX05QTl9JbnZva2VEZWZhdWx0KToKKyAgICAgICAgKF9O
UE5fSW52b2tlKToKKyAgICAgICAgKF9OUE5fRXZhbHVhdGUpOgorICAgICAgICAoX05QTl9HZXRQ
cm9wZXJ0eSk6CisgICAgICAgIChfTlBOX1NldFByb3BlcnR5KToKKyAgICAgICAgKF9OUE5fUmVt
b3ZlUHJvcGVydHkpOgorICAgICAgICAoX05QTl9IYXNQcm9wZXJ0eSk6CisgICAgICAgIChfTlBO
X0hhc01ldGhvZCk6CisgICAgICAgIChfTlBOX0VudW1lcmF0ZSk6CisgICAgICAgIChfTlBOX0Nv
bnN0cnVjdCk6CisgICAgICAgICogYnJpZGdlL2MvY19jbGFzcy5jcHA6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpDQ2xhc3M6On5DQ2xhc3MpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0Ns
YXNzOjptZXRob2RzTmFtZWQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0NsYXNzOjpmaWVs
ZE5hbWVkKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX2luc3RhbmNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKToK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6aW52b2tlTWV0aG9kKToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZCk6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZUNvbnN0cnVjdCk6CisgICAgICAg
IChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMpOgorICAgICAgICAq
IGJyaWRnZS9jL2NfcnVudGltZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDRmllbGQ6
OnZhbHVlRnJvbUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNGaWVsZDo6c2V0
VmFsdWVUb0luc3RhbmNlKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3V0aWxpdHkuY3BwOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9OUFZhcmlhbnQpOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6Y29udmVydE5QVmFyaWFudFRvVmFsdWUpOgorICAgICAgICAqIGJyaWRn
ZS9qbmkvam5pX2pzb2JqZWN0Lm1tOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpjYWxsKToKKyAg
ICAgICAgKEphdmFKU09iamVjdDo6ZXZhbCk6CisgICAgICAgIChKYXZhSlNPYmplY3Q6OmdldE1l
bWJlcik6CisgICAgICAgIChKYXZhSlNPYmplY3Q6OnNldE1lbWJlcik6CisgICAgICAgIChKYXZh
SlNPYmplY3Q6OnJlbW92ZU1lbWJlcik6CisgICAgICAgIChKYXZhSlNPYmplY3Q6OmdldFNsb3Qp
OgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpzZXRTbG90KToKKyAgICAgICAgKEphdmFKU09iamVj
dDo6dG9TdHJpbmcpOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpjb252ZXJ0VmFsdWVUb0pPYmpl
Y3QpOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpjb252ZXJ0Sk9iamVjdFRvVmFsdWUpOgorICAg
ICAgICAqIGJyaWRnZS9qbmkvam5pX29iamMubW06CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpk
aXNwYXRjaEpOSUNhbGwpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2
YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvSlZhbHVlKToK
KyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwOgorICAgICAgICAoSmF2
YUNsYXNzOjpKYXZhQ2xhc3MpOgorICAgICAgICAoSmF2YUNsYXNzOjp+SmF2YUNsYXNzKToKKyAg
ICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwOgorICAgICAgICAoSmF2
YUluc3RhbmNlOjpzdHJpbmdWYWx1ZSk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YU1l
dGhvZEpTQy5jcHA6CisgICAgICAgIChhcHBlbmRDbGFzc05hbWUpOgorICAgICAgICAoSmF2YU1l
dGhvZDo6c2lnbmF0dXJlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlND
Lmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhU3RyaW5nOjpKYXZhU3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFTdHJpbmc6On5KYXZhU3RyaW5nKToKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6OkphdmFTdHJpbmc6OnV0ZjgpOgorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6SmF2YVN0cmluZzo6aW5pdCk6CisgICAgICAgICogYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3Bw
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3Qp
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QpOgor
ICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW06CisgICAgICAgIChPYmpjSW5z
dGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZSk6CisgICAgICAgIChPYmpjSW5z
dGFuY2U6Omludm9rZU9iamNNZXRob2QpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjppbnZva2VE
ZWZhdWx0TWV0aG9kKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6c2V0VmFsdWVPZlVuZGVmaW5l
ZEZpZWxkKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxk
KToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW06CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpPYmpjRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6Ok9iamNGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKToKKyAgICAgICAgKiBicmlk
Z2Uvb2JqYy9vYmpjX3V0aWxpdHkubW06CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0
VmFsdWVUb09iamNWYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0TlNTdHJp
bmdUb1N0cmluZyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0T2JqY1ZhbHVlVG9W
YWx1ZSk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6On5RdEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OlF0SW5zdGFuY2U6OmdldFF0SW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6UXRJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdCk6CisgICAgICAgICogYnJpZGdlL3F0L3F0
X3BpeG1hcHJ1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBJbnN0
YW5jZTo6Y3JlYXRlUGl4bWFwUnVudGltZU9iamVjdCk6CisgICAgICAgICogYnJpZGdlL3F0L3F0
X3J1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9RVmFy
aWFudCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKToK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGFNZXRob2Q6OmNhbGwpOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Y2FsbCk6Cisg
ICAgICAgICogYnJpZGdlL3F0L3F0X3J1bnRpbWVfcXQ0LmNwcDoKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
Y29udmVydFFWYXJpYW50VG9WYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRp
bWVNZXRhTWV0aG9kOjpjYWxsKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZUNv
bm5lY3Rpb25NZXRob2Q6OmNhbGwpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVm
ZmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHQ6
Om1ha2VDYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0OjptYWtlRXZhbENh
bGwpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzdG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6Om5wT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgICogcGx1Z2lu
cy9ibGFja2JlcnJ5L1BsdWdpblZpZXdCbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0V2luZG93
SW5mbyk6CisgICAgICAgICogcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAqIHBsdWdp
bnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtl
eWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAg
ICAqIHBsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgICogcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgICogcGx1Z2lu
cy93aW4vUGx1Z2luVmlld1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpk
aXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlS2V5
Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdCk6Cisg
ICAgICAgICogdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZVRlc3RTdXBwb3J0OjppbmplY3RJbnRlcm5hbHNPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZVRlc3RTdXBwb3J0OjpyZXNldEludGVybmFsc09iamVjdCk6CisgICAgICAgICogeG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJv
dGVjdGlvbik6CisKIDIwMTItMDYtMTUgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNv
bT4KIAogICAgICAgICBbY2hyb21pdW1dIEZpeCBjb21wb3NpdGVkIHNjcm9sbGJhcnMgd2l0aCB0
cmFuc3BhcmVudCB0aHVtYnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0ND
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvR0NDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lkIGNvbGxlY3Qodm9pZCopCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIEpTRE9NV2luZG93Ojpj
b21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwogfQogCkBAIC02
Myw3ICs2Myw3IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdFNvb24oKQogICAg
IC8vIGRvd24gaW50byBXVEYgc28gdGhhdCBtb3JlIHBsYXRmb3JtcyBjYW4gdGFrZSBhZHZhbnRh
Z2Ugb2YgaXQsIHdlIHdpbGwgYmUgCiAgICAgLy8gYWJsZSB0byB1c2UgcmVwb3J0QWJhbmRvbmVk
T2JqZWN0R3JhcGggb24gbW9yZSBwbGF0Zm9ybXMuCiAjaWYgVVNFKENGKQotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBKU0RPTVdpbmRvdzo6Y29tbW9uSlNH
bG9iYWxEYXRhKCktPmhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKTsKICNlbHNlCiAg
ICAgaWYgKCFtX0dDVGltZXIuaXNBY3RpdmUoKSkKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBHQ0Nv
bnRyb2xsZXI6OmdjVGltZXJGaXJlZChUaW1lcjxHQwogCiB2b2lkIEdDQ29udHJvbGxlcjo6Z2Fy
YmFnZUNvbGxlY3ROb3coKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKICAgICBpZiAoIUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5p
c0J1c3koKSkKICAgICAgICAgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFw
LmNvbGxlY3RBbGxHYXJiYWdlKCk7CiB9CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBHQ0NvbnRy
b2xsZXI6OnNldEphdmFTY3JpcHRHYXJiYWdlQwogCiB2b2lkIEdDQ29udHJvbGxlcjo6ZGlzY2Fy
ZEFsbENvbXBpbGVkQ29kZSgpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOwogICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5kZWxl
dGVBbGxDb21waWxlZENvZGUoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2suY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw3ICs0OCw3IEBAIGJvb2wgSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGUKIAog
ICAgIFJlZlB0cjxKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAK
LSAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwog
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCShyZXZpc2lv
biAxMjA0NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxs
YmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBKU0N1c3RvbVZv
aWRDYWxsYmFjazo6aGFuZGxlRXZlbnQoKQogCiAgICAgUmVmUHRyPEpTQ3VzdG9tVm9pZENhbGxi
YWNrPiBwcm90ZWN0KHRoaXMpOwogICAgICAgICAKLSAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3M7CiAgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5j
cHAJKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBT
dHJpbmcgSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hCiB7CiAgICAgQVNTRVJUKG1f
Y3VzdG9tUmVzb2x2ZXIpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCk7CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJv
ckhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXJyb3JIYW5kbGVyLmNwcAkocmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3
IEBAIHZvaWQgSlNFcnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEUKIAogICAgIEVycm9y
RXZlbnQqIGVycm9yRXZlbnQgPSBzdGF0aWNfY2FzdDxFcnJvckV2ZW50Kj4oZXZlbnQpOwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5nbG9iYWxEYXRhKCkpOwogCiAgICAgSlNPYmpl
Y3QqIGpzRnVuY3Rpb24gPSB0aGlzLT5qc0Z1bmN0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
OwogICAgIGlmICghanNGdW5jdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyAr
NTQsNyBAQCBKU1ZhbHVlIEpTRXZlbnQ6OmNsaXBib2FyZERhdGEoRXhlY1N0YXRlCiAKIEpTVmFs
dWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEV2ZW50KiBldmVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgaWYgKCFldmVudCkKICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3
ICs3NSw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHQKICAgICBp
ZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgfHwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNK
U0V4ZWN1dGlvbkZvcmJpZGRlbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPmdsb2JhbERhdGEoKSk7CiAKICAgICBKU09iamVjdCoganNGdW5jdGlv
biA9IHRoaXMtPmpzRnVuY3Rpb24oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgaWYgKCFq
c0Z1bmN0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNj
cmlwdEhvc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTIwNDc4KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIE5vZGUqIEluamVjdGVkU2NyaXB0SG9z
dDo6c2NyaXB0VmFsdWVBc04KIAogU2NyaXB0VmFsdWUgSW5qZWN0ZWRTY3JpcHRIb3N0Ojpub2Rl
QXNTY3JpcHRWYWx1ZShTY3JpcHRTdGF0ZSogc3RhdGUsIE5vZGUqIG5vZGUpCiB7Ci0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhz
dGF0ZSk7CiAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHN0YXRlLT5nbG9iYWxEYXRhKCksIHRvSlMo
c3RhdGUsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoc3RhdGUpLCBub2RlKSk7
CiB9CiAKQEAgLTk1LDcgKzk1LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6aW5z
cGVjdGVkTwogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgU2NyaXB0VmFsdWUgc2NyaXB0VmFsdWUgPSBvYmplY3QtPmdl
dChleGVjKTsKICAgICBpZiAoc2NyaXB0VmFsdWUuaGFzTm9WYWx1ZSgpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHJldmlzaW9uIDEyMDQ3OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNj
cmlwdE9iamVjdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUluamVjdGVkU2NyaXB0KGNv
bnN0IFN0cmluZyYgc291cmNlLCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGludCBpZCkKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHNjcmlwdFN0YXRlKTsKIAogICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IG1ha2VT
b3VyY2Uoc3RyaW5nVG9VU3RyaW5nKHNvdXJjZSkpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0ZS0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKTsKQEAgLTgxLDcgKzgxLDcgQEAgU2NyaXB0T2JqZWN0IEluamVj
dGVkU2NyaXB0TWFuYWdlcjo6Y3JlYQogCiBib29sIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y2Fu
QWNjZXNzSW5zcGVjdGVkV2luZG93KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHNjcmlwdFN0YXRlKTsKICAgICBKU0RPTVdpbmRvdyogaW5zcGVjdGVkV2luZG93ID0gdG9KU0RP
TVdpbmRvdyhzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBpZiAoIWlu
c3BlY3RlZFdpbmRvdykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9u
IDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVu
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgSlNPYmplY3QqIEpTTGF6
eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpegogICAgIGlmIChtX29yaWdpbmFsTm9kZSkgewogICAg
ICAgICBpZiAoIXdyYXBwZXIoKSkgewogICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgJ25vZGUn
IGhhcyBhIEphdmFTY3JpcHQgd3JhcHBlciB0byBtYXJrIHRoZSBldmVudCBsaXN0ZW5lciB3ZSdy
ZSBjcmVhdGluZy4KLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgICAgIC8v
IEZJWE1FOiBTaG91bGQgcGFzcyB0aGUgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhl
IG5vZGUKICAgICAgICAgICAgIHNldFdyYXBwZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc09iamVj
dCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgbV9vcmlnaW5hbE5vZGUpKSk7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNDOjpTY29wZUNoYWluTm9kZSogY2hhaW4sIGNvbnN0IEpTQzo6U291cmNlQ29k
ZSYgc291cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlv
bikKICAgICB7CiAgICAgICAgIEpTTWFpblRocmVhZEV4ZWNTdGF0ZSBjdXJyZW50U3RhdGUoZXhl
Yyk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHJldHVy
biBKU0M6OmV2YWx1YXRlKGV4ZWMsIGNoYWluLCBzb3VyY2UsIHRoaXNWYWx1ZSwgZXhjZXB0aW9u
KTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9u
Q2FsbGJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkpTTXV0YXRpb25DYWxs
YmFjay5oIgogCisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiSlNNdXRh
dGlvblJlY29yZC5oIgogI2luY2x1ZGUgIkpTV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgogI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTUwLDcgKzUxLDcgQEAgYm9vbCBK
U011dGF0aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KE11dAogCiAgICAgUmVmUHRyPEpTTXV0YXRp
b25DYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkocmV2aXNpb24gMTIwNDc4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBKU05vZGVGaWx0ZXJDb25kaXRpb246
OkpTTm9kZUZpbHRlckNvbmRpCiAKIHNob3J0IEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0
Tm9kZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgTm9kZSogZmlsdGVyTm9kZSkgY29uc3QKIHsKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogCiAgICAgaWYgKCFtX2ZpbHRlcikKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0
ZXI6OkZJTFRFUl9BQ0NFUFQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Jl
cXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDcgKzQwLDcgQEAgYm9vbCBKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrOjpo
YQogCiAgICAgUmVmUHRyPEpTUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+IHByb3RlY3Qo
dGhpcyk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAK
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVy
KHRpbWUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxs
RnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFT
Y3JpcHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKIAogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUu
aD4KICNpbmNsdWRlIDxydW50aW1lL0NvbXBsZXRpb24uaD4KQEAgLTEwNiw3ICsxMDcsNyBAQCBK
U1ZhbHVlIEphdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKGNvCiAgICAgaWYgKCFtX2lzVmFs
aWQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUuZXZh
bHVhdGUoc2NyaXB0LCBleGNlcHRpb24pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDEy
MDQ3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIFBhZ2VTY3JpcHRE
ZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuCiAKIHZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVyOjpy
ZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4qKQogewotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAvLyBJZiBKYXZhU2Ny
aXB0IHN0YWNrIGlzIG5vdCBlbXB0eSBwb3N0cG9uZSByZWNvbXBpbGF0aW9uLgogICAgIGlmIChK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmR5bmFtaWNHbG9iYWxPYmplY3QpCiAg
ICAgICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiAxMjA0Nzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRl
KFNjcmlwdEV4ZWMKIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlRnVuY3Rpb25JbkNvbnRl
eHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1fZnVuY3Rpb24pOwot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soY29udGV4dC0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwog
ICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobV9mdW5jdGlvbi5nZXQoKSwgY2Fs
bERhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJh
bWVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDYWNoZWRGcmFtZURhdGEuY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0Q2FjaGVkRnJhbWVE
YXRhOjpTY3JpcHRDYWNoZWRGcmFtZURhdGEoRnJhbWUqIGZyYW1lKQogewotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBTY3JpcHRDb250cm9sbGVy
KiBzY3JpcHRDb250cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOwogICAgIFNjcmlwdENvbnRyb2xs
ZXI6OlNoZWxsTWFwJiB3aW5kb3dTaGVsbHMgPSBzY3JpcHRDb250cm9sbGVyLT5tX3dpbmRvd1No
ZWxsczsKQEAgLTY3LDcgKzY3LDcgQEAgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjp+U2NyaXB0Q2Fj
aGVkRnJhbQogCiB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZShGcmFtZSogZnJh
bWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAog
ICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXIgPSBmcmFtZS0+c2NyaXB0KCk7
CiAgICAgU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXAmIHdpbmRvd1NoZWxscyA9IHNjcmlwdENv
bnRyb2xsZXItPm1fd2luZG93U2hlbGxzOwpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIFNjcmlwdENh
Y2hlZEZyYW1lRGF0YTo6Y2xlYXIoKQogICAgIGlmIChtX3dpbmRvd3MuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwogICAgIG1fd2luZG93cy5jbGVhcigpOwogICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VD
b2xsZWN0U29vbigpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMs
NyArMTMzLDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbgogICAg
IGNvbnN0IFN0cmluZyogc2F2ZWRTb3VyY2VVUkwgPSBtX3NvdXJjZVVSTDsKICAgICBtX3NvdXJj
ZVVSTCA9ICZzb3VyY2VVUkw7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgUmVmUHRyPEZyYW1lPiBw
cm90ZWN0ID0gbV9mcmFtZTsKIApAQCAtMTc3LDcgKzE3Nyw3IEBAIHZvaWQgU2NyaXB0Q29udHJv
bGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCgKICAgICBpZiAobV93aW5kb3dTaGVsbHMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogCiAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93
U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikgewog
ICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnNlY29uZC5nZXQo
KTsKQEAgLTIwOSw3ICsyMDksNyBAQCBKU0RPTVdpbmRvd1NoZWxsKiBTY3JpcHRDb250cm9sbGVy
Ojppbml0CiB7CiAgICAgQVNTRVJUKCFtX3dpbmRvd1NoZWxscy5jb250YWlucyh3b3JsZCkpOwog
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayh3b3JsZC0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEpTRE9NV2luZG93U2hlbGwqIHdp
bmRvd1NoZWxsID0gY3JlYXRlV2luZG93U2hlbGwod29ybGQpOwogCkBAIC0yODQsOSArMjg0LDEw
IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQoKQogICAgIGlmICghbV9m
cmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0g
bV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytp
dGVyKQorICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5i
ZWdpbigpOyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2soaXRlci0+Zmlyc3QtPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIGl0
ZXItPnNlY29uZC0+d2luZG93KCktPnVwZGF0ZURvY3VtZW50KCk7CisgICAgfQogfQogCiB2b2lk
IFNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCkKQEAgLTMwMCw3ICszMDEs
NyBAQCBCaW5kaW5nczo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6CiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgaWYgKCFtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KSB7Ci0gICAg
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAg
ICBtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNy
ZWF0ZSgwLCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogICAgIH0KICAgICByZXR1cm4g
bV9jYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKQEAgLTMxMiw3ICszMTMsNyBAQCBC
aW5kaW5nczo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6CiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgaWYgKCFtX2JpbmRpbmdSb290T2JqZWN0KSB7Ci0gICAgICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBtX2JpbmRpbmdSb290
T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3QocGx1
Z2luV29ybGQoKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9iaW5kaW5nUm9vdE9iamVjdC5nZXQo
KTsKQEAgLTM0OSw5ICszNTAsOSBAQCBOUE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93
U2NyaXB0CiAgICAgICAgIGlmIChjYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNj
cmlwdCkpIHsKICAgICAgICAgICAgIC8vIEphdmFTY3JpcHQgaXMgZW5hYmxlZCwgc28gdGhlcmUg
aXMgYSBKYXZhU2NyaXB0IHdpbmRvdyBvYmplY3QuCiAgICAgICAgICAgICAvLyBSZXR1cm4gYW4g
TlBPYmplY3QgYm91bmQgdG8gdGhlIHdpbmRvdyBvYmplY3QuCi0gICAgICAgICAgICBKU0M6OkpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgICAgICAgICBKU09iamVjdCog
d2luID0gd2luZG93U2hlbGwocGx1Z2luV29ybGQoKSktPndpbmRvdygpOworICAgICAgICAgICAg
SlNET01XaW5kb3cqIHdpbiA9IHdpbmRvd1NoZWxsKHBsdWdpbldvcmxkKCkpLT53aW5kb3coKTsK
ICAgICAgICAgICAgIEFTU0VSVCh3aW4pOworICAgICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayh3aW4tPmdsb2JhbEV4ZWMoKSk7CiAgICAgICAgICAgICBCaW5kaW5nczo6Um9vdE9iamVj
dCogcm9vdCA9IGJpbmRpbmdSb290T2JqZWN0KCk7CiAgICAgICAgICAgICBtX3dpbmRvd1Njcmlw
dE5QT2JqZWN0ID0gX05QTl9DcmVhdGVTY3JpcHRPYmplY3QoMCwgd2luLCByb290KTsKICAgICAg
ICAgfSBlbHNlIHsKQEAgLTM4Myw4ICszODQsOCBAQCBKU09iamVjdCogU2NyaXB0Q29udHJvbGxl
cjo6anNPYmplY3RGb3JQCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ3JlYXRlIGEgSlNP
YmplY3QgYm91bmQgdG8gdGhpcyBlbGVtZW50Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqID0gZ2xvYmFsT2JqZWN0KHBs
dWdpbldvcmxkKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iai0+Z2xvYmFsRXhl
YygpKTsKICAgICAvLyBGSVhNRTogaXMgbm9ybWFsIG9rYXk/IC0gdXNlZCBmb3IgTlAgcGx1Z2lu
cz8KICAgICBKU1ZhbHVlIGpzRWxlbWVudFZhbHVlID0gdG9KUyhnbG9iYWxPYmotPmdsb2JhbEV4
ZWMoKSwgZ2xvYmFsT2JqLCBwbHVnaW4pOwogICAgIGlmICghanNFbGVtZW50VmFsdWUgfHwgIWpz
RWxlbWVudFZhbHVlLmlzT2JqZWN0KCkpCkBAIC00MTgsNyArNDE5LDcgQEAgdm9pZCBTY3JpcHRD
b250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNs
ZWFyU2NyaXB0T2JqZWN0cygpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKIAogICAgIFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
cm9vdE9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcm9vdE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCShy
ZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgV2ViU2NyaXB0
T2JqZWN0KiBTY3JpcHRDb250cm9sbGVyOjp3aW5kbwogICAgICAgICByZXR1cm4gMDsKIAogICAg
IGlmICghbV93aW5kb3dTY3JpcHRPYmplY3QpIHsKLSAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhK
U0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxv
Y2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIEpTQzo6
QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgpOwogICAgICAg
ICBtX3dpbmRvd1NjcmlwdE9iamVjdCA9IFtXZWJTY3JpcHRPYmplY3Qgc2NyaXB0T2JqZWN0Rm9y
SlNPYmplY3Q6dG9SZWYod2luZG93U2hlbGwocGx1Z2luV29ybGQoKSkpIG9yaWdpblJvb3RPYmpl
Y3Q6cm9vdCByb290T2JqZWN0OnJvb3RdOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDEyMDQ3OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRp
c3BhdGNoRGlkUGF1c2UKICAgICB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUtPmlz
VmFsaWQoKSAmJiBnbG9iYWxPYmplY3QtPmluaGVyaXRzKCZKU0RPTUdsb2JhbE9iamVjdDo6c19p
bmZvKSkgewogICAgICAgICAgICAgSlNET01HbG9iYWxPYmplY3QqIGRvbUdsb2JhbE9iamVjdCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soc3RhdGUpOwogICAgICAgICAgICAganNDYWxsRnJhbWUgPSB0b0pTKHN0YXRlLCBk
b21HbG9iYWxPYmplY3QsIG1fY3VycmVudENhbGxGcmFtZS5nZXQoKSk7CiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAganNDYWxsRnJhbWUgPSBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJKHJl
dmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEV2ZW50
TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIFN0cmluZyBldmVu
dExpc3RlbmVySGFuZGxlckJvZHkoRG9jdW1lbnQKICAgICBBU1NFUlQoanNMaXN0ZW5lcik7CiAg
ICAgaWYgKCFqc0xpc3RlbmVyKQogICAgICAgICByZXR1cm4gIiI7Ci0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhqc0xpc3RlbmVy
LT5pc29sYXRlZFdvcmxkKCktPmdsb2JhbERhdGEoKSk7CiAgICAgSlNDOjpKU09iamVjdCoganNG
dW5jdGlvbiA9IGpzTGlzdGVuZXItPmpzRnVuY3Rpb24oZG9jdW1lbnQpOwogICAgIGlmICghanNG
dW5jdGlvbikKICAgICAgICAgcmV0dXJuICIiOwpAQCAtMTEyLDcgKzExMiw3IEBAIGJvb2wgZXZl
bnRMaXN0ZW5lckhhbmRsZXJMb2NhdGlvbihEb2N1bWUKICAgICBBU1NFUlQoanNMaXN0ZW5lcik7
CiAgICAgaWYgKCFqc0xpc3RlbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhqc0xp
c3RlbmVyLT5pc29sYXRlZFdvcmxkKCktPmdsb2JhbERhdGEoKSk7CiAgICAgSlNDOjpKU09iamVj
dCoganNPYmplY3QgPSBqc0xpc3RlbmVyLT5qc0Z1bmN0aW9uKGRvY3VtZW50KTsKICAgICBpZiAo
IWpzT2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHJldmlzaW9uIDEyMDQ3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU4LDE5ICs1OCwxOSBAQCB2b2lkIFNjcmlwdENhbGxBcmd1bWVu
dEhhbmRsZXI6OmFwcGVuZEFyCiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBw
ZW5kQXJndW1lbnQoY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAg
ICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzU3RyaW5nKG1fZXhlYywgYXJndW1lbnQpKTsKIH0KIAog
dm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBKU0M6
OlVTdHJpbmcmIGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5h
cHBlbmQoanNTdHJpbmcobV9leGVjLCBhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxB
cmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IGNoYXIqIGFyZ3VtZW50KQogewot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNTdHJpbmcobV9leGVjLCBV
U3RyaW5nKGFyZ3VtZW50KSkpOwogfQogCkBAIC04MSwzMSArODEsMzEgQEAgdm9pZCBTY3JpcHRD
YWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcgogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhh
bmRsZXI6OmFwcGVuZEFyZ3VtZW50KGxvbmcgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwog
ICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihhcmd1bWVudCkpOwogfQogCiB2b2lkIFNj
cmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGxvbmcgbG9uZyBhcmd1bWVu
dCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKG1fZXhlYyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGFy
Z3VtZW50KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJn
dW1lbnQodW5zaWduZWQgaW50IGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2Fy
Z3VtZW50cy5hcHBlbmQoanNOdW1iZXIoYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBsb25nIGFyZ3VtZW50KQog
ewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIoYXJndW1l
bnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVu
dChpbnQgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1lbnRzLmFwcGVu
ZChqc051bWJlcihhcmd1bWVudCkpOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAgU2NyaXB0VmFs
dWUgU2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxsKGJvbwogewogICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0gbV90aGlzT2JqZWN0LmpzT2JqZWN0KCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAKICAgICBK
U1ZhbHVlIGZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcihtX2V4
ZWMsIHN0cmluZ1RvVVN0cmluZyhtX25hbWUpKSk7CiAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKQEAgLTE2Myw3ICsxNjMsNyBAQCBTY3JpcHRPYmplY3QgU2NyaXB0RnVuY3Rpb25D
YWxsOjpjb25zdHJ1CiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBtX3RoaXNPYmplY3Qu
anNPYmplY3QoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKIAogICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3Rv
ciA9IGFzT2JqZWN0KHRoaXNPYmplY3QtPmdldChtX2V4ZWMsIElkZW50aWZpZXIobV9leGVjLCBz
dHJpbmdUb1VTdHJpbmcobV9uYW1lKSkpKTsKICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24o
KSkgewpAQCAtMjA1LDcgKzIwNSw3IEBAIFNjcmlwdFZhbHVlIFNjcmlwdENhbGxiYWNrOjpjYWxs
KCkKIAogU2NyaXB0VmFsdWUgU2NyaXB0Q2FsbGJhY2s6OmNhbGwoYm9vbCYgaGFkRXhjZXB0aW9u
KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2sobV9leGVjKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxU
eXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobV9mdW5jdGlvbi5qc1ZhbHVlKCksIGNhbGxEYXRh
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcAko
cmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgYm9vbCBoYW5k
bGVFeGNlcHRpb24oU2NyaXB0U3RhdGUqCiAKIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQo
U2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTY3JpcHRP
YmplY3QmIHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogICAgIHNjcmlwdFN0YXRlLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgp
LCBJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwgdmFsdWUuanNPYmplY3QoKSk7CiAgICAg
cmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7CiB9CkBAIC02OSw3ICs2OSw3IEBA
IGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUKICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckZyb250ZW5kSG9zdCogdmFsdWUpCiB7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpOwogICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT5nbG9i
YWxEYXRhKCksIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNjcmlwdFN0YXRl
LCBnbG9iYWxPYmplY3QsIHZhbHVlKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3Jp
cHRTdGF0ZSk7CkBAIC03Nyw3ICs3Nyw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQo
U2NyaXB0U3RhdGUKIAogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluamVjdGVkU2NyaXB0SG9zdCogdmFsdWUp
CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpOwogICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT5n
bG9iYWxEYXRhKCksIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNjcmlwdFN0
YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihz
Y3JpcHRTdGF0ZSk7CkBAIC04Niw3ICs4Niw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0Ojpz
ZXQoU2NyaXB0U3RhdGUKIAogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChTY3JpcHRTdGF0
ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIFNjcmlwdE9iamVjdCYgdmFsdWUpCiB7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gc2NyaXB0U3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2V0KHNjcmlwdFN0YXRlLCBJZGVudGlmaWVyKHNjcmlw
dFN0YXRlLCBuYW1lKSk7CiAgICAgaWYgKCFqc1ZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xMDAsNyArMTAwLDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChTY3JpcHRT
dGF0ZQogCiBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6cmVtb3ZlKFNjcmlwdFN0YXRlKiBzY3Jp
cHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBz
Y3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQ
cm9wZXJ0eShzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzY3JpcHRTdGF0ZSwg
SWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSkpOwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRp
b24oc2NyaXB0U3RhdGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIGJv
b2wgU2NyaXB0VmFsdWU6OmdldFN0cmluZyhTY3JpcHRTdGF0ZSoKIHsKICAgICBpZiAoIW1fdmFs
dWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBVU3Ry
aW5nIHVzdHJpbmc7CiAgICAgaWYgKCFtX3ZhbHVlLmdldCgpLmdldFN0cmluZyhzY3JpcHRTdGF0
ZSwgdXN0cmluZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRD
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBXb3JrZXJTY3Jp
cHRDb250cm9sbGVyOjpXb3JrZXJTY3JpcHRDb250CiAKIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6
On5Xb3JrZXJTY3JpcHRDb250cm9sbGVyKCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEoKSk7CiAgICAg
bV93b3JrZXJDb250ZXh0V3JhcHBlci5jbGVhcigpOwogICAgIG1fZ2xvYmFsRGF0YS5jbGVhcigp
OwogfQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmluaXRT
Y3JpcHQoCiB7CiAgICAgQVNTRVJUKCFtX3dvcmtlckNvbnRleHRXcmFwcGVyKTsKIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
bV9nbG9iYWxEYXRhLmdldCgpKTsKIAogICAgIC8vIEV4cGxpY2l0bHkgcHJvdGVjdCB0aGUgZ2xv
YmFsIG9iamVjdCdzIHByb3RvdHlwZSBzbyBpdCBpc24ndCBjb2xsZWN0ZWQKICAgICAvLyB3aGVu
IHdlIGFsbG9jYXRlIHRoZSBnbG9iYWwgb2JqZWN0LiAoT25jZSB0aGUgZ2xvYmFsIG9iamVjdCBp
cyBmdWxseQpAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6
ZXZhbHVhdGUoY28KICAgICBTY3JpcHRWYWx1ZSBleGNlcHRpb247CiAgICAgZXZhbHVhdGUoc291
cmNlQ29kZSwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbi5qc1ZhbHVlKCkpIHsKLSAg
ICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZ2xvYmFsRGF0YSgpKTsKICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fd29y
a2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMoKSwgZXhjZXB0aW9uLmpzVmFsdWUoKSk7CiAg
ICAgfQogfQpAQCAtMTI4LDkgKzEyOCw5IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6
ZXZhbHVhdGUoY28KICAgICAgICAgcmV0dXJuOwogCiAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2Jh
bERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwogCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9v
bCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppc0V4ZWN1dGlvbgogdm9pZCBXb3JrZXJTY3JpcHRD
b250cm9sbGVyOjpkaXNhYmxlRXZhbCgpCiB7CiAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7Ci0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhnbG9iYWxEYXRhKCkpOwogCiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+c2V0RXZh
bEVuYWJsZWQoZmFsc2UpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9X
ZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
b2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjIsMTMgKzEyMiwxMiBAQCArIChpZClzY3JpcHRPYmplY3RGb3JKU09iamVjdDooSlNPYmplY3RS
CiAKIHN0YXRpYyB2b2lkIF9kaWRFeGVjdXRlKFdlYlNjcmlwdE9iamVjdCAqb2JqKQogewotICAg
IEFTU0VSVChKU0xvY2s6OmxvY2tDb3VudCgpID4gMCk7Ci0gICAgCiAgICAgUm9vdE9iamVjdCog
cm9vdCA9IFtvYmogX3Jvb3RPYmplY3RdOwogICAgIGlmICghcm9vdCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKTsKKyAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmFwaUxvY2soKS5jdXJyZW50VGhy
ZWFkSXNIb2xkaW5nTG9jaygpKTsKICAgICBLSlNEaWRFeGVjdXRlRnVuY3Rpb25QdHIgZnVuYyA9
IEluc3RhbmNlOjpkaWRFeGVjdXRlRnVuY3Rpb24oKTsKICAgICBpZiAoZnVuYykKICAgICAgICAg
ZnVuYyhleGVjLCByb290LT5nbG9iYWxPYmplY3QoKSk7CkBAIC0yODEsMTAgKzI4MCw5IEBAIC0g
KGlkKWNhbGxXZWJTY3JpcHRNZXRob2Q6KE5TU3RyaW5nICopbmEKICAgICBpZiAoIVtzZWxmIF9p
c1NhZmVTY3JpcHRdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAKICAgICAvLyBMb29rIHVwIHRoZSBmdW5jdGlvbiBv
YmplY3QuCiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9
IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBzdHJpbmdUb1VTdHJpbmco
U3RyaW5nKG5hbWUpKSkpOwpAQCAtMzI1LDcgKzMyMyw3IEBAIC0gKGlkKWV2YWx1YXRlV2ViU2Ny
aXB0OihOU1N0cmluZyAqKXNjcmkKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9i
amVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5o
YWRFeGNlcHRpb24oKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAogICAgIFtzZWxmIF9yb290T2Jq
ZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgp
OwogICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1
YXRlKGV4ZWMsIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3Bl
Q2hhaW4oKSwgbWFrZVNvdXJjZShTdHJpbmcoc2NyaXB0KSksIEpTQzo6SlNWYWx1ZSgpLCAwKTsK
QEAgLTM0Niw3ICszNDQsNyBAQCAtICh2b2lkKXNldFZhbHVlOihpZCl2YWx1ZSBmb3JLZXk6KE5T
U3RyCiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwog
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIFtzZWxmIF9p
bXBdLT5tZXRob2RUYWJsZSgpLT5wdXQoW3NlbGYgX2ltcF0sIGV4ZWMsIElkZW50aWZpZXIoZXhl
Yywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhrZXkpKSksIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVl
KGV4ZWMsICZ2YWx1ZSwgT2JqY09iamVjdFR5cGUsIFtzZWxmIF9yb290T2JqZWN0XSksIHNsb3Qp
OwpAQCAtMzcyLDcgKzM3MCw3IEBAIC0gKGlkKXZhbHVlRm9yS2V5OihOU1N0cmluZyAqKWtleQog
ICAgICAgICAvLyBOZWVkIHRvIHNjb3BlIHRoaXMgbG9jayB0byBlbnN1cmUgdGhhdCB3ZSByZWxl
YXNlIHRoZSBsb2NrIGJlZm9yZSBjYWxsaW5nCiAgICAgICAgIC8vIFtzdXBlciB2YWx1ZUZvcktl
eTprZXldIHdoaWNoIG1pZ2h0IHRocm93IGFuIGV4Y2VwdGlvbiBhbmQgYnlwYXNzIHRoZSBKU0xv
Y2sgZGVzdHJ1Y3RvciwKICAgICAgICAgLy8gbGVhdmluZyB0aGUgbG9jayBwZXJtYW5lbnRseSBo
ZWxkCi0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAKICAgICAgICAgSlNWYWx1ZSByZXN1
bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3Ry
aW5nKFN0cmluZyhrZXkpKSkpOwogICAgICAgICAKQEAgLTM4OCw3ICszODYsNyBAQCAtIChpZCl2
YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkKICAgICBpZiAoW3Jlc3VsdE9iaiBpc0tpbmRPZkNs
YXNzOltXZWJVbmRlZmluZWQgY2xhc3NdXSkKICAgICAgICAgcmVzdWx0T2JqID0gW3N1cGVyIHZh
bHVlRm9yS2V5OmtleV07ICAgIC8vIGRlZmF1bHRzIHRvIHRocm93aW5nIGFuIGV4Y2VwdGlvbgog
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBfZGlkRXhlY3V0ZShzZWxmKTsKICAgICAKICAgICByZXR1cm4g
cmVzdWx0T2JqOwpAQCAtNDAyLDcgKzQwMCw3IEBAIC0gKHZvaWQpcmVtb3ZlV2ViU2NyaXB0S2V5
OihOU1N0cmluZyAqKWsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0t
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNl
cHRpb24oKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgp
LT5kZWxldGVQcm9wZXJ0eShbc2VsZiBfaW1wXSwgZXhlYywgSWRlbnRpZmllcihleGVjLCBzdHJp
bmdUb1VTdHJpbmcoU3RyaW5nKGtleSkpKSk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsKQEAgLTQyMSw3ICs0MTksNyBAQCAtIChCT09MKWhhc1dlYlNjcmlwdEtleTooTlNTdHJp
bmcgKilrZXkKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24o
KSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEJPT0wgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmhhc1By
b3BlcnR5KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhrZXkp
KSkpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC00NDEsOCArNDM5LDgg
QEAgLSAoTlNTdHJpbmcgKilzdHJpbmdSZXByZXNlbnRhdGlvbgogICAgICAgICByZXR1cm4gQCJV
bmRlZmluZWQiOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAog
ICAgIGlkIHJlc3VsdCA9IGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKGV4ZWMsIFtzZWxmIF9pbXBd
LCBPYmpjT2JqZWN0VHlwZSkub2JqZWN0VmFsdWU7CiAKQEAgLTQ2MSw3ICs0NTksNyBAQCAtIChp
ZCl3ZWJTY3JpcHRWYWx1ZUF0SW5kZXg6KHVuc2lnbmVkKWluCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAg
IEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgaW5kZXgpOwogCiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC00ODUsNyArNDgzLDcgQEAgLSAodm9pZClzZXRXZWJT
Y3JpcHRWYWx1ZUF0SW5kZXg6KHVuc2lnbgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9y
b290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQoIWV4
ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgW3NlbGYgX2ltcF0tPm1l
dGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoW3NlbGYgX2ltcF0sIGV4ZWMsIGluZGV4LCBjb252ZXJ0
T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBfcm9v
dE9iamVjdF0pLCBmYWxzZSk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKQEAg
LTUxNSw3ICs1MTMsNyBAQCArIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTVmFsdWUp
CiB7CiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2socm9vdE9iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbERhdGEoKSk7CiAKICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkpT
SFRNTEVsZW1lbnQ6OnNfaW5mbykpIHsKICAgICAgICAgICAgIC8vIFBsdWdpbiBlbGVtZW50cyBj
YWNoZSB0aGUgaW5zdGFuY2UgaW50ZXJuYWxseS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxMjA0Nzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQko
d29ya2luZyBjb3B5KQpAQCAtMjczMyw3ICsyNzMzLDcgQEAgRU5ECiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpXG4iKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcblxuIik7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JGNsYXNzTmFtZT4gcHJv
dGVjdCh0aGlzKTtcblxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpO1xuXG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbERhdGEoKSk7XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzO1xuIik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9O
UF9qc29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pz
b2JqZWN0LmNwcAkocmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL05Q
X2pzb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDcgKzE3Nyw3IEBAIGJvb2wgX05Q
Tl9JbnZva2VEZWZhdWx0KE5QUCwgTlBPYmplY3QqIG8KICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAK
ICAgICAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgICAgICBKU1ZhbHVlIGZ1
bmN0aW9uID0gb2JqLT5pbXA7CkBAIC0yMjUsNyArMjI1LDcgQEAgYm9vbCBfTlBOX0ludm9rZShO
UFAgbnBwLCBOUE9iamVjdCogbywgTgogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RP
YmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgRXhl
Y1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
LSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmotPmlt
cC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygp
KSk7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBDYWxsVHlwZSBjYWxsVHlw
ZSA9IGdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CkBAIC0yNjQsNyArMjY0LDcgQEAg
Ym9vbCBfTlBOX0V2YWx1YXRlKE5QUCBpbnN0YW5jZSwgTlBPYmplYwogICAgICAgICBQbHVnaW5W
aWV3OjprZWVwQWxpdmUoaW5zdGFuY2UpOwogCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgICAgICBTdHJpbmcgc2NyaXB0U3RyaW5nID0gY29udmVydE5QU3RyaW5nVG9VVEYx
NihzKTsKICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmV2YWx1
YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uoc2NyaXB0U3Ry
aW5nKSwgSlNDOjpKU1ZhbHVlKCkpOwpAQCAtMjkwLDcgKzI5MCw3IEBAIGJvb2wgX05QTl9HZXRQ
cm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgSWRlbnRpZmll
clJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwogICAg
ICAgICAKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0OwogICAg
ICAgICBpZiAoaS0+aXNTdHJpbmcoKSkKICAgICAgICAgICAgIHJlc3VsdCA9IG9iai0+aW1wLT5n
ZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsK
QEAgLTMyMiw3ICszMjIsNyBAQCBib29sIF9OUE5fU2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCog
bywgCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVj
ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlm
aWVyUmVwKj4ocHJvcGVydHlOYW1lKTsKIAogICAgICAgICBpZiAoaS0+aXNTdHJpbmcoKSkgewpA
QCAtMzYzLDcgKzM2Myw3IEBAIGJvb2wgX05QTl9SZW1vdmVQcm9wZXJ0eShOUFAsIE5QT2JqZWN0
KiAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
ICAgICBpZiAoaS0+aXNTdHJpbmcoKSkKICAgICAgICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJs
ZSgpLT5kZWxldGVQcm9wZXJ0eShvYmotPmltcCwgZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50
aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKICAgICAgICAgZWxzZQpAQCAtMzg2LDcgKzM4Niw3
IEBAIGJvb2wgX05QTl9IYXNQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKIAogICAgICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
OwogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+
KHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBpZiAoaS0+aXNT
dHJpbmcoKSkgewogICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBvYmotPmltcC0+aGFzUHJvcGVy
dHkoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsK
ICAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CkBAIC00MTgsNyArNDE4LDcgQEAg
Ym9vbCBfTlBOX0hhc01ldGhvZChOUFAsIE5QT2JqZWN0KiBvLCBOUAogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBK
U1ZhbHVlIGZ1bmMgPSBvYmotPmltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlm
aWVyKGV4ZWMsIGktPnN0cmluZygpKSk7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CiAgICAgICAgIHJldHVybiAhZnVuYy5pc1VuZGVmaW5lZCgpOwpAQCAtNDQ3LDcgKzQ0Nyw3IEBA
IGJvb2wgX05QTl9FbnVtZXJhdGUoTlBQLCBOUE9iamVjdCogbywgTlAKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
ICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOwogCiAgICAgICAg
IG9iai0+aW1wLT5tZXRob2RUYWJsZSgpLT5nZXRQcm9wZXJ0eU5hbWVzKG9iai0+aW1wLCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKQEAgLTQ4NCw3ICs0
ODQsNyBAQCBib29sIF9OUE5fQ29uc3RydWN0KE5QUCwgTlBPYmplY3QqIG8sIGNvCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhlIGNvbnN0cnVjdG9yIG9iamVjdC4K
ICAgICAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvciA9IG9iai0+aW1wOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYnJpZGdlL2MvY19jbGFzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YnJpZGdlL2MvY19jbGFzcy5jcHAJKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9jL2NfY2xhc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKICNpbmNsdWRlIDxydW50aW1lL1Njb3BlQ2hhaW4u
aD4KICNpbmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pT
R2xvYmFsT2JqZWN0Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KICNpbmNsdWRlIDxy
dW50aW1lL0pTT2JqZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgpAQCAt
NDcsNyArNDgsNyBAQCBDQ2xhc3M6OkNDbGFzcyhOUENsYXNzKiBhQ2xhc3MpCiAKIENDbGFzczo6
fkNDbGFzcygpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAvLyBGSVhNRTogU2hvdWxkIHdlIGFjcXVpcmUgYSBKU0xvY2sgaGVyZT8KIAogICAgIGRlbGV0
ZUFsbFZhbHVlcyhfbWV0aG9kcyk7CiAgICAgX21ldGhvZHMuY2xlYXIoKTsKQEAgLTkxLDcgKzky
LDcgQEAgTWV0aG9kTGlzdCBDQ2xhc3M6Om1ldGhvZHNOYW1lZChQcm9wZXJ0eQogICAgIGlmIChf
aXNhLT5oYXNNZXRob2QgJiYgX2lzYS0+aGFzTWV0aG9kKG9iaiwgaWRlbnQpKXsKICAgICAgICAg
TWV0aG9kKiBhTWV0aG9kID0gbmV3IENNZXRob2QoaWRlbnQpOyAvLyBkZWxldGVkIGluIHRoZSBD
Q2xhc3MgZGVzdHJ1Y3RvcgogICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soaW5zdC0+
cm9vdE9iamVjdCgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAg
IF9tZXRob2RzLnNldChuYW1lLmltcGwoKSwgYU1ldGhvZCk7CiAgICAgICAgIH0KICAgICAgICAg
bWV0aG9kTGlzdC5hcHBlbmQoYU1ldGhvZCk7CkBAIC0xMTQsNyArMTE1LDcgQEAgRmllbGQqIEND
bGFzczo6ZmllbGROYW1lZChQcm9wZXJ0eU5hbWUgcAogICAgIGlmIChfaXNhLT5oYXNQcm9wZXJ0
eSAmJiBfaXNhLT5oYXNQcm9wZXJ0eShvYmosIGlkZW50KSl7CiAgICAgICAgIGFGaWVsZCA9IG5l
dyBDRmllbGQoaWRlbnQpOyAvLyBkZWxldGVkIGluIHRoZSBDQ2xhc3MgZGVzdHJ1Y3RvcgogICAg
ICAgICB7Ci0gICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soaW5zdC0+cm9vdE9iamVjdCgpLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIF9maWVsZHMuc2V0KG5hbWUuaW1w
bCgpLCBhRmllbGQpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2MvY19pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdl
L2MvY19pbnN0YW5jZS5jcHAJKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9jL2NfaW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZv
aWQgQ0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGUKICAgICAgICAgcmV0dXJuOwog
CiAgICAgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVFcnJvcihleGVjLCBnbG9iYWxFeGNlcHRpb25TdHJpbmcoKSkpOwogICAgIH0KIApAQCAt
MTgyLDcgKzE4Miw3IEBAIEpTVmFsdWUgQ0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXQK
ICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHRWYXJpYW50KTsKIAogICAgIHsKLSAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAg
ICAgQVNTRVJUKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVsbCgpKTsKICAgICAgICAgcmV0
dmFsID0gX29iamVjdC0+X2NsYXNzLT5pbnZva2UoX29iamVjdCwgaWRlbnQsIGNBcmdzLmRhdGEo
KSwgY291bnQsICZyZXN1bHRWYXJpYW50KTsKICAgICAgICAgbW92ZUdsb2JhbEV4Y2VwdGlvblRv
RXhlY1N0YXRlKGV4ZWMpOwpAQCAtMjE3LDcgKzIxNyw3IEBAIEpTVmFsdWUgQ0luc3RhbmNlOjpp
bnZva2VEZWZhdWx0TWV0aG9kKEUKICAgICBOUFZhcmlhbnQgcmVzdWx0VmFyaWFudDsKICAgICBW
T0lEX1RPX05QVkFSSUFOVChyZXN1bHRWYXJpYW50KTsKICAgICB7Ci0gICAgICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAg
ICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7CiAgICAgICAgIEFTU0VS
VChnbG9iYWxFeGNlcHRpb25TdHJpbmcoKS5pc051bGwoKSk7CiAgICAgICAgIHJldHZhbCA9IF9v
YmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdChfb2JqZWN0LCBjQXJncy5kYXRhKCksIGNvdW50
LCAmcmVzdWx0VmFyaWFudCk7CiAgICAgICAgIG1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0
ZShleGVjKTsKQEAgLTI1Niw3ICsyNTYsNyBAQCBKU1ZhbHVlIENJbnN0YW5jZTo6aW52b2tlQ29u
c3RydWN0KEV4ZWNTCiAgICAgTlBWYXJpYW50IHJlc3VsdFZhcmlhbnQ7CiAgICAgVk9JRF9UT19O
UFZBUklBTlQocmVzdWx0VmFyaWFudCk7CiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICBBU1NFUlQoZ2xvYmFs
RXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAgICAgICByZXR2YWwgPSBfb2JqZWN0LT5f
Y2xhc3MtPmNvbnN0cnVjdChfb2JqZWN0LCBjQXJncy5kYXRhKCksIGNvdW50LCAmcmVzdWx0VmFy
aWFudCk7CiAgICAgICAgIG1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKQEAg
LTMxNSw3ICszMTUsNyBAQCB2b2lkIENJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyhFeGVjU3Rh
CiAgICAgTlBJZGVudGlmaWVyKiBpZGVudGlmaWVyczsKIAogICAgIHsKLSAgICAgICAgSlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgQVNT
RVJUKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVsbCgpKTsKICAgICAgICAgYm9vbCBvayA9
IF9vYmplY3QtPl9jbGFzcy0+ZW51bWVyYXRlKF9vYmplY3QsICZpZGVudGlmaWVycywgJmNvdW50
KTsKICAgICAgICAgbW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19ydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw3ICs0OSw3IEBAIEpTVmFsdWUgQ0ZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3QKIAog
ICAgICAgICBib29sIHJlc3VsdDsKICAgICAgICAgewotICAgICAgICAgICAgSlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAg
ICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7CiAgICAgICAgICAgICBy
ZXN1bHQgPSBvYmotPl9jbGFzcy0+Z2V0UHJvcGVydHkob2JqLCBfZmllbGRJZGVudGlmaWVyLCAm
cHJvcGVydHkpOwogICAgICAgICAgICAgQ0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9F
eGVjU3RhdGUoZXhlYyk7CiAgICAgICAgIH0KQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBDRmllbGQ6
OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdAogICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFy
aWFudChleGVjLCBhVmFsdWUsICZ2YXJpYW50KTsKIAogICAgICAgICB7Ci0gICAgICAgICAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAg
ICAgICAgICAgIG9iai0+X2NsYXNzLT5zZXRQcm9wZXJ0eShvYmosIF9maWVsZElkZW50aWZpZXIs
ICZ2YXJpYW50KTsKICAgICAgICAgICAgIENJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRv
RXhlY1N0YXRlKGV4ZWMpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
Yy9jX3V0aWxpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2Nf
dXRpbGl0eS5jcHAJKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9j
L2NfdXRpbGl0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgc3RhdGljIFN0
cmluZyBjb252ZXJ0VVRGOFRvVVRGMTZXaXRoTGF0aQogLy8gVmFyaWFudCB2YWx1ZSBtdXN0IGJl
IHJlbGVhc2VkIHdpdGggTlBSZWxlYXNlVmFyaWFudFZhbHVlKCkKIHZvaWQgY29udmVydFZhbHVl
VG9OUFZhcmlhbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBOUFZhcmlhbnQqIHJl
c3VsdCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7
CiAKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KEV4ZWNT
dGF0ZSogCiAKIEpTVmFsdWUgY29udmVydE5QVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBOUFZhcmlhbnQqIHZhcmlhbnQsIFJvb3RPYmplY3QqIHJvb3RPYmplY3QpCiB7Ci0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAKICAgICBOUFZhcmlhbnRUeXBlIHR5cGUgPSB2YXJpYW50LT50eXBl
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQkocmV2
aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3Qu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI4NCw3ICsyODQsNyBAQCBqb2JqZWN0IEphdmFKU09iamVj
dDo6Y2FsbChqc3RyaW5nIG1ldGhvCiAgICAgCiAgICAgLy8gTG9va3VwIHRoZSBmdW5jdGlvbiBv
YmplY3QuCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAogICAgIElkZW50aWZpZXIgaWRlbnRp
ZmllcihleGVjLCBKYXZhU3RyaW5nKG1ldGhvZE5hbWUpLmltcGwoKSk7CiAgICAgSlNWYWx1ZSBm
dW5jdGlvbiA9IF9pbXAtPmdldChleGVjLCBpZGVudGlmaWVyKTsKQEAgLTMwNywxMiArMzA3LDEy
IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpldmFsKGpzdHJpbmcgc2NyaXAKIHsKICAgICBMT0co
TGl2ZUNvbm5lY3QsICJKYXZhSlNPYmplY3Q6OmV2YWwgc2NyaXB0ID0gJXMiLCBKYXZhU3RyaW5n
KHNjcmlwdCkudXRmOCgpKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7Ci0gICAgCiAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IHRoaXMtPnJvb3RPYmplY3Qo
KTsKICAgICBpZiAoIXJvb3RPYmplY3QpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgSlNMb2Nr
SG9sZGVyIGxvY2socm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7Cisg
ICAgCiAgICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKS50aW1lb3V0
Q2hlY2tlci5zdGFydCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpldmFsdWF0ZShyb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCByb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKEphdmFTdHJpbmcoc2NyaXB0
KS5pbXBsKCkpKTsKICAgICByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgp
LnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKQEAgLTMzMCw3ICszMzAsNyBAQCBqb2JqZWN0IEphdmFK
U09iamVjdDo6Z2V0TWVtYmVyKGpzdHJpbmcgCiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBfaW1wLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBK
YXZhU3RyaW5nKG1lbWJlck5hbWUpLmltcGwoKSkpOwogCiAgICAgcmV0dXJuIGNvbnZlcnRWYWx1
ZVRvSk9iamVjdChyZXN1bHQpOwpAQCAtMzQ2LDcgKzM0Niw3IEBAIHZvaWQgSmF2YUpTT2JqZWN0
OjpzZXRNZW1iZXIoanN0cmluZyBtZW0KIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90OwogICAgIF9pbXAtPm1ldGhvZFRhYmxlKCktPnB1dChfaW1wLCBl
eGVjLCBJZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVtYmVyTmFtZSkuaW1wbCgpKSwgY29u
dmVydEpPYmplY3RUb1ZhbHVlKGV4ZWMsIHZhbHVlKSwgc2xvdCk7CiB9CkBAIC0zNjEsNyArMzYx
LDcgQEAgdm9pZCBKYXZhSlNPYmplY3Q6OnJlbW92ZU1lbWJlcihqc3RyaW5nIAogICAgICAgICBy
ZXR1cm47CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgX2ltcC0+bWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkoX2ltcCwgZXhlYywgSWRlbnRpZmllcihleGVjLCBKYXZhU3RyaW5nKG1l
bWJlck5hbWUpLmltcGwoKSkpOwogfQogCkBAIC0zNzYsNyArMzc2LDcgQEAgam9iamVjdCBKYXZh
SlNPYmplY3Q6OmdldFNsb3QoamludCBpbmRleAogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBfaW1wLT5nZXQoZXhlYywgaW5kZXgpOwogCiAgICAgcmV0dXJu
IGNvbnZlcnRWYWx1ZVRvSk9iamVjdChyZXN1bHQpOwpAQCAtMzkyLDcgKzM5Miw3IEBAIHZvaWQg
SmF2YUpTT2JqZWN0OjpzZXRTbG90KGppbnQgaW5kZXgsIGoKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIF9pbXAtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgo
X2ltcCwgZXhlYywgKHVuc2lnbmVkKWluZGV4LCBjb252ZXJ0Sk9iamVjdFRvVmFsdWUoZXhlYywg
dmFsdWUpLCBmYWxzZSk7CiB9CiAKQEAgLTQwNSw5ICs0MDUsOSBAQCBqc3RyaW5nIEphdmFKU09i
amVjdDo6dG9TdHJpbmcoKSBjb25zdAogICAgIGlmICghcm9vdE9iamVjdCkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpT
T2JqZWN0ICp0aGlzT2JqID0gY29uc3RfY2FzdDxKU09iamVjdCo+KF9pbXApOwogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGpzdHJpbmc+KGNvbnZlcnRWYWx1ZVRvSlZhbHVlKGV4ZWMsIHJvb3RPYmplY3QsIHRoaXNPYmos
IEphdmFUeXBlT2JqZWN0LCAiamF2YS5sYW5nLlN0cmluZyIpLmwpOwogfQpAQCAtNDYzLDEzICs0
NjMsMTMgQEAgamxvbmcgSmF2YUpTT2JqZWN0OjpjcmVhdGVOYXRpdmUoamxvbmcgbgogCiBqb2Jq
ZWN0IEphdmFKU09iamVjdDo6Y29udmVydFZhbHVlVG9KT2JqZWN0KEpTVmFsdWUgdmFsdWUpIGNv
bnN0CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAKICAg
ICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gdGhpcy0+cm9vdE9iamVjdCgpOwogICAgIGlmICgh
cm9vdE9iamVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICAKICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpOSUVudiAqZW52ID0gZ2V0Sk5JRW52KCk7CiAgICAg
am9iamVjdCByZXN1bHQgPSAwOwogICAgIApAQCAtNTU0LDcgKzU1NCw3IEBAIEpTVmFsdWUgSmF2
YUpTT2JqZWN0Ojpjb252ZXJ0Sk9iamVjdFRvVmEKICAgICAvLyBmaWd1cmUgMjItNC4KICAgICBq
b2JqZWN0IGNsYXNzT2ZJbnN0YW5jZSA9IGNhbGxKTklNZXRob2Q8am9iamVjdD4odGhlT2JqZWN0
LCAiZ2V0Q2xhc3MiLCAiKClMamF2YS9sYW5nL0NsYXNzOyIpOwogICAgIGlmICghY2xhc3NPZklu
c3RhbmNlKSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICByZXR1cm4gSmF2YUluc3Rh
bmNlOjpjcmVhdGUodGhlT2JqZWN0LCBfcm9vdE9iamVjdCktPmNyZWF0ZVJ1bnRpbWVPYmplY3Qo
ZXhlYyk7CiAgICAgfQogCkBAIC01NjMsNyArNTYzLDcgQEAgSlNWYWx1ZSBKYXZhSlNPYmplY3Q6
OmNvbnZlcnRKT2JqZWN0VG9WYQogICAgIC8vIHBvaW50ZXIgYW5kIHN0b3JlcyBpdCBpbiB0aGlz
IG9iamVjdCwgc28gdGhhdCBpdCBjYW4gYmUgcmV0cmlldmVkIGJlbG93LgogICAgIGpzdHJpbmcg
Y2xhc3NOYW1lID0gKGpzdHJpbmcpY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihjbGFzc09mSW5zdGFu
Y2UsICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7Iik7CiAgICAgaWYgKCFjbGFzc05h
bWUgfHwgKHN0cmNtcChKYXZhU3RyaW5nKGNsYXNzTmFtZSkudXRmOCgpLCAic3VuLnBsdWdpbi5q
YXZhc2NyaXB0LndlYmtpdC5KU09iamVjdCIpICE9IDApKSB7Ci0gICAgICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogICAgICAgICByZXR1cm4gSmF2YUluc3RhbmNlOjpjcmVhdGUodGhlT2JqZWN0LCBfcm9vdE9i
amVjdCktPmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYyk7CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvam5pL2puaV9vYmpjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvam5pX29iamMubW0JKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9qbmkvam5pX29iamMubW0JKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYy
LDcgQEAgYm9vbCBKU0M6OkJpbmRpbmdzOjpkaXNwYXRjaEpOSUNhbGwoRXhlYwogICAgICAgICAv
LyBpbXBsZW1lbnRlZCBpbiBXZWJDb3JlIHdpbGwgZ3VhcmFudGVlIHRoYXQgb25seSBhcHByb3By
aWF0ZSBKYXZhU2NyaXB0CiAgICAgICAgIC8vIGNhbiByZWZlcmVuY2UgdGhlIGFwcGxldC4KICAg
ICAgICAgewotICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKGV4ZWMpOwogICAgICAgICAgICAgcmVzdWx0ID0gW3ZpZXcgd2ViUGx1Z0luQ2Fs
bEphdmE6b2JqIGlzU3RhdGljOmlzU3RhdGljIHJldHVyblR5cGU6cmV0dXJuVHlwZSBtZXRob2Q6
bWV0aG9kSUQgYXJndW1lbnRzOmFyZ3MgY2FsbGluZ1VSTDpuaWwgZXhjZXB0aW9uRGVzY3JpcHRp
b246Jl9leGNlcHRpb25EZXNjcmlwdGlvbl07CiAgICAgICAgIH0KIApAQCAtNzIsNyArNzIsNyBA
QCBib29sIEpTQzo6QmluZGluZ3M6OmRpc3BhdGNoSk5JQ2FsbChFeGVjCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICBlbHNlIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHdlYlBsdWdJbkNhbGxKYXZhOm1ldGhvZDpyZXR1cm5UeXBlOmFyZ3VtZW50czopXSkg
ewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4
ZWMpOwogICAgICAgICByZXN1bHQgPSBbdmlldyB3ZWJQbHVnSW5DYWxsSmF2YTpvYmogbWV0aG9k
Om1ldGhvZElEIHJldHVyblR5cGU6cmV0dXJuVHlwZSBhcmd1bWVudHM6YXJnc107CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNj
L0pOSVV0aWxpdHlQcml2YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHAJKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc0LDcgKzE3NCw3IEBAIHN0YXRpYyBqb2JqZWN0IGNvbnZlcnRBcnJheUlu
c3RhbmNlVG9KYXYKIAoganZhbHVlIGNvbnZlcnRWYWx1ZVRvSlZhbHVlKEV4ZWNTdGF0ZSogZXhl
YywgUm9vdE9iamVjdCogcm9vdE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgSmF2YVR5cGUgamF2YVR5
cGUsIGNvbnN0IGNoYXIqIGphdmFDbGFzc05hbWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIGp2
YWx1ZSByZXN1bHQ7CiAgICAgbWVtc2V0KCZyZXN1bHQsIDAsIHNpemVvZihqdmFsdWUpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAko
cmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNs
YXNzSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBKYXZhQ2xhc3M6Okph
dmFDbGFzcyhqb2JqZWN0IGFuSW5zdGFuY2UpCiAgICAgICAgICAgICBqb2JqZWN0IGFKRmllbGQg
PSBlbnYtPkdldE9iamVjdEFycmF5RWxlbWVudCgoam9iamVjdEFycmF5KWZpZWxkcywgaSk7CiAg
ICAgICAgICAgICBKYXZhRmllbGQqIGFGaWVsZCA9IG5ldyBKYXZhRmllbGQoZW52LCBhSkZpZWxk
KTsgLy8gZGVsZXRlZCBpbiB0aGUgSmF2YUNsYXNzIGRlc3RydWN0b3IKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYWNxdWlyZSBhIEpTTG9jayBoZXJlPwog
ICAgICAgICAgICAgICAgIG1fZmllbGRzLnNldChhRmllbGQtPm5hbWUoKS5pbXBsKCksIGFGaWVs
ZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGFKRmll
bGQpOwpAQCAtNzksNyArNzksNyBAQCBKYXZhQ2xhc3M6OkphdmFDbGFzcyhqb2JqZWN0IGFuSW5z
dGFuY2UpCiAgICAgICAgICAgICBKYXZhTWV0aG9kKiBhTWV0aG9kID0gbmV3IEphdmFNZXRob2Qo
ZW52LCBhSk1ldGhvZCk7IC8vIGRlbGV0ZWQgaW4gdGhlIEphdmFDbGFzcyBkZXN0cnVjdG9yCiAg
ICAgICAgICAgICBNZXRob2RMaXN0KiBtZXRob2RMaXN0OwogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNMb2NrIGhlcmU/CiAKICAgICAg
ICAgICAgICAgICBtZXRob2RMaXN0ID0gbV9tZXRob2RzLmdldChhTWV0aG9kLT5uYW1lKCkuaW1w
bCgpKTsKICAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZExpc3QpIHsKQEAgLTEwMCw3ICsxMDAs
NyBAQCBKYXZhQ2xhc3M6On5KYXZhQ2xhc3MoKQogewogICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8
Y2hhcio+KG1fbmFtZSkpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGFjcXVpcmUgYSBKU0xvY2sgaGVyZT8KIAogICAg
IGRlbGV0ZUFsbFZhbHVlcyhtX2ZpZWxkcyk7CiAgICAgbV9maWVsZHMuY2xlYXIoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNw
cAkocmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2
YUluc3RhbmNlSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBDbGFzcyog
SmF2YUluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0CiAKIEpTVmFsdWUgSmF2YUluc3RhbmNlOjpz
dHJpbmdWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAg
IGpzdHJpbmcgc3RyaW5nVmFsdWUgPSAoanN0cmluZyljYWxsSk5JTWV0aG9kPGpvYmplY3Q+KG1f
aW5zdGFuY2UtPmluc3RhbmNlKCksICJ0b1N0cmluZyIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhTWV0aG9kSlNDLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhTWV0aG9k
SlNDLmNwcAkocmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9q
c2MvSmF2YU1ldGhvZEpTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgSmF2
YU1ldGhvZDo6fkphdmFNZXRob2QoKQogLy8gd2UgZ2V0ICcuJyBiZXR3ZWVuIGNvbXBvbmVudHMg
ZnJvbSB0aGUgcmVmbGVjdGlvbiBBUEkuCiBzdGF0aWMgdm9pZCBhcHBlbmRDbGFzc05hbWUoU3Ry
aW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgY2hhciogY2xhc3NOYW1lKQogewotICAgIEFTU0VS
VChKU0xvY2s6OmxvY2tDb3VudCgpID4gMCk7CisgICAgQVNTRVJUKEpTQzo6SlNHbG9iYWxEYXRh
OjpzaGFyZWRJbnN0YW5jZSgpLmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygp
KTsKIAogICAgIGNoYXIqIGMgPSBmYXN0U3RyRHVwKGNsYXNzTmFtZSk7CiAKQEAgLTExMSw3ICsx
MTEsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRDbGFzc05hbWUoU3RyaW5nQnVpbGRlCiBjb25zdCBj
aGFyKiBKYXZhTWV0aG9kOjpzaWduYXR1cmUoKSBjb25zdAogewogICAgIGlmICghbV9zaWduYXR1
cmUpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAg
ICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNMb2NrIGhlcmU/CiAKICAgICAgICAg
U3RyaW5nQnVpbGRlciBzaWduYXR1cmVCdWlsZGVyOwogICAgICAgICBzaWduYXR1cmVCdWlsZGVy
LmFwcGVuZCgnKCcpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YVN0
cmluZ0pTQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0ph
dmFTdHJpbmdKU0MuaAkocmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdl
L2puaS9qc2MvSmF2YVN0cmluZ0pTQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAjZGVmaW5lIEphdmFTdHJpbmdKU0NfaAogCiAjaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgorI2lu
Y2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgogI2luY2x1ZGUgIkphdmFJbnN0YW5jZUpTQy5oIgog
CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KQEAgLTUyLDIwICs1MywyMCBAQCBwdWJsaWM6
CiAKICAgICBKYXZhU3RyaW5nKCkKICAgICB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKFdlYkNvcmU6OkpTRE9N
V2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBtX2ltcGwgPSBVU3Ry
aW5nKCkuaW1wbCgpOwogICAgIH0KIAogICAgIH5KYXZhU3RyaW5nKCkKICAgICB7Ci0gICAgICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgICAgICBtX2ltcGwgPSAwOwogICAgIH0KIAogICAgIGNvbnN0IGNoYXIqIHV0ZjgoKSBjb25z
dAogICAgIHsKICAgICAgICAgaWYgKCFtX3V0ZjhTdHJpbmcuZGF0YSgpKSB7Ci0gICAgICAgICAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgICAgICAgICBtX3V0ZjhTdHJpbmcgPSBVU3RyaW5nKG1faW1wbCkudXRmOCgpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBtX3V0ZjhTdHJpbmcuZGF0YSgpOwpAQCAtNzksNyAr
ODAsNyBAQCBwcml2YXRlOgogICAgICAgICBpbnQgc2l6ZSA9IGUtPkdldFN0cmluZ0xlbmd0aChz
KTsKICAgICAgICAgY29uc3QgamNoYXIqIHVjID0gZ2V0VUNoYXJhY3RlcnNGcm9tSlN0cmluZ0lu
RW52KGUsIHMpOwogICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6SlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBtX2ltcGwg
PSBVU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPih1YyksIHNpemUpLmltcGwo
KTsKICAgICAgICAgfQogICAgICAgICByZWxlYXNlVUNoYXJhY3RlcnNGb3JKU3RyaW5nSW5FbnYo
ZSwgcywgdWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qc2MvQnJpZGdlSlNDLmNwcAko
cmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIEpTT2JqZWN0KiBJbnN0YW5jZTo6
Y3JlYXRlUnVudGltZU9iamVjdCgKICAgICBpZiAoUnVudGltZU9iamVjdCogZXhpc3RpbmdPYmpl
Y3QgPSBtX3J1bnRpbWVPYmplY3QuZ2V0KCkpCiAgICAgICAgIHJldHVybiBleGlzdGluZ09iamVj
dDsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAgICAgUnVudGltZU9iamVjdCogbmV3T2JqZWN0ID0gbmV3UnVu
dGltZU9iamVjdChleGVjKTsKICAgICBtX3J1bnRpbWVPYmplY3QgPSBQYXNzV2VhazxSdW50aW1l
T2JqZWN0PihuZXdPYmplY3QpOwogICAgIG1fcm9vdE9iamVjdC0+YWRkUnVudGltZU9iamVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIG5ld09iamVjdCk7CkBAIC0xMDEsNyArMTAxLDcgQEAgSlNPYmpl
Y3QqIEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KAogCiBSdW50aW1lT2JqZWN0KiBJbnN0
YW5jZTo6bmV3UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVzZXMgdGhlIHByb3Rv
dHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKICAgICAvLyBXZSBuZWVkIHRvIHBh
c3MgaW4gdGhlIHJpZ2h0IGdsb2JhbCBvYmplY3QgZm9yICJpIi4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbQkocmV2aXNpb24gMTIwNDc4KQorKysg
U291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtOTIsNyArOTIsNyBAQCB2b2lkIE9iamNJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlv
blRvCiAgICAgfQogCiAgICAgaWYgKCFzX2V4Y2VwdGlvbkVudmlyb25tZW50IHx8IHNfZXhjZXB0
aW9uRW52aXJvbm1lbnQgPT0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKSB7Ci0gICAgICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIHNfZXhjZXB0aW9uKTsKICAg
ICB9CiAKQEAgLTIzOSw3ICsyMzksNyBAQCBKU1ZhbHVlIE9iamNJbnN0YW5jZTo6aW52b2tlT2Jq
Y01ldGhvZChFCiB7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogICAgIAot
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1
bndpbmRzIGluY29ycmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhleGVjKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2Ug
aXQgdW53aW5kcyBpbmNvcnJlY3RseS4KIAogICAgIHNldEdsb2JhbEV4Y2VwdGlvbihuaWwpOwog
ICAgIApAQCAtMzU0LDcgKzM1NCw3IEBAIEpTVmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VEZWZh
dWx0TWV0aG8KIHsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAKLSAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsg
Ly8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5k
cyBpbmNvcnJlY3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhl
Yyk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVu
d2luZHMgaW5jb3JyZWN0bHkuCiAgICAgc2V0R2xvYmFsRXhjZXB0aW9uKG5pbCk7CiAgICAgCiBA
dHJ5IHsKQEAgLTQxMSw3ICs0MTEsNyBAQCBib29sIE9iamNJbnN0YW5jZTo6c2V0VmFsdWVPZlVu
ZGVmaW5lZEZpCiAgICAgaWYgKCFbdGFyZ2V0T2JqZWN0IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3Ioc2V0VmFsdWU6Zm9yVW5kZWZpbmVkS2V5OildKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2Ug
aXQgdW53aW5kcyBpbmNvcnJlY3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoZXhlYyk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNh
dXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAKICAgICAvLyBUaGlzIGNoZWNrIGlzIG5vdCBy
ZWFsbHkgbmVjZXNzYXJ5IGJlY2F1c2UgTlNPYmplY3QgaW1wbGVtZW50cwogICAgIC8vIHNldFZh
bHVlOmZvclVuZGVmaW5lZEtleTosIGFuZCB1bmZvcnR1bmF0ZWx5IHRoZSBkZWZhdWx0IGltcGxl
bWVudGF0aW9uCkBAIC00NDMsNyArNDQzLDcgQEAgSlNWYWx1ZSBPYmpjSW5zdGFuY2U6OmdldFZh
bHVlT2ZVbmRlZmluZQogICAgIAogICAgIGlkIHRhcmdldE9iamVjdCA9IGdldE9iamVjdCgpOwog
Ci0gICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0
IHVud2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVz
ZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogCiAgICAgLy8gVGhpcyBjaGVjayBpcyBub3QgcmVh
bGx5IG5lY2Vzc2FyeSBiZWNhdXNlIE5TT2JqZWN0IGltcGxlbWVudHMKICAgICAvLyB2YWx1ZUZv
clVuZGVmaW5lZEtleTosIGFuZCB1bmZvcnR1bmF0ZWx5IHRoZSBkZWZhdWx0IGltcGxlbWVudGF0
aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tCShy
ZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRp
bWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTkyLDE5ICs5MiwxOCBAQCBKU1ZhbHVlIE9iamNGaWVs
ZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlCiAgICAgCiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gKHN0
YXRpY19jYXN0PGNvbnN0IE9iamNJbnN0YW5jZSo+KGluc3RhbmNlKSktPmdldE9iamVjdCgpOwog
Ci0gICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0
IHVud2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVz
ZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogCiAgICAgQHRyeSB7CiAgICAgICAgIGlmIChpZCBv
YmpjVmFsdWUgPSBbdGFyZ2V0T2JqZWN0IHZhbHVlRm9yS2V5OihOU1N0cmluZyAqKV9uYW1lLmdl
dCgpXSkKICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMs
ICZvYmpjVmFsdWUsIE9iamNPYmplY3RUeXBlLCBpbnN0YW5jZS0+cm9vdE9iamVjdCgpKTsKICAg
ICAgICAgewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAgICAgT2JqY0lu
c3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgICAgIH0K
ICAgICB9IEBjYXRjaChOU0V4Y2VwdGlvbiogbG9jYWxFeGNlcHRpb24pIHsKLSAgICAgICAgSlNM
b2NrOjpsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFtsb2NhbEV4Y2VwdGlvbiByZWFz
b25dKTsKLSAgICAgICAgSlNMb2NrOjp1bmxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAg
ICB9CiAKICAgICAvLyBXb3JrIGFyb3VuZCBwcm9ibGVtIGluIHNvbWUgdmVyc2lvbnMgb2YgR0ND
IHdoZXJlIHJlc3VsdCBnZXRzIG1hcmtlZCB2b2xhdGlsZSBhbmQKQEAgLTEyNSwxOCArMTI0LDE3
IEBAIHZvaWQgT2JqY0ZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1MKICAgICBpZCB0YXJn
ZXRPYmplY3QgPSAoc3RhdGljX2Nhc3Q8Y29uc3QgT2JqY0luc3RhbmNlKj4oaW5zdGFuY2UpKS0+
Z2V0T2JqZWN0KCk7CiAgICAgaWQgdmFsdWUgPSBjb252ZXJ0VmFsdWVUb09iamNPYmplY3QoZXhl
YywgYVZhbHVlKTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2Nv
cGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5
IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KIAogICAgIEB0cnkgewogICAg
ICAgICBbdGFyZ2V0T2JqZWN0IHNldFZhbHVlOnZhbHVlIGZvcktleTooTlNTdHJpbmcgKilfbmFt
ZS5nZXQoKV07CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAg
ICAgICAgIE9iamNJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMp
OwogICAgICAgICB9CiAgICAgfSBAY2F0Y2goTlNFeGNlcHRpb24qIGxvY2FsRXhjZXB0aW9uKSB7
Ci0gICAgICAgIEpTTG9jazo6bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBbbG9jYWxF
eGNlcHRpb24gcmVhc29uXSk7Ci0gICAgICAgIEpTTG9jazo6dW5sb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9v
YmpjX3V0aWxpdHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMv
b2JqY191dGlsaXR5Lm1tCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvb2JqYy9vYmpjX3V0aWxpdHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAg
T2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4ZWNTdAogCiAgICAgc3dpdGNoICh0
eXBlKSB7CiAgICAgICAgIGNhc2UgT2JqY09iamVjdFR5cGU6IHsKLSAgICAgICAgICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QgKm9y
aWdpbkdsb2JhbE9iamVjdCA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKTsKICAgICAgICAg
ICAgIFJvb3RPYmplY3QqIG9yaWdpblJvb3RPYmplY3QgPSBmaW5kUm9vdE9iamVjdChvcmlnaW5H
bG9iYWxPYmplY3QpOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIE9iamNWYWx1ZSBjb252ZXJ0VmFsdWVU
b09iamNWYWx1ZShFeGVjU3QKIAogSlNWYWx1ZSBjb252ZXJ0TlNTdHJpbmdUb1N0cmluZyhFeGVj
U3RhdGUqIGV4ZWMsIE5TU3RyaW5nICpuc3N0cmluZykKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAog
ICAgIHVuaWNoYXIgKmNoYXJzOwogICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBbbnNzdHJpbmcg
bGVuZ3RoXTsKQEAgLTE3OCw3ICsxNzgsNyBAQCBKU1ZhbHVlIGNvbnZlcnROU1N0cmluZ1RvU3Ry
aW5nKEV4ZWNTdGF0CiAqLwogSlNWYWx1ZSBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShFeGVjU3Rh
dGUqIGV4ZWMsIHZvaWQqIGJ1ZmZlciwgT2JqY1ZhbHVlVHlwZSB0eXBlLCBSb290T2JqZWN0KiBy
b290T2JqZWN0KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCiAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgICAgIGNhc2UgT2JqY09iamVjdFR5cGU6IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9xdC9xdF9pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdl
L3F0L3F0X2luc3RhbmNlLmNwcAkocmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBA
QCBRdEluc3RhbmNlOjpRdEluc3RhbmNlKFFPYmplY3QqIG8sIFBhc3NSCiAKIFF0SW5zdGFuY2U6
On5RdEluc3RhbmNlKCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOwogCiAgICAgY2FjaGVkSW5zdGFuY2VzLnJlbW92ZShtX2hhc2hrZXkpOwogCkBAIC0x
MTksNyArMTE5LDcgQEAgUXRJbnN0YW5jZTo6flF0SW5zdGFuY2UoKQogCiBQYXNzUmVmUHRyPFF0
SW5zdGFuY2U+IFF0SW5zdGFuY2U6OmdldFF0SW5zdGFuY2UoUU9iamVjdCogbywgUGFzc1JlZlB0
cjxSb290T2JqZWN0PiByb290T2JqZWN0LCBWYWx1ZU93bmVyc2hpcCBvd25lcnNoaXApCiB7Ci0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIGZvcmVh
Y2ggKFF0SW5zdGFuY2UqIGluc3RhbmNlLCBjYWNoZWRJbnN0YW5jZXMudmFsdWVzKG8pKQogICAg
ICAgICBpZiAoaW5zdGFuY2UtPnJvb3RPYmplY3QoKSA9PSByb290T2JqZWN0KSB7CkBAIC0xODAs
NyArMTgwLDcgQEAgQ2xhc3MqIFF0SW5zdGFuY2U6OmdldENsYXNzKCkgY29uc3QKIAogUnVudGlt
ZU9iamVjdCogUXRJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBtX21ldGhvZHMuY2xlYXIoKTsKICAgICByZXR1cm4gUXRSdW50
aW1lT2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0aGlz
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGlt
ZS5jcHAJKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9w
aXhtYXBydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIwLDcgKzQyMCw3IEBAIFJ1bnRp
bWVPYmplY3QqIFF0UGl4bWFwSW5zdGFuY2U6Om5ld1J1bnQKIAogSlNPYmplY3QqIFF0UGl4bWFw
SW5zdGFuY2U6OmNyZWF0ZVBpeG1hcFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBQYXNz
UmVmUHRyPFJvb3RPYmplY3Q+IHJvb3QsIGNvbnN0IFFWYXJpYW50JiBkYXRhKQogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAgICAgUmVmUHRyPFF0UGl4bWFwSW5zdGFuY2U+IGluc3RhbmNlID0gYWRvcHRSZWYo
bmV3IFF0UGl4bWFwSW5zdGFuY2Uocm9vdCwgZGF0YSkpOwogICAgIHJldHVybiBpbnN0YW5jZS0+
Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9xdC9xdF9ydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cXQvcXRfcnVudGltZS5jcHAJKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9xdC9xdF9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDcgKzIzMCw3IEBA
IFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXQKICAgICAgICAgcmV0dXJu
IFFWYXJpYW50KCk7CiAgICAgfQogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1JlYWxUeXBlIHR5cGUg
PSB2YWx1ZVJlYWxUeXBlKGV4ZWMsIHZhbHVlKTsKICAgICBpZiAoaGludCA9PSBRTWV0YVR5cGU6
OlZvaWQpIHsKICAgICAgICAgc3dpdGNoKHR5cGUpIHsKQEAgLTgyNCw3ICs4MjQsNyBAQCBKU1Zh
bHVlIGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlCiAgICAgICAgIHJldHVybiBqc051
bGwoKTsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBl
OjpCb29sKQogICAgICAgICByZXR1cm4ganNCb29sZWFuKHZhcmlhbnQudG9Cb29sKCkpOwpAQCAt
MTQyMCw3ICsxNDIwLDcgQEAgRW5jb2RlZEpTVmFsdWUgUXRSdW50aW1lTWV0YU1ldGhvZDo6Y2Fs
bAogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
Ly8gV2UgaGF2ZSB0byBwaWNrIGEgbWV0aG9kIHRoYXQgbWF0Y2hlcy4uCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIFFPYmplY3QgKm9iaiA9IGQtPm1faW5zdGFuY2UtPmdldE9iamVjdCgpOwogICAgIGlm
IChvYmopIHsKQEAgLTE1NjEsNyArMTU2MSw3IEBAIEVuY29kZWRKU1ZhbHVlIFF0UnVudGltZUNv
bm5lY3Rpb25NZXRob2QKIHsKICAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSogZCA9
IHN0YXRpY19jYXN0PFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QgKj4oZXhlYy0+Y2FsbGVlKCkp
LT5kX2Z1bmMoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBRT2JqZWN0KiBzZW5kZXIgPSBkLT5t
X2luc3RhbmNlLT5nZXRPYmplY3QoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0
L3F0X3J1bnRpbWVfcXQ0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cXQvcXRfcnVudGltZV9xdDQuY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfcnVudGltZV9xdDQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNyAr
MjMwLDcgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdAogICAgICAg
ICByZXR1cm4gUVZhcmlhbnQoKTsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTUmVhbFR5
cGUgdHlwZSA9IHZhbHVlUmVhbFR5cGUoZXhlYywgdmFsdWUpOwogICAgIGlmIChoaW50ID09IFFN
ZXRhVHlwZTo6Vm9pZCkgewogICAgICAgICBzd2l0Y2godHlwZSkgewpAQCAtODI0LDcgKzgyNCw3
IEBAIEpTVmFsdWUgY29udmVydFFWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUKICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBpZiAodHlwZSA9PSBR
TWV0YVR5cGU6OkJvb2wpCiAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4odmFyaWFudC50b0Jvb2wo
KSk7CkBAIC0xNDI5LDcgKzE0MjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0
aG9kOjpjYWxsCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICAvLyBXZSBoYXZlIHRvIHBpY2sgYSBtZXRob2QgdGhhdCBtYXRjaGVzLi4KLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogCiAgICAgUU9iamVjdCAqb2JqID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7
CiAgICAgaWYgKG9iaikgewpAQCAtMTU3MCw3ICsxNTcwLDcgQEAgRW5jb2RlZEpTVmFsdWUgUXRS
dW50aW1lQ29ubmVjdGlvbk1ldGhvZAogewogICAgIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2RE
YXRhKiBkID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCAqPihleGVjLT5j
YWxsZWUoKSktPmRfZnVuYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIFFPYmplY3QqIHNlbmRl
ciA9IGQtPm1faW5zdGFuY2UtPmdldE9iamVjdCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1MSw3
ICs1NTEsNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAgICAg
bV9jb250ZXh0U3RhdGVTYXZlciA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyKCptX2ltYWdlQnVmZmVyLT5jb250ZXh0KCkpKTsKIAogI2lmIFVTRShKU0MpCi0gICAgSlND
OjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xv
Y2tIb2xkZXIgbG9jayhzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmdsb2JhbERhdGEoKSk7CiAg
ICAgc2l6ZV90IG51bUJ5dGVzID0gNCAqIG1faW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLndp
ZHRoKCkgKiBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKS5oZWlnaHQoKTsKICAgICBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmdsb2JhbERhdGEoKS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9y
eUNvc3QobnVtQnl0ZXMpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bWFnZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1h
Z2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbWFnZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDggKzgxLDggQEAgdm9pZCBI
VE1MSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhYwogI2lmIFVTRShKU0MpCiAgICAgaWYg
KCFsb2FkRXJyb3IpIHsKICAgICAgICAgaWYgKCFlbGVtLT5pbkRvY3VtZW50KCkpIHsKLSAgICAg
ICAgICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAg
ICAgICAgICAgSlNDOjpKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpOworICAgICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9j
ayhnbG9iYWxEYXRhKTsKICAgICAgICAgICAgIGdsb2JhbERhdGEtPmhlYXAucmVwb3J0RXh0cmFN
ZW1vcnlDb3N0KGNhY2hlZEltYWdlLT5lbmNvZGVkU2l6ZSgpKTsKICAgICAgICAgfQogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcAkocmV2
aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDYgKzI1MSw5IEBAIFNjcmlwdFZhbHVlIEluamVj
dGVkU2NyaXB0OjpjYWxsRnVuY3Rpb24KIAogdm9pZCBJbmplY3RlZFNjcmlwdDo6bWFrZUNhbGwo
U2NyaXB0RnVuY3Rpb25DYWxsJiBmdW5jdGlvbiwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVz
dWx0KQogeworI2lmIFVTRShKU0MpCisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRT
dGF0ZSgpKTsKKyNlbmRpZgogICAgIGlmIChoYXNOb1ZhbHVlKCkgfHwgIWNhbkFjY2Vzc0luc3Bl
Y3RlZFdpbmRvdygpKSB7CiAgICAgICAgICpyZXN1bHQgPSBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgp
OwogICAgICAgICByZXR1cm47CkBAIC0yNzAsNiArMjczLDkgQEAgdm9pZCBJbmplY3RlZFNjcmlw
dDo6bWFrZUNhbGwoU2NyaXB0RnVuYwogCiB2b2lkIEluamVjdGVkU2NyaXB0OjptYWtlRXZhbENh
bGwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9u
LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qIG9iamVjdFJlc3Vs
dCwgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKQogeworI2lmIFVTRShK
U0MpCisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRTdGF0ZSgpKTsKKyNlbmRpZgog
ICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0OwogICAgIG1ha2VDYWxsKGZ1bmN0aW9u
LCAmcmVzdWx0KTsKICAgICBpZiAoIXJlc3VsdCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNyArMjQwLDcgQEAgYm9v
bCBQbHVnaW5WaWV3OjpzdGFydCgpCiAgICAgewogICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJy
ZW50UGx1Z2luVmlldyh0aGlzKTsKICNpZiBVU0UoSlNDKQotICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7CiAgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5l
d3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS51dGY4KCkuZGF0YSgpLCBtX2luc3RhbmNlLCBtX21v
ZGUsIG1fcGFyYW1Db3VudCwgbV9wYXJhbU5hbWVzLCBtX3BhcmFtVmFsdWVzLCBOVUxMKTsKQEAg
LTMzMCw3ICszMzAsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnN0b3AoKQogICAgIG1faXNTdGFydGVk
ID0gZmFsc2U7CiAKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBA
IC00NDYsNyArNDQ2LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVzdChQbHVnaW5S
ZQogICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSkgewogICAgICAg
ICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVT
RShKU0MpCi0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgc2V0Q2FsbGluZ1BsdWdp
bih0cnVlKTsKICAgICAgICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dXJsbm90
aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgTlBSRVNf
RE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKQEAgLTczNiw3ICs3MzYsNyBAQCBOUE9iamVj
dCogUGx1Z2luVmlldzo6bnBPYmplY3QoKQogICAgIHsKICAgICAgICAgUGx1Z2luVmlldzo6c2V0
Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAjaWYgVVNFKEpTQykKLSAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICNlbmRpZgogICAgICAgICBzZXRDYWxs
aW5nUGx1Z2luKHRydWUpOwogICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmb2Jq
ZWN0KTsKQEAgLTE0OTIsNyArMTQ5Miw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cHJpdmF0ZUJyb3dz
aW5nU3RhdGVDaGEKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwogI2VuZGlmCiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBOUEJvb2wgdmFsdWUg
PSBwcml2YXRlQnJvd3NpbmdFbmFibGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9i
bGFja2JlcnJ5L1BsdWdpblZpZXdCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwCShyZXZp
c2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2lu
Vmlld0JsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNyArNDAzLDcgQEAgYm9v
bCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdp
bih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKQEAgLTk3MCw3ICs5NzAsNyBAQCB2b2lkIFBsdWdp
blZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAgICAgICAoKE5QU2V0V2luZG93Q2FsbGJh
Y2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5mbyktPndpbmRvd0dyb3VwID0gd2luZG93LT53aW5k
b3dHcm91cCgpOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7
Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNldENhbGxp
bmdQbHVnaW4odHJ1ZSk7CiAKICAgICAvLyBGSVhNRTogUGFzc2luZyB6b29tRmFjdG9yIHRvIHNl
dHdpbmRvdyBtYWtlIHdpbmRvd2VkIHBsdWdpbiBzY2FsZSBpbmNvcnJlY3RseS4KQEAgLTEyMjAs
NyArMTIyMCw3IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAKICAgICBpZiAo
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7CiAgICAgICAgIFBsdWdpblZpZXc6
OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwog
ICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQ
VnBsdWdpbk5lZWRzWEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7CiAgICAgICAgIHNldENhbGxpbmdQ
bHVnaW4oZmFsc2UpOwpAQCAtMTMwMSw3ICsxMzAxLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpnZXRX
aW5kb3dJbmZvKFZlY3RvcjxQbAogICAgIHZvaWQqIHZhbFB0ciA9IDA7CiAKICAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpblNjcmVl
bldpbmRvdywgJnZhbFB0cik7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcAkocmV2aXNpb24g
MTIwNDc4KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRj
aE5QRXZlbnQoTlBFdmVudAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbHVnaW5WaWV3
OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAxMjA0Nzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2
ZW50KE5QRXZlbnQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUGx1Z2luVmlldzo6c2V0
Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAKICAgICBib29sIGFjY2Vw
dGVkID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQp
OwpAQCAtMjc2LDcgKzI3Niw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0KiAKIAogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZl
bnQqIGV2ZW50KQogewotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
IAogICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVk
U3VjY2Vzc2Z1bGx5KQogICAgICAgICByZXR1cm47CkBAIC00MDYsNyArNDA2LDcgQEAgc3RhdGlj
IHZvaWQgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZQogCiB2b2lkIFBsdWdpblZpZXc6Omhh
bmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCiB7Ci0gICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1
cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCiAgICAgICAgIHJldHVybjsKQEAg
LTUzNSw3ICs1MzUsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQog
ICAgIH0KIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1
Z2luKHRydWUpOwogICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0
YW5jZSwgJm1fbnBXaW5kb3cpOwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtODQy
LDcgKzg0Miw3IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAjaWYgZGVmaW5l
ZChYUF9VTklYKQogICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsK
ICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHNldENh
bGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2
YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsK
ICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL21hYy9QbHVnaW5WaWV3TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW0JKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTQyNiw3ICs0MjYsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQog
ICAgICAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCAtIG1fbnBXaW5kb3cuY2xpcFJl
Y3QubGVmdCwgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gLSBtX25wV2luZG93LmNsaXBSZWN0
LnRvcCk7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1Bs
dWdpbih0cnVlKTsKICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5z
dGFuY2UsICZtX25wV2luZG93KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAgLTc3
Miw3ICs3NzIsNyBAQCBQb2ludCBQbHVnaW5WaWV3Ojptb3VzZVBvc0ZvclBsdWdpbihNb3VzCiBi
b29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkKIHsKICAgICBQ
bHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAog
ICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0
YW5jZSwgJmV2ZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmll
d1F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZp
ZXdRdC5jcHAJKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQv
UGx1Z2luVmlld1F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzczLDcgKzM3Myw3IEBAIGJvb2wg
UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQKIAogICAgIFBsdWdpblZpZXc6OnNl
dEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0
cnVlKTsKICAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVu
dChtX2luc3RhbmNlLCAmZXZlbnQpOwpAQCAtNjg3LDcgKzY4Nyw3IEBAIHZvaWQgUGx1Z2luVmll
dzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1
Z2luVmlldyh0aGlzKTsKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICNlbmRpZgogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAg
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRv
dyk7CkBAIC05NDksNyArOTQ5LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkK
ICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7CiAgICAgICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAg
ICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVl
ZHNYRW1iZWQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmll
d1dpbi5jcHAJKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2lu
L1BsdWdpblZpZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjYsNyArNTI2LDcgQEAgYm9v
bCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICBzaG91bGRQb3Ag
PSB0cnVlOwogICAgIH0KIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKICAgICBz
ZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAgLTY3Nyw3ICs2NzcsNyBAQCB2b2lkIFBsdWdpblZp
ZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybjsK
IAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBpZiAoZGlz
cGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKIH0KQEAgLTc0Nyw3ICs3NDcsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZl
bnQoTW91c2VFCiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmFjayBw
b3J0aW5nIHRoZSBodHRwOi8vd2Via2l0Lm9yZy9iLzU4MTA4IGZpeCBoZXJlLgogICAgIGlmIChk
aXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOwpAQCAtODM1LDcgKzgzNSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0
KGNvbnN0IEkKICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CiAKICAgICBpZiAobV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgewotICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRy
dWUpOwogICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFu
Y2UsICZtX25wV2luZG93KTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3Bw
CShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVU
ZXN0U3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDggQEAgbmFtZXNwYWNl
IFdlYkNvcmVUZXN0U3VwcG9ydCB7CiAKIHZvaWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KEpTQ29u
dGV4dFJlZiBjb250ZXh0KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc2NyaXB0
Q29udGV4dC0+aXNEb2N1bWVudCgpID8gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzY3JpcHRDb250
ZXh0KSA6IDA7CkBAIC00OSw4ICs0OSw4IEBAIHZvaWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KEpT
Q29udGV4dFJlZiAKIAogdm9pZCByZXNldEludGVybmFsc09iamVjdChKU0NvbnRleHRSZWYgY29u
dGV4dCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgSW50ZXJuYWxz
ICogaW50ZXJuYWxzID0gdG9JbnRlcm5hbHMoZ2xvYmFsT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsIEludGVybmFsczo6aW50ZXJuYWxzSWQpKSk7
CiAgICAgaWYgKGludGVybmFscykgewpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjksOCArODY5LDggQEAgdm9pZCBYTUxIdHRw
UmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24oKQogICAgIC8vIG91dC4gQnV0IGl0IGlzIHByb3RlY3Rl
ZCBmcm9tIEdDIHdoaWxlIGxvYWRpbmcsIHNvIHRoaXMKICAgICAvLyBjYW4ndCBiZSByZWNvdXBl
ZCB1bnRpbCB0aGUgbG9hZCBpcyBkb25lLCBzbyBvbmx5CiAgICAgLy8gcmVwb3J0IHRoZSBleHRy
YSBjb3N0IGF0IHRoYXQgcG9pbnQuCi0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmdsb2JhbERhdGEoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrKGdsb2JhbERhdGEpOwogICAgIGdsb2JhbERhdGEtPmhlYXAucmVwb3J0RXh0cmFNZW1v
cnlDb3N0KG1fcmVzcG9uc2VCdWlsZGVyLmxlbmd0aCgpICogMik7CiAjZW5kaWYKIApJbmRleDog
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkocmV2aXNpb24gMTIwNTEwKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTUgQEAKKzIwMTItMDYtMTUgIE1hcmsgSGFobmVuYmVy
ZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBKU0xvY2sgc2hvdWxkIGJlIHBl
ci1KU0dsb2JhbERhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg5MTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ2hhbmdlZCBhbGwgc2l0ZXMgdGhhdCB1c2VkIEpTTG9jayB0byBpbnN0ZWFkIHVzZSB0
aGUgbmV3IEpTTG9ja0hvbGRlcgorICAgICAgICBhbmQgcGFzcyBpbiB0aGUgY29ycmVjdCBKUyBj
b250ZXh0IHRoYXQgdGhlIGNvZGUgaXMgYWJvdXQgdG8gaW50ZXJhY3Qgd2l0aCB0aGF0IAorICAg
ICAgICBuZWVkcyBwcm90ZWN0aW9uLgorCisgICAgICAgICogU2hhcmVkL21hYy9XZWJNZW1vcnlT
YW1wbGVyLm1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6c2FtcGxl
V2ViS2l0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OmphdmFTY3JpcHRPYmpl
Y3RzQ291bnQpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0
aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxNZXRob2QpOgorICAgICAgICAo
V2ViS2l0OjpKU05QT2JqZWN0OjpjYWxsT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9i
amVjdDo6Y2FsbENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6cHV0
KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAg
ICAoV2ViS2l0OjpKU05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdl
YktpdDo6SlNOUE9iamVjdDo6cHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBKU09i
amVjdDo6aGFzTWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aW52b2tlKToK
KyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aW52b2tlRGVmYXVsdCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5QSlNPYmplY3Q6Omhhc1Byb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09i
amVjdDo6Z2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjpzZXRQcm9w
ZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6OnJlbW92ZVByb3BlcnR5KToKKyAg
ICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6ZW51bWVyYXRlKToKKyAgICAgICAgKFdlYktpdDo6
TlBKU09iamVjdDo6Y29uc3RydWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1l
T2JqZWN0TWFwOjpjb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKFdlYktpdDo6
TlBSdW50aW1lT2JqZWN0TWFwOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGlt
ZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFt
ZTo6anNXcmFwcGVyRm9yV29ybGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y29tcHV0
ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJ
bk1haW5GcmFtZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6Z2V0V2ViQ29yZVN0YXRpc3RpY3MpOgorCisyMDEyLTA2
LTE1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsbCBvZiB0aGVzZSBjaGFuZ2VzIHdlcmUgbWFkZSB0
byBjb252ZXJ0IHRoZSBvbGQtc3R5bGUgSlNMb2NrIHN0YXRlbWVudHMgdG8gCisgICAgICAgIHRo
ZSBuZXcgSlNMb2NrSG9sZGVyIHN0YXRlbWVudHMgdGhhdCB0YWtlIGluIHdoYXRldmVyIEpTIGNv
bnRleHQgdGhlIGNvZGUgaXMgYWJvdXQgCisgICAgICAgIHRvIGludGVyYWN0IHdpdGguCisKKyAg
ICAgICAgKiBTaGFyZWQvbWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tOgorICAgICAgICAoV2Vi
S2l0OjpXZWJNZW1vcnlTYW1wbGVyOjpzYW1wbGVXZWJLaXQpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJ
bmplY3RlZEJ1bmRsZTo6amF2YVNjcmlwdE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJLaXQ6
OkluamVjdGVkQnVuZGxlOjpyZXBvcnRFeGNlcHRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SlNOUE9i
amVjdDo6Y2FsbE1ldGhvZCk6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxPYmpl
Y3QpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpjYWxsQ29uc3RydWN0b3IpOgorICAg
ICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpwdXQpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0Ojpwcm9wZXJ0eUdl
dHRlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjpoYXNNZXRob2QpOgorICAgICAgICAo
V2ViS2l0OjpOUEpTT2JqZWN0OjppbnZva2UpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0
OjppbnZva2VEZWZhdWx0KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aGFzUHJvcGVy
dHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjpnZXRQcm9wZXJ0eSk6CisgICAgICAg
IChXZWJLaXQ6Ok5QSlNPYmplY3Q6OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TlBK
U09iamVjdDo6cmVtb3ZlUHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0Ojpl
bnVtZXJhdGUpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0Ojpjb25zdHJ1Y3QpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVG9O
UFZhcmlhbnQpOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmV2YWx1YXRl
KToKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0
aW9uVG9FeGVjU3RhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpqc1dyYXBwZXJGb3JXb3JsZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lOjpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8p
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6cnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpnZXRX
ZWJDb3JlU3RhdGlzdGljcyk6CisKIDIwMTItMDYtMTUgIENocmlzdG9waGUgRHVtZXogIDxjaHJp
c3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbV0syXSBBZGQgc3VwcG9ydCBmb3Ig
ZXhwbGljaXQgaW50ZW50cwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJNZW1v
cnlTYW1wbGVyLm1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTYsNyArMTE2LDcgQEAgV2ViTWVtb3J5U3RhdGlzdGljcyBXZWJNZW1vcnlTYW1wbGVyOjpz
YQogICAgIHRvdGFsQnl0ZXNJblVzZSArPSBmYXN0TWFsbG9jQnl0ZXNJblVzZTsKICAgICB0b3Rh
bEJ5dGVzQ29tbWl0dGVkICs9IGZhc3RNYWxsb2NCeXRlc0NvbW1pdHRlZDsKICAgICAKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2l6ZV90IGpzY0hlYXBC
eXRlc0luVXNlID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnNpemUo
KTsKICAgICBzaXplX3QganNjSGVhcEJ5dGVzQ29tbWl0dGVkID0gSlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNhcGFjaXR5KCk7CiAgICAgdG90YWxCeXRlc0luVXNlICs9
IGpzY0hlYXBCeXRlc0luVXNlOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjAsNyArOTIwLDcgQEAgdm9pZCBX
ZWJQcm9jZXNzOjpnZXRXZWJDb3JlU3RhdGlzdGljcyh1aQogICAgIAogICAgIC8vIEdhdGhlciBK
YXZhU2NyaXB0IHN0YXRpc3RpY3MuCiAgICAgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNl
dCgiSmF2YVNjcmlwdE9iamVjdHNDb3VudCIsIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERh
dGEoKS0+aGVhcC5vYmplY3RDb3VudCgpKTsKICAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVy
cy5zZXQoIkphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKSk7CiAgICAgICAgIGRhdGEu
c3RhdGlzdGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50Iiwg
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENv
dW50KCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDEyMDQ3OCkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDksNyArNDA5LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZTo6Z2FyYmFnZUNvbGxlY3RKYXZhUwogCiBzaXplX3QgSW5qZWN0ZWRCdW5kbGU6OmphdmFTY3Jp
cHRPYmplY3RzQ291bnQoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFw
Lm9iamVjdENvdW50KCk7CiB9CiAKQEAgLTQxOCw4ICs0MTgsOCBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlOjpyZXBvcnRFeGNlcHRpb24oSlNDCiAgICAgaWYgKCFjb250ZXh0IHx8ICFleGNlcHRpb24p
CiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlY1N0YXRlID0gdG9KUyhjb250ZXh0KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjU3RhdGUpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRo
ZSBjb250ZXh0IGhhcyBhIERPTVdpbmRvdyBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgdGhpcyBj
b250ZXh0IGRpZG4ndCBvcmlnaW5hdGUgZnJvbSBhIFBhZ2UuCiAgICAgaWYgKCF0b0pTRE9NV2lu
ZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVj
dC5jcHAJKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
NyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL09iamVjdFByb3RvdHlwZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSWRlbnRpZmll
clJlcC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNET01XaW5kb3dCYXNlLmg+CiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAt
MTI1LDcgKzEyNiw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbE1ldGhvZChFeGVjU3RhdGUK
ICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwogICAgIAogICAgIHsKLSAgICAgICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0
LT5fY2xhc3MtPmludm9rZShtX25wT2JqZWN0LCBtZXRob2ROYW1lLCBhcmd1bWVudHMuZGF0YSgp
LCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjpt
b3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgfQpAQCAtMTY1LDcgKzE2
Niw3IEBAIEpTQzo6SlNWYWx1ZSBKU05QT2JqZWN0OjpjYWxsT2JqZWN0KEpTQzoKICAgICBWT0lE
X1RPX05QVkFSSUFOVChyZXN1bHQpOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fbnBPYmplY3QtPl9jbGFzcy0+aW52
b2tlRGVmYXVsdChtX25wT2JqZWN0LCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAm
cmVzdWx0KTsKICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9u
VG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgfQpAQCAtMjA1LDcgKzIwNiw3IEBAIEpTVmFsdWUgSlNO
UE9iamVjdDo6Y2FsbENvbnN0cnVjdG9yKEV4ZWMKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1
bHQpOwogICAgIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdChtX25wT2Jq
ZWN0LCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKICAgICAgICAg
TlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7
CiAgICAgfQpAQCAtMzQwLDcgKzM0MSw3IEBAIHZvaWQgSlNOUE9iamVjdDo6cHV0KEpTQ2VsbCog
Y2VsbCwgRXhlY1MKICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBwcm90
ZWN0b3IodGhpc09iamVjdC0+bV9vYmplY3RNYXApOwogCiAgICAgewotICAgICAgICBKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAg
ICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICB0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xh
c3MtPnNldFByb3BlcnR5KHRoaXNPYmplY3QtPm1fbnBPYmplY3QsIG5wSWRlbnRpZmllciwgJnZh
cmlhbnQpOwogCiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlv
blRvRXhlY1N0YXRlKGV4ZWMpOwpAQCAtMzgwLDcgKzM4MSw3IEBAIGJvb2wgSlNOUE9iamVjdDo6
ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXQKICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblBy
b3RlY3RvciBwcm90ZWN0b3IobV9vYmplY3RNYXApOwogCiAgICAgewotICAgICAgICBKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAg
ICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdGhyb3cg
YW4gZXhjZXB0aW9uIGlmIHJlbW92ZVByb3BlcnR5IHJldHVybnMgZmFsc2U/CiAgICAgICAgIGlm
ICghbV9ucE9iamVjdC0+X2NsYXNzLT5yZW1vdmVQcm9wZXJ0eShtX25wT2JqZWN0LCBwcm9wZXJ0
eU5hbWUpKQpAQCAtNDEzLDcgKzQxNCw3IEBAIHZvaWQgSlNOUE9iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU08KICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBwcm90
ZWN0b3IodGhpc09iamVjdC0+bV9vYmplY3RNYXApOwogICAgIAogICAgIHsKLSAgICAgICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHRo
cm93IGFuIGV4Y2VwdGlvbiBpZiBlbnVtZXJhdGUgcmV0dXJucyBmYWxzZT8KICAgICAgICAgaWYg
KCF0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPmVudW1lcmF0ZSh0aGlzT2JqZWN0LT5t
X25wT2JqZWN0LCAmaWRlbnRpZmllcnMsICZpZGVudGlmaWVyQ291bnQpKQpAQCAtNDYxLDcgKzQ2
Miw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6cHJvcGVydHlHZXR0ZXIoRXhlY1MKICAgICAKICAg
ICBib29sIHJldHVyblZhbHVlOwogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKICAgICAgICAgTlBJZGVudGlmaWVyIG5wSWRlbnRpZmllciA9IG5wSWRlbnRpZmllckZy
b21JZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gdGhpc09i
ai0+bV9ucE9iamVjdC0+X2NsYXNzLT5nZXRQcm9wZXJ0eSh0aGlzT2JqLT5tX25wT2JqZWN0LCBu
cElkZW50aWZpZXIsICZyZXN1bHQpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAJ
KHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBi
b29sIE5QSlNPYmplY3Q6Omhhc01ldGhvZChOUElkZW50aWZpZXIgCiAgICAgaWYgKCFleGVjKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fanNPYmplY3QtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoZXhl
YywgaWRlbnRpZmllclJlcCkpOyAgICAKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwpAQCAt
MTE5LDcgKzExOSw3IEBAIGJvb2wgTlBKU09iamVjdDo6aW52b2tlKE5QSWRlbnRpZmllciBtZXQK
ICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG1fanNPYmplY3QtPmdldChleGVjLCBpZGVudGlm
aWVyRnJvbUlkZW50aWZpZXJSZXAoZXhlYywgaWRlbnRpZmllclJlcCkpOwogICAgIHJldHVybiBp
bnZva2UoZXhlYywgbV9vYmplY3RNYXAtPmdsb2JhbE9iamVjdCgpLCBmdW5jdGlvbiwgYXJndW1l
bnRzLCBhcmd1bWVudENvdW50LCByZXN1bHQpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIGJvb2wgTlBK
U09iamVjdDo6aW52b2tlRGVmYXVsdChjb25zdCBOUFYKICAgICBpZiAoIWV4ZWMpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0g
bV9qc09iamVjdC5nZXQoKTsKICAgICByZXR1cm4gaW52b2tlKGV4ZWMsIG1fb2JqZWN0TWFwLT5n
bG9iYWxPYmplY3QoKSwgZnVuY3Rpb24sIGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVzdWx0
KTsKQEAgLTE0NSw3ICsxNDUsNyBAQCBib29sIE5QSlNPYmplY3Q6Omhhc1Byb3BlcnR5KE5QSWRl
bnRpZmllCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKIAogICAgIGJvb2wgcmVzdWx0OwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0
cmluZygpKQpAQCAtMTY1LDcgKzE2NSw3IEBAIGJvb2wgTlBKU09iamVjdDo6Z2V0UHJvcGVydHko
TlBJZGVudGlmaWUKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgSlNWYWx1ZSBqc1Jlc3VsdDsKICAgICBpZiAoaWRlbnRpZmllclJlcC0+
aXNTdHJpbmcoKSkKICAgICAgICAganNSZXN1bHQgPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRl
bnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApKTsKQEAgLTE4NSw3
ICsxODUsNyBAQCBib29sIE5QSlNPYmplY3Q6OnNldFByb3BlcnR5KE5QSWRlbnRpZmllCiAgICAg
aWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAog
ICAgIEpTVmFsdWUganNWYWx1ZSA9IG1fb2JqZWN0TWFwLT5jb252ZXJ0TlBWYXJpYW50VG9KU1Zh
bHVlKGV4ZWMsIG1fb2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKSwgKnZhbHVlKTsKICAgICBpZiAo
aWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkgewpAQCAtMjA2LDcgKzIwNiw3IEBAIGJvb2wgTlBK
U09iamVjdDo6cmVtb3ZlUHJvcGVydHkoTlBJZGVudGkKICAgICBpZiAoIWV4ZWMpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgaWYgKGlkZW50aWZpZXJSZXAtPmlz
U3RyaW5nKCkpIHsKICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gaWRlbnRpZmllckZy
b21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApOwogICAgICAgICAKQEAgLTIzNSw3
ICsyMzUsNyBAQCBib29sIE5QSlNPYmplY3Q6OmVudW1lcmF0ZShOUElkZW50aWZpZXIqCiAgICAg
aWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAog
ICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CiAgICAgbV9qc09iamVj
dC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyhtX2pzT2JqZWN0LmdldCgpLCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKQEAgLTI1Nyw3ICsy
NTcsNyBAQCBib29sIE5QSlNPYmplY3Q6OmNvbnN0cnVjdChjb25zdCBOUFZhcmlhCiAgICAgaWYg
KCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgQ29u
c3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlw
ZSA9IGdldENvbnN0cnVjdERhdGEobV9qc09iamVjdC5nZXQoKSwgY29uc3RydWN0RGF0YSk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1l
T2JqZWN0TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkocmV2aXNpb24gMTIwNDc4KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9i
amVjdE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBKU1ZhbHVlIE5Q
UnVudGltZU9iamVjdE1hcDo6Y29udmVydE5QVmFyCiAKIHZvaWQgTlBSdW50aW1lT2JqZWN0TWFw
Ojpjb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSwgTlBWYXJpYW50JiB2YXJpYW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBWT0lEX1RPX05Q
VkFSSUFOVCh2YXJpYW50KTsKICAgICAKQEAgLTE4Niw3ICsxODYsNyBAQCBib29sIE5QUnVudGlt
ZU9iamVjdE1hcDo6ZXZhbHVhdGUoTlBPYmplCiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZ2V0T3JDcmVhdGVKU09iamVjdChnbG9iYWxPYmplY3QuZ2V0KCksIG5wT2Jq
ZWN0KTsKIAogICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0
YXJ0KCk7CkBAIC0yNjYsNyArMjY2LDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVH
bG9iYWxFeGNlcAogICAgICAgICByZXR1cm47CiAKICAgICB7Ci0gICAgICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIHN0cmluZ1RvVVN0
cmluZyhnbG9iYWxFeGNlcHRpb25TdHJpbmcoKSkpKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHJldmlzaW9u
IDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYyMyw3ICs2MjMsNyBAQCBKU1ZhbHVlUmVmIFdlYkZyYW1l
Ojpqc1dyYXBwZXJGb3JXb3JsZChJCiAgICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9IG1f
Y29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHdvcmxkLT5jb3JlV29ybGQoKSk7CiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgIHJldHVybiB0b1JlZihleGVjLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
bm9kZUhhbmRsZS0+Y29yZU5vZGUoKSkpOwogfQogCkBAIC02MzUsNyArNjM1LDcgQEAgSlNWYWx1
ZVJlZiBXZWJGcmFtZTo6anNXcmFwcGVyRm9yV29ybGQoSQogICAgIEpTRE9NV2luZG93KiBnbG9i
YWxPYmplY3QgPSBtX2NvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCh3b3JsZC0+Y29y
ZVdvcmxkKCkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICByZXR1cm4gdG9SZWYoZXhlYywgdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIHJhbmdlSGFuZGxlLT5jb3JlUmFuZ2UoKSkpOwogfQogCkBAIC02NTIsNyAr
NjUyLDcgQEAgSlNWYWx1ZVJlZiBXZWJGcmFtZTo6Y29tcHV0ZWRTdHlsZUluY2x1ZAogCiAgICAg
UmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb246OmNyZWF0ZShzdGF0aWNfY2FzdDxKU0VsZW1lbnQqPih0b0pTKGVsZW1l
bnQpKS0+aW1wbCgpLCB0cnVlKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgcmV0dXJuIHRvUmVmKGV4
ZWMsIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHlsZS5nZXQoKSkpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lv
biAxMjA0NzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OTksNyArMTc5OSw3IEBAIHZvaWQgV2ViUGFnZTo6cnVu
SmF2YVNjcmlwdEluTWFpbkZyYW1lKGMKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBzZXJpYWxpemVkUmVzdWx0VmFsdWU7CiAgICAgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSBkYXRh
UmVmZXJlbmNlOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgIGlmIChKU1ZhbHVlIHJlc3VsdFZhbHVlID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT5z
Y3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChzY3JpcHQsIHRydWUpLmpzVmFsdWUoKSkgewogICAgICAg
ICBpZiAoKHNlcmlhbGl6ZWRSZXN1bHRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKG1fbWFpbkZyYW1lLT5qc0NvbnRleHQoKSwgdG9SZWYobV9tYWluRnJhbWUtPmNvcmVGcmFt
ZSgpLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xv
YmFsRXhlYygpLCByZXN1bHRWYWx1ZSksIDApKSkKICAgICAgICAgICAgIGRhdGFSZWZlcmVuY2Ug
PSBzZXJpYWxpemVkUmVzdWx0VmFsdWUtPmRhdGEoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0NoYW5nZUxvZwkocmV2aXNpb24gMTIwNTEwKQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA2LTE1ICBN
YXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2Nr
IHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8g
aW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhl
IGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdp
dGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIEFwaS9CbGFj
a0JlcnJ5R2xvYmFsLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6Y2xlYXJNZW1v
cnlDYWNoZXMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHA6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlUG9wdXBCbGFja0JlcnJ5OjppbnN0YWxsRG9tRnVuY3Rpb24pOgor
ICAgICAgICAqIFdlYktpdFN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0LmNwcDoKKyAgICAg
ICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJ
bmZvKToKKwogMjAxMi0wNi0xNSAgRWxpIEZpZGxlciAgPGVmaWRsZXJAcmltLmNvbT4KIAogICAg
ICAgICBbQmxhY2tCZXJyeV0gVXNlIHBsYXRmb3JtIGZvbnQgc2V0dGluZ3MgZm9yIHRoZSBzdGFu
ZGFyZCBzZXR0aW5ncy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmxhY2tC
ZXJyeUdsb2JhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0Fw
aS9CbGFja0JlcnJ5R2xvYmFsLmNwcAkocmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L0FwaS9CbGFja0JlcnJ5R2xvYmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDcgKzEwNSwxMCBAQCB2b2lkIGNsZWFyTWVtb3J5Q2FjaGVzKCkKICAgICBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6dXNlckludGVyZmFjZVRocmVhZE1lc3NhZ2VDbGllbnQoKS0+ZGlzcGF0Y2hN
ZXNzYWdlKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpjcmVhdGVGdW5jdGlvbkNhbGxNZXNzYWdlKGNs
ZWFyTWVtb3J5Q2FjaGVzSW5Db21wb3NpdGluZ1RocmVhZCkpOwogI2VuZGlmCiAKLSAgICBjb2xs
ZWN0SmF2YXNjcmlwdEdhcmJhZ2VOb3coKTsKKyAgICB7CisgICAgICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAgICAgICAgY29s
bGVjdEphdmFzY3JpcHRHYXJiYWdlTm93KCk7CisgICAgfQogCiAgICAgLy8gQ2xlYW4gY2FjaGVz
IGFmdGVyIEpTIGdhcmJhZ2UgY29sbGVjdGlvbiBiZWNhdXNlIEpTIEdDIGNhbgogICAgIC8vIGdl
bmVyYXRlIG1vcmUgZGVhZCByZXNvdXJjZXMuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViQ29yZVN1cHBvcnQvQ2xpZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ2xpZW50RXh0ZW5zaW9uLmNwcAko
cmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBw
b3J0L0NsaWVudEV4dGVuc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDExICs4NCwxMSBA
QCBzdGF0aWMgSlNTdGF0aWNWYWx1ZSBjbGllbnRFeHRlbnNpb25TdGF0CiAvLyBGSVhNRTogUmV2
aXNpdCB0aGUgY3JlYXRpb24gb2YgdGhpcyBjbGFzcyBhbmQgbWFrZSBzdXJlIHRoaXMgaXMgdGhl
IGJlc3Qgd2F5IHRvIGFwcHJvYWNoIGl0Lgogdm9pZCBhdHRhY2hFeHRlbnNpb25PYmplY3RUb0Zy
YW1lKEZyYW1lKiBmcmFtZSwgV2ViUGFnZUNsaWVudCogY2xpZW50KQogewotICAgIEpTQzo6SlNM
b2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAgSlNET01XaW5kb3cq
IHdpbmRvdyA9IGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdv
cmxkKCkpLT53aW5kb3coKTsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5n
bG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKwogICAgIEpT
Q29udGV4dFJlZiBzY3JpcHRDdHggPSB0b1JlZihleGVjKTsKIAogICAgIEpTQ2xhc3NEZWZpbml0
aW9uIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9QYWdlUG9wdXBCbGFja0JlcnJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvUGFn
ZVBvcHVwQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9QYWdlUG9wdXBCbGFja0JlcnJ5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIyLDEzICsxMjIsMTIgQEAgc3RhdGljIEpTU3RhdGljVmFsdWUgcG9wVXBF
eHRlbnNpb25TdGF0aQogCiB2b2lkIFBhZ2VQb3B1cEJsYWNrQmVycnk6Omluc3RhbGxEb21GdW5j
dGlvbihGcmFtZSogZnJhbWUpCiB7Ci0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VB
c3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRv
dyhmcmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogICAgIEFTU0VSVCh3aW5kb3cpOwog
CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKICAgICBB
U1NFUlQoZXhlYyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpT
Q29udGV4dFJlZiBjb250ZXh0ID0gOjp0b1JlZihleGVjKTsKICAgICBKU09iamVjdFJlZiBnbG9i
YWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydC5jcHAJKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydDo6c2NhbGVQYWdlQnkoCiAKIEpTVmFsdWVSZWYgRHVtcFJlbmRlclRyZWVTdXBwb3J0Ojpj
b21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
VmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZh
bHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDUxMCkKKysrIFNvdXJjZS9X
ZWJLaXQvZWZsL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDEy
LTA2LTE1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAg
ICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBK
U0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBh
c3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGlu
dGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAq
IGV3ay9ld2tfZnJhbWUuY3BwOgorICAgICAgICAoZXdrX2ZyYW1lX3NjcmlwdF9leGVjdXRlKToK
KyAgICAgICAgKiBld2svZXdrX3ZpZXcuY3BwOgorICAgICAgICAoZXdrX3ZpZXdfanNfb2JqZWN0
X2FkZCk6CisKKzIwMTItMDYtMTUgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxl
LmNvbT4KKworICAgICAgICBKU0xvY2sgc2hvdWxkIGJlIHBlci1KU0dsb2JhbERhdGEKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MTIzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWxsIG9mIHRoZXNlIGNo
YW5nZXMgd2VyZSBtYWRlIHRvIGNvbnZlcnQgdGhlIG9sZC1zdHlsZSBKU0xvY2sgc3RhdGVtZW50
cyB0byAKKyAgICAgICAgdGhlIG5ldyBKU0xvY2tIb2xkZXIgc3RhdGVtZW50cyB0aGF0IHRha2Ug
aW4gd2hhdGV2ZXIgSlMgY29udGV4dCB0aGUgY29kZSBpcyBhYm91dCAKKyAgICAgICAgdG8gaW50
ZXJhY3Qgd2l0aC4KKworICAgICAgICAqIGV3ay9ld2tfZnJhbWUuY3BwOgorICAgICAgICAoZXdr
X2ZyYW1lX3NjcmlwdF9leGVjdXRlKToKKyAgICAgICAgKiBld2svZXdrX3ZpZXcuY3BwOgorICAg
ICAgICAoZXdrX3ZpZXdfanNfb2JqZWN0X2FkZCk6CisKIDIwMTItMDYtMTUgIENocmlzdG9waGUg
RHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXSBFRkwn
cyBMYXlvdXRUZXN0Q29udHJvbGxlciBkb2VzIG5vdCBzdXBwb3J0IHRpdGxlVGV4dERpcmVjdGlv
bgpJbmRleDogU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAJKHJldmlzaW9uIDEyMDQ3OCkK
KysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NTUsOCArNDU1LDggQEAgY2hhciogZXdrX2ZyYW1lX3NjcmlwdF9leGVjdXRlKEV2YXNfT2Jq
ZQogICAgIGlmICghcmVzdWx0IHx8ICghcmVzdWx0LmlzQm9vbGVhbigpICYmICFyZXN1bHQuaXNT
dHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTQzo6
RXhlY1N0YXRlKiBleGVjID0gc21hcnREYXRhLT5mcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVj
dChXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIHJlc3VsdFN0cmluZyA9IFdlYkNvcmU6
OnVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAg
ICByZXR1cm4gc3RyZHVwKHJlc3VsdFN0cmluZy51dGY4KCkuZGF0YSgpKTsKICNlbHNlCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAJKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMjUsOCAr
NDAyNSw4IEBAIEVpbmFfQm9vbCBld2tfdmlld19qc19vYmplY3RfYWRkKEV2YXNfT2IKICAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgZmFsc2UpOwogICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIGZhbHNlKTsKIAot
ICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIFdl
YkNvcmU6OkpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KHByaXYtPm1haW5GcmFt
ZSwgV2ViQ29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2sod2luZG93LT5nbG9iYWxFeGVjKCkpOwogICAgIEpTQzo6QmluZGluZ3M6OlJvb3RP
YmplY3QqIHJvb3Q7CiAgICAgcm9vdCA9IHByaXYtPm1haW5GcmFtZS0+c2NyaXB0KCktPmJpbmRp
bmdSb290T2JqZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDUxMCkK
KysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDMxIEBACisyMDEyLTA2LTE1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVz
IHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAg
ICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlz
IGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHA6
CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdjQ291bnRKYXZhc2NyaXB0T2Jq
ZWN0cyk6CisKKzIwMTItMDYtMTUgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxl
LmNvbT4KKworICAgICAgICBKU0xvY2sgc2hvdWxkIGJlIHBlci1KU0dsb2JhbERhdGEKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MTIzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWxsIG9mIHRoZXNlIGNo
YW5nZXMgd2VyZSBtYWRlIHRvIGNvbnZlcnQgdGhlIG9sZC1zdHlsZSBKU0xvY2sgc3RhdGVtZW50
cyB0byAKKyAgICAgICAgdGhlIG5ldyBKU0xvY2tIb2xkZXIgc3RhdGVtZW50cyB0aGF0IHRha2Ug
aW4gd2hhdGV2ZXIgSlMgY29udGV4dCB0aGUgY29kZSBpcyBhYm91dCAKKyAgICAgICAgdG8gaW50
ZXJhY3Qgd2l0aC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0ay5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdjQ291bnRK
YXZhc2NyaXB0T2JqZWN0cyk6CisKIDIwMTItMDYtMTQgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxh
bGV4QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWRkIFRleHR1cmVNYXBwZXIgSW1hZ2VC
dWZmZXIgc3VwcG9ydCBhcyBhIGZhbGxiYWNrIGZyb20gdGhlIGhhcmR3YXJlIGFjY2VsZXJhdGVk
IHBhdGgKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAkocmV2aXNpb24gMTIwNDc4KQor
KysgU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAwLDcgKzYwMCw3IEBAIHZvaWQgRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrOjpnY0NvbGxlY3QKIAogdW5zaWduZWQgbG9uZyBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGs6OmdjQ291bnRKYXZhc2NyaXB0T2JqZWN0cygpCiB7Ci0gICAgSlNDOjpKU0xv
Y2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKIH0K
IApJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwNTEwKQorKysgU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMzIEBACisyMDEyLTA2
LTE1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xv
Y2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3Mg
aW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVy
YWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIERP
TS9XZWJET01PcGVyYXRpb25zLm1tOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBNaXNjL1dl
YkNvcmVTdGF0aXN0aWNzLm1tOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2Ny
aXB0T2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3Jp
cHRHbG9iYWxPYmplY3RzQ291bnRdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2
YVNjcmlwdFByb3RlY3RlZE9iamVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlz
dGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50XSk6CisgICAgICAgICgr
W1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzXSk6
CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRz
XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIHNob3VsZFByaW50RXhjZXB0aW9uc10p
OgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBzZXRTaG91bGRQcmludEV4Y2VwdGlvbnM6
XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIG1lbW9yeVN0YXRpc3RpY3NdKToKKyAg
ICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFJlZmVyZW5jZWRPYmplY3RzQ291
bnRdKToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHkubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZh
bHVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omlu
dm9rZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52
b2tlRGVmYXVsdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpnZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6c2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OnJlbW92ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5OjpoYXNNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6YWRkVmFsdWVUb0FycmF5KToKKyAgICAgICAgKFdlYktp
dDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVj
U3RhdGUpOgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW06Cisg
ICAgICAgIChXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6d2FudHNBbGxTdHJlYW1zKToKKyAgICAg
ICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKC1bV2ViTmV0
c2NhcGVQbHVnaW5WaWV3IHNlbmRFdmVudDppc0RyYXdSZWN0Ol0pOgorICAgICAgICAoLVtXZWJO
ZXRzY2FwZVBsdWdpblZpZXcgcHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5nZV0pOgorICAgICAg
ICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc2V0V2luZG93SWZOZWNlc3NhcnldKToKKyAgICAg
ICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplY3Rd
KToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGdldEZvcm1WYWx1ZTpdKToKKyAg
ICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGV2YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJl
cXVlc3Q6XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyB3ZWJGcmFtZTpkaWRG
aW5pc2hMb2FkV2l0aFJlYXNvbjpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3
IGxvYWRQbHVnaW5SZXF1ZXN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcg
X3ByaW50ZWRQbHVnaW5CaXRtYXBdKToKKyAgICAgICAgKiBQbHVnaW5zL1dlYlBsdWdpbkNvbnRy
b2xsZXIubW06CisgICAgICAgICgrW1dlYlBsdWdpbkNvbnRyb2xsZXIgcGx1Z0luVmlld1dpdGhB
cmd1bWVudHM6ZnJvbVBsdWdpblBhY2thZ2U6XSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRy
b2xsZXIgc3RvcE9uZVBsdWdpbjpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxlciBk
ZXN0cm95T25lUGx1Z2luOl0pOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIHN0YXJ0
QWxsUGx1Z2luc10pOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIGFkZFBsdWdpbjpd
KToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBf
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6Zm9yY2VVc2VyR2VzdHVyZTpd
KToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9t
U3RyaW5nOndpdGhHbG9iYWxPYmplY3Q6aW5TY3JpcHRXb3JsZDpdKToKKyAgICAgICAgKiBXZWJW
aWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW06CisgICAgICAgICgtW1dlYlNjcmlwdENhbGxG
cmFtZSBzY29wZUNoYWluXSk6CisgICAgICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBldmFsdWF0
ZVdlYlNjcmlwdDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgr
W1dlYlZpZXcgX3JlcG9ydEV4Y2VwdGlvbjppbkNvbnRleHQ6XSk6CisgICAgICAgICgtW1dlYlZp
ZXcgYWVEZXNjQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6XSk6CisgICAgICAgICgt
W1dlYlZpZXcgX2NvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbzpmb3JFbGVtZW50Ol0p
OgorCisyMDEyLTA2LTE1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsbCBvZiB0aGVzZSBjaGFuZ2Vz
IHdlcmUgbWFkZSB0byBjb252ZXJ0IHRoZSBvbGQtc3R5bGUgSlNMb2NrIHN0YXRlbWVudHMgdG8g
CisgICAgICAgIHRoZSBuZXcgSlNMb2NrSG9sZGVyIHN0YXRlbWVudHMgdGhhdCB0YWtlIGluIHdo
YXRldmVyIEpTIGNvbnRleHQgdGhlIGNvZGUgaXMgYWJvdXQgCisgICAgICAgIHRvIGludGVyYWN0
IHdpdGguCisKKyAgICAgICAgKiBET00vV2ViRE9NT3BlcmF0aW9ucy5tbToKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgICogTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAgICAgICAgKCtbV2Vi
Q29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdE9iamVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJD
b3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50XSk6CisgICAgICAgICgr
W1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnRdKToKKyAg
ICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3RlZEdsb2JhbE9iamVj
dHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVj
dGVkT2JqZWN0VHlwZUNvdW50c10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZh
U2NyaXB0T2JqZWN0VHlwZUNvdW50c10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBz
aG91bGRQcmludEV4Y2VwdGlvbnNdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3Mgc2V0
U2hvdWxkUHJpbnRFeGNlcHRpb25zOl0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBt
ZW1vcnlTdGF0aXN0aWNzXSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3Jp
cHRSZWZlcmVuY2VkT2JqZWN0c0NvdW50XSk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6Omludm9rZURlZmF1bHQpOgorICAgICAgICAoV2ViS2l0OjpOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0
OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdl
YktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmVQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aGFzTWV0aG9kKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjplbnVtZXJhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmFkZFZhbHVlVG9B
cnJheSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bW92
ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKToKKyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNj
YXBlUGx1Z2luU3RyZWFtLm1tOgorICAgICAgICAoV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06Ondh
bnRzQWxsU3RyZWFtcyk6CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcu
bW06CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzZW5kRXZlbnQ6aXNEcmF3UmVj
dDpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHByaXZhdGVCcm93c2luZ01v
ZGVEaWRDaGFuZ2VdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHNldFdpbmRv
d0lmTmVjZXNzYXJ5XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBjcmVhdGVQ
bHVnaW5TY3JpcHRhYmxlT2JqZWN0XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmll
dyBnZXRGb3JtVmFsdWU6XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBldmFs
dWF0ZUphdmFTY3JpcHRQbHVnaW5SZXF1ZXN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBs
dWdpblZpZXcgd2ViRnJhbWU6ZGlkRmluaXNoTG9hZFdpdGhSZWFzb246XSk6CisgICAgICAgICgt
W1dlYk5ldHNjYXBlUGx1Z2luVmlldyBsb2FkUGx1Z2luUmVxdWVzdDpdKToKKyAgICAgICAgKC1b
V2ViTmV0c2NhcGVQbHVnaW5WaWV3IF9wcmludGVkUGx1Z2luQml0bWFwXSk6CisgICAgICAgICog
UGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tOgorICAgICAgICAoK1tXZWJQbHVnaW5Db250
cm9sbGVyIHBsdWdJblZpZXdXaXRoQXJndW1lbnRzOmZyb21QbHVnaW5QYWNrYWdlOl0pOgorICAg
ICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIHN0b3BPbmVQbHVnaW46XSk6CisgICAgICAgICgt
W1dlYlBsdWdpbkNvbnRyb2xsZXIgZGVzdHJveU9uZVBsdWdpbjpdKToKKyAgICAgICAgKC1bV2Vi
UGx1Z2luQ29udHJvbGxlciBzdGFydEFsbFBsdWdpbnNdKToKKyAgICAgICAgKC1bV2ViUGx1Z2lu
Q29udHJvbGxlciBhZGRQbHVnaW46XSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToK
KyAgICAgICAgKC1bV2ViRnJhbWUgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3Ry
aW5nOmZvcmNlVXNlckdlc3R1cmU6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzp3aXRoR2xvYmFsT2JqZWN0OmluU2NyaXB0V29y
bGQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tOgorICAg
ICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgc2NvcGVDaGFpbl0pOgorICAgICAgICAoLVtXZWJT
Y3JpcHRDYWxsRnJhbWUgZXZhbHVhdGVXZWJTY3JpcHQ6XSk6CisgICAgICAgICogV2ViVmlldy9X
ZWJWaWV3Lm1tOgorICAgICAgICAoK1tXZWJWaWV3IF9yZXBvcnRFeGNlcHRpb246aW5Db250ZXh0
Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IGFlRGVzY0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9t
U3RyaW5nOl0pOgorICAgICAgICAoLVtXZWJWaWV3IF9jb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlz
aXRlZEluZm86Zm9yRWxlbWVudDpdKToKKwogMjAxMi0wNi0xNCAgSmlhIFB1ICA8anB1QGFwcGxl
LmNvbT4KIAogICAgICAgICBNYXJrIHRleHQgd2l0aCB0ZXh0IGFsdGVybmF0aXZlIHdpdGggYmx1
ZSB1bmRlcmxpbmUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9ET00vV2ViRE9NT3BlcmF0aW9u
cy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9ET00vV2ViRE9NT3BlcmF0aW9u
cy5tbQkocmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYktpdC9tYWMvRE9NL1dlYkRPTU9w
ZXJhdGlvbnMubW0JKHdvcmtpbmcgY29weSkKQEAgLTY3LDggKzY3LDkgQEAgKyAoRE9NRWxlbWVu
dCAqKV9ET01FbGVtZW50RnJvbUpTQ29udGV4dAogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBy
ZXR1cm4ga2l0KHRvRWxlbWVudCh0b0pTKHRvSlMoY29udGV4dCksIHZhbHVlKSkpOworICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CisgICAgcmV0dXJuIGtpdCh0b0VsZW1lbnQodG9KUyhleGVjLCB2YWx1ZSkpKTsKIH0KIAog
LSAoTlNTdHJpbmcgKilfbWFya2VyVGV4dEZvckxpc3RJdGVtCkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0JKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTU4LDMxICs1OCwzMSBAQCArIChOU0FycmF5ICopc3RhdGlzdGljcwogCiArIChzaXplX3Qp
amF2YVNjcmlwdE9iamVjdHNDb3VudAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
LT5oZWFwLm9iamVjdENvdW50KCk7CiB9CiAKICsgKHNpemVfdClqYXZhU2NyaXB0R2xvYmFsT2Jq
ZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuZ2xvYmFs
T2JqZWN0Q291bnQoKTsKIH0KIAogKyAoc2l6ZV90KWphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3Rz
Q291bnQKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAg
cmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRP
YmplY3RDb3VudCgpOwogfQogCiArIChzaXplX3QpamF2YVNjcmlwdFByb3RlY3RlZEdsb2JhbE9i
amVjdHNDb3VudAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3Rl
Y3RlZEdsb2JhbE9iamVjdENvdW50KCk7CiB9CiAKICsgKE5TQ291bnRlZFNldCAqKWphdmFTY3Jp
cHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogICAgIAogICAgIE5TQ291bnRlZFNldCAqcmVzdWx0ID0gW05TQ291
bnRlZFNldCBzZXRdOwogCkBAIC05Nyw3ICs5Nyw3IEBAICsgKE5TQ291bnRlZFNldCAqKWphdmFT
Y3JpcHRQcm90ZWN0ZWRPYmoKIAogKyAoTlNDb3VudGVkU2V0ICopamF2YVNjcmlwdE9iamVjdFR5
cGVDb3VudHMKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAg
ICAgCiAgICAgTlNDb3VudGVkU2V0ICpyZXN1bHQgPSBbTlNDb3VudGVkU2V0IHNldF07CiAKQEAg
LTE2NywxMyArMTY3LDEzIEBAICsgKHNpemVfdClnbHlwaFBhZ2VDb3VudAogCiArIChCT09MKXNo
b3VsZFByaW50RXhjZXB0aW9ucwogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICByZXR1cm4gQ29uc29sZTo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKCk7CiB9
CiAKICsgKHZvaWQpc2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zOihCT09MKXByaW50CiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIENvbnNvbGU6OnNldFNo
b3VsZFByaW50RXhjZXB0aW9ucyhwcmludCk7CiB9CiAKQEAgLTIwMSw3ICsyMDEsNyBAQCArIChO
U0RpY3Rpb25hcnkgKiltZW1vcnlTdGF0aXN0aWNzCiB7CiAgICAgV1RGOjpGYXN0TWFsbG9jU3Rh
dGlzdGljcyBmYXN0TWFsbG9jU3RhdGlzdGljcyA9IFdURjo6ZmFzdE1hbGxvY1N0YXRpc3RpY3Mo
KTsKICAgICAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAg
c2l6ZV90IGhlYXBTaXplID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFw
LnNpemUoKTsKICAgICBzaXplX3QgaGVhcEZyZWUgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCktPmhlYXAuY2FwYWNpdHkoKSAtIGhlYXBTaXplOwogICAgIEdsb2JhbE1lbW9yeVN0
YXRpc3RpY3MgZ2xvYmFsTWVtb3J5U3RhdHMgPSBnbG9iYWxNZW1vcnlTdGF0aXN0aWNzKCk7CkBA
IC0yNDUsNyArMjQ1LDcgQEAgKyAoc2l6ZV90KWphdmFTY3JpcHROb0dDQWxsb3dlZE9iamVjdHND
bwogCiArIChzaXplX3QpamF2YVNjcmlwdFJlZmVyZW5jZWRPYmplY3RzQ291bnQKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3Ry
ZWFtLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2Nh
cGVQbHVnaW5TdHJlYW0ubW0JKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0JKHdvcmtpbmcgY29weSkKQEAgLTM2
OCw3ICszNjgsNyBAQCBib29sIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtOjp3YW50c0FsbFN0CiAg
ICAgTlBFcnJvciBlcnJvcjsKICAgICB7CiAgICAgICAgIFBsdWdpblN0b3BEZWZlcnJlciBkZWZl
cnJlcihtX3BsdWdpblZpZXcuZ2V0KCkpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBlcnJvciA9IG1fcGx1Z2luRnVuY3MtPmdldHZh
bHVlKG1fcGx1Z2luLCBOUFBWcGx1Z2luV2FudHNBbGxOZXR3b3JrU3RyZWFtcywgJnZhbHVlKTsK
ICAgICB9CiAgICAgaWYgKGVycm9yICE9IE5QRVJSX05PX0VSUk9SKQpJbmRleDogU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0JKHJldmlz
aW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVn
aW5WaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02NjksNyArNjY5LDcgQEAgLSAoQk9PTClzZW5k
RXZlbnQ6KHZvaWQqKWV2ZW50IGlzRHJhd1JlYwogICAgIC8vIFNldCB0aGUgcGx1Z2luQWxsb3dQ
b3B1cCBmbGFnLgogICAgIEFTU0VSVChfZXZlbnRIYW5kbGVyKTsKICAgICB7Ci0gICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIFVzZXJHZXN0
dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoX2V2ZW50SGFuZGxlci0+Y3VycmVudEV2ZW50
SXNVc2VyR2VzdHVyZSgpID8gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IFBvc3Np
Ymx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKICAgICAgICAgYWNjZXB0ZWRFdmVudCA9IFtfcGx1
Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmV2ZW50KHBsdWdpbiwgZXZlbnQpOwogICAg
IH0KQEAgLTg1MCw3ICs4NTAsNyBAQCAtICh2b2lkKXByaXZhdGVCcm93c2luZ01vZGVEaWRDaGFu
Z2UKIAogICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgaWYgKFtf
cGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnNldHZhbHVlKQogICAgICAgICAgICAg
W19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+c2V0dmFsdWUocGx1Z2luLCBOUE5W
cHJpdmF0ZU1vZGVCb29sLCAmdmFsdWUpOwogICAgIH0KQEAgLTk5MSw3ICs5OTEsNyBAQCAtICh2
b2lkKXNldFdpbmRvd0lmTmVjZXNzYXJ5CiAgICAgICAgIGluU2V0V2luZG93ID0gWUVTOyAgICAg
ICAgCiAgICAgICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgICAgICB7Ci0g
ICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAgICAgICAgIG5wRXJyID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+
c2V0d2luZG93KHBsdWdpbiwgJndpbmRvdyk7CiAgICAgICAgIH0KICAgICAgICAgW3NlbGYgZGlk
Q2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTE0NDQsNyArMTQ0NCw3IEBAIC0gKE5QT2JqZWN0ICop
Y3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamUKICAgICBOUEVycm9yIGVycm9yOwogICAgIFtzZWxm
IHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgZXJyb3IgPSBbX3BsdWdpblBhY2th
Z2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5nZXR2YWx1ZShwbHVnaW4sIE5QUFZwbHVnaW5TY3JpcHRh
YmxlTlBPYmplY3QsICZ2YWx1ZSk7CiAgICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5j
dGlvbl07CkBAIC0xNDYzLDcgKzE0NjMsNyBAQCAtIChCT09MKWdldEZvcm1WYWx1ZTooTlNTdHJp
bmcgKiopdmFsdWUKICAgICBOUEVycm9yIGVycm9yOwogICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0lu
RnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICAgICAgICAgZXJyb3IgPSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2lu
RnVuY3NdLT5nZXR2YWx1ZShwbHVnaW4sIE5QUFZmb3JtVmFsdWUsICZidWZmZXIpOwogICAgIH0K
ICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTU5NSw3ICsxNTk1LDcgQEAg
LSAodm9pZClldmFsdWF0ZUphdmFTY3JpcHRQbHVnaW5SZXF1ZXN0OgogICAgICAgICBpZiAoW0pT
UGx1Z2luUmVxdWVzdCBzZW5kTm90aWZpY2F0aW9uXSkgewogICAgICAgICAgICAgW3NlbGYgd2ls
bENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICAg
ICAgICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnVybG5vdGlmeShwbHVn
aW4sIFtVUkwgX3dlYl9VUkxDU3RyaW5nXSwgTlBSRVNfRE9ORSwgW0pTUGx1Z2luUmVxdWVzdCBu
b3RpZnlEYXRhXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBbc2VsZiBkaWRDYWxsUGx1
Z0luRnVuY3Rpb25dOwpAQCAtMTYyNyw3ICsxNjI3LDcgQEAgLSAodm9pZCl3ZWJGcmFtZTooV2Vi
RnJhbWUgKil3ZWJGcmFtZSBkaQogICAgICAgICAKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1
bmN0aW9uXTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAgICAgICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnVy
bG5vdGlmeShwbHVnaW4sIFtbW3BsdWdpblJlcXVlc3QgcmVxdWVzdF0gVVJMXSBfd2ViX1VSTENT
dHJpbmddLCByZWFzb24sIFtwbHVnaW5SZXF1ZXN0IG5vdGlmeURhdGFdKTsKICAgICB9CiAgICAg
W3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTE2NzEsNyArMTY3MSw3IEBAIC0gKHZv
aWQpbG9hZFBsdWdpblJlcXVlc3Q6KFdlYlBsdWdpblJlcXUKICAgICAgICAgICAgICAgICBpZiAo
W3BsdWdpblJlcXVlc3Qgc2VuZE5vdGlmaWNhdGlvbl0pIHsKICAgICAgICAgICAgICAgICAgICAg
W3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgW19wbHVnaW5Q
YWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJsbm90aWZ5KHBsdWdpbiwgW1tbcGx1Z2luUmVx
dWVzdCByZXF1ZXN0XSBVUkxdIF93ZWJfVVJMQ1N0cmluZ10sIE5QRVJSX0dFTkVSSUNfRVJST1Is
IFtwbHVnaW5SZXF1ZXN0IG5vdGlmeURhdGFdKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMjQ3MSw3
ICsyNDcxLDcgQEAgLSAoTlNCaXRtYXBJbWFnZVJlcCAqKV9wcmludGVkUGx1Z2luQml0bQogICAg
IC8vIFRlbGwgdGhlIHBsdWdpbiB0byBwcmludCBpbnRvIHRoZSBHV29ybGQKICAgICBbc2VsZiB3
aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBw
bHVnaW5GdW5jc10tPnByaW50KHBsdWdpbiwgJm5wUHJpbnQpOwogICAgIH0KICAgICBbc2VsZiBk
aWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9X
ZWJQbHVnaW5Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1Bs
dWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5tbQkocmV2aXNpb24gMTIwNDc4KQorKysgU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC05NiwxMCArOTYsMTAgQEAgKyAoTlNWaWV3ICopcGx1Z0luVmlld1dpdGhBcmd1bWVudHM6
KE5TRAogICAgIE5TVmlldyAqdmlldyA9IG5pbDsKIAogICAgIGlmIChbdmlld0ZhY3RvcnkgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czopXSkgewot
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAg
ICB2aWV3ID0gW3ZpZXdGYWN0b3J5IHBsdWdJblZpZXdXaXRoQXJndW1lbnRzOmFyZ3VtZW50c107
CiAgICAgfSBlbHNlIGlmIChbdmlld0ZhY3RvcnkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihwbHVnaW5WaWV3V2l0aEFyZ3VtZW50czopXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICB2aWV3ID0gW3ZpZXdGYWN0b3J5IHBs
dWdpblZpZXdXaXRoQXJndW1lbnRzOmFyZ3VtZW50c107CiAgICAgfQogICAgIApAQCAtMTQ5LDEw
ICsxNDksMTAgQEAgLSAodm9pZClkZWFsbG9jCiAtICh2b2lkKXN0b3BPbmVQbHVnaW46KE5TVmll
dyAqKXZpZXcKIHsKICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3
ZWJQbHVnSW5TdG9wKV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICAgICAgICAgW3ZpZXcgd2ViUGx1Z0luU3RvcF07CiAgICAgfSBlbHNlIGlm
IChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpblN0b3ApXSkgewotICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBb
dmlldyBwbHVnaW5TdG9wXTsKICAgICB9CiB9CkBAIC0xNjAsMTAgKzE2MCwxMCBAQCAtICh2b2lk
KXN0b3BPbmVQbHVnaW46KE5TVmlldyAqKXZpZXcKIC0gKHZvaWQpZGVzdHJveU9uZVBsdWdpbjoo
TlNWaWV3ICopdmlldwogewogICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKHdlYlBsdWdJbkRlc3Ryb3kpXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBbdmlldyB3ZWJQbHVnSW5EZXN0cm95XTsKICAg
ICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luRGVz
dHJveSldKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgICAgIFt2aWV3IHBsdWdpbkRlc3Ryb3ldOwogICAgIH0KIH0KQEAgLTE4MCwxMCAr
MTgwLDEwIEBAIC0gKHZvaWQpc3RhcnRBbGxQbHVnaW5zCiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKSB7CiAgICAgICAgIGlkIGFWaWV3ID0gW192aWV3cyBvYmplY3RBdEluZGV4
OmldOwogICAgICAgICBpZiAoW2FWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2Vi
UGx1Z0luU3RhcnQpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBbYVZpZXcgd2ViUGx1Z0luU3RhcnRdOwog
ICAgICAgICB9IGVsc2UgaWYgKFthVmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBs
dWdpblN0YXJ0KV0pIHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgW2FWaWV3IHBsdWdpblN0YXJ0XTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTI1MiwxMCArMjUyLDEwIEBAIC0gKHZvaWQpYWRkUGx1Z2luOihOU1Zp
ZXcgKil2aWV3CiAKICAgICAgICAgTE9HKFBsdWdpbnMsICJpbml0aWFsaXppbmcgcGx1Zy1pbiAl
QCIsIHZpZXcpOwogICAgICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cih3ZWJQbHVnSW5Jbml0aWFsaXplKV0pIHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAg
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgW3ZpZXcgd2ViUGx1Z0lu
SW5pdGlhbGl6ZV07CiAgICAgICAgIH0gZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihwbHVnaW5Jbml0aWFsaXplKV0pIHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgW3ZpZXcgcGx1
Z2luSW5pdGlhbGl6ZV07CiAgICAgICAgIH0KIApAQCAtMjY1LDE1ICsyNjUsMTUgQEAgLSAodm9p
ZClhZGRQbHVnaW46KE5TVmlldyAqKXZpZXcKICAgICAgICAgaWYgKF9zdGFydGVkKSB7CiAgICAg
ICAgICAgICBMT0coUGx1Z2lucywgInN0YXJ0aW5nIHBsdWctaW4gJUAiLCB2aWV3KTsKICAgICAg
ICAgICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJblN0
YXJ0KV0pIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICAgICAgW3ZpZXcgd2ViUGx1Z0luU3RhcnRd
OwogICAgICAgICAgICAgfSBlbHNlIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKHBsdWdpblN0YXJ0KV0pIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
ICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICAgICAgW3ZpZXcgcGx1
Z2luU3RhcnRdOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
W3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRDb250YWluaW5nV2luZG93Oild
KSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgICAgIFt2aWV3IHNldENvbnRhaW5pbmdXaW5kb3c6
W19kb2N1bWVudFZpZXcgd2luZG93XV07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9O
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5t
bQkod29ya2luZyBjb3B5KQpAQCAtODY3LDggKzg2Nyw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpldmFsdWEKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIAorICAg
IEpTTG9ja0hvbGRlciBsb2NrKHBsdWdpbldvcmxkKCktPmdsb2JhbERhdGEoKSk7CiAgICAgU3Ry
b25nPEpTR2xvYmFsT2JqZWN0PiBnbG9iYWxPYmplY3QoKnBsdWdpbldvcmxkKCktPmdsb2JhbERh
dGEoKSwgZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCkBAIC05MDQs
NyArOTAzLDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNj
cmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmplY3QtPmdldChleGVjLCBtZXRob2RO
YW1lKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdl
dENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CkBAIC05MzcsNyArOTM2LDcgQEAgYm9vbCBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmpl
Y3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOyAgICAKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsgICAgCiAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBvYmplY3QtPm1l
dGhvZFRhYmxlKCktPmdldENhbGxEYXRhKG9iamVjdCwgY2FsbERhdGEpOwogICAgIGlmIChjYWxs
VHlwZSA9PSBDYWxsVHlwZU5vbmUpCkBAIC05NjksNyArOTY4LDcgQEAgYm9vbCBOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OmNvbnN0cgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2lu
V29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgQ29uc3RydWN0RGF0
YSBjb25zdHJ1Y3REYXRhOwogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IG9iamVj
dC0+bWV0aG9kVGFibGUoKS0+Z2V0Q29uc3RydWN0RGF0YShvYmplY3QsIGNvbnN0cnVjdERhdGEp
OwpAQCAtMTAwMiw3ICsxMDAxLDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OmdldFBybwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4
ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAgICAKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+
Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgCiAgICAgbWFyc2hhbFZhbHVlKGV4ZWMsIHZh
bHVlLCByZXN1bHREYXRhLCByZXN1bHRMZW5ndGgpOwpAQCAtMTAyMyw3ICsxMDIyLDcgQEAgYm9v
bCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldFBybwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxP
YmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOyAgICAKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsgICAg
CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAg
ICAgCiAgICAgbWFyc2hhbFZhbHVlKGV4ZWMsIHZhbHVlLCByZXN1bHREYXRhLCByZXN1bHRMZW5n
dGgpOwpAQCAtMTA0Nyw3ICsxMDQ2LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OnNldFBybwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2Jh
bEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAgICAKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsgICAgCiAKICAgICBKU1ZhbHVlIHZhbHVlID0gZGVt
YXJzaGFsVmFsdWUoZXhlYywgdmFsdWVEYXRhLCB2YWx1ZUxlbmd0aCk7CiAgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3Q7CkBAIC0xMDczLDcgKzEwNzIsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6c2V0UHJvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgp
KS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICAKICAgICBKU1ZhbHVl
IHZhbHVlID0gZGVtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWVEYXRhLCB2YWx1ZUxlbmd0aCk7CiAg
ICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KG9iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgZmFsc2UpOwpAQCAtMTA5OCwxMiArMTA5NywxMiBAQCBib29sIE5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmVtb3ZlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdp
bldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAg
ICAgaWYgKCFvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpIHsKICAgICAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIG9iamVj
dC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7ICAgIAogICAgIHJldHVybiB0cnVlOwpA
QCAtMTEyNSwxMiArMTEyNCwxMiBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
cmVtb3ZlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhl
YygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghb2JqZWN0LT5oYXNQ
cm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5QnlJbmRleChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsgICAgCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTk2LDcgKzEx
OTUsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aGFzTWV0CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0
KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgSlNWYWx1ZSBmdW5jID0gb2JqZWN0LT5nZXQoZXhlYywgbWV0aG9kTmFtZSk7CiAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gIWZ1bmMuaXNVbmRlZmluZWQo
KTsKQEAgLTEyMTgsNyArMTIxNyw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
OjplbnVtZXIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxF
eGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5h
bWVzKGV4ZWMpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyhv
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwpA
QCAtMTI2Miw3ICsxMjYxLDcgQEAgc3RhdGljIGJvb2wgZ2V0T2JqZWN0SUQoTmV0c2NhcGVQbHVn
aW5JbgogICAgIAogdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmFkZFZhbHVlVG9B
cnJheShOU011dGFibGVBcnJheSAqYXJyYXksIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKICAgICAg
ICAgW2FycmF5IGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpTdHJpbmdWYWx1ZVR5
cGVdXTsKQEAgLTE2NzIsNyArMTY3MSw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5Ojptb3ZlR2wKICAgICAgICAgcmV0dXJuOwogCiAgICAgewotICAgICAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBzdHJpbmdUb1VT
dHJpbmcoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkpKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTU5Nyw4ICs1
OTcsOCBAQCAtIChOU1N0cmluZyAqKV9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyCiAgICAgaWYg
KCFyZXN1bHQgfHwgKCFyZXN1bHQuaXNCb29sZWFuKCkgJiYgIXJlc3VsdC5pc1N0cmluZygpICYm
ICFyZXN1bHQuaXNOdW1iZXIoKSkpCiAgICAgICAgIHJldHVybiBAIiI7CiAKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0g
X3ByaXZhdGUtPmNvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChtYWluVGhyZWFkTm9y
bWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcocmVzdWx0LnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSk7CiB9CiAKQEAgLTExMjMsOCArMTEyMyw4IEBAIC0gKE5TU3RyaW5nICopX3N0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3IKICAgICBpZiAoIXJlc3VsdCB8fCAoIXJlc3VsdC5pc0Jv
b2xlYW4oKSAmJiAhcmVzdWx0LmlzU3RyaW5nKCkgJiYgIXJlc3VsdC5pc051bWJlcigpKSkKICAg
ICAgICAgcmV0dXJuIEAiIjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBhbnlXb3JsZEdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgcmV0dXJu
IHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIH0K
IApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVi
dWdEZWxlZ2F0ZS5tbQkocmV2aXNpb24gMTIwNDc4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsOSAr
MTc0LDkgQEAgLSAoTlNBcnJheSAqKXNjb3BlQ2hhaW4KICAgICBpZiAoIV9wcml2YXRlLT5kZWJ1
Z2dlckNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5XTsKIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAKICAgICBTY29wZUNoYWluTm9kZSog
c2NvcGVDaGFpbiA9IF9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjb3BlQ2hhaW4tPmdsb2JhbERhdGEpOwogICAgIGlmICgh
c2NvcGVDaGFpbi0+bmV4dCkgIC8vIGdsb2JhbCBmcmFtZQogICAgICAgICByZXR1cm4gW05TQXJy
YXkgYXJyYXlXaXRoT2JqZWN0Ol9wcml2YXRlLT5nbG9iYWxPYmplY3RdOwogCkBAIC0yMjksMTMg
KzIyOSwxMyBAQCAtIChpZClldmFsdWF0ZVdlYlNjcmlwdDooTlNTdHJpbmcgKilzY3JpCiAgICAg
aWYgKCFfcHJpdmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAgLy8gSWYgdGhp
cyBpcyB0aGUgZ2xvYmFsIGNhbGwgZnJhbWUgYW5kIHRoZXJlIGlzIG5vIGR5bmFtaWMgZ2xvYmFs
IG9iamVjdCwKICAgICAvLyBEYXNoY29kZSBpcyBhdHRlbXB0aW5nIHRvIGV4ZWN1dGUgSlMgaW4g
dGhlIGV2YWx1YXRvciB1c2luZyBhIHN0YWxlCiAgICAgLy8gV2ViU2NyaXB0Q2FsbEZyYW1lLiBJ
bnN0ZWFkLCB3ZSBuZWVkIHRvIHNldCB0aGUgZHluYW1pYyBnbG9iYWwgb2JqZWN0CiAgICAgLy8g
YW5kIGV2YWx1YXRlIHRoZSBKUyBpbiB0aGUgZ2xvYmFsIG9iamVjdCdzIGdsb2JhbCBjYWxsIGZy
YW1lLgogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBfcHJpdmF0ZS0+ZGVidWdn
ZXItPmdsb2JhbE9iamVjdCgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRGF0YSgpKTsKKwogICAgIGlmIChzZWxmID09IF9wcml2YXRlLT5kZWJ1Z2dlci0+Z2xv
YmFsQ2FsbEZyYW1lKCkgJiYgIWdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9i
YWxPYmplY3QpIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IF9wcml2
YXRlLT5kZWJ1Z2dlci0+Z2xvYmFsT2JqZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDEyMDQ3OCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTgxLDggKzU4MSw4IEBAICsgKHZv
aWQpX3JlcG9ydEV4Y2VwdGlvbjooSlNWYWx1ZVJlZilleGMKICAgICBpZiAoIWV4Y2VwdGlvbiB8
fCAhY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlY1N0YXRlID0gdG9KUyhjb250
ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjU3RhdGUpOwogCiAgICAgLy8gTWFrZSBz
dXJlIHRoZSBjb250ZXh0IGhhcyBhIERPTVdpbmRvdyBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2Ug
dGhpcyBjb250ZXh0IGRpZG4ndCBvcmlnaW5hdGUgZnJvbSBhIFdlYlZpZXcuCiAgICAgaWYgKCF0
b0pTRE9NV2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkKQEAgLTQ4NDEs
NyArNDg0MSw3IEBAIC0gKE5TQXBwbGVFdmVudERlc2NyaXB0b3IgKilhZURlc2NCeUV2YWwKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGNvcmVGcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoc2Ny
aXB0LCB0cnVlKS5qc1ZhbHVlKCk7CiAgICAgaWYgKCFyZXN1bHQpIC8vIEZJWE1FOiBwYXNzIGVy
cm9ycwogICAgICAgICByZXR1cm4gMDsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2Jh
bE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSk7CiAgICAgcmV0
dXJuIGFlRGVzY0Zyb21KU1ZhbHVlKGNvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCht
YWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSwgcmVzdWx0KTsKIH0KIApAQCAt
NjU1MCw4ICs2NTUwLDggQEAgLSAodm9pZClfbm90aWZpY2F0aW9uc0RpZENsb3NlOihOU0FycmF5
IAogCiAtIChKU1ZhbHVlUmVmKV9jb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm86KEpT
Q29udGV4dFJlZiljb250ZXh0IGZvckVsZW1lbnQ6KEpTVmFsdWVSZWYpdmFsdWUKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgaWYgKCF2
YWx1ZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogICAg
IEpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYktp
dC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDEyMDUxMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTItMDYtMTUgIE1hcmsgSGFobmVuYmVyZyAgPG1o
YWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBKU0xvY2sgc2hvdWxkIGJlIHBlci1KU0ds
b2JhbERhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg5MTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q2hhbmdlZCBhbGwgc2l0ZXMgdGhhdCB1c2VkIEpTTG9jayB0byBpbnN0ZWFkIHVzZSB0aGUgbmV3
IEpTTG9ja0hvbGRlcgorICAgICAgICBhbmQgcGFzcyBpbiB0aGUgY29ycmVjdCBKUyBjb250ZXh0
IHRoYXQgdGhlIGNvZGUgaXMgYWJvdXQgdG8gaW50ZXJhY3Qgd2l0aCB0aGF0IAorICAgICAgICBu
ZWVkcyBwcm90ZWN0aW9uLgorCisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAg
IChRV2ViRnJhbWVQcml2YXRlOjphZGRRdFNlbmRlclRvR2xvYmFsT2JqZWN0KToKKyAgICAgICAg
KFFXZWJGcmFtZTo6YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHA6CisgICAgICAgIChEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KToKKyAgICAgICAgKER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldEludGVybmFsc09iamVjdCk6CisKKzIwMTItMDYtMTUg
IE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBKU0xv
Y2sgc2hvdWxkIGJlIHBlci1KU0dsb2JhbERhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWxsIG9mIHRoZXNlIGNoYW5nZXMgd2VyZSBtYWRlIHRvIGNv
bnZlcnQgdGhlIG9sZC1zdHlsZSBKU0xvY2sgc3RhdGVtZW50cyB0byAKKyAgICAgICAgdGhlIG5l
dyBKU0xvY2tIb2xkZXIgc3RhdGVtZW50cyB0aGF0IHRha2UgaW4gd2hhdGV2ZXIgSlMgY29udGV4
dCB0aGUgY29kZSBpcyBhYm91dCAKKyAgICAgICAgdG8gaW50ZXJhY3Qgd2l0aC4KKworICAgICAg
ICAqIEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6YWRkUXRT
ZW5kZXJUb0dsb2JhbE9iamVjdCk6CisgICAgICAgIChRV2ViRnJhbWU6OmFkZFRvSmF2YVNjcmlw
dFdpbmRvd09iamVjdCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmluamVjdElu
dGVybmFsc09iamVjdCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRJ
bnRlcm5hbHNPYmplY3QpOgorCiAyMDEyLTA2LTEzICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhh
dXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIFJlbW92ZSBkZXBlbmRlbmN5IHRvIFF0
U2NyaXB0IGZvciB0aGUgUXQgNSBidWlsZApJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YmZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUu
Y3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDYsMTMgKzUwNiwxMiBAQCBzdGF0aWMgSlNWYWx1ZVJl
ZiBxdFNlbmRlckNhbGxiYWNrKEpTQ29uCiAKIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6YWRkUXRT
ZW5kZXJUb0dsb2JhbE9iamVjdCgpCiB7Ci0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVu
Y2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdp
bmRvdyhmcmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogICAgIFFfQVNTRVJUKHdpbmRv
dyk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygpOwog
ICAgIFFfQVNTRVJUKGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAK
ICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IDo6dG9SZWYoZXhlYyk7CiAgICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IHByb3BlcnR5TmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIl9fcXRfc2VuZGVyX18iKSk7CkBAIC02NTcsNyArNjU2LDYgQEAgdm9pZCBRV2Vi
RnJhbWU6OmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iagogICAgICAgICByZXR1cm47CiAjaWYgVVNF
KEpTQykKICAgICBKU0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpWYWx1ZU93bmVyc2hpcCB2YWx1
ZU93bmVyc2hpcCA9IHN0YXRpY19jYXN0PEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6OlZhbHVl
T3duZXJzaGlwPihvd25lcnNoaXApOwotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOwogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93
KGQtPmZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgSlNDOjpCaW5kaW5nczo6
Um9vdE9iamVjdCogcm9vdDsKICAgICBpZiAodmFsdWVPd25lcnNoaXAgPT0gSlNDOjpCaW5kaW5n
czo6UXRJbnN0YW5jZTo6UXRPd25lcnNoaXApCkBAIC02NzUsNiArNjczLDcgQEAgdm9pZCBRV2Vi
RnJhbWU6OmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iagogICAgIH0KIAogICAgIEpTQzo6RXhlY1N0
YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIEpTQzo6SlNPYmplY3QqIHJ1bnRpbWVPYmplY3QgPQogICAgICAg
ICAgICAgSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShvYmplY3QsIHJv
b3QsIHZhbHVlT3duZXJzaGlwKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQuY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA4NiwxMyArMTA4NiwxMiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpp
bmplY3RJbnRlCiB7CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVBy
aXZhdGU6OmNvcmUoZnJhbWUpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2sgbG9jayhK
U0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0g
dG9KU0RPTVdpbmRvdyhjb3JlRnJhbWUsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBR
X0FTU0VSVCh3aW5kb3cpOwogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmds
b2JhbEV4ZWMoKTsKICAgICBRX0FTU0VSVChleGVjKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogCiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSB0b1JlZihleGVjKTsKICAg
ICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdChjb250ZXh0KTsKQEAg
LTExMTMsMTMgKzExMTIsMTIgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRJ
bnRlcgogewogICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRl
Ojpjb3JlKGZyYW1lKTsKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNE
T01XaW5kb3coY29yZUZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgUV9BU1NF
UlQod2luZG93KTsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxF
eGVjKCk7CiAgICAgUV9BU1NFUlQoZXhlYyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKIAogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gdG9SZWYoZXhlYyk7CiAgICAgV2Vi
Q29yZVRlc3RTdXBwb3J0OjpyZXNldEludGVybmFsc09iamVjdChjb250ZXh0KTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDUxMCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDEyLTA2LTE1ICBNYXJrIEhh
aG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNob3Vs
ZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVh
ZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJl
Y3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhh
dCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIFdlYkNvcmVTdGF0aXN0
aWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0T2JqZWN0c0Nv
dW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0R2xvYmFsT2JqZWN0
c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVk
T2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJv
dGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpq
YXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyk6CisgICAgICAgICogV2ViRnJhbWUu
Y3BwOgorICAgICAgICAoV2ViRnJhbWU6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRJblNj
cmlwdFdvcmxkKToKKyAgICAgICAgKiBXZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkphdmFTY3JpcHRDb2xsZWN0b3I6Om9iamVjdENvdW50KToKKyAgICAgICAgKiBXZWJW
aWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRG
cm9tU3RyaW5nKToKKyAgICAgICAgKFdlYlZpZXc6OnJlcG9ydEV4Y2VwdGlvbik6CisgICAgICAg
IChXZWJWaWV3OjplbGVtZW50RnJvbUpTKToKKworMjAxMi0wNi0xNSAgTWFyayBIYWhuZW5iZXJn
ICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVy
LUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBbGwgb2YgdGhlc2UgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gY29udmVydCB0aGUgb2xkLXN0
eWxlIEpTTG9jayBzdGF0ZW1lbnRzIHRvIAorICAgICAgICB0aGUgbmV3IEpTTG9ja0hvbGRlciBz
dGF0ZW1lbnRzIHRoYXQgdGFrZSBpbiB3aGF0ZXZlciBKUyBjb250ZXh0IHRoZSBjb2RlIGlzIGFi
b3V0IAorICAgICAgICB0byBpbnRlcmFjdCB3aXRoLgorCisgICAgICAgICogV2ViQ29yZVN0YXRp
c3RpY3MuY3BwOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRPYmplY3Rz
Q291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRHbG9iYWxPYmpl
Y3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0
ZWRPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQ
cm90ZWN0ZWRHbG9iYWxPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6
OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKToKKyAgICAgICAgKiBXZWJGcmFt
ZS5jcHA6CisgICAgICAgIChXZWJGcmFtZTo6c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdElu
U2NyaXB0V29ybGQpOgorICAgICAgICAqIFdlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwOgorICAg
ICAgICAoV2ViSmF2YVNjcmlwdENvbGxlY3Rvcjo6b2JqZWN0Q291bnQpOgorICAgICAgICAqIFdl
YlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dEZyb21TdHJpbmcpOgorICAgICAgICAoV2ViVmlldzo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAg
ICAgKFdlYlZpZXc6OmVsZW1lbnRGcm9tSlMpOgorCiAyMDEyLTA2LTExICBLYXVzdHViaCBBdHJh
d2Fsa2FyICA8a2F1c3R1YmhAbW90b3JvbGEuY29tPgogCiAgICAgICAgIFtEUlRdIExUQzo6IGNv
dW50ZXJWYWx1ZUZvckVsZW1lbnRCeUlkKCkgY291bGQgYmUgbW92ZWQgdG8gSW50ZXJuYWxzLgpJ
bmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMTIw
NDc4KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29y
ZVN0YXRpc3QKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICpjb3VudCA9IChV
SU5UKUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgp
OwogICAgIHJldHVybiBTX09LOwogfQpAQCAtMTA5LDcgKzEwOSw3IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwogICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+
aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQpAQCAtMTIwLDcg
KzEyMCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBp
ZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpOwogICAg
IHJldHVybiBTX09LOwogfQpAQCAtMTMxLDcgKzEzMSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
ICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5w
cm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQpAQCAtMTM5
LDcgKzEzOSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90
ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCAKICAgICAvKiBbcmV0dmFsXVtvdXRdICovIElQcm9wZXJ0
eUJhZzIqKiB0eXBlTmFtZXNBbmRDb3VudHMpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IGpzT2JqZWN0VHlwZU5h
bWVzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmpl
Y3RUeXBlQ291bnRzKCkpOwogICAgIHR5cGVkZWYgVHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRv
ciBJdGVyYXRvcjsKICAgICBJdGVyYXRvciBlbmQgPSBqc09iamVjdFR5cGVOYW1lcy0+ZW5kKCk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBTb3VyY2Uv
V2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MjgsOCArMjUyOCw4
IEBAIEhSRVNVTFQgV2ViRnJhbWU6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmEKICAgICBpZiAoIXJl
c3VsdCB8fCAhcmVzdWx0LmlzQm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVz
dWx0LmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBTX09LOwogCi0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGFueVdv
cmxkR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVySG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgU3RyaW5nIHJlc3VsdFN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhyZXN1
bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAqZXZhbHVhdGlvblJlc3VsdCA9
IEJTdHJpbmcocmVzdWx0U3RyaW5nKS5yZWxlYXNlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
d2luL1dlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvd2luL1dlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwCShyZXZpc2lvbiAxMjA0NzgpCisrKyBT
b3VyY2UvV2ViS2l0L3dpbi9XZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTExLDcgKzExMSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSmF2YVNj
cmlwdEMKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCk7CiAgICAgcmV0dXJu
IFNfT0s7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMTIwNDc4KQorKysg
U291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOTQsOCAr
MzE5NCw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6c3RyaW4KICAgICBp
ZiAoIXNjcmlwdEV4ZWN1dGlvblJlc3VsdCkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKICAgICBl
bHNlIGlmIChzY3JpcHRFeGVjdXRpb25SZXN1bHQuaXNTdHJpbmcoKSkgewotICAgICAgICBKU0xv
Y2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgIEpTQzo6RXhlY1N0
YXRlKiBleGVjID0gY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWRO
b3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKICAgICAgICAgKnJlc3VsdCA9IEJTdHJpbmcodXN0cmluZ1RvU3RyaW5nKHNjcmlwdEV4
ZWN1dGlvblJlc3VsdC5nZXRTdHJpbmcoZXhlYykpKTsKICAgICB9CiAKQEAgLTU4NTEsOCArNTg1
MSw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6cmVwb3IKICAgICBpZiAo
IWNvbnRleHQgfHwgIWV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIEpT
TG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0
ZSogZXhlY1N0YXRlID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
U3RhdGUpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IGhhcyBhIERPTVdpbmRvdyBn
bG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgdGhpcyBjb250ZXh0IGRpZG4ndCBvcmlnaW5hdGUgZnJv
bSBhIFdlYlZpZXcuCiAgICAgaWYgKCF0b0pTRE9NV2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKSkKQEAgLTU4NzgsOCArNTg3OCw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViVmlldzo6ZWxlbWUKICAgICBpZiAoIW5vZGVPYmplY3QpCiAgICAgICAgIHJldHVy
biBFX0ZBSUw7CiAKLSAgICBKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7
Ci0gICAgRWxlbWVudCogZWx0ID0gdG9FbGVtZW50KHRvSlModG9KUyhjb250ZXh0KSwgbm9kZU9i
amVjdCkpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CisgICAgRWxlbWVudCogZWx0ID0gdG9FbGVtZW50KHRvSlMoZXhl
Yywgbm9kZU9iamVjdCkpOwogICAgIGlmICghZWx0KQogICAgICAgICByZXR1cm4gRV9GQUlMOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148705</attachid>
            <date>2012-06-20 18:45:32 -0700</date>
            <delta_ts>2012-06-21 11:05:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89123-20120620184532.patch</filename>
            <type>text/plain</type>
            <size>203476</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwODkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBA
QAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9BUElTaGltcy5oOgorICAg
ICAgICAoQVBJRW50cnlTaGltV2l0aG91dExvY2spOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNo
aW1XaXRob3V0TG9jazo6QVBJRW50cnlTaGltV2l0aG91dExvY2spOiBBZGRlZCBhbiBleHRyYSBw
YXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIHRvIAorICAgICAgICBkZXRlcm1pbmUgd2hldGhl
ciB3ZSBzaG91bGQgcmVmIHRoZSBKU0dsb2JhbERhdGEgb3Igbm90LiBXZSB3YW50IHRvIHJlZiBh
bGwgdGhlIHRpbWUgZXhjZXB0IGZvciBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBjbGFzcyBi
ZWNhdXNlIHRpbWVyRGlkRmlyZSBjb3VsZCBydW4gYWZ0ZXIgc29tZWJvZHkgaGFzIHN0YXJ0ZWQg
dG8gdGVhciBkb3duIHRoYXQgcGFydGljdWxhciAKKyAgICAgICAgSlNHbG9iYWxEYXRhLCBzbyB3
ZSB3b3VsZG4ndCB3YW50IHRvIHJlc3VycmVjdCB0aGUgcmVmIGNvdW50IG9mIHRoYXQgSlNHbG9i
YWxEYXRhIGZyb20gMCBiYWNrIHRvIDEgYWZ0ZXIgCisgICAgICAgIGl0cyBkZXN0cnVjdGlvbiBo
YXMgYmVndW4uIAorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW1XaXRob3V0TG9jazo6fkFQSUVu
dHJ5U2hpbVdpdGhvdXRMb2NrKTogTm93IGRlcmVmcyBpZiBpdCBhbHNvIHJlZmVkLgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OkFQSUVudHJ5U2hpbSk6CisgICAgICAgIChBUElFbnRyeVNo
aW0pOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW06On5BUElFbnRyeVNoaW0pOgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OmluaXQpOiBGYWN0b3JlZCBvdXQgY29tbW9uIGluaXRpYWxp
emF0aW9uIGNvZGUgZm9yIHRoZSB2YXJpb3VzIEFQSUVudHJ5U2hpbSBjb25zdHJ1Y3RvcnMuCisg
ICAgICAgIEFsc28gbW92ZWQgdGhlIHRpbWVvdXRDaGVja2VyIHN0b3AgYW5kIHN0YXJ0IGhlcmUg
YmVjYXVzZSB3ZSBuZWVkIHRvIHN0YXJ0IGFmdGVyIHdlJ3ZlIGdyYWJiZWQgdGhlIEFQSSBsb2Nr
CisgICAgICAgIGFuZCBiZWZvcmUgd2UndmUgcmVsZWFzZWQgaXQsIHdoaWNoIGNhbiBvbmx5IGRv
bmUgaW4gQVBJRW50cnlTaGltLgorICAgICAgICAoSlNDOjpBUElDYWxsYmFja1NoaW06On5BUElD
YWxsYmFja1NoaW0pOiBXZSBubyBsb25nZXIgbmVlZCB0byBzeW5jaHJvbml6ZSBoZXJlLgorICAg
ICAgICAqIEFQSS9KU0NvbnRleHRSZWYuY3BwOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0Q3Jl
YXRlKToKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXApOgorICAgICAgICAo
SlNHbG9iYWxDb250ZXh0UmVsZWFzZSk6CisgICAgICAgIChKU0NvbnRleHRDcmVhdGVCYWNrdHJh
Y2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRTcGFjZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6cHJvdGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucHJv
dGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFw
OjpzZXRBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWN0aXZpdHlDYWxs
YmFjayk6CisgICAgICAgIChKU0M6OkhlYXA6OnN3ZWVwZXIpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOiBDaGFuZ2VkIG1fYWN0aXZpdHlDYWxsYmFjayBhbmQgbV9zd2VlcGVyIHRvIGJlIHJhdyBw
b2ludGVycyByYXRoZXIgdGhhbiBPd25QdHJzIGJlY2F1c2UgdGhleSAKKyAgICAgICAgYXJlIG5v
dyByZXNwb25zaWJsZSBmb3IgdGhlaXIgb3duIGxpZmV0aW1lLiBBbHNvIGNoYW5nZWQgdGhlIG9y
ZGVyIG9mIGRlY2xhcmF0aW9uIG9mIHRoZSBHQ0FjdGl2aXR5Q2FsbGJhY2sKKyAgICAgICAgYW5k
IHRoZSBJbmNyZW1lbnRhbFN3ZWVwZXIgdG8gbWFrZSBzdXJlIHRoZXkncmUgdGhlIGxhc3QgdGhp
bmdzIHRoYXQgZ2V0IGluaXRpYWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gdG8gCisgICAgICAg
IHByZXZlbnQgYW55IGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBKU0ds
b2JhbERhdGEvSGVhcCB0aGV5IG1pZ2h0IGNhcmUgYWJvdXQuCisgICAgICAgIChIZWFwKToKKyAg
ICAgICAgKiBoZWFwL0hlYXBUaW1lci5jcHA6IFJlZmFjdG9yZWQgdG8gYWxsb3cgZm9yIHRocmVh
ZC1zYWZlIG9wZXJhdGlvbiBhbmQgc2h1dGRvd24uCisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6
fkhlYXBUaW1lcik6CisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6aW52YWxpZGF0ZSk6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OmRpZFN0YXJ0Vk1TaHV0ZG93bik6
IENhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIH5KU0dsb2JhbERhdGEuIElmIHdlJ3JlIG9uIHRo
ZSBzYW1lIHRocmVhZCAKKyAgICAgICAgdGhhdCB0aGUgSGVhcFRpbWVyIGlzIHJ1bm5pbmcgb24s
IHdlIGtpbGwgdGhlIEhlYXBUaW1lciBvdXJzZWx2ZXMuIElmIG5vdCwgdGhlbiB3ZSBzZXQgc29t
ZSBzdGF0ZSBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBhbmQgc2NoZWR1bGUgaXQgdG8gZmly
ZSBpbW1lZGlhdGVseSBzbyB0aGF0IGl0IGNhbiBub3RpY2UgYW5kIGtpbGwgaXRzZWxmLgorICAg
ICAgICAoSlNDOjpIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSk6IFdlIGdyYWIgb3VyIG11dGV4IGFu
ZCBjaGVjayBvdXIgSlNHbG9iYWxEYXRhIHBvaW50ZXIuIElmIGl0IGhhcyBiZWVuIHplcm8tZWQK
KyAgICAgICAgb3V0LCB0aGVuIHdlIGtub3cgdGhlIFZNIGhhcyBzdGFydGVkIHRvIHNodXRkb3du
IGFuZCB3ZSBzaG91bGQga2lsbCBvdXJzZWx2ZXMuIE90aGVyd2lzZSwgZ3JhYiB0aGUgQVBJRW50
cnlTaGltLAorICAgICAgICBidXQgd2l0aG91dCByZWYtaW5nIHRoZSBKU0dsb2JhbERhdGEgKHdl
IGRvbid0IHdhbnQgdG8gYnJpbmcgdGhlIEpTR2xvYmFsRGF0YSdzIHJlZi1jb3VudCBmcm9tIDAg
dG8gMSkgaW4gY2FzZSAKKyAgICAgICAgd2Ugd2VyZSBpbnRlcnJ1cHRlZCBiZXR3ZWVuIHJlbGVh
c2luZyBvdXIgbXV0ZXggYW5kIHRyeWluZyB0byBncmFiIHRoZSBBUElMb2NrLgorICAgICAgICAq
IGhlYXAvSGVhcFRpbWVyLmg6IAorICAgICAgICAoSGVhcFRpbWVyKToKKyAgICAgICAgKiBoZWFw
L0luY3JlbWVudGFsU3dlZXBlci5jcHA6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBl
cjo6ZG9Xb3JrKTogV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIEFQSSBzaGltIGhlcmUgc2luY2UgSGVh
cFRpbWVyOjp0aW1lckRpZEZpcmUgaGFuZGxlcyAKKyAgICAgICAgYWxsIG9mIHRoYXQgZm9yIHVz
LiAKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUpOgorICAgICAgICAq
IGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAgIChJbmNyZW1lbnRhbFN3ZWVwZXIp
OgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKiBoZWFwL1dlYWtCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OldlYWtCbG9jazo6cmVhcCk6CisgICAgICAgICoganNjLmNw
cDoKKyAgICAgICAgKGZ1bmN0aW9uR0MpOgorICAgICAgICAoZnVuY3Rpb25SZWxlYXNlRXhlY3V0
YWJsZU1lbW9yeSk6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBs
ZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpjaGVja1N5bnRheCk6CisgICAgICAgIChKU0M6OmV2
YWx1YXRlKToKKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oOgorICAgICAg
ICAoRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayk6CisgICAgICAgIChKU0M6OkRlZmF1bHRHQ0Fj
dGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6IFNpZ25hbHMgdG8gdGhlIHR3byBI
ZWFwVGltZXJzIChHQ0FjdGl2aXR5Q2FsbGJhY2sgYW5kIEluY3JlbWVudGFsU3dlZXBlcikKKyAg
ICAgICAgdGhhdCB0aGUgVk0gaGFzIHN0YXJ0ZWQgc2h1dHRpbmcgZG93bi4gSXQgdGhlbiB3YWl0
cyB1bnRpbCB0aGUgSGVhcFRpbWVyIGlzIGRvbmUgd2l0aCB3aGF0ZXZlciBhY3Rpdml0eSAKKyAg
ICAgICAgaXQgbmVlZHMgdG8gZG8gYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCBhbnkgZnVydGhlciBk
ZXN0cnVjdGlvbi4gQWxzbyBhc3NlcnRzIHRoYXQgd2UgZG8gbm90IGN1cnJlbnRseSBob2xkIHRo
ZSAKKyAgICAgICAgQVBJTG9jayBiZWNhdXNlIHRoaXMgY291bGQgcG90ZW50aWFsbHkgY2F1c2Ug
ZGVhZGxvY2sgd2hlbiB3ZSB0cnkgdG8gc2lnbmFsIHRvIHRoZSBIZWFwVGltZXJzIHVzaW5nIHRo
ZWlyIG11dGV4ZXMuCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2Up
OiBQcm90ZWN0IHRoZSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNoYXJlZCBpbnN0YW5jZSB3aXRo
IHRoZSBHbG9iYWxKU0xvY2suCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5z
dGFuY2VJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDogQ2hhbmdl
IHRvIGJlIFRocmVhZFNhZmVSZWZDb3VudGVkIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3Jy
eSBhYm91dCByZWZpbmcgYW5kIAorICAgICAgICBkZS1yZWZpbmcgSlNHbG9iYWxEYXRhcyBvbiBz
ZXBhcmF0ZSB0aHJlYWRzIHNpbmNlIHdlIGRvbid0IGRvIGl0IHRoYXQgb2Z0ZW4gYW55d2F5cy4K
KyAgICAgICAgKEpTR2xvYmFsRGF0YSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6YXBp
TG9jayk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogcnVudGltZS9KU0xvY2suY3BwOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEpTQzo6R2xvYmFsSlNMb2NrOjpHbG9iYWxKU0xvY2spOiBGb3Ig
YWNjZXNzaW5nIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisgICAgICAgIChKU0M6Okdsb2JhbEpTTG9j
azo6fkdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6SlNMb2NrSG9s
ZGVyKTogTXV0ZXhMb2NrZXIgZm9yIEpTTG9jay4gQWxzbyByZWZzIHRoZSBKU0dsb2JhbERhdGEg
dG8ga2VlcCBpdCBhbGl2ZSBzbyB0aGF0IAorICAgICAgICBpdCBjYW4gc3VjY2Vzc2Z1bGx5IHVu
bG9jayBpdCBsYXRlciB3aXRob3V0IGl0IGRpc2FwcGVhcmluZyBmcm9tIHVuZGVybmVhdGggaXQu
CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6fkpTTG9ja0hvbGRlcik6CisgICAgICAgIChK
U0M6OkpTTG9jazo6SlNMb2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp+SlNMb2NrKToKKyAg
ICAgICAgKEpTQzo6SlNMb2NrOjpsb2NrKTogVXNlcyB0aGUgc3BpbiBsb2NrIGZvciBndWFyZGlu
ZyB0aGUgbG9jayBjb3VudCBhbmQgb3duZXIgdGhyZWFkIGZpZWxkcy4gVXNlcyB0aGUgbXV0ZXgg
Zm9yIAorICAgICAgICBhY3R1YWxseSB3YWl0aW5nIGZvciBsb25nIHBlcmlvZHMuIAorICAgICAg
ICAoSlNDOjpKU0xvY2s6OnVubG9jayk6CisgICAgICAgIChKU0M6OkpTTG9jazo6Y3VycmVudFRo
cmVhZElzSG9sZGluZ0xvY2spOiAKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpkcm9wQWxsTG9ja3Mp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseSk6Cisg
ICAgICAgIChKU0M6OkpTTG9jazo6Z3JhYkFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2Nrcyk6CisgICAgICAgIChKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKToKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0xvY2tI
b2xkZXIpOgorICAgICAgICAoSlNMb2NrKToKKyAgICAgICAgKERyb3BBbGxMb2Nrcyk6CisgICAg
ICAgICogcnVudGltZS9XZWFrR0NNYXAuaDoKKyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpzZXQp
OgorICAgICAgICAqIHRlc3RSZWdFeHAuY3BwOgorICAgICAgICAocmVhbE1haW4pOgorCiAyMDEy
LTA2LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRnVuY3Rp
b25zIG9uIGdsb2JhbCBvYmplY3RzIHNob3VsZCBiZSBzcGVjaWFsaXphYmxlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAkocmV2aXNpb24gMTIwODg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OSw3ICsyOTksNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSlNDCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25HQyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBleGVj
LT5oZWFwKCktPmNvbGxlY3RBbGxHYXJiYWdlKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTMwNyw3ICszMDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0MoCiAjaWZuZGVmIE5ERUJVRwogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5yZWxlYXNlRXhl
Y3V0YWJsZU1lbW9yeSgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CkBAIC02NjcsOSArNjY3LDkgQEAgc3RhdGljIHZvaWQgcGFyc2VBcmd1bWVudHMoaW50
IGFyZ2MsIGNoYQogCiBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLQorICAgIAogICAgIFJlZlB0cjxK
U0dsb2JhbERhdGE+IGdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZShUaHJlYWRTdGFj
a1R5cGVMYXJnZSwgTGFyZ2VIZWFwKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRh
LmdldCgpKTsKIAogICAgIENvbW1hbmRMaW5lIG9wdGlvbnM7CiAgICAgcGFyc2VBcmd1bWVudHMo
YXJnYywgYXJndiwgb3B0aW9ucyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJl
Z0V4cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RSZWdFeHAu
Y3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NSw5ICs0OTUsOCBAQCBzdGF0aWMgdm9pZCBwYXJz
ZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhCiAKIGludCByZWFsTWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLQogICAg
IFJlZlB0cjxKU0dsb2JhbERhdGE+IGdsb2JhbERhdGEgPSBKU0dsb2JhbERhdGE6OmNyZWF0ZShU
aHJlYWRTdGFja1R5cGVMYXJnZSwgTGFyZ2VIZWFwKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhn
bG9iYWxEYXRhLmdldCgpKTsKIAogICAgIENvbW1hbmRMaW5lIG9wdGlvbnM7CiAgICAgcGFyc2VB
cmd1bWVudHMoYXJnYywgYXJndiwgb3B0aW9ucyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0FQSVNoaW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9BUElTaGltcy5oCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0FQSVNoaW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDMxICsyOCw0MCBAQAogCiAjaW5j
bHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCisjaW5j
bHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVk
ZSA8d3RmL1dURlRocmVhZERhdGEuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEFQSUVu
dHJ5U2hpbVdpdGhvdXRMb2NrIHsKK3B1YmxpYzoKKyAgICBlbnVtIFJlZkdsb2JhbERhdGFUYWcg
eyBEb250UmVmR2xvYmFsRGF0YSA9IDAsIFJlZkdsb2JhbERhdGEgfTsKKwogcHJvdGVjdGVkOgot
ICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9v
bCByZWdpc3RlclRocmVhZCkKLSAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAg
ICBBUElFbnRyeVNoaW1XaXRob3V0TG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wg
cmVnaXN0ZXJUaHJlYWQsIFJlZkdsb2JhbERhdGFUYWcgc2hvdWxkUmVmR2xvYmFsRGF0YSkKKyAg
ICAgICAgOiBtX3Nob3VsZFJlZkdsb2JhbERhdGEoc2hvdWxkUmVmR2xvYmFsRGF0YSkKKyAgICAg
ICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAgICAgLCBtX2VudHJ5SWRlbnRpZmll
clRhYmxlKHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGdsb2JhbERh
dGEtPmlkZW50aWZpZXJUYWJsZSkpCiAgICAgeworICAgICAgICBpZiAoc2hvdWxkUmVmR2xvYmFs
RGF0YSkKKyAgICAgICAgICAgIG1fZ2xvYmFsRGF0YS0+cmVmKCk7CiAgICAgICAgIFVOVVNFRF9Q
QVJBTShyZWdpc3RlclRocmVhZCk7CiAgICAgICAgIGlmIChyZWdpc3RlclRocmVhZCkKICAgICAg
ICAgICAgIGdsb2JhbERhdGEtPmhlYXAubWFjaGluZVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFk
KCk7CiAgICAgICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5hY3Rpdml0eUNhbGxiYWNrKCktPnN5bmNo
cm9uaXplKCk7Ci0gICAgICAgIG1fZ2xvYmFsRGF0YS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsK
KyAgICAgICAgbV9nbG9iYWxEYXRhLT5oZWFwLnN3ZWVwZXIoKS0+c3luY2hyb25pemUoKTsKICAg
ICB9CiAKICAgICB+QVBJRW50cnlTaGltV2l0aG91dExvY2soKQogICAgIHsKLSAgICAgICAgbV9n
bG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAgICAgICAgIHd0ZlRocmVhZERhdGEo
KS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKG1fZW50cnlJZGVudGlmaWVyVGFibGUpOworICAg
ICAgICBpZiAobV9zaG91bGRSZWZHbG9iYWxEYXRhKQorICAgICAgICAgICAgbV9nbG9iYWxEYXRh
LT5kZXJlZigpOwogICAgIH0KIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKKyAgICBSZWZHbG9iYWxE
YXRhVGFnIG1fc2hvdWxkUmVmR2xvYmFsRGF0YTsKICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFs
RGF0YTsKICAgICBJZGVudGlmaWVyVGFibGUqIG1fZW50cnlJZGVudGlmaWVyVGFibGU7CiB9OwpA
QCAtNjEsMjAgKzcwLDM4IEBAIGNsYXNzIEFQSUVudHJ5U2hpbSA6IHB1YmxpYyBBUElFbnRyeVNo
aW0KIHB1YmxpYzoKICAgICAvLyBOb3JtYWwgQVBJIGVudHJ5CiAgICAgQVBJRW50cnlTaGltKEV4
ZWNTdGF0ZSogZXhlYywgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJ
RW50cnlTaGltV2l0aG91dExvY2soJmV4ZWMtPmdsb2JhbERhdGEoKSwgcmVnaXN0ZXJUaHJlYWQp
Ci0gICAgICAgICwgbV9sb2NrKGV4ZWMpCisgICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExv
Y2soJmV4ZWMtPmdsb2JhbERhdGEoKSwgcmVnaXN0ZXJUaHJlYWQsIFJlZkdsb2JhbERhdGEpCisg
ICAgeworICAgICAgICBpbml0KCk7CisgICAgfQorCisgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBp
cyBuZWNlc3NhcnkgZm9yIEhlYXBUaW1lciB0byBwcmV2ZW50IGl0IGZyb20gYWNjaWRlbnRhbGx5
IHJlc3VycmVjdGluZyAKKyAgICAvLyB0aGUgcmVmIGNvdW50IG9mIGEgImRlYWQiIEpTR2xvYmFs
RGF0YS4KKyAgICBBUElFbnRyeVNoaW0oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBSZWZHbG9i
YWxEYXRhVGFnIHJlZkdsb2JhbERhdGEsIGJvb2wgcmVnaXN0ZXJUaHJlYWQgPSB0cnVlKQorICAg
ICAgICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKGdsb2JhbERhdGEsIHJlZ2lzdGVyVGhyZWFk
LCByZWZHbG9iYWxEYXRhKQogICAgIHsKKyAgICAgICAgaW5pdCgpOwogICAgIH0KIAogICAgIC8v
IEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3Igb25seSBoYXMgYSBnbG9iYWxEYXRhLgogICAgIEFQ
SUVudHJ5U2hpbShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgcmVnaXN0ZXJUaHJlYWQg
PSB0cnVlKQotICAgICAgICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKGdsb2JhbERhdGEsIHJl
Z2lzdGVyVGhyZWFkKQotICAgICAgICAsIG1fbG9jayhnbG9iYWxEYXRhLT5pc1NoYXJlZEluc3Rh
bmNlKCkgPyBMb2NrRm9yUmVhbCA6IFNpbGVuY2VBc3NlcnRpb25zT25seSkKKyAgICAgICAgOiBB
UElFbnRyeVNoaW1XaXRob3V0TG9jayhnbG9iYWxEYXRhLCByZWdpc3RlclRocmVhZCwgUmVmR2xv
YmFsRGF0YSkKICAgICB7CisgICAgICAgIGluaXQoKTsKKyAgICB9CisKKyAgICB+QVBJRW50cnlT
aGltKCkKKyAgICB7CisgICAgICAgIG1fZ2xvYmFsRGF0YS0+dGltZW91dENoZWNrZXIuc3RvcCgp
OworICAgICAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS51bmxvY2soKTsKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgSlNMb2NrIG1fbG9jazsKKyAgICB2b2lkIGluaXQoKQorICAgIHsKKyAgICAg
ICAgbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkubG9jaygpOworICAgICAgICBtX2dsb2JhbERhdGEt
PnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7CisgICAgfQogfTsKIAogY2xhc3MgQVBJQ2FsbGJhY2tT
aGltIHsKQEAgLTg4LDcgKzExNSw2IEBAIHB1YmxpYzoKIAogICAgIH5BUElDYWxsYmFja1NoaW0o
KQogICAgIHsKLSAgICAgICAgbV9nbG9iYWxEYXRhLT5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+
c3luY2hyb25pemUoKTsKICAgICAgICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlm
aWVyVGFibGUobV9nbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFibGUpOwogICAgIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkocmV2aXNpb24gMTIw
ODg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OCw3ICs3OCw2IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENv
bnRleHRDcmVhdGUKICAgICAvLyBJZiB0aGUgYXBwbGljYXRpb24gd2FzIGxpbmtlZCBiZWZvcmUg
SlNHbG9iYWxDb250ZXh0Q3JlYXRlIHdhcyBjaGFuZ2VkIHRvIHVzZSBhIHVuaXF1ZSBKU0dsb2Jh
bERhdGEsCiAgICAgLy8gd2UgdXNlIGEgc2hhcmVkIG9uZSBmb3IgYmFja3dhcmRzIGNvbXBhdGli
aWxpdHkuCiAgICAgaWYgKE5TVmVyc2lvbk9mTGlua1RpbWVMaWJyYXJ5KCJKYXZhU2NyaXB0Q29y
ZSIpIDw9IHdlYmtpdEZpcnN0VmVyc2lvbldpdGhDb25jdXJyZW50R2xvYmFsQ29udGV4dHMpIHsK
LSAgICAgICAgSlNMb2NrIGxvY2soTG9ja0ZvclJlYWwpOwogICAgICAgICByZXR1cm4gSlNHbG9i
YWxDb250ZXh0Q3JlYXRlSW5Hcm91cCh0b1JlZigmSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5j
ZSgpKSwgZ2xvYmFsT2JqZWN0Q2xhc3MpOwogICAgIH0KICNlbmRpZiAvLyBPUyhEQVJXSU4pCkBA
IC05MCwxMSArODksOSBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNHbG9iYWxDb250ZXh0Q3JlYXRl
CiB7CiAgICAgaW5pdGlhbGl6ZVRocmVhZGluZygpOwogCi0gICAgSlNMb2NrIGxvY2soTG9ja0Zv
clJlYWwpOwogICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IGdsb2JhbERhdGEgPSBncm91cCA/IFBh
c3NSZWZQdHI8SlNHbG9iYWxEYXRhPih0b0pTKGdyb3VwKSkgOiBKU0dsb2JhbERhdGE6OmNyZWF0
ZUNvbnRleHRHcm91cChUaHJlYWRTdGFja1R5cGVTbWFsbCk7CiAKICAgICBBUElFbnRyeVNoaW0g
ZW50cnlTaGltKGdsb2JhbERhdGEuZ2V0KCksIGZhbHNlKTsKLQogICAgIGdsb2JhbERhdGEtPm1h
a2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7CiAKICAgICBpZiAoIWdsb2JhbE9iamVjdENs
YXNzKSB7CkBAIC0xMjQsMTggKzEyMSwxOSBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNHbG9iYWxD
b250ZXh0UmV0YWluCiAKIHZvaWQgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShKU0dsb2JhbENvbnRl
eHRSZWYgY3R4KQogeworICAgIElkZW50aWZpZXJUYWJsZSogc2F2ZWRJZGVudGlmaWVyVGFibGU7
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTTG9jayBsb2NrKGV4ZWMp
OworICAgIHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKLSAgICBKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgSWRlbnRpZmllclRh
YmxlKiBzYXZlZElkZW50aWZpZXJUYWJsZSA9IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRl
bnRpZmllclRhYmxlKGdsb2JhbERhdGEuaWRlbnRpZmllclRhYmxlKTsKKyAgICAgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgICAgICBzYXZlZElk
ZW50aWZpZXJUYWJsZSA9IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxl
KGdsb2JhbERhdGEuaWRlbnRpZmllclRhYmxlKTsKIAotICAgIGJvb2wgcHJvdGVjdENvdW50SXNa
ZXJvID0gSGVhcDo6aGVhcChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT51bnByb3RlY3Qo
ZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKLSAgICBpZiAocHJvdGVjdENvdW50SXNaZXJv
KSB7Ci0gICAgICAgIGdsb2JhbERhdGEuaGVhcC5hY3Rpdml0eUNhbGxiYWNrKCktPnN5bmNocm9u
aXplKCk7Ci0gICAgICAgIGdsb2JhbERhdGEuaGVhcC5yZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFw
aCgpOworICAgICAgICBib29sIHByb3RlY3RDb3VudElzWmVybyA9IEhlYXA6OmhlYXAoZXhlYy0+
ZHluYW1pY0dsb2JhbE9iamVjdCgpKS0+dW5wcm90ZWN0KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKSk7CisgICAgICAgIGlmIChwcm90ZWN0Q291bnRJc1plcm8pCisgICAgICAgICAgICBnbG9i
YWxEYXRhLmhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKTsKKyAgICAgICAgZ2xvYmFs
RGF0YS5kZXJlZigpOwogICAgIH0KLSAgICBnbG9iYWxEYXRhLmRlcmVmKCk7CiAKICAgICB3dGZU
aHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShzYXZlZElkZW50aWZpZXJUYWJs
ZSk7CiB9CkBAIC0xNjYsNyArMTY0LDcgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTQ29udGV4dEdl
dEdsb2JhbENvbgogSlNTdHJpbmdSZWYgSlNDb250ZXh0Q3JlYXRlQmFja3RyYWNlKEpTQ29udGV4
dFJlZiBjdHgsIHVuc2lnbmVkIG1heFN0YWNrU2l6ZSkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrIGxvY2soZXhlYyk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgVVN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5j
cHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCBDaGVja2VkQm9vbGVh
biBDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVTCiAgICAgaWYgKGlzT3ZlcnNpemUoYnl0ZXMpKQog
ICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVPdmVyc2l6ZShieXRlcywgb3V0UHRyKTsKICAgICAK
KyAgICBBU1NFUlQobV9oZWFwLT5nbG9iYWxEYXRhKCktPmFwaUxvY2soKS5jdXJyZW50VGhyZWFk
SXNIb2xkaW5nTG9jaygpKTsKICAgICBtX2hlYXAtPmRpZEFsbG9jYXRlKG1fYWxsb2NhdG9yLmN1
cnJlbnRDYXBhY2l0eSgpKTsKIAogICAgIGFsbG9jYXRlQmxvY2soKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDE1ICsxNjAsOSBA
QCBzdGF0aWMgaW5saW5lIHNpemVfdCBwcm9wb3J0aW9uYWxIZWFwU2l6CiAgICAgcmV0dXJuIDEu
MjUgKiBoZWFwU2l6ZTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRTaGFyZWRJbnN0
YW5jZVRocmVhZFN0YXRlKCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkU2hhcmVkSW5zdGFu
Y2VUaHJlYWRTdGF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgaWYgKCFKU0xv
Y2s6OmxvY2tDb3VudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIUpTTG9j
azo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGdsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJy
ZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxp
ZFRocmVhZFN0YXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKQEAgLTE3Niw3ICsxNzAsNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFRocmVhZFN0YXRlKEpTCiAgICAgaWYgKGdsb2Jh
bERhdGEtPmlkZW50aWZpZXJUYWJsZSAhPSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZp
ZXJUYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZ2xvYmFsRGF0YS0+
aXNTaGFyZWRJbnN0YW5jZSgpICYmICFpc1ZhbGlkU2hhcmVkSW5zdGFuY2VUaHJlYWRTdGF0ZSgp
KQorICAgIGlmIChnbG9iYWxEYXRhLT5pc1NoYXJlZEluc3RhbmNlKCkgJiYgIWlzVmFsaWRTaGFy
ZWRJbnN0YW5jZVRocmVhZFN0YXRlKGdsb2JhbERhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyNyw3ICszMjEsNyBAQCB2b2lkIEhlYXA6OmRpZEFi
YW5kb24oc2l6ZV90IGJ5dGVzKQogdm9pZCBIZWFwOjpwcm90ZWN0KEpTVmFsdWUgaykKIHsKICAg
ICBBU1NFUlQoayk7Ci0gICAgQVNTRVJUKEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xv
Y2soKSB8fCAhbV9nbG9iYWxEYXRhLT5pc1NoYXJlZEluc3RhbmNlKCkpOworICAgIEFTU0VSVCht
X2dsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKIAog
ICAgIGlmICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzM4LDcgKzMzMiw3IEBA
IHZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlIGspCiBib29sIEhlYXA6OnVucHJvdGVjdChKU1Zh
bHVlIGspCiB7CiAgICAgQVNTRVJUKGspOwotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdMb2NrKCkgfHwgIW1fZ2xvYmFsRGF0YS0+aXNTaGFyZWRJbnN0YW5jZSgpKTsK
KyAgICBBU1NFUlQobV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGlu
Z0xvY2soKSk7CiAKICAgICBpZiAoIWsuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTY5Miw2ICs2ODYsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBU
b2dnCiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkdhcmJhZ2UgQ29sbGVjdGlv
biIpOwogICAgIAogICAgIEdDUEhBU0UoQ29sbGVjdCk7CisgICAgQVNTRVJUKGdsb2JhbERhdGEo
KS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIEFTU0VSVChn
bG9iYWxEYXRhKCktPmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElk
ZW50aWZpZXJUYWJsZSgpKTsKICAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwogICAgIEpB
VkFTQ1JJUFRDT1JFX0dDX0JFR0lOKCk7CkBAIC03NzcsMTkgKzc3MiwxOSBAQCB2b2lkIEhlYXA6
OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgSkFWQVNDUklQVENPUkVfR0NfRU5E
KCk7CiB9CiAKLXZvaWQgSGVhcDo6c2V0QWN0aXZpdHlDYWxsYmFjayhQYXNzT3duUHRyPEdDQWN0
aXZpdHlDYWxsYmFjaz4gYWN0aXZpdHlDYWxsYmFjaykKK3ZvaWQgSGVhcDo6c2V0QWN0aXZpdHlD
YWxsYmFjayhHQ0FjdGl2aXR5Q2FsbGJhY2sqIGFjdGl2aXR5Q2FsbGJhY2spCiB7CiAgICAgbV9h
Y3Rpdml0eUNhbGxiYWNrID0gYWN0aXZpdHlDYWxsYmFjazsKIH0KIAogR0NBY3Rpdml0eUNhbGxi
YWNrKiBIZWFwOjphY3Rpdml0eUNhbGxiYWNrKCkKIHsKLSAgICByZXR1cm4gbV9hY3Rpdml0eUNh
bGxiYWNrLmdldCgpOworICAgIHJldHVybiBtX2FjdGl2aXR5Q2FsbGJhY2s7CiB9CiAKIEluY3Jl
bWVudGFsU3dlZXBlciogSGVhcDo6c3dlZXBlcigpCiB7Ci0gICAgcmV0dXJuIG1fc3dlZXBlci5n
ZXQoKTsKKyAgICByZXR1cm4gbV9zd2VlcGVyOwogfQogCiB2b2lkIEhlYXA6OnNldEdhcmJhZ2VD
b2xsZWN0aW9uVGltZXJFbmFibGVkKGJvb2wgZW5hYmxlKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAkocmV2aXNpb24gMTIwODg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxMCArOTksMTAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIE1hY2hpbmVUaHJlYWRzJiBtYWNoaW5lVGhyZWFkcygpIHsgcmV0dXJuIG1f
bWFjaGluZVRocmVhZHM7IH0KIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5
Q2FsbGJhY2sqIGFjdGl2aXR5Q2FsbGJhY2soKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBzZXRBY3Rpdml0eUNhbGxiYWNrKFBhc3NPd25QdHI8R0NBY3Rpdml0eUNhbGxiYWNrPik7
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0QWN0aXZpdHlDYWxsYmFjayhHQ0Fj
dGl2aXR5Q2FsbGJhY2sqKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRHYXJi
YWdlQ29sbGVjdGlvblRpbWVyRW5hYmxlZChib29sKTsKIAotICAgICAgICBJbmNyZW1lbnRhbFN3
ZWVwZXIqIHN3ZWVwZXIoKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSW5jcmVtZW50YWxT
d2VlcGVyKiBzd2VlcGVyKCk7CiAKICAgICAgICAgLy8gdHJ1ZSBpZiBhbiBhbGxvY2F0aW9uIG9y
IGNvbGxlY3Rpb24gaXMgaW4gcHJvZ3Jlc3MKICAgICAgICAgaW5saW5lIGJvb2wgaXNCdXN5KCk7
CkBAIC0yMzcsMTAgKzIzNywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZG91YmxlIG1f
bGFzdEdDTGVuZ3RoOwogICAgICAgICBkb3VibGUgbV9sYXN0Q29kZURpc2NhcmRUaW1lOwogCi0g
ICAgICAgIE93blB0cjxHQ0FjdGl2aXR5Q2FsbGJhY2s+IG1fYWN0aXZpdHlDYWxsYmFjazsKLSAg
ICAgICAgT3duUHRyPEluY3JlbWVudGFsU3dlZXBlcj4gbV9zd2VlcGVyOwotICAgICAgICAKICAg
ICAgICAgRG91Ymx5TGlua2VkTGlzdDxFeGVjdXRhYmxlQmFzZT4gbV9jb21waWxlZENvZGU7Cisg
ICAgICAgIAorICAgICAgICBHQ0FjdGl2aXR5Q2FsbGJhY2sqIG1fYWN0aXZpdHlDYWxsYmFjazsK
KyAgICAgICAgSW5jcmVtZW50YWxTd2VlcGVyKiBtX3N3ZWVwZXI7CiAgICAgfTsKIAogICAgIGlu
bGluZSBib29sIEhlYXA6OnNob3VsZENvbGxlY3QoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcFRpbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwVGltZXIuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhlYXBUaW1lci5oIgogCisjaW5jbHVk
ZSAiQVBJU2hpbXMuaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtMjEsNyArMjIsOCBAQCBIZWFwVGltZXI6OkhlYXBUaW1lcihKU0dsb2JhbERhdGEq
IGdsb2JhCiAKIEhlYXBUaW1lcjo6fkhlYXBUaW1lcigpCiB7Ci0gICAgaW52YWxpZGF0ZSgpOwor
ICAgIENGUnVuTG9vcFJlbW92ZVRpbWVyKG1fcnVuTG9vcC5nZXQoKSwgbV90aW1lci5nZXQoKSwg
a0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKKyAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUobV90
aW1lci5nZXQoKSk7CiB9CiAKIHZvaWQgSGVhcFRpbWVyOjpzeW5jaHJvbml6ZSgpCkBAIC0zNSwx
NCArMzcsMzcgQEAgdm9pZCBIZWFwVGltZXI6OnN5bmNocm9uaXplKCkKIAogdm9pZCBIZWFwVGlt
ZXI6OmludmFsaWRhdGUoKQogewotICAgIENGUnVuTG9vcFJlbW92ZVRpbWVyKG1fcnVuTG9vcC5n
ZXQoKSwgbV90aW1lci5nZXQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKLSAgICBDRlJ1bkxv
b3BUaW1lckludmFsaWRhdGUobV90aW1lci5nZXQoKSk7CisgICAgbV9nbG9iYWxEYXRhID0gMDsK
KyAgICBDRlJ1bkxvb3BUaW1lclNldE5leHRGaXJlRGF0ZShtX3RpbWVyLmdldCgpLCBDRkFic29s
dXRlVGltZUdldEN1cnJlbnQoKSAtIHNfZGVjYWRlKTsKK30KKwordm9pZCBIZWFwVGltZXI6OmRp
ZFN0YXJ0Vk1TaHV0ZG93bigpCit7CisgICAgaWYgKENGUnVuTG9vcEdldEN1cnJlbnQoKSA9PSBt
X3J1bkxvb3AuZ2V0KCkpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICBkZWxldGUg
dGhpczsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQoIW1fZ2xvYmFsRGF0YS0+
YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOworICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX3NodXRkb3duTXV0ZXgpOworICAgIGludmFsaWRhdGUoKTsKIH0KIAogdm9pZCBI
ZWFwVGltZXI6OnRpbWVyRGlkRmlyZShDRlJ1bkxvb3BUaW1lclJlZiwgdm9pZCogaW5mbykKIHsK
ICAgICBIZWFwVGltZXIqIGFnZW50ID0gc3RhdGljX2Nhc3Q8SGVhcFRpbWVyKj4oaW5mbyk7Ci0g
ICAgYWdlbnQtPmRvV29yaygpOworICAgIGFnZW50LT5tX3NodXRkb3duTXV0ZXgubG9jaygpOwor
ICAgIGlmICghYWdlbnQtPm1fZ2xvYmFsRGF0YSkgeworICAgICAgICBhZ2VudC0+bV9zaHV0ZG93
bk11dGV4LnVubG9jaygpOworICAgICAgICBkZWxldGUgYWdlbnQ7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgeworICAgICAgICAvLyBXZSBkb24ndCByZWYgaGVyZSB0byBwcmV2ZW50IHVz
IGZyb20gcmVzdXJyZWN0aW5nIHRoZSByZWYgY291bnQgb2YgYSAiZGVhZCIgSlNHbG9iYWxEYXRh
LgorICAgICAgICBBUElFbnRyeVNoaW0gc2hpbShhZ2VudC0+bV9nbG9iYWxEYXRhLCBBUElFbnRy
eVNoaW1XaXRob3V0TG9jazo6RG9udFJlZkdsb2JhbERhdGEpOworICAgICAgICBhZ2VudC0+ZG9X
b3JrKCk7CisgICAgfQorICAgIGFnZW50LT5tX3NodXRkb3duTXV0ZXgudW5sb2NrKCk7CiB9CiAK
ICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuaAkocmV2aXNp
b24gMTIwODg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIEhlYXBUaW1lcl9oCiAKICNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiAjaWYg
VVNFKENGKQogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CkBAIC0y
MSw3ICsyMiw4IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIAogICAgIHZpcnR1YWwgfkhlYXBUaW1l
cigpOwotICAgIAorCisgICAgdm9pZCBkaWRTdGFydFZNU2h1dGRvd24oKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3luY2hyb25pemUoKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9Xb3JrKCkgPSAwOwogICAg
IApAQCAtMzQsNiArMzYsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgUmV0YWluUHRyPENGUnVuTG9vcFRp
bWVyUmVmPiBtX3RpbWVyOwogICAgIFJldGFpblB0cjxDRlJ1bkxvb3BSZWY+IG1fcnVuTG9vcDsK
ICAgICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgbV9jb250ZXh0OworCisgICAgTXV0ZXggbV9zaHV0
ZG93bk11dGV4OwogI2VuZGlmCiAgICAgCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCShyZXZpc2lvbiAxMjA4
ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw2IEBAIHN0YXRpYyBjb25zdCBDRlRpbWVJbnRl
cnZhbCBzd2VlcFRpbWVNdWwKIAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OmRvV29yaygpCiB7
Ci0gICAgQVBJRW50cnlTaGltIHNoaW0obV9nbG9iYWxEYXRhKTsKICAgICBkb1N3ZWVwKFdURjo6
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwogfQogICAgIApAQCAtMzAsOSArMjksOSBA
QCBJbmNyZW1lbnRhbFN3ZWVwZXI6OkluY3JlbWVudGFsU3dlZXBlcihICiB7CiB9CiAKLVBhc3NP
d25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPiBJbmNyZW1lbnRhbFN3ZWVwZXI6OmNyZWF0ZShIZWFw
KiBoZWFwKQorSW5jcmVtZW50YWxTd2VlcGVyKiBJbmNyZW1lbnRhbFN3ZWVwZXI6OmNyZWF0ZShI
ZWFwKiBoZWFwKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5jcmVtZW50YWxTd2VlcGVy
KGhlYXAsIENGUnVuTG9vcEdldEN1cnJlbnQoKSkpOworICAgIHJldHVybiBuZXcgSW5jcmVtZW50
YWxTd2VlcGVyKGhlYXAsIENGUnVuTG9vcEdldEN1cnJlbnQoKSk7CiB9CiAKIHZvaWQgSW5jcmVt
ZW50YWxTd2VlcGVyOjpzY2hlZHVsZVRpbWVyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCShyZXZpc2lvbiAxMjA4ODcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQsNyArMTQsNyBAQCBjbGFzcyBIZWFwOwogICAgIAogY2xhc3MgSW5jcmVtZW50
YWxTd2VlcGVyIDogcHVibGljIEhlYXBUaW1lciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPiBjcmVhdGUoSGVhcCopOworICAgIHN0YXRpYyBJbmNy
ZW1lbnRhbFN3ZWVwZXIqIGNyZWF0ZShIZWFwKik7CiAgICAgdm9pZCBzdGFydFN3ZWVwaW5nKGNv
bnN0IEhhc2hTZXQ8TWFya2VkQmxvY2sqPiYgYmxvY2tTbmFwc2hvdCk7CiAgICAgdmlydHVhbCB2
b2lkIGRvV29yaygpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3
IEBACiAKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJIZWFwLmgi
CisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTYsNiArNTcsNyBAQCBpbmxpbmUgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0CiAgICAgCiB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9j
YXRlU2xvd0Nhc2UoKQogeworICAgIEFTU0VSVChtX2hlYXAtPmdsb2JhbERhdGEoKS0+YXBpTG9j
aygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogI2lmIENPTExFQ1RfT05fRVZFUllf
QUxMT0NBVElPTgogICAgIG1faGVhcC0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAgICBBU1NFUlQo
bV9oZWFwLT5tX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAxMjA4ODcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjcsOCArMTI3LDEwIEBAIHZvaWQgV2Vha0Jsb2NrOjpyZWFwKCkKICAgICAgICAgaWYg
KHdlYWtJbXBsLT5zdGF0ZSgpID4gV2Vha0ltcGw6OkRlYWQpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQod2Vha0ltcGwtPmpzVmFsdWUoKS5hc0Nl
bGwoKSkpCisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh3ZWFrSW1wbC0+anNWYWx1ZSgpLmFz
Q2VsbCgpKSkgeworICAgICAgICAgICAgQVNTRVJUKHdlYWtJbXBsLT5zdGF0ZSgpID09IFdlYWtJ
bXBsOjpMaXZlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKICAgICAgICAg
d2Vha0ltcGwtPnNldFN0YXRlKFdlYWtJbXBsOjpEZWFkKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMTIwODg3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGJvb2wgY2hlY2tT
eW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUq
IHJldHVybmVkRXhjZXB0aW9uKQogewotICAgIEpTTG9jayBsb2NrKGV4ZWMpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuaWRlbnRp
ZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwog
CiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0YWJsZTo6Y3Jl
YXRlKGV4ZWMsIHNvdXJjZSk7CkBAIC01Myw3ICs1Myw3IEBAIGJvb2wgY2hlY2tTeW50YXgoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCAKIAogSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlKiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKLSAgICBKU0xv
Y2sgbG9jayhleGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBBU1NFUlQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3Vy
cmVudElkZW50aWZpZXJUYWJsZSgpKTsKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmlzQ29s
bGVjdG9yQnVzeSgpKQogICAgICAgICBDUkFTSCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgJKHJldmlzaW9uIDEyMDg4
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgRGVm
YXVsdEdDQWN0aXZpdHlDYWxsYmFjayA6IHB1YmxpYyBHQ0FjdGl2aXR5Q2FsbGJhY2sgewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s+IGNy
ZWF0ZShIZWFwKik7CisgICAgc3RhdGljIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2sqIGNyZWF0
ZShIZWFwKik7CiAKICAgICBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKEhlYXAqKTsKIApAQCAt
OTEsOSArOTEsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1pbmxpbmUgUGFzc093blB0cjxE
ZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrPiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVh
dGUoSGVhcCogaGVhcCkKK2lubGluZSBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKiBEZWZhdWx0
R0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAgICByZXR1cm4gYWRv
cHRQdHIobmV3IERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcCkpOworICAgIHJldHVybiBu
ZXcgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayhoZWFwKTsKIH0KIAogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAx
MjA4ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxMCBAQAogI2luY2x1ZGUgIkNvbW1vbklkZW50
aWZpZXJzLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiRnVu
Y3Rpb25Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgogI2lu
Y2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIK
KyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5o
IgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTQVBJVmFsdWVXcmFwcGVy
LmgiCkBAIC0xNzgsMTIgKzE4MCw5IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2Jh
bERhdGFUeXAKIHsKICAgICBpbnRlcnByZXRlciA9IG5ldyBJbnRlcnByZXRlcjsKIAotICAgIGlm
IChpc1NoYXJlZEluc3RhbmNlKCkpCi0gICAgICAgIHR1cm5PZmZWZXJpZmllcigpOwotCiAgICAg
Ly8gTmVlZCB0byBiZSBjYXJlZnVsIHRvIGtlZXAgZXZlcnl0aGluZyBjb25zaXN0ZW50IGhlcmUK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayh0aGlzKTsKICAgICBJZGVudGlmaWVyVGFibGUqIGV4aXN0
aW5nRW50cnlJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50
aWZpZXJUYWJsZShpZGVudGlmaWVyVGFibGUpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CiAgICAgc3RydWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywgU3RydWN0dXJl
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMpKTsKICAgICBkZWJ1Z2dlckFjdGl2YXRpb25TdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKICAgICBhY3RpdmF0aW9uU3RydWN0dXJlLnNldCgqdGhpcywgSlNBY3Rp
dmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkBAIC0yMjIsNiAr
MjIxLDkgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogCiBKU0ds
b2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQogeworICAgIEFTU0VSVCghbV9hcGlMb2NrLmN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOworICAgIGhlYXAuYWN0aXZpdHlDYWxsYmFjaygpLT5k
aWRTdGFydFZNU2h1dGRvd24oKTsKKyAgICBoZWFwLnN3ZWVwZXIoKS0+ZGlkU3RhcnRWTVNodXRk
b3duKCk7CiAgICAgaGVhcC5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogCiAgICAgZGVsZXRlIGlu
dGVycHJldGVyOwpAQCAtMzExLDYgKzMxMyw3IEBAIGJvb2wgSlNHbG9iYWxEYXRhOjpzaGFyZWRJ
bnN0YW5jZUV4aXN0cygKIAogSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3Rh
bmNlKCkKIHsKKyAgICBHbG9iYWxKU0xvY2sgZ2xvYmFsTG9jazsKICAgICBKU0dsb2JhbERhdGEq
JiBpbnN0YW5jZSA9IHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKICAgICBpZiAoIWluc3RhbmNl
KSB7CiAgICAgICAgIGluc3RhbmNlID0gYWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0YShBUElTaGFy
ZWQsIFRocmVhZFN0YWNrVHlwZVNtYWxsLCBTbWFsbEhlYXApKS5sZWFrUmVmKCk7CkBAIC0zMjEs
NyArMzI0LDYgQEAgSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbgogCiBK
U0dsb2JhbERhdGEqJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKQogewot
ICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIHN0
YXRpYyBKU0dsb2JhbERhdGEqIHNoYXJlZEluc3RhbmNlOwogICAgIHJldHVybiBzaGFyZWRJbnN0
YW5jZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5oCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1
ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbnRyaW5zaWMuaCIKICNpbmNsdWRlICJKSVRTdHVicy5o
IgorI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKICNpbmNsdWRlICJM
TEludERhdGEuaCIKICNpbmNsdWRlICJOdW1lcmljU3RyaW5ncy5oIgpAQCAtNDYsOCArNDcsOCBA
QAogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgogI2lu
Y2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQpA
QCAtMTUyLDcgKzE1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAjZW5kaWYKIAotICAg
IGNsYXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEpTR2xvYmFsRGF0YT4gewor
ICAgIGNsYXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKU0ds
b2JhbERhdGE+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIC8vIFdlYkNvcmUgaGFzIGEgb25lLXRv
LW9uZSBtYXBwaW5nIG9mIHRocmVhZHMgdG8gSlNHbG9iYWxEYXRhczsKICAgICAgICAgLy8gZWl0
aGVyIGNyZWF0ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNl
CkBAIC0xODAsNiArMTgxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgbWFr
ZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGluZVRocmVhZHMoKS5tYWtl
VXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOyB9CiAKKyAgICBwcml2YXRlOgorICAgICAgICBK
U0xvY2sgbV9hcGlMb2NrOworCisgICAgcHVibGljOgogICAgICAgICBIZWFwIGhlYXA7IC8vIFRo
ZSBoZWFwIGlzIG91ciBmaXJzdCBkYXRhIG1lbWJlciB0byBlbnN1cmUgdGhhdCBpdCdzIGRlc3Ry
dWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJlbmNlIGl0LgogCiAgICAgICAg
IEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlOwpAQCAtNDA5LDYgKzQxNCw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihmbG9hdDY0LCBG
bG9hdDY0KTsKICN1bmRlZiByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbgogCisgICAgICAgIEpT
TG9jayYgYXBpTG9jaygpIHsgcmV0dXJuIG1fYXBpTG9jazsgfQorCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw4ICsxMTQsNiBAQCB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gc3RhdGljIGlubGluZSB2b2lkCiAKIEpTR2xvYmFsT2JqZWN0Ojp+SlNH
bG9iYWxPYmplY3QoKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdMb2NrKCkpOwotCiAgICAgaWYgKG1fZGVidWdnZXIpCiAgICAgICAgIG1fZGVidWdnZXItPmRl
dGFjaCh0aGlzKTsKIApAQCAtMTMwLDcgKzEyOCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmRl
c3Ryb3koSlNDZWxsKiBjZWwKIAogdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChKU09iamVjdCog
dGhpc1ZhbHVlKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdM
b2NrKCkpOworICAgIEFTU0VSVChnbG9iYWxEYXRhKCkuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCkpOwogICAgIAogICAgIG1fZ2xvYmFsU2NvcGVDaGFpbi5zZXQoZ2xvYmFs
RGF0YSgpLCB0aGlzLCBTY29wZUNoYWluTm9kZTo6Y3JlYXRlKDAsIHRoaXMsICZnbG9iYWxEYXRh
KCksIHRoaXMsIHRoaXNWYWx1ZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTG9jay5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIAog
I2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NvcGVDaGFp
bi5oIgogCkBAIC0zOCw5NCArMzksOTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgKE9TKERBUldJ
TikgfHwgVVNFKFBUSFJFQURTKSkKIAogLy8gQWNxdWlyZSB0aGlzIG11dGV4IGJlZm9yZSBhY2Nl
c3NpbmcgbG9jay1yZWxhdGVkIGRhdGEuCi1zdGF0aWMgcHRocmVhZF9tdXRleF90IEpTTXV0ZXgg
PSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnaWFu
dEdsb2JhbEpTTG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CiAKLS8vIFRocmVhZC1z
cGVjaWZpYyBrZXkgdGhhdCB0ZWxscyB3aGV0aGVyIGEgdGhyZWFkIGhvbGRzIHRoZSBKU011dGV4
LCBhbmQgaG93IG1hbnkgdGltZXMgaXQgd2FzIHRha2VuIHJlY3Vyc2l2ZWx5LgotcHRocmVhZF9r
ZXlfdCBKU0xvY2tDb3VudDsKK0dsb2JhbEpTTG9jazo6R2xvYmFsSlNMb2NrKCkKK3sKKyAgICBw
dGhyZWFkX211dGV4X2xvY2soJmdpYW50R2xvYmFsSlNMb2NrKTsKK30KIAotc3RhdGljIHZvaWQg
Y3JlYXRlSlNMb2NrQ291bnQoKQorR2xvYmFsSlNMb2NrOjp+R2xvYmFsSlNMb2NrKCkKIHsKLSAg
ICBwdGhyZWFkX2tleV9jcmVhdGUoJkpTTG9ja0NvdW50LCAwKTsKKyAgICBwdGhyZWFkX211dGV4
X3VubG9jaygmZ2lhbnRHbG9iYWxKU0xvY2spOwogfQogCi1wdGhyZWFkX29uY2VfdCBjcmVhdGVK
U0xvY2tDb3VudE9uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKK0pTTG9ja0hvbGRlcjo6SlNMb2Nr
SG9sZGVyKEV4ZWNTdGF0ZSogZXhlYykKKyAgICA6IG1fZ2xvYmFsRGF0YSgmZXhlYy0+Z2xvYmFs
RGF0YSgpKQoreworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKK30KIAotLy8g
TG9jayBuZXN0aW5nIGNvdW50LgotaW50cHRyX3QgSlNMb2NrOjpsb2NrQ291bnQoKQorSlNMb2Nr
SG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgIDogbV9n
bG9iYWxEYXRhKGdsb2JhbERhdGEpCiB7Ci0gICAgcHRocmVhZF9vbmNlKCZjcmVhdGVKU0xvY2tD
b3VudE9uY2UsIGNyZWF0ZUpTTG9ja0NvdW50KTsKKyAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2so
KS5sb2NrKCk7Cit9CiAKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocHRo
cmVhZF9nZXRzcGVjaWZpYyhKU0xvY2tDb3VudCkpOworSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xk
ZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIDogbV9nbG9iYWxEYXRhKCZnbG9iYWxE
YXRhKQoreworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKIH0KIAotc3RhdGlj
IHZvaWQgc2V0TG9ja0NvdW50KGludHB0cl90IGNvdW50KQorSlNMb2NrSG9sZGVyOjp+SlNMb2Nr
SG9sZGVyKCkKIHsKLSAgICBBU1NFUlQoY291bnQgPj0gMCk7Ci0gICAgcHRocmVhZF9zZXRzcGVj
aWZpYyhKU0xvY2tDb3VudCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY291bnQpKTsKKyAgICBt
X2dsb2JhbERhdGEtPmFwaUxvY2soKS51bmxvY2soKTsKIH0KIAotSlNMb2NrOjpKU0xvY2soRXhl
Y1N0YXRlKiBleGVjKQotICAgIDogbV9sb2NrQmVoYXZpb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLmlz
U2hhcmVkSW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5KQor
SlNMb2NrOjpKU0xvY2soKQorICAgIDogbV9sb2NrQ291bnQoMCkKIHsKLSAgICBsb2NrKG1fbG9j
a0JlaGF2aW9yKTsKKyAgICBtX3NwaW5Mb2NrLkluaXQoKTsKIH0KIAotSlNMb2NrOjpKU0xvY2so
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgIDogbV9sb2NrQmVoYXZpb3IoZ2xvYmFsRGF0
YS0+aXNTaGFyZWRJbnN0YW5jZSgpID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpCitKU0xvY2s6On5KU0xvY2soKQogewotICAgIGxvY2sobV9sb2NrQmVoYXZpb3IpOwogfQog
Ci12b2lkIEpTTG9jazo6bG9jayhKU0xvY2tCZWhhdmlvciBsb2NrQmVoYXZpb3IpCit2b2lkIEpT
TG9jazo6bG9jaygpCiB7Ci0jaWZkZWYgTkRFQlVHCi0gICAgLy8gTG9ja2luZyAibm90IGZvciBy
ZWFsIiBpcyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICBpZiAobG9ja0JlaGF2aW9yID09IFNp
bGVuY2VBc3NlcnRpb25zT25seSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCisgICAgVGhyZWFk
SWRlbnRpZmllciBjdXJyZW50VGhyZWFkID0gV1RGOjpjdXJyZW50VGhyZWFkKCk7CisgICAgewor
ICAgICAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJm1fc3BpbkxvY2spOworICAgICAgICBpZiAo
bV9vd25lclRocmVhZCA9PSBjdXJyZW50VGhyZWFkICYmIG1fbG9ja0NvdW50KSB7CisgICAgICAg
ICAgICBtX2xvY2tDb3VudCsrOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQogCi0gICAgcHRocmVhZF9vbmNlKCZjcmVhdGVKU0xvY2tDb3VudE9uY2UsIGNyZWF0ZUpTTG9j
a0NvdW50KTsKKyAgICBtX2xvY2subG9jaygpOwogCi0gICAgaW50cHRyX3QgY3VycmVudExvY2tD
b3VudCA9IGxvY2tDb3VudCgpOwotICAgIGlmICghY3VycmVudExvY2tDb3VudCAmJiBsb2NrQmVo
YXZpb3IgPT0gTG9ja0ZvclJlYWwpIHsKLSAgICAgICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfbXV0
ZXhfbG9jaygmSlNNdXRleCk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCAhcmVzdWx0
KTsKKyAgICB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmbV9zcGluTG9jayk7Cisg
ICAgICAgIG1fb3duZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkOworICAgICAgICBBU1NFUlQoIW1f
bG9ja0NvdW50KTsKKyAgICAgICAgbV9sb2NrQ291bnQgPSAxOwogICAgIH0KLSAgICBzZXRMb2Nr
Q291bnQoY3VycmVudExvY2tDb3VudCArIDEpOwogfQogCi12b2lkIEpTTG9jazo6dW5sb2NrKEpT
TG9ja0JlaGF2aW9yIGxvY2tCZWhhdmlvcikKK3ZvaWQgSlNMb2NrOjp1bmxvY2soKQogewotICAg
IEFTU0VSVChsb2NrQ291bnQoKSk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdM
b2NrKCkpOwogCi0jaWZkZWYgTkRFQlVHCi0gICAgLy8gTG9ja2luZyAibm90IGZvciByZWFsIiBp
cyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICBpZiAobG9ja0JlaGF2aW9yID09IFNpbGVuY2VB
c3NlcnRpb25zT25seSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCisgICAgU3BpbkxvY2tIb2xk
ZXIgaG9sZGVyKCZtX3NwaW5Mb2NrKTsKKyAgICBtX2xvY2tDb3VudC0tOwogCi0gICAgaW50cHRy
X3QgbmV3TG9ja0NvdW50ID0gbG9ja0NvdW50KCkgLSAxOwotICAgIHNldExvY2tDb3VudChuZXdM
b2NrQ291bnQpOwotICAgIGlmICghbmV3TG9ja0NvdW50ICYmIGxvY2tCZWhhdmlvciA9PSBMb2Nr
Rm9yUmVhbCkgewotICAgICAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9tdXRleF91bmxvY2soJkpT
TXV0ZXgpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJlc3VsdCk7Ci0gICAgfQor
ICAgIGlmICghbV9sb2NrQ291bnQpCisgICAgICAgIG1fbG9jay51bmxvY2soKTsKIH0KIAogdm9p
ZCBKU0xvY2s6OmxvY2soRXhlY1N0YXRlKiBleGVjKQogewotICAgIGxvY2soZXhlYy0+Z2xvYmFs
RGF0YSgpLmlzU2hhcmVkSW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBleGVjLT5nbG9iYWxEYXRhKCkuYXBpTG9jaygpLmxvY2soKTsKIH0KIAog
dm9pZCBKU0xvY2s6OnVubG9jayhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgdW5sb2NrKGV4ZWMt
Pmdsb2JhbERhdGEoKS5pc1NoYXJlZEluc3RhbmNlKCkgPyBMb2NrRm9yUmVhbCA6IFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmFwaUxvY2soKS51bmxvY2so
KTsKIH0KIAogYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkKIHsKLSAg
ICBwdGhyZWFkX29uY2UoJmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNMb2NrQ291bnQp
OwotICAgIHJldHVybiAhIXB0aHJlYWRfZ2V0c3BlY2lmaWMoSlNMb2NrQ291bnQpOworICAgIHJl
dHVybiBtX2xvY2tDb3VudCAmJiBtX293bmVyVGhyZWFkID09IFdURjo6Y3VycmVudFRocmVhZCgp
OwogfQogCiAvLyBUaGlzIGlzIGZhaXJseSBuYXN0eS4gIFdlIGFsbG93IG11bHRpcGxlIHRocmVh
ZHMgdG8gcnVuIG9uIHRoZSBzYW1lCkBAIC0xNjgsNzQgKzE3MSw2OSBAQCBib29sIEpTTG9jazo6
Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soCiAvLyBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUg
bWFkZSAtIHRob3VnaCBpbXBsZW1lbnRpbmcgdGhlIGxlc3MgcmVzdHJpY3RpdmUgcG9saWN5CiAv
LyB3b3VsZCBsaWtlbHkgaW5jcmVhc2UgY29tcGxleGl0eSBhbmQgb3ZlcmhlYWQuCiAvLwotc3Rh
dGljIHVuc2lnbmVkIGxvY2tEcm9wRGVwdGggPSAwOwogCi1KU0xvY2s6OkRyb3BBbGxMb2Nrczo6
RHJvcEFsbExvY2tzKEV4ZWNTdGF0ZSogZXhlYykKLSAgICA6IG1fbG9ja0JlaGF2aW9yKGV4ZWMt
Pmdsb2JhbERhdGEoKS5pc1NoYXJlZEluc3RhbmNlKCkgPyBMb2NrRm9yUmVhbCA6IFNpbGVuY2VB
c3NlcnRpb25zT25seSkKKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGxv
Y2tzIHRoYXQgd2VyZSBkcm9wcGVkLgordW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3MoKQog
ewotICAgIHB0aHJlYWRfb25jZSgmY3JlYXRlSlNMb2NrQ291bnRPbmNlLCBjcmVhdGVKU0xvY2tD
b3VudCk7Ci0KLSAgICBpZiAobG9ja0Ryb3BEZXB0aCsrKSB7Ci0gICAgICAgIG1fbG9ja0NvdW50
ID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9sb2NrRHJvcERlcHRoKysp
CisgICAgICAgIHJldHVybiAwOwogCi0gICAgbV9sb2NrQ291bnQgPSBKU0xvY2s6OmxvY2tDb3Vu
dCgpOwotICAgIGZvciAoaW50cHRyX3QgaSA9IDA7IGkgPCBtX2xvY2tDb3VudDsgaSsrKQotICAg
ICAgICBKU0xvY2s6OnVubG9jayhtX2xvY2tCZWhhdmlvcik7CisgICAgcmV0dXJuIGRyb3BBbGxM
b2Nrc1VuY29uZGl0aW9uYWxseSgpOwogfQogCi1KU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFs
bExvY2tzKEpTTG9ja0JlaGF2aW9yIEpTTG9ja0JlaGF2aW9yKQotICAgIDogbV9sb2NrQmVoYXZp
b3IoSlNMb2NrQmVoYXZpb3IpCit1bnNpZ25lZCBKU0xvY2s6OmRyb3BBbGxMb2Nrc1VuY29uZGl0
aW9uYWxseSgpCiB7Ci0gICAgcHRocmVhZF9vbmNlKCZjcmVhdGVKU0xvY2tDb3VudE9uY2UsIGNy
ZWF0ZUpTTG9ja0NvdW50KTsKKyAgICB1bnNpZ25lZCBsb2NrQ291bnQgPSBtX2xvY2tDb3VudDsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9ja0NvdW50OyBpKyspCisgICAgICAgIHVu
bG9jaygpOwogCi0gICAgaWYgKGxvY2tEcm9wRGVwdGgrKykgewotICAgICAgICBtX2xvY2tDb3Vu
dCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgcmV0dXJuIGxvY2tDb3VudDsKK30K
IAotICAgIC8vIEl0IGlzIG5lY2Vzc2FyeSB0byBkcm9wIGV2ZW4gInVucmVhbCIgbG9ja3MsIGJl
Y2F1c2UgaGF2aW5nIGEgbm9uLXplcm8gbG9jayBjb3VudAotICAgIC8vIHdpbGwgcHJldmVudCBh
IHJlYWwgbG9jayBmcm9tIGJlaW5nIHRha2VuLgordm9pZCBKU0xvY2s6OmdyYWJBbGxMb2Nrcyh1
bnNpZ25lZCBsb2NrQ291bnQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvY2tD
b3VudDsgaSsrKQorICAgICAgICBsb2NrKCk7CiAKLSAgICBtX2xvY2tDb3VudCA9IEpTTG9jazo6
bG9ja0NvdW50KCk7Ci0gICAgZm9yIChpbnRwdHJfdCBpID0gMDsgaSA8IG1fbG9ja0NvdW50OyBp
KyspCi0gICAgICAgIEpTTG9jazo6dW5sb2NrKG1fbG9ja0JlaGF2aW9yKTsKKyAgICBtX2xvY2tE
cm9wRGVwdGgtLTsKIH0KIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6On5Ecm9wQWxsTG9ja3MoKQor
SlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhFeGVjU3RhdGUqIGV4ZWMpCisgICAg
OiBtX2xvY2tDb3VudCgwKQorICAgICwgbV9nbG9iYWxEYXRhKCZleGVjLT5nbG9iYWxEYXRhKCkp
CiB7Ci0gICAgZm9yIChpbnRwdHJfdCBpID0gMDsgaSA8IG1fbG9ja0NvdW50OyBpKyspCi0gICAg
ICAgIEpTTG9jazo6bG9jayhtX2xvY2tCZWhhdmlvcik7Ci0KLSAgICAtLWxvY2tEcm9wRGVwdGg7
CisgICAgbV9sb2NrQ291bnQgPSBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5kcm9wQWxsTG9ja3Mo
KTsKIH0KIAotI2Vsc2UgLy8gKE9TKERBUldJTikgfHwgVVNFKFBUSFJFQURTKSkKK0pTTG9jazo6
RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAg
IDogbV9sb2NrQ291bnQoMCkKKyAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQoreworICAg
IG1fbG9ja0NvdW50ID0gbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZHJvcEFsbExvY2tzKCk7Cit9
CiAKLUpTTG9jazo6SlNMb2NrKEV4ZWNTdGF0ZSopCi0gICAgOiBtX2xvY2tCZWhhdmlvcihTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpCitKU0xvY2s6OkRyb3BBbGxMb2Nrczo6fkRyb3BBbGxMb2Nrcygp
CiB7CisgICAgbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZ3JhYkFsbExvY2tzKG1fbG9ja0NvdW50
KTsKIH0KIAotLy8gSWYgdGhyZWFkaW5nIHN1cHBvcnQgaXMgb2ZmLCBzZXQgdGhlIGxvY2sgY291
bnQgdG8gYSBjb25zdGFudCB2YWx1ZSBvZiAxIHNvIHNzZXJ0aW9ucwotLy8gdGhhdCB0aGUgbG9j
ayBpcyBoZWxkIGRvbid0IGZhaWwKLWludHB0cl90IEpTTG9jazo6bG9ja0NvdW50KCkKKyNlbHNl
IC8vIChPUyhEQVJXSU4pIHx8IFVTRShQVEhSRUFEUykpCisKK0dsb2JhbEpTTG9jazo6R2xvYmFs
SlNMb2NrKCkKIHsKLSAgICByZXR1cm4gMTsKIH0KIAotYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdMb2NrKCkKK0dsb2JhbEpTTG9jazo6fkdsb2JhbEpTTG9jaygpCiB7Ci0gICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNMb2NrOjpsb2NrKEpTTG9ja0JlaGF2aW9yKQorSlNM
b2NrOjpKU0xvY2soRXhlY1N0YXRlKikKIHsKIH0KIAotdm9pZCBKU0xvY2s6OnVubG9jayhKU0xv
Y2tCZWhhdmlvcikKK2Jvb2wgSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpCiB7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgSlNMb2NrOjpsb2NrKEV4ZWNTdGF0ZSopCkBA
IC0yNTAsMTAgKzI0OCw2IEBAIEpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoRXhl
Y1MKIHsKIH0KIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhKU0xvY2tCZWhh
dmlvcikKLXsKLX0KLQogSlNMb2NrOjpEcm9wQWxsTG9ja3M6On5Ecm9wQWxsTG9ja3MoKQogewog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgJKHJldmlzaW9uIDEy
MDg4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMyw2ICsyMyw5IEBACiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVENTcGluTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiAKQEAgLTUxLDU1ICs1NCw2MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwogCi0gICAgZW51bSBK
U0xvY2tCZWhhdmlvciB7IFNpbGVuY2VBc3NlcnRpb25zT25seSwgTG9ja0ZvclJlYWwgfTsKKyAg
ICAvLyBUaGlzIGNsYXNzIHNob3VsZCBvbmx5IGJlIHVzZWQgbG9jYWxseSB3aXRoaW4gQVBJIGNh
bGxzIHRvIGRvIG1pc2NlbGxhbmVvdXMgCisgICAgLy8gbm9uLXRocmVhZC1zYWZlIHRoaW5ncyBs
aWtlIGdyYWJiaW5nIHRoZSBzaGFyZWQgZ2xvYmFsIGRhdGEsIGV0Yy4KKyAgICBjbGFzcyBHbG9i
YWxKU0xvY2sgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHbG9iYWxKU0xvY2spOwor
ICAgIHB1YmxpYzoKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR2xvYmFsSlNMb2NrKCk7Cisg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5HbG9iYWxKU0xvY2soKTsKKyAgICB9OworCisgICAg
Y2xhc3MgSlNMb2NrSG9sZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTTG9ja0hvbGRlcihKU0dsb2JhbERhdGEqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgSlNMb2NrSG9sZGVyKEpTR2xvYmFsRGF0YSYpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBKU0xvY2tIb2xkZXIoRXhlY1N0YXRlKik7CisKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
fkpTTG9ja0hvbGRlcigpOworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU0dsb2JhbERh
dGE+IG1fZ2xvYmFsRGF0YTsKKyAgICB9OwogCiAgICAgY2xhc3MgSlNMb2NrIHsKICAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSlNMb2NrKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTTG9jayhFeGVjU3RhdGUqKTsKLSAgICAgICAgSlNMb2NrKEpTR2xvYmFs
RGF0YSopOworICAgICAgICBKU0xvY2soKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpT
TG9jaygpOworCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9jaygpOworICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9jaygpOwogCi0gICAgICAgIEpTTG9jayhKU0xv
Y2tCZWhhdmlvciBsb2NrQmVoYXZpb3IpCi0gICAgICAgICAgICA6IG1fbG9ja0JlaGF2aW9yKGxv
Y2tCZWhhdmlvcikKLSAgICAgICAgewotI2lmZGVmIE5ERUJVRwotICAgICAgICAgICAgLy8gTG9j
a2luZyAibm90IGZvciByZWFsIiBpcyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICAgICAgICAg
IGlmIChsb2NrQmVoYXZpb3IgPT0gU2lsZW5jZUFzc2VydGlvbnNPbmx5KQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSNlbmRpZgotICAgICAgICAgICAgbG9jayhsb2NrQmVoYXZpb3IpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgfkpTTG9jaygpCi0gICAgICAgIHsgCi0jaWZkZWYgTkRFQlVHCi0g
ICAgICAgICAgICAvLyBMb2NraW5nICJub3QgZm9yIHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0
dXJlLgotICAgICAgICAgICAgaWYgKG1fbG9ja0JlaGF2aW9yID09IFNpbGVuY2VBc3NlcnRpb25z
T25seSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICAgICAgICAgIHVubG9j
ayhtX2xvY2tCZWhhdmlvcik7IAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBsb2NrKEpTTG9ja0JlaGF2aW9yKTsKLSAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdW5sb2NrKEpTTG9ja0JlaGF2aW9yKTsKICAgICAg
ICAgc3RhdGljIHZvaWQgbG9jayhFeGVjU3RhdGUqKTsKICAgICAgICAgc3RhdGljIHZvaWQgdW5s
b2NrKEV4ZWNTdGF0ZSopOworICAgICAgICBzdGF0aWMgdm9pZCBsb2NrKEpTR2xvYmFsRGF0YSYp
OworICAgICAgICBzdGF0aWMgdm9pZCB1bmxvY2soSlNHbG9iYWxEYXRhJik7CiAKLSAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGludHB0cl90IGxvY2tDb3VudCgpOwotICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygp
OworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdM
b2NrKCk7CiAKLSAgICAgICAgSlNMb2NrQmVoYXZpb3IgbV9sb2NrQmVoYXZpb3I7CisgICAgICAg
IHVuc2lnbmVkIGRyb3BBbGxMb2NrcygpOworICAgICAgICB1bnNpZ25lZCBkcm9wQWxsTG9ja3NV
bmNvbmRpdGlvbmFsbHkoKTsKKyAgICAgICAgdm9pZCBncmFiQWxsTG9ja3ModW5zaWduZWQgbG9j
a0NvdW50KTsKKworICAgICAgICBTcGluTG9jayBtX3NwaW5Mb2NrOworICAgICAgICBNdXRleCBt
X2xvY2s7CisgICAgICAgIFRocmVhZElkZW50aWZpZXIgbV9vd25lclRocmVhZDsKKyAgICAgICAg
aW50cHRyX3QgbV9sb2NrQ291bnQ7CisgICAgICAgIHVuc2lnbmVkIG1fbG9ja0Ryb3BEZXB0aDsK
IAogICAgICAgICBjbGFzcyBEcm9wQWxsTG9ja3MgewogICAgICAgICAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoRHJvcEFsbExvY2tzKTsKICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgRHJvcEFsbExvY2tzKEV4ZWNTdGF0ZSogZXhlYyk7Ci0gICAgICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBEcm9wQWxsTG9ja3MoSlNMb2NrQmVoYXZpb3IpOworICAgICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRHJvcEFsbExvY2tzKEpTR2xvYmFsRGF0YSopOwogICAg
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkRyb3BBbGxMb2NrcygpOwogICAgICAgICAgICAg
CiAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKLSAg
ICAgICAgICAgIEpTTG9ja0JlaGF2aW9yIG1fbG9ja0JlaGF2aW9yOworICAgICAgICAgICAgUmVm
UHRyPEpTR2xvYmFsRGF0YT4gbV9nbG9iYWxEYXRhOwogICAgICAgICB9OwogICAgIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCShyZXZpc2lvbiAx
MjA4ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtNzUsOCArNzUsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBIYW5k
bGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJmlt
cGwtPmpzVmFsdWUoKSkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIGNv
bnN0IEtleVR5cGUmIGtleSwgRXh0ZXJuYWxUeXBlIHZhbHVlKQorICAgIHZvaWQgc2V0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgS2V5VHlwZSYga2V5LCBFeHRlcm5hbFR5cGUgdmFs
dWUpCiAgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbERhdGEsIGdsb2JhbERhdGEu
YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgICAgICB0eXBlbmFt
ZSBNYXBUeXBlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7CiAgICAgICAg
IGlmICghcmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRl
KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDg5
MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDI1MyBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEN1
cnJlbnQgcmVncmVzc2lvbiB0ZXN0cyBhcmUgc3VmZmljaWVudC4KKworICAgICAgICBDaGFuZ2Vk
IGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2Nr
SG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0
aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHBy
b3RlY3Rpb24uIEFsc28gYWRkZWQgYSBjb3VwbGUgSlNMb2NrcyB0byBwbGFjZXMgdGhhdCBkaWRu
J3QgYWxyZWFkeSAKKyAgICAgICAgaGF2ZSBpdCB0aGF0IG5lZWRlZCBpdC4KKworICAgICAgICAq
IGJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpkaXNjYXJkQWxsQ29tcGlsZWRDb2RlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVF
dmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21Wb2lkQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmFtZXNwYWNlVVJJKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZl
bnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0
ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0
SG9zdDo6bm9kZUFzU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNj
cmlwdEhvc3Q6Omluc3BlY3RlZE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyOjpjcmVhdGVJbmplY3RlZFNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3Rl
ZFNjcmlwdE1hbmFnZXI6OmNhbkFjY2Vzc0luc3BlY3RlZFdpbmRvdyk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xh
enlFdmVudExpc3RlbmVyOjppbml0aWFsaXplSlNGdW5jdGlvbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU01haW5U
aHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0
aW9uQ2FsbGJhY2tDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNdXRhdGlvbkNhbGxi
YWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29u
ZGl0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNj
ZXB0Tm9kZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVD
YWxsYmFja0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1JlcXVlc3RBbmltYXRpb25G
cmFtZUNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSmF2YVNj
cmlwdENhbGxGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1l
OjpldmFsdWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxl
QWxsSlNGdW5jdGlvbnMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGVGdW5jdGlvbklu
Q29udGV4dCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVk
RnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVz
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Xb3JsZCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6Y2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6YmluZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0TlBPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0Q29udHJvbGxlcjo6anNPYmplY3RGb3JQbHVnaW5FbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cyk6CisgICAg
ICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE9iamVjdCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1c2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nj
cmlwdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnRMaXN0ZW5lckhh
bmRsZXJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmV2ZW50TGlzdGVuZXJIYW5kbGVyTG9jYXRp
b24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6OnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6OmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6OnJlbW92ZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6OmdldFN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6dG9JbnNwZWN0b3JWYWx1ZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjp+V29ya2VyU2NyaXB0Q29udHJvbGxl
cik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppbml0U2NyaXB0
KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmRpc2FibGVFdmFsKToK
KyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAgICAgKF9k
aWRFeGVjdXRlKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IF9zZXRJbXA6b3JpZ2luUm9v
dE9iamVjdDpyb290T2JqZWN0Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgX3NldE9y
aWdpblJvb3RPYmplY3Q6YW5kUm9vdE9iamVjdDpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2Jq
ZWN0IGRlYWxsb2NdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGZpbmFsaXplXSk6Cisg
ICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBjYWxsV2ViU2NyaXB0TWV0aG9kOndpdGhBcmd1bWVu
dHM6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBldmFsdWF0ZVdlYlNjcmlwdDpdKToK
KyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHNldFZhbHVlOmZvcktleTpdKToKKyAgICAgICAg
KC1bV2ViU2NyaXB0T2JqZWN0IHZhbHVlRm9yS2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRP
YmplY3QgcmVtb3ZlV2ViU2NyaXB0S2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qg
aGFzV2ViU2NyaXB0S2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc3RyaW5nUmVw
cmVzZW50YXRpb25dKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHdlYlNjcmlwdFZhbHVl
QXRJbmRleDpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHNldFdlYlNjcmlwdFZhbHVl
QXRJbmRleDp2YWx1ZTpdKToKKyAgICAgICAgKCtbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFs
dWVUb09iamNWYWx1ZTpvcmlnaW5Sb290T2JqZWN0OnJvb3RPYmplY3Q6XSk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUNh
bGxiYWNrSW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6
Y2FsbGJhY2tXaXRoTm9QYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6
Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJh
Y2s6OmNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENh
bGxiYWNrOjpjYWxsYmFja1dpdGhTdHJpbmdMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dENhbGxiYWNrOjpjYWxsYmFja1dpdGhCb29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dENhbGxiYWNrOjpjYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyk6CisgICAgICAgICogYnJpZGdl
L05QX2pzb2JqZWN0LmNwcDoKKyAgICAgICAgKF9OUE5fSW52b2tlRGVmYXVsdCk6CisgICAgICAg
IChfTlBOX0ludm9rZSk6CisgICAgICAgIChfTlBOX0V2YWx1YXRlKToKKyAgICAgICAgKF9OUE5f
R2V0UHJvcGVydHkpOgorICAgICAgICAoX05QTl9TZXRQcm9wZXJ0eSk6CisgICAgICAgIChfTlBO
X1JlbW92ZVByb3BlcnR5KToKKyAgICAgICAgKF9OUE5fSGFzUHJvcGVydHkpOgorICAgICAgICAo
X05QTl9IYXNNZXRob2QpOgorICAgICAgICAoX05QTl9FbnVtZXJhdGUpOgorICAgICAgICAoX05Q
Tl9Db25zdHJ1Y3QpOgorICAgICAgICAqIGJyaWRnZS9jL2NfY2xhc3MuY3BwOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6Q0NsYXNzOjp+Q0NsYXNzKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OkNDbGFzczo6bWV0aG9kc05hbWVkKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNDbGFzczo6
ZmllbGROYW1lZCk6CisgICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5jZS5jcHA6CisgICAgICAg
IChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0
ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZU1ldGhvZCk6Cisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QpOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjppbnZva2VDb25zdHJ1Y3QpOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAg
ICAgKiBicmlkZ2UvYy9jX3J1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0Zp
ZWxkOjp2YWx1ZUZyb21JbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDRmllbGQ6
OnNldFZhbHVlVG9JbnN0YW5jZSk6CisgICAgICAgICogYnJpZGdlL2MvY191dGlsaXR5LmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKToKKyAgICAgICAgKiBi
cmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y2FsbCk6
CisgICAgICAgIChKYXZhSlNPYmplY3Q6OmV2YWwpOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpn
ZXRNZW1iZXIpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpzZXRNZW1iZXIpOgorICAgICAgICAo
SmF2YUpTT2JqZWN0OjpyZW1vdmVNZW1iZXIpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpnZXRT
bG90KToKKyAgICAgICAgKEphdmFKU09iamVjdDo6c2V0U2xvdCk6CisgICAgICAgIChKYXZhSlNP
YmplY3Q6OnRvU3RyaW5nKToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y29udmVydFZhbHVlVG9K
T2JqZWN0KToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhbHVlKToK
KyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9vYmpjLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6ZGlzcGF0Y2hKTklDYWxsKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5
UHJpdmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb0pWYWx1
ZSk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcDoKKyAgICAgICAg
KEphdmFDbGFzczo6SmF2YUNsYXNzKToKKyAgICAgICAgKEphdmFDbGFzczo6fkphdmFDbGFzcyk6
CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcDoKKyAgICAgICAg
KEphdmFJbnN0YW5jZTo6c3RyaW5nVmFsdWUpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0ph
dmFNZXRob2RKU0MuY3BwOgorICAgICAgICAoYXBwZW5kQ2xhc3NOYW1lKToKKyAgICAgICAgKEph
dmFNZXRob2Q6OnNpZ25hdHVyZSk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YVN0cmlu
Z0pTQy5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YVN0cmluZzo6SmF2YVN0cmluZyk6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhU3RyaW5nOjp+SmF2YVN0cmluZyk6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhU3RyaW5nOjp1dGY4KToKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OkphdmFTdHJpbmc6OmluaXQpOgorICAgICAgICAqIGJyaWRnZS9qc2MvQnJpZGdlSlND
LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Okluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0
KToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tOgorICAgICAgICAoT2Jq
Y0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUpOgorICAgICAgICAoT2Jq
Y0luc3RhbmNlOjppbnZva2VPYmpjTWV0aG9kKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6aW52
b2tlRGVmYXVsdE1ldGhvZCk6CisgICAgICAgIChPYmpjSW5zdGFuY2U6OnNldFZhbHVlT2ZVbmRl
ZmluZWRGaWVsZCk6CisgICAgICAgIChPYmpjSW5zdGFuY2U6OmdldFZhbHVlT2ZVbmRlZmluZWRG
aWVsZCk6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6T2JqY0ZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZSk6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpPYmpjRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZSk6CisgICAgICAgICog
YnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29u
dmVydFZhbHVlVG9PYmpjVmFsdWUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE5T
U3RyaW5nVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE9iamNWYWx1
ZVRvVmFsdWUpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHA6CisgICAgICAg
IChKU0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjp+UXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpnZXRRdEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OlF0SW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9x
dC9xdF9waXhtYXBydW50aW1lLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFw
SW5zdGFuY2U6OmNyZWF0ZVBpeG1hcFJ1bnRpbWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9x
dC9xdF9ydW50aW1lLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRv
UVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFFWYXJpYW50VG9WYWx1
ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjYWxsKToK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNhbGwp
OgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9ydW50aW1lX3F0NC5jcHA6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb1FWYXJpYW50KToKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6OmNvbnZlcnRRVmFyaWFudFRvVmFsdWUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRS
dW50aW1lTWV0YU1ldGhvZDo6Y2FsbCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRp
bWVDb25uZWN0aW9uTWV0aG9kOjpjYWxsKToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFn
ZUJ1ZmZlcik6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEltYWdlTG9hZGVyOjpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2Ny
aXB0Ojp3cmFwT2JqZWN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0QmFzZTo6Y2FsbEZ1bmN0aW9u
V2l0aEV2YWxFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0QmFzZTo6
bWFrZUNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZh
bENhbGwpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
dG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6Om5wT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgICogcGx1
Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdCbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0V2lu
ZG93SW5mbyk6CisgICAgICAgICogcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAqIHBs
dWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRs
ZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91
c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAg
ICAgICAqIHBsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgICogcGx1Z2lucy9xdC9QbHVnaW5WaWV3
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgICogcGx1
Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxl
S2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVNb3Vz
ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdCk6
CisgICAgICAgICogdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwOgorICAgICAgICAo
V2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJbnRlcm5hbHNPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZVRlc3RTdXBwb3J0OjpyZXNldEludGVybmFsc09iamVjdCk6CisgICAgICAgICogeG1sL1hN
TEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpkcm9w
UHJvdGVjdGlvbik6CisKIDIwMTItMDYtMTkgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiByZWR1Y2UgdGltZWxpbmUgcmVmcmVz
aCByYXRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29u
dHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBzdGF0aWMgdm9pZCBjb2xsZWN0KHZvaWQqKQogewotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCktPmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKIH0KIApAQCAtNjMsNyArNjMsNyBA
QCB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKCkKICAgICAvLyBkb3duIGlu
dG8gV1RGIHNvIHRoYXQgbW9yZSBwbGF0Zm9ybXMgY2FuIHRha2UgYWR2YW50YWdlIG9mIGl0LCB3
ZSB3aWxsIGJlIAogICAgIC8vIGFibGUgdG8gdXNlIHJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBo
IG9uIG1vcmUgcGxhdGZvcm1zLgogI2lmIFVTRShDRikKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
LT5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7CiAjZWxzZQogICAgIGlmICghbV9H
Q1RpbWVyLmlzQWN0aXZlKCkpCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgR0NDb250cm9sbGVyOjpn
Y1RpbWVyRmlyZWQoVGltZXI8R0MKIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0
Tm93KCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAg
aWYgKCFKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuaXNCdXN5KCkpCiAg
ICAgICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jb2xsZWN0QWxs
R2FyYmFnZSgpOwogfQpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgR0NDb250cm9sbGVyOjpzZXRK
YXZhU2NyaXB0R2FyYmFnZUMKIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmRpc2NhcmRBbGxDb21waWxl
ZENvZGUoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuZGVsZXRlQWxsQ29tcGls
ZWRDb2RlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9t
U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAkocmV2
aXNpb24gMTIwODg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBA
QCBib29sIEpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlCiAKICAgICBSZWZQdHI8
SlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNDOjpK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3VzdG9tVm9pZENhbGxiYWNrLmNwcAkocmV2aXNpb24gMTIwODg3KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgSlNDdXN0b21Wb2lkQ2FsbGJhY2s6
OmhhbmRsZUV2ZW50KCkKIAogICAgIFJlZlB0cjxKU0N1c3RvbVZvaWRDYWxsYmFjaz4gcHJvdGVj
dCh0aGlzKTsKICAgICAgICAgCi0gICAgSlNDOjpKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRGF0YSgpKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIG1f
ZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCShyZXZpc2lv
biAxMjA4ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNS
ZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgU3RyaW5nIEpTQ3Vz
dG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYQogewogICAgIEFTU0VSVChtX2N1c3RvbVJlc29s
dmVyKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxl
ci5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXJyb3JIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEpT
RXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudChTY3JpcHRFCiAKICAgICBFcnJvckV2ZW50KiBlcnJv
ckV2ZW50ID0gc3RhdGljX2Nhc3Q8RXJyb3JFdmVudCo+KGV2ZW50KTsKIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEpTT2JqZWN0KiBqc0Z1bmN0
aW9uID0gdGhpcy0+anNGdW5jdGlvbihzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBpZiAo
IWpzRnVuY3Rpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTIwODg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgSlNW
YWx1ZSBKU0V2ZW50OjpjbGlwYm9hcmREYXRhKEV4ZWNTdGF0ZQogCiBKU1ZhbHVlIHRvSlMoRXhl
Y1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFdmVudCogZXZl
bnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIGlmICghZXZlbnQpCiAgICAgICAgIHJldHVybiBq
c051bGwoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5l
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExp
c3RlbmVyLmNwcAkocmV2aXNpb24gMTIwODg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCB2
b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAgICAgaWYgKCFzY3JpcHRF
eGVjdXRpb25Db250ZXh0IHx8IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzSlNFeGVjdXRpb25G
b3JiaWRkZW4oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5nbG9iYWxEYXRhKCkpOwogCiAgICAgSlNPYmplY3QqIGpzRnVuY3Rpb24gPSB0aGlzLT5q
c0Z1bmN0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIGlmICghanNGdW5jdGlvbikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVj
dGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODIsNyArODIsNyBAQCBOb2RlKiBJbmplY3RlZFNjcmlwdEhvc3Q6OnNjcmlwdFZh
bHVlQXNOCiAKIFNjcmlwdFZhbHVlIEluamVjdGVkU2NyaXB0SG9zdDo6bm9kZUFzU2NyaXB0VmFs
dWUoU2NyaXB0U3RhdGUqIHN0YXRlLCBOb2RlKiBub2RlKQogewotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc3RhdGUpOwogICAg
IHJldHVybiBTY3JpcHRWYWx1ZShzdGF0ZS0+Z2xvYmFsRGF0YSgpLCB0b0pTKHN0YXRlLCBkZXBy
ZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKHN0YXRlKSwgbm9kZSkpOwogfQogCkBAIC05
NSw3ICs5NSw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3RlZE8KICAg
ICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgIFNjcmlwdFZhbHVlIHNjcmlwdFZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYyk7CiAg
ICAgaWYgKHNjcmlwdFZhbHVlLmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0
TWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDcgKzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTY3JpcHRPYmplY3Qg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVJbmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcm
IHNvdXJjZSwgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBpbnQgaWQpCiB7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3Jp
cHRTdGF0ZSk7CiAKICAgICBTb3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBtYWtlU291cmNlKHN0cmlu
Z1RvVVN0cmluZyhzb3VyY2UpKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxP
YmplY3QoKSk7CkBAIC04MSw3ICs4MSw3IEBAIFNjcmlwdE9iamVjdCBJbmplY3RlZFNjcmlwdE1h
bmFnZXI6OmNyZWEKIAogYm9vbCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNhbkFjY2Vzc0luc3Bl
Y3RlZFdpbmRvdyhTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCiB7Ci0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRTdGF0
ZSk7CiAgICAgSlNET01XaW5kb3cqIGluc3BlY3RlZFdpbmRvdyA9IHRvSlNET01XaW5kb3coc2Ny
aXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgaWYgKCFpbnNwZWN0ZWRXaW5k
b3cpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIEpTT2JqZWN0KiBKU0xhenlFdmVudExpc3Rl
bmVyOjppbml0aWFsaXoKICAgICBpZiAobV9vcmlnaW5hbE5vZGUpIHsKICAgICAgICAgaWYgKCF3
cmFwcGVyKCkpIHsKICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0ICdub2RlJyBoYXMgYSBKYXZh
U2NyaXB0IHdyYXBwZXIgdG8gbWFyayB0aGUgZXZlbnQgbGlzdGVuZXIgd2UncmUgY3JlYXRpbmcu
Ci0gICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgICAgICAvLyBGSVhNRTogU2hv
dWxkIHBhc3MgdGhlIGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlCiAgICAg
ICAgICAgICBzZXRXcmFwcGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNPYmplY3QodG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIG1fb3JpZ2luYWxOb2RlKSkpOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAko
cmV2aXNpb24gMTIwODg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhy
ZWFkRXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZXZhbHVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
Qzo6U2NvcGVDaGFpbk5vZGUqIGNoYWluLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwg
SlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCiAgICAgewog
ICAgICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGUgY3VycmVudFN0YXRlKGV4ZWMpOworICAgICAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICByZXR1cm4gSlNDOjpldmFs
dWF0ZShleGVjLCBjaGFpbiwgc291cmNlLCB0aGlzVmFsdWUsIGV4Y2VwdGlvbik7CiAgICAgfTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0
aW9uQ2FsbGJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJKU011dGF0aW9uQ2FsbGJhY2suaCIKIAor
I2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgogI2luY2x1ZGUgIkpTTXV0YXRpb25SZWNvcmQu
aCIKICNpbmNsdWRlICJKU1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCkBAIC01MCw3ICs1MSw3IEBAIGJvb2wgSlNNdXRhdGlvbkNh
bGxiYWNrOjpoYW5kbGVFdmVudChNdXQKIAogICAgIFJlZlB0cjxKU011dGF0aW9uQ2FsbGJhY2s+
IHByb3RlY3QodGhpcyk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVG
aWx0ZXJDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDcgQEAgSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpKU05vZGVGaWx0
ZXJDb25kaQogCiBzaG9ydCBKU05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIE5vZGUqIGZpbHRlck5vZGUpIGNvbnN0CiB7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIGlmICghbV9maWx0ZXIpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJf
QUNDRVBUOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXF1ZXN0QW5pbWF0
aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHAJKHJl
dmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVxdWVzdEFu
aW1hdGlvbkZyYW1lQ2FsbGJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0
MCw3IEBAIGJvb2wgSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazo6aGEKIAogICAgIFJl
ZlB0cjxKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZChqc051bWJlcih0aW1lKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZy
YW1lLmNwcAkocmV2aXNpb24gMTIwODg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAK
ICNpbmNsdWRlICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCiAKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgogI2luY2x1ZGUgPGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9Db21wbGV0aW9uLmg+CkBAIC0xMDYsNyArMTA3LDcgQEAgSlNWYWx1ZSBKYXZh
U2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShjbwogICAgIGlmICghbV9pc1ZhbGlkKQogICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgIHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLmV2YWx1YXRlKHNjcmlw
dCwgZXhjZXB0aW9uKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFn
ZVNjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6
OnJlbW92ZUxpc3RlbgogCiB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxs
SlNGdW5jdGlvbnMoVGltZXI8U2NyaXB0RGVidWdTZXJ2ZXI+KikKIHsKLSAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgLy8gSWYgSmF2YVNjcmlwdCBzdGFjayBp
cyBub3QgZW1wdHkgcG9zdHBvbmUgcmVjb21waWxhdGlvbi4KICAgICBpZiAoSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5keW5hbWljR2xvYmFsT2JqZWN0KQogICAgICAgICByZWNv
bXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkocmV2aXNpb24gMTIwODg3KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTQsNyArOTQsNyBAQCB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShTY3JpcHRFeGVj
CiB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZUZ1bmN0aW9uSW5Db250ZXh0KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0KQogewogICAgIEFTU0VSVChtX2Z1bmN0aW9uKTsKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbnRl
eHQtPmdsb2JhbERhdGEoKSk7CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxEYXRhKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJh
bWVEYXRhLmNwcAkocmV2aXNpb24gMTIwODg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0
Q2FjaGVkRnJhbWVEYXRhKEZyYW1lKiBmcmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgU2NyaXB0Q29udHJvbGxlciogc2NyaXB0Q29u
dHJvbGxlciA9IGZyYW1lLT5zY3JpcHQoKTsKICAgICBTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1h
cCYgd2luZG93U2hlbGxzID0gc2NyaXB0Q29udHJvbGxlci0+bV93aW5kb3dTaGVsbHM7CkBAIC02
Nyw3ICs2Nyw3IEBAIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6flNjcmlwdENhY2hlZEZyYW0KIAog
dm9pZCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6OnJlc3RvcmUoRnJhbWUqIGZyYW1lKQogewotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBTY3JpcHRD
b250cm9sbGVyKiBzY3JpcHRDb250cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOwogICAgIFNjcmlw
dENvbnRyb2xsZXI6OlNoZWxsTWFwJiB3aW5kb3dTaGVsbHMgPSBzY3JpcHRDb250cm9sbGVyLT5t
X3dpbmRvd1NoZWxsczsKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBTY3JpcHRDYWNoZWRGcmFtZURh
dGE6OmNsZWFyKCkKICAgICBpZiAobV93aW5kb3dzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBt
X3dpbmRvd3MuY2xlYXIoKTsKICAgICBnY0NvbnRyb2xsZXIoKS5nYXJiYWdlQ29sbGVjdFNvb24o
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBA
IFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW4KICAgICBjb25zdCBTdHJp
bmcqIHNhdmVkU291cmNlVVJMID0gbV9zb3VyY2VVUkw7CiAgICAgbV9zb3VyY2VVUkwgPSAmc291
cmNlVVJMOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdCA9IG1f
ZnJhbWU7CiAKQEAgLTE3Nyw3ICsxNzcsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFy
V2luZG93U2hlbGwoCiAgICAgaWYgKG1fd2luZG93U2hlbGxzLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
IAogICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdp
bigpOyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgSlNE
T01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBpdGVyLT5zZWNvbmQuZ2V0KCk7CkBAIC0yMDks
NyArMjA5LDcgQEAgSlNET01XaW5kb3dTaGVsbCogU2NyaXB0Q29udHJvbGxlcjo6aW5pdAogewog
ICAgIEFTU0VSVCghbV93aW5kb3dTaGVsbHMuY29udGFpbnMod29ybGQpKTsKIAotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sod29y
bGQtPmdsb2JhbERhdGEoKSk7CiAKICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9
IGNyZWF0ZVdpbmRvd1NoZWxsKHdvcmxkKTsKIApAQCAtMjg0LDkgKzI4NCwxMCBAQCB2b2lkIFNj
cmlwdENvbnRyb2xsZXI6OnVwZGF0ZURvY3VtZW50KCkKICAgICBpZiAoIW1fZnJhbWUtPmRvY3Vt
ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7Ci0gICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hl
bGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikKKyAgICBm
b3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRl
ciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGl0ZXItPmZpcnN0LT5nbG9iYWxEYXRhKCkpOwogICAgICAgICBpdGVyLT5zZWNvbmQt
PndpbmRvdygpLT51cGRhdGVEb2N1bWVudCgpOworICAgIH0KIH0KIAogdm9pZCBTY3JpcHRDb250
cm9sbGVyOjp1cGRhdGVTZWN1cml0eU9yaWdpbigpCkBAIC0zMDAsNyArMzAxLDcgQEAgQmluZGlu
Z3M6OlJvb3RPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OgogICAgICAgICByZXR1cm4gMDsKIAog
ICAgIGlmICghbV9jYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdCkgewotICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgbV9jYWNoZWFi
bGVCaW5kaW5nUm9vdE9iamVjdCA9IEJpbmRpbmdzOjpSb290T2JqZWN0OjpjcmVhdGUoMCwgZ2xv
YmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fY2FjaGVhYmxl
QmluZGluZ1Jvb3RPYmplY3QuZ2V0KCk7CkBAIC0zMTIsNyArMzEzLDcgQEAgQmluZGluZ3M6OlJv
b3RPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OgogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlm
ICghbV9iaW5kaW5nUm9vdE9iamVjdCkgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgbV9iaW5kaW5nUm9vdE9iamVjdCA9IEJp
bmRpbmdzOjpSb290T2JqZWN0OjpjcmVhdGUoMCwgZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkp
KTsKICAgICB9CiAgICAgcmV0dXJuIG1fYmluZGluZ1Jvb3RPYmplY3QuZ2V0KCk7CkBAIC0zNDks
OSArMzUwLDkgQEAgTlBPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NjcmlwdAogICAg
ICAgICBpZiAoY2FuRXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKSB7CiAg
ICAgICAgICAgICAvLyBKYXZhU2NyaXB0IGlzIGVuYWJsZWQsIHNvIHRoZXJlIGlzIGEgSmF2YVNj
cmlwdCB3aW5kb3cgb2JqZWN0LgogICAgICAgICAgICAgLy8gUmV0dXJuIGFuIE5QT2JqZWN0IGJv
dW5kIHRvIHRoZSB3aW5kb3cgb2JqZWN0LgotICAgICAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgICAgICAgICAgSlNPYmplY3QqIHdpbiA9IHdpbmRv
d1NoZWxsKHBsdWdpbldvcmxkKCkpLT53aW5kb3coKTsKKyAgICAgICAgICAgIEpTRE9NV2luZG93
KiB3aW4gPSB3aW5kb3dTaGVsbChwbHVnaW5Xb3JsZCgpKS0+d2luZG93KCk7CiAgICAgICAgICAg
ICBBU1NFUlQod2luKTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sod2luLT5n
bG9iYWxFeGVjKCkpOwogICAgICAgICAgICAgQmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3QgPSBi
aW5kaW5nUm9vdE9iamVjdCgpOwogICAgICAgICAgICAgbV93aW5kb3dTY3JpcHROUE9iamVjdCA9
IF9OUE5fQ3JlYXRlU2NyaXB0T2JqZWN0KDAsIHdpbiwgcm9vdCk7CiAgICAgICAgIH0gZWxzZSB7
CkBAIC0zODMsOCArMzg0LDggQEAgSlNPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OmpzT2JqZWN0
Rm9yUAogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIENyZWF0ZSBhIEpTT2JqZWN0IGJvdW5k
IHRvIHRoaXMgZWxlbWVudAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CiAgICAgSlNET01XaW5kb3cqIGdsb2JhbE9iaiA9IGdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgp
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxPYmotPmdsb2JhbEV4ZWMoKSk7CiAgICAg
Ly8gRklYTUU6IGlzIG5vcm1hbCBva2F5PyAtIHVzZWQgZm9yIE5QIHBsdWdpbnM/CiAgICAgSlNW
YWx1ZSBqc0VsZW1lbnRWYWx1ZSA9IHRvSlMoZ2xvYmFsT2JqLT5nbG9iYWxFeGVjKCksIGdsb2Jh
bE9iaiwgcGx1Z2luKTsKICAgICBpZiAoIWpzRWxlbWVudFZhbHVlIHx8ICFqc0VsZW1lbnRWYWx1
ZS5pc09iamVjdCgpKQpAQCAtNDE4LDcgKzQxOSw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6
Y2xlYW51cFNjcmlwdE9iamUKIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9i
amVjdHMoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CiAKICAgICBSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jvb3RPYmplY3Rz
LmVuZCgpOwogICAgIGZvciAoUm9vdE9iamVjdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jv
b3RPYmplY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMTIw
ODg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIFdlYlNjcmlwdE9iamVjdCogU2Ny
aXB0Q29udHJvbGxlcjo6d2luZG8KICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fd2lu
ZG93U2NyaXB0T2JqZWN0KSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBKU0M6OkJpbmRpbmdzOjpS
b290T2JqZWN0KiByb290ID0gYmluZGluZ1Jvb3RPYmplY3QoKTsKICAgICAgICAgbV93aW5kb3dT
Y3JpcHRPYmplY3QgPSBbV2ViU2NyaXB0T2JqZWN0IHNjcmlwdE9iamVjdEZvckpTT2JqZWN0OnRv
UmVmKHdpbmRvd1NoZWxsKHBsdWdpbldvcmxkKCkpKSBvcmlnaW5Sb290T2JqZWN0OnJvb3Qgcm9v
dE9iamVjdDpyb290XTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyMiw3ICsyMjIsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBh
dXNlCiAgICAgewogICAgICAgICBpZiAobV9jdXJyZW50Q2FsbEZyYW1lLT5pc1ZhbGlkKCkgJiYg
Z2xvYmFsT2JqZWN0LT5pbmhlcml0cygmSlNET01HbG9iYWxPYmplY3Q6OnNfaW5mbykpIHsKICAg
ICAgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBkb21HbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHN0
YXRlKTsKICAgICAgICAgICAgIGpzQ2FsbEZyYW1lID0gdG9KUyhzdGF0ZSwgZG9tR2xvYmFsT2Jq
ZWN0LCBtX2N1cnJlbnRDYWxsRnJhbWUuZ2V0KCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIGpzQ2FsbEZyYW1lID0ganNVbmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxMjA4
ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBTdHJpbmcgZXZlbnRMaXN0ZW5lckhh
bmRsZXJCb2R5KERvY3VtZW50CiAgICAgQVNTRVJUKGpzTGlzdGVuZXIpOwogICAgIGlmICghanNM
aXN0ZW5lcikKICAgICAgICAgcmV0dXJuICIiOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soanNMaXN0ZW5lci0+aXNvbGF0ZWRX
b3JsZCgpLT5nbG9iYWxEYXRhKCkpOwogICAgIEpTQzo6SlNPYmplY3QqIGpzRnVuY3Rpb24gPSBq
c0xpc3RlbmVyLT5qc0Z1bmN0aW9uKGRvY3VtZW50KTsKICAgICBpZiAoIWpzRnVuY3Rpb24pCiAg
ICAgICAgIHJldHVybiAiIjsKQEAgLTExMiw3ICsxMTIsNyBAQCBib29sIGV2ZW50TGlzdGVuZXJI
YW5kbGVyTG9jYXRpb24oRG9jdW1lCiAgICAgQVNTRVJUKGpzTGlzdGVuZXIpOwogICAgIGlmICgh
anNMaXN0ZW5lcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soanNMaXN0ZW5lci0+aXNv
bGF0ZWRXb3JsZCgpLT5nbG9iYWxEYXRhKCkpOwogICAgIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0
ID0ganNMaXN0ZW5lci0+anNGdW5jdGlvbihkb2N1bWVudCk7CiAgICAgaWYgKCFqc09iamVjdCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0RnVuY3Rpb25DYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01OCwxOSArNTgsMTkgQEAgdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjph
cHBlbmRBcgogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50
KGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1l
bnRzLmFwcGVuZChqc1N0cmluZyhtX2V4ZWMsIGFyZ3VtZW50KSk7CiB9CiAKIHZvaWQgU2NyaXB0
Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgSlNDOjpVU3RyaW5nJiBh
cmd1bWVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzU3Ry
aW5nKG1fZXhlYywgYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5k
bGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBjaGFyKiBhcmd1bWVudCkKIHsKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhl
Yyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzU3RyaW5nKG1fZXhlYywgVVN0cmluZyhhcmd1
bWVudCkpKTsKIH0KIApAQCAtODEsMzEgKzgxLDMxIEBAIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50
SGFuZGxlcjo6YXBwZW5kQXIKIAogdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBl
bmRBcmd1bWVudChsb25nIGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3Vt
ZW50cy5hcHBlbmQoanNOdW1iZXIoYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxsQXJn
dW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChsb25nIGxvbmcgYXJndW1lbnQpCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhtX2V4ZWMpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihhcmd1bWVudCkpOwog
fQogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KHVuc2ln
bmVkIGludCBhcmd1bWVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAgICAgbV9hcmd1bWVudHMuYXBw
ZW5kKGpzTnVtYmVyKGFyZ3VtZW50KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFu
ZGxlcjo6YXBwZW5kQXJndW1lbnQodW5zaWduZWQgbG9uZyBhcmd1bWVudCkKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1f
ZXhlYyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGFyZ3VtZW50KSk7CiB9CiAK
IHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoaW50IGFyZ3Vt
ZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIo
YXJndW1lbnQpKTsKIH0KIApAQCAtMTI1LDcgKzEyNSw3IEBAIFNjcmlwdFZhbHVlIFNjcmlwdEZ1
bmN0aW9uQ2FsbDo6Y2FsbChib28KIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IG1fdGhp
c09iamVjdC5qc09iamVjdCgpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogCiAgICAgSlNWYWx1ZSBmdW5j
dGlvbiA9IHRoaXNPYmplY3QtPmdldChtX2V4ZWMsIElkZW50aWZpZXIobV9leGVjLCBzdHJpbmdU
b1VTdHJpbmcobV9uYW1lKSkpOwogICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBA
IC0xNjMsNyArMTYzLDcgQEAgU2NyaXB0T2JqZWN0IFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y29uc3Ry
dQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gbV90aGlzT2JqZWN0LmpzT2JqZWN0KCk7
CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKG1fZXhlYyk7CiAKICAgICBKU09iamVjdCogY29uc3RydWN0b3IgPSBhc09iamVj
dCh0aGlzT2JqZWN0LT5nZXQobV9leGVjLCBJZGVudGlmaWVyKG1fZXhlYywgc3RyaW5nVG9VU3Ry
aW5nKG1fbmFtZSkpKSk7CiAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKQEAgLTIw
NSw3ICsyMDUsNyBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDYWxsYmFjazo6Y2FsbCgpCiAKIFNjcmlw
dFZhbHVlIFNjcmlwdENhbGxiYWNrOjpjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbikKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KG1fZXhlYyk7CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlw
ZSA9IGdldENhbGxEYXRhKG1fZnVuY3Rpb24uanNWYWx1ZSgpLCBjYWxsRGF0YSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAJKHJldmlzaW9uIDEy
MDg4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIGJvb2wgaGFuZGxlRXhjZXB0aW9u
KFNjcmlwdFN0YXRlKgogCiBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KFNjcmlwdFN0YXRl
KiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgU2NyaXB0T2JqZWN0JiB2YWx1
ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5wdXREaXJlY3Qoc2NyaXB0U3RhdGUtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmll
cihzY3JpcHRTdGF0ZSwgbmFtZSksIHZhbHVlLmpzT2JqZWN0KCkpOwogICAgIHJldHVybiBoYW5k
bGVFeGNlcHRpb24oc2NyaXB0U3RhdGUpOwogfQpAQCAtNzUsNyArNzUsNyBAQCBib29sIFNjcmlw
dEdsb2JhbE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIGJv
b2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25z
dCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JGcm9udGVuZEhvc3QqIHZhbHVlKQogewotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2Ny
aXB0U3RhdGUpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsK
ICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCBJ
ZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwgdG9KUyhzY3JpcHRTdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZSkpOwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2NyaXB0U3RhdGUpOwpA
QCAtODMsNyArODMsNyBAQCBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KFNjcmlwdFN0YXRl
CiAKIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRl
LCBjb25zdCBjaGFyKiBuYW1lLCBJbmplY3RlZFNjcmlwdEhvc3QqIHZhbHVlKQogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
c2NyaXB0U3RhdGUpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KTsKICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgp
LCBJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwgdG9KUyhzY3JpcHRTdGF0ZSwgZ2xvYmFs
T2JqZWN0LCB2YWx1ZSkpOwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2NyaXB0U3RhdGUp
OwpAQCAtOTIsNyArOTIsNyBAQCBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KFNjcmlwdFN0
YXRlCiAKIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBTY3JpcHRPYmplY3QmIHZhbHVlKQogewotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2Ny
aXB0U3RhdGUpOwogICAgIEpTVmFsdWUganNWYWx1ZSA9IHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmdldChzY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFt
ZSkpOwogICAgIGlmICghanNWYWx1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA2LDcg
KzEwNiw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQoU2NyaXB0U3RhdGUKIAogYm9v
bCBTY3JpcHRHbG9iYWxPYmplY3Q6OnJlbW92ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNv
bnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgc2NyaXB0U3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoc2Ny
aXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc2NyaXB0U3RhdGUsIElkZW50aWZpZXIo
c2NyaXB0U3RhdGUsIG5hbWUpKTsKICAgICByZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0
YXRlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5j
cHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBib29sIFNjcmlwdFZh
bHVlOjpnZXRTdHJpbmcoU2NyaXB0U3RhdGUqCiB7CiAgICAgaWYgKCFtX3ZhbHVlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgVVN0cmluZyB1c3RyaW5n
OwogICAgIGlmICghbV92YWx1ZS5nZXQoKS5nZXRTdHJpbmcoc2NyaXB0U3RhdGUsIHVzdHJpbmcp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzUsNiArMTc1LDcgQEAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGpzVG9JbgogCiBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBTY3JpcHRWYWx1ZTo6dG9JbnNwZWN0b3JWYWx1ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUp
IGNvbnN0CiB7CisgICAgQVNTRVJUKHNjcmlwdFN0YXRlLT5nbG9iYWxEYXRhKCkuYXBpTG9jaygp
LmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIHJldHVybiBqc1RvSW5zcGVjdG9y
VmFsdWUoc2NyaXB0U3RhdGUsIG1fdmFsdWUuZ2V0KCksIEluc3BlY3RvclZhbHVlOjptYXhEZXB0
aCk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRD
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBXb3JrZXJTY3Jp
cHRDb250cm9sbGVyOjpXb3JrZXJTY3JpcHRDb250CiAKIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6
On5Xb3JrZXJTY3JpcHRDb250cm9sbGVyKCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEoKSk7CiAgICAg
bV93b3JrZXJDb250ZXh0V3JhcHBlci5jbGVhcigpOwogICAgIG1fZ2xvYmFsRGF0YS5jbGVhcigp
OwogfQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmluaXRT
Y3JpcHQoCiB7CiAgICAgQVNTRVJUKCFtX3dvcmtlckNvbnRleHRXcmFwcGVyKTsKIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
bV9nbG9iYWxEYXRhLmdldCgpKTsKIAogICAgIC8vIEV4cGxpY2l0bHkgcHJvdGVjdCB0aGUgZ2xv
YmFsIG9iamVjdCdzIHByb3RvdHlwZSBzbyBpdCBpc24ndCBjb2xsZWN0ZWQKICAgICAvLyB3aGVu
IHdlIGFsbG9jYXRlIHRoZSBnbG9iYWwgb2JqZWN0LiAoT25jZSB0aGUgZ2xvYmFsIG9iamVjdCBp
cyBmdWxseQpAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6
ZXZhbHVhdGUoY28KICAgICBTY3JpcHRWYWx1ZSBleGNlcHRpb247CiAgICAgZXZhbHVhdGUoc291
cmNlQ29kZSwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbi5qc1ZhbHVlKCkpIHsKLSAg
ICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZ2xvYmFsRGF0YSgpKTsKICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fd29y
a2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMoKSwgZXhjZXB0aW9uLmpzVmFsdWUoKSk7CiAg
ICAgfQogfQpAQCAtMTI4LDkgKzEyOCw5IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6
ZXZhbHVhdGUoY28KICAgICAgICAgcmV0dXJuOwogCiAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2Jh
bERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwogCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9v
bCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppc0V4ZWN1dGlvbgogdm9pZCBXb3JrZXJTY3JpcHRD
b250cm9sbGVyOjpkaXNhYmxlRXZhbCgpCiB7CiAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7Ci0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhnbG9iYWxEYXRhKCkpOwogCiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+c2V0RXZh
bEVuYWJsZWQoZmFsc2UpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9X
ZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
b2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjIsMTMgKzEyMiwxMiBAQCArIChpZClzY3JpcHRPYmplY3RGb3JKU09iamVjdDooSlNPYmplY3RS
CiAKIHN0YXRpYyB2b2lkIF9kaWRFeGVjdXRlKFdlYlNjcmlwdE9iamVjdCAqb2JqKQogewotICAg
IEFTU0VSVChKU0xvY2s6OmxvY2tDb3VudCgpID4gMCk7Ci0gICAgCiAgICAgUm9vdE9iamVjdCog
cm9vdCA9IFtvYmogX3Jvb3RPYmplY3RdOwogICAgIGlmICghcm9vdCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKTsKKyAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmFwaUxvY2soKS5jdXJyZW50VGhy
ZWFkSXNIb2xkaW5nTG9jaygpKTsKICAgICBLSlNEaWRFeGVjdXRlRnVuY3Rpb25QdHIgZnVuYyA9
IEluc3RhbmNlOjpkaWRFeGVjdXRlRnVuY3Rpb24oKTsKICAgICBpZiAoZnVuYykKICAgICAgICAg
ZnVuYyhleGVjLCByb290LT5nbG9iYWxPYmplY3QoKSk7CkBAIC0xNDgsMTkgKzE0NywyNSBAQCAt
ICh2b2lkKV9zZXRJbXA6KEpTT2JqZWN0KilpbXAgb3JpZ2luUm9vCiAKICAgICBXZWJDb3JlOjph
ZGRKU1dyYXBwZXIoc2VsZiwgaW1wKTsKIAotICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCkK
KyAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QpIHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGhv
bGRlcigmX3ByaXZhdGUtPnJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkp
OwogICAgICAgICBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2NQcm90ZWN0KGltcCk7CisgICAgfQog
fQogCiAtICh2b2lkKV9zZXRPcmlnaW5Sb290T2JqZWN0OihQYXNzUmVmUHRyPFJvb3RPYmplY3Q+
KW9yaWdpblJvb3RPYmplY3QgYW5kUm9vdE9iamVjdDooUGFzc1JlZlB0cjxSb290T2JqZWN0Pily
b290T2JqZWN0CiB7CiAgICAgQVNTRVJUKF9wcml2YXRlLT5pbXApOwogCi0gICAgaWYgKHJvb3RP
YmplY3QpCisgICAgaWYgKHJvb3RPYmplY3QpIHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGhvbGRl
cigmcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIHJv
b3RPYmplY3QtPmdjUHJvdGVjdChfcHJpdmF0ZS0+aW1wKTsKKyAgICB9CiAKLSAgICBpZiAoX3By
aXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFsaWQoKSkKKyAg
ICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFs
aWQoKSkgeworICAgICAgICBKU0xvY2tIb2xkZXIgaG9sZGVyKCZfcHJpdmF0ZS0+cm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIF9wcml2YXRlLT5yb290
T2JqZWN0LT5nY1VucHJvdGVjdChfcHJpdmF0ZS0+aW1wKTsKKyAgICB9CiAKICAgICBpZiAoX3By
aXZhdGUtPnJvb3RPYmplY3QpCiAgICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5kZXJlZigp
OwpAQCAtMjMyLDggKzIzNywxMCBAQCAtICh2b2lkKWRlYWxsb2MKICAgICBpZiAoX3ByaXZhdGUt
PmltcCkKICAgICAgICAgV2ViQ29yZTo6cmVtb3ZlSlNXcmFwcGVyKF9wcml2YXRlLT5pbXApOwog
Ci0gICAgaWYgKF9wcml2YXRlLT5yb290T2JqZWN0ICYmIF9wcml2YXRlLT5yb290T2JqZWN0LT5p
c1ZhbGlkKCkpCisgICAgaWYgKF9wcml2YXRlLT5yb290T2JqZWN0ICYmIF9wcml2YXRlLT5yb290
T2JqZWN0LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGhvbGRlcigmX3ByaXZh
dGUtPnJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICBf
cHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2NVbnByb3RlY3QoX3ByaXZhdGUtPmltcCk7CisgICAgfQog
CiAgICAgaWYgKF9wcml2YXRlLT5yb290T2JqZWN0KQogICAgICAgICBfcHJpdmF0ZS0+cm9vdE9i
amVjdC0+ZGVyZWYoKTsKQEAgLTI0OCw4ICsyNTUsMTAgQEAgLSAodm9pZClkZWFsbG9jCiAKIC0g
KHZvaWQpZmluYWxpemUKIHsKLSAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZh
dGUtPnJvb3RPYmplY3QtPmlzVmFsaWQoKSkKKyAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3Qg
JiYgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFsaWQoKSkgeworICAgICAgICBKU0xvY2tIb2xk
ZXIgaG9sZGVyKCZfcHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERh
dGEoKSk7CiAgICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5nY1VucHJvdGVjdChfcHJpdmF0
ZS0+aW1wKTsKKyAgICB9CiAKICAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QpCiAgICAgICAg
IF9wcml2YXRlLT5yb290T2JqZWN0LT5kZXJlZigpOwpAQCAtMjgxLDEwICsyOTAsOSBAQCAtIChp
ZCljYWxsV2ViU2NyaXB0TWV0aG9kOihOU1N0cmluZyAqKW5hCiAgICAgaWYgKCFbc2VsZiBfaXNT
YWZlU2NyaXB0XSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7Ci0gICAgCiAgICAgLy8gTG9vayB1cCB0aGUgZnVuY3Rpb24gb2Jq
ZWN0LgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBB
U1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBb
c2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0
cmluZyhuYW1lKSkpKTsKQEAgLTMyNSw3ICszMzMsNyBAQCAtIChpZClldmFsdWF0ZVdlYlNjcmlw
dDooTlNTdHJpbmcgKilzY3JpCiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmpl
Y3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICBbc2VsZiBfcm9vdE9iamVj
dF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RhcnQoKTsK
ICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0
ZShleGVjLCBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNo
YWluKCksIG1ha2VTb3VyY2UoU3RyaW5nKHNjcmlwdCkpLCBKU0M6OkpTVmFsdWUoKSwgMCk7CkBA
IC0zNDYsNyArMzU0LDcgQEAgLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgZm9yS2V5OihOU1N0
cgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBbc2VsZiBfaW1w
XS0+bWV0aG9kVGFibGUoKS0+cHV0KFtzZWxmIF9pbXBdLCBleGVjLCBJZGVudGlmaWVyKGV4ZWMs
IHN0cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkpLCBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShl
eGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBfcm9vdE9iamVjdF0pLCBzbG90KTsK
QEAgLTM3Miw3ICszODAsNyBAQCAtIChpZCl2YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkKICAg
ICAgICAgLy8gTmVlZCB0byBzY29wZSB0aGlzIGxvY2sgdG8gZW5zdXJlIHRoYXQgd2UgcmVsZWFz
ZSB0aGUgbG9jayBiZWZvcmUgY2FsbGluZwogICAgICAgICAvLyBbc3VwZXIgdmFsdWVGb3JLZXk6
a2V5XSB3aGljaCBtaWdodCB0aHJvdyBhbiBleGNlcHRpb24gYW5kIGJ5cGFzcyB0aGUgSlNMb2Nr
IGRlc3RydWN0b3IsCiAgICAgICAgIC8vIGxlYXZpbmcgdGhlIGxvY2sgcGVybWFuZW50bHkgaGVs
ZAotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHN0cmluZ1RvVVN0cmlu
ZyhTdHJpbmcoa2V5KSkpKTsKICAgICAgICAgCkBAIC0zODgsNyArMzk2LDcgQEAgLSAoaWQpdmFs
dWVGb3JLZXk6KE5TU3RyaW5nICopa2V5CiAgICAgaWYgKFtyZXN1bHRPYmogaXNLaW5kT2ZDbGFz
czpbV2ViVW5kZWZpbmVkIGNsYXNzXV0pCiAgICAgICAgIHJlc3VsdE9iaiA9IFtzdXBlciB2YWx1
ZUZvcktleTprZXldOyAgICAvLyBkZWZhdWx0cyB0byB0aHJvd2luZyBhbiBleGNlcHRpb24KIAot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgX2RpZEV4ZWN1dGUoc2VsZik7CiAgICAgCiAgICAgcmV0dXJuIHJl
c3VsdE9iajsKQEAgLTQwMiw3ICs0MTAsNyBAQCAtICh2b2lkKXJlbW92ZVdlYlNjcmlwdEtleToo
TlNTdHJpbmcgKilrCiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0
aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBbc2VsZiBfaW1wXS0+bWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkoW3NlbGYgX2ltcF0sIGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5n
VG9VU3RyaW5nKFN0cmluZyhrZXkpKSkpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7CkBAIC00MjEsNyArNDI5LDcgQEAgLSAoQk9PTCloYXNXZWJTY3JpcHRLZXk6KE5TU3RyaW5n
ICopa2V5CiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkp
OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKICAgICBCT09MIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5oYXNQcm9w
ZXJ0eShleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkp
KTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewpAQCAtNDQxLDggKzQ0OSw4IEBA
IC0gKE5TU3RyaW5nICopc3RyaW5nUmVwcmVzZW50YXRpb24KICAgICAgICAgcmV0dXJuIEAiVW5k
ZWZpbmVkIjsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAKICAg
ICBpZCByZXN1bHQgPSBjb252ZXJ0VmFsdWVUb09iamNWYWx1ZShleGVjLCBbc2VsZiBfaW1wXSwg
T2JqY09iamVjdFR5cGUpLm9iamVjdFZhbHVlOwogCkBAIC00NjEsNyArNDY5LDcgQEAgLSAoaWQp
d2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ25lZClpbgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBB
U1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIGluZGV4KTsKIAogICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgewpAQCAtNDg1LDcgKzQ5Myw3IEBAIC0gKHZvaWQpc2V0V2ViU2Ny
aXB0VmFsdWVBdEluZGV4Oih1bnNpZ24KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9v
dE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVj
LT5oYWRFeGNlcHRpb24oKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5tZXRo
b2RUYWJsZSgpLT5wdXRCeUluZGV4KFtzZWxmIF9pbXBdLCBleGVjLCBpbmRleCwgY29udmVydE9i
amNWYWx1ZVRvVmFsdWUoZXhlYywgJnZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RP
YmplY3RdKSwgZmFsc2UpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC01
MTUsNyArNTIzLDcgQEAgKyAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU1ZhbHVlKQog
ewogICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZKU0hU
TUxFbGVtZW50OjpzX2luZm8pKSB7CiAgICAgICAgICAgICAvLyBQbHVnaW4gZWxlbWVudHMgY2Fj
aGUgdGhlIGluc3RhbmNlIGludGVybmFsbHkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTIwODg3KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdv
cmtpbmcgY29weSkKQEAgLTI3MzMsNyArMjczMyw3IEBAIEVORAogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygpKVxuIik7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiIpOwogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPCRjbGFzc05hbWU+IHByb3Rl
Y3QodGhpcyk7XG5cbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTtcblxuIik7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxEYXRhKCkpO1xuXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgYXJncztcbiIpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHJldmlz
aW9uIDEyMDg4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgYm9vbCBK
U1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoTm9QYXJhbQogCiAgICAgUmVmUHRyPEpTVGVzdENh
bGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC04
Miw3ICs4Miw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVAKIAog
ICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRh
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdzOwpAQCAtMTAwLDcgKzEwMCw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNh
bGxiYWNrV2l0aENsYXNzMlAKIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0
aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTE5LDcgKzExOSw3IEBAIGJv
b2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aFN0cmluZ0wKIAogICAgIFJlZlB0cjxKU1Rl
c3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpA
QCAtMTM3LDcgKzEzNyw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aEJvb2xl
YW4KIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
bV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTU3LDcgKzE1Nyw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJh
Y2s6OmNhbGxiYWNrUmVxdWlyZXNUaGkKIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJv
dGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgp
KTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNyArMTc3
LDcgQEAgYm9vbCBfTlBOX0ludm9rZURlZmF1bHQoTlBQLCBOUE9iamVjdCogbwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoZSBmdW5jdGlvbiBvYmplY3QuCiAgICAg
ICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmotPmltcDsKQEAgLTIyNSw3ICsyMjUsNyBAQCBib29s
IF9OUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0KiBvLCBOCiAgICAgICAgIGlmICghcm9vdE9i
amVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgSlNWYWx1ZSBmdW5j
dGlvbiA9IG9iai0+aW1wLT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhl
YywgaS0+c3RyaW5nKCkpKTsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKQEAgLTI2
NCw3ICsyNjQsNyBAQCBib29sIF9OUE5fRXZhbHVhdGUoTlBQIGluc3RhbmNlLCBOUE9iamVjCiAg
ICAgICAgIFBsdWdpblZpZXc6OmtlZXBBbGl2ZShpbnN0YW5jZSk7CiAKICAgICAgICAgRXhlY1N0
YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAg
ICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIFN0cmluZyBzY3JpcHRTdHJpbmcgPSBjb252ZXJ0
TlBTdHJpbmdUb1VURjE2KHMpOwogICAgICAgICAKICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1
ZSA9IEpTQzo6ZXZhbHVhdGUocm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KSwgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNv
dXJjZShzY3JpcHRTdHJpbmcpLCBKU0M6OkpTVmFsdWUoKSk7CkBAIC0yOTAsNyArMjkwLDcgQEAg
Ym9vbCBfTlBOX0dldFByb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIAogICAgICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAg
ICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3Bl
cnR5TmFtZSk7CiAgICAgICAgIAotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgSlNWYWx1
ZSByZXN1bHQ7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKQogICAgICAgICAgICAgcmVzdWx0
ID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBp
LT5zdHJpbmcoKSkpOwpAQCAtMzIyLDcgKzMyMiw3IEBAIGJvb2wgX05QTl9TZXRQcm9wZXJ0eShO
UFAsIE5QT2JqZWN0KiBvLCAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
OwotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRp
Y19jYXN0PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwogCiAgICAgICAgIGlmIChpLT5p
c1N0cmluZygpKSB7CkBAIC0zNjMsNyArMzYzLDcgQEAgYm9vbCBfTlBOX1JlbW92ZVByb3BlcnR5
KE5QUCwgTlBPYmplY3QqIAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKQogICAgICAgICAgICAgb2JqLT5p
bXAtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iai0+aW1wLCBleGVjLCBpZGVudGlm
aWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICBlbHNlCkBA
IC0zODYsNyArMzg2LDcgQEAgYm9vbCBfTlBOX0hhc1Byb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8s
IAogCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJ
ZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
ICAgIGlmIChpLT5pc1N0cmluZygpKSB7CiAgICAgICAgICAgICBib29sIHJlc3VsdCA9IG9iai0+
aW1wLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBp
LT5zdHJpbmcoKSkpOwogICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKQEAgLTQx
OCw3ICs0MTgsNyBAQCBib29sIF9OUE5fSGFzTWV0aG9kKE5QUCwgTlBPYmplY3QqIG8sIE5QCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgICAgIEpTVmFsdWUgZnVuYyA9IG9iai0+aW1wLT5nZXQoZXhlYywgaWRlbnRpZmll
ckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKICAgICAgICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuICFmdW5jLmlzVW5kZWZpbmVkKCk7CkBAIC00
NDcsNyArNDQ3LDcgQEAgYm9vbCBfTlBOX0VudW1lcmF0ZShOUFAsIE5QT2JqZWN0KiBvLCBOUAog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgRXhlY1N0YXRlKiBl
eGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhl
Yyk7CiAKICAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMo
b2JqLT5pbXAsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMp
OwpAQCAtNDg0LDcgKzQ4NCw3IEBAIGJvb2wgX05QTl9Db25zdHJ1Y3QoTlBQLCBOUE9iamVjdCog
bywgY28KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0g
ICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGUgY29uc3Ry
dWN0b3Igb2JqZWN0LgogICAgICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gb2JqLT5pbXA7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNzLmNwcAkocmV2aXNpb24gMTIwODg3KQorKysg
U291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19jbGFzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgogI2luY2x1ZGUgPHJ1bnRp
bWUvU2NvcGVDaGFpbi5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSWRlbnRpZmllci5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5o
PgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CkBAIC00Nyw3ICs0OCw3IEBAIENDbGFzczo6Q0NsYXNzKE5QQ2xhc3MqIGFDbGFz
cykKIAogQ0NsYXNzOjp+Q0NsYXNzKCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYWNxdWlyZSBhIEpTTG9jayBoZXJl
PwogCiAgICAgZGVsZXRlQWxsVmFsdWVzKF9tZXRob2RzKTsKICAgICBfbWV0aG9kcy5jbGVhcigp
OwpAQCAtOTEsNyArOTIsNyBAQCBNZXRob2RMaXN0IENDbGFzczo6bWV0aG9kc05hbWVkKFByb3Bl
cnR5CiAgICAgaWYgKF9pc2EtPmhhc01ldGhvZCAmJiBfaXNhLT5oYXNNZXRob2Qob2JqLCBpZGVu
dCkpewogICAgICAgICBNZXRob2QqIGFNZXRob2QgPSBuZXcgQ01ldGhvZChpZGVudCk7IC8vIGRl
bGV0ZWQgaW4gdGhlIENDbGFzcyBkZXN0cnVjdG9yCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhpbnN0LT5yb290T2JqZWN0KCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkp
OwogICAgICAgICAgICAgX21ldGhvZHMuc2V0KG5hbWUuaW1wbCgpLCBhTWV0aG9kKTsKICAgICAg
ICAgfQogICAgICAgICBtZXRob2RMaXN0LmFwcGVuZChhTWV0aG9kKTsKQEAgLTExNCw3ICsxMTUs
NyBAQCBGaWVsZCogQ0NsYXNzOjpmaWVsZE5hbWVkKFByb3BlcnR5TmFtZSBwCiAgICAgaWYgKF9p
c2EtPmhhc1Byb3BlcnR5ICYmIF9pc2EtPmhhc1Byb3BlcnR5KG9iaiwgaWRlbnQpKXsKICAgICAg
ICAgYUZpZWxkID0gbmV3IENGaWVsZChpZGVudCk7IC8vIGRlbGV0ZWQgaW4gdGhlIENDbGFzcyBk
ZXN0cnVjdG9yCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhpbnN0LT5yb290T2Jq
ZWN0KCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgX2ZpZWxk
cy5zZXQobmFtZS5pbXBsKCksIGFGaWVsZCk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkocmV2aXNpb24gMTIwODg3KQorKysgU291
cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcz
LDcgKzczLDcgQEAgdm9pZCBDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZQogICAg
ICAgICByZXR1cm47CiAKICAgICB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICB0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGdsb2JhbEV4Y2VwdGlvblN0cmluZygpKSk7
CiAgICAgfQogCkBAIC0xODIsNyArMTgyLDcgQEAgSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZU1l
dGhvZChFeGVjU3RhdAogICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdFZhcmlhbnQpOwogCiAg
ICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KGV4ZWMpOwogICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkp
OwogICAgICAgICByZXR2YWwgPSBfb2JqZWN0LT5fY2xhc3MtPmludm9rZShfb2JqZWN0LCBpZGVu
dCwgY0FyZ3MuZGF0YSgpLCBjb3VudCwgJnJlc3VsdFZhcmlhbnQpOwogICAgICAgICBtb3ZlR2xv
YmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CkBAIC0yMTcsNyArMjE3LDcgQEAgSlNWYWx1
ZSBDSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QoRQogICAgIE5QVmFyaWFudCByZXN1bHRW
YXJpYW50OwogICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdFZhcmlhbnQpOwogICAgIHsKLSAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsK
ICAgICAgICAgQVNTRVJUKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVsbCgpKTsKICAgICAg
ICAgcmV0dmFsID0gX29iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0KF9vYmplY3QsIGNBcmdz
LmRhdGEoKSwgY291bnQsICZyZXN1bHRWYXJpYW50KTsKICAgICAgICAgbW92ZUdsb2JhbEV4Y2Vw
dGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpAQCAtMjU2LDcgKzI1Niw3IEBAIEpTVmFsdWUgQ0luc3Rh
bmNlOjppbnZva2VDb25zdHJ1Y3QoRXhlY1MKICAgICBOUFZhcmlhbnQgcmVzdWx0VmFyaWFudDsK
ICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHRWYXJpYW50KTsKICAgICB7Ci0gICAgICAgIEpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7CiAgICAgICAg
IEFTU0VSVChnbG9iYWxFeGNlcHRpb25TdHJpbmcoKS5pc051bGwoKSk7CiAgICAgICAgIHJldHZh
bCA9IF9vYmplY3QtPl9jbGFzcy0+Y29uc3RydWN0KF9vYmplY3QsIGNBcmdzLmRhdGEoKSwgY291
bnQsICZyZXN1bHRWYXJpYW50KTsKICAgICAgICAgbW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0
YXRlKGV4ZWMpOwpAQCAtMzE1LDcgKzMxNSw3IEBAIHZvaWQgQ0luc3RhbmNlOjpnZXRQcm9wZXJ0
eU5hbWVzKEV4ZWNTdGEKICAgICBOUElkZW50aWZpZXIqIGlkZW50aWZpZXJzOwogCiAgICAgewot
ICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMp
OwogICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAg
ICAgICBib29sIG9rID0gX29iamVjdC0+X2NsYXNzLT5lbnVtZXJhdGUoX29iamVjdCwgJmlkZW50
aWZpZXJzLCAmY291bnQpOwogICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUo
ZXhlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5jcHAJKHJldmlzaW9u
IDEyMDg4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgSlNWYWx1ZSBDRmllbGQ6OnZhbHVlRnJvbUluc3Rh
bmNlKEV4ZWNTdAogCiAgICAgICAgIGJvb2wgcmVzdWx0OwogICAgICAgICB7Ci0gICAgICAgICAg
ICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsK
ICAgICAgICAgICAgIHJlc3VsdCA9IG9iai0+X2NsYXNzLT5nZXRQcm9wZXJ0eShvYmosIF9maWVs
ZElkZW50aWZpZXIsICZwcm9wZXJ0eSk7CiAgICAgICAgICAgICBDSW5zdGFuY2U6Om1vdmVHbG9i
YWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKICAgICAgICAgfQpAQCAtNzEsNyArNzEsNyBA
QCB2b2lkIENGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0CiAgICAgICAgIGNvbnZl
cnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIGFWYWx1ZSwgJnZhcmlhbnQpOwogCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKGV4ZWMpOwogICAgICAgICAgICAgb2JqLT5fY2xhc3MtPnNldFByb3BlcnR5KG9iaiwgX2Zp
ZWxkSWRlbnRpZmllciwgJnZhcmlhbnQpOwogICAgICAgICAgICAgQ0luc3RhbmNlOjptb3ZlR2xv
YmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAkocmV2aXNpb24gMTIwODg3KQorKysgU291cmNlL1dl
YkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgs
NyBAQCBzdGF0aWMgU3RyaW5nIGNvbnZlcnRVVEY4VG9VVEYxNldpdGhMYXRpCiAvLyBWYXJpYW50
IHZhbHVlIG11c3QgYmUgcmVsZWFzZWQgd2l0aCBOUFJlbGVhc2VWYXJpYW50VmFsdWUoKQogdm9p
ZCBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUs
IE5QVmFyaWFudCogcmVzdWx0KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBWT0lEX1RPX05QVkFS
SUFOVCgqcmVzdWx0KTsKIApAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgY29udmVydFZhbHVlVG9O
UFZhcmlhbnQoRXhlY1N0YXRlKiAKIAogSlNWYWx1ZSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE5QVmFyaWFudCogdmFyaWFudCwgUm9vdE9iamVjdCogcm9v
dE9iamVjdCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAogICAgIE5QVmFyaWFudFR5cGUgdHlwZSA9
IHZhcmlhbnQtPnR5cGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pz
b2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pz
b2JqZWN0Lm1tCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5p
L2puaV9qc29iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBAIGpvYmpl
Y3QgSmF2YUpTT2JqZWN0OjpjYWxsKGpzdHJpbmcgbWV0aG8KICAgICAKICAgICAvLyBMb29rdXAg
dGhlIGZ1bmN0aW9uIG9iamVjdC4KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCiAgICAgSWRl
bnRpZmllciBpZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWV0aG9kTmFtZSkuaW1wbCgpKTsK
ICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gX2ltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXIpOwpAQCAt
MzA3LDEyICszMDcsMTIgQEAgam9iamVjdCBKYXZhSlNPYmplY3Q6OmV2YWwoanN0cmluZyBzY3Jp
cAogewogICAgIExPRyhMaXZlQ29ubmVjdCwgIkphdmFKU09iamVjdDo6ZXZhbCBzY3JpcHQgPSAl
cyIsIEphdmFTdHJpbmcoc2NyaXB0KS51dGY4KCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKLSAgICAKICAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gdGhp
cy0+cm9vdE9iamVjdCgpOwogICAgIGlmICghcm9vdE9iamVjdCkKICAgICAgICAgcmV0dXJuIDA7
CiAKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRGF0YSgpKTsKKyAgICAKICAgICByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6
OmV2YWx1YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHJvb3RP
YmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoSmF2
YVN0cmluZyhzY3JpcHQpLmltcGwoKSkpOwogICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwpAQCAtMzMwLDcgKzMzMCw3IEBA
IGpvYmplY3QgSmF2YUpTT2JqZWN0OjpnZXRNZW1iZXIoanN0cmluZyAKIAogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAg
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IF9pbXAtPmdldChleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVtYmVyTmFtZSkuaW1wbCgpKSk7CiAKICAgICByZXR1
cm4gY29udmVydFZhbHVlVG9KT2JqZWN0KHJlc3VsdCk7CkBAIC0zNDYsNyArMzQ2LDcgQEAgdm9p
ZCBKYXZhSlNPYmplY3Q6OnNldE1lbWJlcihqc3RyaW5nIG1lbQogCiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgX2ltcC0+bWV0aG9kVGFibGUo
KS0+cHV0KF9pbXAsIGV4ZWMsIElkZW50aWZpZXIoZXhlYywgSmF2YVN0cmluZyhtZW1iZXJOYW1l
KS5pbXBsKCkpLCBjb252ZXJ0Sk9iamVjdFRvVmFsdWUoZXhlYywgdmFsdWUpLCBzbG90KTsKIH0K
QEAgLTM2MSw3ICszNjEsNyBAQCB2b2lkIEphdmFKU09iamVjdDo6cmVtb3ZlTWVtYmVyKGpzdHJp
bmcgCiAgICAgICAgIHJldHVybjsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBfaW1wLT5t
ZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShfaW1wLCBleGVjLCBJZGVudGlmaWVyKGV4ZWMs
IEphdmFTdHJpbmcobWVtYmVyTmFtZSkuaW1wbCgpKSk7CiB9CiAKQEAgLTM3Niw3ICszNzYsNyBA
QCBqb2JqZWN0IEphdmFKU09iamVjdDo6Z2V0U2xvdChqaW50IGluZGV4CiAKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IF9pbXAtPmdldChleGVjLCBpbmRleCk7
CiAKICAgICByZXR1cm4gY29udmVydFZhbHVlVG9KT2JqZWN0KHJlc3VsdCk7CkBAIC0zOTIsNyAr
MzkyLDcgQEAgdm9pZCBKYXZhSlNPYmplY3Q6OnNldFNsb3QoamludCBpbmRleCwgagogICAgICAg
ICByZXR1cm47CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgX2ltcC0+bWV0aG9kVGFibGUo
KS0+cHV0QnlJbmRleChfaW1wLCBleGVjLCAodW5zaWduZWQpaW5kZXgsIGNvbnZlcnRKT2JqZWN0
VG9WYWx1ZShleGVjLCB2YWx1ZSksIGZhbHNlKTsKIH0KIApAQCAtNDA1LDkgKzQwNSw5IEBAIGpz
dHJpbmcgSmF2YUpTT2JqZWN0Ojp0b1N0cmluZygpIGNvbnN0CiAgICAgaWYgKCFyb290T2JqZWN0
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAgICAgSlNPYmplY3QgKnRoaXNPYmogPSBjb25zdF9jYXN0PEpTT2JqZWN0Kj4oX2lt
cCk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8anN0cmluZz4oY29udmVydFZhbHVlVG9KVmFsdWUoZXhlYywgcm9vdE9i
amVjdCwgdGhpc09iaiwgSmF2YVR5cGVPYmplY3QsICJqYXZhLmxhbmcuU3RyaW5nIikubCk7CiB9
CkBAIC00NjMsMTMgKzQ2MywxMyBAQCBqbG9uZyBKYXZhSlNPYmplY3Q6OmNyZWF0ZU5hdGl2ZShq
bG9uZyBuCiAKIGpvYmplY3QgSmF2YUpTT2JqZWN0Ojpjb252ZXJ0VmFsdWVUb0pPYmplY3QoSlNW
YWx1ZSB2YWx1ZSkgY29uc3QKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOwotICAgIAogICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSB0aGlzLT5yb290T2JqZWN0
KCk7CiAgICAgaWYgKCFyb290T2JqZWN0KQogICAgICAgICByZXR1cm4gMDsKIAorICAgIAogICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSk5JRW52ICplbnYgPSBnZXRK
TklFbnYoKTsKICAgICBqb2JqZWN0IHJlc3VsdCA9IDA7CiAgICAgCkBAIC01NTQsNyArNTU0LDcg
QEAgSlNWYWx1ZSBKYXZhSlNPYmplY3Q6OmNvbnZlcnRKT2JqZWN0VG9WYQogICAgIC8vIGZpZ3Vy
ZSAyMi00LgogICAgIGpvYmplY3QgY2xhc3NPZkluc3RhbmNlID0gY2FsbEpOSU1ldGhvZDxqb2Jq
ZWN0Pih0aGVPYmplY3QsICJnZXRDbGFzcyIsICIoKUxqYXZhL2xhbmcvQ2xhc3M7Iik7CiAgICAg
aWYgKCFjbGFzc09mSW5zdGFuY2UpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHJl
dHVybiBKYXZhSW5zdGFuY2U6OmNyZWF0ZSh0aGVPYmplY3QsIF9yb290T2JqZWN0KS0+Y3JlYXRl
UnVudGltZU9iamVjdChleGVjKTsKICAgICB9CiAKQEAgLTU2Myw3ICs1NjMsNyBAQCBKU1ZhbHVl
IEphdmFKU09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhCiAgICAgLy8gcG9pbnRlciBhbmQgc3Rv
cmVzIGl0IGluIHRoaXMgb2JqZWN0LCBzbyB0aGF0IGl0IGNhbiBiZSByZXRyaWV2ZWQgYmVsb3cu
CiAgICAganN0cmluZyBjbGFzc05hbWUgPSAoanN0cmluZyljYWxsSk5JTWV0aG9kPGpvYmplY3Q+
KGNsYXNzT2ZJbnN0YW5jZSwgImdldE5hbWUiLCAiKClMamF2YS9sYW5nL1N0cmluZzsiKTsKICAg
ICBpZiAoIWNsYXNzTmFtZSB8fCAoc3RyY21wKEphdmFTdHJpbmcoY2xhc3NOYW1lKS51dGY4KCks
ICJzdW4ucGx1Z2luLmphdmFzY3JpcHQud2Via2l0LkpTT2JqZWN0IikgIT0gMCkpIHsKLSAgICAg
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHJldHVybiBKYXZhSW5zdGFuY2U6OmNyZWF0ZSh0aGVP
YmplY3QsIF9yb290T2JqZWN0KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX29iamMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfb2JqYy5tbQkocmV2aXNpb24gMTIwODg3
KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfb2JqYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtNjIsNyArNjIsNyBAQCBib29sIEpTQzo6QmluZGluZ3M6OmRpc3BhdGNoSk5JQ2FsbChF
eGVjCiAgICAgICAgIC8vIGltcGxlbWVudGVkIGluIFdlYkNvcmUgd2lsbCBndWFyYW50ZWUgdGhh
dCBvbmx5IGFwcHJvcHJpYXRlIEphdmFTY3JpcHQKICAgICAgICAgLy8gY2FuIHJlZmVyZW5jZSB0
aGUgYXBwbGV0LgogICAgICAgICB7Ci0gICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7CiAgICAgICAgICAgICByZXN1bHQgPSBbdmll
dyB3ZWJQbHVnSW5DYWxsSmF2YTpvYmogaXNTdGF0aWM6aXNTdGF0aWMgcmV0dXJuVHlwZTpyZXR1
cm5UeXBlIG1ldGhvZDptZXRob2RJRCBhcmd1bWVudHM6YXJncyBjYWxsaW5nVVJMOm5pbCBleGNl
cHRpb25EZXNjcmlwdGlvbjomX2V4Y2VwdGlvbkRlc2NyaXB0aW9uXTsKICAgICAgICAgfQogCkBA
IC03Miw3ICs3Miw3IEBAIGJvb2wgSlNDOjpCaW5kaW5nczo6ZGlzcGF0Y2hKTklDYWxsKEV4ZWMK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luQ2FsbEphdmE6bWV0aG9kOnJldHVyblR5cGU6
YXJndW1lbnRzOildKSB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoZXhlYyk7CiAgICAgICAgIHJlc3VsdCA9IFt2aWV3IHdlYlBsdWdJbkNhbGxK
YXZhOm9iaiBtZXRob2Q6bWV0aG9kSUQgcmV0dXJuVHlwZTpyZXR1cm5UeXBlIGFyZ3VtZW50czph
cmdzXTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
YnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcAkocmV2aXNpb24g
MTIwODg3KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNyArMTc0LDcgQEAgc3RhdGljIGpvYmplY3Qg
Y29udmVydEFycmF5SW5zdGFuY2VUb0phdgogCiBqdmFsdWUgY29udmVydFZhbHVlVG9KVmFsdWUo
RXhlY1N0YXRlKiBleGVjLCBSb290T2JqZWN0KiByb290T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBK
YXZhVHlwZSBqYXZhVHlwZSwgY29uc3QgY2hhciogamF2YUNsYXNzTmFtZSkKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogCiAgICAganZhbHVlIHJlc3VsdDsKICAgICBtZW1zZXQoJnJlc3VsdCwgMCwgc2l6ZW9m
KGp2YWx1ZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNz
SlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZh
Q2xhc3NKU0MuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
am5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBA
IEphdmFDbGFzczo6SmF2YUNsYXNzKGpvYmplY3QgYW5JbnN0YW5jZSkKICAgICAgICAgICAgIGpv
YmplY3QgYUpGaWVsZCA9IGVudi0+R2V0T2JqZWN0QXJyYXlFbGVtZW50KChqb2JqZWN0QXJyYXkp
ZmllbGRzLCBpKTsKICAgICAgICAgICAgIEphdmFGaWVsZCogYUZpZWxkID0gbmV3IEphdmFGaWVs
ZChlbnYsIGFKRmllbGQpOyAvLyBkZWxldGVkIGluIHRoZSBKYXZhQ2xhc3MgZGVzdHJ1Y3Rvcgog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEg
SlNMb2NrIGhlcmU/CiAgICAgICAgICAgICAgICAgbV9maWVsZHMuc2V0KGFGaWVsZC0+bmFtZSgp
LmltcGwoKSwgYUZpZWxkKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVudi0+RGVsZXRl
TG9jYWxSZWYoYUpGaWVsZCk7CkBAIC03OSw3ICs3OSw3IEBAIEphdmFDbGFzczo6SmF2YUNsYXNz
KGpvYmplY3QgYW5JbnN0YW5jZSkKICAgICAgICAgICAgIEphdmFNZXRob2QqIGFNZXRob2QgPSBu
ZXcgSmF2YU1ldGhvZChlbnYsIGFKTWV0aG9kKTsgLy8gZGVsZXRlZCBpbiB0aGUgSmF2YUNsYXNz
IGRlc3RydWN0b3IKICAgICAgICAgICAgIE1ldGhvZExpc3QqIG1ldGhvZExpc3Q7CiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGFjcXVpcmUgYSBKU0xvY2sg
aGVyZT8KIAogICAgICAgICAgICAgICAgIG1ldGhvZExpc3QgPSBtX21ldGhvZHMuZ2V0KGFNZXRo
b2QtPm5hbWUoKS5pbXBsKCkpOwogICAgICAgICAgICAgICAgIGlmICghbWV0aG9kTGlzdCkgewpA
QCAtMTAwLDcgKzEwMCw3IEBAIEphdmFDbGFzczo6fkphdmFDbGFzcygpCiB7CiAgICAgZmFzdEZy
ZWUoY29uc3RfY2FzdDxjaGFyKj4obV9uYW1lKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYWNxdWlyZSBhIEpTTG9j
ayBoZXJlPwogCiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fZmllbGRzKTsKICAgICBtX2ZpZWxkcy5j
bGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNl
SlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZh
SW5zdGFuY2VKU0MuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4
Nyw3IEBAIENsYXNzKiBKYXZhSW5zdGFuY2U6OmdldENsYXNzKCkgY29uc3QKIAogSlNWYWx1ZSBK
YXZhSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogCiAgICAganN0cmluZyBzdHJpbmdWYWx1ZSA9IChqc3RyaW5nKWNhbGxKTklNZXRo
b2Q8am9iamVjdD4obV9pbnN0YW5jZS0+aW5zdGFuY2UoKSwgInRvU3RyaW5nIiwgIigpTGphdmEv
bGFuZy9TdHJpbmc7Iik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0ph
dmFNZXRob2RKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkv
anNjL0phdmFNZXRob2RKU0MuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2Uvam5pL2pzYy9KYXZhTWV0aG9kSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIs
NyArOTIsNyBAQCBKYXZhTWV0aG9kOjp+SmF2YU1ldGhvZCgpCiAvLyB3ZSBnZXQgJy4nIGJldHdl
ZW4gY29tcG9uZW50cyBmcm9tIHRoZSByZWZsZWN0aW9uIEFQSS4KIHN0YXRpYyB2b2lkIGFwcGVu
ZENsYXNzTmFtZShTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBjaGFyKiBjbGFzc05hbWUp
CiB7Ci0gICAgQVNTRVJUKEpTTG9jazo6bG9ja0NvdW50KCkgPiAwKTsKKyAgICBBU1NFUlQoSlND
OjpKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlKCkuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCkpOwogCiAgICAgY2hhciogYyA9IGZhc3RTdHJEdXAoY2xhc3NOYW1lKTsK
IApAQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZENsYXNzTmFtZShTdHJpbmdC
dWlsZGUKIGNvbnN0IGNoYXIqIEphdmFNZXRob2Q6OnNpZ25hdHVyZSgpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX3NpZ25hdHVyZSkgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGFjcXVpcmUgYSBKU0xvY2sgaGVy
ZT8KIAogICAgICAgICBTdHJpbmdCdWlsZGVyIHNpZ25hdHVyZUJ1aWxkZXI7CiAgICAgICAgIHNp
Z25hdHVyZUJ1aWxkZXIuYXBwZW5kKCcoJyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
am5pL2pzYy9KYXZhU3RyaW5nSlNDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2puaS9qc2MvSmF2YVN0cmluZ0pTQy5oCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlNDLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgSmF2YVN0cmluZ0pTQ19oCiAKICNpbmNsdWRlICJKTklV
dGlsaXR5LmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiSmF2YUlu
c3RhbmNlSlNDLmgiCiAKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgpAQCAtNTIsMjAgKzUz
LDIwIEBAIHB1YmxpYzoKIAogICAgIEphdmFTdHJpbmcoKQogICAgIHsKLSAgICAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2so
V2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAg
IG1faW1wbCA9IFVTdHJpbmcoKS5pbXBsKCk7CiAgICAgfQogCiAgICAgfkphdmFTdHJpbmcoKQog
ICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAgICAgICAgIG1faW1wbCA9IDA7CiAgICAgfQogCiAgICAgY29uc3QgY2hh
ciogdXRmOCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIW1fdXRmOFN0cmluZy5kYXRhKCkp
IHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
ICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIG1fdXRmOFN0cmluZyA9IFVTdHJpbmcobV9p
bXBsKS51dGY4KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1fdXRmOFN0cmluZy5kYXRh
KCk7CkBAIC03OSw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGludCBzaXplID0gZS0+R2V0
U3RyaW5nTGVuZ3RoKHMpOwogICAgICAgICBjb25zdCBqY2hhciogdWMgPSBnZXRVQ2hhcmFjdGVy
c0Zyb21KU3RyaW5nSW5FbnYoZSwgcyk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9j
ayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAg
ICAgICAgIG1faW1wbCA9IFVTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHVj
KSwgc2l6ZSkuaW1wbCgpOwogICAgICAgICB9CiAgICAgICAgIHJlbGVhc2VVQ2hhcmFjdGVyc0Zv
ckpTdHJpbmdJbkVudihlLCBzLCB1Yyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNj
L0JyaWRnZUpTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9C
cmlkZ2VKU0MuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
anNjL0JyaWRnZUpTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgSlNPYmpl
Y3QqIEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KAogICAgIGlmIChSdW50aW1lT2JqZWN0
KiBleGlzdGluZ09iamVjdCA9IG1fcnVudGltZU9iamVjdC5nZXQoKSkKICAgICAgICAgcmV0dXJu
IGV4aXN0aW5nT2JqZWN0OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBSdW50aW1lT2JqZWN0KiBuZXdP
YmplY3QgPSBuZXdSdW50aW1lT2JqZWN0KGV4ZWMpOwogICAgIG1fcnVudGltZU9iamVjdCA9IFBh
c3NXZWFrPFJ1bnRpbWVPYmplY3Q+KG5ld09iamVjdCk7CiAgICAgbV9yb290T2JqZWN0LT5hZGRS
dW50aW1lT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3T2JqZWN0KTsKQEAgLTEwMSw3ICsx
MDEsNyBAQCBKU09iamVjdCogSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoCiAKIFJ1bnRp
bWVPYmplY3QqIEluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogCiAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUg
dXNlcyB0aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAogICAgIC8v
IFdlIG5lZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQgZ2xvYmFsIG9iamVjdCBmb3IgImkiLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCShyZXZpc2lv
biAxMjA4ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgT2JqY0luc3RhbmNlOjptb3Zl
R2xvYmFsRXhjZXB0aW9uVG8KICAgICB9CiAKICAgICBpZiAoIXNfZXhjZXB0aW9uRW52aXJvbm1l
bnQgfHwgc19leGNlcHRpb25FbnZpcm9ubWVudCA9PSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0
KCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHRocm93RXJyb3IoZXhlYywgc19l
eGNlcHRpb24pOwogICAgIH0KIApAQCAtMjM5LDcgKzIzOSw3IEBAIEpTVmFsdWUgT2JqY0luc3Rh
bmNlOjppbnZva2VPYmpjTWV0aG9kKEUKIHsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzVW5kZWZp
bmVkKCk7CiAgICAgCi0gICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29w
ZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkg
c2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogCiAgICAgc2V0R2xvYmFsRXhj
ZXB0aW9uKG5pbCk7CiAgICAgCkBAIC0zNTQsNyArMzU0LDcgQEAgSlNWYWx1ZSBPYmpjSW5zdGFu
Y2U6Omludm9rZURlZmF1bHRNZXRobwogewogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNVbmRlZmlu
ZWQoKTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVj
YXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3Bl
IGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KICAgICBzZXRHbG9iYWxFeGNlcHRpb24o
bmlsKTsKICAgICAKIEB0cnkgewpAQCAtNDExLDcgKzQxMSw3IEBAIGJvb2wgT2JqY0luc3RhbmNl
OjpzZXRWYWx1ZU9mVW5kZWZpbmVkRmkKICAgICBpZiAoIVt0YXJnZXRPYmplY3QgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3RvcihzZXRWYWx1ZTpmb3JVbmRlZmluZWRLZXk6KV0pCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkg
c2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBA
dHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KIAogICAgIC8vIFRoaXMg
Y2hlY2sgaXMgbm90IHJlYWxseSBuZWNlc3NhcnkgYmVjYXVzZSBOU09iamVjdCBpbXBsZW1lbnRz
CiAgICAgLy8gc2V0VmFsdWU6Zm9yVW5kZWZpbmVkS2V5OiwgYW5kIHVuZm9ydHVuYXRlbHkgdGhl
IGRlZmF1bHQgaW1wbGVtZW50YXRpb24KQEAgLTQ0Myw3ICs0NDMsNyBAQCBKU1ZhbHVlIE9iamNJ
bnN0YW5jZTo6Z2V0VmFsdWVPZlVuZGVmaW5lCiAgICAgCiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0g
Z2V0T2JqZWN0KCk7CiAKLSAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNj
b3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRy
eSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAKICAgICAvLyBUaGlzIGNo
ZWNrIGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5IGJlY2F1c2UgTlNPYmplY3QgaW1wbGVtZW50cwog
ICAgIC8vIHZhbHVlRm9yVW5kZWZpbmVkS2V5OiwgYW5kIHVuZm9ydHVuYXRlbHkgdGhlIGRlZmF1
bHQgaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNf
cnVudGltZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpj
X3J1bnRpbWUubW0JKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9v
YmpjL29iamNfcnVudGltZS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTIsMTkgKzkyLDE4IEBAIEpT
VmFsdWUgT2JqY0ZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeGUKICAgICAKICAgICBpZCB0YXJn
ZXRPYmplY3QgPSAoc3RhdGljX2Nhc3Q8Y29uc3QgT2JqY0luc3RhbmNlKj4oaW5zdGFuY2UpKS0+
Z2V0T2JqZWN0KCk7CiAKLSAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNj
b3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRy
eSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAKICAgICBAdHJ5IHsKICAg
ICAgICAgaWYgKGlkIG9iamNWYWx1ZSA9IFt0YXJnZXRPYmplY3QgdmFsdWVGb3JLZXk6KE5TU3Ry
aW5nICopX25hbWUuZ2V0KCldKQogICAgICAgICAgICAgcmVzdWx0ID0gY29udmVydE9iamNWYWx1
ZVRvVmFsdWUoZXhlYywgJm9iamNWYWx1ZSwgT2JqY09iamVjdFR5cGUsIGluc3RhbmNlLT5yb290
T2JqZWN0KCkpOwogICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
ICAgICAgICBPYmpjSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVj
KTsKICAgICAgICAgfQogICAgIH0gQGNhdGNoKE5TRXhjZXB0aW9uKiBsb2NhbEV4Y2VwdGlvbikg
ewotICAgICAgICBKU0xvY2s6OmxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHRocm93RXJyb3IoZXhlYywgW2xvY2Fs
RXhjZXB0aW9uIHJlYXNvbl0pOwotICAgICAgICBKU0xvY2s6OnVubG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogICAgIH0KIAogICAgIC8vIFdvcmsgYXJvdW5kIHByb2JsZW0gaW4gc29tZSB2
ZXJzaW9ucyBvZiBHQ0Mgd2hlcmUgcmVzdWx0IGdldHMgbWFya2VkIHZvbGF0aWxlIGFuZApAQCAt
MTI1LDE4ICsxMjQsMTcgQEAgdm9pZCBPYmpjRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVj
UwogICAgIGlkIHRhcmdldE9iamVjdCA9IChzdGF0aWNfY2FzdDxjb25zdCBPYmpjSW5zdGFuY2Uq
PihpbnN0YW5jZSkpLT5nZXRPYmplY3QoKTsKICAgICBpZCB2YWx1ZSA9IGNvbnZlcnRWYWx1ZVRv
T2JqY09iamVjdChleGVjLCBhVmFsdWUpOwogCi0gICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lk
ZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBp
bnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogCiAg
ICAgQHRyeSB7CiAgICAgICAgIFt0YXJnZXRPYmplY3Qgc2V0VmFsdWU6dmFsdWUgZm9yS2V5OihO
U1N0cmluZyAqKV9uYW1lLmdldCgpXTsKICAgICAgICAgewotICAgICAgICAgICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgICAgICAgICAgT2JqY0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9F
eGVjU3RhdGUoZXhlYyk7CiAgICAgICAgIH0KICAgICB9IEBjYXRjaChOU0V4Y2VwdGlvbiogbG9j
YWxFeGNlcHRpb24pIHsKLSAgICAgICAgSlNMb2NrOjpsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9y
KGV4ZWMsIFtsb2NhbEV4Y2VwdGlvbiByZWFzb25dKTsKLSAgICAgICAgSlNMb2NrOjp1bmxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW0JKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbQkod29ya2luZyBjb3B5KQpAQCAt
ODYsNyArODYsNyBAQCBPYmpjVmFsdWUgY29udmVydFZhbHVlVG9PYmpjVmFsdWUoRXhlY1N0CiAK
ICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBPYmpjT2JqZWN0VHlwZTogewotICAg
ICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBKU0ds
b2JhbE9iamVjdCAqb3JpZ2luR2xvYmFsT2JqZWN0ID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVj
dCgpOwogICAgICAgICAgICAgUm9vdE9iamVjdCogb3JpZ2luUm9vdE9iamVjdCA9IGZpbmRSb290
T2JqZWN0KG9yaWdpbkdsb2JhbE9iamVjdCk7CkBAIC0xNDYsNyArMTQ2LDcgQEAgT2JqY1ZhbHVl
IGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4ZWNTdAogCiBKU1ZhbHVlIGNvbnZlcnROU1N0cmlu
Z1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgTlNTdHJpbmcgKm5zc3RyaW5nKQogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAgICAgCiAgICAgdW5pY2hhciAqY2hhcnM7CiAgICAgdW5zaWduZWQgaW50IGxlbmd0
aCA9IFtuc3N0cmluZyBsZW5ndGhdOwpAQCAtMTc4LDcgKzE3OCw3IEBAIEpTVmFsdWUgY29udmVy
dE5TU3RyaW5nVG9TdHJpbmcoRXhlY1N0YXQKICovCiBKU1ZhbHVlIGNvbnZlcnRPYmpjVmFsdWVU
b1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogYnVmZmVyLCBPYmpjVmFsdWVUeXBlIHR5cGUs
IFJvb3RPYmplY3QqIHJvb3RPYmplY3QpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICBzd2l0
Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBPYmpjT2JqZWN0VHlwZTogewpJbmRleDogU291cmNl
L1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Miw3ICs5Miw3IEBAIFF0SW5zdGFuY2U6OlF0SW5zdGFuY2UoUU9iamVjdCogbywgUGFzc1IK
IAogUXRJbnN0YW5jZTo6flF0SW5zdGFuY2UoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBjYWNoZWRJbnN0YW5jZXMucmVtb3ZlKG1faGFz
aGtleSk7CiAKQEAgLTExOSw3ICsxMTksNyBAQCBRdEluc3RhbmNlOjp+UXRJbnN0YW5jZSgpCiAK
IFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gUXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShRT2JqZWN0
KiBvLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3QsIFZhbHVlT3duZXJzaGlwIG93
bmVyc2hpcCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwogCiAgICAgZm9yZWFjaCAoUXRJbnN0YW5jZSogaW5zdGFuY2UsIGNhY2hlZEluc3RhbmNlcy52
YWx1ZXMobykpCiAgICAgICAgIGlmIChpbnN0YW5jZS0+cm9vdE9iamVjdCgpID09IHJvb3RPYmpl
Y3QpIHsKQEAgLTE4MCw3ICsxODAsNyBAQCBDbGFzcyogUXRJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBj
b25zdAogCiBSdW50aW1lT2JqZWN0KiBRdEluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIG1fbWV0aG9kcy5jbGVhcigpOwogICAg
IHJldHVybiBRdFJ1bnRpbWVPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIHRoaXMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3Bp
eG1hcHJ1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9x
dF9waXhtYXBydW50aW1lLmNwcAkocmV2aXNpb24gMTIwODg3KQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsNyAr
NDIwLDcgQEAgUnVudGltZU9iamVjdCogUXRQaXhtYXBJbnN0YW5jZTo6bmV3UnVudAogCiBKU09i
amVjdCogUXRQaXhtYXBJbnN0YW5jZTo6Y3JlYXRlUGl4bWFwUnVudGltZU9iamVjdChFeGVjU3Rh
dGUqIGV4ZWMsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCwgY29uc3QgUVZhcmlhbnQmIGRh
dGEpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBSZWZQdHI8UXRQaXhtYXBJbnN0YW5jZT4gaW5zdGFu
Y2UgPSBhZG9wdFJlZihuZXcgUXRQaXhtYXBJbnN0YW5jZShyb290LCBkYXRhKSk7CiAgICAgcmV0
dXJuIGluc3RhbmNlLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkocmV2aXNpb24gMTIwODg3KQorKysgU291
cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzAsNyArMjMwLDcgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdAog
ICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpT
UmVhbFR5cGUgdHlwZSA9IHZhbHVlUmVhbFR5cGUoZXhlYywgdmFsdWUpOwogICAgIGlmIChoaW50
ID09IFFNZXRhVHlwZTo6Vm9pZCkgewogICAgICAgICBzd2l0Y2godHlwZSkgewpAQCAtODI0LDcg
KzgyNCw3IEBAIEpTVmFsdWUgY29udmVydFFWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUKICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBpZiAodHlw
ZSA9PSBRTWV0YVR5cGU6OkJvb2wpCiAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4odmFyaWFudC50
b0Jvb2woKSk7CkBAIC0xNDIwLDcgKzE0MjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBRdFJ1bnRpbWVN
ZXRhTWV0aG9kOjpjYWxsCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKICAgICAvLyBXZSBoYXZlIHRvIHBpY2sgYSBtZXRob2QgdGhhdCBtYXRjaGVzLi4K
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogCiAgICAgUU9iamVjdCAqb2JqID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2Jq
ZWN0KCk7CiAgICAgaWYgKG9iaikgewpAQCAtMTU2MSw3ICsxNTYxLDcgQEAgRW5jb2RlZEpTVmFs
dWUgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZAogewogICAgIFF0UnVudGltZUNvbm5lY3Rpb25N
ZXRob2REYXRhKiBkID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCAqPihl
eGVjLT5jYWxsZWUoKSktPmRfZnVuYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIFFPYmplY3Qq
IHNlbmRlciA9IGQtPm1faW5zdGFuY2UtPmdldE9iamVjdCgpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvcXQvcXRfcnVudGltZV9xdDQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lX3F0NC5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysr
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lX3F0NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzMCw3ICsyMzAsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4
ZWNTdGF0CiAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogICAgIH0KIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAgICAgSlNSZWFsVHlwZSB0eXBlID0gdmFsdWVSZWFsVHlwZShleGVjLCB2YWx1ZSk7CiAgICAg
aWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpWb2lkKSB7CiAgICAgICAgIHN3aXRjaCh0eXBlKSB7CkBA
IC04MjQsNyArODI0LDcgQEAgSlNWYWx1ZSBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0
ZQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCi0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAg
IGlmICh0eXBlID09IFFNZXRhVHlwZTo6Qm9vbCkKICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih2
YXJpYW50LnRvQm9vbCgpKTsKQEAgLTE0MjksNyArMTQyOSw3IEBAIEVuY29kZWRKU1ZhbHVlIFF0
UnVudGltZU1ldGFNZXRob2Q6OmNhbGwKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIFdlIGhhdmUgdG8gcGljayBhIG1ldGhvZCB0aGF0IG1h
dGNoZXMuLgotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBRT2JqZWN0ICpvYmogPSBkLT5tX2luc3RhbmNl
LT5nZXRPYmplY3QoKTsKICAgICBpZiAob2JqKSB7CkBAIC0xNTcwLDcgKzE1NzAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kCiB7CiAgICAgUXRSdW50aW1lQ29u
bmVjdGlvbk1ldGhvZERhdGEqIGQgPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0
aG9kICo+KGV4ZWMtPmNhbGxlZSgpKS0+ZF9mdW5jKCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAg
UU9iamVjdCogc2VuZGVyID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMjA4ODcp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTUxLDcgKzU1MSw3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUlt
YWdlQnVmZmUKICAgICBtX2NvbnRleHRTdGF0ZVNhdmVyID0gYWRvcHRQdHIobmV3IEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIoKm1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSkpOwogCiAjaWYgVVNF
KEpTQykKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xv
YmFsRGF0YSgpKTsKICAgICBzaXplX3QgbnVtQnl0ZXMgPSA0ICogbV9pbWFnZUJ1ZmZlci0+aW50
ZXJuYWxTaXplKCkud2lkdGgoKSAqIG1faW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLmhlaWdo
dCgpOwogICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpLT5oZWFwLnJl
cG9ydEV4dHJhTWVtb3J5Q29zdChudW1CeXRlcyk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsOCAr
ODEsOCBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiAjaWYgVVNF
KEpTQykKICAgICBpZiAoIWxvYWRFcnJvcikgewogICAgICAgICBpZiAoIWVsZW0tPmluRG9jdW1l
bnQoKSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CiAgICAgICAgICAgICBKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCk7CisgICAgICAgICAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEpOwogICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aGVh
cC5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoY2FjaGVkSW1hZ2UtPmVuY29kZWRTaXplKCkpOwogICAg
ICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHQuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDcgQEAgUGFz
c1JlZlB0cjxBcnJheTxDYWxsRnJhbWU+ID4gSW5qZWN0ZWRTYwogUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcE9iamVjdChj
b25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lKSBjb25zdAog
ewogICAgIEFTU0VSVCghaGFzTm9WYWx1ZSgpKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBob2xk
ZXIoaW5qZWN0ZWRTY3JpcHRPYmplY3QoKS5zY3JpcHRTdGF0ZSgpKTsKICAgICBTY3JpcHRGdW5j
dGlvbkNhbGwgd3JhcEZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJ3cmFwT2JqZWN0
Iik7CiAgICAgd3JhcEZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHZhbHVlKTsKICAgICB3cmFwRnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQoZ3JvdXBOYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisr
KyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBTY3JpcHRWYWx1ZSBJbmplY3RlZFNjcmlwdEJhc2U6
OmNhbGxGdW5jCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbENhbGxGdW5jdGlvbihzY3JpcHRFeGVjdXRpb25D
b250ZXh0LCBuYW1lKCksIDEpOwogCiAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gbV9p
bmplY3RlZFNjcmlwdE9iamVjdC5zY3JpcHRTdGF0ZSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGhvbGRlcihzY3JpcHRTdGF0ZSk7CiAgICAgYm9vbCBldmFsSXNEaXNhYmxlZCA9IGZhbHNlOwog
ICAgIGlmIChzY3JpcHRTdGF0ZSkgewogICAgICAgICBldmFsSXNEaXNhYmxlZCA9ICFldmFsRW5h
YmxlZChzY3JpcHRTdGF0ZSk7CkBAIC05Nyw2ICs5OCw3IEBAIFNjcmlwdFZhbHVlIEluamVjdGVk
U2NyaXB0QmFzZTo6Y2FsbEZ1bmMKIAogdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VDYWxs
KFNjcmlwdEZ1bmN0aW9uQ2FsbCYgZnVuY3Rpb24sIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJl
c3VsdCkKIHsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBob2xkZXIobV9pbmplY3RlZFNjcmlwdE9i
amVjdC5zY3JpcHRTdGF0ZSgpKTsKICAgICBpZiAoaGFzTm9WYWx1ZSgpIHx8ICFjYW5BY2Nlc3NJ
bnNwZWN0ZWRXaW5kb3coKSkgewogICAgICAgICAqcmVzdWx0ID0gSW5zcGVjdG9yVmFsdWU6Om51
bGwoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTE2LDYgKzExOCw3IEBAIHZvaWQgSW5qZWN0ZWRT
Y3JpcHRCYXNlOjptYWtlQ2FsbChTY3JpcHQKIAogdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6Om1h
a2VFdmFsQ2FsbChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFNjcmlwdEZ1bmN0aW9uQ2FsbCYg
ZnVuY3Rpb24sIFJlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0Piogb2Jq
ZWN0UmVzdWx0LCBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pCiB7Cisg
ICAgSlNDOjpKU0xvY2tIb2xkZXIgaG9sZGVyKG1faW5qZWN0ZWRTY3JpcHRPYmplY3Quc2NyaXB0
U3RhdGUoKSk7CiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHQ7CiAgICAgbWFrZUNh
bGwoZnVuY3Rpb24sICZyZXN1bHQpOwogICAgIGlmICghcmVzdWx0KSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw3ICsy
NDAsNyBAQCBib29sIFBsdWdpblZpZXc6OnN0YXJ0KCkKICAgICB7CiAgICAgICAgIFBsdWdpblZp
ZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICAgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+bmV3cCgoTlBNSU1FVHlwZSltX21pbWVUeXBlLnV0ZjgoKS5kYXRhKCksIG1faW5z
dGFuY2UsIG1fbW9kZSwgbV9wYXJhbUNvdW50LCBtX3BhcmFtTmFtZXMsIG1fcGFyYW1WYWx1ZXMs
IE5VTEwpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c3RvcCgpCiAgICAg
bV9pc1N0YXJ0ZWQgPSBmYWxzZTsKIAogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKQEAgLTQ0Niw3ICs0NDYsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBlcmZvcm1SZXF1
ZXN0KFBsdWdpblJlCiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigp
KSB7CiAgICAgICAgICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhp
cyk7CiAjaWYgVVNFKEpTQykKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICBzZXRD
YWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT51cmxub3RpZnkobV9pbnN0YW5jZSwgcmVxdWVzdFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCBOUFJFU19ET05FLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOwpAQCAtNzM2LDcgKzczNiw3
IEBAIE5QT2JqZWN0KiBQbHVnaW5WaWV3OjpucE9iamVjdCgpCiAgICAgewogICAgICAgICBQbHVn
aW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKICNpZiBVU0UoSlNDKQotICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAg
ICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBP
YmplY3QsICZvYmplY3QpOwpAQCAtMTQ5Miw3ICsxNDkyLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpw
cml2YXRlQnJvd3NpbmdTdGF0ZUNoYQogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdp
blZpZXcodGhpcyk7CiAjaWYgVVNFKEpTQykKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIE5Q
Qm9vbCB2YWx1ZSA9IHByaXZhdGVCcm93c2luZ0VuYWJsZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3QmxhY2tCZXJy
eS5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2ti
ZXJyeS9QbHVnaW5WaWV3QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMyw3ICs0
MDMsNyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRo
aXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRD
YWxsaW5nUGx1Z2luKHRydWUpOwogCiAgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpAQCAtOTcwLDcgKzk3MCw3IEBA
IHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgICAgICgoTlBTZXRX
aW5kb3dDYWxsYmFja1N0cnVjdCopbV9ucFdpbmRvdy53c19pbmZvKS0+d2luZG93R3JvdXAgPSB3
aW5kb3ctPndpbmRvd0dyb3VwKCk7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
Vmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAg
ICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIC8vIEZJWE1FOiBQYXNzaW5nIHpvb21G
YWN0b3IgdG8gc2V0d2luZG93IG1ha2Ugd2luZG93ZWQgcGx1Z2luIHNjYWxlIGluY29ycmVjdGx5
LgpAQCAtMTIyMCw3ICsxMjIwLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkK
IAogICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsKICAgICAgICAg
UGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHNldENhbGxpbmdQbHVn
aW4odHJ1ZSk7CiAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2lu
c3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKICAgICAgICAg
c2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBAIC0xMzAxLDcgKzEzMDEsNyBAQCB2b2lkIFBsdWdp
blZpZXc6OmdldFdpbmRvd0luZm8oVmVjdG9yPFBsCiAgICAgdm9pZCogdmFsUHRyID0gMDsKIAog
ICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUp
OwogICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBW
cGx1Z2luU2NyZWVuV2luZG93LCAmdmFsUHRyKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3Bw
CShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5W
aWV3RWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBib29sIFBsdWdpblZp
ZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogCiAgICAgYm9vbCBhY2NlcHRlZCA9
IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlz
aW9uIDEyMDg4NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgYm9vbCBQbHVnaW5WaWV3Ojpk
aXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbHVn
aW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAg
IGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFu
Y2UsICZldmVudCk7CkBAIC0yNzYsNyArMjc2LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwYWludChH
cmFwaGljc0NvbnRleHQqIAogCiB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQo
S2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogCiAgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5T
dGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCiAgICAgICAgIHJldHVybjsKQEAgLTQwNiw3ICs0MDYs
NyBAQCBzdGF0aWMgdm9pZCBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmljRmllCiAKIHZvaWQgUGx1
Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKIHsKLSAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBpZiAoIW1faXNTdGFydGVk
IHx8IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNTM1LDcgKzUzNSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJ
Zk5lZWRlZCgpCiAgICAgfQogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
dGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNl
dENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdp
bmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxz
ZSk7CkBAIC04NDIsNyArODQyLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkK
ICNpZiBkZWZpbmVkKFhQX1VOSVgpCiAgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5n
ZXR2YWx1ZSkgewogICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlz
KTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVl
ZHNYRW1iZWQpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbQkocmV2aXNpb24gMTIwODg3
KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDI2LDcgKzQyNiw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJ
Zk5lZWRlZCgpCiAgICAgICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0IC0gbV9ucFdp
bmRvdy5jbGlwUmVjdC5sZWZ0LCBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSAtIG1fbnBXaW5k
b3cuY2xpcFJlY3QudG9wKTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3
KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBz
ZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3
aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFs
c2UpOwpAQCAtNzcyLDcgKzc3Miw3IEBAIFBvaW50IFBsdWdpblZpZXc6Om1vdXNlUG9zRm9yUGx1
Z2luKE1vdXMKIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIGV2ZW50
KQogewogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2lu
KHRydWUpOwogCiAgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5l
dmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9x
dC9QbHVnaW5WaWV3UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
cXQvUGx1Z2luVmlld1F0LmNwcAkocmV2aXNpb24gMTIwODg3KQorKysgU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzMsNyArMzcz
LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogCiAgICAgUGx1
Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAjaWYgVVNFKEpTQykKLSAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICBzZXRDYWxs
aW5nUGx1Z2luKHRydWUpOwogICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CkBAIC02ODcsNyArNjg3LDcgQEAgdm9p
ZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKIAogICAgIFBsdWdpblZpZXc6OnNl
dEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0
cnVlKTsKICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2Us
ICZtX25wV2luZG93KTsKQEAgLTk0OSw3ICs5NDksNyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRm
b3JtU3RhcnQoKQogICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsK
ICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAjaWYgVVNF
KEpTQykKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICNlbmRpZgogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVt
YmVkLCAmbV9uZWVkc1hFbWJlZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9Q
bHVnaW5WaWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dp
bi9QbHVnaW5WaWV3V2luLmNwcAkocmV2aXNpb24gMTIwODg3KQorKysgU291cmNlL1dlYkNvcmUv
cGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyNiw3ICs1
MjYsNyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAgICAgICAg
IHNob3VsZFBvcCA9IHRydWU7CiAgICAgfQogCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgYm9vbCBhY2Nl
cHRlZCA9ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZl
bnQpOwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtNjc3LDcgKzY3Nyw3IEBAIHZv
aWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXkKICAgICB9IGVsc2UKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgIGlmIChkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCiAgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOwogfQpAQCAtNzQ3LDcgKzc0Nyw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFu
ZGxlTW91c2VFdmVudChNb3VzZUUKICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuOwogCi0gICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIC8vIEZJWE1FOiBDb25z
aWRlciBiYWNrIHBvcnRpbmcgdGhlIGh0dHA6Ly93ZWJraXQub3JnL2IvNTgxMDggZml4IGhlcmUu
CiAgICAgaWYgKGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7CkBAIC04MzUsNyArODM1LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRO
UFdpbmRvd1JlY3QoY29uc3QgSQogICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKIAog
ICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7Ci0gICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHNldENhbGxp
bmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5k
b3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZh
bHNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0
U3VwcG9ydC5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
anMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZVRlc3RTdXBwb3J0IHsKIAogdm9pZCBpbmplY3RJbnRlcm5hbHNP
YmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnbG9i
YWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBzY3JpcHRDb250ZXh0LT5pc0RvY3VtZW50KCkgPyBzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KHNjcmlwdENvbnRleHQpIDogMDsKQEAgLTQ5LDggKzQ5LDggQEAgdm9pZCBpbmplY3RJbnRlcm5h
bHNPYmplY3QoSlNDb250ZXh0UmVmIAogCiB2b2lkIHJlc2V0SW50ZXJuYWxzT2JqZWN0KEpTQ29u
dGV4dFJlZiBjb250ZXh0KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAg
ICBJbnRlcm5hbHMgKiBpbnRlcm5hbHMgPSB0b0ludGVybmFscyhnbG9iYWxPYmplY3QtPmdldERp
cmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgSW50ZXJuYWxzOjppbnRl
cm5hbHNJZCkpKTsKICAgICBpZiAoaW50ZXJuYWxzKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1MSw4ICs4NTEsOCBAQCB2
b2lkIFhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbigpCiAgICAgLy8gb3V0LiBCdXQgaXQg
aXMgcHJvdGVjdGVkIGZyb20gR0Mgd2hpbGUgbG9hZGluZywgc28gdGhpcwogICAgIC8vIGNhbid0
IGJlIHJlY291cGVkIHVudGlsIHRoZSBsb2FkIGlzIGRvbmUsIHNvIG9ubHkKICAgICAvLyByZXBv
cnQgdGhlIGV4dHJhIGNvc3QgYXQgdGhhdCBwb2ludC4KLSAgICBKU0M6OkpTTG9jayBsb2NrKEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpOworICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSk7CiAgICAgZ2xvYmFsRGF0YS0+aGVhcC5yZXBv
cnRFeHRyYU1lbW9yeUNvc3QobV9yZXNwb25zZUJ1aWxkZXIubGVuZ3RoKCkgKiAyKTsKICNlbmRp
ZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA4OTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAxMi0wNi0yMCAgTWFy
ayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBz
aG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGlu
c3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBj
b3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRo
IHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBTaGFyZWQvbWFj
L1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlTYW1w
bGVyOjpzYW1wbGVXZWJLaXQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6amF2
YVNjcmlwdE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpy
ZXBvcnRFeGNlcHRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9K
U05QT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Y2FsbE1ldGhvZCk6
CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxPYmplY3QpOgorICAgICAgICAoV2Vi
S2l0OjpKU05QT2JqZWN0OjpjYWxsQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpKU05Q
T2JqZWN0OjpwdXQpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eSk6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0Ojpwcm9wZXJ0eUdldHRlcik6CisgICAgICAgICog
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOUEpTT2JqZWN0OjpoYXNNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0
OjppbnZva2UpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjppbnZva2VEZWZhdWx0KToK
KyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aGFzUHJvcGVydHkpOgorICAgICAgICAoV2Vi
S2l0OjpOUEpTT2JqZWN0OjpnZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmpl
Y3Q6OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6cmVtb3ZlUHJv
cGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjplbnVtZXJhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpOUEpTT2JqZWN0Ojpjb25zdHJ1Y3QpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQpOgorICAgICAg
ICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYktp
dDo6TlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkZyYW1lOjpqc1dyYXBwZXJGb3JXb3JsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lOjpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8pOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cnVu
SmF2YVNjcmlwdEluTWFpbkZyYW1lKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpnZXRXZWJDb3JlU3RhdGlzdGljcyk6
CisKIDIwMTItMDYtMjAgIFRoaWFnbyBNYXJjb3MgUC4gU2FudG9zICA8dGhpYWdvLnNhbnRvc0Bp
bnRlbC5jb20+CiAKICAgICAgICAgW1dLMl0gQ29sb3IgY2hvb3NlciBBUEkgbWlzc2luZwpJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9yeVNhbXBsZXIubWFj
Lm1tCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYk1l
bW9yeVNhbXBsZXIubWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgV2Vi
TWVtb3J5U3RhdGlzdGljcyBXZWJNZW1vcnlTYW1wbGVyOjpzYQogICAgIHRvdGFsQnl0ZXNJblVz
ZSArPSBmYXN0TWFsbG9jQnl0ZXNJblVzZTsKICAgICB0b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGZh
c3RNYWxsb2NCeXRlc0NvbW1pdHRlZDsKICAgICAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKSk7CiAgICAgc2l6ZV90IGpzY0hlYXBCeXRlc0luVXNlID0gSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnNpemUoKTsKICAgICBzaXplX3QganNjSGVh
cEJ5dGVzQ29tbWl0dGVkID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFw
LmNhcGFjaXR5KCk7CiAgICAgdG90YWxCeXRlc0luVXNlICs9IGpzY0hlYXBCeXRlc0luVXNlOwpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAx
MjA4ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MjAsNyArOTIwLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpnZXRXZWJDb3Jl
U3RhdGlzdGljcyh1aQogICAgIAogICAgIC8vIEdhdGhlciBKYXZhU2NyaXB0IHN0YXRpc3RpY3Mu
CiAgICAgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwogICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiSmF2YVNjcmlwdE9iamVjdHND
b3VudCIsIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RDb3Vu
dCgpKTsKICAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRHbG9i
YWxPYmplY3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAu
Z2xvYmFsT2JqZWN0Q291bnQoKSk7CiAgICAgICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0
KCJKYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50IiwgSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCkpOwpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MDksNyArNDA5LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6Z2FyYmFnZUNvbGxlY3RKYXZh
UwogCiBzaXplX3QgSW5qZWN0ZWRCdW5kbGU6OmphdmFTY3JpcHRPYmplY3RzQ291bnQoKQogewot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICByZXR1cm4gSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCk7CiB9CiAK
QEAgLTQxOCw4ICs0MTgsOCBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpyZXBvcnRFeGNlcHRpb24o
SlNDCiAgICAgaWYgKCFjb250ZXh0IHx8ICFleGNlcHRpb24pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4
ZWNTdGF0ZSogZXhlY1N0YXRlID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjU3RhdGUpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IGhhcyBhIERPTVdp
bmRvdyBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgdGhpcyBjb250ZXh0IGRpZG4ndCBvcmlnaW5h
dGUgZnJvbSBhIFBhZ2UuCiAgICAgaWYgKCF0b0pTRE9NV2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDEyMDg4
NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTTG9jay5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09iamVjdFByb3Rv
dHlwZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSWRlbnRpZmllclJlcC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvSlNET01XaW5kb3dCYXNlLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMTI1LDcgKzEyNiw3IEBAIEpTVmFs
dWUgSlNOUE9iamVjdDo6Y2FsbE1ldGhvZChFeGVjU3RhdGUKICAgICBWT0lEX1RPX05QVkFSSUFO
VChyZXN1bHQpOwogICAgIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmludm9rZShtX25w
T2JqZWN0LCBtZXRob2ROYW1lLCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVz
dWx0KTsKICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9F
eGVjU3RhdGUoZXhlYyk7CiAgICAgfQpAQCAtMTY1LDcgKzE2Niw3IEBAIEpTQzo6SlNWYWx1ZSBK
U05QT2JqZWN0OjpjYWxsT2JqZWN0KEpTQzoKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQp
OwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBy
ZXR1cm5WYWx1ZSA9IG1fbnBPYmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdChtX25wT2JqZWN0
LCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKICAgICAgICAgTlBS
dW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAg
ICAgfQpAQCAtMjA1LDcgKzIwNiw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbENvbnN0cnVj
dG9yKEV4ZWMKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwogICAgIAogICAgIHsKLSAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBt
X25wT2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdChtX25wT2JqZWN0LCBhcmd1bWVudHMuZGF0YSgp
LCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjpt
b3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgfQpAQCAtMzQwLDcgKzM0
MSw3IEBAIHZvaWQgSlNOUE9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1MKICAgICBOUFJ1
bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBwcm90ZWN0b3IodGhpc09iamVjdC0+bV9v
YmplY3RNYXApOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgICAgICB0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPnNldFByb3BlcnR5KHRoaXNP
YmplY3QtPm1fbnBPYmplY3QsIG5wSWRlbnRpZmllciwgJnZhcmlhbnQpOwogCiAgICAgICAgIE5Q
UnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpA
QCAtMzgwLDcgKzM4MSw3IEBAIGJvb2wgSlNOUE9iamVjdDo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0
YXQKICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBwcm90ZWN0b3IobV9v
YmplY3RNYXApOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHJlbW92
ZVByb3BlcnR5IHJldHVybnMgZmFsc2U/CiAgICAgICAgIGlmICghbV9ucE9iamVjdC0+X2NsYXNz
LT5yZW1vdmVQcm9wZXJ0eShtX25wT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKQpAQCAtNDEzLDcgKzQx
NCw3IEBAIHZvaWQgSlNOUE9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU08KICAgICBOUFJ1
bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBwcm90ZWN0b3IodGhpc09iamVjdC0+bV9v
YmplY3RNYXApOwogICAgIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKIAogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBl
bnVtZXJhdGUgcmV0dXJucyBmYWxzZT8KICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5tX25wT2Jq
ZWN0LT5fY2xhc3MtPmVudW1lcmF0ZSh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LCAmaWRlbnRpZmll
cnMsICZpZGVudGlmaWVyQ291bnQpKQpAQCAtNDYxLDcgKzQ2Miw3IEBAIEpTVmFsdWUgSlNOUE9i
amVjdDo6cHJvcGVydHlHZXR0ZXIoRXhlY1MKICAgICAKICAgICBib29sIHJldHVyblZhbHVlOwog
ICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgTlBJZGVu
dGlmaWVyIG5wSWRlbnRpZmllciA9IG5wSWRlbnRpZmllckZyb21JZGVudGlmaWVyKHByb3BlcnR5
TmFtZSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gdGhpc09iai0+bV9ucE9iamVjdC0+X2NsYXNz
LT5nZXRQcm9wZXJ0eSh0aGlzT2JqLT5tX25wT2JqZWN0LCBucElkZW50aWZpZXIsICZyZXN1bHQp
OwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OUEpTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBib29sIE5QSlNPYmplY3Q6Omhhc01l
dGhvZChOUElkZW50aWZpZXIgCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fanNPYmplY3QtPmdldChl
eGVjLCBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoZXhlYywgaWRlbnRpZmllclJlcCkpOyAg
ICAKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwpAQCAtMTE5LDcgKzExOSw3IEBAIGJvb2wg
TlBKU09iamVjdDo6aW52b2tlKE5QSWRlbnRpZmllciBtZXQKICAgICBpZiAoIWV4ZWMpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBmdW5j
dGlvbiA9IG1fanNPYmplY3QtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAo
ZXhlYywgaWRlbnRpZmllclJlcCkpOwogICAgIHJldHVybiBpbnZva2UoZXhlYywgbV9vYmplY3RN
YXAtPmdsb2JhbE9iamVjdCgpLCBmdW5jdGlvbiwgYXJndW1lbnRzLCBhcmd1bWVudENvdW50LCBy
ZXN1bHQpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIGJvb2wgTlBKU09iamVjdDo6aW52b2tlRGVmYXVs
dChjb25zdCBOUFYKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAKICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gbV9qc09iamVjdC5nZXQoKTsKICAg
ICByZXR1cm4gaW52b2tlKGV4ZWMsIG1fb2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKSwgZnVuY3Rp
b24sIGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVzdWx0KTsKQEAgLTE0NSw3ICsxNDUsNyBA
QCBib29sIE5QSlNPYmplY3Q6Omhhc1Byb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgaWYgKCFleGVj
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIGJvb2wg
cmVzdWx0OwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKQpAQCAtMTY1LDcgKzE2
NSw3IEBAIGJvb2wgTlBKU09iamVjdDo6Z2V0UHJvcGVydHkoTlBJZGVudGlmaWUKICAgICBpZiAo
IWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNWYWx1
ZSBqc1Jlc3VsdDsKICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkKICAgICAgICAg
anNSZXN1bHQgPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVy
UmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApKTsKQEAgLTE4NSw3ICsxODUsNyBAQCBib29sIE5QSlNP
YmplY3Q6OnNldFByb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgaWYgKCFleGVjKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTVmFsdWUganNWYWx1ZSA9
IG1fb2JqZWN0TWFwLT5jb252ZXJ0TlBWYXJpYW50VG9KU1ZhbHVlKGV4ZWMsIG1fb2JqZWN0TWFw
LT5nbG9iYWxPYmplY3QoKSwgKnZhbHVlKTsKICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJp
bmcoKSkgewpAQCAtMjA2LDcgKzIwNiw3IEBAIGJvb2wgTlBKU09iamVjdDo6cmVtb3ZlUHJvcGVy
dHkoTlBJZGVudGkKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgaWYgKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpIHsKICAgICAgICAg
SWRlbnRpZmllciBpZGVudGlmaWVyID0gaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMs
IGlkZW50aWZpZXJSZXApOwogICAgICAgICAKQEAgLTIzNSw3ICsyMzUsNyBAQCBib29sIE5QSlNP
YmplY3Q6OmVudW1lcmF0ZShOUElkZW50aWZpZXIqCiAgICAgaWYgKCFleGVjKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIFByb3BlcnR5TmFtZUFycmF5
IHByb3BlcnR5TmFtZXMoZXhlYyk7CiAgICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0
UHJvcGVydHlOYW1lcyhtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKQEAgLTI1Nyw3ICsyNTcsNyBAQCBib29sIE5QSlNPYmpl
Y3Q6OmNvbnN0cnVjdChjb25zdCBOUFZhcmlhCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3RE
YXRhOwogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVjdERhdGEo
bV9qc09iamVjdC5nZXQoKSwgY29uc3RydWN0RGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50
aW1lT2JqZWN0TWFwLmNwcAkocmV2aXNpb24gMTIwODg3KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBKU1ZhbHVlIE5QUnVudGltZU9iamVjdE1hcDo6Y29u
dmVydE5QVmFyCiAKIHZvaWQgTlBSdW50aW1lT2JqZWN0TWFwOjpjb252ZXJ0SlNWYWx1ZVRvTlBW
YXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgTlBWYXJpYW50JiB2YXJpYW50
KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBWT0lEX1RPX05QVkFSSUFOVCh2YXJpYW50KTsKICAg
ICAKQEAgLTE4Niw3ICsxODYsNyBAQCBib29sIE5QUnVudGltZU9iamVjdE1hcDo6ZXZhbHVhdGUo
TlBPYmplCiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KTsKICAgICAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZ2V0T3JDcmVh
dGVKU09iamVjdChnbG9iYWxPYmplY3QuZ2V0KCksIG5wT2JqZWN0KTsKIAogICAgIGdsb2JhbE9i
amVjdC0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7CkBAIC0yNjYsNyArMjY2
LDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcAogICAgICAgICBy
ZXR1cm47CiAKICAgICB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9y
KGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhnbG9iYWxFeGNlcHRpb25T
dHJpbmcoKSkpKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0Miw3ICs2NDIsNyBAQCBKU1ZhbHVlUmVmIFdlYkZyYW1lOjpqc1dyYXBwZXJGb3JXb3JsZChJ
CiAgICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9IG1fY29yZUZyYW1lLT5zY3JpcHQoKS0+
Z2xvYmFsT2JqZWN0KHdvcmxkLT5jb3JlV29ybGQoKSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0g
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIHJldHVybiB0
b1JlZihleGVjLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgbm9kZUhhbmRsZS0+Y29yZU5vZGUo
KSkpOwogfQogCkBAIC02NTQsNyArNjU0LDcgQEAgSlNWYWx1ZVJlZiBXZWJGcmFtZTo6anNXcmFw
cGVyRm9yV29ybGQoSQogICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSBtX2NvcmVGcmFt
ZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCh3b3JsZC0+Y29yZVdvcmxkKCkpOwogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICByZXR1cm4gdG9SZWYoZXhlYywgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHJhbmdlSGFu
ZGxlLT5jb3JlUmFuZ2UoKSkpOwogfQogCkBAIC02NzEsNyArNjcxLDcgQEAgSlNWYWx1ZVJlZiBX
ZWJGcmFtZTo6Y29tcHV0ZWRTdHlsZUluY2x1ZAogCiAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNyZWF0
ZShzdGF0aWNfY2FzdDxKU0VsZW1lbnQqPih0b0pTKGVsZW1lbnQpKS0+aW1wbCgpLCB0cnVlKTsK
IAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdHlsZS5nZXQoKSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4MDMsNyArMTgwMyw3IEBAIHZvaWQgV2ViUGFnZTo6cnVuSmF2YVNjcmlwdEluTWFpbkZyYW1l
KGMKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkUmVzdWx0VmFs
dWU7CiAgICAgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlOwogCi0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIGlmIChKU1ZhbHVlIHJlc3Vs
dFZhbHVlID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlw
dChzY3JpcHQsIHRydWUpLmpzVmFsdWUoKSkgewogICAgICAgICBpZiAoKHNlcmlhbGl6ZWRSZXN1
bHRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKG1fbWFpbkZyYW1lLT5qc0Nv
bnRleHQoKSwgdG9SZWYobV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT5zY3JpcHQoKS0+Z2xvYmFs
T2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpLCByZXN1bHRWYWx1
ZSksIDApKSkKICAgICAgICAgICAgIGRhdGFSZWZlcmVuY2UgPSBzZXJpYWxpemVkUmVzdWx0VmFs
dWUtPmRhdGEoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwkocmV2aXNpb24g
MTIwODkxKQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFo
bmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9i
YWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENo
YW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBK
U0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0
aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVl
ZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIEFwaS9CbGFja0JlcnJ5R2xvYmFsLmNwcDoKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6Y2xlYXJNZW1vcnlDYWNoZXMpOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHA6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlUG9w
dXBCbGFja0JlcnJ5OjppbnN0YWxsRG9tRnVuY3Rpb24pOgorICAgICAgICAqIFdlYktpdFN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0LmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3Vw
cG9ydDo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKToKKwogMjAxMi0wNi0yMCAg
SmFja3kgSmlhbmcgIDx6aGFqaWFuZ0ByaW0uY29tPgogCiAgICAgICAgIEFkZCBhICE9IG9wZXJh
dG9yIHRvIFZpZXdwb3J0QXJndW1lbnRzCkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL0JsYWNrQmVycnlHbG9iYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNSw3ICsxMDUsMTAgQEAgdm9pZCBjbGVhck1lbW9yeUNhY2hlcygpCiAgICAg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OnVzZXJJbnRlcmZhY2VUaHJlYWRNZXNzYWdlQ2xpZW50KCkt
PmRpc3BhdGNoTWVzc2FnZShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Y3JlYXRlRnVuY3Rpb25DYWxs
TWVzc2FnZShjbGVhck1lbW9yeUNhY2hlc0luQ29tcG9zaXRpbmdUaHJlYWQpKTsKICNlbmRpZgog
Ci0gICAgY29sbGVjdEphdmFzY3JpcHRHYXJiYWdlTm93KCk7CisgICAgeworICAgICAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7Cisg
ICAgICAgIGNvbGxlY3RKYXZhc2NyaXB0R2FyYmFnZU5vdygpOworICAgIH0KIAogICAgIC8vIENs
ZWFuIGNhY2hlcyBhZnRlciBKUyBnYXJiYWdlIGNvbGxlY3Rpb24gYmVjYXVzZSBKUyBHQyBjYW4K
ICAgICAvLyBnZW5lcmF0ZSBtb3JlIGRlYWQgcmVzb3VyY2VzLgpJbmRleDogU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NsaWVudEV4dGVu
c2lvbi5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJDb3JlU3VwcG9ydC9DbGllbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCwx
MSArODQsMTEgQEAgc3RhdGljIEpTU3RhdGljVmFsdWUgY2xpZW50RXh0ZW5zaW9uU3RhdAogLy8g
RklYTUU6IFJldmlzaXQgdGhlIGNyZWF0aW9uIG9mIHRoaXMgY2xhc3MgYW5kIG1ha2Ugc3VyZSB0
aGlzIGlzIHRoZSBiZXN0IHdheSB0byBhcHByb2FjaCBpdC4KIHZvaWQgYXR0YWNoRXh0ZW5zaW9u
T2JqZWN0VG9GcmFtZShGcmFtZSogZnJhbWUsIFdlYlBhZ2VDbGllbnQqIGNsaWVudCkKIHsKLSAg
ICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLQogICAgIEpT
RE9NV2luZG93KiB3aW5kb3cgPSBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKG1haW5UaHJl
YWROb3JtYWxXb3JsZCgpKS0+d2luZG93KCk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9
IHdpbmRvdy0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CisKICAgICBKU0NvbnRleHRSZWYgc2NyaXB0Q3R4ID0gdG9SZWYoZXhlYyk7CiAKICAgICBKU0Ns
YXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tC
ZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVT
dXBwb3J0L1BhZ2VQb3B1cEJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiwxMyArMTIyLDEyIEBAIHN0YXRpYyBKU1N0YXRpY1Zh
bHVlIHBvcFVwRXh0ZW5zaW9uU3RhdGkKIAogdm9pZCBQYWdlUG9wdXBCbGFja0JlcnJ5OjppbnN0
YWxsRG9tRnVuY3Rpb24oRnJhbWUqIGZyYW1lKQogewotICAgIEpTQzo6SlNMb2NrIGxvY2soSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRv
SlNET01XaW5kb3coZnJhbWUsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBBU1NFUlQo
d2luZG93KTsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVj
KCk7CiAgICAgQVNTRVJUKGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IDo6dG9SZWYoZXhlYyk7CiAgICAgSlNPYmpl
Y3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpOwpJ
bmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRHVtcFJlbmRlclRy
ZWVTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
S2l0U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisr
KyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsOCArMTQxLDggQEAgdm9pZCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnQ6OnNjYWxlUGFnZUJ5KAogCiBKU1ZhbHVlUmVmIER1bXBSZW5kZXJUcmVl
U3VwcG9ydDo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9K
UyhleGVjLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA4OTEpCisr
KyBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
OSBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29t
PgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0
aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAg
ICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBh
Ym91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisK
KyAgICAgICAgKiBld2svZXdrX2ZyYW1lLmNwcDoKKyAgICAgICAgKGV3a19mcmFtZV9zY3JpcHRf
ZXhlY3V0ZSk6CisgICAgICAgICogZXdrL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3
X2pzX29iamVjdF9hZGQpOgorCiAyMDEyLTA2LTE5ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3Zp
bGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIENhbGxpbmcgbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKSBjYXVzZXMgYXNzZXJ0aW9uIGZhaWx1cmU6IG1fdmVyaWZpZXIuaXNTYWZlVG9Vc2Uo
KQpJbmRleDogU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAJKHJldmlzaW9uIDEyMDg4NykK
KysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NTUsOCArNDU1LDggQEAgY2hhciogZXdrX2ZyYW1lX3NjcmlwdF9leGVjdXRlKEV2YXNfT2Jq
ZQogICAgIGlmICghcmVzdWx0IHx8ICghcmVzdWx0LmlzQm9vbGVhbigpICYmICFyZXN1bHQuaXNT
dHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTQzo6
RXhlY1N0YXRlKiBleGVjID0gc21hcnREYXRhLT5mcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVj
dChXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIHJlc3VsdFN0cmluZyA9IFdlYkNvcmU6
OnVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAg
ICByZXR1cm4gc3RyZHVwKHJlc3VsdFN0cmluZy51dGY4KCkuZGF0YSgpKTsKICNlbHNlCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNDUsOCAr
NDA0NSw4IEBAIEVpbmFfQm9vbCBld2tfdmlld19qc19vYmplY3RfYWRkKEV2YXNfT2IKICAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgZmFsc2UpOwogICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIGZhbHNlKTsKIAot
ICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIFdl
YkNvcmU6OkpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KHByaXYtPm1haW5GcmFt
ZSwgV2ViQ29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2sod2luZG93LT5nbG9iYWxFeGVjKCkpOwogICAgIEpTQzo6QmluZGluZ3M6OlJvb3RP
YmplY3QqIHJvb3Q7CiAgICAgcm9vdCA9IHByaXYtPm1haW5GcmFtZS0+c2NyaXB0KCktPmJpbmRp
bmdSb290T2JqZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDg5MSkK
KysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE3IEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVz
IHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAg
ICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlz
IGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHA6
CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdjQ291bnRKYXZhc2NyaXB0T2Jq
ZWN0cyk6CisKIDIwMTItMDYtMTkgIENoYW5nIFdhbiBIb25nICA8am91cm1vb25AY29tcGFueTEw
MC5uZXQ+CiAKICAgICAgICAgUmVmaW5lIHN5bmNMYXllcnNUaW1lb3V0Q2FsbGJhY2sgZm9yIEFj
Y2VsZXJhdGVkIENvbXBvc2l0aW5nLgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCShy
ZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDAsNyArNjAwLDcg
QEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdjQ29sbGVjdAogCiB1bnNpZ25lZCBs
b25nIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2NDb3VudEphdmFzY3JpcHRPYmplY3RzKCkK
IHsKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5v
YmplY3RDb3VudCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA4OTEp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw2OCBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRl
cyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisg
ICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBp
cyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24u
CisKKyAgICAgICAgKiBET00vV2ViRE9NT3BlcmF0aW9ucy5tbToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgICogTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAgICAgICAgKCtbV2ViQ29yZVN0
YXRpc3RpY3MgamF2YVNjcmlwdE9iamVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3Rh
dGlzdGljcyBqYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNv
cmVTdGF0aXN0aWNzIGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnRdKToKKyAgICAgICAg
KCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3RlZEdsb2JhbE9iamVjdHNDb3Vu
dF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkT2Jq
ZWN0VHlwZUNvdW50c10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0
T2JqZWN0VHlwZUNvdW50c10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBzaG91bGRQ
cmludEV4Y2VwdGlvbnNdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3Mgc2V0U2hvdWxk
UHJpbnRFeGNlcHRpb25zOl0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBtZW1vcnlT
dGF0aXN0aWNzXSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRSZWZl
cmVuY2VkT2JqZWN0c0NvdW50XSk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjppbnZva2UpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6Omludm9rZURlZmF1bHQpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmVQcm9wZXJ0eSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aGFzTWV0aG9kKToKKyAgICAgICAg
KFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjplbnVtZXJhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmFkZFZhbHVlVG9BcnJheSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bW92ZUdsb2Jh
bEV4Y2VwdGlvblRvRXhlY1N0YXRlKToKKyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1
Z2luU3RyZWFtLm1tOgorICAgICAgICAoV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OndhbnRzQWxs
U3RyZWFtcyk6CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW06Cisg
ICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzZW5kRXZlbnQ6aXNEcmF3UmVjdDpdKToK
KyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHByaXZhdGVCcm93c2luZ01vZGVEaWRD
aGFuZ2VdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHNldFdpbmRvd0lmTmVj
ZXNzYXJ5XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBjcmVhdGVQbHVnaW5T
Y3JpcHRhYmxlT2JqZWN0XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBnZXRG
b3JtVmFsdWU6XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBldmFsdWF0ZUph
dmFTY3JpcHRQbHVnaW5SZXF1ZXN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZp
ZXcgd2ViRnJhbWU6ZGlkRmluaXNoTG9hZFdpdGhSZWFzb246XSk6CisgICAgICAgICgtW1dlYk5l
dHNjYXBlUGx1Z2luVmlldyBsb2FkUGx1Z2luUmVxdWVzdDpdKToKKyAgICAgICAgKC1bV2ViTmV0
c2NhcGVQbHVnaW5WaWV3IF9wcmludGVkUGx1Z2luQml0bWFwXSk6CisgICAgICAgICogUGx1Z2lu
cy9XZWJQbHVnaW5Db250cm9sbGVyLm1tOgorICAgICAgICAoK1tXZWJQbHVnaW5Db250cm9sbGVy
IHBsdWdJblZpZXdXaXRoQXJndW1lbnRzOmZyb21QbHVnaW5QYWNrYWdlOl0pOgorICAgICAgICAo
LVtXZWJQbHVnaW5Db250cm9sbGVyIHN0b3BPbmVQbHVnaW46XSk6CisgICAgICAgICgtW1dlYlBs
dWdpbkNvbnRyb2xsZXIgZGVzdHJveU9uZVBsdWdpbjpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2lu
Q29udHJvbGxlciBzdGFydEFsbFBsdWdpbnNdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJv
bGxlciBhZGRQbHVnaW46XSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAg
ICAgKC1bV2ViRnJhbWUgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOmZv
cmNlVXNlckdlc3R1cmU6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0RnJvbVN0cmluZzp3aXRoR2xvYmFsT2JqZWN0OmluU2NyaXB0V29ybGQ6XSk6
CisgICAgICAgICogV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tOgorICAgICAgICAo
LVtXZWJTY3JpcHRDYWxsRnJhbWUgc2NvcGVDaGFpbl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRD
YWxsRnJhbWUgZXZhbHVhdGVXZWJTY3JpcHQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3
Lm1tOgorICAgICAgICAoK1tXZWJWaWV3IF9yZXBvcnRFeGNlcHRpb246aW5Db250ZXh0Ol0pOgor
ICAgICAgICAoLVtXZWJWaWV3IGFlRGVzY0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5n
Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IF9jb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZElu
Zm86Zm9yRWxlbWVudDpdKToKKwogMjAxMi0wNi0yMCAgR2FycmV0IEtlbGx5ICA8Z2RrQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBNb3ZpbmcgY29va2llRW5hYmxlZC9zZXRDb29raWVFbmFibGVk
IGZyb20gUGFnZSB0byBTZXR0aW5ncy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJE
T01PcGVyYXRpb25zLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJE
T01PcGVyYXRpb25zLm1tCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9E
T00vV2ViRE9NT3BlcmF0aW9ucy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjcsOCArNjcsOSBAQCAr
IChET01FbGVtZW50ICopX0RPTUVsZW1lbnRGcm9tSlNDb250ZXh0CiAgICAgaWYgKCF2YWx1ZSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOwotICAgIHJldHVybiBraXQodG9FbGVtZW50KHRvSlModG9KUyhjb250ZXh0KSwgdmFsdWUp
KSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKKyAgICByZXR1cm4ga2l0KHRvRWxlbWVudCh0b0pTKGV4ZWMsIHZhbHVl
KSkpOwogfQogCiAtIChOU1N0cmluZyAqKV9tYXJrZXJUZXh0Rm9yTGlzdEl0ZW0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkocmV2aXNpb24gMTIw
ODg3KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNTgsMzEgKzU4LDMxIEBAICsgKE5TQXJyYXkgKilzdGF0aXN0aWNzCiAK
ICsgKHNpemVfdClqYXZhU2NyaXB0T2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNH
bG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKIH0KIAogKyAoc2l6ZV90KWphdmFTY3Jp
cHRHbG9iYWxPYmplY3RzQ291bnQKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+
aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOwogfQogCiArIChzaXplX3QpamF2YVNjcmlwdFByb3Rl
Y3RlZE9iamVjdHNDb3VudAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFw
LnByb3RlY3RlZE9iamVjdENvdW50KCk7CiB9CiAKICsgKHNpemVfdClqYXZhU2NyaXB0UHJvdGVj
dGVkR2xvYmFsT2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkt
PmhlYXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKTsKIH0KIAogKyAoTlNDb3VudGVkU2V0
ICopamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMKIHsKLSAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgCiAgICAgTlNDb3VudGVkU2V0ICpyZXN1
bHQgPSBbTlNDb3VudGVkU2V0IHNldF07CiAKQEAgLTk3LDcgKzk3LDcgQEAgKyAoTlNDb3VudGVk
U2V0ICopamF2YVNjcmlwdFByb3RlY3RlZE9iagogCiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2Ny
aXB0T2JqZWN0VHlwZUNvdW50cwogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICAKICAgICBOU0NvdW50ZWRTZXQgKnJlc3VsdCA9IFtOU0NvdW50ZWRTZXQg
c2V0XTsKIApAQCAtMTY3LDEzICsxNjcsMTMgQEAgKyAoc2l6ZV90KWdseXBoUGFnZUNvdW50CiAK
ICsgKEJPT0wpc2hvdWxkUHJpbnRFeGNlcHRpb25zCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBDb25zb2xlOjpzaG91bGRQcmludEV4Y2Vw
dGlvbnMoKTsKIH0KIAogKyAodm9pZClzZXRTaG91bGRQcmludEV4Y2VwdGlvbnM6KEJPT0wpcHJp
bnQKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgQ29u
c29sZTo6c2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zKHByaW50KTsKIH0KIApAQCAtMjAxLDcgKzIw
MSw3IEBAICsgKE5TRGljdGlvbmFyeSAqKW1lbW9yeVN0YXRpc3RpY3MKIHsKICAgICBXVEY6OkZh
c3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0TWFsbG9j
U3RhdGlzdGljcygpOwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKICAgICBzaXplX3QgaGVhcFNpemUgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCktPmhlYXAuc2l6ZSgpOwogICAgIHNpemVfdCBoZWFwRnJlZSA9IEpTRE9NV2luZG93Ojpj
b21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jYXBhY2l0eSgpIC0gaGVhcFNpemU7CiAgICAgR2xv
YmFsTWVtb3J5U3RhdGlzdGljcyBnbG9iYWxNZW1vcnlTdGF0cyA9IGdsb2JhbE1lbW9yeVN0YXRp
c3RpY3MoKTsKQEAgLTI0NSw3ICsyNDUsNyBAQCArIChzaXplX3QpamF2YVNjcmlwdE5vR0NBbGxv
d2VkT2JqZWN0c0NvCiAKICsgKHNpemVfdClqYXZhU2NyaXB0UmVmZXJlbmNlZE9iamVjdHNDb3Vu
dAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICByZXR1
cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVj
dENvdW50KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2Nh
cGVQbHVnaW5TdHJlYW0ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQkocmV2aXNpb24gMTIwODg3KQorKysgU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzY4LDcgKzM2OCw3IEBAIGJvb2wgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06Ondh
bnRzQWxsU3QKICAgICBOUEVycm9yIGVycm9yOwogICAgIHsKICAgICAgICAgUGx1Z2luU3RvcERl
ZmVycmVyIGRlZmVycmVyKG1fcGx1Z2luVmlldy5nZXQoKSk7Ci0gICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIGVycm9yID0gbV9wbHVnaW5G
dW5jcy0+Z2V0dmFsdWUobV9wbHVnaW4sIE5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1z
LCAmdmFsdWUpOwogICAgIH0KICAgICBpZiAoZXJyb3IgIT0gTlBFUlJfTk9fRVJST1IpCkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmll
dy5tbQkocmV2aXNpb24gMTIwODg3KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJO
ZXRzY2FwZVBsdWdpblZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTY2OSw3ICs2NjksNyBAQCAt
IChCT09MKXNlbmRFdmVudDoodm9pZCopZXZlbnQgaXNEcmF3UmVjCiAgICAgLy8gU2V0IHRoZSBw
bHVnaW5BbGxvd1BvcHVwIGZsYWcuCiAgICAgQVNTRVJUKF9ldmVudEhhbmRsZXIpOwogICAgIHsK
LSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAg
ICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihfZXZlbnRIYW5kbGVyLT5j
dXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlKCkgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0
dXJlIDogUG9zc2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgICAgICBhY2NlcHRlZEV2
ZW50ID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+ZXZlbnQocGx1Z2luLCBl
dmVudCk7CiAgICAgfQpAQCAtODUwLDcgKzg1MCw3IEBAIC0gKHZvaWQpcHJpdmF0ZUJyb3dzaW5n
TW9kZURpZENoYW5nZQogCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAg
ewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
ICAgICBpZiAoW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+c2V0dmFsdWUpCiAg
ICAgICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5zZXR2YWx1ZShw
bHVnaW4sIE5QTlZwcml2YXRlTW9kZUJvb2wsICZ2YWx1ZSk7CiAgICAgfQpAQCAtOTkxLDcgKzk5
MSw3IEBAIC0gKHZvaWQpc2V0V2luZG93SWZOZWNlc3NhcnkKICAgICAgICAgaW5TZXRXaW5kb3cg
PSBZRVM7ICAgICAgICAKICAgICAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgICAgICAgICAgbnBFcnIgPSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1
Z2luRnVuY3NdLT5zZXR3aW5kb3cocGx1Z2luLCAmd2luZG93KTsKICAgICAgICAgfQogICAgICAg
ICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAgLSAo
TlBPYmplY3QgKiljcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZQogICAgIE5QRXJyb3IgZXJyb3I7
CiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBlcnJvciA9IFtf
cGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwgTlBQVnBs
dWdpblNjcmlwdGFibGVOUE9iamVjdCwgJnZhbHVlKTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2Fs
bFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTE0NjMsNyArMTQ2Myw3IEBAIC0gKEJPT0wpZ2V0Rm9ybVZh
bHVlOihOU1N0cmluZyAqKil2YWx1ZQogICAgIE5QRXJyb3IgZXJyb3I7CiAgICAgW3NlbGYgd2ls
bENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBlcnJvciA9IFtfcGx1Z2luUGFja2FnZS5n
ZXQoKSBwbHVnaW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwgTlBQVmZvcm1WYWx1ZSwgJmJ1ZmZl
cik7CiAgICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNTk1LDcg
KzE1OTUsNyBAQCAtICh2b2lkKWV2YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6CiAgICAg
ICAgIGlmIChbSlNQbHVnaW5SZXF1ZXN0IHNlbmROb3RpZmljYXRpb25dKSB7CiAgICAgICAgICAg
ICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CiAgICAgICAgICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJs
bm90aWZ5KHBsdWdpbiwgW1VSTCBfd2ViX1VSTENTdHJpbmddLCBOUFJFU19ET05FLCBbSlNQbHVn
aW5SZXF1ZXN0IG5vdGlmeURhdGFdKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFtzZWxm
IGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNjI3LDcgKzE2MjcsNyBAQCAtICh2b2lkKXdl
YkZyYW1lOihXZWJGcmFtZSAqKXdlYkZyYW1lIGRpCiAgICAgICAgIAogICAgIFtzZWxmIHdpbGxD
YWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdp
bkZ1bmNzXS0+dXJsbm90aWZ5KHBsdWdpbiwgW1tbcGx1Z2luUmVxdWVzdCByZXF1ZXN0XSBVUkxd
IF93ZWJfVVJMQ1N0cmluZ10sIHJlYXNvbiwgW3BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwog
ICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTY3MSw3ICsxNjcx
LDcgQEAgLSAodm9pZClsb2FkUGx1Z2luUmVxdWVzdDooV2ViUGx1Z2luUmVxdQogICAgICAgICAg
ICAgICAgIGlmIChbcGx1Z2luUmVxdWVzdCBzZW5kTm90aWZpY2F0aW9uXSkgewogICAgICAgICAg
ICAgICAgICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBb
W1twbHVnaW5SZXF1ZXN0IHJlcXVlc3RdIFVSTF0gX3dlYl9VUkxDU3RyaW5nXSwgTlBFUlJfR0VO
RVJJQ19FUlJPUiwgW3BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07
CkBAIC0yNDcxLDcgKzI0NzEsNyBAQCAtIChOU0JpdG1hcEltYWdlUmVwICopX3ByaW50ZWRQbHVn
aW5CaXRtCiAgICAgLy8gVGVsbCB0aGUgcGx1Z2luIHRvIHByaW50IGludG8gdGhlIEdXb3JsZAog
ICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgW19wbHVnaW5QYWNr
YWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+cHJpbnQocGx1Z2luLCAmbnBQcmludCk7CiAgICAgfQog
ICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tCShyZXZpc2lvbiAxMjA4ODcp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0JKHdv
cmtpbmcgY29weSkKQEAgLTk2LDEwICs5NiwxMCBAQCArIChOU1ZpZXcgKilwbHVnSW5WaWV3V2l0
aEFyZ3VtZW50czooTlNECiAgICAgTlNWaWV3ICp2aWV3ID0gbmlsOwogCiAgICAgaWYgKFt2aWV3
RmFjdG9yeSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdJblZpZXdXaXRoQXJndW1l
bnRzOildKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgICAgIHZpZXcgPSBbdmlld0ZhY3RvcnkgcGx1Z0luVmlld1dpdGhBcmd1bWVudHM6
YXJndW1lbnRzXTsKICAgICB9IGVsc2UgaWYgKFt2aWV3RmFjdG9yeSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHBsdWdpblZpZXdXaXRoQXJndW1lbnRzOildKSB7Ci0gICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHZpZXcgPSBbdmll
d0ZhY3RvcnkgcGx1Z2luVmlld1dpdGhBcmd1bWVudHM6YXJndW1lbnRzXTsKICAgICB9CiAgICAg
CkBAIC0xNDksMTAgKzE0OSwxMCBAQCAtICh2b2lkKWRlYWxsb2MKIC0gKHZvaWQpc3RvcE9uZVBs
dWdpbjooTlNWaWV3ICopdmlldwogewogICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKHdlYlBsdWdJblN0b3ApXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBbdmlldyB3ZWJQbHVnSW5TdG9wXTsKICAg
ICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luU3Rv
cCldKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CiAgICAgICAgIFt2aWV3IHBsdWdpblN0b3BdOwogICAgIH0KIH0KQEAgLTE2MCwxMCArMTYwLDEw
IEBAIC0gKHZvaWQpc3RvcE9uZVBsdWdpbjooTlNWaWV3ICopdmlldwogLSAodm9pZClkZXN0cm95
T25lUGx1Z2luOihOU1ZpZXcgKil2aWV3CiB7CiAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luRGVzdHJveSldKSB7Ci0gICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIFt2aWV3IHdlYlBsdWdJbkRl
c3Ryb3ldOwogICAgIH0gZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihwbHVnaW5EZXN0cm95KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICAgICAgICAgW3ZpZXcgcGx1Z2luRGVzdHJveV07CiAgICAgfQogfQpA
QCAtMTgwLDEwICsxODAsMTAgQEAgLSAodm9pZClzdGFydEFsbFBsdWdpbnMKICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgaWQgYVZpZXcgPSBbX3ZpZXdzIG9i
amVjdEF0SW5kZXg6aV07CiAgICAgICAgIGlmIChbYVZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcih3ZWJQbHVnSW5TdGFydCldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIFthVmlldyB3ZWJQbHVn
SW5TdGFydF07CiAgICAgICAgIH0gZWxzZSBpZiAoW2FWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IocGx1Z2luU3RhcnQpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBbYVZpZXcgcGx1Z2luU3Rh
cnRdOwogICAgICAgICB9CiAgICAgfQpAQCAtMjUyLDEwICsyNTIsMTAgQEAgLSAodm9pZClhZGRQ
bHVnaW46KE5TVmlldyAqKXZpZXcKIAogICAgICAgICBMT0coUGx1Z2lucywgImluaXRpYWxpemlu
ZyBwbHVnLWluICVAIiwgdmlldyk7CiAgICAgICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHdlYlBsdWdJbkluaXRpYWxpemUpXSkgewotICAgICAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBbdmll
dyB3ZWJQbHVnSW5Jbml0aWFsaXplXTsKICAgICAgICAgfSBlbHNlIGlmIChbdmlldyByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpbkluaXRpYWxpemUpXSkgewotICAgICAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAg
ICBbdmlldyBwbHVnaW5Jbml0aWFsaXplXTsKICAgICAgICAgfQogCkBAIC0yNjUsMTUgKzI2NSwx
NSBAQCAtICh2b2lkKWFkZFBsdWdpbjooTlNWaWV3ICopdmlldwogICAgICAgICBpZiAoX3N0YXJ0
ZWQpIHsKICAgICAgICAgICAgIExPRyhQbHVnaW5zLCAic3RhcnRpbmcgcGx1Zy1pbiAlQCIsIHZp
ZXcpOwogICAgICAgICAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
d2ViUGx1Z0luU3RhcnQpXSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAg
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgICAgICBbdmlldyB3ZWJQ
bHVnSW5TdGFydF07CiAgICAgICAgICAgICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IocGx1Z2luU3RhcnQpXSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgICAg
ICBbdmlldyBwbHVnaW5TdGFydF07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldENvbnRhaW5p
bmdXaW5kb3c6KV0pIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICAgICAgW3ZpZXcgc2V0Q29udGFp
bmluZ1dpbmRvdzpbX2RvY3VtZW50VmlldyB3aW5kb3ddXTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkocmV2aXNpb24gMTIwODg3
KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NjcsOCArODY3LDcgQEAgYm9vbCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YQogICAgIGlmICghZnJhbWUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
Ci0gICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2socGx1Z2luV29ybGQoKS0+Z2xvYmFsRGF0YSgp
KTsKICAgICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCgqcGx1Z2luV29ybGQo
KS0+Z2xvYmFsRGF0YSgpLCBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3Js
ZCgpKSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
CiAKQEAgLTkwNCw3ICs5MDMsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
aW52b2tlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhl
YygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVjdC0+Z2V0KGV4
ZWMsIG1ldGhvZE5hbWUpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKQEAgLTkzNyw3ICs5MzYs
NyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkt
Pmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOyAgICAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEob2JqZWN0LCBjYWxsRGF0YSk7CiAg
ICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTk2OSw3ICs5NjgsNyBAQCBib29s
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y29uc3RyCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9i
amVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBD
b25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RU
eXBlID0gb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDb25zdHJ1Y3REYXRhKG9iamVjdCwgY29u
c3RydWN0RGF0YSk7CkBAIC0xMDAyLDcgKzEwMDEsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6Z2V0UHJvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgp
KS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICBKU1ZhbHVlIHZhbHVl
ID0gb2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAKICAgICBtYXJzaGFsVmFs
dWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7CkBAIC0xMDIzLDcgKzEw
MjIsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0
KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOyAgICAKICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgcHJvcGVy
dHlOYW1lKTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEs
IHJlc3VsdExlbmd0aCk7CkBAIC0xMDQ3LDcgKzEwNDYsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eTo6c2V0UHJvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3Js
ZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKIAogICAgIEpTVmFsdWUg
dmFsdWUgPSBkZW1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKQEAgLTEwNzMsNyArMTA3Miw3IEBAIGJvb2wgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRQcm8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBs
dWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsgICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIAog
ICAgIEpTVmFsdWUgdmFsdWUgPSBkZW1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVl
TGVuZ3RoKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBmYWxzZSk7CkBAIC0xMDk4LDEyICsxMDk3LDEyIEBA
IGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmUKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxP
YmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICBpZiAoIW9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1l
KSkgewogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSk7CiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsgICAgCiAgICAgcmV0
dXJuIHRydWU7CkBAIC0xMTI1LDEyICsxMTI0LDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjpyZW1vdmUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkp
LT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgaWYgKCFv
YmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIG9iamVjdC0+bWV0aG9k
VGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
KTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOyAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTExOTYsNyArMTE5NSw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNN
ZXQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZy
YW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIGZ1bmMgPSBvYmplY3QtPmdldChleGVjLCBtZXRo
b2ROYW1lKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiAhZnVuYy5p
c1VuZGVmaW5lZCgpOwpAQCAtMTIxOCw3ICsxMjE3LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OmVudW1lcgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQo
KSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogIAogICAgIFByb3BlcnR5TmFtZUFycmF5
IHByb3BlcnR5TmFtZXMoZXhlYyk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQcm9w
ZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRFbnVtUHJv
cGVydGllcyk7CkBAIC0xMjYyLDcgKzEyNjEsNyBAQCBzdGF0aWMgYm9vbCBnZXRPYmplY3RJRChO
ZXRzY2FwZVBsdWdpbkluCiAgICAgCiB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
YWRkVmFsdWVUb0FycmF5KE5TTXV0YWJsZUFycmF5ICphcnJheSwgRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBpZiAodmFsdWUuaXNTdHJpbmco
KSkgewogICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50OlN0
cmluZ1ZhbHVlVHlwZV1dOwpAQCAtMTY3Miw3ICsxNjcxLDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6Om1vdmVHbAogICAgICAgICByZXR1cm47CiAKICAgICB7Ci0gICAgICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMs
IHN0cmluZ1RvVVN0cmluZyhnbG9iYWxFeGNlcHRpb25TdHJpbmcoKSkpKTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gMTIwODg3KQor
KysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTA0LDcgKzEwNCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBKU0M6
OkpTR2xvYmFsT2JqZWN0OwogdXNpbmcgSlNDOjpKU0xvY2s7CiB1c2luZyBKU0M6OkpTVmFsdWU7
Ci11c2luZyBKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seTsKIAogLyoKIEhlcmUgaXMgdGhlIGN1
cnJlbnQgYmVoYXZpb3IgbWF0cml4IGZvciBmb3VyIHR5cGVzIG9mIG5hdmlnYXRpb25zOgpAQCAt
NTk3LDggKzU5Niw4IEBAIC0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3IK
ICAgICBpZiAoIXJlc3VsdCB8fCAoIXJlc3VsdC5pc0Jvb2xlYW4oKSAmJiAhcmVzdWx0LmlzU3Ry
aW5nKCkgJiYgIXJlc3VsdC5pc051bWJlcigpKSkKICAgICAgICAgcmV0dXJuIEAiIjsKIAotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5U
aHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKTsKIH0KIApAQCAtMTEyMyw4ICsxMTIyLDggQEAgLSAoTlNTdHJp
bmcgKilfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcgogICAgIGlmICghcmVzdWx0IHx8ICghcmVz
dWx0LmlzQm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVy
KCkpKQogICAgICAgICByZXR1cm4gQCIiOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGFueVdvcmxkR2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVn
RGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJT
Y3JpcHREZWJ1Z0RlbGVnYXRlLm1tCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAg
LTE3NCw5ICsxNzQsOSBAQCAtIChOU0FycmF5ICopc2NvcGVDaGFpbgogICAgIGlmICghX3ByaXZh
dGUtPmRlYnVnZ2VyQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXldOwog
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluID0gX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lLT5zY29wZUNo
YWluKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSk7CiAg
ICAgaWYgKCFzY29wZUNoYWluLT5uZXh0KSAgLy8gZ2xvYmFsIGZyYW1lCiAgICAgICAgIHJldHVy
biBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6X3ByaXZhdGUtPmdsb2JhbE9iamVjdF07CiAKQEAg
LTIyOSwxMyArMjI5LDEzIEBAIC0gKGlkKWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmluZyAqKXNj
cmkKICAgICBpZiAoIV9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJu
IG5pbDsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICAv
LyBJZiB0aGlzIGlzIHRoZSBnbG9iYWwgY2FsbCBmcmFtZSBhbmQgdGhlcmUgaXMgbm8gZHluYW1p
YyBnbG9iYWwgb2JqZWN0LAogICAgIC8vIERhc2hjb2RlIGlzIGF0dGVtcHRpbmcgdG8gZXhlY3V0
ZSBKUyBpbiB0aGUgZXZhbHVhdG9yIHVzaW5nIGEgc3RhbGUKICAgICAvLyBXZWJTY3JpcHRDYWxs
RnJhbWUuIEluc3RlYWQsIHdlIG5lZWQgdG8gc2V0IHRoZSBkeW5hbWljIGdsb2JhbCBvYmplY3QK
ICAgICAvLyBhbmQgZXZhbHVhdGUgdGhlIEpTIGluIHRoZSBnbG9iYWwgb2JqZWN0J3MgZ2xvYmFs
IGNhbGwgZnJhbWUuCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IF9wcml2YXRl
LT5kZWJ1Z2dlci0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFs
T2JqZWN0LT5nbG9iYWxEYXRhKCkpOworCiAgICAgaWYgKHNlbGYgPT0gX3ByaXZhdGUtPmRlYnVn
Z2VyLT5nbG9iYWxDYWxsRnJhbWUoKSAmJiAhZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuZHlu
YW1pY0dsb2JhbE9iamVjdCkgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gX3ByaXZhdGUtPmRlYnVnZ2VyLT5nbG9iYWxPYmplY3QoKTsKIApJbmRleDogU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTIwODg3KQorKysgU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01ODEsOCArNTgxLDgg
QEAgKyAodm9pZClfcmVwb3J0RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4YwogICAgIGlmICghZXhj
ZXB0aW9uIHx8ICFjb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjU3RhdGUgPSB0
b0pTKGNvbnRleHQpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWNTdGF0ZSk7CiAKICAgICAv
LyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgaGFzIGEgRE9NV2luZG93IGdsb2JhbCBvYmplY3QsIG90
aGVyd2lzZSB0aGlzIGNvbnRleHQgZGlkbid0IG9yaWdpbmF0ZSBmcm9tIGEgV2ViVmlldy4KICAg
ICBpZiAoIXRvSlNET01XaW5kb3coZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKQpA
QCAtNDg1MSw3ICs0ODUxLDcgQEAgLSAoTlNBcHBsZUV2ZW50RGVzY3JpcHRvciAqKWFlRGVzY0J5
RXZhbAogICAgIEpTVmFsdWUgcmVzdWx0ID0gY29yZUZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNj
cmlwdChzY3JpcHQsIHRydWUpLmpzVmFsdWUoKTsKICAgICBpZiAoIXJlc3VsdCkgLy8gRklYTUU6
IHBhc3MgZXJyb3JzCiAgICAgICAgIHJldHVybiAwOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29yZUZyYW1lLT5zY3JpcHQo
KS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpKTsK
ICAgICByZXR1cm4gYWVEZXNjRnJvbUpTVmFsdWUoY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFs
T2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpLCByZXN1bHQpOwog
fQogCkBAIC02NTYwLDggKzY1NjAsOCBAQCAtICh2b2lkKV9ub3RpZmljYXRpb25zRGlkQ2xvc2U6
KE5TQXJyYXkgCiAKIC0gKEpTVmFsdWVSZWYpX2NvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVk
SW5mbzooSlNDb250ZXh0UmVmKWNvbnRleHQgZm9yRWxlbWVudDooSlNWYWx1ZVJlZil2YWx1ZQog
ewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgRXhlY1N0YXRl
KiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0No
YW5nZUxvZwkocmV2aXNpb24gMTIwODkxKQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5i
ZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUg
cGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNl
IHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpT
IGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisg
ICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoK
KyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OmFkZFF0U2VuZGVyVG9HbG9iYWxPYmplY3QpOgor
ICAgICAgICAoUVdlYkZyYW1lOjphZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QpOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAg
KER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjppbmplY3RJbnRlcm5hbHNPYmplY3QpOgorICAgICAg
ICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KToKKwogMjAx
Mi0wNi0yMCAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5jb20+CiAKICAg
ICAgICAgW1F0XSBVbnJldmlld2VkIGJ1aWxkIGZpeApJbmRleDogU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYmZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
ZnJhbWUuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
ZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDYsMTMgKzUwNiwxMiBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBxdFNlbmRlckNhbGxiYWNrKEpTQ29uCiAKIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6
YWRkUXRTZW5kZXJUb0dsb2JhbE9iamVjdCgpCiB7Ci0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9K
U0RPTVdpbmRvdyhmcmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogICAgIFFfQVNTRVJU
KHdpbmRvdyk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhl
YygpOwogICAgIFFfQVNTRVJUKGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IDo6dG9SZWYoZXhlYyk7CiAgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHByb3BlcnR5TmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIl9fcXRfc2VuZGVyX18iKSk7CkBAIC02NTcsNyArNjU2LDYgQEAgdm9p
ZCBRV2ViRnJhbWU6OmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iagogICAgICAgICByZXR1cm47CiAj
aWYgVVNFKEpTQykKICAgICBKU0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpWYWx1ZU93bmVyc2hp
cCB2YWx1ZU93bmVyc2hpcCA9IHN0YXRpY19jYXN0PEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6
OlZhbHVlT3duZXJzaGlwPihvd25lcnNoaXApOwotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9N
V2luZG93KGQtPmZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgSlNDOjpCaW5k
aW5nczo6Um9vdE9iamVjdCogcm9vdDsKICAgICBpZiAodmFsdWVPd25lcnNoaXAgPT0gSlNDOjpC
aW5kaW5nczo6UXRJbnN0YW5jZTo6UXRPd25lcnNoaXApCkBAIC02NzUsNiArNjczLDcgQEAgdm9p
ZCBRV2ViRnJhbWU6OmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iagogICAgIH0KIAogICAgIEpTQzo6
RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTQzo6SlNPYmplY3QqIHJ1bnRpbWVPYmplY3QgPQog
ICAgICAgICAgICAgSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShvYmpl
Y3QsIHJvb3QsIHZhbHVlT3duZXJzaGlwKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA4NiwxMyArMTA4NiwxMiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjppbmplY3RJbnRlCiB7CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJG
cmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2sg
bG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyogd2lu
ZG93ID0gdG9KU0RPTVdpbmRvdyhjb3JlRnJhbWUsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsK
ICAgICBRX0FTU0VSVCh3aW5kb3cpOwogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5k
b3ctPmdsb2JhbEV4ZWMoKTsKICAgICBRX0FTU0VSVChleGVjKTsKKyAgICBKU0M6OkpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSB0b1JlZihleGVj
KTsKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdChjb250ZXh0
KTsKQEAgLTExMTMsMTMgKzExMTIsMTIgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
cmVzZXRJbnRlcgogewogICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQ
cml2YXRlOjpjb3JlKGZyYW1lKTsKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2NrIGxvY2so
SlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9
IHRvSlNET01XaW5kb3coY29yZUZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAgICAg
UV9BU1NFUlQod2luZG93KTsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5n
bG9iYWxFeGVjKCk7CiAgICAgUV9BU1NFUlQoZXhlYyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gdG9SZWYoZXhlYyk7CiAg
ICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpyZXNldEludGVybmFsc09iamVjdChjb250ZXh0KTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDg5MSkKKysrIFNvdXJjZS9XZWJLaXQvd2lu
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA2LTIwICBN
YXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2Nr
IHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8g
aW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhl
IGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdp
dGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIFdlYkNvcmVT
dGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0T2Jq
ZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0R2xvYmFs
T2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJv
dGVjdGVkT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2Ny
aXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0
aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyk6CisgICAgICAgICogV2Vi
RnJhbWUuY3BwOgorICAgICAgICAoV2ViRnJhbWU6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHRJblNjcmlwdFdvcmxkKToKKyAgICAgICAgKiBXZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcDoK
KyAgICAgICAgKFdlYkphdmFTY3JpcHRDb2xsZWN0b3I6Om9iamVjdENvdW50KToKKyAgICAgICAg
KiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHRGcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYlZpZXc6OnJlcG9ydEV4Y2VwdGlvbik6Cisg
ICAgICAgIChXZWJWaWV3OjplbGVtZW50RnJvbUpTKToKKwogMjAxMi0wNi0yMCAgR2FycmV0IEtl
bGx5ICA8Z2RrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNb3ZpbmcgY29va2llRW5hYmxlZC9z
ZXRDb29raWVFbmFibGVkIGZyb20gUGFnZSB0byBTZXR0aW5ncy4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDEyMDg4NykKKysrIFNvdXJjZS9X
ZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyAr
OTgsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYg
KCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19P
SzsKIH0KQEAgLTEwOSw3ICsxMDksNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNv
cmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291bnQgPSAo
VUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuZ2xvYmFsT2JqZWN0
Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEyMCw3ICsxMjAsNyBAQCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAg
ICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0K
QEAgLTEzMSw3ICsxMzEsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0
aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkR2xvYmFsT2Jq
ZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEzOSw3ICsxMzksNyBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNv
dW50cyggCiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJUHJvcGVydHlCYWcyKiogdHlwZU5hbWVz
QW5kQ291bnRzKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBqc09iamVjdFR5cGVOYW1lcyhKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsK
ICAgICB0eXBlZGVmIFR5cGVDb3VudFNldDo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7CiAgICAg
SXRlcmF0b3IgZW5kID0ganNPYmplY3RUeXBlTmFtZXMtPmVuZCgpOwpJbmRleDogU291cmNlL1dl
YktpdC93aW4vV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dl
YkZyYW1lLmNwcAkocmV2aXNpb24gMTIwODg3KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDYgQEAgdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIHVzaW5nIEpTQzo6SlNHbG9iYWxPYmplY3Q7CiB1c2luZyBKU0M6OkpTTG9jazsKIHVz
aW5nIEpTQzo6SlNWYWx1ZTsKLXVzaW5nIEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5OwogCiAj
ZGVmaW5lIEZMQVNIX1JFRFJBVyAwCiAKQEAgLTI1MjgsOCArMjUyNyw4IEBAIEhSRVNVTFQgV2Vi
RnJhbWU6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmEKICAgICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0
LmlzQm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkp
CiAgICAgICAgIHJldHVybiBTX09LOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGFueVdvcmxkR2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVySG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
U3RyaW5nIHJlc3VsdFN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpKTsKICAgICAqZXZhbHVhdGlvblJlc3VsdCA9IEJTdHJpbmcocmVzdWx0
U3RyaW5nKS5yZWxlYXNlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkphdmFTY3Jp
cHRDb2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkphdmFT
Y3JpcHRDb2xsZWN0b3IuY3BwCShyZXZpc2lvbiAxMjA4ODcpCisrKyBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzEx
MSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSmF2YVNjcmlwdEMKICAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAgICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMTIwODg3KQorKysgU291cmNlL1dlYktpdC93
aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOTQsOCArMzE5NCw4IEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6c3RyaW4KICAgICBpZiAoIXNjcmlwdEV4ZWN1
dGlvblJlc3VsdCkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKICAgICBlbHNlIGlmIChzY3JpcHRF
eGVjdXRpb25SZXN1bHQuaXNTdHJpbmcoKSkgewotICAgICAgICBKU0xvY2sgbG9jayhKU0M6OlNp
bGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gY29y
ZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+
Z2xvYmFsRXhlYygpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAg
KnJlc3VsdCA9IEJTdHJpbmcodXN0cmluZ1RvU3RyaW5nKHNjcmlwdEV4ZWN1dGlvblJlc3VsdC5n
ZXRTdHJpbmcoZXhlYykpKTsKICAgICB9CiAKQEAgLTU4NTEsOCArNTg1MSw4IEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6cmVwb3IKICAgICBpZiAoIWNvbnRleHQgfHwgIWV4
Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIEpTTG9jayBsb2NrKEpTQzo6
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlY1N0YXRlID0g
dG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjU3RhdGUpOwogCiAgICAg
Ly8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IGhhcyBhIERPTVdpbmRvdyBnbG9iYWwgb2JqZWN0LCBv
dGhlcndpc2UgdGhpcyBjb250ZXh0IGRpZG4ndCBvcmlnaW5hdGUgZnJvbSBhIFdlYlZpZXcuCiAg
ICAgaWYgKCF0b0pTRE9NV2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkK
QEAgLTU4NzgsOCArNTg3OCw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6
ZWxlbWUKICAgICBpZiAoIW5vZGVPYmplY3QpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAg
ICBKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgRWxlbWVudCog
ZWx0ID0gdG9FbGVtZW50KHRvSlModG9KUyhjb250ZXh0KSwgbm9kZU9iamVjdCkpOworICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CisgICAgRWxlbWVudCogZWx0ID0gdG9FbGVtZW50KHRvSlMoZXhlYywgbm9kZU9iamVjdCkp
OwogICAgIGlmICghZWx0KQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148843</attachid>
            <date>2012-06-21 11:05:13 -0700</date>
            <delta_ts>2012-06-21 14:50:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89123-20120621110512.patch</filename>
            <type>text/plain</type>
            <size>203728</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBA
QAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9BUElTaGltcy5oOgorICAg
ICAgICAoQVBJRW50cnlTaGltV2l0aG91dExvY2spOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNo
aW1XaXRob3V0TG9jazo6QVBJRW50cnlTaGltV2l0aG91dExvY2spOiBBZGRlZCBhbiBleHRyYSBw
YXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIHRvIAorICAgICAgICBkZXRlcm1pbmUgd2hldGhl
ciB3ZSBzaG91bGQgcmVmIHRoZSBKU0dsb2JhbERhdGEgb3Igbm90LiBXZSB3YW50IHRvIHJlZiBh
bGwgdGhlIHRpbWUgZXhjZXB0IGZvciBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBjbGFzcyBi
ZWNhdXNlIHRpbWVyRGlkRmlyZSBjb3VsZCBydW4gYWZ0ZXIgc29tZWJvZHkgaGFzIHN0YXJ0ZWQg
dG8gdGVhciBkb3duIHRoYXQgcGFydGljdWxhciAKKyAgICAgICAgSlNHbG9iYWxEYXRhLCBzbyB3
ZSB3b3VsZG4ndCB3YW50IHRvIHJlc3VycmVjdCB0aGUgcmVmIGNvdW50IG9mIHRoYXQgSlNHbG9i
YWxEYXRhIGZyb20gMCBiYWNrIHRvIDEgYWZ0ZXIgCisgICAgICAgIGl0cyBkZXN0cnVjdGlvbiBo
YXMgYmVndW4uIAorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW1XaXRob3V0TG9jazo6fkFQSUVu
dHJ5U2hpbVdpdGhvdXRMb2NrKTogTm93IGRlcmVmcyBpZiBpdCBhbHNvIHJlZmVkLgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OkFQSUVudHJ5U2hpbSk6CisgICAgICAgIChBUElFbnRyeVNo
aW0pOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW06On5BUElFbnRyeVNoaW0pOgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OmluaXQpOiBGYWN0b3JlZCBvdXQgY29tbW9uIGluaXRpYWxp
emF0aW9uIGNvZGUgZm9yIHRoZSB2YXJpb3VzIEFQSUVudHJ5U2hpbSBjb25zdHJ1Y3RvcnMuCisg
ICAgICAgIEFsc28gbW92ZWQgdGhlIHRpbWVvdXRDaGVja2VyIHN0b3AgYW5kIHN0YXJ0IGhlcmUg
YmVjYXVzZSB3ZSBuZWVkIHRvIHN0YXJ0IGFmdGVyIHdlJ3ZlIGdyYWJiZWQgdGhlIEFQSSBsb2Nr
CisgICAgICAgIGFuZCBiZWZvcmUgd2UndmUgcmVsZWFzZWQgaXQsIHdoaWNoIGNhbiBvbmx5IGRv
bmUgaW4gQVBJRW50cnlTaGltLgorICAgICAgICAoSlNDOjpBUElDYWxsYmFja1NoaW06On5BUElD
YWxsYmFja1NoaW0pOiBXZSBubyBsb25nZXIgbmVlZCB0byBzeW5jaHJvbml6ZSBoZXJlLgorICAg
ICAgICAqIEFQSS9KU0NvbnRleHRSZWYuY3BwOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0Q3Jl
YXRlKToKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXApOgorICAgICAgICAo
SlNHbG9iYWxDb250ZXh0UmVsZWFzZSk6CisgICAgICAgIChKU0NvbnRleHRDcmVhdGVCYWNrdHJh
Y2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRTcGFjZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6cHJvdGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucHJv
dGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFw
OjpzZXRBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWN0aXZpdHlDYWxs
YmFjayk6CisgICAgICAgIChKU0M6OkhlYXA6OnN3ZWVwZXIpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOiBDaGFuZ2VkIG1fYWN0aXZpdHlDYWxsYmFjayBhbmQgbV9zd2VlcGVyIHRvIGJlIHJhdyBw
b2ludGVycyByYXRoZXIgdGhhbiBPd25QdHJzIGJlY2F1c2UgdGhleSAKKyAgICAgICAgYXJlIG5v
dyByZXNwb25zaWJsZSBmb3IgdGhlaXIgb3duIGxpZmV0aW1lLiBBbHNvIGNoYW5nZWQgdGhlIG9y
ZGVyIG9mIGRlY2xhcmF0aW9uIG9mIHRoZSBHQ0FjdGl2aXR5Q2FsbGJhY2sKKyAgICAgICAgYW5k
IHRoZSBJbmNyZW1lbnRhbFN3ZWVwZXIgdG8gbWFrZSBzdXJlIHRoZXkncmUgdGhlIGxhc3QgdGhp
bmdzIHRoYXQgZ2V0IGluaXRpYWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gdG8gCisgICAgICAg
IHByZXZlbnQgYW55IGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBKU0ds
b2JhbERhdGEvSGVhcCB0aGV5IG1pZ2h0IGNhcmUgYWJvdXQuCisgICAgICAgIChIZWFwKToKKyAg
ICAgICAgKiBoZWFwL0hlYXBUaW1lci5jcHA6IFJlZmFjdG9yZWQgdG8gYWxsb3cgZm9yIHRocmVh
ZC1zYWZlIG9wZXJhdGlvbiBhbmQgc2h1dGRvd24uCisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6
fkhlYXBUaW1lcik6CisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6aW52YWxpZGF0ZSk6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OmRpZFN0YXJ0Vk1TaHV0ZG93bik6
IENhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIH5KU0dsb2JhbERhdGEuIElmIHdlJ3JlIG9uIHRo
ZSBzYW1lIHRocmVhZCAKKyAgICAgICAgdGhhdCB0aGUgSGVhcFRpbWVyIGlzIHJ1bm5pbmcgb24s
IHdlIGtpbGwgdGhlIEhlYXBUaW1lciBvdXJzZWx2ZXMuIElmIG5vdCwgdGhlbiB3ZSBzZXQgc29t
ZSBzdGF0ZSBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBhbmQgc2NoZWR1bGUgaXQgdG8gZmly
ZSBpbW1lZGlhdGVseSBzbyB0aGF0IGl0IGNhbiBub3RpY2UgYW5kIGtpbGwgaXRzZWxmLgorICAg
ICAgICAoSlNDOjpIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSk6IFdlIGdyYWIgb3VyIG11dGV4IGFu
ZCBjaGVjayBvdXIgSlNHbG9iYWxEYXRhIHBvaW50ZXIuIElmIGl0IGhhcyBiZWVuIHplcm8tZWQK
KyAgICAgICAgb3V0LCB0aGVuIHdlIGtub3cgdGhlIFZNIGhhcyBzdGFydGVkIHRvIHNodXRkb3du
IGFuZCB3ZSBzaG91bGQga2lsbCBvdXJzZWx2ZXMuIE90aGVyd2lzZSwgZ3JhYiB0aGUgQVBJRW50
cnlTaGltLAorICAgICAgICBidXQgd2l0aG91dCByZWYtaW5nIHRoZSBKU0dsb2JhbERhdGEgKHdl
IGRvbid0IHdhbnQgdG8gYnJpbmcgdGhlIEpTR2xvYmFsRGF0YSdzIHJlZi1jb3VudCBmcm9tIDAg
dG8gMSkgaW4gY2FzZSAKKyAgICAgICAgd2Ugd2VyZSBpbnRlcnJ1cHRlZCBiZXR3ZWVuIHJlbGVh
c2luZyBvdXIgbXV0ZXggYW5kIHRyeWluZyB0byBncmFiIHRoZSBBUElMb2NrLgorICAgICAgICAq
IGhlYXAvSGVhcFRpbWVyLmg6IAorICAgICAgICAoSGVhcFRpbWVyKToKKyAgICAgICAgKiBoZWFw
L0luY3JlbWVudGFsU3dlZXBlci5jcHA6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBl
cjo6ZG9Xb3JrKTogV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIEFQSSBzaGltIGhlcmUgc2luY2UgSGVh
cFRpbWVyOjp0aW1lckRpZEZpcmUgaGFuZGxlcyAKKyAgICAgICAgYWxsIG9mIHRoYXQgZm9yIHVz
LiAKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUpOgorICAgICAgICAq
IGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAgIChJbmNyZW1lbnRhbFN3ZWVwZXIp
OgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKiBoZWFwL1dlYWtCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OldlYWtCbG9jazo6cmVhcCk6CisgICAgICAgICoganNjLmNw
cDoKKyAgICAgICAgKGZ1bmN0aW9uR0MpOgorICAgICAgICAoZnVuY3Rpb25SZWxlYXNlRXhlY3V0
YWJsZU1lbW9yeSk6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBs
ZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpjaGVja1N5bnRheCk6CisgICAgICAgIChKU0M6OmV2
YWx1YXRlKToKKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oOgorICAgICAg
ICAoRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayk6CisgICAgICAgIChKU0M6OkRlZmF1bHRHQ0Fj
dGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6IFNpZ25hbHMgdG8gdGhlIHR3byBI
ZWFwVGltZXJzIChHQ0FjdGl2aXR5Q2FsbGJhY2sgYW5kIEluY3JlbWVudGFsU3dlZXBlcikKKyAg
ICAgICAgdGhhdCB0aGUgVk0gaGFzIHN0YXJ0ZWQgc2h1dHRpbmcgZG93bi4gSXQgdGhlbiB3YWl0
cyB1bnRpbCB0aGUgSGVhcFRpbWVyIGlzIGRvbmUgd2l0aCB3aGF0ZXZlciBhY3Rpdml0eSAKKyAg
ICAgICAgaXQgbmVlZHMgdG8gZG8gYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCBhbnkgZnVydGhlciBk
ZXN0cnVjdGlvbi4gQWxzbyBhc3NlcnRzIHRoYXQgd2UgZG8gbm90IGN1cnJlbnRseSBob2xkIHRo
ZSAKKyAgICAgICAgQVBJTG9jayBiZWNhdXNlIHRoaXMgY291bGQgcG90ZW50aWFsbHkgY2F1c2Ug
ZGVhZGxvY2sgd2hlbiB3ZSB0cnkgdG8gc2lnbmFsIHRvIHRoZSBIZWFwVGltZXJzIHVzaW5nIHRo
ZWlyIG11dGV4ZXMuCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2Up
OiBQcm90ZWN0IHRoZSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNoYXJlZCBpbnN0YW5jZSB3aXRo
IHRoZSBHbG9iYWxKU0xvY2suCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5z
dGFuY2VJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDogQ2hhbmdl
IHRvIGJlIFRocmVhZFNhZmVSZWZDb3VudGVkIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3Jy
eSBhYm91dCByZWZpbmcgYW5kIAorICAgICAgICBkZS1yZWZpbmcgSlNHbG9iYWxEYXRhcyBvbiBz
ZXBhcmF0ZSB0aHJlYWRzIHNpbmNlIHdlIGRvbid0IGRvIGl0IHRoYXQgb2Z0ZW4gYW55d2F5cy4K
KyAgICAgICAgKEpTR2xvYmFsRGF0YSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6YXBp
TG9jayk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogcnVudGltZS9KU0xvY2suY3BwOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEpTQzo6R2xvYmFsSlNMb2NrOjpHbG9iYWxKU0xvY2spOiBGb3Ig
YWNjZXNzaW5nIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisgICAgICAgIChKU0M6Okdsb2JhbEpTTG9j
azo6fkdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6SlNMb2NrSG9s
ZGVyKTogTXV0ZXhMb2NrZXIgZm9yIEpTTG9jay4gQWxzbyByZWZzIHRoZSBKU0dsb2JhbERhdGEg
dG8ga2VlcCBpdCBhbGl2ZSBzbyB0aGF0IAorICAgICAgICBpdCBjYW4gc3VjY2Vzc2Z1bGx5IHVu
bG9jayBpdCBsYXRlciB3aXRob3V0IGl0IGRpc2FwcGVhcmluZyBmcm9tIHVuZGVybmVhdGggaXQu
CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6fkpTTG9ja0hvbGRlcik6CisgICAgICAgIChK
U0M6OkpTTG9jazo6SlNMb2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp+SlNMb2NrKToKKyAg
ICAgICAgKEpTQzo6SlNMb2NrOjpsb2NrKTogVXNlcyB0aGUgc3BpbiBsb2NrIGZvciBndWFyZGlu
ZyB0aGUgbG9jayBjb3VudCBhbmQgb3duZXIgdGhyZWFkIGZpZWxkcy4gVXNlcyB0aGUgbXV0ZXgg
Zm9yIAorICAgICAgICBhY3R1YWxseSB3YWl0aW5nIGZvciBsb25nIHBlcmlvZHMuIAorICAgICAg
ICAoSlNDOjpKU0xvY2s6OnVubG9jayk6CisgICAgICAgIChKU0M6OkpTTG9jazo6Y3VycmVudFRo
cmVhZElzSG9sZGluZ0xvY2spOiAKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpkcm9wQWxsTG9ja3Mp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseSk6Cisg
ICAgICAgIChKU0M6OkpTTG9jazo6Z3JhYkFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2Nrcyk6CisgICAgICAgIChKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKToKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0xvY2tI
b2xkZXIpOgorICAgICAgICAoSlNMb2NrKToKKyAgICAgICAgKERyb3BBbGxMb2Nrcyk6CisgICAg
ICAgICogcnVudGltZS9XZWFrR0NNYXAuaDoKKyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpzZXQp
OgorICAgICAgICAqIHRlc3RSZWdFeHAuY3BwOgorICAgICAgICAocmVhbE1haW4pOgorCiAyMDEy
LTA2LTIwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVk
dWNlZCAoYnV0IGRpZCBub3QgZWxpbWluYXRlKSB1c2Ugb2YgImJlcnplcmtlciBHQyIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0MKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IGV4ZWMtPmhlYXAoKS0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMzA3LDcgKzMwNyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQygKICNpZm5kZWYgTkRFQlVHCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLnJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KQEAgLTY2Nyw5ICs2NjcsOSBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50
cyhpbnQgYXJnYywgY2hhCiAKIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCisgICAgCiAgICAgUmVm
UHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKFRocmVh
ZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2Jh
bERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBwYXJzZUFyZ3Vt
ZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0UmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJl
Z0V4cC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
UmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDkgKzQ5NSw4IEBAIHN0YXRpYyB2b2lk
IHBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGEKIAogaW50IHJlYWxNYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwot
CiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3Jl
YXRlKFRocmVhZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGdsb2JhbERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBw
YXJzZUFyZ3VtZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJU2hpbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0FQSVNoaW1zLmgJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvQVBJU2hpbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMzEgKzI4LDQwIEBACiAK
ICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIK
KyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNp
bmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
QVBJRW50cnlTaGltV2l0aG91dExvY2sgeworcHVibGljOgorICAgIGVudW0gUmVmR2xvYmFsRGF0
YVRhZyB7IERvbnRSZWZHbG9iYWxEYXRhID0gMCwgUmVmR2xvYmFsRGF0YSB9OworCiBwcm90ZWN0
ZWQ6Ci0gICAgQVBJRW50cnlTaGltV2l0aG91dExvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBib29sIHJlZ2lzdGVyVGhyZWFkKQotICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRh
KQorICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
Ym9vbCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0YVRhZyBzaG91bGRSZWZHbG9iYWxEYXRh
KQorICAgICAgICA6IG1fc2hvdWxkUmVmR2xvYmFsRGF0YShzaG91bGRSZWZHbG9iYWxEYXRhKQor
ICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICAgICAsIG1fZW50cnlJZGVu
dGlmaWVyVGFibGUod3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZ2xv
YmFsRGF0YS0+aWRlbnRpZmllclRhYmxlKSkKICAgICB7CisgICAgICAgIGlmIChzaG91bGRSZWZH
bG9iYWxEYXRhKQorICAgICAgICAgICAgbV9nbG9iYWxEYXRhLT5yZWYoKTsKICAgICAgICAgVU5V
U0VEX1BBUkFNKHJlZ2lzdGVyVGhyZWFkKTsKICAgICAgICAgaWYgKHJlZ2lzdGVyVGhyZWFkKQog
ICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRU
aHJlYWQoKTsKICAgICAgICAgbV9nbG9iYWxEYXRhLT5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+
c3luY2hyb25pemUoKTsKLSAgICAgICAgbV9nbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5zdGFy
dCgpOworICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuc3dlZXBlcigpLT5zeW5jaHJvbml6ZSgp
OwogICAgIH0KIAogICAgIH5BUElFbnRyeVNoaW1XaXRob3V0TG9jaygpCiAgICAgewotICAgICAg
ICBtX2dsb2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKICAgICAgICAgd3RmVGhyZWFk
RGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUobV9lbnRyeUlkZW50aWZpZXJUYWJsZSk7
CisgICAgICAgIGlmIChtX3Nob3VsZFJlZkdsb2JhbERhdGEpCisgICAgICAgICAgICBtX2dsb2Jh
bERhdGEtPmRlcmVmKCk7CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgorICAgIFJlZkds
b2JhbERhdGFUYWcgbV9zaG91bGRSZWZHbG9iYWxEYXRhOwogICAgIEpTR2xvYmFsRGF0YSogbV9n
bG9iYWxEYXRhOwogICAgIElkZW50aWZpZXJUYWJsZSogbV9lbnRyeUlkZW50aWZpZXJUYWJsZTsK
IH07CkBAIC02MSwyMCArNzAsMzggQEAgY2xhc3MgQVBJRW50cnlTaGltIDogcHVibGljIEFQSUVu
dHJ5U2hpbQogcHVibGljOgogICAgIC8vIE5vcm1hbCBBUEkgZW50cnkKICAgICBBUElFbnRyeVNo
aW0oRXhlY1N0YXRlKiBleGVjLCBib29sIHJlZ2lzdGVyVGhyZWFkID0gdHJ1ZSkKLSAgICAgICAg
OiBBUElFbnRyeVNoaW1XaXRob3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRo
cmVhZCkKLSAgICAgICAgLCBtX2xvY2soZXhlYykKKyAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRo
b3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0
YSkKKyAgICB7CisgICAgICAgIGluaXQoKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG5lY2Vzc2FyeSBmb3IgSGVhcFRpbWVyIHRvIHByZXZlbnQgaXQgZnJvbSBhY2NpZGVu
dGFsbHkgcmVzdXJyZWN0aW5nIAorICAgIC8vIHRoZSByZWYgY291bnQgb2YgYSAiZGVhZCIgSlNH
bG9iYWxEYXRhLgorICAgIEFQSUVudHJ5U2hpbShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFJl
Zkdsb2JhbERhdGFUYWcgcmVmR2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUp
CisgICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0YSwgcmVnaXN0ZXJU
aHJlYWQsIHJlZkdsb2JhbERhdGEpCiAgICAgeworICAgICAgICBpbml0KCk7CiAgICAgfQogCiAg
ICAgLy8gSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvciBvbmx5IGhhcyBhIGdsb2JhbERhdGEuCiAg
ICAgQVBJRW50cnlTaGltKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRo
cmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0
YSwgcmVnaXN0ZXJUaHJlYWQpCi0gICAgICAgICwgbV9sb2NrKGdsb2JhbERhdGEtPmlzU2hhcmVk
SW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5KQorICAgICAg
ICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKGdsb2JhbERhdGEsIHJlZ2lzdGVyVGhyZWFkLCBS
ZWZHbG9iYWxEYXRhKQogICAgIHsKKyAgICAgICAgaW5pdCgpOworICAgIH0KKworICAgIH5BUElF
bnRyeVNoaW0oKQorICAgIHsKKyAgICAgICAgbV9nbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5z
dG9wKCk7CisgICAgICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLnVubG9jaygpOwogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBKU0xvY2sgbV9sb2NrOworICAgIHZvaWQgaW5pdCgpCisgICAgewor
ICAgICAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5sb2NrKCk7CisgICAgICAgIG1fZ2xvYmFs
RGF0YS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsKKyAgICB9CiB9OwogCiBjbGFzcyBBUElDYWxs
YmFja1NoaW0gewpAQCAtODgsNyArMTE1LDYgQEAgcHVibGljOgogCiAgICAgfkFQSUNhbGxiYWNr
U2hpbSgpCiAgICAgewotICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuYWN0aXZpdHlDYWxsYmFj
aygpLT5zeW5jaHJvbml6ZSgpOwogICAgICAgICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElk
ZW50aWZpZXJUYWJsZShtX2dsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZSk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDYgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xv
YmFsQ29udGV4dENyZWF0ZQogICAgIC8vIElmIHRoZSBhcHBsaWNhdGlvbiB3YXMgbGlua2VkIGJl
Zm9yZSBKU0dsb2JhbENvbnRleHRDcmVhdGUgd2FzIGNoYW5nZWQgdG8gdXNlIGEgdW5pcXVlIEpT
R2xvYmFsRGF0YSwKICAgICAvLyB3ZSB1c2UgYSBzaGFyZWQgb25lIGZvciBiYWNrd2FyZHMgY29t
cGF0aWJpbGl0eS4KICAgICBpZiAoTlNWZXJzaW9uT2ZMaW5rVGltZUxpYnJhcnkoIkphdmFTY3Jp
cHRDb3JlIikgPD0gd2Via2l0Rmlyc3RWZXJzaW9uV2l0aENvbmN1cnJlbnRHbG9iYWxDb250ZXh0
cykgewotICAgICAgICBKU0xvY2sgbG9jayhMb2NrRm9yUmVhbCk7CiAgICAgICAgIHJldHVybiBK
U0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKHRvUmVmKCZKU0dsb2JhbERhdGE6OnNoYXJlZElu
c3RhbmNlKCkpLCBnbG9iYWxPYmplY3RDbGFzcyk7CiAgICAgfQogI2VuZGlmIC8vIE9TKERBUldJ
TikKQEAgLTkwLDExICs4OSw5IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRD
cmVhdGUKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKLSAgICBKU0xvY2sgbG9jayhM
b2NrRm9yUmVhbCk7CiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IGdyb3Vw
ID8gUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+KHRvSlMoZ3JvdXApKSA6IEpTR2xvYmFsRGF0YTo6
Y3JlYXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlwZVNtYWxsKTsKIAogICAgIEFQSUVudHJ5
U2hpbSBlbnRyeVNoaW0oZ2xvYmFsRGF0YS5nZXQoKSwgZmFsc2UpOwotCiAgICAgZ2xvYmFsRGF0
YS0+bWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsKIAogICAgIGlmICghZ2xvYmFsT2Jq
ZWN0Q2xhc3MpIHsKQEAgLTEyNCwxOCArMTIxLDE5IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0ds
b2JhbENvbnRleHRSZXRhaW4KIAogdm9pZCBKU0dsb2JhbENvbnRleHRSZWxlYXNlKEpTR2xvYmFs
Q29udGV4dFJlZiBjdHgpCiB7CisgICAgSWRlbnRpZmllclRhYmxlKiBzYXZlZElkZW50aWZpZXJU
YWJsZTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrIGxvY2so
ZXhlYyk7CisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAotICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBJZGVudGlm
aWVyVGFibGUqIHNhdmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJl
bnRJZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUpOworICAgICAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIHNh
dmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVy
VGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUpOwogCi0gICAgYm9vbCBwcm90ZWN0Q291
bnRJc1plcm8gPSBIZWFwOjpoZWFwKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPnVucHJv
dGVjdChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwotICAgIGlmIChwcm90ZWN0Q291bnRJ
c1plcm8pIHsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+c3lu
Y2hyb25pemUoKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVj
dEdyYXBoKCk7CisgICAgICAgIGJvb2wgcHJvdGVjdENvdW50SXNaZXJvID0gSGVhcDo6aGVhcChl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT51bnByb3RlY3QoZXhlYy0+ZHluYW1pY0dsb2Jh
bE9iamVjdCgpKTsKKyAgICAgICAgaWYgKHByb3RlY3RDb3VudElzWmVybykKKyAgICAgICAgICAg
IGdsb2JhbERhdGEuaGVhcC5yZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOworICAgICAgICBn
bG9iYWxEYXRhLmRlcmVmKCk7CiAgICAgfQotICAgIGdsb2JhbERhdGEuZGVyZWYoKTsKIAogICAg
IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKHNhdmVkSWRlbnRpZmll
clRhYmxlKTsKIH0KQEAgLTE2Niw3ICsxNjQsNyBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNDb250
ZXh0R2V0R2xvYmFsQ29uCiBKU1N0cmluZ1JlZiBKU0NvbnRleHRDcmVhdGVCYWNrdHJhY2UoSlND
b250ZXh0UmVmIGN0eCwgdW5zaWduZWQgbWF4U3RhY2tTaXplKQogewogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2sgbG9jayhleGVjKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKIAogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICBVU3RyaW5nQnVp
bGRlciBidWlsZGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3Bh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNw
YWNlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIENoZWNrZWRC
b29sZWFuIENvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZVMKICAgICBpZiAoaXNPdmVyc2l6ZShieXRl
cykpCiAgICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZU92ZXJzaXplKGJ5dGVzLCBvdXRQdHIpOwog
ICAgIAorICAgIEFTU0VSVChtX2hlYXAtPmdsb2JhbERhdGEoKS0+YXBpTG9jaygpLmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9hbGxvY2F0
b3IuY3VycmVudENhcGFjaXR5KCkpOwogCiAgICAgYWxsb2NhdGVCbG9jaygpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMTUgKzE2
MCw5IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHByb3BvcnRpb25hbEhlYXBTaXoKICAgICByZXR1
cm4gMS4yNSAqIGhlYXBTaXplOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFNoYXJl
ZEluc3RhbmNlVGhyZWFkU3RhdGUoKQorc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRTaGFyZWRJ
bnN0YW5jZVRocmVhZFN0YXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBpZiAo
IUpTTG9jazo6bG9ja0NvdW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
SlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZ2xvYmFsRGF0YS0+YXBpTG9jaygp
LmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBp
c1ZhbGlkVGhyZWFkU3RhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQpAQCAtMTc2LDcgKzE3
MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkVGhyZWFkU3RhdGUoSlMKICAgICBpZiAo
Z2xvYmFsRGF0YS0+aWRlbnRpZmllclRhYmxlICE9IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRl
bnRpZmllclRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChnbG9iYWxE
YXRhLT5pc1NoYXJlZEluc3RhbmNlKCkgJiYgIWlzVmFsaWRTaGFyZWRJbnN0YW5jZVRocmVhZFN0
YXRlKCkpCisgICAgaWYgKGdsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSAmJiAhaXNWYWxp
ZFNoYXJlZEluc3RhbmNlVGhyZWFkU3RhdGUoZ2xvYmFsRGF0YSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMzI3LDcgKzMyMSw3IEBAIHZvaWQgSGVhcDo6
ZGlkQWJhbmRvbihzaXplX3QgYnl0ZXMpCiB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQog
ewogICAgIEFTU0VSVChrKTsKLSAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xk
aW5nTG9jaygpIHx8ICFtX2dsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSk7CisgICAgQVNT
RVJUKG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkp
OwogCiAgICAgaWYgKCFrLmlzQ2VsbCgpKQogICAgICAgICByZXR1cm47CkBAIC0zMzgsNyArMzMy
LDcgQEAgdm9pZCBIZWFwOjpwcm90ZWN0KEpTVmFsdWUgaykKIGJvb2wgSGVhcDo6dW5wcm90ZWN0
KEpTVmFsdWUgaykKIHsKICAgICBBU1NFUlQoayk7Ci0gICAgQVNTRVJUKEpTTG9jazo6Y3VycmVu
dFRocmVhZElzSG9sZGluZ0xvY2soKSB8fCAhbV9nbG9iYWxEYXRhLT5pc1NoYXJlZEluc3RhbmNl
KCkpOworICAgIEFTU0VSVChtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nTG9jaygpKTsKIAogICAgIGlmICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNjkyLDYgKzY4Niw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBz
d2VlcFRvZ2cKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xs
ZWN0aW9uIik7CiAgICAgCiAgICAgR0NQSEFTRShDb2xsZWN0KTsKKyAgICBBU1NFUlQoZ2xvYmFs
RGF0YSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgQVNT
RVJUKGdsb2JhbERhdGEoKS0+aWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJy
ZW50SWRlbnRpZmllclRhYmxlKCkpOwogICAgIEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAg
ICAgSkFWQVNDUklQVENPUkVfR0NfQkVHSU4oKTsKQEAgLTc3NywxOSArNzcyLDE5IEBAIHZvaWQg
SGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICBKQVZBU0NSSVBUQ09SRV9H
Q19FTkQoKTsKIH0KIAotdm9pZCBIZWFwOjpzZXRBY3Rpdml0eUNhbGxiYWNrKFBhc3NPd25QdHI8
R0NBY3Rpdml0eUNhbGxiYWNrPiBhY3Rpdml0eUNhbGxiYWNrKQordm9pZCBIZWFwOjpzZXRBY3Rp
dml0eUNhbGxiYWNrKEdDQWN0aXZpdHlDYWxsYmFjayogYWN0aXZpdHlDYWxsYmFjaykKIHsKICAg
ICBtX2FjdGl2aXR5Q2FsbGJhY2sgPSBhY3Rpdml0eUNhbGxiYWNrOwogfQogCiBHQ0FjdGl2aXR5
Q2FsbGJhY2sqIEhlYXA6OmFjdGl2aXR5Q2FsbGJhY2soKQogewotICAgIHJldHVybiBtX2FjdGl2
aXR5Q2FsbGJhY2suZ2V0KCk7CisgICAgcmV0dXJuIG1fYWN0aXZpdHlDYWxsYmFjazsKIH0KIAog
SW5jcmVtZW50YWxTd2VlcGVyKiBIZWFwOjpzd2VlcGVyKCkKIHsKLSAgICByZXR1cm4gbV9zd2Vl
cGVyLmdldCgpOworICAgIHJldHVybiBtX3N3ZWVwZXI7CiB9CiAKIHZvaWQgSGVhcDo6c2V0R2Fy
YmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoYm9vbCBlbmFibGUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDEwICs5OSwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1
cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0
aXZpdHlDYWxsYmFjayogYWN0aXZpdHlDYWxsYmFjaygpOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHNldEFjdGl2aXR5Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2aXR5Q2FsbGJh
Y2s+KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRBY3Rpdml0eUNhbGxiYWNr
KEdDQWN0aXZpdHlDYWxsYmFjayopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNl
dEdhcmJhZ2VDb2xsZWN0aW9uVGltZXJFbmFibGVkKGJvb2wpOwogCi0gICAgICAgIEluY3JlbWVu
dGFsU3dlZXBlciogc3dlZXBlcigpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBJbmNyZW1l
bnRhbFN3ZWVwZXIqIHN3ZWVwZXIoKTsKIAogICAgICAgICAvLyB0cnVlIGlmIGFuIGFsbG9jYXRp
b24gb3IgY29sbGVjdGlvbiBpcyBpbiBwcm9ncmVzcwogICAgICAgICBpbmxpbmUgYm9vbCBpc0J1
c3koKTsKQEAgLTIzNywxMCArMjM3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBkb3Vi
bGUgbV9sYXN0R0NMZW5ndGg7CiAgICAgICAgIGRvdWJsZSBtX2xhc3RDb2RlRGlzY2FyZFRpbWU7
CiAKLSAgICAgICAgT3duUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gbV9hY3Rpdml0eUNhbGxiYWNr
OwotICAgICAgICBPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPiBtX3N3ZWVwZXI7Ci0gICAgICAg
IAogICAgICAgICBEb3VibHlMaW5rZWRMaXN0PEV4ZWN1dGFibGVCYXNlPiBtX2NvbXBpbGVkQ29k
ZTsKKyAgICAgICAgCisgICAgICAgIEdDQWN0aXZpdHlDYWxsYmFjayogbV9hY3Rpdml0eUNhbGxi
YWNrOworICAgICAgICBJbmNyZW1lbnRhbFN3ZWVwZXIqIG1fc3dlZXBlcjsKICAgICB9OwogCiAg
ICAgaW5saW5lIGJvb2wgSGVhcDo6c2hvdWxkQ29sbGVjdCgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSGVhcFRpbWVyLmgiCiAKKyNp
bmNsdWRlICJBUElTaGltcy5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC0yMSw3ICsyMiw4IEBAIEhlYXBUaW1lcjo6SGVhcFRpbWVyKEpTR2xvYmFs
RGF0YSogZ2xvYmEKIAogSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKIHsKLSAgICBpbnZhbGlkYXRl
KCk7CisgICAgQ0ZSdW5Mb29wUmVtb3ZlVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdl
dCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0
ZShtX3RpbWVyLmdldCgpKTsKIH0KIAogdm9pZCBIZWFwVGltZXI6OnN5bmNocm9uaXplKCkKQEAg
LTM1LDE0ICszNywzNyBAQCB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25pemUoKQogCiB2b2lkIEhl
YXBUaW1lcjo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgQ0ZSdW5Mb29wUmVtb3ZlVGltZXIobV9ydW5M
b29wLmdldCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwotICAgIENG
UnVuTG9vcFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKKyAgICBtX2dsb2JhbERhdGEg
PSAwOworICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1fdGltZXIuZ2V0KCksIENG
QWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc19kZWNhZGUpOworfQorCit2b2lkIEhlYXBUaW1l
cjo6ZGlkU3RhcnRWTVNodXRkb3duKCkKK3sKKyAgICBpZiAoQ0ZSdW5Mb29wR2V0Q3VycmVudCgp
ID09IG1fcnVuTG9vcC5nZXQoKSkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIGRl
bGV0ZSB0aGlzOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVCghbV9nbG9iYWxE
YXRhLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CisgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fc2h1dGRvd25NdXRleCk7CisgICAgaW52YWxpZGF0ZSgpOwogfQogCiB2
b2lkIEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkKiBpbmZv
KQogewogICAgIEhlYXBUaW1lciogYWdlbnQgPSBzdGF0aWNfY2FzdDxIZWFwVGltZXIqPihpbmZv
KTsKLSAgICBhZ2VudC0+ZG9Xb3JrKCk7CisgICAgYWdlbnQtPm1fc2h1dGRvd25NdXRleC5sb2Nr
KCk7CisgICAgaWYgKCFhZ2VudC0+bV9nbG9iYWxEYXRhKSB7CisgICAgICAgIGFnZW50LT5tX3No
dXRkb3duTXV0ZXgudW5sb2NrKCk7CisgICAgICAgIGRlbGV0ZSBhZ2VudDsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICB7CisgICAgICAgIC8vIFdlIGRvbid0IHJlZiBoZXJlIHRvIHByZXZl
bnQgdXMgZnJvbSByZXN1cnJlY3RpbmcgdGhlIHJlZiBjb3VudCBvZiBhICJkZWFkIiBKU0dsb2Jh
bERhdGEuCisgICAgICAgIEFQSUVudHJ5U2hpbSBzaGltKGFnZW50LT5tX2dsb2JhbERhdGEsIEFQ
SUVudHJ5U2hpbVdpdGhvdXRMb2NrOjpEb250UmVmR2xvYmFsRGF0YSk7CisgICAgICAgIGFnZW50
LT5kb1dvcmsoKTsKKyAgICB9CisgICAgYWdlbnQtPm1fc2h1dGRvd25NdXRleC51bmxvY2soKTsK
IH0KIAogI2Vsc2UKQEAgLTU2LDYgKzgxLDExIEBAIEhlYXBUaW1lcjo6fkhlYXBUaW1lcigpCiB7
CiB9CiAKK3ZvaWQgSGVhcFRpbWVyOjpkaWRTdGFydFZNU2h1dGRvd24oKQoreworICAgIGRlbGV0
ZSB0aGlzOworfQorCiB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25pemUoKQogewogfQpAQCAtNjQs
NyArOTQsNiBAQCB2b2lkIEhlYXBUaW1lcjo6aW52YWxpZGF0ZSgpCiB7CiB9CiAKLQogI2VuZGlm
CiAgICAgCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oCShyZXZp
c2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgSGVhcFRpbWVyX2gKIAogI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKICNp
ZiBVU0UoQ0YpCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KQEAg
LTIxLDcgKzIyLDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiAgICAgdmlydHVhbCB+SGVhcFRp
bWVyKCk7Ci0gICAgCisKKyAgICB2b2lkIGRpZFN0YXJ0Vk1TaHV0ZG93bigpOwogICAgIHZpcnR1
YWwgdm9pZCBzeW5jaHJvbml6ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBkb1dvcmsoKSA9IDA7CiAg
ICAgCkBAIC0zNCw2ICszNiw4IEBAIHByb3RlY3RlZDoKICAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29w
VGltZXJSZWY+IG1fdGltZXI7CiAgICAgUmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV9ydW5Mb29w
OwogICAgIENGUnVuTG9vcFRpbWVyQ29udGV4dCBtX2NvbnRleHQ7CisKKyAgICBNdXRleCBtX3No
dXRkb3duTXV0ZXg7CiAjZW5kaWYKICAgICAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAJKHJldmlzaW9uIDEy
MDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDYgQEAgc3RhdGljIGNvbnN0IENGVGltZUlu
dGVydmFsIHN3ZWVwVGltZU11bAogCiB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6ZG9Xb3JrKCkK
IHsKLSAgICBBUElFbnRyeVNoaW0gc2hpbShtX2dsb2JhbERhdGEpOwogICAgIGRvU3dlZXAoV1RG
Ojptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CiB9CiAgICAgCkBAIC0zMCw5ICsyOSw5
IEBAIEluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVyKEgKIHsKIH0KIAotUGFz
c093blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhl
YXAqIGhlYXApCitJbmNyZW1lbnRhbFN3ZWVwZXIqIEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRl
KEhlYXAqIGhlYXApCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbmNyZW1lbnRhbFN3ZWVw
ZXIoaGVhcCwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKSk7CisgICAgcmV0dXJuIG5ldyBJbmNyZW1l
bnRhbFN3ZWVwZXIoaGVhcCwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKTsKIH0KIAogdm9pZCBJbmNy
ZW1lbnRhbFN3ZWVwZXI6OnNjaGVkdWxlVGltZXIoKQpAQCAtODQsOSArODMsOSBAQCB2b2lkIElu
Y3JlbWVudGFsU3dlZXBlcjo6ZG9Xb3JrKCkKIHsKIH0KIAotUGFzc093blB0cjxJbmNyZW1lbnRh
bFN3ZWVwZXI+IEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhlYXAqIGhlYXApCitJbmNyZW1l
bnRhbFN3ZWVwZXIqIEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhlYXAqIGhlYXApCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIoaGVhcC0+Z2xvYmFsRGF0
YSgpKSk7CisgICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIoaGVhcC0+Z2xvYmFsRGF0
YSgpKTsKIH0KIAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0U3dlZXBpbmcoY29uc3Qg
SGFzaFNldDxNYXJrZWRCbG9jayo+JikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0luY3JlbWVudGFsU3dlZXBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMTQsNyArMTQsNyBAQCBjbGFzcyBIZWFwOwogICAgIAogY2xhc3MgSW5jcmVtZW50YWxTd2Vl
cGVyIDogcHVibGljIEhlYXBUaW1lciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
SW5jcmVtZW50YWxTd2VlcGVyPiBjcmVhdGUoSGVhcCopOworICAgIHN0YXRpYyBJbmNyZW1lbnRh
bFN3ZWVwZXIqIGNyZWF0ZShIZWFwKik7CiAgICAgdm9pZCBzdGFydFN3ZWVwaW5nKGNvbnN0IEhh
c2hTZXQ8TWFya2VkQmxvY2sqPiYgYmxvY2tTbmFwc2hvdCk7CiAgICAgdmlydHVhbCB2b2lkIGRv
V29yaygpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBACiAK
ICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJIZWFwLmgiCisjaW5j
bHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewpAQCAtNTYsNiArNTcsNyBAQCBpbmxpbmUgdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjp0cnlBbGxvY2F0CiAgICAgCiB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xv
d0Nhc2UoKQogeworICAgIEFTU0VSVChtX2hlYXAtPmdsb2JhbERhdGEoKS0+YXBpTG9jaygpLmN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogI2lmIENPTExFQ1RfT05fRVZFUllfQUxMT0NB
VElPTgogICAgIG1faGVhcC0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAgICBBU1NFUlQobV9oZWFw
LT5tX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjcsOCArMTI3LDEwIEBAIHZvaWQgV2Vha0Jsb2NrOjpyZWFwKCkKICAgICAgICAgaWYgKHdlYWtJ
bXBsLT5zdGF0ZSgpID4gV2Vha0ltcGw6OkRlYWQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQod2Vha0ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSkp
CisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh3ZWFrSW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgp
KSkgeworICAgICAgICAgICAgQVNTRVJUKHdlYWtJbXBsLT5zdGF0ZSgpID09IFdlYWtJbXBsOjpM
aXZlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKICAgICAgICAgd2Vha0lt
cGwtPnNldFN0YXRlKFdlYWtJbXBsOjpEZWFkKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGJvb2wgY2hlY2tTeW50YXgo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUqIHJldHVy
bmVkRXhjZXB0aW9uKQogewotICAgIEpTTG9jayBsb2NrKGV4ZWMpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuaWRlbnRpZmllclRh
YmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwogCiAgICAg
UHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKGV4
ZWMsIHNvdXJjZSk7CkBAIC01Myw3ICs1Myw3IEBAIGJvb2wgY2hlY2tTeW50YXgoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCAKIAogSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBKU1ZhbHVlKiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKLSAgICBKU0xvY2sgbG9j
ayhleGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBBU1NFUlQoZXhlYy0+
Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElk
ZW50aWZpZXJUYWJsZSgpKTsKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmlzQ29sbGVjdG9y
QnVzeSgpKQogICAgICAgICBDUkFTSCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgRGVmYXVsdEdD
QWN0aXZpdHlDYWxsYmFjayA6IHB1YmxpYyBHQ0FjdGl2aXR5Q2FsbGJhY2sgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s+IGNyZWF0ZShI
ZWFwKik7CisgICAgc3RhdGljIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2sqIGNyZWF0ZShIZWFw
Kik7CiAKICAgICBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKEhlYXAqKTsKIApAQCAtOTEsOSAr
OTEsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1pbmxpbmUgUGFzc093blB0cjxEZWZhdWx0
R0NBY3Rpdml0eUNhbGxiYWNrPiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGUoSGVh
cCogaGVhcCkKK2lubGluZSBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKiBEZWZhdWx0R0NBY3Rp
dml0eUNhbGxiYWNrOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcCkpOworICAgIHJldHVybiBuZXcgRGVm
YXVsdEdDQWN0aXZpdHlDYWxsYmFjayhoZWFwKTsKIH0KIAogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxMCBAQAogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJz
LmgiCiAjaW5jbHVkZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25D
b25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgogI2luY2x1ZGUg
IkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKKyNpbmNs
dWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2lu
Y2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTQVBJVmFsdWVXcmFwcGVyLmgiCkBA
IC0xNzgsMTIgKzE4MCw5IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFU
eXAKIHsKICAgICBpbnRlcnByZXRlciA9IG5ldyBJbnRlcnByZXRlcjsKIAotICAgIGlmIChpc1No
YXJlZEluc3RhbmNlKCkpCi0gICAgICAgIHR1cm5PZmZWZXJpZmllcigpOwotCiAgICAgLy8gTmVl
ZCB0byBiZSBjYXJlZnVsIHRvIGtlZXAgZXZlcnl0aGluZyBjb25zaXN0ZW50IGhlcmUKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayh0aGlzKTsKICAgICBJZGVudGlmaWVyVGFibGUqIGV4aXN0aW5nRW50
cnlJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJU
YWJsZShpZGVudGlmaWVyVGFibGUpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAgICAgc3RydWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywgU3RydWN0dXJlOjpjcmVh
dGVTdHJ1Y3R1cmUoKnRoaXMpKTsKICAgICBkZWJ1Z2dlckFjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICAgICBhY3RpdmF0aW9uU3RydWN0dXJlLnNldCgqdGhpcywgSlNBY3RpdmF0aW9u
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkBAIC0yMjIsNiArMjIxLDkg
QEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogCiBKU0dsb2JhbERh
dGE6On5KU0dsb2JhbERhdGEoKQogeworICAgIEFTU0VSVCghbV9hcGlMb2NrLmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdMb2NrKCkpOworICAgIGhlYXAuYWN0aXZpdHlDYWxsYmFjaygpLT5kaWRTdGFy
dFZNU2h1dGRvd24oKTsKKyAgICBoZWFwLnN3ZWVwZXIoKS0+ZGlkU3RhcnRWTVNodXRkb3duKCk7
CiAgICAgaGVhcC5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogCiAgICAgZGVsZXRlIGludGVycHJl
dGVyOwpAQCAtMzExLDYgKzMxMyw3IEBAIGJvb2wgSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5j
ZUV4aXN0cygKIAogSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlKCkK
IHsKKyAgICBHbG9iYWxKU0xvY2sgZ2xvYmFsTG9jazsKICAgICBKU0dsb2JhbERhdGEqJiBpbnN0
YW5jZSA9IHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKICAgICBpZiAoIWluc3RhbmNlKSB7CiAg
ICAgICAgIGluc3RhbmNlID0gYWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0YShBUElTaGFyZWQsIFRo
cmVhZFN0YWNrVHlwZVNtYWxsLCBTbWFsbEhlYXApKS5sZWFrUmVmKCk7CkBAIC0zMjEsNyArMzI0
LDYgQEAgSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbgogCiBKU0dsb2Jh
bERhdGEqJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKQogewotICAgIEFT
U0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIHN0YXRpYyBK
U0dsb2JhbERhdGEqIHNoYXJlZEluc3RhbmNlOwogICAgIHJldHVybiBzaGFyZWRJbnN0YW5jZTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5o
CShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkhl
YXAuaCIKICNpbmNsdWRlICJJbnRyaW5zaWMuaCIKICNpbmNsdWRlICJKSVRTdHVicy5oIgorI2lu
Y2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKICNpbmNsdWRlICJMTEludERh
dGEuaCIKICNpbmNsdWRlICJOdW1lcmljU3RyaW5ncy5oIgpAQCAtNDYsOCArNDcsOCBAQAogI2lu
Y2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgogI2luY2x1ZGUg
PHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQpAQCAtMTUy
LDcgKzE1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAjZW5kaWYKIAotICAgIGNsYXNz
IEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEpTR2xvYmFsRGF0YT4geworICAgIGNs
YXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKU0dsb2JhbERh
dGE+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIC8vIFdlYkNvcmUgaGFzIGEgb25lLXRvLW9uZSBt
YXBwaW5nIG9mIHRocmVhZHMgdG8gSlNHbG9iYWxEYXRhczsKICAgICAgICAgLy8gZWl0aGVyIGNy
ZWF0ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlCkBAIC0x
ODAsNiArMTgxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgbWFrZVVzYWJs
ZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGluZVRocmVhZHMoKS5tYWtlVXNhYmxl
RnJvbU11bHRpcGxlVGhyZWFkcygpOyB9CiAKKyAgICBwcml2YXRlOgorICAgICAgICBKU0xvY2sg
bV9hcGlMb2NrOworCisgICAgcHVibGljOgogICAgICAgICBIZWFwIGhlYXA7IC8vIFRoZSBoZWFw
IGlzIG91ciBmaXJzdCBkYXRhIG1lbWJlciB0byBlbnN1cmUgdGhhdCBpdCdzIGRlc3RydWN0ZWQg
YWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJlbmNlIGl0LgogCiAgICAgICAgIEdsb2Jh
bERhdGFUeXBlIGdsb2JhbERhdGFUeXBlOwpAQCAtNDA5LDYgKzQxNCw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihmbG9hdDY0LCBGbG9hdDY0
KTsKICN1bmRlZiByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbgogCisgICAgICAgIEpTTG9jayYg
YXBpTG9jaygpIHsgcmV0dXJuIG1fYXBpTG9jazsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZp
c2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw4ICsxMTQsNiBAQCB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gc3RhdGljIGlubGluZSB2b2lkCiAKIEpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxP
YmplY3QoKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2Nr
KCkpOwotCiAgICAgaWYgKG1fZGVidWdnZXIpCiAgICAgICAgIG1fZGVidWdnZXItPmRldGFjaCh0
aGlzKTsKIApAQCAtMTMwLDcgKzEyOCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmRlc3Ryb3ko
SlNDZWxsKiBjZWwKIAogdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChKU09iamVjdCogdGhpc1Zh
bHVlKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkp
OworICAgIEFTU0VSVChnbG9iYWxEYXRhKCkuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdMb2NrKCkpOwogICAgIAogICAgIG1fZ2xvYmFsU2NvcGVDaGFpbi5zZXQoZ2xvYmFsRGF0YSgp
LCB0aGlzLCBTY29wZUNoYWluTm9kZTo6Y3JlYXRlKDAsIHRoaXMsICZnbG9iYWxEYXRhKCksIHRo
aXMsIHRoaXNWYWx1ZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TG9jay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1
ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgog
CkBAIC0zOCw5NCArMzksOTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgKE9TKERBUldJTikgfHwg
VVNFKFBUSFJFQURTKSkKIAogLy8gQWNxdWlyZSB0aGlzIG11dGV4IGJlZm9yZSBhY2Nlc3Npbmcg
bG9jay1yZWxhdGVkIGRhdGEuCi1zdGF0aWMgcHRocmVhZF9tdXRleF90IEpTTXV0ZXggPSBQVEhS
RUFEX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnaWFudEdsb2Jh
bEpTTG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CiAKLS8vIFRocmVhZC1zcGVjaWZp
YyBrZXkgdGhhdCB0ZWxscyB3aGV0aGVyIGEgdGhyZWFkIGhvbGRzIHRoZSBKU011dGV4LCBhbmQg
aG93IG1hbnkgdGltZXMgaXQgd2FzIHRha2VuIHJlY3Vyc2l2ZWx5LgotcHRocmVhZF9rZXlfdCBK
U0xvY2tDb3VudDsKK0dsb2JhbEpTTG9jazo6R2xvYmFsSlNMb2NrKCkKK3sKKyAgICBwdGhyZWFk
X211dGV4X2xvY2soJmdpYW50R2xvYmFsSlNMb2NrKTsKK30KIAotc3RhdGljIHZvaWQgY3JlYXRl
SlNMb2NrQ291bnQoKQorR2xvYmFsSlNMb2NrOjp+R2xvYmFsSlNMb2NrKCkKIHsKLSAgICBwdGhy
ZWFkX2tleV9jcmVhdGUoJkpTTG9ja0NvdW50LCAwKTsKKyAgICBwdGhyZWFkX211dGV4X3VubG9j
aygmZ2lhbnRHbG9iYWxKU0xvY2spOwogfQogCi1wdGhyZWFkX29uY2VfdCBjcmVhdGVKU0xvY2tD
b3VudE9uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKK0pTTG9ja0hvbGRlcjo6SlNMb2NrSG9sZGVy
KEV4ZWNTdGF0ZSogZXhlYykKKyAgICA6IG1fZ2xvYmFsRGF0YSgmZXhlYy0+Z2xvYmFsRGF0YSgp
KQoreworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKK30KIAotLy8gTG9jayBu
ZXN0aW5nIGNvdW50LgotaW50cHRyX3QgSlNMb2NrOjpsb2NrQ291bnQoKQorSlNMb2NrSG9sZGVy
OjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgIDogbV9nbG9iYWxE
YXRhKGdsb2JhbERhdGEpCiB7Ci0gICAgcHRocmVhZF9vbmNlKCZjcmVhdGVKU0xvY2tDb3VudE9u
Y2UsIGNyZWF0ZUpTTG9ja0NvdW50KTsKKyAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5sb2Nr
KCk7Cit9CiAKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocHRocmVhZF9n
ZXRzcGVjaWZpYyhKU0xvY2tDb3VudCkpOworSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIDogbV9nbG9iYWxEYXRhKCZnbG9iYWxEYXRhKQor
eworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKIH0KIAotc3RhdGljIHZvaWQg
c2V0TG9ja0NvdW50KGludHB0cl90IGNvdW50KQorSlNMb2NrSG9sZGVyOjp+SlNMb2NrSG9sZGVy
KCkKIHsKLSAgICBBU1NFUlQoY291bnQgPj0gMCk7Ci0gICAgcHRocmVhZF9zZXRzcGVjaWZpYyhK
U0xvY2tDb3VudCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY291bnQpKTsKKyAgICBtX2dsb2Jh
bERhdGEtPmFwaUxvY2soKS51bmxvY2soKTsKIH0KIAotSlNMb2NrOjpKU0xvY2soRXhlY1N0YXRl
KiBleGVjKQotICAgIDogbV9sb2NrQmVoYXZpb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLmlzU2hhcmVk
SW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5KQorSlNMb2Nr
OjpKU0xvY2soKQorICAgIDogbV9sb2NrQ291bnQoMCkKIHsKLSAgICBsb2NrKG1fbG9ja0JlaGF2
aW9yKTsKKyAgICBtX3NwaW5Mb2NrLkluaXQoKTsKIH0KIAotSlNMb2NrOjpKU0xvY2soSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQotICAgIDogbV9sb2NrQmVoYXZpb3IoZ2xvYmFsRGF0YS0+aXNT
aGFyZWRJbnN0YW5jZSgpID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpCitK
U0xvY2s6On5KU0xvY2soKQogewotICAgIGxvY2sobV9sb2NrQmVoYXZpb3IpOwogfQogCi12b2lk
IEpTTG9jazo6bG9jayhKU0xvY2tCZWhhdmlvciBsb2NrQmVoYXZpb3IpCit2b2lkIEpTTG9jazo6
bG9jaygpCiB7Ci0jaWZkZWYgTkRFQlVHCi0gICAgLy8gTG9ja2luZyAibm90IGZvciByZWFsIiBp
cyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICBpZiAobG9ja0JlaGF2aW9yID09IFNpbGVuY2VB
c3NlcnRpb25zT25seSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCisgICAgVGhyZWFkSWRlbnRp
ZmllciBjdXJyZW50VGhyZWFkID0gV1RGOjpjdXJyZW50VGhyZWFkKCk7CisgICAgeworICAgICAg
ICBTcGluTG9ja0hvbGRlciBob2xkZXIoJm1fc3BpbkxvY2spOworICAgICAgICBpZiAobV9vd25l
clRocmVhZCA9PSBjdXJyZW50VGhyZWFkICYmIG1fbG9ja0NvdW50KSB7CisgICAgICAgICAgICBt
X2xvY2tDb3VudCsrOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQogCi0g
ICAgcHRocmVhZF9vbmNlKCZjcmVhdGVKU0xvY2tDb3VudE9uY2UsIGNyZWF0ZUpTTG9ja0NvdW50
KTsKKyAgICBtX2xvY2subG9jaygpOwogCi0gICAgaW50cHRyX3QgY3VycmVudExvY2tDb3VudCA9
IGxvY2tDb3VudCgpOwotICAgIGlmICghY3VycmVudExvY2tDb3VudCAmJiBsb2NrQmVoYXZpb3Ig
PT0gTG9ja0ZvclJlYWwpIHsKLSAgICAgICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfbXV0ZXhfbG9j
aygmSlNNdXRleCk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCAhcmVzdWx0KTsKKyAg
ICB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmbV9zcGluTG9jayk7CisgICAgICAg
IG1fb3duZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkOworICAgICAgICBBU1NFUlQoIW1fbG9ja0Nv
dW50KTsKKyAgICAgICAgbV9sb2NrQ291bnQgPSAxOwogICAgIH0KLSAgICBzZXRMb2NrQ291bnQo
Y3VycmVudExvY2tDb3VudCArIDEpOwogfQogCi12b2lkIEpTTG9jazo6dW5sb2NrKEpTTG9ja0Jl
aGF2aW9yIGxvY2tCZWhhdmlvcikKK3ZvaWQgSlNMb2NrOjp1bmxvY2soKQogewotICAgIEFTU0VS
VChsb2NrQ291bnQoKSk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkp
OwogCi0jaWZkZWYgTkRFQlVHCi0gICAgLy8gTG9ja2luZyAibm90IGZvciByZWFsIiBpcyBhIGRl
YnVnLW9ubHkgZmVhdHVyZS4KLSAgICBpZiAobG9ja0JlaGF2aW9yID09IFNpbGVuY2VBc3NlcnRp
b25zT25seSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCisgICAgU3BpbkxvY2tIb2xkZXIgaG9s
ZGVyKCZtX3NwaW5Mb2NrKTsKKyAgICBtX2xvY2tDb3VudC0tOwogCi0gICAgaW50cHRyX3QgbmV3
TG9ja0NvdW50ID0gbG9ja0NvdW50KCkgLSAxOwotICAgIHNldExvY2tDb3VudChuZXdMb2NrQ291
bnQpOwotICAgIGlmICghbmV3TG9ja0NvdW50ICYmIGxvY2tCZWhhdmlvciA9PSBMb2NrRm9yUmVh
bCkgewotICAgICAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9tdXRleF91bmxvY2soJkpTTXV0ZXgp
OwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJlc3VsdCk7Ci0gICAgfQorICAgIGlm
ICghbV9sb2NrQ291bnQpCisgICAgICAgIG1fbG9jay51bmxvY2soKTsKIH0KIAogdm9pZCBKU0xv
Y2s6OmxvY2soRXhlY1N0YXRlKiBleGVjKQogewotICAgIGxvY2soZXhlYy0+Z2xvYmFsRGF0YSgp
LmlzU2hhcmVkSW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBleGVjLT5nbG9iYWxEYXRhKCkuYXBpTG9jaygpLmxvY2soKTsKIH0KIAogdm9pZCBK
U0xvY2s6OnVubG9jayhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgdW5sb2NrKGV4ZWMtPmdsb2Jh
bERhdGEoKS5pc1NoYXJlZEluc3RhbmNlKCkgPyBMb2NrRm9yUmVhbCA6IFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmFwaUxvY2soKS51bmxvY2soKTsKIH0K
IAogYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkKIHsKLSAgICBwdGhy
ZWFkX29uY2UoJmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNMb2NrQ291bnQpOwotICAg
IHJldHVybiAhIXB0aHJlYWRfZ2V0c3BlY2lmaWMoSlNMb2NrQ291bnQpOworICAgIHJldHVybiBt
X2xvY2tDb3VudCAmJiBtX293bmVyVGhyZWFkID09IFdURjo6Y3VycmVudFRocmVhZCgpOwogfQog
CiAvLyBUaGlzIGlzIGZhaXJseSBuYXN0eS4gIFdlIGFsbG93IG11bHRpcGxlIHRocmVhZHMgdG8g
cnVuIG9uIHRoZSBzYW1lCkBAIC0xNjgsNzQgKzE3MSw2OSBAQCBib29sIEpTTG9jazo6Y3VycmVu
dFRocmVhZElzSG9sZGluZ0xvY2soCiAvLyBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUgbWFkZSAt
IHRob3VnaCBpbXBsZW1lbnRpbmcgdGhlIGxlc3MgcmVzdHJpY3RpdmUgcG9saWN5CiAvLyB3b3Vs
ZCBsaWtlbHkgaW5jcmVhc2UgY29tcGxleGl0eSBhbmQgb3ZlcmhlYWQuCiAvLwotc3RhdGljIHVu
c2lnbmVkIGxvY2tEcm9wRGVwdGggPSAwOwogCi1KU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFs
bExvY2tzKEV4ZWNTdGF0ZSogZXhlYykKLSAgICA6IG1fbG9ja0JlaGF2aW9yKGV4ZWMtPmdsb2Jh
bERhdGEoKS5pc1NoYXJlZEluc3RhbmNlKCkgPyBMb2NrRm9yUmVhbCA6IFNpbGVuY2VBc3NlcnRp
b25zT25seSkKKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGxvY2tzIHRo
YXQgd2VyZSBkcm9wcGVkLgordW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3MoKQogewotICAg
IHB0aHJlYWRfb25jZSgmY3JlYXRlSlNMb2NrQ291bnRPbmNlLCBjcmVhdGVKU0xvY2tDb3VudCk7
Ci0KLSAgICBpZiAobG9ja0Ryb3BEZXB0aCsrKSB7Ci0gICAgICAgIG1fbG9ja0NvdW50ID0gMDsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9sb2NrRHJvcERlcHRoKyspCisgICAg
ICAgIHJldHVybiAwOwogCi0gICAgbV9sb2NrQ291bnQgPSBKU0xvY2s6OmxvY2tDb3VudCgpOwot
ICAgIGZvciAoaW50cHRyX3QgaSA9IDA7IGkgPCBtX2xvY2tDb3VudDsgaSsrKQotICAgICAgICBK
U0xvY2s6OnVubG9jayhtX2xvY2tCZWhhdmlvcik7CisgICAgcmV0dXJuIGRyb3BBbGxMb2Nrc1Vu
Y29uZGl0aW9uYWxseSgpOwogfQogCi1KU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tz
KEpTTG9ja0JlaGF2aW9yIEpTTG9ja0JlaGF2aW9yKQotICAgIDogbV9sb2NrQmVoYXZpb3IoSlNM
b2NrQmVoYXZpb3IpCit1bnNpZ25lZCBKU0xvY2s6OmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxs
eSgpCiB7Ci0gICAgcHRocmVhZF9vbmNlKCZjcmVhdGVKU0xvY2tDb3VudE9uY2UsIGNyZWF0ZUpT
TG9ja0NvdW50KTsKKyAgICB1bnNpZ25lZCBsb2NrQ291bnQgPSBtX2xvY2tDb3VudDsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9ja0NvdW50OyBpKyspCisgICAgICAgIHVubG9jaygp
OwogCi0gICAgaWYgKGxvY2tEcm9wRGVwdGgrKykgewotICAgICAgICBtX2xvY2tDb3VudCA9IDA7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgcmV0dXJuIGxvY2tDb3VudDsKK30KIAotICAg
IC8vIEl0IGlzIG5lY2Vzc2FyeSB0byBkcm9wIGV2ZW4gInVucmVhbCIgbG9ja3MsIGJlY2F1c2Ug
aGF2aW5nIGEgbm9uLXplcm8gbG9jayBjb3VudAotICAgIC8vIHdpbGwgcHJldmVudCBhIHJlYWwg
bG9jayBmcm9tIGJlaW5nIHRha2VuLgordm9pZCBKU0xvY2s6OmdyYWJBbGxMb2Nrcyh1bnNpZ25l
ZCBsb2NrQ291bnQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvY2tDb3VudDsg
aSsrKQorICAgICAgICBsb2NrKCk7CiAKLSAgICBtX2xvY2tDb3VudCA9IEpTTG9jazo6bG9ja0Nv
dW50KCk7Ci0gICAgZm9yIChpbnRwdHJfdCBpID0gMDsgaSA8IG1fbG9ja0NvdW50OyBpKyspCi0g
ICAgICAgIEpTTG9jazo6dW5sb2NrKG1fbG9ja0JlaGF2aW9yKTsKKyAgICBtX2xvY2tEcm9wRGVw
dGgtLTsKIH0KIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6On5Ecm9wQWxsTG9ja3MoKQorSlNMb2Nr
OjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhFeGVjU3RhdGUqIGV4ZWMpCisgICAgOiBtX2xv
Y2tDb3VudCgwKQorICAgICwgbV9nbG9iYWxEYXRhKCZleGVjLT5nbG9iYWxEYXRhKCkpCiB7Ci0g
ICAgZm9yIChpbnRwdHJfdCBpID0gMDsgaSA8IG1fbG9ja0NvdW50OyBpKyspCi0gICAgICAgIEpT
TG9jazo6bG9jayhtX2xvY2tCZWhhdmlvcik7Ci0KLSAgICAtLWxvY2tEcm9wRGVwdGg7CisgICAg
bV9sb2NrQ291bnQgPSBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5kcm9wQWxsTG9ja3MoKTsKIH0K
IAotI2Vsc2UgLy8gKE9TKERBUldJTikgfHwgVVNFKFBUSFJFQURTKSkKK0pTTG9jazo6RHJvcEFs
bExvY2tzOjpEcm9wQWxsTG9ja3MoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgIDogbV9s
b2NrQ291bnQoMCkKKyAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQoreworICAgIG1fbG9j
a0NvdW50ID0gbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZHJvcEFsbExvY2tzKCk7Cit9CiAKLUpT
TG9jazo6SlNMb2NrKEV4ZWNTdGF0ZSopCi0gICAgOiBtX2xvY2tCZWhhdmlvcihTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpCitKU0xvY2s6OkRyb3BBbGxMb2Nrczo6fkRyb3BBbGxMb2NrcygpCiB7Cisg
ICAgbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZ3JhYkFsbExvY2tzKG1fbG9ja0NvdW50KTsKIH0K
IAotLy8gSWYgdGhyZWFkaW5nIHN1cHBvcnQgaXMgb2ZmLCBzZXQgdGhlIGxvY2sgY291bnQgdG8g
YSBjb25zdGFudCB2YWx1ZSBvZiAxIHNvIHNzZXJ0aW9ucwotLy8gdGhhdCB0aGUgbG9jayBpcyBo
ZWxkIGRvbid0IGZhaWwKLWludHB0cl90IEpTTG9jazo6bG9ja0NvdW50KCkKKyNlbHNlIC8vIChP
UyhEQVJXSU4pIHx8IFVTRShQVEhSRUFEUykpCisKK0dsb2JhbEpTTG9jazo6R2xvYmFsSlNMb2Nr
KCkKIHsKLSAgICByZXR1cm4gMTsKIH0KIAotYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hv
bGRpbmdMb2NrKCkKK0dsb2JhbEpTTG9jazo6fkdsb2JhbEpTTG9jaygpCiB7Ci0gICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgSlNMb2NrOjpsb2NrKEpTTG9ja0JlaGF2aW9yKQorSlNMb2NrOjpK
U0xvY2soRXhlY1N0YXRlKikKIHsKIH0KIAotdm9pZCBKU0xvY2s6OnVubG9jayhKU0xvY2tCZWhh
dmlvcikKK2Jvb2wgSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpCiB7CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgSlNMb2NrOjpsb2NrKEV4ZWNTdGF0ZSopCkBAIC0yNTAs
MTAgKzI0OCw2IEBAIEpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoRXhlY1MKIHsK
IH0KIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhKU0xvY2tCZWhhdmlvcikK
LXsKLX0KLQogSlNMb2NrOjpEcm9wQWxsTG9ja3M6On5Ecm9wQWxsTG9ja3MoKQogewogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMyw2ICsyMyw5IEBACiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVENTcGluTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTUxLDU1ICs1NCw2MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFz
cyBFeGVjU3RhdGU7CiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwogCi0gICAgZW51bSBKU0xvY2tC
ZWhhdmlvciB7IFNpbGVuY2VBc3NlcnRpb25zT25seSwgTG9ja0ZvclJlYWwgfTsKKyAgICAvLyBU
aGlzIGNsYXNzIHNob3VsZCBvbmx5IGJlIHVzZWQgbG9jYWxseSB3aXRoaW4gQVBJIGNhbGxzIHRv
IGRvIG1pc2NlbGxhbmVvdXMgCisgICAgLy8gbm9uLXRocmVhZC1zYWZlIHRoaW5ncyBsaWtlIGdy
YWJiaW5nIHRoZSBzaGFyZWQgZ2xvYmFsIGRhdGEsIGV0Yy4KKyAgICBjbGFzcyBHbG9iYWxKU0xv
Y2sgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHbG9iYWxKU0xvY2spOworICAgIHB1
YmxpYzoKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR2xvYmFsSlNMb2NrKCk7CisgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5HbG9iYWxKU0xvY2soKTsKKyAgICB9OworCisgICAgY2xhc3Mg
SlNMb2NrSG9sZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
TG9ja0hvbGRlcihKU0dsb2JhbERhdGEqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNM
b2NrSG9sZGVyKEpTR2xvYmFsRGF0YSYpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0xv
Y2tIb2xkZXIoRXhlY1N0YXRlKik7CisKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9j
a0hvbGRlcigpOworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IG1f
Z2xvYmFsRGF0YTsKKyAgICB9OwogCiAgICAgY2xhc3MgSlNMb2NrIHsKICAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSlNMb2NrKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEpTTG9jayhFeGVjU3RhdGUqKTsKLSAgICAgICAgSlNMb2NrKEpTR2xvYmFsRGF0YSop
OworICAgICAgICBKU0xvY2soKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9jaygp
OworCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9jaygpOworICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHVubG9jaygpOwogCi0gICAgICAgIEpTTG9jayhKU0xvY2tCZWhh
dmlvciBsb2NrQmVoYXZpb3IpCi0gICAgICAgICAgICA6IG1fbG9ja0JlaGF2aW9yKGxvY2tCZWhh
dmlvcikKLSAgICAgICAgewotI2lmZGVmIE5ERUJVRwotICAgICAgICAgICAgLy8gTG9ja2luZyAi
bm90IGZvciByZWFsIiBpcyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICAgICAgICAgIGlmIChs
b2NrQmVoYXZpb3IgPT0gU2lsZW5jZUFzc2VydGlvbnNPbmx5KQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSNlbmRpZgotICAgICAgICAgICAgbG9jayhsb2NrQmVoYXZpb3IpOwotICAgICAgICB9
Ci0KLSAgICAgICAgfkpTTG9jaygpCi0gICAgICAgIHsgCi0jaWZkZWYgTkRFQlVHCi0gICAgICAg
ICAgICAvLyBMb2NraW5nICJub3QgZm9yIHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0dXJlLgot
ICAgICAgICAgICAgaWYgKG1fbG9ja0JlaGF2aW9yID09IFNpbGVuY2VBc3NlcnRpb25zT25seSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICAgICAgICAgIHVubG9jayhtX2xv
Y2tCZWhhdmlvcik7IAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBsb2NrKEpTTG9ja0JlaGF2aW9yKTsKLSAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgdW5sb2NrKEpTTG9ja0JlaGF2aW9yKTsKICAgICAgICAgc3Rh
dGljIHZvaWQgbG9jayhFeGVjU3RhdGUqKTsKICAgICAgICAgc3RhdGljIHZvaWQgdW5sb2NrKEV4
ZWNTdGF0ZSopOworICAgICAgICBzdGF0aWMgdm9pZCBsb2NrKEpTR2xvYmFsRGF0YSYpOworICAg
ICAgICBzdGF0aWMgdm9pZCB1bmxvY2soSlNHbG9iYWxEYXRhJik7CiAKLSAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGludHB0cl90IGxvY2tDb3VudCgpOwotICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpOworICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7
CiAKLSAgICAgICAgSlNMb2NrQmVoYXZpb3IgbV9sb2NrQmVoYXZpb3I7CisgICAgICAgIHVuc2ln
bmVkIGRyb3BBbGxMb2NrcygpOworICAgICAgICB1bnNpZ25lZCBkcm9wQWxsTG9ja3NVbmNvbmRp
dGlvbmFsbHkoKTsKKyAgICAgICAgdm9pZCBncmFiQWxsTG9ja3ModW5zaWduZWQgbG9ja0NvdW50
KTsKKworICAgICAgICBTcGluTG9jayBtX3NwaW5Mb2NrOworICAgICAgICBNdXRleCBtX2xvY2s7
CisgICAgICAgIFRocmVhZElkZW50aWZpZXIgbV9vd25lclRocmVhZDsKKyAgICAgICAgaW50cHRy
X3QgbV9sb2NrQ291bnQ7CisgICAgICAgIHVuc2lnbmVkIG1fbG9ja0Ryb3BEZXB0aDsKIAogICAg
ICAgICBjbGFzcyBEcm9wQWxsTG9ja3MgewogICAgICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRHJvcEFsbExvY2tzKTsKICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgRHJvcEFsbExvY2tzKEV4ZWNTdGF0ZSogZXhlYyk7Ci0gICAgICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBEcm9wQWxsTG9ja3MoSlNMb2NrQmVoYXZpb3IpOworICAgICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgRHJvcEFsbExvY2tzKEpTR2xvYmFsRGF0YSopOwogICAgICAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgfkRyb3BBbGxMb2NrcygpOwogICAgICAgICAgICAgCiAgICAg
ICAgIHByaXZhdGU6CiAgICAgICAgICAgICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKLSAgICAgICAg
ICAgIEpTTG9ja0JlaGF2aW9yIG1fbG9ja0JlaGF2aW9yOworICAgICAgICAgICAgUmVmUHRyPEpT
R2xvYmFsRGF0YT4gbV9nbG9iYWxEYXRhOwogICAgICAgICB9OwogICAgIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtNzUsOCArNzUsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBIYW5kbGVUeXBl
czxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJmltcGwtPmpz
VmFsdWUoKSkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIGNvbnN0IEtl
eVR5cGUmIGtleSwgRXh0ZXJuYWxUeXBlIHZhbHVlKQorICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgY29uc3QgS2V5VHlwZSYga2V5LCBFeHRlcm5hbFR5cGUgdmFsdWUpCiAg
ICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuYXBpTG9j
aygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgICAgICB0eXBlbmFtZSBNYXBU
eXBlOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7CiAgICAgICAgIGlmICgh
cmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKHJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1MyBA
QAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEN1cnJlbnQg
cmVncmVzc2lvbiB0ZXN0cyBhcmUgc3VmZmljaWVudC4KKworICAgICAgICBDaGFuZ2VkIGFsbCBz
aXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVy
CisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29k
ZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rp
b24uIEFsc28gYWRkZWQgYSBjb3VwbGUgSlNMb2NrcyB0byBwbGFjZXMgdGhhdCBkaWRuJ3QgYWxy
ZWFkeSAKKyAgICAgICAgaGF2ZSBpdCB0aGF0IG5lZWRlZCBpdC4KKworICAgICAgICAqIGJpbmRp
bmdzL2pzL0dDQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3cpOgorICAgICAgICAo
V2ViQ29yZTo6R0NDb250cm9sbGVyOjpkaXNjYXJkQWxsQ29tcGlsZWRDb2RlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNDdXN0b21Wb2lkQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmFtZXNwYWNlVVJJKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZl
bnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0
ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3Jp
cHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6
bm9kZUFzU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhv
c3Q6Omluc3BlY3RlZE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbmplY3RlZFNj
cmlwdE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
OjpjcmVhdGVJbmplY3RlZFNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlw
dE1hbmFnZXI6OmNhbkFjY2Vzc0luc3BlY3RlZFdpbmRvdyk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVu
dExpc3RlbmVyOjppbml0aWFsaXplSlNGdW5jdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU01haW5UaHJlYWRF
eGVjU3RhdGU6OmV2YWx1YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uQ2Fs
bGJhY2tDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNdXRhdGlvbkNhbGxiYWNrOjpo
YW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9k
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFj
a0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNh
bGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSmF2YVNjcmlwdENh
bGxGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFs
dWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNG
dW5jdGlvbnMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGVGdW5jdGlvbkluQ29udGV4
dCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJv
bGxlcjo6Y2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6YmluZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0TlBPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q29udHJvbGxlcjo6anNPYmplY3RGb3JQbHVnaW5FbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cyk6CisgICAgICAgICog
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1c2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEV2
ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnRMaXN0ZW5lckhhbmRsZXJC
b2R5KToKKyAgICAgICAgKFdlYkNvcmU6OmV2ZW50TGlzdGVuZXJIYW5kbGVyTG9jYXRpb24pOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6OnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRHbG9iYWxPYmplY3Q6OnJlbW92ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6OmdldFN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6dG9JbnNwZWN0b3JWYWx1ZSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjp+V29ya2VyU2NyaXB0Q29udHJvbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppbml0U2NyaXB0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmRpc2FibGVFdmFsKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAgICAgKF9kaWRFeGVj
dXRlKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IF9zZXRJbXA6b3JpZ2luUm9vdE9iamVj
dDpyb290T2JqZWN0Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgX3NldE9yaWdpblJv
b3RPYmplY3Q6YW5kUm9vdE9iamVjdDpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGRl
YWxsb2NdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGZpbmFsaXplXSk6CisgICAgICAg
ICgtW1dlYlNjcmlwdE9iamVjdCBjYWxsV2ViU2NyaXB0TWV0aG9kOndpdGhBcmd1bWVudHM6XSk6
CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBldmFsdWF0ZVdlYlNjcmlwdDpdKToKKyAgICAg
ICAgKC1bV2ViU2NyaXB0T2JqZWN0IHNldFZhbHVlOmZvcktleTpdKToKKyAgICAgICAgKC1bV2Vi
U2NyaXB0T2JqZWN0IHZhbHVlRm9yS2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qg
cmVtb3ZlV2ViU2NyaXB0S2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgaGFzV2Vi
U2NyaXB0S2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc3RyaW5nUmVwcmVzZW50
YXRpb25dKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHdlYlNjcmlwdFZhbHVlQXRJbmRl
eDpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHNldFdlYlNjcmlwdFZhbHVlQXRJbmRl
eDp2YWx1ZTpdKToKKyAgICAgICAgKCtbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09i
amNWYWx1ZTpvcmlnaW5Sb290T2JqZWN0OnJvb3RPYmplY3Q6XSk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUNhbGxiYWNr
SW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJh
Y2tXaXRoTm9QYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJh
Y2tXaXRoQ2xhc3MxUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6OmNh
bGxiYWNrV2l0aENsYXNzMlBhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNr
OjpjYWxsYmFja1dpdGhTdHJpbmdMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxi
YWNrOjpjYWxsYmFja1dpdGhCb29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxi
YWNrOjpjYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyk6CisgICAgICAgICogYnJpZGdlL05QX2pz
b2JqZWN0LmNwcDoKKyAgICAgICAgKF9OUE5fSW52b2tlRGVmYXVsdCk6CisgICAgICAgIChfTlBO
X0ludm9rZSk6CisgICAgICAgIChfTlBOX0V2YWx1YXRlKToKKyAgICAgICAgKF9OUE5fR2V0UHJv
cGVydHkpOgorICAgICAgICAoX05QTl9TZXRQcm9wZXJ0eSk6CisgICAgICAgIChfTlBOX1JlbW92
ZVByb3BlcnR5KToKKyAgICAgICAgKF9OUE5fSGFzUHJvcGVydHkpOgorICAgICAgICAoX05QTl9I
YXNNZXRob2QpOgorICAgICAgICAoX05QTl9FbnVtZXJhdGUpOgorICAgICAgICAoX05QTl9Db25z
dHJ1Y3QpOgorICAgICAgICAqIGJyaWRnZS9jL2NfY2xhc3MuY3BwOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6Q0NsYXNzOjp+Q0NsYXNzKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNDbGFz
czo6bWV0aG9kc05hbWVkKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNDbGFzczo6ZmllbGRO
YW1lZCk6CisgICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZSk6Cisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZU1ldGhvZCk6CisgICAgICAg
IChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjppbnZva2VDb25zdHJ1Y3QpOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBi
cmlkZ2UvYy9jX3J1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0ZpZWxkOjp2
YWx1ZUZyb21JbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDRmllbGQ6OnNldFZh
bHVlVG9JbnN0YW5jZSk6CisgICAgICAgICogYnJpZGdlL2MvY191dGlsaXR5LmNwcDoKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6OmNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uv
am5pL2puaV9qc29iamVjdC5tbToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y2FsbCk6CisgICAg
ICAgIChKYXZhSlNPYmplY3Q6OmV2YWwpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpnZXRNZW1i
ZXIpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpzZXRNZW1iZXIpOgorICAgICAgICAoSmF2YUpT
T2JqZWN0OjpyZW1vdmVNZW1iZXIpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpnZXRTbG90KToK
KyAgICAgICAgKEphdmFKU09iamVjdDo6c2V0U2xvdCk6CisgICAgICAgIChKYXZhSlNPYmplY3Q6
OnRvU3RyaW5nKToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y29udmVydFZhbHVlVG9KT2JqZWN0
KToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhbHVlKToKKyAgICAg
ICAgKiBicmlkZ2Uvam5pL2puaV9vYmpjLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6ZGlz
cGF0Y2hKTklDYWxsKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0
ZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb0pWYWx1ZSk6Cisg
ICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcDoKKyAgICAgICAgKEphdmFD
bGFzczo6SmF2YUNsYXNzKToKKyAgICAgICAgKEphdmFDbGFzczo6fkphdmFDbGFzcyk6CisgICAg
ICAgICogYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcDoKKyAgICAgICAgKEphdmFJ
bnN0YW5jZTo6c3RyaW5nVmFsdWUpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFNZXRo
b2RKU0MuY3BwOgorICAgICAgICAoYXBwZW5kQ2xhc3NOYW1lKToKKyAgICAgICAgKEphdmFNZXRo
b2Q6OnNpZ25hdHVyZSk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YVN0cmluZ0pTQy5o
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SmF2YVN0cmluZzo6SmF2YVN0cmluZyk6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhU3RyaW5nOjp+SmF2YVN0cmluZyk6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpKYXZhU3RyaW5nOjp1dGY4KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OkphdmFTdHJpbmc6OmluaXQpOgorICAgICAgICAqIGJyaWRnZS9qc2MvQnJpZGdlSlNDLmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6Okluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KToKKyAg
ICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tOgorICAgICAgICAoT2JqY0luc3Rh
bmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUpOgorICAgICAgICAoT2JqY0luc3Rh
bmNlOjppbnZva2VPYmpjTWV0aG9kKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6aW52b2tlRGVm
YXVsdE1ldGhvZCk6CisgICAgICAgIChPYmpjSW5zdGFuY2U6OnNldFZhbHVlT2ZVbmRlZmluZWRG
aWVsZCk6CisgICAgICAgIChPYmpjSW5zdGFuY2U6OmdldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCk6
CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6T2JqY0ZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpPYmpjRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZSk6CisgICAgICAgICogYnJpZGdl
L29iamMvb2JqY191dGlsaXR5Lm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZh
bHVlVG9PYmpjVmFsdWUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE5TU3RyaW5n
VG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE9iamNWYWx1ZVRvVmFs
dWUpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpRdEluc3RhbmNlOjp+UXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpRdEluc3RhbmNlOjpnZXRRdEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OlF0SW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9w
aXhtYXBydW50aW1lLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwSW5zdGFu
Y2U6OmNyZWF0ZVBpeG1hcFJ1bnRpbWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9y
dW50aW1lLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlh
bnQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFFWYXJpYW50VG9WYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjYWxsKToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNhbGwpOgorICAg
ICAgICAqIGJyaWRnZS9xdC9xdF9ydW50aW1lX3F0NC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpjb252ZXJ0VmFsdWVUb1FWYXJpYW50KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNv
bnZlcnRRVmFyaWFudFRvVmFsdWUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1l
TWV0YU1ldGhvZDo6Y2FsbCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVDb25u
ZWN0aW9uTWV0aG9kOjpjYWxsKToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZl
cik6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEltYWdlTG9hZGVyOjpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0Ojp3
cmFwT2JqZWN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0QmFzZTo6Y2FsbEZ1bmN0aW9uV2l0aEV2
YWxFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0QmFzZTo6bWFrZUNh
bGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwp
OgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzdG9wKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6Om5wT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgICogcGx1Z2lucy9i
bGFja2JlcnJ5L1BsdWdpblZpZXdCbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBs
YXRmb3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0V2luZG93SW5m
byk6CisgICAgICAgICogcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAqIHBsdWdpbnMv
Z3RrL1BsdWdpblZpZXdHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlz
cGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJv
YXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAq
IHBsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgICogcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgICogcGx1Z2lucy93
aW4vUGx1Z2luVmlld1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNw
YXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9h
cmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdCk6CisgICAg
ICAgICogdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZVRlc3RTdXBwb3J0OjppbmplY3RJbnRlcm5hbHNPYmplY3QpOgorICAgICAgICAoV2ViQ29yZVRl
c3RTdXBwb3J0OjpyZXNldEludGVybmFsc09iamVjdCk6CisgICAgICAgICogeG1sL1hNTEh0dHBS
ZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVj
dGlvbik6CisKIDIwMTItMDYtMjEgIFRhaWp1IFRzdWlraSAgPHR6aWtAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFVuaWZ5IEZpbGVTeXN0ZW0gY2FsbGJhY2tzCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBz
dGF0aWMgdm9pZCBjb2xsZWN0KHZvaWQqKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICAgICBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhl
YXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKIH0KIApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEdDQ29u
dHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKCkKICAgICAvLyBkb3duIGludG8gV1RGIHNvIHRo
YXQgbW9yZSBwbGF0Zm9ybXMgY2FuIHRha2UgYWR2YW50YWdlIG9mIGl0LCB3ZSB3aWxsIGJlIAog
ICAgIC8vIGFibGUgdG8gdXNlIHJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoIG9uIG1vcmUgcGxh
dGZvcm1zLgogI2lmIFVTRShDRikKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnJlcG9y
dEFiYW5kb25lZE9iamVjdEdyYXBoKCk7CiAjZWxzZQogICAgIGlmICghbV9HQ1RpbWVyLmlzQWN0
aXZlKCkpCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnY1RpbWVyRmlyZWQo
VGltZXI8R0MKIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmdhcmJhZ2VDb2xsZWN0Tm93KCkKIHsKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgaWYgKCFKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuaXNCdXN5KCkpCiAgICAgICAgIEpTRE9N
V2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwog
fQpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgR0NDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0R2Fy
YmFnZUMKIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmRpc2NhcmRBbGxDb21waWxlZENvZGUoKQogewot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuZGVsZXRlQWxsQ29tcGlsZWRDb2RlKCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAkocmV2aXNpb24gMTIwOTI2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBib29sIEpTU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjazo6aGFuZGxlCiAKICAgICBSZWZQdHI8SlNTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNDOjpKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sobV9kYXRh
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21W
b2lkQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tVm9pZENhbGxiYWNrLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgSlNDdXN0b21Wb2lkQ2FsbGJhY2s6OmhhbmRsZUV2ZW50
KCkKIAogICAgIFJlZlB0cjxKU0N1c3RvbVZvaWRDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKICAg
ICAgICAgCi0gICAgSlNDOjpKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0
YSgpKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIG1fZGF0YS0+aW52b2tl
Q2FsbGJhY2soYXJncyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1
c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgU3RyaW5nIEpTQ3VzdG9tWFBhdGhOU1Jl
c29sdmVyOjpsb29rdXBOYQogewogICAgIEFTU0VSVChtX2N1c3RvbVJlc29sdmVyKTsKIAotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAJKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEpTRXJyb3JIYW5kbGVy
OjpoYW5kbGVFdmVudChTY3JpcHRFCiAKICAgICBFcnJvckV2ZW50KiBlcnJvckV2ZW50ID0gc3Rh
dGljX2Nhc3Q8RXJyb3JFdmVudCo+KGV2ZW50KTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEpTT2JqZWN0KiBqc0Z1bmN0aW9uID0gdGhpcy0+
anNGdW5jdGlvbihzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBpZiAoIWpzRnVuY3Rpb24p
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgSlNWYWx1ZSBKU0V2ZW50
OjpjbGlwYm9hcmREYXRhKEV4ZWNTdGF0ZQogCiBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFdmVudCogZXZlbnQpCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKIAogICAgIGlmICghZXZlbnQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAko
cmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExp
c3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIEpTRXZlbnRM
aXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250
ZXh0IHx8IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzSlNFeGVjdXRpb25Gb3JiaWRkZW4oKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5nbG9iYWxE
YXRhKCkpOwogCiAgICAgSlNPYmplY3QqIGpzRnVuY3Rpb24gPSB0aGlzLT5qc0Z1bmN0aW9uKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIGlmICghanNGdW5jdGlvbikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9z
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIs
NyArODIsNyBAQCBOb2RlKiBJbmplY3RlZFNjcmlwdEhvc3Q6OnNjcmlwdFZhbHVlQXNOCiAKIFNj
cmlwdFZhbHVlIEluamVjdGVkU2NyaXB0SG9zdDo6bm9kZUFzU2NyaXB0VmFsdWUoU2NyaXB0U3Rh
dGUqIHN0YXRlLCBOb2RlKiBub2RlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc3RhdGUpOwogICAgIHJldHVybiBTY3Jp
cHRWYWx1ZShzdGF0ZS0+Z2xvYmFsRGF0YSgpLCB0b0pTKHN0YXRlLCBkZXByZWNhdGVkR2xvYmFs
T2JqZWN0Rm9yUHJvdG90eXBlKHN0YXRlKSwgbm9kZSkpOwogfQogCkBAIC05NSw3ICs5NSw3IEBA
IEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3RlZE8KICAgICBpZiAoIW9iamVj
dCkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFNj
cmlwdFZhbHVlIHNjcmlwdFZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYyk7CiAgICAgaWYgKHNjcmlw
dFZhbHVlLmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlw
dE1hbmFnZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcg
KzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTY3JpcHRPYmplY3QgSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyOjpjcmVhdGVJbmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSwgU2Ny
aXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBpbnQgaWQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CiAK
ICAgICBTb3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBtYWtlU291cmNlKHN0cmluZ1RvVVN0cmluZyhz
b3VyY2UpKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CkBA
IC04MSw3ICs4MSw3IEBAIFNjcmlwdE9iamVjdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWEK
IAogYm9vbCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNhbkFjY2Vzc0luc3BlY3RlZFdpbmRvdyhT
Y3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNE
T01XaW5kb3cqIGluc3BlY3RlZFdpbmRvdyA9IHRvSlNET01XaW5kb3coc2NyaXB0U3RhdGUtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgaWYgKCFpbnNwZWN0ZWRXaW5kb3cpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2
ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA4LDcgKzEwOCw3IEBAIEpTT2JqZWN0KiBKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFs
aXoKICAgICBpZiAobV9vcmlnaW5hbE5vZGUpIHsKICAgICAgICAgaWYgKCF3cmFwcGVyKCkpIHsK
ICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0ICdub2RlJyBoYXMgYSBKYXZhU2NyaXB0IHdyYXBw
ZXIgdG8gbWFyayB0aGUgZXZlbnQgbGlzdGVuZXIgd2UncmUgY3JlYXRpbmcuCi0gICAgICAgICAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHBhc3MgdGhl
IGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlCiAgICAgICAgICAgICBzZXRX
cmFwcGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNPYmplY3QodG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIG1fb3JpZ2luYWxOb2RlKSkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAkocmV2aXNpb24gMTIw
OTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgZXZhbHVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U2NvcGVDaGFp
bk5vZGUqIGNoYWluLCBjb25zdCBKU0M6OlNvdXJjZUNvZGUmIHNvdXJjZSwgSlNDOjpKU1ZhbHVl
IHRoaXNWYWx1ZSwgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24pCiAgICAgewogICAgICAgICBKU01h
aW5UaHJlYWRFeGVjU3RhdGUgY3VycmVudFN0YXRlKGV4ZWMpOworICAgICAgICBKU0M6OkpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICByZXR1cm4gSlNDOjpldmFsdWF0ZShleGVjLCBj
aGFpbiwgc291cmNlLCB0aGlzVmFsdWUsIGV4Y2VwdGlvbik7CiAgICAgfTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJhY2tD
dXN0b20uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU011dGF0aW9uQ2FsbGJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAKICNpbmNsdWRlICJKU011dGF0aW9uQ2FsbGJhY2suaCIKIAorI2luY2x1ZGUgIkpT
RE9NV2luZG93QmFzZS5oIgogI2luY2x1ZGUgIkpTTXV0YXRpb25SZWNvcmQuaCIKICNpbmNsdWRl
ICJKU1dlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCkBAIC01MCw3ICs1MSw3IEBAIGJvb2wgSlNNdXRhdGlvbkNhbGxiYWNrOjpoYW5k
bGVFdmVudChNdXQKIAogICAgIFJlZlB0cjxKU011dGF0aW9uQ2FsbGJhY2s+IHByb3RlY3QodGhp
cyk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZp
bHRlckNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAgSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpKU05vZGVGaWx0ZXJDb25kaQogCiBz
aG9ydCBKU05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIE5vZGUqIGZpbHRlck5vZGUpIGNvbnN0CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIGlmICgh
bV9maWx0ZXIpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxs
YmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDEyMDky
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVxdWVzdEFuaW1hdGlvbkZyYW1l
Q2FsbGJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGJvb2wg
SlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazo6aGEKIAogICAgIFJlZlB0cjxKU1JlcXVl
c3RBbmltYXRpb25GcmFtZUNhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZChqc051bWJlcih0aW1lKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkocmV2
aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENh
bGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJK
YXZhU2NyaXB0Q2FsbEZyYW1lLmgiCiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgPGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmg+CiAjaW5jbHVkZSA8cnVudGltZS9D
b21wbGV0aW9uLmg+CkBAIC0xMDYsNyArMTA3LDcgQEAgSlNWYWx1ZSBKYXZhU2NyaXB0Q2FsbEZy
YW1lOjpldmFsdWF0ZShjbwogICAgIGlmICghbV9pc1ZhbGlkKQogICAgICAgICByZXR1cm4ganNO
dWxsKCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgIHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLmV2YWx1YXRlKHNjcmlwdCwgZXhjZXB0aW9u
KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVn
U2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdl
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTAsNyArMTEwLDcgQEAgdm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUxpc3Rl
bgogCiB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMo
VGltZXI8U2NyaXB0RGVidWdTZXJ2ZXI+KikKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKSk7CiAgICAgLy8gSWYgSmF2YVNjcmlwdCBzdGFjayBpcyBub3QgZW1wdHkg
cG9zdHBvbmUgcmVjb21waWxhdGlvbi4KICAgICBpZiAoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpLT5keW5hbWljR2xvYmFsT2JqZWN0KQogICAgICAgICByZWNvbXBpbGVBbGxKU0Z1
bmN0aW9uc1Nvb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxl
ZEFjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2No
ZWR1bGVkQWN0aW9uLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQs
NyBAQCB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShTY3JpcHRFeGVjCiB2b2lkIFNjaGVk
dWxlZEFjdGlvbjo6ZXhlY3V0ZUZ1bmN0aW9uSW5Db250ZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQogewogICAgIEFTU0VSVChtX2Z1bmN0aW9uKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbnRleHQtPmdsb2JhbERh
dGEoKSk7CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IGdldENhbGxEYXRhKG1fZnVuY3Rpb24uZ2V0KCksIGNhbGxEYXRhKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcAko
cmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2Fj
aGVkRnJhbWVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVE
YXRhKEZyYW1lKiBmcmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogCiAgICAgU2NyaXB0Q29udHJvbGxlciogc2NyaXB0Q29udHJvbGxlciA9IGZy
YW1lLT5zY3JpcHQoKTsKICAgICBTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1hcCYgd2luZG93U2hl
bGxzID0gc2NyaXB0Q29udHJvbGxlci0+bV93aW5kb3dTaGVsbHM7CkBAIC02Nyw3ICs2Nyw3IEBA
IFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6flNjcmlwdENhY2hlZEZyYW0KIAogdm9pZCBTY3JpcHRD
YWNoZWRGcmFtZURhdGE6OnJlc3RvcmUoRnJhbWUqIGZyYW1lKQogewotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBTY3JpcHRDb250cm9sbGVyKiBz
Y3JpcHRDb250cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOwogICAgIFNjcmlwdENvbnRyb2xsZXI6
OlNoZWxsTWFwJiB3aW5kb3dTaGVsbHMgPSBzY3JpcHRDb250cm9sbGVyLT5tX3dpbmRvd1NoZWxs
czsKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKCkK
ICAgICBpZiAobV93aW5kb3dzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBtX3dpbmRvd3MuY2xl
YXIoKTsKICAgICBnY0NvbnRyb2xsZXIoKS5nYXJiYWdlQ29sbGVjdFNvb24oKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIFNjcmlwdFZhbHVl
IFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW4KICAgICBjb25zdCBTdHJpbmcqIHNhdmVkU291
cmNlVVJMID0gbV9zb3VyY2VVUkw7CiAgICAgbV9zb3VyY2VVUkwgPSAmc291cmNlVVJMOwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdCA9IG1fZnJhbWU7CiAKQEAg
LTE3Nyw3ICsxNzcsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwo
CiAgICAgaWYgKG1fd2luZG93U2hlbGxzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIGZvciAo
U2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9
IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgSlNET01XaW5kb3dTaGVs
bCogd2luZG93U2hlbGwgPSBpdGVyLT5zZWNvbmQuZ2V0KCk7CkBAIC0yMDksNyArMjA5LDcgQEAg
SlNET01XaW5kb3dTaGVsbCogU2NyaXB0Q29udHJvbGxlcjo6aW5pdAogewogICAgIEFTU0VSVCgh
bV93aW5kb3dTaGVsbHMuY29udGFpbnMod29ybGQpKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sod29ybGQtPmdsb2JhbERh
dGEoKSk7CiAKICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGNyZWF0ZVdpbmRv
d1NoZWxsKHdvcmxkKTsKIApAQCAtMjg0LDkgKzI4NCwxMCBAQCB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OnVwZGF0ZURvY3VtZW50KCkKICAgICBpZiAoIW1fZnJhbWUtPmRvY3VtZW50KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0g
ICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7
IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikKKyAgICBmb3IgKFNoZWxsTWFw
OjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRv
d1NoZWxscy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGl0ZXIt
PmZpcnN0LT5nbG9iYWxEYXRhKCkpOwogICAgICAgICBpdGVyLT5zZWNvbmQtPndpbmRvdygpLT51
cGRhdGVEb2N1bWVudCgpOworICAgIH0KIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjp1cGRh
dGVTZWN1cml0eU9yaWdpbigpCkBAIC0zMDAsNyArMzAxLDcgQEAgQmluZGluZ3M6OlJvb3RPYmpl
Y3QqIFNjcmlwdENvbnRyb2xsZXI6OgogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbV9j
YWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdCkgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgbV9jYWNoZWFibGVCaW5kaW5nUm9v
dE9iamVjdCA9IEJpbmRpbmdzOjpSb290T2JqZWN0OjpjcmVhdGUoMCwgZ2xvYmFsT2JqZWN0KHBs
dWdpbldvcmxkKCkpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RP
YmplY3QuZ2V0KCk7CkBAIC0zMTIsNyArMzEzLDcgQEAgQmluZGluZ3M6OlJvb3RPYmplY3QqIFNj
cmlwdENvbnRyb2xsZXI6OgogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbV9iaW5kaW5n
Um9vdE9iamVjdCkgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICAgICAgICAgbV9iaW5kaW5nUm9vdE9iamVjdCA9IEJpbmRpbmdzOjpSb290
T2JqZWN0OjpjcmVhdGUoMCwgZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpKTsKICAgICB9CiAg
ICAgcmV0dXJuIG1fYmluZGluZ1Jvb3RPYmplY3QuZ2V0KCk7CkBAIC0zNDksOSArMzUwLDkgQEAg
TlBPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NjcmlwdAogICAgICAgICBpZiAoY2Fu
RXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKSB7CiAgICAgICAgICAgICAv
LyBKYXZhU2NyaXB0IGlzIGVuYWJsZWQsIHNvIHRoZXJlIGlzIGEgSmF2YVNjcmlwdCB3aW5kb3cg
b2JqZWN0LgogICAgICAgICAgICAgLy8gUmV0dXJuIGFuIE5QT2JqZWN0IGJvdW5kIHRvIHRoZSB3
aW5kb3cgb2JqZWN0LgotICAgICAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwotICAgICAgICAgICAgSlNPYmplY3QqIHdpbiA9IHdpbmRvd1NoZWxsKHBsdWdp
bldvcmxkKCkpLT53aW5kb3coKTsKKyAgICAgICAgICAgIEpTRE9NV2luZG93KiB3aW4gPSB3aW5k
b3dTaGVsbChwbHVnaW5Xb3JsZCgpKS0+d2luZG93KCk7CiAgICAgICAgICAgICBBU1NFUlQod2lu
KTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sod2luLT5nbG9iYWxFeGVjKCkp
OwogICAgICAgICAgICAgQmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9i
amVjdCgpOwogICAgICAgICAgICAgbV93aW5kb3dTY3JpcHROUE9iamVjdCA9IF9OUE5fQ3JlYXRl
U2NyaXB0T2JqZWN0KDAsIHdpbiwgcm9vdCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0zODMsOCAr
Mzg0LDggQEAgSlNPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OmpzT2JqZWN0Rm9yUAogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIC8vIENyZWF0ZSBhIEpTT2JqZWN0IGJvdW5kIHRvIHRoaXMgZWxl
bWVudAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNET01X
aW5kb3cqIGdsb2JhbE9iaiA9IGdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhnbG9iYWxPYmotPmdsb2JhbEV4ZWMoKSk7CiAgICAgLy8gRklYTUU6IGlz
IG5vcm1hbCBva2F5PyAtIHVzZWQgZm9yIE5QIHBsdWdpbnM/CiAgICAgSlNWYWx1ZSBqc0VsZW1l
bnRWYWx1ZSA9IHRvSlMoZ2xvYmFsT2JqLT5nbG9iYWxFeGVjKCksIGdsb2JhbE9iaiwgcGx1Z2lu
KTsKICAgICBpZiAoIWpzRWxlbWVudFZhbHVlIHx8ICFqc0VsZW1lbnRWYWx1ZS5pc09iamVjdCgp
KQpAQCAtNDE4LDcgKzQxOSw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYW51cFNjcmlw
dE9iamUKIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMoKQogewot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBSb290
T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jvb3RPYmplY3RzLmVuZCgpOwogICAg
IGZvciAoUm9vdE9iamVjdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jvb3RPYmplY3RzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIFdlYlNjcmlwdE9iamVjdCogU2NyaXB0Q29udHJvbGxl
cjo6d2luZG8KICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fd2luZG93U2NyaXB0T2Jq
ZWN0KSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiBy
b290ID0gYmluZGluZ1Jvb3RPYmplY3QoKTsKICAgICAgICAgbV93aW5kb3dTY3JpcHRPYmplY3Qg
PSBbV2ViU2NyaXB0T2JqZWN0IHNjcmlwdE9iamVjdEZvckpTT2JqZWN0OnRvUmVmKHdpbmRvd1No
ZWxsKHBsdWdpbldvcmxkKCkpKSBvcmlnaW5Sb290T2JqZWN0OnJvb3Qgcm9vdE9iamVjdDpyb290
XTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1Nl
cnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMiw3ICsy
MjIsNyBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRjaERpZFBhdXNlCiAgICAgewog
ICAgICAgICBpZiAobV9jdXJyZW50Q2FsbEZyYW1lLT5pc1ZhbGlkKCkgJiYgZ2xvYmFsT2JqZWN0
LT5pbmhlcml0cygmSlNET01HbG9iYWxPYmplY3Q6OnNfaW5mbykpIHsKICAgICAgICAgICAgIEpT
RE9NR2xvYmFsT2JqZWN0KiBkb21HbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHN0YXRlKTsKICAgICAg
ICAgICAgIGpzQ2FsbEZyYW1lID0gdG9KUyhzdGF0ZSwgZG9tR2xvYmFsT2JqZWN0LCBtX2N1cnJl
bnRDYWxsRnJhbWUuZ2V0KCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGpzQ2FsbEZy
YW1lID0ganNVbmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdEV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTgsNyArOTgsNyBAQCBTdHJpbmcgZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5KERv
Y3VtZW50CiAgICAgQVNTRVJUKGpzTGlzdGVuZXIpOwogICAgIGlmICghanNMaXN0ZW5lcikKICAg
ICAgICAgcmV0dXJuICIiOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgpLT5nbG9i
YWxEYXRhKCkpOwogICAgIEpTQzo6SlNPYmplY3QqIGpzRnVuY3Rpb24gPSBqc0xpc3RlbmVyLT5q
c0Z1bmN0aW9uKGRvY3VtZW50KTsKICAgICBpZiAoIWpzRnVuY3Rpb24pCiAgICAgICAgIHJldHVy
biAiIjsKQEAgLTExMiw3ICsxMTIsNyBAQCBib29sIGV2ZW50TGlzdGVuZXJIYW5kbGVyTG9jYXRp
b24oRG9jdW1lCiAgICAgQVNTRVJUKGpzTGlzdGVuZXIpOwogICAgIGlmICghanNMaXN0ZW5lcikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soanNMaXN0ZW5lci0+aXNvbGF0ZWRXb3JsZCgp
LT5nbG9iYWxEYXRhKCkpOwogICAgIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0ID0ganNMaXN0ZW5l
ci0+anNGdW5jdGlvbihkb2N1bWVudCk7CiAgICAgaWYgKCFqc09iamVjdCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rp
b25DYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRGdW5jdGlvbkNhbGwuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwx
OSArNTgsMTkgQEAgdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcgogCiB2
b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFN0cmlu
ZyYgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChq
c1N0cmluZyhtX2V4ZWMsIGFyZ3VtZW50KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50
SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoY29uc3QgSlNDOjpVU3RyaW5nJiBhcmd1bWVudCkKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKG1fZXhlYyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzU3RyaW5nKG1fZXhlYywg
YXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRB
cmd1bWVudChjb25zdCBjaGFyKiBhcmd1bWVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAgICAgbV9h
cmd1bWVudHMuYXBwZW5kKGpzU3RyaW5nKG1fZXhlYywgVVN0cmluZyhhcmd1bWVudCkpKTsKIH0K
IApAQCAtODEsMzEgKzgxLDMxIEBAIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBw
ZW5kQXIKIAogdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChs
b25nIGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQo
anNOdW1iZXIoYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVy
OjphcHBlbmRBcmd1bWVudChsb25nIGxvbmcgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwog
ICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihhcmd1bWVudCkpOwogfQogCiB2b2lkIFNj
cmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KHVuc2lnbmVkIGludCBhcmd1
bWVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVy
KGFyZ3VtZW50KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5k
QXJndW1lbnQodW5zaWduZWQgbG9uZyBhcmd1bWVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAgICAg
bV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGFyZ3VtZW50KSk7CiB9CiAKIHZvaWQgU2NyaXB0
Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQoaW50IGFyZ3VtZW50KQogewotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIoYXJndW1lbnQpKTsK
IH0KIApAQCAtMTI1LDcgKzEyNSw3IEBAIFNjcmlwdFZhbHVlIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6
Y2FsbChib28KIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IG1fdGhpc09iamVjdC5qc09i
amVjdCgpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IHRoaXNP
YmplY3QtPmdldChtX2V4ZWMsIElkZW50aWZpZXIobV9leGVjLCBzdHJpbmdUb1VTdHJpbmcobV9u
YW1lKSkpOwogICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC0xNjMsNyArMTYz
LDcgQEAgU2NyaXB0T2JqZWN0IFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y29uc3RydQogewogICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0gbV90aGlzT2JqZWN0LmpzT2JqZWN0KCk7CiAKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1f
ZXhlYyk7CiAKICAgICBKU09iamVjdCogY29uc3RydWN0b3IgPSBhc09iamVjdCh0aGlzT2JqZWN0
LT5nZXQobV9leGVjLCBJZGVudGlmaWVyKG1fZXhlYywgc3RyaW5nVG9VU3RyaW5nKG1fbmFtZSkp
KSk7CiAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKQEAgLTIwNSw3ICsyMDUsNyBA
QCBTY3JpcHRWYWx1ZSBTY3JpcHRDYWxsYmFjazo6Y2FsbCgpCiAKIFNjcmlwdFZhbHVlIFNjcmlw
dENhbGxiYWNrOjpjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbikKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAK
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxE
YXRhKG1fZnVuY3Rpb24uanNWYWx1ZSgpLCBjYWxsRGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIGJvb2wgaGFuZGxlRXhjZXB0aW9uKFNjcmlwdFN0YXRl
KgogCiBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0
ZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgU2NyaXB0T2JqZWN0JiB2YWx1ZSkKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHNjcmlwdFN0YXRlKTsKICAgICBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5w
dXREaXJlY3Qoc2NyaXB0U3RhdGUtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihzY3JpcHRTdGF0
ZSwgbmFtZSksIHZhbHVlLmpzT2JqZWN0KCkpOwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24o
c2NyaXB0U3RhdGUpOwogfQpAQCAtNzUsNyArNzUsNyBAQCBib29sIFNjcmlwdEdsb2JhbE9iamVj
dDo6c2V0KFNjcmlwdFN0YXRlCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIGJvb2wgU2NyaXB0R2xv
YmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1l
LCBJbnNwZWN0b3JGcm9udGVuZEhvc3QqIHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwog
ICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBnbG9iYWxP
YmplY3QtPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKHNj
cmlwdFN0YXRlLCBuYW1lKSwgdG9KUyhzY3JpcHRTdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSkp
OwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2NyaXB0U3RhdGUpOwpAQCAtODMsNyArODMs
NyBAQCBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlCiAKIGJvb2wgU2Ny
aXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFy
KiBuYW1lLCBJbmplY3RlZFNjcmlwdEhvc3QqIHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUp
OwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBnbG9i
YWxPYmplY3QtPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVy
KHNjcmlwdFN0YXRlLCBuYW1lKSwgdG9KUyhzY3JpcHRTdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1
ZSkpOwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2NyaXB0U3RhdGUpOwpAQCAtOTIsNyAr
OTIsNyBAQCBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlCiAKIGJvb2wg
U2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBj
aGFyKiBuYW1lLCBTY3JpcHRPYmplY3QmIHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwog
ICAgIEpTVmFsdWUganNWYWx1ZSA9IHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PmdldChzY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSkpOwogICAgIGlm
ICghanNWYWx1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA2LDcgKzEwNiw3IEBAIGJv
b2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQoU2NyaXB0U3RhdGUKIAogYm9vbCBTY3JpcHRHbG9i
YWxPYmplY3Q6OnJlbW92ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5h
bWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgc2NyaXB0U3RhdGUtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoc2NyaXB0U3RhdGUtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgc2NyaXB0U3RhdGUsIElkZW50aWZpZXIoc2NyaXB0U3RhdGUs
IG5hbWUpKTsKICAgICByZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBib29sIFNjcmlwdFZhbHVlOjpnZXRTdHJp
bmcoU2NyaXB0U3RhdGUqCiB7CiAgICAgaWYgKCFtX3ZhbHVlKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgVVN0cmluZyB1c3RyaW5nOwogICAgIGlmICgh
bV92YWx1ZS5nZXQoKS5nZXRTdHJpbmcoc2NyaXB0U3RhdGUsIHVzdHJpbmcpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xNzUsNiArMTc1LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IGpzVG9JbgogCiBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBTY3JpcHRWYWx1
ZTo6dG9JbnNwZWN0b3JWYWx1ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpIGNvbnN0CiB7Cisg
ICAgQVNTRVJUKHNjcmlwdFN0YXRlLT5nbG9iYWxEYXRhKCkuYXBpTG9jaygpLmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIHJldHVybiBqc1RvSW5zcGVjdG9yVmFsdWUoc2NyaXB0
U3RhdGUsIG1fdmFsdWUuZ2V0KCksIEluc3BlY3RvclZhbHVlOjptYXhEZXB0aCk7CiB9CiAjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBXb3JrZXJTY3JpcHRDb250cm9sbGVy
OjpXb3JrZXJTY3JpcHRDb250CiAKIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6On5Xb3JrZXJTY3Jp
cHRDb250cm9sbGVyKCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEoKSk7CiAgICAgbV93b3JrZXJDb250
ZXh0V3JhcHBlci5jbGVhcigpOwogICAgIG1fZ2xvYmFsRGF0YS5jbGVhcigpOwogfQpAQCAtNzMs
NyArNzMsNyBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQoCiB7CiAg
ICAgQVNTRVJUKCFtX3dvcmtlckNvbnRleHRXcmFwcGVyKTsKIAotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9nbG9iYWxEYXRh
LmdldCgpKTsKIAogICAgIC8vIEV4cGxpY2l0bHkgcHJvdGVjdCB0aGUgZ2xvYmFsIG9iamVjdCdz
IHByb3RvdHlwZSBzbyBpdCBpc24ndCBjb2xsZWN0ZWQKICAgICAvLyB3aGVuIHdlIGFsbG9jYXRl
IHRoZSBnbG9iYWwgb2JqZWN0LiAoT25jZSB0aGUgZ2xvYmFsIG9iamVjdCBpcyBmdWxseQpAQCAt
MTE3LDcgKzExNyw3IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28K
ICAgICBTY3JpcHRWYWx1ZSBleGNlcHRpb247CiAgICAgZXZhbHVhdGUoc291cmNlQ29kZSwgJmV4
Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbi5qc1ZhbHVlKCkpIHsKLSAgICAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2so
Z2xvYmFsRGF0YSgpKTsKICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fd29ya2VyQ29udGV4dFdy
YXBwZXItPmdsb2JhbEV4ZWMoKSwgZXhjZXB0aW9uLmpzVmFsdWUoKSk7CiAgICAgfQogfQpAQCAt
MTI4LDkgKzEyOCw5IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28K
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1f
d29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKIAogICAgIG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbERhdGEoKS50aW1l
b3V0Q2hlY2tlci5zdGFydCgpOwogCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBXb3JrZXJTY3Jp
cHRDb250cm9sbGVyOjppc0V4ZWN1dGlvbgogdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpk
aXNhYmxlRXZhbCgpCiB7CiAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxE
YXRhKCkpOwogCiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+c2V0RXZhbEVuYWJsZWQoZmFs
c2UpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmpl
Y3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3Jp
cHRPYmplY3QubW0JKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsMTMgKzEyMiwx
MiBAQCArIChpZClzY3JpcHRPYmplY3RGb3JKU09iamVjdDooSlNPYmplY3RSCiAKIHN0YXRpYyB2
b2lkIF9kaWRFeGVjdXRlKFdlYlNjcmlwdE9iamVjdCAqb2JqKQogewotICAgIEFTU0VSVChKU0xv
Y2s6OmxvY2tDb3VudCgpID4gMCk7Ci0gICAgCiAgICAgUm9vdE9iamVjdCogcm9vdCA9IFtvYmog
X3Jvb3RPYmplY3RdOwogICAgIGlmICghcm9vdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gcm9vdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBB
U1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
TG9jaygpKTsKICAgICBLSlNEaWRFeGVjdXRlRnVuY3Rpb25QdHIgZnVuYyA9IEluc3RhbmNlOjpk
aWRFeGVjdXRlRnVuY3Rpb24oKTsKICAgICBpZiAoZnVuYykKICAgICAgICAgZnVuYyhleGVjLCBy
b290LT5nbG9iYWxPYmplY3QoKSk7CkBAIC0xNDgsMTkgKzE0NywyNSBAQCAtICh2b2lkKV9zZXRJ
bXA6KEpTT2JqZWN0KilpbXAgb3JpZ2luUm9vCiAKICAgICBXZWJDb3JlOjphZGRKU1dyYXBwZXIo
c2VsZiwgaW1wKTsKIAotICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCkKKyAgICBpZiAoX3By
aXZhdGUtPnJvb3RPYmplY3QpIHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGhvbGRlcigmX3ByaXZh
dGUtPnJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICBf
cHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2NQcm90ZWN0KGltcCk7CisgICAgfQogfQogCiAtICh2b2lk
KV9zZXRPcmlnaW5Sb290T2JqZWN0OihQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KW9yaWdpblJvb3RP
YmplY3QgYW5kUm9vdE9iamVjdDooUGFzc1JlZlB0cjxSb290T2JqZWN0Pilyb290T2JqZWN0CiB7
CiAgICAgQVNTRVJUKF9wcml2YXRlLT5pbXApOwogCi0gICAgaWYgKHJvb3RPYmplY3QpCisgICAg
aWYgKHJvb3RPYmplY3QpIHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGhvbGRlcigmcm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIHJvb3RPYmplY3QtPmdj
UHJvdGVjdChfcHJpdmF0ZS0+aW1wKTsKKyAgICB9CiAKLSAgICBpZiAoX3ByaXZhdGUtPnJvb3RP
YmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFsaWQoKSkKKyAgICBpZiAoX3ByaXZh
dGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFsaWQoKSkgeworICAg
ICAgICBKU0xvY2tIb2xkZXIgaG9sZGVyKCZfcHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5nY1Vu
cHJvdGVjdChfcHJpdmF0ZS0+aW1wKTsKKyAgICB9CiAKICAgICBpZiAoX3ByaXZhdGUtPnJvb3RP
YmplY3QpCiAgICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5kZXJlZigpOwpAQCAtMjMyLDgg
KzIzNywxMCBAQCAtICh2b2lkKWRlYWxsb2MKICAgICBpZiAoX3ByaXZhdGUtPmltcCkKICAgICAg
ICAgV2ViQ29yZTo6cmVtb3ZlSlNXcmFwcGVyKF9wcml2YXRlLT5pbXApOwogCi0gICAgaWYgKF9w
cml2YXRlLT5yb290T2JqZWN0ICYmIF9wcml2YXRlLT5yb290T2JqZWN0LT5pc1ZhbGlkKCkpCisg
ICAgaWYgKF9wcml2YXRlLT5yb290T2JqZWN0ICYmIF9wcml2YXRlLT5yb290T2JqZWN0LT5pc1Zh
bGlkKCkpIHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGhvbGRlcigmX3ByaXZhdGUtPnJvb3RPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICBfcHJpdmF0ZS0+cm9v
dE9iamVjdC0+Z2NVbnByb3RlY3QoX3ByaXZhdGUtPmltcCk7CisgICAgfQogCiAgICAgaWYgKF9w
cml2YXRlLT5yb290T2JqZWN0KQogICAgICAgICBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+ZGVyZWYo
KTsKQEAgLTI0OCw4ICsyNTUsMTAgQEAgLSAodm9pZClkZWFsbG9jCiAKIC0gKHZvaWQpZmluYWxp
emUKIHsKLSAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmpl
Y3QtPmlzVmFsaWQoKSkKKyAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUt
PnJvb3RPYmplY3QtPmlzVmFsaWQoKSkgeworICAgICAgICBKU0xvY2tIb2xkZXIgaG9sZGVyKCZf
cHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAg
ICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5nY1VucHJvdGVjdChfcHJpdmF0ZS0+aW1wKTsKKyAg
ICB9CiAKICAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QpCiAgICAgICAgIF9wcml2YXRlLT5y
b290T2JqZWN0LT5kZXJlZigpOwpAQCAtMjgxLDEwICsyOTAsOSBAQCAtIChpZCljYWxsV2ViU2Ny
aXB0TWV0aG9kOihOU1N0cmluZyAqKW5hCiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7Ci0gICAgCiAgICAgLy8gTG9vayB1cCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBBU1NFUlQoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKIAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBbc2VsZiBfaW1wXS0+
Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhuYW1lKSkp
KTsKQEAgLTMyNSw3ICszMzMsNyBAQCAtIChpZClldmFsdWF0ZVdlYlNjcmlwdDooTlNTdHJpbmcg
KilzY3JpCiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkp
OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RhcnQoKTsKICAgICBKU1ZhbHVl
IHJldHVyblZhbHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBbc2Vs
ZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VT
b3VyY2UoU3RyaW5nKHNjcmlwdCkpLCBKU0M6OkpTVmFsdWUoKSwgMCk7CkBAIC0zNDYsNyArMzU0
LDcgQEAgLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgZm9yS2V5OihOU1N0cgogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKTsKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBbc2VsZiBfaW1wXS0+bWV0aG9kVGFi
bGUoKS0+cHV0KFtzZWxmIF9pbXBdLCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHN0cmluZ1RvVVN0
cmluZyhTdHJpbmcoa2V5KSkpLCBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUs
IE9iamNPYmplY3RUeXBlLCBbc2VsZiBfcm9vdE9iamVjdF0pLCBzbG90KTsKQEAgLTM3Miw3ICsz
ODAsNyBAQCAtIChpZCl2YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkKICAgICAgICAgLy8gTmVl
ZCB0byBzY29wZSB0aGlzIGxvY2sgdG8gZW5zdXJlIHRoYXQgd2UgcmVsZWFzZSB0aGUgbG9jayBi
ZWZvcmUgY2FsbGluZwogICAgICAgICAvLyBbc3VwZXIgdmFsdWVGb3JLZXk6a2V5XSB3aGljaCBt
aWdodCB0aHJvdyBhbiBleGNlcHRpb24gYW5kIGJ5cGFzcyB0aGUgSlNMb2NrIGRlc3RydWN0b3Is
CiAgICAgICAgIC8vIGxlYXZpbmcgdGhlIGxvY2sgcGVybWFuZW50bHkgaGVsZAotICAgICAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2lt
cF0tPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5
KSkpKTsKICAgICAgICAgCkBAIC0zODgsNyArMzk2LDcgQEAgLSAoaWQpdmFsdWVGb3JLZXk6KE5T
U3RyaW5nICopa2V5CiAgICAgaWYgKFtyZXN1bHRPYmogaXNLaW5kT2ZDbGFzczpbV2ViVW5kZWZp
bmVkIGNsYXNzXV0pCiAgICAgICAgIHJlc3VsdE9iaiA9IFtzdXBlciB2YWx1ZUZvcktleTprZXld
OyAgICAvLyBkZWZhdWx0cyB0byB0aHJvd2luZyBhbiBleGNlcHRpb24KIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAgICAgX2RpZEV4ZWN1dGUoc2VsZik7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdE9iajsKQEAg
LTQwMiw3ICs0MTAsNyBAQCAtICh2b2lkKXJlbW92ZVdlYlNjcmlwdEtleTooTlNTdHJpbmcgKilr
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICBbc2VsZiBfaW1wXS0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVy
dHkoW3NlbGYgX2ltcF0sIGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0
cmluZyhrZXkpKSkpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC00MjEs
NyArNDI5LDcgQEAgLSAoQk9PTCloYXNXZWJTY3JpcHRLZXk6KE5TU3RyaW5nICopa2V5CiAgICAg
RXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKICAgICBCT09MIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5oYXNQcm9wZXJ0eShleGVjLCBJ
ZGVudGlmaWVyKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkpKTsKIAogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewpAQCAtNDQxLDggKzQ0OSw4IEBAIC0gKE5TU3RyaW5n
ICopc3RyaW5nUmVwcmVzZW50YXRpb24KICAgICAgICAgcmV0dXJuIEAiVW5kZWZpbmVkIjsKICAg
ICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICBpZCByZXN1bHQg
PSBjb252ZXJ0VmFsdWVUb09iamNWYWx1ZShleGVjLCBbc2VsZiBfaW1wXSwgT2JqY09iamVjdFR5
cGUpLm9iamVjdFZhbHVlOwogCkBAIC00NjEsNyArNDY5LDcgQEAgLSAoaWQpd2ViU2NyaXB0VmFs
dWVBdEluZGV4Oih1bnNpZ25lZClpbgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290
T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBb
c2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIGluZGV4KTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgewpAQCAtNDg1LDcgKzQ5Myw3IEBAIC0gKHZvaWQpc2V0V2ViU2NyaXB0VmFsdWVBdElu
ZGV4Oih1bnNpZ24KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRp
b24oKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgpLT5w
dXRCeUluZGV4KFtzZWxmIF9pbXBdLCBleGVjLCBpbmRleCwgY29udmVydE9iamNWYWx1ZVRvVmFs
dWUoZXhlYywgJnZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RPYmplY3RdKSwgZmFs
c2UpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC01MTUsNyArNTIzLDcg
QEAgKyAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU1ZhbHVlKQogewogICAgIGlmICh2
YWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2
YWx1ZSk7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
ICAgIEpTTG9ja0hvbGRlciBsb2NrKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxE
YXRhKCkpOwogCiAgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZKU0hUTUxFbGVtZW50Ojpz
X2luZm8pKSB7CiAgICAgICAgICAgICAvLyBQbHVnaW4gZWxlbWVudHMgY2FjaGUgdGhlIGluc3Rh
bmNlIGludGVybmFsbHkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkK
QEAgLTI3MzMsNyArMjczMyw3IEBAIEVORAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiIpOwogICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPCRjbGFzc05hbWU+IHByb3RlY3QodGhpcyk7XG5c
biIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTtcblxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxE
YXRhKCkpO1xuXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTtcbiIpOwog
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
YXJncztcbiIpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFj
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFj
azo6Y2FsbGJhY2tXaXRoTm9QYXJhbQogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90
ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkp
OwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC04Miw3ICs4Miw3IEBA
IGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVAKIAogICAgIFJlZlB0cjxK
U1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdz
OwpAQCAtMTAwLDcgKzEwMCw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENs
YXNzMlAKIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTE5LDcgKzExOSw3IEBAIGJvb2wgSlNUZXN0Q2Fs
bGJhY2s6OmNhbGxiYWNrV2l0aFN0cmluZ0wKIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4g
cHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0
YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTM3LDcgKzEz
Nyw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aEJvb2xlYW4KIAogICAgIFJl
ZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0
YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmdzOwpAQCAtMTU3LDcgKzE1Nyw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNr
UmVxdWlyZXNUaGkKIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsK
IAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdl
L05QX2pzb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBf
anNvYmplY3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
TlBfanNvYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNyArMTc3LDcgQEAgYm9vbCBf
TlBOX0ludm9rZURlZmF1bHQoTlBQLCBOUE9iamVjdCogbwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAg
IAogICAgICAgICAvLyBDYWxsIHRoZSBmdW5jdGlvbiBvYmplY3QuCiAgICAgICAgIEpTVmFsdWUg
ZnVuY3Rpb24gPSBvYmotPmltcDsKQEAgLTIyNSw3ICsyMjUsNyBAQCBib29sIF9OUE5fSW52b2tl
KE5QUCBucHAsIE5QT2JqZWN0KiBvLCBOCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9v
dE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
OwotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iai0+
aW1wLT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5n
KCkpKTsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKQEAgLTI2NCw3ICsyNjQsNyBA
QCBib29sIF9OUE5fRXZhbHVhdGUoTlBQIGluc3RhbmNlLCBOUE9iamVjCiAgICAgICAgIFBsdWdp
blZpZXc6OmtlZXBBbGl2ZShpbnN0YW5jZSk7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0g
cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAgICAgICAgIFN0cmluZyBzY3JpcHRTdHJpbmcgPSBjb252ZXJ0TlBTdHJpbmdUb1VU
RjE2KHMpOwogICAgICAgICAKICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZh
bHVhdGUocm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3JpcHRT
dHJpbmcpLCBKU0M6OkpTVmFsdWUoKSk7CkBAIC0yOTAsNyArMjkwLDcgQEAgYm9vbCBfTlBOX0dl
dFByb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgICAgICBJZGVudGlm
aWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7CiAg
ICAgICAgIAotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQ7CiAg
ICAgICAgIGlmIChpLT5pc1N0cmluZygpKQogICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5pbXAt
PmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkp
OwpAQCAtMzIyLDcgKzMyMiw3IEBAIGJvb2wgX05QTl9TZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0
KiBvLCAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50
aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwogCiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7
CkBAIC0zNjMsNyArMzYzLDcgQEAgYm9vbCBfTlBOX1JlbW92ZVByb3BlcnR5KE5QUCwgTlBPYmpl
Y3QqIAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAg
ICAgICAgIGlmIChpLT5pc1N0cmluZygpKQogICAgICAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iai0+aW1wLCBleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRl
bnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICBlbHNlCkBAIC0zODYsNyArMzg2
LDcgQEAgYm9vbCBfTlBOX0hhc1Byb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIAogCiAgICAgICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7CiAgICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVw
Kj4ocHJvcGVydHlOYW1lKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIGlmIChpLT5p
c1N0cmluZygpKSB7CiAgICAgICAgICAgICBib29sIHJlc3VsdCA9IG9iai0+aW1wLT5oYXNQcm9w
ZXJ0eShleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkp
OwogICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKQEAgLTQxOCw3ICs0MTgsNyBA
QCBib29sIF9OUE5fSGFzTWV0aG9kKE5QUCwgTlBPYmplY3QqIG8sIE5QCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAg
IEpTVmFsdWUgZnVuYyA9IG9iai0+aW1wLT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50
aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKICAgICAgICAgcmV0dXJuICFmdW5jLmlzVW5kZWZpbmVkKCk7CkBAIC00NDcsNyArNDQ3LDcg
QEAgYm9vbCBfTlBOX0VudW1lcmF0ZShOUFAsIE5QT2JqZWN0KiBvLCBOUAogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9i
amVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CiAKICAgICAg
ICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMob2JqLT5pbXAsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwpAQCAtNDg0LDcg
KzQ4NCw3IEBAIGJvb2wgX05QTl9Db25zdHJ1Y3QoTlBQLCBOUE9iamVjdCogbywgY28KICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGUgY29uc3RydWN0b3Igb2JqZWN0
LgogICAgICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gb2JqLT5pbXA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvYy9jX2NsYXNzLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNv
cmUvYnJpZGdlL2MvY19jbGFzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvU2NvcGVDaGFp
bi5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvSlNPYmplY3QuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBA
IC00Nyw3ICs0OCw3IEBAIENDbGFzczo6Q0NsYXNzKE5QQ2xhc3MqIGFDbGFzcykKIAogQ0NsYXNz
Ojp+Q0NsYXNzKCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYWNxdWlyZSBhIEpTTG9jayBoZXJlPwogCiAgICAgZGVs
ZXRlQWxsVmFsdWVzKF9tZXRob2RzKTsKICAgICBfbWV0aG9kcy5jbGVhcigpOwpAQCAtOTEsNyAr
OTIsNyBAQCBNZXRob2RMaXN0IENDbGFzczo6bWV0aG9kc05hbWVkKFByb3BlcnR5CiAgICAgaWYg
KF9pc2EtPmhhc01ldGhvZCAmJiBfaXNhLT5oYXNNZXRob2Qob2JqLCBpZGVudCkpewogICAgICAg
ICBNZXRob2QqIGFNZXRob2QgPSBuZXcgQ01ldGhvZChpZGVudCk7IC8vIGRlbGV0ZWQgaW4gdGhl
IENDbGFzcyBkZXN0cnVjdG9yCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhpbnN0
LT5yb290T2JqZWN0KCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICAg
ICAgX21ldGhvZHMuc2V0KG5hbWUuaW1wbCgpLCBhTWV0aG9kKTsKICAgICAgICAgfQogICAgICAg
ICBtZXRob2RMaXN0LmFwcGVuZChhTWV0aG9kKTsKQEAgLTExNCw3ICsxMTUsNyBAQCBGaWVsZCog
Q0NsYXNzOjpmaWVsZE5hbWVkKFByb3BlcnR5TmFtZSBwCiAgICAgaWYgKF9pc2EtPmhhc1Byb3Bl
cnR5ICYmIF9pc2EtPmhhc1Byb3BlcnR5KG9iaiwgaWRlbnQpKXsKICAgICAgICAgYUZpZWxkID0g
bmV3IENGaWVsZChpZGVudCk7IC8vIGRlbGV0ZWQgaW4gdGhlIENDbGFzcyBkZXN0cnVjdG9yCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhpbnN0LT5yb290T2JqZWN0KCktPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgX2ZpZWxkcy5zZXQobmFtZS5p
bXBsKCksIGFGaWVsZCk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvYy9jX2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvYy9jX2luc3RhbmNlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAg
dm9pZCBDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZQogICAgICAgICByZXR1cm47
CiAKICAgICB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMs
IGNyZWF0ZUVycm9yKGV4ZWMsIGdsb2JhbEV4Y2VwdGlvblN0cmluZygpKSk7CiAgICAgfQogCkBA
IC0xODIsNyArMTgyLDcgQEAgSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3Rh
dAogICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdFZhcmlhbnQpOwogCiAgICAgewotICAgICAg
ICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAg
ICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAgICAgICBy
ZXR2YWwgPSBfb2JqZWN0LT5fY2xhc3MtPmludm9rZShfb2JqZWN0LCBpZGVudCwgY0FyZ3MuZGF0
YSgpLCBjb3VudCwgJnJlc3VsdFZhcmlhbnQpOwogICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9u
VG9FeGVjU3RhdGUoZXhlYyk7CkBAIC0yMTcsNyArMjE3LDcgQEAgSlNWYWx1ZSBDSW5zdGFuY2U6
Omludm9rZURlZmF1bHRNZXRob2QoRQogICAgIE5QVmFyaWFudCByZXN1bHRWYXJpYW50OwogICAg
IFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdFZhcmlhbnQpOwogICAgIHsKLSAgICAgICAgSlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgQVNT
RVJUKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVsbCgpKTsKICAgICAgICAgcmV0dmFsID0g
X29iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0KF9vYmplY3QsIGNBcmdzLmRhdGEoKSwgY291
bnQsICZyZXN1bHRWYXJpYW50KTsKICAgICAgICAgbW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0
YXRlKGV4ZWMpOwpAQCAtMjU2LDcgKzI1Niw3IEBAIEpTVmFsdWUgQ0luc3RhbmNlOjppbnZva2VD
b25zdHJ1Y3QoRXhlY1MKICAgICBOUFZhcmlhbnQgcmVzdWx0VmFyaWFudDsKICAgICBWT0lEX1RP
X05QVkFSSUFOVChyZXN1bHRWYXJpYW50KTsKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7CiAgICAgICAgIEFTU0VSVChnbG9i
YWxFeGNlcHRpb25TdHJpbmcoKS5pc051bGwoKSk7CiAgICAgICAgIHJldHZhbCA9IF9vYmplY3Qt
Pl9jbGFzcy0+Y29uc3RydWN0KF9vYmplY3QsIGNBcmdzLmRhdGEoKSwgY291bnQsICZyZXN1bHRW
YXJpYW50KTsKICAgICAgICAgbW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpA
QCAtMzE1LDcgKzMxNSw3IEBAIHZvaWQgQ0luc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNT
dGEKICAgICBOUElkZW50aWZpZXIqIGlkZW50aWZpZXJzOwogCiAgICAgewotICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICBB
U1NFUlQoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAgICAgICBib29sIG9r
ID0gX29iamVjdC0+X2NsYXNzLT5lbnVtZXJhdGUoX29iamVjdCwgJmlkZW50aWZpZXJzLCAmY291
bnQpOwogICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDcgKzQ5LDcgQEAgSlNWYWx1ZSBDRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdAog
CiAgICAgICAgIGJvb2wgcmVzdWx0OwogICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAg
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgICAg
IHJlc3VsdCA9IG9iai0+X2NsYXNzLT5nZXRQcm9wZXJ0eShvYmosIF9maWVsZElkZW50aWZpZXIs
ICZwcm9wZXJ0eSk7CiAgICAgICAgICAgICBDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25U
b0V4ZWNTdGF0ZShleGVjKTsKICAgICAgICAgfQpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIENGaWVs
ZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0CiAgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBW
YXJpYW50KGV4ZWMsIGFWYWx1ZSwgJnZhcmlhbnQpOwogCiAgICAgICAgIHsKLSAgICAgICAgICAg
IEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwog
ICAgICAgICAgICAgb2JqLT5fY2xhc3MtPnNldFByb3BlcnR5KG9iaiwgX2ZpZWxkSWRlbnRpZmll
ciwgJnZhcmlhbnQpOwogICAgICAgICAgICAgQ0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9u
VG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9jL2NfdXRpbGl0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2Mv
Y191dGlsaXR5LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdl
L2MvY191dGlsaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMg
U3RyaW5nIGNvbnZlcnRVVEY4VG9VVEYxNldpdGhMYXRpCiAvLyBWYXJpYW50IHZhbHVlIG11c3Qg
YmUgcmVsZWFzZWQgd2l0aCBOUFJlbGVhc2VWYXJpYW50VmFsdWUoKQogdm9pZCBjb252ZXJ0VmFs
dWVUb05QVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIE5QVmFyaWFudCog
cmVzdWx0KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0
KTsKIApAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhl
Y1N0YXRlKiAKIAogSlNWYWx1ZSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IE5QVmFyaWFudCogdmFyaWFudCwgUm9vdE9iamVjdCogcm9vdE9iamVjdCkKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgIAogICAgIE5QVmFyaWFudFR5cGUgdHlwZSA9IHZhcmlhbnQtPnR5
cGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVj
dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBAIGpvYmplY3QgSmF2YUpTT2Jq
ZWN0OjpjYWxsKGpzdHJpbmcgbWV0aG8KICAgICAKICAgICAvLyBMb29rdXAgdGhlIGZ1bmN0aW9u
IG9iamVjdC4KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCiAgICAgSWRlbnRpZmllciBpZGVu
dGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWV0aG9kTmFtZSkuaW1wbCgpKTsKICAgICBKU1ZhbHVl
IGZ1bmN0aW9uID0gX2ltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXIpOwpAQCAtMzA3LDEyICszMDcs
MTIgQEAgam9iamVjdCBKYXZhSlNPYmplY3Q6OmV2YWwoanN0cmluZyBzY3JpcAogewogICAgIExP
RyhMaXZlQ29ubmVjdCwgIkphdmFKU09iamVjdDo6ZXZhbCBzY3JpcHQgPSAlcyIsIEphdmFTdHJp
bmcoc2NyaXB0KS51dGY4KCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKLSAgICAKICAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gdGhpcy0+cm9vdE9iamVj
dCgpOwogICAgIGlmICghcm9vdE9iamVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsK
KyAgICAKICAgICByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVv
dXRDaGVja2VyLnN0YXJ0KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmV2YWx1YXRlKHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoSmF2YVN0cmluZyhzY3Jp
cHQpLmltcGwoKSkpOwogICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCkudGltZW91dENoZWNrZXIuc3RvcCgpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIGpvYmplY3QgSmF2
YUpTT2JqZWN0OjpnZXRNZW1iZXIoanN0cmluZyAKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgCi0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IF9pbXAtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMs
IEphdmFTdHJpbmcobWVtYmVyTmFtZSkuaW1wbCgpKSk7CiAKICAgICByZXR1cm4gY29udmVydFZh
bHVlVG9KT2JqZWN0KHJlc3VsdCk7CkBAIC0zNDYsNyArMzQ2LDcgQEAgdm9pZCBKYXZhSlNPYmpl
Y3Q6OnNldE1lbWJlcihqc3RyaW5nIG1lbQogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9i
amVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgX2ltcC0+bWV0aG9kVGFibGUoKS0+cHV0KF9pbXAs
IGV4ZWMsIElkZW50aWZpZXIoZXhlYywgSmF2YVN0cmluZyhtZW1iZXJOYW1lKS5pbXBsKCkpLCBj
b252ZXJ0Sk9iamVjdFRvVmFsdWUoZXhlYywgdmFsdWUpLCBzbG90KTsKIH0KQEAgLTM2MSw3ICsz
NjEsNyBAQCB2b2lkIEphdmFKU09iamVjdDo6cmVtb3ZlTWVtYmVyKGpzdHJpbmcgCiAgICAgICAg
IHJldHVybjsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBfaW1wLT5tZXRob2RUYWJsZSgp
LT5kZWxldGVQcm9wZXJ0eShfaW1wLCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmco
bWVtYmVyTmFtZSkuaW1wbCgpKSk7CiB9CiAKQEAgLTM3Niw3ICszNzYsNyBAQCBqb2JqZWN0IEph
dmFKU09iamVjdDo6Z2V0U2xvdChqaW50IGluZGV4CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IF9pbXAtPmdldChleGVjLCBpbmRleCk7CiAKICAgICByZXR1
cm4gY29udmVydFZhbHVlVG9KT2JqZWN0KHJlc3VsdCk7CkBAIC0zOTIsNyArMzkyLDcgQEAgdm9p
ZCBKYXZhSlNPYmplY3Q6OnNldFNsb3QoamludCBpbmRleCwgagogICAgICAgICByZXR1cm47CiAK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgX2ltcC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRl
eChfaW1wLCBleGVjLCAodW5zaWduZWQpaW5kZXgsIGNvbnZlcnRKT2JqZWN0VG9WYWx1ZShleGVj
LCB2YWx1ZSksIGZhbHNlKTsKIH0KIApAQCAtNDA1LDkgKzQwNSw5IEBAIGpzdHJpbmcgSmF2YUpT
T2JqZWN0Ojp0b1N0cmluZygpIGNvbnN0CiAgICAgaWYgKCFyb290T2JqZWN0KQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAg
SlNPYmplY3QgKnRoaXNPYmogPSBjb25zdF9jYXN0PEpTT2JqZWN0Kj4oX2ltcCk7CiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8anN0cmluZz4oY29udmVydFZhbHVlVG9KVmFsdWUoZXhlYywgcm9vdE9iamVjdCwgdGhpc09i
aiwgSmF2YVR5cGVPYmplY3QsICJqYXZhLmxhbmcuU3RyaW5nIikubCk7CiB9CkBAIC00NjMsMTMg
KzQ2MywxMyBAQCBqbG9uZyBKYXZhSlNPYmplY3Q6OmNyZWF0ZU5hdGl2ZShqbG9uZyBuCiAKIGpv
YmplY3QgSmF2YUpTT2JqZWN0Ojpjb252ZXJ0VmFsdWVUb0pPYmplY3QoSlNWYWx1ZSB2YWx1ZSkg
Y29uc3QKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIAog
ICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSB0aGlzLT5yb290T2JqZWN0KCk7CiAgICAgaWYg
KCFyb290T2JqZWN0KQogICAgICAgICByZXR1cm4gMDsKIAorICAgIAogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKICAg
ICBqb2JqZWN0IHJlc3VsdCA9IDA7CiAgICAgCkBAIC01NTQsNyArNTU0LDcgQEAgSlNWYWx1ZSBK
YXZhSlNPYmplY3Q6OmNvbnZlcnRKT2JqZWN0VG9WYQogICAgIC8vIGZpZ3VyZSAyMi00LgogICAg
IGpvYmplY3QgY2xhc3NPZkluc3RhbmNlID0gY2FsbEpOSU1ldGhvZDxqb2JqZWN0Pih0aGVPYmpl
Y3QsICJnZXRDbGFzcyIsICIoKUxqYXZhL2xhbmcvQ2xhc3M7Iik7CiAgICAgaWYgKCFjbGFzc09m
SW5zdGFuY2UpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHJldHVybiBKYXZhSW5z
dGFuY2U6OmNyZWF0ZSh0aGVPYmplY3QsIF9yb290T2JqZWN0KS0+Y3JlYXRlUnVudGltZU9iamVj
dChleGVjKTsKICAgICB9CiAKQEAgLTU2Myw3ICs1NjMsNyBAQCBKU1ZhbHVlIEphdmFKU09iamVj
dDo6Y29udmVydEpPYmplY3RUb1ZhCiAgICAgLy8gcG9pbnRlciBhbmQgc3RvcmVzIGl0IGluIHRo
aXMgb2JqZWN0LCBzbyB0aGF0IGl0IGNhbiBiZSByZXRyaWV2ZWQgYmVsb3cuCiAgICAganN0cmlu
ZyBjbGFzc05hbWUgPSAoanN0cmluZyljYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGNsYXNzT2ZJbnN0
YW5jZSwgImdldE5hbWUiLCAiKClMamF2YS9sYW5nL1N0cmluZzsiKTsKICAgICBpZiAoIWNsYXNz
TmFtZSB8fCAoc3RyY21wKEphdmFTdHJpbmcoY2xhc3NOYW1lKS51dGY4KCksICJzdW4ucGx1Z2lu
LmphdmFzY3JpcHQud2Via2l0LkpTT2JqZWN0IikgIT0gMCkpIHsKLSAgICAgICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgICAgIHJldHVybiBKYXZhSW5zdGFuY2U6OmNyZWF0ZSh0aGVPYmplY3QsIF9yb290
T2JqZWN0KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX29iamMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYnJpZGdlL2puaS9qbmlfb2JqYy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfb2JqYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjIsNyAr
NjIsNyBAQCBib29sIEpTQzo6QmluZGluZ3M6OmRpc3BhdGNoSk5JQ2FsbChFeGVjCiAgICAgICAg
IC8vIGltcGxlbWVudGVkIGluIFdlYkNvcmUgd2lsbCBndWFyYW50ZWUgdGhhdCBvbmx5IGFwcHJv
cHJpYXRlIEphdmFTY3JpcHQKICAgICAgICAgLy8gY2FuIHJlZmVyZW5jZSB0aGUgYXBwbGV0Lgog
ICAgICAgICB7Ci0gICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoZXhlYyk7CiAgICAgICAgICAgICByZXN1bHQgPSBbdmlldyB3ZWJQbHVnSW5D
YWxsSmF2YTpvYmogaXNTdGF0aWM6aXNTdGF0aWMgcmV0dXJuVHlwZTpyZXR1cm5UeXBlIG1ldGhv
ZDptZXRob2RJRCBhcmd1bWVudHM6YXJncyBjYWxsaW5nVVJMOm5pbCBleGNlcHRpb25EZXNjcmlw
dGlvbjomX2V4Y2VwdGlvbkRlc2NyaXB0aW9uXTsKICAgICAgICAgfQogCkBAIC03Miw3ICs3Miw3
IEBAIGJvb2wgSlNDOjpCaW5kaW5nczo6ZGlzcGF0Y2hKTklDYWxsKEV4ZWMKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3Iod2ViUGx1Z0luQ2FsbEphdmE6bWV0aG9kOnJldHVyblR5cGU6YXJndW1lbnRzOild
KSB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
ZXhlYyk7CiAgICAgICAgIHJlc3VsdCA9IFt2aWV3IHdlYlBsdWdJbkNhbGxKYXZhOm9iaiBtZXRo
b2Q6bWV0aG9kSUQgcmV0dXJuVHlwZTpyZXR1cm5UeXBlIGFyZ3VtZW50czphcmdzXTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9q
c2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysg
U291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzQsNyArMTc0LDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5
SW5zdGFuY2VUb0phdgogCiBqdmFsdWUgY29udmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiBl
eGVjLCBSb290T2JqZWN0KiByb290T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBKYXZhVHlwZSBqYXZh
VHlwZSwgY29uc3QgY2hhciogamF2YUNsYXNzTmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAg
anZhbHVlIHJlc3VsdDsKICAgICBtZW1zZXQoJnJlc3VsdCwgMCwgc2l6ZW9mKGp2YWx1ZSkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3Bw
CShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZh
Q2xhc3NKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIEphdmFDbGFzczo6
SmF2YUNsYXNzKGpvYmplY3QgYW5JbnN0YW5jZSkKICAgICAgICAgICAgIGpvYmplY3QgYUpGaWVs
ZCA9IGVudi0+R2V0T2JqZWN0QXJyYXlFbGVtZW50KChqb2JqZWN0QXJyYXkpZmllbGRzLCBpKTsK
ICAgICAgICAgICAgIEphdmFGaWVsZCogYUZpZWxkID0gbmV3IEphdmFGaWVsZChlbnYsIGFKRmll
bGQpOyAvLyBkZWxldGVkIGluIHRoZSBKYXZhQ2xhc3MgZGVzdHJ1Y3RvcgogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNMb2NrIGhlcmU/
CiAgICAgICAgICAgICAgICAgbV9maWVsZHMuc2V0KGFGaWVsZC0+bmFtZSgpLmltcGwoKSwgYUZp
ZWxkKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoYUpG
aWVsZCk7CkBAIC03OSw3ICs3OSw3IEBAIEphdmFDbGFzczo6SmF2YUNsYXNzKGpvYmplY3QgYW5J
bnN0YW5jZSkKICAgICAgICAgICAgIEphdmFNZXRob2QqIGFNZXRob2QgPSBuZXcgSmF2YU1ldGhv
ZChlbnYsIGFKTWV0aG9kKTsgLy8gZGVsZXRlZCBpbiB0aGUgSmF2YUNsYXNzIGRlc3RydWN0b3IK
ICAgICAgICAgICAgIE1ldGhvZExpc3QqIG1ldGhvZExpc3Q7CiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGFjcXVpcmUgYSBKU0xvY2sgaGVyZT8KIAogICAg
ICAgICAgICAgICAgIG1ldGhvZExpc3QgPSBtX21ldGhvZHMuZ2V0KGFNZXRob2QtPm5hbWUoKS5p
bXBsKCkpOwogICAgICAgICAgICAgICAgIGlmICghbWV0aG9kTGlzdCkgewpAQCAtMTAwLDcgKzEw
MCw3IEBAIEphdmFDbGFzczo6fkphdmFDbGFzcygpCiB7CiAgICAgZmFzdEZyZWUoY29uc3RfY2Fz
dDxjaGFyKj4obV9uYW1lKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYWNxdWlyZSBhIEpTTG9jayBoZXJlPwogCiAg
ICAgZGVsZXRlQWxsVmFsdWVzKG1fZmllbGRzKTsKICAgICBtX2ZpZWxkcy5jbGVhcigpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0Mu
Y3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9K
YXZhSW5zdGFuY2VKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIENsYXNz
KiBKYXZhSW5zdGFuY2U6OmdldENsYXNzKCkgY29uc3QKIAogSlNWYWx1ZSBKYXZhSW5zdGFuY2U6
OnN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAg
ICAganN0cmluZyBzdHJpbmdWYWx1ZSA9IChqc3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVjdD4o
bV9pbnN0YW5jZS0+aW5zdGFuY2UoKSwgInRvU3RyaW5nIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7
Iik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFNZXRo
b2RKU0MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5p
L2pzYy9KYXZhTWV0aG9kSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBK
YXZhTWV0aG9kOjp+SmF2YU1ldGhvZCgpCiAvLyB3ZSBnZXQgJy4nIGJldHdlZW4gY29tcG9uZW50
cyBmcm9tIHRoZSByZWZsZWN0aW9uIEFQSS4KIHN0YXRpYyB2b2lkIGFwcGVuZENsYXNzTmFtZShT
dHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBjaGFyKiBjbGFzc05hbWUpCiB7Ci0gICAgQVNT
RVJUKEpTTG9jazo6bG9ja0NvdW50KCkgPiAwKTsKKyAgICBBU1NFUlQoSlNDOjpKU0dsb2JhbERh
dGE6OnNoYXJlZEluc3RhbmNlKCkuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2Nr
KCkpOwogCiAgICAgY2hhciogYyA9IGZhc3RTdHJEdXAoY2xhc3NOYW1lKTsKIApAQCAtMTExLDcg
KzExMSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZENsYXNzTmFtZShTdHJpbmdCdWlsZGUKIGNvbnN0
IGNoYXIqIEphdmFNZXRob2Q6OnNpZ25hdHVyZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NpZ25h
dHVyZSkgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGFjcXVpcmUgYSBKU0xvY2sgaGVyZT8KIAogICAgICAg
ICBTdHJpbmdCdWlsZGVyIHNpZ25hdHVyZUJ1aWxkZXI7CiAgICAgICAgIHNpZ25hdHVyZUJ1aWxk
ZXIuYXBwZW5kKCcoJyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZh
U3RyaW5nSlNDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2Mv
SmF2YVN0cmluZ0pTQy5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvam5pL2pzYy9KYXZhU3RyaW5nSlNDLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKICNkZWZpbmUgSmF2YVN0cmluZ0pTQ19oCiAKICNpbmNsdWRlICJKTklVdGlsaXR5LmgiCisj
aW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiSmF2YUluc3RhbmNlSlNDLmgi
CiAKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgpAQCAtNTIsMjAgKzUzLDIwIEBAIHB1Ymxp
YzoKIAogICAgIEphdmFTdHJpbmcoKQogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6SlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIG1faW1wbCA9IFVT
dHJpbmcoKS5pbXBsKCk7CiAgICAgfQogCiAgICAgfkphdmFTdHJpbmcoKQogICAgIHsKLSAgICAg
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CiAgICAgICAgIG1faW1wbCA9IDA7CiAgICAgfQogCiAgICAgY29uc3QgY2hhciogdXRmOCgpIGNv
bnN0CiAgICAgewogICAgICAgICBpZiAoIW1fdXRmOFN0cmluZy5kYXRhKCkpIHsKLSAgICAgICAg
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKICAgICAgICAgICAgIG1fdXRmOFN0cmluZyA9IFVTdHJpbmcobV9pbXBsKS51dGY4KCk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1fdXRmOFN0cmluZy5kYXRhKCk7CkBAIC03OSw3
ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGludCBzaXplID0gZS0+R2V0U3RyaW5nTGVuZ3Ro
KHMpOwogICAgICAgICBjb25zdCBqY2hhciogdWMgPSBnZXRVQ2hhcmFjdGVyc0Zyb21KU3RyaW5n
SW5FbnYoZSwgcyk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJDb3JlOjpK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIG1faW1w
bCA9IFVTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHVjKSwgc2l6ZSkuaW1w
bCgpOwogICAgICAgICB9CiAgICAgICAgIHJlbGVhc2VVQ2hhcmFjdGVyc0ZvckpTdHJpbmdJbkVu
dihlLCBzLCB1Yyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3Bw
CShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpT
Qy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgSlNPYmplY3QqIEluc3RhbmNl
OjpjcmVhdGVSdW50aW1lT2JqZWN0KAogICAgIGlmIChSdW50aW1lT2JqZWN0KiBleGlzdGluZ09i
amVjdCA9IG1fcnVudGltZU9iamVjdC5nZXQoKSkKICAgICAgICAgcmV0dXJuIGV4aXN0aW5nT2Jq
ZWN0OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBSdW50aW1lT2JqZWN0KiBuZXdPYmplY3QgPSBuZXdS
dW50aW1lT2JqZWN0KGV4ZWMpOwogICAgIG1fcnVudGltZU9iamVjdCA9IFBhc3NXZWFrPFJ1bnRp
bWVPYmplY3Q+KG5ld09iamVjdCk7CiAgICAgbV9yb290T2JqZWN0LT5hZGRSdW50aW1lT2JqZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3T2JqZWN0KTsKQEAgLTEwMSw3ICsxMDEsNyBAQCBKU09i
amVjdCogSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoCiAKIFJ1bnRpbWVPYmplY3QqIElu
c3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogCiAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJv
dG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAogICAgIC8vIFdlIG5lZWQgdG8g
cGFzcyBpbiB0aGUgcmlnaHQgZ2xvYmFsIG9iamVjdCBmb3IgImkiLgpJbmRleDogU291cmNlL1dl
YkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCShyZXZpc2lvbiAxMjA5MjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgT2JqY0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0
aW9uVG8KICAgICB9CiAKICAgICBpZiAoIXNfZXhjZXB0aW9uRW52aXJvbm1lbnQgfHwgc19leGNl
cHRpb25FbnZpcm9ubWVudCA9PSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpIHsKLSAgICAg
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHRocm93RXJyb3IoZXhlYywgc19leGNlcHRpb24pOwog
ICAgIH0KIApAQCAtMjM5LDcgKzIzOSw3IEBAIEpTVmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VP
YmpjTWV0aG9kKEUKIHsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAg
Ci0gICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0
IHVud2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVz
ZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogCiAgICAgc2V0R2xvYmFsRXhjZXB0aW9uKG5pbCk7
CiAgICAgCkBAIC0zNTQsNyArMzU0LDcgQEAgSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZURl
ZmF1bHRNZXRobwogewogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKIAotICAg
IEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndp
bmRzIGluY29ycmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhl
eGVjKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQg
dW53aW5kcyBpbmNvcnJlY3RseS4KICAgICBzZXRHbG9iYWxFeGNlcHRpb24obmlsKTsKICAgICAK
IEB0cnkgewpAQCAtNDExLDcgKzQxMSw3IEBAIGJvb2wgT2JqY0luc3RhbmNlOjpzZXRWYWx1ZU9m
VW5kZWZpbmVkRmkKICAgICBpZiAoIVt0YXJnZXRPYmplY3QgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihzZXRWYWx1ZTpmb3JVbmRlZmluZWRLZXk6KV0pCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVz
ZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJl
Y2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KIAogICAgIC8vIFRoaXMgY2hlY2sgaXMgbm90
IHJlYWxseSBuZWNlc3NhcnkgYmVjYXVzZSBOU09iamVjdCBpbXBsZW1lbnRzCiAgICAgLy8gc2V0
VmFsdWU6Zm9yVW5kZWZpbmVkS2V5OiwgYW5kIHVuZm9ydHVuYXRlbHkgdGhlIGRlZmF1bHQgaW1w
bGVtZW50YXRpb24KQEAgLTQ0Myw3ICs0NDMsNyBAQCBKU1ZhbHVlIE9iamNJbnN0YW5jZTo6Z2V0
VmFsdWVPZlVuZGVmaW5lCiAgICAgCiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gZ2V0T2JqZWN0KCk7
CiAKLSAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2Ug
aXQgdW53aW5kcyBpbmNvcnJlY3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoZXhlYyk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNh
dXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAKICAgICAvLyBUaGlzIGNoZWNrIGlzIG5vdCBy
ZWFsbHkgbmVjZXNzYXJ5IGJlY2F1c2UgTlNPYmplY3QgaW1wbGVtZW50cwogICAgIC8vIHZhbHVl
Rm9yVW5kZWZpbmVkS2V5OiwgYW5kIHVuZm9ydHVuYXRlbHkgdGhlIGRlZmF1bHQgaW1wbGVtZW50
YXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0J
KHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVu
dGltZS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTIsMTkgKzkyLDE4IEBAIEpTVmFsdWUgT2JqY0Zp
ZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShFeGUKICAgICAKICAgICBpZCB0YXJnZXRPYmplY3QgPSAo
c3RhdGljX2Nhc3Q8Y29uc3QgT2JqY0luc3RhbmNlKj4oaW5zdGFuY2UpKS0+Z2V0T2JqZWN0KCk7
CiAKLSAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2Ug
aXQgdW53aW5kcyBpbmNvcnJlY3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoZXhlYyk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNh
dXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAKICAgICBAdHJ5IHsKICAgICAgICAgaWYgKGlk
IG9iamNWYWx1ZSA9IFt0YXJnZXRPYmplY3QgdmFsdWVGb3JLZXk6KE5TU3RyaW5nICopX25hbWUu
Z2V0KCldKQogICAgICAgICAgICAgcmVzdWx0ID0gY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhl
YywgJm9iamNWYWx1ZSwgT2JqY09iamVjdFR5cGUsIGluc3RhbmNlLT5yb290T2JqZWN0KCkpOwog
ICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgICAgICBPYmpj
SW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKICAgICAgICAg
fQogICAgIH0gQGNhdGNoKE5TRXhjZXB0aW9uKiBsb2NhbEV4Y2VwdGlvbikgewotICAgICAgICBK
U0xvY2s6OmxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgICAgIHRocm93RXJyb3IoZXhlYywgW2xvY2FsRXhjZXB0aW9uIHJl
YXNvbl0pOwotICAgICAgICBKU0xvY2s6OnVubG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwog
ICAgIH0KIAogICAgIC8vIFdvcmsgYXJvdW5kIHByb2JsZW0gaW4gc29tZSB2ZXJzaW9ucyBvZiBH
Q0Mgd2hlcmUgcmVzdWx0IGdldHMgbWFya2VkIHZvbGF0aWxlIGFuZApAQCAtMTI1LDE4ICsxMjQs
MTcgQEAgdm9pZCBPYmpjRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjUwogICAgIGlkIHRh
cmdldE9iamVjdCA9IChzdGF0aWNfY2FzdDxjb25zdCBPYmpjSW5zdGFuY2UqPihpbnN0YW5jZSkp
LT5nZXRPYmplY3QoKTsKICAgICBpZCB2YWx1ZSA9IGNvbnZlcnRWYWx1ZVRvT2JqY09iamVjdChl
eGVjLCBhVmFsdWUpOwogCi0gICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBz
Y29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0
cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogCiAgICAgQHRyeSB7CiAg
ICAgICAgIFt0YXJnZXRPYmplY3Qgc2V0VmFsdWU6dmFsdWUgZm9yS2V5OihOU1N0cmluZyAqKV9u
YW1lLmdldCgpXTsKICAgICAgICAgewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
ICAgICAgICAgT2JqY0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhl
Yyk7CiAgICAgICAgIH0KICAgICB9IEBjYXRjaChOU0V4Y2VwdGlvbiogbG9jYWxFeGNlcHRpb24p
IHsKLSAgICAgICAgSlNMb2NrOjpsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFtsb2Nh
bEV4Y2VwdGlvbiByZWFzb25dKTsKLSAgICAgICAgSlNMb2NrOjp1bmxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpj
L29iamNfdXRpbGl0eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2Jq
Yy9vYmpjX3V0aWxpdHkubW0JKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbQkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBA
QCBPYmpjVmFsdWUgY29udmVydFZhbHVlVG9PYmpjVmFsdWUoRXhlY1N0CiAKICAgICBzd2l0Y2gg
KHR5cGUpIHsKICAgICAgICAgY2FzZSBPYmpjT2JqZWN0VHlwZTogewotICAgICAgICAgICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCAq
b3JpZ2luR2xvYmFsT2JqZWN0ID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpOwogICAgICAg
ICAgICAgUm9vdE9iamVjdCogb3JpZ2luUm9vdE9iamVjdCA9IGZpbmRSb290T2JqZWN0KG9yaWdp
bkdsb2JhbE9iamVjdCk7CkBAIC0xNDYsNyArMTQ2LDcgQEAgT2JqY1ZhbHVlIGNvbnZlcnRWYWx1
ZVRvT2JqY1ZhbHVlKEV4ZWNTdAogCiBKU1ZhbHVlIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgTlNTdHJpbmcgKm5zc3RyaW5nKQogewotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
CiAgICAgdW5pY2hhciAqY2hhcnM7CiAgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IFtuc3N0cmlu
ZyBsZW5ndGhdOwpAQCAtMTc4LDcgKzE3OCw3IEBAIEpTVmFsdWUgY29udmVydE5TU3RyaW5nVG9T
dHJpbmcoRXhlY1N0YXQKICovCiBKU1ZhbHVlIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgdm9pZCogYnVmZmVyLCBPYmpjVmFsdWVUeXBlIHR5cGUsIFJvb3RPYmplY3Qq
IHJvb3RPYmplY3QpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICBzd2l0Y2ggKHR5cGUpIHsK
ICAgICAgICAgY2FzZSBPYmpjT2JqZWN0VHlwZTogewpJbmRleDogU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3F0L3F0X2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcXQvcXRfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3
IEBAIFF0SW5zdGFuY2U6OlF0SW5zdGFuY2UoUU9iamVjdCogbywgUGFzc1IKIAogUXRJbnN0YW5j
ZTo6flF0SW5zdGFuY2UoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAKICAgICBjYWNoZWRJbnN0YW5jZXMucmVtb3ZlKG1faGFzaGtleSk7CiAKQEAg
LTExOSw3ICsxMTksNyBAQCBRdEluc3RhbmNlOjp+UXRJbnN0YW5jZSgpCiAKIFBhc3NSZWZQdHI8
UXRJbnN0YW5jZT4gUXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShRT2JqZWN0KiBvLCBQYXNzUmVm
UHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3QsIFZhbHVlT3duZXJzaGlwIG93bmVyc2hpcCkKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgZm9y
ZWFjaCAoUXRJbnN0YW5jZSogaW5zdGFuY2UsIGNhY2hlZEluc3RhbmNlcy52YWx1ZXMobykpCiAg
ICAgICAgIGlmIChpbnN0YW5jZS0+cm9vdE9iamVjdCgpID09IHJvb3RPYmplY3QpIHsKQEAgLTE4
MCw3ICsxODAsNyBAQCBDbGFzcyogUXRJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdAogCiBSdW50
aW1lT2JqZWN0KiBRdEluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogICAgIG1fbWV0aG9kcy5jbGVhcigpOwogICAgIHJldHVybiBRdFJ1
bnRpbWVPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRo
aXMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50
aW1lLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X3BpeG1hcHJ1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsNyArNDIwLDcgQEAgUnVu
dGltZU9iamVjdCogUXRQaXhtYXBJbnN0YW5jZTo6bmV3UnVudAogCiBKU09iamVjdCogUXRQaXht
YXBJbnN0YW5jZTo6Y3JlYXRlUGl4bWFwUnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFBh
c3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCwgY29uc3QgUVZhcmlhbnQmIGRhdGEpCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICBSZWZQdHI8UXRQaXhtYXBJbnN0YW5jZT4gaW5zdGFuY2UgPSBhZG9wdFJl
ZihuZXcgUXRQaXhtYXBJbnN0YW5jZShyb290LCBkYXRhKSk7CiAgICAgcmV0dXJuIGluc3RhbmNl
LT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3F0L3F0X3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9xdC9xdF9ydW50aW1lLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNyArMjMwLDcg
QEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdAogICAgICAgICByZXR1
cm4gUVZhcmlhbnQoKTsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTUmVhbFR5cGUgdHlw
ZSA9IHZhbHVlUmVhbFR5cGUoZXhlYywgdmFsdWUpOwogICAgIGlmIChoaW50ID09IFFNZXRhVHlw
ZTo6Vm9pZCkgewogICAgICAgICBzd2l0Y2godHlwZSkgewpAQCAtODI0LDcgKzgyNCw3IEBAIEpT
VmFsdWUgY29udmVydFFWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUKICAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBpZiAodHlwZSA9PSBRTWV0YVR5
cGU6OkJvb2wpCiAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4odmFyaWFudC50b0Jvb2woKSk7CkBA
IC0xNDIwLDcgKzE0MjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpj
YWxsCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICAvLyBXZSBoYXZlIHRvIHBpY2sgYSBtZXRob2QgdGhhdCBtYXRjaGVzLi4KLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogCiAgICAgUU9iamVjdCAqb2JqID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7CiAgICAg
aWYgKG9iaikgewpAQCAtMTU2MSw3ICsxNTYxLDcgQEAgRW5jb2RlZEpTVmFsdWUgUXRSdW50aW1l
Q29ubmVjdGlvbk1ldGhvZAogewogICAgIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhKiBk
ID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCAqPihleGVjLT5jYWxsZWUo
KSktPmRfZnVuYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIFFPYmplY3QqIHNlbmRlciA9IGQt
Pm1faW5zdGFuY2UtPmdldE9iamVjdCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cXQvcXRfcnVudGltZV9xdDQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9xdC9xdF9ydW50aW1lX3F0NC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lX3F0NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw3
ICsyMzAsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAg
ICAgIHJldHVybiBRVmFyaWFudCgpOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNSZWFs
VHlwZSB0eXBlID0gdmFsdWVSZWFsVHlwZShleGVjLCB2YWx1ZSk7CiAgICAgaWYgKGhpbnQgPT0g
UU1ldGFUeXBlOjpWb2lkKSB7CiAgICAgICAgIHN3aXRjaCh0eXBlKSB7CkBAIC04MjQsNyArODI0
LDcgQEAgSlNWYWx1ZSBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0ZQogICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIGlmICh0eXBlID09
IFFNZXRhVHlwZTo6Qm9vbCkKICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih2YXJpYW50LnRvQm9v
bCgpKTsKQEAgLTE0MjksNyArMTQyOSw3IEBAIEVuY29kZWRKU1ZhbHVlIFF0UnVudGltZU1ldGFN
ZXRob2Q6OmNhbGwKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIC8vIFdlIGhhdmUgdG8gcGljayBhIG1ldGhvZCB0aGF0IG1hdGNoZXMuLgotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAKICAgICBRT2JqZWN0ICpvYmogPSBkLT5tX2luc3RhbmNlLT5nZXRPYmplY3Qo
KTsKICAgICBpZiAob2JqKSB7CkBAIC0xNTcwLDcgKzE1NzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBR
dFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kCiB7CiAgICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhv
ZERhdGEqIGQgPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kICo+KGV4ZWMt
PmNhbGxlZSgpKS0+ZF9mdW5jKCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgUU9iamVjdCogc2Vu
ZGVyID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUx
LDcgKzU1MSw3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmUKICAg
ICBtX2NvbnRleHRTdGF0ZVNhdmVyID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIoKm1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSkpOwogCiAjaWYgVVNFKEpTQykKLSAgICBK
U0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpKTsK
ICAgICBzaXplX3QgbnVtQnl0ZXMgPSA0ICogbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCku
d2lkdGgoKSAqIG1faW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLmhlaWdodCgpOwogICAgIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVt
b3J5Q29zdChudW1CeXRlcyk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEltYWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsOCArODEsOCBAQCB2b2lk
IEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiAjaWYgVVNFKEpTQykKICAgICBp
ZiAoIWxvYWRFcnJvcikgewogICAgICAgICBpZiAoIWVsZW0tPmluRG9jdW1lbnQoKSkgewotICAg
ICAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAg
ICAgICAgICAgICBKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCk7CisgICAgICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKGdsb2JhbERhdGEpOwogICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5yZXBvcnRFeHRy
YU1lbW9yeUNvc3QoY2FjaGVkSW1hZ2UtPmVuY29kZWRTaXplKCkpOwogICAgICAgICB9CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDcgQEAgUGFzc1JlZlB0cjxBcnJh
eTxDYWxsRnJhbWU+ID4gSW5qZWN0ZWRTYwogUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcE9iamVjdChjb25zdCBTY3JpcHRW
YWx1ZSYgdmFsdWUsIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lKSBjb25zdAogewogICAgIEFTU0VS
VCghaGFzTm9WYWx1ZSgpKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBob2xkZXIoaW5qZWN0ZWRT
Y3JpcHRPYmplY3QoKS5zY3JpcHRTdGF0ZSgpKTsKICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgd3Jh
cEZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJ3cmFwT2JqZWN0Iik7CiAgICAgd3Jh
cEZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHZhbHVlKTsKICAgICB3cmFwRnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQoZ3JvdXBOYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTcsNiArOTcsNyBAQCBTY3JpcHRWYWx1ZSBJbmplY3RlZFNjcmlwdEJhc2U6OmNhbGxGdW5jCiAK
IHZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlQ2FsbChTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1
bmN0aW9uLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCiB7CisgICAgSlNDOjpKU0xv
Y2tIb2xkZXIgaG9sZGVyKG1faW5qZWN0ZWRTY3JpcHRPYmplY3Quc2NyaXB0U3RhdGUoKSk7CiAg
ICAgaWYgKGhhc05vVmFsdWUoKSB8fCAhY2FuQWNjZXNzSW5zcGVjdGVkV2luZG93KCkpIHsKICAg
ICAgICAgKnJlc3VsdCA9IEluc3BlY3RvclZhbHVlOjpudWxsKCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTExNiw2ICsxMTcsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6bWFrZUNhbGwoU2Ny
aXB0CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwoRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9uLCBSZWZQdHI8VHlwZUJ1
aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qIG9iamVjdFJlc3VsdCwgVHlwZUJ1aWxkZXI6
Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKQogeworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGhv
bGRlcihtX2luamVjdGVkU2NyaXB0T2JqZWN0LnNjcmlwdFN0YXRlKCkpOwogICAgIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gcmVzdWx0OwogICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0KTsK
ICAgICBpZiAoIXJlc3VsdCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5W
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNyArMjQwLDcgQEAgYm9vbCBQbHVnaW5WaWV3
OjpzdGFydCgpCiAgICAgewogICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmll
dyh0aGlzKTsKICNpZiBVU0UoSlNDKQotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7
CiAgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5
cGUpbV9taW1lVHlwZS51dGY4KCkuZGF0YSgpLCBtX2luc3RhbmNlLCBtX21vZGUsIG1fcGFyYW1D
b3VudCwgbV9wYXJhbU5hbWVzLCBtX3BhcmFtVmFsdWVzLCBOVUxMKTsKQEAgLTMzMCw3ICszMzAs
NyBAQCB2b2lkIFBsdWdpblZpZXc6OnN0b3AoKQogICAgIG1faXNTdGFydGVkID0gZmFsc2U7CiAK
ICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC00NDYsNyArNDQ2
LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVzdChQbHVnaW5SZQogICAgICAgICAg
ICAgaWYgKHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSkgewogICAgICAgICAgICAgICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAg
ICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAg
ICAgICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dXJsbm90aWZ5KG1faW5zdGFu
Y2UsIHJlcXVlc3RVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgTlBSRVNfRE9ORSwgcmVxdWVz
dC0+bm90aWZ5RGF0YSgpKTsKQEAgLTczNiw3ICs3MzYsNyBAQCBOUE9iamVjdCogUGx1Z2luVmll
dzo6bnBPYmplY3QoKQogICAgIHsKICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdp
blZpZXcodGhpcyk7CiAjaWYgVVNFKEpTQykKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKICNlbmRpZgogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRy
dWUpOwogICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSht
X2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmb2JqZWN0KTsKQEAgLTE0
OTIsNyArMTQ5Miw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGEK
IAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShK
U0MpCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAg
ICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBOUEJvb2wgdmFsdWUgPSBwcml2YXRlQnJv
d3NpbmdFbmFibGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1Bs
dWdpblZpZXdCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVy
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNyArNDAzLDcgQEAgYm9vbCBQbHVnaW5WaWV3
OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQ
bHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAog
ICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0
YW5jZSwgJmV2ZW50KTsKQEAgLTk3MCw3ICs5NzAsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5Q
V2luZG93SWZOZWVkZWQoKQogICAgICAgICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1f
bnBXaW5kb3cud3NfaW5mbyktPndpbmRvd0dyb3VwID0gd2luZG93LT53aW5kb3dHcm91cCgpOwog
CiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1
ZSk7CiAKICAgICAvLyBGSVhNRTogUGFzc2luZyB6b29tRmFjdG9yIHRvIHNldHdpbmRvdyBtYWtl
IHdpbmRvd2VkIHBsdWdpbiBzY2FsZSBpbmNvcnJlY3RseS4KQEAgLTEyMjAsNyArMTIyMCw3IEBA
IGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAKICAgICBpZiAobV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7CiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRz
WEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2Up
OwpAQCAtMTMwMSw3ICsxMzAxLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpnZXRXaW5kb3dJbmZvKFZl
Y3RvcjxQbAogICAgIHZvaWQqIHZhbFB0ciA9IDA7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJy
ZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpblNjcmVlbldpbmRvdywgJnZh
bFB0cik7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysg
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBF
dmVudAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50
UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhmYWxzZSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1Bs
dWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA2LDcgKzEwNiw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdp
blZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAKICAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpAQCAtMjc2LDcg
KzI3Niw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiAKIAogdm9p
ZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQog
ewotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIGlmICgh
bV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5
KQogICAgICAgICByZXR1cm47CkBAIC00MDYsNyArNDA2LDcgQEAgc3RhdGljIHZvaWQgc2V0WENy
b3NzaW5nRXZlbnRTcGVjaWZpY0ZpZQogCiB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZl
bnQoTW91c2VFdmVudCogZXZlbnQpCiB7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogCiAgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5T
dGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCiAgICAgICAgIHJldHVybjsKQEAgLTUzNSw3ICs1MzUs
NyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAgIH0KIAogICAg
IFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwog
ICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBX
aW5kb3cpOwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtODQyLDcgKzg0Miw3IEBA
IGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAjaWYgZGVmaW5lZChYUF9VTklYKQog
ICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsKICAgICAgICAgUGx1
Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4o
dHJ1ZSk7CiAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3Rh
bmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKICAgICAgICAgc2V0
Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL21hYy9Q
bHVnaW5WaWV3TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFj
L1BsdWdpblZpZXdNYWMubW0JKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyNiw3ICs0MjYs
NyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAgICAgICAgICAg
bV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCAtIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCwgbV9u
cFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gLSBtX25wV2luZG93LmNsaXBSZWN0LnRvcCk7CiAKICAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsK
ICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25w
V2luZG93KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAgLTc3Miw3ICs3NzIsNyBA
QCBQb2ludCBQbHVnaW5WaWV3Ojptb3VzZVBvc0ZvclBsdWdpbihNb3VzCiBib29sIFBsdWdpblZp
ZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkKIHsKICAgICBQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNj
ZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAJKHJl
dmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzczLDcgKzM3Myw3IEBAIGJvb2wgUGx1Z2luVmlldzo6
ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBi
b29sIGFjY2VwdGVkID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNl
LCAmZXZlbnQpOwpAQCAtNjg3LDcgKzY4Nyw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5k
b3dJZk5lZWRlZCgpCiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlz
KTsKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICNlbmRpZgogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CkBAIC05NDks
NyArOTQ5LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKICAgICBpZiAobV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7CiAgICAgICAgIFBsdWdpblZpZXc6OnNl
dEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgc2V0Q2Fs
bGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZh
bHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVlZHNYRW1iZWQpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHJl
dmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjYsNyArNTI2LDcgQEAgYm9vbCBQbHVnaW5WaWV3
OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICBzaG91bGRQb3AgPSB0cnVlOwogICAg
IH0KIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRD
YWxsaW5nUGx1Z2luKHRydWUpOwogICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKICAgICBzZXRDYWxsaW5nUGx1
Z2luKGZhbHNlKTsKQEAgLTY3Nyw3ICs2NzcsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtl
eWJvYXJkRXZlbnQoS2V5CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50
KG5wRXZlbnQpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KQEAgLTc0
Nyw3ICs3NDcsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFCiAg
ICAgfSBlbHNlCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmFjayBwb3J0aW5nIHRoZSBo
dHRwOi8vd2Via2l0Lm9yZy9iLzU4MTA4IGZpeCBoZXJlLgogICAgIGlmIChkaXNwYXRjaE5QRXZl
bnQobnBFdmVudCkpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwpAQCAtODM1
LDcgKzgzNSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEkKICAg
ICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CiAKICAgICBpZiAobV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPnNldHdpbmRvdykgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAg
ICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2lu
ZG93KTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCShyZXZpc2lvbiAx
MjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmVUZXN0
U3VwcG9ydCB7CiAKIHZvaWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJlZiBjb250
ZXh0KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc2NyaXB0Q29udGV4dC0+aXNE
b2N1bWVudCgpID8gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzY3JpcHRDb250ZXh0KSA6IDA7CkBA
IC00OSw4ICs0OSw4IEBAIHZvaWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJlZiAK
IAogdm9pZCByZXNldEludGVybmFsc09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgSW50ZXJuYWxzICogaW50ZXJuYWxz
ID0gdG9JbnRlcm5hbHMoZ2xvYmFsT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBJZGVudGlmaWVyKGV4ZWMsIEludGVybmFsczo6aW50ZXJuYWxzSWQpKSk7CiAgICAgaWYgKGlu
dGVybmFscykgewpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZp
c2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NTEsOCArODUxLDggQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZHJv
cFByb3RlY3Rpb24oKQogICAgIC8vIG91dC4gQnV0IGl0IGlzIHByb3RlY3RlZCBmcm9tIEdDIHdo
aWxlIGxvYWRpbmcsIHNvIHRoaXMKICAgICAvLyBjYW4ndCBiZSByZWNvdXBlZCB1bnRpbCB0aGUg
bG9hZCBpcyBkb25lLCBzbyBvbmx5CiAgICAgLy8gcmVwb3J0IHRoZSBleHRyYSBjb3N0IGF0IHRo
YXQgcG9pbnQuCi0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CiAgICAgSlNDOjpKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmdsb2JhbERhdGEoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2Jh
bERhdGEpOwogICAgIGdsb2JhbERhdGEtPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KG1fcmVz
cG9uc2VCdWlsZGVyLmxlbmd0aCgpICogMik7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2
aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsNDkgQEAKKzIwMTItMDYtMjAgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5i
ZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBKU0xvY2sgc2hvdWxkIGJlIHBlci1KU0dsb2JhbERh
dGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MTIz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdl
ZCBhbGwgc2l0ZXMgdGhhdCB1c2VkIEpTTG9jayB0byBpbnN0ZWFkIHVzZSB0aGUgbmV3IEpTTG9j
a0hvbGRlcgorICAgICAgICBhbmQgcGFzcyBpbiB0aGUgY29ycmVjdCBKUyBjb250ZXh0IHRoYXQg
dGhlIGNvZGUgaXMgYWJvdXQgdG8gaW50ZXJhY3Qgd2l0aCB0aGF0IAorICAgICAgICBuZWVkcyBw
cm90ZWN0aW9uLgorCisgICAgICAgICogU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6c2FtcGxlV2ViS2l0KToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgor
ICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpKU05Q
T2JqZWN0OjpjYWxsT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Y2FsbENv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6cHV0KToKKyAgICAgICAg
KFdlYktpdDo6SlNOUE9iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpK
U05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9i
amVjdDo6cHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OUEpTT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aGFzTWV0
aG9kKToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aW52b2tlKToKKyAgICAgICAgKFdl
YktpdDo6TlBKU09iamVjdDo6aW52b2tlRGVmYXVsdCk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNP
YmplY3Q6Omhhc1Byb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6Z2V0UHJv
cGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjpzZXRQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6OnJlbW92ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYktp
dDo6TlBKU09iamVjdDo6ZW51bWVyYXRlKToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6
Y29uc3RydWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50
aW1lT2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpj
b252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2Jq
ZWN0TWFwOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1hcDo6
bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6anNXcmFwcGVy
Rm9yV29ybGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y29tcHV0ZWRTdHlsZUluY2x1
ZGluZ1Zpc2l0ZWRJbmZvKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzczo6Z2V0V2ViQ29yZVN0YXRpc3RpY3MpOgorCiAyMDEyLTA2LTIxICBSeXVhbiBD
aG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMW1dLMl0gQWRkIFdL
Vmlld0VmbCBhbmQgV2ViS2l0MiBBUEkgT2JqZWN0IHRvIHJlcHJlc2VudCBFdmFzX09iamVjdC4K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5tYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVy
Lm1hYy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9X
ZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBA
IFdlYk1lbW9yeVN0YXRpc3RpY3MgV2ViTWVtb3J5U2FtcGxlcjo6c2EKICAgICB0b3RhbEJ5dGVz
SW5Vc2UgKz0gZmFzdE1hbGxvY0J5dGVzSW5Vc2U7CiAgICAgdG90YWxCeXRlc0NvbW1pdHRlZCAr
PSBmYXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQ7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNJblVzZSA9IEpTRE9N
V2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5zaXplKCk7CiAgICAgc2l6ZV90IGpz
Y0hlYXBCeXRlc0NvbW1pdHRlZCA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+
aGVhcC5jYXBhY2l0eSgpOwogICAgIHRvdGFsQnl0ZXNJblVzZSArPSBqc2NIZWFwQnl0ZXNJblVz
ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTIwLDcgKzkyMCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6Z2V0V2Vi
Q29yZVN0YXRpc3RpY3ModWkKICAgICAKICAgICAvLyBHYXRoZXIgSmF2YVNjcmlwdCBzdGF0aXN0
aWNzLgogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKICAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRPYmpl
Y3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0
Q291bnQoKSk7CiAgICAgICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0
R2xvYmFsT2JqZWN0c0NvdW50IiwgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5o
ZWFwLmdsb2JhbE9iamVjdENvdW50KCkpOwogICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJz
LnNldCgiSmF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHNDb3VudCIsIEpTRE9NV2luZG93Ojpjb21t
b25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDA5LDcgKzQwOSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmdhcmJhZ2VDb2xsZWN0
SmF2YVMKIAogc2l6ZV90IEluamVjdGVkQnVuZGxlOjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KCkK
IHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJu
IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgpOwog
fQogCkBAIC00MTgsOCArNDE4LDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0
aW9uKEpTQwogICAgIGlmICghY29udGV4dCB8fCAhZXhjZXB0aW9uKQogICAgICAgICByZXR1cm47
CiAKLSAgICBKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlND
OjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZSA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlY1N0YXRlKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBoYXMgYSBE
T01XaW5kb3cgZ2xvYmFsIG9iamVjdCwgb3RoZXJ3aXNlIHRoaXMgY29udGV4dCBkaWRuJ3Qgb3Jp
Z2luYXRlIGZyb20gYSBQYWdlLgogICAgIGlmICghdG9KU0RPTVdpbmRvdyhleGVjU3RhdGUtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCShyZXZpc2lvbiAx
MjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNO
UE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RQ
cm90b3R5cGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aWZpZXJSZXAuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0pTRE9NV2luZG93QmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTEyNSw3ICsxMjYsNyBAQCBK
U1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxNZXRob2QoRXhlY1N0YXRlCiAgICAgVk9JRF9UT19OUFZB
UklBTlQocmVzdWx0KTsKICAgICAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5pbnZva2Uo
bV9ucE9iamVjdCwgbWV0aG9kTmFtZSwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwg
JnJlc3VsdCk7CiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlv
blRvRXhlY1N0YXRlKGV4ZWMpOwogICAgIH0KQEAgLTE2NSw3ICsxNjYsNyBAQCBKU0M6OkpTVmFs
dWUgSlNOUE9iamVjdDo6Y2FsbE9iamVjdChKU0M6CiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVz
dWx0KTsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAg
ICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQobV9ucE9i
amVjdCwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7CiAgICAgICAg
IE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMp
OwogICAgIH0KQEAgLTIwNSw3ICsyMDYsNyBAQCBKU1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxDb25z
dHJ1Y3RvcihFeGVjCiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKICAgICAKICAgICB7
Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHJldHVyblZhbHVl
ID0gbV9ucE9iamVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QobV9ucE9iamVjdCwgYXJndW1lbnRzLmRh
dGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7CiAgICAgICAgIE5QUnVudGltZU9iamVjdE1h
cDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgIH0KQEAgLTM0MCw3
ICszNDEsNyBAQCB2b2lkIEpTTlBPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTCiAgICAg
TlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKHRoaXNPYmplY3Qt
Pm1fb2JqZWN0TWFwKTsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICAgICAgdGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5zZXRQcm9wZXJ0eSh0
aGlzT2JqZWN0LT5tX25wT2JqZWN0LCBucElkZW50aWZpZXIsICZ2YXJpYW50KTsKIAogICAgICAg
ICBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVj
KTsKQEAgLTM4MCw3ICszODEsNyBAQCBib29sIEpTTlBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEV4
ZWNTdGF0CiAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9y
KG1fb2JqZWN0TWFwKTsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKIAogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBy
ZW1vdmVQcm9wZXJ0eSByZXR1cm5zIGZhbHNlPwogICAgICAgICBpZiAoIW1fbnBPYmplY3QtPl9j
bGFzcy0+cmVtb3ZlUHJvcGVydHkobV9ucE9iamVjdCwgcHJvcGVydHlOYW1lKSkKQEAgLTQxMyw3
ICs0MTQsNyBAQCB2b2lkIEpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAg
TlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKHRoaXNPYmplY3Qt
Pm1fb2JqZWN0TWFwKTsKICAgICAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSB0aHJvdyBhbiBleGNlcHRpb24g
aWYgZW51bWVyYXRlIHJldHVybnMgZmFsc2U/CiAgICAgICAgIGlmICghdGhpc09iamVjdC0+bV9u
cE9iamVjdC0+X2NsYXNzLT5lbnVtZXJhdGUodGhpc09iamVjdC0+bV9ucE9iamVjdCwgJmlkZW50
aWZpZXJzLCAmaWRlbnRpZmllckNvdW50KSkKQEAgLTQ2MSw3ICs0NjIsNyBAQCBKU1ZhbHVlIEpT
TlBPYmplY3Q6OnByb3BlcnR5R2V0dGVyKEV4ZWNTCiAgICAgCiAgICAgYm9vbCByZXR1cm5WYWx1
ZTsKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIE5Q
SWRlbnRpZmllciBucElkZW50aWZpZXIgPSBucElkZW50aWZpZXJGcm9tSWRlbnRpZmllcihwcm9w
ZXJ0eU5hbWUpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IHRoaXNPYmotPm1fbnBPYmplY3QtPl9j
bGFzcy0+Z2V0UHJvcGVydHkodGhpc09iai0+bV9ucE9iamVjdCwgbnBJZGVudGlmaWVyLCAmcmVz
dWx0KTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvTlBKU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBOUEpTT2JqZWN0Ojpo
YXNNZXRob2QoTlBJZGVudGlmaWVyIAogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBtX2pzT2JqZWN0LT5n
ZXQoZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXAp
KTsgICAgCiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKQEAgLTExOSw3ICsxMTksNyBAQCBi
b29sIE5QSlNPYmplY3Q6Omludm9rZShOUElkZW50aWZpZXIgbWV0CiAgICAgaWYgKCFleGVjKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTVmFsdWUg
ZnVuY3Rpb24gPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVy
UmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApKTsKICAgICByZXR1cm4gaW52b2tlKGV4ZWMsIG1fb2Jq
ZWN0TWFwLT5nbG9iYWxPYmplY3QoKSwgZnVuY3Rpb24sIGFyZ3VtZW50cywgYXJndW1lbnRDb3Vu
dCwgcmVzdWx0KTsKQEAgLTEzMSw3ICsxMzEsNyBAQCBib29sIE5QSlNPYmplY3Q6Omludm9rZURl
ZmF1bHQoY29uc3QgTlBWCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG1fanNPYmplY3QuZ2V0KCk7
CiAgICAgcmV0dXJuIGludm9rZShleGVjLCBtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCksIGZ1
bmN0aW9uLCBhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7CkBAIC0xNDUsNyArMTQ1
LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGlmICgh
ZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBi
b29sIHJlc3VsdDsKICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkKQEAgLTE2NSw3
ICsxNjUsNyBAQCBib29sIE5QSlNPYmplY3Q6OmdldFByb3BlcnR5KE5QSWRlbnRpZmllCiAgICAg
aWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpT
VmFsdWUganNSZXN1bHQ7CiAgICAgaWYgKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpCiAgICAg
ICAgIGpzUmVzdWx0ID0gbV9qc09iamVjdC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tSWRlbnRp
ZmllclJlcChleGVjLCBpZGVudGlmaWVyUmVwKSk7CkBAIC0xODUsNyArMTg1LDcgQEAgYm9vbCBO
UEpTT2JqZWN0OjpzZXRQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGlmICghZXhlYykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU1ZhbHVlIGpzVmFs
dWUgPSBtX29iamVjdE1hcC0+Y29udmVydE5QVmFyaWFudFRvSlNWYWx1ZShleGVjLCBtX29iamVj
dE1hcC0+Z2xvYmFsT2JqZWN0KCksICp2YWx1ZSk7CiAgICAgaWYgKGlkZW50aWZpZXJSZXAtPmlz
U3RyaW5nKCkpIHsKQEAgLTIwNiw3ICsyMDYsNyBAQCBib29sIE5QSlNPYmplY3Q6OnJlbW92ZVBy
b3BlcnR5KE5QSWRlbnRpCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKSB7CiAgICAg
ICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChl
eGVjLCBpZGVudGlmaWVyUmVwKTsKICAgICAgICAgCkBAIC0yMzUsNyArMjM1LDcgQEAgYm9vbCBO
UEpTT2JqZWN0OjplbnVtZXJhdGUoTlBJZGVudGlmaWVyKgogICAgIGlmICghZXhlYykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBQcm9wZXJ0eU5hbWVB
cnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOwogICAgIG1fanNPYmplY3QtPm1ldGhvZFRhYmxlKCkt
PmdldFByb3BlcnR5TmFtZXMobV9qc09iamVjdC5nZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lcywg
RXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CkBAIC0yNTcsNyArMjU3LDcgQEAgYm9vbCBOUEpT
T2JqZWN0Ojpjb25zdHJ1Y3QoY29uc3QgTlBWYXJpYQogICAgIGlmICghZXhlYykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3Ry
dWN0RGF0YTsKICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBnZXRDb25zdHJ1Y3RE
YXRhKG1fanNPYmplY3QuZ2V0KCksIGNvbnN0cnVjdERhdGEpOwpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05Q
UnVudGltZU9iamVjdE1hcC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAgSlNWYWx1ZSBOUFJ1bnRpbWVPYmplY3RNYXA6
OmNvbnZlcnROUFZhcgogCiB2b2lkIE5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVU
b05QVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIE5QVmFyaWFudCYgdmFy
aWFudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgVk9JRF9UT19OUFZBUklBTlQodmFyaWFudCk7
CiAgICAgCkBAIC0xODYsNyArMTg2LDcgQEAgYm9vbCBOUFJ1bnRpbWVPYmplY3RNYXA6OmV2YWx1
YXRlKE5QT2JqZQogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCk7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGdldE9y
Q3JlYXRlSlNPYmplY3QoZ2xvYmFsT2JqZWN0LmdldCgpLCBucE9iamVjdCk7CiAKICAgICBnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwpAQCAtMjY2LDcg
KzI2Niw3IEBAIHZvaWQgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXAKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgdGhyb3dF
cnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBzdHJpbmdUb1VTdHJpbmcoZ2xvYmFsRXhjZXB0
aW9uU3RyaW5nKCkpKSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NDIsNyArNjQyLDcgQEAgSlNWYWx1ZVJlZiBXZWJGcmFtZTo6anNXcmFwcGVyRm9yV29y
bGQoSQogICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSBtX2NvcmVGcmFtZS0+c2NyaXB0
KCktPmdsb2JhbE9iamVjdCh3b3JsZC0+Y29yZVdvcmxkKCkpOwogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICByZXR1
cm4gdG9SZWYoZXhlYywgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIG5vZGVIYW5kbGUtPmNvcmVO
b2RlKCkpKTsKIH0KIApAQCAtNjU0LDcgKzY1NCw3IEBAIEpTVmFsdWVSZWYgV2ViRnJhbWU6Ompz
V3JhcHBlckZvcldvcmxkKEkKICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0ID0gbV9jb3Jl
RnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3Qod29ybGQtPmNvcmVXb3JsZCgpKTsKICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCByYW5n
ZUhhbmRsZS0+Y29yZVJhbmdlKCkpKTsKIH0KIApAQCAtNjcxLDcgKzY3MSw3IEBAIEpTVmFsdWVS
ZWYgV2ViRnJhbWU6OmNvbXB1dGVkU3R5bGVJbmNsdWQKIAogICAgIFJlZlB0cjxDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpj
cmVhdGUoc3RhdGljX2Nhc3Q8SlNFbGVtZW50Kj4odG9KUyhlbGVtZW50KSktPmltcGwoKSwgdHJ1
ZSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIHJldHVybiB0b1JlZihleGVjLCB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgc3R5bGUuZ2V0KCkpKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODE1LDcgKzE4MTUsNyBAQCB2b2lkIFdlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1haW5G
cmFtZShjCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFJlc3Vs
dFZhbHVlOwogICAgIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZTsKIAotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBpZiAoSlNWYWx1ZSBy
ZXN1bHRWYWx1ZSA9IG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVT
Y3JpcHQoc2NyaXB0LCB0cnVlKS5qc1ZhbHVlKCkpIHsKICAgICAgICAgaWYgKChzZXJpYWxpemVk
UmVzdWx0VmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShtX21haW5GcmFtZS0+
anNDb250ZXh0KCksIHRvUmVmKG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+c2NyaXB0KCktPmds
b2JhbE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSwgcmVzdWx0
VmFsdWUpLCAwKSkpCiAgICAgICAgICAgICBkYXRhUmVmZXJlbmNlID0gc2VyaWFsaXplZFJlc3Vs
dFZhbHVlLT5kYXRhKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8
bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpT
R2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBu
ZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRl
eHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAg
IG5lZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBBcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHA6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmNsZWFyTWVtb3J5Q2FjaGVzKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9DbGllbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1BhZ2VQb3B1cEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZVBvcHVwQmxhY2tCZXJyeTo6aW5zdGFsbERvbUZ1bmN0aW9uKToKKyAgICAgICAgKiBXZWJLaXRT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydC5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJl
ZVN1cHBvcnQ6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyk6CisKIDIwMTItMDYt
MjEgIE1pa2UgRmVudG9uICA8bWlmZW50b25AcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJy
eV0gSW5wdXQgbW9kZSBzaG91bGQgYWRhcHQgYXV0b21hdGljYWxseSB0byBzZXR0aW5ncyBjaGFu
Z2VzCkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JsYWNrQmVycnlHbG9iYWwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmxhY2tCZXJy
eUdsb2JhbC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9BcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUs
MTAgQEAgdm9pZCBjbGVhck1lbW9yeUNhY2hlcygpCiAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OnVzZXJJbnRlcmZhY2VUaHJlYWRNZXNzYWdlQ2xpZW50KCktPmRpc3BhdGNoTWVzc2FnZShCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6Y3JlYXRlRnVuY3Rpb25DYWxsTWVzc2FnZShjbGVhck1lbW9yeUNh
Y2hlc0luQ29tcG9zaXRpbmdUaHJlYWQpKTsKICNlbmRpZgogCi0gICAgY29sbGVjdEphdmFzY3Jp
cHRHYXJiYWdlTm93KCk7CisgICAgeworICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIGNvbGxlY3RKYXZhc2Ny
aXB0R2FyYmFnZU5vdygpOworICAgIH0KIAogICAgIC8vIENsZWFuIGNhY2hlcyBhZnRlciBKUyBn
YXJiYWdlIGNvbGxlY3Rpb24gYmVjYXVzZSBKUyBHQyBjYW4KICAgICAvLyBnZW5lcmF0ZSBtb3Jl
IGRlYWQgcmVzb3VyY2VzLgpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVT
dXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDEy
MDkyNikKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DbGllbnRF
eHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCwxMSArODQsMTEgQEAgc3RhdGljIEpT
U3RhdGljVmFsdWUgY2xpZW50RXh0ZW5zaW9uU3RhdAogLy8gRklYTUU6IFJldmlzaXQgdGhlIGNy
ZWF0aW9uIG9mIHRoaXMgY2xhc3MgYW5kIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBiZXN0IHdheSB0
byBhcHByb2FjaCBpdC4KIHZvaWQgYXR0YWNoRXh0ZW5zaW9uT2JqZWN0VG9GcmFtZShGcmFtZSog
ZnJhbWUsIFdlYlBhZ2VDbGllbnQqIGNsaWVudCkKIHsKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLQogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBm
cmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+d2lu
ZG93KCk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygp
OworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisKICAgICBKU0NvbnRleHRSZWYg
c2NyaXB0Q3R4ID0gdG9SZWYoZXhlYyk7CiAKICAgICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0
aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1BhZ2VQb3B1cEJsYWNr
QmVycnkuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
V2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMiwxMyArMTIyLDEyIEBAIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHBvcFVwRXh0ZW5zaW9uU3Rh
dGkKIAogdm9pZCBQYWdlUG9wdXBCbGFja0JlcnJ5OjppbnN0YWxsRG9tRnVuY3Rpb24oRnJhbWUq
IGZyYW1lKQogewotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOwotCiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZnJhbWUsIG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBBU1NFUlQod2luZG93KTsKIAogICAgIEpTQzo6
RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKGV4ZWMp
OworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU0NvbnRleHRSZWYg
Y29udGV4dCA9IDo6dG9SZWYoZXhlYyk7CiAgICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0g
SlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViS2l0U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDEsOCArMTQxLDggQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OnNjYWxl
UGFnZUJ5KAogCiBKU1ZhbHVlUmVmIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6Y29tcHV0ZWRTdHls
ZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZh
bHVlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9lZmwvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0wNi0yMCAgTWFy
ayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBz
aG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGlu
c3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBj
b3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRo
IHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBld2svZXdrX2Zy
YW1lLmNwcDoKKyAgICAgICAgKGV3a19mcmFtZV9zY3JpcHRfZXhlY3V0ZSk6CisgICAgICAgICog
ZXdrL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X2pzX29iamVjdF9hZGQpOgorCiAy
MDEyLTA2LTE5ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIENhbGxpbmcgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBjYXVzZXMgYXNzZXJ0
aW9uIGZhaWx1cmU6IG1fdmVyaWZpZXIuaXNTYWZlVG9Vc2UoKQpJbmRleDogU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a19mcmFtZS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTUsOCArNDU1LDggQEAgY2hh
ciogZXdrX2ZyYW1lX3NjcmlwdF9leGVjdXRlKEV2YXNfT2JqZQogICAgIGlmICghcmVzdWx0IHx8
ICghcmVzdWx0LmlzQm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0Lmlz
TnVtYmVyKCkpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEpTQzo6SlNMb2NrIGxvY2soSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gc21h
cnREYXRhLT5mcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChXZWJDb3JlOjptYWluVGhyZWFk
Tm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgIHJlc3VsdFN0cmluZyA9IFdlYkNvcmU6OnVzdHJpbmdUb1N0cmluZyhyZXN1
bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICByZXR1cm4gc3RyZHVwKHJlc3Vs
dFN0cmluZy51dGY4KCkuZGF0YSgpKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3ZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dmlldy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNDUsOCArNDA0NSw4IEBAIEVpbmFfQm9vbCBl
d2tfdmlld19qc19vYmplY3RfYWRkKEV2YXNfT2IKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgZmFsc2UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzbWFydERhdGEsIHByaXYsIGZhbHNlKTsKIAotICAgIEpTQzo6SlNMb2NrIGxvY2so
SlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIFdlYkNvcmU6OkpTRE9NV2luZG93KiB3
aW5kb3cgPSB0b0pTRE9NV2luZG93KHByaXYtPm1haW5GcmFtZSwgV2ViQ29yZTo6bWFpblRocmVh
ZE5vcm1hbFdvcmxkKCkpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sod2luZG93LT5nbG9i
YWxFeGVjKCkpOwogICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3Q7CiAgICAgcm9v
dCA9IHByaXYtPm1haW5GcmFtZS0+c2NyaXB0KCktPmJpbmRpbmdSb290T2JqZWN0KCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTA2LTIwICBN
YXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2Nr
IHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8g
aW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhl
IGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdp
dGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHA6CisgICAgICAgIChEdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGs6OmdjQ291bnRKYXZhc2NyaXB0T2JqZWN0cyk6CisKIDIwMTItMDYtMjEg
IERhbmllbCBEcmFrZSAgPGRzZEBsYXB0b3Aub3JnPgogCiAgICAgICAgIFtHVEtdIEJhY2twb3J0
IHJ1bi1maWxlLWNob29zZXIgdG8gV2ViS2l0MQpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsu
Y3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDAsNyAr
NjAwLDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdjQ29sbGVjdAogCiB1bnNp
Z25lZCBsb25nIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2NDb3VudEphdmFzY3JpcHRPYmpl
Y3RzKCkKIHsKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+
aGVhcC5vYmplY3RDb3VudCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
MjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSw2OCBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdA
YXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2VkIGFs
bCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9s
ZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUg
Y29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3Rl
Y3Rpb24uCisKKyAgICAgICAgKiBET00vV2ViRE9NT3BlcmF0aW9ucy5tbToKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgICogTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAgICAgICAgKCtbV2Vi
Q29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdE9iamVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJD
b3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50XSk6CisgICAgICAgICgr
W1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnRdKToKKyAg
ICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3RlZEdsb2JhbE9iamVj
dHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVj
dGVkT2JqZWN0VHlwZUNvdW50c10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZh
U2NyaXB0T2JqZWN0VHlwZUNvdW50c10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBz
aG91bGRQcmludEV4Y2VwdGlvbnNdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3Mgc2V0
U2hvdWxkUHJpbnRFeGNlcHRpb25zOl0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBt
ZW1vcnlTdGF0aXN0aWNzXSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3Jp
cHRSZWZlcmVuY2VkT2JqZWN0c0NvdW50XSk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6Omludm9rZURlZmF1bHQpOgorICAgICAgICAoV2ViS2l0OjpOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0
OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdl
YktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmVQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aGFzTWV0aG9kKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjplbnVtZXJhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmFkZFZhbHVlVG9B
cnJheSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bW92
ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKToKKyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNj
YXBlUGx1Z2luU3RyZWFtLm1tOgorICAgICAgICAoV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06Ondh
bnRzQWxsU3RyZWFtcyk6CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcu
bW06CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzZW5kRXZlbnQ6aXNEcmF3UmVj
dDpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHByaXZhdGVCcm93c2luZ01v
ZGVEaWRDaGFuZ2VdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHNldFdpbmRv
d0lmTmVjZXNzYXJ5XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBjcmVhdGVQ
bHVnaW5TY3JpcHRhYmxlT2JqZWN0XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmll
dyBnZXRGb3JtVmFsdWU6XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBldmFs
dWF0ZUphdmFTY3JpcHRQbHVnaW5SZXF1ZXN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBs
dWdpblZpZXcgd2ViRnJhbWU6ZGlkRmluaXNoTG9hZFdpdGhSZWFzb246XSk6CisgICAgICAgICgt
W1dlYk5ldHNjYXBlUGx1Z2luVmlldyBsb2FkUGx1Z2luUmVxdWVzdDpdKToKKyAgICAgICAgKC1b
V2ViTmV0c2NhcGVQbHVnaW5WaWV3IF9wcmludGVkUGx1Z2luQml0bWFwXSk6CisgICAgICAgICog
UGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tOgorICAgICAgICAoK1tXZWJQbHVnaW5Db250
cm9sbGVyIHBsdWdJblZpZXdXaXRoQXJndW1lbnRzOmZyb21QbHVnaW5QYWNrYWdlOl0pOgorICAg
ICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIHN0b3BPbmVQbHVnaW46XSk6CisgICAgICAgICgt
W1dlYlBsdWdpbkNvbnRyb2xsZXIgZGVzdHJveU9uZVBsdWdpbjpdKToKKyAgICAgICAgKC1bV2Vi
UGx1Z2luQ29udHJvbGxlciBzdGFydEFsbFBsdWdpbnNdKToKKyAgICAgICAgKC1bV2ViUGx1Z2lu
Q29udHJvbGxlciBhZGRQbHVnaW46XSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToK
KyAgICAgICAgKC1bV2ViRnJhbWUgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3Ry
aW5nOmZvcmNlVXNlckdlc3R1cmU6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzp3aXRoR2xvYmFsT2JqZWN0OmluU2NyaXB0V29y
bGQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tOgorICAg
ICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgc2NvcGVDaGFpbl0pOgorICAgICAgICAoLVtXZWJT
Y3JpcHRDYWxsRnJhbWUgZXZhbHVhdGVXZWJTY3JpcHQ6XSk6CisgICAgICAgICogV2ViVmlldy9X
ZWJWaWV3Lm1tOgorICAgICAgICAoK1tXZWJWaWV3IF9yZXBvcnRFeGNlcHRpb246aW5Db250ZXh0
Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IGFlRGVzY0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9t
U3RyaW5nOl0pOgorICAgICAgICAoLVtXZWJWaWV3IF9jb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlz
aXRlZEluZm86Zm9yRWxlbWVudDpdKToKKwogMjAxMi0wNi0yMCAgR2FycmV0IEtlbGx5ICA8Z2Rr
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBNb3ZpbmcgY29va2llRW5hYmxlZC9zZXRDb29raWVF
bmFibGVkIGZyb20gUGFnZSB0byBTZXR0aW5ncy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0RP
TS9XZWJET01PcGVyYXRpb25zLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0RP
TS9XZWJET01PcGVyYXRpb25zLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjcsOCArNjcs
OSBAQCArIChET01FbGVtZW50ICopX0RPTUVsZW1lbnRGcm9tSlNDb250ZXh0CiAgICAgaWYgKCF2
YWx1ZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwotICAgIHJldHVybiBraXQodG9FbGVtZW50KHRvSlModG9KUyhjb250ZXh0KSwg
dmFsdWUpKSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICByZXR1cm4ga2l0KHRvRWxlbWVudCh0b0pTKGV4ZWMs
IHZhbHVlKSkpOwogfQogCiAtIChOU1N0cmluZyAqKV9tYXJrZXJUZXh0Rm9yTGlzdEl0ZW0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNTgsMzEgKzU4LDMxIEBAICsgKE5TQXJyYXkgKilzdGF0aXN0
aWNzCiAKICsgKHNpemVfdClqYXZhU2NyaXB0T2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKIH0KIAogKyAoc2l6ZV90KWph
dmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERh
dGEoKS0+aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOwogfQogCiArIChzaXplX3QpamF2YVNjcmlw
dFByb3RlY3RlZE9iamVjdHNDb3VudAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
LT5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCk7CiB9CiAKICsgKHNpemVfdClqYXZhU2NyaXB0
UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCktPmhlYXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKTsKIH0KIAogKyAoTlNDb3Vu
dGVkU2V0ICopamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgCiAgICAgTlNDb3VudGVkU2V0
ICpyZXN1bHQgPSBbTlNDb3VudGVkU2V0IHNldF07CiAKQEAgLTk3LDcgKzk3LDcgQEAgKyAoTlND
b3VudGVkU2V0ICopamF2YVNjcmlwdFByb3RlY3RlZE9iagogCiArIChOU0NvdW50ZWRTZXQgKilq
YXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50cwogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICAgICAKICAgICBOU0NvdW50ZWRTZXQgKnJlc3VsdCA9IFtOU0NvdW50
ZWRTZXQgc2V0XTsKIApAQCAtMTY3LDEzICsxNjcsMTMgQEAgKyAoc2l6ZV90KWdseXBoUGFnZUNv
dW50CiAKICsgKEJPT0wpc2hvdWxkUHJpbnRFeGNlcHRpb25zCiB7Ci0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBDb25zb2xlOjpzaG91bGRQcmlu
dEV4Y2VwdGlvbnMoKTsKIH0KIAogKyAodm9pZClzZXRTaG91bGRQcmludEV4Y2VwdGlvbnM6KEJP
T0wpcHJpbnQKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAg
ICAgQ29uc29sZTo6c2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zKHByaW50KTsKIH0KIApAQCAtMjAx
LDcgKzIwMSw3IEBAICsgKE5TRGljdGlvbmFyeSAqKW1lbW9yeVN0YXRpc3RpY3MKIHsKICAgICBX
VEY6OkZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0
TWFsbG9jU3RhdGlzdGljcygpOwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICAgICBzaXplX3QgaGVhcFNpemUgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNH
bG9iYWxEYXRhKCktPmhlYXAuc2l6ZSgpOwogICAgIHNpemVfdCBoZWFwRnJlZSA9IEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jYXBhY2l0eSgpIC0gaGVhcFNpemU7CiAg
ICAgR2xvYmFsTWVtb3J5U3RhdGlzdGljcyBnbG9iYWxNZW1vcnlTdGF0cyA9IGdsb2JhbE1lbW9y
eVN0YXRpc3RpY3MoKTsKQEAgLTI0NSw3ICsyNDUsNyBAQCArIChzaXplX3QpamF2YVNjcmlwdE5v
R0NBbGxvd2VkT2JqZWN0c0NvCiAKICsgKHNpemVfdClqYXZhU2NyaXB0UmVmZXJlbmNlZE9iamVj
dHNDb3VudAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3Rl
ZE9iamVjdENvdW50KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysg
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzY4LDcgKzM2OCw3IEBAIGJvb2wgV2ViTmV0c2NhcGVQbHVnaW5TdHJl
YW06OndhbnRzQWxsU3QKICAgICBOUEVycm9yIGVycm9yOwogICAgIHsKICAgICAgICAgUGx1Z2lu
U3RvcERlZmVycmVyIGRlZmVycmVyKG1fcGx1Z2luVmlldy5nZXQoKSk7Ci0gICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIGVycm9yID0gbV9w
bHVnaW5GdW5jcy0+Z2V0dmFsdWUobV9wbHVnaW4sIE5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtT
dHJlYW1zLCAmdmFsdWUpOwogICAgIH0KICAgICBpZiAoZXJyb3IgIT0gTlBFUlJfTk9fRVJST1Ip
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1
Z2luVmlldy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTY2OSw3ICs2Njks
NyBAQCAtIChCT09MKXNlbmRFdmVudDoodm9pZCopZXZlbnQgaXNEcmF3UmVjCiAgICAgLy8gU2V0
IHRoZSBwbHVnaW5BbGxvd1BvcHVwIGZsYWcuCiAgICAgQVNTRVJUKF9ldmVudEhhbmRsZXIpOwog
ICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihfZXZlbnRIYW5k
bGVyLT5jdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlKCkgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlIDogUG9zc2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgICAgICBhY2Nl
cHRlZEV2ZW50ID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+ZXZlbnQocGx1
Z2luLCBldmVudCk7CiAgICAgfQpAQCAtODUwLDcgKzg1MCw3IEBAIC0gKHZvaWQpcHJpdmF0ZUJy
b3dzaW5nTW9kZURpZENoYW5nZQogCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07
CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwogICAgICAgICBpZiAoW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+c2V0dmFs
dWUpCiAgICAgICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5zZXR2
YWx1ZShwbHVnaW4sIE5QTlZwcml2YXRlTW9kZUJvb2wsICZ2YWx1ZSk7CiAgICAgfQpAQCAtOTkx
LDcgKzk5MSw3IEBAIC0gKHZvaWQpc2V0V2luZG93SWZOZWNlc3NhcnkKICAgICAgICAgaW5TZXRX
aW5kb3cgPSBZRVM7ICAgICAgICAKICAgICAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlv
bl07CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgbnBFcnIgPSBbX3BsdWdpblBhY2thZ2UuZ2V0
KCkgcGx1Z2luRnVuY3NdLT5zZXR3aW5kb3cocGx1Z2luLCAmd2luZG93KTsKICAgICAgICAgfQog
ICAgICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTQ0NCw3ICsxNDQ0LDcg
QEAgLSAoTlBPYmplY3QgKiljcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZQogICAgIE5QRXJyb3Ig
ZXJyb3I7CiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBlcnJv
ciA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwg
TlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwgJnZhbHVlKTsKICAgICB9CiAgICAgW3NlbGYg
ZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTE0NjMsNyArMTQ2Myw3IEBAIC0gKEJPT0wpZ2V0
Rm9ybVZhbHVlOihOU1N0cmluZyAqKil2YWx1ZQogICAgIE5QRXJyb3IgZXJyb3I7CiAgICAgW3Nl
bGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBlcnJvciA9IFtfcGx1Z2luUGFj
a2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwgTlBQVmZvcm1WYWx1ZSwg
JmJ1ZmZlcik7CiAgICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0x
NTk1LDcgKzE1OTUsNyBAQCAtICh2b2lkKWV2YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6
CiAgICAgICAgIGlmIChbSlNQbHVnaW5SZXF1ZXN0IHNlbmROb3RpZmljYXRpb25dKSB7CiAgICAg
ICAgICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgICAgICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNz
XS0+dXJsbm90aWZ5KHBsdWdpbiwgW1VSTCBfd2ViX1VSTENTdHJpbmddLCBOUFJFU19ET05FLCBb
SlNQbHVnaW5SZXF1ZXN0IG5vdGlmeURhdGFdKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNjI3LDcgKzE2MjcsNyBAQCAtICh2
b2lkKXdlYkZyYW1lOihXZWJGcmFtZSAqKXdlYkZyYW1lIGRpCiAgICAgICAgIAogICAgIFtzZWxm
IHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgp
IHBsdWdpbkZ1bmNzXS0+dXJsbm90aWZ5KHBsdWdpbiwgW1tbcGx1Z2luUmVxdWVzdCByZXF1ZXN0
XSBVUkxdIF93ZWJfVVJMQ1N0cmluZ10sIHJlYXNvbiwgW3BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0
YV0pOwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTY3MSw3
ICsxNjcxLDcgQEAgLSAodm9pZClsb2FkUGx1Z2luUmVxdWVzdDooV2ViUGx1Z2luUmVxdQogICAg
ICAgICAgICAgICAgIGlmIChbcGx1Z2luUmVxdWVzdCBzZW5kTm90aWZpY2F0aW9uXSkgewogICAg
ICAgICAgICAgICAgICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1
Z2luLCBbW1twbHVnaW5SZXF1ZXN0IHJlcXVlc3RdIFVSTF0gX3dlYl9VUkxDU3RyaW5nXSwgTlBF
UlJfR0VORVJJQ19FUlJPUiwgW3BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5j
dGlvbl07CkBAIC0yNDcxLDcgKzI0NzEsNyBAQCAtIChOU0JpdG1hcEltYWdlUmVwICopX3ByaW50
ZWRQbHVnaW5CaXRtCiAgICAgLy8gVGVsbCB0aGUgcGx1Z2luIHRvIHByaW50IGludG8gdGhlIEdX
b3JsZAogICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgW19wbHVn
aW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+cHJpbnQocGx1Z2luLCAmbnBQcmludCk7CiAg
ICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tCShyZXZpc2lvbiAx
MjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTk2LDEwICs5NiwxMCBAQCArIChOU1ZpZXcgKilwbHVnSW5W
aWV3V2l0aEFyZ3VtZW50czooTlNECiAgICAgTlNWaWV3ICp2aWV3ID0gbmlsOwogCiAgICAgaWYg
KFt2aWV3RmFjdG9yeSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdJblZpZXdXaXRo
QXJndW1lbnRzOildKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAgICAgICAgIHZpZXcgPSBbdmlld0ZhY3RvcnkgcGx1Z0luVmlld1dpdGhBcmd1
bWVudHM6YXJndW1lbnRzXTsKICAgICB9IGVsc2UgaWYgKFt2aWV3RmFjdG9yeSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpblZpZXdXaXRoQXJndW1lbnRzOildKSB7Ci0gICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHZpZXcg
PSBbdmlld0ZhY3RvcnkgcGx1Z2luVmlld1dpdGhBcmd1bWVudHM6YXJndW1lbnRzXTsKICAgICB9
CiAgICAgCkBAIC0xNDksMTAgKzE0OSwxMCBAQCAtICh2b2lkKWRlYWxsb2MKIC0gKHZvaWQpc3Rv
cE9uZVBsdWdpbjooTlNWaWV3ICopdmlldwogewogICAgIGlmIChbdmlldyByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJblN0b3ApXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBbdmlldyB3ZWJQbHVnSW5TdG9w
XTsKICAgICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1
Z2luU3RvcCldKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgICAgIFt2aWV3IHBsdWdpblN0b3BdOwogICAgIH0KIH0KQEAgLTE2MCwxMCAr
MTYwLDEwIEBAIC0gKHZvaWQpc3RvcE9uZVBsdWdpbjooTlNWaWV3ICopdmlldwogLSAodm9pZClk
ZXN0cm95T25lUGx1Z2luOihOU1ZpZXcgKil2aWV3CiB7CiAgICAgaWYgKFt2aWV3IHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luRGVzdHJveSldKSB7Ci0gICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIFt2aWV3IHdlYlBs
dWdJbkRlc3Ryb3ldOwogICAgIH0gZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihwbHVnaW5EZXN0cm95KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgW3ZpZXcgcGx1Z2luRGVzdHJveV07CiAgICAg
fQogfQpAQCAtMTgwLDEwICsxODAsMTAgQEAgLSAodm9pZClzdGFydEFsbFBsdWdpbnMKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgaWQgYVZpZXcgPSBbX3Zp
ZXdzIG9iamVjdEF0SW5kZXg6aV07CiAgICAgICAgIGlmIChbYVZpZXcgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5TdGFydCldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIFthVmlldyB3
ZWJQbHVnSW5TdGFydF07CiAgICAgICAgIH0gZWxzZSBpZiAoW2FWaWV3IHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IocGx1Z2luU3RhcnQpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBbYVZpZXcgcGx1
Z2luU3RhcnRdOwogICAgICAgICB9CiAgICAgfQpAQCAtMjUyLDEwICsyNTIsMTAgQEAgLSAodm9p
ZClhZGRQbHVnaW46KE5TVmlldyAqKXZpZXcKIAogICAgICAgICBMT0coUGx1Z2lucywgImluaXRp
YWxpemluZyBwbHVnLWluICVAIiwgdmlldyk7CiAgICAgICAgIGlmIChbdmlldyByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJbkluaXRpYWxpemUpXSkgewotICAgICAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAg
ICBbdmlldyB3ZWJQbHVnSW5Jbml0aWFsaXplXTsKICAgICAgICAgfSBlbHNlIGlmIChbdmlldyBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpbkluaXRpYWxpemUpXSkgewotICAgICAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAg
ICAgICAgICBbdmlldyBwbHVnaW5Jbml0aWFsaXplXTsKICAgICAgICAgfQogCkBAIC0yNjUsMTUg
KzI2NSwxNSBAQCAtICh2b2lkKWFkZFBsdWdpbjooTlNWaWV3ICopdmlldwogICAgICAgICBpZiAo
X3N0YXJ0ZWQpIHsKICAgICAgICAgICAgIExPRyhQbHVnaW5zLCAic3RhcnRpbmcgcGx1Zy1pbiAl
QCIsIHZpZXcpOwogICAgICAgICAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3Iod2ViUGx1Z0luU3RhcnQpXSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgICAgICBbdmll
dyB3ZWJQbHVnSW5TdGFydF07CiAgICAgICAgICAgICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luU3RhcnQpXSkgewotICAgICAgICAgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAg
ICAgICAgICBbdmlldyBwbHVnaW5TdGFydF07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldENv
bnRhaW5pbmdXaW5kb3c6KV0pIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
ICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICAgICAgW3ZpZXcgc2V0
Q29udGFpbmluZ1dpbmRvdzpbX2RvY3VtZW50VmlldyB3aW5kb3ddXTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkocmV2aXNpb24g
MTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NjcsOCArODY3LDcgQEAgYm9v
bCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YQogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7Ci0gICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2socGx1Z2luV29ybGQoKS0+Z2xvYmFs
RGF0YSgpKTsKICAgICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCgqcGx1Z2lu
V29ybGQoKS0+Z2xvYmFsRGF0YSgpLCBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVn
aW5Xb3JsZCgpKSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCk7CiAKQEAgLTkwNCw3ICs5MDMsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6aW52b2tlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xv
YmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVjdC0+
Z2V0KGV4ZWMsIG1ldGhvZE5hbWUpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxU
eXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKQEAgLTkzNyw3
ICs5MzYsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2Ny
aXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOyAgICAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEob2JqZWN0LCBjYWxsRGF0
YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTk2OSw3ICs5NjgsNyBA
QCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y29uc3RyCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmds
b2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAK
ICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25z
dHJ1Y3RUeXBlID0gb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDb25zdHJ1Y3REYXRhKG9iamVj
dCwgY29uc3RydWN0RGF0YSk7CkBAIC0xMDAyLDcgKzEwMDEsNyBAQCBib29sIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5X
b3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICBKU1ZhbHVl
IHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAKICAgICBtYXJz
aGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7CkBAIC0xMDIz
LDcgKzEwMjIsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+
c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOyAgICAKICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywg
cHJvcGVydHlOYW1lKTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3Vs
dERhdGEsIHJlc3VsdExlbmd0aCk7CkBAIC0xMDQ3LDcgKzEwNDYsNyBAQCBib29sIE5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0UHJvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVn
aW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKIAogICAgIEpT
VmFsdWUgdmFsdWUgPSBkZW1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3Ro
KTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKQEAgLTEwNzMsNyArMTA3Miw3IEBAIGJvb2wg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRQcm8KICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2Jq
ZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsgICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAog
ICAgIAogICAgIEpTVmFsdWUgdmFsdWUgPSBkZW1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZURhdGEs
IHZhbHVlTGVuZ3RoKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBmYWxzZSk7CkBAIC0xMDk4LDEyICsxMDk3
LDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmUKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5n
bG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBpZiAoIW9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVy
dHlOYW1lKSkgewogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsgICAgCiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0xMTI1LDEyICsxMTI0LDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjpyZW1vdmUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldv
cmxkKCkpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
aWYgKCFvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAg
ICAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIG9iamVjdC0+
bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KG9iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOyAgICAKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTExOTYsNyArMTE5NSw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
OjpoYXNNZXQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxF
eGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIGZ1bmMgPSBvYmplY3QtPmdldChleGVj
LCBtZXRob2ROYW1lKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiAh
ZnVuYy5pc1VuZGVmaW5lZCgpOwpAQCAtMTIxOCw3ICsxMjE3LDcgQEAgYm9vbCBOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OmVudW1lcgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2lu
V29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogIAogICAgIFByb3BlcnR5TmFt
ZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5n
ZXRQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRF
bnVtUHJvcGVydGllcyk7CkBAIC0xMjYyLDcgKzEyNjEsNyBAQCBzdGF0aWMgYm9vbCBnZXRPYmpl
Y3RJRChOZXRzY2FwZVBsdWdpbkluCiAgICAgCiB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6YWRkVmFsdWVUb0FycmF5KE5TTXV0YWJsZUFycmF5ICphcnJheSwgRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBpZiAodmFsdWUuaXNT
dHJpbmcoKSkgewogICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRo
SW50OlN0cmluZ1ZhbHVlVHlwZV1dOwpAQCAtMTY3Miw3ICsxNjcxLDcgQEAgdm9pZCBOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6Om1vdmVHbAogICAgICAgICByZXR1cm47CiAKICAgICB7Ci0g
ICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9y
KGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhnbG9iYWxFeGNlcHRpb25TdHJpbmcoKSkpKTsKICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gMTIw
OTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTA0LDcgKzEwNCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2lu
ZyBKU0M6OkpTR2xvYmFsT2JqZWN0OwogdXNpbmcgSlNDOjpKU0xvY2s7CiB1c2luZyBKU0M6OkpT
VmFsdWU7Ci11c2luZyBKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seTsKIAogLyoKIEhlcmUgaXMg
dGhlIGN1cnJlbnQgYmVoYXZpb3IgbWF0cml4IGZvciBmb3VyIHR5cGVzIG9mIG5hdmlnYXRpb25z
OgpAQCAtNTk3LDggKzU5Niw4IEBAIC0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3IKICAgICBpZiAoIXJlc3VsdCB8fCAoIXJlc3VsdC5pc0Jvb2xlYW4oKSAmJiAhcmVzdWx0
LmlzU3RyaW5nKCkgJiYgIXJlc3VsdC5pc051bWJlcigpKSkKICAgICAgICAgcmV0dXJuIEAiIjsK
IAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0
KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIH0KIApAQCAtMTEyMyw4ICsxMTIyLDggQEAgLSAo
TlNTdHJpbmcgKilfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcgogICAgIGlmICghcmVzdWx0IHx8
ICghcmVzdWx0LmlzQm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0Lmlz
TnVtYmVyKCkpKQogICAgICAgICByZXR1cm4gQCIiOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGFueVdvcmxkR2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlw
dERlYnVnRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE3NCw5ICsxNzQsOSBAQCAtIChOU0FycmF5ICopc2NvcGVDaGFpbgogICAgIGlmICgh
X3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJy
YXldOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lLT5z
Y29wZUNoYWluKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NvcGVDaGFpbi0+Z2xvYmFsRGF0
YSk7CiAgICAgaWYgKCFzY29wZUNoYWluLT5uZXh0KSAgLy8gZ2xvYmFsIGZyYW1lCiAgICAgICAg
IHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6X3ByaXZhdGUtPmdsb2JhbE9iamVjdF07
CiAKQEAgLTIyOSwxMyArMjI5LDEzIEBAIC0gKGlkKWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmlu
ZyAqKXNjcmkKICAgICBpZiAoIV9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZSkKICAgICAgICAg
cmV0dXJuIG5pbDsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0K
ICAgICAvLyBJZiB0aGlzIGlzIHRoZSBnbG9iYWwgY2FsbCBmcmFtZSBhbmQgdGhlcmUgaXMgbm8g
ZHluYW1pYyBnbG9iYWwgb2JqZWN0LAogICAgIC8vIERhc2hjb2RlIGlzIGF0dGVtcHRpbmcgdG8g
ZXhlY3V0ZSBKUyBpbiB0aGUgZXZhbHVhdG9yIHVzaW5nIGEgc3RhbGUKICAgICAvLyBXZWJTY3Jp
cHRDYWxsRnJhbWUuIEluc3RlYWQsIHdlIG5lZWQgdG8gc2V0IHRoZSBkeW5hbWljIGdsb2JhbCBv
YmplY3QKICAgICAvLyBhbmQgZXZhbHVhdGUgdGhlIEpTIGluIHRoZSBnbG9iYWwgb2JqZWN0J3Mg
Z2xvYmFsIGNhbGwgZnJhbWUuCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IF9w
cml2YXRlLT5kZWJ1Z2dlci0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworCiAgICAgaWYgKHNlbGYgPT0gX3ByaXZhdGUt
PmRlYnVnZ2VyLT5nbG9iYWxDYWxsRnJhbWUoKSAmJiAhZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCkuZHluYW1pY0dsb2JhbE9iamVjdCkgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gX3ByaXZhdGUtPmRlYnVnZ2VyLT5nbG9iYWxPYmplY3QoKTsKIApJbmRleDogU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01ODEsOCAr
NTgxLDggQEAgKyAodm9pZClfcmVwb3J0RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4YwogICAgIGlm
ICghZXhjZXB0aW9uIHx8ICFjb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjU3Rh
dGUgPSB0b0pTKGNvbnRleHQpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWNTdGF0ZSk7CiAK
ICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgaGFzIGEgRE9NV2luZG93IGdsb2JhbCBvYmpl
Y3QsIG90aGVyd2lzZSB0aGlzIGNvbnRleHQgZGlkbid0IG9yaWdpbmF0ZSBmcm9tIGEgV2ViVmll
dy4KICAgICBpZiAoIXRvSlNET01XaW5kb3coZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpKQpAQCAtNDg1MSw3ICs0ODUxLDcgQEAgLSAoTlNBcHBsZUV2ZW50RGVzY3JpcHRvciAqKWFl
RGVzY0J5RXZhbAogICAgIEpTVmFsdWUgcmVzdWx0ID0gY29yZUZyYW1lLT5zY3JpcHQoKS0+ZXhl
Y3V0ZVNjcmlwdChzY3JpcHQsIHRydWUpLmpzVmFsdWUoKTsKICAgICBpZiAoIXJlc3VsdCkgLy8g
RklYTUU6IHBhc3MgZXJyb3JzCiAgICAgICAgIHJldHVybiAwOwotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29yZUZyYW1lLT5z
Y3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhl
YygpKTsKICAgICByZXR1cm4gYWVEZXNjRnJvbUpTVmFsdWUoY29yZUZyYW1lLT5zY3JpcHQoKS0+
Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpLCByZXN1
bHQpOwogfQogCkBAIC02NTYwLDggKzY1NjAsOCBAQCAtICh2b2lkKV9ub3RpZmljYXRpb25zRGlk
Q2xvc2U6KE5TQXJyYXkgCiAKIC0gKEpTVmFsdWVSZWYpX2NvbXB1dGVkU3R5bGVJbmNsdWRpbmdW
aXNpdGVkSW5mbzooSlNDb250ZXh0UmVmKWNvbnRleHQgZm9yRWxlbWVudDooSlNWYWx1ZVJlZil2
YWx1ZQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0wNi0yMCAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91
bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3Rl
YWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3Jy
ZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRo
YXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1l
LmNwcDoKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OmFkZFF0U2VuZGVyVG9HbG9iYWxPYmpl
Y3QpOgorICAgICAgICAoUVdlYkZyYW1lOjphZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QpOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAg
ICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjppbmplY3RJbnRlcm5hbHNPYmplY3QpOgor
ICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KToK
KwogMjAxMi0wNi0yMSAgVGhpYWdvIE1hcmNvcyBQLiBTYW50b3MgIDx0aGlhZ28uc2FudG9zQGlu
dGVsLmNvbT4KIAogICAgICAgICBbV0syXVtRdF0gQ29sb3IgY2hvb3NlciBBUEkgbWlzc2luZwpJ
bmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDYs
MTMgKzUwNiwxMiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBxdFNlbmRlckNhbGxiYWNrKEpTQ29uCiAK
IHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6YWRkUXRTZW5kZXJUb0dsb2JhbE9iamVjdCgpCiB7Ci0g
ICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBK
U0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhmcmFtZSwgbWFpblRocmVhZE5vcm1h
bFdvcmxkKCkpOwogICAgIFFfQVNTRVJUKHdpbmRvdyk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygpOwogICAgIFFfQVNTRVJUKGV4ZWMpOworICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9
IDo6dG9SZWYoZXhlYyk7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHByb3BlcnR5TmFt
ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIl9fcXRfc2VuZGVyX18iKSk7
CkBAIC02NTcsNyArNjU2LDYgQEAgdm9pZCBRV2ViRnJhbWU6OmFkZFRvSmF2YVNjcmlwdFdpbmRv
d09iagogICAgICAgICByZXR1cm47CiAjaWYgVVNFKEpTQykKICAgICBKU0M6OkJpbmRpbmdzOjpR
dEluc3RhbmNlOjpWYWx1ZU93bmVyc2hpcCB2YWx1ZU93bmVyc2hpcCA9IHN0YXRpY19jYXN0PEpT
Qzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6OlZhbHVlT3duZXJzaGlwPihvd25lcnNoaXApOwotICAg
IEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTRE9N
V2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KGQtPmZyYW1lLCBtYWluVGhyZWFkTm9ybWFs
V29ybGQoKSk7CiAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdDsKICAgICBpZiAo
dmFsdWVPd25lcnNoaXAgPT0gSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6UXRPd25lcnNoaXAp
CkBAIC02NzUsNiArNjczLDcgQEAgdm9pZCBRV2ViRnJhbWU6OmFkZFRvSmF2YVNjcmlwdFdpbmRv
d09iagogICAgIH0KIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxF
eGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTQzo6SlNP
YmplY3QqIHJ1bnRpbWVPYmplY3QgPQogICAgICAgICAgICAgSlNDOjpCaW5kaW5nczo6UXRJbnN0
YW5jZTo6Z2V0UXRJbnN0YW5jZShvYmplY3QsIHJvb3QsIHZhbHVlT3duZXJzaGlwKS0+Y3JlYXRl
UnVudGltZU9iamVjdChleGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4NiwxMyArMTA4NiwxMiBAQCB2
b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjppbmplY3RJbnRlCiB7CiAgICAgV2ViQ29yZTo6
RnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOwogI2lmIFVT
RShKU0MpCi0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7
Ci0KICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhjb3JlRnJhbWUsIG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBRX0FTU0VSVCh3aW5kb3cpOwogCiAgICAgSlND
OjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKICAgICBRX0FTU0VSVChl
eGVjKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNDb250ZXh0
UmVmIGNvbnRleHQgPSB0b1JlZihleGVjKTsKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVj
dEludGVybmFsc09iamVjdChjb250ZXh0KTsKQEAgLTExMTMsMTMgKzExMTIsMTIgQEAgdm9pZCBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRJbnRlcgogewogICAgIFdlYkNvcmU6OkZyYW1l
KiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKGZyYW1lKTsKICNpZiBVU0UoSlND
KQotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAg
ICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coY29yZUZyYW1lLCBtYWluVGhy
ZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgUV9BU1NFUlQod2luZG93KTsKIAogICAgIEpTQzo6RXhl
Y1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CiAgICAgUV9BU1NFUlQoZXhlYyk7
CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTQ29udGV4dFJlZiBj
b250ZXh0ID0gdG9SZWYoZXhlYyk7CiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpyZXNldEludGVy
bmFsc09iamVjdChjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDky
NikKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI5IEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBs
ZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNp
dGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIK
KyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2Rl
IGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlv
bi4KKworICAgICAgICAqIFdlYkNvcmVTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmVT
dGF0aXN0aWNzOjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0
aXN0aWNzOjpqYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVT
dGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdl
YkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50KToK
KyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlw
ZUNvdW50cyk6CisgICAgICAgICogV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViRnJhbWU6OnN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRJblNjcmlwdFdvcmxkKToKKyAgICAgICAgKiBXZWJK
YXZhU2NyaXB0Q29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkphdmFTY3JpcHRDb2xsZWN0b3I6
Om9iamVjdENvdW50KToKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6
OnN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYlZp
ZXc6OnJlcG9ydEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJWaWV3OjplbGVtZW50RnJvbUpTKToK
KwogMjAxMi0wNi0yMCAgR2FycmV0IEtlbGx5ICA8Z2RrQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBNb3ZpbmcgY29va2llRW5hYmxlZC9zZXRDb29raWVFbmFibGVkIGZyb20gUGFnZSB0byBTZXR0
aW5ncy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAJKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRF
UjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291
bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0
Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEwOSw3ICsxMDksNyBAQCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAg
ICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAg
LTEyMCw3ICsxMjAsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0
CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQo
KTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEzMSw3ICsxMzEsNyBAQCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0
dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkt
PmhlYXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0K
QEAgLTEzOSw3ICsxMzksNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0
aXN0CiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2Ny
aXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyggCiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJ
UHJvcGVydHlCYWcyKiogdHlwZU5hbWVzQW5kQ291bnRzKQogewotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBqc09iamVj
dFR5cGVOYW1lcyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVj
dGVkT2JqZWN0VHlwZUNvdW50cygpKTsKICAgICB0eXBlZGVmIFR5cGVDb3VudFNldDo6Y29uc3Rf
aXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgSXRlcmF0b3IgZW5kID0ganNPYmplY3RUeXBlTmFtZXMt
PmVuZCgpOwpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysg
U291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyAr
MTI2LDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIEpTQzo6SlNHbG9iYWxPYmplY3Q7
CiB1c2luZyBKU0M6OkpTTG9jazsKIHVzaW5nIEpTQzo6SlNWYWx1ZTsKLXVzaW5nIEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5OwogCiAjZGVmaW5lIEZMQVNIX1JFRFJBVyAwCiAKQEAgLTI1Mjgs
OCArMjUyNyw4IEBAIEhSRVNVTFQgV2ViRnJhbWU6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmEKICAg
ICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0LmlzQm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmco
KSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBTX09LOwogCi0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhl
YyA9IGFueVdvcmxkR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVy
SG9sZGVyIGxvY2soZXhlYyk7CiAgICAgU3RyaW5nIHJlc3VsdFN0cmluZyA9IHVzdHJpbmdUb1N0
cmluZyhyZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAqZXZhbHVhdGlv
blJlc3VsdCA9IEJTdHJpbmcocmVzdWx0U3RyaW5nKS5yZWxlYXNlKCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvd2luL1dlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvd2luL1dlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
V2ViSmF2YVNjcmlwdEMKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKICAgICB9CiAKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgKmNvdW50ID0gKFVJTlQp
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCk7CiAg
ICAgcmV0dXJuIFNfT0s7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMTIw
OTI2KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxOTQsOCArMzE5NCw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6c3Ry
aW4KICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvblJlc3VsdCkKICAgICAgICAgcmV0dXJuIEVfRkFJ
TDsKICAgICBlbHNlIGlmIChzY3JpcHRFeGVjdXRpb25SZXN1bHQuaXNTdHJpbmcoKSkgewotICAg
ICAgICBKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjID0gY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICAgICAgKnJlc3VsdCA9IEJTdHJpbmcodXN0cmluZ1RvU3RyaW5n
KHNjcmlwdEV4ZWN1dGlvblJlc3VsdC5nZXRTdHJpbmcoZXhlYykpKTsKICAgICB9CiAKQEAgLTU4
NTEsOCArNTg1MSw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6cmVwb3IK
ICAgICBpZiAoIWNvbnRleHQgfHwgIWV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIEVfRkFJTDsK
IAotICAgIEpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6
OkV4ZWNTdGF0ZSogZXhlY1N0YXRlID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjU3RhdGUpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IGhhcyBhIERP
TVdpbmRvdyBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgdGhpcyBjb250ZXh0IGRpZG4ndCBvcmln
aW5hdGUgZnJvbSBhIFdlYlZpZXcuCiAgICAgaWYgKCF0b0pTRE9NV2luZG93KGV4ZWNTdGF0ZS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkKQEAgLTU4NzgsOCArNTg3OCw5IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6ZWxlbWUKICAgICBpZiAoIW5vZGVPYmplY3QpCiAgICAg
ICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7Ci0gICAgRWxlbWVudCogZWx0ID0gdG9FbGVtZW50KHRvSlModG9KUyhjb250ZXh0
KSwgbm9kZU9iamVjdCkpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgRWxlbWVudCogZWx0ID0gdG9FbGVtZW50
KHRvSlMoZXhlYywgbm9kZU9iamVjdCkpOwogICAgIGlmICghZWx0KQogICAgICAgICByZXR1cm4g
RV9GQUlMOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148890</attachid>
            <date>2012-06-21 14:50:59 -0700</date>
            <delta_ts>2012-06-21 15:17:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89123-20120621145058.patch</filename>
            <type>text/plain</type>
            <size>203920</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBA
QAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9BUElTaGltcy5oOgorICAg
ICAgICAoQVBJRW50cnlTaGltV2l0aG91dExvY2spOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNo
aW1XaXRob3V0TG9jazo6QVBJRW50cnlTaGltV2l0aG91dExvY2spOiBBZGRlZCBhbiBleHRyYSBw
YXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIHRvIAorICAgICAgICBkZXRlcm1pbmUgd2hldGhl
ciB3ZSBzaG91bGQgcmVmIHRoZSBKU0dsb2JhbERhdGEgb3Igbm90LiBXZSB3YW50IHRvIHJlZiBh
bGwgdGhlIHRpbWUgZXhjZXB0IGZvciBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBjbGFzcyBi
ZWNhdXNlIHRpbWVyRGlkRmlyZSBjb3VsZCBydW4gYWZ0ZXIgc29tZWJvZHkgaGFzIHN0YXJ0ZWQg
dG8gdGVhciBkb3duIHRoYXQgcGFydGljdWxhciAKKyAgICAgICAgSlNHbG9iYWxEYXRhLCBzbyB3
ZSB3b3VsZG4ndCB3YW50IHRvIHJlc3VycmVjdCB0aGUgcmVmIGNvdW50IG9mIHRoYXQgSlNHbG9i
YWxEYXRhIGZyb20gMCBiYWNrIHRvIDEgYWZ0ZXIgCisgICAgICAgIGl0cyBkZXN0cnVjdGlvbiBo
YXMgYmVndW4uIAorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW1XaXRob3V0TG9jazo6fkFQSUVu
dHJ5U2hpbVdpdGhvdXRMb2NrKTogTm93IGRlcmVmcyBpZiBpdCBhbHNvIHJlZmVkLgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OkFQSUVudHJ5U2hpbSk6CisgICAgICAgIChBUElFbnRyeVNo
aW0pOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW06On5BUElFbnRyeVNoaW0pOgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OmluaXQpOiBGYWN0b3JlZCBvdXQgY29tbW9uIGluaXRpYWxp
emF0aW9uIGNvZGUgZm9yIHRoZSB2YXJpb3VzIEFQSUVudHJ5U2hpbSBjb25zdHJ1Y3RvcnMuCisg
ICAgICAgIEFsc28gbW92ZWQgdGhlIHRpbWVvdXRDaGVja2VyIHN0b3AgYW5kIHN0YXJ0IGhlcmUg
YmVjYXVzZSB3ZSBuZWVkIHRvIHN0YXJ0IGFmdGVyIHdlJ3ZlIGdyYWJiZWQgdGhlIEFQSSBsb2Nr
CisgICAgICAgIGFuZCBiZWZvcmUgd2UndmUgcmVsZWFzZWQgaXQsIHdoaWNoIGNhbiBvbmx5IGRv
bmUgaW4gQVBJRW50cnlTaGltLgorICAgICAgICAoSlNDOjpBUElDYWxsYmFja1NoaW06On5BUElD
YWxsYmFja1NoaW0pOiBXZSBubyBsb25nZXIgbmVlZCB0byBzeW5jaHJvbml6ZSBoZXJlLgorICAg
ICAgICAqIEFQSS9KU0NvbnRleHRSZWYuY3BwOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0Q3Jl
YXRlKToKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXApOgorICAgICAgICAo
SlNHbG9iYWxDb250ZXh0UmVsZWFzZSk6CisgICAgICAgIChKU0NvbnRleHRDcmVhdGVCYWNrdHJh
Y2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRTcGFjZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6cHJvdGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucHJv
dGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFw
OjpzZXRBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWN0aXZpdHlDYWxs
YmFjayk6CisgICAgICAgIChKU0M6OkhlYXA6OnN3ZWVwZXIpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOiBDaGFuZ2VkIG1fYWN0aXZpdHlDYWxsYmFjayBhbmQgbV9zd2VlcGVyIHRvIGJlIHJhdyBw
b2ludGVycyByYXRoZXIgdGhhbiBPd25QdHJzIGJlY2F1c2UgdGhleSAKKyAgICAgICAgYXJlIG5v
dyByZXNwb25zaWJsZSBmb3IgdGhlaXIgb3duIGxpZmV0aW1lLiBBbHNvIGNoYW5nZWQgdGhlIG9y
ZGVyIG9mIGRlY2xhcmF0aW9uIG9mIHRoZSBHQ0FjdGl2aXR5Q2FsbGJhY2sKKyAgICAgICAgYW5k
IHRoZSBJbmNyZW1lbnRhbFN3ZWVwZXIgdG8gbWFrZSBzdXJlIHRoZXkncmUgdGhlIGxhc3QgdGhp
bmdzIHRoYXQgZ2V0IGluaXRpYWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gdG8gCisgICAgICAg
IHByZXZlbnQgYW55IGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBKU0ds
b2JhbERhdGEvSGVhcCB0aGV5IG1pZ2h0IGNhcmUgYWJvdXQuCisgICAgICAgIChIZWFwKToKKyAg
ICAgICAgKiBoZWFwL0hlYXBUaW1lci5jcHA6IFJlZmFjdG9yZWQgdG8gYWxsb3cgZm9yIHRocmVh
ZC1zYWZlIG9wZXJhdGlvbiBhbmQgc2h1dGRvd24uCisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6
fkhlYXBUaW1lcik6CisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6aW52YWxpZGF0ZSk6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OmRpZFN0YXJ0Vk1TaHV0ZG93bik6
IENhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIH5KU0dsb2JhbERhdGEuIElmIHdlJ3JlIG9uIHRo
ZSBzYW1lIHRocmVhZCAKKyAgICAgICAgdGhhdCB0aGUgSGVhcFRpbWVyIGlzIHJ1bm5pbmcgb24s
IHdlIGtpbGwgdGhlIEhlYXBUaW1lciBvdXJzZWx2ZXMuIElmIG5vdCwgdGhlbiB3ZSBzZXQgc29t
ZSBzdGF0ZSBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBhbmQgc2NoZWR1bGUgaXQgdG8gZmly
ZSBpbW1lZGlhdGVseSBzbyB0aGF0IGl0IGNhbiBub3RpY2UgYW5kIGtpbGwgaXRzZWxmLgorICAg
ICAgICAoSlNDOjpIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSk6IFdlIGdyYWIgb3VyIG11dGV4IGFu
ZCBjaGVjayBvdXIgSlNHbG9iYWxEYXRhIHBvaW50ZXIuIElmIGl0IGhhcyBiZWVuIHplcm8tZWQK
KyAgICAgICAgb3V0LCB0aGVuIHdlIGtub3cgdGhlIFZNIGhhcyBzdGFydGVkIHRvIHNodXRkb3du
IGFuZCB3ZSBzaG91bGQga2lsbCBvdXJzZWx2ZXMuIE90aGVyd2lzZSwgZ3JhYiB0aGUgQVBJRW50
cnlTaGltLAorICAgICAgICBidXQgd2l0aG91dCByZWYtaW5nIHRoZSBKU0dsb2JhbERhdGEgKHdl
IGRvbid0IHdhbnQgdG8gYnJpbmcgdGhlIEpTR2xvYmFsRGF0YSdzIHJlZi1jb3VudCBmcm9tIDAg
dG8gMSkgaW4gY2FzZSAKKyAgICAgICAgd2Ugd2VyZSBpbnRlcnJ1cHRlZCBiZXR3ZWVuIHJlbGVh
c2luZyBvdXIgbXV0ZXggYW5kIHRyeWluZyB0byBncmFiIHRoZSBBUElMb2NrLgorICAgICAgICAq
IGhlYXAvSGVhcFRpbWVyLmg6IAorICAgICAgICAoSGVhcFRpbWVyKToKKyAgICAgICAgKiBoZWFw
L0luY3JlbWVudGFsU3dlZXBlci5jcHA6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBl
cjo6ZG9Xb3JrKTogV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIEFQSSBzaGltIGhlcmUgc2luY2UgSGVh
cFRpbWVyOjp0aW1lckRpZEZpcmUgaGFuZGxlcyAKKyAgICAgICAgYWxsIG9mIHRoYXQgZm9yIHVz
LiAKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUpOgorICAgICAgICAq
IGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAgIChJbmNyZW1lbnRhbFN3ZWVwZXIp
OgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKiBoZWFwL1dlYWtCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OldlYWtCbG9jazo6cmVhcCk6CisgICAgICAgICoganNjLmNw
cDoKKyAgICAgICAgKGZ1bmN0aW9uR0MpOgorICAgICAgICAoZnVuY3Rpb25SZWxlYXNlRXhlY3V0
YWJsZU1lbW9yeSk6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBs
ZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpjaGVja1N5bnRheCk6CisgICAgICAgIChKU0M6OmV2
YWx1YXRlKToKKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oOgorICAgICAg
ICAoRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayk6CisgICAgICAgIChKU0M6OkRlZmF1bHRHQ0Fj
dGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6IFNpZ25hbHMgdG8gdGhlIHR3byBI
ZWFwVGltZXJzIChHQ0FjdGl2aXR5Q2FsbGJhY2sgYW5kIEluY3JlbWVudGFsU3dlZXBlcikKKyAg
ICAgICAgdGhhdCB0aGUgVk0gaGFzIHN0YXJ0ZWQgc2h1dHRpbmcgZG93bi4gSXQgdGhlbiB3YWl0
cyB1bnRpbCB0aGUgSGVhcFRpbWVyIGlzIGRvbmUgd2l0aCB3aGF0ZXZlciBhY3Rpdml0eSAKKyAg
ICAgICAgaXQgbmVlZHMgdG8gZG8gYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCBhbnkgZnVydGhlciBk
ZXN0cnVjdGlvbi4gQWxzbyBhc3NlcnRzIHRoYXQgd2UgZG8gbm90IGN1cnJlbnRseSBob2xkIHRo
ZSAKKyAgICAgICAgQVBJTG9jayBiZWNhdXNlIHRoaXMgY291bGQgcG90ZW50aWFsbHkgY2F1c2Ug
ZGVhZGxvY2sgd2hlbiB3ZSB0cnkgdG8gc2lnbmFsIHRvIHRoZSBIZWFwVGltZXJzIHVzaW5nIHRo
ZWlyIG11dGV4ZXMuCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2Up
OiBQcm90ZWN0IHRoZSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNoYXJlZCBpbnN0YW5jZSB3aXRo
IHRoZSBHbG9iYWxKU0xvY2suCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5z
dGFuY2VJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDogQ2hhbmdl
IHRvIGJlIFRocmVhZFNhZmVSZWZDb3VudGVkIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3Jy
eSBhYm91dCByZWZpbmcgYW5kIAorICAgICAgICBkZS1yZWZpbmcgSlNHbG9iYWxEYXRhcyBvbiBz
ZXBhcmF0ZSB0aHJlYWRzIHNpbmNlIHdlIGRvbid0IGRvIGl0IHRoYXQgb2Z0ZW4gYW55d2F5cy4K
KyAgICAgICAgKEpTR2xvYmFsRGF0YSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6YXBp
TG9jayk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogcnVudGltZS9KU0xvY2suY3BwOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEpTQzo6R2xvYmFsSlNMb2NrOjpHbG9iYWxKU0xvY2spOiBGb3Ig
YWNjZXNzaW5nIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisgICAgICAgIChKU0M6Okdsb2JhbEpTTG9j
azo6fkdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6SlNMb2NrSG9s
ZGVyKTogTXV0ZXhMb2NrZXIgZm9yIEpTTG9jay4gQWxzbyByZWZzIHRoZSBKU0dsb2JhbERhdGEg
dG8ga2VlcCBpdCBhbGl2ZSBzbyB0aGF0IAorICAgICAgICBpdCBjYW4gc3VjY2Vzc2Z1bGx5IHVu
bG9jayBpdCBsYXRlciB3aXRob3V0IGl0IGRpc2FwcGVhcmluZyBmcm9tIHVuZGVybmVhdGggaXQu
CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6fkpTTG9ja0hvbGRlcik6CisgICAgICAgIChK
U0M6OkpTTG9jazo6SlNMb2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp+SlNMb2NrKToKKyAg
ICAgICAgKEpTQzo6SlNMb2NrOjpsb2NrKTogVXNlcyB0aGUgc3BpbiBsb2NrIGZvciBndWFyZGlu
ZyB0aGUgbG9jayBjb3VudCBhbmQgb3duZXIgdGhyZWFkIGZpZWxkcy4gVXNlcyB0aGUgbXV0ZXgg
Zm9yIAorICAgICAgICBhY3R1YWxseSB3YWl0aW5nIGZvciBsb25nIHBlcmlvZHMuIAorICAgICAg
ICAoSlNDOjpKU0xvY2s6OnVubG9jayk6CisgICAgICAgIChKU0M6OkpTTG9jazo6Y3VycmVudFRo
cmVhZElzSG9sZGluZ0xvY2spOiAKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpkcm9wQWxsTG9ja3Mp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseSk6Cisg
ICAgICAgIChKU0M6OkpTTG9jazo6Z3JhYkFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2Nrcyk6CisgICAgICAgIChKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKToKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0xvY2tI
b2xkZXIpOgorICAgICAgICAoSlNMb2NrKToKKyAgICAgICAgKERyb3BBbGxMb2Nrcyk6CisgICAg
ICAgICogcnVudGltZS9XZWFrR0NNYXAuaDoKKyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpzZXQp
OgorICAgICAgICAqIHRlc3RSZWdFeHAuY3BwOgorICAgICAgICAocmVhbE1haW4pOgorCiAyMDEy
LTA2LTIwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVk
dWNlZCAoYnV0IGRpZCBub3QgZWxpbWluYXRlKSB1c2Ugb2YgImJlcnplcmtlciBHQyIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0MKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IGV4ZWMtPmhlYXAoKS0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMzA3LDcgKzMwNyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQygKICNpZm5kZWYgTkRFQlVHCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLnJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KQEAgLTY2Nyw5ICs2NjcsOSBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50
cyhpbnQgYXJnYywgY2hhCiAKIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCisgICAgCiAgICAgUmVm
UHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKFRocmVh
ZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2Jh
bERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBwYXJzZUFyZ3Vt
ZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0UmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJl
Z0V4cC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
UmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDkgKzQ5NSw4IEBAIHN0YXRpYyB2b2lk
IHBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGEKIAogaW50IHJlYWxNYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwot
CiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3Jl
YXRlKFRocmVhZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGdsb2JhbERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBw
YXJzZUFyZ3VtZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJU2hpbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0FQSVNoaW1zLmgJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvQVBJU2hpbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMzEgKzI4LDQwIEBACiAK
ICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIK
KyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNp
bmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
QVBJRW50cnlTaGltV2l0aG91dExvY2sgeworcHVibGljOgorICAgIGVudW0gUmVmR2xvYmFsRGF0
YVRhZyB7IERvbnRSZWZHbG9iYWxEYXRhID0gMCwgUmVmR2xvYmFsRGF0YSB9OworCiBwcm90ZWN0
ZWQ6Ci0gICAgQVBJRW50cnlTaGltV2l0aG91dExvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBib29sIHJlZ2lzdGVyVGhyZWFkKQotICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRh
KQorICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
Ym9vbCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0YVRhZyBzaG91bGRSZWZHbG9iYWxEYXRh
KQorICAgICAgICA6IG1fc2hvdWxkUmVmR2xvYmFsRGF0YShzaG91bGRSZWZHbG9iYWxEYXRhKQor
ICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICAgICAsIG1fZW50cnlJZGVu
dGlmaWVyVGFibGUod3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZ2xv
YmFsRGF0YS0+aWRlbnRpZmllclRhYmxlKSkKICAgICB7CisgICAgICAgIGlmIChzaG91bGRSZWZH
bG9iYWxEYXRhKQorICAgICAgICAgICAgbV9nbG9iYWxEYXRhLT5yZWYoKTsKICAgICAgICAgVU5V
U0VEX1BBUkFNKHJlZ2lzdGVyVGhyZWFkKTsKICAgICAgICAgaWYgKHJlZ2lzdGVyVGhyZWFkKQog
ICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRU
aHJlYWQoKTsKICAgICAgICAgbV9nbG9iYWxEYXRhLT5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+
c3luY2hyb25pemUoKTsKLSAgICAgICAgbV9nbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5zdGFy
dCgpOworICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuc3dlZXBlcigpLT5zeW5jaHJvbml6ZSgp
OwogICAgIH0KIAogICAgIH5BUElFbnRyeVNoaW1XaXRob3V0TG9jaygpCiAgICAgewotICAgICAg
ICBtX2dsb2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKICAgICAgICAgd3RmVGhyZWFk
RGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUobV9lbnRyeUlkZW50aWZpZXJUYWJsZSk7
CisgICAgICAgIGlmIChtX3Nob3VsZFJlZkdsb2JhbERhdGEpCisgICAgICAgICAgICBtX2dsb2Jh
bERhdGEtPmRlcmVmKCk7CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgorICAgIFJlZkds
b2JhbERhdGFUYWcgbV9zaG91bGRSZWZHbG9iYWxEYXRhOwogICAgIEpTR2xvYmFsRGF0YSogbV9n
bG9iYWxEYXRhOwogICAgIElkZW50aWZpZXJUYWJsZSogbV9lbnRyeUlkZW50aWZpZXJUYWJsZTsK
IH07CkBAIC02MSwyMCArNzAsMzggQEAgY2xhc3MgQVBJRW50cnlTaGltIDogcHVibGljIEFQSUVu
dHJ5U2hpbQogcHVibGljOgogICAgIC8vIE5vcm1hbCBBUEkgZW50cnkKICAgICBBUElFbnRyeVNo
aW0oRXhlY1N0YXRlKiBleGVjLCBib29sIHJlZ2lzdGVyVGhyZWFkID0gdHJ1ZSkKLSAgICAgICAg
OiBBUElFbnRyeVNoaW1XaXRob3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRo
cmVhZCkKLSAgICAgICAgLCBtX2xvY2soZXhlYykKKyAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRo
b3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0
YSkKKyAgICB7CisgICAgICAgIGluaXQoKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG5lY2Vzc2FyeSBmb3IgSGVhcFRpbWVyIHRvIHByZXZlbnQgaXQgZnJvbSBhY2NpZGVu
dGFsbHkgcmVzdXJyZWN0aW5nIAorICAgIC8vIHRoZSByZWYgY291bnQgb2YgYSAiZGVhZCIgSlNH
bG9iYWxEYXRhLgorICAgIEFQSUVudHJ5U2hpbShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFJl
Zkdsb2JhbERhdGFUYWcgcmVmR2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUp
CisgICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0YSwgcmVnaXN0ZXJU
aHJlYWQsIHJlZkdsb2JhbERhdGEpCiAgICAgeworICAgICAgICBpbml0KCk7CiAgICAgfQogCiAg
ICAgLy8gSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvciBvbmx5IGhhcyBhIGdsb2JhbERhdGEuCiAg
ICAgQVBJRW50cnlTaGltKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRo
cmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0
YSwgcmVnaXN0ZXJUaHJlYWQpCi0gICAgICAgICwgbV9sb2NrKGdsb2JhbERhdGEtPmlzU2hhcmVk
SW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5KQorICAgICAg
ICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKGdsb2JhbERhdGEsIHJlZ2lzdGVyVGhyZWFkLCBS
ZWZHbG9iYWxEYXRhKQogICAgIHsKKyAgICAgICAgaW5pdCgpOworICAgIH0KKworICAgIH5BUElF
bnRyeVNoaW0oKQorICAgIHsKKyAgICAgICAgbV9nbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5z
dG9wKCk7CisgICAgICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLnVubG9jaygpOwogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBKU0xvY2sgbV9sb2NrOworICAgIHZvaWQgaW5pdCgpCisgICAgewor
ICAgICAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5sb2NrKCk7CisgICAgICAgIG1fZ2xvYmFs
RGF0YS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsKKyAgICB9CiB9OwogCiBjbGFzcyBBUElDYWxs
YmFja1NoaW0gewpAQCAtODgsNyArMTE1LDYgQEAgcHVibGljOgogCiAgICAgfkFQSUNhbGxiYWNr
U2hpbSgpCiAgICAgewotICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuYWN0aXZpdHlDYWxsYmFj
aygpLT5zeW5jaHJvbml6ZSgpOwogICAgICAgICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElk
ZW50aWZpZXJUYWJsZShtX2dsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZSk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDYgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xv
YmFsQ29udGV4dENyZWF0ZQogICAgIC8vIElmIHRoZSBhcHBsaWNhdGlvbiB3YXMgbGlua2VkIGJl
Zm9yZSBKU0dsb2JhbENvbnRleHRDcmVhdGUgd2FzIGNoYW5nZWQgdG8gdXNlIGEgdW5pcXVlIEpT
R2xvYmFsRGF0YSwKICAgICAvLyB3ZSB1c2UgYSBzaGFyZWQgb25lIGZvciBiYWNrd2FyZHMgY29t
cGF0aWJpbGl0eS4KICAgICBpZiAoTlNWZXJzaW9uT2ZMaW5rVGltZUxpYnJhcnkoIkphdmFTY3Jp
cHRDb3JlIikgPD0gd2Via2l0Rmlyc3RWZXJzaW9uV2l0aENvbmN1cnJlbnRHbG9iYWxDb250ZXh0
cykgewotICAgICAgICBKU0xvY2sgbG9jayhMb2NrRm9yUmVhbCk7CiAgICAgICAgIHJldHVybiBK
U0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKHRvUmVmKCZKU0dsb2JhbERhdGE6OnNoYXJlZElu
c3RhbmNlKCkpLCBnbG9iYWxPYmplY3RDbGFzcyk7CiAgICAgfQogI2VuZGlmIC8vIE9TKERBUldJ
TikKQEAgLTkwLDExICs4OSw5IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRD
cmVhdGUKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKLSAgICBKU0xvY2sgbG9jayhM
b2NrRm9yUmVhbCk7CiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IGdyb3Vw
ID8gUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+KHRvSlMoZ3JvdXApKSA6IEpTR2xvYmFsRGF0YTo6
Y3JlYXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlwZVNtYWxsKTsKIAogICAgIEFQSUVudHJ5
U2hpbSBlbnRyeVNoaW0oZ2xvYmFsRGF0YS5nZXQoKSwgZmFsc2UpOwotCiAgICAgZ2xvYmFsRGF0
YS0+bWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsKIAogICAgIGlmICghZ2xvYmFsT2Jq
ZWN0Q2xhc3MpIHsKQEAgLTEyNCwxOCArMTIxLDE5IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0ds
b2JhbENvbnRleHRSZXRhaW4KIAogdm9pZCBKU0dsb2JhbENvbnRleHRSZWxlYXNlKEpTR2xvYmFs
Q29udGV4dFJlZiBjdHgpCiB7CisgICAgSWRlbnRpZmllclRhYmxlKiBzYXZlZElkZW50aWZpZXJU
YWJsZTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrIGxvY2so
ZXhlYyk7CisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAotICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBJZGVudGlm
aWVyVGFibGUqIHNhdmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJl
bnRJZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUpOworICAgICAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIHNh
dmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVy
VGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUpOwogCi0gICAgYm9vbCBwcm90ZWN0Q291
bnRJc1plcm8gPSBIZWFwOjpoZWFwKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPnVucHJv
dGVjdChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwotICAgIGlmIChwcm90ZWN0Q291bnRJ
c1plcm8pIHsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+c3lu
Y2hyb25pemUoKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVj
dEdyYXBoKCk7CisgICAgICAgIGJvb2wgcHJvdGVjdENvdW50SXNaZXJvID0gSGVhcDo6aGVhcChl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT51bnByb3RlY3QoZXhlYy0+ZHluYW1pY0dsb2Jh
bE9iamVjdCgpKTsKKyAgICAgICAgaWYgKHByb3RlY3RDb3VudElzWmVybykKKyAgICAgICAgICAg
IGdsb2JhbERhdGEuaGVhcC5yZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOworICAgICAgICBn
bG9iYWxEYXRhLmRlcmVmKCk7CiAgICAgfQotICAgIGdsb2JhbERhdGEuZGVyZWYoKTsKIAogICAg
IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKHNhdmVkSWRlbnRpZmll
clRhYmxlKTsKIH0KQEAgLTE2Niw3ICsxNjQsNyBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNDb250
ZXh0R2V0R2xvYmFsQ29uCiBKU1N0cmluZ1JlZiBKU0NvbnRleHRDcmVhdGVCYWNrdHJhY2UoSlND
b250ZXh0UmVmIGN0eCwgdW5zaWduZWQgbWF4U3RhY2tTaXplKQogewogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2sgbG9jayhleGVjKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKIAogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICBVU3RyaW5nQnVp
bGRlciBidWlsZGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3Bh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNw
YWNlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIENoZWNrZWRC
b29sZWFuIENvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZVMKICAgICBpZiAoaXNPdmVyc2l6ZShieXRl
cykpCiAgICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZU92ZXJzaXplKGJ5dGVzLCBvdXRQdHIpOwog
ICAgIAorICAgIEFTU0VSVChtX2hlYXAtPmdsb2JhbERhdGEoKS0+YXBpTG9jaygpLmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9hbGxvY2F0
b3IuY3VycmVudENhcGFjaXR5KCkpOwogCiAgICAgYWxsb2NhdGVCbG9jaygpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMTUgKzE2
MCw5IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHByb3BvcnRpb25hbEhlYXBTaXoKICAgICByZXR1
cm4gMS4yNSAqIGhlYXBTaXplOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFNoYXJl
ZEluc3RhbmNlVGhyZWFkU3RhdGUoKQorc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRTaGFyZWRJ
bnN0YW5jZVRocmVhZFN0YXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBpZiAo
IUpTTG9jazo6bG9ja0NvdW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
SlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZ2xvYmFsRGF0YS0+YXBpTG9jaygp
LmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBp
c1ZhbGlkVGhyZWFkU3RhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQpAQCAtMTc2LDcgKzE3
MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkVGhyZWFkU3RhdGUoSlMKICAgICBpZiAo
Z2xvYmFsRGF0YS0+aWRlbnRpZmllclRhYmxlICE9IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRl
bnRpZmllclRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChnbG9iYWxE
YXRhLT5pc1NoYXJlZEluc3RhbmNlKCkgJiYgIWlzVmFsaWRTaGFyZWRJbnN0YW5jZVRocmVhZFN0
YXRlKCkpCisgICAgaWYgKGdsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSAmJiAhaXNWYWxp
ZFNoYXJlZEluc3RhbmNlVGhyZWFkU3RhdGUoZ2xvYmFsRGF0YSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMzI3LDcgKzMyMSw3IEBAIHZvaWQgSGVhcDo6
ZGlkQWJhbmRvbihzaXplX3QgYnl0ZXMpCiB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQog
ewogICAgIEFTU0VSVChrKTsKLSAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xk
aW5nTG9jaygpIHx8ICFtX2dsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSk7CisgICAgQVNT
RVJUKG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkp
OwogCiAgICAgaWYgKCFrLmlzQ2VsbCgpKQogICAgICAgICByZXR1cm47CkBAIC0zMzgsNyArMzMy
LDcgQEAgdm9pZCBIZWFwOjpwcm90ZWN0KEpTVmFsdWUgaykKIGJvb2wgSGVhcDo6dW5wcm90ZWN0
KEpTVmFsdWUgaykKIHsKICAgICBBU1NFUlQoayk7Ci0gICAgQVNTRVJUKEpTTG9jazo6Y3VycmVu
dFRocmVhZElzSG9sZGluZ0xvY2soKSB8fCAhbV9nbG9iYWxEYXRhLT5pc1NoYXJlZEluc3RhbmNl
KCkpOworICAgIEFTU0VSVChtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nTG9jaygpKTsKIAogICAgIGlmICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNjkyLDYgKzY4Niw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBz
d2VlcFRvZ2cKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xs
ZWN0aW9uIik7CiAgICAgCiAgICAgR0NQSEFTRShDb2xsZWN0KTsKKyAgICBBU1NFUlQoZ2xvYmFs
RGF0YSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgQVNT
RVJUKGdsb2JhbERhdGEoKS0+aWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJy
ZW50SWRlbnRpZmllclRhYmxlKCkpOwogICAgIEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAg
ICAgSkFWQVNDUklQVENPUkVfR0NfQkVHSU4oKTsKQEAgLTc3NywxOSArNzcyLDE5IEBAIHZvaWQg
SGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICBKQVZBU0NSSVBUQ09SRV9H
Q19FTkQoKTsKIH0KIAotdm9pZCBIZWFwOjpzZXRBY3Rpdml0eUNhbGxiYWNrKFBhc3NPd25QdHI8
R0NBY3Rpdml0eUNhbGxiYWNrPiBhY3Rpdml0eUNhbGxiYWNrKQordm9pZCBIZWFwOjpzZXRBY3Rp
dml0eUNhbGxiYWNrKEdDQWN0aXZpdHlDYWxsYmFjayogYWN0aXZpdHlDYWxsYmFjaykKIHsKICAg
ICBtX2FjdGl2aXR5Q2FsbGJhY2sgPSBhY3Rpdml0eUNhbGxiYWNrOwogfQogCiBHQ0FjdGl2aXR5
Q2FsbGJhY2sqIEhlYXA6OmFjdGl2aXR5Q2FsbGJhY2soKQogewotICAgIHJldHVybiBtX2FjdGl2
aXR5Q2FsbGJhY2suZ2V0KCk7CisgICAgcmV0dXJuIG1fYWN0aXZpdHlDYWxsYmFjazsKIH0KIAog
SW5jcmVtZW50YWxTd2VlcGVyKiBIZWFwOjpzd2VlcGVyKCkKIHsKLSAgICByZXR1cm4gbV9zd2Vl
cGVyLmdldCgpOworICAgIHJldHVybiBtX3N3ZWVwZXI7CiB9CiAKIHZvaWQgSGVhcDo6c2V0R2Fy
YmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoYm9vbCBlbmFibGUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDEwICs5OSwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1
cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0
aXZpdHlDYWxsYmFjayogYWN0aXZpdHlDYWxsYmFjaygpOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHNldEFjdGl2aXR5Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2aXR5Q2FsbGJh
Y2s+KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRBY3Rpdml0eUNhbGxiYWNr
KEdDQWN0aXZpdHlDYWxsYmFjayopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNl
dEdhcmJhZ2VDb2xsZWN0aW9uVGltZXJFbmFibGVkKGJvb2wpOwogCi0gICAgICAgIEluY3JlbWVu
dGFsU3dlZXBlciogc3dlZXBlcigpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBJbmNyZW1l
bnRhbFN3ZWVwZXIqIHN3ZWVwZXIoKTsKIAogICAgICAgICAvLyB0cnVlIGlmIGFuIGFsbG9jYXRp
b24gb3IgY29sbGVjdGlvbiBpcyBpbiBwcm9ncmVzcwogICAgICAgICBpbmxpbmUgYm9vbCBpc0J1
c3koKTsKQEAgLTIzNywxMCArMjM3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBkb3Vi
bGUgbV9sYXN0R0NMZW5ndGg7CiAgICAgICAgIGRvdWJsZSBtX2xhc3RDb2RlRGlzY2FyZFRpbWU7
CiAKLSAgICAgICAgT3duUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gbV9hY3Rpdml0eUNhbGxiYWNr
OwotICAgICAgICBPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPiBtX3N3ZWVwZXI7Ci0gICAgICAg
IAogICAgICAgICBEb3VibHlMaW5rZWRMaXN0PEV4ZWN1dGFibGVCYXNlPiBtX2NvbXBpbGVkQ29k
ZTsKKyAgICAgICAgCisgICAgICAgIEdDQWN0aXZpdHlDYWxsYmFjayogbV9hY3Rpdml0eUNhbGxi
YWNrOworICAgICAgICBJbmNyZW1lbnRhbFN3ZWVwZXIqIG1fc3dlZXBlcjsKICAgICB9OwogCiAg
ICAgaW5saW5lIGJvb2wgSGVhcDo6c2hvdWxkQ29sbGVjdCgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhlYXBUaW1lci5oIgogCisj
aW5jbHVkZSAiQVBJU2hpbXMuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpT
U3RyaW5nLmgiCisjaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0yMSw3ICsyNSw4IEBAIEhlYXBUaW1lcjo6SGVh
cFRpbWVyKEpTR2xvYmFsRGF0YSogZ2xvYmEKIAogSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKIHsK
LSAgICBpbnZhbGlkYXRlKCk7CisgICAgQ0ZSdW5Mb29wUmVtb3ZlVGltZXIobV9ydW5Mb29wLmdl
dCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworICAgIENGUnVuTG9v
cFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKIH0KIAogdm9pZCBIZWFwVGltZXI6OnN5
bmNocm9uaXplKCkKQEAgLTM1LDE0ICs0MCwzNyBAQCB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25p
emUoKQogCiB2b2lkIEhlYXBUaW1lcjo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgQ0ZSdW5Mb29wUmVt
b3ZlVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9u
TW9kZXMpOwotICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKKyAg
ICBtX2dsb2JhbERhdGEgPSAwOworICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1f
dGltZXIuZ2V0KCksIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc19kZWNhZGUpOworfQor
Cit2b2lkIEhlYXBUaW1lcjo6ZGlkU3RhcnRWTVNodXRkb3duKCkKK3sKKyAgICBpZiAoQ0ZSdW5M
b29wR2V0Q3VycmVudCgpID09IG1fcnVuTG9vcC5nZXQoKSkgeworICAgICAgICBpbnZhbGlkYXRl
KCk7CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFT
U0VSVCghbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2so
KSk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2h1dGRvd25NdXRleCk7CisgICAgaW52YWxp
ZGF0ZSgpOwogfQogCiB2b2lkIEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVy
UmVmLCB2b2lkKiBpbmZvKQogewogICAgIEhlYXBUaW1lciogYWdlbnQgPSBzdGF0aWNfY2FzdDxI
ZWFwVGltZXIqPihpbmZvKTsKLSAgICBhZ2VudC0+ZG9Xb3JrKCk7CisgICAgYWdlbnQtPm1fc2h1
dGRvd25NdXRleC5sb2NrKCk7CisgICAgaWYgKCFhZ2VudC0+bV9nbG9iYWxEYXRhKSB7CisgICAg
ICAgIGFnZW50LT5tX3NodXRkb3duTXV0ZXgudW5sb2NrKCk7CisgICAgICAgIGRlbGV0ZSBhZ2Vu
dDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB7CisgICAgICAgIC8vIFdlIGRvbid0IHJl
ZiBoZXJlIHRvIHByZXZlbnQgdXMgZnJvbSByZXN1cnJlY3RpbmcgdGhlIHJlZiBjb3VudCBvZiBh
ICJkZWFkIiBKU0dsb2JhbERhdGEuCisgICAgICAgIEFQSUVudHJ5U2hpbSBzaGltKGFnZW50LT5t
X2dsb2JhbERhdGEsIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrOjpEb250UmVmR2xvYmFsRGF0YSk7
CisgICAgICAgIGFnZW50LT5kb1dvcmsoKTsKKyAgICB9CisgICAgYWdlbnQtPm1fc2h1dGRvd25N
dXRleC51bmxvY2soKTsKIH0KIAogI2Vsc2UKQEAgLTU2LDYgKzg0LDExIEBAIEhlYXBUaW1lcjo6
fkhlYXBUaW1lcigpCiB7CiB9CiAKK3ZvaWQgSGVhcFRpbWVyOjpkaWRTdGFydFZNU2h1dGRvd24o
KQoreworICAgIGRlbGV0ZSB0aGlzOworfQorCiB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25pemUo
KQogewogfQpAQCAtNjQsNyArOTcsNiBAQCB2b2lkIEhlYXBUaW1lcjo6aW52YWxpZGF0ZSgpCiB7
CiB9CiAKLQogI2VuZGlmCiAgICAgCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBUaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBUaW1lci5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwVGltZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgSGVh
cFRpbWVyX2gKIAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CiAKICNpZiBVU0UoQ0YpCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZv
dW5kYXRpb24uaD4KQEAgLTIxLDcgKzIyLDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiAgICAg
dmlydHVhbCB+SGVhcFRpbWVyKCk7Ci0gICAgCisKKyAgICB2b2lkIGRpZFN0YXJ0Vk1TaHV0ZG93
bigpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBk
b1dvcmsoKSA9IDA7CiAgICAgCkBAIC0zNCw2ICszNiw4IEBAIHByb3RlY3RlZDoKICAgICBSZXRh
aW5QdHI8Q0ZSdW5Mb29wVGltZXJSZWY+IG1fdGltZXI7CiAgICAgUmV0YWluUHRyPENGUnVuTG9v
cFJlZj4gbV9ydW5Mb29wOwogICAgIENGUnVuTG9vcFRpbWVyQ29udGV4dCBtX2NvbnRleHQ7CisK
KyAgICBNdXRleCBtX3NodXRkb3duTXV0ZXg7CiAjZW5kaWYKICAgICAKIHByaXZhdGU6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5j
cHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDYgQEAgc3RhdGlj
IGNvbnN0IENGVGltZUludGVydmFsIHN3ZWVwVGltZU11bAogCiB2b2lkIEluY3JlbWVudGFsU3dl
ZXBlcjo6ZG9Xb3JrKCkKIHsKLSAgICBBUElFbnRyeVNoaW0gc2hpbShtX2dsb2JhbERhdGEpOwog
ICAgIGRvU3dlZXAoV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CiB9CiAgICAg
CkBAIC0zMCw5ICsyOSw5IEBAIEluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVy
KEgKIHsKIH0KIAotUGFzc093blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IEluY3JlbWVudGFsU3dl
ZXBlcjo6Y3JlYXRlKEhlYXAqIGhlYXApCitJbmNyZW1lbnRhbFN3ZWVwZXIqIEluY3JlbWVudGFs
U3dlZXBlcjo6Y3JlYXRlKEhlYXAqIGhlYXApCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJ
bmNyZW1lbnRhbFN3ZWVwZXIoaGVhcCwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKSk7CisgICAgcmV0
dXJuIG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIoaGVhcCwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKTsK
IH0KIAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnNjaGVkdWxlVGltZXIoKQpAQCAtODQsOSAr
ODMsOSBAQCB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6ZG9Xb3JrKCkKIHsKIH0KIAotUGFzc093
blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhlYXAq
IGhlYXApCitJbmNyZW1lbnRhbFN3ZWVwZXIqIEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhl
YXAqIGhlYXApCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIo
aGVhcC0+Z2xvYmFsRGF0YSgpKSk7CisgICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIo
aGVhcC0+Z2xvYmFsRGF0YSgpKTsKIH0KIAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0
U3dlZXBpbmcoY29uc3QgSGFzaFNldDxNYXJrZWRCbG9jayo+JikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQsNyArMTQsNyBAQCBjbGFzcyBIZWFwOwogICAgIAogY2xhc3Mg
SW5jcmVtZW50YWxTd2VlcGVyIDogcHVibGljIEhlYXBUaW1lciB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPiBjcmVhdGUoSGVhcCopOworICAgIHN0
YXRpYyBJbmNyZW1lbnRhbFN3ZWVwZXIqIGNyZWF0ZShIZWFwKik7CiAgICAgdm9pZCBzdGFydFN3
ZWVwaW5nKGNvbnN0IEhhc2hTZXQ8TWFya2VkQmxvY2sqPiYgYmxvY2tTbmFwc2hvdCk7CiAgICAg
dmlydHVhbCB2b2lkIGRvV29yaygpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMsNiArMyw3IEBACiAKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRl
ICJIZWFwLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTYsNiArNTcsNyBAQCBpbmxpbmUgdm9p
ZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0CiAgICAgCiB2b2lkKiBNYXJrZWRBbGxvY2F0
b3I6OmFsbG9jYXRlU2xvd0Nhc2UoKQogeworICAgIEFTU0VSVChtX2hlYXAtPmdsb2JhbERhdGEo
KS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogI2lmIENPTExFQ1Rf
T05fRVZFUllfQUxMT0NBVElPTgogICAgIG1faGVhcC0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAg
ICBBU1NFUlQobV9oZWFwLT5tX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAx
MjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjcsOCArMTI3LDEwIEBAIHZvaWQgV2Vha0Jsb2NrOjpyZWFwKCkKICAg
ICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpID4gV2Vha0ltcGw6OkRlYWQpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQod2Vha0ltcGwtPmpzVmFs
dWUoKS5hc0NlbGwoKSkpCisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh3ZWFrSW1wbC0+anNW
YWx1ZSgpLmFzQ2VsbCgpKSkgeworICAgICAgICAgICAgQVNTRVJUKHdlYWtJbXBsLT5zdGF0ZSgp
ID09IFdlYWtJbXBsOjpMaXZlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAK
ICAgICAgICAgd2Vha0ltcGwtPnNldFN0YXRlKFdlYWtJbXBsOjpEZWFkKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGJv
b2wgY2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IEpTVmFsdWUqIHJldHVybmVkRXhjZXB0aW9uKQogewotICAgIEpTTG9jayBsb2NrKGV4ZWMpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRh
KCkuaWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRh
YmxlKCkpOwogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0
YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CkBAIC01Myw3ICs1Myw3IEBAIGJvb2wgY2hlY2tT
eW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCAKIAogSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlKiByZXR1cm5lZEV4Y2VwdGlvbikKIHsK
LSAgICBKU0xvY2sgbG9jayhleGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWRE
YXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0
YSgpLmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICBDUkFTSCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgJKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlD
YWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHByb3RlY3RlZDoKIAog
Y2xhc3MgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayA6IHB1YmxpYyBHQ0FjdGl2aXR5Q2FsbGJh
Y2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPERlZmF1bHRHQ0FjdGl2aXR5Q2Fs
bGJhY2s+IGNyZWF0ZShIZWFwKik7CisgICAgc3RhdGljIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJh
Y2sqIGNyZWF0ZShIZWFwKik7CiAKICAgICBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKEhlYXAq
KTsKIApAQCAtOTEsOSArOTEsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1pbmxpbmUgUGFz
c093blB0cjxEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrPiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxi
YWNrOjpjcmVhdGUoSGVhcCogaGVhcCkKK2lubGluZSBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNr
KiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcCkpOworICAg
IHJldHVybiBuZXcgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayhoZWFwKTsKIH0KIAogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxMCBAQAogI2luY2x1ZGUgIkNv
bW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgiCiAjaW5j
bHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFj
ay5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJu
VmFsdWUuaCIKKyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTQVBJVmFs
dWVXcmFwcGVyLmgiCkBAIC0xNzgsMTIgKzE4MCw5IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxE
YXRhKEdsb2JhbERhdGFUeXAKIHsKICAgICBpbnRlcnByZXRlciA9IG5ldyBJbnRlcnByZXRlcjsK
IAotICAgIGlmIChpc1NoYXJlZEluc3RhbmNlKCkpCi0gICAgICAgIHR1cm5PZmZWZXJpZmllcigp
OwotCiAgICAgLy8gTmVlZCB0byBiZSBjYXJlZnVsIHRvIGtlZXAgZXZlcnl0aGluZyBjb25zaXN0
ZW50IGhlcmUKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh0aGlzKTsKICAgICBJZGVudGlmaWVyVGFi
bGUqIGV4aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWREYXRhKCkuc2V0Q3Vy
cmVudElkZW50aWZpZXJUYWJsZShpZGVudGlmaWVyVGFibGUpOwotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgc3RydWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywg
U3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMpKTsKICAgICBkZWJ1Z2dlckFjdGl2YXRp
b25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBhY3RpdmF0aW9uU3RydWN0dXJlLnNldCgqdGhp
cywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkBA
IC0yMjIsNiArMjIxLDkgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5
cAogCiBKU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQogeworICAgIEFTU0VSVCghbV9hcGlM
b2NrLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOworICAgIGhlYXAuYWN0aXZpdHlDYWxs
YmFjaygpLT5kaWRTdGFydFZNU2h1dGRvd24oKTsKKyAgICBoZWFwLnN3ZWVwZXIoKS0+ZGlkU3Rh
cnRWTVNodXRkb3duKCk7CiAgICAgaGVhcC5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogCiAgICAg
ZGVsZXRlIGludGVycHJldGVyOwpAQCAtMzExLDYgKzMxMyw3IEBAIGJvb2wgSlNHbG9iYWxEYXRh
OjpzaGFyZWRJbnN0YW5jZUV4aXN0cygKIAogSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNo
YXJlZEluc3RhbmNlKCkKIHsKKyAgICBHbG9iYWxKU0xvY2sgZ2xvYmFsTG9jazsKICAgICBKU0ds
b2JhbERhdGEqJiBpbnN0YW5jZSA9IHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKICAgICBpZiAo
IWluc3RhbmNlKSB7CiAgICAgICAgIGluc3RhbmNlID0gYWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0
YShBUElTaGFyZWQsIFRocmVhZFN0YWNrVHlwZVNtYWxsLCBTbWFsbEhlYXApKS5sZWFrUmVmKCk7
CkBAIC0zMjEsNyArMzI0LDYgQEAgSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNoYXJlZElu
c3RhbgogCiBKU0dsb2JhbERhdGEqJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlSW50ZXJu
YWwoKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkp
OwogICAgIHN0YXRpYyBKU0dsb2JhbERhdGEqIHNoYXJlZEluc3RhbmNlOwogICAgIHJldHVybiBz
aGFyZWRJbnN0YW5jZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBA
QAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbnRyaW5zaWMuaCIKICNpbmNsdWRlICJK
SVRTdHVicy5oIgorI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKICNp
bmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJOdW1lcmljU3RyaW5ncy5oIgpAQCAtNDYs
OCArNDcsOCBAQAogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZp
Yy5oPgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaWYgRU5BQkxFKFJFR0VYUF9U
UkFDSU5HKQpAQCAtMTUyLDcgKzE1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAjZW5k
aWYKIAotICAgIGNsYXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEpTR2xvYmFs
RGF0YT4geworICAgIGNsYXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxKU0dsb2JhbERhdGE+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIC8vIFdlYkNvcmUgaGFz
IGEgb25lLXRvLW9uZSBtYXBwaW5nIG9mIHRocmVhZHMgdG8gSlNHbG9iYWxEYXRhczsKICAgICAg
ICAgLy8gZWl0aGVyIGNyZWF0ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBvbmNlCkBAIC0xODAsNiArMTgxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHZvaWQgbWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGluZVRocmVh
ZHMoKS5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOyB9CiAKKyAgICBwcml2YXRlOgor
ICAgICAgICBKU0xvY2sgbV9hcGlMb2NrOworCisgICAgcHVibGljOgogICAgICAgICBIZWFwIGhl
YXA7IC8vIFRoZSBoZWFwIGlzIG91ciBmaXJzdCBkYXRhIG1lbWJlciB0byBlbnN1cmUgdGhhdCBp
dCdzIGRlc3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJlbmNlIGl0Lgog
CiAgICAgICAgIEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlOwpAQCAtNDA5LDYgKzQxNCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihm
bG9hdDY0LCBGbG9hdDY0KTsKICN1bmRlZiByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbgogCisg
ICAgICAgIEpTTG9jayYgYXBpTG9jaygpIHsgcmV0dXJuIG1fYXBpTG9jazsgfQorCiAgICAgcHJp
dmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw4ICsxMTQsNiBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIGlubGluZSB2b2lkCiAKIEpTR2xvYmFsT2Jq
ZWN0Ojp+SlNHbG9iYWxPYmplY3QoKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdMb2NrKCkpOwotCiAgICAgaWYgKG1fZGVidWdnZXIpCiAgICAgICAgIG1fZGVi
dWdnZXItPmRldGFjaCh0aGlzKTsKIApAQCAtMTMwLDcgKzEyOCw3IEBAIHZvaWQgSlNHbG9iYWxP
YmplY3Q6OmRlc3Ryb3koSlNDZWxsKiBjZWwKIAogdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChK
U09iamVjdCogdGhpc1ZhbHVlKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCkpOworICAgIEFTU0VSVChnbG9iYWxEYXRhKCkuYXBpTG9jaygpLmN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIAogICAgIG1fZ2xvYmFsU2NvcGVDaGFpbi5z
ZXQoZ2xvYmFsRGF0YSgpLCB0aGlzLCBTY29wZUNoYWluTm9kZTo6Y3JlYXRlKDAsIHRoaXMsICZn
bG9iYWxEYXRhKCksIHRoaXMsIHRoaXNWYWx1ZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIz
LDcgQEAKIAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNs
dWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAi
U2NvcGVDaGFpbi5oIgogCkBAIC0zOCw5NCArMzksOTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYg
KE9TKERBUldJTikgfHwgVVNFKFBUSFJFQURTKSkKIAogLy8gQWNxdWlyZSB0aGlzIG11dGV4IGJl
Zm9yZSBhY2Nlc3NpbmcgbG9jay1yZWxhdGVkIGRhdGEuCi1zdGF0aWMgcHRocmVhZF9tdXRleF90
IEpTTXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHB0aHJlYWRfbXV0
ZXhfdCBnaWFudEdsb2JhbEpTTG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CiAKLS8v
IFRocmVhZC1zcGVjaWZpYyBrZXkgdGhhdCB0ZWxscyB3aGV0aGVyIGEgdGhyZWFkIGhvbGRzIHRo
ZSBKU011dGV4LCBhbmQgaG93IG1hbnkgdGltZXMgaXQgd2FzIHRha2VuIHJlY3Vyc2l2ZWx5Lgot
cHRocmVhZF9rZXlfdCBKU0xvY2tDb3VudDsKK0dsb2JhbEpTTG9jazo6R2xvYmFsSlNMb2NrKCkK
K3sKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJmdpYW50R2xvYmFsSlNMb2NrKTsKK30KIAotc3Rh
dGljIHZvaWQgY3JlYXRlSlNMb2NrQ291bnQoKQorR2xvYmFsSlNMb2NrOjp+R2xvYmFsSlNMb2Nr
KCkKIHsKLSAgICBwdGhyZWFkX2tleV9jcmVhdGUoJkpTTG9ja0NvdW50LCAwKTsKKyAgICBwdGhy
ZWFkX211dGV4X3VubG9jaygmZ2lhbnRHbG9iYWxKU0xvY2spOwogfQogCi1wdGhyZWFkX29uY2Vf
dCBjcmVhdGVKU0xvY2tDb3VudE9uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKK0pTTG9ja0hvbGRl
cjo6SlNMb2NrSG9sZGVyKEV4ZWNTdGF0ZSogZXhlYykKKyAgICA6IG1fZ2xvYmFsRGF0YSgmZXhl
Yy0+Z2xvYmFsRGF0YSgpKQoreworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsK
K30KIAotLy8gTG9jayBuZXN0aW5nIGNvdW50LgotaW50cHRyX3QgSlNMb2NrOjpsb2NrQ291bnQo
KQorSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQor
ICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiB7Ci0gICAgcHRocmVhZF9vbmNlKCZjcmVh
dGVKU0xvY2tDb3VudE9uY2UsIGNyZWF0ZUpTTG9ja0NvdW50KTsKKyAgICBtX2dsb2JhbERhdGEt
PmFwaUxvY2soKS5sb2NrKCk7Cit9CiAKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4ocHRocmVhZF9nZXRzcGVjaWZpYyhKU0xvY2tDb3VudCkpOworSlNMb2NrSG9sZGVyOjpK
U0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIDogbV9nbG9iYWxEYXRh
KCZnbG9iYWxEYXRhKQoreworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKIH0K
IAotc3RhdGljIHZvaWQgc2V0TG9ja0NvdW50KGludHB0cl90IGNvdW50KQorSlNMb2NrSG9sZGVy
Ojp+SlNMb2NrSG9sZGVyKCkKIHsKLSAgICBBU1NFUlQoY291bnQgPj0gMCk7Ci0gICAgcHRocmVh
ZF9zZXRzcGVjaWZpYyhKU0xvY2tDb3VudCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY291bnQp
KTsKKyAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS51bmxvY2soKTsKIH0KIAotSlNMb2NrOjpK
U0xvY2soRXhlY1N0YXRlKiBleGVjKQotICAgIDogbV9sb2NrQmVoYXZpb3IoZXhlYy0+Z2xvYmFs
RGF0YSgpLmlzU2hhcmVkSW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlv
bnNPbmx5KQorSlNMb2NrOjpKU0xvY2soKQorICAgIDogbV9sb2NrQ291bnQoMCkKIHsKLSAgICBs
b2NrKG1fbG9ja0JlaGF2aW9yKTsKKyAgICBtX3NwaW5Mb2NrLkluaXQoKTsKIH0KIAotSlNMb2Nr
OjpKU0xvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgIDogbV9sb2NrQmVoYXZpb3Io
Z2xvYmFsRGF0YS0+aXNTaGFyZWRJbnN0YW5jZSgpID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpCitKU0xvY2s6On5KU0xvY2soKQogewotICAgIGxvY2sobV9sb2NrQmVoYXZp
b3IpOwogfQogCi12b2lkIEpTTG9jazo6bG9jayhKU0xvY2tCZWhhdmlvciBsb2NrQmVoYXZpb3Ip
Cit2b2lkIEpTTG9jazo6bG9jaygpCiB7Ci0jaWZkZWYgTkRFQlVHCi0gICAgLy8gTG9ja2luZyAi
bm90IGZvciByZWFsIiBpcyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICBpZiAobG9ja0JlaGF2
aW9yID09IFNpbGVuY2VBc3NlcnRpb25zT25seSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCisg
ICAgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkID0gV1RGOjpjdXJyZW50VGhyZWFkKCk7
CisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJm1fc3BpbkxvY2spOworICAg
ICAgICBpZiAobV9vd25lclRocmVhZCA9PSBjdXJyZW50VGhyZWFkICYmIG1fbG9ja0NvdW50KSB7
CisgICAgICAgICAgICBtX2xvY2tDb3VudCsrOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQogCi0gICAgcHRocmVhZF9vbmNlKCZjcmVhdGVKU0xvY2tDb3VudE9uY2UsIGNy
ZWF0ZUpTTG9ja0NvdW50KTsKKyAgICBtX2xvY2subG9jaygpOwogCi0gICAgaW50cHRyX3QgY3Vy
cmVudExvY2tDb3VudCA9IGxvY2tDb3VudCgpOwotICAgIGlmICghY3VycmVudExvY2tDb3VudCAm
JiBsb2NrQmVoYXZpb3IgPT0gTG9ja0ZvclJlYWwpIHsKLSAgICAgICAgaW50IHJlc3VsdCA9IHB0
aHJlYWRfbXV0ZXhfbG9jaygmSlNNdXRleCk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0
LCAhcmVzdWx0KTsKKyAgICB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmbV9zcGlu
TG9jayk7CisgICAgICAgIG1fb3duZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkOworICAgICAgICBB
U1NFUlQoIW1fbG9ja0NvdW50KTsKKyAgICAgICAgbV9sb2NrQ291bnQgPSAxOwogICAgIH0KLSAg
ICBzZXRMb2NrQ291bnQoY3VycmVudExvY2tDb3VudCArIDEpOwogfQogCi12b2lkIEpTTG9jazo6
dW5sb2NrKEpTTG9ja0JlaGF2aW9yIGxvY2tCZWhhdmlvcikKK3ZvaWQgSlNMb2NrOjp1bmxvY2so
KQogewotICAgIEFTU0VSVChsb2NrQ291bnQoKSk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCkpOwogCi0jaWZkZWYgTkRFQlVHCi0gICAgLy8gTG9ja2luZyAibm90IGZv
ciByZWFsIiBpcyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICBpZiAobG9ja0JlaGF2aW9yID09
IFNpbGVuY2VBc3NlcnRpb25zT25seSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCisgICAgU3Bp
bkxvY2tIb2xkZXIgaG9sZGVyKCZtX3NwaW5Mb2NrKTsKKyAgICBtX2xvY2tDb3VudC0tOwogCi0g
ICAgaW50cHRyX3QgbmV3TG9ja0NvdW50ID0gbG9ja0NvdW50KCkgLSAxOwotICAgIHNldExvY2tD
b3VudChuZXdMb2NrQ291bnQpOwotICAgIGlmICghbmV3TG9ja0NvdW50ICYmIGxvY2tCZWhhdmlv
ciA9PSBMb2NrRm9yUmVhbCkgewotICAgICAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9tdXRleF91
bmxvY2soJkpTTXV0ZXgpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJlc3VsdCk7
Ci0gICAgfQorICAgIGlmICghbV9sb2NrQ291bnQpCisgICAgICAgIG1fbG9jay51bmxvY2soKTsK
IH0KIAogdm9pZCBKU0xvY2s6OmxvY2soRXhlY1N0YXRlKiBleGVjKQogewotICAgIGxvY2soZXhl
Yy0+Z2xvYmFsRGF0YSgpLmlzU2hhcmVkSW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBleGVjLT5nbG9iYWxEYXRhKCkuYXBpTG9jaygpLmxvY2so
KTsKIH0KIAogdm9pZCBKU0xvY2s6OnVubG9jayhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgdW5s
b2NrKGV4ZWMtPmdsb2JhbERhdGEoKS5pc1NoYXJlZEluc3RhbmNlKCkgPyBMb2NrRm9yUmVhbCA6
IFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmFwaUxvY2so
KS51bmxvY2soKTsKIH0KIAogYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2Nr
KCkKIHsKLSAgICBwdGhyZWFkX29uY2UoJmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNM
b2NrQ291bnQpOwotICAgIHJldHVybiAhIXB0aHJlYWRfZ2V0c3BlY2lmaWMoSlNMb2NrQ291bnQp
OworICAgIHJldHVybiBtX2xvY2tDb3VudCAmJiBtX293bmVyVGhyZWFkID09IFdURjo6Y3VycmVu
dFRocmVhZCgpOwogfQogCiAvLyBUaGlzIGlzIGZhaXJseSBuYXN0eS4gIFdlIGFsbG93IG11bHRp
cGxlIHRocmVhZHMgdG8gcnVuIG9uIHRoZSBzYW1lCkBAIC0xNDksNyArMTUyLDcgQEAgYm9vbCBK
U0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKAogLy8gdGhpcyB0byBoYXBwZW4sIGFu
ZCB3ZXJlIGl0cyBzdGFjayB0byBncm93IGZ1cnRoZXIsIHRoZW4gaXQgbWF5IHBvdGVudGlhbGx5
CiAvLyB3cml0ZSBvdmVyIHRoZSBzZWNvbmQgdGhyZWFkJ3MgY2FsbCBmcmFtZXMuCiAvLwotLy8g
SW4gYXZvaWQgSlMgc3RhY2sgY29ycnVwdGlvbiB3ZSBlbmZvcmNlIGEgcG9saWN5IG9mIG9ubHkg
ZXZlciBhbGxvd2luZyB0d28KKy8vIFRvIGF2b2lkIEpTIHN0YWNrIGNvcnJ1cHRpb24gd2UgZW5m
b3JjZSBhIHBvbGljeSBvZiBvbmx5IGV2ZXIgYWxsb3dpbmcgdHdvCiAvLyB0aHJlYWRzIHRvIHVz
ZSBhIEpTIGNvbnRleHQgY29uY3VycmVudGx5LCBhbmQgb25seSBhbGxvd2luZyB0aGUgc2Vjb25k
IG9mCiAvLyB0aGVzZSB0aHJlYWRzIHRvIGV4ZWN1dGUgdW50aWwgaXQgaGFzIGNvbXBsZXRlZCBh
bmQgZnVsbHkgcmV0dXJuZWQgZnJvbSBpdHMKIC8vIG91dGVybW9zdCBjYWxsIGludG8gSlNDLiAg
V2UgZW5mb3JjZSB0aGlzIHBvbGljeSB1c2luZyAnbG9ja0Ryb3BEZXB0aCcuICBUaGUKQEAgLTE1
OCw3ICsxNjEsNyBAQCBib29sIEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soCiAv
LyBzYW1lIHRocmVhZCBhZ2FpbiwgZW50ZXIgSlNDICh0aHJvdWdoIGV2YWx1YXRlIHNjcmlwdCBv
ciBjYWxsIGZ1bmN0aW9uKSwgYW5kIGV4aXQKIC8vIGFnYWluIHRocm91Z2ggYSBjYWxsYmFjaywg
dGhlbiB0aGUgbG9ja3Mgd2lsbCBub3QgYmUgZHJvcHBlZCB3aGVuIERyb3BBbGxMb2NrcwogLy8g
aXMgY2FsbGVkIChzaW5jZSBsb2NrRHJvcERlcHRoIGlzIG5vbi16ZXJvKS4gIFNpbmNlIHRoaXMg
dGhyZWFkIGlzIHN0aWxsIGhvbGRpbmcKLS8vIHRoZSBsb2Nrcywgb25seSBpdCB3aWxsIHJlIGFi
bGUgdG8gcmUtZW50ZXIgSlNDIChlaXRoZXIgYmUgcmV0dXJuaW5nIGZyb20gdGhlCisvLyB0aGUg
bG9ja3MsIG9ubHkgaXQgd2lsbCBiZSBhYmxlIHRvIHJlLWVudGVyIEpTQyAoZWl0aGVyIGJlIHJl
dHVybmluZyBmcm9tIHRoZQogLy8gY2FsbGJhY2ssIG9yIGJ5IHJlLWVudGVyaW5nIHRocm91Z2gg
YW5vdGhlciBjYWxsIHRvIGV2YXVsYXRlIHNjcmlwdCBvciBjYWxsCiAvLyBmdW5jdGlvbikuCiAv
LwpAQCAtMTY4LDc0ICsxNzEsNjkgQEAgYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdMb2NrKAogLy8gb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIG1hZGUgLSB0aG91Z2ggaW1wbGVt
ZW50aW5nIHRoZSBsZXNzIHJlc3RyaWN0aXZlIHBvbGljeQogLy8gd291bGQgbGlrZWx5IGluY3Jl
YXNlIGNvbXBsZXhpdHkgYW5kIG92ZXJoZWFkLgogLy8KLXN0YXRpYyB1bnNpZ25lZCBsb2NrRHJv
cERlcHRoID0gMDsKIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhFeGVjU3Rh
dGUqIGV4ZWMpCi0gICAgOiBtX2xvY2tCZWhhdmlvcihleGVjLT5nbG9iYWxEYXRhKCkuaXNTaGFy
ZWRJbnN0YW5jZSgpID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpCisvLyBU
aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBsb2NrcyB0aGF0IHdlcmUgZHJvcHBl
ZC4KK3Vuc2lnbmVkIEpTTG9jazo6ZHJvcEFsbExvY2tzKCkKIHsKLSAgICBwdGhyZWFkX29uY2Uo
JmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNMb2NrQ291bnQpOwotCi0gICAgaWYgKGxv
Y2tEcm9wRGVwdGgrKykgewotICAgICAgICBtX2xvY2tDb3VudCA9IDA7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKG1fbG9ja0Ryb3BEZXB0aCsrKQorICAgICAgICByZXR1cm4gMDsK
IAotICAgIG1fbG9ja0NvdW50ID0gSlNMb2NrOjpsb2NrQ291bnQoKTsKLSAgICBmb3IgKGludHB0
cl90IGkgPSAwOyBpIDwgbV9sb2NrQ291bnQ7IGkrKykKLSAgICAgICAgSlNMb2NrOjp1bmxvY2so
bV9sb2NrQmVoYXZpb3IpOworICAgIHJldHVybiBkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHko
KTsKIH0KIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhKU0xvY2tCZWhhdmlv
ciBKU0xvY2tCZWhhdmlvcikKLSAgICA6IG1fbG9ja0JlaGF2aW9yKEpTTG9ja0JlaGF2aW9yKQor
dW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoKQogewotICAgIHB0
aHJlYWRfb25jZSgmY3JlYXRlSlNMb2NrQ291bnRPbmNlLCBjcmVhdGVKU0xvY2tDb3VudCk7Cisg
ICAgdW5zaWduZWQgbG9ja0NvdW50ID0gbV9sb2NrQ291bnQ7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxvY2tDb3VudDsgaSsrKQorICAgICAgICB1bmxvY2soKTsKIAotICAgIGlmIChs
b2NrRHJvcERlcHRoKyspIHsKLSAgICAgICAgbV9sb2NrQ291bnQgPSAwOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIHJldHVybiBsb2NrQ291bnQ7Cit9CiAKLSAgICAvLyBJdCBpcyBuZWNl
c3NhcnkgdG8gZHJvcCBldmVuICJ1bnJlYWwiIGxvY2tzLCBiZWNhdXNlIGhhdmluZyBhIG5vbi16
ZXJvIGxvY2sgY291bnQKLSAgICAvLyB3aWxsIHByZXZlbnQgYSByZWFsIGxvY2sgZnJvbSBiZWlu
ZyB0YWtlbi4KK3ZvaWQgSlNMb2NrOjpncmFiQWxsTG9ja3ModW5zaWduZWQgbG9ja0NvdW50KQor
eworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsb2NrQ291bnQ7IGkrKykKKyAgICAgICAg
bG9jaygpOwogCi0gICAgbV9sb2NrQ291bnQgPSBKU0xvY2s6OmxvY2tDb3VudCgpOwotICAgIGZv
ciAoaW50cHRyX3QgaSA9IDA7IGkgPCBtX2xvY2tDb3VudDsgaSsrKQotICAgICAgICBKU0xvY2s6
OnVubG9jayhtX2xvY2tCZWhhdmlvcik7CisgICAgbV9sb2NrRHJvcERlcHRoLS07CiB9CiAKLUpT
TG9jazo6RHJvcEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKCkKK0pTTG9jazo6RHJvcEFsbExvY2tz
OjpEcm9wQWxsTG9ja3MoRXhlY1N0YXRlKiBleGVjKQorICAgIDogbV9sb2NrQ291bnQoMCkKKyAg
ICAsIG1fZ2xvYmFsRGF0YSgmZXhlYy0+Z2xvYmFsRGF0YSgpKQogewotICAgIGZvciAoaW50cHRy
X3QgaSA9IDA7IGkgPCBtX2xvY2tDb3VudDsgaSsrKQotICAgICAgICBKU0xvY2s6OmxvY2sobV9s
b2NrQmVoYXZpb3IpOwotCi0gICAgLS1sb2NrRHJvcERlcHRoOworICAgIG1fbG9ja0NvdW50ID0g
bV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZHJvcEFsbExvY2tzKCk7CiB9CiAKLSNlbHNlIC8vIChP
UyhEQVJXSU4pIHx8IFVTRShQVEhSRUFEUykpCitKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFs
bExvY2tzKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKKyAgICA6IG1fbG9ja0NvdW50KDApCisg
ICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKK3sKKyAgICBtX2xvY2tDb3VudCA9IG1fZ2xv
YmFsRGF0YS0+YXBpTG9jaygpLmRyb3BBbGxMb2NrcygpOworfQogCi1KU0xvY2s6OkpTTG9jayhF
eGVjU3RhdGUqKQotICAgIDogbV9sb2NrQmVoYXZpb3IoU2lsZW5jZUFzc2VydGlvbnNPbmx5KQor
SlNMb2NrOjpEcm9wQWxsTG9ja3M6On5Ecm9wQWxsTG9ja3MoKQogeworICAgIG1fZ2xvYmFsRGF0
YS0+YXBpTG9jaygpLmdyYWJBbGxMb2NrcyhtX2xvY2tDb3VudCk7CiB9CiAKLS8vIElmIHRocmVh
ZGluZyBzdXBwb3J0IGlzIG9mZiwgc2V0IHRoZSBsb2NrIGNvdW50IHRvIGEgY29uc3RhbnQgdmFs
dWUgb2YgMSBzbyBzc2VydGlvbnMKLS8vIHRoYXQgdGhlIGxvY2sgaXMgaGVsZCBkb24ndCBmYWls
Ci1pbnRwdHJfdCBKU0xvY2s6OmxvY2tDb3VudCgpCisjZWxzZSAvLyAoT1MoREFSV0lOKSB8fCBV
U0UoUFRIUkVBRFMpKQorCitHbG9iYWxKU0xvY2s6Okdsb2JhbEpTTG9jaygpCiB7Ci0gICAgcmV0
dXJuIDE7CiB9CiAKLWJvb2wgSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpCitH
bG9iYWxKU0xvY2s6On5HbG9iYWxKU0xvY2soKQogewotICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIEpTTG9jazo6bG9jayhKU0xvY2tCZWhhdmlvcikKK0pTTG9jazo6SlNMb2NrKEV4ZWNTdGF0
ZSopCiB7CiB9CiAKLXZvaWQgSlNMb2NrOjp1bmxvY2soSlNMb2NrQmVoYXZpb3IpCitib29sIEpT
TG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKQogeworICAgIHJldHVybiB0cnVlOwog
fQogCiB2b2lkIEpTTG9jazo6bG9jayhFeGVjU3RhdGUqKQpAQCAtMjUwLDEwICsyNDgsNiBAQCBK
U0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKEV4ZWNTCiB7CiB9CiAKLUpTTG9jazo6
RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoSlNMb2NrQmVoYXZpb3IpCi17Ci19Ci0KIEpTTG9j
azo6RHJvcEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMs
OSBAQAogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RDU3Bpbkxv
Y2suaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC0zMCw4ICszMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8vIGltcG9ydGFudCB0byBsb2Nr
IGJlZm9yZSBkb2luZyBhbnl0aGluZyB0aGF0IGFsbG9jYXRlcyBhCiAgICAgLy8gSmF2YVNjcmlw
dCBkYXRhIHN0cnVjdHVyZSBvciB0aGF0IGludGVyYWN0cyB3aXRoIHNoYXJlZCBzdGF0ZQogICAg
IC8vIHN1Y2ggYXMgdGhlIHByb3RlY3QgY291bnQgaGFzaCB0YWJsZS4gVGhlIHNpbXBsZXN0IHdh
eSB0byBsb2NrCi0gICAgLy8gaXMgdG8gY3JlYXRlIGEgbG9jYWwgSlNMb2NrIG9iamVjdCBpbiB0
aGUgc2NvcGUgd2hlcmUgdGhlIGxvY2sgCi0gICAgLy8gbXVzdCBiZSBoZWxkLiBUaGUgbG9jayBp
cyByZWN1cnNpdmUgc28gbmVzdGluZyBpcyBvay4gVGhlIEpTTG9jayAKKyAgICAvLyBpcyB0byBj
cmVhdGUgYSBsb2NhbCBKU0xvY2tIb2xkZXIgb2JqZWN0IGluIHRoZSBzY29wZSB3aGVyZSB0aGUg
bG9jayAKKyAgICAvLyBtdXN0IGJlIGhlbGQgYW5kIHBhc3MgaXQgdGhlIGNvbnRleHQgdGhhdCBy
ZXF1aXJlcyBwcm90ZWN0aW9uLiAKKyAgICAvLyBUaGUgbG9jayBpcyByZWN1cnNpdmUgc28gbmVz
dGluZyBpcyBvay4gVGhlIEpTTG9jayAKICAgICAvLyBvYmplY3QgYWxzbyBhY3RzIGFzIGEgY29u
dmVuaWVuY2Ugc2hvcnQtaGFuZCBmb3IgcnVubmluZyBpbXBvcnRhbnQKICAgICAvLyBpbml0aWFs
aXphdGlvbiByb3V0aW5lcy4KIApAQCAtNDQsNjIgKzQ4LDY1IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIC8vIERyb3BBbGxMb2NrcyBvYmplY3QgdGFrZXMgY2FyZSB0byByZWxlYXNlIHRoZSBKU0xv
Y2sgb25seSBpZiB5b3VyCiAgICAgLy8gdGhyZWFkIGFjcXVpcmVkIGl0IHRvIGJlZ2luIHdpdGgu
CiAKLSAgICAvLyBGb3IgY29udGV4dHMgb3RoZXIgdGhhbiB0aGUgc2luZ2xlIHNoYXJlZCBvbmUs
IGltcGxpY2l0IGxvY2tpbmcgaXMgbm90IGRvbmUsCi0gICAgLy8gYnV0IHdlIHN0aWxsIG5lZWQg
dG8gcGVyZm9ybSBhbGwgdGhlIGNvdW50aW5nIGluIG9yZGVyIHRvIGtlZXAgZGVidWcKLSAgICAv
LyBhc3NlcnRpb25zIHdvcmtpbmcsIHNvIHRoYXQgY2xpZW50cyB0aGF0IHVzZSB0aGUgc2hhcmVk
IGNvbnRleHQgZG9uJ3QgYnJlYWsuCi0KICAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3Mg
SlNHbG9iYWxEYXRhOwogCi0gICAgZW51bSBKU0xvY2tCZWhhdmlvciB7IFNpbGVuY2VBc3NlcnRp
b25zT25seSwgTG9ja0ZvclJlYWwgfTsKKyAgICAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gcHJv
dGVjdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGxlZ2FjeSBzaW5nbGUgCisgICAgLy8gc2hh
cmVkIEpTR2xvYmFsRGF0YS4KKyAgICBjbGFzcyBHbG9iYWxKU0xvY2sgeworICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShHbG9iYWxKU0xvY2spOworICAgIHB1YmxpYzoKKyAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgR2xvYmFsSlNMb2NrKCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IH5HbG9iYWxKU0xvY2soKTsKKyAgICB9OworCisgICAgY2xhc3MgSlNMb2NrSG9sZGVyIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTTG9ja0hvbGRlcihKU0dsb2Jh
bERhdGEqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNMb2NrSG9sZGVyKEpTR2xvYmFs
RGF0YSYpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0xvY2tIb2xkZXIoRXhlY1N0YXRl
Kik7CisKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9ja0hvbGRlcigpOworICAgIHBy
aXZhdGU6CisgICAgICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IG1fZ2xvYmFsRGF0YTsKKyAgICB9
OwogCiAgICAgY2xhc3MgSlNMb2NrIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSlNM
b2NrKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTTG9jayhFeGVj
U3RhdGUqKTsKLSAgICAgICAgSlNMb2NrKEpTR2xvYmFsRGF0YSopOworICAgICAgICBKU0xvY2so
KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9jaygpOworCisgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgbG9jaygpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHVubG9jaygpOwogCi0gICAgICAgIEpTTG9jayhKU0xvY2tCZWhhdmlvciBsb2NrQmVoYXZpb3Ip
Ci0gICAgICAgICAgICA6IG1fbG9ja0JlaGF2aW9yKGxvY2tCZWhhdmlvcikKLSAgICAgICAgewot
I2lmZGVmIE5ERUJVRwotICAgICAgICAgICAgLy8gTG9ja2luZyAibm90IGZvciByZWFsIiBpcyBh
IGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICAgICAgICAgIGlmIChsb2NrQmVoYXZpb3IgPT0gU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSNlbmRpZgotICAg
ICAgICAgICAgbG9jayhsb2NrQmVoYXZpb3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgfkpTTG9j
aygpCi0gICAgICAgIHsgCi0jaWZkZWYgTkRFQlVHCi0gICAgICAgICAgICAvLyBMb2NraW5nICJu
b3QgZm9yIHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0dXJlLgotICAgICAgICAgICAgaWYgKG1f
bG9ja0JlaGF2aW9yID09IFNpbGVuY2VBc3NlcnRpb25zT25seSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0jZW5kaWYKLSAgICAgICAgICAgIHVubG9jayhtX2xvY2tCZWhhdmlvcik7IAotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBs
b2NrKEpTTG9ja0JlaGF2aW9yKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgdW5sb2NrKEpTTG9ja0JlaGF2aW9yKTsKICAgICAgICAgc3RhdGljIHZvaWQgbG9jayhFeGVj
U3RhdGUqKTsKICAgICAgICAgc3RhdGljIHZvaWQgdW5sb2NrKEV4ZWNTdGF0ZSopOworICAgICAg
ICBzdGF0aWMgdm9pZCBsb2NrKEpTR2xvYmFsRGF0YSYpOworICAgICAgICBzdGF0aWMgdm9pZCB1
bmxvY2soSlNHbG9iYWxEYXRhJik7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IGludHB0cl90IGxvY2tDb3VudCgpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpOworICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7CiAKLSAgICAgICAgSlNMb2Nr
QmVoYXZpb3IgbV9sb2NrQmVoYXZpb3I7CisgICAgICAgIHVuc2lnbmVkIGRyb3BBbGxMb2Nrcygp
OworICAgICAgICB1bnNpZ25lZCBkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoKTsKKyAgICAg
ICAgdm9pZCBncmFiQWxsTG9ja3ModW5zaWduZWQgbG9ja0NvdW50KTsKKworICAgICAgICBTcGlu
TG9jayBtX3NwaW5Mb2NrOworICAgICAgICBNdXRleCBtX2xvY2s7CisgICAgICAgIFRocmVhZElk
ZW50aWZpZXIgbV9vd25lclRocmVhZDsKKyAgICAgICAgaW50cHRyX3QgbV9sb2NrQ291bnQ7Cisg
ICAgICAgIHVuc2lnbmVkIG1fbG9ja0Ryb3BEZXB0aDsKIAogICAgICAgICBjbGFzcyBEcm9wQWxs
TG9ja3MgewogICAgICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRHJvcEFsbExvY2tzKTsK
ICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRHJvcEFsbExv
Y2tzKEV4ZWNTdGF0ZSogZXhlYyk7Ci0gICAgICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBEcm9w
QWxsTG9ja3MoSlNMb2NrQmVoYXZpb3IpOworICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
RHJvcEFsbExvY2tzKEpTR2xvYmFsRGF0YSopOwogICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgfkRyb3BBbGxMb2NrcygpOwogICAgICAgICAgICAgCiAgICAgICAgIHByaXZhdGU6CiAgICAg
ICAgICAgICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKLSAgICAgICAgICAgIEpTTG9ja0JlaGF2aW9y
IG1fbG9ja0JlaGF2aW9yOworICAgICAgICAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gbV9nbG9i
YWxEYXRhOwogICAgICAgICB9OwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtHQ01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtHQ01hcC5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUs
OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0
RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJmltcGwtPmpzVmFsdWUoKSkpOwogICAgIH0K
IAotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIGNvbnN0IEtleVR5cGUmIGtleSwgRXh0ZXJu
YWxUeXBlIHZhbHVlKQorICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29u
c3QgS2V5VHlwZSYga2V5LCBFeHRlcm5hbFR5cGUgdmFsdWUpCiAgICAgeworICAgICAgICBBU1NF
UlRfVU5VU0VEKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCkpOwogICAgICAgICB0eXBlbmFtZSBNYXBUeXBlOjpBZGRSZXN1bHQgcmVz
dWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkp
CiAgICAgICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NyBAQAorMjAxMi0wNi0yMCAgTWFy
ayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBz
aG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEN1cnJlbnQgcmVncmVzc2lvbiB0ZXN0cyBh
cmUgc3VmZmljaWVudC4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNM
b2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNz
IGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRl
cmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uIEFsc28gYWRkZWQgYSBj
b3VwbGUgSlNMb2NrcyB0byBwbGFjZXMgdGhhdCBkaWRuJ3QgYWxyZWFkeSAKKyAgICAgICAgaGF2
ZSBpdCB0aGF0IG5lZWRlZCBpdC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0dDQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdD
Q29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29u
dHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9s
bGVyOjpkaXNjYXJkQWxsQ29tcGlsZWRDb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1
c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0
b21Wb2lkQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1
c3RvbVhQYXRoTlNSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVhQYXRo
TlNSZXNvbHZlcjo6bG9va3VwTmFtZXNwYWNlVVJJKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0Vycm9ySGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Vycm9ySGFuZGxlcjo6aGFu
ZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6bm9kZUFzU2NyaXB0VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3RlZE9iamVj
dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVJbmplY3RlZFNj
cmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNhbkFjY2Vz
c0luc3BlY3RlZFdpbmRvdyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0
ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFs
aXplSlNGdW5jdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJhY2tDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNNdXRhdGlvbkNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrOjpoYW5kbGVFdmVu
dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y2hlZHVsZWRBY3Rpb246OmV4ZWN1dGVGdW5jdGlvbkluQ29udGV4dCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OmV2YWx1YXRlSW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpj
bGVhcldpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6Omlu
aXRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2FjaGVhYmxlQmlu
ZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Ymlu
ZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6d2lu
ZG93U2NyaXB0TlBPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
anNPYmplY3RGb3JQbHVnaW5FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cyk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6Ondp
bmRvd1NjcmlwdE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlk
UGF1c2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5KToKKyAgICAgICAgKFdl
YkNvcmU6OmV2ZW50TGlzdGVuZXJIYW5kbGVyTG9jYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRGdW5jdGlvbkNhbGw6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25D
YWxsOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6OmNhbGwp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRH
bG9iYWxPYmplY3Q6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6
OnJlbW92ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRWYWx1ZTo6dG9JbnNwZWN0b3JWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRD
b250cm9sbGVyOjp+V29ya2VyU2NyaXB0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJTY3JpcHRDb250cm9sbGVyOjppbml0U2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clNjcmlwdENvbnRyb2xsZXI6OmRpc2FibGVFdmFsKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpj
L1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAgICAgKF9kaWRFeGVjdXRlKToKKyAgICAgICAgKC1b
V2ViU2NyaXB0T2JqZWN0IF9zZXRJbXA6b3JpZ2luUm9vdE9iamVjdDpyb290T2JqZWN0Ol0pOgor
ICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgX3NldE9yaWdpblJvb3RPYmplY3Q6YW5kUm9vdE9i
amVjdDpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGRlYWxsb2NdKToKKyAgICAgICAg
KC1bV2ViU2NyaXB0T2JqZWN0IGZpbmFsaXplXSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVj
dCBjYWxsV2ViU2NyaXB0TWV0aG9kOndpdGhBcmd1bWVudHM6XSk6CisgICAgICAgICgtW1dlYlNj
cmlwdE9iamVjdCBldmFsdWF0ZVdlYlNjcmlwdDpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2Jq
ZWN0IHNldFZhbHVlOmZvcktleTpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHZhbHVl
Rm9yS2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgcmVtb3ZlV2ViU2NyaXB0S2V5
Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgaGFzV2ViU2NyaXB0S2V5Ol0pOgorICAg
ICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc3RyaW5nUmVwcmVzZW50YXRpb25dKToKKyAgICAgICAg
KC1bV2ViU2NyaXB0T2JqZWN0IHdlYlNjcmlwdFZhbHVlQXRJbmRleDpdKToKKyAgICAgICAgKC1b
V2ViU2NyaXB0T2JqZWN0IHNldFdlYlNjcmlwdFZhbHVlQXRJbmRleDp2YWx1ZTpdKToKKyAgICAg
ICAgKCtbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpvcmlnaW5Sb290
T2JqZWN0OnJvb3RPYmplY3Q6XSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24pOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoTm9QYXJhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0p
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlBh
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhTdHJp
bmdMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhC
b29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1JlcXVp
cmVzVGhpc1RvUGFzcyk6CisgICAgICAgICogYnJpZGdlL05QX2pzb2JqZWN0LmNwcDoKKyAgICAg
ICAgKF9OUE5fSW52b2tlRGVmYXVsdCk6CisgICAgICAgIChfTlBOX0ludm9rZSk6CisgICAgICAg
IChfTlBOX0V2YWx1YXRlKToKKyAgICAgICAgKF9OUE5fR2V0UHJvcGVydHkpOgorICAgICAgICAo
X05QTl9TZXRQcm9wZXJ0eSk6CisgICAgICAgIChfTlBOX1JlbW92ZVByb3BlcnR5KToKKyAgICAg
ICAgKF9OUE5fSGFzUHJvcGVydHkpOgorICAgICAgICAoX05QTl9IYXNNZXRob2QpOgorICAgICAg
ICAoX05QTl9FbnVtZXJhdGUpOgorICAgICAgICAoX05QTl9Db25zdHJ1Y3QpOgorICAgICAgICAq
IGJyaWRnZS9jL2NfY2xhc3MuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0NsYXNzOjp+
Q0NsYXNzKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNDbGFzczo6bWV0aG9kc05hbWVkKToK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNDbGFzczo6ZmllbGROYW1lZCk6CisgICAgICAgICog
YnJpZGdlL2MvY19pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFu
Y2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZSk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpDSW5zdGFuY2U6Omludm9rZU1ldGhvZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpD
SW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
Q0luc3RhbmNlOjppbnZva2VDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0lu
c3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3J1bnRpbWUu
Y3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0ZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZSk6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZSk6Cisg
ICAgICAgICogYnJpZGdlL2MvY191dGlsaXR5LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OmNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZl
cnROUFZhcmlhbnRUb1ZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9qc29iamVjdC5t
bToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y2FsbCk6CisgICAgICAgIChKYXZhSlNPYmplY3Q6
OmV2YWwpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpnZXRNZW1iZXIpOgorICAgICAgICAoSmF2
YUpTT2JqZWN0OjpzZXRNZW1iZXIpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpyZW1vdmVNZW1i
ZXIpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpnZXRTbG90KToKKyAgICAgICAgKEphdmFKU09i
amVjdDo6c2V0U2xvdCk6CisgICAgICAgIChKYXZhSlNPYmplY3Q6OnRvU3RyaW5nKToKKyAgICAg
ICAgKEphdmFKU09iamVjdDo6Y29udmVydFZhbHVlVG9KT2JqZWN0KToKKyAgICAgICAgKEphdmFK
U09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pu
aV9vYmpjLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6ZGlzcGF0Y2hKTklDYWxsKToKKyAg
ICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHA6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb0pWYWx1ZSk6CisgICAgICAgICogYnJpZGdlL2pu
aS9qc2MvSmF2YUNsYXNzSlNDLmNwcDoKKyAgICAgICAgKEphdmFDbGFzczo6SmF2YUNsYXNzKToK
KyAgICAgICAgKEphdmFDbGFzczo6fkphdmFDbGFzcyk6CisgICAgICAgICogYnJpZGdlL2puaS9q
c2MvSmF2YUluc3RhbmNlSlNDLmNwcDoKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6c3RyaW5nVmFs
dWUpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3BwOgorICAgICAg
ICAoYXBwZW5kQ2xhc3NOYW1lKToKKyAgICAgICAgKEphdmFNZXRob2Q6OnNpZ25hdHVyZSk6Cisg
ICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YVN0cmluZ0pTQy5oOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6SmF2YVN0cmluZzo6SmF2YVN0cmluZyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpKYXZhU3RyaW5nOjp+SmF2YVN0cmluZyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZh
U3RyaW5nOjp1dGY4KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFTdHJpbmc6OmluaXQp
OgorICAgICAgICAqIGJyaWRnZS9qc2MvQnJpZGdlSlNDLmNwcDoKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6Okluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKiBicmlkZ2Uvb2Jq
Yy9vYmpjX2luc3RhbmNlLm1tOgorICAgICAgICAoT2JqY0luc3RhbmNlOjptb3ZlR2xvYmFsRXhj
ZXB0aW9uVG9FeGVjU3RhdGUpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjppbnZva2VPYmpjTWV0
aG9kKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZCk6CisgICAg
ICAgIChPYmpjSW5zdGFuY2U6OnNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCk6CisgICAgICAgIChP
YmpjSW5zdGFuY2U6OmdldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCk6CisgICAgICAgICogYnJpZGdl
L29iamMvb2JqY19ydW50aW1lLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2JqY0ZpZWxk
Ojp2YWx1ZUZyb21JbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjRmllbGQ6
OnNldFZhbHVlVG9JbnN0YW5jZSk6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY191dGlsaXR5
Lm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9PYmpjVmFsdWUpOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE5TU3RyaW5nVG9TdHJpbmcpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE9iamNWYWx1ZVRvVmFsdWUpOgorICAgICAgICAqIGJy
aWRnZS9xdC9xdF9pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdEluc3Rh
bmNlOjp+UXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpn
ZXRRdEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6Om5ld1J1
bnRpbWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwSW5zdGFuY2U6OmNyZWF0ZVBpeG1hcFJ1
bnRpbWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9ydW50aW1lLmNwcDoKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQpOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6Y29udmVydFFWYXJpYW50VG9WYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjYWxsKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNhbGwpOgorICAgICAgICAqIGJyaWRnZS9xdC9x
dF9ydW50aW1lX3F0NC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVU
b1FWYXJpYW50KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRRVmFyaWFudFRvVmFs
dWUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0YU1ldGhvZDo6Y2FsbCk6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpjYWxs
KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogaHRt
bC9IVE1MSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlTG9hZGVy
Ojpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGVyZm9ybVJl
cXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6bnBPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKToKKyAg
ICAgICAgKiBwbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpnZXRXaW5kb3dJbmZvKToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6Cisg
ICAgICAgICogcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpoYW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5Q
V2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1T
dGFydCk6CisgICAgICAgICogcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKiBwbHVnaW5zL3F0
L1BsdWdpblZpZXdRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRj
aE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAg
ICAgICAgKiBwbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBX
aW5kb3dSZWN0KToKKyAgICAgICAgKiB0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHA6
CisgICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KToKKyAgICAg
ICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJl
cXVlc3Q6OmRyb3BQcm90ZWN0aW9uKToKKwogMjAxMi0wNi0yMSAgVGFpanUgVHN1aWtpICA8dHpp
a0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogVW5pZnkgRmlsZVN5c3Rl
bSBjYWxsYmFja3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
R0NDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lkIGNvbGxlY3Qodm9pZCopCiB7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKS0+aGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwogfQogCkBAIC02Myw3ICs2
Myw3IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdFNvb24oKQogICAgIC8vIGRv
d24gaW50byBXVEYgc28gdGhhdCBtb3JlIHBsYXRmb3JtcyBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2Yg
aXQsIHdlIHdpbGwgYmUgCiAgICAgLy8gYWJsZSB0byB1c2UgcmVwb3J0QWJhbmRvbmVkT2JqZWN0
R3JhcGggb24gbW9yZSBwbGF0Zm9ybXMuCiAjaWYgVVNFKENGKQotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCktPmhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKTsKICNlbHNlCiAgICAgaWYg
KCFtX0dDVGltZXIuaXNBY3RpdmUoKSkKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBHQ0NvbnRyb2xs
ZXI6OmdjVGltZXJGaXJlZChUaW1lcjxHQwogCiB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNv
bGxlY3ROb3coKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICBpZiAoIUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5pc0J1c3ko
KSkKICAgICAgICAgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNvbGxl
Y3RBbGxHYXJiYWdlKCk7CiB9CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6
OnNldEphdmFTY3JpcHRHYXJiYWdlQwogCiB2b2lkIEdDQ29udHJvbGxlcjo6ZGlzY2FyZEFsbENv
bXBpbGVkQ29kZSgpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwogICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5kZWxldGVBbGxD
b21waWxlZENvZGUoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
dXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3Bw
CShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIGJvb2wgSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGUKIAogICAgIFJl
ZlB0cjxKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKLSAgICBK
U0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAg
RXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwog
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFjay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBKU0N1c3RvbVZvaWRDYWxs
YmFjazo6aGFuZGxlRXZlbnQoKQogCiAgICAgUmVmUHRyPEpTQ3VzdG9tVm9pZENhbGxiYWNrPiBw
cm90ZWN0KHRoaXMpOwogICAgICAgICAKLSAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAg
ICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBh
dGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBTdHJpbmcg
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hCiB7CiAgICAgQVNTRVJUKG1fY3VzdG9t
UmVzb2x2ZXIpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JI
YW5kbGVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFcnJvckhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZv
aWQgSlNFcnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEUKIAogICAgIEVycm9yRXZlbnQq
IGVycm9yRXZlbnQgPSBzdGF0aWNfY2FzdDxFcnJvckV2ZW50Kj4oZXZlbnQpOwogCi0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5nbG9iYWxEYXRhKCkpOwogCiAgICAgSlNPYmplY3QqIGpz
RnVuY3Rpb24gPSB0aGlzLT5qc0Z1bmN0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAg
IGlmICghanNGdW5jdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBA
QCBKU1ZhbHVlIEpTRXZlbnQ6OmNsaXBib2FyZERhdGEoRXhlY1N0YXRlCiAKIEpTVmFsdWUgdG9K
UyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV2ZW50
KiBldmVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgaWYgKCFldmVudCkKICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExp
c3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3
IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHQKICAgICBpZiAoIXNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQgfHwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNKU0V4ZWN1
dGlvbkZvcmJpZGRlbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmdsb2JhbERhdGEoKSk7CiAKICAgICBKU09iamVjdCoganNGdW5jdGlvbiA9IHRo
aXMtPmpzRnVuY3Rpb24oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgaWYgKCFqc0Z1bmN0
aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhv
c3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIE5vZGUqIEluamVjdGVkU2NyaXB0SG9zdDo6c2Ny
aXB0VmFsdWVBc04KIAogU2NyaXB0VmFsdWUgSW5qZWN0ZWRTY3JpcHRIb3N0Ojpub2RlQXNTY3Jp
cHRWYWx1ZShTY3JpcHRTdGF0ZSogc3RhdGUsIE5vZGUqIG5vZGUpCiB7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzdGF0ZSk7
CiAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHN0YXRlLT5nbG9iYWxEYXRhKCksIHRvSlMoc3RhdGUs
IGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoc3RhdGUpLCBub2RlKSk7CiB9CiAK
QEAgLTk1LDcgKzk1LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdGVk
TwogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgU2NyaXB0VmFsdWUgc2NyaXB0VmFsdWUgPSBvYmplY3QtPmdldChleGVj
KTsKICAgICBpZiAoc2NyaXB0VmFsdWUuaGFzTm9WYWx1ZSgpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcmlwdE9i
amVjdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUluamVjdGVkU2NyaXB0KGNvbnN0IFN0
cmluZyYgc291cmNlLCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGludCBpZCkKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHNjcmlwdFN0YXRlKTsKIAogICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IG1ha2VTb3VyY2Uo
c3RyaW5nVG9VU3RyaW5nKHNvdXJjZSkpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKTsKQEAgLTgxLDcgKzgxLDcgQEAgU2NyaXB0T2JqZWN0IEluamVjdGVkU2Ny
aXB0TWFuYWdlcjo6Y3JlYQogCiBib29sIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y2FuQWNjZXNz
SW5zcGVjdGVkV2luZG93KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKIHsKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlw
dFN0YXRlKTsKICAgICBKU0RPTVdpbmRvdyogaW5zcGVjdGVkV2luZG93ID0gdG9KU0RPTVdpbmRv
dyhzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBpZiAoIWluc3BlY3Rl
ZFdpbmRvdykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDEyMDky
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50
TGlzdGVuZXI6OmluaXRpYWxpegogICAgIGlmIChtX29yaWdpbmFsTm9kZSkgewogICAgICAgICBp
ZiAoIXdyYXBwZXIoKSkgewogICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgJ25vZGUnIGhhcyBh
IEphdmFTY3JpcHQgd3JhcHBlciB0byBtYXJrIHRoZSBldmVudCBsaXN0ZW5lciB3ZSdyZSBjcmVh
dGluZy4KLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgcGFzcyB0aGUgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUK
ICAgICAgICAgICAgIHNldFdyYXBwZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc09iamVjdCh0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgbV9vcmlnaW5hbE5vZGUpKSk7CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0
ZS5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01h
aW5UaHJlYWRFeGVjU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNDOjpTY29wZUNoYWluTm9kZSogY2hhaW4sIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291
cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbikKICAg
ICB7CiAgICAgICAgIEpTTWFpblRocmVhZEV4ZWNTdGF0ZSBjdXJyZW50U3RhdGUoZXhlYyk7Cisg
ICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHJldHVybiBKU0M6
OmV2YWx1YXRlKGV4ZWMsIGNoYWluLCBzb3VyY2UsIHRoaXNWYWx1ZSwgZXhjZXB0aW9uKTsKICAg
ICB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJh
Y2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkpTTXV0YXRpb25DYWxsYmFjay5o
IgogCisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiSlNNdXRhdGlvblJl
Y29yZC5oIgogI2luY2x1ZGUgIkpTV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTUwLDcgKzUxLDcgQEAgYm9vbCBKU011dGF0
aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KE11dAogCiAgICAgUmVmUHRyPEpTTXV0YXRpb25DYWxs
YmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBKU05vZGVGaWx0ZXJDb25kaXRpb246OkpTTm9k
ZUZpbHRlckNvbmRpCiAKIHNob3J0IEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgTm9kZSogZmlsdGVyTm9kZSkgY29uc3QKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogCiAgICAgaWYgKCFtX2ZpbHRlcikKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJ
TFRFUl9BQ0NFUFQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlcXVlc3RB
bmltYXRpb25GcmFtZUNhbGxiYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrQ3VzdG9tLmNw
cAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXF1
ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAgYm9vbCBKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrOjpoYQogCiAg
ICAgUmVmUHRyPEpTUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+IHByb3RlY3QodGhpcyk7
CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAKICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVyKHRpbWUp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRD
YWxsRnJhbWUuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKIAogI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaD4KICNp
bmNsdWRlIDxydW50aW1lL0NvbXBsZXRpb24uaD4KQEAgLTEwNiw3ICsxMDcsNyBAQCBKU1ZhbHVl
IEphdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKGNvCiAgICAgaWYgKCFtX2lzVmFsaWQpCiAg
ICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25K
U0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUuZXZhbHVhdGUo
c2NyaXB0LCBleGNlcHRpb24pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1Nl
cnZlcjo6cmVtb3ZlTGlzdGVuCiAKIHZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBp
bGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4qKQogewotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAvLyBJZiBKYXZhU2NyaXB0IHN0
YWNrIGlzIG5vdCBlbXB0eSBwb3N0cG9uZSByZWNvbXBpbGF0aW9uLgogICAgIGlmIChKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmR5bmFtaWNHbG9iYWxPYmplY3QpCiAgICAgICAg
IHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKFNjcmlw
dEV4ZWMKIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlRnVuY3Rpb25JbkNvbnRleHQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1fZnVuY3Rpb24pOwotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
Y29udGV4dC0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobV9mdW5jdGlvbi5nZXQoKSwgY2FsbERhdGEp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNo
ZWRGcmFtZURhdGEuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3
ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpT
Y3JpcHRDYWNoZWRGcmFtZURhdGEoRnJhbWUqIGZyYW1lKQogewotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBTY3JpcHRDb250cm9sbGVyKiBzY3Jp
cHRDb250cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOwogICAgIFNjcmlwdENvbnRyb2xsZXI6OlNo
ZWxsTWFwJiB3aW5kb3dTaGVsbHMgPSBzY3JpcHRDb250cm9sbGVyLT5tX3dpbmRvd1NoZWxsczsK
QEAgLTY3LDcgKzY3LDcgQEAgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjp+U2NyaXB0Q2FjaGVkRnJh
bQogCiB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZShGcmFtZSogZnJhbWUpCiB7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIFNj
cmlwdENvbnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXIgPSBmcmFtZS0+c2NyaXB0KCk7CiAgICAg
U2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXAmIHdpbmRvd1NoZWxscyA9IHNjcmlwdENvbnRyb2xs
ZXItPm1fd2luZG93U2hlbGxzOwpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIFNjcmlwdENhY2hlZEZy
YW1lRGF0YTo6Y2xlYXIoKQogICAgIGlmIChtX3dpbmRvd3MuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgIG1fd2luZG93cy5jbGVhcigpOwogICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0
U29vbigpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMz
LDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbgogICAgIGNvbnN0
IFN0cmluZyogc2F2ZWRTb3VyY2VVUkwgPSBtX3NvdXJjZVVSTDsKICAgICBtX3NvdXJjZVVSTCA9
ICZzb3VyY2VVUkw7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0
ID0gbV9mcmFtZTsKIApAQCAtMTc3LDcgKzE3Nyw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6
Y2xlYXJXaW5kb3dTaGVsbCgKICAgICBpZiAobV93aW5kb3dTaGVsbHMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwogCiAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxz
LmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAg
ICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnNlY29uZC5nZXQoKTsKQEAg
LTIwOSw3ICsyMDksNyBAQCBKU0RPTVdpbmRvd1NoZWxsKiBTY3JpcHRDb250cm9sbGVyOjppbml0
CiB7CiAgICAgQVNTRVJUKCFtX3dpbmRvd1NoZWxscy5jb250YWlucyh3b3JsZCkpOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayh3b3JsZC0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1No
ZWxsID0gY3JlYXRlV2luZG93U2hlbGwod29ybGQpOwogCkBAIC0yODQsOSArMjg0LDEwIEBAIHZv
aWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQoKQogICAgIGlmICghbV9mcmFtZS0+
ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKLSAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5k
b3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKQor
ICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigp
OyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2soaXRlci0+Zmlyc3QtPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIGl0ZXItPnNl
Y29uZC0+d2luZG93KCktPnVwZGF0ZURvY3VtZW50KCk7CisgICAgfQogfQogCiB2b2lkIFNjcmlw
dENvbnRyb2xsZXI6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCkKQEAgLTMwMCw3ICszMDEsNyBAQCBC
aW5kaW5nczo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6CiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgaWYgKCFtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KSB7Ci0gICAgICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBtX2Nh
Y2hlYWJsZUJpbmRpbmdSb290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgw
LCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9jYWNo
ZWFibGVCaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKQEAgLTMxMiw3ICszMTMsNyBAQCBCaW5kaW5n
czo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6CiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgaWYgKCFtX2JpbmRpbmdSb290T2JqZWN0KSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBtX2JpbmRpbmdSb290T2JqZWN0
ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3QocGx1Z2luV29y
bGQoKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9iaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKQEAg
LTM0OSw5ICszNTAsOSBAQCBOUE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0
CiAgICAgICAgIGlmIChjYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkp
IHsKICAgICAgICAgICAgIC8vIEphdmFTY3JpcHQgaXMgZW5hYmxlZCwgc28gdGhlcmUgaXMgYSBK
YXZhU2NyaXB0IHdpbmRvdyBvYmplY3QuCiAgICAgICAgICAgICAvLyBSZXR1cm4gYW4gTlBPYmpl
Y3QgYm91bmQgdG8gdGhlIHdpbmRvdyBvYmplY3QuCi0gICAgICAgICAgICBKU0M6OkpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgICAgICAgICBKU09iamVjdCogd2luID0g
d2luZG93U2hlbGwocGx1Z2luV29ybGQoKSktPndpbmRvdygpOworICAgICAgICAgICAgSlNET01X
aW5kb3cqIHdpbiA9IHdpbmRvd1NoZWxsKHBsdWdpbldvcmxkKCkpLT53aW5kb3coKTsKICAgICAg
ICAgICAgIEFTU0VSVCh3aW4pOworICAgICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh3
aW4tPmdsb2JhbEV4ZWMoKSk7CiAgICAgICAgICAgICBCaW5kaW5nczo6Um9vdE9iamVjdCogcm9v
dCA9IGJpbmRpbmdSb290T2JqZWN0KCk7CiAgICAgICAgICAgICBtX3dpbmRvd1NjcmlwdE5QT2Jq
ZWN0ID0gX05QTl9DcmVhdGVTY3JpcHRPYmplY3QoMCwgd2luLCByb290KTsKICAgICAgICAgfSBl
bHNlIHsKQEAgLTM4Myw4ICszODQsOCBAQCBKU09iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6anNP
YmplY3RGb3JQCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ3JlYXRlIGEgSlNPYmplY3Qg
Ym91bmQgdG8gdGhpcyBlbGVtZW50Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqID0gZ2xvYmFsT2JqZWN0KHBsdWdpbldv
cmxkKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iai0+Z2xvYmFsRXhlYygpKTsK
ICAgICAvLyBGSVhNRTogaXMgbm9ybWFsIG9rYXk/IC0gdXNlZCBmb3IgTlAgcGx1Z2lucz8KICAg
ICBKU1ZhbHVlIGpzRWxlbWVudFZhbHVlID0gdG9KUyhnbG9iYWxPYmotPmdsb2JhbEV4ZWMoKSwg
Z2xvYmFsT2JqLCBwbHVnaW4pOwogICAgIGlmICghanNFbGVtZW50VmFsdWUgfHwgIWpzRWxlbWVu
dFZhbHVlLmlzT2JqZWN0KCkpCkBAIC00MTgsNyArNDE5LDcgQEAgdm9pZCBTY3JpcHRDb250cm9s
bGVyOjpjbGVhbnVwU2NyaXB0T2JqZQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2Ny
aXB0T2JqZWN0cygpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKIAogICAgIFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcm9vdE9i
amVjdHMuZW5kKCk7CiAgICAgZm9yIChSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcm9vdE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgV2ViU2NyaXB0T2JqZWN0
KiBTY3JpcHRDb250cm9sbGVyOjp3aW5kbwogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICgh
bV93aW5kb3dTY3JpcHRPYmplY3QpIHsKLSAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIEpTQzo6QmluZGlu
Z3M6OlJvb3RPYmplY3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgpOwogICAgICAgICBtX3dp
bmRvd1NjcmlwdE9iamVjdCA9IFtXZWJTY3JpcHRPYmplY3Qgc2NyaXB0T2JqZWN0Rm9ySlNPYmpl
Y3Q6dG9SZWYod2luZG93U2hlbGwocGx1Z2luV29ybGQoKSkpIG9yaWdpblJvb3RPYmplY3Q6cm9v
dCByb290T2JqZWN0OnJvb3RdOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNo
RGlkUGF1c2UKICAgICB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUtPmlzVmFsaWQo
KSAmJiBnbG9iYWxPYmplY3QtPmluaGVyaXRzKCZKU0RPTUdsb2JhbE9iamVjdDo6c19pbmZvKSkg
ewogICAgICAgICAgICAgSlNET01HbG9iYWxPYmplY3QqIGRvbUdsb2JhbE9iamVjdCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soc3RhdGUpOwogICAgICAgICAgICAganNDYWxsRnJhbWUgPSB0b0pTKHN0YXRlLCBkb21HbG9i
YWxPYmplY3QsIG1fY3VycmVudENhbGxGcmFtZS5nZXQoKSk7CiAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAganNDYWxsRnJhbWUgPSBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVu
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIFN0cmluZyBldmVudExpc3Rl
bmVySGFuZGxlckJvZHkoRG9jdW1lbnQKICAgICBBU1NFUlQoanNMaXN0ZW5lcik7CiAgICAgaWYg
KCFqc0xpc3RlbmVyKQogICAgICAgICByZXR1cm4gIiI7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhqc0xpc3RlbmVyLT5pc29s
YXRlZFdvcmxkKCktPmdsb2JhbERhdGEoKSk7CiAgICAgSlNDOjpKU09iamVjdCoganNGdW5jdGlv
biA9IGpzTGlzdGVuZXItPmpzRnVuY3Rpb24oZG9jdW1lbnQpOwogICAgIGlmICghanNGdW5jdGlv
bikKICAgICAgICAgcmV0dXJuICIiOwpAQCAtMTEyLDcgKzExMiw3IEBAIGJvb2wgZXZlbnRMaXN0
ZW5lckhhbmRsZXJMb2NhdGlvbihEb2N1bWUKICAgICBBU1NFUlQoanNMaXN0ZW5lcik7CiAgICAg
aWYgKCFqc0xpc3RlbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhqc0xpc3RlbmVy
LT5pc29sYXRlZFdvcmxkKCktPmdsb2JhbERhdGEoKSk7CiAgICAgSlNDOjpKU09iamVjdCoganNP
YmplY3QgPSBqc0xpc3RlbmVyLT5qc0Z1bmN0aW9uKGRvY3VtZW50KTsKICAgICBpZiAoIWpzT2Jq
ZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDE5ICs1OCwxOSBAQCB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRs
ZXI6OmFwcGVuZEFyCiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJn
dW1lbnQoY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAgICAgbV9h
cmd1bWVudHMuYXBwZW5kKGpzU3RyaW5nKG1fZXhlYywgYXJndW1lbnQpKTsKIH0KIAogdm9pZCBT
Y3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBKU0M6OlVTdHJp
bmcmIGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQo
anNTdHJpbmcobV9leGVjLCBhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVu
dEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IGNoYXIqIGFyZ3VtZW50KQogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
bV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNTdHJpbmcobV9leGVjLCBVU3RyaW5n
KGFyZ3VtZW50KSkpOwogfQogCkBAIC04MSwzMSArODEsMzEgQEAgdm9pZCBTY3JpcHRDYWxsQXJn
dW1lbnRIYW5kbGVyOjphcHBlbmRBcgogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6
OmFwcGVuZEFyZ3VtZW50KGxvbmcgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1f
YXJndW1lbnRzLmFwcGVuZChqc051bWJlcihhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlwdENh
bGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGxvbmcgbG9uZyBhcmd1bWVudCkKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKG1fZXhlYyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGFyZ3VtZW50
KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQo
dW5zaWduZWQgaW50IGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50
cy5hcHBlbmQoanNOdW1iZXIoYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxsQXJndW1l
bnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBsb25nIGFyZ3VtZW50KQogewotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIoYXJndW1lbnQpKTsK
IH0KIAogdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChpbnQg
YXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051
bWJlcihhcmd1bWVudCkpOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAgU2NyaXB0VmFsdWUgU2Ny
aXB0RnVuY3Rpb25DYWxsOjpjYWxsKGJvbwogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0g
bV90aGlzT2JqZWN0LmpzT2JqZWN0KCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAKICAgICBKU1ZhbHVl
IGZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcihtX2V4ZWMsIHN0
cmluZ1RvVVN0cmluZyhtX25hbWUpKSk7CiAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkp
IHsKQEAgLTE2Myw3ICsxNjMsNyBAQCBTY3JpcHRPYmplY3QgU2NyaXB0RnVuY3Rpb25DYWxsOjpj
b25zdHJ1CiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBtX3RoaXNPYmplY3QuanNPYmpl
Y3QoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sobV9leGVjKTsKIAogICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9IGFz
T2JqZWN0KHRoaXNPYmplY3QtPmdldChtX2V4ZWMsIElkZW50aWZpZXIobV9leGVjLCBzdHJpbmdU
b1VTdHJpbmcobV9uYW1lKSkpKTsKICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgewpA
QCAtMjA1LDcgKzIwNSw3IEBAIFNjcmlwdFZhbHVlIFNjcmlwdENhbGxiYWNrOjpjYWxsKCkKIAog
U2NyaXB0VmFsdWUgU2NyaXB0Q2FsbGJhY2s6OmNhbGwoYm9vbCYgaGFkRXhjZXB0aW9uKQogewot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2sobV9leGVjKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gZ2V0Q2FsbERhdGEobV9mdW5jdGlvbi5qc1ZhbHVlKCksIGNhbGxEYXRhKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVFeGNl
cHRpb24oU2NyaXB0U3RhdGUqCiAKIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0
U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTY3JpcHRPYmplY3Qm
IHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogICAgIHNjcmlwdFN0YXRlLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCBJZGVu
dGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwgdmFsdWUuanNPYmplY3QoKSk7CiAgICAgcmV0dXJu
IGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7CiB9CkBAIC03NSw3ICs3NSw3IEBAIGJvb2wg
U2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUs
IGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckZyb250ZW5kSG9zdCogdmFsdWUpCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOwogICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT5nbG9iYWxEYXRh
KCksIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNjcmlwdFN0YXRlLCBnbG9i
YWxPYmplY3QsIHZhbHVlKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0
ZSk7CkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0
U3RhdGUKIAogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluamVjdGVkU2NyaXB0SG9zdCogdmFsdWUpCiB7Ci0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpOwogICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT5nbG9iYWxE
YXRhKCksIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNjcmlwdFN0YXRlLCBn
bG9iYWxPYmplY3QsIHZhbHVlKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRT
dGF0ZSk7CkBAIC05Miw3ICs5Miw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2Ny
aXB0U3RhdGUKIAogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChTY3JpcHRTdGF0ZSogc2Ny
aXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIFNjcmlwdE9iamVjdCYgdmFsdWUpCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gc2NyaXB0U3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+Z2V0KHNjcmlwdFN0YXRlLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRl
LCBuYW1lKSk7CiAgICAgaWYgKCFqc1ZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MDYsNyArMTA2LDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChTY3JpcHRTdGF0ZQog
CiBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6cmVtb3ZlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0
ZSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBzY3JpcHRT
dGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eShzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzY3JpcHRTdGF0ZSwgSWRlbnRp
ZmllcihzY3JpcHRTdGF0ZSwgbmFtZSkpOwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2Ny
aXB0U3RhdGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZh
bHVlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIGJvb2wgU2Ny
aXB0VmFsdWU6OmdldFN0cmluZyhTY3JpcHRTdGF0ZSoKIHsKICAgICBpZiAoIW1fdmFsdWUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBVU3RyaW5nIHVz
dHJpbmc7CiAgICAgaWYgKCFtX3ZhbHVlLmdldCgpLmdldFN0cmluZyhzY3JpcHRTdGF0ZSwgdXN0
cmluZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3NSw2ICsxNzUsNyBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4ganNUb0luCiAKIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IFNjcmlwdFZhbHVlOjp0b0luc3BlY3RvclZhbHVlKFNjcmlwdFN0YXRlKiBzY3JpcHRT
dGF0ZSkgY29uc3QKIHsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBob2xkZXIoc2NyaXB0U3RhdGUp
OwogICAgIHJldHVybiBqc1RvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3RhdGUsIG1fdmFsdWUuZ2V0
KCksIEluc3BlY3RvclZhbHVlOjptYXhEZXB0aCk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtl
clNjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQsNyArNjQsNyBAQCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpXb3JrZXJTY3JpcHRDb250
CiAKIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6On5Xb3JrZXJTY3JpcHRDb250cm9sbGVyKCkKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGdsb2JhbERhdGEoKSk7CiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci5jbGVhcigp
OwogICAgIG1fZ2xvYmFsRGF0YS5jbGVhcigpOwogfQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIFdv
cmtlclNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQoCiB7CiAgICAgQVNTRVJUKCFtX3dvcmtl
ckNvbnRleHRXcmFwcGVyKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9nbG9iYWxEYXRhLmdldCgpKTsKIAogICAgIC8v
IEV4cGxpY2l0bHkgcHJvdGVjdCB0aGUgZ2xvYmFsIG9iamVjdCdzIHByb3RvdHlwZSBzbyBpdCBp
c24ndCBjb2xsZWN0ZWQKICAgICAvLyB3aGVuIHdlIGFsbG9jYXRlIHRoZSBnbG9iYWwgb2JqZWN0
LiAoT25jZSB0aGUgZ2xvYmFsIG9iamVjdCBpcyBmdWxseQpAQCAtMTE3LDcgKzExNyw3IEBAIHZv
aWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICBTY3JpcHRWYWx1ZSBl
eGNlcHRpb247CiAgICAgZXZhbHVhdGUoc291cmNlQ29kZSwgJmV4Y2VwdGlvbik7CiAgICAgaWYg
KGV4Y2VwdGlvbi5qc1ZhbHVlKCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSgpKTsKICAg
ICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMo
KSwgZXhjZXB0aW9uLmpzVmFsdWUoKSk7CiAgICAgfQogfQpAQCAtMTI4LDkgKzEyOCw5IEBAIHZv
aWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICAgICAgcmV0dXJuOwog
CiAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fd29ya2VyQ29udGV4dFdyYXBw
ZXItPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIG1f
d29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgp
OwogCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppc0V4
ZWN1dGlvbgogdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpkaXNhYmxlRXZhbCgpCiB7CiAg
ICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhKCkpOwogCiAgICAgbV93
b3JrZXJDb250ZXh0V3JhcHBlci0+c2V0RXZhbEVuYWJsZWQoZmFsc2UpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2Jq
ZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsMTMgKzEyMiwxMiBAQCArIChpZClzY3JpcHRP
YmplY3RGb3JKU09iamVjdDooSlNPYmplY3RSCiAKIHN0YXRpYyB2b2lkIF9kaWRFeGVjdXRlKFdl
YlNjcmlwdE9iamVjdCAqb2JqKQogewotICAgIEFTU0VSVChKU0xvY2s6OmxvY2tDb3VudCgpID4g
MCk7Ci0gICAgCiAgICAgUm9vdE9iamVjdCogcm9vdCA9IFtvYmogX3Jvb3RPYmplY3RdOwogICAg
IGlmICghcm9vdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9v
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBBU1NFUlQoZXhlYy0+Z2xvYmFs
RGF0YSgpLmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKICAgICBLSlNE
aWRFeGVjdXRlRnVuY3Rpb25QdHIgZnVuYyA9IEluc3RhbmNlOjpkaWRFeGVjdXRlRnVuY3Rpb24o
KTsKICAgICBpZiAoZnVuYykKICAgICAgICAgZnVuYyhleGVjLCByb290LT5nbG9iYWxPYmplY3Qo
KSk7CkBAIC0xNDgsMTkgKzE0NywyNSBAQCAtICh2b2lkKV9zZXRJbXA6KEpTT2JqZWN0KilpbXAg
b3JpZ2luUm9vCiAKICAgICBXZWJDb3JlOjphZGRKU1dyYXBwZXIoc2VsZiwgaW1wKTsKIAotICAg
IGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCkKKyAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3Qp
IHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGhvbGRlcigmX3ByaXZhdGUtPnJvb3RPYmplY3QtPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICBfcHJpdmF0ZS0+cm9vdE9iamVj
dC0+Z2NQcm90ZWN0KGltcCk7CisgICAgfQogfQogCiAtICh2b2lkKV9zZXRPcmlnaW5Sb290T2Jq
ZWN0OihQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KW9yaWdpblJvb3RPYmplY3QgYW5kUm9vdE9iamVj
dDooUGFzc1JlZlB0cjxSb290T2JqZWN0Pilyb290T2JqZWN0CiB7CiAgICAgQVNTRVJUKF9wcml2
YXRlLT5pbXApOwogCi0gICAgaWYgKHJvb3RPYmplY3QpCisgICAgaWYgKHJvb3RPYmplY3QpIHsK
KyAgICAgICAgSlNMb2NrSG9sZGVyIGhvbGRlcigmcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbERhdGEoKSk7CiAgICAgICAgIHJvb3RPYmplY3QtPmdjUHJvdGVjdChfcHJpdmF0ZS0+
aW1wKTsKKyAgICB9CiAKLSAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUt
PnJvb3RPYmplY3QtPmlzVmFsaWQoKSkKKyAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYg
X3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFsaWQoKSkgeworICAgICAgICBKU0xvY2tIb2xkZXIg
aG9sZGVyKCZfcHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEo
KSk7CiAgICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5nY1VucHJvdGVjdChfcHJpdmF0ZS0+
aW1wKTsKKyAgICB9CiAKICAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QpCiAgICAgICAgIF9w
cml2YXRlLT5yb290T2JqZWN0LT5kZXJlZigpOwpAQCAtMjMyLDggKzIzNywxMCBAQCAtICh2b2lk
KWRlYWxsb2MKICAgICBpZiAoX3ByaXZhdGUtPmltcCkKICAgICAgICAgV2ViQ29yZTo6cmVtb3Zl
SlNXcmFwcGVyKF9wcml2YXRlLT5pbXApOwogCi0gICAgaWYgKF9wcml2YXRlLT5yb290T2JqZWN0
ICYmIF9wcml2YXRlLT5yb290T2JqZWN0LT5pc1ZhbGlkKCkpCisgICAgaWYgKF9wcml2YXRlLT5y
b290T2JqZWN0ICYmIF9wcml2YXRlLT5yb290T2JqZWN0LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
SlNMb2NrSG9sZGVyIGhvbGRlcigmX3ByaXZhdGUtPnJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxEYXRhKCkpOwogICAgICAgICBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2NVbnByb3Rl
Y3QoX3ByaXZhdGUtPmltcCk7CisgICAgfQogCiAgICAgaWYgKF9wcml2YXRlLT5yb290T2JqZWN0
KQogICAgICAgICBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+ZGVyZWYoKTsKQEAgLTI0OCw4ICsyNTUs
MTAgQEAgLSAodm9pZClkZWFsbG9jCiAKIC0gKHZvaWQpZmluYWxpemUKIHsKLSAgICBpZiAoX3By
aXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFsaWQoKSkKKyAg
ICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFs
aWQoKSkgeworICAgICAgICBKU0xvY2tIb2xkZXIgaG9sZGVyKCZfcHJpdmF0ZS0+cm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIF9wcml2YXRlLT5yb290
T2JqZWN0LT5nY1VucHJvdGVjdChfcHJpdmF0ZS0+aW1wKTsKKyAgICB9CiAKICAgICBpZiAoX3By
aXZhdGUtPnJvb3RPYmplY3QpCiAgICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5kZXJlZigp
OwpAQCAtMjgxLDEwICsyOTAsOSBAQCAtIChpZCljYWxsV2ViU2NyaXB0TWV0aG9kOihOU1N0cmlu
ZyAqKW5hCiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKICAgICAgICAgcmV0dXJuIG5p
bDsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgCiAgICAg
Ly8gTG9vayB1cCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtz
ZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsK
IAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZp
ZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhuYW1lKSkpKTsKQEAgLTMyNSw3ICszMzMs
NyBAQCAtIChpZClldmFsdWF0ZVdlYlNjcmlwdDooTlNTdHJpbmcgKilzY3JpCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICAKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCkudGltZW91dENoZWNrZXIuc3RhcnQoKTsKICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNN
YWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBbc2VsZiBfcm9vdE9iamVjdF0tPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoU3RyaW5nKHNjcmlw
dCkpLCBKU0M6OkpTVmFsdWUoKSwgMCk7CkBAIC0zNDYsNyArMzU0LDcgQEAgLSAodm9pZClzZXRW
YWx1ZTooaWQpdmFsdWUgZm9yS2V5OihOU1N0cgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxm
IF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQo
IWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdDsKICAgICBbc2VsZiBfaW1wXS0+bWV0aG9kVGFibGUoKS0+cHV0KFtzZWxmIF9p
bXBdLCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkp
LCBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBb
c2VsZiBfcm9vdE9iamVjdF0pLCBzbG90KTsKQEAgLTM3Miw3ICszODAsNyBAQCAtIChpZCl2YWx1
ZUZvcktleTooTlNTdHJpbmcgKilrZXkKICAgICAgICAgLy8gTmVlZCB0byBzY29wZSB0aGlzIGxv
Y2sgdG8gZW5zdXJlIHRoYXQgd2UgcmVsZWFzZSB0aGUgbG9jayBiZWZvcmUgY2FsbGluZwogICAg
ICAgICAvLyBbc3VwZXIgdmFsdWVGb3JLZXk6a2V5XSB3aGljaCBtaWdodCB0aHJvdyBhbiBleGNl
cHRpb24gYW5kIGJ5cGFzcyB0aGUgSlNMb2NrIGRlc3RydWN0b3IsCiAgICAgICAgIC8vIGxlYXZp
bmcgdGhlIGxvY2sgcGVybWFuZW50bHkgaGVsZAotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAg
ICAgCiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkpKTsKICAgICAgICAgCkBA
IC0zODgsNyArMzk2LDcgQEAgLSAoaWQpdmFsdWVGb3JLZXk6KE5TU3RyaW5nICopa2V5CiAgICAg
aWYgKFtyZXN1bHRPYmogaXNLaW5kT2ZDbGFzczpbV2ViVW5kZWZpbmVkIGNsYXNzXV0pCiAgICAg
ICAgIHJlc3VsdE9iaiA9IFtzdXBlciB2YWx1ZUZvcktleTprZXldOyAgICAvLyBkZWZhdWx0cyB0
byB0aHJvd2luZyBhbiBleGNlcHRpb24KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgX2RpZEV4ZWN1dGUo
c2VsZik7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdE9iajsKQEAgLTQwMiw3ICs0MTAsNyBAQCAt
ICh2b2lkKXJlbW92ZVdlYlNjcmlwdEtleTooTlNTdHJpbmcgKilrCiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwog
ICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBb
c2VsZiBfaW1wXS0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoW3NlbGYgX2ltcF0sIGV4
ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhrZXkpKSkpOwogCiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC00MjEsNyArNDI5LDcgQEAgLSAoQk9P
TCloYXNXZWJTY3JpcHRLZXk6KE5TU3RyaW5nICopa2V5CiAgICAgRXhlY1N0YXRlKiBleGVjID0g
W3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFT
U0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBCT09MIHJl
c3VsdCA9IFtzZWxmIF9pbXBdLT5oYXNQcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHN0
cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkpKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgewpAQCAtNDQxLDggKzQ0OSw4IEBAIC0gKE5TU3RyaW5nICopc3RyaW5nUmVwcmVzZW50
YXRpb24KICAgICAgICAgcmV0dXJuIEAiVW5kZWZpbmVkIjsKICAgICB9CiAKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxm
IF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICBpZCByZXN1bHQgPSBjb252ZXJ0VmFsdWVUb09i
amNWYWx1ZShleGVjLCBbc2VsZiBfaW1wXSwgT2JqY09iamVjdFR5cGUpLm9iamVjdFZhbHVlOwog
CkBAIC00NjEsNyArNDY5LDcgQEAgLSAoaWQpd2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ25l
ZClpbgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsK
IAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4
ZWMsIGluZGV4KTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewpAQCAtNDg1LDcg
KzQ5Myw3IEBAIC0gKHZvaWQpc2V0V2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ24KICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KFtzZWxmIF9p
bXBdLCBleGVjLCBpbmRleCwgY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJnZhbHVlLCBP
YmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RPYmplY3RdKSwgZmFsc2UpOwogCiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC01MTUsNyArNTIzLDcgQEAgKyAoaWQpX2NvbnZlcnRW
YWx1ZVRvT2JqY1ZhbHVlOihKU1ZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7
CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgICAg
IGlmIChvYmplY3QtPmluaGVyaXRzKCZKU0hUTUxFbGVtZW50OjpzX2luZm8pKSB7CiAgICAgICAg
ICAgICAvLyBQbHVnaW4gZWxlbWVudHMgY2FjaGUgdGhlIGluc3RhbmNlIGludGVybmFsbHkuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI3MzMsNyArMjczMyw3
IEBAIEVORAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFjYW5JbnZv
a2VDYWxsYmFjaygpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgcmV0dXJuIHRydWU7XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgUmVmUHRyPCRjbGFzc05hbWU+IHByb3RlY3QodGhpcyk7XG5cbiIpOwotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTtcblxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0xvY2tIb2xk
ZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpO1xuXG4iKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0
YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTtcbiIpOwogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJncztcbiIpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDYWxsYmFjay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY1LDcgKzY1LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoTm9Q
YXJhbQogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRl
KiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC04Miw3ICs4Miw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJh
Y2s6OmNhbGxiYWNrV2l0aENsYXNzMVAKIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJv
dGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgp
KTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTAwLDcgKzEwMCw3
IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlAKIAogICAgIFJlZlB0
cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmdzOwpAQCAtMTE5LDcgKzExOSw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0
aFN0cmluZ0wKIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTM3LDcgKzEzNyw3IEBAIGJvb2wgSlNUZXN0
Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aEJvb2xlYW4KIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFj
az4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTU3LDcg
KzE1Nyw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrUmVxdWlyZXNUaGkKIAogICAg
IFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1f
ZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciBhcmdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCShyZXZp
c2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzcsNyArMTc3LDcgQEAgYm9vbCBfTlBOX0ludm9rZURlZmF1bHQo
TlBQLCBOUE9iamVjdCogbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAg
ICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxs
IHRoZSBmdW5jdGlvbiBvYmplY3QuCiAgICAgICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmotPmlt
cDsKQEAgLTIyNSw3ICsyMjUsNyBAQCBib29sIF9OUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0
KiBvLCBOCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKICAgICAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iai0+aW1wLT5nZXQoZXhlYywgaWRl
bnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKICAgICAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
ZnVuY3Rpb24sIGNhbGxEYXRhKTsKQEAgLTI2NCw3ICsyNjQsNyBAQCBib29sIF9OUE5fRXZhbHVh
dGUoTlBQIGluc3RhbmNlLCBOUE9iamVjCiAgICAgICAgIFBsdWdpblZpZXc6OmtlZXBBbGl2ZShp
bnN0YW5jZSk7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIFN0
cmluZyBzY3JpcHRTdHJpbmcgPSBjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMpOwogICAgICAgICAK
ICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUocm9vdE9iamVjdC0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3JpcHRTdHJpbmcpLCBKU0M6OkpTVmFs
dWUoKSk7CkBAIC0yOTAsNyArMjkwLDcgQEAgYm9vbCBfTlBOX0dldFByb3BlcnR5KE5QUCwgTlBP
YmplY3QqIG8sIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGlj
X2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7CiAgICAgICAgIAotICAgICAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgICAgIGlmIChpLT5pc1N0
cmluZygpKQogICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlm
aWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwpAQCAtMzIyLDcgKzMyMiw3
IEBAIGJvb2wgX05QTl9TZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAg
ICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0
eU5hbWUpOwogCiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7CkBAIC0zNjMsNyArMzYzLDcg
QEAgYm9vbCBfTlBOX1JlbW92ZVByb3BlcnR5KE5QUCwgTlBPYmplY3QqIAogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIGlmIChpLT5pc1N0
cmluZygpKQogICAgICAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3Bl
cnR5KG9iai0+aW1wLCBleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5z
dHJpbmcoKSkpOwogICAgICAgICBlbHNlCkBAIC0zODYsNyArMzg2LDcgQEAgYm9vbCBfTlBOX0hh
c1Byb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIAogCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIElkZW50
aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsK
LSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7CiAgICAg
ICAgICAgICBib29sIHJlc3VsdCA9IG9iai0+aW1wLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlm
aWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKQEAgLTQxOCw3ICs0MTgsNyBAQCBib29sIF9OUE5fSGFzTWV0
aG9kKE5QUCwgTlBPYmplY3QqIG8sIE5QCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIEpTVmFsdWUgZnVuYyA9IG9i
ai0+aW1wLT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3Ry
aW5nKCkpKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJu
ICFmdW5jLmlzVW5kZWZpbmVkKCk7CkBAIC00NDcsNyArNDQ3LDcgQEAgYm9vbCBfTlBOX0VudW1l
cmF0ZShOUFAsIE5QT2JqZWN0KiBvLCBOUAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIFByb3BlcnR5
TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CiAKICAgICAgICAgb2JqLT5pbXAtPm1ldGhv
ZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMob2JqLT5pbXAsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwpAQCAtNDg0LDcgKzQ4NCw3IEBAIGJvb2wgX05Q
Tl9Db25zdHJ1Y3QoTlBQLCBOUE9iamVjdCogbywgY28KICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAK
ICAgICAgICAgLy8gQ2FsbCB0aGUgY29uc3RydWN0b3Igb2JqZWN0LgogICAgICAgICBKU1ZhbHVl
IGNvbnN0cnVjdG9yID0gb2JqLT5pbXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9j
X2NsYXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNz
LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19jbGFz
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJucHJ1bnRp
bWVfaW1wbC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvU2NvcGVDaGFpbi5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvSWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4K
ICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3Qu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC00Nyw3ICs0OCw3IEBAIEND
bGFzczo6Q0NsYXNzKE5QQ2xhc3MqIGFDbGFzcykKIAogQ0NsYXNzOjp+Q0NsYXNzKCkKIHsKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIC8vIEZJWE1FOiBTaG91
bGQgd2UgYWNxdWlyZSBhIEpTTG9jayBoZXJlPwogCiAgICAgZGVsZXRlQWxsVmFsdWVzKF9tZXRo
b2RzKTsKICAgICBfbWV0aG9kcy5jbGVhcigpOwpAQCAtOTEsNyArOTIsNyBAQCBNZXRob2RMaXN0
IENDbGFzczo6bWV0aG9kc05hbWVkKFByb3BlcnR5CiAgICAgaWYgKF9pc2EtPmhhc01ldGhvZCAm
JiBfaXNhLT5oYXNNZXRob2Qob2JqLCBpZGVudCkpewogICAgICAgICBNZXRob2QqIGFNZXRob2Qg
PSBuZXcgQ01ldGhvZChpZGVudCk7IC8vIGRlbGV0ZWQgaW4gdGhlIENDbGFzcyBkZXN0cnVjdG9y
CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhpbnN0LT5yb290T2JqZWN0KCktPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgX21ldGhvZHMuc2V0KG5h
bWUuaW1wbCgpLCBhTWV0aG9kKTsKICAgICAgICAgfQogICAgICAgICBtZXRob2RMaXN0LmFwcGVu
ZChhTWV0aG9kKTsKQEAgLTExNCw3ICsxMTUsNyBAQCBGaWVsZCogQ0NsYXNzOjpmaWVsZE5hbWVk
KFByb3BlcnR5TmFtZSBwCiAgICAgaWYgKF9pc2EtPmhhc1Byb3BlcnR5ICYmIF9pc2EtPmhhc1By
b3BlcnR5KG9iaiwgaWRlbnQpKXsKICAgICAgICAgYUZpZWxkID0gbmV3IENGaWVsZChpZGVudCk7
IC8vIGRlbGV0ZWQgaW4gdGhlIENDbGFzcyBkZXN0cnVjdG9yCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhpbnN0LT5yb290T2JqZWN0KCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxE
YXRhKCkpOwogICAgICAgICAgICAgX2ZpZWxkcy5zZXQobmFtZS5pbXBsKCksIGFGaWVsZCk7CiAg
ICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNw
cAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5j
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBDSW5zdGFuY2U6Om1v
dmVHbG9iYWxFeGNlcHRpb25Ub0V4ZQogICAgICAgICByZXR1cm47CiAKICAgICB7Ci0gICAgICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMs
IGdsb2JhbEV4Y2VwdGlvblN0cmluZygpKSk7CiAgICAgfQogCkBAIC0xODIsNyArMTgyLDcgQEAg
SlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdAogICAgIFZPSURfVE9fTlBW
QVJJQU5UKHJlc3VsdFZhcmlhbnQpOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICBBU1NFUlQoZ2xvYmFs
RXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAgICAgICByZXR2YWwgPSBfb2JqZWN0LT5f
Y2xhc3MtPmludm9rZShfb2JqZWN0LCBpZGVudCwgY0FyZ3MuZGF0YSgpLCBjb3VudCwgJnJlc3Vs
dFZhcmlhbnQpOwogICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7
CkBAIC0yMTcsNyArMjE3LDcgQEAgSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRo
b2QoRQogICAgIE5QVmFyaWFudCByZXN1bHRWYXJpYW50OwogICAgIFZPSURfVE9fTlBWQVJJQU5U
KHJlc3VsdFZhcmlhbnQpOwogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgQVNTRVJUKGdsb2JhbEV4Y2VwdGlv
blN0cmluZygpLmlzTnVsbCgpKTsKICAgICAgICAgcmV0dmFsID0gX29iamVjdC0+X2NsYXNzLT5p
bnZva2VEZWZhdWx0KF9vYmplY3QsIGNBcmdzLmRhdGEoKSwgY291bnQsICZyZXN1bHRWYXJpYW50
KTsKICAgICAgICAgbW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpAQCAtMjU2
LDcgKzI1Niw3IEBAIEpTVmFsdWUgQ0luc3RhbmNlOjppbnZva2VDb25zdHJ1Y3QoRXhlY1MKICAg
ICBOUFZhcmlhbnQgcmVzdWx0VmFyaWFudDsKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHRW
YXJpYW50KTsKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoZXhlYyk7CiAgICAgICAgIEFTU0VSVChnbG9iYWxFeGNlcHRpb25TdHJpbmco
KS5pc051bGwoKSk7CiAgICAgICAgIHJldHZhbCA9IF9vYmplY3QtPl9jbGFzcy0+Y29uc3RydWN0
KF9vYmplY3QsIGNBcmdzLmRhdGEoKSwgY291bnQsICZyZXN1bHRWYXJpYW50KTsKICAgICAgICAg
bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpAQCAtMzE1LDcgKzMxNSw3IEBA
IHZvaWQgQ0luc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGEKICAgICBOUElkZW50aWZp
ZXIqIGlkZW50aWZpZXJzOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0
aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAgICAgICBib29sIG9rID0gX29iamVjdC0+X2NsYXNz
LT5lbnVtZXJhdGUoX29iamVjdCwgJmlkZW50aWZpZXJzLCAmY291bnQpOwogICAgICAgICBtb3Zl
R2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvYy9jX3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9jL2NfcnVudGltZS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9jL2NfcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgSlNW
YWx1ZSBDRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdAogCiAgICAgICAgIGJvb2wgcmVz
dWx0OwogICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgICAgIHJlc3VsdCA9IG9iai0+X2Ns
YXNzLT5nZXRQcm9wZXJ0eShvYmosIF9maWVsZElkZW50aWZpZXIsICZwcm9wZXJ0eSk7CiAgICAg
ICAgICAgICBDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsK
ICAgICAgICAgfQpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIENGaWVsZDo6c2V0VmFsdWVUb0luc3Rh
bmNlKEV4ZWNTdGF0CiAgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIGFWYWx1
ZSwgJnZhcmlhbnQpOwogCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICAgICAgb2JqLT5f
Y2xhc3MtPnNldFByb3BlcnR5KG9iaiwgX2ZpZWxkSWRlbnRpZmllciwgJnZhcmlhbnQpOwogICAg
ICAgICAgICAgQ0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAkocmV2
aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbnZlcnRVVEY4
VG9VVEYxNldpdGhMYXRpCiAvLyBWYXJpYW50IHZhbHVlIG11c3QgYmUgcmVsZWFzZWQgd2l0aCBO
UFJlbGVhc2VWYXJpYW50VmFsdWUoKQogdm9pZCBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIE5QVmFyaWFudCogcmVzdWx0KQogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAKICAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0KTsKIApAQCAtMTA3LDcgKzEw
Nyw3IEBAIHZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRlKiAKIAogSlNWYWx1
ZSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE5QVmFyaWFu
dCogdmFyaWFudCwgUm9vdE9iamVjdCogcm9vdE9iamVjdCkKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IAogICAgIE5QVmFyaWFudFR5cGUgdHlwZSA9IHZhcmlhbnQtPnR5cGU7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCShyZXZpc2lvbiAxMjA5MjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjg0LDcgKzI4NCw3IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpjYWxsKGpzdHJpbmcg
bWV0aG8KICAgICAKICAgICAvLyBMb29rdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4KICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgCiAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKGV4ZWMsIEphdmFT
dHJpbmcobWV0aG9kTmFtZSkuaW1wbCgpKTsKICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gX2ltcC0+
Z2V0KGV4ZWMsIGlkZW50aWZpZXIpOwpAQCAtMzA3LDEyICszMDcsMTIgQEAgam9iamVjdCBKYXZh
SlNPYmplY3Q6OmV2YWwoanN0cmluZyBzY3JpcAogewogICAgIExPRyhMaXZlQ29ubmVjdCwgIkph
dmFKU09iamVjdDo6ZXZhbCBzY3JpcHQgPSAlcyIsIEphdmFTdHJpbmcoc2NyaXB0KS51dGY4KCkp
OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAKICAgICBS
b290T2JqZWN0KiByb290T2JqZWN0ID0gdGhpcy0+cm9vdE9iamVjdCgpOwogICAgIGlmICghcm9v
dE9iamVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhyb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAKICAgICByb290T2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxT
Y29wZUNoYWluKCksIG1ha2VTb3VyY2UoSmF2YVN0cmluZyhzY3JpcHQpLmltcGwoKSkpOwogICAg
IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIu
c3RvcCgpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpnZXRNZW1i
ZXIoanN0cmluZyAKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IF9pbXAtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVtYmVy
TmFtZSkuaW1wbCgpKSk7CiAKICAgICByZXR1cm4gY29udmVydFZhbHVlVG9KT2JqZWN0KHJlc3Vs
dCk7CkBAIC0zNDYsNyArMzQ2LDcgQEAgdm9pZCBKYXZhSlNPYmplY3Q6OnNldE1lbWJlcihqc3Ry
aW5nIG1lbQogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNs
b3Q7CiAgICAgX2ltcC0+bWV0aG9kVGFibGUoKS0+cHV0KF9pbXAsIGV4ZWMsIElkZW50aWZpZXIo
ZXhlYywgSmF2YVN0cmluZyhtZW1iZXJOYW1lKS5pbXBsKCkpLCBjb252ZXJ0Sk9iamVjdFRvVmFs
dWUoZXhlYywgdmFsdWUpLCBzbG90KTsKIH0KQEAgLTM2MSw3ICszNjEsNyBAQCB2b2lkIEphdmFK
U09iamVjdDo6cmVtb3ZlTWVtYmVyKGpzdHJpbmcgCiAgICAgICAgIHJldHVybjsKIAogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBfaW1wLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShf
aW1wLCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVtYmVyTmFtZSkuaW1wbCgp
KSk7CiB9CiAKQEAgLTM3Niw3ICszNzYsNyBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6Z2V0U2xv
dChqaW50IGluZGV4CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IF9pbXAtPmdldChleGVjLCBpbmRleCk7CiAKICAgICByZXR1cm4gY29udmVydFZhbHVlVG9K
T2JqZWN0KHJlc3VsdCk7CkBAIC0zOTIsNyArMzkyLDcgQEAgdm9pZCBKYXZhSlNPYmplY3Q6OnNl
dFNsb3QoamludCBpbmRleCwgagogICAgICAgICByZXR1cm47CiAKICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgX2ltcC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChfaW1wLCBleGVjLCAodW5z
aWduZWQpaW5kZXgsIGNvbnZlcnRKT2JqZWN0VG9WYWx1ZShleGVjLCB2YWx1ZSksIGZhbHNlKTsK
IH0KIApAQCAtNDA1LDkgKzQwNSw5IEBAIGpzdHJpbmcgSmF2YUpTT2JqZWN0Ojp0b1N0cmluZygp
IGNvbnN0CiAgICAgaWYgKCFyb290T2JqZWN0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNPYmplY3QgKnRoaXNPYmog
PSBjb25zdF9jYXN0PEpTT2JqZWN0Kj4oX2ltcCk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8anN0cmluZz4oY29udmVy
dFZhbHVlVG9KVmFsdWUoZXhlYywgcm9vdE9iamVjdCwgdGhpc09iaiwgSmF2YVR5cGVPYmplY3Qs
ICJqYXZhLmxhbmcuU3RyaW5nIikubCk7CiB9CkBAIC00NjMsMTMgKzQ2MywxMyBAQCBqbG9uZyBK
YXZhSlNPYmplY3Q6OmNyZWF0ZU5hdGl2ZShqbG9uZyBuCiAKIGpvYmplY3QgSmF2YUpTT2JqZWN0
Ojpjb252ZXJ0VmFsdWVUb0pPYmplY3QoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIAogICAgIFJvb3RPYmplY3QqIHJv
b3RPYmplY3QgPSB0aGlzLT5yb290T2JqZWN0KCk7CiAgICAgaWYgKCFyb290T2JqZWN0KQogICAg
ICAgICByZXR1cm4gMDsKIAorICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKICAgICBqb2JqZWN0IHJlc3VsdCA9
IDA7CiAgICAgCkBAIC01NTQsNyArNTU0LDcgQEAgSlNWYWx1ZSBKYXZhSlNPYmplY3Q6OmNvbnZl
cnRKT2JqZWN0VG9WYQogICAgIC8vIGZpZ3VyZSAyMi00LgogICAgIGpvYmplY3QgY2xhc3NPZklu
c3RhbmNlID0gY2FsbEpOSU1ldGhvZDxqb2JqZWN0Pih0aGVPYmplY3QsICJnZXRDbGFzcyIsICIo
KUxqYXZhL2xhbmcvQ2xhc3M7Iik7CiAgICAgaWYgKCFjbGFzc09mSW5zdGFuY2UpIHsKLSAgICAg
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHJldHVybiBKYXZhSW5zdGFuY2U6OmNyZWF0ZSh0aGVP
YmplY3QsIF9yb290T2JqZWN0KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKICAgICB9CiAK
QEAgLTU2Myw3ICs1NjMsNyBAQCBKU1ZhbHVlIEphdmFKU09iamVjdDo6Y29udmVydEpPYmplY3RU
b1ZhCiAgICAgLy8gcG9pbnRlciBhbmQgc3RvcmVzIGl0IGluIHRoaXMgb2JqZWN0LCBzbyB0aGF0
IGl0IGNhbiBiZSByZXRyaWV2ZWQgYmVsb3cuCiAgICAganN0cmluZyBjbGFzc05hbWUgPSAoanN0
cmluZyljYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGNsYXNzT2ZJbnN0YW5jZSwgImdldE5hbWUiLCAi
KClMamF2YS9sYW5nL1N0cmluZzsiKTsKICAgICBpZiAoIWNsYXNzTmFtZSB8fCAoc3RyY21wKEph
dmFTdHJpbmcoY2xhc3NOYW1lKS51dGY4KCksICJzdW4ucGx1Z2luLmphdmFzY3JpcHQud2Via2l0
LkpTT2JqZWN0IikgIT0gMCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHJldHVy
biBKYXZhSW5zdGFuY2U6OmNyZWF0ZSh0aGVPYmplY3QsIF9yb290T2JqZWN0KS0+Y3JlYXRlUnVu
dGltZU9iamVjdChleGVjKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvam5pX29iamMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9q
bmlfb2JqYy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2pu
aS9qbmlfb2JqYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBib29sIEpTQzo6
QmluZGluZ3M6OmRpc3BhdGNoSk5JQ2FsbChFeGVjCiAgICAgICAgIC8vIGltcGxlbWVudGVkIGlu
IFdlYkNvcmUgd2lsbCBndWFyYW50ZWUgdGhhdCBvbmx5IGFwcHJvcHJpYXRlIEphdmFTY3JpcHQK
ICAgICAgICAgLy8gY2FuIHJlZmVyZW5jZSB0aGUgYXBwbGV0LgogICAgICAgICB7Ci0gICAgICAg
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7
CiAgICAgICAgICAgICByZXN1bHQgPSBbdmlldyB3ZWJQbHVnSW5DYWxsSmF2YTpvYmogaXNTdGF0
aWM6aXNTdGF0aWMgcmV0dXJuVHlwZTpyZXR1cm5UeXBlIG1ldGhvZDptZXRob2RJRCBhcmd1bWVu
dHM6YXJncyBjYWxsaW5nVVJMOm5pbCBleGNlcHRpb25EZXNjcmlwdGlvbjomX2V4Y2VwdGlvbkRl
c2NyaXB0aW9uXTsKICAgICAgICAgfQogCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgSlNDOjpCaW5k
aW5nczo6ZGlzcGF0Y2hKTklDYWxsKEV4ZWMKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0lu
Q2FsbEphdmE6bWV0aG9kOnJldHVyblR5cGU6YXJndW1lbnRzOildKSB7Ci0gICAgICAgIEpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7CiAgICAgICAgIHJl
c3VsdCA9IFt2aWV3IHdlYlBsdWdJbkNhbGxKYXZhOm9iaiBtZXRob2Q6bWV0aG9kSUQgcmV0dXJu
VHlwZTpyZXR1cm5UeXBlIGFyZ3VtZW50czphcmdzXTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0
aWxpdHlQcml2YXRlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQs
NyArMTc0LDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VUb0phdgogCiBq
dmFsdWUgY29udmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBSb290T2JqZWN0KiBy
b290T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBKYXZhVHlwZSBqYXZhVHlwZSwgY29uc3QgY2hhciog
amF2YUNsYXNzTmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAganZhbHVlIHJlc3VsdDsKICAg
ICBtZW1zZXQoJnJlc3VsdCwgMCwgc2l6ZW9mKGp2YWx1ZSkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIEphdmFDbGFzczo6SmF2YUNsYXNzKGpvYmplY3Qg
YW5JbnN0YW5jZSkKICAgICAgICAgICAgIGpvYmplY3QgYUpGaWVsZCA9IGVudi0+R2V0T2JqZWN0
QXJyYXlFbGVtZW50KChqb2JqZWN0QXJyYXkpZmllbGRzLCBpKTsKICAgICAgICAgICAgIEphdmFG
aWVsZCogYUZpZWxkID0gbmV3IEphdmFGaWVsZChlbnYsIGFKRmllbGQpOyAvLyBkZWxldGVkIGlu
IHRoZSBKYXZhQ2xhc3MgZGVzdHJ1Y3RvcgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNMb2NrIGhlcmU/CiAgICAgICAgICAgICAgICAg
bV9maWVsZHMuc2V0KGFGaWVsZC0+bmFtZSgpLmltcGwoKSwgYUZpZWxkKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoYUpGaWVsZCk7CkBAIC03OSw3ICs3
OSw3IEBAIEphdmFDbGFzczo6SmF2YUNsYXNzKGpvYmplY3QgYW5JbnN0YW5jZSkKICAgICAgICAg
ICAgIEphdmFNZXRob2QqIGFNZXRob2QgPSBuZXcgSmF2YU1ldGhvZChlbnYsIGFKTWV0aG9kKTsg
Ly8gZGVsZXRlZCBpbiB0aGUgSmF2YUNsYXNzIGRlc3RydWN0b3IKICAgICAgICAgICAgIE1ldGhv
ZExpc3QqIG1ldGhvZExpc3Q7CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
U2hvdWxkIHdlIGFjcXVpcmUgYSBKU0xvY2sgaGVyZT8KIAogICAgICAgICAgICAgICAgIG1ldGhv
ZExpc3QgPSBtX21ldGhvZHMuZ2V0KGFNZXRob2QtPm5hbWUoKS5pbXBsKCkpOwogICAgICAgICAg
ICAgICAgIGlmICghbWV0aG9kTGlzdCkgewpAQCAtMTAwLDcgKzEwMCw3IEBAIEphdmFDbGFzczo6
fkphdmFDbGFzcygpCiB7CiAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDxjaGFyKj4obV9uYW1lKSk7
CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIC8vIEZJWE1F
OiBTaG91bGQgd2UgYWNxdWlyZSBhIEpTTG9jayBoZXJlPwogCiAgICAgZGVsZXRlQWxsVmFsdWVz
KG1fZmllbGRzKTsKICAgICBtX2ZpZWxkcy5jbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIENsYXNzKiBKYXZhSW5zdGFuY2U6Omdl
dENsYXNzKCkgY29uc3QKIAogSlNWYWx1ZSBKYXZhSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAganN0cmluZyBzdHJpbmdW
YWx1ZSA9IChqc3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVjdD4obV9pbnN0YW5jZS0+aW5zdGFu
Y2UoKSwgInRvU3RyaW5nIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7Iik7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhTWV0aG9kSlND
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBKYXZhTWV0aG9kOjp+SmF2YU1l
dGhvZCgpCiAvLyB3ZSBnZXQgJy4nIGJldHdlZW4gY29tcG9uZW50cyBmcm9tIHRoZSByZWZsZWN0
aW9uIEFQSS4KIHN0YXRpYyB2b2lkIGFwcGVuZENsYXNzTmFtZShTdHJpbmdCdWlsZGVyJiBidWls
ZGVyLCBjb25zdCBjaGFyKiBjbGFzc05hbWUpCiB7Ci0gICAgQVNTRVJUKEpTTG9jazo6bG9ja0Nv
dW50KCkgPiAwKTsKKyAgICBBU1NFUlQoSlNDOjpKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNl
KCkuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogCiAgICAgY2hhciog
YyA9IGZhc3RTdHJEdXAoY2xhc3NOYW1lKTsKIApAQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyB2
b2lkIGFwcGVuZENsYXNzTmFtZShTdHJpbmdCdWlsZGUKIGNvbnN0IGNoYXIqIEphdmFNZXRob2Q6
OnNpZ25hdHVyZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NpZ25hdHVyZSkgewotICAgICAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAvLyBGSVhNRTogU2hv
dWxkIHdlIGFjcXVpcmUgYSBKU0xvY2sgaGVyZT8KIAogICAgICAgICBTdHJpbmdCdWlsZGVyIHNp
Z25hdHVyZUJ1aWxkZXI7CiAgICAgICAgIHNpZ25hdHVyZUJ1aWxkZXIuYXBwZW5kKCcoJyk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlNDLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YVN0cmluZ0pTQy5oCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhU3Ry
aW5nSlNDLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgSmF2YVN0
cmluZ0pTQ19oCiAKICNpbmNsdWRlICJKTklVdGlsaXR5LmgiCisjaW5jbHVkZSAiSlNET01XaW5k
b3dCYXNlLmgiCiAjaW5jbHVkZSAiSmF2YUluc3RhbmNlSlNDLmgiCiAKICNpbmNsdWRlIDxydW50
aW1lL0pTTG9jay5oPgpAQCAtNTIsMjAgKzUzLDIwIEBAIHB1YmxpYzoKIAogICAgIEphdmFTdHJp
bmcoKQogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIG1faW1wbCA9IFVTdHJpbmcoKS5pbXBsKCk7CiAg
ICAgfQogCiAgICAgfkphdmFTdHJpbmcoKQogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIG1faW1wbCA9
IDA7CiAgICAgfQogCiAgICAgY29uc3QgY2hhciogdXRmOCgpIGNvbnN0CiAgICAgewogICAgICAg
ICBpZiAoIW1fdXRmOFN0cmluZy5kYXRhKCkpIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJD
b3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAg
IG1fdXRmOFN0cmluZyA9IFVTdHJpbmcobV9pbXBsKS51dGY4KCk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIG1fdXRmOFN0cmluZy5kYXRhKCk7CkBAIC03OSw3ICs4MCw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGludCBzaXplID0gZS0+R2V0U3RyaW5nTGVuZ3RoKHMpOwogICAgICAgICBjb25z
dCBqY2hhciogdWMgPSBnZXRVQ2hhcmFjdGVyc0Zyb21KU3RyaW5nSW5FbnYoZSwgcyk7CiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIG1faW1wbCA9IFVTdHJpbmcocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHVjKSwgc2l6ZSkuaW1wbCgpOwogICAgICAgICB9CiAg
ICAgICAgIHJlbGVhc2VVQ2hhcmFjdGVyc0ZvckpTdHJpbmdJbkVudihlLCBzLCB1Yyk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkyLDcgKzkyLDcgQEAgSlNPYmplY3QqIEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2Jq
ZWN0KAogICAgIGlmIChSdW50aW1lT2JqZWN0KiBleGlzdGluZ09iamVjdCA9IG1fcnVudGltZU9i
amVjdC5nZXQoKSkKICAgICAgICAgcmV0dXJuIGV4aXN0aW5nT2JqZWN0OwogCi0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICBSdW50aW1lT2JqZWN0KiBuZXdPYmplY3QgPSBuZXdSdW50aW1lT2JqZWN0KGV4ZWMp
OwogICAgIG1fcnVudGltZU9iamVjdCA9IFBhc3NXZWFrPFJ1bnRpbWVPYmplY3Q+KG5ld09iamVj
dCk7CiAgICAgbV9yb290T2JqZWN0LT5hZGRSdW50aW1lT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgbmV3T2JqZWN0KTsKQEAgLTEwMSw3ICsxMDEsNyBAQCBKU09iamVjdCogSW5zdGFuY2U6OmNy
ZWF0ZVJ1bnRpbWVPYmplY3QoCiAKIFJ1bnRpbWVPYmplY3QqIEluc3RhbmNlOjpuZXdSdW50aW1l
T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgLy8gRklYTUU6
IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUg
d3JvbmcgZ2xvYmFsIG9iamVjdAogICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQg
Z2xvYmFsIG9iamVjdCBmb3IgImkiLgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMv
b2JqY19pbnN0YW5jZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2Jq
Yy9vYmpjX2luc3RhbmNlLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3
IEBAIHZvaWQgT2JqY0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG8KICAgICB9CiAKICAg
ICBpZiAoIXNfZXhjZXB0aW9uRW52aXJvbm1lbnQgfHwgc19leGNlcHRpb25FbnZpcm9ubWVudCA9
PSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAg
ICAgICAgIHRocm93RXJyb3IoZXhlYywgc19leGNlcHRpb24pOwogICAgIH0KIApAQCAtMjM5LDcg
KzIzOSw3IEBAIEpTVmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VPYmpjTWV0aG9kKEUKIHsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgCi0gICAgSlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7IC8vIENhbid0IHB1
dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0
bHkuCisgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOyAvLyBDYW4n
dCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29y
cmVjdGx5LgogCiAgICAgc2V0R2xvYmFsRXhjZXB0aW9uKG5pbCk7CiAgICAgCkBAIC0zNTQsNyAr
MzU0LDcgQEAgSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRobwogewogICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQgdGhp
cyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5Lgor
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0
IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3Rs
eS4KICAgICBzZXRHbG9iYWxFeGNlcHRpb24obmlsKTsKICAgICAKIEB0cnkgewpAQCAtNDExLDcg
KzQxMSw3IEBAIGJvb2wgT2JqY0luc3RhbmNlOjpzZXRWYWx1ZU9mVW5kZWZpbmVkRmkKICAgICBp
ZiAoIVt0YXJnZXRPYmplY3QgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRWYWx1ZTpm
b3JVbmRlZmluZWRLZXk6KV0pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4n
dCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29y
cmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8g
Q2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBp
bmNvcnJlY3RseS4KIAogICAgIC8vIFRoaXMgY2hlY2sgaXMgbm90IHJlYWxseSBuZWNlc3Nhcnkg
YmVjYXVzZSBOU09iamVjdCBpbXBsZW1lbnRzCiAgICAgLy8gc2V0VmFsdWU6Zm9yVW5kZWZpbmVk
S2V5OiwgYW5kIHVuZm9ydHVuYXRlbHkgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KQEAgLTQ0
Myw3ICs0NDMsNyBAQCBKU1ZhbHVlIE9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZlVuZGVmaW5lCiAg
ICAgCiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gZ2V0T2JqZWN0KCk7CiAKLSAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3Qg
cHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJl
Y3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENh
bid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5j
b3JyZWN0bHkuCiAKICAgICAvLyBUaGlzIGNoZWNrIGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5IGJl
Y2F1c2UgTlNPYmplY3QgaW1wbGVtZW50cwogICAgIC8vIHZhbHVlRm9yVW5kZWZpbmVkS2V5Oiwg
YW5kIHVuZm9ydHVuYXRlbHkgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtOTIsMTkgKzkyLDE4IEBAIEpTVmFsdWUgT2JqY0ZpZWxkOjp2YWx1ZUZyb21JbnN0
YW5jZShFeGUKICAgICAKICAgICBpZCB0YXJnZXRPYmplY3QgPSAoc3RhdGljX2Nhc3Q8Y29uc3Qg
T2JqY0luc3RhbmNlKj4oaW5zdGFuY2UpKS0+Z2V0T2JqZWN0KCk7CiAKLSAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3Qg
cHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJl
Y3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENh
bid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5j
b3JyZWN0bHkuCiAKICAgICBAdHJ5IHsKICAgICAgICAgaWYgKGlkIG9iamNWYWx1ZSA9IFt0YXJn
ZXRPYmplY3QgdmFsdWVGb3JLZXk6KE5TU3RyaW5nICopX25hbWUuZ2V0KCldKQogICAgICAgICAg
ICAgcmVzdWx0ID0gY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJm9iamNWYWx1ZSwgT2Jq
Y09iamVjdFR5cGUsIGluc3RhbmNlLT5yb290T2JqZWN0KCkpOwogICAgICAgICB7Ci0gICAgICAg
ICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgICAgICBPYmpjSW5zdGFuY2U6Om1vdmVHbG9i
YWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKICAgICAgICAgfQogICAgIH0gQGNhdGNoKE5T
RXhjZXB0aW9uKiBsb2NhbEV4Y2VwdGlvbikgewotICAgICAgICBKU0xvY2s6OmxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
ICAgIHRocm93RXJyb3IoZXhlYywgW2xvY2FsRXhjZXB0aW9uIHJlYXNvbl0pOwotICAgICAgICBK
U0xvY2s6OnVubG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIH0KIAogICAgIC8vIFdv
cmsgYXJvdW5kIHByb2JsZW0gaW4gc29tZSB2ZXJzaW9ucyBvZiBHQ0Mgd2hlcmUgcmVzdWx0IGdl
dHMgbWFya2VkIHZvbGF0aWxlIGFuZApAQCAtMTI1LDE4ICsxMjQsMTcgQEAgdm9pZCBPYmpjRmll
bGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjUwogICAgIGlkIHRhcmdldE9iamVjdCA9IChzdGF0
aWNfY2FzdDxjb25zdCBPYmpjSW5zdGFuY2UqPihpbnN0YW5jZSkpLT5nZXRPYmplY3QoKTsKICAg
ICBpZCB2YWx1ZSA9IGNvbnZlcnRWYWx1ZVRvT2JqY09iamVjdChleGVjLCBhVmFsdWUpOwogCi0g
ICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVu
d2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBp
dCB1bndpbmRzIGluY29ycmVjdGx5LgogCiAgICAgQHRyeSB7CiAgICAgICAgIFt0YXJnZXRPYmpl
Y3Qgc2V0VmFsdWU6dmFsdWUgZm9yS2V5OihOU1N0cmluZyAqKV9uYW1lLmdldCgpXTsKICAgICAg
ICAgewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAgICAgT2JqY0luc3Rh
bmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgICAgIH0KICAg
ICB9IEBjYXRjaChOU0V4Y2VwdGlvbiogbG9jYWxFeGNlcHRpb24pIHsKLSAgICAgICAgSlNMb2Nr
Ojpsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFtsb2NhbEV4Y2VwdGlvbiByZWFzb25d
KTsKLSAgICAgICAgSlNMb2NrOjp1bmxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICB9
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW0J
KHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRp
bGl0eS5tbQkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBPYmpjVmFsdWUgY29udmVy
dFZhbHVlVG9PYmpjVmFsdWUoRXhlY1N0CiAKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAg
Y2FzZSBPYmpjT2JqZWN0VHlwZTogewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCAqb3JpZ2luR2xvYmFsT2JqZWN0
ID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpOwogICAgICAgICAgICAgUm9vdE9iamVjdCog
b3JpZ2luUm9vdE9iamVjdCA9IGZpbmRSb290T2JqZWN0KG9yaWdpbkdsb2JhbE9iamVjdCk7CkBA
IC0xNDYsNyArMTQ2LDcgQEAgT2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4ZWNT
dAogCiBKU1ZhbHVlIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgTlNT
dHJpbmcgKm5zc3RyaW5nKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCiAgICAgdW5pY2hhciAqY2hh
cnM7CiAgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IFtuc3N0cmluZyBsZW5ndGhdOwpAQCAtMTc4
LDcgKzE3OCw3IEBAIEpTVmFsdWUgY29udmVydE5TU3RyaW5nVG9TdHJpbmcoRXhlY1N0YXQKICov
CiBKU1ZhbHVlIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCog
YnVmZmVyLCBPYmpjVmFsdWVUeXBlIHR5cGUsIFJvb3RPYmplY3QqIHJvb3RPYmplY3QpCiB7Ci0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBPYmpj
T2JqZWN0VHlwZTogewpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2Uu
Y3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5z
dGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIFF0SW5zdGFuY2U6OlF0
SW5zdGFuY2UoUU9iamVjdCogbywgUGFzc1IKIAogUXRJbnN0YW5jZTo6flF0SW5zdGFuY2UoKQog
ewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBj
YWNoZWRJbnN0YW5jZXMucmVtb3ZlKG1faGFzaGtleSk7CiAKQEAgLTExOSw3ICsxMTksNyBAQCBR
dEluc3RhbmNlOjp+UXRJbnN0YW5jZSgpCiAKIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gUXRJbnN0
YW5jZTo6Z2V0UXRJbnN0YW5jZShRT2JqZWN0KiBvLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJv
b3RPYmplY3QsIFZhbHVlT3duZXJzaGlwIG93bmVyc2hpcCkKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgZm9yZWFjaCAoUXRJbnN0YW5jZSog
aW5zdGFuY2UsIGNhY2hlZEluc3RhbmNlcy52YWx1ZXMobykpCiAgICAgICAgIGlmIChpbnN0YW5j
ZS0+cm9vdE9iamVjdCgpID09IHJvb3RPYmplY3QpIHsKQEAgLTE4MCw3ICsxODAsNyBAQCBDbGFz
cyogUXRJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdAogCiBSdW50aW1lT2JqZWN0KiBRdEluc3Rh
bmNlOjpuZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
ICAgIG1fbWV0aG9kcy5jbGVhcigpOwogICAgIHJldHVybiBRdFJ1bnRpbWVPYmplY3Q6OmNyZWF0
ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRoaXMpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAkocmV2aXNpb24g
MTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MjAsNyArNDIwLDcgQEAgUnVudGltZU9iamVjdCogUXRQaXht
YXBJbnN0YW5jZTo6bmV3UnVudAogCiBKU09iamVjdCogUXRQaXhtYXBJbnN0YW5jZTo6Y3JlYXRl
UGl4bWFwUnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8Um9vdE9iamVj
dD4gcm9vdCwgY29uc3QgUVZhcmlhbnQmIGRhdGEpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBSZWZQ
dHI8UXRQaXhtYXBJbnN0YW5jZT4gaW5zdGFuY2UgPSBhZG9wdFJlZihuZXcgUXRQaXhtYXBJbnN0
YW5jZShyb290LCBkYXRhKSk7CiAgICAgcmV0dXJuIGluc3RhbmNlLT5jcmVhdGVSdW50aW1lT2Jq
ZWN0KGV4ZWMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNw
cAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRp
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNyArMjMwLDcgQEAgUVZhcmlhbnQgY29udmVy
dFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdAogICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKICAg
ICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTUmVhbFR5cGUgdHlwZSA9IHZhbHVlUmVhbFR5cGUo
ZXhlYywgdmFsdWUpOwogICAgIGlmIChoaW50ID09IFFNZXRhVHlwZTo6Vm9pZCkgewogICAgICAg
ICBzd2l0Y2godHlwZSkgewpAQCAtODI0LDcgKzgyNCw3IEBAIEpTVmFsdWUgY29udmVydFFWYXJp
YW50VG9WYWx1ZShFeGVjU3RhdGUKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIH0KIAot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAKICAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6OkJvb2wpCiAgICAgICAg
IHJldHVybiBqc0Jvb2xlYW4odmFyaWFudC50b0Jvb2woKSk7CkBAIC0xNDIwLDcgKzE0MjAsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjYWxsCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyBXZSBoYXZlIHRvIHBp
Y2sgYSBtZXRob2QgdGhhdCBtYXRjaGVzLi4KLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgUU9iamVjdCAq
b2JqID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7CiAgICAgaWYgKG9iaikgewpAQCAtMTU2
MSw3ICsxNTYxLDcgQEAgRW5jb2RlZEpTVmFsdWUgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZAog
ewogICAgIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhKiBkID0gc3RhdGljX2Nhc3Q8UXRS
dW50aW1lQ29ubmVjdGlvbk1ldGhvZCAqPihleGVjLT5jYWxsZWUoKSktPmRfZnVuYygpOwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIFFPYmplY3QqIHNlbmRlciA9IGQtPm1faW5zdGFuY2UtPmdldE9i
amVjdCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZV9xdDQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lX3F0
NC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9y
dW50aW1lX3F0NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw3ICsyMzAsNyBAQCBRVmFyaWFu
dCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgIHJldHVybiBRVmFyaWFu
dCgpOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNSZWFsVHlwZSB0eXBlID0gdmFsdWVS
ZWFsVHlwZShleGVjLCB2YWx1ZSk7CiAgICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpWb2lkKSB7
CiAgICAgICAgIHN3aXRjaCh0eXBlKSB7CkBAIC04MjQsNyArODI0LDcgQEAgSlNWYWx1ZSBjb252
ZXJ0UVZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0ZQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAg
ICAgfQogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6Qm9vbCkK
ICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih2YXJpYW50LnRvQm9vbCgpKTsKQEAgLTE0MjksNyAr
MTQyOSw3IEBAIEVuY29kZWRKU1ZhbHVlIFF0UnVudGltZU1ldGFNZXRob2Q6OmNhbGwKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIFdlIGhh
dmUgdG8gcGljayBhIG1ldGhvZCB0aGF0IG1hdGNoZXMuLgotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBR
T2JqZWN0ICpvYmogPSBkLT5tX2luc3RhbmNlLT5nZXRPYmplY3QoKTsKICAgICBpZiAob2JqKSB7
CkBAIC0xNTcwLDcgKzE1NzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBRdFJ1bnRpbWVDb25uZWN0aW9u
TWV0aG9kCiB7CiAgICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERhdGEqIGQgPSBzdGF0aWNf
Y2FzdDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kICo+KGV4ZWMtPmNhbGxlZSgpKS0+ZF9mdW5j
KCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgUU9iamVjdCogc2VuZGVyID0gZC0+bV9pbnN0YW5j
ZS0+Z2V0T2JqZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxD
YW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUxLDcgKzU1MSw3IEBAIHZvaWQg
SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmUKICAgICBtX2NvbnRleHRTdGF0ZVNh
dmVyID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIoKm1faW1hZ2VCdWZm
ZXItPmNvbnRleHQoKSkpOwogCiAjaWYgVVNFKEpTQykKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpKTsKICAgICBzaXplX3QgbnVtQnl0
ZXMgPSA0ICogbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIG1faW1hZ2VC
dWZmZXItPmludGVybmFsU2l6ZSgpLmhlaWdodCgpOwogICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+Z2xvYmFsRGF0YSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChudW1CeXRlcyk7
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJKHJl
dmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9hZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODEsOCArODEsOCBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6
bm90aWZ5RmluaXNoZWQoQ2FjCiAjaWYgVVNFKEpTQykKICAgICBpZiAoIWxvYWRFcnJvcikgewog
ICAgICAgICBpZiAoIWVsZW0tPmluRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgSlNDOjpKU0xv
Y2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgICAgICBKU0M6OkpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCk7CisgICAgICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEpOwog
ICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoY2FjaGVk
SW1hZ2UtPmVuY29kZWRTaXplKCkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNyArMjQw
LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpzdGFydCgpCiAgICAgewogICAgICAgICBQbHVnaW5WaWV3
OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKICNpZiBVU0UoSlNDKQotICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgICAgIHNl
dENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS51dGY4KCkuZGF0YSgpLCBtX2luc3Rh
bmNlLCBtX21vZGUsIG1fcGFyYW1Db3VudCwgbV9wYXJhbU5hbWVzLCBtX3BhcmFtVmFsdWVzLCBO
VUxMKTsKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnN0b3AoKQogICAgIG1f
aXNTdGFydGVkID0gZmFsc2U7CiAKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCkBAIC00NDYsNyArNDQ2LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVz
dChQbHVnaW5SZQogICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSkg
ewogICAgICAgICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OwogI2lmIFVTRShKU0MpCi0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgc2V0Q2Fs
bGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKQEAgLTczNiw3ICs3MzYsNyBA
QCBOUE9iamVjdCogUGx1Z2luVmlldzo6bnBPYmplY3QoKQogICAgIHsKICAgICAgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAjaWYgVVNFKEpTQykKLSAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICNlbmRpZgogICAgICAg
ICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2Jq
ZWN0LCAmb2JqZWN0KTsKQEAgLTE0OTIsNyArMTQ5Miw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cHJp
dmF0ZUJyb3dzaW5nU3RhdGVDaGEKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5W
aWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogI2VuZGlmCiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBOUEJv
b2wgdmFsdWUgPSBwcml2YXRlQnJvd3NpbmdFbmFibGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnku
Y3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVy
cnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNyArNDAz
LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlz
KTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2Fs
bGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKQEAgLTk3MCw3ICs5NzAsNyBAQCB2
b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAgICAgICAoKE5QU2V0V2lu
ZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5mbyktPndpbmRvd0dyb3VwID0gd2lu
ZG93LT53aW5kb3dHcm91cCgpOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZp
ZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
IHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAKICAgICAvLyBGSVhNRTogUGFzc2luZyB6b29tRmFj
dG9yIHRvIHNldHdpbmRvdyBtYWtlIHdpbmRvd2VkIHBsdWdpbiBzY2FsZSBpbmNvcnJlY3RseS4K
QEAgLTEyMjAsNyArMTIyMCw3IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAK
ICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7CiAgICAgICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2lu
KHRydWUpOwogICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0
YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7CiAgICAgICAgIHNl
dENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtMTMwMSw3ICsxMzAxLDcgQEAgdm9pZCBQbHVnaW5W
aWV3OjpnZXRXaW5kb3dJbmZvKFZlY3RvcjxQbAogICAgIHZvaWQqIHZhbFB0ciA9IDA7CiAKICAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsK
ICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBs
dWdpblNjcmVlbldpbmRvdywgJnZhbFB0cik7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcAko
cmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmll
d0VmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBQbHVnaW5WaWV3
OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQ
bHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQgPSBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlz
cGF0Y2hOUEV2ZW50KE5QRXZlbnQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAKICAgICBi
b29sIGFjY2VwdGVkID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNl
LCAmZXZlbnQpOwpAQCAtMjc2LDcgKzI3Niw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiAKIAogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtl
eWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKIAogICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1Z2luU3Rh
dHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQogICAgICAgICByZXR1cm47CkBAIC00MDYsNyArNDA2LDcg
QEAgc3RhdGljIHZvaWQgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZQogCiB2b2lkIFBsdWdp
blZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCiB7Ci0gICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgaWYgKCFtX2lzU3RhcnRlZCB8
fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTUzNSw3ICs1MzUsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZO
ZWVkZWQoKQogICAgIH0KIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRo
aXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRD
YWxsaW5nUGx1Z2luKHRydWUpOwogICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5k
b3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2Up
OwpAQCAtODQyLDcgKzg0Miw3IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAj
aWYgZGVmaW5lZChYUF9VTklYKQogICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0
dmFsdWUpIHsKICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7
Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAg
ICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRz
WEVtYmVkKTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW0JKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTQyNiw3ICs0MjYsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZO
ZWVkZWQoKQogICAgICAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCAtIG1fbnBXaW5k
b3cuY2xpcFJlY3QubGVmdCwgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gLSBtX25wV2luZG93
LmNsaXBSZWN0LnRvcCk7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0
aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0
Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2lu
ZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNl
KTsKQEAgLTc3Miw3ICs3NzIsNyBAQCBQb2ludCBQbHVnaW5WaWV3Ojptb3VzZVBvc0ZvclBsdWdp
bihNb3VzCiBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkK
IHsKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0
cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZl
bnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQv
UGx1Z2luVmlld1F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0
L1BsdWdpblZpZXdRdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzczLDcgKzM3Myw3
IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQKIAogICAgIFBsdWdp
blZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgc2V0Q2FsbGlu
Z1BsdWdpbih0cnVlKTsKICAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpAQCAtNjg3LDcgKzY4Nyw3IEBAIHZvaWQg
UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAKICAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldyh0aGlzKTsKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICNlbmRpZgogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1
ZSk7CiAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAm
bV9ucFdpbmRvdyk7CkBAIC05NDksNyArOTQ5LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9y
bVN0YXJ0KCkKICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7CiAg
ICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShK
U0MpCi0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAj
ZW5kaWYKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJl
ZCwgJm1fbmVlZHNYRW1iZWQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1
Z2luVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4v
UGx1Z2luVmlld1dpbi5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjYsNyArNTI2
LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICBz
aG91bGRQb3AgPSB0cnVlOwogICAgIH0KIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIGJvb2wgYWNjZXB0
ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50
KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAgLTY3Nyw3ICs2NzcsNyBAQCB2b2lk
IFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5CiAgICAgfSBlbHNlCiAgICAgICAg
IHJldHVybjsKIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKIH0KQEAgLTc0Nyw3ICs3NDcsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRs
ZU1vdXNlRXZlbnQoTW91c2VFCiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybjsKIAotICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgYmFjayBwb3J0aW5nIHRoZSBodHRwOi8vd2Via2l0Lm9yZy9iLzU4MTA4IGZpeCBoZXJlLgog
ICAgIGlmIChkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCiAgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOwpAQCAtODM1LDcgKzgzNSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBX
aW5kb3dSZWN0KGNvbnN0IEkKICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CiAKICAg
ICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgewotICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBzZXRDYWxsaW5n
UGx1Z2luKHRydWUpOwogICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93
KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxz
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1
cHBvcnQuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pz
L1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDggQEAg
bmFtZXNwYWNlIFdlYkNvcmVUZXN0U3VwcG9ydCB7CiAKIHZvaWQgaW5qZWN0SW50ZXJuYWxzT2Jq
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2xvYmFs
T2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gc2NyaXB0Q29udGV4dC0+aXNEb2N1bWVudCgpID8gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihz
Y3JpcHRDb250ZXh0KSA6IDA7CkBAIC00OSw4ICs0OSw4IEBAIHZvaWQgaW5qZWN0SW50ZXJuYWxz
T2JqZWN0KEpTQ29udGV4dFJlZiAKIAogdm9pZCByZXNldEludGVybmFsc09iamVjdChKU0NvbnRl
eHRSZWYgY29udGV4dCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAg
SW50ZXJuYWxzICogaW50ZXJuYWxzID0gdG9JbnRlcm5hbHMoZ2xvYmFsT2JqZWN0LT5nZXREaXJl
Y3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsIEludGVybmFsczo6aW50ZXJu
YWxzSWQpKSk7CiAgICAgaWYgKGludGVybmFscykgewpJbmRleDogU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTEsOCArODUxLDggQEAgdm9p
ZCBYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24oKQogICAgIC8vIG91dC4gQnV0IGl0IGlz
IHByb3RlY3RlZCBmcm9tIEdDIHdoaWxlIGxvYWRpbmcsIHNvIHRoaXMKICAgICAvLyBjYW4ndCBi
ZSByZWNvdXBlZCB1bnRpbCB0aGUgbG9hZCBpcyBkb25lLCBzbyBvbmx5CiAgICAgLy8gcmVwb3J0
IHRoZSBleHRyYSBjb3N0IGF0IHRoYXQgcG9pbnQuCi0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmdsb2JhbERhdGEoKTsKKyAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEpOwogICAgIGdsb2JhbERhdGEtPmhlYXAucmVwb3J0
RXh0cmFNZW1vcnlDb3N0KG1fcmVzcG9uc2VCdWlsZGVyLmxlbmd0aCgpICogMik7CiAjZW5kaWYK
IApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTItMDYtMjAgIE1hcmsg
SGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBKU0xvY2sgc2hv
dWxkIGJlIHBlci1KU0dsb2JhbERhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg5MTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ2hhbmdlZCBhbGwgc2l0ZXMgdGhhdCB1c2VkIEpTTG9jayB0byBpbnN0
ZWFkIHVzZSB0aGUgbmV3IEpTTG9ja0hvbGRlcgorICAgICAgICBhbmQgcGFzcyBpbiB0aGUgY29y
cmVjdCBKUyBjb250ZXh0IHRoYXQgdGhlIGNvZGUgaXMgYWJvdXQgdG8gaW50ZXJhY3Qgd2l0aCB0
aGF0IAorICAgICAgICBuZWVkcyBwcm90ZWN0aW9uLgorCisgICAgICAgICogU2hhcmVkL21hYy9X
ZWJNZW1vcnlTYW1wbGVyLm1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxl
cjo6c2FtcGxlV2ViS2l0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OmphdmFT
Y3JpcHRPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVw
b3J0RXhjZXB0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNO
UE9iamVjdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxNZXRob2QpOgor
ICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpjYWxsT2JqZWN0KToKKyAgICAgICAgKFdlYktp
dDo6SlNOUE9iamVjdDo6Y2FsbENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9i
amVjdDo6cHV0KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6ZGVsZXRlUHJvcGVydHkp
OgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6cHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TlBKU09iamVjdDo6aGFzTWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6
aW52b2tlKToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aW52b2tlRGVmYXVsdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6Omhhc1Byb3BlcnR5KToKKyAgICAgICAgKFdlYktp
dDo6TlBKU09iamVjdDo6Z2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0
OjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6OnJlbW92ZVByb3Bl
cnR5KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6ZW51bWVyYXRlKToKKyAgICAgICAg
KFdlYktpdDo6TlBKU09iamVjdDo6Y29uc3RydWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TlBSdW50aW1lT2JqZWN0TWFwOjpjb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAg
KFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZTo6anNXcmFwcGVyRm9yV29ybGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFt
ZTo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJ1bkph
dmFTY3JpcHRJbk1haW5GcmFtZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6Z2V0V2ViQ29yZVN0YXRpc3RpY3MpOgor
CiAyMDEyLTA2LTIxICBSeXVhbiBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KIAogICAg
ICAgICBbRUZMW1dLMl0gQWRkIFdLVmlld0VmbCBhbmQgV2ViS2l0MiBBUEkgT2JqZWN0IHRvIHJl
cHJlc2VudCBFdmFzX09iamVjdC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2Vi
TWVtb3J5U2FtcGxlci5tYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTE2LDcgKzExNiw3IEBAIFdlYk1lbW9yeVN0YXRpc3RpY3MgV2ViTWVtb3J5U2FtcGxl
cjo6c2EKICAgICB0b3RhbEJ5dGVzSW5Vc2UgKz0gZmFzdE1hbGxvY0J5dGVzSW5Vc2U7CiAgICAg
dG90YWxCeXRlc0NvbW1pdHRlZCArPSBmYXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQ7CiAgICAgCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNpemVfdCBqc2NI
ZWFwQnl0ZXNJblVzZSA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5z
aXplKCk7CiAgICAgc2l6ZV90IGpzY0hlYXBCeXRlc0NvbW1pdHRlZCA9IEpTRE9NV2luZG93Ojpj
b21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jYXBhY2l0eSgpOwogICAgIHRvdGFsQnl0ZXNJblVz
ZSArPSBqc2NIZWFwQnl0ZXNJblVzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIwLDcgKzkyMCw3IEBAIHZv
aWQgV2ViUHJvY2Vzczo6Z2V0V2ViQ29yZVN0YXRpc3RpY3ModWkKICAgICAKICAgICAvLyBHYXRo
ZXIgSmF2YVNjcmlwdCBzdGF0aXN0aWNzLgogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVy
cy5zZXQoIkphdmFTY3JpcHRPYmplY3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKSk7CiAgICAgICAgIGRhdGEuc3RhdGlzdGljc051
bWJlcnMuc2V0KCJKYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50IiwgSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmdsb2JhbE9iamVjdENvdW50KCkpOwogICAgICAgICBk
YXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiSmF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHNDb3Vu
dCIsIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmpl
Y3RDb3VudCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA5LDcgKzQwOSw3IEBAIHZvaWQgSW5qZWN0ZWRC
dW5kbGU6OmdhcmJhZ2VDb2xsZWN0SmF2YVMKIAogc2l6ZV90IEluamVjdGVkQnVuZGxlOjpqYXZh
U2NyaXB0T2JqZWN0c0NvdW50KCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+
aGVhcC5vYmplY3RDb3VudCgpOwogfQogCkBAIC00MTgsOCArNDE4LDggQEAgdm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6cmVwb3J0RXhjZXB0aW9uKEpTQwogICAgIGlmICghY29udGV4dCB8fCAhZXhjZXB0
aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZSA9IHRvSlMoY29udGV4
dCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlY1N0YXRlKTsKIAogICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgY29udGV4dCBoYXMgYSBET01XaW5kb3cgZ2xvYmFsIG9iamVjdCwgb3RoZXJ3aXNlIHRo
aXMgY29udGV4dCBkaWRuJ3Qgb3JpZ2luYXRlIGZyb20gYSBQYWdlLgogICAgIGlmICghdG9KU0RP
TVdpbmRvdyhleGVjU3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBP
YmplY3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYg
KzM3LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9PYmplY3RQcm90b3R5cGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lkZW50
aWZpZXJSZXAuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NV2luZG93QmFzZS5oPgogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
QEAgLTEyNSw3ICsxMjYsNyBAQCBKU1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxNZXRob2QoRXhlY1N0
YXRlCiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKICAgICAKICAgICB7Ci0gICAgICAg
IEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9ucE9i
amVjdC0+X2NsYXNzLT5pbnZva2UobV9ucE9iamVjdCwgbWV0aG9kTmFtZSwgYXJndW1lbnRzLmRh
dGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7CiAgICAgICAgIE5QUnVudGltZU9iamVjdE1h
cDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgIH0KQEAgLTE2NSw3
ICsxNjYsNyBAQCBKU0M6OkpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbE9iamVjdChKU0M6CiAgICAg
Vk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3Mt
Pmludm9rZURlZmF1bHQobV9ucE9iamVjdCwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3Vu
dCwgJnJlc3VsdCk7CiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2Vw
dGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgIH0KQEAgLTIwNSw3ICsyMDYsNyBAQCBKU1ZhbHVl
IEpTTlBPYmplY3Q6OmNhbGxDb25zdHJ1Y3RvcihFeGVjCiAgICAgVk9JRF9UT19OUFZBUklBTlQo
cmVzdWx0KTsKICAgICAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QobV9u
cE9iamVjdCwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7CiAgICAg
ICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4
ZWMpOwogICAgIH0KQEAgLTM0MCw3ICszNDEsNyBAQCB2b2lkIEpTTlBPYmplY3Q6OnB1dChKU0Nl
bGwqIGNlbGwsIEV4ZWNTCiAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3Ig
cHJvdGVjdG9yKHRoaXNPYmplY3QtPm1fb2JqZWN0TWFwKTsKIAogICAgIHsKLSAgICAgICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgdGhpc09iamVjdC0+bV9ucE9iamVjdC0+
X2NsYXNzLT5zZXRQcm9wZXJ0eSh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LCBucElkZW50aWZpZXIs
ICZ2YXJpYW50KTsKIAogICAgICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNl
cHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKQEAgLTM4MCw3ICszODEsNyBAQCBib29sIEpTTlBPYmpl
Y3Q6OmRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0CiAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVn
aW5Qcm90ZWN0b3IgcHJvdGVjdG9yKG1fb2JqZWN0TWFwKTsKIAogICAgIHsKLSAgICAgICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHRo
cm93IGFuIGV4Y2VwdGlvbiBpZiByZW1vdmVQcm9wZXJ0eSByZXR1cm5zIGZhbHNlPwogICAgICAg
ICBpZiAoIW1fbnBPYmplY3QtPl9jbGFzcy0+cmVtb3ZlUHJvcGVydHkobV9ucE9iamVjdCwgcHJv
cGVydHlOYW1lKSkKQEAgLTQxMyw3ICs0MTQsNyBAQCB2b2lkIEpTTlBPYmplY3Q6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPCiAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3Ig
cHJvdGVjdG9yKHRoaXNPYmplY3QtPm1fb2JqZWN0TWFwKTsKICAgICAKICAgICB7Ci0gICAgICAg
IEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3
ZSB0aHJvdyBhbiBleGNlcHRpb24gaWYgZW51bWVyYXRlIHJldHVybnMgZmFsc2U/CiAgICAgICAg
IGlmICghdGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5lbnVtZXJhdGUodGhpc09iamVj
dC0+bV9ucE9iamVjdCwgJmlkZW50aWZpZXJzLCAmaWRlbnRpZmllckNvdW50KSkKQEAgLTQ2MSw3
ICs0NjIsNyBAQCBKU1ZhbHVlIEpTTlBPYmplY3Q6OnByb3BlcnR5R2V0dGVyKEV4ZWNTCiAgICAg
CiAgICAgYm9vbCByZXR1cm5WYWx1ZTsKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAgICAgICAgIE5QSWRlbnRpZmllciBucElkZW50aWZpZXIgPSBucElkZW50aWZp
ZXJGcm9tSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IHRo
aXNPYmotPm1fbnBPYmplY3QtPl9jbGFzcy0+Z2V0UHJvcGVydHkodGhpc09iai0+bV9ucE9iamVj
dCwgbnBJZGVudGlmaWVyLCAmcmVzdWx0KTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcg
QEAgYm9vbCBOUEpTT2JqZWN0OjpoYXNNZXRob2QoTlBJZGVudGlmaWVyIAogICAgIGlmICghZXhl
YykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTVmFsdWUg
dmFsdWUgPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVw
KGV4ZWMsIGlkZW50aWZpZXJSZXApKTsgICAgCiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsK
QEAgLTExOSw3ICsxMTksNyBAQCBib29sIE5QSlNPYmplY3Q6Omludm9rZShOUElkZW50aWZpZXIg
bWV0CiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKIAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRl
bnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApKTsKICAgICByZXR1
cm4gaW52b2tlKGV4ZWMsIG1fb2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKSwgZnVuY3Rpb24sIGFy
Z3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVzdWx0KTsKQEAgLTEzMSw3ICsxMzEsNyBAQCBib29s
IE5QSlNPYmplY3Q6Omludm9rZURlZmF1bHQoY29uc3QgTlBWCiAgICAgaWYgKCFleGVjKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlv
biA9IG1fanNPYmplY3QuZ2V0KCk7CiAgICAgcmV0dXJuIGludm9rZShleGVjLCBtX29iamVjdE1h
cC0+Z2xvYmFsT2JqZWN0KCksIGZ1bmN0aW9uLCBhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIHJl
c3VsdCk7CkBAIC0xNDUsNyArMTQ1LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShO
UElkZW50aWZpZQogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAKICAgICBib29sIHJlc3VsdDsKICAgICBpZiAoaWRlbnRpZmllclJlcC0+
aXNTdHJpbmcoKSkKQEAgLTE2NSw3ICsxNjUsNyBAQCBib29sIE5QSlNPYmplY3Q6OmdldFByb3Bl
cnR5KE5QSWRlbnRpZmllCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUganNSZXN1bHQ7CiAgICAgaWYgKGlkZW50aWZpZXJS
ZXAtPmlzU3RyaW5nKCkpCiAgICAgICAgIGpzUmVzdWx0ID0gbV9qc09iamVjdC0+Z2V0KGV4ZWMs
IGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVjLCBpZGVudGlmaWVyUmVwKSk7CkBAIC0x
ODUsNyArMTg1LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpzZXRQcm9wZXJ0eShOUElkZW50aWZpZQog
ICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBtX29iamVjdE1hcC0+Y29udmVydE5QVmFyaWFudFRv
SlNWYWx1ZShleGVjLCBtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCksICp2YWx1ZSk7CiAgICAg
aWYgKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpIHsKQEAgLTIwNiw3ICsyMDYsNyBAQCBib29s
IE5QSlNPYmplY3Q6OnJlbW92ZVByb3BlcnR5KE5QSWRlbnRpCiAgICAgaWYgKCFleGVjKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmIChpZGVudGlmaWVyUmVw
LT5pc1N0cmluZygpKSB7CiAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IGlkZW50aWZp
ZXJGcm9tSWRlbnRpZmllclJlcChleGVjLCBpZGVudGlmaWVyUmVwKTsKICAgICAgICAgCkBAIC0y
MzUsNyArMjM1LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjplbnVtZXJhdGUoTlBJZGVudGlmaWVyKgog
ICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOwogICAgIG1fanNP
YmplY3QtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMobV9qc09iamVjdC5nZXQoKSwg
ZXhlYywgcHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CkBAIC0yNTcs
NyArMjU3LDcgQEAgYm9vbCBOUEpTT2JqZWN0Ojpjb25zdHJ1Y3QoY29uc3QgTlBWYXJpYQogICAg
IGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAg
IENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVj
dFR5cGUgPSBnZXRDb25zdHJ1Y3REYXRhKG1fanNPYmplY3QuZ2V0KCksIGNvbnN0cnVjdERhdGEp
OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVu
dGltZU9iamVjdE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAJKHJldmlzaW9uIDEyMDky
NikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRp
bWVPYmplY3RNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAgSlNWYWx1
ZSBOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnROUFZhcgogCiB2b2lkIE5QUnVudGltZU9iamVj
dE1hcDo6Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUsIE5QVmFyaWFudCYgdmFyaWFudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgVk9JRF9U
T19OUFZBUklBTlQodmFyaWFudCk7CiAgICAgCkBAIC0xODYsNyArMTg2LDcgQEAgYm9vbCBOUFJ1
bnRpbWVPYmplY3RNYXA6OmV2YWx1YXRlKE5QT2JqZQogCiAgICAgRXhlY1N0YXRlKiBleGVjID0g
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGdldE9yQ3JlYXRlSlNPYmplY3QoZ2xvYmFsT2JqZWN0LmdldCgpLCBu
cE9iamVjdCk7CiAKICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tl
ci5zdGFydCgpOwpAQCAtMjY2LDcgKzI2Niw3IEBAIHZvaWQgTlBSdW50aW1lT2JqZWN0TWFwOjpt
b3ZlR2xvYmFsRXhjZXAKICAgICAgICAgcmV0dXJuOwogCiAgICAgewotICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBzdHJpbmdU
b1VTdHJpbmcoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkpKSk7CiAgICAgfQogICAgIApJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZp
c2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDIsNyArNjQyLDcgQEAgSlNWYWx1ZVJlZiBXZWJG
cmFtZTo6anNXcmFwcGVyRm9yV29ybGQoSQogICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3Qg
PSBtX2NvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCh3b3JsZC0+Y29yZVdvcmxkKCkp
OwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICByZXR1cm4gdG9SZWYoZXhlYywgdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIG5vZGVIYW5kbGUtPmNvcmVOb2RlKCkpKTsKIH0KIApAQCAtNjU0LDcgKzY1NCw3IEBAIEpT
VmFsdWVSZWYgV2ViRnJhbWU6OmpzV3JhcHBlckZvcldvcmxkKEkKICAgICBKU0RPTVdpbmRvdyog
Z2xvYmFsT2JqZWN0ID0gbV9jb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3Qod29ybGQt
PmNvcmVXb3JsZCgpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCByYW5nZUhhbmRsZS0+Y29yZVJhbmdlKCkpKTsKIH0KIApAQCAtNjcx
LDcgKzY3MSw3IEBAIEpTVmFsdWVSZWYgV2ViRnJhbWU6OmNvbXB1dGVkU3R5bGVJbmNsdWQKIAog
ICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoc3RhdGljX2Nhc3Q8SlNFbGVtZW50Kj4odG9KUyhl
bGVtZW50KSktPmltcGwoKSwgdHJ1ZSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIHJldHVybiB0b1Jl
ZihleGVjLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3R5bGUuZ2V0KCkpKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2
aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODE1LDcgKzE4MTUsNyBAQCB2b2lkIFdlYlBhZ2U6
OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZShjCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gc2VyaWFsaXplZFJlc3VsdFZhbHVlOwogICAgIENvcmVJUEM6OkRhdGFSZWZlcmVuY2Ug
ZGF0YVJlZmVyZW5jZTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICBpZiAoSlNWYWx1ZSByZXN1bHRWYWx1ZSA9IG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUo
KS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoc2NyaXB0LCB0cnVlKS5qc1ZhbHVlKCkpIHsKICAg
ICAgICAgaWYgKChzZXJpYWxpemVkUmVzdWx0VmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZShtX21haW5GcmFtZS0+anNDb250ZXh0KCksIHRvUmVmKG1fbWFpbkZyYW1lLT5jb3Jl
RnJhbWUoKS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkt
Pmdsb2JhbEV4ZWMoKSwgcmVzdWx0VmFsdWUpLCAwKSkpCiAgICAgICAgICAgICBkYXRhUmVmZXJl
bmNlID0gc2VyaWFsaXplZFJlc3VsdFZhbHVlLT5kYXRhKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0wNi0y
MCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpT
TG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2Nr
IHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGlu
IHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFj
dCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBBcGkv
QmxhY2tCZXJyeUdsb2JhbC5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmNsZWFy
TWVtb3J5Q2FjaGVzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DbGllbnRFeHRlbnNpb24u
Y3BwOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BhZ2VQb3B1cEJsYWNrQmVycnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZVBvcHVwQmxhY2tCZXJyeTo6aW5zdGFsbERvbUZ1bmN0aW9u
KToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydC5jcHA6Cisg
ICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNp
dGVkSW5mbyk6CisKIDIwMTItMDYtMjEgIE1pa2UgRmVudG9uICA8bWlmZW50b25AcmltLmNvbT4K
IAogICAgICAgICBbQmxhY2tCZXJyeV0gSW5wdXQgbW9kZSBzaG91bGQgYWRhcHQgYXV0b21hdGlj
YWxseSB0byBzZXR0aW5ncyBjaGFuZ2VzCkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL0JsYWNrQmVycnlHbG9iYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNSw3ICsxMDUsMTAgQEAgdm9pZCBjbGVhck1lbW9yeUNhY2hlcygpCiAgICAg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OnVzZXJJbnRlcmZhY2VUaHJlYWRNZXNzYWdlQ2xpZW50KCkt
PmRpc3BhdGNoTWVzc2FnZShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Y3JlYXRlRnVuY3Rpb25DYWxs
TWVzc2FnZShjbGVhck1lbW9yeUNhY2hlc0luQ29tcG9zaXRpbmdUaHJlYWQpKTsKICNlbmRpZgog
Ci0gICAgY29sbGVjdEphdmFzY3JpcHRHYXJiYWdlTm93KCk7CisgICAgeworICAgICAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7Cisg
ICAgICAgIGNvbGxlY3RKYXZhc2NyaXB0R2FyYmFnZU5vdygpOworICAgIH0KIAogICAgIC8vIENs
ZWFuIGNhY2hlcyBhZnRlciBKUyBnYXJiYWdlIGNvbGxlY3Rpb24gYmVjYXVzZSBKUyBHQyBjYW4K
ICAgICAvLyBnZW5lcmF0ZSBtb3JlIGRlYWQgcmVzb3VyY2VzLgpJbmRleDogU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NsaWVudEV4dGVu
c2lvbi5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJDb3JlU3VwcG9ydC9DbGllbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCwx
MSArODQsMTEgQEAgc3RhdGljIEpTU3RhdGljVmFsdWUgY2xpZW50RXh0ZW5zaW9uU3RhdAogLy8g
RklYTUU6IFJldmlzaXQgdGhlIGNyZWF0aW9uIG9mIHRoaXMgY2xhc3MgYW5kIG1ha2Ugc3VyZSB0
aGlzIGlzIHRoZSBiZXN0IHdheSB0byBhcHByb2FjaCBpdC4KIHZvaWQgYXR0YWNoRXh0ZW5zaW9u
T2JqZWN0VG9GcmFtZShGcmFtZSogZnJhbWUsIFdlYlBhZ2VDbGllbnQqIGNsaWVudCkKIHsKLSAg
ICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLQogICAgIEpT
RE9NV2luZG93KiB3aW5kb3cgPSBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKG1haW5UaHJl
YWROb3JtYWxXb3JsZCgpKS0+d2luZG93KCk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9
IHdpbmRvdy0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CisKICAgICBKU0NvbnRleHRSZWYgc2NyaXB0Q3R4ID0gdG9SZWYoZXhlYyk7CiAKICAgICBKU0Ns
YXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tC
ZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVT
dXBwb3J0L1BhZ2VQb3B1cEJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiwxMyArMTIyLDEyIEBAIHN0YXRpYyBKU1N0YXRpY1Zh
bHVlIHBvcFVwRXh0ZW5zaW9uU3RhdGkKIAogdm9pZCBQYWdlUG9wdXBCbGFja0JlcnJ5OjppbnN0
YWxsRG9tRnVuY3Rpb24oRnJhbWUqIGZyYW1lKQogewotICAgIEpTQzo6SlNMb2NrIGxvY2soSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRv
SlNET01XaW5kb3coZnJhbWUsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBBU1NFUlQo
d2luZG93KTsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVj
KCk7CiAgICAgQVNTRVJUKGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IDo6dG9SZWYoZXhlYyk7CiAgICAgSlNPYmpl
Y3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpOwpJ
bmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRHVtcFJlbmRlclRy
ZWVTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
S2l0U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisr
KyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsOCArMTQxLDggQEAgdm9pZCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnQ6OnNjYWxlUGFnZUJ5KAogCiBKU1ZhbHVlUmVmIER1bXBSZW5kZXJUcmVl
U3VwcG9ydDo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9K
UyhleGVjLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA5MjYpCisr
KyBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
OSBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29t
PgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0
aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAg
ICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBh
Ym91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisK
KyAgICAgICAgKiBld2svZXdrX2ZyYW1lLmNwcDoKKyAgICAgICAgKGV3a19mcmFtZV9zY3JpcHRf
ZXhlY3V0ZSk6CisgICAgICAgICogZXdrL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3
X2pzX29iamVjdF9hZGQpOgorCiAyMDEyLTA2LTE5ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3Zp
bGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIENhbGxpbmcgbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKSBjYXVzZXMgYXNzZXJ0aW9uIGZhaWx1cmU6IG1fdmVyaWZpZXIuaXNTYWZlVG9Vc2Uo
KQpJbmRleDogU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NTUsOCArNDU1LDggQEAgY2hhciogZXdrX2ZyYW1lX3NjcmlwdF9leGVjdXRlKEV2YXNfT2Jq
ZQogICAgIGlmICghcmVzdWx0IHx8ICghcmVzdWx0LmlzQm9vbGVhbigpICYmICFyZXN1bHQuaXNT
dHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTQzo6
RXhlY1N0YXRlKiBleGVjID0gc21hcnREYXRhLT5mcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVj
dChXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIHJlc3VsdFN0cmluZyA9IFdlYkNvcmU6
OnVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAg
ICByZXR1cm4gc3RyZHVwKHJlc3VsdFN0cmluZy51dGY4KCkuZGF0YSgpKTsKICNlbHNlCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNDUsOCAr
NDA0NSw4IEBAIEVpbmFfQm9vbCBld2tfdmlld19qc19vYmplY3RfYWRkKEV2YXNfT2IKICAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgZmFsc2UpOwogICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIGZhbHNlKTsKIAot
ICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIFdl
YkNvcmU6OkpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KHByaXYtPm1haW5GcmFt
ZSwgV2ViQ29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2sod2luZG93LT5nbG9iYWxFeGVjKCkpOwogICAgIEpTQzo6QmluZGluZ3M6OlJvb3RP
YmplY3QqIHJvb3Q7CiAgICAgcm9vdCA9IHByaXYtPm1haW5GcmFtZS0+c2NyaXB0KCktPmJpbmRp
bmdSb290T2JqZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE3IEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVz
IHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAg
ICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlz
IGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHA6
CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdjQ291bnRKYXZhc2NyaXB0T2Jq
ZWN0cyk6CisKIDIwMTItMDYtMjEgIERhbmllbCBEcmFrZSAgPGRzZEBsYXB0b3Aub3JnPgogCiAg
ICAgICAgIFtHVEtdIEJhY2twb3J0IHJ1bi1maWxlLWNob29zZXIgdG8gV2ViS2l0MQpJbmRleDog
U291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MDAsNyArNjAwLDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGs6OmdjQ29sbGVjdAogCiB1bnNpZ25lZCBsb25nIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6
Z2NDb3VudEphdmFzY3JpcHRPYmplY3RzKCkKIHsKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpj
b21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2OCBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhu
ZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQg
YmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQg
dXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0
IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQg
CisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBET00vV2ViRE9NT3BlcmF0
aW9ucy5tbToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogTWlzYy9XZWJDb3JlU3RhdGlzdGlj
cy5tbToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdE9iamVjdHNDb3Vu
dF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0R2xvYmFsT2JqZWN0
c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRQcm90ZWN0
ZWRPYmplY3RzQ291bnRdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlw
dFByb3RlY3RlZEdsb2JhbE9iamVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlz
dGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50c10pOgorICAgICAgICAoK1tX
ZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50c10pOgorICAgICAgICAo
K1tXZWJDb3JlU3RhdGlzdGljcyBzaG91bGRQcmludEV4Y2VwdGlvbnNdKToKKyAgICAgICAgKCtb
V2ViQ29yZVN0YXRpc3RpY3Mgc2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zOl0pOgorICAgICAgICAo
K1tXZWJDb3JlU3RhdGlzdGljcyBtZW1vcnlTdGF0aXN0aWNzXSk6CisgICAgICAgICgrW1dlYkNv
cmVTdGF0aXN0aWNzIGphdmFTY3JpcHRSZWZlcmVuY2VkT2JqZWN0c0NvdW50XSk6CisgICAgICAg
ICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAg
ICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YXRlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UpOgorICAgICAg
ICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZURlZmF1bHQpOgor
ICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNvbnN0cnVjdCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvcGVy
dHkpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldFBy
b3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpy
ZW1vdmVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6aGFzTWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjplbnVtZXJhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6OmFkZFZhbHVlVG9BcnJheSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKToKKyAgICAg
ICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tOgorICAgICAgICAoV2ViTmV0
c2NhcGVQbHVnaW5TdHJlYW06OndhbnRzQWxsU3RyZWFtcyk6CisgICAgICAgICogUGx1Z2lucy9X
ZWJOZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmll
dyBzZW5kRXZlbnQ6aXNEcmF3UmVjdDpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5W
aWV3IHByaXZhdGVCcm93c2luZ01vZGVEaWRDaGFuZ2VdKToKKyAgICAgICAgKC1bV2ViTmV0c2Nh
cGVQbHVnaW5WaWV3IHNldFdpbmRvd0lmTmVjZXNzYXJ5XSk6CisgICAgICAgICgtW1dlYk5ldHNj
YXBlUGx1Z2luVmlldyBjcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZWN0XSk6CisgICAgICAgICgt
W1dlYk5ldHNjYXBlUGx1Z2luVmlldyBnZXRGb3JtVmFsdWU6XSk6CisgICAgICAgICgtW1dlYk5l
dHNjYXBlUGx1Z2luVmlldyBldmFsdWF0ZUphdmFTY3JpcHRQbHVnaW5SZXF1ZXN0Ol0pOgorICAg
ICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgd2ViRnJhbWU6ZGlkRmluaXNoTG9hZFdpdGhS
ZWFzb246XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBsb2FkUGx1Z2luUmVx
dWVzdDpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IF9wcmludGVkUGx1Z2lu
Qml0bWFwXSk6CisgICAgICAgICogUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tOgorICAg
ICAgICAoK1tXZWJQbHVnaW5Db250cm9sbGVyIHBsdWdJblZpZXdXaXRoQXJndW1lbnRzOmZyb21Q
bHVnaW5QYWNrYWdlOl0pOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIHN0b3BPbmVQ
bHVnaW46XSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgZGVzdHJveU9uZVBsdWdp
bjpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxlciBzdGFydEFsbFBsdWdpbnNdKToK
KyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxlciBhZGRQbHVnaW46XSk6CisgICAgICAgICog
V2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3N0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOmZvcmNlVXNlckdlc3R1cmU6XSk6CisgICAgICAgICgt
W1dlYkZyYW1lIF9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzp3aXRoR2xv
YmFsT2JqZWN0OmluU2NyaXB0V29ybGQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJTY3JpcHRE
ZWJ1Z0RlbGVnYXRlLm1tOgorICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgc2NvcGVDaGFp
bl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgZXZhbHVhdGVXZWJTY3JpcHQ6XSk6
CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoK1tXZWJWaWV3IF9yZXBv
cnRFeGNlcHRpb246aW5Db250ZXh0Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IGFlRGVzY0J5RXZh
bHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOl0pOgorICAgICAgICAoLVtXZWJWaWV3IF9jb21w
dXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm86Zm9yRWxlbWVudDpdKToKKwogMjAxMi0wNi0y
MCAgR2FycmV0IEtlbGx5ICA8Z2RrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNb3ZpbmcgY29v
a2llRW5hYmxlZC9zZXRDb29raWVFbmFibGVkIGZyb20gUGFnZSB0byBTZXR0aW5ncy4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNjcsOCArNjcsOSBAQCArIChET01FbGVtZW50ICopX0RPTUVsZW1lbnRGcm9t
SlNDb250ZXh0CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIHJldHVybiBraXQodG9FbGVtZW50
KHRvSlModG9KUyhjb250ZXh0KSwgdmFsdWUpKSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gdG9K
Uyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICByZXR1cm4ga2l0
KHRvRWxlbWVudCh0b0pTKGV4ZWMsIHZhbHVlKSkpOwogfQogCiAtIChOU1N0cmluZyAqKV9tYXJr
ZXJUZXh0Rm9yTGlzdEl0ZW0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0
YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3Jl
U3RhdGlzdGljcy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlz
Yy9XZWJDb3JlU3RhdGlzdGljcy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTgsMzEgKzU4LDMxIEBA
ICsgKE5TQXJyYXkgKilzdGF0aXN0aWNzCiAKICsgKHNpemVfdClqYXZhU2NyaXB0T2JqZWN0c0Nv
dW50CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHJl
dHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQo
KTsKIH0KIAogKyAoc2l6ZV90KWphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOwogfQog
CiArIChzaXplX3QpamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHNDb3VudAogewotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCk7CiB9CiAK
ICsgKHNpemVfdClqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50CiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291
bnQoKTsKIH0KIAogKyAoTlNDb3VudGVkU2V0ICopamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5
cGVDb3VudHMKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAg
ICAgCiAgICAgTlNDb3VudGVkU2V0ICpyZXN1bHQgPSBbTlNDb3VudGVkU2V0IHNldF07CiAKQEAg
LTk3LDcgKzk3LDcgQEAgKyAoTlNDb3VudGVkU2V0ICopamF2YVNjcmlwdFByb3RlY3RlZE9iagog
CiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50cwogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAKICAgICBOU0NvdW50ZWRT
ZXQgKnJlc3VsdCA9IFtOU0NvdW50ZWRTZXQgc2V0XTsKIApAQCAtMTY3LDEzICsxNjcsMTMgQEAg
KyAoc2l6ZV90KWdseXBoUGFnZUNvdW50CiAKICsgKEJPT0wpc2hvdWxkUHJpbnRFeGNlcHRpb25z
CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVy
biBDb25zb2xlOjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKTsKIH0KIAogKyAodm9pZClzZXRTaG91
bGRQcmludEV4Y2VwdGlvbnM6KEJPT0wpcHJpbnQKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgQ29uc29sZTo6c2V0U2hvdWxkUHJpbnRFeGNlcHRpb25z
KHByaW50KTsKIH0KIApAQCAtMjAxLDcgKzIwMSw3IEBAICsgKE5TRGljdGlvbmFyeSAqKW1lbW9y
eVN0YXRpc3RpY3MKIHsKICAgICBXVEY6OkZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NT
dGF0aXN0aWNzID0gV1RGOjpmYXN0TWFsbG9jU3RhdGlzdGljcygpOwogICAgIAotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzaXplX3QgaGVhcFNpemUgPSBK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuc2l6ZSgpOwogICAgIHNpemVf
dCBoZWFwRnJlZSA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jYXBh
Y2l0eSgpIC0gaGVhcFNpemU7CiAgICAgR2xvYmFsTWVtb3J5U3RhdGlzdGljcyBnbG9iYWxNZW1v
cnlTdGF0cyA9IGdsb2JhbE1lbW9yeVN0YXRpc3RpY3MoKTsKQEAgLTI0NSw3ICsyNDUsNyBAQCAr
IChzaXplX3QpamF2YVNjcmlwdE5vR0NBbGxvd2VkT2JqZWN0c0NvCiAKICsgKHNpemVfdClqYXZh
U2NyaXB0UmVmZXJlbmNlZE9iamVjdHNDb3VudAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQko
cmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2Fw
ZVBsdWdpblN0cmVhbS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzY4LDcgKzM2OCw3IEBAIGJvb2wg
V2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OndhbnRzQWxsU3QKICAgICBOUEVycm9yIGVycm9yOwog
ICAgIHsKICAgICAgICAgUGx1Z2luU3RvcERlZmVycmVyIGRlZmVycmVyKG1fcGx1Z2luVmlldy5n
ZXQoKSk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CiAgICAgICAgIGVycm9yID0gbV9wbHVnaW5GdW5jcy0+Z2V0dmFsdWUobV9wbHVnaW4sIE5QUFZw
bHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zLCAmdmFsdWUpOwogICAgIH0KICAgICBpZiAoZXJy
b3IgIT0gTlBFUlJfTk9fRVJST1IpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dl
Yk5ldHNjYXBlUGx1Z2luVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291
cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTY2OSw3ICs2NjksNyBAQCAtIChCT09MKXNlbmRFdmVudDoodm9pZCopZXZlbnQg
aXNEcmF3UmVjCiAgICAgLy8gU2V0IHRoZSBwbHVnaW5BbGxvd1BvcHVwIGZsYWcuCiAgICAgQVNT
RVJUKF9ldmVudEhhbmRsZXIpOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVy
ZUluZGljYXRvcihfZXZlbnRIYW5kbGVyLT5jdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlKCkgPyBE
ZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDogUG9zc2libHlQcm9jZXNzaW5nVXNlckdl
c3R1cmUpOwogICAgICAgICBhY2NlcHRlZEV2ZW50ID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBs
dWdpbkZ1bmNzXS0+ZXZlbnQocGx1Z2luLCBldmVudCk7CiAgICAgfQpAQCAtODUwLDcgKzg1MCw3
IEBAIC0gKHZvaWQpcHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5nZQogCiAgICAgW3NlbGYgd2ls
bENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBpZiAoW19wbHVnaW5QYWNrYWdlLmdldCgp
IHBsdWdpbkZ1bmNzXS0+c2V0dmFsdWUpCiAgICAgICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0
KCkgcGx1Z2luRnVuY3NdLT5zZXR2YWx1ZShwbHVnaW4sIE5QTlZwcml2YXRlTW9kZUJvb2wsICZ2
YWx1ZSk7CiAgICAgfQpAQCAtOTkxLDcgKzk5MSw3IEBAIC0gKHZvaWQpc2V0V2luZG93SWZOZWNl
c3NhcnkKICAgICAgICAgaW5TZXRXaW5kb3cgPSBZRVM7ICAgICAgICAKICAgICAgICAgW3NlbGYg
d2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgbnBFcnIg
PSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5zZXR3aW5kb3cocGx1Z2luLCAm
d2luZG93KTsKICAgICAgICAgfQogICAgICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25d
OwpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAgLSAoTlBPYmplY3QgKiljcmVhdGVQbHVnaW5TY3JpcHRh
YmxlT2JqZQogICAgIE5QRXJyb3IgZXJyb3I7CiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5j
dGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOwogICAgICAgICBlcnJvciA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5j
c10tPmdldHZhbHVlKHBsdWdpbiwgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwgJnZhbHVl
KTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTE0NjMsNyAr
MTQ2Myw3IEBAIC0gKEJPT0wpZ2V0Rm9ybVZhbHVlOihOU1N0cmluZyAqKil2YWx1ZQogICAgIE5Q
RXJyb3IgZXJyb3I7CiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewot
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAg
ICBlcnJvciA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdldHZhbHVlKHBs
dWdpbiwgTlBQVmZvcm1WYWx1ZSwgJmJ1ZmZlcik7CiAgICAgfQogICAgIFtzZWxmIGRpZENhbGxQ
bHVnSW5GdW5jdGlvbl07CkBAIC0xNTk1LDcgKzE1OTUsNyBAQCAtICh2b2lkKWV2YWx1YXRlSmF2
YVNjcmlwdFBsdWdpblJlcXVlc3Q6CiAgICAgICAgIGlmIChbSlNQbHVnaW5SZXF1ZXN0IHNlbmRO
b3RpZmljYXRpb25dKSB7CiAgICAgICAgICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9u
XTsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICAgICAgW19wbHVnaW5QYWNr
YWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJsbm90aWZ5KHBsdWdpbiwgW1VSTCBfd2ViX1VSTENT
dHJpbmddLCBOUFJFU19ET05FLCBbSlNQbHVnaW5SZXF1ZXN0IG5vdGlmeURhdGFdKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0x
NjI3LDcgKzE2MjcsNyBAQCAtICh2b2lkKXdlYkZyYW1lOihXZWJGcmFtZSAqKXdlYkZyYW1lIGRp
CiAgICAgICAgIAogICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAg
W19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJsbm90aWZ5KHBsdWdpbiwgW1tb
cGx1Z2luUmVxdWVzdCByZXF1ZXN0XSBVUkxdIF93ZWJfVVJMQ1N0cmluZ10sIHJlYXNvbiwgW3Bs
dWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0lu
RnVuY3Rpb25dOwpAQCAtMTY3MSw3ICsxNjcxLDcgQEAgLSAodm9pZClsb2FkUGx1Z2luUmVxdWVz
dDooV2ViUGx1Z2luUmVxdQogICAgICAgICAgICAgICAgIGlmIChbcGx1Z2luUmVxdWVzdCBzZW5k
Tm90aWZpY2F0aW9uXSkgewogICAgICAgICAgICAgICAgICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJ
bkZ1bmN0aW9uXTsKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2lu
RnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbW1twbHVnaW5SZXF1ZXN0IHJlcXVlc3RdIFVSTF0g
X3dlYl9VUkxDU3RyaW5nXSwgTlBFUlJfR0VORVJJQ19FUlJPUiwgW3BsdWdpblJlcXVlc3Qgbm90
aWZ5RGF0YV0pOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFtz
ZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0yNDcxLDcgKzI0NzEsNyBAQCAtIChOU0Jp
dG1hcEltYWdlUmVwICopX3ByaW50ZWRQbHVnaW5CaXRtCiAgICAgLy8gVGVsbCB0aGUgcGx1Z2lu
IHRvIHByaW50IGludG8gdGhlIEdXb3JsZAogICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rp
b25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+cHJpbnQo
cGx1Z2luLCAmbnBQcmludCk7CiAgICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlv
bl07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250
cm9sbGVyLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5z
L1dlYlBsdWdpbkNvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTk2LDEwICs5NiwxMCBA
QCArIChOU1ZpZXcgKilwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czooTlNECiAgICAgTlNWaWV3ICp2
aWV3ID0gbmlsOwogCiAgICAgaWYgKFt2aWV3RmFjdG9yeSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHBsdWdJblZpZXdXaXRoQXJndW1lbnRzOildKSB7Ci0gICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHZpZXcgPSBbdmlld0ZhY3Rv
cnkgcGx1Z0luVmlld1dpdGhBcmd1bWVudHM6YXJndW1lbnRzXTsKICAgICB9IGVsc2UgaWYgKFt2
aWV3RmFjdG9yeSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpblZpZXdXaXRoQXJn
dW1lbnRzOildKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgICAgIHZpZXcgPSBbdmlld0ZhY3RvcnkgcGx1Z2luVmlld1dpdGhBcmd1bWVu
dHM6YXJndW1lbnRzXTsKICAgICB9CiAgICAgCkBAIC0xNDksMTAgKzE0OSwxMCBAQCAtICh2b2lk
KWRlYWxsb2MKIC0gKHZvaWQpc3RvcE9uZVBsdWdpbjooTlNWaWV3ICopdmlldwogewogICAgIGlm
IChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJblN0b3ApXSkgewot
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAg
ICBbdmlldyB3ZWJQbHVnSW5TdG9wXTsKICAgICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luU3RvcCldKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIFt2aWV3IHBsdWdpblN0b3BdOwog
ICAgIH0KIH0KQEAgLTE2MCwxMCArMTYwLDEwIEBAIC0gKHZvaWQpc3RvcE9uZVBsdWdpbjooTlNW
aWV3ICopdmlldwogLSAodm9pZClkZXN0cm95T25lUGx1Z2luOihOU1ZpZXcgKil2aWV3CiB7CiAg
ICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luRGVzdHJv
eSldKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CiAgICAgICAgIFt2aWV3IHdlYlBsdWdJbkRlc3Ryb3ldOwogICAgIH0gZWxzZSBpZiAoW3ZpZXcg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5EZXN0cm95KV0pIHsKLSAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgW3ZpZXcg
cGx1Z2luRGVzdHJveV07CiAgICAgfQogfQpAQCAtMTgwLDEwICsxODAsMTAgQEAgLSAodm9pZClz
dGFydEFsbFBsdWdpbnMKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAg
ICAgICAgaWQgYVZpZXcgPSBbX3ZpZXdzIG9iamVjdEF0SW5kZXg6aV07CiAgICAgICAgIGlmIChb
YVZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5TdGFydCldKSB7Ci0g
ICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAgICAgICAgIFthVmlldyB3ZWJQbHVnSW5TdGFydF07CiAgICAgICAgIH0gZWxzZSBpZiAo
W2FWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luU3RhcnQpXSkgewotICAg
ICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAg
ICAgICAgICAgICBbYVZpZXcgcGx1Z2luU3RhcnRdOwogICAgICAgICB9CiAgICAgfQpAQCAtMjUy
LDEwICsyNTIsMTAgQEAgLSAodm9pZClhZGRQbHVnaW46KE5TVmlldyAqKXZpZXcKIAogICAgICAg
ICBMT0coUGx1Z2lucywgImluaXRpYWxpemluZyBwbHVnLWluICVAIiwgdmlldyk7CiAgICAgICAg
IGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJbkluaXRpYWxp
emUpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAgICAgICAgICAgICBbdmlldyB3ZWJQbHVnSW5Jbml0aWFsaXplXTsKICAgICAg
ICAgfSBlbHNlIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpbklu
aXRpYWxpemUpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25K
U0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBbdmlldyBwbHVnaW5Jbml0aWFsaXplXTsKICAg
ICAgICAgfQogCkBAIC0yNjUsMTUgKzI2NSwxNSBAQCAtICh2b2lkKWFkZFBsdWdpbjooTlNWaWV3
ICopdmlldwogICAgICAgICBpZiAoX3N0YXJ0ZWQpIHsKICAgICAgICAgICAgIExPRyhQbHVnaW5z
LCAic3RhcnRpbmcgcGx1Zy1pbiAlQCIsIHZpZXcpOwogICAgICAgICAgICAgaWYgKFt2aWV3IHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luU3RhcnQpXSkgewotICAgICAgICAg
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAgICAgICAgICAgICBbdmlldyB3ZWJQbHVnSW5TdGFydF07CiAgICAgICAgICAgICB9IGVs
c2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luU3RhcnQpXSkg
ewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICAgICAgICAgICAgICAgICBbdmlldyBwbHVnaW5TdGFydF07CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChbdmlldyByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKHNldENvbnRhaW5pbmdXaW5kb3c6KV0pIHsKLSAgICAgICAgICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAg
ICAgICAgICAgICAgW3ZpZXcgc2V0Q29udGFpbmluZ1dpbmRvdzpbX2RvY3VtZW50VmlldyB3aW5k
b3ddXTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC04NjcsOCArODY3LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1
YQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2so
cGx1Z2luV29ybGQoKS0+Z2xvYmFsRGF0YSgpKTsKICAgICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+
IGdsb2JhbE9iamVjdCgqcGx1Z2luV29ybGQoKS0+Z2xvYmFsRGF0YSgpLCBmcmFtZS0+c2NyaXB0
KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0g
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKQEAgLTkwNCw3ICs5MDMsNyBAQCBib29sIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVj
dChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNWYWx1
ZSBmdW5jdGlvbiA9IG9iamVjdC0+Z2V0KGV4ZWMsIG1ldGhvZE5hbWUpOwogICAgIENhbGxEYXRh
IGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24s
IGNhbGxEYXRhKTsKQEAgLTkzNyw3ICs5MzYsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6aW52b2tlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+
Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7ICAg
IAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2Fs
bERhdGEob2JqZWN0LCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9u
ZSkKQEAgLTk2OSw3ICs5NjgsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
Y29uc3RyCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhl
YygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CiAg
ICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5n
ZXRDb25zdHJ1Y3REYXRhKG9iamVjdCwgY29uc3RydWN0RGF0YSk7CkBAIC0xMDAyLDcgKzEwMDEs
NyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkt
Pmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOyAgICAKICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlO
YW1lKTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJl
c3VsdExlbmd0aCk7CkBAIC0xMDIzLDcgKzEwMjIsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6Z2V0UHJvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgp
KS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICBKU1ZhbHVlIHZhbHVl
ID0gb2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAKICAgICBtYXJzaGFsVmFs
dWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7CkBAIC0xMDQ3LDcgKzEw
NDYsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0UHJvCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0
KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOyAgICAKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBkZW1hcnNoYWxWYWx1ZShleGVjLCB2
YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKQEAgLTEw
NzMsNyArMTA3Miw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRQcm8K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1l
LT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgICAgCisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIAogICAgIEpTVmFsdWUgdmFsdWUgPSBkZW1hcnNoYWxW
YWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKICAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBmYWxz
ZSk7CkBAIC0xMDk4LDEyICsxMDk3LDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpyZW1vdmUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4
ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBpZiAoIW9iamVjdC0+aGFz
UHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkgewogICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5k
ZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsgICAgCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTI1LDEyICsxMTI0LDEy
IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmUKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+
Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgaWYgKCFvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3Bl
cnR5TmFtZSkpIHsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OyAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExOTYsNyArMTE5NSw3IEBAIGJvb2wgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNNZXQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBs
dWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIGZ1
bmMgPSBvYmplY3QtPmdldChleGVjLCBtZXRob2ROYW1lKTsKICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOwogICAgIHJldHVybiAhZnVuYy5pc1VuZGVmaW5lZCgpOwpAQCAtMTIxOCw3ICsxMjE3
LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgp
LT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CiAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CkBAIC0xMjYyLDcgKzEyNjEsNyBA
QCBzdGF0aWMgYm9vbCBnZXRPYmplY3RJRChOZXRzY2FwZVBsdWdpbkluCiAgICAgCiB2b2lkIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6YWRkVmFsdWVUb0FycmF5KE5TTXV0YWJsZUFycmF5
ICphcnJheSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewogICAgICAgICBbYXJyYXkgYWRkT2JqZWN0
OltOU051bWJlciBudW1iZXJXaXRoSW50OlN0cmluZ1ZhbHVlVHlwZV1dOwpAQCAtMTY3Miw3ICsx
NjcxLDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Om1vdmVHbAogICAgICAg
ICByZXR1cm47CiAKICAgICB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICB0aHJvd0Vy
cm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhnbG9iYWxFeGNlcHRp
b25TdHJpbmcoKSkpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw2IEBAIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiB1c2luZyBKU0M6OkpTR2xvYmFsT2JqZWN0OwogdXNpbmcgSlNDOjpK
U0xvY2s7CiB1c2luZyBKU0M6OkpTVmFsdWU7Ci11c2luZyBKU0M6OlNpbGVuY2VBc3NlcnRpb25z
T25seTsKIAogLyoKIEhlcmUgaXMgdGhlIGN1cnJlbnQgYmVoYXZpb3IgbWF0cml4IGZvciBmb3Vy
IHR5cGVzIG9mIG5hdmlnYXRpb25zOgpAQCAtNTk3LDggKzU5Niw4IEBAIC0gKE5TU3RyaW5nICop
X3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3IKICAgICBpZiAoIXJlc3VsdCB8fCAoIXJlc3VsdC5p
c0Jvb2xlYW4oKSAmJiAhcmVzdWx0LmlzU3RyaW5nKCkgJiYgIXJlc3VsdC5pc051bWJlcigpKSkK
ICAgICAgICAgcmV0dXJuIEAiIjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5z
Y3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhl
YygpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgcmV0dXJuIHVzdHJp
bmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIH0KIApAQCAt
MTEyMyw4ICsxMTIyLDggQEAgLSAoTlNTdHJpbmcgKilfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cgogICAgIGlmICghcmVzdWx0IHx8ICghcmVzdWx0LmlzQm9vbGVhbigpICYmICFyZXN1bHQuaXNT
dHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpKQogICAgICAgICByZXR1cm4gQCIiOwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0
ZSogZXhlYyA9IGFueVdvcmxkR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHJlc3Vs
dC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVs
ZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3NCw5ICsxNzQsOSBAQCAtIChOU0FycmF5ICop
c2NvcGVDaGFpbgogICAgIGlmICghX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lKQogICAgICAg
ICByZXR1cm4gW05TQXJyYXkgYXJyYXldOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKIAogICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gX3ByaXZhdGUt
PmRlYnVnZ2VyQ2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
c2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSk7CiAgICAgaWYgKCFzY29wZUNoYWluLT5uZXh0KSAgLy8g
Z2xvYmFsIGZyYW1lCiAgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6X3By
aXZhdGUtPmdsb2JhbE9iamVjdF07CiAKQEAgLTIyOSwxMyArMjI5LDEzIEBAIC0gKGlkKWV2YWx1
YXRlV2ViU2NyaXB0OihOU1N0cmluZyAqKXNjcmkKICAgICBpZiAoIV9wcml2YXRlLT5kZWJ1Z2dl
ckNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7Ci0KICAgICAvLyBJZiB0aGlzIGlzIHRoZSBnbG9iYWwgY2FsbCBm
cmFtZSBhbmQgdGhlcmUgaXMgbm8gZHluYW1pYyBnbG9iYWwgb2JqZWN0LAogICAgIC8vIERhc2hj
b2RlIGlzIGF0dGVtcHRpbmcgdG8gZXhlY3V0ZSBKUyBpbiB0aGUgZXZhbHVhdG9yIHVzaW5nIGEg
c3RhbGUKICAgICAvLyBXZWJTY3JpcHRDYWxsRnJhbWUuIEluc3RlYWQsIHdlIG5lZWQgdG8gc2V0
IHRoZSBkeW5hbWljIGdsb2JhbCBvYmplY3QKICAgICAvLyBhbmQgZXZhbHVhdGUgdGhlIEpTIGlu
IHRoZSBnbG9iYWwgb2JqZWN0J3MgZ2xvYmFsIGNhbGwgZnJhbWUuCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IF9wcml2YXRlLT5kZWJ1Z2dlci0+Z2xvYmFsT2JqZWN0KCk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworCiAgICAg
aWYgKHNlbGYgPT0gX3ByaXZhdGUtPmRlYnVnZ2VyLT5nbG9iYWxDYWxsRnJhbWUoKSAmJiAhZ2xv
YmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCkgewogICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gX3ByaXZhdGUtPmRlYnVnZ2VyLT5nbG9iYWxP
YmplY3QoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC01ODEsOCArNTgxLDggQEAgKyAodm9pZClfcmVwb3J0RXhjZXB0aW9uOihK
U1ZhbHVlUmVmKWV4YwogICAgIGlmICghZXhjZXB0aW9uIHx8ICFjb250ZXh0KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjU3RhdGUgPSB0b0pTKGNvbnRleHQpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWNTdGF0ZSk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgaGFzIGEg
RE9NV2luZG93IGdsb2JhbCBvYmplY3QsIG90aGVyd2lzZSB0aGlzIGNvbnRleHQgZGlkbid0IG9y
aWdpbmF0ZSBmcm9tIGEgV2ViVmlldy4KICAgICBpZiAoIXRvSlNET01XaW5kb3coZXhlY1N0YXRl
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKQpAQCAtNDg1MSw3ICs0ODUxLDcgQEAgLSAoTlNBcHBs
ZUV2ZW50RGVzY3JpcHRvciAqKWFlRGVzY0J5RXZhbAogICAgIEpTVmFsdWUgcmVzdWx0ID0gY29y
ZUZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChzY3JpcHQsIHRydWUpLmpzVmFsdWUoKTsK
ICAgICBpZiAoIXJlc3VsdCkgLy8gRklYTUU6IHBhc3MgZXJyb3JzCiAgICAgICAgIHJldHVybiAw
OwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3Jt
YWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpKTsKICAgICByZXR1cm4gYWVEZXNjRnJvbUpTVmFsdWUo
Y29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgp
KS0+Z2xvYmFsRXhlYygpLCByZXN1bHQpOwogfQogCkBAIC02NTYwLDggKzY1NjAsOCBAQCAtICh2
b2lkKV9ub3RpZmljYXRpb25zRGlkQ2xvc2U6KE5TQXJyYXkgCiAKIC0gKEpTVmFsdWVSZWYpX2Nv
bXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbzooSlNDb250ZXh0UmVmKWNvbnRleHQgZm9y
RWxlbWVudDooSlNWYWx1ZVJlZil2YWx1ZQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9K
UyhleGVjLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysg
U291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBA
QAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0
IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAg
IGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91
dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisKKyAg
ICAgICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OmFk
ZFF0U2VuZGVyVG9HbG9iYWxPYmplY3QpOgorICAgICAgICAoUVdlYkZyYW1lOjphZGRUb0phdmFT
Y3JpcHRXaW5kb3dPYmplY3QpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojppbmpl
Y3RJbnRlcm5hbHNPYmplY3QpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJl
c2V0SW50ZXJuYWxzT2JqZWN0KToKKwogMjAxMi0wNi0yMSAgVGhpYWdvIE1hcmNvcyBQLiBTYW50
b3MgIDx0aGlhZ28uc2FudG9zQGludGVsLmNvbT4KIAogICAgICAgICBbV0syXVtRdF0gQ29sb3Ig
Y2hvb3NlciBBUEkgbWlzc2luZwpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MDYsMTMgKzUwNiwxMiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBxdFNl
bmRlckNhbGxiYWNrKEpTQ29uCiAKIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6YWRkUXRTZW5kZXJU
b0dsb2JhbE9iamVjdCgpCiB7Ci0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhm
cmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogICAgIFFfQVNTRVJUKHdpbmRvdyk7CiAK
ICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygpOwogICAgIFFf
QVNTRVJUKGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBK
U0NvbnRleHRSZWYgY29udGV4dCA9IDo6dG9SZWYoZXhlYyk7CiAgICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHByb3BlcnR5TmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIl9fcXRfc2VuZGVyX18iKSk7CkBAIC02NTcsNyArNjU2LDYgQEAgdm9pZCBRV2ViRnJhbWU6
OmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iagogICAgICAgICByZXR1cm47CiAjaWYgVVNFKEpTQykK
ICAgICBKU0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpWYWx1ZU93bmVyc2hpcCB2YWx1ZU93bmVy
c2hpcCA9IHN0YXRpY19jYXN0PEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6OlZhbHVlT3duZXJz
aGlwPihvd25lcnNoaXApOwotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KGQtPmZy
YW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9i
amVjdCogcm9vdDsKICAgICBpZiAodmFsdWVPd25lcnNoaXAgPT0gSlNDOjpCaW5kaW5nczo6UXRJ
bnN0YW5jZTo6UXRPd25lcnNoaXApCkBAIC02NzUsNiArNjczLDcgQEAgdm9pZCBRV2ViRnJhbWU6
OmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iagogICAgIH0KIAogICAgIEpTQzo6RXhlY1N0YXRlKiBl
eGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKIAogICAgIEpTQzo6SlNPYmplY3QqIHJ1bnRpbWVPYmplY3QgPQogICAgICAgICAgICAg
SlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShvYmplY3QsIHJvb3QsIHZh
bHVlT3duZXJzaGlwKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA4NiwxMyArMTA4NiwxMiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjppbmplY3RJ
bnRlCiB7CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6
OmNvcmUoZnJhbWUpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNp
bGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RP
TVdpbmRvdyhjb3JlRnJhbWUsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBRX0FTU0VS
VCh3aW5kb3cpOwogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4
ZWMoKTsKICAgICBRX0FTU0VSVChleGVjKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogCiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSB0b1JlZihleGVjKTsKICAgICBXZWJD
b3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdChjb250ZXh0KTsKQEAgLTExMTMs
MTMgKzExMTIsMTIgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRJbnRlcgog
ewogICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3Jl
KGZyYW1lKTsKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOwotCiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5k
b3coY29yZUZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgUV9BU1NFUlQod2lu
ZG93KTsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7
CiAgICAgUV9BU1NFUlQoZXhlYyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gdG9SZWYoZXhlYyk7CiAgICAgV2ViQ29yZVRl
c3RTdXBwb3J0OjpyZXNldEludGVybmFsc09iamVjdChjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJl
cmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBw
ZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2Ug
dGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMg
Y29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAg
ICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIFdlYkNvcmVTdGF0aXN0aWNzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KToK
KyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50
KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0
c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVk
R2xvYmFsT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2Ny
aXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyk6CisgICAgICAgICogV2ViRnJhbWUuY3BwOgor
ICAgICAgICAoV2ViRnJhbWU6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRJblNjcmlwdFdv
cmxkKToKKyAgICAgICAgKiBXZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdl
YkphdmFTY3JpcHRDb2xsZWN0b3I6Om9iamVjdENvdW50KToKKyAgICAgICAgKiBXZWJWaWV3LmNw
cDoKKyAgICAgICAgKFdlYlZpZXc6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3Ry
aW5nKToKKyAgICAgICAgKFdlYlZpZXc6OnJlcG9ydEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJW
aWV3OjplbGVtZW50RnJvbUpTKToKKwogMjAxMi0wNi0yMCAgR2FycmV0IEtlbGx5ICA8Z2RrQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBNb3ZpbmcgY29va2llRW5hYmxlZC9zZXRDb29raWVFbmFi
bGVkIGZyb20gUGFnZSB0byBTZXR0aW5ncy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNv
cmVTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3Jl
U3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dl
YkNvcmVTdGF0aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEw
OSw3ICsxMDksNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAg
ICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsKICAg
ICByZXR1cm4gU19PSzsKIH0KQEAgLTEyMCw3ICsxMjAsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVf
UE9JTlRFUjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAu
cHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEzMSw3ICsx
MzEsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYg
KCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKTsK
ICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEzOSw3ICsxMzksNyBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNv
cmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyggCiAgICAg
LyogW3JldHZhbF1bb3V0XSAqLyBJUHJvcGVydHlCYWcyKiogdHlwZU5hbWVzQW5kQ291bnRzKQog
ewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBPd25QdHI8
VHlwZUNvdW50U2V0PiBqc09iamVjdFR5cGVOYW1lcyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKICAgICB0eXBlZGVm
IFR5cGVDb3VudFNldDo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgSXRlcmF0b3IgZW5k
ID0ganNPYmplY3RUeXBlTmFtZXMtPmVuZCgpOwpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2Vi
RnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAko
cmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5n
IEpTQzo6SlNHbG9iYWxPYmplY3Q7CiB1c2luZyBKU0M6OkpTTG9jazsKIHVzaW5nIEpTQzo6SlNW
YWx1ZTsKLXVzaW5nIEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5OwogCiAjZGVmaW5lIEZMQVNI
X1JFRFJBVyAwCiAKQEAgLTI1MjgsOCArMjUyNyw4IEBAIEhSRVNVTFQgV2ViRnJhbWU6OnN0cmlu
Z0J5RXZhbHVhdGluZ0phdmEKICAgICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0LmlzQm9vbGVhbigp
ICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpCiAgICAgICAgIHJl
dHVybiBTX09LOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAg
ICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGFueVdvcmxkR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7CisgICAgSlNMb2NrSG9sZGVySG9sZGVyIGxvY2soZXhlYyk7CiAgICAgU3RyaW5nIHJlc3Vs
dFN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKTsKICAgICAqZXZhbHVhdGlvblJlc3VsdCA9IEJTdHJpbmcocmVzdWx0U3RyaW5nKS5yZWxl
YXNlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkphdmFTY3JpcHRDb2xsZWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkphdmFTY3JpcHRDb2xsZWN0
b3IuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJKYXZhU2Ny
aXB0Q29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSmF2YVNjcmlwdEMKICAgICAgICAgcmV0dXJuIEVfUE9J
TlRFUjsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7
CiAgICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5o
ZWFwLm9iamVjdENvdW50KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJW
aWV3LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOTQsOCArMzE5NCw4IEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgV2ViVmlldzo6c3RyaW4KICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvblJlc3VsdCkK
ICAgICAgICAgcmV0dXJuIEVfRkFJTDsKICAgICBlbHNlIGlmIChzY3JpcHRFeGVjdXRpb25SZXN1
bHQuaXNTdHJpbmcoKSkgewotICAgICAgICBKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CiAgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gY29yZUZyYW1lLT5zY3Jp
cHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygp
OworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgKnJlc3VsdCA9IEJT
dHJpbmcodXN0cmluZ1RvU3RyaW5nKHNjcmlwdEV4ZWN1dGlvblJlc3VsdC5nZXRTdHJpbmcoZXhl
YykpKTsKICAgICB9CiAKQEAgLTU4NTEsOCArNTg1MSw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViVmlldzo6cmVwb3IKICAgICBpZiAoIWNvbnRleHQgfHwgIWV4Y2VwdGlvbikKICAg
ICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIEpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlY1N0YXRlID0gdG9KUyhjb250ZXh0
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjU3RhdGUpOwogCiAgICAgLy8gTWFrZSBzdXJl
IHRoZSBjb250ZXh0IGhhcyBhIERPTVdpbmRvdyBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgdGhp
cyBjb250ZXh0IGRpZG4ndCBvcmlnaW5hdGUgZnJvbSBhIFdlYlZpZXcuCiAgICAgaWYgKCF0b0pT
RE9NV2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkKQEAgLTU4NzgsOCAr
NTg3OCw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6ZWxlbWUKICAgICBp
ZiAoIW5vZGVPYmplY3QpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBKU0xvY2sgbG9j
ayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgRWxlbWVudCogZWx0ID0gdG9FbGVt
ZW50KHRvSlModG9KUyhjb250ZXh0KSwgbm9kZU9iamVjdCkpOworICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgRWxl
bWVudCogZWx0ID0gdG9FbGVtZW50KHRvSlMoZXhlYywgbm9kZU9iamVjdCkpOwogICAgIGlmICgh
ZWx0KQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148898</attachid>
            <date>2012-06-21 15:17:45 -0700</date>
            <delta_ts>2012-06-21 15:45:32 -0700</delta_ts>
            <desc>Try to fix Qt</desc>
            <filename>bug-89123-20120621151745.patch</filename>
            <type>text/plain</type>
            <size>204097</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBA
QAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9BUElTaGltcy5oOgorICAg
ICAgICAoQVBJRW50cnlTaGltV2l0aG91dExvY2spOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNo
aW1XaXRob3V0TG9jazo6QVBJRW50cnlTaGltV2l0aG91dExvY2spOiBBZGRlZCBhbiBleHRyYSBw
YXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIHRvIAorICAgICAgICBkZXRlcm1pbmUgd2hldGhl
ciB3ZSBzaG91bGQgcmVmIHRoZSBKU0dsb2JhbERhdGEgb3Igbm90LiBXZSB3YW50IHRvIHJlZiBh
bGwgdGhlIHRpbWUgZXhjZXB0IGZvciBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBjbGFzcyBi
ZWNhdXNlIHRpbWVyRGlkRmlyZSBjb3VsZCBydW4gYWZ0ZXIgc29tZWJvZHkgaGFzIHN0YXJ0ZWQg
dG8gdGVhciBkb3duIHRoYXQgcGFydGljdWxhciAKKyAgICAgICAgSlNHbG9iYWxEYXRhLCBzbyB3
ZSB3b3VsZG4ndCB3YW50IHRvIHJlc3VycmVjdCB0aGUgcmVmIGNvdW50IG9mIHRoYXQgSlNHbG9i
YWxEYXRhIGZyb20gMCBiYWNrIHRvIDEgYWZ0ZXIgCisgICAgICAgIGl0cyBkZXN0cnVjdGlvbiBo
YXMgYmVndW4uIAorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW1XaXRob3V0TG9jazo6fkFQSUVu
dHJ5U2hpbVdpdGhvdXRMb2NrKTogTm93IGRlcmVmcyBpZiBpdCBhbHNvIHJlZmVkLgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OkFQSUVudHJ5U2hpbSk6CisgICAgICAgIChBUElFbnRyeVNo
aW0pOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW06On5BUElFbnRyeVNoaW0pOgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OmluaXQpOiBGYWN0b3JlZCBvdXQgY29tbW9uIGluaXRpYWxp
emF0aW9uIGNvZGUgZm9yIHRoZSB2YXJpb3VzIEFQSUVudHJ5U2hpbSBjb25zdHJ1Y3RvcnMuCisg
ICAgICAgIEFsc28gbW92ZWQgdGhlIHRpbWVvdXRDaGVja2VyIHN0b3AgYW5kIHN0YXJ0IGhlcmUg
YmVjYXVzZSB3ZSBuZWVkIHRvIHN0YXJ0IGFmdGVyIHdlJ3ZlIGdyYWJiZWQgdGhlIEFQSSBsb2Nr
CisgICAgICAgIGFuZCBiZWZvcmUgd2UndmUgcmVsZWFzZWQgaXQsIHdoaWNoIGNhbiBvbmx5IGRv
bmUgaW4gQVBJRW50cnlTaGltLgorICAgICAgICAoSlNDOjpBUElDYWxsYmFja1NoaW06On5BUElD
YWxsYmFja1NoaW0pOiBXZSBubyBsb25nZXIgbmVlZCB0byBzeW5jaHJvbml6ZSBoZXJlLgorICAg
ICAgICAqIEFQSS9KU0NvbnRleHRSZWYuY3BwOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0Q3Jl
YXRlKToKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXApOgorICAgICAgICAo
SlNHbG9iYWxDb250ZXh0UmVsZWFzZSk6CisgICAgICAgIChKU0NvbnRleHRDcmVhdGVCYWNrdHJh
Y2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRTcGFjZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6cHJvdGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucHJv
dGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFw
OjpzZXRBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWN0aXZpdHlDYWxs
YmFjayk6CisgICAgICAgIChKU0M6OkhlYXA6OnN3ZWVwZXIpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOiBDaGFuZ2VkIG1fYWN0aXZpdHlDYWxsYmFjayBhbmQgbV9zd2VlcGVyIHRvIGJlIHJhdyBw
b2ludGVycyByYXRoZXIgdGhhbiBPd25QdHJzIGJlY2F1c2UgdGhleSAKKyAgICAgICAgYXJlIG5v
dyByZXNwb25zaWJsZSBmb3IgdGhlaXIgb3duIGxpZmV0aW1lLiBBbHNvIGNoYW5nZWQgdGhlIG9y
ZGVyIG9mIGRlY2xhcmF0aW9uIG9mIHRoZSBHQ0FjdGl2aXR5Q2FsbGJhY2sKKyAgICAgICAgYW5k
IHRoZSBJbmNyZW1lbnRhbFN3ZWVwZXIgdG8gbWFrZSBzdXJlIHRoZXkncmUgdGhlIGxhc3QgdGhp
bmdzIHRoYXQgZ2V0IGluaXRpYWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gdG8gCisgICAgICAg
IHByZXZlbnQgYW55IGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBKU0ds
b2JhbERhdGEvSGVhcCB0aGV5IG1pZ2h0IGNhcmUgYWJvdXQuCisgICAgICAgIChIZWFwKToKKyAg
ICAgICAgKiBoZWFwL0hlYXBUaW1lci5jcHA6IFJlZmFjdG9yZWQgdG8gYWxsb3cgZm9yIHRocmVh
ZC1zYWZlIG9wZXJhdGlvbiBhbmQgc2h1dGRvd24uCisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6
fkhlYXBUaW1lcik6CisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6aW52YWxpZGF0ZSk6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OmRpZFN0YXJ0Vk1TaHV0ZG93bik6
IENhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIH5KU0dsb2JhbERhdGEuIElmIHdlJ3JlIG9uIHRo
ZSBzYW1lIHRocmVhZCAKKyAgICAgICAgdGhhdCB0aGUgSGVhcFRpbWVyIGlzIHJ1bm5pbmcgb24s
IHdlIGtpbGwgdGhlIEhlYXBUaW1lciBvdXJzZWx2ZXMuIElmIG5vdCwgdGhlbiB3ZSBzZXQgc29t
ZSBzdGF0ZSBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBhbmQgc2NoZWR1bGUgaXQgdG8gZmly
ZSBpbW1lZGlhdGVseSBzbyB0aGF0IGl0IGNhbiBub3RpY2UgYW5kIGtpbGwgaXRzZWxmLgorICAg
ICAgICAoSlNDOjpIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSk6IFdlIGdyYWIgb3VyIG11dGV4IGFu
ZCBjaGVjayBvdXIgSlNHbG9iYWxEYXRhIHBvaW50ZXIuIElmIGl0IGhhcyBiZWVuIHplcm8tZWQK
KyAgICAgICAgb3V0LCB0aGVuIHdlIGtub3cgdGhlIFZNIGhhcyBzdGFydGVkIHRvIHNodXRkb3du
IGFuZCB3ZSBzaG91bGQga2lsbCBvdXJzZWx2ZXMuIE90aGVyd2lzZSwgZ3JhYiB0aGUgQVBJRW50
cnlTaGltLAorICAgICAgICBidXQgd2l0aG91dCByZWYtaW5nIHRoZSBKU0dsb2JhbERhdGEgKHdl
IGRvbid0IHdhbnQgdG8gYnJpbmcgdGhlIEpTR2xvYmFsRGF0YSdzIHJlZi1jb3VudCBmcm9tIDAg
dG8gMSkgaW4gY2FzZSAKKyAgICAgICAgd2Ugd2VyZSBpbnRlcnJ1cHRlZCBiZXR3ZWVuIHJlbGVh
c2luZyBvdXIgbXV0ZXggYW5kIHRyeWluZyB0byBncmFiIHRoZSBBUElMb2NrLgorICAgICAgICAq
IGhlYXAvSGVhcFRpbWVyLmg6IAorICAgICAgICAoSGVhcFRpbWVyKToKKyAgICAgICAgKiBoZWFw
L0luY3JlbWVudGFsU3dlZXBlci5jcHA6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBl
cjo6ZG9Xb3JrKTogV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIEFQSSBzaGltIGhlcmUgc2luY2UgSGVh
cFRpbWVyOjp0aW1lckRpZEZpcmUgaGFuZGxlcyAKKyAgICAgICAgYWxsIG9mIHRoYXQgZm9yIHVz
LiAKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUpOgorICAgICAgICAq
IGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAgIChJbmNyZW1lbnRhbFN3ZWVwZXIp
OgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKiBoZWFwL1dlYWtCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OldlYWtCbG9jazo6cmVhcCk6CisgICAgICAgICoganNjLmNw
cDoKKyAgICAgICAgKGZ1bmN0aW9uR0MpOgorICAgICAgICAoZnVuY3Rpb25SZWxlYXNlRXhlY3V0
YWJsZU1lbW9yeSk6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBs
ZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpjaGVja1N5bnRheCk6CisgICAgICAgIChKU0M6OmV2
YWx1YXRlKToKKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oOgorICAgICAg
ICAoRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayk6CisgICAgICAgIChKU0M6OkRlZmF1bHRHQ0Fj
dGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6IFNpZ25hbHMgdG8gdGhlIHR3byBI
ZWFwVGltZXJzIChHQ0FjdGl2aXR5Q2FsbGJhY2sgYW5kIEluY3JlbWVudGFsU3dlZXBlcikKKyAg
ICAgICAgdGhhdCB0aGUgVk0gaGFzIHN0YXJ0ZWQgc2h1dHRpbmcgZG93bi4gSXQgdGhlbiB3YWl0
cyB1bnRpbCB0aGUgSGVhcFRpbWVyIGlzIGRvbmUgd2l0aCB3aGF0ZXZlciBhY3Rpdml0eSAKKyAg
ICAgICAgaXQgbmVlZHMgdG8gZG8gYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCBhbnkgZnVydGhlciBk
ZXN0cnVjdGlvbi4gQWxzbyBhc3NlcnRzIHRoYXQgd2UgZG8gbm90IGN1cnJlbnRseSBob2xkIHRo
ZSAKKyAgICAgICAgQVBJTG9jayBiZWNhdXNlIHRoaXMgY291bGQgcG90ZW50aWFsbHkgY2F1c2Ug
ZGVhZGxvY2sgd2hlbiB3ZSB0cnkgdG8gc2lnbmFsIHRvIHRoZSBIZWFwVGltZXJzIHVzaW5nIHRo
ZWlyIG11dGV4ZXMuCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2Up
OiBQcm90ZWN0IHRoZSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNoYXJlZCBpbnN0YW5jZSB3aXRo
IHRoZSBHbG9iYWxKU0xvY2suCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5z
dGFuY2VJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDogQ2hhbmdl
IHRvIGJlIFRocmVhZFNhZmVSZWZDb3VudGVkIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3Jy
eSBhYm91dCByZWZpbmcgYW5kIAorICAgICAgICBkZS1yZWZpbmcgSlNHbG9iYWxEYXRhcyBvbiBz
ZXBhcmF0ZSB0aHJlYWRzIHNpbmNlIHdlIGRvbid0IGRvIGl0IHRoYXQgb2Z0ZW4gYW55d2F5cy4K
KyAgICAgICAgKEpTR2xvYmFsRGF0YSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6YXBp
TG9jayk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogcnVudGltZS9KU0xvY2suY3BwOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEpTQzo6R2xvYmFsSlNMb2NrOjpHbG9iYWxKU0xvY2spOiBGb3Ig
YWNjZXNzaW5nIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisgICAgICAgIChKU0M6Okdsb2JhbEpTTG9j
azo6fkdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6SlNMb2NrSG9s
ZGVyKTogTXV0ZXhMb2NrZXIgZm9yIEpTTG9jay4gQWxzbyByZWZzIHRoZSBKU0dsb2JhbERhdGEg
dG8ga2VlcCBpdCBhbGl2ZSBzbyB0aGF0IAorICAgICAgICBpdCBjYW4gc3VjY2Vzc2Z1bGx5IHVu
bG9jayBpdCBsYXRlciB3aXRob3V0IGl0IGRpc2FwcGVhcmluZyBmcm9tIHVuZGVybmVhdGggaXQu
CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6fkpTTG9ja0hvbGRlcik6CisgICAgICAgIChK
U0M6OkpTTG9jazo6SlNMb2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp+SlNMb2NrKToKKyAg
ICAgICAgKEpTQzo6SlNMb2NrOjpsb2NrKTogVXNlcyB0aGUgc3BpbiBsb2NrIGZvciBndWFyZGlu
ZyB0aGUgbG9jayBjb3VudCBhbmQgb3duZXIgdGhyZWFkIGZpZWxkcy4gVXNlcyB0aGUgbXV0ZXgg
Zm9yIAorICAgICAgICBhY3R1YWxseSB3YWl0aW5nIGZvciBsb25nIHBlcmlvZHMuIAorICAgICAg
ICAoSlNDOjpKU0xvY2s6OnVubG9jayk6CisgICAgICAgIChKU0M6OkpTTG9jazo6Y3VycmVudFRo
cmVhZElzSG9sZGluZ0xvY2spOiAKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpkcm9wQWxsTG9ja3Mp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseSk6Cisg
ICAgICAgIChKU0M6OkpTTG9jazo6Z3JhYkFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2Nrcyk6CisgICAgICAgIChKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKToKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0xvY2tI
b2xkZXIpOgorICAgICAgICAoSlNMb2NrKToKKyAgICAgICAgKERyb3BBbGxMb2Nrcyk6CisgICAg
ICAgICogcnVudGltZS9XZWFrR0NNYXAuaDoKKyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpzZXQp
OgorICAgICAgICAqIHRlc3RSZWdFeHAuY3BwOgorICAgICAgICAocmVhbE1haW4pOgorCiAyMDEy
LTA2LTIwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVk
dWNlZCAoYnV0IGRpZCBub3QgZWxpbWluYXRlKSB1c2Ugb2YgImJlcnplcmtlciBHQyIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0MKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IGV4ZWMtPmhlYXAoKS0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMzA3LDcgKzMwNyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQygKICNpZm5kZWYgTkRFQlVHCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLnJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KQEAgLTY2Nyw5ICs2NjcsOSBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50
cyhpbnQgYXJnYywgY2hhCiAKIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCisgICAgCiAgICAgUmVm
UHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKFRocmVh
ZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2Jh
bERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBwYXJzZUFyZ3Vt
ZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0UmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJl
Z0V4cC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
UmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDkgKzQ5NSw4IEBAIHN0YXRpYyB2b2lk
IHBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGEKIAogaW50IHJlYWxNYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwot
CiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3Jl
YXRlKFRocmVhZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGdsb2JhbERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBw
YXJzZUFyZ3VtZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJU2hpbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0FQSVNoaW1zLmgJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvQVBJU2hpbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMzEgKzI4LDQwIEBACiAK
ICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIK
KyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNp
bmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
QVBJRW50cnlTaGltV2l0aG91dExvY2sgeworcHVibGljOgorICAgIGVudW0gUmVmR2xvYmFsRGF0
YVRhZyB7IERvbnRSZWZHbG9iYWxEYXRhID0gMCwgUmVmR2xvYmFsRGF0YSB9OworCiBwcm90ZWN0
ZWQ6Ci0gICAgQVBJRW50cnlTaGltV2l0aG91dExvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBib29sIHJlZ2lzdGVyVGhyZWFkKQotICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRh
KQorICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
Ym9vbCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0YVRhZyBzaG91bGRSZWZHbG9iYWxEYXRh
KQorICAgICAgICA6IG1fc2hvdWxkUmVmR2xvYmFsRGF0YShzaG91bGRSZWZHbG9iYWxEYXRhKQor
ICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICAgICAsIG1fZW50cnlJZGVu
dGlmaWVyVGFibGUod3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZ2xv
YmFsRGF0YS0+aWRlbnRpZmllclRhYmxlKSkKICAgICB7CisgICAgICAgIGlmIChzaG91bGRSZWZH
bG9iYWxEYXRhKQorICAgICAgICAgICAgbV9nbG9iYWxEYXRhLT5yZWYoKTsKICAgICAgICAgVU5V
U0VEX1BBUkFNKHJlZ2lzdGVyVGhyZWFkKTsKICAgICAgICAgaWYgKHJlZ2lzdGVyVGhyZWFkKQog
ICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRU
aHJlYWQoKTsKICAgICAgICAgbV9nbG9iYWxEYXRhLT5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+
c3luY2hyb25pemUoKTsKLSAgICAgICAgbV9nbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5zdGFy
dCgpOworICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuc3dlZXBlcigpLT5zeW5jaHJvbml6ZSgp
OwogICAgIH0KIAogICAgIH5BUElFbnRyeVNoaW1XaXRob3V0TG9jaygpCiAgICAgewotICAgICAg
ICBtX2dsb2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKICAgICAgICAgd3RmVGhyZWFk
RGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUobV9lbnRyeUlkZW50aWZpZXJUYWJsZSk7
CisgICAgICAgIGlmIChtX3Nob3VsZFJlZkdsb2JhbERhdGEpCisgICAgICAgICAgICBtX2dsb2Jh
bERhdGEtPmRlcmVmKCk7CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgorICAgIFJlZkds
b2JhbERhdGFUYWcgbV9zaG91bGRSZWZHbG9iYWxEYXRhOwogICAgIEpTR2xvYmFsRGF0YSogbV9n
bG9iYWxEYXRhOwogICAgIElkZW50aWZpZXJUYWJsZSogbV9lbnRyeUlkZW50aWZpZXJUYWJsZTsK
IH07CkBAIC02MSwyMCArNzAsMzggQEAgY2xhc3MgQVBJRW50cnlTaGltIDogcHVibGljIEFQSUVu
dHJ5U2hpbQogcHVibGljOgogICAgIC8vIE5vcm1hbCBBUEkgZW50cnkKICAgICBBUElFbnRyeVNo
aW0oRXhlY1N0YXRlKiBleGVjLCBib29sIHJlZ2lzdGVyVGhyZWFkID0gdHJ1ZSkKLSAgICAgICAg
OiBBUElFbnRyeVNoaW1XaXRob3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRo
cmVhZCkKLSAgICAgICAgLCBtX2xvY2soZXhlYykKKyAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRo
b3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0
YSkKKyAgICB7CisgICAgICAgIGluaXQoKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG5lY2Vzc2FyeSBmb3IgSGVhcFRpbWVyIHRvIHByZXZlbnQgaXQgZnJvbSBhY2NpZGVu
dGFsbHkgcmVzdXJyZWN0aW5nIAorICAgIC8vIHRoZSByZWYgY291bnQgb2YgYSAiZGVhZCIgSlNH
bG9iYWxEYXRhLgorICAgIEFQSUVudHJ5U2hpbShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFJl
Zkdsb2JhbERhdGFUYWcgcmVmR2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUp
CisgICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0YSwgcmVnaXN0ZXJU
aHJlYWQsIHJlZkdsb2JhbERhdGEpCiAgICAgeworICAgICAgICBpbml0KCk7CiAgICAgfQogCiAg
ICAgLy8gSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvciBvbmx5IGhhcyBhIGdsb2JhbERhdGEuCiAg
ICAgQVBJRW50cnlTaGltKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRo
cmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0
YSwgcmVnaXN0ZXJUaHJlYWQpCi0gICAgICAgICwgbV9sb2NrKGdsb2JhbERhdGEtPmlzU2hhcmVk
SW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5KQorICAgICAg
ICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKGdsb2JhbERhdGEsIHJlZ2lzdGVyVGhyZWFkLCBS
ZWZHbG9iYWxEYXRhKQogICAgIHsKKyAgICAgICAgaW5pdCgpOworICAgIH0KKworICAgIH5BUElF
bnRyeVNoaW0oKQorICAgIHsKKyAgICAgICAgbV9nbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5z
dG9wKCk7CisgICAgICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLnVubG9jaygpOwogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBKU0xvY2sgbV9sb2NrOworICAgIHZvaWQgaW5pdCgpCisgICAgewor
ICAgICAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5sb2NrKCk7CisgICAgICAgIG1fZ2xvYmFs
RGF0YS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsKKyAgICB9CiB9OwogCiBjbGFzcyBBUElDYWxs
YmFja1NoaW0gewpAQCAtODgsNyArMTE1LDYgQEAgcHVibGljOgogCiAgICAgfkFQSUNhbGxiYWNr
U2hpbSgpCiAgICAgewotICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuYWN0aXZpdHlDYWxsYmFj
aygpLT5zeW5jaHJvbml6ZSgpOwogICAgICAgICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElk
ZW50aWZpZXJUYWJsZShtX2dsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZSk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDYgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xv
YmFsQ29udGV4dENyZWF0ZQogICAgIC8vIElmIHRoZSBhcHBsaWNhdGlvbiB3YXMgbGlua2VkIGJl
Zm9yZSBKU0dsb2JhbENvbnRleHRDcmVhdGUgd2FzIGNoYW5nZWQgdG8gdXNlIGEgdW5pcXVlIEpT
R2xvYmFsRGF0YSwKICAgICAvLyB3ZSB1c2UgYSBzaGFyZWQgb25lIGZvciBiYWNrd2FyZHMgY29t
cGF0aWJpbGl0eS4KICAgICBpZiAoTlNWZXJzaW9uT2ZMaW5rVGltZUxpYnJhcnkoIkphdmFTY3Jp
cHRDb3JlIikgPD0gd2Via2l0Rmlyc3RWZXJzaW9uV2l0aENvbmN1cnJlbnRHbG9iYWxDb250ZXh0
cykgewotICAgICAgICBKU0xvY2sgbG9jayhMb2NrRm9yUmVhbCk7CiAgICAgICAgIHJldHVybiBK
U0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKHRvUmVmKCZKU0dsb2JhbERhdGE6OnNoYXJlZElu
c3RhbmNlKCkpLCBnbG9iYWxPYmplY3RDbGFzcyk7CiAgICAgfQogI2VuZGlmIC8vIE9TKERBUldJ
TikKQEAgLTkwLDExICs4OSw5IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRD
cmVhdGUKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKLSAgICBKU0xvY2sgbG9jayhM
b2NrRm9yUmVhbCk7CiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IGdyb3Vw
ID8gUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+KHRvSlMoZ3JvdXApKSA6IEpTR2xvYmFsRGF0YTo6
Y3JlYXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlwZVNtYWxsKTsKIAogICAgIEFQSUVudHJ5
U2hpbSBlbnRyeVNoaW0oZ2xvYmFsRGF0YS5nZXQoKSwgZmFsc2UpOwotCiAgICAgZ2xvYmFsRGF0
YS0+bWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsKIAogICAgIGlmICghZ2xvYmFsT2Jq
ZWN0Q2xhc3MpIHsKQEAgLTEyNCwxOCArMTIxLDE5IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0ds
b2JhbENvbnRleHRSZXRhaW4KIAogdm9pZCBKU0dsb2JhbENvbnRleHRSZWxlYXNlKEpTR2xvYmFs
Q29udGV4dFJlZiBjdHgpCiB7CisgICAgSWRlbnRpZmllclRhYmxlKiBzYXZlZElkZW50aWZpZXJU
YWJsZTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrIGxvY2so
ZXhlYyk7CisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAotICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBJZGVudGlm
aWVyVGFibGUqIHNhdmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJl
bnRJZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUpOworICAgICAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIHNh
dmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVy
VGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUpOwogCi0gICAgYm9vbCBwcm90ZWN0Q291
bnRJc1plcm8gPSBIZWFwOjpoZWFwKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPnVucHJv
dGVjdChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwotICAgIGlmIChwcm90ZWN0Q291bnRJ
c1plcm8pIHsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+c3lu
Y2hyb25pemUoKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVj
dEdyYXBoKCk7CisgICAgICAgIGJvb2wgcHJvdGVjdENvdW50SXNaZXJvID0gSGVhcDo6aGVhcChl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT51bnByb3RlY3QoZXhlYy0+ZHluYW1pY0dsb2Jh
bE9iamVjdCgpKTsKKyAgICAgICAgaWYgKHByb3RlY3RDb3VudElzWmVybykKKyAgICAgICAgICAg
IGdsb2JhbERhdGEuaGVhcC5yZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOworICAgICAgICBn
bG9iYWxEYXRhLmRlcmVmKCk7CiAgICAgfQotICAgIGdsb2JhbERhdGEuZGVyZWYoKTsKIAogICAg
IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKHNhdmVkSWRlbnRpZmll
clRhYmxlKTsKIH0KQEAgLTE2Niw3ICsxNjQsNyBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNDb250
ZXh0R2V0R2xvYmFsQ29uCiBKU1N0cmluZ1JlZiBKU0NvbnRleHRDcmVhdGVCYWNrdHJhY2UoSlND
b250ZXh0UmVmIGN0eCwgdW5zaWduZWQgbWF4U3RhY2tTaXplKQogewogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2sgbG9jayhleGVjKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKIAogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICBVU3RyaW5nQnVp
bGRlciBidWlsZGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3Bh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNw
YWNlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIENoZWNrZWRC
b29sZWFuIENvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZVMKICAgICBpZiAoaXNPdmVyc2l6ZShieXRl
cykpCiAgICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZU92ZXJzaXplKGJ5dGVzLCBvdXRQdHIpOwog
ICAgIAorICAgIEFTU0VSVChtX2hlYXAtPmdsb2JhbERhdGEoKS0+YXBpTG9jaygpLmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9hbGxvY2F0
b3IuY3VycmVudENhcGFjaXR5KCkpOwogCiAgICAgYWxsb2NhdGVCbG9jaygpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMTUgKzE2
MCw5IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHByb3BvcnRpb25hbEhlYXBTaXoKICAgICByZXR1
cm4gMS4yNSAqIGhlYXBTaXplOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFNoYXJl
ZEluc3RhbmNlVGhyZWFkU3RhdGUoKQorc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRTaGFyZWRJ
bnN0YW5jZVRocmVhZFN0YXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBpZiAo
IUpTTG9jazo6bG9ja0NvdW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
SlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZ2xvYmFsRGF0YS0+YXBpTG9jaygp
LmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBp
c1ZhbGlkVGhyZWFkU3RhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQpAQCAtMTc2LDcgKzE3
MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkVGhyZWFkU3RhdGUoSlMKICAgICBpZiAo
Z2xvYmFsRGF0YS0+aWRlbnRpZmllclRhYmxlICE9IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRl
bnRpZmllclRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChnbG9iYWxE
YXRhLT5pc1NoYXJlZEluc3RhbmNlKCkgJiYgIWlzVmFsaWRTaGFyZWRJbnN0YW5jZVRocmVhZFN0
YXRlKCkpCisgICAgaWYgKGdsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSAmJiAhaXNWYWxp
ZFNoYXJlZEluc3RhbmNlVGhyZWFkU3RhdGUoZ2xvYmFsRGF0YSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMzI3LDcgKzMyMSw3IEBAIHZvaWQgSGVhcDo6
ZGlkQWJhbmRvbihzaXplX3QgYnl0ZXMpCiB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQog
ewogICAgIEFTU0VSVChrKTsKLSAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xk
aW5nTG9jaygpIHx8ICFtX2dsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSk7CisgICAgQVNT
RVJUKG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkp
OwogCiAgICAgaWYgKCFrLmlzQ2VsbCgpKQogICAgICAgICByZXR1cm47CkBAIC0zMzgsNyArMzMy
LDcgQEAgdm9pZCBIZWFwOjpwcm90ZWN0KEpTVmFsdWUgaykKIGJvb2wgSGVhcDo6dW5wcm90ZWN0
KEpTVmFsdWUgaykKIHsKICAgICBBU1NFUlQoayk7Ci0gICAgQVNTRVJUKEpTTG9jazo6Y3VycmVu
dFRocmVhZElzSG9sZGluZ0xvY2soKSB8fCAhbV9nbG9iYWxEYXRhLT5pc1NoYXJlZEluc3RhbmNl
KCkpOworICAgIEFTU0VSVChtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nTG9jaygpKTsKIAogICAgIGlmICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNjkyLDYgKzY4Niw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBz
d2VlcFRvZ2cKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xs
ZWN0aW9uIik7CiAgICAgCiAgICAgR0NQSEFTRShDb2xsZWN0KTsKKyAgICBBU1NFUlQoZ2xvYmFs
RGF0YSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgQVNT
RVJUKGdsb2JhbERhdGEoKS0+aWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJy
ZW50SWRlbnRpZmllclRhYmxlKCkpOwogICAgIEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAg
ICAgSkFWQVNDUklQVENPUkVfR0NfQkVHSU4oKTsKQEAgLTc3NywxOSArNzcyLDE5IEBAIHZvaWQg
SGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICBKQVZBU0NSSVBUQ09SRV9H
Q19FTkQoKTsKIH0KIAotdm9pZCBIZWFwOjpzZXRBY3Rpdml0eUNhbGxiYWNrKFBhc3NPd25QdHI8
R0NBY3Rpdml0eUNhbGxiYWNrPiBhY3Rpdml0eUNhbGxiYWNrKQordm9pZCBIZWFwOjpzZXRBY3Rp
dml0eUNhbGxiYWNrKEdDQWN0aXZpdHlDYWxsYmFjayogYWN0aXZpdHlDYWxsYmFjaykKIHsKICAg
ICBtX2FjdGl2aXR5Q2FsbGJhY2sgPSBhY3Rpdml0eUNhbGxiYWNrOwogfQogCiBHQ0FjdGl2aXR5
Q2FsbGJhY2sqIEhlYXA6OmFjdGl2aXR5Q2FsbGJhY2soKQogewotICAgIHJldHVybiBtX2FjdGl2
aXR5Q2FsbGJhY2suZ2V0KCk7CisgICAgcmV0dXJuIG1fYWN0aXZpdHlDYWxsYmFjazsKIH0KIAog
SW5jcmVtZW50YWxTd2VlcGVyKiBIZWFwOjpzd2VlcGVyKCkKIHsKLSAgICByZXR1cm4gbV9zd2Vl
cGVyLmdldCgpOworICAgIHJldHVybiBtX3N3ZWVwZXI7CiB9CiAKIHZvaWQgSGVhcDo6c2V0R2Fy
YmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoYm9vbCBlbmFibGUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDEwICs5OSwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1
cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0
aXZpdHlDYWxsYmFjayogYWN0aXZpdHlDYWxsYmFjaygpOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHNldEFjdGl2aXR5Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2aXR5Q2FsbGJh
Y2s+KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRBY3Rpdml0eUNhbGxiYWNr
KEdDQWN0aXZpdHlDYWxsYmFjayopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNl
dEdhcmJhZ2VDb2xsZWN0aW9uVGltZXJFbmFibGVkKGJvb2wpOwogCi0gICAgICAgIEluY3JlbWVu
dGFsU3dlZXBlciogc3dlZXBlcigpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBJbmNyZW1l
bnRhbFN3ZWVwZXIqIHN3ZWVwZXIoKTsKIAogICAgICAgICAvLyB0cnVlIGlmIGFuIGFsbG9jYXRp
b24gb3IgY29sbGVjdGlvbiBpcyBpbiBwcm9ncmVzcwogICAgICAgICBpbmxpbmUgYm9vbCBpc0J1
c3koKTsKQEAgLTIzNywxMCArMjM3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBkb3Vi
bGUgbV9sYXN0R0NMZW5ndGg7CiAgICAgICAgIGRvdWJsZSBtX2xhc3RDb2RlRGlzY2FyZFRpbWU7
CiAKLSAgICAgICAgT3duUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gbV9hY3Rpdml0eUNhbGxiYWNr
OwotICAgICAgICBPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPiBtX3N3ZWVwZXI7Ci0gICAgICAg
IAogICAgICAgICBEb3VibHlMaW5rZWRMaXN0PEV4ZWN1dGFibGVCYXNlPiBtX2NvbXBpbGVkQ29k
ZTsKKyAgICAgICAgCisgICAgICAgIEdDQWN0aXZpdHlDYWxsYmFjayogbV9hY3Rpdml0eUNhbGxi
YWNrOworICAgICAgICBJbmNyZW1lbnRhbFN3ZWVwZXIqIG1fc3dlZXBlcjsKICAgICB9OwogCiAg
ICAgaW5saW5lIGJvb2wgSGVhcDo6c2hvdWxkQ29sbGVjdCgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhlYXBUaW1lci5oIgogCisj
aW5jbHVkZSAiQVBJU2hpbXMuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpT
U3RyaW5nLmgiCisjaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0yMSw3ICsyNSw4IEBAIEhlYXBUaW1lcjo6SGVh
cFRpbWVyKEpTR2xvYmFsRGF0YSogZ2xvYmEKIAogSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKIHsK
LSAgICBpbnZhbGlkYXRlKCk7CisgICAgQ0ZSdW5Mb29wUmVtb3ZlVGltZXIobV9ydW5Mb29wLmdl
dCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworICAgIENGUnVuTG9v
cFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKIH0KIAogdm9pZCBIZWFwVGltZXI6OnN5
bmNocm9uaXplKCkKQEAgLTM1LDE0ICs0MCwzNyBAQCB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25p
emUoKQogCiB2b2lkIEhlYXBUaW1lcjo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgQ0ZSdW5Mb29wUmVt
b3ZlVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9u
TW9kZXMpOwotICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKKyAg
ICBtX2dsb2JhbERhdGEgPSAwOworICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1f
dGltZXIuZ2V0KCksIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc19kZWNhZGUpOworfQor
Cit2b2lkIEhlYXBUaW1lcjo6ZGlkU3RhcnRWTVNodXRkb3duKCkKK3sKKyAgICBpZiAoQ0ZSdW5M
b29wR2V0Q3VycmVudCgpID09IG1fcnVuTG9vcC5nZXQoKSkgeworICAgICAgICBpbnZhbGlkYXRl
KCk7CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFT
U0VSVCghbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2so
KSk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2h1dGRvd25NdXRleCk7CisgICAgaW52YWxp
ZGF0ZSgpOwogfQogCiB2b2lkIEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVy
UmVmLCB2b2lkKiBpbmZvKQogewogICAgIEhlYXBUaW1lciogYWdlbnQgPSBzdGF0aWNfY2FzdDxI
ZWFwVGltZXIqPihpbmZvKTsKLSAgICBhZ2VudC0+ZG9Xb3JrKCk7CisgICAgYWdlbnQtPm1fc2h1
dGRvd25NdXRleC5sb2NrKCk7CisgICAgaWYgKCFhZ2VudC0+bV9nbG9iYWxEYXRhKSB7CisgICAg
ICAgIGFnZW50LT5tX3NodXRkb3duTXV0ZXgudW5sb2NrKCk7CisgICAgICAgIGRlbGV0ZSBhZ2Vu
dDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB7CisgICAgICAgIC8vIFdlIGRvbid0IHJl
ZiBoZXJlIHRvIHByZXZlbnQgdXMgZnJvbSByZXN1cnJlY3RpbmcgdGhlIHJlZiBjb3VudCBvZiBh
ICJkZWFkIiBKU0dsb2JhbERhdGEuCisgICAgICAgIEFQSUVudHJ5U2hpbSBzaGltKGFnZW50LT5t
X2dsb2JhbERhdGEsIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrOjpEb250UmVmR2xvYmFsRGF0YSk7
CisgICAgICAgIGFnZW50LT5kb1dvcmsoKTsKKyAgICB9CisgICAgYWdlbnQtPm1fc2h1dGRvd25N
dXRleC51bmxvY2soKTsKIH0KIAogI2Vsc2UKQEAgLTU2LDYgKzg0LDExIEBAIEhlYXBUaW1lcjo6
fkhlYXBUaW1lcigpCiB7CiB9CiAKK3ZvaWQgSGVhcFRpbWVyOjpkaWRTdGFydFZNU2h1dGRvd24o
KQoreworICAgIGRlbGV0ZSB0aGlzOworfQorCiB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25pemUo
KQogewogfQpAQCAtNjQsNyArOTcsNiBAQCB2b2lkIEhlYXBUaW1lcjo6aW52YWxpZGF0ZSgpCiB7
CiB9CiAKLQogI2VuZGlmCiAgICAgCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBUaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBUaW1lci5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwVGltZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgSGVh
cFRpbWVyX2gKIAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CiAKICNpZiBVU0UoQ0YpCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZv
dW5kYXRpb24uaD4KQEAgLTIxLDcgKzIyLDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiAgICAg
dmlydHVhbCB+SGVhcFRpbWVyKCk7Ci0gICAgCisKKyAgICB2b2lkIGRpZFN0YXJ0Vk1TaHV0ZG93
bigpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBk
b1dvcmsoKSA9IDA7CiAgICAgCkBAIC0zNCw2ICszNiw4IEBAIHByb3RlY3RlZDoKICAgICBSZXRh
aW5QdHI8Q0ZSdW5Mb29wVGltZXJSZWY+IG1fdGltZXI7CiAgICAgUmV0YWluUHRyPENGUnVuTG9v
cFJlZj4gbV9ydW5Mb29wOwogICAgIENGUnVuTG9vcFRpbWVyQ29udGV4dCBtX2NvbnRleHQ7CisK
KyAgICBNdXRleCBtX3NodXRkb3duTXV0ZXg7CiAjZW5kaWYKICAgICAKIHByaXZhdGU6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5j
cHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDYgQEAgc3RhdGlj
IGNvbnN0IENGVGltZUludGVydmFsIHN3ZWVwVGltZU11bAogCiB2b2lkIEluY3JlbWVudGFsU3dl
ZXBlcjo6ZG9Xb3JrKCkKIHsKLSAgICBBUElFbnRyeVNoaW0gc2hpbShtX2dsb2JhbERhdGEpOwog
ICAgIGRvU3dlZXAoV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CiB9CiAgICAg
CkBAIC0zMCw5ICsyOSw5IEBAIEluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVy
KEgKIHsKIH0KIAotUGFzc093blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IEluY3JlbWVudGFsU3dl
ZXBlcjo6Y3JlYXRlKEhlYXAqIGhlYXApCitJbmNyZW1lbnRhbFN3ZWVwZXIqIEluY3JlbWVudGFs
U3dlZXBlcjo6Y3JlYXRlKEhlYXAqIGhlYXApCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJ
bmNyZW1lbnRhbFN3ZWVwZXIoaGVhcCwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKSk7CisgICAgcmV0
dXJuIG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIoaGVhcCwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKTsK
IH0KIAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnNjaGVkdWxlVGltZXIoKQpAQCAtODQsOSAr
ODMsOSBAQCB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6ZG9Xb3JrKCkKIHsKIH0KIAotUGFzc093
blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhlYXAq
IGhlYXApCitJbmNyZW1lbnRhbFN3ZWVwZXIqIEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhl
YXAqIGhlYXApCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIo
aGVhcC0+Z2xvYmFsRGF0YSgpKSk7CisgICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIo
aGVhcC0+Z2xvYmFsRGF0YSgpKTsKIH0KIAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0
U3dlZXBpbmcoY29uc3QgSGFzaFNldDxNYXJrZWRCbG9jayo+JikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQsNyArMTQsNyBAQCBjbGFzcyBIZWFwOwogICAgIAogY2xhc3Mg
SW5jcmVtZW50YWxTd2VlcGVyIDogcHVibGljIEhlYXBUaW1lciB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPiBjcmVhdGUoSGVhcCopOworICAgIHN0
YXRpYyBJbmNyZW1lbnRhbFN3ZWVwZXIqIGNyZWF0ZShIZWFwKik7CiAgICAgdm9pZCBzdGFydFN3
ZWVwaW5nKGNvbnN0IEhhc2hTZXQ8TWFya2VkQmxvY2sqPiYgYmxvY2tTbmFwc2hvdCk7CiAgICAg
dmlydHVhbCB2b2lkIGRvV29yaygpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMsNiArMyw3IEBACiAKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRl
ICJIZWFwLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTYsNiArNTcsNyBAQCBpbmxpbmUgdm9p
ZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0CiAgICAgCiB2b2lkKiBNYXJrZWRBbGxvY2F0
b3I6OmFsbG9jYXRlU2xvd0Nhc2UoKQogeworICAgIEFTU0VSVChtX2hlYXAtPmdsb2JhbERhdGEo
KS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogI2lmIENPTExFQ1Rf
T05fRVZFUllfQUxMT0NBVElPTgogICAgIG1faGVhcC0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAg
ICBBU1NFUlQobV9oZWFwLT5tX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAx
MjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjcsOCArMTI3LDEwIEBAIHZvaWQgV2Vha0Jsb2NrOjpyZWFwKCkKICAg
ICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpID4gV2Vha0ltcGw6OkRlYWQpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQod2Vha0ltcGwtPmpzVmFs
dWUoKS5hc0NlbGwoKSkpCisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh3ZWFrSW1wbC0+anNW
YWx1ZSgpLmFzQ2VsbCgpKSkgeworICAgICAgICAgICAgQVNTRVJUKHdlYWtJbXBsLT5zdGF0ZSgp
ID09IFdlYWtJbXBsOjpMaXZlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAK
ICAgICAgICAgd2Vha0ltcGwtPnNldFN0YXRlKFdlYWtJbXBsOjpEZWFkKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGJv
b2wgY2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IEpTVmFsdWUqIHJldHVybmVkRXhjZXB0aW9uKQogewotICAgIEpTTG9jayBsb2NrKGV4ZWMpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRh
KCkuaWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRh
YmxlKCkpOwogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0
YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CkBAIC01Myw3ICs1Myw3IEBAIGJvb2wgY2hlY2tT
eW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCAKIAogSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlKiByZXR1cm5lZEV4Y2VwdGlvbikKIHsK
LSAgICBKU0xvY2sgbG9jayhleGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWRE
YXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0
YSgpLmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICBDUkFTSCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgJKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlD
YWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHByb3RlY3RlZDoKIAog
Y2xhc3MgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayA6IHB1YmxpYyBHQ0FjdGl2aXR5Q2FsbGJh
Y2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPERlZmF1bHRHQ0FjdGl2aXR5Q2Fs
bGJhY2s+IGNyZWF0ZShIZWFwKik7CisgICAgc3RhdGljIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJh
Y2sqIGNyZWF0ZShIZWFwKik7CiAKICAgICBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKEhlYXAq
KTsKIApAQCAtOTEsOSArOTEsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1pbmxpbmUgUGFz
c093blB0cjxEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrPiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxi
YWNrOjpjcmVhdGUoSGVhcCogaGVhcCkKK2lubGluZSBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNr
KiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcCkpOworICAg
IHJldHVybiBuZXcgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayhoZWFwKTsKIH0KIAogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxMCBAQAogI2luY2x1ZGUgIkNv
bW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgiCiAjaW5j
bHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFj
ay5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJu
VmFsdWUuaCIKKyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTQVBJVmFs
dWVXcmFwcGVyLmgiCkBAIC0xNzgsMTIgKzE4MCw5IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxE
YXRhKEdsb2JhbERhdGFUeXAKIHsKICAgICBpbnRlcnByZXRlciA9IG5ldyBJbnRlcnByZXRlcjsK
IAotICAgIGlmIChpc1NoYXJlZEluc3RhbmNlKCkpCi0gICAgICAgIHR1cm5PZmZWZXJpZmllcigp
OwotCiAgICAgLy8gTmVlZCB0byBiZSBjYXJlZnVsIHRvIGtlZXAgZXZlcnl0aGluZyBjb25zaXN0
ZW50IGhlcmUKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh0aGlzKTsKICAgICBJZGVudGlmaWVyVGFi
bGUqIGV4aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWREYXRhKCkuc2V0Q3Vy
cmVudElkZW50aWZpZXJUYWJsZShpZGVudGlmaWVyVGFibGUpOwotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgc3RydWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywg
U3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMpKTsKICAgICBkZWJ1Z2dlckFjdGl2YXRp
b25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBhY3RpdmF0aW9uU3RydWN0dXJlLnNldCgqdGhp
cywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkBA
IC0yMjIsNiArMjIxLDkgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5
cAogCiBKU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQogeworICAgIEFTU0VSVCghbV9hcGlM
b2NrLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOworICAgIGhlYXAuYWN0aXZpdHlDYWxs
YmFjaygpLT5kaWRTdGFydFZNU2h1dGRvd24oKTsKKyAgICBoZWFwLnN3ZWVwZXIoKS0+ZGlkU3Rh
cnRWTVNodXRkb3duKCk7CiAgICAgaGVhcC5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogCiAgICAg
ZGVsZXRlIGludGVycHJldGVyOwpAQCAtMzExLDYgKzMxMyw3IEBAIGJvb2wgSlNHbG9iYWxEYXRh
OjpzaGFyZWRJbnN0YW5jZUV4aXN0cygKIAogSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNo
YXJlZEluc3RhbmNlKCkKIHsKKyAgICBHbG9iYWxKU0xvY2sgZ2xvYmFsTG9jazsKICAgICBKU0ds
b2JhbERhdGEqJiBpbnN0YW5jZSA9IHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKICAgICBpZiAo
IWluc3RhbmNlKSB7CiAgICAgICAgIGluc3RhbmNlID0gYWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0
YShBUElTaGFyZWQsIFRocmVhZFN0YWNrVHlwZVNtYWxsLCBTbWFsbEhlYXApKS5sZWFrUmVmKCk7
CkBAIC0zMjEsNyArMzI0LDYgQEAgSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNoYXJlZElu
c3RhbgogCiBKU0dsb2JhbERhdGEqJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlSW50ZXJu
YWwoKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkp
OwogICAgIHN0YXRpYyBKU0dsb2JhbERhdGEqIHNoYXJlZEluc3RhbmNlOwogICAgIHJldHVybiBz
aGFyZWRJbnN0YW5jZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBA
QAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbnRyaW5zaWMuaCIKICNpbmNsdWRlICJK
SVRTdHVicy5oIgorI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKICNp
bmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJOdW1lcmljU3RyaW5ncy5oIgpAQCAtNDYs
OCArNDcsOCBAQAogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZp
Yy5oPgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaWYgRU5BQkxFKFJFR0VYUF9U
UkFDSU5HKQpAQCAtMTUyLDcgKzE1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAjZW5k
aWYKIAotICAgIGNsYXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEpTR2xvYmFs
RGF0YT4geworICAgIGNsYXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxKU0dsb2JhbERhdGE+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIC8vIFdlYkNvcmUgaGFz
IGEgb25lLXRvLW9uZSBtYXBwaW5nIG9mIHRocmVhZHMgdG8gSlNHbG9iYWxEYXRhczsKICAgICAg
ICAgLy8gZWl0aGVyIGNyZWF0ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBvbmNlCkBAIC0xODAsNiArMTgxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHZvaWQgbWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGluZVRocmVh
ZHMoKS5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOyB9CiAKKyAgICBwcml2YXRlOgor
ICAgICAgICBKU0xvY2sgbV9hcGlMb2NrOworCisgICAgcHVibGljOgogICAgICAgICBIZWFwIGhl
YXA7IC8vIFRoZSBoZWFwIGlzIG91ciBmaXJzdCBkYXRhIG1lbWJlciB0byBlbnN1cmUgdGhhdCBp
dCdzIGRlc3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJlbmNlIGl0Lgog
CiAgICAgICAgIEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlOwpAQCAtNDA5LDYgKzQxNCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihm
bG9hdDY0LCBGbG9hdDY0KTsKICN1bmRlZiByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbgogCisg
ICAgICAgIEpTTG9jayYgYXBpTG9jaygpIHsgcmV0dXJuIG1fYXBpTG9jazsgfQorCiAgICAgcHJp
dmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw4ICsxMTQsNiBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIGlubGluZSB2b2lkCiAKIEpTR2xvYmFsT2Jq
ZWN0Ojp+SlNHbG9iYWxPYmplY3QoKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdMb2NrKCkpOwotCiAgICAgaWYgKG1fZGVidWdnZXIpCiAgICAgICAgIG1fZGVi
dWdnZXItPmRldGFjaCh0aGlzKTsKIApAQCAtMTMwLDcgKzEyOCw3IEBAIHZvaWQgSlNHbG9iYWxP
YmplY3Q6OmRlc3Ryb3koSlNDZWxsKiBjZWwKIAogdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChK
U09iamVjdCogdGhpc1ZhbHVlKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCkpOworICAgIEFTU0VSVChnbG9iYWxEYXRhKCkuYXBpTG9jaygpLmN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIAogICAgIG1fZ2xvYmFsU2NvcGVDaGFpbi5z
ZXQoZ2xvYmFsRGF0YSgpLCB0aGlzLCBTY29wZUNoYWluTm9kZTo6Y3JlYXRlKDAsIHRoaXMsICZn
bG9iYWxEYXRhKCksIHRoaXMsIHRoaXNWYWx1ZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIz
LDcgQEAKIAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNs
dWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAi
U2NvcGVDaGFpbi5oIgogCkBAIC0zOCw5NCArMzksOTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYg
KE9TKERBUldJTikgfHwgVVNFKFBUSFJFQURTKSkKIAogLy8gQWNxdWlyZSB0aGlzIG11dGV4IGJl
Zm9yZSBhY2Nlc3NpbmcgbG9jay1yZWxhdGVkIGRhdGEuCi1zdGF0aWMgcHRocmVhZF9tdXRleF90
IEpTTXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHB0aHJlYWRfbXV0
ZXhfdCBnaWFudEdsb2JhbEpTTG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CiAKLS8v
IFRocmVhZC1zcGVjaWZpYyBrZXkgdGhhdCB0ZWxscyB3aGV0aGVyIGEgdGhyZWFkIGhvbGRzIHRo
ZSBKU011dGV4LCBhbmQgaG93IG1hbnkgdGltZXMgaXQgd2FzIHRha2VuIHJlY3Vyc2l2ZWx5Lgot
cHRocmVhZF9rZXlfdCBKU0xvY2tDb3VudDsKK0dsb2JhbEpTTG9jazo6R2xvYmFsSlNMb2NrKCkK
K3sKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJmdpYW50R2xvYmFsSlNMb2NrKTsKK30KIAotc3Rh
dGljIHZvaWQgY3JlYXRlSlNMb2NrQ291bnQoKQorR2xvYmFsSlNMb2NrOjp+R2xvYmFsSlNMb2Nr
KCkKIHsKLSAgICBwdGhyZWFkX2tleV9jcmVhdGUoJkpTTG9ja0NvdW50LCAwKTsKKyAgICBwdGhy
ZWFkX211dGV4X3VubG9jaygmZ2lhbnRHbG9iYWxKU0xvY2spOwogfQogCi1wdGhyZWFkX29uY2Vf
dCBjcmVhdGVKU0xvY2tDb3VudE9uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKK0pTTG9ja0hvbGRl
cjo6SlNMb2NrSG9sZGVyKEV4ZWNTdGF0ZSogZXhlYykKKyAgICA6IG1fZ2xvYmFsRGF0YSgmZXhl
Yy0+Z2xvYmFsRGF0YSgpKQoreworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsK
K30KIAotLy8gTG9jayBuZXN0aW5nIGNvdW50LgotaW50cHRyX3QgSlNMb2NrOjpsb2NrQ291bnQo
KQorSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQor
ICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiB7Ci0gICAgcHRocmVhZF9vbmNlKCZjcmVh
dGVKU0xvY2tDb3VudE9uY2UsIGNyZWF0ZUpTTG9ja0NvdW50KTsKKyAgICBtX2dsb2JhbERhdGEt
PmFwaUxvY2soKS5sb2NrKCk7Cit9CiAKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4ocHRocmVhZF9nZXRzcGVjaWZpYyhKU0xvY2tDb3VudCkpOworSlNMb2NrSG9sZGVyOjpK
U0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIDogbV9nbG9iYWxEYXRh
KCZnbG9iYWxEYXRhKQoreworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKIH0K
IAotc3RhdGljIHZvaWQgc2V0TG9ja0NvdW50KGludHB0cl90IGNvdW50KQorSlNMb2NrSG9sZGVy
Ojp+SlNMb2NrSG9sZGVyKCkKIHsKLSAgICBBU1NFUlQoY291bnQgPj0gMCk7Ci0gICAgcHRocmVh
ZF9zZXRzcGVjaWZpYyhKU0xvY2tDb3VudCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY291bnQp
KTsKKyAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS51bmxvY2soKTsKIH0KIAotSlNMb2NrOjpK
U0xvY2soRXhlY1N0YXRlKiBleGVjKQotICAgIDogbV9sb2NrQmVoYXZpb3IoZXhlYy0+Z2xvYmFs
RGF0YSgpLmlzU2hhcmVkSW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlv
bnNPbmx5KQorSlNMb2NrOjpKU0xvY2soKQorICAgIDogbV9sb2NrQ291bnQoMCkKIHsKLSAgICBs
b2NrKG1fbG9ja0JlaGF2aW9yKTsKKyAgICBtX3NwaW5Mb2NrLkluaXQoKTsKIH0KIAotSlNMb2Nr
OjpKU0xvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgIDogbV9sb2NrQmVoYXZpb3Io
Z2xvYmFsRGF0YS0+aXNTaGFyZWRJbnN0YW5jZSgpID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpCitKU0xvY2s6On5KU0xvY2soKQogewotICAgIGxvY2sobV9sb2NrQmVoYXZp
b3IpOwogfQogCi12b2lkIEpTTG9jazo6bG9jayhKU0xvY2tCZWhhdmlvciBsb2NrQmVoYXZpb3Ip
Cit2b2lkIEpTTG9jazo6bG9jaygpCiB7Ci0jaWZkZWYgTkRFQlVHCi0gICAgLy8gTG9ja2luZyAi
bm90IGZvciByZWFsIiBpcyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICBpZiAobG9ja0JlaGF2
aW9yID09IFNpbGVuY2VBc3NlcnRpb25zT25seSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCisg
ICAgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkID0gV1RGOjpjdXJyZW50VGhyZWFkKCk7
CisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJm1fc3BpbkxvY2spOworICAg
ICAgICBpZiAobV9vd25lclRocmVhZCA9PSBjdXJyZW50VGhyZWFkICYmIG1fbG9ja0NvdW50KSB7
CisgICAgICAgICAgICBtX2xvY2tDb3VudCsrOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQogCi0gICAgcHRocmVhZF9vbmNlKCZjcmVhdGVKU0xvY2tDb3VudE9uY2UsIGNy
ZWF0ZUpTTG9ja0NvdW50KTsKKyAgICBtX2xvY2subG9jaygpOwogCi0gICAgaW50cHRyX3QgY3Vy
cmVudExvY2tDb3VudCA9IGxvY2tDb3VudCgpOwotICAgIGlmICghY3VycmVudExvY2tDb3VudCAm
JiBsb2NrQmVoYXZpb3IgPT0gTG9ja0ZvclJlYWwpIHsKLSAgICAgICAgaW50IHJlc3VsdCA9IHB0
aHJlYWRfbXV0ZXhfbG9jaygmSlNNdXRleCk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0
LCAhcmVzdWx0KTsKKyAgICB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmbV9zcGlu
TG9jayk7CisgICAgICAgIG1fb3duZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkOworICAgICAgICBB
U1NFUlQoIW1fbG9ja0NvdW50KTsKKyAgICAgICAgbV9sb2NrQ291bnQgPSAxOwogICAgIH0KLSAg
ICBzZXRMb2NrQ291bnQoY3VycmVudExvY2tDb3VudCArIDEpOwogfQogCi12b2lkIEpTTG9jazo6
dW5sb2NrKEpTTG9ja0JlaGF2aW9yIGxvY2tCZWhhdmlvcikKK3ZvaWQgSlNMb2NrOjp1bmxvY2so
KQogewotICAgIEFTU0VSVChsb2NrQ291bnQoKSk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCkpOwogCi0jaWZkZWYgTkRFQlVHCi0gICAgLy8gTG9ja2luZyAibm90IGZv
ciByZWFsIiBpcyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICBpZiAobG9ja0JlaGF2aW9yID09
IFNpbGVuY2VBc3NlcnRpb25zT25seSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCisgICAgU3Bp
bkxvY2tIb2xkZXIgaG9sZGVyKCZtX3NwaW5Mb2NrKTsKKyAgICBtX2xvY2tDb3VudC0tOwogCi0g
ICAgaW50cHRyX3QgbmV3TG9ja0NvdW50ID0gbG9ja0NvdW50KCkgLSAxOwotICAgIHNldExvY2tD
b3VudChuZXdMb2NrQ291bnQpOwotICAgIGlmICghbmV3TG9ja0NvdW50ICYmIGxvY2tCZWhhdmlv
ciA9PSBMb2NrRm9yUmVhbCkgewotICAgICAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9tdXRleF91
bmxvY2soJkpTTXV0ZXgpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJlc3VsdCk7
Ci0gICAgfQorICAgIGlmICghbV9sb2NrQ291bnQpCisgICAgICAgIG1fbG9jay51bmxvY2soKTsK
IH0KIAogdm9pZCBKU0xvY2s6OmxvY2soRXhlY1N0YXRlKiBleGVjKQogewotICAgIGxvY2soZXhl
Yy0+Z2xvYmFsRGF0YSgpLmlzU2hhcmVkSW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBleGVjLT5nbG9iYWxEYXRhKCkuYXBpTG9jaygpLmxvY2so
KTsKIH0KIAogdm9pZCBKU0xvY2s6OnVubG9jayhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgdW5s
b2NrKGV4ZWMtPmdsb2JhbERhdGEoKS5pc1NoYXJlZEluc3RhbmNlKCkgPyBMb2NrRm9yUmVhbCA6
IFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmFwaUxvY2so
KS51bmxvY2soKTsKIH0KIAogYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2Nr
KCkKIHsKLSAgICBwdGhyZWFkX29uY2UoJmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNM
b2NrQ291bnQpOwotICAgIHJldHVybiAhIXB0aHJlYWRfZ2V0c3BlY2lmaWMoSlNMb2NrQ291bnQp
OworICAgIHJldHVybiBtX2xvY2tDb3VudCAmJiBtX293bmVyVGhyZWFkID09IFdURjo6Y3VycmVu
dFRocmVhZCgpOwogfQogCiAvLyBUaGlzIGlzIGZhaXJseSBuYXN0eS4gIFdlIGFsbG93IG11bHRp
cGxlIHRocmVhZHMgdG8gcnVuIG9uIHRoZSBzYW1lCkBAIC0xNDksNyArMTUyLDcgQEAgYm9vbCBK
U0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKAogLy8gdGhpcyB0byBoYXBwZW4sIGFu
ZCB3ZXJlIGl0cyBzdGFjayB0byBncm93IGZ1cnRoZXIsIHRoZW4gaXQgbWF5IHBvdGVudGlhbGx5
CiAvLyB3cml0ZSBvdmVyIHRoZSBzZWNvbmQgdGhyZWFkJ3MgY2FsbCBmcmFtZXMuCiAvLwotLy8g
SW4gYXZvaWQgSlMgc3RhY2sgY29ycnVwdGlvbiB3ZSBlbmZvcmNlIGEgcG9saWN5IG9mIG9ubHkg
ZXZlciBhbGxvd2luZyB0d28KKy8vIFRvIGF2b2lkIEpTIHN0YWNrIGNvcnJ1cHRpb24gd2UgZW5m
b3JjZSBhIHBvbGljeSBvZiBvbmx5IGV2ZXIgYWxsb3dpbmcgdHdvCiAvLyB0aHJlYWRzIHRvIHVz
ZSBhIEpTIGNvbnRleHQgY29uY3VycmVudGx5LCBhbmQgb25seSBhbGxvd2luZyB0aGUgc2Vjb25k
IG9mCiAvLyB0aGVzZSB0aHJlYWRzIHRvIGV4ZWN1dGUgdW50aWwgaXQgaGFzIGNvbXBsZXRlZCBh
bmQgZnVsbHkgcmV0dXJuZWQgZnJvbSBpdHMKIC8vIG91dGVybW9zdCBjYWxsIGludG8gSlNDLiAg
V2UgZW5mb3JjZSB0aGlzIHBvbGljeSB1c2luZyAnbG9ja0Ryb3BEZXB0aCcuICBUaGUKQEAgLTE1
OCw3ICsxNjEsNyBAQCBib29sIEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soCiAv
LyBzYW1lIHRocmVhZCBhZ2FpbiwgZW50ZXIgSlNDICh0aHJvdWdoIGV2YWx1YXRlIHNjcmlwdCBv
ciBjYWxsIGZ1bmN0aW9uKSwgYW5kIGV4aXQKIC8vIGFnYWluIHRocm91Z2ggYSBjYWxsYmFjaywg
dGhlbiB0aGUgbG9ja3Mgd2lsbCBub3QgYmUgZHJvcHBlZCB3aGVuIERyb3BBbGxMb2NrcwogLy8g
aXMgY2FsbGVkIChzaW5jZSBsb2NrRHJvcERlcHRoIGlzIG5vbi16ZXJvKS4gIFNpbmNlIHRoaXMg
dGhyZWFkIGlzIHN0aWxsIGhvbGRpbmcKLS8vIHRoZSBsb2Nrcywgb25seSBpdCB3aWxsIHJlIGFi
bGUgdG8gcmUtZW50ZXIgSlNDIChlaXRoZXIgYmUgcmV0dXJuaW5nIGZyb20gdGhlCisvLyB0aGUg
bG9ja3MsIG9ubHkgaXQgd2lsbCBiZSBhYmxlIHRvIHJlLWVudGVyIEpTQyAoZWl0aGVyIGJlIHJl
dHVybmluZyBmcm9tIHRoZQogLy8gY2FsbGJhY2ssIG9yIGJ5IHJlLWVudGVyaW5nIHRocm91Z2gg
YW5vdGhlciBjYWxsIHRvIGV2YXVsYXRlIHNjcmlwdCBvciBjYWxsCiAvLyBmdW5jdGlvbikuCiAv
LwpAQCAtMTY4LDc0ICsxNzEsNjkgQEAgYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdMb2NrKAogLy8gb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIG1hZGUgLSB0aG91Z2ggaW1wbGVt
ZW50aW5nIHRoZSBsZXNzIHJlc3RyaWN0aXZlIHBvbGljeQogLy8gd291bGQgbGlrZWx5IGluY3Jl
YXNlIGNvbXBsZXhpdHkgYW5kIG92ZXJoZWFkLgogLy8KLXN0YXRpYyB1bnNpZ25lZCBsb2NrRHJv
cERlcHRoID0gMDsKIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhFeGVjU3Rh
dGUqIGV4ZWMpCi0gICAgOiBtX2xvY2tCZWhhdmlvcihleGVjLT5nbG9iYWxEYXRhKCkuaXNTaGFy
ZWRJbnN0YW5jZSgpID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpCisvLyBU
aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBsb2NrcyB0aGF0IHdlcmUgZHJvcHBl
ZC4KK3Vuc2lnbmVkIEpTTG9jazo6ZHJvcEFsbExvY2tzKCkKIHsKLSAgICBwdGhyZWFkX29uY2Uo
JmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNMb2NrQ291bnQpOwotCi0gICAgaWYgKGxv
Y2tEcm9wRGVwdGgrKykgewotICAgICAgICBtX2xvY2tDb3VudCA9IDA7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKG1fbG9ja0Ryb3BEZXB0aCsrKQorICAgICAgICByZXR1cm4gMDsK
IAotICAgIG1fbG9ja0NvdW50ID0gSlNMb2NrOjpsb2NrQ291bnQoKTsKLSAgICBmb3IgKGludHB0
cl90IGkgPSAwOyBpIDwgbV9sb2NrQ291bnQ7IGkrKykKLSAgICAgICAgSlNMb2NrOjp1bmxvY2so
bV9sb2NrQmVoYXZpb3IpOworICAgIHJldHVybiBkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHko
KTsKIH0KIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhKU0xvY2tCZWhhdmlv
ciBKU0xvY2tCZWhhdmlvcikKLSAgICA6IG1fbG9ja0JlaGF2aW9yKEpTTG9ja0JlaGF2aW9yKQor
dW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoKQogewotICAgIHB0
aHJlYWRfb25jZSgmY3JlYXRlSlNMb2NrQ291bnRPbmNlLCBjcmVhdGVKU0xvY2tDb3VudCk7Cisg
ICAgdW5zaWduZWQgbG9ja0NvdW50ID0gbV9sb2NrQ291bnQ7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxvY2tDb3VudDsgaSsrKQorICAgICAgICB1bmxvY2soKTsKIAotICAgIGlmIChs
b2NrRHJvcERlcHRoKyspIHsKLSAgICAgICAgbV9sb2NrQ291bnQgPSAwOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIHJldHVybiBsb2NrQ291bnQ7Cit9CiAKLSAgICAvLyBJdCBpcyBuZWNl
c3NhcnkgdG8gZHJvcCBldmVuICJ1bnJlYWwiIGxvY2tzLCBiZWNhdXNlIGhhdmluZyBhIG5vbi16
ZXJvIGxvY2sgY291bnQKLSAgICAvLyB3aWxsIHByZXZlbnQgYSByZWFsIGxvY2sgZnJvbSBiZWlu
ZyB0YWtlbi4KK3ZvaWQgSlNMb2NrOjpncmFiQWxsTG9ja3ModW5zaWduZWQgbG9ja0NvdW50KQor
eworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsb2NrQ291bnQ7IGkrKykKKyAgICAgICAg
bG9jaygpOwogCi0gICAgbV9sb2NrQ291bnQgPSBKU0xvY2s6OmxvY2tDb3VudCgpOwotICAgIGZv
ciAoaW50cHRyX3QgaSA9IDA7IGkgPCBtX2xvY2tDb3VudDsgaSsrKQotICAgICAgICBKU0xvY2s6
OnVubG9jayhtX2xvY2tCZWhhdmlvcik7CisgICAgbV9sb2NrRHJvcERlcHRoLS07CiB9CiAKLUpT
TG9jazo6RHJvcEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKCkKK0pTTG9jazo6RHJvcEFsbExvY2tz
OjpEcm9wQWxsTG9ja3MoRXhlY1N0YXRlKiBleGVjKQorICAgIDogbV9sb2NrQ291bnQoMCkKKyAg
ICAsIG1fZ2xvYmFsRGF0YSgmZXhlYy0+Z2xvYmFsRGF0YSgpKQogewotICAgIGZvciAoaW50cHRy
X3QgaSA9IDA7IGkgPCBtX2xvY2tDb3VudDsgaSsrKQotICAgICAgICBKU0xvY2s6OmxvY2sobV9s
b2NrQmVoYXZpb3IpOwotCi0gICAgLS1sb2NrRHJvcERlcHRoOworICAgIG1fbG9ja0NvdW50ID0g
bV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZHJvcEFsbExvY2tzKCk7CiB9CiAKLSNlbHNlIC8vIChP
UyhEQVJXSU4pIHx8IFVTRShQVEhSRUFEUykpCitKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFs
bExvY2tzKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKKyAgICA6IG1fbG9ja0NvdW50KDApCisg
ICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKK3sKKyAgICBtX2xvY2tDb3VudCA9IG1fZ2xv
YmFsRGF0YS0+YXBpTG9jaygpLmRyb3BBbGxMb2NrcygpOworfQogCi1KU0xvY2s6OkpTTG9jayhF
eGVjU3RhdGUqKQotICAgIDogbV9sb2NrQmVoYXZpb3IoU2lsZW5jZUFzc2VydGlvbnNPbmx5KQor
SlNMb2NrOjpEcm9wQWxsTG9ja3M6On5Ecm9wQWxsTG9ja3MoKQogeworICAgIG1fZ2xvYmFsRGF0
YS0+YXBpTG9jaygpLmdyYWJBbGxMb2NrcyhtX2xvY2tDb3VudCk7CiB9CiAKLS8vIElmIHRocmVh
ZGluZyBzdXBwb3J0IGlzIG9mZiwgc2V0IHRoZSBsb2NrIGNvdW50IHRvIGEgY29uc3RhbnQgdmFs
dWUgb2YgMSBzbyBzc2VydGlvbnMKLS8vIHRoYXQgdGhlIGxvY2sgaXMgaGVsZCBkb24ndCBmYWls
Ci1pbnRwdHJfdCBKU0xvY2s6OmxvY2tDb3VudCgpCisjZWxzZSAvLyAoT1MoREFSV0lOKSB8fCBV
U0UoUFRIUkVBRFMpKQorCitHbG9iYWxKU0xvY2s6Okdsb2JhbEpTTG9jaygpCiB7Ci0gICAgcmV0
dXJuIDE7CiB9CiAKLWJvb2wgSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpCitH
bG9iYWxKU0xvY2s6On5HbG9iYWxKU0xvY2soKQogewotICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIEpTTG9jazo6bG9jayhKU0xvY2tCZWhhdmlvcikKK0pTTG9jazo6SlNMb2NrKEV4ZWNTdGF0
ZSopCiB7CiB9CiAKLXZvaWQgSlNMb2NrOjp1bmxvY2soSlNMb2NrQmVoYXZpb3IpCitib29sIEpT
TG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKQogeworICAgIHJldHVybiB0cnVlOwog
fQogCiB2b2lkIEpTTG9jazo6bG9jayhFeGVjU3RhdGUqKQpAQCAtMjUwLDEwICsyNDgsNiBAQCBK
U0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKEV4ZWNTCiB7CiB9CiAKLUpTTG9jazo6
RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoSlNMb2NrQmVoYXZpb3IpCi17Ci19Ci0KIEpTTG9j
azo6RHJvcEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMs
OSBAQAogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RDU3Bpbkxv
Y2suaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC0zMCw4ICszMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8vIGltcG9ydGFudCB0byBsb2Nr
IGJlZm9yZSBkb2luZyBhbnl0aGluZyB0aGF0IGFsbG9jYXRlcyBhCiAgICAgLy8gSmF2YVNjcmlw
dCBkYXRhIHN0cnVjdHVyZSBvciB0aGF0IGludGVyYWN0cyB3aXRoIHNoYXJlZCBzdGF0ZQogICAg
IC8vIHN1Y2ggYXMgdGhlIHByb3RlY3QgY291bnQgaGFzaCB0YWJsZS4gVGhlIHNpbXBsZXN0IHdh
eSB0byBsb2NrCi0gICAgLy8gaXMgdG8gY3JlYXRlIGEgbG9jYWwgSlNMb2NrIG9iamVjdCBpbiB0
aGUgc2NvcGUgd2hlcmUgdGhlIGxvY2sgCi0gICAgLy8gbXVzdCBiZSBoZWxkLiBUaGUgbG9jayBp
cyByZWN1cnNpdmUgc28gbmVzdGluZyBpcyBvay4gVGhlIEpTTG9jayAKKyAgICAvLyBpcyB0byBj
cmVhdGUgYSBsb2NhbCBKU0xvY2tIb2xkZXIgb2JqZWN0IGluIHRoZSBzY29wZSB3aGVyZSB0aGUg
bG9jayAKKyAgICAvLyBtdXN0IGJlIGhlbGQgYW5kIHBhc3MgaXQgdGhlIGNvbnRleHQgdGhhdCBy
ZXF1aXJlcyBwcm90ZWN0aW9uLiAKKyAgICAvLyBUaGUgbG9jayBpcyByZWN1cnNpdmUgc28gbmVz
dGluZyBpcyBvay4gVGhlIEpTTG9jayAKICAgICAvLyBvYmplY3QgYWxzbyBhY3RzIGFzIGEgY29u
dmVuaWVuY2Ugc2hvcnQtaGFuZCBmb3IgcnVubmluZyBpbXBvcnRhbnQKICAgICAvLyBpbml0aWFs
aXphdGlvbiByb3V0aW5lcy4KIApAQCAtNDQsNjIgKzQ4LDY1IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIC8vIERyb3BBbGxMb2NrcyBvYmplY3QgdGFrZXMgY2FyZSB0byByZWxlYXNlIHRoZSBKU0xv
Y2sgb25seSBpZiB5b3VyCiAgICAgLy8gdGhyZWFkIGFjcXVpcmVkIGl0IHRvIGJlZ2luIHdpdGgu
CiAKLSAgICAvLyBGb3IgY29udGV4dHMgb3RoZXIgdGhhbiB0aGUgc2luZ2xlIHNoYXJlZCBvbmUs
IGltcGxpY2l0IGxvY2tpbmcgaXMgbm90IGRvbmUsCi0gICAgLy8gYnV0IHdlIHN0aWxsIG5lZWQg
dG8gcGVyZm9ybSBhbGwgdGhlIGNvdW50aW5nIGluIG9yZGVyIHRvIGtlZXAgZGVidWcKLSAgICAv
LyBhc3NlcnRpb25zIHdvcmtpbmcsIHNvIHRoYXQgY2xpZW50cyB0aGF0IHVzZSB0aGUgc2hhcmVk
IGNvbnRleHQgZG9uJ3QgYnJlYWsuCi0KICAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3Mg
SlNHbG9iYWxEYXRhOwogCi0gICAgZW51bSBKU0xvY2tCZWhhdmlvciB7IFNpbGVuY2VBc3NlcnRp
b25zT25seSwgTG9ja0ZvclJlYWwgfTsKKyAgICAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gcHJv
dGVjdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGxlZ2FjeSBzaW5nbGUgCisgICAgLy8gc2hh
cmVkIEpTR2xvYmFsRGF0YS4KKyAgICBjbGFzcyBHbG9iYWxKU0xvY2sgeworICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShHbG9iYWxKU0xvY2spOworICAgIHB1YmxpYzoKKyAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgR2xvYmFsSlNMb2NrKCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IH5HbG9iYWxKU0xvY2soKTsKKyAgICB9OworCisgICAgY2xhc3MgSlNMb2NrSG9sZGVyIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTTG9ja0hvbGRlcihKU0dsb2Jh
bERhdGEqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNMb2NrSG9sZGVyKEpTR2xvYmFs
RGF0YSYpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0xvY2tIb2xkZXIoRXhlY1N0YXRl
Kik7CisKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9ja0hvbGRlcigpOworICAgIHBy
aXZhdGU6CisgICAgICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IG1fZ2xvYmFsRGF0YTsKKyAgICB9
OwogCiAgICAgY2xhc3MgSlNMb2NrIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSlNM
b2NrKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTTG9jayhFeGVj
U3RhdGUqKTsKLSAgICAgICAgSlNMb2NrKEpTR2xvYmFsRGF0YSopOworICAgICAgICBKU0xvY2so
KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9jaygpOworCisgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgbG9jaygpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHVubG9jaygpOwogCi0gICAgICAgIEpTTG9jayhKU0xvY2tCZWhhdmlvciBsb2NrQmVoYXZpb3Ip
Ci0gICAgICAgICAgICA6IG1fbG9ja0JlaGF2aW9yKGxvY2tCZWhhdmlvcikKLSAgICAgICAgewot
I2lmZGVmIE5ERUJVRwotICAgICAgICAgICAgLy8gTG9ja2luZyAibm90IGZvciByZWFsIiBpcyBh
IGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICAgICAgICAgIGlmIChsb2NrQmVoYXZpb3IgPT0gU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSNlbmRpZgotICAg
ICAgICAgICAgbG9jayhsb2NrQmVoYXZpb3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgfkpTTG9j
aygpCi0gICAgICAgIHsgCi0jaWZkZWYgTkRFQlVHCi0gICAgICAgICAgICAvLyBMb2NraW5nICJu
b3QgZm9yIHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0dXJlLgotICAgICAgICAgICAgaWYgKG1f
bG9ja0JlaGF2aW9yID09IFNpbGVuY2VBc3NlcnRpb25zT25seSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0jZW5kaWYKLSAgICAgICAgICAgIHVubG9jayhtX2xvY2tCZWhhdmlvcik7IAotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBs
b2NrKEpTTG9ja0JlaGF2aW9yKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgdW5sb2NrKEpTTG9ja0JlaGF2aW9yKTsKICAgICAgICAgc3RhdGljIHZvaWQgbG9jayhFeGVj
U3RhdGUqKTsKICAgICAgICAgc3RhdGljIHZvaWQgdW5sb2NrKEV4ZWNTdGF0ZSopOworICAgICAg
ICBzdGF0aWMgdm9pZCBsb2NrKEpTR2xvYmFsRGF0YSYpOworICAgICAgICBzdGF0aWMgdm9pZCB1
bmxvY2soSlNHbG9iYWxEYXRhJik7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IGludHB0cl90IGxvY2tDb3VudCgpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpOworICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7CiAKLSAgICAgICAgSlNMb2Nr
QmVoYXZpb3IgbV9sb2NrQmVoYXZpb3I7CisgICAgICAgIHVuc2lnbmVkIGRyb3BBbGxMb2Nrcygp
OworICAgICAgICB1bnNpZ25lZCBkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoKTsKKyAgICAg
ICAgdm9pZCBncmFiQWxsTG9ja3ModW5zaWduZWQgbG9ja0NvdW50KTsKKworICAgICAgICBTcGlu
TG9jayBtX3NwaW5Mb2NrOworICAgICAgICBNdXRleCBtX2xvY2s7CisgICAgICAgIFRocmVhZElk
ZW50aWZpZXIgbV9vd25lclRocmVhZDsKKyAgICAgICAgaW50cHRyX3QgbV9sb2NrQ291bnQ7Cisg
ICAgICAgIHVuc2lnbmVkIG1fbG9ja0Ryb3BEZXB0aDsKIAogICAgICAgICBjbGFzcyBEcm9wQWxs
TG9ja3MgewogICAgICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRHJvcEFsbExvY2tzKTsK
ICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRHJvcEFsbExv
Y2tzKEV4ZWNTdGF0ZSogZXhlYyk7Ci0gICAgICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBEcm9w
QWxsTG9ja3MoSlNMb2NrQmVoYXZpb3IpOworICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
RHJvcEFsbExvY2tzKEpTR2xvYmFsRGF0YSopOwogICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgfkRyb3BBbGxMb2NrcygpOwogICAgICAgICAgICAgCiAgICAgICAgIHByaXZhdGU6CiAgICAg
ICAgICAgICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKLSAgICAgICAgICAgIEpTTG9ja0JlaGF2aW9y
IG1fbG9ja0JlaGF2aW9yOworICAgICAgICAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gbV9nbG9i
YWxEYXRhOwogICAgICAgICB9OwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtHQ01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtHQ01hcC5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUs
OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0
RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJmltcGwtPmpzVmFsdWUoKSkpOwogICAgIH0K
IAotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIGNvbnN0IEtleVR5cGUmIGtleSwgRXh0ZXJu
YWxUeXBlIHZhbHVlKQorICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29u
c3QgS2V5VHlwZSYga2V5LCBFeHRlcm5hbFR5cGUgdmFsdWUpCiAgICAgeworICAgICAgICBBU1NF
UlRfVU5VU0VEKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCkpOwogICAgICAgICB0eXBlbmFtZSBNYXBUeXBlOjpBZGRSZXN1bHQgcmVz
dWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkp
CiAgICAgICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NyBAQAorMjAxMi0wNi0yMCAgTWFy
ayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBz
aG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEN1cnJlbnQgcmVncmVzc2lvbiB0ZXN0cyBh
cmUgc3VmZmljaWVudC4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNM
b2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNz
IGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRl
cmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uIEFsc28gYWRkZWQgYSBj
b3VwbGUgSlNMb2NrcyB0byBwbGFjZXMgdGhhdCBkaWRuJ3QgYWxyZWFkeSAKKyAgICAgICAgaGF2
ZSBpdCB0aGF0IG5lZWRlZCBpdC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0dDQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdD
Q29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29u
dHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9s
bGVyOjpkaXNjYXJkQWxsQ29tcGlsZWRDb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1
c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0
b21Wb2lkQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1
c3RvbVhQYXRoTlNSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVhQYXRo
TlNSZXNvbHZlcjo6bG9va3VwTmFtZXNwYWNlVVJJKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0Vycm9ySGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Vycm9ySGFuZGxlcjo6aGFu
ZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6bm9kZUFzU2NyaXB0VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3RlZE9iamVj
dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVJbmplY3RlZFNj
cmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNhbkFjY2Vz
c0luc3BlY3RlZFdpbmRvdyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0
ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFs
aXplSlNGdW5jdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJhY2tDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNNdXRhdGlvbkNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrOjpoYW5kbGVFdmVu
dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y2hlZHVsZWRBY3Rpb246OmV4ZWN1dGVGdW5jdGlvbkluQ29udGV4dCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OmV2YWx1YXRlSW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpj
bGVhcldpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6Omlu
aXRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2FjaGVhYmxlQmlu
ZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Ymlu
ZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6d2lu
ZG93U2NyaXB0TlBPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
anNPYmplY3RGb3JQbHVnaW5FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cyk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6Ondp
bmRvd1NjcmlwdE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlk
UGF1c2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5KToKKyAgICAgICAgKFdl
YkNvcmU6OmV2ZW50TGlzdGVuZXJIYW5kbGVyTG9jYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRGdW5jdGlvbkNhbGw6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25D
YWxsOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6OmNhbGwp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRH
bG9iYWxPYmplY3Q6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6
OnJlbW92ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRWYWx1ZTo6dG9JbnNwZWN0b3JWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRD
b250cm9sbGVyOjp+V29ya2VyU2NyaXB0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJTY3JpcHRDb250cm9sbGVyOjppbml0U2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clNjcmlwdENvbnRyb2xsZXI6OmRpc2FibGVFdmFsKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpj
L1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAgICAgKF9kaWRFeGVjdXRlKToKKyAgICAgICAgKC1b
V2ViU2NyaXB0T2JqZWN0IF9zZXRJbXA6b3JpZ2luUm9vdE9iamVjdDpyb290T2JqZWN0Ol0pOgor
ICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgX3NldE9yaWdpblJvb3RPYmplY3Q6YW5kUm9vdE9i
amVjdDpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGRlYWxsb2NdKToKKyAgICAgICAg
KC1bV2ViU2NyaXB0T2JqZWN0IGZpbmFsaXplXSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVj
dCBjYWxsV2ViU2NyaXB0TWV0aG9kOndpdGhBcmd1bWVudHM6XSk6CisgICAgICAgICgtW1dlYlNj
cmlwdE9iamVjdCBldmFsdWF0ZVdlYlNjcmlwdDpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2Jq
ZWN0IHNldFZhbHVlOmZvcktleTpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHZhbHVl
Rm9yS2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgcmVtb3ZlV2ViU2NyaXB0S2V5
Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgaGFzV2ViU2NyaXB0S2V5Ol0pOgorICAg
ICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc3RyaW5nUmVwcmVzZW50YXRpb25dKToKKyAgICAgICAg
KC1bV2ViU2NyaXB0T2JqZWN0IHdlYlNjcmlwdFZhbHVlQXRJbmRleDpdKToKKyAgICAgICAgKC1b
V2ViU2NyaXB0T2JqZWN0IHNldFdlYlNjcmlwdFZhbHVlQXRJbmRleDp2YWx1ZTpdKToKKyAgICAg
ICAgKCtbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpvcmlnaW5Sb290
T2JqZWN0OnJvb3RPYmplY3Q6XSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24pOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoTm9QYXJhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0p
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlBh
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhTdHJp
bmdMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhC
b29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1JlcXVp
cmVzVGhpc1RvUGFzcyk6CisgICAgICAgICogYnJpZGdlL05QX2pzb2JqZWN0LmNwcDoKKyAgICAg
ICAgKF9OUE5fSW52b2tlRGVmYXVsdCk6CisgICAgICAgIChfTlBOX0ludm9rZSk6CisgICAgICAg
IChfTlBOX0V2YWx1YXRlKToKKyAgICAgICAgKF9OUE5fR2V0UHJvcGVydHkpOgorICAgICAgICAo
X05QTl9TZXRQcm9wZXJ0eSk6CisgICAgICAgIChfTlBOX1JlbW92ZVByb3BlcnR5KToKKyAgICAg
ICAgKF9OUE5fSGFzUHJvcGVydHkpOgorICAgICAgICAoX05QTl9IYXNNZXRob2QpOgorICAgICAg
ICAoX05QTl9FbnVtZXJhdGUpOgorICAgICAgICAoX05QTl9Db25zdHJ1Y3QpOgorICAgICAgICAq
IGJyaWRnZS9jL2NfY2xhc3MuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0NsYXNzOjp+
Q0NsYXNzKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNDbGFzczo6bWV0aG9kc05hbWVkKToK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNDbGFzczo6ZmllbGROYW1lZCk6CisgICAgICAgICog
YnJpZGdlL2MvY19pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFu
Y2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZSk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpDSW5zdGFuY2U6Omludm9rZU1ldGhvZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpD
SW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
Q0luc3RhbmNlOjppbnZva2VDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0lu
c3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3J1bnRpbWUu
Y3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0ZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZSk6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZSk6Cisg
ICAgICAgICogYnJpZGdlL2MvY191dGlsaXR5LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OmNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZl
cnROUFZhcmlhbnRUb1ZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9qc29iamVjdC5t
bToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y2FsbCk6CisgICAgICAgIChKYXZhSlNPYmplY3Q6
OmV2YWwpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpnZXRNZW1iZXIpOgorICAgICAgICAoSmF2
YUpTT2JqZWN0OjpzZXRNZW1iZXIpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpyZW1vdmVNZW1i
ZXIpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpnZXRTbG90KToKKyAgICAgICAgKEphdmFKU09i
amVjdDo6c2V0U2xvdCk6CisgICAgICAgIChKYXZhSlNPYmplY3Q6OnRvU3RyaW5nKToKKyAgICAg
ICAgKEphdmFKU09iamVjdDo6Y29udmVydFZhbHVlVG9KT2JqZWN0KToKKyAgICAgICAgKEphdmFK
U09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pu
aV9vYmpjLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6ZGlzcGF0Y2hKTklDYWxsKToKKyAg
ICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHA6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb0pWYWx1ZSk6CisgICAgICAgICogYnJpZGdlL2pu
aS9qc2MvSmF2YUNsYXNzSlNDLmNwcDoKKyAgICAgICAgKEphdmFDbGFzczo6SmF2YUNsYXNzKToK
KyAgICAgICAgKEphdmFDbGFzczo6fkphdmFDbGFzcyk6CisgICAgICAgICogYnJpZGdlL2puaS9q
c2MvSmF2YUluc3RhbmNlSlNDLmNwcDoKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6c3RyaW5nVmFs
dWUpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3BwOgorICAgICAg
ICAoYXBwZW5kQ2xhc3NOYW1lKToKKyAgICAgICAgKEphdmFNZXRob2Q6OnNpZ25hdHVyZSk6Cisg
ICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YVN0cmluZ0pTQy5oOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6SmF2YVN0cmluZzo6SmF2YVN0cmluZyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpKYXZhU3RyaW5nOjp+SmF2YVN0cmluZyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZh
U3RyaW5nOjp1dGY4KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFTdHJpbmc6OmluaXQp
OgorICAgICAgICAqIGJyaWRnZS9qc2MvQnJpZGdlSlNDLmNwcDoKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6Okluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKiBicmlkZ2Uvb2Jq
Yy9vYmpjX2luc3RhbmNlLm1tOgorICAgICAgICAoT2JqY0luc3RhbmNlOjptb3ZlR2xvYmFsRXhj
ZXB0aW9uVG9FeGVjU3RhdGUpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjppbnZva2VPYmpjTWV0
aG9kKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZCk6CisgICAg
ICAgIChPYmpjSW5zdGFuY2U6OnNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCk6CisgICAgICAgIChP
YmpjSW5zdGFuY2U6OmdldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCk6CisgICAgICAgICogYnJpZGdl
L29iamMvb2JqY19ydW50aW1lLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2JqY0ZpZWxk
Ojp2YWx1ZUZyb21JbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjRmllbGQ6
OnNldFZhbHVlVG9JbnN0YW5jZSk6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY191dGlsaXR5
Lm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9PYmpjVmFsdWUpOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE5TU3RyaW5nVG9TdHJpbmcpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE9iamNWYWx1ZVRvVmFsdWUpOgorICAgICAgICAqIGJy
aWRnZS9xdC9xdF9pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdEluc3Rh
bmNlOjp+UXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpn
ZXRRdEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6Om5ld1J1
bnRpbWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwSW5zdGFuY2U6OmNyZWF0ZVBpeG1hcFJ1
bnRpbWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9ydW50aW1lLmNwcDoKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQpOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6Y29udmVydFFWYXJpYW50VG9WYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjYWxsKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNhbGwpOgorICAgICAgICAqIGJyaWRnZS9xdC9x
dF9ydW50aW1lX3F0NC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVU
b1FWYXJpYW50KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRRVmFyaWFudFRvVmFs
dWUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0YU1ldGhvZDo6Y2FsbCk6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpjYWxs
KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogaHRt
bC9IVE1MSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlTG9hZGVy
Ojpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGVyZm9ybVJl
cXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6bnBPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKToKKyAg
ICAgICAgKiBwbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpnZXRXaW5kb3dJbmZvKToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6Cisg
ICAgICAgICogcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpoYW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5Q
V2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1T
dGFydCk6CisgICAgICAgICogcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKiBwbHVnaW5zL3F0
L1BsdWdpblZpZXdRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRj
aE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAg
ICAgICAgKiBwbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBX
aW5kb3dSZWN0KToKKyAgICAgICAgKiB0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHA6
CisgICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KToKKyAgICAg
ICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJl
cXVlc3Q6OmRyb3BQcm90ZWN0aW9uKToKKwogMjAxMi0wNi0yMSAgVGFpanUgVHN1aWtpICA8dHpp
a0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogVW5pZnkgRmlsZVN5c3Rl
bSBjYWxsYmFja3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
R0NDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lkIGNvbGxlY3Qodm9pZCopCiB7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKS0+aGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwogfQogCkBAIC02Myw3ICs2
Myw3IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdFNvb24oKQogICAgIC8vIGRv
d24gaW50byBXVEYgc28gdGhhdCBtb3JlIHBsYXRmb3JtcyBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2Yg
aXQsIHdlIHdpbGwgYmUgCiAgICAgLy8gYWJsZSB0byB1c2UgcmVwb3J0QWJhbmRvbmVkT2JqZWN0
R3JhcGggb24gbW9yZSBwbGF0Zm9ybXMuCiAjaWYgVVNFKENGKQotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCktPmhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKTsKICNlbHNlCiAgICAgaWYg
KCFtX0dDVGltZXIuaXNBY3RpdmUoKSkKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBHQ0NvbnRyb2xs
ZXI6OmdjVGltZXJGaXJlZChUaW1lcjxHQwogCiB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNv
bGxlY3ROb3coKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICBpZiAoIUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5pc0J1c3ko
KSkKICAgICAgICAgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNvbGxl
Y3RBbGxHYXJiYWdlKCk7CiB9CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6
OnNldEphdmFTY3JpcHRHYXJiYWdlQwogCiB2b2lkIEdDQ29udHJvbGxlcjo6ZGlzY2FyZEFsbENv
bXBpbGVkQ29kZSgpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwogICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5kZWxldGVBbGxD
b21waWxlZENvZGUoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
dXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3Bw
CShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIGJvb2wgSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGUKIAogICAgIFJl
ZlB0cjxKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKLSAgICBK
U0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAg
RXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwog
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFjay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBKU0N1c3RvbVZvaWRDYWxs
YmFjazo6aGFuZGxlRXZlbnQoKQogCiAgICAgUmVmUHRyPEpTQ3VzdG9tVm9pZENhbGxiYWNrPiBw
cm90ZWN0KHRoaXMpOwogICAgICAgICAKLSAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAg
ICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBh
dGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBTdHJpbmcg
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hCiB7CiAgICAgQVNTRVJUKG1fY3VzdG9t
UmVzb2x2ZXIpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JI
YW5kbGVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFcnJvckhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZv
aWQgSlNFcnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEUKIAogICAgIEVycm9yRXZlbnQq
IGVycm9yRXZlbnQgPSBzdGF0aWNfY2FzdDxFcnJvckV2ZW50Kj4oZXZlbnQpOwogCi0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5nbG9iYWxEYXRhKCkpOwogCiAgICAgSlNPYmplY3QqIGpz
RnVuY3Rpb24gPSB0aGlzLT5qc0Z1bmN0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAg
IGlmICghanNGdW5jdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBA
QCBKU1ZhbHVlIEpTRXZlbnQ6OmNsaXBib2FyZERhdGEoRXhlY1N0YXRlCiAKIEpTVmFsdWUgdG9K
UyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV2ZW50
KiBldmVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgaWYgKCFldmVudCkKICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExp
c3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3
IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHQKICAgICBpZiAoIXNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQgfHwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNKU0V4ZWN1
dGlvbkZvcmJpZGRlbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmdsb2JhbERhdGEoKSk7CiAKICAgICBKU09iamVjdCoganNGdW5jdGlvbiA9IHRo
aXMtPmpzRnVuY3Rpb24oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgaWYgKCFqc0Z1bmN0
aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhv
c3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIE5vZGUqIEluamVjdGVkU2NyaXB0SG9zdDo6c2Ny
aXB0VmFsdWVBc04KIAogU2NyaXB0VmFsdWUgSW5qZWN0ZWRTY3JpcHRIb3N0Ojpub2RlQXNTY3Jp
cHRWYWx1ZShTY3JpcHRTdGF0ZSogc3RhdGUsIE5vZGUqIG5vZGUpCiB7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzdGF0ZSk7
CiAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHN0YXRlLT5nbG9iYWxEYXRhKCksIHRvSlMoc3RhdGUs
IGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoc3RhdGUpLCBub2RlKSk7CiB9CiAK
QEAgLTk1LDcgKzk1LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdGVk
TwogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgU2NyaXB0VmFsdWUgc2NyaXB0VmFsdWUgPSBvYmplY3QtPmdldChleGVj
KTsKICAgICBpZiAoc2NyaXB0VmFsdWUuaGFzTm9WYWx1ZSgpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcmlwdE9i
amVjdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUluamVjdGVkU2NyaXB0KGNvbnN0IFN0
cmluZyYgc291cmNlLCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGludCBpZCkKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHNjcmlwdFN0YXRlKTsKIAogICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IG1ha2VTb3VyY2Uo
c3RyaW5nVG9VU3RyaW5nKHNvdXJjZSkpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKTsKQEAgLTgxLDcgKzgxLDcgQEAgU2NyaXB0T2JqZWN0IEluamVjdGVkU2Ny
aXB0TWFuYWdlcjo6Y3JlYQogCiBib29sIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y2FuQWNjZXNz
SW5zcGVjdGVkV2luZG93KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKIHsKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlw
dFN0YXRlKTsKICAgICBKU0RPTVdpbmRvdyogaW5zcGVjdGVkV2luZG93ID0gdG9KU0RPTVdpbmRv
dyhzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBpZiAoIWluc3BlY3Rl
ZFdpbmRvdykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDEyMDky
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50
TGlzdGVuZXI6OmluaXRpYWxpegogICAgIGlmIChtX29yaWdpbmFsTm9kZSkgewogICAgICAgICBp
ZiAoIXdyYXBwZXIoKSkgewogICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgJ25vZGUnIGhhcyBh
IEphdmFTY3JpcHQgd3JhcHBlciB0byBtYXJrIHRoZSBldmVudCBsaXN0ZW5lciB3ZSdyZSBjcmVh
dGluZy4KLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgcGFzcyB0aGUgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUK
ICAgICAgICAgICAgIHNldFdyYXBwZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc09iamVjdCh0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgbV9vcmlnaW5hbE5vZGUpKSk7CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0
ZS5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01h
aW5UaHJlYWRFeGVjU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNDOjpTY29wZUNoYWluTm9kZSogY2hhaW4sIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291
cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbikKICAg
ICB7CiAgICAgICAgIEpTTWFpblRocmVhZEV4ZWNTdGF0ZSBjdXJyZW50U3RhdGUoZXhlYyk7Cisg
ICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHJldHVybiBKU0M6
OmV2YWx1YXRlKGV4ZWMsIGNoYWluLCBzb3VyY2UsIHRoaXNWYWx1ZSwgZXhjZXB0aW9uKTsKICAg
ICB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJh
Y2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkpTTXV0YXRpb25DYWxsYmFjay5o
IgogCisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiSlNNdXRhdGlvblJl
Y29yZC5oIgogI2luY2x1ZGUgIkpTV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTUwLDcgKzUxLDcgQEAgYm9vbCBKU011dGF0
aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KE11dAogCiAgICAgUmVmUHRyPEpTTXV0YXRpb25DYWxs
YmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBKU05vZGVGaWx0ZXJDb25kaXRpb246OkpTTm9k
ZUZpbHRlckNvbmRpCiAKIHNob3J0IEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgTm9kZSogZmlsdGVyTm9kZSkgY29uc3QKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogCiAgICAgaWYgKCFtX2ZpbHRlcikKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJ
TFRFUl9BQ0NFUFQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlcXVlc3RB
bmltYXRpb25GcmFtZUNhbGxiYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrQ3VzdG9tLmNw
cAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXF1
ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAgYm9vbCBKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrOjpoYQogCiAg
ICAgUmVmUHRyPEpTUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+IHByb3RlY3QodGhpcyk7
CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAKICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVyKHRpbWUp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRD
YWxsRnJhbWUuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKIAogI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaD4KICNp
bmNsdWRlIDxydW50aW1lL0NvbXBsZXRpb24uaD4KQEAgLTEwNiw3ICsxMDcsNyBAQCBKU1ZhbHVl
IEphdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKGNvCiAgICAgaWYgKCFtX2lzVmFsaWQpCiAg
ICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25K
U0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUuZXZhbHVhdGUo
c2NyaXB0LCBleGNlcHRpb24pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1Nl
cnZlcjo6cmVtb3ZlTGlzdGVuCiAKIHZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBp
bGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4qKQogewotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAvLyBJZiBKYXZhU2NyaXB0IHN0
YWNrIGlzIG5vdCBlbXB0eSBwb3N0cG9uZSByZWNvbXBpbGF0aW9uLgogICAgIGlmIChKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmR5bmFtaWNHbG9iYWxPYmplY3QpCiAgICAgICAg
IHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKFNjcmlw
dEV4ZWMKIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlRnVuY3Rpb25JbkNvbnRleHQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1fZnVuY3Rpb24pOwotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
Y29udGV4dC0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobV9mdW5jdGlvbi5nZXQoKSwgY2FsbERhdGEp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNo
ZWRGcmFtZURhdGEuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3
ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpT
Y3JpcHRDYWNoZWRGcmFtZURhdGEoRnJhbWUqIGZyYW1lKQogewotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBTY3JpcHRDb250cm9sbGVyKiBzY3Jp
cHRDb250cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOwogICAgIFNjcmlwdENvbnRyb2xsZXI6OlNo
ZWxsTWFwJiB3aW5kb3dTaGVsbHMgPSBzY3JpcHRDb250cm9sbGVyLT5tX3dpbmRvd1NoZWxsczsK
QEAgLTY3LDcgKzY3LDcgQEAgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjp+U2NyaXB0Q2FjaGVkRnJh
bQogCiB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZShGcmFtZSogZnJhbWUpCiB7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIFNj
cmlwdENvbnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXIgPSBmcmFtZS0+c2NyaXB0KCk7CiAgICAg
U2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXAmIHdpbmRvd1NoZWxscyA9IHNjcmlwdENvbnRyb2xs
ZXItPm1fd2luZG93U2hlbGxzOwpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIFNjcmlwdENhY2hlZEZy
YW1lRGF0YTo6Y2xlYXIoKQogICAgIGlmIChtX3dpbmRvd3MuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgIG1fd2luZG93cy5jbGVhcigpOwogICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0
U29vbigpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMz
LDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbgogICAgIGNvbnN0
IFN0cmluZyogc2F2ZWRTb3VyY2VVUkwgPSBtX3NvdXJjZVVSTDsKICAgICBtX3NvdXJjZVVSTCA9
ICZzb3VyY2VVUkw7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0
ID0gbV9mcmFtZTsKIApAQCAtMTc3LDcgKzE3Nyw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6
Y2xlYXJXaW5kb3dTaGVsbCgKICAgICBpZiAobV93aW5kb3dTaGVsbHMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwogCiAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxz
LmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAg
ICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnNlY29uZC5nZXQoKTsKQEAg
LTIwOSw3ICsyMDksNyBAQCBKU0RPTVdpbmRvd1NoZWxsKiBTY3JpcHRDb250cm9sbGVyOjppbml0
CiB7CiAgICAgQVNTRVJUKCFtX3dpbmRvd1NoZWxscy5jb250YWlucyh3b3JsZCkpOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayh3b3JsZC0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1No
ZWxsID0gY3JlYXRlV2luZG93U2hlbGwod29ybGQpOwogCkBAIC0yODQsOSArMjg0LDEwIEBAIHZv
aWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQoKQogICAgIGlmICghbV9mcmFtZS0+
ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKLSAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5k
b3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKQor
ICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigp
OyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2soaXRlci0+Zmlyc3QtPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIGl0ZXItPnNl
Y29uZC0+d2luZG93KCktPnVwZGF0ZURvY3VtZW50KCk7CisgICAgfQogfQogCiB2b2lkIFNjcmlw
dENvbnRyb2xsZXI6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCkKQEAgLTMwMCw3ICszMDEsNyBAQCBC
aW5kaW5nczo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6CiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgaWYgKCFtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KSB7Ci0gICAgICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBtX2Nh
Y2hlYWJsZUJpbmRpbmdSb290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgw
LCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9jYWNo
ZWFibGVCaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKQEAgLTMxMiw3ICszMTMsNyBAQCBCaW5kaW5n
czo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6CiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgaWYgKCFtX2JpbmRpbmdSb290T2JqZWN0KSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBtX2JpbmRpbmdSb290T2JqZWN0
ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3QocGx1Z2luV29y
bGQoKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9iaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKQEAg
LTM0OSw5ICszNTAsOSBAQCBOUE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0
CiAgICAgICAgIGlmIChjYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkp
IHsKICAgICAgICAgICAgIC8vIEphdmFTY3JpcHQgaXMgZW5hYmxlZCwgc28gdGhlcmUgaXMgYSBK
YXZhU2NyaXB0IHdpbmRvdyBvYmplY3QuCiAgICAgICAgICAgICAvLyBSZXR1cm4gYW4gTlBPYmpl
Y3QgYm91bmQgdG8gdGhlIHdpbmRvdyBvYmplY3QuCi0gICAgICAgICAgICBKU0M6OkpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgICAgICAgICBKU09iamVjdCogd2luID0g
d2luZG93U2hlbGwocGx1Z2luV29ybGQoKSktPndpbmRvdygpOworICAgICAgICAgICAgSlNET01X
aW5kb3cqIHdpbiA9IHdpbmRvd1NoZWxsKHBsdWdpbldvcmxkKCkpLT53aW5kb3coKTsKICAgICAg
ICAgICAgIEFTU0VSVCh3aW4pOworICAgICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh3
aW4tPmdsb2JhbEV4ZWMoKSk7CiAgICAgICAgICAgICBCaW5kaW5nczo6Um9vdE9iamVjdCogcm9v
dCA9IGJpbmRpbmdSb290T2JqZWN0KCk7CiAgICAgICAgICAgICBtX3dpbmRvd1NjcmlwdE5QT2Jq
ZWN0ID0gX05QTl9DcmVhdGVTY3JpcHRPYmplY3QoMCwgd2luLCByb290KTsKICAgICAgICAgfSBl
bHNlIHsKQEAgLTM4Myw4ICszODQsOCBAQCBKU09iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6anNP
YmplY3RGb3JQCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ3JlYXRlIGEgSlNPYmplY3Qg
Ym91bmQgdG8gdGhpcyBlbGVtZW50Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqID0gZ2xvYmFsT2JqZWN0KHBsdWdpbldv
cmxkKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iai0+Z2xvYmFsRXhlYygpKTsK
ICAgICAvLyBGSVhNRTogaXMgbm9ybWFsIG9rYXk/IC0gdXNlZCBmb3IgTlAgcGx1Z2lucz8KICAg
ICBKU1ZhbHVlIGpzRWxlbWVudFZhbHVlID0gdG9KUyhnbG9iYWxPYmotPmdsb2JhbEV4ZWMoKSwg
Z2xvYmFsT2JqLCBwbHVnaW4pOwogICAgIGlmICghanNFbGVtZW50VmFsdWUgfHwgIWpzRWxlbWVu
dFZhbHVlLmlzT2JqZWN0KCkpCkBAIC00MTgsNyArNDE5LDcgQEAgdm9pZCBTY3JpcHRDb250cm9s
bGVyOjpjbGVhbnVwU2NyaXB0T2JqZQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2Ny
aXB0T2JqZWN0cygpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKIAogICAgIFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcm9vdE9i
amVjdHMuZW5kKCk7CiAgICAgZm9yIChSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcm9vdE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgV2ViU2NyaXB0T2JqZWN0
KiBTY3JpcHRDb250cm9sbGVyOjp3aW5kbwogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICgh
bV93aW5kb3dTY3JpcHRPYmplY3QpIHsKLSAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIEpTQzo6QmluZGlu
Z3M6OlJvb3RPYmplY3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgpOwogICAgICAgICBtX3dp
bmRvd1NjcmlwdE9iamVjdCA9IFtXZWJTY3JpcHRPYmplY3Qgc2NyaXB0T2JqZWN0Rm9ySlNPYmpl
Y3Q6dG9SZWYod2luZG93U2hlbGwocGx1Z2luV29ybGQoKSkpIG9yaWdpblJvb3RPYmplY3Q6cm9v
dCByb290T2JqZWN0OnJvb3RdOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNo
RGlkUGF1c2UKICAgICB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUtPmlzVmFsaWQo
KSAmJiBnbG9iYWxPYmplY3QtPmluaGVyaXRzKCZKU0RPTUdsb2JhbE9iamVjdDo6c19pbmZvKSkg
ewogICAgICAgICAgICAgSlNET01HbG9iYWxPYmplY3QqIGRvbUdsb2JhbE9iamVjdCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soc3RhdGUpOwogICAgICAgICAgICAganNDYWxsRnJhbWUgPSB0b0pTKHN0YXRlLCBkb21HbG9i
YWxPYmplY3QsIG1fY3VycmVudENhbGxGcmFtZS5nZXQoKSk7CiAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAganNDYWxsRnJhbWUgPSBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVu
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIFN0cmluZyBldmVudExpc3Rl
bmVySGFuZGxlckJvZHkoRG9jdW1lbnQKICAgICBBU1NFUlQoanNMaXN0ZW5lcik7CiAgICAgaWYg
KCFqc0xpc3RlbmVyKQogICAgICAgICByZXR1cm4gIiI7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhqc0xpc3RlbmVyLT5pc29s
YXRlZFdvcmxkKCktPmdsb2JhbERhdGEoKSk7CiAgICAgSlNDOjpKU09iamVjdCoganNGdW5jdGlv
biA9IGpzTGlzdGVuZXItPmpzRnVuY3Rpb24oZG9jdW1lbnQpOwogICAgIGlmICghanNGdW5jdGlv
bikKICAgICAgICAgcmV0dXJuICIiOwpAQCAtMTEyLDcgKzExMiw3IEBAIGJvb2wgZXZlbnRMaXN0
ZW5lckhhbmRsZXJMb2NhdGlvbihEb2N1bWUKICAgICBBU1NFUlQoanNMaXN0ZW5lcik7CiAgICAg
aWYgKCFqc0xpc3RlbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhqc0xpc3RlbmVy
LT5pc29sYXRlZFdvcmxkKCktPmdsb2JhbERhdGEoKSk7CiAgICAgSlNDOjpKU09iamVjdCoganNP
YmplY3QgPSBqc0xpc3RlbmVyLT5qc0Z1bmN0aW9uKGRvY3VtZW50KTsKICAgICBpZiAoIWpzT2Jq
ZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDE5ICs1OCwxOSBAQCB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRs
ZXI6OmFwcGVuZEFyCiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJn
dW1lbnQoY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAgICAgbV9h
cmd1bWVudHMuYXBwZW5kKGpzU3RyaW5nKG1fZXhlYywgYXJndW1lbnQpKTsKIH0KIAogdm9pZCBT
Y3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBKU0M6OlVTdHJp
bmcmIGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQo
anNTdHJpbmcobV9leGVjLCBhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVu
dEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IGNoYXIqIGFyZ3VtZW50KQogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
bV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNTdHJpbmcobV9leGVjLCBVU3RyaW5n
KGFyZ3VtZW50KSkpOwogfQogCkBAIC04MSwzMSArODEsMzEgQEAgdm9pZCBTY3JpcHRDYWxsQXJn
dW1lbnRIYW5kbGVyOjphcHBlbmRBcgogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6
OmFwcGVuZEFyZ3VtZW50KGxvbmcgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1f
YXJndW1lbnRzLmFwcGVuZChqc051bWJlcihhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlwdENh
bGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGxvbmcgbG9uZyBhcmd1bWVudCkKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKG1fZXhlYyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGFyZ3VtZW50
KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQo
dW5zaWduZWQgaW50IGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50
cy5hcHBlbmQoanNOdW1iZXIoYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxsQXJndW1l
bnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBsb25nIGFyZ3VtZW50KQogewotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIoYXJndW1lbnQpKTsK
IH0KIAogdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChpbnQg
YXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051
bWJlcihhcmd1bWVudCkpOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAgU2NyaXB0VmFsdWUgU2Ny
aXB0RnVuY3Rpb25DYWxsOjpjYWxsKGJvbwogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0g
bV90aGlzT2JqZWN0LmpzT2JqZWN0KCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAKICAgICBKU1ZhbHVl
IGZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcihtX2V4ZWMsIHN0
cmluZ1RvVVN0cmluZyhtX25hbWUpKSk7CiAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkp
IHsKQEAgLTE2Myw3ICsxNjMsNyBAQCBTY3JpcHRPYmplY3QgU2NyaXB0RnVuY3Rpb25DYWxsOjpj
b25zdHJ1CiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBtX3RoaXNPYmplY3QuanNPYmpl
Y3QoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sobV9leGVjKTsKIAogICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9IGFz
T2JqZWN0KHRoaXNPYmplY3QtPmdldChtX2V4ZWMsIElkZW50aWZpZXIobV9leGVjLCBzdHJpbmdU
b1VTdHJpbmcobV9uYW1lKSkpKTsKICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgewpA
QCAtMjA1LDcgKzIwNSw3IEBAIFNjcmlwdFZhbHVlIFNjcmlwdENhbGxiYWNrOjpjYWxsKCkKIAog
U2NyaXB0VmFsdWUgU2NyaXB0Q2FsbGJhY2s6OmNhbGwoYm9vbCYgaGFkRXhjZXB0aW9uKQogewot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2sobV9leGVjKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gZ2V0Q2FsbERhdGEobV9mdW5jdGlvbi5qc1ZhbHVlKCksIGNhbGxEYXRhKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVFeGNl
cHRpb24oU2NyaXB0U3RhdGUqCiAKIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0
U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTY3JpcHRPYmplY3Qm
IHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogICAgIHNjcmlwdFN0YXRlLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCBJZGVu
dGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwgdmFsdWUuanNPYmplY3QoKSk7CiAgICAgcmV0dXJu
IGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7CiB9CkBAIC03NSw3ICs3NSw3IEBAIGJvb2wg
U2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUs
IGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckZyb250ZW5kSG9zdCogdmFsdWUpCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOwogICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT5nbG9iYWxEYXRh
KCksIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNjcmlwdFN0YXRlLCBnbG9i
YWxPYmplY3QsIHZhbHVlKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0
ZSk7CkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0
U3RhdGUKIAogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluamVjdGVkU2NyaXB0SG9zdCogdmFsdWUpCiB7Ci0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpOwogICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT5nbG9iYWxE
YXRhKCksIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNjcmlwdFN0YXRlLCBn
bG9iYWxPYmplY3QsIHZhbHVlKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRT
dGF0ZSk7CkBAIC05Miw3ICs5Miw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2Ny
aXB0U3RhdGUKIAogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChTY3JpcHRTdGF0ZSogc2Ny
aXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIFNjcmlwdE9iamVjdCYgdmFsdWUpCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gc2NyaXB0U3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+Z2V0KHNjcmlwdFN0YXRlLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRl
LCBuYW1lKSk7CiAgICAgaWYgKCFqc1ZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MDYsNyArMTA2LDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChTY3JpcHRTdGF0ZQog
CiBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6cmVtb3ZlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0
ZSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBzY3JpcHRT
dGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eShzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzY3JpcHRTdGF0ZSwgSWRlbnRp
ZmllcihzY3JpcHRTdGF0ZSwgbmFtZSkpOwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2Ny
aXB0U3RhdGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZh
bHVlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIGJvb2wgU2Ny
aXB0VmFsdWU6OmdldFN0cmluZyhTY3JpcHRTdGF0ZSoKIHsKICAgICBpZiAoIW1fdmFsdWUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBVU3RyaW5nIHVz
dHJpbmc7CiAgICAgaWYgKCFtX3ZhbHVlLmdldCgpLmdldFN0cmluZyhzY3JpcHRTdGF0ZSwgdXN0
cmluZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3NSw2ICsxNzUsNyBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4ganNUb0luCiAKIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IFNjcmlwdFZhbHVlOjp0b0luc3BlY3RvclZhbHVlKFNjcmlwdFN0YXRlKiBzY3JpcHRT
dGF0ZSkgY29uc3QKIHsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBob2xkZXIoc2NyaXB0U3RhdGUp
OwogICAgIHJldHVybiBqc1RvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3RhdGUsIG1fdmFsdWUuZ2V0
KCksIEluc3BlY3RvclZhbHVlOjptYXhEZXB0aCk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtl
clNjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQsNyArNjQsNyBAQCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpXb3JrZXJTY3JpcHRDb250
CiAKIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6On5Xb3JrZXJTY3JpcHRDb250cm9sbGVyKCkKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGdsb2JhbERhdGEoKSk7CiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci5jbGVhcigp
OwogICAgIG1fZ2xvYmFsRGF0YS5jbGVhcigpOwogfQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIFdv
cmtlclNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQoCiB7CiAgICAgQVNTRVJUKCFtX3dvcmtl
ckNvbnRleHRXcmFwcGVyKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9nbG9iYWxEYXRhLmdldCgpKTsKIAogICAgIC8v
IEV4cGxpY2l0bHkgcHJvdGVjdCB0aGUgZ2xvYmFsIG9iamVjdCdzIHByb3RvdHlwZSBzbyBpdCBp
c24ndCBjb2xsZWN0ZWQKICAgICAvLyB3aGVuIHdlIGFsbG9jYXRlIHRoZSBnbG9iYWwgb2JqZWN0
LiAoT25jZSB0aGUgZ2xvYmFsIG9iamVjdCBpcyBmdWxseQpAQCAtMTE3LDcgKzExNyw3IEBAIHZv
aWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICBTY3JpcHRWYWx1ZSBl
eGNlcHRpb247CiAgICAgZXZhbHVhdGUoc291cmNlQ29kZSwgJmV4Y2VwdGlvbik7CiAgICAgaWYg
KGV4Y2VwdGlvbi5qc1ZhbHVlKCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSgpKTsKICAg
ICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMo
KSwgZXhjZXB0aW9uLmpzVmFsdWUoKSk7CiAgICAgfQogfQpAQCAtMTI4LDkgKzEyOCw5IEBAIHZv
aWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICAgICAgcmV0dXJuOwog
CiAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fd29ya2VyQ29udGV4dFdyYXBw
ZXItPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIG1f
d29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgp
OwogCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppc0V4
ZWN1dGlvbgogdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpkaXNhYmxlRXZhbCgpCiB7CiAg
ICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhKCkpOwogCiAgICAgbV93
b3JrZXJDb250ZXh0V3JhcHBlci0+c2V0RXZhbEVuYWJsZWQoZmFsc2UpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2Jq
ZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsMTMgKzEyMiwxMiBAQCArIChpZClzY3JpcHRP
YmplY3RGb3JKU09iamVjdDooSlNPYmplY3RSCiAKIHN0YXRpYyB2b2lkIF9kaWRFeGVjdXRlKFdl
YlNjcmlwdE9iamVjdCAqb2JqKQogewotICAgIEFTU0VSVChKU0xvY2s6OmxvY2tDb3VudCgpID4g
MCk7Ci0gICAgCiAgICAgUm9vdE9iamVjdCogcm9vdCA9IFtvYmogX3Jvb3RPYmplY3RdOwogICAg
IGlmICghcm9vdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9v
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBBU1NFUlQoZXhlYy0+Z2xvYmFs
RGF0YSgpLmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKICAgICBLSlNE
aWRFeGVjdXRlRnVuY3Rpb25QdHIgZnVuYyA9IEluc3RhbmNlOjpkaWRFeGVjdXRlRnVuY3Rpb24o
KTsKICAgICBpZiAoZnVuYykKICAgICAgICAgZnVuYyhleGVjLCByb290LT5nbG9iYWxPYmplY3Qo
KSk7CkBAIC0xNDgsMTkgKzE0NywyNSBAQCAtICh2b2lkKV9zZXRJbXA6KEpTT2JqZWN0KilpbXAg
b3JpZ2luUm9vCiAKICAgICBXZWJDb3JlOjphZGRKU1dyYXBwZXIoc2VsZiwgaW1wKTsKIAotICAg
IGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCkKKyAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3Qp
IHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGhvbGRlcigmX3ByaXZhdGUtPnJvb3RPYmplY3QtPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICBfcHJpdmF0ZS0+cm9vdE9iamVj
dC0+Z2NQcm90ZWN0KGltcCk7CisgICAgfQogfQogCiAtICh2b2lkKV9zZXRPcmlnaW5Sb290T2Jq
ZWN0OihQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KW9yaWdpblJvb3RPYmplY3QgYW5kUm9vdE9iamVj
dDooUGFzc1JlZlB0cjxSb290T2JqZWN0Pilyb290T2JqZWN0CiB7CiAgICAgQVNTRVJUKF9wcml2
YXRlLT5pbXApOwogCi0gICAgaWYgKHJvb3RPYmplY3QpCisgICAgaWYgKHJvb3RPYmplY3QpIHsK
KyAgICAgICAgSlNMb2NrSG9sZGVyIGhvbGRlcigmcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbERhdGEoKSk7CiAgICAgICAgIHJvb3RPYmplY3QtPmdjUHJvdGVjdChfcHJpdmF0ZS0+
aW1wKTsKKyAgICB9CiAKLSAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUt
PnJvb3RPYmplY3QtPmlzVmFsaWQoKSkKKyAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYg
X3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFsaWQoKSkgeworICAgICAgICBKU0xvY2tIb2xkZXIg
aG9sZGVyKCZfcHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEo
KSk7CiAgICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5nY1VucHJvdGVjdChfcHJpdmF0ZS0+
aW1wKTsKKyAgICB9CiAKICAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QpCiAgICAgICAgIF9w
cml2YXRlLT5yb290T2JqZWN0LT5kZXJlZigpOwpAQCAtMjMyLDggKzIzNywxMCBAQCAtICh2b2lk
KWRlYWxsb2MKICAgICBpZiAoX3ByaXZhdGUtPmltcCkKICAgICAgICAgV2ViQ29yZTo6cmVtb3Zl
SlNXcmFwcGVyKF9wcml2YXRlLT5pbXApOwogCi0gICAgaWYgKF9wcml2YXRlLT5yb290T2JqZWN0
ICYmIF9wcml2YXRlLT5yb290T2JqZWN0LT5pc1ZhbGlkKCkpCisgICAgaWYgKF9wcml2YXRlLT5y
b290T2JqZWN0ICYmIF9wcml2YXRlLT5yb290T2JqZWN0LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
SlNMb2NrSG9sZGVyIGhvbGRlcigmX3ByaXZhdGUtPnJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxEYXRhKCkpOwogICAgICAgICBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2NVbnByb3Rl
Y3QoX3ByaXZhdGUtPmltcCk7CisgICAgfQogCiAgICAgaWYgKF9wcml2YXRlLT5yb290T2JqZWN0
KQogICAgICAgICBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+ZGVyZWYoKTsKQEAgLTI0OCw4ICsyNTUs
MTAgQEAgLSAodm9pZClkZWFsbG9jCiAKIC0gKHZvaWQpZmluYWxpemUKIHsKLSAgICBpZiAoX3By
aXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFsaWQoKSkKKyAg
ICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFs
aWQoKSkgeworICAgICAgICBKU0xvY2tIb2xkZXIgaG9sZGVyKCZfcHJpdmF0ZS0+cm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIF9wcml2YXRlLT5yb290
T2JqZWN0LT5nY1VucHJvdGVjdChfcHJpdmF0ZS0+aW1wKTsKKyAgICB9CiAKICAgICBpZiAoX3By
aXZhdGUtPnJvb3RPYmplY3QpCiAgICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5kZXJlZigp
OwpAQCAtMjgxLDEwICsyOTAsOSBAQCAtIChpZCljYWxsV2ViU2NyaXB0TWV0aG9kOihOU1N0cmlu
ZyAqKW5hCiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKICAgICAgICAgcmV0dXJuIG5p
bDsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgCiAgICAg
Ly8gTG9vayB1cCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtz
ZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsK
IAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZp
ZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhuYW1lKSkpKTsKQEAgLTMyNSw3ICszMzMs
NyBAQCAtIChpZClldmFsdWF0ZVdlYlNjcmlwdDooTlNTdHJpbmcgKilzY3JpCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICAKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCkudGltZW91dENoZWNrZXIuc3RhcnQoKTsKICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNN
YWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBbc2VsZiBfcm9vdE9iamVjdF0tPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoU3RyaW5nKHNjcmlw
dCkpLCBKU0M6OkpTVmFsdWUoKSwgMCk7CkBAIC0zNDYsNyArMzU0LDcgQEAgLSAodm9pZClzZXRW
YWx1ZTooaWQpdmFsdWUgZm9yS2V5OihOU1N0cgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxm
IF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQo
IWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdDsKICAgICBbc2VsZiBfaW1wXS0+bWV0aG9kVGFibGUoKS0+cHV0KFtzZWxmIF9p
bXBdLCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkp
LCBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBb
c2VsZiBfcm9vdE9iamVjdF0pLCBzbG90KTsKQEAgLTM3Miw3ICszODAsNyBAQCAtIChpZCl2YWx1
ZUZvcktleTooTlNTdHJpbmcgKilrZXkKICAgICAgICAgLy8gTmVlZCB0byBzY29wZSB0aGlzIGxv
Y2sgdG8gZW5zdXJlIHRoYXQgd2UgcmVsZWFzZSB0aGUgbG9jayBiZWZvcmUgY2FsbGluZwogICAg
ICAgICAvLyBbc3VwZXIgdmFsdWVGb3JLZXk6a2V5XSB3aGljaCBtaWdodCB0aHJvdyBhbiBleGNl
cHRpb24gYW5kIGJ5cGFzcyB0aGUgSlNMb2NrIGRlc3RydWN0b3IsCiAgICAgICAgIC8vIGxlYXZp
bmcgdGhlIGxvY2sgcGVybWFuZW50bHkgaGVsZAotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAg
ICAgCiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkpKTsKICAgICAgICAgCkBA
IC0zODgsNyArMzk2LDcgQEAgLSAoaWQpdmFsdWVGb3JLZXk6KE5TU3RyaW5nICopa2V5CiAgICAg
aWYgKFtyZXN1bHRPYmogaXNLaW5kT2ZDbGFzczpbV2ViVW5kZWZpbmVkIGNsYXNzXV0pCiAgICAg
ICAgIHJlc3VsdE9iaiA9IFtzdXBlciB2YWx1ZUZvcktleTprZXldOyAgICAvLyBkZWZhdWx0cyB0
byB0aHJvd2luZyBhbiBleGNlcHRpb24KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgX2RpZEV4ZWN1dGUo
c2VsZik7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdE9iajsKQEAgLTQwMiw3ICs0MTAsNyBAQCAt
ICh2b2lkKXJlbW92ZVdlYlNjcmlwdEtleTooTlNTdHJpbmcgKilrCiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwog
ICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBb
c2VsZiBfaW1wXS0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoW3NlbGYgX2ltcF0sIGV4
ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhrZXkpKSkpOwogCiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC00MjEsNyArNDI5LDcgQEAgLSAoQk9P
TCloYXNXZWJTY3JpcHRLZXk6KE5TU3RyaW5nICopa2V5CiAgICAgRXhlY1N0YXRlKiBleGVjID0g
W3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFT
U0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBCT09MIHJl
c3VsdCA9IFtzZWxmIF9pbXBdLT5oYXNQcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHN0
cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkpKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgewpAQCAtNDQxLDggKzQ0OSw4IEBAIC0gKE5TU3RyaW5nICopc3RyaW5nUmVwcmVzZW50
YXRpb24KICAgICAgICAgcmV0dXJuIEAiVW5kZWZpbmVkIjsKICAgICB9CiAKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxm
IF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICBpZCByZXN1bHQgPSBjb252ZXJ0VmFsdWVUb09i
amNWYWx1ZShleGVjLCBbc2VsZiBfaW1wXSwgT2JqY09iamVjdFR5cGUpLm9iamVjdFZhbHVlOwog
CkBAIC00NjEsNyArNDY5LDcgQEAgLSAoaWQpd2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ25l
ZClpbgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsK
IAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4
ZWMsIGluZGV4KTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewpAQCAtNDg1LDcg
KzQ5Myw3IEBAIC0gKHZvaWQpc2V0V2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ24KICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KFtzZWxmIF9p
bXBdLCBleGVjLCBpbmRleCwgY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJnZhbHVlLCBP
YmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RPYmplY3RdKSwgZmFsc2UpOwogCiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC01MTUsNyArNTIzLDcgQEAgKyAoaWQpX2NvbnZlcnRW
YWx1ZVRvT2JqY1ZhbHVlOihKU1ZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7
CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgICAg
IGlmIChvYmplY3QtPmluaGVyaXRzKCZKU0hUTUxFbGVtZW50OjpzX2luZm8pKSB7CiAgICAgICAg
ICAgICAvLyBQbHVnaW4gZWxlbWVudHMgY2FjaGUgdGhlIGluc3RhbmNlIGludGVybmFsbHkuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI3MzMsNyArMjczMyw3
IEBAIEVORAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFjYW5JbnZv
a2VDYWxsYmFjaygpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgcmV0dXJuIHRydWU7XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgUmVmUHRyPCRjbGFzc05hbWU+IHByb3RlY3QodGhpcyk7XG5cbiIpOwotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTtcblxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0xvY2tIb2xk
ZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpO1xuXG4iKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0
YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTtcbiIpOwogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJncztcbiIpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDYWxsYmFjay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY1LDcgKzY1LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoTm9Q
YXJhbQogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRl
KiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC04Miw3ICs4Miw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJh
Y2s6OmNhbGxiYWNrV2l0aENsYXNzMVAKIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJv
dGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgp
KTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTAwLDcgKzEwMCw3
IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlAKIAogICAgIFJlZlB0
cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmdzOwpAQCAtMTE5LDcgKzExOSw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0
aFN0cmluZ0wKIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTM3LDcgKzEzNyw3IEBAIGJvb2wgSlNUZXN0
Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aEJvb2xlYW4KIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFj
az4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTU3LDcg
KzE1Nyw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrUmVxdWlyZXNUaGkKIAogICAg
IFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1f
ZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciBhcmdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCShyZXZp
c2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzcsNyArMTc3LDcgQEAgYm9vbCBfTlBOX0ludm9rZURlZmF1bHQo
TlBQLCBOUE9iamVjdCogbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAg
ICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxs
IHRoZSBmdW5jdGlvbiBvYmplY3QuCiAgICAgICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmotPmlt
cDsKQEAgLTIyNSw3ICsyMjUsNyBAQCBib29sIF9OUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0
KiBvLCBOCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKICAgICAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iai0+aW1wLT5nZXQoZXhlYywgaWRl
bnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKICAgICAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
ZnVuY3Rpb24sIGNhbGxEYXRhKTsKQEAgLTI2NCw3ICsyNjQsNyBAQCBib29sIF9OUE5fRXZhbHVh
dGUoTlBQIGluc3RhbmNlLCBOUE9iamVjCiAgICAgICAgIFBsdWdpblZpZXc6OmtlZXBBbGl2ZShp
bnN0YW5jZSk7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIFN0
cmluZyBzY3JpcHRTdHJpbmcgPSBjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMpOwogICAgICAgICAK
ICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUocm9vdE9iamVjdC0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3JpcHRTdHJpbmcpLCBKU0M6OkpTVmFs
dWUoKSk7CkBAIC0yOTAsNyArMjkwLDcgQEAgYm9vbCBfTlBOX0dldFByb3BlcnR5KE5QUCwgTlBP
YmplY3QqIG8sIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGlj
X2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7CiAgICAgICAgIAotICAgICAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgICAgIGlmIChpLT5pc1N0
cmluZygpKQogICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlm
aWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwpAQCAtMzIyLDcgKzMyMiw3
IEBAIGJvb2wgX05QTl9TZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAg
ICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0
eU5hbWUpOwogCiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7CkBAIC0zNjMsNyArMzYzLDcg
QEAgYm9vbCBfTlBOX1JlbW92ZVByb3BlcnR5KE5QUCwgTlBPYmplY3QqIAogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIGlmIChpLT5pc1N0
cmluZygpKQogICAgICAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3Bl
cnR5KG9iai0+aW1wLCBleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5z
dHJpbmcoKSkpOwogICAgICAgICBlbHNlCkBAIC0zODYsNyArMzg2LDcgQEAgYm9vbCBfTlBOX0hh
c1Byb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIAogCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIElkZW50
aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsK
LSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7CiAgICAg
ICAgICAgICBib29sIHJlc3VsdCA9IG9iai0+aW1wLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlm
aWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKQEAgLTQxOCw3ICs0MTgsNyBAQCBib29sIF9OUE5fSGFzTWV0
aG9kKE5QUCwgTlBPYmplY3QqIG8sIE5QCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIEpTVmFsdWUgZnVuYyA9IG9i
ai0+aW1wLT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3Ry
aW5nKCkpKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJu
ICFmdW5jLmlzVW5kZWZpbmVkKCk7CkBAIC00NDcsNyArNDQ3LDcgQEAgYm9vbCBfTlBOX0VudW1l
cmF0ZShOUFAsIE5QT2JqZWN0KiBvLCBOUAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIFByb3BlcnR5
TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CiAKICAgICAgICAgb2JqLT5pbXAtPm1ldGhv
ZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMob2JqLT5pbXAsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwpAQCAtNDg0LDcgKzQ4NCw3IEBAIGJvb2wgX05Q
Tl9Db25zdHJ1Y3QoTlBQLCBOUE9iamVjdCogbywgY28KICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAK
ICAgICAgICAgLy8gQ2FsbCB0aGUgY29uc3RydWN0b3Igb2JqZWN0LgogICAgICAgICBKU1ZhbHVl
IGNvbnN0cnVjdG9yID0gb2JqLT5pbXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9j
X2NsYXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNz
LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19jbGFz
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJucHJ1bnRp
bWVfaW1wbC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvU2NvcGVDaGFpbi5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvSWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4K
ICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3Qu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC00Nyw3ICs0OCw3IEBAIEND
bGFzczo6Q0NsYXNzKE5QQ2xhc3MqIGFDbGFzcykKIAogQ0NsYXNzOjp+Q0NsYXNzKCkKIHsKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIC8vIEZJWE1FOiBTaG91
bGQgd2UgYWNxdWlyZSBhIEpTTG9jayBoZXJlPwogCiAgICAgZGVsZXRlQWxsVmFsdWVzKF9tZXRo
b2RzKTsKICAgICBfbWV0aG9kcy5jbGVhcigpOwpAQCAtOTEsNyArOTIsNyBAQCBNZXRob2RMaXN0
IENDbGFzczo6bWV0aG9kc05hbWVkKFByb3BlcnR5CiAgICAgaWYgKF9pc2EtPmhhc01ldGhvZCAm
JiBfaXNhLT5oYXNNZXRob2Qob2JqLCBpZGVudCkpewogICAgICAgICBNZXRob2QqIGFNZXRob2Qg
PSBuZXcgQ01ldGhvZChpZGVudCk7IC8vIGRlbGV0ZWQgaW4gdGhlIENDbGFzcyBkZXN0cnVjdG9y
CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhpbnN0LT5yb290T2JqZWN0KCktPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgX21ldGhvZHMuc2V0KG5h
bWUuaW1wbCgpLCBhTWV0aG9kKTsKICAgICAgICAgfQogICAgICAgICBtZXRob2RMaXN0LmFwcGVu
ZChhTWV0aG9kKTsKQEAgLTExNCw3ICsxMTUsNyBAQCBGaWVsZCogQ0NsYXNzOjpmaWVsZE5hbWVk
KFByb3BlcnR5TmFtZSBwCiAgICAgaWYgKF9pc2EtPmhhc1Byb3BlcnR5ICYmIF9pc2EtPmhhc1By
b3BlcnR5KG9iaiwgaWRlbnQpKXsKICAgICAgICAgYUZpZWxkID0gbmV3IENGaWVsZChpZGVudCk7
IC8vIGRlbGV0ZWQgaW4gdGhlIENDbGFzcyBkZXN0cnVjdG9yCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhpbnN0LT5yb290T2JqZWN0KCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxE
YXRhKCkpOwogICAgICAgICAgICAgX2ZpZWxkcy5zZXQobmFtZS5pbXBsKCksIGFGaWVsZCk7CiAg
ICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNw
cAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5j
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBDSW5zdGFuY2U6Om1v
dmVHbG9iYWxFeGNlcHRpb25Ub0V4ZQogICAgICAgICByZXR1cm47CiAKICAgICB7Ci0gICAgICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMs
IGdsb2JhbEV4Y2VwdGlvblN0cmluZygpKSk7CiAgICAgfQogCkBAIC0xODIsNyArMTgyLDcgQEAg
SlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdAogICAgIFZPSURfVE9fTlBW
QVJJQU5UKHJlc3VsdFZhcmlhbnQpOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICBBU1NFUlQoZ2xvYmFs
RXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAgICAgICByZXR2YWwgPSBfb2JqZWN0LT5f
Y2xhc3MtPmludm9rZShfb2JqZWN0LCBpZGVudCwgY0FyZ3MuZGF0YSgpLCBjb3VudCwgJnJlc3Vs
dFZhcmlhbnQpOwogICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7
CkBAIC0yMTcsNyArMjE3LDcgQEAgSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRo
b2QoRQogICAgIE5QVmFyaWFudCByZXN1bHRWYXJpYW50OwogICAgIFZPSURfVE9fTlBWQVJJQU5U
KHJlc3VsdFZhcmlhbnQpOwogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgQVNTRVJUKGdsb2JhbEV4Y2VwdGlv
blN0cmluZygpLmlzTnVsbCgpKTsKICAgICAgICAgcmV0dmFsID0gX29iamVjdC0+X2NsYXNzLT5p
bnZva2VEZWZhdWx0KF9vYmplY3QsIGNBcmdzLmRhdGEoKSwgY291bnQsICZyZXN1bHRWYXJpYW50
KTsKICAgICAgICAgbW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpAQCAtMjU2
LDcgKzI1Niw3IEBAIEpTVmFsdWUgQ0luc3RhbmNlOjppbnZva2VDb25zdHJ1Y3QoRXhlY1MKICAg
ICBOUFZhcmlhbnQgcmVzdWx0VmFyaWFudDsKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHRW
YXJpYW50KTsKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoZXhlYyk7CiAgICAgICAgIEFTU0VSVChnbG9iYWxFeGNlcHRpb25TdHJpbmco
KS5pc051bGwoKSk7CiAgICAgICAgIHJldHZhbCA9IF9vYmplY3QtPl9jbGFzcy0+Y29uc3RydWN0
KF9vYmplY3QsIGNBcmdzLmRhdGEoKSwgY291bnQsICZyZXN1bHRWYXJpYW50KTsKICAgICAgICAg
bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpAQCAtMzE1LDcgKzMxNSw3IEBA
IHZvaWQgQ0luc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGEKICAgICBOUElkZW50aWZp
ZXIqIGlkZW50aWZpZXJzOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0
aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAgICAgICBib29sIG9rID0gX29iamVjdC0+X2NsYXNz
LT5lbnVtZXJhdGUoX29iamVjdCwgJmlkZW50aWZpZXJzLCAmY291bnQpOwogICAgICAgICBtb3Zl
R2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvYy9jX3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9jL2NfcnVudGltZS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9jL2NfcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgSlNW
YWx1ZSBDRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdAogCiAgICAgICAgIGJvb2wgcmVz
dWx0OwogICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgICAgIHJlc3VsdCA9IG9iai0+X2Ns
YXNzLT5nZXRQcm9wZXJ0eShvYmosIF9maWVsZElkZW50aWZpZXIsICZwcm9wZXJ0eSk7CiAgICAg
ICAgICAgICBDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsK
ICAgICAgICAgfQpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIENGaWVsZDo6c2V0VmFsdWVUb0luc3Rh
bmNlKEV4ZWNTdGF0CiAgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIGFWYWx1
ZSwgJnZhcmlhbnQpOwogCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICAgICAgb2JqLT5f
Y2xhc3MtPnNldFByb3BlcnR5KG9iaiwgX2ZpZWxkSWRlbnRpZmllciwgJnZhcmlhbnQpOwogICAg
ICAgICAgICAgQ0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAkocmV2
aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbnZlcnRVVEY4
VG9VVEYxNldpdGhMYXRpCiAvLyBWYXJpYW50IHZhbHVlIG11c3QgYmUgcmVsZWFzZWQgd2l0aCBO
UFJlbGVhc2VWYXJpYW50VmFsdWUoKQogdm9pZCBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIE5QVmFyaWFudCogcmVzdWx0KQogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAKICAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0KTsKIApAQCAtMTA3LDcgKzEw
Nyw3IEBAIHZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRlKiAKIAogSlNWYWx1
ZSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE5QVmFyaWFu
dCogdmFyaWFudCwgUm9vdE9iamVjdCogcm9vdE9iamVjdCkKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IAogICAgIE5QVmFyaWFudFR5cGUgdHlwZSA9IHZhcmlhbnQtPnR5cGU7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCShyZXZpc2lvbiAxMjA5MjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjg0LDcgKzI4NCw3IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpjYWxsKGpzdHJpbmcg
bWV0aG8KICAgICAKICAgICAvLyBMb29rdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4KICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgCiAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKGV4ZWMsIEphdmFT
dHJpbmcobWV0aG9kTmFtZSkuaW1wbCgpKTsKICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gX2ltcC0+
Z2V0KGV4ZWMsIGlkZW50aWZpZXIpOwpAQCAtMzA3LDEyICszMDcsMTIgQEAgam9iamVjdCBKYXZh
SlNPYmplY3Q6OmV2YWwoanN0cmluZyBzY3JpcAogewogICAgIExPRyhMaXZlQ29ubmVjdCwgIkph
dmFKU09iamVjdDo6ZXZhbCBzY3JpcHQgPSAlcyIsIEphdmFTdHJpbmcoc2NyaXB0KS51dGY4KCkp
OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAKICAgICBS
b290T2JqZWN0KiByb290T2JqZWN0ID0gdGhpcy0+cm9vdE9iamVjdCgpOwogICAgIGlmICghcm9v
dE9iamVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhyb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAKICAgICByb290T2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxT
Y29wZUNoYWluKCksIG1ha2VTb3VyY2UoSmF2YVN0cmluZyhzY3JpcHQpLmltcGwoKSkpOwogICAg
IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIu
c3RvcCgpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpnZXRNZW1i
ZXIoanN0cmluZyAKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IF9pbXAtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVtYmVy
TmFtZSkuaW1wbCgpKSk7CiAKICAgICByZXR1cm4gY29udmVydFZhbHVlVG9KT2JqZWN0KHJlc3Vs
dCk7CkBAIC0zNDYsNyArMzQ2LDcgQEAgdm9pZCBKYXZhSlNPYmplY3Q6OnNldE1lbWJlcihqc3Ry
aW5nIG1lbQogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNs
b3Q7CiAgICAgX2ltcC0+bWV0aG9kVGFibGUoKS0+cHV0KF9pbXAsIGV4ZWMsIElkZW50aWZpZXIo
ZXhlYywgSmF2YVN0cmluZyhtZW1iZXJOYW1lKS5pbXBsKCkpLCBjb252ZXJ0Sk9iamVjdFRvVmFs
dWUoZXhlYywgdmFsdWUpLCBzbG90KTsKIH0KQEAgLTM2MSw3ICszNjEsNyBAQCB2b2lkIEphdmFK
U09iamVjdDo6cmVtb3ZlTWVtYmVyKGpzdHJpbmcgCiAgICAgICAgIHJldHVybjsKIAogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBfaW1wLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShf
aW1wLCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVtYmVyTmFtZSkuaW1wbCgp
KSk7CiB9CiAKQEAgLTM3Niw3ICszNzYsNyBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6Z2V0U2xv
dChqaW50IGluZGV4CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IF9pbXAtPmdldChleGVjLCBpbmRleCk7CiAKICAgICByZXR1cm4gY29udmVydFZhbHVlVG9K
T2JqZWN0KHJlc3VsdCk7CkBAIC0zOTIsNyArMzkyLDcgQEAgdm9pZCBKYXZhSlNPYmplY3Q6OnNl
dFNsb3QoamludCBpbmRleCwgagogICAgICAgICByZXR1cm47CiAKICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgX2ltcC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChfaW1wLCBleGVjLCAodW5z
aWduZWQpaW5kZXgsIGNvbnZlcnRKT2JqZWN0VG9WYWx1ZShleGVjLCB2YWx1ZSksIGZhbHNlKTsK
IH0KIApAQCAtNDA1LDkgKzQwNSw5IEBAIGpzdHJpbmcgSmF2YUpTT2JqZWN0Ojp0b1N0cmluZygp
IGNvbnN0CiAgICAgaWYgKCFyb290T2JqZWN0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNPYmplY3QgKnRoaXNPYmog
PSBjb25zdF9jYXN0PEpTT2JqZWN0Kj4oX2ltcCk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8anN0cmluZz4oY29udmVy
dFZhbHVlVG9KVmFsdWUoZXhlYywgcm9vdE9iamVjdCwgdGhpc09iaiwgSmF2YVR5cGVPYmplY3Qs
ICJqYXZhLmxhbmcuU3RyaW5nIikubCk7CiB9CkBAIC00NjMsMTMgKzQ2MywxMyBAQCBqbG9uZyBK
YXZhSlNPYmplY3Q6OmNyZWF0ZU5hdGl2ZShqbG9uZyBuCiAKIGpvYmplY3QgSmF2YUpTT2JqZWN0
Ojpjb252ZXJ0VmFsdWVUb0pPYmplY3QoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIAogICAgIFJvb3RPYmplY3QqIHJv
b3RPYmplY3QgPSB0aGlzLT5yb290T2JqZWN0KCk7CiAgICAgaWYgKCFyb290T2JqZWN0KQogICAg
ICAgICByZXR1cm4gMDsKIAorICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKICAgICBqb2JqZWN0IHJlc3VsdCA9
IDA7CiAgICAgCkBAIC01NTQsNyArNTU0LDcgQEAgSlNWYWx1ZSBKYXZhSlNPYmplY3Q6OmNvbnZl
cnRKT2JqZWN0VG9WYQogICAgIC8vIGZpZ3VyZSAyMi00LgogICAgIGpvYmplY3QgY2xhc3NPZklu
c3RhbmNlID0gY2FsbEpOSU1ldGhvZDxqb2JqZWN0Pih0aGVPYmplY3QsICJnZXRDbGFzcyIsICIo
KUxqYXZhL2xhbmcvQ2xhc3M7Iik7CiAgICAgaWYgKCFjbGFzc09mSW5zdGFuY2UpIHsKLSAgICAg
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHJldHVybiBKYXZhSW5zdGFuY2U6OmNyZWF0ZSh0aGVP
YmplY3QsIF9yb290T2JqZWN0KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKICAgICB9CiAK
QEAgLTU2Myw3ICs1NjMsNyBAQCBKU1ZhbHVlIEphdmFKU09iamVjdDo6Y29udmVydEpPYmplY3RU
b1ZhCiAgICAgLy8gcG9pbnRlciBhbmQgc3RvcmVzIGl0IGluIHRoaXMgb2JqZWN0LCBzbyB0aGF0
IGl0IGNhbiBiZSByZXRyaWV2ZWQgYmVsb3cuCiAgICAganN0cmluZyBjbGFzc05hbWUgPSAoanN0
cmluZyljYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGNsYXNzT2ZJbnN0YW5jZSwgImdldE5hbWUiLCAi
KClMamF2YS9sYW5nL1N0cmluZzsiKTsKICAgICBpZiAoIWNsYXNzTmFtZSB8fCAoc3RyY21wKEph
dmFTdHJpbmcoY2xhc3NOYW1lKS51dGY4KCksICJzdW4ucGx1Z2luLmphdmFzY3JpcHQud2Via2l0
LkpTT2JqZWN0IikgIT0gMCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHJldHVy
biBKYXZhSW5zdGFuY2U6OmNyZWF0ZSh0aGVPYmplY3QsIF9yb290T2JqZWN0KS0+Y3JlYXRlUnVu
dGltZU9iamVjdChleGVjKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvam5pX29iamMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9q
bmlfb2JqYy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2pu
aS9qbmlfb2JqYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBib29sIEpTQzo6
QmluZGluZ3M6OmRpc3BhdGNoSk5JQ2FsbChFeGVjCiAgICAgICAgIC8vIGltcGxlbWVudGVkIGlu
IFdlYkNvcmUgd2lsbCBndWFyYW50ZWUgdGhhdCBvbmx5IGFwcHJvcHJpYXRlIEphdmFTY3JpcHQK
ICAgICAgICAgLy8gY2FuIHJlZmVyZW5jZSB0aGUgYXBwbGV0LgogICAgICAgICB7Ci0gICAgICAg
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7
CiAgICAgICAgICAgICByZXN1bHQgPSBbdmlldyB3ZWJQbHVnSW5DYWxsSmF2YTpvYmogaXNTdGF0
aWM6aXNTdGF0aWMgcmV0dXJuVHlwZTpyZXR1cm5UeXBlIG1ldGhvZDptZXRob2RJRCBhcmd1bWVu
dHM6YXJncyBjYWxsaW5nVVJMOm5pbCBleGNlcHRpb25EZXNjcmlwdGlvbjomX2V4Y2VwdGlvbkRl
c2NyaXB0aW9uXTsKICAgICAgICAgfQogCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgSlNDOjpCaW5k
aW5nczo6ZGlzcGF0Y2hKTklDYWxsKEV4ZWMKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0lu
Q2FsbEphdmE6bWV0aG9kOnJldHVyblR5cGU6YXJndW1lbnRzOildKSB7Ci0gICAgICAgIEpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7CiAgICAgICAgIHJl
c3VsdCA9IFt2aWV3IHdlYlBsdWdJbkNhbGxKYXZhOm9iaiBtZXRob2Q6bWV0aG9kSUQgcmV0dXJu
VHlwZTpyZXR1cm5UeXBlIGFyZ3VtZW50czphcmdzXTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0
aWxpdHlQcml2YXRlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQs
NyArMTc0LDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VUb0phdgogCiBq
dmFsdWUgY29udmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBSb290T2JqZWN0KiBy
b290T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBKYXZhVHlwZSBqYXZhVHlwZSwgY29uc3QgY2hhciog
amF2YUNsYXNzTmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAganZhbHVlIHJlc3VsdDsKICAg
ICBtZW1zZXQoJnJlc3VsdCwgMCwgc2l6ZW9mKGp2YWx1ZSkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIEphdmFDbGFzczo6SmF2YUNsYXNzKGpvYmplY3Qg
YW5JbnN0YW5jZSkKICAgICAgICAgICAgIGpvYmplY3QgYUpGaWVsZCA9IGVudi0+R2V0T2JqZWN0
QXJyYXlFbGVtZW50KChqb2JqZWN0QXJyYXkpZmllbGRzLCBpKTsKICAgICAgICAgICAgIEphdmFG
aWVsZCogYUZpZWxkID0gbmV3IEphdmFGaWVsZChlbnYsIGFKRmllbGQpOyAvLyBkZWxldGVkIGlu
IHRoZSBKYXZhQ2xhc3MgZGVzdHJ1Y3RvcgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNMb2NrIGhlcmU/CiAgICAgICAgICAgICAgICAg
bV9maWVsZHMuc2V0KGFGaWVsZC0+bmFtZSgpLmltcGwoKSwgYUZpZWxkKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoYUpGaWVsZCk7CkBAIC03OSw3ICs3
OSw3IEBAIEphdmFDbGFzczo6SmF2YUNsYXNzKGpvYmplY3QgYW5JbnN0YW5jZSkKICAgICAgICAg
ICAgIEphdmFNZXRob2QqIGFNZXRob2QgPSBuZXcgSmF2YU1ldGhvZChlbnYsIGFKTWV0aG9kKTsg
Ly8gZGVsZXRlZCBpbiB0aGUgSmF2YUNsYXNzIGRlc3RydWN0b3IKICAgICAgICAgICAgIE1ldGhv
ZExpc3QqIG1ldGhvZExpc3Q7CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
U2hvdWxkIHdlIGFjcXVpcmUgYSBKU0xvY2sgaGVyZT8KIAogICAgICAgICAgICAgICAgIG1ldGhv
ZExpc3QgPSBtX21ldGhvZHMuZ2V0KGFNZXRob2QtPm5hbWUoKS5pbXBsKCkpOwogICAgICAgICAg
ICAgICAgIGlmICghbWV0aG9kTGlzdCkgewpAQCAtMTAwLDcgKzEwMCw3IEBAIEphdmFDbGFzczo6
fkphdmFDbGFzcygpCiB7CiAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDxjaGFyKj4obV9uYW1lKSk7
CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIC8vIEZJWE1F
OiBTaG91bGQgd2UgYWNxdWlyZSBhIEpTTG9jayBoZXJlPwogCiAgICAgZGVsZXRlQWxsVmFsdWVz
KG1fZmllbGRzKTsKICAgICBtX2ZpZWxkcy5jbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIENsYXNzKiBKYXZhSW5zdGFuY2U6Omdl
dENsYXNzKCkgY29uc3QKIAogSlNWYWx1ZSBKYXZhSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAganN0cmluZyBzdHJpbmdW
YWx1ZSA9IChqc3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVjdD4obV9pbnN0YW5jZS0+aW5zdGFu
Y2UoKSwgInRvU3RyaW5nIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7Iik7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhTWV0aG9kSlND
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBKYXZhTWV0aG9kOjp+SmF2YU1l
dGhvZCgpCiAvLyB3ZSBnZXQgJy4nIGJldHdlZW4gY29tcG9uZW50cyBmcm9tIHRoZSByZWZsZWN0
aW9uIEFQSS4KIHN0YXRpYyB2b2lkIGFwcGVuZENsYXNzTmFtZShTdHJpbmdCdWlsZGVyJiBidWls
ZGVyLCBjb25zdCBjaGFyKiBjbGFzc05hbWUpCiB7Ci0gICAgQVNTRVJUKEpTTG9jazo6bG9ja0Nv
dW50KCkgPiAwKTsKKyAgICBBU1NFUlQoSlNDOjpKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNl
KCkuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogCiAgICAgY2hhciog
YyA9IGZhc3RTdHJEdXAoY2xhc3NOYW1lKTsKIApAQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyB2
b2lkIGFwcGVuZENsYXNzTmFtZShTdHJpbmdCdWlsZGUKIGNvbnN0IGNoYXIqIEphdmFNZXRob2Q6
OnNpZ25hdHVyZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NpZ25hdHVyZSkgewotICAgICAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAvLyBGSVhNRTogU2hv
dWxkIHdlIGFjcXVpcmUgYSBKU0xvY2sgaGVyZT8KIAogICAgICAgICBTdHJpbmdCdWlsZGVyIHNp
Z25hdHVyZUJ1aWxkZXI7CiAgICAgICAgIHNpZ25hdHVyZUJ1aWxkZXIuYXBwZW5kKCcoJyk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlNDLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YVN0cmluZ0pTQy5oCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhU3Ry
aW5nSlNDLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgSmF2YVN0
cmluZ0pTQ19oCiAKICNpbmNsdWRlICJKTklVdGlsaXR5LmgiCisjaW5jbHVkZSAiSlNET01XaW5k
b3dCYXNlLmgiCiAjaW5jbHVkZSAiSmF2YUluc3RhbmNlSlNDLmgiCiAKICNpbmNsdWRlIDxydW50
aW1lL0pTTG9jay5oPgpAQCAtNTIsMjAgKzUzLDIwIEBAIHB1YmxpYzoKIAogICAgIEphdmFTdHJp
bmcoKQogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIG1faW1wbCA9IFVTdHJpbmcoKS5pbXBsKCk7CiAg
ICAgfQogCiAgICAgfkphdmFTdHJpbmcoKQogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIG1faW1wbCA9
IDA7CiAgICAgfQogCiAgICAgY29uc3QgY2hhciogdXRmOCgpIGNvbnN0CiAgICAgewogICAgICAg
ICBpZiAoIW1fdXRmOFN0cmluZy5kYXRhKCkpIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJD
b3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAg
IG1fdXRmOFN0cmluZyA9IFVTdHJpbmcobV9pbXBsKS51dGY4KCk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIG1fdXRmOFN0cmluZy5kYXRhKCk7CkBAIC03OSw3ICs4MCw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGludCBzaXplID0gZS0+R2V0U3RyaW5nTGVuZ3RoKHMpOwogICAgICAgICBjb25z
dCBqY2hhciogdWMgPSBnZXRVQ2hhcmFjdGVyc0Zyb21KU3RyaW5nSW5FbnYoZSwgcyk7CiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIG1faW1wbCA9IFVTdHJpbmcocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHVjKSwgc2l6ZSkuaW1wbCgpOwogICAgICAgICB9CiAg
ICAgICAgIHJlbGVhc2VVQ2hhcmFjdGVyc0ZvckpTdHJpbmdJbkVudihlLCBzLCB1Yyk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkyLDcgKzkyLDcgQEAgSlNPYmplY3QqIEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2Jq
ZWN0KAogICAgIGlmIChSdW50aW1lT2JqZWN0KiBleGlzdGluZ09iamVjdCA9IG1fcnVudGltZU9i
amVjdC5nZXQoKSkKICAgICAgICAgcmV0dXJuIGV4aXN0aW5nT2JqZWN0OwogCi0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICBSdW50aW1lT2JqZWN0KiBuZXdPYmplY3QgPSBuZXdSdW50aW1lT2JqZWN0KGV4ZWMp
OwogICAgIG1fcnVudGltZU9iamVjdCA9IFBhc3NXZWFrPFJ1bnRpbWVPYmplY3Q+KG5ld09iamVj
dCk7CiAgICAgbV9yb290T2JqZWN0LT5hZGRSdW50aW1lT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgbmV3T2JqZWN0KTsKQEAgLTEwMSw3ICsxMDEsNyBAQCBKU09iamVjdCogSW5zdGFuY2U6OmNy
ZWF0ZVJ1bnRpbWVPYmplY3QoCiAKIFJ1bnRpbWVPYmplY3QqIEluc3RhbmNlOjpuZXdSdW50aW1l
T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgLy8gRklYTUU6
IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUg
d3JvbmcgZ2xvYmFsIG9iamVjdAogICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQg
Z2xvYmFsIG9iamVjdCBmb3IgImkiLgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMv
b2JqY19pbnN0YW5jZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2Jq
Yy9vYmpjX2luc3RhbmNlLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3
IEBAIHZvaWQgT2JqY0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG8KICAgICB9CiAKICAg
ICBpZiAoIXNfZXhjZXB0aW9uRW52aXJvbm1lbnQgfHwgc19leGNlcHRpb25FbnZpcm9ubWVudCA9
PSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAg
ICAgICAgIHRocm93RXJyb3IoZXhlYywgc19leGNlcHRpb24pOwogICAgIH0KIApAQCAtMjM5LDcg
KzIzOSw3IEBAIEpTVmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VPYmpjTWV0aG9kKEUKIHsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgCi0gICAgSlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7IC8vIENhbid0IHB1
dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0
bHkuCisgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOyAvLyBDYW4n
dCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29y
cmVjdGx5LgogCiAgICAgc2V0R2xvYmFsRXhjZXB0aW9uKG5pbCk7CiAgICAgCkBAIC0zNTQsNyAr
MzU0LDcgQEAgSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRobwogewogICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQgdGhp
cyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5Lgor
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0
IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3Rs
eS4KICAgICBzZXRHbG9iYWxFeGNlcHRpb24obmlsKTsKICAgICAKIEB0cnkgewpAQCAtNDExLDcg
KzQxMSw3IEBAIGJvb2wgT2JqY0luc3RhbmNlOjpzZXRWYWx1ZU9mVW5kZWZpbmVkRmkKICAgICBp
ZiAoIVt0YXJnZXRPYmplY3QgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRWYWx1ZTpm
b3JVbmRlZmluZWRLZXk6KV0pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4n
dCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29y
cmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8g
Q2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBp
bmNvcnJlY3RseS4KIAogICAgIC8vIFRoaXMgY2hlY2sgaXMgbm90IHJlYWxseSBuZWNlc3Nhcnkg
YmVjYXVzZSBOU09iamVjdCBpbXBsZW1lbnRzCiAgICAgLy8gc2V0VmFsdWU6Zm9yVW5kZWZpbmVk
S2V5OiwgYW5kIHVuZm9ydHVuYXRlbHkgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KQEAgLTQ0
Myw3ICs0NDMsNyBAQCBKU1ZhbHVlIE9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZlVuZGVmaW5lCiAg
ICAgCiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gZ2V0T2JqZWN0KCk7CiAKLSAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3Qg
cHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJl
Y3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENh
bid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5j
b3JyZWN0bHkuCiAKICAgICAvLyBUaGlzIGNoZWNrIGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5IGJl
Y2F1c2UgTlNPYmplY3QgaW1wbGVtZW50cwogICAgIC8vIHZhbHVlRm9yVW5kZWZpbmVkS2V5Oiwg
YW5kIHVuZm9ydHVuYXRlbHkgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtOTIsMTkgKzkyLDE4IEBAIEpTVmFsdWUgT2JqY0ZpZWxkOjp2YWx1ZUZyb21JbnN0
YW5jZShFeGUKICAgICAKICAgICBpZCB0YXJnZXRPYmplY3QgPSAoc3RhdGljX2Nhc3Q8Y29uc3Qg
T2JqY0luc3RhbmNlKj4oaW5zdGFuY2UpKS0+Z2V0T2JqZWN0KCk7CiAKLSAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3Qg
cHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJl
Y3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENh
bid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5j
b3JyZWN0bHkuCiAKICAgICBAdHJ5IHsKICAgICAgICAgaWYgKGlkIG9iamNWYWx1ZSA9IFt0YXJn
ZXRPYmplY3QgdmFsdWVGb3JLZXk6KE5TU3RyaW5nICopX25hbWUuZ2V0KCldKQogICAgICAgICAg
ICAgcmVzdWx0ID0gY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJm9iamNWYWx1ZSwgT2Jq
Y09iamVjdFR5cGUsIGluc3RhbmNlLT5yb290T2JqZWN0KCkpOwogICAgICAgICB7Ci0gICAgICAg
ICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgICAgICBPYmpjSW5zdGFuY2U6Om1vdmVHbG9i
YWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKICAgICAgICAgfQogICAgIH0gQGNhdGNoKE5T
RXhjZXB0aW9uKiBsb2NhbEV4Y2VwdGlvbikgewotICAgICAgICBKU0xvY2s6OmxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
ICAgIHRocm93RXJyb3IoZXhlYywgW2xvY2FsRXhjZXB0aW9uIHJlYXNvbl0pOwotICAgICAgICBK
U0xvY2s6OnVubG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIH0KIAogICAgIC8vIFdv
cmsgYXJvdW5kIHByb2JsZW0gaW4gc29tZSB2ZXJzaW9ucyBvZiBHQ0Mgd2hlcmUgcmVzdWx0IGdl
dHMgbWFya2VkIHZvbGF0aWxlIGFuZApAQCAtMTI1LDE4ICsxMjQsMTcgQEAgdm9pZCBPYmpjRmll
bGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjUwogICAgIGlkIHRhcmdldE9iamVjdCA9IChzdGF0
aWNfY2FzdDxjb25zdCBPYmpjSW5zdGFuY2UqPihpbnN0YW5jZSkpLT5nZXRPYmplY3QoKTsKICAg
ICBpZCB2YWx1ZSA9IGNvbnZlcnRWYWx1ZVRvT2JqY09iamVjdChleGVjLCBhVmFsdWUpOwogCi0g
ICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVu
d2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBp
dCB1bndpbmRzIGluY29ycmVjdGx5LgogCiAgICAgQHRyeSB7CiAgICAgICAgIFt0YXJnZXRPYmpl
Y3Qgc2V0VmFsdWU6dmFsdWUgZm9yS2V5OihOU1N0cmluZyAqKV9uYW1lLmdldCgpXTsKICAgICAg
ICAgewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAgICAgT2JqY0luc3Rh
bmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgICAgIH0KICAg
ICB9IEBjYXRjaChOU0V4Y2VwdGlvbiogbG9jYWxFeGNlcHRpb24pIHsKLSAgICAgICAgSlNMb2Nr
Ojpsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFtsb2NhbEV4Y2VwdGlvbiByZWFzb25d
KTsKLSAgICAgICAgSlNMb2NrOjp1bmxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICB9
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW0J
KHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRp
bGl0eS5tbQkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBPYmpjVmFsdWUgY29udmVy
dFZhbHVlVG9PYmpjVmFsdWUoRXhlY1N0CiAKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAg
Y2FzZSBPYmpjT2JqZWN0VHlwZTogewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCAqb3JpZ2luR2xvYmFsT2JqZWN0
ID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpOwogICAgICAgICAgICAgUm9vdE9iamVjdCog
b3JpZ2luUm9vdE9iamVjdCA9IGZpbmRSb290T2JqZWN0KG9yaWdpbkdsb2JhbE9iamVjdCk7CkBA
IC0xNDYsNyArMTQ2LDcgQEAgT2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4ZWNT
dAogCiBKU1ZhbHVlIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgTlNT
dHJpbmcgKm5zc3RyaW5nKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCiAgICAgdW5pY2hhciAqY2hh
cnM7CiAgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IFtuc3N0cmluZyBsZW5ndGhdOwpAQCAtMTc4
LDcgKzE3OCw3IEBAIEpTVmFsdWUgY29udmVydE5TU3RyaW5nVG9TdHJpbmcoRXhlY1N0YXQKICov
CiBKU1ZhbHVlIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCog
YnVmZmVyLCBPYmpjVmFsdWVUeXBlIHR5cGUsIFJvb3RPYmplY3QqIHJvb3RPYmplY3QpCiB7Ci0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBPYmpj
T2JqZWN0VHlwZTogewpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2Uu
Y3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5z
dGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlICJF
cnJvci5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93
QmFzZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgi
CiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCkBAIC05Miw3ICs5Myw3IEBAIFF0SW5zdGFu
Y2U6OlF0SW5zdGFuY2UoUU9iamVjdCogbywgUGFzc1IKIAogUXRJbnN0YW5jZTo6flF0SW5zdGFu
Y2UoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAK
ICAgICBjYWNoZWRJbnN0YW5jZXMucmVtb3ZlKG1faGFzaGtleSk7CiAKQEAgLTExOSw3ICsxMjAs
NyBAQCBRdEluc3RhbmNlOjp+UXRJbnN0YW5jZSgpCiAKIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4g
UXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShRT2JqZWN0KiBvLCBQYXNzUmVmUHRyPFJvb3RPYmpl
Y3Q+IHJvb3RPYmplY3QsIFZhbHVlT3duZXJzaGlwIG93bmVyc2hpcCkKIHsKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgZm9yZWFjaCAoUXRJbnN0
YW5jZSogaW5zdGFuY2UsIGNhY2hlZEluc3RhbmNlcy52YWx1ZXMobykpCiAgICAgICAgIGlmIChp
bnN0YW5jZS0+cm9vdE9iamVjdCgpID09IHJvb3RPYmplY3QpIHsKQEAgLTE4MCw3ICsxODEsNyBA
QCBDbGFzcyogUXRJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdAogCiBSdW50aW1lT2JqZWN0KiBR
dEluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgIG1fbWV0aG9kcy5jbGVhcigpOwogICAgIHJldHVybiBRdFJ1bnRpbWVPYmplY3Q6
OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRoaXMpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAkocmV2
aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRp
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsNyArNDIwLDcgQEAgUnVudGltZU9iamVjdCog
UXRQaXhtYXBJbnN0YW5jZTo6bmV3UnVudAogCiBKU09iamVjdCogUXRQaXhtYXBJbnN0YW5jZTo6
Y3JlYXRlUGl4bWFwUnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8Um9v
dE9iamVjdD4gcm9vdCwgY29uc3QgUVZhcmlhbnQmIGRhdGEpCiB7Ci0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICBSZWZQdHI8UXRQaXhtYXBJbnN0YW5jZT4gaW5zdGFuY2UgPSBhZG9wdFJlZihuZXcgUXRQaXht
YXBJbnN0YW5jZShyb290LCBkYXRhKSk7CiAgICAgcmV0dXJuIGluc3RhbmNlLT5jcmVhdGVSdW50
aW1lT2JqZWN0KGV4ZWMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1
bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50
aW1lLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X3J1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNyArMjMwLDcgQEAgUVZhcmlhbnQg
Y29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdAogICAgICAgICByZXR1cm4gUVZhcmlhbnQo
KTsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTUmVhbFR5cGUgdHlwZSA9IHZhbHVlUmVh
bFR5cGUoZXhlYywgdmFsdWUpOwogICAgIGlmIChoaW50ID09IFFNZXRhVHlwZTo6Vm9pZCkgewog
ICAgICAgICBzd2l0Y2godHlwZSkgewpAQCAtODI0LDcgKzgyNCw3IEBAIEpTVmFsdWUgY29udmVy
dFFWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAg
IH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6OkJvb2wpCiAg
ICAgICAgIHJldHVybiBqc0Jvb2xlYW4odmFyaWFudC50b0Jvb2woKSk7CkBAIC0xNDIwLDcgKzE0
MjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjYWxsCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyBXZSBoYXZl
IHRvIHBpY2sgYSBtZXRob2QgdGhhdCBtYXRjaGVzLi4KLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgUU9i
amVjdCAqb2JqID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7CiAgICAgaWYgKG9iaikgewpA
QCAtMTU2MSw3ICsxNTYxLDcgQEAgRW5jb2RlZEpTVmFsdWUgUXRSdW50aW1lQ29ubmVjdGlvbk1l
dGhvZAogewogICAgIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhKiBkID0gc3RhdGljX2Nh
c3Q8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCAqPihleGVjLT5jYWxsZWUoKSktPmRfZnVuYygp
OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKIAogICAgIFFPYmplY3QqIHNlbmRlciA9IGQtPm1faW5zdGFuY2Ut
PmdldE9iamVjdCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGlt
ZV9xdDQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50
aW1lX3F0NC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9x
dC9xdF9ydW50aW1lX3F0NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw3ICsyMzAsNyBAQCBR
VmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgIHJldHVybiBR
VmFyaWFudCgpOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNSZWFsVHlwZSB0eXBlID0g
dmFsdWVSZWFsVHlwZShleGVjLCB2YWx1ZSk7CiAgICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpW
b2lkKSB7CiAgICAgICAgIHN3aXRjaCh0eXBlKSB7CkBAIC04MjQsNyArODI0LDcgQEAgSlNWYWx1
ZSBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0ZQogICAgICAgICByZXR1cm4ganNOdWxs
KCk7CiAgICAgfQogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6
Qm9vbCkKICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih2YXJpYW50LnRvQm9vbCgpKTsKQEAgLTE0
MjksNyArMTQyOSw3IEBAIEVuY29kZWRKU1ZhbHVlIFF0UnVudGltZU1ldGFNZXRob2Q6OmNhbGwK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8v
IFdlIGhhdmUgdG8gcGljayBhIG1ldGhvZCB0aGF0IG1hdGNoZXMuLgotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAK
ICAgICBRT2JqZWN0ICpvYmogPSBkLT5tX2luc3RhbmNlLT5nZXRPYmplY3QoKTsKICAgICBpZiAo
b2JqKSB7CkBAIC0xNTcwLDcgKzE1NzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBRdFJ1bnRpbWVDb25u
ZWN0aW9uTWV0aG9kCiB7CiAgICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERhdGEqIGQgPSBz
dGF0aWNfY2FzdDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kICo+KGV4ZWMtPmNhbGxlZSgpKS0+
ZF9mdW5jKCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgUU9iamVjdCogc2VuZGVyID0gZC0+bV9p
bnN0YW5jZS0+Z2V0T2JqZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUxLDcgKzU1MSw3IEBA
IHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmUKICAgICBtX2NvbnRleHRT
dGF0ZVNhdmVyID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIoKm1faW1h
Z2VCdWZmZXItPmNvbnRleHQoKSkpOwogCiAjaWYgVVNFKEpTQykKLSAgICBKU0M6OkpTTG9jayBs
b2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpKTsKICAgICBzaXplX3Qg
bnVtQnl0ZXMgPSA0ICogbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIG1f
aW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLmhlaWdodCgpOwogICAgIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChudW1C
eXRlcyk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5j
cHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsOCArODEsOCBAQCB2b2lkIEhUTUxJbWFnZUxv
YWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiAjaWYgVVNFKEpTQykKICAgICBpZiAoIWxvYWRFcnJv
cikgewogICAgICAgICBpZiAoIWVsZW0tPmluRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgSlND
OjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgICAgICBK
U0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCk7CisgICAgICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERh
dGEpOwogICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qo
Y2FjaGVkSW1hZ2UtPmVuY29kZWRTaXplKCkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAs
NyArMjQwLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpzdGFydCgpCiAgICAgewogICAgICAgICBQbHVn
aW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKICNpZiBVU0UoSlNDKQotICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAg
ICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS51dGY4KCkuZGF0YSgpLCBt
X2luc3RhbmNlLCBtX21vZGUsIG1fcGFyYW1Db3VudCwgbV9wYXJhbU5hbWVzLCBtX3BhcmFtVmFs
dWVzLCBOVUxMKTsKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnN0b3AoKQog
ICAgIG1faXNTdGFydGVkID0gZmFsc2U7CiAKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCkBAIC00NDYsNyArNDQ2LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwZXJmb3Jt
UmVxdWVzdChQbHVnaW5SZQogICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnNlbmROb3RpZmljYXRp
b24oKSkgewogICAgICAgICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3
KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAg
ICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKQEAgLTczNiw3ICs3
MzYsNyBAQCBOUE9iamVjdCogUGx1Z2luVmlldzo6bnBPYmplY3QoKQogICAgIHsKICAgICAgICAg
UGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAjaWYgVVNFKEpTQykKLSAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICNlbmRpZgog
ICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBucEVyciA9IG1fcGx1Z2lu
LT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJs
ZU5QT2JqZWN0LCAmb2JqZWN0KTsKQEAgLTE0OTIsNyArMTQ5Miw3IEBAIHZvaWQgUGx1Z2luVmll
dzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGEKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAg
ICBOUEJvb2wgdmFsdWUgPSBwcml2YXRlQnJvd3NpbmdFbmFibGVkOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdCbGFja0JlcnJ5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNr
QmVycnkuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2Js
YWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMs
NyArNDAzLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmll
dyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKQEAgLTk3MCw3ICs5NzAs
NyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAgICAgICAoKE5Q
U2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5mbyktPndpbmRvd0dyb3Vw
ID0gd2luZG93LT53aW5kb3dHcm91cCgpOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBs
dWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAKICAgICAvLyBGSVhNRTogUGFzc2luZyB6
b29tRmFjdG9yIHRvIHNldHdpbmRvdyBtYWtlIHdpbmRvd2VkIHBsdWdpbiBzY2FsZSBpbmNvcnJl
Y3RseS4KQEAgLTEyMjAsNyArMTIyMCw3IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFy
dCgpCiAKICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7CiAgICAg
ICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBzZXRDYWxsaW5n
UGx1Z2luKHRydWUpOwogICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUo
bV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7CiAgICAg
ICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtMTMwMSw3ICsxMzAxLDcgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpnZXRXaW5kb3dJbmZvKFZlY3RvcjxQbAogICAgIHZvaWQqIHZhbFB0ciA9IDA7
CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0
cnVlKTsKICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwg
TlBQVnBsdWdpblNjcmVlbldpbmRvdywgJnZhbFB0cik7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihm
YWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZs
LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1
Z2luVmlld0VmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBQbHVn
aW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0
ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3
R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIGJvb2wgUGx1Z2luVmll
dzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
UGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAK
ICAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2lu
c3RhbmNlLCAmZXZlbnQpOwpAQCAtMjc2LDcgKzI3Niw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0KiAKIAogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2
ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKIAogICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1
Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQogICAgICAgICByZXR1cm47CkBAIC00MDYsNyAr
NDA2LDcgQEAgc3RhdGljIHZvaWQgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZpY0ZpZQogCiB2b2lk
IFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCiB7Ci0gICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgaWYgKCFtX2lzU3Rh
cnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTUzNSw3ICs1MzUsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2lu
ZG93SWZOZWVkZWQoKQogICAgIH0KIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5W
aWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5z
ZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwogICAgIHNldENhbGxpbmdQbHVnaW4o
ZmFsc2UpOwpAQCAtODQyLDcgKzg0Miw3IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFy
dCgpCiAjaWYgZGVmaW5lZChYUF9VTklYKQogICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+Z2V0dmFsdWUpIHsKICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
dGhpcyk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZt
X25lZWRzWEVtYmVkKTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW0JKHJldmlzaW9uIDEy
MDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQyNiw3ICs0MjYsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2lu
ZG93SWZOZWVkZWQoKQogICAgICAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCAtIG1f
bnBXaW5kb3cuY2xpcFJlY3QubGVmdCwgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gLSBtX25w
V2luZG93LmNsaXBSZWN0LnRvcCk7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
Vmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAg
ICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKICAgICBzZXRDYWxsaW5nUGx1Z2lu
KGZhbHNlKTsKQEAgLTc3Miw3ICs3NzIsNyBAQCBQb2ludCBQbHVnaW5WaWV3Ojptb3VzZVBvc0Zv
clBsdWdpbihNb3VzCiBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBl
dmVudCkKIHsKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1Bs
dWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvcXQvUGx1Z2luVmlld1F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL3F0L1BsdWdpblZpZXdRdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzczLDcg
KzM3Myw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQKIAogICAg
IFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0g
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgc2V0
Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpAQCAtNjg3LDcgKzY4Nyw3IEBA
IHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAKICAgICBQbHVnaW5WaWV3
OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICNlbmRpZgogICAgIHNldENhbGxpbmdQbHVn
aW4odHJ1ZSk7CiAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3Rh
bmNlLCAmbV9ucFdpbmRvdyk7CkBAIC05NDksNyArOTQ5LDcgQEAgYm9vbCBQbHVnaW5WaWV3Ojpw
bGF0Zm9ybVN0YXJ0KCkKICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVl
KSB7CiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lm
IFVTRShKU0MpCi0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAjZW5kaWYKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVk
c1hFbWJlZCwgJm1fbmVlZHNYRW1iZWQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy93
aW4vUGx1Z2luVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjYs
NyArNTI2LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAg
ICAgICBzaG91bGRQb3AgPSB0cnVlOwogICAgIH0KIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIGJvb2wg
YWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZu
cEV2ZW50KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAgLTY3Nyw3ICs2NzcsNyBA
QCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5CiAgICAgfSBlbHNlCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQogICAgICAgICBldmVudC0+c2V0
RGVmYXVsdEhhbmRsZWQoKTsKIH0KQEAgLTc0Nyw3ICs3NDcsNyBAQCB2b2lkIFBsdWdpblZpZXc6
OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFCiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAvLyBGSVhNRTog
Q29uc2lkZXIgYmFjayBwb3J0aW5nIHRoZSBodHRwOi8vd2Via2l0Lm9yZy9iLzU4MTA4IGZpeCBo
ZXJlLgogICAgIGlmIChkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCiAgICAgICAgIGV2ZW50LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOwpAQCAtODM1LDcgKzgzNSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6
c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEkKICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7
CiAKICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgewotICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBzZXRD
YWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0
d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdp
bihmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3Vw
cG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3Jl
VGVzdFN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmVUZXN0U3VwcG9ydCB7CiAKIHZvaWQgaW5qZWN0SW50ZXJu
YWxzT2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0g
Z2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gc2NyaXB0Q29udGV4dC0+aXNEb2N1bWVudCgpID8gc3RhdGljX2Nhc3Q8RG9jdW1l
bnQqPihzY3JpcHRDb250ZXh0KSA6IDA7CkBAIC00OSw4ICs0OSw4IEBAIHZvaWQgaW5qZWN0SW50
ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJlZiAKIAogdm9pZCByZXNldEludGVybmFsc09iamVjdChK
U0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7
CiAgICAgSW50ZXJuYWxzICogaW50ZXJuYWxzID0gdG9JbnRlcm5hbHMoZ2xvYmFsT2JqZWN0LT5n
ZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsIEludGVybmFsczo6
aW50ZXJuYWxzSWQpKSk7CiAgICAgaWYgKGludGVybmFscykgewpJbmRleDogU291cmNlL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTEsOCArODUxLDgg
QEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24oKQogICAgIC8vIG91dC4gQnV0
IGl0IGlzIHByb3RlY3RlZCBmcm9tIEdDIHdoaWxlIGxvYWRpbmcsIHNvIHRoaXMKICAgICAvLyBj
YW4ndCBiZSByZWNvdXBlZCB1bnRpbCB0aGUgbG9hZCBpcyBkb25lLCBzbyBvbmx5CiAgICAgLy8g
cmVwb3J0IHRoZSBleHRyYSBjb3N0IGF0IHRoYXQgcG9pbnQuCi0gICAgSlNDOjpKU0xvY2sgbG9j
ayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmdsb2JhbERhdGEoKTsKKyAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEpOwogICAgIGdsb2JhbERhdGEtPmhlYXAu
cmVwb3J0RXh0cmFNZW1vcnlDb3N0KG1fcmVzcG9uc2VCdWlsZGVyLmxlbmd0aCgpICogMik7CiAj
ZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTItMDYtMjAg
IE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBKU0xv
Y2sgc2hvdWxkIGJlIHBlci1KU0dsb2JhbERhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBhbGwgc2l0ZXMgdGhhdCB1c2VkIEpTTG9jayB0
byBpbnN0ZWFkIHVzZSB0aGUgbmV3IEpTTG9ja0hvbGRlcgorICAgICAgICBhbmQgcGFzcyBpbiB0
aGUgY29ycmVjdCBKUyBjb250ZXh0IHRoYXQgdGhlIGNvZGUgaXMgYWJvdXQgdG8gaW50ZXJhY3Qg
d2l0aCB0aGF0IAorICAgICAgICBuZWVkcyBwcm90ZWN0aW9uLgorCisgICAgICAgICogU2hhcmVk
L21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5
U2FtcGxlcjo6c2FtcGxlV2ViS2l0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6
OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRs
ZTo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvSlNOUE9iamVjdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxNZXRo
b2QpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpjYWxsT2JqZWN0KToKKyAgICAgICAg
KFdlYktpdDo6SlNOUE9iamVjdDo6Y2FsbENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6
SlNOUE9iamVjdDo6cHV0KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6ZGVsZXRlUHJv
cGVydHkpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6cHJvcGVydHlHZXR0ZXIpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TlBKU09iamVjdDo6aGFzTWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6TlBKU09i
amVjdDo6aW52b2tlKToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aW52b2tlRGVmYXVs
dCk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6Omhhc1Byb3BlcnR5KToKKyAgICAgICAg
KFdlYktpdDo6TlBKU09iamVjdDo6Z2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpT
T2JqZWN0OjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6OnJlbW92
ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6ZW51bWVyYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6Y29uc3RydWN0KToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpjb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KToKKyAg
ICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpldmFsdWF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRl
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJGcmFtZTo6anNXcmFwcGVyRm9yV29ybGQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZTo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6Z2V0V2ViQ29yZVN0YXRpc3Rp
Y3MpOgorCiAyMDEyLTA2LTIxICBSeXVhbiBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4K
IAogICAgICAgICBbRUZMW1dLMl0gQWRkIFdLVmlld0VmbCBhbmQgV2ViS2l0MiBBUEkgT2JqZWN0
IHRvIHJlcHJlc2VudCBFdmFzX09iamVjdC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvV2ViTWVtb3J5U2FtcGxlci5tYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIFdlYk1lbW9yeVN0YXRpc3RpY3MgV2ViTWVtb3J5
U2FtcGxlcjo6c2EKICAgICB0b3RhbEJ5dGVzSW5Vc2UgKz0gZmFzdE1hbGxvY0J5dGVzSW5Vc2U7
CiAgICAgdG90YWxCeXRlc0NvbW1pdHRlZCArPSBmYXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQ7CiAg
ICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNpemVf
dCBqc2NIZWFwQnl0ZXNJblVzZSA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+
aGVhcC5zaXplKCk7CiAgICAgc2l6ZV90IGpzY0hlYXBCeXRlc0NvbW1pdHRlZCA9IEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jYXBhY2l0eSgpOwogICAgIHRvdGFsQnl0
ZXNJblVzZSArPSBqc2NIZWFwQnl0ZXNJblVzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIwLDcgKzkyMCw3
IEBAIHZvaWQgV2ViUHJvY2Vzczo6Z2V0V2ViQ29yZVN0YXRpc3RpY3ModWkKICAgICAKICAgICAv
LyBHYXRoZXIgSmF2YVNjcmlwdCBzdGF0aXN0aWNzLgogICAgIHsKLSAgICAgICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgZGF0YS5zdGF0aXN0aWNz
TnVtYmVycy5zZXQoIkphdmFTY3JpcHRPYmplY3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKSk7CiAgICAgICAgIGRhdGEuc3RhdGlz
dGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50IiwgSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmdsb2JhbE9iamVjdENvdW50KCkpOwogICAg
ICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiSmF2YVNjcmlwdFByb3RlY3RlZE9iamVj
dHNDb3VudCIsIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0
ZWRPYmplY3RDb3VudCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAx
MjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA5LDcgKzQwOSw3IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6OmdhcmJhZ2VDb2xsZWN0SmF2YVMKIAogc2l6ZV90IEluamVjdGVkQnVuZGxl
OjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERh
dGEoKS0+aGVhcC5vYmplY3RDb3VudCgpOwogfQogCkBAIC00MTgsOCArNDE4LDggQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0aW9uKEpTQwogICAgIGlmICghY29udGV4dCB8fCAh
ZXhjZXB0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhKU0M6OlNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZSA9IHRvSlMo
Y29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlY1N0YXRlKTsKIAogICAgIC8vIE1h
a2Ugc3VyZSB0aGUgY29udGV4dCBoYXMgYSBET01XaW5kb3cgZ2xvYmFsIG9iamVjdCwgb3RoZXJ3
aXNlIHRoaXMgY29udGV4dCBkaWRuJ3Qgb3JpZ2luYXRlIGZyb20gYSBQYWdlLgogICAgIGlmICgh
dG9KU0RPTVdpbmRvdyhleGVjU3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L0pTTlBPYmplY3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RQcm90b3R5cGUuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0lkZW50aWZpZXJSZXAuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NV2luZG93QmFzZS5oPgog
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKQEAgLTEyNSw3ICsxMjYsNyBAQCBKU1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxNZXRob2Qo
RXhlY1N0YXRlCiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKICAgICAKICAgICB7Ci0g
ICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0g
bV9ucE9iamVjdC0+X2NsYXNzLT5pbnZva2UobV9ucE9iamVjdCwgbWV0aG9kTmFtZSwgYXJndW1l
bnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7CiAgICAgICAgIE5QUnVudGltZU9i
amVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgIH0KQEAg
LTE2NSw3ICsxNjYsNyBAQCBKU0M6OkpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbE9iamVjdChKU0M6
CiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKIAogICAgIHsKLSAgICAgICAgSlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5f
Y2xhc3MtPmludm9rZURlZmF1bHQobV9ucE9iamVjdCwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1l
bnRDb3VudCwgJnJlc3VsdCk7CiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2Jh
bEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgIH0KQEAgLTIwNSw3ICsyMDYsNyBAQCBK
U1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxDb25zdHJ1Y3RvcihFeGVjCiAgICAgVk9JRF9UT19OUFZB
UklBTlQocmVzdWx0KTsKICAgICAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5jb25zdHJ1
Y3QobV9ucE9iamVjdCwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7
CiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0
YXRlKGV4ZWMpOwogICAgIH0KQEAgLTM0MCw3ICszNDEsNyBAQCB2b2lkIEpTTlBPYmplY3Q6OnB1
dChKU0NlbGwqIGNlbGwsIEV4ZWNTCiAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90
ZWN0b3IgcHJvdGVjdG9yKHRoaXNPYmplY3QtPm1fb2JqZWN0TWFwKTsKIAogICAgIHsKLSAgICAg
ICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgdGhpc09iamVjdC0+bV9ucE9i
amVjdC0+X2NsYXNzLT5zZXRQcm9wZXJ0eSh0aGlzT2JqZWN0LT5tX25wT2JqZWN0LCBucElkZW50
aWZpZXIsICZ2YXJpYW50KTsKIAogICAgICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9i
YWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKQEAgLTM4MCw3ICszODEsNyBAQCBib29sIEpT
TlBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0CiAgICAgTlBSdW50aW1lT2JqZWN0TWFw
OjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKG1fb2JqZWN0TWFwKTsKIAogICAgIHsKLSAgICAg
ICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgICAgICAvLyBGSVhNRTogU2hvdWxk
IHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiByZW1vdmVQcm9wZXJ0eSByZXR1cm5zIGZhbHNlPwog
ICAgICAgICBpZiAoIW1fbnBPYmplY3QtPl9jbGFzcy0+cmVtb3ZlUHJvcGVydHkobV9ucE9iamVj
dCwgcHJvcGVydHlOYW1lKSkKQEAgLTQxMyw3ICs0MTQsNyBAQCB2b2lkIEpTTlBPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90
ZWN0b3IgcHJvdGVjdG9yKHRoaXNPYmplY3QtPm1fb2JqZWN0TWFwKTsKICAgICAKICAgICB7Ci0g
ICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IFNo
b3VsZCB3ZSB0aHJvdyBhbiBleGNlcHRpb24gaWYgZW51bWVyYXRlIHJldHVybnMgZmFsc2U/CiAg
ICAgICAgIGlmICghdGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5lbnVtZXJhdGUodGhp
c09iamVjdC0+bV9ucE9iamVjdCwgJmlkZW50aWZpZXJzLCAmaWRlbnRpZmllckNvdW50KSkKQEAg
LTQ2MSw3ICs0NjIsNyBAQCBKU1ZhbHVlIEpTTlBPYmplY3Q6OnByb3BlcnR5R2V0dGVyKEV4ZWNT
CiAgICAgCiAgICAgYm9vbCByZXR1cm5WYWx1ZTsKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25K
U0dsb2JhbERhdGEoKSk7CiAgICAgICAgIE5QSWRlbnRpZmllciBucElkZW50aWZpZXIgPSBucElk
ZW50aWZpZXJGcm9tSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpOwogICAgICAgICByZXR1cm5WYWx1
ZSA9IHRoaXNPYmotPm1fbnBPYmplY3QtPl9jbGFzcy0+Z2V0UHJvcGVydHkodGhpc09iai0+bV9u
cE9iamVjdCwgbnBJZGVudGlmaWVyLCAmcmVzdWx0KTsKICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNP
YmplY3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcg
Kzk5LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpoYXNNZXRob2QoTlBJZGVudGlmaWVyIAogICAgIGlm
ICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpT
VmFsdWUgdmFsdWUgPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlm
aWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApKTsgICAgCiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKQEAgLTExOSw3ICsxMTksNyBAQCBib29sIE5QSlNPYmplY3Q6Omludm9rZShOUElkZW50
aWZpZXIgbWV0CiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBtX2pzT2JqZWN0LT5nZXQoZXhl
YywgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApKTsKICAg
ICByZXR1cm4gaW52b2tlKGV4ZWMsIG1fb2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKSwgZnVuY3Rp
b24sIGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVzdWx0KTsKQEAgLTEzMSw3ICsxMzEsNyBA
QCBib29sIE5QSlNPYmplY3Q6Omludm9rZURlZmF1bHQoY29uc3QgTlBWCiAgICAgaWYgKCFleGVj
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBm
dW5jdGlvbiA9IG1fanNPYmplY3QuZ2V0KCk7CiAgICAgcmV0dXJuIGludm9rZShleGVjLCBtX29i
amVjdE1hcC0+Z2xvYmFsT2JqZWN0KCksIGZ1bmN0aW9uLCBhcmd1bWVudHMsIGFyZ3VtZW50Q291
bnQsIHJlc3VsdCk7CkBAIC0xNDUsNyArMTQ1LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpoYXNQcm9w
ZXJ0eShOUElkZW50aWZpZQogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBib29sIHJlc3VsdDsKICAgICBpZiAoaWRlbnRpZmll
clJlcC0+aXNTdHJpbmcoKSkKQEAgLTE2NSw3ICsxNjUsNyBAQCBib29sIE5QSlNPYmplY3Q6Omdl
dFByb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUganNSZXN1bHQ7CiAgICAgaWYgKGlkZW50
aWZpZXJSZXAtPmlzU3RyaW5nKCkpCiAgICAgICAgIGpzUmVzdWx0ID0gbV9qc09iamVjdC0+Z2V0
KGV4ZWMsIGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVjLCBpZGVudGlmaWVyUmVwKSk7
CkBAIC0xODUsNyArMTg1LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpzZXRQcm9wZXJ0eShOUElkZW50
aWZpZQogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBtX29iamVjdE1hcC0+Y29udmVydE5QVmFy
aWFudFRvSlNWYWx1ZShleGVjLCBtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCksICp2YWx1ZSk7
CiAgICAgaWYgKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpIHsKQEAgLTIwNiw3ICsyMDYsNyBA
QCBib29sIE5QSlNPYmplY3Q6OnJlbW92ZVByb3BlcnR5KE5QSWRlbnRpCiAgICAgaWYgKCFleGVj
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmIChpZGVudGlm
aWVyUmVwLT5pc1N0cmluZygpKSB7CiAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IGlk
ZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVjLCBpZGVudGlmaWVyUmVwKTsKICAgICAgICAg
CkBAIC0yMzUsNyArMjM1LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjplbnVtZXJhdGUoTlBJZGVudGlm
aWVyKgogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOwogICAg
IG1fanNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMobV9qc09iamVjdC5n
ZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CkBA
IC0yNTcsNyArMjU3LDcgQEAgYm9vbCBOUEpTT2JqZWN0Ojpjb25zdHJ1Y3QoY29uc3QgTlBWYXJp
YQogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAgICBDb25zdHJ1Y3RUeXBlIGNv
bnN0cnVjdFR5cGUgPSBnZXRDb25zdHJ1Y3REYXRhKG1fanNPYmplY3QuZ2V0KCksIGNvbnN0cnVj
dERhdGEpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L05QUnVudGltZU9iamVjdE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UFJ1bnRpbWVPYmplY3RNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAg
SlNWYWx1ZSBOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnROUFZhcgogCiB2b2lkIE5QUnVudGlt
ZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUsIE5QVmFyaWFudCYgdmFyaWFudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAg
Vk9JRF9UT19OUFZBUklBTlQodmFyaWFudCk7CiAgICAgCkBAIC0xODYsNyArMTg2LDcgQEAgYm9v
bCBOUFJ1bnRpbWVPYmplY3RNYXA6OmV2YWx1YXRlKE5QT2JqZQogCiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgCi0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGdldE9yQ3JlYXRlSlNPYmplY3QoZ2xvYmFsT2JqZWN0Lmdl
dCgpLCBucE9iamVjdCk7CiAKICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS50aW1lb3V0
Q2hlY2tlci5zdGFydCgpOwpAQCAtMjY2LDcgKzI2Niw3IEBAIHZvaWQgTlBSdW50aW1lT2JqZWN0
TWFwOjptb3ZlR2xvYmFsRXhjZXAKICAgICAgICAgcmV0dXJuOwogCiAgICAgewotICAgICAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBz
dHJpbmdUb1VTdHJpbmcoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkpKSk7CiAgICAgfQogICAgIApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3Bw
CShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDIsNyArNjQyLDcgQEAgSlNWYWx1ZVJl
ZiBXZWJGcmFtZTo6anNXcmFwcGVyRm9yV29ybGQoSQogICAgIEpTRE9NV2luZG93KiBnbG9iYWxP
YmplY3QgPSBtX2NvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCh3b3JsZC0+Y29yZVdv
cmxkKCkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKICAgICByZXR1cm4gdG9SZWYoZXhlYywgdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIG5vZGVIYW5kbGUtPmNvcmVOb2RlKCkpKTsKIH0KIApAQCAtNjU0LDcgKzY1NCw3
IEBAIEpTVmFsdWVSZWYgV2ViRnJhbWU6OmpzV3JhcHBlckZvcldvcmxkKEkKICAgICBKU0RPTVdp
bmRvdyogZ2xvYmFsT2JqZWN0ID0gbV9jb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3Qo
d29ybGQtPmNvcmVXb3JsZCgpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCByYW5nZUhhbmRsZS0+Y29yZVJhbmdlKCkpKTsKIH0KIApA
QCAtNjcxLDcgKzY3MSw3IEBAIEpTVmFsdWVSZWYgV2ViRnJhbWU6OmNvbXB1dGVkU3R5bGVJbmNs
dWQKIAogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoc3RhdGljX2Nhc3Q8SlNFbGVtZW50Kj4o
dG9KUyhlbGVtZW50KSktPmltcGwoKSwgdHJ1ZSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIHJldHVy
biB0b1JlZihleGVjLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3R5bGUuZ2V0KCkpKTsKIH0K
IApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODE1LDcgKzE4MTUsNyBAQCB2b2lkIFdl
YlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZShjCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gc2VyaWFsaXplZFJlc3VsdFZhbHVlOwogICAgIENvcmVJUEM6OkRhdGFSZWZl
cmVuY2UgZGF0YVJlZmVyZW5jZTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICBpZiAoSlNWYWx1ZSByZXN1bHRWYWx1ZSA9IG1fbWFpbkZyYW1lLT5jb3Jl
RnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoc2NyaXB0LCB0cnVlKS5qc1ZhbHVlKCkp
IHsKICAgICAgICAgaWYgKChzZXJpYWxpemVkUmVzdWx0VmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZShtX21haW5GcmFtZS0+anNDb250ZXh0KCksIHRvUmVmKG1fbWFpbkZyYW1l
LT5jb3JlRnJhbWUoKS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29y
bGQoKSktPmdsb2JhbEV4ZWMoKSwgcmVzdWx0VmFsdWUpLCAwKSkpCiAgICAgICAgICAgICBkYXRh
UmVmZXJlbmNlID0gc2VyaWFsaXplZFJlc3VsdFZhbHVlLT5kYXRhKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAx
Mi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAg
ICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQg
SlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBw
YXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBp
bnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAg
KiBBcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OmNsZWFyTWVtb3J5Q2FjaGVzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DbGllbnRFeHRl
bnNpb24uY3BwOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BhZ2VQb3B1cEJsYWNrQmVycnku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVBvcHVwQmxhY2tCZXJyeTo6aW5zdGFsbERvbUZ1
bmN0aW9uKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydC5j
cHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OmNvbXB1dGVkU3R5bGVJbmNsdWRp
bmdWaXNpdGVkSW5mbyk6CisKIDIwMTItMDYtMjEgIE1pa2UgRmVudG9uICA8bWlmZW50b25Acmlt
LmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gSW5wdXQgbW9kZSBzaG91bGQgYWRhcHQgYXV0
b21hdGljYWxseSB0byBzZXR0aW5ncyBjaGFuZ2VzCkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL0JsYWNrQmVycnlHbG9iYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsMTAgQEAgdm9pZCBjbGVhck1lbW9yeUNhY2hlcygp
CiAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OnVzZXJJbnRlcmZhY2VUaHJlYWRNZXNzYWdlQ2xp
ZW50KCktPmRpc3BhdGNoTWVzc2FnZShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Y3JlYXRlRnVuY3Rp
b25DYWxsTWVzc2FnZShjbGVhck1lbW9yeUNhY2hlc0luQ29tcG9zaXRpbmdUaHJlYWQpKTsKICNl
bmRpZgogCi0gICAgY29sbGVjdEphdmFzY3JpcHRHYXJiYWdlTm93KCk7CisgICAgeworICAgICAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KSk7CisgICAgICAgIGNvbGxlY3RKYXZhc2NyaXB0R2FyYmFnZU5vdygpOworICAgIH0KIAogICAg
IC8vIENsZWFuIGNhY2hlcyBhZnRlciBKUyBnYXJiYWdlIGNvbGxlY3Rpb24gYmVjYXVzZSBKUyBH
QyBjYW4KICAgICAvLyBnZW5lcmF0ZSBtb3JlIGRlYWQgcmVzb3VyY2VzLgpJbmRleDogU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NsaWVu
dEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJDb3JlU3VwcG9ydC9DbGllbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NCwxMSArODQsMTEgQEAgc3RhdGljIEpTU3RhdGljVmFsdWUgY2xpZW50RXh0ZW5zaW9uU3Rh
dAogLy8gRklYTUU6IFJldmlzaXQgdGhlIGNyZWF0aW9uIG9mIHRoaXMgY2xhc3MgYW5kIG1ha2Ug
c3VyZSB0aGlzIGlzIHRoZSBiZXN0IHdheSB0byBhcHByb2FjaCBpdC4KIHZvaWQgYXR0YWNoRXh0
ZW5zaW9uT2JqZWN0VG9GcmFtZShGcmFtZSogZnJhbWUsIFdlYlBhZ2VDbGllbnQqIGNsaWVudCkK
IHsKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLQog
ICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+d2luZG93KCk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CisKICAgICBKU0NvbnRleHRSZWYgc2NyaXB0Q3R4ID0gdG9SZWYoZXhlYyk7CiAKICAg
ICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVw
QmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L1BhZ2VQb3B1cEJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisr
KyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tC
ZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiwxMyArMTIyLDEyIEBAIHN0YXRpYyBKU1N0
YXRpY1ZhbHVlIHBvcFVwRXh0ZW5zaW9uU3RhdGkKIAogdm9pZCBQYWdlUG9wdXBCbGFja0JlcnJ5
OjppbnN0YWxsRG9tRnVuY3Rpb24oRnJhbWUqIGZyYW1lKQogewotICAgIEpTQzo6SlNMb2NrIGxv
Y2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAgSlNET01XaW5kb3cqIHdpbmRv
dyA9IHRvSlNET01XaW5kb3coZnJhbWUsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBB
U1NFUlQod2luZG93KTsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9i
YWxFeGVjKCk7CiAgICAgQVNTRVJUKGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IDo6dG9SZWYoZXhlYyk7CiAgICAg
SlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRl
eHQpOwpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsOCArMTQxLDggQEAgdm9pZCBE
dW1wUmVuZGVyVHJlZVN1cHBvcnQ6OnNjYWxlUGFnZUJ5KAogCiBKU1ZhbHVlUmVmIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydDo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVl
ID0gdG9KUyhleGVjLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxOSBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBz
aXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVy
CisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29k
ZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rp
b24uCisKKyAgICAgICAgKiBld2svZXdrX2ZyYW1lLmNwcDoKKyAgICAgICAgKGV3a19mcmFtZV9z
Y3JpcHRfZXhlY3V0ZSk6CisgICAgICAgICogZXdrL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3
a192aWV3X2pzX29iamVjdF9hZGQpOgorCiAyMDEyLTA2LTE5ICBTZXJnaW8gVmlsbGFyIFNlbmlu
ICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIENhbGxpbmcgbmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKSBjYXVzZXMgYXNzZXJ0aW9uIGZhaWx1cmU6IG1fdmVyaWZpZXIuaXNTYWZl
VG9Vc2UoKQpJbmRleDogU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAJKHJldmlzaW9uIDEy
MDkyNikKKysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NTUsOCArNDU1LDggQEAgY2hhciogZXdrX2ZyYW1lX3NjcmlwdF9leGVjdXRlKEV2
YXNfT2JqZQogICAgIGlmICghcmVzdWx0IHx8ICghcmVzdWx0LmlzQm9vbGVhbigpICYmICFyZXN1
bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAg
IEpTQzo6RXhlY1N0YXRlKiBleGVjID0gc21hcnREYXRhLT5mcmFtZS0+c2NyaXB0KCktPmdsb2Jh
bE9iamVjdChXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsK
KyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIHJlc3VsdFN0cmluZyA9IFdl
YkNvcmU6OnVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKICAgICByZXR1cm4gc3RyZHVwKHJlc3VsdFN0cmluZy51dGY4KCkuZGF0YSgpKTsKICNlbHNl
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
NDUsOCArNDA0NSw4IEBAIEVpbmFfQm9vbCBld2tfdmlld19qc19vYmplY3RfYWRkKEV2YXNfT2IK
ICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgZmFsc2Up
OwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIGZhbHNl
KTsKIAotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwog
ICAgIFdlYkNvcmU6OkpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KHByaXYtPm1h
aW5GcmFtZSwgV2ViQ29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgIEpTQzo6SlNM
b2NrSG9sZGVyIGxvY2sod2luZG93LT5nbG9iYWxFeGVjKCkpOwogICAgIEpTQzo6QmluZGluZ3M6
OlJvb3RPYmplY3QqIHJvb3Q7CiAgICAgcm9vdCA9IHByaXYtPm1haW5GcmFtZS0+c2NyaXB0KCkt
PmJpbmRpbmdSb290T2JqZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDEy
MDkyNikKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE3IEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0Bh
cHBsZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxs
IHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xk
ZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBj
b2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVj
dGlvbi4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
ay5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdjQ291bnRKYXZhc2Ny
aXB0T2JqZWN0cyk6CisKIDIwMTItMDYtMjEgIERhbmllbCBEcmFrZSAgPGRzZEBsYXB0b3Aub3Jn
PgogCiAgICAgICAgIFtHVEtdIEJhY2twb3J0IHJ1bi1maWxlLWNob29zZXIgdG8gV2ViS2l0MQpJ
bmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MDAsNyArNjAwLDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGs6OmdjQ29sbGVjdAogCiB1bnNpZ25lZCBsb25nIER1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0azo6Z2NDb3VudEphdmFzY3JpcHRPYmplY3RzKCkKIHsKLSAgICBKU0M6OkpTTG9jayBsb2Nr
KEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2OCBAQAorMjAxMi0wNi0yMCAgTWFy
ayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBz
aG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGlu
c3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBj
b3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRo
IHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBET00vV2ViRE9N
T3BlcmF0aW9ucy5tbToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogTWlzYy9XZWJDb3JlU3Rh
dGlzdGljcy5tbToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdE9iamVj
dHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0R2xvYmFs
T2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRQ
cm90ZWN0ZWRPYmplY3RzQ291bnRdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2
YVNjcmlwdFByb3RlY3RlZEdsb2JhbE9iamVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3Jl
U3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50c10pOgorICAgICAg
ICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50c10pOgorICAg
ICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBzaG91bGRQcmludEV4Y2VwdGlvbnNdKToKKyAgICAg
ICAgKCtbV2ViQ29yZVN0YXRpc3RpY3Mgc2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zOl0pOgorICAg
ICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBtZW1vcnlTdGF0aXN0aWNzXSk6CisgICAgICAgICgr
W1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRSZWZlcmVuY2VkT2JqZWN0c0NvdW50XSk6Cisg
ICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgor
ICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YXRlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UpOgor
ICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZURlZmF1
bHQpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNvbnN0
cnVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0
UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpyZW1vdmVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6aGFzTWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjplbnVtZXJhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OmFkZFZhbHVlVG9BcnJheSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKToK
KyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tOgorICAgICAgICAo
V2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OndhbnRzQWxsU3RyZWFtcyk6CisgICAgICAgICogUGx1
Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1
Z2luVmlldyBzZW5kRXZlbnQ6aXNEcmF3UmVjdDpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQ
bHVnaW5WaWV3IHByaXZhdGVCcm93c2luZ01vZGVEaWRDaGFuZ2VdKToKKyAgICAgICAgKC1bV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3IHNldFdpbmRvd0lmTmVjZXNzYXJ5XSk6CisgICAgICAgICgtW1dl
Yk5ldHNjYXBlUGx1Z2luVmlldyBjcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZWN0XSk6CisgICAg
ICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBnZXRGb3JtVmFsdWU6XSk6CisgICAgICAgICgt
W1dlYk5ldHNjYXBlUGx1Z2luVmlldyBldmFsdWF0ZUphdmFTY3JpcHRQbHVnaW5SZXF1ZXN0Ol0p
OgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgd2ViRnJhbWU6ZGlkRmluaXNoTG9h
ZFdpdGhSZWFzb246XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBsb2FkUGx1
Z2luUmVxdWVzdDpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IF9wcmludGVk
UGx1Z2luQml0bWFwXSk6CisgICAgICAgICogUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1t
OgorICAgICAgICAoK1tXZWJQbHVnaW5Db250cm9sbGVyIHBsdWdJblZpZXdXaXRoQXJndW1lbnRz
OmZyb21QbHVnaW5QYWNrYWdlOl0pOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIHN0
b3BPbmVQbHVnaW46XSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgZGVzdHJveU9u
ZVBsdWdpbjpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxlciBzdGFydEFsbFBsdWdp
bnNdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxlciBhZGRQbHVnaW46XSk6CisgICAg
ICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3N0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOmZvcmNlVXNlckdlc3R1cmU6XSk6CisgICAg
ICAgICgtW1dlYkZyYW1lIF9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzp3
aXRoR2xvYmFsT2JqZWN0OmluU2NyaXB0V29ybGQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJT
Y3JpcHREZWJ1Z0RlbGVnYXRlLm1tOgorICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgc2Nv
cGVDaGFpbl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgZXZhbHVhdGVXZWJTY3Jp
cHQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoK1tXZWJWaWV3
IF9yZXBvcnRFeGNlcHRpb246aW5Db250ZXh0Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IGFlRGVz
Y0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOl0pOgorICAgICAgICAoLVtXZWJWaWV3
IF9jb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm86Zm9yRWxlbWVudDpdKToKKwogMjAx
Mi0wNi0yMCAgR2FycmV0IEtlbGx5ICA8Z2RrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNb3Zp
bmcgY29va2llRW5hYmxlZC9zZXRDb29raWVFbmFibGVkIGZyb20gUGFnZSB0byBTZXR0aW5ncy4K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjcsOCArNjcsOSBAQCArIChET01FbGVtZW50ICopX0RPTUVsZW1l
bnRGcm9tSlNDb250ZXh0CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIHJldHVybiBraXQodG9F
bGVtZW50KHRvSlModG9KUyhjb250ZXh0KSwgdmFsdWUpKSk7CisgICAgRXhlY1N0YXRlKiBleGVj
ID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICByZXR1
cm4ga2l0KHRvRWxlbWVudCh0b0pTKGV4ZWMsIHZhbHVlKSkpOwogfQogCiAtIChOU1N0cmluZyAq
KV9tYXJrZXJUZXh0Rm9yTGlzdEl0ZW0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2Vi
Q29yZVN0YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9X
ZWJDb3JlU3RhdGlzdGljcy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9t
YWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTgsMzEgKzU4
LDMxIEBAICsgKE5TQXJyYXkgKilzdGF0aXN0aWNzCiAKICsgKHNpemVfdClqYXZhU2NyaXB0T2Jq
ZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0
Q291bnQoKTsKIH0KIAogKyAoc2l6ZV90KWphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5nbG9iYWxPYmplY3RDb3VudCgp
OwogfQogCiArIChzaXplX3QpamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHNDb3VudAogewotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICByZXR1cm4gSlNET01X
aW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCk7
CiB9CiAKICsgKHNpemVfdClqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50CiB7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkR2xvYmFsT2Jq
ZWN0Q291bnQoKTsKIH0KIAogKyAoTlNDb3VudGVkU2V0ICopamF2YVNjcmlwdFByb3RlY3RlZE9i
amVjdFR5cGVDb3VudHMKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgCiAgICAgTlNDb3VudGVkU2V0ICpyZXN1bHQgPSBbTlNDb3VudGVkU2V0IHNldF07
CiAKQEAgLTk3LDcgKzk3LDcgQEAgKyAoTlNDb3VudGVkU2V0ICopamF2YVNjcmlwdFByb3RlY3Rl
ZE9iagogCiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50cwogewot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAKICAgICBOU0Nv
dW50ZWRTZXQgKnJlc3VsdCA9IFtOU0NvdW50ZWRTZXQgc2V0XTsKIApAQCAtMTY3LDEzICsxNjcs
MTMgQEAgKyAoc2l6ZV90KWdseXBoUGFnZUNvdW50CiAKICsgKEJPT0wpc2hvdWxkUHJpbnRFeGNl
cHRpb25zCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
IHJldHVybiBDb25zb2xlOjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKTsKIH0KIAogKyAodm9pZClz
ZXRTaG91bGRQcmludEV4Y2VwdGlvbnM6KEJPT0wpcHJpbnQKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgQ29uc29sZTo6c2V0U2hvdWxkUHJpbnRFeGNl
cHRpb25zKHByaW50KTsKIH0KIApAQCAtMjAxLDcgKzIwMSw3IEBAICsgKE5TRGljdGlvbmFyeSAq
KW1lbW9yeVN0YXRpc3RpY3MKIHsKICAgICBXVEY6OkZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RN
YWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0TWFsbG9jU3RhdGlzdGljcygpOwogICAgIAotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzaXplX3QgaGVhcFNp
emUgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuc2l6ZSgpOwogICAg
IHNpemVfdCBoZWFwRnJlZSA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVh
cC5jYXBhY2l0eSgpIC0gaGVhcFNpemU7CiAgICAgR2xvYmFsTWVtb3J5U3RhdGlzdGljcyBnbG9i
YWxNZW1vcnlTdGF0cyA9IGdsb2JhbE1lbW9yeVN0YXRpc3RpY3MoKTsKQEAgLTI0NSw3ICsyNDUs
NyBAQCArIChzaXplX3QpamF2YVNjcmlwdE5vR0NBbGxvd2VkT2JqZWN0c0NvCiAKICsgKHNpemVf
dClqYXZhU2NyaXB0UmVmZXJlbmNlZE9iamVjdHNDb3VudAogewotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVh
bS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJO
ZXRzY2FwZVBsdWdpblN0cmVhbS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzY4LDcgKzM2OCw3IEBA
IGJvb2wgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OndhbnRzQWxsU3QKICAgICBOUEVycm9yIGVy
cm9yOwogICAgIHsKICAgICAgICAgUGx1Z2luU3RvcERlZmVycmVyIGRlZmVycmVyKG1fcGx1Z2lu
Vmlldy5nZXQoKSk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgICAgIGVycm9yID0gbV9wbHVnaW5GdW5jcy0+Z2V0dmFsdWUobV9wbHVnaW4s
IE5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zLCAmdmFsdWUpOwogICAgIH0KICAgICBp
ZiAoZXJyb3IgIT0gTlBFUlJfTk9fRVJST1IpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQkocmV2aXNpb24gMTIwOTI2KQor
KysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0JKHdv
cmtpbmcgY29weSkKQEAgLTY2OSw3ICs2NjksNyBAQCAtIChCT09MKXNlbmRFdmVudDoodm9pZCop
ZXZlbnQgaXNEcmF3UmVjCiAgICAgLy8gU2V0IHRoZSBwbHVnaW5BbGxvd1BvcHVwIGZsYWcuCiAg
ICAgQVNTRVJUKF9ldmVudEhhbmRsZXIpOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
Z2VzdHVyZUluZGljYXRvcihfZXZlbnRIYW5kbGVyLT5jdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJl
KCkgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDogUG9zc2libHlQcm9jZXNzaW5n
VXNlckdlc3R1cmUpOwogICAgICAgICBhY2NlcHRlZEV2ZW50ID0gW19wbHVnaW5QYWNrYWdlLmdl
dCgpIHBsdWdpbkZ1bmNzXS0+ZXZlbnQocGx1Z2luLCBldmVudCk7CiAgICAgfQpAQCAtODUwLDcg
Kzg1MCw3IEBAIC0gKHZvaWQpcHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5nZQogCiAgICAgW3Nl
bGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBpZiAoW19wbHVnaW5QYWNrYWdl
LmdldCgpIHBsdWdpbkZ1bmNzXS0+c2V0dmFsdWUpCiAgICAgICAgICAgICBbX3BsdWdpblBhY2th
Z2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5zZXR2YWx1ZShwbHVnaW4sIE5QTlZwcml2YXRlTW9kZUJv
b2wsICZ2YWx1ZSk7CiAgICAgfQpAQCAtOTkxLDcgKzk5MSw3IEBAIC0gKHZvaWQpc2V0V2luZG93
SWZOZWNlc3NhcnkKICAgICAgICAgaW5TZXRXaW5kb3cgPSBZRVM7ICAgICAgICAKICAgICAgICAg
W3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAg
bnBFcnIgPSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5zZXR3aW5kb3cocGx1
Z2luLCAmd2luZG93KTsKICAgICAgICAgfQogICAgICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVu
Y3Rpb25dOwpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAgLSAoTlBPYmplY3QgKiljcmVhdGVQbHVnaW5T
Y3JpcHRhYmxlT2JqZQogICAgIE5QRXJyb3IgZXJyb3I7CiAgICAgW3NlbGYgd2lsbENhbGxQbHVn
SW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwogICAgICAgICBlcnJvciA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVn
aW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwg
JnZhbHVlKTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTE0
NjMsNyArMTQ2Myw3IEBAIC0gKEJPT0wpZ2V0Rm9ybVZhbHVlOihOU1N0cmluZyAqKil2YWx1ZQog
ICAgIE5QRXJyb3IgZXJyb3I7CiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAg
ICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgICAgICBlcnJvciA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdldHZh
bHVlKHBsdWdpbiwgTlBQVmZvcm1WYWx1ZSwgJmJ1ZmZlcik7CiAgICAgfQogICAgIFtzZWxmIGRp
ZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNTk1LDcgKzE1OTUsNyBAQCAtICh2b2lkKWV2YWx1
YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6CiAgICAgICAgIGlmIChbSlNQbHVnaW5SZXF1ZXN0
IHNlbmROb3RpZmljYXRpb25dKSB7CiAgICAgICAgICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1
bmN0aW9uXTsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
ICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICAgICAgW19wbHVn
aW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJsbm90aWZ5KHBsdWdpbiwgW1VSTCBfd2Vi
X1VSTENTdHJpbmddLCBOUFJFU19ET05FLCBbSlNQbHVnaW5SZXF1ZXN0IG5vdGlmeURhdGFdKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07
CkBAIC0xNjI3LDcgKzE2MjcsNyBAQCAtICh2b2lkKXdlYkZyYW1lOihXZWJGcmFtZSAqKXdlYkZy
YW1lIGRpCiAgICAgICAgIAogICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAg
IHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJsbm90aWZ5KHBsdWdp
biwgW1tbcGx1Z2luUmVxdWVzdCByZXF1ZXN0XSBVUkxdIF93ZWJfVVJMQ1N0cmluZ10sIHJlYXNv
biwgW3BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxs
UGx1Z0luRnVuY3Rpb25dOwpAQCAtMTY3MSw3ICsxNjcxLDcgQEAgLSAodm9pZClsb2FkUGx1Z2lu
UmVxdWVzdDooV2ViUGx1Z2luUmVxdQogICAgICAgICAgICAgICAgIGlmIChbcGx1Z2luUmVxdWVz
dCBzZW5kTm90aWZpY2F0aW9uXSkgewogICAgICAgICAgICAgICAgICAgICBbc2VsZiB3aWxsQ2Fs
bFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkg
cGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbW1twbHVnaW5SZXF1ZXN0IHJlcXVlc3Rd
IFVSTF0gX3dlYl9VUkxDU3RyaW5nXSwgTlBFUlJfR0VORVJJQ19FUlJPUiwgW3BsdWdpblJlcXVl
c3Qgbm90aWZ5RGF0YV0pOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0yNDcxLDcgKzI0NzEsNyBAQCAt
IChOU0JpdG1hcEltYWdlUmVwICopX3ByaW50ZWRQbHVnaW5CaXRtCiAgICAgLy8gVGVsbCB0aGUg
cGx1Z2luIHRvIHByaW50IGludG8gdGhlIEdXb3JsZAogICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0lu
RnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+
cHJpbnQocGx1Z2luLCAmbnBQcmludCk7CiAgICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5G
dW5jdGlvbl07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRy
b2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVn
aW5Db250cm9sbGVyLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTk2LDEwICs5
NiwxMCBAQCArIChOU1ZpZXcgKilwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czooTlNECiAgICAgTlNW
aWV3ICp2aWV3ID0gbmlsOwogCiAgICAgaWYgKFt2aWV3RmFjdG9yeSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHBsdWdJblZpZXdXaXRoQXJndW1lbnRzOildKSB7Ci0gICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHZpZXcgPSBbdmll
d0ZhY3RvcnkgcGx1Z0luVmlld1dpdGhBcmd1bWVudHM6YXJndW1lbnRzXTsKICAgICB9IGVsc2Ug
aWYgKFt2aWV3RmFjdG9yeSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpblZpZXdX
aXRoQXJndW1lbnRzOildKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAgICAgICAgIHZpZXcgPSBbdmlld0ZhY3RvcnkgcGx1Z2luVmlld1dpdGhB
cmd1bWVudHM6YXJndW1lbnRzXTsKICAgICB9CiAgICAgCkBAIC0xNDksMTAgKzE0OSwxMCBAQCAt
ICh2b2lkKWRlYWxsb2MKIC0gKHZvaWQpc3RvcE9uZVBsdWdpbjooTlNWaWV3ICopdmlldwogewog
ICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJblN0b3Ap
XSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgICAgICBbdmlldyB3ZWJQbHVnSW5TdG9wXTsKICAgICB9IGVsc2UgaWYgKFt2aWV3IHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luU3RvcCldKSB7Ci0gICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIFt2aWV3IHBsdWdpblN0
b3BdOwogICAgIH0KIH0KQEAgLTE2MCwxMCArMTYwLDEwIEBAIC0gKHZvaWQpc3RvcE9uZVBsdWdp
bjooTlNWaWV3ICopdmlldwogLSAodm9pZClkZXN0cm95T25lUGx1Z2luOihOU1ZpZXcgKil2aWV3
CiB7CiAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0lu
RGVzdHJveSldKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgICAgIFt2aWV3IHdlYlBsdWdJbkRlc3Ryb3ldOwogICAgIH0gZWxzZSBpZiAo
W3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5EZXN0cm95KV0pIHsKLSAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAg
W3ZpZXcgcGx1Z2luRGVzdHJveV07CiAgICAgfQogfQpAQCAtMTgwLDEwICsxODAsMTAgQEAgLSAo
dm9pZClzdGFydEFsbFBsdWdpbnMKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
IHsKICAgICAgICAgaWQgYVZpZXcgPSBbX3ZpZXdzIG9iamVjdEF0SW5kZXg6aV07CiAgICAgICAg
IGlmIChbYVZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5TdGFydCld
KSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKICAgICAgICAgICAgIFthVmlldyB3ZWJQbHVnSW5TdGFydF07CiAgICAgICAgIH0gZWxz
ZSBpZiAoW2FWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luU3RhcnQpXSkg
ewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgICAgICAgICBbYVZpZXcgcGx1Z2luU3RhcnRdOwogICAgICAgICB9CiAgICAgfQpA
QCAtMjUyLDEwICsyNTIsMTAgQEAgLSAodm9pZClhZGRQbHVnaW46KE5TVmlldyAqKXZpZXcKIAog
ICAgICAgICBMT0coUGx1Z2lucywgImluaXRpYWxpemluZyBwbHVnLWluICVAIiwgdmlldyk7CiAg
ICAgICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJbklu
aXRpYWxpemUpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25K
U0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBbdmlldyB3ZWJQbHVnSW5Jbml0aWFsaXplXTsK
ICAgICAgICAgfSBlbHNlIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBs
dWdpbkluaXRpYWxpemUpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBbdmlldyBwbHVnaW5Jbml0aWFsaXpl
XTsKICAgICAgICAgfQogCkBAIC0yNjUsMTUgKzI2NSwxNSBAQCAtICh2b2lkKWFkZFBsdWdpbjoo
TlNWaWV3ICopdmlldwogICAgICAgICBpZiAoX3N0YXJ0ZWQpIHsKICAgICAgICAgICAgIExPRyhQ
bHVnaW5zLCAic3RhcnRpbmcgcGx1Zy1pbiAlQCIsIHZpZXcpOwogICAgICAgICAgICAgaWYgKFt2
aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luU3RhcnQpXSkgewotICAg
ICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKICAgICAgICAgICAgICAgICBbdmlldyB3ZWJQbHVnSW5TdGFydF07CiAgICAgICAgICAg
ICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luU3Rh
cnQpXSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgICAgICBbdmlldyBwbHVnaW5TdGFydF07CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChbdmlldyByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldENvbnRhaW5pbmdXaW5kb3c6KV0pIHsKLSAgICAgICAg
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CiAgICAgICAgICAgICAgICAgW3ZpZXcgc2V0Q29udGFpbmluZ1dpbmRvdzpbX2RvY3VtZW50Vmll
dyB3aW5kb3ddXTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC04NjcsOCArODY3LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OmV2YWx1YQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgCisgICAgSlNMb2NrSG9sZGVy
IGxvY2socGx1Z2luV29ybGQoKS0+Z2xvYmFsRGF0YSgpKTsKICAgICBTdHJvbmc8SlNHbG9iYWxP
YmplY3Q+IGdsb2JhbE9iamVjdCgqcGx1Z2luV29ybGQoKS0+Z2xvYmFsRGF0YSgpLCBmcmFtZS0+
c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKQEAgLTkwNCw3ICs5MDMsNyBAQCBi
b29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2Jh
bE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
SlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVjdC0+Z2V0KGV4ZWMsIG1ldGhvZE5hbWUpOwogICAgIENh
bGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVu
Y3Rpb24sIGNhbGxEYXRhKTsKQEAgLTkzNyw3ICs5MzYsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eTo6aW52b2tlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3Js
ZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+
Z2V0Q2FsbERhdGEob2JqZWN0LCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxU
eXBlTm9uZSkKQEAgLTk2OSw3ICs5NjgsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6Y29uc3RyCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xv
YmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERh
dGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gb2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5nZXRDb25zdHJ1Y3REYXRhKG9iamVjdCwgY29uc3RydWN0RGF0YSk7CkBAIC0xMDAyLDcg
KzEwMDEsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2Ny
aXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOyAgICAKICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgcHJv
cGVydHlOYW1lKTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERh
dGEsIHJlc3VsdExlbmd0aCk7CkBAIC0xMDIzLDcgKzEwMjIsNyBAQCBib29sIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5X
b3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICBKU1ZhbHVl
IHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAKICAgICBtYXJz
aGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7CkBAIC0xMDQ3
LDcgKzEwNDYsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0UHJvCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+
c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOyAgICAKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBkZW1hcnNoYWxWYWx1ZShl
eGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsK
QEAgLTEwNzMsNyArMTA3Miw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpz
ZXRQcm8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVj
KCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgICAgCisgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIAogICAgIEpTVmFsdWUgdmFsdWUgPSBkZW1h
cnNoYWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKICAgICBvYmplY3QtPm1l
dGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBmYWxzZSk7CkBAIC0xMDk4LDEyICsxMDk3LDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjpyZW1vdmUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRXhlY1N0YXRl
KiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmds
b2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBpZiAoIW9iamVj
dC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkgewogICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsgICAgCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTI1LDEyICsx
MTI0LDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmUKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3Jp
cHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgaWYgKCFvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMs
IHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlC
eUluZGV4KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOyAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExOTYsNyArMTE5NSw3IEBAIGJvb2wg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNNZXQKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2Jq
ZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1Zh
bHVlIGZ1bmMgPSBvYmplY3QtPmdldChleGVjLCBtZXRob2ROYW1lKTsKICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOwogICAgIHJldHVybiAhZnVuYy5pc1VuZGVmaW5lZCgpOwpAQCAtMTIxOCw3
ICsxMjE3LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNj
cmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CiAg
ICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CkBAIC0xMjYyLDcgKzEy
NjEsNyBAQCBzdGF0aWMgYm9vbCBnZXRPYmplY3RJRChOZXRzY2FwZVBsdWdpbkluCiAgICAgCiB2
b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6YWRkVmFsdWVUb0FycmF5KE5TTXV0YWJs
ZUFycmF5ICphcnJheSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewogICAgICAgICBbYXJyYXkgYWRk
T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50OlN0cmluZ1ZhbHVlVHlwZV1dOwpAQCAtMTY3
Miw3ICsxNjcxLDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Om1vdmVHbAog
ICAgICAgICByZXR1cm47CiAKICAgICB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICB0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhnbG9iYWxF
eGNlcHRpb25TdHJpbmcoKSkpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw2IEBAIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBKU0M6OkpTR2xvYmFsT2JqZWN0OwogdXNpbmcg
SlNDOjpKU0xvY2s7CiB1c2luZyBKU0M6OkpTVmFsdWU7Ci11c2luZyBKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seTsKIAogLyoKIEhlcmUgaXMgdGhlIGN1cnJlbnQgYmVoYXZpb3IgbWF0cml4IGZv
ciBmb3VyIHR5cGVzIG9mIG5hdmlnYXRpb25zOgpAQCAtNTk3LDggKzU5Niw4IEBAIC0gKE5TU3Ry
aW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3IKICAgICBpZiAoIXJlc3VsdCB8fCAoIXJl
c3VsdC5pc0Jvb2xlYW4oKSAmJiAhcmVzdWx0LmlzU3RyaW5nKCkgJiYgIXJlc3VsdC5pc051bWJl
cigpKSkKICAgICAgICAgcmV0dXJuIEAiIjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBfcHJpdmF0ZS0+Y29yZUZy
YW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xv
YmFsRXhlYygpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgcmV0dXJu
IHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIH0K
IApAQCAtMTEyMyw4ICsxMTIyLDggQEAgLSAoTlNTdHJpbmcgKilfc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcgogICAgIGlmICghcmVzdWx0IHx8ICghcmVzdWx0LmlzQm9vbGVhbigpICYmICFyZXN1
bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpKQogICAgICAgICByZXR1cm4gQCIi
OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4
ZWNTdGF0ZSogZXhlYyA9IGFueVdvcmxkR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAg
SlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5n
KHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERl
YnVnRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3NCw5ICsxNzQsOSBAQCAtIChOU0Fy
cmF5ICopc2NvcGVDaGFpbgogICAgIGlmICghX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lKQog
ICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXldOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gX3By
aXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSk7CiAgICAgaWYgKCFzY29wZUNoYWluLT5uZXh0
KSAgLy8gZ2xvYmFsIGZyYW1lCiAgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmpl
Y3Q6X3ByaXZhdGUtPmdsb2JhbE9iamVjdF07CiAKQEAgLTIyOSwxMyArMjI5LDEzIEBAIC0gKGlk
KWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmluZyAqKXNjcmkKICAgICBpZiAoIV9wcml2YXRlLT5k
ZWJ1Z2dlckNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICAvLyBJZiB0aGlzIGlzIHRoZSBnbG9iYWwg
Y2FsbCBmcmFtZSBhbmQgdGhlcmUgaXMgbm8gZHluYW1pYyBnbG9iYWwgb2JqZWN0LAogICAgIC8v
IERhc2hjb2RlIGlzIGF0dGVtcHRpbmcgdG8gZXhlY3V0ZSBKUyBpbiB0aGUgZXZhbHVhdG9yIHVz
aW5nIGEgc3RhbGUKICAgICAvLyBXZWJTY3JpcHRDYWxsRnJhbWUuIEluc3RlYWQsIHdlIG5lZWQg
dG8gc2V0IHRoZSBkeW5hbWljIGdsb2JhbCBvYmplY3QKICAgICAvLyBhbmQgZXZhbHVhdGUgdGhl
IEpTIGluIHRoZSBnbG9iYWwgb2JqZWN0J3MgZ2xvYmFsIGNhbGwgZnJhbWUuCiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IF9wcml2YXRlLT5kZWJ1Z2dlci0+Z2xvYmFsT2JqZWN0
KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOwor
CiAgICAgaWYgKHNlbGYgPT0gX3ByaXZhdGUtPmRlYnVnZ2VyLT5nbG9iYWxDYWxsRnJhbWUoKSAm
JiAhZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCkgewogICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gX3ByaXZhdGUtPmRlYnVnZ2VyLT5n
bG9iYWxPYmplY3QoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQko
cmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC01ODEsOCArNTgxLDggQEAgKyAodm9pZClfcmVwb3J0RXhjZXB0
aW9uOihKU1ZhbHVlUmVmKWV4YwogICAgIGlmICghZXhjZXB0aW9uIHx8ICFjb250ZXh0KQogICAg
ICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwog
ICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjU3RhdGUgPSB0b0pTKGNvbnRleHQpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWNTdGF0ZSk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQg
aGFzIGEgRE9NV2luZG93IGdsb2JhbCBvYmplY3QsIG90aGVyd2lzZSB0aGlzIGNvbnRleHQgZGlk
bid0IG9yaWdpbmF0ZSBmcm9tIGEgV2ViVmlldy4KICAgICBpZiAoIXRvSlNET01XaW5kb3coZXhl
Y1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKQpAQCAtNDg1MSw3ICs0ODUxLDcgQEAgLSAo
TlNBcHBsZUV2ZW50RGVzY3JpcHRvciAqKWFlRGVzY0J5RXZhbAogICAgIEpTVmFsdWUgcmVzdWx0
ID0gY29yZUZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChzY3JpcHQsIHRydWUpLmpzVmFs
dWUoKTsKICAgICBpZiAoIXJlc3VsdCkgLy8gRklYTUU6IHBhc3MgZXJyb3JzCiAgICAgICAgIHJl
dHVybiAwOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJl
YWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpKTsKICAgICByZXR1cm4gYWVEZXNjRnJvbUpT
VmFsdWUoY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxX
b3JsZCgpKS0+Z2xvYmFsRXhlYygpLCByZXN1bHQpOwogfQogCkBAIC02NTYwLDggKzY1NjAsOCBA
QCAtICh2b2lkKV9ub3RpZmljYXRpb25zRGlkQ2xvc2U6KE5TQXJyYXkgCiAKIC0gKEpTVmFsdWVS
ZWYpX2NvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbzooSlNDb250ZXh0UmVmKWNvbnRl
eHQgZm9yRWxlbWVudDooSlNWYWx1ZVJlZil2YWx1ZQogewotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVl
ID0gdG9KUyhleGVjLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2
KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyMSBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRl
cyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisg
ICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBp
cyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24u
CisKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoKKyAgICAgICAgKFFXZWJGcmFtZVByaXZh
dGU6OmFkZFF0U2VuZGVyVG9HbG9iYWxPYmplY3QpOgorICAgICAgICAoUVdlYkZyYW1lOjphZGRU
b0phdmFTY3JpcHRXaW5kb3dPYmplY3QpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjppbmplY3RJbnRlcm5hbHNPYmplY3QpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KToKKwogMjAxMi0wNi0yMSAgVGhpYWdvIE1hcmNvcyBQ
LiBTYW50b3MgIDx0aGlhZ28uc2FudG9zQGludGVsLmNvbT4KIAogICAgICAgICBbV0syXVtRdF0g
Q29sb3IgY2hvb3NlciBBUEkgbWlzc2luZwpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YmZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUu
Y3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDYsMTMgKzUwNiwxMiBAQCBzdGF0aWMgSlNWYWx1ZVJl
ZiBxdFNlbmRlckNhbGxiYWNrKEpTQ29uCiAKIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6YWRkUXRT
ZW5kZXJUb0dsb2JhbE9iamVjdCgpCiB7Ci0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVu
Y2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdp
bmRvdyhmcmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogICAgIFFfQVNTRVJUKHdpbmRv
dyk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygpOwog
ICAgIFFfQVNTRVJUKGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAK
ICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IDo6dG9SZWYoZXhlYyk7CiAgICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IHByb3BlcnR5TmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIl9fcXRfc2VuZGVyX18iKSk7CkBAIC02NTcsNyArNjU2LDYgQEAgdm9pZCBRV2Vi
RnJhbWU6OmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iagogICAgICAgICByZXR1cm47CiAjaWYgVVNF
KEpTQykKICAgICBKU0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpWYWx1ZU93bmVyc2hpcCB2YWx1
ZU93bmVyc2hpcCA9IHN0YXRpY19jYXN0PEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6OlZhbHVl
T3duZXJzaGlwPihvd25lcnNoaXApOwotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOwogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93
KGQtPmZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgSlNDOjpCaW5kaW5nczo6
Um9vdE9iamVjdCogcm9vdDsKICAgICBpZiAodmFsdWVPd25lcnNoaXAgPT0gSlNDOjpCaW5kaW5n
czo6UXRJbnN0YW5jZTo6UXRPd25lcnNoaXApCkBAIC02NzUsNiArNjczLDcgQEAgdm9pZCBRV2Vi
RnJhbWU6OmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iagogICAgIH0KIAogICAgIEpTQzo6RXhlY1N0
YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIEpTQzo6SlNPYmplY3QqIHJ1bnRpbWVPYmplY3QgPQogICAgICAg
ICAgICAgSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShvYmplY3QsIHJv
b3QsIHZhbHVlT3duZXJzaGlwKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA4NiwxMyArMTA4NiwxMiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpp
bmplY3RJbnRlCiB7CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVBy
aXZhdGU6OmNvcmUoZnJhbWUpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2sgbG9jayhK
U0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0g
dG9KU0RPTVdpbmRvdyhjb3JlRnJhbWUsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBR
X0FTU0VSVCh3aW5kb3cpOwogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmds
b2JhbEV4ZWMoKTsKICAgICBRX0FTU0VSVChleGVjKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogCiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSB0b1JlZihleGVjKTsKICAg
ICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdChjb250ZXh0KTsKQEAg
LTExMTMsMTMgKzExMTIsMTIgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRJ
bnRlcgogewogICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRl
Ojpjb3JlKGZyYW1lKTsKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNE
T01XaW5kb3coY29yZUZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgUV9BU1NF
UlQod2luZG93KTsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxF
eGVjKCk7CiAgICAgUV9BU1NFUlQoZXhlYyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKIAogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gdG9SZWYoZXhlYyk7CiAgICAgV2Vi
Q29yZVRlc3RTdXBwb3J0OjpyZXNldEludGVybmFsc09iamVjdChjb250ZXh0KTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA2LTIwICBNYXJrIEhh
aG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNob3Vs
ZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVh
ZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJl
Y3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhh
dCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIFdlYkNvcmVTdGF0aXN0
aWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0T2JqZWN0c0Nv
dW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0R2xvYmFsT2JqZWN0
c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVk
T2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJv
dGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpq
YXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyk6CisgICAgICAgICogV2ViRnJhbWUu
Y3BwOgorICAgICAgICAoV2ViRnJhbWU6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRJblNj
cmlwdFdvcmxkKToKKyAgICAgICAgKiBXZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkphdmFTY3JpcHRDb2xsZWN0b3I6Om9iamVjdENvdW50KToKKyAgICAgICAgKiBXZWJW
aWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRG
cm9tU3RyaW5nKToKKyAgICAgICAgKFdlYlZpZXc6OnJlcG9ydEV4Y2VwdGlvbik6CisgICAgICAg
IChXZWJWaWV3OjplbGVtZW50RnJvbUpTKToKKwogMjAxMi0wNi0yMCAgR2FycmV0IEtlbGx5ICA8
Z2RrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNb3ZpbmcgY29va2llRW5hYmxlZC9zZXRDb29r
aWVFbmFibGVkIGZyb20gUGFnZSB0byBTZXR0aW5ncy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2lu
L1dlYkNvcmVTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJDb3JlU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQv
d2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3Vu
dCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0K
QEAgLTEwOSw3ICsxMDksNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0
aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQo
KTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEyMCw3ICsxMjAsNyBAQCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0
dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkt
PmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEz
MSw3ICsxMzEsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAg
ICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291
bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEzOSw3ICsxMzksNyBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygg
CiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJUHJvcGVydHlCYWcyKiogdHlwZU5hbWVzQW5kQ291
bnRzKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBP
d25QdHI8VHlwZUNvdW50U2V0PiBqc09iamVjdFR5cGVOYW1lcyhKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKICAgICB0
eXBlZGVmIFR5cGVDb3VudFNldDo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgSXRlcmF0
b3IgZW5kID0ganNPYmplY3RUeXBlTmFtZXMtPmVuZCgpOwpJbmRleDogU291cmNlL1dlYktpdC93
aW4vV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1l
LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IHVzaW5nIEpTQzo6SlNHbG9iYWxPYmplY3Q7CiB1c2luZyBKU0M6OkpTTG9jazsKIHVzaW5nIEpT
Qzo6SlNWYWx1ZTsKLXVzaW5nIEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5OwogCiAjZGVmaW5l
IEZMQVNIX1JFRFJBVyAwCiAKQEAgLTI1MjgsOCArMjUyNyw4IEBAIEhSRVNVTFQgV2ViRnJhbWU6
OnN0cmluZ0J5RXZhbHVhdGluZ0phdmEKICAgICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0LmlzQm9v
bGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpCiAgICAg
ICAgIHJldHVybiBTX09LOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGFueVdvcmxkR2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVySG9sZGVyIGxvY2soZXhlYyk7CiAgICAgU3RyaW5n
IHJlc3VsdFN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpKTsKICAgICAqZXZhbHVhdGlvblJlc3VsdCA9IEJTdHJpbmcocmVzdWx0U3RyaW5n
KS5yZWxlYXNlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkphdmFTY3JpcHRDb2xs
ZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkphdmFTY3JpcHRD
b2xsZWN0b3IuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJK
YXZhU2NyaXB0Q29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBA
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSmF2YVNjcmlwdEMKICAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpLT5oZWFwLm9iamVjdENvdW50KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC93aW4vV2Vi
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOTQsOCArMzE5NCw4IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6c3RyaW4KICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvblJl
c3VsdCkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKICAgICBlbHNlIGlmIChzY3JpcHRFeGVjdXRp
b25SZXN1bHQuaXNTdHJpbmcoKSkgewotICAgICAgICBKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gY29yZUZyYW1l
LT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFs
RXhlYygpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgKnJlc3Vs
dCA9IEJTdHJpbmcodXN0cmluZ1RvU3RyaW5nKHNjcmlwdEV4ZWN1dGlvblJlc3VsdC5nZXRTdHJp
bmcoZXhlYykpKTsKICAgICB9CiAKQEAgLTU4NTEsOCArNTg1MSw4IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgV2ViVmlldzo6cmVwb3IKICAgICBpZiAoIWNvbnRleHQgfHwgIWV4Y2VwdGlv
bikKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIEpTTG9jayBsb2NrKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlY1N0YXRlID0gdG9KUyhj
b250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjU3RhdGUpOwogCiAgICAgLy8gTWFr
ZSBzdXJlIHRoZSBjb250ZXh0IGhhcyBhIERPTVdpbmRvdyBnbG9iYWwgb2JqZWN0LCBvdGhlcndp
c2UgdGhpcyBjb250ZXh0IGRpZG4ndCBvcmlnaW5hdGUgZnJvbSBhIFdlYlZpZXcuCiAgICAgaWYg
KCF0b0pTRE9NV2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkKQEAgLTU4
NzgsOCArNTg3OCw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6ZWxlbWUK
ICAgICBpZiAoIW5vZGVPYmplY3QpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBKU0xv
Y2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgRWxlbWVudCogZWx0ID0g
dG9FbGVtZW50KHRvSlModG9KUyhjb250ZXh0KSwgbm9kZU9iamVjdCkpOworICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Cisg
ICAgRWxlbWVudCogZWx0ID0gdG9FbGVtZW50KHRvSlMoZXhlYywgbm9kZU9iamVjdCkpOwogICAg
IGlmICghZWx0KQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148904</attachid>
            <date>2012-06-21 15:45:37 -0700</date>
            <delta_ts>2012-06-21 17:51:04 -0700</delta_ts>
            <desc>Try to fix Qt again</desc>
            <filename>bug-89123-20120621154537.patch</filename>
            <type>text/plain</type>
            <size>204115</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBA
QAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9BUElTaGltcy5oOgorICAg
ICAgICAoQVBJRW50cnlTaGltV2l0aG91dExvY2spOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNo
aW1XaXRob3V0TG9jazo6QVBJRW50cnlTaGltV2l0aG91dExvY2spOiBBZGRlZCBhbiBleHRyYSBw
YXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIHRvIAorICAgICAgICBkZXRlcm1pbmUgd2hldGhl
ciB3ZSBzaG91bGQgcmVmIHRoZSBKU0dsb2JhbERhdGEgb3Igbm90LiBXZSB3YW50IHRvIHJlZiBh
bGwgdGhlIHRpbWUgZXhjZXB0IGZvciBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBjbGFzcyBi
ZWNhdXNlIHRpbWVyRGlkRmlyZSBjb3VsZCBydW4gYWZ0ZXIgc29tZWJvZHkgaGFzIHN0YXJ0ZWQg
dG8gdGVhciBkb3duIHRoYXQgcGFydGljdWxhciAKKyAgICAgICAgSlNHbG9iYWxEYXRhLCBzbyB3
ZSB3b3VsZG4ndCB3YW50IHRvIHJlc3VycmVjdCB0aGUgcmVmIGNvdW50IG9mIHRoYXQgSlNHbG9i
YWxEYXRhIGZyb20gMCBiYWNrIHRvIDEgYWZ0ZXIgCisgICAgICAgIGl0cyBkZXN0cnVjdGlvbiBo
YXMgYmVndW4uIAorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW1XaXRob3V0TG9jazo6fkFQSUVu
dHJ5U2hpbVdpdGhvdXRMb2NrKTogTm93IGRlcmVmcyBpZiBpdCBhbHNvIHJlZmVkLgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OkFQSUVudHJ5U2hpbSk6CisgICAgICAgIChBUElFbnRyeVNo
aW0pOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW06On5BUElFbnRyeVNoaW0pOgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OmluaXQpOiBGYWN0b3JlZCBvdXQgY29tbW9uIGluaXRpYWxp
emF0aW9uIGNvZGUgZm9yIHRoZSB2YXJpb3VzIEFQSUVudHJ5U2hpbSBjb25zdHJ1Y3RvcnMuCisg
ICAgICAgIEFsc28gbW92ZWQgdGhlIHRpbWVvdXRDaGVja2VyIHN0b3AgYW5kIHN0YXJ0IGhlcmUg
YmVjYXVzZSB3ZSBuZWVkIHRvIHN0YXJ0IGFmdGVyIHdlJ3ZlIGdyYWJiZWQgdGhlIEFQSSBsb2Nr
CisgICAgICAgIGFuZCBiZWZvcmUgd2UndmUgcmVsZWFzZWQgaXQsIHdoaWNoIGNhbiBvbmx5IGRv
bmUgaW4gQVBJRW50cnlTaGltLgorICAgICAgICAoSlNDOjpBUElDYWxsYmFja1NoaW06On5BUElD
YWxsYmFja1NoaW0pOiBXZSBubyBsb25nZXIgbmVlZCB0byBzeW5jaHJvbml6ZSBoZXJlLgorICAg
ICAgICAqIEFQSS9KU0NvbnRleHRSZWYuY3BwOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0Q3Jl
YXRlKToKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXApOgorICAgICAgICAo
SlNHbG9iYWxDb250ZXh0UmVsZWFzZSk6CisgICAgICAgIChKU0NvbnRleHRDcmVhdGVCYWNrdHJh
Y2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRTcGFjZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6cHJvdGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucHJv
dGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFw
OjpzZXRBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWN0aXZpdHlDYWxs
YmFjayk6CisgICAgICAgIChKU0M6OkhlYXA6OnN3ZWVwZXIpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOiBDaGFuZ2VkIG1fYWN0aXZpdHlDYWxsYmFjayBhbmQgbV9zd2VlcGVyIHRvIGJlIHJhdyBw
b2ludGVycyByYXRoZXIgdGhhbiBPd25QdHJzIGJlY2F1c2UgdGhleSAKKyAgICAgICAgYXJlIG5v
dyByZXNwb25zaWJsZSBmb3IgdGhlaXIgb3duIGxpZmV0aW1lLiBBbHNvIGNoYW5nZWQgdGhlIG9y
ZGVyIG9mIGRlY2xhcmF0aW9uIG9mIHRoZSBHQ0FjdGl2aXR5Q2FsbGJhY2sKKyAgICAgICAgYW5k
IHRoZSBJbmNyZW1lbnRhbFN3ZWVwZXIgdG8gbWFrZSBzdXJlIHRoZXkncmUgdGhlIGxhc3QgdGhp
bmdzIHRoYXQgZ2V0IGluaXRpYWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gdG8gCisgICAgICAg
IHByZXZlbnQgYW55IGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBKU0ds
b2JhbERhdGEvSGVhcCB0aGV5IG1pZ2h0IGNhcmUgYWJvdXQuCisgICAgICAgIChIZWFwKToKKyAg
ICAgICAgKiBoZWFwL0hlYXBUaW1lci5jcHA6IFJlZmFjdG9yZWQgdG8gYWxsb3cgZm9yIHRocmVh
ZC1zYWZlIG9wZXJhdGlvbiBhbmQgc2h1dGRvd24uCisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6
fkhlYXBUaW1lcik6CisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6aW52YWxpZGF0ZSk6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OmRpZFN0YXJ0Vk1TaHV0ZG93bik6
IENhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIH5KU0dsb2JhbERhdGEuIElmIHdlJ3JlIG9uIHRo
ZSBzYW1lIHRocmVhZCAKKyAgICAgICAgdGhhdCB0aGUgSGVhcFRpbWVyIGlzIHJ1bm5pbmcgb24s
IHdlIGtpbGwgdGhlIEhlYXBUaW1lciBvdXJzZWx2ZXMuIElmIG5vdCwgdGhlbiB3ZSBzZXQgc29t
ZSBzdGF0ZSBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBhbmQgc2NoZWR1bGUgaXQgdG8gZmly
ZSBpbW1lZGlhdGVseSBzbyB0aGF0IGl0IGNhbiBub3RpY2UgYW5kIGtpbGwgaXRzZWxmLgorICAg
ICAgICAoSlNDOjpIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSk6IFdlIGdyYWIgb3VyIG11dGV4IGFu
ZCBjaGVjayBvdXIgSlNHbG9iYWxEYXRhIHBvaW50ZXIuIElmIGl0IGhhcyBiZWVuIHplcm8tZWQK
KyAgICAgICAgb3V0LCB0aGVuIHdlIGtub3cgdGhlIFZNIGhhcyBzdGFydGVkIHRvIHNodXRkb3du
IGFuZCB3ZSBzaG91bGQga2lsbCBvdXJzZWx2ZXMuIE90aGVyd2lzZSwgZ3JhYiB0aGUgQVBJRW50
cnlTaGltLAorICAgICAgICBidXQgd2l0aG91dCByZWYtaW5nIHRoZSBKU0dsb2JhbERhdGEgKHdl
IGRvbid0IHdhbnQgdG8gYnJpbmcgdGhlIEpTR2xvYmFsRGF0YSdzIHJlZi1jb3VudCBmcm9tIDAg
dG8gMSkgaW4gY2FzZSAKKyAgICAgICAgd2Ugd2VyZSBpbnRlcnJ1cHRlZCBiZXR3ZWVuIHJlbGVh
c2luZyBvdXIgbXV0ZXggYW5kIHRyeWluZyB0byBncmFiIHRoZSBBUElMb2NrLgorICAgICAgICAq
IGhlYXAvSGVhcFRpbWVyLmg6IAorICAgICAgICAoSGVhcFRpbWVyKToKKyAgICAgICAgKiBoZWFw
L0luY3JlbWVudGFsU3dlZXBlci5jcHA6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBl
cjo6ZG9Xb3JrKTogV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIEFQSSBzaGltIGhlcmUgc2luY2UgSGVh
cFRpbWVyOjp0aW1lckRpZEZpcmUgaGFuZGxlcyAKKyAgICAgICAgYWxsIG9mIHRoYXQgZm9yIHVz
LiAKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUpOgorICAgICAgICAq
IGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAgIChJbmNyZW1lbnRhbFN3ZWVwZXIp
OgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKiBoZWFwL1dlYWtCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OldlYWtCbG9jazo6cmVhcCk6CisgICAgICAgICoganNjLmNw
cDoKKyAgICAgICAgKGZ1bmN0aW9uR0MpOgorICAgICAgICAoZnVuY3Rpb25SZWxlYXNlRXhlY3V0
YWJsZU1lbW9yeSk6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBs
ZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpjaGVja1N5bnRheCk6CisgICAgICAgIChKU0M6OmV2
YWx1YXRlKToKKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oOgorICAgICAg
ICAoRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayk6CisgICAgICAgIChKU0M6OkRlZmF1bHRHQ0Fj
dGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6IFNpZ25hbHMgdG8gdGhlIHR3byBI
ZWFwVGltZXJzIChHQ0FjdGl2aXR5Q2FsbGJhY2sgYW5kIEluY3JlbWVudGFsU3dlZXBlcikKKyAg
ICAgICAgdGhhdCB0aGUgVk0gaGFzIHN0YXJ0ZWQgc2h1dHRpbmcgZG93bi4gSXQgdGhlbiB3YWl0
cyB1bnRpbCB0aGUgSGVhcFRpbWVyIGlzIGRvbmUgd2l0aCB3aGF0ZXZlciBhY3Rpdml0eSAKKyAg
ICAgICAgaXQgbmVlZHMgdG8gZG8gYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCBhbnkgZnVydGhlciBk
ZXN0cnVjdGlvbi4gQWxzbyBhc3NlcnRzIHRoYXQgd2UgZG8gbm90IGN1cnJlbnRseSBob2xkIHRo
ZSAKKyAgICAgICAgQVBJTG9jayBiZWNhdXNlIHRoaXMgY291bGQgcG90ZW50aWFsbHkgY2F1c2Ug
ZGVhZGxvY2sgd2hlbiB3ZSB0cnkgdG8gc2lnbmFsIHRvIHRoZSBIZWFwVGltZXJzIHVzaW5nIHRo
ZWlyIG11dGV4ZXMuCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2Up
OiBQcm90ZWN0IHRoZSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNoYXJlZCBpbnN0YW5jZSB3aXRo
IHRoZSBHbG9iYWxKU0xvY2suCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5z
dGFuY2VJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDogQ2hhbmdl
IHRvIGJlIFRocmVhZFNhZmVSZWZDb3VudGVkIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3Jy
eSBhYm91dCByZWZpbmcgYW5kIAorICAgICAgICBkZS1yZWZpbmcgSlNHbG9iYWxEYXRhcyBvbiBz
ZXBhcmF0ZSB0aHJlYWRzIHNpbmNlIHdlIGRvbid0IGRvIGl0IHRoYXQgb2Z0ZW4gYW55d2F5cy4K
KyAgICAgICAgKEpTR2xvYmFsRGF0YSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6YXBp
TG9jayk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogcnVudGltZS9KU0xvY2suY3BwOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEpTQzo6R2xvYmFsSlNMb2NrOjpHbG9iYWxKU0xvY2spOiBGb3Ig
YWNjZXNzaW5nIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisgICAgICAgIChKU0M6Okdsb2JhbEpTTG9j
azo6fkdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6SlNMb2NrSG9s
ZGVyKTogTXV0ZXhMb2NrZXIgZm9yIEpTTG9jay4gQWxzbyByZWZzIHRoZSBKU0dsb2JhbERhdGEg
dG8ga2VlcCBpdCBhbGl2ZSBzbyB0aGF0IAorICAgICAgICBpdCBjYW4gc3VjY2Vzc2Z1bGx5IHVu
bG9jayBpdCBsYXRlciB3aXRob3V0IGl0IGRpc2FwcGVhcmluZyBmcm9tIHVuZGVybmVhdGggaXQu
CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6fkpTTG9ja0hvbGRlcik6CisgICAgICAgIChK
U0M6OkpTTG9jazo6SlNMb2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp+SlNMb2NrKToKKyAg
ICAgICAgKEpTQzo6SlNMb2NrOjpsb2NrKTogVXNlcyB0aGUgc3BpbiBsb2NrIGZvciBndWFyZGlu
ZyB0aGUgbG9jayBjb3VudCBhbmQgb3duZXIgdGhyZWFkIGZpZWxkcy4gVXNlcyB0aGUgbXV0ZXgg
Zm9yIAorICAgICAgICBhY3R1YWxseSB3YWl0aW5nIGZvciBsb25nIHBlcmlvZHMuIAorICAgICAg
ICAoSlNDOjpKU0xvY2s6OnVubG9jayk6CisgICAgICAgIChKU0M6OkpTTG9jazo6Y3VycmVudFRo
cmVhZElzSG9sZGluZ0xvY2spOiAKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpkcm9wQWxsTG9ja3Mp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseSk6Cisg
ICAgICAgIChKU0M6OkpTTG9jazo6Z3JhYkFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2Nrcyk6CisgICAgICAgIChKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKToKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0xvY2tI
b2xkZXIpOgorICAgICAgICAoSlNMb2NrKToKKyAgICAgICAgKERyb3BBbGxMb2Nrcyk6CisgICAg
ICAgICogcnVudGltZS9XZWFrR0NNYXAuaDoKKyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpzZXQp
OgorICAgICAgICAqIHRlc3RSZWdFeHAuY3BwOgorICAgICAgICAocmVhbE1haW4pOgorCiAyMDEy
LTA2LTIwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVk
dWNlZCAoYnV0IGRpZCBub3QgZWxpbWluYXRlKSB1c2Ugb2YgImJlcnplcmtlciBHQyIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0MKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IGV4ZWMtPmhlYXAoKS0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMzA3LDcgKzMwNyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQygKICNpZm5kZWYgTkRFQlVHCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLnJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KQEAgLTY2Nyw5ICs2NjcsOSBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50
cyhpbnQgYXJnYywgY2hhCiAKIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCisgICAgCiAgICAgUmVm
UHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKFRocmVh
ZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2Jh
bERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBwYXJzZUFyZ3Vt
ZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0UmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJl
Z0V4cC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
UmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDkgKzQ5NSw4IEBAIHN0YXRpYyB2b2lk
IHBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGEKIAogaW50IHJlYWxNYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwot
CiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3Jl
YXRlKFRocmVhZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGdsb2JhbERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBw
YXJzZUFyZ3VtZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJU2hpbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0FQSVNoaW1zLmgJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvQVBJU2hpbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMzEgKzI4LDQwIEBACiAK
ICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIK
KyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNp
bmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
QVBJRW50cnlTaGltV2l0aG91dExvY2sgeworcHVibGljOgorICAgIGVudW0gUmVmR2xvYmFsRGF0
YVRhZyB7IERvbnRSZWZHbG9iYWxEYXRhID0gMCwgUmVmR2xvYmFsRGF0YSB9OworCiBwcm90ZWN0
ZWQ6Ci0gICAgQVBJRW50cnlTaGltV2l0aG91dExvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBib29sIHJlZ2lzdGVyVGhyZWFkKQotICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRh
KQorICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
Ym9vbCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0YVRhZyBzaG91bGRSZWZHbG9iYWxEYXRh
KQorICAgICAgICA6IG1fc2hvdWxkUmVmR2xvYmFsRGF0YShzaG91bGRSZWZHbG9iYWxEYXRhKQor
ICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICAgICAsIG1fZW50cnlJZGVu
dGlmaWVyVGFibGUod3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZ2xv
YmFsRGF0YS0+aWRlbnRpZmllclRhYmxlKSkKICAgICB7CisgICAgICAgIGlmIChzaG91bGRSZWZH
bG9iYWxEYXRhKQorICAgICAgICAgICAgbV9nbG9iYWxEYXRhLT5yZWYoKTsKICAgICAgICAgVU5V
U0VEX1BBUkFNKHJlZ2lzdGVyVGhyZWFkKTsKICAgICAgICAgaWYgKHJlZ2lzdGVyVGhyZWFkKQog
ICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRU
aHJlYWQoKTsKICAgICAgICAgbV9nbG9iYWxEYXRhLT5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+
c3luY2hyb25pemUoKTsKLSAgICAgICAgbV9nbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5zdGFy
dCgpOworICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuc3dlZXBlcigpLT5zeW5jaHJvbml6ZSgp
OwogICAgIH0KIAogICAgIH5BUElFbnRyeVNoaW1XaXRob3V0TG9jaygpCiAgICAgewotICAgICAg
ICBtX2dsb2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKICAgICAgICAgd3RmVGhyZWFk
RGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUobV9lbnRyeUlkZW50aWZpZXJUYWJsZSk7
CisgICAgICAgIGlmIChtX3Nob3VsZFJlZkdsb2JhbERhdGEpCisgICAgICAgICAgICBtX2dsb2Jh
bERhdGEtPmRlcmVmKCk7CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgorICAgIFJlZkds
b2JhbERhdGFUYWcgbV9zaG91bGRSZWZHbG9iYWxEYXRhOwogICAgIEpTR2xvYmFsRGF0YSogbV9n
bG9iYWxEYXRhOwogICAgIElkZW50aWZpZXJUYWJsZSogbV9lbnRyeUlkZW50aWZpZXJUYWJsZTsK
IH07CkBAIC02MSwyMCArNzAsMzggQEAgY2xhc3MgQVBJRW50cnlTaGltIDogcHVibGljIEFQSUVu
dHJ5U2hpbQogcHVibGljOgogICAgIC8vIE5vcm1hbCBBUEkgZW50cnkKICAgICBBUElFbnRyeVNo
aW0oRXhlY1N0YXRlKiBleGVjLCBib29sIHJlZ2lzdGVyVGhyZWFkID0gdHJ1ZSkKLSAgICAgICAg
OiBBUElFbnRyeVNoaW1XaXRob3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRo
cmVhZCkKLSAgICAgICAgLCBtX2xvY2soZXhlYykKKyAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRo
b3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0
YSkKKyAgICB7CisgICAgICAgIGluaXQoKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG5lY2Vzc2FyeSBmb3IgSGVhcFRpbWVyIHRvIHByZXZlbnQgaXQgZnJvbSBhY2NpZGVu
dGFsbHkgcmVzdXJyZWN0aW5nIAorICAgIC8vIHRoZSByZWYgY291bnQgb2YgYSAiZGVhZCIgSlNH
bG9iYWxEYXRhLgorICAgIEFQSUVudHJ5U2hpbShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFJl
Zkdsb2JhbERhdGFUYWcgcmVmR2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUp
CisgICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0YSwgcmVnaXN0ZXJU
aHJlYWQsIHJlZkdsb2JhbERhdGEpCiAgICAgeworICAgICAgICBpbml0KCk7CiAgICAgfQogCiAg
ICAgLy8gSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvciBvbmx5IGhhcyBhIGdsb2JhbERhdGEuCiAg
ICAgQVBJRW50cnlTaGltKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRo
cmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0
YSwgcmVnaXN0ZXJUaHJlYWQpCi0gICAgICAgICwgbV9sb2NrKGdsb2JhbERhdGEtPmlzU2hhcmVk
SW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5KQorICAgICAg
ICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKGdsb2JhbERhdGEsIHJlZ2lzdGVyVGhyZWFkLCBS
ZWZHbG9iYWxEYXRhKQogICAgIHsKKyAgICAgICAgaW5pdCgpOworICAgIH0KKworICAgIH5BUElF
bnRyeVNoaW0oKQorICAgIHsKKyAgICAgICAgbV9nbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5z
dG9wKCk7CisgICAgICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLnVubG9jaygpOwogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBKU0xvY2sgbV9sb2NrOworICAgIHZvaWQgaW5pdCgpCisgICAgewor
ICAgICAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5sb2NrKCk7CisgICAgICAgIG1fZ2xvYmFs
RGF0YS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsKKyAgICB9CiB9OwogCiBjbGFzcyBBUElDYWxs
YmFja1NoaW0gewpAQCAtODgsNyArMTE1LDYgQEAgcHVibGljOgogCiAgICAgfkFQSUNhbGxiYWNr
U2hpbSgpCiAgICAgewotICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuYWN0aXZpdHlDYWxsYmFj
aygpLT5zeW5jaHJvbml6ZSgpOwogICAgICAgICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElk
ZW50aWZpZXJUYWJsZShtX2dsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZSk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDYgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xv
YmFsQ29udGV4dENyZWF0ZQogICAgIC8vIElmIHRoZSBhcHBsaWNhdGlvbiB3YXMgbGlua2VkIGJl
Zm9yZSBKU0dsb2JhbENvbnRleHRDcmVhdGUgd2FzIGNoYW5nZWQgdG8gdXNlIGEgdW5pcXVlIEpT
R2xvYmFsRGF0YSwKICAgICAvLyB3ZSB1c2UgYSBzaGFyZWQgb25lIGZvciBiYWNrd2FyZHMgY29t
cGF0aWJpbGl0eS4KICAgICBpZiAoTlNWZXJzaW9uT2ZMaW5rVGltZUxpYnJhcnkoIkphdmFTY3Jp
cHRDb3JlIikgPD0gd2Via2l0Rmlyc3RWZXJzaW9uV2l0aENvbmN1cnJlbnRHbG9iYWxDb250ZXh0
cykgewotICAgICAgICBKU0xvY2sgbG9jayhMb2NrRm9yUmVhbCk7CiAgICAgICAgIHJldHVybiBK
U0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKHRvUmVmKCZKU0dsb2JhbERhdGE6OnNoYXJlZElu
c3RhbmNlKCkpLCBnbG9iYWxPYmplY3RDbGFzcyk7CiAgICAgfQogI2VuZGlmIC8vIE9TKERBUldJ
TikKQEAgLTkwLDExICs4OSw5IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRD
cmVhdGUKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKLSAgICBKU0xvY2sgbG9jayhM
b2NrRm9yUmVhbCk7CiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IGdyb3Vw
ID8gUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+KHRvSlMoZ3JvdXApKSA6IEpTR2xvYmFsRGF0YTo6
Y3JlYXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlwZVNtYWxsKTsKIAogICAgIEFQSUVudHJ5
U2hpbSBlbnRyeVNoaW0oZ2xvYmFsRGF0YS5nZXQoKSwgZmFsc2UpOwotCiAgICAgZ2xvYmFsRGF0
YS0+bWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsKIAogICAgIGlmICghZ2xvYmFsT2Jq
ZWN0Q2xhc3MpIHsKQEAgLTEyNCwxOCArMTIxLDE5IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0ds
b2JhbENvbnRleHRSZXRhaW4KIAogdm9pZCBKU0dsb2JhbENvbnRleHRSZWxlYXNlKEpTR2xvYmFs
Q29udGV4dFJlZiBjdHgpCiB7CisgICAgSWRlbnRpZmllclRhYmxlKiBzYXZlZElkZW50aWZpZXJU
YWJsZTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrIGxvY2so
ZXhlYyk7CisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAotICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBJZGVudGlm
aWVyVGFibGUqIHNhdmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJl
bnRJZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUpOworICAgICAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIHNh
dmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVy
VGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUpOwogCi0gICAgYm9vbCBwcm90ZWN0Q291
bnRJc1plcm8gPSBIZWFwOjpoZWFwKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPnVucHJv
dGVjdChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwotICAgIGlmIChwcm90ZWN0Q291bnRJ
c1plcm8pIHsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+c3lu
Y2hyb25pemUoKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVj
dEdyYXBoKCk7CisgICAgICAgIGJvb2wgcHJvdGVjdENvdW50SXNaZXJvID0gSGVhcDo6aGVhcChl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT51bnByb3RlY3QoZXhlYy0+ZHluYW1pY0dsb2Jh
bE9iamVjdCgpKTsKKyAgICAgICAgaWYgKHByb3RlY3RDb3VudElzWmVybykKKyAgICAgICAgICAg
IGdsb2JhbERhdGEuaGVhcC5yZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOworICAgICAgICBn
bG9iYWxEYXRhLmRlcmVmKCk7CiAgICAgfQotICAgIGdsb2JhbERhdGEuZGVyZWYoKTsKIAogICAg
IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKHNhdmVkSWRlbnRpZmll
clRhYmxlKTsKIH0KQEAgLTE2Niw3ICsxNjQsNyBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNDb250
ZXh0R2V0R2xvYmFsQ29uCiBKU1N0cmluZ1JlZiBKU0NvbnRleHRDcmVhdGVCYWNrdHJhY2UoSlND
b250ZXh0UmVmIGN0eCwgdW5zaWduZWQgbWF4U3RhY2tTaXplKQogewogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2sgbG9jayhleGVjKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKIAogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICBVU3RyaW5nQnVp
bGRlciBidWlsZGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3Bh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNw
YWNlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIENoZWNrZWRC
b29sZWFuIENvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZVMKICAgICBpZiAoaXNPdmVyc2l6ZShieXRl
cykpCiAgICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZU92ZXJzaXplKGJ5dGVzLCBvdXRQdHIpOwog
ICAgIAorICAgIEFTU0VSVChtX2hlYXAtPmdsb2JhbERhdGEoKS0+YXBpTG9jaygpLmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9hbGxvY2F0
b3IuY3VycmVudENhcGFjaXR5KCkpOwogCiAgICAgYWxsb2NhdGVCbG9jaygpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMTUgKzE2
MCw5IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHByb3BvcnRpb25hbEhlYXBTaXoKICAgICByZXR1
cm4gMS4yNSAqIGhlYXBTaXplOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFNoYXJl
ZEluc3RhbmNlVGhyZWFkU3RhdGUoKQorc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRTaGFyZWRJ
bnN0YW5jZVRocmVhZFN0YXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBpZiAo
IUpTTG9jazo6bG9ja0NvdW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
SlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZ2xvYmFsRGF0YS0+YXBpTG9jaygp
LmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBp
c1ZhbGlkVGhyZWFkU3RhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQpAQCAtMTc2LDcgKzE3
MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkVGhyZWFkU3RhdGUoSlMKICAgICBpZiAo
Z2xvYmFsRGF0YS0+aWRlbnRpZmllclRhYmxlICE9IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRl
bnRpZmllclRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChnbG9iYWxE
YXRhLT5pc1NoYXJlZEluc3RhbmNlKCkgJiYgIWlzVmFsaWRTaGFyZWRJbnN0YW5jZVRocmVhZFN0
YXRlKCkpCisgICAgaWYgKGdsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSAmJiAhaXNWYWxp
ZFNoYXJlZEluc3RhbmNlVGhyZWFkU3RhdGUoZ2xvYmFsRGF0YSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMzI3LDcgKzMyMSw3IEBAIHZvaWQgSGVhcDo6
ZGlkQWJhbmRvbihzaXplX3QgYnl0ZXMpCiB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQog
ewogICAgIEFTU0VSVChrKTsKLSAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xk
aW5nTG9jaygpIHx8ICFtX2dsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSk7CisgICAgQVNT
RVJUKG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkp
OwogCiAgICAgaWYgKCFrLmlzQ2VsbCgpKQogICAgICAgICByZXR1cm47CkBAIC0zMzgsNyArMzMy
LDcgQEAgdm9pZCBIZWFwOjpwcm90ZWN0KEpTVmFsdWUgaykKIGJvb2wgSGVhcDo6dW5wcm90ZWN0
KEpTVmFsdWUgaykKIHsKICAgICBBU1NFUlQoayk7Ci0gICAgQVNTRVJUKEpTTG9jazo6Y3VycmVu
dFRocmVhZElzSG9sZGluZ0xvY2soKSB8fCAhbV9nbG9iYWxEYXRhLT5pc1NoYXJlZEluc3RhbmNl
KCkpOworICAgIEFTU0VSVChtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nTG9jaygpKTsKIAogICAgIGlmICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNjkyLDYgKzY4Niw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBz
d2VlcFRvZ2cKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xs
ZWN0aW9uIik7CiAgICAgCiAgICAgR0NQSEFTRShDb2xsZWN0KTsKKyAgICBBU1NFUlQoZ2xvYmFs
RGF0YSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgQVNT
RVJUKGdsb2JhbERhdGEoKS0+aWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJy
ZW50SWRlbnRpZmllclRhYmxlKCkpOwogICAgIEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAg
ICAgSkFWQVNDUklQVENPUkVfR0NfQkVHSU4oKTsKQEAgLTc3NywxOSArNzcyLDE5IEBAIHZvaWQg
SGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICBKQVZBU0NSSVBUQ09SRV9H
Q19FTkQoKTsKIH0KIAotdm9pZCBIZWFwOjpzZXRBY3Rpdml0eUNhbGxiYWNrKFBhc3NPd25QdHI8
R0NBY3Rpdml0eUNhbGxiYWNrPiBhY3Rpdml0eUNhbGxiYWNrKQordm9pZCBIZWFwOjpzZXRBY3Rp
dml0eUNhbGxiYWNrKEdDQWN0aXZpdHlDYWxsYmFjayogYWN0aXZpdHlDYWxsYmFjaykKIHsKICAg
ICBtX2FjdGl2aXR5Q2FsbGJhY2sgPSBhY3Rpdml0eUNhbGxiYWNrOwogfQogCiBHQ0FjdGl2aXR5
Q2FsbGJhY2sqIEhlYXA6OmFjdGl2aXR5Q2FsbGJhY2soKQogewotICAgIHJldHVybiBtX2FjdGl2
aXR5Q2FsbGJhY2suZ2V0KCk7CisgICAgcmV0dXJuIG1fYWN0aXZpdHlDYWxsYmFjazsKIH0KIAog
SW5jcmVtZW50YWxTd2VlcGVyKiBIZWFwOjpzd2VlcGVyKCkKIHsKLSAgICByZXR1cm4gbV9zd2Vl
cGVyLmdldCgpOworICAgIHJldHVybiBtX3N3ZWVwZXI7CiB9CiAKIHZvaWQgSGVhcDo6c2V0R2Fy
YmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoYm9vbCBlbmFibGUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDEwICs5OSwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1
cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0
aXZpdHlDYWxsYmFjayogYWN0aXZpdHlDYWxsYmFjaygpOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHNldEFjdGl2aXR5Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2aXR5Q2FsbGJh
Y2s+KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRBY3Rpdml0eUNhbGxiYWNr
KEdDQWN0aXZpdHlDYWxsYmFjayopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNl
dEdhcmJhZ2VDb2xsZWN0aW9uVGltZXJFbmFibGVkKGJvb2wpOwogCi0gICAgICAgIEluY3JlbWVu
dGFsU3dlZXBlciogc3dlZXBlcigpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBJbmNyZW1l
bnRhbFN3ZWVwZXIqIHN3ZWVwZXIoKTsKIAogICAgICAgICAvLyB0cnVlIGlmIGFuIGFsbG9jYXRp
b24gb3IgY29sbGVjdGlvbiBpcyBpbiBwcm9ncmVzcwogICAgICAgICBpbmxpbmUgYm9vbCBpc0J1
c3koKTsKQEAgLTIzNywxMCArMjM3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBkb3Vi
bGUgbV9sYXN0R0NMZW5ndGg7CiAgICAgICAgIGRvdWJsZSBtX2xhc3RDb2RlRGlzY2FyZFRpbWU7
CiAKLSAgICAgICAgT3duUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gbV9hY3Rpdml0eUNhbGxiYWNr
OwotICAgICAgICBPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPiBtX3N3ZWVwZXI7Ci0gICAgICAg
IAogICAgICAgICBEb3VibHlMaW5rZWRMaXN0PEV4ZWN1dGFibGVCYXNlPiBtX2NvbXBpbGVkQ29k
ZTsKKyAgICAgICAgCisgICAgICAgIEdDQWN0aXZpdHlDYWxsYmFjayogbV9hY3Rpdml0eUNhbGxi
YWNrOworICAgICAgICBJbmNyZW1lbnRhbFN3ZWVwZXIqIG1fc3dlZXBlcjsKICAgICB9OwogCiAg
ICAgaW5saW5lIGJvb2wgSGVhcDo6c2hvdWxkQ29sbGVjdCgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhlYXBUaW1lci5oIgogCisj
aW5jbHVkZSAiQVBJU2hpbXMuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpT
U3RyaW5nLmgiCisjaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0yMSw3ICsyNSw4IEBAIEhlYXBUaW1lcjo6SGVh
cFRpbWVyKEpTR2xvYmFsRGF0YSogZ2xvYmEKIAogSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKIHsK
LSAgICBpbnZhbGlkYXRlKCk7CisgICAgQ0ZSdW5Mb29wUmVtb3ZlVGltZXIobV9ydW5Mb29wLmdl
dCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworICAgIENGUnVuTG9v
cFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKIH0KIAogdm9pZCBIZWFwVGltZXI6OnN5
bmNocm9uaXplKCkKQEAgLTM1LDE0ICs0MCwzNyBAQCB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25p
emUoKQogCiB2b2lkIEhlYXBUaW1lcjo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgQ0ZSdW5Mb29wUmVt
b3ZlVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9u
TW9kZXMpOwotICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKKyAg
ICBtX2dsb2JhbERhdGEgPSAwOworICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1f
dGltZXIuZ2V0KCksIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc19kZWNhZGUpOworfQor
Cit2b2lkIEhlYXBUaW1lcjo6ZGlkU3RhcnRWTVNodXRkb3duKCkKK3sKKyAgICBpZiAoQ0ZSdW5M
b29wR2V0Q3VycmVudCgpID09IG1fcnVuTG9vcC5nZXQoKSkgeworICAgICAgICBpbnZhbGlkYXRl
KCk7CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFT
U0VSVCghbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2so
KSk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2h1dGRvd25NdXRleCk7CisgICAgaW52YWxp
ZGF0ZSgpOwogfQogCiB2b2lkIEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVy
UmVmLCB2b2lkKiBpbmZvKQogewogICAgIEhlYXBUaW1lciogYWdlbnQgPSBzdGF0aWNfY2FzdDxI
ZWFwVGltZXIqPihpbmZvKTsKLSAgICBhZ2VudC0+ZG9Xb3JrKCk7CisgICAgYWdlbnQtPm1fc2h1
dGRvd25NdXRleC5sb2NrKCk7CisgICAgaWYgKCFhZ2VudC0+bV9nbG9iYWxEYXRhKSB7CisgICAg
ICAgIGFnZW50LT5tX3NodXRkb3duTXV0ZXgudW5sb2NrKCk7CisgICAgICAgIGRlbGV0ZSBhZ2Vu
dDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB7CisgICAgICAgIC8vIFdlIGRvbid0IHJl
ZiBoZXJlIHRvIHByZXZlbnQgdXMgZnJvbSByZXN1cnJlY3RpbmcgdGhlIHJlZiBjb3VudCBvZiBh
ICJkZWFkIiBKU0dsb2JhbERhdGEuCisgICAgICAgIEFQSUVudHJ5U2hpbSBzaGltKGFnZW50LT5t
X2dsb2JhbERhdGEsIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrOjpEb250UmVmR2xvYmFsRGF0YSk7
CisgICAgICAgIGFnZW50LT5kb1dvcmsoKTsKKyAgICB9CisgICAgYWdlbnQtPm1fc2h1dGRvd25N
dXRleC51bmxvY2soKTsKIH0KIAogI2Vsc2UKQEAgLTU2LDYgKzg0LDExIEBAIEhlYXBUaW1lcjo6
fkhlYXBUaW1lcigpCiB7CiB9CiAKK3ZvaWQgSGVhcFRpbWVyOjpkaWRTdGFydFZNU2h1dGRvd24o
KQoreworICAgIGRlbGV0ZSB0aGlzOworfQorCiB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25pemUo
KQogewogfQpAQCAtNjQsNyArOTcsNiBAQCB2b2lkIEhlYXBUaW1lcjo6aW52YWxpZGF0ZSgpCiB7
CiB9CiAKLQogI2VuZGlmCiAgICAgCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBUaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBUaW1lci5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwVGltZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgSGVh
cFRpbWVyX2gKIAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CiAKICNpZiBVU0UoQ0YpCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZv
dW5kYXRpb24uaD4KQEAgLTIxLDcgKzIyLDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiAgICAg
dmlydHVhbCB+SGVhcFRpbWVyKCk7Ci0gICAgCisKKyAgICB2b2lkIGRpZFN0YXJ0Vk1TaHV0ZG93
bigpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBk
b1dvcmsoKSA9IDA7CiAgICAgCkBAIC0zNCw2ICszNiw4IEBAIHByb3RlY3RlZDoKICAgICBSZXRh
aW5QdHI8Q0ZSdW5Mb29wVGltZXJSZWY+IG1fdGltZXI7CiAgICAgUmV0YWluUHRyPENGUnVuTG9v
cFJlZj4gbV9ydW5Mb29wOwogICAgIENGUnVuTG9vcFRpbWVyQ29udGV4dCBtX2NvbnRleHQ7CisK
KyAgICBNdXRleCBtX3NodXRkb3duTXV0ZXg7CiAjZW5kaWYKICAgICAKIHByaXZhdGU6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5j
cHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDYgQEAgc3RhdGlj
IGNvbnN0IENGVGltZUludGVydmFsIHN3ZWVwVGltZU11bAogCiB2b2lkIEluY3JlbWVudGFsU3dl
ZXBlcjo6ZG9Xb3JrKCkKIHsKLSAgICBBUElFbnRyeVNoaW0gc2hpbShtX2dsb2JhbERhdGEpOwog
ICAgIGRvU3dlZXAoV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CiB9CiAgICAg
CkBAIC0zMCw5ICsyOSw5IEBAIEluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVy
KEgKIHsKIH0KIAotUGFzc093blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IEluY3JlbWVudGFsU3dl
ZXBlcjo6Y3JlYXRlKEhlYXAqIGhlYXApCitJbmNyZW1lbnRhbFN3ZWVwZXIqIEluY3JlbWVudGFs
U3dlZXBlcjo6Y3JlYXRlKEhlYXAqIGhlYXApCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJ
bmNyZW1lbnRhbFN3ZWVwZXIoaGVhcCwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKSk7CisgICAgcmV0
dXJuIG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIoaGVhcCwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKTsK
IH0KIAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnNjaGVkdWxlVGltZXIoKQpAQCAtODQsOSAr
ODMsOSBAQCB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6ZG9Xb3JrKCkKIHsKIH0KIAotUGFzc093
blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhlYXAq
IGhlYXApCitJbmNyZW1lbnRhbFN3ZWVwZXIqIEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhl
YXAqIGhlYXApCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIo
aGVhcC0+Z2xvYmFsRGF0YSgpKSk7CisgICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIo
aGVhcC0+Z2xvYmFsRGF0YSgpKTsKIH0KIAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0
U3dlZXBpbmcoY29uc3QgSGFzaFNldDxNYXJrZWRCbG9jayo+JikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQsNyArMTQsNyBAQCBjbGFzcyBIZWFwOwogICAgIAogY2xhc3Mg
SW5jcmVtZW50YWxTd2VlcGVyIDogcHVibGljIEhlYXBUaW1lciB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPiBjcmVhdGUoSGVhcCopOworICAgIHN0
YXRpYyBJbmNyZW1lbnRhbFN3ZWVwZXIqIGNyZWF0ZShIZWFwKik7CiAgICAgdm9pZCBzdGFydFN3
ZWVwaW5nKGNvbnN0IEhhc2hTZXQ8TWFya2VkQmxvY2sqPiYgYmxvY2tTbmFwc2hvdCk7CiAgICAg
dmlydHVhbCB2b2lkIGRvV29yaygpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMsNiArMyw3IEBACiAKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRl
ICJIZWFwLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTYsNiArNTcsNyBAQCBpbmxpbmUgdm9p
ZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0CiAgICAgCiB2b2lkKiBNYXJrZWRBbGxvY2F0
b3I6OmFsbG9jYXRlU2xvd0Nhc2UoKQogeworICAgIEFTU0VSVChtX2hlYXAtPmdsb2JhbERhdGEo
KS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogI2lmIENPTExFQ1Rf
T05fRVZFUllfQUxMT0NBVElPTgogICAgIG1faGVhcC0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAg
ICBBU1NFUlQobV9oZWFwLT5tX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAx
MjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjcsOCArMTI3LDEwIEBAIHZvaWQgV2Vha0Jsb2NrOjpyZWFwKCkKICAg
ICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpID4gV2Vha0ltcGw6OkRlYWQpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQod2Vha0ltcGwtPmpzVmFs
dWUoKS5hc0NlbGwoKSkpCisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh3ZWFrSW1wbC0+anNW
YWx1ZSgpLmFzQ2VsbCgpKSkgeworICAgICAgICAgICAgQVNTRVJUKHdlYWtJbXBsLT5zdGF0ZSgp
ID09IFdlYWtJbXBsOjpMaXZlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAK
ICAgICAgICAgd2Vha0ltcGwtPnNldFN0YXRlKFdlYWtJbXBsOjpEZWFkKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGJv
b2wgY2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IEpTVmFsdWUqIHJldHVybmVkRXhjZXB0aW9uKQogewotICAgIEpTTG9jayBsb2NrKGV4ZWMpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRh
KCkuaWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRh
YmxlKCkpOwogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0
YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CkBAIC01Myw3ICs1Myw3IEBAIGJvb2wgY2hlY2tT
eW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCAKIAogSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlKiByZXR1cm5lZEV4Y2VwdGlvbikKIHsK
LSAgICBKU0xvY2sgbG9jayhleGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWRE
YXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0
YSgpLmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICBDUkFTSCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgJKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlD
YWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHByb3RlY3RlZDoKIAog
Y2xhc3MgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayA6IHB1YmxpYyBHQ0FjdGl2aXR5Q2FsbGJh
Y2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPERlZmF1bHRHQ0FjdGl2aXR5Q2Fs
bGJhY2s+IGNyZWF0ZShIZWFwKik7CisgICAgc3RhdGljIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJh
Y2sqIGNyZWF0ZShIZWFwKik7CiAKICAgICBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKEhlYXAq
KTsKIApAQCAtOTEsOSArOTEsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1pbmxpbmUgUGFz
c093blB0cjxEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrPiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxi
YWNrOjpjcmVhdGUoSGVhcCogaGVhcCkKK2lubGluZSBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNr
KiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcCkpOworICAg
IHJldHVybiBuZXcgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayhoZWFwKTsKIH0KIAogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxMCBAQAogI2luY2x1ZGUgIkNv
bW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgiCiAjaW5j
bHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFj
ay5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJu
VmFsdWUuaCIKKyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTQVBJVmFs
dWVXcmFwcGVyLmgiCkBAIC0xNzgsMTIgKzE4MCw5IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxE
YXRhKEdsb2JhbERhdGFUeXAKIHsKICAgICBpbnRlcnByZXRlciA9IG5ldyBJbnRlcnByZXRlcjsK
IAotICAgIGlmIChpc1NoYXJlZEluc3RhbmNlKCkpCi0gICAgICAgIHR1cm5PZmZWZXJpZmllcigp
OwotCiAgICAgLy8gTmVlZCB0byBiZSBjYXJlZnVsIHRvIGtlZXAgZXZlcnl0aGluZyBjb25zaXN0
ZW50IGhlcmUKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh0aGlzKTsKICAgICBJZGVudGlmaWVyVGFi
bGUqIGV4aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWREYXRhKCkuc2V0Q3Vy
cmVudElkZW50aWZpZXJUYWJsZShpZGVudGlmaWVyVGFibGUpOwotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgc3RydWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywg
U3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMpKTsKICAgICBkZWJ1Z2dlckFjdGl2YXRp
b25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBhY3RpdmF0aW9uU3RydWN0dXJlLnNldCgqdGhp
cywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkBA
IC0yMjIsNiArMjIxLDkgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5
cAogCiBKU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQogeworICAgIEFTU0VSVCghbV9hcGlM
b2NrLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOworICAgIGhlYXAuYWN0aXZpdHlDYWxs
YmFjaygpLT5kaWRTdGFydFZNU2h1dGRvd24oKTsKKyAgICBoZWFwLnN3ZWVwZXIoKS0+ZGlkU3Rh
cnRWTVNodXRkb3duKCk7CiAgICAgaGVhcC5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogCiAgICAg
ZGVsZXRlIGludGVycHJldGVyOwpAQCAtMzExLDYgKzMxMyw3IEBAIGJvb2wgSlNHbG9iYWxEYXRh
OjpzaGFyZWRJbnN0YW5jZUV4aXN0cygKIAogSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNo
YXJlZEluc3RhbmNlKCkKIHsKKyAgICBHbG9iYWxKU0xvY2sgZ2xvYmFsTG9jazsKICAgICBKU0ds
b2JhbERhdGEqJiBpbnN0YW5jZSA9IHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKICAgICBpZiAo
IWluc3RhbmNlKSB7CiAgICAgICAgIGluc3RhbmNlID0gYWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0
YShBUElTaGFyZWQsIFRocmVhZFN0YWNrVHlwZVNtYWxsLCBTbWFsbEhlYXApKS5sZWFrUmVmKCk7
CkBAIC0zMjEsNyArMzI0LDYgQEAgSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNoYXJlZElu
c3RhbgogCiBKU0dsb2JhbERhdGEqJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlSW50ZXJu
YWwoKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkp
OwogICAgIHN0YXRpYyBKU0dsb2JhbERhdGEqIHNoYXJlZEluc3RhbmNlOwogICAgIHJldHVybiBz
aGFyZWRJbnN0YW5jZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBA
QAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbnRyaW5zaWMuaCIKICNpbmNsdWRlICJK
SVRTdHVicy5oIgorI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKICNp
bmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJOdW1lcmljU3RyaW5ncy5oIgpAQCAtNDYs
OCArNDcsOCBAQAogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZp
Yy5oPgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaWYgRU5BQkxFKFJFR0VYUF9U
UkFDSU5HKQpAQCAtMTUyLDcgKzE1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAjZW5k
aWYKIAotICAgIGNsYXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEpTR2xvYmFs
RGF0YT4geworICAgIGNsYXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxKU0dsb2JhbERhdGE+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIC8vIFdlYkNvcmUgaGFz
IGEgb25lLXRvLW9uZSBtYXBwaW5nIG9mIHRocmVhZHMgdG8gSlNHbG9iYWxEYXRhczsKICAgICAg
ICAgLy8gZWl0aGVyIGNyZWF0ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBvbmNlCkBAIC0xODAsNiArMTgxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHZvaWQgbWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGluZVRocmVh
ZHMoKS5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOyB9CiAKKyAgICBwcml2YXRlOgor
ICAgICAgICBKU0xvY2sgbV9hcGlMb2NrOworCisgICAgcHVibGljOgogICAgICAgICBIZWFwIGhl
YXA7IC8vIFRoZSBoZWFwIGlzIG91ciBmaXJzdCBkYXRhIG1lbWJlciB0byBlbnN1cmUgdGhhdCBp
dCdzIGRlc3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJlbmNlIGl0Lgog
CiAgICAgICAgIEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlOwpAQCAtNDA5LDYgKzQxNCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihm
bG9hdDY0LCBGbG9hdDY0KTsKICN1bmRlZiByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbgogCisg
ICAgICAgIEpTTG9jayYgYXBpTG9jaygpIHsgcmV0dXJuIG1fYXBpTG9jazsgfQorCiAgICAgcHJp
dmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw4ICsxMTQsNiBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIGlubGluZSB2b2lkCiAKIEpTR2xvYmFsT2Jq
ZWN0Ojp+SlNHbG9iYWxPYmplY3QoKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdMb2NrKCkpOwotCiAgICAgaWYgKG1fZGVidWdnZXIpCiAgICAgICAgIG1fZGVi
dWdnZXItPmRldGFjaCh0aGlzKTsKIApAQCAtMTMwLDcgKzEyOCw3IEBAIHZvaWQgSlNHbG9iYWxP
YmplY3Q6OmRlc3Ryb3koSlNDZWxsKiBjZWwKIAogdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChK
U09iamVjdCogdGhpc1ZhbHVlKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCkpOworICAgIEFTU0VSVChnbG9iYWxEYXRhKCkuYXBpTG9jaygpLmN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIAogICAgIG1fZ2xvYmFsU2NvcGVDaGFpbi5z
ZXQoZ2xvYmFsRGF0YSgpLCB0aGlzLCBTY29wZUNoYWluTm9kZTo6Y3JlYXRlKDAsIHRoaXMsICZn
bG9iYWxEYXRhKCksIHRoaXMsIHRoaXNWYWx1ZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIz
LDcgQEAKIAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNs
dWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAi
U2NvcGVDaGFpbi5oIgogCkBAIC0zOCw5NCArMzksOTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYg
KE9TKERBUldJTikgfHwgVVNFKFBUSFJFQURTKSkKIAogLy8gQWNxdWlyZSB0aGlzIG11dGV4IGJl
Zm9yZSBhY2Nlc3NpbmcgbG9jay1yZWxhdGVkIGRhdGEuCi1zdGF0aWMgcHRocmVhZF9tdXRleF90
IEpTTXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHB0aHJlYWRfbXV0
ZXhfdCBnaWFudEdsb2JhbEpTTG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CiAKLS8v
IFRocmVhZC1zcGVjaWZpYyBrZXkgdGhhdCB0ZWxscyB3aGV0aGVyIGEgdGhyZWFkIGhvbGRzIHRo
ZSBKU011dGV4LCBhbmQgaG93IG1hbnkgdGltZXMgaXQgd2FzIHRha2VuIHJlY3Vyc2l2ZWx5Lgot
cHRocmVhZF9rZXlfdCBKU0xvY2tDb3VudDsKK0dsb2JhbEpTTG9jazo6R2xvYmFsSlNMb2NrKCkK
K3sKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJmdpYW50R2xvYmFsSlNMb2NrKTsKK30KIAotc3Rh
dGljIHZvaWQgY3JlYXRlSlNMb2NrQ291bnQoKQorR2xvYmFsSlNMb2NrOjp+R2xvYmFsSlNMb2Nr
KCkKIHsKLSAgICBwdGhyZWFkX2tleV9jcmVhdGUoJkpTTG9ja0NvdW50LCAwKTsKKyAgICBwdGhy
ZWFkX211dGV4X3VubG9jaygmZ2lhbnRHbG9iYWxKU0xvY2spOwogfQogCi1wdGhyZWFkX29uY2Vf
dCBjcmVhdGVKU0xvY2tDb3VudE9uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKK0pTTG9ja0hvbGRl
cjo6SlNMb2NrSG9sZGVyKEV4ZWNTdGF0ZSogZXhlYykKKyAgICA6IG1fZ2xvYmFsRGF0YSgmZXhl
Yy0+Z2xvYmFsRGF0YSgpKQoreworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsK
K30KIAotLy8gTG9jayBuZXN0aW5nIGNvdW50LgotaW50cHRyX3QgSlNMb2NrOjpsb2NrQ291bnQo
KQorSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQor
ICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiB7Ci0gICAgcHRocmVhZF9vbmNlKCZjcmVh
dGVKU0xvY2tDb3VudE9uY2UsIGNyZWF0ZUpTTG9ja0NvdW50KTsKKyAgICBtX2dsb2JhbERhdGEt
PmFwaUxvY2soKS5sb2NrKCk7Cit9CiAKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4ocHRocmVhZF9nZXRzcGVjaWZpYyhKU0xvY2tDb3VudCkpOworSlNMb2NrSG9sZGVyOjpK
U0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIDogbV9nbG9iYWxEYXRh
KCZnbG9iYWxEYXRhKQoreworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKIH0K
IAotc3RhdGljIHZvaWQgc2V0TG9ja0NvdW50KGludHB0cl90IGNvdW50KQorSlNMb2NrSG9sZGVy
Ojp+SlNMb2NrSG9sZGVyKCkKIHsKLSAgICBBU1NFUlQoY291bnQgPj0gMCk7Ci0gICAgcHRocmVh
ZF9zZXRzcGVjaWZpYyhKU0xvY2tDb3VudCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY291bnQp
KTsKKyAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS51bmxvY2soKTsKIH0KIAotSlNMb2NrOjpK
U0xvY2soRXhlY1N0YXRlKiBleGVjKQotICAgIDogbV9sb2NrQmVoYXZpb3IoZXhlYy0+Z2xvYmFs
RGF0YSgpLmlzU2hhcmVkSW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlv
bnNPbmx5KQorSlNMb2NrOjpKU0xvY2soKQorICAgIDogbV9sb2NrQ291bnQoMCkKIHsKLSAgICBs
b2NrKG1fbG9ja0JlaGF2aW9yKTsKKyAgICBtX3NwaW5Mb2NrLkluaXQoKTsKIH0KIAotSlNMb2Nr
OjpKU0xvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgIDogbV9sb2NrQmVoYXZpb3Io
Z2xvYmFsRGF0YS0+aXNTaGFyZWRJbnN0YW5jZSgpID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpCitKU0xvY2s6On5KU0xvY2soKQogewotICAgIGxvY2sobV9sb2NrQmVoYXZp
b3IpOwogfQogCi12b2lkIEpTTG9jazo6bG9jayhKU0xvY2tCZWhhdmlvciBsb2NrQmVoYXZpb3Ip
Cit2b2lkIEpTTG9jazo6bG9jaygpCiB7Ci0jaWZkZWYgTkRFQlVHCi0gICAgLy8gTG9ja2luZyAi
bm90IGZvciByZWFsIiBpcyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICBpZiAobG9ja0JlaGF2
aW9yID09IFNpbGVuY2VBc3NlcnRpb25zT25seSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCisg
ICAgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkID0gV1RGOjpjdXJyZW50VGhyZWFkKCk7
CisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJm1fc3BpbkxvY2spOworICAg
ICAgICBpZiAobV9vd25lclRocmVhZCA9PSBjdXJyZW50VGhyZWFkICYmIG1fbG9ja0NvdW50KSB7
CisgICAgICAgICAgICBtX2xvY2tDb3VudCsrOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQogCi0gICAgcHRocmVhZF9vbmNlKCZjcmVhdGVKU0xvY2tDb3VudE9uY2UsIGNy
ZWF0ZUpTTG9ja0NvdW50KTsKKyAgICBtX2xvY2subG9jaygpOwogCi0gICAgaW50cHRyX3QgY3Vy
cmVudExvY2tDb3VudCA9IGxvY2tDb3VudCgpOwotICAgIGlmICghY3VycmVudExvY2tDb3VudCAm
JiBsb2NrQmVoYXZpb3IgPT0gTG9ja0ZvclJlYWwpIHsKLSAgICAgICAgaW50IHJlc3VsdCA9IHB0
aHJlYWRfbXV0ZXhfbG9jaygmSlNNdXRleCk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0
LCAhcmVzdWx0KTsKKyAgICB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmbV9zcGlu
TG9jayk7CisgICAgICAgIG1fb3duZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkOworICAgICAgICBB
U1NFUlQoIW1fbG9ja0NvdW50KTsKKyAgICAgICAgbV9sb2NrQ291bnQgPSAxOwogICAgIH0KLSAg
ICBzZXRMb2NrQ291bnQoY3VycmVudExvY2tDb3VudCArIDEpOwogfQogCi12b2lkIEpTTG9jazo6
dW5sb2NrKEpTTG9ja0JlaGF2aW9yIGxvY2tCZWhhdmlvcikKK3ZvaWQgSlNMb2NrOjp1bmxvY2so
KQogewotICAgIEFTU0VSVChsb2NrQ291bnQoKSk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCkpOwogCi0jaWZkZWYgTkRFQlVHCi0gICAgLy8gTG9ja2luZyAibm90IGZv
ciByZWFsIiBpcyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICBpZiAobG9ja0JlaGF2aW9yID09
IFNpbGVuY2VBc3NlcnRpb25zT25seSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCisgICAgU3Bp
bkxvY2tIb2xkZXIgaG9sZGVyKCZtX3NwaW5Mb2NrKTsKKyAgICBtX2xvY2tDb3VudC0tOwogCi0g
ICAgaW50cHRyX3QgbmV3TG9ja0NvdW50ID0gbG9ja0NvdW50KCkgLSAxOwotICAgIHNldExvY2tD
b3VudChuZXdMb2NrQ291bnQpOwotICAgIGlmICghbmV3TG9ja0NvdW50ICYmIGxvY2tCZWhhdmlv
ciA9PSBMb2NrRm9yUmVhbCkgewotICAgICAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9tdXRleF91
bmxvY2soJkpTTXV0ZXgpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJlc3VsdCk7
Ci0gICAgfQorICAgIGlmICghbV9sb2NrQ291bnQpCisgICAgICAgIG1fbG9jay51bmxvY2soKTsK
IH0KIAogdm9pZCBKU0xvY2s6OmxvY2soRXhlY1N0YXRlKiBleGVjKQogewotICAgIGxvY2soZXhl
Yy0+Z2xvYmFsRGF0YSgpLmlzU2hhcmVkSW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBleGVjLT5nbG9iYWxEYXRhKCkuYXBpTG9jaygpLmxvY2so
KTsKIH0KIAogdm9pZCBKU0xvY2s6OnVubG9jayhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgdW5s
b2NrKGV4ZWMtPmdsb2JhbERhdGEoKS5pc1NoYXJlZEluc3RhbmNlKCkgPyBMb2NrRm9yUmVhbCA6
IFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmFwaUxvY2so
KS51bmxvY2soKTsKIH0KIAogYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2Nr
KCkKIHsKLSAgICBwdGhyZWFkX29uY2UoJmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNM
b2NrQ291bnQpOwotICAgIHJldHVybiAhIXB0aHJlYWRfZ2V0c3BlY2lmaWMoSlNMb2NrQ291bnQp
OworICAgIHJldHVybiBtX2xvY2tDb3VudCAmJiBtX293bmVyVGhyZWFkID09IFdURjo6Y3VycmVu
dFRocmVhZCgpOwogfQogCiAvLyBUaGlzIGlzIGZhaXJseSBuYXN0eS4gIFdlIGFsbG93IG11bHRp
cGxlIHRocmVhZHMgdG8gcnVuIG9uIHRoZSBzYW1lCkBAIC0xNDksNyArMTUyLDcgQEAgYm9vbCBK
U0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKAogLy8gdGhpcyB0byBoYXBwZW4sIGFu
ZCB3ZXJlIGl0cyBzdGFjayB0byBncm93IGZ1cnRoZXIsIHRoZW4gaXQgbWF5IHBvdGVudGlhbGx5
CiAvLyB3cml0ZSBvdmVyIHRoZSBzZWNvbmQgdGhyZWFkJ3MgY2FsbCBmcmFtZXMuCiAvLwotLy8g
SW4gYXZvaWQgSlMgc3RhY2sgY29ycnVwdGlvbiB3ZSBlbmZvcmNlIGEgcG9saWN5IG9mIG9ubHkg
ZXZlciBhbGxvd2luZyB0d28KKy8vIFRvIGF2b2lkIEpTIHN0YWNrIGNvcnJ1cHRpb24gd2UgZW5m
b3JjZSBhIHBvbGljeSBvZiBvbmx5IGV2ZXIgYWxsb3dpbmcgdHdvCiAvLyB0aHJlYWRzIHRvIHVz
ZSBhIEpTIGNvbnRleHQgY29uY3VycmVudGx5LCBhbmQgb25seSBhbGxvd2luZyB0aGUgc2Vjb25k
IG9mCiAvLyB0aGVzZSB0aHJlYWRzIHRvIGV4ZWN1dGUgdW50aWwgaXQgaGFzIGNvbXBsZXRlZCBh
bmQgZnVsbHkgcmV0dXJuZWQgZnJvbSBpdHMKIC8vIG91dGVybW9zdCBjYWxsIGludG8gSlNDLiAg
V2UgZW5mb3JjZSB0aGlzIHBvbGljeSB1c2luZyAnbG9ja0Ryb3BEZXB0aCcuICBUaGUKQEAgLTE1
OCw3ICsxNjEsNyBAQCBib29sIEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soCiAv
LyBzYW1lIHRocmVhZCBhZ2FpbiwgZW50ZXIgSlNDICh0aHJvdWdoIGV2YWx1YXRlIHNjcmlwdCBv
ciBjYWxsIGZ1bmN0aW9uKSwgYW5kIGV4aXQKIC8vIGFnYWluIHRocm91Z2ggYSBjYWxsYmFjaywg
dGhlbiB0aGUgbG9ja3Mgd2lsbCBub3QgYmUgZHJvcHBlZCB3aGVuIERyb3BBbGxMb2NrcwogLy8g
aXMgY2FsbGVkIChzaW5jZSBsb2NrRHJvcERlcHRoIGlzIG5vbi16ZXJvKS4gIFNpbmNlIHRoaXMg
dGhyZWFkIGlzIHN0aWxsIGhvbGRpbmcKLS8vIHRoZSBsb2Nrcywgb25seSBpdCB3aWxsIHJlIGFi
bGUgdG8gcmUtZW50ZXIgSlNDIChlaXRoZXIgYmUgcmV0dXJuaW5nIGZyb20gdGhlCisvLyB0aGUg
bG9ja3MsIG9ubHkgaXQgd2lsbCBiZSBhYmxlIHRvIHJlLWVudGVyIEpTQyAoZWl0aGVyIGJlIHJl
dHVybmluZyBmcm9tIHRoZQogLy8gY2FsbGJhY2ssIG9yIGJ5IHJlLWVudGVyaW5nIHRocm91Z2gg
YW5vdGhlciBjYWxsIHRvIGV2YXVsYXRlIHNjcmlwdCBvciBjYWxsCiAvLyBmdW5jdGlvbikuCiAv
LwpAQCAtMTY4LDc0ICsxNzEsNjkgQEAgYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdMb2NrKAogLy8gb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIG1hZGUgLSB0aG91Z2ggaW1wbGVt
ZW50aW5nIHRoZSBsZXNzIHJlc3RyaWN0aXZlIHBvbGljeQogLy8gd291bGQgbGlrZWx5IGluY3Jl
YXNlIGNvbXBsZXhpdHkgYW5kIG92ZXJoZWFkLgogLy8KLXN0YXRpYyB1bnNpZ25lZCBsb2NrRHJv
cERlcHRoID0gMDsKIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhFeGVjU3Rh
dGUqIGV4ZWMpCi0gICAgOiBtX2xvY2tCZWhhdmlvcihleGVjLT5nbG9iYWxEYXRhKCkuaXNTaGFy
ZWRJbnN0YW5jZSgpID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpCisvLyBU
aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBsb2NrcyB0aGF0IHdlcmUgZHJvcHBl
ZC4KK3Vuc2lnbmVkIEpTTG9jazo6ZHJvcEFsbExvY2tzKCkKIHsKLSAgICBwdGhyZWFkX29uY2Uo
JmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNMb2NrQ291bnQpOwotCi0gICAgaWYgKGxv
Y2tEcm9wRGVwdGgrKykgewotICAgICAgICBtX2xvY2tDb3VudCA9IDA7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKG1fbG9ja0Ryb3BEZXB0aCsrKQorICAgICAgICByZXR1cm4gMDsK
IAotICAgIG1fbG9ja0NvdW50ID0gSlNMb2NrOjpsb2NrQ291bnQoKTsKLSAgICBmb3IgKGludHB0
cl90IGkgPSAwOyBpIDwgbV9sb2NrQ291bnQ7IGkrKykKLSAgICAgICAgSlNMb2NrOjp1bmxvY2so
bV9sb2NrQmVoYXZpb3IpOworICAgIHJldHVybiBkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHko
KTsKIH0KIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhKU0xvY2tCZWhhdmlv
ciBKU0xvY2tCZWhhdmlvcikKLSAgICA6IG1fbG9ja0JlaGF2aW9yKEpTTG9ja0JlaGF2aW9yKQor
dW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoKQogewotICAgIHB0
aHJlYWRfb25jZSgmY3JlYXRlSlNMb2NrQ291bnRPbmNlLCBjcmVhdGVKU0xvY2tDb3VudCk7Cisg
ICAgdW5zaWduZWQgbG9ja0NvdW50ID0gbV9sb2NrQ291bnQ7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxvY2tDb3VudDsgaSsrKQorICAgICAgICB1bmxvY2soKTsKIAotICAgIGlmIChs
b2NrRHJvcERlcHRoKyspIHsKLSAgICAgICAgbV9sb2NrQ291bnQgPSAwOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIHJldHVybiBsb2NrQ291bnQ7Cit9CiAKLSAgICAvLyBJdCBpcyBuZWNl
c3NhcnkgdG8gZHJvcCBldmVuICJ1bnJlYWwiIGxvY2tzLCBiZWNhdXNlIGhhdmluZyBhIG5vbi16
ZXJvIGxvY2sgY291bnQKLSAgICAvLyB3aWxsIHByZXZlbnQgYSByZWFsIGxvY2sgZnJvbSBiZWlu
ZyB0YWtlbi4KK3ZvaWQgSlNMb2NrOjpncmFiQWxsTG9ja3ModW5zaWduZWQgbG9ja0NvdW50KQor
eworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsb2NrQ291bnQ7IGkrKykKKyAgICAgICAg
bG9jaygpOwogCi0gICAgbV9sb2NrQ291bnQgPSBKU0xvY2s6OmxvY2tDb3VudCgpOwotICAgIGZv
ciAoaW50cHRyX3QgaSA9IDA7IGkgPCBtX2xvY2tDb3VudDsgaSsrKQotICAgICAgICBKU0xvY2s6
OnVubG9jayhtX2xvY2tCZWhhdmlvcik7CisgICAgbV9sb2NrRHJvcERlcHRoLS07CiB9CiAKLUpT
TG9jazo6RHJvcEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKCkKK0pTTG9jazo6RHJvcEFsbExvY2tz
OjpEcm9wQWxsTG9ja3MoRXhlY1N0YXRlKiBleGVjKQorICAgIDogbV9sb2NrQ291bnQoMCkKKyAg
ICAsIG1fZ2xvYmFsRGF0YSgmZXhlYy0+Z2xvYmFsRGF0YSgpKQogewotICAgIGZvciAoaW50cHRy
X3QgaSA9IDA7IGkgPCBtX2xvY2tDb3VudDsgaSsrKQotICAgICAgICBKU0xvY2s6OmxvY2sobV9s
b2NrQmVoYXZpb3IpOwotCi0gICAgLS1sb2NrRHJvcERlcHRoOworICAgIG1fbG9ja0NvdW50ID0g
bV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZHJvcEFsbExvY2tzKCk7CiB9CiAKLSNlbHNlIC8vIChP
UyhEQVJXSU4pIHx8IFVTRShQVEhSRUFEUykpCitKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFs
bExvY2tzKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKKyAgICA6IG1fbG9ja0NvdW50KDApCisg
ICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKK3sKKyAgICBtX2xvY2tDb3VudCA9IG1fZ2xv
YmFsRGF0YS0+YXBpTG9jaygpLmRyb3BBbGxMb2NrcygpOworfQogCi1KU0xvY2s6OkpTTG9jayhF
eGVjU3RhdGUqKQotICAgIDogbV9sb2NrQmVoYXZpb3IoU2lsZW5jZUFzc2VydGlvbnNPbmx5KQor
SlNMb2NrOjpEcm9wQWxsTG9ja3M6On5Ecm9wQWxsTG9ja3MoKQogeworICAgIG1fZ2xvYmFsRGF0
YS0+YXBpTG9jaygpLmdyYWJBbGxMb2NrcyhtX2xvY2tDb3VudCk7CiB9CiAKLS8vIElmIHRocmVh
ZGluZyBzdXBwb3J0IGlzIG9mZiwgc2V0IHRoZSBsb2NrIGNvdW50IHRvIGEgY29uc3RhbnQgdmFs
dWUgb2YgMSBzbyBzc2VydGlvbnMKLS8vIHRoYXQgdGhlIGxvY2sgaXMgaGVsZCBkb24ndCBmYWls
Ci1pbnRwdHJfdCBKU0xvY2s6OmxvY2tDb3VudCgpCisjZWxzZSAvLyAoT1MoREFSV0lOKSB8fCBV
U0UoUFRIUkVBRFMpKQorCitHbG9iYWxKU0xvY2s6Okdsb2JhbEpTTG9jaygpCiB7Ci0gICAgcmV0
dXJuIDE7CiB9CiAKLWJvb2wgSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpCitH
bG9iYWxKU0xvY2s6On5HbG9iYWxKU0xvY2soKQogewotICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIEpTTG9jazo6bG9jayhKU0xvY2tCZWhhdmlvcikKK0pTTG9jazo6SlNMb2NrKEV4ZWNTdGF0
ZSopCiB7CiB9CiAKLXZvaWQgSlNMb2NrOjp1bmxvY2soSlNMb2NrQmVoYXZpb3IpCitib29sIEpT
TG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKQogeworICAgIHJldHVybiB0cnVlOwog
fQogCiB2b2lkIEpTTG9jazo6bG9jayhFeGVjU3RhdGUqKQpAQCAtMjUwLDEwICsyNDgsNiBAQCBK
U0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKEV4ZWNTCiB7CiB9CiAKLUpTTG9jazo6
RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoSlNMb2NrQmVoYXZpb3IpCi17Ci19Ci0KIEpTTG9j
azo6RHJvcEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMs
OSBAQAogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RDU3Bpbkxv
Y2suaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC0zMCw4ICszMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8vIGltcG9ydGFudCB0byBsb2Nr
IGJlZm9yZSBkb2luZyBhbnl0aGluZyB0aGF0IGFsbG9jYXRlcyBhCiAgICAgLy8gSmF2YVNjcmlw
dCBkYXRhIHN0cnVjdHVyZSBvciB0aGF0IGludGVyYWN0cyB3aXRoIHNoYXJlZCBzdGF0ZQogICAg
IC8vIHN1Y2ggYXMgdGhlIHByb3RlY3QgY291bnQgaGFzaCB0YWJsZS4gVGhlIHNpbXBsZXN0IHdh
eSB0byBsb2NrCi0gICAgLy8gaXMgdG8gY3JlYXRlIGEgbG9jYWwgSlNMb2NrIG9iamVjdCBpbiB0
aGUgc2NvcGUgd2hlcmUgdGhlIGxvY2sgCi0gICAgLy8gbXVzdCBiZSBoZWxkLiBUaGUgbG9jayBp
cyByZWN1cnNpdmUgc28gbmVzdGluZyBpcyBvay4gVGhlIEpTTG9jayAKKyAgICAvLyBpcyB0byBj
cmVhdGUgYSBsb2NhbCBKU0xvY2tIb2xkZXIgb2JqZWN0IGluIHRoZSBzY29wZSB3aGVyZSB0aGUg
bG9jayAKKyAgICAvLyBtdXN0IGJlIGhlbGQgYW5kIHBhc3MgaXQgdGhlIGNvbnRleHQgdGhhdCBy
ZXF1aXJlcyBwcm90ZWN0aW9uLiAKKyAgICAvLyBUaGUgbG9jayBpcyByZWN1cnNpdmUgc28gbmVz
dGluZyBpcyBvay4gVGhlIEpTTG9jayAKICAgICAvLyBvYmplY3QgYWxzbyBhY3RzIGFzIGEgY29u
dmVuaWVuY2Ugc2hvcnQtaGFuZCBmb3IgcnVubmluZyBpbXBvcnRhbnQKICAgICAvLyBpbml0aWFs
aXphdGlvbiByb3V0aW5lcy4KIApAQCAtNDQsNjIgKzQ4LDY1IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIC8vIERyb3BBbGxMb2NrcyBvYmplY3QgdGFrZXMgY2FyZSB0byByZWxlYXNlIHRoZSBKU0xv
Y2sgb25seSBpZiB5b3VyCiAgICAgLy8gdGhyZWFkIGFjcXVpcmVkIGl0IHRvIGJlZ2luIHdpdGgu
CiAKLSAgICAvLyBGb3IgY29udGV4dHMgb3RoZXIgdGhhbiB0aGUgc2luZ2xlIHNoYXJlZCBvbmUs
IGltcGxpY2l0IGxvY2tpbmcgaXMgbm90IGRvbmUsCi0gICAgLy8gYnV0IHdlIHN0aWxsIG5lZWQg
dG8gcGVyZm9ybSBhbGwgdGhlIGNvdW50aW5nIGluIG9yZGVyIHRvIGtlZXAgZGVidWcKLSAgICAv
LyBhc3NlcnRpb25zIHdvcmtpbmcsIHNvIHRoYXQgY2xpZW50cyB0aGF0IHVzZSB0aGUgc2hhcmVk
IGNvbnRleHQgZG9uJ3QgYnJlYWsuCi0KICAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3Mg
SlNHbG9iYWxEYXRhOwogCi0gICAgZW51bSBKU0xvY2tCZWhhdmlvciB7IFNpbGVuY2VBc3NlcnRp
b25zT25seSwgTG9ja0ZvclJlYWwgfTsKKyAgICAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gcHJv
dGVjdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGxlZ2FjeSBzaW5nbGUgCisgICAgLy8gc2hh
cmVkIEpTR2xvYmFsRGF0YS4KKyAgICBjbGFzcyBHbG9iYWxKU0xvY2sgeworICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShHbG9iYWxKU0xvY2spOworICAgIHB1YmxpYzoKKyAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgR2xvYmFsSlNMb2NrKCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IH5HbG9iYWxKU0xvY2soKTsKKyAgICB9OworCisgICAgY2xhc3MgSlNMb2NrSG9sZGVyIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTTG9ja0hvbGRlcihKU0dsb2Jh
bERhdGEqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNMb2NrSG9sZGVyKEpTR2xvYmFs
RGF0YSYpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0xvY2tIb2xkZXIoRXhlY1N0YXRl
Kik7CisKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9ja0hvbGRlcigpOworICAgIHBy
aXZhdGU6CisgICAgICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IG1fZ2xvYmFsRGF0YTsKKyAgICB9
OwogCiAgICAgY2xhc3MgSlNMb2NrIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSlNM
b2NrKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTTG9jayhFeGVj
U3RhdGUqKTsKLSAgICAgICAgSlNMb2NrKEpTR2xvYmFsRGF0YSopOworICAgICAgICBKU0xvY2so
KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9jaygpOworCisgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgbG9jaygpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHVubG9jaygpOwogCi0gICAgICAgIEpTTG9jayhKU0xvY2tCZWhhdmlvciBsb2NrQmVoYXZpb3Ip
Ci0gICAgICAgICAgICA6IG1fbG9ja0JlaGF2aW9yKGxvY2tCZWhhdmlvcikKLSAgICAgICAgewot
I2lmZGVmIE5ERUJVRwotICAgICAgICAgICAgLy8gTG9ja2luZyAibm90IGZvciByZWFsIiBpcyBh
IGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICAgICAgICAgIGlmIChsb2NrQmVoYXZpb3IgPT0gU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSNlbmRpZgotICAg
ICAgICAgICAgbG9jayhsb2NrQmVoYXZpb3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgfkpTTG9j
aygpCi0gICAgICAgIHsgCi0jaWZkZWYgTkRFQlVHCi0gICAgICAgICAgICAvLyBMb2NraW5nICJu
b3QgZm9yIHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0dXJlLgotICAgICAgICAgICAgaWYgKG1f
bG9ja0JlaGF2aW9yID09IFNpbGVuY2VBc3NlcnRpb25zT25seSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0jZW5kaWYKLSAgICAgICAgICAgIHVubG9jayhtX2xvY2tCZWhhdmlvcik7IAotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBs
b2NrKEpTTG9ja0JlaGF2aW9yKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgdW5sb2NrKEpTTG9ja0JlaGF2aW9yKTsKICAgICAgICAgc3RhdGljIHZvaWQgbG9jayhFeGVj
U3RhdGUqKTsKICAgICAgICAgc3RhdGljIHZvaWQgdW5sb2NrKEV4ZWNTdGF0ZSopOworICAgICAg
ICBzdGF0aWMgdm9pZCBsb2NrKEpTR2xvYmFsRGF0YSYpOworICAgICAgICBzdGF0aWMgdm9pZCB1
bmxvY2soSlNHbG9iYWxEYXRhJik7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IGludHB0cl90IGxvY2tDb3VudCgpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpOworICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7CiAKLSAgICAgICAgSlNMb2Nr
QmVoYXZpb3IgbV9sb2NrQmVoYXZpb3I7CisgICAgICAgIHVuc2lnbmVkIGRyb3BBbGxMb2Nrcygp
OworICAgICAgICB1bnNpZ25lZCBkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoKTsKKyAgICAg
ICAgdm9pZCBncmFiQWxsTG9ja3ModW5zaWduZWQgbG9ja0NvdW50KTsKKworICAgICAgICBTcGlu
TG9jayBtX3NwaW5Mb2NrOworICAgICAgICBNdXRleCBtX2xvY2s7CisgICAgICAgIFRocmVhZElk
ZW50aWZpZXIgbV9vd25lclRocmVhZDsKKyAgICAgICAgaW50cHRyX3QgbV9sb2NrQ291bnQ7Cisg
ICAgICAgIHVuc2lnbmVkIG1fbG9ja0Ryb3BEZXB0aDsKIAogICAgICAgICBjbGFzcyBEcm9wQWxs
TG9ja3MgewogICAgICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRHJvcEFsbExvY2tzKTsK
ICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRHJvcEFsbExv
Y2tzKEV4ZWNTdGF0ZSogZXhlYyk7Ci0gICAgICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBEcm9w
QWxsTG9ja3MoSlNMb2NrQmVoYXZpb3IpOworICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
RHJvcEFsbExvY2tzKEpTR2xvYmFsRGF0YSopOwogICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgfkRyb3BBbGxMb2NrcygpOwogICAgICAgICAgICAgCiAgICAgICAgIHByaXZhdGU6CiAgICAg
ICAgICAgICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKLSAgICAgICAgICAgIEpTTG9ja0JlaGF2aW9y
IG1fbG9ja0JlaGF2aW9yOworICAgICAgICAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gbV9nbG9i
YWxEYXRhOwogICAgICAgICB9OwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtHQ01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dlYWtHQ01hcC5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUs
OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0
RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJmltcGwtPmpzVmFsdWUoKSkpOwogICAgIH0K
IAotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIGNvbnN0IEtleVR5cGUmIGtleSwgRXh0ZXJu
YWxUeXBlIHZhbHVlKQorICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29u
c3QgS2V5VHlwZSYga2V5LCBFeHRlcm5hbFR5cGUgdmFsdWUpCiAgICAgeworICAgICAgICBBU1NF
UlRfVU5VU0VEKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCkpOwogICAgICAgICB0eXBlbmFtZSBNYXBUeXBlOjpBZGRSZXN1bHQgcmVz
dWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkp
CiAgICAgICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25k
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NyBAQAorMjAxMi0wNi0yMCAgTWFy
ayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBz
aG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEN1cnJlbnQgcmVncmVzc2lvbiB0ZXN0cyBh
cmUgc3VmZmljaWVudC4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNM
b2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNz
IGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRl
cmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uIEFsc28gYWRkZWQgYSBj
b3VwbGUgSlNMb2NrcyB0byBwbGFjZXMgdGhhdCBkaWRuJ3QgYWxyZWFkeSAKKyAgICAgICAgaGF2
ZSBpdCB0aGF0IG5lZWRlZCBpdC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0dDQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdD
Q29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29u
dHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9s
bGVyOjpkaXNjYXJkQWxsQ29tcGlsZWRDb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1
c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0
b21Wb2lkQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1
c3RvbVhQYXRoTlNSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVhQYXRo
TlNSZXNvbHZlcjo6bG9va3VwTmFtZXNwYWNlVVJJKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0Vycm9ySGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Vycm9ySGFuZGxlcjo6aGFu
ZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6bm9kZUFzU2NyaXB0VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3RlZE9iamVj
dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVJbmplY3RlZFNj
cmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNhbkFjY2Vz
c0luc3BlY3RlZFdpbmRvdyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0
ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFs
aXplSlNGdW5jdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJhY2tDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNNdXRhdGlvbkNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrOjpoYW5kbGVFdmVu
dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y2hlZHVsZWRBY3Rpb246OmV4ZWN1dGVGdW5jdGlvbkluQ29udGV4dCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OmV2YWx1YXRlSW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpj
bGVhcldpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6Omlu
aXRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2FjaGVhYmxlQmlu
ZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Ymlu
ZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6d2lu
ZG93U2NyaXB0TlBPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
anNPYmplY3RGb3JQbHVnaW5FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cyk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6Ondp
bmRvd1NjcmlwdE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlk
UGF1c2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5KToKKyAgICAgICAgKFdl
YkNvcmU6OmV2ZW50TGlzdGVuZXJIYW5kbGVyTG9jYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRGdW5jdGlvbkNhbGw6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25D
YWxsOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6OmNhbGwp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRH
bG9iYWxPYmplY3Q6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6
OnJlbW92ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRWYWx1ZTo6dG9JbnNwZWN0b3JWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRD
b250cm9sbGVyOjp+V29ya2VyU2NyaXB0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJTY3JpcHRDb250cm9sbGVyOjppbml0U2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clNjcmlwdENvbnRyb2xsZXI6OmRpc2FibGVFdmFsKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpj
L1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAgICAgKF9kaWRFeGVjdXRlKToKKyAgICAgICAgKC1b
V2ViU2NyaXB0T2JqZWN0IF9zZXRJbXA6b3JpZ2luUm9vdE9iamVjdDpyb290T2JqZWN0Ol0pOgor
ICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgX3NldE9yaWdpblJvb3RPYmplY3Q6YW5kUm9vdE9i
amVjdDpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGRlYWxsb2NdKToKKyAgICAgICAg
KC1bV2ViU2NyaXB0T2JqZWN0IGZpbmFsaXplXSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVj
dCBjYWxsV2ViU2NyaXB0TWV0aG9kOndpdGhBcmd1bWVudHM6XSk6CisgICAgICAgICgtW1dlYlNj
cmlwdE9iamVjdCBldmFsdWF0ZVdlYlNjcmlwdDpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2Jq
ZWN0IHNldFZhbHVlOmZvcktleTpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHZhbHVl
Rm9yS2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgcmVtb3ZlV2ViU2NyaXB0S2V5
Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgaGFzV2ViU2NyaXB0S2V5Ol0pOgorICAg
ICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc3RyaW5nUmVwcmVzZW50YXRpb25dKToKKyAgICAgICAg
KC1bV2ViU2NyaXB0T2JqZWN0IHdlYlNjcmlwdFZhbHVlQXRJbmRleDpdKToKKyAgICAgICAgKC1b
V2ViU2NyaXB0T2JqZWN0IHNldFdlYlNjcmlwdFZhbHVlQXRJbmRleDp2YWx1ZTpdKToKKyAgICAg
ICAgKCtbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpvcmlnaW5Sb290
T2JqZWN0OnJvb3RPYmplY3Q6XSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24pOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoTm9QYXJhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0p
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlBh
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhTdHJp
bmdMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhC
b29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1JlcXVp
cmVzVGhpc1RvUGFzcyk6CisgICAgICAgICogYnJpZGdlL05QX2pzb2JqZWN0LmNwcDoKKyAgICAg
ICAgKF9OUE5fSW52b2tlRGVmYXVsdCk6CisgICAgICAgIChfTlBOX0ludm9rZSk6CisgICAgICAg
IChfTlBOX0V2YWx1YXRlKToKKyAgICAgICAgKF9OUE5fR2V0UHJvcGVydHkpOgorICAgICAgICAo
X05QTl9TZXRQcm9wZXJ0eSk6CisgICAgICAgIChfTlBOX1JlbW92ZVByb3BlcnR5KToKKyAgICAg
ICAgKF9OUE5fSGFzUHJvcGVydHkpOgorICAgICAgICAoX05QTl9IYXNNZXRob2QpOgorICAgICAg
ICAoX05QTl9FbnVtZXJhdGUpOgorICAgICAgICAoX05QTl9Db25zdHJ1Y3QpOgorICAgICAgICAq
IGJyaWRnZS9jL2NfY2xhc3MuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0NsYXNzOjp+
Q0NsYXNzKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNDbGFzczo6bWV0aG9kc05hbWVkKToK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNDbGFzczo6ZmllbGROYW1lZCk6CisgICAgICAgICog
YnJpZGdlL2MvY19pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFu
Y2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZSk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpDSW5zdGFuY2U6Omludm9rZU1ldGhvZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpD
SW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
Q0luc3RhbmNlOjppbnZva2VDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0lu
c3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3J1bnRpbWUu
Y3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0ZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZSk6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZSk6Cisg
ICAgICAgICogYnJpZGdlL2MvY191dGlsaXR5LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OmNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZl
cnROUFZhcmlhbnRUb1ZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9qc29iamVjdC5t
bToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y2FsbCk6CisgICAgICAgIChKYXZhSlNPYmplY3Q6
OmV2YWwpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpnZXRNZW1iZXIpOgorICAgICAgICAoSmF2
YUpTT2JqZWN0OjpzZXRNZW1iZXIpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpyZW1vdmVNZW1i
ZXIpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpnZXRTbG90KToKKyAgICAgICAgKEphdmFKU09i
amVjdDo6c2V0U2xvdCk6CisgICAgICAgIChKYXZhSlNPYmplY3Q6OnRvU3RyaW5nKToKKyAgICAg
ICAgKEphdmFKU09iamVjdDo6Y29udmVydFZhbHVlVG9KT2JqZWN0KToKKyAgICAgICAgKEphdmFK
U09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pu
aV9vYmpjLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6ZGlzcGF0Y2hKTklDYWxsKToKKyAg
ICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHA6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb0pWYWx1ZSk6CisgICAgICAgICogYnJpZGdlL2pu
aS9qc2MvSmF2YUNsYXNzSlNDLmNwcDoKKyAgICAgICAgKEphdmFDbGFzczo6SmF2YUNsYXNzKToK
KyAgICAgICAgKEphdmFDbGFzczo6fkphdmFDbGFzcyk6CisgICAgICAgICogYnJpZGdlL2puaS9q
c2MvSmF2YUluc3RhbmNlSlNDLmNwcDoKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6c3RyaW5nVmFs
dWUpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3BwOgorICAgICAg
ICAoYXBwZW5kQ2xhc3NOYW1lKToKKyAgICAgICAgKEphdmFNZXRob2Q6OnNpZ25hdHVyZSk6Cisg
ICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YVN0cmluZ0pTQy5oOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6SmF2YVN0cmluZzo6SmF2YVN0cmluZyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpKYXZhU3RyaW5nOjp+SmF2YVN0cmluZyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZh
U3RyaW5nOjp1dGY4KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFTdHJpbmc6OmluaXQp
OgorICAgICAgICAqIGJyaWRnZS9qc2MvQnJpZGdlSlNDLmNwcDoKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6Okluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKiBicmlkZ2Uvb2Jq
Yy9vYmpjX2luc3RhbmNlLm1tOgorICAgICAgICAoT2JqY0luc3RhbmNlOjptb3ZlR2xvYmFsRXhj
ZXB0aW9uVG9FeGVjU3RhdGUpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjppbnZva2VPYmpjTWV0
aG9kKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZCk6CisgICAg
ICAgIChPYmpjSW5zdGFuY2U6OnNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCk6CisgICAgICAgIChP
YmpjSW5zdGFuY2U6OmdldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCk6CisgICAgICAgICogYnJpZGdl
L29iamMvb2JqY19ydW50aW1lLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2JqY0ZpZWxk
Ojp2YWx1ZUZyb21JbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjRmllbGQ6
OnNldFZhbHVlVG9JbnN0YW5jZSk6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY191dGlsaXR5
Lm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9PYmpjVmFsdWUpOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE5TU3RyaW5nVG9TdHJpbmcpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE9iamNWYWx1ZVRvVmFsdWUpOgorICAgICAgICAqIGJy
aWRnZS9xdC9xdF9pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdEluc3Rh
bmNlOjp+UXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpn
ZXRRdEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6Om5ld1J1
bnRpbWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwSW5zdGFuY2U6OmNyZWF0ZVBpeG1hcFJ1
bnRpbWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9ydW50aW1lLmNwcDoKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQpOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6Y29udmVydFFWYXJpYW50VG9WYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjYWxsKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNhbGwpOgorICAgICAgICAqIGJyaWRnZS9xdC9x
dF9ydW50aW1lX3F0NC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVU
b1FWYXJpYW50KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRRVmFyaWFudFRvVmFs
dWUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0YU1ldGhvZDo6Y2FsbCk6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpjYWxs
KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogaHRt
bC9IVE1MSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlTG9hZGVy
Ojpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGVyZm9ybVJl
cXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6bnBPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKToKKyAg
ICAgICAgKiBwbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpnZXRXaW5kb3dJbmZvKToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6Cisg
ICAgICAgICogcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpoYW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5Q
V2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1T
dGFydCk6CisgICAgICAgICogcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKiBwbHVnaW5zL3F0
L1BsdWdpblZpZXdRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRj
aE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAg
ICAgICAgKiBwbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBX
aW5kb3dSZWN0KToKKyAgICAgICAgKiB0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHA6
CisgICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KToKKyAgICAg
ICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJl
cXVlc3Q6OmRyb3BQcm90ZWN0aW9uKToKKwogMjAxMi0wNi0yMSAgVGFpanUgVHN1aWtpICA8dHpp
a0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogVW5pZnkgRmlsZVN5c3Rl
bSBjYWxsYmFja3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
R0NDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lkIGNvbGxlY3Qodm9pZCopCiB7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKS0+aGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwogfQogCkBAIC02Myw3ICs2
Myw3IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdFNvb24oKQogICAgIC8vIGRv
d24gaW50byBXVEYgc28gdGhhdCBtb3JlIHBsYXRmb3JtcyBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2Yg
aXQsIHdlIHdpbGwgYmUgCiAgICAgLy8gYWJsZSB0byB1c2UgcmVwb3J0QWJhbmRvbmVkT2JqZWN0
R3JhcGggb24gbW9yZSBwbGF0Zm9ybXMuCiAjaWYgVVNFKENGKQotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCktPmhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKTsKICNlbHNlCiAgICAgaWYg
KCFtX0dDVGltZXIuaXNBY3RpdmUoKSkKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBHQ0NvbnRyb2xs
ZXI6OmdjVGltZXJGaXJlZChUaW1lcjxHQwogCiB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNv
bGxlY3ROb3coKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICBpZiAoIUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5pc0J1c3ko
KSkKICAgICAgICAgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNvbGxl
Y3RBbGxHYXJiYWdlKCk7CiB9CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6
OnNldEphdmFTY3JpcHRHYXJiYWdlQwogCiB2b2lkIEdDQ29udHJvbGxlcjo6ZGlzY2FyZEFsbENv
bXBpbGVkQ29kZSgpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwogICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5kZWxldGVBbGxD
b21waWxlZENvZGUoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
dXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3Bw
CShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIGJvb2wgSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGUKIAogICAgIFJl
ZlB0cjxKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKLSAgICBK
U0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAg
RXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwog
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFjay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBKU0N1c3RvbVZvaWRDYWxs
YmFjazo6aGFuZGxlRXZlbnQoKQogCiAgICAgUmVmUHRyPEpTQ3VzdG9tVm9pZENhbGxiYWNrPiBw
cm90ZWN0KHRoaXMpOwogICAgICAgICAKLSAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAg
ICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHJl
dmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBh
dGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBTdHJpbmcg
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hCiB7CiAgICAgQVNTRVJUKG1fY3VzdG9t
UmVzb2x2ZXIpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JI
YW5kbGVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFcnJvckhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZv
aWQgSlNFcnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEUKIAogICAgIEVycm9yRXZlbnQq
IGVycm9yRXZlbnQgPSBzdGF0aWNfY2FzdDxFcnJvckV2ZW50Kj4oZXZlbnQpOwogCi0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5nbG9iYWxEYXRhKCkpOwogCiAgICAgSlNPYmplY3QqIGpz
RnVuY3Rpb24gPSB0aGlzLT5qc0Z1bmN0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAg
IGlmICghanNGdW5jdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBA
QCBKU1ZhbHVlIEpTRXZlbnQ6OmNsaXBib2FyZERhdGEoRXhlY1N0YXRlCiAKIEpTVmFsdWUgdG9K
UyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV2ZW50
KiBldmVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgaWYgKCFldmVudCkKICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExp
c3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3
IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHQKICAgICBpZiAoIXNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQgfHwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNKU0V4ZWN1
dGlvbkZvcmJpZGRlbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmdsb2JhbERhdGEoKSk7CiAKICAgICBKU09iamVjdCoganNGdW5jdGlvbiA9IHRo
aXMtPmpzRnVuY3Rpb24oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgaWYgKCFqc0Z1bmN0
aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhv
c3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIE5vZGUqIEluamVjdGVkU2NyaXB0SG9zdDo6c2Ny
aXB0VmFsdWVBc04KIAogU2NyaXB0VmFsdWUgSW5qZWN0ZWRTY3JpcHRIb3N0Ojpub2RlQXNTY3Jp
cHRWYWx1ZShTY3JpcHRTdGF0ZSogc3RhdGUsIE5vZGUqIG5vZGUpCiB7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzdGF0ZSk7
CiAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHN0YXRlLT5nbG9iYWxEYXRhKCksIHRvSlMoc3RhdGUs
IGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoc3RhdGUpLCBub2RlKSk7CiB9CiAK
QEAgLTk1LDcgKzk1LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdGVk
TwogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgU2NyaXB0VmFsdWUgc2NyaXB0VmFsdWUgPSBvYmplY3QtPmdldChleGVj
KTsKICAgICBpZiAoc2NyaXB0VmFsdWUuaGFzTm9WYWx1ZSgpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcmlwdE9i
amVjdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUluamVjdGVkU2NyaXB0KGNvbnN0IFN0
cmluZyYgc291cmNlLCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGludCBpZCkKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHNjcmlwdFN0YXRlKTsKIAogICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IG1ha2VTb3VyY2Uo
c3RyaW5nVG9VU3RyaW5nKHNvdXJjZSkpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKTsKQEAgLTgxLDcgKzgxLDcgQEAgU2NyaXB0T2JqZWN0IEluamVjdGVkU2Ny
aXB0TWFuYWdlcjo6Y3JlYQogCiBib29sIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y2FuQWNjZXNz
SW5zcGVjdGVkV2luZG93KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKIHsKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlw
dFN0YXRlKTsKICAgICBKU0RPTVdpbmRvdyogaW5zcGVjdGVkV2luZG93ID0gdG9KU0RPTVdpbmRv
dyhzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBpZiAoIWluc3BlY3Rl
ZFdpbmRvdykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDEyMDky
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50
TGlzdGVuZXI6OmluaXRpYWxpegogICAgIGlmIChtX29yaWdpbmFsTm9kZSkgewogICAgICAgICBp
ZiAoIXdyYXBwZXIoKSkgewogICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgJ25vZGUnIGhhcyBh
IEphdmFTY3JpcHQgd3JhcHBlciB0byBtYXJrIHRoZSBldmVudCBsaXN0ZW5lciB3ZSdyZSBjcmVh
dGluZy4KLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgcGFzcyB0aGUgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUK
ICAgICAgICAgICAgIHNldFdyYXBwZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc09iamVjdCh0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgbV9vcmlnaW5hbE5vZGUpKSk7CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0
ZS5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01h
aW5UaHJlYWRFeGVjU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNDOjpTY29wZUNoYWluTm9kZSogY2hhaW4sIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291
cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbikKICAg
ICB7CiAgICAgICAgIEpTTWFpblRocmVhZEV4ZWNTdGF0ZSBjdXJyZW50U3RhdGUoZXhlYyk7Cisg
ICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHJldHVybiBKU0M6
OmV2YWx1YXRlKGV4ZWMsIGNoYWluLCBzb3VyY2UsIHRoaXNWYWx1ZSwgZXhjZXB0aW9uKTsKICAg
ICB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJh
Y2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkpTTXV0YXRpb25DYWxsYmFjay5o
IgogCisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiSlNNdXRhdGlvblJl
Y29yZC5oIgogI2luY2x1ZGUgIkpTV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTUwLDcgKzUxLDcgQEAgYm9vbCBKU011dGF0
aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KE11dAogCiAgICAgUmVmUHRyPEpTTXV0YXRpb25DYWxs
YmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBKU05vZGVGaWx0ZXJDb25kaXRpb246OkpTTm9k
ZUZpbHRlckNvbmRpCiAKIHNob3J0IEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgTm9kZSogZmlsdGVyTm9kZSkgY29uc3QKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogCiAgICAgaWYgKCFtX2ZpbHRlcikKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJ
TFRFUl9BQ0NFUFQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlcXVlc3RB
bmltYXRpb25GcmFtZUNhbGxiYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrQ3VzdG9tLmNw
cAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXF1
ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAgYm9vbCBKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrOjpoYQogCiAg
ICAgUmVmUHRyPEpTUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+IHByb3RlY3QodGhpcyk7
CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAKICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVyKHRpbWUp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRD
YWxsRnJhbWUuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKIAogI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaD4KICNp
bmNsdWRlIDxydW50aW1lL0NvbXBsZXRpb24uaD4KQEAgLTEwNiw3ICsxMDcsNyBAQCBKU1ZhbHVl
IEphdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKGNvCiAgICAgaWYgKCFtX2lzVmFsaWQpCiAg
ICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25K
U0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUuZXZhbHVhdGUo
c2NyaXB0LCBleGNlcHRpb24pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1Nl
cnZlcjo6cmVtb3ZlTGlzdGVuCiAKIHZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBp
bGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4qKQogewotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAvLyBJZiBKYXZhU2NyaXB0IHN0
YWNrIGlzIG5vdCBlbXB0eSBwb3N0cG9uZSByZWNvbXBpbGF0aW9uLgogICAgIGlmIChKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmR5bmFtaWNHbG9iYWxPYmplY3QpCiAgICAgICAg
IHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKFNjcmlw
dEV4ZWMKIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlRnVuY3Rpb25JbkNvbnRleHQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1fZnVuY3Rpb24pOwotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
Y29udGV4dC0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobV9mdW5jdGlvbi5nZXQoKSwgY2FsbERhdGEp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNo
ZWRGcmFtZURhdGEuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3
ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpT
Y3JpcHRDYWNoZWRGcmFtZURhdGEoRnJhbWUqIGZyYW1lKQogewotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBTY3JpcHRDb250cm9sbGVyKiBzY3Jp
cHRDb250cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOwogICAgIFNjcmlwdENvbnRyb2xsZXI6OlNo
ZWxsTWFwJiB3aW5kb3dTaGVsbHMgPSBzY3JpcHRDb250cm9sbGVyLT5tX3dpbmRvd1NoZWxsczsK
QEAgLTY3LDcgKzY3LDcgQEAgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjp+U2NyaXB0Q2FjaGVkRnJh
bQogCiB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZShGcmFtZSogZnJhbWUpCiB7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIFNj
cmlwdENvbnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXIgPSBmcmFtZS0+c2NyaXB0KCk7CiAgICAg
U2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXAmIHdpbmRvd1NoZWxscyA9IHNjcmlwdENvbnRyb2xs
ZXItPm1fd2luZG93U2hlbGxzOwpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIFNjcmlwdENhY2hlZEZy
YW1lRGF0YTo6Y2xlYXIoKQogICAgIGlmIChtX3dpbmRvd3MuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgIG1fd2luZG93cy5jbGVhcigpOwogICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0
U29vbigpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMz
LDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbgogICAgIGNvbnN0
IFN0cmluZyogc2F2ZWRTb3VyY2VVUkwgPSBtX3NvdXJjZVVSTDsKICAgICBtX3NvdXJjZVVSTCA9
ICZzb3VyY2VVUkw7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0
ID0gbV9mcmFtZTsKIApAQCAtMTc3LDcgKzE3Nyw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6
Y2xlYXJXaW5kb3dTaGVsbCgKICAgICBpZiAobV93aW5kb3dTaGVsbHMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwogCiAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxz
LmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAg
ICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnNlY29uZC5nZXQoKTsKQEAg
LTIwOSw3ICsyMDksNyBAQCBKU0RPTVdpbmRvd1NoZWxsKiBTY3JpcHRDb250cm9sbGVyOjppbml0
CiB7CiAgICAgQVNTRVJUKCFtX3dpbmRvd1NoZWxscy5jb250YWlucyh3b3JsZCkpOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayh3b3JsZC0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1No
ZWxsID0gY3JlYXRlV2luZG93U2hlbGwod29ybGQpOwogCkBAIC0yODQsOSArMjg0LDEwIEBAIHZv
aWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQoKQogICAgIGlmICghbV9mcmFtZS0+
ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKLSAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5k
b3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKQor
ICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigp
OyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2soaXRlci0+Zmlyc3QtPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIGl0ZXItPnNl
Y29uZC0+d2luZG93KCktPnVwZGF0ZURvY3VtZW50KCk7CisgICAgfQogfQogCiB2b2lkIFNjcmlw
dENvbnRyb2xsZXI6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCkKQEAgLTMwMCw3ICszMDEsNyBAQCBC
aW5kaW5nczo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6CiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgaWYgKCFtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KSB7Ci0gICAgICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBtX2Nh
Y2hlYWJsZUJpbmRpbmdSb290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgw
LCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9jYWNo
ZWFibGVCaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKQEAgLTMxMiw3ICszMTMsNyBAQCBCaW5kaW5n
czo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6CiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgaWYgKCFtX2JpbmRpbmdSb290T2JqZWN0KSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBtX2JpbmRpbmdSb290T2JqZWN0
ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3QocGx1Z2luV29y
bGQoKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9iaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKQEAg
LTM0OSw5ICszNTAsOSBAQCBOUE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0
CiAgICAgICAgIGlmIChjYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkp
IHsKICAgICAgICAgICAgIC8vIEphdmFTY3JpcHQgaXMgZW5hYmxlZCwgc28gdGhlcmUgaXMgYSBK
YXZhU2NyaXB0IHdpbmRvdyBvYmplY3QuCiAgICAgICAgICAgICAvLyBSZXR1cm4gYW4gTlBPYmpl
Y3QgYm91bmQgdG8gdGhlIHdpbmRvdyBvYmplY3QuCi0gICAgICAgICAgICBKU0M6OkpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgICAgICAgICBKU09iamVjdCogd2luID0g
d2luZG93U2hlbGwocGx1Z2luV29ybGQoKSktPndpbmRvdygpOworICAgICAgICAgICAgSlNET01X
aW5kb3cqIHdpbiA9IHdpbmRvd1NoZWxsKHBsdWdpbldvcmxkKCkpLT53aW5kb3coKTsKICAgICAg
ICAgICAgIEFTU0VSVCh3aW4pOworICAgICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh3
aW4tPmdsb2JhbEV4ZWMoKSk7CiAgICAgICAgICAgICBCaW5kaW5nczo6Um9vdE9iamVjdCogcm9v
dCA9IGJpbmRpbmdSb290T2JqZWN0KCk7CiAgICAgICAgICAgICBtX3dpbmRvd1NjcmlwdE5QT2Jq
ZWN0ID0gX05QTl9DcmVhdGVTY3JpcHRPYmplY3QoMCwgd2luLCByb290KTsKICAgICAgICAgfSBl
bHNlIHsKQEAgLTM4Myw4ICszODQsOCBAQCBKU09iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6anNP
YmplY3RGb3JQCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ3JlYXRlIGEgSlNPYmplY3Qg
Ym91bmQgdG8gdGhpcyBlbGVtZW50Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqID0gZ2xvYmFsT2JqZWN0KHBsdWdpbldv
cmxkKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iai0+Z2xvYmFsRXhlYygpKTsK
ICAgICAvLyBGSVhNRTogaXMgbm9ybWFsIG9rYXk/IC0gdXNlZCBmb3IgTlAgcGx1Z2lucz8KICAg
ICBKU1ZhbHVlIGpzRWxlbWVudFZhbHVlID0gdG9KUyhnbG9iYWxPYmotPmdsb2JhbEV4ZWMoKSwg
Z2xvYmFsT2JqLCBwbHVnaW4pOwogICAgIGlmICghanNFbGVtZW50VmFsdWUgfHwgIWpzRWxlbWVu
dFZhbHVlLmlzT2JqZWN0KCkpCkBAIC00MTgsNyArNDE5LDcgQEAgdm9pZCBTY3JpcHRDb250cm9s
bGVyOjpjbGVhbnVwU2NyaXB0T2JqZQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2Ny
aXB0T2JqZWN0cygpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKIAogICAgIFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcm9vdE9i
amVjdHMuZW5kKCk7CiAgICAgZm9yIChSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcm9vdE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgV2ViU2NyaXB0T2JqZWN0
KiBTY3JpcHRDb250cm9sbGVyOjp3aW5kbwogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICgh
bV93aW5kb3dTY3JpcHRPYmplY3QpIHsKLSAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIEpTQzo6QmluZGlu
Z3M6OlJvb3RPYmplY3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgpOwogICAgICAgICBtX3dp
bmRvd1NjcmlwdE9iamVjdCA9IFtXZWJTY3JpcHRPYmplY3Qgc2NyaXB0T2JqZWN0Rm9ySlNPYmpl
Y3Q6dG9SZWYod2luZG93U2hlbGwocGx1Z2luV29ybGQoKSkpIG9yaWdpblJvb3RPYmplY3Q6cm9v
dCByb290T2JqZWN0OnJvb3RdOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNo
RGlkUGF1c2UKICAgICB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUtPmlzVmFsaWQo
KSAmJiBnbG9iYWxPYmplY3QtPmluaGVyaXRzKCZKU0RPTUdsb2JhbE9iamVjdDo6c19pbmZvKSkg
ewogICAgICAgICAgICAgSlNET01HbG9iYWxPYmplY3QqIGRvbUdsb2JhbE9iamVjdCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soc3RhdGUpOwogICAgICAgICAgICAganNDYWxsRnJhbWUgPSB0b0pTKHN0YXRlLCBkb21HbG9i
YWxPYmplY3QsIG1fY3VycmVudENhbGxGcmFtZS5nZXQoKSk7CiAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAganNDYWxsRnJhbWUgPSBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVu
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIFN0cmluZyBldmVudExpc3Rl
bmVySGFuZGxlckJvZHkoRG9jdW1lbnQKICAgICBBU1NFUlQoanNMaXN0ZW5lcik7CiAgICAgaWYg
KCFqc0xpc3RlbmVyKQogICAgICAgICByZXR1cm4gIiI7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhqc0xpc3RlbmVyLT5pc29s
YXRlZFdvcmxkKCktPmdsb2JhbERhdGEoKSk7CiAgICAgSlNDOjpKU09iamVjdCoganNGdW5jdGlv
biA9IGpzTGlzdGVuZXItPmpzRnVuY3Rpb24oZG9jdW1lbnQpOwogICAgIGlmICghanNGdW5jdGlv
bikKICAgICAgICAgcmV0dXJuICIiOwpAQCAtMTEyLDcgKzExMiw3IEBAIGJvb2wgZXZlbnRMaXN0
ZW5lckhhbmRsZXJMb2NhdGlvbihEb2N1bWUKICAgICBBU1NFUlQoanNMaXN0ZW5lcik7CiAgICAg
aWYgKCFqc0xpc3RlbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhqc0xpc3RlbmVy
LT5pc29sYXRlZFdvcmxkKCktPmdsb2JhbERhdGEoKSk7CiAgICAgSlNDOjpKU09iamVjdCoganNP
YmplY3QgPSBqc0xpc3RlbmVyLT5qc0Z1bmN0aW9uKGRvY3VtZW50KTsKICAgICBpZiAoIWpzT2Jq
ZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDE5ICs1OCwxOSBAQCB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRs
ZXI6OmFwcGVuZEFyCiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJn
dW1lbnQoY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAgICAgbV9h
cmd1bWVudHMuYXBwZW5kKGpzU3RyaW5nKG1fZXhlYywgYXJndW1lbnQpKTsKIH0KIAogdm9pZCBT
Y3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBKU0M6OlVTdHJp
bmcmIGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQo
anNTdHJpbmcobV9leGVjLCBhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVu
dEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IGNoYXIqIGFyZ3VtZW50KQogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
bV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNTdHJpbmcobV9leGVjLCBVU3RyaW5n
KGFyZ3VtZW50KSkpOwogfQogCkBAIC04MSwzMSArODEsMzEgQEAgdm9pZCBTY3JpcHRDYWxsQXJn
dW1lbnRIYW5kbGVyOjphcHBlbmRBcgogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6
OmFwcGVuZEFyZ3VtZW50KGxvbmcgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1f
YXJndW1lbnRzLmFwcGVuZChqc051bWJlcihhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlwdENh
bGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGxvbmcgbG9uZyBhcmd1bWVudCkKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKG1fZXhlYyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGFyZ3VtZW50
KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQo
dW5zaWduZWQgaW50IGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50
cy5hcHBlbmQoanNOdW1iZXIoYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxsQXJndW1l
bnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBsb25nIGFyZ3VtZW50KQogewotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIoYXJndW1lbnQpKTsK
IH0KIAogdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChpbnQg
YXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051
bWJlcihhcmd1bWVudCkpOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAgU2NyaXB0VmFsdWUgU2Ny
aXB0RnVuY3Rpb25DYWxsOjpjYWxsKGJvbwogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0g
bV90aGlzT2JqZWN0LmpzT2JqZWN0KCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAKICAgICBKU1ZhbHVl
IGZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcihtX2V4ZWMsIHN0
cmluZ1RvVVN0cmluZyhtX25hbWUpKSk7CiAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkp
IHsKQEAgLTE2Myw3ICsxNjMsNyBAQCBTY3JpcHRPYmplY3QgU2NyaXB0RnVuY3Rpb25DYWxsOjpj
b25zdHJ1CiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBtX3RoaXNPYmplY3QuanNPYmpl
Y3QoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sobV9leGVjKTsKIAogICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9IGFz
T2JqZWN0KHRoaXNPYmplY3QtPmdldChtX2V4ZWMsIElkZW50aWZpZXIobV9leGVjLCBzdHJpbmdU
b1VTdHJpbmcobV9uYW1lKSkpKTsKICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgewpA
QCAtMjA1LDcgKzIwNSw3IEBAIFNjcmlwdFZhbHVlIFNjcmlwdENhbGxiYWNrOjpjYWxsKCkKIAog
U2NyaXB0VmFsdWUgU2NyaXB0Q2FsbGJhY2s6OmNhbGwoYm9vbCYgaGFkRXhjZXB0aW9uKQogewot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2sobV9leGVjKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gZ2V0Q2FsbERhdGEobV9mdW5jdGlvbi5qc1ZhbHVlKCksIGNhbGxEYXRhKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVFeGNl
cHRpb24oU2NyaXB0U3RhdGUqCiAKIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0
U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTY3JpcHRPYmplY3Qm
IHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogICAgIHNjcmlwdFN0YXRlLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCBJZGVu
dGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwgdmFsdWUuanNPYmplY3QoKSk7CiAgICAgcmV0dXJu
IGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7CiB9CkBAIC03NSw3ICs3NSw3IEBAIGJvb2wg
U2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUs
IGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckZyb250ZW5kSG9zdCogdmFsdWUpCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOwogICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT5nbG9iYWxEYXRh
KCksIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNjcmlwdFN0YXRlLCBnbG9i
YWxPYmplY3QsIHZhbHVlKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0
ZSk7CkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0
U3RhdGUKIAogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluamVjdGVkU2NyaXB0SG9zdCogdmFsdWUpCiB7Ci0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpOwogICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT5nbG9iYWxE
YXRhKCksIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNjcmlwdFN0YXRlLCBn
bG9iYWxPYmplY3QsIHZhbHVlKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRT
dGF0ZSk7CkBAIC05Miw3ICs5Miw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2Ny
aXB0U3RhdGUKIAogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChTY3JpcHRTdGF0ZSogc2Ny
aXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIFNjcmlwdE9iamVjdCYgdmFsdWUpCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gc2NyaXB0U3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+Z2V0KHNjcmlwdFN0YXRlLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRl
LCBuYW1lKSk7CiAgICAgaWYgKCFqc1ZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MDYsNyArMTA2LDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChTY3JpcHRTdGF0ZQog
CiBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6cmVtb3ZlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0
ZSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBzY3JpcHRT
dGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eShzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzY3JpcHRTdGF0ZSwgSWRlbnRp
ZmllcihzY3JpcHRTdGF0ZSwgbmFtZSkpOwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2Ny
aXB0U3RhdGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZh
bHVlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIGJvb2wgU2Ny
aXB0VmFsdWU6OmdldFN0cmluZyhTY3JpcHRTdGF0ZSoKIHsKICAgICBpZiAoIW1fdmFsdWUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBVU3RyaW5nIHVz
dHJpbmc7CiAgICAgaWYgKCFtX3ZhbHVlLmdldCgpLmdldFN0cmluZyhzY3JpcHRTdGF0ZSwgdXN0
cmluZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3NSw2ICsxNzUsNyBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4ganNUb0luCiAKIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IFNjcmlwdFZhbHVlOjp0b0luc3BlY3RvclZhbHVlKFNjcmlwdFN0YXRlKiBzY3JpcHRT
dGF0ZSkgY29uc3QKIHsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBob2xkZXIoc2NyaXB0U3RhdGUp
OwogICAgIHJldHVybiBqc1RvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3RhdGUsIG1fdmFsdWUuZ2V0
KCksIEluc3BlY3RvclZhbHVlOjptYXhEZXB0aCk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtl
clNjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQsNyArNjQsNyBAQCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpXb3JrZXJTY3JpcHRDb250
CiAKIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6On5Xb3JrZXJTY3JpcHRDb250cm9sbGVyKCkKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGdsb2JhbERhdGEoKSk7CiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci5jbGVhcigp
OwogICAgIG1fZ2xvYmFsRGF0YS5jbGVhcigpOwogfQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIFdv
cmtlclNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQoCiB7CiAgICAgQVNTRVJUKCFtX3dvcmtl
ckNvbnRleHRXcmFwcGVyKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9nbG9iYWxEYXRhLmdldCgpKTsKIAogICAgIC8v
IEV4cGxpY2l0bHkgcHJvdGVjdCB0aGUgZ2xvYmFsIG9iamVjdCdzIHByb3RvdHlwZSBzbyBpdCBp
c24ndCBjb2xsZWN0ZWQKICAgICAvLyB3aGVuIHdlIGFsbG9jYXRlIHRoZSBnbG9iYWwgb2JqZWN0
LiAoT25jZSB0aGUgZ2xvYmFsIG9iamVjdCBpcyBmdWxseQpAQCAtMTE3LDcgKzExNyw3IEBAIHZv
aWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICBTY3JpcHRWYWx1ZSBl
eGNlcHRpb247CiAgICAgZXZhbHVhdGUoc291cmNlQ29kZSwgJmV4Y2VwdGlvbik7CiAgICAgaWYg
KGV4Y2VwdGlvbi5qc1ZhbHVlKCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSgpKTsKICAg
ICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMo
KSwgZXhjZXB0aW9uLmpzVmFsdWUoKSk7CiAgICAgfQogfQpAQCAtMTI4LDkgKzEyOCw5IEBAIHZv
aWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICAgICAgcmV0dXJuOwog
CiAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fd29ya2VyQ29udGV4dFdyYXBw
ZXItPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIG1f
d29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgp
OwogCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppc0V4
ZWN1dGlvbgogdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpkaXNhYmxlRXZhbCgpCiB7CiAg
ICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhKCkpOwogCiAgICAgbV93
b3JrZXJDb250ZXh0V3JhcHBlci0+c2V0RXZhbEVuYWJsZWQoZmFsc2UpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2Jq
ZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsMTMgKzEyMiwxMiBAQCArIChpZClzY3JpcHRP
YmplY3RGb3JKU09iamVjdDooSlNPYmplY3RSCiAKIHN0YXRpYyB2b2lkIF9kaWRFeGVjdXRlKFdl
YlNjcmlwdE9iamVjdCAqb2JqKQogewotICAgIEFTU0VSVChKU0xvY2s6OmxvY2tDb3VudCgpID4g
MCk7Ci0gICAgCiAgICAgUm9vdE9iamVjdCogcm9vdCA9IFtvYmogX3Jvb3RPYmplY3RdOwogICAg
IGlmICghcm9vdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9v
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBBU1NFUlQoZXhlYy0+Z2xvYmFs
RGF0YSgpLmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKICAgICBLSlNE
aWRFeGVjdXRlRnVuY3Rpb25QdHIgZnVuYyA9IEluc3RhbmNlOjpkaWRFeGVjdXRlRnVuY3Rpb24o
KTsKICAgICBpZiAoZnVuYykKICAgICAgICAgZnVuYyhleGVjLCByb290LT5nbG9iYWxPYmplY3Qo
KSk7CkBAIC0xNDgsMTkgKzE0NywyNSBAQCAtICh2b2lkKV9zZXRJbXA6KEpTT2JqZWN0KilpbXAg
b3JpZ2luUm9vCiAKICAgICBXZWJDb3JlOjphZGRKU1dyYXBwZXIoc2VsZiwgaW1wKTsKIAotICAg
IGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCkKKyAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3Qp
IHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGhvbGRlcigmX3ByaXZhdGUtPnJvb3RPYmplY3QtPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICBfcHJpdmF0ZS0+cm9vdE9iamVj
dC0+Z2NQcm90ZWN0KGltcCk7CisgICAgfQogfQogCiAtICh2b2lkKV9zZXRPcmlnaW5Sb290T2Jq
ZWN0OihQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KW9yaWdpblJvb3RPYmplY3QgYW5kUm9vdE9iamVj
dDooUGFzc1JlZlB0cjxSb290T2JqZWN0Pilyb290T2JqZWN0CiB7CiAgICAgQVNTRVJUKF9wcml2
YXRlLT5pbXApOwogCi0gICAgaWYgKHJvb3RPYmplY3QpCisgICAgaWYgKHJvb3RPYmplY3QpIHsK
KyAgICAgICAgSlNMb2NrSG9sZGVyIGhvbGRlcigmcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbERhdGEoKSk7CiAgICAgICAgIHJvb3RPYmplY3QtPmdjUHJvdGVjdChfcHJpdmF0ZS0+
aW1wKTsKKyAgICB9CiAKLSAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUt
PnJvb3RPYmplY3QtPmlzVmFsaWQoKSkKKyAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYg
X3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFsaWQoKSkgeworICAgICAgICBKU0xvY2tIb2xkZXIg
aG9sZGVyKCZfcHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEo
KSk7CiAgICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5nY1VucHJvdGVjdChfcHJpdmF0ZS0+
aW1wKTsKKyAgICB9CiAKICAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QpCiAgICAgICAgIF9w
cml2YXRlLT5yb290T2JqZWN0LT5kZXJlZigpOwpAQCAtMjMyLDggKzIzNywxMCBAQCAtICh2b2lk
KWRlYWxsb2MKICAgICBpZiAoX3ByaXZhdGUtPmltcCkKICAgICAgICAgV2ViQ29yZTo6cmVtb3Zl
SlNXcmFwcGVyKF9wcml2YXRlLT5pbXApOwogCi0gICAgaWYgKF9wcml2YXRlLT5yb290T2JqZWN0
ICYmIF9wcml2YXRlLT5yb290T2JqZWN0LT5pc1ZhbGlkKCkpCisgICAgaWYgKF9wcml2YXRlLT5y
b290T2JqZWN0ICYmIF9wcml2YXRlLT5yb290T2JqZWN0LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
SlNMb2NrSG9sZGVyIGhvbGRlcigmX3ByaXZhdGUtPnJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxEYXRhKCkpOwogICAgICAgICBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2NVbnByb3Rl
Y3QoX3ByaXZhdGUtPmltcCk7CisgICAgfQogCiAgICAgaWYgKF9wcml2YXRlLT5yb290T2JqZWN0
KQogICAgICAgICBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+ZGVyZWYoKTsKQEAgLTI0OCw4ICsyNTUs
MTAgQEAgLSAodm9pZClkZWFsbG9jCiAKIC0gKHZvaWQpZmluYWxpemUKIHsKLSAgICBpZiAoX3By
aXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFsaWQoKSkKKyAg
ICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFs
aWQoKSkgeworICAgICAgICBKU0xvY2tIb2xkZXIgaG9sZGVyKCZfcHJpdmF0ZS0+cm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIF9wcml2YXRlLT5yb290
T2JqZWN0LT5nY1VucHJvdGVjdChfcHJpdmF0ZS0+aW1wKTsKKyAgICB9CiAKICAgICBpZiAoX3By
aXZhdGUtPnJvb3RPYmplY3QpCiAgICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5kZXJlZigp
OwpAQCAtMjgxLDEwICsyOTAsOSBAQCAtIChpZCljYWxsV2ViU2NyaXB0TWV0aG9kOihOU1N0cmlu
ZyAqKW5hCiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKICAgICAgICAgcmV0dXJuIG5p
bDsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgCiAgICAg
Ly8gTG9vayB1cCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtz
ZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsK
IAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZp
ZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhuYW1lKSkpKTsKQEAgLTMyNSw3ICszMzMs
NyBAQCAtIChpZClldmFsdWF0ZVdlYlNjcmlwdDooTlNTdHJpbmcgKilzY3JpCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICAKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCkudGltZW91dENoZWNrZXIuc3RhcnQoKTsKICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNN
YWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBbc2VsZiBfcm9vdE9iamVjdF0tPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoU3RyaW5nKHNjcmlw
dCkpLCBKU0M6OkpTVmFsdWUoKSwgMCk7CkBAIC0zNDYsNyArMzU0LDcgQEAgLSAodm9pZClzZXRW
YWx1ZTooaWQpdmFsdWUgZm9yS2V5OihOU1N0cgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxm
IF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQo
IWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdDsKICAgICBbc2VsZiBfaW1wXS0+bWV0aG9kVGFibGUoKS0+cHV0KFtzZWxmIF9p
bXBdLCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkp
LCBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBb
c2VsZiBfcm9vdE9iamVjdF0pLCBzbG90KTsKQEAgLTM3Miw3ICszODAsNyBAQCAtIChpZCl2YWx1
ZUZvcktleTooTlNTdHJpbmcgKilrZXkKICAgICAgICAgLy8gTmVlZCB0byBzY29wZSB0aGlzIGxv
Y2sgdG8gZW5zdXJlIHRoYXQgd2UgcmVsZWFzZSB0aGUgbG9jayBiZWZvcmUgY2FsbGluZwogICAg
ICAgICAvLyBbc3VwZXIgdmFsdWVGb3JLZXk6a2V5XSB3aGljaCBtaWdodCB0aHJvdyBhbiBleGNl
cHRpb24gYW5kIGJ5cGFzcyB0aGUgSlNMb2NrIGRlc3RydWN0b3IsCiAgICAgICAgIC8vIGxlYXZp
bmcgdGhlIGxvY2sgcGVybWFuZW50bHkgaGVsZAotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAg
ICAgCiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBJZGVu
dGlmaWVyKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkpKTsKICAgICAgICAgCkBA
IC0zODgsNyArMzk2LDcgQEAgLSAoaWQpdmFsdWVGb3JLZXk6KE5TU3RyaW5nICopa2V5CiAgICAg
aWYgKFtyZXN1bHRPYmogaXNLaW5kT2ZDbGFzczpbV2ViVW5kZWZpbmVkIGNsYXNzXV0pCiAgICAg
ICAgIHJlc3VsdE9iaiA9IFtzdXBlciB2YWx1ZUZvcktleTprZXldOyAgICAvLyBkZWZhdWx0cyB0
byB0aHJvd2luZyBhbiBleGNlcHRpb24KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgX2RpZEV4ZWN1dGUo
c2VsZik7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdE9iajsKQEAgLTQwMiw3ICs0MTAsNyBAQCAt
ICh2b2lkKXJlbW92ZVdlYlNjcmlwdEtleTooTlNTdHJpbmcgKilrCiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwog
ICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBb
c2VsZiBfaW1wXS0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoW3NlbGYgX2ltcF0sIGV4
ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhrZXkpKSkpOwogCiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC00MjEsNyArNDI5LDcgQEAgLSAoQk9P
TCloYXNXZWJTY3JpcHRLZXk6KE5TU3RyaW5nICopa2V5CiAgICAgRXhlY1N0YXRlKiBleGVjID0g
W3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFT
U0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBCT09MIHJl
c3VsdCA9IFtzZWxmIF9pbXBdLT5oYXNQcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHN0
cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkpKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgewpAQCAtNDQxLDggKzQ0OSw4IEBAIC0gKE5TU3RyaW5nICopc3RyaW5nUmVwcmVzZW50
YXRpb24KICAgICAgICAgcmV0dXJuIEAiVW5kZWZpbmVkIjsKICAgICB9CiAKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxm
IF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICBpZCByZXN1bHQgPSBjb252ZXJ0VmFsdWVUb09i
amNWYWx1ZShleGVjLCBbc2VsZiBfaW1wXSwgT2JqY09iamVjdFR5cGUpLm9iamVjdFZhbHVlOwog
CkBAIC00NjEsNyArNDY5LDcgQEAgLSAoaWQpd2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ25l
ZClpbgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsK
IAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4
ZWMsIGluZGV4KTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewpAQCAtNDg1LDcg
KzQ5Myw3IEBAIC0gKHZvaWQpc2V0V2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ24KICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KFtzZWxmIF9p
bXBdLCBleGVjLCBpbmRleCwgY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJnZhbHVlLCBP
YmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RPYmplY3RdKSwgZmFsc2UpOwogCiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC01MTUsNyArNTIzLDcgQEAgKyAoaWQpX2NvbnZlcnRW
YWx1ZVRvT2JqY1ZhbHVlOihKU1ZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7
CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgICAg
IGlmIChvYmplY3QtPmluaGVyaXRzKCZKU0hUTUxFbGVtZW50OjpzX2luZm8pKSB7CiAgICAgICAg
ICAgICAvLyBQbHVnaW4gZWxlbWVudHMgY2FjaGUgdGhlIGluc3RhbmNlIGludGVybmFsbHkuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI3MzMsNyArMjczMyw3
IEBAIEVORAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFjYW5JbnZv
a2VDYWxsYmFjaygpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgcmV0dXJuIHRydWU7XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgUmVmUHRyPCRjbGFzc05hbWU+IHByb3RlY3QodGhpcyk7XG5cbiIpOwotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTtcblxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0xvY2tIb2xk
ZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpO1xuXG4iKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0
YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTtcbiIpOwogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJncztcbiIpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDYWxsYmFjay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY1LDcgKzY1LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoTm9Q
YXJhbQogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRl
KiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC04Miw3ICs4Miw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJh
Y2s6OmNhbGxiYWNrV2l0aENsYXNzMVAKIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJv
dGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgp
KTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTAwLDcgKzEwMCw3
IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlAKIAogICAgIFJlZlB0
cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmdzOwpAQCAtMTE5LDcgKzExOSw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0
aFN0cmluZ0wKIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTM3LDcgKzEzNyw3IEBAIGJvb2wgSlNUZXN0
Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aEJvb2xlYW4KIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFj
az4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTU3LDcg
KzE1Nyw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrUmVxdWlyZXNUaGkKIAogICAg
IFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1f
ZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciBhcmdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCShyZXZp
c2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzcsNyArMTc3LDcgQEAgYm9vbCBfTlBOX0ludm9rZURlZmF1bHQo
TlBQLCBOUE9iamVjdCogbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAg
ICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxs
IHRoZSBmdW5jdGlvbiBvYmplY3QuCiAgICAgICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmotPmlt
cDsKQEAgLTIyNSw3ICsyMjUsNyBAQCBib29sIF9OUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0
KiBvLCBOCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKICAgICAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iai0+aW1wLT5nZXQoZXhlYywgaWRl
bnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKICAgICAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
ZnVuY3Rpb24sIGNhbGxEYXRhKTsKQEAgLTI2NCw3ICsyNjQsNyBAQCBib29sIF9OUE5fRXZhbHVh
dGUoTlBQIGluc3RhbmNlLCBOUE9iamVjCiAgICAgICAgIFBsdWdpblZpZXc6OmtlZXBBbGl2ZShp
bnN0YW5jZSk7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIFN0
cmluZyBzY3JpcHRTdHJpbmcgPSBjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMpOwogICAgICAgICAK
ICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUocm9vdE9iamVjdC0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3JpcHRTdHJpbmcpLCBKU0M6OkpTVmFs
dWUoKSk7CkBAIC0yOTAsNyArMjkwLDcgQEAgYm9vbCBfTlBOX0dldFByb3BlcnR5KE5QUCwgTlBP
YmplY3QqIG8sIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGlj
X2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7CiAgICAgICAgIAotICAgICAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgICAgIGlmIChpLT5pc1N0
cmluZygpKQogICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlm
aWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwpAQCAtMzIyLDcgKzMyMiw3
IEBAIGJvb2wgX05QTl9TZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAg
ICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0
eU5hbWUpOwogCiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7CkBAIC0zNjMsNyArMzYzLDcg
QEAgYm9vbCBfTlBOX1JlbW92ZVByb3BlcnR5KE5QUCwgTlBPYmplY3QqIAogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIGlmIChpLT5pc1N0
cmluZygpKQogICAgICAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3Bl
cnR5KG9iai0+aW1wLCBleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5z
dHJpbmcoKSkpOwogICAgICAgICBlbHNlCkBAIC0zODYsNyArMzg2LDcgQEAgYm9vbCBfTlBOX0hh
c1Byb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIAogCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIElkZW50
aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsK
LSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7CiAgICAg
ICAgICAgICBib29sIHJlc3VsdCA9IG9iai0+aW1wLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlm
aWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKQEAgLTQxOCw3ICs0MTgsNyBAQCBib29sIF9OUE5fSGFzTWV0
aG9kKE5QUCwgTlBPYmplY3QqIG8sIE5QCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIEpTVmFsdWUgZnVuYyA9IG9i
ai0+aW1wLT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3Ry
aW5nKCkpKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJu
ICFmdW5jLmlzVW5kZWZpbmVkKCk7CkBAIC00NDcsNyArNDQ3LDcgQEAgYm9vbCBfTlBOX0VudW1l
cmF0ZShOUFAsIE5QT2JqZWN0KiBvLCBOUAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIFByb3BlcnR5
TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CiAKICAgICAgICAgb2JqLT5pbXAtPm1ldGhv
ZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMob2JqLT5pbXAsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwpAQCAtNDg0LDcgKzQ4NCw3IEBAIGJvb2wgX05Q
Tl9Db25zdHJ1Y3QoTlBQLCBOUE9iamVjdCogbywgY28KICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAK
ICAgICAgICAgLy8gQ2FsbCB0aGUgY29uc3RydWN0b3Igb2JqZWN0LgogICAgICAgICBKU1ZhbHVl
IGNvbnN0cnVjdG9yID0gb2JqLT5pbXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9j
X2NsYXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNz
LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19jbGFz
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJucHJ1bnRp
bWVfaW1wbC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvU2NvcGVDaGFpbi5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvSWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4K
ICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3Qu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC00Nyw3ICs0OCw3IEBAIEND
bGFzczo6Q0NsYXNzKE5QQ2xhc3MqIGFDbGFzcykKIAogQ0NsYXNzOjp+Q0NsYXNzKCkKIHsKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIC8vIEZJWE1FOiBTaG91
bGQgd2UgYWNxdWlyZSBhIEpTTG9jayBoZXJlPwogCiAgICAgZGVsZXRlQWxsVmFsdWVzKF9tZXRo
b2RzKTsKICAgICBfbWV0aG9kcy5jbGVhcigpOwpAQCAtOTEsNyArOTIsNyBAQCBNZXRob2RMaXN0
IENDbGFzczo6bWV0aG9kc05hbWVkKFByb3BlcnR5CiAgICAgaWYgKF9pc2EtPmhhc01ldGhvZCAm
JiBfaXNhLT5oYXNNZXRob2Qob2JqLCBpZGVudCkpewogICAgICAgICBNZXRob2QqIGFNZXRob2Qg
PSBuZXcgQ01ldGhvZChpZGVudCk7IC8vIGRlbGV0ZWQgaW4gdGhlIENDbGFzcyBkZXN0cnVjdG9y
CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhpbnN0LT5yb290T2JqZWN0KCktPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgX21ldGhvZHMuc2V0KG5h
bWUuaW1wbCgpLCBhTWV0aG9kKTsKICAgICAgICAgfQogICAgICAgICBtZXRob2RMaXN0LmFwcGVu
ZChhTWV0aG9kKTsKQEAgLTExNCw3ICsxMTUsNyBAQCBGaWVsZCogQ0NsYXNzOjpmaWVsZE5hbWVk
KFByb3BlcnR5TmFtZSBwCiAgICAgaWYgKF9pc2EtPmhhc1Byb3BlcnR5ICYmIF9pc2EtPmhhc1By
b3BlcnR5KG9iaiwgaWRlbnQpKXsKICAgICAgICAgYUZpZWxkID0gbmV3IENGaWVsZChpZGVudCk7
IC8vIGRlbGV0ZWQgaW4gdGhlIENDbGFzcyBkZXN0cnVjdG9yCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhpbnN0LT5yb290T2JqZWN0KCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxE
YXRhKCkpOwogICAgICAgICAgICAgX2ZpZWxkcy5zZXQobmFtZS5pbXBsKCksIGFGaWVsZCk7CiAg
ICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNw
cAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5j
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBDSW5zdGFuY2U6Om1v
dmVHbG9iYWxFeGNlcHRpb25Ub0V4ZQogICAgICAgICByZXR1cm47CiAKICAgICB7Ci0gICAgICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMs
IGdsb2JhbEV4Y2VwdGlvblN0cmluZygpKSk7CiAgICAgfQogCkBAIC0xODIsNyArMTgyLDcgQEAg
SlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdAogICAgIFZPSURfVE9fTlBW
QVJJQU5UKHJlc3VsdFZhcmlhbnQpOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICBBU1NFUlQoZ2xvYmFs
RXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAgICAgICByZXR2YWwgPSBfb2JqZWN0LT5f
Y2xhc3MtPmludm9rZShfb2JqZWN0LCBpZGVudCwgY0FyZ3MuZGF0YSgpLCBjb3VudCwgJnJlc3Vs
dFZhcmlhbnQpOwogICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7
CkBAIC0yMTcsNyArMjE3LDcgQEAgSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRo
b2QoRQogICAgIE5QVmFyaWFudCByZXN1bHRWYXJpYW50OwogICAgIFZPSURfVE9fTlBWQVJJQU5U
KHJlc3VsdFZhcmlhbnQpOwogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgQVNTRVJUKGdsb2JhbEV4Y2VwdGlv
blN0cmluZygpLmlzTnVsbCgpKTsKICAgICAgICAgcmV0dmFsID0gX29iamVjdC0+X2NsYXNzLT5p
bnZva2VEZWZhdWx0KF9vYmplY3QsIGNBcmdzLmRhdGEoKSwgY291bnQsICZyZXN1bHRWYXJpYW50
KTsKICAgICAgICAgbW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpAQCAtMjU2
LDcgKzI1Niw3IEBAIEpTVmFsdWUgQ0luc3RhbmNlOjppbnZva2VDb25zdHJ1Y3QoRXhlY1MKICAg
ICBOUFZhcmlhbnQgcmVzdWx0VmFyaWFudDsKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHRW
YXJpYW50KTsKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoZXhlYyk7CiAgICAgICAgIEFTU0VSVChnbG9iYWxFeGNlcHRpb25TdHJpbmco
KS5pc051bGwoKSk7CiAgICAgICAgIHJldHZhbCA9IF9vYmplY3QtPl9jbGFzcy0+Y29uc3RydWN0
KF9vYmplY3QsIGNBcmdzLmRhdGEoKSwgY291bnQsICZyZXN1bHRWYXJpYW50KTsKICAgICAgICAg
bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpAQCAtMzE1LDcgKzMxNSw3IEBA
IHZvaWQgQ0luc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGEKICAgICBOUElkZW50aWZp
ZXIqIGlkZW50aWZpZXJzOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0
aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAgICAgICBib29sIG9rID0gX29iamVjdC0+X2NsYXNz
LT5lbnVtZXJhdGUoX29iamVjdCwgJmlkZW50aWZpZXJzLCAmY291bnQpOwogICAgICAgICBtb3Zl
R2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvYy9jX3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9jL2NfcnVudGltZS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9jL2NfcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgSlNW
YWx1ZSBDRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdAogCiAgICAgICAgIGJvb2wgcmVz
dWx0OwogICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgICAgIHJlc3VsdCA9IG9iai0+X2Ns
YXNzLT5nZXRQcm9wZXJ0eShvYmosIF9maWVsZElkZW50aWZpZXIsICZwcm9wZXJ0eSk7CiAgICAg
ICAgICAgICBDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsK
ICAgICAgICAgfQpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIENGaWVsZDo6c2V0VmFsdWVUb0luc3Rh
bmNlKEV4ZWNTdGF0CiAgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIGFWYWx1
ZSwgJnZhcmlhbnQpOwogCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICAgICAgb2JqLT5f
Y2xhc3MtPnNldFByb3BlcnR5KG9iaiwgX2ZpZWxkSWRlbnRpZmllciwgJnZhcmlhbnQpOwogICAg
ICAgICAgICAgQ0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAkocmV2
aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbnZlcnRVVEY4
VG9VVEYxNldpdGhMYXRpCiAvLyBWYXJpYW50IHZhbHVlIG11c3QgYmUgcmVsZWFzZWQgd2l0aCBO
UFJlbGVhc2VWYXJpYW50VmFsdWUoKQogdm9pZCBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIE5QVmFyaWFudCogcmVzdWx0KQogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAKICAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0KTsKIApAQCAtMTA3LDcgKzEw
Nyw3IEBAIHZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRlKiAKIAogSlNWYWx1
ZSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE5QVmFyaWFu
dCogdmFyaWFudCwgUm9vdE9iamVjdCogcm9vdE9iamVjdCkKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IAogICAgIE5QVmFyaWFudFR5cGUgdHlwZSA9IHZhcmlhbnQtPnR5cGU7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCShyZXZpc2lvbiAxMjA5MjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjg0LDcgKzI4NCw3IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpjYWxsKGpzdHJpbmcg
bWV0aG8KICAgICAKICAgICAvLyBMb29rdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4KICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgCiAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKGV4ZWMsIEphdmFT
dHJpbmcobWV0aG9kTmFtZSkuaW1wbCgpKTsKICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gX2ltcC0+
Z2V0KGV4ZWMsIGlkZW50aWZpZXIpOwpAQCAtMzA3LDEyICszMDcsMTIgQEAgam9iamVjdCBKYXZh
SlNPYmplY3Q6OmV2YWwoanN0cmluZyBzY3JpcAogewogICAgIExPRyhMaXZlQ29ubmVjdCwgIkph
dmFKU09iamVjdDo6ZXZhbCBzY3JpcHQgPSAlcyIsIEphdmFTdHJpbmcoc2NyaXB0KS51dGY4KCkp
OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAKICAgICBS
b290T2JqZWN0KiByb290T2JqZWN0ID0gdGhpcy0+cm9vdE9iamVjdCgpOwogICAgIGlmICghcm9v
dE9iamVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhyb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAKICAgICByb290T2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxT
Y29wZUNoYWluKCksIG1ha2VTb3VyY2UoSmF2YVN0cmluZyhzY3JpcHQpLmltcGwoKSkpOwogICAg
IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIu
c3RvcCgpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpnZXRNZW1i
ZXIoanN0cmluZyAKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IF9pbXAtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVtYmVy
TmFtZSkuaW1wbCgpKSk7CiAKICAgICByZXR1cm4gY29udmVydFZhbHVlVG9KT2JqZWN0KHJlc3Vs
dCk7CkBAIC0zNDYsNyArMzQ2LDcgQEAgdm9pZCBKYXZhSlNPYmplY3Q6OnNldE1lbWJlcihqc3Ry
aW5nIG1lbQogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNs
b3Q7CiAgICAgX2ltcC0+bWV0aG9kVGFibGUoKS0+cHV0KF9pbXAsIGV4ZWMsIElkZW50aWZpZXIo
ZXhlYywgSmF2YVN0cmluZyhtZW1iZXJOYW1lKS5pbXBsKCkpLCBjb252ZXJ0Sk9iamVjdFRvVmFs
dWUoZXhlYywgdmFsdWUpLCBzbG90KTsKIH0KQEAgLTM2MSw3ICszNjEsNyBAQCB2b2lkIEphdmFK
U09iamVjdDo6cmVtb3ZlTWVtYmVyKGpzdHJpbmcgCiAgICAgICAgIHJldHVybjsKIAogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBfaW1wLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShf
aW1wLCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVtYmVyTmFtZSkuaW1wbCgp
KSk7CiB9CiAKQEAgLTM3Niw3ICszNzYsNyBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6Z2V0U2xv
dChqaW50IGluZGV4CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IF9pbXAtPmdldChleGVjLCBpbmRleCk7CiAKICAgICByZXR1cm4gY29udmVydFZhbHVlVG9K
T2JqZWN0KHJlc3VsdCk7CkBAIC0zOTIsNyArMzkyLDcgQEAgdm9pZCBKYXZhSlNPYmplY3Q6OnNl
dFNsb3QoamludCBpbmRleCwgagogICAgICAgICByZXR1cm47CiAKICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgX2ltcC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChfaW1wLCBleGVjLCAodW5z
aWduZWQpaW5kZXgsIGNvbnZlcnRKT2JqZWN0VG9WYWx1ZShleGVjLCB2YWx1ZSksIGZhbHNlKTsK
IH0KIApAQCAtNDA1LDkgKzQwNSw5IEBAIGpzdHJpbmcgSmF2YUpTT2JqZWN0Ojp0b1N0cmluZygp
IGNvbnN0CiAgICAgaWYgKCFyb290T2JqZWN0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNPYmplY3QgKnRoaXNPYmog
PSBjb25zdF9jYXN0PEpTT2JqZWN0Kj4oX2ltcCk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8anN0cmluZz4oY29udmVy
dFZhbHVlVG9KVmFsdWUoZXhlYywgcm9vdE9iamVjdCwgdGhpc09iaiwgSmF2YVR5cGVPYmplY3Qs
ICJqYXZhLmxhbmcuU3RyaW5nIikubCk7CiB9CkBAIC00NjMsMTMgKzQ2MywxMyBAQCBqbG9uZyBK
YXZhSlNPYmplY3Q6OmNyZWF0ZU5hdGl2ZShqbG9uZyBuCiAKIGpvYmplY3QgSmF2YUpTT2JqZWN0
Ojpjb252ZXJ0VmFsdWVUb0pPYmplY3QoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIAogICAgIFJvb3RPYmplY3QqIHJv
b3RPYmplY3QgPSB0aGlzLT5yb290T2JqZWN0KCk7CiAgICAgaWYgKCFyb290T2JqZWN0KQogICAg
ICAgICByZXR1cm4gMDsKIAorICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKICAgICBqb2JqZWN0IHJlc3VsdCA9
IDA7CiAgICAgCkBAIC01NTQsNyArNTU0LDcgQEAgSlNWYWx1ZSBKYXZhSlNPYmplY3Q6OmNvbnZl
cnRKT2JqZWN0VG9WYQogICAgIC8vIGZpZ3VyZSAyMi00LgogICAgIGpvYmplY3QgY2xhc3NPZklu
c3RhbmNlID0gY2FsbEpOSU1ldGhvZDxqb2JqZWN0Pih0aGVPYmplY3QsICJnZXRDbGFzcyIsICIo
KUxqYXZhL2xhbmcvQ2xhc3M7Iik7CiAgICAgaWYgKCFjbGFzc09mSW5zdGFuY2UpIHsKLSAgICAg
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHJldHVybiBKYXZhSW5zdGFuY2U6OmNyZWF0ZSh0aGVP
YmplY3QsIF9yb290T2JqZWN0KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKICAgICB9CiAK
QEAgLTU2Myw3ICs1NjMsNyBAQCBKU1ZhbHVlIEphdmFKU09iamVjdDo6Y29udmVydEpPYmplY3RU
b1ZhCiAgICAgLy8gcG9pbnRlciBhbmQgc3RvcmVzIGl0IGluIHRoaXMgb2JqZWN0LCBzbyB0aGF0
IGl0IGNhbiBiZSByZXRyaWV2ZWQgYmVsb3cuCiAgICAganN0cmluZyBjbGFzc05hbWUgPSAoanN0
cmluZyljYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGNsYXNzT2ZJbnN0YW5jZSwgImdldE5hbWUiLCAi
KClMamF2YS9sYW5nL1N0cmluZzsiKTsKICAgICBpZiAoIWNsYXNzTmFtZSB8fCAoc3RyY21wKEph
dmFTdHJpbmcoY2xhc3NOYW1lKS51dGY4KCksICJzdW4ucGx1Z2luLmphdmFzY3JpcHQud2Via2l0
LkpTT2JqZWN0IikgIT0gMCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHJldHVy
biBKYXZhSW5zdGFuY2U6OmNyZWF0ZSh0aGVPYmplY3QsIF9yb290T2JqZWN0KS0+Y3JlYXRlUnVu
dGltZU9iamVjdChleGVjKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvam5pX29iamMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9q
bmlfb2JqYy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2pu
aS9qbmlfb2JqYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBib29sIEpTQzo6
QmluZGluZ3M6OmRpc3BhdGNoSk5JQ2FsbChFeGVjCiAgICAgICAgIC8vIGltcGxlbWVudGVkIGlu
IFdlYkNvcmUgd2lsbCBndWFyYW50ZWUgdGhhdCBvbmx5IGFwcHJvcHJpYXRlIEphdmFTY3JpcHQK
ICAgICAgICAgLy8gY2FuIHJlZmVyZW5jZSB0aGUgYXBwbGV0LgogICAgICAgICB7Ci0gICAgICAg
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7
CiAgICAgICAgICAgICByZXN1bHQgPSBbdmlldyB3ZWJQbHVnSW5DYWxsSmF2YTpvYmogaXNTdGF0
aWM6aXNTdGF0aWMgcmV0dXJuVHlwZTpyZXR1cm5UeXBlIG1ldGhvZDptZXRob2RJRCBhcmd1bWVu
dHM6YXJncyBjYWxsaW5nVVJMOm5pbCBleGNlcHRpb25EZXNjcmlwdGlvbjomX2V4Y2VwdGlvbkRl
c2NyaXB0aW9uXTsKICAgICAgICAgfQogCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgSlNDOjpCaW5k
aW5nczo6ZGlzcGF0Y2hKTklDYWxsKEV4ZWMKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0lu
Q2FsbEphdmE6bWV0aG9kOnJldHVyblR5cGU6YXJndW1lbnRzOildKSB7Ci0gICAgICAgIEpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7CiAgICAgICAgIHJl
c3VsdCA9IFt2aWV3IHdlYlBsdWdJbkNhbGxKYXZhOm9iaiBtZXRob2Q6bWV0aG9kSUQgcmV0dXJu
VHlwZTpyZXR1cm5UeXBlIGFyZ3VtZW50czphcmdzXTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0
aWxpdHlQcml2YXRlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQs
NyArMTc0LDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VUb0phdgogCiBq
dmFsdWUgY29udmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBSb290T2JqZWN0KiBy
b290T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBKYXZhVHlwZSBqYXZhVHlwZSwgY29uc3QgY2hhciog
amF2YUNsYXNzTmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAganZhbHVlIHJlc3VsdDsKICAg
ICBtZW1zZXQoJnJlc3VsdCwgMCwgc2l6ZW9mKGp2YWx1ZSkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIEphdmFDbGFzczo6SmF2YUNsYXNzKGpvYmplY3Qg
YW5JbnN0YW5jZSkKICAgICAgICAgICAgIGpvYmplY3QgYUpGaWVsZCA9IGVudi0+R2V0T2JqZWN0
QXJyYXlFbGVtZW50KChqb2JqZWN0QXJyYXkpZmllbGRzLCBpKTsKICAgICAgICAgICAgIEphdmFG
aWVsZCogYUZpZWxkID0gbmV3IEphdmFGaWVsZChlbnYsIGFKRmllbGQpOyAvLyBkZWxldGVkIGlu
IHRoZSBKYXZhQ2xhc3MgZGVzdHJ1Y3RvcgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNMb2NrIGhlcmU/CiAgICAgICAgICAgICAgICAg
bV9maWVsZHMuc2V0KGFGaWVsZC0+bmFtZSgpLmltcGwoKSwgYUZpZWxkKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoYUpGaWVsZCk7CkBAIC03OSw3ICs3
OSw3IEBAIEphdmFDbGFzczo6SmF2YUNsYXNzKGpvYmplY3QgYW5JbnN0YW5jZSkKICAgICAgICAg
ICAgIEphdmFNZXRob2QqIGFNZXRob2QgPSBuZXcgSmF2YU1ldGhvZChlbnYsIGFKTWV0aG9kKTsg
Ly8gZGVsZXRlZCBpbiB0aGUgSmF2YUNsYXNzIGRlc3RydWN0b3IKICAgICAgICAgICAgIE1ldGhv
ZExpc3QqIG1ldGhvZExpc3Q7CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
U2hvdWxkIHdlIGFjcXVpcmUgYSBKU0xvY2sgaGVyZT8KIAogICAgICAgICAgICAgICAgIG1ldGhv
ZExpc3QgPSBtX21ldGhvZHMuZ2V0KGFNZXRob2QtPm5hbWUoKS5pbXBsKCkpOwogICAgICAgICAg
ICAgICAgIGlmICghbWV0aG9kTGlzdCkgewpAQCAtMTAwLDcgKzEwMCw3IEBAIEphdmFDbGFzczo6
fkphdmFDbGFzcygpCiB7CiAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDxjaGFyKj4obV9uYW1lKSk7
CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIC8vIEZJWE1F
OiBTaG91bGQgd2UgYWNxdWlyZSBhIEpTTG9jayBoZXJlPwogCiAgICAgZGVsZXRlQWxsVmFsdWVz
KG1fZmllbGRzKTsKICAgICBtX2ZpZWxkcy5jbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIENsYXNzKiBKYXZhSW5zdGFuY2U6Omdl
dENsYXNzKCkgY29uc3QKIAogSlNWYWx1ZSBKYXZhSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAganN0cmluZyBzdHJpbmdW
YWx1ZSA9IChqc3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVjdD4obV9pbnN0YW5jZS0+aW5zdGFu
Y2UoKSwgInRvU3RyaW5nIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7Iik7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhTWV0aG9kSlND
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBKYXZhTWV0aG9kOjp+SmF2YU1l
dGhvZCgpCiAvLyB3ZSBnZXQgJy4nIGJldHdlZW4gY29tcG9uZW50cyBmcm9tIHRoZSByZWZsZWN0
aW9uIEFQSS4KIHN0YXRpYyB2b2lkIGFwcGVuZENsYXNzTmFtZShTdHJpbmdCdWlsZGVyJiBidWls
ZGVyLCBjb25zdCBjaGFyKiBjbGFzc05hbWUpCiB7Ci0gICAgQVNTRVJUKEpTTG9jazo6bG9ja0Nv
dW50KCkgPiAwKTsKKyAgICBBU1NFUlQoSlNDOjpKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNl
KCkuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogCiAgICAgY2hhciog
YyA9IGZhc3RTdHJEdXAoY2xhc3NOYW1lKTsKIApAQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyB2
b2lkIGFwcGVuZENsYXNzTmFtZShTdHJpbmdCdWlsZGUKIGNvbnN0IGNoYXIqIEphdmFNZXRob2Q6
OnNpZ25hdHVyZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NpZ25hdHVyZSkgewotICAgICAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAvLyBGSVhNRTogU2hv
dWxkIHdlIGFjcXVpcmUgYSBKU0xvY2sgaGVyZT8KIAogICAgICAgICBTdHJpbmdCdWlsZGVyIHNp
Z25hdHVyZUJ1aWxkZXI7CiAgICAgICAgIHNpZ25hdHVyZUJ1aWxkZXIuYXBwZW5kKCcoJyk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlNDLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YVN0cmluZ0pTQy5oCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhU3Ry
aW5nSlNDLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgSmF2YVN0
cmluZ0pTQ19oCiAKICNpbmNsdWRlICJKTklVdGlsaXR5LmgiCisjaW5jbHVkZSAiSlNET01XaW5k
b3dCYXNlLmgiCiAjaW5jbHVkZSAiSmF2YUluc3RhbmNlSlNDLmgiCiAKICNpbmNsdWRlIDxydW50
aW1lL0pTTG9jay5oPgpAQCAtNTIsMjAgKzUzLDIwIEBAIHB1YmxpYzoKIAogICAgIEphdmFTdHJp
bmcoKQogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIG1faW1wbCA9IFVTdHJpbmcoKS5pbXBsKCk7CiAg
ICAgfQogCiAgICAgfkphdmFTdHJpbmcoKQogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIG1faW1wbCA9
IDA7CiAgICAgfQogCiAgICAgY29uc3QgY2hhciogdXRmOCgpIGNvbnN0CiAgICAgewogICAgICAg
ICBpZiAoIW1fdXRmOFN0cmluZy5kYXRhKCkpIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJD
b3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAg
IG1fdXRmOFN0cmluZyA9IFVTdHJpbmcobV9pbXBsKS51dGY4KCk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIG1fdXRmOFN0cmluZy5kYXRhKCk7CkBAIC03OSw3ICs4MCw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGludCBzaXplID0gZS0+R2V0U3RyaW5nTGVuZ3RoKHMpOwogICAgICAgICBjb25z
dCBqY2hhciogdWMgPSBnZXRVQ2hhcmFjdGVyc0Zyb21KU3RyaW5nSW5FbnYoZSwgcyk7CiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIG1faW1wbCA9IFVTdHJpbmcocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHVjKSwgc2l6ZSkuaW1wbCgpOwogICAgICAgICB9CiAg
ICAgICAgIHJlbGVhc2VVQ2hhcmFjdGVyc0ZvckpTdHJpbmdJbkVudihlLCBzLCB1Yyk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkyLDcgKzkyLDcgQEAgSlNPYmplY3QqIEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2Jq
ZWN0KAogICAgIGlmIChSdW50aW1lT2JqZWN0KiBleGlzdGluZ09iamVjdCA9IG1fcnVudGltZU9i
amVjdC5nZXQoKSkKICAgICAgICAgcmV0dXJuIGV4aXN0aW5nT2JqZWN0OwogCi0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICBSdW50aW1lT2JqZWN0KiBuZXdPYmplY3QgPSBuZXdSdW50aW1lT2JqZWN0KGV4ZWMp
OwogICAgIG1fcnVudGltZU9iamVjdCA9IFBhc3NXZWFrPFJ1bnRpbWVPYmplY3Q+KG5ld09iamVj
dCk7CiAgICAgbV9yb290T2JqZWN0LT5hZGRSdW50aW1lT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgbmV3T2JqZWN0KTsKQEAgLTEwMSw3ICsxMDEsNyBAQCBKU09iamVjdCogSW5zdGFuY2U6OmNy
ZWF0ZVJ1bnRpbWVPYmplY3QoCiAKIFJ1bnRpbWVPYmplY3QqIEluc3RhbmNlOjpuZXdSdW50aW1l
T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgLy8gRklYTUU6
IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUg
d3JvbmcgZ2xvYmFsIG9iamVjdAogICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQg
Z2xvYmFsIG9iamVjdCBmb3IgImkiLgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMv
b2JqY19pbnN0YW5jZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2Jq
Yy9vYmpjX2luc3RhbmNlLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3
IEBAIHZvaWQgT2JqY0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG8KICAgICB9CiAKICAg
ICBpZiAoIXNfZXhjZXB0aW9uRW52aXJvbm1lbnQgfHwgc19leGNlcHRpb25FbnZpcm9ubWVudCA9
PSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAg
ICAgICAgIHRocm93RXJyb3IoZXhlYywgc19leGNlcHRpb24pOwogICAgIH0KIApAQCAtMjM5LDcg
KzIzOSw3IEBAIEpTVmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VPYmpjTWV0aG9kKEUKIHsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgCi0gICAgSlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7IC8vIENhbid0IHB1
dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0
bHkuCisgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOyAvLyBDYW4n
dCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29y
cmVjdGx5LgogCiAgICAgc2V0R2xvYmFsRXhjZXB0aW9uKG5pbCk7CiAgICAgCkBAIC0zNTQsNyAr
MzU0LDcgQEAgSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRobwogewogICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQgdGhp
cyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5Lgor
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0
IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3Rs
eS4KICAgICBzZXRHbG9iYWxFeGNlcHRpb24obmlsKTsKICAgICAKIEB0cnkgewpAQCAtNDExLDcg
KzQxMSw3IEBAIGJvb2wgT2JqY0luc3RhbmNlOjpzZXRWYWx1ZU9mVW5kZWZpbmVkRmkKICAgICBp
ZiAoIVt0YXJnZXRPYmplY3QgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRWYWx1ZTpm
b3JVbmRlZmluZWRLZXk6KV0pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4n
dCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29y
cmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8g
Q2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBp
bmNvcnJlY3RseS4KIAogICAgIC8vIFRoaXMgY2hlY2sgaXMgbm90IHJlYWxseSBuZWNlc3Nhcnkg
YmVjYXVzZSBOU09iamVjdCBpbXBsZW1lbnRzCiAgICAgLy8gc2V0VmFsdWU6Zm9yVW5kZWZpbmVk
S2V5OiwgYW5kIHVuZm9ydHVuYXRlbHkgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KQEAgLTQ0
Myw3ICs0NDMsNyBAQCBKU1ZhbHVlIE9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZlVuZGVmaW5lCiAg
ICAgCiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gZ2V0T2JqZWN0KCk7CiAKLSAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3Qg
cHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJl
Y3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENh
bid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5j
b3JyZWN0bHkuCiAKICAgICAvLyBUaGlzIGNoZWNrIGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5IGJl
Y2F1c2UgTlNPYmplY3QgaW1wbGVtZW50cwogICAgIC8vIHZhbHVlRm9yVW5kZWZpbmVkS2V5Oiwg
YW5kIHVuZm9ydHVuYXRlbHkgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtOTIsMTkgKzkyLDE4IEBAIEpTVmFsdWUgT2JqY0ZpZWxkOjp2YWx1ZUZyb21JbnN0
YW5jZShFeGUKICAgICAKICAgICBpZCB0YXJnZXRPYmplY3QgPSAoc3RhdGljX2Nhc3Q8Y29uc3Qg
T2JqY0luc3RhbmNlKj4oaW5zdGFuY2UpKS0+Z2V0T2JqZWN0KCk7CiAKLSAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3Qg
cHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJl
Y3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENh
bid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5j
b3JyZWN0bHkuCiAKICAgICBAdHJ5IHsKICAgICAgICAgaWYgKGlkIG9iamNWYWx1ZSA9IFt0YXJn
ZXRPYmplY3QgdmFsdWVGb3JLZXk6KE5TU3RyaW5nICopX25hbWUuZ2V0KCldKQogICAgICAgICAg
ICAgcmVzdWx0ID0gY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJm9iamNWYWx1ZSwgT2Jq
Y09iamVjdFR5cGUsIGluc3RhbmNlLT5yb290T2JqZWN0KCkpOwogICAgICAgICB7Ci0gICAgICAg
ICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgICAgICBPYmpjSW5zdGFuY2U6Om1vdmVHbG9i
YWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKICAgICAgICAgfQogICAgIH0gQGNhdGNoKE5T
RXhjZXB0aW9uKiBsb2NhbEV4Y2VwdGlvbikgewotICAgICAgICBKU0xvY2s6OmxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
ICAgIHRocm93RXJyb3IoZXhlYywgW2xvY2FsRXhjZXB0aW9uIHJlYXNvbl0pOwotICAgICAgICBK
U0xvY2s6OnVubG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIH0KIAogICAgIC8vIFdv
cmsgYXJvdW5kIHByb2JsZW0gaW4gc29tZSB2ZXJzaW9ucyBvZiBHQ0Mgd2hlcmUgcmVzdWx0IGdl
dHMgbWFya2VkIHZvbGF0aWxlIGFuZApAQCAtMTI1LDE4ICsxMjQsMTcgQEAgdm9pZCBPYmpjRmll
bGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjUwogICAgIGlkIHRhcmdldE9iamVjdCA9IChzdGF0
aWNfY2FzdDxjb25zdCBPYmpjSW5zdGFuY2UqPihpbnN0YW5jZSkpLT5nZXRPYmplY3QoKTsKICAg
ICBpZCB2YWx1ZSA9IGNvbnZlcnRWYWx1ZVRvT2JqY09iamVjdChleGVjLCBhVmFsdWUpOwogCi0g
ICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVu
d2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBp
dCB1bndpbmRzIGluY29ycmVjdGx5LgogCiAgICAgQHRyeSB7CiAgICAgICAgIFt0YXJnZXRPYmpl
Y3Qgc2V0VmFsdWU6dmFsdWUgZm9yS2V5OihOU1N0cmluZyAqKV9uYW1lLmdldCgpXTsKICAgICAg
ICAgewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAgICAgT2JqY0luc3Rh
bmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgICAgIH0KICAg
ICB9IEBjYXRjaChOU0V4Y2VwdGlvbiogbG9jYWxFeGNlcHRpb24pIHsKLSAgICAgICAgSlNMb2Nr
Ojpsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFtsb2NhbEV4Y2VwdGlvbiByZWFzb25d
KTsKLSAgICAgICAgSlNMb2NrOjp1bmxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICB9
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW0J
KHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRp
bGl0eS5tbQkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBPYmpjVmFsdWUgY29udmVy
dFZhbHVlVG9PYmpjVmFsdWUoRXhlY1N0CiAKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAg
Y2FzZSBPYmpjT2JqZWN0VHlwZTogewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCAqb3JpZ2luR2xvYmFsT2JqZWN0
ID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpOwogICAgICAgICAgICAgUm9vdE9iamVjdCog
b3JpZ2luUm9vdE9iamVjdCA9IGZpbmRSb290T2JqZWN0KG9yaWdpbkdsb2JhbE9iamVjdCk7CkBA
IC0xNDYsNyArMTQ2LDcgQEAgT2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4ZWNT
dAogCiBKU1ZhbHVlIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgTlNT
dHJpbmcgKm5zc3RyaW5nKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCiAgICAgdW5pY2hhciAqY2hh
cnM7CiAgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IFtuc3N0cmluZyBsZW5ndGhdOwpAQCAtMTc4
LDcgKzE3OCw3IEBAIEpTVmFsdWUgY29udmVydE5TU3RyaW5nVG9TdHJpbmcoRXhlY1N0YXQKICov
CiBKU1ZhbHVlIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCog
YnVmZmVyLCBPYmpjVmFsdWVUeXBlIHR5cGUsIFJvb3RPYmplY3QqIHJvb3RPYmplY3QpCiB7Ci0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBPYmpj
T2JqZWN0VHlwZTogewpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2Uu
Y3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5z
dGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlICJF
cnJvci5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93
QmFzZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgi
CiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCkBAIC05Miw3ICs5Myw3IEBAIFF0SW5zdGFu
Y2U6OlF0SW5zdGFuY2UoUU9iamVjdCogbywgUGFzc1IKIAogUXRJbnN0YW5jZTo6flF0SW5zdGFu
Y2UoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAKICAgICBjYWNoZWRJbnN0YW5jZXMucmVtb3ZlKG1faGFzaGtleSk7CiAKQEAgLTEx
OSw3ICsxMjAsNyBAQCBRdEluc3RhbmNlOjp+UXRJbnN0YW5jZSgpCiAKIFBhc3NSZWZQdHI8UXRJ
bnN0YW5jZT4gUXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShRT2JqZWN0KiBvLCBQYXNzUmVmUHRy
PFJvb3RPYmplY3Q+IHJvb3RPYmplY3QsIFZhbHVlT3duZXJzaGlwIG93bmVyc2hpcCkKIHsKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAg
ICAgZm9yZWFjaCAoUXRJbnN0YW5jZSogaW5zdGFuY2UsIGNhY2hlZEluc3RhbmNlcy52YWx1ZXMo
bykpCiAgICAgICAgIGlmIChpbnN0YW5jZS0+cm9vdE9iamVjdCgpID09IHJvb3RPYmplY3QpIHsK
QEAgLTE4MCw3ICsxODEsNyBAQCBDbGFzcyogUXRJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdAog
CiBSdW50aW1lT2JqZWN0KiBRdEluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIG1fbWV0aG9kcy5jbGVhcigpOwogICAgIHJldHVy
biBRdFJ1bnRpbWVPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIHRoaXMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1
bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9waXht
YXBydW50aW1lLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdl
L3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsNyArNDIwLDcg
QEAgUnVudGltZU9iamVjdCogUXRQaXhtYXBJbnN0YW5jZTo6bmV3UnVudAogCiBKU09iamVjdCog
UXRQaXhtYXBJbnN0YW5jZTo6Y3JlYXRlUGl4bWFwUnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4
ZWMsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCwgY29uc3QgUVZhcmlhbnQmIGRhdGEpCiB7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBSZWZQdHI8UXRQaXhtYXBJbnN0YW5jZT4gaW5zdGFuY2UgPSBh
ZG9wdFJlZihuZXcgUXRQaXhtYXBJbnN0YW5jZShyb290LCBkYXRhKSk7CiAgICAgcmV0dXJuIGlu
c3RhbmNlLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dl
YkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNyAr
MjMwLDcgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdAogICAgICAg
ICByZXR1cm4gUVZhcmlhbnQoKTsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTUmVhbFR5
cGUgdHlwZSA9IHZhbHVlUmVhbFR5cGUoZXhlYywgdmFsdWUpOwogICAgIGlmIChoaW50ID09IFFN
ZXRhVHlwZTo6Vm9pZCkgewogICAgICAgICBzd2l0Y2godHlwZSkgewpAQCAtODI0LDcgKzgyNCw3
IEBAIEpTVmFsdWUgY29udmVydFFWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUKICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBpZiAodHlwZSA9PSBR
TWV0YVR5cGU6OkJvb2wpCiAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4odmFyaWFudC50b0Jvb2wo
KSk7CkBAIC0xNDIwLDcgKzE0MjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0
aG9kOjpjYWxsCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICAvLyBXZSBoYXZlIHRvIHBpY2sgYSBtZXRob2QgdGhhdCBtYXRjaGVzLi4KLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogCiAgICAgUU9iamVjdCAqb2JqID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7
CiAgICAgaWYgKG9iaikgewpAQCAtMTU2MSw3ICsxNTYxLDcgQEAgRW5jb2RlZEpTVmFsdWUgUXRS
dW50aW1lQ29ubmVjdGlvbk1ldGhvZAogewogICAgIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2RE
YXRhKiBkID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCAqPihleGVjLT5j
YWxsZWUoKSktPmRfZnVuYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIFFPYmplY3QqIHNlbmRl
ciA9IGQtPm1faW5zdGFuY2UtPmdldE9iamVjdCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcXQvcXRfcnVudGltZV9xdDQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9xdC9xdF9ydW50aW1lX3F0NC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lX3F0NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzMCw3ICsyMzAsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0
CiAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
SlNSZWFsVHlwZSB0eXBlID0gdmFsdWVSZWFsVHlwZShleGVjLCB2YWx1ZSk7CiAgICAgaWYgKGhp
bnQgPT0gUU1ldGFUeXBlOjpWb2lkKSB7CiAgICAgICAgIHN3aXRjaCh0eXBlKSB7CkBAIC04MjQs
NyArODI0LDcgQEAgSlNWYWx1ZSBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0ZQogICAg
ICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIGlmICh0
eXBlID09IFFNZXRhVHlwZTo6Qm9vbCkKICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih2YXJpYW50
LnRvQm9vbCgpKTsKQEAgLTE0MjksNyArMTQyOSw3IEBAIEVuY29kZWRKU1ZhbHVlIFF0UnVudGlt
ZU1ldGFNZXRob2Q6OmNhbGwKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIAogICAgIC8vIFdlIGhhdmUgdG8gcGljayBhIG1ldGhvZCB0aGF0IG1hdGNoZXMu
LgotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAKICAgICBRT2JqZWN0ICpvYmogPSBkLT5tX2luc3RhbmNlLT5nZXRP
YmplY3QoKTsKICAgICBpZiAob2JqKSB7CkBAIC0xNTcwLDcgKzE1NzAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kCiB7CiAgICAgUXRSdW50aW1lQ29ubmVjdGlv
bk1ldGhvZERhdGEqIGQgPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kICo+
KGV4ZWMtPmNhbGxlZSgpKS0+ZF9mdW5jKCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgUU9iamVj
dCogc2VuZGVyID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTUxLDcgKzU1MSw3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVm
ZmUKICAgICBtX2NvbnRleHRTdGF0ZVNhdmVyID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIoKm1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSkpOwogCiAjaWYgVVNFKEpTQykK
LSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0
YSgpKTsKICAgICBzaXplX3QgbnVtQnl0ZXMgPSA0ICogbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxT
aXplKCkud2lkdGgoKSAqIG1faW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLmhlaWdodCgpOwog
ICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpLT5oZWFwLnJlcG9ydEV4
dHJhTWVtb3J5Q29zdChudW1CeXRlcyk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsOCArODEsOCBA
QCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiAjaWYgVVNFKEpTQykK
ICAgICBpZiAoIWxvYWRFcnJvcikgewogICAgICAgICBpZiAoIWVsZW0tPmluRG9jdW1lbnQoKSkg
ewotICAgICAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CiAgICAgICAgICAgICBKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCk7CisgICAgICAgICAgICBKU0M6OkpTTG9ja0hv
bGRlciBsb2NrKGdsb2JhbERhdGEpOwogICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5yZXBv
cnRFeHRyYU1lbW9yeUNvc3QoY2FjaGVkSW1hZ2UtPmVuY29kZWRTaXplKCkpOwogICAgICAgICB9
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDAsNyArMjQwLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpzdGFydCgpCiAg
ICAgewogICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKICNp
ZiBVU0UoSlNDKQotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwogI2VuZGlmCiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG5w
RXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9taW1lVHlw
ZS51dGY4KCkuZGF0YSgpLCBtX2luc3RhbmNlLCBtX21vZGUsIG1fcGFyYW1Db3VudCwgbV9wYXJh
bU5hbWVzLCBtX3BhcmFtVmFsdWVzLCBOVUxMKTsKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIFBs
dWdpblZpZXc6OnN0b3AoKQogICAgIG1faXNTdGFydGVkID0gZmFsc2U7CiAKICNpZiBVU0UoSlND
KQotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC00NDYsNyArNDQ2LDcgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVzdChQbHVnaW5SZQogICAgICAgICAgICAgaWYgKHJlcXVl
c3QtPnNlbmROb3RpZmljYXRpb24oKSkgewogICAgICAgICAgICAgICAgIFBsdWdpblZpZXc6OnNl
dEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgICAgICAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlm
CiAgICAgICAgICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgICAgICAg
ICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RV
Ukwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0
YSgpKTsKQEAgLTczNiw3ICs3MzYsNyBAQCBOUE9iamVjdCogUGx1Z2luVmlldzo6bnBPYmplY3Qo
KQogICAgIHsKICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7
CiAjaWYgVVNFKEpTQykKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICNlbmRpZgogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAg
ICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBO
UFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmb2JqZWN0KTsKQEAgLTE0OTIsNyArMTQ5Miw3
IEBAIHZvaWQgUGx1Z2luVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGEKIAogICAgIFBsdWdp
blZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgc2V0Q2FsbGlu
Z1BsdWdpbih0cnVlKTsKICAgICBOUEJvb2wgdmFsdWUgPSBwcml2YXRlQnJvd3NpbmdFbmFibGVk
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdCbGFj
a0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVy
cnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MDMsNyArNDAzLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5Q
RXZlbnQoTlBFdmVudAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNj
ZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50
KTsKQEAgLTk3MCw3ICs5NzAsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVk
ZWQoKQogICAgICAgICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3Nf
aW5mbyktPndpbmRvd0dyb3VwID0gd2luZG93LT53aW5kb3dHcm91cCgpOwogCiAgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAKICAgICAv
LyBGSVhNRTogUGFzc2luZyB6b29tRmFjdG9yIHRvIHNldHdpbmRvdyBtYWtlIHdpbmRvd2VkIHBs
dWdpbiBzY2FsZSBpbmNvcnJlY3RseS4KQEAgLTEyMjAsNyArMTIyMCw3IEBAIGJvb2wgUGx1Z2lu
Vmlldzo6cGxhdGZvcm1TdGFydCgpCiAKICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PmdldHZhbHVlKSB7CiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRo
aXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVkLCAmbV9u
ZWVkc1hFbWJlZCk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtMTMwMSw3
ICsxMzAxLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpnZXRXaW5kb3dJbmZvKFZlY3RvcjxQbAogICAg
IHZvaWQqIHZhbFB0ciA9IDA7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmll
dyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0
dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpblNjcmVlbldpbmRvdywgJnZhbFB0cik7CiAgICAg
c2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2Vm
bC9QbHVnaW5WaWV3RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L2VmbC9QbHVnaW5WaWV3RWZsLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcg
KzU2LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0
aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7
CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsK
IAogICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9p
bnN0YW5jZSwgJmV2ZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdp
blZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3
IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7
Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNldENhbGxp
bmdQbHVnaW4odHJ1ZSk7CiAKICAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpAQCAtMjc2LDcgKzI3Niw3IEBAIHZv
aWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiAKIAogdm9pZCBQbHVnaW5WaWV3
OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIGlmICghbV9pc1N0YXJ0ZWQg
fHwgbV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQogICAgICAgICBy
ZXR1cm47CkBAIC00MDYsNyArNDA2LDcgQEAgc3RhdGljIHZvaWQgc2V0WENyb3NzaW5nRXZlbnRT
cGVjaWZpY0ZpZQogCiB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVu
dCogZXZlbnQpCiB7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
CiAgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRT
dWNjZXNzZnVsbHkpCiAgICAgICAgIHJldHVybjsKQEAgLTUzNSw3ICs1MzUsNyBAQCB2b2lkIFBs
dWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAgIH0KIAogICAgIFBsdWdpblZpZXc6
OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIG1fcGx1Z2lu
LT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwogICAg
IHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtODQyLDcgKzg0Miw3IEBAIGJvb2wgUGx1Z2lu
Vmlldzo6cGxhdGZvcm1TdGFydCgpCiAjaWYgZGVmaW5lZChYUF9VTklYKQogICAgIGlmIChtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsKICAgICAgICAgUGx1Z2luVmlldzo6c2V0
Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAg
ICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1
Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdp
bihmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdN
YWMubW0JKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1Bs
dWdpblZpZXdNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyNiw3ICs0MjYsNyBAQCB2b2lkIFBs
dWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAgICAgICAgICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC5yaWdodCAtIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCwgbV9ucFdpbmRvdy5jbGlw
UmVjdC5ib3R0b20gLSBtX25wV2luZG93LmNsaXBSZWN0LnRvcCk7CiAKICAgICBQbHVnaW5WaWV3
OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25K
U0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKICAg
ICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAgLTc3Miw3ICs3NzIsNyBAQCBQb2ludCBQbHVn
aW5WaWV3Ojptb3VzZVBvc0ZvclBsdWdpbihNb3VzCiBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNo
TlBFdmVudChOUEV2ZW50JiBldmVudCkKIHsKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1
Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAJKHJldmlzaW9uIDEyMDky
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzczLDcgKzM3Myw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2
ZW50KE5QRXZlbnQKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwogI2VuZGlmCiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBib29sIGFjY2VwdGVk
ID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpA
QCAtNjg3LDcgKzY4Nyw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgp
CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKICNpZiBVU0Uo
SlNDKQotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICNlbmRpZgog
ICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CkBAIC05NDksNyArOTQ5LDcgQEAg
Ym9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKICAgICBpZiAobV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmdldHZhbHVlKSB7CiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0
cnVlKTsKICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFu
Y2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVlZHNYRW1iZWQpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHJldmlzaW9uIDEyMDky
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MjYsNyArNTI2LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5Q
RXZlbnQoTlBFdmVudAogICAgICAgICBzaG91bGRQb3AgPSB0cnVlOwogICAgIH0KIAotICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2lu
KHRydWUpOwogICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2
ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsK
QEAgLTY3Nyw3ICs2NzcsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQo
S2V5CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQog
ICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KQEAgLTc0Nyw3ICs3NDcsNyBA
QCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFCiAgICAgfSBlbHNlCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmFjayBwb3J0aW5nIHRoZSBodHRwOi8vd2Via2l0
Lm9yZy9iLzU4MTA4IGZpeCBoZXJlLgogICAgIGlmIChkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkp
CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwpAQCAtODM1LDcgKzgzNSw3IEBA
IHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEkKICAgICBtX25wV2luZG93
LmNsaXBSZWN0LnRvcCA9IDA7CiAKICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNl
dHdpbmRvdykgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKICAgICAg
ICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
dGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDggKzM5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmVUZXN0U3VwcG9ydCB7CiAK
IHZvaWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRDb250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc2NyaXB0Q29udGV4dC0+aXNEb2N1bWVudCgpID8g
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzY3JpcHRDb250ZXh0KSA6IDA7CkBAIC00OSw4ICs0OSw4
IEBAIHZvaWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJlZiAKIAogdm9pZCByZXNl
dEludGVybmFsc09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29u
dGV4dCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSk7CiAgICAgSW50ZXJuYWxzICogaW50ZXJuYWxzID0gdG9JbnRlcm5h
bHMoZ2xvYmFsT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVy
KGV4ZWMsIEludGVybmFsczo6aW50ZXJuYWxzSWQpKSk7CiAgICAgaWYgKGludGVybmFscykgewpJ
bmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NTEsOCArODUxLDggQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24o
KQogICAgIC8vIG91dC4gQnV0IGl0IGlzIHByb3RlY3RlZCBmcm9tIEdDIHdoaWxlIGxvYWRpbmcs
IHNvIHRoaXMKICAgICAvLyBjYW4ndCBiZSByZWNvdXBlZCB1bnRpbCB0aGUgbG9hZCBpcyBkb25l
LCBzbyBvbmx5CiAgICAgLy8gcmVwb3J0IHRoZSBleHRyYSBjb3N0IGF0IHRoYXQgcG9pbnQuCi0g
ICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlND
OjpKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmds
b2JhbERhdGEoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEpOwogICAg
IGdsb2JhbERhdGEtPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KG1fcmVzcG9uc2VCdWlsZGVy
Lmxlbmd0aCgpICogMik7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2
KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NDkgQEAKKzIwMTItMDYtMjAgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNv
bT4KKworICAgICAgICBKU0xvY2sgc2hvdWxkIGJlIHBlci1KU0dsb2JhbERhdGEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MTIzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBhbGwgc2l0ZXMg
dGhhdCB1c2VkIEpTTG9jayB0byBpbnN0ZWFkIHVzZSB0aGUgbmV3IEpTTG9ja0hvbGRlcgorICAg
ICAgICBhbmQgcGFzcyBpbiB0aGUgY29ycmVjdCBKUyBjb250ZXh0IHRoYXQgdGhlIGNvZGUgaXMg
YWJvdXQgdG8gaW50ZXJhY3Qgd2l0aCB0aGF0IAorICAgICAgICBuZWVkcyBwcm90ZWN0aW9uLgor
CisgICAgICAgICogU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbToKKyAgICAgICAg
KFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6c2FtcGxlV2ViS2l0KToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6SW5qZWN0ZWRCdW5kbGU6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgorICAgICAgICAoV2Vi
S2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkpT
TlBPYmplY3Q6OmNhbGxNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpjYWxs
T2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Y2FsbENvbnN0cnVjdG9yKToK
KyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6cHV0KToKKyAgICAgICAgKFdlYktpdDo6SlNO
UE9iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6cHJvcGVy
dHlHZXR0ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aGFzTWV0aG9kKToKKyAgICAg
ICAgKFdlYktpdDo6TlBKU09iamVjdDo6aW52b2tlKToKKyAgICAgICAgKFdlYktpdDo6TlBKU09i
amVjdDo6aW52b2tlRGVmYXVsdCk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6Omhhc1By
b3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6Z2V0UHJvcGVydHkpOgorICAg
ICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6
Ok5QSlNPYmplY3Q6OnJlbW92ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVj
dDo6ZW51bWVyYXRlKToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6Y29uc3RydWN0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFw
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpjb252ZXJ0SlNWYWx1
ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpldmFs
dWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4
Y2VwdGlvblRvRXhlY1N0YXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJh
bWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6anNXcmFwcGVyRm9yV29ybGQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJ
bmZvKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6
Z2V0V2ViQ29yZVN0YXRpc3RpY3MpOgorCiAyMDEyLTA2LTIxICBSeXVhbiBDaG9pICA8cnl1YW4u
Y2hvaUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMW1dLMl0gQWRkIFdLVmlld0VmbCBhbmQg
V2ViS2l0MiBBUEkgT2JqZWN0IHRvIHJlcHJlc2VudCBFdmFzX09iamVjdC4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5tYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQkocmV2
aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1w
bGVyLm1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIFdlYk1lbW9yeVN0
YXRpc3RpY3MgV2ViTWVtb3J5U2FtcGxlcjo6c2EKICAgICB0b3RhbEJ5dGVzSW5Vc2UgKz0gZmFz
dE1hbGxvY0J5dGVzSW5Vc2U7CiAgICAgdG90YWxCeXRlc0NvbW1pdHRlZCArPSBmYXN0TWFsbG9j
Qnl0ZXNDb21taXR0ZWQ7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOwogICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNJblVzZSA9IEpTRE9NV2luZG93Ojpjb21t
b25KU0dsb2JhbERhdGEoKS0+aGVhcC5zaXplKCk7CiAgICAgc2l6ZV90IGpzY0hlYXBCeXRlc0Nv
bW1pdHRlZCA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jYXBhY2l0
eSgpOwogICAgIHRvdGFsQnl0ZXNJblVzZSArPSBqc2NIZWFwQnl0ZXNJblVzZTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTIwOTI2KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTIwLDcgKzkyMCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6Z2V0V2ViQ29yZVN0YXRpc3Rp
Y3ModWkKICAgICAKICAgICAvLyBHYXRoZXIgSmF2YVNjcmlwdCBzdGF0aXN0aWNzLgogICAgIHsK
LSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNM
b2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAg
ICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRPYmplY3RzQ291bnQiLCBK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKSk7CiAg
ICAgICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0R2xvYmFsT2JqZWN0
c0NvdW50IiwgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmdsb2JhbE9i
amVjdENvdW50KCkpOwogICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiSmF2YVNj
cmlwdFByb3RlY3RlZE9iamVjdHNDb3VudCIsIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERh
dGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA5LDcg
KzQwOSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmdhcmJhZ2VDb2xsZWN0SmF2YVMKIAogc2l6
ZV90IEluamVjdGVkQnVuZGxlOjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KCkKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgpOwogfQogCkBAIC00MTgs
OCArNDE4LDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0aW9uKEpTQwogICAg
IGlmICghY29udGV4dCB8fCAhZXhjZXB0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xv
Y2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWNTdGF0ZSA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlY1N0
YXRlKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBoYXMgYSBET01XaW5kb3cgZ2xv
YmFsIG9iamVjdCwgb3RoZXJ3aXNlIHRoaXMgY29udGV4dCBkaWRuJ3Qgb3JpZ2luYXRlIGZyb20g
YSBQYWdlLgogICAgIGlmICghdG9KU0RPTVdpbmRvdyhleGVjU3RhdGUtPmxleGljYWxHbG9iYWxP
YmplY3QoKSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvSlNOUE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0xvY2suaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RQcm90b3R5cGUuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aWZpZXJSZXAuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pT
RE9NV2luZG93QmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTEyNSw3ICsxMjYsNyBAQCBKU1ZhbHVlIEpTTlBP
YmplY3Q6OmNhbGxNZXRob2QoRXhlY1N0YXRlCiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0
KTsKICAgICAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAg
ICAgIHJldHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5pbnZva2UobV9ucE9iamVjdCwg
bWV0aG9kTmFtZSwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7CiAg
ICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRl
KGV4ZWMpOwogICAgIH0KQEAgLTE2NSw3ICsxNjYsNyBAQCBKU0M6OkpTVmFsdWUgSlNOUE9iamVj
dDo6Y2FsbE9iamVjdChKU0M6CiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKIAogICAg
IHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgcmV0dXJuVmFs
dWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQobV9ucE9iamVjdCwgYXJndW1l
bnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7CiAgICAgICAgIE5QUnVudGltZU9i
amVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgIH0KQEAg
LTIwNSw3ICsyMDYsNyBAQCBKU1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxDb25zdHJ1Y3RvcihFeGVj
CiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKICAgICAKICAgICB7Ci0gICAgICAgIEpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9ucE9iamVj
dC0+X2NsYXNzLT5jb25zdHJ1Y3QobV9ucE9iamVjdCwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1l
bnRDb3VudCwgJnJlc3VsdCk7CiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2Jh
bEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgIH0KQEAgLTM0MCw3ICszNDEsNyBAQCB2
b2lkIEpTTlBPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTCiAgICAgTlBSdW50aW1lT2Jq
ZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKHRoaXNPYmplY3QtPm1fb2JqZWN0TWFw
KTsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAg
dGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5zZXRQcm9wZXJ0eSh0aGlzT2JqZWN0LT5t
X25wT2JqZWN0LCBucElkZW50aWZpZXIsICZ2YXJpYW50KTsKIAogICAgICAgICBOUFJ1bnRpbWVP
YmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKQEAgLTM4MCw3
ICszODEsNyBAQCBib29sIEpTTlBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0CiAgICAg
TlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKG1fb2JqZWN0TWFw
KTsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgICAg
ICAvLyBGSVhNRTogU2hvdWxkIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiByZW1vdmVQcm9wZXJ0
eSByZXR1cm5zIGZhbHNlPwogICAgICAgICBpZiAoIW1fbnBPYmplY3QtPl9jbGFzcy0+cmVtb3Zl
UHJvcGVydHkobV9ucE9iamVjdCwgcHJvcGVydHlOYW1lKSkKQEAgLTQxMyw3ICs0MTQsNyBAQCB2
b2lkIEpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAgTlBSdW50aW1lT2Jq
ZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKHRoaXNPYmplY3QtPm1fb2JqZWN0TWFw
KTsKICAgICAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAg
ICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSB0aHJvdyBhbiBleGNlcHRpb24gaWYgZW51bWVyYXRl
IHJldHVybnMgZmFsc2U/CiAgICAgICAgIGlmICghdGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2Ns
YXNzLT5lbnVtZXJhdGUodGhpc09iamVjdC0+bV9ucE9iamVjdCwgJmlkZW50aWZpZXJzLCAmaWRl
bnRpZmllckNvdW50KSkKQEAgLTQ2MSw3ICs0NjIsNyBAQCBKU1ZhbHVlIEpTTlBPYmplY3Q6OnBy
b3BlcnR5R2V0dGVyKEV4ZWNTCiAgICAgCiAgICAgYm9vbCByZXR1cm5WYWx1ZTsKICAgICB7Ci0g
ICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIE5QSWRlbnRpZmllciBu
cElkZW50aWZpZXIgPSBucElkZW50aWZpZXJGcm9tSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICByZXR1cm5WYWx1ZSA9IHRoaXNPYmotPm1fbnBPYmplY3QtPl9jbGFzcy0+Z2V0UHJv
cGVydHkodGhpc09iai0+bV9ucE9iamVjdCwgbnBJZGVudGlmaWVyLCAmcmVzdWx0KTsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBK
U09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpoYXNNZXRob2QoTlBJ
ZGVudGlmaWVyIAogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRl
bnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApKTsgICAgCiAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKQEAgLTExOSw3ICsxMTksNyBAQCBib29sIE5QSlNPYmpl
Y3Q6Omludm9rZShOUElkZW50aWZpZXIgbWV0CiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBt
X2pzT2JqZWN0LT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlk
ZW50aWZpZXJSZXApKTsKICAgICByZXR1cm4gaW52b2tlKGV4ZWMsIG1fb2JqZWN0TWFwLT5nbG9i
YWxPYmplY3QoKSwgZnVuY3Rpb24sIGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVzdWx0KTsK
QEAgLTEzMSw3ICsxMzEsNyBAQCBib29sIE5QSlNPYmplY3Q6Omludm9rZURlZmF1bHQoY29uc3Qg
TlBWCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG1fanNPYmplY3QuZ2V0KCk7CiAgICAgcmV0dXJu
IGludm9rZShleGVjLCBtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCksIGZ1bmN0aW9uLCBhcmd1
bWVudHMsIGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7CkBAIC0xNDUsNyArMTQ1LDcgQEAgYm9vbCBO
UEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGlmICghZXhlYykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBib29sIHJlc3VsdDsK
ICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkKQEAgLTE2NSw3ICsxNjUsNyBAQCBi
b29sIE5QSlNPYmplY3Q6OmdldFByb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgaWYgKCFleGVjKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUganNSZXN1
bHQ7CiAgICAgaWYgKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpCiAgICAgICAgIGpzUmVzdWx0
ID0gbV9qc09iamVjdC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVj
LCBpZGVudGlmaWVyUmVwKSk7CkBAIC0xODUsNyArMTg1LDcgQEAgYm9vbCBOUEpTT2JqZWN0Ojpz
ZXRQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBtX29iamVj
dE1hcC0+Y29udmVydE5QVmFyaWFudFRvSlNWYWx1ZShleGVjLCBtX29iamVjdE1hcC0+Z2xvYmFs
T2JqZWN0KCksICp2YWx1ZSk7CiAgICAgaWYgKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpIHsK
QEAgLTIwNiw3ICsyMDYsNyBAQCBib29sIE5QSlNPYmplY3Q6OnJlbW92ZVByb3BlcnR5KE5QSWRl
bnRpCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKSB7CiAgICAgICAgIElkZW50aWZp
ZXIgaWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVjLCBpZGVudGlm
aWVyUmVwKTsKICAgICAgICAgCkBAIC0yMzUsNyArMjM1LDcgQEAgYm9vbCBOUEpTT2JqZWN0Ojpl
bnVtZXJhdGUoTlBJZGVudGlmaWVyKgogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0
eU5hbWVzKGV4ZWMpOwogICAgIG1fanNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5
TmFtZXMobV9qc09iamVjdC5nZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRF
bnVtUHJvcGVydGllcyk7CkBAIC0yNTcsNyArMjU3LDcgQEAgYm9vbCBOUEpTT2JqZWN0Ojpjb25z
dHJ1Y3QoY29uc3QgTlBWYXJpYQogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAg
ICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBnZXRDb25zdHJ1Y3REYXRhKG1fanNPYmpl
Y3QuZ2V0KCksIGNvbnN0cnVjdERhdGEpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVj
dE1hcC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzksNyArMTM5LDcgQEAgSlNWYWx1ZSBOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnROUFZh
cgogCiB2b2lkIE5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIE5QVmFyaWFudCYgdmFyaWFudCkKIHsKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogCiAgICAgVk9JRF9UT19OUFZBUklBTlQodmFyaWFudCk7CiAgICAgCkBAIC0x
ODYsNyArMTg2LDcgQEAgYm9vbCBOUFJ1bnRpbWVPYmplY3RNYXA6OmV2YWx1YXRlKE5QT2JqZQog
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAg
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGdldE9yQ3JlYXRlSlNPYmpl
Y3QoZ2xvYmFsT2JqZWN0LmdldCgpLCBucE9iamVjdCk7CiAKICAgICBnbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwpAQCAtMjY2LDcgKzI2Niw3IEBAIHZv
aWQgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXAKICAgICAgICAgcmV0dXJuOwog
CiAgICAgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVFcnJvcihleGVjLCBzdHJpbmdUb1VTdHJpbmcoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkp
KSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDIsNyAr
NjQyLDcgQEAgSlNWYWx1ZVJlZiBXZWJGcmFtZTo6anNXcmFwcGVyRm9yV29ybGQoSQogICAgIEpT
RE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSBtX2NvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9i
amVjdCh3b3JsZC0+Y29yZVdvcmxkKCkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICByZXR1cm4gdG9SZWYoZXhl
YywgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIG5vZGVIYW5kbGUtPmNvcmVOb2RlKCkpKTsKIH0K
IApAQCAtNjU0LDcgKzY1NCw3IEBAIEpTVmFsdWVSZWYgV2ViRnJhbWU6OmpzV3JhcHBlckZvcldv
cmxkKEkKICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0ID0gbV9jb3JlRnJhbWUtPnNjcmlw
dCgpLT5nbG9iYWxPYmplY3Qod29ybGQtPmNvcmVXb3JsZCgpKTsKICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgcmV0
dXJuIHRvUmVmKGV4ZWMsIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCByYW5nZUhhbmRsZS0+Y29y
ZVJhbmdlKCkpKTsKIH0KIApAQCAtNjcxLDcgKzY3MSw3IEBAIEpTVmFsdWVSZWYgV2ViRnJhbWU6
OmNvbXB1dGVkU3R5bGVJbmNsdWQKIAogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24+IHN0eWxlID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoc3RhdGlj
X2Nhc3Q8SlNFbGVtZW50Kj4odG9KUyhlbGVtZW50KSktPmltcGwoKSwgdHJ1ZSk7CiAKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgIHJldHVybiB0b1JlZihleGVjLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
c3R5bGUuZ2V0KCkpKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODE1LDcg
KzE4MTUsNyBAQCB2b2lkIFdlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZShjCiAgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFJlc3VsdFZhbHVlOwogICAg
IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZTsKIAotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBpZiAoSlNWYWx1ZSByZXN1bHRWYWx1ZSA9
IG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoc2NyaXB0
LCB0cnVlKS5qc1ZhbHVlKCkpIHsKICAgICAgICAgaWYgKChzZXJpYWxpemVkUmVzdWx0VmFsdWUg
PSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShtX21haW5GcmFtZS0+anNDb250ZXh0KCks
IHRvUmVmKG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCht
YWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSwgcmVzdWx0VmFsdWUpLCAwKSkp
CiAgICAgICAgICAgICBkYXRhUmVmZXJlbmNlID0gc2VyaWFsaXplZFJlc3VsdFZhbHVlLT5kYXRh
KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyMiBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdA
YXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2VkIGFs
bCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9s
ZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUg
Y29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3Rl
Y3Rpb24uCisKKyAgICAgICAgKiBBcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHA6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OmNsZWFyTWVtb3J5Q2FjaGVzKToKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9DbGllbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1Bh
Z2VQb3B1cEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVBvcHVwQmxhY2tC
ZXJyeTo6aW5zdGFsbERvbUZ1bmN0aW9uKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydC5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OmNv
bXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyk6CisKIDIwMTItMDYtMjEgIE1pa2UgRmVu
dG9uICA8bWlmZW50b25AcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gSW5wdXQgbW9k
ZSBzaG91bGQgYWRhcHQgYXV0b21hdGljYWxseSB0byBzZXR0aW5ncyBjaGFuZ2VzCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JsYWNrQmVycnlHbG9iYWwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAJ
KHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmxhY2tC
ZXJyeUdsb2JhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsMTAgQEAgdm9pZCBj
bGVhck1lbW9yeUNhY2hlcygpCiAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OnVzZXJJbnRlcmZh
Y2VUaHJlYWRNZXNzYWdlQ2xpZW50KCktPmRpc3BhdGNoTWVzc2FnZShCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6Y3JlYXRlRnVuY3Rpb25DYWxsTWVzc2FnZShjbGVhck1lbW9yeUNhY2hlc0luQ29tcG9z
aXRpbmdUaHJlYWQpKTsKICNlbmRpZgogCi0gICAgY29sbGVjdEphdmFzY3JpcHRHYXJiYWdlTm93
KCk7CisgICAgeworICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpj
b21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIGNvbGxlY3RKYXZhc2NyaXB0R2FyYmFnZU5v
dygpOworICAgIH0KIAogICAgIC8vIENsZWFuIGNhY2hlcyBhZnRlciBKUyBnYXJiYWdlIGNvbGxl
Y3Rpb24gYmVjYXVzZSBKUyBHQyBjYW4KICAgICAvLyBnZW5lcmF0ZSBtb3JlIGRlYWQgcmVzb3Vy
Y2VzLgpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NsaWVu
dEV4dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DbGllbnRFeHRlbnNpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NCwxMSArODQsMTEgQEAgc3RhdGljIEpTU3RhdGljVmFsdWUg
Y2xpZW50RXh0ZW5zaW9uU3RhdAogLy8gRklYTUU6IFJldmlzaXQgdGhlIGNyZWF0aW9uIG9mIHRo
aXMgY2xhc3MgYW5kIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBiZXN0IHdheSB0byBhcHByb2FjaCBp
dC4KIHZvaWQgYXR0YWNoRXh0ZW5zaW9uT2JqZWN0VG9GcmFtZShGcmFtZSogZnJhbWUsIFdlYlBh
Z2VDbGllbnQqIGNsaWVudCkKIHsKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKLQogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBmcmFtZS0+c2NyaXB0
KCktPndpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+d2luZG93KCk7CiAKICAg
ICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisKICAgICBKU0NvbnRleHRSZWYgc2NyaXB0Q3R4ID0g
dG9SZWYoZXhlYyk7CiAKICAgICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0ga0pTQ2xh
c3NEZWZpbml0aW9uRW1wdHk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29y
ZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1BhZ2VQb3B1cEJsYWNrQmVycnkuY3BwCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiwxMyArMTIy
LDEyIEBAIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHBvcFVwRXh0ZW5zaW9uU3RhdGkKIAogdm9pZCBQ
YWdlUG9wdXBCbGFja0JlcnJ5OjppbnN0YWxsRG9tRnVuY3Rpb24oRnJhbWUqIGZyYW1lKQogewot
ICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAg
SlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZnJhbWUsIG1haW5UaHJlYWROb3Jt
YWxXb3JsZCgpKTsKICAgICBBU1NFUlQod2luZG93KTsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBl
eGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKGV4ZWMpOworICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IDo6
dG9SZWYoZXhlYyk7CiAgICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0R2V0
R2xvYmFsT2JqZWN0KGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnQu
Y3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEs
OCArMTQxLDggQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OnNjYWxlUGFnZUJ5KAogCiBK
U1ZhbHVlUmVmIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zp
c2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQogewotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBpZiAo
IXZhbHVlKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2VmbC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJn
ICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVy
LUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRo
ZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNv
bnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAg
ICAgIG5lZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBld2svZXdrX2ZyYW1lLmNwcDoKKyAg
ICAgICAgKGV3a19mcmFtZV9zY3JpcHRfZXhlY3V0ZSk6CisgICAgICAgICogZXdrL2V3a192aWV3
LmNwcDoKKyAgICAgICAgKGV3a192aWV3X2pzX29iamVjdF9hZGQpOgorCiAyMDEyLTA2LTE5ICBT
ZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIENhbGxp
bmcgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBjYXVzZXMgYXNzZXJ0aW9uIGZhaWx1cmU6
IG1fdmVyaWZpZXIuaXNTYWZlVG9Vc2UoKQpJbmRleDogU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19mcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFt
ZS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTUsOCArNDU1LDggQEAgY2hhciogZXdrX2ZyYW1l
X3NjcmlwdF9leGVjdXRlKEV2YXNfT2JqZQogICAgIGlmICghcmVzdWx0IHx8ICghcmVzdWx0Lmlz
Qm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpKQog
ICAgICAgICByZXR1cm4gMDsKIAotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gc21hcnREYXRhLT5mcmFt
ZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQo
KSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IHJlc3VsdFN0cmluZyA9IFdlYkNvcmU6OnVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICByZXR1cm4gc3RyZHVwKHJlc3VsdFN0cmluZy51dGY4
KCkuZGF0YSgpKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAJKHJl
dmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwNDUsOCArNDA0NSw4IEBAIEVpbmFfQm9vbCBld2tfdmlld19qc19v
YmplY3RfYWRkKEV2YXNfT2IKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgZmFsc2UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFy
dERhdGEsIHByaXYsIGZhbHNlKTsKIAotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOwogICAgIFdlYkNvcmU6OkpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pT
RE9NV2luZG93KHByaXYtPm1haW5GcmFtZSwgV2ViQ29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxk
KCkpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sod2luZG93LT5nbG9iYWxFeGVjKCkpOwog
ICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3Q7CiAgICAgcm9vdCA9IHByaXYtPm1h
aW5GcmFtZS0+c2NyaXB0KCktPmJpbmRpbmdSb290T2JqZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJl
cmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBw
ZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2Ug
dGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMg
Y29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAg
ICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGs6OmdjQ291bnRKYXZhc2NyaXB0T2JqZWN0cyk6CisKIDIwMTItMDYtMjEgIERhbmllbCBEcmFr
ZSAgPGRzZEBsYXB0b3Aub3JnPgogCiAgICAgICAgIFtHVEtdIEJhY2twb3J0IHJ1bi1maWxlLWNo
b29zZXIgdG8gV2ViS2l0MQpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDAsNyArNjAwLDcgQEAgdm9p
ZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdjQ29sbGVjdAogCiB1bnNpZ25lZCBsb25nIER1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2NDb3VudEphdmFzY3JpcHRPYmplY3RzKCkKIHsKLSAg
ICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAg
ICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RD
b3VudCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2OCBA
QAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0
IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAg
IGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91
dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisKKyAg
ICAgICAgKiBET00vV2ViRE9NT3BlcmF0aW9ucy5tbToKKyAgICAgICAgKEpTQyk6CisgICAgICAg
ICogTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3Rp
Y3MgamF2YVNjcmlwdE9iamVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGlj
cyBqYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0
aXN0aWNzIGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnRdKToKKyAgICAgICAgKCtbV2Vi
Q29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3RlZEdsb2JhbE9iamVjdHNDb3VudF0pOgor
ICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlw
ZUNvdW50c10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0
VHlwZUNvdW50c10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBzaG91bGRQcmludEV4
Y2VwdGlvbnNdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3Mgc2V0U2hvdWxkUHJpbnRF
eGNlcHRpb25zOl0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBtZW1vcnlTdGF0aXN0
aWNzXSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRSZWZlcmVuY2Vk
T2JqZWN0c0NvdW50XSk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjppbnZva2UpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6Omludm9rZURlZmF1bHQpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eTo6Z2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aGFzTWV0aG9kKToKKyAgICAgICAgKFdlYktp
dDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjplbnVtZXJhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmFkZFZhbHVlVG9BcnJheSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bW92ZUdsb2JhbEV4Y2Vw
dGlvblRvRXhlY1N0YXRlKToKKyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3Ry
ZWFtLm1tOgorICAgICAgICAoV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OndhbnRzQWxsU3RyZWFt
cyk6CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAg
ICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzZW5kRXZlbnQ6aXNEcmF3UmVjdDpdKToKKyAgICAg
ICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHByaXZhdGVCcm93c2luZ01vZGVEaWRDaGFuZ2Vd
KToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHNldFdpbmRvd0lmTmVjZXNzYXJ5
XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBjcmVhdGVQbHVnaW5TY3JpcHRh
YmxlT2JqZWN0XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBnZXRGb3JtVmFs
dWU6XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBldmFsdWF0ZUphdmFTY3Jp
cHRQbHVnaW5SZXF1ZXN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgd2Vi
RnJhbWU6ZGlkRmluaXNoTG9hZFdpdGhSZWFzb246XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBl
UGx1Z2luVmlldyBsb2FkUGx1Z2luUmVxdWVzdDpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQ
bHVnaW5WaWV3IF9wcmludGVkUGx1Z2luQml0bWFwXSk6CisgICAgICAgICogUGx1Z2lucy9XZWJQ
bHVnaW5Db250cm9sbGVyLm1tOgorICAgICAgICAoK1tXZWJQbHVnaW5Db250cm9sbGVyIHBsdWdJ
blZpZXdXaXRoQXJndW1lbnRzOmZyb21QbHVnaW5QYWNrYWdlOl0pOgorICAgICAgICAoLVtXZWJQ
bHVnaW5Db250cm9sbGVyIHN0b3BPbmVQbHVnaW46XSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNv
bnRyb2xsZXIgZGVzdHJveU9uZVBsdWdpbjpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJv
bGxlciBzdGFydEFsbFBsdWdpbnNdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxlciBh
ZGRQbHVnaW46XSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1b
V2ViRnJhbWUgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOmZvcmNlVXNl
ckdlc3R1cmU6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0RnJvbVN0cmluZzp3aXRoR2xvYmFsT2JqZWN0OmluU2NyaXB0V29ybGQ6XSk6CisgICAg
ICAgICogV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tOgorICAgICAgICAoLVtXZWJT
Y3JpcHRDYWxsRnJhbWUgc2NvcGVDaGFpbl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJh
bWUgZXZhbHVhdGVXZWJTY3JpcHQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgor
ICAgICAgICAoK1tXZWJWaWV3IF9yZXBvcnRFeGNlcHRpb246aW5Db250ZXh0Ol0pOgorICAgICAg
ICAoLVtXZWJWaWV3IGFlRGVzY0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOl0pOgor
ICAgICAgICAoLVtXZWJWaWV3IF9jb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm86Zm9y
RWxlbWVudDpdKToKKwogMjAxMi0wNi0yMCAgR2FycmV0IEtlbGx5ICA8Z2RrQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBNb3ZpbmcgY29va2llRW5hYmxlZC9zZXRDb29raWVFbmFibGVkIGZyb20g
UGFnZSB0byBTZXR0aW5ncy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJET01PcGVy
YXRpb25zLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJET01PcGVy
YXRpb25zLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9ET00vV2Vi
RE9NT3BlcmF0aW9ucy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjcsOCArNjcsOSBAQCArIChET01F
bGVtZW50ICopX0RPTUVsZW1lbnRGcm9tSlNDb250ZXh0CiAgICAgaWYgKCF2YWx1ZSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwot
ICAgIHJldHVybiBraXQodG9FbGVtZW50KHRvSlModG9KUyhjb250ZXh0KSwgdmFsdWUpKSk7Cisg
ICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKKyAgICByZXR1cm4ga2l0KHRvRWxlbWVudCh0b0pTKGV4ZWMsIHZhbHVlKSkpOwog
fQogCiAtIChOU1N0cmluZyAqKV9tYXJrZXJUZXh0Rm9yTGlzdEl0ZW0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkocmV2aXNpb24gMTIwOTI2KQor
KysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNTgsMzEgKzU4LDMxIEBAICsgKE5TQXJyYXkgKilzdGF0aXN0aWNzCiAKICsgKHNp
emVfdClqYXZhU2NyaXB0T2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKIH0KIAogKyAoc2l6ZV90KWphdmFTY3JpcHRHbG9i
YWxPYmplY3RzQ291bnQKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5n
bG9iYWxPYmplY3RDb3VudCgpOwogfQogCiArIChzaXplX3QpamF2YVNjcmlwdFByb3RlY3RlZE9i
amVjdHNDb3VudAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3Rl
Y3RlZE9iamVjdENvdW50KCk7CiB9CiAKICsgKHNpemVfdClqYXZhU2NyaXB0UHJvdGVjdGVkR2xv
YmFsT2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwogICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAu
cHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKTsKIH0KIAogKyAoTlNDb3VudGVkU2V0ICopamF2
YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpj
b21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgCiAgICAgTlNDb3VudGVkU2V0ICpyZXN1bHQgPSBb
TlNDb3VudGVkU2V0IHNldF07CiAKQEAgLTk3LDcgKzk3LDcgQEAgKyAoTlNDb3VudGVkU2V0ICop
amF2YVNjcmlwdFByb3RlY3RlZE9iagogCiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0T2Jq
ZWN0VHlwZUNvdW50cwogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICAKICAgICBOU0NvdW50ZWRTZXQgKnJlc3VsdCA9IFtOU0NvdW50ZWRTZXQgc2V0XTsK
IApAQCAtMTY3LDEzICsxNjcsMTMgQEAgKyAoc2l6ZV90KWdseXBoUGFnZUNvdW50CiAKICsgKEJP
T0wpc2hvdWxkUHJpbnRFeGNlcHRpb25zCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBDb25zb2xlOjpzaG91bGRQcmludEV4Y2VwdGlvbnMo
KTsKIH0KIAogKyAodm9pZClzZXRTaG91bGRQcmludEV4Y2VwdGlvbnM6KEJPT0wpcHJpbnQKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgQ29uc29sZTo6
c2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zKHByaW50KTsKIH0KIApAQCAtMjAxLDcgKzIwMSw3IEBA
ICsgKE5TRGljdGlvbmFyeSAqKW1lbW9yeVN0YXRpc3RpY3MKIHsKICAgICBXVEY6OkZhc3RNYWxs
b2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0TWFsbG9jU3RhdGlz
dGljcygpOwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICBzaXplX3QgaGVhcFNpemUgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkt
PmhlYXAuc2l6ZSgpOwogICAgIHNpemVfdCBoZWFwRnJlZSA9IEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKS0+aGVhcC5jYXBhY2l0eSgpIC0gaGVhcFNpemU7CiAgICAgR2xvYmFsTWVt
b3J5U3RhdGlzdGljcyBnbG9iYWxNZW1vcnlTdGF0cyA9IGdsb2JhbE1lbW9yeVN0YXRpc3RpY3Mo
KTsKQEAgLTI0NSw3ICsyNDUsNyBAQCArIChzaXplX3QpamF2YVNjcmlwdE5vR0NBbGxvd2VkT2Jq
ZWN0c0NvCiAKICsgKHNpemVfdClqYXZhU2NyaXB0UmVmZXJlbmNlZE9iamVjdHNDb3VudAogewot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICByZXR1cm4gSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVn
aW5TdHJlYW0ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJO
ZXRzY2FwZVBsdWdpblN0cmVhbS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzY4LDcgKzM2OCw3IEBAIGJvb2wgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OndhbnRzQWxs
U3QKICAgICBOUEVycm9yIGVycm9yOwogICAgIHsKICAgICAgICAgUGx1Z2luU3RvcERlZmVycmVy
IGRlZmVycmVyKG1fcGx1Z2luVmlldy5nZXQoKSk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIGVycm9yID0gbV9wbHVnaW5GdW5jcy0+
Z2V0dmFsdWUobV9wbHVnaW4sIE5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zLCAmdmFs
dWUpOwogICAgIH0KICAgICBpZiAoZXJyb3IgIT0gTlBFUlJfTk9fRVJST1IpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQko
cmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2Fw
ZVBsdWdpblZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTY2OSw3ICs2NjksNyBAQCAtIChCT09M
KXNlbmRFdmVudDoodm9pZCopZXZlbnQgaXNEcmF3UmVjCiAgICAgLy8gU2V0IHRoZSBwbHVnaW5B
bGxvd1BvcHVwIGZsYWcuCiAgICAgQVNTRVJUKF9ldmVudEhhbmRsZXIpOwogICAgIHsKLSAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgVXNl
ckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihfZXZlbnRIYW5kbGVyLT5jdXJyZW50
RXZlbnRJc1VzZXJHZXN0dXJlKCkgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDog
UG9zc2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgICAgICBhY2NlcHRlZEV2ZW50ID0g
W19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+ZXZlbnQocGx1Z2luLCBldmVudCk7
CiAgICAgfQpAQCAtODUwLDcgKzg1MCw3IEBAIC0gKHZvaWQpcHJpdmF0ZUJyb3dzaW5nTW9kZURp
ZENoYW5nZQogCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBp
ZiAoW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+c2V0dmFsdWUpCiAgICAgICAg
ICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5zZXR2YWx1ZShwbHVnaW4s
IE5QTlZwcml2YXRlTW9kZUJvb2wsICZ2YWx1ZSk7CiAgICAgfQpAQCAtOTkxLDcgKzk5MSw3IEBA
IC0gKHZvaWQpc2V0V2luZG93SWZOZWNlc3NhcnkKICAgICAgICAgaW5TZXRXaW5kb3cgPSBZRVM7
ICAgICAgICAKICAgICAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgICAg
IHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwogICAgICAgICAgICAgbnBFcnIgPSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVu
Y3NdLT5zZXR3aW5kb3cocGx1Z2luLCAmd2luZG93KTsKICAgICAgICAgfQogICAgICAgICBbc2Vs
ZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAgLSAoTlBPYmpl
Y3QgKiljcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZQogICAgIE5QRXJyb3IgZXJyb3I7CiAgICAg
W3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBlcnJvciA9IFtfcGx1Z2lu
UGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwgTlBQVnBsdWdpblNj
cmlwdGFibGVOUE9iamVjdCwgJnZhbHVlKTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJ
bkZ1bmN0aW9uXTsKQEAgLTE0NjMsNyArMTQ2Myw3IEBAIC0gKEJPT0wpZ2V0Rm9ybVZhbHVlOihO
U1N0cmluZyAqKil2YWx1ZQogICAgIE5QRXJyb3IgZXJyb3I7CiAgICAgW3NlbGYgd2lsbENhbGxQ
bHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBlcnJvciA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBw
bHVnaW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwgTlBQVmZvcm1WYWx1ZSwgJmJ1ZmZlcik7CiAg
ICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNTk1LDcgKzE1OTUs
NyBAQCAtICh2b2lkKWV2YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6CiAgICAgICAgIGlm
IChbSlNQbHVnaW5SZXF1ZXN0IHNlbmROb3RpZmljYXRpb25dKSB7CiAgICAgICAgICAgICBbc2Vs
ZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAg
ICAgICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJsbm90aWZ5
KHBsdWdpbiwgW1VSTCBfd2ViX1VSTENTdHJpbmddLCBOUFJFU19ET05FLCBbSlNQbHVnaW5SZXF1
ZXN0IG5vdGlmeURhdGFdKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFtzZWxmIGRpZENh
bGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNjI3LDcgKzE2MjcsNyBAQCAtICh2b2lkKXdlYkZyYW1l
OihXZWJGcmFtZSAqKXdlYkZyYW1lIGRpCiAgICAgICAgIAogICAgIFtzZWxmIHdpbGxDYWxsUGx1
Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNz
XS0+dXJsbm90aWZ5KHBsdWdpbiwgW1tbcGx1Z2luUmVxdWVzdCByZXF1ZXN0XSBVUkxdIF93ZWJf
VVJMQ1N0cmluZ10sIHJlYXNvbiwgW3BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgIH0K
ICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTY3MSw3ICsxNjcxLDcgQEAg
LSAodm9pZClsb2FkUGx1Z2luUmVxdWVzdDooV2ViUGx1Z2luUmVxdQogICAgICAgICAgICAgICAg
IGlmIChbcGx1Z2luUmVxdWVzdCBzZW5kTm90aWZpY2F0aW9uXSkgewogICAgICAgICAgICAgICAg
ICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBbX3Bs
dWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbW1twbHVn
aW5SZXF1ZXN0IHJlcXVlc3RdIFVSTF0gX3dlYl9VUkxDU3RyaW5nXSwgTlBFUlJfR0VORVJJQ19F
UlJPUiwgW3BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0y
NDcxLDcgKzI0NzEsNyBAQCAtIChOU0JpdG1hcEltYWdlUmVwICopX3ByaW50ZWRQbHVnaW5CaXRt
CiAgICAgLy8gVGVsbCB0aGUgcGx1Z2luIHRvIHByaW50IGludG8gdGhlIEdXb3JsZAogICAgIFtz
ZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdl
dCgpIHBsdWdpbkZ1bmNzXS0+cHJpbnQocGx1Z2luLCAmbnBQcmludCk7CiAgICAgfQogICAgIFtz
ZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTk2LDEwICs5NiwxMCBAQCArIChOU1ZpZXcgKilwbHVnSW5WaWV3V2l0aEFyZ3Vt
ZW50czooTlNECiAgICAgTlNWaWV3ICp2aWV3ID0gbmlsOwogCiAgICAgaWYgKFt2aWV3RmFjdG9y
eSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdJblZpZXdXaXRoQXJndW1lbnRzOild
KSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAg
ICAgICAgIHZpZXcgPSBbdmlld0ZhY3RvcnkgcGx1Z0luVmlld1dpdGhBcmd1bWVudHM6YXJndW1l
bnRzXTsKICAgICB9IGVsc2UgaWYgKFt2aWV3RmFjdG9yeSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHBsdWdpblZpZXdXaXRoQXJndW1lbnRzOildKSB7Ci0gICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHZpZXcgPSBbdmlld0ZhY3Rv
cnkgcGx1Z2luVmlld1dpdGhBcmd1bWVudHM6YXJndW1lbnRzXTsKICAgICB9CiAgICAgCkBAIC0x
NDksMTAgKzE0OSwxMCBAQCAtICh2b2lkKWRlYWxsb2MKIC0gKHZvaWQpc3RvcE9uZVBsdWdpbjoo
TlNWaWV3ICopdmlldwogewogICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKHdlYlBsdWdJblN0b3ApXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBbdmlldyB3ZWJQbHVnSW5TdG9wXTsKICAgICB9IGVs
c2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luU3RvcCldKSB7
Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAg
ICAgIFt2aWV3IHBsdWdpblN0b3BdOwogICAgIH0KIH0KQEAgLTE2MCwxMCArMTYwLDEwIEBAIC0g
KHZvaWQpc3RvcE9uZVBsdWdpbjooTlNWaWV3ICopdmlldwogLSAodm9pZClkZXN0cm95T25lUGx1
Z2luOihOU1ZpZXcgKil2aWV3CiB7CiAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3Iod2ViUGx1Z0luRGVzdHJveSldKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIFt2aWV3IHdlYlBsdWdJbkRlc3Ryb3ld
OwogICAgIH0gZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVn
aW5EZXN0cm95KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICAgICAgW3ZpZXcgcGx1Z2luRGVzdHJveV07CiAgICAgfQogfQpAQCAtMTgw
LDEwICsxODAsMTAgQEAgLSAodm9pZClzdGFydEFsbFBsdWdpbnMKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgaWQgYVZpZXcgPSBbX3ZpZXdzIG9iamVjdEF0
SW5kZXg6aV07CiAgICAgICAgIGlmIChbYVZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cih3ZWJQbHVnSW5TdGFydCldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIFthVmlldyB3ZWJQbHVnSW5TdGFy
dF07CiAgICAgICAgIH0gZWxzZSBpZiAoW2FWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IocGx1Z2luU3RhcnQpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBbYVZpZXcgcGx1Z2luU3RhcnRdOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMjUyLDEwICsyNTIsMTAgQEAgLSAodm9pZClhZGRQbHVnaW46
KE5TVmlldyAqKXZpZXcKIAogICAgICAgICBMT0coUGx1Z2lucywgImluaXRpYWxpemluZyBwbHVn
LWluICVAIiwgdmlldyk7CiAgICAgICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHdlYlBsdWdJbkluaXRpYWxpemUpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBbdmlldyB3ZWJQ
bHVnSW5Jbml0aWFsaXplXTsKICAgICAgICAgfSBlbHNlIGlmIChbdmlldyByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKHBsdWdpbkluaXRpYWxpemUpXSkgewotICAgICAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBbdmll
dyBwbHVnaW5Jbml0aWFsaXplXTsKICAgICAgICAgfQogCkBAIC0yNjUsMTUgKzI2NSwxNSBAQCAt
ICh2b2lkKWFkZFBsdWdpbjooTlNWaWV3ICopdmlldwogICAgICAgICBpZiAoX3N0YXJ0ZWQpIHsK
ICAgICAgICAgICAgIExPRyhQbHVnaW5zLCAic3RhcnRpbmcgcGx1Zy1pbiAlQCIsIHZpZXcpOwog
ICAgICAgICAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1
Z0luU3RhcnQpXSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgICAgICBbdmlldyB3ZWJQbHVnSW5T
dGFydF07CiAgICAgICAgICAgICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IocGx1Z2luU3RhcnQpXSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgICAgICBbdmll
dyBwbHVnaW5TdGFydF07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldENvbnRhaW5pbmdXaW5k
b3c6KV0pIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICAgICAgW3ZpZXcgc2V0Q29udGFpbmluZ1dp
bmRvdzpbX2RvY3VtZW50VmlldyB3aW5kb3ddXTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9z
dGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysg
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NjcsOCArODY3LDcgQEAgYm9vbCBOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAg
CisgICAgSlNMb2NrSG9sZGVyIGxvY2socGx1Z2luV29ybGQoKS0+Z2xvYmFsRGF0YSgpKTsKICAg
ICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCgqcGx1Z2luV29ybGQoKS0+Z2xv
YmFsRGF0YSgpLCBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKQEAg
LTkwNCw3ICs5MDMsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tl
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFt
ZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVjdC0+Z2V0KGV4ZWMsIG1l
dGhvZE5hbWUpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBl
ID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKQEAgLTkzNyw3ICs5MzYsNyBAQCBi
b29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2Jh
bE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAg
ICAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IG9iamVj
dC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEob2JqZWN0LCBjYWxsRGF0YSk7CiAgICAgaWYg
KGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTk2OSw3ICs5NjgsNyBAQCBib29sIE5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y29uc3RyCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChw
bHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBDb25zdHJ1
Y3REYXRhIGNvbnN0cnVjdERhdGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0g
b2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDb25zdHJ1Y3REYXRhKG9iamVjdCwgY29uc3RydWN0
RGF0YSk7CkBAIC0xMDAyLDcgKzEwMDEsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6Z2V0UHJvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xv
YmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7ICAgIAor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICBKU1ZhbHVlIHZhbHVlID0gb2Jq
ZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhl
YywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7CkBAIC0xMDIzLDcgKzEwMjIsNyBA
QCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmds
b2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OyAgICAKICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1l
KTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3Vs
dExlbmd0aCk7CkBAIC0xMDQ3LDcgKzEwNDYsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6c2V0UHJvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+
Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7ICAg
IAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKIAogICAgIEpTVmFsdWUgdmFsdWUg
PSBkZW1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdDsKQEAgLTEwNzMsNyArMTA3Miw3IEBAIGJvb2wgTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjpzZXRQcm8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldv
cmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsgICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIAogICAgIEpT
VmFsdWUgdmFsdWUgPSBkZW1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3Ro
KTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBmYWxzZSk7CkBAIC0xMDk4LDEyICsxMDk3LDEyIEBAIGJvb2wg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmUKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3Qo
cGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICBpZiAoIW9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkgewog
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSk7CiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsgICAgCiAgICAgcmV0dXJuIHRy
dWU7CkBAIC0xMTI1LDEyICsxMTI0LDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpyZW1vdmUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9i
YWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgaWYgKCFvYmplY3Qt
Pmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUo
KS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOyAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExOTYs
NyArMTE5NSw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNNZXQKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5z
Y3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICBKU1ZhbHVlIGZ1bmMgPSBvYmplY3QtPmdldChleGVjLCBtZXRob2ROYW1l
KTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiAhZnVuYy5pc1VuZGVm
aW5lZCgpOwpAQCAtMTIxOCw3ICsxMjE3LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OmVudW1lcgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRXhlY1N0YXRl
KiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmds
b2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3Bl
cnR5TmFtZXMoZXhlYyk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQcm9wZXJ0eU5h
bWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRFbnVtUHJvcGVydGll
cyk7CkBAIC0xMjYyLDcgKzEyNjEsNyBAQCBzdGF0aWMgYm9vbCBnZXRPYmplY3RJRChOZXRzY2Fw
ZVBsdWdpbkluCiAgICAgCiB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6YWRkVmFs
dWVUb0FycmF5KE5TTXV0YWJsZUFycmF5ICphcnJheSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewog
ICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50OlN0cmluZ1Zh
bHVlVHlwZV1dOwpAQCAtMTY3Miw3ICsxNjcxLDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6Om1vdmVHbAogICAgICAgICByZXR1cm47CiAKICAgICB7Ci0gICAgICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIHN0cmlu
Z1RvVVN0cmluZyhnbG9iYWxFeGNlcHRpb25TdHJpbmcoKSkpKTsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA0
LDcgKzEwNCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBKU0M6OkpTR2xv
YmFsT2JqZWN0OwogdXNpbmcgSlNDOjpKU0xvY2s7CiB1c2luZyBKU0M6OkpTVmFsdWU7Ci11c2lu
ZyBKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seTsKIAogLyoKIEhlcmUgaXMgdGhlIGN1cnJlbnQg
YmVoYXZpb3IgbWF0cml4IGZvciBmb3VyIHR5cGVzIG9mIG5hdmlnYXRpb25zOgpAQCAtNTk3LDgg
KzU5Niw4IEBAIC0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3IKICAgICBp
ZiAoIXJlc3VsdCB8fCAoIXJlc3VsdC5pc0Jvb2xlYW4oKSAmJiAhcmVzdWx0LmlzU3RyaW5nKCkg
JiYgIXJlc3VsdC5pc051bWJlcigpKSkKICAgICAgICAgcmV0dXJuIEAiIjsKIAotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWRO
b3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpKTsKIH0KIApAQCAtMTEyMyw4ICsxMTIyLDggQEAgLSAoTlNTdHJpbmcgKilf
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcgogICAgIGlmICghcmVzdWx0IHx8ICghcmVzdWx0Lmlz
Qm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpKQog
ICAgICAgICByZXR1cm4gQCIiOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGFueVdvcmxkR2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICByZXR1
cm4gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdh
dGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHRE
ZWJ1Z0RlbGVnYXRlLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3NCw5
ICsxNzQsOSBAQCAtIChOU0FycmF5ICopc2NvcGVDaGFpbgogICAgIGlmICghX3ByaXZhdGUtPmRl
YnVnZ2VyQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXldOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluID0gX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lLT5zY29wZUNoYWluKCk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSk7CiAgICAgaWYg
KCFzY29wZUNoYWluLT5uZXh0KSAgLy8gZ2xvYmFsIGZyYW1lCiAgICAgICAgIHJldHVybiBbTlNB
cnJheSBhcnJheVdpdGhPYmplY3Q6X3ByaXZhdGUtPmdsb2JhbE9iamVjdF07CiAKQEAgLTIyOSwx
MyArMjI5LDEzIEBAIC0gKGlkKWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmluZyAqKXNjcmkKICAg
ICBpZiAoIV9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsK
IAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICAvLyBJZiB0
aGlzIGlzIHRoZSBnbG9iYWwgY2FsbCBmcmFtZSBhbmQgdGhlcmUgaXMgbm8gZHluYW1pYyBnbG9i
YWwgb2JqZWN0LAogICAgIC8vIERhc2hjb2RlIGlzIGF0dGVtcHRpbmcgdG8gZXhlY3V0ZSBKUyBp
biB0aGUgZXZhbHVhdG9yIHVzaW5nIGEgc3RhbGUKICAgICAvLyBXZWJTY3JpcHRDYWxsRnJhbWUu
IEluc3RlYWQsIHdlIG5lZWQgdG8gc2V0IHRoZSBkeW5hbWljIGdsb2JhbCBvYmplY3QKICAgICAv
LyBhbmQgZXZhbHVhdGUgdGhlIEpTIGluIHRoZSBnbG9iYWwgb2JqZWN0J3MgZ2xvYmFsIGNhbGwg
ZnJhbWUuCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IF9wcml2YXRlLT5kZWJ1
Z2dlci0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCkpOworCiAgICAgaWYgKHNlbGYgPT0gX3ByaXZhdGUtPmRlYnVnZ2VyLT5n
bG9iYWxDYWxsRnJhbWUoKSAmJiAhZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuZHluYW1pY0ds
b2JhbE9iamVjdCkgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gX3By
aXZhdGUtPmRlYnVnZ2VyLT5nbG9iYWxPYmplY3QoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01ODEsOCArNTgxLDggQEAgKyAo
dm9pZClfcmVwb3J0RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4YwogICAgIGlmICghZXhjZXB0aW9u
IHx8ICFjb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjU3RhdGUgPSB0b0pTKGNv
bnRleHQpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWNTdGF0ZSk7CiAKICAgICAvLyBNYWtl
IHN1cmUgdGhlIGNvbnRleHQgaGFzIGEgRE9NV2luZG93IGdsb2JhbCBvYmplY3QsIG90aGVyd2lz
ZSB0aGlzIGNvbnRleHQgZGlkbid0IG9yaWdpbmF0ZSBmcm9tIGEgV2ViVmlldy4KICAgICBpZiAo
IXRvSlNET01XaW5kb3coZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKQpAQCAtNDg1
MSw3ICs0ODUxLDcgQEAgLSAoTlNBcHBsZUV2ZW50RGVzY3JpcHRvciAqKWFlRGVzY0J5RXZhbAog
ICAgIEpTVmFsdWUgcmVzdWx0ID0gY29yZUZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChz
Y3JpcHQsIHRydWUpLmpzVmFsdWUoKTsKICAgICBpZiAoIXJlc3VsdCkgLy8gRklYTUU6IHBhc3Mg
ZXJyb3JzCiAgICAgICAgIHJldHVybiAwOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xv
YmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpKTsKICAgICBy
ZXR1cm4gYWVEZXNjRnJvbUpTVmFsdWUoY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0
KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpLCByZXN1bHQpOwogfQogCkBA
IC02NTYwLDggKzY1NjAsOCBAQCAtICh2b2lkKV9ub3RpZmljYXRpb25zRGlkQ2xvc2U6KE5TQXJy
YXkgCiAKIC0gKEpTVmFsdWVSZWYpX2NvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbzoo
SlNDb250ZXh0UmVmKWNvbnRleHQgZm9yRWxlbWVudDooSlNWYWx1ZVJlZil2YWx1ZQogewotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBpZiAo
IXZhbHVlKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxv
ZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8
bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpT
R2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBu
ZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRl
eHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAg
IG5lZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoKKyAgICAg
ICAgKFFXZWJGcmFtZVByaXZhdGU6OmFkZFF0U2VuZGVyVG9HbG9iYWxPYmplY3QpOgorICAgICAg
ICAoUVdlYkZyYW1lOjphZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QpOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjppbmplY3RJbnRlcm5hbHNPYmplY3QpOgorICAgICAgICAoRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KToKKwogMjAxMi0wNi0y
MSAgVGhpYWdvIE1hcmNvcyBQLiBTYW50b3MgIDx0aGlhZ28uc2FudG9zQGludGVsLmNvbT4KIAog
ICAgICAgICBbV0syXVtRdF0gQ29sb3IgY2hvb3NlciBBUEkgbWlzc2luZwpJbmRleDogU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZnJhbWUuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDYsMTMgKzUwNiwxMiBA
QCBzdGF0aWMgSlNWYWx1ZVJlZiBxdFNlbmRlckNhbGxiYWNrKEpTQ29uCiAKIHZvaWQgUVdlYkZy
YW1lUHJpdmF0ZTo6YWRkUXRTZW5kZXJUb0dsb2JhbE9iamVjdCgpCiB7Ci0gICAgSlNDOjpKU0xv
Y2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyog
d2luZG93ID0gdG9KU0RPTVdpbmRvdyhmcmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwog
ICAgIFFfQVNTRVJUKHdpbmRvdyk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRv
dy0+Z2xvYmFsRXhlYygpOwogICAgIFFfQVNTRVJUKGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IDo6dG9SZWYoZXhl
Yyk7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHByb3BlcnR5TmFtZShBZG9wdCwgSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIl9fcXRfc2VuZGVyX18iKSk7CkBAIC02NTcsNyAr
NjU2LDYgQEAgdm9pZCBRV2ViRnJhbWU6OmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iagogICAgICAg
ICByZXR1cm47CiAjaWYgVVNFKEpTQykKICAgICBKU0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpW
YWx1ZU93bmVyc2hpcCB2YWx1ZU93bmVyc2hpcCA9IHN0YXRpY19jYXN0PEpTQzo6QmluZGluZ3M6
OlF0SW5zdGFuY2U6OlZhbHVlT3duZXJzaGlwPihvd25lcnNoaXApOwotICAgIEpTQzo6SlNMb2Nr
IGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTRE9NV2luZG93KiB3aW5k
b3cgPSB0b0pTRE9NV2luZG93KGQtPmZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAg
ICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdDsKICAgICBpZiAodmFsdWVPd25lcnNo
aXAgPT0gSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6UXRPd25lcnNoaXApCkBAIC02NzUsNiAr
NjczLDcgQEAgdm9pZCBRV2ViRnJhbWU6OmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iagogICAgIH0K
IAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CisgICAg
SlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTQzo6SlNPYmplY3QqIHJ1bnRp
bWVPYmplY3QgPQogICAgICAgICAgICAgSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6Z2V0UXRJ
bnN0YW5jZShvYmplY3QsIHJvb3QsIHZhbHVlT3duZXJzaGlwKS0+Y3JlYXRlUnVudGltZU9iamVj
dChleGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisr
KyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4NiwxMyArMTA4NiwxMiBAQCB2b2lkIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydFF0OjppbmplY3RJbnRlCiB7CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVG
cmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOwogI2lmIFVTRShKU0MpCi0gICAg
SlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RP
TVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhjb3JlRnJhbWUsIG1haW5UaHJlYWROb3Jt
YWxXb3JsZCgpKTsKICAgICBRX0FTU0VSVCh3aW5kb3cpOwogCiAgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKICAgICBRX0FTU0VSVChleGVjKTsKKyAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQg
PSB0b1JlZihleGVjKTsKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09i
amVjdChjb250ZXh0KTsKQEAgLTExMTMsMTMgKzExMTIsMTIgQEAgdm9pZCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdDo6cmVzZXRJbnRlcgogewogICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUg
PSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKGZyYW1lKTsKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6
SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAgSlNET01XaW5k
b3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coY29yZUZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29y
bGQoKSk7CiAgICAgUV9BU1NFUlQod2luZG93KTsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVj
ID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CiAgICAgUV9BU1NFUlQoZXhlYyk7CisgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gdG9S
ZWYoZXhlYyk7CiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpyZXNldEludGVybmFsc09iamVjdChj
b250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJj
ZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisy
MDEyLTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAg
ICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNl
ZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5k
IHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRv
IGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAg
ICAqIFdlYkNvcmVTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpq
YXZhU2NyaXB0T2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZh
U2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpq
YXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0
aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdl
YkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyk6Cisg
ICAgICAgICogV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViRnJhbWU6OnN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHRJblNjcmlwdFdvcmxkKToKKyAgICAgICAgKiBXZWJKYXZhU2NyaXB0Q29s
bGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkphdmFTY3JpcHRDb2xsZWN0b3I6Om9iamVjdENvdW50
KToKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OnN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYlZpZXc6OnJlcG9ydEV4
Y2VwdGlvbik6CisgICAgICAgIChXZWJWaWV3OjplbGVtZW50RnJvbUpTKToKKwogMjAxMi0wNi0y
MCAgR2FycmV0IEtlbGx5ICA8Z2RrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNb3ZpbmcgY29v
a2llRW5hYmxlZC9zZXRDb29raWVFbmFibGVkIGZyb20gUGFnZSB0byBTZXR0aW5ncy4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTgsNyArOTgsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0
aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKICAg
ICByZXR1cm4gU19PSzsKIH0KQEAgLTEwOSw3ICsxMDksNyBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVf
UE9JTlRFUjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAu
Z2xvYmFsT2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEyMCw3ICsxMjAs
NyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFj
b3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKICAgICByZXR1
cm4gU19PSzsKIH0KQEAgLTEzMSw3ICsxMzEsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRF
UjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291
bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVj
dGVkR2xvYmFsT2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEzOSw3ICsx
MzksNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVk
T2JqZWN0VHlwZUNvdW50cyggCiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJUHJvcGVydHlCYWcy
KiogdHlwZU5hbWVzQW5kQ291bnRzKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBqc09iamVjdFR5cGVOYW1lcyhK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0VHlw
ZUNvdW50cygpKTsKICAgICB0eXBlZGVmIFR5cGVDb3VudFNldDo6Y29uc3RfaXRlcmF0b3IgSXRl
cmF0b3I7CiAgICAgSXRlcmF0b3IgZW5kID0ganNPYmplY3RUeXBlTmFtZXMtPmVuZCgpOwpJbmRl
eDogU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktp
dC93aW4vV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDYgQEAgdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIEpTQzo6SlNHbG9iYWxPYmplY3Q7CiB1c2luZyBKU0M6
OkpTTG9jazsKIHVzaW5nIEpTQzo6SlNWYWx1ZTsKLXVzaW5nIEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5OwogCiAjZGVmaW5lIEZMQVNIX1JFRFJBVyAwCiAKQEAgLTI1MjgsOCArMjUyNyw4IEBA
IEhSRVNVTFQgV2ViRnJhbWU6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmEKICAgICBpZiAoIXJlc3Vs
dCB8fCAhcmVzdWx0LmlzQm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0
LmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBTX09LOwogCi0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGFueVdvcmxk
R2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVySG9sZGVyIGxvY2so
ZXhlYyk7CiAgICAgU3RyaW5nIHJlc3VsdFN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhyZXN1bHQu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAqZXZhbHVhdGlvblJlc3VsdCA9IEJT
dHJpbmcocmVzdWx0U3RyaW5nKS5yZWxlYXNlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2lu
L1dlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
d2luL1dlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTExLDcgKzExMSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSmF2YVNjcmlw
dEMKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCk7CiAgICAgcmV0dXJuIFNf
T0s7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291
cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOTQsOCArMzE5
NCw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6c3RyaW4KICAgICBpZiAo
IXNjcmlwdEV4ZWN1dGlvblJlc3VsdCkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKICAgICBlbHNl
IGlmIChzY3JpcHRFeGVjdXRpb25SZXN1bHQuaXNTdHJpbmcoKSkgewotICAgICAgICBKU0xvY2sg
bG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgIEpTQzo6RXhlY1N0YXRl
KiBleGVjID0gY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3Jt
YWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICAgICAgKnJlc3VsdCA9IEJTdHJpbmcodXN0cmluZ1RvU3RyaW5nKHNjcmlwdEV4ZWN1
dGlvblJlc3VsdC5nZXRTdHJpbmcoZXhlYykpKTsKICAgICB9CiAKQEAgLTU4NTEsOCArNTg1MSw4
IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6cmVwb3IKICAgICBpZiAoIWNv
bnRleHQgfHwgIWV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIEpTTG9j
ayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSog
ZXhlY1N0YXRlID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjU3Rh
dGUpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IGhhcyBhIERPTVdpbmRvdyBnbG9i
YWwgb2JqZWN0LCBvdGhlcndpc2UgdGhpcyBjb250ZXh0IGRpZG4ndCBvcmlnaW5hdGUgZnJvbSBh
IFdlYlZpZXcuCiAgICAgaWYgKCF0b0pTRE9NV2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKSkKQEAgLTU4NzgsOCArNTg3OCw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgV2ViVmlldzo6ZWxlbWUKICAgICBpZiAoIW5vZGVPYmplY3QpCiAgICAgICAgIHJldHVybiBF
X0ZBSUw7CiAKLSAgICBKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0g
ICAgRWxlbWVudCogZWx0ID0gdG9FbGVtZW50KHRvSlModG9KUyhjb250ZXh0KSwgbm9kZU9iamVj
dCkpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CisgICAgRWxlbWVudCogZWx0ID0gdG9FbGVtZW50KHRvSlMoZXhlYywg
bm9kZU9iamVjdCkpOwogICAgIGlmICghZWx0KQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148925</attachid>
            <date>2012-06-21 17:51:13 -0700</date>
            <delta_ts>2012-06-21 19:33:25 -0700</delta_ts>
            <desc>Trying to fix windows now</desc>
            <filename>bug-89123-20120621175113.patch</filename>
            <type>text/plain</type>
            <size>204580</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBA
QAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9BUElTaGltcy5oOgorICAg
ICAgICAoQVBJRW50cnlTaGltV2l0aG91dExvY2spOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNo
aW1XaXRob3V0TG9jazo6QVBJRW50cnlTaGltV2l0aG91dExvY2spOiBBZGRlZCBhbiBleHRyYSBw
YXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIHRvIAorICAgICAgICBkZXRlcm1pbmUgd2hldGhl
ciB3ZSBzaG91bGQgcmVmIHRoZSBKU0dsb2JhbERhdGEgb3Igbm90LiBXZSB3YW50IHRvIHJlZiBh
bGwgdGhlIHRpbWUgZXhjZXB0IGZvciBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBjbGFzcyBi
ZWNhdXNlIHRpbWVyRGlkRmlyZSBjb3VsZCBydW4gYWZ0ZXIgc29tZWJvZHkgaGFzIHN0YXJ0ZWQg
dG8gdGVhciBkb3duIHRoYXQgcGFydGljdWxhciAKKyAgICAgICAgSlNHbG9iYWxEYXRhLCBzbyB3
ZSB3b3VsZG4ndCB3YW50IHRvIHJlc3VycmVjdCB0aGUgcmVmIGNvdW50IG9mIHRoYXQgSlNHbG9i
YWxEYXRhIGZyb20gMCBiYWNrIHRvIDEgYWZ0ZXIgCisgICAgICAgIGl0cyBkZXN0cnVjdGlvbiBo
YXMgYmVndW4uIAorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW1XaXRob3V0TG9jazo6fkFQSUVu
dHJ5U2hpbVdpdGhvdXRMb2NrKTogTm93IGRlcmVmcyBpZiBpdCBhbHNvIHJlZmVkLgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OkFQSUVudHJ5U2hpbSk6CisgICAgICAgIChBUElFbnRyeVNo
aW0pOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW06On5BUElFbnRyeVNoaW0pOgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OmluaXQpOiBGYWN0b3JlZCBvdXQgY29tbW9uIGluaXRpYWxp
emF0aW9uIGNvZGUgZm9yIHRoZSB2YXJpb3VzIEFQSUVudHJ5U2hpbSBjb25zdHJ1Y3RvcnMuCisg
ICAgICAgIEFsc28gbW92ZWQgdGhlIHRpbWVvdXRDaGVja2VyIHN0b3AgYW5kIHN0YXJ0IGhlcmUg
YmVjYXVzZSB3ZSBuZWVkIHRvIHN0YXJ0IGFmdGVyIHdlJ3ZlIGdyYWJiZWQgdGhlIEFQSSBsb2Nr
CisgICAgICAgIGFuZCBiZWZvcmUgd2UndmUgcmVsZWFzZWQgaXQsIHdoaWNoIGNhbiBvbmx5IGRv
bmUgaW4gQVBJRW50cnlTaGltLgorICAgICAgICAoSlNDOjpBUElDYWxsYmFja1NoaW06On5BUElD
YWxsYmFja1NoaW0pOiBXZSBubyBsb25nZXIgbmVlZCB0byBzeW5jaHJvbml6ZSBoZXJlLgorICAg
ICAgICAqIEFQSS9KU0NvbnRleHRSZWYuY3BwOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0Q3Jl
YXRlKToKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXApOgorICAgICAgICAo
SlNHbG9iYWxDb250ZXh0UmVsZWFzZSk6CisgICAgICAgIChKU0NvbnRleHRDcmVhdGVCYWNrdHJh
Y2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRTcGFjZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6cHJvdGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucHJv
dGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFw
OjpzZXRBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWN0aXZpdHlDYWxs
YmFjayk6CisgICAgICAgIChKU0M6OkhlYXA6OnN3ZWVwZXIpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOiBDaGFuZ2VkIG1fYWN0aXZpdHlDYWxsYmFjayBhbmQgbV9zd2VlcGVyIHRvIGJlIHJhdyBw
b2ludGVycyByYXRoZXIgdGhhbiBPd25QdHJzIGJlY2F1c2UgdGhleSAKKyAgICAgICAgYXJlIG5v
dyByZXNwb25zaWJsZSBmb3IgdGhlaXIgb3duIGxpZmV0aW1lLiBBbHNvIGNoYW5nZWQgdGhlIG9y
ZGVyIG9mIGRlY2xhcmF0aW9uIG9mIHRoZSBHQ0FjdGl2aXR5Q2FsbGJhY2sKKyAgICAgICAgYW5k
IHRoZSBJbmNyZW1lbnRhbFN3ZWVwZXIgdG8gbWFrZSBzdXJlIHRoZXkncmUgdGhlIGxhc3QgdGhp
bmdzIHRoYXQgZ2V0IGluaXRpYWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gdG8gCisgICAgICAg
IHByZXZlbnQgYW55IGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBKU0ds
b2JhbERhdGEvSGVhcCB0aGV5IG1pZ2h0IGNhcmUgYWJvdXQuCisgICAgICAgIChIZWFwKToKKyAg
ICAgICAgKiBoZWFwL0hlYXBUaW1lci5jcHA6IFJlZmFjdG9yZWQgdG8gYWxsb3cgZm9yIHRocmVh
ZC1zYWZlIG9wZXJhdGlvbiBhbmQgc2h1dGRvd24uCisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6
fkhlYXBUaW1lcik6CisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6aW52YWxpZGF0ZSk6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OmRpZFN0YXJ0Vk1TaHV0ZG93bik6
IENhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIH5KU0dsb2JhbERhdGEuIElmIHdlJ3JlIG9uIHRo
ZSBzYW1lIHRocmVhZCAKKyAgICAgICAgdGhhdCB0aGUgSGVhcFRpbWVyIGlzIHJ1bm5pbmcgb24s
IHdlIGtpbGwgdGhlIEhlYXBUaW1lciBvdXJzZWx2ZXMuIElmIG5vdCwgdGhlbiB3ZSBzZXQgc29t
ZSBzdGF0ZSBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBhbmQgc2NoZWR1bGUgaXQgdG8gZmly
ZSBpbW1lZGlhdGVseSBzbyB0aGF0IGl0IGNhbiBub3RpY2UgYW5kIGtpbGwgaXRzZWxmLgorICAg
ICAgICAoSlNDOjpIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSk6IFdlIGdyYWIgb3VyIG11dGV4IGFu
ZCBjaGVjayBvdXIgSlNHbG9iYWxEYXRhIHBvaW50ZXIuIElmIGl0IGhhcyBiZWVuIHplcm8tZWQK
KyAgICAgICAgb3V0LCB0aGVuIHdlIGtub3cgdGhlIFZNIGhhcyBzdGFydGVkIHRvIHNodXRkb3du
IGFuZCB3ZSBzaG91bGQga2lsbCBvdXJzZWx2ZXMuIE90aGVyd2lzZSwgZ3JhYiB0aGUgQVBJRW50
cnlTaGltLAorICAgICAgICBidXQgd2l0aG91dCByZWYtaW5nIHRoZSBKU0dsb2JhbERhdGEgKHdl
IGRvbid0IHdhbnQgdG8gYnJpbmcgdGhlIEpTR2xvYmFsRGF0YSdzIHJlZi1jb3VudCBmcm9tIDAg
dG8gMSkgaW4gY2FzZSAKKyAgICAgICAgd2Ugd2VyZSBpbnRlcnJ1cHRlZCBiZXR3ZWVuIHJlbGVh
c2luZyBvdXIgbXV0ZXggYW5kIHRyeWluZyB0byBncmFiIHRoZSBBUElMb2NrLgorICAgICAgICAq
IGhlYXAvSGVhcFRpbWVyLmg6IAorICAgICAgICAoSGVhcFRpbWVyKToKKyAgICAgICAgKiBoZWFw
L0luY3JlbWVudGFsU3dlZXBlci5jcHA6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBl
cjo6ZG9Xb3JrKTogV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIEFQSSBzaGltIGhlcmUgc2luY2UgSGVh
cFRpbWVyOjp0aW1lckRpZEZpcmUgaGFuZGxlcyAKKyAgICAgICAgYWxsIG9mIHRoYXQgZm9yIHVz
LiAKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUpOgorICAgICAgICAq
IGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAgIChJbmNyZW1lbnRhbFN3ZWVwZXIp
OgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKiBoZWFwL1dlYWtCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OldlYWtCbG9jazo6cmVhcCk6CisgICAgICAgICoganNjLmNw
cDoKKyAgICAgICAgKGZ1bmN0aW9uR0MpOgorICAgICAgICAoZnVuY3Rpb25SZWxlYXNlRXhlY3V0
YWJsZU1lbW9yeSk6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBs
ZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpjaGVja1N5bnRheCk6CisgICAgICAgIChKU0M6OmV2
YWx1YXRlKToKKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oOgorICAgICAg
ICAoRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayk6CisgICAgICAgIChKU0M6OkRlZmF1bHRHQ0Fj
dGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6IFNpZ25hbHMgdG8gdGhlIHR3byBI
ZWFwVGltZXJzIChHQ0FjdGl2aXR5Q2FsbGJhY2sgYW5kIEluY3JlbWVudGFsU3dlZXBlcikKKyAg
ICAgICAgdGhhdCB0aGUgVk0gaGFzIHN0YXJ0ZWQgc2h1dHRpbmcgZG93bi4gSXQgdGhlbiB3YWl0
cyB1bnRpbCB0aGUgSGVhcFRpbWVyIGlzIGRvbmUgd2l0aCB3aGF0ZXZlciBhY3Rpdml0eSAKKyAg
ICAgICAgaXQgbmVlZHMgdG8gZG8gYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCBhbnkgZnVydGhlciBk
ZXN0cnVjdGlvbi4gQWxzbyBhc3NlcnRzIHRoYXQgd2UgZG8gbm90IGN1cnJlbnRseSBob2xkIHRo
ZSAKKyAgICAgICAgQVBJTG9jayBiZWNhdXNlIHRoaXMgY291bGQgcG90ZW50aWFsbHkgY2F1c2Ug
ZGVhZGxvY2sgd2hlbiB3ZSB0cnkgdG8gc2lnbmFsIHRvIHRoZSBIZWFwVGltZXJzIHVzaW5nIHRo
ZWlyIG11dGV4ZXMuCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2Up
OiBQcm90ZWN0IHRoZSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNoYXJlZCBpbnN0YW5jZSB3aXRo
IHRoZSBHbG9iYWxKU0xvY2suCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5z
dGFuY2VJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDogQ2hhbmdl
IHRvIGJlIFRocmVhZFNhZmVSZWZDb3VudGVkIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3Jy
eSBhYm91dCByZWZpbmcgYW5kIAorICAgICAgICBkZS1yZWZpbmcgSlNHbG9iYWxEYXRhcyBvbiBz
ZXBhcmF0ZSB0aHJlYWRzIHNpbmNlIHdlIGRvbid0IGRvIGl0IHRoYXQgb2Z0ZW4gYW55d2F5cy4K
KyAgICAgICAgKEpTR2xvYmFsRGF0YSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6YXBp
TG9jayk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogcnVudGltZS9KU0xvY2suY3BwOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEpTQzo6R2xvYmFsSlNMb2NrOjpHbG9iYWxKU0xvY2spOiBGb3Ig
YWNjZXNzaW5nIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisgICAgICAgIChKU0M6Okdsb2JhbEpTTG9j
azo6fkdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6SlNMb2NrSG9s
ZGVyKTogTXV0ZXhMb2NrZXIgZm9yIEpTTG9jay4gQWxzbyByZWZzIHRoZSBKU0dsb2JhbERhdGEg
dG8ga2VlcCBpdCBhbGl2ZSBzbyB0aGF0IAorICAgICAgICBpdCBjYW4gc3VjY2Vzc2Z1bGx5IHVu
bG9jayBpdCBsYXRlciB3aXRob3V0IGl0IGRpc2FwcGVhcmluZyBmcm9tIHVuZGVybmVhdGggaXQu
CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6fkpTTG9ja0hvbGRlcik6CisgICAgICAgIChK
U0M6OkpTTG9jazo6SlNMb2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp+SlNMb2NrKToKKyAg
ICAgICAgKEpTQzo6SlNMb2NrOjpsb2NrKTogVXNlcyB0aGUgc3BpbiBsb2NrIGZvciBndWFyZGlu
ZyB0aGUgbG9jayBjb3VudCBhbmQgb3duZXIgdGhyZWFkIGZpZWxkcy4gVXNlcyB0aGUgbXV0ZXgg
Zm9yIAorICAgICAgICBhY3R1YWxseSB3YWl0aW5nIGZvciBsb25nIHBlcmlvZHMuIAorICAgICAg
ICAoSlNDOjpKU0xvY2s6OnVubG9jayk6CisgICAgICAgIChKU0M6OkpTTG9jazo6Y3VycmVudFRo
cmVhZElzSG9sZGluZ0xvY2spOiAKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpkcm9wQWxsTG9ja3Mp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseSk6Cisg
ICAgICAgIChKU0M6OkpTTG9jazo6Z3JhYkFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2Nrcyk6CisgICAgICAgIChKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKToKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0xvY2tI
b2xkZXIpOgorICAgICAgICAoSlNMb2NrKToKKyAgICAgICAgKERyb3BBbGxMb2Nrcyk6CisgICAg
ICAgICogcnVudGltZS9XZWFrR0NNYXAuaDoKKyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpzZXQp
OgorICAgICAgICAqIHRlc3RSZWdFeHAuY3BwOgorICAgICAgICAocmVhbE1haW4pOgorCiAyMDEy
LTA2LTIwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVk
dWNlZCAoYnV0IGRpZCBub3QgZWxpbWluYXRlKSB1c2Ugb2YgImJlcnplcmtlciBHQyIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0MKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IGV4ZWMtPmhlYXAoKS0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMzA3LDcgKzMwNyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQygKICNpZm5kZWYgTkRFQlVHCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLnJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KQEAgLTY2Nyw5ICs2NjcsOSBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50
cyhpbnQgYXJnYywgY2hhCiAKIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCisgICAgCiAgICAgUmVm
UHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKFRocmVh
ZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2Jh
bERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBwYXJzZUFyZ3Vt
ZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0UmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJl
Z0V4cC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
UmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDkgKzQ5NSw4IEBAIHN0YXRpYyB2b2lk
IHBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGEKIAogaW50IHJlYWxNYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwot
CiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3Jl
YXRlKFRocmVhZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGdsb2JhbERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBw
YXJzZUFyZ3VtZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJU2hpbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0FQSVNoaW1zLmgJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvQVBJU2hpbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMzEgKzI4LDQwIEBACiAK
ICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIK
KyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNp
bmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
QVBJRW50cnlTaGltV2l0aG91dExvY2sgeworcHVibGljOgorICAgIGVudW0gUmVmR2xvYmFsRGF0
YVRhZyB7IERvbnRSZWZHbG9iYWxEYXRhID0gMCwgUmVmR2xvYmFsRGF0YSB9OworCiBwcm90ZWN0
ZWQ6Ci0gICAgQVBJRW50cnlTaGltV2l0aG91dExvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBib29sIHJlZ2lzdGVyVGhyZWFkKQotICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRh
KQorICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
Ym9vbCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0YVRhZyBzaG91bGRSZWZHbG9iYWxEYXRh
KQorICAgICAgICA6IG1fc2hvdWxkUmVmR2xvYmFsRGF0YShzaG91bGRSZWZHbG9iYWxEYXRhKQor
ICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICAgICAsIG1fZW50cnlJZGVu
dGlmaWVyVGFibGUod3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZ2xv
YmFsRGF0YS0+aWRlbnRpZmllclRhYmxlKSkKICAgICB7CisgICAgICAgIGlmIChzaG91bGRSZWZH
bG9iYWxEYXRhKQorICAgICAgICAgICAgbV9nbG9iYWxEYXRhLT5yZWYoKTsKICAgICAgICAgVU5V
U0VEX1BBUkFNKHJlZ2lzdGVyVGhyZWFkKTsKICAgICAgICAgaWYgKHJlZ2lzdGVyVGhyZWFkKQog
ICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRU
aHJlYWQoKTsKICAgICAgICAgbV9nbG9iYWxEYXRhLT5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+
c3luY2hyb25pemUoKTsKLSAgICAgICAgbV9nbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5zdGFy
dCgpOworICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuc3dlZXBlcigpLT5zeW5jaHJvbml6ZSgp
OwogICAgIH0KIAogICAgIH5BUElFbnRyeVNoaW1XaXRob3V0TG9jaygpCiAgICAgewotICAgICAg
ICBtX2dsb2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKICAgICAgICAgd3RmVGhyZWFk
RGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUobV9lbnRyeUlkZW50aWZpZXJUYWJsZSk7
CisgICAgICAgIGlmIChtX3Nob3VsZFJlZkdsb2JhbERhdGEpCisgICAgICAgICAgICBtX2dsb2Jh
bERhdGEtPmRlcmVmKCk7CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgorICAgIFJlZkds
b2JhbERhdGFUYWcgbV9zaG91bGRSZWZHbG9iYWxEYXRhOwogICAgIEpTR2xvYmFsRGF0YSogbV9n
bG9iYWxEYXRhOwogICAgIElkZW50aWZpZXJUYWJsZSogbV9lbnRyeUlkZW50aWZpZXJUYWJsZTsK
IH07CkBAIC02MSwyMCArNzAsMzggQEAgY2xhc3MgQVBJRW50cnlTaGltIDogcHVibGljIEFQSUVu
dHJ5U2hpbQogcHVibGljOgogICAgIC8vIE5vcm1hbCBBUEkgZW50cnkKICAgICBBUElFbnRyeVNo
aW0oRXhlY1N0YXRlKiBleGVjLCBib29sIHJlZ2lzdGVyVGhyZWFkID0gdHJ1ZSkKLSAgICAgICAg
OiBBUElFbnRyeVNoaW1XaXRob3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRo
cmVhZCkKLSAgICAgICAgLCBtX2xvY2soZXhlYykKKyAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRo
b3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0
YSkKKyAgICB7CisgICAgICAgIGluaXQoKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG5lY2Vzc2FyeSBmb3IgSGVhcFRpbWVyIHRvIHByZXZlbnQgaXQgZnJvbSBhY2NpZGVu
dGFsbHkgcmVzdXJyZWN0aW5nIAorICAgIC8vIHRoZSByZWYgY291bnQgb2YgYSAiZGVhZCIgSlNH
bG9iYWxEYXRhLgorICAgIEFQSUVudHJ5U2hpbShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFJl
Zkdsb2JhbERhdGFUYWcgcmVmR2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUp
CisgICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0YSwgcmVnaXN0ZXJU
aHJlYWQsIHJlZkdsb2JhbERhdGEpCiAgICAgeworICAgICAgICBpbml0KCk7CiAgICAgfQogCiAg
ICAgLy8gSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvciBvbmx5IGhhcyBhIGdsb2JhbERhdGEuCiAg
ICAgQVBJRW50cnlTaGltKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRo
cmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0
YSwgcmVnaXN0ZXJUaHJlYWQpCi0gICAgICAgICwgbV9sb2NrKGdsb2JhbERhdGEtPmlzU2hhcmVk
SW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5KQorICAgICAg
ICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKGdsb2JhbERhdGEsIHJlZ2lzdGVyVGhyZWFkLCBS
ZWZHbG9iYWxEYXRhKQogICAgIHsKKyAgICAgICAgaW5pdCgpOworICAgIH0KKworICAgIH5BUElF
bnRyeVNoaW0oKQorICAgIHsKKyAgICAgICAgbV9nbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5z
dG9wKCk7CisgICAgICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLnVubG9jaygpOwogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBKU0xvY2sgbV9sb2NrOworICAgIHZvaWQgaW5pdCgpCisgICAgewor
ICAgICAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5sb2NrKCk7CisgICAgICAgIG1fZ2xvYmFs
RGF0YS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsKKyAgICB9CiB9OwogCiBjbGFzcyBBUElDYWxs
YmFja1NoaW0gewpAQCAtODgsNyArMTE1LDYgQEAgcHVibGljOgogCiAgICAgfkFQSUNhbGxiYWNr
U2hpbSgpCiAgICAgewotICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuYWN0aXZpdHlDYWxsYmFj
aygpLT5zeW5jaHJvbml6ZSgpOwogICAgICAgICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElk
ZW50aWZpZXJUYWJsZShtX2dsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZSk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDYgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xv
YmFsQ29udGV4dENyZWF0ZQogICAgIC8vIElmIHRoZSBhcHBsaWNhdGlvbiB3YXMgbGlua2VkIGJl
Zm9yZSBKU0dsb2JhbENvbnRleHRDcmVhdGUgd2FzIGNoYW5nZWQgdG8gdXNlIGEgdW5pcXVlIEpT
R2xvYmFsRGF0YSwKICAgICAvLyB3ZSB1c2UgYSBzaGFyZWQgb25lIGZvciBiYWNrd2FyZHMgY29t
cGF0aWJpbGl0eS4KICAgICBpZiAoTlNWZXJzaW9uT2ZMaW5rVGltZUxpYnJhcnkoIkphdmFTY3Jp
cHRDb3JlIikgPD0gd2Via2l0Rmlyc3RWZXJzaW9uV2l0aENvbmN1cnJlbnRHbG9iYWxDb250ZXh0
cykgewotICAgICAgICBKU0xvY2sgbG9jayhMb2NrRm9yUmVhbCk7CiAgICAgICAgIHJldHVybiBK
U0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKHRvUmVmKCZKU0dsb2JhbERhdGE6OnNoYXJlZElu
c3RhbmNlKCkpLCBnbG9iYWxPYmplY3RDbGFzcyk7CiAgICAgfQogI2VuZGlmIC8vIE9TKERBUldJ
TikKQEAgLTkwLDExICs4OSw5IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRD
cmVhdGUKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKLSAgICBKU0xvY2sgbG9jayhM
b2NrRm9yUmVhbCk7CiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IGdyb3Vw
ID8gUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+KHRvSlMoZ3JvdXApKSA6IEpTR2xvYmFsRGF0YTo6
Y3JlYXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlwZVNtYWxsKTsKIAogICAgIEFQSUVudHJ5
U2hpbSBlbnRyeVNoaW0oZ2xvYmFsRGF0YS5nZXQoKSwgZmFsc2UpOwotCiAgICAgZ2xvYmFsRGF0
YS0+bWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsKIAogICAgIGlmICghZ2xvYmFsT2Jq
ZWN0Q2xhc3MpIHsKQEAgLTEyNCwxOCArMTIxLDE5IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0ds
b2JhbENvbnRleHRSZXRhaW4KIAogdm9pZCBKU0dsb2JhbENvbnRleHRSZWxlYXNlKEpTR2xvYmFs
Q29udGV4dFJlZiBjdHgpCiB7CisgICAgSWRlbnRpZmllclRhYmxlKiBzYXZlZElkZW50aWZpZXJU
YWJsZTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrIGxvY2so
ZXhlYyk7CisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAotICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBJZGVudGlm
aWVyVGFibGUqIHNhdmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJl
bnRJZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUpOworICAgICAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIHNh
dmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVy
VGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUpOwogCi0gICAgYm9vbCBwcm90ZWN0Q291
bnRJc1plcm8gPSBIZWFwOjpoZWFwKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPnVucHJv
dGVjdChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwotICAgIGlmIChwcm90ZWN0Q291bnRJ
c1plcm8pIHsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+c3lu
Y2hyb25pemUoKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVj
dEdyYXBoKCk7CisgICAgICAgIGJvb2wgcHJvdGVjdENvdW50SXNaZXJvID0gSGVhcDo6aGVhcChl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT51bnByb3RlY3QoZXhlYy0+ZHluYW1pY0dsb2Jh
bE9iamVjdCgpKTsKKyAgICAgICAgaWYgKHByb3RlY3RDb3VudElzWmVybykKKyAgICAgICAgICAg
IGdsb2JhbERhdGEuaGVhcC5yZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOworICAgICAgICBn
bG9iYWxEYXRhLmRlcmVmKCk7CiAgICAgfQotICAgIGdsb2JhbERhdGEuZGVyZWYoKTsKIAogICAg
IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKHNhdmVkSWRlbnRpZmll
clRhYmxlKTsKIH0KQEAgLTE2Niw3ICsxNjQsNyBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNDb250
ZXh0R2V0R2xvYmFsQ29uCiBKU1N0cmluZ1JlZiBKU0NvbnRleHRDcmVhdGVCYWNrdHJhY2UoSlND
b250ZXh0UmVmIGN0eCwgdW5zaWduZWQgbWF4U3RhY2tTaXplKQogewogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2sgbG9jayhleGVjKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKIAogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICBVU3RyaW5nQnVp
bGRlciBidWlsZGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3Bh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNw
YWNlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIENoZWNrZWRC
b29sZWFuIENvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZVMKICAgICBpZiAoaXNPdmVyc2l6ZShieXRl
cykpCiAgICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZU92ZXJzaXplKGJ5dGVzLCBvdXRQdHIpOwog
ICAgIAorICAgIEFTU0VSVChtX2hlYXAtPmdsb2JhbERhdGEoKS0+YXBpTG9jaygpLmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9hbGxvY2F0
b3IuY3VycmVudENhcGFjaXR5KCkpOwogCiAgICAgYWxsb2NhdGVCbG9jaygpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMTUgKzE2
MCw5IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHByb3BvcnRpb25hbEhlYXBTaXoKICAgICByZXR1
cm4gMS4yNSAqIGhlYXBTaXplOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFNoYXJl
ZEluc3RhbmNlVGhyZWFkU3RhdGUoKQorc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRTaGFyZWRJ
bnN0YW5jZVRocmVhZFN0YXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBpZiAo
IUpTTG9jazo6bG9ja0NvdW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
SlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZ2xvYmFsRGF0YS0+YXBpTG9jaygp
LmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBp
c1ZhbGlkVGhyZWFkU3RhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQpAQCAtMTc2LDcgKzE3
MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkVGhyZWFkU3RhdGUoSlMKICAgICBpZiAo
Z2xvYmFsRGF0YS0+aWRlbnRpZmllclRhYmxlICE9IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRl
bnRpZmllclRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChnbG9iYWxE
YXRhLT5pc1NoYXJlZEluc3RhbmNlKCkgJiYgIWlzVmFsaWRTaGFyZWRJbnN0YW5jZVRocmVhZFN0
YXRlKCkpCisgICAgaWYgKGdsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSAmJiAhaXNWYWxp
ZFNoYXJlZEluc3RhbmNlVGhyZWFkU3RhdGUoZ2xvYmFsRGF0YSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMzI3LDcgKzMyMSw3IEBAIHZvaWQgSGVhcDo6
ZGlkQWJhbmRvbihzaXplX3QgYnl0ZXMpCiB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQog
ewogICAgIEFTU0VSVChrKTsKLSAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xk
aW5nTG9jaygpIHx8ICFtX2dsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSk7CisgICAgQVNT
RVJUKG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkp
OwogCiAgICAgaWYgKCFrLmlzQ2VsbCgpKQogICAgICAgICByZXR1cm47CkBAIC0zMzgsNyArMzMy
LDcgQEAgdm9pZCBIZWFwOjpwcm90ZWN0KEpTVmFsdWUgaykKIGJvb2wgSGVhcDo6dW5wcm90ZWN0
KEpTVmFsdWUgaykKIHsKICAgICBBU1NFUlQoayk7Ci0gICAgQVNTRVJUKEpTTG9jazo6Y3VycmVu
dFRocmVhZElzSG9sZGluZ0xvY2soKSB8fCAhbV9nbG9iYWxEYXRhLT5pc1NoYXJlZEluc3RhbmNl
KCkpOworICAgIEFTU0VSVChtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nTG9jaygpKTsKIAogICAgIGlmICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNjkyLDYgKzY4Niw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBz
d2VlcFRvZ2cKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xs
ZWN0aW9uIik7CiAgICAgCiAgICAgR0NQSEFTRShDb2xsZWN0KTsKKyAgICBBU1NFUlQoZ2xvYmFs
RGF0YSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgQVNT
RVJUKGdsb2JhbERhdGEoKS0+aWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJy
ZW50SWRlbnRpZmllclRhYmxlKCkpOwogICAgIEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAg
ICAgSkFWQVNDUklQVENPUkVfR0NfQkVHSU4oKTsKQEAgLTc3NywxOSArNzcyLDE5IEBAIHZvaWQg
SGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICBKQVZBU0NSSVBUQ09SRV9H
Q19FTkQoKTsKIH0KIAotdm9pZCBIZWFwOjpzZXRBY3Rpdml0eUNhbGxiYWNrKFBhc3NPd25QdHI8
R0NBY3Rpdml0eUNhbGxiYWNrPiBhY3Rpdml0eUNhbGxiYWNrKQordm9pZCBIZWFwOjpzZXRBY3Rp
dml0eUNhbGxiYWNrKEdDQWN0aXZpdHlDYWxsYmFjayogYWN0aXZpdHlDYWxsYmFjaykKIHsKICAg
ICBtX2FjdGl2aXR5Q2FsbGJhY2sgPSBhY3Rpdml0eUNhbGxiYWNrOwogfQogCiBHQ0FjdGl2aXR5
Q2FsbGJhY2sqIEhlYXA6OmFjdGl2aXR5Q2FsbGJhY2soKQogewotICAgIHJldHVybiBtX2FjdGl2
aXR5Q2FsbGJhY2suZ2V0KCk7CisgICAgcmV0dXJuIG1fYWN0aXZpdHlDYWxsYmFjazsKIH0KIAog
SW5jcmVtZW50YWxTd2VlcGVyKiBIZWFwOjpzd2VlcGVyKCkKIHsKLSAgICByZXR1cm4gbV9zd2Vl
cGVyLmdldCgpOworICAgIHJldHVybiBtX3N3ZWVwZXI7CiB9CiAKIHZvaWQgSGVhcDo6c2V0R2Fy
YmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoYm9vbCBlbmFibGUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDEwICs5OSwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1
cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0
aXZpdHlDYWxsYmFjayogYWN0aXZpdHlDYWxsYmFjaygpOwotICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHNldEFjdGl2aXR5Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2aXR5Q2FsbGJh
Y2s+KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRBY3Rpdml0eUNhbGxiYWNr
KEdDQWN0aXZpdHlDYWxsYmFjayopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNl
dEdhcmJhZ2VDb2xsZWN0aW9uVGltZXJFbmFibGVkKGJvb2wpOwogCi0gICAgICAgIEluY3JlbWVu
dGFsU3dlZXBlciogc3dlZXBlcigpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBJbmNyZW1l
bnRhbFN3ZWVwZXIqIHN3ZWVwZXIoKTsKIAogICAgICAgICAvLyB0cnVlIGlmIGFuIGFsbG9jYXRp
b24gb3IgY29sbGVjdGlvbiBpcyBpbiBwcm9ncmVzcwogICAgICAgICBpbmxpbmUgYm9vbCBpc0J1
c3koKTsKQEAgLTIzNywxMCArMjM3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBkb3Vi
bGUgbV9sYXN0R0NMZW5ndGg7CiAgICAgICAgIGRvdWJsZSBtX2xhc3RDb2RlRGlzY2FyZFRpbWU7
CiAKLSAgICAgICAgT3duUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gbV9hY3Rpdml0eUNhbGxiYWNr
OwotICAgICAgICBPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPiBtX3N3ZWVwZXI7Ci0gICAgICAg
IAogICAgICAgICBEb3VibHlMaW5rZWRMaXN0PEV4ZWN1dGFibGVCYXNlPiBtX2NvbXBpbGVkQ29k
ZTsKKyAgICAgICAgCisgICAgICAgIEdDQWN0aXZpdHlDYWxsYmFjayogbV9hY3Rpdml0eUNhbGxi
YWNrOworICAgICAgICBJbmNyZW1lbnRhbFN3ZWVwZXIqIG1fc3dlZXBlcjsKICAgICB9OwogCiAg
ICAgaW5saW5lIGJvb2wgSGVhcDo6c2hvdWxkQ29sbGVjdCgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhlYXBUaW1lci5oIgogCisj
aW5jbHVkZSAiQVBJU2hpbXMuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpT
U3RyaW5nLmgiCisjaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0yMSw3ICsyNSw4IEBAIEhlYXBUaW1lcjo6SGVh
cFRpbWVyKEpTR2xvYmFsRGF0YSogZ2xvYmEKIAogSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKIHsK
LSAgICBpbnZhbGlkYXRlKCk7CisgICAgQ0ZSdW5Mb29wUmVtb3ZlVGltZXIobV9ydW5Mb29wLmdl
dCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworICAgIENGUnVuTG9v
cFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKIH0KIAogdm9pZCBIZWFwVGltZXI6OnN5
bmNocm9uaXplKCkKQEAgLTM1LDE0ICs0MCwzNyBAQCB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25p
emUoKQogCiB2b2lkIEhlYXBUaW1lcjo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgQ0ZSdW5Mb29wUmVt
b3ZlVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9u
TW9kZXMpOwotICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKKyAg
ICBtX2dsb2JhbERhdGEgPSAwOworICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1f
dGltZXIuZ2V0KCksIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc19kZWNhZGUpOworfQor
Cit2b2lkIEhlYXBUaW1lcjo6ZGlkU3RhcnRWTVNodXRkb3duKCkKK3sKKyAgICBpZiAoQ0ZSdW5M
b29wR2V0Q3VycmVudCgpID09IG1fcnVuTG9vcC5nZXQoKSkgeworICAgICAgICBpbnZhbGlkYXRl
KCk7CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFT
U0VSVCghbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2so
KSk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2h1dGRvd25NdXRleCk7CisgICAgaW52YWxp
ZGF0ZSgpOwogfQogCiB2b2lkIEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVy
UmVmLCB2b2lkKiBpbmZvKQogewogICAgIEhlYXBUaW1lciogYWdlbnQgPSBzdGF0aWNfY2FzdDxI
ZWFwVGltZXIqPihpbmZvKTsKLSAgICBhZ2VudC0+ZG9Xb3JrKCk7CisgICAgYWdlbnQtPm1fc2h1
dGRvd25NdXRleC5sb2NrKCk7CisgICAgaWYgKCFhZ2VudC0+bV9nbG9iYWxEYXRhKSB7CisgICAg
ICAgIGFnZW50LT5tX3NodXRkb3duTXV0ZXgudW5sb2NrKCk7CisgICAgICAgIGRlbGV0ZSBhZ2Vu
dDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB7CisgICAgICAgIC8vIFdlIGRvbid0IHJl
ZiBoZXJlIHRvIHByZXZlbnQgdXMgZnJvbSByZXN1cnJlY3RpbmcgdGhlIHJlZiBjb3VudCBvZiBh
ICJkZWFkIiBKU0dsb2JhbERhdGEuCisgICAgICAgIEFQSUVudHJ5U2hpbSBzaGltKGFnZW50LT5t
X2dsb2JhbERhdGEsIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrOjpEb250UmVmR2xvYmFsRGF0YSk7
CisgICAgICAgIGFnZW50LT5kb1dvcmsoKTsKKyAgICB9CisgICAgYWdlbnQtPm1fc2h1dGRvd25N
dXRleC51bmxvY2soKTsKIH0KIAogI2Vsc2UKQEAgLTU2LDYgKzg0LDExIEBAIEhlYXBUaW1lcjo6
fkhlYXBUaW1lcigpCiB7CiB9CiAKK3ZvaWQgSGVhcFRpbWVyOjpkaWRTdGFydFZNU2h1dGRvd24o
KQoreworICAgIGRlbGV0ZSB0aGlzOworfQorCiB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25pemUo
KQogewogfQpAQCAtNjQsNyArOTcsNiBAQCB2b2lkIEhlYXBUaW1lcjo6aW52YWxpZGF0ZSgpCiB7
CiB9CiAKLQogI2VuZGlmCiAgICAgCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBUaW1lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBUaW1lci5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwVGltZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgSGVh
cFRpbWVyX2gKIAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CiAKICNpZiBVU0UoQ0YpCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZv
dW5kYXRpb24uaD4KQEAgLTIxLDcgKzIyLDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiAgICAg
dmlydHVhbCB+SGVhcFRpbWVyKCk7Ci0gICAgCisKKyAgICB2b2lkIGRpZFN0YXJ0Vk1TaHV0ZG93
bigpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBk
b1dvcmsoKSA9IDA7CiAgICAgCkBAIC0zNCw2ICszNiw4IEBAIHByb3RlY3RlZDoKICAgICBSZXRh
aW5QdHI8Q0ZSdW5Mb29wVGltZXJSZWY+IG1fdGltZXI7CiAgICAgUmV0YWluUHRyPENGUnVuTG9v
cFJlZj4gbV9ydW5Mb29wOwogICAgIENGUnVuTG9vcFRpbWVyQ29udGV4dCBtX2NvbnRleHQ7CisK
KyAgICBNdXRleCBtX3NodXRkb3duTXV0ZXg7CiAjZW5kaWYKICAgICAKIHByaXZhdGU6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5j
cHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDYgQEAgc3RhdGlj
IGNvbnN0IENGVGltZUludGVydmFsIHN3ZWVwVGltZU11bAogCiB2b2lkIEluY3JlbWVudGFsU3dl
ZXBlcjo6ZG9Xb3JrKCkKIHsKLSAgICBBUElFbnRyeVNoaW0gc2hpbShtX2dsb2JhbERhdGEpOwog
ICAgIGRvU3dlZXAoV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CiB9CiAgICAg
CkBAIC0zMCw5ICsyOSw5IEBAIEluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVy
KEgKIHsKIH0KIAotUGFzc093blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IEluY3JlbWVudGFsU3dl
ZXBlcjo6Y3JlYXRlKEhlYXAqIGhlYXApCitJbmNyZW1lbnRhbFN3ZWVwZXIqIEluY3JlbWVudGFs
U3dlZXBlcjo6Y3JlYXRlKEhlYXAqIGhlYXApCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJ
bmNyZW1lbnRhbFN3ZWVwZXIoaGVhcCwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKSk7CisgICAgcmV0
dXJuIG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIoaGVhcCwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKTsK
IH0KIAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnNjaGVkdWxlVGltZXIoKQpAQCAtODQsOSAr
ODMsOSBAQCB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6ZG9Xb3JrKCkKIHsKIH0KIAotUGFzc093
blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhlYXAq
IGhlYXApCitJbmNyZW1lbnRhbFN3ZWVwZXIqIEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhl
YXAqIGhlYXApCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIo
aGVhcC0+Z2xvYmFsRGF0YSgpKSk7CisgICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIo
aGVhcC0+Z2xvYmFsRGF0YSgpKTsKIH0KIAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0
U3dlZXBpbmcoY29uc3QgSGFzaFNldDxNYXJrZWRCbG9jayo+JikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQsNyArMTQsNyBAQCBjbGFzcyBIZWFwOwogICAgIAogY2xhc3Mg
SW5jcmVtZW50YWxTd2VlcGVyIDogcHVibGljIEhlYXBUaW1lciB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPiBjcmVhdGUoSGVhcCopOworICAgIHN0
YXRpYyBJbmNyZW1lbnRhbFN3ZWVwZXIqIGNyZWF0ZShIZWFwKik7CiAgICAgdm9pZCBzdGFydFN3
ZWVwaW5nKGNvbnN0IEhhc2hTZXQ8TWFya2VkQmxvY2sqPiYgYmxvY2tTbmFwc2hvdCk7CiAgICAg
dmlydHVhbCB2b2lkIGRvV29yaygpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMsNiArMyw3IEBACiAKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRl
ICJIZWFwLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTYsNiArNTcsNyBAQCBpbmxpbmUgdm9p
ZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0CiAgICAgCiB2b2lkKiBNYXJrZWRBbGxvY2F0
b3I6OmFsbG9jYXRlU2xvd0Nhc2UoKQogeworICAgIEFTU0VSVChtX2hlYXAtPmdsb2JhbERhdGEo
KS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogI2lmIENPTExFQ1Rf
T05fRVZFUllfQUxMT0NBVElPTgogICAgIG1faGVhcC0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAg
ICBBU1NFUlQobV9oZWFwLT5tX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAx
MjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjcsOCArMTI3LDEwIEBAIHZvaWQgV2Vha0Jsb2NrOjpyZWFwKCkKICAg
ICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpID4gV2Vha0ltcGw6OkRlYWQpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQod2Vha0ltcGwtPmpzVmFs
dWUoKS5hc0NlbGwoKSkpCisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh3ZWFrSW1wbC0+anNW
YWx1ZSgpLmFzQ2VsbCgpKSkgeworICAgICAgICAgICAgQVNTRVJUKHdlYWtJbXBsLT5zdGF0ZSgp
ID09IFdlYWtJbXBsOjpMaXZlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAK
ICAgICAgICAgd2Vha0ltcGwtPnNldFN0YXRlKFdlYWtJbXBsOjpEZWFkKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGJv
b2wgY2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IEpTVmFsdWUqIHJldHVybmVkRXhjZXB0aW9uKQogewotICAgIEpTTG9jayBsb2NrKGV4ZWMpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRh
KCkuaWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRh
YmxlKCkpOwogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0
YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CkBAIC01Myw3ICs1Myw3IEBAIGJvb2wgY2hlY2tT
eW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCAKIAogSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlKiByZXR1cm5lZEV4Y2VwdGlvbikKIHsK
LSAgICBKU0xvY2sgbG9jayhleGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWRE
YXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0
YSgpLmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICBDUkFTSCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgJKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlD
YWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHByb3RlY3RlZDoKIAog
Y2xhc3MgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayA6IHB1YmxpYyBHQ0FjdGl2aXR5Q2FsbGJh
Y2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPERlZmF1bHRHQ0FjdGl2aXR5Q2Fs
bGJhY2s+IGNyZWF0ZShIZWFwKik7CisgICAgc3RhdGljIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJh
Y2sqIGNyZWF0ZShIZWFwKik7CiAKICAgICBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKEhlYXAq
KTsKIApAQCAtOTEsOSArOTEsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1pbmxpbmUgUGFz
c093blB0cjxEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrPiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxi
YWNrOjpjcmVhdGUoSGVhcCogaGVhcCkKK2lubGluZSBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNr
KiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcCkpOworICAg
IHJldHVybiBuZXcgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayhoZWFwKTsKIH0KIAogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxMCBAQAogI2luY2x1ZGUgIkNv
bW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgiCiAjaW5j
bHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFj
ay5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJu
VmFsdWUuaCIKKyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTQVBJVmFs
dWVXcmFwcGVyLmgiCkBAIC0xNzgsMTIgKzE4MCw5IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxE
YXRhKEdsb2JhbERhdGFUeXAKIHsKICAgICBpbnRlcnByZXRlciA9IG5ldyBJbnRlcnByZXRlcjsK
IAotICAgIGlmIChpc1NoYXJlZEluc3RhbmNlKCkpCi0gICAgICAgIHR1cm5PZmZWZXJpZmllcigp
OwotCiAgICAgLy8gTmVlZCB0byBiZSBjYXJlZnVsIHRvIGtlZXAgZXZlcnl0aGluZyBjb25zaXN0
ZW50IGhlcmUKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh0aGlzKTsKICAgICBJZGVudGlmaWVyVGFi
bGUqIGV4aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWREYXRhKCkuc2V0Q3Vy
cmVudElkZW50aWZpZXJUYWJsZShpZGVudGlmaWVyVGFibGUpOwotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgc3RydWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywg
U3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMpKTsKICAgICBkZWJ1Z2dlckFjdGl2YXRp
b25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBhY3RpdmF0aW9uU3RydWN0dXJlLnNldCgqdGhp
cywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkBA
IC0yMjIsNiArMjIxLDkgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5
cAogCiBKU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQogeworICAgIEFTU0VSVCghbV9hcGlM
b2NrLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOworICAgIGhlYXAuYWN0aXZpdHlDYWxs
YmFjaygpLT5kaWRTdGFydFZNU2h1dGRvd24oKTsKKyAgICBoZWFwLnN3ZWVwZXIoKS0+ZGlkU3Rh
cnRWTVNodXRkb3duKCk7CiAgICAgaGVhcC5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogCiAgICAg
ZGVsZXRlIGludGVycHJldGVyOwpAQCAtMzExLDYgKzMxMyw3IEBAIGJvb2wgSlNHbG9iYWxEYXRh
OjpzaGFyZWRJbnN0YW5jZUV4aXN0cygKIAogSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNo
YXJlZEluc3RhbmNlKCkKIHsKKyAgICBHbG9iYWxKU0xvY2sgZ2xvYmFsTG9jazsKICAgICBKU0ds
b2JhbERhdGEqJiBpbnN0YW5jZSA9IHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKICAgICBpZiAo
IWluc3RhbmNlKSB7CiAgICAgICAgIGluc3RhbmNlID0gYWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0
YShBUElTaGFyZWQsIFRocmVhZFN0YWNrVHlwZVNtYWxsLCBTbWFsbEhlYXApKS5sZWFrUmVmKCk7
CkBAIC0zMjEsNyArMzI0LDYgQEAgSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNoYXJlZElu
c3RhbgogCiBKU0dsb2JhbERhdGEqJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlSW50ZXJu
YWwoKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkp
OwogICAgIHN0YXRpYyBKU0dsb2JhbERhdGEqIHNoYXJlZEluc3RhbmNlOwogICAgIHJldHVybiBz
aGFyZWRJbnN0YW5jZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBA
QAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbnRyaW5zaWMuaCIKICNpbmNsdWRlICJK
SVRTdHVicy5oIgorI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKICNp
bmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJOdW1lcmljU3RyaW5ncy5oIgpAQCAtNDYs
OCArNDcsOCBAQAogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZp
Yy5oPgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaWYgRU5BQkxFKFJFR0VYUF9U
UkFDSU5HKQpAQCAtMTUyLDcgKzE1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAjZW5k
aWYKIAotICAgIGNsYXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEpTR2xvYmFs
RGF0YT4geworICAgIGNsYXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxKU0dsb2JhbERhdGE+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIC8vIFdlYkNvcmUgaGFz
IGEgb25lLXRvLW9uZSBtYXBwaW5nIG9mIHRocmVhZHMgdG8gSlNHbG9iYWxEYXRhczsKICAgICAg
ICAgLy8gZWl0aGVyIGNyZWF0ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBvbmNlCkBAIC0xODAsNiArMTgxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHZvaWQgbWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGluZVRocmVh
ZHMoKS5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOyB9CiAKKyAgICBwcml2YXRlOgor
ICAgICAgICBKU0xvY2sgbV9hcGlMb2NrOworCisgICAgcHVibGljOgogICAgICAgICBIZWFwIGhl
YXA7IC8vIFRoZSBoZWFwIGlzIG91ciBmaXJzdCBkYXRhIG1lbWJlciB0byBlbnN1cmUgdGhhdCBp
dCdzIGRlc3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJlbmNlIGl0Lgog
CiAgICAgICAgIEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlOwpAQCAtNDA5LDYgKzQxNCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihm
bG9hdDY0LCBGbG9hdDY0KTsKICN1bmRlZiByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbgogCisg
ICAgICAgIEpTTG9jayYgYXBpTG9jaygpIHsgcmV0dXJuIG1fYXBpTG9jazsgfQorCiAgICAgcHJp
dmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw4ICsxMTQsNiBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIGlubGluZSB2b2lkCiAKIEpTR2xvYmFsT2Jq
ZWN0Ojp+SlNHbG9iYWxPYmplY3QoKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdMb2NrKCkpOwotCiAgICAgaWYgKG1fZGVidWdnZXIpCiAgICAgICAgIG1fZGVi
dWdnZXItPmRldGFjaCh0aGlzKTsKIApAQCAtMTMwLDcgKzEyOCw3IEBAIHZvaWQgSlNHbG9iYWxP
YmplY3Q6OmRlc3Ryb3koSlNDZWxsKiBjZWwKIAogdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChK
U09iamVjdCogdGhpc1ZhbHVlKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCkpOworICAgIEFTU0VSVChnbG9iYWxEYXRhKCkuYXBpTG9jaygpLmN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIAogICAgIG1fZ2xvYmFsU2NvcGVDaGFpbi5z
ZXQoZ2xvYmFsRGF0YSgpLCB0aGlzLCBTY29wZUNoYWluTm9kZTo6Y3JlYXRlKDAsIHRoaXMsICZn
bG9iYWxEYXRhKCksIHRoaXMsIHRoaXNWYWx1ZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIz
LDcgQEAKIAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNs
dWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAi
U2NvcGVDaGFpbi5oIgogCkBAIC0zOCw5NCArMzksOTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYg
KE9TKERBUldJTikgfHwgVVNFKFBUSFJFQURTKSkKIAogLy8gQWNxdWlyZSB0aGlzIG11dGV4IGJl
Zm9yZSBhY2Nlc3NpbmcgbG9jay1yZWxhdGVkIGRhdGEuCi1zdGF0aWMgcHRocmVhZF9tdXRleF90
IEpTTXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHB0aHJlYWRfbXV0
ZXhfdCBnaWFudEdsb2JhbEpTTG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CiAKLS8v
IFRocmVhZC1zcGVjaWZpYyBrZXkgdGhhdCB0ZWxscyB3aGV0aGVyIGEgdGhyZWFkIGhvbGRzIHRo
ZSBKU011dGV4LCBhbmQgaG93IG1hbnkgdGltZXMgaXQgd2FzIHRha2VuIHJlY3Vyc2l2ZWx5Lgot
cHRocmVhZF9rZXlfdCBKU0xvY2tDb3VudDsKK0dsb2JhbEpTTG9jazo6R2xvYmFsSlNMb2NrKCkK
K3sKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJmdpYW50R2xvYmFsSlNMb2NrKTsKK30KIAotc3Rh
dGljIHZvaWQgY3JlYXRlSlNMb2NrQ291bnQoKQorR2xvYmFsSlNMb2NrOjp+R2xvYmFsSlNMb2Nr
KCkKIHsKLSAgICBwdGhyZWFkX2tleV9jcmVhdGUoJkpTTG9ja0NvdW50LCAwKTsKKyAgICBwdGhy
ZWFkX211dGV4X3VubG9jaygmZ2lhbnRHbG9iYWxKU0xvY2spOwogfQogCi1wdGhyZWFkX29uY2Vf
dCBjcmVhdGVKU0xvY2tDb3VudE9uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKK0pTTG9ja0hvbGRl
cjo6SlNMb2NrSG9sZGVyKEV4ZWNTdGF0ZSogZXhlYykKKyAgICA6IG1fZ2xvYmFsRGF0YSgmZXhl
Yy0+Z2xvYmFsRGF0YSgpKQoreworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsK
K30KIAotLy8gTG9jayBuZXN0aW5nIGNvdW50LgotaW50cHRyX3QgSlNMb2NrOjpsb2NrQ291bnQo
KQorSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQor
ICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiB7Ci0gICAgcHRocmVhZF9vbmNlKCZjcmVh
dGVKU0xvY2tDb3VudE9uY2UsIGNyZWF0ZUpTTG9ja0NvdW50KTsKKyAgICBtX2dsb2JhbERhdGEt
PmFwaUxvY2soKS5sb2NrKCk7Cit9CiAKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4ocHRocmVhZF9nZXRzcGVjaWZpYyhKU0xvY2tDb3VudCkpOworSlNMb2NrSG9sZGVyOjpK
U0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIDogbV9nbG9iYWxEYXRh
KCZnbG9iYWxEYXRhKQoreworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKIH0K
IAotc3RhdGljIHZvaWQgc2V0TG9ja0NvdW50KGludHB0cl90IGNvdW50KQorSlNMb2NrSG9sZGVy
Ojp+SlNMb2NrSG9sZGVyKCkKIHsKLSAgICBBU1NFUlQoY291bnQgPj0gMCk7Ci0gICAgcHRocmVh
ZF9zZXRzcGVjaWZpYyhKU0xvY2tDb3VudCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY291bnQp
KTsKKyAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS51bmxvY2soKTsKIH0KIAotSlNMb2NrOjpK
U0xvY2soRXhlY1N0YXRlKiBleGVjKQotICAgIDogbV9sb2NrQmVoYXZpb3IoZXhlYy0+Z2xvYmFs
RGF0YSgpLmlzU2hhcmVkSW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlv
bnNPbmx5KQorSlNMb2NrOjpKU0xvY2soKQorICAgIDogbV9sb2NrQ291bnQoMCkKIHsKLSAgICBs
b2NrKG1fbG9ja0JlaGF2aW9yKTsKKyAgICBtX3NwaW5Mb2NrLkluaXQoKTsKIH0KIAotSlNMb2Nr
OjpKU0xvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgIDogbV9sb2NrQmVoYXZpb3Io
Z2xvYmFsRGF0YS0+aXNTaGFyZWRJbnN0YW5jZSgpID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpCitKU0xvY2s6On5KU0xvY2soKQogewotICAgIGxvY2sobV9sb2NrQmVoYXZp
b3IpOwogfQogCi12b2lkIEpTTG9jazo6bG9jayhKU0xvY2tCZWhhdmlvciBsb2NrQmVoYXZpb3Ip
Cit2b2lkIEpTTG9jazo6bG9jaygpCiB7Ci0jaWZkZWYgTkRFQlVHCi0gICAgLy8gTG9ja2luZyAi
bm90IGZvciByZWFsIiBpcyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICBpZiAobG9ja0JlaGF2
aW9yID09IFNpbGVuY2VBc3NlcnRpb25zT25seSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCisg
ICAgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkID0gV1RGOjpjdXJyZW50VGhyZWFkKCk7
CisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJm1fc3BpbkxvY2spOworICAg
ICAgICBpZiAobV9vd25lclRocmVhZCA9PSBjdXJyZW50VGhyZWFkICYmIG1fbG9ja0NvdW50KSB7
CisgICAgICAgICAgICBtX2xvY2tDb3VudCsrOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQogCi0gICAgcHRocmVhZF9vbmNlKCZjcmVhdGVKU0xvY2tDb3VudE9uY2UsIGNy
ZWF0ZUpTTG9ja0NvdW50KTsKKyAgICBtX2xvY2subG9jaygpOwogCi0gICAgaW50cHRyX3QgY3Vy
cmVudExvY2tDb3VudCA9IGxvY2tDb3VudCgpOwotICAgIGlmICghY3VycmVudExvY2tDb3VudCAm
JiBsb2NrQmVoYXZpb3IgPT0gTG9ja0ZvclJlYWwpIHsKLSAgICAgICAgaW50IHJlc3VsdCA9IHB0
aHJlYWRfbXV0ZXhfbG9jaygmSlNNdXRleCk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0
LCAhcmVzdWx0KTsKKyAgICB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmbV9zcGlu
TG9jayk7CisgICAgICAgIG1fb3duZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkOworICAgICAgICBB
U1NFUlQoIW1fbG9ja0NvdW50KTsKKyAgICAgICAgbV9sb2NrQ291bnQgPSAxOwogICAgIH0KLSAg
ICBzZXRMb2NrQ291bnQoY3VycmVudExvY2tDb3VudCArIDEpOwogfQogCi12b2lkIEpTTG9jazo6
dW5sb2NrKEpTTG9ja0JlaGF2aW9yIGxvY2tCZWhhdmlvcikKK3ZvaWQgSlNMb2NrOjp1bmxvY2so
KQogewotICAgIEFTU0VSVChsb2NrQ291bnQoKSk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCkpOwogCi0jaWZkZWYgTkRFQlVHCi0gICAgLy8gTG9ja2luZyAibm90IGZv
ciByZWFsIiBpcyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICBpZiAobG9ja0JlaGF2aW9yID09
IFNpbGVuY2VBc3NlcnRpb25zT25seSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCisgICAgU3Bp
bkxvY2tIb2xkZXIgaG9sZGVyKCZtX3NwaW5Mb2NrKTsKKyAgICBtX2xvY2tDb3VudC0tOwogCi0g
ICAgaW50cHRyX3QgbmV3TG9ja0NvdW50ID0gbG9ja0NvdW50KCkgLSAxOwotICAgIHNldExvY2tD
b3VudChuZXdMb2NrQ291bnQpOwotICAgIGlmICghbmV3TG9ja0NvdW50ICYmIGxvY2tCZWhhdmlv
ciA9PSBMb2NrRm9yUmVhbCkgewotICAgICAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9tdXRleF91
bmxvY2soJkpTTXV0ZXgpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJlc3VsdCk7
Ci0gICAgfQorICAgIGlmICghbV9sb2NrQ291bnQpCisgICAgICAgIG1fbG9jay51bmxvY2soKTsK
IH0KIAogdm9pZCBKU0xvY2s6OmxvY2soRXhlY1N0YXRlKiBleGVjKQogewotICAgIGxvY2soZXhl
Yy0+Z2xvYmFsRGF0YSgpLmlzU2hhcmVkSW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBleGVjLT5nbG9iYWxEYXRhKCkuYXBpTG9jaygpLmxvY2so
KTsKIH0KIAogdm9pZCBKU0xvY2s6OnVubG9jayhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgdW5s
b2NrKGV4ZWMtPmdsb2JhbERhdGEoKS5pc1NoYXJlZEluc3RhbmNlKCkgPyBMb2NrRm9yUmVhbCA6
IFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmFwaUxvY2so
KS51bmxvY2soKTsKIH0KIAogYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2Nr
KCkKIHsKLSAgICBwdGhyZWFkX29uY2UoJmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNM
b2NrQ291bnQpOwotICAgIHJldHVybiAhIXB0aHJlYWRfZ2V0c3BlY2lmaWMoSlNMb2NrQ291bnQp
OworICAgIHJldHVybiBtX2xvY2tDb3VudCAmJiBtX293bmVyVGhyZWFkID09IFdURjo6Y3VycmVu
dFRocmVhZCgpOwogfQogCiAvLyBUaGlzIGlzIGZhaXJseSBuYXN0eS4gIFdlIGFsbG93IG11bHRp
cGxlIHRocmVhZHMgdG8gcnVuIG9uIHRoZSBzYW1lCkBAIC0xNDksNyArMTUyLDcgQEAgYm9vbCBK
U0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKAogLy8gdGhpcyB0byBoYXBwZW4sIGFu
ZCB3ZXJlIGl0cyBzdGFjayB0byBncm93IGZ1cnRoZXIsIHRoZW4gaXQgbWF5IHBvdGVudGlhbGx5
CiAvLyB3cml0ZSBvdmVyIHRoZSBzZWNvbmQgdGhyZWFkJ3MgY2FsbCBmcmFtZXMuCiAvLwotLy8g
SW4gYXZvaWQgSlMgc3RhY2sgY29ycnVwdGlvbiB3ZSBlbmZvcmNlIGEgcG9saWN5IG9mIG9ubHkg
ZXZlciBhbGxvd2luZyB0d28KKy8vIFRvIGF2b2lkIEpTIHN0YWNrIGNvcnJ1cHRpb24gd2UgZW5m
b3JjZSBhIHBvbGljeSBvZiBvbmx5IGV2ZXIgYWxsb3dpbmcgdHdvCiAvLyB0aHJlYWRzIHRvIHVz
ZSBhIEpTIGNvbnRleHQgY29uY3VycmVudGx5LCBhbmQgb25seSBhbGxvd2luZyB0aGUgc2Vjb25k
IG9mCiAvLyB0aGVzZSB0aHJlYWRzIHRvIGV4ZWN1dGUgdW50aWwgaXQgaGFzIGNvbXBsZXRlZCBh
bmQgZnVsbHkgcmV0dXJuZWQgZnJvbSBpdHMKIC8vIG91dGVybW9zdCBjYWxsIGludG8gSlNDLiAg
V2UgZW5mb3JjZSB0aGlzIHBvbGljeSB1c2luZyAnbG9ja0Ryb3BEZXB0aCcuICBUaGUKQEAgLTE1
OCw3ICsxNjEsNyBAQCBib29sIEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soCiAv
LyBzYW1lIHRocmVhZCBhZ2FpbiwgZW50ZXIgSlNDICh0aHJvdWdoIGV2YWx1YXRlIHNjcmlwdCBv
ciBjYWxsIGZ1bmN0aW9uKSwgYW5kIGV4aXQKIC8vIGFnYWluIHRocm91Z2ggYSBjYWxsYmFjaywg
dGhlbiB0aGUgbG9ja3Mgd2lsbCBub3QgYmUgZHJvcHBlZCB3aGVuIERyb3BBbGxMb2NrcwogLy8g
aXMgY2FsbGVkIChzaW5jZSBsb2NrRHJvcERlcHRoIGlzIG5vbi16ZXJvKS4gIFNpbmNlIHRoaXMg
dGhyZWFkIGlzIHN0aWxsIGhvbGRpbmcKLS8vIHRoZSBsb2Nrcywgb25seSBpdCB3aWxsIHJlIGFi
bGUgdG8gcmUtZW50ZXIgSlNDIChlaXRoZXIgYmUgcmV0dXJuaW5nIGZyb20gdGhlCisvLyB0aGUg
bG9ja3MsIG9ubHkgaXQgd2lsbCBiZSBhYmxlIHRvIHJlLWVudGVyIEpTQyAoZWl0aGVyIGJlIHJl
dHVybmluZyBmcm9tIHRoZQogLy8gY2FsbGJhY2ssIG9yIGJ5IHJlLWVudGVyaW5nIHRocm91Z2gg
YW5vdGhlciBjYWxsIHRvIGV2YXVsYXRlIHNjcmlwdCBvciBjYWxsCiAvLyBmdW5jdGlvbikuCiAv
LwpAQCAtMTY4LDYxICsxNzEsODQgQEAgYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdMb2NrKAogLy8gb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIG1hZGUgLSB0aG91Z2ggaW1wbGVt
ZW50aW5nIHRoZSBsZXNzIHJlc3RyaWN0aXZlIHBvbGljeQogLy8gd291bGQgbGlrZWx5IGluY3Jl
YXNlIGNvbXBsZXhpdHkgYW5kIG92ZXJoZWFkLgogLy8KLXN0YXRpYyB1bnNpZ25lZCBsb2NrRHJv
cERlcHRoID0gMDsKIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhFeGVjU3Rh
dGUqIGV4ZWMpCi0gICAgOiBtX2xvY2tCZWhhdmlvcihleGVjLT5nbG9iYWxEYXRhKCkuaXNTaGFy
ZWRJbnN0YW5jZSgpID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpCisvLyBU
aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBsb2NrcyB0aGF0IHdlcmUgZHJvcHBl
ZC4KK3Vuc2lnbmVkIEpTTG9jazo6ZHJvcEFsbExvY2tzKCkKIHsKLSAgICBwdGhyZWFkX29uY2Uo
JmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNMb2NrQ291bnQpOworICAgIGlmIChtX2xv
Y2tEcm9wRGVwdGgrKykKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAobG9ja0Ryb3BEZXB0
aCsrKSB7Ci0gICAgICAgIG1fbG9ja0NvdW50ID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICByZXR1cm4gZHJvcEFsbExvY2tzVW5jb25kaXRpb25hbGx5KCk7Cit9CisKK3Vuc2lnbmVk
IEpTTG9jazo6ZHJvcEFsbExvY2tzVW5jb25kaXRpb25hbGx5KCkKK3sKKyAgICB1bnNpZ25lZCBs
b2NrQ291bnQgPSBtX2xvY2tDb3VudDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9j
a0NvdW50OyBpKyspCisgICAgICAgIHVubG9jaygpOwogCi0gICAgbV9sb2NrQ291bnQgPSBKU0xv
Y2s6OmxvY2tDb3VudCgpOwotICAgIGZvciAoaW50cHRyX3QgaSA9IDA7IGkgPCBtX2xvY2tDb3Vu
dDsgaSsrKQotICAgICAgICBKU0xvY2s6OnVubG9jayhtX2xvY2tCZWhhdmlvcik7CisgICAgcmV0
dXJuIGxvY2tDb3VudDsKIH0KIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhK
U0xvY2tCZWhhdmlvciBKU0xvY2tCZWhhdmlvcikKLSAgICA6IG1fbG9ja0JlaGF2aW9yKEpTTG9j
a0JlaGF2aW9yKQordm9pZCBKU0xvY2s6OmdyYWJBbGxMb2Nrcyh1bnNpZ25lZCBsb2NrQ291bnQp
CiB7Ci0gICAgcHRocmVhZF9vbmNlKCZjcmVhdGVKU0xvY2tDb3VudE9uY2UsIGNyZWF0ZUpTTG9j
a0NvdW50KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9ja0NvdW50OyBpKyspCisg
ICAgICAgIGxvY2soKTsKIAotICAgIGlmIChsb2NrRHJvcERlcHRoKyspIHsKLSAgICAgICAgbV9s
b2NrQ291bnQgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fbG9ja0Ryb3BEZXB0
aC0tOworfQogCi0gICAgLy8gSXQgaXMgbmVjZXNzYXJ5IHRvIGRyb3AgZXZlbiAidW5yZWFsIiBs
b2NrcywgYmVjYXVzZSBoYXZpbmcgYSBub24temVybyBsb2NrIGNvdW50Ci0gICAgLy8gd2lsbCBw
cmV2ZW50IGEgcmVhbCBsb2NrIGZyb20gYmVpbmcgdGFrZW4uCitKU0xvY2s6OkRyb3BBbGxMb2Nr
czo6RHJvcEFsbExvY2tzKEV4ZWNTdGF0ZSogZXhlYykKKyAgICA6IG1fbG9ja0NvdW50KDApCisg
ICAgLCBtX2dsb2JhbERhdGEoJmV4ZWMtPmdsb2JhbERhdGEoKSkKK3sKKyAgICBtX2xvY2tDb3Vu
dCA9IG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmRyb3BBbGxMb2NrcygpOworfQogCi0gICAgbV9s
b2NrQ291bnQgPSBKU0xvY2s6OmxvY2tDb3VudCgpOwotICAgIGZvciAoaW50cHRyX3QgaSA9IDA7
IGkgPCBtX2xvY2tDb3VudDsgaSsrKQotICAgICAgICBKU0xvY2s6OnVubG9jayhtX2xvY2tCZWhh
dmlvcik7CitKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKKyAgICA6IG1fbG9ja0NvdW50KDApCisgICAgLCBtX2dsb2JhbERhdGEoZ2xv
YmFsRGF0YSkKK3sKKyAgICBtX2xvY2tDb3VudCA9IG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmRy
b3BBbGxMb2NrcygpOwogfQogCiBKU0xvY2s6OkRyb3BBbGxMb2Nrczo6fkRyb3BBbGxMb2Nrcygp
CiB7Ci0gICAgZm9yIChpbnRwdHJfdCBpID0gMDsgaSA8IG1fbG9ja0NvdW50OyBpKyspCi0gICAg
ICAgIEpTTG9jazo6bG9jayhtX2xvY2tCZWhhdmlvcik7Ci0KLSAgICAtLWxvY2tEcm9wRGVwdGg7
CisgICAgbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZ3JhYkFsbExvY2tzKG1fbG9ja0NvdW50KTsK
IH0KIAogI2Vsc2UgLy8gKE9TKERBUldJTikgfHwgVVNFKFBUSFJFQURTKSkKIAotSlNMb2NrOjpK
U0xvY2soRXhlY1N0YXRlKikKLSAgICA6IG1fbG9ja0JlaGF2aW9yKFNpbGVuY2VBc3NlcnRpb25z
T25seSkKK0dsb2JhbEpTTG9jazo6R2xvYmFsSlNMb2NrKCkKK3sKK30KKworR2xvYmFsSlNMb2Nr
Ojp+R2xvYmFsSlNMb2NrKCkKK3sKK30KKworSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNH
bG9iYWxEYXRhKikKIHsKIH0KIAotLy8gSWYgdGhyZWFkaW5nIHN1cHBvcnQgaXMgb2ZmLCBzZXQg
dGhlIGxvY2sgY291bnQgdG8gYSBjb25zdGFudCB2YWx1ZSBvZiAxIHNvIHNzZXJ0aW9ucwotLy8g
dGhhdCB0aGUgbG9jayBpcyBoZWxkIGRvbid0IGZhaWwKLWludHB0cl90IEpTTG9jazo6bG9ja0Nv
dW50KCkKK0pTTG9ja0hvbGRlcjo6SlNMb2NrSG9sZGVyKEpTR2xvYmFsRGF0YSYpCit7Cit9CisK
K0pTTG9ja0hvbGRlcjo6SlNMb2NrSG9sZGVyKEV4ZWNTdGF0ZSopCit7Cit9CisKK0pTTG9ja0hv
bGRlcjo6fkpTTG9ja0hvbGRlcigpCit7Cit9CisKK0pTTG9jazo6SlNMb2NrKCkKK3sKK30KKwor
SlNMb2NrOjp+SlNMb2NrKCkKIHsKLSAgICByZXR1cm4gMTsKIH0KIAogYm9vbCBKU0xvY2s6OmN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkKQEAgLTIzMCwxMSArMjU2LDExIEBAIGJvb2wgSlNM
b2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBKU0xvY2s6OmxvY2soSlNMb2NrQmVoYXZpb3IpCit2b2lkIEpTTG9jazo6bG9jaygpCiB7
CiB9CiAKLXZvaWQgSlNMb2NrOjp1bmxvY2soSlNMb2NrQmVoYXZpb3IpCit2b2lkIEpTTG9jazo6
dW5sb2NrKCkKIHsKIH0KIApAQCAtMjQ2LDExICsyNzIsMzMgQEAgdm9pZCBKU0xvY2s6OnVubG9j
ayhFeGVjU3RhdGUqKQogewogfQogCit2b2lkIEpTTG9jazo6bG9jayhKU0dsb2JhbERhdGEmKQor
eworfQorCit2b2lkIEpTTG9jazo6dW5sb2NrKEpTR2xvYmFsRGF0YSYpCit7Cit9CisKK3Vuc2ln
bmVkIEpTTG9jazo6ZHJvcEFsbExvY2tzKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWdu
ZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoKQoreworICAgIHJldHVybiAw
OworfQorCit2b2lkIEpTTG9jazo6Z3JhYkFsbExvY2tzKHVuc2lnbmVkKQoreworfQorCiBKU0xv
Y2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKEV4ZWNTdGF0ZSopCiB7CiB9CiAKLUpTTG9j
azo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoSlNMb2NrQmVoYXZpb3IpCitKU0xvY2s6OkRy
b3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKEpTR2xvYmFsRGF0YSopCiB7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MjMsNiArMjMsOSBAQAogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1RDU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCkBAIC0zMCw4ICszMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8vIGltcG9ydGFu
dCB0byBsb2NrIGJlZm9yZSBkb2luZyBhbnl0aGluZyB0aGF0IGFsbG9jYXRlcyBhCiAgICAgLy8g
SmF2YVNjcmlwdCBkYXRhIHN0cnVjdHVyZSBvciB0aGF0IGludGVyYWN0cyB3aXRoIHNoYXJlZCBz
dGF0ZQogICAgIC8vIHN1Y2ggYXMgdGhlIHByb3RlY3QgY291bnQgaGFzaCB0YWJsZS4gVGhlIHNp
bXBsZXN0IHdheSB0byBsb2NrCi0gICAgLy8gaXMgdG8gY3JlYXRlIGEgbG9jYWwgSlNMb2NrIG9i
amVjdCBpbiB0aGUgc2NvcGUgd2hlcmUgdGhlIGxvY2sgCi0gICAgLy8gbXVzdCBiZSBoZWxkLiBU
aGUgbG9jayBpcyByZWN1cnNpdmUgc28gbmVzdGluZyBpcyBvay4gVGhlIEpTTG9jayAKKyAgICAv
LyBpcyB0byBjcmVhdGUgYSBsb2NhbCBKU0xvY2tIb2xkZXIgb2JqZWN0IGluIHRoZSBzY29wZSB3
aGVyZSB0aGUgbG9jayAKKyAgICAvLyBtdXN0IGJlIGhlbGQgYW5kIHBhc3MgaXQgdGhlIGNvbnRl
eHQgdGhhdCByZXF1aXJlcyBwcm90ZWN0aW9uLiAKKyAgICAvLyBUaGUgbG9jayBpcyByZWN1cnNp
dmUgc28gbmVzdGluZyBpcyBvay4gVGhlIEpTTG9jayAKICAgICAvLyBvYmplY3QgYWxzbyBhY3Rz
IGFzIGEgY29udmVuaWVuY2Ugc2hvcnQtaGFuZCBmb3IgcnVubmluZyBpbXBvcnRhbnQKICAgICAv
LyBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4KIApAQCAtNDQsNjIgKzQ4LDY1IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIC8vIERyb3BBbGxMb2NrcyBvYmplY3QgdGFrZXMgY2FyZSB0byByZWxlYXNl
IHRoZSBKU0xvY2sgb25seSBpZiB5b3VyCiAgICAgLy8gdGhyZWFkIGFjcXVpcmVkIGl0IHRvIGJl
Z2luIHdpdGguCiAKLSAgICAvLyBGb3IgY29udGV4dHMgb3RoZXIgdGhhbiB0aGUgc2luZ2xlIHNo
YXJlZCBvbmUsIGltcGxpY2l0IGxvY2tpbmcgaXMgbm90IGRvbmUsCi0gICAgLy8gYnV0IHdlIHN0
aWxsIG5lZWQgdG8gcGVyZm9ybSBhbGwgdGhlIGNvdW50aW5nIGluIG9yZGVyIHRvIGtlZXAgZGVi
dWcKLSAgICAvLyBhc3NlcnRpb25zIHdvcmtpbmcsIHNvIHRoYXQgY2xpZW50cyB0aGF0IHVzZSB0
aGUgc2hhcmVkIGNvbnRleHQgZG9uJ3QgYnJlYWsuCi0KICAgICBjbGFzcyBFeGVjU3RhdGU7CiAg
ICAgY2xhc3MgSlNHbG9iYWxEYXRhOwogCi0gICAgZW51bSBKU0xvY2tCZWhhdmlvciB7IFNpbGVu
Y2VBc3NlcnRpb25zT25seSwgTG9ja0ZvclJlYWwgfTsKKyAgICAvLyBUaGlzIGNsYXNzIGlzIHVz
ZWQgdG8gcHJvdGVjdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGxlZ2FjeSBzaW5nbGUgCisg
ICAgLy8gc2hhcmVkIEpTR2xvYmFsRGF0YS4KKyAgICBjbGFzcyBHbG9iYWxKU0xvY2sgeworICAg
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHbG9iYWxKU0xvY2spOworICAgIHB1YmxpYzoKKyAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR2xvYmFsSlNMb2NrKCk7CisgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIH5HbG9iYWxKU0xvY2soKTsKKyAgICB9OworCisgICAgY2xhc3MgSlNMb2NrSG9s
ZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTTG9ja0hvbGRl
cihKU0dsb2JhbERhdGEqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNMb2NrSG9sZGVy
KEpTR2xvYmFsRGF0YSYpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0xvY2tIb2xkZXIo
RXhlY1N0YXRlKik7CisKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9ja0hvbGRlcigp
OworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IG1fZ2xvYmFsRGF0
YTsKKyAgICB9OwogCiAgICAgY2xhc3MgSlNMb2NrIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoSlNMb2NrKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
TG9jayhFeGVjU3RhdGUqKTsKLSAgICAgICAgSlNMb2NrKEpTR2xvYmFsRGF0YSopOworICAgICAg
ICBKU0xvY2soKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9jaygpOworCisgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9jaygpOworICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHVubG9jaygpOwogCi0gICAgICAgIEpTTG9jayhKU0xvY2tCZWhhdmlvciBsb2Nr
QmVoYXZpb3IpCi0gICAgICAgICAgICA6IG1fbG9ja0JlaGF2aW9yKGxvY2tCZWhhdmlvcikKLSAg
ICAgICAgewotI2lmZGVmIE5ERUJVRwotICAgICAgICAgICAgLy8gTG9ja2luZyAibm90IGZvciBy
ZWFsIiBpcyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICAgICAgICAgIGlmIChsb2NrQmVoYXZp
b3IgPT0gU2lsZW5jZUFzc2VydGlvbnNPbmx5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSNl
bmRpZgotICAgICAgICAgICAgbG9jayhsb2NrQmVoYXZpb3IpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgfkpTTG9jaygpCi0gICAgICAgIHsgCi0jaWZkZWYgTkRFQlVHCi0gICAgICAgICAgICAvLyBM
b2NraW5nICJub3QgZm9yIHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0dXJlLgotICAgICAgICAg
ICAgaWYgKG1fbG9ja0JlaGF2aW9yID09IFNpbGVuY2VBc3NlcnRpb25zT25seSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICAgICAgICAgIHVubG9jayhtX2xvY2tCZWhhdmlv
cik7IAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBsb2NrKEpTTG9ja0JlaGF2aW9yKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdW5sb2NrKEpTTG9ja0JlaGF2aW9yKTsKICAgICAgICAgc3RhdGljIHZvaWQg
bG9jayhFeGVjU3RhdGUqKTsKICAgICAgICAgc3RhdGljIHZvaWQgdW5sb2NrKEV4ZWNTdGF0ZSop
OworICAgICAgICBzdGF0aWMgdm9pZCBsb2NrKEpTR2xvYmFsRGF0YSYpOworICAgICAgICBzdGF0
aWMgdm9pZCB1bmxvY2soSlNHbG9iYWxEYXRhJik7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIGludHB0cl90IGxvY2tDb3VudCgpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpOworICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7CiAKLSAgICAg
ICAgSlNMb2NrQmVoYXZpb3IgbV9sb2NrQmVoYXZpb3I7CisgICAgICAgIHVuc2lnbmVkIGRyb3BB
bGxMb2NrcygpOworICAgICAgICB1bnNpZ25lZCBkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHko
KTsKKyAgICAgICAgdm9pZCBncmFiQWxsTG9ja3ModW5zaWduZWQgbG9ja0NvdW50KTsKKworICAg
ICAgICBTcGluTG9jayBtX3NwaW5Mb2NrOworICAgICAgICBNdXRleCBtX2xvY2s7CisgICAgICAg
IFRocmVhZElkZW50aWZpZXIgbV9vd25lclRocmVhZDsKKyAgICAgICAgaW50cHRyX3QgbV9sb2Nr
Q291bnQ7CisgICAgICAgIHVuc2lnbmVkIG1fbG9ja0Ryb3BEZXB0aDsKIAogICAgICAgICBjbGFz
cyBEcm9wQWxsTG9ja3MgewogICAgICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRHJvcEFs
bExvY2tzKTsKICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
RHJvcEFsbExvY2tzKEV4ZWNTdGF0ZSogZXhlYyk7Ci0gICAgICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBEcm9wQWxsTG9ja3MoSlNMb2NrQmVoYXZpb3IpOworICAgICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgRHJvcEFsbExvY2tzKEpTR2xvYmFsRGF0YSopOwogICAgICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgfkRyb3BBbGxMb2NrcygpOwogICAgICAgICAgICAgCiAgICAgICAgIHByaXZh
dGU6CiAgICAgICAgICAgICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKLSAgICAgICAgICAgIEpTTG9j
a0JlaGF2aW9yIG1fbG9ja0JlaGF2aW9yOworICAgICAgICAgICAgUmVmUHRyPEpTR2xvYmFsRGF0
YT4gbV9nbG9iYWxEYXRhOwogICAgICAgICB9OwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
NzUsOCArNzUsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBIYW5kbGVUeXBlczxNYXBwZWRU
eXBlPjo6Z2V0RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJmltcGwtPmpzVmFsdWUoKSkp
OwogICAgIH0KIAotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIGNvbnN0IEtleVR5cGUmIGtl
eSwgRXh0ZXJuYWxUeXBlIHZhbHVlKQorICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgY29uc3QgS2V5VHlwZSYga2V5LCBFeHRlcm5hbFR5cGUgdmFsdWUpCiAgICAgeworICAg
ICAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuYXBpTG9jaygpLmN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgICAgICB0eXBlbmFtZSBNYXBUeXBlOjpBZGRS
ZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7CiAgICAgICAgIGlmICghcmVzdWx0Lmlz
TmV3RW50cnkpCiAgICAgICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKHJlc3VsdC5pdGVyYXRv
ci0+c2Vjb25kKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NyBAQAorMjAxMi0w
Ni0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAg
IEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEN1cnJlbnQgcmVncmVzc2lv
biB0ZXN0cyBhcmUgc3VmZmljaWVudC4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0
IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAg
IGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91
dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uIEFsc28g
YWRkZWQgYSBjb3VwbGUgSlNMb2NrcyB0byBwbGFjZXMgdGhhdCBkaWRuJ3QgYWxyZWFkeSAKKyAg
ICAgICAgaGF2ZSBpdCB0aGF0IG5lZWRlZCBpdC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0dD
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3cpOgorICAgICAgICAoV2ViQ29yZTo6
R0NDb250cm9sbGVyOjpkaXNjYXJkQWxsQ29tcGlsZWRDb2RlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNDdXN0b21Wb2lkQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1
c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmFtZXNwYWNlVVJJKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Vycm9ySGFu
ZGxlcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNF
dmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6aGFu
ZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6bm9kZUFzU2Ny
aXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3Bl
Y3RlZE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdE1hbmFn
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVJ
bmplY3RlZFNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6
OmNhbkFjY2Vzc0luc3BlY3RlZFdpbmRvdyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNMYXp5
RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVudExpc3RlbmVy
Ojppbml0aWFsaXplSlNGdW5jdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNYWluVGhy
ZWFkRXhlY1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU01haW5UaHJlYWRFeGVjU3RhdGU6
OmV2YWx1YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJhY2tDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNdXRhdGlvbkNhbGxiYWNrOjpoYW5kbGVFdmVu
dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZSk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrOjpo
YW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGVGdW5jdGlvbkluQ29udGV4dCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OmV2YWx1YXRlSW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250
cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6OmluaXRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
dXBkYXRlRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2Fj
aGVhYmxlQmluZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJv
bGxlcjo6YmluZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJv
bGxlcjo6d2luZG93U2NyaXB0TlBPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6anNPYmplY3RGb3JQbHVnaW5FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cyk6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6OndpbmRvd1NjcmlwdE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRp
c3BhdGNoRGlkUGF1c2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVu
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmV2ZW50TGlzdGVuZXJIYW5kbGVyTG9jYXRpb24pOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
RnVuY3Rpb25DYWxsOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbGJh
Y2s6OmNhbGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6OnNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRHbG9iYWxPYmplY3Q6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9i
YWxPYmplY3Q6OnJlbW92ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6OmdldFN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRWYWx1ZTo6dG9JbnNwZWN0b3JWYWx1ZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJTY3JpcHRDb250cm9sbGVyOjp+V29ya2VyU2NyaXB0Q29udHJvbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppbml0U2NyaXB0KToKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmRpc2FibGVFdmFsKToKKyAgICAgICAgKiBiaW5k
aW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAgICAgKF9kaWRFeGVjdXRlKToKKyAg
ICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IF9zZXRJbXA6b3JpZ2luUm9vdE9iamVjdDpyb290T2Jq
ZWN0Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgX3NldE9yaWdpblJvb3RPYmplY3Q6
YW5kUm9vdE9iamVjdDpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGRlYWxsb2NdKToK
KyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGZpbmFsaXplXSk6CisgICAgICAgICgtW1dlYlNj
cmlwdE9iamVjdCBjYWxsV2ViU2NyaXB0TWV0aG9kOndpdGhBcmd1bWVudHM6XSk6CisgICAgICAg
ICgtW1dlYlNjcmlwdE9iamVjdCBldmFsdWF0ZVdlYlNjcmlwdDpdKToKKyAgICAgICAgKC1bV2Vi
U2NyaXB0T2JqZWN0IHNldFZhbHVlOmZvcktleTpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2Jq
ZWN0IHZhbHVlRm9yS2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgcmVtb3ZlV2Vi
U2NyaXB0S2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgaGFzV2ViU2NyaXB0S2V5
Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc3RyaW5nUmVwcmVzZW50YXRpb25dKToK
KyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHdlYlNjcmlwdFZhbHVlQXRJbmRleDpdKToKKyAg
ICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHNldFdlYlNjcmlwdFZhbHVlQXRJbmRleDp2YWx1ZTpd
KToKKyAgICAgICAgKCtbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpv
cmlnaW5Sb290T2JqZWN0OnJvb3RPYmplY3Q6XSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50
YXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFj
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoTm9Q
YXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xh
c3MxUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0
aENsYXNzMlBhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFj
a1dpdGhTdHJpbmdMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxs
YmFja1dpdGhCb29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxs
YmFja1JlcXVpcmVzVGhpc1RvUGFzcyk6CisgICAgICAgICogYnJpZGdlL05QX2pzb2JqZWN0LmNw
cDoKKyAgICAgICAgKF9OUE5fSW52b2tlRGVmYXVsdCk6CisgICAgICAgIChfTlBOX0ludm9rZSk6
CisgICAgICAgIChfTlBOX0V2YWx1YXRlKToKKyAgICAgICAgKF9OUE5fR2V0UHJvcGVydHkpOgor
ICAgICAgICAoX05QTl9TZXRQcm9wZXJ0eSk6CisgICAgICAgIChfTlBOX1JlbW92ZVByb3BlcnR5
KToKKyAgICAgICAgKF9OUE5fSGFzUHJvcGVydHkpOgorICAgICAgICAoX05QTl9IYXNNZXRob2Qp
OgorICAgICAgICAoX05QTl9FbnVtZXJhdGUpOgorICAgICAgICAoX05QTl9Db25zdHJ1Y3QpOgor
ICAgICAgICAqIGJyaWRnZS9jL2NfY2xhc3MuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
Q0NsYXNzOjp+Q0NsYXNzKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNDbGFzczo6bWV0aG9k
c05hbWVkKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNDbGFzczo6ZmllbGROYW1lZCk6Cisg
ICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZSk6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZU1ldGhvZCk6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QpOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6Q0luc3RhbmNlOjppbnZva2VDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6Q0luc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBicmlkZ2UvYy9j
X3J1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0ZpZWxkOjp2YWx1ZUZyb21J
bnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDRmllbGQ6OnNldFZhbHVlVG9JbnN0
YW5jZSk6CisgICAgICAgICogYnJpZGdlL2MvY191dGlsaXR5LmNwcDoKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6OmNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9q
c29iamVjdC5tbToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y2FsbCk6CisgICAgICAgIChKYXZh
SlNPYmplY3Q6OmV2YWwpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpnZXRNZW1iZXIpOgorICAg
ICAgICAoSmF2YUpTT2JqZWN0OjpzZXRNZW1iZXIpOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpy
ZW1vdmVNZW1iZXIpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpnZXRTbG90KToKKyAgICAgICAg
KEphdmFKU09iamVjdDo6c2V0U2xvdCk6CisgICAgICAgIChKYXZhSlNPYmplY3Q6OnRvU3RyaW5n
KToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y29udmVydFZhbHVlVG9KT2JqZWN0KToKKyAgICAg
ICAgKEphdmFKU09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhbHVlKToKKyAgICAgICAgKiBicmlk
Z2Uvam5pL2puaV9vYmpjLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6ZGlzcGF0Y2hKTklD
YWxsKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHA6Cisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb0pWYWx1ZSk6CisgICAgICAgICog
YnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcDoKKyAgICAgICAgKEphdmFDbGFzczo6SmF2
YUNsYXNzKToKKyAgICAgICAgKEphdmFDbGFzczo6fkphdmFDbGFzcyk6CisgICAgICAgICogYnJp
ZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcDoKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6
c3RyaW5nVmFsdWUpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3Bw
OgorICAgICAgICAoYXBwZW5kQ2xhc3NOYW1lKToKKyAgICAgICAgKEphdmFNZXRob2Q6OnNpZ25h
dHVyZSk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YVN0cmluZ0pTQy5oOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6SmF2YVN0cmluZzo6SmF2YVN0cmluZyk6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpKYXZhU3RyaW5nOjp+SmF2YVN0cmluZyk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpKYXZhU3RyaW5nOjp1dGY4KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFTdHJp
bmc6OmluaXQpOgorICAgICAgICAqIGJyaWRnZS9qc2MvQnJpZGdlSlNDLmNwcDoKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KToKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6Okluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKiBi
cmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tOgorICAgICAgICAoT2JqY0luc3RhbmNlOjptb3Zl
R2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjppbnZv
a2VPYmpjTWV0aG9kKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhv
ZCk6CisgICAgICAgIChPYmpjSW5zdGFuY2U6OnNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCk6Cisg
ICAgICAgIChPYmpjSW5zdGFuY2U6OmdldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCk6CisgICAgICAg
ICogYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
T2JqY0ZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpP
YmpjRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZSk6CisgICAgICAgICogYnJpZGdlL29iamMvb2Jq
Y191dGlsaXR5Lm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9PYmpj
VmFsdWUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE5TU3RyaW5nVG9TdHJpbmcp
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE9iamNWYWx1ZVRvVmFsdWUpOgorICAg
ICAgICAqIGJyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpRdEluc3RhbmNlOjp+UXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdElu
c3RhbmNlOjpnZXRRdEluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFu
Y2U6Om5ld1J1bnRpbWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9waXhtYXBydW50
aW1lLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwSW5zdGFuY2U6OmNyZWF0
ZVBpeG1hcFJ1bnRpbWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9ydW50aW1lLmNw
cDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQpOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFFWYXJpYW50VG9WYWx1ZSk6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjYWxsKToKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNhbGwpOgorICAgICAgICAqIGJy
aWRnZS9xdC9xdF9ydW50aW1lX3F0NC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252
ZXJ0VmFsdWVUb1FWYXJpYW50KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRRVmFy
aWFudFRvVmFsdWUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0YU1ldGhv
ZDo6Y2FsbCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVDb25uZWN0aW9uTWV0
aG9kOjpjYWxsKToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAg
ICAgICogaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElt
YWdlTG9hZGVyOjpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0YXJ0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
cGVyZm9ybVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6bnBPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFu
Z2VkKToKKyAgICAgICAgKiBwbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpnZXRXaW5kb3dJbmZvKToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVn
aW5WaWV3RWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBF
dmVudCk6CisgICAgICAgICogcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
cGxhdGZvcm1TdGFydCk6CisgICAgICAgICogcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKiBw
bHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBX
aW5kb3dJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0
YXJ0KToKKyAgICAgICAgKiBwbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c2V0TlBXaW5kb3dSZWN0KToKKyAgICAgICAgKiB0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3Vw
cG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09i
amVjdCk6CisgICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0
KToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
WE1MSHR0cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9uKToKKwogMjAxMi0wNi0yMSAgVGFpanUgVHN1
aWtpICA8dHppa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogVW5pZnkg
RmlsZVN5c3RlbSBjYWxsYmFja3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dD
Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
R0NDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lkIGNvbGxlY3Qodm9pZCopCiB7Ci0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIEpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwogfQogCkBA
IC02Myw3ICs2Myw3IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdFNvb24oKQog
ICAgIC8vIGRvd24gaW50byBXVEYgc28gdGhhdCBtb3JlIHBsYXRmb3JtcyBjYW4gdGFrZSBhZHZh
bnRhZ2Ugb2YgaXQsIHdlIHdpbGwgYmUgCiAgICAgLy8gYWJsZSB0byB1c2UgcmVwb3J0QWJhbmRv
bmVkT2JqZWN0R3JhcGggb24gbW9yZSBwbGF0Zm9ybXMuCiAjaWYgVVNFKENGKQotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCktPmhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKTsKICNlbHNl
CiAgICAgaWYgKCFtX0dDVGltZXIuaXNBY3RpdmUoKSkKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBH
Q0NvbnRyb2xsZXI6OmdjVGltZXJGaXJlZChUaW1lcjxHQwogCiB2b2lkIEdDQ29udHJvbGxlcjo6
Z2FyYmFnZUNvbGxlY3ROb3coKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICBpZiAoIUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVh
cC5pc0J1c3koKSkKICAgICAgICAgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5o
ZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CiB9CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBHQ0Nv
bnRyb2xsZXI6OnNldEphdmFTY3JpcHRHYXJiYWdlQwogCiB2b2lkIEdDQ29udHJvbGxlcjo6ZGlz
Y2FyZEFsbENvbXBpbGVkQ29kZSgpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5k
ZWxldGVBbGxDb21waWxlZENvZGUoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2Fs
bGJhY2suY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw3ICs0OCw3IEBAIGJvb2wgSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGUK
IAogICAgIFJlZlB0cjxKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IHByb3RlY3QodGhpcyk7
CiAKLSAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkp
OwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCShyZXZp
c2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRD
YWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBKU0N1c3Rv
bVZvaWRDYWxsYmFjazo6aGFuZGxlRXZlbnQoKQogCiAgICAgUmVmUHRyPEpTQ3VzdG9tVm9pZENh
bGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogICAgICAgICAKLSAgICBKU0M6OkpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3M7CiAgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZl
ci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBA
QCBTdHJpbmcgSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hCiB7CiAgICAgQVNTRVJU
KG1fY3VzdG9tUmVzb2x2ZXIpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCk7CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
cnJvckhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXJyb3JIYW5kbGVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2
Myw3IEBAIHZvaWQgSlNFcnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEUKIAogICAgIEVy
cm9yRXZlbnQqIGVycm9yRXZlbnQgPSBzdGF0aWNfY2FzdDxFcnJvckV2ZW50Kj4oZXZlbnQpOwog
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5nbG9iYWxEYXRhKCkpOwogCiAgICAgSlNP
YmplY3QqIGpzRnVuY3Rpb24gPSB0aGlzLT5qc0Z1bmN0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpOwogICAgIGlmICghanNGdW5jdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NyArNTQsNyBAQCBKU1ZhbHVlIEpTRXZlbnQ6OmNsaXBib2FyZERhdGEoRXhlY1N0YXRlCiAKIEpT
VmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEV2ZW50KiBldmVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgaWYgKCFldmVudCkKICAg
ICAgICAgcmV0dXJuIGpzTnVsbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NSw3ICs3NSw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHQKICAg
ICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgfHwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
aXNKU0V4ZWN1dGlvbkZvcmJpZGRlbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPmdsb2JhbERhdGEoKSk7CiAKICAgICBKU09iamVjdCoganNGdW5j
dGlvbiA9IHRoaXMtPmpzRnVuY3Rpb24oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgaWYg
KCFqc0Z1bmN0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3Rl
ZFNjcmlwdEhvc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTIwOTI2KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIE5vZGUqIEluamVjdGVkU2NyaXB0
SG9zdDo6c2NyaXB0VmFsdWVBc04KIAogU2NyaXB0VmFsdWUgSW5qZWN0ZWRTY3JpcHRIb3N0Ojpu
b2RlQXNTY3JpcHRWYWx1ZShTY3JpcHRTdGF0ZSogc3RhdGUsIE5vZGUqIG5vZGUpCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhzdGF0ZSk7CiAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHN0YXRlLT5nbG9iYWxEYXRhKCksIHRv
SlMoc3RhdGUsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoc3RhdGUpLCBub2Rl
KSk7CiB9CiAKQEAgLTk1LDcgKzk1LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6
aW5zcGVjdGVkTwogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAgICAgU2NyaXB0VmFsdWUgc2NyaXB0VmFsdWUgPSBvYmplY3Qt
PmdldChleGVjKTsKICAgICBpZiAoc2NyaXB0VmFsdWUuaGFzTm9WYWx1ZSgpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFNjcmlwdE9iamVjdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUluamVjdGVkU2NyaXB0
KGNvbnN0IFN0cmluZyYgc291cmNlLCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGludCBpZCkK
IHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKIAogICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IG1h
a2VTb3VyY2Uoc3RyaW5nVG9VU3RyaW5nKHNvdXJjZSkpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0ZS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKQEAgLTgxLDcgKzgxLDcgQEAgU2NyaXB0T2JqZWN0IElu
amVjdGVkU2NyaXB0TWFuYWdlcjo6Y3JlYQogCiBib29sIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6
Y2FuQWNjZXNzSW5zcGVjdGVkV2luZG93KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKIHsKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKHNjcmlwdFN0YXRlKTsKICAgICBKU0RPTVdpbmRvdyogaW5zcGVjdGVkV2luZG93ID0gdG9K
U0RPTVdpbmRvdyhzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBpZiAo
IWluc3BlY3RlZFdpbmRvdykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlz
dGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgSlNPYmplY3QqIEpT
TGF6eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpegogICAgIGlmIChtX29yaWdpbmFsTm9kZSkgewog
ICAgICAgICBpZiAoIXdyYXBwZXIoKSkgewogICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgJ25v
ZGUnIGhhcyBhIEphdmFTY3JpcHQgd3JhcHBlciB0byBtYXJrIHRoZSBldmVudCBsaXN0ZW5lciB3
ZSdyZSBjcmVhdGluZy4KLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgICAg
IC8vIEZJWE1FOiBTaG91bGQgcGFzcyB0aGUgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGgg
dGhlIG5vZGUKICAgICAgICAgICAgIHNldFdyYXBwZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc09i
amVjdCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgbV9vcmlnaW5hbE5vZGUpKSk7CiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgSlNDOjpTY29wZUNoYWluTm9kZSogY2hhaW4sIGNvbnN0IEpTQzo6U291cmNl
Q29kZSYgc291cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkpTVmFsdWUqIGV4Y2Vw
dGlvbikKICAgICB7CiAgICAgICAgIEpTTWFpblRocmVhZEV4ZWNTdGF0ZSBjdXJyZW50U3RhdGUo
ZXhlYyk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHJl
dHVybiBKU0M6OmV2YWx1YXRlKGV4ZWMsIGNoYWluLCBzb3VyY2UsIHRoaXNWYWx1ZSwgZXhjZXB0
aW9uKTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0
aW9uQ2FsbGJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkpTTXV0YXRpb25D
YWxsYmFjay5oIgogCisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiSlNN
dXRhdGlvblJlY29yZC5oIgogI2luY2x1ZGUgIkpTV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgog
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTUwLDcgKzUxLDcgQEAgYm9v
bCBKU011dGF0aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KE11dAogCiAgICAgUmVmUHRyPEpTTXV0
YXRpb25DYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkocmV2aXNpb24gMTIw
OTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBKU05vZGVGaWx0ZXJDb25kaXRp
b246OkpTTm9kZUZpbHRlckNvbmRpCiAKIHNob3J0IEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNj
ZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgTm9kZSogZmlsdGVyTm9kZSkgY29uc3QKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogCiAgICAgaWYgKCFtX2ZpbHRlcikKICAgICAgICAgcmV0dXJuIE5vZGVG
aWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNr
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDcgKzQwLDcgQEAgYm9vbCBKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNr
OjpoYQogCiAgICAgUmVmUHRyPEpTUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+IHByb3Rl
Y3QodGhpcyk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7
CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKGpzTnVt
YmVyKHRpbWUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRD
YWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0ph
dmFTY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKIAogI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXJDYWxsRnJh
bWUuaD4KICNpbmNsdWRlIDxydW50aW1lL0NvbXBsZXRpb24uaD4KQEAgLTEwNiw3ICsxMDcsNyBA
QCBKU1ZhbHVlIEphdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKGNvCiAgICAgaWYgKCFtX2lz
VmFsaWQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNl
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUu
ZXZhbHVhdGUoc2NyaXB0LCBleGNlcHRpb24pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1Nl
cnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIFBhZ2VTY3Jp
cHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuCiAKIHZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVy
OjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4qKQogewot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAvLyBJZiBKYXZh
U2NyaXB0IHN0YWNrIGlzIG5vdCBlbXB0eSBwb3N0cG9uZSByZWNvbXBpbGF0aW9uLgogICAgIGlm
IChKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmR5bmFtaWNHbG9iYWxPYmplY3Qp
CiAgICAgICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVj
dXRlKFNjcmlwdEV4ZWMKIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlRnVuY3Rpb25JbkNv
bnRleHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1fZnVuY3Rpb24p
OwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soY29udGV4dC0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRh
OwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobV9mdW5jdGlvbi5nZXQoKSwg
Y2FsbERhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVk
RnJhbWVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0Q2FjaGVkRnJh
bWVEYXRhOjpTY3JpcHRDYWNoZWRGcmFtZURhdGEoRnJhbWUqIGZyYW1lKQogewotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBTY3JpcHRDb250cm9s
bGVyKiBzY3JpcHRDb250cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOwogICAgIFNjcmlwdENvbnRy
b2xsZXI6OlNoZWxsTWFwJiB3aW5kb3dTaGVsbHMgPSBzY3JpcHRDb250cm9sbGVyLT5tX3dpbmRv
d1NoZWxsczsKQEAgLTY3LDcgKzY3LDcgQEAgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjp+U2NyaXB0
Q2FjaGVkRnJhbQogCiB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZShGcmFtZSog
ZnJhbWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
IAogICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXIgPSBmcmFtZS0+c2NyaXB0
KCk7CiAgICAgU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXAmIHdpbmRvd1NoZWxscyA9IHNjcmlw
dENvbnRyb2xsZXItPm1fd2luZG93U2hlbGxzOwpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIFNjcmlw
dENhY2hlZEZyYW1lRGF0YTo6Y2xlYXIoKQogICAgIGlmIChtX3dpbmRvd3MuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOwogICAgIG1fd2luZG93cy5jbGVhcigpOwogICAgIGdjQ29udHJvbGxlcigpLmdhcmJh
Z2VDb2xsZWN0U29vbigpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzMsNyArMTMzLDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbgog
ICAgIGNvbnN0IFN0cmluZyogc2F2ZWRTb3VyY2VVUkwgPSBtX3NvdXJjZVVSTDsKICAgICBtX3Nv
dXJjZVVSTCA9ICZzb3VyY2VVUkw7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgUmVmUHRyPEZyYW1l
PiBwcm90ZWN0ID0gbV9mcmFtZTsKIApAQCAtMTc3LDcgKzE3Nyw3IEBAIHZvaWQgU2NyaXB0Q29u
dHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCgKICAgICBpZiAobV93aW5kb3dTaGVsbHMuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwogCiAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2lu
ZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikg
ewogICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnNlY29uZC5n
ZXQoKTsKQEAgLTIwOSw3ICsyMDksNyBAQCBKU0RPTVdpbmRvd1NoZWxsKiBTY3JpcHRDb250cm9s
bGVyOjppbml0CiB7CiAgICAgQVNTRVJUKCFtX3dpbmRvd1NoZWxscy5jb250YWlucyh3b3JsZCkp
OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayh3b3JsZC0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEpTRE9NV2luZG93U2hlbGwq
IHdpbmRvd1NoZWxsID0gY3JlYXRlV2luZG93U2hlbGwod29ybGQpOwogCkBAIC0yODQsOSArMjg0
LDEwIEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQoKQogICAgIGlmICgh
bV9mcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVy
ID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsg
KytpdGVyKQorICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxs
cy5iZWdpbigpOyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soaXRlci0+Zmlyc3QtPmdsb2JhbERhdGEoKSk7CiAgICAgICAg
IGl0ZXItPnNlY29uZC0+d2luZG93KCktPnVwZGF0ZURvY3VtZW50KCk7CisgICAgfQogfQogCiB2
b2lkIFNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCkKQEAgLTMwMCw3ICsz
MDEsNyBAQCBCaW5kaW5nczo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6CiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgaWYgKCFtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KSB7Ci0g
ICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9j
a0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
ICAgICBtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6
OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogICAgIH0KICAgICByZXR1
cm4gbV9jYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKQEAgLTMxMiw3ICszMTMsNyBA
QCBCaW5kaW5nczo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6CiAgICAgICAgIHJldHVy
biAwOwogCiAgICAgaWYgKCFtX2JpbmRpbmdSb290T2JqZWN0KSB7Ci0gICAgICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBtX2JpbmRpbmdS
b290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3Qo
cGx1Z2luV29ybGQoKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9iaW5kaW5nUm9vdE9iamVjdC5n
ZXQoKTsKQEAgLTM0OSw5ICszNTAsOSBAQCBOUE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2lu
ZG93U2NyaXB0CiAgICAgICAgIGlmIChjYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0
ZVNjcmlwdCkpIHsKICAgICAgICAgICAgIC8vIEphdmFTY3JpcHQgaXMgZW5hYmxlZCwgc28gdGhl
cmUgaXMgYSBKYXZhU2NyaXB0IHdpbmRvdyBvYmplY3QuCiAgICAgICAgICAgICAvLyBSZXR1cm4g
YW4gTlBPYmplY3QgYm91bmQgdG8gdGhlIHdpbmRvdyBvYmplY3QuCi0gICAgICAgICAgICBKU0M6
OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgICAgICAgICBKU09iamVj
dCogd2luID0gd2luZG93U2hlbGwocGx1Z2luV29ybGQoKSktPndpbmRvdygpOworICAgICAgICAg
ICAgSlNET01XaW5kb3cqIHdpbiA9IHdpbmRvd1NoZWxsKHBsdWdpbldvcmxkKCkpLT53aW5kb3co
KTsKICAgICAgICAgICAgIEFTU0VSVCh3aW4pOworICAgICAgICAgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9jayh3aW4tPmdsb2JhbEV4ZWMoKSk7CiAgICAgICAgICAgICBCaW5kaW5nczo6Um9vdE9i
amVjdCogcm9vdCA9IGJpbmRpbmdSb290T2JqZWN0KCk7CiAgICAgICAgICAgICBtX3dpbmRvd1Nj
cmlwdE5QT2JqZWN0ID0gX05QTl9DcmVhdGVTY3JpcHRPYmplY3QoMCwgd2luLCByb290KTsKICAg
ICAgICAgfSBlbHNlIHsKQEAgLTM4Myw4ICszODQsOCBAQCBKU09iamVjdCogU2NyaXB0Q29udHJv
bGxlcjo6anNPYmplY3RGb3JQCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ3JlYXRlIGEg
SlNPYmplY3QgYm91bmQgdG8gdGhpcyBlbGVtZW50Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqID0gZ2xvYmFsT2JqZWN0
KHBsdWdpbldvcmxkKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iai0+Z2xvYmFs
RXhlYygpKTsKICAgICAvLyBGSVhNRTogaXMgbm9ybWFsIG9rYXk/IC0gdXNlZCBmb3IgTlAgcGx1
Z2lucz8KICAgICBKU1ZhbHVlIGpzRWxlbWVudFZhbHVlID0gdG9KUyhnbG9iYWxPYmotPmdsb2Jh
bEV4ZWMoKSwgZ2xvYmFsT2JqLCBwbHVnaW4pOwogICAgIGlmICghanNFbGVtZW50VmFsdWUgfHwg
IWpzRWxlbWVudFZhbHVlLmlzT2JqZWN0KCkpCkBAIC00MTgsNyArNDE5LDcgQEAgdm9pZCBTY3Jp
cHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6
OmNsZWFyU2NyaXB0T2JqZWN0cygpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKIAogICAgIFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fcm9vdE9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChSb290T2JqZWN0TWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcm9vdE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1t
CShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgV2ViU2Ny
aXB0T2JqZWN0KiBTY3JpcHRDb250cm9sbGVyOjp3aW5kbwogICAgICAgICByZXR1cm4gMDsKIAog
ICAgIGlmICghbV93aW5kb3dTY3JpcHRPYmplY3QpIHsKLSAgICAgICAgSlNDOjpKU0xvY2sgbG9j
ayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIEpT
Qzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgpOwogICAg
ICAgICBtX3dpbmRvd1NjcmlwdE9iamVjdCA9IFtXZWJTY3JpcHRPYmplY3Qgc2NyaXB0T2JqZWN0
Rm9ySlNPYmplY3Q6dG9SZWYod2luZG93U2hlbGwocGx1Z2luV29ybGQoKSkpIG9yaWdpblJvb3RP
YmplY3Q6cm9vdCByb290T2JqZWN0OnJvb3RdOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDEyMDky
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6
OmRpc3BhdGNoRGlkUGF1c2UKICAgICB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUt
PmlzVmFsaWQoKSAmJiBnbG9iYWxPYmplY3QtPmluaGVyaXRzKCZKU0RPTUdsb2JhbE9iamVjdDo6
c19pbmZvKSkgewogICAgICAgICAgICAgSlNET01HbG9iYWxPYmplY3QqIGRvbUdsb2JhbE9iamVj
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2soc3RhdGUpOwogICAgICAgICAgICAganNDYWxsRnJhbWUgPSB0b0pTKHN0YXRl
LCBkb21HbG9iYWxPYmplY3QsIG1fY3VycmVudENhbGxGcmFtZS5nZXQoKSk7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAganNDYWxsRnJhbWUgPSBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJ
KHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEV2
ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIFN0cmluZyBl
dmVudExpc3RlbmVySGFuZGxlckJvZHkoRG9jdW1lbnQKICAgICBBU1NFUlQoanNMaXN0ZW5lcik7
CiAgICAgaWYgKCFqc0xpc3RlbmVyKQogICAgICAgICByZXR1cm4gIiI7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhqc0xpc3Rl
bmVyLT5pc29sYXRlZFdvcmxkKCktPmdsb2JhbERhdGEoKSk7CiAgICAgSlNDOjpKU09iamVjdCog
anNGdW5jdGlvbiA9IGpzTGlzdGVuZXItPmpzRnVuY3Rpb24oZG9jdW1lbnQpOwogICAgIGlmICgh
anNGdW5jdGlvbikKICAgICAgICAgcmV0dXJuICIiOwpAQCAtMTEyLDcgKzExMiw3IEBAIGJvb2wg
ZXZlbnRMaXN0ZW5lckhhbmRsZXJMb2NhdGlvbihEb2N1bWUKICAgICBBU1NFUlQoanNMaXN0ZW5l
cik7CiAgICAgaWYgKCFqc0xpc3RlbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhq
c0xpc3RlbmVyLT5pc29sYXRlZFdvcmxkKCktPmdsb2JhbERhdGEoKSk7CiAgICAgSlNDOjpKU09i
amVjdCoganNPYmplY3QgPSBqc0xpc3RlbmVyLT5qc0Z1bmN0aW9uKGRvY3VtZW50KTsKICAgICBp
ZiAoIWpzT2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHJldmlzaW9uIDEy
MDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDE5ICs1OCwxOSBAQCB2b2lkIFNjcmlwdENhbGxBcmd1
bWVudEhhbmRsZXI6OmFwcGVuZEFyCiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6
YXBwZW5kQXJndW1lbnQoY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKIHsKLSAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7
CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzU3RyaW5nKG1fZXhlYywgYXJndW1lbnQpKTsKIH0K
IAogdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBK
U0M6OlVTdHJpbmcmIGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50
cy5hcHBlbmQoanNTdHJpbmcobV9leGVjLCBhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlwdENh
bGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IGNoYXIqIGFyZ3VtZW50KQog
ewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNTdHJpbmcobV9leGVj
LCBVU3RyaW5nKGFyZ3VtZW50KSkpOwogfQogCkBAIC04MSwzMSArODEsMzEgQEAgdm9pZCBTY3Jp
cHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcgogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVu
dEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGxvbmcgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMp
OwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihhcmd1bWVudCkpOwogfQogCiB2b2lk
IFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGxvbmcgbG9uZyBhcmd1
bWVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVy
KGFyZ3VtZW50KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5k
QXJndW1lbnQodW5zaWduZWQgaW50IGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBt
X2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIoYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRD
YWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBsb25nIGFyZ3VtZW50
KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIoYXJn
dW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1
bWVudChpbnQgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1lbnRzLmFw
cGVuZChqc051bWJlcihhcmd1bWVudCkpOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAgU2NyaXB0
VmFsdWUgU2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxsKGJvbwogewogICAgIEpTT2JqZWN0KiB0aGlz
T2JqZWN0ID0gbV90aGlzT2JqZWN0LmpzT2JqZWN0KCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAKICAg
ICBKU1ZhbHVlIGZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0KG1fZXhlYywgSWRlbnRpZmllciht
X2V4ZWMsIHN0cmluZ1RvVVN0cmluZyhtX25hbWUpKSk7CiAgICAgaWYgKG1fZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKQEAgLTE2Myw3ICsxNjMsNyBAQCBTY3JpcHRPYmplY3QgU2NyaXB0RnVuY3Rp
b25DYWxsOjpjb25zdHJ1CiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBtX3RoaXNPYmpl
Y3QuanNPYmplY3QoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKIAogICAgIEpTT2JqZWN0KiBjb25zdHJ1
Y3RvciA9IGFzT2JqZWN0KHRoaXNPYmplY3QtPmdldChtX2V4ZWMsIElkZW50aWZpZXIobV9leGVj
LCBzdHJpbmdUb1VTdHJpbmcobV9uYW1lKSkpKTsKICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRp
b24oKSkgewpAQCAtMjA1LDcgKzIwNSw3IEBAIFNjcmlwdFZhbHVlIFNjcmlwdENhbGxiYWNrOjpj
YWxsKCkKIAogU2NyaXB0VmFsdWUgU2NyaXB0Q2FsbGJhY2s6OmNhbGwoYm9vbCYgaGFkRXhjZXB0
aW9uKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sobV9leGVjKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobV9mdW5jdGlvbi5qc1ZhbHVlKCksIGNhbGxE
YXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNw
cAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgYm9vbCBo
YW5kbGVFeGNlcHRpb24oU2NyaXB0U3RhdGUqCiAKIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0Ojpz
ZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTY3Jp
cHRPYmplY3QmIHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogICAgIHNjcmlwdFN0YXRl
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0
YSgpLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwgdmFsdWUuanNPYmplY3QoKSk7CiAg
ICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7CiB9CkBAIC03NSw3ICs3NSw3
IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUKICNpZiBFTkFCTEUo
SU5TUEVDVE9SKQogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2Ny
aXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckZyb250ZW5kSG9zdCogdmFsdWUp
CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpOwogICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT5n
bG9iYWxEYXRhKCksIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNjcmlwdFN0
YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihz
Y3JpcHRTdGF0ZSk7CkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0Ojpz
ZXQoU2NyaXB0U3RhdGUKIAogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0
ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluamVjdGVkU2NyaXB0SG9zdCogdmFs
dWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwogICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0YXRl
LT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNjcmlw
dFN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlv
bihzY3JpcHRTdGF0ZSk7CkBAIC05Miw3ICs5Miw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0
OjpzZXQoU2NyaXB0U3RhdGUKIAogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChTY3JpcHRT
dGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIFNjcmlwdE9iamVjdCYgdmFsdWUp
CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gc2NyaXB0U3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2V0KHNjcmlwdFN0YXRlLCBJZGVudGlmaWVyKHNj
cmlwdFN0YXRlLCBuYW1lKSk7CiAgICAgaWYgKCFqc1ZhbHVlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0xMDYsNyArMTA2LDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChTY3Jp
cHRTdGF0ZQogCiBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6cmVtb3ZlKFNjcmlwdFN0YXRlKiBz
Y3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAg
ICBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tZXRob2RUYWJsZSgpLT5kZWxl
dGVQcm9wZXJ0eShzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzY3JpcHRTdGF0
ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSkpOwogICAgIHJldHVybiBoYW5kbGVFeGNl
cHRpb24oc2NyaXB0U3RhdGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBA
IGJvb2wgU2NyaXB0VmFsdWU6OmdldFN0cmluZyhTY3JpcHRTdGF0ZSoKIHsKICAgICBpZiAoIW1f
dmFsdWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBV
U3RyaW5nIHVzdHJpbmc7CiAgICAgaWYgKCFtX3ZhbHVlLmdldCgpLmdldFN0cmluZyhzY3JpcHRT
dGF0ZSwgdXN0cmluZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3NSw2ICsxNzUsNyBA
QCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4ganNUb0luCiAKIFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IFNjcmlwdFZhbHVlOjp0b0luc3BlY3RvclZhbHVlKFNjcmlwdFN0YXRl
KiBzY3JpcHRTdGF0ZSkgY29uc3QKIHsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBob2xkZXIoc2Ny
aXB0U3RhdGUpOwogICAgIHJldHVybiBqc1RvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3RhdGUsIG1f
dmFsdWUuZ2V0KCksIEluc3BlY3RvclZhbHVlOjptYXhEZXB0aCk7CiB9CiAjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNj
cmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpXb3JrZXJT
Y3JpcHRDb250CiAKIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6On5Xb3JrZXJTY3JpcHRDb250cm9s
bGVyKCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEoKSk7CiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBl
ci5jbGVhcigpOwogICAgIG1fZ2xvYmFsRGF0YS5jbGVhcigpOwogfQpAQCAtNzMsNyArNzMsNyBA
QCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQoCiB7CiAgICAgQVNTRVJU
KCFtX3dvcmtlckNvbnRleHRXcmFwcGVyKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9nbG9iYWxEYXRhLmdldCgpKTsK
IAogICAgIC8vIEV4cGxpY2l0bHkgcHJvdGVjdCB0aGUgZ2xvYmFsIG9iamVjdCdzIHByb3RvdHlw
ZSBzbyBpdCBpc24ndCBjb2xsZWN0ZWQKICAgICAvLyB3aGVuIHdlIGFsbG9jYXRlIHRoZSBnbG9i
YWwgb2JqZWN0LiAoT25jZSB0aGUgZ2xvYmFsIG9iamVjdCBpcyBmdWxseQpAQCAtMTE3LDcgKzEx
Nyw3IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICBTY3Jp
cHRWYWx1ZSBleGNlcHRpb247CiAgICAgZXZhbHVhdGUoc291cmNlQ29kZSwgJmV4Y2VwdGlvbik7
CiAgICAgaWYgKGV4Y2VwdGlvbi5qc1ZhbHVlKCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0
YSgpKTsKICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmds
b2JhbEV4ZWMoKSwgZXhjZXB0aW9uLmpzVmFsdWUoKSk7CiAgICAgfQogfQpAQCAtMTI4LDkgKzEy
OCw5IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICAgICAg
cmV0dXJuOwogCiAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7Ci0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fd29ya2VyQ29u
dGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tl
ci5zdGFydCgpOwogCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBXb3JrZXJTY3JpcHRDb250cm9s
bGVyOjppc0V4ZWN1dGlvbgogdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpkaXNhYmxlRXZh
bCgpCiB7CiAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhKCkpOwog
CiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+c2V0RXZhbEVuYWJsZWQoZmFsc2UpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3Qu
bW0JKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2Vi
U2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsMTMgKzEyMiwxMiBAQCArIChp
ZClzY3JpcHRPYmplY3RGb3JKU09iamVjdDooSlNPYmplY3RSCiAKIHN0YXRpYyB2b2lkIF9kaWRF
eGVjdXRlKFdlYlNjcmlwdE9iamVjdCAqb2JqKQogewotICAgIEFTU0VSVChKU0xvY2s6OmxvY2tD
b3VudCgpID4gMCk7Ci0gICAgCiAgICAgUm9vdE9iamVjdCogcm9vdCA9IFtvYmogX3Jvb3RPYmpl
Y3RdOwogICAgIGlmICghcm9vdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gcm9vdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBBU1NFUlQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsK
ICAgICBLSlNEaWRFeGVjdXRlRnVuY3Rpb25QdHIgZnVuYyA9IEluc3RhbmNlOjpkaWRFeGVjdXRl
RnVuY3Rpb24oKTsKICAgICBpZiAoZnVuYykKICAgICAgICAgZnVuYyhleGVjLCByb290LT5nbG9i
YWxPYmplY3QoKSk7CkBAIC0xNDgsMTkgKzE0NywyNSBAQCAtICh2b2lkKV9zZXRJbXA6KEpTT2Jq
ZWN0KilpbXAgb3JpZ2luUm9vCiAKICAgICBXZWJDb3JlOjphZGRKU1dyYXBwZXIoc2VsZiwgaW1w
KTsKIAotICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCkKKyAgICBpZiAoX3ByaXZhdGUtPnJv
b3RPYmplY3QpIHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGhvbGRlcigmX3ByaXZhdGUtPnJvb3RP
YmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICBfcHJpdmF0ZS0+
cm9vdE9iamVjdC0+Z2NQcm90ZWN0KGltcCk7CisgICAgfQogfQogCiAtICh2b2lkKV9zZXRPcmln
aW5Sb290T2JqZWN0OihQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KW9yaWdpblJvb3RPYmplY3QgYW5k
Um9vdE9iamVjdDooUGFzc1JlZlB0cjxSb290T2JqZWN0Pilyb290T2JqZWN0CiB7CiAgICAgQVNT
RVJUKF9wcml2YXRlLT5pbXApOwogCi0gICAgaWYgKHJvb3RPYmplY3QpCisgICAgaWYgKHJvb3RP
YmplY3QpIHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGhvbGRlcigmcm9vdE9iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIHJvb3RPYmplY3QtPmdjUHJvdGVjdChf
cHJpdmF0ZS0+aW1wKTsKKyAgICB9CiAKLSAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYg
X3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFsaWQoKSkKKyAgICBpZiAoX3ByaXZhdGUtPnJvb3RP
YmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFsaWQoKSkgeworICAgICAgICBKU0xv
Y2tIb2xkZXIgaG9sZGVyKCZfcHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbERhdGEoKSk7CiAgICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5nY1VucHJvdGVjdChf
cHJpdmF0ZS0+aW1wKTsKKyAgICB9CiAKICAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QpCiAg
ICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5kZXJlZigpOwpAQCAtMjMyLDggKzIzNywxMCBA
QCAtICh2b2lkKWRlYWxsb2MKICAgICBpZiAoX3ByaXZhdGUtPmltcCkKICAgICAgICAgV2ViQ29y
ZTo6cmVtb3ZlSlNXcmFwcGVyKF9wcml2YXRlLT5pbXApOwogCi0gICAgaWYgKF9wcml2YXRlLT5y
b290T2JqZWN0ICYmIF9wcml2YXRlLT5yb290T2JqZWN0LT5pc1ZhbGlkKCkpCisgICAgaWYgKF9w
cml2YXRlLT5yb290T2JqZWN0ICYmIF9wcml2YXRlLT5yb290T2JqZWN0LT5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgSlNMb2NrSG9sZGVyIGhvbGRlcigmX3ByaXZhdGUtPnJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+
Z2NVbnByb3RlY3QoX3ByaXZhdGUtPmltcCk7CisgICAgfQogCiAgICAgaWYgKF9wcml2YXRlLT5y
b290T2JqZWN0KQogICAgICAgICBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+ZGVyZWYoKTsKQEAgLTI0
OCw4ICsyNTUsMTAgQEAgLSAodm9pZClkZWFsbG9jCiAKIC0gKHZvaWQpZmluYWxpemUKIHsKLSAg
ICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFs
aWQoKSkKKyAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmpl
Y3QtPmlzVmFsaWQoKSkgeworICAgICAgICBKU0xvY2tIb2xkZXIgaG9sZGVyKCZfcHJpdmF0ZS0+
cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIF9wcml2
YXRlLT5yb290T2JqZWN0LT5nY1VucHJvdGVjdChfcHJpdmF0ZS0+aW1wKTsKKyAgICB9CiAKICAg
ICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QpCiAgICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0
LT5kZXJlZigpOwpAQCAtMjgxLDEwICsyOTAsOSBAQCAtIChpZCljYWxsV2ViU2NyaXB0TWV0aG9k
OihOU1N0cmluZyAqKW5hCiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKICAgICAgICAg
cmV0dXJuIG5pbDsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0g
ICAgCiAgICAgLy8gTG9vayB1cCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKIAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMs
IElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhuYW1lKSkpKTsKQEAgLTMy
NSw3ICszMzMsNyBAQCAtIChpZClldmFsdWF0ZVdlYlNjcmlwdDooTlNTdHJpbmcgKilzY3JpCiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICAKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RhcnQoKTsKICAgICBKU1ZhbHVlIHJldHVyblZh
bHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBbc2VsZiBfcm9vdE9i
amVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoU3Ry
aW5nKHNjcmlwdCkpLCBKU0M6OkpTVmFsdWUoKSwgMCk7CkBAIC0zNDYsNyArMzU0LDcgQEAgLSAo
dm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgZm9yS2V5OihOU1N0cgogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAg
ICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBbc2VsZiBfaW1wXS0+bWV0aG9kVGFibGUoKS0+cHV0
KFtzZWxmIF9pbXBdLCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhTdHJp
bmcoa2V5KSkpLCBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmpl
Y3RUeXBlLCBbc2VsZiBfcm9vdE9iamVjdF0pLCBzbG90KTsKQEAgLTM3Miw3ICszODAsNyBAQCAt
IChpZCl2YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkKICAgICAgICAgLy8gTmVlZCB0byBzY29w
ZSB0aGlzIGxvY2sgdG8gZW5zdXJlIHRoYXQgd2UgcmVsZWFzZSB0aGUgbG9jayBiZWZvcmUgY2Fs
bGluZwogICAgICAgICAvLyBbc3VwZXIgdmFsdWVGb3JLZXk6a2V5XSB3aGljaCBtaWdodCB0aHJv
dyBhbiBleGNlcHRpb24gYW5kIGJ5cGFzcyB0aGUgSlNMb2NrIGRlc3RydWN0b3IsCiAgICAgICAg
IC8vIGxlYXZpbmcgdGhlIGxvY2sgcGVybWFuZW50bHkgaGVsZAotICAgICAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdldChl
eGVjLCBJZGVudGlmaWVyKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkpKTsKICAg
ICAgICAgCkBAIC0zODgsNyArMzk2LDcgQEAgLSAoaWQpdmFsdWVGb3JLZXk6KE5TU3RyaW5nICop
a2V5CiAgICAgaWYgKFtyZXN1bHRPYmogaXNLaW5kT2ZDbGFzczpbV2ViVW5kZWZpbmVkIGNsYXNz
XV0pCiAgICAgICAgIHJlc3VsdE9iaiA9IFtzdXBlciB2YWx1ZUZvcktleTprZXldOyAgICAvLyBk
ZWZhdWx0cyB0byB0aHJvd2luZyBhbiBleGNlcHRpb24KIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgX2Rp
ZEV4ZWN1dGUoc2VsZik7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdE9iajsKQEAgLTQwMiw3ICs0
MTAsNyBAQCAtICh2b2lkKXJlbW92ZVdlYlNjcmlwdEtleTooTlNTdHJpbmcgKilrCiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICBbc2VsZiBfaW1wXS0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoW3NlbGYg
X2ltcF0sIGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhrZXkp
KSkpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC00MjEsNyArNDI5LDcg
QEAgLSAoQk9PTCloYXNXZWJTY3JpcHRLZXk6KE5TU3RyaW5nICopa2V5CiAgICAgRXhlY1N0YXRl
KiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
OwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICBCT09MIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5oYXNQcm9wZXJ0eShleGVjLCBJZGVudGlmaWVy
KGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkpKTsKIAogICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkgewpAQCAtNDQxLDggKzQ0OSw4IEBAIC0gKE5TU3RyaW5nICopc3RyaW5n
UmVwcmVzZW50YXRpb24KICAgICAgICAgcmV0dXJuIEAiVW5kZWZpbmVkIjsKICAgICB9CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICBpZCByZXN1bHQgPSBjb252ZXJ0
VmFsdWVUb09iamNWYWx1ZShleGVjLCBbc2VsZiBfaW1wXSwgT2JqY09iamVjdFR5cGUpLm9iamVj
dFZhbHVlOwogCkBAIC00NjEsNyArNDY5LDcgQEAgLSAoaWQpd2ViU2NyaXB0VmFsdWVBdEluZGV4
Oih1bnNpZ25lZClpbgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1w
XS0+Z2V0KGV4ZWMsIGluZGV4KTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewpA
QCAtNDg1LDcgKzQ5Myw3IEBAIC0gKHZvaWQpc2V0V2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNp
Z24KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4
KFtzZWxmIF9pbXBdLCBleGVjLCBpbmRleCwgY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywg
JnZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RPYmplY3RdKSwgZmFsc2UpOwogCiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC01MTUsNyArNTIzLDcgQEAgKyAoaWQp
X2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU1ZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pc09i
amVjdCgpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0g
ICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9j
a0hvbGRlciBsb2NrKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwog
CiAgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZKU0hUTUxFbGVtZW50OjpzX2luZm8pKSB7
CiAgICAgICAgICAgICAvLyBQbHVnaW4gZWxlbWVudHMgY2FjaGUgdGhlIGluc3RhbmNlIGludGVy
bmFsbHkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI3MzMs
NyArMjczMyw3IEBAIEVORAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYg
KCFjYW5JbnZva2VDYWxsYmFjaygpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgUmVmUHRyPCRjbGFzc05hbWU+IHByb3RlY3QodGhpcyk7XG5cbiIpOwotICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTtcblxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBK
U0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpO1xu
XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTtcbiIpOwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJncztcbiIp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJh
Y2tXaXRoTm9QYXJhbQogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMp
OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAg
RXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwog
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC04Miw3ICs4Miw3IEBAIGJvb2wgSlNU
ZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMVAKIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxs
YmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTAw
LDcgKzEwMCw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlAKIAog
ICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRh
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdzOwpAQCAtMTE5LDcgKzExOSw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNh
bGxiYWNrV2l0aFN0cmluZ0wKIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0
aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTM3LDcgKzEzNyw3IEBAIGJv
b2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aEJvb2xlYW4KIAogICAgIFJlZlB0cjxKU1Rl
c3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpA
QCAtMTU3LDcgKzE1Nyw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrUmVxdWlyZXNU
aGkKIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
bV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3Qu
Y3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNyArMTc3LDcgQEAgYm9vbCBfTlBOX0ludm9r
ZURlZmF1bHQoTlBQLCBOUE9iamVjdCogbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIAogICAgICAg
ICAvLyBDYWxsIHRoZSBmdW5jdGlvbiBvYmplY3QuCiAgICAgICAgIEpTVmFsdWUgZnVuY3Rpb24g
PSBvYmotPmltcDsKQEAgLTIyNSw3ICsyMjUsNyBAQCBib29sIF9OUE5fSW52b2tlKE5QUCBucHAs
IE5QT2JqZWN0KiBvLCBOCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+
aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iai0+aW1wLT5nZXQo
ZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKICAg
ICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0
Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKQEAgLTI2NCw3ICsyNjQsNyBAQCBib29sIF9O
UE5fRXZhbHVhdGUoTlBQIGluc3RhbmNlLCBOUE9iamVjCiAgICAgICAgIFBsdWdpblZpZXc6Omtl
ZXBBbGl2ZShpbnN0YW5jZSk7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAg
ICAgICAgIFN0cmluZyBzY3JpcHRTdHJpbmcgPSBjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMpOwog
ICAgICAgICAKICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUocm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcm9vdE9iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3JpcHRTdHJpbmcpLCBK
U0M6OkpTVmFsdWUoKSk7CkBAIC0yOTAsNyArMjkwLDcgQEAgYm9vbCBfTlBOX0dldFByb3BlcnR5
KE5QUCwgTlBPYmplY3QqIG8sIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgICAgICBJZGVudGlmaWVyUmVwKiBp
ID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7CiAgICAgICAgIAot
ICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgICAgIGlm
IChpLT5pc1N0cmluZygpKQogICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5pbXAtPmdldChleGVj
LCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwpAQCAtMzIy
LDcgKzMyMiw3IEBAIGJvb2wgX05QTl9TZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAq
Pihwcm9wZXJ0eU5hbWUpOwogCiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7CkBAIC0zNjMs
NyArMzYzLDcgQEAgYm9vbCBfTlBOX1JlbW92ZVByb3BlcnR5KE5QUCwgTlBPYmplY3QqIAogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIGlm
IChpLT5pc1N0cmluZygpKQogICAgICAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5KG9iai0+aW1wLCBleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihl
eGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICBlbHNlCkBAIC0zODYsNyArMzg2LDcgQEAgYm9v
bCBfTlBOX0hhc1Byb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIAogCiAgICAgICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAg
ICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVy
dHlOYW1lKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygp
KSB7CiAgICAgICAgICAgICBib29sIHJlc3VsdCA9IG9iai0+aW1wLT5oYXNQcm9wZXJ0eShleGVj
LCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKQEAgLTQxOCw3ICs0MTgsNyBAQCBib29sIF9O
UE5fSGFzTWV0aG9kKE5QUCwgTlBPYmplY3QqIG8sIE5QCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIEpTVmFsdWUg
ZnVuYyA9IG9iai0+aW1wLT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhl
YywgaS0+c3RyaW5nKCkpKTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAg
ICAgcmV0dXJuICFmdW5jLmlzVW5kZWZpbmVkKCk7CkBAIC00NDcsNyArNDQ3LDcgQEAgYm9vbCBf
TlBOX0VudW1lcmF0ZShOUFAsIE5QT2JqZWN0KiBvLCBOUAogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAg
IFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CiAKICAgICAgICAgb2JqLT5p
bXAtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMob2JqLT5pbXAsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwpAQCAtNDg0LDcgKzQ4NCw3IEBA
IGJvb2wgX05QTl9Db25zdHJ1Y3QoTlBQLCBOUE9iamVjdCogbywgY28KICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
ICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGUgY29uc3RydWN0b3Igb2JqZWN0LgogICAgICAg
ICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gb2JqLT5pbXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvYy9jX2NsYXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
Yy9jX2NsYXNzLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdl
L2MvY19jbGFzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRl
ICJucHJ1bnRpbWVfaW1wbC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvU2NvcGVDaGFpbi5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvSWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3QuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNPYmplY3QuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC00Nyw3ICs0
OCw3IEBAIENDbGFzczo6Q0NsYXNzKE5QQ2xhc3MqIGFDbGFzcykKIAogQ0NsYXNzOjp+Q0NsYXNz
KCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIC8vIEZJ
WE1FOiBTaG91bGQgd2UgYWNxdWlyZSBhIEpTTG9jayBoZXJlPwogCiAgICAgZGVsZXRlQWxsVmFs
dWVzKF9tZXRob2RzKTsKICAgICBfbWV0aG9kcy5jbGVhcigpOwpAQCAtOTEsNyArOTIsNyBAQCBN
ZXRob2RMaXN0IENDbGFzczo6bWV0aG9kc05hbWVkKFByb3BlcnR5CiAgICAgaWYgKF9pc2EtPmhh
c01ldGhvZCAmJiBfaXNhLT5oYXNNZXRob2Qob2JqLCBpZGVudCkpewogICAgICAgICBNZXRob2Qq
IGFNZXRob2QgPSBuZXcgQ01ldGhvZChpZGVudCk7IC8vIGRlbGV0ZWQgaW4gdGhlIENDbGFzcyBk
ZXN0cnVjdG9yCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhpbnN0LT5yb290T2Jq
ZWN0KCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgX21ldGhv
ZHMuc2V0KG5hbWUuaW1wbCgpLCBhTWV0aG9kKTsKICAgICAgICAgfQogICAgICAgICBtZXRob2RM
aXN0LmFwcGVuZChhTWV0aG9kKTsKQEAgLTExNCw3ICsxMTUsNyBAQCBGaWVsZCogQ0NsYXNzOjpm
aWVsZE5hbWVkKFByb3BlcnR5TmFtZSBwCiAgICAgaWYgKF9pc2EtPmhhc1Byb3BlcnR5ICYmIF9p
c2EtPmhhc1Byb3BlcnR5KG9iaiwgaWRlbnQpKXsKICAgICAgICAgYUZpZWxkID0gbmV3IENGaWVs
ZChpZGVudCk7IC8vIGRlbGV0ZWQgaW4gdGhlIENDbGFzcyBkZXN0cnVjdG9yCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhpbnN0LT5yb290T2JqZWN0KCktPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgX2ZpZWxkcy5zZXQobmFtZS5pbXBsKCksIGFG
aWVsZCk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9j
X2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2lu
c3RhbmNlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2Mv
Y19pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBDSW5z
dGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZQogICAgICAgICByZXR1cm47CiAKICAgICB7
Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVy
cm9yKGV4ZWMsIGdsb2JhbEV4Y2VwdGlvblN0cmluZygpKSk7CiAgICAgfQogCkBAIC0xODIsNyAr
MTgyLDcgQEAgSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdAogICAgIFZP
SURfVE9fTlBWQVJJQU5UKHJlc3VsdFZhcmlhbnQpOwogCiAgICAgewotICAgICAgICBKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAg
ICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICBBU1NF
UlQoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAgICAgICByZXR2YWwgPSBf
b2JqZWN0LT5fY2xhc3MtPmludm9rZShfb2JqZWN0LCBpZGVudCwgY0FyZ3MuZGF0YSgpLCBjb3Vu
dCwgJnJlc3VsdFZhcmlhbnQpOwogICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3Rh
dGUoZXhlYyk7CkBAIC0yMTcsNyArMjE3LDcgQEAgSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZURl
ZmF1bHRNZXRob2QoRQogICAgIE5QVmFyaWFudCByZXN1bHRWYXJpYW50OwogICAgIFZPSURfVE9f
TlBWQVJJQU5UKHJlc3VsdFZhcmlhbnQpOwogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgQVNTRVJUKGdsb2Jh
bEV4Y2VwdGlvblN0cmluZygpLmlzTnVsbCgpKTsKICAgICAgICAgcmV0dmFsID0gX29iamVjdC0+
X2NsYXNzLT5pbnZva2VEZWZhdWx0KF9vYmplY3QsIGNBcmdzLmRhdGEoKSwgY291bnQsICZyZXN1
bHRWYXJpYW50KTsKICAgICAgICAgbW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMp
OwpAQCAtMjU2LDcgKzI1Niw3IEBAIEpTVmFsdWUgQ0luc3RhbmNlOjppbnZva2VDb25zdHJ1Y3Qo
RXhlY1MKICAgICBOUFZhcmlhbnQgcmVzdWx0VmFyaWFudDsKICAgICBWT0lEX1RPX05QVkFSSUFO
VChyZXN1bHRWYXJpYW50KTsKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7CiAgICAgICAgIEFTU0VSVChnbG9iYWxFeGNlcHRp
b25TdHJpbmcoKS5pc051bGwoKSk7CiAgICAgICAgIHJldHZhbCA9IF9vYmplY3QtPl9jbGFzcy0+
Y29uc3RydWN0KF9vYmplY3QsIGNBcmdzLmRhdGEoKSwgY291bnQsICZyZXN1bHRWYXJpYW50KTsK
ICAgICAgICAgbW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpAQCAtMzE1LDcg
KzMxNSw3IEBAIHZvaWQgQ0luc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGEKICAgICBO
UElkZW50aWZpZXIqIGlkZW50aWZpZXJzOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICBBU1NFUlQoZ2xv
YmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAgICAgICBib29sIG9rID0gX29iamVj
dC0+X2NsYXNzLT5lbnVtZXJhdGUoX29iamVjdCwgJmlkZW50aWZpZXJzLCAmY291bnQpOwogICAg
ICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9jL2NfcnVudGltZS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5
LDcgQEAgSlNWYWx1ZSBDRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdAogCiAgICAgICAg
IGJvb2wgcmVzdWx0OwogICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgICAgIHJlc3VsdCA9
IG9iai0+X2NsYXNzLT5nZXRQcm9wZXJ0eShvYmosIF9maWVsZElkZW50aWZpZXIsICZwcm9wZXJ0
eSk7CiAgICAgICAgICAgICBDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0
ZShleGVjKTsKICAgICAgICAgfQpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIENGaWVsZDo6c2V0VmFs
dWVUb0luc3RhbmNlKEV4ZWNTdGF0CiAgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4
ZWMsIGFWYWx1ZSwgJnZhcmlhbnQpOwogCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICAg
ICAgb2JqLT5fY2xhc3MtPnNldFByb3BlcnR5KG9iaiwgX2ZpZWxkSWRlbnRpZmllciwgJnZhcmlh
bnQpOwogICAgICAgICAgICAgQ0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3Rh
dGUoZXhlYyk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRp
bGl0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5
LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGls
aXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgU3RyaW5nIGNv
bnZlcnRVVEY4VG9VVEYxNldpdGhMYXRpCiAvLyBWYXJpYW50IHZhbHVlIG11c3QgYmUgcmVsZWFz
ZWQgd2l0aCBOUFJlbGVhc2VWYXJpYW50VmFsdWUoKQogdm9pZCBjb252ZXJ0VmFsdWVUb05QVmFy
aWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIE5QVmFyaWFudCogcmVzdWx0KQog
ewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAKICAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0KTsKIApAQCAt
MTA3LDcgKzEwNyw3IEBAIHZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRlKiAK
IAogSlNWYWx1ZSBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IE5QVmFyaWFudCogdmFyaWFudCwgUm9vdE9iamVjdCogcm9vdE9iamVjdCkKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgIAogICAgIE5QVmFyaWFudFR5cGUgdHlwZSA9IHZhcmlhbnQtPnR5cGU7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCShyZXZpc2lvbiAx
MjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpjYWxs
KGpzdHJpbmcgbWV0aG8KICAgICAKICAgICAvLyBMb29rdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4K
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCiAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKGV4
ZWMsIEphdmFTdHJpbmcobWV0aG9kTmFtZSkuaW1wbCgpKTsKICAgICBKU1ZhbHVlIGZ1bmN0aW9u
ID0gX2ltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXIpOwpAQCAtMzA3LDEyICszMDcsMTIgQEAgam9i
amVjdCBKYXZhSlNPYmplY3Q6OmV2YWwoanN0cmluZyBzY3JpcAogewogICAgIExPRyhMaXZlQ29u
bmVjdCwgIkphdmFKU09iamVjdDo6ZXZhbCBzY3JpcHQgPSAlcyIsIEphdmFTdHJpbmcoc2NyaXB0
KS51dGY4KCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAg
ICAKICAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gdGhpcy0+cm9vdE9iamVjdCgpOwogICAg
IGlmICghcm9vdE9iamVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAKICAg
ICByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2Vy
LnN0YXJ0KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoSmF2YVN0cmluZyhzY3JpcHQpLmltcGwo
KSkpOwogICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkudGltZW91
dENoZWNrZXIuc3RvcCgpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0
OjpnZXRNZW1iZXIoanN0cmluZyAKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IF9pbXAtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJp
bmcobWVtYmVyTmFtZSkuaW1wbCgpKSk7CiAKICAgICByZXR1cm4gY29udmVydFZhbHVlVG9KT2Jq
ZWN0KHJlc3VsdCk7CkBAIC0zNDYsNyArMzQ2LDcgQEAgdm9pZCBKYXZhSlNPYmplY3Q6OnNldE1l
bWJlcihqc3RyaW5nIG1lbQogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3Q7CiAgICAgX2ltcC0+bWV0aG9kVGFibGUoKS0+cHV0KF9pbXAsIGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgSmF2YVN0cmluZyhtZW1iZXJOYW1lKS5pbXBsKCkpLCBjb252ZXJ0Sk9i
amVjdFRvVmFsdWUoZXhlYywgdmFsdWUpLCBzbG90KTsKIH0KQEAgLTM2MSw3ICszNjEsNyBAQCB2
b2lkIEphdmFKU09iamVjdDo6cmVtb3ZlTWVtYmVyKGpzdHJpbmcgCiAgICAgICAgIHJldHVybjsK
IAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBfaW1wLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQ
cm9wZXJ0eShfaW1wLCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVtYmVyTmFt
ZSkuaW1wbCgpKSk7CiB9CiAKQEAgLTM3Niw3ICszNzYsNyBAQCBqb2JqZWN0IEphdmFKU09iamVj
dDo6Z2V0U2xvdChqaW50IGluZGV4CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IF9pbXAtPmdldChleGVjLCBpbmRleCk7CiAKICAgICByZXR1cm4gY29udmVy
dFZhbHVlVG9KT2JqZWN0KHJlc3VsdCk7CkBAIC0zOTIsNyArMzkyLDcgQEAgdm9pZCBKYXZhSlNP
YmplY3Q6OnNldFNsb3QoamludCBpbmRleCwgagogICAgICAgICByZXR1cm47CiAKICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgX2ltcC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChfaW1wLCBl
eGVjLCAodW5zaWduZWQpaW5kZXgsIGNvbnZlcnRKT2JqZWN0VG9WYWx1ZShleGVjLCB2YWx1ZSks
IGZhbHNlKTsKIH0KIApAQCAtNDA1LDkgKzQwNSw5IEBAIGpzdHJpbmcgSmF2YUpTT2JqZWN0Ojp0
b1N0cmluZygpIGNvbnN0CiAgICAgaWYgKCFyb290T2JqZWN0KQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNPYmplY3Qg
KnRoaXNPYmogPSBjb25zdF9jYXN0PEpTT2JqZWN0Kj4oX2ltcCk7CiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8anN0cmlu
Zz4oY29udmVydFZhbHVlVG9KVmFsdWUoZXhlYywgcm9vdE9iamVjdCwgdGhpc09iaiwgSmF2YVR5
cGVPYmplY3QsICJqYXZhLmxhbmcuU3RyaW5nIikubCk7CiB9CkBAIC00NjMsMTMgKzQ2MywxMyBA
QCBqbG9uZyBKYXZhSlNPYmplY3Q6OmNyZWF0ZU5hdGl2ZShqbG9uZyBuCiAKIGpvYmplY3QgSmF2
YUpTT2JqZWN0Ojpjb252ZXJ0VmFsdWVUb0pPYmplY3QoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIAogICAgIFJvb3RP
YmplY3QqIHJvb3RPYmplY3QgPSB0aGlzLT5yb290T2JqZWN0KCk7CiAgICAgaWYgKCFyb290T2Jq
ZWN0KQogICAgICAgICByZXR1cm4gMDsKIAorICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKICAgICBqb2JqZWN0
IHJlc3VsdCA9IDA7CiAgICAgCkBAIC01NTQsNyArNTU0LDcgQEAgSlNWYWx1ZSBKYXZhSlNPYmpl
Y3Q6OmNvbnZlcnRKT2JqZWN0VG9WYQogICAgIC8vIGZpZ3VyZSAyMi00LgogICAgIGpvYmplY3Qg
Y2xhc3NPZkluc3RhbmNlID0gY2FsbEpOSU1ldGhvZDxqb2JqZWN0Pih0aGVPYmplY3QsICJnZXRD
bGFzcyIsICIoKUxqYXZhL2xhbmcvQ2xhc3M7Iik7CiAgICAgaWYgKCFjbGFzc09mSW5zdGFuY2Up
IHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHJldHVybiBKYXZhSW5zdGFuY2U6OmNy
ZWF0ZSh0aGVPYmplY3QsIF9yb290T2JqZWN0KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsK
ICAgICB9CiAKQEAgLTU2Myw3ICs1NjMsNyBAQCBKU1ZhbHVlIEphdmFKU09iamVjdDo6Y29udmVy
dEpPYmplY3RUb1ZhCiAgICAgLy8gcG9pbnRlciBhbmQgc3RvcmVzIGl0IGluIHRoaXMgb2JqZWN0
LCBzbyB0aGF0IGl0IGNhbiBiZSByZXRyaWV2ZWQgYmVsb3cuCiAgICAganN0cmluZyBjbGFzc05h
bWUgPSAoanN0cmluZyljYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGNsYXNzT2ZJbnN0YW5jZSwgImdl
dE5hbWUiLCAiKClMamF2YS9sYW5nL1N0cmluZzsiKTsKICAgICBpZiAoIWNsYXNzTmFtZSB8fCAo
c3RyY21wKEphdmFTdHJpbmcoY2xhc3NOYW1lKS51dGY4KCksICJzdW4ucGx1Z2luLmphdmFzY3Jp
cHQud2Via2l0LkpTT2JqZWN0IikgIT0gMCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
ICAgIHJldHVybiBKYXZhSW5zdGFuY2U6OmNyZWF0ZSh0aGVPYmplY3QsIF9yb290T2JqZWN0KS0+
Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9qbmkvam5pX29iamMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2puaS9qbmlfb2JqYy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL2puaS9qbmlfb2JqYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBi
b29sIEpTQzo6QmluZGluZ3M6OmRpc3BhdGNoSk5JQ2FsbChFeGVjCiAgICAgICAgIC8vIGltcGxl
bWVudGVkIGluIFdlYkNvcmUgd2lsbCBndWFyYW50ZWUgdGhhdCBvbmx5IGFwcHJvcHJpYXRlIEph
dmFTY3JpcHQKICAgICAgICAgLy8gY2FuIHJlZmVyZW5jZSB0aGUgYXBwbGV0LgogICAgICAgICB7
Ci0gICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoZXhlYyk7CiAgICAgICAgICAgICByZXN1bHQgPSBbdmlldyB3ZWJQbHVnSW5DYWxsSmF2YTpv
YmogaXNTdGF0aWM6aXNTdGF0aWMgcmV0dXJuVHlwZTpyZXR1cm5UeXBlIG1ldGhvZDptZXRob2RJ
RCBhcmd1bWVudHM6YXJncyBjYWxsaW5nVVJMOm5pbCBleGNlcHRpb25EZXNjcmlwdGlvbjomX2V4
Y2VwdGlvbkRlc2NyaXB0aW9uXTsKICAgICAgICAgfQogCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wg
SlNDOjpCaW5kaW5nczo6ZGlzcGF0Y2hKTklDYWxsKEV4ZWMKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
d2ViUGx1Z0luQ2FsbEphdmE6bWV0aG9kOnJldHVyblR5cGU6YXJndW1lbnRzOildKSB7Ci0gICAg
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7CiAg
ICAgICAgIHJlc3VsdCA9IFt2aWV3IHdlYlBsdWdJbkNhbGxKYXZhOm9iaiBtZXRob2Q6bWV0aG9k
SUQgcmV0dXJuVHlwZTpyZXR1cm5UeXBlIGFyZ3VtZW50czphcmdzXTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRp
bGl0eVByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkv
anNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dl
YkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzQsNyArMTc0LDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VU
b0phdgogCiBqdmFsdWUgY29udmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBSb290
T2JqZWN0KiByb290T2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCBKYXZhVHlwZSBqYXZhVHlwZSwgY29u
c3QgY2hhciogamF2YUNsYXNzTmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAganZhbHVlIHJl
c3VsdDsKICAgICBtZW1zZXQoJnJlc3VsdCwgMCwgc2l6ZW9mKGp2YWx1ZSkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIEphdmFDbGFzczo6SmF2YUNsYXNz
KGpvYmplY3QgYW5JbnN0YW5jZSkKICAgICAgICAgICAgIGpvYmplY3QgYUpGaWVsZCA9IGVudi0+
R2V0T2JqZWN0QXJyYXlFbGVtZW50KChqb2JqZWN0QXJyYXkpZmllbGRzLCBpKTsKICAgICAgICAg
ICAgIEphdmFGaWVsZCogYUZpZWxkID0gbmV3IEphdmFGaWVsZChlbnYsIGFKRmllbGQpOyAvLyBk
ZWxldGVkIGluIHRoZSBKYXZhQ2xhc3MgZGVzdHJ1Y3RvcgogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNMb2NrIGhlcmU/CiAgICAgICAg
ICAgICAgICAgbV9maWVsZHMuc2V0KGFGaWVsZC0+bmFtZSgpLmltcGwoKSwgYUZpZWxkKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoYUpGaWVsZCk7CkBA
IC03OSw3ICs3OSw3IEBAIEphdmFDbGFzczo6SmF2YUNsYXNzKGpvYmplY3QgYW5JbnN0YW5jZSkK
ICAgICAgICAgICAgIEphdmFNZXRob2QqIGFNZXRob2QgPSBuZXcgSmF2YU1ldGhvZChlbnYsIGFK
TWV0aG9kKTsgLy8gZGVsZXRlZCBpbiB0aGUgSmF2YUNsYXNzIGRlc3RydWN0b3IKICAgICAgICAg
ICAgIE1ldGhvZExpc3QqIG1ldGhvZExpc3Q7CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogU2hvdWxkIHdlIGFjcXVpcmUgYSBKU0xvY2sgaGVyZT8KIAogICAgICAgICAgICAg
ICAgIG1ldGhvZExpc3QgPSBtX21ldGhvZHMuZ2V0KGFNZXRob2QtPm5hbWUoKS5pbXBsKCkpOwog
ICAgICAgICAgICAgICAgIGlmICghbWV0aG9kTGlzdCkgewpAQCAtMTAwLDcgKzEwMCw3IEBAIEph
dmFDbGFzczo6fkphdmFDbGFzcygpCiB7CiAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDxjaGFyKj4o
bV9uYW1lKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IC8vIEZJWE1FOiBTaG91bGQgd2UgYWNxdWlyZSBhIEpTTG9jayBoZXJlPwogCiAgICAgZGVsZXRl
QWxsVmFsdWVzKG1fZmllbGRzKTsKICAgICBtX2ZpZWxkcy5jbGVhcigpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCShyZXZp
c2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFu
Y2VKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIENsYXNzKiBKYXZhSW5z
dGFuY2U6OmdldENsYXNzKCkgY29uc3QKIAogSlNWYWx1ZSBKYXZhSW5zdGFuY2U6OnN0cmluZ1Zh
bHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAganN0cmlu
ZyBzdHJpbmdWYWx1ZSA9IChqc3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVjdD4obV9pbnN0YW5j
ZS0+aW5zdGFuY2UoKSwgInRvU3RyaW5nIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7Iik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3Bw
CShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZh
TWV0aG9kSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBKYXZhTWV0aG9k
Ojp+SmF2YU1ldGhvZCgpCiAvLyB3ZSBnZXQgJy4nIGJldHdlZW4gY29tcG9uZW50cyBmcm9tIHRo
ZSByZWZsZWN0aW9uIEFQSS4KIHN0YXRpYyB2b2lkIGFwcGVuZENsYXNzTmFtZShTdHJpbmdCdWls
ZGVyJiBidWlsZGVyLCBjb25zdCBjaGFyKiBjbGFzc05hbWUpCiB7Ci0gICAgQVNTRVJUKEpTTG9j
azo6bG9ja0NvdW50KCkgPiAwKTsKKyAgICBBU1NFUlQoSlNDOjpKU0dsb2JhbERhdGE6OnNoYXJl
ZEluc3RhbmNlKCkuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogCiAg
ICAgY2hhciogYyA9IGZhc3RTdHJEdXAoY2xhc3NOYW1lKTsKIApAQCAtMTExLDcgKzExMSw3IEBA
IHN0YXRpYyB2b2lkIGFwcGVuZENsYXNzTmFtZShTdHJpbmdCdWlsZGUKIGNvbnN0IGNoYXIqIEph
dmFNZXRob2Q6OnNpZ25hdHVyZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NpZ25hdHVyZSkgewot
ICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIHdlIGFjcXVpcmUgYSBKU0xvY2sgaGVyZT8KIAogICAgICAgICBTdHJpbmdC
dWlsZGVyIHNpZ25hdHVyZUJ1aWxkZXI7CiAgICAgICAgIHNpZ25hdHVyZUJ1aWxkZXIuYXBwZW5k
KCcoJyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlND
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YVN0cmlu
Z0pTQy5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pz
Yy9KYXZhU3RyaW5nSlNDLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZp
bmUgSmF2YVN0cmluZ0pTQ19oCiAKICNpbmNsdWRlICJKTklVdGlsaXR5LmgiCisjaW5jbHVkZSAi
SlNET01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiSmF2YUluc3RhbmNlSlNDLmgiCiAKICNpbmNs
dWRlIDxydW50aW1lL0pTTG9jay5oPgpAQCAtNTIsMjAgKzUzLDIwIEBAIHB1YmxpYzoKIAogICAg
IEphdmFTdHJpbmcoKQogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIG1faW1wbCA9IFVTdHJpbmcoKS5p
bXBsKCk7CiAgICAgfQogCiAgICAgfkphdmFTdHJpbmcoKQogICAgIHsKLSAgICAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2so
V2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAg
IG1faW1wbCA9IDA7CiAgICAgfQogCiAgICAgY29uc3QgY2hhciogdXRmOCgpIGNvbnN0CiAgICAg
ewogICAgICAgICBpZiAoIW1fdXRmOFN0cmluZy5kYXRhKCkpIHsKLSAgICAgICAgICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICAgICAgICAgIG1fdXRmOFN0cmluZyA9IFVTdHJpbmcobV9pbXBsKS51dGY4KCk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIG1fdXRmOFN0cmluZy5kYXRhKCk7CkBAIC03OSw3ICs4MCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIGludCBzaXplID0gZS0+R2V0U3RyaW5nTGVuZ3RoKHMpOwogICAg
ICAgICBjb25zdCBqY2hhciogdWMgPSBnZXRVQ2hhcmFjdGVyc0Zyb21KU3RyaW5nSW5FbnYoZSwg
cyk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJDb3JlOjpKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIG1faW1wbCA9IFVTdHJp
bmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHVjKSwgc2l6ZSkuaW1wbCgpOwogICAg
ICAgICB9CiAgICAgICAgIHJlbGVhc2VVQ2hhcmFjdGVyc0ZvckpTdHJpbmdJbkVudihlLCBzLCB1
Yyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgSlNPYmplY3QqIEluc3RhbmNlOjpjcmVhdGVS
dW50aW1lT2JqZWN0KAogICAgIGlmIChSdW50aW1lT2JqZWN0KiBleGlzdGluZ09iamVjdCA9IG1f
cnVudGltZU9iamVjdC5nZXQoKSkKICAgICAgICAgcmV0dXJuIGV4aXN0aW5nT2JqZWN0OwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICBSdW50aW1lT2JqZWN0KiBuZXdPYmplY3QgPSBuZXdSdW50aW1lT2Jq
ZWN0KGV4ZWMpOwogICAgIG1fcnVudGltZU9iamVjdCA9IFBhc3NXZWFrPFJ1bnRpbWVPYmplY3Q+
KG5ld09iamVjdCk7CiAgICAgbV9yb290T2JqZWN0LT5hZGRSdW50aW1lT2JqZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgbmV3T2JqZWN0KTsKQEAgLTEwMSw3ICsxMDEsNyBAQCBKU09iamVjdCogSW5z
dGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoCiAKIFJ1bnRpbWVPYmplY3QqIEluc3RhbmNlOjpu
ZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAg
Ly8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJvdG90eXBlIG9m
ZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAogICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0
aGUgcmlnaHQgZ2xvYmFsIG9iamVjdCBmb3IgImkiLgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJp
ZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05
Miw3ICs5Miw3IEBAIHZvaWQgT2JqY0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG8KICAg
ICB9CiAKICAgICBpZiAoIXNfZXhjZXB0aW9uRW52aXJvbm1lbnQgfHwgc19leGNlcHRpb25FbnZp
cm9ubWVudCA9PSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpIHsKLSAgICAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAgICAgICAgIHRocm93RXJyb3IoZXhlYywgc19leGNlcHRpb24pOwogICAgIH0KIApA
QCAtMjM5LDcgKzIzOSw3IEBAIEpTVmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VPYmpjTWV0aG9k
KEUKIHsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgCi0gICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7IC8v
IENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMg
aW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMp
OyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndp
bmRzIGluY29ycmVjdGx5LgogCiAgICAgc2V0R2xvYmFsRXhjZXB0aW9uKG5pbCk7CiAgICAgCkBA
IC0zNTQsNyArMzU0LDcgQEAgSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRo
bwogewogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKIAotICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4n
dCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29y
cmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8g
Q2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBp
bmNvcnJlY3RseS4KICAgICBzZXRHbG9iYWxFeGNlcHRpb24obmlsKTsKICAgICAKIEB0cnkgewpA
QCAtNDExLDcgKzQxMSw3IEBAIGJvb2wgT2JqY0luc3RhbmNlOjpzZXRWYWx1ZU9mVW5kZWZpbmVk
RmkKICAgICBpZiAoIVt0YXJnZXRPYmplY3QgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihz
ZXRWYWx1ZTpmb3JVbmRlZmluZWRLZXk6KV0pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndp
bmRzIGluY29ycmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhl
eGVjKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQg
dW53aW5kcyBpbmNvcnJlY3RseS4KIAogICAgIC8vIFRoaXMgY2hlY2sgaXMgbm90IHJlYWxseSBu
ZWNlc3NhcnkgYmVjYXVzZSBOU09iamVjdCBpbXBsZW1lbnRzCiAgICAgLy8gc2V0VmFsdWU6Zm9y
VW5kZWZpbmVkS2V5OiwgYW5kIHVuZm9ydHVuYXRlbHkgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRp
b24KQEAgLTQ0Myw3ICs0NDMsNyBAQCBKU1ZhbHVlIE9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZlVu
ZGVmaW5lCiAgICAgCiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gZ2V0T2JqZWN0KCk7CiAKLSAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsg
Ly8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5k
cyBpbmNvcnJlY3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhl
Yyk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVu
d2luZHMgaW5jb3JyZWN0bHkuCiAKICAgICAvLyBUaGlzIGNoZWNrIGlzIG5vdCByZWFsbHkgbmVj
ZXNzYXJ5IGJlY2F1c2UgTlNPYmplY3QgaW1wbGVtZW50cwogICAgIC8vIHZhbHVlRm9yVW5kZWZp
bmVkS2V5OiwgYW5kIHVuZm9ydHVuYXRlbHkgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtOTIsMTkgKzkyLDE4IEBAIEpTVmFsdWUgT2JqY0ZpZWxkOjp2YWx1
ZUZyb21JbnN0YW5jZShFeGUKICAgICAKICAgICBpZCB0YXJnZXRPYmplY3QgPSAoc3RhdGljX2Nh
c3Q8Y29uc3QgT2JqY0luc3RhbmNlKj4oaW5zdGFuY2UpKS0+Z2V0T2JqZWN0KCk7CiAKLSAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsg
Ly8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5k
cyBpbmNvcnJlY3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhl
Yyk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVu
d2luZHMgaW5jb3JyZWN0bHkuCiAKICAgICBAdHJ5IHsKICAgICAgICAgaWYgKGlkIG9iamNWYWx1
ZSA9IFt0YXJnZXRPYmplY3QgdmFsdWVGb3JLZXk6KE5TU3RyaW5nICopX25hbWUuZ2V0KCldKQog
ICAgICAgICAgICAgcmVzdWx0ID0gY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJm9iamNW
YWx1ZSwgT2JqY09iamVjdFR5cGUsIGluc3RhbmNlLT5yb290T2JqZWN0KCkpOwogICAgICAgICB7
Ci0gICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgICAgICBPYmpjSW5zdGFuY2U6
Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKICAgICAgICAgfQogICAgIH0g
QGNhdGNoKE5TRXhjZXB0aW9uKiBsb2NhbEV4Y2VwdGlvbikgewotICAgICAgICBKU0xvY2s6Omxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgICAgIHRocm93RXJyb3IoZXhlYywgW2xvY2FsRXhjZXB0aW9uIHJlYXNvbl0pOwot
ICAgICAgICBKU0xvY2s6OnVubG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIH0KIAog
ICAgIC8vIFdvcmsgYXJvdW5kIHByb2JsZW0gaW4gc29tZSB2ZXJzaW9ucyBvZiBHQ0Mgd2hlcmUg
cmVzdWx0IGdldHMgbWFya2VkIHZvbGF0aWxlIGFuZApAQCAtMTI1LDE4ICsxMjQsMTcgQEAgdm9p
ZCBPYmpjRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjUwogICAgIGlkIHRhcmdldE9iamVj
dCA9IChzdGF0aWNfY2FzdDxjb25zdCBPYmpjSW5zdGFuY2UqPihpbnN0YW5jZSkpLT5nZXRPYmpl
Y3QoKTsKICAgICBpZCB2YWx1ZSA9IGNvbnZlcnRWYWx1ZVRvT2JqY09iamVjdChleGVjLCBhVmFs
dWUpOwogCi0gICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNh
dXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUg
YmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogCiAgICAgQHRyeSB7CiAgICAgICAgIFt0
YXJnZXRPYmplY3Qgc2V0VmFsdWU6dmFsdWUgZm9yS2V5OihOU1N0cmluZyAqKV9uYW1lLmdldCgp
XTsKICAgICAgICAgewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAgICAg
T2JqY0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAg
ICAgIH0KICAgICB9IEBjYXRjaChOU0V4Y2VwdGlvbiogbG9jYWxFeGNlcHRpb24pIHsKLSAgICAg
ICAgSlNMb2NrOjpsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFtsb2NhbEV4Y2VwdGlv
biByZWFzb25dKTsKLSAgICAgICAgSlNMb2NrOjp1bmxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRp
bGl0eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0
aWxpdHkubW0JKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpj
L29iamNfdXRpbGl0eS5tbQkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBPYmpjVmFs
dWUgY29udmVydFZhbHVlVG9PYmpjVmFsdWUoRXhlY1N0CiAKICAgICBzd2l0Y2ggKHR5cGUpIHsK
ICAgICAgICAgY2FzZSBPYmpjT2JqZWN0VHlwZTogewotICAgICAgICAgICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCAqb3JpZ2luR2xv
YmFsT2JqZWN0ID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpOwogICAgICAgICAgICAgUm9v
dE9iamVjdCogb3JpZ2luUm9vdE9iamVjdCA9IGZpbmRSb290T2JqZWN0KG9yaWdpbkdsb2JhbE9i
amVjdCk7CkBAIC0xNDYsNyArMTQ2LDcgQEAgT2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1Zh
bHVlKEV4ZWNTdAogCiBKU1ZhbHVlIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYywgTlNTdHJpbmcgKm5zc3RyaW5nKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCiAgICAgdW5p
Y2hhciAqY2hhcnM7CiAgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IFtuc3N0cmluZyBsZW5ndGhd
OwpAQCAtMTc4LDcgKzE3OCw3IEBAIEpTVmFsdWUgY29udmVydE5TU3RyaW5nVG9TdHJpbmcoRXhl
Y1N0YXQKICovCiBKU1ZhbHVlIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhl
Yywgdm9pZCogYnVmZmVyLCBPYmpjVmFsdWVUeXBlIHR5cGUsIFJvb3RPYmplY3QqIHJvb3RPYmpl
Y3QpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAg
Y2FzZSBPYmpjT2JqZWN0VHlwZTogewpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRf
aW5zdGFuY2UuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cXQvcXRfaW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAKICNp
bmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpT
RE9NV2luZG93QmFzZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAi
SlNMb2NrLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCkBAIC05Miw3ICs5Myw3IEBA
IFF0SW5zdGFuY2U6OlF0SW5zdGFuY2UoUU9iamVjdCogbywgUGFzc1IKIAogUXRJbnN0YW5jZTo6
flF0SW5zdGFuY2UoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21tb25K
U0dsb2JhbERhdGEoKSk7CiAKICAgICBjYWNoZWRJbnN0YW5jZXMucmVtb3ZlKG1faGFzaGtleSk7
CiAKQEAgLTExOSw3ICsxMjAsNyBAQCBRdEluc3RhbmNlOjp+UXRJbnN0YW5jZSgpCiAKIFBhc3NS
ZWZQdHI8UXRJbnN0YW5jZT4gUXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShRT2JqZWN0KiBvLCBQ
YXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3QsIFZhbHVlT3duZXJzaGlwIG93bmVyc2hp
cCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwogCiAgICAgZm9yZWFjaCAoUXRJbnN0YW5jZSogaW5zdGFuY2UsIGNhY2hlZEluc3RhbmNl
cy52YWx1ZXMobykpCiAgICAgICAgIGlmIChpbnN0YW5jZS0+cm9vdE9iamVjdCgpID09IHJvb3RP
YmplY3QpIHsKQEAgLTE4MCw3ICsxODEsNyBAQCBDbGFzcyogUXRJbnN0YW5jZTo6Z2V0Q2xhc3Mo
KSBjb25zdAogCiBSdW50aW1lT2JqZWN0KiBRdEluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIG1fbWV0aG9kcy5jbGVhcigpOwog
ICAgIHJldHVybiBRdFJ1bnRpbWVPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIHRoaXMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X3BpeG1hcHJ1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9x
dC9xdF9waXhtYXBydW50aW1lLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNv
cmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjAs
NyArNDIwLDcgQEAgUnVudGltZU9iamVjdCogUXRQaXhtYXBJbnN0YW5jZTo6bmV3UnVudAogCiBK
U09iamVjdCogUXRQaXhtYXBJbnN0YW5jZTo6Y3JlYXRlUGl4bWFwUnVudGltZU9iamVjdChFeGVj
U3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCwgY29uc3QgUVZhcmlhbnQm
IGRhdGEpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBSZWZQdHI8UXRQaXhtYXBJbnN0YW5jZT4gaW5z
dGFuY2UgPSBhZG9wdFJlZihuZXcgUXRQaXhtYXBJbnN0YW5jZShyb290LCBkYXRhKSk7CiAgICAg
cmV0dXJuIGluc3RhbmNlLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysg
U291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzAsNyArMjMwLDcgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3Rh
dAogICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IEpTUmVhbFR5cGUgdHlwZSA9IHZhbHVlUmVhbFR5cGUoZXhlYywgdmFsdWUpOwogICAgIGlmICho
aW50ID09IFFNZXRhVHlwZTo6Vm9pZCkgewogICAgICAgICBzd2l0Y2godHlwZSkgewpAQCAtODI0
LDcgKzgyNCw3IEBAIEpTVmFsdWUgY29udmVydFFWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUKICAg
ICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBpZiAo
dHlwZSA9PSBRTWV0YVR5cGU6OkJvb2wpCiAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4odmFyaWFu
dC50b0Jvb2woKSk7CkBAIC0xNDIwLDcgKzE0MjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBRdFJ1bnRp
bWVNZXRhTWV0aG9kOjpjYWxsCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKICAgICAvLyBXZSBoYXZlIHRvIHBpY2sgYSBtZXRob2QgdGhhdCBtYXRjaGVz
Li4KLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogCiAgICAgUU9iamVjdCAqb2JqID0gZC0+bV9pbnN0YW5jZS0+Z2V0
T2JqZWN0KCk7CiAgICAgaWYgKG9iaikgewpAQCAtMTU2MSw3ICsxNTYxLDcgQEAgRW5jb2RlZEpT
VmFsdWUgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZAogewogICAgIFF0UnVudGltZUNvbm5lY3Rp
b25NZXRob2REYXRhKiBkID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCAq
PihleGVjLT5jYWxsZWUoKSktPmRfZnVuYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIFFPYmpl
Y3QqIHNlbmRlciA9IGQtPm1faW5zdGFuY2UtPmdldE9iamVjdCgpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZV9xdDQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lX3F0NC5jcHAJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lX3F0NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzMCw3ICsyMzAsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50
KEV4ZWNTdGF0CiAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogICAgIH0KIAotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgSlNSZWFsVHlwZSB0eXBlID0gdmFsdWVSZWFsVHlwZShleGVjLCB2YWx1ZSk7CiAg
ICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpWb2lkKSB7CiAgICAgICAgIHN3aXRjaCh0eXBlKSB7
CkBAIC04MjQsNyArODI0LDcgQEAgSlNWYWx1ZSBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKEV4ZWNT
dGF0ZQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCi0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAog
ICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6Qm9vbCkKICAgICAgICAgcmV0dXJuIGpzQm9vbGVh
bih2YXJpYW50LnRvQm9vbCgpKTsKQEAgLTE0MjksNyArMTQyOSw3IEBAIEVuY29kZWRKU1ZhbHVl
IFF0UnVudGltZU1ldGFNZXRob2Q6OmNhbGwKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIFdlIGhhdmUgdG8gcGljayBhIG1ldGhvZCB0aGF0
IG1hdGNoZXMuLgotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBRT2JqZWN0ICpvYmogPSBkLT5tX2luc3Rh
bmNlLT5nZXRPYmplY3QoKTsKICAgICBpZiAob2JqKSB7CkBAIC0xNTcwLDcgKzE1NzAsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kCiB7CiAgICAgUXRSdW50aW1l
Q29ubmVjdGlvbk1ldGhvZERhdGEqIGQgPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVDb25uZWN0aW9u
TWV0aG9kICo+KGV4ZWMtPmNhbGxlZSgpKS0+ZF9mdW5jKCk7CiAKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAg
ICAgUU9iamVjdCogc2VuZGVyID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUxLDcgKzU1MSw3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0
ZUltYWdlQnVmZmUKICAgICBtX2NvbnRleHRTdGF0ZVNhdmVyID0gYWRvcHRQdHIobmV3IEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIoKm1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSkpOwogCiAjaWYg
VVNFKEpTQykKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
Z2xvYmFsRGF0YSgpKTsKICAgICBzaXplX3QgbnVtQnl0ZXMgPSA0ICogbV9pbWFnZUJ1ZmZlci0+
aW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIG1faW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLmhl
aWdodCgpOwogICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpLT5oZWFw
LnJlcG9ydEV4dHJhTWVtb3J5Q29zdChudW1CeXRlcyk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEs
OCArODEsOCBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiAjaWYg
VVNFKEpTQykKICAgICBpZiAoIWxvYWRFcnJvcikgewogICAgICAgICBpZiAoIWVsZW0tPmluRG9j
dW1lbnQoKSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CiAgICAgICAgICAgICBKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
IEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCk7CisgICAgICAgICAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEpOwogICAgICAgICAgICAgZ2xvYmFsRGF0YS0+
aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoY2FjaGVkSW1hZ2UtPmVuY29kZWRTaXplKCkpOwog
ICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3Bw
CShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNyArMjQwLDcgQEAgYm9vbCBQbHVnaW5WaWV3Ojpz
dGFydCgpCiAgICAgewogICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0
aGlzKTsKICNpZiBVU0UoSlNDKQotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAg
ICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUp
bV9taW1lVHlwZS51dGY4KCkuZGF0YSgpLCBtX2luc3RhbmNlLCBtX21vZGUsIG1fcGFyYW1Db3Vu
dCwgbV9wYXJhbU5hbWVzLCBtX3BhcmFtVmFsdWVzLCBOVUxMKTsKQEAgLTMzMCw3ICszMzAsNyBA
QCB2b2lkIFBsdWdpblZpZXc6OnN0b3AoKQogICAgIG1faXNTdGFydGVkID0gZmFsc2U7CiAKICNp
ZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICNl
bmRpZgogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC00NDYsNyArNDQ2LDcg
QEAgdm9pZCBQbHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVzdChQbHVnaW5SZQogICAgICAgICAgICAg
aWYgKHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSkgewogICAgICAgICAgICAgICAgIFBsdWdp
blZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgICAg
ICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwogI2VuZGlmCiAgICAgICAgICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAg
ICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dXJsbm90aWZ5KG1faW5zdGFuY2Us
IHJlcXVlc3RVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+
bm90aWZ5RGF0YSgpKTsKQEAgLTczNiw3ICs3MzYsNyBAQCBOUE9iamVjdCogUGx1Z2luVmlldzo6
bnBPYmplY3QoKQogICAgIHsKICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZp
ZXcodGhpcyk7CiAjaWYgVVNFKEpTQykKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKICNlbmRpZgogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUp
OwogICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2lu
c3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmb2JqZWN0KTsKQEAgLTE0OTIs
NyArMTQ5Miw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGEKIAog
ICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0Mp
Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBOUEJvb2wgdmFsdWUgPSBwcml2YXRlQnJvd3Np
bmdFbmFibGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdp
blZpZXdCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNyArNDAzLDcgQEAgYm9vbCBQbHVnaW5WaWV3Ojpk
aXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbHVn
aW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAg
IGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5j
ZSwgJmV2ZW50KTsKQEAgLTk3MCw3ICs5NzAsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2lu
ZG93SWZOZWVkZWQoKQogICAgICAgICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBX
aW5kb3cud3NfaW5mbyktPndpbmRvd0dyb3VwID0gd2luZG93LT53aW5kb3dHcm91cCgpOwogCiAg
ICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7
CiAKICAgICAvLyBGSVhNRTogUGFzc2luZyB6b29tRmFjdG9yIHRvIHNldHdpbmRvdyBtYWtlIHdp
bmRvd2VkIHBsdWdpbiBzY2FsZSBpbmNvcnJlY3RseS4KQEAgLTEyMjAsNyArMTIyMCw3IEBAIGJv
b2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAKICAgICBpZiAobV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmdldHZhbHVlKSB7CiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVt
YmVkLCAmbV9uZWVkc1hFbWJlZCk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpA
QCAtMTMwMSw3ICsxMzAxLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpnZXRXaW5kb3dJbmZvKFZlY3Rv
cjxQbAogICAgIHZvaWQqIHZhbFB0ciA9IDA7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50
UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpblNjcmVlbldpbmRvdywgJnZhbFB0
cik7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVu
dAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1
Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhmYWxzZSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdp
bih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2
LDcgKzEwNiw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZp
ZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
IHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAKICAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1Z2lu
LT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpAQCAtMjc2LDcgKzI3
Niw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiAKIAogdm9pZCBQ
bHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewot
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIGlmICghbV9p
c1N0YXJ0ZWQgfHwgbV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQog
ICAgICAgICByZXR1cm47CkBAIC00MDYsNyArNDA2LDcgQEAgc3RhdGljIHZvaWQgc2V0WENyb3Nz
aW5nRXZlbnRTcGVjaWZpY0ZpZQogCiB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQo
TW91c2VFdmVudCogZXZlbnQpCiB7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOwogCiAgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHkpCiAgICAgICAgIHJldHVybjsKQEAgLTUzNSw3ICs1MzUsNyBA
QCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAgIH0KIAogICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAg
IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5k
b3cpOwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtODQyLDcgKzg0Miw3IEBAIGJv
b2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCiAjaWYgZGVmaW5lZChYUF9VTklYKQogICAg
IGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsKICAgICAgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1
ZSk7CiAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNl
LCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKICAgICAgICAgc2V0Q2Fs
bGluZ1BsdWdpbihmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVn
aW5WaWV3TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1Bs
dWdpblZpZXdNYWMubW0JKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvbWFjL1BsdWdpblZpZXdNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyNiw3ICs0MjYsNyBA
QCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAgICAgICAgICAgbV9u
cFdpbmRvdy5jbGlwUmVjdC5yaWdodCAtIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCwgbV9ucFdp
bmRvdy5jbGlwUmVjdC5ib3R0b20gLSBtX25wV2luZG93LmNsaXBSZWN0LnRvcCk7CiAKICAgICBQ
bHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAg
ICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2lu
ZG93KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAgLTc3Miw3ICs3NzIsNyBAQCBQ
b2ludCBQbHVnaW5WaWV3Ojptb3VzZVBvc0ZvclBsdWdpbihNb3VzCiBib29sIFBsdWdpblZpZXc6
OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkKIHsKICAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0
ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAJKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzczLDcgKzM3Myw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlz
cGF0Y2hOUEV2ZW50KE5QRXZlbnQKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5W
aWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogI2VuZGlmCiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBib29s
IGFjY2VwdGVkID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAm
ZXZlbnQpOwpAQCAtNjg3LDcgKzY4Nyw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJ
Zk5lZWRlZCgpCiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsK
ICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICNlbmRpZgogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgbV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CkBAIC05NDksNyAr
OTQ5LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKICAgICBpZiAobV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKSB7CiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgc2V0Q2FsbGlu
Z1BsdWdpbih0cnVlKTsKICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVl
KG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVlZHNYRW1iZWQpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjYsNyArNTI2LDcgQEAgYm9vbCBQbHVnaW5WaWV3Ojpk
aXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICBzaG91bGRQb3AgPSB0cnVlOwogICAgIH0K
IAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxs
aW5nUGx1Z2luKHRydWUpOwogICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKICAgICBzZXRDYWxsaW5nUGx1Z2lu
KGZhbHNlKTsKQEAgLTY3Nyw3ICs2NzcsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJv
YXJkRXZlbnQoS2V5CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5w
RXZlbnQpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KQEAgLTc0Nyw3
ICs3NDcsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFCiAgICAg
fSBlbHNlCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmFjayBwb3J0aW5nIHRoZSBodHRw
Oi8vd2Via2l0Lm9yZy9iLzU4MTA4IGZpeCBoZXJlLgogICAgIGlmIChkaXNwYXRjaE5QRXZlbnQo
bnBFdmVudCkpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwpAQCAtODM1LDcg
KzgzNSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEkKICAgICBt
X25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CiAKICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPnNldHdpbmRvdykgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93
KTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmVUZXN0U3Vw
cG9ydCB7CiAKIHZvaWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0
KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgRXhlY1N0
YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc2NyaXB0Q29udGV4dC0+aXNEb2N1
bWVudCgpID8gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzY3JpcHRDb250ZXh0KSA6IDA7CkBAIC00
OSw4ICs0OSw4IEBAIHZvaWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJlZiAKIAog
dm9pZCByZXNldEludGVybmFsc09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgSW50ZXJuYWxzICogaW50ZXJuYWxzID0g
dG9JbnRlcm5hbHMoZ2xvYmFsT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJ
ZGVudGlmaWVyKGV4ZWMsIEludGVybmFsczo6aW50ZXJuYWxzSWQpKSk7CiAgICAgaWYgKGludGVy
bmFscykgewpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NTEsOCArODUxLDggQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZHJvcFBy
b3RlY3Rpb24oKQogICAgIC8vIG91dC4gQnV0IGl0IGlzIHByb3RlY3RlZCBmcm9tIEdDIHdoaWxl
IGxvYWRpbmcsIHNvIHRoaXMKICAgICAvLyBjYW4ndCBiZSByZWNvdXBlZCB1bnRpbCB0aGUgbG9h
ZCBpcyBkb25lLCBzbyBvbmx5CiAgICAgLy8gcmVwb3J0IHRoZSBleHRyYSBjb3N0IGF0IHRoYXQg
cG9pbnQuCi0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7
CiAgICAgSlNDOjpKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmdsb2JhbERhdGEoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERh
dGEpOwogICAgIGdsb2JhbERhdGEtPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KG1fcmVzcG9u
c2VCdWlsZGVyLmxlbmd0aCgpICogMik7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMTItMDYtMjAgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJn
QGFwcGxlLmNvbT4KKworICAgICAgICBKU0xvY2sgc2hvdWxkIGJlIHBlci1KU0dsb2JhbERhdGEK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MTIzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBh
bGwgc2l0ZXMgdGhhdCB1c2VkIEpTTG9jayB0byBpbnN0ZWFkIHVzZSB0aGUgbmV3IEpTTG9ja0hv
bGRlcgorICAgICAgICBhbmQgcGFzcyBpbiB0aGUgY29ycmVjdCBKUyBjb250ZXh0IHRoYXQgdGhl
IGNvZGUgaXMgYWJvdXQgdG8gaW50ZXJhY3Qgd2l0aCB0aGF0IAorICAgICAgICBuZWVkcyBwcm90
ZWN0aW9uLgorCisgICAgICAgICogU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6c2FtcGxlV2ViS2l0KToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgorICAg
ICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2Jq
ZWN0OjpjYWxsT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Y2FsbENvbnN0
cnVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6cHV0KToKKyAgICAgICAgKFdl
YktpdDo6SlNOUE9iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpKU05Q
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVj
dDo6cHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9OUEpTT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aGFzTWV0aG9k
KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aW52b2tlKToKKyAgICAgICAgKFdlYktp
dDo6TlBKU09iamVjdDo6aW52b2tlRGVmYXVsdCk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmpl
Y3Q6Omhhc1Byb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6Z2V0UHJvcGVy
dHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjpzZXRQcm9wZXJ0eSk6CisgICAgICAg
IChXZWJLaXQ6Ok5QSlNPYmplY3Q6OnJlbW92ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6
TlBKU09iamVjdDo6ZW51bWVyYXRlKToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6Y29u
c3RydWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1l
T2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpjb252
ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0
TWFwOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1hcDo6bW92
ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6anNXcmFwcGVyRm9y
V29ybGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y29tcHV0ZWRTdHlsZUluY2x1ZGlu
Z1Zpc2l0ZWRJbmZvKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZSk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzczo6Z2V0V2ViQ29yZVN0YXRpc3RpY3MpOgorCiAyMDEyLTA2LTIxICBSeXVhbiBDaG9p
ICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMW1dLMl0gQWRkIFdLVmll
d0VmbCBhbmQgV2ViS2l0MiBBUEkgT2JqZWN0IHRvIHJlcHJlc2VudCBFdmFzX09iamVjdC4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5tYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1h
Yy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJN
ZW1vcnlTYW1wbGVyLm1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIFdl
Yk1lbW9yeVN0YXRpc3RpY3MgV2ViTWVtb3J5U2FtcGxlcjo6c2EKICAgICB0b3RhbEJ5dGVzSW5V
c2UgKz0gZmFzdE1hbGxvY0J5dGVzSW5Vc2U7CiAgICAgdG90YWxCeXRlc0NvbW1pdHRlZCArPSBm
YXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQ7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNJblVzZSA9IEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5zaXplKCk7CiAgICAgc2l6ZV90IGpzY0hl
YXBCeXRlc0NvbW1pdHRlZCA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVh
cC5jYXBhY2l0eSgpOwogICAgIHRvdGFsQnl0ZXNJblVzZSArPSBqc2NIZWFwQnl0ZXNJblVzZTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24g
MTIwOTI2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTIwLDcgKzkyMCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6Z2V0V2ViQ29y
ZVN0YXRpc3RpY3ModWkKICAgICAKICAgICAvLyBHYXRoZXIgSmF2YVNjcmlwdCBzdGF0aXN0aWNz
LgogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRPYmplY3Rz
Q291bnQiLCBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291
bnQoKSk7CiAgICAgICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0R2xv
YmFsT2JqZWN0c0NvdW50IiwgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFw
Lmdsb2JhbE9iamVjdENvdW50KCkpOwogICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNl
dCgiSmF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHNDb3VudCIsIEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDA5LDcgKzQwOSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmdhcmJhZ2VDb2xsZWN0SmF2
YVMKIAogc2l6ZV90IEluamVjdGVkQnVuZGxlOjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KCkKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgpOwogfQog
CkBAIC00MTgsOCArNDE4LDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0aW9u
KEpTQwogICAgIGlmICghY29udGV4dCB8fCAhZXhjZXB0aW9uKQogICAgICAgICByZXR1cm47CiAK
LSAgICBKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpF
eGVjU3RhdGUqIGV4ZWNTdGF0ZSA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlY1N0YXRlKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBoYXMgYSBET01X
aW5kb3cgZ2xvYmFsIG9iamVjdCwgb3RoZXJ3aXNlIHRoaXMgY29udGV4dCBkaWRuJ3Qgb3JpZ2lu
YXRlIGZyb20gYSBQYWdlLgogICAgIGlmICghdG9KU0RPTVdpbmRvdyhleGVjU3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RQcm90
b3R5cGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aWZpZXJSZXAuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0pTRE9NV2luZG93QmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTEyNSw3ICsxMjYsNyBAQCBKU1Zh
bHVlIEpTTlBPYmplY3Q6OmNhbGxNZXRob2QoRXhlY1N0YXRlCiAgICAgVk9JRF9UT19OUFZBUklB
TlQocmVzdWx0KTsKICAgICAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5pbnZva2UobV9u
cE9iamVjdCwgbWV0aG9kTmFtZSwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwgJnJl
c3VsdCk7CiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRv
RXhlY1N0YXRlKGV4ZWMpOwogICAgIH0KQEAgLTE2NSw3ICsxNjYsNyBAQCBKU0M6OkpTVmFsdWUg
SlNOUE9iamVjdDo6Y2FsbE9iamVjdChKU0M6CiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0
KTsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAg
cmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQobV9ucE9iamVj
dCwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7CiAgICAgICAgIE5Q
UnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwog
ICAgIH0KQEAgLTIwNSw3ICsyMDYsNyBAQCBKU1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxDb25zdHJ1
Y3RvcihFeGVjCiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKICAgICAKICAgICB7Ci0g
ICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0g
bV9ucE9iamVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QobV9ucE9iamVjdCwgYXJndW1lbnRzLmRhdGEo
KSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7CiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6
bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgIH0KQEAgLTM0MCw3ICsz
NDEsNyBAQCB2b2lkIEpTTlBPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTCiAgICAgTlBS
dW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKHRoaXNPYmplY3QtPm1f
b2JqZWN0TWFwKTsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAgICAgdGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5zZXRQcm9wZXJ0eSh0aGlz
T2JqZWN0LT5tX25wT2JqZWN0LCBucElkZW50aWZpZXIsICZ2YXJpYW50KTsKIAogICAgICAgICBO
UFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsK
QEAgLTM4MCw3ICszODEsNyBAQCBib29sIEpTTlBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEV4ZWNT
dGF0CiAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKG1f
b2JqZWN0TWFwKTsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
IAogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiByZW1v
dmVQcm9wZXJ0eSByZXR1cm5zIGZhbHNlPwogICAgICAgICBpZiAoIW1fbnBPYmplY3QtPl9jbGFz
cy0+cmVtb3ZlUHJvcGVydHkobV9ucE9iamVjdCwgcHJvcGVydHlOYW1lKSkKQEAgLTQxMyw3ICs0
MTQsNyBAQCB2b2lkIEpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAgTlBS
dW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKHRoaXNPYmplY3QtPm1f
b2JqZWN0TWFwKTsKICAgICAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSB0aHJvdyBhbiBleGNlcHRpb24gaWYg
ZW51bWVyYXRlIHJldHVybnMgZmFsc2U/CiAgICAgICAgIGlmICghdGhpc09iamVjdC0+bV9ucE9i
amVjdC0+X2NsYXNzLT5lbnVtZXJhdGUodGhpc09iamVjdC0+bV9ucE9iamVjdCwgJmlkZW50aWZp
ZXJzLCAmaWRlbnRpZmllckNvdW50KSkKQEAgLTQ2MSw3ICs0NjIsNyBAQCBKU1ZhbHVlIEpTTlBP
YmplY3Q6OnByb3BlcnR5R2V0dGVyKEV4ZWNTCiAgICAgCiAgICAgYm9vbCByZXR1cm5WYWx1ZTsK
ICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIE5QSWRl
bnRpZmllciBucElkZW50aWZpZXIgPSBucElkZW50aWZpZXJGcm9tSWRlbnRpZmllcihwcm9wZXJ0
eU5hbWUpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IHRoaXNPYmotPm1fbnBPYmplY3QtPl9jbGFz
cy0+Z2V0UHJvcGVydHkodGhpc09iai0+bV9ucE9iamVjdCwgbnBJZGVudGlmaWVyLCAmcmVzdWx0
KTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvTlBKU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpoYXNN
ZXRob2QoTlBJZGVudGlmaWVyIAogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBtX2pzT2JqZWN0LT5nZXQo
ZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApKTsg
ICAgCiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKQEAgLTExOSw3ICsxMTksNyBAQCBib29s
IE5QSlNPYmplY3Q6Omludm9rZShOUElkZW50aWZpZXIgbWV0CiAgICAgaWYgKCFleGVjKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTVmFsdWUgZnVu
Y3Rpb24gPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVw
KGV4ZWMsIGlkZW50aWZpZXJSZXApKTsKICAgICByZXR1cm4gaW52b2tlKGV4ZWMsIG1fb2JqZWN0
TWFwLT5nbG9iYWxPYmplY3QoKSwgZnVuY3Rpb24sIGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwg
cmVzdWx0KTsKQEAgLTEzMSw3ICsxMzEsNyBAQCBib29sIE5QSlNPYmplY3Q6Omludm9rZURlZmF1
bHQoY29uc3QgTlBWCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG1fanNPYmplY3QuZ2V0KCk7CiAg
ICAgcmV0dXJuIGludm9rZShleGVjLCBtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCksIGZ1bmN0
aW9uLCBhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7CkBAIC0xNDUsNyArMTQ1LDcg
QEAgYm9vbCBOUEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGlmICghZXhl
YykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBib29s
IHJlc3VsdDsKICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkKQEAgLTE2NSw3ICsx
NjUsNyBAQCBib29sIE5QSlNPYmplY3Q6OmdldFByb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgaWYg
KCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFs
dWUganNSZXN1bHQ7CiAgICAgaWYgKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpCiAgICAgICAg
IGpzUmVzdWx0ID0gbV9qc09iamVjdC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tSWRlbnRpZmll
clJlcChleGVjLCBpZGVudGlmaWVyUmVwKSk7CkBAIC0xODUsNyArMTg1LDcgQEAgYm9vbCBOUEpT
T2JqZWN0OjpzZXRQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGlmICghZXhlYykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUg
PSBtX29iamVjdE1hcC0+Y29udmVydE5QVmFyaWFudFRvSlNWYWx1ZShleGVjLCBtX29iamVjdE1h
cC0+Z2xvYmFsT2JqZWN0KCksICp2YWx1ZSk7CiAgICAgaWYgKGlkZW50aWZpZXJSZXAtPmlzU3Ry
aW5nKCkpIHsKQEAgLTIwNiw3ICsyMDYsNyBAQCBib29sIE5QSlNPYmplY3Q6OnJlbW92ZVByb3Bl
cnR5KE5QSWRlbnRpCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKSB7CiAgICAgICAg
IElkZW50aWZpZXIgaWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVj
LCBpZGVudGlmaWVyUmVwKTsKICAgICAgICAgCkBAIC0yMzUsNyArMjM1LDcgQEAgYm9vbCBOUEpT
T2JqZWN0OjplbnVtZXJhdGUoTlBJZGVudGlmaWVyKgogICAgIGlmICghZXhlYykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOwogICAgIG1fanNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dFByb3BlcnR5TmFtZXMobV9qc09iamVjdC5nZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhj
bHVkZURvbnRFbnVtUHJvcGVydGllcyk7CkBAIC0yNTcsNyArMjU3LDcgQEAgYm9vbCBOUEpTT2Jq
ZWN0Ojpjb25zdHJ1Y3QoY29uc3QgTlBWYXJpYQogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0
RGF0YTsKICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBnZXRDb25zdHJ1Y3REYXRh
KG1fanNPYmplY3QuZ2V0KCksIGNvbnN0cnVjdERhdGEpOwpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVu
dGltZU9iamVjdE1hcC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAgSlNWYWx1ZSBOUFJ1bnRpbWVPYmplY3RNYXA6OmNv
bnZlcnROUFZhcgogCiB2b2lkIE5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVUb05Q
VmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIE5QVmFyaWFudCYgdmFyaWFu
dCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgVk9JRF9UT19OUFZBUklBTlQodmFyaWFudCk7CiAg
ICAgCkBAIC0xODYsNyArMTg2LDcgQEAgYm9vbCBOUFJ1bnRpbWVPYmplY3RNYXA6OmV2YWx1YXRl
KE5QT2JqZQogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGdldE9yQ3Jl
YXRlSlNPYmplY3QoZ2xvYmFsT2JqZWN0LmdldCgpLCBucE9iamVjdCk7CiAKICAgICBnbG9iYWxP
YmplY3QtPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwpAQCAtMjY2LDcgKzI2
Niw3IEBAIHZvaWQgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXAKICAgICAgICAg
cmV0dXJuOwogCiAgICAgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgdGhyb3dFcnJv
cihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBzdHJpbmdUb1VTdHJpbmcoZ2xvYmFsRXhjZXB0aW9u
U3RyaW5nKCkpKSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NDIsNyArNjQyLDcgQEAgSlNWYWx1ZVJlZiBXZWJGcmFtZTo6anNXcmFwcGVyRm9yV29ybGQo
SQogICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSBtX2NvcmVGcmFtZS0+c2NyaXB0KCkt
Pmdsb2JhbE9iamVjdCh3b3JsZC0+Y29yZVdvcmxkKCkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICByZXR1cm4g
dG9SZWYoZXhlYywgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIG5vZGVIYW5kbGUtPmNvcmVOb2Rl
KCkpKTsKIH0KIApAQCAtNjU0LDcgKzY1NCw3IEBAIEpTVmFsdWVSZWYgV2ViRnJhbWU6OmpzV3Jh
cHBlckZvcldvcmxkKEkKICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0ID0gbV9jb3JlRnJh
bWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3Qod29ybGQtPmNvcmVXb3JsZCgpKTsKICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCByYW5nZUhh
bmRsZS0+Y29yZVJhbmdlKCkpKTsKIH0KIApAQCAtNjcxLDcgKzY3MSw3IEBAIEpTVmFsdWVSZWYg
V2ViRnJhbWU6OmNvbXB1dGVkU3R5bGVJbmNsdWQKIAogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVh
dGUoc3RhdGljX2Nhc3Q8SlNFbGVtZW50Kj4odG9KUyhlbGVtZW50KSktPmltcGwoKSwgdHJ1ZSk7
CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogICAgIHJldHVybiB0b1JlZihleGVjLCB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgc3R5bGUuZ2V0KCkpKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODE1LDcgKzE4MTUsNyBAQCB2b2lkIFdlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFt
ZShjCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFJlc3VsdFZh
bHVlOwogICAgIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZTsKIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBpZiAoSlNWYWx1ZSByZXN1
bHRWYWx1ZSA9IG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3Jp
cHQoc2NyaXB0LCB0cnVlKS5qc1ZhbHVlKCkpIHsKICAgICAgICAgaWYgKChzZXJpYWxpemVkUmVz
dWx0VmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShtX21haW5GcmFtZS0+anND
b250ZXh0KCksIHRvUmVmKG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+c2NyaXB0KCktPmdsb2Jh
bE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSwgcmVzdWx0VmFs
dWUpLCAwKSkpCiAgICAgICAgICAgICBkYXRhUmVmZXJlbmNlID0gc2VyaWFsaXplZFJlc3VsdFZh
bHVlLT5kYXRhKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhh
aG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xv
YmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
aGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcg
SlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQg
dGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5l
ZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBBcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHA6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmNsZWFyTWVtb3J5Q2FjaGVzKToKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DbGllbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1BhZ2VQb3B1cEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVBv
cHVwQmxhY2tCZXJyeTo6aW5zdGFsbERvbUZ1bmN0aW9uKToKKyAgICAgICAgKiBXZWJLaXRTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydC5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1
cHBvcnQ6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyk6CisKIDIwMTItMDYtMjEg
IE1pa2UgRmVudG9uICA8bWlmZW50b25AcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0g
SW5wdXQgbW9kZSBzaG91bGQgYWRhcHQgYXV0b21hdGljYWxseSB0byBzZXR0aW5ncyBjaGFuZ2Vz
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JsYWNrQmVycnlHbG9iYWwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmxhY2tCZXJyeUds
b2JhbC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9B
cGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsMTAg
QEAgdm9pZCBjbGVhck1lbW9yeUNhY2hlcygpCiAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OnVz
ZXJJbnRlcmZhY2VUaHJlYWRNZXNzYWdlQ2xpZW50KCktPmRpc3BhdGNoTWVzc2FnZShCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6Y3JlYXRlRnVuY3Rpb25DYWxsTWVzc2FnZShjbGVhck1lbW9yeUNhY2hl
c0luQ29tcG9zaXRpbmdUaHJlYWQpKTsKICNlbmRpZgogCi0gICAgY29sbGVjdEphdmFzY3JpcHRH
YXJiYWdlTm93KCk7CisgICAgeworICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIGNvbGxlY3RKYXZhc2NyaXB0
R2FyYmFnZU5vdygpOworICAgIH0KIAogICAgIC8vIENsZWFuIGNhY2hlcyBhZnRlciBKUyBnYXJi
YWdlIGNvbGxlY3Rpb24gYmVjYXVzZSBKUyBHQyBjYW4KICAgICAvLyBnZW5lcmF0ZSBtb3JlIGRl
YWQgcmVzb3VyY2VzLgpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBw
b3J0L0NsaWVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDEyMDky
NikKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DbGllbnRFeHRl
bnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCwxMSArODQsMTEgQEAgc3RhdGljIEpTU3Rh
dGljVmFsdWUgY2xpZW50RXh0ZW5zaW9uU3RhdAogLy8gRklYTUU6IFJldmlzaXQgdGhlIGNyZWF0
aW9uIG9mIHRoaXMgY2xhc3MgYW5kIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBiZXN0IHdheSB0byBh
cHByb2FjaCBpdC4KIHZvaWQgYXR0YWNoRXh0ZW5zaW9uT2JqZWN0VG9GcmFtZShGcmFtZSogZnJh
bWUsIFdlYlBhZ2VDbGllbnQqIGNsaWVudCkKIHsKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLQogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBmcmFt
ZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+d2luZG93
KCk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygpOwor
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisKICAgICBKU0NvbnRleHRSZWYgc2Ny
aXB0Q3R4ID0gdG9SZWYoZXhlYyk7CiAKICAgICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9u
ID0ga0pTQ2xhc3NEZWZpbml0aW9uRW1wdHk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1BhZ2VQb3B1cEJsYWNrQmVy
cnkuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
Q29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
MiwxMyArMTIyLDEyIEBAIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHBvcFVwRXh0ZW5zaW9uU3RhdGkK
IAogdm9pZCBQYWdlUG9wdXBCbGFja0JlcnJ5OjppbnN0YWxsRG9tRnVuY3Rpb24oRnJhbWUqIGZy
YW1lKQogewotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OwotCiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZnJhbWUsIG1haW5U
aHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBBU1NFUlQod2luZG93KTsKIAogICAgIEpTQzo6RXhl
Y1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKGV4ZWMpOwor
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU0NvbnRleHRSZWYgY29u
dGV4dCA9IDo6dG9SZWYoZXhlYyk7CiAgICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlND
b250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDEsOCArMTQxLDggQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OnNjYWxlUGFn
ZUJ5KAogCiBKU1ZhbHVlUmVmIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6Y29tcHV0ZWRTdHlsZUlu
Y2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVl
KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgRXhlY1N0
YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9l
ZmwvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0wNi0yMCAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91
bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3Rl
YWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3Jy
ZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRo
YXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBld2svZXdrX2ZyYW1l
LmNwcDoKKyAgICAgICAgKGV3a19mcmFtZV9zY3JpcHRfZXhlY3V0ZSk6CisgICAgICAgICogZXdr
L2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X2pzX29iamVjdF9hZGQpOgorCiAyMDEy
LTA2LTE5ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIENhbGxpbmcgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBjYXVzZXMgYXNzZXJ0aW9u
IGZhaWx1cmU6IG1fdmVyaWZpZXIuaXNTYWZlVG9Vc2UoKQpJbmRleDogU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a19mcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a19mcmFtZS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTUsOCArNDU1LDggQEAgY2hhciog
ZXdrX2ZyYW1lX3NjcmlwdF9leGVjdXRlKEV2YXNfT2JqZQogICAgIGlmICghcmVzdWx0IHx8ICgh
cmVzdWx0LmlzQm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVt
YmVyKCkpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gc21hcnRE
YXRhLT5mcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChXZWJDb3JlOjptYWluVGhyZWFkTm9y
bWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgIHJlc3VsdFN0cmluZyA9IFdlYkNvcmU6OnVzdHJpbmdUb1N0cmluZyhyZXN1bHQu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICByZXR1cm4gc3RyZHVwKHJlc3VsdFN0
cmluZy51dGY4KCkuZGF0YSgpKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3ZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmll
dy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmll
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNDUsOCArNDA0NSw4IEBAIEVpbmFfQm9vbCBld2tf
dmlld19qc19vYmplY3RfYWRkKEV2YXNfT2IKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSwgZmFsc2UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzbWFydERhdGEsIHByaXYsIGZhbHNlKTsKIAotICAgIEpTQzo6SlNMb2NrIGxvY2soSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIFdlYkNvcmU6OkpTRE9NV2luZG93KiB3aW5k
b3cgPSB0b0pTRE9NV2luZG93KHByaXYtPm1haW5GcmFtZSwgV2ViQ29yZTo6bWFpblRocmVhZE5v
cm1hbFdvcmxkKCkpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sod2luZG93LT5nbG9iYWxF
eGVjKCkpOwogICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3Q7CiAgICAgcm9vdCA9
IHByaXYtPm1haW5GcmFtZS0+c2NyaXB0KCktPmJpbmRpbmdSb290T2JqZWN0KCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTA2LTIwICBNYXJr
IEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNo
b3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5z
dGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNv
cnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGgg
dGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGs6OmdjQ291bnRKYXZhc2NyaXB0T2JqZWN0cyk6CisKIDIwMTItMDYtMjEgIERh
bmllbCBEcmFrZSAgPGRzZEBsYXB0b3Aub3JnPgogCiAgICAgICAgIFtHVEtdIEJhY2twb3J0IHJ1
bi1maWxlLWNob29zZXIgdG8gV2ViS2l0MQpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3Bw
CShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDAsNyArNjAw
LDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdjQ29sbGVjdAogCiB1bnNpZ25l
ZCBsb25nIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2NDb3VudEphdmFzY3JpcHRPYmplY3Rz
KCkKIHsKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVh
cC5vYmplY3RDb3VudCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2OCBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBz
aXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVy
CisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29k
ZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rp
b24uCisKKyAgICAgICAgKiBET00vV2ViRE9NT3BlcmF0aW9ucy5tbToKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAgICAgICAgKCtbV2ViQ29y
ZVN0YXRpc3RpY3MgamF2YVNjcmlwdE9iamVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3Jl
U3RhdGlzdGljcyBqYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dl
YkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnRdKToKKyAgICAg
ICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3RlZEdsb2JhbE9iamVjdHND
b3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVk
T2JqZWN0VHlwZUNvdW50c10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2Ny
aXB0T2JqZWN0VHlwZUNvdW50c10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBzaG91
bGRQcmludEV4Y2VwdGlvbnNdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3Mgc2V0U2hv
dWxkUHJpbnRFeGNlcHRpb25zOl0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBtZW1v
cnlTdGF0aXN0aWNzXSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRS
ZWZlcmVuY2VkT2JqZWN0c0NvdW50XSk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjppbnZva2UpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6Omludm9rZURlZmF1bHQpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYktp
dDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmVQcm9wZXJ0eSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aGFzTWV0aG9kKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjplbnVtZXJhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmFkZFZhbHVlVG9BcnJh
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bW92ZUds
b2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKToKKyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBl
UGx1Z2luU3RyZWFtLm1tOgorICAgICAgICAoV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OndhbnRz
QWxsU3RyZWFtcyk6CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW06
CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzZW5kRXZlbnQ6aXNEcmF3UmVjdDpd
KToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHByaXZhdGVCcm93c2luZ01vZGVE
aWRDaGFuZ2VdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHNldFdpbmRvd0lm
TmVjZXNzYXJ5XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBjcmVhdGVQbHVn
aW5TY3JpcHRhYmxlT2JqZWN0XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBn
ZXRGb3JtVmFsdWU6XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBldmFsdWF0
ZUphdmFTY3JpcHRQbHVnaW5SZXF1ZXN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdp
blZpZXcgd2ViRnJhbWU6ZGlkRmluaXNoTG9hZFdpdGhSZWFzb246XSk6CisgICAgICAgICgtW1dl
Yk5ldHNjYXBlUGx1Z2luVmlldyBsb2FkUGx1Z2luUmVxdWVzdDpdKToKKyAgICAgICAgKC1bV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3IF9wcmludGVkUGx1Z2luQml0bWFwXSk6CisgICAgICAgICogUGx1
Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tOgorICAgICAgICAoK1tXZWJQbHVnaW5Db250cm9s
bGVyIHBsdWdJblZpZXdXaXRoQXJndW1lbnRzOmZyb21QbHVnaW5QYWNrYWdlOl0pOgorICAgICAg
ICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIHN0b3BPbmVQbHVnaW46XSk6CisgICAgICAgICgtW1dl
YlBsdWdpbkNvbnRyb2xsZXIgZGVzdHJveU9uZVBsdWdpbjpdKToKKyAgICAgICAgKC1bV2ViUGx1
Z2luQ29udHJvbGxlciBzdGFydEFsbFBsdWdpbnNdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29u
dHJvbGxlciBhZGRQbHVnaW46XSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAg
ICAgICAgKC1bV2ViRnJhbWUgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5n
OmZvcmNlVXNlckdlc3R1cmU6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzp3aXRoR2xvYmFsT2JqZWN0OmluU2NyaXB0V29ybGQ6
XSk6CisgICAgICAgICogV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tOgorICAgICAg
ICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgc2NvcGVDaGFpbl0pOgorICAgICAgICAoLVtXZWJTY3Jp
cHRDYWxsRnJhbWUgZXZhbHVhdGVXZWJTY3JpcHQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJW
aWV3Lm1tOgorICAgICAgICAoK1tXZWJWaWV3IF9yZXBvcnRFeGNlcHRpb246aW5Db250ZXh0Ol0p
OgorICAgICAgICAoLVtXZWJWaWV3IGFlRGVzY0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3Ry
aW5nOl0pOgorICAgICAgICAoLVtXZWJWaWV3IF9jb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRl
ZEluZm86Zm9yRWxlbWVudDpdKToKKwogMjAxMi0wNi0yMCAgR2FycmV0IEtlbGx5ICA8Z2RrQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBNb3ZpbmcgY29va2llRW5hYmxlZC9zZXRDb29raWVFbmFi
bGVkIGZyb20gUGFnZSB0byBTZXR0aW5ncy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9X
ZWJET01PcGVyYXRpb25zLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9X
ZWJET01PcGVyYXRpb25zLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjcsOCArNjcsOSBA
QCArIChET01FbGVtZW50ICopX0RPTUVsZW1lbnRGcm9tSlNDb250ZXh0CiAgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOwotICAgIHJldHVybiBraXQodG9FbGVtZW50KHRvSlModG9KUyhjb250ZXh0KSwgdmFs
dWUpKSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKKyAgICByZXR1cm4ga2l0KHRvRWxlbWVudCh0b0pTKGV4ZWMsIHZh
bHVlKSkpOwogfQogCiAtIChOU1N0cmluZyAqKV9tYXJrZXJUZXh0Rm9yTGlzdEl0ZW0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkocmV2aXNpb24g
MTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNTgsMzEgKzU4LDMxIEBAICsgKE5TQXJyYXkgKilzdGF0aXN0aWNz
CiAKICsgKHNpemVfdClqYXZhU2NyaXB0T2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKIH0KIAogKyAoc2l6ZV90KWphdmFT
Y3JpcHRHbG9iYWxPYmplY3RzQ291bnQKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KS0+aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOwogfQogCiArIChzaXplX3QpamF2YVNjcmlwdFBy
b3RlY3RlZE9iamVjdHNDb3VudAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5o
ZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCk7CiB9CiAKICsgKHNpemVfdClqYXZhU2NyaXB0UHJv
dGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRh
KCktPmhlYXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKTsKIH0KIAogKyAoTlNDb3VudGVk
U2V0ICopamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMKIHsKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgCiAgICAgTlNDb3VudGVkU2V0ICpy
ZXN1bHQgPSBbTlNDb3VudGVkU2V0IHNldF07CiAKQEAgLTk3LDcgKzk3LDcgQEAgKyAoTlNDb3Vu
dGVkU2V0ICopamF2YVNjcmlwdFByb3RlY3RlZE9iagogCiArIChOU0NvdW50ZWRTZXQgKilqYXZh
U2NyaXB0T2JqZWN0VHlwZUNvdW50cwogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICAgICAKICAgICBOU0NvdW50ZWRTZXQgKnJlc3VsdCA9IFtOU0NvdW50ZWRT
ZXQgc2V0XTsKIApAQCAtMTY3LDEzICsxNjcsMTMgQEAgKyAoc2l6ZV90KWdseXBoUGFnZUNvdW50
CiAKICsgKEJPT0wpc2hvdWxkUHJpbnRFeGNlcHRpb25zCiB7Ci0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBDb25zb2xlOjpzaG91bGRQcmludEV4
Y2VwdGlvbnMoKTsKIH0KIAogKyAodm9pZClzZXRTaG91bGRQcmludEV4Y2VwdGlvbnM6KEJPT0wp
cHJpbnQKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAg
Q29uc29sZTo6c2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zKHByaW50KTsKIH0KIApAQCAtMjAxLDcg
KzIwMSw3IEBAICsgKE5TRGljdGlvbmFyeSAqKW1lbW9yeVN0YXRpc3RpY3MKIHsKICAgICBXVEY6
OkZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0TWFs
bG9jU3RhdGlzdGljcygpOwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICBzaXplX3QgaGVhcFNpemUgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCktPmhlYXAuc2l6ZSgpOwogICAgIHNpemVfdCBoZWFwRnJlZSA9IEpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jYXBhY2l0eSgpIC0gaGVhcFNpemU7CiAgICAg
R2xvYmFsTWVtb3J5U3RhdGlzdGljcyBnbG9iYWxNZW1vcnlTdGF0cyA9IGdsb2JhbE1lbW9yeVN0
YXRpc3RpY3MoKTsKQEAgLTI0NSw3ICsyNDUsNyBAQCArIChzaXplX3QpamF2YVNjcmlwdE5vR0NB
bGxvd2VkT2JqZWN0c0NvCiAKICsgKHNpemVfdClqYXZhU2NyaXB0UmVmZXJlbmNlZE9iamVjdHND
b3VudAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBy
ZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9i
amVjdENvdW50KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0
c2NhcGVQbHVnaW5TdHJlYW0ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291
cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzY4LDcgKzM2OCw3IEBAIGJvb2wgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06
OndhbnRzQWxsU3QKICAgICBOUEVycm9yIGVycm9yOwogICAgIHsKICAgICAgICAgUGx1Z2luU3Rv
cERlZmVycmVyIGRlZmVycmVyKG1fcGx1Z2luVmlldy5nZXQoKSk7Ci0gICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIGVycm9yID0gbV9wbHVn
aW5GdW5jcy0+Z2V0dmFsdWUobV9wbHVnaW4sIE5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJl
YW1zLCAmdmFsdWUpOwogICAgIH0KICAgICBpZiAoZXJyb3IgIT0gTlBFUlJfTk9fRVJST1IpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2lu
Vmlldy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9X
ZWJOZXRzY2FwZVBsdWdpblZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTY2OSw3ICs2NjksNyBA
QCAtIChCT09MKXNlbmRFdmVudDoodm9pZCopZXZlbnQgaXNEcmF3UmVjCiAgICAgLy8gU2V0IHRo
ZSBwbHVnaW5BbGxvd1BvcHVwIGZsYWcuCiAgICAgQVNTRVJUKF9ldmVudEhhbmRsZXIpOwogICAg
IHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihfZXZlbnRIYW5kbGVy
LT5jdXJyZW50RXZlbnRJc1VzZXJHZXN0dXJlKCkgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlIDogUG9zc2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgICAgICBhY2NlcHRl
ZEV2ZW50ID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+ZXZlbnQocGx1Z2lu
LCBldmVudCk7CiAgICAgfQpAQCAtODUwLDcgKzg1MCw3IEBAIC0gKHZvaWQpcHJpdmF0ZUJyb3dz
aW5nTW9kZURpZENoYW5nZQogCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAg
ICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgICAgICBpZiAoW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+c2V0dmFsdWUp
CiAgICAgICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5zZXR2YWx1
ZShwbHVnaW4sIE5QTlZwcml2YXRlTW9kZUJvb2wsICZ2YWx1ZSk7CiAgICAgfQpAQCAtOTkxLDcg
Kzk5MSw3IEBAIC0gKHZvaWQpc2V0V2luZG93SWZOZWNlc3NhcnkKICAgICAgICAgaW5TZXRXaW5k
b3cgPSBZRVM7ICAgICAgICAKICAgICAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07
CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgbnBFcnIgPSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkg
cGx1Z2luRnVuY3NdLT5zZXR3aW5kb3cocGx1Z2luLCAmd2luZG93KTsKICAgICAgICAgfQogICAg
ICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAg
LSAoTlBPYmplY3QgKiljcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZQogICAgIE5QRXJyb3IgZXJy
b3I7CiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBlcnJvciA9
IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwgTlBQ
VnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwgJnZhbHVlKTsKICAgICB9CiAgICAgW3NlbGYgZGlk
Q2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTE0NjMsNyArMTQ2Myw3IEBAIC0gKEJPT0wpZ2V0Rm9y
bVZhbHVlOihOU1N0cmluZyAqKil2YWx1ZQogICAgIE5QRXJyb3IgZXJyb3I7CiAgICAgW3NlbGYg
d2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBlcnJvciA9IFtfcGx1Z2luUGFja2Fn
ZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwgTlBQVmZvcm1WYWx1ZSwgJmJ1
ZmZlcik7CiAgICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNTk1
LDcgKzE1OTUsNyBAQCAtICh2b2lkKWV2YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6CiAg
ICAgICAgIGlmIChbSlNQbHVnaW5SZXF1ZXN0IHNlbmROb3RpZmljYXRpb25dKSB7CiAgICAgICAg
ICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgICAgICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+
dXJsbm90aWZ5KHBsdWdpbiwgW1VSTCBfd2ViX1VSTENTdHJpbmddLCBOUFJFU19ET05FLCBbSlNQ
bHVnaW5SZXF1ZXN0IG5vdGlmeURhdGFdKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFtz
ZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNjI3LDcgKzE2MjcsNyBAQCAtICh2b2lk
KXdlYkZyYW1lOihXZWJGcmFtZSAqKXdlYkZyYW1lIGRpCiAgICAgICAgIAogICAgIFtzZWxmIHdp
bGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBs
dWdpbkZ1bmNzXS0+dXJsbm90aWZ5KHBsdWdpbiwgW1tbcGx1Z2luUmVxdWVzdCByZXF1ZXN0XSBV
UkxdIF93ZWJfVVJMQ1N0cmluZ10sIHJlYXNvbiwgW3BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0p
OwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTY3MSw3ICsx
NjcxLDcgQEAgLSAodm9pZClsb2FkUGx1Z2luUmVxdWVzdDooV2ViUGx1Z2luUmVxdQogICAgICAg
ICAgICAgICAgIGlmIChbcGx1Z2luUmVxdWVzdCBzZW5kTm90aWZpY2F0aW9uXSkgewogICAgICAg
ICAgICAgICAgICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2lu
LCBbW1twbHVnaW5SZXF1ZXN0IHJlcXVlc3RdIFVSTF0gX3dlYl9VUkxDU3RyaW5nXSwgTlBFUlJf
R0VORVJJQ19FUlJPUiwgW3BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlv
bl07CkBAIC0yNDcxLDcgKzI0NzEsNyBAQCAtIChOU0JpdG1hcEltYWdlUmVwICopX3ByaW50ZWRQ
bHVnaW5CaXRtCiAgICAgLy8gVGVsbCB0aGUgcGx1Z2luIHRvIHByaW50IGludG8gdGhlIEdXb3Js
ZAogICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgW19wbHVnaW5Q
YWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+cHJpbnQocGx1Z2luLCAmbnBQcmludCk7CiAgICAg
fQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0J
KHdvcmtpbmcgY29weSkKQEAgLTk2LDEwICs5NiwxMCBAQCArIChOU1ZpZXcgKilwbHVnSW5WaWV3
V2l0aEFyZ3VtZW50czooTlNECiAgICAgTlNWaWV3ICp2aWV3ID0gbmlsOwogCiAgICAgaWYgKFt2
aWV3RmFjdG9yeSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdJblZpZXdXaXRoQXJn
dW1lbnRzOildKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgICAgIHZpZXcgPSBbdmlld0ZhY3RvcnkgcGx1Z0luVmlld1dpdGhBcmd1bWVu
dHM6YXJndW1lbnRzXTsKICAgICB9IGVsc2UgaWYgKFt2aWV3RmFjdG9yeSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKHBsdWdpblZpZXdXaXRoQXJndW1lbnRzOildKSB7Ci0gICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHZpZXcgPSBb
dmlld0ZhY3RvcnkgcGx1Z2luVmlld1dpdGhBcmd1bWVudHM6YXJndW1lbnRzXTsKICAgICB9CiAg
ICAgCkBAIC0xNDksMTAgKzE0OSwxMCBAQCAtICh2b2lkKWRlYWxsb2MKIC0gKHZvaWQpc3RvcE9u
ZVBsdWdpbjooTlNWaWV3ICopdmlldwogewogICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHdlYlBsdWdJblN0b3ApXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBbdmlldyB3ZWJQbHVnSW5TdG9wXTsK
ICAgICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2lu
U3RvcCldKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgICAgIFt2aWV3IHBsdWdpblN0b3BdOwogICAgIH0KIH0KQEAgLTE2MCwxMCArMTYw
LDEwIEBAIC0gKHZvaWQpc3RvcE9uZVBsdWdpbjooTlNWaWV3ICopdmlldwogLSAodm9pZClkZXN0
cm95T25lUGx1Z2luOihOU1ZpZXcgKil2aWV3CiB7CiAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luRGVzdHJveSldKSB7Ci0gICAgICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIFt2aWV3IHdlYlBsdWdJ
bkRlc3Ryb3ldOwogICAgIH0gZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihwbHVnaW5EZXN0cm95KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgW3ZpZXcgcGx1Z2luRGVzdHJveV07CiAgICAgfQog
fQpAQCAtMTgwLDEwICsxODAsMTAgQEAgLSAodm9pZClzdGFydEFsbFBsdWdpbnMKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgaWQgYVZpZXcgPSBbX3ZpZXdz
IG9iamVjdEF0SW5kZXg6aV07CiAgICAgICAgIGlmIChbYVZpZXcgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcih3ZWJQbHVnSW5TdGFydCldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIFthVmlldyB3ZWJQ
bHVnSW5TdGFydF07CiAgICAgICAgIH0gZWxzZSBpZiAoW2FWaWV3IHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IocGx1Z2luU3RhcnQpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBbYVZpZXcgcGx1Z2lu
U3RhcnRdOwogICAgICAgICB9CiAgICAgfQpAQCAtMjUyLDEwICsyNTIsMTAgQEAgLSAodm9pZClh
ZGRQbHVnaW46KE5TVmlldyAqKXZpZXcKIAogICAgICAgICBMT0coUGx1Z2lucywgImluaXRpYWxp
emluZyBwbHVnLWluICVAIiwgdmlldyk7CiAgICAgICAgIGlmIChbdmlldyByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJbkluaXRpYWxpemUpXSkgewotICAgICAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBb
dmlldyB3ZWJQbHVnSW5Jbml0aWFsaXplXTsKICAgICAgICAgfSBlbHNlIGlmIChbdmlldyByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpbkluaXRpYWxpemUpXSkgewotICAgICAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAg
ICAgICBbdmlldyBwbHVnaW5Jbml0aWFsaXplXTsKICAgICAgICAgfQogCkBAIC0yNjUsMTUgKzI2
NSwxNSBAQCAtICh2b2lkKWFkZFBsdWdpbjooTlNWaWV3ICopdmlldwogICAgICAgICBpZiAoX3N0
YXJ0ZWQpIHsKICAgICAgICAgICAgIExPRyhQbHVnaW5zLCAic3RhcnRpbmcgcGx1Zy1pbiAlQCIs
IHZpZXcpOwogICAgICAgICAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3Iod2ViUGx1Z0luU3RhcnQpXSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAg
ICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgICAgICBbdmlldyB3
ZWJQbHVnSW5TdGFydF07CiAgICAgICAgICAgICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luU3RhcnQpXSkgewotICAgICAgICAgICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAg
ICAgICBbdmlldyBwbHVnaW5TdGFydF07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldENvbnRh
aW5pbmdXaW5kb3c6KV0pIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICAgICAgW3ZpZXcgc2V0Q29u
dGFpbmluZ1dpbmRvdzpbX2RvY3VtZW50VmlldyB3aW5kb3ddXTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1Bs
dWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkocmV2aXNpb24gMTIw
OTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NjcsOCArODY3LDcgQEAgYm9vbCBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YQogICAgIGlmICghZnJhbWUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7Ci0gICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2socGx1Z2luV29ybGQoKS0+Z2xvYmFsRGF0
YSgpKTsKICAgICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCgqcGx1Z2luV29y
bGQoKS0+Z2xvYmFsRGF0YSgpLCBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5X
b3JsZCgpKSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7CiAKQEAgLTkwNCw3ICs5MDMsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6aW52b2tlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFs
RXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVjdC0+Z2V0
KGV4ZWMsIG1ldGhvZE5hbWUpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBl
IGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKQEAgLTkzNyw3ICs5
MzYsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0
KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOyAgICAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlw
ZSA9IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEob2JqZWN0LCBjYWxsRGF0YSk7
CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTk2OSw3ICs5NjgsNyBAQCBi
b29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y29uc3RyCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2Jh
bE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAg
ICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1
Y3RUeXBlID0gb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDb25zdHJ1Y3REYXRhKG9iamVjdCwg
Y29uc3RydWN0RGF0YSk7CkBAIC0xMDAyLDcgKzEwMDEsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eTo6Z2V0UHJvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3Js
ZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICBKU1ZhbHVlIHZh
bHVlID0gb2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAKICAgICBtYXJzaGFs
VmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7CkBAIC0xMDIzLDcg
KzEwMjIsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2Ny
aXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOyAgICAKICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgcHJv
cGVydHlOYW1lKTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERh
dGEsIHJlc3VsdExlbmd0aCk7CkBAIC0xMDQ3LDcgKzEwNDYsNyBAQCBib29sIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6c2V0UHJvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5X
b3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKIAogICAgIEpTVmFs
dWUgdmFsdWUgPSBkZW1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsK
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKQEAgLTEwNzMsNyArMTA3Miw3IEBAIGJvb2wgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRQcm8KICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0
KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsgICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAg
IAogICAgIEpTVmFsdWUgdmFsdWUgPSBkZW1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZh
bHVlTGVuZ3RoKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBmYWxzZSk7CkBAIC0xMDk4LDEyICsxMDk3LDEy
IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmUKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9i
YWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICBpZiAoIW9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlO
YW1lKSkgewogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsgICAgCiAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMTI1LDEyICsxMTI0LDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpyZW1vdmUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxk
KCkpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgaWYg
KCFvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIG9iamVjdC0+bWV0
aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KG9iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOyAgICAKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTExOTYsNyArMTE5NSw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpo
YXNNZXQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVj
KCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIGZ1bmMgPSBvYmplY3QtPmdldChleGVjLCBt
ZXRob2ROYW1lKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiAhZnVu
Yy5pc1VuZGVmaW5lZCgpOwpAQCAtMTIxOCw3ICsxMjE3LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OmVudW1lcgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAg
RXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29y
bGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogIAogICAgIFByb3BlcnR5TmFtZUFy
cmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQ
cm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRFbnVt
UHJvcGVydGllcyk7CkBAIC0xMjYyLDcgKzEyNjEsNyBAQCBzdGF0aWMgYm9vbCBnZXRPYmplY3RJ
RChOZXRzY2FwZVBsdWdpbkluCiAgICAgCiB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6YWRkVmFsdWVUb0FycmF5KE5TTXV0YWJsZUFycmF5ICphcnJheSwgRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBpZiAodmFsdWUuaXNTdHJp
bmcoKSkgewogICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50
OlN0cmluZ1ZhbHVlVHlwZV1dOwpAQCAtMTY3Miw3ICsxNjcxLDcgQEAgdm9pZCBOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6Om1vdmVHbAogICAgICAgICByZXR1cm47CiAKICAgICB7Ci0gICAg
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4
ZWMsIHN0cmluZ1RvVVN0cmluZyhnbG9iYWxFeGNlcHRpb25TdHJpbmcoKSkpKTsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gMTIwOTI2
KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTA0LDcgKzEwNCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBK
U0M6OkpTR2xvYmFsT2JqZWN0OwogdXNpbmcgSlNDOjpKU0xvY2s7CiB1c2luZyBKU0M6OkpTVmFs
dWU7Ci11c2luZyBKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seTsKIAogLyoKIEhlcmUgaXMgdGhl
IGN1cnJlbnQgYmVoYXZpb3IgbWF0cml4IGZvciBmb3VyIHR5cGVzIG9mIG5hdmlnYXRpb25zOgpA
QCAtNTk3LDggKzU5Niw4IEBAIC0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3IKICAgICBpZiAoIXJlc3VsdCB8fCAoIXJlc3VsdC5pc0Jvb2xlYW4oKSAmJiAhcmVzdWx0Lmlz
U3RyaW5nKCkgJiYgIXJlc3VsdC5pc051bWJlcigpKSkKICAgICAgICAgcmV0dXJuIEAiIjsKIAot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKIH0KIApAQCAtMTEyMyw4ICsxMTIyLDggQEAgLSAoTlNT
dHJpbmcgKilfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcgogICAgIGlmICghcmVzdWx0IHx8ICgh
cmVzdWx0LmlzQm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVt
YmVyKCkpKQogICAgICAgICByZXR1cm4gQCIiOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGFueVdvcmxkR2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERl
YnVnRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE3NCw5ICsxNzQsOSBAQCAtIChOU0FycmF5ICopc2NvcGVDaGFpbgogICAgIGlmICghX3By
aXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXld
OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluID0gX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lLT5zY29w
ZUNoYWluKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSk7
CiAgICAgaWYgKCFzY29wZUNoYWluLT5uZXh0KSAgLy8gZ2xvYmFsIGZyYW1lCiAgICAgICAgIHJl
dHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6X3ByaXZhdGUtPmdsb2JhbE9iamVjdF07CiAK
QEAgLTIyOSwxMyArMjI5LDEzIEBAIC0gKGlkKWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmluZyAq
KXNjcmkKICAgICBpZiAoIV9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZSkKICAgICAgICAgcmV0
dXJuIG5pbDsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAg
ICAvLyBJZiB0aGlzIGlzIHRoZSBnbG9iYWwgY2FsbCBmcmFtZSBhbmQgdGhlcmUgaXMgbm8gZHlu
YW1pYyBnbG9iYWwgb2JqZWN0LAogICAgIC8vIERhc2hjb2RlIGlzIGF0dGVtcHRpbmcgdG8gZXhl
Y3V0ZSBKUyBpbiB0aGUgZXZhbHVhdG9yIHVzaW5nIGEgc3RhbGUKICAgICAvLyBXZWJTY3JpcHRD
YWxsRnJhbWUuIEluc3RlYWQsIHdlIG5lZWQgdG8gc2V0IHRoZSBkeW5hbWljIGdsb2JhbCBvYmpl
Y3QKICAgICAvLyBhbmQgZXZhbHVhdGUgdGhlIEpTIGluIHRoZSBnbG9iYWwgb2JqZWN0J3MgZ2xv
YmFsIGNhbGwgZnJhbWUuCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IF9wcml2
YXRlLT5kZWJ1Z2dlci0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xv
YmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpOworCiAgICAgaWYgKHNlbGYgPT0gX3ByaXZhdGUtPmRl
YnVnZ2VyLT5nbG9iYWxDYWxsRnJhbWUoKSAmJiAhZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCku
ZHluYW1pY0dsb2JhbE9iamVjdCkgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gX3ByaXZhdGUtPmRlYnVnZ2VyLT5nbG9iYWxPYmplY3QoKTsKIApJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01ODEsOCArNTgx
LDggQEAgKyAodm9pZClfcmVwb3J0RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4YwogICAgIGlmICgh
ZXhjZXB0aW9uIHx8ICFjb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjU3RhdGUg
PSB0b0pTKGNvbnRleHQpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWNTdGF0ZSk7CiAKICAg
ICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgaGFzIGEgRE9NV2luZG93IGdsb2JhbCBvYmplY3Qs
IG90aGVyd2lzZSB0aGlzIGNvbnRleHQgZGlkbid0IG9yaWdpbmF0ZSBmcm9tIGEgV2ViVmlldy4K
ICAgICBpZiAoIXRvSlNET01XaW5kb3coZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
KQpAQCAtNDg1MSw3ICs0ODUxLDcgQEAgLSAoTlNBcHBsZUV2ZW50RGVzY3JpcHRvciAqKWFlRGVz
Y0J5RXZhbAogICAgIEpTVmFsdWUgcmVzdWx0ID0gY29yZUZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0
ZVNjcmlwdChzY3JpcHQsIHRydWUpLmpzVmFsdWUoKTsKICAgICBpZiAoIXJlc3VsdCkgLy8gRklY
TUU6IHBhc3MgZXJyb3JzCiAgICAgICAgIHJldHVybiAwOwotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29yZUZyYW1lLT5zY3Jp
cHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygp
KTsKICAgICByZXR1cm4gYWVEZXNjRnJvbUpTVmFsdWUoY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xv
YmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpLCByZXN1bHQp
OwogfQogCkBAIC02NTYwLDggKzY1NjAsOCBAQCAtICh2b2lkKV9ub3RpZmljYXRpb25zRGlkQ2xv
c2U6KE5TQXJyYXkgCiAKIC0gKEpTVmFsdWVSZWYpX2NvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNp
dGVkSW5mbzooSlNDb250ZXh0UmVmKWNvbnRleHQgZm9yRWxlbWVudDooSlNWYWx1ZVJlZil2YWx1
ZQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgRXhlY1N0
YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhu
ZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQg
YmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQg
dXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0
IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQg
CisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmNw
cDoKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OmFkZFF0U2VuZGVyVG9HbG9iYWxPYmplY3Qp
OgorICAgICAgICAoUVdlYkZyYW1lOjphZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QpOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAg
ICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjppbmplY3RJbnRlcm5hbHNPYmplY3QpOgorICAg
ICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KToKKwog
MjAxMi0wNi0yMSAgVGhpYWdvIE1hcmNvcyBQLiBTYW50b3MgIDx0aGlhZ28uc2FudG9zQGludGVs
LmNvbT4KIAogICAgICAgICBbV0syXVtRdF0gQ29sb3IgY2hvb3NlciBBUEkgbWlzc2luZwpJbmRl
eDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDYsMTMg
KzUwNiwxMiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBxdFNlbmRlckNhbGxiYWNrKEpTQ29uCiAKIHZv
aWQgUVdlYkZyYW1lUHJpdmF0ZTo6YWRkUXRTZW5kZXJUb0dsb2JhbE9iamVjdCgpCiB7Ci0gICAg
SlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RP
TVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhmcmFtZSwgbWFpblRocmVhZE5vcm1hbFdv
cmxkKCkpOwogICAgIFFfQVNTRVJUKHdpbmRvdyk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhl
YyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygpOwogICAgIFFfQVNTRVJUKGV4ZWMpOworICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IDo6
dG9SZWYoZXhlYyk7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHByb3BlcnR5TmFtZShB
ZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIl9fcXRfc2VuZGVyX18iKSk7CkBA
IC02NTcsNyArNjU2LDYgQEAgdm9pZCBRV2ViRnJhbWU6OmFkZFRvSmF2YVNjcmlwdFdpbmRvd09i
agogICAgICAgICByZXR1cm47CiAjaWYgVVNFKEpTQykKICAgICBKU0M6OkJpbmRpbmdzOjpRdElu
c3RhbmNlOjpWYWx1ZU93bmVyc2hpcCB2YWx1ZU93bmVyc2hpcCA9IHN0YXRpY19jYXN0PEpTQzo6
QmluZGluZ3M6OlF0SW5zdGFuY2U6OlZhbHVlT3duZXJzaGlwPihvd25lcnNoaXApOwotICAgIEpT
Qzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTRE9NV2lu
ZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KGQtPmZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29y
bGQoKSk7CiAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdDsKICAgICBpZiAodmFs
dWVPd25lcnNoaXAgPT0gSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6UXRPd25lcnNoaXApCkBA
IC02NzUsNiArNjczLDcgQEAgdm9pZCBRV2ViRnJhbWU6OmFkZFRvSmF2YVNjcmlwdFdpbmRvd09i
agogICAgIH0KIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVj
KCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTQzo6SlNPYmpl
Y3QqIHJ1bnRpbWVPYmplY3QgPQogICAgICAgICAgICAgSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5j
ZTo6Z2V0UXRJbnN0YW5jZShvYmplY3QsIHJvb3QsIHZhbHVlT3duZXJzaGlwKS0+Y3JlYXRlUnVu
dGltZU9iamVjdChleGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCShyZXZpc2lvbiAx
MjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4NiwxMyArMTA4NiwxMiBAQCB2b2lk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjppbmplY3RJbnRlCiB7CiAgICAgV2ViQ29yZTo6RnJh
bWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOwogI2lmIFVTRShK
U0MpCi0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0K
ICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhjb3JlRnJhbWUsIG1haW5U
aHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBRX0FTU0VSVCh3aW5kb3cpOwogCiAgICAgSlNDOjpF
eGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKICAgICBRX0FTU0VSVChleGVj
KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNDb250ZXh0UmVm
IGNvbnRleHQgPSB0b1JlZihleGVjKTsKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdElu
dGVybmFsc09iamVjdChjb250ZXh0KTsKQEAgLTExMTMsMTMgKzExMTIsMTIgQEAgdm9pZCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVzZXRJbnRlcgogewogICAgIFdlYkNvcmU6OkZyYW1lKiBj
b3JlRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKGZyYW1lKTsKICNpZiBVU0UoSlNDKQot
ICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAg
SlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coY29yZUZyYW1lLCBtYWluVGhyZWFk
Tm9ybWFsV29ybGQoKSk7CiAgICAgUV9BU1NFUlQod2luZG93KTsKIAogICAgIEpTQzo6RXhlY1N0
YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CiAgICAgUV9BU1NFUlQoZXhlYyk7Cisg
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTQ29udGV4dFJlZiBjb250
ZXh0ID0gdG9SZWYoZXhlYyk7CiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpyZXNldEludGVybmFs
c09iamVjdChjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDI5IEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVz
IHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAg
ICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlz
IGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4K
KworICAgICAgICAqIFdlYkNvcmVTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmVTdGF0
aXN0aWNzOjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0
aWNzOjpqYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0
aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNv
cmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50KToKKyAg
ICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNv
dW50cyk6CisgICAgICAgICogV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViRnJhbWU6OnN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHRJblNjcmlwdFdvcmxkKToKKyAgICAgICAgKiBXZWJKYXZh
U2NyaXB0Q29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkphdmFTY3JpcHRDb2xsZWN0b3I6Om9i
amVjdENvdW50KToKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OnN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYlZpZXc6
OnJlcG9ydEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJWaWV3OjplbGVtZW50RnJvbUpTKToKKwog
MjAxMi0wNi0yMCAgR2FycmV0IEtlbGx5ICA8Z2RrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBN
b3ZpbmcgY29va2llRW5hYmxlZC9zZXRDb29raWVFbmFibGVkIGZyb20gUGFnZSB0byBTZXR0aW5n
cy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdl
YkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsK
IAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291bnQg
PSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291
bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEwOSw3ICsxMDksNyBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAg
cmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRh
KCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEy
MCw3ICsxMjAsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAg
ICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsK
ICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEzMSw3ICsxMzEsNyBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhl
YXAucHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAg
LTEzOSw3ICsxMzksNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0
CiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0
UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyggCiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJUHJv
cGVydHlCYWcyKiogdHlwZU5hbWVzQW5kQ291bnRzKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBqc09iamVjdFR5
cGVOYW1lcyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVk
T2JqZWN0VHlwZUNvdW50cygpKTsKICAgICB0eXBlZGVmIFR5cGVDb3VudFNldDo6Y29uc3RfaXRl
cmF0b3IgSXRlcmF0b3I7CiAgICAgSXRlcmF0b3IgZW5kID0ganNPYmplY3RUeXBlTmFtZXMtPmVu
ZCgpOwpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291
cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2
LDYgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIEpTQzo6SlNHbG9iYWxPYmplY3Q7CiB1
c2luZyBKU0M6OkpTTG9jazsKIHVzaW5nIEpTQzo6SlNWYWx1ZTsKLXVzaW5nIEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5OwogCiAjZGVmaW5lIEZMQVNIX1JFRFJBVyAwCiAKQEAgLTI1MjgsOCAr
MjUyNyw4IEBAIEhSRVNVTFQgV2ViRnJhbWU6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmEKICAgICBp
ZiAoIXJlc3VsdCB8fCAhcmVzdWx0LmlzQm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAm
JiAhcmVzdWx0LmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBTX09LOwogCi0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9
IGFueVdvcmxkR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVySG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgU3RyaW5nIHJlc3VsdFN0cmluZyA9IHVzdHJpbmdUb1N0cmlu
ZyhyZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICAqZXZhbHVhdGlvblJl
c3VsdCA9IEJTdHJpbmcocmVzdWx0U3RyaW5nKS5yZWxlYXNlKCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvd2luL1dlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvd2luL1dlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2Vi
SmF2YVNjcmlwdEMKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKICAgICB9CiAKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgKmNvdW50ID0gKFVJTlQpSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCk7CiAgICAg
cmV0dXJuIFNfT0s7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMTIwOTI2
KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
OTQsOCArMzE5NCw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6c3RyaW4K
ICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvblJlc3VsdCkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsK
ICAgICBlbHNlIGlmIChzY3JpcHRFeGVjdXRpb25SZXN1bHQuaXNTdHJpbmcoKSkgewotICAgICAg
ICBKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgICAgIEpTQzo6
RXhlY1N0YXRlKiBleGVjID0gY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5U
aHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgKnJlc3VsdCA9IEJTdHJpbmcodXN0cmluZ1RvU3RyaW5nKHNj
cmlwdEV4ZWN1dGlvblJlc3VsdC5nZXRTdHJpbmcoZXhlYykpKTsKICAgICB9CiAKQEAgLTU4NTEs
OCArNTg1MSw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6cmVwb3IKICAg
ICBpZiAoIWNvbnRleHQgfHwgIWV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAot
ICAgIEpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4
ZWNTdGF0ZSogZXhlY1N0YXRlID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjU3RhdGUpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IGhhcyBhIERPTVdp
bmRvdyBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgdGhpcyBjb250ZXh0IGRpZG4ndCBvcmlnaW5h
dGUgZnJvbSBhIFdlYlZpZXcuCiAgICAgaWYgKCF0b0pTRE9NV2luZG93KGV4ZWNTdGF0ZS0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKSkKQEAgLTU4NzgsOCArNTg3OCw5IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgV2ViVmlldzo6ZWxlbWUKICAgICBpZiAoIW5vZGVPYmplY3QpCiAgICAgICAg
IHJldHVybiBFX0ZBSUw7CiAKLSAgICBKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25z
T25seSk7Ci0gICAgRWxlbWVudCogZWx0ID0gdG9FbGVtZW50KHRvSlModG9KUyhjb250ZXh0KSwg
bm9kZU9iamVjdCkpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgRWxlbWVudCogZWx0ID0gdG9FbGVtZW50KHRv
SlMoZXhlYywgbm9kZU9iamVjdCkpOwogICAgIGlmICghZWx0KQogICAgICAgICByZXR1cm4gRV9G
QUlMOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148944</attachid>
            <date>2012-06-21 19:33:30 -0700</date>
            <delta_ts>2012-06-21 20:23:15 -0700</delta_ts>
            <desc>Trying windows again</desc>
            <filename>bug-89123-20120621193330.patch</filename>
            <type>text/plain</type>
            <size>206712</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBA
QAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9BUElTaGltcy5oOgorICAg
ICAgICAoQVBJRW50cnlTaGltV2l0aG91dExvY2spOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNo
aW1XaXRob3V0TG9jazo6QVBJRW50cnlTaGltV2l0aG91dExvY2spOiBBZGRlZCBhbiBleHRyYSBw
YXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIHRvIAorICAgICAgICBkZXRlcm1pbmUgd2hldGhl
ciB3ZSBzaG91bGQgcmVmIHRoZSBKU0dsb2JhbERhdGEgb3Igbm90LiBXZSB3YW50IHRvIHJlZiBh
bGwgdGhlIHRpbWUgZXhjZXB0IGZvciBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBjbGFzcyBi
ZWNhdXNlIHRpbWVyRGlkRmlyZSBjb3VsZCBydW4gYWZ0ZXIgc29tZWJvZHkgaGFzIHN0YXJ0ZWQg
dG8gdGVhciBkb3duIHRoYXQgcGFydGljdWxhciAKKyAgICAgICAgSlNHbG9iYWxEYXRhLCBzbyB3
ZSB3b3VsZG4ndCB3YW50IHRvIHJlc3VycmVjdCB0aGUgcmVmIGNvdW50IG9mIHRoYXQgSlNHbG9i
YWxEYXRhIGZyb20gMCBiYWNrIHRvIDEgYWZ0ZXIgCisgICAgICAgIGl0cyBkZXN0cnVjdGlvbiBo
YXMgYmVndW4uIAorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW1XaXRob3V0TG9jazo6fkFQSUVu
dHJ5U2hpbVdpdGhvdXRMb2NrKTogTm93IGRlcmVmcyBpZiBpdCBhbHNvIHJlZmVkLgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OkFQSUVudHJ5U2hpbSk6CisgICAgICAgIChBUElFbnRyeVNo
aW0pOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW06On5BUElFbnRyeVNoaW0pOgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OmluaXQpOiBGYWN0b3JlZCBvdXQgY29tbW9uIGluaXRpYWxp
emF0aW9uIGNvZGUgZm9yIHRoZSB2YXJpb3VzIEFQSUVudHJ5U2hpbSBjb25zdHJ1Y3RvcnMuCisg
ICAgICAgIEFsc28gbW92ZWQgdGhlIHRpbWVvdXRDaGVja2VyIHN0b3AgYW5kIHN0YXJ0IGhlcmUg
YmVjYXVzZSB3ZSBuZWVkIHRvIHN0YXJ0IGFmdGVyIHdlJ3ZlIGdyYWJiZWQgdGhlIEFQSSBsb2Nr
CisgICAgICAgIGFuZCBiZWZvcmUgd2UndmUgcmVsZWFzZWQgaXQsIHdoaWNoIGNhbiBvbmx5IGRv
bmUgaW4gQVBJRW50cnlTaGltLgorICAgICAgICAoSlNDOjpBUElDYWxsYmFja1NoaW06On5BUElD
YWxsYmFja1NoaW0pOiBXZSBubyBsb25nZXIgbmVlZCB0byBzeW5jaHJvbml6ZSBoZXJlLgorICAg
ICAgICAqIEFQSS9KU0NvbnRleHRSZWYuY3BwOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0Q3Jl
YXRlKToKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXApOgorICAgICAgICAo
SlNHbG9iYWxDb250ZXh0UmVsZWFzZSk6CisgICAgICAgIChKU0NvbnRleHRDcmVhdGVCYWNrdHJh
Y2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRTcGFjZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6cHJvdGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucHJv
dGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFw
OjpzZXRBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWN0aXZpdHlDYWxs
YmFjayk6CisgICAgICAgIChKU0M6OkhlYXA6OnN3ZWVwZXIpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOiBDaGFuZ2VkIG1fYWN0aXZpdHlDYWxsYmFjayBhbmQgbV9zd2VlcGVyIHRvIGJlIHJhdyBw
b2ludGVycyByYXRoZXIgdGhhbiBPd25QdHJzIGJlY2F1c2UgdGhleSAKKyAgICAgICAgYXJlIG5v
dyByZXNwb25zaWJsZSBmb3IgdGhlaXIgb3duIGxpZmV0aW1lLiBBbHNvIGNoYW5nZWQgdGhlIG9y
ZGVyIG9mIGRlY2xhcmF0aW9uIG9mIHRoZSBHQ0FjdGl2aXR5Q2FsbGJhY2sKKyAgICAgICAgYW5k
IHRoZSBJbmNyZW1lbnRhbFN3ZWVwZXIgdG8gbWFrZSBzdXJlIHRoZXkncmUgdGhlIGxhc3QgdGhp
bmdzIHRoYXQgZ2V0IGluaXRpYWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gdG8gCisgICAgICAg
IHByZXZlbnQgYW55IGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBKU0ds
b2JhbERhdGEvSGVhcCB0aGV5IG1pZ2h0IGNhcmUgYWJvdXQuCisgICAgICAgIChIZWFwKToKKyAg
ICAgICAgKiBoZWFwL0hlYXBUaW1lci5jcHA6IFJlZmFjdG9yZWQgdG8gYWxsb3cgZm9yIHRocmVh
ZC1zYWZlIG9wZXJhdGlvbiBhbmQgc2h1dGRvd24uCisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6
fkhlYXBUaW1lcik6CisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6aW52YWxpZGF0ZSk6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OmRpZFN0YXJ0Vk1TaHV0ZG93bik6
IENhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIH5KU0dsb2JhbERhdGEuIElmIHdlJ3JlIG9uIHRo
ZSBzYW1lIHRocmVhZCAKKyAgICAgICAgdGhhdCB0aGUgSGVhcFRpbWVyIGlzIHJ1bm5pbmcgb24s
IHdlIGtpbGwgdGhlIEhlYXBUaW1lciBvdXJzZWx2ZXMuIElmIG5vdCwgdGhlbiB3ZSBzZXQgc29t
ZSBzdGF0ZSBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBhbmQgc2NoZWR1bGUgaXQgdG8gZmly
ZSBpbW1lZGlhdGVseSBzbyB0aGF0IGl0IGNhbiBub3RpY2UgYW5kIGtpbGwgaXRzZWxmLgorICAg
ICAgICAoSlNDOjpIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSk6IFdlIGdyYWIgb3VyIG11dGV4IGFu
ZCBjaGVjayBvdXIgSlNHbG9iYWxEYXRhIHBvaW50ZXIuIElmIGl0IGhhcyBiZWVuIHplcm8tZWQK
KyAgICAgICAgb3V0LCB0aGVuIHdlIGtub3cgdGhlIFZNIGhhcyBzdGFydGVkIHRvIHNodXRkb3du
IGFuZCB3ZSBzaG91bGQga2lsbCBvdXJzZWx2ZXMuIE90aGVyd2lzZSwgZ3JhYiB0aGUgQVBJRW50
cnlTaGltLAorICAgICAgICBidXQgd2l0aG91dCByZWYtaW5nIHRoZSBKU0dsb2JhbERhdGEgKHdl
IGRvbid0IHdhbnQgdG8gYnJpbmcgdGhlIEpTR2xvYmFsRGF0YSdzIHJlZi1jb3VudCBmcm9tIDAg
dG8gMSkgaW4gY2FzZSAKKyAgICAgICAgd2Ugd2VyZSBpbnRlcnJ1cHRlZCBiZXR3ZWVuIHJlbGVh
c2luZyBvdXIgbXV0ZXggYW5kIHRyeWluZyB0byBncmFiIHRoZSBBUElMb2NrLgorICAgICAgICAq
IGhlYXAvSGVhcFRpbWVyLmg6IAorICAgICAgICAoSGVhcFRpbWVyKToKKyAgICAgICAgKiBoZWFw
L0luY3JlbWVudGFsU3dlZXBlci5jcHA6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBl
cjo6ZG9Xb3JrKTogV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIEFQSSBzaGltIGhlcmUgc2luY2UgSGVh
cFRpbWVyOjp0aW1lckRpZEZpcmUgaGFuZGxlcyAKKyAgICAgICAgYWxsIG9mIHRoYXQgZm9yIHVz
LiAKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUpOgorICAgICAgICAq
IGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAgIChJbmNyZW1lbnRhbFN3ZWVwZXIp
OgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKiBoZWFwL1dlYWtCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OldlYWtCbG9jazo6cmVhcCk6CisgICAgICAgICoganNjLmNw
cDoKKyAgICAgICAgKGZ1bmN0aW9uR0MpOgorICAgICAgICAoZnVuY3Rpb25SZWxlYXNlRXhlY3V0
YWJsZU1lbW9yeSk6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBs
ZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpjaGVja1N5bnRheCk6CisgICAgICAgIChKU0M6OmV2
YWx1YXRlKToKKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oOgorICAgICAg
ICAoRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayk6CisgICAgICAgIChKU0M6OkRlZmF1bHRHQ0Fj
dGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6IFNpZ25hbHMgdG8gdGhlIHR3byBI
ZWFwVGltZXJzIChHQ0FjdGl2aXR5Q2FsbGJhY2sgYW5kIEluY3JlbWVudGFsU3dlZXBlcikKKyAg
ICAgICAgdGhhdCB0aGUgVk0gaGFzIHN0YXJ0ZWQgc2h1dHRpbmcgZG93bi4gSXQgdGhlbiB3YWl0
cyB1bnRpbCB0aGUgSGVhcFRpbWVyIGlzIGRvbmUgd2l0aCB3aGF0ZXZlciBhY3Rpdml0eSAKKyAg
ICAgICAgaXQgbmVlZHMgdG8gZG8gYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCBhbnkgZnVydGhlciBk
ZXN0cnVjdGlvbi4gQWxzbyBhc3NlcnRzIHRoYXQgd2UgZG8gbm90IGN1cnJlbnRseSBob2xkIHRo
ZSAKKyAgICAgICAgQVBJTG9jayBiZWNhdXNlIHRoaXMgY291bGQgcG90ZW50aWFsbHkgY2F1c2Ug
ZGVhZGxvY2sgd2hlbiB3ZSB0cnkgdG8gc2lnbmFsIHRvIHRoZSBIZWFwVGltZXJzIHVzaW5nIHRo
ZWlyIG11dGV4ZXMuCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2Up
OiBQcm90ZWN0IHRoZSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNoYXJlZCBpbnN0YW5jZSB3aXRo
IHRoZSBHbG9iYWxKU0xvY2suCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5z
dGFuY2VJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDogQ2hhbmdl
IHRvIGJlIFRocmVhZFNhZmVSZWZDb3VudGVkIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3Jy
eSBhYm91dCByZWZpbmcgYW5kIAorICAgICAgICBkZS1yZWZpbmcgSlNHbG9iYWxEYXRhcyBvbiBz
ZXBhcmF0ZSB0aHJlYWRzIHNpbmNlIHdlIGRvbid0IGRvIGl0IHRoYXQgb2Z0ZW4gYW55d2F5cy4K
KyAgICAgICAgKEpTR2xvYmFsRGF0YSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6YXBp
TG9jayk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogcnVudGltZS9KU0xvY2suY3BwOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEpTQzo6R2xvYmFsSlNMb2NrOjpHbG9iYWxKU0xvY2spOiBGb3Ig
YWNjZXNzaW5nIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisgICAgICAgIChKU0M6Okdsb2JhbEpTTG9j
azo6fkdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6SlNMb2NrSG9s
ZGVyKTogTXV0ZXhMb2NrZXIgZm9yIEpTTG9jay4gQWxzbyByZWZzIHRoZSBKU0dsb2JhbERhdGEg
dG8ga2VlcCBpdCBhbGl2ZSBzbyB0aGF0IAorICAgICAgICBpdCBjYW4gc3VjY2Vzc2Z1bGx5IHVu
bG9jayBpdCBsYXRlciB3aXRob3V0IGl0IGRpc2FwcGVhcmluZyBmcm9tIHVuZGVybmVhdGggaXQu
CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6fkpTTG9ja0hvbGRlcik6CisgICAgICAgIChK
U0M6OkpTTG9jazo6SlNMb2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp+SlNMb2NrKToKKyAg
ICAgICAgKEpTQzo6SlNMb2NrOjpsb2NrKTogVXNlcyB0aGUgc3BpbiBsb2NrIGZvciBndWFyZGlu
ZyB0aGUgbG9jayBjb3VudCBhbmQgb3duZXIgdGhyZWFkIGZpZWxkcy4gVXNlcyB0aGUgbXV0ZXgg
Zm9yIAorICAgICAgICBhY3R1YWxseSB3YWl0aW5nIGZvciBsb25nIHBlcmlvZHMuIAorICAgICAg
ICAoSlNDOjpKU0xvY2s6OnVubG9jayk6CisgICAgICAgIChKU0M6OkpTTG9jazo6Y3VycmVudFRo
cmVhZElzSG9sZGluZ0xvY2spOiAKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpkcm9wQWxsTG9ja3Mp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseSk6Cisg
ICAgICAgIChKU0M6OkpTTG9jazo6Z3JhYkFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2Nrcyk6CisgICAgICAgIChKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKToKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0xvY2tI
b2xkZXIpOgorICAgICAgICAoSlNMb2NrKToKKyAgICAgICAgKERyb3BBbGxMb2Nrcyk6CisgICAg
ICAgICogcnVudGltZS9XZWFrR0NNYXAuaDoKKyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpzZXQp
OgorICAgICAgICAqIHRlc3RSZWdFeHAuY3BwOgorICAgICAgICAocmVhbE1haW4pOgorCiAyMDEy
LTA2LTIwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVk
dWNlZCAoYnV0IGRpZCBub3QgZWxpbWluYXRlKSB1c2Ugb2YgImJlcnplcmtlciBHQyIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0MKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IGV4ZWMtPmhlYXAoKS0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMzA3LDcgKzMwNyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQygKICNpZm5kZWYgTkRFQlVHCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLnJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KQEAgLTY2Nyw5ICs2NjcsOSBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50
cyhpbnQgYXJnYywgY2hhCiAKIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCisgICAgCiAgICAgUmVm
UHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKFRocmVh
ZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2Jh
bERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBwYXJzZUFyZ3Vt
ZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0UmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJl
Z0V4cC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
UmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDkgKzQ5NSw4IEBAIHN0YXRpYyB2b2lk
IHBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGEKIAogaW50IHJlYWxNYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwot
CiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3Jl
YXRlKFRocmVhZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGdsb2JhbERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBw
YXJzZUFyZ3VtZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJU2hpbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0FQSVNoaW1zLmgJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvQVBJU2hpbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMzEgKzI4LDQwIEBACiAK
ICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIK
KyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNp
bmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
QVBJRW50cnlTaGltV2l0aG91dExvY2sgeworcHVibGljOgorICAgIGVudW0gUmVmR2xvYmFsRGF0
YVRhZyB7IERvbnRSZWZHbG9iYWxEYXRhID0gMCwgUmVmR2xvYmFsRGF0YSB9OworCiBwcm90ZWN0
ZWQ6Ci0gICAgQVBJRW50cnlTaGltV2l0aG91dExvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBib29sIHJlZ2lzdGVyVGhyZWFkKQotICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRh
KQorICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
Ym9vbCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0YVRhZyBzaG91bGRSZWZHbG9iYWxEYXRh
KQorICAgICAgICA6IG1fc2hvdWxkUmVmR2xvYmFsRGF0YShzaG91bGRSZWZHbG9iYWxEYXRhKQor
ICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICAgICAsIG1fZW50cnlJZGVu
dGlmaWVyVGFibGUod3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZ2xv
YmFsRGF0YS0+aWRlbnRpZmllclRhYmxlKSkKICAgICB7CisgICAgICAgIGlmIChzaG91bGRSZWZH
bG9iYWxEYXRhKQorICAgICAgICAgICAgbV9nbG9iYWxEYXRhLT5yZWYoKTsKICAgICAgICAgVU5V
U0VEX1BBUkFNKHJlZ2lzdGVyVGhyZWFkKTsKICAgICAgICAgaWYgKHJlZ2lzdGVyVGhyZWFkKQog
ICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRU
aHJlYWQoKTsKICAgICAgICAgbV9nbG9iYWxEYXRhLT5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+
c3luY2hyb25pemUoKTsKLSAgICAgICAgbV9nbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5zdGFy
dCgpOworICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuc3dlZXBlcigpLT5zeW5jaHJvbml6ZSgp
OwogICAgIH0KIAogICAgIH5BUElFbnRyeVNoaW1XaXRob3V0TG9jaygpCiAgICAgewotICAgICAg
ICBtX2dsb2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKICAgICAgICAgd3RmVGhyZWFk
RGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUobV9lbnRyeUlkZW50aWZpZXJUYWJsZSk7
CisgICAgICAgIGlmIChtX3Nob3VsZFJlZkdsb2JhbERhdGEpCisgICAgICAgICAgICBtX2dsb2Jh
bERhdGEtPmRlcmVmKCk7CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgorICAgIFJlZkds
b2JhbERhdGFUYWcgbV9zaG91bGRSZWZHbG9iYWxEYXRhOwogICAgIEpTR2xvYmFsRGF0YSogbV9n
bG9iYWxEYXRhOwogICAgIElkZW50aWZpZXJUYWJsZSogbV9lbnRyeUlkZW50aWZpZXJUYWJsZTsK
IH07CkBAIC02MSwyMCArNzAsMzggQEAgY2xhc3MgQVBJRW50cnlTaGltIDogcHVibGljIEFQSUVu
dHJ5U2hpbQogcHVibGljOgogICAgIC8vIE5vcm1hbCBBUEkgZW50cnkKICAgICBBUElFbnRyeVNo
aW0oRXhlY1N0YXRlKiBleGVjLCBib29sIHJlZ2lzdGVyVGhyZWFkID0gdHJ1ZSkKLSAgICAgICAg
OiBBUElFbnRyeVNoaW1XaXRob3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRo
cmVhZCkKLSAgICAgICAgLCBtX2xvY2soZXhlYykKKyAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRo
b3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0
YSkKKyAgICB7CisgICAgICAgIGluaXQoKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG5lY2Vzc2FyeSBmb3IgSGVhcFRpbWVyIHRvIHByZXZlbnQgaXQgZnJvbSBhY2NpZGVu
dGFsbHkgcmVzdXJyZWN0aW5nIAorICAgIC8vIHRoZSByZWYgY291bnQgb2YgYSAiZGVhZCIgSlNH
bG9iYWxEYXRhLgorICAgIEFQSUVudHJ5U2hpbShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFJl
Zkdsb2JhbERhdGFUYWcgcmVmR2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUp
CisgICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0YSwgcmVnaXN0ZXJU
aHJlYWQsIHJlZkdsb2JhbERhdGEpCiAgICAgeworICAgICAgICBpbml0KCk7CiAgICAgfQogCiAg
ICAgLy8gSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvciBvbmx5IGhhcyBhIGdsb2JhbERhdGEuCiAg
ICAgQVBJRW50cnlTaGltKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRo
cmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0
YSwgcmVnaXN0ZXJUaHJlYWQpCi0gICAgICAgICwgbV9sb2NrKGdsb2JhbERhdGEtPmlzU2hhcmVk
SW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5KQorICAgICAg
ICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKGdsb2JhbERhdGEsIHJlZ2lzdGVyVGhyZWFkLCBS
ZWZHbG9iYWxEYXRhKQogICAgIHsKKyAgICAgICAgaW5pdCgpOworICAgIH0KKworICAgIH5BUElF
bnRyeVNoaW0oKQorICAgIHsKKyAgICAgICAgbV9nbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5z
dG9wKCk7CisgICAgICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLnVubG9jaygpOwogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBKU0xvY2sgbV9sb2NrOworICAgIHZvaWQgaW5pdCgpCisgICAgewor
ICAgICAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5sb2NrKCk7CisgICAgICAgIG1fZ2xvYmFs
RGF0YS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsKKyAgICB9CiB9OwogCiBjbGFzcyBBUElDYWxs
YmFja1NoaW0gewpAQCAtODgsNyArMTE1LDYgQEAgcHVibGljOgogCiAgICAgfkFQSUNhbGxiYWNr
U2hpbSgpCiAgICAgewotICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuYWN0aXZpdHlDYWxsYmFj
aygpLT5zeW5jaHJvbml6ZSgpOwogICAgICAgICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElk
ZW50aWZpZXJUYWJsZShtX2dsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZSk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDYgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xv
YmFsQ29udGV4dENyZWF0ZQogICAgIC8vIElmIHRoZSBhcHBsaWNhdGlvbiB3YXMgbGlua2VkIGJl
Zm9yZSBKU0dsb2JhbENvbnRleHRDcmVhdGUgd2FzIGNoYW5nZWQgdG8gdXNlIGEgdW5pcXVlIEpT
R2xvYmFsRGF0YSwKICAgICAvLyB3ZSB1c2UgYSBzaGFyZWQgb25lIGZvciBiYWNrd2FyZHMgY29t
cGF0aWJpbGl0eS4KICAgICBpZiAoTlNWZXJzaW9uT2ZMaW5rVGltZUxpYnJhcnkoIkphdmFTY3Jp
cHRDb3JlIikgPD0gd2Via2l0Rmlyc3RWZXJzaW9uV2l0aENvbmN1cnJlbnRHbG9iYWxDb250ZXh0
cykgewotICAgICAgICBKU0xvY2sgbG9jayhMb2NrRm9yUmVhbCk7CiAgICAgICAgIHJldHVybiBK
U0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKHRvUmVmKCZKU0dsb2JhbERhdGE6OnNoYXJlZElu
c3RhbmNlKCkpLCBnbG9iYWxPYmplY3RDbGFzcyk7CiAgICAgfQogI2VuZGlmIC8vIE9TKERBUldJ
TikKQEAgLTkwLDExICs4OSw5IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRD
cmVhdGUKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKLSAgICBKU0xvY2sgbG9jayhM
b2NrRm9yUmVhbCk7CiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IGdyb3Vw
ID8gUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+KHRvSlMoZ3JvdXApKSA6IEpTR2xvYmFsRGF0YTo6
Y3JlYXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlwZVNtYWxsKTsKIAogICAgIEFQSUVudHJ5
U2hpbSBlbnRyeVNoaW0oZ2xvYmFsRGF0YS5nZXQoKSwgZmFsc2UpOwotCiAgICAgZ2xvYmFsRGF0
YS0+bWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsKIAogICAgIGlmICghZ2xvYmFsT2Jq
ZWN0Q2xhc3MpIHsKQEAgLTEyNCwxOCArMTIxLDE5IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0ds
b2JhbENvbnRleHRSZXRhaW4KIAogdm9pZCBKU0dsb2JhbENvbnRleHRSZWxlYXNlKEpTR2xvYmFs
Q29udGV4dFJlZiBjdHgpCiB7CisgICAgSWRlbnRpZmllclRhYmxlKiBzYXZlZElkZW50aWZpZXJU
YWJsZTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrIGxvY2so
ZXhlYyk7CisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAotICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBJZGVudGlm
aWVyVGFibGUqIHNhdmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJl
bnRJZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUpOworICAgICAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIHNh
dmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVy
VGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUpOwogCi0gICAgYm9vbCBwcm90ZWN0Q291
bnRJc1plcm8gPSBIZWFwOjpoZWFwKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPnVucHJv
dGVjdChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwotICAgIGlmIChwcm90ZWN0Q291bnRJ
c1plcm8pIHsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+c3lu
Y2hyb25pemUoKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVj
dEdyYXBoKCk7CisgICAgICAgIGJvb2wgcHJvdGVjdENvdW50SXNaZXJvID0gSGVhcDo6aGVhcChl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT51bnByb3RlY3QoZXhlYy0+ZHluYW1pY0dsb2Jh
bE9iamVjdCgpKTsKKyAgICAgICAgaWYgKHByb3RlY3RDb3VudElzWmVybykKKyAgICAgICAgICAg
IGdsb2JhbERhdGEuaGVhcC5yZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOworICAgICAgICBn
bG9iYWxEYXRhLmRlcmVmKCk7CiAgICAgfQotICAgIGdsb2JhbERhdGEuZGVyZWYoKTsKIAogICAg
IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKHNhdmVkSWRlbnRpZmll
clRhYmxlKTsKIH0KQEAgLTE2Niw3ICsxNjQsNyBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNDb250
ZXh0R2V0R2xvYmFsQ29uCiBKU1N0cmluZ1JlZiBKU0NvbnRleHRDcmVhdGVCYWNrdHJhY2UoSlND
b250ZXh0UmVmIGN0eCwgdW5zaWduZWQgbWF4U3RhY2tTaXplKQogewogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2sgbG9jayhleGVjKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKIAogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICBVU3RyaW5nQnVp
bGRlciBidWlsZGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC02LDEwICs2LDggQEAgRVhQT1JUUwogICAgID8/MENv
bGxhdG9yQFdURkBAUUFFQFBCREBaCiAgICAgPz8wRGF0ZUluc3RhbmNlQEpTQ0BASUFFQFBBVkV4
ZWNTdGF0ZUAxQFBBVlN0cnVjdHVyZUAxQEBaCiAgICAgPz8wRGVmYXVsdEdDQWN0aXZpdHlDYWxs
YmFja0BKU0NAQFFBRUBQQVZIZWFwQDFAQFoKLSAgICA/PzBEcm9wQWxsTG9ja3NASlNMb2NrQEpT
Q0BAUUFFQFc0SlNMb2NrQmVoYXZpb3JAMkBAWgogICAgID8/MER5bmFtaWNHbG9iYWxPYmplY3RT
Y29wZUBKU0NAQFFBRUBBQVZKU0dsb2JhbERhdGFAMUBQQVZKU0dsb2JhbE9iamVjdEAxQEBaIAog
ICAgID8/MEludGVybmFsRnVuY3Rpb25ASlNDQEBJQUVAUEFWSlNHbG9iYWxPYmplY3RAMUBQQVZT
dHJ1Y3R1cmVAMUBAWgotICAgID8/MEpTTG9ja0BKU0NAQFFBRUBQQVZFeGVjU3RhdGVAMUBAWgog
ICAgID8/ME1ENUBXVEZAQFFBRUBYWgogICAgID8/ME11dGV4QFdURkBAUUFFQFhaCiAgICAgPz8w
UGFyYWxsZWxFbnZpcm9ubWVudEBXVEZAQFFBRUBQNkFYUEFYQFpJSEBaCkBAIC0xMjMsNyArMTIx
LDYgQEAgRVhQT1JUUwogICAgID9jcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlckBXVEZAQFlB
SVhaCiAgICAgP2NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzQFdURkBAWUFYUEFYSUBaCiAg
ICAgP2N1cnJlbnRUaHJlYWRAV1RGQEBZQUlYWgotICAgID9jdXJyZW50VGhyZWFkSXNIb2xkaW5n
TG9ja0BKU0xvY2tASlNDQEBTQV9OWFoKICAgICA/Y3VycmVudFRpbWVAV1RGQEBZQU5YWgogICAg
ID9kYXRhQENTdHJpbmdAV1RGQEBRQkVQQkRYWgogICAgID9kYXRhTG9nQFdURkBAWUFYUEJEWloK
QEAgLTIzNSwxMCArMjMyLDggQEAgRVhQT1JUUwogICAgID9qc093bmVkU3RyaW5nQEpTQ0BAWUFQ
QVZKU1N0cmluZ0AxQFBBVkpTR2xvYmFsRGF0YUAxQEFCVlVTdHJpbmdAMUBAWgogICAgID9qc1N0
cmluZ0BKU0NAQFlBUEFWSlNTdHJpbmdAMUBQQVZKU0dsb2JhbERhdGFAMUBBQlZVU3RyaW5nQDFA
QFoKICAgICA/bGVuZ3RoQENTdHJpbmdAV1RGQEBRQkVJWFoKLSAgICA/bG9ja0BKU0xvY2tASlND
QEBTQVhXNEpTTG9ja0JlaGF2aW9yQDJAQFoKICAgICA/bG9ja0BNdXRleEBXVEZAQFFBRVhYWgog
ICAgID9sb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXhAV1RGQEBZQVhYWgotICAg
ID9sb2NrQ291bnRASlNMb2NrQEpTQ0BAU0FIWFoKICAgICA/bWF0Y2hAUmVnRXhwQEpTQ0BAUUFF
SEFBVkpTR2xvYmFsRGF0YUAyQEFCVlVTdHJpbmdAMkBJQUFWPyRWZWN0b3JASCQwQ0FAQFdURkBA
QFoKICAgICA/bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcEBTdHJ1Y3R1cmVASlNDQEBBQUVYQUFWSlNH
bG9iYWxEYXRhQDJAQFoKICAgICA/bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lQFdURkBAWUFO
WFoKQEAgLTM1Miw3ICszNDcsNiBAQCBFWFBPUlRTCiAgICAgP3RyeUZpbmlzaENyZWF0aW9uVW5p
bml0aWFsaXplZEBKU0FycmF5QEpTQ0BASUFFUEFWMTJAQUFWSlNHbG9iYWxEYXRhQDJASUBaCiAg
ICAgP3RyeUxvY2tATXV0ZXhAV1RGQEBRQUVfTlhaCiAgICAgP3R5cGVARGVidWdnZXJDYWxsRnJh
bWVASlNDQEBRQkU/QVc0VHlwZUAxMkBYWgotICAgID91bmxvY2tASlNMb2NrQEpTQ0BAU0FYVzRK
U0xvY2tCZWhhdmlvckAyQEBaCiAgICAgP3VubG9ja0BNdXRleEBXVEZAQFFBRVhYWgogICAgID91
bmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleEBXVEZAQFlBWFhaCiAgICAgP3Vu
cHJvdGVjdEBIZWFwQEpTQ0BAUUFFX05WSlNWYWx1ZUAyQEBaCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDYgKzY2LDcgQEAgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeUFsbG9jYXRlUwog
ICAgIGlmIChpc092ZXJzaXplKGJ5dGVzKSkKICAgICAgICAgcmV0dXJuIHRyeUFsbG9jYXRlT3Zl
cnNpemUoYnl0ZXMsIG91dFB0cik7CiAgICAgCisgICAgQVNTRVJUKG1faGVhcC0+Z2xvYmFsRGF0
YSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgbV9oZWFw
LT5kaWRBbGxvY2F0ZShtX2FsbG9jYXRvci5jdXJyZW50Q2FwYWNpdHkoKSk7CiAKICAgICBhbGxv
Y2F0ZUJsb2NrKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2MCwxNSArMTYwLDkgQEAgc3RhdGljIGlubGluZSBzaXplX3QgcHJvcG9y
dGlvbmFsSGVhcFNpegogICAgIHJldHVybiAxLjI1ICogaGVhcFNpemU7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBpc1ZhbGlkU2hhcmVkSW5zdGFuY2VUaHJlYWRTdGF0ZSgpCitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNWYWxpZFNoYXJlZEluc3RhbmNlVGhyZWFkU3RhdGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKQogewotICAgIGlmICghSlNMb2NrOjpsb2NrQ291bnQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2Nr
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBnbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKTsKIH0K
IAogc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRUaHJlYWRTdGF0ZShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCkBAIC0xNzYsNyArMTcwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRU
aHJlYWRTdGF0ZShKUwogICAgIGlmIChnbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFibGUgIT0gd3Rm
VGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKGdsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSAmJiAhaXNWYWxp
ZFNoYXJlZEluc3RhbmNlVGhyZWFkU3RhdGUoKSkKKyAgICBpZiAoZ2xvYmFsRGF0YS0+aXNTaGFy
ZWRJbnN0YW5jZSgpICYmICFpc1ZhbGlkU2hhcmVkSW5zdGFuY2VUaHJlYWRTdGF0ZShnbG9iYWxE
YXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjcs
NyArMzIxLDcgQEAgdm9pZCBIZWFwOjpkaWRBYmFuZG9uKHNpemVfdCBieXRlcykKIHZvaWQgSGVh
cDo6cHJvdGVjdChKU1ZhbHVlIGspCiB7CiAgICAgQVNTRVJUKGspOwotICAgIEFTU0VSVChKU0xv
Y2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgfHwgIW1fZ2xvYmFsRGF0YS0+aXNTaGFy
ZWRJbnN0YW5jZSgpKTsKKyAgICBBU1NFUlQobV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVu
dFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAKICAgICBpZiAoIWsuaXNDZWxsKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTMzOCw3ICszMzIsNyBAQCB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBr
KQogYm9vbCBIZWFwOjp1bnByb3RlY3QoSlNWYWx1ZSBrKQogewogICAgIEFTU0VSVChrKTsKLSAg
ICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHx8ICFtX2dsb2Jh
bERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSk7CisgICAgQVNTRVJUKG1fZ2xvYmFsRGF0YS0+YXBp
TG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogCiAgICAgaWYgKCFrLmlzQ2Vs
bCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02OTIsNiArNjg2LDcgQEAgdm9pZCBIZWFw
Ojpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBs
aW5nUmVnaW9uKCJHYXJiYWdlIENvbGxlY3Rpb24iKTsKICAgICAKICAgICBHQ1BIQVNFKENvbGxl
Y3QpOworICAgIEFTU0VSVChnbG9iYWxEYXRhKCktPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nTG9jaygpKTsKICAgICBBU1NFUlQoZ2xvYmFsRGF0YSgpLT5pZGVudGlmaWVyVGFibGUg
PT0gd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CiAgICAgQVNTRVJU
KG1faXNTYWZlVG9Db2xsZWN0KTsKICAgICBKQVZBU0NSSVBUQ09SRV9HQ19CRUdJTigpOwpAQCAt
Nzc3LDE5ICs3NzIsMTkgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9n
ZwogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX0VORCgpOwogfQogCi12b2lkIEhlYXA6OnNldEFjdGl2
aXR5Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2aXR5Q2FsbGJhY2s+IGFjdGl2aXR5Q2FsbGJh
Y2spCit2b2lkIEhlYXA6OnNldEFjdGl2aXR5Q2FsbGJhY2soR0NBY3Rpdml0eUNhbGxiYWNrKiBh
Y3Rpdml0eUNhbGxiYWNrKQogewogICAgIG1fYWN0aXZpdHlDYWxsYmFjayA9IGFjdGl2aXR5Q2Fs
bGJhY2s7CiB9CiAKIEdDQWN0aXZpdHlDYWxsYmFjayogSGVhcDo6YWN0aXZpdHlDYWxsYmFjaygp
CiB7Ci0gICAgcmV0dXJuIG1fYWN0aXZpdHlDYWxsYmFjay5nZXQoKTsKKyAgICByZXR1cm4gbV9h
Y3Rpdml0eUNhbGxiYWNrOwogfQogCiBJbmNyZW1lbnRhbFN3ZWVwZXIqIEhlYXA6OnN3ZWVwZXIo
KQogewotICAgIHJldHVybiBtX3N3ZWVwZXIuZ2V0KCk7CisgICAgcmV0dXJuIG1fc3dlZXBlcjsK
IH0KIAogdm9pZCBIZWFwOjpzZXRHYXJiYWdlQ29sbGVjdGlvblRpbWVyRW5hYmxlZChib29sIGVu
YWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
OTksMTAgKzk5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNoaW5lVGhyZWFkcyYg
bWFjaGluZVRocmVhZHMoKSB7IHJldHVybiBtX21hY2hpbmVUaHJlYWRzOyB9CiAKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrKiBhY3Rpdml0eUNhbGxiYWNrKCk7
Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0QWN0aXZpdHlDYWxsYmFjayhQYXNz
T3duUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4pOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHNldEFjdGl2aXR5Q2FsbGJhY2soR0NBY3Rpdml0eUNhbGxiYWNrKik7CiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0R2FyYmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoYm9v
bCk7CiAKLSAgICAgICAgSW5jcmVtZW50YWxTd2VlcGVyKiBzd2VlcGVyKCk7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIEluY3JlbWVudGFsU3dlZXBlciogc3dlZXBlcigpOwogCiAgICAgICAg
IC8vIHRydWUgaWYgYW4gYWxsb2NhdGlvbiBvciBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNzCiAg
ICAgICAgIGlubGluZSBib29sIGlzQnVzeSgpOwpAQCAtMjM3LDEwICsyMzcsMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGRvdWJsZSBtX2xhc3RHQ0xlbmd0aDsKICAgICAgICAgZG91Ymxl
IG1fbGFzdENvZGVEaXNjYXJkVGltZTsKIAotICAgICAgICBPd25QdHI8R0NBY3Rpdml0eUNhbGxi
YWNrPiBtX2FjdGl2aXR5Q2FsbGJhY2s7Ci0gICAgICAgIE93blB0cjxJbmNyZW1lbnRhbFN3ZWVw
ZXI+IG1fc3dlZXBlcjsKLSAgICAgICAgCiAgICAgICAgIERvdWJseUxpbmtlZExpc3Q8RXhlY3V0
YWJsZUJhc2U+IG1fY29tcGlsZWRDb2RlOworICAgICAgICAKKyAgICAgICAgR0NBY3Rpdml0eUNh
bGxiYWNrKiBtX2FjdGl2aXR5Q2FsbGJhY2s7CisgICAgICAgIEluY3JlbWVudGFsU3dlZXBlciog
bV9zd2VlcGVyOwogICAgIH07CiAKICAgICBpbmxpbmUgYm9vbCBIZWFwOjpzaG91bGRDb2xsZWN0
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSGVhcFRpbWVyLmgiCiAKKyNpbmNsdWRlICJBUElTaGltcy5oIgorI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCisjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJTY29wZUNoYWluLmgi
CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTIxLDcg
KzI1LDggQEAgSGVhcFRpbWVyOjpIZWFwVGltZXIoSlNHbG9iYWxEYXRhKiBnbG9iYQogCiBIZWFw
VGltZXI6On5IZWFwVGltZXIoKQogewotICAgIGludmFsaWRhdGUoKTsKKyAgICBDRlJ1bkxvb3BS
ZW1vdmVUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1fdGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21t
b25Nb2Rlcyk7CisgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKG1fdGltZXIuZ2V0KCkpOwog
fQogCiB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25pemUoKQpAQCAtMzUsMTQgKzQwLDM3IEBAIHZv
aWQgSGVhcFRpbWVyOjpzeW5jaHJvbml6ZSgpCiAKIHZvaWQgSGVhcFRpbWVyOjppbnZhbGlkYXRl
KCkKIHsKLSAgICBDRlJ1bkxvb3BSZW1vdmVUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1fdGltZXIu
Z2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Ci0gICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlk
YXRlKG1fdGltZXIuZ2V0KCkpOworICAgIG1fZ2xvYmFsRGF0YSA9IDA7CisgICAgQ0ZSdW5Mb29w
VGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJy
ZW50KCkgLSBzX2RlY2FkZSk7Cit9CisKK3ZvaWQgSGVhcFRpbWVyOjpkaWRTdGFydFZNU2h1dGRv
d24oKQoreworICAgIGlmIChDRlJ1bkxvb3BHZXRDdXJyZW50KCkgPT0gbV9ydW5Mb29wLmdldCgp
KSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKCFtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJy
ZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9zaHV0
ZG93bk11dGV4KTsKKyAgICBpbnZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgSGVhcFRpbWVyOjp0aW1l
ckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJSZWYsIHZvaWQqIGluZm8pCiB7CiAgICAgSGVhcFRpbWVy
KiBhZ2VudCA9IHN0YXRpY19jYXN0PEhlYXBUaW1lcio+KGluZm8pOwotICAgIGFnZW50LT5kb1dv
cmsoKTsKKyAgICBhZ2VudC0+bV9zaHV0ZG93bk11dGV4LmxvY2soKTsKKyAgICBpZiAoIWFnZW50
LT5tX2dsb2JhbERhdGEpIHsKKyAgICAgICAgYWdlbnQtPm1fc2h1dGRvd25NdXRleC51bmxvY2so
KTsKKyAgICAgICAgZGVsZXRlIGFnZW50OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHsK
KyAgICAgICAgLy8gV2UgZG9uJ3QgcmVmIGhlcmUgdG8gcHJldmVudCB1cyBmcm9tIHJlc3VycmVj
dGluZyB0aGUgcmVmIGNvdW50IG9mIGEgImRlYWQiIEpTR2xvYmFsRGF0YS4KKyAgICAgICAgQVBJ
RW50cnlTaGltIHNoaW0oYWdlbnQtPm1fZ2xvYmFsRGF0YSwgQVBJRW50cnlTaGltV2l0aG91dExv
Y2s6OkRvbnRSZWZHbG9iYWxEYXRhKTsKKyAgICAgICAgYWdlbnQtPmRvV29yaygpOworICAgIH0K
KyAgICBhZ2VudC0+bV9zaHV0ZG93bk11dGV4LnVubG9jaygpOwogfQogCiAjZWxzZQpAQCAtNTYs
NiArODQsMTEgQEAgSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKIHsKIH0KIAordm9pZCBIZWFwVGlt
ZXI6OmRpZFN0YXJ0Vk1TaHV0ZG93bigpCit7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKIHZvaWQg
SGVhcFRpbWVyOjpzeW5jaHJvbml6ZSgpCiB7CiB9CkBAIC02NCw3ICs5Nyw2IEBAIHZvaWQgSGVh
cFRpbWVyOjppbnZhbGlkYXRlKCkKIHsKIH0KIAotCiAjZW5kaWYKICAgICAKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmgJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
LDYgKzIsNyBAQAogI2RlZmluZSBIZWFwVGltZXJfaAogCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogI2lmIFVTRShDRikKICNpbmNsdWRl
IDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgpAQCAtMjEsNyArMjIsOCBAQCBwdWJs
aWM6CiAjZW5kaWYKICAgICAKICAgICB2aXJ0dWFsIH5IZWFwVGltZXIoKTsKLSAgICAKKworICAg
IHZvaWQgZGlkU3RhcnRWTVNodXRkb3duKCk7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXpl
KCk7CiAgICAgdmlydHVhbCB2b2lkIGRvV29yaygpID0gMDsKICAgICAKQEAgLTM0LDYgKzM2LDgg
QEAgcHJvdGVjdGVkOgogICAgIFJldGFpblB0cjxDRlJ1bkxvb3BUaW1lclJlZj4gbV90aW1lcjsK
ICAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wUmVmPiBtX3J1bkxvb3A7CiAgICAgQ0ZSdW5Mb29wVGlt
ZXJDb250ZXh0IG1fY29udGV4dDsKKworICAgIE11dGV4IG1fc2h1dGRvd25NdXRleDsKICNlbmRp
ZgogICAgIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAsNyArMjAsNiBAQCBzdGF0aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgc3dlZXBUaW1lTXVs
CiAKIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpkb1dvcmsoKQogewotICAgIEFQSUVudHJ5U2hp
bSBzaGltKG1fZ2xvYmFsRGF0YSk7CiAgICAgZG9Td2VlcChXVEY6Om1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpKTsKIH0KICAgICAKQEAgLTMwLDkgKzI5LDkgQEAgSW5jcmVtZW50YWxTd2Vl
cGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIoSAogewogfQogCi1QYXNzT3duUHRyPEluY3JlbWVudGFs
U3dlZXBlcj4gSW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKK0luY3JlbWVu
dGFsU3dlZXBlciogSW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLCBDRlJ1bkxvb3BH
ZXRDdXJyZW50KCkpKTsKKyAgICByZXR1cm4gbmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLCBD
RlJ1bkxvb3BHZXRDdXJyZW50KCkpOwogfQogCiB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6c2No
ZWR1bGVUaW1lcigpCkBAIC04NCw5ICs4Myw5IEBAIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpk
b1dvcmsoKQogewogfQogCi1QYXNzT3duUHRyPEluY3JlbWVudGFsU3dlZXBlcj4gSW5jcmVtZW50
YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKK0luY3JlbWVudGFsU3dlZXBlciogSW5jcmVt
ZW50YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLT5nbG9iYWxEYXRhKCkpKTsKKyAgICByZXR1cm4g
bmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLT5nbG9iYWxEYXRhKCkpOwogfQogCiB2b2lkIElu
Y3JlbWVudGFsU3dlZXBlcjo6c3RhcnRTd2VlcGluZyhjb25zdCBIYXNoU2V0PE1hcmtlZEJsb2Nr
Kj4mKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxT
d2VlcGVyLmgJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0luY3JlbWVudGFsU3dlZXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNCw3ICsxNCw3IEBAIGNs
YXNzIEhlYXA7CiAgICAgCiBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXIgOiBwdWJsaWMgSGVhcFRp
bWVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+
IGNyZWF0ZShIZWFwKik7CisgICAgc3RhdGljIEluY3JlbWVudGFsU3dlZXBlciogY3JlYXRlKEhl
YXAqKTsKICAgICB2b2lkIHN0YXJ0U3dlZXBpbmcoY29uc3QgSGFzaFNldDxNYXJrZWRCbG9jayo+
JiBibG9ja1NuYXBzaG90KTsKICAgICB2aXJ0dWFsIHZvaWQgZG9Xb3JrKCk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgIkdDQWN0aXZp
dHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEu
aCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01
Niw2ICs1Nyw3IEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXQKICAg
ICAKIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSgpCiB7CisgICAgQVNT
RVJUKG1faGVhcC0+Z2xvYmFsRGF0YSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGlu
Z0xvY2soKSk7CiAjaWYgQ09MTEVDVF9PTl9FVkVSWV9BTExPQ0FUSU9OCiAgICAgbV9oZWFwLT5j
b2xsZWN0QWxsR2FyYmFnZSgpOwogICAgIEFTU0VSVChtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9n
cmVzcyA9PSBOb09wZXJhdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9X
ZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtCbG9jay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw4ICsxMjcsMTAgQEAgdm9p
ZCBXZWFrQmxvY2s6OnJlYXAoKQogICAgICAgICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgPiBXZWFr
SW1wbDo6RGVhZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChIZWFwOjpp
c01hcmtlZCh3ZWFrSW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKEhlYXA6
OmlzTWFya2VkKHdlYWtJbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpKSB7CisgICAgICAgICAgICBB
U1NFUlQod2Vha0ltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkxpdmUpOwogICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KIAogICAgICAgICB3ZWFrSW1wbC0+c2V0U3RhdGUoV2Vha0lt
cGw6OkRlYWQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogYm9vbCBjaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSogcmV0dXJuZWRFeGNlcHRpb24pCiB7Ci0g
ICAgSlNMb2NrIGxvY2soZXhlYyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
QVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5pZGVudGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0
YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZSog
cHJvZ3JhbSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsKQEAgLTUz
LDcgKzUzLDcgQEAgYm9vbCBjaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IAogCiBK
U1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW4sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUq
IHJldHVybmVkRXhjZXB0aW9uKQogewotICAgIEpTTG9jayBsb2NrKGV4ZWMpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuaWRlbnRp
ZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwog
ICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIENS
QVNIKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2Fs
bGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0Fj
dGl2aXR5Q2FsbGJhY2suaAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcg
KzY5LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrIDog
cHVibGljIEdDQWN0aXZpdHlDYWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25Q
dHI8RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjaz4gY3JlYXRlKEhlYXAqKTsKKyAgICBzdGF0aWMg
RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayogY3JlYXRlKEhlYXAqKTsKIAogICAgIERlZmF1bHRH
Q0FjdGl2aXR5Q2FsbGJhY2soSGVhcCopOwogCkBAIC05MSw5ICs5MSw5IEBAIHByaXZhdGU6CiAj
ZW5kaWYKIH07CiAKLWlubGluZSBQYXNzT3duUHRyPERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s+
IERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZShIZWFwKiBoZWFwKQoraW5saW5lIERl
ZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2sqIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0
ZShIZWFwKiBoZWFwKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVmYXVsdEdDQWN0aXZp
dHlDYWxsYmFjayhoZWFwKSk7CisgICAgcmV0dXJuIG5ldyBEZWZhdWx0R0NBY3Rpdml0eUNhbGxi
YWNrKGhlYXApOwogfQogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDgg
KzM0LDEwIEBACiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJEZWJ1
Z2dlckFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCisjaW5j
bHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAj
aW5jbHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5oIgorI2luY2x1ZGUgIkluY3JlbWVudGFsU3dl
ZXBlci5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9u
LmgiCiAjaW5jbHVkZSAiSlNBUElWYWx1ZVdyYXBwZXIuaCIKQEAgLTE3OCwxMiArMTgwLDkgQEAg
SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogewogICAgIGludGVycHJl
dGVyID0gbmV3IEludGVycHJldGVyOwogCi0gICAgaWYgKGlzU2hhcmVkSW5zdGFuY2UoKSkKLSAg
ICAgICAgdHVybk9mZlZlcmlmaWVyKCk7Ci0KICAgICAvLyBOZWVkIHRvIGJlIGNhcmVmdWwgdG8g
a2VlcCBldmVyeXRoaW5nIGNvbnNpc3RlbnQgaGVyZQorICAgIEpTTG9ja0hvbGRlciBsb2NrKHRo
aXMpOwogICAgIElkZW50aWZpZXJUYWJsZSogZXhpc3RpbmdFbnRyeUlkZW50aWZpZXJUYWJsZSA9
IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGlkZW50aWZpZXJUYWJs
ZSk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBzdHJ1Y3R1
cmVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1cmU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcykp
OwogICAgIGRlYnVnZ2VyQWN0aXZhdGlvblN0cnVjdHVyZS5zZXQoKnRoaXMsIERlYnVnZ2VyQWN0
aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGFjdGl2
YXRpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKQEAgLTIyMiw2ICsyMjEsOSBAQCBKU0dsb2JhbERhdGE6OkpT
R2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAKIEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgp
CiB7CisgICAgQVNTRVJUKCFtX2FwaUxvY2suY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7
CisgICAgaGVhcC5hY3Rpdml0eUNhbGxiYWNrKCktPmRpZFN0YXJ0Vk1TaHV0ZG93bigpOworICAg
IGhlYXAuc3dlZXBlcigpLT5kaWRTdGFydFZNU2h1dGRvd24oKTsKICAgICBoZWFwLmxhc3RDaGFu
Y2VUb0ZpbmFsaXplKCk7CiAKICAgICBkZWxldGUgaW50ZXJwcmV0ZXI7CkBAIC0zMTEsNiArMzEz
LDcgQEAgYm9vbCBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlRXhpc3RzKAogCiBKU0dsb2Jh
bERhdGEmIEpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2UoKQogeworICAgIEdsb2JhbEpTTG9j
ayBnbG9iYWxMb2NrOwogICAgIEpTR2xvYmFsRGF0YSomIGluc3RhbmNlID0gc2hhcmVkSW5zdGFu
Y2VJbnRlcm5hbCgpOwogICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICAgaW5zdGFuY2UgPSBh
ZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQSVNoYXJlZCwgVGhyZWFkU3RhY2tUeXBlU21hbGws
IFNtYWxsSGVhcCkpLmxlYWtSZWYoKTsKQEAgLTMyMSw3ICszMjQsNiBAQCBKU0dsb2JhbERhdGEm
IEpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuCiAKIEpTR2xvYmFsRGF0YSomIEpTR2xvYmFsRGF0
YTo6c2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpCiB7Ci0gICAgQVNTRVJUKEpTTG9jazo6Y3VycmVu
dFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgc3RhdGljIEpTR2xvYmFsRGF0YSogc2hhcmVk
SW5zdGFuY2U7CiAgICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIklu
dHJpbnNpYy5oIgogI2luY2x1ZGUgIkpJVFN0dWJzLmgiCisjaW5jbHVkZSAiSlNMb2NrLmgiCiAj
aW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIk51
bWVyaWNTdHJpbmdzLmgiCkBAIC00Niw4ICs0Nyw4IEBACiAjaW5jbHVkZSA8d3RmL0J1bXBQb2lu
dGVyQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Np
bXBsZVN0YXRzLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEu
aD4KICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkBAIC0xNTIsNyArMTUzLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgfTsKICNlbmRpZgogCi0gICAgY2xhc3MgSlNHbG9iYWxEYXRhIDogcHVi
bGljIFJlZkNvdW50ZWQ8SlNHbG9iYWxEYXRhPiB7CisgICAgY2xhc3MgSlNHbG9iYWxEYXRhIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTR2xvYmFsRGF0YT4gewogICAgIHB1YmxpYzoK
ICAgICAgICAgLy8gV2ViQ29yZSBoYXMgYSBvbmUtdG8tb25lIG1hcHBpbmcgb2YgdGhyZWFkcyB0
byBKU0dsb2JhbERhdGFzOwogICAgICAgICAvLyBlaXRoZXIgY3JlYXRlKCkgb3IgY3JlYXRlTGVh
a2VkKCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UKQEAgLTE4MCw2ICsxODEsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBtYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFk
cygpIHsgaGVhcC5tYWNoaW5lVGhyZWFkcygpLm1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRz
KCk7IH0KIAorICAgIHByaXZhdGU6CisgICAgICAgIEpTTG9jayBtX2FwaUxvY2s7CisKKyAgICBw
dWJsaWM6CiAgICAgICAgIEhlYXAgaGVhcDsgLy8gVGhlIGhlYXAgaXMgb3VyIGZpcnN0IGRhdGEg
bWVtYmVyIHRvIGVuc3VyZSB0aGF0IGl0J3MgZGVzdHJ1Y3RlZCBhZnRlciBhbGwgdGhlIG9iamVj
dHMgdGhhdCByZWZlcmVuY2UgaXQuCiAKICAgICAgICAgR2xvYmFsRGF0YVR5cGUgZ2xvYmFsRGF0
YVR5cGU7CkBAIC00MDksNiArNDE0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJlZ2lz
dGVyVHlwZWRBcnJheUZ1bmN0aW9uKGZsb2F0NjQsIEZsb2F0NjQpOwogI3VuZGVmIHJlZ2lzdGVy
VHlwZWRBcnJheUZ1bmN0aW9uCiAKKyAgICAgICAgSlNMb2NrJiBhcGlMb2NrKCkgeyByZXR1cm4g
bV9hcGlMb2NrOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDggKzExNCw2IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgaW5s
aW5lIHZvaWQKIAogSlNHbG9iYWxPYmplY3Q6On5KU0dsb2JhbE9iamVjdCgpCiB7Ci0gICAgQVNT
RVJUKEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7Ci0KICAgICBpZiAobV9k
ZWJ1Z2dlcikKICAgICAgICAgbV9kZWJ1Z2dlci0+ZGV0YWNoKHRoaXMpOwogCkBAIC0xMzAsNyAr
MTI4LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbAogCiB2b2lk
IEpTR2xvYmFsT2JqZWN0Ojppbml0KEpTT2JqZWN0KiB0aGlzVmFsdWUpCiB7Ci0gICAgQVNTRVJU
KEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CisgICAgQVNTRVJUKGdsb2Jh
bERhdGEoKS5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgCiAg
ICAgbV9nbG9iYWxTY29wZUNoYWluLnNldChnbG9iYWxEYXRhKCksIHRoaXMsIFNjb3BlQ2hhaW5O
b2RlOjpjcmVhdGUoMCwgdGhpcywgJmdsb2JhbERhdGEoKSwgdGhpcywgdGhpc1ZhbHVlKSk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkocmV2aXNpb24g
MTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1
ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAi
SlNPYmplY3QuaCIKICNpbmNsdWRlICJTY29wZUNoYWluLmgiCiAKQEAgLTM4LDk0ICszOSw5NiBA
QCBuYW1lc3BhY2UgSlNDIHsKICNpZiAoT1MoREFSV0lOKSB8fCBVU0UoUFRIUkVBRFMpKQogCiAv
LyBBY3F1aXJlIHRoaXMgbXV0ZXggYmVmb3JlIGFjY2Vzc2luZyBsb2NrLXJlbGF0ZWQgZGF0YS4K
LXN0YXRpYyBwdGhyZWFkX211dGV4X3QgSlNNdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTEla
RVI7CitzdGF0aWMgcHRocmVhZF9tdXRleF90IGdpYW50R2xvYmFsSlNMb2NrID0gUFRIUkVBRF9N
VVRFWF9JTklUSUFMSVpFUjsKIAotLy8gVGhyZWFkLXNwZWNpZmljIGtleSB0aGF0IHRlbGxzIHdo
ZXRoZXIgYSB0aHJlYWQgaG9sZHMgdGhlIEpTTXV0ZXgsIGFuZCBob3cgbWFueSB0aW1lcyBpdCB3
YXMgdGFrZW4gcmVjdXJzaXZlbHkuCi1wdGhyZWFkX2tleV90IEpTTG9ja0NvdW50OworR2xvYmFs
SlNMb2NrOjpHbG9iYWxKU0xvY2soKQoreworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ2lhbnRH
bG9iYWxKU0xvY2spOworfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVKU0xvY2tDb3VudCgpCitHbG9i
YWxKU0xvY2s6On5HbG9iYWxKU0xvY2soKQogewotICAgIHB0aHJlYWRfa2V5X2NyZWF0ZSgmSlNM
b2NrQ291bnQsIDApOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnaWFudEdsb2JhbEpTTG9j
ayk7CiB9CiAKLXB0aHJlYWRfb25jZV90IGNyZWF0ZUpTTG9ja0NvdW50T25jZSA9IFBUSFJFQURf
T05DRV9JTklUOworSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoRXhlY1N0YXRlKiBleGVjKQor
ICAgIDogbV9nbG9iYWxEYXRhKCZleGVjLT5nbG9iYWxEYXRhKCkpCit7CisgICAgbV9nbG9iYWxE
YXRhLT5hcGlMb2NrKCkubG9jaygpOworfQogCi0vLyBMb2NrIG5lc3RpbmcgY291bnQuCi1pbnRw
dHJfdCBKU0xvY2s6OmxvY2tDb3VudCgpCitKU0xvY2tIb2xkZXI6OkpTTG9ja0hvbGRlcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCisgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKIHsK
LSAgICBwdGhyZWFkX29uY2UoJmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNMb2NrQ291
bnQpOworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKK30KIAotICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGludHB0cl90PihwdGhyZWFkX2dldHNwZWNpZmljKEpTTG9ja0Nv
dW50KSk7CitKU0xvY2tIb2xkZXI6OkpTTG9ja0hvbGRlcihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCisgICAgOiBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCit7CisgICAgbV9nbG9iYWxEYXRh
LT5hcGlMb2NrKCkubG9jaygpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRMb2NrQ291bnQoaW50cHRy
X3QgY291bnQpCitKU0xvY2tIb2xkZXI6On5KU0xvY2tIb2xkZXIoKQogewotICAgIEFTU0VSVChj
b3VudCA+PSAwKTsKLSAgICBwdGhyZWFkX3NldHNwZWNpZmljKEpTTG9ja0NvdW50LCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihjb3VudCkpOworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLnVu
bG9jaygpOwogfQogCi1KU0xvY2s6OkpTTG9jayhFeGVjU3RhdGUqIGV4ZWMpCi0gICAgOiBtX2xv
Y2tCZWhhdmlvcihleGVjLT5nbG9iYWxEYXRhKCkuaXNTaGFyZWRJbnN0YW5jZSgpID8gTG9ja0Zv
clJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpCitKU0xvY2s6OkpTTG9jaygpCisgICAgOiBt
X2xvY2tDb3VudCgwKQogewotICAgIGxvY2sobV9sb2NrQmVoYXZpb3IpOworICAgIG1fc3Bpbkxv
Y2suSW5pdCgpOwogfQogCi1KU0xvY2s6OkpTTG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
Ci0gICAgOiBtX2xvY2tCZWhhdmlvcihnbG9iYWxEYXRhLT5pc1NoYXJlZEluc3RhbmNlKCkgPyBM
b2NrRm9yUmVhbCA6IFNpbGVuY2VBc3NlcnRpb25zT25seSkKK0pTTG9jazo6fkpTTG9jaygpCiB7
Ci0gICAgbG9jayhtX2xvY2tCZWhhdmlvcik7CiB9CiAKLXZvaWQgSlNMb2NrOjpsb2NrKEpTTG9j
a0JlaGF2aW9yIGxvY2tCZWhhdmlvcikKK3ZvaWQgSlNMb2NrOjpsb2NrKCkKIHsKLSNpZmRlZiBO
REVCVUcKLSAgICAvLyBMb2NraW5nICJub3QgZm9yIHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0
dXJlLgotICAgIGlmIChsb2NrQmVoYXZpb3IgPT0gU2lsZW5jZUFzc2VydGlvbnNPbmx5KQotICAg
ICAgICByZXR1cm47Ci0jZW5kaWYKKyAgICBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQg
PSBXVEY6OmN1cnJlbnRUaHJlYWQoKTsKKyAgICB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGhv
bGRlcigmbV9zcGluTG9jayk7CisgICAgICAgIGlmIChtX293bmVyVGhyZWFkID09IGN1cnJlbnRU
aHJlYWQgJiYgbV9sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIG1fbG9ja0NvdW50Kys7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBwdGhyZWFkX29uY2UoJmNy
ZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNMb2NrQ291bnQpOworICAgIG1fbG9jay5sb2Nr
KCk7CiAKLSAgICBpbnRwdHJfdCBjdXJyZW50TG9ja0NvdW50ID0gbG9ja0NvdW50KCk7Ci0gICAg
aWYgKCFjdXJyZW50TG9ja0NvdW50ICYmIGxvY2tCZWhhdmlvciA9PSBMb2NrRm9yUmVhbCkgewot
ICAgICAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9tdXRleF9sb2NrKCZKU011dGV4KTsKLSAgICAg
ICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsICFyZXN1bHQpOworICAgIHsKKyAgICAgICAgU3Bpbkxv
Y2tIb2xkZXIgaG9sZGVyKCZtX3NwaW5Mb2NrKTsKKyAgICAgICAgbV9vd25lclRocmVhZCA9IGN1
cnJlbnRUaHJlYWQ7CisgICAgICAgIEFTU0VSVCghbV9sb2NrQ291bnQpOworICAgICAgICBtX2xv
Y2tDb3VudCA9IDE7CiAgICAgfQotICAgIHNldExvY2tDb3VudChjdXJyZW50TG9ja0NvdW50ICsg
MSk7CiB9CiAKLXZvaWQgSlNMb2NrOjp1bmxvY2soSlNMb2NrQmVoYXZpb3IgbG9ja0JlaGF2aW9y
KQordm9pZCBKU0xvY2s6OnVubG9jaygpCiB7Ci0gICAgQVNTRVJUKGxvY2tDb3VudCgpKTsKKyAg
ICBBU1NFUlQoY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAKLSNpZmRlZiBOREVCVUcK
LSAgICAvLyBMb2NraW5nICJub3QgZm9yIHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0dXJlLgot
ICAgIGlmIChsb2NrQmVoYXZpb3IgPT0gU2lsZW5jZUFzc2VydGlvbnNPbmx5KQotICAgICAgICBy
ZXR1cm47Ci0jZW5kaWYKKyAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJm1fc3BpbkxvY2spOwor
ICAgIG1fbG9ja0NvdW50LS07CiAKLSAgICBpbnRwdHJfdCBuZXdMb2NrQ291bnQgPSBsb2NrQ291
bnQoKSAtIDE7Ci0gICAgc2V0TG9ja0NvdW50KG5ld0xvY2tDb3VudCk7Ci0gICAgaWYgKCFuZXdM
b2NrQ291bnQgJiYgbG9ja0JlaGF2aW9yID09IExvY2tGb3JSZWFsKSB7Ci0gICAgICAgIGludCBy
ZXN1bHQgPSBwdGhyZWFkX211dGV4X3VubG9jaygmSlNNdXRleCk7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCAhcmVzdWx0KTsKLSAgICB9CisgICAgaWYgKCFtX2xvY2tDb3VudCkKKyAg
ICAgICAgbV9sb2NrLnVubG9jaygpOwogfQogCiB2b2lkIEpTTG9jazo6bG9jayhFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgbG9jayhleGVjLT5nbG9iYWxEYXRhKCkuaXNTaGFyZWRJbnN0YW5jZSgp
ID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIGV4ZWMtPmdsb2Jh
bERhdGEoKS5hcGlMb2NrKCkubG9jaygpOwogfQogCiB2b2lkIEpTTG9jazo6dW5sb2NrKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICB1bmxvY2soZXhlYy0+Z2xvYmFsRGF0YSgpLmlzU2hhcmVkSW5z
dGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBleGVj
LT5nbG9iYWxEYXRhKCkuYXBpTG9jaygpLnVubG9jaygpOwogfQogCiBib29sIEpTTG9jazo6Y3Vy
cmVudFRocmVhZElzSG9sZGluZ0xvY2soKQogewotICAgIHB0aHJlYWRfb25jZSgmY3JlYXRlSlNM
b2NrQ291bnRPbmNlLCBjcmVhdGVKU0xvY2tDb3VudCk7Ci0gICAgcmV0dXJuICEhcHRocmVhZF9n
ZXRzcGVjaWZpYyhKU0xvY2tDb3VudCk7CisgICAgcmV0dXJuIG1fbG9ja0NvdW50ICYmIG1fb3du
ZXJUaHJlYWQgPT0gV1RGOjpjdXJyZW50VGhyZWFkKCk7CiB9CiAKIC8vIFRoaXMgaXMgZmFpcmx5
IG5hc3R5LiAgV2UgYWxsb3cgbXVsdGlwbGUgdGhyZWFkcyB0byBydW4gb24gdGhlIHNhbWUKQEAg
LTE0OSw3ICsxNTIsNyBAQCBib29sIEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2so
CiAvLyB0aGlzIHRvIGhhcHBlbiwgYW5kIHdlcmUgaXRzIHN0YWNrIHRvIGdyb3cgZnVydGhlciwg
dGhlbiBpdCBtYXkgcG90ZW50aWFsbHkKIC8vIHdyaXRlIG92ZXIgdGhlIHNlY29uZCB0aHJlYWQn
cyBjYWxsIGZyYW1lcy4KIC8vCi0vLyBJbiBhdm9pZCBKUyBzdGFjayBjb3JydXB0aW9uIHdlIGVu
Zm9yY2UgYSBwb2xpY3kgb2Ygb25seSBldmVyIGFsbG93aW5nIHR3bworLy8gVG8gYXZvaWQgSlMg
c3RhY2sgY29ycnVwdGlvbiB3ZSBlbmZvcmNlIGEgcG9saWN5IG9mIG9ubHkgZXZlciBhbGxvd2lu
ZyB0d28KIC8vIHRocmVhZHMgdG8gdXNlIGEgSlMgY29udGV4dCBjb25jdXJyZW50bHksIGFuZCBv
bmx5IGFsbG93aW5nIHRoZSBzZWNvbmQgb2YKIC8vIHRoZXNlIHRocmVhZHMgdG8gZXhlY3V0ZSB1
bnRpbCBpdCBoYXMgY29tcGxldGVkIGFuZCBmdWxseSByZXR1cm5lZCBmcm9tIGl0cwogLy8gb3V0
ZXJtb3N0IGNhbGwgaW50byBKU0MuICBXZSBlbmZvcmNlIHRoaXMgcG9saWN5IHVzaW5nICdsb2Nr
RHJvcERlcHRoJy4gIFRoZQpAQCAtMTU4LDcgKzE2MSw3IEBAIGJvb2wgSlNMb2NrOjpjdXJyZW50
VGhyZWFkSXNIb2xkaW5nTG9jaygKIC8vIHNhbWUgdGhyZWFkIGFnYWluLCBlbnRlciBKU0MgKHRo
cm91Z2ggZXZhbHVhdGUgc2NyaXB0IG9yIGNhbGwgZnVuY3Rpb24pLCBhbmQgZXhpdAogLy8gYWdh
aW4gdGhyb3VnaCBhIGNhbGxiYWNrLCB0aGVuIHRoZSBsb2NrcyB3aWxsIG5vdCBiZSBkcm9wcGVk
IHdoZW4gRHJvcEFsbExvY2tzCiAvLyBpcyBjYWxsZWQgKHNpbmNlIGxvY2tEcm9wRGVwdGggaXMg
bm9uLXplcm8pLiAgU2luY2UgdGhpcyB0aHJlYWQgaXMgc3RpbGwgaG9sZGluZwotLy8gdGhlIGxv
Y2tzLCBvbmx5IGl0IHdpbGwgcmUgYWJsZSB0byByZS1lbnRlciBKU0MgKGVpdGhlciBiZSByZXR1
cm5pbmcgZnJvbSB0aGUKKy8vIHRoZSBsb2Nrcywgb25seSBpdCB3aWxsIGJlIGFibGUgdG8gcmUt
ZW50ZXIgSlNDIChlaXRoZXIgYmUgcmV0dXJuaW5nIGZyb20gdGhlCiAvLyBjYWxsYmFjaywgb3Ig
YnkgcmUtZW50ZXJpbmcgdGhyb3VnaCBhbm90aGVyIGNhbGwgdG8gZXZhdWxhdGUgc2NyaXB0IG9y
IGNhbGwKIC8vIGZ1bmN0aW9uKS4KIC8vCkBAIC0xNjgsNjEgKzE3MSw4NCBAQCBib29sIEpTTG9j
azo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soCiAvLyBvcmRlciBpbiB3aGljaCB0aGV5IHdl
cmUgbWFkZSAtIHRob3VnaCBpbXBsZW1lbnRpbmcgdGhlIGxlc3MgcmVzdHJpY3RpdmUgcG9saWN5
CiAvLyB3b3VsZCBsaWtlbHkgaW5jcmVhc2UgY29tcGxleGl0eSBhbmQgb3ZlcmhlYWQuCiAvLwot
c3RhdGljIHVuc2lnbmVkIGxvY2tEcm9wRGVwdGggPSAwOwogCi1KU0xvY2s6OkRyb3BBbGxMb2Nr
czo6RHJvcEFsbExvY2tzKEV4ZWNTdGF0ZSogZXhlYykKLSAgICA6IG1fbG9ja0JlaGF2aW9yKGV4
ZWMtPmdsb2JhbERhdGEoKS5pc1NoYXJlZEluc3RhbmNlKCkgPyBMb2NrRm9yUmVhbCA6IFNpbGVu
Y2VBc3NlcnRpb25zT25seSkKKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9m
IGxvY2tzIHRoYXQgd2VyZSBkcm9wcGVkLgordW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3Mo
KQogewotICAgIHB0aHJlYWRfb25jZSgmY3JlYXRlSlNMb2NrQ291bnRPbmNlLCBjcmVhdGVKU0xv
Y2tDb3VudCk7CisgICAgaWYgKG1fbG9ja0Ryb3BEZXB0aCsrKQorICAgICAgICByZXR1cm4gMDsK
IAotICAgIGlmIChsb2NrRHJvcERlcHRoKyspIHsKLSAgICAgICAgbV9sb2NrQ291bnQgPSAwOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIHJldHVybiBkcm9wQWxsTG9ja3NVbmNvbmRpdGlv
bmFsbHkoKTsKK30KKwordW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFs
bHkoKQoreworICAgIHVuc2lnbmVkIGxvY2tDb3VudCA9IG1fbG9ja0NvdW50OworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsb2NrQ291bnQ7IGkrKykKKyAgICAgICAgdW5sb2NrKCk7CiAK
LSAgICBtX2xvY2tDb3VudCA9IEpTTG9jazo6bG9ja0NvdW50KCk7Ci0gICAgZm9yIChpbnRwdHJf
dCBpID0gMDsgaSA8IG1fbG9ja0NvdW50OyBpKyspCi0gICAgICAgIEpTTG9jazo6dW5sb2NrKG1f
bG9ja0JlaGF2aW9yKTsKKyAgICByZXR1cm4gbG9ja0NvdW50OwogfQogCi1KU0xvY2s6OkRyb3BB
bGxMb2Nrczo6RHJvcEFsbExvY2tzKEpTTG9ja0JlaGF2aW9yIEpTTG9ja0JlaGF2aW9yKQotICAg
IDogbV9sb2NrQmVoYXZpb3IoSlNMb2NrQmVoYXZpb3IpCit2b2lkIEpTTG9jazo6Z3JhYkFsbExv
Y2tzKHVuc2lnbmVkIGxvY2tDb3VudCkKIHsKLSAgICBwdGhyZWFkX29uY2UoJmNyZWF0ZUpTTG9j
a0NvdW50T25jZSwgY3JlYXRlSlNMb2NrQ291bnQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsb2NrQ291bnQ7IGkrKykKKyAgICAgICAgbG9jaygpOwogCi0gICAgaWYgKGxvY2tEcm9w
RGVwdGgrKykgewotICAgICAgICBtX2xvY2tDb3VudCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgbV9sb2NrRHJvcERlcHRoLS07Cit9CiAKLSAgICAvLyBJdCBpcyBuZWNlc3Nhcnkg
dG8gZHJvcCBldmVuICJ1bnJlYWwiIGxvY2tzLCBiZWNhdXNlIGhhdmluZyBhIG5vbi16ZXJvIGxv
Y2sgY291bnQKLSAgICAvLyB3aWxsIHByZXZlbnQgYSByZWFsIGxvY2sgZnJvbSBiZWluZyB0YWtl
bi4KK0pTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoRXhlY1N0YXRlKiBleGVjKQor
ICAgIDogbV9sb2NrQ291bnQoMCkKKyAgICAsIG1fZ2xvYmFsRGF0YSgmZXhlYy0+Z2xvYmFsRGF0
YSgpKQoreworICAgIG1fbG9ja0NvdW50ID0gbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZHJvcEFs
bExvY2tzKCk7Cit9CiAKLSAgICBtX2xvY2tDb3VudCA9IEpTTG9jazo6bG9ja0NvdW50KCk7Ci0g
ICAgZm9yIChpbnRwdHJfdCBpID0gMDsgaSA8IG1fbG9ja0NvdW50OyBpKyspCi0gICAgICAgIEpT
TG9jazo6dW5sb2NrKG1fbG9ja0JlaGF2aW9yKTsKK0pTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9w
QWxsTG9ja3MoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgIDogbV9sb2NrQ291bnQoMCkK
KyAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQoreworICAgIG1fbG9ja0NvdW50ID0gbV9n
bG9iYWxEYXRhLT5hcGlMb2NrKCkuZHJvcEFsbExvY2tzKCk7CiB9CiAKIEpTTG9jazo6RHJvcEFs
bExvY2tzOjp+RHJvcEFsbExvY2tzKCkKIHsKLSAgICBmb3IgKGludHB0cl90IGkgPSAwOyBpIDwg
bV9sb2NrQ291bnQ7IGkrKykKLSAgICAgICAgSlNMb2NrOjpsb2NrKG1fbG9ja0JlaGF2aW9yKTsK
LQotICAgIC0tbG9ja0Ryb3BEZXB0aDsKKyAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5ncmFi
QWxsTG9ja3MobV9sb2NrQ291bnQpOwogfQogCiAjZWxzZSAvLyAoT1MoREFSV0lOKSB8fCBVU0Uo
UFRIUkVBRFMpKQogCi1KU0xvY2s6OkpTTG9jayhFeGVjU3RhdGUqKQotICAgIDogbV9sb2NrQmVo
YXZpb3IoU2lsZW5jZUFzc2VydGlvbnNPbmx5KQorR2xvYmFsSlNMb2NrOjpHbG9iYWxKU0xvY2so
KQoreworfQorCitHbG9iYWxKU0xvY2s6On5HbG9iYWxKU0xvY2soKQoreworfQorCitKU0xvY2tI
b2xkZXI6OkpTTG9ja0hvbGRlcihKU0dsb2JhbERhdGEqKQogewogfQogCi0vLyBJZiB0aHJlYWRp
bmcgc3VwcG9ydCBpcyBvZmYsIHNldCB0aGUgbG9jayBjb3VudCB0byBhIGNvbnN0YW50IHZhbHVl
IG9mIDEgc28gc3NlcnRpb25zCi0vLyB0aGF0IHRoZSBsb2NrIGlzIGhlbGQgZG9uJ3QgZmFpbAot
aW50cHRyX3QgSlNMb2NrOjpsb2NrQ291bnQoKQorSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIo
SlNHbG9iYWxEYXRhJikKK3sKK30KKworSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoRXhlY1N0
YXRlKikKK3sKK30KKworSlNMb2NrSG9sZGVyOjp+SlNMb2NrSG9sZGVyKCkKK3sKK30KKworSlNM
b2NrOjpKU0xvY2soKQoreworfQorCitKU0xvY2s6On5KU0xvY2soKQogewotICAgIHJldHVybiAx
OwogfQogCiBib29sIEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKQpAQCAtMjMw
LDExICsyNTYsMTEgQEAgYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKAog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTTG9jazo6bG9jayhKU0xvY2tCZWhhdmlvcikK
K3ZvaWQgSlNMb2NrOjpsb2NrKCkKIHsKIH0KIAotdm9pZCBKU0xvY2s6OnVubG9jayhKU0xvY2tC
ZWhhdmlvcikKK3ZvaWQgSlNMb2NrOjp1bmxvY2soKQogewogfQogCkBAIC0yNDYsMTEgKzI3Miwz
MyBAQCB2b2lkIEpTTG9jazo6dW5sb2NrKEV4ZWNTdGF0ZSopCiB7CiB9CiAKK3ZvaWQgSlNMb2Nr
Ojpsb2NrKEpTR2xvYmFsRGF0YSYpCit7Cit9CisKK3ZvaWQgSlNMb2NrOjp1bmxvY2soSlNHbG9i
YWxEYXRhJikKK3sKK30KKwordW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3MoKQoreworICAg
IHJldHVybiAwOworfQorCit1bnNpZ25lZCBKU0xvY2s6OmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9u
YWxseSgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSlNMb2NrOjpncmFiQWxsTG9ja3Mo
dW5zaWduZWQpCit7Cit9CisKIEpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoRXhl
Y1N0YXRlKikKIHsKIH0KIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhKU0xv
Y2tCZWhhdmlvcikKK0pTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoSlNHbG9iYWxE
YXRhKikKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgJ
KHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw5IEBACiAKICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVENTcGluTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTMwLDggKzMzLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgLy8gaW1wb3J0YW50IHRvIGxvY2sgYmVmb3JlIGRvaW5nIGFueXRoaW5nIHRo
YXQgYWxsb2NhdGVzIGEKICAgICAvLyBKYXZhU2NyaXB0IGRhdGEgc3RydWN0dXJlIG9yIHRoYXQg
aW50ZXJhY3RzIHdpdGggc2hhcmVkIHN0YXRlCiAgICAgLy8gc3VjaCBhcyB0aGUgcHJvdGVjdCBj
b3VudCBoYXNoIHRhYmxlLiBUaGUgc2ltcGxlc3Qgd2F5IHRvIGxvY2sKLSAgICAvLyBpcyB0byBj
cmVhdGUgYSBsb2NhbCBKU0xvY2sgb2JqZWN0IGluIHRoZSBzY29wZSB3aGVyZSB0aGUgbG9jayAK
LSAgICAvLyBtdXN0IGJlIGhlbGQuIFRoZSBsb2NrIGlzIHJlY3Vyc2l2ZSBzbyBuZXN0aW5nIGlz
IG9rLiBUaGUgSlNMb2NrIAorICAgIC8vIGlzIHRvIGNyZWF0ZSBhIGxvY2FsIEpTTG9ja0hvbGRl
ciBvYmplY3QgaW4gdGhlIHNjb3BlIHdoZXJlIHRoZSBsb2NrIAorICAgIC8vIG11c3QgYmUgaGVs
ZCBhbmQgcGFzcyBpdCB0aGUgY29udGV4dCB0aGF0IHJlcXVpcmVzIHByb3RlY3Rpb24uIAorICAg
IC8vIFRoZSBsb2NrIGlzIHJlY3Vyc2l2ZSBzbyBuZXN0aW5nIGlzIG9rLiBUaGUgSlNMb2NrIAog
ICAgIC8vIG9iamVjdCBhbHNvIGFjdHMgYXMgYSBjb252ZW5pZW5jZSBzaG9ydC1oYW5kIGZvciBy
dW5uaW5nIGltcG9ydGFudAogICAgIC8vIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgogCkBAIC00
NCw2MiArNDgsNjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gRHJvcEFsbExvY2tzIG9iamVj
dCB0YWtlcyBjYXJlIHRvIHJlbGVhc2UgdGhlIEpTTG9jayBvbmx5IGlmIHlvdXIKICAgICAvLyB0
aHJlYWQgYWNxdWlyZWQgaXQgdG8gYmVnaW4gd2l0aC4KIAotICAgIC8vIEZvciBjb250ZXh0cyBv
dGhlciB0aGFuIHRoZSBzaW5nbGUgc2hhcmVkIG9uZSwgaW1wbGljaXQgbG9ja2luZyBpcyBub3Qg
ZG9uZSwKLSAgICAvLyBidXQgd2Ugc3RpbGwgbmVlZCB0byBwZXJmb3JtIGFsbCB0aGUgY291bnRp
bmcgaW4gb3JkZXIgdG8ga2VlcCBkZWJ1ZwotICAgIC8vIGFzc2VydGlvbnMgd29ya2luZywgc28g
dGhhdCBjbGllbnRzIHRoYXQgdXNlIHRoZSBzaGFyZWQgY29udGV4dCBkb24ndCBicmVhay4KLQog
ICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBKU0dsb2JhbERhdGE7CiAKLSAgICBlbnVt
IEpTTG9ja0JlaGF2aW9yIHsgU2lsZW5jZUFzc2VydGlvbnNPbmx5LCBMb2NrRm9yUmVhbCB9Owor
ICAgIC8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBpbml0aWFsaXphdGlvbiBv
ZiB0aGUgbGVnYWN5IHNpbmdsZSAKKyAgICAvLyBzaGFyZWQgSlNHbG9iYWxEYXRhLgorICAgIGNs
YXNzIEdsb2JhbEpTTG9jayB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdsb2JhbEpT
TG9jayk7CisgICAgcHVibGljOgorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBHbG9iYWxKU0xv
Y2soKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkdsb2JhbEpTTG9jaygpOworICAgIH07
CisKKyAgICBjbGFzcyBKU0xvY2tIb2xkZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgSlNMb2NrSG9sZGVyKEpTR2xvYmFsRGF0YSopOworICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIEpTTG9ja0hvbGRlcihFeGVjU3RhdGUqKTsKKworICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB+SlNMb2NrSG9sZGVyKCk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpT
R2xvYmFsRGF0YT4gbV9nbG9iYWxEYXRhOworICAgIH07CiAKICAgICBjbGFzcyBKU0xvY2sgewog
ICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKU0xvY2spOwogICAgIHB1YmxpYzoKLSAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNMb2NrKEV4ZWNTdGF0ZSopOwotICAgICAgICBKU0xvY2so
SlNHbG9iYWxEYXRhKik7CisgICAgICAgIEpTTG9jaygpOworICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB+SlNMb2NrKCk7CisKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2NrKCk7
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5sb2NrKCk7CiAKLSAgICAgICAgSlNM
b2NrKEpTTG9ja0JlaGF2aW9yIGxvY2tCZWhhdmlvcikKLSAgICAgICAgICAgIDogbV9sb2NrQmVo
YXZpb3IobG9ja0JlaGF2aW9yKQotICAgICAgICB7Ci0jaWZkZWYgTkRFQlVHCi0gICAgICAgICAg
ICAvLyBMb2NraW5nICJub3QgZm9yIHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0dXJlLgotICAg
ICAgICAgICAgaWYgKGxvY2tCZWhhdmlvciA9PSBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAgICAgICAgICBsb2NrKGxvY2tCZWhhdmlv
cik7Ci0gICAgICAgIH0KLQotICAgICAgICB+SlNMb2NrKCkKLSAgICAgICAgeyAKLSNpZmRlZiBO
REVCVUcKLSAgICAgICAgICAgIC8vIExvY2tpbmcgIm5vdCBmb3IgcmVhbCIgaXMgYSBkZWJ1Zy1v
bmx5IGZlYXR1cmUuCi0gICAgICAgICAgICBpZiAobV9sb2NrQmVoYXZpb3IgPT0gU2lsZW5jZUFz
c2VydGlvbnNPbmx5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgICAgICAg
ICAgdW5sb2NrKG1fbG9ja0JlaGF2aW9yKTsgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGxvY2soSlNMb2NrQmVoYXZpb3IpOwotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1bmxvY2soSlNMb2NrQmVoYXZpb3Ip
OwogICAgICAgICBzdGF0aWMgdm9pZCBsb2NrKEV4ZWNTdGF0ZSopOwogICAgICAgICBzdGF0aWMg
dm9pZCB1bmxvY2soRXhlY1N0YXRlKik7CisgICAgICAgIHN0YXRpYyB2b2lkIGxvY2soSlNHbG9i
YWxEYXRhJik7CisgICAgICAgIHN0YXRpYyB2b2lkIHVubG9jayhKU0dsb2JhbERhdGEmKTsKIAot
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgaW50cHRyX3QgbG9ja0NvdW50KCk7Ci0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdMb2NrKCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY3VycmVudFRocmVhZElz
SG9sZGluZ0xvY2soKTsKIAotICAgICAgICBKU0xvY2tCZWhhdmlvciBtX2xvY2tCZWhhdmlvcjsK
KyAgICAgICAgdW5zaWduZWQgZHJvcEFsbExvY2tzKCk7CisgICAgICAgIHVuc2lnbmVkIGRyb3BB
bGxMb2Nrc1VuY29uZGl0aW9uYWxseSgpOworICAgICAgICB2b2lkIGdyYWJBbGxMb2Nrcyh1bnNp
Z25lZCBsb2NrQ291bnQpOworCisgICAgICAgIFNwaW5Mb2NrIG1fc3BpbkxvY2s7CisgICAgICAg
IE11dGV4IG1fbG9jazsKKyAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX293bmVyVGhyZWFkOwor
ICAgICAgICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKKyAgICAgICAgdW5zaWduZWQgbV9sb2NrRHJv
cERlcHRoOwogCiAgICAgICAgIGNsYXNzIERyb3BBbGxMb2NrcyB7CiAgICAgICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShEcm9wQWxsTG9ja3MpOwogICAgICAgICBwdWJsaWM6CiAgICAgICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBEcm9wQWxsTG9ja3MoRXhlY1N0YXRlKiBleGVjKTsKLSAg
ICAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIERyb3BBbGxMb2NrcyhKU0xvY2tCZWhhdmlvcik7
CisgICAgICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBEcm9wQWxsTG9ja3MoSlNHbG9iYWxEYXRh
Kik7CiAgICAgICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+RHJvcEFsbExvY2tzKCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIGludHB0cl90IG1fbG9ja0Nv
dW50OwotICAgICAgICAgICAgSlNMb2NrQmVoYXZpb3IgbV9sb2NrQmVoYXZpb3I7CisgICAgICAg
ICAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBtX2dsb2JhbERhdGE7CiAgICAgICAgIH07CiAgICAg
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgJKHJl
dmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01h
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw4ICs3NSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIEhhbmRsZVR5cGVzPE1hcHBlZFR5cGU+OjpnZXRGcm9tU2xvdChjb25zdF9jYXN0PEpTVmFs
dWUqPigmaW1wbC0+anNWYWx1ZSgpKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXQoSlNHbG9iYWxE
YXRhJiwgY29uc3QgS2V5VHlwZSYga2V5LCBFeHRlcm5hbFR5cGUgdmFsdWUpCisgICAgdm9pZCBz
ZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBLZXlUeXBlJiBrZXksIEV4dGVybmFs
VHlwZSB2YWx1ZSkKICAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZ2xvYmFsRGF0YSwgZ2xv
YmFsRGF0YS5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgICAg
IHR5cGVuYW1lIE1hcFR5cGU6OkFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoa2V5LCAwKTsK
ICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgICAgIFdlYWtTZXQ6OmRl
YWxsb2NhdGUocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQ3IEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVy
Z0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRh
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cy4gQ3VycmVudCByZWdyZXNzaW9uIHRlc3RzIGFyZSBzdWZmaWNpZW50LgorCisgICAgICAg
IENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5l
dyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4
dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAg
bmVlZHMgcHJvdGVjdGlvbi4gQWxzbyBhZGRlZCBhIGNvdXBsZSBKU0xvY2tzIHRvIHBsYWNlcyB0
aGF0IGRpZG4ndCBhbHJlYWR5IAorICAgICAgICBoYXZlIGl0IHRoYXQgbmVlZGVkIGl0LgorCisg
ICAgICAgICogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNvbGxlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVj
dFNvb24pOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5v
dyk6CisgICAgICAgIChXZWJDb3JlOjpHQ0NvbnRyb2xsZXI6OmRpc2NhcmRBbGxDb21waWxlZENv
ZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxs
YmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6
OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFj
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVZvaWRDYWxsYmFjazo6aGFuZGxlRXZl
bnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYW1lc3Bh
Y2VVUkkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0
ZWRTY3JpcHRIb3N0Ojpub2RlQXNTY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0lu
amVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdGVkT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3Rl
ZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUluamVjdGVkU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6
OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y2FuQWNjZXNzSW5zcGVjdGVkV2luZG93KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0Z1bmN0aW9uKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTTXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU011dGF0
aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVG
aWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0
aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlcXVlc3RBbmltYXRp
b25GcmFtZUNhbGxiYWNrQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVxdWVzdEFu
aW1hdGlvbkZyYW1lQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRD
YWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNjcmlwdERlYnVnU2VydmVyOjpy
ZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NoZWR1bGVk
QWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZUZ1
bmN0aW9uSW5Db250ZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFt
ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3Jp
cHRDYWNoZWRGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVE
YXRhOjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6
Y2xlYXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6aW5pdFNjcmlwdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDb250cm9sbGVyOjp1cGRhdGVEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDb250cm9sbGVyOjpjYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpiaW5kaW5nUm9vdE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTY3JpcHROUE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpqc09iamVjdEZvclBsdWdpbkVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3Rz
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0T2JqZWN0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXVzZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpldmVudExp
c3RlbmVySGFuZGxlckJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnRMaXN0ZW5lckhhbmRs
ZXJMb2NhdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFy
Z3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6OmNvbnN0cnVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDYWxsYmFjazo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEdsb2JhbE9iamVjdDo6
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdEdsb2JhbE9iamVjdDo6cmVtb3ZlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6
Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjp0b0luc3BlY3RvclZh
bHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6On5Xb3JrZXJTY3JpcHRD
b250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6Omlu
aXRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZh
bHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZGlzYWJs
ZUV2YWwpOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOgorICAg
ICAgICAoX2RpZEV4ZWN1dGUpOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgX3NldEltcDpv
cmlnaW5Sb290T2JqZWN0OnJvb3RPYmplY3Q6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVj
dCBfc2V0T3JpZ2luUm9vdE9iamVjdDphbmRSb290T2JqZWN0Ol0pOgorICAgICAgICAoLVtXZWJT
Y3JpcHRPYmplY3QgZGVhbGxvY10pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgZmluYWxp
emVdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGNhbGxXZWJTY3JpcHRNZXRob2Q6d2l0
aEFyZ3VtZW50czpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGV2YWx1YXRlV2ViU2Ny
aXB0Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc2V0VmFsdWU6Zm9yS2V5Ol0pOgor
ICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgdmFsdWVGb3JLZXk6XSk6CisgICAgICAgICgtW1dl
YlNjcmlwdE9iamVjdCByZW1vdmVXZWJTY3JpcHRLZXk6XSk6CisgICAgICAgICgtW1dlYlNjcmlw
dE9iamVjdCBoYXNXZWJTY3JpcHRLZXk6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBz
dHJpbmdSZXByZXNlbnRhdGlvbl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgd2ViU2Ny
aXB0VmFsdWVBdEluZGV4Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc2V0V2ViU2Ny
aXB0VmFsdWVBdEluZGV4OnZhbHVlOl0pOgorICAgICAgICAoK1tXZWJTY3JpcHRPYmplY3QgX2Nv
bnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOm9yaWdpblJvb3RPYmplY3Q6cm9vdE9iamVjdDpdKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdl
bmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENh
bGxiYWNrOjpjYWxsYmFja1dpdGhOb1BhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENh
bGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aFN0cmluZ0xpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aEJvb2xlYW4pOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKToKKyAgICAgICAg
KiBicmlkZ2UvTlBfanNvYmplY3QuY3BwOgorICAgICAgICAoX05QTl9JbnZva2VEZWZhdWx0KToK
KyAgICAgICAgKF9OUE5fSW52b2tlKToKKyAgICAgICAgKF9OUE5fRXZhbHVhdGUpOgorICAgICAg
ICAoX05QTl9HZXRQcm9wZXJ0eSk6CisgICAgICAgIChfTlBOX1NldFByb3BlcnR5KToKKyAgICAg
ICAgKF9OUE5fUmVtb3ZlUHJvcGVydHkpOgorICAgICAgICAoX05QTl9IYXNQcm9wZXJ0eSk6Cisg
ICAgICAgIChfTlBOX0hhc01ldGhvZCk6CisgICAgICAgIChfTlBOX0VudW1lcmF0ZSk6CisgICAg
ICAgIChfTlBOX0NvbnN0cnVjdCk6CisgICAgICAgICogYnJpZGdlL2MvY19jbGFzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpDQ2xhc3M6On5DQ2xhc3MpOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6Q0NsYXNzOjptZXRob2RzTmFtZWQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
Q0NsYXNzOjpmaWVsZE5hbWVkKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX2luc3RhbmNlLmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRv
RXhlY1N0YXRlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6aW52b2tlTWV0
aG9kKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1l
dGhvZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZUNvbnN0cnVj
dCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMp
OgorICAgICAgICAqIGJyaWRnZS9jL2NfcnVudGltZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpDRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OkNGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3V0aWxp
dHkuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9OUFZhcmlhbnQp
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE5QVmFyaWFudFRvVmFsdWUpOgorICAg
ICAgICAqIGJyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tOgorICAgICAgICAoSmF2YUpTT2JqZWN0
OjpjYWxsKToKKyAgICAgICAgKEphdmFKU09iamVjdDo6ZXZhbCk6CisgICAgICAgIChKYXZhSlNP
YmplY3Q6OmdldE1lbWJlcik6CisgICAgICAgIChKYXZhSlNPYmplY3Q6OnNldE1lbWJlcik6Cisg
ICAgICAgIChKYXZhSlNPYmplY3Q6OnJlbW92ZU1lbWJlcik6CisgICAgICAgIChKYXZhSlNPYmpl
Y3Q6OmdldFNsb3QpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpzZXRTbG90KToKKyAgICAgICAg
KEphdmFKU09iamVjdDo6dG9TdHJpbmcpOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpjb252ZXJ0
VmFsdWVUb0pPYmplY3QpOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpjb252ZXJ0Sk9iamVjdFRv
VmFsdWUpOgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX29iamMubW06CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpkaXNwYXRjaEpOSUNhbGwpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0pO
SVV0aWxpdHlQcml2YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1
ZVRvSlZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwOgor
ICAgICAgICAoSmF2YUNsYXNzOjpKYXZhQ2xhc3MpOgorICAgICAgICAoSmF2YUNsYXNzOjp+SmF2
YUNsYXNzKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwOgor
ICAgICAgICAoSmF2YUluc3RhbmNlOjpzdHJpbmdWYWx1ZSk6CisgICAgICAgICogYnJpZGdlL2pu
aS9qc2MvSmF2YU1ldGhvZEpTQy5jcHA6CisgICAgICAgIChhcHBlbmRDbGFzc05hbWUpOgorICAg
ICAgICAoSmF2YU1ldGhvZDo6c2lnbmF0dXJlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9K
YXZhU3RyaW5nSlNDLmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhU3RyaW5nOjpKYXZh
U3RyaW5nKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFTdHJpbmc6On5KYXZhU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFTdHJpbmc6OnV0ZjgpOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6SmF2YVN0cmluZzo6aW5pdCk6CisgICAgICAgICogYnJpZGdlL2pzYy9C
cmlkZ2VKU0MuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6OmNyZWF0ZVJ1
bnRpbWVPYmplY3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6Om5ld1J1bnRp
bWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW06CisgICAg
ICAgIChPYmpjSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZSk6CisgICAg
ICAgIChPYmpjSW5zdGFuY2U6Omludm9rZU9iamNNZXRob2QpOgorICAgICAgICAoT2JqY0luc3Rh
bmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6c2V0VmFs
dWVPZlVuZGVmaW5lZEZpZWxkKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZlVu
ZGVmaW5lZEZpZWxkKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW06Cisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKToKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKToKKyAg
ICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW06CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpjb252ZXJ0VmFsdWVUb09iamNWYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpj
b252ZXJ0TlNTdHJpbmdUb1N0cmluZyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0
T2JqY1ZhbHVlVG9WYWx1ZSk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6On5RdEluc3RhbmNlKToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6OmdldFF0SW5zdGFuY2UpOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdCk6CisgICAgICAgICog
YnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
UXRQaXhtYXBJbnN0YW5jZTo6Y3JlYXRlUGl4bWFwUnVudGltZU9iamVjdCk6CisgICAgICAgICog
YnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVy
dFZhbHVlVG9RVmFyaWFudCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0UVZhcmlh
bnRUb1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGFNZXRob2Q6
OmNhbGwpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhv
ZDo6Y2FsbCk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X3J1bnRpbWVfcXQ0LmNwcDoKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQpOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6Y29udmVydFFWYXJpYW50VG9WYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjYWxsKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNhbGwpOgorICAgICAgICAqIGh0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAg
ICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RvcCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpucE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpw
cml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIHBsdWdpbnMvYmxhY2tiZXJy
eS9QbHVnaW5WaWV3QmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBX
aW5kb3dJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmdldFdpbmRvd0luZm8pOgorICAg
ICAgICAqIHBsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKiBwbHVnaW5zL2d0ay9QbHVn
aW5WaWV3R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKiBwbHVnaW5z
L21hYy9QbHVnaW5WaWV3TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0
TlBXaW5kb3dJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRj
aE5QRXZlbnQpOgorICAgICAgICAqIHBsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdp
blZpZXdXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAqIHRl
c3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmVUZXN0U3Vw
cG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmVUZXN0U3VwcG9y
dDo6cmVzZXRJbnRlcm5hbHNPYmplY3QpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24pOgor
CiAyMDEyLTA2LTIxICBUYWlqdSBUc3Vpa2kgIDx0emlrQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBVbmlmeSBGaWxlU3lzdGVtIGNhbGxiYWNrcwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHZv
aWQgY29sbGVjdCh2b2lkKikKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNvbGxl
Y3RBbGxHYXJiYWdlKCk7CiB9CiAKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6
OmdhcmJhZ2VDb2xsZWN0U29vbigpCiAgICAgLy8gZG93biBpbnRvIFdURiBzbyB0aGF0IG1vcmUg
cGxhdGZvcm1zIGNhbiB0YWtlIGFkdmFudGFnZSBvZiBpdCwgd2Ugd2lsbCBiZSAKICAgICAvLyBh
YmxlIHRvIHVzZSByZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCBvbiBtb3JlIHBsYXRmb3Jtcy4K
ICNpZiBVU0UoQ0YpCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5yZXBvcnRBYmFuZG9u
ZWRPYmplY3RHcmFwaCgpOwogI2Vsc2UKICAgICBpZiAoIW1fR0NUaW1lci5pc0FjdGl2ZSgpKQpA
QCAtODAsNyArODAsNyBAQCB2b2lkIEdDQ29udHJvbGxlcjo6Z2NUaW1lckZpcmVkKFRpbWVyPEdD
CiAKIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5vdygpCiB7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIGlmICghSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmlzQnVzeSgpKQogICAgICAgICBKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKIH0KQEAgLTEw
NCw3ICsxMDQsNyBAQCB2b2lkIEdDQ29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdEdhcmJhZ2VDCiAK
IHZvaWQgR0NDb250cm9sbGVyOjpkaXNjYXJkQWxsQ29tcGlsZWRDb2RlKCkKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgSlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpLT5oZWFwLmRlbGV0ZUFsbENvbXBpbGVkQ29kZSgpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2Fs
bGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgYm9vbCBKU1NRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2s6OmhhbmRsZQogCiAgICAgUmVmUHRyPEpTU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
YXJnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tVm9pZENhbGxi
YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bVZvaWRDYWxsYmFjay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3VzdG9tVm9pZENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NyArNjMsNyBAQCB2b2lkIEpTQ3VzdG9tVm9pZENhbGxiYWNrOjpoYW5kbGVFdmVudCgpCiAKICAg
ICBSZWZQdHI8SlNDdXN0b21Wb2lkQ2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAgICAgICAgIAot
ICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNr
KGFyZ3MpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0
aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIFN0cmluZyBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6
bG9va3VwTmEKIHsKICAgICBBU1NFUlQobV9jdXN0b21SZXNvbHZlcik7CiAKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBKU0Vycm9ySGFuZGxlcjo6aGFuZGxl
RXZlbnQoU2NyaXB0RQogCiAgICAgRXJyb3JFdmVudCogZXJyb3JFdmVudCA9IHN0YXRpY19jYXN0
PEVycm9yRXZlbnQqPihldmVudCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmds
b2JhbERhdGEoKSk7CiAKICAgICBKU09iamVjdCoganNGdW5jdGlvbiA9IHRoaXMtPmpzRnVuY3Rp
b24oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgaWYgKCFqc0Z1bmN0aW9uKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEpTVmFsdWUgSlNFdmVudDo6Y2xpcGJv
YXJkRGF0YShFeGVjU3RhdGUKIAogSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXZlbnQqIGV2ZW50KQogewotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAKICAgICBpZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6
OmhhbmRsZUV2ZW50KFNjcmlwdAogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCB8fCBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+Z2xvYmFsRGF0YSgpKTsK
IAogICAgIEpTT2JqZWN0KiBqc0Z1bmN0aW9uID0gdGhpcy0+anNGdW5jdGlvbihzY3JpcHRFeGVj
dXRpb25Db250ZXh0KTsKICAgICBpZiAoIWpzRnVuY3Rpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20u
Y3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lu
amVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcg
QEAgTm9kZSogSW5qZWN0ZWRTY3JpcHRIb3N0OjpzY3JpcHRWYWx1ZUFzTgogCiBTY3JpcHRWYWx1
ZSBJbmplY3RlZFNjcmlwdEhvc3Q6Om5vZGVBc1NjcmlwdFZhbHVlKFNjcmlwdFN0YXRlKiBzdGF0
ZSwgTm9kZSogbm9kZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKHN0YXRlKTsKICAgICByZXR1cm4gU2NyaXB0VmFsdWUo
c3RhdGUtPmdsb2JhbERhdGEoKSwgdG9KUyhzdGF0ZSwgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZv
clByb3RvdHlwZShzdGF0ZSksIG5vZGUpKTsKIH0KIApAQCAtOTUsNyArOTUsNyBAQCBKU1ZhbHVl
IEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0ZWRPCiAgICAgaWYgKCFvYmplY3QpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBTY3JpcHRWYWx1
ZSBzY3JpcHRWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMpOwogICAgIGlmIChzY3JpcHRWYWx1ZS5o
YXNOb1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0T2JqZWN0IEluamVjdGVkU2NyaXB0TWFuYWdl
cjo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2UsIFNjcmlwdFN0YXRl
KiBzY3JpcHRTdGF0ZSwgaW50IGlkKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogCiAgICAgU291
cmNlQ29kZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzdHJpbmdUb1VTdHJpbmcoc291cmNlKSk7
CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwpAQCAtODEsNyAr
ODEsNyBAQCBTY3JpcHRPYmplY3QgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhCiAKIGJvb2wg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjYW5BY2Nlc3NJbnNwZWN0ZWRXaW5kb3coU2NyaXB0U3Rh
dGUqIHNjcmlwdFN0YXRlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogICAgIEpTRE9NV2luZG93
KiBpbnNwZWN0ZWRXaW5kb3cgPSB0b0pTRE9NV2luZG93KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpOwogICAgIGlmICghaW5zcGVjdGVkV2luZG93KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3Rl
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlF
dmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3
ICsxMDgsNyBAQCBKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6CiAgICAg
aWYgKG1fb3JpZ2luYWxOb2RlKSB7CiAgICAgICAgIGlmICghd3JhcHBlcigpKSB7CiAgICAgICAg
ICAgICAvLyBFbnN1cmUgdGhhdCAnbm9kZScgaGFzIGEgSmF2YVNjcmlwdCB3cmFwcGVyIHRvIG1h
cmsgdGhlIGV2ZW50IGxpc3RlbmVyIHdlJ3JlIGNyZWF0aW5nLgotICAgICAgICAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBwYXNzIHRoZSBnbG9iYWwg
b2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZQogICAgICAgICAgICAgc2V0V3JhcHBlcihl
eGVjLT5nbG9iYWxEYXRhKCksIGFzT2JqZWN0KHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBtX29y
aWdpbmFsTm9kZSkpKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGV2YWx1YXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlNjb3BlQ2hhaW5Ob2RlKiBj
aGFpbiwgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFs
dWUsIEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKQogICAgIHsKICAgICAgICAgSlNNYWluVGhyZWFk
RXhlY1N0YXRlIGN1cnJlbnRTdGF0ZShleGVjKTsKKyAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgcmV0dXJuIEpTQzo6ZXZhbHVhdGUoZXhlYywgY2hhaW4sIHNv
dXJjZSwgdGhpc1ZhbHVlLCBleGNlcHRpb24pOwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrQ3VzdG9tLmNw
cAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRh
dGlvbkNhbGxiYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
CiAjaW5jbHVkZSAiSlNNdXRhdGlvbkNhbGxiYWNrLmgiCiAKKyNpbmNsdWRlICJKU0RPTVdpbmRv
d0Jhc2UuaCIKICNpbmNsdWRlICJKU011dGF0aW9uUmVjb3JkLmgiCiAjaW5jbHVkZSAiSlNXZWJL
aXRNdXRhdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgpAQCAtNTAsNyArNTEsNyBAQCBib29sIEpTTXV0YXRpb25DYWxsYmFjazo6aGFuZGxlRXZlbnQo
TXV0CiAKICAgICBSZWZQdHI8SlNNdXRhdGlvbkNhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25k
aXRpb24uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBAIEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6SlNOb2RlRmlsdGVyQ29uZGkKIAogc2hvcnQgSlNO
b2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBOb2Rl
KiBmaWx0ZXJOb2RlKSBjb25zdAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBpZiAoIW1fZmlsdGVy
KQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVxdWVz
dEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNr
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBib29sIEpTUmVxdWVz
dEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s6OmhhCiAKICAgICBSZWZQdHI8SlNSZXF1ZXN0QW5pbWF0
aW9uRnJhbWVDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
CiAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIodGltZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDEy
MDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSmF2YVNjcmlw
dENhbGxGcmFtZS5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNE
T01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDxk
ZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlv
bi5oPgpAQCAtMTA2LDcgKzEwNyw3IEBAIEpTVmFsdWUgSmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZh
bHVhdGUoY28KICAgICBpZiAoIW1faXNWYWxpZCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwog
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICByZXR1
cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS5ldmFsdWF0ZShzY3JpcHQsIGV4Y2VwdGlvbik7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERl
YnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcg
KzExMCw3IEBAIHZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVMaXN0ZW4KIAogdm9p
ZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFRpbWVyPFNj
cmlwdERlYnVnU2VydmVyPiopCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOwogICAgIC8vIElmIEphdmFTY3JpcHQgc3RhY2sgaXMgbm90IGVtcHR5IHBvc3Rwb25l
IHJlY29tcGlsYXRpb24uCiAgICAgaWYgKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KS0+ZHluYW1pY0dsb2JhbE9iamVjdCkKICAgICAgICAgcmVjb21waWxlQWxsSlNGdW5jdGlvbnNT
b29uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFj
dGlvbi5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgdm9p
ZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUoU2NyaXB0RXhlYwogdm9pZCBTY2hlZHVsZWRBY3Rp
b246OmV4ZWN1dGVGdW5jdGlvbkluQ29udGV4dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsK
ICAgICBBU1NFUlQobV9mdW5jdGlvbik7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb250ZXh0LT5nbG9iYWxEYXRhKCkpOwog
CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxs
RGF0YShtX2Z1bmN0aW9uLmdldCgpLCBjYWxsRGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1l
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBTY3JpcHRDYWNoZWRGcmFtZURhdGE6OlNjcmlwdENhY2hlZEZyYW1lRGF0YShGcmFt
ZSogZnJhbWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKIAogICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXIgPSBmcmFtZS0+c2Ny
aXB0KCk7CiAgICAgU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXAmIHdpbmRvd1NoZWxscyA9IHNj
cmlwdENvbnRyb2xsZXItPm1fd2luZG93U2hlbGxzOwpAQCAtNjcsNyArNjcsNyBAQCBTY3JpcHRD
YWNoZWRGcmFtZURhdGE6On5TY3JpcHRDYWNoZWRGcmFtCiAKIHZvaWQgU2NyaXB0Q2FjaGVkRnJh
bWVEYXRhOjpyZXN0b3JlKEZyYW1lKiBmcmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgU2NyaXB0Q29udHJvbGxlciogc2NyaXB0Q29u
dHJvbGxlciA9IGZyYW1lLT5zY3JpcHQoKTsKICAgICBTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1h
cCYgd2luZG93U2hlbGxzID0gc2NyaXB0Q29udHJvbGxlci0+bV93aW5kb3dTaGVsbHM7CkBAIC05
NSw3ICs5NSw3IEBAIHZvaWQgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpjbGVhcigpCiAgICAgaWYg
KG1fd2luZG93cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgbV93aW5kb3dzLmNsZWFyKCk7CiAg
ICAgZ2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3RTb29uKCk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRD
b250cm9sbGVyOjpldmFsdWF0ZUluCiAgICAgY29uc3QgU3RyaW5nKiBzYXZlZFNvdXJjZVVSTCA9
IG1fc291cmNlVVJMOwogICAgIG1fc291cmNlVVJMID0gJnNvdXJjZVVSTDsKIAotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAKICAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3QgPSBtX2ZyYW1lOwogCkBAIC0xNzcsNyAr
MTc3LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKAogICAgIGlm
IChtX3dpbmRvd1NoZWxscy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBmb3IgKFNoZWxsTWFw
OjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRv
d1NoZWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRv
d1NoZWxsID0gaXRlci0+c2Vjb25kLmdldCgpOwpAQCAtMjA5LDcgKzIwOSw3IEBAIEpTRE9NV2lu
ZG93U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OmluaXQKIHsKICAgICBBU1NFUlQoIW1fd2luZG93
U2hlbGxzLmNvbnRhaW5zKHdvcmxkKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHdvcmxkLT5nbG9iYWxEYXRhKCkpOwog
CiAgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBjcmVhdGVXaW5kb3dTaGVsbCh3
b3JsZCk7CiAKQEAgLTI4NCw5ICsyODQsMTAgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjp1cGRh
dGVEb2N1bWVudCgpCiAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIGZvciAo
U2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9
IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpCisgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0
b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMu
ZW5kKCk7ICsraXRlcikgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhpdGVyLT5maXJzdC0+
Z2xvYmFsRGF0YSgpKTsKICAgICAgICAgaXRlci0+c2Vjb25kLT53aW5kb3coKS0+dXBkYXRlRG9j
dW1lbnQoKTsKKyAgICB9CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlU2VjdXJp
dHlPcmlnaW4oKQpAQCAtMzAwLDcgKzMwMSw3IEBAIEJpbmRpbmdzOjpSb290T2JqZWN0KiBTY3Jp
cHRDb250cm9sbGVyOjoKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fY2FjaGVhYmxl
QmluZGluZ1Jvb3RPYmplY3QpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3Qg
PSBCaW5kaW5nczo6Um9vdE9iamVjdDo6Y3JlYXRlKDAsIGdsb2JhbE9iamVjdChwbHVnaW5Xb3Js
ZCgpKSk7CiAgICAgfQogICAgIHJldHVybiBtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0Lmdl
dCgpOwpAQCAtMzEyLDcgKzMxMyw3IEBAIEJpbmRpbmdzOjpSb290T2JqZWN0KiBTY3JpcHRDb250
cm9sbGVyOjoKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fYmluZGluZ1Jvb3RPYmpl
Y3QpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgICAgIG1fYmluZGluZ1Jvb3RPYmplY3QgPSBCaW5kaW5nczo6Um9vdE9iamVjdDo6
Y3JlYXRlKDAsIGdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CiAgICAgfQogICAgIHJldHVy
biBtX2JpbmRpbmdSb290T2JqZWN0LmdldCgpOwpAQCAtMzQ5LDkgKzM1MCw5IEBAIE5QT2JqZWN0
KiBTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTY3JpcHQKICAgICAgICAgaWYgKGNhbkV4ZWN1dGVT
Y3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkgewogICAgICAgICAgICAgLy8gSmF2YVNj
cmlwdCBpcyBlbmFibGVkLCBzbyB0aGVyZSBpcyBhIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4K
ICAgICAgICAgICAgIC8vIFJldHVybiBhbiBOUE9iamVjdCBib3VuZCB0byB0aGUgd2luZG93IG9i
amVjdC4KLSAgICAgICAgICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKLSAgICAgICAgICAgIEpTT2JqZWN0KiB3aW4gPSB3aW5kb3dTaGVsbChwbHVnaW5Xb3JsZCgp
KS0+d2luZG93KCk7CisgICAgICAgICAgICBKU0RPTVdpbmRvdyogd2luID0gd2luZG93U2hlbGwo
cGx1Z2luV29ybGQoKSktPndpbmRvdygpOwogICAgICAgICAgICAgQVNTRVJUKHdpbik7CisgICAg
ICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHdpbi0+Z2xvYmFsRXhlYygpKTsKICAgICAg
ICAgICAgIEJpbmRpbmdzOjpSb290T2JqZWN0KiByb290ID0gYmluZGluZ1Jvb3RPYmplY3QoKTsK
ICAgICAgICAgICAgIG1fd2luZG93U2NyaXB0TlBPYmplY3QgPSBfTlBOX0NyZWF0ZVNjcmlwdE9i
amVjdCgwLCB3aW4sIHJvb3QpOwogICAgICAgICB9IGVsc2UgewpAQCAtMzgzLDggKzM4NCw4IEBA
IEpTT2JqZWN0KiBTY3JpcHRDb250cm9sbGVyOjpqc09iamVjdEZvclAKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICAvLyBDcmVhdGUgYSBKU09iamVjdCBib3VuZCB0byB0aGlzIGVsZW1lbnQKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTRE9NV2luZG93KiBn
bG9iYWxPYmogPSBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZ2xvYmFsT2JqLT5nbG9iYWxFeGVjKCkpOwogICAgIC8vIEZJWE1FOiBpcyBub3JtYWwg
b2theT8gLSB1c2VkIGZvciBOUCBwbHVnaW5zPwogICAgIEpTVmFsdWUganNFbGVtZW50VmFsdWUg
PSB0b0pTKGdsb2JhbE9iai0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmosIHBsdWdpbik7CiAgICAg
aWYgKCFqc0VsZW1lbnRWYWx1ZSB8fCAhanNFbGVtZW50VmFsdWUuaXNPYmplY3QoKSkKQEAgLTQx
OCw3ICs0MTksNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRPYmplCiAK
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKCkKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgUm9vdE9iamVjdE1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yb290T2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKFJv
b3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yb290T2JqZWN0cy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTExMSw3ICsxMTEsNyBAQCBXZWJTY3JpcHRPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OndpbmRv
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFtX3dpbmRvd1NjcmlwdE9iamVjdCkgewot
ICAgICAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICAgICAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdCA9IGJp
bmRpbmdSb290T2JqZWN0KCk7CiAgICAgICAgIG1fd2luZG93U2NyaXB0T2JqZWN0ID0gW1dlYlNj
cmlwdE9iamVjdCBzY3JpcHRPYmplY3RGb3JKU09iamVjdDp0b1JlZih3aW5kb3dTaGVsbChwbHVn
aW5Xb3JsZCgpKSkgb3JpZ2luUm9vdE9iamVjdDpyb290IHJvb3RPYmplY3Q6cm9vdF07CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2Vy
dmVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNyArMjIyLDcgQEAg
dm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXVzZQogICAgIHsKICAgICAgICAg
aWYgKG1fY3VycmVudENhbGxGcmFtZS0+aXNWYWxpZCgpICYmIGdsb2JhbE9iamVjdC0+aW5oZXJp
dHMoJkpTRE9NR2xvYmFsT2JqZWN0OjpzX2luZm8pKSB7CiAgICAgICAgICAgICBKU0RPTUdsb2Jh
bE9iamVjdCogZG9tR2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhzdGF0ZSk7CiAgICAgICAgICAgICBq
c0NhbGxGcmFtZSA9IHRvSlMoc3RhdGUsIGRvbUdsb2JhbE9iamVjdCwgbV9jdXJyZW50Q2FsbEZy
YW1lLmdldCgpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBqc0NhbGxGcmFtZSA9IGpz
VW5kZWZpbmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRFdmVu
dExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk4LDcgKzk4LDcgQEAgU3RyaW5nIGV2ZW50TGlzdGVuZXJIYW5kbGVyQm9keShEb2N1bWVudAog
ICAgIEFTU0VSVChqc0xpc3RlbmVyKTsKICAgICBpZiAoIWpzTGlzdGVuZXIpCiAgICAgICAgIHJl
dHVybiAiIjsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGpzTGlzdGVuZXItPmlzb2xhdGVkV29ybGQoKS0+Z2xvYmFsRGF0YSgp
KTsKICAgICBKU0M6OkpTT2JqZWN0KiBqc0Z1bmN0aW9uID0ganNMaXN0ZW5lci0+anNGdW5jdGlv
bihkb2N1bWVudCk7CiAgICAgaWYgKCFqc0Z1bmN0aW9uKQogICAgICAgICByZXR1cm4gIiI7CkBA
IC0xMTIsNyArMTEyLDcgQEAgYm9vbCBldmVudExpc3RlbmVySGFuZGxlckxvY2F0aW9uKERvY3Vt
ZQogICAgIEFTU0VSVChqc0xpc3RlbmVyKTsKICAgICBpZiAoIWpzTGlzdGVuZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGpzTGlzdGVuZXItPmlzb2xhdGVkV29ybGQoKS0+Z2xvYmFs
RGF0YSgpKTsKICAgICBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCA9IGpzTGlzdGVuZXItPmpzRnVu
Y3Rpb24oZG9jdW1lbnQpOwogICAgIGlmICghanNPYmplY3QpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rp
b25DYWxsLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTkgKzU4LDE5
IEBAIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXIKIAogdm9pZCBTY3Jp
cHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBTdHJpbmcmIGFyZ3Vt
ZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNTdHJpbmco
bV9leGVjLCBhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6
OmFwcGVuZEFyZ3VtZW50KGNvbnN0IEpTQzo6VVN0cmluZyYgYXJndW1lbnQpCiB7Ci0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayht
X2V4ZWMpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc1N0cmluZyhtX2V4ZWMsIGFyZ3VtZW50
KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQo
Y29uc3QgY2hhciogYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1lbnRz
LmFwcGVuZChqc1N0cmluZyhtX2V4ZWMsIFVTdHJpbmcoYXJndW1lbnQpKSk7CiB9CiAKQEAgLTgx
LDMxICs4MSwzMSBAQCB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyCiAK
IHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQobG9uZyBhcmd1
bWVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVy
KGFyZ3VtZW50KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5k
QXJndW1lbnQobG9uZyBsb25nIGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2Fy
Z3VtZW50cy5hcHBlbmQoanNOdW1iZXIoYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBpbnQgYXJndW1lbnQpCiB7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihhcmd1bWVu
dCkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50
KHVuc2lnbmVkIGxvbmcgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1l
bnRzLmFwcGVuZChqc051bWJlcihhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxBcmd1
bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGludCBhcmd1bWVudCkKIHsKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhl
Yyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGFyZ3VtZW50KSk7CiB9CiAKQEAg
LTEyNSw3ICsxMjUsNyBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9v
CiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBtX3RoaXNPYmplY3QuanNPYmplY3QoKTsK
IAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sobV9leGVjKTsKIAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSB0aGlzT2JqZWN0LT5n
ZXQobV9leGVjLCBJZGVudGlmaWVyKG1fZXhlYywgc3RyaW5nVG9VU3RyaW5nKG1fbmFtZSkpKTsK
ICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgewpAQCAtMTYzLDcgKzE2Myw3IEBAIFNj
cmlwdE9iamVjdCBTY3JpcHRGdW5jdGlvbkNhbGw6OmNvbnN0cnUKIHsKICAgICBKU09iamVjdCog
dGhpc09iamVjdCA9IG1fdGhpc09iamVjdC5qc09iamVjdCgpOwogCi0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwog
CiAgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0gYXNPYmplY3QodGhpc09iamVjdC0+Z2V0KG1f
ZXhlYywgSWRlbnRpZmllcihtX2V4ZWMsIHN0cmluZ1RvVVN0cmluZyhtX25hbWUpKSkpOwogICAg
IGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC0yMDUsNyArMjA1LDcgQEAgU2NyaXB0
VmFsdWUgU2NyaXB0Q2FsbGJhY2s6OmNhbGwoKQogCiBTY3JpcHRWYWx1ZSBTY3JpcHRDYWxsYmFj
azo6Y2FsbChib29sJiBoYWRFeGNlcHRpb24pCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogCiAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShtX2Z1
bmN0aW9uLmpzVmFsdWUoKSwgY2FsbERhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3
ICs2Nyw3IEBAIHN0YXRpYyBib29sIGhhbmRsZUV4Y2VwdGlvbihTY3JpcHRTdGF0ZSoKIAogYm9v
bCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0
IGNoYXIqIG5hbWUsIGNvbnN0IFNjcmlwdE9iamVjdCYgdmFsdWUpCiB7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRT
dGF0ZSk7CiAgICAgc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHV0RGlyZWN0
KHNjcmlwdFN0YXRlLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUp
LCB2YWx1ZS5qc09iamVjdCgpKTsKICAgICByZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0
YXRlKTsKIH0KQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChT
Y3JpcHRTdGF0ZQogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiBib29sIFNjcmlwdEdsb2JhbE9iamVj
dDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgSW5zcGVj
dG9yRnJvbnRlbmRIb3N0KiB2YWx1ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgZ2xvYmFsT2JqZWN0LT5w
dXREaXJlY3Qoc2NyaXB0U3RhdGUtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihzY3JpcHRTdGF0
ZSwgbmFtZSksIHRvSlMoc2NyaXB0U3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpKTsKICAgICBy
ZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKQEAgLTgzLDcgKzgzLDcgQEAgYm9v
bCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZQogCiBib29sIFNjcmlwdEdsb2Jh
bE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwg
SW5qZWN0ZWRTY3JpcHRIb3N0KiB2YWx1ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgZ2xvYmFsT2JqZWN0
LT5wdXREaXJlY3Qoc2NyaXB0U3RhdGUtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihzY3JpcHRT
dGF0ZSwgbmFtZSksIHRvSlMoc2NyaXB0U3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpKTsKICAg
ICByZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKQEAgLTkyLDcgKzkyLDcgQEAg
Ym9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZQogCiBib29sIFNjcmlwdEds
b2JhbE9iamVjdDo6Z2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFt
ZSwgU2NyaXB0T2JqZWN0JiB2YWx1ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nZXQoc2Ny
aXB0U3RhdGUsIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpKTsKICAgICBpZiAoIWpzVmFs
dWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNiw3ICsxMDYsNyBAQCBib29sIFNjcmlw
dEdsb2JhbE9iamVjdDo6Z2V0KFNjcmlwdFN0YXRlCiAKIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0
OjpyZW1vdmUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lKQogewot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soc2NyaXB0U3RhdGUpOwogICAgIHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIHNjcmlwdFN0YXRlLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSk7
CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgYm9vbCBTY3JpcHRWYWx1ZTo6Z2V0U3RyaW5nKFNjcmlw
dFN0YXRlKgogewogICAgIGlmICghbV92YWx1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soc2NyaXB0U3RhdGUpOwogICAgIFVTdHJpbmcgdXN0cmluZzsKICAgICBpZiAoIW1fdmFsdWUu
Z2V0KCkuZ2V0U3RyaW5nKHNjcmlwdFN0YXRlLCB1c3RyaW5nKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTc1LDYgKzE3NSw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBqc1RvSW4KIAogUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gU2NyaXB0VmFsdWU6OnRvSW5z
cGVjdG9yVmFsdWUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKSBjb25zdAogeworICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGhvbGRlcihzY3JpcHRTdGF0ZSk7CiAgICAgcmV0dXJuIGpzVG9JbnNwZWN0
b3JWYWx1ZShzY3JpcHRTdGF0ZSwgbV92YWx1ZS5nZXQoKSwgSW5zcGVjdG9yVmFsdWU6Om1heERl
cHRoKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlw
dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIFdvcmtlclNj
cmlwdENvbnRyb2xsZXI6OldvcmtlclNjcmlwdENvbnQKIAogV29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6fldvcmtlclNjcmlwdENvbnRyb2xsZXIoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSgpKTsKICAg
ICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLmNsZWFyKCk7CiAgICAgbV9nbG9iYWxEYXRhLmNsZWFy
KCk7CiB9CkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6aW5p
dFNjcmlwdCgKIHsKICAgICBBU1NFUlQoIW1fd29ya2VyQ29udGV4dFdyYXBwZXIpOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhtX2dsb2JhbERhdGEuZ2V0KCkpOwogCiAgICAgLy8gRXhwbGljaXRseSBwcm90ZWN0IHRoZSBn
bG9iYWwgb2JqZWN0J3MgcHJvdG90eXBlIHNvIGl0IGlzbid0IGNvbGxlY3RlZAogICAgIC8vIHdo
ZW4gd2UgYWxsb2NhdGUgdGhlIGdsb2JhbCBvYmplY3QuIChPbmNlIHRoZSBnbG9iYWwgb2JqZWN0
IGlzIGZ1bGx5CkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVy
OjpldmFsdWF0ZShjbwogICAgIFNjcmlwdFZhbHVlIGV4Y2VwdGlvbjsKICAgICBldmFsdWF0ZShz
b3VyY2VDb2RlLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9uLmpzVmFsdWUoKSkgewot
ICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhKCkpOwogICAgICAgICByZXBvcnRFeGNlcHRpb24obV93
b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRXhlYygpLCBleGNlcHRpb24uanNWYWx1ZSgpKTsK
ICAgICB9CiB9CkBAIC0xMjgsOSArMTI4LDkgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVy
OjpldmFsdWF0ZShjbwogICAgICAgICByZXR1cm47CiAKICAgICBpbml0U2NyaXB0SWZOZWVkZWQo
KTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRXhlYygpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xv
YmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7CiAKQEAgLTE5MSw3ICsxOTEsNyBAQCBi
b29sIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmlzRXhlY3V0aW9uCiB2b2lkIFdvcmtlclNjcmlw
dENvbnRyb2xsZXI6OmRpc2FibGVFdmFsKCkKIHsKICAgICBpbml0U2NyaXB0SWZOZWVkZWQoKTsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGdsb2JhbERhdGEoKSk7CiAKICAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5zZXRF
dmFsRW5hYmxlZChmYWxzZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpj
L1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEyMiwxMyArMTIyLDEyIEBAICsgKGlkKXNjcmlwdE9iamVjdEZvckpTT2JqZWN0OihKU09iamVj
dFIKIAogc3RhdGljIHZvaWQgX2RpZEV4ZWN1dGUoV2ViU2NyaXB0T2JqZWN0ICpvYmopCiB7Ci0g
ICAgQVNTRVJUKEpTTG9jazo6bG9ja0NvdW50KCkgPiAwKTsKLSAgICAKICAgICBSb290T2JqZWN0
KiByb290ID0gW29iaiBfcm9vdE9iamVjdF07CiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1
cm47CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOworICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuYXBpTG9jaygpLmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIEtKU0RpZEV4ZWN1dGVGdW5jdGlvblB0ciBmdW5j
ID0gSW5zdGFuY2U6OmRpZEV4ZWN1dGVGdW5jdGlvbigpOwogICAgIGlmIChmdW5jKQogICAgICAg
ICBmdW5jKGV4ZWMsIHJvb3QtPmdsb2JhbE9iamVjdCgpKTsKQEAgLTE0OCwxOSArMTQ3LDI1IEBA
IC0gKHZvaWQpX3NldEltcDooSlNPYmplY3QqKWltcCBvcmlnaW5Sb28KIAogICAgIFdlYkNvcmU6
OmFkZEpTV3JhcHBlcihzZWxmLCBpbXApOwogCi0gICAgaWYgKF9wcml2YXRlLT5yb290T2JqZWN0
KQorICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCkgeworICAgICAgICBKU0xvY2tIb2xkZXIg
aG9sZGVyKCZfcHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEo
KSk7CiAgICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5nY1Byb3RlY3QoaW1wKTsKKyAgICB9
CiB9CiAKIC0gKHZvaWQpX3NldE9yaWdpblJvb3RPYmplY3Q6KFBhc3NSZWZQdHI8Um9vdE9iamVj
dD4pb3JpZ2luUm9vdE9iamVjdCBhbmRSb290T2JqZWN0OihQYXNzUmVmUHRyPFJvb3RPYmplY3Q+
KXJvb3RPYmplY3QKIHsKICAgICBBU1NFUlQoX3ByaXZhdGUtPmltcCk7CiAKLSAgICBpZiAocm9v
dE9iamVjdCkKKyAgICBpZiAocm9vdE9iamVjdCkgeworICAgICAgICBKU0xvY2tIb2xkZXIgaG9s
ZGVyKCZyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKICAgICAgICAg
cm9vdE9iamVjdC0+Z2NQcm90ZWN0KF9wcml2YXRlLT5pbXApOworICAgIH0KIAotICAgIGlmIChf
cHJpdmF0ZS0+cm9vdE9iamVjdCAmJiBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+aXNWYWxpZCgpKQor
ICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCAmJiBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+aXNW
YWxpZCgpKSB7CisgICAgICAgIEpTTG9ja0hvbGRlciBob2xkZXIoJl9wcml2YXRlLT5yb290T2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKICAgICAgICAgX3ByaXZhdGUtPnJv
b3RPYmplY3QtPmdjVW5wcm90ZWN0KF9wcml2YXRlLT5pbXApOworICAgIH0KIAogICAgIGlmIChf
cHJpdmF0ZS0+cm9vdE9iamVjdCkKICAgICAgICAgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmRlcmVm
KCk7CkBAIC0yMzIsOCArMjM3LDEwIEBAIC0gKHZvaWQpZGVhbGxvYwogICAgIGlmIChfcHJpdmF0
ZS0+aW1wKQogICAgICAgICBXZWJDb3JlOjpyZW1vdmVKU1dyYXBwZXIoX3ByaXZhdGUtPmltcCk7
CiAKLSAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmplY3Qt
PmlzVmFsaWQoKSkKKyAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJv
b3RPYmplY3QtPmlzVmFsaWQoKSkgeworICAgICAgICBKU0xvY2tIb2xkZXIgaG9sZGVyKCZfcHJp
dmF0ZS0+cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgICAg
IF9wcml2YXRlLT5yb290T2JqZWN0LT5nY1VucHJvdGVjdChfcHJpdmF0ZS0+aW1wKTsKKyAgICB9
CiAKICAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QpCiAgICAgICAgIF9wcml2YXRlLT5yb290
T2JqZWN0LT5kZXJlZigpOwpAQCAtMjQ4LDggKzI1NSwxMCBAQCAtICh2b2lkKWRlYWxsb2MKIAog
LSAodm9pZClmaW5hbGl6ZQogewotICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCAmJiBfcHJp
dmF0ZS0+cm9vdE9iamVjdC0+aXNWYWxpZCgpKQorICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVj
dCAmJiBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+aXNWYWxpZCgpKSB7CisgICAgICAgIEpTTG9ja0hv
bGRlciBob2xkZXIoJl9wcml2YXRlLT5yb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RGF0YSgpKTsKICAgICAgICAgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmdjVW5wcm90ZWN0KF9wcml2
YXRlLT5pbXApOworICAgIH0KIAogICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCkKICAgICAg
ICAgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmRlcmVmKCk7CkBAIC0yODEsMTAgKzI5MCw5IEBAIC0g
KGlkKWNhbGxXZWJTY3JpcHRNZXRob2Q6KE5TU3RyaW5nICopbmEKICAgICBpZiAoIVtzZWxmIF9p
c1NhZmVTY3JpcHRdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAKICAgICAvLyBMb29rIHVwIHRoZSBmdW5jdGlvbiBv
YmplY3QuCiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9
IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBzdHJpbmdUb1VTdHJpbmco
U3RyaW5nKG5hbWUpKSkpOwpAQCAtMzI1LDcgKzMzMyw3IEBAIC0gKGlkKWV2YWx1YXRlV2ViU2Ny
aXB0OihOU1N0cmluZyAqKXNjcmkKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9i
amVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5o
YWRFeGNlcHRpb24oKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAogICAgIFtzZWxmIF9yb290T2Jq
ZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgp
OwogICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1
YXRlKGV4ZWMsIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3Bl
Q2hhaW4oKSwgbWFrZVNvdXJjZShTdHJpbmcoc2NyaXB0KSksIEpTQzo6SlNWYWx1ZSgpLCAwKTsK
QEAgLTM0Niw3ICszNTQsNyBAQCAtICh2b2lkKXNldFZhbHVlOihpZCl2YWx1ZSBmb3JLZXk6KE5T
U3RyCiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwog
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIFtzZWxmIF9p
bXBdLT5tZXRob2RUYWJsZSgpLT5wdXQoW3NlbGYgX2ltcF0sIGV4ZWMsIElkZW50aWZpZXIoZXhl
Yywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhrZXkpKSksIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVl
KGV4ZWMsICZ2YWx1ZSwgT2JqY09iamVjdFR5cGUsIFtzZWxmIF9yb290T2JqZWN0XSksIHNsb3Qp
OwpAQCAtMzcyLDcgKzM4MCw3IEBAIC0gKGlkKXZhbHVlRm9yS2V5OihOU1N0cmluZyAqKWtleQog
ICAgICAgICAvLyBOZWVkIHRvIHNjb3BlIHRoaXMgbG9jayB0byBlbnN1cmUgdGhhdCB3ZSByZWxl
YXNlIHRoZSBsb2NrIGJlZm9yZSBjYWxsaW5nCiAgICAgICAgIC8vIFtzdXBlciB2YWx1ZUZvcktl
eTprZXldIHdoaWNoIG1pZ2h0IHRocm93IGFuIGV4Y2VwdGlvbiBhbmQgYnlwYXNzIHRoZSBKU0xv
Y2sgZGVzdHJ1Y3RvciwKICAgICAgICAgLy8gbGVhdmluZyB0aGUgbG9jayBwZXJtYW5lbnRseSBo
ZWxkCi0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAKICAgICAgICAgSlNWYWx1ZSByZXN1
bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3Ry
aW5nKFN0cmluZyhrZXkpKSkpOwogICAgICAgICAKQEAgLTM4OCw3ICszOTYsNyBAQCAtIChpZCl2
YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkKICAgICBpZiAoW3Jlc3VsdE9iaiBpc0tpbmRPZkNs
YXNzOltXZWJVbmRlZmluZWQgY2xhc3NdXSkKICAgICAgICAgcmVzdWx0T2JqID0gW3N1cGVyIHZh
bHVlRm9yS2V5OmtleV07ICAgIC8vIGRlZmF1bHRzIHRvIHRocm93aW5nIGFuIGV4Y2VwdGlvbgog
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBfZGlkRXhlY3V0ZShzZWxmKTsKICAgICAKICAgICByZXR1cm4g
cmVzdWx0T2JqOwpAQCAtNDAyLDcgKzQxMCw3IEBAIC0gKHZvaWQpcmVtb3ZlV2ViU2NyaXB0S2V5
OihOU1N0cmluZyAqKWsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0t
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNl
cHRpb24oKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgp
LT5kZWxldGVQcm9wZXJ0eShbc2VsZiBfaW1wXSwgZXhlYywgSWRlbnRpZmllcihleGVjLCBzdHJp
bmdUb1VTdHJpbmcoU3RyaW5nKGtleSkpKSk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsKQEAgLTQyMSw3ICs0MjksNyBAQCAtIChCT09MKWhhc1dlYlNjcmlwdEtleTooTlNTdHJp
bmcgKilrZXkKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24o
KSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEJPT0wgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmhhc1By
b3BlcnR5KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhrZXkp
KSkpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC00NDEsOCArNDQ5LDgg
QEAgLSAoTlNTdHJpbmcgKilzdHJpbmdSZXByZXNlbnRhdGlvbgogICAgICAgICByZXR1cm4gQCJV
bmRlZmluZWQiOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAog
ICAgIGlkIHJlc3VsdCA9IGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKGV4ZWMsIFtzZWxmIF9pbXBd
LCBPYmpjT2JqZWN0VHlwZSkub2JqZWN0VmFsdWU7CiAKQEAgLTQ2MSw3ICs0NjksNyBAQCAtIChp
ZCl3ZWJTY3JpcHRWYWx1ZUF0SW5kZXg6KHVuc2lnbmVkKWluCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAg
IEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgaW5kZXgpOwogCiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC00ODUsNyArNDkzLDcgQEAgLSAodm9pZClzZXRXZWJT
Y3JpcHRWYWx1ZUF0SW5kZXg6KHVuc2lnbgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9y
b290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQoIWV4
ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgW3NlbGYgX2ltcF0tPm1l
dGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoW3NlbGYgX2ltcF0sIGV4ZWMsIGluZGV4LCBjb252ZXJ0
T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBfcm9v
dE9iamVjdF0pLCBmYWxzZSk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKQEAg
LTUxNSw3ICs1MjMsNyBAQCArIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTVmFsdWUp
CiB7CiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2socm9vdE9iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbERhdGEoKSk7CiAKICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkpT
SFRNTEVsZW1lbnQ6OnNfaW5mbykpIHsKICAgICAgICAgICAgIC8vIFBsdWdpbiBlbGVtZW50cyBj
YWNoZSB0aGUgaW5zdGFuY2UgaW50ZXJuYWxseS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQko
d29ya2luZyBjb3B5KQpAQCAtMjczMyw3ICsyNzMzLDcgQEAgRU5ECiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpXG4iKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcblxuIik7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JGNsYXNzTmFtZT4gcHJv
dGVjdCh0aGlzKTtcblxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpO1xuXG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbERhdGEoKSk7XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzO1xuIik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcAkocmV2
aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBib29s
IEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhOb1BhcmFtCiAKICAgICBSZWZQdHI8SlNUZXN0
Q2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbERhdGEoKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKQEAg
LTgyLDcgKzgyLDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUAog
CiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2Rh
dGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7CkBAIC0xMDAsNyArMTAwLDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6
Y2FsbGJhY2tXaXRoQ2xhc3MyUAogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0
KHRoaXMpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwog
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC0xMTksNyArMTE5LDcgQEAg
Ym9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoU3RyaW5nTAogCiAgICAgUmVmUHRyPEpT
VGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
CkBAIC0xMzcsNyArMTM3LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQm9v
bGVhbgogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRl
KiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC0xNTcsNyArMTU3LDcgQEAgYm9vbCBKU1Rlc3RDYWxs
YmFjazo6Y2FsbGJhY2tSZXF1aXJlc1RoaQogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBw
cm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw3ICsx
NzcsNyBAQCBib29sIF9OUE5fSW52b2tlRGVmYXVsdChOUFAsIE5QT2JqZWN0KiBvCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9uIG9iamVjdC4KICAg
ICAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iai0+aW1wOwpAQCAtMjI1LDcgKzIyNSw3IEBAIGJv
b2wgX05QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmplY3QqIG8sIE4KICAgICAgICAgaWYgKCFyb290
T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBKU1ZhbHVlIGZ1
bmN0aW9uID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihl
eGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwpAQCAt
MjY0LDcgKzI2NCw3IEBAIGJvb2wgX05QTl9FdmFsdWF0ZShOUFAgaW5zdGFuY2UsIE5QT2JqZWMK
ICAgICAgICAgUGx1Z2luVmlldzo6a2VlcEFsaXZlKGluc3RhbmNlKTsKIAogICAgICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwot
ICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgU3RyaW5nIHNjcmlwdFN0cmluZyA9IGNvbnZl
cnROUFN0cmluZ1RvVVRGMTYocyk7CiAgICAgICAgIAogICAgICAgICBKU1ZhbHVlIHJldHVyblZh
bHVlID0gSlNDOjpldmFsdWF0ZShyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtl
U291cmNlKHNjcmlwdFN0cmluZyksIEpTQzo6SlNWYWx1ZSgpKTsKQEAgLTI5MCw3ICsyOTAsNyBA
QCBib29sIF9OUE5fR2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAg
ICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJv
cGVydHlOYW1lKTsKICAgICAgICAgCi0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBKU1Zh
bHVlIHJlc3VsdDsKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpCiAgICAgICAgICAgICByZXN1
bHQgPSBvYmotPmltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMs
IGktPnN0cmluZygpKSk7CkBAIC0zMjIsNyArMzIyLDcgQEAgYm9vbCBfTlBOX1NldFByb3BlcnR5
KE5QUCwgTlBPYmplY3QqIG8sIAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3Rh
dGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7CiAKICAgICAgICAgaWYgKGkt
PmlzU3RyaW5nKCkpIHsKQEAgLTM2Myw3ICszNjMsNyBAQCBib29sIF9OUE5fUmVtb3ZlUHJvcGVy
dHkoTlBQLCBOUE9iamVjdCogCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpCiAgICAgICAgICAgICBvYmot
PmltcC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqLT5pbXAsIGV4ZWMsIGlkZW50
aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSk7CiAgICAgICAgIGVsc2UK
QEAgLTM4Niw3ICszODYsNyBAQCBib29sIF9OUE5fSGFzUHJvcGVydHkoTlBQLCBOUE9iamVjdCog
bywgCiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0
PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwotICAgICAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICAgICAgaWYgKGktPmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gb2Jq
LT5pbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMs
IGktPnN0cmluZygpKSk7CiAgICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwpAQCAt
NDE4LDcgKzQxOCw3IEBAIGJvb2wgX05QTl9IYXNNZXRob2QoTlBQLCBOUE9iamVjdCogbywgTlAK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKICAgICAgICAgSlNWYWx1ZSBmdW5jID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlm
aWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gIWZ1bmMuaXNVbmRlZmluZWQoKTsKQEAg
LTQ0Nyw3ICs0NDcsNyBAQCBib29sIF9OUE5fRW51bWVyYXRlKE5QUCwgTlBPYmplY3QqIG8sIE5Q
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhl
eGVjKTsKIAogICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1l
cyhvYmotPmltcCwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRFbnVtUHJvcGVydGll
cyk7CkBAIC00ODQsNyArNDg0LDcgQEAgYm9vbCBfTlBOX0NvbnN0cnVjdChOUFAsIE5QT2JqZWN0
KiBvLCBjbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgRXhl
Y1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
LSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoZSBjb25z
dHJ1Y3RvciBvYmplY3QuCiAgICAgICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBvYmotPmltcDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfY2xhc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfY2xhc3MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCiAjaW5jbHVkZSA8cnVu
dGltZS9TY29wZUNoYWluLmg+CiAjaW5jbHVkZSA8cnVudGltZS9JZGVudGlmaWVyLmg+CisjaW5j
bHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2Nr
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KQEAgLTQ3LDcgKzQ4LDcgQEAgQ0NsYXNzOjpDQ2xhc3MoTlBDbGFzcyogYUNs
YXNzKQogCiBDQ2xhc3M6On5DQ2xhc3MoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNMb2NrIGhl
cmU/CiAKICAgICBkZWxldGVBbGxWYWx1ZXMoX21ldGhvZHMpOwogICAgIF9tZXRob2RzLmNsZWFy
KCk7CkBAIC05MSw3ICs5Miw3IEBAIE1ldGhvZExpc3QgQ0NsYXNzOjptZXRob2RzTmFtZWQoUHJv
cGVydHkKICAgICBpZiAoX2lzYS0+aGFzTWV0aG9kICYmIF9pc2EtPmhhc01ldGhvZChvYmosIGlk
ZW50KSl7CiAgICAgICAgIE1ldGhvZCogYU1ldGhvZCA9IG5ldyBDTWV0aG9kKGlkZW50KTsgLy8g
ZGVsZXRlZCBpbiB0aGUgQ0NsYXNzIGRlc3RydWN0b3IKICAgICAgICAgewotICAgICAgICAgICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrKGluc3QtPnJvb3RPYmplY3QoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEo
KSk7CiAgICAgICAgICAgICBfbWV0aG9kcy5zZXQobmFtZS5pbXBsKCksIGFNZXRob2QpOwogICAg
ICAgICB9CiAgICAgICAgIG1ldGhvZExpc3QuYXBwZW5kKGFNZXRob2QpOwpAQCAtMTE0LDcgKzEx
NSw3IEBAIEZpZWxkKiBDQ2xhc3M6OmZpZWxkTmFtZWQoUHJvcGVydHlOYW1lIHAKICAgICBpZiAo
X2lzYS0+aGFzUHJvcGVydHkgJiYgX2lzYS0+aGFzUHJvcGVydHkob2JqLCBpZGVudCkpewogICAg
ICAgICBhRmllbGQgPSBuZXcgQ0ZpZWxkKGlkZW50KTsgLy8gZGVsZXRlZCBpbiB0aGUgQ0NsYXNz
IGRlc3RydWN0b3IKICAgICAgICAgewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGluc3QtPnJvb3RP
YmplY3QoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBfZmll
bGRzLnNldChuYW1lLmltcGwoKSwgYUZpZWxkKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzMsNyArNzMsNyBAQCB2b2lkIENJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlCiAg
ICAgICAgIHJldHVybjsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHRo
cm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkp
KTsKICAgICB9CiAKQEAgLTE4Miw3ICsxODIsNyBAQCBKU1ZhbHVlIENJbnN0YW5jZTo6aW52b2tl
TWV0aG9kKEV4ZWNTdGF0CiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0VmFyaWFudCk7CiAK
ICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoZXhlYyk7CiAgICAgICAgIEFTU0VSVChnbG9iYWxFeGNlcHRpb25TdHJpbmcoKS5pc051bGwo
KSk7CiAgICAgICAgIHJldHZhbCA9IF9vYmplY3QtPl9jbGFzcy0+aW52b2tlKF9vYmplY3QsIGlk
ZW50LCBjQXJncy5kYXRhKCksIGNvdW50LCAmcmVzdWx0VmFyaWFudCk7CiAgICAgICAgIG1vdmVH
bG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKQEAgLTIxNyw3ICsyMTcsNyBAQCBKU1Zh
bHVlIENJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChFCiAgICAgTlBWYXJpYW50IHJlc3Vs
dFZhcmlhbnQ7CiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0VmFyaWFudCk7CiAgICAgewot
ICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMp
OwogICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAg
ICAgICByZXR2YWwgPSBfb2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQoX29iamVjdCwgY0Fy
Z3MuZGF0YSgpLCBjb3VudCwgJnJlc3VsdFZhcmlhbnQpOwogICAgICAgICBtb3ZlR2xvYmFsRXhj
ZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CkBAIC0yNTYsNyArMjU2LDcgQEAgSlNWYWx1ZSBDSW5z
dGFuY2U6Omludm9rZUNvbnN0cnVjdChFeGVjUwogICAgIE5QVmFyaWFudCByZXN1bHRWYXJpYW50
OwogICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdFZhcmlhbnQpOwogICAgIHsKLSAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAg
ICAgQVNTRVJUKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVsbCgpKTsKICAgICAgICAgcmV0
dmFsID0gX29iamVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QoX29iamVjdCwgY0FyZ3MuZGF0YSgpLCBj
b3VudCwgJnJlc3VsdFZhcmlhbnQpOwogICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVj
U3RhdGUoZXhlYyk7CkBAIC0zMTUsNyArMzE1LDcgQEAgdm9pZCBDSW5zdGFuY2U6OmdldFByb3Bl
cnR5TmFtZXMoRXhlY1N0YQogICAgIE5QSWRlbnRpZmllciogaWRlbnRpZmllcnM7CiAKICAgICB7
Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhl
Yyk7CiAgICAgICAgIEFTU0VSVChnbG9iYWxFeGNlcHRpb25TdHJpbmcoKS5pc051bGwoKSk7CiAg
ICAgICAgIGJvb2wgb2sgPSBfb2JqZWN0LT5fY2xhc3MtPmVudW1lcmF0ZShfb2JqZWN0LCAmaWRl
bnRpZmllcnMsICZjb3VudCk7CiAgICAgICAgIG1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0
ZShleGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19ydW50aW1lLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19ydW50aW1lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBKU1ZhbHVlIENGaWVsZDo6dmFsdWVGcm9tSW5z
dGFuY2UoRXhlY1N0CiAKICAgICAgICAgYm9vbCByZXN1bHQ7CiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMp
OwogICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5fY2xhc3MtPmdldFByb3BlcnR5KG9iaiwgX2Zp
ZWxkSWRlbnRpZmllciwgJnByb3BlcnR5KTsKICAgICAgICAgICAgIENJbnN0YW5jZTo6bW92ZUds
b2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgICAgICB9CkBAIC03MSw3ICs3MSw3
IEBAIHZvaWQgQ0ZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXQKICAgICAgICAgY29u
dmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgYVZhbHVlLCAmdmFyaWFudCk7CiAKICAgICAgICAg
ewotICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoZXhlYyk7CiAgICAgICAgICAgICBvYmotPl9jbGFzcy0+c2V0UHJvcGVydHkob2JqLCBf
ZmllbGRJZGVudGlmaWVyLCAmdmFyaWFudCk7CiAgICAgICAgICAgICBDSW5zdGFuY2U6Om1vdmVH
bG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKICAgICAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2
OCw3IEBAIHN0YXRpYyBTdHJpbmcgY29udmVydFVURjhUb1VURjE2V2l0aExhdGkKIC8vIFZhcmlh
bnQgdmFsdWUgbXVzdCBiZSByZWxlYXNlZCB3aXRoIE5QUmVsZWFzZVZhcmlhbnRWYWx1ZSgpCiB2
b2lkIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSwgTlBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIFZPSURfVE9fTlBW
QVJJQU5UKCpyZXN1bHQpOwogCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBjb252ZXJ0VmFsdWVU
b05QVmFyaWFudChFeGVjU3RhdGUqIAogCiBKU1ZhbHVlIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTlBWYXJpYW50KiB2YXJpYW50LCBSb290T2JqZWN0KiBy
b290T2JqZWN0KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCiAgICAgTlBWYXJpYW50VHlwZSB0eXBl
ID0gdmFyaWFudC0+dHlwZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlf
anNvYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlf
anNvYmplY3QubW0JKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvam5pX2pzb2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsNyArMjg0LDcgQEAgam9i
amVjdCBKYXZhSlNPYmplY3Q6OmNhbGwoanN0cmluZyBtZXRobwogICAgIAogICAgIC8vIExvb2t1
cCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICBJ
ZGVudGlmaWVyIGlkZW50aWZpZXIoZXhlYywgSmF2YVN0cmluZyhtZXRob2ROYW1lKS5pbXBsKCkp
OwogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBfaW1wLT5nZXQoZXhlYywgaWRlbnRpZmllcik7CkBA
IC0zMDcsMTIgKzMwNywxMiBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6ZXZhbChqc3RyaW5nIHNj
cmlwCiB7CiAgICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUpTT2JqZWN0OjpldmFsIHNjcmlwdCA9
ICVzIiwgSmF2YVN0cmluZyhzY3JpcHQpLnV0ZjgoKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIAogICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSB0
aGlzLT5yb290T2JqZWN0KCk7CiAgICAgaWYgKCFyb290T2JqZWN0KQogICAgICAgICByZXR1cm4g
MDsKIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxEYXRhKCkpOworICAgIAogICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RhcnQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpT
Qzo6ZXZhbHVhdGUocm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShK
YXZhU3RyaW5nKHNjcmlwdCkuaW1wbCgpKSk7CiAgICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CkBAIC0zMzAsNyArMzMwLDcg
QEAgam9iamVjdCBKYXZhSlNPYmplY3Q6OmdldE1lbWJlcihqc3RyaW5nIAogCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAg
ICAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gX2ltcC0+Z2V0KGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgSmF2YVN0cmluZyhtZW1iZXJOYW1lKS5pbXBsKCkpKTsKIAogICAgIHJl
dHVybiBjb252ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKQEAgLTM0Niw3ICszNDYsNyBAQCB2
b2lkIEphdmFKU09iamVjdDo6c2V0TWVtYmVyKGpzdHJpbmcgbWVtCiAKICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBfaW1wLT5tZXRob2RUYWJs
ZSgpLT5wdXQoX2ltcCwgZXhlYywgSWRlbnRpZmllcihleGVjLCBKYXZhU3RyaW5nKG1lbWJlck5h
bWUpLmltcGwoKSksIGNvbnZlcnRKT2JqZWN0VG9WYWx1ZShleGVjLCB2YWx1ZSksIHNsb3QpOwog
fQpAQCAtMzYxLDcgKzM2MSw3IEBAIHZvaWQgSmF2YUpTT2JqZWN0OjpyZW1vdmVNZW1iZXIoanN0
cmluZyAKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIF9pbXAt
Pm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KF9pbXAsIGV4ZWMsIElkZW50aWZpZXIoZXhl
YywgSmF2YVN0cmluZyhtZW1iZXJOYW1lKS5pbXBsKCkpKTsKIH0KIApAQCAtMzc2LDcgKzM3Niw3
IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpnZXRTbG90KGppbnQgaW5kZXgKIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gX2ltcC0+Z2V0KGV4ZWMsIGluZGV4
KTsKIAogICAgIHJldHVybiBjb252ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKQEAgLTM5Miw3
ICszOTIsNyBAQCB2b2lkIEphdmFKU09iamVjdDo6c2V0U2xvdChqaW50IGluZGV4LCBqCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBfaW1wLT5tZXRob2RUYWJs
ZSgpLT5wdXRCeUluZGV4KF9pbXAsIGV4ZWMsICh1bnNpZ25lZClpbmRleCwgY29udmVydEpPYmpl
Y3RUb1ZhbHVlKGV4ZWMsIHZhbHVlKSwgZmFsc2UpOwogfQogCkBAIC00MDUsOSArNDA1LDkgQEAg
anN0cmluZyBKYXZhSlNPYmplY3Q6OnRvU3RyaW5nKCkgY29uc3QKICAgICBpZiAoIXJvb3RPYmpl
Y3QpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKICAgICBKU09iamVjdCAqdGhpc09iaiA9IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihf
aW1wKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxqc3RyaW5nPihjb252ZXJ0VmFsdWVUb0pWYWx1ZShleGVjLCByb290
T2JqZWN0LCB0aGlzT2JqLCBKYXZhVHlwZU9iamVjdCwgImphdmEubGFuZy5TdHJpbmciKS5sKTsK
IH0KQEAgLTQ2MywxMyArNDYzLDEzIEBAIGpsb25nIEphdmFKU09iamVjdDo6Y3JlYXRlTmF0aXZl
KGpsb25nIG4KIAogam9iamVjdCBKYXZhSlNPYmplY3Q6OmNvbnZlcnRWYWx1ZVRvSk9iamVjdChK
U1ZhbHVlIHZhbHVlKSBjb25zdAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7Ci0gICAgCiAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IHRoaXMtPnJvb3RPYmpl
Y3QoKTsKICAgICBpZiAoIXJvb3RPYmplY3QpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgCiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKTklFbnYgKmVudiA9IGdl
dEpOSUVudigpOwogICAgIGpvYmplY3QgcmVzdWx0ID0gMDsKICAgICAKQEAgLTU1NCw3ICs1NTQs
NyBAQCBKU1ZhbHVlIEphdmFKU09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhCiAgICAgLy8gZmln
dXJlIDIyLTQuCiAgICAgam9iamVjdCBjbGFzc09mSW5zdGFuY2UgPSBjYWxsSk5JTWV0aG9kPGpv
YmplY3Q+KHRoZU9iamVjdCwgImdldENsYXNzIiwgIigpTGphdmEvbGFuZy9DbGFzczsiKTsKICAg
ICBpZiAoIWNsYXNzT2ZJbnN0YW5jZSkgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAg
cmV0dXJuIEphdmFJbnN0YW5jZTo6Y3JlYXRlKHRoZU9iamVjdCwgX3Jvb3RPYmplY3QpLT5jcmVh
dGVSdW50aW1lT2JqZWN0KGV4ZWMpOwogICAgIH0KIApAQCAtNTYzLDcgKzU2Myw3IEBAIEpTVmFs
dWUgSmF2YUpTT2JqZWN0Ojpjb252ZXJ0Sk9iamVjdFRvVmEKICAgICAvLyBwb2ludGVyIGFuZCBz
dG9yZXMgaXQgaW4gdGhpcyBvYmplY3QsIHNvIHRoYXQgaXQgY2FuIGJlIHJldHJpZXZlZCBiZWxv
dy4KICAgICBqc3RyaW5nIGNsYXNzTmFtZSA9IChqc3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVj
dD4oY2xhc3NPZkluc3RhbmNlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOwog
ICAgIGlmICghY2xhc3NOYW1lIHx8IChzdHJjbXAoSmF2YVN0cmluZyhjbGFzc05hbWUpLnV0Zjgo
KSwgInN1bi5wbHVnaW4uamF2YXNjcmlwdC53ZWJraXQuSlNPYmplY3QiKSAhPSAwKSkgewotICAg
ICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgcmV0dXJuIEphdmFJbnN0YW5jZTo6Y3JlYXRlKHRo
ZU9iamVjdCwgX3Jvb3RPYmplY3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfb2JqYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9vYmpjLm1tCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9vYmpjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgSlNDOjpCaW5kaW5nczo6ZGlzcGF0Y2hKTklDYWxs
KEV4ZWMKICAgICAgICAgLy8gaW1wbGVtZW50ZWQgaW4gV2ViQ29yZSB3aWxsIGd1YXJhbnRlZSB0
aGF0IG9ubHkgYXBwcm9wcmlhdGUgSmF2YVNjcmlwdAogICAgICAgICAvLyBjYW4gcmVmZXJlbmNl
IHRoZSBhcHBsZXQuCiAgICAgICAgIHsKLSAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgICAgIHJlc3VsdCA9IFt2
aWV3IHdlYlBsdWdJbkNhbGxKYXZhOm9iaiBpc1N0YXRpYzppc1N0YXRpYyByZXR1cm5UeXBlOnJl
dHVyblR5cGUgbWV0aG9kOm1ldGhvZElEIGFyZ3VtZW50czphcmdzIGNhbGxpbmdVUkw6bmlsIGV4
Y2VwdGlvbkRlc2NyaXB0aW9uOiZfZXhjZXB0aW9uRGVzY3JpcHRpb25dOwogICAgICAgICB9CiAK
QEAgLTcyLDcgKzcyLDcgQEAgYm9vbCBKU0M6OkJpbmRpbmdzOjpkaXNwYXRjaEpOSUNhbGwoRXhl
YwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgZWxzZSBpZiAoW3ZpZXcgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5DYWxsSmF2YTptZXRob2Q6cmV0dXJuVHlw
ZTphcmd1bWVudHM6KV0pIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgcmVzdWx0ID0gW3ZpZXcgd2ViUGx1Z0luQ2Fs
bEphdmE6b2JqIG1ldGhvZDptZXRob2RJRCByZXR1cm5UeXBlOnJldHVyblR5cGUgYXJndW1lbnRz
OmFyZ3NdOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJp
dmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBAQCBzdGF0aWMgam9iamVj
dCBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2CiAKIGp2YWx1ZSBjb252ZXJ0VmFsdWVUb0pWYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIFJvb3RPYmplY3QqIHJvb3RPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IEphdmFUeXBlIGphdmFUeXBlLCBjb25zdCBjaGFyKiBqYXZhQ2xhc3NOYW1lKQogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAKICAgICBqdmFsdWUgcmVzdWx0OwogICAgIG1lbXNldCgmcmVzdWx0LCAwLCBzaXpl
b2YoanZhbHVlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xh
c3NKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0ph
dmFDbGFzc0pTQy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9qbmkvanNjL0phdmFDbGFzc0pTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcg
QEAgSmF2YUNsYXNzOjpKYXZhQ2xhc3Moam9iamVjdCBhbkluc3RhbmNlKQogICAgICAgICAgICAg
am9iamVjdCBhSkZpZWxkID0gZW52LT5HZXRPYmplY3RBcnJheUVsZW1lbnQoKGpvYmplY3RBcnJh
eSlmaWVsZHMsIGkpOwogICAgICAgICAgICAgSmF2YUZpZWxkKiBhRmllbGQgPSBuZXcgSmF2YUZp
ZWxkKGVudiwgYUpGaWVsZCk7IC8vIGRlbGV0ZWQgaW4gdGhlIEphdmFDbGFzcyBkZXN0cnVjdG9y
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGFjcXVpcmUg
YSBKU0xvY2sgaGVyZT8KICAgICAgICAgICAgICAgICBtX2ZpZWxkcy5zZXQoYUZpZWxkLT5uYW1l
KCkuaW1wbCgpLCBhRmllbGQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZW52LT5EZWxl
dGVMb2NhbFJlZihhSkZpZWxkKTsKQEAgLTc5LDcgKzc5LDcgQEAgSmF2YUNsYXNzOjpKYXZhQ2xh
c3Moam9iamVjdCBhbkluc3RhbmNlKQogICAgICAgICAgICAgSmF2YU1ldGhvZCogYU1ldGhvZCA9
IG5ldyBKYXZhTWV0aG9kKGVudiwgYUpNZXRob2QpOyAvLyBkZWxldGVkIGluIHRoZSBKYXZhQ2xh
c3MgZGVzdHJ1Y3RvcgogICAgICAgICAgICAgTWV0aG9kTGlzdCogbWV0aG9kTGlzdDsKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYWNxdWlyZSBhIEpTTG9j
ayBoZXJlPwogCiAgICAgICAgICAgICAgICAgbWV0aG9kTGlzdCA9IG1fbWV0aG9kcy5nZXQoYU1l
dGhvZC0+bmFtZSgpLmltcGwoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFtZXRob2RMaXN0KSB7
CkBAIC0xMDAsNyArMTAwLDcgQEAgSmF2YUNsYXNzOjp+SmF2YUNsYXNzKCkKIHsKICAgICBmYXN0
RnJlZShjb25zdF9jYXN0PGNoYXIqPihtX25hbWUpKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNM
b2NrIGhlcmU/CiAKICAgICBkZWxldGVBbGxWYWx1ZXMobV9maWVsZHMpOwogICAgIG1fZmllbGRz
LmNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFu
Y2VKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0ph
dmFJbnN0YW5jZUpTQy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcg
Kzg3LDcgQEAgQ2xhc3MqIEphdmFJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdAogCiBKU1ZhbHVl
IEphdmFJbnN0YW5jZTo6c3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAKICAgICBqc3RyaW5nIHN0cmluZ1ZhbHVlID0gKGpzdHJpbmcpY2FsbEpOSU1l
dGhvZDxqb2JqZWN0PihtX2luc3RhbmNlLT5pbnN0YW5jZSgpLCAidG9TdHJpbmciLCAiKClMamF2
YS9sYW5nL1N0cmluZzsiKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2Mv
SmF2YU1ldGhvZEpTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2pu
aS9qc2MvSmF2YU1ldGhvZEpTQy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Miw3ICs5Miw3IEBAIEphdmFNZXRob2Q6On5KYXZhTWV0aG9kKCkKIC8vIHdlIGdldCAnLicgYmV0
d2VlbiBjb21wb25lbnRzIGZyb20gdGhlIHJlZmxlY3Rpb24gQVBJLgogc3RhdGljIHZvaWQgYXBw
ZW5kQ2xhc3NOYW1lKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IGNoYXIqIGNsYXNzTmFt
ZSkKIHsKLSAgICBBU1NFUlQoSlNMb2NrOjpsb2NrQ291bnQoKSA+IDApOworICAgIEFTU0VSVChK
U0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2UoKS5hcGlMb2NrKCkuY3VycmVudFRocmVh
ZElzSG9sZGluZ0xvY2soKSk7CiAKICAgICBjaGFyKiBjID0gZmFzdFN0ckR1cChjbGFzc05hbWUp
OwogCkBAIC0xMTEsNyArMTExLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kQ2xhc3NOYW1lKFN0cmlu
Z0J1aWxkZQogY29uc3QgY2hhciogSmF2YU1ldGhvZDo6c2lnbmF0dXJlKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fc2lnbmF0dXJlKSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYWNxdWlyZSBhIEpTTG9jayBo
ZXJlPwogCiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2lnbmF0dXJlQnVpbGRlcjsKICAgICAgICAg
c2lnbmF0dXJlQnVpbGRlci5hcHBlbmQoJygnKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9qbmkvanNjL0phdmFTdHJpbmdKU0MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlNDLmgJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFTdHJpbmdKU0MuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBKYXZhU3RyaW5nSlNDX2gKIAogI2luY2x1ZGUgIkpO
SVV0aWxpdHkuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKICNpbmNsdWRlICJKYXZh
SW5zdGFuY2VKU0MuaCIKIAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CkBAIC01MiwyMCAr
NTMsMjAgQEAgcHVibGljOgogCiAgICAgSmF2YVN0cmluZygpCiAgICAgewotICAgICAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9j
ayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAg
ICAgbV9pbXBsID0gVVN0cmluZygpLmltcGwoKTsKICAgICB9CiAKICAgICB+SmF2YVN0cmluZygp
CiAgICAgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICAgICAgICAgbV9pbXBsID0gMDsKICAgICB9CiAKICAgICBjb25zdCBj
aGFyKiB1dGY4KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghbV91dGY4U3RyaW5nLmRhdGEo
KSkgewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgbV91dGY4U3RyaW5nID0gVVN0cmluZyht
X2ltcGwpLnV0ZjgoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbV91dGY4U3RyaW5nLmRh
dGEoKTsKQEAgLTc5LDcgKzgwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgaW50IHNpemUgPSBlLT5H
ZXRTdHJpbmdMZW5ndGgocyk7CiAgICAgICAgIGNvbnN0IGpjaGFyKiB1YyA9IGdldFVDaGFyYWN0
ZXJzRnJvbUpTdHJpbmdJbkVudihlLCBzKTsKICAgICAgICAgewotICAgICAgICAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
ICAgICAgICAgbV9pbXBsID0gVVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4o
dWMpLCBzaXplKS5pbXBsKCk7CiAgICAgICAgIH0KICAgICAgICAgcmVsZWFzZVVDaGFyYWN0ZXJz
Rm9ySlN0cmluZ0luRW52KGUsIHMsIHVjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
c2MvQnJpZGdlSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNj
L0JyaWRnZUpTQy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9qc2MvQnJpZGdlSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBKU09i
amVjdCogSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoCiAgICAgaWYgKFJ1bnRpbWVPYmpl
Y3QqIGV4aXN0aW5nT2JqZWN0ID0gbV9ydW50aW1lT2JqZWN0LmdldCgpKQogICAgICAgICByZXR1
cm4gZXhpc3RpbmdPYmplY3Q7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFJ1bnRpbWVPYmplY3QqIG5l
d09iamVjdCA9IG5ld1J1bnRpbWVPYmplY3QoZXhlYyk7CiAgICAgbV9ydW50aW1lT2JqZWN0ID0g
UGFzc1dlYWs8UnVudGltZU9iamVjdD4obmV3T2JqZWN0KTsKICAgICBtX3Jvb3RPYmplY3QtPmFk
ZFJ1bnRpbWVPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdPYmplY3QpOwpAQCAtMTAxLDcg
KzEwMSw3IEBAIEpTT2JqZWN0KiBJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdCgKIAogUnVu
dGltZU9iamVjdCogSW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAKICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVy
ZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0CiAgICAg
Ly8gV2UgbmVlZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAiaSIuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0JKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2Uu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBPYmpjSW5zdGFuY2U6Om1v
dmVHbG9iYWxFeGNlcHRpb25UbwogICAgIH0KIAogICAgIGlmICghc19leGNlcHRpb25FbnZpcm9u
bWVudCB8fCBzX2V4Y2VwdGlvbkVudmlyb25tZW50ID09IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKSkgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBz
X2V4Y2VwdGlvbik7CiAgICAgfQogCkBAIC0yMzksNyArMjM5LDcgQEAgSlNWYWx1ZSBPYmpjSW5z
dGFuY2U6Omludm9rZU9iamNNZXRob2QoRQogewogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNVbmRl
ZmluZWQoKTsKICAgICAKLSAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNj
b3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRy
eSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAKICAgICBzZXRHbG9iYWxF
eGNlcHRpb24obmlsKTsKICAgICAKQEAgLTM1NCw3ICszNTQsNyBAQCBKU1ZhbHVlIE9iamNJbnN0
YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvCiB7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1VuZGVm
aW5lZCgpOwogCi0gICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBi
ZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2Nv
cGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogICAgIHNldEdsb2JhbEV4Y2VwdGlv
bihuaWwpOwogICAgIAogQHRyeSB7CkBAIC00MTEsNyArNDExLDcgQEAgYm9vbCBPYmpjSW5zdGFu
Y2U6OnNldFZhbHVlT2ZVbmRlZmluZWRGaQogICAgIGlmICghW3RhcmdldE9iamVjdCByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldFZhbHVlOmZvclVuZGVmaW5lZEtleTopXSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRy
eSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhl
IEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogCiAgICAgLy8gVGhp
cyBjaGVjayBpcyBub3QgcmVhbGx5IG5lY2Vzc2FyeSBiZWNhdXNlIE5TT2JqZWN0IGltcGxlbWVu
dHMKICAgICAvLyBzZXRWYWx1ZTpmb3JVbmRlZmluZWRLZXk6LCBhbmQgdW5mb3J0dW5hdGVseSB0
aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgpAQCAtNDQzLDcgKzQ0Myw3IEBAIEpTVmFsdWUgT2Jq
Y0luc3RhbmNlOjpnZXRWYWx1ZU9mVW5kZWZpbmUKICAgICAKICAgICBpZCB0YXJnZXRPYmplY3Qg
PSBnZXRPYmplY3QoKTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkg
c2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBA
dHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KIAogICAgIC8vIFRoaXMg
Y2hlY2sgaXMgbm90IHJlYWxseSBuZWNlc3NhcnkgYmVjYXVzZSBOU09iamVjdCBpbXBsZW1lbnRz
CiAgICAgLy8gdmFsdWVGb3JVbmRlZmluZWRLZXk6LCBhbmQgdW5mb3J0dW5hdGVseSB0aGUgZGVm
YXVsdCBpbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2Jq
Y19ydW50aW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfcnVudGltZS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdl
L29iamMvb2JqY19ydW50aW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxOSArOTIsMTggQEAg
SlNWYWx1ZSBPYmpjRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZQogICAgIAogICAgIGlkIHRh
cmdldE9iamVjdCA9IChzdGF0aWNfY2FzdDxjb25zdCBPYmpjSW5zdGFuY2UqPihpbnN0YW5jZSkp
LT5nZXRPYmplY3QoKTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkg
c2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBA
dHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KIAogICAgIEB0cnkgewog
ICAgICAgICBpZiAoaWQgb2JqY1ZhbHVlID0gW3RhcmdldE9iamVjdCB2YWx1ZUZvcktleTooTlNT
dHJpbmcgKilfbmFtZS5nZXQoKV0pCiAgICAgICAgICAgICByZXN1bHQgPSBjb252ZXJ0T2JqY1Zh
bHVlVG9WYWx1ZShleGVjLCAmb2JqY1ZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgaW5zdGFuY2UtPnJv
b3RPYmplY3QoKSk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICAgICAgICAgIE9iamNJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4
ZWMpOwogICAgICAgICB9CiAgICAgfSBAY2F0Y2goTlNFeGNlcHRpb24qIGxvY2FsRXhjZXB0aW9u
KSB7Ci0gICAgICAgIEpTTG9jazo6bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBbbG9j
YWxFeGNlcHRpb24gcmVhc29uXSk7Ci0gICAgICAgIEpTTG9jazo6dW5sb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CiAgICAgfQogCiAgICAgLy8gV29yayBhcm91bmQgcHJvYmxlbSBpbiBzb21l
IHZlcnNpb25zIG9mIEdDQyB3aGVyZSByZXN1bHQgZ2V0cyBtYXJrZWQgdm9sYXRpbGUgYW5kCkBA
IC0xMjUsMTggKzEyNCwxNyBAQCB2b2lkIE9iamNGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4
ZWNTCiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gKHN0YXRpY19jYXN0PGNvbnN0IE9iamNJbnN0YW5j
ZSo+KGluc3RhbmNlKSktPmdldE9iamVjdCgpOwogICAgIGlkIHZhbHVlID0gY29udmVydFZhbHVl
VG9PYmpjT2JqZWN0KGV4ZWMsIGFWYWx1ZSk7CiAKLSAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5z
aWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KKyAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENhbid0IHB1dCB0aGlz
IGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAK
ICAgICBAdHJ5IHsKICAgICAgICAgW3RhcmdldE9iamVjdCBzZXRWYWx1ZTp2YWx1ZSBmb3JLZXk6
KE5TU3RyaW5nICopX25hbWUuZ2V0KCldOwogICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgICAgICAgICBPYmpjSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25U
b0V4ZWNTdGF0ZShleGVjKTsKICAgICAgICAgfQogICAgIH0gQGNhdGNoKE5TRXhjZXB0aW9uKiBs
b2NhbEV4Y2VwdGlvbikgewotICAgICAgICBKU0xvY2s6OmxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHRocm93RXJy
b3IoZXhlYywgW2xvY2FsRXhjZXB0aW9uIHJlYXNvbl0pOwotICAgICAgICBKU0xvY2s6OnVubG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291
cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC04Niw3ICs4Niw3IEBAIE9iamNWYWx1ZSBjb252ZXJ0VmFsdWVUb09iamNWYWx1ZShFeGVjU3QK
IAogICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIE9iamNPYmplY3RUeXBlOiB7Ci0g
ICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEpT
R2xvYmFsT2JqZWN0ICpvcmlnaW5HbG9iYWxPYmplY3QgPSBleGVjLT5keW5hbWljR2xvYmFsT2Jq
ZWN0KCk7CiAgICAgICAgICAgICBSb290T2JqZWN0KiBvcmlnaW5Sb290T2JqZWN0ID0gZmluZFJv
b3RPYmplY3Qob3JpZ2luR2xvYmFsT2JqZWN0KTsKQEAgLTE0Niw3ICsxNDYsNyBAQCBPYmpjVmFs
dWUgY29udmVydFZhbHVlVG9PYmpjVmFsdWUoRXhlY1N0CiAKIEpTVmFsdWUgY29udmVydE5TU3Ry
aW5nVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBOU1N0cmluZyAqbnNzdHJpbmcpCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICAKICAgICB1bmljaGFyICpjaGFyczsKICAgICB1bnNpZ25lZCBpbnQgbGVu
Z3RoID0gW25zc3RyaW5nIGxlbmd0aF07CkBAIC0xNzgsNyArMTc4LDcgQEAgSlNWYWx1ZSBjb252
ZXJ0TlNTdHJpbmdUb1N0cmluZyhFeGVjU3RhdAogKi8KIEpTVmFsdWUgY29udmVydE9iamNWYWx1
ZVRvVmFsdWUoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBidWZmZXIsIE9iamNWYWx1ZVR5cGUgdHlw
ZSwgUm9vdE9iamVjdCogcm9vdE9iamVjdCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAogICAgIHN3
aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIE9iamNPYmplY3RUeXBlOiB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiSlNHbG9i
YWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5
cGUuaCIKQEAgLTkyLDcgKzkzLDcgQEAgUXRJbnN0YW5jZTo6UXRJbnN0YW5jZShRT2JqZWN0KiBv
LCBQYXNzUgogCiBRdEluc3RhbmNlOjp+UXRJbnN0YW5jZSgpCiB7Ci0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJDb3JlOjpK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIGNhY2hlZEluc3Rh
bmNlcy5yZW1vdmUobV9oYXNoa2V5KTsKIApAQCAtMTE5LDcgKzEyMCw3IEBAIFF0SW5zdGFuY2U6
On5RdEluc3RhbmNlKCkKIAogUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBRdEluc3RhbmNlOjpnZXRR
dEluc3RhbmNlKFFPYmplY3QqIG8sIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCwg
VmFsdWVPd25lcnNoaXAgb3duZXJzaGlwKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBmb3JlYWNoIChRdEluc3RhbmNlKiBp
bnN0YW5jZSwgY2FjaGVkSW5zdGFuY2VzLnZhbHVlcyhvKSkKICAgICAgICAgaWYgKGluc3RhbmNl
LT5yb290T2JqZWN0KCkgPT0gcm9vdE9iamVjdCkgewpAQCAtMTgwLDcgKzE4MSw3IEBAIENsYXNz
KiBRdEluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0CiAKIFJ1bnRpbWVPYmplY3QqIFF0SW5zdGFu
Y2U6Om5ld1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAg
ICAgbV9tZXRob2RzLmNsZWFyKCk7CiAgICAgcmV0dXJuIFF0UnVudGltZU9iamVjdDo6Y3JlYXRl
KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgdGhpcyk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCShyZXZpc2lvbiAx
MjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyMCw3ICs0MjAsNyBAQCBSdW50aW1lT2JqZWN0KiBRdFBpeG1h
cEluc3RhbmNlOjpuZXdSdW50CiAKIEpTT2JqZWN0KiBRdFBpeG1hcEluc3RhbmNlOjpjcmVhdGVQ
aXhtYXBSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxSb290T2JqZWN0
PiByb290LCBjb25zdCBRVmFyaWFudCYgZGF0YSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFJlZlB0
cjxRdFBpeG1hcEluc3RhbmNlPiBpbnN0YW5jZSA9IGFkb3B0UmVmKG5ldyBRdFBpeG1hcEluc3Rh
bmNlKHJvb3QsIGRhdGEpKTsKICAgICByZXR1cm4gaW5zdGFuY2UtPmNyZWF0ZVJ1bnRpbWVPYmpl
Y3QoZXhlYyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3Bw
CShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGlt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw3ICsyMzAsNyBAQCBRVmFyaWFudCBjb252ZXJ0
VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogICAg
IH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNSZWFsVHlwZSB0eXBlID0gdmFsdWVSZWFsVHlwZShl
eGVjLCB2YWx1ZSk7CiAgICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpWb2lkKSB7CiAgICAgICAg
IHN3aXRjaCh0eXBlKSB7CkBAIC04MjQsNyArODI0LDcgQEAgSlNWYWx1ZSBjb252ZXJ0UVZhcmlh
bnRUb1ZhbHVlKEV4ZWNTdGF0ZQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6Qm9vbCkKICAgICAgICAg
cmV0dXJuIGpzQm9vbGVhbih2YXJpYW50LnRvQm9vbCgpKTsKQEAgLTE0MjAsNyArMTQyMCw3IEBA
IEVuY29kZWRKU1ZhbHVlIFF0UnVudGltZU1ldGFNZXRob2Q6OmNhbGwKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIFdlIGhhdmUgdG8gcGlj
ayBhIG1ldGhvZCB0aGF0IG1hdGNoZXMuLgotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBRT2JqZWN0ICpv
YmogPSBkLT5tX2luc3RhbmNlLT5nZXRPYmplY3QoKTsKICAgICBpZiAob2JqKSB7CkBAIC0xNTYx
LDcgKzE1NjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kCiB7
CiAgICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERhdGEqIGQgPSBzdGF0aWNfY2FzdDxRdFJ1
bnRpbWVDb25uZWN0aW9uTWV0aG9kICo+KGV4ZWMtPmNhbGxlZSgpKS0+ZF9mdW5jKCk7CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogCiAgICAgUU9iamVjdCogc2VuZGVyID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2Jq
ZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lX3F0NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWVfcXQ0
LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1
bnRpbWVfcXQ0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDcgKzIzMCw3IEBAIFFWYXJpYW50
IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXQKICAgICAgICAgcmV0dXJuIFFWYXJpYW50
KCk7CiAgICAgfQogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1JlYWxUeXBlIHR5cGUgPSB2YWx1ZVJl
YWxUeXBlKGV4ZWMsIHZhbHVlKTsKICAgICBpZiAoaGludCA9PSBRTWV0YVR5cGU6OlZvaWQpIHsK
ICAgICAgICAgc3dpdGNoKHR5cGUpIHsKQEAgLTgyNCw3ICs4MjQsNyBAQCBKU1ZhbHVlIGNvbnZl
cnRRVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAg
ICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpCb29sKQog
ICAgICAgICByZXR1cm4ganNCb29sZWFuKHZhcmlhbnQudG9Cb29sKCkpOwpAQCAtMTQyOSw3ICsx
NDI5LDcgQEAgRW5jb2RlZEpTVmFsdWUgUXRSdW50aW1lTWV0YU1ldGhvZDo6Y2FsbAogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gV2UgaGF2
ZSB0byBwaWNrIGEgbWV0aG9kIHRoYXQgbWF0Y2hlcy4uCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIFFP
YmplY3QgKm9iaiA9IGQtPm1faW5zdGFuY2UtPmdldE9iamVjdCgpOwogICAgIGlmIChvYmopIHsK
QEAgLTE1NzAsNyArMTU3MCw3IEBAIEVuY29kZWRKU1ZhbHVlIFF0UnVudGltZUNvbm5lY3Rpb25N
ZXRob2QKIHsKICAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSogZCA9IHN0YXRpY19j
YXN0PFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QgKj4oZXhlYy0+Y2FsbGVlKCkpLT5kX2Z1bmMo
KTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBRT2JqZWN0KiBzZW5kZXIgPSBkLT5tX2luc3RhbmNl
LT5nZXRPYmplY3QoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTEsNyArNTUxLDcgQEAgdm9pZCBI
VE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZQogICAgIG1fY29udGV4dFN0YXRlU2F2
ZXIgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcigqbV9pbWFnZUJ1ZmZl
ci0+Y29udGV4dCgpKSk7CiAKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2NrIGxvY2soSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5nbG9iYWxEYXRhKCkpOwogICAgIHNpemVfdCBudW1CeXRl
cyA9IDQgKiBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKS53aWR0aCgpICogbV9pbWFnZUJ1
ZmZlci0+aW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7CiAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5nbG9iYWxEYXRhKCktPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KG51bUJ5dGVzKTsK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcAkocmV2
aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MSw4ICs4MSw4IEBAIHZvaWQgSFRNTEltYWdlTG9hZGVyOjpu
b3RpZnlGaW5pc2hlZChDYWMKICNpZiBVU0UoSlNDKQogICAgIGlmICghbG9hZEVycm9yKSB7CiAg
ICAgICAgIGlmICghZWxlbS0+aW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9j
ayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgICAgIEpTQzo6SlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSk7CiAg
ICAgICAgICAgICBnbG9iYWxEYXRhLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChjYWNoZWRJ
bWFnZS0+ZW5jb2RlZFNpemUoKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw3ICsyNDAs
NyBAQCBib29sIFBsdWdpblZpZXc6OnN0YXJ0KCkKICAgICB7CiAgICAgICAgIFBsdWdpblZpZXc6
OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgc2V0
Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+bmV3cCgoTlBNSU1FVHlwZSltX21pbWVUeXBlLnV0ZjgoKS5kYXRhKCksIG1faW5zdGFu
Y2UsIG1fbW9kZSwgbV9wYXJhbUNvdW50LCBtX3BhcmFtTmFtZXMsIG1fcGFyYW1WYWx1ZXMsIE5V
TEwpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c3RvcCgpCiAgICAgbV9p
c1N0YXJ0ZWQgPSBmYWxzZTsKIAogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKQEAgLTQ0Niw3ICs0NDYsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0
KFBsdWdpblJlCiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpKSB7
CiAgICAgICAgICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7
CiAjaWYgVVNFKEpTQykKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICBzZXRDYWxs
aW5nUGx1Z2luKHRydWUpOwogICAgICAgICAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT51cmxub3RpZnkobV9pbnN0YW5jZSwgcmVxdWVzdFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCBOUFJFU19ET05FLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOwpAQCAtNzM2LDcgKzczNiw3IEBA
IE5QT2JqZWN0KiBQbHVnaW5WaWV3OjpucE9iamVjdCgpCiAgICAgewogICAgICAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKICNpZiBVU0UoSlNDKQotICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgICAg
IHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmpl
Y3QsICZvYmplY3QpOwpAQCAtMTQ5Miw3ICsxNDkyLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpwcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYQogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZp
ZXcodGhpcyk7CiAjaWYgVVNFKEpTQykKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAjZW5kaWYKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIE5QQm9v
bCB2YWx1ZSA9IHByaXZhdGVCcm93c2luZ0VuYWJsZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3QmxhY2tCZXJyeS5j
cHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJy
eS9QbHVnaW5WaWV3QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMyw3ICs0MDMs
NyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxs
aW5nUGx1Z2luKHRydWUpOwogCiAgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpAQCAtOTcwLDcgKzk3MCw3IEBAIHZv
aWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgICAgICgoTlBTZXRXaW5k
b3dDYWxsYmFja1N0cnVjdCopbV9ucFdpbmRvdy53c19pbmZvKS0+d2luZG93R3JvdXAgPSB3aW5k
b3ctPndpbmRvd0dyb3VwKCk7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmll
dyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIC8vIEZJWE1FOiBQYXNzaW5nIHpvb21GYWN0
b3IgdG8gc2V0d2luZG93IG1ha2Ugd2luZG93ZWQgcGx1Z2luIHNjYWxlIGluY29ycmVjdGx5LgpA
QCAtMTIyMCw3ICsxMjIwLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKIAog
ICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsKICAgICAgICAgUGx1
Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4o
dHJ1ZSk7CiAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3Rh
bmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKICAgICAgICAgc2V0
Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBAIC0xMzAxLDcgKzEzMDEsNyBAQCB2b2lkIFBsdWdpblZp
ZXc6OmdldFdpbmRvd0luZm8oVmVjdG9yPFBsCiAgICAgdm9pZCogdmFsUHRyID0gMDsKIAogICAg
IFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwog
ICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1
Z2luU2NyZWVuV2luZG93LCAmdmFsUHRyKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3
RWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBib29sIFBsdWdpblZpZXc6
OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogCiAgICAgYm9vbCBhY2NlcHRlZCA9IG1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNw
YXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJv
b2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2Us
ICZldmVudCk7CkBAIC0yNzYsNyArMjc2LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFw
aGljc0NvbnRleHQqIAogCiB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5
Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOwogCiAgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHkpCiAgICAgICAgIHJldHVybjsKQEAgLTQwNiw3ICs0MDYsNyBA
QCBzdGF0aWMgdm9pZCBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmljRmllCiAKIHZvaWQgUGx1Z2lu
Vmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKIHsKLSAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBpZiAoIW1faXNTdGFydGVkIHx8
IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNTM1LDcgKzUzNSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5l
ZWRlZCgpCiAgICAgfQogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhp
cyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNldENh
bGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRv
dyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7
CkBAIC04NDIsNyArODQyLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKICNp
ZiBkZWZpbmVkKFhQX1VOSVgpCiAgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2
YWx1ZSkgewogICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsK
LSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAg
ICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVlZHNY
RW1iZWQpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbQkocmV2aXNpb24gMTIwOTI2KQor
KysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNDI2LDcgKzQyNiw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5l
ZWRlZCgpCiAgICAgICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0IC0gbV9ucFdpbmRv
dy5jbGlwUmVjdC5sZWZ0LCBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSAtIG1fbnBXaW5kb3cu
Y2xpcFJlY3QudG9wKTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRo
aXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRD
YWxsaW5nUGx1Z2luKHRydWUpOwogICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5k
b3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2Up
OwpAQCAtNzcyLDcgKzc3Miw3IEBAIFBvaW50IFBsdWdpblZpZXc6Om1vdXNlUG9zRm9yUGx1Z2lu
KE1vdXMKIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIGV2ZW50KQog
ewogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRy
dWUpOwogCiAgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVu
dChtX2luc3RhbmNlLCAmZXZlbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9xdC9Q
bHVnaW5WaWV3UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQv
UGx1Z2luVmlld1F0LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzMsNyArMzczLDcg
QEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogCiAgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAjaWYgVVNFKEpTQykKLSAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICBzZXRDYWxsaW5n
UGx1Z2luKHRydWUpOwogICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CkBAIC02ODcsNyArNjg3LDcgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKIAogICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVl
KTsKICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZt
X25wV2luZG93KTsKQEAgLTk0OSw3ICs5NDksNyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3Jt
U3RhcnQoKQogICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsKICAg
ICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAjaWYgVVNFKEpT
QykKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICNl
bmRpZgogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVk
LCAmbV9uZWVkc1hFbWJlZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVn
aW5WaWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9Q
bHVnaW5WaWV3V2luLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvcGx1
Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyNiw3ICs1MjYs
NyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAgICAgICAgIHNo
b3VsZFBvcCA9IHRydWU7CiAgICAgfQogCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgYm9vbCBhY2NlcHRl
ZCA9ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQp
OwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtNjc3LDcgKzY3Nyw3IEBAIHZvaWQg
UGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXkKICAgICB9IGVsc2UKICAgICAgICAg
cmV0dXJuOwogCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
IGlmIChkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOwogfQpAQCAtNzQ3LDcgKzc0Nyw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
TW91c2VFdmVudChNb3VzZUUKICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIC8vIEZJWE1FOiBDb25zaWRl
ciBiYWNrIHBvcnRpbmcgdGhlIGh0dHA6Ly93ZWJraXQub3JnL2IvNTgxMDggZml4IGhlcmUuCiAg
ICAgaWYgKGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7CkBAIC04MzUsNyArODM1LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdp
bmRvd1JlY3QoY29uc3QgSQogICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKIAogICAg
IGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7Ci0gICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7CiAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3co
bV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3Vw
cG9ydC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMv
V2ViQ29yZVRlc3RTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZVRlc3RTdXBwb3J0IHsKIAogdm9pZCBpbmplY3RJbnRlcm5hbHNPYmpl
Y3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnbG9iYWxP
YmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBzY3JpcHRDb250ZXh0LT5pc0RvY3VtZW50KCkgPyBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHNj
cmlwdENvbnRleHQpIDogMDsKQEAgLTQ5LDggKzQ5LDggQEAgdm9pZCBpbmplY3RJbnRlcm5hbHNP
YmplY3QoSlNDb250ZXh0UmVmIAogCiB2b2lkIHJlc2V0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4
dFJlZiBjb250ZXh0KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBJ
bnRlcm5hbHMgKiBpbnRlcm5hbHMgPSB0b0ludGVybmFscyhnbG9iYWxPYmplY3QtPmdldERpcmVj
dChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgSW50ZXJuYWxzOjppbnRlcm5h
bHNJZCkpKTsKICAgICBpZiAoaW50ZXJuYWxzKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1MSw4ICs4NTEsOCBAQCB2b2lk
IFhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbigpCiAgICAgLy8gb3V0LiBCdXQgaXQgaXMg
cHJvdGVjdGVkIGZyb20gR0Mgd2hpbGUgbG9hZGluZywgc28gdGhpcwogICAgIC8vIGNhbid0IGJl
IHJlY291cGVkIHVudGlsIHRoZSBsb2FkIGlzIGRvbmUsIHNvIG9ubHkKICAgICAvLyByZXBvcnQg
dGhlIGV4dHJhIGNvc3QgYXQgdGhhdCBwb2ludC4KLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpOworICAgIEpTQzo6SlNM
b2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSk7CiAgICAgZ2xvYmFsRGF0YS0+aGVhcC5yZXBvcnRF
eHRyYU1lbW9yeUNvc3QobV9yZXNwb25zZUJ1aWxkZXIubGVuZ3RoKCkgKiAyKTsKICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAxMi0wNi0yMCAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91
bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3Rl
YWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3Jy
ZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRo
YXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBTaGFyZWQvbWFjL1dl
Yk1lbW9yeVNhbXBsZXIubWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlTYW1wbGVy
OjpzYW1wbGVXZWJLaXQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6amF2YVNj
cmlwdE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpyZXBv
cnRFeGNlcHRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05Q
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Y2FsbE1ldGhvZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxPYmplY3QpOgorICAgICAgICAoV2ViS2l0
OjpKU05QT2JqZWN0OjpjYWxsQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2Jq
ZWN0OjpwdXQpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoV2ViS2l0OjpKU05QT2JqZWN0Ojpwcm9wZXJ0eUdldHRlcik6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOUEpTT2JqZWN0OjpoYXNNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0Ojpp
bnZva2UpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjppbnZva2VEZWZhdWx0KToKKyAg
ICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aGFzUHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0
OjpOUEpTT2JqZWN0OjpnZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6
OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6cmVtb3ZlUHJvcGVy
dHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjplbnVtZXJhdGUpOgorICAgICAgICAo
V2ViS2l0OjpOUEpTT2JqZWN0Ojpjb25zdHJ1Y3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
UFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQpOgorICAgICAgICAo
V2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYktpdDo6
TlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lOjpqc1dyYXBwZXJGb3JXb3JsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
Ojpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8pOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cnVuSmF2
YVNjcmlwdEluTWFpbkZyYW1lKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpnZXRXZWJDb3JlU3RhdGlzdGljcyk6CisK
IDIwMTItMDYtMjEgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAg
ICAgIFtFRkxbV0syXSBBZGQgV0tWaWV3RWZsIGFuZCBXZWJLaXQyIEFQSSBPYmplY3QgdG8gcmVw
cmVzZW50IEV2YXNfT2JqZWN0LgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJN
ZW1vcnlTYW1wbGVyLm1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTYsNyArMTE2LDcgQEAgV2ViTWVtb3J5U3RhdGlzdGljcyBXZWJNZW1vcnlTYW1wbGVy
OjpzYQogICAgIHRvdGFsQnl0ZXNJblVzZSArPSBmYXN0TWFsbG9jQnl0ZXNJblVzZTsKICAgICB0
b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGZhc3RNYWxsb2NCeXRlc0NvbW1pdHRlZDsKICAgICAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2l6ZV90IGpzY0hl
YXBCeXRlc0luVXNlID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnNp
emUoKTsKICAgICBzaXplX3QganNjSGVhcEJ5dGVzQ29tbWl0dGVkID0gSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNhcGFjaXR5KCk7CiAgICAgdG90YWxCeXRlc0luVXNl
ICs9IGpzY0hlYXBCeXRlc0luVXNlOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjAsNyArOTIwLDcgQEAgdm9p
ZCBXZWJQcm9jZXNzOjpnZXRXZWJDb3JlU3RhdGlzdGljcyh1aQogICAgIAogICAgIC8vIEdhdGhl
ciBKYXZhU2NyaXB0IHN0YXRpc3RpY3MuCiAgICAgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJz
LnNldCgiSmF2YVNjcmlwdE9iamVjdHNDb3VudCIsIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgpKTsKICAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVt
YmVycy5zZXQoIkphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKSk7CiAgICAgICAgIGRh
dGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50
IiwgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVj
dENvdW50KCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDksNyArNDA5LDcgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZTo6Z2FyYmFnZUNvbGxlY3RKYXZhUwogCiBzaXplX3QgSW5qZWN0ZWRCdW5kbGU6OmphdmFT
Y3JpcHRPYmplY3RzQ291bnQoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5o
ZWFwLm9iamVjdENvdW50KCk7CiB9CiAKQEAgLTQxOCw4ICs0MTgsOCBAQCB2b2lkIEluamVjdGVk
QnVuZGxlOjpyZXBvcnRFeGNlcHRpb24oSlNDCiAgICAgaWYgKCFjb250ZXh0IHx8ICFleGNlcHRp
b24pCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlY1N0YXRlID0gdG9KUyhjb250ZXh0
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjU3RhdGUpOwogCiAgICAgLy8gTWFrZSBzdXJl
IHRoZSBjb250ZXh0IGhhcyBhIERPTVdpbmRvdyBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgdGhp
cyBjb250ZXh0IGRpZG4ndCBvcmlnaW5hdGUgZnJvbSBhIFBhZ2UuCiAgICAgaWYgKCF0b0pTRE9N
V2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9i
amVjdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiAr
MzcsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL09iamVjdFByb3RvdHlwZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSWRlbnRp
ZmllclJlcC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNET01XaW5kb3dCYXNlLmg+CiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApA
QCAtMTI1LDcgKzEyNiw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbE1ldGhvZChFeGVjU3Rh
dGUKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwogICAgIAogICAgIHsKLSAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2Jq
ZWN0LT5fY2xhc3MtPmludm9rZShtX25wT2JqZWN0LCBtZXRob2ROYW1lLCBhcmd1bWVudHMuZGF0
YSgpLCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFw
Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgfQpAQCAtMTY1LDcg
KzE2Niw3IEBAIEpTQzo6SlNWYWx1ZSBKU05QT2JqZWN0OjpjYWxsT2JqZWN0KEpTQzoKICAgICBW
T0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fbnBPYmplY3QtPl9jbGFzcy0+
aW52b2tlRGVmYXVsdChtX25wT2JqZWN0LCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50
LCAmcmVzdWx0KTsKICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0
aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgfQpAQCAtMjA1LDcgKzIwNiw3IEBAIEpTVmFsdWUg
SlNOUE9iamVjdDo6Y2FsbENvbnN0cnVjdG9yKEV4ZWMKICAgICBWT0lEX1RPX05QVkFSSUFOVChy
ZXN1bHQpOwogICAgIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdChtX25w
T2JqZWN0LCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKICAgICAg
ICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhl
Yyk7CiAgICAgfQpAQCAtMzQwLDcgKzM0MSw3IEBAIHZvaWQgSlNOUE9iamVjdDo6cHV0KEpTQ2Vs
bCogY2VsbCwgRXhlY1MKICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBw
cm90ZWN0b3IodGhpc09iamVjdC0+bV9vYmplY3RNYXApOwogCiAgICAgewotICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICB0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5f
Y2xhc3MtPnNldFByb3BlcnR5KHRoaXNPYmplY3QtPm1fbnBPYmplY3QsIG5wSWRlbnRpZmllciwg
JnZhcmlhbnQpOwogCiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2Vw
dGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpAQCAtMzgwLDcgKzM4MSw3IEBAIGJvb2wgSlNOUE9iamVj
dDo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXQKICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdp
blByb3RlY3RvciBwcm90ZWN0b3IobV9vYmplY3RNYXApOwogCiAgICAgewotICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdGhy
b3cgYW4gZXhjZXB0aW9uIGlmIHJlbW92ZVByb3BlcnR5IHJldHVybnMgZmFsc2U/CiAgICAgICAg
IGlmICghbV9ucE9iamVjdC0+X2NsYXNzLT5yZW1vdmVQcm9wZXJ0eShtX25wT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUpKQpAQCAtNDEzLDcgKzQxNCw3IEBAIHZvaWQgSlNOUE9iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU08KICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBw
cm90ZWN0b3IodGhpc09iamVjdC0+bV9vYmplY3RNYXApOwogICAgIAogICAgIHsKLSAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdl
IHRocm93IGFuIGV4Y2VwdGlvbiBpZiBlbnVtZXJhdGUgcmV0dXJucyBmYWxzZT8KICAgICAgICAg
aWYgKCF0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPmVudW1lcmF0ZSh0aGlzT2JqZWN0
LT5tX25wT2JqZWN0LCAmaWRlbnRpZmllcnMsICZpZGVudGlmaWVyQ291bnQpKQpAQCAtNDYxLDcg
KzQ2Miw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6cHJvcGVydHlHZXR0ZXIoRXhlY1MKICAgICAK
ICAgICBib29sIHJldHVyblZhbHVlOwogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICAgICAgTlBJZGVudGlmaWVyIG5wSWRlbnRpZmllciA9IG5wSWRlbnRpZmll
ckZyb21JZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gdGhp
c09iai0+bV9ucE9iamVjdC0+X2NsYXNzLT5nZXRQcm9wZXJ0eSh0aGlzT2JqLT5tX25wT2JqZWN0
LCBucElkZW50aWZpZXIsICZyZXN1bHQpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5j
cHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBA
QCBib29sIE5QSlNPYmplY3Q6Omhhc01ldGhvZChOUElkZW50aWZpZXIgCiAgICAgaWYgKCFleGVj
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG1fanNPYmplY3QtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAo
ZXhlYywgaWRlbnRpZmllclJlcCkpOyAgICAKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwpA
QCAtMTE5LDcgKzExOSw3IEBAIGJvb2wgTlBKU09iamVjdDo6aW52b2tlKE5QSWRlbnRpZmllciBt
ZXQKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG1fanNPYmplY3QtPmdldChleGVjLCBpZGVu
dGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoZXhlYywgaWRlbnRpZmllclJlcCkpOwogICAgIHJldHVy
biBpbnZva2UoZXhlYywgbV9vYmplY3RNYXAtPmdsb2JhbE9iamVjdCgpLCBmdW5jdGlvbiwgYXJn
dW1lbnRzLCBhcmd1bWVudENvdW50LCByZXN1bHQpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIGJvb2wg
TlBKU09iamVjdDo6aW52b2tlRGVmYXVsdChjb25zdCBOUFYKICAgICBpZiAoIWV4ZWMpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU1ZhbHVlIGZ1bmN0aW9u
ID0gbV9qc09iamVjdC5nZXQoKTsKICAgICByZXR1cm4gaW52b2tlKGV4ZWMsIG1fb2JqZWN0TWFw
LT5nbG9iYWxPYmplY3QoKSwgZnVuY3Rpb24sIGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVz
dWx0KTsKQEAgLTE0NSw3ICsxNDUsNyBAQCBib29sIE5QSlNPYmplY3Q6Omhhc1Byb3BlcnR5KE5Q
SWRlbnRpZmllCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIGJvb2wgcmVzdWx0OwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5p
c1N0cmluZygpKQpAQCAtMTY1LDcgKzE2NSw3IEBAIGJvb2wgTlBKU09iamVjdDo6Z2V0UHJvcGVy
dHkoTlBJZGVudGlmaWUKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgSlNWYWx1ZSBqc1Jlc3VsdDsKICAgICBpZiAoaWRlbnRpZmllclJl
cC0+aXNTdHJpbmcoKSkKICAgICAgICAganNSZXN1bHQgPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywg
aWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApKTsKQEAgLTE4
NSw3ICsxODUsNyBAQCBib29sIE5QSlNPYmplY3Q6OnNldFByb3BlcnR5KE5QSWRlbnRpZmllCiAg
ICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIEpTVmFsdWUganNWYWx1ZSA9IG1fb2JqZWN0TWFwLT5jb252ZXJ0TlBWYXJpYW50VG9K
U1ZhbHVlKGV4ZWMsIG1fb2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKSwgKnZhbHVlKTsKICAgICBp
ZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkgewpAQCAtMjA2LDcgKzIwNiw3IEBAIGJvb2wg
TlBKU09iamVjdDo6cmVtb3ZlUHJvcGVydHkoTlBJZGVudGkKICAgICBpZiAoIWV4ZWMpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgaWYgKGlkZW50aWZpZXJSZXAt
PmlzU3RyaW5nKCkpIHsKICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gaWRlbnRpZmll
ckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApOwogICAgICAgICAKQEAgLTIz
NSw3ICsyMzUsNyBAQCBib29sIE5QSlNPYmplY3Q6OmVudW1lcmF0ZShOUElkZW50aWZpZXIqCiAg
ICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CiAgICAgbV9qc09i
amVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyhtX2pzT2JqZWN0LmdldCgpLCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKQEAgLTI1Nyw3
ICsyNTcsNyBAQCBib29sIE5QSlNPYmplY3Q6OmNvbnN0cnVjdChjb25zdCBOUFZhcmlhCiAgICAg
aWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAg
Q29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0
VHlwZSA9IGdldENvbnN0cnVjdERhdGEobV9qc09iamVjdC5nZXQoKSwgY29uc3RydWN0RGF0YSk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50
aW1lT2JqZWN0TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkocmV2aXNpb24gMTIwOTI2
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGlt
ZU9iamVjdE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBKU1ZhbHVl
IE5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydE5QVmFyCiAKIHZvaWQgTlBSdW50aW1lT2JqZWN0
TWFwOjpjb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2
YWx1ZSwgTlBWYXJpYW50JiB2YXJpYW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBWT0lEX1RP
X05QVkFSSUFOVCh2YXJpYW50KTsKICAgICAKQEAgLTE4Niw3ICsxODYsNyBAQCBib29sIE5QUnVu
dGltZU9iamVjdE1hcDo6ZXZhbHVhdGUoTlBPYmplCiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZ2V0T3JDcmVhdGVKU09iamVjdChnbG9iYWxPYmplY3QuZ2V0KCksIG5w
T2JqZWN0KTsKIAogICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2Vy
LnN0YXJ0KCk7CkBAIC0yNjYsNyArMjY2LDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6Om1v
dmVHbG9iYWxFeGNlcAogICAgICAgICByZXR1cm47CiAKICAgICB7Ci0gICAgICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIHN0cmluZ1Rv
VVN0cmluZyhnbG9iYWxFeGNlcHRpb25TdHJpbmcoKSkpKTsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Miw3ICs2NDIsNyBAQCBKU1ZhbHVlUmVmIFdlYkZy
YW1lOjpqc1dyYXBwZXJGb3JXb3JsZChJCiAgICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9
IG1fY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHdvcmxkLT5jb3JlV29ybGQoKSk7
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogICAgIHJldHVybiB0b1JlZihleGVjLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgbm9kZUhhbmRsZS0+Y29yZU5vZGUoKSkpOwogfQogCkBAIC02NTQsNyArNjU0LDcgQEAgSlNW
YWx1ZVJlZiBXZWJGcmFtZTo6anNXcmFwcGVyRm9yV29ybGQoSQogICAgIEpTRE9NV2luZG93KiBn
bG9iYWxPYmplY3QgPSBtX2NvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCh3b3JsZC0+
Y29yZVdvcmxkKCkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICByZXR1cm4gdG9SZWYoZXhlYywgdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHJhbmdlSGFuZGxlLT5jb3JlUmFuZ2UoKSkpOwogfQogCkBAIC02NzEs
NyArNjcxLDcgQEAgSlNWYWx1ZVJlZiBXZWJGcmFtZTo6Y29tcHV0ZWRTdHlsZUluY2x1ZAogCiAg
ICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZShzdGF0aWNfY2FzdDxKU0VsZW1lbnQqPih0b0pTKGVs
ZW1lbnQpKS0+aW1wbCgpLCB0cnVlKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgcmV0dXJuIHRvUmVm
KGV4ZWMsIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHlsZS5nZXQoKSkpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZp
c2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MTUsNyArMTgxNSw3IEBAIHZvaWQgV2ViUGFnZTo6
cnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKGMKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBzZXJpYWxpemVkUmVzdWx0VmFsdWU7CiAgICAgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSBk
YXRhUmVmZXJlbmNlOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwogICAgIGlmIChKU1ZhbHVlIHJlc3VsdFZhbHVlID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgp
LT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChzY3JpcHQsIHRydWUpLmpzVmFsdWUoKSkgewogICAg
ICAgICBpZiAoKHNlcmlhbGl6ZWRSZXN1bHRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKG1fbWFpbkZyYW1lLT5qc0NvbnRleHQoKSwgdG9SZWYobV9tYWluRnJhbWUtPmNvcmVG
cmFtZSgpLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+
Z2xvYmFsRXhlYygpLCByZXN1bHRWYWx1ZSksIDApKSkKICAgICAgICAgICAgIGRhdGFSZWZlcmVu
Y2UgPSBzZXJpYWxpemVkUmVzdWx0VmFsdWUtPmRhdGEoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA2LTIw
ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNM
b2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sg
dG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4g
dGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0
IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIEFwaS9C
bGFja0JlcnJ5R2xvYmFsLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6Y2xlYXJN
ZW1vcnlDYWNoZXMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5j
cHA6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlUG9wdXBCbGFja0JlcnJ5OjppbnN0YWxsRG9tRnVuY3Rpb24p
OgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0LmNwcDoKKyAg
ICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0
ZWRJbmZvKToKKwogMjAxMi0wNi0yMSAgTWlrZSBGZW50b24gIDxtaWZlbnRvbkByaW0uY29tPgog
CiAgICAgICAgIFtCbGFja0JlcnJ5XSBJbnB1dCBtb2RlIHNob3VsZCBhZGFwdCBhdXRvbWF0aWNh
bGx5IHRvIHNldHRpbmdzIGNoYW5nZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9B
cGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9CbGFja0JlcnJ5R2xvYmFsLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CbGFja0JlcnJ5R2xvYmFsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA1LDcgKzEwNSwxMCBAQCB2b2lkIGNsZWFyTWVtb3J5Q2FjaGVzKCkKICAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6dXNlckludGVyZmFjZVRocmVhZE1lc3NhZ2VDbGllbnQoKS0+
ZGlzcGF0Y2hNZXNzYWdlKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpjcmVhdGVGdW5jdGlvbkNhbGxN
ZXNzYWdlKGNsZWFyTWVtb3J5Q2FjaGVzSW5Db21wb3NpdGluZ1RocmVhZCkpOwogI2VuZGlmCiAK
LSAgICBjb2xsZWN0SmF2YXNjcmlwdEdhcmJhZ2VOb3coKTsKKyAgICB7CisgICAgICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgY29sbGVjdEphdmFzY3JpcHRHYXJiYWdlTm93KCk7CisgICAgfQogCiAgICAgLy8gQ2xl
YW4gY2FjaGVzIGFmdGVyIEpTIGdhcmJhZ2UgY29sbGVjdGlvbiBiZWNhdXNlIEpTIEdDIGNhbgog
ICAgIC8vIGdlbmVyYXRlIG1vcmUgZGVhZCByZXNvdXJjZXMuCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ2xpZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ2xpZW50RXh0ZW5z
aW9uLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDEx
ICs4NCwxMSBAQCBzdGF0aWMgSlNTdGF0aWNWYWx1ZSBjbGllbnRFeHRlbnNpb25TdGF0CiAvLyBG
SVhNRTogUmV2aXNpdCB0aGUgY3JlYXRpb24gb2YgdGhpcyBjbGFzcyBhbmQgbWFrZSBzdXJlIHRo
aXMgaXMgdGhlIGJlc3Qgd2F5IHRvIGFwcHJvYWNoIGl0Lgogdm9pZCBhdHRhY2hFeHRlbnNpb25P
YmplY3RUb0ZyYW1lKEZyYW1lKiBmcmFtZSwgV2ViUGFnZUNsaWVudCogY2xpZW50KQogewotICAg
IEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAgSlNE
T01XaW5kb3cqIHdpbmRvdyA9IGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwobWFpblRocmVh
ZE5vcm1hbFdvcmxkKCkpLT53aW5kb3coKTsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0g
d2luZG93LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
KwogICAgIEpTQ29udGV4dFJlZiBzY3JpcHRDdHggPSB0b1JlZihleGVjKTsKIAogICAgIEpTQ2xh
c3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9QYWdlUG9wdXBCbGFja0Jl
cnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1
cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9QYWdlUG9wdXBCbGFja0JlcnJ5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDEzICsxMjIsMTIgQEAgc3RhdGljIEpTU3RhdGljVmFs
dWUgcG9wVXBFeHRlbnNpb25TdGF0aQogCiB2b2lkIFBhZ2VQb3B1cEJsYWNrQmVycnk6Omluc3Rh
bGxEb21GdW5jdGlvbihGcmFtZSogZnJhbWUpCiB7Ci0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9K
U0RPTVdpbmRvdyhmcmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogICAgIEFTU0VSVCh3
aW5kb3cpOwogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMo
KTsKICAgICBBU1NFUlQoZXhlYyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gOjp0b1JlZihleGVjKTsKICAgICBKU09iamVj
dFJlZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJL
aXRTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCB2b2lkIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydDo6c2NhbGVQYWdlQnkoCiAKIEpTVmFsdWVSZWYgRHVtcFJlbmRlclRyZWVT
dXBwb3J0Ojpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pT
KGV4ZWMsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5
IEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRo
YXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAg
ICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFi
b3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKwor
ICAgICAgICAqIGV3ay9ld2tfZnJhbWUuY3BwOgorICAgICAgICAoZXdrX2ZyYW1lX3NjcmlwdF9l
eGVjdXRlKToKKyAgICAgICAgKiBld2svZXdrX3ZpZXcuY3BwOgorICAgICAgICAoZXdrX3ZpZXdf
anNfb2JqZWN0X2FkZCk6CisKIDIwMTItMDYtMTkgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmls
bGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgQ2FsbGluZyBuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpIGNhdXNlcyBhc3NlcnRpb24gZmFpbHVyZTogbV92ZXJpZmllci5pc1NhZmVUb1VzZSgp
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAkocmV2aXNpb24gMTIwOTI2KQor
KysgU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1NSw4ICs0NTUsOCBAQCBjaGFyKiBld2tfZnJhbWVfc2NyaXB0X2V4ZWN1dGUoRXZhc19PYmpl
CiAgICAgaWYgKCFyZXN1bHQgfHwgKCFyZXN1bHQuaXNCb29sZWFuKCkgJiYgIXJlc3VsdC5pc1N0
cmluZygpICYmICFyZXN1bHQuaXNOdW1iZXIoKSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
SlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpF
eGVjU3RhdGUqIGV4ZWMgPSBzbWFydERhdGEtPmZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0
KFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgcmVzdWx0U3RyaW5nID0gV2ViQ29yZTo6
dXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAg
IHJldHVybiBzdHJkdXAocmVzdWx0U3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwogI2Vsc2UKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA0NSw4ICs0
MDQ1LDggQEAgRWluYV9Cb29sIGV3a192aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYgogICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBmYWxzZSk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgZmFsc2UpOwogCi0g
ICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgV2Vi
Q29yZTo6SlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3cocHJpdi0+bWFpbkZyYW1l
LCBXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9jayh3aW5kb3ctPmdsb2JhbEV4ZWMoKSk7CiAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9i
amVjdCogcm9vdDsKICAgICByb290ID0gcHJpdi0+bWFpbkZyYW1lLT5zY3JpcHQoKS0+YmluZGlu
Z1Jvb3RPYmplY3QoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQor
KysgU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMTItMDYtMjAgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNv
bT4KKworICAgICAgICBKU0xvY2sgc2hvdWxkIGJlIHBlci1KU0dsb2JhbERhdGEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MTIzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBhbGwgc2l0ZXMg
dGhhdCB1c2VkIEpTTG9jayB0byBpbnN0ZWFkIHVzZSB0aGUgbmV3IEpTTG9ja0hvbGRlcgorICAg
ICAgICBhbmQgcGFzcyBpbiB0aGUgY29ycmVjdCBKUyBjb250ZXh0IHRoYXQgdGhlIGNvZGUgaXMg
YWJvdXQgdG8gaW50ZXJhY3Qgd2l0aCB0aGF0IAorICAgICAgICBuZWVkcyBwcm90ZWN0aW9uLgor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcDoK
KyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2NDb3VudEphdmFzY3JpcHRPYmpl
Y3RzKToKKwogMjAxMi0wNi0yMSAgRGFuaWVsIERyYWtlICA8ZHNkQGxhcHRvcC5vcmc+CiAKICAg
ICAgICAgW0dUS10gQmFja3BvcnQgcnVuLWZpbGUtY2hvb3NlciB0byBXZWJLaXQxCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwMCw3ICs2MDAsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
azo6Z2NDb2xsZWN0CiAKIHVuc2lnbmVkIGxvbmcgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpn
Y0NvdW50SmF2YXNjcmlwdE9iamVjdHMoKQogewotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5l
bmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBi
ZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1
c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3Qg
SlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAK
KyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIERPTS9XZWJET01PcGVyYXRp
b25zLm1tOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNz
Lm1tOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0c0NvdW50
XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRHbG9iYWxPYmplY3Rz
Q291bnRdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3Rl
ZE9iamVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0
UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0
aWNzIGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgrW1dl
YkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgr
W1dlYkNvcmVTdGF0aXN0aWNzIHNob3VsZFByaW50RXhjZXB0aW9uc10pOgorICAgICAgICAoK1tX
ZWJDb3JlU3RhdGlzdGljcyBzZXRTaG91bGRQcmludEV4Y2VwdGlvbnM6XSk6CisgICAgICAgICgr
W1dlYkNvcmVTdGF0aXN0aWNzIG1lbW9yeVN0YXRpc3RpY3NdKToKKyAgICAgICAgKCtbV2ViQ29y
ZVN0YXRpc3RpY3MgamF2YVNjcmlwdFJlZmVyZW5jZWRPYmplY3RzQ291bnRdKToKKyAgICAgICAg
KiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06CisgICAgICAg
IChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlRGVmYXVsdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y29uc3RydWN0KToK
KyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQcm9wZXJ0
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0UHJv
cGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJl
bW92ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpoYXNNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OmVudW1lcmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6YWRkVmFsdWVUb0FycmF5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUpOgorICAgICAg
ICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW06CisgICAgICAgIChXZWJOZXRz
Y2FwZVBsdWdpblN0cmVhbTo6d2FudHNBbGxTdHJlYW1zKToKKyAgICAgICAgKiBQbHVnaW5zL1dl
Yk5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3
IHNlbmRFdmVudDppc0RyYXdSZWN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZp
ZXcgcHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5nZV0pOgorICAgICAgICAoLVtXZWJOZXRzY2Fw
ZVBsdWdpblZpZXcgc2V0V2luZG93SWZOZWNlc3NhcnldKToKKyAgICAgICAgKC1bV2ViTmV0c2Nh
cGVQbHVnaW5WaWV3IGNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplY3RdKToKKyAgICAgICAgKC1b
V2ViTmV0c2NhcGVQbHVnaW5WaWV3IGdldEZvcm1WYWx1ZTpdKToKKyAgICAgICAgKC1bV2ViTmV0
c2NhcGVQbHVnaW5WaWV3IGV2YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6XSk6CisgICAg
ICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyB3ZWJGcmFtZTpkaWRGaW5pc2hMb2FkV2l0aFJl
YXNvbjpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGxvYWRQbHVnaW5SZXF1
ZXN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgX3ByaW50ZWRQbHVnaW5C
aXRtYXBdKToKKyAgICAgICAgKiBQbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW06CisgICAg
ICAgICgrW1dlYlBsdWdpbkNvbnRyb2xsZXIgcGx1Z0luVmlld1dpdGhBcmd1bWVudHM6ZnJvbVBs
dWdpblBhY2thZ2U6XSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgc3RvcE9uZVBs
dWdpbjpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxlciBkZXN0cm95T25lUGx1Z2lu
Ol0pOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIHN0YXJ0QWxsUGx1Z2luc10pOgor
ICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIGFkZFBsdWdpbjpdKToKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6Zm9yY2VVc2VyR2VzdHVyZTpdKToKKyAgICAgICAgKC1b
V2ViRnJhbWUgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOndpdGhHbG9i
YWxPYmplY3Q6aW5TY3JpcHRXb3JsZDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERl
YnVnRGVsZWdhdGUubW06CisgICAgICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBzY29wZUNoYWlu
XSk6CisgICAgICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBldmFsdWF0ZVdlYlNjcmlwdDpdKToK
KyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgrW1dlYlZpZXcgX3JlcG9y
dEV4Y2VwdGlvbjppbkNvbnRleHQ6XSk6CisgICAgICAgICgtW1dlYlZpZXcgYWVEZXNjQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX2NvbXB1
dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbzpmb3JFbGVtZW50Ol0pOgorCiAyMDEyLTA2LTIw
ICBHYXJyZXQgS2VsbHkgIDxnZGtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE1vdmluZyBjb29r
aWVFbmFibGVkL3NldENvb2tpZUVuYWJsZWQgZnJvbSBQYWdlIHRvIFNldHRpbmdzLgpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0JKHJldmlzaW9uIDEyMDky
NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw4ICs2Nyw5IEBAICsgKERPTUVsZW1lbnQgKilfRE9NRWxlbWVudEZyb21K
U0NvbnRleHQKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgcmV0dXJuIGtpdCh0b0VsZW1lbnQo
dG9KUyh0b0pTKGNvbnRleHQpLCB2YWx1ZSkpKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pT
KGNvbnRleHQpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIHJldHVybiBraXQo
dG9FbGVtZW50KHRvSlMoZXhlYywgdmFsdWUpKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopX21hcmtl
clRleHRGb3JMaXN0SXRlbQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3Rh
dGlzdGljcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVT
dGF0aXN0aWNzLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9NaXNj
L1dlYkNvcmVTdGF0aXN0aWNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OCwzMSArNTgsMzEgQEAg
KyAoTlNBcnJheSAqKXN0YXRpc3RpY3MKIAogKyAoc2l6ZV90KWphdmFTY3JpcHRPYmplY3RzQ291
bnQKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0
dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgp
OwogfQogCiArIChzaXplX3QpamF2YVNjcmlwdEdsb2JhbE9iamVjdHNDb3VudAogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmdsb2JhbE9iamVjdENvdW50KCk7CiB9CiAK
ICsgKHNpemVfdClqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKIH0KIAog
KyAoc2l6ZV90KWphdmFTY3JpcHRQcm90ZWN0ZWRHbG9iYWxPYmplY3RzQ291bnQKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3Vu
dCgpOwogfQogCiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlw
ZUNvdW50cwogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICAKICAgICBOU0NvdW50ZWRTZXQgKnJlc3VsdCA9IFtOU0NvdW50ZWRTZXQgc2V0XTsKIApAQCAt
OTcsNyArOTcsNyBAQCArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0UHJvdGVjdGVkT2JqCiAK
ICsgKE5TQ291bnRlZFNldCAqKWphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzCiB7Ci0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIAogICAgIE5TQ291bnRlZFNl
dCAqcmVzdWx0ID0gW05TQ291bnRlZFNldCBzZXRdOwogCkBAIC0xNjcsMTMgKzE2NywxMyBAQCAr
IChzaXplX3QpZ2x5cGhQYWdlQ291bnQKIAogKyAoQk9PTClzaG91bGRQcmludEV4Y2VwdGlvbnMK
IHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJu
IENvbnNvbGU6OnNob3VsZFByaW50RXhjZXB0aW9ucygpOwogfQogCiArICh2b2lkKXNldFNob3Vs
ZFByaW50RXhjZXB0aW9uczooQk9PTClwcmludAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKICAgICBDb25zb2xlOjpzZXRTaG91bGRQcmludEV4Y2VwdGlvbnMo
cHJpbnQpOwogfQogCkBAIC0yMDEsNyArMjAxLDcgQEAgKyAoTlNEaWN0aW9uYXJ5ICopbWVtb3J5
U3RhdGlzdGljcwogewogICAgIFdURjo6RmFzdE1hbGxvY1N0YXRpc3RpY3MgZmFzdE1hbGxvY1N0
YXRpc3RpY3MgPSBXVEY6OmZhc3RNYWxsb2NTdGF0aXN0aWNzKCk7CiAgICAgCi0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNpemVfdCBoZWFwU2l6ZSA9IEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5zaXplKCk7CiAgICAgc2l6ZV90
IGhlYXBGcmVlID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNhcGFj
aXR5KCkgLSBoZWFwU2l6ZTsKICAgICBHbG9iYWxNZW1vcnlTdGF0aXN0aWNzIGdsb2JhbE1lbW9y
eVN0YXRzID0gZ2xvYmFsTWVtb3J5U3RhdGlzdGljcygpOwpAQCAtMjQ1LDcgKzI0NSw3IEBAICsg
KHNpemVfdClqYXZhU2NyaXB0Tm9HQ0FsbG93ZWRPYmplY3RzQ28KIAogKyAoc2l6ZV90KWphdmFT
Y3JpcHRSZWZlcmVuY2VkT2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKIH0KIApJbmRleDogU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBl
UGx1Z2luU3RyZWFtLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsNyArMzY4LDcgQEAgYm9vbCBX
ZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6d2FudHNBbGxTdAogICAgIE5QRXJyb3IgZXJyb3I7CiAg
ICAgewogICAgICAgICBQbHVnaW5TdG9wRGVmZXJyZXIgZGVmZXJyZXIobV9wbHVnaW5WaWV3Lmdl
dCgpKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAgICAgZXJyb3IgPSBtX3BsdWdpbkZ1bmNzLT5nZXR2YWx1ZShtX3BsdWdpbiwgTlBQVnBs
dWdpbldhbnRzQWxsTmV0d29ya1N0cmVhbXMsICZ2YWx1ZSk7CiAgICAgfQogICAgIGlmIChlcnJv
ciAhPSBOUEVSUl9OT19FUlJPUikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1Bs
dWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNjY5LDcgKzY2OSw3IEBAIC0gKEJPT0wpc2VuZEV2ZW50Oih2b2lkKilldmVudCBp
c0RyYXdSZWMKICAgICAvLyBTZXQgdGhlIHBsdWdpbkFsbG93UG9wdXAgZmxhZy4KICAgICBBU1NF
UlQoX2V2ZW50SGFuZGxlcik7CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJl
SW5kaWNhdG9yKF9ldmVudEhhbmRsZXItPmN1cnJlbnRFdmVudElzVXNlckdlc3R1cmUoKSA/IERl
ZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7CiAgICAgICAgIGFjY2VwdGVkRXZlbnQgPSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1
Z2luRnVuY3NdLT5ldmVudChwbHVnaW4sIGV2ZW50KTsKICAgICB9CkBAIC04NTAsNyArODUwLDcg
QEAgLSAodm9pZClwcml2YXRlQnJvd3NpbmdNb2RlRGlkQ2hhbmdlCiAKICAgICBbc2VsZiB3aWxs
Q2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIGlmIChbX3BsdWdpblBhY2thZ2UuZ2V0KCkg
cGx1Z2luRnVuY3NdLT5zZXR2YWx1ZSkKICAgICAgICAgICAgIFtfcGx1Z2luUGFja2FnZS5nZXQo
KSBwbHVnaW5GdW5jc10tPnNldHZhbHVlKHBsdWdpbiwgTlBOVnByaXZhdGVNb2RlQm9vbCwgJnZh
bHVlKTsKICAgICB9CkBAIC05OTEsNyArOTkxLDcgQEAgLSAodm9pZClzZXRXaW5kb3dJZk5lY2Vz
c2FyeQogICAgICAgICBpblNldFdpbmRvdyA9IFlFUzsgICAgICAgIAogICAgICAgICBbc2VsZiB3
aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgewotICAgICAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBucEVyciA9
IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnNldHdpbmRvdyhwbHVnaW4sICZ3
aW5kb3cpOwogICAgICAgICB9CiAgICAgICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07
CkBAIC0xNDQ0LDcgKzE0NDQsNyBAQCAtIChOUE9iamVjdCAqKWNyZWF0ZVBsdWdpblNjcmlwdGFi
bGVPYmplCiAgICAgTlBFcnJvciBlcnJvcjsKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0
aW9uXTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgICAgIGVycm9yID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNz
XS0+Z2V0dmFsdWUocGx1Z2luLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmdmFsdWUp
OwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTQ2Myw3ICsx
NDYzLDcgQEAgLSAoQk9PTClnZXRGb3JtVmFsdWU6KE5TU3RyaW5nICoqKXZhbHVlCiAgICAgTlBF
cnJvciBlcnJvcjsKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0g
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAg
IGVycm9yID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+Z2V0dmFsdWUocGx1
Z2luLCBOUFBWZm9ybVZhbHVlLCAmYnVmZmVyKTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBs
dWdJbkZ1bmN0aW9uXTsKQEAgLTE1OTUsNyArMTU5NSw3IEBAIC0gKHZvaWQpZXZhbHVhdGVKYXZh
U2NyaXB0UGx1Z2luUmVxdWVzdDoKICAgICAgICAgaWYgKFtKU1BsdWdpblJlcXVlc3Qgc2VuZE5v
dGlmaWNhdGlvbl0pIHsKICAgICAgICAgICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25d
OwogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgICAgICBbX3BsdWdpblBhY2th
Z2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbVVJMIF93ZWJfVVJMQ1N0
cmluZ10sIE5QUkVTX0RPTkUsIFtKU1BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTE2
MjcsNyArMTYyNyw3IEBAIC0gKHZvaWQpd2ViRnJhbWU6KFdlYkZyYW1lICopd2ViRnJhbWUgZGkK
ICAgICAgICAgCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBb
X3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbW1tw
bHVnaW5SZXF1ZXN0IHJlcXVlc3RdIFVSTF0gX3dlYl9VUkxDU3RyaW5nXSwgcmVhc29uLCBbcGx1
Z2luUmVxdWVzdCBub3RpZnlEYXRhXSk7CiAgICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5G
dW5jdGlvbl07CkBAIC0xNjcxLDcgKzE2NzEsNyBAQCAtICh2b2lkKWxvYWRQbHVnaW5SZXF1ZXN0
OihXZWJQbHVnaW5SZXF1CiAgICAgICAgICAgICAgICAgaWYgKFtwbHVnaW5SZXF1ZXN0IHNlbmRO
b3RpZmljYXRpb25dKSB7CiAgICAgICAgICAgICAgICAgICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0lu
RnVuY3Rpb25dOwogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5G
dW5jc10tPnVybG5vdGlmeShwbHVnaW4sIFtbW3BsdWdpblJlcXVlc3QgcmVxdWVzdF0gVVJMXSBf
d2ViX1VSTENTdHJpbmddLCBOUEVSUl9HRU5FUklDX0VSUk9SLCBbcGx1Z2luUmVxdWVzdCBub3Rp
ZnlEYXRhXSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgW3Nl
bGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTI0NzEsNyArMjQ3MSw3IEBAIC0gKE5TQml0
bWFwSW1hZ2VSZXAgKilfcHJpbnRlZFBsdWdpbkJpdG0KICAgICAvLyBUZWxsIHRoZSBwbHVnaW4g
dG8gcHJpbnQgaW50byB0aGUgR1dvcmxkCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlv
bl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwogICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5wcmludChw
bHVnaW4sICZucFByaW50KTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9u
XTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRy
b2xsZXIubW0JKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
V2ViUGx1Z2luQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtOTYsMTAgKzk2LDEwIEBA
ICsgKE5TVmlldyAqKXBsdWdJblZpZXdXaXRoQXJndW1lbnRzOihOU0QKICAgICBOU1ZpZXcgKnZp
ZXcgPSBuaWw7CiAKICAgICBpZiAoW3ZpZXdGYWN0b3J5IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IocGx1Z0luVmlld1dpdGhBcmd1bWVudHM6KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgdmlldyA9IFt2aWV3RmFjdG9y
eSBwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czphcmd1bWVudHNdOwogICAgIH0gZWxzZSBpZiAoW3Zp
ZXdGYWN0b3J5IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luVmlld1dpdGhBcmd1
bWVudHM6KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKICAgICAgICAgdmlldyA9IFt2aWV3RmFjdG9yeSBwbHVnaW5WaWV3V2l0aEFyZ3VtZW50
czphcmd1bWVudHNdOwogICAgIH0KICAgICAKQEAgLTE0OSwxMCArMTQ5LDEwIEBAIC0gKHZvaWQp
ZGVhbGxvYwogLSAodm9pZClzdG9wT25lUGx1Z2luOihOU1ZpZXcgKil2aWV3CiB7CiAgICAgaWYg
KFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luU3RvcCldKSB7Ci0g
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAg
IFt2aWV3IHdlYlBsdWdJblN0b3BdOwogICAgIH0gZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3RvcihwbHVnaW5TdG9wKV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgW3ZpZXcgcGx1Z2luU3RvcF07CiAg
ICAgfQogfQpAQCAtMTYwLDEwICsxNjAsMTAgQEAgLSAodm9pZClzdG9wT25lUGx1Z2luOihOU1Zp
ZXcgKil2aWV3CiAtICh2b2lkKWRlc3Ryb3lPbmVQbHVnaW46KE5TVmlldyAqKXZpZXcKIHsKICAg
ICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5EZXN0cm95
KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAgICAgW3ZpZXcgd2ViUGx1Z0luRGVzdHJveV07CiAgICAgfSBlbHNlIGlmIChbdmlldyBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpbkRlc3Ryb3kpXSkgewotICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBbdmlldyBw
bHVnaW5EZXN0cm95XTsKICAgICB9CiB9CkBAIC0xODAsMTAgKzE4MCwxMCBAQCAtICh2b2lkKXN0
YXJ0QWxsUGx1Z2lucwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAg
ICAgICBpZCBhVmlldyA9IFtfdmlld3Mgb2JqZWN0QXRJbmRleDppXTsKICAgICAgICAgaWYgKFth
VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJblN0YXJ0KV0pIHsKLSAg
ICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgICAgICAgICAgW2FWaWV3IHdlYlBsdWdJblN0YXJ0XTsKICAgICAgICAgfSBlbHNlIGlmIChb
YVZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5TdGFydCldKSB7Ci0gICAg
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICAgICAgICAgIFthVmlldyBwbHVnaW5TdGFydF07CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTIs
MTAgKzI1MiwxMCBAQCAtICh2b2lkKWFkZFBsdWdpbjooTlNWaWV3ICopdmlldwogCiAgICAgICAg
IExPRyhQbHVnaW5zLCAiaW5pdGlhbGl6aW5nIHBsdWctaW4gJUAiLCB2aWV3KTsKICAgICAgICAg
aWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luSW5pdGlhbGl6
ZSldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICAgICAgICAgIFt2aWV3IHdlYlBsdWdJbkluaXRpYWxpemVdOwogICAgICAg
ICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luSW5p
dGlhbGl6ZSldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIFt2aWV3IHBsdWdpbkluaXRpYWxpemVdOwogICAg
ICAgICB9CiAKQEAgLTI2NSwxNSArMjY1LDE1IEBAIC0gKHZvaWQpYWRkUGx1Z2luOihOU1ZpZXcg
Kil2aWV3CiAgICAgICAgIGlmIChfc3RhcnRlZCkgewogICAgICAgICAgICAgTE9HKFBsdWdpbnMs
ICJzdGFydGluZyBwbHVnLWluICVAIiwgdmlldyk7CiAgICAgICAgICAgICBpZiAoW3ZpZXcgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5TdGFydCldKSB7Ci0gICAgICAgICAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgICAgICAgICAgICAgIFt2aWV3IHdlYlBsdWdJblN0YXJ0XTsKICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5TdGFydCldKSB7
Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgICAgICAgICAgICAgIFt2aWV3IHBsdWdpblN0YXJ0XTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3Ioc2V0Q29udGFpbmluZ1dpbmRvdzopXSkgewotICAgICAgICAgICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAg
ICAgICAgICAgICBbdmlldyBzZXRDb250YWluaW5nV2luZG93OltfZG9jdW1lbnRWaWV3IHdpbmRv
d11dOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5z
L0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAg
LTg2Nyw4ICs4NjcsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVh
CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhw
bHVnaW5Xb3JsZCgpLT5nbG9iYWxEYXRhKCkpOwogICAgIFN0cm9uZzxKU0dsb2JhbE9iamVjdD4g
Z2xvYmFsT2JqZWN0KCpwbHVnaW5Xb3JsZCgpLT5nbG9iYWxEYXRhKCksIGZyYW1lLT5zY3JpcHQo
KS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIApAQCAtOTA0LDcgKzkwMyw3IEBAIGJvb2wgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0
KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVl
IGZ1bmN0aW9uID0gb2JqZWN0LT5nZXQoZXhlYywgbWV0aG9kTmFtZSk7CiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwg
Y2FsbERhdGEpOwpAQCAtOTM3LDcgKzkzNiw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjppbnZva2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5n
bG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgICAg
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIENhbGxEYXRhIGNhbGxEYXRh
OwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxs
RGF0YShvYmplY3QsIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25l
KQpAQCAtOTY5LDcgKzk2OCw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpj
b25zdHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVj
KCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAg
ICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dENvbnN0cnVjdERhdGEob2JqZWN0LCBjb25zdHJ1Y3REYXRhKTsKQEAgLTEwMDIsNyArMTAwMSw3
IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQcm8KICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+
Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7ICAgIAogICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5h
bWUpOwogICAgIAogICAgIG1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVz
dWx0TGVuZ3RoKTsKQEAgLTEwMjMsNyArMTAyMiw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjpnZXRQcm8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkp
LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsg
ICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIEpTVmFsdWUgdmFsdWUg
PSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIAogICAgIG1hcnNoYWxWYWx1
ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKQEAgLTEwNDcsNyArMTA0
Niw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRQcm8KICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQo
KS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7ICAgIAogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlbWFyc2hhbFZhbHVlKGV4ZWMsIHZh
bHVlRGF0YSwgdmFsdWVMZW5ndGgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwpAQCAtMTA3
Myw3ICsxMDcyLDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldFBybwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUt
PnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAgICAKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsgICAgCiAgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlbWFyc2hhbFZh
bHVlKGV4ZWMsIHZhbHVlRGF0YSwgdmFsdWVMZW5ndGgpOwogICAgIG9iamVjdC0+bWV0aG9kVGFi
bGUoKS0+cHV0QnlJbmRleChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGZhbHNl
KTsKQEAgLTEwOTgsMTIgKzEwOTcsMTIgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OnJlbW92ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhl
YygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghb2JqZWN0LT5oYXNQ
cm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOyAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMjUsMTIgKzExMjQsMTIg
QEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbW92ZQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5n
bG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBpZiAoIW9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVy
dHlOYW1lKSkgewogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
b2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
ICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTE5Niw3ICsxMTk1LDcgQEAgYm9vbCBOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6Omhhc01ldAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1
Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUgZnVu
YyA9IG9iamVjdC0+Z2V0KGV4ZWMsIG1ldGhvZE5hbWUpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgcmV0dXJuICFmdW5jLmlzVW5kZWZpbmVkKCk7CkBAIC0xMjE4LDcgKzEyMTcs
NyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVyCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkt
Pmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAgCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjKTsKICAgICBvYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKQEAgLTEyNjIsNyArMTI2MSw3IEBA
IHN0YXRpYyBib29sIGdldE9iamVjdElEKE5ldHNjYXBlUGx1Z2luSW4KICAgICAKIHZvaWQgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWx1ZVRvQXJyYXkoTlNNdXRhYmxlQXJyYXkg
KmFycmF5LCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7CiAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6U3RyaW5nVmFsdWVUeXBlXV07CkBAIC0xNjcyLDcgKzE2
NzEsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bW92ZUdsCiAgICAgICAg
IHJldHVybjsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHRocm93RXJy
b3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgc3RyaW5nVG9VU3RyaW5nKGdsb2JhbEV4Y2VwdGlv
blN0cmluZygpKSkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDYgQEAgdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIHVzaW5nIEpTQzo6SlNHbG9iYWxPYmplY3Q7CiB1c2luZyBKU0M6OkpT
TG9jazsKIHVzaW5nIEpTQzo6SlNWYWx1ZTsKLXVzaW5nIEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5OwogCiAvKgogSGVyZSBpcyB0aGUgY3VycmVudCBiZWhhdmlvciBtYXRyaXggZm9yIGZvdXIg
dHlwZXMgb2YgbmF2aWdhdGlvbnM6CkBAIC01OTcsOCArNTk2LDggQEAgLSAoTlNTdHJpbmcgKilf
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcgogICAgIGlmICghcmVzdWx0IHx8ICghcmVzdWx0Lmlz
Qm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpKQog
ICAgICAgICByZXR1cm4gQCIiOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNj
cmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVj
KCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICByZXR1cm4gdXN0cmlu
Z1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogfQogCkBAIC0x
MTIzLDggKzExMjIsOCBAQCAtIChOU1N0cmluZyAqKV9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
CiAgICAgaWYgKCFyZXN1bHQgfHwgKCFyZXN1bHQuaXNCb29sZWFuKCkgJiYgIXJlc3VsdC5pc1N0
cmluZygpICYmICFyZXN1bHQuaXNOdW1iZXIoKSkpCiAgICAgICAgIHJldHVybiBAIiI7CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTQzo6RXhlY1N0YXRl
KiBleGVjID0gYW55V29ybGRHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcocmVzdWx0
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxl
Z2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDkgKzE3NCw5IEBAIC0gKE5TQXJyYXkgKilz
Y29wZUNoYWluCiAgICAgaWYgKCFfcHJpdmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUpCiAgICAgICAg
IHJldHVybiBbTlNBcnJheSBhcnJheV07CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogCiAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBfcHJpdmF0ZS0+
ZGVidWdnZXJDYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhz
Y29wZUNoYWluLT5nbG9iYWxEYXRhKTsKICAgICBpZiAoIXNjb3BlQ2hhaW4tPm5leHQpICAvLyBn
bG9iYWwgZnJhbWUKICAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpfcHJp
dmF0ZS0+Z2xvYmFsT2JqZWN0XTsKIApAQCAtMjI5LDEzICsyMjksMTMgQEAgLSAoaWQpZXZhbHVh
dGVXZWJTY3JpcHQ6KE5TU3RyaW5nICopc2NyaQogICAgIGlmICghX3ByaXZhdGUtPmRlYnVnZ2Vy
Q2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKLQogICAgIC8vIElmIHRoaXMgaXMgdGhlIGdsb2JhbCBjYWxsIGZy
YW1lIGFuZCB0aGVyZSBpcyBubyBkeW5hbWljIGdsb2JhbCBvYmplY3QsCiAgICAgLy8gRGFzaGNv
ZGUgaXMgYXR0ZW1wdGluZyB0byBleGVjdXRlIEpTIGluIHRoZSBldmFsdWF0b3IgdXNpbmcgYSBz
dGFsZQogICAgIC8vIFdlYlNjcmlwdENhbGxGcmFtZS4gSW5zdGVhZCwgd2UgbmVlZCB0byBzZXQg
dGhlIGR5bmFtaWMgZ2xvYmFsIG9iamVjdAogICAgIC8vIGFuZCBldmFsdWF0ZSB0aGUgSlMgaW4g
dGhlIGdsb2JhbCBvYmplY3QncyBnbG9iYWwgY2FsbCBmcmFtZS4KICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gX3ByaXZhdGUtPmRlYnVnZ2VyLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisKICAgICBp
ZiAoc2VsZiA9PSBfcHJpdmF0ZS0+ZGVidWdnZXItPmdsb2JhbENhbGxGcmFtZSgpICYmICFnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KSB7CiAgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBfcHJpdmF0ZS0+ZGVidWdnZXItPmdsb2JhbE9i
amVjdCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTU4MSw4ICs1ODEsOCBAQCArICh2b2lkKV9yZXBvcnRFeGNlcHRpb246KEpT
VmFsdWVSZWYpZXhjCiAgICAgaWYgKCFleGNlcHRpb24gfHwgIWNvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlND
OjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZSA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlY1N0YXRlKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBoYXMgYSBE
T01XaW5kb3cgZ2xvYmFsIG9iamVjdCwgb3RoZXJ3aXNlIHRoaXMgY29udGV4dCBkaWRuJ3Qgb3Jp
Z2luYXRlIGZyb20gYSBXZWJWaWV3LgogICAgIGlmICghdG9KU0RPTVdpbmRvdyhleGVjU3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKSkpCkBAIC00ODUxLDcgKzQ4NTEsNyBAQCAtIChOU0FwcGxl
RXZlbnREZXNjcmlwdG9yICopYWVEZXNjQnlFdmFsCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjb3Jl
RnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KHNjcmlwdCwgdHJ1ZSkuanNWYWx1ZSgpOwog
ICAgIGlmICghcmVzdWx0KSAvLyBGSVhNRTogcGFzcyBlcnJvcnMKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhjb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1h
bFdvcmxkKCkpLT5nbG9iYWxFeGVjKCkpOwogICAgIHJldHVybiBhZURlc2NGcm9tSlNWYWx1ZShj
b3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkp
LT5nbG9iYWxFeGVjKCksIHJlc3VsdCk7CiB9CiAKQEAgLTY1NjAsOCArNjU2MCw4IEBAIC0gKHZv
aWQpX25vdGlmaWNhdGlvbnNEaWRDbG9zZTooTlNBcnJheSAKIAogLSAoSlNWYWx1ZVJlZilfY29t
cHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvOihKU0NvbnRleHRSZWYpY29udGV4dCBmb3JF
bGVtZW50OihKU1ZhbHVlUmVmKXZhbHVlCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pT
KGV4ZWMsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQg
dXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAg
YW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0
IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAg
ICAgICAqIEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6YWRk
UXRTZW5kZXJUb0dsb2JhbE9iamVjdCk6CisgICAgICAgIChRV2ViRnJhbWU6OmFkZFRvSmF2YVNj
cmlwdFdpbmRvd09iamVjdCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmluamVj
dEludGVybmFsc09iamVjdCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVz
ZXRJbnRlcm5hbHNPYmplY3QpOgorCiAyMDEyLTA2LTIxICBUaGlhZ28gTWFyY29zIFAuIFNhbnRv
cyAgPHRoaWFnby5zYW50b3NAaW50ZWwuY29tPgogCiAgICAgICAgIFtXSzJdW1F0XSBDb2xvciBj
aG9vc2VyIEFQSSBtaXNzaW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHJl
dmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwNiwxMyArNTA2LDEyIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHF0U2Vu
ZGVyQ2FsbGJhY2soSlNDb24KIAogdm9pZCBRV2ViRnJhbWVQcml2YXRlOjphZGRRdFNlbmRlclRv
R2xvYmFsT2JqZWN0KCkKIHsKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKLQogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KGZy
YW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgUV9BU1NFUlQod2luZG93KTsKIAog
ICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CiAgICAgUV9B
U1NFUlQoZXhlYyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpT
Q29udGV4dFJlZiBjb250ZXh0ID0gOjp0b1JlZihleGVjKTsKICAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gcHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiX19xdF9zZW5kZXJfXyIpKTsKQEAgLTY1Nyw3ICs2NTYsNiBAQCB2b2lkIFFXZWJGcmFtZTo6
YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqCiAgICAgICAgIHJldHVybjsKICNpZiBVU0UoSlNDKQog
ICAgIEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6OlZhbHVlT3duZXJzaGlwIHZhbHVlT3duZXJz
aGlwID0gc3RhdGljX2Nhc3Q8SlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6VmFsdWVPd25lcnNo
aXA+KG93bmVyc2hpcCk7Ci0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZC0+ZnJh
bWUsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBKU0M6OkJpbmRpbmdzOjpSb290T2Jq
ZWN0KiByb290OwogICAgIGlmICh2YWx1ZU93bmVyc2hpcCA9PSBKU0M6OkJpbmRpbmdzOjpRdElu
c3RhbmNlOjpRdE93bmVyc2hpcCkKQEAgLTY3NSw2ICs2NzMsNyBAQCB2b2lkIFFXZWJGcmFtZTo6
YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqCiAgICAgfQogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4
ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogCiAgICAgSlNDOjpKU09iamVjdCogcnVudGltZU9iamVjdCA9CiAgICAgICAgICAgICBK
U0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpnZXRRdEluc3RhbmNlKG9iamVjdCwgcm9vdCwgdmFs
dWVPd25lcnNoaXApLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwpJbmRleDogU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDg2LDEzICsxMDg2LDEyIEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmluamVjdElu
dGUKIHsKICAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6
Y29yZShmcmFtZSk7CiAjaWYgVVNFKEpTQykKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKLQogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9N
V2luZG93KGNvcmVGcmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogICAgIFFfQVNTRVJU
KHdpbmRvdyk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhl
YygpOwogICAgIFFfQVNTRVJUKGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IHRvUmVmKGV4ZWMpOwogICAgIFdlYkNv
cmVUZXN0U3VwcG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQpOwpAQCAtMTExMywx
MyArMTExMiwxMiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldEludGVyCiB7
CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUo
ZnJhbWUpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VB
c3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRv
dyhjb3JlRnJhbWUsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBRX0FTU0VSVCh3aW5k
b3cpOwogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsK
ICAgICBRX0FTU0VSVChleGVjKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSB0b1JlZihleGVjKTsKICAgICBXZWJDb3JlVGVz
dFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQpOwpJbmRleDogU291cmNlL1dl
YktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTItMDYtMjAgIE1hcmsgSGFobmVuYmVy
ZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBKU0xvY2sgc2hvdWxkIGJlIHBl
ci1KU0dsb2JhbERhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg5MTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ2hhbmdlZCBhbGwgc2l0ZXMgdGhhdCB1c2VkIEpTTG9jayB0byBpbnN0ZWFkIHVzZSB0
aGUgbmV3IEpTTG9ja0hvbGRlcgorICAgICAgICBhbmQgcGFzcyBpbiB0aGUgY29ycmVjdCBKUyBj
b250ZXh0IHRoYXQgdGhlIGNvZGUgaXMgYWJvdXQgdG8gaW50ZXJhY3Qgd2l0aCB0aGF0IAorICAg
ICAgICBuZWVkcyBwcm90ZWN0aW9uLgorCisgICAgICAgICogV2ViQ29yZVN0YXRpc3RpY3MuY3Bw
OgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgor
ICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQp
OgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3Rz
Q291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRH
bG9iYWxPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3Jp
cHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKToKKyAgICAgICAgKiBXZWJGcmFtZS5jcHA6Cisg
ICAgICAgIChXZWJGcmFtZTo6c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEluU2NyaXB0V29y
bGQpOgorICAgICAgICAqIFdlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2Vi
SmF2YVNjcmlwdENvbGxlY3Rvcjo6b2JqZWN0Q291bnQpOgorICAgICAgICAqIFdlYlZpZXcuY3Bw
OgorICAgICAgICAoV2ViVmlldzo6c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJp
bmcpOgorICAgICAgICAoV2ViVmlldzo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgKFdlYlZp
ZXc6OmVsZW1lbnRGcm9tSlMpOgorCiAyMDEyLTA2LTIwICBHYXJyZXQgS2VsbHkgIDxnZGtAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIE1vdmluZyBjb29raWVFbmFibGVkL3NldENvb2tpZUVuYWJs
ZWQgZnJvbSBQYWdlIHRvIFNldHRpbmdzLgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29y
ZVN0YXRpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVT
dGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC93aW4vV2Vi
Q29yZVN0YXRpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBpZiAoIWNvdW50KQogICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQpAQCAtMTA5
LDcgKzEwOSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKICAg
ICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOwogICAg
IHJldHVybiBTX09LOwogfQpAQCAtMTIwLDcgKzEyMCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
ICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5w
cm90ZWN0ZWRPYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQpAQCAtMTMxLDcgKzEz
MSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBpZiAo
IWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpj
b21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwog
ICAgIHJldHVybiBTX09LOwogfQpAQCAtMTM5LDcgKzEzOSw3IEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29y
ZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCAKICAgICAv
KiBbcmV0dmFsXVtvdXRdICovIElQcm9wZXJ0eUJhZzIqKiB0eXBlTmFtZXNBbmRDb3VudHMpCiB7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIE93blB0cjxU
eXBlQ291bnRTZXQ+IGpzT2JqZWN0VHlwZU5hbWVzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOwogICAgIHR5cGVkZWYg
VHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKICAgICBJdGVyYXRvciBlbmQg
PSBqc09iamVjdFR5cGVOYW1lcy0+ZW5kKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJG
cmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcg
SlNDOjpKU0dsb2JhbE9iamVjdDsKIHVzaW5nIEpTQzo6SlNMb2NrOwogdXNpbmcgSlNDOjpKU1Zh
bHVlOwotdXNpbmcgSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHk7CiAKICNkZWZpbmUgRkxBU0hf
UkVEUkFXIDAKIApAQCAtMjUyOCw4ICsyNTI3LDggQEAgSFJFU1VMVCBXZWJGcmFtZTo6c3RyaW5n
QnlFdmFsdWF0aW5nSmF2YQogICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQuaXNCb29sZWFuKCkg
JiYgIXJlc3VsdC5pc1N0cmluZygpICYmICFyZXN1bHQuaXNOdW1iZXIoKSkKICAgICAgICAgcmV0
dXJuIFNfT0s7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAg
IEpTQzo6RXhlY1N0YXRlKiBleGVjID0gYW55V29ybGRHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KTsKKyAgICBKU0xvY2tIb2xkZXJIb2xkZXIgbG9jayhleGVjKTsKICAgICBTdHJpbmcgcmVzdWx0
U3RyaW5nID0gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOwogICAgICpldmFsdWF0aW9uUmVzdWx0ID0gQlN0cmluZyhyZXN1bHRTdHJpbmcpLnJlbGVh
c2UoKTsKIApJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViSmF2YVNjcmlwdENvbGxlY3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViSmF2YVNjcmlwdENvbGxlY3Rv
ci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkphdmFTY3Jp
cHRDb2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBXZWJKYXZhU2NyaXB0QwogICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhl
YXAub2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZp
ZXcuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzE5NCw4ICszMTk0LDggQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBXZWJWaWV3OjpzdHJpbgogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uUmVzdWx0KQog
ICAgICAgICByZXR1cm4gRV9GQUlMOwogICAgIGVsc2UgaWYgKHNjcmlwdEV4ZWN1dGlvblJlc3Vs
dC5pc1N0cmluZygpKSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKICAgICAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBjb3JlRnJhbWUtPnNjcmlw
dCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVjKCk7
CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAqcmVzdWx0ID0gQlN0
cmluZyh1c3RyaW5nVG9TdHJpbmcoc2NyaXB0RXhlY3V0aW9uUmVzdWx0LmdldFN0cmluZyhleGVj
KSkpOwogICAgIH0KIApAQCAtNTg1MSw4ICs1ODUxLDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBXZWJWaWV3OjpyZXBvcgogICAgIGlmICghY29udGV4dCB8fCAhZXhjZXB0aW9uKQogICAg
ICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgSlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjU3RhdGUgPSB0b0pTKGNvbnRleHQp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWNTdGF0ZSk7CiAKICAgICAvLyBNYWtlIHN1cmUg
dGhlIGNvbnRleHQgaGFzIGEgRE9NV2luZG93IGdsb2JhbCBvYmplY3QsIG90aGVyd2lzZSB0aGlz
IGNvbnRleHQgZGlkbid0IG9yaWdpbmF0ZSBmcm9tIGEgV2ViVmlldy4KICAgICBpZiAoIXRvSlNE
T01XaW5kb3coZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKQpAQCAtNTg3OCw4ICs1
ODc4LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjplbGVtZQogICAgIGlm
ICghbm9kZU9iamVjdCkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIEpTTG9jayBsb2Nr
KEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBFbGVtZW50KiBlbHQgPSB0b0VsZW1l
bnQodG9KUyh0b0pTKGNvbnRleHQpLCBub2RlT2JqZWN0KSk7CisgICAgRXhlY1N0YXRlKiBleGVj
ID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBFbGVt
ZW50KiBlbHQgPSB0b0VsZW1lbnQodG9KUyhleGVjLCBub2RlT2JqZWN0KSk7CiAgICAgaWYgKCFl
bHQpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148950</attachid>
            <date>2012-06-21 20:23:21 -0700</date>
            <delta_ts>2012-06-21 20:46:38 -0700</delta_ts>
            <desc>Windows</desc>
            <filename>bug-89123-20120621202321.patch</filename>
            <type>text/plain</type>
            <size>206727</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBA
QAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9BUElTaGltcy5oOgorICAg
ICAgICAoQVBJRW50cnlTaGltV2l0aG91dExvY2spOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNo
aW1XaXRob3V0TG9jazo6QVBJRW50cnlTaGltV2l0aG91dExvY2spOiBBZGRlZCBhbiBleHRyYSBw
YXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIHRvIAorICAgICAgICBkZXRlcm1pbmUgd2hldGhl
ciB3ZSBzaG91bGQgcmVmIHRoZSBKU0dsb2JhbERhdGEgb3Igbm90LiBXZSB3YW50IHRvIHJlZiBh
bGwgdGhlIHRpbWUgZXhjZXB0IGZvciBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBjbGFzcyBi
ZWNhdXNlIHRpbWVyRGlkRmlyZSBjb3VsZCBydW4gYWZ0ZXIgc29tZWJvZHkgaGFzIHN0YXJ0ZWQg
dG8gdGVhciBkb3duIHRoYXQgcGFydGljdWxhciAKKyAgICAgICAgSlNHbG9iYWxEYXRhLCBzbyB3
ZSB3b3VsZG4ndCB3YW50IHRvIHJlc3VycmVjdCB0aGUgcmVmIGNvdW50IG9mIHRoYXQgSlNHbG9i
YWxEYXRhIGZyb20gMCBiYWNrIHRvIDEgYWZ0ZXIgCisgICAgICAgIGl0cyBkZXN0cnVjdGlvbiBo
YXMgYmVndW4uIAorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW1XaXRob3V0TG9jazo6fkFQSUVu
dHJ5U2hpbVdpdGhvdXRMb2NrKTogTm93IGRlcmVmcyBpZiBpdCBhbHNvIHJlZmVkLgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OkFQSUVudHJ5U2hpbSk6CisgICAgICAgIChBUElFbnRyeVNo
aW0pOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW06On5BUElFbnRyeVNoaW0pOgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OmluaXQpOiBGYWN0b3JlZCBvdXQgY29tbW9uIGluaXRpYWxp
emF0aW9uIGNvZGUgZm9yIHRoZSB2YXJpb3VzIEFQSUVudHJ5U2hpbSBjb25zdHJ1Y3RvcnMuCisg
ICAgICAgIEFsc28gbW92ZWQgdGhlIHRpbWVvdXRDaGVja2VyIHN0b3AgYW5kIHN0YXJ0IGhlcmUg
YmVjYXVzZSB3ZSBuZWVkIHRvIHN0YXJ0IGFmdGVyIHdlJ3ZlIGdyYWJiZWQgdGhlIEFQSSBsb2Nr
CisgICAgICAgIGFuZCBiZWZvcmUgd2UndmUgcmVsZWFzZWQgaXQsIHdoaWNoIGNhbiBvbmx5IGRv
bmUgaW4gQVBJRW50cnlTaGltLgorICAgICAgICAoSlNDOjpBUElDYWxsYmFja1NoaW06On5BUElD
YWxsYmFja1NoaW0pOiBXZSBubyBsb25nZXIgbmVlZCB0byBzeW5jaHJvbml6ZSBoZXJlLgorICAg
ICAgICAqIEFQSS9KU0NvbnRleHRSZWYuY3BwOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0Q3Jl
YXRlKToKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXApOgorICAgICAgICAo
SlNHbG9iYWxDb250ZXh0UmVsZWFzZSk6CisgICAgICAgIChKU0NvbnRleHRDcmVhdGVCYWNrdHJh
Y2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRTcGFjZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6cHJvdGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucHJv
dGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFw
OjpzZXRBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWN0aXZpdHlDYWxs
YmFjayk6CisgICAgICAgIChKU0M6OkhlYXA6OnN3ZWVwZXIpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOiBDaGFuZ2VkIG1fYWN0aXZpdHlDYWxsYmFjayBhbmQgbV9zd2VlcGVyIHRvIGJlIHJhdyBw
b2ludGVycyByYXRoZXIgdGhhbiBPd25QdHJzIGJlY2F1c2UgdGhleSAKKyAgICAgICAgYXJlIG5v
dyByZXNwb25zaWJsZSBmb3IgdGhlaXIgb3duIGxpZmV0aW1lLiBBbHNvIGNoYW5nZWQgdGhlIG9y
ZGVyIG9mIGRlY2xhcmF0aW9uIG9mIHRoZSBHQ0FjdGl2aXR5Q2FsbGJhY2sKKyAgICAgICAgYW5k
IHRoZSBJbmNyZW1lbnRhbFN3ZWVwZXIgdG8gbWFrZSBzdXJlIHRoZXkncmUgdGhlIGxhc3QgdGhp
bmdzIHRoYXQgZ2V0IGluaXRpYWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gdG8gCisgICAgICAg
IHByZXZlbnQgYW55IGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBKU0ds
b2JhbERhdGEvSGVhcCB0aGV5IG1pZ2h0IGNhcmUgYWJvdXQuCisgICAgICAgIChIZWFwKToKKyAg
ICAgICAgKiBoZWFwL0hlYXBUaW1lci5jcHA6IFJlZmFjdG9yZWQgdG8gYWxsb3cgZm9yIHRocmVh
ZC1zYWZlIG9wZXJhdGlvbiBhbmQgc2h1dGRvd24uCisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6
fkhlYXBUaW1lcik6CisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6aW52YWxpZGF0ZSk6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OmRpZFN0YXJ0Vk1TaHV0ZG93bik6
IENhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIH5KU0dsb2JhbERhdGEuIElmIHdlJ3JlIG9uIHRo
ZSBzYW1lIHRocmVhZCAKKyAgICAgICAgdGhhdCB0aGUgSGVhcFRpbWVyIGlzIHJ1bm5pbmcgb24s
IHdlIGtpbGwgdGhlIEhlYXBUaW1lciBvdXJzZWx2ZXMuIElmIG5vdCwgdGhlbiB3ZSBzZXQgc29t
ZSBzdGF0ZSBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBhbmQgc2NoZWR1bGUgaXQgdG8gZmly
ZSBpbW1lZGlhdGVseSBzbyB0aGF0IGl0IGNhbiBub3RpY2UgYW5kIGtpbGwgaXRzZWxmLgorICAg
ICAgICAoSlNDOjpIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSk6IFdlIGdyYWIgb3VyIG11dGV4IGFu
ZCBjaGVjayBvdXIgSlNHbG9iYWxEYXRhIHBvaW50ZXIuIElmIGl0IGhhcyBiZWVuIHplcm8tZWQK
KyAgICAgICAgb3V0LCB0aGVuIHdlIGtub3cgdGhlIFZNIGhhcyBzdGFydGVkIHRvIHNodXRkb3du
IGFuZCB3ZSBzaG91bGQga2lsbCBvdXJzZWx2ZXMuIE90aGVyd2lzZSwgZ3JhYiB0aGUgQVBJRW50
cnlTaGltLAorICAgICAgICBidXQgd2l0aG91dCByZWYtaW5nIHRoZSBKU0dsb2JhbERhdGEgKHdl
IGRvbid0IHdhbnQgdG8gYnJpbmcgdGhlIEpTR2xvYmFsRGF0YSdzIHJlZi1jb3VudCBmcm9tIDAg
dG8gMSkgaW4gY2FzZSAKKyAgICAgICAgd2Ugd2VyZSBpbnRlcnJ1cHRlZCBiZXR3ZWVuIHJlbGVh
c2luZyBvdXIgbXV0ZXggYW5kIHRyeWluZyB0byBncmFiIHRoZSBBUElMb2NrLgorICAgICAgICAq
IGhlYXAvSGVhcFRpbWVyLmg6IAorICAgICAgICAoSGVhcFRpbWVyKToKKyAgICAgICAgKiBoZWFw
L0luY3JlbWVudGFsU3dlZXBlci5jcHA6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBl
cjo6ZG9Xb3JrKTogV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIEFQSSBzaGltIGhlcmUgc2luY2UgSGVh
cFRpbWVyOjp0aW1lckRpZEZpcmUgaGFuZGxlcyAKKyAgICAgICAgYWxsIG9mIHRoYXQgZm9yIHVz
LiAKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUpOgorICAgICAgICAq
IGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAgIChJbmNyZW1lbnRhbFN3ZWVwZXIp
OgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKiBoZWFwL1dlYWtCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OldlYWtCbG9jazo6cmVhcCk6CisgICAgICAgICoganNjLmNw
cDoKKyAgICAgICAgKGZ1bmN0aW9uR0MpOgorICAgICAgICAoZnVuY3Rpb25SZWxlYXNlRXhlY3V0
YWJsZU1lbW9yeSk6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBs
ZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpjaGVja1N5bnRheCk6CisgICAgICAgIChKU0M6OmV2
YWx1YXRlKToKKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oOgorICAgICAg
ICAoRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayk6CisgICAgICAgIChKU0M6OkRlZmF1bHRHQ0Fj
dGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6IFNpZ25hbHMgdG8gdGhlIHR3byBI
ZWFwVGltZXJzIChHQ0FjdGl2aXR5Q2FsbGJhY2sgYW5kIEluY3JlbWVudGFsU3dlZXBlcikKKyAg
ICAgICAgdGhhdCB0aGUgVk0gaGFzIHN0YXJ0ZWQgc2h1dHRpbmcgZG93bi4gSXQgdGhlbiB3YWl0
cyB1bnRpbCB0aGUgSGVhcFRpbWVyIGlzIGRvbmUgd2l0aCB3aGF0ZXZlciBhY3Rpdml0eSAKKyAg
ICAgICAgaXQgbmVlZHMgdG8gZG8gYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCBhbnkgZnVydGhlciBk
ZXN0cnVjdGlvbi4gQWxzbyBhc3NlcnRzIHRoYXQgd2UgZG8gbm90IGN1cnJlbnRseSBob2xkIHRo
ZSAKKyAgICAgICAgQVBJTG9jayBiZWNhdXNlIHRoaXMgY291bGQgcG90ZW50aWFsbHkgY2F1c2Ug
ZGVhZGxvY2sgd2hlbiB3ZSB0cnkgdG8gc2lnbmFsIHRvIHRoZSBIZWFwVGltZXJzIHVzaW5nIHRo
ZWlyIG11dGV4ZXMuCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2Up
OiBQcm90ZWN0IHRoZSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNoYXJlZCBpbnN0YW5jZSB3aXRo
IHRoZSBHbG9iYWxKU0xvY2suCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5z
dGFuY2VJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDogQ2hhbmdl
IHRvIGJlIFRocmVhZFNhZmVSZWZDb3VudGVkIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3Jy
eSBhYm91dCByZWZpbmcgYW5kIAorICAgICAgICBkZS1yZWZpbmcgSlNHbG9iYWxEYXRhcyBvbiBz
ZXBhcmF0ZSB0aHJlYWRzIHNpbmNlIHdlIGRvbid0IGRvIGl0IHRoYXQgb2Z0ZW4gYW55d2F5cy4K
KyAgICAgICAgKEpTR2xvYmFsRGF0YSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6YXBp
TG9jayk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogcnVudGltZS9KU0xvY2suY3BwOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEpTQzo6R2xvYmFsSlNMb2NrOjpHbG9iYWxKU0xvY2spOiBGb3Ig
YWNjZXNzaW5nIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisgICAgICAgIChKU0M6Okdsb2JhbEpTTG9j
azo6fkdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6SlNMb2NrSG9s
ZGVyKTogTXV0ZXhMb2NrZXIgZm9yIEpTTG9jay4gQWxzbyByZWZzIHRoZSBKU0dsb2JhbERhdGEg
dG8ga2VlcCBpdCBhbGl2ZSBzbyB0aGF0IAorICAgICAgICBpdCBjYW4gc3VjY2Vzc2Z1bGx5IHVu
bG9jayBpdCBsYXRlciB3aXRob3V0IGl0IGRpc2FwcGVhcmluZyBmcm9tIHVuZGVybmVhdGggaXQu
CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6fkpTTG9ja0hvbGRlcik6CisgICAgICAgIChK
U0M6OkpTTG9jazo6SlNMb2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp+SlNMb2NrKToKKyAg
ICAgICAgKEpTQzo6SlNMb2NrOjpsb2NrKTogVXNlcyB0aGUgc3BpbiBsb2NrIGZvciBndWFyZGlu
ZyB0aGUgbG9jayBjb3VudCBhbmQgb3duZXIgdGhyZWFkIGZpZWxkcy4gVXNlcyB0aGUgbXV0ZXgg
Zm9yIAorICAgICAgICBhY3R1YWxseSB3YWl0aW5nIGZvciBsb25nIHBlcmlvZHMuIAorICAgICAg
ICAoSlNDOjpKU0xvY2s6OnVubG9jayk6CisgICAgICAgIChKU0M6OkpTTG9jazo6Y3VycmVudFRo
cmVhZElzSG9sZGluZ0xvY2spOiAKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpkcm9wQWxsTG9ja3Mp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseSk6Cisg
ICAgICAgIChKU0M6OkpTTG9jazo6Z3JhYkFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2Nrcyk6CisgICAgICAgIChKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKToKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0xvY2tI
b2xkZXIpOgorICAgICAgICAoSlNMb2NrKToKKyAgICAgICAgKERyb3BBbGxMb2Nrcyk6CisgICAg
ICAgICogcnVudGltZS9XZWFrR0NNYXAuaDoKKyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpzZXQp
OgorICAgICAgICAqIHRlc3RSZWdFeHAuY3BwOgorICAgICAgICAocmVhbE1haW4pOgorCiAyMDEy
LTA2LTIwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVk
dWNlZCAoYnV0IGRpZCBub3QgZWxpbWluYXRlKSB1c2Ugb2YgImJlcnplcmtlciBHQyIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0MKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IGV4ZWMtPmhlYXAoKS0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMzA3LDcgKzMwNyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQygKICNpZm5kZWYgTkRFQlVHCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLnJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KQEAgLTY2Nyw5ICs2NjcsOSBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50
cyhpbnQgYXJnYywgY2hhCiAKIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCisgICAgCiAgICAgUmVm
UHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKFRocmVh
ZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2Jh
bERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBwYXJzZUFyZ3Vt
ZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0UmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJl
Z0V4cC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
UmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDkgKzQ5NSw4IEBAIHN0YXRpYyB2b2lk
IHBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGEKIAogaW50IHJlYWxNYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwot
CiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3Jl
YXRlKFRocmVhZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGdsb2JhbERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBw
YXJzZUFyZ3VtZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJU2hpbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0FQSVNoaW1zLmgJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvQVBJU2hpbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMzEgKzI4LDQwIEBACiAK
ICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIK
KyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNp
bmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
QVBJRW50cnlTaGltV2l0aG91dExvY2sgeworcHVibGljOgorICAgIGVudW0gUmVmR2xvYmFsRGF0
YVRhZyB7IERvbnRSZWZHbG9iYWxEYXRhID0gMCwgUmVmR2xvYmFsRGF0YSB9OworCiBwcm90ZWN0
ZWQ6Ci0gICAgQVBJRW50cnlTaGltV2l0aG91dExvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBib29sIHJlZ2lzdGVyVGhyZWFkKQotICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRh
KQorICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
Ym9vbCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0YVRhZyBzaG91bGRSZWZHbG9iYWxEYXRh
KQorICAgICAgICA6IG1fc2hvdWxkUmVmR2xvYmFsRGF0YShzaG91bGRSZWZHbG9iYWxEYXRhKQor
ICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICAgICAsIG1fZW50cnlJZGVu
dGlmaWVyVGFibGUod3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZ2xv
YmFsRGF0YS0+aWRlbnRpZmllclRhYmxlKSkKICAgICB7CisgICAgICAgIGlmIChzaG91bGRSZWZH
bG9iYWxEYXRhKQorICAgICAgICAgICAgbV9nbG9iYWxEYXRhLT5yZWYoKTsKICAgICAgICAgVU5V
U0VEX1BBUkFNKHJlZ2lzdGVyVGhyZWFkKTsKICAgICAgICAgaWYgKHJlZ2lzdGVyVGhyZWFkKQog
ICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRU
aHJlYWQoKTsKICAgICAgICAgbV9nbG9iYWxEYXRhLT5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+
c3luY2hyb25pemUoKTsKLSAgICAgICAgbV9nbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5zdGFy
dCgpOworICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuc3dlZXBlcigpLT5zeW5jaHJvbml6ZSgp
OwogICAgIH0KIAogICAgIH5BUElFbnRyeVNoaW1XaXRob3V0TG9jaygpCiAgICAgewotICAgICAg
ICBtX2dsb2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKICAgICAgICAgd3RmVGhyZWFk
RGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUobV9lbnRyeUlkZW50aWZpZXJUYWJsZSk7
CisgICAgICAgIGlmIChtX3Nob3VsZFJlZkdsb2JhbERhdGEpCisgICAgICAgICAgICBtX2dsb2Jh
bERhdGEtPmRlcmVmKCk7CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgorICAgIFJlZkds
b2JhbERhdGFUYWcgbV9zaG91bGRSZWZHbG9iYWxEYXRhOwogICAgIEpTR2xvYmFsRGF0YSogbV9n
bG9iYWxEYXRhOwogICAgIElkZW50aWZpZXJUYWJsZSogbV9lbnRyeUlkZW50aWZpZXJUYWJsZTsK
IH07CkBAIC02MSwyMCArNzAsMzggQEAgY2xhc3MgQVBJRW50cnlTaGltIDogcHVibGljIEFQSUVu
dHJ5U2hpbQogcHVibGljOgogICAgIC8vIE5vcm1hbCBBUEkgZW50cnkKICAgICBBUElFbnRyeVNo
aW0oRXhlY1N0YXRlKiBleGVjLCBib29sIHJlZ2lzdGVyVGhyZWFkID0gdHJ1ZSkKLSAgICAgICAg
OiBBUElFbnRyeVNoaW1XaXRob3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRo
cmVhZCkKLSAgICAgICAgLCBtX2xvY2soZXhlYykKKyAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRo
b3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0
YSkKKyAgICB7CisgICAgICAgIGluaXQoKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG5lY2Vzc2FyeSBmb3IgSGVhcFRpbWVyIHRvIHByZXZlbnQgaXQgZnJvbSBhY2NpZGVu
dGFsbHkgcmVzdXJyZWN0aW5nIAorICAgIC8vIHRoZSByZWYgY291bnQgb2YgYSAiZGVhZCIgSlNH
bG9iYWxEYXRhLgorICAgIEFQSUVudHJ5U2hpbShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFJl
Zkdsb2JhbERhdGFUYWcgcmVmR2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUp
CisgICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0YSwgcmVnaXN0ZXJU
aHJlYWQsIHJlZkdsb2JhbERhdGEpCiAgICAgeworICAgICAgICBpbml0KCk7CiAgICAgfQogCiAg
ICAgLy8gSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvciBvbmx5IGhhcyBhIGdsb2JhbERhdGEuCiAg
ICAgQVBJRW50cnlTaGltKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRo
cmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0
YSwgcmVnaXN0ZXJUaHJlYWQpCi0gICAgICAgICwgbV9sb2NrKGdsb2JhbERhdGEtPmlzU2hhcmVk
SW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5KQorICAgICAg
ICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKGdsb2JhbERhdGEsIHJlZ2lzdGVyVGhyZWFkLCBS
ZWZHbG9iYWxEYXRhKQogICAgIHsKKyAgICAgICAgaW5pdCgpOworICAgIH0KKworICAgIH5BUElF
bnRyeVNoaW0oKQorICAgIHsKKyAgICAgICAgbV9nbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5z
dG9wKCk7CisgICAgICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLnVubG9jaygpOwogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBKU0xvY2sgbV9sb2NrOworICAgIHZvaWQgaW5pdCgpCisgICAgewor
ICAgICAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5sb2NrKCk7CisgICAgICAgIG1fZ2xvYmFs
RGF0YS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsKKyAgICB9CiB9OwogCiBjbGFzcyBBUElDYWxs
YmFja1NoaW0gewpAQCAtODgsNyArMTE1LDYgQEAgcHVibGljOgogCiAgICAgfkFQSUNhbGxiYWNr
U2hpbSgpCiAgICAgewotICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuYWN0aXZpdHlDYWxsYmFj
aygpLT5zeW5jaHJvbml6ZSgpOwogICAgICAgICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElk
ZW50aWZpZXJUYWJsZShtX2dsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZSk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDYgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xv
YmFsQ29udGV4dENyZWF0ZQogICAgIC8vIElmIHRoZSBhcHBsaWNhdGlvbiB3YXMgbGlua2VkIGJl
Zm9yZSBKU0dsb2JhbENvbnRleHRDcmVhdGUgd2FzIGNoYW5nZWQgdG8gdXNlIGEgdW5pcXVlIEpT
R2xvYmFsRGF0YSwKICAgICAvLyB3ZSB1c2UgYSBzaGFyZWQgb25lIGZvciBiYWNrd2FyZHMgY29t
cGF0aWJpbGl0eS4KICAgICBpZiAoTlNWZXJzaW9uT2ZMaW5rVGltZUxpYnJhcnkoIkphdmFTY3Jp
cHRDb3JlIikgPD0gd2Via2l0Rmlyc3RWZXJzaW9uV2l0aENvbmN1cnJlbnRHbG9iYWxDb250ZXh0
cykgewotICAgICAgICBKU0xvY2sgbG9jayhMb2NrRm9yUmVhbCk7CiAgICAgICAgIHJldHVybiBK
U0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKHRvUmVmKCZKU0dsb2JhbERhdGE6OnNoYXJlZElu
c3RhbmNlKCkpLCBnbG9iYWxPYmplY3RDbGFzcyk7CiAgICAgfQogI2VuZGlmIC8vIE9TKERBUldJ
TikKQEAgLTkwLDExICs4OSw5IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRD
cmVhdGUKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKLSAgICBKU0xvY2sgbG9jayhM
b2NrRm9yUmVhbCk7CiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IGdyb3Vw
ID8gUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+KHRvSlMoZ3JvdXApKSA6IEpTR2xvYmFsRGF0YTo6
Y3JlYXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlwZVNtYWxsKTsKIAogICAgIEFQSUVudHJ5
U2hpbSBlbnRyeVNoaW0oZ2xvYmFsRGF0YS5nZXQoKSwgZmFsc2UpOwotCiAgICAgZ2xvYmFsRGF0
YS0+bWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsKIAogICAgIGlmICghZ2xvYmFsT2Jq
ZWN0Q2xhc3MpIHsKQEAgLTEyNCwxOCArMTIxLDE5IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0ds
b2JhbENvbnRleHRSZXRhaW4KIAogdm9pZCBKU0dsb2JhbENvbnRleHRSZWxlYXNlKEpTR2xvYmFs
Q29udGV4dFJlZiBjdHgpCiB7CisgICAgSWRlbnRpZmllclRhYmxlKiBzYXZlZElkZW50aWZpZXJU
YWJsZTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrIGxvY2so
ZXhlYyk7CisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAotICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBJZGVudGlm
aWVyVGFibGUqIHNhdmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJl
bnRJZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUpOworICAgICAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIHNh
dmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVy
VGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUpOwogCi0gICAgYm9vbCBwcm90ZWN0Q291
bnRJc1plcm8gPSBIZWFwOjpoZWFwKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPnVucHJv
dGVjdChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwotICAgIGlmIChwcm90ZWN0Q291bnRJ
c1plcm8pIHsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+c3lu
Y2hyb25pemUoKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVj
dEdyYXBoKCk7CisgICAgICAgIGJvb2wgcHJvdGVjdENvdW50SXNaZXJvID0gSGVhcDo6aGVhcChl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT51bnByb3RlY3QoZXhlYy0+ZHluYW1pY0dsb2Jh
bE9iamVjdCgpKTsKKyAgICAgICAgaWYgKHByb3RlY3RDb3VudElzWmVybykKKyAgICAgICAgICAg
IGdsb2JhbERhdGEuaGVhcC5yZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOworICAgICAgICBn
bG9iYWxEYXRhLmRlcmVmKCk7CiAgICAgfQotICAgIGdsb2JhbERhdGEuZGVyZWYoKTsKIAogICAg
IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKHNhdmVkSWRlbnRpZmll
clRhYmxlKTsKIH0KQEAgLTE2Niw3ICsxNjQsNyBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNDb250
ZXh0R2V0R2xvYmFsQ29uCiBKU1N0cmluZ1JlZiBKU0NvbnRleHRDcmVhdGVCYWNrdHJhY2UoSlND
b250ZXh0UmVmIGN0eCwgdW5zaWduZWQgbWF4U3RhY2tTaXplKQogewogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2sgbG9jayhleGVjKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKIAogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICBVU3RyaW5nQnVp
bGRlciBidWlsZGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC02LDEwICs2LDggQEAgRVhQT1JUUwogICAgID8/MENv
bGxhdG9yQFdURkBAUUFFQFBCREBaCiAgICAgPz8wRGF0ZUluc3RhbmNlQEpTQ0BASUFFQFBBVkV4
ZWNTdGF0ZUAxQFBBVlN0cnVjdHVyZUAxQEBaCiAgICAgPz8wRGVmYXVsdEdDQWN0aXZpdHlDYWxs
YmFja0BKU0NAQFFBRUBQQVZIZWFwQDFAQFoKLSAgICA/PzBEcm9wQWxsTG9ja3NASlNMb2NrQEpT
Q0BAUUFFQFc0SlNMb2NrQmVoYXZpb3JAMkBAWgogICAgID8/MER5bmFtaWNHbG9iYWxPYmplY3RT
Y29wZUBKU0NAQFFBRUBBQVZKU0dsb2JhbERhdGFAMUBQQVZKU0dsb2JhbE9iamVjdEAxQEBaIAog
ICAgID8/MEludGVybmFsRnVuY3Rpb25ASlNDQEBJQUVAUEFWSlNHbG9iYWxPYmplY3RAMUBQQVZT
dHJ1Y3R1cmVAMUBAWgotICAgID8/MEpTTG9ja0BKU0NAQFFBRUBQQVZFeGVjU3RhdGVAMUBAWgog
ICAgID8/ME1ENUBXVEZAQFFBRUBYWgogICAgID8/ME11dGV4QFdURkBAUUFFQFhaCiAgICAgPz8w
UGFyYWxsZWxFbnZpcm9ubWVudEBXVEZAQFFBRUBQNkFYUEFYQFpJSEBaCkBAIC0xMjMsNyArMTIx
LDYgQEAgRVhQT1JUUwogICAgID9jcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlckBXVEZAQFlB
SVhaCiAgICAgP2NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzQFdURkBAWUFYUEFYSUBaCiAg
ICAgP2N1cnJlbnRUaHJlYWRAV1RGQEBZQUlYWgotICAgID9jdXJyZW50VGhyZWFkSXNIb2xkaW5n
TG9ja0BKU0xvY2tASlNDQEBTQV9OWFoKICAgICA/Y3VycmVudFRpbWVAV1RGQEBZQU5YWgogICAg
ID9kYXRhQENTdHJpbmdAV1RGQEBRQkVQQkRYWgogICAgID9kYXRhTG9nQFdURkBAWUFYUEJEWloK
QEAgLTIzNSwxMCArMjMyLDggQEAgRVhQT1JUUwogICAgID9qc093bmVkU3RyaW5nQEpTQ0BAWUFQ
QVZKU1N0cmluZ0AxQFBBVkpTR2xvYmFsRGF0YUAxQEFCVlVTdHJpbmdAMUBAWgogICAgID9qc1N0
cmluZ0BKU0NAQFlBUEFWSlNTdHJpbmdAMUBQQVZKU0dsb2JhbERhdGFAMUBBQlZVU3RyaW5nQDFA
QFoKICAgICA/bGVuZ3RoQENTdHJpbmdAV1RGQEBRQkVJWFoKLSAgICA/bG9ja0BKU0xvY2tASlND
QEBTQVhXNEpTTG9ja0JlaGF2aW9yQDJAQFoKICAgICA/bG9ja0BNdXRleEBXVEZAQFFBRVhYWgog
ICAgID9sb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXhAV1RGQEBZQVhYWgotICAg
ID9sb2NrQ291bnRASlNMb2NrQEpTQ0BAU0FIWFoKICAgICA/bWF0Y2hAUmVnRXhwQEpTQ0BAUUFF
SEFBVkpTR2xvYmFsRGF0YUAyQEFCVlVTdHJpbmdAMkBJQUFWPyRWZWN0b3JASCQwQ0FAQFdURkBA
QFoKICAgICA/bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcEBTdHJ1Y3R1cmVASlNDQEBBQUVYQUFWSlNH
bG9iYWxEYXRhQDJAQFoKICAgICA/bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lQFdURkBAWUFO
WFoKQEAgLTM1Miw3ICszNDcsNiBAQCBFWFBPUlRTCiAgICAgP3RyeUZpbmlzaENyZWF0aW9uVW5p
bml0aWFsaXplZEBKU0FycmF5QEpTQ0BASUFFUEFWMTJAQUFWSlNHbG9iYWxEYXRhQDJASUBaCiAg
ICAgP3RyeUxvY2tATXV0ZXhAV1RGQEBRQUVfTlhaCiAgICAgP3R5cGVARGVidWdnZXJDYWxsRnJh
bWVASlNDQEBRQkU/QVc0VHlwZUAxMkBYWgotICAgID91bmxvY2tASlNMb2NrQEpTQ0BAU0FYVzRK
U0xvY2tCZWhhdmlvckAyQEBaCiAgICAgP3VubG9ja0BNdXRleEBXVEZAQFFBRVhYWgogICAgID91
bmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleEBXVEZAQFlBWFhaCiAgICAgP3Vu
cHJvdGVjdEBIZWFwQEpTQ0BAUUFFX05WSlNWYWx1ZUAyQEBaCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDYgKzY2LDcgQEAgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeUFsbG9jYXRlUwog
ICAgIGlmIChpc092ZXJzaXplKGJ5dGVzKSkKICAgICAgICAgcmV0dXJuIHRyeUFsbG9jYXRlT3Zl
cnNpemUoYnl0ZXMsIG91dFB0cik7CiAgICAgCisgICAgQVNTRVJUKG1faGVhcC0+Z2xvYmFsRGF0
YSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgbV9oZWFw
LT5kaWRBbGxvY2F0ZShtX2FsbG9jYXRvci5jdXJyZW50Q2FwYWNpdHkoKSk7CiAKICAgICBhbGxv
Y2F0ZUJsb2NrKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2MCwxNSArMTYwLDkgQEAgc3RhdGljIGlubGluZSBzaXplX3QgcHJvcG9y
dGlvbmFsSGVhcFNpegogICAgIHJldHVybiAxLjI1ICogaGVhcFNpemU7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBpc1ZhbGlkU2hhcmVkSW5zdGFuY2VUaHJlYWRTdGF0ZSgpCitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNWYWxpZFNoYXJlZEluc3RhbmNlVGhyZWFkU3RhdGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKQogewotICAgIGlmICghSlNMb2NrOjpsb2NrQ291bnQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2Nr
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBnbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKTsKIH0K
IAogc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRUaHJlYWRTdGF0ZShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCkBAIC0xNzYsNyArMTcwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRU
aHJlYWRTdGF0ZShKUwogICAgIGlmIChnbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFibGUgIT0gd3Rm
VGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKGdsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSAmJiAhaXNWYWxp
ZFNoYXJlZEluc3RhbmNlVGhyZWFkU3RhdGUoKSkKKyAgICBpZiAoZ2xvYmFsRGF0YS0+aXNTaGFy
ZWRJbnN0YW5jZSgpICYmICFpc1ZhbGlkU2hhcmVkSW5zdGFuY2VUaHJlYWRTdGF0ZShnbG9iYWxE
YXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjcs
NyArMzIxLDcgQEAgdm9pZCBIZWFwOjpkaWRBYmFuZG9uKHNpemVfdCBieXRlcykKIHZvaWQgSGVh
cDo6cHJvdGVjdChKU1ZhbHVlIGspCiB7CiAgICAgQVNTRVJUKGspOwotICAgIEFTU0VSVChKU0xv
Y2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgfHwgIW1fZ2xvYmFsRGF0YS0+aXNTaGFy
ZWRJbnN0YW5jZSgpKTsKKyAgICBBU1NFUlQobV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVu
dFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAKICAgICBpZiAoIWsuaXNDZWxsKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTMzOCw3ICszMzIsNyBAQCB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBr
KQogYm9vbCBIZWFwOjp1bnByb3RlY3QoSlNWYWx1ZSBrKQogewogICAgIEFTU0VSVChrKTsKLSAg
ICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHx8ICFtX2dsb2Jh
bERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSk7CisgICAgQVNTRVJUKG1fZ2xvYmFsRGF0YS0+YXBp
TG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogCiAgICAgaWYgKCFrLmlzQ2Vs
bCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02OTIsNiArNjg2LDcgQEAgdm9pZCBIZWFw
Ojpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBs
aW5nUmVnaW9uKCJHYXJiYWdlIENvbGxlY3Rpb24iKTsKICAgICAKICAgICBHQ1BIQVNFKENvbGxl
Y3QpOworICAgIEFTU0VSVChnbG9iYWxEYXRhKCktPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nTG9jaygpKTsKICAgICBBU1NFUlQoZ2xvYmFsRGF0YSgpLT5pZGVudGlmaWVyVGFibGUg
PT0gd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CiAgICAgQVNTRVJU
KG1faXNTYWZlVG9Db2xsZWN0KTsKICAgICBKQVZBU0NSSVBUQ09SRV9HQ19CRUdJTigpOwpAQCAt
Nzc3LDE5ICs3NzIsMTkgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9n
ZwogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX0VORCgpOwogfQogCi12b2lkIEhlYXA6OnNldEFjdGl2
aXR5Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2aXR5Q2FsbGJhY2s+IGFjdGl2aXR5Q2FsbGJh
Y2spCit2b2lkIEhlYXA6OnNldEFjdGl2aXR5Q2FsbGJhY2soR0NBY3Rpdml0eUNhbGxiYWNrKiBh
Y3Rpdml0eUNhbGxiYWNrKQogewogICAgIG1fYWN0aXZpdHlDYWxsYmFjayA9IGFjdGl2aXR5Q2Fs
bGJhY2s7CiB9CiAKIEdDQWN0aXZpdHlDYWxsYmFjayogSGVhcDo6YWN0aXZpdHlDYWxsYmFjaygp
CiB7Ci0gICAgcmV0dXJuIG1fYWN0aXZpdHlDYWxsYmFjay5nZXQoKTsKKyAgICByZXR1cm4gbV9h
Y3Rpdml0eUNhbGxiYWNrOwogfQogCiBJbmNyZW1lbnRhbFN3ZWVwZXIqIEhlYXA6OnN3ZWVwZXIo
KQogewotICAgIHJldHVybiBtX3N3ZWVwZXIuZ2V0KCk7CisgICAgcmV0dXJuIG1fc3dlZXBlcjsK
IH0KIAogdm9pZCBIZWFwOjpzZXRHYXJiYWdlQ29sbGVjdGlvblRpbWVyRW5hYmxlZChib29sIGVu
YWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
OTksMTAgKzk5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNoaW5lVGhyZWFkcyYg
bWFjaGluZVRocmVhZHMoKSB7IHJldHVybiBtX21hY2hpbmVUaHJlYWRzOyB9CiAKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrKiBhY3Rpdml0eUNhbGxiYWNrKCk7
Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0QWN0aXZpdHlDYWxsYmFjayhQYXNz
T3duUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4pOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHNldEFjdGl2aXR5Q2FsbGJhY2soR0NBY3Rpdml0eUNhbGxiYWNrKik7CiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0R2FyYmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoYm9v
bCk7CiAKLSAgICAgICAgSW5jcmVtZW50YWxTd2VlcGVyKiBzd2VlcGVyKCk7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIEluY3JlbWVudGFsU3dlZXBlciogc3dlZXBlcigpOwogCiAgICAgICAg
IC8vIHRydWUgaWYgYW4gYWxsb2NhdGlvbiBvciBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNzCiAg
ICAgICAgIGlubGluZSBib29sIGlzQnVzeSgpOwpAQCAtMjM3LDEwICsyMzcsMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGRvdWJsZSBtX2xhc3RHQ0xlbmd0aDsKICAgICAgICAgZG91Ymxl
IG1fbGFzdENvZGVEaXNjYXJkVGltZTsKIAotICAgICAgICBPd25QdHI8R0NBY3Rpdml0eUNhbGxi
YWNrPiBtX2FjdGl2aXR5Q2FsbGJhY2s7Ci0gICAgICAgIE93blB0cjxJbmNyZW1lbnRhbFN3ZWVw
ZXI+IG1fc3dlZXBlcjsKLSAgICAgICAgCiAgICAgICAgIERvdWJseUxpbmtlZExpc3Q8RXhlY3V0
YWJsZUJhc2U+IG1fY29tcGlsZWRDb2RlOworICAgICAgICAKKyAgICAgICAgR0NBY3Rpdml0eUNh
bGxiYWNrKiBtX2FjdGl2aXR5Q2FsbGJhY2s7CisgICAgICAgIEluY3JlbWVudGFsU3dlZXBlciog
bV9zd2VlcGVyOwogICAgIH07CiAKICAgICBpbmxpbmUgYm9vbCBIZWFwOjpzaG91bGRDb2xsZWN0
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSGVhcFRpbWVyLmgiCiAKKyNpbmNsdWRlICJBUElTaGltcy5oIgorI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCisjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJTY29wZUNoYWluLmgi
CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTIxLDcg
KzI1LDggQEAgSGVhcFRpbWVyOjpIZWFwVGltZXIoSlNHbG9iYWxEYXRhKiBnbG9iYQogCiBIZWFw
VGltZXI6On5IZWFwVGltZXIoKQogewotICAgIGludmFsaWRhdGUoKTsKKyAgICBDRlJ1bkxvb3BS
ZW1vdmVUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1fdGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21t
b25Nb2Rlcyk7CisgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKG1fdGltZXIuZ2V0KCkpOwog
fQogCiB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25pemUoKQpAQCAtMzUsMTQgKzQwLDM3IEBAIHZv
aWQgSGVhcFRpbWVyOjpzeW5jaHJvbml6ZSgpCiAKIHZvaWQgSGVhcFRpbWVyOjppbnZhbGlkYXRl
KCkKIHsKLSAgICBDRlJ1bkxvb3BSZW1vdmVUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1fdGltZXIu
Z2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Ci0gICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlk
YXRlKG1fdGltZXIuZ2V0KCkpOworICAgIG1fZ2xvYmFsRGF0YSA9IDA7CisgICAgQ0ZSdW5Mb29w
VGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJy
ZW50KCkgLSBzX2RlY2FkZSk7Cit9CisKK3ZvaWQgSGVhcFRpbWVyOjpkaWRTdGFydFZNU2h1dGRv
d24oKQoreworICAgIGlmIChDRlJ1bkxvb3BHZXRDdXJyZW50KCkgPT0gbV9ydW5Mb29wLmdldCgp
KSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKCFtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJy
ZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9zaHV0
ZG93bk11dGV4KTsKKyAgICBpbnZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgSGVhcFRpbWVyOjp0aW1l
ckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJSZWYsIHZvaWQqIGluZm8pCiB7CiAgICAgSGVhcFRpbWVy
KiBhZ2VudCA9IHN0YXRpY19jYXN0PEhlYXBUaW1lcio+KGluZm8pOwotICAgIGFnZW50LT5kb1dv
cmsoKTsKKyAgICBhZ2VudC0+bV9zaHV0ZG93bk11dGV4LmxvY2soKTsKKyAgICBpZiAoIWFnZW50
LT5tX2dsb2JhbERhdGEpIHsKKyAgICAgICAgYWdlbnQtPm1fc2h1dGRvd25NdXRleC51bmxvY2so
KTsKKyAgICAgICAgZGVsZXRlIGFnZW50OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHsK
KyAgICAgICAgLy8gV2UgZG9uJ3QgcmVmIGhlcmUgdG8gcHJldmVudCB1cyBmcm9tIHJlc3VycmVj
dGluZyB0aGUgcmVmIGNvdW50IG9mIGEgImRlYWQiIEpTR2xvYmFsRGF0YS4KKyAgICAgICAgQVBJ
RW50cnlTaGltIHNoaW0oYWdlbnQtPm1fZ2xvYmFsRGF0YSwgQVBJRW50cnlTaGltV2l0aG91dExv
Y2s6OkRvbnRSZWZHbG9iYWxEYXRhKTsKKyAgICAgICAgYWdlbnQtPmRvV29yaygpOworICAgIH0K
KyAgICBhZ2VudC0+bV9zaHV0ZG93bk11dGV4LnVubG9jaygpOwogfQogCiAjZWxzZQpAQCAtNTYs
NiArODQsMTEgQEAgSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKIHsKIH0KIAordm9pZCBIZWFwVGlt
ZXI6OmRpZFN0YXJ0Vk1TaHV0ZG93bigpCit7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKIHZvaWQg
SGVhcFRpbWVyOjpzeW5jaHJvbml6ZSgpCiB7CiB9CkBAIC02NCw3ICs5Nyw2IEBAIHZvaWQgSGVh
cFRpbWVyOjppbnZhbGlkYXRlKCkKIHsKIH0KIAotCiAjZW5kaWYKICAgICAKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmgJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
LDYgKzIsNyBAQAogI2RlZmluZSBIZWFwVGltZXJfaAogCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogI2lmIFVTRShDRikKICNpbmNsdWRl
IDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgpAQCAtMjEsNyArMjIsOCBAQCBwdWJs
aWM6CiAjZW5kaWYKICAgICAKICAgICB2aXJ0dWFsIH5IZWFwVGltZXIoKTsKLSAgICAKKworICAg
IHZvaWQgZGlkU3RhcnRWTVNodXRkb3duKCk7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXpl
KCk7CiAgICAgdmlydHVhbCB2b2lkIGRvV29yaygpID0gMDsKICAgICAKQEAgLTM0LDYgKzM2LDgg
QEAgcHJvdGVjdGVkOgogICAgIFJldGFpblB0cjxDRlJ1bkxvb3BUaW1lclJlZj4gbV90aW1lcjsK
ICAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wUmVmPiBtX3J1bkxvb3A7CiAgICAgQ0ZSdW5Mb29wVGlt
ZXJDb250ZXh0IG1fY29udGV4dDsKKworICAgIE11dGV4IG1fc2h1dGRvd25NdXRleDsKICNlbmRp
ZgogICAgIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAsNyArMjAsNiBAQCBzdGF0aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgc3dlZXBUaW1lTXVs
CiAKIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpkb1dvcmsoKQogewotICAgIEFQSUVudHJ5U2hp
bSBzaGltKG1fZ2xvYmFsRGF0YSk7CiAgICAgZG9Td2VlcChXVEY6Om1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpKTsKIH0KICAgICAKQEAgLTMwLDkgKzI5LDkgQEAgSW5jcmVtZW50YWxTd2Vl
cGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIoSAogewogfQogCi1QYXNzT3duUHRyPEluY3JlbWVudGFs
U3dlZXBlcj4gSW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKK0luY3JlbWVu
dGFsU3dlZXBlciogSW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLCBDRlJ1bkxvb3BH
ZXRDdXJyZW50KCkpKTsKKyAgICByZXR1cm4gbmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLCBD
RlJ1bkxvb3BHZXRDdXJyZW50KCkpOwogfQogCiB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6c2No
ZWR1bGVUaW1lcigpCkBAIC04NCw5ICs4Myw5IEBAIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpk
b1dvcmsoKQogewogfQogCi1QYXNzT3duUHRyPEluY3JlbWVudGFsU3dlZXBlcj4gSW5jcmVtZW50
YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKK0luY3JlbWVudGFsU3dlZXBlciogSW5jcmVt
ZW50YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLT5nbG9iYWxEYXRhKCkpKTsKKyAgICByZXR1cm4g
bmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLT5nbG9iYWxEYXRhKCkpOwogfQogCiB2b2lkIElu
Y3JlbWVudGFsU3dlZXBlcjo6c3RhcnRTd2VlcGluZyhjb25zdCBIYXNoU2V0PE1hcmtlZEJsb2Nr
Kj4mKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxT
d2VlcGVyLmgJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0luY3JlbWVudGFsU3dlZXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNCw3ICsxNCw3IEBAIGNs
YXNzIEhlYXA7CiAgICAgCiBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXIgOiBwdWJsaWMgSGVhcFRp
bWVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+
IGNyZWF0ZShIZWFwKik7CisgICAgc3RhdGljIEluY3JlbWVudGFsU3dlZXBlciogY3JlYXRlKEhl
YXAqKTsKICAgICB2b2lkIHN0YXJ0U3dlZXBpbmcoY29uc3QgSGFzaFNldDxNYXJrZWRCbG9jayo+
JiBibG9ja1NuYXBzaG90KTsKICAgICB2aXJ0dWFsIHZvaWQgZG9Xb3JrKCk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgIkdDQWN0aXZp
dHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEu
aCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01
Niw2ICs1Nyw3IEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXQKICAg
ICAKIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSgpCiB7CisgICAgQVNT
RVJUKG1faGVhcC0+Z2xvYmFsRGF0YSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGlu
Z0xvY2soKSk7CiAjaWYgQ09MTEVDVF9PTl9FVkVSWV9BTExPQ0FUSU9OCiAgICAgbV9oZWFwLT5j
b2xsZWN0QWxsR2FyYmFnZSgpOwogICAgIEFTU0VSVChtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9n
cmVzcyA9PSBOb09wZXJhdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9X
ZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtCbG9jay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw4ICsxMjcsMTAgQEAgdm9p
ZCBXZWFrQmxvY2s6OnJlYXAoKQogICAgICAgICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgPiBXZWFr
SW1wbDo6RGVhZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChIZWFwOjpp
c01hcmtlZCh3ZWFrSW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKEhlYXA6
OmlzTWFya2VkKHdlYWtJbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpKSB7CisgICAgICAgICAgICBB
U1NFUlQod2Vha0ltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkxpdmUpOwogICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KIAogICAgICAgICB3ZWFrSW1wbC0+c2V0U3RhdGUoV2Vha0lt
cGw6OkRlYWQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogYm9vbCBjaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSogcmV0dXJuZWRFeGNlcHRpb24pCiB7Ci0g
ICAgSlNMb2NrIGxvY2soZXhlYyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
QVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5pZGVudGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0
YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZSog
cHJvZ3JhbSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsKQEAgLTUz
LDcgKzUzLDcgQEAgYm9vbCBjaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IAogCiBK
U1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW4sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUq
IHJldHVybmVkRXhjZXB0aW9uKQogewotICAgIEpTTG9jayBsb2NrKGV4ZWMpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuaWRlbnRp
ZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwog
ICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIENS
QVNIKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2Fs
bGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0Fj
dGl2aXR5Q2FsbGJhY2suaAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcg
KzY5LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrIDog
cHVibGljIEdDQWN0aXZpdHlDYWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25Q
dHI8RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjaz4gY3JlYXRlKEhlYXAqKTsKKyAgICBzdGF0aWMg
RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayogY3JlYXRlKEhlYXAqKTsKIAogICAgIERlZmF1bHRH
Q0FjdGl2aXR5Q2FsbGJhY2soSGVhcCopOwogCkBAIC05MSw5ICs5MSw5IEBAIHByaXZhdGU6CiAj
ZW5kaWYKIH07CiAKLWlubGluZSBQYXNzT3duUHRyPERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s+
IERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZShIZWFwKiBoZWFwKQoraW5saW5lIERl
ZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2sqIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0
ZShIZWFwKiBoZWFwKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVmYXVsdEdDQWN0aXZp
dHlDYWxsYmFjayhoZWFwKSk7CisgICAgcmV0dXJuIG5ldyBEZWZhdWx0R0NBY3Rpdml0eUNhbGxi
YWNrKGhlYXApOwogfQogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDgg
KzM0LDEwIEBACiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJEZWJ1
Z2dlckFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCisjaW5j
bHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAj
aW5jbHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5oIgorI2luY2x1ZGUgIkluY3JlbWVudGFsU3dl
ZXBlci5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9u
LmgiCiAjaW5jbHVkZSAiSlNBUElWYWx1ZVdyYXBwZXIuaCIKQEAgLTE3OCwxMiArMTgwLDkgQEAg
SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogewogICAgIGludGVycHJl
dGVyID0gbmV3IEludGVycHJldGVyOwogCi0gICAgaWYgKGlzU2hhcmVkSW5zdGFuY2UoKSkKLSAg
ICAgICAgdHVybk9mZlZlcmlmaWVyKCk7Ci0KICAgICAvLyBOZWVkIHRvIGJlIGNhcmVmdWwgdG8g
a2VlcCBldmVyeXRoaW5nIGNvbnNpc3RlbnQgaGVyZQorICAgIEpTTG9ja0hvbGRlciBsb2NrKHRo
aXMpOwogICAgIElkZW50aWZpZXJUYWJsZSogZXhpc3RpbmdFbnRyeUlkZW50aWZpZXJUYWJsZSA9
IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGlkZW50aWZpZXJUYWJs
ZSk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBzdHJ1Y3R1
cmVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1cmU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcykp
OwogICAgIGRlYnVnZ2VyQWN0aXZhdGlvblN0cnVjdHVyZS5zZXQoKnRoaXMsIERlYnVnZ2VyQWN0
aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGFjdGl2
YXRpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKQEAgLTIyMiw2ICsyMjEsOSBAQCBKU0dsb2JhbERhdGE6OkpT
R2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAKIEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgp
CiB7CisgICAgQVNTRVJUKCFtX2FwaUxvY2suY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7
CisgICAgaGVhcC5hY3Rpdml0eUNhbGxiYWNrKCktPmRpZFN0YXJ0Vk1TaHV0ZG93bigpOworICAg
IGhlYXAuc3dlZXBlcigpLT5kaWRTdGFydFZNU2h1dGRvd24oKTsKICAgICBoZWFwLmxhc3RDaGFu
Y2VUb0ZpbmFsaXplKCk7CiAKICAgICBkZWxldGUgaW50ZXJwcmV0ZXI7CkBAIC0zMTEsNiArMzEz
LDcgQEAgYm9vbCBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlRXhpc3RzKAogCiBKU0dsb2Jh
bERhdGEmIEpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2UoKQogeworICAgIEdsb2JhbEpTTG9j
ayBnbG9iYWxMb2NrOwogICAgIEpTR2xvYmFsRGF0YSomIGluc3RhbmNlID0gc2hhcmVkSW5zdGFu
Y2VJbnRlcm5hbCgpOwogICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICAgaW5zdGFuY2UgPSBh
ZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQSVNoYXJlZCwgVGhyZWFkU3RhY2tUeXBlU21hbGws
IFNtYWxsSGVhcCkpLmxlYWtSZWYoKTsKQEAgLTMyMSw3ICszMjQsNiBAQCBKU0dsb2JhbERhdGEm
IEpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuCiAKIEpTR2xvYmFsRGF0YSomIEpTR2xvYmFsRGF0
YTo6c2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpCiB7Ci0gICAgQVNTRVJUKEpTTG9jazo6Y3VycmVu
dFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgc3RhdGljIEpTR2xvYmFsRGF0YSogc2hhcmVk
SW5zdGFuY2U7CiAgICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIklu
dHJpbnNpYy5oIgogI2luY2x1ZGUgIkpJVFN0dWJzLmgiCisjaW5jbHVkZSAiSlNMb2NrLmgiCiAj
aW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIk51
bWVyaWNTdHJpbmdzLmgiCkBAIC00Niw4ICs0Nyw4IEBACiAjaW5jbHVkZSA8d3RmL0J1bXBQb2lu
dGVyQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Np
bXBsZVN0YXRzLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEu
aD4KICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkBAIC0xNTIsNyArMTUzLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgfTsKICNlbmRpZgogCi0gICAgY2xhc3MgSlNHbG9iYWxEYXRhIDogcHVi
bGljIFJlZkNvdW50ZWQ8SlNHbG9iYWxEYXRhPiB7CisgICAgY2xhc3MgSlNHbG9iYWxEYXRhIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTR2xvYmFsRGF0YT4gewogICAgIHB1YmxpYzoK
ICAgICAgICAgLy8gV2ViQ29yZSBoYXMgYSBvbmUtdG8tb25lIG1hcHBpbmcgb2YgdGhyZWFkcyB0
byBKU0dsb2JhbERhdGFzOwogICAgICAgICAvLyBlaXRoZXIgY3JlYXRlKCkgb3IgY3JlYXRlTGVh
a2VkKCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UKQEAgLTE4MCw2ICsxODEsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBtYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFk
cygpIHsgaGVhcC5tYWNoaW5lVGhyZWFkcygpLm1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRz
KCk7IH0KIAorICAgIHByaXZhdGU6CisgICAgICAgIEpTTG9jayBtX2FwaUxvY2s7CisKKyAgICBw
dWJsaWM6CiAgICAgICAgIEhlYXAgaGVhcDsgLy8gVGhlIGhlYXAgaXMgb3VyIGZpcnN0IGRhdGEg
bWVtYmVyIHRvIGVuc3VyZSB0aGF0IGl0J3MgZGVzdHJ1Y3RlZCBhZnRlciBhbGwgdGhlIG9iamVj
dHMgdGhhdCByZWZlcmVuY2UgaXQuCiAKICAgICAgICAgR2xvYmFsRGF0YVR5cGUgZ2xvYmFsRGF0
YVR5cGU7CkBAIC00MDksNiArNDE0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJlZ2lz
dGVyVHlwZWRBcnJheUZ1bmN0aW9uKGZsb2F0NjQsIEZsb2F0NjQpOwogI3VuZGVmIHJlZ2lzdGVy
VHlwZWRBcnJheUZ1bmN0aW9uCiAKKyAgICAgICAgSlNMb2NrJiBhcGlMb2NrKCkgeyByZXR1cm4g
bV9hcGlMb2NrOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDggKzExNCw2IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgaW5s
aW5lIHZvaWQKIAogSlNHbG9iYWxPYmplY3Q6On5KU0dsb2JhbE9iamVjdCgpCiB7Ci0gICAgQVNT
RVJUKEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7Ci0KICAgICBpZiAobV9k
ZWJ1Z2dlcikKICAgICAgICAgbV9kZWJ1Z2dlci0+ZGV0YWNoKHRoaXMpOwogCkBAIC0xMzAsNyAr
MTI4LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbAogCiB2b2lk
IEpTR2xvYmFsT2JqZWN0Ojppbml0KEpTT2JqZWN0KiB0aGlzVmFsdWUpCiB7Ci0gICAgQVNTRVJU
KEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CisgICAgQVNTRVJUKGdsb2Jh
bERhdGEoKS5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgCiAg
ICAgbV9nbG9iYWxTY29wZUNoYWluLnNldChnbG9iYWxEYXRhKCksIHRoaXMsIFNjb3BlQ2hhaW5O
b2RlOjpjcmVhdGUoMCwgdGhpcywgJmdsb2JhbERhdGEoKSwgdGhpcywgdGhpc1ZhbHVlKSk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkocmV2aXNpb24g
MTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1
ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAi
SlNPYmplY3QuaCIKICNpbmNsdWRlICJTY29wZUNoYWluLmgiCiAKQEAgLTM4LDk0ICszOSw5NiBA
QCBuYW1lc3BhY2UgSlNDIHsKICNpZiAoT1MoREFSV0lOKSB8fCBVU0UoUFRIUkVBRFMpKQogCiAv
LyBBY3F1aXJlIHRoaXMgbXV0ZXggYmVmb3JlIGFjY2Vzc2luZyBsb2NrLXJlbGF0ZWQgZGF0YS4K
LXN0YXRpYyBwdGhyZWFkX211dGV4X3QgSlNNdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTEla
RVI7CitzdGF0aWMgcHRocmVhZF9tdXRleF90IGdpYW50R2xvYmFsSlNMb2NrID0gUFRIUkVBRF9N
VVRFWF9JTklUSUFMSVpFUjsKIAotLy8gVGhyZWFkLXNwZWNpZmljIGtleSB0aGF0IHRlbGxzIHdo
ZXRoZXIgYSB0aHJlYWQgaG9sZHMgdGhlIEpTTXV0ZXgsIGFuZCBob3cgbWFueSB0aW1lcyBpdCB3
YXMgdGFrZW4gcmVjdXJzaXZlbHkuCi1wdGhyZWFkX2tleV90IEpTTG9ja0NvdW50OworR2xvYmFs
SlNMb2NrOjpHbG9iYWxKU0xvY2soKQoreworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ2lhbnRH
bG9iYWxKU0xvY2spOworfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVKU0xvY2tDb3VudCgpCitHbG9i
YWxKU0xvY2s6On5HbG9iYWxKU0xvY2soKQogewotICAgIHB0aHJlYWRfa2V5X2NyZWF0ZSgmSlNM
b2NrQ291bnQsIDApOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnaWFudEdsb2JhbEpTTG9j
ayk7CiB9CiAKLXB0aHJlYWRfb25jZV90IGNyZWF0ZUpTTG9ja0NvdW50T25jZSA9IFBUSFJFQURf
T05DRV9JTklUOworSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoRXhlY1N0YXRlKiBleGVjKQor
ICAgIDogbV9nbG9iYWxEYXRhKCZleGVjLT5nbG9iYWxEYXRhKCkpCit7CisgICAgbV9nbG9iYWxE
YXRhLT5hcGlMb2NrKCkubG9jaygpOworfQogCi0vLyBMb2NrIG5lc3RpbmcgY291bnQuCi1pbnRw
dHJfdCBKU0xvY2s6OmxvY2tDb3VudCgpCitKU0xvY2tIb2xkZXI6OkpTTG9ja0hvbGRlcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCisgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKIHsK
LSAgICBwdGhyZWFkX29uY2UoJmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNMb2NrQ291
bnQpOworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKK30KIAotICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGludHB0cl90PihwdGhyZWFkX2dldHNwZWNpZmljKEpTTG9ja0Nv
dW50KSk7CitKU0xvY2tIb2xkZXI6OkpTTG9ja0hvbGRlcihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCisgICAgOiBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCit7CisgICAgbV9nbG9iYWxEYXRh
LT5hcGlMb2NrKCkubG9jaygpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRMb2NrQ291bnQoaW50cHRy
X3QgY291bnQpCitKU0xvY2tIb2xkZXI6On5KU0xvY2tIb2xkZXIoKQogewotICAgIEFTU0VSVChj
b3VudCA+PSAwKTsKLSAgICBwdGhyZWFkX3NldHNwZWNpZmljKEpTTG9ja0NvdW50LCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihjb3VudCkpOworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLnVu
bG9jaygpOwogfQogCi1KU0xvY2s6OkpTTG9jayhFeGVjU3RhdGUqIGV4ZWMpCi0gICAgOiBtX2xv
Y2tCZWhhdmlvcihleGVjLT5nbG9iYWxEYXRhKCkuaXNTaGFyZWRJbnN0YW5jZSgpID8gTG9ja0Zv
clJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpCitKU0xvY2s6OkpTTG9jaygpCisgICAgOiBt
X2xvY2tDb3VudCgwKQogewotICAgIGxvY2sobV9sb2NrQmVoYXZpb3IpOworICAgIG1fc3Bpbkxv
Y2suSW5pdCgpOwogfQogCi1KU0xvY2s6OkpTTG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
Ci0gICAgOiBtX2xvY2tCZWhhdmlvcihnbG9iYWxEYXRhLT5pc1NoYXJlZEluc3RhbmNlKCkgPyBM
b2NrRm9yUmVhbCA6IFNpbGVuY2VBc3NlcnRpb25zT25seSkKK0pTTG9jazo6fkpTTG9jaygpCiB7
Ci0gICAgbG9jayhtX2xvY2tCZWhhdmlvcik7CiB9CiAKLXZvaWQgSlNMb2NrOjpsb2NrKEpTTG9j
a0JlaGF2aW9yIGxvY2tCZWhhdmlvcikKK3ZvaWQgSlNMb2NrOjpsb2NrKCkKIHsKLSNpZmRlZiBO
REVCVUcKLSAgICAvLyBMb2NraW5nICJub3QgZm9yIHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0
dXJlLgotICAgIGlmIChsb2NrQmVoYXZpb3IgPT0gU2lsZW5jZUFzc2VydGlvbnNPbmx5KQotICAg
ICAgICByZXR1cm47Ci0jZW5kaWYKKyAgICBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQg
PSBXVEY6OmN1cnJlbnRUaHJlYWQoKTsKKyAgICB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGhv
bGRlcigmbV9zcGluTG9jayk7CisgICAgICAgIGlmIChtX293bmVyVGhyZWFkID09IGN1cnJlbnRU
aHJlYWQgJiYgbV9sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIG1fbG9ja0NvdW50Kys7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBwdGhyZWFkX29uY2UoJmNy
ZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNMb2NrQ291bnQpOworICAgIG1fbG9jay5sb2Nr
KCk7CiAKLSAgICBpbnRwdHJfdCBjdXJyZW50TG9ja0NvdW50ID0gbG9ja0NvdW50KCk7Ci0gICAg
aWYgKCFjdXJyZW50TG9ja0NvdW50ICYmIGxvY2tCZWhhdmlvciA9PSBMb2NrRm9yUmVhbCkgewot
ICAgICAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9tdXRleF9sb2NrKCZKU011dGV4KTsKLSAgICAg
ICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsICFyZXN1bHQpOworICAgIHsKKyAgICAgICAgU3Bpbkxv
Y2tIb2xkZXIgaG9sZGVyKCZtX3NwaW5Mb2NrKTsKKyAgICAgICAgbV9vd25lclRocmVhZCA9IGN1
cnJlbnRUaHJlYWQ7CisgICAgICAgIEFTU0VSVCghbV9sb2NrQ291bnQpOworICAgICAgICBtX2xv
Y2tDb3VudCA9IDE7CiAgICAgfQotICAgIHNldExvY2tDb3VudChjdXJyZW50TG9ja0NvdW50ICsg
MSk7CiB9CiAKLXZvaWQgSlNMb2NrOjp1bmxvY2soSlNMb2NrQmVoYXZpb3IgbG9ja0JlaGF2aW9y
KQordm9pZCBKU0xvY2s6OnVubG9jaygpCiB7Ci0gICAgQVNTRVJUKGxvY2tDb3VudCgpKTsKKyAg
ICBBU1NFUlQoY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAKLSNpZmRlZiBOREVCVUcK
LSAgICAvLyBMb2NraW5nICJub3QgZm9yIHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0dXJlLgot
ICAgIGlmIChsb2NrQmVoYXZpb3IgPT0gU2lsZW5jZUFzc2VydGlvbnNPbmx5KQotICAgICAgICBy
ZXR1cm47Ci0jZW5kaWYKKyAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJm1fc3BpbkxvY2spOwor
ICAgIG1fbG9ja0NvdW50LS07CiAKLSAgICBpbnRwdHJfdCBuZXdMb2NrQ291bnQgPSBsb2NrQ291
bnQoKSAtIDE7Ci0gICAgc2V0TG9ja0NvdW50KG5ld0xvY2tDb3VudCk7Ci0gICAgaWYgKCFuZXdM
b2NrQ291bnQgJiYgbG9ja0JlaGF2aW9yID09IExvY2tGb3JSZWFsKSB7Ci0gICAgICAgIGludCBy
ZXN1bHQgPSBwdGhyZWFkX211dGV4X3VubG9jaygmSlNNdXRleCk7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCAhcmVzdWx0KTsKLSAgICB9CisgICAgaWYgKCFtX2xvY2tDb3VudCkKKyAg
ICAgICAgbV9sb2NrLnVubG9jaygpOwogfQogCiB2b2lkIEpTTG9jazo6bG9jayhFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgbG9jayhleGVjLT5nbG9iYWxEYXRhKCkuaXNTaGFyZWRJbnN0YW5jZSgp
ID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIGV4ZWMtPmdsb2Jh
bERhdGEoKS5hcGlMb2NrKCkubG9jaygpOwogfQogCiB2b2lkIEpTTG9jazo6dW5sb2NrKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICB1bmxvY2soZXhlYy0+Z2xvYmFsRGF0YSgpLmlzU2hhcmVkSW5z
dGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBleGVj
LT5nbG9iYWxEYXRhKCkuYXBpTG9jaygpLnVubG9jaygpOwogfQogCiBib29sIEpTTG9jazo6Y3Vy
cmVudFRocmVhZElzSG9sZGluZ0xvY2soKQogewotICAgIHB0aHJlYWRfb25jZSgmY3JlYXRlSlNM
b2NrQ291bnRPbmNlLCBjcmVhdGVKU0xvY2tDb3VudCk7Ci0gICAgcmV0dXJuICEhcHRocmVhZF9n
ZXRzcGVjaWZpYyhKU0xvY2tDb3VudCk7CisgICAgcmV0dXJuIG1fbG9ja0NvdW50ICYmIG1fb3du
ZXJUaHJlYWQgPT0gV1RGOjpjdXJyZW50VGhyZWFkKCk7CiB9CiAKIC8vIFRoaXMgaXMgZmFpcmx5
IG5hc3R5LiAgV2UgYWxsb3cgbXVsdGlwbGUgdGhyZWFkcyB0byBydW4gb24gdGhlIHNhbWUKQEAg
LTE0OSw3ICsxNTIsNyBAQCBib29sIEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2so
CiAvLyB0aGlzIHRvIGhhcHBlbiwgYW5kIHdlcmUgaXRzIHN0YWNrIHRvIGdyb3cgZnVydGhlciwg
dGhlbiBpdCBtYXkgcG90ZW50aWFsbHkKIC8vIHdyaXRlIG92ZXIgdGhlIHNlY29uZCB0aHJlYWQn
cyBjYWxsIGZyYW1lcy4KIC8vCi0vLyBJbiBhdm9pZCBKUyBzdGFjayBjb3JydXB0aW9uIHdlIGVu
Zm9yY2UgYSBwb2xpY3kgb2Ygb25seSBldmVyIGFsbG93aW5nIHR3bworLy8gVG8gYXZvaWQgSlMg
c3RhY2sgY29ycnVwdGlvbiB3ZSBlbmZvcmNlIGEgcG9saWN5IG9mIG9ubHkgZXZlciBhbGxvd2lu
ZyB0d28KIC8vIHRocmVhZHMgdG8gdXNlIGEgSlMgY29udGV4dCBjb25jdXJyZW50bHksIGFuZCBv
bmx5IGFsbG93aW5nIHRoZSBzZWNvbmQgb2YKIC8vIHRoZXNlIHRocmVhZHMgdG8gZXhlY3V0ZSB1
bnRpbCBpdCBoYXMgY29tcGxldGVkIGFuZCBmdWxseSByZXR1cm5lZCBmcm9tIGl0cwogLy8gb3V0
ZXJtb3N0IGNhbGwgaW50byBKU0MuICBXZSBlbmZvcmNlIHRoaXMgcG9saWN5IHVzaW5nICdsb2Nr
RHJvcERlcHRoJy4gIFRoZQpAQCAtMTU4LDcgKzE2MSw3IEBAIGJvb2wgSlNMb2NrOjpjdXJyZW50
VGhyZWFkSXNIb2xkaW5nTG9jaygKIC8vIHNhbWUgdGhyZWFkIGFnYWluLCBlbnRlciBKU0MgKHRo
cm91Z2ggZXZhbHVhdGUgc2NyaXB0IG9yIGNhbGwgZnVuY3Rpb24pLCBhbmQgZXhpdAogLy8gYWdh
aW4gdGhyb3VnaCBhIGNhbGxiYWNrLCB0aGVuIHRoZSBsb2NrcyB3aWxsIG5vdCBiZSBkcm9wcGVk
IHdoZW4gRHJvcEFsbExvY2tzCiAvLyBpcyBjYWxsZWQgKHNpbmNlIGxvY2tEcm9wRGVwdGggaXMg
bm9uLXplcm8pLiAgU2luY2UgdGhpcyB0aHJlYWQgaXMgc3RpbGwgaG9sZGluZwotLy8gdGhlIGxv
Y2tzLCBvbmx5IGl0IHdpbGwgcmUgYWJsZSB0byByZS1lbnRlciBKU0MgKGVpdGhlciBiZSByZXR1
cm5pbmcgZnJvbSB0aGUKKy8vIHRoZSBsb2Nrcywgb25seSBpdCB3aWxsIGJlIGFibGUgdG8gcmUt
ZW50ZXIgSlNDIChlaXRoZXIgYmUgcmV0dXJuaW5nIGZyb20gdGhlCiAvLyBjYWxsYmFjaywgb3Ig
YnkgcmUtZW50ZXJpbmcgdGhyb3VnaCBhbm90aGVyIGNhbGwgdG8gZXZhdWxhdGUgc2NyaXB0IG9y
IGNhbGwKIC8vIGZ1bmN0aW9uKS4KIC8vCkBAIC0xNjgsNjEgKzE3MSw4NCBAQCBib29sIEpTTG9j
azo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soCiAvLyBvcmRlciBpbiB3aGljaCB0aGV5IHdl
cmUgbWFkZSAtIHRob3VnaCBpbXBsZW1lbnRpbmcgdGhlIGxlc3MgcmVzdHJpY3RpdmUgcG9saWN5
CiAvLyB3b3VsZCBsaWtlbHkgaW5jcmVhc2UgY29tcGxleGl0eSBhbmQgb3ZlcmhlYWQuCiAvLwot
c3RhdGljIHVuc2lnbmVkIGxvY2tEcm9wRGVwdGggPSAwOwogCi1KU0xvY2s6OkRyb3BBbGxMb2Nr
czo6RHJvcEFsbExvY2tzKEV4ZWNTdGF0ZSogZXhlYykKLSAgICA6IG1fbG9ja0JlaGF2aW9yKGV4
ZWMtPmdsb2JhbERhdGEoKS5pc1NoYXJlZEluc3RhbmNlKCkgPyBMb2NrRm9yUmVhbCA6IFNpbGVu
Y2VBc3NlcnRpb25zT25seSkKKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9m
IGxvY2tzIHRoYXQgd2VyZSBkcm9wcGVkLgordW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3Mo
KQogewotICAgIHB0aHJlYWRfb25jZSgmY3JlYXRlSlNMb2NrQ291bnRPbmNlLCBjcmVhdGVKU0xv
Y2tDb3VudCk7CisgICAgaWYgKG1fbG9ja0Ryb3BEZXB0aCsrKQorICAgICAgICByZXR1cm4gMDsK
IAotICAgIGlmIChsb2NrRHJvcERlcHRoKyspIHsKLSAgICAgICAgbV9sb2NrQ291bnQgPSAwOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIHJldHVybiBkcm9wQWxsTG9ja3NVbmNvbmRpdGlv
bmFsbHkoKTsKK30KKwordW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFs
bHkoKQoreworICAgIHVuc2lnbmVkIGxvY2tDb3VudCA9IG1fbG9ja0NvdW50OworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsb2NrQ291bnQ7IGkrKykKKyAgICAgICAgdW5sb2NrKCk7CiAK
LSAgICBtX2xvY2tDb3VudCA9IEpTTG9jazo6bG9ja0NvdW50KCk7Ci0gICAgZm9yIChpbnRwdHJf
dCBpID0gMDsgaSA8IG1fbG9ja0NvdW50OyBpKyspCi0gICAgICAgIEpTTG9jazo6dW5sb2NrKG1f
bG9ja0JlaGF2aW9yKTsKKyAgICByZXR1cm4gbG9ja0NvdW50OwogfQogCi1KU0xvY2s6OkRyb3BB
bGxMb2Nrczo6RHJvcEFsbExvY2tzKEpTTG9ja0JlaGF2aW9yIEpTTG9ja0JlaGF2aW9yKQotICAg
IDogbV9sb2NrQmVoYXZpb3IoSlNMb2NrQmVoYXZpb3IpCit2b2lkIEpTTG9jazo6Z3JhYkFsbExv
Y2tzKHVuc2lnbmVkIGxvY2tDb3VudCkKIHsKLSAgICBwdGhyZWFkX29uY2UoJmNyZWF0ZUpTTG9j
a0NvdW50T25jZSwgY3JlYXRlSlNMb2NrQ291bnQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsb2NrQ291bnQ7IGkrKykKKyAgICAgICAgbG9jaygpOwogCi0gICAgaWYgKGxvY2tEcm9w
RGVwdGgrKykgewotICAgICAgICBtX2xvY2tDb3VudCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgbV9sb2NrRHJvcERlcHRoLS07Cit9CiAKLSAgICAvLyBJdCBpcyBuZWNlc3Nhcnkg
dG8gZHJvcCBldmVuICJ1bnJlYWwiIGxvY2tzLCBiZWNhdXNlIGhhdmluZyBhIG5vbi16ZXJvIGxv
Y2sgY291bnQKLSAgICAvLyB3aWxsIHByZXZlbnQgYSByZWFsIGxvY2sgZnJvbSBiZWluZyB0YWtl
bi4KK0pTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoRXhlY1N0YXRlKiBleGVjKQor
ICAgIDogbV9sb2NrQ291bnQoMCkKKyAgICAsIG1fZ2xvYmFsRGF0YSgmZXhlYy0+Z2xvYmFsRGF0
YSgpKQoreworICAgIG1fbG9ja0NvdW50ID0gbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZHJvcEFs
bExvY2tzKCk7Cit9CiAKLSAgICBtX2xvY2tDb3VudCA9IEpTTG9jazo6bG9ja0NvdW50KCk7Ci0g
ICAgZm9yIChpbnRwdHJfdCBpID0gMDsgaSA8IG1fbG9ja0NvdW50OyBpKyspCi0gICAgICAgIEpT
TG9jazo6dW5sb2NrKG1fbG9ja0JlaGF2aW9yKTsKK0pTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9w
QWxsTG9ja3MoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgIDogbV9sb2NrQ291bnQoMCkK
KyAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQoreworICAgIG1fbG9ja0NvdW50ID0gbV9n
bG9iYWxEYXRhLT5hcGlMb2NrKCkuZHJvcEFsbExvY2tzKCk7CiB9CiAKIEpTTG9jazo6RHJvcEFs
bExvY2tzOjp+RHJvcEFsbExvY2tzKCkKIHsKLSAgICBmb3IgKGludHB0cl90IGkgPSAwOyBpIDwg
bV9sb2NrQ291bnQ7IGkrKykKLSAgICAgICAgSlNMb2NrOjpsb2NrKG1fbG9ja0JlaGF2aW9yKTsK
LQotICAgIC0tbG9ja0Ryb3BEZXB0aDsKKyAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5ncmFi
QWxsTG9ja3MobV9sb2NrQ291bnQpOwogfQogCiAjZWxzZSAvLyAoT1MoREFSV0lOKSB8fCBVU0Uo
UFRIUkVBRFMpKQogCi1KU0xvY2s6OkpTTG9jayhFeGVjU3RhdGUqKQotICAgIDogbV9sb2NrQmVo
YXZpb3IoU2lsZW5jZUFzc2VydGlvbnNPbmx5KQorR2xvYmFsSlNMb2NrOjpHbG9iYWxKU0xvY2so
KQoreworfQorCitHbG9iYWxKU0xvY2s6On5HbG9iYWxKU0xvY2soKQoreworfQorCitKU0xvY2tI
b2xkZXI6OkpTTG9ja0hvbGRlcihKU0dsb2JhbERhdGEqKQogewogfQogCi0vLyBJZiB0aHJlYWRp
bmcgc3VwcG9ydCBpcyBvZmYsIHNldCB0aGUgbG9jayBjb3VudCB0byBhIGNvbnN0YW50IHZhbHVl
IG9mIDEgc28gc3NlcnRpb25zCi0vLyB0aGF0IHRoZSBsb2NrIGlzIGhlbGQgZG9uJ3QgZmFpbAot
aW50cHRyX3QgSlNMb2NrOjpsb2NrQ291bnQoKQorSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIo
SlNHbG9iYWxEYXRhJikKK3sKK30KKworSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoRXhlY1N0
YXRlKikKK3sKK30KKworSlNMb2NrSG9sZGVyOjp+SlNMb2NrSG9sZGVyKCkKK3sKK30KKworSlNM
b2NrOjpKU0xvY2soKQoreworfQorCitKU0xvY2s6On5KU0xvY2soKQogewotICAgIHJldHVybiAx
OwogfQogCiBib29sIEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKQpAQCAtMjMw
LDExICsyNTYsMTEgQEAgYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKAog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTTG9jazo6bG9jayhKU0xvY2tCZWhhdmlvcikK
K3ZvaWQgSlNMb2NrOjpsb2NrKCkKIHsKIH0KIAotdm9pZCBKU0xvY2s6OnVubG9jayhKU0xvY2tC
ZWhhdmlvcikKK3ZvaWQgSlNMb2NrOjp1bmxvY2soKQogewogfQogCkBAIC0yNDYsMTEgKzI3Miwz
MyBAQCB2b2lkIEpTTG9jazo6dW5sb2NrKEV4ZWNTdGF0ZSopCiB7CiB9CiAKK3ZvaWQgSlNMb2Nr
Ojpsb2NrKEpTR2xvYmFsRGF0YSYpCit7Cit9CisKK3ZvaWQgSlNMb2NrOjp1bmxvY2soSlNHbG9i
YWxEYXRhJikKK3sKK30KKwordW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3MoKQoreworICAg
IHJldHVybiAwOworfQorCit1bnNpZ25lZCBKU0xvY2s6OmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9u
YWxseSgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSlNMb2NrOjpncmFiQWxsTG9ja3Mo
dW5zaWduZWQpCit7Cit9CisKIEpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoRXhl
Y1N0YXRlKikKIHsKIH0KIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhKU0xv
Y2tCZWhhdmlvcikKK0pTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoSlNHbG9iYWxE
YXRhKikKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgJ
KHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw5IEBACiAKICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVENTcGluTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTMwLDggKzMzLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgLy8gaW1wb3J0YW50IHRvIGxvY2sgYmVmb3JlIGRvaW5nIGFueXRoaW5nIHRo
YXQgYWxsb2NhdGVzIGEKICAgICAvLyBKYXZhU2NyaXB0IGRhdGEgc3RydWN0dXJlIG9yIHRoYXQg
aW50ZXJhY3RzIHdpdGggc2hhcmVkIHN0YXRlCiAgICAgLy8gc3VjaCBhcyB0aGUgcHJvdGVjdCBj
b3VudCBoYXNoIHRhYmxlLiBUaGUgc2ltcGxlc3Qgd2F5IHRvIGxvY2sKLSAgICAvLyBpcyB0byBj
cmVhdGUgYSBsb2NhbCBKU0xvY2sgb2JqZWN0IGluIHRoZSBzY29wZSB3aGVyZSB0aGUgbG9jayAK
LSAgICAvLyBtdXN0IGJlIGhlbGQuIFRoZSBsb2NrIGlzIHJlY3Vyc2l2ZSBzbyBuZXN0aW5nIGlz
IG9rLiBUaGUgSlNMb2NrIAorICAgIC8vIGlzIHRvIGNyZWF0ZSBhIGxvY2FsIEpTTG9ja0hvbGRl
ciBvYmplY3QgaW4gdGhlIHNjb3BlIHdoZXJlIHRoZSBsb2NrIAorICAgIC8vIG11c3QgYmUgaGVs
ZCBhbmQgcGFzcyBpdCB0aGUgY29udGV4dCB0aGF0IHJlcXVpcmVzIHByb3RlY3Rpb24uIAorICAg
IC8vIFRoZSBsb2NrIGlzIHJlY3Vyc2l2ZSBzbyBuZXN0aW5nIGlzIG9rLiBUaGUgSlNMb2NrIAog
ICAgIC8vIG9iamVjdCBhbHNvIGFjdHMgYXMgYSBjb252ZW5pZW5jZSBzaG9ydC1oYW5kIGZvciBy
dW5uaW5nIGltcG9ydGFudAogICAgIC8vIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgogCkBAIC00
NCw2MiArNDgsNjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gRHJvcEFsbExvY2tzIG9iamVj
dCB0YWtlcyBjYXJlIHRvIHJlbGVhc2UgdGhlIEpTTG9jayBvbmx5IGlmIHlvdXIKICAgICAvLyB0
aHJlYWQgYWNxdWlyZWQgaXQgdG8gYmVnaW4gd2l0aC4KIAotICAgIC8vIEZvciBjb250ZXh0cyBv
dGhlciB0aGFuIHRoZSBzaW5nbGUgc2hhcmVkIG9uZSwgaW1wbGljaXQgbG9ja2luZyBpcyBub3Qg
ZG9uZSwKLSAgICAvLyBidXQgd2Ugc3RpbGwgbmVlZCB0byBwZXJmb3JtIGFsbCB0aGUgY291bnRp
bmcgaW4gb3JkZXIgdG8ga2VlcCBkZWJ1ZwotICAgIC8vIGFzc2VydGlvbnMgd29ya2luZywgc28g
dGhhdCBjbGllbnRzIHRoYXQgdXNlIHRoZSBzaGFyZWQgY29udGV4dCBkb24ndCBicmVhay4KLQog
ICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBKU0dsb2JhbERhdGE7CiAKLSAgICBlbnVt
IEpTTG9ja0JlaGF2aW9yIHsgU2lsZW5jZUFzc2VydGlvbnNPbmx5LCBMb2NrRm9yUmVhbCB9Owor
ICAgIC8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBpbml0aWFsaXphdGlvbiBv
ZiB0aGUgbGVnYWN5IHNpbmdsZSAKKyAgICAvLyBzaGFyZWQgSlNHbG9iYWxEYXRhLgorICAgIGNs
YXNzIEdsb2JhbEpTTG9jayB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdsb2JhbEpT
TG9jayk7CisgICAgcHVibGljOgorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBHbG9iYWxKU0xv
Y2soKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkdsb2JhbEpTTG9jaygpOworICAgIH07
CisKKyAgICBjbGFzcyBKU0xvY2tIb2xkZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgSlNMb2NrSG9sZGVyKEpTR2xvYmFsRGF0YSopOworICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIEpTTG9ja0hvbGRlcihFeGVjU3RhdGUqKTsKKworICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB+SlNMb2NrSG9sZGVyKCk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpT
R2xvYmFsRGF0YT4gbV9nbG9iYWxEYXRhOworICAgIH07CiAKICAgICBjbGFzcyBKU0xvY2sgewog
ICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKU0xvY2spOwogICAgIHB1YmxpYzoKLSAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNMb2NrKEV4ZWNTdGF0ZSopOwotICAgICAgICBKU0xvY2so
SlNHbG9iYWxEYXRhKik7CisgICAgICAgIEpTTG9jaygpOworICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB+SlNMb2NrKCk7CisKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2NrKCk7
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5sb2NrKCk7CiAKLSAgICAgICAgSlNM
b2NrKEpTTG9ja0JlaGF2aW9yIGxvY2tCZWhhdmlvcikKLSAgICAgICAgICAgIDogbV9sb2NrQmVo
YXZpb3IobG9ja0JlaGF2aW9yKQotICAgICAgICB7Ci0jaWZkZWYgTkRFQlVHCi0gICAgICAgICAg
ICAvLyBMb2NraW5nICJub3QgZm9yIHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0dXJlLgotICAg
ICAgICAgICAgaWYgKGxvY2tCZWhhdmlvciA9PSBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAgICAgICAgICBsb2NrKGxvY2tCZWhhdmlv
cik7Ci0gICAgICAgIH0KLQotICAgICAgICB+SlNMb2NrKCkKLSAgICAgICAgeyAKLSNpZmRlZiBO
REVCVUcKLSAgICAgICAgICAgIC8vIExvY2tpbmcgIm5vdCBmb3IgcmVhbCIgaXMgYSBkZWJ1Zy1v
bmx5IGZlYXR1cmUuCi0gICAgICAgICAgICBpZiAobV9sb2NrQmVoYXZpb3IgPT0gU2lsZW5jZUFz
c2VydGlvbnNPbmx5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgICAgICAg
ICAgdW5sb2NrKG1fbG9ja0JlaGF2aW9yKTsgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGxvY2soSlNMb2NrQmVoYXZpb3IpOwotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1bmxvY2soSlNMb2NrQmVoYXZpb3Ip
OwogICAgICAgICBzdGF0aWMgdm9pZCBsb2NrKEV4ZWNTdGF0ZSopOwogICAgICAgICBzdGF0aWMg
dm9pZCB1bmxvY2soRXhlY1N0YXRlKik7CisgICAgICAgIHN0YXRpYyB2b2lkIGxvY2soSlNHbG9i
YWxEYXRhJik7CisgICAgICAgIHN0YXRpYyB2b2lkIHVubG9jayhKU0dsb2JhbERhdGEmKTsKIAot
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgaW50cHRyX3QgbG9ja0NvdW50KCk7Ci0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdMb2NrKCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY3VycmVudFRocmVhZElz
SG9sZGluZ0xvY2soKTsKIAotICAgICAgICBKU0xvY2tCZWhhdmlvciBtX2xvY2tCZWhhdmlvcjsK
KyAgICAgICAgdW5zaWduZWQgZHJvcEFsbExvY2tzKCk7CisgICAgICAgIHVuc2lnbmVkIGRyb3BB
bGxMb2Nrc1VuY29uZGl0aW9uYWxseSgpOworICAgICAgICB2b2lkIGdyYWJBbGxMb2Nrcyh1bnNp
Z25lZCBsb2NrQ291bnQpOworCisgICAgICAgIFNwaW5Mb2NrIG1fc3BpbkxvY2s7CisgICAgICAg
IE11dGV4IG1fbG9jazsKKyAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX293bmVyVGhyZWFkOwor
ICAgICAgICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKKyAgICAgICAgdW5zaWduZWQgbV9sb2NrRHJv
cERlcHRoOwogCiAgICAgICAgIGNsYXNzIERyb3BBbGxMb2NrcyB7CiAgICAgICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShEcm9wQWxsTG9ja3MpOwogICAgICAgICBwdWJsaWM6CiAgICAgICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBEcm9wQWxsTG9ja3MoRXhlY1N0YXRlKiBleGVjKTsKLSAg
ICAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIERyb3BBbGxMb2NrcyhKU0xvY2tCZWhhdmlvcik7
CisgICAgICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBEcm9wQWxsTG9ja3MoSlNHbG9iYWxEYXRh
Kik7CiAgICAgICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+RHJvcEFsbExvY2tzKCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIGludHB0cl90IG1fbG9ja0Nv
dW50OwotICAgICAgICAgICAgSlNMb2NrQmVoYXZpb3IgbV9sb2NrQmVoYXZpb3I7CisgICAgICAg
ICAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBtX2dsb2JhbERhdGE7CiAgICAgICAgIH07CiAgICAg
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgJKHJl
dmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01h
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw4ICs3NSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIEhhbmRsZVR5cGVzPE1hcHBlZFR5cGU+OjpnZXRGcm9tU2xvdChjb25zdF9jYXN0PEpTVmFs
dWUqPigmaW1wbC0+anNWYWx1ZSgpKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXQoSlNHbG9iYWxE
YXRhJiwgY29uc3QgS2V5VHlwZSYga2V5LCBFeHRlcm5hbFR5cGUgdmFsdWUpCisgICAgdm9pZCBz
ZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBLZXlUeXBlJiBrZXksIEV4dGVybmFs
VHlwZSB2YWx1ZSkKICAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZ2xvYmFsRGF0YSwgZ2xv
YmFsRGF0YS5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgICAg
IHR5cGVuYW1lIE1hcFR5cGU6OkFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoa2V5LCAwKTsK
ICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgICAgIFdlYWtTZXQ6OmRl
YWxsb2NhdGUocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQ3IEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVy
Z0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRh
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cy4gQ3VycmVudCByZWdyZXNzaW9uIHRlc3RzIGFyZSBzdWZmaWNpZW50LgorCisgICAgICAg
IENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5l
dyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4
dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAg
bmVlZHMgcHJvdGVjdGlvbi4gQWxzbyBhZGRlZCBhIGNvdXBsZSBKU0xvY2tzIHRvIHBsYWNlcyB0
aGF0IGRpZG4ndCBhbHJlYWR5IAorICAgICAgICBoYXZlIGl0IHRoYXQgbmVlZGVkIGl0LgorCisg
ICAgICAgICogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNvbGxlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVj
dFNvb24pOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5v
dyk6CisgICAgICAgIChXZWJDb3JlOjpHQ0NvbnRyb2xsZXI6OmRpc2NhcmRBbGxDb21waWxlZENv
ZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxs
YmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6
OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFj
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVZvaWRDYWxsYmFjazo6aGFuZGxlRXZl
bnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYW1lc3Bh
Y2VVUkkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0
ZWRTY3JpcHRIb3N0Ojpub2RlQXNTY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0lu
amVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdGVkT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3Rl
ZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUluamVjdGVkU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6
OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y2FuQWNjZXNzSW5zcGVjdGVkV2luZG93KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0Z1bmN0aW9uKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTTXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU011dGF0
aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVG
aWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0
aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlcXVlc3RBbmltYXRp
b25GcmFtZUNhbGxiYWNrQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVxdWVzdEFu
aW1hdGlvbkZyYW1lQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRD
YWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNjcmlwdERlYnVnU2VydmVyOjpy
ZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NoZWR1bGVk
QWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZUZ1
bmN0aW9uSW5Db250ZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFt
ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3Jp
cHRDYWNoZWRGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVE
YXRhOjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6
Y2xlYXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6aW5pdFNjcmlwdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDb250cm9sbGVyOjp1cGRhdGVEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDb250cm9sbGVyOjpjYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpiaW5kaW5nUm9vdE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTY3JpcHROUE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpqc09iamVjdEZvclBsdWdpbkVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3Rz
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0T2JqZWN0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXVzZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpldmVudExp
c3RlbmVySGFuZGxlckJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnRMaXN0ZW5lckhhbmRs
ZXJMb2NhdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFy
Z3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6OmNvbnN0cnVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDYWxsYmFjazo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEdsb2JhbE9iamVjdDo6
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdEdsb2JhbE9iamVjdDo6cmVtb3ZlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6
Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjp0b0luc3BlY3RvclZh
bHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6On5Xb3JrZXJTY3JpcHRD
b250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6Omlu
aXRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZh
bHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZGlzYWJs
ZUV2YWwpOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOgorICAg
ICAgICAoX2RpZEV4ZWN1dGUpOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgX3NldEltcDpv
cmlnaW5Sb290T2JqZWN0OnJvb3RPYmplY3Q6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVj
dCBfc2V0T3JpZ2luUm9vdE9iamVjdDphbmRSb290T2JqZWN0Ol0pOgorICAgICAgICAoLVtXZWJT
Y3JpcHRPYmplY3QgZGVhbGxvY10pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgZmluYWxp
emVdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGNhbGxXZWJTY3JpcHRNZXRob2Q6d2l0
aEFyZ3VtZW50czpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGV2YWx1YXRlV2ViU2Ny
aXB0Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc2V0VmFsdWU6Zm9yS2V5Ol0pOgor
ICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgdmFsdWVGb3JLZXk6XSk6CisgICAgICAgICgtW1dl
YlNjcmlwdE9iamVjdCByZW1vdmVXZWJTY3JpcHRLZXk6XSk6CisgICAgICAgICgtW1dlYlNjcmlw
dE9iamVjdCBoYXNXZWJTY3JpcHRLZXk6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBz
dHJpbmdSZXByZXNlbnRhdGlvbl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgd2ViU2Ny
aXB0VmFsdWVBdEluZGV4Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc2V0V2ViU2Ny
aXB0VmFsdWVBdEluZGV4OnZhbHVlOl0pOgorICAgICAgICAoK1tXZWJTY3JpcHRPYmplY3QgX2Nv
bnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOm9yaWdpblJvb3RPYmplY3Q6cm9vdE9iamVjdDpdKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdl
bmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENh
bGxiYWNrOjpjYWxsYmFja1dpdGhOb1BhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENh
bGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aFN0cmluZ0xpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aEJvb2xlYW4pOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKToKKyAgICAgICAg
KiBicmlkZ2UvTlBfanNvYmplY3QuY3BwOgorICAgICAgICAoX05QTl9JbnZva2VEZWZhdWx0KToK
KyAgICAgICAgKF9OUE5fSW52b2tlKToKKyAgICAgICAgKF9OUE5fRXZhbHVhdGUpOgorICAgICAg
ICAoX05QTl9HZXRQcm9wZXJ0eSk6CisgICAgICAgIChfTlBOX1NldFByb3BlcnR5KToKKyAgICAg
ICAgKF9OUE5fUmVtb3ZlUHJvcGVydHkpOgorICAgICAgICAoX05QTl9IYXNQcm9wZXJ0eSk6Cisg
ICAgICAgIChfTlBOX0hhc01ldGhvZCk6CisgICAgICAgIChfTlBOX0VudW1lcmF0ZSk6CisgICAg
ICAgIChfTlBOX0NvbnN0cnVjdCk6CisgICAgICAgICogYnJpZGdlL2MvY19jbGFzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpDQ2xhc3M6On5DQ2xhc3MpOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6Q0NsYXNzOjptZXRob2RzTmFtZWQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
Q0NsYXNzOjpmaWVsZE5hbWVkKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX2luc3RhbmNlLmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRv
RXhlY1N0YXRlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6aW52b2tlTWV0
aG9kKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1l
dGhvZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZUNvbnN0cnVj
dCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMp
OgorICAgICAgICAqIGJyaWRnZS9jL2NfcnVudGltZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpDRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OkNGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3V0aWxp
dHkuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9OUFZhcmlhbnQp
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE5QVmFyaWFudFRvVmFsdWUpOgorICAg
ICAgICAqIGJyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tOgorICAgICAgICAoSmF2YUpTT2JqZWN0
OjpjYWxsKToKKyAgICAgICAgKEphdmFKU09iamVjdDo6ZXZhbCk6CisgICAgICAgIChKYXZhSlNP
YmplY3Q6OmdldE1lbWJlcik6CisgICAgICAgIChKYXZhSlNPYmplY3Q6OnNldE1lbWJlcik6Cisg
ICAgICAgIChKYXZhSlNPYmplY3Q6OnJlbW92ZU1lbWJlcik6CisgICAgICAgIChKYXZhSlNPYmpl
Y3Q6OmdldFNsb3QpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpzZXRTbG90KToKKyAgICAgICAg
KEphdmFKU09iamVjdDo6dG9TdHJpbmcpOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpjb252ZXJ0
VmFsdWVUb0pPYmplY3QpOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpjb252ZXJ0Sk9iamVjdFRv
VmFsdWUpOgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX29iamMubW06CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpkaXNwYXRjaEpOSUNhbGwpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0pO
SVV0aWxpdHlQcml2YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1
ZVRvSlZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwOgor
ICAgICAgICAoSmF2YUNsYXNzOjpKYXZhQ2xhc3MpOgorICAgICAgICAoSmF2YUNsYXNzOjp+SmF2
YUNsYXNzKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwOgor
ICAgICAgICAoSmF2YUluc3RhbmNlOjpzdHJpbmdWYWx1ZSk6CisgICAgICAgICogYnJpZGdlL2pu
aS9qc2MvSmF2YU1ldGhvZEpTQy5jcHA6CisgICAgICAgIChhcHBlbmRDbGFzc05hbWUpOgorICAg
ICAgICAoSmF2YU1ldGhvZDo6c2lnbmF0dXJlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9K
YXZhU3RyaW5nSlNDLmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhU3RyaW5nOjpKYXZh
U3RyaW5nKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFTdHJpbmc6On5KYXZhU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFTdHJpbmc6OnV0ZjgpOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6SmF2YVN0cmluZzo6aW5pdCk6CisgICAgICAgICogYnJpZGdlL2pzYy9C
cmlkZ2VKU0MuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6OmNyZWF0ZVJ1
bnRpbWVPYmplY3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6Om5ld1J1bnRp
bWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW06CisgICAg
ICAgIChPYmpjSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZSk6CisgICAg
ICAgIChPYmpjSW5zdGFuY2U6Omludm9rZU9iamNNZXRob2QpOgorICAgICAgICAoT2JqY0luc3Rh
bmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6c2V0VmFs
dWVPZlVuZGVmaW5lZEZpZWxkKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZlVu
ZGVmaW5lZEZpZWxkKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW06Cisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKToKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKToKKyAg
ICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW06CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpjb252ZXJ0VmFsdWVUb09iamNWYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpj
b252ZXJ0TlNTdHJpbmdUb1N0cmluZyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0
T2JqY1ZhbHVlVG9WYWx1ZSk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6On5RdEluc3RhbmNlKToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6OmdldFF0SW5zdGFuY2UpOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdCk6CisgICAgICAgICog
YnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
UXRQaXhtYXBJbnN0YW5jZTo6Y3JlYXRlUGl4bWFwUnVudGltZU9iamVjdCk6CisgICAgICAgICog
YnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVy
dFZhbHVlVG9RVmFyaWFudCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0UVZhcmlh
bnRUb1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGFNZXRob2Q6
OmNhbGwpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhv
ZDo6Y2FsbCk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X3J1bnRpbWVfcXQ0LmNwcDoKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQpOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6Y29udmVydFFWYXJpYW50VG9WYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjYWxsKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNhbGwpOgorICAgICAgICAqIGh0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAg
ICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RvcCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpucE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpw
cml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIHBsdWdpbnMvYmxhY2tiZXJy
eS9QbHVnaW5WaWV3QmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBX
aW5kb3dJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmdldFdpbmRvd0luZm8pOgorICAg
ICAgICAqIHBsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKiBwbHVnaW5zL2d0ay9QbHVn
aW5WaWV3R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKiBwbHVnaW5z
L21hYy9QbHVnaW5WaWV3TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0
TlBXaW5kb3dJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRj
aE5QRXZlbnQpOgorICAgICAgICAqIHBsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdp
blZpZXdXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAqIHRl
c3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmVUZXN0U3Vw
cG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmVUZXN0U3VwcG9y
dDo6cmVzZXRJbnRlcm5hbHNPYmplY3QpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24pOgor
CiAyMDEyLTA2LTIxICBUYWlqdSBUc3Vpa2kgIDx0emlrQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBVbmlmeSBGaWxlU3lzdGVtIGNhbGxiYWNrcwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHZv
aWQgY29sbGVjdCh2b2lkKikKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNvbGxl
Y3RBbGxHYXJiYWdlKCk7CiB9CiAKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6
OmdhcmJhZ2VDb2xsZWN0U29vbigpCiAgICAgLy8gZG93biBpbnRvIFdURiBzbyB0aGF0IG1vcmUg
cGxhdGZvcm1zIGNhbiB0YWtlIGFkdmFudGFnZSBvZiBpdCwgd2Ugd2lsbCBiZSAKICAgICAvLyBh
YmxlIHRvIHVzZSByZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCBvbiBtb3JlIHBsYXRmb3Jtcy4K
ICNpZiBVU0UoQ0YpCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5yZXBvcnRBYmFuZG9u
ZWRPYmplY3RHcmFwaCgpOwogI2Vsc2UKICAgICBpZiAoIW1fR0NUaW1lci5pc0FjdGl2ZSgpKQpA
QCAtODAsNyArODAsNyBAQCB2b2lkIEdDQ29udHJvbGxlcjo6Z2NUaW1lckZpcmVkKFRpbWVyPEdD
CiAKIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5vdygpCiB7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIGlmICghSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmlzQnVzeSgpKQogICAgICAgICBKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKIH0KQEAgLTEw
NCw3ICsxMDQsNyBAQCB2b2lkIEdDQ29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdEdhcmJhZ2VDCiAK
IHZvaWQgR0NDb250cm9sbGVyOjpkaXNjYXJkQWxsQ29tcGlsZWRDb2RlKCkKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgSlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpLT5oZWFwLmRlbGV0ZUFsbENvbXBpbGVkQ29kZSgpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2Fs
bGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgYm9vbCBKU1NRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2s6OmhhbmRsZQogCiAgICAgUmVmUHRyPEpTU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
YXJnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tVm9pZENhbGxi
YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bVZvaWRDYWxsYmFjay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3VzdG9tVm9pZENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NyArNjMsNyBAQCB2b2lkIEpTQ3VzdG9tVm9pZENhbGxiYWNrOjpoYW5kbGVFdmVudCgpCiAKICAg
ICBSZWZQdHI8SlNDdXN0b21Wb2lkQ2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAgICAgICAgIAot
ICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNr
KGFyZ3MpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0
aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIFN0cmluZyBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6
bG9va3VwTmEKIHsKICAgICBBU1NFUlQobV9jdXN0b21SZXNvbHZlcik7CiAKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBKU0Vycm9ySGFuZGxlcjo6aGFuZGxl
RXZlbnQoU2NyaXB0RQogCiAgICAgRXJyb3JFdmVudCogZXJyb3JFdmVudCA9IHN0YXRpY19jYXN0
PEVycm9yRXZlbnQqPihldmVudCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmds
b2JhbERhdGEoKSk7CiAKICAgICBKU09iamVjdCoganNGdW5jdGlvbiA9IHRoaXMtPmpzRnVuY3Rp
b24oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgaWYgKCFqc0Z1bmN0aW9uKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEpTVmFsdWUgSlNFdmVudDo6Y2xpcGJv
YXJkRGF0YShFeGVjU3RhdGUKIAogSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXZlbnQqIGV2ZW50KQogewotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAKICAgICBpZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6
OmhhbmRsZUV2ZW50KFNjcmlwdAogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCB8fCBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+Z2xvYmFsRGF0YSgpKTsK
IAogICAgIEpTT2JqZWN0KiBqc0Z1bmN0aW9uID0gdGhpcy0+anNGdW5jdGlvbihzY3JpcHRFeGVj
dXRpb25Db250ZXh0KTsKICAgICBpZiAoIWpzRnVuY3Rpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20u
Y3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lu
amVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcg
QEAgTm9kZSogSW5qZWN0ZWRTY3JpcHRIb3N0OjpzY3JpcHRWYWx1ZUFzTgogCiBTY3JpcHRWYWx1
ZSBJbmplY3RlZFNjcmlwdEhvc3Q6Om5vZGVBc1NjcmlwdFZhbHVlKFNjcmlwdFN0YXRlKiBzdGF0
ZSwgTm9kZSogbm9kZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKHN0YXRlKTsKICAgICByZXR1cm4gU2NyaXB0VmFsdWUo
c3RhdGUtPmdsb2JhbERhdGEoKSwgdG9KUyhzdGF0ZSwgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZv
clByb3RvdHlwZShzdGF0ZSksIG5vZGUpKTsKIH0KIApAQCAtOTUsNyArOTUsNyBAQCBKU1ZhbHVl
IEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0ZWRPCiAgICAgaWYgKCFvYmplY3QpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBTY3JpcHRWYWx1
ZSBzY3JpcHRWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMpOwogICAgIGlmIChzY3JpcHRWYWx1ZS5o
YXNOb1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0T2JqZWN0IEluamVjdGVkU2NyaXB0TWFuYWdl
cjo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2UsIFNjcmlwdFN0YXRl
KiBzY3JpcHRTdGF0ZSwgaW50IGlkKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogCiAgICAgU291
cmNlQ29kZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzdHJpbmdUb1VTdHJpbmcoc291cmNlKSk7
CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwpAQCAtODEsNyAr
ODEsNyBAQCBTY3JpcHRPYmplY3QgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhCiAKIGJvb2wg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjYW5BY2Nlc3NJbnNwZWN0ZWRXaW5kb3coU2NyaXB0U3Rh
dGUqIHNjcmlwdFN0YXRlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogICAgIEpTRE9NV2luZG93
KiBpbnNwZWN0ZWRXaW5kb3cgPSB0b0pTRE9NV2luZG93KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpOwogICAgIGlmICghaW5zcGVjdGVkV2luZG93KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3Rl
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlF
dmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3
ICsxMDgsNyBAQCBKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6CiAgICAg
aWYgKG1fb3JpZ2luYWxOb2RlKSB7CiAgICAgICAgIGlmICghd3JhcHBlcigpKSB7CiAgICAgICAg
ICAgICAvLyBFbnN1cmUgdGhhdCAnbm9kZScgaGFzIGEgSmF2YVNjcmlwdCB3cmFwcGVyIHRvIG1h
cmsgdGhlIGV2ZW50IGxpc3RlbmVyIHdlJ3JlIGNyZWF0aW5nLgotICAgICAgICAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBwYXNzIHRoZSBnbG9iYWwg
b2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZQogICAgICAgICAgICAgc2V0V3JhcHBlcihl
eGVjLT5nbG9iYWxEYXRhKCksIGFzT2JqZWN0KHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBtX29y
aWdpbmFsTm9kZSkpKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGV2YWx1YXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlNjb3BlQ2hhaW5Ob2RlKiBj
aGFpbiwgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFs
dWUsIEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKQogICAgIHsKICAgICAgICAgSlNNYWluVGhyZWFk
RXhlY1N0YXRlIGN1cnJlbnRTdGF0ZShleGVjKTsKKyAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgcmV0dXJuIEpTQzo6ZXZhbHVhdGUoZXhlYywgY2hhaW4sIHNv
dXJjZSwgdGhpc1ZhbHVlLCBleGNlcHRpb24pOwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrQ3VzdG9tLmNw
cAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRh
dGlvbkNhbGxiYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
CiAjaW5jbHVkZSAiSlNNdXRhdGlvbkNhbGxiYWNrLmgiCiAKKyNpbmNsdWRlICJKU0RPTVdpbmRv
d0Jhc2UuaCIKICNpbmNsdWRlICJKU011dGF0aW9uUmVjb3JkLmgiCiAjaW5jbHVkZSAiSlNXZWJL
aXRNdXRhdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgpAQCAtNTAsNyArNTEsNyBAQCBib29sIEpTTXV0YXRpb25DYWxsYmFjazo6aGFuZGxlRXZlbnQo
TXV0CiAKICAgICBSZWZQdHI8SlNNdXRhdGlvbkNhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25k
aXRpb24uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBAIEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6SlNOb2RlRmlsdGVyQ29uZGkKIAogc2hvcnQgSlNO
b2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBOb2Rl
KiBmaWx0ZXJOb2RlKSBjb25zdAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBpZiAoIW1fZmlsdGVy
KQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVxdWVz
dEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNr
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBib29sIEpTUmVxdWVz
dEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s6OmhhCiAKICAgICBSZWZQdHI8SlNSZXF1ZXN0QW5pbWF0
aW9uRnJhbWVDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
CiAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIodGltZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDEy
MDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSmF2YVNjcmlw
dENhbGxGcmFtZS5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNE
T01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDxk
ZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlv
bi5oPgpAQCAtMTA2LDcgKzEwNyw3IEBAIEpTVmFsdWUgSmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZh
bHVhdGUoY28KICAgICBpZiAoIW1faXNWYWxpZCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwog
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICByZXR1
cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS5ldmFsdWF0ZShzY3JpcHQsIGV4Y2VwdGlvbik7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERl
YnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcg
KzExMCw3IEBAIHZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVMaXN0ZW4KIAogdm9p
ZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFRpbWVyPFNj
cmlwdERlYnVnU2VydmVyPiopCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOwogICAgIC8vIElmIEphdmFTY3JpcHQgc3RhY2sgaXMgbm90IGVtcHR5IHBvc3Rwb25l
IHJlY29tcGlsYXRpb24uCiAgICAgaWYgKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KS0+ZHluYW1pY0dsb2JhbE9iamVjdCkKICAgICAgICAgcmVjb21waWxlQWxsSlNGdW5jdGlvbnNT
b29uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFj
dGlvbi5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgdm9p
ZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUoU2NyaXB0RXhlYwogdm9pZCBTY2hlZHVsZWRBY3Rp
b246OmV4ZWN1dGVGdW5jdGlvbkluQ29udGV4dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsK
ICAgICBBU1NFUlQobV9mdW5jdGlvbik7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb250ZXh0LT5nbG9iYWxEYXRhKCkpOwog
CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxs
RGF0YShtX2Z1bmN0aW9uLmdldCgpLCBjYWxsRGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1l
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBTY3JpcHRDYWNoZWRGcmFtZURhdGE6OlNjcmlwdENhY2hlZEZyYW1lRGF0YShGcmFt
ZSogZnJhbWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKIAogICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXIgPSBmcmFtZS0+c2Ny
aXB0KCk7CiAgICAgU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXAmIHdpbmRvd1NoZWxscyA9IHNj
cmlwdENvbnRyb2xsZXItPm1fd2luZG93U2hlbGxzOwpAQCAtNjcsNyArNjcsNyBAQCBTY3JpcHRD
YWNoZWRGcmFtZURhdGE6On5TY3JpcHRDYWNoZWRGcmFtCiAKIHZvaWQgU2NyaXB0Q2FjaGVkRnJh
bWVEYXRhOjpyZXN0b3JlKEZyYW1lKiBmcmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgU2NyaXB0Q29udHJvbGxlciogc2NyaXB0Q29u
dHJvbGxlciA9IGZyYW1lLT5zY3JpcHQoKTsKICAgICBTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1h
cCYgd2luZG93U2hlbGxzID0gc2NyaXB0Q29udHJvbGxlci0+bV93aW5kb3dTaGVsbHM7CkBAIC05
NSw3ICs5NSw3IEBAIHZvaWQgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpjbGVhcigpCiAgICAgaWYg
KG1fd2luZG93cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgbV93aW5kb3dzLmNsZWFyKCk7CiAg
ICAgZ2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3RTb29uKCk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRD
b250cm9sbGVyOjpldmFsdWF0ZUluCiAgICAgY29uc3QgU3RyaW5nKiBzYXZlZFNvdXJjZVVSTCA9
IG1fc291cmNlVVJMOwogICAgIG1fc291cmNlVVJMID0gJnNvdXJjZVVSTDsKIAotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAKICAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3QgPSBtX2ZyYW1lOwogCkBAIC0xNzcsNyAr
MTc3LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKAogICAgIGlm
IChtX3dpbmRvd1NoZWxscy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBmb3IgKFNoZWxsTWFw
OjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRv
d1NoZWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRv
d1NoZWxsID0gaXRlci0+c2Vjb25kLmdldCgpOwpAQCAtMjA5LDcgKzIwOSw3IEBAIEpTRE9NV2lu
ZG93U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OmluaXQKIHsKICAgICBBU1NFUlQoIW1fd2luZG93
U2hlbGxzLmNvbnRhaW5zKHdvcmxkKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHdvcmxkLT5nbG9iYWxEYXRhKCkpOwog
CiAgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBjcmVhdGVXaW5kb3dTaGVsbCh3
b3JsZCk7CiAKQEAgLTI4NCw5ICsyODQsMTAgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjp1cGRh
dGVEb2N1bWVudCgpCiAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIGZvciAo
U2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9
IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpCisgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0
b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMu
ZW5kKCk7ICsraXRlcikgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhpdGVyLT5maXJzdC0+
Z2xvYmFsRGF0YSgpKTsKICAgICAgICAgaXRlci0+c2Vjb25kLT53aW5kb3coKS0+dXBkYXRlRG9j
dW1lbnQoKTsKKyAgICB9CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlU2VjdXJp
dHlPcmlnaW4oKQpAQCAtMzAwLDcgKzMwMSw3IEBAIEJpbmRpbmdzOjpSb290T2JqZWN0KiBTY3Jp
cHRDb250cm9sbGVyOjoKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fY2FjaGVhYmxl
QmluZGluZ1Jvb3RPYmplY3QpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3Qg
PSBCaW5kaW5nczo6Um9vdE9iamVjdDo6Y3JlYXRlKDAsIGdsb2JhbE9iamVjdChwbHVnaW5Xb3Js
ZCgpKSk7CiAgICAgfQogICAgIHJldHVybiBtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0Lmdl
dCgpOwpAQCAtMzEyLDcgKzMxMyw3IEBAIEJpbmRpbmdzOjpSb290T2JqZWN0KiBTY3JpcHRDb250
cm9sbGVyOjoKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fYmluZGluZ1Jvb3RPYmpl
Y3QpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgICAgIG1fYmluZGluZ1Jvb3RPYmplY3QgPSBCaW5kaW5nczo6Um9vdE9iamVjdDo6
Y3JlYXRlKDAsIGdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CiAgICAgfQogICAgIHJldHVy
biBtX2JpbmRpbmdSb290T2JqZWN0LmdldCgpOwpAQCAtMzQ5LDkgKzM1MCw5IEBAIE5QT2JqZWN0
KiBTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTY3JpcHQKICAgICAgICAgaWYgKGNhbkV4ZWN1dGVT
Y3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkgewogICAgICAgICAgICAgLy8gSmF2YVNj
cmlwdCBpcyBlbmFibGVkLCBzbyB0aGVyZSBpcyBhIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4K
ICAgICAgICAgICAgIC8vIFJldHVybiBhbiBOUE9iamVjdCBib3VuZCB0byB0aGUgd2luZG93IG9i
amVjdC4KLSAgICAgICAgICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKLSAgICAgICAgICAgIEpTT2JqZWN0KiB3aW4gPSB3aW5kb3dTaGVsbChwbHVnaW5Xb3JsZCgp
KS0+d2luZG93KCk7CisgICAgICAgICAgICBKU0RPTVdpbmRvdyogd2luID0gd2luZG93U2hlbGwo
cGx1Z2luV29ybGQoKSktPndpbmRvdygpOwogICAgICAgICAgICAgQVNTRVJUKHdpbik7CisgICAg
ICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHdpbi0+Z2xvYmFsRXhlYygpKTsKICAgICAg
ICAgICAgIEJpbmRpbmdzOjpSb290T2JqZWN0KiByb290ID0gYmluZGluZ1Jvb3RPYmplY3QoKTsK
ICAgICAgICAgICAgIG1fd2luZG93U2NyaXB0TlBPYmplY3QgPSBfTlBOX0NyZWF0ZVNjcmlwdE9i
amVjdCgwLCB3aW4sIHJvb3QpOwogICAgICAgICB9IGVsc2UgewpAQCAtMzgzLDggKzM4NCw4IEBA
IEpTT2JqZWN0KiBTY3JpcHRDb250cm9sbGVyOjpqc09iamVjdEZvclAKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICAvLyBDcmVhdGUgYSBKU09iamVjdCBib3VuZCB0byB0aGlzIGVsZW1lbnQKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTRE9NV2luZG93KiBn
bG9iYWxPYmogPSBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZ2xvYmFsT2JqLT5nbG9iYWxFeGVjKCkpOwogICAgIC8vIEZJWE1FOiBpcyBub3JtYWwg
b2theT8gLSB1c2VkIGZvciBOUCBwbHVnaW5zPwogICAgIEpTVmFsdWUganNFbGVtZW50VmFsdWUg
PSB0b0pTKGdsb2JhbE9iai0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmosIHBsdWdpbik7CiAgICAg
aWYgKCFqc0VsZW1lbnRWYWx1ZSB8fCAhanNFbGVtZW50VmFsdWUuaXNPYmplY3QoKSkKQEAgLTQx
OCw3ICs0MTksNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRPYmplCiAK
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKCkKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgUm9vdE9iamVjdE1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yb290T2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKFJv
b3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yb290T2JqZWN0cy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTExMSw3ICsxMTEsNyBAQCBXZWJTY3JpcHRPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OndpbmRv
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFtX3dpbmRvd1NjcmlwdE9iamVjdCkgewot
ICAgICAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICAgICAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdCA9IGJp
bmRpbmdSb290T2JqZWN0KCk7CiAgICAgICAgIG1fd2luZG93U2NyaXB0T2JqZWN0ID0gW1dlYlNj
cmlwdE9iamVjdCBzY3JpcHRPYmplY3RGb3JKU09iamVjdDp0b1JlZih3aW5kb3dTaGVsbChwbHVn
aW5Xb3JsZCgpKSkgb3JpZ2luUm9vdE9iamVjdDpyb290IHJvb3RPYmplY3Q6cm9vdF07CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2Vy
dmVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNyArMjIyLDcgQEAg
dm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXVzZQogICAgIHsKICAgICAgICAg
aWYgKG1fY3VycmVudENhbGxGcmFtZS0+aXNWYWxpZCgpICYmIGdsb2JhbE9iamVjdC0+aW5oZXJp
dHMoJkpTRE9NR2xvYmFsT2JqZWN0OjpzX2luZm8pKSB7CiAgICAgICAgICAgICBKU0RPTUdsb2Jh
bE9iamVjdCogZG9tR2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhzdGF0ZSk7CiAgICAgICAgICAgICBq
c0NhbGxGcmFtZSA9IHRvSlMoc3RhdGUsIGRvbUdsb2JhbE9iamVjdCwgbV9jdXJyZW50Q2FsbEZy
YW1lLmdldCgpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBqc0NhbGxGcmFtZSA9IGpz
VW5kZWZpbmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRFdmVu
dExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk4LDcgKzk4LDcgQEAgU3RyaW5nIGV2ZW50TGlzdGVuZXJIYW5kbGVyQm9keShEb2N1bWVudAog
ICAgIEFTU0VSVChqc0xpc3RlbmVyKTsKICAgICBpZiAoIWpzTGlzdGVuZXIpCiAgICAgICAgIHJl
dHVybiAiIjsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGpzTGlzdGVuZXItPmlzb2xhdGVkV29ybGQoKS0+Z2xvYmFsRGF0YSgp
KTsKICAgICBKU0M6OkpTT2JqZWN0KiBqc0Z1bmN0aW9uID0ganNMaXN0ZW5lci0+anNGdW5jdGlv
bihkb2N1bWVudCk7CiAgICAgaWYgKCFqc0Z1bmN0aW9uKQogICAgICAgICByZXR1cm4gIiI7CkBA
IC0xMTIsNyArMTEyLDcgQEAgYm9vbCBldmVudExpc3RlbmVySGFuZGxlckxvY2F0aW9uKERvY3Vt
ZQogICAgIEFTU0VSVChqc0xpc3RlbmVyKTsKICAgICBpZiAoIWpzTGlzdGVuZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGpzTGlzdGVuZXItPmlzb2xhdGVkV29ybGQoKS0+Z2xvYmFs
RGF0YSgpKTsKICAgICBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCA9IGpzTGlzdGVuZXItPmpzRnVu
Y3Rpb24oZG9jdW1lbnQpOwogICAgIGlmICghanNPYmplY3QpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rp
b25DYWxsLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTkgKzU4LDE5
IEBAIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXIKIAogdm9pZCBTY3Jp
cHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBTdHJpbmcmIGFyZ3Vt
ZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNTdHJpbmco
bV9leGVjLCBhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6
OmFwcGVuZEFyZ3VtZW50KGNvbnN0IEpTQzo6VVN0cmluZyYgYXJndW1lbnQpCiB7Ci0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayht
X2V4ZWMpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc1N0cmluZyhtX2V4ZWMsIGFyZ3VtZW50
KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQo
Y29uc3QgY2hhciogYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1lbnRz
LmFwcGVuZChqc1N0cmluZyhtX2V4ZWMsIFVTdHJpbmcoYXJndW1lbnQpKSk7CiB9CiAKQEAgLTgx
LDMxICs4MSwzMSBAQCB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyCiAK
IHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQobG9uZyBhcmd1
bWVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVy
KGFyZ3VtZW50KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5k
QXJndW1lbnQobG9uZyBsb25nIGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2Fy
Z3VtZW50cy5hcHBlbmQoanNOdW1iZXIoYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBpbnQgYXJndW1lbnQpCiB7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihhcmd1bWVu
dCkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50
KHVuc2lnbmVkIGxvbmcgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1l
bnRzLmFwcGVuZChqc051bWJlcihhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxBcmd1
bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGludCBhcmd1bWVudCkKIHsKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhl
Yyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGFyZ3VtZW50KSk7CiB9CiAKQEAg
LTEyNSw3ICsxMjUsNyBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9v
CiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBtX3RoaXNPYmplY3QuanNPYmplY3QoKTsK
IAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sobV9leGVjKTsKIAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSB0aGlzT2JqZWN0LT5n
ZXQobV9leGVjLCBJZGVudGlmaWVyKG1fZXhlYywgc3RyaW5nVG9VU3RyaW5nKG1fbmFtZSkpKTsK
ICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgewpAQCAtMTYzLDcgKzE2Myw3IEBAIFNj
cmlwdE9iamVjdCBTY3JpcHRGdW5jdGlvbkNhbGw6OmNvbnN0cnUKIHsKICAgICBKU09iamVjdCog
dGhpc09iamVjdCA9IG1fdGhpc09iamVjdC5qc09iamVjdCgpOwogCi0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwog
CiAgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0gYXNPYmplY3QodGhpc09iamVjdC0+Z2V0KG1f
ZXhlYywgSWRlbnRpZmllcihtX2V4ZWMsIHN0cmluZ1RvVVN0cmluZyhtX25hbWUpKSkpOwogICAg
IGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC0yMDUsNyArMjA1LDcgQEAgU2NyaXB0
VmFsdWUgU2NyaXB0Q2FsbGJhY2s6OmNhbGwoKQogCiBTY3JpcHRWYWx1ZSBTY3JpcHRDYWxsYmFj
azo6Y2FsbChib29sJiBoYWRFeGNlcHRpb24pCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogCiAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShtX2Z1
bmN0aW9uLmpzVmFsdWUoKSwgY2FsbERhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3
ICs2Nyw3IEBAIHN0YXRpYyBib29sIGhhbmRsZUV4Y2VwdGlvbihTY3JpcHRTdGF0ZSoKIAogYm9v
bCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0
IGNoYXIqIG5hbWUsIGNvbnN0IFNjcmlwdE9iamVjdCYgdmFsdWUpCiB7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRT
dGF0ZSk7CiAgICAgc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHV0RGlyZWN0
KHNjcmlwdFN0YXRlLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUp
LCB2YWx1ZS5qc09iamVjdCgpKTsKICAgICByZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0
YXRlKTsKIH0KQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChT
Y3JpcHRTdGF0ZQogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiBib29sIFNjcmlwdEdsb2JhbE9iamVj
dDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgSW5zcGVj
dG9yRnJvbnRlbmRIb3N0KiB2YWx1ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgZ2xvYmFsT2JqZWN0LT5w
dXREaXJlY3Qoc2NyaXB0U3RhdGUtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihzY3JpcHRTdGF0
ZSwgbmFtZSksIHRvSlMoc2NyaXB0U3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpKTsKICAgICBy
ZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKQEAgLTgzLDcgKzgzLDcgQEAgYm9v
bCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZQogCiBib29sIFNjcmlwdEdsb2Jh
bE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwg
SW5qZWN0ZWRTY3JpcHRIb3N0KiB2YWx1ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgZ2xvYmFsT2JqZWN0
LT5wdXREaXJlY3Qoc2NyaXB0U3RhdGUtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihzY3JpcHRT
dGF0ZSwgbmFtZSksIHRvSlMoc2NyaXB0U3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpKTsKICAg
ICByZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKQEAgLTkyLDcgKzkyLDcgQEAg
Ym9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZQogCiBib29sIFNjcmlwdEds
b2JhbE9iamVjdDo6Z2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFt
ZSwgU2NyaXB0T2JqZWN0JiB2YWx1ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nZXQoc2Ny
aXB0U3RhdGUsIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpKTsKICAgICBpZiAoIWpzVmFs
dWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNiw3ICsxMDYsNyBAQCBib29sIFNjcmlw
dEdsb2JhbE9iamVjdDo6Z2V0KFNjcmlwdFN0YXRlCiAKIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0
OjpyZW1vdmUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lKQogewot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soc2NyaXB0U3RhdGUpOwogICAgIHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIHNjcmlwdFN0YXRlLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSk7
CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgYm9vbCBTY3JpcHRWYWx1ZTo6Z2V0U3RyaW5nKFNjcmlw
dFN0YXRlKgogewogICAgIGlmICghbV92YWx1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soc2NyaXB0U3RhdGUpOwogICAgIFVTdHJpbmcgdXN0cmluZzsKICAgICBpZiAoIW1fdmFsdWUu
Z2V0KCkuZ2V0U3RyaW5nKHNjcmlwdFN0YXRlLCB1c3RyaW5nKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTc1LDYgKzE3NSw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBqc1RvSW4KIAogUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gU2NyaXB0VmFsdWU6OnRvSW5z
cGVjdG9yVmFsdWUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKSBjb25zdAogeworICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGhvbGRlcihzY3JpcHRTdGF0ZSk7CiAgICAgcmV0dXJuIGpzVG9JbnNwZWN0
b3JWYWx1ZShzY3JpcHRTdGF0ZSwgbV92YWx1ZS5nZXQoKSwgSW5zcGVjdG9yVmFsdWU6Om1heERl
cHRoKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlw
dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIFdvcmtlclNj
cmlwdENvbnRyb2xsZXI6OldvcmtlclNjcmlwdENvbnQKIAogV29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6fldvcmtlclNjcmlwdENvbnRyb2xsZXIoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSgpKTsKICAg
ICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLmNsZWFyKCk7CiAgICAgbV9nbG9iYWxEYXRhLmNsZWFy
KCk7CiB9CkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6aW5p
dFNjcmlwdCgKIHsKICAgICBBU1NFUlQoIW1fd29ya2VyQ29udGV4dFdyYXBwZXIpOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhtX2dsb2JhbERhdGEuZ2V0KCkpOwogCiAgICAgLy8gRXhwbGljaXRseSBwcm90ZWN0IHRoZSBn
bG9iYWwgb2JqZWN0J3MgcHJvdG90eXBlIHNvIGl0IGlzbid0IGNvbGxlY3RlZAogICAgIC8vIHdo
ZW4gd2UgYWxsb2NhdGUgdGhlIGdsb2JhbCBvYmplY3QuIChPbmNlIHRoZSBnbG9iYWwgb2JqZWN0
IGlzIGZ1bGx5CkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVy
OjpldmFsdWF0ZShjbwogICAgIFNjcmlwdFZhbHVlIGV4Y2VwdGlvbjsKICAgICBldmFsdWF0ZShz
b3VyY2VDb2RlLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9uLmpzVmFsdWUoKSkgewot
ICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhKCkpOwogICAgICAgICByZXBvcnRFeGNlcHRpb24obV93
b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRXhlYygpLCBleGNlcHRpb24uanNWYWx1ZSgpKTsK
ICAgICB9CiB9CkBAIC0xMjgsOSArMTI4LDkgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVy
OjpldmFsdWF0ZShjbwogICAgICAgICByZXR1cm47CiAKICAgICBpbml0U2NyaXB0SWZOZWVkZWQo
KTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRXhlYygpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xv
YmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7CiAKQEAgLTE5MSw3ICsxOTEsNyBAQCBi
b29sIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmlzRXhlY3V0aW9uCiB2b2lkIFdvcmtlclNjcmlw
dENvbnRyb2xsZXI6OmRpc2FibGVFdmFsKCkKIHsKICAgICBpbml0U2NyaXB0SWZOZWVkZWQoKTsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGdsb2JhbERhdGEoKSk7CiAKICAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5zZXRF
dmFsRW5hYmxlZChmYWxzZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpj
L1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEyMiwxMyArMTIyLDEyIEBAICsgKGlkKXNjcmlwdE9iamVjdEZvckpTT2JqZWN0OihKU09iamVj
dFIKIAogc3RhdGljIHZvaWQgX2RpZEV4ZWN1dGUoV2ViU2NyaXB0T2JqZWN0ICpvYmopCiB7Ci0g
ICAgQVNTRVJUKEpTTG9jazo6bG9ja0NvdW50KCkgPiAwKTsKLSAgICAKICAgICBSb290T2JqZWN0
KiByb290ID0gW29iaiBfcm9vdE9iamVjdF07CiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1
cm47CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOworICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuYXBpTG9jaygpLmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIEtKU0RpZEV4ZWN1dGVGdW5jdGlvblB0ciBmdW5j
ID0gSW5zdGFuY2U6OmRpZEV4ZWN1dGVGdW5jdGlvbigpOwogICAgIGlmIChmdW5jKQogICAgICAg
ICBmdW5jKGV4ZWMsIHJvb3QtPmdsb2JhbE9iamVjdCgpKTsKQEAgLTE0OCwxOSArMTQ3LDI1IEBA
IC0gKHZvaWQpX3NldEltcDooSlNPYmplY3QqKWltcCBvcmlnaW5Sb28KIAogICAgIFdlYkNvcmU6
OmFkZEpTV3JhcHBlcihzZWxmLCBpbXApOwogCi0gICAgaWYgKF9wcml2YXRlLT5yb290T2JqZWN0
KQorICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCkgeworICAgICAgICBKU0xvY2tIb2xkZXIg
aG9sZGVyKCZfcHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEo
KSk7CiAgICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5nY1Byb3RlY3QoaW1wKTsKKyAgICB9
CiB9CiAKIC0gKHZvaWQpX3NldE9yaWdpblJvb3RPYmplY3Q6KFBhc3NSZWZQdHI8Um9vdE9iamVj
dD4pb3JpZ2luUm9vdE9iamVjdCBhbmRSb290T2JqZWN0OihQYXNzUmVmUHRyPFJvb3RPYmplY3Q+
KXJvb3RPYmplY3QKIHsKICAgICBBU1NFUlQoX3ByaXZhdGUtPmltcCk7CiAKLSAgICBpZiAocm9v
dE9iamVjdCkKKyAgICBpZiAocm9vdE9iamVjdCkgeworICAgICAgICBKU0xvY2tIb2xkZXIgaG9s
ZGVyKCZyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKICAgICAgICAg
cm9vdE9iamVjdC0+Z2NQcm90ZWN0KF9wcml2YXRlLT5pbXApOworICAgIH0KIAotICAgIGlmIChf
cHJpdmF0ZS0+cm9vdE9iamVjdCAmJiBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+aXNWYWxpZCgpKQor
ICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCAmJiBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+aXNW
YWxpZCgpKSB7CisgICAgICAgIEpTTG9ja0hvbGRlciBob2xkZXIoJl9wcml2YXRlLT5yb290T2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKICAgICAgICAgX3ByaXZhdGUtPnJv
b3RPYmplY3QtPmdjVW5wcm90ZWN0KF9wcml2YXRlLT5pbXApOworICAgIH0KIAogICAgIGlmIChf
cHJpdmF0ZS0+cm9vdE9iamVjdCkKICAgICAgICAgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmRlcmVm
KCk7CkBAIC0yMzIsOCArMjM3LDEwIEBAIC0gKHZvaWQpZGVhbGxvYwogICAgIGlmIChfcHJpdmF0
ZS0+aW1wKQogICAgICAgICBXZWJDb3JlOjpyZW1vdmVKU1dyYXBwZXIoX3ByaXZhdGUtPmltcCk7
CiAKLSAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmplY3Qt
PmlzVmFsaWQoKSkKKyAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJv
b3RPYmplY3QtPmlzVmFsaWQoKSkgeworICAgICAgICBKU0xvY2tIb2xkZXIgaG9sZGVyKCZfcHJp
dmF0ZS0+cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgICAg
IF9wcml2YXRlLT5yb290T2JqZWN0LT5nY1VucHJvdGVjdChfcHJpdmF0ZS0+aW1wKTsKKyAgICB9
CiAKICAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QpCiAgICAgICAgIF9wcml2YXRlLT5yb290
T2JqZWN0LT5kZXJlZigpOwpAQCAtMjQ4LDggKzI1NSwxMCBAQCAtICh2b2lkKWRlYWxsb2MKIAog
LSAodm9pZClmaW5hbGl6ZQogewotICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCAmJiBfcHJp
dmF0ZS0+cm9vdE9iamVjdC0+aXNWYWxpZCgpKQorICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVj
dCAmJiBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+aXNWYWxpZCgpKSB7CisgICAgICAgIEpTTG9ja0hv
bGRlciBob2xkZXIoJl9wcml2YXRlLT5yb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RGF0YSgpKTsKICAgICAgICAgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmdjVW5wcm90ZWN0KF9wcml2
YXRlLT5pbXApOworICAgIH0KIAogICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCkKICAgICAg
ICAgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmRlcmVmKCk7CkBAIC0yODEsMTAgKzI5MCw5IEBAIC0g
KGlkKWNhbGxXZWJTY3JpcHRNZXRob2Q6KE5TU3RyaW5nICopbmEKICAgICBpZiAoIVtzZWxmIF9p
c1NhZmVTY3JpcHRdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAKICAgICAvLyBMb29rIHVwIHRoZSBmdW5jdGlvbiBv
YmplY3QuCiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9
IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBzdHJpbmdUb1VTdHJpbmco
U3RyaW5nKG5hbWUpKSkpOwpAQCAtMzI1LDcgKzMzMyw3IEBAIC0gKGlkKWV2YWx1YXRlV2ViU2Ny
aXB0OihOU1N0cmluZyAqKXNjcmkKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9i
amVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5o
YWRFeGNlcHRpb24oKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAogICAgIFtzZWxmIF9yb290T2Jq
ZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgp
OwogICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1
YXRlKGV4ZWMsIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3Bl
Q2hhaW4oKSwgbWFrZVNvdXJjZShTdHJpbmcoc2NyaXB0KSksIEpTQzo6SlNWYWx1ZSgpLCAwKTsK
QEAgLTM0Niw3ICszNTQsNyBAQCAtICh2b2lkKXNldFZhbHVlOihpZCl2YWx1ZSBmb3JLZXk6KE5T
U3RyCiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwog
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIFtzZWxmIF9p
bXBdLT5tZXRob2RUYWJsZSgpLT5wdXQoW3NlbGYgX2ltcF0sIGV4ZWMsIElkZW50aWZpZXIoZXhl
Yywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhrZXkpKSksIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVl
KGV4ZWMsICZ2YWx1ZSwgT2JqY09iamVjdFR5cGUsIFtzZWxmIF9yb290T2JqZWN0XSksIHNsb3Qp
OwpAQCAtMzcyLDcgKzM4MCw3IEBAIC0gKGlkKXZhbHVlRm9yS2V5OihOU1N0cmluZyAqKWtleQog
ICAgICAgICAvLyBOZWVkIHRvIHNjb3BlIHRoaXMgbG9jayB0byBlbnN1cmUgdGhhdCB3ZSByZWxl
YXNlIHRoZSBsb2NrIGJlZm9yZSBjYWxsaW5nCiAgICAgICAgIC8vIFtzdXBlciB2YWx1ZUZvcktl
eTprZXldIHdoaWNoIG1pZ2h0IHRocm93IGFuIGV4Y2VwdGlvbiBhbmQgYnlwYXNzIHRoZSBKU0xv
Y2sgZGVzdHJ1Y3RvciwKICAgICAgICAgLy8gbGVhdmluZyB0aGUgbG9jayBwZXJtYW5lbnRseSBo
ZWxkCi0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAKICAgICAgICAgSlNWYWx1ZSByZXN1
bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3Ry
aW5nKFN0cmluZyhrZXkpKSkpOwogICAgICAgICAKQEAgLTM4OCw3ICszOTYsNyBAQCAtIChpZCl2
YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkKICAgICBpZiAoW3Jlc3VsdE9iaiBpc0tpbmRPZkNs
YXNzOltXZWJVbmRlZmluZWQgY2xhc3NdXSkKICAgICAgICAgcmVzdWx0T2JqID0gW3N1cGVyIHZh
bHVlRm9yS2V5OmtleV07ICAgIC8vIGRlZmF1bHRzIHRvIHRocm93aW5nIGFuIGV4Y2VwdGlvbgog
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBfZGlkRXhlY3V0ZShzZWxmKTsKICAgICAKICAgICByZXR1cm4g
cmVzdWx0T2JqOwpAQCAtNDAyLDcgKzQxMCw3IEBAIC0gKHZvaWQpcmVtb3ZlV2ViU2NyaXB0S2V5
OihOU1N0cmluZyAqKWsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0t
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNl
cHRpb24oKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgp
LT5kZWxldGVQcm9wZXJ0eShbc2VsZiBfaW1wXSwgZXhlYywgSWRlbnRpZmllcihleGVjLCBzdHJp
bmdUb1VTdHJpbmcoU3RyaW5nKGtleSkpKSk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsKQEAgLTQyMSw3ICs0MjksNyBAQCAtIChCT09MKWhhc1dlYlNjcmlwdEtleTooTlNTdHJp
bmcgKilrZXkKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24o
KSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEJPT0wgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmhhc1By
b3BlcnR5KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhrZXkp
KSkpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC00NDEsOCArNDQ5LDgg
QEAgLSAoTlNTdHJpbmcgKilzdHJpbmdSZXByZXNlbnRhdGlvbgogICAgICAgICByZXR1cm4gQCJV
bmRlZmluZWQiOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAog
ICAgIGlkIHJlc3VsdCA9IGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKGV4ZWMsIFtzZWxmIF9pbXBd
LCBPYmpjT2JqZWN0VHlwZSkub2JqZWN0VmFsdWU7CiAKQEAgLTQ2MSw3ICs0NjksNyBAQCAtIChp
ZCl3ZWJTY3JpcHRWYWx1ZUF0SW5kZXg6KHVuc2lnbmVkKWluCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAg
IEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgaW5kZXgpOwogCiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC00ODUsNyArNDkzLDcgQEAgLSAodm9pZClzZXRXZWJT
Y3JpcHRWYWx1ZUF0SW5kZXg6KHVuc2lnbgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9y
b290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQoIWV4
ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgW3NlbGYgX2ltcF0tPm1l
dGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoW3NlbGYgX2ltcF0sIGV4ZWMsIGluZGV4LCBjb252ZXJ0
T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBfcm9v
dE9iamVjdF0pLCBmYWxzZSk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKQEAg
LTUxNSw3ICs1MjMsNyBAQCArIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTVmFsdWUp
CiB7CiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2socm9vdE9iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbERhdGEoKSk7CiAKICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkpT
SFRNTEVsZW1lbnQ6OnNfaW5mbykpIHsKICAgICAgICAgICAgIC8vIFBsdWdpbiBlbGVtZW50cyBj
YWNoZSB0aGUgaW5zdGFuY2UgaW50ZXJuYWxseS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQko
d29ya2luZyBjb3B5KQpAQCAtMjczMyw3ICsyNzMzLDcgQEAgRU5ECiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpXG4iKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcblxuIik7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JGNsYXNzTmFtZT4gcHJv
dGVjdCh0aGlzKTtcblxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpO1xuXG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbERhdGEoKSk7XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzO1xuIik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcAkocmV2
aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBib29s
IEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhOb1BhcmFtCiAKICAgICBSZWZQdHI8SlNUZXN0
Q2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbERhdGEoKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKQEAg
LTgyLDcgKzgyLDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUAog
CiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2Rh
dGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7CkBAIC0xMDAsNyArMTAwLDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6
Y2FsbGJhY2tXaXRoQ2xhc3MyUAogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0
KHRoaXMpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwog
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC0xMTksNyArMTE5LDcgQEAg
Ym9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoU3RyaW5nTAogCiAgICAgUmVmUHRyPEpT
VGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
CkBAIC0xMzcsNyArMTM3LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQm9v
bGVhbgogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRl
KiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC0xNTcsNyArMTU3LDcgQEAgYm9vbCBKU1Rlc3RDYWxs
YmFjazo6Y2FsbGJhY2tSZXF1aXJlc1RoaQogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBw
cm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw3ICsx
NzcsNyBAQCBib29sIF9OUE5fSW52b2tlRGVmYXVsdChOUFAsIE5QT2JqZWN0KiBvCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9uIG9iamVjdC4KICAg
ICAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iai0+aW1wOwpAQCAtMjI1LDcgKzIyNSw3IEBAIGJv
b2wgX05QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmplY3QqIG8sIE4KICAgICAgICAgaWYgKCFyb290
T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBKU1ZhbHVlIGZ1
bmN0aW9uID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihl
eGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwpAQCAt
MjY0LDcgKzI2NCw3IEBAIGJvb2wgX05QTl9FdmFsdWF0ZShOUFAgaW5zdGFuY2UsIE5QT2JqZWMK
ICAgICAgICAgUGx1Z2luVmlldzo6a2VlcEFsaXZlKGluc3RhbmNlKTsKIAogICAgICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwot
ICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgU3RyaW5nIHNjcmlwdFN0cmluZyA9IGNvbnZl
cnROUFN0cmluZ1RvVVRGMTYocyk7CiAgICAgICAgIAogICAgICAgICBKU1ZhbHVlIHJldHVyblZh
bHVlID0gSlNDOjpldmFsdWF0ZShyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtl
U291cmNlKHNjcmlwdFN0cmluZyksIEpTQzo6SlNWYWx1ZSgpKTsKQEAgLTI5MCw3ICsyOTAsNyBA
QCBib29sIF9OUE5fR2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAg
ICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJv
cGVydHlOYW1lKTsKICAgICAgICAgCi0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBKU1Zh
bHVlIHJlc3VsdDsKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpCiAgICAgICAgICAgICByZXN1
bHQgPSBvYmotPmltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMs
IGktPnN0cmluZygpKSk7CkBAIC0zMjIsNyArMzIyLDcgQEAgYm9vbCBfTlBOX1NldFByb3BlcnR5
KE5QUCwgTlBPYmplY3QqIG8sIAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3Rh
dGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7CiAKICAgICAgICAgaWYgKGkt
PmlzU3RyaW5nKCkpIHsKQEAgLTM2Myw3ICszNjMsNyBAQCBib29sIF9OUE5fUmVtb3ZlUHJvcGVy
dHkoTlBQLCBOUE9iamVjdCogCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpCiAgICAgICAgICAgICBvYmot
PmltcC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqLT5pbXAsIGV4ZWMsIGlkZW50
aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSk7CiAgICAgICAgIGVsc2UK
QEAgLTM4Niw3ICszODYsNyBAQCBib29sIF9OUE5fSGFzUHJvcGVydHkoTlBQLCBOUE9iamVjdCog
bywgCiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0
PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwotICAgICAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICAgICAgaWYgKGktPmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gb2Jq
LT5pbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMs
IGktPnN0cmluZygpKSk7CiAgICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwpAQCAt
NDE4LDcgKzQxOCw3IEBAIGJvb2wgX05QTl9IYXNNZXRob2QoTlBQLCBOUE9iamVjdCogbywgTlAK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKICAgICAgICAgSlNWYWx1ZSBmdW5jID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlm
aWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gIWZ1bmMuaXNVbmRlZmluZWQoKTsKQEAg
LTQ0Nyw3ICs0NDcsNyBAQCBib29sIF9OUE5fRW51bWVyYXRlKE5QUCwgTlBPYmplY3QqIG8sIE5Q
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhl
eGVjKTsKIAogICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1l
cyhvYmotPmltcCwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRFbnVtUHJvcGVydGll
cyk7CkBAIC00ODQsNyArNDg0LDcgQEAgYm9vbCBfTlBOX0NvbnN0cnVjdChOUFAsIE5QT2JqZWN0
KiBvLCBjbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgRXhl
Y1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
LSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoZSBjb25z
dHJ1Y3RvciBvYmplY3QuCiAgICAgICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBvYmotPmltcDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfY2xhc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfY2xhc3MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCiAjaW5jbHVkZSA8cnVu
dGltZS9TY29wZUNoYWluLmg+CiAjaW5jbHVkZSA8cnVudGltZS9JZGVudGlmaWVyLmg+CisjaW5j
bHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2Nr
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KQEAgLTQ3LDcgKzQ4LDcgQEAgQ0NsYXNzOjpDQ2xhc3MoTlBDbGFzcyogYUNs
YXNzKQogCiBDQ2xhc3M6On5DQ2xhc3MoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNMb2NrIGhl
cmU/CiAKICAgICBkZWxldGVBbGxWYWx1ZXMoX21ldGhvZHMpOwogICAgIF9tZXRob2RzLmNsZWFy
KCk7CkBAIC05MSw3ICs5Miw3IEBAIE1ldGhvZExpc3QgQ0NsYXNzOjptZXRob2RzTmFtZWQoUHJv
cGVydHkKICAgICBpZiAoX2lzYS0+aGFzTWV0aG9kICYmIF9pc2EtPmhhc01ldGhvZChvYmosIGlk
ZW50KSl7CiAgICAgICAgIE1ldGhvZCogYU1ldGhvZCA9IG5ldyBDTWV0aG9kKGlkZW50KTsgLy8g
ZGVsZXRlZCBpbiB0aGUgQ0NsYXNzIGRlc3RydWN0b3IKICAgICAgICAgewotICAgICAgICAgICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrKGluc3QtPnJvb3RPYmplY3QoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEo
KSk7CiAgICAgICAgICAgICBfbWV0aG9kcy5zZXQobmFtZS5pbXBsKCksIGFNZXRob2QpOwogICAg
ICAgICB9CiAgICAgICAgIG1ldGhvZExpc3QuYXBwZW5kKGFNZXRob2QpOwpAQCAtMTE0LDcgKzEx
NSw3IEBAIEZpZWxkKiBDQ2xhc3M6OmZpZWxkTmFtZWQoUHJvcGVydHlOYW1lIHAKICAgICBpZiAo
X2lzYS0+aGFzUHJvcGVydHkgJiYgX2lzYS0+aGFzUHJvcGVydHkob2JqLCBpZGVudCkpewogICAg
ICAgICBhRmllbGQgPSBuZXcgQ0ZpZWxkKGlkZW50KTsgLy8gZGVsZXRlZCBpbiB0aGUgQ0NsYXNz
IGRlc3RydWN0b3IKICAgICAgICAgewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGluc3QtPnJvb3RP
YmplY3QoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBfZmll
bGRzLnNldChuYW1lLmltcGwoKSwgYUZpZWxkKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzMsNyArNzMsNyBAQCB2b2lkIENJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlCiAg
ICAgICAgIHJldHVybjsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHRo
cm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkp
KTsKICAgICB9CiAKQEAgLTE4Miw3ICsxODIsNyBAQCBKU1ZhbHVlIENJbnN0YW5jZTo6aW52b2tl
TWV0aG9kKEV4ZWNTdGF0CiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0VmFyaWFudCk7CiAK
ICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoZXhlYyk7CiAgICAgICAgIEFTU0VSVChnbG9iYWxFeGNlcHRpb25TdHJpbmcoKS5pc051bGwo
KSk7CiAgICAgICAgIHJldHZhbCA9IF9vYmplY3QtPl9jbGFzcy0+aW52b2tlKF9vYmplY3QsIGlk
ZW50LCBjQXJncy5kYXRhKCksIGNvdW50LCAmcmVzdWx0VmFyaWFudCk7CiAgICAgICAgIG1vdmVH
bG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKQEAgLTIxNyw3ICsyMTcsNyBAQCBKU1Zh
bHVlIENJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChFCiAgICAgTlBWYXJpYW50IHJlc3Vs
dFZhcmlhbnQ7CiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0VmFyaWFudCk7CiAgICAgewot
ICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMp
OwogICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAg
ICAgICByZXR2YWwgPSBfb2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQoX29iamVjdCwgY0Fy
Z3MuZGF0YSgpLCBjb3VudCwgJnJlc3VsdFZhcmlhbnQpOwogICAgICAgICBtb3ZlR2xvYmFsRXhj
ZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CkBAIC0yNTYsNyArMjU2LDcgQEAgSlNWYWx1ZSBDSW5z
dGFuY2U6Omludm9rZUNvbnN0cnVjdChFeGVjUwogICAgIE5QVmFyaWFudCByZXN1bHRWYXJpYW50
OwogICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdFZhcmlhbnQpOwogICAgIHsKLSAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAg
ICAgQVNTRVJUKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVsbCgpKTsKICAgICAgICAgcmV0
dmFsID0gX29iamVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QoX29iamVjdCwgY0FyZ3MuZGF0YSgpLCBj
b3VudCwgJnJlc3VsdFZhcmlhbnQpOwogICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVj
U3RhdGUoZXhlYyk7CkBAIC0zMTUsNyArMzE1LDcgQEAgdm9pZCBDSW5zdGFuY2U6OmdldFByb3Bl
cnR5TmFtZXMoRXhlY1N0YQogICAgIE5QSWRlbnRpZmllciogaWRlbnRpZmllcnM7CiAKICAgICB7
Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhl
Yyk7CiAgICAgICAgIEFTU0VSVChnbG9iYWxFeGNlcHRpb25TdHJpbmcoKS5pc051bGwoKSk7CiAg
ICAgICAgIGJvb2wgb2sgPSBfb2JqZWN0LT5fY2xhc3MtPmVudW1lcmF0ZShfb2JqZWN0LCAmaWRl
bnRpZmllcnMsICZjb3VudCk7CiAgICAgICAgIG1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0
ZShleGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19ydW50aW1lLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19ydW50aW1lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBKU1ZhbHVlIENGaWVsZDo6dmFsdWVGcm9tSW5z
dGFuY2UoRXhlY1N0CiAKICAgICAgICAgYm9vbCByZXN1bHQ7CiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMp
OwogICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5fY2xhc3MtPmdldFByb3BlcnR5KG9iaiwgX2Zp
ZWxkSWRlbnRpZmllciwgJnByb3BlcnR5KTsKICAgICAgICAgICAgIENJbnN0YW5jZTo6bW92ZUds
b2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgICAgICB9CkBAIC03MSw3ICs3MSw3
IEBAIHZvaWQgQ0ZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXQKICAgICAgICAgY29u
dmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgYVZhbHVlLCAmdmFyaWFudCk7CiAKICAgICAgICAg
ewotICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoZXhlYyk7CiAgICAgICAgICAgICBvYmotPl9jbGFzcy0+c2V0UHJvcGVydHkob2JqLCBf
ZmllbGRJZGVudGlmaWVyLCAmdmFyaWFudCk7CiAgICAgICAgICAgICBDSW5zdGFuY2U6Om1vdmVH
bG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKICAgICAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2
OCw3IEBAIHN0YXRpYyBTdHJpbmcgY29udmVydFVURjhUb1VURjE2V2l0aExhdGkKIC8vIFZhcmlh
bnQgdmFsdWUgbXVzdCBiZSByZWxlYXNlZCB3aXRoIE5QUmVsZWFzZVZhcmlhbnRWYWx1ZSgpCiB2
b2lkIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSwgTlBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIFZPSURfVE9fTlBW
QVJJQU5UKCpyZXN1bHQpOwogCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBjb252ZXJ0VmFsdWVU
b05QVmFyaWFudChFeGVjU3RhdGUqIAogCiBKU1ZhbHVlIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTlBWYXJpYW50KiB2YXJpYW50LCBSb290T2JqZWN0KiBy
b290T2JqZWN0KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCiAgICAgTlBWYXJpYW50VHlwZSB0eXBl
ID0gdmFyaWFudC0+dHlwZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlf
anNvYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlf
anNvYmplY3QubW0JKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvam5pX2pzb2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsNyArMjg0LDcgQEAgam9i
amVjdCBKYXZhSlNPYmplY3Q6OmNhbGwoanN0cmluZyBtZXRobwogICAgIAogICAgIC8vIExvb2t1
cCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICBJ
ZGVudGlmaWVyIGlkZW50aWZpZXIoZXhlYywgSmF2YVN0cmluZyhtZXRob2ROYW1lKS5pbXBsKCkp
OwogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBfaW1wLT5nZXQoZXhlYywgaWRlbnRpZmllcik7CkBA
IC0zMDcsMTIgKzMwNywxMiBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6ZXZhbChqc3RyaW5nIHNj
cmlwCiB7CiAgICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUpTT2JqZWN0OjpldmFsIHNjcmlwdCA9
ICVzIiwgSmF2YVN0cmluZyhzY3JpcHQpLnV0ZjgoKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIAogICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSB0
aGlzLT5yb290T2JqZWN0KCk7CiAgICAgaWYgKCFyb290T2JqZWN0KQogICAgICAgICByZXR1cm4g
MDsKIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxEYXRhKCkpOworICAgIAogICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RhcnQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpT
Qzo6ZXZhbHVhdGUocm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShK
YXZhU3RyaW5nKHNjcmlwdCkuaW1wbCgpKSk7CiAgICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CkBAIC0zMzAsNyArMzMwLDcg
QEAgam9iamVjdCBKYXZhSlNPYmplY3Q6OmdldE1lbWJlcihqc3RyaW5nIAogCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAg
ICAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gX2ltcC0+Z2V0KGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgSmF2YVN0cmluZyhtZW1iZXJOYW1lKS5pbXBsKCkpKTsKIAogICAgIHJl
dHVybiBjb252ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKQEAgLTM0Niw3ICszNDYsNyBAQCB2
b2lkIEphdmFKU09iamVjdDo6c2V0TWVtYmVyKGpzdHJpbmcgbWVtCiAKICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBfaW1wLT5tZXRob2RUYWJs
ZSgpLT5wdXQoX2ltcCwgZXhlYywgSWRlbnRpZmllcihleGVjLCBKYXZhU3RyaW5nKG1lbWJlck5h
bWUpLmltcGwoKSksIGNvbnZlcnRKT2JqZWN0VG9WYWx1ZShleGVjLCB2YWx1ZSksIHNsb3QpOwog
fQpAQCAtMzYxLDcgKzM2MSw3IEBAIHZvaWQgSmF2YUpTT2JqZWN0OjpyZW1vdmVNZW1iZXIoanN0
cmluZyAKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIF9pbXAt
Pm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KF9pbXAsIGV4ZWMsIElkZW50aWZpZXIoZXhl
YywgSmF2YVN0cmluZyhtZW1iZXJOYW1lKS5pbXBsKCkpKTsKIH0KIApAQCAtMzc2LDcgKzM3Niw3
IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpnZXRTbG90KGppbnQgaW5kZXgKIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gX2ltcC0+Z2V0KGV4ZWMsIGluZGV4
KTsKIAogICAgIHJldHVybiBjb252ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKQEAgLTM5Miw3
ICszOTIsNyBAQCB2b2lkIEphdmFKU09iamVjdDo6c2V0U2xvdChqaW50IGluZGV4LCBqCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBfaW1wLT5tZXRob2RUYWJs
ZSgpLT5wdXRCeUluZGV4KF9pbXAsIGV4ZWMsICh1bnNpZ25lZClpbmRleCwgY29udmVydEpPYmpl
Y3RUb1ZhbHVlKGV4ZWMsIHZhbHVlKSwgZmFsc2UpOwogfQogCkBAIC00MDUsOSArNDA1LDkgQEAg
anN0cmluZyBKYXZhSlNPYmplY3Q6OnRvU3RyaW5nKCkgY29uc3QKICAgICBpZiAoIXJvb3RPYmpl
Y3QpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKICAgICBKU09iamVjdCAqdGhpc09iaiA9IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihf
aW1wKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxqc3RyaW5nPihjb252ZXJ0VmFsdWVUb0pWYWx1ZShleGVjLCByb290
T2JqZWN0LCB0aGlzT2JqLCBKYXZhVHlwZU9iamVjdCwgImphdmEubGFuZy5TdHJpbmciKS5sKTsK
IH0KQEAgLTQ2MywxMyArNDYzLDEzIEBAIGpsb25nIEphdmFKU09iamVjdDo6Y3JlYXRlTmF0aXZl
KGpsb25nIG4KIAogam9iamVjdCBKYXZhSlNPYmplY3Q6OmNvbnZlcnRWYWx1ZVRvSk9iamVjdChK
U1ZhbHVlIHZhbHVlKSBjb25zdAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7Ci0gICAgCiAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IHRoaXMtPnJvb3RPYmpl
Y3QoKTsKICAgICBpZiAoIXJvb3RPYmplY3QpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgCiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKTklFbnYgKmVudiA9IGdl
dEpOSUVudigpOwogICAgIGpvYmplY3QgcmVzdWx0ID0gMDsKICAgICAKQEAgLTU1NCw3ICs1NTQs
NyBAQCBKU1ZhbHVlIEphdmFKU09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhCiAgICAgLy8gZmln
dXJlIDIyLTQuCiAgICAgam9iamVjdCBjbGFzc09mSW5zdGFuY2UgPSBjYWxsSk5JTWV0aG9kPGpv
YmplY3Q+KHRoZU9iamVjdCwgImdldENsYXNzIiwgIigpTGphdmEvbGFuZy9DbGFzczsiKTsKICAg
ICBpZiAoIWNsYXNzT2ZJbnN0YW5jZSkgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAg
cmV0dXJuIEphdmFJbnN0YW5jZTo6Y3JlYXRlKHRoZU9iamVjdCwgX3Jvb3RPYmplY3QpLT5jcmVh
dGVSdW50aW1lT2JqZWN0KGV4ZWMpOwogICAgIH0KIApAQCAtNTYzLDcgKzU2Myw3IEBAIEpTVmFs
dWUgSmF2YUpTT2JqZWN0Ojpjb252ZXJ0Sk9iamVjdFRvVmEKICAgICAvLyBwb2ludGVyIGFuZCBz
dG9yZXMgaXQgaW4gdGhpcyBvYmplY3QsIHNvIHRoYXQgaXQgY2FuIGJlIHJldHJpZXZlZCBiZWxv
dy4KICAgICBqc3RyaW5nIGNsYXNzTmFtZSA9IChqc3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVj
dD4oY2xhc3NPZkluc3RhbmNlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOwog
ICAgIGlmICghY2xhc3NOYW1lIHx8IChzdHJjbXAoSmF2YVN0cmluZyhjbGFzc05hbWUpLnV0Zjgo
KSwgInN1bi5wbHVnaW4uamF2YXNjcmlwdC53ZWJraXQuSlNPYmplY3QiKSAhPSAwKSkgewotICAg
ICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgcmV0dXJuIEphdmFJbnN0YW5jZTo6Y3JlYXRlKHRo
ZU9iamVjdCwgX3Jvb3RPYmplY3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfb2JqYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9vYmpjLm1tCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9vYmpjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgSlNDOjpCaW5kaW5nczo6ZGlzcGF0Y2hKTklDYWxs
KEV4ZWMKICAgICAgICAgLy8gaW1wbGVtZW50ZWQgaW4gV2ViQ29yZSB3aWxsIGd1YXJhbnRlZSB0
aGF0IG9ubHkgYXBwcm9wcmlhdGUgSmF2YVNjcmlwdAogICAgICAgICAvLyBjYW4gcmVmZXJlbmNl
IHRoZSBhcHBsZXQuCiAgICAgICAgIHsKLSAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgICAgIHJlc3VsdCA9IFt2
aWV3IHdlYlBsdWdJbkNhbGxKYXZhOm9iaiBpc1N0YXRpYzppc1N0YXRpYyByZXR1cm5UeXBlOnJl
dHVyblR5cGUgbWV0aG9kOm1ldGhvZElEIGFyZ3VtZW50czphcmdzIGNhbGxpbmdVUkw6bmlsIGV4
Y2VwdGlvbkRlc2NyaXB0aW9uOiZfZXhjZXB0aW9uRGVzY3JpcHRpb25dOwogICAgICAgICB9CiAK
QEAgLTcyLDcgKzcyLDcgQEAgYm9vbCBKU0M6OkJpbmRpbmdzOjpkaXNwYXRjaEpOSUNhbGwoRXhl
YwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgZWxzZSBpZiAoW3ZpZXcgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5DYWxsSmF2YTptZXRob2Q6cmV0dXJuVHlw
ZTphcmd1bWVudHM6KV0pIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgcmVzdWx0ID0gW3ZpZXcgd2ViUGx1Z0luQ2Fs
bEphdmE6b2JqIG1ldGhvZDptZXRob2RJRCByZXR1cm5UeXBlOnJldHVyblR5cGUgYXJndW1lbnRz
OmFyZ3NdOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJp
dmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBAQCBzdGF0aWMgam9iamVj
dCBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2CiAKIGp2YWx1ZSBjb252ZXJ0VmFsdWVUb0pWYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIFJvb3RPYmplY3QqIHJvb3RPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IEphdmFUeXBlIGphdmFUeXBlLCBjb25zdCBjaGFyKiBqYXZhQ2xhc3NOYW1lKQogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAKICAgICBqdmFsdWUgcmVzdWx0OwogICAgIG1lbXNldCgmcmVzdWx0LCAwLCBzaXpl
b2YoanZhbHVlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xh
c3NKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0ph
dmFDbGFzc0pTQy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9qbmkvanNjL0phdmFDbGFzc0pTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcg
QEAgSmF2YUNsYXNzOjpKYXZhQ2xhc3Moam9iamVjdCBhbkluc3RhbmNlKQogICAgICAgICAgICAg
am9iamVjdCBhSkZpZWxkID0gZW52LT5HZXRPYmplY3RBcnJheUVsZW1lbnQoKGpvYmplY3RBcnJh
eSlmaWVsZHMsIGkpOwogICAgICAgICAgICAgSmF2YUZpZWxkKiBhRmllbGQgPSBuZXcgSmF2YUZp
ZWxkKGVudiwgYUpGaWVsZCk7IC8vIGRlbGV0ZWQgaW4gdGhlIEphdmFDbGFzcyBkZXN0cnVjdG9y
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGFjcXVpcmUg
YSBKU0xvY2sgaGVyZT8KICAgICAgICAgICAgICAgICBtX2ZpZWxkcy5zZXQoYUZpZWxkLT5uYW1l
KCkuaW1wbCgpLCBhRmllbGQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZW52LT5EZWxl
dGVMb2NhbFJlZihhSkZpZWxkKTsKQEAgLTc5LDcgKzc5LDcgQEAgSmF2YUNsYXNzOjpKYXZhQ2xh
c3Moam9iamVjdCBhbkluc3RhbmNlKQogICAgICAgICAgICAgSmF2YU1ldGhvZCogYU1ldGhvZCA9
IG5ldyBKYXZhTWV0aG9kKGVudiwgYUpNZXRob2QpOyAvLyBkZWxldGVkIGluIHRoZSBKYXZhQ2xh
c3MgZGVzdHJ1Y3RvcgogICAgICAgICAgICAgTWV0aG9kTGlzdCogbWV0aG9kTGlzdDsKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYWNxdWlyZSBhIEpTTG9j
ayBoZXJlPwogCiAgICAgICAgICAgICAgICAgbWV0aG9kTGlzdCA9IG1fbWV0aG9kcy5nZXQoYU1l
dGhvZC0+bmFtZSgpLmltcGwoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFtZXRob2RMaXN0KSB7
CkBAIC0xMDAsNyArMTAwLDcgQEAgSmF2YUNsYXNzOjp+SmF2YUNsYXNzKCkKIHsKICAgICBmYXN0
RnJlZShjb25zdF9jYXN0PGNoYXIqPihtX25hbWUpKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNM
b2NrIGhlcmU/CiAKICAgICBkZWxldGVBbGxWYWx1ZXMobV9maWVsZHMpOwogICAgIG1fZmllbGRz
LmNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFu
Y2VKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0ph
dmFJbnN0YW5jZUpTQy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcg
Kzg3LDcgQEAgQ2xhc3MqIEphdmFJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdAogCiBKU1ZhbHVl
IEphdmFJbnN0YW5jZTo6c3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAKICAgICBqc3RyaW5nIHN0cmluZ1ZhbHVlID0gKGpzdHJpbmcpY2FsbEpOSU1l
dGhvZDxqb2JqZWN0PihtX2luc3RhbmNlLT5pbnN0YW5jZSgpLCAidG9TdHJpbmciLCAiKClMamF2
YS9sYW5nL1N0cmluZzsiKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2Mv
SmF2YU1ldGhvZEpTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2pu
aS9qc2MvSmF2YU1ldGhvZEpTQy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Miw3ICs5Miw3IEBAIEphdmFNZXRob2Q6On5KYXZhTWV0aG9kKCkKIC8vIHdlIGdldCAnLicgYmV0
d2VlbiBjb21wb25lbnRzIGZyb20gdGhlIHJlZmxlY3Rpb24gQVBJLgogc3RhdGljIHZvaWQgYXBw
ZW5kQ2xhc3NOYW1lKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IGNoYXIqIGNsYXNzTmFt
ZSkKIHsKLSAgICBBU1NFUlQoSlNMb2NrOjpsb2NrQ291bnQoKSA+IDApOworICAgIEFTU0VSVChK
U0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2UoKS5hcGlMb2NrKCkuY3VycmVudFRocmVh
ZElzSG9sZGluZ0xvY2soKSk7CiAKICAgICBjaGFyKiBjID0gZmFzdFN0ckR1cChjbGFzc05hbWUp
OwogCkBAIC0xMTEsNyArMTExLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kQ2xhc3NOYW1lKFN0cmlu
Z0J1aWxkZQogY29uc3QgY2hhciogSmF2YU1ldGhvZDo6c2lnbmF0dXJlKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fc2lnbmF0dXJlKSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYWNxdWlyZSBhIEpTTG9jayBo
ZXJlPwogCiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2lnbmF0dXJlQnVpbGRlcjsKICAgICAgICAg
c2lnbmF0dXJlQnVpbGRlci5hcHBlbmQoJygnKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9qbmkvanNjL0phdmFTdHJpbmdKU0MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlNDLmgJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFTdHJpbmdKU0MuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBKYXZhU3RyaW5nSlNDX2gKIAogI2luY2x1ZGUgIkpO
SVV0aWxpdHkuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKICNpbmNsdWRlICJKYXZh
SW5zdGFuY2VKU0MuaCIKIAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CkBAIC01MiwyMCAr
NTMsMjAgQEAgcHVibGljOgogCiAgICAgSmF2YVN0cmluZygpCiAgICAgewotICAgICAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9j
ayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAg
ICAgbV9pbXBsID0gVVN0cmluZygpLmltcGwoKTsKICAgICB9CiAKICAgICB+SmF2YVN0cmluZygp
CiAgICAgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICAgICAgICAgbV9pbXBsID0gMDsKICAgICB9CiAKICAgICBjb25zdCBj
aGFyKiB1dGY4KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghbV91dGY4U3RyaW5nLmRhdGEo
KSkgewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgbV91dGY4U3RyaW5nID0gVVN0cmluZyht
X2ltcGwpLnV0ZjgoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbV91dGY4U3RyaW5nLmRh
dGEoKTsKQEAgLTc5LDcgKzgwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgaW50IHNpemUgPSBlLT5H
ZXRTdHJpbmdMZW5ndGgocyk7CiAgICAgICAgIGNvbnN0IGpjaGFyKiB1YyA9IGdldFVDaGFyYWN0
ZXJzRnJvbUpTdHJpbmdJbkVudihlLCBzKTsKICAgICAgICAgewotICAgICAgICAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
ICAgICAgICAgbV9pbXBsID0gVVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4o
dWMpLCBzaXplKS5pbXBsKCk7CiAgICAgICAgIH0KICAgICAgICAgcmVsZWFzZVVDaGFyYWN0ZXJz
Rm9ySlN0cmluZ0luRW52KGUsIHMsIHVjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
c2MvQnJpZGdlSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNj
L0JyaWRnZUpTQy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9qc2MvQnJpZGdlSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBKU09i
amVjdCogSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoCiAgICAgaWYgKFJ1bnRpbWVPYmpl
Y3QqIGV4aXN0aW5nT2JqZWN0ID0gbV9ydW50aW1lT2JqZWN0LmdldCgpKQogICAgICAgICByZXR1
cm4gZXhpc3RpbmdPYmplY3Q7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFJ1bnRpbWVPYmplY3QqIG5l
d09iamVjdCA9IG5ld1J1bnRpbWVPYmplY3QoZXhlYyk7CiAgICAgbV9ydW50aW1lT2JqZWN0ID0g
UGFzc1dlYWs8UnVudGltZU9iamVjdD4obmV3T2JqZWN0KTsKICAgICBtX3Jvb3RPYmplY3QtPmFk
ZFJ1bnRpbWVPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdPYmplY3QpOwpAQCAtMTAxLDcg
KzEwMSw3IEBAIEpTT2JqZWN0KiBJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdCgKIAogUnVu
dGltZU9iamVjdCogSW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAKICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVy
ZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0CiAgICAg
Ly8gV2UgbmVlZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAiaSIuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0JKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2Uu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBPYmpjSW5zdGFuY2U6Om1v
dmVHbG9iYWxFeGNlcHRpb25UbwogICAgIH0KIAogICAgIGlmICghc19leGNlcHRpb25FbnZpcm9u
bWVudCB8fCBzX2V4Y2VwdGlvbkVudmlyb25tZW50ID09IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKSkgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBz
X2V4Y2VwdGlvbik7CiAgICAgfQogCkBAIC0yMzksNyArMjM5LDcgQEAgSlNWYWx1ZSBPYmpjSW5z
dGFuY2U6Omludm9rZU9iamNNZXRob2QoRQogewogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNVbmRl
ZmluZWQoKTsKICAgICAKLSAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNj
b3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRy
eSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAKICAgICBzZXRHbG9iYWxF
eGNlcHRpb24obmlsKTsKICAgICAKQEAgLTM1NCw3ICszNTQsNyBAQCBKU1ZhbHVlIE9iamNJbnN0
YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvCiB7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1VuZGVm
aW5lZCgpOwogCi0gICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBi
ZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2Nv
cGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogICAgIHNldEdsb2JhbEV4Y2VwdGlv
bihuaWwpOwogICAgIAogQHRyeSB7CkBAIC00MTEsNyArNDExLDcgQEAgYm9vbCBPYmpjSW5zdGFu
Y2U6OnNldFZhbHVlT2ZVbmRlZmluZWRGaQogICAgIGlmICghW3RhcmdldE9iamVjdCByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldFZhbHVlOmZvclVuZGVmaW5lZEtleTopXSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRy
eSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhl
IEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogCiAgICAgLy8gVGhp
cyBjaGVjayBpcyBub3QgcmVhbGx5IG5lY2Vzc2FyeSBiZWNhdXNlIE5TT2JqZWN0IGltcGxlbWVu
dHMKICAgICAvLyBzZXRWYWx1ZTpmb3JVbmRlZmluZWRLZXk6LCBhbmQgdW5mb3J0dW5hdGVseSB0
aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgpAQCAtNDQzLDcgKzQ0Myw3IEBAIEpTVmFsdWUgT2Jq
Y0luc3RhbmNlOjpnZXRWYWx1ZU9mVW5kZWZpbmUKICAgICAKICAgICBpZCB0YXJnZXRPYmplY3Qg
PSBnZXRPYmplY3QoKTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkg
c2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBA
dHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KIAogICAgIC8vIFRoaXMg
Y2hlY2sgaXMgbm90IHJlYWxseSBuZWNlc3NhcnkgYmVjYXVzZSBOU09iamVjdCBpbXBsZW1lbnRz
CiAgICAgLy8gdmFsdWVGb3JVbmRlZmluZWRLZXk6LCBhbmQgdW5mb3J0dW5hdGVseSB0aGUgZGVm
YXVsdCBpbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2Jq
Y19ydW50aW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfcnVudGltZS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdl
L29iamMvb2JqY19ydW50aW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxOSArOTIsMTggQEAg
SlNWYWx1ZSBPYmpjRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZQogICAgIAogICAgIGlkIHRh
cmdldE9iamVjdCA9IChzdGF0aWNfY2FzdDxjb25zdCBPYmpjSW5zdGFuY2UqPihpbnN0YW5jZSkp
LT5nZXRPYmplY3QoKTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkg
c2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBA
dHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KIAogICAgIEB0cnkgewog
ICAgICAgICBpZiAoaWQgb2JqY1ZhbHVlID0gW3RhcmdldE9iamVjdCB2YWx1ZUZvcktleTooTlNT
dHJpbmcgKilfbmFtZS5nZXQoKV0pCiAgICAgICAgICAgICByZXN1bHQgPSBjb252ZXJ0T2JqY1Zh
bHVlVG9WYWx1ZShleGVjLCAmb2JqY1ZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgaW5zdGFuY2UtPnJv
b3RPYmplY3QoKSk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICAgICAgICAgIE9iamNJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4
ZWMpOwogICAgICAgICB9CiAgICAgfSBAY2F0Y2goTlNFeGNlcHRpb24qIGxvY2FsRXhjZXB0aW9u
KSB7Ci0gICAgICAgIEpTTG9jazo6bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBbbG9j
YWxFeGNlcHRpb24gcmVhc29uXSk7Ci0gICAgICAgIEpTTG9jazo6dW5sb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CiAgICAgfQogCiAgICAgLy8gV29yayBhcm91bmQgcHJvYmxlbSBpbiBzb21l
IHZlcnNpb25zIG9mIEdDQyB3aGVyZSByZXN1bHQgZ2V0cyBtYXJrZWQgdm9sYXRpbGUgYW5kCkBA
IC0xMjUsMTggKzEyNCwxNyBAQCB2b2lkIE9iamNGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4
ZWNTCiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gKHN0YXRpY19jYXN0PGNvbnN0IE9iamNJbnN0YW5j
ZSo+KGluc3RhbmNlKSktPmdldE9iamVjdCgpOwogICAgIGlkIHZhbHVlID0gY29udmVydFZhbHVl
VG9PYmpjT2JqZWN0KGV4ZWMsIGFWYWx1ZSk7CiAKLSAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5z
aWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KKyAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENhbid0IHB1dCB0aGlz
IGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAK
ICAgICBAdHJ5IHsKICAgICAgICAgW3RhcmdldE9iamVjdCBzZXRWYWx1ZTp2YWx1ZSBmb3JLZXk6
KE5TU3RyaW5nICopX25hbWUuZ2V0KCldOwogICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgICAgICAgICBPYmpjSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25U
b0V4ZWNTdGF0ZShleGVjKTsKICAgICAgICAgfQogICAgIH0gQGNhdGNoKE5TRXhjZXB0aW9uKiBs
b2NhbEV4Y2VwdGlvbikgewotICAgICAgICBKU0xvY2s6OmxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHRocm93RXJy
b3IoZXhlYywgW2xvY2FsRXhjZXB0aW9uIHJlYXNvbl0pOwotICAgICAgICBKU0xvY2s6OnVubG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291
cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC04Niw3ICs4Niw3IEBAIE9iamNWYWx1ZSBjb252ZXJ0VmFsdWVUb09iamNWYWx1ZShFeGVjU3QK
IAogICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIE9iamNPYmplY3RUeXBlOiB7Ci0g
ICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEpT
R2xvYmFsT2JqZWN0ICpvcmlnaW5HbG9iYWxPYmplY3QgPSBleGVjLT5keW5hbWljR2xvYmFsT2Jq
ZWN0KCk7CiAgICAgICAgICAgICBSb290T2JqZWN0KiBvcmlnaW5Sb290T2JqZWN0ID0gZmluZFJv
b3RPYmplY3Qob3JpZ2luR2xvYmFsT2JqZWN0KTsKQEAgLTE0Niw3ICsxNDYsNyBAQCBPYmpjVmFs
dWUgY29udmVydFZhbHVlVG9PYmpjVmFsdWUoRXhlY1N0CiAKIEpTVmFsdWUgY29udmVydE5TU3Ry
aW5nVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBOU1N0cmluZyAqbnNzdHJpbmcpCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICAKICAgICB1bmljaGFyICpjaGFyczsKICAgICB1bnNpZ25lZCBpbnQgbGVu
Z3RoID0gW25zc3RyaW5nIGxlbmd0aF07CkBAIC0xNzgsNyArMTc4LDcgQEAgSlNWYWx1ZSBjb252
ZXJ0TlNTdHJpbmdUb1N0cmluZyhFeGVjU3RhdAogKi8KIEpTVmFsdWUgY29udmVydE9iamNWYWx1
ZVRvVmFsdWUoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBidWZmZXIsIE9iamNWYWx1ZVR5cGUgdHlw
ZSwgUm9vdE9iamVjdCogcm9vdE9iamVjdCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAogICAgIHN3
aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIE9iamNPYmplY3RUeXBlOiB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiSlNHbG9i
YWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5
cGUuaCIKQEAgLTkyLDcgKzkzLDcgQEAgUXRJbnN0YW5jZTo6UXRJbnN0YW5jZShRT2JqZWN0KiBv
LCBQYXNzUgogCiBRdEluc3RhbmNlOjp+UXRJbnN0YW5jZSgpCiB7Ci0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJDb3JlOjpK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIGNhY2hlZEluc3Rh
bmNlcy5yZW1vdmUobV9oYXNoa2V5KTsKIApAQCAtMTE5LDcgKzEyMCw3IEBAIFF0SW5zdGFuY2U6
On5RdEluc3RhbmNlKCkKIAogUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBRdEluc3RhbmNlOjpnZXRR
dEluc3RhbmNlKFFPYmplY3QqIG8sIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCwg
VmFsdWVPd25lcnNoaXAgb3duZXJzaGlwKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBmb3JlYWNoIChRdEluc3RhbmNlKiBp
bnN0YW5jZSwgY2FjaGVkSW5zdGFuY2VzLnZhbHVlcyhvKSkKICAgICAgICAgaWYgKGluc3RhbmNl
LT5yb290T2JqZWN0KCkgPT0gcm9vdE9iamVjdCkgewpAQCAtMTgwLDcgKzE4MSw3IEBAIENsYXNz
KiBRdEluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0CiAKIFJ1bnRpbWVPYmplY3QqIFF0SW5zdGFu
Y2U6Om5ld1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAg
ICAgbV9tZXRob2RzLmNsZWFyKCk7CiAgICAgcmV0dXJuIFF0UnVudGltZU9iamVjdDo6Y3JlYXRl
KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgdGhpcyk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCShyZXZpc2lvbiAx
MjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyMCw3ICs0MjAsNyBAQCBSdW50aW1lT2JqZWN0KiBRdFBpeG1h
cEluc3RhbmNlOjpuZXdSdW50CiAKIEpTT2JqZWN0KiBRdFBpeG1hcEluc3RhbmNlOjpjcmVhdGVQ
aXhtYXBSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxSb290T2JqZWN0
PiByb290LCBjb25zdCBRVmFyaWFudCYgZGF0YSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFJlZlB0
cjxRdFBpeG1hcEluc3RhbmNlPiBpbnN0YW5jZSA9IGFkb3B0UmVmKG5ldyBRdFBpeG1hcEluc3Rh
bmNlKHJvb3QsIGRhdGEpKTsKICAgICByZXR1cm4gaW5zdGFuY2UtPmNyZWF0ZVJ1bnRpbWVPYmpl
Y3QoZXhlYyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3Bw
CShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGlt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw3ICsyMzAsNyBAQCBRVmFyaWFudCBjb252ZXJ0
VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogICAg
IH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNSZWFsVHlwZSB0eXBlID0gdmFsdWVSZWFsVHlwZShl
eGVjLCB2YWx1ZSk7CiAgICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpWb2lkKSB7CiAgICAgICAg
IHN3aXRjaCh0eXBlKSB7CkBAIC04MjQsNyArODI0LDcgQEAgSlNWYWx1ZSBjb252ZXJ0UVZhcmlh
bnRUb1ZhbHVlKEV4ZWNTdGF0ZQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6Qm9vbCkKICAgICAgICAg
cmV0dXJuIGpzQm9vbGVhbih2YXJpYW50LnRvQm9vbCgpKTsKQEAgLTE0MjAsNyArMTQyMCw3IEBA
IEVuY29kZWRKU1ZhbHVlIFF0UnVudGltZU1ldGFNZXRob2Q6OmNhbGwKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIFdlIGhhdmUgdG8gcGlj
ayBhIG1ldGhvZCB0aGF0IG1hdGNoZXMuLgotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBRT2JqZWN0ICpv
YmogPSBkLT5tX2luc3RhbmNlLT5nZXRPYmplY3QoKTsKICAgICBpZiAob2JqKSB7CkBAIC0xNTYx
LDcgKzE1NjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kCiB7
CiAgICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERhdGEqIGQgPSBzdGF0aWNfY2FzdDxRdFJ1
bnRpbWVDb25uZWN0aW9uTWV0aG9kICo+KGV4ZWMtPmNhbGxlZSgpKS0+ZF9mdW5jKCk7CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogCiAgICAgUU9iamVjdCogc2VuZGVyID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2Jq
ZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lX3F0NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWVfcXQ0
LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1
bnRpbWVfcXQ0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDcgKzIzMCw3IEBAIFFWYXJpYW50
IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXQKICAgICAgICAgcmV0dXJuIFFWYXJpYW50
KCk7CiAgICAgfQogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1JlYWxUeXBlIHR5cGUgPSB2YWx1ZVJl
YWxUeXBlKGV4ZWMsIHZhbHVlKTsKICAgICBpZiAoaGludCA9PSBRTWV0YVR5cGU6OlZvaWQpIHsK
ICAgICAgICAgc3dpdGNoKHR5cGUpIHsKQEAgLTgyNCw3ICs4MjQsNyBAQCBKU1ZhbHVlIGNvbnZl
cnRRVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAg
ICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpCb29sKQog
ICAgICAgICByZXR1cm4ganNCb29sZWFuKHZhcmlhbnQudG9Cb29sKCkpOwpAQCAtMTQyOSw3ICsx
NDI5LDcgQEAgRW5jb2RlZEpTVmFsdWUgUXRSdW50aW1lTWV0YU1ldGhvZDo6Y2FsbAogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gV2UgaGF2
ZSB0byBwaWNrIGEgbWV0aG9kIHRoYXQgbWF0Y2hlcy4uCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIFFP
YmplY3QgKm9iaiA9IGQtPm1faW5zdGFuY2UtPmdldE9iamVjdCgpOwogICAgIGlmIChvYmopIHsK
QEAgLTE1NzAsNyArMTU3MCw3IEBAIEVuY29kZWRKU1ZhbHVlIFF0UnVudGltZUNvbm5lY3Rpb25N
ZXRob2QKIHsKICAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSogZCA9IHN0YXRpY19j
YXN0PFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QgKj4oZXhlYy0+Y2FsbGVlKCkpLT5kX2Z1bmMo
KTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBRT2JqZWN0KiBzZW5kZXIgPSBkLT5tX2luc3RhbmNl
LT5nZXRPYmplY3QoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTEsNyArNTUxLDcgQEAgdm9pZCBI
VE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZQogICAgIG1fY29udGV4dFN0YXRlU2F2
ZXIgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcigqbV9pbWFnZUJ1ZmZl
ci0+Y29udGV4dCgpKSk7CiAKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2NrIGxvY2soSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5nbG9iYWxEYXRhKCkpOwogICAgIHNpemVfdCBudW1CeXRl
cyA9IDQgKiBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKS53aWR0aCgpICogbV9pbWFnZUJ1
ZmZlci0+aW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7CiAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5nbG9iYWxEYXRhKCktPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KG51bUJ5dGVzKTsK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcAkocmV2
aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MSw4ICs4MSw4IEBAIHZvaWQgSFRNTEltYWdlTG9hZGVyOjpu
b3RpZnlGaW5pc2hlZChDYWMKICNpZiBVU0UoSlNDKQogICAgIGlmICghbG9hZEVycm9yKSB7CiAg
ICAgICAgIGlmICghZWxlbS0+aW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9j
ayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgICAgIEpTQzo6SlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSk7CiAg
ICAgICAgICAgICBnbG9iYWxEYXRhLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChjYWNoZWRJ
bWFnZS0+ZW5jb2RlZFNpemUoKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw3ICsyNDAs
NyBAQCBib29sIFBsdWdpblZpZXc6OnN0YXJ0KCkKICAgICB7CiAgICAgICAgIFBsdWdpblZpZXc6
OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgc2V0
Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+bmV3cCgoTlBNSU1FVHlwZSltX21pbWVUeXBlLnV0ZjgoKS5kYXRhKCksIG1faW5zdGFu
Y2UsIG1fbW9kZSwgbV9wYXJhbUNvdW50LCBtX3BhcmFtTmFtZXMsIG1fcGFyYW1WYWx1ZXMsIE5V
TEwpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c3RvcCgpCiAgICAgbV9p
c1N0YXJ0ZWQgPSBmYWxzZTsKIAogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKQEAgLTQ0Niw3ICs0NDYsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0
KFBsdWdpblJlCiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpKSB7
CiAgICAgICAgICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7
CiAjaWYgVVNFKEpTQykKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICBzZXRDYWxs
aW5nUGx1Z2luKHRydWUpOwogICAgICAgICAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT51cmxub3RpZnkobV9pbnN0YW5jZSwgcmVxdWVzdFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCBOUFJFU19ET05FLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOwpAQCAtNzM2LDcgKzczNiw3IEBA
IE5QT2JqZWN0KiBQbHVnaW5WaWV3OjpucE9iamVjdCgpCiAgICAgewogICAgICAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKICNpZiBVU0UoSlNDKQotICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgICAg
IHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmpl
Y3QsICZvYmplY3QpOwpAQCAtMTQ5Miw3ICsxNDkyLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpwcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYQogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZp
ZXcodGhpcyk7CiAjaWYgVVNFKEpTQykKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAjZW5kaWYKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIE5QQm9v
bCB2YWx1ZSA9IHByaXZhdGVCcm93c2luZ0VuYWJsZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3QmxhY2tCZXJyeS5j
cHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJy
eS9QbHVnaW5WaWV3QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMyw3ICs0MDMs
NyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxs
aW5nUGx1Z2luKHRydWUpOwogCiAgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpAQCAtOTcwLDcgKzk3MCw3IEBAIHZv
aWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgICAgICgoTlBTZXRXaW5k
b3dDYWxsYmFja1N0cnVjdCopbV9ucFdpbmRvdy53c19pbmZvKS0+d2luZG93R3JvdXAgPSB3aW5k
b3ctPndpbmRvd0dyb3VwKCk7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmll
dyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIC8vIEZJWE1FOiBQYXNzaW5nIHpvb21GYWN0
b3IgdG8gc2V0d2luZG93IG1ha2Ugd2luZG93ZWQgcGx1Z2luIHNjYWxlIGluY29ycmVjdGx5LgpA
QCAtMTIyMCw3ICsxMjIwLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKIAog
ICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsKICAgICAgICAgUGx1
Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4o
dHJ1ZSk7CiAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3Rh
bmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKICAgICAgICAgc2V0
Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBAIC0xMzAxLDcgKzEzMDEsNyBAQCB2b2lkIFBsdWdpblZp
ZXc6OmdldFdpbmRvd0luZm8oVmVjdG9yPFBsCiAgICAgdm9pZCogdmFsUHRyID0gMDsKIAogICAg
IFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwog
ICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1
Z2luU2NyZWVuV2luZG93LCAmdmFsUHRyKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3
RWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBib29sIFBsdWdpblZpZXc6
OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogCiAgICAgYm9vbCBhY2NlcHRlZCA9IG1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNw
YXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJv
b2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2Us
ICZldmVudCk7CkBAIC0yNzYsNyArMjc2LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFw
aGljc0NvbnRleHQqIAogCiB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5
Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOwogCiAgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHkpCiAgICAgICAgIHJldHVybjsKQEAgLTQwNiw3ICs0MDYsNyBA
QCBzdGF0aWMgdm9pZCBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmljRmllCiAKIHZvaWQgUGx1Z2lu
Vmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKIHsKLSAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBpZiAoIW1faXNTdGFydGVkIHx8
IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNTM1LDcgKzUzNSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5l
ZWRlZCgpCiAgICAgfQogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhp
cyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNldENh
bGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRv
dyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7
CkBAIC04NDIsNyArODQyLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKICNp
ZiBkZWZpbmVkKFhQX1VOSVgpCiAgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2
YWx1ZSkgewogICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsK
LSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAg
ICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVlZHNY
RW1iZWQpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbQkocmV2aXNpb24gMTIwOTI2KQor
KysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNDI2LDcgKzQyNiw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5l
ZWRlZCgpCiAgICAgICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0IC0gbV9ucFdpbmRv
dy5jbGlwUmVjdC5sZWZ0LCBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSAtIG1fbnBXaW5kb3cu
Y2xpcFJlY3QudG9wKTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRo
aXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRD
YWxsaW5nUGx1Z2luKHRydWUpOwogICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5k
b3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2Up
OwpAQCAtNzcyLDcgKzc3Miw3IEBAIFBvaW50IFBsdWdpblZpZXc6Om1vdXNlUG9zRm9yUGx1Z2lu
KE1vdXMKIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIGV2ZW50KQog
ewogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRy
dWUpOwogCiAgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVu
dChtX2luc3RhbmNlLCAmZXZlbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9xdC9Q
bHVnaW5WaWV3UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQv
UGx1Z2luVmlld1F0LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzMsNyArMzczLDcg
QEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogCiAgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAjaWYgVVNFKEpTQykKLSAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICBzZXRDYWxsaW5n
UGx1Z2luKHRydWUpOwogICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CkBAIC02ODcsNyArNjg3LDcgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKIAogICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVl
KTsKICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZt
X25wV2luZG93KTsKQEAgLTk0OSw3ICs5NDksNyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3Jt
U3RhcnQoKQogICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsKICAg
ICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAjaWYgVVNFKEpT
QykKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICNl
bmRpZgogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVk
LCAmbV9uZWVkc1hFbWJlZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVn
aW5WaWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9Q
bHVnaW5WaWV3V2luLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvcGx1
Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyNiw3ICs1MjYs
NyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAgICAgICAgIHNo
b3VsZFBvcCA9IHRydWU7CiAgICAgfQogCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgYm9vbCBhY2NlcHRl
ZCA9ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQp
OwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtNjc3LDcgKzY3Nyw3IEBAIHZvaWQg
UGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXkKICAgICB9IGVsc2UKICAgICAgICAg
cmV0dXJuOwogCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
IGlmIChkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOwogfQpAQCAtNzQ3LDcgKzc0Nyw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
TW91c2VFdmVudChNb3VzZUUKICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIC8vIEZJWE1FOiBDb25zaWRl
ciBiYWNrIHBvcnRpbmcgdGhlIGh0dHA6Ly93ZWJraXQub3JnL2IvNTgxMDggZml4IGhlcmUuCiAg
ICAgaWYgKGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7CkBAIC04MzUsNyArODM1LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdp
bmRvd1JlY3QoY29uc3QgSQogICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKIAogICAg
IGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7Ci0gICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7CiAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3co
bV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3Vw
cG9ydC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMv
V2ViQ29yZVRlc3RTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZVRlc3RTdXBwb3J0IHsKIAogdm9pZCBpbmplY3RJbnRlcm5hbHNPYmpl
Y3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnbG9iYWxP
YmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBzY3JpcHRDb250ZXh0LT5pc0RvY3VtZW50KCkgPyBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHNj
cmlwdENvbnRleHQpIDogMDsKQEAgLTQ5LDggKzQ5LDggQEAgdm9pZCBpbmplY3RJbnRlcm5hbHNP
YmplY3QoSlNDb250ZXh0UmVmIAogCiB2b2lkIHJlc2V0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4
dFJlZiBjb250ZXh0KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBJ
bnRlcm5hbHMgKiBpbnRlcm5hbHMgPSB0b0ludGVybmFscyhnbG9iYWxPYmplY3QtPmdldERpcmVj
dChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgSW50ZXJuYWxzOjppbnRlcm5h
bHNJZCkpKTsKICAgICBpZiAoaW50ZXJuYWxzKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1MSw4ICs4NTEsOCBAQCB2b2lk
IFhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbigpCiAgICAgLy8gb3V0LiBCdXQgaXQgaXMg
cHJvdGVjdGVkIGZyb20gR0Mgd2hpbGUgbG9hZGluZywgc28gdGhpcwogICAgIC8vIGNhbid0IGJl
IHJlY291cGVkIHVudGlsIHRoZSBsb2FkIGlzIGRvbmUsIHNvIG9ubHkKICAgICAvLyByZXBvcnQg
dGhlIGV4dHJhIGNvc3QgYXQgdGhhdCBwb2ludC4KLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpOworICAgIEpTQzo6SlNM
b2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSk7CiAgICAgZ2xvYmFsRGF0YS0+aGVhcC5yZXBvcnRF
eHRyYU1lbW9yeUNvc3QobV9yZXNwb25zZUJ1aWxkZXIubGVuZ3RoKCkgKiAyKTsKICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAxMi0wNi0yMCAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91
bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3Rl
YWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3Jy
ZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRo
YXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBTaGFyZWQvbWFjL1dl
Yk1lbW9yeVNhbXBsZXIubWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlTYW1wbGVy
OjpzYW1wbGVXZWJLaXQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6amF2YVNj
cmlwdE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpyZXBv
cnRFeGNlcHRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05Q
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Y2FsbE1ldGhvZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxPYmplY3QpOgorICAgICAgICAoV2ViS2l0
OjpKU05QT2JqZWN0OjpjYWxsQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2Jq
ZWN0OjpwdXQpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoV2ViS2l0OjpKU05QT2JqZWN0Ojpwcm9wZXJ0eUdldHRlcik6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOUEpTT2JqZWN0OjpoYXNNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0Ojpp
bnZva2UpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjppbnZva2VEZWZhdWx0KToKKyAg
ICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aGFzUHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0
OjpOUEpTT2JqZWN0OjpnZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6
OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6cmVtb3ZlUHJvcGVy
dHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjplbnVtZXJhdGUpOgorICAgICAgICAo
V2ViS2l0OjpOUEpTT2JqZWN0Ojpjb25zdHJ1Y3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
UFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQpOgorICAgICAgICAo
V2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYktpdDo6
TlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lOjpqc1dyYXBwZXJGb3JXb3JsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
Ojpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8pOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cnVuSmF2
YVNjcmlwdEluTWFpbkZyYW1lKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpnZXRXZWJDb3JlU3RhdGlzdGljcyk6CisK
IDIwMTItMDYtMjEgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAg
ICAgIFtFRkxbV0syXSBBZGQgV0tWaWV3RWZsIGFuZCBXZWJLaXQyIEFQSSBPYmplY3QgdG8gcmVw
cmVzZW50IEV2YXNfT2JqZWN0LgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJN
ZW1vcnlTYW1wbGVyLm1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTYsNyArMTE2LDcgQEAgV2ViTWVtb3J5U3RhdGlzdGljcyBXZWJNZW1vcnlTYW1wbGVy
OjpzYQogICAgIHRvdGFsQnl0ZXNJblVzZSArPSBmYXN0TWFsbG9jQnl0ZXNJblVzZTsKICAgICB0
b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGZhc3RNYWxsb2NCeXRlc0NvbW1pdHRlZDsKICAgICAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2l6ZV90IGpzY0hl
YXBCeXRlc0luVXNlID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnNp
emUoKTsKICAgICBzaXplX3QganNjSGVhcEJ5dGVzQ29tbWl0dGVkID0gSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNhcGFjaXR5KCk7CiAgICAgdG90YWxCeXRlc0luVXNl
ICs9IGpzY0hlYXBCeXRlc0luVXNlOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjAsNyArOTIwLDcgQEAgdm9p
ZCBXZWJQcm9jZXNzOjpnZXRXZWJDb3JlU3RhdGlzdGljcyh1aQogICAgIAogICAgIC8vIEdhdGhl
ciBKYXZhU2NyaXB0IHN0YXRpc3RpY3MuCiAgICAgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJz
LnNldCgiSmF2YVNjcmlwdE9iamVjdHNDb3VudCIsIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgpKTsKICAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVt
YmVycy5zZXQoIkphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKSk7CiAgICAgICAgIGRh
dGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50
IiwgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVj
dENvdW50KCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDksNyArNDA5LDcgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZTo6Z2FyYmFnZUNvbGxlY3RKYXZhUwogCiBzaXplX3QgSW5qZWN0ZWRCdW5kbGU6OmphdmFT
Y3JpcHRPYmplY3RzQ291bnQoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5o
ZWFwLm9iamVjdENvdW50KCk7CiB9CiAKQEAgLTQxOCw4ICs0MTgsOCBAQCB2b2lkIEluamVjdGVk
QnVuZGxlOjpyZXBvcnRFeGNlcHRpb24oSlNDCiAgICAgaWYgKCFjb250ZXh0IHx8ICFleGNlcHRp
b24pCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlY1N0YXRlID0gdG9KUyhjb250ZXh0
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjU3RhdGUpOwogCiAgICAgLy8gTWFrZSBzdXJl
IHRoZSBjb250ZXh0IGhhcyBhIERPTVdpbmRvdyBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgdGhp
cyBjb250ZXh0IGRpZG4ndCBvcmlnaW5hdGUgZnJvbSBhIFBhZ2UuCiAgICAgaWYgKCF0b0pTRE9N
V2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9i
amVjdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiAr
MzcsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL09iamVjdFByb3RvdHlwZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSWRlbnRp
ZmllclJlcC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNET01XaW5kb3dCYXNlLmg+CiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApA
QCAtMTI1LDcgKzEyNiw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbE1ldGhvZChFeGVjU3Rh
dGUKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwogICAgIAogICAgIHsKLSAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2Jq
ZWN0LT5fY2xhc3MtPmludm9rZShtX25wT2JqZWN0LCBtZXRob2ROYW1lLCBhcmd1bWVudHMuZGF0
YSgpLCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFw
Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgfQpAQCAtMTY1LDcg
KzE2Niw3IEBAIEpTQzo6SlNWYWx1ZSBKU05QT2JqZWN0OjpjYWxsT2JqZWN0KEpTQzoKICAgICBW
T0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fbnBPYmplY3QtPl9jbGFzcy0+
aW52b2tlRGVmYXVsdChtX25wT2JqZWN0LCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50
LCAmcmVzdWx0KTsKICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0
aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgfQpAQCAtMjA1LDcgKzIwNiw3IEBAIEpTVmFsdWUg
SlNOUE9iamVjdDo6Y2FsbENvbnN0cnVjdG9yKEV4ZWMKICAgICBWT0lEX1RPX05QVkFSSUFOVChy
ZXN1bHQpOwogICAgIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdChtX25w
T2JqZWN0LCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKICAgICAg
ICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhl
Yyk7CiAgICAgfQpAQCAtMzQwLDcgKzM0MSw3IEBAIHZvaWQgSlNOUE9iamVjdDo6cHV0KEpTQ2Vs
bCogY2VsbCwgRXhlY1MKICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBw
cm90ZWN0b3IodGhpc09iamVjdC0+bV9vYmplY3RNYXApOwogCiAgICAgewotICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICB0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5f
Y2xhc3MtPnNldFByb3BlcnR5KHRoaXNPYmplY3QtPm1fbnBPYmplY3QsIG5wSWRlbnRpZmllciwg
JnZhcmlhbnQpOwogCiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2Vw
dGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpAQCAtMzgwLDcgKzM4MSw3IEBAIGJvb2wgSlNOUE9iamVj
dDo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXQKICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdp
blByb3RlY3RvciBwcm90ZWN0b3IobV9vYmplY3RNYXApOwogCiAgICAgewotICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdGhy
b3cgYW4gZXhjZXB0aW9uIGlmIHJlbW92ZVByb3BlcnR5IHJldHVybnMgZmFsc2U/CiAgICAgICAg
IGlmICghbV9ucE9iamVjdC0+X2NsYXNzLT5yZW1vdmVQcm9wZXJ0eShtX25wT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUpKQpAQCAtNDEzLDcgKzQxNCw3IEBAIHZvaWQgSlNOUE9iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU08KICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBw
cm90ZWN0b3IodGhpc09iamVjdC0+bV9vYmplY3RNYXApOwogICAgIAogICAgIHsKLSAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdl
IHRocm93IGFuIGV4Y2VwdGlvbiBpZiBlbnVtZXJhdGUgcmV0dXJucyBmYWxzZT8KICAgICAgICAg
aWYgKCF0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPmVudW1lcmF0ZSh0aGlzT2JqZWN0
LT5tX25wT2JqZWN0LCAmaWRlbnRpZmllcnMsICZpZGVudGlmaWVyQ291bnQpKQpAQCAtNDYxLDcg
KzQ2Miw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6cHJvcGVydHlHZXR0ZXIoRXhlY1MKICAgICAK
ICAgICBib29sIHJldHVyblZhbHVlOwogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICAgICAgTlBJZGVudGlmaWVyIG5wSWRlbnRpZmllciA9IG5wSWRlbnRpZmll
ckZyb21JZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gdGhp
c09iai0+bV9ucE9iamVjdC0+X2NsYXNzLT5nZXRQcm9wZXJ0eSh0aGlzT2JqLT5tX25wT2JqZWN0
LCBucElkZW50aWZpZXIsICZyZXN1bHQpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5j
cHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBA
QCBib29sIE5QSlNPYmplY3Q6Omhhc01ldGhvZChOUElkZW50aWZpZXIgCiAgICAgaWYgKCFleGVj
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG1fanNPYmplY3QtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAo
ZXhlYywgaWRlbnRpZmllclJlcCkpOyAgICAKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwpA
QCAtMTE5LDcgKzExOSw3IEBAIGJvb2wgTlBKU09iamVjdDo6aW52b2tlKE5QSWRlbnRpZmllciBt
ZXQKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG1fanNPYmplY3QtPmdldChleGVjLCBpZGVu
dGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoZXhlYywgaWRlbnRpZmllclJlcCkpOwogICAgIHJldHVy
biBpbnZva2UoZXhlYywgbV9vYmplY3RNYXAtPmdsb2JhbE9iamVjdCgpLCBmdW5jdGlvbiwgYXJn
dW1lbnRzLCBhcmd1bWVudENvdW50LCByZXN1bHQpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIGJvb2wg
TlBKU09iamVjdDo6aW52b2tlRGVmYXVsdChjb25zdCBOUFYKICAgICBpZiAoIWV4ZWMpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU1ZhbHVlIGZ1bmN0aW9u
ID0gbV9qc09iamVjdC5nZXQoKTsKICAgICByZXR1cm4gaW52b2tlKGV4ZWMsIG1fb2JqZWN0TWFw
LT5nbG9iYWxPYmplY3QoKSwgZnVuY3Rpb24sIGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVz
dWx0KTsKQEAgLTE0NSw3ICsxNDUsNyBAQCBib29sIE5QSlNPYmplY3Q6Omhhc1Byb3BlcnR5KE5Q
SWRlbnRpZmllCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIGJvb2wgcmVzdWx0OwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5p
c1N0cmluZygpKQpAQCAtMTY1LDcgKzE2NSw3IEBAIGJvb2wgTlBKU09iamVjdDo6Z2V0UHJvcGVy
dHkoTlBJZGVudGlmaWUKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgSlNWYWx1ZSBqc1Jlc3VsdDsKICAgICBpZiAoaWRlbnRpZmllclJl
cC0+aXNTdHJpbmcoKSkKICAgICAgICAganNSZXN1bHQgPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywg
aWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApKTsKQEAgLTE4
NSw3ICsxODUsNyBAQCBib29sIE5QSlNPYmplY3Q6OnNldFByb3BlcnR5KE5QSWRlbnRpZmllCiAg
ICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIEpTVmFsdWUganNWYWx1ZSA9IG1fb2JqZWN0TWFwLT5jb252ZXJ0TlBWYXJpYW50VG9K
U1ZhbHVlKGV4ZWMsIG1fb2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKSwgKnZhbHVlKTsKICAgICBp
ZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkgewpAQCAtMjA2LDcgKzIwNiw3IEBAIGJvb2wg
TlBKU09iamVjdDo6cmVtb3ZlUHJvcGVydHkoTlBJZGVudGkKICAgICBpZiAoIWV4ZWMpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgaWYgKGlkZW50aWZpZXJSZXAt
PmlzU3RyaW5nKCkpIHsKICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gaWRlbnRpZmll
ckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApOwogICAgICAgICAKQEAgLTIz
NSw3ICsyMzUsNyBAQCBib29sIE5QSlNPYmplY3Q6OmVudW1lcmF0ZShOUElkZW50aWZpZXIqCiAg
ICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CiAgICAgbV9qc09i
amVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyhtX2pzT2JqZWN0LmdldCgpLCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKQEAgLTI1Nyw3
ICsyNTcsNyBAQCBib29sIE5QSlNPYmplY3Q6OmNvbnN0cnVjdChjb25zdCBOUFZhcmlhCiAgICAg
aWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAg
Q29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0
VHlwZSA9IGdldENvbnN0cnVjdERhdGEobV9qc09iamVjdC5nZXQoKSwgY29uc3RydWN0RGF0YSk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50
aW1lT2JqZWN0TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkocmV2aXNpb24gMTIwOTI2
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGlt
ZU9iamVjdE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBKU1ZhbHVl
IE5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydE5QVmFyCiAKIHZvaWQgTlBSdW50aW1lT2JqZWN0
TWFwOjpjb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2
YWx1ZSwgTlBWYXJpYW50JiB2YXJpYW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBWT0lEX1RP
X05QVkFSSUFOVCh2YXJpYW50KTsKICAgICAKQEAgLTE4Niw3ICsxODYsNyBAQCBib29sIE5QUnVu
dGltZU9iamVjdE1hcDo6ZXZhbHVhdGUoTlBPYmplCiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZ2V0T3JDcmVhdGVKU09iamVjdChnbG9iYWxPYmplY3QuZ2V0KCksIG5w
T2JqZWN0KTsKIAogICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2Vy
LnN0YXJ0KCk7CkBAIC0yNjYsNyArMjY2LDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6Om1v
dmVHbG9iYWxFeGNlcAogICAgICAgICByZXR1cm47CiAKICAgICB7Ci0gICAgICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIHN0cmluZ1Rv
VVN0cmluZyhnbG9iYWxFeGNlcHRpb25TdHJpbmcoKSkpKTsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Miw3ICs2NDIsNyBAQCBKU1ZhbHVlUmVmIFdlYkZy
YW1lOjpqc1dyYXBwZXJGb3JXb3JsZChJCiAgICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9
IG1fY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHdvcmxkLT5jb3JlV29ybGQoKSk7
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogICAgIHJldHVybiB0b1JlZihleGVjLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgbm9kZUhhbmRsZS0+Y29yZU5vZGUoKSkpOwogfQogCkBAIC02NTQsNyArNjU0LDcgQEAgSlNW
YWx1ZVJlZiBXZWJGcmFtZTo6anNXcmFwcGVyRm9yV29ybGQoSQogICAgIEpTRE9NV2luZG93KiBn
bG9iYWxPYmplY3QgPSBtX2NvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCh3b3JsZC0+
Y29yZVdvcmxkKCkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICByZXR1cm4gdG9SZWYoZXhlYywgdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHJhbmdlSGFuZGxlLT5jb3JlUmFuZ2UoKSkpOwogfQogCkBAIC02NzEs
NyArNjcxLDcgQEAgSlNWYWx1ZVJlZiBXZWJGcmFtZTo6Y29tcHV0ZWRTdHlsZUluY2x1ZAogCiAg
ICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZShzdGF0aWNfY2FzdDxKU0VsZW1lbnQqPih0b0pTKGVs
ZW1lbnQpKS0+aW1wbCgpLCB0cnVlKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgcmV0dXJuIHRvUmVm
KGV4ZWMsIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHlsZS5nZXQoKSkpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZp
c2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MTUsNyArMTgxNSw3IEBAIHZvaWQgV2ViUGFnZTo6
cnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKGMKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBzZXJpYWxpemVkUmVzdWx0VmFsdWU7CiAgICAgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSBk
YXRhUmVmZXJlbmNlOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwogICAgIGlmIChKU1ZhbHVlIHJlc3VsdFZhbHVlID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgp
LT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChzY3JpcHQsIHRydWUpLmpzVmFsdWUoKSkgewogICAg
ICAgICBpZiAoKHNlcmlhbGl6ZWRSZXN1bHRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKG1fbWFpbkZyYW1lLT5qc0NvbnRleHQoKSwgdG9SZWYobV9tYWluRnJhbWUtPmNvcmVG
cmFtZSgpLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+
Z2xvYmFsRXhlYygpLCByZXN1bHRWYWx1ZSksIDApKSkKICAgICAgICAgICAgIGRhdGFSZWZlcmVu
Y2UgPSBzZXJpYWxpemVkUmVzdWx0VmFsdWUtPmRhdGEoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA2LTIw
ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNM
b2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sg
dG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4g
dGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0
IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIEFwaS9C
bGFja0JlcnJ5R2xvYmFsLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6Y2xlYXJN
ZW1vcnlDYWNoZXMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5j
cHA6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlUG9wdXBCbGFja0JlcnJ5OjppbnN0YWxsRG9tRnVuY3Rpb24p
OgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0LmNwcDoKKyAg
ICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0
ZWRJbmZvKToKKwogMjAxMi0wNi0yMSAgTWlrZSBGZW50b24gIDxtaWZlbnRvbkByaW0uY29tPgog
CiAgICAgICAgIFtCbGFja0JlcnJ5XSBJbnB1dCBtb2RlIHNob3VsZCBhZGFwdCBhdXRvbWF0aWNh
bGx5IHRvIHNldHRpbmdzIGNoYW5nZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9B
cGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9CbGFja0JlcnJ5R2xvYmFsLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CbGFja0JlcnJ5R2xvYmFsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA1LDcgKzEwNSwxMCBAQCB2b2lkIGNsZWFyTWVtb3J5Q2FjaGVzKCkKICAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6dXNlckludGVyZmFjZVRocmVhZE1lc3NhZ2VDbGllbnQoKS0+
ZGlzcGF0Y2hNZXNzYWdlKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpjcmVhdGVGdW5jdGlvbkNhbGxN
ZXNzYWdlKGNsZWFyTWVtb3J5Q2FjaGVzSW5Db21wb3NpdGluZ1RocmVhZCkpOwogI2VuZGlmCiAK
LSAgICBjb2xsZWN0SmF2YXNjcmlwdEdhcmJhZ2VOb3coKTsKKyAgICB7CisgICAgICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgY29sbGVjdEphdmFzY3JpcHRHYXJiYWdlTm93KCk7CisgICAgfQogCiAgICAgLy8gQ2xl
YW4gY2FjaGVzIGFmdGVyIEpTIGdhcmJhZ2UgY29sbGVjdGlvbiBiZWNhdXNlIEpTIEdDIGNhbgog
ICAgIC8vIGdlbmVyYXRlIG1vcmUgZGVhZCByZXNvdXJjZXMuCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ2xpZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ2xpZW50RXh0ZW5z
aW9uLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDEx
ICs4NCwxMSBAQCBzdGF0aWMgSlNTdGF0aWNWYWx1ZSBjbGllbnRFeHRlbnNpb25TdGF0CiAvLyBG
SVhNRTogUmV2aXNpdCB0aGUgY3JlYXRpb24gb2YgdGhpcyBjbGFzcyBhbmQgbWFrZSBzdXJlIHRo
aXMgaXMgdGhlIGJlc3Qgd2F5IHRvIGFwcHJvYWNoIGl0Lgogdm9pZCBhdHRhY2hFeHRlbnNpb25P
YmplY3RUb0ZyYW1lKEZyYW1lKiBmcmFtZSwgV2ViUGFnZUNsaWVudCogY2xpZW50KQogewotICAg
IEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAgSlNE
T01XaW5kb3cqIHdpbmRvdyA9IGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwobWFpblRocmVh
ZE5vcm1hbFdvcmxkKCkpLT53aW5kb3coKTsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0g
d2luZG93LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
KwogICAgIEpTQ29udGV4dFJlZiBzY3JpcHRDdHggPSB0b1JlZihleGVjKTsKIAogICAgIEpTQ2xh
c3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9QYWdlUG9wdXBCbGFja0Jl
cnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1
cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9QYWdlUG9wdXBCbGFja0JlcnJ5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDEzICsxMjIsMTIgQEAgc3RhdGljIEpTU3RhdGljVmFs
dWUgcG9wVXBFeHRlbnNpb25TdGF0aQogCiB2b2lkIFBhZ2VQb3B1cEJsYWNrQmVycnk6Omluc3Rh
bGxEb21GdW5jdGlvbihGcmFtZSogZnJhbWUpCiB7Ci0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9K
U0RPTVdpbmRvdyhmcmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogICAgIEFTU0VSVCh3
aW5kb3cpOwogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMo
KTsKICAgICBBU1NFUlQoZXhlYyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gOjp0b1JlZihleGVjKTsKICAgICBKU09iamVj
dFJlZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJL
aXRTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCB2b2lkIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydDo6c2NhbGVQYWdlQnkoCiAKIEpTVmFsdWVSZWYgRHVtcFJlbmRlclRyZWVT
dXBwb3J0Ojpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pT
KGV4ZWMsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5
IEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRo
YXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAg
ICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFi
b3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKwor
ICAgICAgICAqIGV3ay9ld2tfZnJhbWUuY3BwOgorICAgICAgICAoZXdrX2ZyYW1lX3NjcmlwdF9l
eGVjdXRlKToKKyAgICAgICAgKiBld2svZXdrX3ZpZXcuY3BwOgorICAgICAgICAoZXdrX3ZpZXdf
anNfb2JqZWN0X2FkZCk6CisKIDIwMTItMDYtMTkgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmls
bGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgQ2FsbGluZyBuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpIGNhdXNlcyBhc3NlcnRpb24gZmFpbHVyZTogbV92ZXJpZmllci5pc1NhZmVUb1VzZSgp
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAkocmV2aXNpb24gMTIwOTI2KQor
KysgU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1NSw4ICs0NTUsOCBAQCBjaGFyKiBld2tfZnJhbWVfc2NyaXB0X2V4ZWN1dGUoRXZhc19PYmpl
CiAgICAgaWYgKCFyZXN1bHQgfHwgKCFyZXN1bHQuaXNCb29sZWFuKCkgJiYgIXJlc3VsdC5pc1N0
cmluZygpICYmICFyZXN1bHQuaXNOdW1iZXIoKSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
SlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpF
eGVjU3RhdGUqIGV4ZWMgPSBzbWFydERhdGEtPmZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0
KFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgcmVzdWx0U3RyaW5nID0gV2ViQ29yZTo6
dXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAg
IHJldHVybiBzdHJkdXAocmVzdWx0U3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwogI2Vsc2UKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA0NSw4ICs0
MDQ1LDggQEAgRWluYV9Cb29sIGV3a192aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYgogICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBmYWxzZSk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgZmFsc2UpOwogCi0g
ICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgV2Vi
Q29yZTo6SlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3cocHJpdi0+bWFpbkZyYW1l
LCBXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9jayh3aW5kb3ctPmdsb2JhbEV4ZWMoKSk7CiAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9i
amVjdCogcm9vdDsKICAgICByb290ID0gcHJpdi0+bWFpbkZyYW1lLT5zY3JpcHQoKS0+YmluZGlu
Z1Jvb3RPYmplY3QoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQor
KysgU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMTItMDYtMjAgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNv
bT4KKworICAgICAgICBKU0xvY2sgc2hvdWxkIGJlIHBlci1KU0dsb2JhbERhdGEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MTIzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBhbGwgc2l0ZXMg
dGhhdCB1c2VkIEpTTG9jayB0byBpbnN0ZWFkIHVzZSB0aGUgbmV3IEpTTG9ja0hvbGRlcgorICAg
ICAgICBhbmQgcGFzcyBpbiB0aGUgY29ycmVjdCBKUyBjb250ZXh0IHRoYXQgdGhlIGNvZGUgaXMg
YWJvdXQgdG8gaW50ZXJhY3Qgd2l0aCB0aGF0IAorICAgICAgICBuZWVkcyBwcm90ZWN0aW9uLgor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcDoK
KyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2NDb3VudEphdmFzY3JpcHRPYmpl
Y3RzKToKKwogMjAxMi0wNi0yMSAgRGFuaWVsIERyYWtlICA8ZHNkQGxhcHRvcC5vcmc+CiAKICAg
ICAgICAgW0dUS10gQmFja3BvcnQgcnVuLWZpbGUtY2hvb3NlciB0byBXZWJLaXQxCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwMCw3ICs2MDAsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
azo6Z2NDb2xsZWN0CiAKIHVuc2lnbmVkIGxvbmcgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpn
Y0NvdW50SmF2YXNjcmlwdE9iamVjdHMoKQogewotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5l
bmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBi
ZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1
c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3Qg
SlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAK
KyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIERPTS9XZWJET01PcGVyYXRp
b25zLm1tOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNz
Lm1tOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0c0NvdW50
XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRHbG9iYWxPYmplY3Rz
Q291bnRdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3Rl
ZE9iamVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0
UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0
aWNzIGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgrW1dl
YkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgr
W1dlYkNvcmVTdGF0aXN0aWNzIHNob3VsZFByaW50RXhjZXB0aW9uc10pOgorICAgICAgICAoK1tX
ZWJDb3JlU3RhdGlzdGljcyBzZXRTaG91bGRQcmludEV4Y2VwdGlvbnM6XSk6CisgICAgICAgICgr
W1dlYkNvcmVTdGF0aXN0aWNzIG1lbW9yeVN0YXRpc3RpY3NdKToKKyAgICAgICAgKCtbV2ViQ29y
ZVN0YXRpc3RpY3MgamF2YVNjcmlwdFJlZmVyZW5jZWRPYmplY3RzQ291bnRdKToKKyAgICAgICAg
KiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06CisgICAgICAg
IChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlRGVmYXVsdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y29uc3RydWN0KToK
KyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQcm9wZXJ0
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0UHJv
cGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJl
bW92ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpoYXNNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OmVudW1lcmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6YWRkVmFsdWVUb0FycmF5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUpOgorICAgICAg
ICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW06CisgICAgICAgIChXZWJOZXRz
Y2FwZVBsdWdpblN0cmVhbTo6d2FudHNBbGxTdHJlYW1zKToKKyAgICAgICAgKiBQbHVnaW5zL1dl
Yk5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3
IHNlbmRFdmVudDppc0RyYXdSZWN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZp
ZXcgcHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5nZV0pOgorICAgICAgICAoLVtXZWJOZXRzY2Fw
ZVBsdWdpblZpZXcgc2V0V2luZG93SWZOZWNlc3NhcnldKToKKyAgICAgICAgKC1bV2ViTmV0c2Nh
cGVQbHVnaW5WaWV3IGNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplY3RdKToKKyAgICAgICAgKC1b
V2ViTmV0c2NhcGVQbHVnaW5WaWV3IGdldEZvcm1WYWx1ZTpdKToKKyAgICAgICAgKC1bV2ViTmV0
c2NhcGVQbHVnaW5WaWV3IGV2YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6XSk6CisgICAg
ICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyB3ZWJGcmFtZTpkaWRGaW5pc2hMb2FkV2l0aFJl
YXNvbjpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGxvYWRQbHVnaW5SZXF1
ZXN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgX3ByaW50ZWRQbHVnaW5C
aXRtYXBdKToKKyAgICAgICAgKiBQbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW06CisgICAg
ICAgICgrW1dlYlBsdWdpbkNvbnRyb2xsZXIgcGx1Z0luVmlld1dpdGhBcmd1bWVudHM6ZnJvbVBs
dWdpblBhY2thZ2U6XSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgc3RvcE9uZVBs
dWdpbjpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxlciBkZXN0cm95T25lUGx1Z2lu
Ol0pOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIHN0YXJ0QWxsUGx1Z2luc10pOgor
ICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIGFkZFBsdWdpbjpdKToKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6Zm9yY2VVc2VyR2VzdHVyZTpdKToKKyAgICAgICAgKC1b
V2ViRnJhbWUgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOndpdGhHbG9i
YWxPYmplY3Q6aW5TY3JpcHRXb3JsZDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERl
YnVnRGVsZWdhdGUubW06CisgICAgICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBzY29wZUNoYWlu
XSk6CisgICAgICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBldmFsdWF0ZVdlYlNjcmlwdDpdKToK
KyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgrW1dlYlZpZXcgX3JlcG9y
dEV4Y2VwdGlvbjppbkNvbnRleHQ6XSk6CisgICAgICAgICgtW1dlYlZpZXcgYWVEZXNjQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX2NvbXB1
dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbzpmb3JFbGVtZW50Ol0pOgorCiAyMDEyLTA2LTIw
ICBHYXJyZXQgS2VsbHkgIDxnZGtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE1vdmluZyBjb29r
aWVFbmFibGVkL3NldENvb2tpZUVuYWJsZWQgZnJvbSBQYWdlIHRvIFNldHRpbmdzLgpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0JKHJldmlzaW9uIDEyMDky
NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw4ICs2Nyw5IEBAICsgKERPTUVsZW1lbnQgKilfRE9NRWxlbWVudEZyb21K
U0NvbnRleHQKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgcmV0dXJuIGtpdCh0b0VsZW1lbnQo
dG9KUyh0b0pTKGNvbnRleHQpLCB2YWx1ZSkpKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pT
KGNvbnRleHQpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIHJldHVybiBraXQo
dG9FbGVtZW50KHRvSlMoZXhlYywgdmFsdWUpKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopX21hcmtl
clRleHRGb3JMaXN0SXRlbQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3Rh
dGlzdGljcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVT
dGF0aXN0aWNzLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9NaXNj
L1dlYkNvcmVTdGF0aXN0aWNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OCwzMSArNTgsMzEgQEAg
KyAoTlNBcnJheSAqKXN0YXRpc3RpY3MKIAogKyAoc2l6ZV90KWphdmFTY3JpcHRPYmplY3RzQ291
bnQKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0
dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgp
OwogfQogCiArIChzaXplX3QpamF2YVNjcmlwdEdsb2JhbE9iamVjdHNDb3VudAogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmdsb2JhbE9iamVjdENvdW50KCk7CiB9CiAK
ICsgKHNpemVfdClqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKIH0KIAog
KyAoc2l6ZV90KWphdmFTY3JpcHRQcm90ZWN0ZWRHbG9iYWxPYmplY3RzQ291bnQKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3Vu
dCgpOwogfQogCiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlw
ZUNvdW50cwogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICAKICAgICBOU0NvdW50ZWRTZXQgKnJlc3VsdCA9IFtOU0NvdW50ZWRTZXQgc2V0XTsKIApAQCAt
OTcsNyArOTcsNyBAQCArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0UHJvdGVjdGVkT2JqCiAK
ICsgKE5TQ291bnRlZFNldCAqKWphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzCiB7Ci0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIAogICAgIE5TQ291bnRlZFNl
dCAqcmVzdWx0ID0gW05TQ291bnRlZFNldCBzZXRdOwogCkBAIC0xNjcsMTMgKzE2NywxMyBAQCAr
IChzaXplX3QpZ2x5cGhQYWdlQ291bnQKIAogKyAoQk9PTClzaG91bGRQcmludEV4Y2VwdGlvbnMK
IHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJu
IENvbnNvbGU6OnNob3VsZFByaW50RXhjZXB0aW9ucygpOwogfQogCiArICh2b2lkKXNldFNob3Vs
ZFByaW50RXhjZXB0aW9uczooQk9PTClwcmludAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKICAgICBDb25zb2xlOjpzZXRTaG91bGRQcmludEV4Y2VwdGlvbnMo
cHJpbnQpOwogfQogCkBAIC0yMDEsNyArMjAxLDcgQEAgKyAoTlNEaWN0aW9uYXJ5ICopbWVtb3J5
U3RhdGlzdGljcwogewogICAgIFdURjo6RmFzdE1hbGxvY1N0YXRpc3RpY3MgZmFzdE1hbGxvY1N0
YXRpc3RpY3MgPSBXVEY6OmZhc3RNYWxsb2NTdGF0aXN0aWNzKCk7CiAgICAgCi0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNpemVfdCBoZWFwU2l6ZSA9IEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5zaXplKCk7CiAgICAgc2l6ZV90
IGhlYXBGcmVlID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNhcGFj
aXR5KCkgLSBoZWFwU2l6ZTsKICAgICBHbG9iYWxNZW1vcnlTdGF0aXN0aWNzIGdsb2JhbE1lbW9y
eVN0YXRzID0gZ2xvYmFsTWVtb3J5U3RhdGlzdGljcygpOwpAQCAtMjQ1LDcgKzI0NSw3IEBAICsg
KHNpemVfdClqYXZhU2NyaXB0Tm9HQ0FsbG93ZWRPYmplY3RzQ28KIAogKyAoc2l6ZV90KWphdmFT
Y3JpcHRSZWZlcmVuY2VkT2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKIH0KIApJbmRleDogU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBl
UGx1Z2luU3RyZWFtLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsNyArMzY4LDcgQEAgYm9vbCBX
ZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6d2FudHNBbGxTdAogICAgIE5QRXJyb3IgZXJyb3I7CiAg
ICAgewogICAgICAgICBQbHVnaW5TdG9wRGVmZXJyZXIgZGVmZXJyZXIobV9wbHVnaW5WaWV3Lmdl
dCgpKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAgICAgZXJyb3IgPSBtX3BsdWdpbkZ1bmNzLT5nZXR2YWx1ZShtX3BsdWdpbiwgTlBQVnBs
dWdpbldhbnRzQWxsTmV0d29ya1N0cmVhbXMsICZ2YWx1ZSk7CiAgICAgfQogICAgIGlmIChlcnJv
ciAhPSBOUEVSUl9OT19FUlJPUikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1Bs
dWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNjY5LDcgKzY2OSw3IEBAIC0gKEJPT0wpc2VuZEV2ZW50Oih2b2lkKilldmVudCBp
c0RyYXdSZWMKICAgICAvLyBTZXQgdGhlIHBsdWdpbkFsbG93UG9wdXAgZmxhZy4KICAgICBBU1NF
UlQoX2V2ZW50SGFuZGxlcik7CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJl
SW5kaWNhdG9yKF9ldmVudEhhbmRsZXItPmN1cnJlbnRFdmVudElzVXNlckdlc3R1cmUoKSA/IERl
ZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7CiAgICAgICAgIGFjY2VwdGVkRXZlbnQgPSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1
Z2luRnVuY3NdLT5ldmVudChwbHVnaW4sIGV2ZW50KTsKICAgICB9CkBAIC04NTAsNyArODUwLDcg
QEAgLSAodm9pZClwcml2YXRlQnJvd3NpbmdNb2RlRGlkQ2hhbmdlCiAKICAgICBbc2VsZiB3aWxs
Q2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIGlmIChbX3BsdWdpblBhY2thZ2UuZ2V0KCkg
cGx1Z2luRnVuY3NdLT5zZXR2YWx1ZSkKICAgICAgICAgICAgIFtfcGx1Z2luUGFja2FnZS5nZXQo
KSBwbHVnaW5GdW5jc10tPnNldHZhbHVlKHBsdWdpbiwgTlBOVnByaXZhdGVNb2RlQm9vbCwgJnZh
bHVlKTsKICAgICB9CkBAIC05OTEsNyArOTkxLDcgQEAgLSAodm9pZClzZXRXaW5kb3dJZk5lY2Vz
c2FyeQogICAgICAgICBpblNldFdpbmRvdyA9IFlFUzsgICAgICAgIAogICAgICAgICBbc2VsZiB3
aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgewotICAgICAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBucEVyciA9
IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnNldHdpbmRvdyhwbHVnaW4sICZ3
aW5kb3cpOwogICAgICAgICB9CiAgICAgICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07
CkBAIC0xNDQ0LDcgKzE0NDQsNyBAQCAtIChOUE9iamVjdCAqKWNyZWF0ZVBsdWdpblNjcmlwdGFi
bGVPYmplCiAgICAgTlBFcnJvciBlcnJvcjsKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0
aW9uXTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgICAgIGVycm9yID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNz
XS0+Z2V0dmFsdWUocGx1Z2luLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmdmFsdWUp
OwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTQ2Myw3ICsx
NDYzLDcgQEAgLSAoQk9PTClnZXRGb3JtVmFsdWU6KE5TU3RyaW5nICoqKXZhbHVlCiAgICAgTlBF
cnJvciBlcnJvcjsKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0g
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAg
IGVycm9yID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+Z2V0dmFsdWUocGx1
Z2luLCBOUFBWZm9ybVZhbHVlLCAmYnVmZmVyKTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBs
dWdJbkZ1bmN0aW9uXTsKQEAgLTE1OTUsNyArMTU5NSw3IEBAIC0gKHZvaWQpZXZhbHVhdGVKYXZh
U2NyaXB0UGx1Z2luUmVxdWVzdDoKICAgICAgICAgaWYgKFtKU1BsdWdpblJlcXVlc3Qgc2VuZE5v
dGlmaWNhdGlvbl0pIHsKICAgICAgICAgICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25d
OwogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgICAgICBbX3BsdWdpblBhY2th
Z2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbVVJMIF93ZWJfVVJMQ1N0
cmluZ10sIE5QUkVTX0RPTkUsIFtKU1BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTE2
MjcsNyArMTYyNyw3IEBAIC0gKHZvaWQpd2ViRnJhbWU6KFdlYkZyYW1lICopd2ViRnJhbWUgZGkK
ICAgICAgICAgCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBb
X3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbW1tw
bHVnaW5SZXF1ZXN0IHJlcXVlc3RdIFVSTF0gX3dlYl9VUkxDU3RyaW5nXSwgcmVhc29uLCBbcGx1
Z2luUmVxdWVzdCBub3RpZnlEYXRhXSk7CiAgICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5G
dW5jdGlvbl07CkBAIC0xNjcxLDcgKzE2NzEsNyBAQCAtICh2b2lkKWxvYWRQbHVnaW5SZXF1ZXN0
OihXZWJQbHVnaW5SZXF1CiAgICAgICAgICAgICAgICAgaWYgKFtwbHVnaW5SZXF1ZXN0IHNlbmRO
b3RpZmljYXRpb25dKSB7CiAgICAgICAgICAgICAgICAgICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0lu
RnVuY3Rpb25dOwogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5G
dW5jc10tPnVybG5vdGlmeShwbHVnaW4sIFtbW3BsdWdpblJlcXVlc3QgcmVxdWVzdF0gVVJMXSBf
d2ViX1VSTENTdHJpbmddLCBOUEVSUl9HRU5FUklDX0VSUk9SLCBbcGx1Z2luUmVxdWVzdCBub3Rp
ZnlEYXRhXSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgW3Nl
bGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTI0NzEsNyArMjQ3MSw3IEBAIC0gKE5TQml0
bWFwSW1hZ2VSZXAgKilfcHJpbnRlZFBsdWdpbkJpdG0KICAgICAvLyBUZWxsIHRoZSBwbHVnaW4g
dG8gcHJpbnQgaW50byB0aGUgR1dvcmxkCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlv
bl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwogICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5wcmludChw
bHVnaW4sICZucFByaW50KTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9u
XTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRy
b2xsZXIubW0JKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
V2ViUGx1Z2luQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtOTYsMTAgKzk2LDEwIEBA
ICsgKE5TVmlldyAqKXBsdWdJblZpZXdXaXRoQXJndW1lbnRzOihOU0QKICAgICBOU1ZpZXcgKnZp
ZXcgPSBuaWw7CiAKICAgICBpZiAoW3ZpZXdGYWN0b3J5IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IocGx1Z0luVmlld1dpdGhBcmd1bWVudHM6KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgdmlldyA9IFt2aWV3RmFjdG9y
eSBwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czphcmd1bWVudHNdOwogICAgIH0gZWxzZSBpZiAoW3Zp
ZXdGYWN0b3J5IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luVmlld1dpdGhBcmd1
bWVudHM6KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKICAgICAgICAgdmlldyA9IFt2aWV3RmFjdG9yeSBwbHVnaW5WaWV3V2l0aEFyZ3VtZW50
czphcmd1bWVudHNdOwogICAgIH0KICAgICAKQEAgLTE0OSwxMCArMTQ5LDEwIEBAIC0gKHZvaWQp
ZGVhbGxvYwogLSAodm9pZClzdG9wT25lUGx1Z2luOihOU1ZpZXcgKil2aWV3CiB7CiAgICAgaWYg
KFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luU3RvcCldKSB7Ci0g
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAg
IFt2aWV3IHdlYlBsdWdJblN0b3BdOwogICAgIH0gZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3RvcihwbHVnaW5TdG9wKV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgW3ZpZXcgcGx1Z2luU3RvcF07CiAg
ICAgfQogfQpAQCAtMTYwLDEwICsxNjAsMTAgQEAgLSAodm9pZClzdG9wT25lUGx1Z2luOihOU1Zp
ZXcgKil2aWV3CiAtICh2b2lkKWRlc3Ryb3lPbmVQbHVnaW46KE5TVmlldyAqKXZpZXcKIHsKICAg
ICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5EZXN0cm95
KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAgICAgW3ZpZXcgd2ViUGx1Z0luRGVzdHJveV07CiAgICAgfSBlbHNlIGlmIChbdmlldyBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpbkRlc3Ryb3kpXSkgewotICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBbdmlldyBw
bHVnaW5EZXN0cm95XTsKICAgICB9CiB9CkBAIC0xODAsMTAgKzE4MCwxMCBAQCAtICh2b2lkKXN0
YXJ0QWxsUGx1Z2lucwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAg
ICAgICBpZCBhVmlldyA9IFtfdmlld3Mgb2JqZWN0QXRJbmRleDppXTsKICAgICAgICAgaWYgKFth
VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJblN0YXJ0KV0pIHsKLSAg
ICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgICAgICAgICAgW2FWaWV3IHdlYlBsdWdJblN0YXJ0XTsKICAgICAgICAgfSBlbHNlIGlmIChb
YVZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5TdGFydCldKSB7Ci0gICAg
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICAgICAgICAgIFthVmlldyBwbHVnaW5TdGFydF07CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTIs
MTAgKzI1MiwxMCBAQCAtICh2b2lkKWFkZFBsdWdpbjooTlNWaWV3ICopdmlldwogCiAgICAgICAg
IExPRyhQbHVnaW5zLCAiaW5pdGlhbGl6aW5nIHBsdWctaW4gJUAiLCB2aWV3KTsKICAgICAgICAg
aWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luSW5pdGlhbGl6
ZSldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICAgICAgICAgIFt2aWV3IHdlYlBsdWdJbkluaXRpYWxpemVdOwogICAgICAg
ICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luSW5p
dGlhbGl6ZSldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIFt2aWV3IHBsdWdpbkluaXRpYWxpemVdOwogICAg
ICAgICB9CiAKQEAgLTI2NSwxNSArMjY1LDE1IEBAIC0gKHZvaWQpYWRkUGx1Z2luOihOU1ZpZXcg
Kil2aWV3CiAgICAgICAgIGlmIChfc3RhcnRlZCkgewogICAgICAgICAgICAgTE9HKFBsdWdpbnMs
ICJzdGFydGluZyBwbHVnLWluICVAIiwgdmlldyk7CiAgICAgICAgICAgICBpZiAoW3ZpZXcgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5TdGFydCldKSB7Ci0gICAgICAgICAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgICAgICAgICAgICAgIFt2aWV3IHdlYlBsdWdJblN0YXJ0XTsKICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5TdGFydCldKSB7
Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgICAgICAgICAgICAgIFt2aWV3IHBsdWdpblN0YXJ0XTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3Ioc2V0Q29udGFpbmluZ1dpbmRvdzopXSkgewotICAgICAgICAgICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAg
ICAgICAgICAgICBbdmlldyBzZXRDb250YWluaW5nV2luZG93OltfZG9jdW1lbnRWaWV3IHdpbmRv
d11dOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5z
L0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAg
LTg2Nyw4ICs4NjcsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVh
CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhw
bHVnaW5Xb3JsZCgpLT5nbG9iYWxEYXRhKCkpOwogICAgIFN0cm9uZzxKU0dsb2JhbE9iamVjdD4g
Z2xvYmFsT2JqZWN0KCpwbHVnaW5Xb3JsZCgpLT5nbG9iYWxEYXRhKCksIGZyYW1lLT5zY3JpcHQo
KS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIApAQCAtOTA0LDcgKzkwMyw3IEBAIGJvb2wgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0
KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVl
IGZ1bmN0aW9uID0gb2JqZWN0LT5nZXQoZXhlYywgbWV0aG9kTmFtZSk7CiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwg
Y2FsbERhdGEpOwpAQCAtOTM3LDcgKzkzNiw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjppbnZva2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5n
bG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgICAg
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIENhbGxEYXRhIGNhbGxEYXRh
OwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxs
RGF0YShvYmplY3QsIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25l
KQpAQCAtOTY5LDcgKzk2OCw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpj
b25zdHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVj
KCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAg
ICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dENvbnN0cnVjdERhdGEob2JqZWN0LCBjb25zdHJ1Y3REYXRhKTsKQEAgLTEwMDIsNyArMTAwMSw3
IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQcm8KICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+
Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7ICAgIAogICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5h
bWUpOwogICAgIAogICAgIG1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVz
dWx0TGVuZ3RoKTsKQEAgLTEwMjMsNyArMTAyMiw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjpnZXRQcm8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkp
LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsg
ICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIEpTVmFsdWUgdmFsdWUg
PSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIAogICAgIG1hcnNoYWxWYWx1
ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKQEAgLTEwNDcsNyArMTA0
Niw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRQcm8KICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQo
KS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7ICAgIAogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlbWFyc2hhbFZhbHVlKGV4ZWMsIHZh
bHVlRGF0YSwgdmFsdWVMZW5ndGgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwpAQCAtMTA3
Myw3ICsxMDcyLDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldFBybwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUt
PnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAgICAKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsgICAgCiAgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlbWFyc2hhbFZh
bHVlKGV4ZWMsIHZhbHVlRGF0YSwgdmFsdWVMZW5ndGgpOwogICAgIG9iamVjdC0+bWV0aG9kVGFi
bGUoKS0+cHV0QnlJbmRleChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGZhbHNl
KTsKQEAgLTEwOTgsMTIgKzEwOTcsMTIgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OnJlbW92ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhl
YygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghb2JqZWN0LT5oYXNQ
cm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOyAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMjUsMTIgKzExMjQsMTIg
QEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbW92ZQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5n
bG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBpZiAoIW9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVy
dHlOYW1lKSkgewogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
b2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
ICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTE5Niw3ICsxMTk1LDcgQEAgYm9vbCBOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6Omhhc01ldAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1
Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUgZnVu
YyA9IG9iamVjdC0+Z2V0KGV4ZWMsIG1ldGhvZE5hbWUpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgcmV0dXJuICFmdW5jLmlzVW5kZWZpbmVkKCk7CkBAIC0xMjE4LDcgKzEyMTcs
NyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVyCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkt
Pmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAgCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjKTsKICAgICBvYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKQEAgLTEyNjIsNyArMTI2MSw3IEBA
IHN0YXRpYyBib29sIGdldE9iamVjdElEKE5ldHNjYXBlUGx1Z2luSW4KICAgICAKIHZvaWQgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWx1ZVRvQXJyYXkoTlNNdXRhYmxlQXJyYXkg
KmFycmF5LCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7CiAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6U3RyaW5nVmFsdWVUeXBlXV07CkBAIC0xNjcyLDcgKzE2
NzEsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bW92ZUdsCiAgICAgICAg
IHJldHVybjsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHRocm93RXJy
b3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgc3RyaW5nVG9VU3RyaW5nKGdsb2JhbEV4Y2VwdGlv
blN0cmluZygpKSkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDYgQEAgdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIHVzaW5nIEpTQzo6SlNHbG9iYWxPYmplY3Q7CiB1c2luZyBKU0M6OkpT
TG9jazsKIHVzaW5nIEpTQzo6SlNWYWx1ZTsKLXVzaW5nIEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5OwogCiAvKgogSGVyZSBpcyB0aGUgY3VycmVudCBiZWhhdmlvciBtYXRyaXggZm9yIGZvdXIg
dHlwZXMgb2YgbmF2aWdhdGlvbnM6CkBAIC01OTcsOCArNTk2LDggQEAgLSAoTlNTdHJpbmcgKilf
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcgogICAgIGlmICghcmVzdWx0IHx8ICghcmVzdWx0Lmlz
Qm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpKQog
ICAgICAgICByZXR1cm4gQCIiOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNj
cmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVj
KCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICByZXR1cm4gdXN0cmlu
Z1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogfQogCkBAIC0x
MTIzLDggKzExMjIsOCBAQCAtIChOU1N0cmluZyAqKV9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
CiAgICAgaWYgKCFyZXN1bHQgfHwgKCFyZXN1bHQuaXNCb29sZWFuKCkgJiYgIXJlc3VsdC5pc1N0
cmluZygpICYmICFyZXN1bHQuaXNOdW1iZXIoKSkpCiAgICAgICAgIHJldHVybiBAIiI7CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTQzo6RXhlY1N0YXRl
KiBleGVjID0gYW55V29ybGRHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcocmVzdWx0
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxl
Z2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDkgKzE3NCw5IEBAIC0gKE5TQXJyYXkgKilz
Y29wZUNoYWluCiAgICAgaWYgKCFfcHJpdmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUpCiAgICAgICAg
IHJldHVybiBbTlNBcnJheSBhcnJheV07CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogCiAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBfcHJpdmF0ZS0+
ZGVidWdnZXJDYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhz
Y29wZUNoYWluLT5nbG9iYWxEYXRhKTsKICAgICBpZiAoIXNjb3BlQ2hhaW4tPm5leHQpICAvLyBn
bG9iYWwgZnJhbWUKICAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpfcHJp
dmF0ZS0+Z2xvYmFsT2JqZWN0XTsKIApAQCAtMjI5LDEzICsyMjksMTMgQEAgLSAoaWQpZXZhbHVh
dGVXZWJTY3JpcHQ6KE5TU3RyaW5nICopc2NyaQogICAgIGlmICghX3ByaXZhdGUtPmRlYnVnZ2Vy
Q2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKLQogICAgIC8vIElmIHRoaXMgaXMgdGhlIGdsb2JhbCBjYWxsIGZy
YW1lIGFuZCB0aGVyZSBpcyBubyBkeW5hbWljIGdsb2JhbCBvYmplY3QsCiAgICAgLy8gRGFzaGNv
ZGUgaXMgYXR0ZW1wdGluZyB0byBleGVjdXRlIEpTIGluIHRoZSBldmFsdWF0b3IgdXNpbmcgYSBz
dGFsZQogICAgIC8vIFdlYlNjcmlwdENhbGxGcmFtZS4gSW5zdGVhZCwgd2UgbmVlZCB0byBzZXQg
dGhlIGR5bmFtaWMgZ2xvYmFsIG9iamVjdAogICAgIC8vIGFuZCBldmFsdWF0ZSB0aGUgSlMgaW4g
dGhlIGdsb2JhbCBvYmplY3QncyBnbG9iYWwgY2FsbCBmcmFtZS4KICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gX3ByaXZhdGUtPmRlYnVnZ2VyLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisKICAgICBp
ZiAoc2VsZiA9PSBfcHJpdmF0ZS0+ZGVidWdnZXItPmdsb2JhbENhbGxGcmFtZSgpICYmICFnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KSB7CiAgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBfcHJpdmF0ZS0+ZGVidWdnZXItPmdsb2JhbE9i
amVjdCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTU4MSw4ICs1ODEsOCBAQCArICh2b2lkKV9yZXBvcnRFeGNlcHRpb246KEpT
VmFsdWVSZWYpZXhjCiAgICAgaWYgKCFleGNlcHRpb24gfHwgIWNvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlND
OjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZSA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlY1N0YXRlKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBoYXMgYSBE
T01XaW5kb3cgZ2xvYmFsIG9iamVjdCwgb3RoZXJ3aXNlIHRoaXMgY29udGV4dCBkaWRuJ3Qgb3Jp
Z2luYXRlIGZyb20gYSBXZWJWaWV3LgogICAgIGlmICghdG9KU0RPTVdpbmRvdyhleGVjU3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKSkpCkBAIC00ODUxLDcgKzQ4NTEsNyBAQCAtIChOU0FwcGxl
RXZlbnREZXNjcmlwdG9yICopYWVEZXNjQnlFdmFsCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjb3Jl
RnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KHNjcmlwdCwgdHJ1ZSkuanNWYWx1ZSgpOwog
ICAgIGlmICghcmVzdWx0KSAvLyBGSVhNRTogcGFzcyBlcnJvcnMKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhjb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1h
bFdvcmxkKCkpLT5nbG9iYWxFeGVjKCkpOwogICAgIHJldHVybiBhZURlc2NGcm9tSlNWYWx1ZShj
b3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkp
LT5nbG9iYWxFeGVjKCksIHJlc3VsdCk7CiB9CiAKQEAgLTY1NjAsOCArNjU2MCw4IEBAIC0gKHZv
aWQpX25vdGlmaWNhdGlvbnNEaWRDbG9zZTooTlNBcnJheSAKIAogLSAoSlNWYWx1ZVJlZilfY29t
cHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvOihKU0NvbnRleHRSZWYpY29udGV4dCBmb3JF
bGVtZW50OihKU1ZhbHVlUmVmKXZhbHVlCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pT
KGV4ZWMsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQg
dXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAg
YW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0
IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAg
ICAgICAqIEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6YWRk
UXRTZW5kZXJUb0dsb2JhbE9iamVjdCk6CisgICAgICAgIChRV2ViRnJhbWU6OmFkZFRvSmF2YVNj
cmlwdFdpbmRvd09iamVjdCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmluamVj
dEludGVybmFsc09iamVjdCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVz
ZXRJbnRlcm5hbHNPYmplY3QpOgorCiAyMDEyLTA2LTIxICBUaGlhZ28gTWFyY29zIFAuIFNhbnRv
cyAgPHRoaWFnby5zYW50b3NAaW50ZWwuY29tPgogCiAgICAgICAgIFtXSzJdW1F0XSBDb2xvciBj
aG9vc2VyIEFQSSBtaXNzaW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHJl
dmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwNiwxMyArNTA2LDEyIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHF0U2Vu
ZGVyQ2FsbGJhY2soSlNDb24KIAogdm9pZCBRV2ViRnJhbWVQcml2YXRlOjphZGRRdFNlbmRlclRv
R2xvYmFsT2JqZWN0KCkKIHsKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKLQogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KGZy
YW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgUV9BU1NFUlQod2luZG93KTsKIAog
ICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CiAgICAgUV9B
U1NFUlQoZXhlYyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpT
Q29udGV4dFJlZiBjb250ZXh0ID0gOjp0b1JlZihleGVjKTsKICAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gcHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiX19xdF9zZW5kZXJfXyIpKTsKQEAgLTY1Nyw3ICs2NTYsNiBAQCB2b2lkIFFXZWJGcmFtZTo6
YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqCiAgICAgICAgIHJldHVybjsKICNpZiBVU0UoSlNDKQog
ICAgIEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6OlZhbHVlT3duZXJzaGlwIHZhbHVlT3duZXJz
aGlwID0gc3RhdGljX2Nhc3Q8SlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6VmFsdWVPd25lcnNo
aXA+KG93bmVyc2hpcCk7Ci0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZC0+ZnJh
bWUsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBKU0M6OkJpbmRpbmdzOjpSb290T2Jq
ZWN0KiByb290OwogICAgIGlmICh2YWx1ZU93bmVyc2hpcCA9PSBKU0M6OkJpbmRpbmdzOjpRdElu
c3RhbmNlOjpRdE93bmVyc2hpcCkKQEAgLTY3NSw2ICs2NzMsNyBAQCB2b2lkIFFXZWJGcmFtZTo6
YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqCiAgICAgfQogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4
ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogCiAgICAgSlNDOjpKU09iamVjdCogcnVudGltZU9iamVjdCA9CiAgICAgICAgICAgICBK
U0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpnZXRRdEluc3RhbmNlKG9iamVjdCwgcm9vdCwgdmFs
dWVPd25lcnNoaXApLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwpJbmRleDogU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDg2LDEzICsxMDg2LDEyIEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmluamVjdElu
dGUKIHsKICAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6
Y29yZShmcmFtZSk7CiAjaWYgVVNFKEpTQykKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKLQogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9N
V2luZG93KGNvcmVGcmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogICAgIFFfQVNTRVJU
KHdpbmRvdyk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhl
YygpOwogICAgIFFfQVNTRVJUKGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IHRvUmVmKGV4ZWMpOwogICAgIFdlYkNv
cmVUZXN0U3VwcG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQpOwpAQCAtMTExMywx
MyArMTExMiwxMiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldEludGVyCiB7
CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUo
ZnJhbWUpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VB
c3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRv
dyhjb3JlRnJhbWUsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBRX0FTU0VSVCh3aW5k
b3cpOwogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsK
ICAgICBRX0FTU0VSVChleGVjKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSB0b1JlZihleGVjKTsKICAgICBXZWJDb3JlVGVz
dFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQpOwpJbmRleDogU291cmNlL1dl
YktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTItMDYtMjAgIE1hcmsgSGFobmVuYmVy
ZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBKU0xvY2sgc2hvdWxkIGJlIHBl
ci1KU0dsb2JhbERhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg5MTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ2hhbmdlZCBhbGwgc2l0ZXMgdGhhdCB1c2VkIEpTTG9jayB0byBpbnN0ZWFkIHVzZSB0
aGUgbmV3IEpTTG9ja0hvbGRlcgorICAgICAgICBhbmQgcGFzcyBpbiB0aGUgY29ycmVjdCBKUyBj
b250ZXh0IHRoYXQgdGhlIGNvZGUgaXMgYWJvdXQgdG8gaW50ZXJhY3Qgd2l0aCB0aGF0IAorICAg
ICAgICBuZWVkcyBwcm90ZWN0aW9uLgorCisgICAgICAgICogV2ViQ29yZVN0YXRpc3RpY3MuY3Bw
OgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgor
ICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQp
OgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3Rz
Q291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRH
bG9iYWxPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3Jp
cHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKToKKyAgICAgICAgKiBXZWJGcmFtZS5jcHA6Cisg
ICAgICAgIChXZWJGcmFtZTo6c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEluU2NyaXB0V29y
bGQpOgorICAgICAgICAqIFdlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2Vi
SmF2YVNjcmlwdENvbGxlY3Rvcjo6b2JqZWN0Q291bnQpOgorICAgICAgICAqIFdlYlZpZXcuY3Bw
OgorICAgICAgICAoV2ViVmlldzo6c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJp
bmcpOgorICAgICAgICAoV2ViVmlldzo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgKFdlYlZp
ZXc6OmVsZW1lbnRGcm9tSlMpOgorCiAyMDEyLTA2LTIwICBHYXJyZXQgS2VsbHkgIDxnZGtAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIE1vdmluZyBjb29raWVFbmFibGVkL3NldENvb2tpZUVuYWJs
ZWQgZnJvbSBQYWdlIHRvIFNldHRpbmdzLgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29y
ZVN0YXRpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVT
dGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC93aW4vV2Vi
Q29yZVN0YXRpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBpZiAoIWNvdW50KQogICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQpAQCAtMTA5
LDcgKzEwOSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKICAg
ICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOwogICAg
IHJldHVybiBTX09LOwogfQpAQCAtMTIwLDcgKzEyMCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
ICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5w
cm90ZWN0ZWRPYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQpAQCAtMTMxLDcgKzEz
MSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBpZiAo
IWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpj
b21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwog
ICAgIHJldHVybiBTX09LOwogfQpAQCAtMTM5LDcgKzEzOSw3IEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29y
ZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCAKICAgICAv
KiBbcmV0dmFsXVtvdXRdICovIElQcm9wZXJ0eUJhZzIqKiB0eXBlTmFtZXNBbmRDb3VudHMpCiB7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIE93blB0cjxU
eXBlQ291bnRTZXQ+IGpzT2JqZWN0VHlwZU5hbWVzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOwogICAgIHR5cGVkZWYg
VHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKICAgICBJdGVyYXRvciBlbmQg
PSBqc09iamVjdFR5cGVOYW1lcy0+ZW5kKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJG
cmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcg
SlNDOjpKU0dsb2JhbE9iamVjdDsKIHVzaW5nIEpTQzo6SlNMb2NrOwogdXNpbmcgSlNDOjpKU1Zh
bHVlOwotdXNpbmcgSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHk7CiAKICNkZWZpbmUgRkxBU0hf
UkVEUkFXIDAKIApAQCAtMjUyOCw4ICsyNTI3LDggQEAgSFJFU1VMVCBXZWJGcmFtZTo6c3RyaW5n
QnlFdmFsdWF0aW5nSmF2YQogICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQuaXNCb29sZWFuKCkg
JiYgIXJlc3VsdC5pc1N0cmluZygpICYmICFyZXN1bHQuaXNOdW1iZXIoKSkKICAgICAgICAgcmV0
dXJuIFNfT0s7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAg
IEpTQzo6RXhlY1N0YXRlKiBleGVjID0gYW55V29ybGRHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KTsKKyAgICBKU0xvY2tIb2xkZXJIb2xkZXIgbG9jayhleGVjKTsKICAgICBTdHJpbmcgcmVzdWx0
U3RyaW5nID0gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YykpOwogICAgICpldmFsdWF0aW9uUmVzdWx0ID0gQlN0cmluZyhyZXN1bHRTdHJpbmcpLnJlbGVh
c2UoKTsKIApJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViSmF2YVNjcmlwdENvbGxlY3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViSmF2YVNjcmlwdENvbGxlY3Rv
ci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkphdmFTY3Jp
cHRDb2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBXZWJKYXZhU2NyaXB0QwogICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhl
YXAub2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZp
ZXcuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzE5NCw4ICszMTk0LDggQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBXZWJWaWV3OjpzdHJpbgogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uUmVzdWx0KQog
ICAgICAgICByZXR1cm4gRV9GQUlMOwogICAgIGVsc2UgaWYgKHNjcmlwdEV4ZWN1dGlvblJlc3Vs
dC5pc1N0cmluZygpKSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKICAgICAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBjb3JlRnJhbWUtPnNjcmlw
dCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVjKCk7
CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgICpyZXN1bHQg
PSBCU3RyaW5nKHVzdHJpbmdUb1N0cmluZyhzY3JpcHRFeGVjdXRpb25SZXN1bHQuZ2V0U3RyaW5n
KGV4ZWMpKSk7CiAgICAgfQogCkBAIC01ODUxLDggKzU4NTEsOCBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFdlYlZpZXc6OnJlcG9yCiAgICAgaWYgKCFjb250ZXh0IHx8ICFleGNlcHRpb24p
CiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZSA9IHRvSlMoY29u
dGV4dCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjU3RhdGUpOwogCiAgICAgLy8g
TWFrZSBzdXJlIHRoZSBjb250ZXh0IGhhcyBhIERPTVdpbmRvdyBnbG9iYWwgb2JqZWN0LCBvdGhl
cndpc2UgdGhpcyBjb250ZXh0IGRpZG4ndCBvcmlnaW5hdGUgZnJvbSBhIFdlYlZpZXcuCiAgICAg
aWYgKCF0b0pTRE9NV2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkKQEAg
LTU4NzgsOCArNTg3OCw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6ZWxl
bWUKICAgICBpZiAoIW5vZGVPYmplY3QpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBK
U0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgRWxlbWVudCogZWx0
ID0gdG9FbGVtZW50KHRvSlModG9KUyhjb250ZXh0KSwgbm9kZU9iamVjdCkpOworICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKKyAgICBFbGVtZW50KiBlbHQgPSB0b0VsZW1lbnQodG9KUyhleGVjLCBub2RlT2JqZWN0
KSk7CiAgICAgaWYgKCFlbHQpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148954</attachid>
            <date>2012-06-21 20:46:44 -0700</date>
            <delta_ts>2012-06-22 07:46:16 -0700</delta_ts>
            <desc>Windows</desc>
            <filename>bug-89123-20120621204644.patch</filename>
            <type>text/plain</type>
            <size>206731</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBA
QAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9BUElTaGltcy5oOgorICAg
ICAgICAoQVBJRW50cnlTaGltV2l0aG91dExvY2spOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNo
aW1XaXRob3V0TG9jazo6QVBJRW50cnlTaGltV2l0aG91dExvY2spOiBBZGRlZCBhbiBleHRyYSBw
YXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIHRvIAorICAgICAgICBkZXRlcm1pbmUgd2hldGhl
ciB3ZSBzaG91bGQgcmVmIHRoZSBKU0dsb2JhbERhdGEgb3Igbm90LiBXZSB3YW50IHRvIHJlZiBh
bGwgdGhlIHRpbWUgZXhjZXB0IGZvciBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBjbGFzcyBi
ZWNhdXNlIHRpbWVyRGlkRmlyZSBjb3VsZCBydW4gYWZ0ZXIgc29tZWJvZHkgaGFzIHN0YXJ0ZWQg
dG8gdGVhciBkb3duIHRoYXQgcGFydGljdWxhciAKKyAgICAgICAgSlNHbG9iYWxEYXRhLCBzbyB3
ZSB3b3VsZG4ndCB3YW50IHRvIHJlc3VycmVjdCB0aGUgcmVmIGNvdW50IG9mIHRoYXQgSlNHbG9i
YWxEYXRhIGZyb20gMCBiYWNrIHRvIDEgYWZ0ZXIgCisgICAgICAgIGl0cyBkZXN0cnVjdGlvbiBo
YXMgYmVndW4uIAorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW1XaXRob3V0TG9jazo6fkFQSUVu
dHJ5U2hpbVdpdGhvdXRMb2NrKTogTm93IGRlcmVmcyBpZiBpdCBhbHNvIHJlZmVkLgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OkFQSUVudHJ5U2hpbSk6CisgICAgICAgIChBUElFbnRyeVNo
aW0pOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW06On5BUElFbnRyeVNoaW0pOgorICAgICAg
ICAoSlNDOjpBUElFbnRyeVNoaW06OmluaXQpOiBGYWN0b3JlZCBvdXQgY29tbW9uIGluaXRpYWxp
emF0aW9uIGNvZGUgZm9yIHRoZSB2YXJpb3VzIEFQSUVudHJ5U2hpbSBjb25zdHJ1Y3RvcnMuCisg
ICAgICAgIEFsc28gbW92ZWQgdGhlIHRpbWVvdXRDaGVja2VyIHN0b3AgYW5kIHN0YXJ0IGhlcmUg
YmVjYXVzZSB3ZSBuZWVkIHRvIHN0YXJ0IGFmdGVyIHdlJ3ZlIGdyYWJiZWQgdGhlIEFQSSBsb2Nr
CisgICAgICAgIGFuZCBiZWZvcmUgd2UndmUgcmVsZWFzZWQgaXQsIHdoaWNoIGNhbiBvbmx5IGRv
bmUgaW4gQVBJRW50cnlTaGltLgorICAgICAgICAoSlNDOjpBUElDYWxsYmFja1NoaW06On5BUElD
YWxsYmFja1NoaW0pOiBXZSBubyBsb25nZXIgbmVlZCB0byBzeW5jaHJvbml6ZSBoZXJlLgorICAg
ICAgICAqIEFQSS9KU0NvbnRleHRSZWYuY3BwOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0Q3Jl
YXRlKToKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXApOgorICAgICAgICAo
SlNHbG9iYWxDb250ZXh0UmVsZWFzZSk6CisgICAgICAgIChKU0NvbnRleHRDcmVhdGVCYWNrdHJh
Y2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRTcGFjZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6cHJvdGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucHJv
dGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFw
OjpzZXRBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWN0aXZpdHlDYWxs
YmFjayk6CisgICAgICAgIChKU0M6OkhlYXA6OnN3ZWVwZXIpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOiBDaGFuZ2VkIG1fYWN0aXZpdHlDYWxsYmFjayBhbmQgbV9zd2VlcGVyIHRvIGJlIHJhdyBw
b2ludGVycyByYXRoZXIgdGhhbiBPd25QdHJzIGJlY2F1c2UgdGhleSAKKyAgICAgICAgYXJlIG5v
dyByZXNwb25zaWJsZSBmb3IgdGhlaXIgb3duIGxpZmV0aW1lLiBBbHNvIGNoYW5nZWQgdGhlIG9y
ZGVyIG9mIGRlY2xhcmF0aW9uIG9mIHRoZSBHQ0FjdGl2aXR5Q2FsbGJhY2sKKyAgICAgICAgYW5k
IHRoZSBJbmNyZW1lbnRhbFN3ZWVwZXIgdG8gbWFrZSBzdXJlIHRoZXkncmUgdGhlIGxhc3QgdGhp
bmdzIHRoYXQgZ2V0IGluaXRpYWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gdG8gCisgICAgICAg
IHByZXZlbnQgYW55IGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBKU0ds
b2JhbERhdGEvSGVhcCB0aGV5IG1pZ2h0IGNhcmUgYWJvdXQuCisgICAgICAgIChIZWFwKToKKyAg
ICAgICAgKiBoZWFwL0hlYXBUaW1lci5jcHA6IFJlZmFjdG9yZWQgdG8gYWxsb3cgZm9yIHRocmVh
ZC1zYWZlIG9wZXJhdGlvbiBhbmQgc2h1dGRvd24uCisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6
fkhlYXBUaW1lcik6CisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6aW52YWxpZGF0ZSk6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpIZWFwVGltZXI6OmRpZFN0YXJ0Vk1TaHV0ZG93bik6
IENhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIH5KU0dsb2JhbERhdGEuIElmIHdlJ3JlIG9uIHRo
ZSBzYW1lIHRocmVhZCAKKyAgICAgICAgdGhhdCB0aGUgSGVhcFRpbWVyIGlzIHJ1bm5pbmcgb24s
IHdlIGtpbGwgdGhlIEhlYXBUaW1lciBvdXJzZWx2ZXMuIElmIG5vdCwgdGhlbiB3ZSBzZXQgc29t
ZSBzdGF0ZSBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBhbmQgc2NoZWR1bGUgaXQgdG8gZmly
ZSBpbW1lZGlhdGVseSBzbyB0aGF0IGl0IGNhbiBub3RpY2UgYW5kIGtpbGwgaXRzZWxmLgorICAg
ICAgICAoSlNDOjpIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSk6IFdlIGdyYWIgb3VyIG11dGV4IGFu
ZCBjaGVjayBvdXIgSlNHbG9iYWxEYXRhIHBvaW50ZXIuIElmIGl0IGhhcyBiZWVuIHplcm8tZWQK
KyAgICAgICAgb3V0LCB0aGVuIHdlIGtub3cgdGhlIFZNIGhhcyBzdGFydGVkIHRvIHNodXRkb3du
IGFuZCB3ZSBzaG91bGQga2lsbCBvdXJzZWx2ZXMuIE90aGVyd2lzZSwgZ3JhYiB0aGUgQVBJRW50
cnlTaGltLAorICAgICAgICBidXQgd2l0aG91dCByZWYtaW5nIHRoZSBKU0dsb2JhbERhdGEgKHdl
IGRvbid0IHdhbnQgdG8gYnJpbmcgdGhlIEpTR2xvYmFsRGF0YSdzIHJlZi1jb3VudCBmcm9tIDAg
dG8gMSkgaW4gY2FzZSAKKyAgICAgICAgd2Ugd2VyZSBpbnRlcnJ1cHRlZCBiZXR3ZWVuIHJlbGVh
c2luZyBvdXIgbXV0ZXggYW5kIHRyeWluZyB0byBncmFiIHRoZSBBUElMb2NrLgorICAgICAgICAq
IGhlYXAvSGVhcFRpbWVyLmg6IAorICAgICAgICAoSGVhcFRpbWVyKToKKyAgICAgICAgKiBoZWFw
L0luY3JlbWVudGFsU3dlZXBlci5jcHA6CisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBl
cjo6ZG9Xb3JrKTogV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIEFQSSBzaGltIGhlcmUgc2luY2UgSGVh
cFRpbWVyOjp0aW1lckRpZEZpcmUgaGFuZGxlcyAKKyAgICAgICAgYWxsIG9mIHRoYXQgZm9yIHVz
LiAKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUpOgorICAgICAgICAq
IGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAgIChJbmNyZW1lbnRhbFN3ZWVwZXIp
OgorICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKiBoZWFwL1dlYWtCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OldlYWtCbG9jazo6cmVhcCk6CisgICAgICAgICoganNjLmNw
cDoKKyAgICAgICAgKGZ1bmN0aW9uR0MpOgorICAgICAgICAoZnVuY3Rpb25SZWxlYXNlRXhlY3V0
YWJsZU1lbW9yeSk6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBs
ZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpjaGVja1N5bnRheCk6CisgICAgICAgIChKU0M6OmV2
YWx1YXRlKToKKyAgICAgICAgKiBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oOgorICAgICAg
ICAoRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayk6CisgICAgICAgIChKU0M6OkRlZmF1bHRHQ0Fj
dGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6IFNpZ25hbHMgdG8gdGhlIHR3byBI
ZWFwVGltZXJzIChHQ0FjdGl2aXR5Q2FsbGJhY2sgYW5kIEluY3JlbWVudGFsU3dlZXBlcikKKyAg
ICAgICAgdGhhdCB0aGUgVk0gaGFzIHN0YXJ0ZWQgc2h1dHRpbmcgZG93bi4gSXQgdGhlbiB3YWl0
cyB1bnRpbCB0aGUgSGVhcFRpbWVyIGlzIGRvbmUgd2l0aCB3aGF0ZXZlciBhY3Rpdml0eSAKKyAg
ICAgICAgaXQgbmVlZHMgdG8gZG8gYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCBhbnkgZnVydGhlciBk
ZXN0cnVjdGlvbi4gQWxzbyBhc3NlcnRzIHRoYXQgd2UgZG8gbm90IGN1cnJlbnRseSBob2xkIHRo
ZSAKKyAgICAgICAgQVBJTG9jayBiZWNhdXNlIHRoaXMgY291bGQgcG90ZW50aWFsbHkgY2F1c2Ug
ZGVhZGxvY2sgd2hlbiB3ZSB0cnkgdG8gc2lnbmFsIHRvIHRoZSBIZWFwVGltZXJzIHVzaW5nIHRo
ZWlyIG11dGV4ZXMuCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2Up
OiBQcm90ZWN0IHRoZSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNoYXJlZCBpbnN0YW5jZSB3aXRo
IHRoZSBHbG9iYWxKU0xvY2suCisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5z
dGFuY2VJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDogQ2hhbmdl
IHRvIGJlIFRocmVhZFNhZmVSZWZDb3VudGVkIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3Jy
eSBhYm91dCByZWZpbmcgYW5kIAorICAgICAgICBkZS1yZWZpbmcgSlNHbG9iYWxEYXRhcyBvbiBz
ZXBhcmF0ZSB0aHJlYWRzIHNpbmNlIHdlIGRvbid0IGRvIGl0IHRoYXQgb2Z0ZW4gYW55d2F5cy4K
KyAgICAgICAgKEpTR2xvYmFsRGF0YSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6YXBp
TG9jayk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogcnVudGltZS9KU0xvY2suY3BwOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEpTQzo6R2xvYmFsSlNMb2NrOjpHbG9iYWxKU0xvY2spOiBGb3Ig
YWNjZXNzaW5nIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisgICAgICAgIChKU0M6Okdsb2JhbEpTTG9j
azo6fkdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6SlNMb2NrSG9s
ZGVyKTogTXV0ZXhMb2NrZXIgZm9yIEpTTG9jay4gQWxzbyByZWZzIHRoZSBKU0dsb2JhbERhdGEg
dG8ga2VlcCBpdCBhbGl2ZSBzbyB0aGF0IAorICAgICAgICBpdCBjYW4gc3VjY2Vzc2Z1bGx5IHVu
bG9jayBpdCBsYXRlciB3aXRob3V0IGl0IGRpc2FwcGVhcmluZyBmcm9tIHVuZGVybmVhdGggaXQu
CisgICAgICAgIChKU0M6OkpTTG9ja0hvbGRlcjo6fkpTTG9ja0hvbGRlcik6CisgICAgICAgIChK
U0M6OkpTTG9jazo6SlNMb2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjp+SlNMb2NrKToKKyAg
ICAgICAgKEpTQzo6SlNMb2NrOjpsb2NrKTogVXNlcyB0aGUgc3BpbiBsb2NrIGZvciBndWFyZGlu
ZyB0aGUgbG9jayBjb3VudCBhbmQgb3duZXIgdGhyZWFkIGZpZWxkcy4gVXNlcyB0aGUgbXV0ZXgg
Zm9yIAorICAgICAgICBhY3R1YWxseSB3YWl0aW5nIGZvciBsb25nIHBlcmlvZHMuIAorICAgICAg
ICAoSlNDOjpKU0xvY2s6OnVubG9jayk6CisgICAgICAgIChKU0M6OkpTTG9jazo6Y3VycmVudFRo
cmVhZElzSG9sZGluZ0xvY2spOiAKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpkcm9wQWxsTG9ja3Mp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6OmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9uYWxseSk6Cisg
ICAgICAgIChKU0M6OkpTTG9jazo6Z3JhYkFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2Nrcyk6CisgICAgICAgIChKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzOjp+RHJvcEFsbExvY2tzKToKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEdsb2JhbEpTTG9jayk6CisgICAgICAgIChKU0xvY2tI
b2xkZXIpOgorICAgICAgICAoSlNMb2NrKToKKyAgICAgICAgKERyb3BBbGxMb2Nrcyk6CisgICAg
ICAgICogcnVudGltZS9XZWFrR0NNYXAuaDoKKyAgICAgICAgKEpTQzo6V2Vha0dDTWFwOjpzZXQp
OgorICAgICAgICAqIHRlc3RSZWdFeHAuY3BwOgorICAgICAgICAocmVhbE1haW4pOgorCiAyMDEy
LTA2LTIwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVk
dWNlZCAoYnV0IGRpZCBub3QgZWxpbWluYXRlKSB1c2Ugb2YgImJlcnplcmtlciBHQyIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0MKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IGV4ZWMtPmhlYXAoKS0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMzA3LDcgKzMwNyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQygKICNpZm5kZWYgTkRFQlVHCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLnJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KQEAgLTY2Nyw5ICs2NjcsOSBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50
cyhpbnQgYXJnYywgY2hhCiAKIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCisgICAgCiAgICAgUmVm
UHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKFRocmVh
ZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2Jh
bERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBwYXJzZUFyZ3Vt
ZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0UmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdFJl
Z0V4cC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
UmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDkgKzQ5NSw4IEBAIHN0YXRpYyB2b2lk
IHBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGEKIAogaW50IHJlYWxNYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwot
CiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3Jl
YXRlKFRocmVhZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGdsb2JhbERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUgb3B0aW9uczsKICAgICBw
YXJzZUFyZ3VtZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJU2hpbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0FQSVNoaW1zLmgJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvQVBJU2hpbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMzEgKzI4LDQwIEBACiAK
ICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIK
KyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNp
bmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
QVBJRW50cnlTaGltV2l0aG91dExvY2sgeworcHVibGljOgorICAgIGVudW0gUmVmR2xvYmFsRGF0
YVRhZyB7IERvbnRSZWZHbG9iYWxEYXRhID0gMCwgUmVmR2xvYmFsRGF0YSB9OworCiBwcm90ZWN0
ZWQ6Ci0gICAgQVBJRW50cnlTaGltV2l0aG91dExvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBib29sIHJlZ2lzdGVyVGhyZWFkKQotICAgICAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRh
KQorICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
Ym9vbCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0YVRhZyBzaG91bGRSZWZHbG9iYWxEYXRh
KQorICAgICAgICA6IG1fc2hvdWxkUmVmR2xvYmFsRGF0YShzaG91bGRSZWZHbG9iYWxEYXRhKQor
ICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQogICAgICAgICAsIG1fZW50cnlJZGVu
dGlmaWVyVGFibGUod3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZ2xv
YmFsRGF0YS0+aWRlbnRpZmllclRhYmxlKSkKICAgICB7CisgICAgICAgIGlmIChzaG91bGRSZWZH
bG9iYWxEYXRhKQorICAgICAgICAgICAgbV9nbG9iYWxEYXRhLT5yZWYoKTsKICAgICAgICAgVU5V
U0VEX1BBUkFNKHJlZ2lzdGVyVGhyZWFkKTsKICAgICAgICAgaWYgKHJlZ2lzdGVyVGhyZWFkKQog
ICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5tYWNoaW5lVGhyZWFkcygpLmFkZEN1cnJlbnRU
aHJlYWQoKTsKICAgICAgICAgbV9nbG9iYWxEYXRhLT5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+
c3luY2hyb25pemUoKTsKLSAgICAgICAgbV9nbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5zdGFy
dCgpOworICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuc3dlZXBlcigpLT5zeW5jaHJvbml6ZSgp
OwogICAgIH0KIAogICAgIH5BUElFbnRyeVNoaW1XaXRob3V0TG9jaygpCiAgICAgewotICAgICAg
ICBtX2dsb2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKICAgICAgICAgd3RmVGhyZWFk
RGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUobV9lbnRyeUlkZW50aWZpZXJUYWJsZSk7
CisgICAgICAgIGlmIChtX3Nob3VsZFJlZkdsb2JhbERhdGEpCisgICAgICAgICAgICBtX2dsb2Jh
bERhdGEtPmRlcmVmKCk7CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgorICAgIFJlZkds
b2JhbERhdGFUYWcgbV9zaG91bGRSZWZHbG9iYWxEYXRhOwogICAgIEpTR2xvYmFsRGF0YSogbV9n
bG9iYWxEYXRhOwogICAgIElkZW50aWZpZXJUYWJsZSogbV9lbnRyeUlkZW50aWZpZXJUYWJsZTsK
IH07CkBAIC02MSwyMCArNzAsMzggQEAgY2xhc3MgQVBJRW50cnlTaGltIDogcHVibGljIEFQSUVu
dHJ5U2hpbQogcHVibGljOgogICAgIC8vIE5vcm1hbCBBUEkgZW50cnkKICAgICBBUElFbnRyeVNo
aW0oRXhlY1N0YXRlKiBleGVjLCBib29sIHJlZ2lzdGVyVGhyZWFkID0gdHJ1ZSkKLSAgICAgICAg
OiBBUElFbnRyeVNoaW1XaXRob3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRo
cmVhZCkKLSAgICAgICAgLCBtX2xvY2soZXhlYykKKyAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRo
b3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0
YSkKKyAgICB7CisgICAgICAgIGluaXQoKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGlzIG5lY2Vzc2FyeSBmb3IgSGVhcFRpbWVyIHRvIHByZXZlbnQgaXQgZnJvbSBhY2NpZGVu
dGFsbHkgcmVzdXJyZWN0aW5nIAorICAgIC8vIHRoZSByZWYgY291bnQgb2YgYSAiZGVhZCIgSlNH
bG9iYWxEYXRhLgorICAgIEFQSUVudHJ5U2hpbShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFJl
Zkdsb2JhbERhdGFUYWcgcmVmR2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUp
CisgICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0YSwgcmVnaXN0ZXJU
aHJlYWQsIHJlZkdsb2JhbERhdGEpCiAgICAgeworICAgICAgICBpbml0KCk7CiAgICAgfQogCiAg
ICAgLy8gSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvciBvbmx5IGhhcyBhIGdsb2JhbERhdGEuCiAg
ICAgQVBJRW50cnlTaGltKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRo
cmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0
YSwgcmVnaXN0ZXJUaHJlYWQpCi0gICAgICAgICwgbV9sb2NrKGdsb2JhbERhdGEtPmlzU2hhcmVk
SW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5KQorICAgICAg
ICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKGdsb2JhbERhdGEsIHJlZ2lzdGVyVGhyZWFkLCBS
ZWZHbG9iYWxEYXRhKQogICAgIHsKKyAgICAgICAgaW5pdCgpOworICAgIH0KKworICAgIH5BUElF
bnRyeVNoaW0oKQorICAgIHsKKyAgICAgICAgbV9nbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5z
dG9wKCk7CisgICAgICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLnVubG9jaygpOwogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBKU0xvY2sgbV9sb2NrOworICAgIHZvaWQgaW5pdCgpCisgICAgewor
ICAgICAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5sb2NrKCk7CisgICAgICAgIG1fZ2xvYmFs
RGF0YS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsKKyAgICB9CiB9OwogCiBjbGFzcyBBUElDYWxs
YmFja1NoaW0gewpAQCAtODgsNyArMTE1LDYgQEAgcHVibGljOgogCiAgICAgfkFQSUNhbGxiYWNr
U2hpbSgpCiAgICAgewotICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuYWN0aXZpdHlDYWxsYmFj
aygpLT5zeW5jaHJvbml6ZSgpOwogICAgICAgICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElk
ZW50aWZpZXJUYWJsZShtX2dsb2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZSk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDYgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xv
YmFsQ29udGV4dENyZWF0ZQogICAgIC8vIElmIHRoZSBhcHBsaWNhdGlvbiB3YXMgbGlua2VkIGJl
Zm9yZSBKU0dsb2JhbENvbnRleHRDcmVhdGUgd2FzIGNoYW5nZWQgdG8gdXNlIGEgdW5pcXVlIEpT
R2xvYmFsRGF0YSwKICAgICAvLyB3ZSB1c2UgYSBzaGFyZWQgb25lIGZvciBiYWNrd2FyZHMgY29t
cGF0aWJpbGl0eS4KICAgICBpZiAoTlNWZXJzaW9uT2ZMaW5rVGltZUxpYnJhcnkoIkphdmFTY3Jp
cHRDb3JlIikgPD0gd2Via2l0Rmlyc3RWZXJzaW9uV2l0aENvbmN1cnJlbnRHbG9iYWxDb250ZXh0
cykgewotICAgICAgICBKU0xvY2sgbG9jayhMb2NrRm9yUmVhbCk7CiAgICAgICAgIHJldHVybiBK
U0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKHRvUmVmKCZKU0dsb2JhbERhdGE6OnNoYXJlZElu
c3RhbmNlKCkpLCBnbG9iYWxPYmplY3RDbGFzcyk7CiAgICAgfQogI2VuZGlmIC8vIE9TKERBUldJ
TikKQEAgLTkwLDExICs4OSw5IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRD
cmVhdGUKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKLSAgICBKU0xvY2sgbG9jayhM
b2NrRm9yUmVhbCk7CiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IGdyb3Vw
ID8gUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+KHRvSlMoZ3JvdXApKSA6IEpTR2xvYmFsRGF0YTo6
Y3JlYXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlwZVNtYWxsKTsKIAogICAgIEFQSUVudHJ5
U2hpbSBlbnRyeVNoaW0oZ2xvYmFsRGF0YS5nZXQoKSwgZmFsc2UpOwotCiAgICAgZ2xvYmFsRGF0
YS0+bWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsKIAogICAgIGlmICghZ2xvYmFsT2Jq
ZWN0Q2xhc3MpIHsKQEAgLTEyNCwxOCArMTIxLDE5IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0ds
b2JhbENvbnRleHRSZXRhaW4KIAogdm9pZCBKU0dsb2JhbENvbnRleHRSZWxlYXNlKEpTR2xvYmFs
Q29udGV4dFJlZiBjdHgpCiB7CisgICAgSWRlbnRpZmllclRhYmxlKiBzYXZlZElkZW50aWZpZXJU
YWJsZTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNMb2NrIGxvY2so
ZXhlYyk7CisgICAgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAotICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICBJZGVudGlm
aWVyVGFibGUqIHNhdmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJl
bnRJZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUpOworICAgICAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIHNh
dmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVy
VGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUpOwogCi0gICAgYm9vbCBwcm90ZWN0Q291
bnRJc1plcm8gPSBIZWFwOjpoZWFwKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPnVucHJv
dGVjdChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwotICAgIGlmIChwcm90ZWN0Q291bnRJ
c1plcm8pIHsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+c3lu
Y2hyb25pemUoKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVj
dEdyYXBoKCk7CisgICAgICAgIGJvb2wgcHJvdGVjdENvdW50SXNaZXJvID0gSGVhcDo6aGVhcChl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT51bnByb3RlY3QoZXhlYy0+ZHluYW1pY0dsb2Jh
bE9iamVjdCgpKTsKKyAgICAgICAgaWYgKHByb3RlY3RDb3VudElzWmVybykKKyAgICAgICAgICAg
IGdsb2JhbERhdGEuaGVhcC5yZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCgpOworICAgICAgICBn
bG9iYWxEYXRhLmRlcmVmKCk7CiAgICAgfQotICAgIGdsb2JhbERhdGEuZGVyZWYoKTsKIAogICAg
IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKHNhdmVkSWRlbnRpZmll
clRhYmxlKTsKIH0KQEAgLTE2Niw3ICsxNjQsNyBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNDb250
ZXh0R2V0R2xvYmFsQ29uCiBKU1N0cmluZ1JlZiBKU0NvbnRleHRDcmVhdGVCYWNrdHJhY2UoSlND
b250ZXh0UmVmIGN0eCwgdW5zaWduZWQgbWF4U3RhY2tTaXplKQogewogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2sgbG9jayhleGVjKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKIAogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICBVU3RyaW5nQnVp
bGRlciBidWlsZGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC02LDEwICs2LDggQEAgRVhQT1JUUwogICAgID8/MENv
bGxhdG9yQFdURkBAUUFFQFBCREBaCiAgICAgPz8wRGF0ZUluc3RhbmNlQEpTQ0BASUFFQFBBVkV4
ZWNTdGF0ZUAxQFBBVlN0cnVjdHVyZUAxQEBaCiAgICAgPz8wRGVmYXVsdEdDQWN0aXZpdHlDYWxs
YmFja0BKU0NAQFFBRUBQQVZIZWFwQDFAQFoKLSAgICA/PzBEcm9wQWxsTG9ja3NASlNMb2NrQEpT
Q0BAUUFFQFc0SlNMb2NrQmVoYXZpb3JAMkBAWgogICAgID8/MER5bmFtaWNHbG9iYWxPYmplY3RT
Y29wZUBKU0NAQFFBRUBBQVZKU0dsb2JhbERhdGFAMUBQQVZKU0dsb2JhbE9iamVjdEAxQEBaIAog
ICAgID8/MEludGVybmFsRnVuY3Rpb25ASlNDQEBJQUVAUEFWSlNHbG9iYWxPYmplY3RAMUBQQVZT
dHJ1Y3R1cmVAMUBAWgotICAgID8/MEpTTG9ja0BKU0NAQFFBRUBQQVZFeGVjU3RhdGVAMUBAWgog
ICAgID8/ME1ENUBXVEZAQFFBRUBYWgogICAgID8/ME11dGV4QFdURkBAUUFFQFhaCiAgICAgPz8w
UGFyYWxsZWxFbnZpcm9ubWVudEBXVEZAQFFBRUBQNkFYUEFYQFpJSEBaCkBAIC0xMjMsNyArMTIx
LDYgQEAgRVhQT1JUUwogICAgID9jcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlckBXVEZAQFlB
SVhaCiAgICAgP2NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzQFdURkBAWUFYUEFYSUBaCiAg
ICAgP2N1cnJlbnRUaHJlYWRAV1RGQEBZQUlYWgotICAgID9jdXJyZW50VGhyZWFkSXNIb2xkaW5n
TG9ja0BKU0xvY2tASlNDQEBTQV9OWFoKICAgICA/Y3VycmVudFRpbWVAV1RGQEBZQU5YWgogICAg
ID9kYXRhQENTdHJpbmdAV1RGQEBRQkVQQkRYWgogICAgID9kYXRhTG9nQFdURkBAWUFYUEJEWloK
QEAgLTIzNSwxMCArMjMyLDggQEAgRVhQT1JUUwogICAgID9qc093bmVkU3RyaW5nQEpTQ0BAWUFQ
QVZKU1N0cmluZ0AxQFBBVkpTR2xvYmFsRGF0YUAxQEFCVlVTdHJpbmdAMUBAWgogICAgID9qc1N0
cmluZ0BKU0NAQFlBUEFWSlNTdHJpbmdAMUBQQVZKU0dsb2JhbERhdGFAMUBBQlZVU3RyaW5nQDFA
QFoKICAgICA/bGVuZ3RoQENTdHJpbmdAV1RGQEBRQkVJWFoKLSAgICA/bG9ja0BKU0xvY2tASlND
QEBTQVhXNEpTTG9ja0JlaGF2aW9yQDJAQFoKICAgICA/bG9ja0BNdXRleEBXVEZAQFFBRVhYWgog
ICAgID9sb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXhAV1RGQEBZQVhYWgotICAg
ID9sb2NrQ291bnRASlNMb2NrQEpTQ0BAU0FIWFoKICAgICA/bWF0Y2hAUmVnRXhwQEpTQ0BAUUFF
SEFBVkpTR2xvYmFsRGF0YUAyQEFCVlVTdHJpbmdAMkBJQUFWPyRWZWN0b3JASCQwQ0FAQFdURkBA
QFoKICAgICA/bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcEBTdHJ1Y3R1cmVASlNDQEBBQUVYQUFWSlNH
bG9iYWxEYXRhQDJAQFoKICAgICA/bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lQFdURkBAWUFO
WFoKQEAgLTM1Miw3ICszNDcsNiBAQCBFWFBPUlRTCiAgICAgP3RyeUZpbmlzaENyZWF0aW9uVW5p
bml0aWFsaXplZEBKU0FycmF5QEpTQ0BASUFFUEFWMTJAQUFWSlNHbG9iYWxEYXRhQDJASUBaCiAg
ICAgP3RyeUxvY2tATXV0ZXhAV1RGQEBRQUVfTlhaCiAgICAgP3R5cGVARGVidWdnZXJDYWxsRnJh
bWVASlNDQEBRQkU/QVc0VHlwZUAxMkBYWgotICAgID91bmxvY2tASlNMb2NrQEpTQ0BAU0FYVzRK
U0xvY2tCZWhhdmlvckAyQEBaCiAgICAgP3VubG9ja0BNdXRleEBXVEZAQFFBRVhYWgogICAgID91
bmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleEBXVEZAQFlBWFhaCiAgICAgP3Vu
cHJvdGVjdEBIZWFwQEpTQ0BAUUFFX05WSlNWYWx1ZUAyQEBaCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDYgKzY2LDcgQEAgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeUFsbG9jYXRlUwog
ICAgIGlmIChpc092ZXJzaXplKGJ5dGVzKSkKICAgICAgICAgcmV0dXJuIHRyeUFsbG9jYXRlT3Zl
cnNpemUoYnl0ZXMsIG91dFB0cik7CiAgICAgCisgICAgQVNTRVJUKG1faGVhcC0+Z2xvYmFsRGF0
YSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgbV9oZWFw
LT5kaWRBbGxvY2F0ZShtX2FsbG9jYXRvci5jdXJyZW50Q2FwYWNpdHkoKSk7CiAKICAgICBhbGxv
Y2F0ZUJsb2NrKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2MCwxNSArMTYwLDkgQEAgc3RhdGljIGlubGluZSBzaXplX3QgcHJvcG9y
dGlvbmFsSGVhcFNpegogICAgIHJldHVybiAxLjI1ICogaGVhcFNpemU7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBpc1ZhbGlkU2hhcmVkSW5zdGFuY2VUaHJlYWRTdGF0ZSgpCitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNWYWxpZFNoYXJlZEluc3RhbmNlVGhyZWFkU3RhdGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKQogewotICAgIGlmICghSlNMb2NrOjpsb2NrQ291bnQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2Nr
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBnbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKTsKIH0K
IAogc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRUaHJlYWRTdGF0ZShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCkBAIC0xNzYsNyArMTcwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRU
aHJlYWRTdGF0ZShKUwogICAgIGlmIChnbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFibGUgIT0gd3Rm
VGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKGdsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSAmJiAhaXNWYWxp
ZFNoYXJlZEluc3RhbmNlVGhyZWFkU3RhdGUoKSkKKyAgICBpZiAoZ2xvYmFsRGF0YS0+aXNTaGFy
ZWRJbnN0YW5jZSgpICYmICFpc1ZhbGlkU2hhcmVkSW5zdGFuY2VUaHJlYWRTdGF0ZShnbG9iYWxE
YXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjcs
NyArMzIxLDcgQEAgdm9pZCBIZWFwOjpkaWRBYmFuZG9uKHNpemVfdCBieXRlcykKIHZvaWQgSGVh
cDo6cHJvdGVjdChKU1ZhbHVlIGspCiB7CiAgICAgQVNTRVJUKGspOwotICAgIEFTU0VSVChKU0xv
Y2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgfHwgIW1fZ2xvYmFsRGF0YS0+aXNTaGFy
ZWRJbnN0YW5jZSgpKTsKKyAgICBBU1NFUlQobV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVu
dFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAKICAgICBpZiAoIWsuaXNDZWxsKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTMzOCw3ICszMzIsNyBAQCB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBr
KQogYm9vbCBIZWFwOjp1bnByb3RlY3QoSlNWYWx1ZSBrKQogewogICAgIEFTU0VSVChrKTsKLSAg
ICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHx8ICFtX2dsb2Jh
bERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSk7CisgICAgQVNTRVJUKG1fZ2xvYmFsRGF0YS0+YXBp
TG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogCiAgICAgaWYgKCFrLmlzQ2Vs
bCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02OTIsNiArNjg2LDcgQEAgdm9pZCBIZWFw
Ojpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBs
aW5nUmVnaW9uKCJHYXJiYWdlIENvbGxlY3Rpb24iKTsKICAgICAKICAgICBHQ1BIQVNFKENvbGxl
Y3QpOworICAgIEFTU0VSVChnbG9iYWxEYXRhKCktPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nTG9jaygpKTsKICAgICBBU1NFUlQoZ2xvYmFsRGF0YSgpLT5pZGVudGlmaWVyVGFibGUg
PT0gd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CiAgICAgQVNTRVJU
KG1faXNTYWZlVG9Db2xsZWN0KTsKICAgICBKQVZBU0NSSVBUQ09SRV9HQ19CRUdJTigpOwpAQCAt
Nzc3LDE5ICs3NzIsMTkgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9n
ZwogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX0VORCgpOwogfQogCi12b2lkIEhlYXA6OnNldEFjdGl2
aXR5Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2aXR5Q2FsbGJhY2s+IGFjdGl2aXR5Q2FsbGJh
Y2spCit2b2lkIEhlYXA6OnNldEFjdGl2aXR5Q2FsbGJhY2soR0NBY3Rpdml0eUNhbGxiYWNrKiBh
Y3Rpdml0eUNhbGxiYWNrKQogewogICAgIG1fYWN0aXZpdHlDYWxsYmFjayA9IGFjdGl2aXR5Q2Fs
bGJhY2s7CiB9CiAKIEdDQWN0aXZpdHlDYWxsYmFjayogSGVhcDo6YWN0aXZpdHlDYWxsYmFjaygp
CiB7Ci0gICAgcmV0dXJuIG1fYWN0aXZpdHlDYWxsYmFjay5nZXQoKTsKKyAgICByZXR1cm4gbV9h
Y3Rpdml0eUNhbGxiYWNrOwogfQogCiBJbmNyZW1lbnRhbFN3ZWVwZXIqIEhlYXA6OnN3ZWVwZXIo
KQogewotICAgIHJldHVybiBtX3N3ZWVwZXIuZ2V0KCk7CisgICAgcmV0dXJuIG1fc3dlZXBlcjsK
IH0KIAogdm9pZCBIZWFwOjpzZXRHYXJiYWdlQ29sbGVjdGlvblRpbWVyRW5hYmxlZChib29sIGVu
YWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
OTksMTAgKzk5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNoaW5lVGhyZWFkcyYg
bWFjaGluZVRocmVhZHMoKSB7IHJldHVybiBtX21hY2hpbmVUaHJlYWRzOyB9CiAKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrKiBhY3Rpdml0eUNhbGxiYWNrKCk7
Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0QWN0aXZpdHlDYWxsYmFjayhQYXNz
T3duUHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4pOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHNldEFjdGl2aXR5Q2FsbGJhY2soR0NBY3Rpdml0eUNhbGxiYWNrKik7CiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0R2FyYmFnZUNvbGxlY3Rpb25UaW1lckVuYWJsZWQoYm9v
bCk7CiAKLSAgICAgICAgSW5jcmVtZW50YWxTd2VlcGVyKiBzd2VlcGVyKCk7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIEluY3JlbWVudGFsU3dlZXBlciogc3dlZXBlcigpOwogCiAgICAgICAg
IC8vIHRydWUgaWYgYW4gYWxsb2NhdGlvbiBvciBjb2xsZWN0aW9uIGlzIGluIHByb2dyZXNzCiAg
ICAgICAgIGlubGluZSBib29sIGlzQnVzeSgpOwpAQCAtMjM3LDEwICsyMzcsMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGRvdWJsZSBtX2xhc3RHQ0xlbmd0aDsKICAgICAgICAgZG91Ymxl
IG1fbGFzdENvZGVEaXNjYXJkVGltZTsKIAotICAgICAgICBPd25QdHI8R0NBY3Rpdml0eUNhbGxi
YWNrPiBtX2FjdGl2aXR5Q2FsbGJhY2s7Ci0gICAgICAgIE93blB0cjxJbmNyZW1lbnRhbFN3ZWVw
ZXI+IG1fc3dlZXBlcjsKLSAgICAgICAgCiAgICAgICAgIERvdWJseUxpbmtlZExpc3Q8RXhlY3V0
YWJsZUJhc2U+IG1fY29tcGlsZWRDb2RlOworICAgICAgICAKKyAgICAgICAgR0NBY3Rpdml0eUNh
bGxiYWNrKiBtX2FjdGl2aXR5Q2FsbGJhY2s7CisgICAgICAgIEluY3JlbWVudGFsU3dlZXBlciog
bV9zd2VlcGVyOwogICAgIH07CiAKICAgICBpbmxpbmUgYm9vbCBIZWFwOjpzaG91bGRDb2xsZWN0
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSGVhcFRpbWVyLmgiCiAKKyNpbmNsdWRlICJBUElTaGltcy5oIgorI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCisjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJTY29wZUNoYWluLmgi
CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTIxLDcg
KzI1LDggQEAgSGVhcFRpbWVyOjpIZWFwVGltZXIoSlNHbG9iYWxEYXRhKiBnbG9iYQogCiBIZWFw
VGltZXI6On5IZWFwVGltZXIoKQogewotICAgIGludmFsaWRhdGUoKTsKKyAgICBDRlJ1bkxvb3BS
ZW1vdmVUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1fdGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21t
b25Nb2Rlcyk7CisgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKG1fdGltZXIuZ2V0KCkpOwog
fQogCiB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25pemUoKQpAQCAtMzUsMTQgKzQwLDM3IEBAIHZv
aWQgSGVhcFRpbWVyOjpzeW5jaHJvbml6ZSgpCiAKIHZvaWQgSGVhcFRpbWVyOjppbnZhbGlkYXRl
KCkKIHsKLSAgICBDRlJ1bkxvb3BSZW1vdmVUaW1lcihtX3J1bkxvb3AuZ2V0KCksIG1fdGltZXIu
Z2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Ci0gICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlk
YXRlKG1fdGltZXIuZ2V0KCkpOworICAgIG1fZ2xvYmFsRGF0YSA9IDA7CisgICAgQ0ZSdW5Mb29w
VGltZXJTZXROZXh0RmlyZURhdGUobV90aW1lci5nZXQoKSwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJy
ZW50KCkgLSBzX2RlY2FkZSk7Cit9CisKK3ZvaWQgSGVhcFRpbWVyOjpkaWRTdGFydFZNU2h1dGRv
d24oKQoreworICAgIGlmIChDRlJ1bkxvb3BHZXRDdXJyZW50KCkgPT0gbV9ydW5Mb29wLmdldCgp
KSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKCFtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJy
ZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9zaHV0
ZG93bk11dGV4KTsKKyAgICBpbnZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgSGVhcFRpbWVyOjp0aW1l
ckRpZEZpcmUoQ0ZSdW5Mb29wVGltZXJSZWYsIHZvaWQqIGluZm8pCiB7CiAgICAgSGVhcFRpbWVy
KiBhZ2VudCA9IHN0YXRpY19jYXN0PEhlYXBUaW1lcio+KGluZm8pOwotICAgIGFnZW50LT5kb1dv
cmsoKTsKKyAgICBhZ2VudC0+bV9zaHV0ZG93bk11dGV4LmxvY2soKTsKKyAgICBpZiAoIWFnZW50
LT5tX2dsb2JhbERhdGEpIHsKKyAgICAgICAgYWdlbnQtPm1fc2h1dGRvd25NdXRleC51bmxvY2so
KTsKKyAgICAgICAgZGVsZXRlIGFnZW50OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHsK
KyAgICAgICAgLy8gV2UgZG9uJ3QgcmVmIGhlcmUgdG8gcHJldmVudCB1cyBmcm9tIHJlc3VycmVj
dGluZyB0aGUgcmVmIGNvdW50IG9mIGEgImRlYWQiIEpTR2xvYmFsRGF0YS4KKyAgICAgICAgQVBJ
RW50cnlTaGltIHNoaW0oYWdlbnQtPm1fZ2xvYmFsRGF0YSwgQVBJRW50cnlTaGltV2l0aG91dExv
Y2s6OkRvbnRSZWZHbG9iYWxEYXRhKTsKKyAgICAgICAgYWdlbnQtPmRvV29yaygpOworICAgIH0K
KyAgICBhZ2VudC0+bV9zaHV0ZG93bk11dGV4LnVubG9jaygpOwogfQogCiAjZWxzZQpAQCAtNTYs
NiArODQsMTEgQEAgSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKIHsKIH0KIAordm9pZCBIZWFwVGlt
ZXI6OmRpZFN0YXJ0Vk1TaHV0ZG93bigpCit7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKIHZvaWQg
SGVhcFRpbWVyOjpzeW5jaHJvbml6ZSgpCiB7CiB9CkBAIC02NCw3ICs5Nyw2IEBAIHZvaWQgSGVh
cFRpbWVyOjppbnZhbGlkYXRlKCkKIHsKIH0KIAotCiAjZW5kaWYKICAgICAKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFRpbWVyLmgJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
LDYgKzIsNyBAQAogI2RlZmluZSBIZWFwVGltZXJfaAogCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogI2lmIFVTRShDRikKICNpbmNsdWRl
IDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgpAQCAtMjEsNyArMjIsOCBAQCBwdWJs
aWM6CiAjZW5kaWYKICAgICAKICAgICB2aXJ0dWFsIH5IZWFwVGltZXIoKTsKLSAgICAKKworICAg
IHZvaWQgZGlkU3RhcnRWTVNodXRkb3duKCk7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXpl
KCk7CiAgICAgdmlydHVhbCB2b2lkIGRvV29yaygpID0gMDsKICAgICAKQEAgLTM0LDYgKzM2LDgg
QEAgcHJvdGVjdGVkOgogICAgIFJldGFpblB0cjxDRlJ1bkxvb3BUaW1lclJlZj4gbV90aW1lcjsK
ICAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wUmVmPiBtX3J1bkxvb3A7CiAgICAgQ0ZSdW5Mb29wVGlt
ZXJDb250ZXh0IG1fY29udGV4dDsKKworICAgIE11dGV4IG1fc2h1dGRvd25NdXRleDsKICNlbmRp
ZgogICAgIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3Jl
bWVudGFsU3dlZXBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAsNyArMjAsNiBAQCBzdGF0aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgc3dlZXBUaW1lTXVs
CiAKIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpkb1dvcmsoKQogewotICAgIEFQSUVudHJ5U2hp
bSBzaGltKG1fZ2xvYmFsRGF0YSk7CiAgICAgZG9Td2VlcChXVEY6Om1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpKTsKIH0KICAgICAKQEAgLTMwLDkgKzI5LDkgQEAgSW5jcmVtZW50YWxTd2Vl
cGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIoSAogewogfQogCi1QYXNzT3duUHRyPEluY3JlbWVudGFs
U3dlZXBlcj4gSW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKK0luY3JlbWVu
dGFsU3dlZXBlciogSW5jcmVtZW50YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLCBDRlJ1bkxvb3BH
ZXRDdXJyZW50KCkpKTsKKyAgICByZXR1cm4gbmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLCBD
RlJ1bkxvb3BHZXRDdXJyZW50KCkpOwogfQogCiB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6c2No
ZWR1bGVUaW1lcigpCkBAIC04NCw5ICs4Myw5IEBAIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpk
b1dvcmsoKQogewogfQogCi1QYXNzT3duUHRyPEluY3JlbWVudGFsU3dlZXBlcj4gSW5jcmVtZW50
YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKK0luY3JlbWVudGFsU3dlZXBlciogSW5jcmVt
ZW50YWxTd2VlcGVyOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLT5nbG9iYWxEYXRhKCkpKTsKKyAgICByZXR1cm4g
bmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLT5nbG9iYWxEYXRhKCkpOwogfQogCiB2b2lkIElu
Y3JlbWVudGFsU3dlZXBlcjo6c3RhcnRTd2VlcGluZyhjb25zdCBIYXNoU2V0PE1hcmtlZEJsb2Nr
Kj4mKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxT
d2VlcGVyLmgJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0luY3JlbWVudGFsU3dlZXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNCw3ICsxNCw3IEBAIGNs
YXNzIEhlYXA7CiAgICAgCiBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXIgOiBwdWJsaWMgSGVhcFRp
bWVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+
IGNyZWF0ZShIZWFwKik7CisgICAgc3RhdGljIEluY3JlbWVudGFsU3dlZXBlciogY3JlYXRlKEhl
YXAqKTsKICAgICB2b2lkIHN0YXJ0U3dlZXBpbmcoY29uc3QgSGFzaFNldDxNYXJrZWRCbG9jayo+
JiBibG9ja1NuYXBzaG90KTsKICAgICB2aXJ0dWFsIHZvaWQgZG9Xb3JrKCk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgIkdDQWN0aXZp
dHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEu
aCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01
Niw2ICs1Nyw3IEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXQKICAg
ICAKIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSgpCiB7CisgICAgQVNT
RVJUKG1faGVhcC0+Z2xvYmFsRGF0YSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGlu
Z0xvY2soKSk7CiAjaWYgQ09MTEVDVF9PTl9FVkVSWV9BTExPQ0FUSU9OCiAgICAgbV9oZWFwLT5j
b2xsZWN0QWxsR2FyYmFnZSgpOwogICAgIEFTU0VSVChtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9n
cmVzcyA9PSBOb09wZXJhdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9X
ZWFrQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtCbG9jay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw4ICsxMjcsMTAgQEAgdm9p
ZCBXZWFrQmxvY2s6OnJlYXAoKQogICAgICAgICBpZiAod2Vha0ltcGwtPnN0YXRlKCkgPiBXZWFr
SW1wbDo6RGVhZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChIZWFwOjpp
c01hcmtlZCh3ZWFrSW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgpKSkKKyAgICAgICAgaWYgKEhlYXA6
OmlzTWFya2VkKHdlYWtJbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpKSB7CisgICAgICAgICAgICBB
U1NFUlQod2Vha0ltcGwtPnN0YXRlKCkgPT0gV2Vha0ltcGw6OkxpdmUpOwogICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KIAogICAgICAgICB3ZWFrSW1wbC0+c2V0U3RhdGUoV2Vha0lt
cGw6OkRlYWQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogYm9vbCBjaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSogcmV0dXJuZWRFeGNlcHRpb24pCiB7Ci0g
ICAgSlNMb2NrIGxvY2soZXhlYyk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
QVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5pZGVudGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0
YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSk7CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZSog
cHJvZ3JhbSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsKQEAgLTUz
LDcgKzUzLDcgQEAgYm9vbCBjaGVja1N5bnRheChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IAogCiBK
U1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW4sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUq
IHJldHVybmVkRXhjZXB0aW9uKQogewotICAgIEpTTG9jayBsb2NrKGV4ZWMpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuaWRlbnRp
ZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwog
ICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIENS
QVNIKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2Fs
bGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0Fj
dGl2aXR5Q2FsbGJhY2suaAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcg
KzY5LDcgQEAgcHJvdGVjdGVkOgogCiBjbGFzcyBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrIDog
cHVibGljIEdDQWN0aXZpdHlDYWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25Q
dHI8RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjaz4gY3JlYXRlKEhlYXAqKTsKKyAgICBzdGF0aWMg
RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayogY3JlYXRlKEhlYXAqKTsKIAogICAgIERlZmF1bHRH
Q0FjdGl2aXR5Q2FsbGJhY2soSGVhcCopOwogCkBAIC05MSw5ICs5MSw5IEBAIHByaXZhdGU6CiAj
ZW5kaWYKIH07CiAKLWlubGluZSBQYXNzT3duUHRyPERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s+
IERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZShIZWFwKiBoZWFwKQoraW5saW5lIERl
ZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2sqIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0
ZShIZWFwKiBoZWFwKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVmYXVsdEdDQWN0aXZp
dHlDYWxsYmFjayhoZWFwKSk7CisgICAgcmV0dXJuIG5ldyBEZWZhdWx0R0NBY3Rpdml0eUNhbGxi
YWNrKGhlYXApOwogfQogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDgg
KzM0LDEwIEBACiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJEZWJ1
Z2dlckFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCisjaW5j
bHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAj
aW5jbHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5oIgorI2luY2x1ZGUgIkluY3JlbWVudGFsU3dl
ZXBlci5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9u
LmgiCiAjaW5jbHVkZSAiSlNBUElWYWx1ZVdyYXBwZXIuaCIKQEAgLTE3OCwxMiArMTgwLDkgQEAg
SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogewogICAgIGludGVycHJl
dGVyID0gbmV3IEludGVycHJldGVyOwogCi0gICAgaWYgKGlzU2hhcmVkSW5zdGFuY2UoKSkKLSAg
ICAgICAgdHVybk9mZlZlcmlmaWVyKCk7Ci0KICAgICAvLyBOZWVkIHRvIGJlIGNhcmVmdWwgdG8g
a2VlcCBldmVyeXRoaW5nIGNvbnNpc3RlbnQgaGVyZQorICAgIEpTTG9ja0hvbGRlciBsb2NrKHRo
aXMpOwogICAgIElkZW50aWZpZXJUYWJsZSogZXhpc3RpbmdFbnRyeUlkZW50aWZpZXJUYWJsZSA9
IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGlkZW50aWZpZXJUYWJs
ZSk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBzdHJ1Y3R1
cmVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1cmU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcykp
OwogICAgIGRlYnVnZ2VyQWN0aXZhdGlvblN0cnVjdHVyZS5zZXQoKnRoaXMsIERlYnVnZ2VyQWN0
aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGFjdGl2
YXRpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKQEAgLTIyMiw2ICsyMjEsOSBAQCBKU0dsb2JhbERhdGE6OkpT
R2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAKIEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgp
CiB7CisgICAgQVNTRVJUKCFtX2FwaUxvY2suY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7
CisgICAgaGVhcC5hY3Rpdml0eUNhbGxiYWNrKCktPmRpZFN0YXJ0Vk1TaHV0ZG93bigpOworICAg
IGhlYXAuc3dlZXBlcigpLT5kaWRTdGFydFZNU2h1dGRvd24oKTsKICAgICBoZWFwLmxhc3RDaGFu
Y2VUb0ZpbmFsaXplKCk7CiAKICAgICBkZWxldGUgaW50ZXJwcmV0ZXI7CkBAIC0zMTEsNiArMzEz
LDcgQEAgYm9vbCBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlRXhpc3RzKAogCiBKU0dsb2Jh
bERhdGEmIEpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2UoKQogeworICAgIEdsb2JhbEpTTG9j
ayBnbG9iYWxMb2NrOwogICAgIEpTR2xvYmFsRGF0YSomIGluc3RhbmNlID0gc2hhcmVkSW5zdGFu
Y2VJbnRlcm5hbCgpOwogICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICAgaW5zdGFuY2UgPSBh
ZG9wdFJlZihuZXcgSlNHbG9iYWxEYXRhKEFQSVNoYXJlZCwgVGhyZWFkU3RhY2tUeXBlU21hbGws
IFNtYWxsSGVhcCkpLmxlYWtSZWYoKTsKQEAgLTMyMSw3ICszMjQsNiBAQCBKU0dsb2JhbERhdGEm
IEpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuCiAKIEpTR2xvYmFsRGF0YSomIEpTR2xvYmFsRGF0
YTo6c2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpCiB7Ci0gICAgQVNTRVJUKEpTTG9jazo6Y3VycmVu
dFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgc3RhdGljIEpTR2xvYmFsRGF0YSogc2hhcmVk
SW5zdGFuY2U7CiAgICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIklu
dHJpbnNpYy5oIgogI2luY2x1ZGUgIkpJVFN0dWJzLmgiCisjaW5jbHVkZSAiSlNMb2NrLmgiCiAj
aW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIk51
bWVyaWNTdHJpbmdzLmgiCkBAIC00Niw4ICs0Nyw4IEBACiAjaW5jbHVkZSA8d3RmL0J1bXBQb2lu
dGVyQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Np
bXBsZVN0YXRzLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEu
aD4KICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkBAIC0xNTIsNyArMTUzLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgfTsKICNlbmRpZgogCi0gICAgY2xhc3MgSlNHbG9iYWxEYXRhIDogcHVi
bGljIFJlZkNvdW50ZWQ8SlNHbG9iYWxEYXRhPiB7CisgICAgY2xhc3MgSlNHbG9iYWxEYXRhIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEpTR2xvYmFsRGF0YT4gewogICAgIHB1YmxpYzoK
ICAgICAgICAgLy8gV2ViQ29yZSBoYXMgYSBvbmUtdG8tb25lIG1hcHBpbmcgb2YgdGhyZWFkcyB0
byBKU0dsb2JhbERhdGFzOwogICAgICAgICAvLyBlaXRoZXIgY3JlYXRlKCkgb3IgY3JlYXRlTGVh
a2VkKCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UKQEAgLTE4MCw2ICsxODEsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBtYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFk
cygpIHsgaGVhcC5tYWNoaW5lVGhyZWFkcygpLm1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRz
KCk7IH0KIAorICAgIHByaXZhdGU6CisgICAgICAgIEpTTG9jayBtX2FwaUxvY2s7CisKKyAgICBw
dWJsaWM6CiAgICAgICAgIEhlYXAgaGVhcDsgLy8gVGhlIGhlYXAgaXMgb3VyIGZpcnN0IGRhdGEg
bWVtYmVyIHRvIGVuc3VyZSB0aGF0IGl0J3MgZGVzdHJ1Y3RlZCBhZnRlciBhbGwgdGhlIG9iamVj
dHMgdGhhdCByZWZlcmVuY2UgaXQuCiAKICAgICAgICAgR2xvYmFsRGF0YVR5cGUgZ2xvYmFsRGF0
YVR5cGU7CkBAIC00MDksNiArNDE0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJlZ2lz
dGVyVHlwZWRBcnJheUZ1bmN0aW9uKGZsb2F0NjQsIEZsb2F0NjQpOwogI3VuZGVmIHJlZ2lzdGVy
VHlwZWRBcnJheUZ1bmN0aW9uCiAKKyAgICAgICAgSlNMb2NrJiBhcGlMb2NrKCkgeyByZXR1cm4g
bV9hcGlMb2NrOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDggKzExNCw2IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgaW5s
aW5lIHZvaWQKIAogSlNHbG9iYWxPYmplY3Q6On5KU0dsb2JhbE9iamVjdCgpCiB7Ci0gICAgQVNT
RVJUKEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7Ci0KICAgICBpZiAobV9k
ZWJ1Z2dlcikKICAgICAgICAgbV9kZWJ1Z2dlci0+ZGV0YWNoKHRoaXMpOwogCkBAIC0xMzAsNyAr
MTI4LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbAogCiB2b2lk
IEpTR2xvYmFsT2JqZWN0Ojppbml0KEpTT2JqZWN0KiB0aGlzVmFsdWUpCiB7Ci0gICAgQVNTRVJU
KEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CisgICAgQVNTRVJUKGdsb2Jh
bERhdGEoKS5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgCiAg
ICAgbV9nbG9iYWxTY29wZUNoYWluLnNldChnbG9iYWxEYXRhKCksIHRoaXMsIFNjb3BlQ2hhaW5O
b2RlOjpjcmVhdGUoMCwgdGhpcywgJmdsb2JhbERhdGEoKSwgdGhpcywgdGhpc1ZhbHVlKSk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkocmV2aXNpb24g
MTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1
ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAi
SlNPYmplY3QuaCIKICNpbmNsdWRlICJTY29wZUNoYWluLmgiCiAKQEAgLTM4LDk0ICszOSw5NiBA
QCBuYW1lc3BhY2UgSlNDIHsKICNpZiAoT1MoREFSV0lOKSB8fCBVU0UoUFRIUkVBRFMpKQogCiAv
LyBBY3F1aXJlIHRoaXMgbXV0ZXggYmVmb3JlIGFjY2Vzc2luZyBsb2NrLXJlbGF0ZWQgZGF0YS4K
LXN0YXRpYyBwdGhyZWFkX211dGV4X3QgSlNNdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTEla
RVI7CitzdGF0aWMgcHRocmVhZF9tdXRleF90IGdpYW50R2xvYmFsSlNMb2NrID0gUFRIUkVBRF9N
VVRFWF9JTklUSUFMSVpFUjsKIAotLy8gVGhyZWFkLXNwZWNpZmljIGtleSB0aGF0IHRlbGxzIHdo
ZXRoZXIgYSB0aHJlYWQgaG9sZHMgdGhlIEpTTXV0ZXgsIGFuZCBob3cgbWFueSB0aW1lcyBpdCB3
YXMgdGFrZW4gcmVjdXJzaXZlbHkuCi1wdGhyZWFkX2tleV90IEpTTG9ja0NvdW50OworR2xvYmFs
SlNMb2NrOjpHbG9iYWxKU0xvY2soKQoreworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ2lhbnRH
bG9iYWxKU0xvY2spOworfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVKU0xvY2tDb3VudCgpCitHbG9i
YWxKU0xvY2s6On5HbG9iYWxKU0xvY2soKQogewotICAgIHB0aHJlYWRfa2V5X2NyZWF0ZSgmSlNM
b2NrQ291bnQsIDApOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnaWFudEdsb2JhbEpTTG9j
ayk7CiB9CiAKLXB0aHJlYWRfb25jZV90IGNyZWF0ZUpTTG9ja0NvdW50T25jZSA9IFBUSFJFQURf
T05DRV9JTklUOworSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoRXhlY1N0YXRlKiBleGVjKQor
ICAgIDogbV9nbG9iYWxEYXRhKCZleGVjLT5nbG9iYWxEYXRhKCkpCit7CisgICAgbV9nbG9iYWxE
YXRhLT5hcGlMb2NrKCkubG9jaygpOworfQogCi0vLyBMb2NrIG5lc3RpbmcgY291bnQuCi1pbnRw
dHJfdCBKU0xvY2s6OmxvY2tDb3VudCgpCitKU0xvY2tIb2xkZXI6OkpTTG9ja0hvbGRlcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCisgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKIHsK
LSAgICBwdGhyZWFkX29uY2UoJmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNMb2NrQ291
bnQpOworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKK30KIAotICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGludHB0cl90PihwdGhyZWFkX2dldHNwZWNpZmljKEpTTG9ja0Nv
dW50KSk7CitKU0xvY2tIb2xkZXI6OkpTTG9ja0hvbGRlcihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCisgICAgOiBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCit7CisgICAgbV9nbG9iYWxEYXRh
LT5hcGlMb2NrKCkubG9jaygpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRMb2NrQ291bnQoaW50cHRy
X3QgY291bnQpCitKU0xvY2tIb2xkZXI6On5KU0xvY2tIb2xkZXIoKQogewotICAgIEFTU0VSVChj
b3VudCA+PSAwKTsKLSAgICBwdGhyZWFkX3NldHNwZWNpZmljKEpTTG9ja0NvdW50LCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihjb3VudCkpOworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLnVu
bG9jaygpOwogfQogCi1KU0xvY2s6OkpTTG9jayhFeGVjU3RhdGUqIGV4ZWMpCi0gICAgOiBtX2xv
Y2tCZWhhdmlvcihleGVjLT5nbG9iYWxEYXRhKCkuaXNTaGFyZWRJbnN0YW5jZSgpID8gTG9ja0Zv
clJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpCitKU0xvY2s6OkpTTG9jaygpCisgICAgOiBt
X2xvY2tDb3VudCgwKQogewotICAgIGxvY2sobV9sb2NrQmVoYXZpb3IpOworICAgIG1fc3Bpbkxv
Y2suSW5pdCgpOwogfQogCi1KU0xvY2s6OkpTTG9jayhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
Ci0gICAgOiBtX2xvY2tCZWhhdmlvcihnbG9iYWxEYXRhLT5pc1NoYXJlZEluc3RhbmNlKCkgPyBM
b2NrRm9yUmVhbCA6IFNpbGVuY2VBc3NlcnRpb25zT25seSkKK0pTTG9jazo6fkpTTG9jaygpCiB7
Ci0gICAgbG9jayhtX2xvY2tCZWhhdmlvcik7CiB9CiAKLXZvaWQgSlNMb2NrOjpsb2NrKEpTTG9j
a0JlaGF2aW9yIGxvY2tCZWhhdmlvcikKK3ZvaWQgSlNMb2NrOjpsb2NrKCkKIHsKLSNpZmRlZiBO
REVCVUcKLSAgICAvLyBMb2NraW5nICJub3QgZm9yIHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0
dXJlLgotICAgIGlmIChsb2NrQmVoYXZpb3IgPT0gU2lsZW5jZUFzc2VydGlvbnNPbmx5KQotICAg
ICAgICByZXR1cm47Ci0jZW5kaWYKKyAgICBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQg
PSBXVEY6OmN1cnJlbnRUaHJlYWQoKTsKKyAgICB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGhv
bGRlcigmbV9zcGluTG9jayk7CisgICAgICAgIGlmIChtX293bmVyVGhyZWFkID09IGN1cnJlbnRU
aHJlYWQgJiYgbV9sb2NrQ291bnQpIHsKKyAgICAgICAgICAgIG1fbG9ja0NvdW50Kys7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBwdGhyZWFkX29uY2UoJmNy
ZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNMb2NrQ291bnQpOworICAgIG1fbG9jay5sb2Nr
KCk7CiAKLSAgICBpbnRwdHJfdCBjdXJyZW50TG9ja0NvdW50ID0gbG9ja0NvdW50KCk7Ci0gICAg
aWYgKCFjdXJyZW50TG9ja0NvdW50ICYmIGxvY2tCZWhhdmlvciA9PSBMb2NrRm9yUmVhbCkgewot
ICAgICAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9tdXRleF9sb2NrKCZKU011dGV4KTsKLSAgICAg
ICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsICFyZXN1bHQpOworICAgIHsKKyAgICAgICAgU3Bpbkxv
Y2tIb2xkZXIgaG9sZGVyKCZtX3NwaW5Mb2NrKTsKKyAgICAgICAgbV9vd25lclRocmVhZCA9IGN1
cnJlbnRUaHJlYWQ7CisgICAgICAgIEFTU0VSVCghbV9sb2NrQ291bnQpOworICAgICAgICBtX2xv
Y2tDb3VudCA9IDE7CiAgICAgfQotICAgIHNldExvY2tDb3VudChjdXJyZW50TG9ja0NvdW50ICsg
MSk7CiB9CiAKLXZvaWQgSlNMb2NrOjp1bmxvY2soSlNMb2NrQmVoYXZpb3IgbG9ja0JlaGF2aW9y
KQordm9pZCBKU0xvY2s6OnVubG9jaygpCiB7Ci0gICAgQVNTRVJUKGxvY2tDb3VudCgpKTsKKyAg
ICBBU1NFUlQoY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAKLSNpZmRlZiBOREVCVUcK
LSAgICAvLyBMb2NraW5nICJub3QgZm9yIHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0dXJlLgot
ICAgIGlmIChsb2NrQmVoYXZpb3IgPT0gU2lsZW5jZUFzc2VydGlvbnNPbmx5KQotICAgICAgICBy
ZXR1cm47Ci0jZW5kaWYKKyAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJm1fc3BpbkxvY2spOwor
ICAgIG1fbG9ja0NvdW50LS07CiAKLSAgICBpbnRwdHJfdCBuZXdMb2NrQ291bnQgPSBsb2NrQ291
bnQoKSAtIDE7Ci0gICAgc2V0TG9ja0NvdW50KG5ld0xvY2tDb3VudCk7Ci0gICAgaWYgKCFuZXdM
b2NrQ291bnQgJiYgbG9ja0JlaGF2aW9yID09IExvY2tGb3JSZWFsKSB7Ci0gICAgICAgIGludCBy
ZXN1bHQgPSBwdGhyZWFkX211dGV4X3VubG9jaygmSlNNdXRleCk7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0LCAhcmVzdWx0KTsKLSAgICB9CisgICAgaWYgKCFtX2xvY2tDb3VudCkKKyAg
ICAgICAgbV9sb2NrLnVubG9jaygpOwogfQogCiB2b2lkIEpTTG9jazo6bG9jayhFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgbG9jayhleGVjLT5nbG9iYWxEYXRhKCkuaXNTaGFyZWRJbnN0YW5jZSgp
ID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIGV4ZWMtPmdsb2Jh
bERhdGEoKS5hcGlMb2NrKCkubG9jaygpOwogfQogCiB2b2lkIEpTTG9jazo6dW5sb2NrKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICB1bmxvY2soZXhlYy0+Z2xvYmFsRGF0YSgpLmlzU2hhcmVkSW5z
dGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBleGVj
LT5nbG9iYWxEYXRhKCkuYXBpTG9jaygpLnVubG9jaygpOwogfQogCiBib29sIEpTTG9jazo6Y3Vy
cmVudFRocmVhZElzSG9sZGluZ0xvY2soKQogewotICAgIHB0aHJlYWRfb25jZSgmY3JlYXRlSlNM
b2NrQ291bnRPbmNlLCBjcmVhdGVKU0xvY2tDb3VudCk7Ci0gICAgcmV0dXJuICEhcHRocmVhZF9n
ZXRzcGVjaWZpYyhKU0xvY2tDb3VudCk7CisgICAgcmV0dXJuIG1fbG9ja0NvdW50ICYmIG1fb3du
ZXJUaHJlYWQgPT0gV1RGOjpjdXJyZW50VGhyZWFkKCk7CiB9CiAKIC8vIFRoaXMgaXMgZmFpcmx5
IG5hc3R5LiAgV2UgYWxsb3cgbXVsdGlwbGUgdGhyZWFkcyB0byBydW4gb24gdGhlIHNhbWUKQEAg
LTE0OSw3ICsxNTIsNyBAQCBib29sIEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2so
CiAvLyB0aGlzIHRvIGhhcHBlbiwgYW5kIHdlcmUgaXRzIHN0YWNrIHRvIGdyb3cgZnVydGhlciwg
dGhlbiBpdCBtYXkgcG90ZW50aWFsbHkKIC8vIHdyaXRlIG92ZXIgdGhlIHNlY29uZCB0aHJlYWQn
cyBjYWxsIGZyYW1lcy4KIC8vCi0vLyBJbiBhdm9pZCBKUyBzdGFjayBjb3JydXB0aW9uIHdlIGVu
Zm9yY2UgYSBwb2xpY3kgb2Ygb25seSBldmVyIGFsbG93aW5nIHR3bworLy8gVG8gYXZvaWQgSlMg
c3RhY2sgY29ycnVwdGlvbiB3ZSBlbmZvcmNlIGEgcG9saWN5IG9mIG9ubHkgZXZlciBhbGxvd2lu
ZyB0d28KIC8vIHRocmVhZHMgdG8gdXNlIGEgSlMgY29udGV4dCBjb25jdXJyZW50bHksIGFuZCBv
bmx5IGFsbG93aW5nIHRoZSBzZWNvbmQgb2YKIC8vIHRoZXNlIHRocmVhZHMgdG8gZXhlY3V0ZSB1
bnRpbCBpdCBoYXMgY29tcGxldGVkIGFuZCBmdWxseSByZXR1cm5lZCBmcm9tIGl0cwogLy8gb3V0
ZXJtb3N0IGNhbGwgaW50byBKU0MuICBXZSBlbmZvcmNlIHRoaXMgcG9saWN5IHVzaW5nICdsb2Nr
RHJvcERlcHRoJy4gIFRoZQpAQCAtMTU4LDcgKzE2MSw3IEBAIGJvb2wgSlNMb2NrOjpjdXJyZW50
VGhyZWFkSXNIb2xkaW5nTG9jaygKIC8vIHNhbWUgdGhyZWFkIGFnYWluLCBlbnRlciBKU0MgKHRo
cm91Z2ggZXZhbHVhdGUgc2NyaXB0IG9yIGNhbGwgZnVuY3Rpb24pLCBhbmQgZXhpdAogLy8gYWdh
aW4gdGhyb3VnaCBhIGNhbGxiYWNrLCB0aGVuIHRoZSBsb2NrcyB3aWxsIG5vdCBiZSBkcm9wcGVk
IHdoZW4gRHJvcEFsbExvY2tzCiAvLyBpcyBjYWxsZWQgKHNpbmNlIGxvY2tEcm9wRGVwdGggaXMg
bm9uLXplcm8pLiAgU2luY2UgdGhpcyB0aHJlYWQgaXMgc3RpbGwgaG9sZGluZwotLy8gdGhlIGxv
Y2tzLCBvbmx5IGl0IHdpbGwgcmUgYWJsZSB0byByZS1lbnRlciBKU0MgKGVpdGhlciBiZSByZXR1
cm5pbmcgZnJvbSB0aGUKKy8vIHRoZSBsb2Nrcywgb25seSBpdCB3aWxsIGJlIGFibGUgdG8gcmUt
ZW50ZXIgSlNDIChlaXRoZXIgYmUgcmV0dXJuaW5nIGZyb20gdGhlCiAvLyBjYWxsYmFjaywgb3Ig
YnkgcmUtZW50ZXJpbmcgdGhyb3VnaCBhbm90aGVyIGNhbGwgdG8gZXZhdWxhdGUgc2NyaXB0IG9y
IGNhbGwKIC8vIGZ1bmN0aW9uKS4KIC8vCkBAIC0xNjgsNjEgKzE3MSw4NCBAQCBib29sIEpTTG9j
azo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soCiAvLyBvcmRlciBpbiB3aGljaCB0aGV5IHdl
cmUgbWFkZSAtIHRob3VnaCBpbXBsZW1lbnRpbmcgdGhlIGxlc3MgcmVzdHJpY3RpdmUgcG9saWN5
CiAvLyB3b3VsZCBsaWtlbHkgaW5jcmVhc2UgY29tcGxleGl0eSBhbmQgb3ZlcmhlYWQuCiAvLwot
c3RhdGljIHVuc2lnbmVkIGxvY2tEcm9wRGVwdGggPSAwOwogCi1KU0xvY2s6OkRyb3BBbGxMb2Nr
czo6RHJvcEFsbExvY2tzKEV4ZWNTdGF0ZSogZXhlYykKLSAgICA6IG1fbG9ja0JlaGF2aW9yKGV4
ZWMtPmdsb2JhbERhdGEoKS5pc1NoYXJlZEluc3RhbmNlKCkgPyBMb2NrRm9yUmVhbCA6IFNpbGVu
Y2VBc3NlcnRpb25zT25seSkKKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9m
IGxvY2tzIHRoYXQgd2VyZSBkcm9wcGVkLgordW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3Mo
KQogewotICAgIHB0aHJlYWRfb25jZSgmY3JlYXRlSlNMb2NrQ291bnRPbmNlLCBjcmVhdGVKU0xv
Y2tDb3VudCk7CisgICAgaWYgKG1fbG9ja0Ryb3BEZXB0aCsrKQorICAgICAgICByZXR1cm4gMDsK
IAotICAgIGlmIChsb2NrRHJvcERlcHRoKyspIHsKLSAgICAgICAgbV9sb2NrQ291bnQgPSAwOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIHJldHVybiBkcm9wQWxsTG9ja3NVbmNvbmRpdGlv
bmFsbHkoKTsKK30KKwordW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFs
bHkoKQoreworICAgIHVuc2lnbmVkIGxvY2tDb3VudCA9IG1fbG9ja0NvdW50OworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsb2NrQ291bnQ7IGkrKykKKyAgICAgICAgdW5sb2NrKCk7CiAK
LSAgICBtX2xvY2tDb3VudCA9IEpTTG9jazo6bG9ja0NvdW50KCk7Ci0gICAgZm9yIChpbnRwdHJf
dCBpID0gMDsgaSA8IG1fbG9ja0NvdW50OyBpKyspCi0gICAgICAgIEpTTG9jazo6dW5sb2NrKG1f
bG9ja0JlaGF2aW9yKTsKKyAgICByZXR1cm4gbG9ja0NvdW50OwogfQogCi1KU0xvY2s6OkRyb3BB
bGxMb2Nrczo6RHJvcEFsbExvY2tzKEpTTG9ja0JlaGF2aW9yIEpTTG9ja0JlaGF2aW9yKQotICAg
IDogbV9sb2NrQmVoYXZpb3IoSlNMb2NrQmVoYXZpb3IpCit2b2lkIEpTTG9jazo6Z3JhYkFsbExv
Y2tzKHVuc2lnbmVkIGxvY2tDb3VudCkKIHsKLSAgICBwdGhyZWFkX29uY2UoJmNyZWF0ZUpTTG9j
a0NvdW50T25jZSwgY3JlYXRlSlNMb2NrQ291bnQpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsb2NrQ291bnQ7IGkrKykKKyAgICAgICAgbG9jaygpOwogCi0gICAgaWYgKGxvY2tEcm9w
RGVwdGgrKykgewotICAgICAgICBtX2xvY2tDb3VudCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgbV9sb2NrRHJvcERlcHRoLS07Cit9CiAKLSAgICAvLyBJdCBpcyBuZWNlc3Nhcnkg
dG8gZHJvcCBldmVuICJ1bnJlYWwiIGxvY2tzLCBiZWNhdXNlIGhhdmluZyBhIG5vbi16ZXJvIGxv
Y2sgY291bnQKLSAgICAvLyB3aWxsIHByZXZlbnQgYSByZWFsIGxvY2sgZnJvbSBiZWluZyB0YWtl
bi4KK0pTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoRXhlY1N0YXRlKiBleGVjKQor
ICAgIDogbV9sb2NrQ291bnQoMCkKKyAgICAsIG1fZ2xvYmFsRGF0YSgmZXhlYy0+Z2xvYmFsRGF0
YSgpKQoreworICAgIG1fbG9ja0NvdW50ID0gbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZHJvcEFs
bExvY2tzKCk7Cit9CiAKLSAgICBtX2xvY2tDb3VudCA9IEpTTG9jazo6bG9ja0NvdW50KCk7Ci0g
ICAgZm9yIChpbnRwdHJfdCBpID0gMDsgaSA8IG1fbG9ja0NvdW50OyBpKyspCi0gICAgICAgIEpT
TG9jazo6dW5sb2NrKG1fbG9ja0JlaGF2aW9yKTsKK0pTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9w
QWxsTG9ja3MoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgIDogbV9sb2NrQ291bnQoMCkK
KyAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQoreworICAgIG1fbG9ja0NvdW50ID0gbV9n
bG9iYWxEYXRhLT5hcGlMb2NrKCkuZHJvcEFsbExvY2tzKCk7CiB9CiAKIEpTTG9jazo6RHJvcEFs
bExvY2tzOjp+RHJvcEFsbExvY2tzKCkKIHsKLSAgICBmb3IgKGludHB0cl90IGkgPSAwOyBpIDwg
bV9sb2NrQ291bnQ7IGkrKykKLSAgICAgICAgSlNMb2NrOjpsb2NrKG1fbG9ja0JlaGF2aW9yKTsK
LQotICAgIC0tbG9ja0Ryb3BEZXB0aDsKKyAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5ncmFi
QWxsTG9ja3MobV9sb2NrQ291bnQpOwogfQogCiAjZWxzZSAvLyAoT1MoREFSV0lOKSB8fCBVU0Uo
UFRIUkVBRFMpKQogCi1KU0xvY2s6OkpTTG9jayhFeGVjU3RhdGUqKQotICAgIDogbV9sb2NrQmVo
YXZpb3IoU2lsZW5jZUFzc2VydGlvbnNPbmx5KQorR2xvYmFsSlNMb2NrOjpHbG9iYWxKU0xvY2so
KQoreworfQorCitHbG9iYWxKU0xvY2s6On5HbG9iYWxKU0xvY2soKQoreworfQorCitKU0xvY2tI
b2xkZXI6OkpTTG9ja0hvbGRlcihKU0dsb2JhbERhdGEqKQogewogfQogCi0vLyBJZiB0aHJlYWRp
bmcgc3VwcG9ydCBpcyBvZmYsIHNldCB0aGUgbG9jayBjb3VudCB0byBhIGNvbnN0YW50IHZhbHVl
IG9mIDEgc28gc3NlcnRpb25zCi0vLyB0aGF0IHRoZSBsb2NrIGlzIGhlbGQgZG9uJ3QgZmFpbAot
aW50cHRyX3QgSlNMb2NrOjpsb2NrQ291bnQoKQorSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIo
SlNHbG9iYWxEYXRhJikKK3sKK30KKworSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoRXhlY1N0
YXRlKikKK3sKK30KKworSlNMb2NrSG9sZGVyOjp+SlNMb2NrSG9sZGVyKCkKK3sKK30KKworSlNM
b2NrOjpKU0xvY2soKQoreworfQorCitKU0xvY2s6On5KU0xvY2soKQogewotICAgIHJldHVybiAx
OwogfQogCiBib29sIEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKQpAQCAtMjMw
LDExICsyNTYsMTEgQEAgYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKAog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEpTTG9jazo6bG9jayhKU0xvY2tCZWhhdmlvcikK
K3ZvaWQgSlNMb2NrOjpsb2NrKCkKIHsKIH0KIAotdm9pZCBKU0xvY2s6OnVubG9jayhKU0xvY2tC
ZWhhdmlvcikKK3ZvaWQgSlNMb2NrOjp1bmxvY2soKQogewogfQogCkBAIC0yNDYsMTEgKzI3Miwz
MyBAQCB2b2lkIEpTTG9jazo6dW5sb2NrKEV4ZWNTdGF0ZSopCiB7CiB9CiAKK3ZvaWQgSlNMb2Nr
Ojpsb2NrKEpTR2xvYmFsRGF0YSYpCit7Cit9CisKK3ZvaWQgSlNMb2NrOjp1bmxvY2soSlNHbG9i
YWxEYXRhJikKK3sKK30KKwordW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3MoKQoreworICAg
IHJldHVybiAwOworfQorCit1bnNpZ25lZCBKU0xvY2s6OmRyb3BBbGxMb2Nrc1VuY29uZGl0aW9u
YWxseSgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSlNMb2NrOjpncmFiQWxsTG9ja3Mo
dW5zaWduZWQpCit7Cit9CisKIEpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoRXhl
Y1N0YXRlKikKIHsKIH0KIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhKU0xv
Y2tCZWhhdmlvcikKK0pTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoSlNHbG9iYWxE
YXRhKikKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmgJ
KHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw5IEBACiAKICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVENTcGluTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTMwLDggKzMzLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgLy8gaW1wb3J0YW50IHRvIGxvY2sgYmVmb3JlIGRvaW5nIGFueXRoaW5nIHRo
YXQgYWxsb2NhdGVzIGEKICAgICAvLyBKYXZhU2NyaXB0IGRhdGEgc3RydWN0dXJlIG9yIHRoYXQg
aW50ZXJhY3RzIHdpdGggc2hhcmVkIHN0YXRlCiAgICAgLy8gc3VjaCBhcyB0aGUgcHJvdGVjdCBj
b3VudCBoYXNoIHRhYmxlLiBUaGUgc2ltcGxlc3Qgd2F5IHRvIGxvY2sKLSAgICAvLyBpcyB0byBj
cmVhdGUgYSBsb2NhbCBKU0xvY2sgb2JqZWN0IGluIHRoZSBzY29wZSB3aGVyZSB0aGUgbG9jayAK
LSAgICAvLyBtdXN0IGJlIGhlbGQuIFRoZSBsb2NrIGlzIHJlY3Vyc2l2ZSBzbyBuZXN0aW5nIGlz
IG9rLiBUaGUgSlNMb2NrIAorICAgIC8vIGlzIHRvIGNyZWF0ZSBhIGxvY2FsIEpTTG9ja0hvbGRl
ciBvYmplY3QgaW4gdGhlIHNjb3BlIHdoZXJlIHRoZSBsb2NrIAorICAgIC8vIG11c3QgYmUgaGVs
ZCBhbmQgcGFzcyBpdCB0aGUgY29udGV4dCB0aGF0IHJlcXVpcmVzIHByb3RlY3Rpb24uIAorICAg
IC8vIFRoZSBsb2NrIGlzIHJlY3Vyc2l2ZSBzbyBuZXN0aW5nIGlzIG9rLiBUaGUgSlNMb2NrIAog
ICAgIC8vIG9iamVjdCBhbHNvIGFjdHMgYXMgYSBjb252ZW5pZW5jZSBzaG9ydC1oYW5kIGZvciBy
dW5uaW5nIGltcG9ydGFudAogICAgIC8vIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgogCkBAIC00
NCw2MiArNDgsNjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gRHJvcEFsbExvY2tzIG9iamVj
dCB0YWtlcyBjYXJlIHRvIHJlbGVhc2UgdGhlIEpTTG9jayBvbmx5IGlmIHlvdXIKICAgICAvLyB0
aHJlYWQgYWNxdWlyZWQgaXQgdG8gYmVnaW4gd2l0aC4KIAotICAgIC8vIEZvciBjb250ZXh0cyBv
dGhlciB0aGFuIHRoZSBzaW5nbGUgc2hhcmVkIG9uZSwgaW1wbGljaXQgbG9ja2luZyBpcyBub3Qg
ZG9uZSwKLSAgICAvLyBidXQgd2Ugc3RpbGwgbmVlZCB0byBwZXJmb3JtIGFsbCB0aGUgY291bnRp
bmcgaW4gb3JkZXIgdG8ga2VlcCBkZWJ1ZwotICAgIC8vIGFzc2VydGlvbnMgd29ya2luZywgc28g
dGhhdCBjbGllbnRzIHRoYXQgdXNlIHRoZSBzaGFyZWQgY29udGV4dCBkb24ndCBicmVhay4KLQog
ICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBKU0dsb2JhbERhdGE7CiAKLSAgICBlbnVt
IEpTTG9ja0JlaGF2aW9yIHsgU2lsZW5jZUFzc2VydGlvbnNPbmx5LCBMb2NrRm9yUmVhbCB9Owor
ICAgIC8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBpbml0aWFsaXphdGlvbiBv
ZiB0aGUgbGVnYWN5IHNpbmdsZSAKKyAgICAvLyBzaGFyZWQgSlNHbG9iYWxEYXRhLgorICAgIGNs
YXNzIEdsb2JhbEpTTG9jayB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdsb2JhbEpT
TG9jayk7CisgICAgcHVibGljOgorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBHbG9iYWxKU0xv
Y2soKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkdsb2JhbEpTTG9jaygpOworICAgIH07
CisKKyAgICBjbGFzcyBKU0xvY2tIb2xkZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgSlNMb2NrSG9sZGVyKEpTR2xvYmFsRGF0YSopOworICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhJik7CisgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIEpTTG9ja0hvbGRlcihFeGVjU3RhdGUqKTsKKworICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB+SlNMb2NrSG9sZGVyKCk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpT
R2xvYmFsRGF0YT4gbV9nbG9iYWxEYXRhOworICAgIH07CiAKICAgICBjbGFzcyBKU0xvY2sgewog
ICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKU0xvY2spOwogICAgIHB1YmxpYzoKLSAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNMb2NrKEV4ZWNTdGF0ZSopOwotICAgICAgICBKU0xvY2so
SlNHbG9iYWxEYXRhKik7CisgICAgICAgIEpTTG9jaygpOworICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB+SlNMb2NrKCk7CisKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2NrKCk7
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5sb2NrKCk7CiAKLSAgICAgICAgSlNM
b2NrKEpTTG9ja0JlaGF2aW9yIGxvY2tCZWhhdmlvcikKLSAgICAgICAgICAgIDogbV9sb2NrQmVo
YXZpb3IobG9ja0JlaGF2aW9yKQotICAgICAgICB7Ci0jaWZkZWYgTkRFQlVHCi0gICAgICAgICAg
ICAvLyBMb2NraW5nICJub3QgZm9yIHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0dXJlLgotICAg
ICAgICAgICAgaWYgKGxvY2tCZWhhdmlvciA9PSBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAgICAgICAgICBsb2NrKGxvY2tCZWhhdmlv
cik7Ci0gICAgICAgIH0KLQotICAgICAgICB+SlNMb2NrKCkKLSAgICAgICAgeyAKLSNpZmRlZiBO
REVCVUcKLSAgICAgICAgICAgIC8vIExvY2tpbmcgIm5vdCBmb3IgcmVhbCIgaXMgYSBkZWJ1Zy1v
bmx5IGZlYXR1cmUuCi0gICAgICAgICAgICBpZiAobV9sb2NrQmVoYXZpb3IgPT0gU2lsZW5jZUFz
c2VydGlvbnNPbmx5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgICAgICAg
ICAgdW5sb2NrKG1fbG9ja0JlaGF2aW9yKTsgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGxvY2soSlNMb2NrQmVoYXZpb3IpOwotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1bmxvY2soSlNMb2NrQmVoYXZpb3Ip
OwogICAgICAgICBzdGF0aWMgdm9pZCBsb2NrKEV4ZWNTdGF0ZSopOwogICAgICAgICBzdGF0aWMg
dm9pZCB1bmxvY2soRXhlY1N0YXRlKik7CisgICAgICAgIHN0YXRpYyB2b2lkIGxvY2soSlNHbG9i
YWxEYXRhJik7CisgICAgICAgIHN0YXRpYyB2b2lkIHVubG9jayhKU0dsb2JhbERhdGEmKTsKIAot
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgaW50cHRyX3QgbG9ja0NvdW50KCk7Ci0g
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdMb2NrKCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY3VycmVudFRocmVhZElz
SG9sZGluZ0xvY2soKTsKIAotICAgICAgICBKU0xvY2tCZWhhdmlvciBtX2xvY2tCZWhhdmlvcjsK
KyAgICAgICAgdW5zaWduZWQgZHJvcEFsbExvY2tzKCk7CisgICAgICAgIHVuc2lnbmVkIGRyb3BB
bGxMb2Nrc1VuY29uZGl0aW9uYWxseSgpOworICAgICAgICB2b2lkIGdyYWJBbGxMb2Nrcyh1bnNp
Z25lZCBsb2NrQ291bnQpOworCisgICAgICAgIFNwaW5Mb2NrIG1fc3BpbkxvY2s7CisgICAgICAg
IE11dGV4IG1fbG9jazsKKyAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX293bmVyVGhyZWFkOwor
ICAgICAgICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKKyAgICAgICAgdW5zaWduZWQgbV9sb2NrRHJv
cERlcHRoOwogCiAgICAgICAgIGNsYXNzIERyb3BBbGxMb2NrcyB7CiAgICAgICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShEcm9wQWxsTG9ja3MpOwogICAgICAgICBwdWJsaWM6CiAgICAgICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBEcm9wQWxsTG9ja3MoRXhlY1N0YXRlKiBleGVjKTsKLSAg
ICAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIERyb3BBbGxMb2NrcyhKU0xvY2tCZWhhdmlvcik7
CisgICAgICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBEcm9wQWxsTG9ja3MoSlNHbG9iYWxEYXRh
Kik7CiAgICAgICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB+RHJvcEFsbExvY2tzKCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIGludHB0cl90IG1fbG9ja0Nv
dW50OwotICAgICAgICAgICAgSlNMb2NrQmVoYXZpb3IgbV9sb2NrQmVoYXZpb3I7CisgICAgICAg
ICAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBtX2dsb2JhbERhdGE7CiAgICAgICAgIH07CiAgICAg
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgJKHJl
dmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01h
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw4ICs3NSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIEhhbmRsZVR5cGVzPE1hcHBlZFR5cGU+OjpnZXRGcm9tU2xvdChjb25zdF9jYXN0PEpTVmFs
dWUqPigmaW1wbC0+anNWYWx1ZSgpKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXQoSlNHbG9iYWxE
YXRhJiwgY29uc3QgS2V5VHlwZSYga2V5LCBFeHRlcm5hbFR5cGUgdmFsdWUpCisgICAgdm9pZCBz
ZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBLZXlUeXBlJiBrZXksIEV4dGVybmFs
VHlwZSB2YWx1ZSkKICAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZ2xvYmFsRGF0YSwgZ2xv
YmFsRGF0YS5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgICAg
IHR5cGVuYW1lIE1hcFR5cGU6OkFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5hZGQoa2V5LCAwKTsK
ICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgICAgIFdlYWtTZXQ6OmRl
YWxsb2NhdGUocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQ3IEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVy
Z0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRh
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cy4gQ3VycmVudCByZWdyZXNzaW9uIHRlc3RzIGFyZSBzdWZmaWNpZW50LgorCisgICAgICAg
IENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5l
dyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4
dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAg
bmVlZHMgcHJvdGVjdGlvbi4gQWxzbyBhZGRlZCBhIGNvdXBsZSBKU0xvY2tzIHRvIHBsYWNlcyB0
aGF0IGRpZG4ndCBhbHJlYWR5IAorICAgICAgICBoYXZlIGl0IHRoYXQgbmVlZGVkIGl0LgorCisg
ICAgICAgICogYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNvbGxlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVj
dFNvb24pOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5v
dyk6CisgICAgICAgIChXZWJDb3JlOjpHQ0NvbnRyb2xsZXI6OmRpc2NhcmRBbGxDb21waWxlZENv
ZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxs
YmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6
OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFj
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVZvaWRDYWxsYmFjazo6aGFuZGxlRXZl
bnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYW1lc3Bh
Y2VVUkkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0
ZWRTY3JpcHRIb3N0Ojpub2RlQXNTY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0lu
amVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdGVkT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3Rl
ZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUluamVjdGVkU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6
OkluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y2FuQWNjZXNzSW5zcGVjdGVkV2luZG93KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0Z1bmN0aW9uKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTTXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU011dGF0
aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVG
aWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0
aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JlcXVlc3RBbmltYXRp
b25GcmFtZUNhbGxiYWNrQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVxdWVzdEFu
aW1hdGlvbkZyYW1lQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRD
YWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNjcmlwdERlYnVnU2VydmVyOjpy
ZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NoZWR1bGVk
QWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZUZ1
bmN0aW9uSW5Db250ZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFt
ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3Jp
cHRDYWNoZWRGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVE
YXRhOjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6
Y2xlYXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6aW5pdFNjcmlwdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDb250cm9sbGVyOjp1cGRhdGVEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDb250cm9sbGVyOjpjYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpiaW5kaW5nUm9vdE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTY3JpcHROUE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpqc09iamVjdEZvclBsdWdpbkVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3Rz
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0T2JqZWN0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXVzZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpldmVudExp
c3RlbmVySGFuZGxlckJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnRMaXN0ZW5lckhhbmRs
ZXJMb2NhdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFy
Z3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6OmNvbnN0cnVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDYWxsYmFjazo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEdsb2JhbE9iamVjdDo6
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdEdsb2JhbE9iamVjdDo6cmVtb3ZlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6
Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjp0b0luc3BlY3RvclZh
bHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6On5Xb3JrZXJTY3JpcHRD
b250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6Omlu
aXRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZh
bHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZGlzYWJs
ZUV2YWwpOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOgorICAg
ICAgICAoX2RpZEV4ZWN1dGUpOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgX3NldEltcDpv
cmlnaW5Sb290T2JqZWN0OnJvb3RPYmplY3Q6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVj
dCBfc2V0T3JpZ2luUm9vdE9iamVjdDphbmRSb290T2JqZWN0Ol0pOgorICAgICAgICAoLVtXZWJT
Y3JpcHRPYmplY3QgZGVhbGxvY10pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgZmluYWxp
emVdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGNhbGxXZWJTY3JpcHRNZXRob2Q6d2l0
aEFyZ3VtZW50czpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGV2YWx1YXRlV2ViU2Ny
aXB0Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc2V0VmFsdWU6Zm9yS2V5Ol0pOgor
ICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgdmFsdWVGb3JLZXk6XSk6CisgICAgICAgICgtW1dl
YlNjcmlwdE9iamVjdCByZW1vdmVXZWJTY3JpcHRLZXk6XSk6CisgICAgICAgICgtW1dlYlNjcmlw
dE9iamVjdCBoYXNXZWJTY3JpcHRLZXk6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBz
dHJpbmdSZXByZXNlbnRhdGlvbl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgd2ViU2Ny
aXB0VmFsdWVBdEluZGV4Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc2V0V2ViU2Ny
aXB0VmFsdWVBdEluZGV4OnZhbHVlOl0pOgorICAgICAgICAoK1tXZWJTY3JpcHRPYmplY3QgX2Nv
bnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOm9yaWdpblJvb3RPYmplY3Q6cm9vdE9iamVjdDpdKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdl
bmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENh
bGxiYWNrOjpjYWxsYmFja1dpdGhOb1BhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENh
bGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aFN0cmluZ0xpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aEJvb2xlYW4pOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKToKKyAgICAgICAg
KiBicmlkZ2UvTlBfanNvYmplY3QuY3BwOgorICAgICAgICAoX05QTl9JbnZva2VEZWZhdWx0KToK
KyAgICAgICAgKF9OUE5fSW52b2tlKToKKyAgICAgICAgKF9OUE5fRXZhbHVhdGUpOgorICAgICAg
ICAoX05QTl9HZXRQcm9wZXJ0eSk6CisgICAgICAgIChfTlBOX1NldFByb3BlcnR5KToKKyAgICAg
ICAgKF9OUE5fUmVtb3ZlUHJvcGVydHkpOgorICAgICAgICAoX05QTl9IYXNQcm9wZXJ0eSk6Cisg
ICAgICAgIChfTlBOX0hhc01ldGhvZCk6CisgICAgICAgIChfTlBOX0VudW1lcmF0ZSk6CisgICAg
ICAgIChfTlBOX0NvbnN0cnVjdCk6CisgICAgICAgICogYnJpZGdlL2MvY19jbGFzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpDQ2xhc3M6On5DQ2xhc3MpOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6Q0NsYXNzOjptZXRob2RzTmFtZWQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
Q0NsYXNzOjpmaWVsZE5hbWVkKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX2luc3RhbmNlLmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRv
RXhlY1N0YXRlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6aW52b2tlTWV0
aG9kKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1l
dGhvZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZUNvbnN0cnVj
dCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMp
OgorICAgICAgICAqIGJyaWRnZS9jL2NfcnVudGltZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpDRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OkNGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3V0aWxp
dHkuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9OUFZhcmlhbnQp
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE5QVmFyaWFudFRvVmFsdWUpOgorICAg
ICAgICAqIGJyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tOgorICAgICAgICAoSmF2YUpTT2JqZWN0
OjpjYWxsKToKKyAgICAgICAgKEphdmFKU09iamVjdDo6ZXZhbCk6CisgICAgICAgIChKYXZhSlNP
YmplY3Q6OmdldE1lbWJlcik6CisgICAgICAgIChKYXZhSlNPYmplY3Q6OnNldE1lbWJlcik6Cisg
ICAgICAgIChKYXZhSlNPYmplY3Q6OnJlbW92ZU1lbWJlcik6CisgICAgICAgIChKYXZhSlNPYmpl
Y3Q6OmdldFNsb3QpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpzZXRTbG90KToKKyAgICAgICAg
KEphdmFKU09iamVjdDo6dG9TdHJpbmcpOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpjb252ZXJ0
VmFsdWVUb0pPYmplY3QpOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpjb252ZXJ0Sk9iamVjdFRv
VmFsdWUpOgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX29iamMubW06CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpkaXNwYXRjaEpOSUNhbGwpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0pO
SVV0aWxpdHlQcml2YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1
ZVRvSlZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwOgor
ICAgICAgICAoSmF2YUNsYXNzOjpKYXZhQ2xhc3MpOgorICAgICAgICAoSmF2YUNsYXNzOjp+SmF2
YUNsYXNzKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwOgor
ICAgICAgICAoSmF2YUluc3RhbmNlOjpzdHJpbmdWYWx1ZSk6CisgICAgICAgICogYnJpZGdlL2pu
aS9qc2MvSmF2YU1ldGhvZEpTQy5jcHA6CisgICAgICAgIChhcHBlbmRDbGFzc05hbWUpOgorICAg
ICAgICAoSmF2YU1ldGhvZDo6c2lnbmF0dXJlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9K
YXZhU3RyaW5nSlNDLmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhU3RyaW5nOjpKYXZh
U3RyaW5nKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFTdHJpbmc6On5KYXZhU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFTdHJpbmc6OnV0ZjgpOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6SmF2YVN0cmluZzo6aW5pdCk6CisgICAgICAgICogYnJpZGdlL2pzYy9C
cmlkZ2VKU0MuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6OmNyZWF0ZVJ1
bnRpbWVPYmplY3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6Om5ld1J1bnRp
bWVPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW06CisgICAg
ICAgIChPYmpjSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZSk6CisgICAg
ICAgIChPYmpjSW5zdGFuY2U6Omludm9rZU9iamNNZXRob2QpOgorICAgICAgICAoT2JqY0luc3Rh
bmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6c2V0VmFs
dWVPZlVuZGVmaW5lZEZpZWxkKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZlVu
ZGVmaW5lZEZpZWxkKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW06Cisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKToKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKToKKyAg
ICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW06CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpjb252ZXJ0VmFsdWVUb09iamNWYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpj
b252ZXJ0TlNTdHJpbmdUb1N0cmluZyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0
T2JqY1ZhbHVlVG9WYWx1ZSk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcDoK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6On5RdEluc3RhbmNlKToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6OmdldFF0SW5zdGFuY2UpOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdCk6CisgICAgICAgICog
YnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
UXRQaXhtYXBJbnN0YW5jZTo6Y3JlYXRlUGl4bWFwUnVudGltZU9iamVjdCk6CisgICAgICAgICog
YnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVy
dFZhbHVlVG9RVmFyaWFudCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0UVZhcmlh
bnRUb1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGFNZXRob2Q6
OmNhbGwpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhv
ZDo6Y2FsbCk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X3J1bnRpbWVfcXQ0LmNwcDoKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQpOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6Y29udmVydFFWYXJpYW50VG9WYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjYWxsKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNhbGwpOgorICAgICAgICAqIGh0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAg
ICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RvcCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpucE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpw
cml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIHBsdWdpbnMvYmxhY2tiZXJy
eS9QbHVnaW5WaWV3QmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBX
aW5kb3dJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmdldFdpbmRvd0luZm8pOgorICAg
ICAgICAqIHBsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKiBwbHVnaW5zL2d0ay9QbHVn
aW5WaWV3R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAgKiBwbHVnaW5z
L21hYy9QbHVnaW5WaWV3TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0
TlBXaW5kb3dJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRj
aE5QRXZlbnQpOgorICAgICAgICAqIHBsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdp
blZpZXdXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAqIHRl
c3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmVUZXN0U3Vw
cG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmVUZXN0U3VwcG9y
dDo6cmVzZXRJbnRlcm5hbHNPYmplY3QpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24pOgor
CiAyMDEyLTA2LTIxICBUYWlqdSBUc3Vpa2kgIDx0emlrQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBVbmlmeSBGaWxlU3lzdGVtIGNhbGxiYWNrcwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHZv
aWQgY29sbGVjdCh2b2lkKikKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNvbGxl
Y3RBbGxHYXJiYWdlKCk7CiB9CiAKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6
OmdhcmJhZ2VDb2xsZWN0U29vbigpCiAgICAgLy8gZG93biBpbnRvIFdURiBzbyB0aGF0IG1vcmUg
cGxhdGZvcm1zIGNhbiB0YWtlIGFkdmFudGFnZSBvZiBpdCwgd2Ugd2lsbCBiZSAKICAgICAvLyBh
YmxlIHRvIHVzZSByZXBvcnRBYmFuZG9uZWRPYmplY3RHcmFwaCBvbiBtb3JlIHBsYXRmb3Jtcy4K
ICNpZiBVU0UoQ0YpCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5yZXBvcnRBYmFuZG9u
ZWRPYmplY3RHcmFwaCgpOwogI2Vsc2UKICAgICBpZiAoIW1fR0NUaW1lci5pc0FjdGl2ZSgpKQpA
QCAtODAsNyArODAsNyBAQCB2b2lkIEdDQ29udHJvbGxlcjo6Z2NUaW1lckZpcmVkKFRpbWVyPEdD
CiAKIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdE5vdygpCiB7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIGlmICghSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmlzQnVzeSgpKQogICAgICAgICBKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKIH0KQEAgLTEw
NCw3ICsxMDQsNyBAQCB2b2lkIEdDQ29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdEdhcmJhZ2VDCiAK
IHZvaWQgR0NDb250cm9sbGVyOjpkaXNjYXJkQWxsQ29tcGlsZWRDb2RlKCkKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgSlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpLT5oZWFwLmRlbGV0ZUFsbENvbXBpbGVkQ29kZSgpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2Fs
bGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFj
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgYm9vbCBKU1NRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2s6OmhhbmRsZQogCiAgICAgUmVmUHRyPEpTU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
YXJnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tVm9pZENhbGxi
YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bVZvaWRDYWxsYmFjay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3VzdG9tVm9pZENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NyArNjMsNyBAQCB2b2lkIEpTQ3VzdG9tVm9pZENhbGxiYWNrOjpoYW5kbGVFdmVudCgpCiAKICAg
ICBSZWZQdHI8SlNDdXN0b21Wb2lkQ2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAgICAgICAgIAot
ICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNr
KGFyZ3MpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0
aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIFN0cmluZyBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6
bG9va3VwTmEKIHsKICAgICBBU1NFUlQobV9jdXN0b21SZXNvbHZlcik7CiAKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBKU0Vycm9ySGFuZGxlcjo6aGFuZGxl
RXZlbnQoU2NyaXB0RQogCiAgICAgRXJyb3JFdmVudCogZXJyb3JFdmVudCA9IHN0YXRpY19jYXN0
PEVycm9yRXZlbnQqPihldmVudCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmds
b2JhbERhdGEoKSk7CiAKICAgICBKU09iamVjdCoganNGdW5jdGlvbiA9IHRoaXMtPmpzRnVuY3Rp
b24oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgaWYgKCFqc0Z1bmN0aW9uKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIEpTVmFsdWUgSlNFdmVudDo6Y2xpcGJv
YXJkRGF0YShFeGVjU3RhdGUKIAogSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXZlbnQqIGV2ZW50KQogewotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAKICAgICBpZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6
OmhhbmRsZUV2ZW50KFNjcmlwdAogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCB8fCBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+Z2xvYmFsRGF0YSgpKTsK
IAogICAgIEpTT2JqZWN0KiBqc0Z1bmN0aW9uID0gdGhpcy0+anNGdW5jdGlvbihzY3JpcHRFeGVj
dXRpb25Db250ZXh0KTsKICAgICBpZiAoIWpzRnVuY3Rpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20u
Y3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lu
amVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcg
QEAgTm9kZSogSW5qZWN0ZWRTY3JpcHRIb3N0OjpzY3JpcHRWYWx1ZUFzTgogCiBTY3JpcHRWYWx1
ZSBJbmplY3RlZFNjcmlwdEhvc3Q6Om5vZGVBc1NjcmlwdFZhbHVlKFNjcmlwdFN0YXRlKiBzdGF0
ZSwgTm9kZSogbm9kZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKHN0YXRlKTsKICAgICByZXR1cm4gU2NyaXB0VmFsdWUo
c3RhdGUtPmdsb2JhbERhdGEoKSwgdG9KUyhzdGF0ZSwgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZv
clByb3RvdHlwZShzdGF0ZSksIG5vZGUpKTsKIH0KIApAQCAtOTUsNyArOTUsNyBAQCBKU1ZhbHVl
IEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0ZWRPCiAgICAgaWYgKCFvYmplY3QpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBTY3JpcHRWYWx1
ZSBzY3JpcHRWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMpOwogICAgIGlmIChzY3JpcHRWYWx1ZS5o
YXNOb1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0T2JqZWN0IEluamVjdGVkU2NyaXB0TWFuYWdl
cjo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2UsIFNjcmlwdFN0YXRl
KiBzY3JpcHRTdGF0ZSwgaW50IGlkKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogCiAgICAgU291
cmNlQ29kZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzdHJpbmdUb1VTdHJpbmcoc291cmNlKSk7
CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwpAQCAtODEsNyAr
ODEsNyBAQCBTY3JpcHRPYmplY3QgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhCiAKIGJvb2wg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjYW5BY2Nlc3NJbnNwZWN0ZWRXaW5kb3coU2NyaXB0U3Rh
dGUqIHNjcmlwdFN0YXRlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogICAgIEpTRE9NV2luZG93
KiBpbnNwZWN0ZWRXaW5kb3cgPSB0b0pTRE9NV2luZG93KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpOwogICAgIGlmICghaW5zcGVjdGVkV2luZG93KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3Rl
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlF
dmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3
ICsxMDgsNyBAQCBKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6CiAgICAg
aWYgKG1fb3JpZ2luYWxOb2RlKSB7CiAgICAgICAgIGlmICghd3JhcHBlcigpKSB7CiAgICAgICAg
ICAgICAvLyBFbnN1cmUgdGhhdCAnbm9kZScgaGFzIGEgSmF2YVNjcmlwdCB3cmFwcGVyIHRvIG1h
cmsgdGhlIGV2ZW50IGxpc3RlbmVyIHdlJ3JlIGNyZWF0aW5nLgotICAgICAgICAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBwYXNzIHRoZSBnbG9iYWwg
b2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZQogICAgICAgICAgICAgc2V0V3JhcHBlcihl
eGVjLT5nbG9iYWxEYXRhKCksIGFzT2JqZWN0KHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBtX29y
aWdpbmFsTm9kZSkpKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGV2YWx1YXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlNjb3BlQ2hhaW5Ob2RlKiBj
aGFpbiwgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFs
dWUsIEpTQzo6SlNWYWx1ZSogZXhjZXB0aW9uKQogICAgIHsKICAgICAgICAgSlNNYWluVGhyZWFk
RXhlY1N0YXRlIGN1cnJlbnRTdGF0ZShleGVjKTsKKyAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgcmV0dXJuIEpTQzo6ZXZhbHVhdGUoZXhlYywgY2hhaW4sIHNv
dXJjZSwgdGhpc1ZhbHVlLCBleGNlcHRpb24pOwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbkNhbGxiYWNrQ3VzdG9tLmNw
cAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRh
dGlvbkNhbGxiYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
CiAjaW5jbHVkZSAiSlNNdXRhdGlvbkNhbGxiYWNrLmgiCiAKKyNpbmNsdWRlICJKU0RPTVdpbmRv
d0Jhc2UuaCIKICNpbmNsdWRlICJKU011dGF0aW9uUmVjb3JkLmgiCiAjaW5jbHVkZSAiSlNXZWJL
aXRNdXRhdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgpAQCAtNTAsNyArNTEsNyBAQCBib29sIEpTTXV0YXRpb25DYWxsYmFjazo6aGFuZGxlRXZlbnQo
TXV0CiAKICAgICBSZWZQdHI8SlNNdXRhdGlvbkNhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25k
aXRpb24uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBAIEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6SlNOb2RlRmlsdGVyQ29uZGkKIAogc2hvcnQgSlNO
b2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBOb2Rl
KiBmaWx0ZXJOb2RlKSBjb25zdAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBpZiAoIW1fZmlsdGVy
KQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVxdWVz
dEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNr
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBib29sIEpTUmVxdWVz
dEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s6OmhhCiAKICAgICBSZWZQdHI8SlNSZXF1ZXN0QW5pbWF0
aW9uRnJhbWVDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
CiAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIodGltZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDEy
MDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSmF2YVNjcmlw
dENhbGxGcmFtZS5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNE
T01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDxk
ZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlv
bi5oPgpAQCAtMTA2LDcgKzEwNyw3IEBAIEpTVmFsdWUgSmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZh
bHVhdGUoY28KICAgICBpZiAoIW1faXNWYWxpZCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwog
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICByZXR1
cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS5ldmFsdWF0ZShzY3JpcHQsIGV4Y2VwdGlvbik7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUGFnZVNjcmlwdERl
YnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcg
KzExMCw3IEBAIHZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVMaXN0ZW4KIAogdm9p
ZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFRpbWVyPFNj
cmlwdERlYnVnU2VydmVyPiopCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOwogICAgIC8vIElmIEphdmFTY3JpcHQgc3RhY2sgaXMgbm90IGVtcHR5IHBvc3Rwb25l
IHJlY29tcGlsYXRpb24uCiAgICAgaWYgKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KS0+ZHluYW1pY0dsb2JhbE9iamVjdCkKICAgICAgICAgcmVjb21waWxlQWxsSlNGdW5jdGlvbnNT
b29uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFj
dGlvbi5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgdm9p
ZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUoU2NyaXB0RXhlYwogdm9pZCBTY2hlZHVsZWRBY3Rp
b246OmV4ZWN1dGVGdW5jdGlvbkluQ29udGV4dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsK
ICAgICBBU1NFUlQobV9mdW5jdGlvbik7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb250ZXh0LT5nbG9iYWxEYXRhKCkpOwog
CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxs
RGF0YShtX2Z1bmN0aW9uLmdldCgpLCBjYWxsRGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1l
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBTY3JpcHRDYWNoZWRGcmFtZURhdGE6OlNjcmlwdENhY2hlZEZyYW1lRGF0YShGcmFt
ZSogZnJhbWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKIAogICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXIgPSBmcmFtZS0+c2Ny
aXB0KCk7CiAgICAgU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXAmIHdpbmRvd1NoZWxscyA9IHNj
cmlwdENvbnRyb2xsZXItPm1fd2luZG93U2hlbGxzOwpAQCAtNjcsNyArNjcsNyBAQCBTY3JpcHRD
YWNoZWRGcmFtZURhdGE6On5TY3JpcHRDYWNoZWRGcmFtCiAKIHZvaWQgU2NyaXB0Q2FjaGVkRnJh
bWVEYXRhOjpyZXN0b3JlKEZyYW1lKiBmcmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgU2NyaXB0Q29udHJvbGxlciogc2NyaXB0Q29u
dHJvbGxlciA9IGZyYW1lLT5zY3JpcHQoKTsKICAgICBTY3JpcHRDb250cm9sbGVyOjpTaGVsbE1h
cCYgd2luZG93U2hlbGxzID0gc2NyaXB0Q29udHJvbGxlci0+bV93aW5kb3dTaGVsbHM7CkBAIC05
NSw3ICs5NSw3IEBAIHZvaWQgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpjbGVhcigpCiAgICAgaWYg
KG1fd2luZG93cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgbV93aW5kb3dzLmNsZWFyKCk7CiAg
ICAgZ2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3RTb29uKCk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRD
b250cm9sbGVyOjpldmFsdWF0ZUluCiAgICAgY29uc3QgU3RyaW5nKiBzYXZlZFNvdXJjZVVSTCA9
IG1fc291cmNlVVJMOwogICAgIG1fc291cmNlVVJMID0gJnNvdXJjZVVSTDsKIAotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAKICAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3QgPSBtX2ZyYW1lOwogCkBAIC0xNzcsNyAr
MTc3LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKAogICAgIGlm
IChtX3dpbmRvd1NoZWxscy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBmb3IgKFNoZWxsTWFw
OjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRv
d1NoZWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRv
d1NoZWxsID0gaXRlci0+c2Vjb25kLmdldCgpOwpAQCAtMjA5LDcgKzIwOSw3IEBAIEpTRE9NV2lu
ZG93U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OmluaXQKIHsKICAgICBBU1NFUlQoIW1fd2luZG93
U2hlbGxzLmNvbnRhaW5zKHdvcmxkKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHdvcmxkLT5nbG9iYWxEYXRhKCkpOwog
CiAgICAgSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSBjcmVhdGVXaW5kb3dTaGVsbCh3
b3JsZCk7CiAKQEAgLTI4NCw5ICsyODQsMTAgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjp1cGRh
dGVEb2N1bWVudCgpCiAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIGZvciAo
U2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVyICE9
IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpCisgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0
b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMu
ZW5kKCk7ICsraXRlcikgeworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhpdGVyLT5maXJzdC0+
Z2xvYmFsRGF0YSgpKTsKICAgICAgICAgaXRlci0+c2Vjb25kLT53aW5kb3coKS0+dXBkYXRlRG9j
dW1lbnQoKTsKKyAgICB9CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlU2VjdXJp
dHlPcmlnaW4oKQpAQCAtMzAwLDcgKzMwMSw3IEBAIEJpbmRpbmdzOjpSb290T2JqZWN0KiBTY3Jp
cHRDb250cm9sbGVyOjoKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fY2FjaGVhYmxl
QmluZGluZ1Jvb3RPYmplY3QpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3Qg
PSBCaW5kaW5nczo6Um9vdE9iamVjdDo6Y3JlYXRlKDAsIGdsb2JhbE9iamVjdChwbHVnaW5Xb3Js
ZCgpKSk7CiAgICAgfQogICAgIHJldHVybiBtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0Lmdl
dCgpOwpAQCAtMzEyLDcgKzMxMyw3IEBAIEJpbmRpbmdzOjpSb290T2JqZWN0KiBTY3JpcHRDb250
cm9sbGVyOjoKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fYmluZGluZ1Jvb3RPYmpl
Y3QpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgICAgIG1fYmluZGluZ1Jvb3RPYmplY3QgPSBCaW5kaW5nczo6Um9vdE9iamVjdDo6
Y3JlYXRlKDAsIGdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CiAgICAgfQogICAgIHJldHVy
biBtX2JpbmRpbmdSb290T2JqZWN0LmdldCgpOwpAQCAtMzQ5LDkgKzM1MCw5IEBAIE5QT2JqZWN0
KiBTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTY3JpcHQKICAgICAgICAgaWYgKGNhbkV4ZWN1dGVT
Y3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkgewogICAgICAgICAgICAgLy8gSmF2YVNj
cmlwdCBpcyBlbmFibGVkLCBzbyB0aGVyZSBpcyBhIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4K
ICAgICAgICAgICAgIC8vIFJldHVybiBhbiBOUE9iamVjdCBib3VuZCB0byB0aGUgd2luZG93IG9i
amVjdC4KLSAgICAgICAgICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKLSAgICAgICAgICAgIEpTT2JqZWN0KiB3aW4gPSB3aW5kb3dTaGVsbChwbHVnaW5Xb3JsZCgp
KS0+d2luZG93KCk7CisgICAgICAgICAgICBKU0RPTVdpbmRvdyogd2luID0gd2luZG93U2hlbGwo
cGx1Z2luV29ybGQoKSktPndpbmRvdygpOwogICAgICAgICAgICAgQVNTRVJUKHdpbik7CisgICAg
ICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHdpbi0+Z2xvYmFsRXhlYygpKTsKICAgICAg
ICAgICAgIEJpbmRpbmdzOjpSb290T2JqZWN0KiByb290ID0gYmluZGluZ1Jvb3RPYmplY3QoKTsK
ICAgICAgICAgICAgIG1fd2luZG93U2NyaXB0TlBPYmplY3QgPSBfTlBOX0NyZWF0ZVNjcmlwdE9i
amVjdCgwLCB3aW4sIHJvb3QpOwogICAgICAgICB9IGVsc2UgewpAQCAtMzgzLDggKzM4NCw4IEBA
IEpTT2JqZWN0KiBTY3JpcHRDb250cm9sbGVyOjpqc09iamVjdEZvclAKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICAvLyBDcmVhdGUgYSBKU09iamVjdCBib3VuZCB0byB0aGlzIGVsZW1lbnQKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTRE9NV2luZG93KiBn
bG9iYWxPYmogPSBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZ2xvYmFsT2JqLT5nbG9iYWxFeGVjKCkpOwogICAgIC8vIEZJWE1FOiBpcyBub3JtYWwg
b2theT8gLSB1c2VkIGZvciBOUCBwbHVnaW5zPwogICAgIEpTVmFsdWUganNFbGVtZW50VmFsdWUg
PSB0b0pTKGdsb2JhbE9iai0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmosIHBsdWdpbik7CiAgICAg
aWYgKCFqc0VsZW1lbnRWYWx1ZSB8fCAhanNFbGVtZW50VmFsdWUuaXNPYmplY3QoKSkKQEAgLTQx
OCw3ICs0MTksNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRPYmplCiAK
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKCkKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgUm9vdE9iamVjdE1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yb290T2JqZWN0cy5lbmQoKTsKICAgICBmb3IgKFJv
b3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yb290T2JqZWN0cy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTExMSw3ICsxMTEsNyBAQCBXZWJTY3JpcHRPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OndpbmRv
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFtX3dpbmRvd1NjcmlwdE9iamVjdCkgewot
ICAgICAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICAgICAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdCA9IGJp
bmRpbmdSb290T2JqZWN0KCk7CiAgICAgICAgIG1fd2luZG93U2NyaXB0T2JqZWN0ID0gW1dlYlNj
cmlwdE9iamVjdCBzY3JpcHRPYmplY3RGb3JKU09iamVjdDp0b1JlZih3aW5kb3dTaGVsbChwbHVn
aW5Xb3JsZCgpKSkgb3JpZ2luUm9vdE9iamVjdDpyb290IHJvb3RPYmplY3Q6cm9vdF07CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2Vy
dmVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNyArMjIyLDcgQEAg
dm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlzcGF0Y2hEaWRQYXVzZQogICAgIHsKICAgICAgICAg
aWYgKG1fY3VycmVudENhbGxGcmFtZS0+aXNWYWxpZCgpICYmIGdsb2JhbE9iamVjdC0+aW5oZXJp
dHMoJkpTRE9NR2xvYmFsT2JqZWN0OjpzX2luZm8pKSB7CiAgICAgICAgICAgICBKU0RPTUdsb2Jh
bE9iamVjdCogZG9tR2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhzdGF0ZSk7CiAgICAgICAgICAgICBq
c0NhbGxGcmFtZSA9IHRvSlMoc3RhdGUsIGRvbUdsb2JhbE9iamVjdCwgbV9jdXJyZW50Q2FsbEZy
YW1lLmdldCgpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBqc0NhbGxGcmFtZSA9IGpz
VW5kZWZpbmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRFdmVu
dExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk4LDcgKzk4LDcgQEAgU3RyaW5nIGV2ZW50TGlzdGVuZXJIYW5kbGVyQm9keShEb2N1bWVudAog
ICAgIEFTU0VSVChqc0xpc3RlbmVyKTsKICAgICBpZiAoIWpzTGlzdGVuZXIpCiAgICAgICAgIHJl
dHVybiAiIjsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGpzTGlzdGVuZXItPmlzb2xhdGVkV29ybGQoKS0+Z2xvYmFsRGF0YSgp
KTsKICAgICBKU0M6OkpTT2JqZWN0KiBqc0Z1bmN0aW9uID0ganNMaXN0ZW5lci0+anNGdW5jdGlv
bihkb2N1bWVudCk7CiAgICAgaWYgKCFqc0Z1bmN0aW9uKQogICAgICAgICByZXR1cm4gIiI7CkBA
IC0xMTIsNyArMTEyLDcgQEAgYm9vbCBldmVudExpc3RlbmVySGFuZGxlckxvY2F0aW9uKERvY3Vt
ZQogICAgIEFTU0VSVChqc0xpc3RlbmVyKTsKICAgICBpZiAoIWpzTGlzdGVuZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGpzTGlzdGVuZXItPmlzb2xhdGVkV29ybGQoKS0+Z2xvYmFs
RGF0YSgpKTsKICAgICBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCA9IGpzTGlzdGVuZXItPmpzRnVu
Y3Rpb24oZG9jdW1lbnQpOwogICAgIGlmICghanNPYmplY3QpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rp
b25DYWxsLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTkgKzU4LDE5
IEBAIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXIKIAogdm9pZCBTY3Jp
cHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBTdHJpbmcmIGFyZ3Vt
ZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNTdHJpbmco
bV9leGVjLCBhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6
OmFwcGVuZEFyZ3VtZW50KGNvbnN0IEpTQzo6VVN0cmluZyYgYXJndW1lbnQpCiB7Ci0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayht
X2V4ZWMpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc1N0cmluZyhtX2V4ZWMsIGFyZ3VtZW50
KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQo
Y29uc3QgY2hhciogYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1lbnRz
LmFwcGVuZChqc1N0cmluZyhtX2V4ZWMsIFVTdHJpbmcoYXJndW1lbnQpKSk7CiB9CiAKQEAgLTgx
LDMxICs4MSwzMSBAQCB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyCiAK
IHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQobG9uZyBhcmd1
bWVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVy
KGFyZ3VtZW50KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5k
QXJndW1lbnQobG9uZyBsb25nIGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2Fy
Z3VtZW50cy5hcHBlbmQoanNOdW1iZXIoYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxs
QXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBpbnQgYXJndW1lbnQpCiB7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihhcmd1bWVu
dCkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50
KHVuc2lnbmVkIGxvbmcgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1l
bnRzLmFwcGVuZChqc051bWJlcihhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxBcmd1
bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGludCBhcmd1bWVudCkKIHsKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhl
Yyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGFyZ3VtZW50KSk7CiB9CiAKQEAg
LTEyNSw3ICsxMjUsNyBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9v
CiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBtX3RoaXNPYmplY3QuanNPYmplY3QoKTsK
IAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sobV9leGVjKTsKIAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSB0aGlzT2JqZWN0LT5n
ZXQobV9leGVjLCBJZGVudGlmaWVyKG1fZXhlYywgc3RyaW5nVG9VU3RyaW5nKG1fbmFtZSkpKTsK
ICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgewpAQCAtMTYzLDcgKzE2Myw3IEBAIFNj
cmlwdE9iamVjdCBTY3JpcHRGdW5jdGlvbkNhbGw6OmNvbnN0cnUKIHsKICAgICBKU09iamVjdCog
dGhpc09iamVjdCA9IG1fdGhpc09iamVjdC5qc09iamVjdCgpOwogCi0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwog
CiAgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0gYXNPYmplY3QodGhpc09iamVjdC0+Z2V0KG1f
ZXhlYywgSWRlbnRpZmllcihtX2V4ZWMsIHN0cmluZ1RvVVN0cmluZyhtX25hbWUpKSkpOwogICAg
IGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC0yMDUsNyArMjA1LDcgQEAgU2NyaXB0
VmFsdWUgU2NyaXB0Q2FsbGJhY2s6OmNhbGwoKQogCiBTY3JpcHRWYWx1ZSBTY3JpcHRDYWxsYmFj
azo6Y2FsbChib29sJiBoYWRFeGNlcHRpb24pCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogCiAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShtX2Z1
bmN0aW9uLmpzVmFsdWUoKSwgY2FsbERhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3
ICs2Nyw3IEBAIHN0YXRpYyBib29sIGhhbmRsZUV4Y2VwdGlvbihTY3JpcHRTdGF0ZSoKIAogYm9v
bCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0
IGNoYXIqIG5hbWUsIGNvbnN0IFNjcmlwdE9iamVjdCYgdmFsdWUpCiB7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRT
dGF0ZSk7CiAgICAgc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHV0RGlyZWN0
KHNjcmlwdFN0YXRlLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUp
LCB2YWx1ZS5qc09iamVjdCgpKTsKICAgICByZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0
YXRlKTsKIH0KQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChT
Y3JpcHRTdGF0ZQogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiBib29sIFNjcmlwdEdsb2JhbE9iamVj
dDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgSW5zcGVj
dG9yRnJvbnRlbmRIb3N0KiB2YWx1ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgZ2xvYmFsT2JqZWN0LT5w
dXREaXJlY3Qoc2NyaXB0U3RhdGUtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihzY3JpcHRTdGF0
ZSwgbmFtZSksIHRvSlMoc2NyaXB0U3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpKTsKICAgICBy
ZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKQEAgLTgzLDcgKzgzLDcgQEAgYm9v
bCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZQogCiBib29sIFNjcmlwdEdsb2Jh
bE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwg
SW5qZWN0ZWRTY3JpcHRIb3N0KiB2YWx1ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oc2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgZ2xvYmFsT2JqZWN0
LT5wdXREaXJlY3Qoc2NyaXB0U3RhdGUtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihzY3JpcHRT
dGF0ZSwgbmFtZSksIHRvSlMoc2NyaXB0U3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpKTsKICAg
ICByZXR1cm4gaGFuZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKQEAgLTkyLDcgKzkyLDcgQEAg
Ym9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZQogCiBib29sIFNjcmlwdEds
b2JhbE9iamVjdDo6Z2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFt
ZSwgU2NyaXB0T2JqZWN0JiB2YWx1ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nZXQoc2Ny
aXB0U3RhdGUsIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpKTsKICAgICBpZiAoIWpzVmFs
dWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNiw3ICsxMDYsNyBAQCBib29sIFNjcmlw
dEdsb2JhbE9iamVjdDo6Z2V0KFNjcmlwdFN0YXRlCiAKIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0
OjpyZW1vdmUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lKQogewot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soc2NyaXB0U3RhdGUpOwogICAgIHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIHNjcmlwdFN0YXRlLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSk7
CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgYm9vbCBTY3JpcHRWYWx1ZTo6Z2V0U3RyaW5nKFNjcmlw
dFN0YXRlKgogewogICAgIGlmICghbV92YWx1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soc2NyaXB0U3RhdGUpOwogICAgIFVTdHJpbmcgdXN0cmluZzsKICAgICBpZiAoIW1fdmFsdWUu
Z2V0KCkuZ2V0U3RyaW5nKHNjcmlwdFN0YXRlLCB1c3RyaW5nKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTc1LDYgKzE3NSw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBqc1RvSW4KIAogUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gU2NyaXB0VmFsdWU6OnRvSW5z
cGVjdG9yVmFsdWUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKSBjb25zdAogeworICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGhvbGRlcihzY3JpcHRTdGF0ZSk7CiAgICAgcmV0dXJuIGpzVG9JbnNwZWN0
b3JWYWx1ZShzY3JpcHRTdGF0ZSwgbV92YWx1ZS5nZXQoKSwgSW5zcGVjdG9yVmFsdWU6Om1heERl
cHRoKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlw
dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIFdvcmtlclNj
cmlwdENvbnRyb2xsZXI6OldvcmtlclNjcmlwdENvbnQKIAogV29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6fldvcmtlclNjcmlwdENvbnRyb2xsZXIoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSgpKTsKICAg
ICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLmNsZWFyKCk7CiAgICAgbV9nbG9iYWxEYXRhLmNsZWFy
KCk7CiB9CkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6aW5p
dFNjcmlwdCgKIHsKICAgICBBU1NFUlQoIW1fd29ya2VyQ29udGV4dFdyYXBwZXIpOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhtX2dsb2JhbERhdGEuZ2V0KCkpOwogCiAgICAgLy8gRXhwbGljaXRseSBwcm90ZWN0IHRoZSBn
bG9iYWwgb2JqZWN0J3MgcHJvdG90eXBlIHNvIGl0IGlzbid0IGNvbGxlY3RlZAogICAgIC8vIHdo
ZW4gd2UgYWxsb2NhdGUgdGhlIGdsb2JhbCBvYmplY3QuIChPbmNlIHRoZSBnbG9iYWwgb2JqZWN0
IGlzIGZ1bGx5CkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVy
OjpldmFsdWF0ZShjbwogICAgIFNjcmlwdFZhbHVlIGV4Y2VwdGlvbjsKICAgICBldmFsdWF0ZShz
b3VyY2VDb2RlLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9uLmpzVmFsdWUoKSkgewot
ICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhKCkpOwogICAgICAgICByZXBvcnRFeGNlcHRpb24obV93
b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRXhlYygpLCBleGNlcHRpb24uanNWYWx1ZSgpKTsK
ICAgICB9CiB9CkBAIC0xMjgsOSArMTI4LDkgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVy
OjpldmFsdWF0ZShjbwogICAgICAgICByZXR1cm47CiAKICAgICBpbml0U2NyaXB0SWZOZWVkZWQo
KTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xvYmFsRXhlYygpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+Z2xv
YmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7CiAKQEAgLTE5MSw3ICsxOTEsNyBAQCBi
b29sIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmlzRXhlY3V0aW9uCiB2b2lkIFdvcmtlclNjcmlw
dENvbnRyb2xsZXI6OmRpc2FibGVFdmFsKCkKIHsKICAgICBpbml0U2NyaXB0SWZOZWVkZWQoKTsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGdsb2JhbERhdGEoKSk7CiAKICAgICBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5zZXRF
dmFsRW5hYmxlZChmYWxzZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpj
L1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEyMiwxMyArMTIyLDEyIEBAICsgKGlkKXNjcmlwdE9iamVjdEZvckpTT2JqZWN0OihKU09iamVj
dFIKIAogc3RhdGljIHZvaWQgX2RpZEV4ZWN1dGUoV2ViU2NyaXB0T2JqZWN0ICpvYmopCiB7Ci0g
ICAgQVNTRVJUKEpTTG9jazo6bG9ja0NvdW50KCkgPiAwKTsKLSAgICAKICAgICBSb290T2JqZWN0
KiByb290ID0gW29iaiBfcm9vdE9iamVjdF07CiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1
cm47CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOworICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuYXBpTG9jaygpLmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIEtKU0RpZEV4ZWN1dGVGdW5jdGlvblB0ciBmdW5j
ID0gSW5zdGFuY2U6OmRpZEV4ZWN1dGVGdW5jdGlvbigpOwogICAgIGlmIChmdW5jKQogICAgICAg
ICBmdW5jKGV4ZWMsIHJvb3QtPmdsb2JhbE9iamVjdCgpKTsKQEAgLTE0OCwxOSArMTQ3LDI1IEBA
IC0gKHZvaWQpX3NldEltcDooSlNPYmplY3QqKWltcCBvcmlnaW5Sb28KIAogICAgIFdlYkNvcmU6
OmFkZEpTV3JhcHBlcihzZWxmLCBpbXApOwogCi0gICAgaWYgKF9wcml2YXRlLT5yb290T2JqZWN0
KQorICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCkgeworICAgICAgICBKU0xvY2tIb2xkZXIg
aG9sZGVyKCZfcHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEo
KSk7CiAgICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5nY1Byb3RlY3QoaW1wKTsKKyAgICB9
CiB9CiAKIC0gKHZvaWQpX3NldE9yaWdpblJvb3RPYmplY3Q6KFBhc3NSZWZQdHI8Um9vdE9iamVj
dD4pb3JpZ2luUm9vdE9iamVjdCBhbmRSb290T2JqZWN0OihQYXNzUmVmUHRyPFJvb3RPYmplY3Q+
KXJvb3RPYmplY3QKIHsKICAgICBBU1NFUlQoX3ByaXZhdGUtPmltcCk7CiAKLSAgICBpZiAocm9v
dE9iamVjdCkKKyAgICBpZiAocm9vdE9iamVjdCkgeworICAgICAgICBKU0xvY2tIb2xkZXIgaG9s
ZGVyKCZyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKICAgICAgICAg
cm9vdE9iamVjdC0+Z2NQcm90ZWN0KF9wcml2YXRlLT5pbXApOworICAgIH0KIAotICAgIGlmIChf
cHJpdmF0ZS0+cm9vdE9iamVjdCAmJiBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+aXNWYWxpZCgpKQor
ICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCAmJiBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+aXNW
YWxpZCgpKSB7CisgICAgICAgIEpTTG9ja0hvbGRlciBob2xkZXIoJl9wcml2YXRlLT5yb290T2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKICAgICAgICAgX3ByaXZhdGUtPnJv
b3RPYmplY3QtPmdjVW5wcm90ZWN0KF9wcml2YXRlLT5pbXApOworICAgIH0KIAogICAgIGlmIChf
cHJpdmF0ZS0+cm9vdE9iamVjdCkKICAgICAgICAgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmRlcmVm
KCk7CkBAIC0yMzIsOCArMjM3LDEwIEBAIC0gKHZvaWQpZGVhbGxvYwogICAgIGlmIChfcHJpdmF0
ZS0+aW1wKQogICAgICAgICBXZWJDb3JlOjpyZW1vdmVKU1dyYXBwZXIoX3ByaXZhdGUtPmltcCk7
CiAKLSAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmplY3Qt
PmlzVmFsaWQoKSkKKyAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJv
b3RPYmplY3QtPmlzVmFsaWQoKSkgeworICAgICAgICBKU0xvY2tIb2xkZXIgaG9sZGVyKCZfcHJp
dmF0ZS0+cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgICAg
IF9wcml2YXRlLT5yb290T2JqZWN0LT5nY1VucHJvdGVjdChfcHJpdmF0ZS0+aW1wKTsKKyAgICB9
CiAKICAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QpCiAgICAgICAgIF9wcml2YXRlLT5yb290
T2JqZWN0LT5kZXJlZigpOwpAQCAtMjQ4LDggKzI1NSwxMCBAQCAtICh2b2lkKWRlYWxsb2MKIAog
LSAodm9pZClmaW5hbGl6ZQogewotICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCAmJiBfcHJp
dmF0ZS0+cm9vdE9iamVjdC0+aXNWYWxpZCgpKQorICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVj
dCAmJiBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+aXNWYWxpZCgpKSB7CisgICAgICAgIEpTTG9ja0hv
bGRlciBob2xkZXIoJl9wcml2YXRlLT5yb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RGF0YSgpKTsKICAgICAgICAgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmdjVW5wcm90ZWN0KF9wcml2
YXRlLT5pbXApOworICAgIH0KIAogICAgIGlmIChfcHJpdmF0ZS0+cm9vdE9iamVjdCkKICAgICAg
ICAgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmRlcmVmKCk7CkBAIC0yODEsMTAgKzI5MCw5IEBAIC0g
KGlkKWNhbGxXZWJTY3JpcHRNZXRob2Q6KE5TU3RyaW5nICopbmEKICAgICBpZiAoIVtzZWxmIF9p
c1NhZmVTY3JpcHRdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAKICAgICAvLyBMb29rIHVwIHRoZSBmdW5jdGlvbiBv
YmplY3QuCiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9
IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBzdHJpbmdUb1VTdHJpbmco
U3RyaW5nKG5hbWUpKSkpOwpAQCAtMzI1LDcgKzMzMyw3IEBAIC0gKGlkKWV2YWx1YXRlV2ViU2Ny
aXB0OihOU1N0cmluZyAqKXNjcmkKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9i
amVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5o
YWRFeGNlcHRpb24oKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAogICAgIFtzZWxmIF9yb290T2Jq
ZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgp
OwogICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1
YXRlKGV4ZWMsIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3Bl
Q2hhaW4oKSwgbWFrZVNvdXJjZShTdHJpbmcoc2NyaXB0KSksIEpTQzo6SlNWYWx1ZSgpLCAwKTsK
QEAgLTM0Niw3ICszNTQsNyBAQCAtICh2b2lkKXNldFZhbHVlOihpZCl2YWx1ZSBmb3JLZXk6KE5T
U3RyCiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwog
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIFtzZWxmIF9p
bXBdLT5tZXRob2RUYWJsZSgpLT5wdXQoW3NlbGYgX2ltcF0sIGV4ZWMsIElkZW50aWZpZXIoZXhl
Yywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhrZXkpKSksIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVl
KGV4ZWMsICZ2YWx1ZSwgT2JqY09iamVjdFR5cGUsIFtzZWxmIF9yb290T2JqZWN0XSksIHNsb3Qp
OwpAQCAtMzcyLDcgKzM4MCw3IEBAIC0gKGlkKXZhbHVlRm9yS2V5OihOU1N0cmluZyAqKWtleQog
ICAgICAgICAvLyBOZWVkIHRvIHNjb3BlIHRoaXMgbG9jayB0byBlbnN1cmUgdGhhdCB3ZSByZWxl
YXNlIHRoZSBsb2NrIGJlZm9yZSBjYWxsaW5nCiAgICAgICAgIC8vIFtzdXBlciB2YWx1ZUZvcktl
eTprZXldIHdoaWNoIG1pZ2h0IHRocm93IGFuIGV4Y2VwdGlvbiBhbmQgYnlwYXNzIHRoZSBKU0xv
Y2sgZGVzdHJ1Y3RvciwKICAgICAgICAgLy8gbGVhdmluZyB0aGUgbG9jayBwZXJtYW5lbnRseSBo
ZWxkCi0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAKICAgICAgICAgSlNWYWx1ZSByZXN1
bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3Ry
aW5nKFN0cmluZyhrZXkpKSkpOwogICAgICAgICAKQEAgLTM4OCw3ICszOTYsNyBAQCAtIChpZCl2
YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkKICAgICBpZiAoW3Jlc3VsdE9iaiBpc0tpbmRPZkNs
YXNzOltXZWJVbmRlZmluZWQgY2xhc3NdXSkKICAgICAgICAgcmVzdWx0T2JqID0gW3N1cGVyIHZh
bHVlRm9yS2V5OmtleV07ICAgIC8vIGRlZmF1bHRzIHRvIHRocm93aW5nIGFuIGV4Y2VwdGlvbgog
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBfZGlkRXhlY3V0ZShzZWxmKTsKICAgICAKICAgICByZXR1cm4g
cmVzdWx0T2JqOwpAQCAtNDAyLDcgKzQxMCw3IEBAIC0gKHZvaWQpcmVtb3ZlV2ViU2NyaXB0S2V5
OihOU1N0cmluZyAqKWsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0t
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNl
cHRpb24oKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgp
LT5kZWxldGVQcm9wZXJ0eShbc2VsZiBfaW1wXSwgZXhlYywgSWRlbnRpZmllcihleGVjLCBzdHJp
bmdUb1VTdHJpbmcoU3RyaW5nKGtleSkpKSk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsKQEAgLTQyMSw3ICs0MjksNyBAQCAtIChCT09MKWhhc1dlYlNjcmlwdEtleTooTlNTdHJp
bmcgKilrZXkKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24o
KSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEJPT0wgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmhhc1By
b3BlcnR5KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhrZXkp
KSkpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC00NDEsOCArNDQ5LDgg
QEAgLSAoTlNTdHJpbmcgKilzdHJpbmdSZXByZXNlbnRhdGlvbgogICAgICAgICByZXR1cm4gQCJV
bmRlZmluZWQiOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAog
ICAgIGlkIHJlc3VsdCA9IGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKGV4ZWMsIFtzZWxmIF9pbXBd
LCBPYmpjT2JqZWN0VHlwZSkub2JqZWN0VmFsdWU7CiAKQEAgLTQ2MSw3ICs0NjksNyBAQCAtIChp
ZCl3ZWJTY3JpcHRWYWx1ZUF0SW5kZXg6KHVuc2lnbmVkKWluCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAg
IEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgaW5kZXgpOwogCiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC00ODUsNyArNDkzLDcgQEAgLSAodm9pZClzZXRXZWJT
Y3JpcHRWYWx1ZUF0SW5kZXg6KHVuc2lnbgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9y
b290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQoIWV4
ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgW3NlbGYgX2ltcF0tPm1l
dGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoW3NlbGYgX2ltcF0sIGV4ZWMsIGluZGV4LCBjb252ZXJ0
T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBfcm9v
dE9iamVjdF0pLCBmYWxzZSk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKQEAg
LTUxNSw3ICs1MjMsNyBAQCArIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTVmFsdWUp
CiB7CiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2socm9vdE9iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbERhdGEoKSk7CiAKICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkpT
SFRNTEVsZW1lbnQ6OnNfaW5mbykpIHsKICAgICAgICAgICAgIC8vIFBsdWdpbiBlbGVtZW50cyBj
YWNoZSB0aGUgaW5zdGFuY2UgaW50ZXJuYWxseS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQko
d29ya2luZyBjb3B5KQpAQCAtMjczMyw3ICsyNzMzLDcgQEAgRU5ECiAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpXG4iKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcblxuIik7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JGNsYXNzTmFtZT4gcHJv
dGVjdCh0aGlzKTtcblxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpO1xuXG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbERhdGEoKSk7XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzO1xuIik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcAkocmV2
aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBib29s
IEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhOb1BhcmFtCiAKICAgICBSZWZQdHI8SlNUZXN0
Q2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbERhdGEoKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKQEAg
LTgyLDcgKzgyLDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUAog
CiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2Rh
dGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7CkBAIC0xMDAsNyArMTAwLDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6
Y2FsbGJhY2tXaXRoQ2xhc3MyUAogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0
KHRoaXMpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwog
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC0xMTksNyArMTE5LDcgQEAg
Ym9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoU3RyaW5nTAogCiAgICAgUmVmUHRyPEpT
VGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
CkBAIC0xMzcsNyArMTM3LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQm9v
bGVhbgogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRl
KiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC0xNTcsNyArMTU3LDcgQEAgYm9vbCBKU1Rlc3RDYWxs
YmFjazo6Y2FsbGJhY2tSZXF1aXJlc1RoaQogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBw
cm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw3ICsx
NzcsNyBAQCBib29sIF9OUE5fSW52b2tlRGVmYXVsdChOUFAsIE5QT2JqZWN0KiBvCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9uIG9iamVjdC4KICAg
ICAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iai0+aW1wOwpAQCAtMjI1LDcgKzIyNSw3IEBAIGJv
b2wgX05QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmplY3QqIG8sIE4KICAgICAgICAgaWYgKCFyb290
T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBKU1ZhbHVlIGZ1
bmN0aW9uID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihl
eGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwpAQCAt
MjY0LDcgKzI2NCw3IEBAIGJvb2wgX05QTl9FdmFsdWF0ZShOUFAgaW5zdGFuY2UsIE5QT2JqZWMK
ICAgICAgICAgUGx1Z2luVmlldzo6a2VlcEFsaXZlKGluc3RhbmNlKTsKIAogICAgICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwot
ICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgU3RyaW5nIHNjcmlwdFN0cmluZyA9IGNvbnZl
cnROUFN0cmluZ1RvVVRGMTYocyk7CiAgICAgICAgIAogICAgICAgICBKU1ZhbHVlIHJldHVyblZh
bHVlID0gSlNDOjpldmFsdWF0ZShyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtl
U291cmNlKHNjcmlwdFN0cmluZyksIEpTQzo6SlNWYWx1ZSgpKTsKQEAgLTI5MCw3ICsyOTAsNyBA
QCBib29sIF9OUE5fR2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAg
ICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJv
cGVydHlOYW1lKTsKICAgICAgICAgCi0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBKU1Zh
bHVlIHJlc3VsdDsKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpCiAgICAgICAgICAgICByZXN1
bHQgPSBvYmotPmltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMs
IGktPnN0cmluZygpKSk7CkBAIC0zMjIsNyArMzIyLDcgQEAgYm9vbCBfTlBOX1NldFByb3BlcnR5
KE5QUCwgTlBPYmplY3QqIG8sIAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3Rh
dGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7CiAKICAgICAgICAgaWYgKGkt
PmlzU3RyaW5nKCkpIHsKQEAgLTM2Myw3ICszNjMsNyBAQCBib29sIF9OUE5fUmVtb3ZlUHJvcGVy
dHkoTlBQLCBOUE9iamVjdCogCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpCiAgICAgICAgICAgICBvYmot
PmltcC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqLT5pbXAsIGV4ZWMsIGlkZW50
aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSk7CiAgICAgICAgIGVsc2UK
QEAgLTM4Niw3ICszODYsNyBAQCBib29sIF9OUE5fSGFzUHJvcGVydHkoTlBQLCBOUE9iamVjdCog
bywgCiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0
PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwotICAgICAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICAgICAgaWYgKGktPmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gb2Jq
LT5pbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMs
IGktPnN0cmluZygpKSk7CiAgICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwpAQCAt
NDE4LDcgKzQxOCw3IEBAIGJvb2wgX05QTl9IYXNNZXRob2QoTlBQLCBOUE9iamVjdCogbywgTlAK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKICAgICAgICAgSlNWYWx1ZSBmdW5jID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlm
aWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gIWZ1bmMuaXNVbmRlZmluZWQoKTsKQEAg
LTQ0Nyw3ICs0NDcsNyBAQCBib29sIF9OUE5fRW51bWVyYXRlKE5QUCwgTlBPYmplY3QqIG8sIE5Q
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhl
eGVjKTsKIAogICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1l
cyhvYmotPmltcCwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRFbnVtUHJvcGVydGll
cyk7CkBAIC00ODQsNyArNDg0LDcgQEAgYm9vbCBfTlBOX0NvbnN0cnVjdChOUFAsIE5QT2JqZWN0
KiBvLCBjbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgRXhl
Y1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
LSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoZSBjb25z
dHJ1Y3RvciBvYmplY3QuCiAgICAgICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBvYmotPmltcDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfY2xhc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfY2xhc3MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCiAjaW5jbHVkZSA8cnVu
dGltZS9TY29wZUNoYWluLmg+CiAjaW5jbHVkZSA8cnVudGltZS9JZGVudGlmaWVyLmg+CisjaW5j
bHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2Nr
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KQEAgLTQ3LDcgKzQ4LDcgQEAgQ0NsYXNzOjpDQ2xhc3MoTlBDbGFzcyogYUNs
YXNzKQogCiBDQ2xhc3M6On5DQ2xhc3MoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNMb2NrIGhl
cmU/CiAKICAgICBkZWxldGVBbGxWYWx1ZXMoX21ldGhvZHMpOwogICAgIF9tZXRob2RzLmNsZWFy
KCk7CkBAIC05MSw3ICs5Miw3IEBAIE1ldGhvZExpc3QgQ0NsYXNzOjptZXRob2RzTmFtZWQoUHJv
cGVydHkKICAgICBpZiAoX2lzYS0+aGFzTWV0aG9kICYmIF9pc2EtPmhhc01ldGhvZChvYmosIGlk
ZW50KSl7CiAgICAgICAgIE1ldGhvZCogYU1ldGhvZCA9IG5ldyBDTWV0aG9kKGlkZW50KTsgLy8g
ZGVsZXRlZCBpbiB0aGUgQ0NsYXNzIGRlc3RydWN0b3IKICAgICAgICAgewotICAgICAgICAgICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrKGluc3QtPnJvb3RPYmplY3QoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEo
KSk7CiAgICAgICAgICAgICBfbWV0aG9kcy5zZXQobmFtZS5pbXBsKCksIGFNZXRob2QpOwogICAg
ICAgICB9CiAgICAgICAgIG1ldGhvZExpc3QuYXBwZW5kKGFNZXRob2QpOwpAQCAtMTE0LDcgKzEx
NSw3IEBAIEZpZWxkKiBDQ2xhc3M6OmZpZWxkTmFtZWQoUHJvcGVydHlOYW1lIHAKICAgICBpZiAo
X2lzYS0+aGFzUHJvcGVydHkgJiYgX2lzYS0+aGFzUHJvcGVydHkob2JqLCBpZGVudCkpewogICAg
ICAgICBhRmllbGQgPSBuZXcgQ0ZpZWxkKGlkZW50KTsgLy8gZGVsZXRlZCBpbiB0aGUgQ0NsYXNz
IGRlc3RydWN0b3IKICAgICAgICAgewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGluc3QtPnJvb3RP
YmplY3QoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBfZmll
bGRzLnNldChuYW1lLmltcGwoKSwgYUZpZWxkKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzMsNyArNzMsNyBAQCB2b2lkIENJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlCiAg
ICAgICAgIHJldHVybjsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHRo
cm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkp
KTsKICAgICB9CiAKQEAgLTE4Miw3ICsxODIsNyBAQCBKU1ZhbHVlIENJbnN0YW5jZTo6aW52b2tl
TWV0aG9kKEV4ZWNTdGF0CiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0VmFyaWFudCk7CiAK
ICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoZXhlYyk7CiAgICAgICAgIEFTU0VSVChnbG9iYWxFeGNlcHRpb25TdHJpbmcoKS5pc051bGwo
KSk7CiAgICAgICAgIHJldHZhbCA9IF9vYmplY3QtPl9jbGFzcy0+aW52b2tlKF9vYmplY3QsIGlk
ZW50LCBjQXJncy5kYXRhKCksIGNvdW50LCAmcmVzdWx0VmFyaWFudCk7CiAgICAgICAgIG1vdmVH
bG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKQEAgLTIxNyw3ICsyMTcsNyBAQCBKU1Zh
bHVlIENJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZChFCiAgICAgTlBWYXJpYW50IHJlc3Vs
dFZhcmlhbnQ7CiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0VmFyaWFudCk7CiAgICAgewot
ICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMp
OwogICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAg
ICAgICByZXR2YWwgPSBfb2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQoX29iamVjdCwgY0Fy
Z3MuZGF0YSgpLCBjb3VudCwgJnJlc3VsdFZhcmlhbnQpOwogICAgICAgICBtb3ZlR2xvYmFsRXhj
ZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CkBAIC0yNTYsNyArMjU2LDcgQEAgSlNWYWx1ZSBDSW5z
dGFuY2U6Omludm9rZUNvbnN0cnVjdChFeGVjUwogICAgIE5QVmFyaWFudCByZXN1bHRWYXJpYW50
OwogICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3VsdFZhcmlhbnQpOwogICAgIHsKLSAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAg
ICAgQVNTRVJUKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVsbCgpKTsKICAgICAgICAgcmV0
dmFsID0gX29iamVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QoX29iamVjdCwgY0FyZ3MuZGF0YSgpLCBj
b3VudCwgJnJlc3VsdFZhcmlhbnQpOwogICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVj
U3RhdGUoZXhlYyk7CkBAIC0zMTUsNyArMzE1LDcgQEAgdm9pZCBDSW5zdGFuY2U6OmdldFByb3Bl
cnR5TmFtZXMoRXhlY1N0YQogICAgIE5QSWRlbnRpZmllciogaWRlbnRpZmllcnM7CiAKICAgICB7
Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhl
Yyk7CiAgICAgICAgIEFTU0VSVChnbG9iYWxFeGNlcHRpb25TdHJpbmcoKS5pc051bGwoKSk7CiAg
ICAgICAgIGJvb2wgb2sgPSBfb2JqZWN0LT5fY2xhc3MtPmVudW1lcmF0ZShfb2JqZWN0LCAmaWRl
bnRpZmllcnMsICZjb3VudCk7CiAgICAgICAgIG1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0
ZShleGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfcnVudGltZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19ydW50aW1lLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19ydW50aW1lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBKU1ZhbHVlIENGaWVsZDo6dmFsdWVGcm9tSW5z
dGFuY2UoRXhlY1N0CiAKICAgICAgICAgYm9vbCByZXN1bHQ7CiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMp
OwogICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5fY2xhc3MtPmdldFByb3BlcnR5KG9iaiwgX2Zp
ZWxkSWRlbnRpZmllciwgJnByb3BlcnR5KTsKICAgICAgICAgICAgIENJbnN0YW5jZTo6bW92ZUds
b2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgICAgICB9CkBAIC03MSw3ICs3MSw3
IEBAIHZvaWQgQ0ZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXQKICAgICAgICAgY29u
dmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgYVZhbHVlLCAmdmFyaWFudCk7CiAKICAgICAgICAg
ewotICAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoZXhlYyk7CiAgICAgICAgICAgICBvYmotPl9jbGFzcy0+c2V0UHJvcGVydHkob2JqLCBf
ZmllbGRJZGVudGlmaWVyLCAmdmFyaWFudCk7CiAgICAgICAgICAgICBDSW5zdGFuY2U6Om1vdmVH
bG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKICAgICAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2
OCw3IEBAIHN0YXRpYyBTdHJpbmcgY29udmVydFVURjhUb1VURjE2V2l0aExhdGkKIC8vIFZhcmlh
bnQgdmFsdWUgbXVzdCBiZSByZWxlYXNlZCB3aXRoIE5QUmVsZWFzZVZhcmlhbnRWYWx1ZSgpCiB2
b2lkIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSwgTlBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIFZPSURfVE9fTlBW
QVJJQU5UKCpyZXN1bHQpOwogCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBjb252ZXJ0VmFsdWVU
b05QVmFyaWFudChFeGVjU3RhdGUqIAogCiBKU1ZhbHVlIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTlBWYXJpYW50KiB2YXJpYW50LCBSb290T2JqZWN0KiBy
b290T2JqZWN0KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCiAgICAgTlBWYXJpYW50VHlwZSB0eXBl
ID0gdmFyaWFudC0+dHlwZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlf
anNvYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlf
anNvYmplY3QubW0JKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvam5pX2pzb2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsNyArMjg0LDcgQEAgam9i
amVjdCBKYXZhSlNPYmplY3Q6OmNhbGwoanN0cmluZyBtZXRobwogICAgIAogICAgIC8vIExvb2t1
cCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICBJ
ZGVudGlmaWVyIGlkZW50aWZpZXIoZXhlYywgSmF2YVN0cmluZyhtZXRob2ROYW1lKS5pbXBsKCkp
OwogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBfaW1wLT5nZXQoZXhlYywgaWRlbnRpZmllcik7CkBA
IC0zMDcsMTIgKzMwNywxMiBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6ZXZhbChqc3RyaW5nIHNj
cmlwCiB7CiAgICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUpTT2JqZWN0OjpldmFsIHNjcmlwdCA9
ICVzIiwgSmF2YVN0cmluZyhzY3JpcHQpLnV0ZjgoKSk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIAogICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSB0
aGlzLT5yb290T2JqZWN0KCk7CiAgICAgaWYgKCFyb290T2JqZWN0KQogICAgICAgICByZXR1cm4g
MDsKIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxEYXRhKCkpOworICAgIAogICAgIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RhcnQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpT
Qzo6ZXZhbHVhdGUocm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShK
YXZhU3RyaW5nKHNjcmlwdCkuaW1wbCgpKSk7CiAgICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CkBAIC0zMzAsNyArMzMwLDcg
QEAgam9iamVjdCBKYXZhSlNPYmplY3Q6OmdldE1lbWJlcihqc3RyaW5nIAogCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAg
ICAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gX2ltcC0+Z2V0KGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgSmF2YVN0cmluZyhtZW1iZXJOYW1lKS5pbXBsKCkpKTsKIAogICAgIHJl
dHVybiBjb252ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKQEAgLTM0Niw3ICszNDYsNyBAQCB2
b2lkIEphdmFKU09iamVjdDo6c2V0TWVtYmVyKGpzdHJpbmcgbWVtCiAKICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBfaW1wLT5tZXRob2RUYWJs
ZSgpLT5wdXQoX2ltcCwgZXhlYywgSWRlbnRpZmllcihleGVjLCBKYXZhU3RyaW5nKG1lbWJlck5h
bWUpLmltcGwoKSksIGNvbnZlcnRKT2JqZWN0VG9WYWx1ZShleGVjLCB2YWx1ZSksIHNsb3QpOwog
fQpAQCAtMzYxLDcgKzM2MSw3IEBAIHZvaWQgSmF2YUpTT2JqZWN0OjpyZW1vdmVNZW1iZXIoanN0
cmluZyAKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIF9pbXAt
Pm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KF9pbXAsIGV4ZWMsIElkZW50aWZpZXIoZXhl
YywgSmF2YVN0cmluZyhtZW1iZXJOYW1lKS5pbXBsKCkpKTsKIH0KIApAQCAtMzc2LDcgKzM3Niw3
IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpnZXRTbG90KGppbnQgaW5kZXgKIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gX2ltcC0+Z2V0KGV4ZWMsIGluZGV4
KTsKIAogICAgIHJldHVybiBjb252ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKQEAgLTM5Miw3
ICszOTIsNyBAQCB2b2lkIEphdmFKU09iamVjdDo6c2V0U2xvdChqaW50IGluZGV4LCBqCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBfaW1wLT5tZXRob2RUYWJs
ZSgpLT5wdXRCeUluZGV4KF9pbXAsIGV4ZWMsICh1bnNpZ25lZClpbmRleCwgY29udmVydEpPYmpl
Y3RUb1ZhbHVlKGV4ZWMsIHZhbHVlKSwgZmFsc2UpOwogfQogCkBAIC00MDUsOSArNDA1LDkgQEAg
anN0cmluZyBKYXZhSlNPYmplY3Q6OnRvU3RyaW5nKCkgY29uc3QKICAgICBpZiAoIXJvb3RPYmpl
Y3QpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKICAgICBKU09iamVjdCAqdGhpc09iaiA9IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihf
aW1wKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxqc3RyaW5nPihjb252ZXJ0VmFsdWVUb0pWYWx1ZShleGVjLCByb290
T2JqZWN0LCB0aGlzT2JqLCBKYXZhVHlwZU9iamVjdCwgImphdmEubGFuZy5TdHJpbmciKS5sKTsK
IH0KQEAgLTQ2MywxMyArNDYzLDEzIEBAIGpsb25nIEphdmFKU09iamVjdDo6Y3JlYXRlTmF0aXZl
KGpsb25nIG4KIAogam9iamVjdCBKYXZhSlNPYmplY3Q6OmNvbnZlcnRWYWx1ZVRvSk9iamVjdChK
U1ZhbHVlIHZhbHVlKSBjb25zdAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7Ci0gICAgCiAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IHRoaXMtPnJvb3RPYmpl
Y3QoKTsKICAgICBpZiAoIXJvb3RPYmplY3QpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgCiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKTklFbnYgKmVudiA9IGdl
dEpOSUVudigpOwogICAgIGpvYmplY3QgcmVzdWx0ID0gMDsKICAgICAKQEAgLTU1NCw3ICs1NTQs
NyBAQCBKU1ZhbHVlIEphdmFKU09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhCiAgICAgLy8gZmln
dXJlIDIyLTQuCiAgICAgam9iamVjdCBjbGFzc09mSW5zdGFuY2UgPSBjYWxsSk5JTWV0aG9kPGpv
YmplY3Q+KHRoZU9iamVjdCwgImdldENsYXNzIiwgIigpTGphdmEvbGFuZy9DbGFzczsiKTsKICAg
ICBpZiAoIWNsYXNzT2ZJbnN0YW5jZSkgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAg
cmV0dXJuIEphdmFJbnN0YW5jZTo6Y3JlYXRlKHRoZU9iamVjdCwgX3Jvb3RPYmplY3QpLT5jcmVh
dGVSdW50aW1lT2JqZWN0KGV4ZWMpOwogICAgIH0KIApAQCAtNTYzLDcgKzU2Myw3IEBAIEpTVmFs
dWUgSmF2YUpTT2JqZWN0Ojpjb252ZXJ0Sk9iamVjdFRvVmEKICAgICAvLyBwb2ludGVyIGFuZCBz
dG9yZXMgaXQgaW4gdGhpcyBvYmplY3QsIHNvIHRoYXQgaXQgY2FuIGJlIHJldHJpZXZlZCBiZWxv
dy4KICAgICBqc3RyaW5nIGNsYXNzTmFtZSA9IChqc3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVj
dD4oY2xhc3NPZkluc3RhbmNlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOwog
ICAgIGlmICghY2xhc3NOYW1lIHx8IChzdHJjbXAoSmF2YVN0cmluZyhjbGFzc05hbWUpLnV0Zjgo
KSwgInN1bi5wbHVnaW4uamF2YXNjcmlwdC53ZWJraXQuSlNPYmplY3QiKSAhPSAwKSkgewotICAg
ICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgcmV0dXJuIEphdmFJbnN0YW5jZTo6Y3JlYXRlKHRo
ZU9iamVjdCwgX3Jvb3RPYmplY3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfb2JqYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9vYmpjLm1tCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9vYmpjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgSlNDOjpCaW5kaW5nczo6ZGlzcGF0Y2hKTklDYWxs
KEV4ZWMKICAgICAgICAgLy8gaW1wbGVtZW50ZWQgaW4gV2ViQ29yZSB3aWxsIGd1YXJhbnRlZSB0
aGF0IG9ubHkgYXBwcm9wcmlhdGUgSmF2YVNjcmlwdAogICAgICAgICAvLyBjYW4gcmVmZXJlbmNl
IHRoZSBhcHBsZXQuCiAgICAgICAgIHsKLSAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgICAgIHJlc3VsdCA9IFt2
aWV3IHdlYlBsdWdJbkNhbGxKYXZhOm9iaiBpc1N0YXRpYzppc1N0YXRpYyByZXR1cm5UeXBlOnJl
dHVyblR5cGUgbWV0aG9kOm1ldGhvZElEIGFyZ3VtZW50czphcmdzIGNhbGxpbmdVUkw6bmlsIGV4
Y2VwdGlvbkRlc2NyaXB0aW9uOiZfZXhjZXB0aW9uRGVzY3JpcHRpb25dOwogICAgICAgICB9CiAK
QEAgLTcyLDcgKzcyLDcgQEAgYm9vbCBKU0M6OkJpbmRpbmdzOjpkaXNwYXRjaEpOSUNhbGwoRXhl
YwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgZWxzZSBpZiAoW3ZpZXcgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5DYWxsSmF2YTptZXRob2Q6cmV0dXJuVHlw
ZTphcmd1bWVudHM6KV0pIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgcmVzdWx0ID0gW3ZpZXcgd2ViUGx1Z0luQ2Fs
bEphdmE6b2JqIG1ldGhvZDptZXRob2RJRCByZXR1cm5UeXBlOnJldHVyblR5cGUgYXJndW1lbnRz
OmFyZ3NdOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJp
dmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBAQCBzdGF0aWMgam9iamVj
dCBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2CiAKIGp2YWx1ZSBjb252ZXJ0VmFsdWVUb0pWYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIFJvb3RPYmplY3QqIHJvb3RPYmplY3QsIEpTVmFsdWUgdmFsdWUs
IEphdmFUeXBlIGphdmFUeXBlLCBjb25zdCBjaGFyKiBqYXZhQ2xhc3NOYW1lKQogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAKICAgICBqdmFsdWUgcmVzdWx0OwogICAgIG1lbXNldCgmcmVzdWx0LCAwLCBzaXpl
b2YoanZhbHVlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xh
c3NKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0ph
dmFDbGFzc0pTQy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9qbmkvanNjL0phdmFDbGFzc0pTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcg
QEAgSmF2YUNsYXNzOjpKYXZhQ2xhc3Moam9iamVjdCBhbkluc3RhbmNlKQogICAgICAgICAgICAg
am9iamVjdCBhSkZpZWxkID0gZW52LT5HZXRPYmplY3RBcnJheUVsZW1lbnQoKGpvYmplY3RBcnJh
eSlmaWVsZHMsIGkpOwogICAgICAgICAgICAgSmF2YUZpZWxkKiBhRmllbGQgPSBuZXcgSmF2YUZp
ZWxkKGVudiwgYUpGaWVsZCk7IC8vIGRlbGV0ZWQgaW4gdGhlIEphdmFDbGFzcyBkZXN0cnVjdG9y
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGFjcXVpcmUg
YSBKU0xvY2sgaGVyZT8KICAgICAgICAgICAgICAgICBtX2ZpZWxkcy5zZXQoYUZpZWxkLT5uYW1l
KCkuaW1wbCgpLCBhRmllbGQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZW52LT5EZWxl
dGVMb2NhbFJlZihhSkZpZWxkKTsKQEAgLTc5LDcgKzc5LDcgQEAgSmF2YUNsYXNzOjpKYXZhQ2xh
c3Moam9iamVjdCBhbkluc3RhbmNlKQogICAgICAgICAgICAgSmF2YU1ldGhvZCogYU1ldGhvZCA9
IG5ldyBKYXZhTWV0aG9kKGVudiwgYUpNZXRob2QpOyAvLyBkZWxldGVkIGluIHRoZSBKYXZhQ2xh
c3MgZGVzdHJ1Y3RvcgogICAgICAgICAgICAgTWV0aG9kTGlzdCogbWV0aG9kTGlzdDsKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYWNxdWlyZSBhIEpTTG9j
ayBoZXJlPwogCiAgICAgICAgICAgICAgICAgbWV0aG9kTGlzdCA9IG1fbWV0aG9kcy5nZXQoYU1l
dGhvZC0+bmFtZSgpLmltcGwoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFtZXRob2RMaXN0KSB7
CkBAIC0xMDAsNyArMTAwLDcgQEAgSmF2YUNsYXNzOjp+SmF2YUNsYXNzKCkKIHsKICAgICBmYXN0
RnJlZShjb25zdF9jYXN0PGNoYXIqPihtX25hbWUpKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNM
b2NrIGhlcmU/CiAKICAgICBkZWxldGVBbGxWYWx1ZXMobV9maWVsZHMpOwogICAgIG1fZmllbGRz
LmNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFu
Y2VKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0ph
dmFJbnN0YW5jZUpTQy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcg
Kzg3LDcgQEAgQ2xhc3MqIEphdmFJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdAogCiBKU1ZhbHVl
IEphdmFJbnN0YW5jZTo6c3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAKICAgICBqc3RyaW5nIHN0cmluZ1ZhbHVlID0gKGpzdHJpbmcpY2FsbEpOSU1l
dGhvZDxqb2JqZWN0PihtX2luc3RhbmNlLT5pbnN0YW5jZSgpLCAidG9TdHJpbmciLCAiKClMamF2
YS9sYW5nL1N0cmluZzsiKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2Mv
SmF2YU1ldGhvZEpTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2pu
aS9qc2MvSmF2YU1ldGhvZEpTQy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Miw3ICs5Miw3IEBAIEphdmFNZXRob2Q6On5KYXZhTWV0aG9kKCkKIC8vIHdlIGdldCAnLicgYmV0
d2VlbiBjb21wb25lbnRzIGZyb20gdGhlIHJlZmxlY3Rpb24gQVBJLgogc3RhdGljIHZvaWQgYXBw
ZW5kQ2xhc3NOYW1lKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IGNoYXIqIGNsYXNzTmFt
ZSkKIHsKLSAgICBBU1NFUlQoSlNMb2NrOjpsb2NrQ291bnQoKSA+IDApOworICAgIEFTU0VSVChK
U0M6OkpTR2xvYmFsRGF0YTo6c2hhcmVkSW5zdGFuY2UoKS5hcGlMb2NrKCkuY3VycmVudFRocmVh
ZElzSG9sZGluZ0xvY2soKSk7CiAKICAgICBjaGFyKiBjID0gZmFzdFN0ckR1cChjbGFzc05hbWUp
OwogCkBAIC0xMTEsNyArMTExLDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kQ2xhc3NOYW1lKFN0cmlu
Z0J1aWxkZQogY29uc3QgY2hhciogSmF2YU1ldGhvZDo6c2lnbmF0dXJlKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fc2lnbmF0dXJlKSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYWNxdWlyZSBhIEpTTG9jayBo
ZXJlPwogCiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2lnbmF0dXJlQnVpbGRlcjsKICAgICAgICAg
c2lnbmF0dXJlQnVpbGRlci5hcHBlbmQoJygnKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9qbmkvanNjL0phdmFTdHJpbmdKU0MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlNDLmgJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFTdHJpbmdKU0MuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBKYXZhU3RyaW5nSlNDX2gKIAogI2luY2x1ZGUgIkpO
SVV0aWxpdHkuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKICNpbmNsdWRlICJKYXZh
SW5zdGFuY2VKU0MuaCIKIAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CkBAIC01MiwyMCAr
NTMsMjAgQEAgcHVibGljOgogCiAgICAgSmF2YVN0cmluZygpCiAgICAgewotICAgICAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9j
ayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAg
ICAgbV9pbXBsID0gVVN0cmluZygpLmltcGwoKTsKICAgICB9CiAKICAgICB+SmF2YVN0cmluZygp
CiAgICAgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICAgICAgICAgbV9pbXBsID0gMDsKICAgICB9CiAKICAgICBjb25zdCBj
aGFyKiB1dGY4KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghbV91dGY4U3RyaW5nLmRhdGEo
KSkgewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgbV91dGY4U3RyaW5nID0gVVN0cmluZyht
X2ltcGwpLnV0ZjgoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbV91dGY4U3RyaW5nLmRh
dGEoKTsKQEAgLTc5LDcgKzgwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgaW50IHNpemUgPSBlLT5H
ZXRTdHJpbmdMZW5ndGgocyk7CiAgICAgICAgIGNvbnN0IGpjaGFyKiB1YyA9IGdldFVDaGFyYWN0
ZXJzRnJvbUpTdHJpbmdJbkVudihlLCBzKTsKICAgICAgICAgewotICAgICAgICAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
ICAgICAgICAgbV9pbXBsID0gVVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4o
dWMpLCBzaXplKS5pbXBsKCk7CiAgICAgICAgIH0KICAgICAgICAgcmVsZWFzZVVDaGFyYWN0ZXJz
Rm9ySlN0cmluZ0luRW52KGUsIHMsIHVjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
c2MvQnJpZGdlSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNj
L0JyaWRnZUpTQy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9qc2MvQnJpZGdlSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBKU09i
amVjdCogSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoCiAgICAgaWYgKFJ1bnRpbWVPYmpl
Y3QqIGV4aXN0aW5nT2JqZWN0ID0gbV9ydW50aW1lT2JqZWN0LmdldCgpKQogICAgICAgICByZXR1
cm4gZXhpc3RpbmdPYmplY3Q7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFJ1bnRpbWVPYmplY3QqIG5l
d09iamVjdCA9IG5ld1J1bnRpbWVPYmplY3QoZXhlYyk7CiAgICAgbV9ydW50aW1lT2JqZWN0ID0g
UGFzc1dlYWs8UnVudGltZU9iamVjdD4obmV3T2JqZWN0KTsKICAgICBtX3Jvb3RPYmplY3QtPmFk
ZFJ1bnRpbWVPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdPYmplY3QpOwpAQCAtMTAxLDcg
KzEwMSw3IEBAIEpTT2JqZWN0KiBJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdCgKIAogUnVu
dGltZU9iamVjdCogSW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAKICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVy
ZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0CiAgICAg
Ly8gV2UgbmVlZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAiaSIuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0JKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2Uu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBPYmpjSW5zdGFuY2U6Om1v
dmVHbG9iYWxFeGNlcHRpb25UbwogICAgIH0KIAogICAgIGlmICghc19leGNlcHRpb25FbnZpcm9u
bWVudCB8fCBzX2V4Y2VwdGlvbkVudmlyb25tZW50ID09IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKSkgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBz
X2V4Y2VwdGlvbik7CiAgICAgfQogCkBAIC0yMzksNyArMjM5LDcgQEAgSlNWYWx1ZSBPYmpjSW5z
dGFuY2U6Omludm9rZU9iamNNZXRob2QoRQogewogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNVbmRl
ZmluZWQoKTsKICAgICAKLSAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNj
b3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRy
eSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAKICAgICBzZXRHbG9iYWxF
eGNlcHRpb24obmlsKTsKICAgICAKQEAgLTM1NCw3ICszNTQsNyBAQCBKU1ZhbHVlIE9iamNJbnN0
YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvCiB7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1VuZGVm
aW5lZCgpOwogCi0gICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBi
ZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2Nv
cGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogICAgIHNldEdsb2JhbEV4Y2VwdGlv
bihuaWwpOwogICAgIAogQHRyeSB7CkBAIC00MTEsNyArNDExLDcgQEAgYm9vbCBPYmpjSW5zdGFu
Y2U6OnNldFZhbHVlT2ZVbmRlZmluZWRGaQogICAgIGlmICghW3RhcmdldE9iamVjdCByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldFZhbHVlOmZvclVuZGVmaW5lZEtleTopXSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRy
eSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhl
IEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogCiAgICAgLy8gVGhp
cyBjaGVjayBpcyBub3QgcmVhbGx5IG5lY2Vzc2FyeSBiZWNhdXNlIE5TT2JqZWN0IGltcGxlbWVu
dHMKICAgICAvLyBzZXRWYWx1ZTpmb3JVbmRlZmluZWRLZXk6LCBhbmQgdW5mb3J0dW5hdGVseSB0
aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgpAQCAtNDQzLDcgKzQ0Myw3IEBAIEpTVmFsdWUgT2Jq
Y0luc3RhbmNlOjpnZXRWYWx1ZU9mVW5kZWZpbmUKICAgICAKICAgICBpZCB0YXJnZXRPYmplY3Qg
PSBnZXRPYmplY3QoKTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkg
c2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBA
dHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KIAogICAgIC8vIFRoaXMg
Y2hlY2sgaXMgbm90IHJlYWxseSBuZWNlc3NhcnkgYmVjYXVzZSBOU09iamVjdCBpbXBsZW1lbnRz
CiAgICAgLy8gdmFsdWVGb3JVbmRlZmluZWRLZXk6LCBhbmQgdW5mb3J0dW5hdGVseSB0aGUgZGVm
YXVsdCBpbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2Jq
Y19ydW50aW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29i
amNfcnVudGltZS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdl
L29iamMvb2JqY19ydW50aW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxOSArOTIsMTggQEAg
SlNWYWx1ZSBPYmpjRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZQogICAgIAogICAgIGlkIHRh
cmdldE9iamVjdCA9IChzdGF0aWNfY2FzdDxjb25zdCBPYmpjSW5zdGFuY2UqPihpbnN0YW5jZSkp
LT5nZXRPYmplY3QoKTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkg
c2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBA
dHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KIAogICAgIEB0cnkgewog
ICAgICAgICBpZiAoaWQgb2JqY1ZhbHVlID0gW3RhcmdldE9iamVjdCB2YWx1ZUZvcktleTooTlNT
dHJpbmcgKilfbmFtZS5nZXQoKV0pCiAgICAgICAgICAgICByZXN1bHQgPSBjb252ZXJ0T2JqY1Zh
bHVlVG9WYWx1ZShleGVjLCAmb2JqY1ZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgaW5zdGFuY2UtPnJv
b3RPYmplY3QoKSk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICAgICAgICAgIE9iamNJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4
ZWMpOwogICAgICAgICB9CiAgICAgfSBAY2F0Y2goTlNFeGNlcHRpb24qIGxvY2FsRXhjZXB0aW9u
KSB7Ci0gICAgICAgIEpTTG9jazo6bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBbbG9j
YWxFeGNlcHRpb24gcmVhc29uXSk7Ci0gICAgICAgIEpTTG9jazo6dW5sb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CiAgICAgfQogCiAgICAgLy8gV29yayBhcm91bmQgcHJvYmxlbSBpbiBzb21l
IHZlcnNpb25zIG9mIEdDQyB3aGVyZSByZXN1bHQgZ2V0cyBtYXJrZWQgdm9sYXRpbGUgYW5kCkBA
IC0xMjUsMTggKzEyNCwxNyBAQCB2b2lkIE9iamNGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4
ZWNTCiAgICAgaWQgdGFyZ2V0T2JqZWN0ID0gKHN0YXRpY19jYXN0PGNvbnN0IE9iamNJbnN0YW5j
ZSo+KGluc3RhbmNlKSktPmdldE9iamVjdCgpOwogICAgIGlkIHZhbHVlID0gY29udmVydFZhbHVl
VG9PYmpjT2JqZWN0KGV4ZWMsIGFWYWx1ZSk7CiAKLSAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5z
aWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KKyAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENhbid0IHB1dCB0aGlz
IGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAK
ICAgICBAdHJ5IHsKICAgICAgICAgW3RhcmdldE9iamVjdCBzZXRWYWx1ZTp2YWx1ZSBmb3JLZXk6
KE5TU3RyaW5nICopX25hbWUuZ2V0KCldOwogICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgICAgICAgICBPYmpjSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25U
b0V4ZWNTdGF0ZShleGVjKTsKICAgICAgICAgfQogICAgIH0gQGNhdGNoKE5TRXhjZXB0aW9uKiBs
b2NhbEV4Y2VwdGlvbikgewotICAgICAgICBKU0xvY2s6OmxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHRocm93RXJy
b3IoZXhlYywgW2xvY2FsRXhjZXB0aW9uIHJlYXNvbl0pOwotICAgICAgICBKU0xvY2s6OnVubG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291
cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC04Niw3ICs4Niw3IEBAIE9iamNWYWx1ZSBjb252ZXJ0VmFsdWVUb09iamNWYWx1ZShFeGVjU3QK
IAogICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIE9iamNPYmplY3RUeXBlOiB7Ci0g
ICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEpT
R2xvYmFsT2JqZWN0ICpvcmlnaW5HbG9iYWxPYmplY3QgPSBleGVjLT5keW5hbWljR2xvYmFsT2Jq
ZWN0KCk7CiAgICAgICAgICAgICBSb290T2JqZWN0KiBvcmlnaW5Sb290T2JqZWN0ID0gZmluZFJv
b3RPYmplY3Qob3JpZ2luR2xvYmFsT2JqZWN0KTsKQEAgLTE0Niw3ICsxNDYsNyBAQCBPYmpjVmFs
dWUgY29udmVydFZhbHVlVG9PYmpjVmFsdWUoRXhlY1N0CiAKIEpTVmFsdWUgY29udmVydE5TU3Ry
aW5nVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBOU1N0cmluZyAqbnNzdHJpbmcpCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICAKICAgICB1bmljaGFyICpjaGFyczsKICAgICB1bnNpZ25lZCBpbnQgbGVu
Z3RoID0gW25zc3RyaW5nIGxlbmd0aF07CkBAIC0xNzgsNyArMTc4LDcgQEAgSlNWYWx1ZSBjb252
ZXJ0TlNTdHJpbmdUb1N0cmluZyhFeGVjU3RhdAogKi8KIEpTVmFsdWUgY29udmVydE9iamNWYWx1
ZVRvVmFsdWUoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiBidWZmZXIsIE9iamNWYWx1ZVR5cGUgdHlw
ZSwgUm9vdE9iamVjdCogcm9vdE9iamVjdCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAogICAgIHN3
aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIE9iamNPYmplY3RUeXBlOiB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiSlNHbG9i
YWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5
cGUuaCIKQEAgLTkyLDcgKzkzLDcgQEAgUXRJbnN0YW5jZTo6UXRJbnN0YW5jZShRT2JqZWN0KiBv
LCBQYXNzUgogCiBRdEluc3RhbmNlOjp+UXRJbnN0YW5jZSgpCiB7Ci0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJDb3JlOjpK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIGNhY2hlZEluc3Rh
bmNlcy5yZW1vdmUobV9oYXNoa2V5KTsKIApAQCAtMTE5LDcgKzEyMCw3IEBAIFF0SW5zdGFuY2U6
On5RdEluc3RhbmNlKCkKIAogUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBRdEluc3RhbmNlOjpnZXRR
dEluc3RhbmNlKFFPYmplY3QqIG8sIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCwg
VmFsdWVPd25lcnNoaXAgb3duZXJzaGlwKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBmb3JlYWNoIChRdEluc3RhbmNlKiBp
bnN0YW5jZSwgY2FjaGVkSW5zdGFuY2VzLnZhbHVlcyhvKSkKICAgICAgICAgaWYgKGluc3RhbmNl
LT5yb290T2JqZWN0KCkgPT0gcm9vdE9iamVjdCkgewpAQCAtMTgwLDcgKzE4MSw3IEBAIENsYXNz
KiBRdEluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0CiAKIFJ1bnRpbWVPYmplY3QqIFF0SW5zdGFu
Y2U6Om5ld1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAg
ICAgbV9tZXRob2RzLmNsZWFyKCk7CiAgICAgcmV0dXJuIFF0UnVudGltZU9iamVjdDo6Y3JlYXRl
KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgdGhpcyk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCShyZXZpc2lvbiAx
MjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyMCw3ICs0MjAsNyBAQCBSdW50aW1lT2JqZWN0KiBRdFBpeG1h
cEluc3RhbmNlOjpuZXdSdW50CiAKIEpTT2JqZWN0KiBRdFBpeG1hcEluc3RhbmNlOjpjcmVhdGVQ
aXhtYXBSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxSb290T2JqZWN0
PiByb290LCBjb25zdCBRVmFyaWFudCYgZGF0YSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFJlZlB0
cjxRdFBpeG1hcEluc3RhbmNlPiBpbnN0YW5jZSA9IGFkb3B0UmVmKG5ldyBRdFBpeG1hcEluc3Rh
bmNlKHJvb3QsIGRhdGEpKTsKICAgICByZXR1cm4gaW5zdGFuY2UtPmNyZWF0ZVJ1bnRpbWVPYmpl
Y3QoZXhlYyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3Bw
CShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGlt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw3ICsyMzAsNyBAQCBRVmFyaWFudCBjb252ZXJ0
VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOwogICAg
IH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNSZWFsVHlwZSB0eXBlID0gdmFsdWVSZWFsVHlwZShl
eGVjLCB2YWx1ZSk7CiAgICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpWb2lkKSB7CiAgICAgICAg
IHN3aXRjaCh0eXBlKSB7CkBAIC04MjQsNyArODI0LDcgQEAgSlNWYWx1ZSBjb252ZXJ0UVZhcmlh
bnRUb1ZhbHVlKEV4ZWNTdGF0ZQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6Qm9vbCkKICAgICAgICAg
cmV0dXJuIGpzQm9vbGVhbih2YXJpYW50LnRvQm9vbCgpKTsKQEAgLTE0MjAsNyArMTQyMCw3IEBA
IEVuY29kZWRKU1ZhbHVlIFF0UnVudGltZU1ldGFNZXRob2Q6OmNhbGwKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIFdlIGhhdmUgdG8gcGlj
ayBhIG1ldGhvZCB0aGF0IG1hdGNoZXMuLgotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBRT2JqZWN0ICpv
YmogPSBkLT5tX2luc3RhbmNlLT5nZXRPYmplY3QoKTsKICAgICBpZiAob2JqKSB7CkBAIC0xNTYx
LDcgKzE1NjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kCiB7
CiAgICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERhdGEqIGQgPSBzdGF0aWNfY2FzdDxRdFJ1
bnRpbWVDb25uZWN0aW9uTWV0aG9kICo+KGV4ZWMtPmNhbGxlZSgpKS0+ZF9mdW5jKCk7CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogCiAgICAgUU9iamVjdCogc2VuZGVyID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2Jq
ZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lX3F0NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWVfcXQ0
LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1
bnRpbWVfcXQ0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDcgKzIzMCw3IEBAIFFWYXJpYW50
IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXQKICAgICAgICAgcmV0dXJuIFFWYXJpYW50
KCk7CiAgICAgfQogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1JlYWxUeXBlIHR5cGUgPSB2YWx1ZVJl
YWxUeXBlKGV4ZWMsIHZhbHVlKTsKICAgICBpZiAoaGludCA9PSBRTWV0YVR5cGU6OlZvaWQpIHsK
ICAgICAgICAgc3dpdGNoKHR5cGUpIHsKQEAgLTgyNCw3ICs4MjQsNyBAQCBKU1ZhbHVlIGNvbnZl
cnRRVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAg
ICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpCb29sKQog
ICAgICAgICByZXR1cm4ganNCb29sZWFuKHZhcmlhbnQudG9Cb29sKCkpOwpAQCAtMTQyOSw3ICsx
NDI5LDcgQEAgRW5jb2RlZEpTVmFsdWUgUXRSdW50aW1lTWV0YU1ldGhvZDo6Y2FsbAogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gV2UgaGF2
ZSB0byBwaWNrIGEgbWV0aG9kIHRoYXQgbWF0Y2hlcy4uCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIFFP
YmplY3QgKm9iaiA9IGQtPm1faW5zdGFuY2UtPmdldE9iamVjdCgpOwogICAgIGlmIChvYmopIHsK
QEAgLTE1NzAsNyArMTU3MCw3IEBAIEVuY29kZWRKU1ZhbHVlIFF0UnVudGltZUNvbm5lY3Rpb25N
ZXRob2QKIHsKICAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSogZCA9IHN0YXRpY19j
YXN0PFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QgKj4oZXhlYy0+Y2FsbGVlKCkpLT5kX2Z1bmMo
KTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBRT2JqZWN0KiBzZW5kZXIgPSBkLT5tX2luc3RhbmNl
LT5nZXRPYmplY3QoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTEsNyArNTUxLDcgQEAgdm9pZCBI
VE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZQogICAgIG1fY29udGV4dFN0YXRlU2F2
ZXIgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcigqbV9pbWFnZUJ1ZmZl
ci0+Y29udGV4dCgpKSk7CiAKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2NrIGxvY2soSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5nbG9iYWxEYXRhKCkpOwogICAgIHNpemVfdCBudW1CeXRl
cyA9IDQgKiBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKS53aWR0aCgpICogbV9pbWFnZUJ1
ZmZlci0+aW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7CiAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT5nbG9iYWxEYXRhKCktPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KG51bUJ5dGVzKTsK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcAkocmV2
aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MSw4ICs4MSw4IEBAIHZvaWQgSFRNTEltYWdlTG9hZGVyOjpu
b3RpZnlGaW5pc2hlZChDYWMKICNpZiBVU0UoSlNDKQogICAgIGlmICghbG9hZEVycm9yKSB7CiAg
ICAgICAgIGlmICghZWxlbS0+aW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9j
ayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgICAgIEpTQzo6SlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSk7CiAg
ICAgICAgICAgICBnbG9iYWxEYXRhLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChjYWNoZWRJ
bWFnZS0+ZW5jb2RlZFNpemUoKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw3ICsyNDAs
NyBAQCBib29sIFBsdWdpblZpZXc6OnN0YXJ0KCkKICAgICB7CiAgICAgICAgIFBsdWdpblZpZXc6
OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgc2V0
Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+bmV3cCgoTlBNSU1FVHlwZSltX21pbWVUeXBlLnV0ZjgoKS5kYXRhKCksIG1faW5zdGFu
Y2UsIG1fbW9kZSwgbV9wYXJhbUNvdW50LCBtX3BhcmFtTmFtZXMsIG1fcGFyYW1WYWx1ZXMsIE5V
TEwpOwpAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c3RvcCgpCiAgICAgbV9p
c1N0YXJ0ZWQgPSBmYWxzZTsKIAogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKQEAgLTQ0Niw3ICs0NDYsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0
KFBsdWdpblJlCiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpKSB7
CiAgICAgICAgICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7
CiAjaWYgVVNFKEpTQykKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICBzZXRDYWxs
aW5nUGx1Z2luKHRydWUpOwogICAgICAgICAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT51cmxub3RpZnkobV9pbnN0YW5jZSwgcmVxdWVzdFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCBOUFJFU19ET05FLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOwpAQCAtNzM2LDcgKzczNiw3IEBA
IE5QT2JqZWN0KiBQbHVnaW5WaWV3OjpucE9iamVjdCgpCiAgICAgewogICAgICAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKICNpZiBVU0UoSlNDKQotICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgICAg
IHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmpl
Y3QsICZvYmplY3QpOwpAQCAtMTQ5Miw3ICsxNDkyLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpwcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYQogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZp
ZXcodGhpcyk7CiAjaWYgVVNFKEpTQykKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAjZW5kaWYKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIE5QQm9v
bCB2YWx1ZSA9IHByaXZhdGVCcm93c2luZ0VuYWJsZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3QmxhY2tCZXJyeS5j
cHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvYmxhY2tiZXJy
eS9QbHVnaW5WaWV3QmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMyw3ICs0MDMs
NyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxs
aW5nUGx1Z2luKHRydWUpOwogCiAgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpAQCAtOTcwLDcgKzk3MCw3IEBAIHZv
aWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAgICAgICAgICgoTlBTZXRXaW5k
b3dDYWxsYmFja1N0cnVjdCopbV9ucFdpbmRvdy53c19pbmZvKS0+d2luZG93R3JvdXAgPSB3aW5k
b3ctPndpbmRvd0dyb3VwKCk7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmll
dyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIC8vIEZJWE1FOiBQYXNzaW5nIHpvb21GYWN0
b3IgdG8gc2V0d2luZG93IG1ha2Ugd2luZG93ZWQgcGx1Z2luIHNjYWxlIGluY29ycmVjdGx5LgpA
QCAtMTIyMCw3ICsxMjIwLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKIAog
ICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsKICAgICAgICAgUGx1
Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4o
dHJ1ZSk7CiAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3Rh
bmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKICAgICAgICAgc2V0
Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBAIC0xMzAxLDcgKzEzMDEsNyBAQCB2b2lkIFBsdWdpblZp
ZXc6OmdldFdpbmRvd0luZm8oVmVjdG9yPFBsCiAgICAgdm9pZCogdmFsUHRyID0gMDsKIAogICAg
IFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwog
ICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1
Z2luU2NyZWVuV2luZG93LCAmdmFsUHRyKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZpZXdFZmwuY3BwCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVnaW5WaWV3
RWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBib29sIFBsdWdpblZpZXc6
OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogCiAgICAgYm9vbCBhY2NlcHRlZCA9IG1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNw
YXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJv
b2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2Us
ICZldmVudCk7CkBAIC0yNzYsNyArMjc2LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFw
aGljc0NvbnRleHQqIAogCiB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5
Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOwogCiAgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHkpCiAgICAgICAgIHJldHVybjsKQEAgLTQwNiw3ICs0MDYsNyBA
QCBzdGF0aWMgdm9pZCBzZXRYQ3Jvc3NpbmdFdmVudFNwZWNpZmljRmllCiAKIHZvaWQgUGx1Z2lu
Vmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKIHsKLSAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBpZiAoIW1faXNTdGFydGVkIHx8
IG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNTM1LDcgKzUzNSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5l
ZWRlZCgpCiAgICAgfQogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhp
cyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNldENh
bGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRv
dyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7
CkBAIC04NDIsNyArODQyLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKICNp
ZiBkZWZpbmVkKFhQX1VOSVgpCiAgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2
YWx1ZSkgewogICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsK
LSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAg
ICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVlZHNY
RW1iZWQpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbQkocmV2aXNpb24gMTIwOTI2KQor
KysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNDI2LDcgKzQyNiw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5l
ZWRlZCgpCiAgICAgICAgICAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0IC0gbV9ucFdpbmRv
dy5jbGlwUmVjdC5sZWZ0LCBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSAtIG1fbnBXaW5kb3cu
Y2xpcFJlY3QudG9wKTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRo
aXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRD
YWxsaW5nUGx1Z2luKHRydWUpOwogICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5k
b3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2Up
OwpAQCAtNzcyLDcgKzc3Miw3IEBAIFBvaW50IFBsdWdpblZpZXc6Om1vdXNlUG9zRm9yUGx1Z2lu
KE1vdXMKIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIGV2ZW50KQog
ewogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRy
dWUpOwogCiAgICAgYm9vbCBhY2NlcHRlZCA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVu
dChtX2luc3RhbmNlLCAmZXZlbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9xdC9Q
bHVnaW5WaWV3UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQv
UGx1Z2luVmlld1F0LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzMsNyArMzczLDcg
QEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogCiAgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAjaWYgVVNFKEpTQykKLSAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICBzZXRDYWxsaW5n
UGx1Z2luKHRydWUpOwogICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CkBAIC02ODcsNyArNjg3LDcgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKIAogICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVl
KTsKICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZt
X25wV2luZG93KTsKQEAgLTk0OSw3ICs5NDksNyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3Jt
U3RhcnQoKQogICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsKICAg
ICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAjaWYgVVNFKEpT
QykKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICNl
bmRpZgogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVk
LCAmbV9uZWVkc1hFbWJlZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVn
aW5WaWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9Q
bHVnaW5WaWV3V2luLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvcGx1
Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyNiw3ICs1MjYs
NyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAgICAgICAgIHNo
b3VsZFBvcCA9IHRydWU7CiAgICAgfQogCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgYm9vbCBhY2NlcHRl
ZCA9ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQp
OwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtNjc3LDcgKzY3Nyw3IEBAIHZvaWQg
UGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXkKICAgICB9IGVsc2UKICAgICAgICAg
cmV0dXJuOwogCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
IGlmIChkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOwogfQpAQCAtNzQ3LDcgKzc0Nyw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
TW91c2VFdmVudChNb3VzZUUKICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIC8vIEZJWE1FOiBDb25zaWRl
ciBiYWNrIHBvcnRpbmcgdGhlIGh0dHA6Ly93ZWJraXQub3JnL2IvNTgxMDggZml4IGhlcmUuCiAg
ICAgaWYgKGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7CkBAIC04MzUsNyArODM1LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdp
bmRvd1JlY3QoY29uc3QgSQogICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKIAogICAg
IGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7Ci0gICAgICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7CiAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3co
bV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3Vw
cG9ydC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMv
V2ViQ29yZVRlc3RTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZVRlc3RTdXBwb3J0IHsKIAogdm9pZCBpbmplY3RJbnRlcm5hbHNPYmpl
Y3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnbG9iYWxP
YmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBzY3JpcHRDb250ZXh0LT5pc0RvY3VtZW50KCkgPyBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHNj
cmlwdENvbnRleHQpIDogMDsKQEAgLTQ5LDggKzQ5LDggQEAgdm9pZCBpbmplY3RJbnRlcm5hbHNP
YmplY3QoSlNDb250ZXh0UmVmIAogCiB2b2lkIHJlc2V0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4
dFJlZiBjb250ZXh0KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBJ
bnRlcm5hbHMgKiBpbnRlcm5hbHMgPSB0b0ludGVybmFscyhnbG9iYWxPYmplY3QtPmdldERpcmVj
dChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgSW50ZXJuYWxzOjppbnRlcm5h
bHNJZCkpKTsKICAgICBpZiAoaW50ZXJuYWxzKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1MSw4ICs4NTEsOCBAQCB2b2lk
IFhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbigpCiAgICAgLy8gb3V0LiBCdXQgaXQgaXMg
cHJvdGVjdGVkIGZyb20gR0Mgd2hpbGUgbG9hZGluZywgc28gdGhpcwogICAgIC8vIGNhbid0IGJl
IHJlY291cGVkIHVudGlsIHRoZSBsb2FkIGlzIGRvbmUsIHNvIG9ubHkKICAgICAvLyByZXBvcnQg
dGhlIGV4dHJhIGNvc3QgYXQgdGhhdCBwb2ludC4KLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpOworICAgIEpTQzo6SlNM
b2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSk7CiAgICAgZ2xvYmFsRGF0YS0+aGVhcC5yZXBvcnRF
eHRyYU1lbW9yeUNvc3QobV9yZXNwb25zZUJ1aWxkZXIubGVuZ3RoKCkgKiAyKTsKICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAxMi0wNi0yMCAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91
bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3Rl
YWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3Jy
ZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRo
YXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBTaGFyZWQvbWFjL1dl
Yk1lbW9yeVNhbXBsZXIubWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlTYW1wbGVy
OjpzYW1wbGVXZWJLaXQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6amF2YVNj
cmlwdE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpyZXBv
cnRFeGNlcHRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05Q
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Y2FsbE1ldGhvZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxPYmplY3QpOgorICAgICAgICAoV2ViS2l0
OjpKU05QT2JqZWN0OjpjYWxsQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2Jq
ZWN0OjpwdXQpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoV2ViS2l0OjpKU05QT2JqZWN0Ojpwcm9wZXJ0eUdldHRlcik6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOUEpTT2JqZWN0OjpoYXNNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0Ojpp
bnZva2UpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjppbnZva2VEZWZhdWx0KToKKyAg
ICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aGFzUHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0
OjpOUEpTT2JqZWN0OjpnZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6
OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6cmVtb3ZlUHJvcGVy
dHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjplbnVtZXJhdGUpOgorICAgICAgICAo
V2ViS2l0OjpOUEpTT2JqZWN0Ojpjb25zdHJ1Y3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
UFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQpOgorICAgICAgICAo
V2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYktpdDo6
TlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lOjpqc1dyYXBwZXJGb3JXb3JsZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
Ojpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8pOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cnVuSmF2
YVNjcmlwdEluTWFpbkZyYW1lKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpnZXRXZWJDb3JlU3RhdGlzdGljcyk6CisK
IDIwMTItMDYtMjEgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAg
ICAgIFtFRkxbV0syXSBBZGQgV0tWaWV3RWZsIGFuZCBXZWJLaXQyIEFQSSBPYmplY3QgdG8gcmVw
cmVzZW50IEV2YXNfT2JqZWN0LgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJN
ZW1vcnlTYW1wbGVyLm1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbWFjL1dlYk1lbW9yeVNhbXBsZXIubWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTYsNyArMTE2LDcgQEAgV2ViTWVtb3J5U3RhdGlzdGljcyBXZWJNZW1vcnlTYW1wbGVy
OjpzYQogICAgIHRvdGFsQnl0ZXNJblVzZSArPSBmYXN0TWFsbG9jQnl0ZXNJblVzZTsKICAgICB0
b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGZhc3RNYWxsb2NCeXRlc0NvbW1pdHRlZDsKICAgICAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2l6ZV90IGpzY0hl
YXBCeXRlc0luVXNlID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnNp
emUoKTsKICAgICBzaXplX3QganNjSGVhcEJ5dGVzQ29tbWl0dGVkID0gSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNhcGFjaXR5KCk7CiAgICAgdG90YWxCeXRlc0luVXNl
ICs9IGpzY0hlYXBCeXRlc0luVXNlOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjAsNyArOTIwLDcgQEAgdm9p
ZCBXZWJQcm9jZXNzOjpnZXRXZWJDb3JlU3RhdGlzdGljcyh1aQogICAgIAogICAgIC8vIEdhdGhl
ciBKYXZhU2NyaXB0IHN0YXRpc3RpY3MuCiAgICAgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJz
LnNldCgiSmF2YVNjcmlwdE9iamVjdHNDb3VudCIsIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgpKTsKICAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVt
YmVycy5zZXQoIkphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQiLCBKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuZ2xvYmFsT2JqZWN0Q291bnQoKSk7CiAgICAgICAgIGRh
dGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50
IiwgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVj
dENvdW50KCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDEyMDkyNikK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDksNyArNDA5LDcgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZTo6Z2FyYmFnZUNvbGxlY3RKYXZhUwogCiBzaXplX3QgSW5qZWN0ZWRCdW5kbGU6OmphdmFT
Y3JpcHRPYmplY3RzQ291bnQoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5o
ZWFwLm9iamVjdENvdW50KCk7CiB9CiAKQEAgLTQxOCw4ICs0MTgsOCBAQCB2b2lkIEluamVjdGVk
QnVuZGxlOjpyZXBvcnRFeGNlcHRpb24oSlNDCiAgICAgaWYgKCFjb250ZXh0IHx8ICFleGNlcHRp
b24pCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlY1N0YXRlID0gdG9KUyhjb250ZXh0
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjU3RhdGUpOwogCiAgICAgLy8gTWFrZSBzdXJl
IHRoZSBjb250ZXh0IGhhcyBhIERPTVdpbmRvdyBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgdGhp
cyBjb250ZXh0IGRpZG4ndCBvcmlnaW5hdGUgZnJvbSBhIFBhZ2UuCiAgICAgaWYgKCF0b0pTRE9N
V2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9i
amVjdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiAr
MzcsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL09iamVjdFByb3RvdHlwZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSWRlbnRp
ZmllclJlcC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNET01XaW5kb3dCYXNlLmg+CiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApA
QCAtMTI1LDcgKzEyNiw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6Y2FsbE1ldGhvZChFeGVjU3Rh
dGUKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwogICAgIAogICAgIHsKLSAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2Jq
ZWN0LT5fY2xhc3MtPmludm9rZShtX25wT2JqZWN0LCBtZXRob2ROYW1lLCBhcmd1bWVudHMuZGF0
YSgpLCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFw
Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgfQpAQCAtMTY1LDcg
KzE2Niw3IEBAIEpTQzo6SlNWYWx1ZSBKU05QT2JqZWN0OjpjYWxsT2JqZWN0KEpTQzoKICAgICBW
T0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IG1fbnBPYmplY3QtPl9jbGFzcy0+
aW52b2tlRGVmYXVsdChtX25wT2JqZWN0LCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50
LCAmcmVzdWx0KTsKICAgICAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0
aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgfQpAQCAtMjA1LDcgKzIwNiw3IEBAIEpTVmFsdWUg
SlNOUE9iamVjdDo6Y2FsbENvbnN0cnVjdG9yKEV4ZWMKICAgICBWT0lEX1RPX05QVkFSSUFOVChy
ZXN1bHQpOwogICAgIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAgICAgcmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdChtX25w
T2JqZWN0LCBhcmd1bWVudHMuZGF0YSgpLCBhcmd1bWVudENvdW50LCAmcmVzdWx0KTsKICAgICAg
ICAgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhl
Yyk7CiAgICAgfQpAQCAtMzQwLDcgKzM0MSw3IEBAIHZvaWQgSlNOUE9iamVjdDo6cHV0KEpTQ2Vs
bCogY2VsbCwgRXhlY1MKICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBw
cm90ZWN0b3IodGhpc09iamVjdC0+bV9vYmplY3RNYXApOwogCiAgICAgewotICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICB0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5f
Y2xhc3MtPnNldFByb3BlcnR5KHRoaXNPYmplY3QtPm1fbnBPYmplY3QsIG5wSWRlbnRpZmllciwg
JnZhcmlhbnQpOwogCiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2Vw
dGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpAQCAtMzgwLDcgKzM4MSw3IEBAIGJvb2wgSlNOUE9iamVj
dDo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXQKICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdp
blByb3RlY3RvciBwcm90ZWN0b3IobV9vYmplY3RNYXApOwogCiAgICAgewotICAgICAgICBKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdGhy
b3cgYW4gZXhjZXB0aW9uIGlmIHJlbW92ZVByb3BlcnR5IHJldHVybnMgZmFsc2U/CiAgICAgICAg
IGlmICghbV9ucE9iamVjdC0+X2NsYXNzLT5yZW1vdmVQcm9wZXJ0eShtX25wT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUpKQpAQCAtNDEzLDcgKzQxNCw3IEBAIHZvaWQgSlNOUE9iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU08KICAgICBOUFJ1bnRpbWVPYmplY3RNYXA6OlBsdWdpblByb3RlY3RvciBw
cm90ZWN0b3IodGhpc09iamVjdC0+bV9vYmplY3RNYXApOwogICAgIAogICAgIHsKLSAgICAgICAg
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdl
IHRocm93IGFuIGV4Y2VwdGlvbiBpZiBlbnVtZXJhdGUgcmV0dXJucyBmYWxzZT8KICAgICAgICAg
aWYgKCF0aGlzT2JqZWN0LT5tX25wT2JqZWN0LT5fY2xhc3MtPmVudW1lcmF0ZSh0aGlzT2JqZWN0
LT5tX25wT2JqZWN0LCAmaWRlbnRpZmllcnMsICZpZGVudGlmaWVyQ291bnQpKQpAQCAtNDYxLDcg
KzQ2Miw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6cHJvcGVydHlHZXR0ZXIoRXhlY1MKICAgICAK
ICAgICBib29sIHJldHVyblZhbHVlOwogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICAgICAgTlBJZGVudGlmaWVyIG5wSWRlbnRpZmllciA9IG5wSWRlbnRpZmll
ckZyb21JZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gdGhp
c09iai0+bV9ucE9iamVjdC0+X2NsYXNzLT5nZXRQcm9wZXJ0eSh0aGlzT2JqLT5tX25wT2JqZWN0
LCBucElkZW50aWZpZXIsICZyZXN1bHQpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5j
cHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBA
QCBib29sIE5QSlNPYmplY3Q6Omhhc01ldGhvZChOUElkZW50aWZpZXIgCiAgICAgaWYgKCFleGVj
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG1fanNPYmplY3QtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAo
ZXhlYywgaWRlbnRpZmllclJlcCkpOyAgICAKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwpA
QCAtMTE5LDcgKzExOSw3IEBAIGJvb2wgTlBKU09iamVjdDo6aW52b2tlKE5QSWRlbnRpZmllciBt
ZXQKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG1fanNPYmplY3QtPmdldChleGVjLCBpZGVu
dGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoZXhlYywgaWRlbnRpZmllclJlcCkpOwogICAgIHJldHVy
biBpbnZva2UoZXhlYywgbV9vYmplY3RNYXAtPmdsb2JhbE9iamVjdCgpLCBmdW5jdGlvbiwgYXJn
dW1lbnRzLCBhcmd1bWVudENvdW50LCByZXN1bHQpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIGJvb2wg
TlBKU09iamVjdDo6aW52b2tlRGVmYXVsdChjb25zdCBOUFYKICAgICBpZiAoIWV4ZWMpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU1ZhbHVlIGZ1bmN0aW9u
ID0gbV9qc09iamVjdC5nZXQoKTsKICAgICByZXR1cm4gaW52b2tlKGV4ZWMsIG1fb2JqZWN0TWFw
LT5nbG9iYWxPYmplY3QoKSwgZnVuY3Rpb24sIGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVz
dWx0KTsKQEAgLTE0NSw3ICsxNDUsNyBAQCBib29sIE5QSlNPYmplY3Q6Omhhc1Byb3BlcnR5KE5Q
SWRlbnRpZmllCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIGJvb2wgcmVzdWx0OwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5p
c1N0cmluZygpKQpAQCAtMTY1LDcgKzE2NSw3IEBAIGJvb2wgTlBKU09iamVjdDo6Z2V0UHJvcGVy
dHkoTlBJZGVudGlmaWUKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgSlNWYWx1ZSBqc1Jlc3VsdDsKICAgICBpZiAoaWRlbnRpZmllclJl
cC0+aXNTdHJpbmcoKSkKICAgICAgICAganNSZXN1bHQgPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywg
aWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApKTsKQEAgLTE4
NSw3ICsxODUsNyBAQCBib29sIE5QSlNPYmplY3Q6OnNldFByb3BlcnR5KE5QSWRlbnRpZmllCiAg
ICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIEpTVmFsdWUganNWYWx1ZSA9IG1fb2JqZWN0TWFwLT5jb252ZXJ0TlBWYXJpYW50VG9K
U1ZhbHVlKGV4ZWMsIG1fb2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKSwgKnZhbHVlKTsKICAgICBp
ZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkgewpAQCAtMjA2LDcgKzIwNiw3IEBAIGJvb2wg
TlBKU09iamVjdDo6cmVtb3ZlUHJvcGVydHkoTlBJZGVudGkKICAgICBpZiAoIWV4ZWMpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgaWYgKGlkZW50aWZpZXJSZXAt
PmlzU3RyaW5nKCkpIHsKICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gaWRlbnRpZmll
ckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApOwogICAgICAgICAKQEAgLTIz
NSw3ICsyMzUsNyBAQCBib29sIE5QSlNPYmplY3Q6OmVudW1lcmF0ZShOUElkZW50aWZpZXIqCiAg
ICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CiAgICAgbV9qc09i
amVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyhtX2pzT2JqZWN0LmdldCgpLCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKQEAgLTI1Nyw3
ICsyNTcsNyBAQCBib29sIE5QSlNPYmplY3Q6OmNvbnN0cnVjdChjb25zdCBOUFZhcmlhCiAgICAg
aWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAg
Q29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0
VHlwZSA9IGdldENvbnN0cnVjdERhdGEobV9qc09iamVjdC5nZXQoKSwgY29uc3RydWN0RGF0YSk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50
aW1lT2JqZWN0TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkocmV2aXNpb24gMTIwOTI2
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGlt
ZU9iamVjdE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBKU1ZhbHVl
IE5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydE5QVmFyCiAKIHZvaWQgTlBSdW50aW1lT2JqZWN0
TWFwOjpjb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2
YWx1ZSwgTlBWYXJpYW50JiB2YXJpYW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBWT0lEX1RP
X05QVkFSSUFOVCh2YXJpYW50KTsKICAgICAKQEAgLTE4Niw3ICsxODYsNyBAQCBib29sIE5QUnVu
dGltZU9iamVjdE1hcDo6ZXZhbHVhdGUoTlBPYmplCiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZ2V0T3JDcmVhdGVKU09iamVjdChnbG9iYWxPYmplY3QuZ2V0KCksIG5w
T2JqZWN0KTsKIAogICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2Vy
LnN0YXJ0KCk7CkBAIC0yNjYsNyArMjY2LDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6Om1v
dmVHbG9iYWxFeGNlcAogICAgICAgICByZXR1cm47CiAKICAgICB7Ci0gICAgICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIHN0cmluZ1Rv
VVN0cmluZyhnbG9iYWxFeGNlcHRpb25TdHJpbmcoKSkpKTsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Miw3ICs2NDIsNyBAQCBKU1ZhbHVlUmVmIFdlYkZy
YW1lOjpqc1dyYXBwZXJGb3JXb3JsZChJCiAgICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9
IG1fY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHdvcmxkLT5jb3JlV29ybGQoKSk7
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogICAgIHJldHVybiB0b1JlZihleGVjLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgbm9kZUhhbmRsZS0+Y29yZU5vZGUoKSkpOwogfQogCkBAIC02NTQsNyArNjU0LDcgQEAgSlNW
YWx1ZVJlZiBXZWJGcmFtZTo6anNXcmFwcGVyRm9yV29ybGQoSQogICAgIEpTRE9NV2luZG93KiBn
bG9iYWxPYmplY3QgPSBtX2NvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCh3b3JsZC0+
Y29yZVdvcmxkKCkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICByZXR1cm4gdG9SZWYoZXhlYywgdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHJhbmdlSGFuZGxlLT5jb3JlUmFuZ2UoKSkpOwogfQogCkBAIC02NzEs
NyArNjcxLDcgQEAgSlNWYWx1ZVJlZiBXZWJGcmFtZTo6Y29tcHV0ZWRTdHlsZUluY2x1ZAogCiAg
ICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZShzdGF0aWNfY2FzdDxKU0VsZW1lbnQqPih0b0pTKGVs
ZW1lbnQpKS0+aW1wbCgpLCB0cnVlKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgcmV0dXJuIHRvUmVm
KGV4ZWMsIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHlsZS5nZXQoKSkpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZp
c2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MTUsNyArMTgxNSw3IEBAIHZvaWQgV2ViUGFnZTo6
cnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKGMKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBzZXJpYWxpemVkUmVzdWx0VmFsdWU7CiAgICAgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSBk
YXRhUmVmZXJlbmNlOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwogICAgIGlmIChKU1ZhbHVlIHJlc3VsdFZhbHVlID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgp
LT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChzY3JpcHQsIHRydWUpLmpzVmFsdWUoKSkgewogICAg
ICAgICBpZiAoKHNlcmlhbGl6ZWRSZXN1bHRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKG1fbWFpbkZyYW1lLT5qc0NvbnRleHQoKSwgdG9SZWYobV9tYWluRnJhbWUtPmNvcmVG
cmFtZSgpLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+
Z2xvYmFsRXhlYygpLCByZXN1bHRWYWx1ZSksIDApKSkKICAgICAgICAgICAgIGRhdGFSZWZlcmVu
Y2UgPSBzZXJpYWxpemVkUmVzdWx0VmFsdWUtPmRhdGEoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA2LTIw
ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNM
b2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sg
dG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4g
dGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0
IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIEFwaS9C
bGFja0JlcnJ5R2xvYmFsLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6Y2xlYXJN
ZW1vcnlDYWNoZXMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5j
cHA6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlUG9wdXBCbGFja0JlcnJ5OjppbnN0YWxsRG9tRnVuY3Rpb24p
OgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0LmNwcDoKKyAg
ICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0
ZWRJbmZvKToKKwogMjAxMi0wNi0yMSAgTWlrZSBGZW50b24gIDxtaWZlbnRvbkByaW0uY29tPgog
CiAgICAgICAgIFtCbGFja0JlcnJ5XSBJbnB1dCBtb2RlIHNob3VsZCBhZGFwdCBhdXRvbWF0aWNh
bGx5IHRvIHNldHRpbmdzIGNoYW5nZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9B
cGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9CbGFja0JlcnJ5R2xvYmFsLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CbGFja0JlcnJ5R2xvYmFsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA1LDcgKzEwNSwxMCBAQCB2b2lkIGNsZWFyTWVtb3J5Q2FjaGVzKCkKICAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6dXNlckludGVyZmFjZVRocmVhZE1lc3NhZ2VDbGllbnQoKS0+
ZGlzcGF0Y2hNZXNzYWdlKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpjcmVhdGVGdW5jdGlvbkNhbGxN
ZXNzYWdlKGNsZWFyTWVtb3J5Q2FjaGVzSW5Db21wb3NpdGluZ1RocmVhZCkpOwogI2VuZGlmCiAK
LSAgICBjb2xsZWN0SmF2YXNjcmlwdEdhcmJhZ2VOb3coKTsKKyAgICB7CisgICAgICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgY29sbGVjdEphdmFzY3JpcHRHYXJiYWdlTm93KCk7CisgICAgfQogCiAgICAgLy8gQ2xl
YW4gY2FjaGVzIGFmdGVyIEpTIGdhcmJhZ2UgY29sbGVjdGlvbiBiZWNhdXNlIEpTIEdDIGNhbgog
ICAgIC8vIGdlbmVyYXRlIG1vcmUgZGVhZCByZXNvdXJjZXMuCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ2xpZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ2xpZW50RXh0ZW5z
aW9uLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDEx
ICs4NCwxMSBAQCBzdGF0aWMgSlNTdGF0aWNWYWx1ZSBjbGllbnRFeHRlbnNpb25TdGF0CiAvLyBG
SVhNRTogUmV2aXNpdCB0aGUgY3JlYXRpb24gb2YgdGhpcyBjbGFzcyBhbmQgbWFrZSBzdXJlIHRo
aXMgaXMgdGhlIGJlc3Qgd2F5IHRvIGFwcHJvYWNoIGl0Lgogdm9pZCBhdHRhY2hFeHRlbnNpb25P
YmplY3RUb0ZyYW1lKEZyYW1lKiBmcmFtZSwgV2ViUGFnZUNsaWVudCogY2xpZW50KQogewotICAg
IEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAgSlNE
T01XaW5kb3cqIHdpbmRvdyA9IGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwobWFpblRocmVh
ZE5vcm1hbFdvcmxkKCkpLT53aW5kb3coKTsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0g
d2luZG93LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
KwogICAgIEpTQ29udGV4dFJlZiBzY3JpcHRDdHggPSB0b1JlZihleGVjKTsKIAogICAgIEpTQ2xh
c3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25FbXB0eTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9QYWdlUG9wdXBCbGFja0Jl
cnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1
cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9QYWdlUG9wdXBCbGFja0JlcnJ5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDEzICsxMjIsMTIgQEAgc3RhdGljIEpTU3RhdGljVmFs
dWUgcG9wVXBFeHRlbnNpb25TdGF0aQogCiB2b2lkIFBhZ2VQb3B1cEJsYWNrQmVycnk6Omluc3Rh
bGxEb21GdW5jdGlvbihGcmFtZSogZnJhbWUpCiB7Ci0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9K
U0RPTVdpbmRvdyhmcmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogICAgIEFTU0VSVCh3
aW5kb3cpOwogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMo
KTsKICAgICBBU1NFUlQoZXhlYyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gOjp0b1JlZihleGVjKTsKICAgICBKU09iamVj
dFJlZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJL
aXRTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCB2b2lkIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydDo6c2NhbGVQYWdlQnkoCiAKIEpTVmFsdWVSZWYgRHVtcFJlbmRlclRyZWVT
dXBwb3J0Ojpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pT
KGV4ZWMsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5
IEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRo
YXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAg
ICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFi
b3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKwor
ICAgICAgICAqIGV3ay9ld2tfZnJhbWUuY3BwOgorICAgICAgICAoZXdrX2ZyYW1lX3NjcmlwdF9l
eGVjdXRlKToKKyAgICAgICAgKiBld2svZXdrX3ZpZXcuY3BwOgorICAgICAgICAoZXdrX3ZpZXdf
anNfb2JqZWN0X2FkZCk6CisKIDIwMTItMDYtMTkgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmls
bGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgQ2FsbGluZyBuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpIGNhdXNlcyBhc3NlcnRpb24gZmFpbHVyZTogbV92ZXJpZmllci5pc1NhZmVUb1VzZSgp
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAkocmV2aXNpb24gMTIwOTI2KQor
KysgU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1NSw4ICs0NTUsOCBAQCBjaGFyKiBld2tfZnJhbWVfc2NyaXB0X2V4ZWN1dGUoRXZhc19PYmpl
CiAgICAgaWYgKCFyZXN1bHQgfHwgKCFyZXN1bHQuaXNCb29sZWFuKCkgJiYgIXJlc3VsdC5pc1N0
cmluZygpICYmICFyZXN1bHQuaXNOdW1iZXIoKSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
SlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpF
eGVjU3RhdGUqIGV4ZWMgPSBzbWFydERhdGEtPmZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0
KFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgcmVzdWx0U3RyaW5nID0gV2ViQ29yZTo6
dXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAg
IHJldHVybiBzdHJkdXAocmVzdWx0U3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwogI2Vsc2UKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA0NSw4ICs0
MDQ1LDggQEAgRWluYV9Cb29sIGV3a192aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYgogICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBmYWxzZSk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgZmFsc2UpOwogCi0g
ICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgV2Vi
Q29yZTo6SlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3cocHJpdi0+bWFpbkZyYW1l
LCBXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9jayh3aW5kb3ctPmdsb2JhbEV4ZWMoKSk7CiAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9i
amVjdCogcm9vdDsKICAgICByb290ID0gcHJpdi0+bWFpbkZyYW1lLT5zY3JpcHQoKS0+YmluZGlu
Z1Jvb3RPYmplY3QoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQor
KysgU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMTItMDYtMjAgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNv
bT4KKworICAgICAgICBKU0xvY2sgc2hvdWxkIGJlIHBlci1KU0dsb2JhbERhdGEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MTIzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBhbGwgc2l0ZXMg
dGhhdCB1c2VkIEpTTG9jayB0byBpbnN0ZWFkIHVzZSB0aGUgbmV3IEpTTG9ja0hvbGRlcgorICAg
ICAgICBhbmQgcGFzcyBpbiB0aGUgY29ycmVjdCBKUyBjb250ZXh0IHRoYXQgdGhlIGNvZGUgaXMg
YWJvdXQgdG8gaW50ZXJhY3Qgd2l0aCB0aGF0IAorICAgICAgICBuZWVkcyBwcm90ZWN0aW9uLgor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcDoK
KyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2NDb3VudEphdmFzY3JpcHRPYmpl
Y3RzKToKKwogMjAxMi0wNi0yMSAgRGFuaWVsIERyYWtlICA8ZHNkQGxhcHRvcC5vcmc+CiAKICAg
ICAgICAgW0dUS10gQmFja3BvcnQgcnVuLWZpbGUtY2hvb3NlciB0byBXZWJLaXQxCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwMCw3ICs2MDAsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
azo6Z2NDb2xsZWN0CiAKIHVuc2lnbmVkIGxvbmcgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpn
Y0NvdW50SmF2YXNjcmlwdE9iamVjdHMoKQogewotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5l
bmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBi
ZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1
c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3Qg
SlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAK
KyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIERPTS9XZWJET01PcGVyYXRp
b25zLm1tOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNz
Lm1tOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0c0NvdW50
XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRHbG9iYWxPYmplY3Rz
Q291bnRdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3Rl
ZE9iamVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0
UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0
aWNzIGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgrW1dl
YkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgr
W1dlYkNvcmVTdGF0aXN0aWNzIHNob3VsZFByaW50RXhjZXB0aW9uc10pOgorICAgICAgICAoK1tX
ZWJDb3JlU3RhdGlzdGljcyBzZXRTaG91bGRQcmludEV4Y2VwdGlvbnM6XSk6CisgICAgICAgICgr
W1dlYkNvcmVTdGF0aXN0aWNzIG1lbW9yeVN0YXRpc3RpY3NdKToKKyAgICAgICAgKCtbV2ViQ29y
ZVN0YXRpc3RpY3MgamF2YVNjcmlwdFJlZmVyZW5jZWRPYmplY3RzQ291bnRdKToKKyAgICAgICAg
KiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06CisgICAgICAg
IChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlRGVmYXVsdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y29uc3RydWN0KToK
KyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQcm9wZXJ0
eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0UHJv
cGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJl
bW92ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpoYXNNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OmVudW1lcmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6YWRkVmFsdWVUb0FycmF5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5Ojptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUpOgorICAgICAg
ICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW06CisgICAgICAgIChXZWJOZXRz
Y2FwZVBsdWdpblN0cmVhbTo6d2FudHNBbGxTdHJlYW1zKToKKyAgICAgICAgKiBQbHVnaW5zL1dl
Yk5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3
IHNlbmRFdmVudDppc0RyYXdSZWN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZp
ZXcgcHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5nZV0pOgorICAgICAgICAoLVtXZWJOZXRzY2Fw
ZVBsdWdpblZpZXcgc2V0V2luZG93SWZOZWNlc3NhcnldKToKKyAgICAgICAgKC1bV2ViTmV0c2Nh
cGVQbHVnaW5WaWV3IGNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplY3RdKToKKyAgICAgICAgKC1b
V2ViTmV0c2NhcGVQbHVnaW5WaWV3IGdldEZvcm1WYWx1ZTpdKToKKyAgICAgICAgKC1bV2ViTmV0
c2NhcGVQbHVnaW5WaWV3IGV2YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6XSk6CisgICAg
ICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyB3ZWJGcmFtZTpkaWRGaW5pc2hMb2FkV2l0aFJl
YXNvbjpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGxvYWRQbHVnaW5SZXF1
ZXN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgX3ByaW50ZWRQbHVnaW5C
aXRtYXBdKToKKyAgICAgICAgKiBQbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW06CisgICAg
ICAgICgrW1dlYlBsdWdpbkNvbnRyb2xsZXIgcGx1Z0luVmlld1dpdGhBcmd1bWVudHM6ZnJvbVBs
dWdpblBhY2thZ2U6XSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgc3RvcE9uZVBs
dWdpbjpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxlciBkZXN0cm95T25lUGx1Z2lu
Ol0pOgorICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIHN0YXJ0QWxsUGx1Z2luc10pOgor
ICAgICAgICAoLVtXZWJQbHVnaW5Db250cm9sbGVyIGFkZFBsdWdpbjpdKToKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6Zm9yY2VVc2VyR2VzdHVyZTpdKToKKyAgICAgICAgKC1b
V2ViRnJhbWUgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOndpdGhHbG9i
YWxPYmplY3Q6aW5TY3JpcHRXb3JsZDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERl
YnVnRGVsZWdhdGUubW06CisgICAgICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBzY29wZUNoYWlu
XSk6CisgICAgICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBldmFsdWF0ZVdlYlNjcmlwdDpdKToK
KyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgrW1dlYlZpZXcgX3JlcG9y
dEV4Y2VwdGlvbjppbkNvbnRleHQ6XSk6CisgICAgICAgICgtW1dlYlZpZXcgYWVEZXNjQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX2NvbXB1
dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbzpmb3JFbGVtZW50Ol0pOgorCiAyMDEyLTA2LTIw
ICBHYXJyZXQgS2VsbHkgIDxnZGtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE1vdmluZyBjb29r
aWVFbmFibGVkL3NldENvb2tpZUVuYWJsZWQgZnJvbSBQYWdlIHRvIFNldHRpbmdzLgpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0JKHJldmlzaW9uIDEyMDky
NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw4ICs2Nyw5IEBAICsgKERPTUVsZW1lbnQgKilfRE9NRWxlbWVudEZyb21K
U0NvbnRleHQKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgcmV0dXJuIGtpdCh0b0VsZW1lbnQo
dG9KUyh0b0pTKGNvbnRleHQpLCB2YWx1ZSkpKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pT
KGNvbnRleHQpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIHJldHVybiBraXQo
dG9FbGVtZW50KHRvSlMoZXhlYywgdmFsdWUpKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopX21hcmtl
clRleHRGb3JMaXN0SXRlbQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3Rh
dGlzdGljcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVT
dGF0aXN0aWNzLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9NaXNj
L1dlYkNvcmVTdGF0aXN0aWNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OCwzMSArNTgsMzEgQEAg
KyAoTlNBcnJheSAqKXN0YXRpc3RpY3MKIAogKyAoc2l6ZV90KWphdmFTY3JpcHRPYmplY3RzQ291
bnQKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0
dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgp
OwogfQogCiArIChzaXplX3QpamF2YVNjcmlwdEdsb2JhbE9iamVjdHNDb3VudAogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmdsb2JhbE9iamVjdENvdW50KCk7CiB9CiAK
ICsgKHNpemVfdClqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKIH0KIAog
KyAoc2l6ZV90KWphdmFTY3JpcHRQcm90ZWN0ZWRHbG9iYWxPYmplY3RzQ291bnQKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3Vu
dCgpOwogfQogCiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlw
ZUNvdW50cwogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICAKICAgICBOU0NvdW50ZWRTZXQgKnJlc3VsdCA9IFtOU0NvdW50ZWRTZXQgc2V0XTsKIApAQCAt
OTcsNyArOTcsNyBAQCArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0UHJvdGVjdGVkT2JqCiAK
ICsgKE5TQ291bnRlZFNldCAqKWphdmFTY3JpcHRPYmplY3RUeXBlQ291bnRzCiB7Ci0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIAogICAgIE5TQ291bnRlZFNl
dCAqcmVzdWx0ID0gW05TQ291bnRlZFNldCBzZXRdOwogCkBAIC0xNjcsMTMgKzE2NywxMyBAQCAr
IChzaXplX3QpZ2x5cGhQYWdlQ291bnQKIAogKyAoQk9PTClzaG91bGRQcmludEV4Y2VwdGlvbnMK
IHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJu
IENvbnNvbGU6OnNob3VsZFByaW50RXhjZXB0aW9ucygpOwogfQogCiArICh2b2lkKXNldFNob3Vs
ZFByaW50RXhjZXB0aW9uczooQk9PTClwcmludAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKICAgICBDb25zb2xlOjpzZXRTaG91bGRQcmludEV4Y2VwdGlvbnMo
cHJpbnQpOwogfQogCkBAIC0yMDEsNyArMjAxLDcgQEAgKyAoTlNEaWN0aW9uYXJ5ICopbWVtb3J5
U3RhdGlzdGljcwogewogICAgIFdURjo6RmFzdE1hbGxvY1N0YXRpc3RpY3MgZmFzdE1hbGxvY1N0
YXRpc3RpY3MgPSBXVEY6OmZhc3RNYWxsb2NTdGF0aXN0aWNzKCk7CiAgICAgCi0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNpemVfdCBoZWFwU2l6ZSA9IEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5zaXplKCk7CiAgICAgc2l6ZV90
IGhlYXBGcmVlID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNhcGFj
aXR5KCkgLSBoZWFwU2l6ZTsKICAgICBHbG9iYWxNZW1vcnlTdGF0aXN0aWNzIGdsb2JhbE1lbW9y
eVN0YXRzID0gZ2xvYmFsTWVtb3J5U3RhdGlzdGljcygpOwpAQCAtMjQ1LDcgKzI0NSw3IEBAICsg
KHNpemVfdClqYXZhU2NyaXB0Tm9HQ0FsbG93ZWRPYmplY3RzQ28KIAogKyAoc2l6ZV90KWphdmFT
Y3JpcHRSZWZlcmVuY2VkT2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKIH0KIApJbmRleDogU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBl
UGx1Z2luU3RyZWFtLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsNyArMzY4LDcgQEAgYm9vbCBX
ZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6d2FudHNBbGxTdAogICAgIE5QRXJyb3IgZXJyb3I7CiAg
ICAgewogICAgICAgICBQbHVnaW5TdG9wRGVmZXJyZXIgZGVmZXJyZXIobV9wbHVnaW5WaWV3Lmdl
dCgpKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAgICAgZXJyb3IgPSBtX3BsdWdpbkZ1bmNzLT5nZXR2YWx1ZShtX3BsdWdpbiwgTlBQVnBs
dWdpbldhbnRzQWxsTmV0d29ya1N0cmVhbXMsICZ2YWx1ZSk7CiAgICAgfQogICAgIGlmIChlcnJv
ciAhPSBOUEVSUl9OT19FUlJPUikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1Bs
dWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNjY5LDcgKzY2OSw3IEBAIC0gKEJPT0wpc2VuZEV2ZW50Oih2b2lkKilldmVudCBp
c0RyYXdSZWMKICAgICAvLyBTZXQgdGhlIHBsdWdpbkFsbG93UG9wdXAgZmxhZy4KICAgICBBU1NF
UlQoX2V2ZW50SGFuZGxlcik7CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJl
SW5kaWNhdG9yKF9ldmVudEhhbmRsZXItPmN1cnJlbnRFdmVudElzVXNlckdlc3R1cmUoKSA/IERl
ZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSk7CiAgICAgICAgIGFjY2VwdGVkRXZlbnQgPSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1
Z2luRnVuY3NdLT5ldmVudChwbHVnaW4sIGV2ZW50KTsKICAgICB9CkBAIC04NTAsNyArODUwLDcg
QEAgLSAodm9pZClwcml2YXRlQnJvd3NpbmdNb2RlRGlkQ2hhbmdlCiAKICAgICBbc2VsZiB3aWxs
Q2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIGlmIChbX3BsdWdpblBhY2thZ2UuZ2V0KCkg
cGx1Z2luRnVuY3NdLT5zZXR2YWx1ZSkKICAgICAgICAgICAgIFtfcGx1Z2luUGFja2FnZS5nZXQo
KSBwbHVnaW5GdW5jc10tPnNldHZhbHVlKHBsdWdpbiwgTlBOVnByaXZhdGVNb2RlQm9vbCwgJnZh
bHVlKTsKICAgICB9CkBAIC05OTEsNyArOTkxLDcgQEAgLSAodm9pZClzZXRXaW5kb3dJZk5lY2Vz
c2FyeQogICAgICAgICBpblNldFdpbmRvdyA9IFlFUzsgICAgICAgIAogICAgICAgICBbc2VsZiB3
aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgewotICAgICAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBucEVyciA9
IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnNldHdpbmRvdyhwbHVnaW4sICZ3
aW5kb3cpOwogICAgICAgICB9CiAgICAgICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07
CkBAIC0xNDQ0LDcgKzE0NDQsNyBAQCAtIChOUE9iamVjdCAqKWNyZWF0ZVBsdWdpblNjcmlwdGFi
bGVPYmplCiAgICAgTlBFcnJvciBlcnJvcjsKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0
aW9uXTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgICAgIGVycm9yID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNz
XS0+Z2V0dmFsdWUocGx1Z2luLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmdmFsdWUp
OwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTQ2Myw3ICsx
NDYzLDcgQEAgLSAoQk9PTClnZXRGb3JtVmFsdWU6KE5TU3RyaW5nICoqKXZhbHVlCiAgICAgTlBF
cnJvciBlcnJvcjsKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0g
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAg
IGVycm9yID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+Z2V0dmFsdWUocGx1
Z2luLCBOUFBWZm9ybVZhbHVlLCAmYnVmZmVyKTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBs
dWdJbkZ1bmN0aW9uXTsKQEAgLTE1OTUsNyArMTU5NSw3IEBAIC0gKHZvaWQpZXZhbHVhdGVKYXZh
U2NyaXB0UGx1Z2luUmVxdWVzdDoKICAgICAgICAgaWYgKFtKU1BsdWdpblJlcXVlc3Qgc2VuZE5v
dGlmaWNhdGlvbl0pIHsKICAgICAgICAgICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25d
OwogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgICAgICBbX3BsdWdpblBhY2th
Z2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbVVJMIF93ZWJfVVJMQ1N0
cmluZ10sIE5QUkVTX0RPTkUsIFtKU1BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTE2
MjcsNyArMTYyNyw3IEBAIC0gKHZvaWQpd2ViRnJhbWU6KFdlYkZyYW1lICopd2ViRnJhbWUgZGkK
ICAgICAgICAgCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBb
X3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbW1tw
bHVnaW5SZXF1ZXN0IHJlcXVlc3RdIFVSTF0gX3dlYl9VUkxDU3RyaW5nXSwgcmVhc29uLCBbcGx1
Z2luUmVxdWVzdCBub3RpZnlEYXRhXSk7CiAgICAgfQogICAgIFtzZWxmIGRpZENhbGxQbHVnSW5G
dW5jdGlvbl07CkBAIC0xNjcxLDcgKzE2NzEsNyBAQCAtICh2b2lkKWxvYWRQbHVnaW5SZXF1ZXN0
OihXZWJQbHVnaW5SZXF1CiAgICAgICAgICAgICAgICAgaWYgKFtwbHVnaW5SZXF1ZXN0IHNlbmRO
b3RpZmljYXRpb25dKSB7CiAgICAgICAgICAgICAgICAgICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0lu
RnVuY3Rpb25dOwogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5G
dW5jc10tPnVybG5vdGlmeShwbHVnaW4sIFtbW3BsdWdpblJlcXVlc3QgcmVxdWVzdF0gVVJMXSBf
d2ViX1VSTENTdHJpbmddLCBOUEVSUl9HRU5FUklDX0VSUk9SLCBbcGx1Z2luUmVxdWVzdCBub3Rp
ZnlEYXRhXSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgW3Nl
bGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTI0NzEsNyArMjQ3MSw3IEBAIC0gKE5TQml0
bWFwSW1hZ2VSZXAgKilfcHJpbnRlZFBsdWdpbkJpdG0KICAgICAvLyBUZWxsIHRoZSBwbHVnaW4g
dG8gcHJpbnQgaW50byB0aGUgR1dvcmxkCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlv
bl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwogICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5wcmludChw
bHVnaW4sICZucFByaW50KTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9u
XTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRy
b2xsZXIubW0JKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
V2ViUGx1Z2luQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtOTYsMTAgKzk2LDEwIEBA
ICsgKE5TVmlldyAqKXBsdWdJblZpZXdXaXRoQXJndW1lbnRzOihOU0QKICAgICBOU1ZpZXcgKnZp
ZXcgPSBuaWw7CiAKICAgICBpZiAoW3ZpZXdGYWN0b3J5IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IocGx1Z0luVmlld1dpdGhBcmd1bWVudHM6KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgdmlldyA9IFt2aWV3RmFjdG9y
eSBwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czphcmd1bWVudHNdOwogICAgIH0gZWxzZSBpZiAoW3Zp
ZXdGYWN0b3J5IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luVmlld1dpdGhBcmd1
bWVudHM6KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKICAgICAgICAgdmlldyA9IFt2aWV3RmFjdG9yeSBwbHVnaW5WaWV3V2l0aEFyZ3VtZW50
czphcmd1bWVudHNdOwogICAgIH0KICAgICAKQEAgLTE0OSwxMCArMTQ5LDEwIEBAIC0gKHZvaWQp
ZGVhbGxvYwogLSAodm9pZClzdG9wT25lUGx1Z2luOihOU1ZpZXcgKil2aWV3CiB7CiAgICAgaWYg
KFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luU3RvcCldKSB7Ci0g
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAg
IFt2aWV3IHdlYlBsdWdJblN0b3BdOwogICAgIH0gZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3RvcihwbHVnaW5TdG9wKV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgW3ZpZXcgcGx1Z2luU3RvcF07CiAg
ICAgfQogfQpAQCAtMTYwLDEwICsxNjAsMTAgQEAgLSAodm9pZClzdG9wT25lUGx1Z2luOihOU1Zp
ZXcgKil2aWV3CiAtICh2b2lkKWRlc3Ryb3lPbmVQbHVnaW46KE5TVmlldyAqKXZpZXcKIHsKICAg
ICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5EZXN0cm95
KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAgICAgW3ZpZXcgd2ViUGx1Z0luRGVzdHJveV07CiAgICAgfSBlbHNlIGlmIChbdmlldyBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpbkRlc3Ryb3kpXSkgewotICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBbdmlldyBw
bHVnaW5EZXN0cm95XTsKICAgICB9CiB9CkBAIC0xODAsMTAgKzE4MCwxMCBAQCAtICh2b2lkKXN0
YXJ0QWxsUGx1Z2lucwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAg
ICAgICBpZCBhVmlldyA9IFtfdmlld3Mgb2JqZWN0QXRJbmRleDppXTsKICAgICAgICAgaWYgKFth
VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJblN0YXJ0KV0pIHsKLSAg
ICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgICAgICAgICAgW2FWaWV3IHdlYlBsdWdJblN0YXJ0XTsKICAgICAgICAgfSBlbHNlIGlmIChb
YVZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5TdGFydCldKSB7Ci0gICAg
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICAgICAgICAgIFthVmlldyBwbHVnaW5TdGFydF07CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTIs
MTAgKzI1MiwxMCBAQCAtICh2b2lkKWFkZFBsdWdpbjooTlNWaWV3ICopdmlldwogCiAgICAgICAg
IExPRyhQbHVnaW5zLCAiaW5pdGlhbGl6aW5nIHBsdWctaW4gJUAiLCB2aWV3KTsKICAgICAgICAg
aWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luSW5pdGlhbGl6
ZSldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICAgICAgICAgIFt2aWV3IHdlYlBsdWdJbkluaXRpYWxpemVdOwogICAgICAg
ICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luSW5p
dGlhbGl6ZSldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIFt2aWV3IHBsdWdpbkluaXRpYWxpemVdOwogICAg
ICAgICB9CiAKQEAgLTI2NSwxNSArMjY1LDE1IEBAIC0gKHZvaWQpYWRkUGx1Z2luOihOU1ZpZXcg
Kil2aWV3CiAgICAgICAgIGlmIChfc3RhcnRlZCkgewogICAgICAgICAgICAgTE9HKFBsdWdpbnMs
ICJzdGFydGluZyBwbHVnLWluICVAIiwgdmlldyk7CiAgICAgICAgICAgICBpZiAoW3ZpZXcgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5TdGFydCldKSB7Ci0gICAgICAgICAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgICAgICAgICAgICAgIFt2aWV3IHdlYlBsdWdJblN0YXJ0XTsKICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5TdGFydCldKSB7
Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgICAgICAgICAgICAgIFt2aWV3IHBsdWdpblN0YXJ0XTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3Ioc2V0Q29udGFpbmluZ1dpbmRvdzopXSkgewotICAgICAgICAgICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAg
ICAgICAgICAgICBbdmlldyBzZXRDb250YWluaW5nV2luZG93OltfZG9jdW1lbnRWaWV3IHdpbmRv
d11dOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5z
L0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAg
LTg2Nyw4ICs4NjcsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVh
CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhw
bHVnaW5Xb3JsZCgpLT5nbG9iYWxEYXRhKCkpOwogICAgIFN0cm9uZzxKU0dsb2JhbE9iamVjdD4g
Z2xvYmFsT2JqZWN0KCpwbHVnaW5Xb3JsZCgpLT5nbG9iYWxEYXRhKCksIGZyYW1lLT5zY3JpcHQo
KS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIApAQCAtOTA0LDcgKzkwMyw3IEBAIGJvb2wgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0
KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVl
IGZ1bmN0aW9uID0gb2JqZWN0LT5nZXQoZXhlYywgbWV0aG9kTmFtZSk7CiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwg
Y2FsbERhdGEpOwpAQCAtOTM3LDcgKzkzNiw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjppbnZva2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5n
bG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgICAg
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIENhbGxEYXRhIGNhbGxEYXRh
OwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxs
RGF0YShvYmplY3QsIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25l
KQpAQCAtOTY5LDcgKzk2OCw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpj
b25zdHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVj
KCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAg
ICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dENvbnN0cnVjdERhdGEob2JqZWN0LCBjb25zdHJ1Y3REYXRhKTsKQEAgLTEwMDIsNyArMTAwMSw3
IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQcm8KICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+
Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7ICAgIAogICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5h
bWUpOwogICAgIAogICAgIG1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVz
dWx0TGVuZ3RoKTsKQEAgLTEwMjMsNyArMTAyMiw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjpnZXRQcm8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkp
LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsg
ICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIEpTVmFsdWUgdmFsdWUg
PSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIAogICAgIG1hcnNoYWxWYWx1
ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKQEAgLTEwNDcsNyArMTA0
Niw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRQcm8KICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQo
KS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7ICAgIAogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlbWFyc2hhbFZhbHVlKGV4ZWMsIHZh
bHVlRGF0YSwgdmFsdWVMZW5ndGgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwpAQCAtMTA3
Myw3ICsxMDcyLDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldFBybwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUt
PnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAgICAKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsgICAgCiAgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlbWFyc2hhbFZh
bHVlKGV4ZWMsIHZhbHVlRGF0YSwgdmFsdWVMZW5ndGgpOwogICAgIG9iamVjdC0+bWV0aG9kVGFi
bGUoKS0+cHV0QnlJbmRleChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGZhbHNl
KTsKQEAgLTEwOTgsMTIgKzEwOTcsMTIgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OnJlbW92ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhl
YygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghb2JqZWN0LT5oYXNQ
cm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOyAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMjUsMTIgKzExMjQsMTIg
QEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbW92ZQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5n
bG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBpZiAoIW9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVy
dHlOYW1lKSkgewogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
b2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
ICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTE5Niw3ICsxMTk1LDcgQEAgYm9vbCBOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6Omhhc01ldAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1
Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUgZnVu
YyA9IG9iamVjdC0+Z2V0KGV4ZWMsIG1ldGhvZE5hbWUpOwogICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgcmV0dXJuICFmdW5jLmlzVW5kZWZpbmVkKCk7CkBAIC0xMjE4LDcgKzEyMTcs
NyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVyCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkt
Pmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAgCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjKTsKICAgICBvYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKQEAgLTEyNjIsNyArMTI2MSw3IEBA
IHN0YXRpYyBib29sIGdldE9iamVjdElEKE5ldHNjYXBlUGx1Z2luSW4KICAgICAKIHZvaWQgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWx1ZVRvQXJyYXkoTlNNdXRhYmxlQXJyYXkg
KmFycmF5LCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7CiAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6U3RyaW5nVmFsdWVUeXBlXV07CkBAIC0xNjcyLDcgKzE2
NzEsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bW92ZUdsCiAgICAgICAg
IHJldHVybjsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHRocm93RXJy
b3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgc3RyaW5nVG9VU3RyaW5nKGdsb2JhbEV4Y2VwdGlv
blN0cmluZygpKSkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDYgQEAgdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIHVzaW5nIEpTQzo6SlNHbG9iYWxPYmplY3Q7CiB1c2luZyBKU0M6OkpT
TG9jazsKIHVzaW5nIEpTQzo6SlNWYWx1ZTsKLXVzaW5nIEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5OwogCiAvKgogSGVyZSBpcyB0aGUgY3VycmVudCBiZWhhdmlvciBtYXRyaXggZm9yIGZvdXIg
dHlwZXMgb2YgbmF2aWdhdGlvbnM6CkBAIC01OTcsOCArNTk2LDggQEAgLSAoTlNTdHJpbmcgKilf
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcgogICAgIGlmICghcmVzdWx0IHx8ICghcmVzdWx0Lmlz
Qm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpKQog
ICAgICAgICByZXR1cm4gQCIiOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNj
cmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVj
KCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICByZXR1cm4gdXN0cmlu
Z1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogfQogCkBAIC0x
MTIzLDggKzExMjIsOCBAQCAtIChOU1N0cmluZyAqKV9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
CiAgICAgaWYgKCFyZXN1bHQgfHwgKCFyZXN1bHQuaXNCb29sZWFuKCkgJiYgIXJlc3VsdC5pc1N0
cmluZygpICYmICFyZXN1bHQuaXNOdW1iZXIoKSkpCiAgICAgICAgIHJldHVybiBAIiI7CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTQzo6RXhlY1N0YXRl
KiBleGVjID0gYW55V29ybGRHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcocmVzdWx0
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxl
Z2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDkgKzE3NCw5IEBAIC0gKE5TQXJyYXkgKilz
Y29wZUNoYWluCiAgICAgaWYgKCFfcHJpdmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUpCiAgICAgICAg
IHJldHVybiBbTlNBcnJheSBhcnJheV07CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogCiAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBfcHJpdmF0ZS0+
ZGVidWdnZXJDYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhz
Y29wZUNoYWluLT5nbG9iYWxEYXRhKTsKICAgICBpZiAoIXNjb3BlQ2hhaW4tPm5leHQpICAvLyBn
bG9iYWwgZnJhbWUKICAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpfcHJp
dmF0ZS0+Z2xvYmFsT2JqZWN0XTsKIApAQCAtMjI5LDEzICsyMjksMTMgQEAgLSAoaWQpZXZhbHVh
dGVXZWJTY3JpcHQ6KE5TU3RyaW5nICopc2NyaQogICAgIGlmICghX3ByaXZhdGUtPmRlYnVnZ2Vy
Q2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKLQogICAgIC8vIElmIHRoaXMgaXMgdGhlIGdsb2JhbCBjYWxsIGZy
YW1lIGFuZCB0aGVyZSBpcyBubyBkeW5hbWljIGdsb2JhbCBvYmplY3QsCiAgICAgLy8gRGFzaGNv
ZGUgaXMgYXR0ZW1wdGluZyB0byBleGVjdXRlIEpTIGluIHRoZSBldmFsdWF0b3IgdXNpbmcgYSBz
dGFsZQogICAgIC8vIFdlYlNjcmlwdENhbGxGcmFtZS4gSW5zdGVhZCwgd2UgbmVlZCB0byBzZXQg
dGhlIGR5bmFtaWMgZ2xvYmFsIG9iamVjdAogICAgIC8vIGFuZCBldmFsdWF0ZSB0aGUgSlMgaW4g
dGhlIGdsb2JhbCBvYmplY3QncyBnbG9iYWwgY2FsbCBmcmFtZS4KICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gX3ByaXZhdGUtPmRlYnVnZ2VyLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSk7CisKICAgICBp
ZiAoc2VsZiA9PSBfcHJpdmF0ZS0+ZGVidWdnZXItPmdsb2JhbENhbGxGcmFtZSgpICYmICFnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KSB7CiAgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBfcHJpdmF0ZS0+ZGVidWdnZXItPmdsb2JhbE9i
amVjdCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTU4MSw4ICs1ODEsOCBAQCArICh2b2lkKV9yZXBvcnRFeGNlcHRpb246KEpT
VmFsdWVSZWYpZXhjCiAgICAgaWYgKCFleGNlcHRpb24gfHwgIWNvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlND
OjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZSA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlY1N0YXRlKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBoYXMgYSBE
T01XaW5kb3cgZ2xvYmFsIG9iamVjdCwgb3RoZXJ3aXNlIHRoaXMgY29udGV4dCBkaWRuJ3Qgb3Jp
Z2luYXRlIGZyb20gYSBXZWJWaWV3LgogICAgIGlmICghdG9KU0RPTVdpbmRvdyhleGVjU3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKSkpCkBAIC00ODUxLDcgKzQ4NTEsNyBAQCAtIChOU0FwcGxl
RXZlbnREZXNjcmlwdG9yICopYWVEZXNjQnlFdmFsCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjb3Jl
RnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KHNjcmlwdCwgdHJ1ZSkuanNWYWx1ZSgpOwog
ICAgIGlmICghcmVzdWx0KSAvLyBGSVhNRTogcGFzcyBlcnJvcnMKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhjb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1h
bFdvcmxkKCkpLT5nbG9iYWxFeGVjKCkpOwogICAgIHJldHVybiBhZURlc2NGcm9tSlNWYWx1ZShj
b3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkp
LT5nbG9iYWxFeGVjKCksIHJlc3VsdCk7CiB9CiAKQEAgLTY1NjAsOCArNjU2MCw4IEBAIC0gKHZv
aWQpX25vdGlmaWNhdGlvbnNEaWRDbG9zZTooTlNBcnJheSAKIAogLSAoSlNWYWx1ZVJlZilfY29t
cHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvOihKU0NvbnRleHRSZWYpY29udGV4dCBmb3JF
bGVtZW50OihKU1ZhbHVlUmVmKXZhbHVlCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pT
KGV4ZWMsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQg
dXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAg
YW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0
IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAg
ICAgICAqIEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6YWRk
UXRTZW5kZXJUb0dsb2JhbE9iamVjdCk6CisgICAgICAgIChRV2ViRnJhbWU6OmFkZFRvSmF2YVNj
cmlwdFdpbmRvd09iamVjdCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmluamVj
dEludGVybmFsc09iamVjdCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cmVz
ZXRJbnRlcm5hbHNPYmplY3QpOgorCiAyMDEyLTA2LTIxICBUaGlhZ28gTWFyY29zIFAuIFNhbnRv
cyAgPHRoaWFnby5zYW50b3NAaW50ZWwuY29tPgogCiAgICAgICAgIFtXSzJdW1F0XSBDb2xvciBj
aG9vc2VyIEFQSSBtaXNzaW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHJl
dmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwNiwxMyArNTA2LDEyIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHF0U2Vu
ZGVyQ2FsbGJhY2soSlNDb24KIAogdm9pZCBRV2ViRnJhbWVQcml2YXRlOjphZGRRdFNlbmRlclRv
R2xvYmFsT2JqZWN0KCkKIHsKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKLQogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KGZy
YW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgUV9BU1NFUlQod2luZG93KTsKIAog
ICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CiAgICAgUV9B
U1NFUlQoZXhlYyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpT
Q29udGV4dFJlZiBjb250ZXh0ID0gOjp0b1JlZihleGVjKTsKICAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gcHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiX19xdF9zZW5kZXJfXyIpKTsKQEAgLTY1Nyw3ICs2NTYsNiBAQCB2b2lkIFFXZWJGcmFtZTo6
YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqCiAgICAgICAgIHJldHVybjsKICNpZiBVU0UoSlNDKQog
ICAgIEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6OlZhbHVlT3duZXJzaGlwIHZhbHVlT3duZXJz
aGlwID0gc3RhdGljX2Nhc3Q8SlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6VmFsdWVPd25lcnNo
aXA+KG93bmVyc2hpcCk7Ci0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZC0+ZnJh
bWUsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBKU0M6OkJpbmRpbmdzOjpSb290T2Jq
ZWN0KiByb290OwogICAgIGlmICh2YWx1ZU93bmVyc2hpcCA9PSBKU0M6OkJpbmRpbmdzOjpRdElu
c3RhbmNlOjpRdE93bmVyc2hpcCkKQEAgLTY3NSw2ICs2NzMsNyBAQCB2b2lkIFFXZWJGcmFtZTo6
YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqCiAgICAgfQogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4
ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogCiAgICAgSlNDOjpKU09iamVjdCogcnVudGltZU9iamVjdCA9CiAgICAgICAgICAgICBK
U0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpnZXRRdEluc3RhbmNlKG9iamVjdCwgcm9vdCwgdmFs
dWVPd25lcnNoaXApLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwpJbmRleDogU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDg2LDEzICsxMDg2LDEyIEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmluamVjdElu
dGUKIHsKICAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6
Y29yZShmcmFtZSk7CiAjaWYgVVNFKEpTQykKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKLQogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9N
V2luZG93KGNvcmVGcmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogICAgIFFfQVNTRVJU
KHdpbmRvdyk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhl
YygpOwogICAgIFFfQVNTRVJUKGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IHRvUmVmKGV4ZWMpOwogICAgIFdlYkNv
cmVUZXN0U3VwcG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQpOwpAQCAtMTExMywx
MyArMTExMiwxMiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldEludGVyCiB7
CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUo
ZnJhbWUpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VB
c3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRv
dyhjb3JlRnJhbWUsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBRX0FTU0VSVCh3aW5k
b3cpOwogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsK
ICAgICBRX0FTU0VSVChleGVjKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSB0b1JlZihleGVjKTsKICAgICBXZWJDb3JlVGVz
dFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQpOwpJbmRleDogU291cmNlL1dl
YktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTItMDYtMjAgIE1hcmsgSGFobmVuYmVy
ZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBKU0xvY2sgc2hvdWxkIGJlIHBl
ci1KU0dsb2JhbERhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg5MTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ2hhbmdlZCBhbGwgc2l0ZXMgdGhhdCB1c2VkIEpTTG9jayB0byBpbnN0ZWFkIHVzZSB0
aGUgbmV3IEpTTG9ja0hvbGRlcgorICAgICAgICBhbmQgcGFzcyBpbiB0aGUgY29ycmVjdCBKUyBj
b250ZXh0IHRoYXQgdGhlIGNvZGUgaXMgYWJvdXQgdG8gaW50ZXJhY3Qgd2l0aCB0aGF0IAorICAg
ICAgICBuZWVkcyBwcm90ZWN0aW9uLgorCisgICAgICAgICogV2ViQ29yZVN0YXRpc3RpY3MuY3Bw
OgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgor
ICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQp
OgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3Rz
Q291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRH
bG9iYWxPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3Jp
cHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKToKKyAgICAgICAgKiBXZWJGcmFtZS5jcHA6Cisg
ICAgICAgIChXZWJGcmFtZTo6c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEluU2NyaXB0V29y
bGQpOgorICAgICAgICAqIFdlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2Vi
SmF2YVNjcmlwdENvbGxlY3Rvcjo6b2JqZWN0Q291bnQpOgorICAgICAgICAqIFdlYlZpZXcuY3Bw
OgorICAgICAgICAoV2ViVmlldzo6c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJp
bmcpOgorICAgICAgICAoV2ViVmlldzo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgKFdlYlZp
ZXc6OmVsZW1lbnRGcm9tSlMpOgorCiAyMDEyLTA2LTIwICBHYXJyZXQgS2VsbHkgIDxnZGtAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIE1vdmluZyBjb29raWVFbmFibGVkL3NldENvb2tpZUVuYWJs
ZWQgZnJvbSBQYWdlIHRvIFNldHRpbmdzLgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29y
ZVN0YXRpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVT
dGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC93aW4vV2Vi
Q29yZVN0YXRpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBpZiAoIWNvdW50KQogICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQpAQCAtMTA5
LDcgKzEwOSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKICAg
ICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5nbG9iYWxPYmplY3RDb3VudCgpOwogICAg
IHJldHVybiBTX09LOwogfQpAQCAtMTIwLDcgKzEyMCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
ICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5w
cm90ZWN0ZWRPYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQpAQCAtMTMxLDcgKzEz
MSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKICAgICBpZiAo
IWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpj
b21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwog
ICAgIHJldHVybiBTX09LOwogfQpAQCAtMTM5LDcgKzEzOSw3IEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgV2ViQ29yZVN0YXRpc3QKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ29y
ZVN0YXRpc3RpY3M6OmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCAKICAgICAv
KiBbcmV0dmFsXVtvdXRdICovIElQcm9wZXJ0eUJhZzIqKiB0eXBlTmFtZXNBbmRDb3VudHMpCiB7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIE93blB0cjxU
eXBlQ291bnRTZXQ+IGpzT2JqZWN0VHlwZU5hbWVzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOwogICAgIHR5cGVkZWYg
VHlwZUNvdW50U2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKICAgICBJdGVyYXRvciBlbmQg
PSBqc09iamVjdFR5cGVOYW1lcy0+ZW5kKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJG
cmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcg
SlNDOjpKU0dsb2JhbE9iamVjdDsKIHVzaW5nIEpTQzo6SlNMb2NrOwogdXNpbmcgSlNDOjpKU1Zh
bHVlOwotdXNpbmcgSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHk7CiAKICNkZWZpbmUgRkxBU0hf
UkVEUkFXIDAKIApAQCAtMjUyOCw4ICsyNTI3LDggQEAgSFJFU1VMVCBXZWJGcmFtZTo6c3RyaW5n
QnlFdmFsdWF0aW5nSmF2YQogICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQuaXNCb29sZWFuKCkg
JiYgIXJlc3VsdC5pc1N0cmluZygpICYmICFyZXN1bHQuaXNOdW1iZXIoKSkKICAgICAgICAgcmV0
dXJuIFNfT0s7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAg
IEpTQzo6RXhlY1N0YXRlKiBleGVjID0gYW55V29ybGRHbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFN0cmluZyByZXN1bHRT
dHJpbmcgPSB1c3RyaW5nVG9TdHJpbmcocmVzdWx0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KSk7CiAgICAgKmV2YWx1YXRpb25SZXN1bHQgPSBCU3RyaW5nKHJlc3VsdFN0cmluZykucmVsZWFz
ZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJKYXZhU2NyaXB0Q29sbGVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJKYXZhU2NyaXB0Q29sbGVjdG9y
LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViSmF2YVNjcmlw
dENvbGxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFdlYkphdmFTY3JpcHRDCiAgICAgICAgIHJldHVybiBFX1BPSU5U
RVI7CiAgICAgfQogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgICpjb3VudCA9IChVSU5UKUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVh
cC5vYmplY3RDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQpJbmRleDogU291cmNlL1dlYktp
dC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViVmll
dy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTk0LDggKzMxOTQsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYlZpZXc6OnN0cmluCiAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25SZXN1bHQpCiAg
ICAgICAgIHJldHVybiBFX0ZBSUw7CiAgICAgZWxzZSBpZiAoc2NyaXB0RXhlY3V0aW9uUmVzdWx0
LmlzU3RyaW5nKCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOwogICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGNvcmVGcmFtZS0+c2NyaXB0
KCktPmdsb2JhbE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsK
KyAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgKnJlc3VsdCA9
IEJTdHJpbmcodXN0cmluZ1RvU3RyaW5nKHNjcmlwdEV4ZWN1dGlvblJlc3VsdC5nZXRTdHJpbmco
ZXhlYykpKTsKICAgICB9CiAKQEAgLTU4NTEsOCArNTg1MSw4IEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgV2ViVmlldzo6cmVwb3IKICAgICBpZiAoIWNvbnRleHQgfHwgIWV4Y2VwdGlvbikK
ICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIEpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlY1N0YXRlID0gdG9KUyhjb250
ZXh0KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWNTdGF0ZSk7CiAKICAgICAvLyBN
YWtlIHN1cmUgdGhlIGNvbnRleHQgaGFzIGEgRE9NV2luZG93IGdsb2JhbCBvYmplY3QsIG90aGVy
d2lzZSB0aGlzIGNvbnRleHQgZGlkbid0IG9yaWdpbmF0ZSBmcm9tIGEgV2ViVmlldy4KICAgICBp
ZiAoIXRvSlNET01XaW5kb3coZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKQpAQCAt
NTg3OCw4ICs1ODc4LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjplbGVt
ZQogICAgIGlmICghbm9kZU9iamVjdCkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIEpT
TG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBFbGVtZW50KiBlbHQg
PSB0b0VsZW1lbnQodG9KUyh0b0pTKGNvbnRleHQpLCBub2RlT2JqZWN0KSk7CisgICAgSlNDOjpF
eGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CisgICAgRWxlbWVudCogZWx0ID0gdG9FbGVtZW50KHRvSlMoZXhlYywgbm9kZU9i
amVjdCkpOwogICAgIGlmICghZWx0KQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149025</attachid>
            <date>2012-06-22 07:46:25 -0700</date>
            <delta_ts>2012-06-25 16:46:01 -0700</delta_ts>
            <desc>Win</desc>
            <filename>bug-89123-20120622074624.patch</filename>
            <type>text/plain</type>
            <size>207833</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBA
QAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWY6CisgICAgICAgICogQVBJL0FQSVNo
aW1zLmg6CisgICAgICAgIChBUElFbnRyeVNoaW1XaXRob3V0TG9jayk6CisgICAgICAgIChKU0M6
OkFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrOjpBUElFbnRyeVNoaW1XaXRob3V0TG9jayk6IEFkZGVk
IGFuIGV4dHJhIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgdG8gCisgICAgICAgIGRldGVy
bWluZSB3aGV0aGVyIHdlIHNob3VsZCByZWYgdGhlIEpTR2xvYmFsRGF0YSBvciBub3QuIFdlIHdh
bnQgdG8gcmVmIGFsbCB0aGUgdGltZSBleGNlcHQgZm9yIGluIHRoZSAKKyAgICAgICAgSGVhcFRp
bWVyIGNsYXNzIGJlY2F1c2UgdGltZXJEaWRGaXJlIGNvdWxkIHJ1biBhZnRlciBzb21lYm9keSBo
YXMgc3RhcnRlZCB0byB0ZWFyIGRvd24gdGhhdCBwYXJ0aWN1bGFyIAorICAgICAgICBKU0dsb2Jh
bERhdGEsIHNvIHdlIHdvdWxkbid0IHdhbnQgdG8gcmVzdXJyZWN0IHRoZSByZWYgY291bnQgb2Yg
dGhhdCBKU0dsb2JhbERhdGEgZnJvbSAwIGJhY2sgdG8gMSBhZnRlciAKKyAgICAgICAgaXRzIGRl
c3RydWN0aW9uIGhhcyBiZWd1bi4gCisgICAgICAgIChKU0M6OkFQSUVudHJ5U2hpbVdpdGhvdXRM
b2NrOjp+QVBJRW50cnlTaGltV2l0aG91dExvY2spOiBOb3cgZGVyZWZzIGlmIGl0IGFsc28gcmVm
ZWQuCisgICAgICAgIChKU0M6OkFQSUVudHJ5U2hpbTo6QVBJRW50cnlTaGltKToKKyAgICAgICAg
KEFQSUVudHJ5U2hpbSk6CisgICAgICAgIChKU0M6OkFQSUVudHJ5U2hpbTo6fkFQSUVudHJ5U2hp
bSk6CisgICAgICAgIChKU0M6OkFQSUVudHJ5U2hpbTo6aW5pdCk6IEZhY3RvcmVkIG91dCBjb21t
b24gaW5pdGlhbGl6YXRpb24gY29kZSBmb3IgdGhlIHZhcmlvdXMgQVBJRW50cnlTaGltIGNvbnN0
cnVjdG9ycy4KKyAgICAgICAgQWxzbyBtb3ZlZCB0aGUgdGltZW91dENoZWNrZXIgc3RvcCBhbmQg
c3RhcnQgaGVyZSBiZWNhdXNlIHdlIG5lZWQgdG8gc3RhcnQgYWZ0ZXIgd2UndmUgZ3JhYmJlZCB0
aGUgQVBJIGxvY2sKKyAgICAgICAgYW5kIGJlZm9yZSB3ZSd2ZSByZWxlYXNlZCBpdCwgd2hpY2gg
Y2FuIG9ubHkgZG9uZSBpbiBBUElFbnRyeVNoaW0uCisgICAgICAgIChKU0M6OkFQSUNhbGxiYWNr
U2hpbTo6fkFQSUNhbGxiYWNrU2hpbSk6IFdlIG5vIGxvbmdlciBuZWVkIHRvIHN5bmNocm9uaXpl
IGhlcmUuCisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAgICAgIChKU0dsb2Jh
bENvbnRleHRDcmVhdGUpOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0Q3JlYXRlSW5Hcm91cCk6
CisgICAgICAgIChKU0dsb2JhbENvbnRleHRSZWxlYXNlKToKKyAgICAgICAgKEpTQ29udGV4dENy
ZWF0ZUJhY2t0cmFjZSk6CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFjZS5jcHA6CisgICAgICAg
IChKU0M6OkNvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKiBoZWFw
L0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpwcm90ZWN0KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6dW5wcm90ZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAg
IChKU0M6OkhlYXA6OnNldEFjdGl2aXR5Q2FsbGJhY2spOgorICAgICAgICAoSlNDOjpIZWFwOjph
Y3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3dlZXBlcik6CisgICAgICAg
ICogaGVhcC9IZWFwLmg6IENoYW5nZWQgbV9hY3Rpdml0eUNhbGxiYWNrIGFuZCBtX3N3ZWVwZXIg
dG8gYmUgcmF3IHBvaW50ZXJzIHJhdGhlciB0aGFuIE93blB0cnMgYmVjYXVzZSB0aGV5IAorICAg
ICAgICBhcmUgbm93IHJlc3BvbnNpYmxlIGZvciB0aGVpciBvd24gbGlmZXRpbWUuIEFsc28gY2hh
bmdlZCB0aGUgb3JkZXIgb2YgZGVjbGFyYXRpb24gb2YgdGhlIEdDQWN0aXZpdHlDYWxsYmFjawor
ICAgICAgICBhbmQgdGhlIEluY3JlbWVudGFsU3dlZXBlciB0byBtYWtlIHN1cmUgdGhleSdyZSB0
aGUgbGFzdCB0aGluZ3MgdGhhdCBnZXQgaW5pdGlhbGl6ZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiB0
byAKKyAgICAgICAgcHJldmVudCBhbnkgaXNzdWVzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkg
aW4gdGhlIEpTR2xvYmFsRGF0YS9IZWFwIHRoZXkgbWlnaHQgY2FyZSBhYm91dC4KKyAgICAgICAg
KEhlYXApOgorICAgICAgICAqIGhlYXAvSGVhcFRpbWVyLmNwcDogUmVmYWN0b3JlZCB0byBhbGxv
dyBmb3IgdGhyZWFkLXNhZmUgb3BlcmF0aW9uIGFuZCBzaHV0ZG93bi4KKyAgICAgICAgKEpTQzo6
SGVhcFRpbWVyOjp+SGVhcFRpbWVyKToKKyAgICAgICAgKEpTQzo6SGVhcFRpbWVyOjppbnZhbGlk
YXRlKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6ZGlkU3RhcnRW
TVNodXRkb3duKTogQ2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgfkpTR2xvYmFsRGF0YS4gSWYg
d2UncmUgb24gdGhlIHNhbWUgdGhyZWFkIAorICAgICAgICB0aGF0IHRoZSBIZWFwVGltZXIgaXMg
cnVubmluZyBvbiwgd2Uga2lsbCB0aGUgSGVhcFRpbWVyIG91cnNlbHZlcy4gSWYgbm90LCB0aGVu
IHdlIHNldCBzb21lIHN0YXRlIGluIHRoZSAKKyAgICAgICAgSGVhcFRpbWVyIGFuZCBzY2hlZHVs
ZSBpdCB0byBmaXJlIGltbWVkaWF0ZWx5IHNvIHRoYXQgaXQgY2FuIG5vdGljZSBhbmQga2lsbCBp
dHNlbGYuCisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6dGltZXJEaWRGaXJlKTogV2UgZ3JhYiBv
dXIgbXV0ZXggYW5kIGNoZWNrIG91ciBKU0dsb2JhbERhdGEgcG9pbnRlci4gSWYgaXQgaGFzIGJl
ZW4gemVyby1lZAorICAgICAgICBvdXQsIHRoZW4gd2Uga25vdyB0aGUgVk0gaGFzIHN0YXJ0ZWQg
dG8gc2h1dGRvd24gYW5kIHdlIHNob3VsZCBraWxsIG91cnNlbHZlcy4gT3RoZXJ3aXNlLCBncmFi
IHRoZSBBUElFbnRyeVNoaW0sCisgICAgICAgIGJ1dCB3aXRob3V0IHJlZi1pbmcgdGhlIEpTR2xv
YmFsRGF0YSAod2UgZG9uJ3Qgd2FudCB0byBicmluZyB0aGUgSlNHbG9iYWxEYXRhJ3MgcmVmLWNv
dW50IGZyb20gMCB0byAxKSBpbiBjYXNlIAorICAgICAgICB3ZSB3ZXJlIGludGVycnVwdGVkIGJl
dHdlZW4gcmVsZWFzaW5nIG91ciBtdXRleCBhbmQgdHJ5aW5nIHRvIGdyYWIgdGhlIEFQSUxvY2su
CisgICAgICAgICogaGVhcC9IZWFwVGltZXIuaDogCisgICAgICAgIChIZWFwVGltZXIpOgorICAg
ICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW5jcmVt
ZW50YWxTd2VlcGVyOjpkb1dvcmspOiBXZSBubyBsb25nZXIgbmVlZCB0aGUgQVBJIHNoaW0gaGVy
ZSBzaW5jZSBIZWFwVGltZXI6OnRpbWVyRGlkRmlyZSBoYW5kbGVzIAorICAgICAgICBhbGwgb2Yg
dGhhdCBmb3IgdXMuIAorICAgICAgICAoSlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OmNyZWF0ZSk6
CisgICAgICAgICogaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaDoKKyAgICAgICAgKEluY3JlbWVu
dGFsU3dlZXBlcik6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UpOgorICAgICAgICAqIGhl
YXAvV2Vha0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6V2Vha0Jsb2NrOjpyZWFwKToKKyAgICAg
ICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rpb25HQyk6CisgICAgICAgIChmdW5jdGlvblJl
bGVhc2VFeGVjdXRhYmxlTWVtb3J5KToKKyAgICAgICAgKGpzY21haW4pOgorICAgICAgICAqIHJ1
bnRpbWUvQ29tcGxldGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNoZWNrU3ludGF4KToKKyAgICAg
ICAgKEpTQzo6ZXZhbHVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNr
Lmg6CisgICAgICAgIChEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6
RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRh
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKTogU2lnbmFscyB0
byB0aGUgdHdvIEhlYXBUaW1lcnMgKEdDQWN0aXZpdHlDYWxsYmFjayBhbmQgSW5jcmVtZW50YWxT
d2VlcGVyKQorICAgICAgICB0aGF0IHRoZSBWTSBoYXMgc3RhcnRlZCBzaHV0dGluZyBkb3duLiBJ
dCB0aGVuIHdhaXRzIHVudGlsIHRoZSBIZWFwVGltZXIgaXMgZG9uZSB3aXRoIHdoYXRldmVyIGFj
dGl2aXR5IAorICAgICAgICBpdCBuZWVkcyB0byBkbyBiZWZvcmUgY29udGludWluZyB3aXRoIGFu
eSBmdXJ0aGVyIGRlc3RydWN0aW9uLiBBbHNvIGFzc2VydHMgdGhhdCB3ZSBkbyBub3QgY3VycmVu
dGx5IGhvbGQgdGhlIAorICAgICAgICBBUElMb2NrIGJlY2F1c2UgdGhpcyBjb3VsZCBwb3RlbnRp
YWxseSBjYXVzZSBkZWFkbG9jayB3aGVuIHdlIHRyeSB0byBzaWduYWwgdG8gdGhlIEhlYXBUaW1l
cnMgdXNpbmcgdGhlaXIgbXV0ZXhlcy4KKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpzaGFy
ZWRJbnN0YW5jZSk6IFByb3RlY3QgdGhlIGluaXRpYWxpemF0aW9uIGZvciB0aGUgc2hhcmVkIGlu
c3RhbmNlIHdpdGggdGhlIEdsb2JhbEpTTG9jay4KKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRh
OjpzaGFyZWRJbnN0YW5jZUludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0
YS5oOiBDaGFuZ2UgdG8gYmUgVGhyZWFkU2FmZVJlZkNvdW50ZWQgc28gdGhhdCB3ZSBkb24ndCBo
YXZlIHRvIHdvcnJ5IGFib3V0IHJlZmluZyBhbmQgCisgICAgICAgIGRlLXJlZmluZyBKU0dsb2Jh
bERhdGFzIG9uIHNlcGFyYXRlIHRocmVhZHMgc2luY2Ugd2UgZG9uJ3QgZG8gaXQgdGhhdCBvZnRl
biBhbnl3YXlzLgorICAgICAgICAoSlNHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9i
YWxEYXRhOjphcGlMb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6On5KU0dsb2JhbE9iamVjdCk6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKiBydW50aW1lL0pTTG9jay5j
cHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpHbG9iYWxKU0xvY2s6Okdsb2JhbEpT
TG9jayk6IEZvciBhY2Nlc3NpbmcgdGhlIHNoYXJlZCBpbnN0YW5jZS4KKyAgICAgICAgKEpTQzo6
R2xvYmFsSlNMb2NrOjp+R2xvYmFsSlNMb2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrSG9sZGVy
OjpKU0xvY2tIb2xkZXIpOiBNdXRleExvY2tlciBmb3IgSlNMb2NrLiBBbHNvIHJlZnMgdGhlIEpT
R2xvYmFsRGF0YSB0byBrZWVwIGl0IGFsaXZlIHNvIHRoYXQgCisgICAgICAgIGl0IGNhbiBzdWNj
ZXNzZnVsbHkgdW5sb2NrIGl0IGxhdGVyIHdpdGhvdXQgaXQgZGlzYXBwZWFyaW5nIGZyb20gdW5k
ZXJuZWF0aCBpdC4KKyAgICAgICAgKEpTQzo6SlNMb2NrSG9sZGVyOjp+SlNMb2NrSG9sZGVyKToK
KyAgICAgICAgKEpTQzo6SlNMb2NrOjpKU0xvY2spOgorICAgICAgICAoSlNDOjpKU0xvY2s6On5K
U0xvY2spOgorICAgICAgICAoSlNDOjpKU0xvY2s6OmxvY2spOiBVc2VzIHRoZSBzcGluIGxvY2sg
Zm9yIGd1YXJkaW5nIHRoZSBsb2NrIGNvdW50IGFuZCBvd25lciB0aHJlYWQgZmllbGRzLiBVc2Vz
IHRoZSBtdXRleCBmb3IgCisgICAgICAgIGFjdHVhbGx5IHdhaXRpbmcgZm9yIGxvbmcgcGVyaW9k
cy4gCisgICAgICAgIChKU0M6OkpTTG9jazo6dW5sb2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2Nr
OjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jayk6IAorICAgICAgICAoSlNDOjpKU0xvY2s6OmRy
b3BBbGxMb2Nrcyk6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZHJvcEFsbExvY2tzVW5jb25kaXRp
b25hbGx5KToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpncmFiQWxsTG9ja3MpOgorICAgICAgICAo
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3M6On5Ecm9wQWxsTG9ja3MpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNMb2NrLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoR2xvYmFsSlNMb2NrKToKKyAgICAg
ICAgKEpTTG9ja0hvbGRlcik6CisgICAgICAgIChKU0xvY2spOgorICAgICAgICAoRHJvcEFsbExv
Y2tzKToKKyAgICAgICAgKiBydW50aW1lL1dlYWtHQ01hcC5oOgorICAgICAgICAoSlNDOjpXZWFr
R0NNYXA6OnNldCk6CisgICAgICAgICogdGVzdFJlZ0V4cC5jcHA6CisgICAgICAgIChyZWFsTWFp
bik6CisKIDIwMTItMDYtMjAgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZWR1Y2VkIChidXQgZGlkIG5vdCBlbGltaW5hdGUpIHVzZSBvZiAiYmVyemVya2Vy
IEdDIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTksNyArMjk5LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkpTQwogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0MoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAgICAgZXhlYy0+aGVhcCgpLT5jb2xsZWN0QWxsR2FyYmFnZSgpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CkBAIC0zMDcsNyArMzA3LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdDKAogI2lmbmRlZiBOREVCVUcK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWxlYXNlRXhlY3V0YWJsZU1l
bW9yeShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBleGVjLT5nbG9iYWxE
YXRhKCkucmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtNjY3LDkgKzY2Nyw5IEBAIHN0YXRpYyB2b2lkIHBh
cnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGEKIAogaW50IGpzY21haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KKyAg
ICAKICAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBnbG9iYWxEYXRhID0gSlNHbG9iYWxEYXRhOjpj
cmVhdGUoVGhyZWFkU3RhY2tUeXBlTGFyZ2UsIExhcmdlSGVhcCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZ2xvYmFsRGF0YS5nZXQoKSk7CiAKICAgICBDb21tYW5kTGluZSBvcHRpb25zOwogICAg
IHBhcnNlQXJndW1lbnRzKGFyZ2MsIGFyZ3YsIG9wdGlvbnMpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RSZWdFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0UmVnRXhwLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RSZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTUsOSArNDk1LDggQEAg
c3RhdGljIHZvaWQgcGFyc2VBcmd1bWVudHMoaW50IGFyZ2MsIGNoYQogCiBpbnQgcmVhbE1haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7Ci0KICAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBnbG9iYWxEYXRhID0gSlNHbG9i
YWxEYXRhOjpjcmVhdGUoVGhyZWFkU3RhY2tUeXBlTGFyZ2UsIExhcmdlSGVhcCk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YS5nZXQoKSk7CiAKICAgICBDb21tYW5kTGluZSBvcHRp
b25zOwogICAgIHBhcnNlQXJndW1lbnRzKGFyZ2MsIGFyZ3YsIG9wdGlvbnMpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElTaGltcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvQVBJU2hpbXMuaAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9BUElTaGltcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwzMSAr
MjgsNDAgQEAKIAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkdDQWN0aXZpdHlD
YWxsYmFjay5oIgorI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgogI2luY2x1ZGUgIkpT
TG9jay5oIgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBBUElFbnRyeVNoaW1XaXRob3V0TG9jayB7CitwdWJsaWM6CisgICAgZW51bSBS
ZWZHbG9iYWxEYXRhVGFnIHsgRG9udFJlZkdsb2JhbERhdGEgPSAwLCBSZWZHbG9iYWxEYXRhIH07
CisKIHByb3RlY3RlZDoKLSAgICBBUElFbnRyeVNoaW1XaXRob3V0TG9jayhKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIGJvb2wgcmVnaXN0ZXJUaHJlYWQpCi0gICAgICAgIDogbV9nbG9iYWxEYXRh
KGdsb2JhbERhdGEpCisgICAgQVBJRW50cnlTaGltV2l0aG91dExvY2soSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBib29sIHJlZ2lzdGVyVGhyZWFkLCBSZWZHbG9iYWxEYXRhVGFnIHNob3VsZFJl
Zkdsb2JhbERhdGEpCisgICAgICAgIDogbV9zaG91bGRSZWZHbG9iYWxEYXRhKHNob3VsZFJlZkds
b2JhbERhdGEpCisgICAgICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAgICAgICwg
bV9lbnRyeUlkZW50aWZpZXJUYWJsZSh3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZp
ZXJUYWJsZShnbG9iYWxEYXRhLT5pZGVudGlmaWVyVGFibGUpKQogICAgIHsKKyAgICAgICAgaWYg
KHNob3VsZFJlZkdsb2JhbERhdGEpCisgICAgICAgICAgICBtX2dsb2JhbERhdGEtPnJlZigpOwog
ICAgICAgICBVTlVTRURfUEFSQU0ocmVnaXN0ZXJUaHJlYWQpOwogICAgICAgICBpZiAocmVnaXN0
ZXJUaHJlYWQpCiAgICAgICAgICAgICBnbG9iYWxEYXRhLT5oZWFwLm1hY2hpbmVUaHJlYWRzKCku
YWRkQ3VycmVudFRocmVhZCgpOwogICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAuYWN0aXZpdHlD
YWxsYmFjaygpLT5zeW5jaHJvbml6ZSgpOwotICAgICAgICBtX2dsb2JhbERhdGEtPnRpbWVvdXRD
aGVja2VyLnN0YXJ0KCk7CisgICAgICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5zd2VlcGVyKCktPnN5
bmNocm9uaXplKCk7CiAgICAgfQogCiAgICAgfkFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKCkKICAg
ICB7Ci0gICAgICAgIG1fZ2xvYmFsRGF0YS0+dGltZW91dENoZWNrZXIuc3RvcCgpOwogICAgICAg
ICB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShtX2VudHJ5SWRlbnRp
ZmllclRhYmxlKTsKKyAgICAgICAgaWYgKG1fc2hvdWxkUmVmR2xvYmFsRGF0YSkKKyAgICAgICAg
ICAgIG1fZ2xvYmFsRGF0YS0+ZGVyZWYoKTsKICAgICB9CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6
CisgICAgUmVmR2xvYmFsRGF0YVRhZyBtX3Nob3VsZFJlZkdsb2JhbERhdGE7CiAgICAgSlNHbG9i
YWxEYXRhKiBtX2dsb2JhbERhdGE7CiAgICAgSWRlbnRpZmllclRhYmxlKiBtX2VudHJ5SWRlbnRp
ZmllclRhYmxlOwogfTsKQEAgLTYxLDIwICs3MCwzOCBAQCBjbGFzcyBBUElFbnRyeVNoaW0gOiBw
dWJsaWMgQVBJRW50cnlTaGltCiBwdWJsaWM6CiAgICAgLy8gTm9ybWFsIEFQSSBlbnRyeQogICAg
IEFQSUVudHJ5U2hpbShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgcmVnaXN0ZXJUaHJlYWQgPSB0cnVl
KQotICAgICAgICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKCZleGVjLT5nbG9iYWxEYXRhKCks
IHJlZ2lzdGVyVGhyZWFkKQotICAgICAgICAsIG1fbG9jayhleGVjKQorICAgICAgICA6IEFQSUVu
dHJ5U2hpbVdpdGhvdXRMb2NrKCZleGVjLT5nbG9iYWxEYXRhKCksIHJlZ2lzdGVyVGhyZWFkLCBS
ZWZHbG9iYWxEYXRhKQorICAgIHsKKyAgICAgICAgaW5pdCgpOworICAgIH0KKworICAgIC8vIFRo
aXMgY29uc3RydWN0b3IgaXMgbmVjZXNzYXJ5IGZvciBIZWFwVGltZXIgdG8gcHJldmVudCBpdCBm
cm9tIGFjY2lkZW50YWxseSByZXN1cnJlY3RpbmcgCisgICAgLy8gdGhlIHJlZiBjb3VudCBvZiBh
ICJkZWFkIiBKU0dsb2JhbERhdGEuCisgICAgQVBJRW50cnlTaGltKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgUmVmR2xvYmFsRGF0YVRhZyByZWZHbG9iYWxEYXRhLCBib29sIHJlZ2lzdGVyVGhy
ZWFkID0gdHJ1ZSkKKyAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRob3V0TG9jayhnbG9iYWxEYXRh
LCByZWdpc3RlclRocmVhZCwgcmVmR2xvYmFsRGF0YSkKICAgICB7CisgICAgICAgIGluaXQoKTsK
ICAgICB9CiAKICAgICAvLyBKU1Byb3BlcnR5TmFtZUFjY3VtdWxhdG9yIG9ubHkgaGFzIGEgZ2xv
YmFsRGF0YS4KICAgICBBUElFbnRyeVNoaW0oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29s
IHJlZ2lzdGVyVGhyZWFkID0gdHJ1ZSkKLSAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRob3V0TG9j
ayhnbG9iYWxEYXRhLCByZWdpc3RlclRocmVhZCkKLSAgICAgICAgLCBtX2xvY2soZ2xvYmFsRGF0
YS0+aXNTaGFyZWRJbnN0YW5jZSgpID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpCisgICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExvY2soZ2xvYmFsRGF0YSwgcmVnaXN0
ZXJUaHJlYWQsIFJlZkdsb2JhbERhdGEpCiAgICAgeworICAgICAgICBpbml0KCk7CisgICAgfQor
CisgICAgfkFQSUVudHJ5U2hpbSgpCisgICAgeworICAgICAgICBtX2dsb2JhbERhdGEtPnRpbWVv
dXRDaGVja2VyLnN0b3AoKTsKKyAgICAgICAgbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkudW5sb2Nr
KCk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEpTTG9jayBtX2xvY2s7CisgICAgdm9pZCBpbml0
KCkKKyAgICB7CisgICAgICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKKyAgICAg
ICAgbV9nbG9iYWxEYXRhLT50aW1lb3V0Q2hlY2tlci5zdGFydCgpOworICAgIH0KIH07CiAKIGNs
YXNzIEFQSUNhbGxiYWNrU2hpbSB7CkBAIC04OCw3ICsxMTUsNiBAQCBwdWJsaWM6CiAKICAgICB+
QVBJQ2FsbGJhY2tTaGltKCkKICAgICB7Ci0gICAgICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5hY3Rp
dml0eUNhbGxiYWNrKCktPnN5bmNocm9uaXplKCk7CiAgICAgICAgIHd0ZlRocmVhZERhdGEoKS5z
ZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKG1fZ2xvYmFsRGF0YS0+aWRlbnRpZmllclRhYmxlKTsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5j
cHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNiBAQCBKU0dsb2JhbENvbnRl
eHRSZWYgSlNHbG9iYWxDb250ZXh0Q3JlYXRlCiAgICAgLy8gSWYgdGhlIGFwcGxpY2F0aW9uIHdh
cyBsaW5rZWQgYmVmb3JlIEpTR2xvYmFsQ29udGV4dENyZWF0ZSB3YXMgY2hhbmdlZCB0byB1c2Ug
YSB1bmlxdWUgSlNHbG9iYWxEYXRhLAogICAgIC8vIHdlIHVzZSBhIHNoYXJlZCBvbmUgZm9yIGJh
Y2t3YXJkcyBjb21wYXRpYmlsaXR5LgogICAgIGlmIChOU1ZlcnNpb25PZkxpbmtUaW1lTGlicmFy
eSgiSmF2YVNjcmlwdENvcmUiKSA8PSB3ZWJraXRGaXJzdFZlcnNpb25XaXRoQ29uY3VycmVudEds
b2JhbENvbnRleHRzKSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKExvY2tGb3JSZWFsKTsKICAgICAg
ICAgcmV0dXJuIEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAodG9SZWYoJkpTR2xvYmFsRGF0
YTo6c2hhcmVkSW5zdGFuY2UoKSksIGdsb2JhbE9iamVjdENsYXNzKTsKICAgICB9CiAjZW5kaWYg
Ly8gT1MoREFSV0lOKQpAQCAtOTAsMTEgKzg5LDkgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xv
YmFsQ29udGV4dENyZWF0ZQogewogICAgIGluaXRpYWxpemVUaHJlYWRpbmcoKTsKIAotICAgIEpT
TG9jayBsb2NrKExvY2tGb3JSZWFsKTsKICAgICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBnbG9iYWxE
YXRhID0gZ3JvdXAgPyBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4odG9KUyhncm91cCkpIDogSlNH
bG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3RhY2tUeXBlU21hbGwpOwogCiAg
ICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShnbG9iYWxEYXRhLmdldCgpLCBmYWxzZSk7Ci0KICAg
ICBnbG9iYWxEYXRhLT5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOwogCiAgICAgaWYg
KCFnbG9iYWxPYmplY3RDbGFzcykgewpAQCAtMTI0LDE4ICsxMjEsMTkgQEAgSlNHbG9iYWxDb250
ZXh0UmVmIEpTR2xvYmFsQ29udGV4dFJldGFpbgogCiB2b2lkIEpTR2xvYmFsQ29udGV4dFJlbGVh
c2UoSlNHbG9iYWxDb250ZXh0UmVmIGN0eCkKIHsKKyAgICBJZGVudGlmaWVyVGFibGUqIHNhdmVk
SWRlbnRpZmllclRhYmxlOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBK
U0xvY2sgbG9jayhleGVjKTsKKyAgICB7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogCi0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwot
ICAgIElkZW50aWZpZXJUYWJsZSogc2F2ZWRJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWREYXRh
KCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShnbG9iYWxEYXRhLmlkZW50aWZpZXJUYWJsZSk7
CisgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
KyAgICAgICAgc2F2ZWRJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVu
dElkZW50aWZpZXJUYWJsZShnbG9iYWxEYXRhLmlkZW50aWZpZXJUYWJsZSk7CiAKLSAgICBib29s
IHByb3RlY3RDb3VudElzWmVybyA9IEhlYXA6OmhlYXAoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVj
dCgpKS0+dW5wcm90ZWN0KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7Ci0gICAgaWYgKHBy
b3RlY3RDb3VudElzWmVybykgewotICAgICAgICBnbG9iYWxEYXRhLmhlYXAuYWN0aXZpdHlDYWxs
YmFjaygpLT5zeW5jaHJvbml6ZSgpOwotICAgICAgICBnbG9iYWxEYXRhLmhlYXAucmVwb3J0QWJh
bmRvbmVkT2JqZWN0R3JhcGgoKTsKKyAgICAgICAgYm9vbCBwcm90ZWN0Q291bnRJc1plcm8gPSBI
ZWFwOjpoZWFwKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPnVucHJvdGVjdChleGVjLT5k
eW5hbWljR2xvYmFsT2JqZWN0KCkpOworICAgICAgICBpZiAocHJvdGVjdENvdW50SXNaZXJvKQor
ICAgICAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7
CisgICAgICAgIGdsb2JhbERhdGEuZGVyZWYoKTsKICAgICB9Ci0gICAgZ2xvYmFsRGF0YS5kZXJl
ZigpOwogCiAgICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoc2F2
ZWRJZGVudGlmaWVyVGFibGUpOwogfQpAQCAtMTY2LDcgKzE2NCw3IEBAIEpTR2xvYmFsQ29udGV4
dFJlZiBKU0NvbnRleHRHZXRHbG9iYWxDb24KIEpTU3RyaW5nUmVmIEpTQ29udGV4dENyZWF0ZUJh
Y2t0cmFjZShKU0NvbnRleHRSZWYgY3R4LCB1bnNpZ25lZCBtYXhTdGFja1NpemUpCiB7CiAgICAg
RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwotICAgIEpTTG9jayBsb2NrKGV4ZWMpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAg
IFVTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2aXNpb24gMTIwOTI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTYsMTAgKzYsMTMgQEAgRVhQT1JU
UwogICAgID8/MENvbGxhdG9yQFdURkBAUUFFQFBCREBaCiAgICAgPz8wRGF0ZUluc3RhbmNlQEpT
Q0BASUFFQFBBVkV4ZWNTdGF0ZUAxQFBBVlN0cnVjdHVyZUAxQEBaCiAgICAgPz8wRGVmYXVsdEdD
QWN0aXZpdHlDYWxsYmFja0BKU0NAQFFBRUBQQVZIZWFwQDFAQFoKLSAgICA/PzBEcm9wQWxsTG9j
a3NASlNMb2NrQEpTQ0BAUUFFQFc0SlNMb2NrQmVoYXZpb3JAMkBAWgorICAgID8/MERyb3BBbGxM
b2Nrc0BKU0xvY2tASlNDQEBRQUVAUEFWRXhlY1N0YXRlQDJAQFoKKyAgICA/PzBEcm9wQWxsTG9j
a3NASlNMb2NrQEpTQ0BAUUFFQFBBVkpTR2xvYmFsRGF0YUAyQEBaCiAgICAgPz8wRHluYW1pY0ds
b2JhbE9iamVjdFNjb3BlQEpTQ0BAUUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVkpTR2xvYmFsT2Jq
ZWN0QDFAQFogCiAgICAgPz8wSW50ZXJuYWxGdW5jdGlvbkBKU0NAQElBRUBQQVZKU0dsb2JhbE9i
amVjdEAxQFBBVlN0cnVjdHVyZUAxQEBaCi0gICAgPz8wSlNMb2NrQEpTQ0BAUUFFQFBBVkV4ZWNT
dGF0ZUAxQEBaCisgICAgPz8wSlNMb2NrSG9sZGVyQEpTQ0BAUUFFQEFBVkpTR2xvYmFsRGF0YUAx
QEBaCisgICAgPz8wSlNMb2NrSG9sZGVyQEpTQ0BAUUFFQFBBVkV4ZWNTdGF0ZUAxQEBaCisgICAg
Pz8wSlNMb2NrSG9sZGVyQEpTQ0BAUUFFQFBBVkpTR2xvYmFsRGF0YUAxQEBaCiAgICAgPz8wTUQ1
QFdURkBAUUFFQFhaCiAgICAgPz8wTXV0ZXhAV1RGQEBRQUVAWFoKICAgICA/PzBQYXJhbGxlbEVu
dmlyb25tZW50QFdURkBAUUFFQFA2QVhQQVhAWklIQFoKQEAgLTMyLDYgKzM1LDcgQEAgRVhQT1JU
UwogICAgID8/MURyb3BBbGxMb2Nrc0BKU0xvY2tASlNDQEBRQUVAWFoKICAgICA/PzFKU0dsb2Jh
bERhdGFASlNDQEBRQUVAWFoKICAgICA/PzFKU0dsb2JhbE9iamVjdEBKU0NAQFFBRUBYWgorICAg
ID8/MUpTTG9ja0hvbGRlckBKU0NAQFFBRUBYWgogICAgID8/MU11dGV4QFdURkBAUUFFQFhaCiAg
ICAgPz8xUmVmQ291bnRlZExlYWtDb3VudGVyQFdURkBAUUFFQFhaCiAgICAgPz8xU291cmNlUHJv
dmlkZXJDYWNoZUBKU0NAQFFBRUBYWgpAQCAtMTIzLDcgKzEyNyw2IEBAIEVYUE9SVFMKICAgICA/
Y3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXJAV1RGQEBZQUlYWgogICAgID9jcnlwdG9ncmFw
aGljYWxseVJhbmRvbVZhbHVlc0BXVEZAQFlBWFBBWElAWgogICAgID9jdXJyZW50VGhyZWFkQFdU
RkBAWUFJWFoKLSAgICA/Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2tASlNMb2NrQEpTQ0BAU0Ff
TlhaCiAgICAgP2N1cnJlbnRUaW1lQFdURkBAWUFOWFoKICAgICA/ZGF0YUBDU3RyaW5nQFdURkBA
UUJFUEJEWFoKICAgICA/ZGF0YUxvZ0BXVEZAQFlBWFBCRFpaCkBAIC0yMzUsMTAgKzIzOCw5IEBA
IEVYUE9SVFMKICAgICA/anNPd25lZFN0cmluZ0BKU0NAQFlBUEFWSlNTdHJpbmdAMUBQQVZKU0ds
b2JhbERhdGFAMUBBQlZVU3RyaW5nQDFAQFoKICAgICA/anNTdHJpbmdASlNDQEBZQVBBVkpTU3Ry
aW5nQDFAUEFWSlNHbG9iYWxEYXRhQDFAQUJWVVN0cmluZ0AxQEBaCiAgICAgP2xlbmd0aEBDU3Ry
aW5nQFdURkBAUUJFSVhaCi0gICAgP2xvY2tASlNMb2NrQEpTQ0BAU0FYVzRKU0xvY2tCZWhhdmlv
ckAyQEBaCisgICAgP2xvY2tASlNMb2NrQEpTQ0BAUUFFWFhaCiAgICAgP2xvY2tATXV0ZXhAV1RG
QEBRQUVYWFoKICAgICA/bG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4QFdURkBA
WUFYWFoKLSAgICA/bG9ja0NvdW50QEpTTG9ja0BKU0NAQFNBSFhaCiAgICAgP21hdGNoQFJlZ0V4
cEBKU0NAQFFBRUhBQVZKU0dsb2JhbERhdGFAMkBBQlZVU3RyaW5nQDJASUFBVj8kVmVjdG9yQEgk
MENBQEBXVEZAQEBaCiAgICAgP21hdGVyaWFsaXplUHJvcGVydHlNYXBAU3RydWN0dXJlQEpTQ0BA
QUFFWEFBVkpTR2xvYmFsRGF0YUAyQEBaCiAgICAgP21vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZUBXVEZAQFlBTlhaCkBAIC0zMjMsNiArMzI1LDcgQEAgRVhQT1JUUwogICAgID9zdG9wU2FtcGxp
bmdASlNHbG9iYWxEYXRhQEpTQ0BAUUFFWFhaCiAgICAgP3N1YnN0cmluZ1NoYXJpbmdJbXBsQFVT
dHJpbmdASlNDQEBRQkU/QVYxMkBJSUBaCiAgICAgP3N1Z2dlc3RlZE5ld1Byb3BlcnR5U3RvcmFn
ZVNpemVAU3RydWN0dXJlQEpTQ0BAUUFFSVhaCisgICAgP3N3ZWVwZXJASGVhcEBKU0NAQFFBRVBB
VkluY3JlbWVudGFsU3dlZXBlckAyQFhaCiAgICAgP3N5bnRoZXNpemVQcm90b3R5cGVASlNWYWx1
ZUBKU0NAQFFCRVBBVkpTT2JqZWN0QDJAUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/dGhpc09iamVj
dEBEZWJ1Z2dlckNhbGxGcmFtZUBKU0NAQFFCRVBBVkpTT2JqZWN0QDJAWFoKICAgICA/dGhyb3dF
cnJvckBKU0NAQFlBP0FWSlNWYWx1ZUAxQFBBVkV4ZWNTdGF0ZUAxQFYyMUBAWgpAQCAtMzUyLDcg
KzM1NSw3IEBAIEVYUE9SVFMKICAgICA/dHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkQEpT
QXJyYXlASlNDQEBJQUVQQVYxMkBBQVZKU0dsb2JhbERhdGFAMkBJQFoKICAgICA/dHJ5TG9ja0BN
dXRleEBXVEZAQFFBRV9OWFoKICAgICA/dHlwZUBEZWJ1Z2dlckNhbGxGcmFtZUBKU0NAQFFCRT9B
VzRUeXBlQDEyQFhaCi0gICAgP3VubG9ja0BKU0xvY2tASlNDQEBTQVhXNEpTTG9ja0JlaGF2aW9y
QDJAQFoKKyAgICA/dW5sb2NrQEpTTG9ja0BKU0NAQFFBRVhYWgogICAgID91bmxvY2tATXV0ZXhA
V1RGQEBRQUVYWFoKICAgICA/dW5sb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXhA
V1RGQEBZQVhYWgogICAgID91bnByb3RlY3RASGVhcEBKU0NAQFFBRV9OVkpTVmFsdWVAMkBAWgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIENoZWNrZWRCb29sZWFuIENvcGllZFNw
YWNlOjp0cnlBbGxvY2F0ZVMKICAgICBpZiAoaXNPdmVyc2l6ZShieXRlcykpCiAgICAgICAgIHJl
dHVybiB0cnlBbGxvY2F0ZU92ZXJzaXplKGJ5dGVzLCBvdXRQdHIpOwogICAgIAorICAgIEFTU0VS
VChtX2hlYXAtPmdsb2JhbERhdGEoKS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdM
b2NrKCkpOwogICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9hbGxvY2F0b3IuY3VycmVudENhcGFj
aXR5KCkpOwogCiAgICAgYWxsb2NhdGVCbG9jaygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMTUgKzE2MCw5IEBAIHN0YXRpYyBp
bmxpbmUgc2l6ZV90IHByb3BvcnRpb25hbEhlYXBTaXoKICAgICByZXR1cm4gMS4yNSAqIGhlYXBT
aXplOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFNoYXJlZEluc3RhbmNlVGhyZWFk
U3RhdGUoKQorc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRTaGFyZWRJbnN0YW5jZVRocmVhZFN0
YXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBpZiAoIUpTTG9jazo6bG9ja0Nv
dW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghSlNMb2NrOjpjdXJyZW50
VGhyZWFkSXNIb2xkaW5nTG9jaygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkVGhyZWFkU3Rh
dGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQpAQCAtMTc2LDcgKzE3MCw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc1ZhbGlkVGhyZWFkU3RhdGUoSlMKICAgICBpZiAoZ2xvYmFsRGF0YS0+aWRl
bnRpZmllclRhYmxlICE9IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChnbG9iYWxEYXRhLT5pc1NoYXJlZElu
c3RhbmNlKCkgJiYgIWlzVmFsaWRTaGFyZWRJbnN0YW5jZVRocmVhZFN0YXRlKCkpCisgICAgaWYg
KGdsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSAmJiAhaXNWYWxpZFNoYXJlZEluc3RhbmNl
VGhyZWFkU3RhdGUoZ2xvYmFsRGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiB0cnVlOwpAQCAtMzI3LDcgKzMyMSw3IEBAIHZvaWQgSGVhcDo6ZGlkQWJhbmRvbihzaXpl
X3QgYnl0ZXMpCiB2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQogewogICAgIEFTU0VSVChr
KTsKLSAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHx8ICFt
X2dsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSk7CisgICAgQVNTRVJUKG1fZ2xvYmFsRGF0
YS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogCiAgICAgaWYgKCFr
LmlzQ2VsbCgpKQogICAgICAgICByZXR1cm47CkBAIC0zMzgsNyArMzMyLDcgQEAgdm9pZCBIZWFw
Ojpwcm90ZWN0KEpTVmFsdWUgaykKIGJvb2wgSGVhcDo6dW5wcm90ZWN0KEpTVmFsdWUgaykKIHsK
ICAgICBBU1NFUlQoayk7Ci0gICAgQVNTRVJUKEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGlu
Z0xvY2soKSB8fCAhbV9nbG9iYWxEYXRhLT5pc1NoYXJlZEluc3RhbmNlKCkpOworICAgIEFTU0VS
VChtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsK
IAogICAgIGlmICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjkyLDYg
KzY4Niw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICBT
YW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uIik7CiAgICAg
CiAgICAgR0NQSEFTRShDb2xsZWN0KTsKKyAgICBBU1NFUlQoZ2xvYmFsRGF0YSgpLT5hcGlMb2Nr
KCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CiAgICAgQVNTRVJUKGdsb2JhbERhdGEo
KS0+aWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRh
YmxlKCkpOwogICAgIEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAgICAgSkFWQVNDUklQVENP
UkVfR0NfQkVHSU4oKTsKQEAgLTc3NywxOSArNzcyLDE5IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChT
d2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICBKQVZBU0NSSVBUQ09SRV9HQ19FTkQoKTsKIH0KIAot
dm9pZCBIZWFwOjpzZXRBY3Rpdml0eUNhbGxiYWNrKFBhc3NPd25QdHI8R0NBY3Rpdml0eUNhbGxi
YWNrPiBhY3Rpdml0eUNhbGxiYWNrKQordm9pZCBIZWFwOjpzZXRBY3Rpdml0eUNhbGxiYWNrKEdD
QWN0aXZpdHlDYWxsYmFjayogYWN0aXZpdHlDYWxsYmFjaykKIHsKICAgICBtX2FjdGl2aXR5Q2Fs
bGJhY2sgPSBhY3Rpdml0eUNhbGxiYWNrOwogfQogCiBHQ0FjdGl2aXR5Q2FsbGJhY2sqIEhlYXA6
OmFjdGl2aXR5Q2FsbGJhY2soKQogewotICAgIHJldHVybiBtX2FjdGl2aXR5Q2FsbGJhY2suZ2V0
KCk7CisgICAgcmV0dXJuIG1fYWN0aXZpdHlDYWxsYmFjazsKIH0KIAogSW5jcmVtZW50YWxTd2Vl
cGVyKiBIZWFwOjpzd2VlcGVyKCkKIHsKLSAgICByZXR1cm4gbV9zd2VlcGVyLmdldCgpOworICAg
IHJldHVybiBtX3N3ZWVwZXI7CiB9CiAKIHZvaWQgSGVhcDo6c2V0R2FyYmFnZUNvbGxlY3Rpb25U
aW1lckVuYWJsZWQoYm9vbCBlbmFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk5LDEwICs5OSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1cm4gbV9tYWNoaW5lVGhy
ZWFkczsgfQogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFjayog
YWN0aXZpdHlDYWxsYmFjaygpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldEFj
dGl2aXR5Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2aXR5Q2FsbGJhY2s+KTsKKyAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRBY3Rpdml0eUNhbGxiYWNrKEdDQWN0aXZpdHlDYWxs
YmFjayopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldEdhcmJhZ2VDb2xsZWN0
aW9uVGltZXJFbmFibGVkKGJvb2wpOwogCi0gICAgICAgIEluY3JlbWVudGFsU3dlZXBlciogc3dl
ZXBlcigpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBJbmNyZW1lbnRhbFN3ZWVwZXIqIHN3
ZWVwZXIoKTsKIAogICAgICAgICAvLyB0cnVlIGlmIGFuIGFsbG9jYXRpb24gb3IgY29sbGVjdGlv
biBpcyBpbiBwcm9ncmVzcwogICAgICAgICBpbmxpbmUgYm9vbCBpc0J1c3koKTsKQEAgLTIzNywx
MCArMjM3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBkb3VibGUgbV9sYXN0R0NMZW5n
dGg7CiAgICAgICAgIGRvdWJsZSBtX2xhc3RDb2RlRGlzY2FyZFRpbWU7CiAKLSAgICAgICAgT3du
UHRyPEdDQWN0aXZpdHlDYWxsYmFjaz4gbV9hY3Rpdml0eUNhbGxiYWNrOwotICAgICAgICBPd25Q
dHI8SW5jcmVtZW50YWxTd2VlcGVyPiBtX3N3ZWVwZXI7Ci0gICAgICAgIAogICAgICAgICBEb3Vi
bHlMaW5rZWRMaXN0PEV4ZWN1dGFibGVCYXNlPiBtX2NvbXBpbGVkQ29kZTsKKyAgICAgICAgCisg
ICAgICAgIEdDQWN0aXZpdHlDYWxsYmFjayogbV9hY3Rpdml0eUNhbGxiYWNrOworICAgICAgICBJ
bmNyZW1lbnRhbFN3ZWVwZXIqIG1fc3dlZXBlcjsKICAgICB9OwogCiAgICAgaW5saW5lIGJvb2wg
SGVhcDo6c2hvdWxkQ29sbGVjdCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwVGltZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBUaW1lci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBUaW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSwxMCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhlYXBUaW1lci5oIgogCisjaW5jbHVkZSAiQVBJU2hp
bXMuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5j
bHVkZSAiU2NvcGVDaGFpbi5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC0yMSw3ICsyNSw4IEBAIEhlYXBUaW1lcjo6SGVhcFRpbWVyKEpTR2xvYmFs
RGF0YSogZ2xvYmEKIAogSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKIHsKLSAgICBpbnZhbGlkYXRl
KCk7CisgICAgQ0ZSdW5Mb29wUmVtb3ZlVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdl
dCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0
ZShtX3RpbWVyLmdldCgpKTsKIH0KIAogdm9pZCBIZWFwVGltZXI6OnN5bmNocm9uaXplKCkKQEAg
LTM1LDE0ICs0MCwzNyBAQCB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25pemUoKQogCiB2b2lkIEhl
YXBUaW1lcjo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgQ0ZSdW5Mb29wUmVtb3ZlVGltZXIobV9ydW5M
b29wLmdldCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwotICAgIENG
UnVuTG9vcFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKKyAgICBtX2dsb2JhbERhdGEg
PSAwOworICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1fdGltZXIuZ2V0KCksIENG
QWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc19kZWNhZGUpOworfQorCit2b2lkIEhlYXBUaW1l
cjo6ZGlkU3RhcnRWTVNodXRkb3duKCkKK3sKKyAgICBpZiAoQ0ZSdW5Mb29wR2V0Q3VycmVudCgp
ID09IG1fcnVuTG9vcC5nZXQoKSkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIGRl
bGV0ZSB0aGlzOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVCghbV9nbG9iYWxE
YXRhLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7CisgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fc2h1dGRvd25NdXRleCk7CisgICAgaW52YWxpZGF0ZSgpOwogfQogCiB2
b2lkIEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVyUmVmLCB2b2lkKiBpbmZv
KQogewogICAgIEhlYXBUaW1lciogYWdlbnQgPSBzdGF0aWNfY2FzdDxIZWFwVGltZXIqPihpbmZv
KTsKLSAgICBhZ2VudC0+ZG9Xb3JrKCk7CisgICAgYWdlbnQtPm1fc2h1dGRvd25NdXRleC5sb2Nr
KCk7CisgICAgaWYgKCFhZ2VudC0+bV9nbG9iYWxEYXRhKSB7CisgICAgICAgIGFnZW50LT5tX3No
dXRkb3duTXV0ZXgudW5sb2NrKCk7CisgICAgICAgIGRlbGV0ZSBhZ2VudDsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICB7CisgICAgICAgIC8vIFdlIGRvbid0IHJlZiBoZXJlIHRvIHByZXZl
bnQgdXMgZnJvbSByZXN1cnJlY3RpbmcgdGhlIHJlZiBjb3VudCBvZiBhICJkZWFkIiBKU0dsb2Jh
bERhdGEuCisgICAgICAgIEFQSUVudHJ5U2hpbSBzaGltKGFnZW50LT5tX2dsb2JhbERhdGEsIEFQ
SUVudHJ5U2hpbVdpdGhvdXRMb2NrOjpEb250UmVmR2xvYmFsRGF0YSk7CisgICAgICAgIGFnZW50
LT5kb1dvcmsoKTsKKyAgICB9CisgICAgYWdlbnQtPm1fc2h1dGRvd25NdXRleC51bmxvY2soKTsK
IH0KIAogI2Vsc2UKQEAgLTU2LDYgKzg0LDExIEBAIEhlYXBUaW1lcjo6fkhlYXBUaW1lcigpCiB7
CiB9CiAKK3ZvaWQgSGVhcFRpbWVyOjpkaWRTdGFydFZNU2h1dGRvd24oKQoreworICAgIGRlbGV0
ZSB0aGlzOworfQorCiB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25pemUoKQogewogfQpAQCAtNjQs
NyArOTcsNiBAQCB2b2lkIEhlYXBUaW1lcjo6aW52YWxpZGF0ZSgpCiB7CiB9CiAKLQogI2VuZGlm
CiAgICAgCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5oCShyZXZp
c2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgSGVhcFRpbWVyX2gKIAogI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKICNp
ZiBVU0UoQ0YpCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KQEAg
LTIxLDcgKzIyLDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiAgICAgdmlydHVhbCB+SGVhcFRp
bWVyKCk7Ci0gICAgCisKKyAgICB2b2lkIGRpZFN0YXJ0Vk1TaHV0ZG93bigpOwogICAgIHZpcnR1
YWwgdm9pZCBzeW5jaHJvbml6ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBkb1dvcmsoKSA9IDA7CiAg
ICAgCkBAIC0zNCw2ICszNiw4IEBAIHByb3RlY3RlZDoKICAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29w
VGltZXJSZWY+IG1fdGltZXI7CiAgICAgUmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV9ydW5Mb29w
OwogICAgIENGUnVuTG9vcFRpbWVyQ29udGV4dCBtX2NvbnRleHQ7CisKKyAgICBNdXRleCBtX3No
dXRkb3duTXV0ZXg7CiAjZW5kaWYKICAgICAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAJKHJldmlzaW9uIDEy
MDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDYgQEAgc3RhdGljIGNvbnN0IENGVGltZUlu
dGVydmFsIHN3ZWVwVGltZU11bAogCiB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6ZG9Xb3JrKCkK
IHsKLSAgICBBUElFbnRyeVNoaW0gc2hpbShtX2dsb2JhbERhdGEpOwogICAgIGRvU3dlZXAoV1RG
Ojptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CiB9CiAgICAgCkBAIC0zMCw5ICsyOSw5
IEBAIEluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVyKEgKIHsKIH0KIAotUGFz
c093blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhl
YXAqIGhlYXApCitJbmNyZW1lbnRhbFN3ZWVwZXIqIEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRl
KEhlYXAqIGhlYXApCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbmNyZW1lbnRhbFN3ZWVw
ZXIoaGVhcCwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKSk7CisgICAgcmV0dXJuIG5ldyBJbmNyZW1l
bnRhbFN3ZWVwZXIoaGVhcCwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKTsKIH0KIAogdm9pZCBJbmNy
ZW1lbnRhbFN3ZWVwZXI6OnNjaGVkdWxlVGltZXIoKQpAQCAtODQsOSArODMsOSBAQCB2b2lkIElu
Y3JlbWVudGFsU3dlZXBlcjo6ZG9Xb3JrKCkKIHsKIH0KIAotUGFzc093blB0cjxJbmNyZW1lbnRh
bFN3ZWVwZXI+IEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhlYXAqIGhlYXApCitJbmNyZW1l
bnRhbFN3ZWVwZXIqIEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRlKEhlYXAqIGhlYXApCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIoaGVhcC0+Z2xvYmFsRGF0
YSgpKSk7CisgICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbFN3ZWVwZXIoaGVhcC0+Z2xvYmFsRGF0
YSgpKTsKIH0KIAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0U3dlZXBpbmcoY29uc3Qg
SGFzaFNldDxNYXJrZWRCbG9jayo+JikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0luY3JlbWVudGFsU3dlZXBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMTQsNyArMTQsNyBAQCBjbGFzcyBIZWFwOwogICAgIAogY2xhc3MgSW5jcmVtZW50YWxTd2Vl
cGVyIDogcHVibGljIEhlYXBUaW1lciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
SW5jcmVtZW50YWxTd2VlcGVyPiBjcmVhdGUoSGVhcCopOworICAgIHN0YXRpYyBJbmNyZW1lbnRh
bFN3ZWVwZXIqIGNyZWF0ZShIZWFwKik7CiAgICAgdm9pZCBzdGFydFN3ZWVwaW5nKGNvbnN0IEhh
c2hTZXQ8TWFya2VkQmxvY2sqPiYgYmxvY2tTbmFwc2hvdCk7CiAgICAgdmlydHVhbCB2b2lkIGRv
V29yaygpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBACiAK
ICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJIZWFwLmgiCisjaW5j
bHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewpAQCAtNTYsNiArNTcsNyBAQCBpbmxpbmUgdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjp0cnlBbGxvY2F0CiAgICAgCiB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xv
d0Nhc2UoKQogeworICAgIEFTU0VSVChtX2hlYXAtPmdsb2JhbERhdGEoKS0+YXBpTG9jaygpLmN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogI2lmIENPTExFQ1RfT05fRVZFUllfQUxMT0NB
VElPTgogICAgIG1faGVhcC0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAgICBBU1NFUlQobV9oZWFw
LT5tX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjcsOCArMTI3LDEwIEBAIHZvaWQgV2Vha0Jsb2NrOjpyZWFwKCkKICAgICAgICAgaWYgKHdlYWtJ
bXBsLT5zdGF0ZSgpID4gV2Vha0ltcGw6OkRlYWQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQod2Vha0ltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSkp
CisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh3ZWFrSW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgp
KSkgeworICAgICAgICAgICAgQVNTRVJUKHdlYWtJbXBsLT5zdGF0ZSgpID09IFdlYWtJbXBsOjpM
aXZlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKICAgICAgICAgd2Vha0lt
cGwtPnNldFN0YXRlKFdlYWtJbXBsOjpEZWFkKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGJvb2wgY2hlY2tTeW50YXgo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUqIHJldHVy
bmVkRXhjZXB0aW9uKQogewotICAgIEpTTG9jayBsb2NrKGV4ZWMpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgIEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuaWRlbnRpZmllclRh
YmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwogCiAgICAg
UHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKGV4
ZWMsIHNvdXJjZSk7CkBAIC01Myw3ICs1Myw3IEBAIGJvb2wgY2hlY2tTeW50YXgoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCAKIAogSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBKU1ZhbHVlKiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKLSAgICBKU0xvY2sgbG9j
ayhleGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBBU1NFUlQoZXhlYy0+
Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElk
ZW50aWZpZXJUYWJsZSgpKTsKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmlzQ29sbGVjdG9y
QnVzeSgpKQogICAgICAgICBDUkFTSCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHByb3RlY3RlZDoKIAogY2xhc3MgRGVmYXVsdEdD
QWN0aXZpdHlDYWxsYmFjayA6IHB1YmxpYyBHQ0FjdGl2aXR5Q2FsbGJhY2sgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s+IGNyZWF0ZShI
ZWFwKik7CisgICAgc3RhdGljIERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2sqIGNyZWF0ZShIZWFw
Kik7CiAKICAgICBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKEhlYXAqKTsKIApAQCAtOTEsOSAr
OTEsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1pbmxpbmUgUGFzc093blB0cjxEZWZhdWx0
R0NBY3Rpdml0eUNhbGxiYWNrPiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGUoSGVh
cCogaGVhcCkKK2lubGluZSBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrKiBEZWZhdWx0R0NBY3Rp
dml0eUNhbGxiYWNrOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcCkpOworICAgIHJldHVybiBuZXcgRGVm
YXVsdEdDQWN0aXZpdHlDYWxsYmFjayhoZWFwKTsKIH0KIAogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAxMjA5MjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxMCBAQAogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJz
LmgiCiAjaW5jbHVkZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25D
b25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgogI2luY2x1ZGUg
IkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKKyNpbmNs
dWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2lu
Y2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTQVBJVmFsdWVXcmFwcGVyLmgiCkBA
IC0xNzgsMTIgKzE4MCw5IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFU
eXAKIHsKICAgICBpbnRlcnByZXRlciA9IG5ldyBJbnRlcnByZXRlcjsKIAotICAgIGlmIChpc1No
YXJlZEluc3RhbmNlKCkpCi0gICAgICAgIHR1cm5PZmZWZXJpZmllcigpOwotCiAgICAgLy8gTmVl
ZCB0byBiZSBjYXJlZnVsIHRvIGtlZXAgZXZlcnl0aGluZyBjb25zaXN0ZW50IGhlcmUKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayh0aGlzKTsKICAgICBJZGVudGlmaWVyVGFibGUqIGV4aXN0aW5nRW50
cnlJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJU
YWJsZShpZGVudGlmaWVyVGFibGUpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CiAgICAgc3RydWN0dXJlU3RydWN0dXJlLnNldCgqdGhpcywgU3RydWN0dXJlOjpjcmVh
dGVTdHJ1Y3R1cmUoKnRoaXMpKTsKICAgICBkZWJ1Z2dlckFjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICAgICBhY3RpdmF0aW9uU3RydWN0dXJlLnNldCgqdGhpcywgSlNBY3RpdmF0aW9u
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkBAIC0yMjIsNiArMjIxLDkg
QEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogCiBKU0dsb2JhbERh
dGE6On5KU0dsb2JhbERhdGEoKQogeworICAgIEFTU0VSVCghbV9hcGlMb2NrLmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdMb2NrKCkpOworICAgIGhlYXAuYWN0aXZpdHlDYWxsYmFjaygpLT5kaWRTdGFy
dFZNU2h1dGRvd24oKTsKKyAgICBoZWFwLnN3ZWVwZXIoKS0+ZGlkU3RhcnRWTVNodXRkb3duKCk7
CiAgICAgaGVhcC5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogCiAgICAgZGVsZXRlIGludGVycHJl
dGVyOwpAQCAtMzExLDYgKzMxMyw3IEBAIGJvb2wgSlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5j
ZUV4aXN0cygKIAogSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlKCkK
IHsKKyAgICBHbG9iYWxKU0xvY2sgZ2xvYmFsTG9jazsKICAgICBKU0dsb2JhbERhdGEqJiBpbnN0
YW5jZSA9IHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKICAgICBpZiAoIWluc3RhbmNlKSB7CiAg
ICAgICAgIGluc3RhbmNlID0gYWRvcHRSZWYobmV3IEpTR2xvYmFsRGF0YShBUElTaGFyZWQsIFRo
cmVhZFN0YWNrVHlwZVNtYWxsLCBTbWFsbEhlYXApKS5sZWFrUmVmKCk7CkBAIC0zMjEsNyArMzI0
LDYgQEAgSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbgogCiBKU0dsb2Jh
bERhdGEqJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKQogewotICAgIEFT
U0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIHN0YXRpYyBK
U0dsb2JhbERhdGEqIHNoYXJlZEluc3RhbmNlOwogICAgIHJldHVybiBzaGFyZWRJbnN0YW5jZTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5o
CShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkhl
YXAuaCIKICNpbmNsdWRlICJJbnRyaW5zaWMuaCIKICNpbmNsdWRlICJKSVRTdHVicy5oIgorI2lu
Y2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKICNpbmNsdWRlICJMTEludERh
dGEuaCIKICNpbmNsdWRlICJOdW1lcmljU3RyaW5ncy5oIgpAQCAtNDYsOCArNDcsOCBAQAogI2lu
Y2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgogI2luY2x1ZGUg
PHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQpAQCAtMTUy
LDcgKzE1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAjZW5kaWYKIAotICAgIGNsYXNz
IEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEpTR2xvYmFsRGF0YT4geworICAgIGNs
YXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxKU0dsb2JhbERh
dGE+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIC8vIFdlYkNvcmUgaGFzIGEgb25lLXRvLW9uZSBt
YXBwaW5nIG9mIHRocmVhZHMgdG8gSlNHbG9iYWxEYXRhczsKICAgICAgICAgLy8gZWl0aGVyIGNy
ZWF0ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlCkBAIC0x
ODAsNiArMTgxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgbWFrZVVzYWJs
ZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGluZVRocmVhZHMoKS5tYWtlVXNhYmxl
RnJvbU11bHRpcGxlVGhyZWFkcygpOyB9CiAKKyAgICBwcml2YXRlOgorICAgICAgICBKU0xvY2sg
bV9hcGlMb2NrOworCisgICAgcHVibGljOgogICAgICAgICBIZWFwIGhlYXA7IC8vIFRoZSBoZWFw
IGlzIG91ciBmaXJzdCBkYXRhIG1lbWJlciB0byBlbnN1cmUgdGhhdCBpdCdzIGRlc3RydWN0ZWQg
YWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJlbmNlIGl0LgogCiAgICAgICAgIEdsb2Jh
bERhdGFUeXBlIGdsb2JhbERhdGFUeXBlOwpAQCAtNDA5LDYgKzQxNCw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihmbG9hdDY0LCBGbG9hdDY0
KTsKICN1bmRlZiByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbgogCisgICAgICAgIEpTTG9jayYg
YXBpTG9jaygpIHsgcmV0dXJuIG1fYXBpTG9jazsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZp
c2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw4ICsxMTQsNiBAQCB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gc3RhdGljIGlubGluZSB2b2lkCiAKIEpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxP
YmplY3QoKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2Nr
KCkpOwotCiAgICAgaWYgKG1fZGVidWdnZXIpCiAgICAgICAgIG1fZGVidWdnZXItPmRldGFjaCh0
aGlzKTsKIApAQCAtMTMwLDcgKzEyOCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmRlc3Ryb3ko
SlNDZWxsKiBjZWwKIAogdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChKU09iamVjdCogdGhpc1Zh
bHVlKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkp
OworICAgIEFTU0VSVChnbG9iYWxEYXRhKCkuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdMb2NrKCkpOwogICAgIAogICAgIG1fZ2xvYmFsU2NvcGVDaGFpbi5zZXQoZ2xvYmFsRGF0YSgp
LCB0aGlzLCBTY29wZUNoYWluTm9kZTo6Y3JlYXRlKDAsIHRoaXMsICZnbG9iYWxEYXRhKCksIHRo
aXMsIHRoaXNWYWx1ZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TG9jay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1
ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgog
CkBAIC0zOCw5NCArMzksOTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgKE9TKERBUldJTikgfHwg
VVNFKFBUSFJFQURTKSkKIAogLy8gQWNxdWlyZSB0aGlzIG11dGV4IGJlZm9yZSBhY2Nlc3Npbmcg
bG9jay1yZWxhdGVkIGRhdGEuCi1zdGF0aWMgcHRocmVhZF9tdXRleF90IEpTTXV0ZXggPSBQVEhS
RUFEX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnaWFudEdsb2Jh
bEpTTG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CiAKLS8vIFRocmVhZC1zcGVjaWZp
YyBrZXkgdGhhdCB0ZWxscyB3aGV0aGVyIGEgdGhyZWFkIGhvbGRzIHRoZSBKU011dGV4LCBhbmQg
aG93IG1hbnkgdGltZXMgaXQgd2FzIHRha2VuIHJlY3Vyc2l2ZWx5LgotcHRocmVhZF9rZXlfdCBK
U0xvY2tDb3VudDsKK0dsb2JhbEpTTG9jazo6R2xvYmFsSlNMb2NrKCkKK3sKKyAgICBwdGhyZWFk
X211dGV4X2xvY2soJmdpYW50R2xvYmFsSlNMb2NrKTsKK30KIAotc3RhdGljIHZvaWQgY3JlYXRl
SlNMb2NrQ291bnQoKQorR2xvYmFsSlNMb2NrOjp+R2xvYmFsSlNMb2NrKCkKIHsKLSAgICBwdGhy
ZWFkX2tleV9jcmVhdGUoJkpTTG9ja0NvdW50LCAwKTsKKyAgICBwdGhyZWFkX211dGV4X3VubG9j
aygmZ2lhbnRHbG9iYWxKU0xvY2spOwogfQogCi1wdGhyZWFkX29uY2VfdCBjcmVhdGVKU0xvY2tD
b3VudE9uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKK0pTTG9ja0hvbGRlcjo6SlNMb2NrSG9sZGVy
KEV4ZWNTdGF0ZSogZXhlYykKKyAgICA6IG1fZ2xvYmFsRGF0YSgmZXhlYy0+Z2xvYmFsRGF0YSgp
KQoreworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKK30KIAotLy8gTG9jayBu
ZXN0aW5nIGNvdW50LgotaW50cHRyX3QgSlNMb2NrOjpsb2NrQ291bnQoKQorSlNMb2NrSG9sZGVy
OjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgIDogbV9nbG9iYWxE
YXRhKGdsb2JhbERhdGEpCiB7Ci0gICAgcHRocmVhZF9vbmNlKCZjcmVhdGVKU0xvY2tDb3VudE9u
Y2UsIGNyZWF0ZUpTTG9ja0NvdW50KTsKKyAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5sb2Nr
KCk7Cit9CiAKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocHRocmVhZF9n
ZXRzcGVjaWZpYyhKU0xvY2tDb3VudCkpOworSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIDogbV9nbG9iYWxEYXRhKCZnbG9iYWxEYXRhKQor
eworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2soKTsKIH0KIAotc3RhdGljIHZvaWQg
c2V0TG9ja0NvdW50KGludHB0cl90IGNvdW50KQorSlNMb2NrSG9sZGVyOjp+SlNMb2NrSG9sZGVy
KCkKIHsKLSAgICBBU1NFUlQoY291bnQgPj0gMCk7Ci0gICAgcHRocmVhZF9zZXRzcGVjaWZpYyhK
U0xvY2tDb3VudCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY291bnQpKTsKKyAgICBtX2dsb2Jh
bERhdGEtPmFwaUxvY2soKS51bmxvY2soKTsKIH0KIAotSlNMb2NrOjpKU0xvY2soRXhlY1N0YXRl
KiBleGVjKQotICAgIDogbV9sb2NrQmVoYXZpb3IoZXhlYy0+Z2xvYmFsRGF0YSgpLmlzU2hhcmVk
SW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5KQorSlNMb2Nr
OjpKU0xvY2soKQorICAgIDogbV9sb2NrQ291bnQoMCkKIHsKLSAgICBsb2NrKG1fbG9ja0JlaGF2
aW9yKTsKKyAgICBtX3NwaW5Mb2NrLkluaXQoKTsKIH0KIAotSlNMb2NrOjpKU0xvY2soSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQotICAgIDogbV9sb2NrQmVoYXZpb3IoZ2xvYmFsRGF0YS0+aXNT
aGFyZWRJbnN0YW5jZSgpID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpCitK
U0xvY2s6On5KU0xvY2soKQogewotICAgIGxvY2sobV9sb2NrQmVoYXZpb3IpOwogfQogCi12b2lk
IEpTTG9jazo6bG9jayhKU0xvY2tCZWhhdmlvciBsb2NrQmVoYXZpb3IpCit2b2lkIEpTTG9jazo6
bG9jaygpCiB7Ci0jaWZkZWYgTkRFQlVHCi0gICAgLy8gTG9ja2luZyAibm90IGZvciByZWFsIiBp
cyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICBpZiAobG9ja0JlaGF2aW9yID09IFNpbGVuY2VB
c3NlcnRpb25zT25seSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCisgICAgVGhyZWFkSWRlbnRp
ZmllciBjdXJyZW50VGhyZWFkID0gV1RGOjpjdXJyZW50VGhyZWFkKCk7CisgICAgeworICAgICAg
ICBTcGluTG9ja0hvbGRlciBob2xkZXIoJm1fc3BpbkxvY2spOworICAgICAgICBpZiAobV9vd25l
clRocmVhZCA9PSBjdXJyZW50VGhyZWFkICYmIG1fbG9ja0NvdW50KSB7CisgICAgICAgICAgICBt
X2xvY2tDb3VudCsrOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQogCi0g
ICAgcHRocmVhZF9vbmNlKCZjcmVhdGVKU0xvY2tDb3VudE9uY2UsIGNyZWF0ZUpTTG9ja0NvdW50
KTsKKyAgICBtX2xvY2subG9jaygpOwogCi0gICAgaW50cHRyX3QgY3VycmVudExvY2tDb3VudCA9
IGxvY2tDb3VudCgpOwotICAgIGlmICghY3VycmVudExvY2tDb3VudCAmJiBsb2NrQmVoYXZpb3Ig
PT0gTG9ja0ZvclJlYWwpIHsKLSAgICAgICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfbXV0ZXhfbG9j
aygmSlNNdXRleCk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCAhcmVzdWx0KTsKKyAg
ICB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigmbV9zcGluTG9jayk7CisgICAgICAg
IG1fb3duZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkOworICAgICAgICBBU1NFUlQoIW1fbG9ja0Nv
dW50KTsKKyAgICAgICAgbV9sb2NrQ291bnQgPSAxOwogICAgIH0KLSAgICBzZXRMb2NrQ291bnQo
Y3VycmVudExvY2tDb3VudCArIDEpOwogfQogCi12b2lkIEpTTG9jazo6dW5sb2NrKEpTTG9ja0Jl
aGF2aW9yIGxvY2tCZWhhdmlvcikKK3ZvaWQgSlNMb2NrOjp1bmxvY2soKQogewotICAgIEFTU0VS
VChsb2NrQ291bnQoKSk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkp
OwogCi0jaWZkZWYgTkRFQlVHCi0gICAgLy8gTG9ja2luZyAibm90IGZvciByZWFsIiBpcyBhIGRl
YnVnLW9ubHkgZmVhdHVyZS4KLSAgICBpZiAobG9ja0JlaGF2aW9yID09IFNpbGVuY2VBc3NlcnRp
b25zT25seSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCisgICAgU3BpbkxvY2tIb2xkZXIgaG9s
ZGVyKCZtX3NwaW5Mb2NrKTsKKyAgICBtX2xvY2tDb3VudC0tOwogCi0gICAgaW50cHRyX3QgbmV3
TG9ja0NvdW50ID0gbG9ja0NvdW50KCkgLSAxOwotICAgIHNldExvY2tDb3VudChuZXdMb2NrQ291
bnQpOwotICAgIGlmICghbmV3TG9ja0NvdW50ICYmIGxvY2tCZWhhdmlvciA9PSBMb2NrRm9yUmVh
bCkgewotICAgICAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9tdXRleF91bmxvY2soJkpTTXV0ZXgp
OwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJlc3VsdCk7Ci0gICAgfQorICAgIGlm
ICghbV9sb2NrQ291bnQpCisgICAgICAgIG1fbG9jay51bmxvY2soKTsKIH0KIAogdm9pZCBKU0xv
Y2s6OmxvY2soRXhlY1N0YXRlKiBleGVjKQogewotICAgIGxvY2soZXhlYy0+Z2xvYmFsRGF0YSgp
LmlzU2hhcmVkSW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBleGVjLT5nbG9iYWxEYXRhKCkuYXBpTG9jaygpLmxvY2soKTsKIH0KIAogdm9pZCBK
U0xvY2s6OnVubG9jayhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgdW5sb2NrKGV4ZWMtPmdsb2Jh
bERhdGEoKS5pc1NoYXJlZEluc3RhbmNlKCkgPyBMb2NrRm9yUmVhbCA6IFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmFwaUxvY2soKS51bmxvY2soKTsKIH0K
IAogYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkKIHsKLSAgICBwdGhy
ZWFkX29uY2UoJmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNMb2NrQ291bnQpOwotICAg
IHJldHVybiAhIXB0aHJlYWRfZ2V0c3BlY2lmaWMoSlNMb2NrQ291bnQpOworICAgIHJldHVybiBt
X2xvY2tDb3VudCAmJiBtX293bmVyVGhyZWFkID09IFdURjo6Y3VycmVudFRocmVhZCgpOwogfQog
CiAvLyBUaGlzIGlzIGZhaXJseSBuYXN0eS4gIFdlIGFsbG93IG11bHRpcGxlIHRocmVhZHMgdG8g
cnVuIG9uIHRoZSBzYW1lCkBAIC0xNDksNyArMTUyLDcgQEAgYm9vbCBKU0xvY2s6OmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKAogLy8gdGhpcyB0byBoYXBwZW4sIGFuZCB3ZXJlIGl0cyBzdGFj
ayB0byBncm93IGZ1cnRoZXIsIHRoZW4gaXQgbWF5IHBvdGVudGlhbGx5CiAvLyB3cml0ZSBvdmVy
IHRoZSBzZWNvbmQgdGhyZWFkJ3MgY2FsbCBmcmFtZXMuCiAvLwotLy8gSW4gYXZvaWQgSlMgc3Rh
Y2sgY29ycnVwdGlvbiB3ZSBlbmZvcmNlIGEgcG9saWN5IG9mIG9ubHkgZXZlciBhbGxvd2luZyB0
d28KKy8vIFRvIGF2b2lkIEpTIHN0YWNrIGNvcnJ1cHRpb24gd2UgZW5mb3JjZSBhIHBvbGljeSBv
ZiBvbmx5IGV2ZXIgYWxsb3dpbmcgdHdvCiAvLyB0aHJlYWRzIHRvIHVzZSBhIEpTIGNvbnRleHQg
Y29uY3VycmVudGx5LCBhbmQgb25seSBhbGxvd2luZyB0aGUgc2Vjb25kIG9mCiAvLyB0aGVzZSB0
aHJlYWRzIHRvIGV4ZWN1dGUgdW50aWwgaXQgaGFzIGNvbXBsZXRlZCBhbmQgZnVsbHkgcmV0dXJu
ZWQgZnJvbSBpdHMKIC8vIG91dGVybW9zdCBjYWxsIGludG8gSlNDLiAgV2UgZW5mb3JjZSB0aGlz
IHBvbGljeSB1c2luZyAnbG9ja0Ryb3BEZXB0aCcuICBUaGUKQEAgLTE1OCw3ICsxNjEsNyBAQCBi
b29sIEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soCiAvLyBzYW1lIHRocmVhZCBh
Z2FpbiwgZW50ZXIgSlNDICh0aHJvdWdoIGV2YWx1YXRlIHNjcmlwdCBvciBjYWxsIGZ1bmN0aW9u
KSwgYW5kIGV4aXQKIC8vIGFnYWluIHRocm91Z2ggYSBjYWxsYmFjaywgdGhlbiB0aGUgbG9ja3Mg
d2lsbCBub3QgYmUgZHJvcHBlZCB3aGVuIERyb3BBbGxMb2NrcwogLy8gaXMgY2FsbGVkIChzaW5j
ZSBsb2NrRHJvcERlcHRoIGlzIG5vbi16ZXJvKS4gIFNpbmNlIHRoaXMgdGhyZWFkIGlzIHN0aWxs
IGhvbGRpbmcKLS8vIHRoZSBsb2Nrcywgb25seSBpdCB3aWxsIHJlIGFibGUgdG8gcmUtZW50ZXIg
SlNDIChlaXRoZXIgYmUgcmV0dXJuaW5nIGZyb20gdGhlCisvLyB0aGUgbG9ja3MsIG9ubHkgaXQg
d2lsbCBiZSBhYmxlIHRvIHJlLWVudGVyIEpTQyAoZWl0aGVyIGJlIHJldHVybmluZyBmcm9tIHRo
ZQogLy8gY2FsbGJhY2ssIG9yIGJ5IHJlLWVudGVyaW5nIHRocm91Z2ggYW5vdGhlciBjYWxsIHRv
IGV2YXVsYXRlIHNjcmlwdCBvciBjYWxsCiAvLyBmdW5jdGlvbikuCiAvLwpAQCAtMTY4LDYxICsx
NzEsODQgQEAgYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKAogLy8gb3Jk
ZXIgaW4gd2hpY2ggdGhleSB3ZXJlIG1hZGUgLSB0aG91Z2ggaW1wbGVtZW50aW5nIHRoZSBsZXNz
IHJlc3RyaWN0aXZlIHBvbGljeQogLy8gd291bGQgbGlrZWx5IGluY3JlYXNlIGNvbXBsZXhpdHkg
YW5kIG92ZXJoZWFkLgogLy8KLXN0YXRpYyB1bnNpZ25lZCBsb2NrRHJvcERlcHRoID0gMDsKIAot
SlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhFeGVjU3RhdGUqIGV4ZWMpCi0gICAg
OiBtX2xvY2tCZWhhdmlvcihleGVjLT5nbG9iYWxEYXRhKCkuaXNTaGFyZWRJbnN0YW5jZSgpID8g
TG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkpCisvLyBUaGlzIGZ1bmN0aW9uIHJl
dHVybnMgdGhlIG51bWJlciBvZiBsb2NrcyB0aGF0IHdlcmUgZHJvcHBlZC4KK3Vuc2lnbmVkIEpT
TG9jazo6ZHJvcEFsbExvY2tzKCkKIHsKLSAgICBwdGhyZWFkX29uY2UoJmNyZWF0ZUpTTG9ja0Nv
dW50T25jZSwgY3JlYXRlSlNMb2NrQ291bnQpOworICAgIGlmIChtX2xvY2tEcm9wRGVwdGgrKykK
KyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAobG9ja0Ryb3BEZXB0aCsrKSB7Ci0gICAgICAg
IG1fbG9ja0NvdW50ID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICByZXR1cm4gZHJv
cEFsbExvY2tzVW5jb25kaXRpb25hbGx5KCk7Cit9CisKK3Vuc2lnbmVkIEpTTG9jazo6ZHJvcEFs
bExvY2tzVW5jb25kaXRpb25hbGx5KCkKK3sKKyAgICB1bnNpZ25lZCBsb2NrQ291bnQgPSBtX2xv
Y2tDb3VudDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9ja0NvdW50OyBpKyspCisg
ICAgICAgIHVubG9jaygpOwogCi0gICAgbV9sb2NrQ291bnQgPSBKU0xvY2s6OmxvY2tDb3VudCgp
OwotICAgIGZvciAoaW50cHRyX3QgaSA9IDA7IGkgPCBtX2xvY2tDb3VudDsgaSsrKQotICAgICAg
ICBKU0xvY2s6OnVubG9jayhtX2xvY2tCZWhhdmlvcik7CisgICAgcmV0dXJuIGxvY2tDb3VudDsK
IH0KIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhKU0xvY2tCZWhhdmlvciBK
U0xvY2tCZWhhdmlvcikKLSAgICA6IG1fbG9ja0JlaGF2aW9yKEpTTG9ja0JlaGF2aW9yKQordm9p
ZCBKU0xvY2s6OmdyYWJBbGxMb2Nrcyh1bnNpZ25lZCBsb2NrQ291bnQpCiB7Ci0gICAgcHRocmVh
ZF9vbmNlKCZjcmVhdGVKU0xvY2tDb3VudE9uY2UsIGNyZWF0ZUpTTG9ja0NvdW50KTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9ja0NvdW50OyBpKyspCisgICAgICAgIGxvY2soKTsK
IAotICAgIGlmIChsb2NrRHJvcERlcHRoKyspIHsKLSAgICAgICAgbV9sb2NrQ291bnQgPSAwOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fbG9ja0Ryb3BEZXB0aC0tOworfQogCi0gICAg
Ly8gSXQgaXMgbmVjZXNzYXJ5IHRvIGRyb3AgZXZlbiAidW5yZWFsIiBsb2NrcywgYmVjYXVzZSBo
YXZpbmcgYSBub24temVybyBsb2NrIGNvdW50Ci0gICAgLy8gd2lsbCBwcmV2ZW50IGEgcmVhbCBs
b2NrIGZyb20gYmVpbmcgdGFrZW4uCitKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tz
KEV4ZWNTdGF0ZSogZXhlYykKKyAgICA6IG1fbG9ja0NvdW50KDApCisgICAgLCBtX2dsb2JhbERh
dGEoJmV4ZWMtPmdsb2JhbERhdGEoKSkKK3sKKyAgICBtX2xvY2tDb3VudCA9IG1fZ2xvYmFsRGF0
YS0+YXBpTG9jaygpLmRyb3BBbGxMb2NrcygpOworfQogCi0gICAgbV9sb2NrQ291bnQgPSBKU0xv
Y2s6OmxvY2tDb3VudCgpOwotICAgIGZvciAoaW50cHRyX3QgaSA9IDA7IGkgPCBtX2xvY2tDb3Vu
dDsgaSsrKQotICAgICAgICBKU0xvY2s6OnVubG9jayhtX2xvY2tCZWhhdmlvcik7CitKU0xvY2s6
OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKKyAg
ICA6IG1fbG9ja0NvdW50KDApCisgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKK3sKKyAg
ICBtX2xvY2tDb3VudCA9IG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmRyb3BBbGxMb2NrcygpOwog
fQogCiBKU0xvY2s6OkRyb3BBbGxMb2Nrczo6fkRyb3BBbGxMb2NrcygpCiB7Ci0gICAgZm9yIChp
bnRwdHJfdCBpID0gMDsgaSA8IG1fbG9ja0NvdW50OyBpKyspCi0gICAgICAgIEpTTG9jazo6bG9j
ayhtX2xvY2tCZWhhdmlvcik7Ci0KLSAgICAtLWxvY2tEcm9wRGVwdGg7CisgICAgbV9nbG9iYWxE
YXRhLT5hcGlMb2NrKCkuZ3JhYkFsbExvY2tzKG1fbG9ja0NvdW50KTsKIH0KIAogI2Vsc2UgLy8g
KE9TKERBUldJTikgfHwgVVNFKFBUSFJFQURTKSkKIAotSlNMb2NrOjpKU0xvY2soRXhlY1N0YXRl
KikKLSAgICA6IG1fbG9ja0JlaGF2aW9yKFNpbGVuY2VBc3NlcnRpb25zT25seSkKK0dsb2JhbEpT
TG9jazo6R2xvYmFsSlNMb2NrKCkKK3sKK30KKworR2xvYmFsSlNMb2NrOjp+R2xvYmFsSlNMb2Nr
KCkKK3sKK30KKworSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhKikKIHsK
IH0KIAotLy8gSWYgdGhyZWFkaW5nIHN1cHBvcnQgaXMgb2ZmLCBzZXQgdGhlIGxvY2sgY291bnQg
dG8gYSBjb25zdGFudCB2YWx1ZSBvZiAxIHNvIHNzZXJ0aW9ucwotLy8gdGhhdCB0aGUgbG9jayBp
cyBoZWxkIGRvbid0IGZhaWwKLWludHB0cl90IEpTTG9jazo6bG9ja0NvdW50KCkKK0pTTG9ja0hv
bGRlcjo6SlNMb2NrSG9sZGVyKEpTR2xvYmFsRGF0YSYpCit7Cit9CisKK0pTTG9ja0hvbGRlcjo6
SlNMb2NrSG9sZGVyKEV4ZWNTdGF0ZSopCit7Cit9CisKK0pTTG9ja0hvbGRlcjo6fkpTTG9ja0hv
bGRlcigpCit7Cit9CisKK0pTTG9jazo6SlNMb2NrKCkKK3sKK30KKworSlNMb2NrOjp+SlNMb2Nr
KCkKIHsKLSAgICByZXR1cm4gMTsKIH0KIAogYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hv
bGRpbmdMb2NrKCkKQEAgLTIzMCwxMSArMjU2LDExIEBAIGJvb2wgSlNMb2NrOjpjdXJyZW50VGhy
ZWFkSXNIb2xkaW5nTG9jaygKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU0xvY2s6Omxv
Y2soSlNMb2NrQmVoYXZpb3IpCit2b2lkIEpTTG9jazo6bG9jaygpCiB7CiB9CiAKLXZvaWQgSlNM
b2NrOjp1bmxvY2soSlNMb2NrQmVoYXZpb3IpCit2b2lkIEpTTG9jazo6dW5sb2NrKCkKIHsKIH0K
IApAQCAtMjQ2LDExICsyNzIsMzMgQEAgdm9pZCBKU0xvY2s6OnVubG9jayhFeGVjU3RhdGUqKQog
ewogfQogCit2b2lkIEpTTG9jazo6bG9jayhKU0dsb2JhbERhdGEmKQoreworfQorCit2b2lkIEpT
TG9jazo6dW5sb2NrKEpTR2xvYmFsRGF0YSYpCit7Cit9CisKK3Vuc2lnbmVkIEpTTG9jazo6ZHJv
cEFsbExvY2tzKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgSlNMb2NrOjpkcm9w
QWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoKQoreworICAgIHJldHVybiAwOworfQorCit2b2lkIEpT
TG9jazo6Z3JhYkFsbExvY2tzKHVuc2lnbmVkKQoreworfQorCiBKU0xvY2s6OkRyb3BBbGxMb2Nr
czo6RHJvcEFsbExvY2tzKEV4ZWNTdGF0ZSopCiB7CiB9CiAKLUpTTG9jazo6RHJvcEFsbExvY2tz
OjpEcm9wQWxsTG9ja3MoSlNMb2NrQmVoYXZpb3IpCitKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJv
cEFsbExvY2tzKEpTR2xvYmFsRGF0YSopCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTG9jay5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsOSBAQAog
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RDU3BpbkxvY2suaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zMCw4
ICszMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8vIGltcG9ydGFudCB0byBsb2NrIGJlZm9y
ZSBkb2luZyBhbnl0aGluZyB0aGF0IGFsbG9jYXRlcyBhCiAgICAgLy8gSmF2YVNjcmlwdCBkYXRh
IHN0cnVjdHVyZSBvciB0aGF0IGludGVyYWN0cyB3aXRoIHNoYXJlZCBzdGF0ZQogICAgIC8vIHN1
Y2ggYXMgdGhlIHByb3RlY3QgY291bnQgaGFzaCB0YWJsZS4gVGhlIHNpbXBsZXN0IHdheSB0byBs
b2NrCi0gICAgLy8gaXMgdG8gY3JlYXRlIGEgbG9jYWwgSlNMb2NrIG9iamVjdCBpbiB0aGUgc2Nv
cGUgd2hlcmUgdGhlIGxvY2sgCi0gICAgLy8gbXVzdCBiZSBoZWxkLiBUaGUgbG9jayBpcyByZWN1
cnNpdmUgc28gbmVzdGluZyBpcyBvay4gVGhlIEpTTG9jayAKKyAgICAvLyBpcyB0byBjcmVhdGUg
YSBsb2NhbCBKU0xvY2tIb2xkZXIgb2JqZWN0IGluIHRoZSBzY29wZSB3aGVyZSB0aGUgbG9jayAK
KyAgICAvLyBtdXN0IGJlIGhlbGQgYW5kIHBhc3MgaXQgdGhlIGNvbnRleHQgdGhhdCByZXF1aXJl
cyBwcm90ZWN0aW9uLiAKKyAgICAvLyBUaGUgbG9jayBpcyByZWN1cnNpdmUgc28gbmVzdGluZyBp
cyBvay4gVGhlIEpTTG9jayAKICAgICAvLyBvYmplY3QgYWxzbyBhY3RzIGFzIGEgY29udmVuaWVu
Y2Ugc2hvcnQtaGFuZCBmb3IgcnVubmluZyBpbXBvcnRhbnQKICAgICAvLyBpbml0aWFsaXphdGlv
biByb3V0aW5lcy4KIApAQCAtNDQsNjIgKzQ4LDY1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8v
IERyb3BBbGxMb2NrcyBvYmplY3QgdGFrZXMgY2FyZSB0byByZWxlYXNlIHRoZSBKU0xvY2sgb25s
eSBpZiB5b3VyCiAgICAgLy8gdGhyZWFkIGFjcXVpcmVkIGl0IHRvIGJlZ2luIHdpdGguCiAKLSAg
ICAvLyBGb3IgY29udGV4dHMgb3RoZXIgdGhhbiB0aGUgc2luZ2xlIHNoYXJlZCBvbmUsIGltcGxp
Y2l0IGxvY2tpbmcgaXMgbm90IGRvbmUsCi0gICAgLy8gYnV0IHdlIHN0aWxsIG5lZWQgdG8gcGVy
Zm9ybSBhbGwgdGhlIGNvdW50aW5nIGluIG9yZGVyIHRvIGtlZXAgZGVidWcKLSAgICAvLyBhc3Nl
cnRpb25zIHdvcmtpbmcsIHNvIHRoYXQgY2xpZW50cyB0aGF0IHVzZSB0aGUgc2hhcmVkIGNvbnRl
eHQgZG9uJ3QgYnJlYWsuCi0KICAgICBjbGFzcyBFeGVjU3RhdGU7CiAgICAgY2xhc3MgSlNHbG9i
YWxEYXRhOwogCi0gICAgZW51bSBKU0xvY2tCZWhhdmlvciB7IFNpbGVuY2VBc3NlcnRpb25zT25s
eSwgTG9ja0ZvclJlYWwgfTsKKyAgICAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gcHJvdGVjdCB0
aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGxlZ2FjeSBzaW5nbGUgCisgICAgLy8gc2hhcmVkIEpT
R2xvYmFsRGF0YS4KKyAgICBjbGFzcyBHbG9iYWxKU0xvY2sgeworICAgICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShHbG9iYWxKU0xvY2spOworICAgIHB1YmxpYzoKKyAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgR2xvYmFsSlNMb2NrKCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5HbG9i
YWxKU0xvY2soKTsKKyAgICB9OworCisgICAgY2xhc3MgSlNMb2NrSG9sZGVyIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTTG9ja0hvbGRlcihKU0dsb2JhbERhdGEq
KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNMb2NrSG9sZGVyKEpTR2xvYmFsRGF0YSYp
OworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0xvY2tIb2xkZXIoRXhlY1N0YXRlKik7CisK
KyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9ja0hvbGRlcigpOworICAgIHByaXZhdGU6
CisgICAgICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IG1fZ2xvYmFsRGF0YTsKKyAgICB9OwogCiAg
ICAgY2xhc3MgSlNMb2NrIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSlNMb2NrKTsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTTG9jayhFeGVjU3RhdGUq
KTsKLSAgICAgICAgSlNMb2NrKEpTR2xvYmFsRGF0YSopOworICAgICAgICBKU0xvY2soKTsKKyAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9jaygpOworCisgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgbG9jaygpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9j
aygpOwogCi0gICAgICAgIEpTTG9jayhKU0xvY2tCZWhhdmlvciBsb2NrQmVoYXZpb3IpCi0gICAg
ICAgICAgICA6IG1fbG9ja0JlaGF2aW9yKGxvY2tCZWhhdmlvcikKLSAgICAgICAgewotI2lmZGVm
IE5ERUJVRwotICAgICAgICAgICAgLy8gTG9ja2luZyAibm90IGZvciByZWFsIiBpcyBhIGRlYnVn
LW9ubHkgZmVhdHVyZS4KLSAgICAgICAgICAgIGlmIChsb2NrQmVoYXZpb3IgPT0gU2lsZW5jZUFz
c2VydGlvbnNPbmx5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgICAgICAg
ICAgbG9jayhsb2NrQmVoYXZpb3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgfkpTTG9jaygpCi0g
ICAgICAgIHsgCi0jaWZkZWYgTkRFQlVHCi0gICAgICAgICAgICAvLyBMb2NraW5nICJub3QgZm9y
IHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0dXJlLgotICAgICAgICAgICAgaWYgKG1fbG9ja0Jl
aGF2aW9yID09IFNpbGVuY2VBc3NlcnRpb25zT25seSkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0jZW5kaWYKLSAgICAgICAgICAgIHVubG9jayhtX2xvY2tCZWhhdmlvcik7IAotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBsb2NrKEpT
TG9ja0JlaGF2aW9yKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdW5s
b2NrKEpTTG9ja0JlaGF2aW9yKTsKICAgICAgICAgc3RhdGljIHZvaWQgbG9jayhFeGVjU3RhdGUq
KTsKICAgICAgICAgc3RhdGljIHZvaWQgdW5sb2NrKEV4ZWNTdGF0ZSopOworICAgICAgICBzdGF0
aWMgdm9pZCBsb2NrKEpTR2xvYmFsRGF0YSYpOworICAgICAgICBzdGF0aWMgdm9pZCB1bmxvY2so
SlNHbG9iYWxEYXRhJik7CiAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGludHB0
cl90IGxvY2tDb3VudCgpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBj
dXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBi
b29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7CiAKLSAgICAgICAgSlNMb2NrQmVoYXZp
b3IgbV9sb2NrQmVoYXZpb3I7CisgICAgICAgIHVuc2lnbmVkIGRyb3BBbGxMb2NrcygpOworICAg
ICAgICB1bnNpZ25lZCBkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoKTsKKyAgICAgICAgdm9p
ZCBncmFiQWxsTG9ja3ModW5zaWduZWQgbG9ja0NvdW50KTsKKworICAgICAgICBTcGluTG9jayBt
X3NwaW5Mb2NrOworICAgICAgICBNdXRleCBtX2xvY2s7CisgICAgICAgIFRocmVhZElkZW50aWZp
ZXIgbV9vd25lclRocmVhZDsKKyAgICAgICAgaW50cHRyX3QgbV9sb2NrQ291bnQ7CisgICAgICAg
IHVuc2lnbmVkIG1fbG9ja0Ryb3BEZXB0aDsKIAogICAgICAgICBjbGFzcyBEcm9wQWxsTG9ja3Mg
ewogICAgICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRHJvcEFsbExvY2tzKTsKICAgICAg
ICAgcHVibGljOgogICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRHJvcEFsbExvY2tzKEV4
ZWNTdGF0ZSogZXhlYyk7Ci0gICAgICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBEcm9wQWxsTG9j
a3MoSlNMb2NrQmVoYXZpb3IpOworICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgRHJvcEFs
bExvY2tzKEpTR2xvYmFsRGF0YSopOwogICAgICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkRy
b3BBbGxMb2NrcygpOwogICAgICAgICAgICAgCiAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAg
ICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKLSAgICAgICAgICAgIEpTTG9ja0JlaGF2aW9yIG1fbG9j
a0JlaGF2aW9yOworICAgICAgICAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gbV9nbG9iYWxEYXRh
OwogICAgICAgICB9OwogICAgIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtHQ01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dlYWtHQ01hcC5oCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9XZWFrR0NNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUsOSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBIYW5kbGVUeXBlczxNYXBwZWRUeXBlPjo6Z2V0RnJvbVNs
b3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJmltcGwtPmpzVmFsdWUoKSkpOwogICAgIH0KIAotICAg
IHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIGNvbnN0IEtleVR5cGUmIGtleSwgRXh0ZXJuYWxUeXBl
IHZhbHVlKQorICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgS2V5
VHlwZSYga2V5LCBFeHRlcm5hbFR5cGUgdmFsdWUpCiAgICAgeworICAgICAgICBBU1NFUlRfVU5V
U0VEKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuYXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdMb2NrKCkpOwogICAgICAgICB0eXBlbmFtZSBNYXBUeXBlOjpBZGRSZXN1bHQgcmVzdWx0ID0g
bV9tYXAuYWRkKGtleSwgMCk7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCiAgICAg
ICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NyBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhu
ZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQg
YmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIEN1cnJlbnQgcmVncmVzc2lvbiB0ZXN0cyBhcmUgc3Vm
ZmljaWVudC4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRv
IGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRo
ZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3
aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uIEFsc28gYWRkZWQgYSBjb3VwbGUg
SlNMb2NrcyB0byBwbGFjZXMgdGhhdCBkaWRuJ3QgYWxyZWFkeSAKKyAgICAgICAgaGF2ZSBpdCB0
aGF0IG5lZWRlZCBpdC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJv
bGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdDQ29udHJvbGxl
cjo6Z2FyYmFnZUNvbGxlY3ROb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0NDb250cm9sbGVyOjpk
aXNjYXJkQWxsQ29tcGlsZWRDb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTUUxTdGF0
ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21Wb2lk
Q2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVhQ
YXRoTlNSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVhQYXRoTlNSZXNv
bHZlcjo6bG9va3VwTmFtZXNwYWNlVVJJKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Vycm9y
SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZl
bnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6bm9kZUFzU2NyaXB0VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3RlZE9iamVjdCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVJbmplY3RlZFNjcmlwdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNhbkFjY2Vzc0luc3Bl
Y3RlZFdpbmRvdyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFsaXplSlNG
dW5jdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg6
CisgICAgICAgIChXZWJDb3JlOjpKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJhY2tDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNNdXRhdGlvbkNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrOjpoYW5kbGVFdmVudCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VT
Y3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVs
ZWRBY3Rpb246OmV4ZWN1dGVGdW5jdGlvbkluQ29udGV4dCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENh
Y2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2YWx1
YXRlSW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhcldp
bmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3Jp
cHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2FjaGVhYmxlQmluZGluZ1Jv
b3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6YmluZGluZ1Jv
b3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2Ny
aXB0TlBPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6anNPYmpl
Y3RGb3JQbHVnaW5FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OmNsZWFyU2NyaXB0T2JqZWN0cyk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1Nj
cmlwdE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1c2Up
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6
OmV2ZW50TGlzdGVuZXJIYW5kbGVyTG9jYXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nj
cmlwdEZ1bmN0aW9uQ2FsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsQXJndW1l
bnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5j
dGlvbkNhbGw6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpj
b25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbGJhY2s6OmNhbGwpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRHbG9iYWxPYmplY3Q6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxP
YmplY3Q6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6OnJlbW92
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0VmFsdWU6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRW
YWx1ZTo6dG9JbnNwZWN0b3JWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvV29ya2VyU2Ny
aXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9s
bGVyOjp+V29ya2VyU2NyaXB0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJT
Y3JpcHRDb250cm9sbGVyOjppbml0U2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNj
cmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlw
dENvbnRyb2xsZXI6OmRpc2FibGVFdmFsKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL1dlYlNj
cmlwdE9iamVjdC5tbToKKyAgICAgICAgKF9kaWRFeGVjdXRlKToKKyAgICAgICAgKC1bV2ViU2Ny
aXB0T2JqZWN0IF9zZXRJbXA6b3JpZ2luUm9vdE9iamVjdDpyb290T2JqZWN0Ol0pOgorICAgICAg
ICAoLVtXZWJTY3JpcHRPYmplY3QgX3NldE9yaWdpblJvb3RPYmplY3Q6YW5kUm9vdE9iamVjdDpd
KToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGRlYWxsb2NdKToKKyAgICAgICAgKC1bV2Vi
U2NyaXB0T2JqZWN0IGZpbmFsaXplXSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBjYWxs
V2ViU2NyaXB0TWV0aG9kOndpdGhBcmd1bWVudHM6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9i
amVjdCBldmFsdWF0ZVdlYlNjcmlwdDpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHNl
dFZhbHVlOmZvcktleTpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHZhbHVlRm9yS2V5
Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgcmVtb3ZlV2ViU2NyaXB0S2V5Ol0pOgor
ICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgaGFzV2ViU2NyaXB0S2V5Ol0pOgorICAgICAgICAo
LVtXZWJTY3JpcHRPYmplY3Qgc3RyaW5nUmVwcmVzZW50YXRpb25dKToKKyAgICAgICAgKC1bV2Vi
U2NyaXB0T2JqZWN0IHdlYlNjcmlwdFZhbHVlQXRJbmRleDpdKToKKyAgICAgICAgKC1bV2ViU2Ny
aXB0T2JqZWN0IHNldFdlYlNjcmlwdFZhbHVlQXRJbmRleDp2YWx1ZTpdKToKKyAgICAgICAgKCtb
V2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpvcmlnaW5Sb290T2JqZWN0
OnJvb3RPYmplY3Q6XSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG06CisgICAgICAgIChHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24pOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoTm9QYXJhbSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0pOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlBhcmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhTdHJpbmdMaXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhCb29sZWFu
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1JlcXVpcmVzVGhp
c1RvUGFzcyk6CisgICAgICAgICogYnJpZGdlL05QX2pzb2JqZWN0LmNwcDoKKyAgICAgICAgKF9O
UE5fSW52b2tlRGVmYXVsdCk6CisgICAgICAgIChfTlBOX0ludm9rZSk6CisgICAgICAgIChfTlBO
X0V2YWx1YXRlKToKKyAgICAgICAgKF9OUE5fR2V0UHJvcGVydHkpOgorICAgICAgICAoX05QTl9T
ZXRQcm9wZXJ0eSk6CisgICAgICAgIChfTlBOX1JlbW92ZVByb3BlcnR5KToKKyAgICAgICAgKF9O
UE5fSGFzUHJvcGVydHkpOgorICAgICAgICAoX05QTl9IYXNNZXRob2QpOgorICAgICAgICAoX05Q
Tl9FbnVtZXJhdGUpOgorICAgICAgICAoX05QTl9Db25zdHJ1Y3QpOgorICAgICAgICAqIGJyaWRn
ZS9jL2NfY2xhc3MuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0NsYXNzOjp+Q0NsYXNz
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNDbGFzczo6bWV0aG9kc05hbWVkKToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OkNDbGFzczo6ZmllbGROYW1lZCk6CisgICAgICAgICogYnJpZGdl
L2MvY19pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Om1v
dmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpD
SW5zdGFuY2U6Omludm9rZU1ldGhvZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFu
Y2U6Omludm9rZURlZmF1bHRNZXRob2QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3Rh
bmNlOjppbnZva2VDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNl
OjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3J1bnRpbWUuY3BwOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0ZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZSk6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpDRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZSk6CisgICAgICAg
ICogYnJpZGdlL2MvY191dGlsaXR5LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZl
cnRWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnROUFZh
cmlhbnRUb1ZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbToKKyAg
ICAgICAgKEphdmFKU09iamVjdDo6Y2FsbCk6CisgICAgICAgIChKYXZhSlNPYmplY3Q6OmV2YWwp
OgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpnZXRNZW1iZXIpOgorICAgICAgICAoSmF2YUpTT2Jq
ZWN0OjpzZXRNZW1iZXIpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpyZW1vdmVNZW1iZXIpOgor
ICAgICAgICAoSmF2YUpTT2JqZWN0OjpnZXRTbG90KToKKyAgICAgICAgKEphdmFKU09iamVjdDo6
c2V0U2xvdCk6CisgICAgICAgIChKYXZhSlNPYmplY3Q6OnRvU3RyaW5nKToKKyAgICAgICAgKEph
dmFKU09iamVjdDo6Y29udmVydFZhbHVlVG9KT2JqZWN0KToKKyAgICAgICAgKEphdmFKU09iamVj
dDo6Y29udmVydEpPYmplY3RUb1ZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9vYmpj
Lm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6ZGlzcGF0Y2hKTklDYWxsKToKKyAgICAgICAg
KiBicmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpjb252ZXJ0VmFsdWVUb0pWYWx1ZSk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2Mv
SmF2YUNsYXNzSlNDLmNwcDoKKyAgICAgICAgKEphdmFDbGFzczo6SmF2YUNsYXNzKToKKyAgICAg
ICAgKEphdmFDbGFzczo6fkphdmFDbGFzcyk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2
YUluc3RhbmNlSlNDLmNwcDoKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6c3RyaW5nVmFsdWUpOgor
ICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3BwOgorICAgICAgICAoYXBw
ZW5kQ2xhc3NOYW1lKToKKyAgICAgICAgKEphdmFNZXRob2Q6OnNpZ25hdHVyZSk6CisgICAgICAg
ICogYnJpZGdlL2puaS9qc2MvSmF2YVN0cmluZ0pTQy5oOgorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6SmF2YVN0cmluZzo6SmF2YVN0cmluZyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZh
U3RyaW5nOjp+SmF2YVN0cmluZyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhU3RyaW5n
Ojp1dGY4KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFTdHJpbmc6OmluaXQpOgorICAg
ICAgICAqIGJyaWRnZS9qc2MvQnJpZGdlSlNDLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
Okluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
Okluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpj
X2luc3RhbmNlLm1tOgorICAgICAgICAoT2JqY0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9u
VG9FeGVjU3RhdGUpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjppbnZva2VPYmpjTWV0aG9kKToK
KyAgICAgICAgKE9iamNJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhvZCk6CisgICAgICAgIChP
YmpjSW5zdGFuY2U6OnNldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCk6CisgICAgICAgIChPYmpjSW5z
dGFuY2U6OmdldFZhbHVlT2ZVbmRlZmluZWRGaWVsZCk6CisgICAgICAgICogYnJpZGdlL29iamMv
b2JqY19ydW50aW1lLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2JqY0ZpZWxkOjp2YWx1
ZUZyb21JbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjRmllbGQ6OnNldFZh
bHVlVG9JbnN0YW5jZSk6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1tOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9PYmpjVmFsdWUpOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE5TU3RyaW5nVG9TdHJpbmcpOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6Y29udmVydE9iamNWYWx1ZVRvVmFsdWUpOgorICAgICAgICAqIGJyaWRnZS9x
dC9xdF9pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjp+
UXRJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpnZXRRdElu
c3RhbmNlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6Om5ld1J1bnRpbWVP
YmplY3QpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcDoKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwSW5zdGFuY2U6OmNyZWF0ZVBpeG1hcFJ1bnRpbWVP
YmplY3QpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9ydW50aW1lLmNwcDoKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6Y29udmVydFFWYXJpYW50VG9WYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpR
dFJ1bnRpbWVNZXRhTWV0aG9kOjpjYWxsKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVu
dGltZUNvbm5lY3Rpb25NZXRob2Q6OmNhbGwpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9ydW50
aW1lX3F0NC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb1FWYXJp
YW50KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRRVmFyaWFudFRvVmFsdWUpOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0YU1ldGhvZDo6Y2FsbCk6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpjYWxsKToKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogaHRtbC9IVE1M
SW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlTG9hZGVyOjpub3Rp
ZnlGaW5pc2hlZCk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGVyZm9ybVJlcXVlc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6bnBPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKToKKyAgICAgICAg
KiBwbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpn
ZXRXaW5kb3dJbmZvKToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAg
ICogcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5k
bGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6
CisgICAgICAgICogcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKiBwbHVnaW5zL3F0L1BsdWdp
blZpZXdRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAg
KiBwbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpo
YW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRs
ZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dS
ZWN0KToKKyAgICAgICAgKiB0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHA6CisgICAg
ICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdCk6CisgICAgICAg
IChXZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KToKKyAgICAgICAgKiB4
bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6
OmRyb3BQcm90ZWN0aW9uKToKKwogMjAxMi0wNi0yMSAgVGFpanUgVHN1aWtpICA8dHppa0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogVW5pZnkgRmlsZVN5c3RlbSBjYWxs
YmFja3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0YXRpYyB2b2lkIGNvbGxlY3Qodm9pZCopCiB7Ci0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRv
dzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKS0+aGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwogfQogCkBAIC02Myw3ICs2Myw3IEBA
IHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdFNvb24oKQogICAgIC8vIGRvd24gaW50
byBXVEYgc28gdGhhdCBtb3JlIHBsYXRmb3JtcyBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgaXQsIHdl
IHdpbGwgYmUgCiAgICAgLy8gYWJsZSB0byB1c2UgcmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgg
b24gbW9yZSBwbGF0Zm9ybXMuCiAjaWYgVVNFKENGKQotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKICAgICBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkt
PmhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKTsKICNlbHNlCiAgICAgaWYgKCFtX0dD
VGltZXIuaXNBY3RpdmUoKSkKQEAgLTgwLDcgKzgwLDcgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6Omdj
VGltZXJGaXJlZChUaW1lcjxHQwogCiB2b2lkIEdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RO
b3coKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBp
ZiAoIUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5pc0J1c3koKSkKICAg
ICAgICAgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmNvbGxlY3RBbGxH
YXJiYWdlKCk7CiB9CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6OnNldEph
dmFTY3JpcHRHYXJiYWdlQwogCiB2b2lkIEdDQ29udHJvbGxlcjo6ZGlzY2FyZEFsbENvbXBpbGVk
Q29kZSgpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5kZWxldGVBbGxDb21waWxl
ZENvZGUoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21T
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCShyZXZp
c2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBA
IGJvb2wgSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGUKIAogICAgIFJlZlB0cjxK
U1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKLSAgICBKU0M6OkpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAxMjA5MjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBKU0N1c3RvbVZvaWRDYWxsYmFjazo6
aGFuZGxlRXZlbnQoKQogCiAgICAgUmVmUHRyPEpTQ3VzdG9tVm9pZENhbGxiYWNrPiBwcm90ZWN0
KHRoaXMpOwogICAgICAgICAKLSAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxEYXRhKCkpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgbV9k
YXRhLT5pbnZva2VDYWxsYmFjayhhcmdzKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jl
c29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBTdHJpbmcgSlNDdXN0
b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hCiB7CiAgICAgQVNTRVJUKG1fY3VzdG9tUmVzb2x2
ZXIpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAg
ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVy
LmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
cnJvckhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgSlNF
cnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEUKIAogICAgIEVycm9yRXZlbnQqIGVycm9y
RXZlbnQgPSBzdGF0aWNfY2FzdDxFcnJvckV2ZW50Kj4oZXZlbnQpOwogCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5nbG9iYWxEYXRhKCkpOwogCiAgICAgSlNPYmplY3QqIGpzRnVuY3Rp
b24gPSB0aGlzLT5qc0Z1bmN0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIGlmICgh
anNGdW5jdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRD
dXN0b20uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBKU1Zh
bHVlIEpTRXZlbnQ6OmNsaXBib2FyZERhdGEoRXhlY1N0YXRlCiAKIEpTVmFsdWUgdG9KUyhFeGVj
U3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV2ZW50KiBldmVu
dCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgaWYgKCFldmVudCkKICAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlz
dGVuZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHZv
aWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHQKICAgICBpZiAoIXNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQgfHwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNKU0V4ZWN1dGlvbkZv
cmJpZGRlbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmdsb2JhbERhdGEoKSk7CiAKICAgICBKU09iamVjdCoganNGdW5jdGlvbiA9IHRoaXMtPmpz
RnVuY3Rpb24oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgaWYgKCFqc0Z1bmN0aW9uKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0
ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Miw3ICs4Miw3IEBAIE5vZGUqIEluamVjdGVkU2NyaXB0SG9zdDo6c2NyaXB0VmFs
dWVBc04KIAogU2NyaXB0VmFsdWUgSW5qZWN0ZWRTY3JpcHRIb3N0Ojpub2RlQXNTY3JpcHRWYWx1
ZShTY3JpcHRTdGF0ZSogc3RhdGUsIE5vZGUqIG5vZGUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzdGF0ZSk7CiAgICAg
cmV0dXJuIFNjcmlwdFZhbHVlKHN0YXRlLT5nbG9iYWxEYXRhKCksIHRvSlMoc3RhdGUsIGRlcHJl
Y2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoc3RhdGUpLCBub2RlKSk7CiB9CiAKQEAgLTk1
LDcgKzk1LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdGVkTwogICAg
IGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgU2NyaXB0VmFsdWUgc2NyaXB0VmFsdWUgPSBvYmplY3QtPmdldChleGVjKTsKICAg
ICBpZiAoc2NyaXB0VmFsdWUuaGFzTm9WYWx1ZSgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lu
amVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcmlwdE9iamVjdCBJ
bmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUluamVjdGVkU2NyaXB0KGNvbnN0IFN0cmluZyYg
c291cmNlLCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGludCBpZCkKIHsKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlw
dFN0YXRlKTsKIAogICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IG1ha2VTb3VyY2Uoc3RyaW5n
VG9VU3RyaW5nKHNvdXJjZSkpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKTsKQEAgLTgxLDcgKzgxLDcgQEAgU2NyaXB0T2JqZWN0IEluamVjdGVkU2NyaXB0TWFu
YWdlcjo6Y3JlYQogCiBib29sIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y2FuQWNjZXNzSW5zcGVj
dGVkV2luZG93KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRl
KTsKICAgICBKU0RPTVdpbmRvdyogaW5zcGVjdGVkV2luZG93ID0gdG9KU0RPTVdpbmRvdyhzY3Jp
cHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBpZiAoIWluc3BlY3RlZFdpbmRv
dykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50TGlzdGVu
ZXI6OmluaXRpYWxpegogICAgIGlmIChtX29yaWdpbmFsTm9kZSkgewogICAgICAgICBpZiAoIXdy
YXBwZXIoKSkgewogICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgJ25vZGUnIGhhcyBhIEphdmFT
Y3JpcHQgd3JhcHBlciB0byBtYXJrIHRoZSBldmVudCBsaXN0ZW5lciB3ZSdyZSBjcmVhdGluZy4K
LSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgcGFzcyB0aGUgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUKICAgICAg
ICAgICAgIHNldFdyYXBwZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc09iamVjdCh0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgbV9vcmlnaW5hbE5vZGUpKSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJl
YWRFeGVjU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlND
OjpTY29wZUNoYWluTm9kZSogY2hhaW4sIGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlLCBK
U0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkpTVmFsdWUqIGV4Y2VwdGlvbikKICAgICB7CiAg
ICAgICAgIEpTTWFpblRocmVhZEV4ZWNTdGF0ZSBjdXJyZW50U3RhdGUoZXhlYyk7CisgICAgICAg
IEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHJldHVybiBKU0M6OmV2YWx1
YXRlKGV4ZWMsIGNoYWluLCBzb3VyY2UsIHRoaXNWYWx1ZSwgZXhjZXB0aW9uKTsKICAgICB9Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJhY2tDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRp
b25DYWxsYmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkpTTXV0YXRpb25DYWxsYmFjay5oIgogCisj
aW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiSlNNdXRhdGlvblJlY29yZC5o
IgogI2luY2x1ZGUgIkpTV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTUwLDcgKzUxLDcgQEAgYm9vbCBKU011dGF0aW9uQ2Fs
bGJhY2s6OmhhbmRsZUV2ZW50KE11dAogCiAgICAgUmVmUHRyPEpTTXV0YXRpb25DYWxsYmFjaz4g
cHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZp
bHRlckNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNyArNDAsNyBAQCBKU05vZGVGaWx0ZXJDb25kaXRpb246OkpTTm9kZUZpbHRl
ckNvbmRpCiAKIHNob3J0IEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgTm9kZSogZmlsdGVyTm9kZSkgY29uc3QKIHsKLSAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
CiAgICAgaWYgKCFtX2ZpbHRlcikKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9B
Q0NFUFQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlcXVlc3RBbmltYXRp
b25GcmFtZUNhbGxiYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrQ3VzdG9tLmNwcAkocmV2
aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZXF1ZXN0QW5p
bWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAgYm9vbCBKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrOjpoYQogCiAgICAgUmVm
UHRyPEpTUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAKICAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVyKHRpbWUpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3JpcHRDYWxsRnJh
bWUuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
YXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKIAogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaD4KICNpbmNsdWRl
IDxydW50aW1lL0NvbXBsZXRpb24uaD4KQEAgLTEwNiw3ICsxMDcsNyBAQCBKU1ZhbHVlIEphdmFT
Y3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKGNvCiAgICAgaWYgKCFtX2lzVmFsaWQpCiAgICAgICAg
IHJldHVybiBqc051bGwoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAgICAgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUuZXZhbHVhdGUoc2NyaXB0
LCBleGNlcHRpb24pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9QYWdl
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6
cmVtb3ZlTGlzdGVuCiAKIHZvaWQgUGFnZVNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxK
U0Z1bmN0aW9ucyhUaW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4qKQogewotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAvLyBJZiBKYXZhU2NyaXB0IHN0YWNrIGlz
IG5vdCBlbXB0eSBwb3N0cG9uZSByZWNvbXBpbGF0aW9uLgogICAgIGlmIChKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCktPmR5bmFtaWNHbG9iYWxPYmplY3QpCiAgICAgICAgIHJlY29t
cGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NCw3ICs5NCw3IEBAIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKFNjcmlwdEV4ZWMK
IHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlRnVuY3Rpb25JbkNvbnRleHQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1fZnVuY3Rpb24pOwotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29udGV4
dC0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBl
IGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobV9mdW5jdGlvbi5nZXQoKSwgY2FsbERhdGEpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFt
ZURhdGEuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpTY3JpcHRD
YWNoZWRGcmFtZURhdGEoRnJhbWUqIGZyYW1lKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBTY3JpcHRDb250cm9sbGVyKiBzY3JpcHRDb250
cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOwogICAgIFNjcmlwdENvbnRyb2xsZXI6OlNoZWxsTWFw
JiB3aW5kb3dTaGVsbHMgPSBzY3JpcHRDb250cm9sbGVyLT5tX3dpbmRvd1NoZWxsczsKQEAgLTY3
LDcgKzY3LDcgQEAgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjp+U2NyaXB0Q2FjaGVkRnJhbQogCiB2
b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZShGcmFtZSogZnJhbWUpCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIFNjcmlwdENv
bnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXIgPSBmcmFtZS0+c2NyaXB0KCk7CiAgICAgU2NyaXB0
Q29udHJvbGxlcjo6U2hlbGxNYXAmIHdpbmRvd1NoZWxscyA9IHNjcmlwdENvbnRyb2xsZXItPm1f
d2luZG93U2hlbGxzOwpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0
YTo6Y2xlYXIoKQogICAgIGlmIChtX3dpbmRvd3MuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIG1f
d2luZG93cy5jbGVhcigpOwogICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0U29vbigp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAg
U2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbgogICAgIGNvbnN0IFN0cmlu
Zyogc2F2ZWRTb3VyY2VVUkwgPSBtX3NvdXJjZVVSTDsKICAgICBtX3NvdXJjZVVSTCA9ICZzb3Vy
Y2VVUkw7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgUmVmUHRyPEZyYW1lPiBwcm90ZWN0ID0gbV9m
cmFtZTsKIApAQCAtMTc3LDcgKzE3Nyw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJX
aW5kb3dTaGVsbCgKICAgICBpZiAobV93aW5kb3dTaGVsbHMuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
CiAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fd2luZG93U2hlbGxzLmJlZ2lu
KCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAgICBKU0RP
TVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnNlY29uZC5nZXQoKTsKQEAgLTIwOSw3
ICsyMDksNyBAQCBKU0RPTVdpbmRvd1NoZWxsKiBTY3JpcHRDb250cm9sbGVyOjppbml0CiB7CiAg
ICAgQVNTRVJUKCFtX3dpbmRvd1NoZWxscy5jb250YWlucyh3b3JsZCkpOwogCi0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh3b3Js
ZC0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEpTRE9NV2luZG93U2hlbGwqIHdpbmRvd1NoZWxsID0g
Y3JlYXRlV2luZG93U2hlbGwod29ybGQpOwogCkBAIC0yODQsOSArMjg0LDEwIEBAIHZvaWQgU2Ny
aXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQoKQogICAgIGlmICghbV9mcmFtZS0+ZG9jdW1l
bnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKLSAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBpdGVyID0gbV93aW5kb3dTaGVs
bHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQoKTsgKytpdGVyKQorICAgIGZv
ciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1NoZWxscy5iZWdpbigpOyBpdGVy
ICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2soaXRlci0+Zmlyc3QtPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIGl0ZXItPnNlY29uZC0+
d2luZG93KCktPnVwZGF0ZURvY3VtZW50KCk7CisgICAgfQogfQogCiB2b2lkIFNjcmlwdENvbnRy
b2xsZXI6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCkKQEAgLTMwMCw3ICszMDEsNyBAQCBCaW5kaW5n
czo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6CiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgaWYgKCFtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KSB7Ci0gICAgICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBtX2NhY2hlYWJs
ZUJpbmRpbmdSb290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9i
YWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9jYWNoZWFibGVC
aW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKQEAgLTMxMiw3ICszMTMsNyBAQCBCaW5kaW5nczo6Um9v
dE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYg
KCFtX2JpbmRpbmdSb290T2JqZWN0KSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBtX2JpbmRpbmdSb290T2JqZWN0ID0gQmlu
ZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkp
OwogICAgIH0KICAgICByZXR1cm4gbV9iaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKQEAgLTM0OSw5
ICszNTAsOSBAQCBOUE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0CiAgICAg
ICAgIGlmIChjYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpIHsKICAg
ICAgICAgICAgIC8vIEphdmFTY3JpcHQgaXMgZW5hYmxlZCwgc28gdGhlcmUgaXMgYSBKYXZhU2Ny
aXB0IHdpbmRvdyBvYmplY3QuCiAgICAgICAgICAgICAvLyBSZXR1cm4gYW4gTlBPYmplY3QgYm91
bmQgdG8gdGhlIHdpbmRvdyBvYmplY3QuCi0gICAgICAgICAgICBKU0M6OkpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgICAgICAgICBKU09iamVjdCogd2luID0gd2luZG93
U2hlbGwocGx1Z2luV29ybGQoKSktPndpbmRvdygpOworICAgICAgICAgICAgSlNET01XaW5kb3cq
IHdpbiA9IHdpbmRvd1NoZWxsKHBsdWdpbldvcmxkKCkpLT53aW5kb3coKTsKICAgICAgICAgICAg
IEFTU0VSVCh3aW4pOworICAgICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh3aW4tPmds
b2JhbEV4ZWMoKSk7CiAgICAgICAgICAgICBCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdCA9IGJp
bmRpbmdSb290T2JqZWN0KCk7CiAgICAgICAgICAgICBtX3dpbmRvd1NjcmlwdE5QT2JqZWN0ID0g
X05QTl9DcmVhdGVTY3JpcHRPYmplY3QoMCwgd2luLCByb290KTsKICAgICAgICAgfSBlbHNlIHsK
QEAgLTM4Myw4ICszODQsOCBAQCBKU09iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6anNPYmplY3RG
b3JQCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ3JlYXRlIGEgSlNPYmplY3QgYm91bmQg
dG8gdGhpcyBlbGVtZW50Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
ICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqID0gZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iai0+Z2xvYmFsRXhlYygpKTsKICAgICAv
LyBGSVhNRTogaXMgbm9ybWFsIG9rYXk/IC0gdXNlZCBmb3IgTlAgcGx1Z2lucz8KICAgICBKU1Zh
bHVlIGpzRWxlbWVudFZhbHVlID0gdG9KUyhnbG9iYWxPYmotPmdsb2JhbEV4ZWMoKSwgZ2xvYmFs
T2JqLCBwbHVnaW4pOwogICAgIGlmICghanNFbGVtZW50VmFsdWUgfHwgIWpzRWxlbWVudFZhbHVl
LmlzT2JqZWN0KCkpCkBAIC00MTgsNyArNDE5LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpj
bGVhbnVwU2NyaXB0T2JqZQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2Jq
ZWN0cygpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
IAogICAgIFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcm9vdE9iamVjdHMu
ZW5kKCk7CiAgICAgZm9yIChSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcm9v
dE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgV2ViU2NyaXB0T2JqZWN0KiBTY3Jp
cHRDb250cm9sbGVyOjp3aW5kbwogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbV93aW5k
b3dTY3JpcHRPYmplY3QpIHsKLSAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5k
b3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIEpTQzo6QmluZGluZ3M6OlJv
b3RPYmplY3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgpOwogICAgICAgICBtX3dpbmRvd1Nj
cmlwdE9iamVjdCA9IFtXZWJTY3JpcHRPYmplY3Qgc2NyaXB0T2JqZWN0Rm9ySlNPYmplY3Q6dG9S
ZWYod2luZG93U2hlbGwocGx1Z2luV29ybGQoKSkpIG9yaWdpblJvb3RPYmplY3Q6cm9vdCByb290
T2JqZWN0OnJvb3RdOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OmRpc3BhdGNoRGlkUGF1
c2UKICAgICB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRDYWxsRnJhbWUtPmlzVmFsaWQoKSAmJiBn
bG9iYWxPYmplY3QtPmluaGVyaXRzKCZKU0RPTUdsb2JhbE9iamVjdDo6c19pbmZvKSkgewogICAg
ICAgICAgICAgSlNET01HbG9iYWxPYmplY3QqIGRvbUdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soc3Rh
dGUpOwogICAgICAgICAgICAganNDYWxsRnJhbWUgPSB0b0pTKHN0YXRlLCBkb21HbG9iYWxPYmpl
Y3QsIG1fY3VycmVudENhbGxGcmFtZS5nZXQoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAganNDYWxsRnJhbWUgPSBqc1VuZGVmaW5lZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDEyMDky
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIFN0cmluZyBldmVudExpc3RlbmVySGFu
ZGxlckJvZHkoRG9jdW1lbnQKICAgICBBU1NFUlQoanNMaXN0ZW5lcik7CiAgICAgaWYgKCFqc0xp
c3RlbmVyKQogICAgICAgICByZXR1cm4gIiI7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhqc0xpc3RlbmVyLT5pc29sYXRlZFdv
cmxkKCktPmdsb2JhbERhdGEoKSk7CiAgICAgSlNDOjpKU09iamVjdCoganNGdW5jdGlvbiA9IGpz
TGlzdGVuZXItPmpzRnVuY3Rpb24oZG9jdW1lbnQpOwogICAgIGlmICghanNGdW5jdGlvbikKICAg
ICAgICAgcmV0dXJuICIiOwpAQCAtMTEyLDcgKzExMiw3IEBAIGJvb2wgZXZlbnRMaXN0ZW5lckhh
bmRsZXJMb2NhdGlvbihEb2N1bWUKICAgICBBU1NFUlQoanNMaXN0ZW5lcik7CiAgICAgaWYgKCFq
c0xpc3RlbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhqc0xpc3RlbmVyLT5pc29s
YXRlZFdvcmxkKCktPmdsb2JhbERhdGEoKSk7CiAgICAgSlNDOjpKU09iamVjdCoganNPYmplY3Qg
PSBqc0xpc3RlbmVyLT5qc0Z1bmN0aW9uKGRvY3VtZW50KTsKICAgICBpZiAoIWpzT2JqZWN0KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRGdW5jdGlvbkNhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDE5ICs1OCwxOSBAQCB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFw
cGVuZEFyCiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQo
Y29uc3QgU3RyaW5nJiBhcmd1bWVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAgICAgbV9hcmd1bWVu
dHMuYXBwZW5kKGpzU3RyaW5nKG1fZXhlYywgYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRD
YWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25zdCBKU0M6OlVTdHJpbmcmIGFy
Z3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNTdHJp
bmcobV9leGVjLCBhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRs
ZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IGNoYXIqIGFyZ3VtZW50KQogewotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVj
KTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNTdHJpbmcobV9leGVjLCBVU3RyaW5nKGFyZ3Vt
ZW50KSkpOwogfQogCkBAIC04MSwzMSArODEsMzEgQEAgdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRI
YW5kbGVyOjphcHBlbmRBcgogCiB2b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVu
ZEFyZ3VtZW50KGxvbmcgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1l
bnRzLmFwcGVuZChqc051bWJlcihhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlwdENhbGxBcmd1
bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGxvbmcgbG9uZyBhcmd1bWVudCkKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KG1fZXhlYyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGFyZ3VtZW50KSk7CiB9
CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBwZW5kQXJndW1lbnQodW5zaWdu
ZWQgaW50IGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBl
bmQoanNOdW1iZXIoYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5k
bGVyOjphcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBsb25nIGFyZ3VtZW50KQogewotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9l
eGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIoYXJndW1lbnQpKTsKIH0KIAog
dm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChpbnQgYXJndW1l
bnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihh
cmd1bWVudCkpOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0RnVu
Y3Rpb25DYWxsOjpjYWxsKGJvbwogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gbV90aGlz
T2JqZWN0LmpzT2JqZWN0KCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAKICAgICBKU1ZhbHVlIGZ1bmN0
aW9uID0gdGhpc09iamVjdC0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcihtX2V4ZWMsIHN0cmluZ1Rv
VVN0cmluZyhtX25hbWUpKSk7CiAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKQEAg
LTE2Myw3ICsxNjMsNyBAQCBTY3JpcHRPYmplY3QgU2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1
CiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBtX3RoaXNPYmplY3QuanNPYmplY3QoKTsK
IAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sobV9leGVjKTsKIAogICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciA9IGFzT2JqZWN0
KHRoaXNPYmplY3QtPmdldChtX2V4ZWMsIElkZW50aWZpZXIobV9leGVjLCBzdHJpbmdUb1VTdHJp
bmcobV9uYW1lKSkpKTsKICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgewpAQCAtMjA1
LDcgKzIwNSw3IEBAIFNjcmlwdFZhbHVlIFNjcmlwdENhbGxiYWNrOjpjYWxsKCkKIAogU2NyaXB0
VmFsdWUgU2NyaXB0Q2FsbGJhY2s6OmNhbGwoYm9vbCYgaGFkRXhjZXB0aW9uKQogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
bV9leGVjKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBl
ID0gZ2V0Q2FsbERhdGEobV9mdW5jdGlvbi5qc1ZhbHVlKCksIGNhbGxEYXRhKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcAkocmV2aXNpb24gMTIw
OTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVFeGNlcHRpb24o
U2NyaXB0U3RhdGUqCiAKIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUq
IHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTY3JpcHRPYmplY3QmIHZhbHVl
KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogICAgIHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVy
KHNjcmlwdFN0YXRlLCBuYW1lKSwgdmFsdWUuanNPYmplY3QoKSk7CiAgICAgcmV0dXJuIGhhbmRs
ZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7CiB9CkBAIC03NSw3ICs3NSw3IEBAIGJvb2wgU2NyaXB0
R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogYm9v
bCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0
IGNoYXIqIG5hbWUsIEluc3BlY3RvckZyb250ZW5kSG9zdCogdmFsdWUpCiB7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3Jp
cHRTdGF0ZSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwog
ICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT5nbG9iYWxEYXRhKCksIElk
ZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNjcmlwdFN0YXRlLCBnbG9iYWxPYmpl
Y3QsIHZhbHVlKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7CkBA
IC04Myw3ICs4Myw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUK
IAogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUs
IGNvbnN0IGNoYXIqIG5hbWUsIEluamVjdGVkU2NyaXB0SG9zdCogdmFsdWUpCiB7Ci0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhz
Y3JpcHRTdGF0ZSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
OwogICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0YXRlLT5nbG9iYWxEYXRhKCks
IElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNjcmlwdFN0YXRlLCBnbG9iYWxP
YmplY3QsIHZhbHVlKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7
CkBAIC05Miw3ICs5Miw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3Rh
dGUKIAogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChTY3JpcHRTdGF0ZSogc2NyaXB0U3Rh
dGUsIGNvbnN0IGNoYXIqIG5hbWUsIFNjcmlwdE9iamVjdCYgdmFsdWUpCiB7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3Jp
cHRTdGF0ZSk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gc2NyaXB0U3RhdGUtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+Z2V0KHNjcmlwdFN0YXRlLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1l
KSk7CiAgICAgaWYgKCFqc1ZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDYsNyAr
MTA2LDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChTY3JpcHRTdGF0ZQogCiBib29s
IFNjcmlwdEdsb2JhbE9iamVjdDo6cmVtb3ZlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29u
c3QgY2hhciogbmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBzY3JpcHRTdGF0ZS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShzY3Jp
cHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihz
Y3JpcHRTdGF0ZSwgbmFtZSkpOwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2NyaXB0U3Rh
dGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNw
cAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIGJvb2wgU2NyaXB0VmFs
dWU6OmdldFN0cmluZyhTY3JpcHRTdGF0ZSoKIHsKICAgICBpZiAoIW1fdmFsdWUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBVU3RyaW5nIHVzdHJpbmc7
CiAgICAgaWYgKCFtX3ZhbHVlLmdldCgpLmdldFN0cmluZyhzY3JpcHRTdGF0ZSwgdXN0cmluZykp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3NSw2ICsxNzUsNyBAQCBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4ganNUb0luCiAKIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IFNjcmlwdFZhbHVlOjp0b0luc3BlY3RvclZhbHVlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkg
Y29uc3QKIHsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBob2xkZXIoc2NyaXB0U3RhdGUpOwogICAg
IHJldHVybiBqc1RvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3RhdGUsIG1fdmFsdWUuZ2V0KCksIElu
c3BlY3RvclZhbHVlOjptYXhEZXB0aCk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlw
dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQs
NyArNjQsNyBAQCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpXb3JrZXJTY3JpcHRDb250CiAKIFdv
cmtlclNjcmlwdENvbnRyb2xsZXI6On5Xb3JrZXJTY3JpcHRDb250cm9sbGVyKCkKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGdsb2JhbERhdGEoKSk7CiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci5jbGVhcigpOwogICAg
IG1fZ2xvYmFsRGF0YS5jbGVhcigpOwogfQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIFdvcmtlclNj
cmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQoCiB7CiAgICAgQVNTRVJUKCFtX3dvcmtlckNvbnRl
eHRXcmFwcGVyKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2sobV9nbG9iYWxEYXRhLmdldCgpKTsKIAogICAgIC8vIEV4cGxp
Y2l0bHkgcHJvdGVjdCB0aGUgZ2xvYmFsIG9iamVjdCdzIHByb3RvdHlwZSBzbyBpdCBpc24ndCBj
b2xsZWN0ZWQKICAgICAvLyB3aGVuIHdlIGFsbG9jYXRlIHRoZSBnbG9iYWwgb2JqZWN0LiAoT25j
ZSB0aGUgZ2xvYmFsIG9iamVjdCBpcyBmdWxseQpAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgV29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICBTY3JpcHRWYWx1ZSBleGNlcHRp
b247CiAgICAgZXZhbHVhdGUoc291cmNlQ29kZSwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2Vw
dGlvbi5qc1ZhbHVlKCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsRGF0YSgpKTsKICAgICAgICAg
cmVwb3J0RXhjZXB0aW9uKG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMoKSwgZXhj
ZXB0aW9uLmpzVmFsdWUoKSk7CiAgICAgfQogfQpAQCAtMTI4LDkgKzEyOCw5IEBAIHZvaWQgV29y
a2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICAgICAgcmV0dXJuOwogCiAgICAg
aW5pdFNjcmlwdElmTmVlZGVkKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmds
b2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIG1fd29ya2Vy
Q29udGV4dFdyYXBwZXItPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwogCkBA
IC0xOTEsNyArMTkxLDcgQEAgYm9vbCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppc0V4ZWN1dGlv
bgogdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpkaXNhYmxlRXZhbCgpCiB7CiAgICAgaW5p
dFNjcmlwdElmTmVlZGVkKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhKCkpOwogCiAgICAgbV93b3JrZXJD
b250ZXh0V3JhcHBlci0+c2V0RXZhbEVuYWJsZWQoZmFsc2UpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDEy
MDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsMTMgKzEyMiwxMiBAQCArIChpZClzY3JpcHRPYmplY3RG
b3JKU09iamVjdDooSlNPYmplY3RSCiAKIHN0YXRpYyB2b2lkIF9kaWRFeGVjdXRlKFdlYlNjcmlw
dE9iamVjdCAqb2JqKQogewotICAgIEFTU0VSVChKU0xvY2s6OmxvY2tDb3VudCgpID4gMCk7Ci0g
ICAgCiAgICAgUm9vdE9iamVjdCogcm9vdCA9IFtvYmogX3Jvb3RPYmplY3RdOwogICAgIGlmICgh
cm9vdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdC0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgp
LmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKICAgICBLSlNEaWRFeGVj
dXRlRnVuY3Rpb25QdHIgZnVuYyA9IEluc3RhbmNlOjpkaWRFeGVjdXRlRnVuY3Rpb24oKTsKICAg
ICBpZiAoZnVuYykKICAgICAgICAgZnVuYyhleGVjLCByb290LT5nbG9iYWxPYmplY3QoKSk7CkBA
IC0xNDgsMTkgKzE0NywyNSBAQCAtICh2b2lkKV9zZXRJbXA6KEpTT2JqZWN0KilpbXAgb3JpZ2lu
Um9vCiAKICAgICBXZWJDb3JlOjphZGRKU1dyYXBwZXIoc2VsZiwgaW1wKTsKIAotICAgIGlmIChf
cHJpdmF0ZS0+cm9vdE9iamVjdCkKKyAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QpIHsKKyAg
ICAgICAgSlNMb2NrSG9sZGVyIGhvbGRlcigmX3ByaXZhdGUtPnJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2NQ
cm90ZWN0KGltcCk7CisgICAgfQogfQogCiAtICh2b2lkKV9zZXRPcmlnaW5Sb290T2JqZWN0OihQ
YXNzUmVmUHRyPFJvb3RPYmplY3Q+KW9yaWdpblJvb3RPYmplY3QgYW5kUm9vdE9iamVjdDooUGFz
c1JlZlB0cjxSb290T2JqZWN0Pilyb290T2JqZWN0CiB7CiAgICAgQVNTRVJUKF9wcml2YXRlLT5p
bXApOwogCi0gICAgaWYgKHJvb3RPYmplY3QpCisgICAgaWYgKHJvb3RPYmplY3QpIHsKKyAgICAg
ICAgSlNMb2NrSG9sZGVyIGhvbGRlcigmcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bERhdGEoKSk7CiAgICAgICAgIHJvb3RPYmplY3QtPmdjUHJvdGVjdChfcHJpdmF0ZS0+aW1wKTsK
KyAgICB9CiAKLSAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RP
YmplY3QtPmlzVmFsaWQoKSkKKyAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZh
dGUtPnJvb3RPYmplY3QtPmlzVmFsaWQoKSkgeworICAgICAgICBKU0xvY2tIb2xkZXIgaG9sZGVy
KCZfcHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAg
ICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5nY1VucHJvdGVjdChfcHJpdmF0ZS0+aW1wKTsK
KyAgICB9CiAKICAgICBpZiAoX3ByaXZhdGUtPnJvb3RPYmplY3QpCiAgICAgICAgIF9wcml2YXRl
LT5yb290T2JqZWN0LT5kZXJlZigpOwpAQCAtMjMyLDggKzIzNywxMCBAQCAtICh2b2lkKWRlYWxs
b2MKICAgICBpZiAoX3ByaXZhdGUtPmltcCkKICAgICAgICAgV2ViQ29yZTo6cmVtb3ZlSlNXcmFw
cGVyKF9wcml2YXRlLT5pbXApOwogCi0gICAgaWYgKF9wcml2YXRlLT5yb290T2JqZWN0ICYmIF9w
cml2YXRlLT5yb290T2JqZWN0LT5pc1ZhbGlkKCkpCisgICAgaWYgKF9wcml2YXRlLT5yb290T2Jq
ZWN0ICYmIF9wcml2YXRlLT5yb290T2JqZWN0LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgSlNMb2Nr
SG9sZGVyIGhvbGRlcigmX3ByaXZhdGUtPnJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxEYXRhKCkpOwogICAgICAgICBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2NVbnByb3RlY3QoX3By
aXZhdGUtPmltcCk7CisgICAgfQogCiAgICAgaWYgKF9wcml2YXRlLT5yb290T2JqZWN0KQogICAg
ICAgICBfcHJpdmF0ZS0+cm9vdE9iamVjdC0+ZGVyZWYoKTsKQEAgLTI0OCw4ICsyNTUsMTAgQEAg
LSAodm9pZClkZWFsbG9jCiAKIC0gKHZvaWQpZmluYWxpemUKIHsKLSAgICBpZiAoX3ByaXZhdGUt
PnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFsaWQoKSkKKyAgICBpZiAo
X3ByaXZhdGUtPnJvb3RPYmplY3QgJiYgX3ByaXZhdGUtPnJvb3RPYmplY3QtPmlzVmFsaWQoKSkg
eworICAgICAgICBKU0xvY2tIb2xkZXIgaG9sZGVyKCZfcHJpdmF0ZS0+cm9vdE9iamVjdC0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0
LT5nY1VucHJvdGVjdChfcHJpdmF0ZS0+aW1wKTsKKyAgICB9CiAKICAgICBpZiAoX3ByaXZhdGUt
PnJvb3RPYmplY3QpCiAgICAgICAgIF9wcml2YXRlLT5yb290T2JqZWN0LT5kZXJlZigpOwpAQCAt
MjgxLDEwICsyOTAsOSBAQCAtIChpZCljYWxsV2ViU2NyaXB0TWV0aG9kOihOU1N0cmluZyAqKW5h
CiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgCiAgICAgLy8gTG9v
ayB1cCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9y
b290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAogICAg
IEpTVmFsdWUgZnVuY3Rpb24gPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhl
Yywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhuYW1lKSkpKTsKQEAgLTMyNSw3ICszMzMsNyBAQCAt
IChpZClldmFsdWF0ZVdlYlNjcmlwdDooTlNTdHJpbmcgKilzY3JpCiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwog
ICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAK
ICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkudGlt
ZW91dENoZWNrZXIuc3RhcnQoKTsKICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhy
ZWFkRXhlY1N0YXRlOjpldmFsdWF0ZShleGVjLCBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoU3RyaW5nKHNjcmlwdCkpLCBK
U0M6OkpTVmFsdWUoKSwgMCk7CkBAIC0zNDYsNyArMzU0LDcgQEAgLSAodm9pZClzZXRWYWx1ZToo
aWQpdmFsdWUgZm9yS2V5OihOU1N0cgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290
T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdDsKICAgICBbc2VsZiBfaW1wXS0+bWV0aG9kVGFibGUoKS0+cHV0KFtzZWxmIF9pbXBdLCBl
eGVjLCBJZGVudGlmaWVyKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkpLCBjb252
ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBf
cm9vdE9iamVjdF0pLCBzbG90KTsKQEAgLTM3Miw3ICszODAsNyBAQCAtIChpZCl2YWx1ZUZvcktl
eTooTlNTdHJpbmcgKilrZXkKICAgICAgICAgLy8gTmVlZCB0byBzY29wZSB0aGlzIGxvY2sgdG8g
ZW5zdXJlIHRoYXQgd2UgcmVsZWFzZSB0aGUgbG9jayBiZWZvcmUgY2FsbGluZwogICAgICAgICAv
LyBbc3VwZXIgdmFsdWVGb3JLZXk6a2V5XSB3aGljaCBtaWdodCB0aHJvdyBhbiBleGNlcHRpb24g
YW5kIGJ5cGFzcyB0aGUgSlNMb2NrIGRlc3RydWN0b3IsCiAgICAgICAgIC8vIGxlYXZpbmcgdGhl
IGxvY2sgcGVybWFuZW50bHkgaGVsZAotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgCiAg
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBJZGVudGlmaWVy
KGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhTdHJpbmcoa2V5KSkpKTsKICAgICAgICAgCkBAIC0zODgs
NyArMzk2LDcgQEAgLSAoaWQpdmFsdWVGb3JLZXk6KE5TU3RyaW5nICopa2V5CiAgICAgaWYgKFty
ZXN1bHRPYmogaXNLaW5kT2ZDbGFzczpbV2ViVW5kZWZpbmVkIGNsYXNzXV0pCiAgICAgICAgIHJl
c3VsdE9iaiA9IFtzdXBlciB2YWx1ZUZvcktleTprZXldOyAgICAvLyBkZWZhdWx0cyB0byB0aHJv
d2luZyBhbiBleGNlcHRpb24KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgX2RpZEV4ZWN1dGUoc2VsZik7
CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdE9iajsKQEAgLTQwMiw3ICs0MTAsNyBAQCAtICh2b2lk
KXJlbW92ZVdlYlNjcmlwdEtleTooTlNTdHJpbmcgKilrCiAgICAgRXhlY1N0YXRlKiBleGVjID0g
W3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFT
U0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBbc2VsZiBf
aW1wXS0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoW3NlbGYgX2ltcF0sIGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhrZXkpKSkpOwogCiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC00MjEsNyArNDI5LDcgQEAgLSAoQk9PTCloYXNX
ZWJTY3JpcHRLZXk6KE5TU3RyaW5nICopa2V5CiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYg
X3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFTU0VSVCgh
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBCT09MIHJlc3VsdCA9
IFtzZWxmIF9pbXBdLT5oYXNQcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyKGV4ZWMsIHN0cmluZ1Rv
VVN0cmluZyhTdHJpbmcoa2V5KSkpKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
ewpAQCAtNDQxLDggKzQ0OSw4IEBAIC0gKE5TU3RyaW5nICopc3RyaW5nUmVwcmVzZW50YXRpb24K
ICAgICAgICAgcmV0dXJuIEAiVW5kZWZpbmVkIjsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290
T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAKICAgICBpZCByZXN1bHQgPSBjb252ZXJ0VmFsdWVUb09iamNWYWx1
ZShleGVjLCBbc2VsZiBfaW1wXSwgT2JqY09iamVjdFR5cGUpLm9iamVjdFZhbHVlOwogCkBAIC00
NjEsNyArNDY5LDcgQEAgLSAoaWQpd2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ25lZClpbgog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIGlu
ZGV4KTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewpAQCAtNDg1LDcgKzQ5Myw3
IEBAIC0gKHZvaWQpc2V0V2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ24KICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAKLSAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
ICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KFtzZWxmIF9pbXBdLCBl
eGVjLCBpbmRleCwgY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJnZhbHVlLCBPYmpjT2Jq
ZWN0VHlwZSwgW3NlbGYgX3Jvb3RPYmplY3RdKSwgZmFsc2UpOwogCiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSB7CkBAIC01MTUsNyArNTIzLDcgQEAgKyAoaWQpX2NvbnZlcnRWYWx1ZVRv
T2JqY1ZhbHVlOihKU1ZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7CiAgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgICAgIGlmIChv
YmplY3QtPmluaGVyaXRzKCZKU0hUTUxFbGVtZW50OjpzX2luZm8pKSB7CiAgICAgICAgICAgICAv
LyBQbHVnaW4gZWxlbWVudHMgY2FjaGUgdGhlIGluc3RhbmNlIGludGVybmFsbHkuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI3MzMsNyArMjczMyw3IEBAIEVO
RAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFjYW5JbnZva2VDYWxs
YmFjaygpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0
dXJuIHRydWU7XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVm
UHRyPCRjbGFzc05hbWU+IHByb3RlY3QodGhpcyk7XG5cbiIpOwotICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTtcblxu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0xvY2tIb2xkZXIgbG9j
ayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpO1xuXG4iKTsKICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJncztcbiIpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDYWxsYmFjay5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDcgKzY1LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoTm9QYXJhbQog
CiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2Rh
dGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3M7CkBAIC04Miw3ICs4Miw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNh
bGxiYWNrV2l0aENsYXNzMVAKIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0
aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTAwLDcgKzEwMCw3IEBAIGJv
b2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aENsYXNzMlAKIAogICAgIFJlZlB0cjxKU1Rl
c3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpA
QCAtMTE5LDcgKzExOSw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aFN0cmlu
Z0wKIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
bV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTM3LDcgKzEzNyw3IEBAIGJvb2wgSlNUZXN0Q2FsbGJh
Y2s6OmNhbGxiYWNrV2l0aEJvb2xlYW4KIAogICAgIFJlZlB0cjxKU1Rlc3RDYWxsYmFjaz4gcHJv
dGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgp
KTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTU3LDcgKzE1Nyw3
IEBAIGJvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrUmVxdWlyZXNUaGkKIAogICAgIFJlZlB0
cjxKU1Rlc3RDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCShyZXZpc2lvbiAx
MjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzcsNyArMTc3LDcgQEAgYm9vbCBfTlBOX0ludm9rZURlZmF1bHQoTlBQLCBO
UE9iamVjdCogbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAg
RXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoZSBm
dW5jdGlvbiBvYmplY3QuCiAgICAgICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmotPmltcDsKQEAg
LTIyNSw3ICsyMjUsNyBAQCBib29sIF9OUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0KiBvLCBO
CiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iai0+aW1wLT5nZXQoZXhlYywgaWRlbnRpZmll
ckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKICAgICAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rp
b24sIGNhbGxEYXRhKTsKQEAgLTI2NCw3ICsyNjQsNyBAQCBib29sIF9OUE5fRXZhbHVhdGUoTlBQ
IGluc3RhbmNlLCBOUE9iamVjCiAgICAgICAgIFBsdWdpblZpZXc6OmtlZXBBbGl2ZShpbnN0YW5j
ZSk7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIFN0cmluZyBz
Y3JpcHRTdHJpbmcgPSBjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMpOwogICAgICAgICAKICAgICAg
ICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUocm9vdE9iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3JpcHRTdHJpbmcpLCBKU0M6OkpTVmFsdWUoKSk7
CkBAIC0yOTAsNyArMjkwLDcgQEAgYm9vbCBfTlBOX0dldFByb3BlcnR5KE5QUCwgTlBPYmplY3Qq
IG8sIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOwogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8
SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7CiAgICAgICAgIAotICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygp
KQogICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJv
bU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwpAQCAtMzIyLDcgKzMyMiw3IEBAIGJv
b2wgX05QTl9TZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgSWRl
bnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUp
OwogCiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7CkBAIC0zNjMsNyArMzYzLDcgQEAgYm9v
bCBfTlBOX1JlbW92ZVByb3BlcnR5KE5QUCwgTlBPYmplY3QqIAogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygp
KQogICAgICAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9i
ai0+aW1wLCBleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmco
KSkpOwogICAgICAgICBlbHNlCkBAIC0zODYsNyArMzg2LDcgQEAgYm9vbCBfTlBOX0hhc1Byb3Bl
cnR5KE5QUCwgTlBPYmplY3QqIG8sIAogCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RP
YmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIElkZW50aWZpZXJS
ZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsKLSAgICAg
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7CiAgICAgICAgICAg
ICBib29sIHJlc3VsdCA9IG9iai0+aW1wLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyRnJv
bU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICAgICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsKQEAgLTQxOCw3ICs0MTgsNyBAQCBib29sIF9OUE5fSGFzTWV0aG9kKE5Q
UCwgTlBPYmplY3QqIG8sIE5QCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
RXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIEpTVmFsdWUgZnVuYyA9IG9iai0+aW1w
LT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkp
KTsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuICFmdW5j
LmlzVW5kZWZpbmVkKCk7CkBAIC00NDcsNyArNDQ3LDcgQEAgYm9vbCBfTlBOX0VudW1lcmF0ZShO
UFAsIE5QT2JqZWN0KiBvLCBOUAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAK
ICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIFByb3BlcnR5TmFtZUFy
cmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CiAKICAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxl
KCktPmdldFByb3BlcnR5TmFtZXMob2JqLT5pbXAsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEV4Y2x1
ZGVEb250RW51bVByb3BlcnRpZXMpOwpAQCAtNDg0LDcgKzQ4NCw3IEBAIGJvb2wgX05QTl9Db25z
dHJ1Y3QoTlBQLCBOUE9iamVjdCogbywgY28KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAKICAgICAg
ICAgLy8gQ2FsbCB0aGUgY29uc3RydWN0b3Igb2JqZWN0LgogICAgICAgICBKU1ZhbHVlIGNvbnN0
cnVjdG9yID0gb2JqLT5pbXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNzLmNwcAko
cmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19jbGFzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJucHJ1bnRpbWVfaW1w
bC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvU2NvcGVDaGFpbi5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KICNpbmNs
dWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC00Nyw3ICs0OCw3IEBAIENDbGFzczo6
Q0NsYXNzKE5QQ2xhc3MqIGFDbGFzcykKIAogQ0NsYXNzOjp+Q0NsYXNzKCkKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
YWNxdWlyZSBhIEpTTG9jayBoZXJlPwogCiAgICAgZGVsZXRlQWxsVmFsdWVzKF9tZXRob2RzKTsK
ICAgICBfbWV0aG9kcy5jbGVhcigpOwpAQCAtOTEsNyArOTIsNyBAQCBNZXRob2RMaXN0IENDbGFz
czo6bWV0aG9kc05hbWVkKFByb3BlcnR5CiAgICAgaWYgKF9pc2EtPmhhc01ldGhvZCAmJiBfaXNh
LT5oYXNNZXRob2Qob2JqLCBpZGVudCkpewogICAgICAgICBNZXRob2QqIGFNZXRob2QgPSBuZXcg
Q01ldGhvZChpZGVudCk7IC8vIGRlbGV0ZWQgaW4gdGhlIENDbGFzcyBkZXN0cnVjdG9yCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhpbnN0LT5yb290T2JqZWN0KCktPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgX21ldGhvZHMuc2V0KG5hbWUuaW1w
bCgpLCBhTWV0aG9kKTsKICAgICAgICAgfQogICAgICAgICBtZXRob2RMaXN0LmFwcGVuZChhTWV0
aG9kKTsKQEAgLTExNCw3ICsxMTUsNyBAQCBGaWVsZCogQ0NsYXNzOjpmaWVsZE5hbWVkKFByb3Bl
cnR5TmFtZSBwCiAgICAgaWYgKF9pc2EtPmhhc1Byb3BlcnR5ICYmIF9pc2EtPmhhc1Byb3BlcnR5
KG9iaiwgaWRlbnQpKXsKICAgICAgICAgYUZpZWxkID0gbmV3IENGaWVsZChpZGVudCk7IC8vIGRl
bGV0ZWQgaW4gdGhlIENDbGFzcyBkZXN0cnVjdG9yCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhpbnN0LT5yb290T2JqZWN0KCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkp
OwogICAgICAgICAgICAgX2ZpZWxkcy5zZXQobmFtZS5pbXBsKCksIGFGaWVsZCk7CiAgICAgICAg
IH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkocmV2
aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBDSW5zdGFuY2U6Om1vdmVHbG9i
YWxFeGNlcHRpb25Ub0V4ZQogICAgICAgICByZXR1cm47CiAKICAgICB7Ci0gICAgICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGdsb2Jh
bEV4Y2VwdGlvblN0cmluZygpKSk7CiAgICAgfQogCkBAIC0xODIsNyArMTgyLDcgQEAgSlNWYWx1
ZSBDSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdAogICAgIFZPSURfVE9fTlBWQVJJQU5U
KHJlc3VsdFZhcmlhbnQpOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0
aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAgICAgICByZXR2YWwgPSBfb2JqZWN0LT5fY2xhc3Mt
Pmludm9rZShfb2JqZWN0LCBpZGVudCwgY0FyZ3MuZGF0YSgpLCBjb3VudCwgJnJlc3VsdFZhcmlh
bnQpOwogICAgICAgICBtb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CkBAIC0y
MTcsNyArMjE3LDcgQEAgSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRob2QoRQog
ICAgIE5QVmFyaWFudCByZXN1bHRWYXJpYW50OwogICAgIFZPSURfVE9fTlBWQVJJQU5UKHJlc3Vs
dFZhcmlhbnQpOwogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgQVNTRVJUKGdsb2JhbEV4Y2VwdGlvblN0cmlu
ZygpLmlzTnVsbCgpKTsKICAgICAgICAgcmV0dmFsID0gX29iamVjdC0+X2NsYXNzLT5pbnZva2VE
ZWZhdWx0KF9vYmplY3QsIGNBcmdzLmRhdGEoKSwgY291bnQsICZyZXN1bHRWYXJpYW50KTsKICAg
ICAgICAgbW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpAQCAtMjU2LDcgKzI1
Niw3IEBAIEpTVmFsdWUgQ0luc3RhbmNlOjppbnZva2VDb25zdHJ1Y3QoRXhlY1MKICAgICBOUFZh
cmlhbnQgcmVzdWx0VmFyaWFudDsKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHRWYXJpYW50
KTsKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoZXhlYyk7CiAgICAgICAgIEFTU0VSVChnbG9iYWxFeGNlcHRpb25TdHJpbmcoKS5pc051
bGwoKSk7CiAgICAgICAgIHJldHZhbCA9IF9vYmplY3QtPl9jbGFzcy0+Y29uc3RydWN0KF9vYmpl
Y3QsIGNBcmdzLmRhdGEoKSwgY291bnQsICZyZXN1bHRWYXJpYW50KTsKICAgICAgICAgbW92ZUds
b2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpAQCAtMzE1LDcgKzMxNSw3IEBAIHZvaWQg
Q0luc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGEKICAgICBOUElkZW50aWZpZXIqIGlk
ZW50aWZpZXJzOwogCiAgICAgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0aW9uU3Ry
aW5nKCkuaXNOdWxsKCkpOwogICAgICAgICBib29sIG9rID0gX29iamVjdC0+X2NsYXNzLT5lbnVt
ZXJhdGUoX29iamVjdCwgJmlkZW50aWZpZXJzLCAmY291bnQpOwogICAgICAgICBtb3ZlR2xvYmFs
RXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
Yy9jX3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2Nf
cnVudGltZS5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9j
L2NfcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgSlNWYWx1ZSBD
RmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdAogCiAgICAgICAgIGJvb2wgcmVzdWx0Owog
ICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhleGVjKTsKICAgICAgICAgICAgIHJlc3VsdCA9IG9iai0+X2NsYXNzLT5n
ZXRQcm9wZXJ0eShvYmosIF9maWVsZElkZW50aWZpZXIsICZwcm9wZXJ0eSk7CiAgICAgICAgICAg
ICBDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKICAgICAg
ICAgfQpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIENGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4
ZWNTdGF0CiAgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIGFWYWx1ZSwgJnZh
cmlhbnQpOwogCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICAgICAgb2JqLT5fY2xhc3Mt
PnNldFByb3BlcnR5KG9iaiwgX2ZpZWxkSWRlbnRpZmllciwgJnZhcmlhbnQpOwogICAgICAgICAg
ICAgQ0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAkocmV2aXNpb24g
MTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY191dGlsaXR5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbnZlcnRVVEY4VG9VVEYx
NldpdGhMYXRpCiAvLyBWYXJpYW50IHZhbHVlIG11c3QgYmUgcmVsZWFzZWQgd2l0aCBOUFJlbGVh
c2VWYXJpYW50VmFsdWUoKQogdm9pZCBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUsIE5QVmFyaWFudCogcmVzdWx0KQogewotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAKICAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0KTsKIApAQCAtMTA3LDcgKzEwNyw3IEBA
IHZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRlKiAKIAogSlNWYWx1ZSBjb252
ZXJ0TlBWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE5QVmFyaWFudCogdmFy
aWFudCwgUm9vdE9iamVjdCogcm9vdE9iamVjdCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAogICAg
IE5QVmFyaWFudFR5cGUgdHlwZSA9IHZhcmlhbnQtPnR5cGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAt
Mjg0LDcgKzI4NCw3IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpjYWxsKGpzdHJpbmcgbWV0aG8K
ICAgICAKICAgICAvLyBMb29rdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4KICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAgICAgCiAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmco
bWV0aG9kTmFtZSkuaW1wbCgpKTsKICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gX2ltcC0+Z2V0KGV4
ZWMsIGlkZW50aWZpZXIpOwpAQCAtMzA3LDEyICszMDcsMTIgQEAgam9iamVjdCBKYXZhSlNPYmpl
Y3Q6OmV2YWwoanN0cmluZyBzY3JpcAogewogICAgIExPRyhMaXZlQ29ubmVjdCwgIkphdmFKU09i
amVjdDo6ZXZhbCBzY3JpcHQgPSAlcyIsIEphdmFTdHJpbmcoc2NyaXB0KS51dGY4KCkpOwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAKICAgICBSb290T2Jq
ZWN0KiByb290T2JqZWN0ID0gdGhpcy0+cm9vdE9iamVjdCgpOwogICAgIGlmICghcm9vdE9iamVj
dCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhyb290T2JqZWN0
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAKICAgICByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCksIHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxTY29wZUNo
YWluKCksIG1ha2VTb3VyY2UoSmF2YVN0cmluZyhzY3JpcHQpLmltcGwoKSkpOwogICAgIHJvb3RP
YmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgp
OwpAQCAtMzMwLDcgKzMzMCw3IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpnZXRNZW1iZXIoanN0
cmluZyAKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IF9pbXAtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVtYmVyTmFtZSku
aW1wbCgpKSk7CiAKICAgICByZXR1cm4gY29udmVydFZhbHVlVG9KT2JqZWN0KHJlc3VsdCk7CkBA
IC0zNDYsNyArMzQ2LDcgQEAgdm9pZCBKYXZhSlNPYmplY3Q6OnNldE1lbWJlcihqc3RyaW5nIG1l
bQogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAg
ICAgX2ltcC0+bWV0aG9kVGFibGUoKS0+cHV0KF9pbXAsIGV4ZWMsIElkZW50aWZpZXIoZXhlYywg
SmF2YVN0cmluZyhtZW1iZXJOYW1lKS5pbXBsKCkpLCBjb252ZXJ0Sk9iamVjdFRvVmFsdWUoZXhl
YywgdmFsdWUpLCBzbG90KTsKIH0KQEAgLTM2MSw3ICszNjEsNyBAQCB2b2lkIEphdmFKU09iamVj
dDo6cmVtb3ZlTWVtYmVyKGpzdHJpbmcgCiAgICAgICAgIHJldHVybjsKIAogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICBfaW1wLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShfaW1wLCBl
eGVjLCBJZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVtYmVyTmFtZSkuaW1wbCgpKSk7CiB9
CiAKQEAgLTM3Niw3ICszNzYsNyBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6Z2V0U2xvdChqaW50
IGluZGV4CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IF9p
bXAtPmdldChleGVjLCBpbmRleCk7CiAKICAgICByZXR1cm4gY29udmVydFZhbHVlVG9KT2JqZWN0
KHJlc3VsdCk7CkBAIC0zOTIsNyArMzkyLDcgQEAgdm9pZCBKYXZhSlNPYmplY3Q6OnNldFNsb3Qo
amludCBpbmRleCwgagogICAgICAgICByZXR1cm47CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAg
ICAgX2ltcC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChfaW1wLCBleGVjLCAodW5zaWduZWQp
aW5kZXgsIGNvbnZlcnRKT2JqZWN0VG9WYWx1ZShleGVjLCB2YWx1ZSksIGZhbHNlKTsKIH0KIApA
QCAtNDA1LDkgKzQwNSw5IEBAIGpzdHJpbmcgSmF2YUpTT2JqZWN0Ojp0b1N0cmluZygpIGNvbnN0
CiAgICAgaWYgKCFyb290T2JqZWN0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNPYmplY3QgKnRoaXNPYmogPSBjb25z
dF9jYXN0PEpTT2JqZWN0Kj4oX2ltcCk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKICAgICAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8anN0cmluZz4oY29udmVydFZhbHVl
VG9KVmFsdWUoZXhlYywgcm9vdE9iamVjdCwgdGhpc09iaiwgSmF2YVR5cGVPYmplY3QsICJqYXZh
LmxhbmcuU3RyaW5nIikubCk7CiB9CkBAIC00NjMsMTMgKzQ2MywxMyBAQCBqbG9uZyBKYXZhSlNP
YmplY3Q6OmNyZWF0ZU5hdGl2ZShqbG9uZyBuCiAKIGpvYmplY3QgSmF2YUpTT2JqZWN0Ojpjb252
ZXJ0VmFsdWVUb0pPYmplY3QoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKIHsKLSAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIAogICAgIFJvb3RPYmplY3QqIHJvb3RPYmpl
Y3QgPSB0aGlzLT5yb290T2JqZWN0KCk7CiAgICAgaWYgKCFyb290T2JqZWN0KQogICAgICAgICBy
ZXR1cm4gMDsKIAorICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAg
ICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKICAgICBqb2JqZWN0IHJlc3VsdCA9IDA7CiAg
ICAgCkBAIC01NTQsNyArNTU0LDcgQEAgSlNWYWx1ZSBKYXZhSlNPYmplY3Q6OmNvbnZlcnRKT2Jq
ZWN0VG9WYQogICAgIC8vIGZpZ3VyZSAyMi00LgogICAgIGpvYmplY3QgY2xhc3NPZkluc3RhbmNl
ID0gY2FsbEpOSU1ldGhvZDxqb2JqZWN0Pih0aGVPYmplY3QsICJnZXRDbGFzcyIsICIoKUxqYXZh
L2xhbmcvQ2xhc3M7Iik7CiAgICAgaWYgKCFjbGFzc09mSW5zdGFuY2UpIHsKLSAgICAgICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgICAgIHJldHVybiBKYXZhSW5zdGFuY2U6OmNyZWF0ZSh0aGVPYmplY3Qs
IF9yb290T2JqZWN0KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKICAgICB9CiAKQEAgLTU2
Myw3ICs1NjMsNyBAQCBKU1ZhbHVlIEphdmFKU09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhCiAg
ICAgLy8gcG9pbnRlciBhbmQgc3RvcmVzIGl0IGluIHRoaXMgb2JqZWN0LCBzbyB0aGF0IGl0IGNh
biBiZSByZXRyaWV2ZWQgYmVsb3cuCiAgICAganN0cmluZyBjbGFzc05hbWUgPSAoanN0cmluZylj
YWxsSk5JTWV0aG9kPGpvYmplY3Q+KGNsYXNzT2ZJbnN0YW5jZSwgImdldE5hbWUiLCAiKClMamF2
YS9sYW5nL1N0cmluZzsiKTsKICAgICBpZiAoIWNsYXNzTmFtZSB8fCAoc3RyY21wKEphdmFTdHJp
bmcoY2xhc3NOYW1lKS51dGY4KCksICJzdW4ucGx1Z2luLmphdmFzY3JpcHQud2Via2l0LkpTT2Jq
ZWN0IikgIT0gMCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHJldHVybiBKYXZh
SW5zdGFuY2U6OmNyZWF0ZSh0aGVPYmplY3QsIF9yb290T2JqZWN0KS0+Y3JlYXRlUnVudGltZU9i
amVjdChleGVjKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5p
X29iamMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfb2Jq
Yy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlf
b2JqYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBib29sIEpTQzo6QmluZGlu
Z3M6OmRpc3BhdGNoSk5JQ2FsbChFeGVjCiAgICAgICAgIC8vIGltcGxlbWVudGVkIGluIFdlYkNv
cmUgd2lsbCBndWFyYW50ZWUgdGhhdCBvbmx5IGFwcHJvcHJpYXRlIEphdmFTY3JpcHQKICAgICAg
ICAgLy8gY2FuIHJlZmVyZW5jZSB0aGUgYXBwbGV0LgogICAgICAgICB7Ci0gICAgICAgICAgIEpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7CiAgICAg
ICAgICAgICByZXN1bHQgPSBbdmlldyB3ZWJQbHVnSW5DYWxsSmF2YTpvYmogaXNTdGF0aWM6aXNT
dGF0aWMgcmV0dXJuVHlwZTpyZXR1cm5UeXBlIG1ldGhvZDptZXRob2RJRCBhcmd1bWVudHM6YXJn
cyBjYWxsaW5nVVJMOm5pbCBleGNlcHRpb25EZXNjcmlwdGlvbjomX2V4Y2VwdGlvbkRlc2NyaXB0
aW9uXTsKICAgICAgICAgfQogCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgSlNDOjpCaW5kaW5nczo6
ZGlzcGF0Y2hKTklDYWxsKEV4ZWMKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGVs
c2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luQ2FsbEph
dmE6bWV0aG9kOnJldHVyblR5cGU6YXJndW1lbnRzOildKSB7Ci0gICAgICAgIEpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7CiAgICAgICAgIHJlc3VsdCA9
IFt2aWV3IHdlYlBsdWdJbkNhbGxKYXZhOm9iaiBtZXRob2Q6bWV0aG9kSUQgcmV0dXJuVHlwZTpy
ZXR1cm5UeXBlIGFyZ3VtZW50czphcmdzXTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQ
cml2YXRlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2pu
aS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNyArMTc0
LDcgQEAgc3RhdGljIGpvYmplY3QgY29udmVydEFycmF5SW5zdGFuY2VUb0phdgogCiBqdmFsdWUg
Y29udmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBSb290T2JqZWN0KiByb290T2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlLCBKYXZhVHlwZSBqYXZhVHlwZSwgY29uc3QgY2hhciogamF2YUNs
YXNzTmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAganZhbHVlIHJlc3VsdDsKICAgICBtZW1z
ZXQoJnJlc3VsdCwgMCwgc2l6ZW9mKGp2YWx1ZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Myw3ICs2Myw3IEBAIEphdmFDbGFzczo6SmF2YUNsYXNzKGpvYmplY3QgYW5JbnN0
YW5jZSkKICAgICAgICAgICAgIGpvYmplY3QgYUpGaWVsZCA9IGVudi0+R2V0T2JqZWN0QXJyYXlF
bGVtZW50KChqb2JqZWN0QXJyYXkpZmllbGRzLCBpKTsKICAgICAgICAgICAgIEphdmFGaWVsZCog
YUZpZWxkID0gbmV3IEphdmFGaWVsZChlbnYsIGFKRmllbGQpOyAvLyBkZWxldGVkIGluIHRoZSBK
YXZhQ2xhc3MgZGVzdHJ1Y3RvcgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNMb2NrIGhlcmU/CiAgICAgICAgICAgICAgICAgbV9maWVs
ZHMuc2V0KGFGaWVsZC0+bmFtZSgpLmltcGwoKSwgYUZpZWxkKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoYUpGaWVsZCk7CkBAIC03OSw3ICs3OSw3IEBA
IEphdmFDbGFzczo6SmF2YUNsYXNzKGpvYmplY3QgYW5JbnN0YW5jZSkKICAgICAgICAgICAgIEph
dmFNZXRob2QqIGFNZXRob2QgPSBuZXcgSmF2YU1ldGhvZChlbnYsIGFKTWV0aG9kKTsgLy8gZGVs
ZXRlZCBpbiB0aGUgSmF2YUNsYXNzIGRlc3RydWN0b3IKICAgICAgICAgICAgIE1ldGhvZExpc3Qq
IG1ldGhvZExpc3Q7CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxk
IHdlIGFjcXVpcmUgYSBKU0xvY2sgaGVyZT8KIAogICAgICAgICAgICAgICAgIG1ldGhvZExpc3Qg
PSBtX21ldGhvZHMuZ2V0KGFNZXRob2QtPm5hbWUoKS5pbXBsKCkpOwogICAgICAgICAgICAgICAg
IGlmICghbWV0aG9kTGlzdCkgewpAQCAtMTAwLDcgKzEwMCw3IEBAIEphdmFDbGFzczo6fkphdmFD
bGFzcygpCiB7CiAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDxjaGFyKj4obV9uYW1lKSk7CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIC8vIEZJWE1FOiBTaG91
bGQgd2UgYWNxdWlyZSBhIEpTTG9jayBoZXJlPwogCiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fZmll
bGRzKTsKICAgICBtX2ZpZWxkcy5jbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdl
L2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIENsYXNzKiBKYXZhSW5zdGFuY2U6OmdldENsYXNz
KCkgY29uc3QKIAogSlNWYWx1ZSBKYXZhSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAganN0cmluZyBzdHJpbmdWYWx1ZSA9
IChqc3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVjdD4obV9pbnN0YW5jZS0+aW5zdGFuY2UoKSwg
InRvU3RyaW5nIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7Iik7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0MuY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhTWV0aG9kSlNDLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBKYXZhTWV0aG9kOjp+SmF2YU1ldGhvZCgp
CiAvLyB3ZSBnZXQgJy4nIGJldHdlZW4gY29tcG9uZW50cyBmcm9tIHRoZSByZWZsZWN0aW9uIEFQ
SS4KIHN0YXRpYyB2b2lkIGFwcGVuZENsYXNzTmFtZShTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBj
b25zdCBjaGFyKiBjbGFzc05hbWUpCiB7Ci0gICAgQVNTRVJUKEpTTG9jazo6bG9ja0NvdW50KCkg
PiAwKTsKKyAgICBBU1NFUlQoSlNDOjpKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlKCkuYXBp
TG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogCiAgICAgY2hhciogYyA9IGZh
c3RTdHJEdXAoY2xhc3NOYW1lKTsKIApAQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyB2b2lkIGFw
cGVuZENsYXNzTmFtZShTdHJpbmdCdWlsZGUKIGNvbnN0IGNoYXIqIEphdmFNZXRob2Q6OnNpZ25h
dHVyZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3NpZ25hdHVyZSkgewotICAgICAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdl
IGFjcXVpcmUgYSBKU0xvY2sgaGVyZT8KIAogICAgICAgICBTdHJpbmdCdWlsZGVyIHNpZ25hdHVy
ZUJ1aWxkZXI7CiAgICAgICAgIHNpZ25hdHVyZUJ1aWxkZXIuYXBwZW5kKCcoJyk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlNDLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YVN0cmluZ0pTQy5oCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlND
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgSmF2YVN0cmluZ0pT
Q19oCiAKICNpbmNsdWRlICJKTklVdGlsaXR5LmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNl
LmgiCiAjaW5jbHVkZSAiSmF2YUluc3RhbmNlSlNDLmgiCiAKICNpbmNsdWRlIDxydW50aW1lL0pT
TG9jay5oPgpAQCAtNTIsMjAgKzUzLDIwIEBAIHB1YmxpYzoKIAogICAgIEphdmFTdHJpbmcoKQog
ICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAg
ICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAgICAgICAgIG1faW1wbCA9IFVTdHJpbmcoKS5pbXBsKCk7CiAgICAgfQog
CiAgICAgfkphdmFTdHJpbmcoKQogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6SlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIG1faW1wbCA9IDA7CiAg
ICAgfQogCiAgICAgY29uc3QgY2hhciogdXRmOCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAo
IW1fdXRmOFN0cmluZy5kYXRhKCkpIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJDb3JlOjpK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIG1fdXRm
OFN0cmluZyA9IFVTdHJpbmcobV9pbXBsKS51dGY4KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIG1fdXRmOFN0cmluZy5kYXRhKCk7CkBAIC03OSw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGludCBzaXplID0gZS0+R2V0U3RyaW5nTGVuZ3RoKHMpOwogICAgICAgICBjb25zdCBqY2hh
ciogdWMgPSBnZXRVQ2hhcmFjdGVyc0Zyb21KU3RyaW5nSW5FbnYoZSwgcyk7CiAgICAgICAgIHsK
LSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIG1faW1wbCA9IFVTdHJpbmcocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBVQ2hhcio+KHVjKSwgc2l6ZSkuaW1wbCgpOwogICAgICAgICB9CiAgICAgICAg
IHJlbGVhc2VVQ2hhcmFjdGVyc0ZvckpTdHJpbmdJbkVudihlLCBzLCB1Yyk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkyLDcgKzkyLDcgQEAgSlNPYmplY3QqIEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KAog
ICAgIGlmIChSdW50aW1lT2JqZWN0KiBleGlzdGluZ09iamVjdCA9IG1fcnVudGltZU9iamVjdC5n
ZXQoKSkKICAgICAgICAgcmV0dXJuIGV4aXN0aW5nT2JqZWN0OwogCi0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICBSdW50aW1lT2JqZWN0KiBuZXdPYmplY3QgPSBuZXdSdW50aW1lT2JqZWN0KGV4ZWMpOwogICAg
IG1fcnVudGltZU9iamVjdCA9IFBhc3NXZWFrPFJ1bnRpbWVPYmplY3Q+KG5ld09iamVjdCk7CiAg
ICAgbV9yb290T2JqZWN0LT5hZGRSdW50aW1lT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3
T2JqZWN0KTsKQEAgLTEwMSw3ICsxMDEsNyBAQCBKU09iamVjdCogSW5zdGFuY2U6OmNyZWF0ZVJ1
bnRpbWVPYmplY3QoCiAKIFJ1bnRpbWVPYmplY3QqIEluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgLy8gRklYTUU6IGRlcHJl
Y2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUgd3Jvbmcg
Z2xvYmFsIG9iamVjdAogICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQgZ2xvYmFs
IG9iamVjdCBmb3IgImkiLgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19p
bnN0YW5jZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpj
X2luc3RhbmNlLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
b2JqYy9vYmpjX2luc3RhbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIHZv
aWQgT2JqY0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG8KICAgICB9CiAKICAgICBpZiAo
IXNfZXhjZXB0aW9uRW52aXJvbm1lbnQgfHwgc19leGNlcHRpb25FbnZpcm9ubWVudCA9PSBleGVj
LT5keW5hbWljR2xvYmFsT2JqZWN0KCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAg
IHRocm93RXJyb3IoZXhlYywgc19leGNlcHRpb24pOwogICAgIH0KIApAQCAtMjM5LDcgKzIzOSw3
IEBAIEpTVmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VPYmpjTWV0aG9kKEUKIHsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgCi0gICAgSlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7IC8vIENhbid0IHB1dCB0aGlz
IGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCisg
ICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOyAvLyBDYW4ndCBwdXQg
dGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5
LgogCiAgICAgc2V0R2xvYmFsRXhjZXB0aW9uKG5pbCk7CiAgICAgCkBAIC0zNTQsNyArMzU0LDcg
QEAgSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZURlZmF1bHRNZXRobwogewogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNp
ZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgorICAgIEpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0IHRoaXMg
aW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KICAg
ICBzZXRHbG9iYWxFeGNlcHRpb24obmlsKTsKICAgICAKIEB0cnkgewpAQCAtNDExLDcgKzQxMSw3
IEBAIGJvb2wgT2JqY0luc3RhbmNlOjpzZXRWYWx1ZU9mVW5kZWZpbmVkRmkKICAgICBpZiAoIVt0
YXJnZXRPYmplY3QgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRWYWx1ZTpmb3JVbmRl
ZmluZWRLZXk6KV0pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQg
dGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5
LgorICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3Qg
cHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJl
Y3RseS4KIAogICAgIC8vIFRoaXMgY2hlY2sgaXMgbm90IHJlYWxseSBuZWNlc3NhcnkgYmVjYXVz
ZSBOU09iamVjdCBpbXBsZW1lbnRzCiAgICAgLy8gc2V0VmFsdWU6Zm9yVW5kZWZpbmVkS2V5Oiwg
YW5kIHVuZm9ydHVuYXRlbHkgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KQEAgLTQ0Myw3ICs0
NDMsNyBAQCBKU1ZhbHVlIE9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZlVuZGVmaW5lCiAgICAgCiAg
ICAgaWQgdGFyZ2V0T2JqZWN0ID0gZ2V0T2JqZWN0KCk7CiAKLSAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3QgcHV0IHRo
aXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4K
KyAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENhbid0IHB1
dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0
bHkuCiAKICAgICAvLyBUaGlzIGNoZWNrIGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5IGJlY2F1c2Ug
TlNPYmplY3QgaW1wbGVtZW50cwogICAgIC8vIHZhbHVlRm9yVW5kZWZpbmVkS2V5OiwgYW5kIHVu
Zm9ydHVuYXRlbHkgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5tbQkod29ya2luZyBjb3B5KQpA
QCAtOTIsMTkgKzkyLDE4IEBAIEpTVmFsdWUgT2JqY0ZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZShF
eGUKICAgICAKICAgICBpZCB0YXJnZXRPYmplY3QgPSAoc3RhdGljX2Nhc3Q8Y29uc3QgT2JqY0lu
c3RhbmNlKj4oaW5zdGFuY2UpKS0+Z2V0T2JqZWN0KCk7CiAKLSAgICBKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3QgcHV0IHRo
aXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4K
KyAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENhbid0IHB1
dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0
bHkuCiAKICAgICBAdHJ5IHsKICAgICAgICAgaWYgKGlkIG9iamNWYWx1ZSA9IFt0YXJnZXRPYmpl
Y3QgdmFsdWVGb3JLZXk6KE5TU3RyaW5nICopX25hbWUuZ2V0KCldKQogICAgICAgICAgICAgcmVz
dWx0ID0gY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJm9iamNWYWx1ZSwgT2JqY09iamVj
dFR5cGUsIGluc3RhbmNlLT5yb290T2JqZWN0KCkpOwogICAgICAgICB7Ci0gICAgICAgICAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgICAgICAgICBPYmpjSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNl
cHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKICAgICAgICAgfQogICAgIH0gQGNhdGNoKE5TRXhjZXB0
aW9uKiBsb2NhbEV4Y2VwdGlvbikgewotICAgICAgICBKU0xvY2s6OmxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIHRo
cm93RXJyb3IoZXhlYywgW2xvY2FsRXhjZXB0aW9uIHJlYXNvbl0pOwotICAgICAgICBKU0xvY2s6
OnVubG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIH0KIAogICAgIC8vIFdvcmsgYXJv
dW5kIHByb2JsZW0gaW4gc29tZSB2ZXJzaW9ucyBvZiBHQ0Mgd2hlcmUgcmVzdWx0IGdldHMgbWFy
a2VkIHZvbGF0aWxlIGFuZApAQCAtMTI1LDE4ICsxMjQsMTcgQEAgdm9pZCBPYmpjRmllbGQ6OnNl
dFZhbHVlVG9JbnN0YW5jZShFeGVjUwogICAgIGlkIHRhcmdldE9iamVjdCA9IChzdGF0aWNfY2Fz
dDxjb25zdCBPYmpjSW5zdGFuY2UqPihpbnN0YW5jZSkpLT5nZXRPYmplY3QoKTsKICAgICBpZCB2
YWx1ZSA9IGNvbnZlcnRWYWx1ZVRvT2JqY09iamVjdChleGVjLCBhVmFsdWUpOwogCi0gICAgSlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7IC8v
IENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMg
aW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMp
OyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndp
bmRzIGluY29ycmVjdGx5LgogCiAgICAgQHRyeSB7CiAgICAgICAgIFt0YXJnZXRPYmplY3Qgc2V0
VmFsdWU6dmFsdWUgZm9yS2V5OihOU1N0cmluZyAqKV9uYW1lLmdldCgpXTsKICAgICAgICAgewot
ICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAg
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAgICAgT2JqY0luc3RhbmNlOjpt
b3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgICAgIH0KICAgICB9IEBj
YXRjaChOU0V4Y2VwdGlvbiogbG9jYWxFeGNlcHRpb24pIHsKLSAgICAgICAgSlNMb2NrOjpsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFtsb2NhbEV4Y2VwdGlvbiByZWFzb25dKTsKLSAg
ICAgICAgSlNMb2NrOjp1bmxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW0JKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfdXRpbGl0eS5t
bQkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBPYmpjVmFsdWUgY29udmVydFZhbHVl
VG9PYmpjVmFsdWUoRXhlY1N0CiAKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBP
YmpjT2JqZWN0VHlwZTogewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCAqb3JpZ2luR2xvYmFsT2JqZWN0ID0gZXhl
Yy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpOwogICAgICAgICAgICAgUm9vdE9iamVjdCogb3JpZ2lu
Um9vdE9iamVjdCA9IGZpbmRSb290T2JqZWN0KG9yaWdpbkdsb2JhbE9iamVjdCk7CkBAIC0xNDYs
NyArMTQ2LDcgQEAgT2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4ZWNTdAogCiBK
U1ZhbHVlIGNvbnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgTlNTdHJpbmcg
Km5zc3RyaW5nKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCiAgICAgdW5pY2hhciAqY2hhcnM7CiAg
ICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IFtuc3N0cmluZyBsZW5ndGhdOwpAQCAtMTc4LDcgKzE3
OCw3IEBAIEpTVmFsdWUgY29udmVydE5TU3RyaW5nVG9TdHJpbmcoRXhlY1N0YXQKICovCiBKU1Zh
bHVlIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogYnVmZmVy
LCBPYmpjVmFsdWVUeXBlIHR5cGUsIFJvb3RPYmplY3QqIHJvb3RPYmplY3QpCiB7Ci0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKICAgICAKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBPYmpjT2JqZWN0
VHlwZTogewpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlICJFcnJvci5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5o
IgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5j
bHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCkBAIC05Miw3ICs5Myw3IEBAIFF0SW5zdGFuY2U6OlF0
SW5zdGFuY2UoUU9iamVjdCogbywgUGFzc1IKIAogUXRJbnN0YW5jZTo6flF0SW5zdGFuY2UoKQog
ewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CiAKICAgICBjYWNoZWRJbnN0YW5jZXMucmVtb3ZlKG1faGFzaGtleSk7CiAKQEAgLTExOSw3ICsx
MjAsNyBAQCBRdEluc3RhbmNlOjp+UXRJbnN0YW5jZSgpCiAKIFBhc3NSZWZQdHI8UXRJbnN0YW5j
ZT4gUXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShRT2JqZWN0KiBvLCBQYXNzUmVmUHRyPFJvb3RP
YmplY3Q+IHJvb3RPYmplY3QsIFZhbHVlT3duZXJzaGlwIG93bmVyc2hpcCkKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKFdl
YkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgZm9y
ZWFjaCAoUXRJbnN0YW5jZSogaW5zdGFuY2UsIGNhY2hlZEluc3RhbmNlcy52YWx1ZXMobykpCiAg
ICAgICAgIGlmIChpbnN0YW5jZS0+cm9vdE9iamVjdCgpID09IHJvb3RPYmplY3QpIHsKQEAgLTE4
MCw3ICsxODEsNyBAQCBDbGFzcyogUXRJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdAogCiBSdW50
aW1lT2JqZWN0KiBRdEluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogICAgIG1fbWV0aG9kcy5jbGVhcigpOwogICAgIHJldHVybiBRdFJ1
bnRpbWVPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRo
aXMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50
aW1lLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X3BpeG1hcHJ1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsNyArNDIwLDcgQEAgUnVu
dGltZU9iamVjdCogUXRQaXhtYXBJbnN0YW5jZTo6bmV3UnVudAogCiBKU09iamVjdCogUXRQaXht
YXBJbnN0YW5jZTo6Y3JlYXRlUGl4bWFwUnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFBh
c3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCwgY29uc3QgUVZhcmlhbnQmIGRhdGEpCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICBSZWZQdHI8UXRQaXhtYXBJbnN0YW5jZT4gaW5zdGFuY2UgPSBhZG9wdFJl
ZihuZXcgUXRQaXhtYXBJbnN0YW5jZShyb290LCBkYXRhKSk7CiAgICAgcmV0dXJuIGluc3RhbmNl
LT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3F0L3F0X3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9xdC9xdF9ydW50aW1lLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNyArMjMwLDcg
QEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdAogICAgICAgICByZXR1
cm4gUVZhcmlhbnQoKTsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTUmVhbFR5cGUgdHlw
ZSA9IHZhbHVlUmVhbFR5cGUoZXhlYywgdmFsdWUpOwogICAgIGlmIChoaW50ID09IFFNZXRhVHlw
ZTo6Vm9pZCkgewogICAgICAgICBzd2l0Y2godHlwZSkgewpAQCAtODI0LDcgKzgyNCw3IEBAIEpT
VmFsdWUgY29udmVydFFWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUKICAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBpZiAodHlwZSA9PSBRTWV0YVR5
cGU6OkJvb2wpCiAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4odmFyaWFudC50b0Jvb2woKSk7CkBA
IC0xNDIwLDcgKzE0MjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpj
YWxsCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICAvLyBXZSBoYXZlIHRvIHBpY2sgYSBtZXRob2QgdGhhdCBtYXRjaGVzLi4KLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogCiAgICAgUU9iamVjdCAqb2JqID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7CiAgICAg
aWYgKG9iaikgewpAQCAtMTU2MSw3ICsxNTYxLDcgQEAgRW5jb2RlZEpTVmFsdWUgUXRSdW50aW1l
Q29ubmVjdGlvbk1ldGhvZAogewogICAgIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhKiBk
ID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCAqPihleGVjLT5jYWxsZWUo
KSktPmRfZnVuYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIFFPYmplY3QqIHNlbmRlciA9IGQt
Pm1faW5zdGFuY2UtPmdldE9iamVjdCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cXQvcXRfcnVudGltZV9xdDQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9xdC9xdF9ydW50aW1lX3F0NC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lX3F0NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw3
ICsyMzAsNyBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAg
ICAgIHJldHVybiBRVmFyaWFudCgpOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNSZWFs
VHlwZSB0eXBlID0gdmFsdWVSZWFsVHlwZShleGVjLCB2YWx1ZSk7CiAgICAgaWYgKGhpbnQgPT0g
UU1ldGFUeXBlOjpWb2lkKSB7CiAgICAgICAgIHN3aXRjaCh0eXBlKSB7CkBAIC04MjQsNyArODI0
LDcgQEAgSlNWYWx1ZSBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0ZQogICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7CiAgICAgfQogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIGlmICh0eXBlID09
IFFNZXRhVHlwZTo6Qm9vbCkKICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih2YXJpYW50LnRvQm9v
bCgpKTsKQEAgLTE0MjksNyArMTQyOSw3IEBAIEVuY29kZWRKU1ZhbHVlIFF0UnVudGltZU1ldGFN
ZXRob2Q6OmNhbGwKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIC8vIFdlIGhhdmUgdG8gcGljayBhIG1ldGhvZCB0aGF0IG1hdGNoZXMuLgotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAKICAgICBRT2JqZWN0ICpvYmogPSBkLT5tX2luc3RhbmNlLT5nZXRPYmplY3Qo
KTsKICAgICBpZiAob2JqKSB7CkBAIC0xNTcwLDcgKzE1NzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBR
dFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kCiB7CiAgICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhv
ZERhdGEqIGQgPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kICo+KGV4ZWMt
PmNhbGxlZSgpKS0+ZF9mdW5jKCk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgUU9iamVjdCogc2Vu
ZGVyID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUx
LDcgKzU1MSw3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmUKICAg
ICBtX2NvbnRleHRTdGF0ZVNhdmVyID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIoKm1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSkpOwogCiAjaWYgVVNFKEpTQykKLSAgICBK
U0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpKTsK
ICAgICBzaXplX3QgbnVtQnl0ZXMgPSA0ICogbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCku
d2lkdGgoKSAqIG1faW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLmhlaWdodCgpOwogICAgIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVt
b3J5Q29zdChudW1CeXRlcyk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEltYWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsOCArODEsOCBAQCB2b2lk
IEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiAjaWYgVVNFKEpTQykKICAgICBp
ZiAoIWxvYWRFcnJvcikgewogICAgICAgICBpZiAoIWVsZW0tPmluRG9jdW1lbnQoKSkgewotICAg
ICAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAg
ICAgICAgICAgICBKU0M6OkpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCk7CisgICAgICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKGdsb2JhbERhdGEpOwogICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5yZXBvcnRFeHRy
YU1lbW9yeUNvc3QoY2FjaGVkSW1hZ2UtPmVuY29kZWRTaXplKCkpOwogICAgICAgICB9CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDAsNyArMjQwLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpzdGFydCgpCiAgICAgewog
ICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKICNpZiBVU0Uo
SlNDKQotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
I2VuZGlmCiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG5wRXJyID0g
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS51dGY4
KCkuZGF0YSgpLCBtX2luc3RhbmNlLCBtX21vZGUsIG1fcGFyYW1Db3VudCwgbV9wYXJhbU5hbWVz
LCBtX3BhcmFtVmFsdWVzLCBOVUxMKTsKQEAgLTMzMCw3ICszMzAsNyBAQCB2b2lkIFBsdWdpblZp
ZXc6OnN0b3AoKQogICAgIG1faXNTdGFydGVkID0gZmFsc2U7CiAKICNpZiBVU0UoSlNDKQotICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICNlbmRpZgogCiAjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC00NDYsNyArNDQ2LDcgQEAgdm9pZCBQbHVnaW5W
aWV3OjpwZXJmb3JtUmVxdWVzdChQbHVnaW5SZQogICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnNl
bmROb3RpZmljYXRpb24oKSkgewogICAgICAgICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJl
bnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgICAgICAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAg
ICAgICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgICAgICAgICBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsK
QEAgLTczNiw3ICs3MzYsNyBAQCBOUE9iamVjdCogUGx1Z2luVmlldzo6bnBPYmplY3QoKQogICAg
IHsKICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAjaWYg
VVNFKEpTQykKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICNlbmRpZgogICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBucEVy
ciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1
Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmb2JqZWN0KTsKQEAgLTE0OTIsNyArMTQ5Miw3IEBAIHZv
aWQgUGx1Z2luVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGEKIAogICAgIFBsdWdpblZpZXc6
OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2VuZGlmCiAgICAgc2V0Q2FsbGluZ1BsdWdp
bih0cnVlKTsKICAgICBOUEJvb2wgdmFsdWUgPSBwcml2YXRlQnJvd3NpbmdFbmFibGVkOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdCbGFja0JlcnJ5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1
Z2luVmlld0JsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MDMsNyArNDAzLDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQo
TlBFdmVudAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJy
ZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERh
dGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQg
PSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKQEAg
LTk3MCw3ICs5NzAsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQog
ICAgICAgICAoKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqKW1fbnBXaW5kb3cud3NfaW5mbykt
PndpbmRvd0dyb3VwID0gd2luZG93LT53aW5kb3dHcm91cCgpOwogCiAgICAgUGx1Z2luVmlldzo6
c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAKICAgICAvLyBGSVhN
RTogUGFzc2luZyB6b29tRmFjdG9yIHRvIHNldHdpbmRvdyBtYWtlIHdpbmRvd2VkIHBsdWdpbiBz
Y2FsZSBpbmNvcnJlY3RseS4KQEAgLTEyMjAsNyArMTIyMCw3IEBAIGJvb2wgUGx1Z2luVmlldzo6
cGxhdGZvcm1TdGFydCgpCiAKICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZh
bHVlKSB7CiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwot
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAg
ICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVkLCAmbV9uZWVkc1hF
bWJlZCk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtMTMwMSw3ICsxMzAx
LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpnZXRXaW5kb3dJbmZvKFZlY3RvcjxQbAogICAgIHZvaWQq
IHZhbFB0ciA9IDA7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlz
KTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2Fs
bGluZ1BsdWdpbih0cnVlKTsKICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUo
bV9pbnN0YW5jZSwgTlBQVnBsdWdpblNjcmVlbldpbmRvdywgJnZhbFB0cik7CiAgICAgc2V0Q2Fs
bGluZ1BsdWdpbihmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9QbHVn
aW5WaWV3RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2VmbC9Q
bHVnaW5WaWV3RWZsLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcg
QEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudAogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsK
LSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAg
IGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5j
ZSwgJmV2ZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZp
ZXdHdGsuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0
ay9QbHVnaW5WaWV3R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIGJv
b2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNldENhbGxpbmdQbHVn
aW4odHJ1ZSk7CiAKICAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpAQCAtMjc2LDcgKzI3Niw3IEBAIHZvaWQgUGx1
Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiAKIAogdm9pZCBQbHVnaW5WaWV3OjpoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgbV9z
dGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQogICAgICAgICByZXR1cm47
CkBAIC00MDYsNyArNDA2LDcgQEAgc3RhdGljIHZvaWQgc2V0WENyb3NzaW5nRXZlbnRTcGVjaWZp
Y0ZpZQogCiB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZl
bnQpCiB7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAg
aWYgKCFtX2lzU3RhcnRlZCB8fCBtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNz
ZnVsbHkpCiAgICAgICAgIHJldHVybjsKQEAgLTUzNSw3ICs1MzUsNyBAQCB2b2lkIFBsdWdpblZp
ZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAgIH0KIAogICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgIG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwogICAgIHNldENh
bGxpbmdQbHVnaW4oZmFsc2UpOwpAQCAtODQyLDcgKzg0Miw3IEBAIGJvb2wgUGx1Z2luVmlldzo6
cGxhdGZvcm1TdGFydCgpCiAjaWYgZGVmaW5lZChYUF9VTklYKQogICAgIGlmIChtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpIHsKICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVu
dFBsdWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVl
ZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxz
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMubW0J
KHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZp
ZXdNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyNiw3ICs0MjYsNyBAQCB2b2lkIFBsdWdpblZp
ZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogICAgICAgICAgICAgbV9ucFdpbmRvdy5jbGlwUmVj
dC5yaWdodCAtIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCwgbV9ucFdpbmRvdy5jbGlwUmVjdC5i
b3R0b20gLSBtX25wV2luZG93LmNsaXBSZWN0LnRvcCk7CiAKICAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBtX3BsdWdpbi0+cGx1
Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKICAgICBzZXRD
YWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAgLTc3Miw3ICs3NzIsNyBAQCBQb2ludCBQbHVnaW5WaWV3
Ojptb3VzZVBvc0ZvclBsdWdpbihNb3VzCiBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVu
dChOUEV2ZW50JiBldmVudCkKIHsKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmll
dyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKIAogICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzczLDcgKzM3Myw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5Q
RXZlbnQKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lm
IFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogI2Vu
ZGlmCiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBib29sIGFjY2VwdGVkID0gIW1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmZXZlbnQpOwpAQCAtNjg3
LDcgKzY4Nyw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCiAKICAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKICNpZiBVU0UoSlNDKQot
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICNlbmRpZgogICAgIHNl
dENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdp
bmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CkBAIC05NDksNyArOTQ5LDcgQEAgYm9vbCBQ
bHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPmdldHZhbHVlKSB7CiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3
KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25K
U0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsK
ICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5Q
UFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVlZHNYRW1iZWQpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MjYsNyArNTI2LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQo
TlBFdmVudAogICAgICAgICBzaG91bGRQb3AgPSB0cnVlOwogICAgIH0KIAotICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUp
OwogICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1f
aW5zdGFuY2UsICZucEV2ZW50KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAgLTY3
Nyw3ICs2NzcsNyBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5CiAg
ICAgfSBlbHNlCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQogICAgICAg
ICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KQEAgLTc0Nyw3ICs3NDcsNyBAQCB2b2lk
IFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFCiAgICAgfSBlbHNlCiAgICAgICAg
IHJldHVybjsKIAotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICAvLyBGSVhNRTogQ29uc2lkZXIgYmFjayBwb3J0aW5nIHRoZSBodHRwOi8vd2Via2l0Lm9yZy9i
LzU4MTA4IGZpeCBoZXJlLgogICAgIGlmIChkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCiAgICAg
ICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwpAQCAtODM1LDcgKzgzNSw3IEBAIHZvaWQg
UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEkKICAgICBtX25wV2luZG93LmNsaXBS
ZWN0LnRvcCA9IDA7CiAKICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRv
dykgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKICAgICAgICAgc2V0
Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dl
YkNvcmVUZXN0U3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDggKzM5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmVUZXN0U3VwcG9ydCB7CiAKIHZvaWQg
aW5qZWN0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9K
Uyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRDb250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gc2NyaXB0Q29udGV4dC0+aXNEb2N1bWVudCgpID8gc3RhdGlj
X2Nhc3Q8RG9jdW1lbnQqPihzY3JpcHRDb250ZXh0KSA6IDA7CkBAIC00OSw4ICs0OSw4IEBAIHZv
aWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4dFJlZiAKIAogdm9pZCByZXNldEludGVy
bmFsc09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSk7CiAgICAgSW50ZXJuYWxzICogaW50ZXJuYWxzID0gdG9JbnRlcm5hbHMoZ2xv
YmFsT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMs
IEludGVybmFsczo6aW50ZXJuYWxzSWQpKSk7CiAgICAgaWYgKGludGVybmFscykgewpJbmRleDog
U291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NTEsOCArODUxLDggQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24oKQogICAg
IC8vIG91dC4gQnV0IGl0IGlzIHByb3RlY3RlZCBmcm9tIEdDIHdoaWxlIGxvYWRpbmcsIHNvIHRo
aXMKICAgICAvLyBjYW4ndCBiZSByZWNvdXBlZCB1bnRpbCB0aGUgbG9hZCBpcyBkb25lLCBzbyBv
bmx5CiAgICAgLy8gcmVwb3J0IHRoZSBleHRyYSBjb3N0IGF0IHRoYXQgcG9pbnQuCi0gICAgSlND
OjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmdsb2JhbERh
dGEoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEpOwogICAgIGdsb2Jh
bERhdGEtPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KG1fcmVzcG9uc2VCdWlsZGVyLmxlbmd0
aCgpICogMik7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTIwOTI2KQorKysg
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAK
KzIwMTItMDYtMjAgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBKU0xvY2sgc2hvdWxkIGJlIHBlci1KU0dsb2JhbERhdGEKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MTIzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlZCBhbGwgc2l0ZXMgdGhhdCB1
c2VkIEpTTG9jayB0byBpbnN0ZWFkIHVzZSB0aGUgbmV3IEpTTG9ja0hvbGRlcgorICAgICAgICBh
bmQgcGFzcyBpbiB0aGUgY29ycmVjdCBKUyBjb250ZXh0IHRoYXQgdGhlIGNvZGUgaXMgYWJvdXQg
dG8gaW50ZXJhY3Qgd2l0aCB0aGF0IAorICAgICAgICBuZWVkcyBwcm90ZWN0aW9uLgorCisgICAg
ICAgICogU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViTWVtb3J5U2FtcGxlcjo6c2FtcGxlV2ViS2l0KToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5q
ZWN0ZWRCdW5kbGU6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgorICAgICAgICAoV2ViS2l0OjpJ
bmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmpl
Y3Q6OmNhbGxNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpjYWxsT2JqZWN0
KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Y2FsbENvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYktpdDo6SlNOUE9iamVjdDo6cHV0KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVj
dDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6cHJvcGVydHlHZXR0
ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aGFzTWV0aG9kKToKKyAgICAgICAgKFdl
YktpdDo6TlBKU09iamVjdDo6aW52b2tlKToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6
aW52b2tlRGVmYXVsdCk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6Omhhc1Byb3BlcnR5
KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6Z2V0UHJvcGVydHkpOgorICAgICAgICAo
V2ViS2l0OjpOUEpTT2JqZWN0OjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNP
YmplY3Q6OnJlbW92ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6ZW51
bWVyYXRlKToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6Y29uc3RydWN0KToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpjb252ZXJ0SlNWYWx1ZVRvTlBW
YXJpYW50KToKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpldmFsdWF0ZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlv
blRvRXhlY1N0YXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6anNXcmFwcGVyRm9yV29ybGQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGcmFtZTo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZSk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6Z2V0V2Vi
Q29yZVN0YXRpc3RpY3MpOgorCiAyMDEyLTA2LTIxICBSeXVhbiBDaG9pICA8cnl1YW4uY2hvaUBz
YW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMW1dLMl0gQWRkIFdLVmlld0VmbCBhbmQgV2ViS2l0
MiBBUEkgT2JqZWN0IHRvIHJlcHJlc2VudCBFdmFzX09iamVjdC4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5tYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5tbQkocmV2aXNpb24g
MTIwOTI2KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIFdlYk1lbW9yeVN0YXRpc3Rp
Y3MgV2ViTWVtb3J5U2FtcGxlcjo6c2EKICAgICB0b3RhbEJ5dGVzSW5Vc2UgKz0gZmFzdE1hbGxv
Y0J5dGVzSW5Vc2U7CiAgICAgdG90YWxCeXRlc0NvbW1pdHRlZCArPSBmYXN0TWFsbG9jQnl0ZXND
b21taXR0ZWQ7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkp
OwogICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNJblVzZSA9IEpTRE9NV2luZG93Ojpjb21tb25KU0ds
b2JhbERhdGEoKS0+aGVhcC5zaXplKCk7CiAgICAgc2l6ZV90IGpzY0hlYXBCeXRlc0NvbW1pdHRl
ZCA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jYXBhY2l0eSgpOwog
ICAgIHRvdGFsQnl0ZXNJblVzZSArPSBqc2NIZWFwQnl0ZXNJblVzZTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTIwLDcgKzkyMCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6Z2V0V2ViQ29yZVN0YXRpc3RpY3ModWkK
ICAgICAKICAgICAvLyBHYXRoZXIgSmF2YVNjcmlwdCBzdGF0aXN0aWNzLgogICAgIHsKLSAgICAg
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgZGF0
YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRPYmplY3RzQ291bnQiLCBKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKSk7CiAgICAgICAg
IGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50
IiwgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmdsb2JhbE9iamVjdENv
dW50KCkpOwogICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiSmF2YVNjcmlwdFBy
b3RlY3RlZE9iamVjdHNDb3VudCIsIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+
aGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
CShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA5LDcgKzQwOSw3
IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmdhcmJhZ2VDb2xsZWN0SmF2YVMKIAogc2l6ZV90IElu
amVjdGVkQnVuZGxlOjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KCkKIHsKLSAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21t
b25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgpOwogfQogCkBAIC00MTgsOCArNDE4
LDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0aW9uKEpTQwogICAgIGlmICgh
Y29udGV4dCB8fCAhZXhjZXB0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9j
ayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWNT
dGF0ZSA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlY1N0YXRlKTsK
IAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBoYXMgYSBET01XaW5kb3cgZ2xvYmFsIG9i
amVjdCwgb3RoZXJ3aXNlIHRoaXMgY29udGV4dCBkaWRuJ3Qgb3JpZ2luYXRlIGZyb20gYSBQYWdl
LgogICAgIGlmICghdG9KU0RPTVdpbmRvdyhleGVjU3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNO
UE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xv
Y2suaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RQcm90b3R5cGUuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0lkZW50aWZpZXJSZXAuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NV2lu
ZG93QmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKQEAgLTEyNSw3ICsxMjYsNyBAQCBKU1ZhbHVlIEpTTlBPYmplY3Q6
OmNhbGxNZXRob2QoRXhlY1N0YXRlCiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKICAg
ICAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHJl
dHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5pbnZva2UobV9ucE9iamVjdCwgbWV0aG9k
TmFtZSwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7CiAgICAgICAg
IE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMp
OwogICAgIH0KQEAgLTE2NSw3ICsxNjYsNyBAQCBKU0M6OkpTVmFsdWUgSlNOUE9iamVjdDo6Y2Fs
bE9iamVjdChKU0M6CiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKIAogICAgIHsKLSAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgcmV0dXJuVmFsdWUgPSBt
X25wT2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQobV9ucE9iamVjdCwgYXJndW1lbnRzLmRh
dGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7CiAgICAgICAgIE5QUnVudGltZU9iamVjdE1h
cDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgIH0KQEAgLTIwNSw3
ICsyMDYsNyBAQCBKU1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxDb25zdHJ1Y3RvcihFeGVjCiAgICAg
Vk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKICAgICAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAg
ICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2Ns
YXNzLT5jb25zdHJ1Y3QobV9ucE9iamVjdCwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3Vu
dCwgJnJlc3VsdCk7CiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2Vw
dGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgIH0KQEAgLTM0MCw3ICszNDEsNyBAQCB2b2lkIEpT
TlBPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTCiAgICAgTlBSdW50aW1lT2JqZWN0TWFw
OjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKHRoaXNPYmplY3QtPm1fb2JqZWN0TWFwKTsKIAog
ICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgdGhpc09i
amVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5zZXRQcm9wZXJ0eSh0aGlzT2JqZWN0LT5tX25wT2Jq
ZWN0LCBucElkZW50aWZpZXIsICZ2YXJpYW50KTsKIAogICAgICAgICBOUFJ1bnRpbWVPYmplY3RN
YXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKQEAgLTM4MCw3ICszODEs
NyBAQCBib29sIEpTTlBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0CiAgICAgTlBSdW50
aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKG1fb2JqZWN0TWFwKTsKIAog
ICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiByZW1vdmVQcm9wZXJ0eSByZXR1
cm5zIGZhbHNlPwogICAgICAgICBpZiAoIW1fbnBPYmplY3QtPl9jbGFzcy0+cmVtb3ZlUHJvcGVy
dHkobV9ucE9iamVjdCwgcHJvcGVydHlOYW1lKSkKQEAgLTQxMyw3ICs0MTQsNyBAQCB2b2lkIEpT
TlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAgTlBSdW50aW1lT2JqZWN0TWFw
OjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKHRoaXNPYmplY3QtPm1fb2JqZWN0TWFwKTsKICAg
ICAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICAgICAg
Ly8gRklYTUU6IFNob3VsZCB3ZSB0aHJvdyBhbiBleGNlcHRpb24gaWYgZW51bWVyYXRlIHJldHVy
bnMgZmFsc2U/CiAgICAgICAgIGlmICghdGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5l
bnVtZXJhdGUodGhpc09iamVjdC0+bV9ucE9iamVjdCwgJmlkZW50aWZpZXJzLCAmaWRlbnRpZmll
ckNvdW50KSkKQEAgLTQ2MSw3ICs0NjIsNyBAQCBKU1ZhbHVlIEpTTlBPYmplY3Q6OnByb3BlcnR5
R2V0dGVyKEV4ZWNTCiAgICAgCiAgICAgYm9vbCByZXR1cm5WYWx1ZTsKICAgICB7Ci0gICAgICAg
IEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIE5QSWRlbnRpZmllciBucElkZW50
aWZpZXIgPSBucElkZW50aWZpZXJGcm9tSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpOwogICAgICAg
ICByZXR1cm5WYWx1ZSA9IHRoaXNPYmotPm1fbnBPYmplY3QtPl9jbGFzcy0+Z2V0UHJvcGVydHko
dGhpc09iai0+bV9ucE9iamVjdCwgbnBJZGVudGlmaWVyLCAmcmVzdWx0KTsKICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL05QSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpoYXNNZXRob2QoTlBJZGVudGlm
aWVyIAogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRlbnRpZmll
ckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApKTsgICAgCiAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKQEAgLTExOSw3ICsxMTksNyBAQCBib29sIE5QSlNPYmplY3Q6Omlu
dm9rZShOUElkZW50aWZpZXIgbWV0CiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBtX2pzT2Jq
ZWN0LT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZp
ZXJSZXApKTsKICAgICByZXR1cm4gaW52b2tlKGV4ZWMsIG1fb2JqZWN0TWFwLT5nbG9iYWxPYmpl
Y3QoKSwgZnVuY3Rpb24sIGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgcmVzdWx0KTsKQEAgLTEz
MSw3ICsxMzEsNyBAQCBib29sIE5QSlNPYmplY3Q6Omludm9rZURlZmF1bHQoY29uc3QgTlBWCiAg
ICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAg
ICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG1fanNPYmplY3QuZ2V0KCk7CiAgICAgcmV0dXJuIGludm9r
ZShleGVjLCBtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCksIGZ1bmN0aW9uLCBhcmd1bWVudHMs
IGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7CkBAIC0xNDUsNyArMTQ1LDcgQEAgYm9vbCBOUEpTT2Jq
ZWN0OjpoYXNQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBib29sIHJlc3VsdDsKICAgICBp
ZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkKQEAgLTE2NSw3ICsxNjUsNyBAQCBib29sIE5Q
SlNPYmplY3Q6OmdldFByb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgaWYgKCFleGVjKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUganNSZXN1bHQ7CiAg
ICAgaWYgKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpCiAgICAgICAgIGpzUmVzdWx0ID0gbV9q
c09iamVjdC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVjLCBpZGVu
dGlmaWVyUmVwKSk7CkBAIC0xODUsNyArMTg1LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpzZXRQcm9w
ZXJ0eShOUElkZW50aWZpZQogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBtX29iamVjdE1hcC0+
Y29udmVydE5QVmFyaWFudFRvSlNWYWx1ZShleGVjLCBtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0
KCksICp2YWx1ZSk7CiAgICAgaWYgKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpIHsKQEAgLTIw
Niw3ICsyMDYsNyBAQCBib29sIE5QSlNPYmplY3Q6OnJlbW92ZVByb3BlcnR5KE5QSWRlbnRpCiAg
ICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKSB7CiAgICAgICAgIElkZW50aWZpZXIgaWRl
bnRpZmllciA9IGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVjLCBpZGVudGlmaWVyUmVw
KTsKICAgICAgICAgCkBAIC0yMzUsNyArMjM1LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjplbnVtZXJh
dGUoTlBJZGVudGlmaWVyKgogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVz
KGV4ZWMpOwogICAgIG1fanNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMo
bV9qc09iamVjdC5nZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRFbnVtUHJv
cGVydGllcyk7CkBAIC0yNTcsNyArMjU3LDcgQEAgYm9vbCBOUEpTT2JqZWN0Ojpjb25zdHJ1Y3Qo
Y29uc3QgTlBWYXJpYQogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAgICBDb25z
dHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBnZXRDb25zdHJ1Y3REYXRhKG1fanNPYmplY3QuZ2V0
KCksIGNvbnN0cnVjdERhdGEpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5j
cHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzks
NyArMTM5LDcgQEAgSlNWYWx1ZSBOUFJ1bnRpbWVPYmplY3RNYXA6OmNvbnZlcnROUFZhcgogCiB2
b2lkIE5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIE5QVmFyaWFudCYgdmFyaWFudCkKIHsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogCiAgICAgVk9JRF9UT19OUFZBUklBTlQodmFyaWFudCk7CiAgICAgCkBAIC0xODYsNyAr
MTg2LDcgQEAgYm9vbCBOUFJ1bnRpbWVPYmplY3RNYXA6OmV2YWx1YXRlKE5QT2JqZQogCiAgICAg
RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgCi0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGdldE9yQ3JlYXRlSlNPYmplY3QoZ2xv
YmFsT2JqZWN0LmdldCgpLCBucE9iamVjdCk7CiAKICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwpAQCAtMjY2LDcgKzI2Niw3IEBAIHZvaWQgTlBS
dW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXAKICAgICAgICAgcmV0dXJuOwogCiAgICAg
ewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVF
cnJvcihleGVjLCBzdHJpbmdUb1VTdHJpbmcoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkpKSk7CiAg
ICAgfQogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZy
YW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRnJhbWUuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDIsNyArNjQyLDcg
QEAgSlNWYWx1ZVJlZiBXZWJGcmFtZTo6anNXcmFwcGVyRm9yV29ybGQoSQogICAgIEpTRE9NV2lu
ZG93KiBnbG9iYWxPYmplY3QgPSBtX2NvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCh3
b3JsZC0+Y29yZVdvcmxkKCkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICByZXR1cm4gdG9SZWYoZXhlYywgdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIG5vZGVIYW5kbGUtPmNvcmVOb2RlKCkpKTsKIH0KIApAQCAt
NjU0LDcgKzY1NCw3IEBAIEpTVmFsdWVSZWYgV2ViRnJhbWU6OmpzV3JhcHBlckZvcldvcmxkKEkK
ICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0ID0gbV9jb3JlRnJhbWUtPnNjcmlwdCgpLT5n
bG9iYWxPYmplY3Qod29ybGQtPmNvcmVXb3JsZCgpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgcmV0dXJuIHRv
UmVmKGV4ZWMsIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCByYW5nZUhhbmRsZS0+Y29yZVJhbmdl
KCkpKTsKIH0KIApAQCAtNjcxLDcgKzY3MSw3IEBAIEpTVmFsdWVSZWYgV2ViRnJhbWU6OmNvbXB1
dGVkU3R5bGVJbmNsdWQKIAogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+
IHN0eWxlID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoc3RhdGljX2Nhc3Q8
SlNFbGVtZW50Kj4odG9KUyhlbGVtZW50KSktPmltcGwoKSwgdHJ1ZSk7CiAKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogICAgIHJldHVybiB0b1JlZihleGVjLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3R5bGUu
Z2V0KCkpKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODE1LDcgKzE4MTUs
NyBAQCB2b2lkIFdlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZShjCiAgICAgUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFJlc3VsdFZhbHVlOwogICAgIENvcmVJ
UEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBpZiAoSlNWYWx1ZSByZXN1bHRWYWx1ZSA9IG1fbWFp
bkZyYW1lLT5jb3JlRnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoc2NyaXB0LCB0cnVl
KS5qc1ZhbHVlKCkpIHsKICAgICAgICAgaWYgKChzZXJpYWxpemVkUmVzdWx0VmFsdWUgPSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShtX21haW5GcmFtZS0+anNDb250ZXh0KCksIHRvUmVm
KG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChtYWluVGhy
ZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSwgcmVzdWx0VmFsdWUpLCAwKSkpCiAgICAg
ICAgICAgICBkYXRhUmVmZXJlbmNlID0gc2VyaWFsaXplZFJlc3VsdFZhbHVlLT5kYXRhKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyMiBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRl
cyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisg
ICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBp
cyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24u
CisKKyAgICAgICAgKiBBcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHA6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OmNsZWFyTWVtb3J5Q2FjaGVzKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9DbGllbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BhZ2VQb3B1
cEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVBvcHVwQmxhY2tCZXJyeTo6
aW5zdGFsbERvbUZ1bmN0aW9uKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0R1bXBSZW5kZXJU
cmVlU3VwcG9ydC5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OmNvbXB1dGVk
U3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyk6CisKIDIwMTItMDYtMjEgIE1pa2UgRmVudG9uICA8
bWlmZW50b25AcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gSW5wdXQgbW9kZSBzaG91
bGQgYWRhcHQgYXV0b21hdGljYWxseSB0byBzZXR0aW5ncyBjaGFuZ2VzCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQXBpL0JsYWNrQmVycnlHbG9iYWwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAJKHJldmlz
aW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmxhY2tCZXJyeUds
b2JhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsMTAgQEAgdm9pZCBjbGVhck1l
bW9yeUNhY2hlcygpCiAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OnVzZXJJbnRlcmZhY2VUaHJl
YWRNZXNzYWdlQ2xpZW50KCktPmRpc3BhdGNoTWVzc2FnZShCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
Y3JlYXRlRnVuY3Rpb25DYWxsTWVzc2FnZShjbGVhck1lbW9yeUNhY2hlc0luQ29tcG9zaXRpbmdU
aHJlYWQpKTsKICNlbmRpZgogCi0gICAgY29sbGVjdEphdmFzY3JpcHRHYXJiYWdlTm93KCk7Cisg
ICAgeworICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKSk7CisgICAgICAgIGNvbGxlY3RKYXZhc2NyaXB0R2FyYmFnZU5vdygpOwor
ICAgIH0KIAogICAgIC8vIENsZWFuIGNhY2hlcyBhZnRlciBKUyBnYXJiYWdlIGNvbGxlY3Rpb24g
YmVjYXVzZSBKUyBHQyBjYW4KICAgICAvLyBnZW5lcmF0ZSBtb3JlIGRlYWQgcmVzb3VyY2VzLgpJ
bmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NsaWVudEV4dGVu
c2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVT
dXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DbGllbnRFeHRlbnNpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NCwxMSArODQsMTEgQEAgc3RhdGljIEpTU3RhdGljVmFsdWUgY2xpZW50
RXh0ZW5zaW9uU3RhdAogLy8gRklYTUU6IFJldmlzaXQgdGhlIGNyZWF0aW9uIG9mIHRoaXMgY2xh
c3MgYW5kIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBiZXN0IHdheSB0byBhcHByb2FjaCBpdC4KIHZv
aWQgYXR0YWNoRXh0ZW5zaW9uT2JqZWN0VG9GcmFtZShGcmFtZSogZnJhbWUsIFdlYlBhZ2VDbGll
bnQqIGNsaWVudCkKIHsKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKLQogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBmcmFtZS0+c2NyaXB0KCktPndp
bmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+d2luZG93KCk7CiAKICAgICBKU0M6
OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CisKICAgICBKU0NvbnRleHRSZWYgc2NyaXB0Q3R4ID0gdG9SZWYo
ZXhlYyk7CiAKICAgICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uID0ga0pTQ2xhc3NEZWZp
bml0aW9uRW1wdHk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBv
cnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1BhZ2VQb3B1cEJsYWNrQmVycnkuY3BwCShyZXZpc2lv
biAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvUGFn
ZVBvcHVwQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiwxMyArMTIyLDEyIEBA
IHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHBvcFVwRXh0ZW5zaW9uU3RhdGkKIAogdm9pZCBQYWdlUG9w
dXBCbGFja0JlcnJ5OjppbnN0YWxsRG9tRnVuY3Rpb24oRnJhbWUqIGZyYW1lKQogewotICAgIEpT
Qzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAgSlNET01X
aW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZnJhbWUsIG1haW5UaHJlYWROb3JtYWxXb3Js
ZCgpKTsKICAgICBBU1NFUlQod2luZG93KTsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0g
d2luZG93LT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKGV4ZWMpOworICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IDo6dG9SZWYo
ZXhlYyk7CiAgICAgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0ID0gSlNDb250ZXh0R2V0R2xvYmFs
T2JqZWN0KGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnQuY3BwCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsOCArMTQx
LDggQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OnNjYWxlUGFnZUJ5KAogCiBKU1ZhbHVl
UmVmIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJ
bmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQogewotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9K
Uyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBpZiAoIXZhbHVl
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgSlNW
YWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Vm
bC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhh
aG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xv
YmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
aGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcg
SlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQg
dGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5l
ZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBld2svZXdrX2ZyYW1lLmNwcDoKKyAgICAgICAg
KGV3a19mcmFtZV9zY3JpcHRfZXhlY3V0ZSk6CisgICAgICAgICogZXdrL2V3a192aWV3LmNwcDoK
KyAgICAgICAgKGV3a192aWV3X2pzX29iamVjdF9hZGQpOgorCiAyMDEyLTA2LTE5ICBTZXJnaW8g
VmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIENhbGxpbmcgbmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBjYXVzZXMgYXNzZXJ0aW9uIGZhaWx1cmU6IG1fdmVy
aWZpZXIuaXNTYWZlVG9Vc2UoKQpJbmRleDogU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAJ
KHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NTUsOCArNDU1LDggQEAgY2hhciogZXdrX2ZyYW1lX3Njcmlw
dF9leGVjdXRlKEV2YXNfT2JqZQogICAgIGlmICghcmVzdWx0IHx8ICghcmVzdWx0LmlzQm9vbGVh
bigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gc21hcnREYXRhLT5mcmFtZS0+c2Ny
aXB0KCktPmdsb2JhbE9iamVjdChXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmds
b2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIHJlc3Vs
dFN0cmluZyA9IFdlYkNvcmU6OnVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpKTsKICAgICByZXR1cm4gc3RyZHVwKHJlc3VsdFN0cmluZy51dGY4KCkuZGF0
YSgpKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAJKHJldmlzaW9u
IDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwNDUsOCArNDA0NSw4IEBAIEVpbmFfQm9vbCBld2tfdmlld19qc19vYmplY3Rf
YWRkKEV2YXNfT2IKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgZmFsc2UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEs
IHByaXYsIGZhbHNlKTsKIAotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogICAgIFdlYkNvcmU6OkpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2lu
ZG93KHByaXYtPm1haW5GcmFtZSwgV2ViQ29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwor
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sod2luZG93LT5nbG9iYWxFeGVjKCkpOwogICAgIEpT
Qzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3Q7CiAgICAgcm9vdCA9IHByaXYtPm1haW5GcmFt
ZS0+c2NyaXB0KCktPmJpbmRpbmdSb290T2JqZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxt
aGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNH
bG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5l
dyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4
dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAg
bmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0ay5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6Omdj
Q291bnRKYXZhc2NyaXB0T2JqZWN0cyk6CisKIDIwMTItMDYtMjEgIERhbmllbCBEcmFrZSAgPGRz
ZEBsYXB0b3Aub3JnPgogCiAgICAgICAgIFtHVEtdIEJhY2twb3J0IHJ1bi1maWxlLWNob29zZXIg
dG8gV2ViS2l0MQpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCShyZXZpc2lvbiAxMjA5
MjYpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDAsNyArNjAwLDcgQEAgdm9pZCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdjQ29sbGVjdAogCiB1bnNpZ25lZCBsb25nIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0azo6Z2NDb3VudEphdmFzY3JpcHRPYmplY3RzKCkKIHsKLSAgICBKU0M6
OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9j
a0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0
dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2OCBAQAorMjAx
Mi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAg
ICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQg
SlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBw
YXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBp
bnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uCisKKyAgICAgICAg
KiBET00vV2ViRE9NT3BlcmF0aW9ucy5tbToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogTWlz
Yy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2
YVNjcmlwdE9iamVjdHNDb3VudF0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZh
U2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNz
IGphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnRdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0
YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3RlZEdsb2JhbE9iamVjdHNDb3VudF0pOgorICAgICAg
ICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50
c10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0VHlwZUNv
dW50c10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBzaG91bGRQcmludEV4Y2VwdGlv
bnNdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3Mgc2V0U2hvdWxkUHJpbnRFeGNlcHRp
b25zOl0pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBtZW1vcnlTdGF0aXN0aWNzXSk6
CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRSZWZlcmVuY2VkT2JqZWN0
c0NvdW50XSk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
OjppbnZva2UpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
Omludm9rZURlZmF1bHQpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6Z2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjpyZW1vdmVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aGFzTWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6TmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjplbnVtZXJhdGUpOgorICAgICAgICAoV2ViS2l0OjpO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmFkZFZhbHVlVG9BcnJheSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRv
RXhlY1N0YXRlKToKKyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1t
OgorICAgICAgICAoV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OndhbnRzQWxsU3RyZWFtcyk6Cisg
ICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAgICgtW1dl
Yk5ldHNjYXBlUGx1Z2luVmlldyBzZW5kRXZlbnQ6aXNEcmF3UmVjdDpdKToKKyAgICAgICAgKC1b
V2ViTmV0c2NhcGVQbHVnaW5WaWV3IHByaXZhdGVCcm93c2luZ01vZGVEaWRDaGFuZ2VdKToKKyAg
ICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHNldFdpbmRvd0lmTmVjZXNzYXJ5XSk6Cisg
ICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBjcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2Jq
ZWN0XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBnZXRGb3JtVmFsdWU6XSk6
CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBldmFsdWF0ZUphdmFTY3JpcHRQbHVn
aW5SZXF1ZXN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgd2ViRnJhbWU6
ZGlkRmluaXNoTG9hZFdpdGhSZWFzb246XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2lu
VmlldyBsb2FkUGx1Z2luUmVxdWVzdDpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5W
aWV3IF9wcmludGVkUGx1Z2luQml0bWFwXSk6CisgICAgICAgICogUGx1Z2lucy9XZWJQbHVnaW5D
b250cm9sbGVyLm1tOgorICAgICAgICAoK1tXZWJQbHVnaW5Db250cm9sbGVyIHBsdWdJblZpZXdX
aXRoQXJndW1lbnRzOmZyb21QbHVnaW5QYWNrYWdlOl0pOgorICAgICAgICAoLVtXZWJQbHVnaW5D
b250cm9sbGVyIHN0b3BPbmVQbHVnaW46XSk6CisgICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xs
ZXIgZGVzdHJveU9uZVBsdWdpbjpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxlciBz
dGFydEFsbFBsdWdpbnNdKToKKyAgICAgICAgKC1bV2ViUGx1Z2luQ29udHJvbGxlciBhZGRQbHVn
aW46XSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJh
bWUgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOmZvcmNlVXNlckdlc3R1
cmU6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
RnJvbVN0cmluZzp3aXRoR2xvYmFsT2JqZWN0OmluU2NyaXB0V29ybGQ6XSk6CisgICAgICAgICog
V2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tOgorICAgICAgICAoLVtXZWJTY3JpcHRD
YWxsRnJhbWUgc2NvcGVDaGFpbl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgZXZh
bHVhdGVXZWJTY3JpcHQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAg
ICAoK1tXZWJWaWV3IF9yZXBvcnRFeGNlcHRpb246aW5Db250ZXh0Ol0pOgorICAgICAgICAoLVtX
ZWJWaWV3IGFlRGVzY0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOl0pOgorICAgICAg
ICAoLVtXZWJWaWV3IF9jb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm86Zm9yRWxlbWVu
dDpdKToKKwogMjAxMi0wNi0yMCAgR2FycmV0IEtlbGx5ICA8Z2RrQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBNb3ZpbmcgY29va2llRW5hYmxlZC9zZXRDb29raWVFbmFibGVkIGZyb20gUGFnZSB0
byBTZXR0aW5ncy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25z
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25z
Lm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9ET00vV2ViRE9NT3Bl
cmF0aW9ucy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjcsOCArNjcsOSBAQCArIChET01FbGVtZW50
ICopX0RPTUVsZW1lbnRGcm9tSlNDb250ZXh0CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIHJl
dHVybiBraXQodG9FbGVtZW50KHRvSlModG9KUyhjb250ZXh0KSwgdmFsdWUpKSk7CisgICAgRXhl
Y1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKKyAgICByZXR1cm4ga2l0KHRvRWxlbWVudCh0b0pTKGV4ZWMsIHZhbHVlKSkpOwogfQogCiAt
IChOU1N0cmluZyAqKV9tYXJrZXJUZXh0Rm9yTGlzdEl0ZW0KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291
cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNTgsMzEgKzU4LDMxIEBAICsgKE5TQXJyYXkgKilzdGF0aXN0aWNzCiAKICsgKHNpemVfdClq
YXZhU2NyaXB0T2JqZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkt
PmhlYXAub2JqZWN0Q291bnQoKTsKIH0KIAogKyAoc2l6ZV90KWphdmFTY3JpcHRHbG9iYWxPYmpl
Y3RzQ291bnQKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAg
ICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5nbG9iYWxP
YmplY3RDb3VudCgpOwogfQogCiArIChzaXplX3QpamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHND
b3VudAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBy
ZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9i
amVjdENvdW50KCk7CiB9CiAKICsgKHNpemVfdClqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2Jq
ZWN0c0NvdW50CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVj
dGVkR2xvYmFsT2JqZWN0Q291bnQoKTsKIH0KIAogKyAoTlNDb3VudGVkU2V0ICopamF2YVNjcmlw
dFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKSk7CiAgICAgCiAgICAgTlNDb3VudGVkU2V0ICpyZXN1bHQgPSBbTlNDb3Vu
dGVkU2V0IHNldF07CiAKQEAgLTk3LDcgKzk3LDcgQEAgKyAoTlNDb3VudGVkU2V0ICopamF2YVNj
cmlwdFByb3RlY3RlZE9iagogCiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0T2JqZWN0VHlw
ZUNvdW50cwogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICAKICAgICBOU0NvdW50ZWRTZXQgKnJlc3VsdCA9IFtOU0NvdW50ZWRTZXQgc2V0XTsKIApAQCAt
MTY3LDEzICsxNjcsMTMgQEAgKyAoc2l6ZV90KWdseXBoUGFnZUNvdW50CiAKICsgKEJPT0wpc2hv
dWxkUHJpbnRFeGNlcHRpb25zCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxE
YXRhKCkpOwogICAgIHJldHVybiBDb25zb2xlOjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKTsKIH0K
IAogKyAodm9pZClzZXRTaG91bGRQcmludEV4Y2VwdGlvbnM6KEJPT0wpcHJpbnQKIHsKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgQ29uc29sZTo6c2V0U2hv
dWxkUHJpbnRFeGNlcHRpb25zKHByaW50KTsKIH0KIApAQCAtMjAxLDcgKzIwMSw3IEBAICsgKE5T
RGljdGlvbmFyeSAqKW1lbW9yeVN0YXRpc3RpY3MKIHsKICAgICBXVEY6OkZhc3RNYWxsb2NTdGF0
aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0TWFsbG9jU3RhdGlzdGljcygp
OwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBz
aXplX3QgaGVhcFNpemUgPSBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAu
c2l6ZSgpOwogICAgIHNpemVfdCBoZWFwRnJlZSA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKS0+aGVhcC5jYXBhY2l0eSgpIC0gaGVhcFNpemU7CiAgICAgR2xvYmFsTWVtb3J5U3Rh
dGlzdGljcyBnbG9iYWxNZW1vcnlTdGF0cyA9IGdsb2JhbE1lbW9yeVN0YXRpc3RpY3MoKTsKQEAg
LTI0NSw3ICsyNDUsNyBAQCArIChzaXplX3QpamF2YVNjcmlwdE5vR0NBbGxvd2VkT2JqZWN0c0Nv
CiAKICsgKHNpemVfdClqYXZhU2NyaXB0UmVmZXJlbmNlZE9iamVjdHNDb3VudAogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICByZXR1cm4gSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5TdHJl
YW0ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2Fw
ZVBsdWdpblN0cmVhbS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzY4
LDcgKzM2OCw3IEBAIGJvb2wgV2ViTmV0c2NhcGVQbHVnaW5TdHJlYW06OndhbnRzQWxsU3QKICAg
ICBOUEVycm9yIGVycm9yOwogICAgIHsKICAgICAgICAgUGx1Z2luU3RvcERlZmVycmVyIGRlZmVy
cmVyKG1fcGx1Z2luVmlldy5nZXQoKSk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIGVycm9yID0gbV9wbHVnaW5GdW5jcy0+Z2V0dmFs
dWUobV9wbHVnaW4sIE5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zLCAmdmFsdWUpOwog
ICAgIH0KICAgICBpZiAoZXJyb3IgIT0gTlBFUlJfTk9fRVJST1IpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQkocmV2aXNp
b24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdp
blZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTY2OSw3ICs2NjksNyBAQCAtIChCT09MKXNlbmRF
dmVudDoodm9pZCopZXZlbnQgaXNEcmF3UmVjCiAgICAgLy8gU2V0IHRoZSBwbHVnaW5BbGxvd1Bv
cHVwIGZsYWcuCiAgICAgQVNTRVJUKF9ldmVudEhhbmRsZXIpOwogICAgIHsKLSAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgVXNlckdlc3R1
cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihfZXZlbnRIYW5kbGVyLT5jdXJyZW50RXZlbnRJ
c1VzZXJHZXN0dXJlKCkgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDogUG9zc2li
bHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwogICAgICAgICBhY2NlcHRlZEV2ZW50ID0gW19wbHVn
aW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+ZXZlbnQocGx1Z2luLCBldmVudCk7CiAgICAg
fQpAQCAtODUwLDcgKzg1MCw3IEBAIC0gKHZvaWQpcHJpdmF0ZUJyb3dzaW5nTW9kZURpZENoYW5n
ZQogCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBpZiAoW19w
bHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+c2V0dmFsdWUpCiAgICAgICAgICAgICBb
X3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5zZXR2YWx1ZShwbHVnaW4sIE5QTlZw
cml2YXRlTW9kZUJvb2wsICZ2YWx1ZSk7CiAgICAgfQpAQCAtOTkxLDcgKzk5MSw3IEBAIC0gKHZv
aWQpc2V0V2luZG93SWZOZWNlc3NhcnkKICAgICAgICAgaW5TZXRXaW5kb3cgPSBZRVM7ICAgICAg
ICAKICAgICAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgICAgIHsKLSAg
ICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgICAgICAgICAgbnBFcnIgPSBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5z
ZXR3aW5kb3cocGx1Z2luLCAmd2luZG93KTsKICAgICAgICAgfQogICAgICAgICBbc2VsZiBkaWRD
YWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAgLSAoTlBPYmplY3QgKilj
cmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZQogICAgIE5QRXJyb3IgZXJyb3I7CiAgICAgW3NlbGYg
d2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBlcnJvciA9IFtfcGx1Z2luUGFja2Fn
ZS5nZXQoKSBwbHVnaW5GdW5jc10tPmdldHZhbHVlKHBsdWdpbiwgTlBQVnBsdWdpblNjcmlwdGFi
bGVOUE9iamVjdCwgJnZhbHVlKTsKICAgICB9CiAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0
aW9uXTsKQEAgLTE0NjMsNyArMTQ2Myw3IEBAIC0gKEJPT0wpZ2V0Rm9ybVZhbHVlOihOU1N0cmlu
ZyAqKil2YWx1ZQogICAgIE5QRXJyb3IgZXJyb3I7CiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5G
dW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgICAgICBlcnJvciA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5G
dW5jc10tPmdldHZhbHVlKHBsdWdpbiwgTlBQVmZvcm1WYWx1ZSwgJmJ1ZmZlcik7CiAgICAgfQog
ICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNTk1LDcgKzE1OTUsNyBAQCAt
ICh2b2lkKWV2YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6CiAgICAgICAgIGlmIChbSlNQ
bHVnaW5SZXF1ZXN0IHNlbmROb3RpZmljYXRpb25dKSB7CiAgICAgICAgICAgICBbc2VsZiB3aWxs
Q2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAg
ICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJsbm90aWZ5KHBsdWdp
biwgW1VSTCBfd2ViX1VSTENTdHJpbmddLCBOUFJFU19ET05FLCBbSlNQbHVnaW5SZXF1ZXN0IG5v
dGlmeURhdGFdKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFtzZWxmIGRpZENhbGxQbHVn
SW5GdW5jdGlvbl07CkBAIC0xNjI3LDcgKzE2MjcsNyBAQCAtICh2b2lkKXdlYkZyYW1lOihXZWJG
cmFtZSAqKXdlYkZyYW1lIGRpCiAgICAgICAgIAogICAgIFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVu
Y3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+dXJs
bm90aWZ5KHBsdWdpbiwgW1tbcGx1Z2luUmVxdWVzdCByZXF1ZXN0XSBVUkxdIF93ZWJfVVJMQ1N0
cmluZ10sIHJlYXNvbiwgW3BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgIH0KICAgICBb
c2VsZiBkaWRDYWxsUGx1Z0luRnVuY3Rpb25dOwpAQCAtMTY3MSw3ICsxNjcxLDcgQEAgLSAodm9p
ZClsb2FkUGx1Z2luUmVxdWVzdDooV2ViUGx1Z2luUmVxdQogICAgICAgICAgICAgICAgIGlmIChb
cGx1Z2luUmVxdWVzdCBzZW5kTm90aWZpY2F0aW9uXSkgewogICAgICAgICAgICAgICAgICAgICBb
c2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgICAgICAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBbX3BsdWdpblBh
Y2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1Z2luLCBbW1twbHVnaW5SZXF1
ZXN0IHJlcXVlc3RdIFVSTF0gX3dlYl9VUkxDU3RyaW5nXSwgTlBFUlJfR0VORVJJQ19FUlJPUiwg
W3BsdWdpblJlcXVlc3Qgbm90aWZ5RGF0YV0pOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0yNDcxLDcg
KzI0NzEsNyBAQCAtIChOU0JpdG1hcEltYWdlUmVwICopX3ByaW50ZWRQbHVnaW5CaXRtCiAgICAg
Ly8gVGVsbCB0aGUgcGx1Z2luIHRvIHByaW50IGludG8gdGhlIEdXb3JsZAogICAgIFtzZWxmIHdp
bGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBs
dWdpbkZ1bmNzXS0+cHJpbnQocGx1Z2luLCAmbnBQcmludCk7CiAgICAgfQogICAgIFtzZWxmIGRp
ZENhbGxQbHVnSW5GdW5jdGlvbl07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dl
YlBsdWdpbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkK
QEAgLTk2LDEwICs5NiwxMCBAQCArIChOU1ZpZXcgKilwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czoo
TlNECiAgICAgTlNWaWV3ICp2aWV3ID0gbmlsOwogCiAgICAgaWYgKFt2aWV3RmFjdG9yeSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdJblZpZXdXaXRoQXJndW1lbnRzOildKSB7Ci0g
ICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAg
IHZpZXcgPSBbdmlld0ZhY3RvcnkgcGx1Z0luVmlld1dpdGhBcmd1bWVudHM6YXJndW1lbnRzXTsK
ICAgICB9IGVsc2UgaWYgKFt2aWV3RmFjdG9yeSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KHBsdWdpblZpZXdXaXRoQXJndW1lbnRzOildKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHZpZXcgPSBbdmlld0ZhY3RvcnkgcGx1
Z2luVmlld1dpdGhBcmd1bWVudHM6YXJndW1lbnRzXTsKICAgICB9CiAgICAgCkBAIC0xNDksMTAg
KzE0OSwxMCBAQCAtICh2b2lkKWRlYWxsb2MKIC0gKHZvaWQpc3RvcE9uZVBsdWdpbjooTlNWaWV3
ICopdmlldwogewogICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdl
YlBsdWdJblN0b3ApXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgICAgICBbdmlldyB3ZWJQbHVnSW5TdG9wXTsKICAgICB9IGVsc2UgaWYg
KFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z2luU3RvcCldKSB7Ci0gICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIFt2
aWV3IHBsdWdpblN0b3BdOwogICAgIH0KIH0KQEAgLTE2MCwxMCArMTYwLDEwIEBAIC0gKHZvaWQp
c3RvcE9uZVBsdWdpbjooTlNWaWV3ICopdmlldwogLSAodm9pZClkZXN0cm95T25lUGx1Z2luOihO
U1ZpZXcgKil2aWV3CiB7CiAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3Iod2ViUGx1Z0luRGVzdHJveSldKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIFt2aWV3IHdlYlBsdWdJbkRlc3Ryb3ldOwogICAg
IH0gZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5EZXN0
cm95KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICAgICAgW3ZpZXcgcGx1Z2luRGVzdHJveV07CiAgICAgfQogfQpAQCAtMTgwLDEwICsx
ODAsMTAgQEAgLSAodm9pZClzdGFydEFsbFBsdWdpbnMKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspIHsKICAgICAgICAgaWQgYVZpZXcgPSBbX3ZpZXdzIG9iamVjdEF0SW5kZXg6
aV07CiAgICAgICAgIGlmIChbYVZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQ
bHVnSW5TdGFydCldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIFthVmlldyB3ZWJQbHVnSW5TdGFydF07CiAg
ICAgICAgIH0gZWxzZSBpZiAoW2FWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1
Z2luU3RhcnQpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25K
U0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBbYVZpZXcgcGx1Z2luU3RhcnRdOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMjUyLDEwICsyNTIsMTAgQEAgLSAodm9pZClhZGRQbHVnaW46KE5TVmll
dyAqKXZpZXcKIAogICAgICAgICBMT0coUGx1Z2lucywgImluaXRpYWxpemluZyBwbHVnLWluICVA
Iiwgdmlldyk7CiAgICAgICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KHdlYlBsdWdJbkluaXRpYWxpemUpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBbdmlldyB3ZWJQbHVnSW5J
bml0aWFsaXplXTsKICAgICAgICAgfSBlbHNlIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKHBsdWdpbkluaXRpYWxpemUpXSkgewotICAgICAgICAgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBbdmlldyBwbHVn
aW5Jbml0aWFsaXplXTsKICAgICAgICAgfQogCkBAIC0yNjUsMTUgKzI2NSwxNSBAQCAtICh2b2lk
KWFkZFBsdWdpbjooTlNWaWV3ICopdmlldwogICAgICAgICBpZiAoX3N0YXJ0ZWQpIHsKICAgICAg
ICAgICAgIExPRyhQbHVnaW5zLCAic3RhcnRpbmcgcGx1Zy1pbiAlQCIsIHZpZXcpOwogICAgICAg
ICAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1Z0luU3Rh
cnQpXSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgICAgICBbdmlldyB3ZWJQbHVnSW5TdGFydF07
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IocGx1Z2luU3RhcnQpXSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAg
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgICAgICBbdmlldyBwbHVn
aW5TdGFydF07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChb
dmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldENvbnRhaW5pbmdXaW5kb3c6KV0p
IHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAgICAgICAgICAgICAgICAgW3ZpZXcgc2V0Q29udGFpbmluZ1dpbmRvdzpb
X2RvY3VtZW50VmlldyB3aW5kb3ddXTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC04NjcsOCArODY3LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OmV2YWx1YQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgCisgICAg
SlNMb2NrSG9sZGVyIGxvY2socGx1Z2luV29ybGQoKS0+Z2xvYmFsRGF0YSgpKTsKICAgICBTdHJv
bmc8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCgqcGx1Z2luV29ybGQoKS0+Z2xvYmFsRGF0
YSgpLCBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CiAgICAg
RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKQEAgLTkwNCw3
ICs5MDMsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2Ny
aXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVjdC0+Z2V0KGV4ZWMsIG1ldGhvZE5h
bWUpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0
Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKQEAgLTkzNyw3ICs5MzYsNyBAQCBib29sIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVj
dChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IG9iamVjdC0+bWV0
aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEob2JqZWN0LCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxU
eXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTk2OSw3ICs5NjgsNyBAQCBib29sIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6Y29uc3RyCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5X
b3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBDb25zdHJ1Y3REYXRh
IGNvbnN0cnVjdERhdGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gb2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5nZXRDb25zdHJ1Y3REYXRhKG9iamVjdCwgY29uc3RydWN0RGF0YSk7
CkBAIC0xMDAyLDcgKzEwMDEsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
Z2V0UHJvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhl
YygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7ICAgIAorICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5n
ZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFs
dWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7CkBAIC0xMDIzLDcgKzEwMjIsNyBAQCBib29s
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9i
amVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7ICAgIAorICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAK
ICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKICAg
ICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0
aCk7CkBAIC0xMDQ3LDcgKzEwNDYsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6c2V0UHJvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFs
RXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7ICAgIAorICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBkZW1h
cnNoYWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdDsKQEAgLTEwNzMsNyArMTA3Miw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjpzZXRQcm8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkp
LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsg
ICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIAogICAgIEpTVmFsdWUg
dmFsdWUgPSBkZW1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKICAg
ICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBmYWxzZSk7CkBAIC0xMDk4LDEyICsxMDk3LDEyIEBAIGJvb2wgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2lu
V29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICBpZiAoIW9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkgewogICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsgICAgCiAgICAgcmV0dXJuIHRydWU7CkBA
IC0xMTI1LDEyICsxMTI0LDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpy
ZW1vdmUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVj
KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgaWYgKCFvYmplY3QtPmhhc1By
b3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpIHsKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOyAgICAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExOTYsNyArMTE5
NSw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNNZXQKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQo
KS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICBKU1ZhbHVlIGZ1bmMgPSBvYmplY3QtPmdldChleGVjLCBtZXRob2ROYW1lKTsKICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiAhZnVuYy5pc1VuZGVmaW5lZCgp
OwpAQCAtMTIxOCw3ICsxMjE3LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OmVudW1lcgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4
ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFt
ZXMoZXhlYyk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQcm9wZXJ0eU5hbWVzKG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CkBA
IC0xMjYyLDcgKzEyNjEsNyBAQCBzdGF0aWMgYm9vbCBnZXRPYmplY3RJRChOZXRzY2FwZVBsdWdp
bkluCiAgICAgCiB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6YWRkVmFsdWVUb0Fy
cmF5KE5TTXV0YWJsZUFycmF5ICphcnJheSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewogICAgICAg
ICBbYXJyYXkgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50OlN0cmluZ1ZhbHVlVHlw
ZV1dOwpAQCAtMTY3Miw3ICsxNjcxLDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6Om1vdmVHbAogICAgICAgICByZXR1cm47CiAKICAgICB7Ci0gICAgICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIHN0cmluZ1RvVVN0
cmluZyhnbG9iYWxFeGNlcHRpb25TdHJpbmcoKSkpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEw
NCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBKU0M6OkpTR2xvYmFsT2Jq
ZWN0OwogdXNpbmcgSlNDOjpKU0xvY2s7CiB1c2luZyBKU0M6OkpTVmFsdWU7Ci11c2luZyBKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seTsKIAogLyoKIEhlcmUgaXMgdGhlIGN1cnJlbnQgYmVoYXZp
b3IgbWF0cml4IGZvciBmb3VyIHR5cGVzIG9mIG5hdmlnYXRpb25zOgpAQCAtNTk3LDggKzU5Niw4
IEBAIC0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3IKICAgICBpZiAoIXJl
c3VsdCB8fCAoIXJlc3VsdC5pc0Jvb2xlYW4oKSAmJiAhcmVzdWx0LmlzU3RyaW5nKCkgJiYgIXJl
c3VsdC5pc051bWJlcigpKSkKICAgICAgICAgcmV0dXJuIEAiIjsKIAotICAgIEpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBfcHJp
dmF0ZS0+Y29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxX
b3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAgICAgcmV0dXJuIHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKTsKIH0KIApAQCAtMTEyMyw4ICsxMTIyLDggQEAgLSAoTlNTdHJpbmcgKilfc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcgogICAgIGlmICghcmVzdWx0IHx8ICghcmVzdWx0LmlzQm9vbGVh
bigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpKQogICAgICAg
ICByZXR1cm4gQCIiOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
ICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGFueVdvcmxkR2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICByZXR1cm4gdXN0
cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0Rl
bGVnYXRlLm1tCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3NCw5ICsxNzQs
OSBAQCAtIChOU0FycmF5ICopc2NvcGVDaGFpbgogICAgIGlmICghX3ByaXZhdGUtPmRlYnVnZ2Vy
Q2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXldOwogCi0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluID0gX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSk7CiAgICAgaWYgKCFzY29w
ZUNoYWluLT5uZXh0KSAgLy8gZ2xvYmFsIGZyYW1lCiAgICAgICAgIHJldHVybiBbTlNBcnJheSBh
cnJheVdpdGhPYmplY3Q6X3ByaXZhdGUtPmdsb2JhbE9iamVjdF07CiAKQEAgLTIyOSwxMyArMjI5
LDEzIEBAIC0gKGlkKWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmluZyAqKXNjcmkKICAgICBpZiAo
IV9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICAvLyBJZiB0aGlzIGlz
IHRoZSBnbG9iYWwgY2FsbCBmcmFtZSBhbmQgdGhlcmUgaXMgbm8gZHluYW1pYyBnbG9iYWwgb2Jq
ZWN0LAogICAgIC8vIERhc2hjb2RlIGlzIGF0dGVtcHRpbmcgdG8gZXhlY3V0ZSBKUyBpbiB0aGUg
ZXZhbHVhdG9yIHVzaW5nIGEgc3RhbGUKICAgICAvLyBXZWJTY3JpcHRDYWxsRnJhbWUuIEluc3Rl
YWQsIHdlIG5lZWQgdG8gc2V0IHRoZSBkeW5hbWljIGdsb2JhbCBvYmplY3QKICAgICAvLyBhbmQg
ZXZhbHVhdGUgdGhlIEpTIGluIHRoZSBnbG9iYWwgb2JqZWN0J3MgZ2xvYmFsIGNhbGwgZnJhbWUu
CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IF9wcml2YXRlLT5kZWJ1Z2dlci0+
Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT5nbG9i
YWxEYXRhKCkpOworCiAgICAgaWYgKHNlbGYgPT0gX3ByaXZhdGUtPmRlYnVnZ2VyLT5nbG9iYWxD
YWxsRnJhbWUoKSAmJiAhZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9i
amVjdCkgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gX3ByaXZhdGUt
PmRlYnVnZ2VyLT5nbG9iYWxPYmplY3QoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01ODEsOCArNTgxLDggQEAgKyAodm9pZClf
cmVwb3J0RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4YwogICAgIGlmICghZXhjZXB0aW9uIHx8ICFj
b250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjU3RhdGUgPSB0b0pTKGNvbnRleHQp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWNTdGF0ZSk7CiAKICAgICAvLyBNYWtlIHN1cmUg
dGhlIGNvbnRleHQgaGFzIGEgRE9NV2luZG93IGdsb2JhbCBvYmplY3QsIG90aGVyd2lzZSB0aGlz
IGNvbnRleHQgZGlkbid0IG9yaWdpbmF0ZSBmcm9tIGEgV2ViVmlldy4KICAgICBpZiAoIXRvSlNE
T01XaW5kb3coZXhlY1N0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKQpAQCAtNDg1MSw3ICs0
ODUxLDcgQEAgLSAoTlNBcHBsZUV2ZW50RGVzY3JpcHRvciAqKWFlRGVzY0J5RXZhbAogICAgIEpT
VmFsdWUgcmVzdWx0ID0gY29yZUZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChzY3JpcHQs
IHRydWUpLmpzVmFsdWUoKTsKICAgICBpZiAoIXJlc3VsdCkgLy8gRklYTUU6IHBhc3MgZXJyb3Jz
CiAgICAgICAgIHJldHVybiAwOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2Jq
ZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpKTsKICAgICByZXR1cm4g
YWVEZXNjRnJvbUpTVmFsdWUoY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5U
aHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhlYygpLCByZXN1bHQpOwogfQogCkBAIC02NTYw
LDggKzY1NjAsOCBAQCAtICh2b2lkKV9ub3RpZmljYXRpb25zRGlkQ2xvc2U6KE5TQXJyYXkgCiAK
IC0gKEpTVmFsdWVSZWYpX2NvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbzooSlNDb250
ZXh0UmVmKWNvbnRleHQgZm9yRWxlbWVudDooSlNWYWx1ZVJlZil2YWx1ZQogewotICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9K
Uyhjb250ZXh0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBpZiAoIXZhbHVl
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgSlNW
YWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2
aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5l
bmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFs
RGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkx
MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFu
Z2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNM
b2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhh
dCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRz
IHByb3RlY3Rpb24uCisKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoKKyAgICAgICAgKFFX
ZWJGcmFtZVByaXZhdGU6OmFkZFF0U2VuZGVyVG9HbG9iYWxPYmplY3QpOgorICAgICAgICAoUVdl
YkZyYW1lOjphZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QpOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjppbmplY3RJbnRlcm5hbHNPYmplY3QpOgorICAgICAgICAoRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KToKKwogMjAxMi0wNi0yMSAgVGhp
YWdvIE1hcmNvcyBQLiBTYW50b3MgIDx0aGlhZ28uc2FudG9zQGludGVsLmNvbT4KIAogICAgICAg
ICBbV0syXVtRdF0gQ29sb3IgY2hvb3NlciBBUEkgbWlzc2luZwpJbmRleDogU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYmZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2ViZnJhbWUuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2ViZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDYsMTMgKzUwNiwxMiBAQCBzdGF0
aWMgSlNWYWx1ZVJlZiBxdFNlbmRlckNhbGxiYWNrKEpTQ29uCiAKIHZvaWQgUVdlYkZyYW1lUHJp
dmF0ZTo6YWRkUXRTZW5kZXJUb0dsb2JhbE9iamVjdCgpCiB7Ci0gICAgSlNDOjpKU0xvY2sgbG9j
ayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyogd2luZG93
ID0gdG9KU0RPTVdpbmRvdyhmcmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogICAgIFFf
QVNTRVJUKHdpbmRvdyk7CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xv
YmFsRXhlYygpOwogICAgIFFfQVNTRVJUKGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IDo6dG9SZWYoZXhlYyk7CiAg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHByb3BlcnR5TmFtZShBZG9wdCwgSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIl9fcXRfc2VuZGVyX18iKSk7CkBAIC02NTcsNyArNjU2LDYg
QEAgdm9pZCBRV2ViRnJhbWU6OmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iagogICAgICAgICByZXR1
cm47CiAjaWYgVVNFKEpTQykKICAgICBKU0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpWYWx1ZU93
bmVyc2hpcCB2YWx1ZU93bmVyc2hpcCA9IHN0YXRpY19jYXN0PEpTQzo6QmluZGluZ3M6OlF0SW5z
dGFuY2U6OlZhbHVlT3duZXJzaGlwPihvd25lcnNoaXApOwotICAgIEpTQzo6SlNMb2NrIGxvY2so
SlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0
b0pTRE9NV2luZG93KGQtPmZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgSlND
OjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdDsKICAgICBpZiAodmFsdWVPd25lcnNoaXAgPT0g
SlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6UXRPd25lcnNoaXApCkBAIC02NzUsNiArNjczLDcg
QEAgdm9pZCBRV2ViRnJhbWU6OmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iagogICAgIH0KIAogICAg
IEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTQzo6SlNPYmplY3QqIHJ1bnRpbWVPYmpl
Y3QgPQogICAgICAgICAgICAgSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5j
ZShvYmplY3QsIHJvb3QsIHZhbHVlT3duZXJzaGlwKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVj
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA4NiwxMyArMTA4NiwxMiBAQCB2b2lkIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjppbmplY3RJbnRlCiB7CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9
IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpK
U0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRv
dyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhjb3JlRnJhbWUsIG1haW5UaHJlYWROb3JtYWxXb3Js
ZCgpKTsKICAgICBRX0FTU0VSVCh3aW5kb3cpOwogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKICAgICBRX0FTU0VSVChleGVjKTsKKyAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSB0b1Jl
ZihleGVjKTsKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdChj
b250ZXh0KTsKQEAgLTExMTMsMTMgKzExMTIsMTIgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6cmVzZXRJbnRlcgogewogICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBRV2Vi
RnJhbWVQcml2YXRlOjpjb3JlKGZyYW1lKTsKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2Nr
IGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAgSlNET01XaW5kb3cqIHdp
bmRvdyA9IHRvSlNET01XaW5kb3coY29yZUZyYW1lLCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7
CiAgICAgUV9BU1NFUlQod2luZG93KTsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2lu
ZG93LT5nbG9iYWxFeGVjKCk7CiAgICAgUV9BU1NFUlQoZXhlYyk7CisgICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gdG9SZWYoZXhl
Yyk7CiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpyZXNldEludGVybmFsc09iamVjdChjb250ZXh0
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJL
aXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA2
LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xv
Y2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3Mg
aW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVy
YWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4KKworICAgICAgICAqIFdl
YkNvcmVTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2Ny
aXB0T2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0
R2xvYmFsT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2Ny
aXB0UHJvdGVjdGVkT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVTdGF0aXN0aWNzOjpq
YXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmVT
dGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cyk6CisgICAgICAg
ICogV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViRnJhbWU6OnN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHRJblNjcmlwdFdvcmxkKToKKyAgICAgICAgKiBXZWJKYXZhU2NyaXB0Q29sbGVjdG9y
LmNwcDoKKyAgICAgICAgKFdlYkphdmFTY3JpcHRDb2xsZWN0b3I6Om9iamVjdENvdW50KToKKyAg
ICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OnN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHRGcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYlZpZXc6OnJlcG9ydEV4Y2VwdGlv
bik6CisgICAgICAgIChXZWJWaWV3OjplbGVtZW50RnJvbUpTKToKKwogMjAxMi0wNi0yMCAgR2Fy
cmV0IEtlbGx5ICA8Z2RrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNb3ZpbmcgY29va2llRW5h
YmxlZC9zZXRDb29raWVFbmFibGVkIGZyb20gUGFnZSB0byBTZXR0aW5ncy4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNv
dXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTgsNyArOTgsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAg
ICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01X
aW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKICAgICByZXR1
cm4gU19PSzsKIH0KQEAgLTEwOSw3ICsxMDksNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRF
UjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291
bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuZ2xvYmFs
T2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEyMCw3ICsxMjAsNyBAQCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkK
ICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNH
bG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19P
SzsKIH0KQEAgLTEzMSw3ICsxMzEsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNv
cmVTdGF0aXN0CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291bnQgPSAo
VUlOVClKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkR2xv
YmFsT2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTEzOSw3ICsxMzksNyBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0CiBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIFdlYkNvcmVTdGF0aXN0aWNzOjpqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0
VHlwZUNvdW50cyggCiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJUHJvcGVydHlCYWcyKiogdHlw
ZU5hbWVzQW5kQ291bnRzKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpKTsKICAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBqc09iamVjdFR5cGVOYW1lcyhKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50
cygpKTsKICAgICB0eXBlZGVmIFR5cGVDb3VudFNldDo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7
CiAgICAgSXRlcmF0b3IgZW5kID0ganNPYmplY3RUeXBlTmFtZXMtPmVuZCgpOwpJbmRleDogU291
cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
d2luL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gMTIwOTI2KQorKysgU291cmNlL1dlYktpdC93aW4v
V2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDYgQEAgdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIHVzaW5nIEpTQzo6SlNHbG9iYWxPYmplY3Q7CiB1c2luZyBKU0M6OkpTTG9j
azsKIHVzaW5nIEpTQzo6SlNWYWx1ZTsKLXVzaW5nIEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5
OwogCiAjZGVmaW5lIEZMQVNIX1JFRFJBVyAwCiAKQEAgLTI1MjgsOCArMjUyNyw4IEBAIEhSRVNV
TFQgV2ViRnJhbWU6OnN0cmluZ0J5RXZhbHVhdGluZ0phdmEKICAgICBpZiAoIXJlc3VsdCB8fCAh
cmVzdWx0LmlzQm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAhcmVzdWx0LmlzTnVt
YmVyKCkpCiAgICAgICAgIHJldHVybiBTX09LOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGFueVdvcmxkR2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nID0gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgICpldmFsdWF0aW9uUmVzdWx0ID0gQlN0cmluZyhy
ZXN1bHRTdHJpbmcpLnJlbGVhc2UoKTsKIApJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViSmF2
YVNjcmlwdENvbGxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2Vi
SmF2YVNjcmlwdENvbGxlY3Rvci5jcHAJKHJldmlzaW9uIDEyMDkyNikKKysrIFNvdXJjZS9XZWJL
aXQvd2luL1dlYkphdmFTY3JpcHRDb2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEs
NyArMTExLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJKYXZhU2NyaXB0QwogICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOwogICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKICAgICAqY291bnQgPSAoVUlOVClKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiAxMjA5MjYpCisrKyBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE5NCw4ICszMTk0LDggQEAg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpzdHJpbgogICAgIGlmICghc2NyaXB0
RXhlY3V0aW9uUmVzdWx0KQogICAgICAgICByZXR1cm4gRV9GQUlMOwogICAgIGVsc2UgaWYgKHNj
cmlwdEV4ZWN1dGlvblJlc3VsdC5pc1N0cmluZygpKSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSBjb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxk
KCkpLT5nbG9iYWxFeGVjKCk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAgICAgICAgICpyZXN1bHQgPSBCU3RyaW5nKHVzdHJpbmdUb1N0cmluZyhzY3JpcHRFeGVjdXRp
b25SZXN1bHQuZ2V0U3RyaW5nKGV4ZWMpKSk7CiAgICAgfQogCkBAIC01ODUxLDggKzU4NTEsOCBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OnJlcG9yCiAgICAgaWYgKCFjb250
ZXh0IHx8ICFleGNlcHRpb24pCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICBKU0xvY2sg
bG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4
ZWNTdGF0ZSA9IHRvSlMoY29udGV4dCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVj
U3RhdGUpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IGhhcyBhIERPTVdpbmRvdyBn
bG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgdGhpcyBjb250ZXh0IGRpZG4ndCBvcmlnaW5hdGUgZnJv
bSBhIFdlYlZpZXcuCiAgICAgaWYgKCF0b0pTRE9NV2luZG93KGV4ZWNTdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKSkKQEAgLTU4NzgsOCArNTg3OCw5IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViVmlldzo6ZWxlbWUKICAgICBpZiAoIW5vZGVPYmplY3QpCiAgICAgICAgIHJldHVy
biBFX0ZBSUw7CiAKLSAgICBKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7
Ci0gICAgRWxlbWVudCogZWx0ID0gdG9FbGVtZW50KHRvSlModG9KUyhjb250ZXh0KSwgbm9kZU9i
amVjdCkpOworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhjb250ZXh0KTsKKyAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIEVsZW1lbnQqIGVsdCA9IHRvRWxlbWVu
dCh0b0pTKGV4ZWMsIG5vZGVPYmplY3QpKTsKICAgICBpZiAoIWVsdCkKICAgICAgICAgcmV0dXJu
IEVfRkFJTDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149392</attachid>
            <date>2012-06-25 16:46:36 -0700</date>
            <delta_ts>2012-06-27 12:13:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89123-20120625164636.patch</filename>
            <type>text/plain</type>
            <size>207363</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxMTkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBA
QAorMjAxMi0wNi0yNSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9BUElTaGltcy5oOgorICAg
ICAgICAoQVBJRW50cnlTaGltV2l0aG91dExvY2spOgorICAgICAgICAoSlNDOjpBUElFbnRyeVNo
aW1XaXRob3V0TG9jazo6QVBJRW50cnlTaGltV2l0aG91dExvY2spOiBBZGRlZCBhbiBleHRyYSBw
YXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIHRvIAorICAgICAgICBkZXRlcm1pbmUgd2hldGhl
ciB3ZSBzaG91bGQgcmVmIHRoZSBKU0dsb2JhbERhdGEgb3Igbm90LiBXZSB3YW50IHRvIHJlZiBh
bGwgdGhlIHRpbWUgZXhjZXB0IGZvciBpbiB0aGUgCisgICAgICAgIEhlYXBUaW1lciBjbGFzcyBi
ZWNhdXNlIHRpbWVyRGlkRmlyZSBjb3VsZCBydW4gYWZ0ZXIgc29tZWJvZHkgaGFzIHN0YXJ0ZWQg
dG8gdGVhciBkb3duIHRoYXQgcGFydGljdWxhciAKKyAgICAgICAgSlNHbG9iYWxEYXRhLCBzbyB3
ZSB3b3VsZG4ndCB3YW50IHRvIHJlc3VycmVjdCB0aGUgcmVmIGNvdW50IG9mIHRoYXQgSlNHbG9i
YWxEYXRhIGZyb20gMCBiYWNrIHRvIDEgYWZ0ZXIgCisgICAgICAgIGl0cyBkZXN0cnVjdGlvbiBo
YXMgYmVndW4uIAorICAgICAgICAoSlNDOjpBUElFbnRyeVNoaW1XaXRob3V0TG9jazo6fkFQSUVu
dHJ5U2hpbVdpdGhvdXRMb2NrKToKKyAgICAgICAgKEpTQzo6QVBJRW50cnlTaGltOjpBUElFbnRy
eVNoaW0pOgorICAgICAgICAoQVBJRW50cnlTaGltKToKKyAgICAgICAgKEpTQzo6QVBJRW50cnlT
aGltOjp+QVBJRW50cnlTaGltKToKKyAgICAgICAgKEpTQzo6QVBJRW50cnlTaGltOjppbml0KTog
RmFjdG9yZWQgb3V0IGNvbW1vbiBpbml0aWFsaXphdGlvbiBjb2RlIGZvciB0aGUgdmFyaW91cyBB
UElFbnRyeVNoaW0gY29uc3RydWN0b3JzLgorICAgICAgICBBbHNvIG1vdmVkIHRoZSB0aW1lb3V0
Q2hlY2tlciBzdG9wIGFuZCBzdGFydCBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0byBzdGFydCBhZnRl
ciB3ZSd2ZSBncmFiYmVkIHRoZSBBUEkgbG9jaworICAgICAgICBhbmQgYmVmb3JlIHdlJ3ZlIHJl
bGVhc2VkIGl0LCB3aGljaCBjYW4gb25seSBkb25lIGluIEFQSUVudHJ5U2hpbS4KKyAgICAgICAg
KEpTQzo6QVBJQ2FsbGJhY2tTaGltOjp+QVBJQ2FsbGJhY2tTaGltKTogV2Ugbm8gbG9uZ2VyIG5l
ZWQgdG8gc3luY2hyb25pemUgaGVyZS4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UmVmLmNwcDoK
KyAgICAgICAgKEpTR2xvYmFsQ29udGV4dENyZWF0ZSk6CisgICAgICAgIChKU0dsb2JhbENvbnRl
eHRDcmVhdGVJbkdyb3VwKToKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dFJlbGVhc2UpOgorICAg
ICAgICAoSlNDb250ZXh0Q3JlYXRlQmFja3RyYWNlKToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmOgorICAgICAgICAqIGhl
YXAvQ29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6dHJ5QWxsb2Nh
dGVTbG93Q2FzZSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVh
cDo6cHJvdGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OnVucHJvdGVjdCk6CisgICAgICAgIChK
U0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpzZXRBY3Rpdml0eUNhbGxi
YWNrKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWN0aXZpdHlDYWxsYmFjayk6CisgICAgICAgIChK
U0M6OkhlYXA6OnN3ZWVwZXIpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOiBDaGFuZ2VkIG1fYWN0
aXZpdHlDYWxsYmFjayBhbmQgbV9zd2VlcGVyIHRvIGJlIHJhdyBwb2ludGVycyByYXRoZXIgdGhh
biBPd25QdHJzIGJlY2F1c2UgdGhleSAKKyAgICAgICAgYXJlIG5vdyByZXNwb25zaWJsZSBmb3Ig
dGhlaXIgb3duIGxpZmV0aW1lLiBBbHNvIGNoYW5nZWQgdGhlIG9yZGVyIG9mIGRlY2xhcmF0aW9u
IG9mIHRoZSBHQ0FjdGl2aXR5Q2FsbGJhY2sKKyAgICAgICAgYW5kIHRoZSBJbmNyZW1lbnRhbFN3
ZWVwZXIgdG8gbWFrZSBzdXJlIHRoZXkncmUgdGhlIGxhc3QgdGhpbmdzIHRoYXQgZ2V0IGluaXRp
YWxpemVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gdG8gCisgICAgICAgIHByZXZlbnQgYW55IGlzc3Vl
cyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBKU0dsb2JhbERhdGEvSGVhcCB0aGV5
IG1pZ2h0IGNhcmUgYWJvdXQuCisgICAgICAgIChIZWFwKToKKyAgICAgICAgKiBoZWFwL0hlYXBU
aW1lci5jcHA6IFJlZmFjdG9yZWQgdG8gYWxsb3cgZm9yIHRocmVhZC1zYWZlIG9wZXJhdGlvbiBh
bmQgc2h1dGRvd24uCisgICAgICAgIChKU0M6OkhlYXBUaW1lcjo6fkhlYXBUaW1lcik6CisgICAg
ICAgIChKU0M6OkhlYXBUaW1lcjo6aW52YWxpZGF0ZSk6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpIZWFwVGltZXI6OmRpZFN0YXJ0Vk1TaHV0ZG93bik6IENhbGxlZCBhdCB0aGUgYmVn
aW5uaW5nIG9mIH5KU0dsb2JhbERhdGEuIElmIHdlJ3JlIG9uIHRoZSBzYW1lIHRocmVhZCAKKyAg
ICAgICAgdGhhdCB0aGUgSGVhcFRpbWVyIGlzIHJ1bm5pbmcgb24sIHdlIGtpbGwgdGhlIEhlYXBU
aW1lciBvdXJzZWx2ZXMuIElmIG5vdCwgdGhlbiB3ZSBzZXQgc29tZSBzdGF0ZSBpbiB0aGUgCisg
ICAgICAgIEhlYXBUaW1lciBhbmQgc2NoZWR1bGUgaXQgdG8gZmlyZSBpbW1lZGlhdGVseSBzbyB0
aGF0IGl0IGNhbiBub3RpY2UgYW5kIGtpbGwgaXRzZWxmLgorICAgICAgICAoSlNDOjpIZWFwVGlt
ZXI6OnRpbWVyRGlkRmlyZSk6IFdlIGdyYWIgb3VyIG11dGV4IGFuZCBjaGVjayBvdXIgSlNHbG9i
YWxEYXRhIHBvaW50ZXIuIElmIGl0IGhhcyBiZWVuIHplcm8tZWQKKyAgICAgICAgb3V0LCB0aGVu
IHdlIGtub3cgdGhlIFZNIGhhcyBzdGFydGVkIHRvIHNodXRkb3duIGFuZCB3ZSBzaG91bGQga2ls
bCBvdXJzZWx2ZXMuIE90aGVyd2lzZSwgZ3JhYiB0aGUgQVBJRW50cnlTaGltLAorICAgICAgICBi
dXQgd2l0aG91dCByZWYtaW5nIHRoZSBKU0dsb2JhbERhdGEgKHdlIGRvbid0IHdhbnQgdG8gYnJp
bmcgdGhlIEpTR2xvYmFsRGF0YSdzIHJlZi1jb3VudCBmcm9tIDAgdG8gMSkgaW4gY2FzZSAKKyAg
ICAgICAgd2Ugd2VyZSBpbnRlcnJ1cHRlZCBiZXR3ZWVuIHJlbGVhc2luZyBvdXIgbXV0ZXggYW5k
IHRyeWluZyB0byBncmFiIHRoZSBBUElMb2NrLgorICAgICAgICAqIGhlYXAvSGVhcFRpbWVyLmg6
CisgICAgICAgIChIZWFwVGltZXIpOgorICAgICAgICAqIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpkb1dvcmspOiBXZSBubyBs
b25nZXIgbmVlZCB0aGUgQVBJIHNoaW0gaGVyZSBzaW5jZSBIZWFwVGltZXI6OnRpbWVyRGlkRmly
ZSBoYW5kbGVzIAorICAgICAgICBhbGwgb2YgdGhhdCBmb3IgdXMuIAorICAgICAgICAoSlNDOjpJ
bmNyZW1lbnRhbFN3ZWVwZXI6OmNyZWF0ZSk6CisgICAgICAgICogaGVhcC9JbmNyZW1lbnRhbFN3
ZWVwZXIuaDoKKyAgICAgICAgKEluY3JlbWVudGFsU3dlZXBlcik6CisgICAgICAgICogaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmFsbG9j
YXRlU2xvd0Nhc2UpOgorICAgICAgICAqIGhlYXAvV2Vha0Jsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2Vha0Jsb2NrOjpyZWFwKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoZnVuY3Rp
b25HQyk6CisgICAgICAgIChmdW5jdGlvblJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KToKKyAgICAg
ICAgKGpzY21haW4pOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHA6CisgICAgICAg
IChKU0M6OmNoZWNrU3ludGF4KToKKyAgICAgICAgKEpTQzo6ZXZhbHVhdGUpOgorICAgICAgICAq
IHJ1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmg6CisgICAgICAgIChEZWZhdWx0R0NBY3Rpdml0
eUNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6RGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6Y3Jl
YXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRh
Ojp+SlNHbG9iYWxEYXRhKTogU2lnbmFscyB0byB0aGUgdHdvIEhlYXBUaW1lcnMgKEdDQWN0aXZp
dHlDYWxsYmFjayBhbmQgSW5jcmVtZW50YWxTd2VlcGVyKQorICAgICAgICB0aGF0IHRoZSBWTSBo
YXMgc3RhcnRlZCBzaHV0dGluZyBkb3duLiBJdCB0aGVuIHdhaXRzIHVudGlsIHRoZSBIZWFwVGlt
ZXIgaXMgZG9uZSB3aXRoIHdoYXRldmVyIGFjdGl2aXR5IAorICAgICAgICBpdCBuZWVkcyB0byBk
byBiZWZvcmUgY29udGludWluZyB3aXRoIGFueSBmdXJ0aGVyIGRlc3RydWN0aW9uLiBBbHNvIGFz
c2VydHMgdGhhdCB3ZSBkbyBub3QgY3VycmVudGx5IGhvbGQgdGhlIAorICAgICAgICBBUElMb2Nr
IGJlY2F1c2UgdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBjYXVzZSBkZWFkbG9jayB3aGVuIHdlIHRy
eSB0byBzaWduYWwgdG8gdGhlIEhlYXBUaW1lcnMgdXNpbmcgdGhlaXIgbXV0ZXhlcy4KKyAgICAg
ICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5jZSk6IFByb3RlY3QgdGhlIGluaXRp
YWxpemF0aW9uIGZvciB0aGUgc2hhcmVkIGluc3RhbmNlIHdpdGggdGhlIEdsb2JhbEpTTG9jay4K
KyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5jZUludGVybmFsKToKKyAg
ICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOiBDaGFuZ2UgdG8gYmUgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHJlZmluZyBhbmQg
CisgICAgICAgIGRlLXJlZmluZyBKU0dsb2JhbERhdGFzIG9uIHNlcGFyYXRlIHRocmVhZHMgc2lu
Y2Ugd2UgZG9uJ3QgZG8gaXQgdGhhdCBvZnRlbiBhbnl3YXlzLgorICAgICAgICAoSlNHbG9iYWxE
YXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjphcGlMb2NrKToKKyAgICAgICAgKiBy
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6
On5KU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToK
KyAgICAgICAgKiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpHbG9iYWxKU0xvY2s6Okdsb2JhbEpTTG9jayk6IEZvciBhY2Nlc3NpbmcgdGhlIHNoYXJl
ZCBpbnN0YW5jZS4KKyAgICAgICAgKEpTQzo6R2xvYmFsSlNMb2NrOjp+R2xvYmFsSlNMb2NrKToK
KyAgICAgICAgKEpTQzo6SlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIpOiBNdXRleExvY2tlciBm
b3IgSlNMb2NrLiBBbHNvIHJlZnMgdGhlIEpTR2xvYmFsRGF0YSB0byBrZWVwIGl0IGFsaXZlIHNv
IHRoYXQgCisgICAgICAgIGl0IGNhbiBzdWNjZXNzZnVsbHkgdW5sb2NrIGl0IGxhdGVyIHdpdGhv
dXQgaXQgZGlzYXBwZWFyaW5nIGZyb20gdW5kZXJuZWF0aCBpdC4KKyAgICAgICAgKEpTQzo6SlNM
b2NrSG9sZGVyOjp+SlNMb2NrSG9sZGVyKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpKU0xvY2sp
OgorICAgICAgICAoSlNDOjpKU0xvY2s6On5KU0xvY2spOgorICAgICAgICAoSlNDOjpKU0xvY2s6
OmxvY2spOiBVc2VzIHRoZSBzcGluIGxvY2sgZm9yIGd1YXJkaW5nIHRoZSBsb2NrIGNvdW50IGFu
ZCBvd25lciB0aHJlYWQgZmllbGRzLiBVc2VzIHRoZSBtdXRleCBmb3IgCisgICAgICAgIGFjdHVh
bGx5IHdhaXRpbmcgZm9yIGxvbmcgcGVyaW9kcy4gCisgICAgICAgIChKU0M6OkpTTG9jazo6dW5s
b2NrKToKKyAgICAgICAgKEpTQzo6SlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jayk6
CisgICAgICAgIChKU0M6OkpTTG9jazo6ZHJvcEFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6SlNM
b2NrOjpkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpKU0xvY2s6
OmdyYWJBbGxMb2Nrcyk6CisgICAgICAgIChKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9w
QWxsTG9ja3MpOgorICAgICAgICAoSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nrczo6fkRyb3BBbGxM
b2Nrcyk6CisgICAgICAgICogcnVudGltZS9KU0xvY2suaDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChHbG9iYWxKU0xvY2spOgorICAgICAgICAoSlNMb2NrSG9sZGVyKToKKyAgICAgICAgKEpT
TG9jayk6CisgICAgICAgIChEcm9wQWxsTG9ja3MpOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha0dD
TWFwLmg6CisgICAgICAgIChKU0M6OldlYWtHQ01hcDo6c2V0KToKKyAgICAgICAgKiB0ZXN0UmVn
RXhwLmNwcDoKKyAgICAgICAgKHJlYWxNYWluKToKKwogMjAxMi0wNi0yMyAgU2hlcmlmZiBCb3Qg
IDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjEyMTA1OC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxMjEx
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjk5LDcgKzI5OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0MK
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGV4ZWMtPmhlYXAoKS0+Y29sbGVjdEFsbEdhcmJhZ2Uo
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQpAQCAtMzA3
LDcgKzMwNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQygKICNp
Zm5kZWYgTkRFQlVHCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVsZWFz
ZUV4ZWN1dGFibGVNZW1vcnkoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
ZXhlYy0+Z2xvYmFsRGF0YSgpLnJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KQEAgLTY2Nyw5ICs2NjcsOSBAQCBz
dGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhCiAKIGludCBqc2NtYWluKGlu
dCBhcmdjLCBjaGFyKiogYXJndikKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOwotCisgICAgCiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFsRGF0YSA9IEpT
R2xvYmFsRGF0YTo6Y3JlYXRlKFRocmVhZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhlYXApOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEuZ2V0KCkpOwogCiAgICAgQ29tbWFuZExpbmUg
b3B0aW9uczsKICAgICBwYXJzZUFyZ3VtZW50cyhhcmdjLCBhcmd2LCBvcHRpb25zKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0UmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdFJlZ0V4cC5jcHAJKHJldmlzaW9uIDEyMTE4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0UmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1
LDkgKzQ5NSw4IEBAIHN0YXRpYyB2b2lkIHBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGEKIAog
aW50IHJlYWxNYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAgUmVmUHRyPEpTR2xvYmFsRGF0YT4gZ2xvYmFs
RGF0YSA9IEpTR2xvYmFsRGF0YTo6Y3JlYXRlKFRocmVhZFN0YWNrVHlwZUxhcmdlLCBMYXJnZUhl
YXApOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEuZ2V0KCkpOwogCiAgICAgQ29t
bWFuZExpbmUgb3B0aW9uczsKICAgICBwYXJzZUFyZ3VtZW50cyhhcmdjLCBhcmd2LCBvcHRpb25z
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJU2hpbXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSVNoaW1zLmgJKHJldmlzaW9uIDEyMTE4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJU2hpbXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsMzEgKzI4LDQwIEBACiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRl
ICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIK
ICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQVBJRW50cnlTaGltV2l0aG91dExvY2sgeworcHVibGlj
OgorICAgIGVudW0gUmVmR2xvYmFsRGF0YVRhZyB7IERvbnRSZWZHbG9iYWxEYXRhID0gMCwgUmVm
R2xvYmFsRGF0YSB9OworCiBwcm90ZWN0ZWQ6Ci0gICAgQVBJRW50cnlTaGltV2l0aG91dExvY2so
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29sIHJlZ2lzdGVyVGhyZWFkKQotICAgICAgICA6
IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAgIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCwgUmVmR2xvYmFsRGF0
YVRhZyBzaG91bGRSZWZHbG9iYWxEYXRhKQorICAgICAgICA6IG1fc2hvdWxkUmVmR2xvYmFsRGF0
YShzaG91bGRSZWZHbG9iYWxEYXRhKQorICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRh
KQogICAgICAgICAsIG1fZW50cnlJZGVudGlmaWVyVGFibGUod3RmVGhyZWFkRGF0YSgpLnNldEN1
cnJlbnRJZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YS0+aWRlbnRpZmllclRhYmxlKSkKICAgICB7
CisgICAgICAgIGlmIChzaG91bGRSZWZHbG9iYWxEYXRhKQorICAgICAgICAgICAgbV9nbG9iYWxE
YXRhLT5yZWYoKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKHJlZ2lzdGVyVGhyZWFkKTsKICAgICAg
ICAgaWYgKHJlZ2lzdGVyVGhyZWFkKQogICAgICAgICAgICAgZ2xvYmFsRGF0YS0+aGVhcC5tYWNo
aW5lVGhyZWFkcygpLmFkZEN1cnJlbnRUaHJlYWQoKTsKICAgICAgICAgbV9nbG9iYWxEYXRhLT5o
ZWFwLmFjdGl2aXR5Q2FsbGJhY2soKS0+c3luY2hyb25pemUoKTsKLSAgICAgICAgbV9nbG9iYWxE
YXRhLT50aW1lb3V0Q2hlY2tlci5zdGFydCgpOworICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAu
c3dlZXBlcigpLT5zeW5jaHJvbml6ZSgpOwogICAgIH0KIAogICAgIH5BUElFbnRyeVNoaW1XaXRo
b3V0TG9jaygpCiAgICAgewotICAgICAgICBtX2dsb2JhbERhdGEtPnRpbWVvdXRDaGVja2VyLnN0
b3AoKTsKICAgICAgICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUo
bV9lbnRyeUlkZW50aWZpZXJUYWJsZSk7CisgICAgICAgIGlmIChtX3Nob3VsZFJlZkdsb2JhbERh
dGEpCisgICAgICAgICAgICBtX2dsb2JhbERhdGEtPmRlcmVmKCk7CiAgICAgfQogCi1wcml2YXRl
OgorcHJvdGVjdGVkOgorICAgIFJlZkdsb2JhbERhdGFUYWcgbV9zaG91bGRSZWZHbG9iYWxEYXRh
OwogICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIElkZW50aWZpZXJUYWJsZSog
bV9lbnRyeUlkZW50aWZpZXJUYWJsZTsKIH07CkBAIC02MSwyMCArNzAsMzggQEAgY2xhc3MgQVBJ
RW50cnlTaGltIDogcHVibGljIEFQSUVudHJ5U2hpbQogcHVibGljOgogICAgIC8vIE5vcm1hbCBB
UEkgZW50cnkKICAgICBBUElFbnRyeVNoaW0oRXhlY1N0YXRlKiBleGVjLCBib29sIHJlZ2lzdGVy
VGhyZWFkID0gdHJ1ZSkKLSAgICAgICAgOiBBUElFbnRyeVNoaW1XaXRob3V0TG9jaygmZXhlYy0+
Z2xvYmFsRGF0YSgpLCByZWdpc3RlclRocmVhZCkKLSAgICAgICAgLCBtX2xvY2soZXhlYykKKyAg
ICAgICAgOiBBUElFbnRyeVNoaW1XaXRob3V0TG9jaygmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWdp
c3RlclRocmVhZCwgUmVmR2xvYmFsRGF0YSkKKyAgICB7CisgICAgICAgIGluaXQoKTsKKyAgICB9
CisKKyAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIG5lY2Vzc2FyeSBmb3IgSGVhcFRpbWVyIHRv
IHByZXZlbnQgaXQgZnJvbSBhY2NpZGVudGFsbHkgcmVzdXJyZWN0aW5nIAorICAgIC8vIHRoZSBy
ZWYgY291bnQgb2YgYSAiZGVhZCIgSlNHbG9iYWxEYXRhLgorICAgIEFQSUVudHJ5U2hpbShKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIFJlZkdsb2JhbERhdGFUYWcgcmVmR2xvYmFsRGF0YSwgYm9v
bCByZWdpc3RlclRocmVhZCA9IHRydWUpCisgICAgICAgIDogQVBJRW50cnlTaGltV2l0aG91dExv
Y2soZ2xvYmFsRGF0YSwgcmVnaXN0ZXJUaHJlYWQsIHJlZkdsb2JhbERhdGEpCiAgICAgeworICAg
ICAgICBpbml0KCk7CiAgICAgfQogCiAgICAgLy8gSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvciBv
bmx5IGhhcyBhIGdsb2JhbERhdGEuCiAgICAgQVBJRW50cnlTaGltKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgYm9vbCByZWdpc3RlclRocmVhZCA9IHRydWUpCi0gICAgICAgIDogQVBJRW50cnlT
aGltV2l0aG91dExvY2soZ2xvYmFsRGF0YSwgcmVnaXN0ZXJUaHJlYWQpCi0gICAgICAgICwgbV9s
b2NrKGdsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KQorICAgICAgICA6IEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrKGdsb2Jh
bERhdGEsIHJlZ2lzdGVyVGhyZWFkLCBSZWZHbG9iYWxEYXRhKQogICAgIHsKKyAgICAgICAgaW5p
dCgpOworICAgIH0KKworICAgIH5BUElFbnRyeVNoaW0oKQorICAgIHsKKyAgICAgICAgbV9nbG9i
YWxEYXRhLT50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CisgICAgICAgIG1fZ2xvYmFsRGF0YS0+YXBp
TG9jaygpLnVubG9jaygpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU0xvY2sgbV9sb2NrOwor
ICAgIHZvaWQgaW5pdCgpCisgICAgeworICAgICAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5s
b2NrKCk7CisgICAgICAgIG1fZ2xvYmFsRGF0YS0+dGltZW91dENoZWNrZXIuc3RhcnQoKTsKKyAg
ICB9CiB9OwogCiBjbGFzcyBBUElDYWxsYmFja1NoaW0gewpAQCAtODgsNyArMTE1LDYgQEAgcHVi
bGljOgogCiAgICAgfkFQSUNhbGxiYWNrU2hpbSgpCiAgICAgewotICAgICAgICBtX2dsb2JhbERh
dGEtPmhlYXAuYWN0aXZpdHlDYWxsYmFjaygpLT5zeW5jaHJvbml6ZSgpOwogICAgICAgICB3dGZU
aHJlYWREYXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShtX2dsb2JhbERhdGEtPmlkZW50
aWZpZXJUYWJsZSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q29udGV4dFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NvbnRleHRSZWYuY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDYgQEAg
SlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0ZQogICAgIC8vIElmIHRoZSBh
cHBsaWNhdGlvbiB3YXMgbGlua2VkIGJlZm9yZSBKU0dsb2JhbENvbnRleHRDcmVhdGUgd2FzIGNo
YW5nZWQgdG8gdXNlIGEgdW5pcXVlIEpTR2xvYmFsRGF0YSwKICAgICAvLyB3ZSB1c2UgYSBzaGFy
ZWQgb25lIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICAgICBpZiAoTlNWZXJzaW9uT2ZM
aW5rVGltZUxpYnJhcnkoIkphdmFTY3JpcHRDb3JlIikgPD0gd2Via2l0Rmlyc3RWZXJzaW9uV2l0
aENvbmN1cnJlbnRHbG9iYWxDb250ZXh0cykgewotICAgICAgICBKU0xvY2sgbG9jayhMb2NrRm9y
UmVhbCk7CiAgICAgICAgIHJldHVybiBKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKHRvUmVm
KCZKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNlKCkpLCBnbG9iYWxPYmplY3RDbGFzcyk7CiAg
ICAgfQogI2VuZGlmIC8vIE9TKERBUldJTikKQEAgLTkwLDExICs4OSw5IEBAIEpTR2xvYmFsQ29u
dGV4dFJlZiBKU0dsb2JhbENvbnRleHRDcmVhdGUKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5n
KCk7CiAKLSAgICBKU0xvY2sgbG9jayhMb2NrRm9yUmVhbCk7CiAgICAgUmVmUHRyPEpTR2xvYmFs
RGF0YT4gZ2xvYmFsRGF0YSA9IGdyb3VwID8gUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+KHRvSlMo
Z3JvdXApKSA6IEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlw
ZVNtYWxsKTsKIAogICAgIEFQSUVudHJ5U2hpbSBlbnRyeVNoaW0oZ2xvYmFsRGF0YS5nZXQoKSwg
ZmFsc2UpOwotCiAgICAgZ2xvYmFsRGF0YS0+bWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMo
KTsKIAogICAgIGlmICghZ2xvYmFsT2JqZWN0Q2xhc3MpIHsKQEAgLTEyNCwxOCArMTIxLDE5IEBA
IEpTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRSZXRhaW4KIAogdm9pZCBKU0dsb2Jh
bENvbnRleHRSZWxlYXNlKEpTR2xvYmFsQ29udGV4dFJlZiBjdHgpCiB7CisgICAgSWRlbnRpZmll
clRhYmxlKiBzYXZlZElkZW50aWZpZXJUYWJsZTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pT
KGN0eCk7Ci0gICAgSlNMb2NrIGxvY2soZXhlYyk7CisgICAgeworICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKIAotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmds
b2JhbERhdGEoKTsKLSAgICBJZGVudGlmaWVyVGFibGUqIHNhdmVkSWRlbnRpZmllclRhYmxlID0g
d3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YS5pZGVu
dGlmaWVyVGFibGUpOworICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7CisgICAgICAgIHNhdmVkSWRlbnRpZmllclRhYmxlID0gd3RmVGhyZWFkRGF0
YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZ2xvYmFsRGF0YS5pZGVudGlmaWVyVGFibGUp
OwogCi0gICAgYm9vbCBwcm90ZWN0Q291bnRJc1plcm8gPSBIZWFwOjpoZWFwKGV4ZWMtPmR5bmFt
aWNHbG9iYWxPYmplY3QoKSktPnVucHJvdGVjdChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkp
OwotICAgIGlmIChwcm90ZWN0Q291bnRJc1plcm8pIHsKLSAgICAgICAgZ2xvYmFsRGF0YS5oZWFw
LmFjdGl2aXR5Q2FsbGJhY2soKS0+c3luY2hyb25pemUoKTsKLSAgICAgICAgZ2xvYmFsRGF0YS5o
ZWFwLnJlcG9ydEFiYW5kb25lZE9iamVjdEdyYXBoKCk7CisgICAgICAgIGJvb2wgcHJvdGVjdENv
dW50SXNaZXJvID0gSGVhcDo6aGVhcChleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT51bnBy
b3RlY3QoZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgaWYgKHByb3RlY3RD
b3VudElzWmVybykKKyAgICAgICAgICAgIGdsb2JhbERhdGEuaGVhcC5yZXBvcnRBYmFuZG9uZWRP
YmplY3RHcmFwaCgpOworICAgICAgICBnbG9iYWxEYXRhLmRlcmVmKCk7CiAgICAgfQotICAgIGds
b2JhbERhdGEuZGVyZWYoKTsKIAogICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRp
ZmllclRhYmxlKHNhdmVkSWRlbnRpZmllclRhYmxlKTsKIH0KQEAgLTE2Niw3ICsxNjQsNyBAQCBK
U0dsb2JhbENvbnRleHRSZWYgSlNDb250ZXh0R2V0R2xvYmFsQ29uCiBKU1N0cmluZ1JlZiBKU0Nv
bnRleHRDcmVhdGVCYWNrdHJhY2UoSlNDb250ZXh0UmVmIGN0eCwgdW5zaWduZWQgbWF4U3RhY2tT
aXplKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKLSAgICBKU0xvY2sgbG9j
ayhleGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIHVuc2lnbmVkIGNv
dW50ID0gMDsKICAgICBVU3RyaW5nQnVpbGRlciBidWlsZGVyOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDEy
MTE4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC02LDEwICs2
LDEzIEBAIEVYUE9SVFMKICAgICA/PzBDb2xsYXRvckBXVEZAQFFBRUBQQkRAWgogICAgID8/MERh
dGVJbnN0YW5jZUBKU0NAQElBRUBQQVZFeGVjU3RhdGVAMUBQQVZTdHJ1Y3R1cmVAMUBAWgogICAg
ID8/MERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2tASlNDQEBRQUVAUEFWSGVhcEAxQEBaCi0gICAg
Pz8wRHJvcEFsbExvY2tzQEpTTG9ja0BKU0NAQFFBRUBXNEpTTG9ja0JlaGF2aW9yQDJAQFoKKyAg
ICA/PzBEcm9wQWxsTG9ja3NASlNMb2NrQEpTQ0BAUUFFQFBBVkV4ZWNTdGF0ZUAyQEBaCisgICAg
Pz8wRHJvcEFsbExvY2tzQEpTTG9ja0BKU0NAQFFBRUBQQVZKU0dsb2JhbERhdGFAMkBAWgogICAg
ID8/MER5bmFtaWNHbG9iYWxPYmplY3RTY29wZUBKU0NAQFFBRUBBQVZKU0dsb2JhbERhdGFAMUBQ
QVZKU0dsb2JhbE9iamVjdEAxQEBaIAogICAgID8/MEludGVybmFsRnVuY3Rpb25ASlNDQEBJQUVA
UEFWSlNHbG9iYWxPYmplY3RAMUBQQVZTdHJ1Y3R1cmVAMUBAWgotICAgID8/MEpTTG9ja0BKU0NA
QFFBRUBQQVZFeGVjU3RhdGVAMUBAWgorICAgID8/MEpTTG9ja0hvbGRlckBKU0NAQFFBRUBBQVZK
U0dsb2JhbERhdGFAMUBAWgorICAgID8/MEpTTG9ja0hvbGRlckBKU0NAQFFBRUBQQVZFeGVjU3Rh
dGVAMUBAWgorICAgID8/MEpTTG9ja0hvbGRlckBKU0NAQFFBRUBQQVZKU0dsb2JhbERhdGFAMUBA
WgogICAgID8/ME1ENUBXVEZAQFFBRUBYWgogICAgID8/ME11dGV4QFdURkBAUUFFQFhaCiAgICAg
Pz8wUGFyYWxsZWxFbnZpcm9ubWVudEBXVEZAQFFBRUBQNkFYUEFYQFpJSEBaCkBAIC0zMiw2ICsz
NSw3IEBAIEVYUE9SVFMKICAgICA/PzFEcm9wQWxsTG9ja3NASlNMb2NrQEpTQ0BAUUFFQFhaCiAg
ICAgPz8xSlNHbG9iYWxEYXRhQEpTQ0BAUUFFQFhaCiAgICAgPz8xSlNHbG9iYWxPYmplY3RASlND
QEBRQUVAWFoKKyAgICA/PzFKU0xvY2tIb2xkZXJASlNDQEBRQUVAWFoKICAgICA/PzFNdXRleEBX
VEZAQFFBRUBYWgogICAgID8/MVJlZkNvdW50ZWRMZWFrQ291bnRlckBXVEZAQFFBRUBYWgogICAg
ID8/MVNvdXJjZVByb3ZpZGVyQ2FjaGVASlNDQEBRQUVAWFoKQEAgLTEyMyw3ICsxMjcsNiBAQCBF
WFBPUlRTCiAgICAgP2NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyQFdURkBAWUFJWFoKICAg
ICA/Y3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXNAV1RGQEBZQVhQQVhJQFoKICAgICA/Y3Vy
cmVudFRocmVhZEBXVEZAQFlBSVhaCi0gICAgP2N1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrQEpT
TG9ja0BKU0NAQFNBX05YWgogICAgID9jdXJyZW50VGltZUBXVEZAQFlBTlhaCiAgICAgP2RhdGFA
Q1N0cmluZ0BXVEZAQFFCRVBCRFhaCiAgICAgP2RhdGFMb2dAV1RGQEBZQVhQQkRaWgpAQCAtMjM1
LDEwICsyMzgsOSBAQCBFWFBPUlRTCiAgICAgP2pzT3duZWRTdHJpbmdASlNDQEBZQVBBVkpTU3Ry
aW5nQDFAUEFWSlNHbG9iYWxEYXRhQDFAQUJWVVN0cmluZ0AxQEBaCiAgICAgP2pzU3RyaW5nQEpT
Q0BAWUFQQVZKU1N0cmluZ0AxQFBBVkpTR2xvYmFsRGF0YUAxQEFCVlVTdHJpbmdAMUBAWgogICAg
ID9sZW5ndGhAQ1N0cmluZ0BXVEZAQFFCRUlYWgotICAgID9sb2NrQEpTTG9ja0BKU0NAQFNBWFc0
SlNMb2NrQmVoYXZpb3JAMkBAWgorICAgID9sb2NrQEpTTG9ja0BKU0NAQFFBRVhYWgogICAgID9s
b2NrQE11dGV4QFdURkBAUUFFWFhaCiAgICAgP2xvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0
aWNNdXRleEBXVEZAQFlBWFhaCi0gICAgP2xvY2tDb3VudEBKU0xvY2tASlNDQEBTQUhYWgogICAg
ID9tYXRjaEBSZWdFeHBASlNDQEBRQUVIQUFWSlNHbG9iYWxEYXRhQDJAQUJWVVN0cmluZ0AyQElB
QVY/JFZlY3RvckBIJDBDQUBAV1RGQEBAWgogICAgID9tYXRlcmlhbGl6ZVByb3BlcnR5TWFwQFN0
cnVjdHVyZUBKU0NAQEFBRVhBQVZKU0dsb2JhbERhdGFAMkBAWgogICAgID9tb25vdG9uaWNhbGx5
SW5jcmVhc2luZ1RpbWVAV1RGQEBZQU5YWgpAQCAtMzIzLDYgKzMyNSw3IEBAIEVYUE9SVFMKICAg
ICA/c3RvcFNhbXBsaW5nQEpTR2xvYmFsRGF0YUBKU0NAQFFBRVhYWgogICAgID9zdWJzdHJpbmdT
aGFyaW5nSW1wbEBVU3RyaW5nQEpTQ0BAUUJFP0FWMTJASUlAWgogICAgID9zdWdnZXN0ZWROZXdQ
cm9wZXJ0eVN0b3JhZ2VTaXplQFN0cnVjdHVyZUBKU0NAQFFBRUlYWgorICAgID9zd2VlcGVyQEhl
YXBASlNDQEBRQUVQQVZJbmNyZW1lbnRhbFN3ZWVwZXJAMkBYWgogICAgID9zeW50aGVzaXplUHJv
dG90eXBlQEpTVmFsdWVASlNDQEBRQkVQQVZKU09iamVjdEAyQFBBVkV4ZWNTdGF0ZUAyQEBaCiAg
ICAgP3RoaXNPYmplY3RARGVidWdnZXJDYWxsRnJhbWVASlNDQEBRQkVQQVZKU09iamVjdEAyQFha
CiAgICAgP3Rocm93RXJyb3JASlNDQEBZQT9BVkpTVmFsdWVAMUBQQVZFeGVjU3RhdGVAMUBWMjFA
QFoKQEAgLTM1Miw3ICszNTUsNyBAQCBFWFBPUlRTCiAgICAgP3RyeUZpbmlzaENyZWF0aW9uVW5p
bml0aWFsaXplZEBKU0FycmF5QEpTQ0BASUFFUEFWMTJAQUFWSlNHbG9iYWxEYXRhQDJASUBaCiAg
ICAgP3RyeUxvY2tATXV0ZXhAV1RGQEBRQUVfTlhaCiAgICAgP3R5cGVARGVidWdnZXJDYWxsRnJh
bWVASlNDQEBRQkU/QVc0VHlwZUAxMkBYWgotICAgID91bmxvY2tASlNMb2NrQEpTQ0BAU0FYVzRK
U0xvY2tCZWhhdmlvckAyQEBaCisgICAgP3VubG9ja0BKU0xvY2tASlNDQEBRQUVYWFoKICAgICA/
dW5sb2NrQE11dGV4QFdURkBAUUFFWFhaCiAgICAgP3VubG9ja0F0b21pY2FsbHlJbml0aWFsaXpl
ZFN0YXRpY011dGV4QFdURkBAWUFYWFoKICAgICA/dW5wcm90ZWN0QEhlYXBASlNDQEBRQUVfTlZK
U1ZhbHVlQDJAQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFj
ZS5jcHAJKHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCBDaGVja2VkQm9v
bGVhbiBDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVTCiAgICAgaWYgKGlzT3ZlcnNpemUoYnl0ZXMp
KQogICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVPdmVyc2l6ZShieXRlcywgb3V0UHRyKTsKICAg
ICAKKyAgICBBU1NFUlQobV9oZWFwLT5nbG9iYWxEYXRhKCktPmFwaUxvY2soKS5jdXJyZW50VGhy
ZWFkSXNIb2xkaW5nTG9jaygpKTsKICAgICBtX2hlYXAtPmRpZEFsbG9jYXRlKG1fYWxsb2NhdG9y
LmN1cnJlbnRDYXBhY2l0eSgpKTsKIAogICAgIGFsbG9jYXRlQmxvY2soKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDE1ICsxNjAs
OSBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBwcm9wb3J0aW9uYWxIZWFwU2l6CiAgICAgcmV0dXJu
IDEuMjUgKiBoZWFwU2l6ZTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRTaGFyZWRJ
bnN0YW5jZVRocmVhZFN0YXRlKCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkU2hhcmVkSW5z
dGFuY2VUaHJlYWRTdGF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgaWYgKCFK
U0xvY2s6OmxvY2tDb3VudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIUpT
TG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGdsb2JhbERhdGEtPmFwaUxvY2soKS5j
dXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNW
YWxpZFRocmVhZFN0YXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKQEAgLTE3Niw3ICsxNzAs
NyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFRocmVhZFN0YXRlKEpTCiAgICAgaWYgKGds
b2JhbERhdGEtPmlkZW50aWZpZXJUYWJsZSAhPSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50
aWZpZXJUYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZ2xvYmFsRGF0
YS0+aXNTaGFyZWRJbnN0YW5jZSgpICYmICFpc1ZhbGlkU2hhcmVkSW5zdGFuY2VUaHJlYWRTdGF0
ZSgpKQorICAgIGlmIChnbG9iYWxEYXRhLT5pc1NoYXJlZEluc3RhbmNlKCkgJiYgIWlzVmFsaWRT
aGFyZWRJbnN0YW5jZVRocmVhZFN0YXRlKGdsb2JhbERhdGEpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyNyw3ICszMjEsNyBAQCB2b2lkIEhlYXA6OmRp
ZEFiYW5kb24oc2l6ZV90IGJ5dGVzKQogdm9pZCBIZWFwOjpwcm90ZWN0KEpTVmFsdWUgaykKIHsK
ICAgICBBU1NFUlQoayk7Ci0gICAgQVNTRVJUKEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGlu
Z0xvY2soKSB8fCAhbV9nbG9iYWxEYXRhLT5pc1NoYXJlZEluc3RhbmNlKCkpOworICAgIEFTU0VS
VChtX2dsb2JhbERhdGEtPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsK
IAogICAgIGlmICghay5pc0NlbGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzM4LDcgKzMzMiw3
IEBAIHZvaWQgSGVhcDo6cHJvdGVjdChKU1ZhbHVlIGspCiBib29sIEhlYXA6OnVucHJvdGVjdChK
U1ZhbHVlIGspCiB7CiAgICAgQVNTRVJUKGspOwotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkgfHwgIW1fZ2xvYmFsRGF0YS0+aXNTaGFyZWRJbnN0YW5jZSgp
KTsKKyAgICBBU1NFUlQobV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9s
ZGluZ0xvY2soKSk7CiAKICAgICBpZiAoIWsuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTY5Miw2ICs2ODYsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dl
ZXBUb2dnCiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkdhcmJhZ2UgQ29sbGVj
dGlvbiIpOwogICAgIAogICAgIEdDUEhBU0UoQ29sbGVjdCk7CisgICAgQVNTRVJUKGdsb2JhbERh
dGEoKS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIEFTU0VS
VChnbG9iYWxEYXRhKCktPmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVu
dElkZW50aWZpZXJUYWJsZSgpKTsKICAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwogICAg
IEpBVkFTQ1JJUFRDT1JFX0dDX0JFR0lOKCk7CkBAIC03NzcsMTkgKzc3MiwxOSBAQCB2b2lkIEhl
YXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgSkFWQVNDUklQVENPUkVfR0Nf
RU5EKCk7CiB9CiAKLXZvaWQgSGVhcDo6c2V0QWN0aXZpdHlDYWxsYmFjayhQYXNzT3duUHRyPEdD
QWN0aXZpdHlDYWxsYmFjaz4gYWN0aXZpdHlDYWxsYmFjaykKK3ZvaWQgSGVhcDo6c2V0QWN0aXZp
dHlDYWxsYmFjayhHQ0FjdGl2aXR5Q2FsbGJhY2sqIGFjdGl2aXR5Q2FsbGJhY2spCiB7CiAgICAg
bV9hY3Rpdml0eUNhbGxiYWNrID0gYWN0aXZpdHlDYWxsYmFjazsKIH0KIAogR0NBY3Rpdml0eUNh
bGxiYWNrKiBIZWFwOjphY3Rpdml0eUNhbGxiYWNrKCkKIHsKLSAgICByZXR1cm4gbV9hY3Rpdml0
eUNhbGxiYWNrLmdldCgpOworICAgIHJldHVybiBtX2FjdGl2aXR5Q2FsbGJhY2s7CiB9CiAKIElu
Y3JlbWVudGFsU3dlZXBlciogSGVhcDo6c3dlZXBlcigpCiB7Ci0gICAgcmV0dXJuIG1fc3dlZXBl
ci5nZXQoKTsKKyAgICByZXR1cm4gbV9zd2VlcGVyOwogfQogCiB2b2lkIEhlYXA6OnNldEdhcmJh
Z2VDb2xsZWN0aW9uVGltZXJFbmFibGVkKGJvb2wgZW5hYmxlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxMCArOTksMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIE1hY2hpbmVUaHJlYWRzJiBtYWNoaW5lVGhyZWFkcygpIHsgcmV0dXJu
IG1fbWFjaGluZVRocmVhZHM7IH0KIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2
aXR5Q2FsbGJhY2sqIGFjdGl2aXR5Q2FsbGJhY2soKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBzZXRBY3Rpdml0eUNhbGxiYWNrKFBhc3NPd25QdHI8R0NBY3Rpdml0eUNhbGxiYWNr
Pik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0QWN0aXZpdHlDYWxsYmFjayhH
Q0FjdGl2aXR5Q2FsbGJhY2sqKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRH
YXJiYWdlQ29sbGVjdGlvblRpbWVyRW5hYmxlZChib29sKTsKIAotICAgICAgICBJbmNyZW1lbnRh
bFN3ZWVwZXIqIHN3ZWVwZXIoKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSW5jcmVtZW50
YWxTd2VlcGVyKiBzd2VlcGVyKCk7CiAKICAgICAgICAgLy8gdHJ1ZSBpZiBhbiBhbGxvY2F0aW9u
IG9yIGNvbGxlY3Rpb24gaXMgaW4gcHJvZ3Jlc3MKICAgICAgICAgaW5saW5lIGJvb2wgaXNCdXN5
KCk7CkBAIC0yMzcsMTAgKzIzNywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZG91Ymxl
IG1fbGFzdEdDTGVuZ3RoOwogICAgICAgICBkb3VibGUgbV9sYXN0Q29kZURpc2NhcmRUaW1lOwog
Ci0gICAgICAgIE93blB0cjxHQ0FjdGl2aXR5Q2FsbGJhY2s+IG1fYWN0aXZpdHlDYWxsYmFjazsK
LSAgICAgICAgT3duUHRyPEluY3JlbWVudGFsU3dlZXBlcj4gbV9zd2VlcGVyOwotICAgICAgICAK
ICAgICAgICAgRG91Ymx5TGlua2VkTGlzdDxFeGVjdXRhYmxlQmFzZT4gbV9jb21waWxlZENvZGU7
CisgICAgICAgIAorICAgICAgICBHQ0FjdGl2aXR5Q2FsbGJhY2sqIG1fYWN0aXZpdHlDYWxsYmFj
azsKKyAgICAgICAgSW5jcmVtZW50YWxTd2VlcGVyKiBtX3N3ZWVwZXI7CiAgICAgfTsKIAogICAg
IGlubGluZSBib29sIEhlYXA6OnNob3VsZENvbGxlY3QoKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcFRpbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwVGltZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsy
NiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhlYXBUaW1lci5oIgogCisj
aW5jbHVkZSAiQVBJU2hpbXMuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpT
U3RyaW5nLmgiCisjaW5jbHVkZSAiU2NvcGVDaGFpbi5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00Niw3ICs1MCw4IEBAIEhlYXBUaW1lcjo6SGVh
cFRpbWVyKEpTR2xvYmFsRGF0YSogZ2xvYmEKIAogSGVhcFRpbWVyOjp+SGVhcFRpbWVyKCkKIHsK
LSAgICBpbnZhbGlkYXRlKCk7CisgICAgQ0ZSdW5Mb29wUmVtb3ZlVGltZXIobV9ydW5Mb29wLmdl
dCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworICAgIENGUnVuTG9v
cFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKIH0KIAogdm9pZCBIZWFwVGltZXI6OnN5
bmNocm9uaXplKCkKQEAgLTYwLDE0ICs2NSwzNyBAQCB2b2lkIEhlYXBUaW1lcjo6c3luY2hyb25p
emUoKQogCiB2b2lkIEhlYXBUaW1lcjo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgQ0ZSdW5Mb29wUmVt
b3ZlVGltZXIobV9ydW5Mb29wLmdldCgpLCBtX3RpbWVyLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9u
TW9kZXMpOwotICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShtX3RpbWVyLmdldCgpKTsKKyAg
ICBtX2dsb2JhbERhdGEgPSAwOworICAgIENGUnVuTG9vcFRpbWVyU2V0TmV4dEZpcmVEYXRlKG1f
dGltZXIuZ2V0KCksIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc19kZWNhZGUpOworfQor
Cit2b2lkIEhlYXBUaW1lcjo6ZGlkU3RhcnRWTVNodXRkb3duKCkKK3sKKyAgICBpZiAoQ0ZSdW5M
b29wR2V0Q3VycmVudCgpID09IG1fcnVuTG9vcC5nZXQoKSkgeworICAgICAgICBpbnZhbGlkYXRl
KCk7CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFT
U0VSVCghbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2so
KSk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2h1dGRvd25NdXRleCk7CisgICAgaW52YWxp
ZGF0ZSgpOwogfQogCiB2b2lkIEhlYXBUaW1lcjo6dGltZXJEaWRGaXJlKENGUnVuTG9vcFRpbWVy
UmVmLCB2b2lkKiBpbmZvKQogewogICAgIEhlYXBUaW1lciogYWdlbnQgPSBzdGF0aWNfY2FzdDxI
ZWFwVGltZXIqPihpbmZvKTsKLSAgICBhZ2VudC0+ZG9Xb3JrKCk7CisgICAgYWdlbnQtPm1fc2h1
dGRvd25NdXRleC5sb2NrKCk7CisgICAgaWYgKCFhZ2VudC0+bV9nbG9iYWxEYXRhKSB7CisgICAg
ICAgIGFnZW50LT5tX3NodXRkb3duTXV0ZXgudW5sb2NrKCk7CisgICAgICAgIGRlbGV0ZSBhZ2Vu
dDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB7CisgICAgICAgIC8vIFdlIGRvbid0IHJl
ZiBoZXJlIHRvIHByZXZlbnQgdXMgZnJvbSByZXN1cnJlY3RpbmcgdGhlIHJlZiBjb3VudCBvZiBh
ICJkZWFkIiBKU0dsb2JhbERhdGEuCisgICAgICAgIEFQSUVudHJ5U2hpbSBzaGltKGFnZW50LT5t
X2dsb2JhbERhdGEsIEFQSUVudHJ5U2hpbVdpdGhvdXRMb2NrOjpEb250UmVmR2xvYmFsRGF0YSk7
CisgICAgICAgIGFnZW50LT5kb1dvcmsoKTsKKyAgICB9CisgICAgYWdlbnQtPm1fc2h1dGRvd25N
dXRleC51bmxvY2soKTsKIH0KIAogI2Vsc2UKQEAgLTgxLDYgKzEwOSwxMSBAQCBIZWFwVGltZXI6
On5IZWFwVGltZXIoKQogewogfQogCit2b2lkIEhlYXBUaW1lcjo6ZGlkU3RhcnRWTVNodXRkb3du
KCkKK3sKKyAgICBkZWxldGUgdGhpczsKK30KKwogdm9pZCBIZWFwVGltZXI6OnN5bmNocm9uaXpl
KCkKIHsKIH0KQEAgLTg5LDcgKzEyMiw2IEBAIHZvaWQgSGVhcFRpbWVyOjppbnZhbGlkYXRlKCkK
IHsKIH0KIAotCiAjZW5kaWYKICAgICAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFRpbWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcFRpbWVyLmgJKHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBUaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5l
IEhlYXBUaW1lcl9oCiAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgogCiAjaWYgVVNFKENGKQogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0Nv
cmVGb3VuZGF0aW9uLmg+CkBAIC00Niw3ICs0Nyw4IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIAog
ICAgIHZpcnR1YWwgfkhlYXBUaW1lcigpOwotICAgIAorCisgICAgdm9pZCBkaWRTdGFydFZNU2h1
dGRvd24oKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemUoKTsKICAgICB2aXJ0dWFsIHZv
aWQgZG9Xb3JrKCkgPSAwOwogICAgIApAQCAtNTksNiArNjEsOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
UmV0YWluUHRyPENGUnVuTG9vcFRpbWVyUmVmPiBtX3RpbWVyOwogICAgIFJldGFpblB0cjxDRlJ1
bkxvb3BSZWY+IG1fcnVuTG9vcDsKICAgICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgbV9jb250ZXh0
OworCisgICAgTXV0ZXggbV9zaHV0ZG93bk11dGV4OwogI2VuZGlmCiAgICAgCiBwcml2YXRlOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVw
ZXIuY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
bmNyZW1lbnRhbFN3ZWVwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBAIHN0
YXRpYyBjb25zdCBDRlRpbWVJbnRlcnZhbCBzd2VlcFRpbWVNdWwKIAogdm9pZCBJbmNyZW1lbnRh
bFN3ZWVwZXI6OmRvV29yaygpCiB7Ci0gICAgQVBJRW50cnlTaGltIHNoaW0obV9nbG9iYWxEYXRh
KTsKICAgICBkb1N3ZWVwKFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwogfQog
ICAgIApAQCAtNTUsOSArNTQsOSBAQCBJbmNyZW1lbnRhbFN3ZWVwZXI6OkluY3JlbWVudGFsU3dl
ZXBlcihICiB7CiB9CiAKLVBhc3NPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPiBJbmNyZW1lbnRh
bFN3ZWVwZXI6OmNyZWF0ZShIZWFwKiBoZWFwKQorSW5jcmVtZW50YWxTd2VlcGVyKiBJbmNyZW1l
bnRhbFN3ZWVwZXI6OmNyZWF0ZShIZWFwKiBoZWFwKQogewotICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgSW5jcmVtZW50YWxTd2VlcGVyKGhlYXAsIENGUnVuTG9vcEdldEN1cnJlbnQoKSkpOworICAg
IHJldHVybiBuZXcgSW5jcmVtZW50YWxTd2VlcGVyKGhlYXAsIENGUnVuTG9vcEdldEN1cnJlbnQo
KSk7CiB9CiAKIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzY2hlZHVsZVRpbWVyKCkKQEAgLTEw
OSw5ICsxMDgsOSBAQCB2b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6ZG9Xb3JrKCkKIHsKIH0KIAot
UGFzc093blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IEluY3JlbWVudGFsU3dlZXBlcjo6Y3JlYXRl
KEhlYXAqIGhlYXApCitJbmNyZW1lbnRhbFN3ZWVwZXIqIEluY3JlbWVudGFsU3dlZXBlcjo6Y3Jl
YXRlKEhlYXAqIGhlYXApCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbmNyZW1lbnRhbFN3
ZWVwZXIoaGVhcC0+Z2xvYmFsRGF0YSgpKSk7CisgICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbFN3
ZWVwZXIoaGVhcC0+Z2xvYmFsRGF0YSgpKTsKIH0KIAogdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6
OnN0YXJ0U3dlZXBpbmcoY29uc3QgSGFzaFNldDxNYXJrZWRCbG9jayo+JikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCShyZXZpc2lv
biAxMjExODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVw
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBIZWFwOwogICAgIAog
Y2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyIDogcHVibGljIEhlYXBUaW1lciB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8SW5jcmVtZW50YWxTd2VlcGVyPiBjcmVhdGUoSGVhcCopOwor
ICAgIHN0YXRpYyBJbmNyZW1lbnRhbFN3ZWVwZXIqIGNyZWF0ZShIZWFwKik7CiAgICAgdm9pZCBz
dGFydFN3ZWVwaW5nKGNvbnN0IEhhc2hTZXQ8TWFya2VkQmxvY2sqPiYgYmxvY2tTbmFwc2hvdCk7
CiAgICAgdmlydHVhbCB2b2lkIGRvV29yaygpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDEyMTE4MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNp
bmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTYsNiArNTcsNyBAQCBpbmxp
bmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0CiAgICAgCiB2b2lkKiBNYXJrZWRB
bGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoKQogeworICAgIEFTU0VSVChtX2hlYXAtPmdsb2Jh
bERhdGEoKS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogI2lmIENP
TExFQ1RfT05fRVZFUllfQUxMT0NBVElPTgogICAgIG1faGVhcC0+Y29sbGVjdEFsbEdhcmJhZ2Uo
KTsKICAgICBBU1NFUlQobV9oZWFwLT5tX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRp
b24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0Jsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3BwCShyZXZp
c2lvbiAxMjExODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsOCArMTI3LDEwIEBAIHZvaWQgV2Vha0Jsb2NrOjpyZWFw
KCkKICAgICAgICAgaWYgKHdlYWtJbXBsLT5zdGF0ZSgpID4gV2Vha0ltcGw6OkRlYWQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQod2Vha0ltcGwt
PmpzVmFsdWUoKS5hc0NlbGwoKSkpCisgICAgICAgIGlmIChIZWFwOjppc01hcmtlZCh3ZWFrSW1w
bC0+anNWYWx1ZSgpLmFzQ2VsbCgpKSkgeworICAgICAgICAgICAgQVNTRVJUKHdlYWtJbXBsLT5z
dGF0ZSgpID09IFdlYWtJbXBsOjpMaXZlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CiAKICAgICAgICAgd2Vha0ltcGwtPnNldFN0YXRlKFdlYWtJbXBsOjpEZWFkKTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAko
cmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxl
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIGJvb2wgY2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIEpTVmFsdWUqIHJldHVybmVkRXhjZXB0aW9uKQogewotICAgIEpTTG9jayBsb2NrKGV4
ZWMpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEFTU0VSVChleGVjLT5nbG9i
YWxEYXRhKCkuaWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRp
ZmllclRhYmxlKCkpOwogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFt
RXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CkBAIC01Myw3ICs1Myw3IEBAIGJvb2wg
Y2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCAKIAogSlNWYWx1ZSBldmFsdWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlKiByZXR1cm5lZEV4Y2VwdGlv
bikKIHsKLSAgICBKU0xvY2sgbG9jayhleGVjKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmlkZW50aWZpZXJUYWJsZSA9PSB3dGZU
aHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKICAgICBpZiAoZXhlYy0+Z2xv
YmFsRGF0YSgpLmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICBDUkFTSCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmgJ
KHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0
aXZpdHlDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHByb3RlY3Rl
ZDoKIAogY2xhc3MgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayA6IHB1YmxpYyBHQ0FjdGl2aXR5
Q2FsbGJhY2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPERlZmF1bHRHQ0FjdGl2
aXR5Q2FsbGJhY2s+IGNyZWF0ZShIZWFwKik7CisgICAgc3RhdGljIERlZmF1bHRHQ0FjdGl2aXR5
Q2FsbGJhY2sqIGNyZWF0ZShIZWFwKik7CiAKICAgICBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNr
KEhlYXAqKTsKIApAQCAtOTEsOSArOTEsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1pbmxp
bmUgUGFzc093blB0cjxEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrPiBEZWZhdWx0R0NBY3Rpdml0
eUNhbGxiYWNrOjpjcmVhdGUoSGVhcCogaGVhcCkKK2lubGluZSBEZWZhdWx0R0NBY3Rpdml0eUNh
bGxiYWNrKiBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGUoSGVhcCogaGVhcCkKIHsK
LSAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2soaGVhcCkp
OworICAgIHJldHVybiBuZXcgRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjayhoZWFwKTsKIH0KIAog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCwxMCBAQAogI2luY2x1
ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJBY3RpdmF0aW9uLmgi
CiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkdDQWN0aXZpdHlD
YWxsYmFjay5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkhvc3RDYWxs
UmV0dXJuVmFsdWUuaCIKKyNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRl
ICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpT
QVBJVmFsdWVXcmFwcGVyLmgiCkBAIC0xNzgsMTIgKzE4MCw5IEBAIEpTR2xvYmFsRGF0YTo6SlNH
bG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKIHsKICAgICBpbnRlcnByZXRlciA9IG5ldyBJbnRlcnBy
ZXRlcjsKIAotICAgIGlmIChpc1NoYXJlZEluc3RhbmNlKCkpCi0gICAgICAgIHR1cm5PZmZWZXJp
ZmllcigpOwotCiAgICAgLy8gTmVlZCB0byBiZSBjYXJlZnVsIHRvIGtlZXAgZXZlcnl0aGluZyBj
b25zaXN0ZW50IGhlcmUKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh0aGlzKTsKICAgICBJZGVudGlm
aWVyVGFibGUqIGV4aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUgPSB3dGZUaHJlYWREYXRhKCku
c2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShpZGVudGlmaWVyVGFibGUpOwotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgc3RydWN0dXJlU3RydWN0dXJlLnNldCgq
dGhpcywgU3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMpKTsKICAgICBkZWJ1Z2dlckFj
dGl2YXRpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBhY3RpdmF0aW9uU3RydWN0dXJlLnNl
dCgqdGhpcywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7CkBAIC0yMjIsNiArMjIxLDkgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFs
RGF0YVR5cAogCiBKU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQogeworICAgIEFTU0VSVCgh
bV9hcGlMb2NrLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOworICAgIGhlYXAuYWN0aXZp
dHlDYWxsYmFjaygpLT5kaWRTdGFydFZNU2h1dGRvd24oKTsKKyAgICBoZWFwLnN3ZWVwZXIoKS0+
ZGlkU3RhcnRWTVNodXRkb3duKCk7CiAgICAgaGVhcC5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwog
CiAgICAgZGVsZXRlIGludGVycHJldGVyOwpAQCAtMzExLDYgKzMxMyw3IEBAIGJvb2wgSlNHbG9i
YWxEYXRhOjpzaGFyZWRJbnN0YW5jZUV4aXN0cygKIAogSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERh
dGE6OnNoYXJlZEluc3RhbmNlKCkKIHsKKyAgICBHbG9iYWxKU0xvY2sgZ2xvYmFsTG9jazsKICAg
ICBKU0dsb2JhbERhdGEqJiBpbnN0YW5jZSA9IHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKICAg
ICBpZiAoIWluc3RhbmNlKSB7CiAgICAgICAgIGluc3RhbmNlID0gYWRvcHRSZWYobmV3IEpTR2xv
YmFsRGF0YShBUElTaGFyZWQsIFRocmVhZFN0YWNrVHlwZVNtYWxsLCBTbWFsbEhlYXApKS5sZWFr
UmVmKCk7CkBAIC0zMjEsNyArMzI0LDYgQEAgSlNHbG9iYWxEYXRhJiBKU0dsb2JhbERhdGE6OnNo
YXJlZEluc3RhbgogCiBKU0dsb2JhbERhdGEqJiBKU0dsb2JhbERhdGE6OnNoYXJlZEluc3RhbmNl
SW50ZXJuYWwoKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdM
b2NrKCkpOwogICAgIHN0YXRpYyBKU0dsb2JhbERhdGEqIHNoYXJlZEluc3RhbmNlOwogICAgIHJl
dHVybiBzaGFyZWRJbnN0YW5jZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiAr
MzUsNyBAQAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbnRyaW5zaWMuaCIKICNpbmNs
dWRlICJKSVRTdHVicy5oIgorI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVmFsdWUu
aCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJOdW1lcmljU3RyaW5ncy5oIgpA
QCAtNDYsOCArNDcsOCBAQAogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9TaW1wbGVTdGF0cy5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRT
cGVjaWZpYy5oPgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaWYgRU5BQkxFKFJF
R0VYUF9UUkFDSU5HKQpAQCAtMTUyLDcgKzE1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07
CiAjZW5kaWYKIAotICAgIGNsYXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEpT
R2xvYmFsRGF0YT4geworICAgIGNsYXNzIEpTR2xvYmFsRGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxKU0dsb2JhbERhdGE+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIC8vIFdlYkNv
cmUgaGFzIGEgb25lLXRvLW9uZSBtYXBwaW5nIG9mIHRocmVhZHMgdG8gSlNHbG9iYWxEYXRhczsK
ICAgICAgICAgLy8gZWl0aGVyIGNyZWF0ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBvbmNlCkBAIC0xODAsNiArMTgxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHZvaWQgbWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGlu
ZVRocmVhZHMoKS5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOyB9CiAKKyAgICBwcml2
YXRlOgorICAgICAgICBKU0xvY2sgbV9hcGlMb2NrOworCisgICAgcHVibGljOgogICAgICAgICBI
ZWFwIGhlYXA7IC8vIFRoZSBoZWFwIGlzIG91ciBmaXJzdCBkYXRhIG1lbWJlciB0byBlbnN1cmUg
dGhhdCBpdCdzIGRlc3RydWN0ZWQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIHRoYXQgcmVmZXJlbmNl
IGl0LgogCiAgICAgICAgIEdsb2JhbERhdGFUeXBlIGdsb2JhbERhdGFUeXBlOwpAQCAtNDA5LDYg
KzQxNCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5j
dGlvbihmbG9hdDY0LCBGbG9hdDY0KTsKICN1bmRlZiByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlv
bgogCisgICAgICAgIEpTTG9jayYgYXBpTG9jaygpIHsgcmV0dXJuIG1fYXBpTG9jazsgfQorCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
ICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw4ICsx
MTQsNiBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIGlubGluZSB2b2lkCiAKIEpTR2xv
YmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3QoKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJl
bnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwotCiAgICAgaWYgKG1fZGVidWdnZXIpCiAgICAgICAg
IG1fZGVidWdnZXItPmRldGFjaCh0aGlzKTsKIApAQCAtMTMwLDcgKzEyOCw3IEBAIHZvaWQgSlNH
bG9iYWxPYmplY3Q6OmRlc3Ryb3koSlNDZWxsKiBjZWwKIAogdm9pZCBKU0dsb2JhbE9iamVjdDo6
aW5pdChKU09iamVjdCogdGhpc1ZhbHVlKQogewotICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkpOworICAgIEFTU0VSVChnbG9iYWxEYXRhKCkuYXBpTG9jaygp
LmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgIAogICAgIG1fZ2xvYmFsU2NvcGVD
aGFpbi5zZXQoZ2xvYmFsRGF0YSgpLCB0aGlzLCBTY29wZUNoYWluTm9kZTo6Y3JlYXRlKDAsIHRo
aXMsICZnbG9iYWxEYXRhKCksIHRoaXMsIHRoaXNWYWx1ZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIK
KyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5j
bHVkZSAiU2NvcGVDaGFpbi5oIgogCkBAIC0zOCw5NCArMzksOTYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAjaWYgKE9TKERBUldJTikgfHwgVVNFKFBUSFJFQURTKSkKIAogLy8gQWNxdWlyZSB0aGlzIG11
dGV4IGJlZm9yZSBhY2Nlc3NpbmcgbG9jay1yZWxhdGVkIGRhdGEuCi1zdGF0aWMgcHRocmVhZF9t
dXRleF90IEpTTXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHB0aHJl
YWRfbXV0ZXhfdCBnaWFudEdsb2JhbEpTTG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7
CiAKLS8vIFRocmVhZC1zcGVjaWZpYyBrZXkgdGhhdCB0ZWxscyB3aGV0aGVyIGEgdGhyZWFkIGhv
bGRzIHRoZSBKU011dGV4LCBhbmQgaG93IG1hbnkgdGltZXMgaXQgd2FzIHRha2VuIHJlY3Vyc2l2
ZWx5LgotcHRocmVhZF9rZXlfdCBKU0xvY2tDb3VudDsKK0dsb2JhbEpTTG9jazo6R2xvYmFsSlNM
b2NrKCkKK3sKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJmdpYW50R2xvYmFsSlNMb2NrKTsKK30K
IAotc3RhdGljIHZvaWQgY3JlYXRlSlNMb2NrQ291bnQoKQorR2xvYmFsSlNMb2NrOjp+R2xvYmFs
SlNMb2NrKCkKIHsKLSAgICBwdGhyZWFkX2tleV9jcmVhdGUoJkpTTG9ja0NvdW50LCAwKTsKKyAg
ICBwdGhyZWFkX211dGV4X3VubG9jaygmZ2lhbnRHbG9iYWxKU0xvY2spOwogfQogCi1wdGhyZWFk
X29uY2VfdCBjcmVhdGVKU0xvY2tDb3VudE9uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKK0pTTG9j
a0hvbGRlcjo6SlNMb2NrSG9sZGVyKEV4ZWNTdGF0ZSogZXhlYykKKyAgICA6IG1fZ2xvYmFsRGF0
YSgmZXhlYy0+Z2xvYmFsRGF0YSgpKQoreworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxv
Y2soKTsKK30KIAotLy8gTG9jayBuZXN0aW5nIGNvdW50LgotaW50cHRyX3QgSlNMb2NrOjpsb2Nr
Q291bnQoKQorSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQorICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiB7Ci0gICAgcHRocmVhZF9vbmNl
KCZjcmVhdGVKU0xvY2tDb3VudE9uY2UsIGNyZWF0ZUpTTG9ja0NvdW50KTsKKyAgICBtX2dsb2Jh
bERhdGEtPmFwaUxvY2soKS5sb2NrKCk7Cit9CiAKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4ocHRocmVhZF9nZXRzcGVjaWZpYyhKU0xvY2tDb3VudCkpOworSlNMb2NrSG9s
ZGVyOjpKU0xvY2tIb2xkZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIDogbV9nbG9i
YWxEYXRhKCZnbG9iYWxEYXRhKQoreworICAgIG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmxvY2so
KTsKIH0KIAotc3RhdGljIHZvaWQgc2V0TG9ja0NvdW50KGludHB0cl90IGNvdW50KQorSlNMb2Nr
SG9sZGVyOjp+SlNMb2NrSG9sZGVyKCkKIHsKLSAgICBBU1NFUlQoY291bnQgPj0gMCk7Ci0gICAg
cHRocmVhZF9zZXRzcGVjaWZpYyhKU0xvY2tDb3VudCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y291bnQpKTsKKyAgICBtX2dsb2JhbERhdGEtPmFwaUxvY2soKS51bmxvY2soKTsKIH0KIAotSlNM
b2NrOjpKU0xvY2soRXhlY1N0YXRlKiBleGVjKQotICAgIDogbV9sb2NrQmVoYXZpb3IoZXhlYy0+
Z2xvYmFsRGF0YSgpLmlzU2hhcmVkSW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDogU2lsZW5jZUFz
c2VydGlvbnNPbmx5KQorSlNMb2NrOjpKU0xvY2soKQorICAgIDogbV9sb2NrQ291bnQoMCkKIHsK
LSAgICBsb2NrKG1fbG9ja0JlaGF2aW9yKTsKKyAgICBtX3NwaW5Mb2NrLkluaXQoKTsKIH0KIAot
SlNMb2NrOjpKU0xvY2soSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgIDogbV9sb2NrQmVo
YXZpb3IoZ2xvYmFsRGF0YS0+aXNTaGFyZWRJbnN0YW5jZSgpID8gTG9ja0ZvclJlYWwgOiBTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpCitKU0xvY2s6On5KU0xvY2soKQogewotICAgIGxvY2sobV9sb2Nr
QmVoYXZpb3IpOwogfQogCi12b2lkIEpTTG9jazo6bG9jayhKU0xvY2tCZWhhdmlvciBsb2NrQmVo
YXZpb3IpCit2b2lkIEpTTG9jazo6bG9jaygpCiB7Ci0jaWZkZWYgTkRFQlVHCi0gICAgLy8gTG9j
a2luZyAibm90IGZvciByZWFsIiBpcyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICBpZiAobG9j
a0JlaGF2aW9yID09IFNpbGVuY2VBc3NlcnRpb25zT25seSkKLSAgICAgICAgcmV0dXJuOwotI2Vu
ZGlmCisgICAgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkID0gV1RGOjpjdXJyZW50VGhy
ZWFkKCk7CisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRlciBob2xkZXIoJm1fc3BpbkxvY2sp
OworICAgICAgICBpZiAobV9vd25lclRocmVhZCA9PSBjdXJyZW50VGhyZWFkICYmIG1fbG9ja0Nv
dW50KSB7CisgICAgICAgICAgICBtX2xvY2tDb3VudCsrOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQogCi0gICAgcHRocmVhZF9vbmNlKCZjcmVhdGVKU0xvY2tDb3VudE9u
Y2UsIGNyZWF0ZUpTTG9ja0NvdW50KTsKKyAgICBtX2xvY2subG9jaygpOwogCi0gICAgaW50cHRy
X3QgY3VycmVudExvY2tDb3VudCA9IGxvY2tDb3VudCgpOwotICAgIGlmICghY3VycmVudExvY2tD
b3VudCAmJiBsb2NrQmVoYXZpb3IgPT0gTG9ja0ZvclJlYWwpIHsKLSAgICAgICAgaW50IHJlc3Vs
dCA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmSlNNdXRleCk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQo
cmVzdWx0LCAhcmVzdWx0KTsKKyAgICB7CisgICAgICAgIFNwaW5Mb2NrSG9sZGVyIGhvbGRlcigm
bV9zcGluTG9jayk7CisgICAgICAgIG1fb3duZXJUaHJlYWQgPSBjdXJyZW50VGhyZWFkOworICAg
ICAgICBBU1NFUlQoIW1fbG9ja0NvdW50KTsKKyAgICAgICAgbV9sb2NrQ291bnQgPSAxOwogICAg
IH0KLSAgICBzZXRMb2NrQ291bnQoY3VycmVudExvY2tDb3VudCArIDEpOwogfQogCi12b2lkIEpT
TG9jazo6dW5sb2NrKEpTTG9ja0JlaGF2aW9yIGxvY2tCZWhhdmlvcikKK3ZvaWQgSlNMb2NrOjp1
bmxvY2soKQogewotICAgIEFTU0VSVChsb2NrQ291bnQoKSk7CisgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogCi0jaWZkZWYgTkRFQlVHCi0gICAgLy8gTG9ja2luZyAi
bm90IGZvciByZWFsIiBpcyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICBpZiAobG9ja0JlaGF2
aW9yID09IFNpbGVuY2VBc3NlcnRpb25zT25seSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCisg
ICAgU3BpbkxvY2tIb2xkZXIgaG9sZGVyKCZtX3NwaW5Mb2NrKTsKKyAgICBtX2xvY2tDb3VudC0t
OwogCi0gICAgaW50cHRyX3QgbmV3TG9ja0NvdW50ID0gbG9ja0NvdW50KCkgLSAxOwotICAgIHNl
dExvY2tDb3VudChuZXdMb2NrQ291bnQpOwotICAgIGlmICghbmV3TG9ja0NvdW50ICYmIGxvY2tC
ZWhhdmlvciA9PSBMb2NrRm9yUmVhbCkgewotICAgICAgICBpbnQgcmVzdWx0ID0gcHRocmVhZF9t
dXRleF91bmxvY2soJkpTTXV0ZXgpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgIXJl
c3VsdCk7Ci0gICAgfQorICAgIGlmICghbV9sb2NrQ291bnQpCisgICAgICAgIG1fbG9jay51bmxv
Y2soKTsKIH0KIAogdm9pZCBKU0xvY2s6OmxvY2soRXhlY1N0YXRlKiBleGVjKQogewotICAgIGxv
Y2soZXhlYy0+Z2xvYmFsRGF0YSgpLmlzU2hhcmVkSW5zdGFuY2UoKSA/IExvY2tGb3JSZWFsIDog
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBleGVjLT5nbG9iYWxEYXRhKCkuYXBpTG9jaygp
LmxvY2soKTsKIH0KIAogdm9pZCBKU0xvY2s6OnVubG9jayhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgdW5sb2NrKGV4ZWMtPmdsb2JhbERhdGEoKS5pc1NoYXJlZEluc3RhbmNlKCkgPyBMb2NrRm9y
UmVhbCA6IFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmFw
aUxvY2soKS51bmxvY2soKTsKIH0KIAogYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdMb2NrKCkKIHsKLSAgICBwdGhyZWFkX29uY2UoJmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3Jl
YXRlSlNMb2NrQ291bnQpOwotICAgIHJldHVybiAhIXB0aHJlYWRfZ2V0c3BlY2lmaWMoSlNMb2Nr
Q291bnQpOworICAgIHJldHVybiBtX2xvY2tDb3VudCAmJiBtX293bmVyVGhyZWFkID09IFdURjo6
Y3VycmVudFRocmVhZCgpOwogfQogCiAvLyBUaGlzIGlzIGZhaXJseSBuYXN0eS4gIFdlIGFsbG93
IG11bHRpcGxlIHRocmVhZHMgdG8gcnVuIG9uIHRoZSBzYW1lCkBAIC0xNDksNyArMTUyLDcgQEAg
Ym9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKAogLy8gdGhpcyB0byBoYXBw
ZW4sIGFuZCB3ZXJlIGl0cyBzdGFjayB0byBncm93IGZ1cnRoZXIsIHRoZW4gaXQgbWF5IHBvdGVu
dGlhbGx5CiAvLyB3cml0ZSBvdmVyIHRoZSBzZWNvbmQgdGhyZWFkJ3MgY2FsbCBmcmFtZXMuCiAv
LwotLy8gSW4gYXZvaWQgSlMgc3RhY2sgY29ycnVwdGlvbiB3ZSBlbmZvcmNlIGEgcG9saWN5IG9m
IG9ubHkgZXZlciBhbGxvd2luZyB0d28KKy8vIFRvIGF2b2lkIEpTIHN0YWNrIGNvcnJ1cHRpb24g
d2UgZW5mb3JjZSBhIHBvbGljeSBvZiBvbmx5IGV2ZXIgYWxsb3dpbmcgdHdvCiAvLyB0aHJlYWRz
IHRvIHVzZSBhIEpTIGNvbnRleHQgY29uY3VycmVudGx5LCBhbmQgb25seSBhbGxvd2luZyB0aGUg
c2Vjb25kIG9mCiAvLyB0aGVzZSB0aHJlYWRzIHRvIGV4ZWN1dGUgdW50aWwgaXQgaGFzIGNvbXBs
ZXRlZCBhbmQgZnVsbHkgcmV0dXJuZWQgZnJvbSBpdHMKIC8vIG91dGVybW9zdCBjYWxsIGludG8g
SlNDLiAgV2UgZW5mb3JjZSB0aGlzIHBvbGljeSB1c2luZyAnbG9ja0Ryb3BEZXB0aCcuICBUaGUK
QEAgLTE1OCw3ICsxNjEsNyBAQCBib29sIEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xv
Y2soCiAvLyBzYW1lIHRocmVhZCBhZ2FpbiwgZW50ZXIgSlNDICh0aHJvdWdoIGV2YWx1YXRlIHNj
cmlwdCBvciBjYWxsIGZ1bmN0aW9uKSwgYW5kIGV4aXQKIC8vIGFnYWluIHRocm91Z2ggYSBjYWxs
YmFjaywgdGhlbiB0aGUgbG9ja3Mgd2lsbCBub3QgYmUgZHJvcHBlZCB3aGVuIERyb3BBbGxMb2Nr
cwogLy8gaXMgY2FsbGVkIChzaW5jZSBsb2NrRHJvcERlcHRoIGlzIG5vbi16ZXJvKS4gIFNpbmNl
IHRoaXMgdGhyZWFkIGlzIHN0aWxsIGhvbGRpbmcKLS8vIHRoZSBsb2Nrcywgb25seSBpdCB3aWxs
IHJlIGFibGUgdG8gcmUtZW50ZXIgSlNDIChlaXRoZXIgYmUgcmV0dXJuaW5nIGZyb20gdGhlCisv
LyB0aGUgbG9ja3MsIG9ubHkgaXQgd2lsbCBiZSBhYmxlIHRvIHJlLWVudGVyIEpTQyAoZWl0aGVy
IGJlIHJldHVybmluZyBmcm9tIHRoZQogLy8gY2FsbGJhY2ssIG9yIGJ5IHJlLWVudGVyaW5nIHRo
cm91Z2ggYW5vdGhlciBjYWxsIHRvIGV2YXVsYXRlIHNjcmlwdCBvciBjYWxsCiAvLyBmdW5jdGlv
bikuCiAvLwpAQCAtMTY4LDYxICsxNzEsODQgQEAgYm9vbCBKU0xvY2s6OmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdMb2NrKAogLy8gb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIG1hZGUgLSB0aG91Z2gg
aW1wbGVtZW50aW5nIHRoZSBsZXNzIHJlc3RyaWN0aXZlIHBvbGljeQogLy8gd291bGQgbGlrZWx5
IGluY3JlYXNlIGNvbXBsZXhpdHkgYW5kIG92ZXJoZWFkLgogLy8KLXN0YXRpYyB1bnNpZ25lZCBs
b2NrRHJvcERlcHRoID0gMDsKIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxMb2NrcyhF
eGVjU3RhdGUqIGV4ZWMpCi0gICAgOiBtX2xvY2tCZWhhdmlvcihleGVjLT5nbG9iYWxEYXRhKCku
aXNTaGFyZWRJbnN0YW5jZSgpID8gTG9ja0ZvclJlYWwgOiBTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
CisvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBsb2NrcyB0aGF0IHdlcmUg
ZHJvcHBlZC4KK3Vuc2lnbmVkIEpTTG9jazo6ZHJvcEFsbExvY2tzKCkKIHsKLSAgICBwdGhyZWFk
X29uY2UoJmNyZWF0ZUpTTG9ja0NvdW50T25jZSwgY3JlYXRlSlNMb2NrQ291bnQpOworICAgIGlm
IChtX2xvY2tEcm9wRGVwdGgrKykKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAobG9ja0Ry
b3BEZXB0aCsrKSB7Ci0gICAgICAgIG1fbG9ja0NvdW50ID0gMDsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICByZXR1cm4gZHJvcEFsbExvY2tzVW5jb25kaXRpb25hbGx5KCk7Cit9CisKK3Vu
c2lnbmVkIEpTTG9jazo6ZHJvcEFsbExvY2tzVW5jb25kaXRpb25hbGx5KCkKK3sKKyAgICB1bnNp
Z25lZCBsb2NrQ291bnQgPSBtX2xvY2tDb3VudDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbG9ja0NvdW50OyBpKyspCisgICAgICAgIHVubG9jaygpOwogCi0gICAgbV9sb2NrQ291bnQg
PSBKU0xvY2s6OmxvY2tDb3VudCgpOwotICAgIGZvciAoaW50cHRyX3QgaSA9IDA7IGkgPCBtX2xv
Y2tDb3VudDsgaSsrKQotICAgICAgICBKU0xvY2s6OnVubG9jayhtX2xvY2tCZWhhdmlvcik7Cisg
ICAgcmV0dXJuIGxvY2tDb3VudDsKIH0KIAotSlNMb2NrOjpEcm9wQWxsTG9ja3M6OkRyb3BBbGxM
b2NrcyhKU0xvY2tCZWhhdmlvciBKU0xvY2tCZWhhdmlvcikKLSAgICA6IG1fbG9ja0JlaGF2aW9y
KEpTTG9ja0JlaGF2aW9yKQordm9pZCBKU0xvY2s6OmdyYWJBbGxMb2Nrcyh1bnNpZ25lZCBsb2Nr
Q291bnQpCiB7Ci0gICAgcHRocmVhZF9vbmNlKCZjcmVhdGVKU0xvY2tDb3VudE9uY2UsIGNyZWF0
ZUpTTG9ja0NvdW50KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9ja0NvdW50OyBp
KyspCisgICAgICAgIGxvY2soKTsKIAotICAgIGlmIChsb2NrRHJvcERlcHRoKyspIHsKLSAgICAg
ICAgbV9sb2NrQ291bnQgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fbG9ja0Ry
b3BEZXB0aC0tOworfQogCi0gICAgLy8gSXQgaXMgbmVjZXNzYXJ5IHRvIGRyb3AgZXZlbiAidW5y
ZWFsIiBsb2NrcywgYmVjYXVzZSBoYXZpbmcgYSBub24temVybyBsb2NrIGNvdW50Ci0gICAgLy8g
d2lsbCBwcmV2ZW50IGEgcmVhbCBsb2NrIGZyb20gYmVpbmcgdGFrZW4uCitKU0xvY2s6OkRyb3BB
bGxMb2Nrczo6RHJvcEFsbExvY2tzKEV4ZWNTdGF0ZSogZXhlYykKKyAgICA6IG1fbG9ja0NvdW50
KDApCisgICAgLCBtX2dsb2JhbERhdGEoJmV4ZWMtPmdsb2JhbERhdGEoKSkKK3sKKyAgICBtX2xv
Y2tDb3VudCA9IG1fZ2xvYmFsRGF0YS0+YXBpTG9jaygpLmRyb3BBbGxMb2NrcygpOworfQogCi0g
ICAgbV9sb2NrQ291bnQgPSBKU0xvY2s6OmxvY2tDb3VudCgpOwotICAgIGZvciAoaW50cHRyX3Qg
aSA9IDA7IGkgPCBtX2xvY2tDb3VudDsgaSsrKQotICAgICAgICBKU0xvY2s6OnVubG9jayhtX2xv
Y2tCZWhhdmlvcik7CitKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSkKKyAgICA6IG1fbG9ja0NvdW50KDApCisgICAgLCBtX2dsb2JhbERh
dGEoZ2xvYmFsRGF0YSkKK3sKKyAgICBtX2xvY2tDb3VudCA9IG1fZ2xvYmFsRGF0YS0+YXBpTG9j
aygpLmRyb3BBbGxMb2NrcygpOwogfQogCiBKU0xvY2s6OkRyb3BBbGxMb2Nrczo6fkRyb3BBbGxM
b2NrcygpCiB7Ci0gICAgZm9yIChpbnRwdHJfdCBpID0gMDsgaSA8IG1fbG9ja0NvdW50OyBpKysp
Ci0gICAgICAgIEpTTG9jazo6bG9jayhtX2xvY2tCZWhhdmlvcik7Ci0KLSAgICAtLWxvY2tEcm9w
RGVwdGg7CisgICAgbV9nbG9iYWxEYXRhLT5hcGlMb2NrKCkuZ3JhYkFsbExvY2tzKG1fbG9ja0Nv
dW50KTsKIH0KIAogI2Vsc2UgLy8gKE9TKERBUldJTikgfHwgVVNFKFBUSFJFQURTKSkKIAotSlNM
b2NrOjpKU0xvY2soRXhlY1N0YXRlKikKLSAgICA6IG1fbG9ja0JlaGF2aW9yKFNpbGVuY2VBc3Nl
cnRpb25zT25seSkKK0dsb2JhbEpTTG9jazo6R2xvYmFsSlNMb2NrKCkKK3sKK30KKworR2xvYmFs
SlNMb2NrOjp+R2xvYmFsSlNMb2NrKCkKK3sKK30KKworSlNMb2NrSG9sZGVyOjpKU0xvY2tIb2xk
ZXIoSlNHbG9iYWxEYXRhKikKIHsKIH0KIAotLy8gSWYgdGhyZWFkaW5nIHN1cHBvcnQgaXMgb2Zm
LCBzZXQgdGhlIGxvY2sgY291bnQgdG8gYSBjb25zdGFudCB2YWx1ZSBvZiAxIHNvIHNzZXJ0aW9u
cwotLy8gdGhhdCB0aGUgbG9jayBpcyBoZWxkIGRvbid0IGZhaWwKLWludHB0cl90IEpTTG9jazo6
bG9ja0NvdW50KCkKK0pTTG9ja0hvbGRlcjo6SlNMb2NrSG9sZGVyKEpTR2xvYmFsRGF0YSYpCit7
Cit9CisKK0pTTG9ja0hvbGRlcjo6SlNMb2NrSG9sZGVyKEV4ZWNTdGF0ZSopCit7Cit9CisKK0pT
TG9ja0hvbGRlcjo6fkpTTG9ja0hvbGRlcigpCit7Cit9CisKK0pTTG9jazo6SlNMb2NrKCkKK3sK
K30KKworSlNMb2NrOjp+SlNMb2NrKCkKIHsKLSAgICByZXR1cm4gMTsKIH0KIAogYm9vbCBKU0xv
Y2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkKQEAgLTIzMCwxMSArMjU2LDExIEBAIGJv
b2wgSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBKU0xvY2s6OmxvY2soSlNMb2NrQmVoYXZpb3IpCit2b2lkIEpTTG9jazo6bG9j
aygpCiB7CiB9CiAKLXZvaWQgSlNMb2NrOjp1bmxvY2soSlNMb2NrQmVoYXZpb3IpCit2b2lkIEpT
TG9jazo6dW5sb2NrKCkKIHsKIH0KIApAQCAtMjQ2LDExICsyNzIsMzMgQEAgdm9pZCBKU0xvY2s6
OnVubG9jayhFeGVjU3RhdGUqKQogewogfQogCit2b2lkIEpTTG9jazo6bG9jayhKU0dsb2JhbERh
dGEmKQoreworfQorCit2b2lkIEpTTG9jazo6dW5sb2NrKEpTR2xvYmFsRGF0YSYpCit7Cit9CisK
K3Vuc2lnbmVkIEpTTG9jazo6ZHJvcEFsbExvY2tzKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
dW5zaWduZWQgSlNMb2NrOjpkcm9wQWxsTG9ja3NVbmNvbmRpdGlvbmFsbHkoKQoreworICAgIHJl
dHVybiAwOworfQorCit2b2lkIEpTTG9jazo6Z3JhYkFsbExvY2tzKHVuc2lnbmVkKQoreworfQor
CiBKU0xvY2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKEV4ZWNTdGF0ZSopCiB7CiB9CiAK
LUpTTG9jazo6RHJvcEFsbExvY2tzOjpEcm9wQWxsTG9ja3MoSlNMb2NrQmVoYXZpb3IpCitKU0xv
Y2s6OkRyb3BBbGxMb2Nrczo6RHJvcEFsbExvY2tzKEpTR2xvYmFsRGF0YSopCiB7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oCShyZXZpc2lvbiAxMjExODMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMjMsNiArMjMsOSBAQAogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1RDU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC0zMCw4ICszMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8vIGlt
cG9ydGFudCB0byBsb2NrIGJlZm9yZSBkb2luZyBhbnl0aGluZyB0aGF0IGFsbG9jYXRlcyBhCiAg
ICAgLy8gSmF2YVNjcmlwdCBkYXRhIHN0cnVjdHVyZSBvciB0aGF0IGludGVyYWN0cyB3aXRoIHNo
YXJlZCBzdGF0ZQogICAgIC8vIHN1Y2ggYXMgdGhlIHByb3RlY3QgY291bnQgaGFzaCB0YWJsZS4g
VGhlIHNpbXBsZXN0IHdheSB0byBsb2NrCi0gICAgLy8gaXMgdG8gY3JlYXRlIGEgbG9jYWwgSlNM
b2NrIG9iamVjdCBpbiB0aGUgc2NvcGUgd2hlcmUgdGhlIGxvY2sgCi0gICAgLy8gbXVzdCBiZSBo
ZWxkLiBUaGUgbG9jayBpcyByZWN1cnNpdmUgc28gbmVzdGluZyBpcyBvay4gVGhlIEpTTG9jayAK
KyAgICAvLyBpcyB0byBjcmVhdGUgYSBsb2NhbCBKU0xvY2tIb2xkZXIgb2JqZWN0IGluIHRoZSBz
Y29wZSB3aGVyZSB0aGUgbG9jayAKKyAgICAvLyBtdXN0IGJlIGhlbGQgYW5kIHBhc3MgaXQgdGhl
IGNvbnRleHQgdGhhdCByZXF1aXJlcyBwcm90ZWN0aW9uLiAKKyAgICAvLyBUaGUgbG9jayBpcyBy
ZWN1cnNpdmUgc28gbmVzdGluZyBpcyBvay4gVGhlIEpTTG9jayAKICAgICAvLyBvYmplY3QgYWxz
byBhY3RzIGFzIGEgY29udmVuaWVuY2Ugc2hvcnQtaGFuZCBmb3IgcnVubmluZyBpbXBvcnRhbnQK
ICAgICAvLyBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4KIApAQCAtNDQsNjIgKzQ4LDY1IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIC8vIERyb3BBbGxMb2NrcyBvYmplY3QgdGFrZXMgY2FyZSB0byBy
ZWxlYXNlIHRoZSBKU0xvY2sgb25seSBpZiB5b3VyCiAgICAgLy8gdGhyZWFkIGFjcXVpcmVkIGl0
IHRvIGJlZ2luIHdpdGguCiAKLSAgICAvLyBGb3IgY29udGV4dHMgb3RoZXIgdGhhbiB0aGUgc2lu
Z2xlIHNoYXJlZCBvbmUsIGltcGxpY2l0IGxvY2tpbmcgaXMgbm90IGRvbmUsCi0gICAgLy8gYnV0
IHdlIHN0aWxsIG5lZWQgdG8gcGVyZm9ybSBhbGwgdGhlIGNvdW50aW5nIGluIG9yZGVyIHRvIGtl
ZXAgZGVidWcKLSAgICAvLyBhc3NlcnRpb25zIHdvcmtpbmcsIHNvIHRoYXQgY2xpZW50cyB0aGF0
IHVzZSB0aGUgc2hhcmVkIGNvbnRleHQgZG9uJ3QgYnJlYWsuCi0KICAgICBjbGFzcyBFeGVjU3Rh
dGU7CiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwogCi0gICAgZW51bSBKU0xvY2tCZWhhdmlvciB7
IFNpbGVuY2VBc3NlcnRpb25zT25seSwgTG9ja0ZvclJlYWwgfTsKKyAgICAvLyBUaGlzIGNsYXNz
IGlzIHVzZWQgdG8gcHJvdGVjdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGxlZ2FjeSBzaW5n
bGUgCisgICAgLy8gc2hhcmVkIEpTR2xvYmFsRGF0YS4KKyAgICBjbGFzcyBHbG9iYWxKU0xvY2sg
eworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHbG9iYWxKU0xvY2spOworICAgIHB1Ymxp
YzoKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR2xvYmFsSlNMb2NrKCk7CisgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5HbG9iYWxKU0xvY2soKTsKKyAgICB9OworCisgICAgY2xhc3MgSlNM
b2NrSG9sZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTTG9j
a0hvbGRlcihKU0dsb2JhbERhdGEqKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNMb2Nr
SG9sZGVyKEpTR2xvYmFsRGF0YSYpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0xvY2tI
b2xkZXIoRXhlY1N0YXRlKik7CisKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9ja0hv
bGRlcigpOworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU0dsb2JhbERhdGE+IG1fZ2xv
YmFsRGF0YTsKKyAgICB9OwogCiAgICAgY2xhc3MgSlNMb2NrIHsKICAgICAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSlNMb2NrKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTTG9jayhFeGVjU3RhdGUqKTsKLSAgICAgICAgSlNMb2NrKEpTR2xvYmFsRGF0YSopOwor
ICAgICAgICBKU0xvY2soKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTTG9jaygpOwor
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9jaygpOworICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHVubG9jaygpOwogCi0gICAgICAgIEpTTG9jayhKU0xvY2tCZWhhdmlv
ciBsb2NrQmVoYXZpb3IpCi0gICAgICAgICAgICA6IG1fbG9ja0JlaGF2aW9yKGxvY2tCZWhhdmlv
cikKLSAgICAgICAgewotI2lmZGVmIE5ERUJVRwotICAgICAgICAgICAgLy8gTG9ja2luZyAibm90
IGZvciByZWFsIiBpcyBhIGRlYnVnLW9ubHkgZmVhdHVyZS4KLSAgICAgICAgICAgIGlmIChsb2Nr
QmVoYXZpb3IgPT0gU2lsZW5jZUFzc2VydGlvbnNPbmx5KQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSNlbmRpZgotICAgICAgICAgICAgbG9jayhsb2NrQmVoYXZpb3IpOwotICAgICAgICB9Ci0K
LSAgICAgICAgfkpTTG9jaygpCi0gICAgICAgIHsgCi0jaWZkZWYgTkRFQlVHCi0gICAgICAgICAg
ICAvLyBMb2NraW5nICJub3QgZm9yIHJlYWwiIGlzIGEgZGVidWctb25seSBmZWF0dXJlLgotICAg
ICAgICAgICAgaWYgKG1fbG9ja0JlaGF2aW9yID09IFNpbGVuY2VBc3NlcnRpb25zT25seSkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICAgICAgICAgIHVubG9jayhtX2xvY2tC
ZWhhdmlvcik7IAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBsb2NrKEpTTG9ja0JlaGF2aW9yKTsKLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgdW5sb2NrKEpTTG9ja0JlaGF2aW9yKTsKICAgICAgICAgc3RhdGlj
IHZvaWQgbG9jayhFeGVjU3RhdGUqKTsKICAgICAgICAgc3RhdGljIHZvaWQgdW5sb2NrKEV4ZWNT
dGF0ZSopOworICAgICAgICBzdGF0aWMgdm9pZCBsb2NrKEpTR2xvYmFsRGF0YSYpOworICAgICAg
ICBzdGF0aWMgdm9pZCB1bmxvY2soSlNHbG9iYWxEYXRhJik7CiAKLSAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGludHB0cl90IGxvY2tDb3VudCgpOwotICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpOworICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCk7CiAK
LSAgICAgICAgSlNMb2NrQmVoYXZpb3IgbV9sb2NrQmVoYXZpb3I7CisgICAgICAgIHVuc2lnbmVk
IGRyb3BBbGxMb2NrcygpOworICAgICAgICB1bnNpZ25lZCBkcm9wQWxsTG9ja3NVbmNvbmRpdGlv
bmFsbHkoKTsKKyAgICAgICAgdm9pZCBncmFiQWxsTG9ja3ModW5zaWduZWQgbG9ja0NvdW50KTsK
KworICAgICAgICBTcGluTG9jayBtX3NwaW5Mb2NrOworICAgICAgICBNdXRleCBtX2xvY2s7Cisg
ICAgICAgIFRocmVhZElkZW50aWZpZXIgbV9vd25lclRocmVhZDsKKyAgICAgICAgaW50cHRyX3Qg
bV9sb2NrQ291bnQ7CisgICAgICAgIHVuc2lnbmVkIG1fbG9ja0Ryb3BEZXB0aDsKIAogICAgICAg
ICBjbGFzcyBEcm9wQWxsTG9ja3MgewogICAgICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
RHJvcEFsbExvY2tzKTsKICAgICAgICAgcHVibGljOgogICAgICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgRHJvcEFsbExvY2tzKEV4ZWNTdGF0ZSogZXhlYyk7Ci0gICAgICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBEcm9wQWxsTG9ja3MoSlNMb2NrQmVoYXZpb3IpOworICAgICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgRHJvcEFsbExvY2tzKEpTR2xvYmFsRGF0YSopOwogICAgICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgfkRyb3BBbGxMb2NrcygpOwogICAgICAgICAgICAgCiAgICAgICAg
IHByaXZhdGU6CiAgICAgICAgICAgICBpbnRwdHJfdCBtX2xvY2tDb3VudDsKLSAgICAgICAgICAg
IEpTTG9ja0JlaGF2aW9yIG1fbG9ja0JlaGF2aW9yOworICAgICAgICAgICAgUmVmUHRyPEpTR2xv
YmFsRGF0YT4gbV9nbG9iYWxEYXRhOwogICAgICAgICB9OwogICAgIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCShyZXZpc2lvbiAxMjExODMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtNzUsOCArNzUsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBIYW5kbGVUeXBlczxN
YXBwZWRUeXBlPjo6Z2V0RnJvbVNsb3QoY29uc3RfY2FzdDxKU1ZhbHVlKj4oJmltcGwtPmpzVmFs
dWUoKSkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIGNvbnN0IEtleVR5
cGUmIGtleSwgRXh0ZXJuYWxUeXBlIHZhbHVlKQorICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgY29uc3QgS2V5VHlwZSYga2V5LCBFeHRlcm5hbFR5cGUgdmFsdWUpCiAgICAg
eworICAgICAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuYXBpTG9jaygp
LmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwogICAgICAgICB0eXBlbmFtZSBNYXBUeXBl
OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgMCk7CiAgICAgICAgIGlmICghcmVz
dWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTE5MykKKysrIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NiBAQAor
MjAxMi0wNi0yNSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisg
ICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEN1cnJlbnQgcmVn
cmVzc2lvbiB0ZXN0cyBhcmUgc3VmZmljaWVudC4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRl
cyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisg
ICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBp
cyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24u
IEFsc28gYWRkZWQgYSBjb3VwbGUgSlNMb2NrcyB0byBwbGFjZXMgdGhhdCBkaWRuJ3QgYWxyZWFk
eSAKKyAgICAgICAgaGF2ZSBpdCB0aGF0IG5lZWRlZCBpdC4KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL0dDQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3RTb29uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdDQ29udHJvbGxlcjo6Z2FyYmFnZUNvbGxlY3ROb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6R0NDb250cm9sbGVyOjpkaXNjYXJkQWxsQ29tcGlsZWRDb2RlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNDdXN0b21Wb2lkQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmFtZXNwYWNlVVJJKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Vy
cm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5l
cjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRI
b3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6bm9k
ZUFzU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6
Omluc3BlY3RlZE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlw
dE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpj
cmVhdGVJbmplY3RlZFNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdE1h
bmFnZXI6OmNhbkFjY2Vzc0luc3BlY3RlZFdpbmRvdyk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNMYXp5RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVudExp
c3RlbmVyOjppbml0aWFsaXplSlNGdW5jdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU01haW5UaHJlYWRFeGVj
U3RhdGU6OmV2YWx1YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uQ2FsbGJh
Y2tDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNdXRhdGlvbkNhbGxiYWNrOjpoYW5k
bGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZSk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxi
YWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxG
cmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6cmVjb21waWxlQWxsSlNGdW5j
dGlvbnMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGVGdW5jdGlvbkluQ29udGV4dCk6
CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dENvbnRyb2xsZXI6OmluaXRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJv
bGxlcjo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6Y2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6YmluZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6d2luZG93U2NyaXB0TlBPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6anNPYmplY3RGb3JQbHVnaW5FbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cyk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dENvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2
ZXI6OmRpc3BhdGNoRGlkUGF1c2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEV2ZW50
TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnRMaXN0ZW5lckhhbmRsZXJCb2R5
KToKKyAgICAgICAgKFdlYkNvcmU6OmV2ZW50TGlzdGVuZXJIYW5kbGVyTG9jYXRpb24pOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6OnNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRHbG9iYWxPYmplY3Q6OnJlbW92ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0VmFs
dWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6OmdldFN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6dG9JbnNwZWN0b3JWYWx1ZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjp+V29ya2VyU2NyaXB0Q29udHJvbGxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjppbml0U2NyaXB0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmRpc2FibGVFdmFsKToKKyAgICAgICAg
KiBiaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbToKKyAgICAgICAgKF9kaWRFeGVjdXRl
KToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGNhbGxXZWJTY3JpcHRNZXRob2Q6d2l0aEFy
Z3VtZW50czpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGV2YWx1YXRlV2ViU2NyaXB0
Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc2V0VmFsdWU6Zm9yS2V5Ol0pOgorICAg
ICAgICAoLVtXZWJTY3JpcHRPYmplY3QgdmFsdWVGb3JLZXk6XSk6CisgICAgICAgICgtW1dlYlNj
cmlwdE9iamVjdCByZW1vdmVXZWJTY3JpcHRLZXk6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9i
amVjdCBoYXNXZWJTY3JpcHRLZXk6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBzdHJp
bmdSZXByZXNlbnRhdGlvbl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgd2ViU2NyaXB0
VmFsdWVBdEluZGV4Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc2V0V2ViU2NyaXB0
VmFsdWVBdEluZGV4OnZhbHVlOl0pOgorICAgICAgICAoK1tXZWJTY3JpcHRPYmplY3QgX2NvbnZl
cnRWYWx1ZVRvT2JqY1ZhbHVlOm9yaWdpblJvb3RPYmplY3Q6cm9vdE9iamVjdDpdKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVy
YXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxi
YWNrOjpjYWxsYmFja1dpdGhOb1BhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxi
YWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RD
YWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aFN0cmluZ0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aEJvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKToKKyAgICAgICAgKiBi
cmlkZ2UvTlBfanNvYmplY3QuY3BwOgorICAgICAgICAoX05QTl9JbnZva2VEZWZhdWx0KToKKyAg
ICAgICAgKF9OUE5fSW52b2tlKToKKyAgICAgICAgKF9OUE5fRXZhbHVhdGUpOgorICAgICAgICAo
X05QTl9HZXRQcm9wZXJ0eSk6CisgICAgICAgIChfTlBOX1NldFByb3BlcnR5KToKKyAgICAgICAg
KF9OUE5fUmVtb3ZlUHJvcGVydHkpOgorICAgICAgICAoX05QTl9IYXNQcm9wZXJ0eSk6CisgICAg
ICAgIChfTlBOX0hhc01ldGhvZCk6CisgICAgICAgIChfTlBOX0VudW1lcmF0ZSk6CisgICAgICAg
IChfTlBOX0NvbnN0cnVjdCk6CisgICAgICAgICogYnJpZGdlL2MvY19jbGFzcy5jcHA6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpDQ2xhc3M6On5DQ2xhc3MpOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6Q0NsYXNzOjptZXRob2RzTmFtZWQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0Ns
YXNzOjpmaWVsZE5hbWVkKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX2luc3RhbmNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhl
Y1N0YXRlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6aW52b2tlTWV0aG9k
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6aW52b2tlRGVmYXVsdE1ldGhv
ZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Omludm9rZUNvbnN0cnVjdCk6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAqIGJyaWRnZS9jL2NfcnVudGltZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpDRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNG
aWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKToKKyAgICAgICAgKiBicmlkZ2UvYy9jX3V0aWxpdHku
Y3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9OUFZhcmlhbnQpOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydE5QVmFyaWFudFRvVmFsdWUpOgorICAgICAg
ICAqIGJyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpj
YWxsKToKKyAgICAgICAgKEphdmFKU09iamVjdDo6ZXZhbCk6CisgICAgICAgIChKYXZhSlNPYmpl
Y3Q6OmdldE1lbWJlcik6CisgICAgICAgIChKYXZhSlNPYmplY3Q6OnNldE1lbWJlcik6CisgICAg
ICAgIChKYXZhSlNPYmplY3Q6OnJlbW92ZU1lbWJlcik6CisgICAgICAgIChKYXZhSlNPYmplY3Q6
OmdldFNsb3QpOgorICAgICAgICAoSmF2YUpTT2JqZWN0OjpzZXRTbG90KToKKyAgICAgICAgKEph
dmFKU09iamVjdDo6dG9TdHJpbmcpOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpjb252ZXJ0VmFs
dWVUb0pPYmplY3QpOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpjb252ZXJ0Sk9iamVjdFRvVmFs
dWUpOgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX29iamMubW06CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpkaXNwYXRjaEpOSUNhbGwpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0pOSVV0
aWxpdHlQcml2YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRv
SlZhbHVlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwOgorICAg
ICAgICAoSmF2YUNsYXNzOjpKYXZhQ2xhc3MpOgorICAgICAgICAoSmF2YUNsYXNzOjp+SmF2YUNs
YXNzKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwOgorICAg
ICAgICAoSmF2YUluc3RhbmNlOjpzdHJpbmdWYWx1ZSk6CisgICAgICAgICogYnJpZGdlL2puaS9q
c2MvSmF2YU1ldGhvZEpTQy5jcHA6CisgICAgICAgIChhcHBlbmRDbGFzc05hbWUpOgorICAgICAg
ICAoSmF2YU1ldGhvZDo6c2lnbmF0dXJlKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZh
U3RyaW5nSlNDLmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhU3RyaW5nOjpKYXZhU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFTdHJpbmc6On5KYXZhU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFTdHJpbmc6OnV0ZjgpOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6SmF2YVN0cmluZzo6aW5pdCk6CisgICAgICAgICogYnJpZGdlL2pzYy9Ccmlk
Z2VKU0MuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6OmNyZWF0ZVJ1bnRp
bWVPYmplY3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6SW5zdGFuY2U6Om5ld1J1bnRpbWVP
YmplY3QpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW06CisgICAgICAg
IChPYmpjSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZSk6CisgICAgICAg
IChPYmpjSW5zdGFuY2U6Omludm9rZU9iamNNZXRob2QpOgorICAgICAgICAoT2JqY0luc3RhbmNl
OjppbnZva2VEZWZhdWx0TWV0aG9kKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6c2V0VmFsdWVP
ZlVuZGVmaW5lZEZpZWxkKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6Z2V0VmFsdWVPZlVuZGVm
aW5lZEZpZWxkKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW06CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKToKKyAgICAg
ICAgKiBicmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW06CisgICAgICAgIChKU0M6OkJpbmRpbmdz
Ojpjb252ZXJ0VmFsdWVUb09iamNWYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252
ZXJ0TlNTdHJpbmdUb1N0cmluZyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0T2Jq
Y1ZhbHVlVG9WYWx1ZSk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6On5RdEluc3RhbmNlKToKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6OmdldFF0SW5zdGFuY2UpOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdCk6CisgICAgICAgICogYnJp
ZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQ
aXhtYXBJbnN0YW5jZTo6Y3JlYXRlUGl4bWFwUnVudGltZU9iamVjdCk6CisgICAgICAgICogYnJp
ZGdlL3F0L3F0X3J1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZh
bHVlVG9RVmFyaWFudCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0UVZhcmlhbnRU
b1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGFNZXRob2Q6OmNh
bGwpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6
Y2FsbCk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X3J1bnRpbWVfcXQ0LmNwcDoKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQpOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6Y29udmVydFFWYXJpYW50VG9WYWx1ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjYWxsKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0
UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNhbGwpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1l
X3Jvb3QuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdDo6Z2NQcm90ZWN0
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Q6OmdjVW5wcm90ZWN0KToKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogaHRtbC9IVE1M
SW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlTG9hZGVyOjpub3Rp
ZnlGaW5pc2hlZCk6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGVyZm9ybVJlcXVlc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6bnBPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKToKKyAgICAgICAg
KiBwbHVnaW5zL2JsYWNrYmVycnkvUGx1Z2luVmlld0JsYWNrQmVycnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpn
ZXRXaW5kb3dJbmZvKToKKyAgICAgICAgKiBwbHVnaW5zL2VmbC9QbHVnaW5WaWV3RWZsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAg
ICogcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5k
bGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCk6
CisgICAgICAgICogcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KToKKyAgICAgICAgKiBwbHVnaW5zL3F0L1BsdWdp
blZpZXdRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KToKKyAgICAgICAg
KiBwbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpo
YW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRs
ZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dS
ZWN0KToKKyAgICAgICAgKiB0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHA6CisgICAg
ICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdCk6CisgICAgICAg
IChXZWJDb3JlVGVzdFN1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KToKKyAgICAgICAgKiB4
bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6
OmRyb3BQcm90ZWN0aW9uKToKKwogMjAxMi0wNi0yNSAgTWlrZSBXZXN0ICA8bWt3c3RAY2hyb21p
dW0uY29tPgogCiAgICAgICAgIEZpeGluZyBjb21waWxhdGlvbiBmYWlsdXJlIGluIFN0eWxlUmVz
b2x2ZXIuY3BwL0NTU1BhcnNlci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0dDQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvR0NDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lkIGNvbGxlY3Qodm9pZCopCiB7
Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwogfQog
CkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgR0NDb250cm9sbGVyOjpnYXJiYWdlQ29sbGVjdFNvb24o
KQogICAgIC8vIGRvd24gaW50byBXVEYgc28gdGhhdCBtb3JlIHBsYXRmb3JtcyBjYW4gdGFrZSBh
ZHZhbnRhZ2Ugb2YgaXQsIHdlIHdpbGwgYmUgCiAgICAgLy8gYWJsZSB0byB1c2UgcmVwb3J0QWJh
bmRvbmVkT2JqZWN0R3JhcGggb24gbW9yZSBwbGF0Zm9ybXMuCiAjaWYgVVNFKENGKQotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucmVwb3J0QWJhbmRvbmVkT2JqZWN0R3JhcGgoKTsKICNl
bHNlCiAgICAgaWYgKCFtX0dDVGltZXIuaXNBY3RpdmUoKSkKQEAgLTgwLDcgKzgwLDcgQEAgdm9p
ZCBHQ0NvbnRyb2xsZXI6OmdjVGltZXJGaXJlZChUaW1lcjxHQwogCiB2b2lkIEdDQ29udHJvbGxl
cjo6Z2FyYmFnZUNvbGxlY3ROb3coKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICAgICBpZiAoIUpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+
aGVhcC5pc0J1c3koKSkKICAgICAgICAgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
LT5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CiB9CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBH
Q0NvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRHYXJiYWdlQwogCiB2b2lkIEdDQ29udHJvbGxlcjo6
ZGlzY2FyZEFsbENvbXBpbGVkQ29kZSgpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwogICAgIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVh
cC5kZWxldGVBbGxDb21waWxlZENvZGUoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9y
Q2FsbGJhY2suY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0N1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw3ICs0OCw3IEBAIGJvb2wgSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5k
bGUKIAogICAgIFJlZlB0cjxKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IHByb3RlY3QodGhp
cyk7CiAKLSAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNDOjpKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwCShy
ZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVZv
aWRDYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBKU0N1
c3RvbVZvaWRDYWxsYmFjazo6aGFuZGxlRXZlbnQoKQogCiAgICAgUmVmUHRyPEpTQ3VzdG9tVm9p
ZENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogICAgICAgICAKLSAgICBKU0M6OkpTTG9jayBsb2Nr
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhtX2Rh
dGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3M7CiAgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNv
bHZlci5jcHAJKHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcs
NyBAQCBTdHJpbmcgSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hCiB7CiAgICAgQVNT
RVJUKG1fY3VzdG9tUmVzb2x2ZXIpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFcnJvckhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXJyb3JIYW5kbGVyLmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3
ICs2Myw3IEBAIHZvaWQgSlNFcnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEUKIAogICAg
IEVycm9yRXZlbnQqIGVycm9yRXZlbnQgPSBzdGF0aWNfY2FzdDxFcnJvckV2ZW50Kj4oZXZlbnQp
OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5nbG9iYWxEYXRhKCkpOwogCiAgICAg
SlNPYmplY3QqIGpzRnVuY3Rpb24gPSB0aGlzLT5qc0Z1bmN0aW9uKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOwogICAgIGlmICghanNGdW5jdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBKU1ZhbHVlIEpTRXZlbnQ6OmNsaXBib2FyZERhdGEoRXhlY1N0YXRlCiAK
IEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEV2ZW50KiBldmVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgaWYgKCFldmVudCkK
ICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NSw3ICs3NSw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHQK
ICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgfHwgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+aXNKU0V4ZWN1dGlvbkZvcmJpZGRlbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmdsb2JhbERhdGEoKSk7CiAKICAgICBKU09iamVjdCoganNG
dW5jdGlvbiA9IHRoaXMtPmpzRnVuY3Rpb24oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAg
aWYgKCFqc0Z1bmN0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmpl
Y3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTIxMTgz
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIE5vZGUqIEluamVjdGVkU2Ny
aXB0SG9zdDo6c2NyaXB0VmFsdWVBc04KIAogU2NyaXB0VmFsdWUgSW5qZWN0ZWRTY3JpcHRIb3N0
Ojpub2RlQXNTY3JpcHRWYWx1ZShTY3JpcHRTdGF0ZSogc3RhdGUsIE5vZGUqIG5vZGUpCiB7Ci0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhzdGF0ZSk7CiAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHN0YXRlLT5nbG9iYWxEYXRhKCks
IHRvSlMoc3RhdGUsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoc3RhdGUpLCBu
b2RlKSk7CiB9CiAKQEAgLTk1LDcgKzk1LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9z
dDo6aW5zcGVjdGVkTwogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgU2NyaXB0VmFsdWUgc2NyaXB0VmFsdWUgPSBvYmpl
Y3QtPmdldChleGVjKTsKICAgICBpZiAoc2NyaXB0VmFsdWUuaGFzTm9WYWx1ZSgpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHJldmlzaW9uIDEyMTE4
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIFNjcmlwdE9iamVjdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUluamVjdGVkU2Ny
aXB0KGNvbnN0IFN0cmluZyYgc291cmNlLCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGludCBp
ZCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKIAogICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9
IG1ha2VTb3VyY2Uoc3RyaW5nVG9VU3RyaW5nKHNvdXJjZSkpOwogICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0
ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKQEAgLTgxLDcgKzgxLDcgQEAgU2NyaXB0T2JqZWN0
IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3JlYQogCiBib29sIEluamVjdGVkU2NyaXB0TWFuYWdl
cjo6Y2FuQWNjZXNzSW5zcGVjdGVkV2luZG93KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHNjcmlwdFN0YXRlKTsKICAgICBKU0RPTVdpbmRvdyogaW5zcGVjdGVkV2luZG93ID0g
dG9KU0RPTVdpbmRvdyhzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBp
ZiAoIWluc3BlY3RlZFdpbmRvdykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHJl
dmlzaW9uIDEyMTE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50
TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgSlNPYmplY3Qq
IEpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpegogICAgIGlmIChtX29yaWdpbmFsTm9kZSkg
ewogICAgICAgICBpZiAoIXdyYXBwZXIoKSkgewogICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQg
J25vZGUnIGhhcyBhIEphdmFTY3JpcHQgd3JhcHBlciB0byBtYXJrIHRoZSBldmVudCBsaXN0ZW5l
ciB3ZSdyZSBjcmVhdGluZy4KLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBTaG91bGQgcGFzcyB0aGUgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdp
dGggdGhlIG5vZGUKICAgICAgICAgICAgIHNldFdyYXBwZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBh
c09iamVjdCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgbV9vcmlnaW5hbE5vZGUpKSk7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNT
dGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5oCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiAr
NzMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBldmFsdWF0ZShKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNDOjpTY29wZUNoYWluTm9kZSogY2hhaW4sIGNvbnN0IEpTQzo6U291
cmNlQ29kZSYgc291cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkpTVmFsdWUqIGV4
Y2VwdGlvbikKICAgICB7CiAgICAgICAgIEpTTWFpblRocmVhZEV4ZWNTdGF0ZSBjdXJyZW50U3Rh
dGUoZXhlYyk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAg
IHJldHVybiBKU0M6OmV2YWx1YXRlKGV4ZWMsIGNoYWluLCBzb3VyY2UsIHRoaXNWYWx1ZSwgZXhj
ZXB0aW9uKTsKICAgICB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011
dGF0aW9uQ2FsbGJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDEyMTE4MykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25DYWxsYmFja0N1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkpTTXV0YXRp
b25DYWxsYmFjay5oIgogCisjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAi
SlNNdXRhdGlvblJlY29yZC5oIgogI2luY2x1ZGUgIkpTV2ViS2l0TXV0YXRpb25PYnNlcnZlci5o
IgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTUwLDcgKzUxLDcgQEAg
Ym9vbCBKU011dGF0aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KE11dAogCiAgICAgUmVmUHRyPEpT
TXV0YXRpb25DYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNl
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkocmV2aXNpb24g
MTIxMTgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBKU05vZGVGaWx0ZXJDb25k
aXRpb246OkpTTm9kZUZpbHRlckNvbmRpCiAKIHNob3J0IEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6
YWNjZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgTm9kZSogZmlsdGVyTm9kZSkgY29uc3QK
IHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogCiAgICAgaWYgKCFtX2ZpbHRlcikKICAgICAgICAgcmV0dXJuIE5v
ZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxi
YWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFja0N1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDcgQEAgYm9vbCBKU1JlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxi
YWNrOjpoYQogCiAgICAgUmVmUHRyPEpTUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+IHBy
b3RlY3QodGhpcyk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEo
KSk7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKGpz
TnVtYmVyKHRpbWUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0phdmFTY3Jp
cHRDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKIAogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8ZGVidWdnZXIvRGVidWdnZXJDYWxs
RnJhbWUuaD4KICNpbmNsdWRlIDxydW50aW1lL0NvbXBsZXRpb24uaD4KQEAgLTEwNiw3ICsxMDcs
NyBAQCBKU1ZhbHVlIEphdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1YXRlKGNvCiAgICAgaWYgKCFt
X2lzVmFsaWQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJh
bWUuZXZhbHVhdGUoc2NyaXB0LCBleGNlcHRpb24pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlz
aW9uIDEyMTE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1
Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIFBhZ2VT
Y3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVuCiAKIHZvaWQgUGFnZVNjcmlwdERlYnVnU2Vy
dmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxTY3JpcHREZWJ1Z1NlcnZlcj4qKQog
ewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAvLyBJZiBK
YXZhU2NyaXB0IHN0YWNrIGlzIG5vdCBlbXB0eSBwb3N0cG9uZSByZWNvbXBpbGF0aW9uLgogICAg
IGlmIChKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmR5bmFtaWNHbG9iYWxPYmpl
Y3QpCiAgICAgICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zU29vbigpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiAx
MjExODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpl
eGVjdXRlKFNjcmlwdEV4ZWMKIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlRnVuY3Rpb25J
bkNvbnRleHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1fZnVuY3Rp
b24pOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soY29udGV4dC0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIENhbGxEYXRhIGNhbGxE
YXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobV9mdW5jdGlvbi5nZXQo
KSwgY2FsbERhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2Fj
aGVkRnJhbWVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2NyaXB0Q2FjaGVk
RnJhbWVEYXRhOjpTY3JpcHRDYWNoZWRGcmFtZURhdGEoRnJhbWUqIGZyYW1lKQogewotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAKICAgICBTY3JpcHRDb250
cm9sbGVyKiBzY3JpcHRDb250cm9sbGVyID0gZnJhbWUtPnNjcmlwdCgpOwogICAgIFNjcmlwdENv
bnRyb2xsZXI6OlNoZWxsTWFwJiB3aW5kb3dTaGVsbHMgPSBzY3JpcHRDb250cm9sbGVyLT5tX3dp
bmRvd1NoZWxsczsKQEAgLTY3LDcgKzY3LDcgQEAgU2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjp+U2Ny
aXB0Q2FjaGVkRnJhbQogCiB2b2lkIFNjcmlwdENhY2hlZEZyYW1lRGF0YTo6cmVzdG9yZShGcmFt
ZSogZnJhbWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKIAogICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdENvbnRyb2xsZXIgPSBmcmFtZS0+c2Ny
aXB0KCk7CiAgICAgU2NyaXB0Q29udHJvbGxlcjo6U2hlbGxNYXAmIHdpbmRvd1NoZWxscyA9IHNj
cmlwdENvbnRyb2xsZXItPm1fd2luZG93U2hlbGxzOwpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIFNj
cmlwdENhY2hlZEZyYW1lRGF0YTo6Y2xlYXIoKQogICAgIGlmIChtX3dpbmRvd3MuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgIG1fd2luZG93cy5jbGVhcigpOwogICAgIGdjQ29udHJvbGxlcigpLmdh
cmJhZ2VDb2xsZWN0U29vbigpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzMsNyArMTMzLDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJ
bgogICAgIGNvbnN0IFN0cmluZyogc2F2ZWRTb3VyY2VVUkwgPSBtX3NvdXJjZVVSTDsKICAgICBt
X3NvdXJjZVVSTCA9ICZzb3VyY2VVUkw7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgUmVmUHRyPEZy
YW1lPiBwcm90ZWN0ID0gbV9mcmFtZTsKIApAQCAtMTc3LDcgKzE3Nyw3IEBAIHZvaWQgU2NyaXB0
Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCgKICAgICBpZiAobV93aW5kb3dTaGVsbHMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogCiAgICAgZm9yIChTaGVsbE1hcDo6aXRlcmF0b3IgaXRlciA9IG1f
d2luZG93U2hlbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV93aW5kb3dTaGVsbHMuZW5kKCk7ICsraXRl
cikgewogICAgICAgICBKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9IGl0ZXItPnNlY29u
ZC5nZXQoKTsKQEAgLTIwOSw3ICsyMDksNyBAQCBKU0RPTVdpbmRvd1NoZWxsKiBTY3JpcHRDb250
cm9sbGVyOjppbml0CiB7CiAgICAgQVNTRVJUKCFtX3dpbmRvd1NoZWxscy5jb250YWlucyh3b3Js
ZCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayh3b3JsZC0+Z2xvYmFsRGF0YSgpKTsKIAogICAgIEpTRE9NV2luZG93U2hl
bGwqIHdpbmRvd1NoZWxsID0gY3JlYXRlV2luZG93U2hlbGwod29ybGQpOwogCkBAIC0yODQsOSAr
Mjg0LDEwIEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQoKQogICAgIGlm
ICghbV9mcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBmb3IgKFNoZWxsTWFwOjppdGVyYXRvciBp
dGVyID0gbV93aW5kb3dTaGVsbHMuYmVnaW4oKTsgaXRlciAhPSBtX3dpbmRvd1NoZWxscy5lbmQo
KTsgKytpdGVyKQorICAgIGZvciAoU2hlbGxNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3dpbmRvd1No
ZWxscy5iZWdpbigpOyBpdGVyICE9IG1fd2luZG93U2hlbGxzLmVuZCgpOyArK2l0ZXIpIHsKKyAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2soaXRlci0+Zmlyc3QtPmdsb2JhbERhdGEoKSk7CiAgICAg
ICAgIGl0ZXItPnNlY29uZC0+d2luZG93KCktPnVwZGF0ZURvY3VtZW50KCk7CisgICAgfQogfQog
CiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCkKQEAgLTMwMCw3
ICszMDEsNyBAQCBCaW5kaW5nczo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6CiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KSB7
Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpT
TG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgICAgICBtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmpl
Y3Q6OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogICAgIH0KICAgICBy
ZXR1cm4gbV9jYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKQEAgLTMxMiw3ICszMTMs
NyBAQCBCaW5kaW5nczo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6CiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgaWYgKCFtX2JpbmRpbmdSb290T2JqZWN0KSB7Ci0gICAgICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBtX2JpbmRp
bmdSb290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9iYWxPYmpl
Y3QocGx1Z2luV29ybGQoKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9iaW5kaW5nUm9vdE9iamVj
dC5nZXQoKTsKQEAgLTM0OSw5ICszNTAsOSBAQCBOUE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6
d2luZG93U2NyaXB0CiAgICAgICAgIGlmIChjYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhl
Y3V0ZVNjcmlwdCkpIHsKICAgICAgICAgICAgIC8vIEphdmFTY3JpcHQgaXMgZW5hYmxlZCwgc28g
dGhlcmUgaXMgYSBKYXZhU2NyaXB0IHdpbmRvdyBvYmplY3QuCiAgICAgICAgICAgICAvLyBSZXR1
cm4gYW4gTlBPYmplY3QgYm91bmQgdG8gdGhlIHdpbmRvdyBvYmplY3QuCi0gICAgICAgICAgICBK
U0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgICAgICAgICBKU09i
amVjdCogd2luID0gd2luZG93U2hlbGwocGx1Z2luV29ybGQoKSktPndpbmRvdygpOworICAgICAg
ICAgICAgSlNET01XaW5kb3cqIHdpbiA9IHdpbmRvd1NoZWxsKHBsdWdpbldvcmxkKCkpLT53aW5k
b3coKTsKICAgICAgICAgICAgIEFTU0VSVCh3aW4pOworICAgICAgICAgICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9jayh3aW4tPmdsb2JhbEV4ZWMoKSk7CiAgICAgICAgICAgICBCaW5kaW5nczo6Um9v
dE9iamVjdCogcm9vdCA9IGJpbmRpbmdSb290T2JqZWN0KCk7CiAgICAgICAgICAgICBtX3dpbmRv
d1NjcmlwdE5QT2JqZWN0ID0gX05QTl9DcmVhdGVTY3JpcHRPYmplY3QoMCwgd2luLCByb290KTsK
ICAgICAgICAgfSBlbHNlIHsKQEAgLTM4Myw4ICszODQsOCBAQCBKU09iamVjdCogU2NyaXB0Q29u
dHJvbGxlcjo6anNPYmplY3RGb3JQCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ3JlYXRl
IGEgSlNPYmplY3QgYm91bmQgdG8gdGhpcyBlbGVtZW50Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqID0gZ2xvYmFsT2Jq
ZWN0KHBsdWdpbldvcmxkKCkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iai0+Z2xv
YmFsRXhlYygpKTsKICAgICAvLyBGSVhNRTogaXMgbm9ybWFsIG9rYXk/IC0gdXNlZCBmb3IgTlAg
cGx1Z2lucz8KICAgICBKU1ZhbHVlIGpzRWxlbWVudFZhbHVlID0gdG9KUyhnbG9iYWxPYmotPmds
b2JhbEV4ZWMoKSwgZ2xvYmFsT2JqLCBwbHVnaW4pOwogICAgIGlmICghanNFbGVtZW50VmFsdWUg
fHwgIWpzRWxlbWVudFZhbHVlLmlzT2JqZWN0KCkpCkBAIC00MTgsNyArNDE5LDcgQEAgdm9pZCBT
Y3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZQogCiB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcm9vdE9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChSb290T2JqZWN0TWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcm9vdE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFj
Lm1tCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgV2Vi
U2NyaXB0T2JqZWN0KiBTY3JpcHRDb250cm9sbGVyOjp3aW5kbwogICAgICAgICByZXR1cm4gMDsK
IAogICAgIGlmICghbV93aW5kb3dTY3JpcHRPYmplY3QpIHsKLSAgICAgICAgSlNDOjpKU0xvY2sg
bG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAg
IEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgpOwog
ICAgICAgICBtX3dpbmRvd1NjcmlwdE9iamVjdCA9IFtXZWJTY3JpcHRPYmplY3Qgc2NyaXB0T2Jq
ZWN0Rm9ySlNPYmplY3Q6dG9SZWYod2luZG93U2hlbGwocGx1Z2luV29ybGQoKSkpIG9yaWdpblJv
b3RPYmplY3Q6cm9vdCByb290T2JqZWN0OnJvb3RdOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDEy
MTE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2
ZXI6OmRpc3BhdGNoRGlkUGF1c2UKICAgICB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRDYWxsRnJh
bWUtPmlzVmFsaWQoKSAmJiBnbG9iYWxPYmplY3QtPmluaGVyaXRzKCZKU0RPTUdsb2JhbE9iamVj
dDo6c19pbmZvKSkgewogICAgICAgICAgICAgSlNET01HbG9iYWxPYmplY3QqIGRvbUdsb2JhbE9i
amVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
ICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNM
b2NrSG9sZGVyIGxvY2soc3RhdGUpOwogICAgICAgICAgICAganNDYWxsRnJhbWUgPSB0b0pTKHN0
YXRlLCBkb21HbG9iYWxPYmplY3QsIG1fY3VycmVudENhbGxGcmFtZS5nZXQoKSk7CiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAganNDYWxsRnJhbWUgPSBqc1VuZGVmaW5lZCgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RXZlbnRMaXN0ZW5lci5j
cHAJKHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dEV2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIFN0cmlu
ZyBldmVudExpc3RlbmVySGFuZGxlckJvZHkoRG9jdW1lbnQKICAgICBBU1NFUlQoanNMaXN0ZW5l
cik7CiAgICAgaWYgKCFqc0xpc3RlbmVyKQogICAgICAgICByZXR1cm4gIiI7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhqc0xp
c3RlbmVyLT5pc29sYXRlZFdvcmxkKCktPmdsb2JhbERhdGEoKSk7CiAgICAgSlNDOjpKU09iamVj
dCoganNGdW5jdGlvbiA9IGpzTGlzdGVuZXItPmpzRnVuY3Rpb24oZG9jdW1lbnQpOwogICAgIGlm
ICghanNGdW5jdGlvbikKICAgICAgICAgcmV0dXJuICIiOwpAQCAtMTEyLDcgKzExMiw3IEBAIGJv
b2wgZXZlbnRMaXN0ZW5lckhhbmRsZXJMb2NhdGlvbihEb2N1bWUKICAgICBBU1NFUlQoanNMaXN0
ZW5lcik7CiAgICAgaWYgKCFqc0xpc3RlbmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhqc0xpc3RlbmVyLT5pc29sYXRlZFdvcmxkKCktPmdsb2JhbERhdGEoKSk7CiAgICAgSlNDOjpK
U09iamVjdCoganNPYmplY3QgPSBqc0xpc3RlbmVyLT5qc0Z1bmN0aW9uKGRvY3VtZW50KTsKICAg
ICBpZiAoIWpzT2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHJldmlzaW9u
IDEyMTE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2Fs
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDE5ICs1OCwxOSBAQCB2b2lkIFNjcmlwdENhbGxB
cmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyCiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxl
cjo6YXBwZW5kQXJndW1lbnQoY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKIHsKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhl
Yyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzU3RyaW5nKG1fZXhlYywgYXJndW1lbnQpKTsK
IH0KIAogdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudChjb25z
dCBKU0M6OlVTdHJpbmcmIGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3Vt
ZW50cy5hcHBlbmQoanNTdHJpbmcobV9leGVjLCBhcmd1bWVudCkpOwogfQogCiB2b2lkIFNjcmlw
dENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IGNoYXIqIGFyZ3VtZW50
KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNTdHJpbmcobV9l
eGVjLCBVU3RyaW5nKGFyZ3VtZW50KSkpOwogfQogCkBAIC04MSwzMSArODEsMzEgQEAgdm9pZCBT
Y3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcgogCiB2b2lkIFNjcmlwdENhbGxBcmd1
bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGxvbmcgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4
ZWMpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc051bWJlcihhcmd1bWVudCkpOwogfQogCiB2
b2lkIFNjcmlwdENhbGxBcmd1bWVudEhhbmRsZXI6OmFwcGVuZEFyZ3VtZW50KGxvbmcgbG9uZyBh
cmd1bWVudCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpzTnVt
YmVyKGFyZ3VtZW50KSk7CiB9CiAKIHZvaWQgU2NyaXB0Q2FsbEFyZ3VtZW50SGFuZGxlcjo6YXBw
ZW5kQXJndW1lbnQodW5zaWduZWQgaW50IGFyZ3VtZW50KQogewotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAg
ICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIoYXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3Jp
cHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBsb25nIGFyZ3Vt
ZW50KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sobV9leGVjKTsKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIo
YXJndW1lbnQpKTsKIH0KIAogdm9pZCBTY3JpcHRDYWxsQXJndW1lbnRIYW5kbGVyOjphcHBlbmRB
cmd1bWVudChpbnQgYXJndW1lbnQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOwogICAgIG1fYXJndW1lbnRz
LmFwcGVuZChqc051bWJlcihhcmd1bWVudCkpOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAgU2Ny
aXB0VmFsdWUgU2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxsKGJvbwogewogICAgIEpTT2JqZWN0KiB0
aGlzT2JqZWN0ID0gbV90aGlzT2JqZWN0LmpzT2JqZWN0KCk7CiAKLSAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZXhlYyk7CiAK
ICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0KG1fZXhlYywgSWRlbnRpZmll
cihtX2V4ZWMsIHN0cmluZ1RvVVN0cmluZyhtX25hbWUpKSk7CiAgICAgaWYgKG1fZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKQEAgLTE2Myw3ICsxNjMsNyBAQCBTY3JpcHRPYmplY3QgU2NyaXB0RnVu
Y3Rpb25DYWxsOjpjb25zdHJ1CiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBtX3RoaXNP
YmplY3QuanNPYmplY3QoKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKIAogICAgIEpTT2JqZWN0KiBjb25z
dHJ1Y3RvciA9IGFzT2JqZWN0KHRoaXNPYmplY3QtPmdldChtX2V4ZWMsIElkZW50aWZpZXIobV9l
eGVjLCBzdHJpbmdUb1VTdHJpbmcobV9uYW1lKSkpKTsKICAgICBpZiAobV9leGVjLT5oYWRFeGNl
cHRpb24oKSkgewpAQCAtMjA1LDcgKzIwNSw3IEBAIFNjcmlwdFZhbHVlIFNjcmlwdENhbGxiYWNr
OjpjYWxsKCkKIAogU2NyaXB0VmFsdWUgU2NyaXB0Q2FsbGJhY2s6OmNhbGwoYm9vbCYgaGFkRXhj
ZXB0aW9uKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAg
IENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobV9mdW5jdGlvbi5qc1ZhbHVlKCksIGNh
bGxEYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0
LmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMgYm9v
bCBoYW5kbGVFeGNlcHRpb24oU2NyaXB0U3RhdGUqCiAKIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0
OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBT
Y3JpcHRPYmplY3QmIHZhbHVlKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOwogICAgIHNjcmlwdFN0
YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnB1dERpcmVjdChzY3JpcHRTdGF0ZS0+Z2xvYmFs
RGF0YSgpLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwgdmFsdWUuanNPYmplY3QoKSk7
CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7CiB9CkBAIC03NSw3ICs3
NSw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUKICNpZiBFTkFC
TEUoSU5TUEVDVE9SKQogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckZyb250ZW5kSG9zdCogdmFs
dWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwogICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0YXRl
LT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNjcmlw
dFN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlv
bihzY3JpcHRTdGF0ZSk7CkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0
OjpzZXQoU2NyaXB0U3RhdGUKIAogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChTY3JpcHRT
dGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluamVjdGVkU2NyaXB0SG9zdCog
dmFsdWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHNjcmlwdFN0
YXRlLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB0b0pTKHNj
cmlwdFN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2Vw
dGlvbihzY3JpcHRTdGF0ZSk7CkBAIC05Miw3ICs5Miw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2Jq
ZWN0OjpzZXQoU2NyaXB0U3RhdGUKIAogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChTY3Jp
cHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIFNjcmlwdE9iamVjdCYgdmFs
dWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gc2NyaXB0
U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2V0KHNjcmlwdFN0YXRlLCBJZGVudGlmaWVy
KHNjcmlwdFN0YXRlLCBuYW1lKSk7CiAgICAgaWYgKCFqc1ZhbHVlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xMDYsNyArMTA2LDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChT
Y3JpcHRTdGF0ZQogCiBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6cmVtb3ZlKFNjcmlwdFN0YXRl
KiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsK
ICAgICBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tZXRob2RUYWJsZSgpLT5k
ZWxldGVQcm9wZXJ0eShzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzY3JpcHRT
dGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSkpOwogICAgIHJldHVybiBoYW5kbGVF
eGNlcHRpb24oc2NyaXB0U3RhdGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3
IEBAIGJvb2wgU2NyaXB0VmFsdWU6OmdldFN0cmluZyhTY3JpcHRTdGF0ZSoKIHsKICAgICBpZiAo
IW1fdmFsdWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKICAg
ICBVU3RyaW5nIHVzdHJpbmc7CiAgICAgaWYgKCFtX3ZhbHVlLmdldCgpLmdldFN0cmluZyhzY3Jp
cHRTdGF0ZSwgdXN0cmluZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3NSw2ICsxNzUs
NyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4ganNUb0luCiAKIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IFNjcmlwdFZhbHVlOjp0b0luc3BlY3RvclZhbHVlKFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZSkgY29uc3QKIHsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBob2xkZXIo
c2NyaXB0U3RhdGUpOwogICAgIHJldHVybiBqc1RvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3RhdGUs
IG1fdmFsdWUuZ2V0KCksIEluc3BlY3RvclZhbHVlOjptYXhEZXB0aCk7CiB9CiAjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtl
clNjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpXb3Jr
ZXJTY3JpcHRDb250CiAKIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6On5Xb3JrZXJTY3JpcHRDb250
cm9sbGVyKCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbERhdGEoKSk7CiAgICAgbV93b3JrZXJDb250ZXh0V3Jh
cHBlci5jbGVhcigpOwogICAgIG1fZ2xvYmFsRGF0YS5jbGVhcigpOwogfQpAQCAtNzMsNyArNzMs
NyBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQoCiB7CiAgICAgQVNT
RVJUKCFtX3dvcmtlckNvbnRleHRXcmFwcGVyKTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9nbG9iYWxEYXRhLmdldCgp
KTsKIAogICAgIC8vIEV4cGxpY2l0bHkgcHJvdGVjdCB0aGUgZ2xvYmFsIG9iamVjdCdzIHByb3Rv
dHlwZSBzbyBpdCBpc24ndCBjb2xsZWN0ZWQKICAgICAvLyB3aGVuIHdlIGFsbG9jYXRlIHRoZSBn
bG9iYWwgb2JqZWN0LiAoT25jZSB0aGUgZ2xvYmFsIG9iamVjdCBpcyBmdWxseQpAQCAtMTE3LDcg
KzExNyw3IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICBT
Y3JpcHRWYWx1ZSBleGNlcHRpb247CiAgICAgZXZhbHVhdGUoc291cmNlQ29kZSwgJmV4Y2VwdGlv
bik7CiAgICAgaWYgKGV4Y2VwdGlvbi5qc1ZhbHVlKCkpIHsKLSAgICAgICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFs
RGF0YSgpKTsKICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fd29ya2VyQ29udGV4dFdyYXBwZXIt
Pmdsb2JhbEV4ZWMoKSwgZXhjZXB0aW9uLmpzVmFsdWUoKSk7CiAgICAgfQogfQpAQCAtMTI4LDkg
KzEyOCw5IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7Ci0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fd29ya2Vy
Q29udGV4dFdyYXBwZXItPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKIAogICAgIG1fd29ya2VyQ29udGV4dFdyYXBwZXItPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hl
Y2tlci5zdGFydCgpOwogCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBXb3JrZXJTY3JpcHRDb250
cm9sbGVyOjppc0V4ZWN1dGlvbgogdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpkaXNhYmxl
RXZhbCgpCiB7CiAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7Ci0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhKCkp
OwogCiAgICAgbV93b3JrZXJDb250ZXh0V3JhcHBlci0+c2V0RXZhbEVuYWJsZWQoZmFsc2UpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmpl
Y3QubW0JKHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMv
V2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsMTMgKzEyMiwxMiBAQCAr
IChpZClzY3JpcHRPYmplY3RGb3JKU09iamVjdDooSlNPYmplY3RSCiAKIHN0YXRpYyB2b2lkIF9k
aWRFeGVjdXRlKFdlYlNjcmlwdE9iamVjdCAqb2JqKQogewotICAgIEFTU0VSVChKU0xvY2s6Omxv
Y2tDb3VudCgpID4gMCk7Ci0gICAgCiAgICAgUm9vdE9iamVjdCogcm9vdCA9IFtvYmogX3Jvb3RP
YmplY3RdOwogICAgIGlmICghcm9vdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRXhlY1N0YXRl
KiBleGVjID0gcm9vdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBBU1NFUlQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygp
KTsKICAgICBLSlNEaWRFeGVjdXRlRnVuY3Rpb25QdHIgZnVuYyA9IEluc3RhbmNlOjpkaWRFeGVj
dXRlRnVuY3Rpb24oKTsKICAgICBpZiAoZnVuYykKICAgICAgICAgZnVuYyhleGVjLCByb290LT5n
bG9iYWxPYmplY3QoKSk7CkBAIC0yODEsMTAgKzI4MCw5IEBAIC0gKGlkKWNhbGxXZWJTY3JpcHRN
ZXRob2Q6KE5TU3RyaW5nICopbmEKICAgICBpZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQogICAg
ICAgICByZXR1cm4gbmlsOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKLSAgICAKICAgICAvLyBMb29rIHVwIHRoZSBmdW5jdGlvbiBvYmplY3QuCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEFTU0VSVCghZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IFtzZWxmIF9pbXBdLT5nZXQo
ZXhlYywgSWRlbnRpZmllcihleGVjLCBzdHJpbmdUb1VTdHJpbmcoU3RyaW5nKG5hbWUpKSkpOwpA
QCAtMzI1LDcgKzMyMyw3IEBAIC0gKGlkKWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmluZyAqKXNj
cmkKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgIAogICAgIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwogICAgIEpTVmFsdWUgcmV0
dXJuVmFsdWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRlKGV4ZWMsIFtzZWxmIF9y
b290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJj
ZShTdHJpbmcoc2NyaXB0KSksIEpTQzo6SlNWYWx1ZSgpLCAwKTsKQEAgLTM0Niw3ICszNDQsNyBA
QCAtICh2b2lkKXNldFZhbHVlOihpZCl2YWx1ZSBmb3JLZXk6KE5TU3RyCiAgICAgRXhlY1N0YXRl
KiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
OwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAog
ICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgp
LT5wdXQoW3NlbGYgX2ltcF0sIGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5n
KFN0cmluZyhrZXkpKSksIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZ2YWx1ZSwgT2Jq
Y09iamVjdFR5cGUsIFtzZWxmIF9yb290T2JqZWN0XSksIHNsb3QpOwpAQCAtMzcyLDcgKzM3MCw3
IEBAIC0gKGlkKXZhbHVlRm9yS2V5OihOU1N0cmluZyAqKWtleQogICAgICAgICAvLyBOZWVkIHRv
IHNjb3BlIHRoaXMgbG9jayB0byBlbnN1cmUgdGhhdCB3ZSByZWxlYXNlIHRoZSBsb2NrIGJlZm9y
ZSBjYWxsaW5nCiAgICAgICAgIC8vIFtzdXBlciB2YWx1ZUZvcktleTprZXldIHdoaWNoIG1pZ2h0
IHRocm93IGFuIGV4Y2VwdGlvbiBhbmQgYnlwYXNzIHRoZSBKU0xvY2sgZGVzdHJ1Y3RvciwKICAg
ICAgICAgLy8gbGVhdmluZyB0aGUgbG9jayBwZXJtYW5lbnRseSBoZWxkCi0gICAgICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgICAgICAKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+
Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhrZXkpKSkp
OwogICAgICAgICAKQEAgLTM4OCw3ICszODYsNyBAQCAtIChpZCl2YWx1ZUZvcktleTooTlNTdHJp
bmcgKilrZXkKICAgICBpZiAoW3Jlc3VsdE9iaiBpc0tpbmRPZkNsYXNzOltXZWJVbmRlZmluZWQg
Y2xhc3NdXSkKICAgICAgICAgcmVzdWx0T2JqID0gW3N1cGVyIHZhbHVlRm9yS2V5OmtleV07ICAg
IC8vIGRlZmF1bHRzIHRvIHRocm93aW5nIGFuIGV4Y2VwdGlvbgogCi0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICBfZGlkRXhlY3V0ZShzZWxmKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0T2JqOwpAQCAtNDAy
LDcgKzQwMCw3IEBAIC0gKHZvaWQpcmVtb3ZlV2ViU2NyaXB0S2V5OihOU1N0cmluZyAqKWsKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShb
c2VsZiBfaW1wXSwgZXhlYywgSWRlbnRpZmllcihleGVjLCBzdHJpbmdUb1VTdHJpbmcoU3RyaW5n
KGtleSkpKSk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKQEAgLTQyMSw3ICs0
MTksNyBAQCAtIChCT09MKWhhc1dlYlNjcmlwdEtleTooTlNTdHJpbmcgKilrZXkKICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCk7CiAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CiAKLSAgICBKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogICAgIEJPT0wgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmhhc1Byb3BlcnR5KGV4ZWMsIElkZW50
aWZpZXIoZXhlYywgc3RyaW5nVG9VU3RyaW5nKFN0cmluZyhrZXkpKSkpOwogCiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CkBAIC00NDEsOCArNDM5LDggQEAgLSAoTlNTdHJpbmcgKilz
dHJpbmdSZXByZXNlbnRhdGlvbgogICAgICAgICByZXR1cm4gQCJVbmRlZmluZWQiOwogICAgIH0K
IAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgRXhlY1N0YXRl
KiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAogICAgIGlkIHJlc3VsdCA9IGNv
bnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKGV4ZWMsIFtzZWxmIF9pbXBdLCBPYmpjT2JqZWN0VHlwZSku
b2JqZWN0VmFsdWU7CiAKQEAgLTQ2MSw3ICs0NTksNyBAQCAtIChpZCl3ZWJTY3JpcHRWYWx1ZUF0
SW5kZXg6KHVuc2lnbmVkKWluCiAgICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmpl
Y3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIEFTU0VSVCghZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IFtzZWxm
IF9pbXBdLT5nZXQoZXhlYywgaW5kZXgpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7CkBAIC00ODUsNyArNDgzLDcgQEAgLSAodm9pZClzZXRXZWJTY3JpcHRWYWx1ZUF0SW5kZXg6
KHVuc2lnbgogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigp
KTsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAgICAgW3NlbGYgX2ltcF0tPm1ldGhvZFRhYmxlKCktPnB1dEJ5
SW5kZXgoW3NlbGYgX2ltcF0sIGV4ZWMsIGluZGV4LCBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShl
eGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBfcm9vdE9iamVjdF0pLCBmYWxzZSk7
CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKQEAgLTUxNSw3ICs1MTMsNyBAQCAr
IChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTVmFsdWUpCiB7CiAgICAgaWYgKHZhbHVl
LmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVl
KTsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2socm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEo
KSk7CiAKICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkpTSFRNTEVsZW1lbnQ6OnNfaW5m
bykpIHsKICAgICAgICAgICAgIC8vIFBsdWdpbiBlbGVtZW50cyBjYWNoZSB0aGUgaW5zdGFuY2Ug
aW50ZXJuYWxseS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAt
Mjc0NSw3ICsyNzQ1LDcgQEAgRU5ECiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcblxuIik7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBSZWZQdHI8JGNsYXNzTmFtZT4gcHJvdGVjdCh0aGlzKTtcblxuIik7
Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpO1xuXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEo
KSk7XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgRXhlY1N0YXRl
KiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpO1xuIik7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdz
O1xuIik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBib29sIEpTVGVzdENhbGxiYWNrOjpj
YWxsYmFja1dpdGhOb1BhcmFtCiAKICAgICBSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IHByb3RlY3Qo
dGhpcyk7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKQEAgLTgyLDcgKzgyLDcgQEAgYm9v
bCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MxUAogCiAgICAgUmVmUHRyPEpTVGVz
dENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBA
IC0xMDAsNyArMTAwLDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3My
UAogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayht
X2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIGFyZ3M7CkBAIC0xMTksNyArMTE5LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFj
azo6Y2FsbGJhY2tXaXRoU3RyaW5nTAogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90
ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkp
OwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkBAIC0xMzcsNyArMTM3LDcg
QEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQm9vbGVhbgogCiAgICAgUmVmUHRy
PEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3M7CkBAIC0xNTcsNyArMTU3LDcgQEAgYm9vbCBKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tSZXF1
aXJlc1RoaQogCiAgICAgUmVmUHRyPEpTVGVzdENhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOwogCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBf
anNvYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29i
amVjdC5jcHAJKHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9q
c29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw3ICsxNzcsNyBAQCBib29sIF9OUE5f
SW52b2tlRGVmYXVsdChOUFAsIE5QT2JqZWN0KiBvCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9uIG9iamVjdC4KICAgICAgICAgSlNWYWx1ZSBmdW5j
dGlvbiA9IG9iai0+aW1wOwpAQCAtMjI1LDcgKzIyNSw3IEBAIGJvb2wgX05QTl9JbnZva2UoTlBQ
IG5wcCwgTlBPYmplY3QqIG8sIE4KICAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2Jq
ZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0g
ICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqLT5pbXAt
PmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkp
OwogICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUg
PSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwpAQCAtMjY0LDcgKzI2NCw3IEBAIGJv
b2wgX05QTl9FdmFsdWF0ZShOUFAgaW5zdGFuY2UsIE5QT2JqZWMKICAgICAgICAgUGx1Z2luVmll
dzo6a2VlcEFsaXZlKGluc3RhbmNlKTsKIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICAgICAgU3RyaW5nIHNjcmlwdFN0cmluZyA9IGNvbnZlcnROUFN0cmluZ1RvVVRGMTYo
cyk7CiAgICAgICAgIAogICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNDOjpldmFsdWF0
ZShyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKHNjcmlwdFN0cmlu
ZyksIEpTQzo6SlNWYWx1ZSgpKTsKQEAgLTI5MCw3ICsyOTAsNyBAQCBib29sIF9OUE5fR2V0UHJv
cGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RP
YmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIElkZW50aWZpZXJS
ZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsKICAgICAg
ICAgCi0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICAg
ICAgaWYgKGktPmlzU3RyaW5nKCkpCiAgICAgICAgICAgICByZXN1bHQgPSBvYmotPmltcC0+Z2V0
KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSk7CkBA
IC0zMjIsNyArMzIyLDcgQEAgYm9vbCBfTlBOX1NldFByb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8s
IAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmll
clJlcCo+KHByb3BlcnR5TmFtZSk7CiAKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpIHsKQEAg
LTM2Myw3ICszNjMsNyBAQCBib29sIF9OUE5fUmVtb3ZlUHJvcGVydHkoTlBQLCBOUE9iamVjdCog
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAg
ICAgaWYgKGktPmlzU3RyaW5nKCkpCiAgICAgICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUo
KS0+ZGVsZXRlUHJvcGVydHkob2JqLT5pbXAsIGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlm
aWVyKGV4ZWMsIGktPnN0cmluZygpKSk7CiAgICAgICAgIGVsc2UKQEAgLTM4Niw3ICszODYsNyBA
QCBib29sIF9OUE5fSGFzUHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAKICAgICAgICAgRXhl
Y1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
ICAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihw
cm9wZXJ0eU5hbWUpOwotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgaWYgKGktPmlzU3Ry
aW5nKCkpIHsKICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gb2JqLT5pbXAtPmhhc1Byb3BlcnR5
KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSk7CiAg
ICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwpAQCAtNDE4LDcgKzQxOCw3IEBAIGJv
b2wgX05QTl9IYXNNZXRob2QoTlBQLCBOUE9iamVjdCogbywgTlAKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgSlNW
YWx1ZSBmdW5jID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmll
cihleGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwog
ICAgICAgICByZXR1cm4gIWZ1bmMuaXNVbmRlZmluZWQoKTsKQEAgLTQ0Nyw3ICs0NDcsNyBAQCBi
b29sIF9OUE5fRW51bWVyYXRlKE5QUCwgTlBPYmplY3QqIG8sIE5QCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjKTsKIAogICAgICAgICBv
YmotPmltcC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyhvYmotPmltcCwgZXhlYywg
cHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CkBAIC00ODQsNyArNDg0
LDcgQEAgYm9vbCBfTlBOX0NvbnN0cnVjdChOUFAsIE5QT2JqZWN0KiBvLCBjbwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoZSBjb25zdHJ1Y3RvciBvYmplY3QuCiAg
ICAgICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBvYmotPmltcDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvcnVudGltZV9yb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDggKzEz
OSwxMCBAQCB2b2lkIFJvb3RPYmplY3Q6OmdjUHJvdGVjdChKU09iamVjdCoganNPCiB7CiAgICAg
QVNTRVJUKG1faXNWYWxpZCk7CiAgICAgCi0gICAgaWYgKCFtX3Byb3RlY3RDb3VudFNldC5jb250
YWlucyhqc09iamVjdCkpCisgICAgaWYgKCFtX3Byb3RlY3RDb3VudFNldC5jb250YWlucyhqc09i
amVjdCkpIHsKKyAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgaG9sZGVyKCZnbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRGF0YSgpKTsKICAgICAgICAgSlNDOjpnY1Byb3RlY3QoanNPYmplY3QpOworICAg
IH0KICAgICBtX3Byb3RlY3RDb3VudFNldC5hZGQoanNPYmplY3QpOwogfQogCkBAIC0xNTEsOCAr
MTUzLDEwIEBAIHZvaWQgUm9vdE9iamVjdDo6Z2NVbnByb3RlY3QoSlNPYmplY3QqIGoKICAgICBp
ZiAoIWpzT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9wcm90ZWN0Q291bnRT
ZXQuY291bnQoanNPYmplY3QpID09IDEpCisgICAgaWYgKG1fcHJvdGVjdENvdW50U2V0LmNvdW50
KGpzT2JqZWN0KSA9PSAxKSB7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGhvbGRlcigmZ2xv
YmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIEpTQzo6Z2NVbnByb3RlY3QoanNP
YmplY3QpOworICAgIH0KICAgICBtX3Byb3RlY3RDb3VudFNldC5yZW1vdmUoanNPYmplY3QpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2NsYXNzLmNwcAkocmV2aXNpb24gMTIxMTgz
KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19jbGFzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgogI2luY2x1ZGUg
PHJ1bnRpbWUvU2NvcGVDaGFpbi5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSWRlbnRpZmllci5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9i
amVjdC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTQ3LDggKzQ3LDYgQEAgQ0NsYXNzOjpDQ2xhc3MoTlBDbGFz
cyogYUNsYXNzKQogCiBDQ2xhc3M6On5DQ2xhc3MoKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBkZWxldGVBbGxWYWx1ZXMoX21ldGhvZHMpOwogICAg
IF9tZXRob2RzLmNsZWFyKCk7CiAKQEAgLTkwLDEwICs4OCw3IEBAIE1ldGhvZExpc3QgQ0NsYXNz
OjptZXRob2RzTmFtZWQoUHJvcGVydHkKICAgICBOUE9iamVjdCogb2JqID0gaW5zdC0+Z2V0T2Jq
ZWN0KCk7CiAgICAgaWYgKF9pc2EtPmhhc01ldGhvZCAmJiBfaXNhLT5oYXNNZXRob2Qob2JqLCBp
ZGVudCkpewogICAgICAgICBNZXRob2QqIGFNZXRob2QgPSBuZXcgQ01ldGhvZChpZGVudCk7IC8v
IGRlbGV0ZWQgaW4gdGhlIENDbGFzcyBkZXN0cnVjdG9yCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgICAgICAgICBfbWV0aG9k
cy5zZXQobmFtZS5pbXBsKCksIGFNZXRob2QpOwotICAgICAgICB9CisgICAgICAgIF9tZXRob2Rz
LnNldChuYW1lLmltcGwoKSwgYU1ldGhvZCk7CiAgICAgICAgIG1ldGhvZExpc3QuYXBwZW5kKGFN
ZXRob2QpOwogICAgIH0KICAgICAKQEAgLTExMywxMCArMTA4LDcgQEAgRmllbGQqIENDbGFzczo6
ZmllbGROYW1lZChQcm9wZXJ0eU5hbWUgcAogICAgIE5QT2JqZWN0KiBvYmogPSBpbnN0LT5nZXRP
YmplY3QoKTsKICAgICBpZiAoX2lzYS0+aGFzUHJvcGVydHkgJiYgX2lzYS0+aGFzUHJvcGVydHko
b2JqLCBpZGVudCkpewogICAgICAgICBhRmllbGQgPSBuZXcgQ0ZpZWxkKGlkZW50KTsgLy8gZGVs
ZXRlZCBpbiB0aGUgQ0NsYXNzIGRlc3RydWN0b3IKLSAgICAgICAgewotICAgICAgICAgICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAgICAgICAgIF9maWVsZHMuc2V0
KG5hbWUuaW1wbCgpLCBhRmllbGQpOwotICAgICAgICB9CisgICAgICAgIF9maWVsZHMuc2V0KG5h
bWUuaW1wbCgpLCBhRmllbGQpOwogICAgIH0KICAgICByZXR1cm4gYUZpZWxkOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHJldmlzaW9uIDEyMTE4MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw3ICs3Myw3IEBAIHZvaWQgQ0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGUK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAg
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBnbG9iYWxFeGNlcHRpb25TdHJpbmco
KSkpOwogICAgIH0KIApAQCAtMTgyLDcgKzE4Miw3IEBAIEpTVmFsdWUgQ0luc3RhbmNlOjppbnZv
a2VNZXRob2QoRXhlY1N0YXQKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHRWYXJpYW50KTsK
IAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhleGVjKTsKICAgICAgICAgQVNTRVJUKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVs
bCgpKTsKICAgICAgICAgcmV0dmFsID0gX29iamVjdC0+X2NsYXNzLT5pbnZva2UoX29iamVjdCwg
aWRlbnQsIGNBcmdzLmRhdGEoKSwgY291bnQsICZyZXN1bHRWYXJpYW50KTsKICAgICAgICAgbW92
ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwpAQCAtMjE3LDcgKzIxNyw3IEBAIEpT
VmFsdWUgQ0luc3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG9kKEUKICAgICBOUFZhcmlhbnQgcmVz
dWx0VmFyaWFudDsKICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHRWYXJpYW50KTsKICAgICB7
Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhl
Yyk7CiAgICAgICAgIEFTU0VSVChnbG9iYWxFeGNlcHRpb25TdHJpbmcoKS5pc051bGwoKSk7CiAg
ICAgICAgIHJldHZhbCA9IF9vYmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdChfb2JqZWN0LCBj
QXJncy5kYXRhKCksIGNvdW50LCAmcmVzdWx0VmFyaWFudCk7CiAgICAgICAgIG1vdmVHbG9iYWxF
eGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsKQEAgLTI1Niw3ICsyNTYsNyBAQCBKU1ZhbHVlIENJ
bnN0YW5jZTo6aW52b2tlQ29uc3RydWN0KEV4ZWNTCiAgICAgTlBWYXJpYW50IHJlc3VsdFZhcmlh
bnQ7CiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0VmFyaWFudCk7CiAgICAgewotICAgICAg
ICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAg
ICAgICBBU1NFUlQoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpOwogICAgICAgICBy
ZXR2YWwgPSBfb2JqZWN0LT5fY2xhc3MtPmNvbnN0cnVjdChfb2JqZWN0LCBjQXJncy5kYXRhKCks
IGNvdW50LCAmcmVzdWx0VmFyaWFudCk7CiAgICAgICAgIG1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4
ZWNTdGF0ZShleGVjKTsKQEAgLTMxNSw3ICszMTUsNyBAQCB2b2lkIENJbnN0YW5jZTo6Z2V0UHJv
cGVydHlOYW1lcyhFeGVjU3RhCiAgICAgTlBJZGVudGlmaWVyKiBpZGVudGlmaWVyczsKIAogICAg
IHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhl
eGVjKTsKICAgICAgICAgQVNTRVJUKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVsbCgpKTsK
ICAgICAgICAgYm9vbCBvayA9IF9vYmplY3QtPl9jbGFzcy0+ZW51bWVyYXRlKF9vYmplY3QsICZp
ZGVudGlmaWVycywgJmNvdW50KTsKICAgICAgICAgbW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0
YXRlKGV4ZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19ydW50aW1lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuY3BwCShyZXZp
c2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX3J1bnRpbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIEpTVmFsdWUgQ0ZpZWxkOjp2YWx1ZUZyb21J
bnN0YW5jZShFeGVjU3QKIAogICAgICAgICBib29sIHJlc3VsdDsKICAgICAgICAgewotICAgICAg
ICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhl
Yyk7CiAgICAgICAgICAgICByZXN1bHQgPSBvYmotPl9jbGFzcy0+Z2V0UHJvcGVydHkob2JqLCBf
ZmllbGRJZGVudGlmaWVyLCAmcHJvcGVydHkpOwogICAgICAgICAgICAgQ0luc3RhbmNlOjptb3Zl
R2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoZXhlYyk7CiAgICAgICAgIH0KQEAgLTcxLDcgKzcx
LDcgQEAgdm9pZCBDRmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdAogICAgICAgICBj
b252ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCBhVmFsdWUsICZ2YXJpYW50KTsKIAogICAgICAg
ICB7Ci0gICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhleGVjKTsKICAgICAgICAgICAgIG9iai0+X2NsYXNzLT5zZXRQcm9wZXJ0eShvYmos
IF9maWVsZElkZW50aWZpZXIsICZ2YXJpYW50KTsKICAgICAgICAgICAgIENJbnN0YW5jZTo6bW92
ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAJKHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcg
KzY4LDcgQEAgc3RhdGljIFN0cmluZyBjb252ZXJ0VVRGOFRvVVRGMTZXaXRoTGF0aQogLy8gVmFy
aWFudCB2YWx1ZSBtdXN0IGJlIHJlbGVhc2VkIHdpdGggTlBSZWxlYXNlVmFyaWFudFZhbHVlKCkK
IHZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZh
bHVlLCBOUFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgVk9JRF9UT19O
UFZBUklBTlQoKnJlc3VsdCk7CiAKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIGNvbnZlcnRWYWx1
ZVRvTlBWYXJpYW50KEV4ZWNTdGF0ZSogCiAKIEpTVmFsdWUgY29udmVydE5QVmFyaWFudFRvVmFs
dWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBOUFZhcmlhbnQqIHZhcmlhbnQsIFJvb3RPYmplY3Qq
IHJvb3RPYmplY3QpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAKICAgICBOUFZhcmlhbnRUeXBlIHR5
cGUgPSB2YXJpYW50LT50eXBlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pu
aV9qc29iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pu
aV9qc29iamVjdC5tbQkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdl
L2puaS9qbmlfanNvYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4NCw3ICsyODQsNyBAQCBq
b2JqZWN0IEphdmFKU09iamVjdDo6Y2FsbChqc3RyaW5nIG1ldGhvCiAgICAgCiAgICAgLy8gTG9v
a3VwIHRoZSBmdW5jdGlvbiBvYmplY3QuCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAogICAg
IElkZW50aWZpZXIgaWRlbnRpZmllcihleGVjLCBKYXZhU3RyaW5nKG1ldGhvZE5hbWUpLmltcGwo
KSk7CiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IF9pbXAtPmdldChleGVjLCBpZGVudGlmaWVyKTsK
QEAgLTMwNywxMiArMzA3LDEyIEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0OjpldmFsKGpzdHJpbmcg
c2NyaXAKIHsKICAgICBMT0coTGl2ZUNvbm5lY3QsICJKYXZhSlNPYmplY3Q6OmV2YWwgc2NyaXB0
ID0gJXMiLCBKYXZhU3RyaW5nKHNjcmlwdCkudXRmOCgpKTsKIAotICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAgCiAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9
IHRoaXMtPnJvb3RPYmplY3QoKTsKICAgICBpZiAoIXJvb3RPYmplY3QpCiAgICAgICAgIHJldHVy
biAwOwogCisgICAgSlNMb2NrSG9sZGVyIGxvY2socm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbERhdGEoKSk7CisgICAgCiAgICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
SlNDOjpldmFsdWF0ZShyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNl
KEphdmFTdHJpbmcoc2NyaXB0KS5pbXBsKCkpKTsKICAgICByb290T2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKQEAgLTMzMCw3ICszMzAs
NyBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6Z2V0TWVtYmVyKGpzdHJpbmcgCiAKICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwog
ICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBfaW1wLT5nZXQoZXhlYywg
SWRlbnRpZmllcihleGVjLCBKYXZhU3RyaW5nKG1lbWJlck5hbWUpLmltcGwoKSkpOwogCiAgICAg
cmV0dXJuIGNvbnZlcnRWYWx1ZVRvSk9iamVjdChyZXN1bHQpOwpAQCAtMzQ2LDcgKzM0Niw3IEBA
IHZvaWQgSmF2YUpTT2JqZWN0OjpzZXRNZW1iZXIoanN0cmluZyBtZW0KIAogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIF9pbXAtPm1ldGhvZFRh
YmxlKCktPnB1dChfaW1wLCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVtYmVy
TmFtZSkuaW1wbCgpKSwgY29udmVydEpPYmplY3RUb1ZhbHVlKGV4ZWMsIHZhbHVlKSwgc2xvdCk7
CiB9CkBAIC0zNjEsNyArMzYxLDcgQEAgdm9pZCBKYXZhSlNPYmplY3Q6OnJlbW92ZU1lbWJlcihq
c3RyaW5nIAogICAgICAgICByZXR1cm47CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgX2lt
cC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoX2ltcCwgZXhlYywgSWRlbnRpZmllcihl
eGVjLCBKYXZhU3RyaW5nKG1lbWJlck5hbWUpLmltcGwoKSkpOwogfQogCkBAIC0zNzYsNyArMzc2
LDcgQEAgam9iamVjdCBKYXZhSlNPYmplY3Q6OmdldFNsb3QoamludCBpbmRleAogCiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
IAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBfaW1wLT5nZXQoZXhlYywgaW5k
ZXgpOwogCiAgICAgcmV0dXJuIGNvbnZlcnRWYWx1ZVRvSk9iamVjdChyZXN1bHQpOwpAQCAtMzky
LDcgKzM5Miw3IEBAIHZvaWQgSmF2YUpTT2JqZWN0OjpzZXRTbG90KGppbnQgaW5kZXgsIGoKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIF9pbXAtPm1ldGhvZFRh
YmxlKCktPnB1dEJ5SW5kZXgoX2ltcCwgZXhlYywgKHVuc2lnbmVkKWluZGV4LCBjb252ZXJ0Sk9i
amVjdFRvVmFsdWUoZXhlYywgdmFsdWUpLCBmYWxzZSk7CiB9CiAKQEAgLTQwNSw5ICs0MDUsOSBA
QCBqc3RyaW5nIEphdmFKU09iamVjdDo6dG9TdHJpbmcoKSBjb25zdAogICAgIGlmICghcm9vdE9i
amVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogICAgIEpTT2JqZWN0ICp0aGlzT2JqID0gY29uc3RfY2FzdDxKU09iamVjdCo+
KF9pbXApOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGpzdHJpbmc+KGNvbnZlcnRWYWx1ZVRvSlZhbHVlKGV4ZWMsIHJv
b3RPYmplY3QsIHRoaXNPYmosIEphdmFUeXBlT2JqZWN0LCAiamF2YS5sYW5nLlN0cmluZyIpLmwp
OwogfQpAQCAtNDYzLDEzICs0NjMsMTMgQEAgamxvbmcgSmF2YUpTT2JqZWN0OjpjcmVhdGVOYXRp
dmUoamxvbmcgbgogCiBqb2JqZWN0IEphdmFKU09iamVjdDo6Y29udmVydFZhbHVlVG9KT2JqZWN0
KEpTVmFsdWUgdmFsdWUpIGNvbnN0CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKLSAgICAKICAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gdGhpcy0+cm9vdE9i
amVjdCgpOwogICAgIGlmICghcm9vdE9iamVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICAK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpOSUVudiAqZW52ID0g
Z2V0Sk5JRW52KCk7CiAgICAgam9iamVjdCByZXN1bHQgPSAwOwogICAgIApAQCAtNTU0LDcgKzU1
NCw3IEBAIEpTVmFsdWUgSmF2YUpTT2JqZWN0Ojpjb252ZXJ0Sk9iamVjdFRvVmEKICAgICAvLyBm
aWd1cmUgMjItNC4KICAgICBqb2JqZWN0IGNsYXNzT2ZJbnN0YW5jZSA9IGNhbGxKTklNZXRob2Q8
am9iamVjdD4odGhlT2JqZWN0LCAiZ2V0Q2xhc3MiLCAiKClMamF2YS9sYW5nL0NsYXNzOyIpOwog
ICAgIGlmICghY2xhc3NPZkluc3RhbmNlKSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAg
ICByZXR1cm4gSmF2YUluc3RhbmNlOjpjcmVhdGUodGhlT2JqZWN0LCBfcm9vdE9iamVjdCktPmNy
ZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYyk7CiAgICAgfQogCkBAIC01NjMsNyArNTYzLDcgQEAgSlNW
YWx1ZSBKYXZhSlNPYmplY3Q6OmNvbnZlcnRKT2JqZWN0VG9WYQogICAgIC8vIHBvaW50ZXIgYW5k
IHN0b3JlcyBpdCBpbiB0aGlzIG9iamVjdCwgc28gdGhhdCBpdCBjYW4gYmUgcmV0cmlldmVkIGJl
bG93LgogICAgIGpzdHJpbmcgY2xhc3NOYW1lID0gKGpzdHJpbmcpY2FsbEpOSU1ldGhvZDxqb2Jq
ZWN0PihjbGFzc09mSW5zdGFuY2UsICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7Iik7
CiAgICAgaWYgKCFjbGFzc05hbWUgfHwgKHN0cmNtcChKYXZhU3RyaW5nKGNsYXNzTmFtZSkudXRm
OCgpLCAic3VuLnBsdWdpbi5qYXZhc2NyaXB0LndlYmtpdC5KU09iamVjdCIpICE9IDApKSB7Ci0g
ICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICByZXR1cm4gSmF2YUluc3RhbmNlOjpjcmVhdGUo
dGhlT2JqZWN0LCBfcm9vdE9iamVjdCktPmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYyk7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9vYmpjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX29iamMubW0JKHJldmlzaW9uIDEy
MTE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX29iamMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDcgKzYyLDcgQEAgYm9vbCBKU0M6OkJpbmRpbmdzOjpkaXNwYXRjaEpOSUNh
bGwoRXhlYwogICAgICAgICAvLyBpbXBsZW1lbnRlZCBpbiBXZWJDb3JlIHdpbGwgZ3VhcmFudGVl
IHRoYXQgb25seSBhcHByb3ByaWF0ZSBKYXZhU2NyaXB0CiAgICAgICAgIC8vIGNhbiByZWZlcmVu
Y2UgdGhlIGFwcGxldC4KICAgICAgICAgewotICAgICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgSlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICAgICAgcmVzdWx0ID0g
W3ZpZXcgd2ViUGx1Z0luQ2FsbEphdmE6b2JqIGlzU3RhdGljOmlzU3RhdGljIHJldHVyblR5cGU6
cmV0dXJuVHlwZSBtZXRob2Q6bWV0aG9kSUQgYXJndW1lbnRzOmFyZ3MgY2FsbGluZ1VSTDpuaWwg
ZXhjZXB0aW9uRGVzY3JpcHRpb246Jl9leGNlcHRpb25EZXNjcmlwdGlvbl07CiAgICAgICAgIH0K
IApAQCAtNzIsNyArNzIsNyBAQCBib29sIEpTQzo6QmluZGluZ3M6OmRpc3BhdGNoSk5JQ2FsbChF
eGVjCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBlbHNlIGlmIChbdmlldyByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlBsdWdJbkNhbGxKYXZhOm1ldGhvZDpyZXR1cm5U
eXBlOmFyZ3VtZW50czopXSkgewotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKGV4ZWMpOwogICAgICAgICByZXN1bHQgPSBbdmlldyB3ZWJQbHVnSW5D
YWxsSmF2YTpvYmogbWV0aG9kOm1ldGhvZElEIHJldHVyblR5cGU6cmV0dXJuVHlwZSBhcmd1bWVu
dHM6YXJnc107CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDEyMTE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQ
cml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDcgKzE3NCw3IEBAIHN0YXRpYyBqb2Jq
ZWN0IGNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXYKIAoganZhbHVlIGNvbnZlcnRWYWx1ZVRvSlZh
bHVlKEV4ZWNTdGF0ZSogZXhlYywgUm9vdE9iamVjdCogcm9vdE9iamVjdCwgSlNWYWx1ZSB2YWx1
ZSwgSmF2YVR5cGUgamF2YVR5cGUsIGNvbnN0IGNoYXIqIGphdmFDbGFzc05hbWUpCiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKIAogICAgIGp2YWx1ZSByZXN1bHQ7CiAgICAgbWVtc2V0KCZyZXN1bHQsIDAsIHNp
emVvZihqdmFsdWUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFD
bGFzc0pTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2Mv
SmF2YUNsYXNzSlNDLmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMs
NyBAQCBKYXZhQ2xhc3M6OkphdmFDbGFzcyhqb2JqZWN0IGFuSW5zdGFuY2UpCiAgICAgICAgICAg
ICBqb2JqZWN0IGFKRmllbGQgPSBlbnYtPkdldE9iamVjdEFycmF5RWxlbWVudCgoam9iamVjdEFy
cmF5KWZpZWxkcywgaSk7CiAgICAgICAgICAgICBKYXZhRmllbGQqIGFGaWVsZCA9IG5ldyBKYXZh
RmllbGQoZW52LCBhSkZpZWxkKTsgLy8gZGVsZXRlZCBpbiB0aGUgSmF2YUNsYXNzIGRlc3RydWN0
b3IKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYWNxdWly
ZSBhIEpTTG9jayBoZXJlPwogICAgICAgICAgICAgICAgIG1fZmllbGRzLnNldChhRmllbGQtPm5h
bWUoKS5pbXBsKCksIGFGaWVsZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbnYtPkRl
bGV0ZUxvY2FsUmVmKGFKRmllbGQpOwpAQCAtNzksNyArNzksNyBAQCBKYXZhQ2xhc3M6OkphdmFD
bGFzcyhqb2JqZWN0IGFuSW5zdGFuY2UpCiAgICAgICAgICAgICBKYXZhTWV0aG9kKiBhTWV0aG9k
ID0gbmV3IEphdmFNZXRob2QoZW52LCBhSk1ldGhvZCk7IC8vIGRlbGV0ZWQgaW4gdGhlIEphdmFD
bGFzcyBkZXN0cnVjdG9yCiAgICAgICAgICAgICBNZXRob2RMaXN0KiBtZXRob2RMaXN0OwogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNM
b2NrIGhlcmU/CiAKICAgICAgICAgICAgICAgICBtZXRob2RMaXN0ID0gbV9tZXRob2RzLmdldChh
TWV0aG9kLT5uYW1lKCkuaW1wbCgpKTsKICAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZExpc3Qp
IHsKQEAgLTEwMCw3ICsxMDAsNyBAQCBKYXZhQ2xhc3M6On5KYXZhQ2xhc3MoKQogewogICAgIGZh
c3RGcmVlKGNvbnN0X2Nhc3Q8Y2hhcio+KG1fbmFtZSkpOwogCi0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGFjcXVpcmUgYSBK
U0xvY2sgaGVyZT8KIAogICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2ZpZWxkcyk7CiAgICAgbV9maWVs
ZHMuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0
YW5jZUpTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2Mv
SmF2YUluc3RhbmNlSlNDLmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcs
NyArODcsNyBAQCBDbGFzcyogSmF2YUluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0CiAKIEpTVmFs
dWUgSmF2YUluc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIGpzdHJpbmcgc3RyaW5nVmFsdWUgPSAoanN0cmluZyljYWxsSk5J
TWV0aG9kPGpvYmplY3Q+KG1faW5zdGFuY2UtPmluc3RhbmNlKCksICJ0b1N0cmluZyIsICIoKUxq
YXZhL2xhbmcvU3RyaW5nOyIpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pz
Yy9KYXZhTWV0aG9kSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
am5pL2pzYy9KYXZhTWV0aG9kSlNDLmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dl
YkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YU1ldGhvZEpTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkyLDcgKzkyLDcgQEAgSmF2YU1ldGhvZDo6fkphdmFNZXRob2QoKQogLy8gd2UgZ2V0ICcuJyBi
ZXR3ZWVuIGNvbXBvbmVudHMgZnJvbSB0aGUgcmVmbGVjdGlvbiBBUEkuCiBzdGF0aWMgdm9pZCBh
cHBlbmRDbGFzc05hbWUoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgY2hhciogY2xhc3NO
YW1lKQogewotICAgIEFTU0VSVChKU0xvY2s6OmxvY2tDb3VudCgpID4gMCk7CisgICAgQVNTRVJU
KEpTQzo6SlNHbG9iYWxEYXRhOjpzaGFyZWRJbnN0YW5jZSgpLmFwaUxvY2soKS5jdXJyZW50VGhy
ZWFkSXNIb2xkaW5nTG9jaygpKTsKIAogICAgIGNoYXIqIGMgPSBmYXN0U3RyRHVwKGNsYXNzTmFt
ZSk7CiAKQEAgLTExMSw3ICsxMTEsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRDbGFzc05hbWUoU3Ry
aW5nQnVpbGRlCiBjb25zdCBjaGFyKiBKYXZhTWV0aG9kOjpzaWduYXR1cmUoKSBjb25zdAogewog
ICAgIGlmICghbV9zaWduYXR1cmUpIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNMb2Nr
IGhlcmU/CiAKICAgICAgICAgU3RyaW5nQnVpbGRlciBzaWduYXR1cmVCdWlsZGVyOwogICAgICAg
ICBzaWduYXR1cmVCdWlsZGVyLmFwcGVuZCgnKCcpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2puaS9qc2MvSmF2YVN0cmluZ0pTQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9qbmkvanNjL0phdmFTdHJpbmdKU0MuaAkocmV2aXNpb24gMTIxMTgzKQorKysgU291
cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YVN0cmluZ0pTQy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIEphdmFTdHJpbmdKU0NfaAogCiAjaW5jbHVkZSAi
Sk5JVXRpbGl0eS5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgogI2luY2x1ZGUgIkph
dmFJbnN0YW5jZUpTQy5oIgogCiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KQEAgLTUyLDIw
ICs1MywyMCBAQCBwdWJsaWM6CiAKICAgICBKYXZhU3RyaW5nKCkKICAgICB7Ci0gICAgICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
ICAgICBtX2ltcGwgPSBVU3RyaW5nKCkuaW1wbCgpOwogICAgIH0KIAogICAgIH5KYXZhU3RyaW5n
KCkKICAgICB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBtX2ltcGwgPSAwOwogICAgIH0KIAogICAgIGNvbnN0
IGNoYXIqIHV0ZjgoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFtX3V0ZjhTdHJpbmcuZGF0
YSgpKSB7Ci0gICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgICAgICBtX3V0ZjhTdHJpbmcgPSBVU3RyaW5n
KG1faW1wbCkudXRmOCgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBtX3V0ZjhTdHJpbmcu
ZGF0YSgpOwpAQCAtNzksNyArODAsNyBAQCBwcml2YXRlOgogICAgICAgICBpbnQgc2l6ZSA9IGUt
PkdldFN0cmluZ0xlbmd0aChzKTsKICAgICAgICAgY29uc3QgamNoYXIqIHVjID0gZ2V0VUNoYXJh
Y3RlcnNGcm9tSlN0cmluZ0luRW52KGUsIHMpOwogICAgICAgICB7Ci0gICAgICAgICAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2soV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAg
ICAgICAgICAgICBtX2ltcGwgPSBVU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIq
Pih1YyksIHNpemUpLmltcGwoKTsKICAgICAgICAgfQogICAgICAgICByZWxlYXNlVUNoYXJhY3Rl
cnNGb3JKU3RyaW5nSW5FbnYoZSwgcywgdWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdl
L2pzYy9CcmlkZ2VKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
c2MvQnJpZGdlSlNDLmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2pzYy9CcmlkZ2VKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIEpT
T2JqZWN0KiBJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdCgKICAgICBpZiAoUnVudGltZU9i
amVjdCogZXhpc3RpbmdPYmplY3QgPSBtX3J1bnRpbWVPYmplY3QuZ2V0KCkpCiAgICAgICAgIHJl
dHVybiBleGlzdGluZ09iamVjdDsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgUnVudGltZU9iamVjdCog
bmV3T2JqZWN0ID0gbmV3UnVudGltZU9iamVjdChleGVjKTsKICAgICBtX3J1bnRpbWVPYmplY3Qg
PSBQYXNzV2VhazxSdW50aW1lT2JqZWN0PihuZXdPYmplY3QpOwogICAgIG1fcm9vdE9iamVjdC0+
YWRkUnVudGltZU9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIG5ld09iamVjdCk7CkBAIC0xMDEs
NyArMTAxLDcgQEAgSlNPYmplY3QqIEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KAogCiBS
dW50aW1lT2JqZWN0KiBJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKIAogICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0
dXJlIHVzZXMgdGhlIHByb3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKICAg
ICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gdGhlIHJpZ2h0IGdsb2JhbCBvYmplY3QgZm9yICJpIi4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbQkocmV2
aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5j
ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCB2b2lkIE9iamNJbnN0YW5jZTo6
bW92ZUdsb2JhbEV4Y2VwdGlvblRvCiAgICAgfQogCiAgICAgaWYgKCFzX2V4Y2VwdGlvbkVudmly
b25tZW50IHx8IHNfZXhjZXB0aW9uRW52aXJvbm1lbnQgPT0gZXhlYy0+ZHluYW1pY0dsb2JhbE9i
amVjdCgpKSB7Ci0gICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMs
IHNfZXhjZXB0aW9uKTsKICAgICB9CiAKQEAgLTIzOSw3ICsyMzksNyBAQCBKU1ZhbHVlIE9iamNJ
bnN0YW5jZTo6aW52b2tlT2JqY01ldGhvZChFCiB7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1Vu
ZGVmaW5lZCgpOwogICAgIAotICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhlIEB0cnkg
c2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgorICAgIEpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBA
dHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KIAogICAgIHNldEdsb2Jh
bEV4Y2VwdGlvbihuaWwpOwogICAgIApAQCAtMzU0LDcgKzM1NCw3IEBAIEpTVmFsdWUgT2JqY0lu
c3RhbmNlOjppbnZva2VEZWZhdWx0TWV0aG8KIHsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzVW5k
ZWZpbmVkKCk7CiAKLSAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3Bl
IGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KKyAgICBKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRyeSBz
Y29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAgICAgc2V0R2xvYmFsRXhjZXB0
aW9uKG5pbCk7CiAgICAgCiBAdHJ5IHsKQEAgLTQxMSw3ICs0MTEsNyBAQCBib29sIE9iamNJbnN0
YW5jZTo6c2V0VmFsdWVPZlVuZGVmaW5lZEZpCiAgICAgaWYgKCFbdGFyZ2V0T2JqZWN0IHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0VmFsdWU6Zm9yVW5kZWZpbmVkS2V5OildKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgLy8gQ2FuJ3QgcHV0IHRoaXMgaW5zaWRlIHRoZSBA
dHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4KKyAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZXhlYyk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0
aGUgQHRyeSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCiAKICAgICAvLyBU
aGlzIGNoZWNrIGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5IGJlY2F1c2UgTlNPYmplY3QgaW1wbGVt
ZW50cwogICAgIC8vIHNldFZhbHVlOmZvclVuZGVmaW5lZEtleTosIGFuZCB1bmZvcnR1bmF0ZWx5
IHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCkBAIC00NDMsNyArNDQzLDcgQEAgSlNWYWx1ZSBP
YmpjSW5zdGFuY2U6OmdldFZhbHVlT2ZVbmRlZmluZQogICAgIAogICAgIGlkIHRhcmdldE9iamVj
dCA9IGdldE9iamVjdCgpOwogCi0gICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRy
eSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhl
IEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogCiAgICAgLy8gVGhp
cyBjaGVjayBpcyBub3QgcmVhbGx5IG5lY2Vzc2FyeSBiZWNhdXNlIE5TT2JqZWN0IGltcGxlbWVu
dHMKICAgICAvLyB2YWx1ZUZvclVuZGVmaW5lZEtleTosIGFuZCB1bmZvcnR1bmF0ZWx5IHRoZSBk
ZWZhdWx0IGltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9v
YmpjX3J1bnRpbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMv
b2JqY19ydW50aW1lLm1tCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTkyLDE5ICs5MiwxOCBA
QCBKU1ZhbHVlIE9iamNGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlCiAgICAgCiAgICAgaWQg
dGFyZ2V0T2JqZWN0ID0gKHN0YXRpY19jYXN0PGNvbnN0IE9iamNJbnN0YW5jZSo+KGluc3RhbmNl
KSktPmdldE9iamVjdCgpOwogCi0gICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KFNpbGVuY2VBc3NlcnRpb25zT25seSk7IC8vIENhbid0IHB1dCB0aGlzIGluc2lkZSB0aGUgQHRy
eSBzY29wZSBiZWNhdXNlIGl0IHVud2luZHMgaW5jb3JyZWN0bHkuCisgICAgSlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4ZWMpOyAvLyBDYW4ndCBwdXQgdGhpcyBpbnNpZGUgdGhl
IEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgogCiAgICAgQHRyeSB7
CiAgICAgICAgIGlmIChpZCBvYmpjVmFsdWUgPSBbdGFyZ2V0T2JqZWN0IHZhbHVlRm9yS2V5OihO
U1N0cmluZyAqKV9uYW1lLmdldCgpXSkKICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnZlcnRPYmpj
VmFsdWVUb1ZhbHVlKGV4ZWMsICZvYmpjVmFsdWUsIE9iamNPYmplY3RUeXBlLCBpbnN0YW5jZS0+
cm9vdE9iamVjdCgpKTsKICAgICAgICAgewotICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
ICAgICAgICAgICAgT2JqY0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUo
ZXhlYyk7CiAgICAgICAgIH0KICAgICB9IEBjYXRjaChOU0V4Y2VwdGlvbiogbG9jYWxFeGNlcHRp
b24pIHsKLSAgICAgICAgSlNMb2NrOjpsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFts
b2NhbEV4Y2VwdGlvbiByZWFzb25dKTsKLSAgICAgICAgSlNMb2NrOjp1bmxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKICAgICB9CiAKICAgICAvLyBXb3JrIGFyb3VuZCBwcm9ibGVtIGluIHNv
bWUgdmVyc2lvbnMgb2YgR0NDIHdoZXJlIHJlc3VsdCBnZXRzIG1hcmtlZCB2b2xhdGlsZSBhbmQK
QEAgLTEyNSwxOCArMTI0LDE3IEBAIHZvaWQgT2JqY0ZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2Uo
RXhlY1MKICAgICBpZCB0YXJnZXRPYmplY3QgPSAoc3RhdGljX2Nhc3Q8Y29uc3QgT2JqY0luc3Rh
bmNlKj4oaW5zdGFuY2UpKS0+Z2V0T2JqZWN0KCk7CiAgICAgaWQgdmFsdWUgPSBjb252ZXJ0VmFs
dWVUb09iamNPYmplY3QoZXhlYywgYVZhbHVlKTsKIAotICAgIEpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOyAvLyBDYW4ndCBwdXQgdGhpcyBp
bnNpZGUgdGhlIEB0cnkgc2NvcGUgYmVjYXVzZSBpdCB1bndpbmRzIGluY29ycmVjdGx5LgorICAg
IEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhleGVjKTsgLy8gQ2FuJ3QgcHV0IHRo
aXMgaW5zaWRlIHRoZSBAdHJ5IHNjb3BlIGJlY2F1c2UgaXQgdW53aW5kcyBpbmNvcnJlY3RseS4K
IAogICAgIEB0cnkgewogICAgICAgICBbdGFyZ2V0T2JqZWN0IHNldFZhbHVlOnZhbHVlIGZvcktl
eTooTlNTdHJpbmcgKilfbmFtZS5nZXQoKV07CiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgICAgIE9iamNJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlv
blRvRXhlY1N0YXRlKGV4ZWMpOwogICAgICAgICB9CiAgICAgfSBAY2F0Y2goTlNFeGNlcHRpb24q
IGxvY2FsRXhjZXB0aW9uKSB7Ci0gICAgICAgIEpTTG9jazo6bG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgdGhyb3dF
cnJvcihleGVjLCBbbG9jYWxFeGNlcHRpb24gcmVhc29uXSk7Ci0gICAgICAgIEpTTG9jazo6dW5s
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYnJpZGdlL29iamMvb2JqY191dGlsaXR5Lm1tCShyZXZpc2lvbiAxMjExODMpCisrKyBT
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3V0aWxpdHkubW0JKHdvcmtpbmcgY29weSkK
QEAgLTg2LDcgKzg2LDcgQEAgT2JqY1ZhbHVlIGNvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlKEV4ZWNT
dAogCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgT2JqY09iamVjdFR5cGU6IHsK
LSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
SlNHbG9iYWxPYmplY3QgKm9yaWdpbkdsb2JhbE9iamVjdCA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxP
YmplY3QoKTsKICAgICAgICAgICAgIFJvb3RPYmplY3QqIG9yaWdpblJvb3RPYmplY3QgPSBmaW5k
Um9vdE9iamVjdChvcmlnaW5HbG9iYWxPYmplY3QpOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIE9iamNW
YWx1ZSBjb252ZXJ0VmFsdWVUb09iamNWYWx1ZShFeGVjU3QKIAogSlNWYWx1ZSBjb252ZXJ0TlNT
dHJpbmdUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIE5TU3RyaW5nICpuc3N0cmluZykKIHsKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogICAgIAogICAgIHVuaWNoYXIgKmNoYXJzOwogICAgIHVuc2lnbmVkIGludCBs
ZW5ndGggPSBbbnNzdHJpbmcgbGVuZ3RoXTsKQEAgLTE3OCw3ICsxNzgsNyBAQCBKU1ZhbHVlIGNv
bnZlcnROU1N0cmluZ1RvU3RyaW5nKEV4ZWNTdGF0CiAqLwogSlNWYWx1ZSBjb252ZXJ0T2JqY1Zh
bHVlVG9WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIHZvaWQqIGJ1ZmZlciwgT2JqY1ZhbHVlVHlwZSB0
eXBlLCBSb290T2JqZWN0KiByb290T2JqZWN0KQogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCiAgICAg
c3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgT2JqY09iamVjdFR5cGU6IHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcAkocmV2aXNpb24gMTIxMTgzKQor
KysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKICNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIk9iamVjdFByb3Rv
dHlwZS5oIgpAQCAtOTIsNyArOTMsNyBAQCBRdEluc3RhbmNlOjpRdEluc3RhbmNlKFFPYmplY3Qq
IG8sIFBhc3NSCiAKIFF0SW5zdGFuY2U6On5RdEluc3RhbmNlKCkKIHsKLSAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKFdlYkNvcmU6
OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogCiAgICAgY2FjaGVkSW5z
dGFuY2VzLnJlbW92ZShtX2hhc2hrZXkpOwogCkBAIC0xMTksNyArMTIwLDcgQEAgUXRJbnN0YW5j
ZTo6flF0SW5zdGFuY2UoKQogCiBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IFF0SW5zdGFuY2U6Omdl
dFF0SW5zdGFuY2UoUU9iamVjdCogbywgUGFzc1JlZlB0cjxSb290T2JqZWN0PiByb290T2JqZWN0
LCBWYWx1ZU93bmVyc2hpcCBvd25lcnNoaXApCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJDb3JlOjpKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIGZvcmVhY2ggKFF0SW5zdGFuY2Uq
IGluc3RhbmNlLCBjYWNoZWRJbnN0YW5jZXMudmFsdWVzKG8pKQogICAgICAgICBpZiAoaW5zdGFu
Y2UtPnJvb3RPYmplY3QoKSA9PSByb290T2JqZWN0KSB7CkBAIC0xODAsNyArMTgxLDcgQEAgQ2xh
c3MqIFF0SW5zdGFuY2U6OmdldENsYXNzKCkgY29uc3QKIAogUnVudGltZU9iamVjdCogUXRJbnN0
YW5jZTo6bmV3UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICBtX21ldGhvZHMuY2xlYXIoKTsKICAgICByZXR1cm4gUXRSdW50aW1lT2JqZWN0OjpjcmVh
dGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0aGlzKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHJldmlzaW9u
IDEyMTE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDIwLDcgKzQyMCw3IEBAIFJ1bnRpbWVPYmplY3QqIFF0UGl4
bWFwSW5zdGFuY2U6Om5ld1J1bnQKIAogSlNPYmplY3QqIFF0UGl4bWFwSW5zdGFuY2U6OmNyZWF0
ZVBpeG1hcFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFJvb3RPYmpl
Y3Q+IHJvb3QsIGNvbnN0IFFWYXJpYW50JiBkYXRhKQogewotICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgUmVm
UHRyPFF0UGl4bWFwSW5zdGFuY2U+IGluc3RhbmNlID0gYWRvcHRSZWYobmV3IFF0UGl4bWFwSW5z
dGFuY2Uocm9vdCwgZGF0YSkpOwogICAgIHJldHVybiBpbnN0YW5jZS0+Y3JlYXRlUnVudGltZU9i
amVjdChleGVjKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5j
cHAJKHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50
aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDcgKzIzMCw3IEBAIFFWYXJpYW50IGNvbnZl
cnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXQKICAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7CiAg
ICAgfQogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1JlYWxUeXBlIHR5cGUgPSB2YWx1ZVJlYWxUeXBl
KGV4ZWMsIHZhbHVlKTsKICAgICBpZiAoaGludCA9PSBRTWV0YVR5cGU6OlZvaWQpIHsKICAgICAg
ICAgc3dpdGNoKHR5cGUpIHsKQEAgLTgyNCw3ICs4MjQsNyBAQCBKU1ZhbHVlIGNvbnZlcnRRVmFy
aWFudFRvVmFsdWUoRXhlY1N0YXRlCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICB9CiAK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogCiAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpCb29sKQogICAgICAg
ICByZXR1cm4ganNCb29sZWFuKHZhcmlhbnQudG9Cb29sKCkpOwpAQCAtMTQyMCw3ICsxNDIwLDcg
QEAgRW5jb2RlZEpTVmFsdWUgUXRSdW50aW1lTWV0YU1ldGhvZDo6Y2FsbAogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gV2UgaGF2ZSB0byBw
aWNrIGEgbWV0aG9kIHRoYXQgbWF0Y2hlcy4uCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIFFPYmplY3Qg
Km9iaiA9IGQtPm1faW5zdGFuY2UtPmdldE9iamVjdCgpOwogICAgIGlmIChvYmopIHsKQEAgLTE1
NjEsNyArMTU2MSw3IEBAIEVuY29kZWRKU1ZhbHVlIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QK
IHsKICAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSogZCA9IHN0YXRpY19jYXN0PFF0
UnVudGltZUNvbm5lY3Rpb25NZXRob2QgKj4oZXhlYy0+Y2FsbGVlKCkpLT5kX2Z1bmMoKTsKIAot
ICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAKICAgICBRT2JqZWN0KiBzZW5kZXIgPSBkLT5tX2luc3RhbmNlLT5nZXRP
YmplY3QoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWVfcXQ0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZV9x
dDQuY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRf
cnVudGltZV9xdDQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNyArMjMwLDcgQEAgUVZhcmlh
bnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdAogICAgICAgICByZXR1cm4gUVZhcmlh
bnQoKTsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTUmVhbFR5cGUgdHlwZSA9IHZhbHVl
UmVhbFR5cGUoZXhlYywgdmFsdWUpOwogICAgIGlmIChoaW50ID09IFFNZXRhVHlwZTo6Vm9pZCkg
ewogICAgICAgICBzd2l0Y2godHlwZSkgewpAQCAtODI0LDcgKzgyNCw3IEBAIEpTVmFsdWUgY29u
dmVydFFWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwog
ICAgIH0KIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6OkJvb2wp
CiAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4odmFyaWFudC50b0Jvb2woKSk7CkBAIC0xNDI5LDcg
KzE0MjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjYWxsCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyBXZSBo
YXZlIHRvIHBpY2sgYSBtZXRob2QgdGhhdCBtYXRjaGVzLi4KLSAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAg
UU9iamVjdCAqb2JqID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCk7CiAgICAgaWYgKG9iaikg
ewpAQCAtMTU3MCw3ICsxNTcwLDcgQEAgRW5jb2RlZEpTVmFsdWUgUXRSdW50aW1lQ29ubmVjdGlv
bk1ldGhvZAogewogICAgIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhKiBkID0gc3RhdGlj
X2Nhc3Q8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCAqPihleGVjLT5jYWxsZWUoKSktPmRfZnVu
YygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIFFPYmplY3QqIHNlbmRlciA9IGQtPm1faW5zdGFu
Y2UtPmdldE9iamVjdCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1MSw3ICs1NTEsNyBAQCB2b2lk
IEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAgICAgbV9jb250ZXh0U3RhdGVT
YXZlciA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKCptX2ltYWdlQnVm
ZmVyLT5jb250ZXh0KCkpKTsKIAogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2sgbG9jayhK
U0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmdsb2JhbERhdGEoKSk7CiAgICAgc2l6ZV90IG51bUJ5
dGVzID0gNCAqIG1faW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLndpZHRoKCkgKiBtX2ltYWdl
QnVmZmVyLT5pbnRlcm5hbFNpemUoKS5oZWlnaHQoKTsKICAgICBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmdsb2JhbERhdGEoKS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3QobnVtQnl0ZXMp
OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCShy
ZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDggKzgxLDggQEAgdm9pZCBIVE1MSW1hZ2VMb2FkZXI6
Om5vdGlmeUZpbmlzaGVkKENhYwogI2lmIFVTRShKU0MpCiAgICAgaWYgKCFsb2FkRXJyb3IpIHsK
ICAgICAgICAgaWYgKCFlbGVtLT5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIEpTQzo6SlNM
b2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgICAgICAgICAgSlNDOjpK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpOworICAgICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhKTsK
ICAgICAgICAgICAgIGdsb2JhbERhdGEtPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNhY2hl
ZEltYWdlLT5lbmNvZGVkU2l6ZSgpKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDcgKzI0
MCw3IEBAIGJvb2wgUGx1Z2luVmlldzo6c3RhcnQoKQogICAgIHsKICAgICAgICAgUGx1Z2luVmll
dzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAjaWYgVVNFKEpTQykKLSAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICNlbmRpZgogICAgICAgICBz
ZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5uZXdwKChOUE1JTUVUeXBlKW1fbWltZVR5cGUudXRmOCgpLmRhdGEoKSwgbV9pbnN0
YW5jZSwgbV9tb2RlLCBtX3BhcmFtQ291bnQsIG1fcGFyYW1OYW1lcywgbV9wYXJhbVZhbHVlcywg
TlVMTCk7CkBAIC0zMzAsNyArMzMwLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzdG9wKCkKICAgICBt
X2lzU3RhcnRlZCA9IGZhbHNlOwogCiAjaWYgVVNFKEpTQykKLSAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cGVyZm9ybVJlcXVl
c3QoUGx1Z2luUmUKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCkp
IHsKICAgICAgICAgICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlz
KTsKICNpZiBVU0UoSlNDKQotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIHNldENh
bGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPnVybG5vdGlmeShtX2luc3RhbmNlLCByZXF1ZXN0VVJMLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIE5QUkVTX0RPTkUsIHJlcXVlc3QtPm5vdGlmeURhdGEoKSk7CkBAIC03MzYsNyArNzM2LDcg
QEAgTlBPYmplY3QqIFBsdWdpblZpZXc6Om5wT2JqZWN0KCkKICAgICB7CiAgICAgICAgIFBsdWdp
blZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwogI2lmIFVTRShKU0MpCi0gICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICAg
ICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1
Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9i
amVjdCwgJm9iamVjdCk7CkBAIC0xNDkyLDcgKzE0OTIsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBy
aXZhdGVCcm93c2luZ1N0YXRlQ2hhCiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
Vmlldyh0aGlzKTsKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpKTsKICNlbmRpZgogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgTlBC
b29sIHZhbHVlID0gcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvYmxhY2tiZXJyeS9QbHVnaW5WaWV3QmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2JlcnJ5L1BsdWdpblZpZXdCbGFja0JlcnJ5
LmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ibGFja2Jl
cnJ5L1BsdWdpblZpZXdCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAzLDcgKzQw
Myw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhp
cyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNldENh
bGxpbmdQbHVnaW4odHJ1ZSk7CiAKICAgICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CkBAIC05NzAsNyArOTcwLDcgQEAg
dm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkKICAgICAgICAgKChOUFNldFdp
bmRvd0NhbGxiYWNrU3RydWN0KiltX25wV2luZG93LndzX2luZm8pLT53aW5kb3dHcm91cCA9IHdp
bmRvdy0+d2luZG93R3JvdXAoKTsKIAogICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5W
aWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAg
ICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogCiAgICAgLy8gRklYTUU6IFBhc3Npbmcgem9vbUZh
Y3RvciB0byBzZXR3aW5kb3cgbWFrZSB3aW5kb3dlZCBwbHVnaW4gc2NhbGUgaW5jb3JyZWN0bHku
CkBAIC0xMjIwLDcgKzEyMjAsNyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQog
CiAgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkgewogICAgICAgICBQ
bHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgc2V0Q2FsbGluZ1BsdWdp
bih0cnVlKTsKICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5z
dGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVlZHNYRW1iZWQpOwogICAgICAgICBz
ZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKQEAgLTEzMDEsNyArMTMwMSw3IEBAIHZvaWQgUGx1Z2lu
Vmlldzo6Z2V0V2luZG93SW5mbyhWZWN0b3I8UGwKICAgICB2b2lkKiB2YWxQdHIgPSAwOwogCiAg
ICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7
CiAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZw
bHVnaW5TY3JlZW5XaW5kb3csICZ2YWxQdHIpOwogICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2Up
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9lZmwvUGx1Z2luVmlld0VmbC5jcHAJ
KHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZWZsL1BsdWdpblZp
ZXdFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGJvb2wgUGx1Z2luVmll
dzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
UGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2UpOworICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAKICAgICBib29sIGFjY2VwdGVkID0g
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZldmVudCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkocmV2aXNp
b24gMTIxMTgzKQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCBib29sIFBsdWdpblZpZXc6OmRp
c3BhdGNoTlBFdmVudChOUEV2ZW50CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFBsdWdp
blZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogCiAgICAg
Ym9vbCBhY2NlcHRlZCA9ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5j
ZSwgJmV2ZW50KTsKQEAgLTI3Niw3ICsyNzYsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogCiAKIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChL
ZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAKICAgICBpZiAoIW1faXNTdGFydGVkIHx8IG1fc3RhdHVzICE9IFBsdWdpblN0
YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA2LDcgKzQwNiw3
IEBAIHN0YXRpYyB2b2lkIHNldFhDcm9zc2luZ0V2ZW50U3BlY2lmaWNGaWUKIAogdm9pZCBQbHVn
aW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQogewotICAgIEpTQzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKIAogICAgIGlmICghbV9pc1N0YXJ0ZWQg
fHwgbV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQogICAgICAgICBy
ZXR1cm47CkBAIC01MzUsNyArNTM1LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lm
TmVlZGVkKCkKICAgICB9CiAKICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0
aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgc2V0
Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2lu
ZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNl
KTsKQEAgLTg0Miw3ICs4NDIsNyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQog
I2lmIGRlZmluZWQoWFBfVU5JWCkKICAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdl
dHZhbHVlKSB7CiAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
ICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwogICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVkLCAmbV9uZWVk
c1hFbWJlZCk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFjLm1tCShyZXZpc2lvbiAxMjExODMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC00MjYsNyArNDI2LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lm
TmVlZGVkKCkKICAgICAgICAgICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgLSBtX25wV2lu
ZG93LmNsaXBSZWN0LmxlZnQsIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tIC0gbV9ucFdpbmRv
dy5jbGlwUmVjdC50b3ApOwogCiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
dGhpcyk7Ci0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNl
dENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdp
bmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxz
ZSk7CkBAIC03NzIsNyArNzcyLDcgQEAgUG9pbnQgUGx1Z2luVmlldzo6bW91c2VQb3NGb3JQbHVn
aW4oTW91cwogYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYgZXZlbnQp
CiB7CiAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Ci0gICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHNldENhbGxpbmdQbHVnaW4o
dHJ1ZSk7CiAKICAgICBib29sIGFjY2VwdGVkID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2
ZW50KG1faW5zdGFuY2UsICZldmVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0
L1BsdWdpblZpZXdRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9x
dC9QbHVnaW5WaWV3UXQuY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Myw3ICszNzMs
NyBAQCBib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50CiAKICAgICBQbHVn
aW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKICNpZiBVU0UoSlNDKQotICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICNlbmRpZgogICAgIHNldENhbGxp
bmdQbHVnaW4odHJ1ZSk7CiAgICAgYm9vbCBhY2NlcHRlZCA9ICFtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKQEAgLTY4Nyw3ICs2ODcsNyBAQCB2b2lk
IFBsdWdpblZpZXc6OnNldE5QV2luZG93SWZOZWVkZWQoKQogCiAgICAgUGx1Z2luVmlldzo6c2V0
Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CiAjaWYgVVNFKEpTQykKLSAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNl
Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAjZW5kaWYKICAgICBzZXRDYWxsaW5nUGx1Z2luKHRy
dWUpOwogICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwg
Jm1fbnBXaW5kb3cpOwpAQCAtOTQ5LDcgKzk0OSw3IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZv
cm1TdGFydCgpCiAgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkgewog
ICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKICNpZiBVU0Uo
SlNDKQotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6
OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
I2VuZGlmCiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CiAgICAgICAgIG1fcGx1Z2lu
LT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1i
ZWQsICZtX25lZWRzWEVtYmVkKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1Bs
dWdpblZpZXdXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2lu
L1BsdWdpblZpZXdXaW4uY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM3LDcgKzUz
Nyw3IEBAIGJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQKICAgICAgICAg
c2hvdWxkUG9wID0gdHJ1ZTsKICAgICB9CiAKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKICAgICBib29sIGFjY2Vw
dGVkID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVu
dCk7CiAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CkBAIC02ODgsNyArNjg4LDcgQEAgdm9p
ZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleQogICAgIH0gZWxzZQogICAgICAg
ICByZXR1cm47CiAKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAg
ICAgaWYgKGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7CiB9CkBAIC03NTgsNyArNzU4LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5k
bGVNb3VzZUV2ZW50KE1vdXNlRQogICAgIH0gZWxzZQogICAgICAgICByZXR1cm47CiAKLSAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgLy8gRklYTUU6IENvbnNp
ZGVyIGJhY2sgcG9ydGluZyB0aGUgaHR0cDovL3dlYmtpdC5vcmcvYi81ODEwOCBmaXggaGVyZS4K
ICAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQogICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKQEAgLTg0Niw3ICs4NDYsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldE5Q
V2luZG93UmVjdChjb25zdCBJCiAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOwogCiAg
ICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpIHsKLSAgICAgICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgc2V0Q2FsbGlu
Z1BsdWdpbih0cnVlKTsKICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRv
dyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CiAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFs
c2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RT
dXBwb3J0LmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9q
cy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlVGVzdFN1cHBvcnQgewogCiB2b2lkIGluamVjdEludGVybmFsc09i
amVjdChKU0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IGdsb2Jh
bE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IHNjcmlwdENvbnRleHQtPmlzRG9jdW1lbnQoKSA/IHN0YXRpY19jYXN0PERvY3VtZW50Kj4o
c2NyaXB0Q29udGV4dCkgOiAwOwpAQCAtNDksOCArNDksOCBAQCB2b2lkIGluamVjdEludGVybmFs
c09iamVjdChKU0NvbnRleHRSZWYgCiAKIHZvaWQgcmVzZXRJbnRlcm5hbHNPYmplY3QoSlNDb250
ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAg
IEludGVybmFscyAqIGludGVybmFscyA9IHRvSW50ZXJuYWxzKGdsb2JhbE9iamVjdC0+Z2V0RGly
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCBJbnRlcm5hbHM6OmludGVy
bmFsc0lkKSkpOwogICAgIGlmIChpbnRlcm5hbHMpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUxLDggKzg1MSw4IEBAIHZv
aWQgWE1MSHR0cFJlcXVlc3Q6OmRyb3BQcm90ZWN0aW9uKCkKICAgICAvLyBvdXQuIEJ1dCBpdCBp
cyBwcm90ZWN0ZWQgZnJvbSBHQyB3aGlsZSBsb2FkaW5nLCBzbyB0aGlzCiAgICAgLy8gY2FuJ3Qg
YmUgcmVjb3VwZWQgdW50aWwgdGhlIGxvYWQgaXMgZG9uZSwgc28gb25seQogICAgIC8vIHJlcG9y
dCB0aGUgZXh0cmEgY29zdCBhdCB0aGF0IHBvaW50LgotICAgIEpTQzo6SlNMb2NrIGxvY2soSlND
OjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTQzo6SlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5nbG9iYWxEYXRhKCk7CisgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9jayhnbG9iYWxEYXRhKTsKICAgICBnbG9iYWxEYXRhLT5oZWFwLnJlcG9y
dEV4dHJhTWVtb3J5Q29zdChtX3Jlc3BvbnNlQnVpbGRlci5sZW5ndGgoKSAqIDIpOwogI2VuZGlm
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTE5MykKKysrIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDEyLTA2LTI1ICBNYXJr
IEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNo
b3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5z
dGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNv
cnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGgg
dGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4gQWxzbyBhZGRlZCBhIGNvdXBsZSBKU0xv
Y2tzIHRvIHBsYWNlcyB0aGF0IGRpZG4ndCBhbHJlYWR5IAorICAgICAgICBoYXZlIGl0IHRoYXQg
bmVlZGVkIGl0LgorCisgICAgICAgICogU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1hYy5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViTWVtb3J5U2FtcGxlcjo6c2FtcGxlV2ViS2l0KToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgor
ICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0aW9uKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkpTTlBPYmplY3Q6OmNhbGxNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpKU05Q
T2JqZWN0OjpjYWxsT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Y2FsbENv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6cHV0KToKKyAgICAgICAg
KFdlYktpdDo6SlNOUE9iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpK
U05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6SlNOUE9i
amVjdDo6cHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OUEpTT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aGFzTWV0
aG9kKToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6aW52b2tlKToKKyAgICAgICAgKFdl
YktpdDo6TlBKU09iamVjdDo6aW52b2tlRGVmYXVsdCk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNP
YmplY3Q6Omhhc1Byb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6Z2V0UHJv
cGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjpzZXRQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6OnJlbW92ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYktp
dDo6TlBKU09iamVjdDo6ZW51bWVyYXRlKToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6
Y29uc3RydWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50
aW1lT2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpj
b252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KToKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2Jq
ZWN0TWFwOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1hcDo6
bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6anNXcmFwcGVy
Rm9yV29ybGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y29tcHV0ZWRTdHlsZUluY2x1
ZGluZ1Zpc2l0ZWRJbmZvKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzczo6Z2V0V2ViQ29yZVN0YXRpc3RpY3MpOgorCiAyMDEyLTA2LTI1ICBZb3VuZ1Rh
ZWNrIFNvbmcgIDx5b3VuZ3RhZWNrLnNvbmdAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW1dLMl1b
UXRdW0VGTF0gTW92ZSBMYXllckJhY2tpbmdTdG9yZSBpbnRvIGNvbW1vbiBkaXJlY3RvcnkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViTWVtb3J5U2FtcGxlci5tYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJNZW1vcnlTYW1wbGVyLm1h
Yy5tbQkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJN
ZW1vcnlTYW1wbGVyLm1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIFdl
Yk1lbW9yeVN0YXRpc3RpY3MgV2ViTWVtb3J5U2FtcGxlcjo6c2EKICAgICB0b3RhbEJ5dGVzSW5V
c2UgKz0gZmFzdE1hbGxvY0J5dGVzSW5Vc2U7CiAgICAgdG90YWxCeXRlc0NvbW1pdHRlZCArPSBm
YXN0TWFsbG9jQnl0ZXNDb21taXR0ZWQ7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwogICAgIHNpemVfdCBqc2NIZWFwQnl0ZXNJblVzZSA9IEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5zaXplKCk7CiAgICAgc2l6ZV90IGpzY0hl
YXBCeXRlc0NvbW1pdHRlZCA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVh
cC5jYXBhY2l0eSgpOwogICAgIHRvdGFsQnl0ZXNJblVzZSArPSBqc2NIZWFwQnl0ZXNJblVzZTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24g
MTIxMTgzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTIwLDcgKzkyMCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6Z2V0V2ViQ29y
ZVN0YXRpc3RpY3ModWkKICAgICAKICAgICAvLyBHYXRoZXIgSmF2YVNjcmlwdCBzdGF0aXN0aWNz
LgogICAgIHsKLSAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
KTsKICAgICAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkphdmFTY3JpcHRPYmplY3Rz
Q291bnQiLCBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291
bnQoKSk7CiAgICAgICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJKYXZhU2NyaXB0R2xv
YmFsT2JqZWN0c0NvdW50IiwgSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFw
Lmdsb2JhbE9iamVjdENvdW50KCkpOwogICAgICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNl
dCgiSmF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHNDb3VudCIsIEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKS0+aGVhcC5wcm90ZWN0ZWRPYmplY3RDb3VudCgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDA5LDcgKzQwOSw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmdhcmJhZ2VDb2xsZWN0SmF2
YVMKIAogc2l6ZV90IEluamVjdGVkQnVuZGxlOjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KCkKIHsK
LSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgpOwogfQog
CkBAIC00MTgsOCArNDE4LDggQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVwb3J0RXhjZXB0aW9u
KEpTQwogICAgIGlmICghY29udGV4dCB8fCAhZXhjZXB0aW9uKQogICAgICAgICByZXR1cm47CiAK
LSAgICBKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNDOjpF
eGVjU3RhdGUqIGV4ZWNTdGF0ZSA9IHRvSlMoY29udGV4dCk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlY1N0YXRlKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBoYXMgYSBET01X
aW5kb3cgZ2xvYmFsIG9iamVjdCwgb3RoZXJ3aXNlIHRoaXMgY29udGV4dCBkaWRuJ3Qgb3JpZ2lu
YXRlIGZyb20gYSBQYWdlLgogICAgIGlmICghdG9KU0RPTVdpbmRvdyhleGVjU3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCShyZXZpc2lvbiAxMjEx
ODMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RQcm90
b3R5cGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aWZpZXJSZXAuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0pTRE9NV2luZG93QmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTEyNSw3ICsxMjYsNyBAQCBKU1Zh
bHVlIEpTTlBPYmplY3Q6OmNhbGxNZXRob2QoRXhlY1N0YXRlCiAgICAgVk9JRF9UT19OUFZBUklB
TlQocmVzdWx0KTsKICAgICAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgICAgIHJldHVyblZhbHVlID0gbV9ucE9iamVjdC0+X2NsYXNzLT5pbnZva2UobV9u
cE9iamVjdCwgbWV0aG9kTmFtZSwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwgJnJl
c3VsdCk7CiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRv
RXhlY1N0YXRlKGV4ZWMpOwogICAgIH0KQEAgLTE2NSw3ICsxNjYsNyBAQCBKU0M6OkpTVmFsdWUg
SlNOUE9iamVjdDo6Y2FsbE9iamVjdChKU0M6CiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0
KTsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAg
cmV0dXJuVmFsdWUgPSBtX25wT2JqZWN0LT5fY2xhc3MtPmludm9rZURlZmF1bHQobV9ucE9iamVj
dCwgYXJndW1lbnRzLmRhdGEoKSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7CiAgICAgICAgIE5Q
UnVudGltZU9iamVjdE1hcDo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwog
ICAgIH0KQEAgLTIwNSw3ICsyMDYsNyBAQCBKU1ZhbHVlIEpTTlBPYmplY3Q6OmNhbGxDb25zdHJ1
Y3RvcihFeGVjCiAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKICAgICAKICAgICB7Ci0g
ICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01X
aW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIHJldHVyblZhbHVlID0g
bV9ucE9iamVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QobV9ucE9iamVjdCwgYXJndW1lbnRzLmRhdGEo
KSwgYXJndW1lbnRDb3VudCwgJnJlc3VsdCk7CiAgICAgICAgIE5QUnVudGltZU9iamVjdE1hcDo6
bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKGV4ZWMpOwogICAgIH0KQEAgLTM0MCw3ICsz
NDEsNyBAQCB2b2lkIEpTTlBPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTCiAgICAgTlBS
dW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKHRoaXNPYmplY3QtPm1f
b2JqZWN0TWFwKTsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICAgICAgdGhpc09iamVjdC0+bV9ucE9iamVjdC0+X2NsYXNzLT5zZXRQcm9wZXJ0eSh0aGlz
T2JqZWN0LT5tX25wT2JqZWN0LCBucElkZW50aWZpZXIsICZ2YXJpYW50KTsKIAogICAgICAgICBO
UFJ1bnRpbWVPYmplY3RNYXA6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShleGVjKTsK
QEAgLTM4MCw3ICszODEsNyBAQCBib29sIEpTTlBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEV4ZWNT
dGF0CiAgICAgTlBSdW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKG1f
b2JqZWN0TWFwKTsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
IAogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiByZW1v
dmVQcm9wZXJ0eSByZXR1cm5zIGZhbHNlPwogICAgICAgICBpZiAoIW1fbnBPYmplY3QtPl9jbGFz
cy0+cmVtb3ZlUHJvcGVydHkobV9ucE9iamVjdCwgcHJvcGVydHlOYW1lKSkKQEAgLTQxMyw3ICs0
MTQsNyBAQCB2b2lkIEpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPCiAgICAgTlBS
dW50aW1lT2JqZWN0TWFwOjpQbHVnaW5Qcm90ZWN0b3IgcHJvdGVjdG9yKHRoaXNPYmplY3QtPm1f
b2JqZWN0TWFwKTsKICAgICAKICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSB0aHJvdyBhbiBleGNlcHRpb24gaWYg
ZW51bWVyYXRlIHJldHVybnMgZmFsc2U/CiAgICAgICAgIGlmICghdGhpc09iamVjdC0+bV9ucE9i
amVjdC0+X2NsYXNzLT5lbnVtZXJhdGUodGhpc09iamVjdC0+bV9ucE9iamVjdCwgJmlkZW50aWZp
ZXJzLCAmaWRlbnRpZmllckNvdW50KSkKQEAgLTQ2MSw3ICs0NjIsNyBAQCBKU1ZhbHVlIEpTTlBP
YmplY3Q6OnByb3BlcnR5R2V0dGVyKEV4ZWNTCiAgICAgCiAgICAgYm9vbCByZXR1cm5WYWx1ZTsK
ICAgICB7Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIE5QSWRl
bnRpZmllciBucElkZW50aWZpZXIgPSBucElkZW50aWZpZXJGcm9tSWRlbnRpZmllcihwcm9wZXJ0
eU5hbWUpOwogICAgICAgICByZXR1cm5WYWx1ZSA9IHRoaXNPYmotPm1fbnBPYmplY3QtPl9jbGFz
cy0+Z2V0UHJvcGVydHkodGhpc09iai0+bV9ucE9iamVjdCwgbnBJZGVudGlmaWVyLCAmcmVzdWx0
KTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvTlBKU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMjExODMpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpoYXNN
ZXRob2QoTlBJZGVudGlmaWVyIAogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBtX2pzT2JqZWN0LT5nZXQo
ZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApKTsg
ICAgCiAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKQEAgLTExOSw3ICsxMTksNyBAQCBib29s
IE5QSlNPYmplY3Q6Omludm9rZShOUElkZW50aWZpZXIgbWV0CiAgICAgaWYgKCFleGVjKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTVmFsdWUgZnVu
Y3Rpb24gPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVw
KGV4ZWMsIGlkZW50aWZpZXJSZXApKTsKICAgICByZXR1cm4gaW52b2tlKGV4ZWMsIG1fb2JqZWN0
TWFwLT5nbG9iYWxPYmplY3QoKSwgZnVuY3Rpb24sIGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwg
cmVzdWx0KTsKQEAgLTEzMSw3ICsxMzEsNyBAQCBib29sIE5QSlNPYmplY3Q6Omludm9rZURlZmF1
bHQoY29uc3QgTlBWCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG1fanNPYmplY3QuZ2V0KCk7CiAg
ICAgcmV0dXJuIGludm9rZShleGVjLCBtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCksIGZ1bmN0
aW9uLCBhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7CkBAIC0xNDUsNyArMTQ1LDcg
QEAgYm9vbCBOUEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGlmICghZXhl
YykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBib29s
IHJlc3VsdDsKICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkKQEAgLTE2NSw3ICsx
NjUsNyBAQCBib29sIE5QSlNPYmplY3Q6OmdldFByb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgaWYg
KCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFs
dWUganNSZXN1bHQ7CiAgICAgaWYgKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpCiAgICAgICAg
IGpzUmVzdWx0ID0gbV9qc09iamVjdC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tSWRlbnRpZmll
clJlcChleGVjLCBpZGVudGlmaWVyUmVwKSk7CkBAIC0xODUsNyArMTg1LDcgQEAgYm9vbCBOUEpT
T2JqZWN0OjpzZXRQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGlmICghZXhlYykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUg
PSBtX29iamVjdE1hcC0+Y29udmVydE5QVmFyaWFudFRvSlNWYWx1ZShleGVjLCBtX29iamVjdE1h
cC0+Z2xvYmFsT2JqZWN0KCksICp2YWx1ZSk7CiAgICAgaWYgKGlkZW50aWZpZXJSZXAtPmlzU3Ry
aW5nKCkpIHsKQEAgLTIwNiw3ICsyMDYsNyBAQCBib29sIE5QSlNPYmplY3Q6OnJlbW92ZVByb3Bl
cnR5KE5QSWRlbnRpCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKSB7CiAgICAgICAg
IElkZW50aWZpZXIgaWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVj
LCBpZGVudGlmaWVyUmVwKTsKICAgICAgICAgCkBAIC0yMzUsNyArMjM1LDcgQEAgYm9vbCBOUEpT
T2JqZWN0OjplbnVtZXJhdGUoTlBJZGVudGlmaWVyKgogICAgIGlmICghZXhlYykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOwogICAgIG1fanNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dFByb3BlcnR5TmFtZXMobV9qc09iamVjdC5nZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhj
bHVkZURvbnRFbnVtUHJvcGVydGllcyk7CkBAIC0yNTcsNyArMjU3LDcgQEAgYm9vbCBOUEpTT2Jq
ZWN0Ojpjb25zdHJ1Y3QoY29uc3QgTlBWYXJpYQogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0
RGF0YTsKICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBnZXRDb25zdHJ1Y3REYXRh
KG1fanNPYmplY3QuZ2V0KCksIGNvbnN0cnVjdERhdGEpOwpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVu
dGltZU9iamVjdE1hcC5jcHAJKHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAgSlNWYWx1ZSBOUFJ1bnRpbWVPYmplY3RNYXA6OmNv
bnZlcnROUFZhcgogCiB2b2lkIE5QUnVudGltZU9iamVjdE1hcDo6Y29udmVydEpTVmFsdWVUb05Q
VmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIE5QVmFyaWFudCYgdmFyaWFu
dCkKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgVk9JRF9UT19OUFZBUklBTlQodmFyaWFudCk7CiAg
ICAgCkBAIC0xODYsNyArMTg2LDcgQEAgYm9vbCBOUFJ1bnRpbWVPYmplY3RNYXA6OmV2YWx1YXRl
KE5QT2JqZQogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGdldE9yQ3Jl
YXRlSlNPYmplY3QoZ2xvYmFsT2JqZWN0LmdldCgpLCBucE9iamVjdCk7CiAKICAgICBnbG9iYWxP
YmplY3QtPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwpAQCAtMjY2LDcgKzI2
Niw3IEBAIHZvaWQgTlBSdW50aW1lT2JqZWN0TWFwOjptb3ZlR2xvYmFsRXhjZXAKICAgICAgICAg
cmV0dXJuOwogCiAgICAgewotICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09u
bHkpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgdGhyb3dFcnJv
cihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBzdHJpbmdUb1VTdHJpbmcoZ2xvYmFsRXhjZXB0aW9u
U3RyaW5nKCkpKSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NDIsNyArNjQyLDcgQEAgSlNWYWx1ZVJlZiBXZWJGcmFtZTo6anNXcmFwcGVyRm9yV29ybGQo
SQogICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSBtX2NvcmVGcmFtZS0+c2NyaXB0KCkt
Pmdsb2JhbE9iamVjdCh3b3JsZC0+Y29yZVdvcmxkKCkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICByZXR1cm4g
dG9SZWYoZXhlYywgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIG5vZGVIYW5kbGUtPmNvcmVOb2Rl
KCkpKTsKIH0KIApAQCAtNjU0LDcgKzY1NCw3IEBAIEpTVmFsdWVSZWYgV2ViRnJhbWU6OmpzV3Jh
cHBlckZvcldvcmxkKEkKICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0ID0gbV9jb3JlRnJh
bWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3Qod29ybGQtPmNvcmVXb3JsZCgpKTsKICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCByYW5nZUhh
bmRsZS0+Y29yZVJhbmdlKCkpKTsKIH0KIApAQCAtNjcxLDcgKzY3MSw3IEBAIEpTVmFsdWVSZWYg
V2ViRnJhbWU6OmNvbXB1dGVkU3R5bGVJbmNsdWQKIAogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVh
dGUoc3RhdGljX2Nhc3Q8SlNFbGVtZW50Kj4odG9KUyhlbGVtZW50KSktPmltcGwoKSwgdHJ1ZSk7
CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogICAgIHJldHVybiB0b1JlZihleGVjLCB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgc3R5bGUuZ2V0KCkpKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODEzLDcgKzE4MTMsNyBAQCB2b2lkIFdlYlBhZ2U6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFt
ZShjCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFJlc3VsdFZh
bHVlOwogICAgIENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZTsKIAotICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBpZiAoSlNWYWx1ZSByZXN1
bHRWYWx1ZSA9IG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3Jp
cHQoc2NyaXB0LCB0cnVlKS5qc1ZhbHVlKCkpIHsKICAgICAgICAgaWYgKChzZXJpYWxpemVkUmVz
dWx0VmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShtX21haW5GcmFtZS0+anND
b250ZXh0KCksIHRvUmVmKG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+c2NyaXB0KCktPmdsb2Jh
bE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSwgcmVzdWx0VmFs
dWUpLCAwKSkpCiAgICAgICAgICAgICBkYXRhUmVmZXJlbmNlID0gc2VyaWFsaXplZFJlc3VsdFZh
bHVlLT5kYXRhKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDEyMTE5MykKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxMi0wNi0yNSAgTWFyayBIYWhuZW5iZXJnICA8bWhh
aG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91bGQgYmUgcGVyLUpTR2xv
YmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
aGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3RlYWQgdXNlIHRoZSBuZXcg
SlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3JyZWN0IEpTIGNvbnRleHQg
dGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRoYXQgCisgICAgICAgIG5l
ZWRzIHByb3RlY3Rpb24uIEFsc28gYWRkZWQgYSBjb3VwbGUgSlNMb2NrcyB0byBwbGFjZXMgdGhh
dCBkaWRuJ3QgYWxyZWFkeSAKKyAgICAgICAgaGF2ZSBpdCB0aGF0IG5lZWRlZCBpdC4KKworICAg
ICAgICAqIEFwaS9CbGFja0JlcnJ5R2xvYmFsLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6Y2xlYXJNZW1vcnlDYWNoZXMpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NsaWVu
dEV4dGVuc2lvbi5jcHA6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tC
ZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlUG9wdXBCbGFja0JlcnJ5OjppbnN0YWxs
RG9tRnVuY3Rpb24pOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0LmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6Y29tcHV0ZWRTdHlsZUlu
Y2x1ZGluZ1Zpc2l0ZWRJbmZvKToKKwogMjAxMi0wNi0yNSAgQ3J5c3RhbCBaaGFuZyAgPGhhaXpo
YW5nQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIFVzZSBBSVIgY29udHJvbHMgaWYg
Y2xpZW50IGRvZXNuJ3Qgc3VwcG9ydCBIVE1MIGNvbnRyb2wKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CbGFja0JlcnJ5R2xvYmFsLmNwcAkocmV2aXNpb24gMTIx
MTgzKQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CbGFja0JlcnJ5R2xvYmFsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSwxMCBAQCB2b2lkIGNsZWFyTWVtb3J5Q2Fj
aGVzKCkKICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6dXNlckludGVyZmFjZVRocmVhZE1lc3Nh
Z2VDbGllbnQoKS0+ZGlzcGF0Y2hNZXNzYWdlKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpjcmVhdGVG
dW5jdGlvbkNhbGxNZXNzYWdlKGNsZWFyTWVtb3J5Q2FjaGVzSW5Db21wb3NpdGluZ1RocmVhZCkp
OwogI2VuZGlmCiAKLSAgICBjb2xsZWN0SmF2YXNjcmlwdEdhcmJhZ2VOb3coKTsKKyAgICB7Cisg
ICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFs
RGF0YSgpKTsKKyAgICAgICAgY29sbGVjdEphdmFzY3JpcHRHYXJiYWdlTm93KCk7CisgICAgfQog
CiAgICAgLy8gQ2xlYW4gY2FjaGVzIGFmdGVyIEpTIGdhcmJhZ2UgY29sbGVjdGlvbiBiZWNhdXNl
IEpTIEdDIGNhbgogICAgIC8vIGdlbmVyYXRlIG1vcmUgZGVhZCByZXNvdXJjZXMuCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQ2xpZW50RXh0ZW5zaW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQv
Q2xpZW50RXh0ZW5zaW9uLmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0NsaWVudEV4dGVuc2lvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg0LDExICs4NCwxMSBAQCBzdGF0aWMgSlNTdGF0aWNWYWx1ZSBjbGllbnRFeHRlbnNp
b25TdGF0CiAvLyBGSVhNRTogUmV2aXNpdCB0aGUgY3JlYXRpb24gb2YgdGhpcyBjbGFzcyBhbmQg
bWFrZSBzdXJlIHRoaXMgaXMgdGhlIGJlc3Qgd2F5IHRvIGFwcHJvYWNoIGl0Lgogdm9pZCBhdHRh
Y2hFeHRlbnNpb25PYmplY3RUb0ZyYW1lKEZyYW1lKiBmcmFtZSwgV2ViUGFnZUNsaWVudCogY2xp
ZW50KQogewotICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OwotCiAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hl
bGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT53aW5kb3coKTsKIAogICAgIEpTQzo6RXhlY1N0
YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKKwogICAgIEpTQ29udGV4dFJlZiBzY3JpcHRDdHggPSB0b1JlZihleGVjKTsK
IAogICAgIEpTQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSBrSlNDbGFzc0RlZmluaXRpb25F
bXB0eTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9QYWdl
UG9wdXBCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViQ29yZVN1cHBvcnQvUGFnZVBvcHVwQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDEyMTE4
MykKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9QYWdlUG9wdXBC
bGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDEzICsxMjIsMTIgQEAgc3RhdGlj
IEpTU3RhdGljVmFsdWUgcG9wVXBFeHRlbnNpb25TdGF0aQogCiB2b2lkIFBhZ2VQb3B1cEJsYWNr
QmVycnk6Omluc3RhbGxEb21GdW5jdGlvbihGcmFtZSogZnJhbWUpCiB7Ci0gICAgSlNDOjpKU0xv
Y2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KICAgICBKU0RPTVdpbmRvdyog
d2luZG93ID0gdG9KU0RPTVdpbmRvdyhmcmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwog
ICAgIEFTU0VSVCh3aW5kb3cpOwogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ct
Pmdsb2JhbEV4ZWMoKTsKICAgICBBU1NFUlQoZXhlYyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gOjp0b1JlZihleGVjKTsK
ICAgICBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QgPSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3Qo
Y29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJLaXRTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydC5jcHAJKHJldmlzaW9u
IDEyMTE4MykKKysrIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCB2
b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6c2NhbGVQYWdlQnkoCiAKIEpTVmFsdWVSZWYgRHVt
cFJlbmRlclRyZWVTdXBwb3J0Ojpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7Ci0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRl
eHQpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghdmFsdWUpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICBKU1ZhbHVlIGpz
VmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHJldmlzaW9u
IDEyMTE5MykKKysrIFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDEyLTA2LTI1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVy
Z0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRh
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQg
YWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tI
b2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRo
ZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJv
dGVjdGlvbi4gQWxzbyBhZGRlZCBhIGNvdXBsZSBKU0xvY2tzIHRvIHBsYWNlcyB0aGF0IGRpZG4n
dCBhbHJlYWR5IAorICAgICAgICBoYXZlIGl0IHRoYXQgbmVlZGVkIGl0LgorCisgICAgICAgICog
ZXdrL2V3a19mcmFtZS5jcHA6CisgICAgICAgIChld2tfZnJhbWVfc2NyaXB0X2V4ZWN1dGUpOgor
ICAgICAgICAqIGV3ay9ld2tfdmlldy5jcHA6CisgICAgICAgIChld2tfdmlld19qc19vYmplY3Rf
YWRkKToKKwogMjAxMi0wNi0yNSAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcu
Y29tPgogCiAgICAgICAgIFtFRkxdIEltcGxlbWVudCBOZXR3b3JrIEluZm9ybWF0aW9uIEFQSQpJ
bmRleDogU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAJKHJldmlzaW9uIDEyMTE4MykKKysr
IFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NTUsOCArNDU1LDggQEAgY2hhciogZXdrX2ZyYW1lX3NjcmlwdF9leGVjdXRlKEV2YXNfT2JqZQog
ICAgIGlmICghcmVzdWx0IHx8ICghcmVzdWx0LmlzQm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJp
bmcoKSAmJiAhcmVzdWx0LmlzTnVtYmVyKCkpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEpT
Qzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTQzo6RXhl
Y1N0YXRlKiBleGVjID0gc21hcnREYXRhLT5mcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChX
ZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIHJlc3VsdFN0cmluZyA9IFdlYkNvcmU6OnVz
dHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICBy
ZXR1cm4gc3RyZHVwKHJlc3VsdFN0cmluZy51dGY4KCkuZGF0YSgpKTsKICNlbHNlCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAJKHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNDUsOCArNDA0
NSw4IEBAIEVpbmFfQm9vbCBld2tfdmlld19qc19vYmplY3RfYWRkKEV2YXNfT2IKICAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgZmFsc2UpOwogICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIGZhbHNlKTsKIAotICAg
IEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIFdlYkNv
cmU6OkpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KHByaXYtPm1haW5GcmFtZSwg
V2ViQ29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2sod2luZG93LT5nbG9iYWxFeGVjKCkpOwogICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmpl
Y3QqIHJvb3Q7CiAgICAgcm9vdCA9IHByaXYtPm1haW5GcmFtZS0+c2NyaXB0KCktPmJpbmRpbmdS
b290T2JqZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTE5MykKKysr
IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4
IEBACisyMDEyLTA2LTI1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9iYWxEYXRhCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEyMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZWQgYWxsIHNpdGVzIHRo
YXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBKU0xvY2tIb2xkZXIKKyAgICAg
ICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0aGF0IHRoZSBjb2RlIGlzIGFi
b3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVlZHMgcHJvdGVjdGlvbi4gQWxz
byBhZGRlZCBhIGNvdXBsZSBKU0xvY2tzIHRvIHBsYWNlcyB0aGF0IGRpZG4ndCBhbHJlYWR5IAor
ICAgICAgICBoYXZlIGl0IHRoYXQgbmVlZGVkIGl0LgorCisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6Z2NDb3VudEphdmFzY3JpcHRPYmplY3RzKToKKwogMjAxMi0wNi0yNSAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZC4gVXBkYXRlIE5FV1MgYW5kIGNvbmZpZ3VyZS5hYyBmb3IgMS45LjQgcmVsZWFzZQpJbmRl
eDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MDAsNyArNjAwLDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGs6OmdjQ29sbGVjdAogCiB1bnNpZ25lZCBsb25nIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
azo6Z2NDb3VudEphdmFzY3JpcHRPYmplY3RzKCkKIHsKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2luZG93
Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjExOTMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2OSBAQAorMjAxMi0wNi0yNSAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTTG9jayBzaG91
bGQgYmUgcGVyLUpTR2xvYmFsRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODkxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDaGFuZ2VkIGFsbCBzaXRlcyB0aGF0IHVzZWQgSlNMb2NrIHRvIGluc3Rl
YWQgdXNlIHRoZSBuZXcgSlNMb2NrSG9sZGVyCisgICAgICAgIGFuZCBwYXNzIGluIHRoZSBjb3Jy
ZWN0IEpTIGNvbnRleHQgdGhhdCB0aGUgY29kZSBpcyBhYm91dCB0byBpbnRlcmFjdCB3aXRoIHRo
YXQgCisgICAgICAgIG5lZWRzIHByb3RlY3Rpb24uIEFsc28gYWRkZWQgYSBjb3VwbGUgSlNMb2Nr
cyB0byBwbGFjZXMgdGhhdCBkaWRuJ3QgYWxyZWFkeSAKKyAgICAgICAgaGF2ZSBpdCB0aGF0IG5l
ZWRlZCBpdC4KKworICAgICAgICAqIERPTS9XZWJET01PcGVyYXRpb25zLm1tOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tOgorICAgICAgICAoK1tX
ZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dl
YkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnRdKToKKyAgICAgICAg
KCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHNDb3VudF0pOgor
ICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2Jq
ZWN0c0NvdW50XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRQcm90
ZWN0ZWRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGph
dmFTY3JpcHRPYmplY3RUeXBlQ291bnRzXSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNz
IHNob3VsZFByaW50RXhjZXB0aW9uc10pOgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBz
ZXRTaG91bGRQcmludEV4Y2VwdGlvbnM6XSk6CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNz
IG1lbW9yeVN0YXRpc3RpY3NdKToKKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNj
cmlwdFJlZmVyZW5jZWRPYmplY3RzQ291bnRdKToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9O
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlRGVmYXVsdCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYktpdDo6
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0UHJvcGVydHkpOgorICAgICAgICAo
V2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbW92ZVByb3BlcnR5KToKKyAg
ICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNNZXRob2QpOgor
ICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcmF0ZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6YWRkVmFsdWVU
b0FycmF5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpt
b3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUpOgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0
c2NhcGVQbHVnaW5TdHJlYW0ubW06CisgICAgICAgIChXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6
d2FudHNBbGxTdHJlYW1zKToKKyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmll
dy5tbToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IHNlbmRFdmVudDppc0RyYXdS
ZWN0Ol0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgcHJpdmF0ZUJyb3dzaW5n
TW9kZURpZENoYW5nZV0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc2V0V2lu
ZG93SWZOZWNlc3NhcnldKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGNyZWF0
ZVBsdWdpblNjcmlwdGFibGVPYmplY3RdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5W
aWV3IGdldEZvcm1WYWx1ZTpdKToKKyAgICAgICAgKC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGV2
YWx1YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6XSk6CisgICAgICAgICgtW1dlYk5ldHNjYXBl
UGx1Z2luVmlldyB3ZWJGcmFtZTpkaWRGaW5pc2hMb2FkV2l0aFJlYXNvbjpdKToKKyAgICAgICAg
KC1bV2ViTmV0c2NhcGVQbHVnaW5WaWV3IGxvYWRQbHVnaW5SZXF1ZXN0Ol0pOgorICAgICAgICAo
LVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgX3ByaW50ZWRQbHVnaW5CaXRtYXBdKToKKyAgICAgICAg
KiBQbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW06CisgICAgICAgICgrW1dlYlBsdWdpbkNv
bnRyb2xsZXIgcGx1Z0luVmlld1dpdGhBcmd1bWVudHM6ZnJvbVBsdWdpblBhY2thZ2U6XSk6Cisg
ICAgICAgICgtW1dlYlBsdWdpbkNvbnRyb2xsZXIgc3RvcE9uZVBsdWdpbjpdKToKKyAgICAgICAg
KC1bV2ViUGx1Z2luQ29udHJvbGxlciBkZXN0cm95T25lUGx1Z2luOl0pOgorICAgICAgICAoLVtX
ZWJQbHVnaW5Db250cm9sbGVyIHN0YXJ0QWxsUGx1Z2luc10pOgorICAgICAgICAoLVtXZWJQbHVn
aW5Db250cm9sbGVyIGFkZFBsdWdpbjpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1t
OgorICAgICAgICAoLVtXZWJGcmFtZSBfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21T
dHJpbmc6Zm9yY2VVc2VyR2VzdHVyZTpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3N0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOndpdGhHbG9iYWxPYmplY3Q6aW5TY3JpcHRX
b3JsZDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW06Cisg
ICAgICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBzY29wZUNoYWluXSk6CisgICAgICAgICgtW1dl
YlNjcmlwdENhbGxGcmFtZSBldmFsdWF0ZVdlYlNjcmlwdDpdKToKKyAgICAgICAgKiBXZWJWaWV3
L1dlYlZpZXcubW06CisgICAgICAgICgrW1dlYlZpZXcgX3JlcG9ydEV4Y2VwdGlvbjppbkNvbnRl
eHQ6XSk6CisgICAgICAgICgtW1dlYlZpZXcgYWVEZXNjQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZy
b21TdHJpbmc6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX2NvbXB1dGVkU3R5bGVJbmNsdWRpbmdW
aXNpdGVkSW5mbzpmb3JFbGVtZW50Ol0pOgorCiAyMDEyLTA2LTIzICBTaGVyaWZmIEJvdCAgPHdl
YmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByMTIxMDU4LgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlv
bnMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlv
bnMubW0JKHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJET01P
cGVyYXRpb25zLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2Nyw5IEBAICsgKERPTUVsZW1l
bnQgKilfRE9NRWxlbWVudEZyb21KU0NvbnRleHQKICAgICBpZiAoIXZhbHVlKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAg
cmV0dXJuIGtpdCh0b0VsZW1lbnQodG9KUyh0b0pTKGNvbnRleHQpLCB2YWx1ZSkpKTsKKyAgICBF
eGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOworICAgIHJldHVybiBraXQodG9FbGVtZW50KHRvSlMoZXhlYywgdmFsdWUpKSk7CiB9CiAK
IC0gKE5TU3RyaW5nICopX21hcmtlclRleHRGb3JMaXN0SXRlbQpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCShyZXZpc2lvbiAxMjExODMpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC01OCwzMSArNTgsMzEgQEAgKyAoTlNBcnJheSAqKXN0YXRpc3RpY3MKIAogKyAoc2l6ZV90
KWphdmFTY3JpcHRPYmplY3RzQ291bnQKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KS0+aGVhcC5vYmplY3RDb3VudCgpOwogfQogCiArIChzaXplX3QpamF2YVNjcmlwdEdsb2JhbE9i
amVjdHNDb3VudAogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsK
ICAgICByZXR1cm4gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmdsb2Jh
bE9iamVjdENvdW50KCk7CiB9CiAKICsgKHNpemVfdClqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0
c0NvdW50CiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
IHJldHVybiBKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVk
T2JqZWN0Q291bnQoKTsKIH0KIAogKyAoc2l6ZV90KWphdmFTY3JpcHRQcm90ZWN0ZWRHbG9iYWxP
YmplY3RzQ291bnQKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7
CiAgICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90
ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwogfQogCiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2Ny
aXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cwogewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKICAgICAKICAgICBOU0NvdW50ZWRTZXQgKnJlc3VsdCA9IFtOU0Nv
dW50ZWRTZXQgc2V0XTsKIApAQCAtOTcsNyArOTcsNyBAQCArIChOU0NvdW50ZWRTZXQgKilqYXZh
U2NyaXB0UHJvdGVjdGVkT2JqCiAKICsgKE5TQ291bnRlZFNldCAqKWphdmFTY3JpcHRPYmplY3RU
eXBlQ291bnRzCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwog
ICAgIAogICAgIE5TQ291bnRlZFNldCAqcmVzdWx0ID0gW05TQ291bnRlZFNldCBzZXRdOwogCkBA
IC0xNjcsMTMgKzE2NywxMyBAQCArIChzaXplX3QpZ2x5cGhQYWdlQ291bnQKIAogKyAoQk9PTClz
aG91bGRQcmludEV4Y2VwdGlvbnMKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKSk7CiAgICAgcmV0dXJuIENvbnNvbGU6OnNob3VsZFByaW50RXhjZXB0aW9ucygpOwog
fQogCiArICh2b2lkKXNldFNob3VsZFByaW50RXhjZXB0aW9uczooQk9PTClwcmludAogewotICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2soSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICBDb25zb2xlOjpzZXRT
aG91bGRQcmludEV4Y2VwdGlvbnMocHJpbnQpOwogfQogCkBAIC0yMDEsNyArMjAxLDcgQEAgKyAo
TlNEaWN0aW9uYXJ5ICopbWVtb3J5U3RhdGlzdGljcwogewogICAgIFdURjo6RmFzdE1hbGxvY1N0
YXRpc3RpY3MgZmFzdE1hbGxvY1N0YXRpc3RpY3MgPSBXVEY6OmZhc3RNYWxsb2NTdGF0aXN0aWNz
KCk7CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAg
IHNpemVfdCBoZWFwU2l6ZSA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVh
cC5zaXplKCk7CiAgICAgc2l6ZV90IGhlYXBGcmVlID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpLT5oZWFwLmNhcGFjaXR5KCkgLSBoZWFwU2l6ZTsKICAgICBHbG9iYWxNZW1vcnlT
dGF0aXN0aWNzIGdsb2JhbE1lbW9yeVN0YXRzID0gZ2xvYmFsTWVtb3J5U3RhdGlzdGljcygpOwpA
QCAtMjQ1LDcgKzI0NSw3IEBAICsgKHNpemVfdClqYXZhU2NyaXB0Tm9HQ0FsbG93ZWRPYmplY3Rz
Q28KIAogKyAoc2l6ZV90KWphdmFTY3JpcHRSZWZlcmVuY2VkT2JqZWN0c0NvdW50CiB7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0Q291bnQoKTsK
IH0KIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblN0
cmVhbS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNj
YXBlUGx1Z2luU3RyZWFtLm1tCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjgsNyArMzY4LDcgQEAgYm9vbCBXZWJOZXRzY2FwZVBsdWdpblN0cmVhbTo6d2FudHNBbGxTdAog
ICAgIE5QRXJyb3IgZXJyb3I7CiAgICAgewogICAgICAgICBQbHVnaW5TdG9wRGVmZXJyZXIgZGVm
ZXJyZXIobV9wbHVnaW5WaWV3LmdldCgpKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgZXJyb3IgPSBtX3BsdWdpbkZ1bmNzLT5nZXR2
YWx1ZShtX3BsdWdpbiwgTlBQVnBsdWdpbldhbnRzQWxsTmV0d29ya1N0cmVhbXMsICZ2YWx1ZSk7
CiAgICAgfQogICAgIGlmIChlcnJvciAhPSBOUEVSUl9OT19FUlJPUikKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCShyZXZp
c2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1
Z2luVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjY5LDcgKzY2OSw3IEBAIC0gKEJPT0wpc2Vu
ZEV2ZW50Oih2b2lkKilldmVudCBpc0RyYXdSZWMKICAgICAvLyBTZXQgdGhlIHBsdWdpbkFsbG93
UG9wdXAgZmxhZy4KICAgICBBU1NFUlQoX2V2ZW50SGFuZGxlcik7CiAgICAgewotICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBVc2VyR2Vz
dHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKF9ldmVudEhhbmRsZXItPmN1cnJlbnRFdmVu
dElzVXNlckdlc3R1cmUoKSA/IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBQb3Nz
aWJseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CiAgICAgICAgIGFjY2VwdGVkRXZlbnQgPSBbX3Bs
dWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5ldmVudChwbHVnaW4sIGV2ZW50KTsKICAg
ICB9CkBAIC04NTAsNyArODUwLDcgQEAgLSAodm9pZClwcml2YXRlQnJvd3NpbmdNb2RlRGlkQ2hh
bmdlCiAKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIGlmIChb
X3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT5zZXR2YWx1ZSkKICAgICAgICAgICAg
IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnNldHZhbHVlKHBsdWdpbiwgTlBO
VnByaXZhdGVNb2RlQm9vbCwgJnZhbHVlKTsKICAgICB9CkBAIC05OTEsNyArOTkxLDcgQEAgLSAo
dm9pZClzZXRXaW5kb3dJZk5lY2Vzc2FyeQogICAgICAgICBpblNldFdpbmRvdyA9IFlFUzsgICAg
ICAgIAogICAgICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICAgICAgewot
ICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7
CiAgICAgICAgICAgICBucEVyciA9IFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10t
PnNldHdpbmRvdyhwbHVnaW4sICZ3aW5kb3cpOwogICAgICAgICB9CiAgICAgICAgIFtzZWxmIGRp
ZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNDQ0LDcgKzE0NDQsNyBAQCAtIChOUE9iamVjdCAq
KWNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplCiAgICAgTlBFcnJvciBlcnJvcjsKICAgICBbc2Vs
ZiB3aWxsQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgICAgIGVycm9yID0gW19wbHVnaW5QYWNr
YWdlLmdldCgpIHBsdWdpbkZ1bmNzXS0+Z2V0dmFsdWUocGx1Z2luLCBOUFBWcGx1Z2luU2NyaXB0
YWJsZU5QT2JqZWN0LCAmdmFsdWUpOwogICAgIH0KICAgICBbc2VsZiBkaWRDYWxsUGx1Z0luRnVu
Y3Rpb25dOwpAQCAtMTQ2Myw3ICsxNDYzLDcgQEAgLSAoQk9PTClnZXRGb3JtVmFsdWU6KE5TU3Ry
aW5nICoqKXZhbHVlCiAgICAgTlBFcnJvciBlcnJvcjsKICAgICBbc2VsZiB3aWxsQ2FsbFBsdWdJ
bkZ1bmN0aW9uXTsKICAgICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAgICAgICAgIGVycm9yID0gW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdp
bkZ1bmNzXS0+Z2V0dmFsdWUocGx1Z2luLCBOUFBWZm9ybVZhbHVlLCAmYnVmZmVyKTsKICAgICB9
CiAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTE1OTUsNyArMTU5NSw3IEBA
IC0gKHZvaWQpZXZhbHVhdGVKYXZhU2NyaXB0UGx1Z2luUmVxdWVzdDoKICAgICAgICAgaWYgKFtK
U1BsdWdpblJlcXVlc3Qgc2VuZE5vdGlmaWNhdGlvbl0pIHsKICAgICAgICAgICAgIFtzZWxmIHdp
bGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAg
ICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51cmxub3RpZnkocGx1
Z2luLCBbVVJMIF93ZWJfVVJMQ1N0cmluZ10sIE5QUkVTX0RPTkUsIFtKU1BsdWdpblJlcXVlc3Qg
bm90aWZ5RGF0YV0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgW3NlbGYgZGlkQ2FsbFBs
dWdJbkZ1bmN0aW9uXTsKQEAgLTE2MjcsNyArMTYyNyw3IEBAIC0gKHZvaWQpd2ViRnJhbWU6KFdl
YkZyYW1lICopd2ViRnJhbWUgZGkKICAgICAgICAgCiAgICAgW3NlbGYgd2lsbENhbGxQbHVnSW5G
dW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9i
YWxEYXRhKCkpOwogICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luRnVuY3NdLT51
cmxub3RpZnkocGx1Z2luLCBbW1twbHVnaW5SZXF1ZXN0IHJlcXVlc3RdIFVSTF0gX3dlYl9VUkxD
U3RyaW5nXSwgcmVhc29uLCBbcGx1Z2luUmVxdWVzdCBub3RpZnlEYXRhXSk7CiAgICAgfQogICAg
IFtzZWxmIGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CkBAIC0xNjcxLDcgKzE2NzEsNyBAQCAtICh2
b2lkKWxvYWRQbHVnaW5SZXF1ZXN0OihXZWJQbHVnaW5SZXF1CiAgICAgICAgICAgICAgICAgaWYg
KFtwbHVnaW5SZXF1ZXN0IHNlbmROb3RpZmljYXRpb25dKSB7CiAgICAgICAgICAgICAgICAgICAg
IFtzZWxmIHdpbGxDYWxsUGx1Z0luRnVuY3Rpb25dOwogICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFtfcGx1Z2lu
UGFja2FnZS5nZXQoKSBwbHVnaW5GdW5jc10tPnVybG5vdGlmeShwbHVnaW4sIFtbW3BsdWdpblJl
cXVlc3QgcmVxdWVzdF0gVVJMXSBfd2ViX1VSTENTdHJpbmddLCBOUEVSUl9HRU5FUklDX0VSUk9S
LCBbcGx1Z2luUmVxdWVzdCBub3RpZnlEYXRhXSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgW3NlbGYgZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKQEAgLTI0NzEs
NyArMjQ3MSw3IEBAIC0gKE5TQml0bWFwSW1hZ2VSZXAgKilfcHJpbnRlZFBsdWdpbkJpdG0KICAg
ICAvLyBUZWxsIHRoZSBwbHVnaW4gdG8gcHJpbnQgaW50byB0aGUgR1dvcmxkCiAgICAgW3NlbGYg
d2lsbENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICBbX3BsdWdpblBhY2thZ2UuZ2V0KCkg
cGx1Z2luRnVuY3NdLT5wcmludChwbHVnaW4sICZucFByaW50KTsKICAgICB9CiAgICAgW3NlbGYg
ZGlkQ2FsbFBsdWdJbkZ1bmN0aW9uXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
V2ViUGx1Z2luQ29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0JKHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5
KQpAQCAtOTYsMTAgKzk2LDEwIEBAICsgKE5TVmlldyAqKXBsdWdJblZpZXdXaXRoQXJndW1lbnRz
OihOU0QKICAgICBOU1ZpZXcgKnZpZXcgPSBuaWw7CiAKICAgICBpZiAoW3ZpZXdGYWN0b3J5IHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IocGx1Z0luVmlld1dpdGhBcmd1bWVudHM6KV0pIHsK
LSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAg
ICAgdmlldyA9IFt2aWV3RmFjdG9yeSBwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czphcmd1bWVudHNd
OwogICAgIH0gZWxzZSBpZiAoW3ZpZXdGYWN0b3J5IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IocGx1Z2luVmlld1dpdGhBcmd1bWVudHM6KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAg
ICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgdmlldyA9IFt2aWV3RmFjdG9yeSBw
bHVnaW5WaWV3V2l0aEFyZ3VtZW50czphcmd1bWVudHNdOwogICAgIH0KICAgICAKQEAgLTE0OSwx
MCArMTQ5LDEwIEBAIC0gKHZvaWQpZGVhbGxvYwogLSAodm9pZClzdG9wT25lUGx1Z2luOihOU1Zp
ZXcgKil2aWV3CiB7CiAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
d2ViUGx1Z0luU3RvcCldKSB7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25KU0ds
b2JhbERhdGEoKSk7CiAgICAgICAgIFt2aWV3IHdlYlBsdWdJblN0b3BdOwogICAgIH0gZWxzZSBp
ZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihwbHVnaW5TdG9wKV0pIHsKLSAg
ICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAg
W3ZpZXcgcGx1Z2luU3RvcF07CiAgICAgfQogfQpAQCAtMTYwLDEwICsxNjAsMTAgQEAgLSAodm9p
ZClzdG9wT25lUGx1Z2luOihOU1ZpZXcgKil2aWV3CiAtICh2b2lkKWRlc3Ryb3lPbmVQbHVnaW46
KE5TVmlldyAqKXZpZXcKIHsKICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcih3ZWJQbHVnSW5EZXN0cm95KV0pIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgW3ZpZXcgd2ViUGx1Z0luRGVzdHJveV07CiAg
ICAgfSBlbHNlIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHBsdWdpbkRl
c3Ryb3kpXSkgewotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwogICAgICAgICBbdmlldyBwbHVnaW5EZXN0cm95XTsKICAgICB9CiB9CkBAIC0xODAsMTAg
KzE4MCwxMCBAQCAtICh2b2lkKXN0YXJ0QWxsUGx1Z2lucwogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykgewogICAgICAgICBpZCBhVmlldyA9IFtfdmlld3Mgb2JqZWN0QXRJbmRl
eDppXTsKICAgICAgICAgaWYgKFthVmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdl
YlBsdWdJblN0YXJ0KV0pIHsKLSAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgW2FWaWV3IHdlYlBsdWdJblN0YXJ0XTsK
ICAgICAgICAgfSBlbHNlIGlmIChbYVZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihw
bHVnaW5TdGFydCldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIFthVmlldyBwbHVnaW5TdGFydF07CiAgICAg
ICAgIH0KICAgICB9CkBAIC0yNTIsMTAgKzI1MiwxMCBAQCAtICh2b2lkKWFkZFBsdWdpbjooTlNW
aWV3ICopdmlldwogCiAgICAgICAgIExPRyhQbHVnaW5zLCAiaW5pdGlhbGl6aW5nIHBsdWctaW4g
JUAiLCB2aWV3KTsKICAgICAgICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3Iod2ViUGx1Z0luSW5pdGlhbGl6ZSldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
ICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRv
d0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIFt2aWV3IHdlYlBsdWdJ
bkluaXRpYWxpemVdOwogICAgICAgICB9IGVsc2UgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IocGx1Z2luSW5pdGlhbGl6ZSldKSB7Ci0gICAgICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7
CisgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RP
TVdpbmRvd0Jhc2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgIFt2aWV3IHBs
dWdpbkluaXRpYWxpemVdOwogICAgICAgICB9CiAKQEAgLTI2NSwxNSArMjY1LDE1IEBAIC0gKHZv
aWQpYWRkUGx1Z2luOihOU1ZpZXcgKil2aWV3CiAgICAgICAgIGlmIChfc3RhcnRlZCkgewogICAg
ICAgICAgICAgTE9HKFBsdWdpbnMsICJzdGFydGluZyBwbHVnLWluICVAIiwgdmlldyk7CiAgICAg
ICAgICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5T
dGFydCldKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICAgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgICAgIFt2aWV3IHdlYlBsdWdJblN0YXJ0
XTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihwbHVnaW5TdGFydCldKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAg
ICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2lu
ZG93QmFzZTo6Y29tbW9uSlNHbG9iYWxEYXRhKCkpOwogICAgICAgICAgICAgICAgIFt2aWV3IHBs
dWdpblN0YXJ0XTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0Q29udGFpbmluZ1dpbmRvdzop
XSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpKTsKICAgICAgICAgICAgICAgICBbdmlldyBzZXRDb250YWluaW5nV2luZG93
OltfZG9jdW1lbnRWaWV3IHdpbmRvd11dOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQv
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHku
bW0JKHdvcmtpbmcgY29weSkKQEAgLTg2Nyw4ICs4NjcsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eTo6ZXZhbHVhCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICAKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhwbHVnaW5Xb3JsZCgpLT5nbG9iYWxEYXRhKCkpOwogICAgIFN0
cm9uZzxKU0dsb2JhbE9iamVjdD4gZ2xvYmFsT2JqZWN0KCpwbHVnaW5Xb3JsZCgpLT5nbG9iYWxE
YXRhKCksIGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpKTsKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIApAQCAtOTA0
LDcgKzkwMyw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5z
Y3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqZWN0LT5nZXQoZXhlYywgbWV0aG9k
TmFtZSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBn
ZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwpAQCAtOTM3LDcgKzkzNiw3IEBAIGJvb2wg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2Jq
ZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5j
ZUFzc2VydGlvbnNPbmx5KTsgICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAog
ICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gb2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShvYmplY3QsIGNhbGxEYXRhKTsKICAgICBpZiAoY2Fs
bFR5cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAtOTY5LDcgKzk2OCw3IEBAIGJvb2wgTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5Ojpjb25zdHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdp
bldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIENvbnN0cnVjdERh
dGEgY29uc3RydWN0RGF0YTsKICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBvYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmdldENvbnN0cnVjdERhdGEob2JqZWN0LCBjb25zdHJ1Y3REYXRh
KTsKQEAgLTEwMDIsNyArMTAwMSw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
OjpnZXRQcm8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxF
eGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgICAgCisgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3Qt
PmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIAogICAgIG1hcnNoYWxWYWx1ZShleGVjLCB2
YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKQEAgLTEwMjMsNyArMTAyMiw3IEBAIGJv
b2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQcm8KICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFs
T2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsgICAgCisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAg
IAogICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwog
ICAgIAogICAgIG1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVu
Z3RoKTsKQEAgLTEwNDcsNyArMTA0Niw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpzZXRQcm8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9i
YWxFeGVjKCk7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsgICAgCisg
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRl
bWFyc2hhbFZhbHVlKGV4ZWMsIHZhbHVlRGF0YSwgdmFsdWVMZW5ndGgpOwogICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90OwpAQCAtMTA3Myw3ICsxMDcyLDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OnNldFBybwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQo
KSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OyAgICAKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsgICAgCiAgICAgCiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGRlbWFyc2hhbFZhbHVlKGV4ZWMsIHZhbHVlRGF0YSwgdmFsdWVMZW5ndGgpOwog
ICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIGZhbHNlKTsKQEAgLTEwOTgsMTIgKzEwOTcsMTIgQEAgYm9vbCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbW92ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVn
aW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
ICAgIGlmICghb2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAg
ICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBvYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lKTsKICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOyAgICAKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTExMjUsMTIgKzExMjQsMTIgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OnJlbW92ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4
ZWMoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBpZiAoIW9iamVjdC0+aGFz
UHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkgewogICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEpTTG9jayBs
b2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5k
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7ICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTE5Niw3ICsx
MTk1LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omhhc01ldAogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlw
dCgpLT5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgIEpTVmFsdWUgZnVuYyA9IG9iamVjdC0+Z2V0KGV4ZWMsIG1ldGhvZE5hbWUpOwog
ICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuICFmdW5jLmlzVW5kZWZpbmVk
KCk7CkBAIC0xMjE4LDcgKzEyMTcsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6ZW51bWVyCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFs
RXhlYygpOwotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlO
YW1lcyhleGVjKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMo
b2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsK
QEAgLTEyNjIsNyArMTI2MSw3IEBAIHN0YXRpYyBib29sIGdldE9iamVjdElEKE5ldHNjYXBlUGx1
Z2luSW4KICAgICAKIHZvaWQgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjphZGRWYWx1ZVRv
QXJyYXkoTlNNdXRhYmxlQXJyYXkgKmFycmF5LCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7CiAgICAg
ICAgIFthcnJheSBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6U3RyaW5nVmFsdWVU
eXBlXV07CkBAIC0xNjcyLDcgKzE2NzEsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6bW92ZUdsCiAgICAgICAgIHJldHVybjsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgc3RyaW5nVG9V
U3RyaW5nKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpKSkpOwogICAgIH0KIApJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyAr
MTA0LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHVzaW5nIEpTQzo6SlNHbG9iYWxP
YmplY3Q7CiB1c2luZyBKU0M6OkpTTG9jazsKIHVzaW5nIEpTQzo6SlNWYWx1ZTsKLXVzaW5nIEpT
Qzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5OwogCiAvKgogSGVyZSBpcyB0aGUgY3VycmVudCBiZWhh
dmlvciBtYXRyaXggZm9yIGZvdXIgdHlwZXMgb2YgbmF2aWdhdGlvbnM6CkBAIC01OTcsOCArNTk2
LDggQEAgLSAoTlNTdHJpbmcgKilfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcgogICAgIGlmICgh
cmVzdWx0IHx8ICghcmVzdWx0LmlzQm9vbGVhbigpICYmICFyZXN1bHQuaXNTdHJpbmcoKSAmJiAh
cmVzdWx0LmlzTnVtYmVyKCkpKQogICAgICAgICByZXR1cm4gQCIiOwogCi0gICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IF9w
cml2YXRlLT5jb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1h
bFdvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICByZXR1cm4gdXN0cmluZ1RvU3RyaW5nKHJlc3VsdC50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOwogfQogCkBAIC0xMTIzLDggKzExMjIsOCBAQCAtIChOU1N0cmluZyAqKV9zdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyCiAgICAgaWYgKCFyZXN1bHQgfHwgKCFyZXN1bHQuaXNCb29s
ZWFuKCkgJiYgIXJlc3VsdC5pc1N0cmluZygpICYmICFyZXN1bHQuaXNOdW1iZXIoKSkpCiAgICAg
ICAgIHJldHVybiBAIiI7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gYW55V29ybGRHbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIHJldHVybiB1
c3RyaW5nVG9TdHJpbmcocmVzdWx0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVn
RGVsZWdhdGUubW0JKHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDkgKzE3
NCw5IEBAIC0gKE5TQXJyYXkgKilzY29wZUNoYWluCiAgICAgaWYgKCFfcHJpdmF0ZS0+ZGVidWdn
ZXJDYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheV07CiAKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW4gPSBfcHJpdmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhzY29wZUNoYWluLT5nbG9iYWxEYXRhKTsKICAgICBpZiAoIXNj
b3BlQ2hhaW4tPm5leHQpICAvLyBnbG9iYWwgZnJhbWUKICAgICAgICAgcmV0dXJuIFtOU0FycmF5
IGFycmF5V2l0aE9iamVjdDpfcHJpdmF0ZS0+Z2xvYmFsT2JqZWN0XTsKIApAQCAtMjI5LDEzICsy
MjksMTMgQEAgLSAoaWQpZXZhbHVhdGVXZWJTY3JpcHQ6KE5TU3RyaW5nICopc2NyaQogICAgIGlm
ICghX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwogCi0g
ICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLQogICAgIC8vIElmIHRoaXMg
aXMgdGhlIGdsb2JhbCBjYWxsIGZyYW1lIGFuZCB0aGVyZSBpcyBubyBkeW5hbWljIGdsb2JhbCBv
YmplY3QsCiAgICAgLy8gRGFzaGNvZGUgaXMgYXR0ZW1wdGluZyB0byBleGVjdXRlIEpTIGluIHRo
ZSBldmFsdWF0b3IgdXNpbmcgYSBzdGFsZQogICAgIC8vIFdlYlNjcmlwdENhbGxGcmFtZS4gSW5z
dGVhZCwgd2UgbmVlZCB0byBzZXQgdGhlIGR5bmFtaWMgZ2xvYmFsIG9iamVjdAogICAgIC8vIGFu
ZCBldmFsdWF0ZSB0aGUgSlMgaW4gdGhlIGdsb2JhbCBvYmplY3QncyBnbG9iYWwgY2FsbCBmcmFt
ZS4KICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gX3ByaXZhdGUtPmRlYnVnZ2Vy
LT5nbG9iYWxPYmplY3QoKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKSk7CisKICAgICBpZiAoc2VsZiA9PSBfcHJpdmF0ZS0+ZGVidWdnZXItPmdsb2Jh
bENhbGxGcmFtZSgpICYmICFnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFs
T2JqZWN0KSB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBfcHJpdmF0
ZS0+ZGVidWdnZXItPmdsb2JhbE9iamVjdCgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTU4MSw4ICs1ODEsOCBAQCArICh2b2lk
KV9yZXBvcnRFeGNlcHRpb246KEpTVmFsdWVSZWYpZXhjCiAgICAgaWYgKCFleGNlcHRpb24gfHwg
IWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZSA9IHRvSlMoY29udGV4
dCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlY1N0YXRlKTsKIAogICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgY29udGV4dCBoYXMgYSBET01XaW5kb3cgZ2xvYmFsIG9iamVjdCwgb3RoZXJ3aXNlIHRo
aXMgY29udGV4dCBkaWRuJ3Qgb3JpZ2luYXRlIGZyb20gYSBXZWJWaWV3LgogICAgIGlmICghdG9K
U0RPTVdpbmRvdyhleGVjU3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpCkBAIC00ODUxLDcg
KzQ4NTEsNyBAQCAtIChOU0FwcGxlRXZlbnREZXNjcmlwdG9yICopYWVEZXNjQnlFdmFsCiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBjb3JlRnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KHNjcmlw
dCwgdHJ1ZSkuanNWYWx1ZSgpOwogICAgIGlmICghcmVzdWx0KSAvLyBGSVhNRTogcGFzcyBlcnJv
cnMKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxP
YmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVjKCkpOwogICAgIHJldHVy
biBhZURlc2NGcm9tSlNWYWx1ZShjb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFp
blRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVjKCksIHJlc3VsdCk7CiB9CiAKQEAgLTY1
NjAsOCArNjU2MCw4IEBAIC0gKHZvaWQpX25vdGlmaWNhdGlvbnNEaWRDbG9zZTooTlNBcnJheSAK
IAogLSAoSlNWYWx1ZVJlZilfY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvOihKU0Nv
bnRleHRSZWYpY29udGV4dCBmb3JFbGVtZW50OihKU1ZhbHVlUmVmKXZhbHVlCiB7Ci0gICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0
b0pTKGNvbnRleHQpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghdmFs
dWUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICBK
U1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
cXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMjExOTMpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA2LTI1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFo
bmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNMb2NrIHNob3VsZCBiZSBwZXItSlNHbG9i
YWxEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
OTEyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENo
YW5nZWQgYWxsIHNpdGVzIHRoYXQgdXNlZCBKU0xvY2sgdG8gaW5zdGVhZCB1c2UgdGhlIG5ldyBK
U0xvY2tIb2xkZXIKKyAgICAgICAgYW5kIHBhc3MgaW4gdGhlIGNvcnJlY3QgSlMgY29udGV4dCB0
aGF0IHRoZSBjb2RlIGlzIGFib3V0IHRvIGludGVyYWN0IHdpdGggdGhhdCAKKyAgICAgICAgbmVl
ZHMgcHJvdGVjdGlvbi4gQWxzbyBhZGRlZCBhIGNvdXBsZSBKU0xvY2tzIHRvIHBsYWNlcyB0aGF0
IGRpZG4ndCBhbHJlYWR5IAorICAgICAgICBoYXZlIGl0IHRoYXQgbmVlZGVkIGl0LgorCisgICAg
ICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWVQcml2YXRlOjphZGRR
dFNlbmRlclRvR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKFFXZWJGcmFtZTo6YWRkVG9KYXZhU2Ny
aXB0V2luZG93T2JqZWN0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdC5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aW5qZWN0
SW50ZXJuYWxzT2JqZWN0KToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNl
dEludGVybmFsc09iamVjdCk6CisKIDIwMTItMDYtMjMgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJl
dmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIx
MjEwNTguCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHJldmlzaW9uIDEyMTE4
MykKKysrIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwNiwxMyArNTA2LDEyIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHF0U2VuZGVyQ2FsbGJhY2so
SlNDb24KIAogdm9pZCBRV2ViRnJhbWVQcml2YXRlOjphZGRRdFNlbmRlclRvR2xvYmFsT2JqZWN0
KCkKIHsKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
LQogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KGZyYW1lLCBtYWluVGhy
ZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgUV9BU1NFUlQod2luZG93KTsKIAogICAgIEpTQzo6RXhl
Y1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CiAgICAgUV9BU1NFUlQoZXhlYyk7
CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTQ29udGV4dFJlZiBj
b250ZXh0ID0gOjp0b1JlZihleGVjKTsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcHJv
cGVydHlOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiX19xdF9zZW5k
ZXJfXyIpKTsKQEAgLTY1Nyw3ICs2NTYsNiBAQCB2b2lkIFFXZWJGcmFtZTo6YWRkVG9KYXZhU2Ny
aXB0V2luZG93T2JqCiAgICAgICAgIHJldHVybjsKICNpZiBVU0UoSlNDKQogICAgIEpTQzo6Qmlu
ZGluZ3M6OlF0SW5zdGFuY2U6OlZhbHVlT3duZXJzaGlwIHZhbHVlT3duZXJzaGlwID0gc3RhdGlj
X2Nhc3Q8SlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6VmFsdWVPd25lcnNoaXA+KG93bmVyc2hp
cCk7Ci0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAg
ICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3coZC0+ZnJhbWUsIG1haW5UaHJl
YWROb3JtYWxXb3JsZCgpKTsKICAgICBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290Owog
ICAgIGlmICh2YWx1ZU93bmVyc2hpcCA9PSBKU0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpRdE93
bmVyc2hpcCkKQEAgLTY3NSw2ICs2NzMsNyBAQCB2b2lkIFFXZWJGcmFtZTo6YWRkVG9KYXZhU2Ny
aXB0V2luZG93T2JqCiAgICAgfQogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ct
Pmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAg
SlNDOjpKU09iamVjdCogcnVudGltZU9iamVjdCA9CiAgICAgICAgICAgICBKU0M6OkJpbmRpbmdz
OjpRdEluc3RhbmNlOjpnZXRRdEluc3RhbmNlKG9iamVjdCwgcm9vdCwgdmFsdWVPd25lcnNoaXAp
LT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwpJbmRleDogU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAJ
KHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg2LDEzICsxMDg2
LDEyIEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmluamVjdEludGUKIHsKICAgICBX
ZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShmcmFtZSk7
CiAjaWYgVVNFKEpTQykKLSAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlv
bnNPbmx5KTsKLQogICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KGNvcmVG
cmFtZSwgbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogICAgIFFfQVNTRVJUKHdpbmRvdyk7CiAK
ICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygpOwogICAgIFFf
QVNTRVJUKGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBK
U0NvbnRleHRSZWYgY29udGV4dCA9IHRvUmVmKGV4ZWMpOwogICAgIFdlYkNvcmVUZXN0U3VwcG9y
dDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQpOwpAQCAtMTExMywxMyArMTExMiwxMiBA
QCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpyZXNldEludGVyCiB7CiAgICAgV2ViQ29y
ZTo6RnJhbWUqIGNvcmVGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUoZnJhbWUpOwogI2lm
IFVTRShKU0MpCi0gICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25s
eSk7Ci0KICAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhjb3JlRnJhbWUs
IG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBRX0FTU0VSVCh3aW5kb3cpOwogCiAgICAg
SlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKICAgICBRX0FTU0VS
VChleGVjKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNDb250
ZXh0UmVmIGNvbnRleHQgPSB0b1JlZihleGVjKTsKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnJl
c2V0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYktpdC93aW4vQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNp
b24gMTIxMTkzKQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMzAgQEAKKzIwMTItMDYtMjUgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5i
ZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBKU0xvY2sgc2hvdWxkIGJlIHBlci1KU0dsb2JhbERh
dGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MTIz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdl
ZCBhbGwgc2l0ZXMgdGhhdCB1c2VkIEpTTG9jayB0byBpbnN0ZWFkIHVzZSB0aGUgbmV3IEpTTG9j
a0hvbGRlcgorICAgICAgICBhbmQgcGFzcyBpbiB0aGUgY29ycmVjdCBKUyBjb250ZXh0IHRoYXQg
dGhlIGNvZGUgaXMgYWJvdXQgdG8gaW50ZXJhY3Qgd2l0aCB0aGF0IAorICAgICAgICBuZWVkcyBw
cm90ZWN0aW9uLiBBbHNvIGFkZGVkIGEgY291cGxlIEpTTG9ja3MgdG8gcGxhY2VzIHRoYXQgZGlk
bid0IGFscmVhZHkgCisgICAgICAgIGhhdmUgaXQgdGhhdCBuZWVkZWQgaXQuCisKKyAgICAgICAg
KiBXZWJDb3JlU3RhdGlzdGljcy5jcHA6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2
YVNjcmlwdE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2YVNj
cmlwdEdsb2JhbE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGljczo6amF2
YVNjcmlwdFByb3RlY3RlZE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJDb3JlU3RhdGlzdGlj
czo6amF2YVNjcmlwdFByb3RlY3RlZEdsb2JhbE9iamVjdHNDb3VudCk6CisgICAgICAgIChXZWJD
b3JlU3RhdGlzdGljczo6amF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMpOgorICAg
ICAgICAqIFdlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkZyYW1lOjpzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0SW5TY3JpcHRXb3JsZCk6CisgICAgICAgICogV2ViSmF2YVNjcmlwdENvbGxl
Y3Rvci5jcHA6CisgICAgICAgIChXZWJKYXZhU2NyaXB0Q29sbGVjdG9yOjpvYmplY3RDb3VudCk6
CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZyk6CisgICAgICAgIChXZWJWaWV3OjpyZXBvcnRFeGNl
cHRpb24pOgorICAgICAgICAoV2ViVmlldzo6ZWxlbWVudEZyb21KUyk6CisKIDIwMTItMDYtMjMg
IFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjEwNTguCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJDb3JlU3RhdGlzdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2Vi
Q29yZVN0YXRpc3RpY3MuY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJDb3JlU3RhdGlzdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJDb3JlU3RhdGlzdAogICAgIGlmICghY291bnQp
CiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25K
U0dsb2JhbERhdGEoKSk7CiAgICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CkBA
IC0xMDksNyArMTA5LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJDb3JlU3RhdGlz
dAogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgKmNvdW50ID0gKFVJTlQpSlNE
T01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLmdsb2JhbE9iamVjdENvdW50KCk7
CiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC0xMjAsNyArMTIwLDcgQEAgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBXZWJDb3JlU3RhdGlzdAogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVy
biBFX1BPSU5URVI7CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7
CiAgICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5o
ZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC0xMzEs
NyArMTMxLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJDb3JlU3RhdGlzdAogICAg
IGlmICghY291bnQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2lu
ZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5k
b3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50
KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC0xMzksNyArMTM5LDcgQEAgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXZWJDb3JlU3RhdGlzdAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBX
ZWJDb3JlU3RhdGlzdGljczo6amF2YVNjcmlwdFByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoIAog
ICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSVByb3BlcnR5QmFnMioqIHR5cGVOYW1lc0FuZENvdW50
cykKIHsKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSk7CiAgICAgT3du
UHRyPFR5cGVDb3VudFNldD4ganNPYmplY3RUeXBlTmFtZXMoSlNET01XaW5kb3c6OmNvbW1vbkpT
R2xvYmFsRGF0YSgpLT5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgdHlw
ZWRlZiBUeXBlQ291bnRTZXQ6OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwogICAgIEl0ZXJhdG9y
IGVuZCA9IGpzT2JqZWN0VHlwZU5hbWVzLT5lbmQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2lu
L1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5j
cHAJKHJldmlzaW9uIDEyMTE4MykKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1
c2luZyBKU0M6OkpTR2xvYmFsT2JqZWN0OwogdXNpbmcgSlNDOjpKU0xvY2s7CiB1c2luZyBKU0M6
OkpTVmFsdWU7Ci11c2luZyBKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seTsKIAogI2RlZmluZSBG
TEFTSF9SRURSQVcgMAogCkBAIC0yNTI4LDggKzI1MjcsOCBAQCBIUkVTVUxUIFdlYkZyYW1lOjpz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhCiAgICAgaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC5pc0Jvb2xl
YW4oKSAmJiAhcmVzdWx0LmlzU3RyaW5nKCkgJiYgIXJlc3VsdC5pc051bWJlcigpKQogICAgICAg
ICByZXR1cm4gU19PSzsKIAotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBhbnlXb3JsZEdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgU3RyaW5nIHJl
c3VsdFN0cmluZyA9IHVzdHJpbmdUb1N0cmluZyhyZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKTsKICAgICAqZXZhbHVhdGlvblJlc3VsdCA9IEJTdHJpbmcocmVzdWx0U3RyaW5nKS5y
ZWxlYXNlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkphdmFTY3JpcHRDb2xsZWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkphdmFTY3JpcHRDb2xs
ZWN0b3IuY3BwCShyZXZpc2lvbiAxMjExODMpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJKYXZh
U2NyaXB0Q29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSmF2YVNjcmlwdEMKICAgICAgICAgcmV0dXJuIEVf
UE9JTlRFUjsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEo
KSk7CiAgICAgKmNvdW50ID0gKFVJTlQpSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgp
LT5oZWFwLm9iamVjdENvdW50KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJWaWV3LmNwcAkocmV2aXNpb24gMTIxMTgzKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmll
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOTQsOCArMzE5NCw4IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgV2ViVmlldzo6c3RyaW4KICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvblJlc3Vs
dCkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKICAgICBlbHNlIGlmIChzY3JpcHRFeGVjdXRpb25S
ZXN1bHQuaXNTdHJpbmcoKSkgewotICAgICAgICBKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CiAgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gY29yZUZyYW1lLT5z
Y3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFsRXhl
YygpOworICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAqcmVz
dWx0ID0gQlN0cmluZyh1c3RyaW5nVG9TdHJpbmcoc2NyaXB0RXhlY3V0aW9uUmVzdWx0LmdldFN0
cmluZyhleGVjKSkpOwogICAgIH0KIApAQCAtNTg1MSw4ICs1ODUxLDggQEAgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpyZXBvcgogICAgIGlmICghY29udGV4dCB8fCAhZXhjZXB0
aW9uKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgSlNMb2NrIGxvY2soSlNDOjpTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjU3RhdGUgPSB0b0pT
KGNvbnRleHQpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlY1N0YXRlKTsKIAogICAg
IC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBoYXMgYSBET01XaW5kb3cgZ2xvYmFsIG9iamVjdCwg
b3RoZXJ3aXNlIHRoaXMgY29udGV4dCBkaWRuJ3Qgb3JpZ2luYXRlIGZyb20gYSBXZWJWaWV3Lgog
ICAgIGlmICghdG9KU0RPTVdpbmRvdyhleGVjU3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkp
CkBAIC01ODc4LDggKzU4NzgsOSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6
OmVsZW1lCiAgICAgaWYgKCFub2RlT2JqZWN0KQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0g
ICAgSlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIEVsZW1lbnQq
IGVsdCA9IHRvRWxlbWVudCh0b0pTKHRvSlMoY29udGV4dCksIG5vZGVPYmplY3QpKTsKKyAgICBK
U0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CisgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKKyAgICBFbGVtZW50KiBlbHQgPSB0b0VsZW1lbnQodG9KUyhleGVjLCBu
b2RlT2JqZWN0KSk7CiAgICAgaWYgKCFlbHQpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAK
</data>
<flag name="review"
          id="157406"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>