<?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>10930</bug_id>
          
          <creation_ts>2006-09-18 20:20:52 -0700</creation_ts>
          <short_desc>WebKit could benefit from a JavaScript live object profiler</short_desc>
          <delta_ts>2016-04-28 17:17:55 -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>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>154407</dependson>
    
    <dependson>154838</dependson>
    
    <dependson>154847</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Rowe (bdash)">mrowe</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>ap</cc>
    
    <cc>aroben</cc>
    
    <cc>bburg</cc>
    
    <cc>binh.phan</cc>
    
    <cc>emacemac7</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>kmccullough</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mihnea</cc>
    
    <cc>olaru</cc>
    
    <cc>oliver</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>tolmasky</cc>
    
    <cc>yahoomobile</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>55874</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2006-09-18 20:20:52 -0700</bug_when>
    <thetext>With AJAX applications becoming more common, users are spending considerably longer times on the same page.  If their JavaScript code is poorly written, they may end up creating a large number of live but unused JavaScript objects that remain in memory.  It could be useful to be able to view the number and types of live objects to determine if objects are hanging around longer than anticipated, so that increases in memory footprint can be limited.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71666</commentid>
    <comment_count>1</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-02-23 20:32:06 -0800</bug_when>
    <thetext>&lt;rdar://problem/5762057&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81349</commentid>
    <comment_count>2</comment_count>
    <who name="Kevin McCullough">kmccullough</who>
    <bug_when>2008-05-23 16:14:40 -0700</bug_when>
    <thetext>Committed Revision 34065.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81350</commentid>
    <comment_count>3</comment_count>
    <who name="Kevin McCullough">kmccullough</who>
    <bug_when>2008-05-23 16:15:21 -0700</bug_when>
    <thetext>Hmmm I may have closed this prematurely.  Does the current WebInspector satisfy this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81351</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-05-23 16:16:53 -0700</bug_when>
    <thetext>Nope.  This is about an object profiler, rather than the current execution time profiler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82980</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-06-11 11:44:31 -0700</bug_when>
    <thetext>*** Bug 19485 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93278</commentid>
    <comment_count>6</comment_count>
    <who name="Kevin McCullough">kmccullough</who>
    <bug_when>2008-09-29 14:00:39 -0700</bug_when>
    <thetext>*** Bug 17241 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119489</commentid>
    <comment_count>7</comment_count>
      <attachid>29915</attachid>
    <who name="Horia Olaru">olaru</who>
    <bug_when>2009-04-30 11:16:28 -0700</bug_when>
    <thetext>Created attachment 29915
Adds live object profiling capabilities

The patch provides a way to access the size of a specific JavaScript object, where it was created and a way to expose this information in WebInspector/JavaScript.

The patch follows the general guidelines in this related discussion on webkit-dev (https://lists.webkit.org/pipermail/webkit-dev/2009-February/006554.html).

The size of an object

This issue is comprised of two parts: the way to access the size of a JS object per se, and the way to access the size of DOM objects in JS.

The idea was to add a method to JS objects that returns the size of the object it belongs to. To do this, a virtual method named ‘instanceSize’ was added to the implementation of JS objects. Since not all implementations inherit JSObject, but all inherit JSCell (e.g. JSString), instanceSize was added on JSCell. It returns size 0 and is inherited by all descendants of JSCell. This way, it can be implemented and updated only for specific types. Such implementations are included for a few basic types (Array, String, Number).

To access DOM object sizes, CodeGeneratorJS.pm was modified. This script generates JS wrappers for DOM objects. The script checks for the ‘HasInstanceSize’ attribute in the .idl file to see if it is to add an ‘instanceSize’ implementation to the JS wrapper. This maintains the size function naming convention across pure JS objects and DOM objects, while allowing the size function to reside within the implementation file of the DOM object. This DOM object size function was named ‘elementSize’ and it is added on HTMLImageElement, to prove functionality. 

Object creation information

The main purpose is to keep track of the location where an object is created in JavaScript. This includes the url/file name and line number, as well as a stack trace of the function in which the object is created. In order to access this information, I found it necessary to record it at object creation time, when url, line number, and creator function are known. To do this a structure (LiveObjects) was added to hold the information in the existing profiler infrastructure. Profiler now exposes the objectCreated and objectCollected methods. The objectCreated method is called from the JSCell operator new, when profiling is enabled. Similarly, objectCollected is called from the JSCell destructor. The (LiveObjects) structure holds a map of JSCell* and ProfilerNode*, registering objects allocated between the start and end of a profiling session. The existing ProfilerNode structure was used in order to access stack traces, as the current ProfilerNode at object creation time is the currently executing JS function.

Object information access from JavaScript/WebInspector.

To access the collected live object information, the objectData() function was added to the JS Profile object. This function returns an array of objects (of type ObjectInformation). The JS interface for the ObjectInfromation type is located in inspector/JavaScriptObjectInformation and exposes these properties: id, type name, size and createdFrom. The createdFrom object is a reference to a JS ProfileNode, which actually holds function information. Stack traces can be obtained from the createFrom object by recursively going up the .parent property.

The below console code will allow you to visualize the live object information. Note that profiling must be enabled from the WebInspector in order for the code to work.

console.profile(“MyProfile”);
console.profileEnd();
// find the ‘i’ for your profile here;
console.profiles[i].objectData();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122075</commentid>
    <comment_count>8</comment_count>
      <attachid>29915</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-05-19 23:08:59 -0700</bug_when>
    <thetext>Comment on attachment 29915
Adds live object profiling capabilities

The most obvious issue with this patch is that the change to JSCell::operator new is likely to butcher performance whether the profiler is enabled or not -- have you tested perf in sunspider with the profiler disabled?

Additionally i think it would be best if the api added a different method to profiler object creation as most frequently people wish to profile execution time rather than object overhead, yet this is likely to add significant time and memory pressure that will skew those results in that case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123055</commentid>
    <comment_count>9</comment_count>
    <who name="Horia Olaru">olaru</who>
    <bug_when>2009-05-25 10:14:29 -0700</bug_when>
    <thetext>Here are the sunspider results:
** TOTAL **:           *1.007x as slow*  852.3ms +/- 0.1%   858.3ms +/- 0.1%     significant
http://pastie.org/489146

Adding UNLIKELY macros in the checks inside the operator new statements, shaved off about 2ms:
** TOTAL **:           *1.005x as slow*  852.3ms +/- 0.1%   856.1ms +/- 0.1%     significant
http://pastie.org/489148

Is this acceptable?

I&apos;m not sure I understand the second part of your comment. Do you mean to say there should be a way to enable performance profiling without enabling memory profiling?
If that is the case, I will include this in the next version of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123841</commentid>
    <comment_count>10</comment_count>
      <attachid>30834</attachid>
    <who name="Horia Olaru">olaru</who>
    <bug_when>2009-06-01 09:49:59 -0700</bug_when>
    <thetext>Created attachment 30834
Adds live object profiling capabilities

This version of the patch no longer introduces significant performance regressions.
Sunspider results are:
http://pastie.org/496608

** TOTAL **:           -                 731.9ms +/- 0.1%   731.2ms +/- 0.1% 

The live object profiling is disabled by default when profiling is enabled. An explicit action must be performed by the user to enabled it. I have added a temporary function on the console object that enables or disables live memory profiling, until this functionality is hooked into the UI. Note that profiling still needs to be enabled before enabling live object profiling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125973</commentid>
    <comment_count>11</comment_count>
      <attachid>31295</attachid>
    <who name="Horia Olaru">olaru</who>
    <bug_when>2009-06-15 09:50:33 -0700</bug_when>
    <thetext>Created attachment 31295
Adds live object profiling capabilities

This new attachment is just an up to date version of the previous.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126803</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-06-18 16:01:00 -0700</bug_when>
    <thetext>&gt; m_doCollectAllocationTraces

&quot;m_&quot; is the prefix we use for data members. &quot;s_&quot; is for statics.

Can you test sunspider --v8 as well? It tends to allocate more objects.

I think Kevin is reviewing this more in-depth. I don&apos;t see any obvious problems here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126816</commentid>
    <comment_count>13</comment_count>
      <attachid>31295</attachid>
    <who name="Kevin McCullough">kmccullough</who>
    <bug_when>2009-06-18 16:50:53 -0700</bug_when>
    <thetext>Comment on attachment 31295
Adds live object profiling capabilities

&gt; Index: JavaScriptCore/profiler/LiveObjects.cpp
&gt; ===================================================================
&gt; --- JavaScriptCore/profiler/LiveObjects.cpp	(revision 0)
&gt; +++ JavaScriptCore/profiler/LiveObjects.cpp	(revision 0)
&gt; +
&gt; +LiveObjects::~LiveObjects()
&gt; +{
&gt; +    //FIXME: Should implement this
&gt; +    //do we need to manually empty the HashMap? Find out.

This seems like a big deal. You should know the answer to this before we land.

&gt; +}
&gt; +
&gt; +//returns true if new value was added (not existing)
&gt; +bool LiveObjects::addNode(const JSCell* cell, PassRefPtr&lt;ProfileNode&gt; stackNode)
&gt; +{
&gt; +    ASSERT(cell);
&gt; +    //FIXME: should this increase/adopt the reference to the stackNode?
&gt; +    //if so, then it should dereference it in the removeNode methods

Ditto.
Also are we sure the JSCell won&apos;t be garbage collected?

&gt; +    return (m_stackMap.add(cell, stackNode)).second;
&gt; +}
&gt; +
&gt; +
&gt; +void LiveObjects::toVector(Vector&lt;ObjectIdentifier* &gt;&amp; vector) const
&gt; +{
&gt; +    ASSERT(vector.isEmpty());
&gt; +    for (const_iterator it = begin(); it != end(); ++it) {
&gt; +        if (!isFree(it-&gt;first)) {
&gt; +            const JSCell* cell = it-&gt;first;
&gt; +            const ClassInfo* info = cell-&gt;classInfo();
&gt; +            ObjectIdentifier* obj = new ObjectIdentifier((unsigned)cell, info ? info-&gt;className : &quot;Object&quot;, cell-&gt;instanceSize(), it-&gt;second);

Why don&apos;t you just make the ObjectIdentifier constructor accept the JSCell pointer and handle this logic in the constructor?  I could go either way on this one.

&gt; +                vector.append(obj);
&gt; +        }
&gt; +        //FIXME: there should be an else branch here to remove the
&gt; +        //free cells, which are not needed. They should be removed from the map
&gt; +        //Can&apos;t remove items in a HashMap while iterating over it. Should
&gt; +        //store the keys in an array and remove them afterwards.

Again, if this is important then we should do it.

&gt; +    }
&gt; +}
&gt; +
&gt; +} // namespace JSC

&gt; Index: JavaScriptCore/profiler/Profiler.cpp
&gt; ===================================================================
&gt; --- JavaScriptCore/profiler/Profiler.cpp	(revision 44682)
&gt; +++ JavaScriptCore/profiler/Profiler.cpp	(working copy)
&gt; @@ -86,8 +98,11 @@ PassRefPtr&lt;Profile&gt; Profiler::stopProfil
&gt;              RefPtr&lt;Profile&gt; returnProfile = profileGenerator-&gt;profile();
&gt;  
&gt;              m_currentProfiles.remove(i);
&gt; -            if (!m_currentProfiles.size())
&gt; +            if (!m_currentProfiles.size()) {
&gt; +                //There is no need to check whether m_isMemoryProfiling is enabled

Why? Is the assumption that setDoCollectAllocationTraces is cheap and will always be so? 

&gt; +                JSCell::setDoCollectAllocationTraces(false);
&gt;                  s_sharedEnabledProfilerReference = 0;
&gt; +            }
&gt;              
&gt;              return returnProfile;
&gt;          }
&gt; @@ -104,6 +119,14 @@ static inline void dispatchFunctionToPro
&gt;      }
&gt;  }
&gt;  
&gt; +static inline void dispatchObjectToProfiles(const Vector&lt;RefPtr&lt;ProfileGenerator&gt; &gt;&amp; profiles, ProfileGenerator::ProfileObjectFunction function, const JSCell* cell, unsigned currentProfileTargetGroup)
&gt; +{
&gt; +    for (size_t i = 0; i &lt; profiles.size(); ++i) {
&gt; +        if (profiles[i]-&gt;profileGroup() == currentProfileTargetGroup || !profiles[i]-&gt;originatingGlobalExec())
&gt; +            (profiles[i].get()-&gt;*function)(cell);
&gt; +    }
&gt; +}
&gt; +
&gt;  void Profiler::willExecute(ExecState* exec, JSValue function)
&gt;  {
&gt;      ASSERT(!m_currentProfiles.isEmpty());
&gt; @@ -134,6 +157,24 @@ void Profiler::didExecute(ExecState* exe
&gt;      dispatchFunctionToProfiles(m_currentProfiles, &amp;ProfileGenerator::didExecute, createCallIdentifier(&amp;exec-&gt;globalData(), JSValue(), sourceURL, startingLineNumber), exec-&gt;lexicalGlobalObject()-&gt;profileGroup());
&gt;  }
&gt;  
&gt; +void Profiler::objectCreated(ExecState* exec, JSCell* createdObject)
&gt; +{
&gt; +    ASSERT(!m_currentProfiles.isEmpty());
&gt; +
&gt; +    dispatchObjectToProfiles(m_currentProfiles, &amp;ProfileGenerator::objectCreated, createdObject, exec-&gt;lexicalGlobalObject()-&gt;profileGroup());

Since this is the only caller to dispatchObjectToProfiles you don&apos;t really need to pass the m_currentProfiles, but I guess it looks like you were intending this to have more callers with different functions passed to it?

&gt; +}
&gt; +


This is as far as I got with this today.  I&apos;ll try to look at the rest of it, or a new version of it, later.
One thing that I think would be good would be a way to test this.  I realize that there is a lot of functionality in the Web Inspector that does not have automated testing,
and that I am one of the culprits of the Inspector being in that state, but I don&apos;t want to continue this trend of expanding Web Inspector functionality without a way to
implement automated tests when bugs are fixed.

I&apos;m not sure the automated tests are necessary for this patch, but it&apos;s something I&apos;d love to hear feedback on from the rest of the community.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127959</commentid>
    <comment_count>14</comment_count>
      <attachid>31800</attachid>
    <who name="Horia Olaru">olaru</who>
    <bug_when>2009-06-24 12:03:31 -0700</bug_when>
    <thetext>Created attachment 31800
Adds live object profiling capabilities

Thanks for the comments.

@Geoffrey

&gt; &quot;m_&quot; is the prefix we use for data members. &quot;s_&quot; is for statics.

Changed it to s_doCollectAllocationTraces. Thanks.

&gt; Can you test sunspider --v8 as well? It tends to allocate more objects.

** TOTAL **:      *1.005x as slow*  3150.0ms +/- 0.1%   3164.2ms +/- 0.1%     significant

http://pastie.org/523206

This is with this version of the patch. What are your thoughts on this?



@Kevin

&gt; &gt; --- JavaScriptCore/profiler/LiveObjects.cpp	(revision 0)
&gt; &gt; +++ JavaScriptCore/profiler/LiveObjects.cpp	(revision 0)
&gt; &gt; +
&gt; &gt; +LiveObjects::~LiveObjects()
&gt; &gt; +{
&gt; &gt; +    //FIXME: Should implement this
&gt; &gt; +    //do we need to manually empty the HashMap? Find out.
&gt; 
&gt; This seems like a big deal. You should know the answer to this before we land.

Emptying the HashMap and destroying its objects is done when the map is destroyed.
There is no need to do it manually. Comment removed.

&gt; &gt; +bool LiveObjects::addNode(const JSCell* cell, PassRefPtr&lt;ProfileNode&gt; stackNode)
&gt; &gt; +{
&gt; &gt; +    ASSERT(cell);
&gt; &gt; +    //FIXME: should this increase/adopt the reference to the stackNode?
&gt; &gt; +    //if so, then it should dereference it in the removeNode methods
&gt; 
&gt; Ditto.

The hashmap value, to which the stackNode is assigned, is a RefPtr and does not need
to be manually managed. Comment removed.

&gt; Also are we sure the JSCell won&apos;t be garbage collected?

I&apos;m going on the assumption that the main use case for a memory profiler is to find leaks. In this case,
the developer wants to see the live objects and collected objects are not so important since they don&apos;t leak.

The isFree(cell) method returns true for a cell that has been collected and such cells are skipped.

The addNode and removeNode methods of LiveObjects are called from the above objectCreated
and objectCollected entry points. The objectCreated method is called at the end of the new operator
and adds a cell to the map. The objectCollected method is called when the cell is collected,
becoming free, and it removes the object from the map. This mechanism ensures that during a profiling
session there are no collected cells inside the liveObects map.

However, when profiling is stopped, the hooks inside the heap are disconnected from this profile.
Cells that are live at this time may become free in the future. To avoid loosing this information,
I have added a method that flushes the cell map to a vector of ObjectIdentifiers when profiling is stopped.
This vector then becomes the data that will be displayed by the JavaScript Profile object.

&gt; &gt; +void LiveObjects::toVector(Vector&lt;ObjectIdentifier* &gt;&amp; vector) const
&gt; &gt; +{
&gt; &gt; +    ASSERT(vector.isEmpty());
&gt; &gt; +    for (const_iterator it = begin(); it != end(); ++it) {
&gt; &gt; +        if (!isFree(it-&gt;first)) {
&gt; &gt; +            const JSCell* cell = it-&gt;first;
&gt; &gt; +            const ClassInfo* info = cell-&gt;classInfo();
&gt; &gt; +            ObjectIdentifier* obj = new ObjectIdentifier((unsigned)cell, info ? info-&gt;className : &quot;Object&quot;, cell-&gt;instanceSize(), it-&gt;second);
&gt; 
&gt; Why don&apos;t you just make the ObjectIdentifier constructor accept the JSCell
&gt; pointer and handle this logic in the constructor?  I could go either way on
&gt; this one.

Initially I didn&apos;t want to add any logic to the ObjectIdentifier struct.
Now, in order to avoid memory issues, I&apos;ve changed ObjectIdentifier to a RefCounted type and
moved some of the logic in the constructors.

&gt; &gt; +                vector.append(obj);
&gt; &gt; +        }
&gt; &gt; +        //FIXME: there should be an else branch here to remove the
&gt; &gt; +        //free cells, which are not needed. They should be removed from the map
&gt; &gt; +        //Can&apos;t remove items in a HashMap while iterating over it. Should
&gt; &gt; +        //store the keys in an array and remove them afterwards.
&gt; 
&gt; Again, if this is important then we should do it.

This shouldn&apos;t be an issue any longer.

&gt; &gt; +    }
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +} // namespace JSC
&gt; 
&gt; &gt; Index: JavaScriptCore/profiler/Profiler.cpp
&gt; &gt; ===================================================================
&gt; &gt; --- JavaScriptCore/profiler/Profiler.cpp	(revision 44682)
&gt; &gt; +++ JavaScriptCore/profiler/Profiler.cpp	(working copy)
&gt; &gt; @@ -86,8 +98,11 @@ PassRefPtr&lt;Profile&gt; Profiler::stopProfil
&gt; &gt;              RefPtr&lt;Profile&gt; returnProfile = profileGenerator-&gt;profile();
&gt; &gt;  
&gt; &gt;              m_currentProfiles.remove(i);
&gt; &gt; -            if (!m_currentProfiles.size())
&gt; &gt; +            if (!m_currentProfiles.size()) {
&gt; &gt; +                //There is no need to check whether m_isMemoryProfiling is enabled
&gt; 
&gt; Why? Is the assumption that setDoCollectAllocationTraces is cheap and will
&gt; always be so? 
&gt; 
&gt; &gt; +                JSCell::setDoCollectAllocationTraces(false);
&gt; &gt;                  s_sharedEnabledProfilerReference = 0;
&gt; &gt; +            }

It should be cheap, but you&apos;re right, there no solid reason not to check.
Removed comment and added check.

&gt; &gt;  
&gt; &gt; +void Profiler::objectCreated(ExecState* exec, JSCell* createdObject)
&gt; &gt; +{
&gt; &gt; +    ASSERT(!m_currentProfiles.isEmpty());
&gt; &gt; +
&gt; &gt; +    dispatchObjectToProfiles(m_currentProfiles, &amp;ProfileGenerator::objectCreated, createdObject, exec-&gt;lexicalGlobalObject()-&gt;profileGroup());
&gt; 
&gt; Since this is the only caller to dispatchObjectToProfiles you don&apos;t really need
&gt; to pass the m_currentProfiles, but I guess it looks like you were intending
&gt; this to have more callers with different functions passed to it?

Indeed, there were more callers intended for this function.
I&apos;ve removed the dispatchObjectToProfiles function completely and moved the code inside
objectCreated, its only caller.

&gt; This is as far as I got with this today.  I&apos;ll try to look at the rest of it,
&gt; or a new version of it, later.
&gt; One thing that I think would be good would be a way to test this.  I realize
&gt; that there is a lot of functionality in the Web Inspector that does not have
&gt; automated testing,
&gt; and that I am one of the culprits of the Inspector being in that state, but I
&gt; don&apos;t want to continue this trend of expanding Web Inspector functionality
&gt; without a way to
&gt; implement automated tests when bugs are fixed.
&gt; 
&gt; I&apos;m not sure the automated tests are necessary for this patch, but it&apos;s
&gt; something I&apos;d love to hear feedback on from the rest of the community.
&gt; 

I&apos;ve added some (not very complex) tests to verify the following:
- the JavaScript objects and properties exposed on the Profile and ObjectIdentifier interface
- stack traces for object allocation
- types for allocated objects
- number of allocated / collected objects in the given period of time

What&apos;s left is testing the actual size of the objects, which is the tough part. I&apos;ve given this some
thought and can&apos;t say that I&apos;ve come to any conclusions. The issue is that there&apos;s no reliable way
to predict the expected results.

I&apos;m not keen on &apos;hardcoding&apos; the expected sizes in the tests, since the evolution of the returned size
is not predictable.  Some random implementation change may fail a lot of tests for no reason.

One idea would be to do a &apos;fuzzy&apos; measurement of size, allowing some degree of variation.

Another would be to find a reproducible relationship between the sizes of objects (e.g. &quot;an array of five
objects should have a smaller size than an array of ten&quot;) which can be used to check validity. This,
however is not as simple as it sounds (the former example depends on the implementation of Array,
which doesn&apos;t guarantee that relationship).

I&apos;d like to some feedback on this issue as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128215</commentid>
    <comment_count>15</comment_count>
      <attachid>31800</attachid>
    <who name="Kevin McCullough">kmccullough</who>
    <bug_when>2009-06-25 10:53:03 -0700</bug_when>
    <thetext>Comment on attachment 31800
Adds live object profiling capabilities


&gt; Index: JavaScriptCore/runtime/JSArray.cpp
&gt; ===================================================================
&gt; --- JavaScriptCore/runtime/JSArray.cpp	(revision 45079)
&gt; +++ JavaScriptCore/runtime/JSArray.cpp	(working copy)
&gt; @@ -1048,6 +1048,35 @@ void JSArray::checkConsistency(Consisten
&gt;  
&gt;  #endif
&gt;  
&gt; +size_t JSArray::instanceSize() const
&gt; +{
&gt; +    size_t computedSize = 0;
&gt; +
&gt; +    // JS class overhead
&gt; +    computedSize += sizeof(*this);
&gt; +
&gt; +    // ArrayStorage overhead - this takes into account the size of the
&gt; +    // storage vector
&gt; +    computedSize += storageSize(m_storage-&gt;m_vectorLength);
&gt; +
&gt; +    //  size of Sparse value map
&gt; +    //  FIXME: A generic class/method could probably be implemented
&gt; +    //  to measure the size of any HashMap containing JSObjects
&gt; +    SparseArrayValueMap* map = m_storage-&gt;m_sparseValueMap;
&gt; +    if (map) {
&gt; +        computedSize += sizeof(*map) + map-&gt;capacity() * sizeof(SparseArrayValueMap::ValueType);
&gt; +    }

We don&apos;t put curly brackets around a single line of code.

&gt; +
&gt; +    //  FIXME: Measure size of the JSObject propertyMap
&gt; +    //  JSArray will store objects with non-numeric identifiers, and some other types
&gt; +    //  (see the comments at the beginning of JSArray.cpp) in its property map
&gt; +    //  (eg: arr[&quot;object&quot;]), so it is important to measure this.
&gt; +    //  This should probably be done in JSObject and a &apos;super&apos; method should be
&gt; +    //  called.

Again if this is important we should do this.  And seeing how the only tests we don&apos;t have
are for object size, this is a natural place for bugs to hide.

&gt; +
&gt; +    return computedSize;
&gt; +}
&gt; +
&gt;  JSArray* constructEmptyArray(ExecState* exec)
&gt;  {
&gt;      return new (exec) JSArray(exec-&gt;lexicalGlobalObject()-&gt;arrayStructure());
&gt; Index: JavaScriptCore/runtime/JSString.cpp
&gt; ===================================================================
&gt; --- JavaScriptCore/runtime/JSString.cpp	(revision 45079)
&gt; +++ JavaScriptCore/runtime/JSString.cpp	(working copy)
&gt; @@ -112,6 +112,16 @@ bool JSString::getOwnPropertySlot(ExecSt
&gt;      return JSString::getOwnPropertySlot(exec, Identifier::from(exec, propertyName), slot);
&gt;  }
&gt;  
&gt; +size_t JSString::instanceSize() const
&gt; +{
&gt; +    size_t computedSize = sizeof(*this);
&gt; +
&gt; +    computedSize += value().size() * sizeof(UChar) + value().cost();
&gt; +//  FIXME: Add structure size

See comment above.

&gt; +
&gt; +    return computedSize;
&gt; +}
&gt; +
&gt;  JSString* jsString(JSGlobalData* globalData, const UString&amp; s)
&gt;  {
&gt;      int size = s.size();
&gt; Index: JavaScriptCore/runtime/NumberObject.cpp
&gt; ===================================================================
&gt; --- JavaScriptCore/runtime/NumberObject.cpp	(revision 45079)
&gt; +++ JavaScriptCore/runtime/NumberObject.cpp	(working copy)
&gt; @@ -41,6 +41,13 @@ JSValue NumberObject::getJSNumber()
&gt;      return internalValue();
&gt;  }
&gt;  
&gt; +size_t NumberObject::instanceSize() const
&gt; +{
&gt; +//  FIXME: Aside from this, we should probably measure the size of the
&gt; +//  structure/property map of an object - should probably be done higer up

Ditto.

&gt; +    return sizeof(*this);
&gt; +}
&gt; +
&gt;  NumberObject* constructNumber(ExecState* exec, JSValue number)
&gt;  {
&gt;      NumberObject* object = new (exec) NumberObject(exec-&gt;lexicalGlobalObject()-&gt;numberObjectStructure());
&gt; Index: JavaScriptCore/runtime/StringObject.cpp
&gt; ===================================================================
&gt; --- JavaScriptCore/runtime/StringObject.cpp	(revision 45079)
&gt; +++ JavaScriptCore/runtime/StringObject.cpp	(working copy)
&gt; @@ -98,4 +98,18 @@ JSString* StringObject::toThisJSString(E
&gt;      return internalValue();
&gt;  }
&gt;  
&gt; +size_t StringObject::instanceSize() const
&gt; +{
&gt; +    size_t computedSize = sizeof(*this);
&gt; +
&gt; +//  Add size of the contained JSString object

Ditto

&gt; +    CollectorCell* cell = reinterpret_cast&lt;CollectorCell*&gt;(asCell(JSWrapperObject::internalValue()));
&gt; +    if (cell-&gt;u.freeCell.zeroIfFree)
&gt; +        computedSize += internalValue()-&gt;instanceSize();
&gt; +
&gt; +//  FIXME: Add structure size (if this object has a Structure member)

Ditto

&gt; +
&gt; +    return computedSize;
&gt; +}
&gt; +
&gt;  } // namespace JSC
&gt; Index: WebCore/html/HTMLImageElement.cpp
&gt; ===================================================================
&gt; --- WebCore/html/HTMLImageElement.cpp	(revision 45079)
&gt; +++ WebCore/html/HTMLImageElement.cpp	(working copy)
&gt; @@ -40,6 +40,17 @@ namespace WebCore {
&gt;  
&gt;  using namespace HTMLNames;
&gt;  
&gt; +size_t HTMLImageElement::elementSize() const
&gt; +{
&gt; +    size_t computedSize = sizeof(*this);
&gt; +
&gt; +    //should we compute and add the render area size?

You should try to find an answer to this question, but my suspicion is the answer is no.  Geoff or Sam would know better than I.

&gt; +    if(cachedImage() &amp;&amp; cachedImage()-&gt;image()-&gt;data())
&gt; +        computedSize += cachedImage()-&gt;image()-&gt;data()-&gt;size();
&gt; +
&gt; +    return computedSize;
&gt; +}
&gt; +
&gt;  HTMLImageElement::HTMLImageElement(const QualifiedName&amp; tagName, Document* doc, HTMLFormElement* form)
&gt;      : HTMLElement(tagName, doc)
&gt;      , m_imageLoader(this)
&gt; Index: WebCore/inspector/JavaScriptObjectIdentifier.cpp
&gt; ===================================================================
&gt; --- WebCore/inspector/JavaScriptObjectIdentifier.cpp	(revision 0)
&gt; +++ WebCore/inspector/JavaScriptObjectIdentifier.cpp	(revision 0)
&gt; +JSValue toJS(ExecState* exec, ObjectIdentifier* objectInfo)
&gt; +{
&gt; +    if (!objectInfo)
&gt; +        return jsNull();
&gt; +        
&gt; +    JSObject* objectInfoWrapper = objectIdentifierCache().get(objectInfo);
&gt; +    if (objectInfoWrapper)
&gt; +        return objectInfoWrapper;
&gt; +
&gt; +    objectInfo-&gt;ref();
&gt; +
&gt; +    //FIXME: may need to cache the transformed JS objects.

Same comment.

&gt; +    objectInfoWrapper = toJS(JSObjectMake(toRef(exec), ObjectIdentifierClass(), static_cast&lt;void*&gt;(objectInfo)));
&gt; +    objectIdentifierCache().set(objectInfo, objectInfoWrapper);
&gt; +    return objectInfoWrapper;
&gt; +}
&gt; +
&gt; +}
&gt; Index: WebCore/inspector/JavaScriptProfile.cpp
&gt; ===================================================================
&gt; --- WebCore/inspector/JavaScriptProfile.cpp	(revision 45079)
&gt; +++ WebCore/inspector/JavaScriptProfile.cpp	(working copy)
&gt; @@ -131,6 +136,53 @@ static JSValueRef restoreAll(JSContextRe
&gt;      return JSValueMakeUndefined(ctx);
&gt;  }
&gt;  
&gt; +static JSValueRef getLiveObjects(JSContextRef ctx, JSObjectRef thisObject, JSStringRef, JSValueRef* exception)
&gt; +{
&gt; +    Profile* profile = static_cast&lt;Profile*&gt;(JSObjectGetPrivate(thisObject));
&gt; +    if (!profile)
&gt; +        return JSValueMakeUndefined(ctx);
&gt; +
&gt; +    LiveObjects::ObjectVector objects = profile-&gt;liveObjects()-&gt;cachedObjects();
&gt; +
&gt; +    JSObjectRef global = JSContextGetGlobalObject(ctx);
&gt; +
&gt; +

Extra whitespace.  You could actually probably move several of these lines of code together.

&gt; +    JSRetainPtr&lt;JSStringRef&gt; arrayString(Adopt, JSStringCreateWithUTF8CString(&quot;Array&quot;));
&gt; +
&gt; +    JSValueRef arrayProperty = JSObjectGetProperty(ctx, global, arrayString.get(), exception);
&gt; +    if (exception &amp;&amp; *exception)
&gt; +        return JSValueMakeUndefined(ctx);
&gt; +
&gt; +    JSObjectRef arrayConstructor = JSValueToObject(ctx, arrayProperty, exception);
&gt; +    if (exception &amp;&amp; *exception)
&gt; +        return JSValueMakeUndefined(ctx);
&gt; +
&gt; +    JSObjectRef result = JSObjectCallAsConstructor(ctx, arrayConstructor, 0, 0, exception);
&gt; +    if (exception &amp;&amp; *exception)
&gt; +        return JSValueMakeUndefined(ctx);
&gt; +
&gt; +    JSRetainPtr&lt;JSStringRef&gt; pushString(Adopt, JSStringCreateWithUTF8CString(&quot;push&quot;));
&gt; +
&gt; +    JSValueRef pushProperty = JSObjectGetProperty(ctx, result, pushString.get(), exception);
&gt; +    if (exception &amp;&amp; *exception)
&gt; +        return JSValueMakeUndefined(ctx);
&gt; +
&gt; +    JSObjectRef pushFunction = JSValueToObject(ctx, pushProperty, exception);
&gt; +    if (exception &amp;&amp; *exception)
&gt; +        return JSValueMakeUndefined(ctx);
&gt; +
&gt; +    for (size_t i = 0; i &lt; objects.size(); ++i) {
&gt; +        ExecState* exec = toJS(ctx);
&gt; +        JSValueRef obj = toRef(exec, toJS(exec, objects[i].get()));
&gt; +
&gt; +        JSObjectCallAsFunction(ctx, pushFunction, result, 1, &amp;obj, exception);
&gt; +        if (exception &amp;&amp; *exception)
&gt; +            return JSValueMakeUndefined(ctx);
&gt; +    }

I think someone added a function to do this somewhere.  All you have to do is pass in your objects and it will return the array with the objects in the array.
Again ask Sam he may know where this function is.

&gt; +
&gt; +    return result;
&gt; +}
&gt; +
&gt;  static void finalize(JSObjectRef object)
&gt;  {
&gt;      Profile* profile = static_cast&lt;Profile*&gt;(JSObjectGetPrivate(object));
&gt; Index: WebCore/page/Console.cpp
&gt; ===================================================================
&gt; --- WebCore/page/Console.cpp	(revision 45079)
&gt; +++ WebCore/page/Console.cpp	(working copy)
&gt; @@ -313,6 +313,19 @@ void Console::profileEnd(const JSC::UStr
&gt;      }
&gt;  }
&gt;  
&gt; +void Console::setMemoryProfilingEnabled(bool isEnabled)

We should definitely discuss this as a team. Is this the API we want to expose for this feature?
Is this the right name for exposing this functionality?
What if we always profiled objects when profiling at all?
I would like to see some more discussion on this before we make a decision that affect so many developers.


Overall I think you are almost there with this patch.  As you can see I&apos;m very resistant to checking in new features where I think
core functionality is substituted with FIXMEs.  You should try to answer all the open questions you have before landing this.

It&apos;s good that we have some tests now since there is no UI yet, and so these tests are the only way we have to investigate if this
is working correctly, and helps keep other developers from breaking a new feature.

Once this lands you should coordinate with Tim for a way to get some UI for this into the Profile&apos;s panel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129706</commentid>
    <comment_count>16</comment_count>
      <attachid>32237</attachid>
    <who name="Horia Olaru">olaru</who>
    <bug_when>2009-07-03 07:09:40 -0700</bug_when>
    <thetext>Created attachment 32237
adds live object profiling capabilities

(In reply to comment #15)
&gt; (From update of attachment 31800 [review])

&gt; &gt; +    SparseArrayValueMap* map = m_storage-&gt;m_sparseValueMap;
&gt; &gt; +    if (map) {
&gt; &gt; +        computedSize += sizeof(*map) + map-&gt;capacity() * sizeof(SparseArrayValueMap::ValueType);
&gt; &gt; +    }
&gt; 
&gt; We don&apos;t put curly brackets around a single line of code.

Corrected.

&gt; &gt; +
&gt; &gt; +    //  FIXME: Measure size of the JSObject propertyMap
&gt; &gt; +    //  JSArray will store objects with non-numeric identifiers, and some other types
&gt; &gt; +    //  (see the comments at the beginning of JSArray.cpp) in its property map
&gt; &gt; +    //  (eg: arr[&quot;object&quot;]), so it is important to measure this.
&gt; &gt; +    //  This should probably be done in JSObject and a &apos;super&apos; method should be
&gt; &gt; +    //  called.
&gt; 
&gt; Again if this is important we should do this.  And seeing how the only tests we
&gt; don&apos;t have
&gt; are for object size, this is a natural place for bugs to hide.

I&apos;ve added an inheritance based mechanism to measure the cell size and the object property map size, which includes this case as well.
Please see the modified implementation of JSCell::instanceSize and JSObject::instanceSize.

&gt; &gt; --- JavaScriptCore/runtime/JSString.cpp	(revision 45079)
&gt; &gt; +++ JavaScriptCore/runtime/JSString.cpp	(working copy)
&gt; &gt; @@ -112,6 +112,16 @@ bool JSString::getOwnPropertySlot(ExecSt
&gt; &gt;      return JSString::getOwnPropertySlot(exec, Identifier::from(exec, propertyName), slot);
&gt; &gt;  }
&gt; &gt;  
&gt; &gt; +size_t JSString::instanceSize() const
&gt; &gt; +{
&gt; &gt; +    size_t computedSize = sizeof(*this);
&gt; &gt; +
&gt; &gt; +    computedSize += value().size() * sizeof(UChar) + value().cost();
&gt; &gt; +//  FIXME: Add structure size
&gt; 
&gt; See comment above.

Fixed. See above.

&gt; &gt; --- JavaScriptCore/runtime/NumberObject.cpp	(revision 45079)
&gt; &gt; +++ JavaScriptCore/runtime/NumberObject.cpp	(working copy)
&gt; &gt; @@ -41,6 +41,13 @@ JSValue NumberObject::getJSNumber()
&gt; &gt;      return internalValue();
&gt; &gt;  }
&gt; &gt;  
&gt; &gt; +size_t NumberObject::instanceSize() const
&gt; &gt; +{
&gt; &gt; +//  FIXME: Aside from this, we should probably measure the size of the
&gt; &gt; +//  structure/property map of an object - should probably be done higer up
&gt; 
&gt; Ditto.

I&apos;ve decided to rely on JSWrapperObject for the size calculation and removed this implementation. NumberObject adds nothing more to size.

&gt; &gt; --- JavaScriptCore/runtime/StringObject.cpp	(revision 45079)
&gt; &gt; +++ JavaScriptCore/runtime/StringObject.cpp	(working copy)
&gt; &gt; @@ -98,4 +98,18 @@ JSString* StringObject::toThisJSString(E
&gt; &gt;      return internalValue();
&gt; &gt;  }
&gt; &gt;  
&gt; &gt; +size_t StringObject::instanceSize() const
&gt; &gt; +{
&gt; &gt; +    size_t computedSize = sizeof(*this);
&gt; &gt; +
&gt; &gt; +//  Add size of the contained JSString object
&gt; 
&gt; Ditto
&gt; 
&gt; &gt; +    CollectorCell* cell = reinterpret_cast&lt;CollectorCell*&gt;(asCell(JSWrapperObject::internalValue()));
&gt; &gt; +    if (cell-&gt;u.freeCell.zeroIfFree)
&gt; &gt; +        computedSize += internalValue()-&gt;instanceSize();
&gt; &gt; +
&gt; &gt; +//  FIXME: Add structure size (if this object has a Structure member)
&gt; 
&gt; Ditto

Removed. Relying on JSWrapperObject.

&gt; &gt; --- WebCore/html/HTMLImageElement.cpp	(revision 45079)
&gt; &gt; +++ WebCore/html/HTMLImageElement.cpp	(working copy)
&gt; &gt; @@ -40,6 +40,17 @@ namespace WebCore {
&gt; &gt;  
&gt; &gt;  using namespace HTMLNames;
&gt; &gt;  
&gt; &gt; +size_t HTMLImageElement::elementSize() const
&gt; &gt; +{
&gt; &gt; +    size_t computedSize = sizeof(*this);
&gt; &gt; +
&gt; &gt; +    //should we compute and add the render area size?
&gt; 
&gt; You should try to find an answer to this question, but my suspicion is the
&gt; answer is no.  Geoff or Sam would know better than I.

Removed comment. Render area size is not a relevant mesurement.

&gt; &gt; --- WebCore/inspector/JavaScriptObjectIdentifier.cpp	(revision 0)
&gt; &gt; +++ WebCore/inspector/JavaScriptObjectIdentifier.cpp	(revision 0)
&gt; &gt; +JSValue toJS(ExecState* exec, ObjectIdentifier* objectInfo)
&gt; &gt; +{
&gt; &gt; +    if (!objectInfo)
&gt; &gt; +        return jsNull();
&gt; &gt; +        
&gt; &gt; +    JSObject* objectInfoWrapper = objectIdentifierCache().get(objectInfo);
&gt; &gt; +    if (objectInfoWrapper)
&gt; &gt; +        return objectInfoWrapper;
&gt; &gt; +
&gt; &gt; +    objectInfo-&gt;ref();
&gt; &gt; +
&gt; &gt; +    //FIXME: may need to cache the transformed JS objects.
&gt; 
&gt; Same comment.

Was already done, but forgot to remove comment.

&gt; &gt; --- WebCore/inspector/JavaScriptProfile.cpp	(revision 45079)
&gt; &gt; +++ WebCore/inspector/JavaScriptProfile.cpp	(working copy)
&gt; &gt; @@ -131,6 +136,53 @@ static JSValueRef restoreAll(JSContextRe
&gt; &gt;      return JSValueMakeUndefined(ctx);
&gt; &gt;  }
&gt; &gt;  
&gt; &gt; +static JSValueRef getLiveObjects(JSContextRef ctx, JSObjectRef thisObject, JSStringRef, JSValueRef* exception)
&gt; &gt; +{
&gt; &gt; +    Profile* profile = static_cast&lt;Profile*&gt;(JSObjectGetPrivate(thisObject));
&gt; &gt; +    if (!profile)
&gt; &gt; +        return JSValueMakeUndefined(ctx);
&gt; &gt; +
&gt; &gt; +    LiveObjects::ObjectVector objects = profile-&gt;liveObjects()-&gt;cachedObjects();
&gt; &gt; +
&gt; &gt; +    JSObjectRef global = JSContextGetGlobalObject(ctx);
&gt; &gt; +
&gt; &gt; +
&gt; 
&gt; Extra whitespace.  You could actually probably move several of these lines of
&gt; code together.

I&apos;ve changed the implementation of this function, as per the comment below.

&gt; &gt; +    JSRetainPtr&lt;JSStringRef&gt; arrayString(Adopt, JSStringCreateWithUTF8CString(&quot;Array&quot;));
&gt; &gt; +
&gt; &gt; +    JSValueRef arrayProperty = JSObjectGetProperty(ctx, global, arrayString.get(), exception);
&gt; &gt; +    if (exception &amp;&amp; *exception)
&gt; &gt; +        return JSValueMakeUndefined(ctx);
&gt; &gt; +
&gt; &gt; +    JSObjectRef arrayConstructor = JSValueToObject(ctx, arrayProperty, exception);
&gt; &gt; +    if (exception &amp;&amp; *exception)
&gt; &gt; +        return JSValueMakeUndefined(ctx);
&gt; &gt; +
&gt; &gt; +    JSObjectRef result = JSObjectCallAsConstructor(ctx, arrayConstructor, 0, 0, exception);
&gt; &gt; +    if (exception &amp;&amp; *exception)
&gt; &gt; +        return JSValueMakeUndefined(ctx);
&gt; &gt; +
&gt; &gt; +    JSRetainPtr&lt;JSStringRef&gt; pushString(Adopt, JSStringCreateWithUTF8CString(&quot;push&quot;));
&gt; &gt; +
&gt; &gt; +    JSValueRef pushProperty = JSObjectGetProperty(ctx, result, pushString.get(), exception);
&gt; &gt; +    if (exception &amp;&amp; *exception)
&gt; &gt; +        return JSValueMakeUndefined(ctx);
&gt; &gt; +
&gt; &gt; +    JSObjectRef pushFunction = JSValueToObject(ctx, pushProperty, exception);
&gt; &gt; +    if (exception &amp;&amp; *exception)
&gt; &gt; +        return JSValueMakeUndefined(ctx);
&gt; &gt; +
&gt; &gt; +    for (size_t i = 0; i &lt; objects.size(); ++i) {
&gt; &gt; +        ExecState* exec = toJS(ctx);
&gt; &gt; +        JSValueRef obj = toRef(exec, toJS(exec, objects[i].get()));
&gt; &gt; +
&gt; &gt; +        JSObjectCallAsFunction(ctx, pushFunction, result, 1, &amp;obj, exception);
&gt; &gt; +        if (exception &amp;&amp; *exception)
&gt; &gt; +            return JSValueMakeUndefined(ctx);
&gt; &gt; +    }
&gt; 
&gt; I think someone added a function to do this somewhere.  All you have to do is
&gt; pass in your objects and it will return the array with the objects in the
&gt; array.
&gt; Again ask Sam he may know where this function is.

Thanks for pointing that out.
I&apos;ve looked around and I think you&apos;re referring to JSObjectRef::JSObjectMakeArray. It would do the job better, but the data parameter is a JSValueRef array. I would have to iterate over the vector data to create a new array to pass in. This is inefficient as JSObjectMakeArray does this again inside (twice).
In light of the above, I&apos;ve taken the JSObjectMakeArray code and replaced what I did before.

&gt; &gt;  static void finalize(JSObjectRef object)
&gt; &gt;  {
&gt; &gt;      Profile* profile = static_cast&lt;Profile*&gt;(JSObjectGetPrivate(object));
&gt; &gt; Index: WebCore/page/Console.cpp
&gt; &gt; ===================================================================
&gt; &gt; --- WebCore/page/Console.cpp	(revision 45079)
&gt; &gt; +++ WebCore/page/Console.cpp	(working copy)
&gt; &gt; @@ -313,6 +313,19 @@ void Console::profileEnd(const JSC::UStr
&gt; &gt;      }
&gt; &gt;  }
&gt; &gt;  
&gt; &gt; +void Console::setMemoryProfilingEnabled(bool isEnabled)
&gt; 
&gt; We should definitely discuss this as a team. Is this the API we want to expose
&gt; for this feature?
&gt; Is this the right name for exposing this functionality?

I&apos;ve added this API as a temporary solution until the functionality is hooked into the UI. The current console API does not allow enabling and disabling profiling from the console. An API only for enabling memory profiling would be out of place. A function to do this should be added to the layoutTestController object though.

&gt; What if we always profiled objects when profiling at all?

Oliver Hunt points out in a comment above that:

&gt; most frequently people wish to profile execution
&gt; time rather than object overhead, yet this is likely to add significant time
&gt; and memory pressure that will skew those results in that case.

Is there some statistic on this?

This is the reason I&apos;ve made a switch to enable or disable memory profiling. However, the memory profiler at this stage relies on performance profiling for collecting object allocation traces.

&gt; I would like to see some more discussion on this before we make a decision that
&gt; affect so many developers.
&gt; 
&gt; 
&gt; Overall I think you are almost there with this patch.  As you can see I&apos;m very
&gt; resistant to checking in new features where I think
&gt; core functionality is substituted with FIXMEs.  You should try to answer all
&gt; the open questions you have before landing this.
&gt; 
&gt; It&apos;s good that we have some tests now since there is no UI yet, and so these
&gt; tests are the only way we have to investigate if this
&gt; is working correctly, and helps keep other developers from breaking a new
&gt; feature.
&gt; 
&gt; Once this lands you should coordinate with Tim for a way to get some UI for
&gt; this into the Profile&apos;s panel.
&gt; 

Additional changes:
- the m_liveObjects member of Profile dies along with the Profile, so I&apos;ve made it into an OwnPtr. The LiveObject class no longer needs to extend RefCounted.
- removed the typedefs for iterator and const_iterator and the functions mapping the HashMap begin and end to LiveObject begin and end. They weren&apos;t really necessary.
- renamed flushLiveObjects to finalizeCollectedData</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132664</commentid>
    <comment_count>17</comment_count>
      <attachid>32237</attachid>
    <who name="Kevin McCullough">kmccullough</who>
    <bug_when>2009-07-17 12:35:13 -0700</bug_when>
    <thetext>Comment on attachment 32237
adds live object profiling capabilities


&gt; Index: JavaScriptCore/profiler/LiveObjects.cpp
&gt; ===================================================================
&gt; --- JavaScriptCore/profiler/LiveObjects.cpp	(revision 0)
&gt; +++ JavaScriptCore/profiler/LiveObjects.cpp	(revision 0)
&gt; +
&gt; +void LiveObjects::removeNode(const JSCell* cell)
&gt; +{
&gt; +    ASSERT(cell);
&gt; +    if (!m_storeCollectedObjects)
&gt; +        m_stackMap.remove(cell);
&gt; +    else {
&gt; +        RefPtr&lt;ProfileNode&gt; node = m_stackMap.take(cell);
&gt; +        if (node &amp;&amp; !isFree(cell))
&gt; +            m_cachedObjects.append(ObjectIdentifier::create(m_cachedObjects.size(), cell, node));

Why are we appending to m_cachedObjects only if cell was not freed?

&gt; +    }
&gt; +}
&gt; +// This method is meant to be called from the stopProfiling method of ProfileGenerator
&gt; +// After profiling stops, live objects are likely to be collected, so we store the
&gt; +// information we have now.
&gt; +void LiveObjects::finalizeCollectedData()
&gt; +{
&gt; +    toVector(m_cachedObjects);
&gt; +

You can probably put toVector()&apos;s code here since it&apos;s not called from anywhere else

&gt; +    // We no longer need the stack map after this
&gt; +    m_stackMap.clear();
&gt; +}

&gt; Index: JavaScriptCore/profiler/ObjectIdentifier.h
&gt; ===================================================================
&gt; --- JavaScriptCore/profiler/ObjectIdentifier.h	(revision 0)
&gt; +++ JavaScriptCore/profiler/ObjectIdentifier.h	(revision 0)
&gt; +namespace JSC {
&gt; +
&gt; +    class ProfileNode;
&gt; +
&gt; +    class ObjectIdentifier : public RefCounted&lt;ObjectIdentifier&gt; {
&gt; +    public:
&gt; +        unsigned uid() const { return m_uid; }
&gt; +        UString type() const { return m_type; }
&gt; +        unsigned size() const { return m_size; }
&gt; +        ProfileNode* creatingFunction() const { return m_creatingFunction.get(); }
&gt; +
&gt; +        static PassRefPtr&lt;ObjectIdentifier&gt; create(unsigned, const JSCell*, PassRefPtr&lt;ProfileNode&gt;);

This is just my own nit pick but I think our style (although it may not be documented) is to put the create function before the accessors.

&gt; +
&gt; +    private:
&gt; +        unsigned m_uid;
&gt; +        UString m_type;
&gt; +        unsigned m_size;
&gt; +        RefPtr&lt;ProfileNode&gt; m_creatingFunction;
&gt; +
&gt; +        ObjectIdentifier(unsigned, const JSCell*, PassRefPtr&lt;ProfileNode&gt;);

Likewise the constructor before the members.

&gt; +    };
&gt; +
&gt; Index: JavaScriptCore/profiler/Profiler.cpp
&gt; ===================================================================
&gt; --- JavaScriptCore/profiler/Profiler.cpp	(revision 45533)
&gt; +++ JavaScriptCore/profiler/Profiler.cpp	(working copy)
&gt; @@ -86,8 +98,12 @@ PassRefPtr&lt;Profile&gt; Profiler::stopProfil
&gt;              RefPtr&lt;Profile&gt; returnProfile = profileGenerator-&gt;profile();
&gt;  
&gt;              m_currentProfiles.remove(i);
&gt; -            if (!m_currentProfiles.size())
&gt; +            if (!m_currentProfiles.size()) {
&gt; +                if (m_isMemoryProfilingEnabled)
&gt; +                    JSCell::setDoCollectAllocationTraces(false);
&gt; +

The current Profiler can be running multiple Profiles at the same time.  If we start and stop JSCell from collecting allocation traces when a profile is started and stopped then if two profiles are started and one stops the second
profile will no longer get collection or allocation information.  The was we solve this problem currently is that the JS is re-compiled with the debugging hooks only when the profiler is enabled and in dispatchFunctionToProfiles() the
list of profiles is empty so no messages are sent.  This still causes a callIdentifier to be created which is wasteful and we could get some benefit here from doing less work, but the point is that we need to preserve the 
functionality of allowing multiple profiles to run at once.

&gt;                  s_sharedEnabledProfilerReference = 0;
&gt; +            }
&gt;              
&gt;              return returnProfile;
&gt;          }
&gt; Index: JavaScriptCore/runtime/JSArray.cpp
&gt; ===================================================================
&gt; --- JavaScriptCore/runtime/JSArray.cpp	(revision 45533)
&gt; +++ JavaScriptCore/runtime/JSArray.cpp	(working copy)
&gt; @@ -1048,6 +1048,22 @@ void JSArray::checkConsistency(Consisten
&gt;  
&gt;  #endif
&gt;  
&gt; +size_t JSArray::instanceSize() const
&gt; +{
&gt; +    // The Base::instanceSize includes the size of the property storage map,
&gt; +    // which counts for cases when the array stores data as properties
&gt; +    size_t computedSize = Base::instanceSize();
&gt; +
&gt; +    // ArrayStorage - storageSize return value includes the storage vector 
&gt; +    computedSize += storageSize(m_storage-&gt;m_vectorLength);

Please put a space before and after &quot;-&gt;&quot; (e.g. &quot;m_storage -&gt; m_vectorLength&quot;)

&gt; +
&gt; +    //  size of Sparse value map
&gt; +    if (SparseArrayValueMap* map = m_storage-&gt;m_sparseValueMap)
&gt; +        computedSize += sizeof(*map) + map-&gt;capacity() * sizeof(SparseArrayValueMap::ValueType);

Ditto

&gt; +
&gt; +    return computedSize;
&gt; +}
&gt; +
&gt;  JSArray* constructEmptyArray(ExecState* exec)
&gt;  {
&gt;      return new (exec) JSArray(exec-&gt;lexicalGlobalObject()-&gt;arrayStructure());

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 45533)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,61 @@
&gt; +2009-07-03  Horia Olaru  &lt;olaru@adobe.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Bug 10930: WebKit could benefit from a JavaScript live object profiler
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=10930
&gt; +
&gt; +        Added two new headers to forward JavaScriptCore headers.
&gt; +
&gt; +        Modified CodeGeneratorJS.pm to check for the &quot;HasInstanceSize&quot;
&gt; +        attribute and insert an instanceSize method in the generated JSObjects.
&gt; +        This method calls the elementSize method from the DOM object
&gt; +        implementation.
&gt; +
&gt; +        Added an elementSize method to HTMLImageElement and updated the idl
&gt; +        to reflect this for the generator script. This is not a complete
&gt; +        implementation of a size function, but is added to prove functionality.

This concerns me.  What more work needs to be done?

&gt; +
&gt; +        Added the JavaScriptObjectIdentifier to the inspector. This is a class
&gt; +        containing the JS representation of a profiler live object. The new
&gt; +        liveObjects property added to the JavaScriptProfile class is an Array
&gt; +        of such objects.
&gt; +
&gt; +        Added the setMemoryProfilingEnabled(boolean) function to the console
&gt; +        object.
&gt; Index: WebCore/html/HTMLImageElement.cpp
&gt; ===================================================================
&gt; --- WebCore/html/HTMLImageElement.cpp	(revision 45533)
&gt; +++ WebCore/html/HTMLImageElement.cpp	(working copy)
&gt; @@ -40,6 +40,16 @@ namespace WebCore {
&gt;  
&gt;  using namespace HTMLNames;
&gt;  
&gt; +size_t HTMLImageElement::elementSize() const
&gt; +{
&gt; +    size_t computedSize = sizeof(*this);
&gt; +
&gt; +    if(cachedImage() &amp;&amp; cachedImage()-&gt;image()-&gt;data())
&gt; +        computedSize += cachedImage()-&gt;image()-&gt;data()-&gt;size();
&gt; +
&gt; +    return computedSize;
&gt; +}

Is this the only HTMLElement that needs an elementSize()?

&gt; Index: WebCore/page/Console.cpp
&gt; ===================================================================
&gt; --- WebCore/page/Console.cpp	(revision 45533)
&gt; +++ WebCore/page/Console.cpp	(working copy)
&gt; @@ -315,6 +315,19 @@ void Console::profileEnd(const JSC::UStr
&gt;      controller-&gt;addProfile(profile, lastCaller.lineNumber(), lastCaller.sourceURL());
&gt;  }
&gt;  
&gt; +void Console::setMemoryProfilingEnabled(bool isEnabled)
&gt; +{
&gt; +    Page* page = this-&gt;page();
&gt; +    if (!page)
&gt; +        return;
&gt; +
&gt; +    // FIXME: see the FIXME in Console::profile
&gt; +    if (!page-&gt;inspectorController()-&gt;profilerEnabled())
&gt; +        return;
&gt; +
&gt; +    JSC::Profiler::profiler()-&gt;setIsMemoryProfiling(isEnabled);
&gt; +}
&gt; +

I think this patch may be best served by being broken up.  Maybe the JSC part landed first then the WebCore part.  I&apos;m not comfortable exposing a temporary API just to make it work for now with plans to replace it later.  That is a
good way to end up with API to stay persistent much longer than intended.

For the purposes of the test cases I&apos;d say just make memory profiling be enabled whenever normal profiling is, or maybe someone else has a better suggestion.

It looks like this is getting pretty good and almost ready to land.  I think it might work well to break the patch up, and we&apos;ll need to get some UI as soon as possible after this lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169289</commentid>
    <comment_count>18</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-02-29 15:26:26 -0800</bug_when>
    <thetext>Taking this, and using it as the root of the Web Inspector&apos;s Heap Instrumentation feature. I will be relating sub tasks, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188453</commentid>
    <comment_count>19</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-04-28 17:17:55 -0700</bug_when>
    <thetext>I think we can mark this as closed now that we have the ability to take Heap Snapshots using the JavaScript Allocations Timeline in Web Inspector.

Please file enhancement requests or report any issues you find!

From the original webkit-dev thread and comments, it was mentioned that one of the desired features was getting a backtrace / callstack for individual allocations. That feature has not yet been implemented. It is tracked by:
&lt;https://webkit.org/b/156764&gt; Consider gathering backtraces at allocation sites to show in the web inspector</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29915</attachid>
            <date>2009-04-30 11:16:28 -0700</date>
            <delta_ts>2009-06-01 09:49:59 -0700</delta_ts>
            <desc>Adds live object profiling capabilities</desc>
            <filename>memoryProfiling_10930</filename>
            <type>text/plain</type>
            <size>61699</size>
            <attacher name="Horia Olaru">olaru</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQzMDY2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzggQEAKKzIwMDktMDQtMzAgIEhvcmlhIE9s
YXJ1ICA8b2xhcnVAYWRvYmUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEJ1ZyAxMDkzMDogV2ViS2l0IGNvdWxkIGJlbmVmaXQgZnJvbSBhIEph
dmFTY3JpcHQgbGl2ZSBvYmplY3QgcHJvZmlsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTMwCisKKyAgICAgICAgQWRkZWQgaW5zdGFuY2VTaXpl
IG1ldGhvZCBvbiBKU0NlbGwgdG8gYmUgaW5oZXJpdGVkIGJ5IG90aGVyIEpTIG9iamVjdHMuCisg
ICAgICAgIEltcGxlbWVudGVkIGluc3RhbmNlU2l6ZSBmb3IgYSBmZXcgYmFzaWMgdHlwZXMuCisK
KyAgICAgICAgQWRkZWQgdGhlIExpdmVPYmplY3RzIGNsYXNzIHRvIGNvbnRhaW4gYSBtYXBwaW5n
IGJldHdlZW4gSlNDZWxscyBhbmQKKyAgICAgICAgUHJvZmlsZU5vZGVzLCB0byByZWNvcmQgc3Rh
Y2sgdHJhY2VzIGZvciBvYmplY3QgY3JlYXRpb24uIFRoZSBtZXRob2RzCisgICAgICAgIGluIHRo
aXMgY2xhc3MgaGF2ZSBiZWVuIGV4cG9zZWQgdXAgdG8gdGhlIFByb2ZpbGVyIGNsYXNzLiBUaGVz
ZSBtZXRob2RzCisgICAgICAgIGFyZSBjYWxsZWQgYXQgY2VsbCBhbGxvY2F0aW9uIGFuZCBjb2xs
ZWN0aW9uIHRpbWUsIHRvIHJlY29yZCB0aGUgSlMKKyAgICAgICAgZnVuY3Rpb24gdGhhdCBjcmVh
dGVkIHRoZSBvYmplY3QuCisKKyAgICAgICAgQWRkZWQgdGhlIE9iamVjdElkZW50aWZpZXIgc3Ry
dWN0dXJlLCB1c2VkIHRvIHJlcHJlc2VudCBsaXZlIG9iamVjdHMKKyAgICAgICAgYW5kIGFnZ3Jl
Z2F0ZSByZWxldmFudCBkYXRhIGZvciB0aGVtLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
ZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogcHJvZmlsZXIvTGl2ZU9iamVjdHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6TGl2ZU9iamVjdHM6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjpMaXZl
T2JqZWN0cyk6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjp+TGl2ZU9iamVjdHMpOgorICAg
ICAgICAoSlNDOjpMaXZlT2JqZWN0czo6YWRkTm9kZSk6CisgICAgICAgIChKU0M6OkxpdmVPYmpl
Y3RzOjpyZW1vdmVOb2RlKToKKyAgICAgICAgKEpTQzo6TGl2ZU9iamVjdHM6OmlzRnJlZSk6Cisg
ICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjp0b1ZlY3Rvcik6CisgICAgICAgICogcHJvZmlsZXIv
TGl2ZU9iamVjdHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjppc0VtcHR5
KToKKyAgICAgICAgKEpTQzo6TGl2ZU9iamVjdHM6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6TGl2
ZU9iamVjdHM6OmVuZCk6CisgICAgICAgICogcHJvZmlsZXIvT2JqZWN0SWRlbnRpZmllci5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0SWRlbnRpZmllcjo6T2JqZWN0SWRlbnRpZmllcik6
CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGU6
OlByb2ZpbGUpOgorICAgICAgICAoSlNDOjpQcm9maWxlOjpsaXZlT2JqZWN0cyk6CisgICAgICAg
IChKU0M6OlByb2ZpbGU6Om9iamVjdENyZWF0ZWQpOgorICAgICAgICAoSlNDOjpQcm9maWxlOjpv
YmplY3RDb2xsZWN0ZWQpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGUuaDoKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZUdl
bmVyYXRvcjo6b2JqZWN0Q3JlYXRlZCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVHZW5lcmF0b3I6
Om9iamVjdENvbGxlY3RlZCk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5o
OgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmls
ZXI6OnByb2ZpbGVyKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6On5Qcm9maWxlcik6CisgICAg
ICAgIChKU0M6OmRpc3BhdGNoT2JqZWN0VG9Qcm9maWxlcyk6CisgICAgICAgIChKU0M6OlByb2Zp
bGVyOjpvYmplY3RDcmVhdGVkKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6Om9iamVjdENvbGxl
Y3RlZCk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXIuaDoKKyAgICAgICAgKiBydW50aW1l
L0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjppbnN0YW5jZVNpemUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNDZWxsOjpvcGVyYXRvciBuZXcpOgorICAgICAgICAoSlNDOjpKU0Nl
bGw6Om9iamVjdENyZWF0ZWQpOgorICAgICAgICAoSlNDOjpKU0NlbGw6Om9iamVjdENvbGxlY3Rl
ZCk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpp
bnN0YW5jZVNpemUpOgorICAgICAgICAoSlNDOjpKU0NlbGw6On5KU0NlbGwpOgorICAgICAgICAo
SlNDOjpKU0NlbGw6Om9wZXJhdG9yIG5ldyk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpvcGVyYXRvciBuZXcpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6
aW5zdGFuY2VTaXplKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAgICog
cnVudGltZS9OdW1iZXJPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJPYmplY3Q6Omlu
c3RhbmNlU2l6ZSk6CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuaDoKKyAgICAgICAg
KiBydW50aW1lL1N0cmluZ09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6
aW5zdGFuY2VTaXplKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5oOgorCiAyMDA5
LTA0LTMwICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5leHAJKHJldmlzaW9uIDQzMDU2KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDcgQEAgX19aTjNKU0MxMUpTSW1tZWRp
YXRlMTJub25JbmxpbmVOYU5FdgogX19aTjNKU0MxMUpTSW1tZWRpYXRlOHRvT2JqZWN0RU5TXzEw
SlNWYWx1ZVB0ckVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMTFKU0ltbWVkaWF0ZTh0b1N0cmlu
Z0VOU18xMEpTVmFsdWVQdHJFCiBfX1pOM0pTQzExSlNJbW1lZGlhdGU5cHJvdG90eXBlRU5TXzEw
SlNWYWx1ZVB0ckVQTlNfOUV4ZWNTdGF0ZUUKK19fWk5LM0pTQzExTGl2ZU9iamVjdHM4dG9WZWN0
b3JFUk4zV1RGNlZlY3RvcklQTlNfMTZPYmplY3RJZGVudGlmaWVyRUxtMEVFRQogX19aTjNKU0Mx
MWNoZWNrU3ludGF4RVBOU185RXhlY1N0YXRlRVJLTlNfMTBTb3VyY2VDb2RlRQogX19aTjNKU0Mx
MkRhdGVJbnN0YW5jZTRpbmZvRQogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTEwQ2xpZW50RGF0YUQy
RXYKQEAgLTIwMCw2ICsyMDEsOCBAQCBfX1pOM0pTQzZKU0NlbGwzcHV0RVBOU185RXhlY1N0YXRl
RVJLTlNfCiBfX1pOM0pTQzZKU0NlbGwzcHV0RVBOU185RXhlY1N0YXRlRWpOU18xMEpTVmFsdWVQ
dHJFCiBfX1pOM0pTQzZKU0NlbGw5Z2V0T2JqZWN0RXYKIF9fWk4zSlNDNkpTQ2VsbG53RW1QTlNf
OUV4ZWNTdGF0ZUUKK19fWk4zSlNDNkpTQ2VsbDEzb2JqZWN0Q3JlYXRlZEVQTlNfMTJKU0dsb2Jh
bERhdGFFUFMwXworX19aTjNKU0M2SlNDZWxsMTVvYmplY3RDb2xsZWN0ZWRFUFMwXwogX19aTjNK
U0M2SlNMb2NrMTJEcm9wQWxsTG9ja3NDMUVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDNkpTTG9j
azEyRHJvcEFsbExvY2tzQzFFYgogX19aTjNKU0M2SlNMb2NrMTJEcm9wQWxsTG9ja3NEMUV2CkBA
IC0zMjAsNiArMzIzLDcgQEAgX19aTkszSlNDMTBKU1ZhbHVlUHRyOXRvSW50ZWdlckVQTlNfOUV4
ZQogX19aTkszSlNDMTFJbnRlcnByZXRlcjE0cmV0cmlldmVDYWxsZXJFUE5TXzlFeGVjU3RhdGVF
UE5TXzE2SW50ZXJuYWxGdW5jdGlvbkUKIF9fWk5LM0pTQzExSW50ZXJwcmV0ZXIxOHJldHJpZXZl
TGFzdENhbGxlckVQTlNfOUV4ZWNTdGF0ZUVSaVJsUk5TXzdVU3RyaW5nRVJOU18xMEpTVmFsdWVQ
dHJFCiBfX1pOSzNKU0MxMkRhdGVJbnN0YW5jZTdnZXRUaW1lRVJkUmkKK19fWk5LM0pTQzEyU3Ry
aW5nT2JqZWN0MTJpbnN0YW5jZVNpemVFdgogX19aTkszSlNDMTJTdHJpbmdPYmplY3QxMnRvVGhp
c1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzEyU3RyaW5nT2JqZWN0OHRvU3RyaW5n
RVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDMTRKU0dsb2JhbE9iamVjdDE0aXNEeW5hbWljU2Nv
cGVFdgpAQCAtMzMxLDYgKzMzNSw3IEBAIF9fWk5LM0pTQzE3RGVidWdnZXJDYWxsRnJhbWUxMmZ1
bmN0aW9uTmEKIF9fWk5LM0pTQzE3RGVidWdnZXJDYWxsRnJhbWU0dHlwZUV2CiBfX1pOSzNKU0Mx
N0RlYnVnZ2VyQ2FsbEZyYW1lOGV2YWx1YXRlRVJLTlNfN1VTdHJpbmdFUk5TXzEwSlNWYWx1ZVB0
ckUKIF9fWk5LM0pTQzRIZWFwMTBzdGF0aXN0aWNzRXYKK19fWk5LM0pTQzZKU0NlbGwxMmluc3Rh
bmNlU2l6ZUV2CiBfX1pOSzNKU0M2SlNDZWxsMTJ0b1RoaXNPYmplY3RFUE5TXzlFeGVjU3RhdGVF
CiBfX1pOSzNKU0M2SlNDZWxsMTJ0b1RoaXNTdHJpbmdFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNK
U0M2SlNDZWxsMTRpc0dldHRlclNldHRlckV2CkBAIC0zNDEsNiArMzQ2LDcgQEAgX19aTkszSlND
NkpTQ2VsbDlnZXRTdHJpbmdFUk5TXzdVU3RyaW5nRQogX19aTkszSlNDNkpTQ2VsbDlnZXRTdHJp
bmdFdgogX19aTkszSlNDNkpTQ2VsbDlnZXRVSW50MzJFUmoKIF9fWk5LM0pTQzdBcmdMaXN0OGdl
dFNsaWNlRWlSUzBfCitfX1pOSzNKU0M3UHJvZmlsZTExbGl2ZU9iamVjdHNFdgogX19aTkszSlND
N1VTdHJpbmcxMFVURjhTdHJpbmdFYgogX19aTkszSlNDN1VTdHJpbmcxNHRvU3RyaWN0VUludDMy
RVBiCiBfX1pOSzNKU0M3VVN0cmluZzVhc2NpaUV2CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDQzMDU2KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUwLDYgKzM1MCw5IEBACiAJCUJDRkQ4
QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1
bXBUYWJsZS5jcHAgKi87IH07CiAJCUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFi
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4
QzkxMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCAqLzsgfTsKIAkJQzBBMjcyNjMwRTUw
QTA2MzAwRTk2RTE1IC8qIE5vdEZvdW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMEEyNzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDQjExRkZG
NzBGOTQ4Mzk5MDBFNTgzNzkgLyogT2JqZWN0SWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0IxMUZGRjYwRjk0ODM3MTAwRTU4Mzc5IC8q
IE9iamVjdElkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlDQkIxMTcxQjBGNjcyRTg5MDA3NDQ0MjIgLyogTGl2ZU9iamVjdHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0JCMTE0OTMw
RjY3MTEwNDAwNzQ0NDIyIC8qIExpdmVPYmplY3RzLmNwcCAqLzsgfTsKKwkJQ0JCMTE3MUMwRjY3
MkU4OTAwNzQ0NDIyIC8qIExpdmVPYmplY3RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDQkIxMTNFQjBGNjZENEI4MDA3NDQ0MjIgLyogTGl2ZU9iamVj
dHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlF
MTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY1MEU1NTU3NzUwMDMwOTFG
MSAvKiBPcGFxdWVKU1N0cmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUUxMjRBOEY4MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmlu
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI0
QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovOyB9OwogCQlFMTc4
NjM2RDBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTc4NjM2QzBEOUJFRUMzMDBE
NzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgKi87IH07CkBAIC03OTgsNiArODAxLDkg
QEAKIAkJQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKdW1wVGFibGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEp1bXBUYWJsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDMEEyNzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90Rm91bmQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0IxMUZGRjYwRjk0ODM3MTAwRTU4Mzc5IC8qIE9iamVjdElk
ZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gT2JqZWN0SWRlbnRp
Zmllci5oOyBwYXRoID0gcHJvZmlsZXIvT2JqZWN0SWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDQkIxMTNFQjBGNjZENEI4MDA3NDQ0MjIgLyogTGl2ZU9iamVjdHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGl2ZU9iamVjdHMuaDsgcGF0aCA9
IHByb2ZpbGVyL0xpdmVPYmplY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNC
QjExNDkzMEY2NzExMDQwMDc0NDQyMiAvKiBMaXZlT2JqZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMaXZlT2JqZWN0cy5jcHA7IHBhdGggPSBwcm9maWxlci9M
aXZlT2JqZWN0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI4MEFE
NDMxMEMwMEVENzlCNiAvKiBEYXRlTWF0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGF0ZU1hdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
MjEyMDIyOTBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZU1hdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERhdGVNYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxMUQ1MTc1MEIyRTc5OEQwMDU2QzE4OCAvKiBTdHJpbmdFeHRyYXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNDc1LDYgKzE0ODEsOCBAQAogCQkJCTk1RTNCQzA0MEUxQUU2ODIwMEIyRDFD
MSAvKiBDYWxsSWRlbnRpZmllci5oICovLAogCQkJCTk1NzQyRjYzMEREMTFGNUEwMDA5MTdGQiAv
KiBQcm9maWxlLmNwcCAqLywKIAkJCQk5NTc0MkY2NDBERDExRjVBMDAwOTE3RkIgLyogUHJvZmls
ZS5oICovLAorCQkJCUNCQjExNDkzMEY2NzExMDQwMDc0NDQyMiAvKiBMaXZlT2JqZWN0cy5jcHAg
Ki8sCisJCQkJQ0JCMTEzRUIwRjY2RDRCODAwNzQ0NDIyIC8qIExpdmVPYmplY3RzLmggKi8sCiAJ
CQkJOTVDRDQ1NzQwRTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuY3BwICovLAog
CQkJCTk1Q0Q0NTc1MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmggKi8sCiAJ
CQkJOTVBQjgzNTQwREE0M0I0NDAwQkM4M0YzIC8qIFByb2ZpbGVOb2RlLmNwcCAqLywKQEAgLTE0
ODMsNiArMTQ5MSw3IEBACiAJCQkJOTVBQjgzMkYwREE0MkNBRDAwQkM4M0YzIC8qIFByb2ZpbGVy
LmggKi8sCiAJCQkJMUM2MTUxNkIwRUJBQzdBMDAwMzEzNzZGIC8qIFByb2ZpbGVyU2VydmVyLmgg
Ki8sCiAJCQkJMUM2MTUxNkEwRUJBQzdBMDAwMzEzNzZGIC8qIFByb2ZpbGVyU2VydmVyLm1tICov
LAorCQkJCUNCMTFGRkY2MEY5NDgzNzEwMEU1ODM3OSAvKiBPYmplY3RJZGVudGlmaWVyLmggKi8s
CiAJCQkpOwogCQkJbmFtZSA9IHByb2ZpbGVyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTE1NjIsNiArMTU3MSw3IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJ
CWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQlDQkIxMTcx
QzBGNjcyRTg5MDA3NDQ0MjIgLyogTGl2ZU9iamVjdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
QzUyNDJCMEY1MzU1RTkwMEJBM0QwNCAvKiBKSVRTdHVicy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEMzRTUwRTE2RjVDRDAwQjM0NDYwIC8qIEFQSUNhc3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDM0U5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBU0NJSUNUeXBlLmggaW4gSGVhZGVycyAqLywK
QEAgLTE3OTAsNiArMTgwMCw3IEBACiAJCQkJODZFQUM0OUIwRjkzRThEMTAwOEVDOTQ4IC8qIFJl
Z2V4UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVBQzQ5QzBGOTNFOEQxMDA4RUM5NDgg
LyogUmVnZXhQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NkRENzM3OTBGOURBMzEwMDAy
N0ZCQ0MgLyogVk1UYWdzLmggaW4gSGVhZGVycyAqLywKKwkJCQlDQjExRkZGNzBGOTQ4Mzk5MDBF
NTgzNzkgLyogT2JqZWN0SWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMTQ3LDYgKzIx
NTgsNyBAQAogCQkJCTg2RUFDNDk3MEY5M0U4RDEwMDhFQzk0OCAvKiBSZWdleEludGVycHJldGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUFDNDk5MEY5M0U4RDEwMDhFQzk0OCAvKiBSZWdl
eEpJVC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkRCNjQ2NDBGOTVDNkZDMDBEN0Q5MjEgLyog
RXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNC
QjExNzFCMEY2NzJFODkwMDc0NDQyMiAvKiBMaXZlT2JqZWN0cy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL0xpdmVPYmplY3RzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9MaXZlT2JqZWN0cy5jcHAJKHJldmlzaW9uIDAp
CisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9MaXZlT2JqZWN0cy5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9yaWEgT2xhcnUg
PG9sYXJ1QGFkb2JlLmNvbT4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkxpdmVPYmplY3RzLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVk
ZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiUHJvZmlsZU5vZGUuaCIKKyNpbmNsdWRlICJVU3Ry
aW5nLmgiCisjaW5jbHVkZSAiT2JqZWN0SWRlbnRpZmllci5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworUGFzc1JlZlB0cjxMaXZlT2JqZWN0cz4gTGl2ZU9iamVjdHM6OmNyZWF0ZSgpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBMaXZlT2JqZWN0cygpKTsKK30KKworTGl2ZU9iamVjdHM6Okxp
dmVPYmplY3RzKCkKK3sKK30KKworTGl2ZU9iamVjdHM6On5MaXZlT2JqZWN0cygpCit7CisgICAg
Ly9GSVhNRTogU2hvdWxkIGltcGxlbWVudCB0aGlzCisgICAgLy9kbyB3ZSBuZWVkIHRvIG1hbnVh
bGx5IGVtcHR5IHRoZSBIYXNoTWFwPyBGaW5kIG91dC4KK30KKworLy9yZXR1cm5zIHRydWUgaWYg
bmV3IHZhbHVlIHdhcyBhZGRlZCAobm90IGV4aXN0aW5nKQorYm9vbCBMaXZlT2JqZWN0czo6YWRk
Tm9kZShjb25zdCBKU0NlbGwqIGNlbGwsIFBhc3NSZWZQdHI8UHJvZmlsZU5vZGU+IHN0YWNrTm9k
ZSkKK3sKKyAgICBBU1NFUlQoY2VsbCk7CisgICAgLy9GSVhNRTogc2hvdWxkIHRoaXMgaW5jcmVh
c2UvYWRvcHQgdGhlIHJlZmVyZW5jZSB0byB0aGUgc3RhY2tOb2RlPworICAgIC8vaWYgc28sIHRo
ZW4gaXQgc2hvdWxkIGRlcmVmZXJlbmNlIGl0IGluIHRoZSByZW1vdmVOb2RlIG1ldGhvZHMKKyAg
ICByZXR1cm4gKG1fc3RhY2tNYXAuYWRkKGNlbGwsIHN0YWNrTm9kZSkpLnNlY29uZDsKK30KKwor
dm9pZCBMaXZlT2JqZWN0czo6cmVtb3ZlTm9kZShjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAg
QVNTRVJUKGNlbGwpOworICAgIG1fc3RhY2tNYXAucmVtb3ZlKGNlbGwpOworfQorCitib29sIExp
dmVPYmplY3RzOjppc0ZyZWUoY29uc3QgSlNDZWxsKiBjZWxsKSBjb25zdAoreworICAgIGNvbnN0
IENvbGxlY3RvckNlbGwqIGNvbGxlY3RvckNlbGwgPSByZWludGVycHJldF9jYXN0PGNvbnN0IENv
bGxlY3RvckNlbGwqPihjZWxsKTsKKyAgICByZXR1cm4gIShjb2xsZWN0b3JDZWxsLT51LmZyZWVD
ZWxsLnplcm9JZkZyZWUpOworfQorCit2b2lkIExpdmVPYmplY3RzOjp0b1ZlY3RvcihWZWN0b3I8
T2JqZWN0SWRlbnRpZmllciogPiYgdmVjdG9yKSBjb25zdAoreworICAgIEFTU0VSVCh2ZWN0b3Iu
aXNFbXB0eSgpKTsKKyAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ID0gYmVnaW4oKTsgaXQgIT0g
ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKCFpc0ZyZWUoaXQtPmZpcnN0KSkgeworICAgICAg
ICAgICAgY29uc3QgSlNDZWxsKiBjZWxsID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNDZWxsKj4oaXQt
PmZpcnN0KTsKKyAgICAgICAgICAgIGNvbnN0IENsYXNzSW5mbyogaW5mbyA9IGNlbGwtPmNsYXNz
SW5mbygpOworICAgICAgICAgICAgLy9jbGFzc0luZm8gaXMgMCBpbiBzb21lIGNhc2VzIC0gc2Vl
IEpTQnl0ZUFycmF5KFZQdHJTdGVhbGluZ0hhY2tUeXBlKQorICAgICAgICAgICAgaWYgKGluZm8p
IHsKKyAgICAgICAgICAgICAgICBPYmplY3RJZGVudGlmaWVyKiBvYmogPSBuZXcgT2JqZWN0SWRl
bnRpZmllcigodW5zaWduZWQpY2VsbCwgaW5mby0+Y2xhc3NOYW1lLCBjZWxsLT5pbnN0YW5jZVNp
emUoKSwgaXQtPnNlY29uZCk7CisgICAgICAgICAgICAgICAgdmVjdG9yLmFwcGVuZChvYmopOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vRklYTUU6IHRoZXJlIHNob3VsZCBi
ZSBhbiBlbHNlIGJyYW5jaCBoZXJlIHRvIHJlbW92ZSB0aGUKKyAgICAgICAgLy9mcmVlIGNlbGxz
LCB3aGljaCBhcmUgbm90IG5lZWRlZC4gVGhleSBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBt
YXAKKyAgICAgICAgLy9DYW4ndCByZW1vdmUgaXRlbXMgaW4gYSBIYXNoTWFwIHdoaWxlIGl0ZXJh
dGluZyBvdmVyIGl0LiBTaG91bGQKKyAgICAgICAgLy9zdG9yZSB0aGUga2V5cyBpbiBhbiBhcnJh
eSBhbmQgcmVtb3ZlIHRoZW0gYWZ0ZXJ3YXJkcy4KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvTGl2ZU9iamVjdHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9MaXZlT2JqZWN0cy5oCShyZXZpc2lvbiAw
KQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvTGl2ZU9iamVjdHMuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBIb3JpYSBPbGFydSA8
b2xhcnVAYWRvYmUuY29tPi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIExpdmVPYmplY3Rz
X2gKKyNkZWZpbmUgTGl2ZU9iamVjdHNfaAorCisvLyBUaGUgTGl2ZSBvYmplY3RzIGNsYXNzIHBy
b3ZpZGVzIGEgd2F5IHRvIHN0b3JlIHRoZSBsb2NhdGlvbiB3aGVyZQorLy8gSmF2YVNjcmlwdCBv
YmplY3RzIGFyZSBjcmVhdGVkLiBJdCBkZWZpbmVzIGEgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBh
CisvLyBKU0NlbGwsIHdoaWNoIGhvbGRzIGEgamF2YXNjcmlwdCBvYmplY3QsIGFuZCBhIFByb2Zp
bGVOb2RlLCB3aGljaAorLy8gcmVwcmVzZW50cyBhIEphdmFTY3JpcHQgZnVuY3Rpb24uIFN0YXJ0
aW5nIGZyb20gdGhlIFByb2ZpbGVOb2RlLCB0aGUKKy8vIGNhbGwgc3RhY2sgZm9yIHRoZSBjcmVh
dGlvbiBvZiBhbiBvYmplY3QgY2FuIGJlIGV4dHJhY3RlZC4KKy8vCisvLyBUaGUgY29ycmVzcG9u
ZGVuY2UgaXMgc3RvcmVkIGludGVybmFsbHkgYXMgYSBoYXNoIG1hcCBvZiBrZXkgSlNDZWxsKgor
Ly8gYW5kIHZhbHVlIFByb2ZpbGVOb2RlKi4KKy8vCisvLyBhZGROb2RlIC0gdGhlIGZ1bmN0aW9u
IGFkZHMgc3VjaCBhIHBhaXIgdG8gdGhlIGhhc2ggbWFwLiBUaGlzIGZ1bmN0aW9uIGlzCisvLyBt
ZWFudCB0byBiZSBjYWxsZWQgd2hlbiBhbiBvYmplY3QgaXMgY3JlYXRlZC4KKy8vCisvLyByZW1v
dmVOb2RlIC0gdGhlIGZ1bmN0aW9uIHJlbW92ZXMgYSBjZWxsIGZyb20gdGhlIG1hcC4gSXQgaXMg
bWVhbnQgdG8gYmUKKy8vIGNhbGxlZCB3aGVuIGEgamF2YXNjcmlwdCBvYmplY3QgaXMgY29sbGVj
dGVkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4KKy8vCisvLyB0b1ZlY3RvciAtIGEgbWV0aG9k
IHRvIGV4cG9ydCB0aGUgZGF0YSBoZWxkIGJ5IHRoZSBMaXZlT2JqZWN0cyBpbnN0YW5jZQorLy8g
YXQgYW4gb3V0c2lkZSByZXF1ZXN0LgorLy8KKy8vIG1fc3RhY2tNYXAgLSBUaGlzIG1hcCBob2xk
cyBwYWlycyBvZiBKU0NlbGxzIGFuZCB0aGUgZnVuY3Rpb25zIGluIHdoaWNoCisvLyB0aGV5IHdl
cmUgY3JlYXRlZCwgd2hpY2ggYXJlIHJlcHJlc2VudGVkIGJ5IHByb2ZpbGUgbm9kZXMuIEl0IGlz
IGluCisvLyBpbiBmYWN0IGEgbWFwIGJldHdlZW4gYSBKUyBvYmplY3QgYW5kIHRoZSBzdGFjayB0
cmFjZSBvZiB0aGUgZnVuY3Rpb24KKy8vIHRoYXQgY3JlYXRlZCBpdC4KKworI2luY2x1ZGUgIlBy
b2ZpbGVOb2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworICAgIGNsYXNzIEpTQ2VsbDsKKyAgICBjbGFz
cyBPYmplY3RJZGVudGlmaWVyOworCisgICAgY2xhc3MgTGl2ZU9iamVjdHMgOiBwdWJsaWMgUmVm
Q291bnRlZDxMaXZlT2JqZWN0cz4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TGl2ZU9iamVjdHM+IGNyZWF0ZSgpOworICAgICAgICB2aXJ0dWFsIH5MaXZlT2JqZWN0
cygpOworCisgICAgICAgIGJvb2wgYWRkTm9kZShjb25zdCBKU0NlbGwqIGNlbGwsIFBhc3NSZWZQ
dHI8UHJvZmlsZU5vZGU+IHN0YWNrTm9kZSk7CisgICAgICAgIHZvaWQgcmVtb3ZlTm9kZShjb25z
dCBKU0NlbGwqIGNlbGwpOworCisgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhY2tNYXAuaXNFbXB0eSgpOyB9CisKKyAgICAgICAgdm9pZCB0b1ZlY3RvcihWZWN0b3I8
T2JqZWN0SWRlbnRpZmllciogPiYgdmVjdG9yKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIExpdmVPYmplY3RzKCk7CisgICAgCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBK
U0NlbGwqLCBSZWZQdHI8UHJvZmlsZU5vZGU+ID4gTWVtb3J5TWFwOworICAgICAgICB0eXBlZGVm
IE1lbW9yeU1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgTWVtb3J5TWFw
Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4o
KSB7IHJldHVybiBtX3N0YWNrTWFwLmJlZ2luKCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gbV9zdGFja01hcC5lbmQoKTsgfQorICAgICAgICBjb25zdF9pdGVyYXRvciBiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tNYXAuYmVnaW4oKTsgfQorICAgICAgICBjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrTWFwLmVuZCgpOyB9CisgICAgCisg
ICAgICAgIGJvb2wgaXNGcmVlKGNvbnN0IEpTQ2VsbCogY2VsbCkgY29uc3Q7CisKKyAgICAgICAg
TWVtb3J5TWFwIG1fc3RhY2tNYXA7CisgICAgfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gTGl2ZU9iamVjdHNfaApJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
T2JqZWN0SWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L09iamVjdElkZW50aWZpZXIuaAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL09iamVjdElkZW50aWZpZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBIb3JpYSBPbGFydSA8b2xhcnVAYWRvYmUuY29tPi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIE9iamVjdElkZW50aWZpZXJfaAorI2RlZmluZSBPYmpl
Y3RJZGVudGlmaWVyX2gKKworLy8gVGhlIE9iamVjdElkZW50aWZpZXIgc3RydWN0dXJlIHJlcHJl
c2VudHMgYSBzaW5nbGUgSmF2YVNjcmlwdCBvYmplY3QKKy8vIGZyb20gYSBtZW1vcnkgcHJvZmls
aW5nIHBvaW5nIG9mIHZpZXcuIEl0IGlzIG1lYW50IGFzIGEgc2ltcGxlIGludGVyZmFjZQorLy8g
dG8gdHJhbnNtaXQgZGF0YSBhY3Jvc3MgbGF5ZXJzLgorLy8KKy8vIG1faWQgLSBhIHVuaXF1ZSBp
ZGVudGlmaWNhdGlvbiBudW1iZXIgZm9yIHRoZSBvYmplY3QuIFRoaXMgd2lsbCBtb3N0IGxpa2Vs
eQorLy8gYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgYWRkcmVzcyBvZiB0aGUgaG9sZGluZyBKU0Nl
bGwKKy8vCisvLyBtX3R5cGUgLSB0aGUgSmF2YVNjcmlwdCB0eXBlIG9mIHRoZSBvYmplY3QuIFRo
aXMgaXMgdGhlIHR5cGUgYXMgcmV0dXJuZWQgYnkKKy8vIHRoZSBDbGFzc0luZm8gb2JqZWN0IG9m
IHRoZSBKU0NlbGwKKy8vCisvLyBtX3NpemUgLSB0aGUgY29tcHV0ZWQgc2l6ZSBvZiB0aGUgb2Jq
ZWN0LiBUaGlzIHdpbGwgYmUgYXNzaWduZWQgdGhlIHZhbHVlCisvLyByZXR1cm5lZCBieSB0aGUg
aW5zdGFuY2VTaXplKCkgbWV0aG9kIG9uIEpTQ2VsbAorLy8KKy8vIG1fY3JlYXRpbmdGdW5jdGlv
biAtIHRoaXMgb2JqZWN0IHBvaW50cyB0byB0aGUgUHJvZmlsZU5vZGUgd2hpY2ggaG9sZHMKKy8v
IGluZm9ybWF0aW9uIGFib3V0IHRoZSBmdW5jdGlvbiBpbiB3aGljaCB0aGlzIEpTIG9iamVjdCB3
YXMgY3JlYXRlZC4KKy8vIEEgc3RhY2sgdHJhY2UgY2FuIGJlIGV4dHJhY3RlZCBmcm9tIHRoaXMg
b2JqZWN0LgorCisjaW5jbHVkZSA8cnVudGltZS9VU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCisgICAgc3RydWN0IE9iamVjdElkZW50aWZpZXIgeworICAgICAgICB1bnNpZ25lZCBtX2lk
OworICAgICAgICBVU3RyaW5nIG1fdHlwZTsKKyAgICAgICAgdW5zaWduZWQgbV9zaXplOworICAg
ICAgICBSZWZQdHI8UHJvZmlsZU5vZGU+IG1fY3JlYXRpbmdGdW5jdGlvbjsKKworICAgICAgICBP
YmplY3RJZGVudGlmaWVyKCkKKyAgICAgICAgICAgIDogbV9pZCgwKQorICAgICAgICAgICAgLCBt
X3NpemUoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgT2JqZWN0SWRlbnRpZmll
cih1bnNpZ25lZCBpZE51bWJlciwgVVN0cmluZyB0eXBlLCB1bnNpZ25lZCBzaXplLCBSZWZQdHI8
UHJvZmlsZU5vZGU+IGNyZWF0aW5nRnVuY3Rpb24pCisgICAgICAgICAgICA6IG1faWQoaWROdW1i
ZXIpCisgICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAgICAgLCBtX3NpemUoc2l6
ZSkKKyAgICAgICAgICAgICwgbV9jcmVhdGluZ0Z1bmN0aW9uKGNyZWF0aW5nRnVuY3Rpb24pCisg
ICAgICAgIHsKKyAgICAgICAgfQorICAgIH07CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gT2JqZWN0SWRlbnRpZmllcl9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
LmNwcAkocmV2aXNpb24gNDMwNTYpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlByb2ZpbGUu
aCIKIAogI2luY2x1ZGUgIlByb2ZpbGVOb2RlLmgiCisjaW5jbHVkZSAiTGl2ZU9iamVjdHMuaCIK
ICNpbmNsdWRlIDxzdGRpby5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQzLDYgKzQ0LDE3IEBA
IFByb2ZpbGU6OlByb2ZpbGUoY29uc3QgVVN0cmluZyYgdGl0bGUsIHUKICAgICAvLyBGSVhNRTog
V2hlbiBtdWx0aS10aHJlYWRpbmcgaXMgc3VwcG9ydGVkIHRoaXMgd2lsbCBiZSBhIHZlY3RvciBh
bmQgY2FsbHMKICAgICAvLyBpbnRvIHRoZSBwcm9maWxlciB3aWxsIG5lZWQgdG8ga25vdyB3aGlj
aCB0aHJlYWQgaXQgaXMgZXhlY3V0aW5nIG9uLgogICAgIG1faGVhZCA9IFByb2ZpbGVOb2RlOjpj
cmVhdGUoQ2FsbElkZW50aWZpZXIoIlRocmVhZF8xIiwgMCwgMCksIDAsIDApOworICAgIG1fbGl2
ZU9iamVjdHMgPSBMaXZlT2JqZWN0czo6Y3JlYXRlKCk7Cit9CisKK1Byb2ZpbGU6OlByb2ZpbGUo
Y29uc3QgVVN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIHVpZCwgUGFzc1JlZlB0cjxMaXZlT2JqZWN0
cz4gbGl2ZU9iamVjdHMpCisgICAgOiBtX3RpdGxlKHRpdGxlKQorICAgICwgbV91aWQodWlkKQor
ICAgICwgbV9saXZlT2JqZWN0cyhsaXZlT2JqZWN0cykKK3sKKyAgICAvLyBGSVhNRTogV2hlbiBt
dWx0aS10aHJlYWRpbmcgaXMgc3VwcG9ydGVkIHRoaXMgd2lsbCBiZSBhIHZlY3RvciBhbmQgY2Fs
bHMKKyAgICAvLyBpbnRvIHRoZSBwcm9maWxlciB3aWxsIG5lZWQgdG8ga25vdyB3aGljaCB0aHJl
YWQgaXQgaXMgZXhlY3V0aW5nIG9uLgorICAgIG1faGVhZCA9IFByb2ZpbGVOb2RlOjpjcmVhdGUo
Q2FsbElkZW50aWZpZXIoIlRocmVhZF8xIiwgMCwgMCksIDAsIDApOwogfQogCiBQcm9maWxlOjp+
UHJvZmlsZSgpCkBAIC0xMzMsNCArMTQ1LDE5IEBAIHZvaWQgUHJvZmlsZTo6ZGVidWdQcmludERh
dGFTYW1wbGVTdHlsZSgKIH0KICNlbmRpZgogCitQYXNzUmVmUHRyPExpdmVPYmplY3RzPiBQcm9m
aWxlOjpsaXZlT2JqZWN0cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGl2ZU9iamVjdHM7Cit9
CisKK3ZvaWQgUHJvZmlsZTo6b2JqZWN0Q3JlYXRlZChjb25zdCBKU0NlbGwqIGNyZWF0ZWRPYmpl
Y3QsIFBhc3NSZWZQdHI8UHJvZmlsZU5vZGU+IG9yaWdpbmF0aW5nRnVuY3Rpb24gKQoreworICAg
IG1fbGl2ZU9iamVjdHMtPmFkZE5vZGUoY3JlYXRlZE9iamVjdCwgb3JpZ2luYXRpbmdGdW5jdGlv
bik7Cit9CisKK3ZvaWQgUHJvZmlsZTo6b2JqZWN0Q29sbGVjdGVkKGNvbnN0IEpTQ2VsbCogY29s
bGVjdGVkT2JqZWN0KQoreworICAgIG1fbGl2ZU9iamVjdHMtPnJlbW92ZU5vZGUoY29sbGVjdGVk
T2JqZWN0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZS5oCShyZXZpc2lvbiA0MzA1NikKKysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorICAgIGNsYXNzIExpdmVPYmplY3RzOworCiAgICAgY2xhc3MgUHJvZmlsZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPFByb2ZpbGU+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFByb2ZpbGU+IGNyZWF0ZShjb25zdCBVU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgdWlk
KTsKQEAgLTU1LDggKzU3LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGRlYnVn
UHJpbnREYXRhU2FtcGxlU3R5bGUoKSBjb25zdDsKICNlbmRpZgogCisgICAgICAgIFBhc3NSZWZQ
dHI8TGl2ZU9iamVjdHM+IGxpdmVPYmplY3RzKCkgY29uc3Q7CisKKyAgICAgICAgLy9Db2xsZWN0
IG1lbW9yeSBpbmZvCisgICAgICAgIHZvaWQgb2JqZWN0Q3JlYXRlZChjb25zdCBKU0NlbGwqIGNy
ZWF0ZWRPYmplY3QsIFBhc3NSZWZQdHI8UHJvZmlsZU5vZGU+IG9yaWdpbmF0aW5nRnVuY3Rpb24p
OworICAgICAgICB2b2lkIG9iamVjdENvbGxlY3RlZChjb25zdCBKU0NlbGwqIGNvbGxlY3RlT2Jq
ZWN0KTsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgUHJvZmlsZShjb25zdCBVU3RyaW5nJiB0
aXRsZSwgdW5zaWduZWQgdWlkKTsKKyAgICAgICAgUHJvZmlsZShjb25zdCBVU3RyaW5nJiB0aXRs
ZSwgdW5zaWduZWQgdWlkLCBQYXNzUmVmUHRyPExpdmVPYmplY3RzPik7CiAKICAgICBwcml2YXRl
OgogICAgICAgICB2b2lkIHJlbW92ZVByb2ZpbGVTdGFydCgpOwpAQCAtNjUsNiArNzQsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgVVN0cmluZyBtX3RpdGxlOwogICAgICAgICBSZWZQdHI8
UHJvZmlsZU5vZGU+IG1faGVhZDsKICAgICAgICAgdW5zaWduZWQgaW50IG1fdWlkOworCisgICAg
ICAgIFJlZlB0cjxMaXZlT2JqZWN0cz4gbV9saXZlT2JqZWN0czsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiA0MzA1NikKKysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDE2IEBAIHZv
aWQgUHJvZmlsZUdlbmVyYXRvcjo6ZGlkRXhlY3V0ZShjb25zdCAKICAgICBtX2N1cnJlbnROb2Rl
ID0gbV9jdXJyZW50Tm9kZS0+ZGlkRXhlY3V0ZSgpOwogfQogCit2b2lkIFByb2ZpbGVHZW5lcmF0
b3I6Om9iamVjdENyZWF0ZWQoY29uc3QgSlNDZWxsKiBjcmVhdGVkT2JqZWN0KQoreworICAgIG1f
cHJvZmlsZS0+b2JqZWN0Q3JlYXRlZChjcmVhdGVkT2JqZWN0LCBtX2N1cnJlbnROb2RlKTsKK30K
Kwordm9pZCBQcm9maWxlR2VuZXJhdG9yOjpvYmplY3RDb2xsZWN0ZWQoY29uc3QgSlNDZWxsKiBj
b2xsZWN0ZU9iamVjdCkKK3sKKyAgICBtX3Byb2ZpbGUtPm9iamVjdENvbGxlY3RlZChjb2xsZWN0
ZU9iamVjdCk7Cit9CisKIHZvaWQgUHJvZmlsZUdlbmVyYXRvcjo6c3RvcFByb2ZpbGluZygpCiB7
CiAgICAgbV9wcm9maWxlLT5mb3JFYWNoKCZQcm9maWxlTm9kZTo6c3RvcFByb2ZpbGluZyk7Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5oCShyZXZpc2lv
biA0MzA1NikKKysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIENhbGxJZGVudGlmaWVyOwogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKKyAgICBjbGFzcyBKU0Nl
bGw7CiAgICAgY2xhc3MgUHJvZmlsZTsKICAgICBjbGFzcyBQcm9maWxlTm9kZTsKICAgICBjbGFz
cyBVU3RyaW5nOwpAQCAtNTYsNiArNTcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgc3RvcFByb2ZpbGluZygpOwogCiAgICAgICAgIHR5cGVkZWYgdm9pZCAoUHJvZmlsZUdlbmVy
YXRvcjo6KlByb2ZpbGVGdW5jdGlvbikoY29uc3QgQ2FsbElkZW50aWZpZXImIGNhbGxJZGVudGlm
aWVyKTsKKyAgICAgICAgdHlwZWRlZiB2b2lkIChQcm9maWxlR2VuZXJhdG9yOjoqUHJvZmlsZU9i
amVjdEZ1bmN0aW9uKShjb25zdCBKU0NlbGwqIGNlbGwpOworCisgICAgICAgIC8vQ29sbGVjdCBt
ZW1vcnkgaW5mbworICAgICAgICB2b2lkIG9iamVjdENyZWF0ZWQoY29uc3QgSlNDZWxsKiBjcmVh
dGVkT2JqZWN0KTsKKyAgICAgICAgdm9pZCBvYmplY3RDb2xsZWN0ZWQoY29uc3QgSlNDZWxsKiBj
b2xsZWN0ZU9iamVjdCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBQcm9maWxlR2VuZXJhdG9y
KGNvbnN0IFVTdHJpbmcmIHRpdGxlLCBFeGVjU3RhdGUqIG9yaWdpbmF0aW5nRXhlYywgdW5zaWdu
ZWQgdWlkKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5jcHAJKHJldmlzaW9u
IDQzMDU2KQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw2ICs1NCwxMCBAQCBQcm9maWxlciogUHJvZmlsZXI6OnByb2ZpbGVyKCkK
ICAgICBpZiAoIXNfc2hhcmVkUHJvZmlsZXIpCiAgICAgICAgIHNfc2hhcmVkUHJvZmlsZXIgPSBu
ZXcgUHJvZmlsZXIoKTsKICAgICByZXR1cm4gc19zaGFyZWRQcm9maWxlcjsKK30KKworUHJvZmls
ZXI6On5Qcm9maWxlcigpCit7CiB9ICAgCiAKIHZvaWQgUHJvZmlsZXI6OnN0YXJ0UHJvZmlsaW5n
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgdGl0bGUpCkBAIC0xMDMsNiArMTA3LDE0
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm8KICAgICB9CiB9CiAK
K3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNwYXRjaE9iamVjdFRvUHJvZmlsZXMoY29uc3QgVmVjdG9y
PFJlZlB0cjxQcm9maWxlR2VuZXJhdG9yPiA+JiBwcm9maWxlcywgUHJvZmlsZUdlbmVyYXRvcjo6
UHJvZmlsZU9iamVjdEZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBKU0NlbGwqIGNlbGwsIHVuc2ln
bmVkIGN1cnJlbnRQcm9maWxlVGFyZ2V0R3JvdXApCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBwcm9maWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocHJvZmlsZXNbaV0tPnBy
b2ZpbGVHcm91cCgpID09IGN1cnJlbnRQcm9maWxlVGFyZ2V0R3JvdXAgfHwgIXByb2ZpbGVzW2ld
LT5vcmlnaW5hdGluZ0dsb2JhbEV4ZWMoKSkKKyAgICAgICAgICAgIChwcm9maWxlc1tpXS5nZXQo
KS0+KmZ1bmN0aW9uKShjZWxsKTsKKyAgICB9Cit9CisKIHZvaWQgUHJvZmlsZXI6OndpbGxFeGVj
dXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVB0ciBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQo
IW1fY3VycmVudFByb2ZpbGVzLmlzRW1wdHkoKSk7CkBAIC0xMzMsNiArMTQ1LDM0IEBAIHZvaWQg
UHJvZmlsZXI6OmRpZEV4ZWN1dGUoRXhlY1N0YXRlKiBleGUKICAgICBkaXNwYXRjaEZ1bmN0aW9u
VG9Qcm9maWxlcyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6OmRpZEV4ZWN1
dGUsIGNyZWF0ZUNhbGxJZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCksIG5vVmFsdWUoKSwg
c291cmNlVVJMLCBzdGFydGluZ0xpbmVOdW1iZXIpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPnByb2ZpbGVHcm91cCgpKTsKIH0KIAordm9pZCBQcm9maWxlcjo6b2JqZWN0Q3JlYXRlZChF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY3JlYXRlZE9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW1f
Y3VycmVudFByb2ZpbGVzLmlzRW1wdHkoKSk7CisKKyAgICBkaXNwYXRjaE9iamVjdFRvUHJvZmls
ZXMobV9jdXJyZW50UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjpvYmplY3RDcmVhdGVkLCBj
cmVhdGVkT2JqZWN0LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb2ZpbGVHcm91cCgp
KTsKK30KKwordm9pZCBQcm9maWxlcjo6b2JqZWN0Q3JlYXRlZChKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIEpTQ2VsbCogY3JlYXRlZE9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW1fY3VycmVudFBy
b2ZpbGVzLmlzRW1wdHkoKSk7CisKKyAgICBkaXNwYXRjaE9iamVjdFRvUHJvZmlsZXMobV9jdXJy
ZW50UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjpvYmplY3RDcmVhdGVkLCBjcmVhdGVkT2Jq
ZWN0LCBnbG9iYWxEYXRhLT5oZWFkLT5wcm9maWxlR3JvdXAoKSk7Cit9CisKK3ZvaWQgUHJvZmls
ZXI6Om9iamVjdENvbGxlY3RlZChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY29sbGVjdGVkT2Jq
ZWN0KQoreworICAgIEFTU0VSVCghbV9jdXJyZW50UHJvZmlsZXMuaXNFbXB0eSgpKTsKKworICAg
IGRpc3BhdGNoT2JqZWN0VG9Qcm9maWxlcyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5l
cmF0b3I6Om9iamVjdENvbGxlY3RlZCwgY29sbGVjdGVkT2JqZWN0LCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPnByb2ZpbGVHcm91cCgpKTsKK30KKwordm9pZCBQcm9maWxlcjo6b2JqZWN0
Q29sbGVjdGVkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNDZWxsKiBjb2xsZWN0ZWRPYmpl
Y3QpCit7CisgICAgQVNTRVJUKCFtX2N1cnJlbnRQcm9maWxlcy5pc0VtcHR5KCkpOworCisgICAg
ZGlzcGF0Y2hPYmplY3RUb1Byb2ZpbGVzKG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVy
YXRvcjo6b2JqZWN0Q29sbGVjdGVkLCBjb2xsZWN0ZWRPYmplY3QsIGdsb2JhbERhdGEtPmhlYWQt
PnByb2ZpbGVHcm91cCgpKTsKK30KKwogQ2FsbElkZW50aWZpZXIgUHJvZmlsZXI6OmNyZWF0ZUNh
bGxJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNWYWx1ZVB0ciBmdW5jdGlv
biwgY29uc3QgVVN0cmluZyYgZGVmYXVsdFNvdXJjZVVSTCwgaW50IGRlZmF1bHRMaW5lTnVtYmVy
KQogewogICAgIGlmICghZnVuY3Rpb24pCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVy
LmgJKHJldmlzaW9uIDQzMDU2KQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIHJldHVybiAmc19zaGFyZWRFbmFibGVkUHJvZmlsZXJSZWZlcmVuY2U7CiAgICAgICAg
IH0KIAorICAgICAgICB2aXJ0dWFsIH5Qcm9maWxlcigpOworCiAgICAgICAgIHN0YXRpYyBQcm9m
aWxlciogcHJvZmlsZXIoKTsgCiAgICAgICAgIHN0YXRpYyBDYWxsSWRlbnRpZmllciBjcmVhdGVD
YWxsSWRlbnRpZmllcihKU0dsb2JhbERhdGEqLCBKU1ZhbHVlUHRyLCBjb25zdCBVU3RyaW5nJiBz
b3VyY2VVUkwsIGludCBsaW5lTnVtYmVyKTsKIApAQCAtNjIsNiArNjQsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZGlkRXhlY3V0ZShFeGVjU3RhdGUqLCBKU1ZhbHVlUHRyIGZ1
bmN0aW9uKTsKICAgICAgICAgdm9pZCBkaWRFeGVjdXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJp
bmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcik7CiAKKyAgICAgICAgdmlydHVh
bCB2b2lkIG9iamVjdENyZWF0ZWQoRXhlY1N0YXRlKiwgSlNDZWxsKiBjcmVhdGVkT2JqZWN0KTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIG9iamVjdENyZWF0ZWQoSlNHbG9iYWxEYXRhKiwgSlNDZWxs
KiBjcmVhdGVkT2JqZWN0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG9iamVjdENvbGxlY3RlZChF
eGVjU3RhdGUqLCBKU0NlbGwqIGNvbGxlY3RlT2JqZWN0KTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IG9iamVjdENvbGxlY3RlZChKU0dsb2JhbERhdGEqLCBKU0NlbGwqIGNvbGxlY3RlT2JqZWN0KTsK
KwogICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFByb2ZpbGVHZW5lcmF0b3I+ID4mIGN1cnJl
bnRQcm9maWxlcygpIHsgcmV0dXJuIG1fY3VycmVudFByb2ZpbGVzOyB9OwogCiAgICAgcHJpdmF0
ZToKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gNDMwNTYpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDQ4LDYgKzEwNDgsNTQgQEAgdm9pZCBKU0FycmF5OjpjaGVja0NvbnNpc3RlbmN5KENvbnNpc3Rl
bgogCiAjZW5kaWYKIAorc2l6ZV90IEpTQXJyYXk6Omluc3RhbmNlU2l6ZSgpIGNvbnN0Cit7Cisg
ICAgc2l6ZV90IGNvbXB1dGVkU2l6ZSA9IDA7CisKKyAgICAvLyBKUyBjbGFzcyBvdmVyaGVhZAor
ICAgIGNvbXB1dGVkU2l6ZSArPSBzaXplb2YoKnRoaXMpOworCisgICAgLy8gQXJyYXlTdG9yYWdl
IG92ZXJoZWFkIC0gdGhpcyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHNpemUgb2YgdGhlCisgICAg
Ly8gc3RvcmFnZSB2ZWN0b3IKKyAgICBjb21wdXRlZFNpemUgKz0gc3RvcmFnZVNpemUobV9zdG9y
YWdlLT5tX3ZlY3Rvckxlbmd0aCk7CisKKyAgICAvLyAgc2l6ZW9mIHRoZSB2ZWN0b3IgdmFsdWVz
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RvcmFnZS0+bV92ZWN0b3JMZW5ndGg7
IGkrKykgeworICAgICAgICAvLyBpZiB0aGUgdmFsdWUgPT0gbm9WYWx1ZSgpIGl0IG1lYW5zIHRo
ZSB2ZWN0b3Igc2xvdCBpcyBlbXB0eSwgc28gc3RlcCBvdmVyIGl0CisgICAgICAgIC8vIGlmIHZh
bHVlIGlzIGEgcG9pbnRlciB0byBhIGNlbGwsIHRoZSBjZWxsIGhhcyBpdHMgb3duIHNpemUgdG8g
YWNjb3VudCBmb3IKKyAgICAgICAgLy8gb3RoZXJ3aXNlLCB0aGUgdmFsdWUgaXMgYW4gJ2ltbWVk
aWF0ZScsIGEgdHlwZS10YWdlZCB2YWx1ZSBtYXNxdWVyYWRpbmcgYXMgYSBwb2ludGVyCisgICAg
ICAgIC8vIChzZWUgSlNJbW1lZGlhdGUuaCkgaXQgaXMgd2hvbGx5IGNvbnRhaW5lZCBpbiB0aGUg
SlNWYWx1ZVB0ciBoZWxkIGluIHRoZSB2ZWN0b3IKKyAgICAgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9
IG1fc3RvcmFnZS0+bV92ZWN0b3JbaV07CisgICAgICAgIGlmICggdmFsdWUgIT0gbm9WYWx1ZSgp
ICYmIHZhbHVlLmlzQ2VsbCgpICkKKyAgICAgICAgICAgIGNvbXB1dGVkU2l6ZSArPSB2YWx1ZS5h
c0NlbGwoKS0+aW5zdGFuY2VTaXplKCk7CisgICAgfQorCisgICAgLy8gIHNpemUgb2YgU3BhcnNl
IHZhbHVlIG1hcAorICAgIC8vICBGSVhNRTogQSBnZW5lcmljIGNsYXNzL21ldGhvZCBjb3VsZCBw
cm9iYWJseSBiZSBpbXBsZW1lbnRlZAorICAgIC8vICB0byBtZWFzdXJlIHRoZSBzaXplIG9mIGFu
eSBIYXNoTWFwIGNvbnRhaW5pbmcgSlNPYmplY3RzCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gbV9zdG9yYWdlLT5tX3NwYXJzZVZhbHVlTWFwOworICAgIGlmIChtYXApIHsKKyAgICAg
ICAgY29tcHV0ZWRTaXplICs9IHNpemVvZigqbWFwKTsKKyAgICAgICAgZm9yIChTcGFyc2VBcnJh
eVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gbWFwLT5lbmQoKTsg
KytpdCkgeworICAgICAgICAgICAgY29tcHV0ZWRTaXplICs9IHNpemVvZihpdC0+Zmlyc3QpOwor
ICAgICAgICAgICAgSlNWYWx1ZVB0ciB2YWx1ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBp
ZiAoIHZhbHVlICE9IG5vVmFsdWUoKSAmJiB2YWx1ZS5pc0NlbGwoKSApCisgICAgICAgICAgICAg
ICAgY29tcHV0ZWRTaXplICs9IHZhbHVlLmFzQ2VsbCgpLT5pbnN0YW5jZVNpemUoKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21wdXRlZFNpemUgKz0gc2l6ZW9mKHZhbHVl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vICBGSVhNRTogTWVhc3VyZSBzaXplIG9mIHRo
ZSBKU09iamVjdCBwcm9wZXJ0eU1hcCAoc2VlIHRoZSBhYm92ZSBGSVhNRSBhcyB3ZWxsKQorICAg
IC8vICBKU0FycmF5IHdpbGwgc3RvcmUgb2JqZWN0cyB3aXRoIG5vbi1udW1lcmljIGlkZW50aWZp
ZXJzLCBhbmQgc29tZSBvdGhlciB0eXBlcworICAgIC8vICAoc2VlIHRoZSBjb21tZW50cyBhdCB0
aGUgYmVnaW5uaW5nIG9mIEpTQXJyYXkuY3BwKSBpbiBpdHMgcHJvcGVydHkgbWFwCisgICAgLy8g
IChlZzogYXJyWyJvYmplY3QiXSksIHNvIGl0IGlzIGltcG9ydGFudCB0byBtZWFzdXJlIHRoaXMu
CisgICAgLy8gIFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGRvbmUgaW4gSlNPYmplY3QgYW5kIGEg
J3N1cGVyJyBtZXRob2Qgc2hvdWxkIGJlCisgICAgLy8gIGNhbGxlZC4KKworICAgIHJldHVybiBj
b21wdXRlZFNpemU7Cit9CisKIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5oCShyZXZpc2lvbiA0MzA1NikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSkpOwogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCBzaXplX3QgaW5zdGFuY2VT
aXplKCkgY29uc3Q7CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUHRyLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiA0MzA1NikKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiUHJvZmlsZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc5LDEwICs4MCwxNSBAQCBleHRlcm4gY29uc3QgZG91
YmxlIEluZiA9IE5hTkluZi5kb3VibGVzCiB2b2lkKiBKU0NlbGw6Om9wZXJhdG9yIG5ldyhzaXpl
X3Qgc2l6ZSwgRXhlY1N0YXRlKiBleGVjKQogewogI2lmZGVmIEpBVkFTQ1JJUFRDT1JFX0JVSUxE
SU5HX0FMTF9JTl9PTkVfRklMRQotICAgIHJldHVybiBleGVjLT5oZWFwKCktPmlubGluZUFsbG9j
YXRlKHNpemUpOworICAgIHZvaWQqIGNlbGwgPSBleGVjLT5oZWFwKCktPmlubGluZUFsbG9jYXRl
KHNpemUpOwogI2Vsc2UKLSAgICByZXR1cm4gZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplKTsK
KyAgICB2b2lkKiBjZWxsID0gZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplKTsKICNlbmRpZgor
CisgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9ICpQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVy
UmVmZXJlbmNlKCkpCisgICAgICAgIHByb2ZpbGVyLT5vYmplY3RDcmVhdGVkKGV4ZWMsIHN0YXRp
Y19jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKKworICAgIHJldHVybiBjZWxsOwogfQogCiBib29sIEpT
Q2VsbDo6Z2V0VUludDMyKHVpbnQzMl90JikgY29uc3QKQEAgLTIwNyw0ICsyMTMsMTkgQEAgYm9v
bCBKU0NlbGw6OmlzR2V0dGVyU2V0dGVyKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
K3ZvaWQgSlNDZWxsOjpvYmplY3RDcmVhdGVkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlND
ZWxsKiBjcmVhdGVkT2JqZWN0KQoreworICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSAqUHJv
ZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpKQorICAgICAgICBwcm9maWxlci0+b2Jq
ZWN0Q3JlYXRlZChnbG9iYWxEYXRhLCBjcmVhdGVkT2JqZWN0KTsKK30KKwordm9pZCBKU0NlbGw6
Om9iamVjdENvbGxlY3RlZChKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKFByb2ZpbGVyKiBwcm9m
aWxlciA9ICpQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCkpIHsKKyAgICAgICAg
SlNWYWx1ZVB0ciB2YWx1ZSA9IEpTVmFsdWVQdHIoY2VsbCk7CisgICAgICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9IEhlYXA6OmhlYXAodmFsdWUpLT5nbG9iYWxEYXRhKCk7CisgICAgICAg
IHByb2ZpbGVyLT5vYmplY3RDb2xsZWN0ZWQoZ2xvYmFsRGF0YSwgY2VsbCk7CisgICAgfQorfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNp
b24gNDMwNTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw2ICs0NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZXhwbGljaXQg
SlNDZWxsKFN0cnVjdHVyZSopOwogICAgICAgICB2aXJ0dWFsIH5KU0NlbGwoKTsKIAorICAgICAg
ICAvL1RoZXNlIG1ldGhvZHMgYXJlIHRvIGF2b2lkIGluY2x1ZGluZyBQcm9maWxlci5oIGluIHRo
ZSBoZWFkZXIgZmlsZQorICAgICAgICBzdGF0aWMgdm9pZCBvYmplY3RDcmVhdGVkKEpTR2xvYmFs
RGF0YSosIEpTQ2VsbCopOworICAgICAgICB2aXJ0dWFsIHZvaWQgb2JqZWN0Q29sbGVjdGVkKEpT
Q2VsbCopOworCiAgICAgcHVibGljOgogICAgICAgICAvLyBRdWVyeWluZyB0aGUgdHlwZS4KICAg
ICAgICAgYm9vbCBpc051bWJlcigpIGNvbnN0OwpAQCAtOTksNiArMTAzLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZVB0ciBnZXRKU051bWJlcigpOwogICAgICAg
ICB2b2lkKiB2cHRyKCkgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPih0aGlzKTsg
fQogCisgICAgICAgIHZpcnR1YWwgc2l6ZV90IGluc3RhbmNlU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IDA7IH07CisKICAgICBwcml2YXRlOgogICAgICAgICAvLyBCYXNlIGltcGxlbWVudGF0aW9uOyBm
b3Igbm9uLW9iamVjdCBjbGFzc2VzIGltcGxlbWVudHMgZ2V0UHJvcGVydHlTbG90LgogICAgICAg
ICBib29sIGZhc3RHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAgLTEyMiw2ICsxMjgsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBKU0NlbGw6On5KU0NlbGwoKQogICAgIHsKKyAgICAg
ICAgb2JqZWN0Q29sbGVjdGVkKHRoaXMpOwogICAgIH0KIAogICAgIGlubGluZSBib29sIEpTQ2Vs
bDo6aXNOdW1iZXIoKSBjb25zdApAQCAtMTYzLDEwICsxNzAsMTMgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgaW5saW5lIHZvaWQqIEpTQ2VsbDo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgewogI2lmZGVmIEpBVkFTQ1JJUFRDT1JFX0JVSUxE
SU5HX0FMTF9JTl9PTkVfRklMRQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aGVhcC5pbmxp
bmVBbGxvY2F0ZShzaXplKTsKKyAgICAgICAgdm9pZCogY2VsbCA9IGdsb2JhbERhdGEtPmhlYXAu
aW5saW5lQWxsb2NhdGUoc2l6ZSk7CiAjZWxzZQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+
aGVhcC5hbGxvY2F0ZShzaXplKTsKKyAgICAgICAgdm9pZCogY2VsbCA9IGdsb2JhbERhdGEtPmhl
YXAuYWxsb2NhdGUoc2l6ZSk7CiAjZW5kaWYKKyAgICAgICAgSlNDZWxsOjpvYmplY3RDcmVhdGVk
KGdsb2JhbERhdGEsIHN0YXRpY19jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKKworICAgICAgICByZXR1
cm4gY2VsbDsKICAgICB9CiAKICAgICAvLyAtLS0gSlNWYWx1ZSBpbmxpbmVzIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCShyZXZpc2lvbiA0MzA1NikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsMTEgKzQ0NSwxNiBAQCB2b2lk
IEpTR2xvYmFsT2JqZWN0Ojpjb3B5R2xvYmFsc1RvKFJlZ2lzCiAKIHZvaWQqIEpTR2xvYmFsT2Jq
ZWN0OjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkK
IHsKKyAgICB2b2lkKiBjZWxsOwogI2lmZGVmIEpBVkFTQ1JJUFRDT1JFX0JVSUxESU5HX0FMTF9J
Tl9PTkVfRklMRQotICAgIHJldHVybiBnbG9iYWxEYXRhLT5oZWFwLmlubGluZUFsbG9jYXRlKHNp
emUpOworICAgIGNlbGwgPSBnbG9iYWxEYXRhLT5oZWFwLmlubGluZUFsbG9jYXRlKHNpemUpOwog
I2Vsc2UKLSAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0ZShzaXplKTsKKyAgICBj
ZWxsID0gZ2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0ZShzaXplKTsKICNlbmRpZgorICAgIGlmIChQ
cm9maWxlciogcHJvZmlsZXIgPSAqUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgp
KQorICAgICAgICBwcm9maWxlci0+b2JqZWN0Q3JlYXRlZChnbG9iYWxEYXRhLCBzdGF0aWNfY2Fz
dDxKU0NlbGwqPihjZWxsKSk7CisKKyAgICByZXR1cm4gY2VsbDsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gNDMw
NTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA4LDYgKzEwOCwxNiBAQCBib29sIEpTU3RyaW5nOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0CiAgICAgcmV0dXJuIEpTU3RyaW5nOjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgSWRl
bnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKIH0KIAorc2l6ZV90IEpT
U3RyaW5nOjppbnN0YW5jZVNpemUoKSBjb25zdAoreworICAgIHNpemVfdCBjb21wdXRlZFNpemUg
PSBzaXplb2YoKnRoaXMpOworCisgICAgY29tcHV0ZWRTaXplICs9IHZhbHVlKCkuc2l6ZSgpICog
c2l6ZW9mKFVDaGFyKSArIHZhbHVlKCkuY29zdCgpOworLy8gIEZJWE1FOiBBZGQgc3RydWN0dXJl
IHNpemUKKworICAgIHJldHVybiBjb21wdXRlZFNpemU7Cit9CisKIEpTU3RyaW5nKiBqc1N0cmlu
ZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHMpCiB7CiAgICAgaW50
IHNpemUgPSBzLnNpemUoKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlz
aW9uIDQzMDU2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC05Miw2ICs5Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWVQdHIgcHJvdG8p
IHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhTdHJpbmdUeXBlLCBO
ZWVkc1RoaXNDb252ZXJzaW9uKSk7IH0KIAorICAgICAgICB2aXJ0dWFsIHNpemVfdCBpbnN0YW5j
ZVNpemUoKSBjb25zdDsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGVudW0gVlB0clN0ZWFsaW5n
SGFja1R5cGUgeyBWUHRyU3RlYWxpbmdIYWNrIH07CiAgICAgICAgIEpTU3RyaW5nKFZQdHJTdGVh
bGluZ0hhY2tUeXBlKSAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5j
cHAJKHJldmlzaW9uIDQzMDU2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSwxMyBAQCBKU1ZhbHVlUHRyIE51bWJl
ck9iamVjdDo6Z2V0SlNOdW1iZXIoKQogICAgIHJldHVybiBpbnRlcm5hbFZhbHVlKCk7CiB9CiAK
K3NpemVfdCBOdW1iZXJPYmplY3Q6Omluc3RhbmNlU2l6ZSgpIGNvbnN0Cit7CisvLyAgRklYTUU6
IEFzaWRlIGZyb20gdGhpcywgd2Ugc2hvdWxkIHByb2JhYmx5IG1lYXN1cmUgdGhlIHNpemUgb2Yg
dGhlCisvLyAgc3RydWN0dXJlL3Byb3BlcnR5IG1hcCBvZiBhbiBvYmplY3QgLSBzaG91bGQgcHJv
YmFibHkgYmUgZG9uZSBoaWdlciB1cAorICAgIHJldHVybiBzaXplb2YoKnRoaXMpOworfQorCiBO
dW1iZXJPYmplY3QqIGNvbnN0cnVjdE51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIg
bnVtYmVyKQogewogICAgIE51bWJlck9iamVjdCogb2JqZWN0ID0gbmV3IChleGVjKSBOdW1iZXJP
YmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUo
KSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgJKHJldmlzaW9uIDQz
MDU2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIGluZm87CiAKKyAgICAgICAgdmlydHVhbCBzaXplX3QgaW5zdGFuY2VT
aXplKCkgY29uc3Q7CisKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNz
SW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KIApJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkocmV2aXNpb24gNDMwNTYpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4
LDQgKzk4LDE2IEBAIEpTU3RyaW5nKiBTdHJpbmdPYmplY3Q6OnRvVGhpc0pTU3RyaW5nKEUKICAg
ICByZXR1cm4gaW50ZXJuYWxWYWx1ZSgpOwogfQogCitzaXplX3QgU3RyaW5nT2JqZWN0OjppbnN0
YW5jZVNpemUoKSBjb25zdAoreworICAgIHNpemVfdCBjb21wdXRlZFNpemUgPSBzaXplb2YoKnRo
aXMpOworCisvLyAgQWRkIHNpemUgb2YgdGhlIGNvbnRhaW5lZCBKU1N0cmluZyBvYmplY3QKKyAg
ICBjb21wdXRlZFNpemUgKz0gaW50ZXJuYWxWYWx1ZSgpLT5pbnN0YW5jZVNpemUoKTsKKworLy8g
IEZJWE1FOiBBZGQgc3RydWN0dXJlIHNpemUgKGlmIHRoaXMgb2JqZWN0IGhhcyBhIFN0cnVjdHVy
ZSBtZW1iZXIpCisKKyAgICByZXR1cm4gY29tcHV0ZWRTaXplOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkocmV2aXNpb24g
NDMwNTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkpOwog
ICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCBzaXplX3QgaW5zdGFuY2VTaXplKCkgY29uc3Q7
CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBTdHJpbmdPYmplY3QoUGFzc1JlZlB0cjxTdHJ1Y3R1
cmU+LCBKU1N0cmluZyopOwogCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNDMwNjYpCisrKyBXZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDA5LTA0LTMwICBIb3JpYSBPbGFy
dSAgPG9sYXJ1QGFkb2JlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBXQVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVEIE9SIENIQU5HRUQKKwor
ICAgICAgICBCdWcgMTA5MzA6IFdlYktpdCBjb3VsZCBiZW5lZml0IGZyb20gYSBKYXZhU2NyaXB0
IGxpdmUgb2JqZWN0IHByb2ZpbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDkzMAorCisgICAgICAgIEFkZGVkIHR3byBuZXcgaGVhZGVycyB0byBm
b3J3YXJkIEphdmFTY3JpcHRDb3JlIGhlYWRlcnMuCisKKyAgICAgICAgTW9kaWZpZWQgQ29kZUdl
bmVyYXRvckpTLnBtIHRvIGNoZWNrIGZvciB0aGUgIkhhc0luc3RhbmNlU2l6ZSIKKyAgICAgICAg
YXR0cmlidXRlIGFuZCBpbnNlcnQgYW4gaW5zdGFuY2VTaXplIG1ldGhvZCBpbiB0aGUgZ2VuZXJh
dGVkIEpTT2JqZWN0cy4KKyAgICAgICAgVGhpcyBtZXRob2QgY2FsbHMgdGhlIGVsZW1lbnRTaXpl
IG1ldGhvZCBmcm9tIHRoZSBET00gb2JqZWN0CisgICAgICAgIGltcGxlbWVudGF0aW9uLgorCisg
ICAgICAgIEFkZGVkIGFuIGVsZW1lbnRTaXplIG1ldGhvZCB0byBIVE1MSW1hZ2VFbGVtZW50IGFu
ZCB1cGRhdGVkIHRoZSBpZGwKKyAgICAgICAgdG8gcmVmbGVjdCB0aGlzIGZvciB0aGUgZ2VuZXJh
dG9yIHNjcmlwdC4gVGhpcyBpcyBub3QgYSBjb21wbGV0ZQorICAgICAgICBpbXBsZW1lbnRhdGlv
biBvZiBhIHNpemUgZnVuY3Rpb24sIGJ1dCBpcyBhZGRlZCB0byBwcm92ZSBmdW5jdGlvbmFsaXR5
LgorCisgICAgICAgIEFkZGVkIHRoZSBKYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllciB0byB0aGUg
aW5zcGVjdG9yLiBUaGlzIGlzIGEgY2xhc3MKKyAgICAgICAgY29udGFpbmluZyB0aGUgSlMgcmVw
cmVzZW50YXRpb24gb2YgYSBwcm9maWxlciBsaXZlIG9iamVjdC4gVGhlIG5ldworICAgICAgICBv
YmplY3REYXRhIG1ldGhvZCBhZGRlZCB0byB0aGUgSmF2YVNjcmlwdFByb2ZpbGUgY2xhc3MgcmV0
dXJucyBhbiBBcnJheQorICAgICAgICBvZiBzdWNoIG9iamVjdHMuCisKKyAgICAgICAgKiBGb3J3
YXJkaW5nSGVhZGVycy9wcm9maWxlci9MaXZlT2JqZWN0cy5oOiBBZGRlZC4KKyAgICAgICAgKiBG
b3J3YXJkaW5nSGVhZGVycy9wcm9maWxlci9PYmplY3RJZGVudGlmaWVyLmg6IEFkZGVkLgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBodG1sL0hUTUxJbWFn
ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6ZWxlbWVu
dFNpemUpOgorICAgICAgICAqIGh0bWwvSFRNTEltYWdlRWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvSFRNTEltYWdlRWxlbWVudC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0phdmFTY3JpcHRP
YmplY3RJZGVudGlmaWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpnZXRJZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRUeXBlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldENyZWF0ZWRGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6
Ok9iamVjdElkZW50aWZpZXJDbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuaDogQWRkZWQuCisgICAg
ICAgICogaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om9iamVjdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UHJvZmlsZUNsYXNzKToKKwogMjAwOS0w
NC0zMCAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
cHJvZmlsZXIvTGl2ZU9iamVjdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL3Byb2ZpbGVyL0xpdmVPYmplY3RzLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL3Byb2ZpbGVyL0xpdmVPYmplY3RzLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9MaXZlT2JqZWN0c19oCisjZGVmaW5lIFdl
YkNvcmVfRldEX0xpdmVPYmplY3RzX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9MaXZlT2Jq
ZWN0cy5oPgorI2VuZGlmCkluZGV4OiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3Byb2ZpbGVy
L09iamVjdElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3Byb2ZpbGVyL09iamVjdElkZW50aWZpZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMvcHJvZmlsZXIvT2JqZWN0SWRlbnRpZmllci5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfT2JqZWN0SWRlbnRpZmllcl9o
CisjZGVmaW5lIFdlYkNvcmVfRldEX09iamVjdElkZW50aWZpZXJfaAorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL09iamVjdElkZW50aWZpZXIuaD4KKyNlbmRpZgpJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQzMDU2KQorKysgV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQy
ODgsNiArNDI4OCw4IEBACiAJCUMxMDVEQTY0MEYzQUE2QjgwMDFERDQ0RiAvKiBUZXh0RW5jb2Rp
bmdEZXRlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzEwNURBNjMwRjNBQTZCODAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggKi87
IH07CiAJCUM2RDc0QUQ1MDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2
ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM2RDc0
QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLzsgfTsK
IAkJQzZENzRBRTQwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFF
MzA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLzsgfTsK
KwkJQ0IxMTAwNEUwRjk0OEE3NzAwRTU4Mzc5IC8qIEphdmFTY3JpcHRPYmplY3RJZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDQjExMDA0
RDBGOTQ4QTc3MDBFNTgzNzkgLyogSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuaCAqLzsgfTsK
KwkJQ0IxMTAwNTIwRjk0OEFGNjAwRTU4Mzc5IC8qIEphdmFTY3JpcHRPYmplY3RJZGVudGlmaWVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENCMTEw
MDUxMEY5NDhBRjYwMEU1ODM3OSAvKiBKYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5jcHAgKi87
IH07CiAJCUQwNUNFRDI5MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA1Q0VEMjcw
QTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi87IH07CiAJCUQwNUNF
RDJBMEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwNUNFRDI4MEE0MEJCMkMwMEM1QUYz
OCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuaCAqLzsgfTsKIAkJRDA2QzBEOEYwQ0ZEMTE0NjAwNjVG
NDNGIC8qIFJlbW92ZUZvcm1hdENvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEQwNkMwRDhEMENGRDExNDYwMDY1RjQzRiAvKiBSZW1vdmVGb3Jt
YXRDb21tYW5kLmggKi87IH07CkBAIC05MTA1LDYgKzkxMDcsOCBAQAogCQlDMTA1REE2MzBGM0FB
NkI4MDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGV4dEVuY29kaW5nRGV0ZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxp
c3RMZXZlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2RpZnlTZWxlY3Rp
b25MaXN0TGV2ZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRTMwOUFB
MjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQjExMDA0RDBGOTQ4QTc3MDBFNTgzNzkgLyog
SmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQ0IxMTAwNTEwRjk0OEFGNjAwRTU4Mzc5IC8qIEphdmFTY3JpcHRPYmplY3RJZGVu
dGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEphdmFTY3Jp
cHRPYmplY3RJZGVudGlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA1
Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0QmxvY2tDb21tYW5kLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjgwQTQwQkIyQzAwQzVBRjM4IC8qIEZv
cm1hdEJsb2NrQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9y
bWF0QmxvY2tDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwNkMwRDhE
MENGRDExNDYwMDY1RjQzRiAvKiBSZW1vdmVGb3JtYXRDb21tYW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW92ZUZvcm1hdENvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTk3MzYsNiArOTc0MCw4IEBACiAJCQkJMUM4MUI5RkMwRTk3MzNDQjAw
MjY2RTA3IC8qIEphdmFTY3JpcHRQcm9maWxlTm9kZS5jcHAgKi8sCiAJCQkJMUM4MUI5RkIwRTk3
MzNDQjAwMjY2RTA3IC8qIEphdmFTY3JpcHRQcm9maWxlTm9kZS5oICovLAogCQkJCUJDQzY0RjVG
MERDRkI4NEUwMDgxRUYzQiAvKiBsb2NhbGl6ZWRTdHJpbmdzLmpzICovLAorCQkJCUNCMTEwMDUx
MEY5NDhBRjYwMEU1ODM3OSAvKiBKYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5jcHAgKi8sCisJ
CQkJQ0IxMTAwNEQwRjk0OEE3NzAwRTU4Mzc5IC8qIEphdmFTY3JpcHRPYmplY3RJZGVudGlmaWVy
LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGluc3BlY3RvcjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CkBAIC0xNjg2NSw2ICsxNjg3MSw3IEBACiAJCQkJN0E2NzRCREMwRjlFQkY0RTAwNkNG
MDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUQxNUUz
QUMwRjlFNkFDMTAwOUUwRTNGIC8qIFhNTFRva2VuaXplclNjb3BlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzNzc0QUJBNTBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50
LmggaW4gSGVhZGVycyAqLywKKwkJCQlDQjExMDA0RTBGOTQ4QTc3MDBFNTgzNzkgLyogSmF2YVNj
cmlwdE9iamVjdElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTg4ODEsNiArMTg4ODgs
NyBAQAogCQkJCTkzQjJEODE4MEY5OTIwRUUwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTdBNjc0QkRCMEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3Jv
dXBMb2FkRGVmZXJyZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUQxNUUzQUIwRjlFNkFDMTAw
OUUwRTNGIC8qIFhNTFRva2VuaXplclNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNCMTEw
MDUyMEY5NDhBRjYwMEU1ODM3OSAvKiBKYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkocmV2aXNpb24gNDMwNTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC01NzQsNiArNTc0LDEwIEBAIHN1YiBH
ZW5lcmF0ZUhlYWRlcgogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0luc3RhbmNlU2l6ZSJ9KSB7CisgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgdmlydHVhbCBzaXplX3QgaW5zdGFuY2VTaXplKCkgY29uc3Q7XG4i
KTsKKyAgICB9CisKICAgICBpZiAoISRoYXNQYXJlbnQpIHsKICAgICAgICAgaWYgKCRwb2RUeXBl
KSB7CiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpTU1ZHUE9EVHlwZVdy
YXBwZXI8JHBvZFR5cGU+KiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9XG4i
KTsKQEAgLTEzMTcsNiArMTMyMSwxMyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgfQogCisgICAgaWYgKCRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0luc3RhbmNlU2l6ZSJ9KSB7CisgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAic2l6ZV90ICR7Y2xhc3NOYW1lfTo6aW5zdGFuY2VTaXplKCkg
Y29uc3RcbntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkaW1wbENsYXNz
TmFtZSogaW1wID0gc3RhdGljX2Nhc3Q8JHtpbXBsQ2xhc3NOYW1lfSo+KGltcGwoKSk7XG4iKTsK
KyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGltcC0+ZWxlbWVudFNpemUo
KTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgfQorCiAg
ICAgIyBGdW5jdGlvbnMKICAgICBpZiAoJG51bUZ1bmN0aW9ucyA+IDApIHsKICAgICAgICAgZm9y
ZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MzA1NikKKysrIFdlYkNvcmUvaHRtbC9I
VE1MSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksMTggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitzaXplX3Qg
SFRNTEltYWdlRWxlbWVudDo6ZWxlbWVudFNpemUoKSBjb25zdAoreworICAgIHNpemVfdCBjb21w
dXRlZFNpemUgPSAwOworCisgICAgLy9zaG91bGQgd2UgY29tcHV0ZSBhbmQgYWRkIHRoZSByZW5k
ZXIgYXJlYSBzaXplPworCisgICAgaWYoY2FjaGVkSW1hZ2UoKSkKKyAgICAgICAgY29tcHV0ZWRT
aXplICs9IGNhY2hlZEltYWdlKCktPmltYWdlKCktPmRhdGEoKS0+c2l6ZSgpOworCisgICAgcmV0
dXJuIGNvbXB1dGVkU2l6ZTsKK30KKwogSFRNTEltYWdlRWxlbWVudDo6SFRNTEltYWdlRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVs
ZW1lbnQqIGZvcm0pCiAgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX2lt
YWdlTG9hZGVyKHRoaXMpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDQz
MDU2KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTE1LDYgKzExNSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNv
dXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIAorICAgIHNpemVf
dCBlbGVtZW50U2l6ZSgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIEhUTUxJbWFnZUxvYWRlciBt
X2ltYWdlTG9hZGVyOwogICAgIFN0cmluZyB1c2VtYXA7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TEltYWdlRWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVs
ZW1lbnQuaWRsCShyZXZpc2lvbiA0MzA1NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVt
ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQCBtb2R1bGUgaHRtbCB7CiAK
ICAgICBpbnRlcmZhY2UgWwogICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yLAorICAgICAgICBI
YXNJbnN0YW5jZVNpemUsCiAgICAgICAgIEludGVyZmFjZVVVSUQ9YjIxYjgxMjUtZDAwYi00YmRm
LWIwZTgtNjU5Njc4ZGIzOTIzLAogICAgICAgICBJbXBsZW1lbnRhdGlvblVVSUQ9MjEyMWNhMjEt
ODExOC00ZjFiLWI5ZmUtNDc4OGE5MDUwMjgxCiAgICAgXSBIVE1MSW1hZ2VFbGVtZW50IDogSFRN
TEVsZW1lbnQgewpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdE9iamVjdElkZW50
aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRPYmpl
Y3RJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFT
Y3JpcHRPYmplY3RJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9yaWEgT2xhcnUgPG9sYXJ1QGFkb2JlLmNvbT4u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkphdmFT
Y3JpcHRPYmplY3RJZGVudGlmaWVyLmgiCisKKyNpbmNsdWRlICJwcm9maWxlci9Qcm9maWxlTm9k
ZS5oIgorI2luY2x1ZGUgInByb2ZpbGVyL09iamVjdElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJK
YXZhU2NyaXB0Q29yZS9BUElDYXN0LmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdENvcmUvSlNPYmpl
Y3RSZWYuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oIgorI2luY2x1
ZGUgIkphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdENv
cmUvSlNJbW1lZGlhdGUuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0UHJvZmlsZU5vZGUuaCIKKyNp
bmNsdWRlIDxydW50aW1lL0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+
CisKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgSlNWYWx1ZVJlZiBnZXRJZChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiopCit7CisgICAgaWYgKCFKU1ZhbHVlSXNPYmpl
Y3RPZkNsYXNzKGN0eCwgdGhpc09iamVjdCwgT2JqZWN0SWRlbnRpZmllckNsYXNzKCkpKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIE9iamVjdElkZW50
aWZpZXIqIG9iaiA9IHN0YXRpY19jYXN0PE9iamVjdElkZW50aWZpZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjdHgsIG9i
ai0+bV9pZCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGdldFR5cGVOYW1lKEpTQ29udGV4dFJl
ZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKikK
K3sKKyAgICBpZiAoIUpTVmFsdWVJc09iamVjdE9mQ2xhc3MoY3R4LCB0aGlzT2JqZWN0LCBPYmpl
Y3RJZGVudGlmaWVyQ2xhc3MoKSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjdHgpOworCisgICAgT2JqZWN0SWRlbnRpZmllciogb2JqID0gc3RhdGljX2Nhc3Q8T2JqZWN0
SWRlbnRpZmllcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IHR5cGVOYW1lU3RyaW5nKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKG9iai0+bV90eXBlLmRhdGEoKSwgb2JqLT5tX3R5cGUuc2l6ZSgpKSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGN0eCwgdHlwZU5hbWVTdHJpbmcuZ2V0KCkpOwor
fQorCitzdGF0aWMgSlNWYWx1ZVJlZiBnZXRTaXplKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKikKK3sKKyAgICBpZiAoIUpT
VmFsdWVJc09iamVjdE9mQ2xhc3MoY3R4LCB0aGlzT2JqZWN0LCBPYmplY3RJZGVudGlmaWVyQ2xh
c3MoKSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworCisgICAg
T2JqZWN0SWRlbnRpZmllciogb2JqID0gc3RhdGljX2Nhc3Q8T2JqZWN0SWRlbnRpZmllcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVt
YmVyKGN0eCwgb2JqLT5tX3NpemUpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBnZXRDcmVhdGVk
RnJvbShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1Jl
ZiwgSlNWYWx1ZVJlZiopCit7CisgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGN0eCwg
dGhpc09iamVjdCwgT2JqZWN0SWRlbnRpZmllckNsYXNzKCkpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIE9iamVjdElkZW50aWZpZXIqIG9iaiA9IHN0
YXRpY19jYXN0PE9iamVjdElkZW50aWZpZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVj
dCkpOworICAgIHJldHVybiB0b1JlZih0b0pTKHRvSlMoY3R4KSwgb2JqLT5tX2NyZWF0aW5nRnVu
Y3Rpb24uZ2V0KCkpKTsKK30KKworSlNDbGFzc1JlZiBPYmplY3RJZGVudGlmaWVyQ2xhc3MoKQor
eworICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0geworICAgICAgICB7
ICJpZCIsIGdldElkLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKKyAgICAgICAgeyAi
dHlwZU5hbWUiLCBnZXRUeXBlTmFtZSwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCisg
ICAgICAgIHsgInNpemUiLCBnZXRTaXplLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwK
KyAgICAgICAgeyAiY3JlYXRlZEZyb20iLCBnZXRDcmVhdGVkRnJvbSwgMCwga0pTUHJvcGVydHlB
dHRyaWJ1dGVOb25lIH0sCisgICAgICAgIHsgMCwgMCwgMCwgMCB9CisgICAgfTsKKworICAgIHN0
YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSB7CisgICAgICAgIDAsIGtK
U0NsYXNzQXR0cmlidXRlTm9uZSwgIk9iamVjdElkZW50aWZpZXIiLCAwLCBzdGF0aWNWYWx1ZXMs
IDAsCisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKKyAgICB9OworCisg
ICAgc3RhdGljIEpTQ2xhc3NSZWYgb2JqZWN0SW5mb0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmY2xh
c3NEZWZpbml0aW9uKTsKKyAgICByZXR1cm4gb2JqZWN0SW5mb0NsYXNzOworfQorCitKU1ZhbHVl
UHRyIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBPYmplY3RJZGVudGlmaWVyKiBvYmplY3RJbmZvKQor
eworICAgIGlmICghb2JqZWN0SW5mbykKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworCisgICAg
Ly9GSVhNRTogbWF5IG5lZWQgdG8gY2FjaGUgdGhlIHRyYW5zZm9ybWVkIEpTIG9iamVjdHMuCisg
ICAgSlNPYmplY3QqIG9iamVjdEluZm9XcmFwcGVyID0gdG9KUyhKU09iamVjdE1ha2UodG9SZWYo
ZXhlYyksIE9iamVjdElkZW50aWZpZXJDbGFzcygpLCBzdGF0aWNfY2FzdDx2b2lkKj4ob2JqZWN0
SW5mbykpKTsKKyAgICByZXR1cm4gb2JqZWN0SW5mb1dyYXBwZXI7Cit9CisKK30KSW5kZXg6IFdl
YkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRPYmplY3RJZGVudGlmaWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRPYmplY3RJZGVudGlmaWVyLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
SG9yaWEgT2xhcnUgPG9sYXJ1QGFkb2JlLmNvbT4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBKYXZhU2NyaXB0T2JqZWN0SW5mb3JtYXRpb25faAorI2RlZmluZSBKYXZhU2NyaXB0T2JqZWN0
SW5mb3JtYXRpb25faAorCisjaW5jbHVkZSA8cnVudGltZS9KU1ZhbHVlLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+CisKK25hbWVzcGFjZSBKU0MgeworICAgIGNsYXNzIEV4
ZWNTdGF0ZTsKKyAgICBjbGFzcyBPYmplY3RJZGVudGlmaWVyOworfQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKyAgICBKU0NsYXNzUmVmIE9iamVjdElkZW50aWZpZXJDbGFzcygpOworICAgIEpT
Qzo6SlNWYWx1ZVB0ciB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpPYmplY3RJZGVudGlmaWVy
Kik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL2lu
c3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNw
ZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuY3BwCShyZXZpc2lvbiA0MzA1NikKKysrIFdlYkNvcmUv
aW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSAr
MjcsMTMgQEAKICNpbmNsdWRlICJKYXZhU2NyaXB0UHJvZmlsZS5oIgogCiAjaW5jbHVkZSAiSmF2
YVNjcmlwdFByb2ZpbGVOb2RlLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdE9iamVjdElkZW50aWZp
ZXIuaCIKICNpbmNsdWRlIDxwcm9maWxlci9Qcm9maWxlLmg+CisjaW5jbHVkZSA8cHJvZmlsZXIv
TGl2ZU9iamVjdHMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNPYmplY3RSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvT3BhcXVlSlNTdHJpbmcuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTT2Jq
ZWN0Lmg+CkBAIC0xMjgsNiArMTMyLDUzIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHJlc3RvcmVBbGwo
SlNDb250ZXh0UmUKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKIH0KIAor
c3RhdGljIEpTVmFsdWVSZWYgb2JqZWN0RGF0YShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJl
ZiAvKmZ1bmN0aW9uKi8sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCAvKmFyZ3VtZW50
Q291bnQqLywgY29uc3QgSlNWYWx1ZVJlZltdIC8qYXJndW1lbnRzKi8sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKK3sKKyAgICBQcm9maWxlKiBwcm9maWxlID0gc3RhdGljX2Nhc3Q8UHJvZmlsZSo+
KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgaWYgKCFwcm9maWxlKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIFZlY3RvcjxPYmpl
Y3RJZGVudGlmaWVyKiA+IG9iamVjdHM7CisgICAgcHJvZmlsZS0+bGl2ZU9iamVjdHMoKS0+dG9W
ZWN0b3Iob2JqZWN0cyk7CisKKyAgICBKU09iamVjdFJlZiBnbG9iYWwgPSBKU0NvbnRleHRHZXRH
bG9iYWxPYmplY3QoY3R4KTsKKworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGFycmF5
U3RyaW5nKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXJyYXkiKSk7CisK
KyAgICBKU1ZhbHVlUmVmIGFycmF5UHJvcGVydHkgPSBKU09iamVjdEdldFByb3BlcnR5KGN0eCwg
Z2xvYmFsLCBhcnJheVN0cmluZy5nZXQoKSwgZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9u
ICYmICpleGNlcHRpb24pCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgp
OworCisgICAgSlNPYmplY3RSZWYgYXJyYXlDb25zdHJ1Y3RvciA9IEpTVmFsdWVUb09iamVjdChj
dHgsIGFycmF5UHJvcGVydHksIGV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhj
ZXB0aW9uKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAg
IEpTT2JqZWN0UmVmIHJlc3VsdCA9IEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IoY3R4LCBhcnJh
eUNvbnN0cnVjdG9yLCAwLCAwLCBleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24gJiYgKmV4
Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisKKyAg
ICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcHVzaFN0cmluZyhBZG9wdCwgSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoInB1c2giKSk7CisKKyAgICBKU1ZhbHVlUmVmIHB1c2hQcm9wZXJ0
eSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY3R4LCByZXN1bHQsIHB1c2hTdHJpbmcuZ2V0KCksIGV4
Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIEpTT2JqZWN0UmVmIHB1c2hGdW5j
dGlvbiA9IEpTVmFsdWVUb09iamVjdChjdHgsIHB1c2hQcm9wZXJ0eSwgZXhjZXB0aW9uKTsKKyAg
ICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRpb24pCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjdHgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIEpTVmFsdWVSZWYgb2JqID0gdG9SZWYodG9KUyh0b0pTKGN0
eCksIG9iamVjdHNbaV0pKTsKKworICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGN0eCwg
cHVzaEZ1bmN0aW9uLCByZXN1bHQsIDEsICZvYmosIGV4Y2VwdGlvbik7CisgICAgICAgIGlmIChl
eGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjdHgpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyB2
b2lkIGZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVjdCkKIHsKICAgICBQcm9maWxlKiBwcm9maWxl
ID0gc3RhdGljX2Nhc3Q8UHJvZmlsZSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKQEAg
LTE0Nyw2ICsxOTgsNyBAQCBKU0NsYXNzUmVmIFByb2ZpbGVDbGFzcygpCiAgICAgc3RhdGljIEpT
U3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CiAgICAgICAgIHsgImZvY3VzIiwg
Zm9jdXMsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAogICAgICAgICB7ICJleGNsdWRlIiwg
ZXhjbHVkZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCisgICAgICAgIHsgIm9iamVjdERh
dGEiLCBvYmplY3REYXRhLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKICAgICAgICAgeyAi
cmVzdG9yZUFsbCIsIHJlc3RvcmVBbGwsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAogICAg
ICAgICB7IDAsIDAsIDAgfQogICAgIH07Cg==
</data>
<flag name="review"
          id="14988"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30834</attachid>
            <date>2009-06-01 09:49:59 -0700</date>
            <delta_ts>2009-06-15 09:50:33 -0700</delta_ts>
            <desc>Adds live object profiling capabilities</desc>
            <filename>svnProfilerPatch02_final</filename>
            <type>text/plain</type>
            <size>67183</size>
            <attacher name="Horia Olaru">olaru</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ0MzIyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODEgQEAKKzIwMDktMDYtMDEgIEhvcmlhIE9s
YXJ1ICA8b2xhcnVAYWRvYmUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEJ1ZyAxMDkzMDogV2ViS2l0IGNvdWxkIGJlbmVmaXQgZnJvbSBhIEph
dmFTY3JpcHQgbGl2ZSBvYmplY3QgcHJvZmlsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTMwCisKKyAgICAgICAgQWRkZWQgaW5zdGFuY2VTaXpl
IG1ldGhvZCBvbiBKU0NlbGwgdG8gYmUgaW5oZXJpdGVkIGJ5IG90aGVyIEpTIG9iamVjdHMuCisg
ICAgICAgIEltcGxlbWVudGVkIGluc3RhbmNlU2l6ZSBmb3IgYSBmZXcgYmFzaWMgdHlwZXMuCisK
KyAgICAgICAgQWRkZWQgdGhlIExpdmVPYmplY3RzIGNsYXNzIHRvIGNvbnRhaW4gYSBtYXBwaW5n
IGJldHdlZW4gSlNDZWxscyBhbmQKKyAgICAgICAgUHJvZmlsZU5vZGVzLCB0byByZWNvcmQgc3Rh
Y2sgdHJhY2VzIGZvciBvYmplY3QgY3JlYXRpb24uIFRoZSBtZXRob2RzCisgICAgICAgIGluIHRo
aXMgY2xhc3MgaGF2ZSBiZWVuIGV4cG9zZWQgdXAgdG8gdGhlIFByb2ZpbGVyIGNsYXNzLiBUaGVz
ZSBtZXRob2RzCisgICAgICAgIGFyZSBjYWxsZWQgYXQgY2VsbCBhbGxvY2F0aW9uIGFuZCBjb2xs
ZWN0aW9uIHRpbWUsIHRvIHJlY29yZCB0aGUgSlMKKyAgICAgICAgZnVuY3Rpb24gdGhhdCBjcmVh
dGVkIHRoZSBvYmplY3QuCisKKyAgICAgICAgQWRkZWQgdGhlIE9iamVjdElkZW50aWZpZXIgc3Ry
dWN0dXJlLCB1c2VkIHRvIHJlcHJlc2VudCBsaXZlIG9iamVjdHMKKyAgICAgICAgYW5kIGFnZ3Jl
Z2F0ZSByZWxldmFudCBkYXRhIGZvciB0aGVtLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
ZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogcHJvZmlsZXIvTGl2ZU9iamVjdHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6TGl2ZU9iamVjdHM6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjpMaXZl
T2JqZWN0cyk6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjp+TGl2ZU9iamVjdHMpOgorICAg
ICAgICAoSlNDOjpMaXZlT2JqZWN0czo6YWRkTm9kZSk6CisgICAgICAgIChKU0M6OkxpdmVPYmpl
Y3RzOjpyZW1vdmVOb2RlKToKKyAgICAgICAgKEpTQzo6TGl2ZU9iamVjdHM6OmlzRnJlZSk6Cisg
ICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjp0b1ZlY3Rvcik6CisgICAgICAgICogcHJvZmlsZXIv
TGl2ZU9iamVjdHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjppc0VtcHR5
KToKKyAgICAgICAgKEpTQzo6TGl2ZU9iamVjdHM6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6TGl2
ZU9iamVjdHM6OmVuZCk6CisgICAgICAgICogcHJvZmlsZXIvT2JqZWN0SWRlbnRpZmllci5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0SWRlbnRpZmllcjo6T2JqZWN0SWRlbnRpZmllcik6
CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGU6
OlByb2ZpbGUpOgorICAgICAgICAoSlNDOjpQcm9maWxlOjpsaXZlT2JqZWN0cyk6CisgICAgICAg
IChKU0M6OlByb2ZpbGU6Om9iamVjdENyZWF0ZWQpOgorICAgICAgICAoSlNDOjpQcm9maWxlOjpv
YmplY3RDb2xsZWN0ZWQpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGUuaDoKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZUdl
bmVyYXRvcjo6b2JqZWN0Q3JlYXRlZCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVHZW5lcmF0b3I6
Om9iamVjdENvbGxlY3RlZCk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5o
OgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmls
ZXI6OlByb2ZpbGVyKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OnByb2ZpbGVyKToKKyAgICAg
ICAgKEpTQzo6UHJvZmlsZXI6On5Qcm9maWxlcik6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpz
dGFydFByb2ZpbGluZyk6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpzdG9wUHJvZmlsaW5nKToK
KyAgICAgICAgKEpTQzo6ZGlzcGF0Y2hPYmplY3RUb1Byb2ZpbGVzKToKKyAgICAgICAgKEpTQzo6
UHJvZmlsZXI6Om9iamVjdENyZWF0ZWQpOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6b2JqZWN0
Q29sbGVjdGVkKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlci5oOgorICAgICAgICAoSlND
OjpQcm9maWxlcjo6c2V0SXNNZW1vcnlQcm9maWxpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvQ29s
bGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6c3dlZXApOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6Omluc3RhbmNlU2l6ZSk6Cisg
ICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuY3Bw
OgorICAgICAgICAoSlNDOjpKU0NlbGw6Om9wZXJhdG9yIG5ldyk6CisgICAgICAgICogcnVudGlt
ZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbnN0YW5jZVNpemUpOgorICAgICAg
ICAoSlNDOjpKU0NlbGw6OnNldERvQ29sbGVjdEFsbG9jYXRpb25UcmFjZXMpOgorICAgICAgICAo
SlNDOjpKU0NlbGw6OmRvQ29sbGVjdEFsbG9jYXRpb25UcmFjZXMpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgor
ICAgICAgICAoSlNDOjpKU1N0cmluZzo6aW5zdGFuY2VTaXplKToKKyAgICAgICAgKiBydW50aW1l
L0pTU3RyaW5nLmg6CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuY3BwOgorICAgICAg
ICAoSlNDOjpOdW1iZXJPYmplY3Q6Omluc3RhbmNlU2l6ZSk6CisgICAgICAgICogcnVudGltZS9O
dW1iZXJPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OlN0cmluZ09iamVjdDo6aW5zdGFuY2VTaXplKToKKyAgICAgICAgKiBydW50aW1l
L1N0cmluZ09iamVjdC5oOgorCiAyMDA5LTA1LTMxICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJh
Y2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGxpZWogInlvdSBqdXN0
IG5lZWQgdG8gY2hhbmdlIE5hdGl2ZUZ1bmN0aW9uV3JhcHBlci5oIiBIdW50LgpJbmRleDogSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gNDQzMjEpCisrKyBKYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMSw4ICszMjEsMTAgQEAg
X19aTjNXVEY4Q29sbGF0b3JEMUV2CiBfX1pOM1dURjhmYXN0RnJlZUVQdgogX19aTjNXVEY5Qnl0
ZUFycmF5NmNyZWF0ZUVtCiBfX1pOSzNKU0MxMUludGVycHJldGVyMTRyZXRyaWV2ZUNhbGxlckVQ
TlNfOUV4ZWNTdGF0ZUVQTlNfMTZJbnRlcm5hbEZ1bmN0aW9uRQotX19aTkszSlNDMTFJbnRlcnBy
ZXRlcjE4cmV0cmlldmVMYXN0Q2FsbGVyRVBOU185RXhlY1N0YXRlRVJpUmxSTlNfN1VTdHJpbmdF
Uk5TXzdKU1ZhbHVlRSAgCitfX1pOSzNKU0MxMUludGVycHJldGVyMThyZXRyaWV2ZUxhc3RDYWxs
ZXJFUE5TXzlFeGVjU3RhdGVFUmlSbFJOU183VVN0cmluZ0VSTlNfN0pTVmFsdWVFCitfX1pOSzNK
U0MxMUxpdmVPYmplY3RzOHRvVmVjdG9yRVJOM1dURjZWZWN0b3JJUE5TXzE2T2JqZWN0SWRlbnRp
ZmllckVMbTBFRUUKIF9fWk5LM0pTQzEyRGF0ZUluc3RhbmNlN2dldFRpbWVFUmRSaQorX19aTksz
SlNDMTJTdHJpbmdPYmplY3QxMmluc3RhbmNlU2l6ZUV2CiBfX1pOSzNKU0MxMlN0cmluZ09iamVj
dDEydG9UaGlzU3RyaW5nRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDMTJTdHJpbmdPYmplY3Q4
dG9TdHJpbmdFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0MxNEpTR2xvYmFsT2JqZWN0MTRpc0R5
bmFtaWNTY29wZUV2CkBAIC0zMzUsNiArMzM3LDcgQEAgX19aTkszSlNDMTdEZWJ1Z2dlckNhbGxG
cmFtZTIyY2FsY3VsYXRlZAogX19aTkszSlNDMTdEZWJ1Z2dlckNhbGxGcmFtZTR0eXBlRXYKIF9f
Wk5LM0pTQzE3RGVidWdnZXJDYWxsRnJhbWU4ZXZhbHVhdGVFUktOU183VVN0cmluZ0VSTlNfN0pT
VmFsdWVFCiBfX1pOSzNKU0M0SGVhcDEwc3RhdGlzdGljc0V2CitfX1pOSzNKU0M2SlNDZWxsMTJp
bnN0YW5jZVNpemVFdgogX19aTkszSlNDNkpTQ2VsbDEydG9UaGlzT2JqZWN0RVBOU185RXhlY1N0
YXRlRQogX19aTkszSlNDNkpTQ2VsbDEydG9UaGlzU3RyaW5nRVBOU185RXhlY1N0YXRlRQogX19a
TkszSlNDNkpTQ2VsbDE0aXNHZXR0ZXJTZXR0ZXJFdgpAQCAtMzQ2LDYgKzM0OSw3IEBAIF9fWk5L
M0pTQzZKU0NlbGw5Z2V0U3RyaW5nRXYKIF9fWk5LM0pTQzZKU0NlbGw5Z2V0VUludDMyRVJqCiBf
X1pOSzNKU0M3QXJnTGlzdDhnZXRTbGljZUVpUlMwXwogX19aTkszSlNDN0pTVmFsdWU5dG9JbnRl
Z2VyRVBOU185RXhlY1N0YXRlRQorX19aTkszSlNDN1Byb2ZpbGUxMWxpdmVPYmplY3RzRXYKIF9f
Wk5LM0pTQzdVU3RyaW5nMTBVVEY4U3RyaW5nRWIKIF9fWk5LM0pTQzdVU3RyaW5nMTR0b1N0cmlj
dFVJbnQzMkVQYgogX19aTkszSlNDN1VTdHJpbmc1YXNjaWlFdgpJbmRleDogSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiA0NDMyMSkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM2Miw2ICszNjIsOSBAQAog
CQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0
OCAvKiBKdW1wVGFibGUuY3BwICovOyB9OwogCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyog
SnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87IH07CiAJCUMwQTI3
MjYzMEU1MEEwNjMwMEU5NkUxNSAvKiBOb3RGb3VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBBMjcyM0YwRTUwOUYxRTAwRTk2RTE1IC8qIE5vdEZv
dW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
Q0IxMUZGRjcwRjk0ODM5OTAwRTU4Mzc5IC8qIE9iamVjdElkZW50aWZpZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENCMTFGRkY2MEY5NDgzNzEwMEU1
ODM3OSAvKiBPYmplY3RJZGVudGlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0JCMTE3MUIwRjY3MkU4OTAwNzQ0NDIyIC8qIExpdmVPYmpl
Y3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENC
QjExNDkzMEY2NzExMDQwMDc0NDQyMiAvKiBMaXZlT2JqZWN0cy5jcHAgKi87IH07CisJCUNCQjEx
NzFDMEY2NzJFODkwMDc0NDQyMiAvKiBMaXZlT2JqZWN0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0JCMTEzRUIwRjY2RDRCODAwNzQ0NDIyIC8qIExp
dmVPYmplY3RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI0QThGNTBFNTU1Nzc1
MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTI0QThGODBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVl
SlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTEyNEE4RjYwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCAqLzsgfTsK
IAkJRTE3ODYzNkQwRDlCRUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE3ODYzNkMwRDlC
RUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwICovOyB9OwpAQCAtODIzLDYg
KzgyNiw5IEBACiAJCUJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSnVtcFRhYmxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRDhDOTEwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBU
YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKdW1wVGFibGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzBBMjcyM0YwRTUwOUYxRTAwRTk2RTE1IC8qIE5v
dEZvdW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vdEZvdW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNCMTFGRkY2MEY5NDgzNzEwMEU1ODM3OSAvKiBP
YmplY3RJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE9iamVj
dElkZW50aWZpZXIuaDsgcGF0aCA9IHByb2ZpbGVyL09iamVjdElkZW50aWZpZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0JCMTEzRUIwRjY2RDRCODAwNzQ0NDIyIC8qIExpdmVP
YmplY3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpdmVPYmplY3RzLmg7
IHBhdGggPSBwcm9maWxlci9MaXZlT2JqZWN0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDQkIxMTQ5MzBGNjcxMTA0MDA3NDQ0MjIgLyogTGl2ZU9iamVjdHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTGl2ZU9iamVjdHMuY3BwOyBwYXRoID0gcHJv
ZmlsZXIvTGl2ZU9iamVjdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEy
MDIyODBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZU1hdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVNYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVNYXRoLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRlTWF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTFENTE3NTBCMkU3OThEMDA1NkMxODggLyogU3RyaW5nRXh0cmFzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0V4dHJhcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTUxMiw2ICsxNTE4LDggQEAKIAkJCQk5NUUzQkMwNDBFMUFFNjgy
MDBCMkQxQzEgLyogQ2FsbElkZW50aWZpZXIuaCAqLywKIAkJCQk5NTc0MkY2MzBERDExRjVBMDAw
OTE3RkIgLyogUHJvZmlsZS5jcHAgKi8sCiAJCQkJOTU3NDJGNjQwREQxMUY1QTAwMDkxN0ZCIC8q
IFByb2ZpbGUuaCAqLywKKwkJCQlDQkIxMTQ5MzBGNjcxMTA0MDA3NDQ0MjIgLyogTGl2ZU9iamVj
dHMuY3BwICovLAorCQkJCUNCQjExM0VCMEY2NkQ0QjgwMDc0NDQyMiAvKiBMaXZlT2JqZWN0cy5o
ICovLAogCQkJCTk1Q0Q0NTc0MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmNw
cCAqLywKIAkJCQk5NUNENDU3NTBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5o
ICovLAogCQkJCTk1QUI4MzU0MERBNDNCNDQwMEJDODNGMyAvKiBQcm9maWxlTm9kZS5jcHAgKi8s
CkBAIC0xNTIwLDYgKzE1MjgsNyBAQAogCQkJCTk1QUI4MzJGMERBNDJDQUQwMEJDODNGMyAvKiBQ
cm9maWxlci5oICovLAogCQkJCTFDNjE1MTZCMEVCQUM3QTAwMDMxMzc2RiAvKiBQcm9maWxlclNl
cnZlci5oICovLAogCQkJCTFDNjE1MTZBMEVCQUM3QTAwMDMxMzc2RiAvKiBQcm9maWxlclNlcnZl
ci5tbSAqLywKKwkJCQlDQjExRkZGNjBGOTQ4MzcxMDBFNTgzNzkgLyogT2JqZWN0SWRlbnRpZmll
ci5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBwcm9maWxlcjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CkBAIC0xNjAwLDYgKzE2MDksNyBAQAogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhh
c2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJ
Q0JCMTE3MUMwRjY3MkU4OTAwNzQ0NDIyIC8qIExpdmVPYmplY3RzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNEM1MjQyQjBGNTM1NUU5MDBCQTNEMDQgLyogSklUU3R1YnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDM0U1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBUElDYXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzNFOTBFMTZGNUNEMDBCMzQ0NjAgLyogQVNDSUlDVHlwZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xODMxLDYgKzE4NDEsNyBAQAogCQkJCTg2RUFDNDlCMEY5M0U4RDEwMDhFQzk0
OCAvKiBSZWdleFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQUM0OUMwRjkzRThEMTAw
OEVDOTQ4IC8qIFJlZ2V4UGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTZERDczNzkwRjlE
QTMxMDAwMjdGQkNDIC8qIFZNVGFncy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0IxMUZGRjcwRjk0
ODM5OTAwRTU4Mzc5IC8qIE9iamVjdElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
NkVFNjU5MEZBRTU5RDUwMDNGMDY5QSAvKiBOYXRpdmVGdW5jdGlvbldyYXBwZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3RTJFQTZCMEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzA1MkMzNTBGQjc5MjE5MDA0OEZEQzMgLyogUGFyc2VyQXJl
bmEuaCBpbiBIZWFkZXJzICovLApAQCAtMjE5NCw2ICsyMjA1LDcgQEAKIAkJCQk4NkVBQzQ5NzBG
OTNFOEQxMDA4RUM5NDggLyogUmVnZXhJbnRlcnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NkVBQzQ5OTBGOTNFOEQxMDA4RUM5NDggLyogUmVnZXhKSVQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZEQjY0NjQwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhl
ZFZNUG9vbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDQkIxMTcxQjBGNjcyRTg5MDA3NDQ0MjIg
LyogTGl2ZU9iamVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVBNkMwRkI0NjBDRjAw
NjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMwNTJDMzQw
RkI3OTIxOTAwNDhGREMzIC8qIFBhcnNlckFyZW5hLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
REQ1MUVCMEZCOERGNzQwMDRBOEJEQyAvKiBKSVRPcGNvZGVzLmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvTGl2ZU9iamVjdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL0xpdmVPYmplY3RzLmNwcAkocmV2aXNpb24gMCkK
KysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL0xpdmVPYmplY3RzLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBIb3JpYSBPbGFydSA8
b2xhcnVAYWRvYmUuY29tPi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiTGl2ZU9iamVjdHMuaCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRl
ICJDbGFzc0luZm8uaCIKKyNpbmNsdWRlICJQcm9maWxlTm9kZS5oIgorI2luY2x1ZGUgIlVTdHJp
bmcuaCIKKyNpbmNsdWRlICJPYmplY3RJZGVudGlmaWVyLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitQYXNzUmVmUHRyPExpdmVPYmplY3RzPiBMaXZlT2JqZWN0czo6Y3JlYXRlKCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IExpdmVPYmplY3RzKCkpOworfQorCitMaXZlT2JqZWN0czo6TGl2
ZU9iamVjdHMoKQoreworfQorCitMaXZlT2JqZWN0czo6fkxpdmVPYmplY3RzKCkKK3sKKyAgICAv
L0ZJWE1FOiBTaG91bGQgaW1wbGVtZW50IHRoaXMKKyAgICAvL2RvIHdlIG5lZWQgdG8gbWFudWFs
bHkgZW1wdHkgdGhlIEhhc2hNYXA/IEZpbmQgb3V0LgorfQorCisvL3JldHVybnMgdHJ1ZSBpZiBu
ZXcgdmFsdWUgd2FzIGFkZGVkIChub3QgZXhpc3RpbmcpCitib29sIExpdmVPYmplY3RzOjphZGRO
b2RlKGNvbnN0IEpTQ2VsbCogY2VsbCwgUGFzc1JlZlB0cjxQcm9maWxlTm9kZT4gc3RhY2tOb2Rl
KQoreworICAgIEFTU0VSVChjZWxsKTsKKyAgICAvL0ZJWE1FOiBzaG91bGQgdGhpcyBpbmNyZWFz
ZS9hZG9wdCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBzdGFja05vZGU/CisgICAgLy9pZiBzbywgdGhl
biBpdCBzaG91bGQgZGVyZWZlcmVuY2UgaXQgaW4gdGhlIHJlbW92ZU5vZGUgbWV0aG9kcworICAg
IHJldHVybiAobV9zdGFja01hcC5hZGQoY2VsbCwgc3RhY2tOb2RlKSkuc2Vjb25kOworfQorCit2
b2lkIExpdmVPYmplY3RzOjpyZW1vdmVOb2RlKGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBB
U1NFUlQoY2VsbCk7CisgICAgbV9zdGFja01hcC5yZW1vdmUoY2VsbCk7Cit9CisKK2Jvb2wgTGl2
ZU9iamVjdHM6OmlzRnJlZShjb25zdCBKU0NlbGwqIGNlbGwpIGNvbnN0Cit7CisgICAgY29uc3Qg
Q29sbGVjdG9yQ2VsbCogY29sbGVjdG9yQ2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29s
bGVjdG9yQ2VsbCo+KGNlbGwpOworICAgIHJldHVybiAhKGNvbGxlY3RvckNlbGwtPnUuZnJlZUNl
bGwuemVyb0lmRnJlZSk7Cit9CisKK3ZvaWQgTGl2ZU9iamVjdHM6OnRvVmVjdG9yKFZlY3RvcjxP
YmplY3RJZGVudGlmaWVyKiA+JiB2ZWN0b3IpIGNvbnN0Cit7CisgICAgQVNTRVJUKHZlY3Rvci5p
c0VtcHR5KCkpOworICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXQgPSBiZWdpbigpOyBpdCAhPSBl
bmQoKTsgKytpdCkgeworICAgICAgICBpZiAoIWlzRnJlZShpdC0+Zmlyc3QpKSB7CisgICAgICAg
ICAgICBjb25zdCBKU0NlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxjb25zdCBKU0NlbGwqPihpdC0+
Zmlyc3QpOworICAgICAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gY2VsbC0+Y2xhc3NJ
bmZvKCk7CisgICAgICAgICAgICAvL2NsYXNzSW5mbyBpcyAwIGluIHNvbWUgY2FzZXMgLSBzZWUg
SlNCeXRlQXJyYXkoVlB0clN0ZWFsaW5nSGFja1R5cGUpCisgICAgICAgICAgICBpZiAoaW5mbykg
eworICAgICAgICAgICAgICAgIE9iamVjdElkZW50aWZpZXIqIG9iaiA9IG5ldyBPYmplY3RJZGVu
dGlmaWVyKCh1bnNpZ25lZCljZWxsLCBpbmZvLT5jbGFzc05hbWUsIGNlbGwtPmluc3RhbmNlU2l6
ZSgpLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgICAgICAgICB2ZWN0b3IuYXBwZW5kKG9iaik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy9GSVhNRTogdGhlcmUgc2hvdWxkIGJl
IGFuIGVsc2UgYnJhbmNoIGhlcmUgdG8gcmVtb3ZlIHRoZQorICAgICAgICAvL2ZyZWUgY2VsbHMs
IHdoaWNoIGFyZSBub3QgbmVlZGVkLiBUaGV5IHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIG1h
cAorICAgICAgICAvL0Nhbid0IHJlbW92ZSBpdGVtcyBpbiBhIEhhc2hNYXAgd2hpbGUgaXRlcmF0
aW5nIG92ZXIgaXQuIFNob3VsZAorICAgICAgICAvL3N0b3JlIHRoZSBrZXlzIGluIGFuIGFycmF5
IGFuZCByZW1vdmUgdGhlbSBhZnRlcndhcmRzLgorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9MaXZlT2JqZWN0cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL0xpdmVPYmplY3RzLmgJKHJldmlzaW9uIDAp
CisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9MaXZlT2JqZWN0cy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhvcmlhIE9sYXJ1IDxv
bGFydUBhZG9iZS5jb20+LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGl2ZU9iamVjdHNf
aAorI2RlZmluZSBMaXZlT2JqZWN0c19oCisKKy8vIFRoZSBMaXZlIG9iamVjdHMgY2xhc3MgcHJv
dmlkZXMgYSB3YXkgdG8gc3RvcmUgdGhlIGxvY2F0aW9uIHdoZXJlCisvLyBKYXZhU2NyaXB0IG9i
amVjdHMgYXJlIGNyZWF0ZWQuIEl0IGRlZmluZXMgYSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIGEK
Ky8vIEpTQ2VsbCwgd2hpY2ggaG9sZHMgYSBqYXZhc2NyaXB0IG9iamVjdCwgYW5kIGEgUHJvZmls
ZU5vZGUsIHdoaWNoCisvLyByZXByZXNlbnRzIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi4gU3RhcnRp
bmcgZnJvbSB0aGUgUHJvZmlsZU5vZGUsIHRoZQorLy8gY2FsbCBzdGFjayBmb3IgdGhlIGNyZWF0
aW9uIG9mIGFuIG9iamVjdCBjYW4gYmUgZXh0cmFjdGVkLgorLy8KKy8vIFRoZSBjb3JyZXNwb25k
ZW5jZSBpcyBzdG9yZWQgaW50ZXJuYWxseSBhcyBhIGhhc2ggbWFwIG9mIGtleSBKU0NlbGwqCisv
LyBhbmQgdmFsdWUgUHJvZmlsZU5vZGUqLgorLy8KKy8vIGFkZE5vZGUgLSB0aGUgZnVuY3Rpb24g
YWRkcyBzdWNoIGEgcGFpciB0byB0aGUgaGFzaCBtYXAuIFRoaXMgZnVuY3Rpb24gaXMKKy8vIG1l
YW50IHRvIGJlIGNhbGxlZCB3aGVuIGFuIG9iamVjdCBpcyBjcmVhdGVkLgorLy8KKy8vIHJlbW92
ZU5vZGUgLSB0aGUgZnVuY3Rpb24gcmVtb3ZlcyBhIGNlbGwgZnJvbSB0aGUgbWFwLiBJdCBpcyBt
ZWFudCB0byBiZQorLy8gY2FsbGVkIHdoZW4gYSBqYXZhc2NyaXB0IG9iamVjdCBpcyBjb2xsZWN0
ZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgorLy8KKy8vIHRvVmVjdG9yIC0gYSBtZXRob2Qg
dG8gZXhwb3J0IHRoZSBkYXRhIGhlbGQgYnkgdGhlIExpdmVPYmplY3RzIGluc3RhbmNlCisvLyBh
dCBhbiBvdXRzaWRlIHJlcXVlc3QuCisvLworLy8gbV9zdGFja01hcCAtIFRoaXMgbWFwIGhvbGRz
IHBhaXJzIG9mIEpTQ2VsbHMgYW5kIHRoZSBmdW5jdGlvbnMgaW4gd2hpY2gKKy8vIHRoZXkgd2Vy
ZSBjcmVhdGVkLCB3aGljaCBhcmUgcmVwcmVzZW50ZWQgYnkgcHJvZmlsZSBub2Rlcy4gSXQgaXMg
aW4KKy8vIGluIGZhY3QgYSBtYXAgYmV0d2VlbiBhIEpTIG9iamVjdCBhbmQgdGhlIHN0YWNrIHRy
YWNlIG9mIHRoZSBmdW5jdGlvbgorLy8gdGhhdCBjcmVhdGVkIGl0LgorCisjaW5jbHVkZSAiUHJv
ZmlsZU5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisgICAgY2xhc3MgSlNDZWxsOworICAgIGNsYXNz
IE9iamVjdElkZW50aWZpZXI7CisKKyAgICBjbGFzcyBMaXZlT2JqZWN0cyA6IHB1YmxpYyBSZWZD
b3VudGVkPExpdmVPYmplY3RzPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxMaXZlT2JqZWN0cz4gY3JlYXRlKCk7CisgICAgICAgIHZpcnR1YWwgfkxpdmVPYmplY3Rz
KCk7CisKKyAgICAgICAgYm9vbCBhZGROb2RlKGNvbnN0IEpTQ2VsbCogY2VsbCwgUGFzc1JlZlB0
cjxQcm9maWxlTm9kZT4gc3RhY2tOb2RlKTsKKyAgICAgICAgdm9pZCByZW1vdmVOb2RlKGNvbnN0
IEpTQ2VsbCogY2VsbCk7CisKKyAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9zdGFja01hcC5pc0VtcHR5KCk7IH0KKworICAgICAgICB2b2lkIHRvVmVjdG9yKFZlY3RvcjxP
YmplY3RJZGVudGlmaWVyKiA+JiB2ZWN0b3IpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgTGl2ZU9iamVjdHMoKTsKKyAgICAKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IEpT
Q2VsbCosIFJlZlB0cjxQcm9maWxlTm9kZT4gPiBNZW1vcnlNYXA7CisgICAgICAgIHR5cGVkZWYg
TWVtb3J5TWFwOjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBNZW1vcnlNYXA6
OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgICAgICBpdGVyYXRvciBiZWdpbigp
IHsgcmV0dXJuIG1fc3RhY2tNYXAuYmVnaW4oKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSB7
IHJldHVybiBtX3N0YWNrTWFwLmVuZCgpOyB9CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFja01hcC5iZWdpbigpOyB9CisgICAgICAgIGNvbnN0X2l0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tNYXAuZW5kKCk7IH0KKyAgICAKKyAg
ICAgICAgYm9vbCBpc0ZyZWUoY29uc3QgSlNDZWxsKiBjZWxsKSBjb25zdDsKKworICAgICAgICBN
ZW1vcnlNYXAgbV9zdGFja01hcDsKKyAgICB9OworICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBMaXZlT2JqZWN0c19oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9P
YmplY3RJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
T2JqZWN0SWRlbnRpZmllci5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvT2JqZWN0SWRlbnRpZmllci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEhvcmlhIE9sYXJ1IDxvbGFydUBhZG9iZS5jb20+LiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgT2JqZWN0SWRlbnRpZmllcl9oCisjZGVmaW5lIE9iamVj
dElkZW50aWZpZXJfaAorCisvLyBUaGUgT2JqZWN0SWRlbnRpZmllciBzdHJ1Y3R1cmUgcmVwcmVz
ZW50cyBhIHNpbmdsZSBKYXZhU2NyaXB0IG9iamVjdAorLy8gZnJvbSBhIG1lbW9yeSBwcm9maWxp
bmcgcG9pbmcgb2Ygdmlldy4gSXQgaXMgbWVhbnQgYXMgYSBzaW1wbGUgaW50ZXJmYWNlCisvLyB0
byB0cmFuc21pdCBkYXRhIGFjcm9zcyBsYXllcnMuCisvLworLy8gbV9pZCAtIGEgdW5pcXVlIGlk
ZW50aWZpY2F0aW9uIG51bWJlciBmb3IgdGhlIG9iamVjdC4gVGhpcyB3aWxsIG1vc3QgbGlrZWx5
CisvLyBiZSBpbml0aWFsaXplZCB3aXRoIHRoZSBhZGRyZXNzIG9mIHRoZSBob2xkaW5nIEpTQ2Vs
bAorLy8KKy8vIG1fdHlwZSAtIHRoZSBKYXZhU2NyaXB0IHR5cGUgb2YgdGhlIG9iamVjdC4gVGhp
cyBpcyB0aGUgdHlwZSBhcyByZXR1cm5lZCBieQorLy8gdGhlIENsYXNzSW5mbyBvYmplY3Qgb2Yg
dGhlIEpTQ2VsbAorLy8KKy8vIG1fc2l6ZSAtIHRoZSBjb21wdXRlZCBzaXplIG9mIHRoZSBvYmpl
Y3QuIFRoaXMgd2lsbCBiZSBhc3NpZ25lZCB0aGUgdmFsdWUKKy8vIHJldHVybmVkIGJ5IHRoZSBp
bnN0YW5jZVNpemUoKSBtZXRob2Qgb24gSlNDZWxsCisvLworLy8gbV9jcmVhdGluZ0Z1bmN0aW9u
IC0gdGhpcyBvYmplY3QgcG9pbnRzIHRvIHRoZSBQcm9maWxlTm9kZSB3aGljaCBob2xkcworLy8g
aW5mb3JtYXRpb24gYWJvdXQgdGhlIGZ1bmN0aW9uIGluIHdoaWNoIHRoaXMgSlMgb2JqZWN0IHdh
cyBjcmVhdGVkLgorLy8gQSBzdGFjayB0cmFjZSBjYW4gYmUgZXh0cmFjdGVkIGZyb20gdGhpcyBv
YmplY3QuCisKKyNpbmNsdWRlIDxydW50aW1lL1VTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKKyAgICBzdHJ1Y3QgT2JqZWN0SWRlbnRpZmllciB7CisgICAgICAgIHVuc2lnbmVkIG1faWQ7
CisgICAgICAgIFVTdHJpbmcgbV90eXBlOworICAgICAgICB1bnNpZ25lZCBtX3NpemU7CisgICAg
ICAgIFJlZlB0cjxQcm9maWxlTm9kZT4gbV9jcmVhdGluZ0Z1bmN0aW9uOworCisgICAgICAgIE9i
amVjdElkZW50aWZpZXIoKQorICAgICAgICAgICAgOiBtX2lkKDApCisgICAgICAgICAgICAsIG1f
c2l6ZSgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBPYmplY3RJZGVudGlmaWVy
KHVuc2lnbmVkIGlkTnVtYmVyLCBVU3RyaW5nIHR5cGUsIHVuc2lnbmVkIHNpemUsIFJlZlB0cjxQ
cm9maWxlTm9kZT4gY3JlYXRpbmdGdW5jdGlvbikKKyAgICAgICAgICAgIDogbV9pZChpZE51bWJl
cikKKyAgICAgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICAgICAsIG1fc2l6ZShzaXpl
KQorICAgICAgICAgICAgLCBtX2NyZWF0aW5nRnVuY3Rpb24oY3JlYXRpbmdGdW5jdGlvbikKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBPYmplY3RJZGVudGlmaWVyX2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUu
Y3BwCShyZXZpc2lvbiA0NDMyMSkKKysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiUHJvZmlsZS5o
IgogCiAjaW5jbHVkZSAiUHJvZmlsZU5vZGUuaCIKKyNpbmNsdWRlICJMaXZlT2JqZWN0cy5oIgog
I2luY2x1ZGUgPHN0ZGlvLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDMsNiArNDQsMTcgQEAg
UHJvZmlsZTo6UHJvZmlsZShjb25zdCBVU3RyaW5nJiB0aXRsZSwgdQogICAgIC8vIEZJWE1FOiBX
aGVuIG11bHRpLXRocmVhZGluZyBpcyBzdXBwb3J0ZWQgdGhpcyB3aWxsIGJlIGEgdmVjdG9yIGFu
ZCBjYWxscwogICAgIC8vIGludG8gdGhlIHByb2ZpbGVyIHdpbGwgbmVlZCB0byBrbm93IHdoaWNo
IHRocmVhZCBpdCBpcyBleGVjdXRpbmcgb24uCiAgICAgbV9oZWFkID0gUHJvZmlsZU5vZGU6OmNy
ZWF0ZShDYWxsSWRlbnRpZmllcigiVGhyZWFkXzEiLCAwLCAwKSwgMCwgMCk7CisgICAgbV9saXZl
T2JqZWN0cyA9IExpdmVPYmplY3RzOjpjcmVhdGUoKTsKK30KKworUHJvZmlsZTo6UHJvZmlsZShj
b25zdCBVU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgdWlkLCBQYXNzUmVmUHRyPExpdmVPYmplY3Rz
PiBsaXZlT2JqZWN0cykKKyAgICA6IG1fdGl0bGUodGl0bGUpCisgICAgLCBtX3VpZCh1aWQpCisg
ICAgLCBtX2xpdmVPYmplY3RzKGxpdmVPYmplY3RzKQoreworICAgIC8vIEZJWE1FOiBXaGVuIG11
bHRpLXRocmVhZGluZyBpcyBzdXBwb3J0ZWQgdGhpcyB3aWxsIGJlIGEgdmVjdG9yIGFuZCBjYWxs
cworICAgIC8vIGludG8gdGhlIHByb2ZpbGVyIHdpbGwgbmVlZCB0byBrbm93IHdoaWNoIHRocmVh
ZCBpdCBpcyBleGVjdXRpbmcgb24uCisgICAgbV9oZWFkID0gUHJvZmlsZU5vZGU6OmNyZWF0ZShD
YWxsSWRlbnRpZmllcigiVGhyZWFkXzEiLCAwLCAwKSwgMCwgMCk7CiB9CiAKIFByb2ZpbGU6On5Q
cm9maWxlKCkKQEAgLTEzMyw0ICsxNDUsMTkgQEAgdm9pZCBQcm9maWxlOjpkZWJ1Z1ByaW50RGF0
YVNhbXBsZVN0eWxlKAogfQogI2VuZGlmCiAKK1Bhc3NSZWZQdHI8TGl2ZU9iamVjdHM+IFByb2Zp
bGU6OmxpdmVPYmplY3RzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9saXZlT2JqZWN0czsKK30K
Kwordm9pZCBQcm9maWxlOjpvYmplY3RDcmVhdGVkKGNvbnN0IEpTQ2VsbCogY3JlYXRlZE9iamVj
dCwgUGFzc1JlZlB0cjxQcm9maWxlTm9kZT4gb3JpZ2luYXRpbmdGdW5jdGlvbiApCit7CisgICAg
bV9saXZlT2JqZWN0cy0+YWRkTm9kZShjcmVhdGVkT2JqZWN0LCBvcmlnaW5hdGluZ0Z1bmN0aW9u
KTsKK30KKwordm9pZCBQcm9maWxlOjpvYmplY3RDb2xsZWN0ZWQoY29uc3QgSlNDZWxsKiBjb2xs
ZWN0ZWRPYmplY3QpCit7CisgICAgbV9saXZlT2JqZWN0cy0+cmVtb3ZlTm9kZShjb2xsZWN0ZWRP
YmplY3QpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL1Byb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlLmgJKHJldmlzaW9uIDQ0MzIxKQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCisgICAgY2xhc3MgTGl2ZU9iamVjdHM7CisKICAgICBjbGFzcyBQcm9maWxlIDogcHVibGlj
IFJlZkNvdW50ZWQ8UHJvZmlsZT4gewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8UHJvZmlsZT4gY3JlYXRlKGNvbnN0IFVTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCB1aWQp
OwpAQCAtNTUsOCArNTcsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZGVidWdQ
cmludERhdGFTYW1wbGVTdHlsZSgpIGNvbnN0OwogI2VuZGlmCiAKKyAgICAgICAgUGFzc1JlZlB0
cjxMaXZlT2JqZWN0cz4gbGl2ZU9iamVjdHMoKSBjb25zdDsKKworICAgICAgICAvL0NvbGxlY3Qg
bWVtb3J5IGluZm8KKyAgICAgICAgdm9pZCBvYmplY3RDcmVhdGVkKGNvbnN0IEpTQ2VsbCogY3Jl
YXRlZE9iamVjdCwgUGFzc1JlZlB0cjxQcm9maWxlTm9kZT4gb3JpZ2luYXRpbmdGdW5jdGlvbik7
CisgICAgICAgIHZvaWQgb2JqZWN0Q29sbGVjdGVkKGNvbnN0IEpTQ2VsbCogY29sbGVjdGVPYmpl
Y3QpOworCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBQcm9maWxlKGNvbnN0IFVTdHJpbmcmIHRp
dGxlLCB1bnNpZ25lZCB1aWQpOworICAgICAgICBQcm9maWxlKGNvbnN0IFVTdHJpbmcmIHRpdGxl
LCB1bnNpZ25lZCB1aWQsIFBhc3NSZWZQdHI8TGl2ZU9iamVjdHM+KTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIHZvaWQgcmVtb3ZlUHJvZmlsZVN0YXJ0KCk7CkBAIC02NSw2ICs3NCw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBVU3RyaW5nIG1fdGl0bGU7CiAgICAgICAgIFJlZlB0cjxQ
cm9maWxlTm9kZT4gbV9oZWFkOwogICAgICAgICB1bnNpZ25lZCBpbnQgbV91aWQ7CisKKyAgICAg
ICAgUmVmUHRyPExpdmVPYmplY3RzPiBtX2xpdmVPYmplY3RzOwogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVy
YXRvci5jcHAJKHJldmlzaW9uIDQ0MzIxKQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksMTYgQEAgdm9p
ZCBQcm9maWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlKGNvbnN0IAogICAgIG1fY3VycmVudE5vZGUg
PSBtX2N1cnJlbnROb2RlLT5kaWRFeGVjdXRlKCk7CiB9CiAKK3ZvaWQgUHJvZmlsZUdlbmVyYXRv
cjo6b2JqZWN0Q3JlYXRlZChjb25zdCBKU0NlbGwqIGNyZWF0ZWRPYmplY3QpCit7CisgICAgbV9w
cm9maWxlLT5vYmplY3RDcmVhdGVkKGNyZWF0ZWRPYmplY3QsIG1fY3VycmVudE5vZGUpOworfQor
Cit2b2lkIFByb2ZpbGVHZW5lcmF0b3I6Om9iamVjdENvbGxlY3RlZChjb25zdCBKU0NlbGwqIGNv
bGxlY3RlT2JqZWN0KQoreworICAgIG1fcHJvZmlsZS0+b2JqZWN0Q29sbGVjdGVkKGNvbGxlY3Rl
T2JqZWN0KTsKK30KKwogdm9pZCBQcm9maWxlR2VuZXJhdG9yOjpzdG9wUHJvZmlsaW5nKCkKIHsK
ICAgICBtX3Byb2ZpbGUtPmZvckVhY2goJlByb2ZpbGVOb2RlOjpzdG9wUHJvZmlsaW5nKTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmgJKHJldmlzaW9u
IDQ0MzIxKQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xh
c3MgQ2FsbElkZW50aWZpZXI7CiAgICAgY2xhc3MgRXhlY1N0YXRlOworICAgIGNsYXNzIEpTQ2Vs
bDsKICAgICBjbGFzcyBQcm9maWxlOwogICAgIGNsYXNzIFByb2ZpbGVOb2RlOwogICAgIGNsYXNz
IFVTdHJpbmc7CkBAIC01MywxMCArNTQsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgd2lsbEV4ZWN1dGUoY29uc3QgQ2FsbElkZW50aWZpZXImKTsKICAgICAgICAgdm9pZCBkaWRF
eGVjdXRlKGNvbnN0IENhbGxJZGVudGlmaWVyJik7CiAKKyAgICAgICAgLy9Db2xsZWN0IG1lbW9y
eSBpbmZvCisgICAgICAgIHZvaWQgb2JqZWN0Q3JlYXRlZChjb25zdCBKU0NlbGwqIGNyZWF0ZWRP
YmplY3QpOworICAgICAgICB2b2lkIG9iamVjdENvbGxlY3RlZChjb25zdCBKU0NlbGwqIGNvbGxl
Y3RlT2JqZWN0KTsKKwogICAgICAgICAvLyBTdG9wcGluZyBQcm9maWxpbmcKICAgICAgICAgdm9p
ZCBzdG9wUHJvZmlsaW5nKCk7CiAKICAgICAgICAgdHlwZWRlZiB2b2lkIChQcm9maWxlR2VuZXJh
dG9yOjoqUHJvZmlsZUZ1bmN0aW9uKShjb25zdCBDYWxsSWRlbnRpZmllciYgY2FsbElkZW50aWZp
ZXIpOworICAgICAgICB0eXBlZGVmIHZvaWQgKFByb2ZpbGVHZW5lcmF0b3I6OipQcm9maWxlT2Jq
ZWN0RnVuY3Rpb24pKGNvbnN0IEpTQ2VsbCogY2VsbCk7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBQcm9maWxlR2VuZXJhdG9yKGNvbnN0IFVTdHJpbmcmIHRpdGxlLCBFeGVjU3RhdGUqIG9yaWdp
bmF0aW5nRXhlYywgdW5zaWduZWQgdWlkKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlci5jcHAJKHJldmlzaW9uIDQ0MzIxKQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMSArNTAsMjAgQEAgc3RhdGljIENhbGxJ
ZGVudGlmaWVyIGNyZWF0ZUNhbGxJZGVudGlmaQogUHJvZmlsZXIqIFByb2ZpbGVyOjpzX3NoYXJl
ZFByb2ZpbGVyID0gMDsKIFByb2ZpbGVyKiBQcm9maWxlcjo6c19zaGFyZWRFbmFibGVkUHJvZmls
ZXJSZWZlcmVuY2UgPSAwOwogCitQcm9maWxlcjo6UHJvZmlsZXIoKQorICAgIDogbV9pc01lbW9y
eVByb2ZpbGluZyhmYWxzZSkKK3sKK30KKwogUHJvZmlsZXIqIFByb2ZpbGVyOjpwcm9maWxlcigp
CiB7CiAgICAgaWYgKCFzX3NoYXJlZFByb2ZpbGVyKQogICAgICAgICBzX3NoYXJlZFByb2ZpbGVy
ID0gbmV3IFByb2ZpbGVyKCk7CiAgICAgcmV0dXJuIHNfc2hhcmVkUHJvZmlsZXI7Cit9CisKK1By
b2ZpbGVyOjp+UHJvZmlsZXIoKQorewogfSAgIAogCiB2b2lkIFByb2ZpbGVyOjpzdGFydFByb2Zp
bGluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHRpdGxlKQpAQCAtNzIsNiArODEs
OSBAQCB2b2lkIFByb2ZpbGVyOjpzdGFydFByb2ZpbGluZyhFeGVjU3RhdGUqCiAgICAgfQogCiAg
ICAgc19zaGFyZWRFbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UgPSB0aGlzOworICAgIGlmIChtX2lz
TWVtb3J5UHJvZmlsaW5nKQorICAgICAgICBKU0NlbGw6OnNldERvQ29sbGVjdEFsbG9jYXRpb25U
cmFjZXModHJ1ZSk7CisgICAgCiAgICAgUmVmUHRyPFByb2ZpbGVHZW5lcmF0b3I+IHByb2ZpbGVH
ZW5lcmF0b3IgPSBQcm9maWxlR2VuZXJhdG9yOjpjcmVhdGUodGl0bGUsIGV4ZWMsICsrUHJvZmls
ZXNVSUQpOwogICAgIG1fY3VycmVudFByb2ZpbGVzLmFwcGVuZChwcm9maWxlR2VuZXJhdG9yKTsK
IH0KQEAgLTg2LDggKzk4LDExIEBAIFBhc3NSZWZQdHI8UHJvZmlsZT4gUHJvZmlsZXI6OnN0b3BQ
cm9maWwKICAgICAgICAgICAgIFJlZlB0cjxQcm9maWxlPiByZXR1cm5Qcm9maWxlID0gcHJvZmls
ZUdlbmVyYXRvci0+cHJvZmlsZSgpOwogCiAgICAgICAgICAgICBtX2N1cnJlbnRQcm9maWxlcy5y
ZW1vdmUoaSk7Ci0gICAgICAgICAgICBpZiAoIW1fY3VycmVudFByb2ZpbGVzLnNpemUoKSkKKyAg
ICAgICAgICAgIGlmICghbV9jdXJyZW50UHJvZmlsZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICAg
ICAgLy9UaGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgbV9pc01lbW9yeVByb2ZpbGlu
ZyBpcyBlbmFibGVkCisgICAgICAgICAgICAgICAgSlNDZWxsOjpzZXREb0NvbGxlY3RBbGxvY2F0
aW9uVHJhY2VzKGZhbHNlKTsKICAgICAgICAgICAgICAgICBzX3NoYXJlZEVuYWJsZWRQcm9maWxl
clJlZmVyZW5jZSA9IDA7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHJldHVybiByZXR1cm5Qcm9maWxlOwogICAgICAgICB9CkBAIC0xMDQsNiArMTE5LDE0IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm8KICAgICB9CiB9CiAKK3N0YXRp
YyBpbmxpbmUgdm9pZCBkaXNwYXRjaE9iamVjdFRvUHJvZmlsZXMoY29uc3QgVmVjdG9yPFJlZlB0
cjxQcm9maWxlR2VuZXJhdG9yPiA+JiBwcm9maWxlcywgUHJvZmlsZUdlbmVyYXRvcjo6UHJvZmls
ZU9iamVjdEZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBKU0NlbGwqIGNlbGwsIHVuc2lnbmVkIGN1
cnJlbnRQcm9maWxlVGFyZ2V0R3JvdXApCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
cm9maWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocHJvZmlsZXNbaV0tPnByb2ZpbGVH
cm91cCgpID09IGN1cnJlbnRQcm9maWxlVGFyZ2V0R3JvdXAgfHwgIXByb2ZpbGVzW2ldLT5vcmln
aW5hdGluZ0dsb2JhbEV4ZWMoKSkKKyAgICAgICAgICAgIChwcm9maWxlc1tpXS5nZXQoKS0+KmZ1
bmN0aW9uKShjZWxsKTsKKyAgICB9Cit9CisKIHZvaWQgUHJvZmlsZXI6OndpbGxFeGVjdXRlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQoIW1fY3VycmVu
dFByb2ZpbGVzLmlzRW1wdHkoKSk7CkBAIC0xMzQsNiArMTU3LDI0IEBAIHZvaWQgUHJvZmlsZXI6
OmRpZEV4ZWN1dGUoRXhlY1N0YXRlKiBleGUKICAgICBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxl
cyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6OmRpZEV4ZWN1dGUsIGNyZWF0
ZUNhbGxJZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCksIEpTVmFsdWUoKSwgc291cmNlVVJM
LCBzdGFydGluZ0xpbmVOdW1iZXIpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb2Zp
bGVHcm91cCgpKTsKIH0KIAordm9pZCBQcm9maWxlcjo6b2JqZWN0Q3JlYXRlZChFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogY3JlYXRlZE9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW1fY3VycmVudFBy
b2ZpbGVzLmlzRW1wdHkoKSk7CisKKyAgICBkaXNwYXRjaE9iamVjdFRvUHJvZmlsZXMobV9jdXJy
ZW50UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjpvYmplY3RDcmVhdGVkLCBjcmVhdGVkT2Jq
ZWN0LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb2ZpbGVHcm91cCgpKTsKK30KKwor
dm9pZCBQcm9maWxlcjo6b2JqZWN0Q29sbGVjdGVkKEpTQ2VsbCogY29sbGVjdGVkT2JqZWN0KQor
eworICAgIEFTU0VSVCghbV9jdXJyZW50UHJvZmlsZXMuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAv
LyBUaGUgRXhlY1N0YXRlIGlzIG5vdCBhdmFpbGFibGUgYXQgY29sbGVjdGlvbiB0aW1lLCBzbyB0
aGVyZSBpcyBubyB3YXkKKyAgICAvLyB0byBkZXRlcm1pbmUgd2hpY2ggcHJvZmlsZSB0aGlzIGlz
IHRhcmdldGVkIGF0LiBEaXNwYXRjaCB0byBhbGwgLSBpZiBhIHByb2ZpbGUKKyAgICAvLyBjb250
YWlucyB0aGUgZGVzaXJlZCBjZWxsLCBpdCB3aWxsIG1hcmsgaXQgY29sbGVjdGVkIGFwcHJvcHJp
YXRlbHkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFByb2ZpbGVzLnNpemUo
KTsgKytpKQorICAgICAgICBtX2N1cnJlbnRQcm9maWxlc1tpXS5nZXQoKS0+b2JqZWN0Q29sbGVj
dGVkKGNvbGxlY3RlZE9iamVjdCk7Cit9CisKIENhbGxJZGVudGlmaWVyIFByb2ZpbGVyOjpjcmVh
dGVDYWxsSWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTVmFsdWUgZnVuY3Rp
b24sIGNvbnN0IFVTdHJpbmcmIGRlZmF1bHRTb3VyY2VVUkwsIGludCBkZWZhdWx0TGluZU51bWJl
cikKIHsKICAgICBpZiAoIWZ1bmN0aW9uKQpJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
ci5oCShyZXZpc2lvbiA0NDMyMSkKKysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICByZXR1cm4gJnNfc2hhcmVkRW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlOwogICAgICAg
ICB9CiAKKyAgICAgICAgdmlydHVhbCB+UHJvZmlsZXIoKTsKKwogICAgICAgICBzdGF0aWMgUHJv
ZmlsZXIqIHByb2ZpbGVyKCk7IAogICAgICAgICBzdGF0aWMgQ2FsbElkZW50aWZpZXIgY3JlYXRl
Q2FsbElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiwgSlNWYWx1ZSwgY29uc3QgVVN0cmluZyYgc291
cmNlVVJMLCBpbnQgbGluZU51bWJlcik7CiAKQEAgLTYyLDEyICs2NCwyMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBkaWRFeGVjdXRlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rp
b24pOwogICAgICAgICB2b2lkIGRpZEV4ZWN1dGUoRXhlY1N0YXRlKiwgY29uc3QgVVN0cmluZyYg
c291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKTsKIAorICAgICAgICB2aXJ0dWFsIHZv
aWQgb2JqZWN0Q3JlYXRlZChFeGVjU3RhdGUqLCBKU0NlbGwqIGNyZWF0ZWRPYmplY3QpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgb2JqZWN0Q29sbGVjdGVkKEpTQ2VsbCogY29sbGVjdGVPYmplY3Qp
OworCisgICAgICAgIHZvaWQgc2V0SXNNZW1vcnlQcm9maWxpbmcoYm9vbCBpc0VuYWJsZWQpIHsg
bV9pc01lbW9yeVByb2ZpbGluZyA9IGlzRW5hYmxlZDsgfTsKICAgICAgICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxQcm9maWxlR2VuZXJhdG9yPiA+JiBjdXJyZW50UHJvZmlsZXMoKSB7IHJldHVybiBt
X2N1cnJlbnRQcm9maWxlczsgfTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIFByb2ZpbGVyKCk7
CisgICAgCiAgICAgICAgIFZlY3RvcjxSZWZQdHI8UHJvZmlsZUdlbmVyYXRvcj4gPiBtX2N1cnJl
bnRQcm9maWxlczsKICAgICAgICAgc3RhdGljIFByb2ZpbGVyKiBzX3NoYXJlZFByb2ZpbGVyOwog
ICAgICAgICBzdGF0aWMgUHJvZmlsZXIqIHNfc2hhcmVkRW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNl
OworICAgICAgICAKKyAgICAgICAgYm9vbCBtX2lzTWVtb3J5UHJvZmlsaW5nOwogICAgIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNw
cAkocmV2aXNpb24gNDQzMjEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJKU1N0cmluZy5o
IgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgorI2luY2x1ZGUgIlBy
b2ZpbGVyLmgiCiAjaW5jbHVkZSAiVHJhY2luZy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNp
bmNsdWRlIDxzZXRqbXAuaD4KQEAgLTg5Myw3ICs4OTQsMTAgQEAgdGVtcGxhdGUgPEhlYXBUeXBl
IGhlYXBUeXBlPiBzaXplX3QgSGVhcAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzdW1l
cyB0aGUgb2JqZWN0IGhhcyBhIHZhbGlkIHZwdHIuKQogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNlbGwtPnUuZnJlZUNlbGwuemVyb0lmRnJlZSA9PSAwKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShKU0NlbGw6OmRvQ29sbGVjdEFsbG9jYXRpb25U
cmFjZXMoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpQcm9maWxlcjo6ZW5hYmxl
ZFByb2ZpbGVyUmVmZXJlbmNlKCkpLT5vYmplY3RDb2xsZWN0ZWQoaW1wKTsKKwogICAgICAgICAg
ICAgICAgICAgICAgICAgaW1wLT5+SlNDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgCkBAIC05MTYsNiArOTIwLDEwIEBAIHRlbXBsYXRlIDxIZWFwVHlw
ZSBoZWFwVHlwZT4gc2l6ZV90IEhlYXAKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJCbG9j
ay0+bWFya2VkLmdldChpID4+IEhlYXBDb25zdGFudHM8aGVhcFR5cGU+OjpiaXRtYXBTaGlmdCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFwVHlwZSAhPSBOdW1iZXJIZWFwKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDZWxsKiBpbXAgPSByZWludGVycHJldF9j
YXN0PEpTQ2VsbCo+KGNlbGwpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFVO
TElLRUxZKEpTQ2VsbDo6ZG9Db2xsZWN0QWxsb2NhdGlvblRyYWNlcygpKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKCpQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNl
KCkpLT5vYmplY3RDb2xsZWN0ZWQoaW1wKTsKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGltcC0+fkpTQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgLS11c2VkQ2VsbHM7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHJldmlzaW9uIDQ0MzIxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA0OCw2ICsxMDQ4LDU0IEBAIHZvaWQgSlNBcnJheTo6Y2hl
Y2tDb25zaXN0ZW5jeShDb25zaXN0ZW4KIAogI2VuZGlmCiAKK3NpemVfdCBKU0FycmF5OjppbnN0
YW5jZVNpemUoKSBjb25zdAoreworICAgIHNpemVfdCBjb21wdXRlZFNpemUgPSAwOworCisgICAg
Ly8gSlMgY2xhc3Mgb3ZlcmhlYWQKKyAgICBjb21wdXRlZFNpemUgKz0gc2l6ZW9mKCp0aGlzKTsK
KworICAgIC8vIEFycmF5U3RvcmFnZSBvdmVyaGVhZCAtIHRoaXMgdGFrZXMgaW50byBhY2NvdW50
IHRoZSBzaXplIG9mIHRoZQorICAgIC8vIHN0b3JhZ2UgdmVjdG9yCisgICAgY29tcHV0ZWRTaXpl
ICs9IHN0b3JhZ2VTaXplKG1fc3RvcmFnZS0+bV92ZWN0b3JMZW5ndGgpOworCisgICAgLy8gIHNp
emVvZiB0aGUgdmVjdG9yIHZhbHVlcworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0
b3JhZ2UtPm1fdmVjdG9yTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgLy8gaWYgdGhlIHZhbHVlID09
IG5vVmFsdWUoKSBpdCBtZWFucyB0aGUgdmVjdG9yIHNsb3QgaXMgZW1wdHksIHNvIHN0ZXAgb3Zl
ciBpdAorICAgICAgICAvLyBpZiB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gYSBjZWxsLCB0aGUgY2Vs
bCBoYXMgaXRzIG93biBzaXplIHRvIGFjY291bnQgZm9yCisgICAgICAgIC8vIG90aGVyd2lzZSwg
dGhlIHZhbHVlIGlzIGFuICdpbW1lZGlhdGUnLCBhIHR5cGUtdGFnZWQgdmFsdWUgbWFzcXVlcmFk
aW5nIGFzIGEgcG9pbnRlcgorICAgICAgICAvLyAoc2VlIEpTSW1tZWRpYXRlLmgpIGl0IGlzIHdo
b2xseSBjb250YWluZWQgaW4gdGhlIEpTVmFsdWUgaGVsZCBpbiB0aGUgdmVjdG9yCisgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBtX3N0b3JhZ2UtPm1fdmVjdG9yW2ldOworICAgICAgICBpZiAoIHZh
bHVlICE9IEpTVmFsdWUoKSAmJiB2YWx1ZS5pc0NlbGwoKSApCisgICAgICAgICAgICBjb21wdXRl
ZFNpemUgKz0gdmFsdWUuYXNDZWxsKCktPmluc3RhbmNlU2l6ZSgpOworICAgIH0KKworICAgIC8v
ICBzaXplIG9mIFNwYXJzZSB2YWx1ZSBtYXAKKyAgICAvLyAgRklYTUU6IEEgZ2VuZXJpYyBjbGFz
cy9tZXRob2QgY291bGQgcHJvYmFibHkgYmUgaW1wbGVtZW50ZWQKKyAgICAvLyAgdG8gbWVhc3Vy
ZSB0aGUgc2l6ZSBvZiBhbnkgSGFzaE1hcCBjb250YWluaW5nIEpTT2JqZWN0cworICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcDsKKyAgICBp
ZiAobWFwKSB7CisgICAgICAgIGNvbXB1dGVkU2l6ZSArPSBzaXplb2YoKm1hcCk7CisgICAgICAg
IGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0
ICE9IG1hcC0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGNvbXB1dGVkU2l6ZSArPSBzaXpl
b2YoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBpdC0+c2Vjb25kOwor
ICAgICAgICAgICAgaWYgKCB2YWx1ZSAhPSBKU1ZhbHVlKCkgJiYgdmFsdWUuaXNDZWxsKCkgKQor
ICAgICAgICAgICAgICAgIGNvbXB1dGVkU2l6ZSArPSB2YWx1ZS5hc0NlbGwoKS0+aW5zdGFuY2VT
aXplKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcHV0ZWRTaXplICs9
IHNpemVvZih2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAgRklYTUU6IE1lYXN1
cmUgc2l6ZSBvZiB0aGUgSlNPYmplY3QgcHJvcGVydHlNYXAgKHNlZSB0aGUgYWJvdmUgRklYTUUg
YXMgd2VsbCkKKyAgICAvLyAgSlNBcnJheSB3aWxsIHN0b3JlIG9iamVjdHMgd2l0aCBub24tbnVt
ZXJpYyBpZGVudGlmaWVycywgYW5kIHNvbWUgb3RoZXIgdHlwZXMKKyAgICAvLyAgKHNlZSB0aGUg
Y29tbWVudHMgYXQgdGhlIGJlZ2lubmluZyBvZiBKU0FycmF5LmNwcCkgaW4gaXRzIHByb3BlcnR5
IG1hcAorICAgIC8vICAoZWc6IGFyclsib2JqZWN0Il0pLCBzbyBpdCBpcyBpbXBvcnRhbnQgdG8g
bWVhc3VyZSB0aGlzLgorICAgIC8vICBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSBkb25lIGluIEpT
T2JqZWN0IGFuZCBhICdzdXBlcicgbWV0aG9kIHNob3VsZCBiZQorICAgIC8vICBjYWxsZWQuCisK
KyAgICByZXR1cm4gY29tcHV0ZWRTaXplOworfQorCiBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFy
cmF5KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKSk7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gNDQzMjEpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUpKTsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgc2l6
ZV90IGluc3RhbmNlU2l6ZSgpIGNvbnN0OworCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0
dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQ
cm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwpJbmRl
eDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gNDQzMjEpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcg
QEAKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNs
dWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlByb2ZpbGVyLmgiCiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03NiwxMyArNzcsMjAgQEAgZXh0ZXJu
IGNvbnN0IGRvdWJsZSBJbmYgPSBOYU5JbmYuZG91YmxlcwogIAogI2VuZGlmIC8vICEoZGVmaW5l
ZCBOQU4gJiYgZGVmaW5lZCBJTkZJTklUWSkKIAorYm9vbCBKU0NlbGw6Om1fZG9Db2xsZWN0QWxs
b2NhdGlvblRyYWNlcyA9IGZhbHNlOworCiB2b2lkKiBKU0NlbGw6Om9wZXJhdG9yIG5ldyhzaXpl
X3Qgc2l6ZSwgRXhlY1N0YXRlKiBleGVjKQogewogI2lmZGVmIEpBVkFTQ1JJUFRDT1JFX0JVSUxE
SU5HX0FMTF9JTl9PTkVfRklMRQotICAgIHJldHVybiBleGVjLT5oZWFwKCktPmlubGluZUFsbG9j
YXRlKHNpemUpOworICAgIHZvaWQqIGNlbGwgPSBleGVjLT5oZWFwKCktPmlubGluZUFsbG9jYXRl
KHNpemUpOwogI2Vsc2UKLSAgICByZXR1cm4gZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplKTsK
KyAgICB2b2lkKiBjZWxsID0gZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplKTsKICNlbmRpZgor
CisgICAgaWYgKFVOTElLRUxZKEpTQ2VsbDo6bV9kb0NvbGxlY3RBbGxvY2F0aW9uVHJhY2VzKSkK
KyAgICAgICAgKCpQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCkpLT5vYmplY3RD
cmVhdGVkKGV4ZWMsIHN0YXRpY19jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKKworICAgIHJldHVybiBj
ZWxsOwogfQogCiBib29sIEpTQ2VsbDo6Z2V0VUludDMyKHVpbnQzMl90JikgY29uc3QKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gNDQzMjEpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBleHBsaWNpdCBKU0NlbGwoU3RydWN0dXJlKik7CiAgICAgICAg
IHZpcnR1YWwgfkpTQ2VsbCgpOwogCisgICAgICAgIHN0YXRpYyBib29sIG1fZG9Db2xsZWN0QWxs
b2NhdGlvblRyYWNlczsKKwogICAgIHB1YmxpYzoKICAgICAgICAgLy8gUXVlcnlpbmcgdGhlIHR5
cGUuCiAgICAgICAgIGJvb2wgaXNOdW1iZXIoKSBjb25zdDsKQEAgLTk5LDYgKzEwMSwxMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBKU1ZhbHVlIGdldEpTTnVtYmVyKCk7CiAg
ICAgICAgIHZvaWQqIHZwdHIoKSB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHRo
aXMpOyB9CiAKKyAgICAgICAgdmlydHVhbCBzaXplX3QgaW5zdGFuY2VTaXplKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfTsKKyAgICAgICAgc3RhdGljIHZvaWQgc2V0RG9Db2xsZWN0QWxsb2NhdGlvblRy
YWNlcyhib29sIHNob3VsZENvbGxlY3QpIHsgbV9kb0NvbGxlY3RBbGxvY2F0aW9uVHJhY2VzID0g
c2hvdWxkQ29sbGVjdDsgfQorICAgICAgICBzdGF0aWMgYm9vbCBkb0NvbGxlY3RBbGxvY2F0aW9u
VHJhY2VzKCkgeyByZXR1cm4gbV9kb0NvbGxlY3RBbGxvY2F0aW9uVHJhY2VzOyB9CisKICAgICBw
cml2YXRlOgogICAgICAgICAvLyBCYXNlIGltcGxlbWVudGF0aW9uOyBmb3Igbm9uLW9iamVjdCBj
bGFzc2VzIGltcGxlbWVudHMgZ2V0UHJvcGVydHlTbG90LgogICAgICAgICBib29sIGZhc3RHZXRP
d25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCShyZXZpc2lvbiA0NDMyMSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBACiAjaW5jbHVk
ZSAiTnVtYmVyUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJQcm9maWxlci5oIgogI2luY2x1
ZGUgIlByb3RvdHlwZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiUmVnRXhwQ29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJSZWdFeHBNYXRjaGVzQXJyYXkuaCIKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmcuY3BwCShyZXZpc2lvbiA0NDMyMSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDE2IEBAIGJvb2wgSlNT
dHJpbmc6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3QKICAgICByZXR1cm4gSlNTdHJpbmc6Omdl
dE93blByb3BlcnR5U2xvdChleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFt
ZSksIHNsb3QpOwogfQogCitzaXplX3QgSlNTdHJpbmc6Omluc3RhbmNlU2l6ZSgpIGNvbnN0Cit7
CisgICAgc2l6ZV90IGNvbXB1dGVkU2l6ZSA9IHNpemVvZigqdGhpcyk7CisKKyAgICBjb21wdXRl
ZFNpemUgKz0gdmFsdWUoKS5zaXplKCkgKiBzaXplb2YoVUNoYXIpICsgdmFsdWUoKS5jb3N0KCk7
CisvLyAgRklYTUU6IEFkZCBzdHJ1Y3R1cmUgc2l6ZQorCisgICAgcmV0dXJuIGNvbXB1dGVkU2l6
ZTsKK30KKwogSlNTdHJpbmcqIGpzU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29u
c3QgVVN0cmluZyYgcykKIHsKICAgICBpbnQgc2l6ZSA9IHMuc2l6ZSgpOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gNDQzMjEpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVT
dHJ1Y3R1cmUoSlNWYWx1ZSBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG8s
IFR5cGVJbmZvKFN0cmluZ1R5cGUsIE5lZWRzVGhpc0NvbnZlcnNpb24pKTsgfQogCisgICAgICAg
IHZpcnR1YWwgc2l6ZV90IGluc3RhbmNlU2l6ZSgpIGNvbnN0OworCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgZW51bSBWUHRyU3RlYWxpbmdIYWNrVHlwZSB7IFZQdHJTdGVhbGluZ0hhY2sgfTsKICAg
ICAgICAgSlNTdHJpbmcoVlB0clN0ZWFsaW5nSGFja1R5cGUpIApJbmRleDogSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNwcAkocmV2aXNpb24gNDQzMjEpCisrKyBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQx
LDEzIEBAIEpTVmFsdWUgTnVtYmVyT2JqZWN0OjpnZXRKU051bWJlcigpCiAgICAgcmV0dXJuIGlu
dGVybmFsVmFsdWUoKTsKIH0KIAorc2l6ZV90IE51bWJlck9iamVjdDo6aW5zdGFuY2VTaXplKCkg
Y29uc3QKK3sKKy8vICBGSVhNRTogQXNpZGUgZnJvbSB0aGlzLCB3ZSBzaG91bGQgcHJvYmFibHkg
bWVhc3VyZSB0aGUgc2l6ZSBvZiB0aGUKKy8vICBzdHJ1Y3R1cmUvcHJvcGVydHkgbWFwIG9mIGFu
IG9iamVjdCAtIHNob3VsZCBwcm9iYWJseSBiZSBkb25lIGhpZ2VyIHVwCisgICAgcmV0dXJuIHNp
emVvZigqdGhpcyk7Cit9CisKIE51bWJlck9iamVjdCogY29uc3RydWN0TnVtYmVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBudW1iZXIpCiB7CiAgICAgTnVtYmVyT2JqZWN0KiBvYmplY3QgPSBu
ZXcgKGV4ZWMpIE51bWJlck9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bWJl
ck9iamVjdFN0cnVjdHVyZSgpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVy
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmpl
Y3QuaAkocmV2aXNpb24gNDQzMjEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIAorICAgICAgICB2aXJ0dWFs
IHNpemVfdCBpbnN0YW5jZVNpemUoKSBjb25zdDsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZp
cnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsg
fQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lv
biA0NDMyMSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTgsNCArOTgsMTYgQEAgSlNTdHJpbmcqIFN0cmluZ09iamVjdDo6dG9U
aGlzSlNTdHJpbmcoRQogICAgIHJldHVybiBpbnRlcm5hbFZhbHVlKCk7CiB9CiAKK3NpemVfdCBT
dHJpbmdPYmplY3Q6Omluc3RhbmNlU2l6ZSgpIGNvbnN0Cit7CisgICAgc2l6ZV90IGNvbXB1dGVk
U2l6ZSA9IHNpemVvZigqdGhpcyk7CisKKy8vICBBZGQgc2l6ZSBvZiB0aGUgY29udGFpbmVkIEpT
U3RyaW5nIG9iamVjdAorICAgIGNvbXB1dGVkU2l6ZSArPSBpbnRlcm5hbFZhbHVlKCktPmluc3Rh
bmNlU2l6ZSgpOworCisvLyAgRklYTUU6IEFkZCBzdHJ1Y3R1cmUgc2l6ZSAoaWYgdGhpcyBvYmpl
Y3QgaGFzIGEgU3RydWN0dXJlIG1lbWJlcikKKworICAgIHJldHVybiBjb21wdXRlZFNpemU7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09i
amVjdC5oCShyZXZpc2lvbiA0NDMyMSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlKSk7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIHNpemVfdCBpbnN0
YW5jZVNpemUoKSBjb25zdDsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFN0cmluZ09iamVjdChQ
YXNzUmVmUHRyPFN0cnVjdHVyZT4sIEpTU3RyaW5nKik7CiAKSW5kZXg6IFdlYkNvcmUvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NDMyMikKKysr
IFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMDkt
MDYtMDEgIEhvcmlhIE9sYXJ1ICA8b2xhcnVAYWRvYmUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAxMDkzMDogV2ViS2l0IGNvdWxkIGJl
bmVmaXQgZnJvbSBhIEphdmFTY3JpcHQgbGl2ZSBvYmplY3QgcHJvZmlsZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTMwCisKKyAgICAgICAgQWRk
ZWQgdHdvIG5ldyBoZWFkZXJzIHRvIGZvcndhcmQgSmF2YVNjcmlwdENvcmUgaGVhZGVycy4KKwor
ICAgICAgICBNb2RpZmllZCBDb2RlR2VuZXJhdG9ySlMucG0gdG8gY2hlY2sgZm9yIHRoZSAiSGFz
SW5zdGFuY2VTaXplIgorICAgICAgICBhdHRyaWJ1dGUgYW5kIGluc2VydCBhbiBpbnN0YW5jZVNp
emUgbWV0aG9kIGluIHRoZSBnZW5lcmF0ZWQgSlNPYmplY3RzLgorICAgICAgICBUaGlzIG1ldGhv
ZCBjYWxscyB0aGUgZWxlbWVudFNpemUgbWV0aG9kIGZyb20gdGhlIERPTSBvYmplY3QKKyAgICAg
ICAgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgQWRkZWQgYW4gZWxlbWVudFNpemUgbWV0aG9k
IHRvIEhUTUxJbWFnZUVsZW1lbnQgYW5kIHVwZGF0ZWQgdGhlIGlkbAorICAgICAgICB0byByZWZs
ZWN0IHRoaXMgZm9yIHRoZSBnZW5lcmF0b3Igc2NyaXB0LiBUaGlzIGlzIG5vdCBhIGNvbXBsZXRl
CisgICAgICAgIGltcGxlbWVudGF0aW9uIG9mIGEgc2l6ZSBmdW5jdGlvbiwgYnV0IGlzIGFkZGVk
IHRvIHByb3ZlIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgQWRkZWQgdGhlIEphdmFTY3JpcHRP
YmplY3RJZGVudGlmaWVyIHRvIHRoZSBpbnNwZWN0b3IuIFRoaXMgaXMgYSBjbGFzcworICAgICAg
ICBjb250YWluaW5nIHRoZSBKUyByZXByZXNlbnRhdGlvbiBvZiBhIHByb2ZpbGVyIGxpdmUgb2Jq
ZWN0LiBUaGUgbmV3CisgICAgICAgIG9iamVjdERhdGEgcHJvcGVydHkgYWRkZWQgdG8gdGhlIEph
dmFTY3JpcHRQcm9maWxlIGNsYXNzIGlzIGFuIEFycmF5CisgICAgICAgIG9mIHN1Y2ggb2JqZWN0
cy4KKworICAgICAgICBBZGRlZCB0aGUgc2V0TWVtb3J5UHJvZmlsaW5nRW5hYmxlZChib29sZWFu
KSBmdW5jdGlvbiB0byB0aGUgY29uc29sZQorICAgICAgICBvYmplY3QuIFRoaXMgaXMgYSB0ZW1w
b3JhcnkgYWRkaXRpb24sIHVudGlsIHRoZSBlbmFibGluZyBhbmQgZGlzYWJsaW5nIG9mCisgICAg
ICAgIG1lbW9yeSBwcm9maWxpbmcgaXMgaG9va2VkIGludG8gdGhlIGluc3BlY3RvciBVSS4KKwor
ICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3Byb2ZpbGVyL0xpdmVPYmplY3RzLmg6IEFkZGVk
LgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3Byb2ZpbGVyL09iamVjdElkZW50aWZpZXIu
aDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAq
IGh0bWwvSFRNTEltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VF
bGVtZW50OjplbGVtZW50U2l6ZSk6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50Lmg6
CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmlkbDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmdldElkKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFR5cGVOYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OmdldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q3JlYXRlZEZyb20pOgorICAg
ICAgICAoV2ViQ29yZTo6T2JqZWN0SWRlbnRpZmllckNsYXNzKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlMpOgorICAgICAgICAqIGluc3BlY3Rvci9KYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5o
OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Z2V0TGl2ZU9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UHJvZmls
ZUNsYXNzKToKKyAgICAgICAgKiBwYWdlL0NvbnNvbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29uc29sZTo6c2V0TWVtb3J5UHJvZmlsaW5nRW5hYmxlZCk6CisgICAgICAgICogcGFnZS9Db25z
b2xlLmg6CisgICAgICAgICogcGFnZS9Db25zb2xlLmlkbDoKKwogMjAwOS0wNS0yOCAgUGF2ZWwg
RmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBU
aW1vdGh5IEhhdGNoZXIuCkluZGV4OiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3Byb2ZpbGVy
L0xpdmVPYmplY3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9w
cm9maWxlci9MaXZlT2JqZWN0cy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy9wcm9maWxlci9MaXZlT2JqZWN0cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQg
QEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfTGl2ZU9iamVjdHNfaAorI2RlZmluZSBXZWJDb3JlX0ZX
RF9MaXZlT2JqZWN0c19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTGl2ZU9iamVjdHMuaD4K
KyNlbmRpZgpJbmRleDogV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9wcm9maWxlci9PYmplY3RJ
ZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9wcm9m
aWxlci9PYmplY3RJZGVudGlmaWVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL3Byb2ZpbGVyL09iamVjdElkZW50aWZpZXIuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX09iamVjdElkZW50aWZpZXJfaAorI2RlZmlu
ZSBXZWJDb3JlX0ZXRF9PYmplY3RJZGVudGlmaWVyX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9PYmplY3RJZGVudGlmaWVyLmg+CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NDMyMSkKKysrIFdlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MzA0LDYgKzQz
MDQsOCBAQAogCQlDMTA1REE2NDBGM0FBNkI4MDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMxMDVE
QTYzMEYzQUE2QjgwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdEZXRlY3Rvci5oICovOyB9OwogCQlD
NkQ3NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFEMzA5QUEy
ODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggKi87IH07CiAJCUM2RDc0
QUU0MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRTMwOUFBMjkw
QTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi87IH07CisJCUNCMTEw
MDRFMEY5NDhBNzcwMEU1ODM3OSAvKiBKYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0IxMTAwNEQwRjk0OEE3
NzAwRTU4Mzc5IC8qIEphdmFTY3JpcHRPYmplY3RJZGVudGlmaWVyLmggKi87IH07CisJCUNCMTEw
MDUyMEY5NDhBRjYwMEU1ODM3OSAvKiBKYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDQjExMDA1MTBGOTQ4
QUY2MDBFNTgzNzkgLyogSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuY3BwICovOyB9OwogCQlE
MDVDRUQyOTBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwNUNFRDI3MEE0MEJCMkMw
MEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwICovOyB9OwogCQlEMDVDRUQyQTBBNDBC
QjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDVDRUQyODBBNDBCQjJDMDBDNUFGMzggLyogRm9y
bWF0QmxvY2tDb21tYW5kLmggKi87IH07CiAJCUQwNkMwRDhGMENGRDExNDYwMDY1RjQzRiAvKiBS
ZW1vdmVGb3JtYXRDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBEMDZDMEQ4RDBDRkQxMTQ2MDA2NUY0M0YgLyogUmVtb3ZlRm9ybWF0Q29tbWFu
ZC5oICovOyB9OwpAQCAtOTE0Nyw2ICs5MTQ5LDggQEAKIAkJQzEwNURBNjMwRjNBQTZCODAwMURE
NDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRleHRFbmNvZGluZ0RldGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExl
dmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBC
MEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0IxMTAwNEQwRjk0OEE3NzAwRTU4Mzc5IC8qIEphdmFTY3Jp
cHRPYmplY3RJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEph
dmFTY3JpcHRPYmplY3RJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUNCMTEwMDUxMEY5NDhBRjYwMEU1ODM3OSAvKiBKYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKYXZhU2NyaXB0T2JqZWN0
SWRlbnRpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwNUNFRDI3MEE0
MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1hdEJsb2NrQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUQwNUNFRDI4MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9j
a0NvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1hdEJsb2Nr
Q29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDZDMEQ4RDBDRkQxMTQ2
MDA2NUY0M0YgLyogUmVtb3ZlRm9ybWF0Q29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW1vdmVGb3JtYXRDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC05NzgzLDYgKzk3ODcsOCBAQAogCQkJCTdBQjZGODg1MEZCOUQyNzEwMDgwNUQwMiAv
KiBKU09OT2JqZWN0LmNwcCAqLywKIAkJCQk3QUI2Rjg4NjBGQjlEMjcxMDA4MDVEMDIgLyogSlNP
Tk9iamVjdC5oICovLAogCQkJCUJDQzY0RjVGMERDRkI4NEUwMDgxRUYzQiAvKiBsb2NhbGl6ZWRT
dHJpbmdzLmpzICovLAorCQkJCUNCMTEwMDUxMEY5NDhBRjYwMEU1ODM3OSAvKiBKYXZhU2NyaXB0
T2JqZWN0SWRlbnRpZmllci5jcHAgKi8sCisJCQkJQ0IxMTAwNEQwRjk0OEE3NzAwRTU4Mzc5IC8q
IEphdmFTY3JpcHRPYmplY3RJZGVudGlmaWVyLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGluc3Bl
Y3RvcjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMTc1NSw5ICsxMTc2MSw5IEBA
CiAJCQkJODU1NTQyOTcwQUE0OTM4ODAwQkE4OUYyIC8qIEhUTUxJRnJhbWVFbGVtZW50LmlkbCAq
LywKIAkJCQlBOEVBN0QyOTBBMTkzODU1MDBBOEVGNUYgLyogSFRNTEltYWdlRWxlbWVudC5jcHAg
Ki8sCiAJCQkJQThFQTdEMjUwQTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxJbWFnZUVsZW1lbnQuaCAq
LywKLQkJCQkxQUUyQUE3OTBBMUNEQzYxMDBCNDJCMjUgLyogSFRNTEltYWdlRWxlbWVudC5pZGwg
Ki8sCiAJCQkJQThFQTdEMjgwQTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxJbWFnZUxvYWRlci5jcHAg
Ki8sCiAJCQkJQThFQTdEMjMwQTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxJbWFnZUxvYWRlci5oICov
LAorCQkJCTFBRTJBQTc5MEExQ0RDNjEwMEI0MkIyNSAvKiBIVE1MSW1hZ2VFbGVtZW50LmlkbCAq
LywKIAkJCQlBODEzNjlCMTA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTElucHV0RWxlbWVudC5jcHAg
Ki8sCiAJCQkJQTgxMzY5QjAwOTczNzRGNTAwRDc0NDYzIC8qIEhUTUxJbnB1dEVsZW1lbnQuaCAq
LywKIAkJCQlBODBFN0UxNzBBMUE3Q0NCMDA3RkI4QzUgLyogSFRNTElucHV0RWxlbWVudC5pZGwg
Ki8sCkBAIC0xNjk0NSw2ICsxNjk1MSw3IEBACiAJCQkJMjlBODEyNDkwRkJCOUNBOTAwNTEwMjkz
IC8qIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEE4
MUYzRTBGQzdERkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg0QTgxRjQyMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmggaW4gSGVhZGVycyAq
LywKKwkJCQlDQjExMDA0RTBGOTQ4QTc3MDBFNTgzNzkgLyogSmF2YVNjcmlwdE9iamVjdElkZW50
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4QzkyNTFBMEZDQzdDNEEwMDQ4MERFQyAvKiBG
aWx0ZXJFZmZlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4MjM0MUM2MEZDRjNBOTUwMEQ3NUJE
NiAvKiBXTUxTZWxlY3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDVFNzJGODBGRDI2
MUVFMDBBODdENzkgLyogRmlsdGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTE4OTY5LDYgKzE4OTc2
LDcgQEAKIAkJCQkyOUE4MTI0QjBGQkI5Q0E5MDA1MTAyOTMgLyogQVhPYmplY3RDYWNoZU1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTg0QTgxRjNEMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VB
bHBoYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NEE4MUY0MTBGQzdFMDI3MDA5NTUzMDAgLyog
U291cmNlR3JhcGhpYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDQjExMDA1MjBGOTQ4QUY2MDBF
NTgzNzkgLyogSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDhDOTI1MTkwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwODIzNDFDNTBGQ0YzQTk1MDBENzVCRDYgLyogV01MU2VsZWN0RWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NDVFNzJGQjBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmls
dGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiA0NDMyMSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTU3NCw2ICs1NzQs
MTAgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzSW5zdGFuY2VTaXplIn0pIHsKKyAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIHNpemVfdCBpbnN0YW5jZVNpemUo
KSBjb25zdDtcbiIpOworICAgIH0KKwogICAgIGlmICghJGhhc1BhcmVudCkgewogICAgICAgICBp
ZiAoJHBvZFR5cGUpIHsKICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlNT
VkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4qIGltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwu
Z2V0KCk7IH1cbiIpOwpAQCAtMTMzNiw2ICsxMzQwLDEzIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9CiAKKyAg
ICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzSW5zdGFuY2VTaXplIn0p
IHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzaXplX3QgJHtjbGFzc05hbWV9OjppbnN0
YW5jZVNpemUoKSBjb25zdFxue1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICRpbXBsQ2xhc3NOYW1lKiBpbXAgPSBzdGF0aWNfY2FzdDwke2ltcGxDbGFzc05hbWV9Kj4oaW1w
bCgpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gaW1wLT5l
bGVtZW50U2l6ZSgpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsK
KyAgICB9CisKICAgICAjIEZ1bmN0aW9ucwogICAgIGlmICgkbnVtRnVuY3Rpb25zID4gMCkgewog
ICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ0MzIxKQorKysgV2Vi
Q29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0
MCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKK3NpemVfdCBIVE1MSW1hZ2VFbGVtZW50OjplbGVtZW50U2l6ZSgpIGNvbnN0Cit7CisgICAg
c2l6ZV90IGNvbXB1dGVkU2l6ZSA9IHNpemVvZih0aGlzKTsKKworICAgIC8vc2hvdWxkIHdlIGNv
bXB1dGUgYW5kIGFkZCB0aGUgcmVuZGVyIGFyZWEgc2l6ZT8KKyAgICBpZihjYWNoZWRJbWFnZSgp
ICYmIGNhY2hlZEltYWdlKCktPmltYWdlKCktPmRhdGEoKSkKKyAgICAgICAgY29tcHV0ZWRTaXpl
ICs9IGNhY2hlZEltYWdlKCktPmltYWdlKCktPmRhdGEoKS0+c2l6ZSgpOworCisgICAgcmV0dXJu
IGNvbXB1dGVkU2l6ZTsKK30KKwogSFRNTEltYWdlRWxlbWVudDo6SFRNTEltYWdlRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1l
bnQqIGZvcm0pCiAgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX2ltYWdl
TG9hZGVyKHRoaXMpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDQ0MzIx
KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE1LDYgKzExNSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJj
ZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIAorICAgIHNpemVfdCBl
bGVtZW50U2l6ZSgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIEhUTUxJbWFnZUxvYWRlciBtX2lt
YWdlTG9hZGVyOwogICAgIFN0cmluZyB1c2VtYXA7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElt
YWdlRWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1l
bnQuaWRsCShyZXZpc2lvbiA0NDMyMSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQCBtb2R1bGUgaHRtbCB7CiAKICAg
ICBpbnRlcmZhY2UgWwogICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yLAorICAgICAgICBIYXNJ
bnN0YW5jZVNpemUsCiAgICAgICAgIEludGVyZmFjZVVVSUQ9YjIxYjgxMjUtZDAwYi00YmRmLWIw
ZTgtNjU5Njc4ZGIzOTIzLAogICAgICAgICBJbXBsZW1lbnRhdGlvblVVSUQ9MjEyMWNhMjEtODEx
OC00ZjFiLWI5ZmUtNDc4OGE5MDUwMjgxCiAgICAgXSBIVE1MSW1hZ2VFbGVtZW50IDogSFRNTEVs
ZW1lbnQgewpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdE9iamVjdElkZW50aWZp
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRPYmplY3RJ
ZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3Jp
cHRPYmplY3RJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9yaWEgT2xhcnUgPG9sYXJ1QGFkb2JlLmNvbT4uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkphdmFTY3Jp
cHRPYmplY3RJZGVudGlmaWVyLmgiCisKKyNpbmNsdWRlICJwcm9maWxlci9Qcm9maWxlTm9kZS5o
IgorI2luY2x1ZGUgInByb2ZpbGVyL09iamVjdElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJKYXZh
U2NyaXB0Q29yZS9BUElDYXN0LmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdENvcmUvSlNPYmplY3RS
ZWYuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oIgorI2luY2x1ZGUg
IkphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdENvcmUv
SlNJbW1lZGlhdGUuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0UHJvZmlsZU5vZGUuaCIKKyNpbmNs
dWRlIDxydW50aW1lL0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+CisK
KwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
SlNWYWx1ZVJlZiBnZXRJZChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiopCit7CisgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3RP
ZkNsYXNzKGN0eCwgdGhpc09iamVjdCwgT2JqZWN0SWRlbnRpZmllckNsYXNzKCkpKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIE9iamVjdElkZW50aWZp
ZXIqIG9iaiA9IHN0YXRpY19jYXN0PE9iamVjdElkZW50aWZpZXIqPihKU09iamVjdEdldFByaXZh
dGUodGhpc09iamVjdCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjdHgsIG9iai0+
bV9pZCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGdldFR5cGVOYW1lKEpTQ29udGV4dFJlZiBj
dHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKikKK3sK
KyAgICBpZiAoIUpTVmFsdWVJc09iamVjdE9mQ2xhc3MoY3R4LCB0aGlzT2JqZWN0LCBPYmplY3RJ
ZGVudGlmaWVyQ2xhc3MoKSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
dHgpOworCisgICAgT2JqZWN0SWRlbnRpZmllciogb2JqID0gc3RhdGljX2Nhc3Q8T2JqZWN0SWRl
bnRpZmllcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IHR5cGVOYW1lU3RyaW5nKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKG9iai0+bV90eXBlLmRhdGEoKSwgb2JqLT5tX3R5cGUuc2l6ZSgpKSk7CisgICAg
cmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGN0eCwgdHlwZU5hbWVTdHJpbmcuZ2V0KCkpOworfQor
CitzdGF0aWMgSlNWYWx1ZVJlZiBnZXRTaXplKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKikKK3sKKyAgICBpZiAoIUpTVmFs
dWVJc09iamVjdE9mQ2xhc3MoY3R4LCB0aGlzT2JqZWN0LCBPYmplY3RJZGVudGlmaWVyQ2xhc3Mo
KSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworCisgICAgT2Jq
ZWN0SWRlbnRpZmllciogb2JqID0gc3RhdGljX2Nhc3Q8T2JqZWN0SWRlbnRpZmllcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVy
KGN0eCwgb2JqLT5tX3NpemUpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBnZXRDcmVhdGVkRnJv
bShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwg
SlNWYWx1ZVJlZiopCit7CisgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGN0eCwgdGhp
c09iamVjdCwgT2JqZWN0SWRlbnRpZmllckNsYXNzKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIE9iamVjdElkZW50aWZpZXIqIG9iaiA9IHN0YXRp
Y19jYXN0PE9iamVjdElkZW50aWZpZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKKyAgICByZXR1cm4gdG9SZWYoZXhl
YywgdG9KUyhleGVjLCBvYmotPm1fY3JlYXRpbmdGdW5jdGlvbi5nZXQoKSkpOworfQorCitKU0Ns
YXNzUmVmIE9iamVjdElkZW50aWZpZXJDbGFzcygpCit7CisgICAgc3RhdGljIEpTU3RhdGljVmFs
dWUgc3RhdGljVmFsdWVzW10gPSB7CisgICAgICAgIHsgImlkIiwgZ2V0SWQsIDAsIGtKU1Byb3Bl
cnR5QXR0cmlidXRlTm9uZSB9LAorICAgICAgICB7ICJ0eXBlTmFtZSIsIGdldFR5cGVOYW1lLCAw
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKKyAgICAgICAgeyAic2l6ZSIsIGdldFNpemUs
IDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAorICAgICAgICB7ICJjcmVhdGVkRnJvbSIs
IGdldENyZWF0ZWRGcm9tLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKKyAgICAgICAg
eyAwLCAwLCAwLCAwIH0KKyAgICB9OworCisgICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNs
YXNzRGVmaW5pdGlvbiA9IHsKKyAgICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiT2Jq
ZWN0SWRlbnRpZmllciIsIDAsIHN0YXRpY1ZhbHVlcywgMCwKKyAgICAgICAgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMAorICAgIH07CisKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBvYmpl
Y3RJbmZvQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOworICAgIHJldHVy
biBvYmplY3RJbmZvQ2xhc3M7Cit9CisKK0pTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIE9i
amVjdElkZW50aWZpZXIqIG9iamVjdEluZm8pCit7CisgICAgaWYgKCFvYmplY3RJbmZvKQorICAg
ICAgICByZXR1cm4ganNOdWxsKCk7CisKKyAgICAvL0ZJWE1FOiBtYXkgbmVlZCB0byBjYWNoZSB0
aGUgdHJhbnNmb3JtZWQgSlMgb2JqZWN0cy4KKyAgICBKU09iamVjdCogb2JqZWN0SW5mb1dyYXBw
ZXIgPSB0b0pTKEpTT2JqZWN0TWFrZSh0b1JlZihleGVjKSwgT2JqZWN0SWRlbnRpZmllckNsYXNz
KCksIHN0YXRpY19jYXN0PHZvaWQqPihvYmplY3RJbmZvKSkpOworICAgIHJldHVybiBvYmplY3RJ
bmZvV3JhcHBlcjsKK30KKworfQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdE9i
amVjdElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2Ny
aXB0T2JqZWN0SWRlbnRpZmllci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9pbnNwZWN0b3Iv
SmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBIb3JpYSBPbGFydSA8b2xhcnVAYWRvYmUuY29t
Pi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEphdmFTY3JpcHRPYmplY3RJbmZvcm1hdGlv
bl9oCisjZGVmaW5lIEphdmFTY3JpcHRPYmplY3RJbmZvcm1hdGlvbl9oCisKKyNpbmNsdWRlIDxy
dW50aW1lL0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisgICAgY2xhc3MgRXhlY1N0YXRlOworICAgIGNsYXNzIE9iamVjdElk
ZW50aWZpZXI7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIEpTQ2xhc3NSZWYgT2Jq
ZWN0SWRlbnRpZmllckNsYXNzKCk7CisgICAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6Ok9iamVjdElkZW50aWZpZXIqKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZS5jcHAJKHJl
dmlzaW9uIDQ0MzIxKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSwxMyBAQAogI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQogCiAjaW5jbHVkZSAiSmF2YVNjcmlwdFByb2ZpbGVOb2RlLmgiCisjaW5jbHVk
ZSAiSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxwcm9maWxlci9Qcm9m
aWxlLmg+CisjaW5jbHVkZSA8cHJvZmlsZXIvTGl2ZU9iamVjdHMuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0
UmVmLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTU3RyaW5nUmVmLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT3BhcXVlSlNTdHJpbmcu
aD4KICNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+CkBAIC0xMzEsNiArMTM1LDU0IEBAIHN0
YXRpYyBKU1ZhbHVlUmVmIHJlc3RvcmVBbGwoSlNDb250ZXh0UmUKICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY3R4KTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgZ2V0TGl2ZU9iamVj
dHMoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYs
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBQcm9maWxlKiBwcm9maWxlID0gc3RhdGlj
X2Nhc3Q8UHJvZmlsZSo+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgaWYg
KCFwcm9maWxlKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKwor
ICAgIFZlY3RvcjxPYmplY3RJZGVudGlmaWVyKiA+IG9iamVjdHM7CisgICAgcHJvZmlsZS0+bGl2
ZU9iamVjdHMoKS0+dG9WZWN0b3Iob2JqZWN0cyk7CisKKyAgICBKU09iamVjdFJlZiBnbG9iYWwg
PSBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY3R4KTsKKworCisgICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IGFycmF5U3RyaW5nKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiQXJyYXkiKSk7CisKKyAgICBKU1ZhbHVlUmVmIGFycmF5UHJvcGVydHkgPSBKU09iamVjdEdl
dFByb3BlcnR5KGN0eCwgZ2xvYmFsLCBhcnJheVN0cmluZy5nZXQoKSwgZXhjZXB0aW9uKTsKKyAg
ICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRpb24pCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjdHgpOworCisgICAgSlNPYmplY3RSZWYgYXJyYXlDb25zdHJ1Y3RvciA9IEpT
VmFsdWVUb09iamVjdChjdHgsIGFycmF5UHJvcGVydHksIGV4Y2VwdGlvbik7CisgICAgaWYgKGV4
Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY3R4KTsKKworICAgIEpTT2JqZWN0UmVmIHJlc3VsdCA9IEpTT2JqZWN0Q2FsbEFzQ29uc3Ry
dWN0b3IoY3R4LCBhcnJheUNvbnN0cnVjdG9yLCAwLCAwLCBleGNlcHRpb24pOworICAgIGlmIChl
eGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGN0eCk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcHVzaFN0cmluZyhBZG9w
dCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInB1c2giKSk7CisKKyAgICBKU1ZhbHVl
UmVmIHB1c2hQcm9wZXJ0eSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY3R4LCByZXN1bHQsIHB1c2hT
dHJpbmcuZ2V0KCksIGV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9u
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIEpTT2Jq
ZWN0UmVmIHB1c2hGdW5jdGlvbiA9IEpTVmFsdWVUb09iamVjdChjdHgsIHB1c2hQcm9wZXJ0eSwg
ZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRpb24pCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBvYmplY3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRv
SlMoY3R4KTsKKyAgICAgICAgSlNWYWx1ZVJlZiBvYmogPSB0b1JlZihleGVjLCB0b0pTKGV4ZWMs
IG9iamVjdHNbaV0pKTsKKworICAgICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGN0eCwgcHVz
aEZ1bmN0aW9uLCByZXN1bHQsIDEsICZvYmosIGV4Y2VwdGlvbik7CisgICAgICAgIGlmIChleGNl
cHRpb24gJiYgKmV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjdHgpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyB2b2lk
IGZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVjdCkKIHsKICAgICBQcm9maWxlKiBwcm9maWxlID0g
c3RhdGljX2Nhc3Q8UHJvZmlsZSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKQEAgLTE0
Myw2ICsxOTUsNyBAQCBKU0NsYXNzUmVmIFByb2ZpbGVDbGFzcygpCiAgICAgc3RhdGljIEpTU3Rh
dGljVmFsdWUgc3RhdGljVmFsdWVzW10gPSB7CiAgICAgICAgIHsgInRpdGxlIiwgZ2V0VGl0bGVD
YWxsYmFjaywgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCiAgICAgICAgIHsgImhlYWQi
LCBnZXRIZWFkQ2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAorICAgICAg
ICB7ICJsaXZlT2JqZWN0cyIsIGdldExpdmVPYmplY3RzLDAsIGtKU1Byb3BlcnR5QXR0cmlidXRl
Tm9uZSB9LAogICAgICAgICB7ICJ1aWQiLCBnZXRVbmlxdWVJZENhbGxiYWNrLCAwLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKICAgICAgICAgeyAwLCAwLCAwLCAwIH0KICAgICB9OwpJbmRl
eDogV2ViQ29yZS9wYWdlL0NvbnNvbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9D
b25zb2xlLmNwcAkocmV2aXNpb24gNDQzMjEpCisrKyBXZWJDb3JlL3BhZ2UvQ29uc29sZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxMCw2ICszMTAsMTkgQEAgdm9pZCBDb25zb2xlOjpwcm9maWxl
RW5kKGNvbnN0IEpTQzo6VVN0cgogICAgIH0KIH0KIAordm9pZCBDb25zb2xlOjpzZXRNZW1vcnlQ
cm9maWxpbmdFbmFibGVkKGJvb2wgaXNFbmFibGVkKQoreworICAgIFBhZ2UqIHBhZ2UgPSB0aGlz
LT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhN
RTogbG9nIGEgY29uc29sZSBtZXNzYWdlIHdoZW4gcHJvZmlsaW5nIGlzIGRpc2FibGVkLgorICAg
IGlmICghcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5wcm9maWxlckVuYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgSlNDOjpQcm9maWxlcjo6cHJvZmlsZXIoKS0+c2V0SXNNZW1v
cnlQcm9maWxpbmcoaXNFbmFibGVkKTsKK30KKwogI2VuZGlmCiAgICAgCiB2b2lkIENvbnNvbGU6
OnRpbWUoY29uc3QgU3RyaW5nJiB0aXRsZSkKSW5kZXg6IFdlYkNvcmUvcGFnZS9Db25zb2xlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0NvbnNvbGUuaAkocmV2aXNpb24gNDQzMjEpCisr
KyBXZWJDb3JlL3BhZ2UvQ29uc29sZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5Myw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAg
ICAgICAgdm9pZCBwcm9maWxlKGNvbnN0IEpTQzo6VVN0cmluZyYsIFNjcmlwdENhbGxTdGFjayop
OwogICAgICAgICB2b2lkIHByb2ZpbGVFbmQoY29uc3QgSlNDOjpVU3RyaW5nJiwgU2NyaXB0Q2Fs
bFN0YWNrKik7CisgICAgICAgIC8vIFRoaXMgaXMgdGVtcG9yYXJ5LCB1bnRpbCBhIGhvb2sgaXMg
YWRkZWQgdG8gdGhlIFVJL0luc3BlY3RvciB0byBlbmFibGUgb3IgCisgICAgICAgIC8vIGRpc2Fi
bGUgbWVtb3J5IHByb2ZpbGluZworICAgICAgICB2b2lkIHNldE1lbW9yeVByb2ZpbGluZ0VuYWJs
ZWQoYm9vbCBpc0VuYWJsZWQpOwogI2VuZGlmCiAgICAgICAgIHZvaWQgdGltZShjb25zdCBTdHJp
bmcmKTsKICAgICAgICAgdm9pZCB0aW1lRW5kKGNvbnN0IFN0cmluZyYsIFNjcmlwdENhbGxTdGFj
ayopOwpJbmRleDogV2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9Db25zb2xlLmlkbAkocmV2aXNpb24gNDQzMjEpCisrKyBXZWJDb3JlL3BhZ2UvQ29u
c29sZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgbW9kdWxlIHdpbmRvdyB7
CiAjaWYgZGVmaW5lZChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFX0pBVkFT
Q1JJUFRfREVCVUdHRVIKICAgICAgICAgW0N1c3RvbUFyZ3VtZW50SGFuZGxpbmddIHZvaWQgcHJv
ZmlsZShpbiBbQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHRp
dGxlKTsKICAgICAgICAgW0N1c3RvbUFyZ3VtZW50SGFuZGxpbmddIHZvaWQgcHJvZmlsZUVuZChp
biBbQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHRpdGxlKTsK
KyAgICAgICAgdm9pZCBzZXRNZW1vcnlQcm9maWxpbmdFbmFibGVkKGluIGJvb2xlYW4gaXNFbmFi
bGVkKTsKICNlbmRpZgogCiAgICAgICAgIHZvaWQgdGltZShpbiBbQ29udmVydFVuZGVmaW5lZE9y
TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHRpdGxlKTsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ0
MzIyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTYgQEAKKzIwMDktMDYtMDEgIEhvcmlhIE9sYXJ1ICA8b2xhcnVAYWRvYmUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAxMDkzMDogV2Vi
S2l0IGNvdWxkIGJlbmVmaXQgZnJvbSBhIEphdmFTY3JpcHQgbGl2ZSBvYmplY3QgcHJvZmlsZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTMwCisK
KyAgICAgICAgVGhlIHNldE1lbW9yeVByb2ZpbGluZ0VuYWJlZCBmdW5jdGlvbiB3YXMgYWRkZWQg
dG8gdGhlIHdpbmRvdy5jb25zb2xlLgorICAgICAgICBUaGlzIGFkZGl0aW9uIGNhdXNlZCB0aGUg
ZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwgdGVzdCB0byBmYWlsLgorICAg
ICAgICBBZGRlZCB0aGUgZXh0cmEgZnVuY3Rpb24gdG8gdGhlIGV4cGVjdGVkIHJlc3VsdHMuCisK
KyAgICAgICAgKiBmYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0
OgorCiAyMDA5LTA2LTAxICBEcmV3IFdpbHNvbiAgPGF0d2lsc29uQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuICBMYW5kZWQgYnkgQWRhbSBCYXJ0aC4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1w
cm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDQzMjEpCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xNjMyLDYgKzE2MzIsNyBAQCB3aW5kb3cuY29uc29sZS5sb2cgW2Z1bmN0aW9uXQog
d2luZG93LmNvbnNvbGUucHJvZmlsZSBbZnVuY3Rpb25dCiB3aW5kb3cuY29uc29sZS5wcm9maWxl
RW5kIFtmdW5jdGlvbl0KIHdpbmRvdy5jb25zb2xlLnByb2ZpbGVzIFtvYmplY3QgQXJyYXldCit3
aW5kb3cuY29uc29sZS5zZXRNZW1vcnlQcm9maWxpbmdFbmFibGVkIFtmdW5jdGlvbl0KIHdpbmRv
dy5jb25zb2xlLnRpbWUgW2Z1bmN0aW9uXQogd2luZG93LmNvbnNvbGUudGltZUVuZCBbZnVuY3Rp
b25dCiB3aW5kb3cuY29uc29sZS50cmFjZSBbZnVuY3Rpb25dCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31295</attachid>
            <date>2009-06-15 09:50:33 -0700</date>
            <delta_ts>2009-06-24 12:03:31 -0700</delta_ts>
            <desc>Adds live object profiling capabilities</desc>
            <filename>svnProfilerPatch03_final</filename>
            <type>text/plain</type>
            <size>66514</size>
            <attacher name="Horia Olaru">olaru</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ0Njg5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODAgQEAKKzIwMDktMDYtMTUgIEhvcmlhIE9s
YXJ1ICA8b2xhcnVAYWRvYmUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEJ1ZyAxMDkzMDogV2ViS2l0IGNvdWxkIGJlbmVmaXQgZnJvbSBhIEph
dmFTY3JpcHQgbGl2ZSBvYmplY3QgcHJvZmlsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTMwCisKKyAgICAgICAgQWRkZWQgaW5zdGFuY2VTaXpl
IG1ldGhvZCBvbiBKU0NlbGwgdG8gYmUgaW5oZXJpdGVkIGJ5IG90aGVyIEpTIG9iamVjdHMuCisg
ICAgICAgIEltcGxlbWVudGVkIGluc3RhbmNlU2l6ZSBmb3IgYSBmZXcgYmFzaWMgdHlwZXMuCisK
KyAgICAgICAgQWRkZWQgdGhlIExpdmVPYmplY3RzIGNsYXNzIHRvIGNvbnRhaW4gYSBtYXBwaW5n
IGJldHdlZW4gSlNDZWxscyBhbmQKKyAgICAgICAgUHJvZmlsZU5vZGVzLCB0byByZWNvcmQgc3Rh
Y2sgdHJhY2VzIGZvciBvYmplY3QgY3JlYXRpb24uIFRoZSBtZXRob2RzCisgICAgICAgIGluIHRo
aXMgY2xhc3MgaGF2ZSBiZWVuIGV4cG9zZWQgdXAgdG8gdGhlIFByb2ZpbGVyIGNsYXNzLiBUaGVz
ZSBtZXRob2RzCisgICAgICAgIGFyZSBjYWxsZWQgYXQgY2VsbCBhbGxvY2F0aW9uIGFuZCBjb2xs
ZWN0aW9uIHRpbWUsIHRvIHJlY29yZCB0aGUgSlMKKyAgICAgICAgZnVuY3Rpb24gdGhhdCBjcmVh
dGVkIHRoZSBvYmplY3QuCisKKyAgICAgICAgQWRkZWQgdGhlIE9iamVjdElkZW50aWZpZXIgc3Ry
dWN0dXJlLCB1c2VkIHRvIHJlcHJlc2VudCBsaXZlIG9iamVjdHMKKyAgICAgICAgYW5kIGFnZ3Jl
Z2F0ZSByZWxldmFudCBkYXRhIGZvciB0aGVtLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
ZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogcHJvZmlsZXIvTGl2ZU9iamVjdHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6TGl2ZU9iamVjdHM6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjpMaXZl
T2JqZWN0cyk6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjp+TGl2ZU9iamVjdHMpOgorICAg
ICAgICAoSlNDOjpMaXZlT2JqZWN0czo6YWRkTm9kZSk6CisgICAgICAgIChKU0M6OkxpdmVPYmpl
Y3RzOjpyZW1vdmVOb2RlKToKKyAgICAgICAgKEpTQzo6TGl2ZU9iamVjdHM6OmlzRnJlZSk6Cisg
ICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjp0b1ZlY3Rvcik6CisgICAgICAgICogcHJvZmlsZXIv
TGl2ZU9iamVjdHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjppc0VtcHR5
KToKKyAgICAgICAgKEpTQzo6TGl2ZU9iamVjdHM6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6TGl2
ZU9iamVjdHM6OmVuZCk6CisgICAgICAgICogcHJvZmlsZXIvT2JqZWN0SWRlbnRpZmllci5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0SWRlbnRpZmllcjo6T2JqZWN0SWRlbnRpZmllcik6
CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGU6
OlByb2ZpbGUpOgorICAgICAgICAoSlNDOjpQcm9maWxlOjpsaXZlT2JqZWN0cyk6CisgICAgICAg
IChKU0M6OlByb2ZpbGU6Om9iamVjdENyZWF0ZWQpOgorICAgICAgICAoSlNDOjpQcm9maWxlOjpv
YmplY3RDb2xsZWN0ZWQpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGUuaDoKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZUdl
bmVyYXRvcjo6b2JqZWN0Q3JlYXRlZCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVHZW5lcmF0b3I6
Om9iamVjdENvbGxlY3RlZCk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5o
OgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmls
ZXI6OlByb2ZpbGVyKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OnByb2ZpbGVyKToKKyAgICAg
ICAgKEpTQzo6UHJvZmlsZXI6On5Qcm9maWxlcik6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpz
dGFydFByb2ZpbGluZyk6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpzdG9wUHJvZmlsaW5nKToK
KyAgICAgICAgKEpTQzo6ZGlzcGF0Y2hPYmplY3RUb1Byb2ZpbGVzKToKKyAgICAgICAgKEpTQzo6
UHJvZmlsZXI6Om9iamVjdENyZWF0ZWQpOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6b2JqZWN0
Q29sbGVjdGVkKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlci5oOgorICAgICAgICAoSlND
OjpQcm9maWxlcjo6c2V0SXNNZW1vcnlQcm9maWxpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvQ29s
bGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6c3dlZXApOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6Omluc3RhbmNlU2l6ZSk6Cisg
ICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuY3Bw
OgorICAgICAgICAoSlNDOjpKU0NlbGw6Om9wZXJhdG9yIG5ldyk6CisgICAgICAgICogcnVudGlt
ZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbnN0YW5jZVNpemUpOgorICAgICAg
ICAoSlNDOjpKU0NlbGw6OnNldERvQ29sbGVjdEFsbG9jYXRpb25UcmFjZXMpOgorICAgICAgICAo
SlNDOjpKU0NlbGw6OmRvQ29sbGVjdEFsbG9jYXRpb25UcmFjZXMpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6aW5zdGFuY2VTaXplKToK
KyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAgICogcnVudGltZS9OdW1iZXJP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJPYmplY3Q6Omluc3RhbmNlU2l6ZSk6Cisg
ICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cmlu
Z09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6aW5zdGFuY2VTaXplKToK
KyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5oOgorCiAyMDA5LTA2LTEyICBEYXZlIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJs
c3Nvbi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDQ0NjgyKQor
KysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MjQsOCArMzI0LDEwIEBAIF9fWk4zV1RGOENvbGxhdG9yRDFFdgogX19aTjNXVEY4ZmFzdEZyZWVF
UHYKIF9fWk4zV1RGOUJ5dGVBcnJheTZjcmVhdGVFbQogX19aTkszSlNDMTFJbnRlcnByZXRlcjE0
cmV0cmlldmVDYWxsZXJFUE5TXzlFeGVjU3RhdGVFUE5TXzE2SW50ZXJuYWxGdW5jdGlvbkUKLV9f
Wk5LM0pTQzExSW50ZXJwcmV0ZXIxOHJldHJpZXZlTGFzdENhbGxlckVQTlNfOUV4ZWNTdGF0ZUVS
aVJsUk5TXzdVU3RyaW5nRVJOU183SlNWYWx1ZUUgIAorX19aTkszSlNDMTFJbnRlcnByZXRlcjE4
cmV0cmlldmVMYXN0Q2FsbGVyRVBOU185RXhlY1N0YXRlRVJpUmxSTlNfN1VTdHJpbmdFUk5TXzdK
U1ZhbHVlRQorX19aTkszSlNDMTFMaXZlT2JqZWN0czh0b1ZlY3RvckVSTjNXVEY2VmVjdG9ySVBO
U18xNk9iamVjdElkZW50aWZpZXJFTG0wRUVFCiBfX1pOSzNKU0MxMkRhdGVJbnN0YW5jZTdnZXRU
aW1lRVJkUmkKK19fWk5LM0pTQzEyU3RyaW5nT2JqZWN0MTJpbnN0YW5jZVNpemVFdgogX19aTksz
SlNDMTJTdHJpbmdPYmplY3QxMnRvVGhpc1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pT
QzEyU3RyaW5nT2JqZWN0OHRvU3RyaW5nRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDMTRKU0ds
b2JhbE9iamVjdDE0aXNEeW5hbWljU2NvcGVFdgpAQCAtMzM4LDYgKzM0MCw3IEBAIF9fWk5LM0pT
QzE3RGVidWdnZXJDYWxsRnJhbWUyMmNhbGN1bGF0ZWQKIF9fWk5LM0pTQzE3RGVidWdnZXJDYWxs
RnJhbWU0dHlwZUV2CiBfX1pOSzNKU0MxN0RlYnVnZ2VyQ2FsbEZyYW1lOGV2YWx1YXRlRVJLTlNf
N1VTdHJpbmdFUk5TXzdKU1ZhbHVlRQogX19aTkszSlNDNEhlYXAxMHN0YXRpc3RpY3NFdgorX19a
TkszSlNDNkpTQ2VsbDEyaW5zdGFuY2VTaXplRXYKIF9fWk5LM0pTQzZKU0NlbGwxMnRvVGhpc09i
amVjdEVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzZKU0NlbGwxMnRvVGhpc1N0cmluZ0VQTlNf
OUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzZKU0NlbGwxNGlzR2V0dGVyU2V0dGVyRXYKQEAgLTM0OSw2
ICszNTIsNyBAQCBfX1pOSzNKU0M2SlNDZWxsOWdldFN0cmluZ0V2CiBfX1pOSzNKU0M2SlNDZWxs
OWdldFVJbnQzMkVSagogX19aTkszSlNDN0FyZ0xpc3Q4Z2V0U2xpY2VFaVJTMF8KIF9fWk5LM0pT
QzdKU1ZhbHVlOXRvSW50ZWdlckVQTlNfOUV4ZWNTdGF0ZUUKK19fWk5LM0pTQzdQcm9maWxlMTFs
aXZlT2JqZWN0c0V2CiBfX1pOSzNKU0M3VVN0cmluZzEwVVRGOFN0cmluZ0ViCiBfX1pOSzNKU0M3
VVN0cmluZzE0dG9TdHJpY3RVSW50MzJFUGIKIF9fWk5LM0pTQzdVU3RyaW5nNWFzY2lpRXYKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNDQ2ODIpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjgsNiArMzY4LDkgQEAKIAkJQkNGRDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5
MDBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCAqLzsgfTsKIAkJQkNGRDhDOTMwRUVC
MkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNGRDhDOTEwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5o
ICovOyB9OwogCQlDMEEyNzI2MzBFNTBBMDYzMDBFOTZFMTUgLyogTm90Rm91bmQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwQTI3MjNGMEU1MDlGMUUw
MEU5NkUxNSAvKiBOb3RGb3VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUNCMTFGRkY3MEY5NDgzOTkwMEU1ODM3OSAvKiBPYmplY3RJZGVudGlm
aWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDQjEx
RkZGNjBGOTQ4MzcxMDBFNTgzNzkgLyogT2JqZWN0SWRlbnRpZmllci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUNCQjExNzFCMEY2NzJFODkwMDc0
NDQyMiAvKiBMaXZlT2JqZWN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDQkIxMTQ5MzBGNjcxMTA0MDA3NDQ0MjIgLyogTGl2ZU9iamVjdHMuY3Bw
ICovOyB9OworCQlDQkIxMTcxQzBGNjcyRTg5MDA3NDQ0MjIgLyogTGl2ZU9iamVjdHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENCQjExM0VCMEY2NkQ0
QjgwMDc0NDQyMiAvKiBMaXZlT2JqZWN0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVK
U1N0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTEyNEE4RjUwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTEyNEE4RjgwRTU1NTc3NTAw
MzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY2MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0
cmluZy5jcHAgKi87IH07CiAJCUUxNzg2MzZEMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXpl
VGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAq
LzsgfTsKQEAgLTgzNSw2ICs4MzgsOSBAQAogCQlCQ0ZEOEM5MDBFRUIyRUU3MDAyODM4NDggLyog
SnVtcFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEp1bXBU
YWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRkQ4QzkxMEVFQjJFRTcw
MDI4Mzg0OCAvKiBKdW1wVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SnVtcFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMwQTI3MjNGMEU1MDlG
MUUwMEU5NkUxNSAvKiBOb3RGb3VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBOb3RGb3VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQjExRkZGNjBGOTQ4
MzcxMDBFNTgzNzkgLyogT2JqZWN0SWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBPYmplY3RJZGVudGlmaWVyLmg7IHBhdGggPSBwcm9maWxlci9PYmplY3RJZGVu
dGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNCQjExM0VCMEY2NkQ0Qjgw
MDc0NDQyMiAvKiBMaXZlT2JqZWN0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBMaXZlT2JqZWN0cy5oOyBwYXRoID0gcHJvZmlsZXIvTGl2ZU9iamVjdHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0JCMTE0OTMwRjY3MTEwNDAwNzQ0NDIyIC8qIExpdmVPYmpl
Y3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExpdmVPYmplY3Rz
LmNwcDsgcGF0aCA9IHByb2ZpbGVyL0xpdmVPYmplY3RzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDIxMjAyMjgwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI5MEFENDMxMEMwMEVENzlC
NiAvKiBEYXRlQ29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGF0ZUNvbnZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTExRDUxNzUw
QjJFNzk4RDAwNTZDMTg4IC8qIFN0cmluZ0V4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdHJpbmdFeHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE1MjcsNiArMTUzMyw4IEBACiAJCQkJOTVFM0JDMDQwRTFBRTY4MjAwQjJEMUMxIC8qIENhbGxJ
ZGVudGlmaWVyLmggKi8sCiAJCQkJOTU3NDJGNjMwREQxMUY1QTAwMDkxN0ZCIC8qIFByb2ZpbGUu
Y3BwICovLAogCQkJCTk1NzQyRjY0MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxlLmggKi8sCisJ
CQkJQ0JCMTE0OTMwRjY3MTEwNDAwNzQ0NDIyIC8qIExpdmVPYmplY3RzLmNwcCAqLywKKwkJCQlD
QkIxMTNFQjBGNjZENEI4MDA3NDQ0MjIgLyogTGl2ZU9iamVjdHMuaCAqLywKIAkJCQk5NUNENDU3
NDBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5jcHAgKi8sCiAJCQkJOTVDRDQ1
NzUwRTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuaCAqLywKIAkJCQk5NUFCODM1
NDBEQTQzQjQ0MDBCQzgzRjMgLyogUHJvZmlsZU5vZGUuY3BwICovLApAQCAtMTUzNSw2ICsxNTQz
LDcgQEAKIAkJCQk5NUFCODMyRjBEQTQyQ0FEMDBCQzgzRjMgLyogUHJvZmlsZXIuaCAqLywKIAkJ
CQkxQzYxNTE2QjBFQkFDN0EwMDAzMTM3NkYgLyogUHJvZmlsZXJTZXJ2ZXIuaCAqLywKIAkJCQkx
QzYxNTE2QTBFQkFDN0EwMDAzMTM3NkYgLyogUHJvZmlsZXJTZXJ2ZXIubW0gKi8sCisJCQkJQ0Ix
MUZGRjYwRjk0ODM3MTAwRTU4Mzc5IC8qIE9iamVjdElkZW50aWZpZXIuaCAqLywKIAkJCSk7CiAJ
CQluYW1lID0gcHJvZmlsZXI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTYxNyw2
ICsxNjI2LDcgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCUNCQjExNzFDMEY2NzJFODkw
MDc0NDQyMiAvKiBMaXZlT2JqZWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDNTI0MkIwRjUz
NTVFOTAwQkEzRDA0IC8qIEpJVFN0dWJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNTBF
MTZGNUNEMDBCMzQ0NjAgLyogQVBJQ2FzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTkw
RTE2RjVDRDAwQjM0NDYwIC8qIEFTQ0lJQ1R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTg0OSw2
ICsxODU5LDcgQEAKIAkJCQk4NkVBQzQ5QjBGOTNFOEQxMDA4RUM5NDggLyogUmVnZXhQYXJzZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUFDNDlDMEY5M0U4RDEwMDhFQzk0OCAvKiBSZWdleFBh
dHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTk2REQ3Mzc5MEY5REEzMTAwMDI3RkJDQyAvKiBW
TVRhZ3MuaCBpbiBIZWFkZXJzICovLAorCQkJCUNCMTFGRkY3MEY5NDgzOTkwMEU1ODM3OSAvKiBP
YmplY3RJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzZFRTY1OTBGQUU1OUQ1MDAz
RjA2OUEgLyogTmF0aXZlRnVuY3Rpb25XcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Uy
RUE2QjBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTMwNTJDMzUwRkI3OTIxOTAwNDhGREMzIC8qIFBhcnNlckFyZW5hLmggaW4gSGVhZGVycyAq
LywKQEAgLTIyMTcsNiArMjIyOCw3IEBACiAJCQkJODZFQUM0OTcwRjkzRThEMTAwOEVDOTQ4IC8q
IFJlZ2V4SW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQUM0OTkwRjkzRThE
MTAwOEVDOTQ4IC8qIFJlZ2V4SklULmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2REI2NDY0MEY5
NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQ0JCMTE3MUIwRjY3MkU4OTAwNzQ0NDIyIC8qIExpdmVPYmplY3RzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFs
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMDUyQzM0MEZCNzkyMTkwMDQ4RkRDMyAv
KiBQYXJzZXJBcmVuYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0RENTFFQjBGQjhERjc0MDA0
QThCREMgLyogSklUT3Bjb2Rlcy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL0xpdmVPYmplY3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9MaXZlT2JqZWN0cy5jcHAJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9MaXZlT2JqZWN0cy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9yaWEgT2xhcnUgPG9sYXJ1QGFkb2JlLmNvbT4u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxpdmVP
YmplY3RzLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisj
aW5jbHVkZSAiUHJvZmlsZU5vZGUuaCIKKyNpbmNsdWRlICJVU3RyaW5nLmgiCisjaW5jbHVkZSAi
T2JqZWN0SWRlbnRpZmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworUGFzc1JlZlB0cjxMaXZl
T2JqZWN0cz4gTGl2ZU9iamVjdHM6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBMaXZlT2JqZWN0cygpKTsKK30KKworTGl2ZU9iamVjdHM6OkxpdmVPYmplY3RzKCkKK3sKK30K
KworTGl2ZU9iamVjdHM6On5MaXZlT2JqZWN0cygpCit7CisgICAgLy9GSVhNRTogU2hvdWxkIGlt
cGxlbWVudCB0aGlzCisgICAgLy9kbyB3ZSBuZWVkIHRvIG1hbnVhbGx5IGVtcHR5IHRoZSBIYXNo
TWFwPyBGaW5kIG91dC4KK30KKworLy9yZXR1cm5zIHRydWUgaWYgbmV3IHZhbHVlIHdhcyBhZGRl
ZCAobm90IGV4aXN0aW5nKQorYm9vbCBMaXZlT2JqZWN0czo6YWRkTm9kZShjb25zdCBKU0NlbGwq
IGNlbGwsIFBhc3NSZWZQdHI8UHJvZmlsZU5vZGU+IHN0YWNrTm9kZSkKK3sKKyAgICBBU1NFUlQo
Y2VsbCk7CisgICAgLy9GSVhNRTogc2hvdWxkIHRoaXMgaW5jcmVhc2UvYWRvcHQgdGhlIHJlZmVy
ZW5jZSB0byB0aGUgc3RhY2tOb2RlPworICAgIC8vaWYgc28sIHRoZW4gaXQgc2hvdWxkIGRlcmVm
ZXJlbmNlIGl0IGluIHRoZSByZW1vdmVOb2RlIG1ldGhvZHMKKyAgICByZXR1cm4gKG1fc3RhY2tN
YXAuYWRkKGNlbGwsIHN0YWNrTm9kZSkpLnNlY29uZDsKK30KKwordm9pZCBMaXZlT2JqZWN0czo6
cmVtb3ZlTm9kZShjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgQVNTRVJUKGNlbGwpOworICAg
IG1fc3RhY2tNYXAucmVtb3ZlKGNlbGwpOworfQorCitib29sIExpdmVPYmplY3RzOjppc0ZyZWUo
Y29uc3QgSlNDZWxsKiBjZWxsKSBjb25zdAoreworICAgIGNvbnN0IENvbGxlY3RvckNlbGwqIGNv
bGxlY3RvckNlbGwgPSByZWludGVycHJldF9jYXN0PGNvbnN0IENvbGxlY3RvckNlbGwqPihjZWxs
KTsKKyAgICByZXR1cm4gIShjb2xsZWN0b3JDZWxsLT51LmZyZWVDZWxsLnplcm9JZkZyZWUpOwor
fQorCit2b2lkIExpdmVPYmplY3RzOjp0b1ZlY3RvcihWZWN0b3I8T2JqZWN0SWRlbnRpZmllciog
PiYgdmVjdG9yKSBjb25zdAoreworICAgIEFTU0VSVCh2ZWN0b3IuaXNFbXB0eSgpKTsKKyAgICBm
b3IgKGNvbnN0X2l0ZXJhdG9yIGl0ID0gYmVnaW4oKTsgaXQgIT0gZW5kKCk7ICsraXQpIHsKKyAg
ICAgICAgaWYgKCFpc0ZyZWUoaXQtPmZpcnN0KSkgeworICAgICAgICAgICAgY29uc3QgSlNDZWxs
KiBjZWxsID0gaXQtPmZpcnN0OworICAgICAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0g
Y2VsbC0+Y2xhc3NJbmZvKCk7CisgICAgICAgICAgICBPYmplY3RJZGVudGlmaWVyKiBvYmogPSBu
ZXcgT2JqZWN0SWRlbnRpZmllcigodW5zaWduZWQpY2VsbCwgaW5mbyA/IGluZm8tPmNsYXNzTmFt
ZSA6ICJPYmplY3QiLCBjZWxsLT5pbnN0YW5jZVNpemUoKSwgaXQtPnNlY29uZCk7CisgICAgICAg
ICAgICAgICAgdmVjdG9yLmFwcGVuZChvYmopOworICAgICAgICB9CisgICAgICAgIC8vRklYTUU6
IHRoZXJlIHNob3VsZCBiZSBhbiBlbHNlIGJyYW5jaCBoZXJlIHRvIHJlbW92ZSB0aGUKKyAgICAg
ICAgLy9mcmVlIGNlbGxzLCB3aGljaCBhcmUgbm90IG5lZWRlZC4gVGhleSBzaG91bGQgYmUgcmVt
b3ZlZCBmcm9tIHRoZSBtYXAKKyAgICAgICAgLy9DYW4ndCByZW1vdmUgaXRlbXMgaW4gYSBIYXNo
TWFwIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGl0LiBTaG91bGQKKyAgICAgICAgLy9zdG9yZSB0aGUg
a2V5cyBpbiBhbiBhcnJheSBhbmQgcmVtb3ZlIHRoZW0gYWZ0ZXJ3YXJkcy4KKyAgICB9Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvTGl2ZU9i
amVjdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9MaXZlT2JqZWN0
cy5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvTGl2ZU9iamVjdHMu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBIb3JpYSBPbGFydSA8b2xhcnVAYWRvYmUuY29tPi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIExpdmVPYmplY3RzX2gKKyNkZWZpbmUgTGl2ZU9iamVjdHNfaAorCisvLyBUaGUgTGl2ZSBv
YmplY3RzIGNsYXNzIHByb3ZpZGVzIGEgd2F5IHRvIHN0b3JlIHRoZSBsb2NhdGlvbiB3aGVyZQor
Ly8gSmF2YVNjcmlwdCBvYmplY3RzIGFyZSBjcmVhdGVkLiBJdCBkZWZpbmVzIGEgY29ycmVzcG9u
ZGVuY2UgYmV0d2VlbiBhCisvLyBKU0NlbGwsIHdoaWNoIGhvbGRzIGEgamF2YXNjcmlwdCBvYmpl
Y3QsIGFuZCBhIFByb2ZpbGVOb2RlLCB3aGljaAorLy8gcmVwcmVzZW50cyBhIEphdmFTY3JpcHQg
ZnVuY3Rpb24uIFN0YXJ0aW5nIGZyb20gdGhlIFByb2ZpbGVOb2RlLCB0aGUKKy8vIGNhbGwgc3Rh
Y2sgZm9yIHRoZSBjcmVhdGlvbiBvZiBhbiBvYmplY3QgY2FuIGJlIGV4dHJhY3RlZC4KKy8vCisv
LyBUaGUgY29ycmVzcG9uZGVuY2UgaXMgc3RvcmVkIGludGVybmFsbHkgYXMgYSBoYXNoIG1hcCBv
ZiBrZXkgSlNDZWxsKgorLy8gYW5kIHZhbHVlIFByb2ZpbGVOb2RlKi4KKy8vCisvLyBhZGROb2Rl
IC0gdGhlIGZ1bmN0aW9uIGFkZHMgc3VjaCBhIHBhaXIgdG8gdGhlIGhhc2ggbWFwLiBUaGlzIGZ1
bmN0aW9uIGlzCisvLyBtZWFudCB0byBiZSBjYWxsZWQgd2hlbiBhbiBvYmplY3QgaXMgY3JlYXRl
ZC4KKy8vCisvLyByZW1vdmVOb2RlIC0gdGhlIGZ1bmN0aW9uIHJlbW92ZXMgYSBjZWxsIGZyb20g
dGhlIG1hcC4gSXQgaXMgbWVhbnQgdG8gYmUKKy8vIGNhbGxlZCB3aGVuIGEgamF2YXNjcmlwdCBv
YmplY3QgaXMgY29sbGVjdGVkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4KKy8vCisvLyB0b1Zl
Y3RvciAtIGEgbWV0aG9kIHRvIGV4cG9ydCB0aGUgZGF0YSBoZWxkIGJ5IHRoZSBMaXZlT2JqZWN0
cyBpbnN0YW5jZQorLy8gYXQgYW4gb3V0c2lkZSByZXF1ZXN0LgorLy8KKy8vIG1fc3RhY2tNYXAg
LSBUaGlzIG1hcCBob2xkcyBwYWlycyBvZiBKU0NlbGxzIGFuZCB0aGUgZnVuY3Rpb25zIGluIHdo
aWNoCisvLyB0aGV5IHdlcmUgY3JlYXRlZCwgd2hpY2ggYXJlIHJlcHJlc2VudGVkIGJ5IHByb2Zp
bGUgbm9kZXMuIEl0IGlzIGluCisvLyBpbiBmYWN0IGEgbWFwIGJldHdlZW4gYSBKUyBvYmplY3Qg
YW5kIHRoZSBzdGFjayB0cmFjZSBvZiB0aGUgZnVuY3Rpb24KKy8vIHRoYXQgY3JlYXRlZCBpdC4K
KworI2luY2x1ZGUgIlByb2ZpbGVOb2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworICAgIGNsYXNzIEpT
Q2VsbDsKKyAgICBjbGFzcyBPYmplY3RJZGVudGlmaWVyOworCisgICAgY2xhc3MgTGl2ZU9iamVj
dHMgOiBwdWJsaWMgUmVmQ291bnRlZDxMaXZlT2JqZWN0cz4geworICAgIHB1YmxpYzoKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TGl2ZU9iamVjdHM+IGNyZWF0ZSgpOworICAgICAgICB2aXJ0
dWFsIH5MaXZlT2JqZWN0cygpOworCisgICAgICAgIGJvb2wgYWRkTm9kZShjb25zdCBKU0NlbGwq
IGNlbGwsIFBhc3NSZWZQdHI8UHJvZmlsZU5vZGU+IHN0YWNrTm9kZSk7CisgICAgICAgIHZvaWQg
cmVtb3ZlTm9kZShjb25zdCBKU0NlbGwqIGNlbGwpOworCisgICAgICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tNYXAuaXNFbXB0eSgpOyB9CisKKyAgICAgICAgdm9pZCB0
b1ZlY3RvcihWZWN0b3I8T2JqZWN0SWRlbnRpZmllciogPiYgdmVjdG9yKSBjb25zdDsKKworICAg
IHByaXZhdGU6CisgICAgICAgIExpdmVPYmplY3RzKCk7CisgICAgCisgICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxjb25zdCBKU0NlbGwqLCBSZWZQdHI8UHJvZmlsZU5vZGU+ID4gTWVtb3J5TWFwOwor
ICAgICAgICB0eXBlZGVmIE1lbW9yeU1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICAgIHR5
cGVkZWYgTWVtb3J5TWFwOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAg
aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3N0YWNrTWFwLmJlZ2luKCk7IH0KKyAgICAgICAg
aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9zdGFja01hcC5lbmQoKTsgfQorICAgICAgICBjb25z
dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tNYXAuYmVnaW4oKTsgfQor
ICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrTWFwLmVu
ZCgpOyB9CisgICAgCisgICAgICAgIGJvb2wgaXNGcmVlKGNvbnN0IEpTQ2VsbCogY2VsbCkgY29u
c3Q7CisKKyAgICAgICAgTWVtb3J5TWFwIG1fc3RhY2tNYXA7CisgICAgfTsKKyAgICAKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gTGl2ZU9iamVjdHNfaApJbmRleDogSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvT2JqZWN0SWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL09iamVjdElkZW50aWZpZXIuaAkocmV2aXNpb24gMCkKKysrIEphdmFT
Y3JpcHRDb3JlL3Byb2ZpbGVyL09iamVjdElkZW50aWZpZXIuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBIb3JpYSBPbGFydSA8b2xhcnVA
YWRvYmUuY29tPi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE9iamVjdElkZW50aWZpZXJf
aAorI2RlZmluZSBPYmplY3RJZGVudGlmaWVyX2gKKworLy8gVGhlIE9iamVjdElkZW50aWZpZXIg
c3RydWN0dXJlIHJlcHJlc2VudHMgYSBzaW5nbGUgSmF2YVNjcmlwdCBvYmplY3QKKy8vIGZyb20g
YSBtZW1vcnkgcHJvZmlsaW5nIHBvaW5nIG9mIHZpZXcuIEl0IGlzIG1lYW50IGFzIGEgc2ltcGxl
IGludGVyZmFjZQorLy8gdG8gdHJhbnNtaXQgZGF0YSBhY3Jvc3MgbGF5ZXJzLgorLy8KKy8vIG1f
aWQgLSBhIHVuaXF1ZSBpZGVudGlmaWNhdGlvbiBudW1iZXIgZm9yIHRoZSBvYmplY3QuIFRoaXMg
d2lsbCBtb3N0IGxpa2VseQorLy8gYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgYWRkcmVzcyBvZiB0
aGUgaG9sZGluZyBKU0NlbGwKKy8vCisvLyBtX3R5cGUgLSB0aGUgSmF2YVNjcmlwdCB0eXBlIG9m
IHRoZSBvYmplY3QuIFRoaXMgaXMgdGhlIHR5cGUgYXMgcmV0dXJuZWQgYnkKKy8vIHRoZSBDbGFz
c0luZm8gb2JqZWN0IG9mIHRoZSBKU0NlbGwKKy8vCisvLyBtX3NpemUgLSB0aGUgY29tcHV0ZWQg
c2l6ZSBvZiB0aGUgb2JqZWN0LiBUaGlzIHdpbGwgYmUgYXNzaWduZWQgdGhlIHZhbHVlCisvLyBy
ZXR1cm5lZCBieSB0aGUgaW5zdGFuY2VTaXplKCkgbWV0aG9kIG9uIEpTQ2VsbAorLy8KKy8vIG1f
Y3JlYXRpbmdGdW5jdGlvbiAtIHRoaXMgb2JqZWN0IHBvaW50cyB0byB0aGUgUHJvZmlsZU5vZGUg
d2hpY2ggaG9sZHMKKy8vIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmdW5jdGlvbiBpbiB3aGljaCB0
aGlzIEpTIG9iamVjdCB3YXMgY3JlYXRlZC4KKy8vIEEgc3RhY2sgdHJhY2UgY2FuIGJlIGV4dHJh
Y3RlZCBmcm9tIHRoaXMgb2JqZWN0LgorCisjaW5jbHVkZSA8cnVudGltZS9VU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCisgICAgc3RydWN0IE9iamVjdElkZW50aWZpZXIgeworICAgICAg
ICB1bnNpZ25lZCBtX2lkOworICAgICAgICBVU3RyaW5nIG1fdHlwZTsKKyAgICAgICAgdW5zaWdu
ZWQgbV9zaXplOworICAgICAgICBSZWZQdHI8UHJvZmlsZU5vZGU+IG1fY3JlYXRpbmdGdW5jdGlv
bjsKKworICAgICAgICBPYmplY3RJZGVudGlmaWVyKCkKKyAgICAgICAgICAgIDogbV9pZCgwKQor
ICAgICAgICAgICAgLCBtX3NpemUoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
T2JqZWN0SWRlbnRpZmllcih1bnNpZ25lZCBpZE51bWJlciwgVVN0cmluZyB0eXBlLCB1bnNpZ25l
ZCBzaXplLCBSZWZQdHI8UHJvZmlsZU5vZGU+IGNyZWF0aW5nRnVuY3Rpb24pCisgICAgICAgICAg
ICA6IG1faWQoaWROdW1iZXIpCisgICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAg
ICAgLCBtX3NpemUoc2l6ZSkKKyAgICAgICAgICAgICwgbV9jcmVhdGluZ0Z1bmN0aW9uKGNyZWF0
aW5nRnVuY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH07CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gT2JqZWN0SWRlbnRpZmllcl9oCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9Qcm9maWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlLmNwcAkocmV2aXNpb24gNDQ2ODIpCisrKyBKYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lu
Y2x1ZGUgIlByb2ZpbGUuaCIKIAogI2luY2x1ZGUgIlByb2ZpbGVOb2RlLmgiCisjaW5jbHVkZSAi
TGl2ZU9iamVjdHMuaCIKICNpbmNsdWRlIDxzdGRpby5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAg
LTQzLDYgKzQ0LDE3IEBAIFByb2ZpbGU6OlByb2ZpbGUoY29uc3QgVVN0cmluZyYgdGl0bGUsIHUK
ICAgICAvLyBGSVhNRTogV2hlbiBtdWx0aS10aHJlYWRpbmcgaXMgc3VwcG9ydGVkIHRoaXMgd2ls
bCBiZSBhIHZlY3RvciBhbmQgY2FsbHMKICAgICAvLyBpbnRvIHRoZSBwcm9maWxlciB3aWxsIG5l
ZWQgdG8ga25vdyB3aGljaCB0aHJlYWQgaXQgaXMgZXhlY3V0aW5nIG9uLgogICAgIG1faGVhZCA9
IFByb2ZpbGVOb2RlOjpjcmVhdGUoQ2FsbElkZW50aWZpZXIoIlRocmVhZF8xIiwgMCwgMCksIDAs
IDApOworICAgIG1fbGl2ZU9iamVjdHMgPSBMaXZlT2JqZWN0czo6Y3JlYXRlKCk7Cit9CisKK1By
b2ZpbGU6OlByb2ZpbGUoY29uc3QgVVN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIHVpZCwgUGFzc1Jl
ZlB0cjxMaXZlT2JqZWN0cz4gbGl2ZU9iamVjdHMpCisgICAgOiBtX3RpdGxlKHRpdGxlKQorICAg
ICwgbV91aWQodWlkKQorICAgICwgbV9saXZlT2JqZWN0cyhsaXZlT2JqZWN0cykKK3sKKyAgICAv
LyBGSVhNRTogV2hlbiBtdWx0aS10aHJlYWRpbmcgaXMgc3VwcG9ydGVkIHRoaXMgd2lsbCBiZSBh
IHZlY3RvciBhbmQgY2FsbHMKKyAgICAvLyBpbnRvIHRoZSBwcm9maWxlciB3aWxsIG5lZWQgdG8g
a25vdyB3aGljaCB0aHJlYWQgaXQgaXMgZXhlY3V0aW5nIG9uLgorICAgIG1faGVhZCA9IFByb2Zp
bGVOb2RlOjpjcmVhdGUoQ2FsbElkZW50aWZpZXIoIlRocmVhZF8xIiwgMCwgMCksIDAsIDApOwog
fQogCiBQcm9maWxlOjp+UHJvZmlsZSgpCkBAIC0xMzMsNCArMTQ1LDE5IEBAIHZvaWQgUHJvZmls
ZTo6ZGVidWdQcmludERhdGFTYW1wbGVTdHlsZSgKIH0KICNlbmRpZgogCitQYXNzUmVmUHRyPExp
dmVPYmplY3RzPiBQcm9maWxlOjpsaXZlT2JqZWN0cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bGl2ZU9iamVjdHM7Cit9CisKK3ZvaWQgUHJvZmlsZTo6b2JqZWN0Q3JlYXRlZChjb25zdCBKU0Nl
bGwqIGNyZWF0ZWRPYmplY3QsIFBhc3NSZWZQdHI8UHJvZmlsZU5vZGU+IG9yaWdpbmF0aW5nRnVu
Y3Rpb24gKQoreworICAgIG1fbGl2ZU9iamVjdHMtPmFkZE5vZGUoY3JlYXRlZE9iamVjdCwgb3Jp
Z2luYXRpbmdGdW5jdGlvbik7Cit9CisKK3ZvaWQgUHJvZmlsZTo6b2JqZWN0Q29sbGVjdGVkKGNv
bnN0IEpTQ2VsbCogY29sbGVjdGVkT2JqZWN0KQoreworICAgIG1fbGl2ZU9iamVjdHMtPnJlbW92
ZU5vZGUoY29sbGVjdGVkT2JqZWN0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZS5oCShyZXZpc2lvbiA0NDY4MikKKysrIEphdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAorICAgIGNsYXNzIExpdmVPYmplY3RzOworCiAgICAgY2xhc3Mg
UHJvZmlsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFByb2ZpbGU+IHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2ZpbGU+IGNyZWF0ZShjb25zdCBVU3RyaW5nJiB0aXRs
ZSwgdW5zaWduZWQgdWlkKTsKQEAgLTU1LDggKzU3LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGRlYnVnUHJpbnREYXRhU2FtcGxlU3R5bGUoKSBjb25zdDsKICNlbmRpZgogCisg
ICAgICAgIFBhc3NSZWZQdHI8TGl2ZU9iamVjdHM+IGxpdmVPYmplY3RzKCkgY29uc3Q7CisKKyAg
ICAgICAgLy9Db2xsZWN0IG1lbW9yeSBpbmZvCisgICAgICAgIHZvaWQgb2JqZWN0Q3JlYXRlZChj
b25zdCBKU0NlbGwqIGNyZWF0ZWRPYmplY3QsIFBhc3NSZWZQdHI8UHJvZmlsZU5vZGU+IG9yaWdp
bmF0aW5nRnVuY3Rpb24pOworICAgICAgICB2b2lkIG9iamVjdENvbGxlY3RlZChjb25zdCBKU0Nl
bGwqIGNvbGxlY3RlT2JqZWN0KTsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgUHJvZmlsZShj
b25zdCBVU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgdWlkKTsKKyAgICAgICAgUHJvZmlsZShjb25z
dCBVU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgdWlkLCBQYXNzUmVmUHRyPExpdmVPYmplY3RzPik7
CiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHJlbW92ZVByb2ZpbGVTdGFydCgpOwpAQCAt
NjUsNiArNzQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVVN0cmluZyBtX3RpdGxlOwog
ICAgICAgICBSZWZQdHI8UHJvZmlsZU5vZGU+IG1faGVhZDsKICAgICAgICAgdW5zaWduZWQgaW50
IG1fdWlkOworCisgICAgICAgIFJlZlB0cjxMaXZlT2JqZWN0cz4gbV9saXZlT2JqZWN0czsKICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA0NDY4MikKKysrIEphdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDks
NiArMTA5LDE2IEBAIHZvaWQgUHJvZmlsZUdlbmVyYXRvcjo6ZGlkRXhlY3V0ZShjb25zdCAKICAg
ICBtX2N1cnJlbnROb2RlID0gbV9jdXJyZW50Tm9kZS0+ZGlkRXhlY3V0ZSgpOwogfQogCit2b2lk
IFByb2ZpbGVHZW5lcmF0b3I6Om9iamVjdENyZWF0ZWQoY29uc3QgSlNDZWxsKiBjcmVhdGVkT2Jq
ZWN0KQoreworICAgIG1fcHJvZmlsZS0+b2JqZWN0Q3JlYXRlZChjcmVhdGVkT2JqZWN0LCBtX2N1
cnJlbnROb2RlKTsKK30KKwordm9pZCBQcm9maWxlR2VuZXJhdG9yOjpvYmplY3RDb2xsZWN0ZWQo
Y29uc3QgSlNDZWxsKiBjb2xsZWN0ZU9iamVjdCkKK3sKKyAgICBtX3Byb2ZpbGUtPm9iamVjdENv
bGxlY3RlZChjb2xsZWN0ZU9iamVjdCk7Cit9CisKIHZvaWQgUHJvZmlsZUdlbmVyYXRvcjo6c3Rv
cFByb2ZpbGluZygpCiB7CiAgICAgbV9wcm9maWxlLT5mb3JFYWNoKCZQcm9maWxlTm9kZTo6c3Rv
cFByb2ZpbGluZyk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVy
YXRvci5oCShyZXZpc2lvbiA0NDY4MikKKysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGNsYXNzIENhbGxJZGVudGlmaWVyOwogICAgIGNsYXNzIEV4ZWNTdGF0ZTsK
KyAgICBjbGFzcyBKU0NlbGw7CiAgICAgY2xhc3MgUHJvZmlsZTsKICAgICBjbGFzcyBQcm9maWxl
Tm9kZTsKICAgICBjbGFzcyBVU3RyaW5nOwpAQCAtNTMsMTAgKzU0LDE1IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIHdpbGxFeGVjdXRlKGNvbnN0IENhbGxJZGVudGlmaWVyJik7CiAg
ICAgICAgIHZvaWQgZGlkRXhlY3V0ZShjb25zdCBDYWxsSWRlbnRpZmllciYpOwogCisgICAgICAg
IC8vQ29sbGVjdCBtZW1vcnkgaW5mbworICAgICAgICB2b2lkIG9iamVjdENyZWF0ZWQoY29uc3Qg
SlNDZWxsKiBjcmVhdGVkT2JqZWN0KTsKKyAgICAgICAgdm9pZCBvYmplY3RDb2xsZWN0ZWQoY29u
c3QgSlNDZWxsKiBjb2xsZWN0ZU9iamVjdCk7CisKICAgICAgICAgLy8gU3RvcHBpbmcgUHJvZmls
aW5nCiAgICAgICAgIHZvaWQgc3RvcFByb2ZpbGluZygpOwogCiAgICAgICAgIHR5cGVkZWYgdm9p
ZCAoUHJvZmlsZUdlbmVyYXRvcjo6KlByb2ZpbGVGdW5jdGlvbikoY29uc3QgQ2FsbElkZW50aWZp
ZXImIGNhbGxJZGVudGlmaWVyKTsKKyAgICAgICAgdHlwZWRlZiB2b2lkIChQcm9maWxlR2VuZXJh
dG9yOjoqUHJvZmlsZU9iamVjdEZ1bmN0aW9uKShjb25zdCBKU0NlbGwqIGNlbGwpOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgUHJvZmlsZUdlbmVyYXRvcihjb25zdCBVU3RyaW5nJiB0aXRsZSwg
RXhlY1N0YXRlKiBvcmlnaW5hdGluZ0V4ZWMsIHVuc2lnbmVkIHVpZCk7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZXIuY3BwCShyZXZpc2lvbiA0NDY4MikKKysrIEphdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTEgKzUwLDIw
IEBAIHN0YXRpYyBDYWxsSWRlbnRpZmllciBjcmVhdGVDYWxsSWRlbnRpZmkKIFByb2ZpbGVyKiBQ
cm9maWxlcjo6c19zaGFyZWRQcm9maWxlciA9IDA7CiBQcm9maWxlciogUHJvZmlsZXI6OnNfc2hh
cmVkRW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlID0gMDsKIAorUHJvZmlsZXI6OlByb2ZpbGVyKCkK
KyAgICA6IG1faXNNZW1vcnlQcm9maWxpbmcoZmFsc2UpCit7Cit9CisKIFByb2ZpbGVyKiBQcm9m
aWxlcjo6cHJvZmlsZXIoKQogewogICAgIGlmICghc19zaGFyZWRQcm9maWxlcikKICAgICAgICAg
c19zaGFyZWRQcm9maWxlciA9IG5ldyBQcm9maWxlcigpOwogICAgIHJldHVybiBzX3NoYXJlZFBy
b2ZpbGVyOworfQorCitQcm9maWxlcjo6flByb2ZpbGVyKCkKK3sKIH0gICAKIAogdm9pZCBQcm9m
aWxlcjo6c3RhcnRQcm9maWxpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiB0aXRs
ZSkKQEAgLTcyLDYgKzgxLDkgQEAgdm9pZCBQcm9maWxlcjo6c3RhcnRQcm9maWxpbmcoRXhlY1N0
YXRlKgogICAgIH0KIAogICAgIHNfc2hhcmVkRW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlID0gdGhp
czsKKyAgICBpZiAobV9pc01lbW9yeVByb2ZpbGluZykKKyAgICAgICAgSlNDZWxsOjpzZXREb0Nv
bGxlY3RBbGxvY2F0aW9uVHJhY2VzKHRydWUpOworICAgIAogICAgIFJlZlB0cjxQcm9maWxlR2Vu
ZXJhdG9yPiBwcm9maWxlR2VuZXJhdG9yID0gUHJvZmlsZUdlbmVyYXRvcjo6Y3JlYXRlKHRpdGxl
LCBleGVjLCArK1Byb2ZpbGVzVUlEKTsKICAgICBtX2N1cnJlbnRQcm9maWxlcy5hcHBlbmQocHJv
ZmlsZUdlbmVyYXRvcik7CiB9CkBAIC04Niw4ICs5OCwxMSBAQCBQYXNzUmVmUHRyPFByb2ZpbGU+
IFByb2ZpbGVyOjpzdG9wUHJvZmlsCiAgICAgICAgICAgICBSZWZQdHI8UHJvZmlsZT4gcmV0dXJu
UHJvZmlsZSA9IHByb2ZpbGVHZW5lcmF0b3ItPnByb2ZpbGUoKTsKIAogICAgICAgICAgICAgbV9j
dXJyZW50UHJvZmlsZXMucmVtb3ZlKGkpOwotICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRQcm9m
aWxlcy5zaXplKCkpCisgICAgICAgICAgICBpZiAoIW1fY3VycmVudFByb2ZpbGVzLnNpemUoKSkg
eworICAgICAgICAgICAgICAgIC8vVGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayB3aGV0aGVyIG1f
aXNNZW1vcnlQcm9maWxpbmcgaXMgZW5hYmxlZAorICAgICAgICAgICAgICAgIEpTQ2VsbDo6c2V0
RG9Db2xsZWN0QWxsb2NhdGlvblRyYWNlcyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgc19zaGFy
ZWRFbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UgPSAwOworICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICByZXR1cm4gcmV0dXJuUHJvZmlsZTsKICAgICAgICAgfQpAQCAtMTA0
LDYgKzExOSwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZGlzcGF0Y2hGdW5jdGlvblRvUHJvCiAg
ICAgfQogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzcGF0Y2hPYmplY3RUb1Byb2ZpbGVzKGNv
bnN0IFZlY3RvcjxSZWZQdHI8UHJvZmlsZUdlbmVyYXRvcj4gPiYgcHJvZmlsZXMsIFByb2ZpbGVH
ZW5lcmF0b3I6OlByb2ZpbGVPYmplY3RGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgSlNDZWxsKiBj
ZWxsLCB1bnNpZ25lZCBjdXJyZW50UHJvZmlsZVRhcmdldEdyb3VwKQoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcHJvZmlsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHByb2Zp
bGVzW2ldLT5wcm9maWxlR3JvdXAoKSA9PSBjdXJyZW50UHJvZmlsZVRhcmdldEdyb3VwIHx8ICFw
cm9maWxlc1tpXS0+b3JpZ2luYXRpbmdHbG9iYWxFeGVjKCkpCisgICAgICAgICAgICAocHJvZmls
ZXNbaV0uZ2V0KCktPipmdW5jdGlvbikoY2VsbCk7CisgICAgfQorfQorCiB2b2lkIFByb2ZpbGVy
Ojp3aWxsRXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb24pCiB7CiAgICAg
QVNTRVJUKCFtX2N1cnJlbnRQcm9maWxlcy5pc0VtcHR5KCkpOwpAQCAtMTM0LDYgKzE1NywyNCBA
QCB2b2lkIFByb2ZpbGVyOjpkaWRFeGVjdXRlKEV4ZWNTdGF0ZSogZXhlCiAgICAgZGlzcGF0Y2hG
dW5jdGlvblRvUHJvZmlsZXMobV9jdXJyZW50UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjpk
aWRFeGVjdXRlLCBjcmVhdGVDYWxsSWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBKU1Zh
bHVlKCksIHNvdXJjZVVSTCwgc3RhcnRpbmdMaW5lTnVtYmVyKSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5wcm9maWxlR3JvdXAoKSk7CiB9CiAKK3ZvaWQgUHJvZmlsZXI6Om9iamVjdENy
ZWF0ZWQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNyZWF0ZWRPYmplY3QpCit7CisgICAgQVNT
RVJUKCFtX2N1cnJlbnRQcm9maWxlcy5pc0VtcHR5KCkpOworCisgICAgZGlzcGF0Y2hPYmplY3RU
b1Byb2ZpbGVzKG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRvcjo6b2JqZWN0Q3Jl
YXRlZCwgY3JlYXRlZE9iamVjdCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9maWxl
R3JvdXAoKSk7Cit9CisKK3ZvaWQgUHJvZmlsZXI6Om9iamVjdENvbGxlY3RlZChKU0NlbGwqIGNv
bGxlY3RlZE9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW1fY3VycmVudFByb2ZpbGVzLmlzRW1wdHko
KSk7CisgICAgCisgICAgLy8gVGhlIEV4ZWNTdGF0ZSBpcyBub3QgYXZhaWxhYmxlIGF0IGNvbGxl
Y3Rpb24gdGltZSwgc28gdGhlcmUgaXMgbm8gd2F5CisgICAgLy8gdG8gZGV0ZXJtaW5lIHdoaWNo
IHByb2ZpbGUgdGhpcyBpcyB0YXJnZXRlZCBhdC4gRGlzcGF0Y2ggdG8gYWxsIC0gaWYgYSBwcm9m
aWxlCisgICAgLy8gY29udGFpbnMgdGhlIGRlc2lyZWQgY2VsbCwgaXQgd2lsbCBtYXJrIGl0IGNv
bGxlY3RlZCBhcHByb3ByaWF0ZWx5CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1cnJl
bnRQcm9maWxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9jdXJyZW50UHJvZmlsZXNbaV0uZ2V0
KCktPm9iamVjdENvbGxlY3RlZChjb2xsZWN0ZWRPYmplY3QpOworfQorCiBDYWxsSWRlbnRpZmll
ciBQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBKU1ZhbHVlIGZ1bmN0aW9uLCBjb25zdCBVU3RyaW5nJiBkZWZhdWx0U291cmNlVVJMLCBpbnQg
ZGVmYXVsdExpbmVOdW1iZXIpCiB7CiAgICAgaWYgKCFmdW5jdGlvbikKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZXIuaAkocmV2aXNpb24gNDQ2ODIpCisrKyBKYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICZzX3NoYXJlZEVuYWJsZWRQcm9maWxlclJl
ZmVyZW5jZTsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgflByb2ZpbGVyKCk7CisKICAg
ICAgICAgc3RhdGljIFByb2ZpbGVyKiBwcm9maWxlcigpOyAKICAgICAgICAgc3RhdGljIENhbGxJ
ZGVudGlmaWVyIGNyZWF0ZUNhbGxJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSosIEpTVmFsdWUsIGNv
bnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIpOwogCkBAIC02MiwxMiArNjQs
MjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZGlkRXhlY3V0ZShFeGVjU3RhdGUq
LCBKU1ZhbHVlIGZ1bmN0aW9uKTsKICAgICAgICAgdm9pZCBkaWRFeGVjdXRlKEV4ZWNTdGF0ZSos
IGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcik7CiAKKyAg
ICAgICAgdmlydHVhbCB2b2lkIG9iamVjdENyZWF0ZWQoRXhlY1N0YXRlKiwgSlNDZWxsKiBjcmVh
dGVkT2JqZWN0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG9iamVjdENvbGxlY3RlZChKU0NlbGwq
IGNvbGxlY3RlT2JqZWN0KTsKKworICAgICAgICB2b2lkIHNldElzTWVtb3J5UHJvZmlsaW5nKGJv
b2wgaXNFbmFibGVkKSB7IG1faXNNZW1vcnlQcm9maWxpbmcgPSBpc0VuYWJsZWQ7IH07CiAgICAg
ICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8UHJvZmlsZUdlbmVyYXRvcj4gPiYgY3VycmVudFByb2Zp
bGVzKCkgeyByZXR1cm4gbV9jdXJyZW50UHJvZmlsZXM7IH07CiAKICAgICBwcml2YXRlOgorICAg
ICAgICBQcm9maWxlcigpOworICAgIAogICAgICAgICBWZWN0b3I8UmVmUHRyPFByb2ZpbGVHZW5l
cmF0b3I+ID4gbV9jdXJyZW50UHJvZmlsZXM7CiAgICAgICAgIHN0YXRpYyBQcm9maWxlciogc19z
aGFyZWRQcm9maWxlcjsKICAgICAgICAgc3RhdGljIFByb2ZpbGVyKiBzX3NoYXJlZEVuYWJsZWRQ
cm9maWxlclJlZmVyZW5jZTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgbV9pc01lbW9yeVByb2Zp
bGluZzsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbGxlY3Rvci5jcHAJKHJldmlzaW9uIDQ0NjgyKQorKysgSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiTm9kZXMu
aCIKKyNpbmNsdWRlICJQcm9maWxlci5oIgogI2luY2x1ZGUgIlRyYWNpbmcuaCIKICNpbmNsdWRl
IDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8c2V0am1wLmg+CkBAIC04OTMsNyArODk0LDEwIEBAIHRl
bXBsYXRlIDxIZWFwVHlwZSBoZWFwVHlwZT4gc2l6ZV90IEhlYXAKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGFzc3VtZXMgdGhlIG9iamVjdCBoYXMgYSB2YWxpZCB2cHRyLikKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjZWxsLT51LmZyZWVDZWxsLnplcm9JZkZyZWUgPT0gMCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIAorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoSlNDZWxsOjpkb0Nv
bGxlY3RBbGxvY2F0aW9uVHJhY2VzKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgq
UHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpKS0+b2JqZWN0Q29sbGVjdGVkKGlt
cCk7CisKICAgICAgICAgICAgICAgICAgICAgICAgIGltcC0+fkpTQ2VsbCgpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtOTE2LDYgKzkyMCwxMCBAQCB0
ZW1wbGF0ZSA8SGVhcFR5cGUgaGVhcFR5cGU+IHNpemVfdCBIZWFwCiAgICAgICAgICAgICAgICAg
ICAgIGlmICghY3VyQmxvY2stPm1hcmtlZC5nZXQoaSA+PiBIZWFwQ29uc3RhbnRzPGhlYXBUeXBl
Pjo6Yml0bWFwU2hpZnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhcFR5cGUg
IT0gTnVtYmVySGVhcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ2VsbCogaW1w
ID0gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihjZWxsKTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShKU0NlbGw6OmRvQ29sbGVjdEFsbG9jYXRpb25UcmFjZXMo
KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqUHJvZmlsZXI6OmVuYWJsZWRQ
cm9maWxlclJlZmVyZW5jZSgpKS0+b2JqZWN0Q29sbGVjdGVkKGltcCk7CisKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbXAtPn5KU0NlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIC0tdXNlZENlbGxzOwpJbmRleDogSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiA0NDY4MikKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNDgsNiArMTA0OCw1NCBAQCB2
b2lkIEpTQXJyYXk6OmNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuCiAKICNlbmRpZgogCitzaXpl
X3QgSlNBcnJheTo6aW5zdGFuY2VTaXplKCkgY29uc3QKK3sKKyAgICBzaXplX3QgY29tcHV0ZWRT
aXplID0gMDsKKworICAgIC8vIEpTIGNsYXNzIG92ZXJoZWFkCisgICAgY29tcHV0ZWRTaXplICs9
IHNpemVvZigqdGhpcyk7CisKKyAgICAvLyBBcnJheVN0b3JhZ2Ugb3ZlcmhlYWQgLSB0aGlzIHRh
a2VzIGludG8gYWNjb3VudCB0aGUgc2l6ZSBvZiB0aGUKKyAgICAvLyBzdG9yYWdlIHZlY3Rvcgor
ICAgIGNvbXB1dGVkU2l6ZSArPSBzdG9yYWdlU2l6ZShtX3N0b3JhZ2UtPm1fdmVjdG9yTGVuZ3Ro
KTsKKworICAgIC8vICBzaXplb2YgdGhlIHZlY3RvciB2YWx1ZXMKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9zdG9yYWdlLT5tX3ZlY3Rvckxlbmd0aDsgaSsrKSB7CisgICAgICAgIC8v
IGlmIHRoZSB2YWx1ZSA9PSBub1ZhbHVlKCkgaXQgbWVhbnMgdGhlIHZlY3RvciBzbG90IGlzIGVt
cHR5LCBzbyBzdGVwIG92ZXIgaXQKKyAgICAgICAgLy8gaWYgdmFsdWUgaXMgYSBwb2ludGVyIHRv
IGEgY2VsbCwgdGhlIGNlbGwgaGFzIGl0cyBvd24gc2l6ZSB0byBhY2NvdW50IGZvcgorICAgICAg
ICAvLyBvdGhlcndpc2UsIHRoZSB2YWx1ZSBpcyBhbiAnaW1tZWRpYXRlJywgYSB0eXBlLXRhZ2Vk
IHZhbHVlIG1hc3F1ZXJhZGluZyBhcyBhIHBvaW50ZXIKKyAgICAgICAgLy8gKHNlZSBKU0ltbWVk
aWF0ZS5oKSBpdCBpcyB3aG9sbHkgY29udGFpbmVkIGluIHRoZSBKU1ZhbHVlIGhlbGQgaW4gdGhl
IHZlY3RvcgorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9zdG9yYWdlLT5tX3ZlY3RvcltpXTsK
KyAgICAgICAgaWYgKCB2YWx1ZSAhPSBKU1ZhbHVlKCkgJiYgdmFsdWUuaXNDZWxsKCkgKQorICAg
ICAgICAgICAgY29tcHV0ZWRTaXplICs9IHZhbHVlLmFzQ2VsbCgpLT5pbnN0YW5jZVNpemUoKTsK
KyAgICB9CisKKyAgICAvLyAgc2l6ZSBvZiBTcGFyc2UgdmFsdWUgbWFwCisgICAgLy8gIEZJWE1F
OiBBIGdlbmVyaWMgY2xhc3MvbWV0aG9kIGNvdWxkIHByb2JhYmx5IGJlIGltcGxlbWVudGVkCisg
ICAgLy8gIHRvIG1lYXN1cmUgdGhlIHNpemUgb2YgYW55IEhhc2hNYXAgY29udGFpbmluZyBKU09i
amVjdHMKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3N0b3JhZ2UtPm1fc3BhcnNl
VmFsdWVNYXA7CisgICAgaWYgKG1hcCkgeworICAgICAgICBjb21wdXRlZFNpemUgKz0gc2l6ZW9m
KCptYXApOworICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0g
bWFwLT5iZWdpbigpOyBpdCAhPSBtYXAtPmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBjb21w
dXRlZFNpemUgKz0gc2l6ZW9mKGl0LT5maXJzdCk7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGlmICggdmFsdWUgIT0gSlNWYWx1ZSgpICYmIHZh
bHVlLmlzQ2VsbCgpICkKKyAgICAgICAgICAgICAgICBjb21wdXRlZFNpemUgKz0gdmFsdWUuYXND
ZWxsKCktPmluc3RhbmNlU2l6ZSgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGNvbXB1dGVkU2l6ZSArPSBzaXplb2YodmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gIEZJWE1FOiBNZWFzdXJlIHNpemUgb2YgdGhlIEpTT2JqZWN0IHByb3BlcnR5TWFwIChzZWUg
dGhlIGFib3ZlIEZJWE1FIGFzIHdlbGwpCisgICAgLy8gIEpTQXJyYXkgd2lsbCBzdG9yZSBvYmpl
Y3RzIHdpdGggbm9uLW51bWVyaWMgaWRlbnRpZmllcnMsIGFuZCBzb21lIG90aGVyIHR5cGVzCisg
ICAgLy8gIChzZWUgdGhlIGNvbW1lbnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgSlNBcnJheS5jcHAp
IGluIGl0cyBwcm9wZXJ0eSBtYXAKKyAgICAvLyAgKGVnOiBhcnJbIm9iamVjdCJdKSwgc28gaXQg
aXMgaW1wb3J0YW50IHRvIG1lYXN1cmUgdGhpcy4KKyAgICAvLyAgVGhpcyBzaG91bGQgcHJvYmFi
bHkgYmUgZG9uZSBpbiBKU09iamVjdCBhbmQgYSAnc3VwZXInIG1ldGhvZCBzaG91bGQgYmUKKyAg
ICAvLyAgY2FsbGVkLgorCisgICAgcmV0dXJuIGNvbXB1dGVkU2l6ZTsKK30KKwogSlNBcnJheSog
Y29uc3RydWN0RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgcmV0dXJuIG5ldyAo
ZXhlYykgSlNBcnJheShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJl
KCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDQ0NjgyKQorKysg
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYg
KzgzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CiAgICAgICAgIH0KIAorICAg
ICAgICB2aXJ0dWFsIHNpemVfdCBpbnN0YW5jZVNpemUoKSBjb25zdDsKKwogICAgIHByb3RlY3Rl
ZDoKICAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0
dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDQ0
NjgyKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpT
U3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJQcm9maWxlci5oIgog
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzYsMTMg
Kzc3LDIwIEBAIGV4dGVybiBjb25zdCBkb3VibGUgSW5mID0gTmFOSW5mLmRvdWJsZXMKICAKICNl
bmRpZiAvLyAhKGRlZmluZWQgTkFOICYmIGRlZmluZWQgSU5GSU5JVFkpCiAKK2Jvb2wgSlNDZWxs
OjptX2RvQ29sbGVjdEFsbG9jYXRpb25UcmFjZXMgPSBmYWxzZTsKKwogdm9pZCogSlNDZWxsOjpv
cGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIEV4ZWNTdGF0ZSogZXhlYykKIHsKICNpZmRlZiBKQVZB
U0NSSVBUQ09SRV9CVUlMRElOR19BTExfSU5fT05FX0ZJTEUKLSAgICByZXR1cm4gZXhlYy0+aGVh
cCgpLT5pbmxpbmVBbGxvY2F0ZShzaXplKTsKKyAgICB2b2lkKiBjZWxsID0gZXhlYy0+aGVhcCgp
LT5pbmxpbmVBbGxvY2F0ZShzaXplKTsKICNlbHNlCi0gICAgcmV0dXJuIGV4ZWMtPmhlYXAoKS0+
YWxsb2NhdGUoc2l6ZSk7CisgICAgdm9pZCogY2VsbCA9IGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUo
c2l6ZSk7CiAjZW5kaWYKKworICAgIGlmIChVTkxJS0VMWShKU0NlbGw6Om1fZG9Db2xsZWN0QWxs
b2NhdGlvblRyYWNlcykpCisgICAgICAgICgqUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVy
ZW5jZSgpKS0+b2JqZWN0Q3JlYXRlZChleGVjLCBzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKSk7
CisKKyAgICByZXR1cm4gY2VsbDsKIH0KIAogYm9vbCBKU0NlbGw6OmdldFVJbnQzMih1aW50MzJf
dCYpIGNvbnN0CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDQ0NjgyKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDYs
NiArNDYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZXhwbGljaXQgSlNDZWxsKFN0cnVj
dHVyZSopOwogICAgICAgICB2aXJ0dWFsIH5KU0NlbGwoKTsKIAorICAgICAgICBzdGF0aWMgYm9v
bCBtX2RvQ29sbGVjdEFsbG9jYXRpb25UcmFjZXM7CisKICAgICBwdWJsaWM6CiAgICAgICAgIC8v
IFF1ZXJ5aW5nIHRoZSB0eXBlLgogICAgICAgICBib29sIGlzTnVtYmVyKCkgY29uc3Q7CkBAIC05
OSw2ICsxMDEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSBn
ZXRKU051bWJlcigpOwogICAgICAgICB2b2lkKiB2cHRyKCkgeyByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPih0aGlzKTsgfQogCisgICAgICAgIHZpcnR1YWwgc2l6ZV90IGluc3RhbmNl
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH07CisgICAgICAgIHN0YXRpYyB2b2lkIHNldERvQ29s
bGVjdEFsbG9jYXRpb25UcmFjZXMoYm9vbCBzaG91bGRDb2xsZWN0KSB7IG1fZG9Db2xsZWN0QWxs
b2NhdGlvblRyYWNlcyA9IHNob3VsZENvbGxlY3Q7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgZG9D
b2xsZWN0QWxsb2NhdGlvblRyYWNlcygpIHsgcmV0dXJuIG1fZG9Db2xsZWN0QWxsb2NhdGlvblRy
YWNlczsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gQmFzZSBpbXBsZW1lbnRhdGlvbjsg
Zm9yIG5vbi1vYmplY3QgY2xhc3NlcyBpbXBsZW1lbnRzIGdldFByb3BlcnR5U2xvdC4KICAgICAg
ICAgYm9vbCBmYXN0R2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nLmNwcAkocmV2aXNpb24gNDQ2ODIpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiwxNiBAQCBib29sIEpT
U3RyaW5nOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0CiAgICAgcmV0dXJuIEpTU3RyaW5nOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5h
bWUpLCBzbG90KTsKIH0KIAorc2l6ZV90IEpTU3RyaW5nOjppbnN0YW5jZVNpemUoKSBjb25zdAor
eworICAgIHNpemVfdCBjb21wdXRlZFNpemUgPSBzaXplb2YoKnRoaXMpOworCisgICAgY29tcHV0
ZWRTaXplICs9IHZhbHVlKCkuc2l6ZSgpICogc2l6ZW9mKFVDaGFyKSArIHZhbHVlKCkuY29zdCgp
OworLy8gIEZJWE1FOiBBZGQgc3RydWN0dXJlIHNpemUKKworICAgIHJldHVybiBjb21wdXRlZFNp
emU7Cit9CisKIEpTU3RyaW5nKiBqc1N0cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNv
bnN0IFVTdHJpbmcmIHMpCiB7CiAgICAgaW50IHNpemUgPSBzLnNpemUoKTsKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDQ0NjgyKQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw4IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRl
U3RydWN0dXJlKEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3Rv
LCBUeXBlSW5mbyhTdHJpbmdUeXBlLCBOZWVkc1RoaXNDb252ZXJzaW9uKSk7IH0KIAorICAgICAg
ICB2aXJ0dWFsIHNpemVfdCBpbnN0YW5jZVNpemUoKSBjb25zdDsKKwogICAgIHByaXZhdGU6CiAg
ICAgICAgIGVudW0gVlB0clN0ZWFsaW5nSGFja1R5cGUgeyBWUHRyU3RlYWxpbmdIYWNrIH07CiAg
ICAgICAgIEpTU3RyaW5nKFZQdHJTdGVhbGluZ0hhY2tUeXBlKSAKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL051bWJlck9iamVjdC5jcHAJKHJldmlzaW9uIDQ0NjgyKQorKysgSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0
MSwxMyBAQCBKU1ZhbHVlIE51bWJlck9iamVjdDo6Z2V0SlNOdW1iZXIoKQogICAgIHJldHVybiBp
bnRlcm5hbFZhbHVlKCk7CiB9CiAKK3NpemVfdCBOdW1iZXJPYmplY3Q6Omluc3RhbmNlU2l6ZSgp
IGNvbnN0Cit7CisvLyAgRklYTUU6IEFzaWRlIGZyb20gdGhpcywgd2Ugc2hvdWxkIHByb2JhYmx5
IG1lYXN1cmUgdGhlIHNpemUgb2YgdGhlCisvLyAgc3RydWN0dXJlL3Byb3BlcnR5IG1hcCBvZiBh
biBvYmplY3QgLSBzaG91bGQgcHJvYmFibHkgYmUgZG9uZSBoaWdlciB1cAorICAgIHJldHVybiBz
aXplb2YoKnRoaXMpOworfQorCiBOdW1iZXJPYmplY3QqIGNvbnN0cnVjdE51bWJlcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgbnVtYmVyKQogewogICAgIE51bWJlck9iamVjdCogb2JqZWN0ID0g
bmV3IChleGVjKSBOdW1iZXJPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5udW1i
ZXJPYmplY3RTdHJ1Y3R1cmUoKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJl
ck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2Jq
ZWN0LmgJKHJldmlzaW9uIDQ0NjgyKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAKKyAgICAgICAgdmlydHVh
bCBzaXplX3QgaW5zdGFuY2VTaXplKCkgY29uc3Q7CisKICAgICBwcml2YXRlOgogICAgICAgICB2
aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87
IH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkocmV2aXNp
b24gNDQ2ODIpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk4LDQgKzk4LDE2IEBAIEpTU3RyaW5nKiBTdHJpbmdPYmplY3Q6OnRv
VGhpc0pTU3RyaW5nKEUKICAgICByZXR1cm4gaW50ZXJuYWxWYWx1ZSgpOwogfQogCitzaXplX3Qg
U3RyaW5nT2JqZWN0OjppbnN0YW5jZVNpemUoKSBjb25zdAoreworICAgIHNpemVfdCBjb21wdXRl
ZFNpemUgPSBzaXplb2YoKnRoaXMpOworCisvLyAgQWRkIHNpemUgb2YgdGhlIGNvbnRhaW5lZCBK
U1N0cmluZyBvYmplY3QKKyAgICBjb21wdXRlZFNpemUgKz0gaW50ZXJuYWxWYWx1ZSgpLT5pbnN0
YW5jZVNpemUoKTsKKworLy8gIEZJWE1FOiBBZGQgc3RydWN0dXJlIHNpemUgKGlmIHRoaXMgb2Jq
ZWN0IGhhcyBhIFN0cnVjdHVyZSBtZW1iZXIpCisKKyAgICByZXR1cm4gY29tcHV0ZWRTaXplOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdP
YmplY3QuaAkocmV2aXNpb24gNDQ2ODIpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSkpOwogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCBzaXplX3QgaW5z
dGFuY2VTaXplKCkgY29uc3Q7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBTdHJpbmdPYmplY3Qo
UGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBKU1N0cmluZyopOwogCkluZGV4OiBXZWJDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNDQ2ODkpCisr
KyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDA5
LTA2LTE1ICBIb3JpYSBPbGFydSAgPG9sYXJ1QGFkb2JlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMTA5MzA6IFdlYktpdCBjb3VsZCBi
ZW5lZml0IGZyb20gYSBKYXZhU2NyaXB0IGxpdmUgb2JqZWN0IHByb2ZpbGVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDkzMAorCisgICAgICAgIEFk
ZGVkIHR3byBuZXcgaGVhZGVycyB0byBmb3J3YXJkIEphdmFTY3JpcHRDb3JlIGhlYWRlcnMuCisK
KyAgICAgICAgTW9kaWZpZWQgQ29kZUdlbmVyYXRvckpTLnBtIHRvIGNoZWNrIGZvciB0aGUgIkhh
c0luc3RhbmNlU2l6ZSIKKyAgICAgICAgYXR0cmlidXRlIGFuZCBpbnNlcnQgYW4gaW5zdGFuY2VT
aXplIG1ldGhvZCBpbiB0aGUgZ2VuZXJhdGVkIEpTT2JqZWN0cy4KKyAgICAgICAgVGhpcyBtZXRo
b2QgY2FsbHMgdGhlIGVsZW1lbnRTaXplIG1ldGhvZCBmcm9tIHRoZSBET00gb2JqZWN0CisgICAg
ICAgIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIEFkZGVkIGFuIGVsZW1lbnRTaXplIG1ldGhv
ZCB0byBIVE1MSW1hZ2VFbGVtZW50IGFuZCB1cGRhdGVkIHRoZSBpZGwKKyAgICAgICAgdG8gcmVm
bGVjdCB0aGlzIGZvciB0aGUgZ2VuZXJhdG9yIHNjcmlwdC4gVGhpcyBpcyBub3QgYSBjb21wbGV0
ZQorICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiBhIHNpemUgZnVuY3Rpb24sIGJ1dCBpcyBhZGRl
ZCB0byBwcm92ZSBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgIEFkZGVkIHRoZSBKYXZhU2NyaXB0
T2JqZWN0SWRlbnRpZmllciB0byB0aGUgaW5zcGVjdG9yLiBUaGlzIGlzIGEgY2xhc3MKKyAgICAg
ICAgY29udGFpbmluZyB0aGUgSlMgcmVwcmVzZW50YXRpb24gb2YgYSBwcm9maWxlciBsaXZlIG9i
amVjdC4gVGhlIG5ldworICAgICAgICBsaXZlT2JqZWN0cyBwcm9wZXJ0eSBhZGRlZCB0byB0aGUg
SmF2YVNjcmlwdFByb2ZpbGUgY2xhc3MgaXMgYW4gQXJyYXkKKyAgICAgICAgb2Ygc3VjaCBvYmpl
Y3RzLgorCisgICAgICAgIEFkZGVkIHRoZSBzZXRNZW1vcnlQcm9maWxpbmdFbmFibGVkKGJvb2xl
YW4pIGZ1bmN0aW9uIHRvIHRoZSBjb25zb2xlCisgICAgICAgIG9iamVjdC4gVGhpcyBpcyBhIHRl
bXBvcmFyeSBhZGRpdGlvbiwgdW50aWwgdGhlIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgb2YKKyAg
ICAgICAgbWVtb3J5IHByb2ZpbGluZyBpcyBob29rZWQgaW50byB0aGUgaW5zcGVjdG9yIFVJLgor
CisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcHJvZmlsZXIvTGl2ZU9iamVjdHMuaDogQWRk
ZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcHJvZmlsZXIvT2JqZWN0SWRlbnRpZmll
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAg
ICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFn
ZUVsZW1lbnQ6OmVsZW1lbnRTaXplKToKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQu
aDoKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuaWRsOgorICAgICAgICAqIGluc3Bl
Y3Rvci9KYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0SWQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0VHlwZU5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRDcmVhdGVkRnJvbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpPYmplY3RJZGVudGlmaWVyQ2xhc3MpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9KUyk6CisgICAgICAgICogaW5zcGVjdG9yL0phdmFTY3JpcHRPYmplY3RJZGVudGlmaWVy
Lmg6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRMaXZlT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpQcm9m
aWxlQ2xhc3MpOgorICAgICAgICAqIHBhZ2UvQ29uc29sZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb25zb2xlOjpzZXRNZW1vcnlQcm9maWxpbmdFbmFibGVkKToKKyAgICAgICAgKiBwYWdlL0Nv
bnNvbGUuaDoKKyAgICAgICAgKiBwYWdlL0NvbnNvbGUuaWRsOgorCiAyMDA5LTA2LTE1ICBTaW1v
biBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBhbmQgZG9uZSB3aXRoIFRvciBBcm5lIFZlc3Riw7guCkluZGV4OiBXZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL3Byb2ZpbGVyL0xpdmVPYmplY3RzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9wcm9maWxlci9MaXZlT2JqZWN0cy5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9wcm9maWxlci9MaXZlT2JqZWN0cy5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfTGl2ZU9iamVjdHNf
aAorI2RlZmluZSBXZWJDb3JlX0ZXRF9MaXZlT2JqZWN0c19oCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvTGl2ZU9iamVjdHMuaD4KKyNlbmRpZgpJbmRleDogV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy9wcm9maWxlci9PYmplY3RJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9wcm9maWxlci9PYmplY3RJZGVudGlmaWVyLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3Byb2ZpbGVyL09iamVjdElkZW50aWZpZXIu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX09iamVj
dElkZW50aWZpZXJfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9PYmplY3RJZGVudGlmaWVyX2gKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PYmplY3RJZGVudGlmaWVyLmg+CisjZW5kaWYKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NDY4
MikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC00MjU5LDYgKzQyNTksOCBAQAogCQlDMTA1REE2NDBGM0FBNkI4MDAxREQ0NEYg
LyogVGV4dEVuY29kaW5nRGV0ZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMxMDVEQTYzMEYzQUE2QjgwMDFERDQ0RiAvKiBUZXh0RW5jb2RpbmdE
ZXRlY3Rvci5oICovOyB9OwogCQlDNkQ3NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2Vs
ZWN0aW9uTGlzdExldmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDNkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExl
dmVsLmggKi87IH07CiAJCUM2RDc0QUU0MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rp
b25MaXN0TGV2ZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzZENzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZl
bC5jcHAgKi87IH07CisJCUNCMTEwMDRFMEY5NDhBNzcwMEU1ODM3OSAvKiBKYXZhU2NyaXB0T2Jq
ZWN0SWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0IxMTAwNEQwRjk0OEE3NzAwRTU4Mzc5IC8qIEphdmFTY3JpcHRPYmplY3RJZGVudGlm
aWVyLmggKi87IH07CisJCUNCMTEwMDUyMEY5NDhBRjYwMEU1ODM3OSAvKiBKYXZhU2NyaXB0T2Jq
ZWN0SWRlbnRpZmllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDQjExMDA1MTBGOTQ4QUY2MDBFNTgzNzkgLyogSmF2YVNjcmlwdE9iamVjdElkZW50
aWZpZXIuY3BwICovOyB9OwogCQlEMDVDRUQyOTBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0Qmxv
Y2tDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEQwNUNFRDI3MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwICov
OyB9OwogCQlEMDVDRUQyQTBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDVDRUQyODBB
NDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmggKi87IH07CiAJCUQwNkMwRDhG
MENGRDExNDYwMDY1RjQzRiAvKiBSZW1vdmVGb3JtYXRDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDZDMEQ4RDBDRkQxMTQ2MDA2NUY0M0Yg
LyogUmVtb3ZlRm9ybWF0Q29tbWFuZC5oICovOyB9OwpAQCAtOTA1Nyw2ICs5MDU5LDggQEAKIAkJ
QzEwNURBNjMwRjNBQTZCODAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRFbmNvZGluZ0RldGVjdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2Rp
ZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlz
dExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0IxMTAwNEQwRjk0OEE3
NzAwRTU4Mzc5IC8qIEphdmFTY3JpcHRPYmplY3RJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEphdmFTY3JpcHRPYmplY3RJZGVudGlmaWVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUNCMTEwMDUxMEY5NDhBRjYwMEU1ODM3OSAvKiBKYXZhU2Ny
aXB0T2JqZWN0SWRlbnRpZmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUQwNUNFRDI3MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1hdEJsb2NrQ29t
bWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwNUNFRDI4MEE0MEJCMkMw
MEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZvcm1hdEJsb2NrQ29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlEMDZDMEQ4RDBDRkQxMTQ2MDA2NUY0M0YgLyogUmVtb3ZlRm9ybWF0Q29tbWFuZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdmVGb3JtYXRDb21tYW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NjkzLDYgKzk2OTcsOCBAQAogCQkJCTdBQjZG
ODg1MEZCOUQyNzEwMDgwNUQwMiAvKiBJbnNwZWN0b3JKU09OT2JqZWN0LmNwcCAqLywKIAkJCQk3
QUI2Rjg4NjBGQjlEMjcxMDA4MDVEMDIgLyogSW5zcGVjdG9ySlNPTk9iamVjdC5oICovLAogCQkJ
CUJDQzY0RjVGMERDRkI4NEUwMDgxRUYzQiAvKiBsb2NhbGl6ZWRTdHJpbmdzLmpzICovLAorCQkJ
CUNCMTEwMDUxMEY5NDhBRjYwMEU1ODM3OSAvKiBKYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5j
cHAgKi8sCisJCQkJQ0IxMTAwNEQwRjk0OEE3NzAwRTU4Mzc5IC8qIEphdmFTY3JpcHRPYmplY3RJ
ZGVudGlmaWVyLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGluc3BlY3RvcjsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkBAIC0xMTY2Niw5ICsxMTY3Miw5IEBACiAJCQkJODU1NTQyOTcwQUE0
OTM4ODAwQkE4OUYyIC8qIEhUTUxJRnJhbWVFbGVtZW50LmlkbCAqLywKIAkJCQlBOEVBN0QyOTBB
MTkzODU1MDBBOEVGNUYgLyogSFRNTEltYWdlRWxlbWVudC5jcHAgKi8sCiAJCQkJQThFQTdEMjUw
QTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxJbWFnZUVsZW1lbnQuaCAqLywKLQkJCQkxQUUyQUE3OTBB
MUNEQzYxMDBCNDJCMjUgLyogSFRNTEltYWdlRWxlbWVudC5pZGwgKi8sCiAJCQkJQThFQTdEMjgw
QTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxJbWFnZUxvYWRlci5jcHAgKi8sCiAJCQkJQThFQTdEMjMw
QTE5Mzg1NTAwQThFRjVGIC8qIEhUTUxJbWFnZUxvYWRlci5oICovLAorCQkJCTFBRTJBQTc5MEEx
Q0RDNjEwMEI0MkIyNSAvKiBIVE1MSW1hZ2VFbGVtZW50LmlkbCAqLywKIAkJCQlBODEzNjlCMTA5
NzM3NEY1MDBENzQ0NjMgLyogSFRNTElucHV0RWxlbWVudC5jcHAgKi8sCiAJCQkJQTgxMzY5QjAw
OTczNzRGNTAwRDc0NDYzIC8qIEhUTUxJbnB1dEVsZW1lbnQuaCAqLywKIAkJCQlBODBFN0UxNzBB
MUE3Q0NCMDA3RkI4QzUgLyogSFRNTElucHV0RWxlbWVudC5pZGwgKi8sCkBAIC0xNjc4NSw2ICsx
Njc5MSw3IEBACiAJCQkJMjlBODEyNDkwRkJCOUNBOTAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEE4MUYzRTBGQzdERkYwMDA5NTUz
MDAgLyogU291cmNlQWxwaGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0QTgxRjQyMEZDN0UwMjcw
MDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmggaW4gSGVhZGVycyAqLywKKwkJCQlDQjExMDA0RTBG
OTQ4QTc3MDBFNTgzNzkgLyogSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA4QzkyNTFBMEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA4MjM0MUM2MEZDRjNBOTUwMEQ3NUJENiAvKiBXTUxTZWxlY3RFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDVFNzJGODBGRDI2MUVFMDBBODdENzkgLyogRmls
dGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTE4NzgwLDYgKzE4Nzg3LDcgQEAKIAkJCQkyOUE4MTI0
QjBGQkI5Q0E5MDA1MTAyOTMgLyogQVhPYmplY3RDYWNoZU1hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTg0QTgxRjNEMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4NEE4MUY0MTBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNlR3JhcGhpYy5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlDQjExMDA1MjBGOTQ4QUY2MDBFNTgzNzkgLyogSmF2YVNjcmlw
dE9iamVjdElkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDhDOTI1MTkwRkNDN0M0
QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODIzNDFD
NTBGQ0YzQTk1MDBENzVCRDYgLyogV01MU2VsZWN0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NDVFNzJGQjBGRDI2MjM5MDBBODdENzkgLyogU1ZHRmlsdGVyLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CShyZXZpc2lvbiA0NDY4MikKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTU3Niw2ICs1NzYsMTAgQEAgc3ViIEdlbmVyYXRl
SGVhZGVyCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiSGFzSW5zdGFuY2VTaXplIn0pIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICB2aXJ0dWFsIHNpemVfdCBpbnN0YW5jZVNpemUoKSBjb25zdDtcbiIpOworICAg
IH0KKwogICAgIGlmICghJGhhc1BhcmVudCkgewogICAgICAgICBpZiAoJHBvZFR5cGUpIHsKICAg
ICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlNTVkdQT0RUeXBlV3JhcHBlcjwk
cG9kVHlwZT4qIGltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH1cbiIpOwpAQCAt
MTM0MSw2ICsxMzQ1LDEzIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9CiAKKyAgICBpZiAoJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzSW5zdGFuY2VTaXplIn0pIHsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJzaXplX3QgJHtjbGFzc05hbWV9OjppbnN0YW5jZVNpemUoKSBjb25zdFxu
e1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBp
bXAgPSBzdGF0aWNfY2FzdDwke2ltcGxDbGFzc05hbWV9Kj4oaW1wbCgpKTtcbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gaW1wLT5lbGVtZW50U2l6ZSgpO1xuIik7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKyAgICB9CisKICAgICAjIEZ1
bmN0aW9ucwogICAgIGlmICgkbnVtRnVuY3Rpb25zID4gMCkgewogICAgICAgICBmb3JlYWNoIG15
ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElt
YWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ0NjgyKQorKysgV2ViQ29yZS9odG1sL0hUTUxJbWFn
ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwxNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKK3NpemVfdCBIVE1MSW1h
Z2VFbGVtZW50OjplbGVtZW50U2l6ZSgpIGNvbnN0Cit7CisgICAgc2l6ZV90IGNvbXB1dGVkU2l6
ZSA9IHNpemVvZigqdGhpcyk7CisKKyAgICAvL3Nob3VsZCB3ZSBjb21wdXRlIGFuZCBhZGQgdGhl
IHJlbmRlciBhcmVhIHNpemU/CisgICAgaWYoY2FjaGVkSW1hZ2UoKSAmJiBjYWNoZWRJbWFnZSgp
LT5pbWFnZSgpLT5kYXRhKCkpCisgICAgICAgIGNvbXB1dGVkU2l6ZSArPSBjYWNoZWRJbWFnZSgp
LT5pbWFnZSgpLT5kYXRhKCktPnNpemUoKTsKKworICAgIHJldHVybiBjb21wdXRlZFNpemU7Cit9
CisKIEhUTUxJbWFnZUVsZW1lbnQ6OkhUTUxJbWFnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQogICAgIDog
SFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQogICAgICwgbV9pbWFnZUxvYWRlcih0aGlzKQpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCShyZXZpc2lvbiA0NDY4MikKKysrIFdlYkNvcmUvaHRt
bC9IVE1MSW1hZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUsOCBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExp
c3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7CiAKKyAgICBzaXplX3QgZWxlbWVudFNpemUoKSBjb25z
dDsKKwogcHJpdmF0ZToKICAgICBIVE1MSW1hZ2VMb2FkZXIgbV9pbWFnZUxvYWRlcjsKICAgICBT
dHJpbmcgdXNlbWFwOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmlkbAkocmV2aXNpb24g
NDQ2ODIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDYgKzIyLDcgQEAgbW9kdWxlIGh0bWwgewogCiAgICAgaW50ZXJmYWNlIFsKICAg
ICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvciwKKyAgICAgICAgSGFzSW5zdGFuY2VTaXplLAogICAg
ICAgICBJbnRlcmZhY2VVVUlEPWIyMWI4MTI1LWQwMGItNGJkZi1iMGU4LTY1OTY3OGRiMzkyMywK
ICAgICAgICAgSW1wbGVtZW50YXRpb25VVUlEPTIxMjFjYTIxLTgxMTgtNGYxYi1iOWZlLTQ3ODhh
OTA1MDI4MQogICAgIF0gSFRNTEltYWdlRWxlbWVudCA6IEhUTUxFbGVtZW50IHsKSW5kZXg6IFdl
YkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRPYmplY3RJZGVudGlmaWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmll
ci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEhvcmlhIE9sYXJ1IDxvbGFydUBhZG9iZS5jb20+LiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmll
ci5oIgorCisjaW5jbHVkZSAicHJvZmlsZXIvUHJvZmlsZU5vZGUuaCIKKyNpbmNsdWRlICJwcm9m
aWxlci9PYmplY3RJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdENvcmUvQVBJQ2Fz
dC5oIgorI2luY2x1ZGUgIkphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmgiCisjaW5jbHVkZSAi
SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0Q29yZS9K
U1JldGFpblB0ci5oIgorI2luY2x1ZGUgIkphdmFTY3JpcHRDb3JlL0pTSW1tZWRpYXRlLmgiCisj
aW5jbHVkZSAiSmF2YVNjcmlwdFByb2ZpbGVOb2RlLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU1Zh
bHVlLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgorCisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEpTVmFsdWVSZWYgZ2V0SWQo
SlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpT
VmFsdWVSZWYqKQoreworICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjdHgsIHRoaXNP
YmplY3QsIE9iamVjdElkZW50aWZpZXJDbGFzcygpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGN0eCk7CisKKyAgICBPYmplY3RJZGVudGlmaWVyKiBvYmogPSBzdGF0aWNf
Y2FzdDxPYmplY3RJZGVudGlmaWVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY3R4LCBvYmotPm1faWQpOworfQorCitzdGF0
aWMgSlNWYWx1ZVJlZiBnZXRUeXBlTmFtZShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiB0
aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiopCit7CisgICAgaWYgKCFKU1ZhbHVl
SXNPYmplY3RPZkNsYXNzKGN0eCwgdGhpc09iamVjdCwgT2JqZWN0SWRlbnRpZmllckNsYXNzKCkp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIE9iamVj
dElkZW50aWZpZXIqIG9iaiA9IHN0YXRpY19jYXN0PE9iamVjdElkZW50aWZpZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0
eXBlTmFtZVN0cmluZyhBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhvYmotPm1f
dHlwZS5kYXRhKCksIG9iai0+bV90eXBlLnNpemUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVN0cmluZyhjdHgsIHR5cGVOYW1lU3RyaW5nLmdldCgpKTsKK30KKworc3RhdGljIEpTVmFsdWVS
ZWYgZ2V0U2l6ZShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0
cmluZ1JlZiwgSlNWYWx1ZVJlZiopCit7CisgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3RPZkNsYXNz
KGN0eCwgdGhpc09iamVjdCwgT2JqZWN0SWRlbnRpZmllckNsYXNzKCkpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIE9iamVjdElkZW50aWZpZXIqIG9i
aiA9IHN0YXRpY19jYXN0PE9iamVjdElkZW50aWZpZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjdHgsIG9iai0+bV9zaXpl
KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZ2V0Q3JlYXRlZEZyb20oSlNDb250ZXh0UmVmIGN0
eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqKQorewor
ICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjdHgsIHRoaXNPYmplY3QsIE9iamVjdElk
ZW50aWZpZXJDbGFzcygpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0
eCk7CisKKyAgICBPYmplY3RJZGVudGlmaWVyKiBvYmogPSBzdGF0aWNfY2FzdDxPYmplY3RJZGVu
dGlmaWVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBFeGVjU3RhdGUq
IGV4ZWMgPSB0b0pTKGN0eCk7CisgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIHRvSlMoZXhlYywgb2Jq
LT5tX2NyZWF0aW5nRnVuY3Rpb24uZ2V0KCkpKTsKK30KKworSlNDbGFzc1JlZiBPYmplY3RJZGVu
dGlmaWVyQ2xhc3MoKQoreworICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1td
ID0geworICAgICAgICB7ICJpZCIsIGdldElkLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUg
fSwKKyAgICAgICAgeyAidHlwZU5hbWUiLCBnZXRUeXBlTmFtZSwgMCwga0pTUHJvcGVydHlBdHRy
aWJ1dGVOb25lIH0sCisgICAgICAgIHsgInNpemUiLCBnZXRTaXplLCAwLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZU5vbmUgfSwKKyAgICAgICAgeyAiY3JlYXRlZEZyb20iLCBnZXRDcmVhdGVkRnJvbSwg
MCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCisgICAgICAgIHsgMCwgMCwgMCwgMCB9Cisg
ICAgfTsKKworICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSB7
CisgICAgICAgIDAsIGtKU0NsYXNzQXR0cmlidXRlTm9uZSwgIk9iamVjdElkZW50aWZpZXIiLCAw
LCBzdGF0aWNWYWx1ZXMsIDAsCisgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAKKyAgICB9OworCisgICAgc3RhdGljIEpTQ2xhc3NSZWYgb2JqZWN0SW5mb0NsYXNzID0gSlND
bGFzc0NyZWF0ZSgmY2xhc3NEZWZpbml0aW9uKTsKKyAgICByZXR1cm4gb2JqZWN0SW5mb0NsYXNz
OworfQorCitKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBPYmplY3RJZGVudGlmaWVyKiBv
YmplY3RJbmZvKQoreworICAgIGlmICghb2JqZWN0SW5mbykKKyAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOworCisgICAgLy9GSVhNRTogbWF5IG5lZWQgdG8gY2FjaGUgdGhlIHRyYW5zZm9ybWVkIEpT
IG9iamVjdHMuCisgICAgSlNPYmplY3QqIG9iamVjdEluZm9XcmFwcGVyID0gdG9KUyhKU09iamVj
dE1ha2UodG9SZWYoZXhlYyksIE9iamVjdElkZW50aWZpZXJDbGFzcygpLCBzdGF0aWNfY2FzdDx2
b2lkKj4ob2JqZWN0SW5mbykpKTsKKyAgICByZXR1cm4gb2JqZWN0SW5mb1dyYXBwZXI7Cit9CisK
K30KSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRPYmplY3RJZGVudGlmaWVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdE9iamVjdElkZW50aWZp
ZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRPYmplY3RJ
ZGVudGlmaWVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgSG9yaWEgT2xhcnUgPG9sYXJ1QGFkb2JlLmNvbT4uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBKYXZhU2NyaXB0T2JqZWN0SW5mb3JtYXRpb25faAorI2RlZmluZSBKYXZh
U2NyaXB0T2JqZWN0SW5mb3JtYXRpb25faAorCisjaW5jbHVkZSA8cnVudGltZS9KU1ZhbHVlLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
ICAgIGNsYXNzIEV4ZWNTdGF0ZTsKKyAgICBjbGFzcyBPYmplY3RJZGVudGlmaWVyOworfQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBKU0NsYXNzUmVmIE9iamVjdElkZW50aWZpZXJDbGFz
cygpOworICAgIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpPYmplY3RJ
ZGVudGlmaWVyKik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuY3BwCShyZXZpc2lvbiA0NDY4MikKKysr
IFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksOSArMjksMTMgQEAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKIAogI2lu
Y2x1ZGUgIkphdmFTY3JpcHRQcm9maWxlTm9kZS5oIgorI2luY2x1ZGUgIkphdmFTY3JpcHRPYmpl
Y3RJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8cHJvZmlsZXIvUHJvZmlsZS5oPgorI2luY2x1ZGUg
PHByb2ZpbGVyL0xpdmVPYmplY3RzLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJQ2Fz
dC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09wYXF1ZUpTU3RyaW5nLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9KU09iamVjdC5oPgpAQCAtMTMxLDYgKzEzNSw1NCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBy
ZXN0b3JlQWxsKEpTQ29udGV4dFJlCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0
eCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGdldExpdmVPYmplY3RzKEpTQ29udGV4dFJlZiBj
dHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgUHJvZmlsZSogcHJvZmlsZSA9IHN0YXRpY19jYXN0PFByb2ZpbGUqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGlmICghcHJvZmlsZSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisKKyAgICBWZWN0b3I8T2JqZWN0
SWRlbnRpZmllciogPiBvYmplY3RzOworICAgIHByb2ZpbGUtPmxpdmVPYmplY3RzKCktPnRvVmVj
dG9yKG9iamVjdHMpOworCisgICAgSlNPYmplY3RSZWYgZ2xvYmFsID0gSlNDb250ZXh0R2V0R2xv
YmFsT2JqZWN0KGN0eCk7CisKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBhcnJheVN0
cmluZyhBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkFycmF5IikpOworCisg
ICAgSlNWYWx1ZVJlZiBhcnJheVByb3BlcnR5ID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjdHgsIGds
b2JhbCwgYXJyYXlTdHJpbmcuZ2V0KCksIGV4Y2VwdGlvbik7CisgICAgaWYgKGV4Y2VwdGlvbiAm
JiAqZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsK
KworICAgIEpTT2JqZWN0UmVmIGFycmF5Q29uc3RydWN0b3IgPSBKU1ZhbHVlVG9PYmplY3QoY3R4
LCBhcnJheVByb3BlcnR5LCBleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2Vw
dGlvbikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisKKyAgICBK
U09iamVjdFJlZiByZXN1bHQgPSBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yKGN0eCwgYXJyYXlD
b25zdHJ1Y3RvciwgMCwgMCwgZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uICYmICpleGNl
cHRpb24pCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworCisgICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHB1c2hTdHJpbmcoQWRvcHQsIEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJwdXNoIikpOworCisgICAgSlNWYWx1ZVJlZiBwdXNoUHJvcGVydHkg
PSBKU09iamVjdEdldFByb3BlcnR5KGN0eCwgcmVzdWx0LCBwdXNoU3RyaW5nLmdldCgpLCBleGNl
cHRpb24pOworICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisKKyAgICBKU09iamVjdFJlZiBwdXNoRnVuY3Rp
b24gPSBKU1ZhbHVlVG9PYmplY3QoY3R4LCBwdXNoUHJvcGVydHksIGV4Y2VwdGlvbik7CisgICAg
aWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY3R4KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0cy5zaXpl
KCk7ICsraSkgeworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7CisgICAgICAg
IEpTVmFsdWVSZWYgb2JqID0gdG9SZWYoZXhlYywgdG9KUyhleGVjLCBvYmplY3RzW2ldKSk7CisK
KyAgICAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbihjdHgsIHB1c2hGdW5jdGlvbiwgcmVzdWx0
LCAxLCAmb2JqLCBleGNlcHRpb24pOworICAgICAgICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRp
b24pCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKyAgICB9
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU09iamVj
dFJlZiBvYmplY3QpCiB7CiAgICAgUHJvZmlsZSogcHJvZmlsZSA9IHN0YXRpY19jYXN0PFByb2Zp
bGUqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CkBAIC0xNDMsNiArMTk1LDcgQEAgSlND
bGFzc1JlZiBQcm9maWxlQ2xhc3MoKQogICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1Zh
bHVlc1tdID0gewogICAgICAgICB7ICJ0aXRsZSIsIGdldFRpdGxlQ2FsbGJhY2ssIDAsIGtKU1By
b3BlcnR5QXR0cmlidXRlTm9uZSB9LAogICAgICAgICB7ICJoZWFkIiwgZ2V0SGVhZENhbGxiYWNr
LCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKKyAgICAgICAgeyAibGl2ZU9iamVjdHMi
LCBnZXRMaXZlT2JqZWN0cywwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKICAgICAgICAg
eyAidWlkIiwgZ2V0VW5pcXVlSWRDYWxsYmFjaywgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25l
IH0sCiAgICAgICAgIHsgMCwgMCwgMCwgMCB9CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9D
b25zb2xlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29uc29sZS5jcHAJKHJldmlz
aW9uIDQ0NjgyKQorKysgV2ViQ29yZS9wYWdlL0NvbnNvbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMTAsNiArMzEwLDE5IEBAIHZvaWQgQ29uc29sZTo6cHJvZmlsZUVuZChjb25zdCBKU0M6OlVT
dHIKICAgICB9CiB9CiAKK3ZvaWQgQ29uc29sZTo6c2V0TWVtb3J5UHJvZmlsaW5nRW5hYmxlZChi
b29sIGlzRW5hYmxlZCkKK3sKKyAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOworICAgIGlm
ICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IGxvZyBhIGNvbnNvbGUg
bWVzc2FnZSB3aGVuIHByb2ZpbGluZyBpcyBkaXNhYmxlZC4KKyAgICBpZiAoIXBhZ2UtPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS0+cHJvZmlsZXJFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEpTQzo6UHJvZmlsZXI6OnByb2ZpbGVyKCktPnNldElzTWVtb3J5UHJvZmlsaW5nKGlzRW5h
YmxlZCk7Cit9CisKICNlbmRpZgogICAgIAogdm9pZCBDb25zb2xlOjp0aW1lKGNvbnN0IFN0cmlu
ZyYgdGl0bGUpCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29uc29sZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9Db25zb2xlLmgJKHJldmlzaW9uIDQ0NjgyKQorKysgV2ViQ29yZS9wYWdlL0Nv
bnNvbGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgICAgIHZvaWQgcHJvZmls
ZShjb25zdCBKU0M6OlVTdHJpbmcmLCBTY3JpcHRDYWxsU3RhY2sqKTsKICAgICAgICAgdm9pZCBw
cm9maWxlRW5kKGNvbnN0IEpTQzo6VVN0cmluZyYsIFNjcmlwdENhbGxTdGFjayopOworICAgICAg
ICAvLyBUaGlzIGlzIHRlbXBvcmFyeSwgdW50aWwgYSBob29rIGlzIGFkZGVkIHRvIHRoZSBVSS9J
bnNwZWN0b3IgdG8gZW5hYmxlIG9yIAorICAgICAgICAvLyBkaXNhYmxlIG1lbW9yeSBwcm9maWxp
bmcKKyAgICAgICAgdm9pZCBzZXRNZW1vcnlQcm9maWxpbmdFbmFibGVkKGJvb2wgaXNFbmFibGVk
KTsKICNlbmRpZgogICAgICAgICB2b2lkIHRpbWUoY29uc3QgU3RyaW5nJik7CiAgICAgICAgIHZv
aWQgdGltZUVuZChjb25zdCBTdHJpbmcmLCBTY3JpcHRDYWxsU3RhY2sqKTsKSW5kZXg6IFdlYkNv
cmUvcGFnZS9Db25zb2xlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29uc29sZS5p
ZGwJKHJldmlzaW9uIDQ0NjgyKQorKysgV2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIG1vZHVsZSB3aW5kb3cgewogI2lmIGRlZmluZWQoRU5B
QkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSCiAg
ICAgICAgIFtDdXN0b21Bcmd1bWVudEhhbmRsaW5nXSB2b2lkIHByb2ZpbGUoaW4gW0NvbnZlcnRV
bmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB0aXRsZSk7CiAgICAgICAgIFtD
dXN0b21Bcmd1bWVudEhhbmRsaW5nXSB2b2lkIHByb2ZpbGVFbmQoaW4gW0NvbnZlcnRVbmRlZmlu
ZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB0aXRsZSk7CisgICAgICAgIHZvaWQgc2V0
TWVtb3J5UHJvZmlsaW5nRW5hYmxlZChpbiBib29sZWFuIGlzRW5hYmxlZCk7CiAjZW5kaWYKIAog
ICAgICAgICB2b2lkIHRpbWUoaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmdd
IERPTVN0cmluZyB0aXRsZSk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NDY4OSkKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDA5LTA2LTE1
ICBIb3JpYSBPbGFydSAgPG9sYXJ1QGFkb2JlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMTA5MzA6IFdlYktpdCBjb3VsZCBiZW5lZml0
IGZyb20gYSBKYXZhU2NyaXB0IGxpdmUgb2JqZWN0IHByb2ZpbGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDkzMAorCisgICAgICAgIFRoZSBzZXRN
ZW1vcnlQcm9maWxpbmdFbmFiZWQgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSB3aW5kb3cuY29u
c29sZS4KKyAgICAgICAgVGhpcyBhZGRpdGlvbiBjYXVzZWQgdGhlIGZhc3QvZG9tL1dpbmRvdy93
aW5kb3ctcHJvcGVydGllcy5odG1sIHRlc3QgdG8gZmFpbC4KKyAgICAgICAgQWRkZWQgdGhlIGV4
dHJhIGZ1bmN0aW9uIHRvIHRoZSBleHBlY3RlZCByZXN1bHRzLgorCisgICAgICAgICogZmFzdC9k
b20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dDoKKwogMjAwOS0wNi0xNCAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFu
IEJlcm5zdGVpbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJv
cGVydGllcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20v
V2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDQ2ODIpCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNjMyLDYgKzE2MzIsNyBAQCB3aW5kb3cuY29uc29sZS5s
b2cgW2Z1bmN0aW9uXQogd2luZG93LmNvbnNvbGUucHJvZmlsZSBbZnVuY3Rpb25dCiB3aW5kb3cu
Y29uc29sZS5wcm9maWxlRW5kIFtmdW5jdGlvbl0KIHdpbmRvdy5jb25zb2xlLnByb2ZpbGVzIFtv
YmplY3QgQXJyYXldCit3aW5kb3cuY29uc29sZS5zZXRNZW1vcnlQcm9maWxpbmdFbmFibGVkIFtm
dW5jdGlvbl0KIHdpbmRvdy5jb25zb2xlLnRpbWUgW2Z1bmN0aW9uXQogd2luZG93LmNvbnNvbGUu
dGltZUVuZCBbZnVuY3Rpb25dCiB3aW5kb3cuY29uc29sZS50cmFjZSBbZnVuY3Rpb25dCg==
</data>
<flag name="review"
          id="15987"
          type_id="1"
          status="-"
          setter="kmccullough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31800</attachid>
            <date>2009-06-24 12:03:31 -0700</date>
            <delta_ts>2009-07-03 07:09:40 -0700</delta_ts>
            <desc>Adds live object profiling capabilities</desc>
            <filename>svnProfilerPatch04</filename>
            <type>text/plain</type>
            <size>94576</size>
            <attacher name="Horia Olaru">olaru</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1MDg3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODggQEAKKzIwMDktMDYtMjQgIEhvcmlhIE9s
YXJ1ICA8b2xhcnVAYWRvYmUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEJ1ZyAxMDkzMDogV2ViS2l0IGNvdWxkIGJlbmVmaXQgZnJvbSBhIEph
dmFTY3JpcHQgbGl2ZSBvYmplY3QgcHJvZmlsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTMwCisKKyAgICAgICAgQWRkZWQgaW5zdGFuY2VTaXpl
IG1ldGhvZCBvbiBKU0NlbGwgdG8gYmUgaW5oZXJpdGVkIGJ5IG90aGVyIEpTIG9iamVjdHMuCisg
ICAgICAgIEltcGxlbWVudGVkIGluc3RhbmNlU2l6ZSBmb3IgYSBmZXcgYmFzaWMgdHlwZXMuCisK
KyAgICAgICAgQWRkZWQgdGhlIExpdmVPYmplY3RzIGNsYXNzIHRvIGNvbnRhaW4gYSBtYXBwaW5n
IGJldHdlZW4gSlNDZWxscyBhbmQKKyAgICAgICAgUHJvZmlsZU5vZGVzLCB0byByZWNvcmQgc3Rh
Y2sgdHJhY2VzIGZvciBvYmplY3QgY3JlYXRpb24uIFRoZSBtZXRob2RzCisgICAgICAgIGluIHRo
aXMgY2xhc3MgaGF2ZSBiZWVuIGV4cG9zZWQgdXAgdG8gdGhlIFByb2ZpbGVyIGNsYXNzLiBUaGVz
ZSBtZXRob2RzCisgICAgICAgIGFyZSBjYWxsZWQgYXQgY2VsbCBhbGxvY2F0aW9uIGFuZCBjb2xs
ZWN0aW9uIHRpbWUsIHRvIHJlY29yZCB0aGUgSlMKKyAgICAgICAgZnVuY3Rpb24gdGhhdCBjcmVh
dGVkIHRoZSBvYmplY3QuCisKKyAgICAgICAgQWRkZWQgdGhlIE9iamVjdElkZW50aWZpZXIgc3Ry
dWN0dXJlLCB1c2VkIHRvIHJlcHJlc2VudCBsaXZlIG9iamVjdHMKKyAgICAgICAgYW5kIGFnZ3Jl
Z2F0ZSByZWxldmFudCBkYXRhIGZvciB0aGVtLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
ZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogcHJvZmlsZXIvTGl2ZU9iamVjdHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6TGl2ZU9iamVjdHM6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjpMaXZl
T2JqZWN0cyk6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjp+TGl2ZU9iamVjdHMpOgorICAg
ICAgICAoSlNDOjpMaXZlT2JqZWN0czo6YWRkTm9kZSk6CisgICAgICAgIChKU0M6OkxpdmVPYmpl
Y3RzOjpyZW1vdmVOb2RlKToKKyAgICAgICAgKEpTQzo6TGl2ZU9iamVjdHM6OmlzRnJlZSk6Cisg
ICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjpmbHVzaExpdmVPYmplY3RzKToKKyAgICAgICAgKEpT
Qzo6TGl2ZU9iamVjdHM6OnRvVmVjdG9yKToKKyAgICAgICAgKiBwcm9maWxlci9MaXZlT2JqZWN0
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TGl2ZU9iamVjdHM6OmlzRW1wdHkpOgorICAgICAg
ICAoSlNDOjpMaXZlT2JqZWN0czo6Y2FjaGVkT2JqZWN0cyk6CisgICAgICAgIChKU0M6OkxpdmVP
YmplY3RzOjpiZWdpbik6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjplbmQpOgorICAgICAg
ICAqIHByb2ZpbGVyL09iamVjdElkZW50aWZpZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
T2JqZWN0SWRlbnRpZmllcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6T2JqZWN0SWRlbnRpZmll
cjo6T2JqZWN0SWRlbnRpZmllcik6CisgICAgICAgICogcHJvZmlsZXIvT2JqZWN0SWRlbnRpZmll
ci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0SWRlbnRpZmllcjo6dWlkKToKKyAgICAg
ICAgKEpTQzo6T2JqZWN0SWRlbnRpZmllcjo6dHlwZSk6CisgICAgICAgIChKU0M6Ok9iamVjdElk
ZW50aWZpZXI6OnNpemUpOgorICAgICAgICAoSlNDOjpPYmplY3RJZGVudGlmaWVyOjpjcmVhdGlu
Z0Z1bmN0aW9uKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6UHJvZmlsZTo6UHJvZmlsZSk6CisgICAgICAgIChKU0M6OlByb2ZpbGU6OmxpdmVPYmplY3Rz
KToKKyAgICAgICAgKEpTQzo6UHJvZmlsZTo6b2JqZWN0Q3JlYXRlZCk6CisgICAgICAgIChKU0M6
OlByb2ZpbGU6Om9iamVjdENvbGxlY3RlZCk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZS5o
OgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpQcm9maWxlR2VuZXJhdG9yOjpvYmplY3RDcmVhdGVkKToKKyAgICAgICAgKEpTQzo6UHJvZmls
ZUdlbmVyYXRvcjo6b2JqZWN0Q29sbGVjdGVkKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZUdlbmVy
YXRvcjo6c3RvcFByb2ZpbGluZyk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRv
ci5oOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6UHJv
ZmlsZXI6OlByb2ZpbGVyKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OnByb2ZpbGVyKToKKyAg
ICAgICAgKEpTQzo6UHJvZmlsZXI6On5Qcm9maWxlcik6CisgICAgICAgIChKU0M6OlByb2ZpbGVy
OjpzdGFydFByb2ZpbGluZyk6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpzdG9wUHJvZmlsaW5n
KToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6Om9iamVjdENyZWF0ZWQpOgorICAgICAgICAoSlND
OjpQcm9maWxlcjo6b2JqZWN0Q29sbGVjdGVkKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxl
ci5oOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6c2V0SXNNZW1vcnlQcm9maWxpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvQ29sbGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6c3dlZXAp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
Omluc3RhbmNlU2l6ZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgICog
cnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpKU0NlbGw6Om9wZXJhdG9yIG5ldyk6
CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbnN0
YW5jZVNpemUpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnNldERvQ29sbGVjdEFsbG9jYXRpb25U
cmFjZXMpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmRvQ29sbGVjdEFsbG9jYXRpb25UcmFjZXMp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1N0cmlu
Zzo6aW5zdGFuY2VTaXplKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAg
ICogcnVudGltZS9OdW1iZXJPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpOdW1iZXJPYmplY3Q6
Omluc3RhbmNlU2l6ZSk6CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuaDoKKyAgICAg
ICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVj
dDo6aW5zdGFuY2VTaXplKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5oOgorCiAy
MDA5LTA2LTI0ICBab2x0YW4gSG9ydmF0aCAgPGh6b2x0YW5AaW5mLnUtc3plZ2VkLmh1PgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFrLgpJbmRleDogSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAkocmV2aXNpb24gNDUwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw4ICszMjYsOSBAQCBfX1pOM1dURjhD
b2xsYXRvckQxRXYKIF9fWk4zV1RGOGZhc3RGcmVlRVB2CiBfX1pOM1dURjlCeXRlQXJyYXk2Y3Jl
YXRlRW0KIF9fWk5LM0pTQzExSW50ZXJwcmV0ZXIxNHJldHJpZXZlQ2FsbGVyRVBOU185RXhlY1N0
YXRlRVBOU18xNkludGVybmFsRnVuY3Rpb25FCi1fX1pOSzNKU0MxMUludGVycHJldGVyMThyZXRy
aWV2ZUxhc3RDYWxsZXJFUE5TXzlFeGVjU3RhdGVFUmlSbFJOU183VVN0cmluZ0VSTlNfN0pTVmFs
dWVFICAKK19fWk5LM0pTQzExSW50ZXJwcmV0ZXIxOHJldHJpZXZlTGFzdENhbGxlckVQTlNfOUV4
ZWNTdGF0ZUVSaVJsUk5TXzdVU3RyaW5nRVJOU183SlNWYWx1ZUUKIF9fWk5LM0pTQzEyRGF0ZUlu
c3RhbmNlN2dldFRpbWVFUmRSaQorX19aTkszSlNDMTJTdHJpbmdPYmplY3QxMmluc3RhbmNlU2l6
ZUV2CiBfX1pOSzNKU0MxMlN0cmluZ09iamVjdDEydG9UaGlzU3RyaW5nRVBOU185RXhlY1N0YXRl
RQogX19aTkszSlNDMTJTdHJpbmdPYmplY3Q4dG9TdHJpbmdFUE5TXzlFeGVjU3RhdGVFCiBfX1pO
SzNKU0MxNEpTR2xvYmFsT2JqZWN0MTRpc0R5bmFtaWNTY29wZUV2CkBAIC0zNDEsNiArMzQyLDcg
QEAgX19aTkszSlNDMTdEZWJ1Z2dlckNhbGxGcmFtZTIyY2FsY3VsYXRlZAogX19aTkszSlNDMTdE
ZWJ1Z2dlckNhbGxGcmFtZTR0eXBlRXYKIF9fWk5LM0pTQzE3RGVidWdnZXJDYWxsRnJhbWU4ZXZh
bHVhdGVFUktOU183VVN0cmluZ0VSTlNfN0pTVmFsdWVFCiBfX1pOSzNKU0M0SGVhcDEwc3RhdGlz
dGljc0V2CitfX1pOSzNKU0M2SlNDZWxsMTJpbnN0YW5jZVNpemVFdgogX19aTkszSlNDNkpTQ2Vs
bDEydG9UaGlzT2JqZWN0RVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDNkpTQ2VsbDEydG9UaGlz
U3RyaW5nRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDNkpTQ2VsbDE0aXNHZXR0ZXJTZXR0ZXJF
dgpAQCAtMzUyLDYgKzM1NCw3IEBAIF9fWk5LM0pTQzZKU0NlbGw5Z2V0U3RyaW5nRXYKIF9fWk5L
M0pTQzZKU0NlbGw5Z2V0VUludDMyRVJqCiBfX1pOSzNKU0M3QXJnTGlzdDhnZXRTbGljZUVpUlMw
XwogX19aTkszSlNDN0pTVmFsdWU5dG9JbnRlZ2VyRVBOU185RXhlY1N0YXRlRQorX19aTkszSlND
N1Byb2ZpbGUxMWxpdmVPYmplY3RzRXYKIF9fWk5LM0pTQzdVU3RyaW5nMTBVVEY4U3RyaW5nRWIK
IF9fWk5LM0pTQzdVU3RyaW5nMTR0b1N0cmljdFVJbnQzMkVQYgogX19aTkszSlNDN1VTdHJpbmc1
YXNjaWlFdgpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NTA3OSkKKysrIEphdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTM2OSw2ICszNjksMTAgQEAKIAkJQkNGRDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8q
IEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQ0ZEOEM5MDBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCAqLzsgfTsKIAkJ
QkNGRDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGRDhDOTEwRUVCMkVFNzAwMjgzODQ4IC8q
IEp1bXBUYWJsZS5oICovOyB9OwogCQlDMEEyNzI2MzBFNTBBMDYzMDBFOTZFMTUgLyogTm90Rm91
bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwQTI3
MjNGMEU1MDlGMUUwMEU5NkUxNSAvKiBOb3RGb3VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUNCMTFGRkY3MEY5NDgzOTkwMEU1ODM3OSAvKiBP
YmplY3RJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDQjExRkZGNjBGOTQ4MzcxMDBFNTgzNzkgLyogT2JqZWN0SWRlbnRpZmllci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUNCMkI4MTMz
MEZFRkVDMDYwMDJCRUQxNiAvKiBPYmplY3RJZGVudGlmaWVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENCMkI4MTMyMEZFRkVDMDYwMDJCRUQxNiAv
KiBPYmplY3RJZGVudGlmaWVyLmNwcCAqLzsgfTsKKwkJQ0JCMTE3MUIwRjY3MkU4OTAwNzQ0NDIy
IC8qIExpdmVPYmplY3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENCQjExNDkzMEY2NzExMDQwMDc0NDQyMiAvKiBMaXZlT2JqZWN0cy5jcHAgKi87
IH07CisJCUNCQjExNzFDMEY2NzJFODkwMDc0NDQyMiAvKiBMaXZlT2JqZWN0cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0JCMTEzRUIwRjY2RDRCODAw
NzQ0NDIyIC8qIExpdmVPYmplY3RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3Ry
aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI0
QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTI0QThGODBFNTU1Nzc1MDAzMDkx
RjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTEyNEE4RjYwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5n
LmNwcCAqLzsgfTsKIAkJRTE3ODYzNkQwRDlCRUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJl
YWRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTE3ODYzNkMwRDlCRUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwICovOyB9
OwpAQCAtODM3LDYgKzg0MSwxMCBAQAogCQlCQ0ZEOEM5MDBFRUIyRUU3MDAyODM4NDggLyogSnVt
cFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEp1bXBUYWJs
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRkQ4QzkxMEVFQjJFRTcwMDI4
Mzg0OCAvKiBKdW1wVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSnVt
cFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMwQTI3MjNGMEU1MDlGMUUw
MEU5NkUxNSAvKiBOb3RGb3VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
b3RGb3VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQjExRkZGNjBGOTQ4Mzcx
MDBFNTgzNzkgLyogT2JqZWN0SWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBPYmplY3RJZGVudGlmaWVyLmg7IHBhdGggPSBwcm9maWxlci9PYmplY3RJZGVudGlm
aWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNCMkI4MTMyMEZFRkVDMDYwMDJC
RUQxNiAvKiBPYmplY3RJZGVudGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IE9iamVjdElkZW50aWZpZXIuY3BwOyBwYXRoID0gcHJvZmlsZXIvT2JqZWN0SWRl
bnRpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNCQjExM0VCMEY2NkQ0
QjgwMDc0NDQyMiAvKiBMaXZlT2JqZWN0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBMaXZlT2JqZWN0cy5oOyBwYXRoID0gcHJvZmlsZXIvTGl2ZU9iamVjdHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0JCMTE0OTMwRjY3MTEwNDAwNzQ0NDIyIC8qIExpdmVP
YmplY3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExpdmVPYmpl
Y3RzLmNwcDsgcGF0aCA9IHByb2ZpbGVyL0xpdmVPYmplY3RzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjgwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRlQ29udmVyc2lv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI5MEFENDMxMEMwMEVE
NzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGF0ZUNvbnZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTExRDUx
NzUwQjJFNzk4RDAwNTZDMTg4IC8qIFN0cmluZ0V4dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdHJpbmdFeHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE1MjksNiArMTUzNyw4IEBACiAJCQkJOTVFM0JDMDQwRTFBRTY4MjAwQjJEMUMxIC8qIENh
bGxJZGVudGlmaWVyLmggKi8sCiAJCQkJOTU3NDJGNjMwREQxMUY1QTAwMDkxN0ZCIC8qIFByb2Zp
bGUuY3BwICovLAogCQkJCTk1NzQyRjY0MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxlLmggKi8s
CisJCQkJQ0JCMTE0OTMwRjY3MTEwNDAwNzQ0NDIyIC8qIExpdmVPYmplY3RzLmNwcCAqLywKKwkJ
CQlDQkIxMTNFQjBGNjZENEI4MDA3NDQ0MjIgLyogTGl2ZU9iamVjdHMuaCAqLywKIAkJCQk5NUNE
NDU3NDBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5jcHAgKi8sCiAJCQkJOTVD
RDQ1NzUwRTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuaCAqLywKIAkJCQk5NUFC
ODM1NDBEQTQzQjQ0MDBCQzgzRjMgLyogUHJvZmlsZU5vZGUuY3BwICovLApAQCAtMTUzNyw2ICsx
NTQ3LDggQEAKIAkJCQk5NUFCODMyRjBEQTQyQ0FEMDBCQzgzRjMgLyogUHJvZmlsZXIuaCAqLywK
IAkJCQkxQzYxNTE2QjBFQkFDN0EwMDAzMTM3NkYgLyogUHJvZmlsZXJTZXJ2ZXIuaCAqLywKIAkJ
CQkxQzYxNTE2QTBFQkFDN0EwMDAzMTM3NkYgLyogUHJvZmlsZXJTZXJ2ZXIubW0gKi8sCisJCQkJ
Q0IxMUZGRjYwRjk0ODM3MTAwRTU4Mzc5IC8qIE9iamVjdElkZW50aWZpZXIuaCAqLywKKwkJCQlD
QjJCODEzMjBGRUZFQzA2MDAyQkVEMTYgLyogT2JqZWN0SWRlbnRpZmllci5jcHAgKi8sCiAJCQkp
OwogCQkJbmFtZSA9IHByb2ZpbGVyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE2
MjAsNiArMTYzMiw3IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQlDQkIxMTcxQzBGNjcy
RTg5MDA3NDQ0MjIgLyogTGl2ZU9iamVjdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QzUyNDJC
MEY1MzU1RTkwMEJBM0QwNCAvKiBKSVRTdHVicy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMz
RTUwRTE2RjVDRDAwQjM0NDYwIC8qIEFQSUNhc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
M0U5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBU0NJSUNUeXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTE4
NTIsNiArMTg2NSw3IEBACiAJCQkJODZFQUM0OUIwRjkzRThEMTAwOEVDOTQ4IC8qIFJlZ2V4UGFy
c2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVBQzQ5QzBGOTNFOEQxMDA4RUM5NDggLyogUmVn
ZXhQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NkRENzM3OTBGOURBMzEwMDAyN0ZCQ0Mg
LyogVk1UYWdzLmggaW4gSGVhZGVycyAqLywKKwkJCQlDQjExRkZGNzBGOTQ4Mzk5MDBFNTgzNzkg
LyogT2JqZWN0SWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2RUU2NTkwRkFFNTlE
NTAwM0YwNjlBIC8qIE5hdGl2ZUZ1bmN0aW9uV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdFMkVBNkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzMDUyQzM1MEZCNzkyMTkwMDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yMjIxLDEwICsyMjM1LDEyIEBACiAJCQkJODZFQUM0OTcwRjkzRThEMTAwOEVD
OTQ4IC8qIFJlZ2V4SW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQUM0OTkw
RjkzRThEMTAwOEVDOTQ4IC8qIFJlZ2V4SklULmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2REI2
NDY0MEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQ0JCMTE3MUIwRjY3MkU4OTAwNzQ0NDIyIC8qIExpdmVPYmpl
Y3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0YwMDYwMUYwNiAvKiBM
aXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMDUyQzM0MEZCNzkyMTkwMDQ4
RkRDMyAvKiBQYXJzZXJBcmVuYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0RENTFFQjBGQjhE
Rjc0MDA0QThCREMgLyogSklUT3Bjb2Rlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Y5OTM2
MDBGRDczMjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlD
QjJCODEzMzBGRUZFQzA2MDAyQkVEMTYgLyogT2JqZWN0SWRlbnRpZmllci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL0xpdmVPYmplY3RzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9MaXZlT2JqZWN0cy5jcHAJKHJldmlz
aW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9MaXZlT2JqZWN0cy5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhvcmlh
IE9sYXJ1IDxvbGFydUBhZG9iZS5jb20+LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJMaXZlT2JqZWN0cy5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgor
I2luY2x1ZGUgIkNsYXNzSW5mby5oIgorI2luY2x1ZGUgIlByb2ZpbGVOb2RlLmgiCisjaW5jbHVk
ZSAiVVN0cmluZy5oIgorI2luY2x1ZGUgIk9iamVjdElkZW50aWZpZXIuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK1Bhc3NSZWZQdHI8TGl2ZU9iamVjdHM+IExpdmVPYmplY3RzOjpjcmVhdGUoKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGl2ZU9iamVjdHMoKSk7Cit9CisKK0xpdmVPYmpl
Y3RzOjpMaXZlT2JqZWN0cygpCisgICAgOiBtX3N0b3JlQ29sbGVjdGVkT2JqZWN0cyhmYWxzZSkK
K3sKK30KKworTGl2ZU9iamVjdHM6On5MaXZlT2JqZWN0cygpCit7Cit9CisKKy8vcmV0dXJucyB0
cnVlIGlmIG5ldyB2YWx1ZSB3YXMgYWRkZWQgKG5vdCBleGlzdGluZykKK2Jvb2wgTGl2ZU9iamVj
dHM6OmFkZE5vZGUoY29uc3QgSlNDZWxsKiBjZWxsLCBQYXNzUmVmUHRyPFByb2ZpbGVOb2RlPiBz
dGFja05vZGUpCit7CisgICAgQVNTRVJUKGNlbGwpOworICAgIHJldHVybiAobV9zdGFja01hcC5h
ZGQoY2VsbCwgc3RhY2tOb2RlKSkuc2Vjb25kOworfQorCit2b2lkIExpdmVPYmplY3RzOjpyZW1v
dmVOb2RlKGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBBU1NFUlQoY2VsbCk7CisgICAgaWYg
KCFtX3N0b3JlQ29sbGVjdGVkT2JqZWN0cykKKyAgICAgICAgbV9zdGFja01hcC5yZW1vdmUoY2Vs
bCk7CisgICAgZWxzZSB7CisgICAgICAgIFJlZlB0cjxQcm9maWxlTm9kZT4gbm9kZSA9IG1fc3Rh
Y2tNYXAudGFrZShjZWxsKTsKKyAgICAgICAgaWYgKG5vZGUgJiYgIWlzRnJlZShjZWxsKSkKKyAg
ICAgICAgICAgIG1fY2FjaGVkT2JqZWN0cy5hcHBlbmQoT2JqZWN0SWRlbnRpZmllcjo6Y3JlYXRl
KG1fY2FjaGVkT2JqZWN0cy5zaXplKCksIGNlbGwsIG5vZGUpKTsKKyAgICB9Cit9CisKK2Jvb2wg
TGl2ZU9iamVjdHM6OmlzRnJlZShjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgY29uc3QgQ29s
bGVjdG9yQ2VsbCogY29sbGVjdG9yQ2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29sbGVj
dG9yQ2VsbCo+KGNlbGwpOworICAgIHJldHVybiAhKGNvbGxlY3RvckNlbGwtPnUuZnJlZUNlbGwu
emVyb0lmRnJlZSk7Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlzIG1lYW50IHRvIGJlIGNhbGxlZCBm
cm9tIHRoZSBzdG9wUHJvZmlsaW5nIG1ldGhvZCBvZiBQcm9maWxlR2VuZXJhdG9yCisvLyBBZnRl
ciBwcm9maWxpbmcgc3RvcHMsIGxpdmUgb2JqZWN0cyBhcmUgbGlrZWx5IHRvIGJlIGNvbGxlY3Rl
ZCwgc28gd2Ugc3RvcmUgdGhlCisvLyBpbmZvcm1hdGlvbiB3ZSBoYXZlIG5vdy4KK3ZvaWQgTGl2
ZU9iamVjdHM6OmZsdXNoTGl2ZU9iamVjdHMoKQoreworICAgIHRvVmVjdG9yKG1fY2FjaGVkT2Jq
ZWN0cyk7CisKKyAgICAvLyBXZSBubyBsb25nZXIgbmVlZCB0aGUgc3RhY2sgbWFwIGFmdGVyIHRo
aXMKKyAgICBtX3N0YWNrTWFwLmNsZWFyKCk7Cit9CisKK3ZvaWQgTGl2ZU9iamVjdHM6OnRvVmVj
dG9yKExpdmVPYmplY3RzOjpPYmplY3RWZWN0b3ImIHZlY3RvcikgY29uc3QKK3sKKyAgICBmb3Ig
KGNvbnN0X2l0ZXJhdG9yIGl0ID0gYmVnaW4oKTsgaXQgIT0gZW5kKCk7ICsraXQpIHsKKyAgICAg
ICAgaWYgKCFpc0ZyZWUoaXQtPmZpcnN0KSkKKyAgICAgICAgICAgIHZlY3Rvci5hcHBlbmQoT2Jq
ZWN0SWRlbnRpZmllcjo6Y3JlYXRlKHZlY3Rvci5zaXplKCksIGl0LT5maXJzdCwgaXQtPnNlY29u
ZCkpOworICAgICAgICAvLyBUaGUgZWxzZSBicmFuY2ggaGVyZSBjb3VsZCBjbGVhbiB1cCB0aGUg
ZW1wdHkgY2VsbHMuIEhvd2V2ZXIsIHJlbW92aW5nCisgICAgICAgIC8vIGl0ZW1zIGZyb20gdGhl
IEhhc2hNYXAgd2hpbGUgaXRlcmF0aW5nIG92ZXIgaXQgaXMgbm90IHBvc3NpYmxlLgorICAgICAg
ICAvLyBDb2xsZWN0ZWQgY2VsbHMgYmVjb21lIGVtcHR5LCBidXQgcmVtb3ZlTm9kZSBpcyBjYWxs
ZWQgd2hlbiBhIGNlbGwgaXMKKyAgICAgICAgLy8gY29sbGVjdGVkLCBzbyB0aGUgZW1wdHkgY2Vs
bHMgaW5zaWRlIHRoZSBtYXAgYXJlIGNvcm5lciBjYXNzZXMuCisgICAgfQorfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL0xpdmVPYmplY3RzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvTGl2ZU9iamVjdHMuaAkocmV2
aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL0xpdmVPYmplY3RzLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhvcmlh
IE9sYXJ1IDxvbGFydUBhZG9iZS5jb20+LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTGl2
ZU9iamVjdHNfaAorI2RlZmluZSBMaXZlT2JqZWN0c19oCisKKy8vIFRoZSBMaXZlIG9iamVjdHMg
Y2xhc3MgcHJvdmlkZXMgYSB3YXkgdG8gc3RvcmUgdGhlIGxvY2F0aW9uIHdoZXJlCisvLyBKYXZh
U2NyaXB0IG9iamVjdHMgYXJlIGNyZWF0ZWQuIEl0IGRlZmluZXMgYSBjb3JyZXNwb25kZW5jZSBi
ZXR3ZWVuIGEKKy8vIEpTQ2VsbCwgd2hpY2ggaG9sZHMgYSBqYXZhc2NyaXB0IG9iamVjdCwgYW5k
IGEgUHJvZmlsZU5vZGUsIHdoaWNoCisvLyByZXByZXNlbnRzIGEgSmF2YVNjcmlwdCBmdW5jdGlv
bi4gU3RhcnRpbmcgZnJvbSB0aGUgUHJvZmlsZU5vZGUsIHRoZQorLy8gY2FsbCBzdGFjayBmb3Ig
dGhlIGNyZWF0aW9uIG9mIGFuIG9iamVjdCBjYW4gYmUgZXh0cmFjdGVkLgorLy8KKy8vIFRoZSBj
b3JyZXNwb25kZW5jZSBpcyBzdG9yZWQgaW50ZXJuYWxseSBhcyBhIGhhc2ggbWFwIG9mIGtleSBK
U0NlbGwqCisvLyBhbmQgdmFsdWUgUHJvZmlsZU5vZGUqLgorLy8KKy8vIGFkZE5vZGUgLSB0aGUg
ZnVuY3Rpb24gYWRkcyBzdWNoIGEgcGFpciB0byB0aGUgaGFzaCBtYXAuIFRoaXMgZnVuY3Rpb24g
aXMKKy8vIG1lYW50IHRvIGJlIGNhbGxlZCB3aGVuIGFuIG9iamVjdCBpcyBjcmVhdGVkLgorLy8K
Ky8vIHJlbW92ZU5vZGUgLSB0aGUgZnVuY3Rpb24gcmVtb3ZlcyBhIGNlbGwgZnJvbSB0aGUgbWFw
LiBJdCBpcyBtZWFudCB0byBiZQorLy8gY2FsbGVkIHdoZW4gYSBqYXZhc2NyaXB0IG9iamVjdCBp
cyBjb2xsZWN0ZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgorLy8KKy8vIHRvVmVjdG9yIC0g
YSBtZXRob2QgdG8gZXhwb3J0IHRoZSBkYXRhIGhlbGQgYnkgdGhlIExpdmVPYmplY3RzIGluc3Rh
bmNlCisvLyBhdCBhbiBvdXRzaWRlIHJlcXVlc3QuCisvLworLy8gbV9zdGFja01hcCAtIFRoaXMg
bWFwIGhvbGRzIHBhaXJzIG9mIEpTQ2VsbHMgYW5kIHRoZSBmdW5jdGlvbnMgaW4gd2hpY2gKKy8v
IHRoZXkgd2VyZSBjcmVhdGVkLCB3aGljaCBhcmUgcmVwcmVzZW50ZWQgYnkgcHJvZmlsZSBub2Rl
cy4gSXQgaXMgaW4KKy8vIGluIGZhY3QgYSBtYXAgYmV0d2VlbiBhIEpTIG9iamVjdCBhbmQgdGhl
IHN0YWNrIHRyYWNlIG9mIHRoZSBmdW5jdGlvbgorLy8gdGhhdCBjcmVhdGVkIGl0LgorCisjaW5j
bHVkZSAiUHJvZmlsZU5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisgICAgY2xhc3MgSlNDZWxsOwor
ICAgIGNsYXNzIE9iamVjdElkZW50aWZpZXI7CisKKyAgICBjbGFzcyBMaXZlT2JqZWN0cyA6IHB1
YmxpYyBSZWZDb3VudGVkPExpdmVPYmplY3RzPiB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBQcm9m
aWxlR2VuZXJhdG9yOworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TGl2
ZU9iamVjdHM+IGNyZWF0ZSgpOworICAgICAgICB2aXJ0dWFsIH5MaXZlT2JqZWN0cygpOworCisg
ICAgICAgIGJvb2wgYWRkTm9kZShjb25zdCBKU0NlbGwqIGNlbGwsIFBhc3NSZWZQdHI8UHJvZmls
ZU5vZGU+IHN0YWNrTm9kZSk7CisgICAgICAgIHZvaWQgcmVtb3ZlTm9kZShjb25zdCBKU0NlbGwq
IGNlbGwpOworCisgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tN
YXAuaXNFbXB0eSgpOyB9CisKKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPE9iamVjdElk
ZW50aWZpZXI+ID4gT2JqZWN0VmVjdG9yOworICAgICAgICB2b2lkIHRvVmVjdG9yKE9iamVjdFZl
Y3RvciYpIGNvbnN0OworICAgICAgICBjb25zdCBPYmplY3RWZWN0b3ImIGNhY2hlZE9iamVjdHMo
KSBjb25zdCB7IHJldHVybiBtX2NhY2hlZE9iamVjdHM7IH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIExpdmVPYmplY3RzKCk7CisgICAgCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBK
U0NlbGwqLCBSZWZQdHI8UHJvZmlsZU5vZGU+ID4gTWVtb3J5TWFwOworICAgICAgICB0eXBlZGVm
IE1lbW9yeU1hcDo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgTWVtb3J5TWFw
Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4o
KSB7IHJldHVybiBtX3N0YWNrTWFwLmJlZ2luKCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gbV9zdGFja01hcC5lbmQoKTsgfQorICAgICAgICBjb25zdF9pdGVyYXRvciBiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tNYXAuYmVnaW4oKTsgfQorICAgICAgICBjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrTWFwLmVuZCgpOyB9CisgICAgCisg
ICAgICAgIHN0YXRpYyBib29sIGlzRnJlZShjb25zdCBKU0NlbGwqIGNlbGwpOworICAgICAgICB2
b2lkIGZsdXNoTGl2ZU9iamVjdHMoKTsKKworICAgICAgICBNZW1vcnlNYXAgbV9zdGFja01hcDsK
KyAgICAgICAgT2JqZWN0VmVjdG9yIG1fY2FjaGVkT2JqZWN0czsKKyAgICAgICAgYm9vbCBtX3N0
b3JlQ29sbGVjdGVkT2JqZWN0czsKKyAgICB9OworICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBMaXZlT2JqZWN0c19oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9P
YmplY3RJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9PYmplY3RJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL09iamVjdElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhvcmlhIE9sYXJ1IDxvbGFydUBhZG9iZS5jb20+
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPYmpl
Y3RJZGVudGlmaWVyLmgiCisKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJQcm9maWxl
Tm9kZS5oIgorI2luY2x1ZGUgIkNsYXNzSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsKKworUGFz
c1JlZlB0cjxPYmplY3RJZGVudGlmaWVyPiBPYmplY3RJZGVudGlmaWVyOjpjcmVhdGUodW5zaWdu
ZWQgdWlkLCBjb25zdCBKU0NlbGwqIGNlbGwsIFBhc3NSZWZQdHI8UHJvZmlsZU5vZGU+IGFsbG9j
YXRpbmdGdW5jdGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdElkZW50aWZp
ZXIodWlkLCBjZWxsLCBhbGxvY2F0aW5nRnVuY3Rpb24pKTsKK30KKworT2JqZWN0SWRlbnRpZmll
cjo6T2JqZWN0SWRlbnRpZmllcih1bnNpZ25lZCB1aWQsIGNvbnN0IEpTQ2VsbCogY2VsbCwgUGFz
c1JlZlB0cjxQcm9maWxlTm9kZT4gYWxsb2NhdGluZ0Z1bmN0aW9uKQorICAgIDogbV91aWQodWlk
KQorICAgICwgbV9zaXplKGNlbGwtPmluc3RhbmNlU2l6ZSgpKQorICAgICwgbV9jcmVhdGluZ0Z1
bmN0aW9uKGFsbG9jYXRpbmdGdW5jdGlvbikKK3sKKyAgICBjb25zdCBDbGFzc0luZm8qIGluZm8g
PSBjZWxsLT5jbGFzc0luZm8oKTsKKyAgICBtX3R5cGUgPSBpbmZvID8gaW5mby0+Y2xhc3NOYW1l
IDogIk9iamVjdCI7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL09iamVjdElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9PYmplY3RJZGVudGlmaWVyLmgJKHJldmlzaW9uIDApCisrKyBKYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9PYmplY3RJZGVudGlmaWVyLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9yaWEgT2xhcnUgPG9sYXJ1
QGFkb2JlLmNvbT4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBPYmplY3RJZGVudGlmaWVy
X2gKKyNkZWZpbmUgT2JqZWN0SWRlbnRpZmllcl9oCisKKy8vIFRoZSBPYmplY3RJZGVudGlmaWVy
IHN0cnVjdHVyZSByZXByZXNlbnRzIGEgc2luZ2xlIEphdmFTY3JpcHQgb2JqZWN0CisvLyBmcm9t
IGEgbWVtb3J5IHByb2ZpbGluZyBwb2luZyBvZiB2aWV3LiBJdCBpcyBtZWFudCBhcyBhIHNpbXBs
ZSBpbnRlcmZhY2UKKy8vIHRvIHRyYW5zbWl0IGRhdGEgYWNyb3NzIGxheWVycy4KKy8vCisvLyBt
X2lkIC0gYSB1bmlxdWUgaWRlbnRpZmljYXRpb24gbnVtYmVyIGZvciB0aGUgb2JqZWN0LiBUaGlz
IHdpbGwgbW9zdCBsaWtlbHkKKy8vIGJlIGluaXRpYWxpemVkIHdpdGggdGhlIGFkZHJlc3Mgb2Yg
dGhlIGhvbGRpbmcgSlNDZWxsCisvLworLy8gbV90eXBlIC0gdGhlIEphdmFTY3JpcHQgdHlwZSBv
ZiB0aGUgb2JqZWN0LiBUaGlzIGlzIHRoZSB0eXBlIGFzIHJldHVybmVkIGJ5CisvLyB0aGUgQ2xh
c3NJbmZvIG9iamVjdCBvZiB0aGUgSlNDZWxsCisvLworLy8gbV9zaXplIC0gdGhlIGNvbXB1dGVk
IHNpemUgb2YgdGhlIG9iamVjdC4gVGhpcyB3aWxsIGJlIGFzc2lnbmVkIHRoZSB2YWx1ZQorLy8g
cmV0dXJuZWQgYnkgdGhlIGluc3RhbmNlU2l6ZSgpIG1ldGhvZCBvbiBKU0NlbGwKKy8vCisvLyBt
X2NyZWF0aW5nRnVuY3Rpb24gLSB0aGlzIG9iamVjdCBwb2ludHMgdG8gdGhlIFByb2ZpbGVOb2Rl
IHdoaWNoIGhvbGRzCisvLyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZnVuY3Rpb24gaW4gd2hpY2gg
dGhpcyBKUyBvYmplY3Qgd2FzIGNyZWF0ZWQuCisvLyBBIHN0YWNrIHRyYWNlIGNhbiBiZSBleHRy
YWN0ZWQgZnJvbSB0aGlzIG9iamVjdC4KKworI2luY2x1ZGUgPHJ1bnRpbWUvVVN0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisgICAgY2xhc3Mg
UHJvZmlsZU5vZGU7CisKKyAgICBjbGFzcyBPYmplY3RJZGVudGlmaWVyIDogcHVibGljIFJlZkNv
dW50ZWQ8T2JqZWN0SWRlbnRpZmllcj4geworICAgIHB1YmxpYzoKKyAgICAgICAgdW5zaWduZWQg
dWlkKCkgY29uc3QgeyByZXR1cm4gbV91aWQ7IH0KKyAgICAgICAgVVN0cmluZyB0eXBlKCkgY29u
c3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KKyAgICAgICAgUHJvZmlsZU5vZGUqIGNyZWF0aW5nRnVuY3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX2NyZWF0aW5nRnVuY3Rpb24uZ2V0KCk7IH0KKworICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxPYmplY3RJZGVudGlmaWVyPiBjcmVhdGUodW5zaWduZWQsIGNvbnN0IEpT
Q2VsbCosIFBhc3NSZWZQdHI8UHJvZmlsZU5vZGU+KTsKKworICAgIHByaXZhdGU6CisgICAgICAg
IHVuc2lnbmVkIG1fdWlkOworICAgICAgICBVU3RyaW5nIG1fdHlwZTsKKyAgICAgICAgdW5zaWdu
ZWQgbV9zaXplOworICAgICAgICBSZWZQdHI8UHJvZmlsZU5vZGU+IG1fY3JlYXRpbmdGdW5jdGlv
bjsKKworICAgICAgICBPYmplY3RJZGVudGlmaWVyKHVuc2lnbmVkLCBjb25zdCBKU0NlbGwqLCBQ
YXNzUmVmUHRyPFByb2ZpbGVOb2RlPik7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBPYmplY3RJZGVudGlmaWVyX2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGUuY3BwCShyZXZpc2lvbiA0NTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiUHJv
ZmlsZS5oIgogCiAjaW5jbHVkZSAiUHJvZmlsZU5vZGUuaCIKKyNpbmNsdWRlICJMaXZlT2JqZWN0
cy5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDMsNiArNDQs
NyBAQCBQcm9maWxlOjpQcm9maWxlKGNvbnN0IFVTdHJpbmcmIHRpdGxlLCB1CiAgICAgLy8gRklY
TUU6IFdoZW4gbXVsdGktdGhyZWFkaW5nIGlzIHN1cHBvcnRlZCB0aGlzIHdpbGwgYmUgYSB2ZWN0
b3IgYW5kIGNhbGxzCiAgICAgLy8gaW50byB0aGUgcHJvZmlsZXIgd2lsbCBuZWVkIHRvIGtub3cg
d2hpY2ggdGhyZWFkIGl0IGlzIGV4ZWN1dGluZyBvbi4KICAgICBtX2hlYWQgPSBQcm9maWxlTm9k
ZTo6Y3JlYXRlKENhbGxJZGVudGlmaWVyKCJUaHJlYWRfMSIsIDAsIDApLCAwLCAwKTsKKyAgICBt
X2xpdmVPYmplY3RzID0gTGl2ZU9iamVjdHM6OmNyZWF0ZSgpOwogfQogCiBQcm9maWxlOjp+UHJv
ZmlsZSgpCkBAIC0xMzMsNCArMTM1LDE5IEBAIHZvaWQgUHJvZmlsZTo6ZGVidWdQcmludERhdGFT
YW1wbGVTdHlsZSgKIH0KICNlbmRpZgogCitQYXNzUmVmUHRyPExpdmVPYmplY3RzPiBQcm9maWxl
OjpsaXZlT2JqZWN0cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGl2ZU9iamVjdHM7Cit9CisK
K3ZvaWQgUHJvZmlsZTo6b2JqZWN0Q3JlYXRlZChjb25zdCBKU0NlbGwqIGNyZWF0ZWRPYmplY3Qs
IFBhc3NSZWZQdHI8UHJvZmlsZU5vZGU+IG9yaWdpbmF0aW5nRnVuY3Rpb24gKQoreworICAgIG1f
bGl2ZU9iamVjdHMtPmFkZE5vZGUoY3JlYXRlZE9iamVjdCwgb3JpZ2luYXRpbmdGdW5jdGlvbik7
Cit9CisKK3ZvaWQgUHJvZmlsZTo6b2JqZWN0Q29sbGVjdGVkKGNvbnN0IEpTQ2VsbCogY29sbGVj
dGVkT2JqZWN0KQoreworICAgIG1fbGl2ZU9iamVjdHMtPnJlbW92ZU5vZGUoY29sbGVjdGVkT2Jq
ZWN0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wcm9m
aWxlci9Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZS5oCShyZXZpc2lvbiA0NTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAorICAgIGNsYXNzIExpdmVPYmplY3RzOworCiAgICAgY2xhc3MgUHJvZmlsZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPFByb2ZpbGU+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFByb2ZpbGU+IGNyZWF0ZShjb25zdCBVU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgdWlkKTsK
QEAgLTU1LDYgKzU3LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGRlYnVnUHJp
bnREYXRhU2FtcGxlU3R5bGUoKSBjb25zdDsKICNlbmRpZgogCisgICAgICAgIFBhc3NSZWZQdHI8
TGl2ZU9iamVjdHM+IGxpdmVPYmplY3RzKCkgY29uc3Q7CisKKyAgICAgICAgLy9Db2xsZWN0IG1l
bW9yeSBpbmZvCisgICAgICAgIHZvaWQgb2JqZWN0Q3JlYXRlZChjb25zdCBKU0NlbGwqIGNyZWF0
ZWRPYmplY3QsIFBhc3NSZWZQdHI8UHJvZmlsZU5vZGU+IG9yaWdpbmF0aW5nRnVuY3Rpb24pOwor
ICAgICAgICB2b2lkIG9iamVjdENvbGxlY3RlZChjb25zdCBKU0NlbGwqIGNvbGxlY3RlT2JqZWN0
KTsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgUHJvZmlsZShjb25zdCBVU3RyaW5nJiB0aXRs
ZSwgdW5zaWduZWQgdWlkKTsKIApAQCAtNjUsNiArNzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgVVN0cmluZyBtX3RpdGxlOwogICAgICAgICBSZWZQdHI8UHJvZmlsZU5vZGU+IG1faGVh
ZDsKICAgICAgICAgdW5zaWduZWQgaW50IG1fdWlkOworCisgICAgICAgIFJlZlB0cjxMaXZlT2Jq
ZWN0cz4gbV9saXZlT2JqZWN0czsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biA0NTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSlNTdHJpbmdSZWYu
aCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNp
bmNsdWRlICJMaXZlT2JqZWN0cy5oIgogI2luY2x1ZGUgIlByb2ZpbGUuaCIKICNpbmNsdWRlICJQ
cm9maWxlci5oIgogI2luY2x1ZGUgIlRyYWNpbmcuaCIKQEAgLTEwOSw2ICsxMTAsMTYgQEAgdm9p
ZCBQcm9maWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlKGNvbnN0IAogICAgIG1fY3VycmVudE5vZGUg
PSBtX2N1cnJlbnROb2RlLT5kaWRFeGVjdXRlKCk7CiB9CiAKK3ZvaWQgUHJvZmlsZUdlbmVyYXRv
cjo6b2JqZWN0Q3JlYXRlZChjb25zdCBKU0NlbGwqIGNyZWF0ZWRPYmplY3QpCit7CisgICAgbV9w
cm9maWxlLT5vYmplY3RDcmVhdGVkKGNyZWF0ZWRPYmplY3QsIG1fY3VycmVudE5vZGUpOworfQor
Cit2b2lkIFByb2ZpbGVHZW5lcmF0b3I6Om9iamVjdENvbGxlY3RlZChjb25zdCBKU0NlbGwqIGNv
bGxlY3RlT2JqZWN0KQoreworICAgIG1fcHJvZmlsZS0+b2JqZWN0Q29sbGVjdGVkKGNvbGxlY3Rl
T2JqZWN0KTsKK30KKwogdm9pZCBQcm9maWxlR2VuZXJhdG9yOjpzdG9wUHJvZmlsaW5nKCkKIHsK
ICAgICBtX3Byb2ZpbGUtPmZvckVhY2goJlByb2ZpbGVOb2RlOjpzdG9wUHJvZmlsaW5nKTsKQEAg
LTEzMiw2ICsxNDMsOSBAQCB2b2lkIFByb2ZpbGVHZW5lcmF0b3I6OnN0b3BQcm9maWxpbmcoKQog
ICAgICAgICBtX2hlYWQtPnNldFNlbGZUaW1lKDAuMCk7CiAgICAgICAgIG1faGVhZC0+YWRkQ2hp
bGQoaWRsZU5vZGUucmVsZWFzZSgpKTsKICAgICB9CisgICAgCisgICAgaWYgKCFtX3Byb2ZpbGUt
PmxpdmVPYmplY3RzKCktPmlzRW1wdHkoKSkKKyAgICAgICAgbV9wcm9maWxlLT5saXZlT2JqZWN0
cygpLT5mbHVzaExpdmVPYmplY3RzKCk7CiB9CiAKIC8vIFRoZSBjb25zb2xlLlByb2ZpbGVHZW5l
cmF0b3IgdGhhdCBzdGFydGVkIHRoaXMgUHJvZmlsZUdlbmVyYXRvciB3aWxsIGJlIHRoZSBmaXJz
dCBjaGlsZC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9y
LmgJKHJldmlzaW9uIDQ1MDc5KQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgQ2FsbElkZW50aWZpZXI7CiAgICAgY2xhc3MgRXhlY1N0YXRlOworICAg
IGNsYXNzIEpTQ2VsbDsKICAgICBjbGFzcyBQcm9maWxlOwogICAgIGNsYXNzIFByb2ZpbGVOb2Rl
OwogICAgIGNsYXNzIFVTdHJpbmc7CkBAIC01Myw2ICs1NCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCB3aWxsRXhlY3V0ZShjb25zdCBDYWxsSWRlbnRpZmllciYpOwogICAgICAg
ICB2b2lkIGRpZEV4ZWN1dGUoY29uc3QgQ2FsbElkZW50aWZpZXImKTsKIAorICAgICAgICAvL0Nv
bGxlY3QgbWVtb3J5IGluZm8KKyAgICAgICAgdm9pZCBvYmplY3RDcmVhdGVkKGNvbnN0IEpTQ2Vs
bCogY3JlYXRlZE9iamVjdCk7CisgICAgICAgIHZvaWQgb2JqZWN0Q29sbGVjdGVkKGNvbnN0IEpT
Q2VsbCogY29sbGVjdGVPYmplY3QpOworCiAgICAgICAgIC8vIFN0b3BwaW5nIFByb2ZpbGluZwog
ICAgICAgICB2b2lkIHN0b3BQcm9maWxpbmcoKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gNDUwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9Qcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDExICs1MCwyMCBAQCBzdGF0aWMg
Q2FsbElkZW50aWZpZXIgY3JlYXRlQ2FsbElkZW50aWZpCiBQcm9maWxlciogUHJvZmlsZXI6OnNf
c2hhcmVkUHJvZmlsZXIgPSAwOwogUHJvZmlsZXIqIFByb2ZpbGVyOjpzX3NoYXJlZEVuYWJsZWRQ
cm9maWxlclJlZmVyZW5jZSA9IDA7CiAKK1Byb2ZpbGVyOjpQcm9maWxlcigpCisgICAgOiBtX2lz
TWVtb3J5UHJvZmlsaW5nKGZhbHNlKQoreworfQorCiBQcm9maWxlciogUHJvZmlsZXI6OnByb2Zp
bGVyKCkKIHsKICAgICBpZiAoIXNfc2hhcmVkUHJvZmlsZXIpCiAgICAgICAgIHNfc2hhcmVkUHJv
ZmlsZXIgPSBuZXcgUHJvZmlsZXIoKTsKICAgICByZXR1cm4gc19zaGFyZWRQcm9maWxlcjsKK30K
KworUHJvZmlsZXI6On5Qcm9maWxlcigpCit7CiB9ICAgCiAKIHZvaWQgUHJvZmlsZXI6OnN0YXJ0
UHJvZmlsaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgdGl0bGUpCkBAIC03Miw2
ICs4MSw5IEBAIHZvaWQgUHJvZmlsZXI6OnN0YXJ0UHJvZmlsaW5nKEV4ZWNTdGF0ZSoKICAgICB9
CiAKICAgICBzX3NoYXJlZEVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSA9IHRoaXM7CisgICAgaWYg
KG1faXNNZW1vcnlQcm9maWxpbmcpCisgICAgICAgIEpTQ2VsbDo6c2V0RG9Db2xsZWN0QWxsb2Nh
dGlvblRyYWNlcyh0cnVlKTsKKyAgICAKICAgICBSZWZQdHI8UHJvZmlsZUdlbmVyYXRvcj4gcHJv
ZmlsZUdlbmVyYXRvciA9IFByb2ZpbGVHZW5lcmF0b3I6OmNyZWF0ZSh0aXRsZSwgZXhlYywgKytQ
cm9maWxlc1VJRCk7CiAgICAgbV9jdXJyZW50UHJvZmlsZXMuYXBwZW5kKHByb2ZpbGVHZW5lcmF0
b3IpOwogfQpAQCAtODYsOCArOTgsMTIgQEAgUGFzc1JlZlB0cjxQcm9maWxlPiBQcm9maWxlcjo6
c3RvcFByb2ZpbAogICAgICAgICAgICAgUmVmUHRyPFByb2ZpbGU+IHJldHVyblByb2ZpbGUgPSBw
cm9maWxlR2VuZXJhdG9yLT5wcm9maWxlKCk7CiAKICAgICAgICAgICAgIG1fY3VycmVudFByb2Zp
bGVzLnJlbW92ZShpKTsKLSAgICAgICAgICAgIGlmICghbV9jdXJyZW50UHJvZmlsZXMuc2l6ZSgp
KQorICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRQcm9maWxlcy5zaXplKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9pc01lbW9yeVByb2ZpbGluZykKKyAgICAgICAgICAgICAgICAgICAgSlND
ZWxsOjpzZXREb0NvbGxlY3RBbGxvY2F0aW9uVHJhY2VzKGZhbHNlKTsKKwogICAgICAgICAgICAg
ICAgIHNfc2hhcmVkRW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlID0gMDsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIHJldHVyblByb2ZpbGU7CiAgICAgICAg
IH0KQEAgLTEzNCw2ICsxNTAsMjggQEAgdm9pZCBQcm9maWxlcjo6ZGlkRXhlY3V0ZShFeGVjU3Rh
dGUqIGV4ZQogICAgIGRpc3BhdGNoRnVuY3Rpb25Ub1Byb2ZpbGVzKG1fY3VycmVudFByb2ZpbGVz
LCAmUHJvZmlsZUdlbmVyYXRvcjo6ZGlkRXhlY3V0ZSwgY3JlYXRlQ2FsbElkZW50aWZpZXIoJmV4
ZWMtPmdsb2JhbERhdGEoKSwgSlNWYWx1ZSgpLCBzb3VyY2VVUkwsIHN0YXJ0aW5nTGluZU51bWJl
ciksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJvZmlsZUdyb3VwKCkpOwogfQogCit2
b2lkIFByb2ZpbGVyOjpvYmplY3RDcmVhdGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjcmVh
dGVkT2JqZWN0KQoreworICAgIEFTU0VSVCghbV9jdXJyZW50UHJvZmlsZXMuaXNFbXB0eSgpKTsK
KworICAgIHVuc2lnbmVkIGN1cnJlbnRQcm9maWxlVGFyZ2V0R3JvdXAgPSBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPnByb2ZpbGVHcm91cCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9jdXJyZW50UHJvZmlsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY3VycmVu
dFByb2ZpbGVzW2ldLT5wcm9maWxlR3JvdXAoKSA9PSBjdXJyZW50UHJvZmlsZVRhcmdldEdyb3Vw
IHx8ICFtX2N1cnJlbnRQcm9maWxlc1tpXS0+b3JpZ2luYXRpbmdHbG9iYWxFeGVjKCkpCisgICAg
ICAgICAgICBtX2N1cnJlbnRQcm9maWxlc1tpXS5nZXQoKS0+b2JqZWN0Q3JlYXRlZChjcmVhdGVk
T2JqZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZmlsZXI6Om9iamVjdENvbGxlY3RlZChKU0Nl
bGwqIGNvbGxlY3RlZE9iamVjdCkKK3sKKyAgICBBU1NFUlQoIW1fY3VycmVudFByb2ZpbGVzLmlz
RW1wdHkoKSk7CisgICAgCisgICAgLy8gVGhlIEV4ZWNTdGF0ZSBpcyBub3QgYXZhaWxhYmxlIGF0
IGNvbGxlY3Rpb24gdGltZSwgc28gdGhlcmUgaXMgbm8gd2F5CisgICAgLy8gdG8gZGV0ZXJtaW5l
IHdoaWNoIHByb2ZpbGUgdGhpcyBpcyB0YXJnZXRlZCBhdC4gRGlzcGF0Y2ggdG8gYWxsIC0gaWYg
YSBwcm9maWxlCisgICAgLy8gY29udGFpbnMgdGhlIGRlc2lyZWQgY2VsbCwgaXQgd2lsbCBtYXJr
IGl0IGNvbGxlY3RlZCBhcHByb3ByaWF0ZWx5CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2N1cnJlbnRQcm9maWxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9jdXJyZW50UHJvZmlsZXNb
aV0uZ2V0KCktPm9iamVjdENvbGxlY3RlZChjb2xsZWN0ZWRPYmplY3QpOworfQorCiBDYWxsSWRl
bnRpZmllciBQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBKU1ZhbHVlIGZ1bmN0aW9uLCBjb25zdCBVU3RyaW5nJiBkZWZhdWx0U291cmNlVVJM
LCBpbnQgZGVmYXVsdExpbmVOdW1iZXIpCiB7CiAgICAgaWYgKCFmdW5jdGlvbikKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuaAkocmV2aXNpb24gNDUwNzkpCisrKyBKYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9Qcm9maWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICZzX3NoYXJlZEVuYWJsZWRQcm9m
aWxlclJlZmVyZW5jZTsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgflByb2ZpbGVyKCk7
CisKICAgICAgICAgc3RhdGljIFByb2ZpbGVyKiBwcm9maWxlcigpOyAKICAgICAgICAgc3RhdGlj
IENhbGxJZGVudGlmaWVyIGNyZWF0ZUNhbGxJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSosIEpTVmFs
dWUsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIpOwogCkBAIC02Miwx
MiArNjQsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZGlkRXhlY3V0ZShFeGVj
U3RhdGUqLCBKU1ZhbHVlIGZ1bmN0aW9uKTsKICAgICAgICAgdm9pZCBkaWRFeGVjdXRlKEV4ZWNT
dGF0ZSosIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcik7
CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIG9iamVjdENyZWF0ZWQoRXhlY1N0YXRlKiwgSlNDZWxs
KiBjcmVhdGVkT2JqZWN0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG9iamVjdENvbGxlY3RlZChK
U0NlbGwqIGNvbGxlY3RlT2JqZWN0KTsKKworICAgICAgICB2b2lkIHNldElzTWVtb3J5UHJvZmls
aW5nKGJvb2wgaXNFbmFibGVkKSB7IG1faXNNZW1vcnlQcm9maWxpbmcgPSBpc0VuYWJsZWQ7IH07
CiAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8UHJvZmlsZUdlbmVyYXRvcj4gPiYgY3VycmVu
dFByb2ZpbGVzKCkgeyByZXR1cm4gbV9jdXJyZW50UHJvZmlsZXM7IH07CiAKICAgICBwcml2YXRl
OgorICAgICAgICBQcm9maWxlcigpOworICAgIAogICAgICAgICBWZWN0b3I8UmVmUHRyPFByb2Zp
bGVHZW5lcmF0b3I+ID4gbV9jdXJyZW50UHJvZmlsZXM7CiAgICAgICAgIHN0YXRpYyBQcm9maWxl
ciogc19zaGFyZWRQcm9maWxlcjsKICAgICAgICAgc3RhdGljIFByb2ZpbGVyKiBzX3NoYXJlZEVu
YWJsZWRQcm9maWxlclJlZmVyZW5jZTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgbV9pc01lbW9y
eVByb2ZpbGluZzsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAJKHJldmlzaW9uIDQ1MDc5KQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAi
Tm9kZXMuaCIKKyNpbmNsdWRlICJQcm9maWxlci5oIgogI2luY2x1ZGUgIlRyYWNpbmcuaCIKICNp
bmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8c2V0am1wLmg+CkBAIC05NTgsNyArOTU5LDEw
IEBAIHRlbXBsYXRlIDxIZWFwVHlwZSBoZWFwVHlwZT4gc2l6ZV90IEhlYXAKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGFzc3VtZXMgdGhlIG9iamVjdCBoYXMgYSB2YWxpZCB2cHRyLikKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLT51LmZyZWVDZWxsLnplcm9JZkZyZWUgPT0g
MCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIAorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoSlNDZWxs
Ojpkb0NvbGxlY3RBbGxvY2F0aW9uVHJhY2VzKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICgqUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpKS0+b2JqZWN0Q29sbGVj
dGVkKGltcCk7CisKICAgICAgICAgICAgICAgICAgICAgICAgIGltcC0+fkpTQ2VsbCgpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtOTgxLDYgKzk4NSwx
MCBAQCB0ZW1wbGF0ZSA8SGVhcFR5cGUgaGVhcFR5cGU+IHNpemVfdCBIZWFwCiAgICAgICAgICAg
ICAgICAgICAgIGlmICghY3VyQmxvY2stPm1hcmtlZC5nZXQoaSA+PiBIZWFwQ29uc3RhbnRzPGhl
YXBUeXBlPjo6Yml0bWFwU2hpZnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVh
cFR5cGUgIT0gTnVtYmVySGVhcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ2Vs
bCogaW1wID0gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihjZWxsKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShKU0NlbGw6OmRvQ29sbGVjdEFsbG9jYXRpb25U
cmFjZXMoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqUHJvZmlsZXI6OmVu
YWJsZWRQcm9maWxlclJlZmVyZW5jZSgpKS0+b2JqZWN0Q29sbGVjdGVkKGltcCk7CisKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbXAtPn5KU0NlbGwoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIC0tdXNlZENlbGxzOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiA0NTA3OSkKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNDgsNiArMTA0OCwz
NSBAQCB2b2lkIEpTQXJyYXk6OmNoZWNrQ29uc2lzdGVuY3koQ29uc2lzdGVuCiAKICNlbmRpZgog
CitzaXplX3QgSlNBcnJheTo6aW5zdGFuY2VTaXplKCkgY29uc3QKK3sKKyAgICBzaXplX3QgY29t
cHV0ZWRTaXplID0gMDsKKworICAgIC8vIEpTIGNsYXNzIG92ZXJoZWFkCisgICAgY29tcHV0ZWRT
aXplICs9IHNpemVvZigqdGhpcyk7CisKKyAgICAvLyBBcnJheVN0b3JhZ2Ugb3ZlcmhlYWQgLSB0
aGlzIHRha2VzIGludG8gYWNjb3VudCB0aGUgc2l6ZSBvZiB0aGUKKyAgICAvLyBzdG9yYWdlIHZl
Y3RvcgorICAgIGNvbXB1dGVkU2l6ZSArPSBzdG9yYWdlU2l6ZShtX3N0b3JhZ2UtPm1fdmVjdG9y
TGVuZ3RoKTsKKworICAgIC8vICBzaXplIG9mIFNwYXJzZSB2YWx1ZSBtYXAKKyAgICAvLyAgRklY
TUU6IEEgZ2VuZXJpYyBjbGFzcy9tZXRob2QgY291bGQgcHJvYmFibHkgYmUgaW1wbGVtZW50ZWQK
KyAgICAvLyAgdG8gbWVhc3VyZSB0aGUgc2l6ZSBvZiBhbnkgSGFzaE1hcCBjb250YWluaW5nIEpT
T2JqZWN0cworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3RvcmFnZS0+bV9zcGFy
c2VWYWx1ZU1hcDsKKyAgICBpZiAobWFwKSB7CisgICAgICAgIGNvbXB1dGVkU2l6ZSArPSBzaXpl
b2YoKm1hcCkgKyBtYXAtPmNhcGFjaXR5KCkgKiBzaXplb2YoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
VmFsdWVUeXBlKTsKKyAgICB9CisKKyAgICAvLyAgRklYTUU6IE1lYXN1cmUgc2l6ZSBvZiB0aGUg
SlNPYmplY3QgcHJvcGVydHlNYXAKKyAgICAvLyAgSlNBcnJheSB3aWxsIHN0b3JlIG9iamVjdHMg
d2l0aCBub24tbnVtZXJpYyBpZGVudGlmaWVycywgYW5kIHNvbWUgb3RoZXIgdHlwZXMKKyAgICAv
LyAgKHNlZSB0aGUgY29tbWVudHMgYXQgdGhlIGJlZ2lubmluZyBvZiBKU0FycmF5LmNwcCkgaW4g
aXRzIHByb3BlcnR5IG1hcAorICAgIC8vICAoZWc6IGFyclsib2JqZWN0Il0pLCBzbyBpdCBpcyBp
bXBvcnRhbnQgdG8gbWVhc3VyZSB0aGlzLgorICAgIC8vICBUaGlzIHNob3VsZCBwcm9iYWJseSBi
ZSBkb25lIGluIEpTT2JqZWN0IGFuZCBhICdzdXBlcicgbWV0aG9kIHNob3VsZCBiZQorICAgIC8v
ICBjYWxsZWQuCisKKyAgICByZXR1cm4gY29tcHV0ZWRTaXplOworfQorCiBKU0FycmF5KiBjb25z
dHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICByZXR1cm4gbmV3IChleGVj
KSBKU0FycmF5KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKSk7
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gNDUwNzkpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUpKTsKICAgICAgICAgfQogCisgICAgICAg
IHZpcnR1YWwgc2l6ZV90IGluc3RhbmNlU2l6ZSgpIGNvbnN0OworCiAgICAgcHJvdGVjdGVkOgog
ICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gNDUwNzkp
CisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNTdHJp
bmcuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlByb2ZpbGVyLmgiCiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03NiwxMyArNzcs
MjAgQEAgZXh0ZXJuIGNvbnN0IGRvdWJsZSBJbmYgPSBOYU5JbmYuZG91YmxlcwogIAogI2VuZGlm
IC8vICEoZGVmaW5lZCBOQU4gJiYgZGVmaW5lZCBJTkZJTklUWSkKIAorYm9vbCBKU0NlbGw6OnNf
ZG9Db2xsZWN0QWxsb2NhdGlvblRyYWNlcyA9IGZhbHNlOworCiB2b2lkKiBKU0NlbGw6Om9wZXJh
dG9yIG5ldyhzaXplX3Qgc2l6ZSwgRXhlY1N0YXRlKiBleGVjKQogewogI2lmZGVmIEpBVkFTQ1JJ
UFRDT1JFX0JVSUxESU5HX0FMTF9JTl9PTkVfRklMRQotICAgIHJldHVybiBleGVjLT5oZWFwKCkt
PmlubGluZUFsbG9jYXRlKHNpemUpOworICAgIHZvaWQqIGNlbGwgPSBleGVjLT5oZWFwKCktPmlu
bGluZUFsbG9jYXRlKHNpemUpOwogI2Vsc2UKLSAgICByZXR1cm4gZXhlYy0+aGVhcCgpLT5hbGxv
Y2F0ZShzaXplKTsKKyAgICB2b2lkKiBjZWxsID0gZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXpl
KTsKICNlbmRpZgorCisgICAgaWYgKFVOTElLRUxZKEpTQ2VsbDo6c19kb0NvbGxlY3RBbGxvY2F0
aW9uVHJhY2VzKSkKKyAgICAgICAgKCpQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNl
KCkpLT5vYmplY3RDcmVhdGVkKGV4ZWMsIHN0YXRpY19jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKKwor
ICAgIHJldHVybiBjZWxsOwogfQogCiBib29sIEpTQ2VsbDo6Z2V0VUludDMyKHVpbnQzMl90Jikg
Y29uc3QKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gNDUwNzkpCisrKyBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5
OSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBKU1ZhbHVlIGdldEpTTnVt
YmVyKCk7CiAgICAgICAgIHZvaWQqIHZwdHIoKSB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KHRoaXMpOyB9CiAKKyAgICAgICAgdmlydHVhbCBzaXplX3QgaW5zdGFuY2VTaXplKCkg
Y29uc3QgeyByZXR1cm4gMDsgfTsKKyAgICAgICAgc3RhdGljIHZvaWQgc2V0RG9Db2xsZWN0QWxs
b2NhdGlvblRyYWNlcyhib29sIHNob3VsZENvbGxlY3QpIHsgc19kb0NvbGxlY3RBbGxvY2F0aW9u
VHJhY2VzID0gc2hvdWxkQ29sbGVjdDsgfQorICAgICAgICBzdGF0aWMgYm9vbCBkb0NvbGxlY3RB
bGxvY2F0aW9uVHJhY2VzKCkgeyByZXR1cm4gc19kb0NvbGxlY3RBbGxvY2F0aW9uVHJhY2VzOyB9
CisKICAgICBwcml2YXRlOgogICAgICAgICAvLyBCYXNlIGltcGxlbWVudGF0aW9uOyBmb3Igbm9u
LW9iamVjdCBjbGFzc2VzIGltcGxlbWVudHMgZ2V0UHJvcGVydHlTbG90LgogICAgICAgICBib29s
IGZhc3RHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAgLTEwNiw2ICsxMTAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICAKICAgICAg
ICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICAgICAgc3RhdGljIGJvb2wgc19kb0NvbGxl
Y3RBbGxvY2F0aW9uVHJhY2VzOwogICAgIH07CiAKICAgICBKU0NlbGwqIGFzQ2VsbChKU1ZhbHVl
KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiA0NTA3OSkK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTIsNiArMTEyLDE2IEBAIGJvb2wgSlNTdHJpbmc6OmdldE93blByb3BlcnR5U2xvdChFeGVj
U3QKICAgICByZXR1cm4gSlNTdHJpbmc6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOwogfQogCitzaXplX3QgSlNTdHJp
bmc6Omluc3RhbmNlU2l6ZSgpIGNvbnN0Cit7CisgICAgc2l6ZV90IGNvbXB1dGVkU2l6ZSA9IHNp
emVvZigqdGhpcyk7CisKKyAgICBjb21wdXRlZFNpemUgKz0gdmFsdWUoKS5zaXplKCkgKiBzaXpl
b2YoVUNoYXIpICsgdmFsdWUoKS5jb3N0KCk7CisvLyAgRklYTUU6IEFkZCBzdHJ1Y3R1cmUgc2l6
ZQorCisgICAgcmV0dXJuIGNvbXB1dGVkU2l6ZTsKK30KKwogSlNTdHJpbmcqIGpzU3RyaW5nKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcykKIHsKICAgICBpbnQgc2l6
ZSA9IHMuc2l6ZSgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24g
NDUwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTkyLDYgKzkyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSBwcm90bykgeyByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKFN0cmluZ1R5cGUsIE5lZWRzVGhp
c0NvbnZlcnNpb24pKTsgfQogCisgICAgICAgIHZpcnR1YWwgc2l6ZV90IGluc3RhbmNlU2l6ZSgp
IGNvbnN0OworCiAgICAgcHJpdmF0ZToKICAgICAgICAgZW51bSBWUHRyU3RlYWxpbmdIYWNrVHlw
ZSB7IFZQdHJTdGVhbGluZ0hhY2sgfTsKICAgICAgICAgSlNTdHJpbmcoVlB0clN0ZWFsaW5nSGFj
a1R5cGUpIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNwcAkocmV2
aXNpb24gNDUwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDEzIEBAIEpTVmFsdWUgTnVtYmVyT2JqZWN0Ojpn
ZXRKU051bWJlcigpCiAgICAgcmV0dXJuIGludGVybmFsVmFsdWUoKTsKIH0KIAorc2l6ZV90IE51
bWJlck9iamVjdDo6aW5zdGFuY2VTaXplKCkgY29uc3QKK3sKKy8vICBGSVhNRTogQXNpZGUgZnJv
bSB0aGlzLCB3ZSBzaG91bGQgcHJvYmFibHkgbWVhc3VyZSB0aGUgc2l6ZSBvZiB0aGUKKy8vICBz
dHJ1Y3R1cmUvcHJvcGVydHkgbWFwIG9mIGFuIG9iamVjdCAtIHNob3VsZCBwcm9iYWJseSBiZSBk
b25lIGhpZ2VyIHVwCisgICAgcmV0dXJuIHNpemVvZigqdGhpcyk7Cit9CisKIE51bWJlck9iamVj
dCogY29uc3RydWN0TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBudW1iZXIpCiB7CiAg
ICAgTnVtYmVyT2JqZWN0KiBvYmplY3QgPSBuZXcgKGV4ZWMpIE51bWJlck9iamVjdChleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAkocmV2aXNpb24gNDUwNzkpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gaW5mbzsKIAorICAgICAgICB2aXJ0dWFsIHNpemVfdCBpbnN0YW5jZVNpemUoKSBjb25zdDsK
KwogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0lu
Zm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiA0NTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNCArOTgsMTggQEAg
SlNTdHJpbmcqIFN0cmluZ09iamVjdDo6dG9UaGlzSlNTdHJpbmcoRQogICAgIHJldHVybiBpbnRl
cm5hbFZhbHVlKCk7CiB9CiAKK3NpemVfdCBTdHJpbmdPYmplY3Q6Omluc3RhbmNlU2l6ZSgpIGNv
bnN0Cit7CisgICAgc2l6ZV90IGNvbXB1dGVkU2l6ZSA9IHNpemVvZigqdGhpcyk7CisKKy8vICBB
ZGQgc2l6ZSBvZiB0aGUgY29udGFpbmVkIEpTU3RyaW5nIG9iamVjdAorICAgIENvbGxlY3RvckNl
bGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0PENvbGxlY3RvckNlbGwqPihhc0NlbGwoSlNXcmFw
cGVyT2JqZWN0OjppbnRlcm5hbFZhbHVlKCkpKTsKKyAgICBpZiAoY2VsbC0+dS5mcmVlQ2VsbC56
ZXJvSWZGcmVlKQorICAgICAgICBjb21wdXRlZFNpemUgKz0gaW50ZXJuYWxWYWx1ZSgpLT5pbnN0
YW5jZVNpemUoKTsKKworLy8gIEZJWE1FOiBBZGQgc3RydWN0dXJlIHNpemUgKGlmIHRoaXMgb2Jq
ZWN0IGhhcyBhIFN0cnVjdHVyZSBtZW1iZXIpCisKKyAgICByZXR1cm4gY29tcHV0ZWRTaXplOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdP
YmplY3QuaAkocmV2aXNpb24gNDUwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSkpOwogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCBzaXplX3QgaW5z
dGFuY2VTaXplKCkgY29uc3Q7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBTdHJpbmdPYmplY3Qo
UGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBKU1N0cmluZyopOwogCkluZGV4OiBXZWJDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNDUwODcpCisr
KyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDA5
LTA2LTI0ICBIb3JpYSBPbGFydSAgPG9sYXJ1QGFkb2JlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMTA5MzA6IFdlYktpdCBjb3VsZCBi
ZW5lZml0IGZyb20gYSBKYXZhU2NyaXB0IGxpdmUgb2JqZWN0IHByb2ZpbGVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDkzMAorCisgICAgICAgIEFk
ZGVkIHR3byBuZXcgaGVhZGVycyB0byBmb3J3YXJkIEphdmFTY3JpcHRDb3JlIGhlYWRlcnMuCisK
KyAgICAgICAgTW9kaWZpZWQgQ29kZUdlbmVyYXRvckpTLnBtIHRvIGNoZWNrIGZvciB0aGUgIkhh
c0luc3RhbmNlU2l6ZSIKKyAgICAgICAgYXR0cmlidXRlIGFuZCBpbnNlcnQgYW4gaW5zdGFuY2VT
aXplIG1ldGhvZCBpbiB0aGUgZ2VuZXJhdGVkIEpTT2JqZWN0cy4KKyAgICAgICAgVGhpcyBtZXRo
b2QgY2FsbHMgdGhlIGVsZW1lbnRTaXplIG1ldGhvZCBmcm9tIHRoZSBET00gb2JqZWN0CisgICAg
ICAgIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIEFkZGVkIGFuIGVsZW1lbnRTaXplIG1ldGhv
ZCB0byBIVE1MSW1hZ2VFbGVtZW50IGFuZCB1cGRhdGVkIHRoZSBpZGwKKyAgICAgICAgdG8gcmVm
bGVjdCB0aGlzIGZvciB0aGUgZ2VuZXJhdG9yIHNjcmlwdC4gVGhpcyBpcyBub3QgYSBjb21wbGV0
ZQorICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiBhIHNpemUgZnVuY3Rpb24sIGJ1dCBpcyBhZGRl
ZCB0byBwcm92ZSBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgIEFkZGVkIHRoZSBKYXZhU2NyaXB0
T2JqZWN0SWRlbnRpZmllciB0byB0aGUgaW5zcGVjdG9yLiBUaGlzIGlzIGEgY2xhc3MKKyAgICAg
ICAgY29udGFpbmluZyB0aGUgSlMgcmVwcmVzZW50YXRpb24gb2YgYSBwcm9maWxlciBsaXZlIG9i
amVjdC4gVGhlIG5ldworICAgICAgICBsaXZlT2JqZWN0cyBwcm9wZXJ0eSBhZGRlZCB0byB0aGUg
SmF2YVNjcmlwdFByb2ZpbGUgY2xhc3MgaXMgYW4gQXJyYXkKKyAgICAgICAgb2Ygc3VjaCBvYmpl
Y3RzLgorCisgICAgICAgIEFkZGVkIHRoZSBzZXRNZW1vcnlQcm9maWxpbmdFbmFibGVkKGJvb2xl
YW4pIGZ1bmN0aW9uIHRvIHRoZSBjb25zb2xlCisgICAgICAgIG9iamVjdC4KKworICAgICAgICBU
ZXN0czogZmFzdC9wcm9maWxlci1tZW1vcnkvY3JlYXRlLWN1c3RvbS10eXBlcy5odG1sCisgICAg
ICAgICAgICAgICBmYXN0L3Byb2ZpbGVyLW1lbW9yeS9jcmVhdGUtbmF0aXZlLXR5cGVzLmh0bWwK
KyAgICAgICAgICAgICAgIGZhc3QvcHJvZmlsZXItbWVtb3J5L2pzLXByb3BlcnRpZXMuaHRtbAor
ICAgICAgICAgICAgICAgZmFzdC9wcm9maWxlci1tZW1vcnkvbnVtYmVyLW9mLWFsbG9jYXRpb25z
Lmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvcHJvZmlsZXItbWVtb3J5L3NpbXBsZS1hbGxvY2F0
aW9uLXRyYWNlLmh0bWwKKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3Byb2ZpbGVyL0xp
dmVPYmplY3RzLmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3Byb2ZpbGVy
L09iamVjdElkZW50aWZpZXIuaDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtOgorICAgICAgICAqIGh0bWwvSFRNTEltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjplbGVtZW50U2l6ZSk6CisgICAgICAgICogaHRtbC9I
VE1MSW1hZ2VFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmlkbDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Om9iamVjdElkZW50aWZpZXJDYWNoZSk6CisgICAgICAgIChX
ZWJDb3JlOjpnZXRJZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRUeXBlTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpnZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OmdldENyZWF0ZWRGcm9tKToK
KyAgICAgICAgKFdlYkNvcmU6OmZpbmFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdElk
ZW50aWZpZXJDbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuaDogQWRkZWQuCisgICAgICAgICogaW5z
cGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldExpdmVP
YmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlByb2ZpbGVDbGFzcyk6CisgICAgICAgICogcGFn
ZS9Db25zb2xlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6OnNldE1lbW9yeVByb2Zp
bGluZ0VuYWJsZWQpOgorICAgICAgICAqIHBhZ2UvQ29uc29sZS5oOgorICAgICAgICAqIHBhZ2Uv
Q29uc29sZS5pZGw6CisKIDIwMDktMDYtMjQgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRleDogV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9wcm9maWxlci9MaXZlT2JqZWN0cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcHJvZmlsZXIvTGl2ZU9iamVjdHMuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcHJvZmlsZXIvTGl2ZU9iamVjdHMuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0xpdmVPYmpl
Y3RzX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfTGl2ZU9iamVjdHNfaAorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0xpdmVPYmplY3RzLmg+CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvcHJvZmlsZXIvT2JqZWN0SWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvRm9yd2FyZGluZ0hlYWRlcnMvcHJvZmlsZXIvT2JqZWN0SWRlbnRpZmllci5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9wcm9maWxlci9PYmplY3RJZGVudGlm
aWVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9P
YmplY3RJZGVudGlmaWVyX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfT2JqZWN0SWRlbnRpZmllcl9o
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0SWRlbnRpZmllci5oPgorI2VuZGlmCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
NDUwNzkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNDI5Myw2ICs0MjkzLDggQEAKIAkJQzUxMDJEOTUwRkQ5QUEyRDAwRkFG
RjA0IC8qIFN0b3JhZ2VTeW5jTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNTEwMkQ5MzBGRDlBQTJEMDBGQUZGMDQgLyogU3RvcmFnZVN5
bmNNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJQzZENzRBRDUwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlm
eVNlbGVjdGlvbkxpc3RMZXZlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxp
c3RMZXZlbC5oICovOyB9OwogCQlDNkQ3NEFFNDA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2Vs
ZWN0aW9uTGlzdExldmVsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0
TGV2ZWwuY3BwICovOyB9OworCQlDQjExMDA0RTBGOTQ4QTc3MDBFNTgzNzkgLyogSmF2YVNjcmlw
dE9iamVjdElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENCMTEwMDREMEY5NDhBNzcwMEU1ODM3OSAvKiBKYXZhU2NyaXB0T2JqZWN0SWRl
bnRpZmllci5oICovOyB9OworCQlDQjExMDA1MjBGOTQ4QUY2MDBFNTgzNzkgLyogSmF2YVNjcmlw
dE9iamVjdElkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0IxMTAwNTEwRjk0OEFGNjAwRTU4Mzc5IC8qIEphdmFTY3JpcHRPYmplY3RJ
ZGVudGlmaWVyLmNwcCAqLzsgfTsKIAkJRDA1Q0VEMjkwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1h
dEJsb2NrQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBEMDVDRUQyNzBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNw
cCAqLzsgfTsKIAkJRDA1Q0VEMkEwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA1Q0VE
MjgwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5oICovOyB9OwogCQlEMDZD
MEQ4RjBDRkQxMTQ2MDA2NUY0M0YgLyogUmVtb3ZlRm9ybWF0Q29tbWFuZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA2QzBEOEQwQ0ZEMTE0NjAwNjVG
NDNGIC8qIFJlbW92ZUZvcm1hdENvbW1hbmQuaCAqLzsgfTsKQEAgLTkxMTgsNiArOTEyMCw4IEBA
CiAJCUM1MTAyRDkzMEZEOUFBMkQwMEZBRkYwNCAvKiBTdG9yYWdlU3luY01hbmFnZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZVN5bmNNYW5hZ2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZENzRBRDMwOUFBMjgyRTAwMEIwQTUy
IC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzZENzRBRTMwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2RpZnlTZWxl
Y3Rpb25MaXN0TGV2ZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDQjExMDA0
RDBGOTQ4QTc3MDBFNTgzNzkgLyogSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0IxMTAwNTEwRjk0OEFGNjAwRTU4Mzc5IC8q
IEphdmFTY3JpcHRPYmplY3RJZGVudGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEphdmFTY3JpcHRPYmplY3RJZGVudGlmaWVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2Nr
Q29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybWF0
QmxvY2tDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA1Q0VEMjgw
QTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRm9ybWF0QmxvY2tDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUQwNkMwRDhEMENGRDExNDYwMDY1RjQzRiAvKiBSZW1vdmVGb3JtYXRDb21t
YW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW92ZUZvcm1hdENvbW1h
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3NDgsNiArOTc1Miw4IEBACiAJ
CQkJN0FCNkY4ODUwRkI5RDI3MTAwODA1RDAyIC8qIEluc3BlY3RvckpTT05PYmplY3QuY3BwICov
LAogCQkJCTdBQjZGODg2MEZCOUQyNzEwMDgwNUQwMiAvKiBJbnNwZWN0b3JKU09OT2JqZWN0Lmgg
Ki8sCiAJCQkJQkNDNjRGNUYwRENGQjg0RTAwODFFRjNCIC8qIGxvY2FsaXplZFN0cmluZ3MuanMg
Ki8sCisJCQkJQ0IxMTAwNTEwRjk0OEFGNjAwRTU4Mzc5IC8qIEphdmFTY3JpcHRPYmplY3RJZGVu
dGlmaWVyLmNwcCAqLywKKwkJCQlDQjExMDA0RDBGOTQ4QTc3MDBFNTgzNzkgLyogSmF2YVNjcmlw
dE9iamVjdElkZW50aWZpZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gaW5zcGVjdG9yOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTExNzM3LDkgKzExNzQzLDkgQEAKIAkJCQk4NTU1
NDI5NzBBQTQ5Mzg4MDBCQTg5RjIgLyogSFRNTElGcmFtZUVsZW1lbnQuaWRsICovLAogCQkJCUE4
RUE3RDI5MEExOTM4NTUwMEE4RUY1RiAvKiBIVE1MSW1hZ2VFbGVtZW50LmNwcCAqLywKIAkJCQlB
OEVBN0QyNTBBMTkzODU1MDBBOEVGNUYgLyogSFRNTEltYWdlRWxlbWVudC5oICovLAotCQkJCTFB
RTJBQTc5MEExQ0RDNjEwMEI0MkIyNSAvKiBIVE1MSW1hZ2VFbGVtZW50LmlkbCAqLywKIAkJCQlB
OEVBN0QyODBBMTkzODU1MDBBOEVGNUYgLyogSFRNTEltYWdlTG9hZGVyLmNwcCAqLywKIAkJCQlB
OEVBN0QyMzBBMTkzODU1MDBBOEVGNUYgLyogSFRNTEltYWdlTG9hZGVyLmggKi8sCisJCQkJMUFF
MkFBNzkwQTFDREM2MTAwQjQyQjI1IC8qIEhUTUxJbWFnZUVsZW1lbnQuaWRsICovLAogCQkJCUE4
MTM2OUIxMDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MSW5wdXRFbGVtZW50LmNwcCAqLywKIAkJCQlB
ODEzNjlCMDA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTElucHV0RWxlbWVudC5oICovLAogCQkJCUE4
MEU3RTE3MEExQTdDQ0IwMDdGQjhDNSAvKiBIVE1MSW5wdXRFbGVtZW50LmlkbCAqLywKQEAgLTE2
ODU3LDYgKzE2ODYzLDcgQEAKIAkJCQkyOUE4MTI0OTBGQkI5Q0E5MDA1MTAyOTMgLyogQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0QTgxRjNFMEZDN0RG
RjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODRBODFGNDIw
RkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBoaWMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNC
MTEwMDRFMEY5NDhBNzcwMEU1ODM3OSAvKiBKYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgyMzQxQzYwRkNGM0E5NTAwRDc1QkQ2IC8qIFdNTFNl
bGVjdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0NUU3MkY4MEZEMjYxRUUwMEE4N0Q3
OSAvKiBGaWx0ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTg4NjgsNiArMTg4NzUsNyBAQAogCQkJ
CTI5QTgxMjRCMEZCQjlDQTkwMDUxMDI5MyAvKiBBWE9iamVjdENhY2hlTWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODRBODFGM0QwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg0QTgxRjQxMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFw
aGljLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNCMTEwMDUyMEY5NDhBRjYwMEU1ODM3OSAvKiBK
YXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwOEM5MjUx
OTBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTA4MjM0MUM1MEZDRjNBOTUwMEQ3NUJENiAvKiBXTUxTZWxlY3RFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg0NUU3MkZCMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0JKHJldmlzaW9uIDQ1MDc5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtNTc2LDYgKzU3NiwxMCBAQCBzdWIg
R2VuZXJhdGVIZWFkZXIKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmICgkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNJbnN0YW5jZVNpemUifSkgeworICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHZpcnR1YWwgc2l6ZV90IGluc3RhbmNlU2l6ZSgpIGNvbnN0O1xu
Iik7CisgICAgfQorCiAgICAgaWYgKCEkaGFzUGFyZW50KSB7CiAgICAgICAgIGlmICgkcG9kVHlw
ZSkgewogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBKU1NWR1BPRFR5cGVX
cmFwcGVyPCRwb2RUeXBlPiogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfVxu
Iik7CkBAIC0xMzUxLDYgKzEzNTUsMTMgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgIH0KIAorICAgIGlmICgkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNJbnN0YW5jZVNpemUifSkgeworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgInNpemVfdCAke2NsYXNzTmFtZX06Omluc3RhbmNlU2l6ZSgp
IGNvbnN0XG57XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGltcGxDbGFz
c05hbWUqIGltcCA9IHN0YXRpY19jYXN0PCR7aW1wbENsYXNzTmFtZX0qPihpbXBsKCkpO1xuIik7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBpbXAtPmVsZW1lbnRTaXpl
KCk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgIH0KKwog
ICAgICMgRnVuY3Rpb25zCiAgICAgaWYgKCRudW1GdW5jdGlvbnMgPiAwKSB7CiAgICAgICAgIGZv
cmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgewpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gNDUwNzkpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTEltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDE3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAorc2l6ZV90
IEhUTUxJbWFnZUVsZW1lbnQ6OmVsZW1lbnRTaXplKCkgY29uc3QKK3sKKyAgICBzaXplX3QgY29t
cHV0ZWRTaXplID0gc2l6ZW9mKCp0aGlzKTsKKworICAgIC8vc2hvdWxkIHdlIGNvbXB1dGUgYW5k
IGFkZCB0aGUgcmVuZGVyIGFyZWEgc2l6ZT8KKyAgICBpZihjYWNoZWRJbWFnZSgpICYmIGNhY2hl
ZEltYWdlKCktPmltYWdlKCktPmRhdGEoKSkKKyAgICAgICAgY29tcHV0ZWRTaXplICs9IGNhY2hl
ZEltYWdlKCktPmltYWdlKCktPmRhdGEoKS0+c2l6ZSgpOworCisgICAgcmV0dXJuIGNvbXB1dGVk
U2l6ZTsKK30KKwogSFRNTEltYWdlRWxlbWVudDo6SFRNTEltYWdlRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0p
CiAgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX2ltYWdlTG9hZGVyKHRo
aXMpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDQ1MDc5KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzEx
NSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0
ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIAorICAgIHNpemVfdCBlbGVtZW50U2l6
ZSgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIEhUTUxJbWFnZUxvYWRlciBtX2ltYWdlTG9hZGVy
OwogICAgIFN0cmluZyB1c2VtYXA7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVu
dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaWRsCShy
ZXZpc2lvbiA0NTA3OSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQCBtb2R1bGUgaHRtbCB7CiAKICAgICBpbnRlcmZh
Y2UgWwogICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yLAorICAgICAgICBIYXNJbnN0YW5jZVNp
emUsCiAgICAgICAgIEludGVyZmFjZVVVSUQ9YjIxYjgxMjUtZDAwYi00YmRmLWIwZTgtNjU5Njc4
ZGIzOTIzLAogICAgICAgICBJbXBsZW1lbnRhdGlvblVVSUQ9MjEyMWNhMjEtODExOC00ZjFiLWI5
ZmUtNDc4OGE5MDUwMjgxCiAgICAgXSBIVE1MSW1hZ2VFbGVtZW50IDogSFRNTEVsZW1lbnQgewpJ
bmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRPYmplY3RJZGVudGlmaWVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRPYmplY3RJ
ZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgSG9yaWEgT2xhcnUgPG9sYXJ1QGFkb2JlLmNvbT4uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkphdmFTY3JpcHRPYmplY3RJ
ZGVudGlmaWVyLmgiCisKKyNpbmNsdWRlICJwcm9maWxlci9Qcm9maWxlTm9kZS5oIgorI2luY2x1
ZGUgInByb2ZpbGVyL09iamVjdElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0Q29y
ZS9BUElDYXN0LmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaCIKKyNp
bmNsdWRlICJKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oIgorI2luY2x1ZGUgIkphdmFTY3Jp
cHRDb3JlL0pTUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdENvcmUvSlNJbW1lZGlh
dGUuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0UHJvZmlsZU5vZGUuaCIKKyNpbmNsdWRlIDxydW50
aW1lL0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+CisKKwordXNpbmcg
bmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDYWNoZQorCit0eXBl
ZGVmIEhhc2hNYXA8T2JqZWN0SWRlbnRpZmllciosIEpTT2JqZWN0Kj4gT2JqZWN0SWRlbnRpZmll
ck1hcDsKKworc3RhdGljIE9iamVjdElkZW50aWZpZXJNYXAmIG9iamVjdElkZW50aWZpZXJDYWNo
ZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChPYmplY3RJZGVudGlmaWVyTWFwLCBzdGF0
aWNPYmplY3RJZGVudGlmaWVycywgKCkpOworICAgIHJldHVybiBzdGF0aWNPYmplY3RJZGVudGlm
aWVyczsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZ2V0SWQoSlNDb250ZXh0UmVmIGN0eCwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqKQoreworICAgIGlm
ICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjdHgsIHRoaXNPYmplY3QsIE9iamVjdElkZW50aWZp
ZXJDbGFzcygpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisK
KyAgICBPYmplY3RJZGVudGlmaWVyKiBvYmogPSBzdGF0aWNfY2FzdDxPYmplY3RJZGVudGlmaWVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1h
a2VOdW1iZXIoY3R4LCBvYmotPnVpZCgpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZ2V0VHlw
ZU5hbWUoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdS
ZWYsIEpTVmFsdWVSZWYqKQoreworICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjdHgs
IHRoaXNPYmplY3QsIE9iamVjdElkZW50aWZpZXJDbGFzcygpKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisKKyAgICBPYmplY3RJZGVudGlmaWVyKiBvYmogPSBz
dGF0aWNfY2FzdDxPYmplY3RJZGVudGlmaWVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdHlwZU5hbWVTdHJpbmcoQWRvcHQs
IEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMob2JqLT50eXBlKCkuZGF0YSgpLCBvYmotPnR5
cGUoKS5zaXplKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY3R4LCB0eXBlTmFt
ZVN0cmluZy5nZXQoKSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGdldFNpemUoSlNDb250ZXh0
UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYq
KQoreworICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjdHgsIHRoaXNPYmplY3QsIE9i
amVjdElkZW50aWZpZXJDbGFzcygpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGN0eCk7CisKKyAgICBPYmplY3RJZGVudGlmaWVyKiBvYmogPSBzdGF0aWNfY2FzdDxPYmpl
Y3RJZGVudGlmaWVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY3R4LCBvYmotPnNpemUoKSk7Cit9CisKK3N0YXRpYyBKU1Zh
bHVlUmVmIGdldENyZWF0ZWRGcm9tKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKikKK3sKKyAgICBpZiAoIUpTVmFsdWVJc09i
amVjdE9mQ2xhc3MoY3R4LCB0aGlzT2JqZWN0LCBPYmplY3RJZGVudGlmaWVyQ2xhc3MoKSkpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworCisgICAgT2JqZWN0SWRl
bnRpZmllciogb2JqID0gc3RhdGljX2Nhc3Q8T2JqZWN0SWRlbnRpZmllcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhjdHgpOwor
ICAgIHJldHVybiB0b1JlZihleGVjLCB0b0pTKGV4ZWMsIG9iai0+Y3JlYXRpbmdGdW5jdGlvbigp
KSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAg
ICBPYmplY3RJZGVudGlmaWVyKiBvYmplY3RJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8T2JqZWN0
SWRlbnRpZmllcio+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKKyAgICBvYmplY3RJZGVu
dGlmaWVyQ2FjaGUoKS5yZW1vdmUob2JqZWN0SWRlbnRpZmllcik7CisgICAgb2JqZWN0SWRlbnRp
Zmllci0+ZGVyZWYoKTsKK30KKworSlNDbGFzc1JlZiBPYmplY3RJZGVudGlmaWVyQ2xhc3MoKQor
eworICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0geworICAgICAgICB7
ICJpZCIsIGdldElkLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKKyAgICAgICAgeyAi
dHlwZU5hbWUiLCBnZXRUeXBlTmFtZSwgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCisg
ICAgICAgIHsgInNpemUiLCBnZXRTaXplLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwK
KyAgICAgICAgeyAiY3JlYXRlZEZyb20iLCBnZXRDcmVhdGVkRnJvbSwgMCwga0pTUHJvcGVydHlB
dHRyaWJ1dGVOb25lIH0sCisgICAgICAgIHsgMCwgMCwgMCwgMCB9CisgICAgfTsKKworICAgIHN0
YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSB7CisgICAgICAgIDAsIGtK
U0NsYXNzQXR0cmlidXRlTm9uZSwgIk9iamVjdElkZW50aWZpZXIiLCAwLCBzdGF0aWNWYWx1ZXMs
IDAsCisgICAgICAgIDAsIGZpbmFsaXplLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCisgICAg
fTsKKworICAgIHN0YXRpYyBKU0NsYXNzUmVmIG9iamVjdEluZm9DbGFzcyA9IEpTQ2xhc3NDcmVh
dGUoJmNsYXNzRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIG9iamVjdEluZm9DbGFzczsKK30KKwor
SlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgT2JqZWN0SWRlbnRpZmllciogb2JqZWN0SW5m
bykKK3sKKyAgICBpZiAoIW9iamVjdEluZm8pCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAg
ICAgICAgCisgICAgSlNPYmplY3QqIG9iamVjdEluZm9XcmFwcGVyID0gb2JqZWN0SWRlbnRpZmll
ckNhY2hlKCkuZ2V0KG9iamVjdEluZm8pOworICAgIGlmIChvYmplY3RJbmZvV3JhcHBlcikKKyAg
ICAgICAgcmV0dXJuIG9iamVjdEluZm9XcmFwcGVyOworCisgICAgb2JqZWN0SW5mby0+cmVmKCk7
CisKKyAgICAvL0ZJWE1FOiBtYXkgbmVlZCB0byBjYWNoZSB0aGUgdHJhbnNmb3JtZWQgSlMgb2Jq
ZWN0cy4KKyAgICBvYmplY3RJbmZvV3JhcHBlciA9IHRvSlMoSlNPYmplY3RNYWtlKHRvUmVmKGV4
ZWMpLCBPYmplY3RJZGVudGlmaWVyQ2xhc3MoKSwgc3RhdGljX2Nhc3Q8dm9pZCo+KG9iamVjdElu
Zm8pKSk7CisgICAgb2JqZWN0SWRlbnRpZmllckNhY2hlKCkuc2V0KG9iamVjdEluZm8sIG9iamVj
dEluZm9XcmFwcGVyKTsKKyAgICByZXR1cm4gb2JqZWN0SW5mb1dyYXBwZXI7Cit9CisKK30KSW5k
ZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRPYmplY3RJZGVudGlmaWVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRPYmplY3RJZGVudGlm
aWVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgSG9yaWEgT2xhcnUgPG9sYXJ1QGFkb2JlLmNvbT4uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBKYXZhU2NyaXB0T2JqZWN0SW5mb3JtYXRpb25faAorI2RlZmluZSBKYXZhU2NyaXB0
T2JqZWN0SW5mb3JtYXRpb25faAorCisjaW5jbHVkZSA8cnVudGltZS9KU1ZhbHVlLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+CisKK25hbWVzcGFjZSBKU0MgeworICAgIGNs
YXNzIEV4ZWNTdGF0ZTsKKyAgICBzdHJ1Y3QgT2JqZWN0SWRlbnRpZmllcjsKK30KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisgICAgSlNDbGFzc1JlZiBPYmplY3RJZGVudGlmaWVyQ2xhc3MoKTsK
KyAgICBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6T2JqZWN0SWRlbnRp
ZmllciopOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogV2ViQ29y
ZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmNwcAkocmV2aXNpb24gNDUwNzkpCisrKyBXZWJD
b3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDkgKzI5LDE0IEBACiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAKICNpbmNsdWRl
ICJKYXZhU2NyaXB0UHJvZmlsZU5vZGUuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0T2JqZWN0SWRl
bnRpZmllci5oIgogI2luY2x1ZGUgPHByb2ZpbGVyL1Byb2ZpbGUuaD4KKyNpbmNsdWRlIDxwcm9m
aWxlci9MaXZlT2JqZWN0cy5oPgorI2luY2x1ZGUgPHByb2ZpbGVyL09iamVjdElkZW50aWZpZXIu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNPYmpl
Y3RSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvT3BhcXVlSlNTdHJpbmcuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+CkBAIC0x
MzEsNiArMTM2LDUzIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHJlc3RvcmVBbGwoSlNDb250ZXh0UmUK
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKIH0KIAorc3RhdGljIEpTVmFs
dWVSZWYgZ2V0TGl2ZU9iamVjdHMoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBQcm9maWxl
KiBwcm9maWxlID0gc3RhdGljX2Nhc3Q8UHJvZmlsZSo+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CisgICAgaWYgKCFwcm9maWxlKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY3R4KTsKKworICAgIExpdmVPYmplY3RzOjpPYmplY3RWZWN0b3Igb2JqZWN0cyA9
IHByb2ZpbGUtPmxpdmVPYmplY3RzKCktPmNhY2hlZE9iamVjdHMoKTsKKworICAgIEpTT2JqZWN0
UmVmIGdsb2JhbCA9IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjdHgpOworCisKKyAgICBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gYXJyYXlTdHJpbmcoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJBcnJheSIpKTsKKworICAgIEpTVmFsdWVSZWYgYXJyYXlQcm9wZXJ0eSA9
IEpTT2JqZWN0R2V0UHJvcGVydHkoY3R4LCBnbG9iYWwsIGFycmF5U3RyaW5nLmdldCgpLCBleGNl
cHRpb24pOworICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisKKyAgICBKU09iamVjdFJlZiBhcnJheUNvbnN0
cnVjdG9yID0gSlNWYWx1ZVRvT2JqZWN0KGN0eCwgYXJyYXlQcm9wZXJ0eSwgZXhjZXB0aW9uKTsK
KyAgICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRpb24pCisgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjdHgpOworCisgICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gSlNPYmplY3RD
YWxsQXNDb25zdHJ1Y3RvcihjdHgsIGFycmF5Q29uc3RydWN0b3IsIDAsIDAsIGV4Y2VwdGlvbik7
CisgICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBwdXNo
U3RyaW5nKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygicHVzaCIpKTsKKwor
ICAgIEpTVmFsdWVSZWYgcHVzaFByb3BlcnR5ID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjdHgsIHJl
c3VsdCwgcHVzaFN0cmluZy5nZXQoKSwgZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uICYm
ICpleGNlcHRpb24pCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwor
CisgICAgSlNPYmplY3RSZWYgcHVzaEZ1bmN0aW9uID0gSlNWYWx1ZVRvT2JqZWN0KGN0eCwgcHVz
aFByb3BlcnR5LCBleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG9iamVjdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgRXhlY1N0YXRl
KiBleGVjID0gdG9KUyhjdHgpOworICAgICAgICBKU1ZhbHVlUmVmIG9iaiA9IHRvUmVmKGV4ZWMs
IHRvSlMoZXhlYywgb2JqZWN0c1tpXS5nZXQoKSkpOworCisgICAgICAgIEpTT2JqZWN0Q2FsbEFz
RnVuY3Rpb24oY3R4LCBwdXNoRnVuY3Rpb24sIHJlc3VsdCwgMSwgJm9iaiwgZXhjZXB0aW9uKTsK
KyAgICAgICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwogc3RhdGljIHZvaWQgZmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQogewogICAgIFBy
b2ZpbGUqIHByb2ZpbGUgPSBzdGF0aWNfY2FzdDxQcm9maWxlKj4oSlNPYmplY3RHZXRQcml2YXRl
KG9iamVjdCkpOwpAQCAtMTQzLDYgKzE5NSw3IEBAIEpTQ2xhc3NSZWYgUHJvZmlsZUNsYXNzKCkK
ICAgICBzdGF0aWMgSlNTdGF0aWNWYWx1ZSBzdGF0aWNWYWx1ZXNbXSA9IHsKICAgICAgICAgeyAi
dGl0bGUiLCBnZXRUaXRsZUNhbGxiYWNrLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwK
ICAgICAgICAgeyAiaGVhZCIsIGdldEhlYWRDYWxsYmFjaywgMCwga0pTUHJvcGVydHlBdHRyaWJ1
dGVOb25lIH0sCisgICAgICAgIHsgImxpdmVPYmplY3RzIiwgZ2V0TGl2ZU9iamVjdHMsMCwga0pT
UHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCiAgICAgICAgIHsgInVpZCIsIGdldFVuaXF1ZUlkQ2Fs
bGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAogICAgICAgICB7IDAsIDAsIDAs
IDAgfQogICAgIH07CkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29uc29sZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL0NvbnNvbGUuY3BwCShyZXZpc2lvbiA0NTA3OSkKKysrIFdlYkNvcmUv
cGFnZS9Db25zb2xlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEzLDYgKzMxMywxOSBAQCB2b2lk
IENvbnNvbGU6OnByb2ZpbGVFbmQoY29uc3QgSlNDOjpVU3RyCiAgICAgfQogfQogCit2b2lkIENv
bnNvbGU6OnNldE1lbW9yeVByb2ZpbGluZ0VuYWJsZWQoYm9vbCBpc0VuYWJsZWQpCit7CisgICAg
UGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEZJWE1FOiBzZWUgdGhlIEZJWE1FIGluIENvbnNvbGU6OnByb2ZpbGUKKyAg
ICBpZiAoIXBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+cHJvZmlsZXJFbmFibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEpTQzo6UHJvZmlsZXI6OnByb2ZpbGVyKCktPnNldElzTWVt
b3J5UHJvZmlsaW5nKGlzRW5hYmxlZCk7Cit9CisKICNlbmRpZgogICAgIAogdm9pZCBDb25zb2xl
Ojp0aW1lKGNvbnN0IFN0cmluZyYgdGl0bGUpCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29uc29sZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Db25zb2xlLmgJKHJldmlzaW9uIDQ1MDc5KQor
KysgV2ViQ29yZS9wYWdlL0NvbnNvbGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAg
ICAgICAgIHZvaWQgcHJvZmlsZShjb25zdCBKU0M6OlVTdHJpbmcmLCBTY3JpcHRDYWxsU3RhY2sq
KTsKICAgICAgICAgdm9pZCBwcm9maWxlRW5kKGNvbnN0IEpTQzo6VVN0cmluZyYsIFNjcmlwdENh
bGxTdGFjayopOworICAgICAgICB2b2lkIHNldE1lbW9yeVByb2ZpbGluZ0VuYWJsZWQoYm9vbCBp
c0VuYWJsZWQpOwogI2VuZGlmCiAgICAgICAgIHZvaWQgdGltZShjb25zdCBTdHJpbmcmKTsKICAg
ICAgICAgdm9pZCB0aW1lRW5kKGNvbnN0IFN0cmluZyYsIFNjcmlwdENhbGxTdGFjayopOwpJbmRl
eDogV2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9D
b25zb2xlLmlkbAkocmV2aXNpb24gNDUwNzkpCisrKyBXZWJDb3JlL3BhZ2UvQ29uc29sZS5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgbW9kdWxlIHdpbmRvdyB7CiAjaWYgZGVm
aW5lZChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFX0pBVkFTQ1JJUFRfREVC
VUdHRVIKICAgICAgICAgW0N1c3RvbUFyZ3VtZW50SGFuZGxpbmddIHZvaWQgcHJvZmlsZShpbiBb
Q29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHRpdGxlKTsKICAg
ICAgICAgW0N1c3RvbUFyZ3VtZW50SGFuZGxpbmddIHZvaWQgcHJvZmlsZUVuZChpbiBbQ29udmVy
dFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHRpdGxlKTsKKyAgICAgICAg
dm9pZCBzZXRNZW1vcnlQcm9maWxpbmdFbmFibGVkKGluIGJvb2xlYW4gaXNFbmFibGVkKTsKICNl
bmRpZgogCiAgICAgICAgIHZvaWQgdGltZShpbiBbQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVs
bFN0cmluZ10gRE9NU3RyaW5nIHRpdGxlKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1MDg3KQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIw
MDktMDYtMjQgIEhvcmlhIE9sYXJ1ICA8b2xhcnVAYWRvYmUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAxMDkzMDogV2ViS2l0IGNvdWxk
IGJlbmVmaXQgZnJvbSBhIEphdmFTY3JpcHQgbGl2ZSBvYmplY3QgcHJvZmlsZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTMwCisKKyAgICAgICAg
VGhlIHNldE1lbW9yeVByb2ZpbGluZ0VuYWJlZCBmdW5jdGlvbiB3YXMgYWRkZWQgdG8gdGhlIHdp
bmRvdy5jb25zb2xlLgorICAgICAgICBUaGlzIGFkZGl0aW9uIGNhdXNlZCB0aGUgZmFzdC9kb20v
V2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwgdGVzdCB0byBmYWlsLgorICAgICAgICBBZGRl
ZCB0aGUgZXh0cmEgZnVuY3Rpb24gdG8gdGhlIGV4cGVjdGVkIHJlc3VsdHMuCisKKyAgICAgICAg
QWRkZWQgdGVzdHMgZm9yIHRoZSBtZW1vcnkgcHJvZmlsZXIgZmVhdHVyZS4KKworICAgICAgICAq
IGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogZmFzdC9wcm9maWxlci1tZW1vcnk6IEFkZGVkLgorICAgICAgICAqIGZhc3QvcHJvZmlsZXIt
bWVtb3J5L2NyZWF0ZS1jdXN0b20tdHlwZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3Byb2ZpbGVyLW1lbW9yeS9jcmVhdGUtY3VzdG9tLXR5cGVzLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvcHJvZmlsZXItbWVtb3J5L2NyZWF0ZS1uYXRpdmUtdHlwZXMtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3Byb2ZpbGVyLW1lbW9yeS9jcmVhdGUtbmF0
aXZlLXR5cGVzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvcHJvZmlsZXItbWVtb3J5L2pz
LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3Byb2ZpbGVy
LW1lbW9yeS9qcy1wcm9wZXJ0aWVzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvcHJvZmls
ZXItbWVtb3J5L251bWJlci1vZi1hbGxvY2F0aW9ucy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvcHJvZmlsZXItbWVtb3J5L251bWJlci1vZi1hbGxvY2F0aW9ucy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L3Byb2ZpbGVyLW1lbW9yeS9yZXNvdXJjZXM6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvcHJvZmlsZXItbWVtb3J5L3Jlc291cmNlcy9URU1QTEFURS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L3Byb2ZpbGVyLW1lbW9yeS9yZXNvdXJjZXMvbWVtb3J5LXBy
b2ZpbGVyLXRlc3QtanMtcmVzb3VyY2VzLmpzOiBBZGRlZC4KKyAgICAgICAgKGxvZyk6CisgICAg
ICAgIChpbml0aWFsaXplKToKKyAgICAgICAgKGVuZE1lbW9yeVRlc3QpOgorICAgICAgICAoZ2V0
Rmlyc3RPYmplY3RPZlR5cGUpOgorICAgICAgICAoZ2V0UHJvZmlsZUJ5VGl0bGUpOgorICAgICAg
ICAocHJpbnRQcm9maWxlKToKKyAgICAgICAgKHByaW50T2JqZWN0SWRlbnRpZmllcik6CisgICAg
ICAgIChwcmludFNpbmdsZU9iamVjdElkZW50aWZpZXIpOgorICAgICAgICAocHJpbnRTdGFja1Ry
YWNlKToKKyAgICAgICAgKCk6CisgICAgICAgICogZmFzdC9wcm9maWxlci1tZW1vcnkvc2ltcGxl
LWFsbG9jYXRpb24tdHJhY2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3By
b2ZpbGVyLW1lbW9yeS9zaW1wbGUtYWxsb2NhdGlvbi10cmFjZS5odG1sOiBBZGRlZC4KKwogMjAw
OS0wNi0yNCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoRGlzYWJsaW5nIGZhaWxpbmcgdGVzdCEpLgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiA0NTA3OSkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRv
dy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2MzIs
NiArMTYzMiw3IEBAIHdpbmRvdy5jb25zb2xlLmxvZyBbZnVuY3Rpb25dCiB3aW5kb3cuY29uc29s
ZS5wcm9maWxlIFtmdW5jdGlvbl0KIHdpbmRvdy5jb25zb2xlLnByb2ZpbGVFbmQgW2Z1bmN0aW9u
XQogd2luZG93LmNvbnNvbGUucHJvZmlsZXMgW29iamVjdCBBcnJheV0KK3dpbmRvdy5jb25zb2xl
LnNldE1lbW9yeVByb2ZpbGluZ0VuYWJsZWQgW2Z1bmN0aW9uXQogd2luZG93LmNvbnNvbGUudGlt
ZSBbZnVuY3Rpb25dCiB3aW5kb3cuY29uc29sZS50aW1lRW5kIFtmdW5jdGlvbl0KIHdpbmRvdy5j
b25zb2xlLnRyYWNlIFtmdW5jdGlvbl0KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXIt
bWVtb3J5L2NyZWF0ZS1jdXN0b20tdHlwZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvcHJvZmlsZXItbWVtb3J5L2NyZWF0ZS1jdXN0b20tdHlwZXMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9wcm9maWxlci1tZW1vcnkv
Y3JlYXRlLWN1c3RvbS10eXBlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTQgQEAKK1Rlc3QgdGhlIHR5cGUgZm9yIGN1c3RvbSB0eXBlcyBvciBvYmplY3RzLiBUaGUgdHlw
ZXMgZm9yIHN1Y2ggb2JqZWNzIGlzIE9iamVjdC4KKworVG8gcnVuIHRoZSB0ZXN0IG1hbnVhbGx5
LCBlbmFibGUgcHJvZmlsaW5nIGZyb20gdGhlIFdlYiBJbnNwZWN0b3IgYW5kIHJlZnJlc2ggdGhl
IHBhZ2UuIFlvdSBzaG91bGQgc2VlIHRoZSBmb2xsb3dpbmcgb3V0cHV0OgorCitPYmplY3QgdHlw
ZTogRnVuY3Rpb24KK09iamVjdCB0eXBlOiBPYmplY3QKK09iamVjdCB0eXBlOiBPYmplY3QKKyAg
ICAKK091dHB1dCBmb2xsb3dzCisKK09iamVjdCB0eXBlOiBGdW5jdGlvbgorT2JqZWN0IHR5cGU6
IE9iamVjdAorT2JqZWN0IHR5cGU6IE9iamVjdAorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3By
b2ZpbGVyLW1lbW9yeS9jcmVhdGUtY3VzdG9tLXR5cGVzLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9wcm9maWxlci1tZW1vcnkvY3JlYXRlLWN1c3RvbS10eXBlcy5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9wcm9maWxlci1tZW1vcnkvY3JlYXRlLWN1
c3RvbS10eXBlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcHJvZmlsZXIvcmVzb3VyY2VzL3Byb2ZpbGVyLXRlc3QtSlMt
cmVzb3VyY2VzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvbWVtb3J5LXBy
b2ZpbGVyLXRlc3QtanMtcmVzb3VyY2VzLmpzIj48L3NjcmlwdD4KKworPHNjcmlwdD4KKyAgICBw
cm9maWxlVGl0bGUgPSAiQ3VzdG9tIFR5cGVzIFByb2ZpbGUiOyAgICAKKworICAgIGZ1bmN0aW9u
IEN1c3RvbVR5cGUoKSB7CisgICAgfQorCisgICAgZnVuY3Rpb24gc3RhcnRUZXN0KCkgeworICAg
ICAgICBjb25zb2xlLnByb2ZpbGUocHJvZmlsZVRpdGxlKTsKKyAgICAgICAgdmFyIGN1c3RvbU9i
amVjdCA9IG5ldyBDdXN0b21UeXBlKCk7CisgICAgICAgIHZhciBpbmxpbmVPYmplY3QgPSB7IH0K
KyAgICAgICAgY29uc29sZS5wcm9maWxlRW5kKCk7CisKKyAgICAgICAgcHJpbnRQcm9maWxlKHBy
b2ZpbGVUaXRsZSwgdHlwZU5hbWVBc2NlbmRpbmcpOworCisgICAgICAgIGVuZE1lbW9yeVRlc3Qo
KTsKKyAgICB9Cis8L3NjcmlwdD4KKworPC9oZWFkPgorPGJvZHkgb25sb2FkPSJpbml0aWFsaXpl
KCk7IHN0YXJ0VGVzdCgpOyI+CisgICAgPHAgaWQ9ImRlc2NyaXB0aW9uIj5UZXN0IHRoZSB0eXBl
IGZvciBjdXN0b20gdHlwZXMgb3Igb2JqZWN0cy4gVGhlIHR5cGVzIGZvciBzdWNoIG9iamVjcwor
ICAgICAgICBpcyBPYmplY3QuIDxwPgorICAgIDxwPlRvIHJ1biB0aGUgdGVzdCBtYW51YWxseSwg
ZW5hYmxlIHByb2ZpbGluZyBmcm9tIHRoZSBXZWIgSW5zcGVjdG9yIGFuZCByZWZyZXNoIHRoZSBw
YWdlLgorICAgICAgICBZb3Ugc2hvdWxkIHNlZSB0aGUgZm9sbG93aW5nIG91dHB1dDo8L3A+Cisg
ICAgPHByZT4KK09iamVjdCB0eXBlOiBGdW5jdGlvbgorT2JqZWN0IHR5cGU6IE9iamVjdAorT2Jq
ZWN0IHR5cGU6IE9iamVjdAorICAgIDwvcHJlPgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjxwIHN0
eWxlPSJjb2xvcjpibHVlIj5PdXRwdXQgZm9sbG93czwvcD48L2Rpdj4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXItbWVtb3J5L2NyZWF0ZS1uYXRpdmUt
dHlwZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvcHJvZmls
ZXItbWVtb3J5L2NyZWF0ZS1uYXRpdmUtdHlwZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9wcm9maWxlci1tZW1vcnkvY3JlYXRlLW5hdGl2ZS10eXBlcy1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjggQEAKK0FsbG9jYXRlIGJhc2lj
IG9iamVjdCB0eXBlcyB0byB2ZXJpZnkgdGhhdCB0aGV5IGdldCByZWdpc3RlcmVkIGJ5IHRoZSBt
ZW1vcnkgcHJvZmlsZXIuIFRoZXJlIGFyZSB0d28gZnVuY3Rpb24gb2JqZWN0cyBiZWNhdXNlIG9u
ZSBpcyBjcmVhdGVkIGJ5IHRoZSBjb25zb2xlIHByb3RvdHlwZS4KKworVG8gcnVuIHRoZSB0ZXN0
IG1hbnVhbGx5LCBlbmFibGUgcHJvZmlsaW5nIGZyb20gdGhlIFdlYiBJbnNwZWN0b3IgYW5kIHJl
ZnJlc2ggdGhlIHBhZ2UuIFlvdSBzaG91bGQgc2VlIHRoZSBmb2xsb3dpbmcgb3V0cHV0OgorCitP
YmplY3QgdHlwZTogQXJyYXkKK09iamVjdCB0eXBlOiBCb29sZWFuCitPYmplY3QgdHlwZTogRGF0
ZQorT2JqZWN0IHR5cGU6IEVycm9yCitPYmplY3QgdHlwZTogRnVuY3Rpb24KK09iamVjdCB0eXBl
OiBGdW5jdGlvbgorT2JqZWN0IHR5cGU6IE51bWJlcgorT2JqZWN0IHR5cGU6IE9iamVjdAorT2Jq
ZWN0IHR5cGU6IFJlZ0V4cAorT2JqZWN0IHR5cGU6IFN0cmluZworICAgIAorT3V0cHV0IGZvbGxv
d3MKKworT2JqZWN0IHR5cGU6IEFycmF5CitPYmplY3QgdHlwZTogQm9vbGVhbgorT2JqZWN0IHR5
cGU6IERhdGUKK09iamVjdCB0eXBlOiBFcnJvcgorT2JqZWN0IHR5cGU6IEZ1bmN0aW9uCitPYmpl
Y3QgdHlwZTogRnVuY3Rpb24KK09iamVjdCB0eXBlOiBOdW1iZXIKK09iamVjdCB0eXBlOiBPYmpl
Y3QKK09iamVjdCB0eXBlOiBSZWdFeHAKK09iamVjdCB0eXBlOiBTdHJpbmcKKwpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9wcm9maWxlci1tZW1vcnkvY3JlYXRlLW5hdGl2ZS10eXBlcy5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXItbWVtb3J5L2NyZWF0ZS1uYXRp
dmUtdHlwZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXIt
bWVtb3J5L2NyZWF0ZS1uYXRpdmUtdHlwZXMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0
bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Byb2ZpbGVyL3Jlc291cmNlcy9w
cm9maWxlci10ZXN0LUpTLXJlc291cmNlcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL21lbW9yeS1wcm9maWxlci10ZXN0LWpzLXJlc291cmNlcy5qcyI+PC9zY3JpcHQ+CisK
KzxzY3JpcHQ+CisgICAgdmFyIGdsb2JhbFZhciA9IG5ldyBPYmplY3QoKTsKKworICAgIGZ1bmN0
aW9uIHN0YXJ0VGVzdCgpIHsKKyAgICAgICAgdmFyIHByb2ZpbGVUaXRsZSA9ICJOYXRpdmUgT2Jq
ZWN0cyBQcm9maWxlIjsKKworICAgICAgICBjb25zb2xlLnByb2ZpbGUocHJvZmlsZVRpdGxlKTsK
KworICAgICAgICBnbG9iYWxWYXIub2JqZWN0T2JqID0gbmV3IE9iamVjdCgpOworICAgICAgICBn
bG9iYWxWYXIubnVtYmVyT2JqID0gbmV3IE51bWJlcigpOworICAgICAgICBnbG9iYWxWYXIuYXJy
YXlPYmogPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgZ2xvYmFsVmFyLnN0cmluZ09iaiA9IG5ldyBT
dHJpbmcoIkxvbmdlciB0aGF0IG9uZSBjaGFyYWN0ZXIiKTsgCisgICAgICAgIGdsb2JhbFZhci5i
b29sZWFuT2JqID0gbmV3IEJvb2xlYW4oKTsKKyAgICAgICAgZ2xvYmFsVmFyLmZ1bmN0aW9uT2Jq
ID0gbmV3IEZ1bmN0aW9uKCk7CisgICAgICAgIGdsb2JhbFZhci5kYXRlT2JqID0gbmV3IERhdGUo
KTsKKyAgICAgICAgZ2xvYmFsVmFyLmVycm9yT2JqID0gbmV3IEVycm9yKCk7CisgICAgICAgIGds
b2JhbFZhci5yZWdFeHBPYmogPSBuZXcgUmVnRXhwKCk7CisgCisgICAgICAgIGNvbnNvbGUucHJv
ZmlsZUVuZCgpOworICAgICAgICAKKyAgICAgICAgcHJpbnRQcm9maWxlKHByb2ZpbGVUaXRsZSwg
dHlwZU5hbWVBc2NlbmRpbmcpOworCisgICAgICAgIGVuZE1lbW9yeVRlc3QoKTsKKyAgICB9Cis8
L3NjcmlwdD4KKworPC9oZWFkPgorPGJvZHkgb25sb2FkPSJpbml0aWFsaXplKCk7IHN0YXJ0VGVz
dCgpOyI+CisgICAgPHAgaWQ9ImRlc2NyaXB0aW9uIj5BbGxvY2F0ZSBiYXNpYyBvYmplY3QgdHlw
ZXMgdG8gdmVyaWZ5IHRoYXQgdGhleSBnZXQgcmVnaXN0ZXJlZCBieQorICAgICAgICB0aGUgbWVt
b3J5IHByb2ZpbGVyLiBUaGVyZSBhcmUgdHdvIGZ1bmN0aW9uIG9iamVjdHMgYmVjYXVzZSBvbmUg
aXMgY3JlYXRlZCBieSB0aGUKKyAgICAgICAgY29uc29sZSBwcm90b3R5cGUuPHA+CisgICAgPHA+
VG8gcnVuIHRoZSB0ZXN0IG1hbnVhbGx5LCBlbmFibGUgcHJvZmlsaW5nIGZyb20gdGhlIFdlYiBJ
bnNwZWN0b3IgYW5kIHJlZnJlc2ggdGhlIHBhZ2UuCisgICAgICAgIFlvdSBzaG91bGQgc2VlIHRo
ZSBmb2xsb3dpbmcgb3V0cHV0OjwvcD4KKyAgICA8cHJlPgorT2JqZWN0IHR5cGU6IEFycmF5CitP
YmplY3QgdHlwZTogQm9vbGVhbgorT2JqZWN0IHR5cGU6IERhdGUKK09iamVjdCB0eXBlOiBFcnJv
cgorT2JqZWN0IHR5cGU6IEZ1bmN0aW9uCitPYmplY3QgdHlwZTogRnVuY3Rpb24KK09iamVjdCB0
eXBlOiBOdW1iZXIKK09iamVjdCB0eXBlOiBPYmplY3QKK09iamVjdCB0eXBlOiBSZWdFeHAKK09i
amVjdCB0eXBlOiBTdHJpbmcKKyAgICA8L3ByZT4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48cCBz
dHlsZT0iY29sb3I6Ymx1ZSI+T3V0cHV0IGZvbGxvd3M8L3A+PC9kaXY+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3Byb2ZpbGVyLW1lbW9yeS9qcy1wcm9wZXJ0aWVz
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3Byb2ZpbGVyLW1l
bW9yeS9qcy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvcHJvZmlsZXItbWVtb3J5L2pzLXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE2IEBACitUaGlzIHRlc3QgY3JlYXRlcyBhIHByb2ZpbGUgd2l0
aCBtZW1vcnkgZGF0YSBhbmQgdmVyaWZpZXMgdGhhdCBpdCBoYXMgYSBsaXZlT2JqZWN0cyBwcm9w
ZXJ0eSwgYW5kIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBPYmplY3RJZGVudGlmaWVyIGV4aXN0Lgor
CitUbyBydW4gdGhlIHRlc3QgbWFudWFsbHksIGVuYWJsZSBwcm9maWxpbmcgZnJvbSB0aGUgV2Vi
IEluc3BlY3RvciBhbmQgcmVmcmVzaCB0aGUgcGFnZS4gWW91IHNob3VsZCBzZWUgdGhlIGZvbGxv
d2luZyBvdXRwdXQ6CisKK3R5cGVOYW1lCitpZAorc2l6ZQorY3JlYXRlZEZyb20KKyAgICAKK091
dHB1dCBmb2xsb3dzCisKK3R5cGVOYW1lCitpZAorc2l6ZQorY3JlYXRlZEZyb20KKwpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9wcm9maWxlci1tZW1vcnkvanMtcHJvcGVydGllcy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXItbWVtb3J5L2pzLXByb3BlcnRpZXMu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXItbWVtb3J5L2pz
LXByb3BlcnRpZXMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Byb2ZpbGVyL3Jlc291cmNlcy9wcm9maWxlci10ZXN0LUpT
LXJlc291cmNlcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL21lbW9yeS1w
cm9maWxlci10ZXN0LWpzLXJlc291cmNlcy5qcyI+PC9zY3JpcHQ+CisKKzxzY3JpcHQ+CisgICAg
ZnVuY3Rpb24gc3RhcnRUZXN0KCkgeworICAgICAgICB2YXIgcHJvZmlsZVRpdGxlID0gIkN1c3Rv
bSBQcm9maWxlIjsKKyAgICAgICAgY29uc29sZS5wcm9maWxlKHByb2ZpbGVUaXRsZSk7CisgICAg
ICAgIHZhciB0ZXN0QXJyYXkgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgY29uc29sZS5wcm9maWxl
RW5kKCk7CisKKyAgICAgICAgbGl2ZU9iamVjdHMgPSBnZXRQcm9maWxlQnlUaXRsZShwcm9maWxl
VGl0bGUpLmxpdmVPYmplY3RzOworICAgICAgICBpZiAobGl2ZU9iamVjdHMgPT0gInVuZGVmaW5l
ZCIpIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoInByb2ZpbGUubGl2ZU9iamVjdHMgcHJvcGVy
dHkgaXMgdW5kZWZpbmVkIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHZhciBwcm9wZXJ0eVN0cmluZyA9ICIiOworICAgICAgICBmb3IgKHZhciBp
IGluIGxpdmVPYmplY3RzWzBdKQorICAgICAgICAgICAgcHJvcGVydHlTdHJpbmcgKz0gaSArICJc
biI7CisKKyAgICAgICAgbG9nKHByb3BlcnR5U3RyaW5nKTsgCisgICAgICAgIAorICAgICAgICBl
bmRNZW1vcnlUZXN0KCk7CisgICAgfQorPC9zY3JpcHQ+CisKKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0iaW5pdGlhbGl6ZSgpOyBzdGFydFRlc3QoKTsiPgorICAgIDxwIGlkPSJkZXNjcmlwdGlvbiI+
VGhpcyB0ZXN0IGNyZWF0ZXMgYSBwcm9maWxlIHdpdGggbWVtb3J5IGRhdGEgYW5kIHZlcmlmaWVz
IHRoYXQKKyAgICAgICAgaXQgaGFzIGEgbGl2ZU9iamVjdHMgcHJvcGVydHksIGFuZCB0aGUgcHJv
cGVydGllcyBvZiB0aGUgT2JqZWN0SWRlbnRpZmllciBleGlzdC48cD4KKyAgICA8cD5UbyBydW4g
dGhlIHRlc3QgbWFudWFsbHksIGVuYWJsZSBwcm9maWxpbmcgZnJvbSB0aGUgV2ViIEluc3BlY3Rv
ciBhbmQgcmVmcmVzaCB0aGUgcGFnZS4KKyAgICAgICAgWW91IHNob3VsZCBzZWUgdGhlIGZvbGxv
d2luZyBvdXRwdXQ6PC9wPgorICAgIDxwcmU+Cit0eXBlTmFtZQoraWQKK3NpemUKK2NyZWF0ZWRG
cm9tCisgICAgPC9wcmU+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PHAgc3R5bGU9ImNvbG9yOmJs
dWUiPk91dHB1dCBmb2xsb3dzPC9wPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9wcm9maWxlci1tZW1vcnkvbnVtYmVyLW9mLWFsbG9jYXRpb25zLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3Byb2ZpbGVyLW1lbW9yeS9u
dW1iZXItb2YtYWxsb2NhdGlvbnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9wcm9maWxlci1tZW1vcnkvbnVtYmVyLW9mLWFsbG9jYXRpb25zLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAorVGhpcyB0ZXN0IGFsbG9jYXRlcyBh
IGxhcmdlIG51bWJlciBvZiBvYmplY3RzIG9mIGEgc3BlY2lmaWMgdHlwZSwgYW5kIHZlcmlmaWVz
IHRoYXQgdGhlIHJlc3BlY3RpdmUgb2YgYWxsb2NhdGlvbnMgaGF2ZSBiZWVuIHJlZ2lzdGVyZSBp
biB0aGUgcHJvZmlsZS4KKworVG8gcnVuIHRoZSB0ZXN0IG1hbnVhbGx5LCBlbmFibGUgcHJvZmls
aW5nIGZyb20gdGhlIFdlYiBJbnNwZWN0b3IgYW5kIHJlZnJlc2ggdGhlIHBhZ2UuIFlvdSBzaG91
bGQgc2VlIHRoZSBmb2xsb3dpbmcgb3V0cHV0OgorCitudW1iZXJPZkFsbG9jYXRpb25zIHBlciB0
eXBlIGlzIDEwMDAwCisKK1BBU1MgaW5zdGFuY2VDb3VudHNbJ09iamVjdCddIGlzIG51bWJlck9m
QWxsb2NhdGlvbnMKK1BBU1MgaW5zdGFuY2VDb3VudHNbJ051bWJlciddIGlzIG51bWJlck9mQWxs
b2NhdGlvbnMKK1BBU1MgaW5zdGFuY2VDb3VudHNbJ0Jvb2xlYW4nXSBpcyBudW1iZXJPZkFsbG9j
YXRpb25zCitQQVNTIGluc3RhbmNlQ291bnRzWydSZWdFeHAnXSBpcyBudW1iZXJPZkFsbG9jYXRp
b25zCitQQVNTIGluc3RhbmNlQ291bnRzWydEYXRlJ10gaXMgbnVtYmVyT2ZBbGxvY2F0aW9ucwor
UEFTUyBpbnN0YW5jZUNvdW50c1snRXJyb3InXSBpcyBudW1iZXJPZkFsbG9jYXRpb25zCitQQVNT
IGluc3RhbmNlQ291bnRzWydTdHJpbmcnXSBpcyBudW1iZXJPZkFsbG9jYXRpb25zCitQQVNTIGlu
c3RhbmNlQ291bnRzWydGdW5jdGlvbiddIGlzIG51bWJlck9mQWxsb2NhdGlvbnMgKyAyCitQQVNT
IGluc3RhbmNlQ291bnRzWydBcnJheSddIGlzIG51bWJlck9mQWxsb2NhdGlvbnMgKyA5CisgICAg
CitPdXRwdXQgZm9sbG93cworCitudW1iZXJPZkFsbG9jYXRpb25zIHBlciB0eXBlIGlzIDEwMDAw
CitQQVNTIGluc3RhbmNlQ291bnRzWydPYmplY3QnXSBpcyBudW1iZXJPZkFsbG9jYXRpb25zCitQ
QVNTIGluc3RhbmNlQ291bnRzWydOdW1iZXInXSBpcyBudW1iZXJPZkFsbG9jYXRpb25zCitQQVNT
IGluc3RhbmNlQ291bnRzWydCb29sZWFuJ10gaXMgbnVtYmVyT2ZBbGxvY2F0aW9ucworUEFTUyBp
bnN0YW5jZUNvdW50c1snUmVnRXhwJ10gaXMgbnVtYmVyT2ZBbGxvY2F0aW9ucworUEFTUyBpbnN0
YW5jZUNvdW50c1snRGF0ZSddIGlzIG51bWJlck9mQWxsb2NhdGlvbnMKK1BBU1MgaW5zdGFuY2VD
b3VudHNbJ0Vycm9yJ10gaXMgbnVtYmVyT2ZBbGxvY2F0aW9ucworUEFTUyBpbnN0YW5jZUNvdW50
c1snU3RyaW5nJ10gaXMgbnVtYmVyT2ZBbGxvY2F0aW9ucworUEFTUyBpbnN0YW5jZUNvdW50c1sn
RnVuY3Rpb24nXSBpcyBudW1iZXJPZkFsbG9jYXRpb25zICsgMgorUEFTUyBpbnN0YW5jZUNvdW50
c1snQXJyYXknXSBpcyBudW1iZXJPZkFsbG9jYXRpb25zICsgOQorCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3Byb2ZpbGVyLW1lbW9yeS9udW1iZXItb2YtYWxsb2NhdGlvbnMuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3Byb2ZpbGVyLW1lbW9yeS9udW1iZXItb2YtYWxsb2Nh
dGlvbnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXItbWVt
b3J5L251bWJlci1vZi1hbGxvY2F0aW9ucy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcHJvZmlsZXIvcmVzb3VyY2VzL3By
b2ZpbGVyLXRlc3QtSlMtcmVzb3VyY2VzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvbWVtb3J5LXByb2ZpbGVyLXRlc3QtanMtcmVzb3VyY2VzLmpzIj48L3NjcmlwdD4KKwor
PHNjcmlwdD4KKyAgICB2YXIgcHJvZmlsZVRpdGxlID0gIkFsbG9jYXRpb24gTnVtYmVycyI7Cisg
ICAgdmFyIGdsb2JhbEFycmF5ID0gbmV3IE9iamVjdCgpOworICAgIHZhciBudW1iZXJPZkFsbG9j
YXRpb25zID0gMTAwMDA7CisgICAgdmFyIGluc3RhbmNlQ291bnRzOworCisgICAgZnVuY3Rpb24g
c3RhcnRUZXN0KCkgeworICAgICAgICBjb25zb2xlLnByb2ZpbGUocHJvZmlsZVRpdGxlKTsKKwor
ICAgICAgICBnbG9iYWxBcnJheVsiT2JqZWN0Il0gPSBjcmVhdGVPYmplY3RzKG51bWJlck9mQWxs
b2NhdGlvbnMsIE9iamVjdCk7CisgICAgICAgIGdsb2JhbEFycmF5WyJOdW1iZXIiXSA9IGNyZWF0
ZU9iamVjdHMobnVtYmVyT2ZBbGxvY2F0aW9ucywgTnVtYmVyKTsKKyAgICAgICAgZ2xvYmFsQXJy
YXlbIkJvb2xlYW4iXSA9IGNyZWF0ZU9iamVjdHMobnVtYmVyT2ZBbGxvY2F0aW9ucywgQm9vbGVh
bik7CisgICAgICAgIGdsb2JhbEFycmF5WyJSZWdFeHAiXSA9IGNyZWF0ZU9iamVjdHMobnVtYmVy
T2ZBbGxvY2F0aW9ucywgUmVnRXhwKTsKKyAgICAgICAgZ2xvYmFsQXJyYXlbIkRhdGUiXSA9IGNy
ZWF0ZU9iamVjdHMobnVtYmVyT2ZBbGxvY2F0aW9ucywgRGF0ZSk7CisgICAgICAgIGdsb2JhbEFy
cmF5WyJFcnJvciJdID0gY3JlYXRlT2JqZWN0cyhudW1iZXJPZkFsbG9jYXRpb25zLCBFcnJvcik7
CisgICAgICAgIGdsb2JhbEFycmF5WyJTdHJpbmciXSA9IGNyZWF0ZU9iamVjdHMobnVtYmVyT2ZB
bGxvY2F0aW9ucywgU3RyaW5nKTsKKyAgICAgICAgZ2xvYmFsQXJyYXlbIkZ1bmN0aW9uIl0gPSBj
cmVhdGVPYmplY3RzKG51bWJlck9mQWxsb2NhdGlvbnMsIEZ1bmN0aW9uKTsKKyAgICAgICAgZ2xv
YmFsQXJyYXlbIkFycmF5Il0gPSBjcmVhdGVPYmplY3RzKG51bWJlck9mQWxsb2NhdGlvbnMsIEFy
cmF5KTsKKworICAgICAgICBjb25zb2xlLnByb2ZpbGVFbmQoKTsKKworICAgICAgICBpbnN0YW5j
ZUNvdW50cyA9IGNvdW50T2JqZWN0SW5zdGFuY2VzKHByb2ZpbGVUaXRsZSk7IAorCisgICAgICAg
IGxvZygibnVtYmVyT2ZBbGxvY2F0aW9ucyBwZXIgdHlwZSBpcyAiICsgbnVtYmVyT2ZBbGxvY2F0
aW9ucyk7CisgICAgICAgIHNob3VsZEJlKCJpbnN0YW5jZUNvdW50c1snT2JqZWN0J10iLCAnbnVt
YmVyT2ZBbGxvY2F0aW9ucycpOworICAgICAgICBzaG91bGRCZSgiaW5zdGFuY2VDb3VudHNbJ051
bWJlciddIiwgJ251bWJlck9mQWxsb2NhdGlvbnMnKTsKKyAgICAgICAgc2hvdWxkQmUoImluc3Rh
bmNlQ291bnRzWydCb29sZWFuJ10iLCAnbnVtYmVyT2ZBbGxvY2F0aW9ucycpOworICAgICAgICBz
aG91bGRCZSgiaW5zdGFuY2VDb3VudHNbJ1JlZ0V4cCddIiwgJ251bWJlck9mQWxsb2NhdGlvbnMn
KTsKKyAgICAgICAgc2hvdWxkQmUoImluc3RhbmNlQ291bnRzWydEYXRlJ10iLCAnbnVtYmVyT2ZB
bGxvY2F0aW9ucycpOworICAgICAgICBzaG91bGRCZSgiaW5zdGFuY2VDb3VudHNbJ0Vycm9yJ10i
LCAnbnVtYmVyT2ZBbGxvY2F0aW9ucycpOworICAgICAgICBzaG91bGRCZSgiaW5zdGFuY2VDb3Vu
dHNbJ1N0cmluZyddIiwgJ251bWJlck9mQWxsb2NhdGlvbnMnKTsKKyAgICAgICAgc2hvdWxkQmUo
Imluc3RhbmNlQ291bnRzWydGdW5jdGlvbiddIiwgJ251bWJlck9mQWxsb2NhdGlvbnMgKyAyJyk7
CisgICAgICAgIHNob3VsZEJlKCJpbnN0YW5jZUNvdW50c1snQXJyYXknXSIsICdudW1iZXJPZkFs
bG9jYXRpb25zICsgOScpOworCisgICAgICAgIGVuZE1lbW9yeVRlc3QoKTsKKyAgICB9Cis8L3Nj
cmlwdD4KKworPC9oZWFkPgorPGJvZHkgb25sb2FkPSJpbml0aWFsaXplKCk7IHN0YXJ0VGVzdCgp
OyI+CisgICAgPHAgaWQ9ImRlc2NyaXB0aW9uIj5UaGlzIHRlc3QgYWxsb2NhdGVzIGEgbGFyZ2Ug
bnVtYmVyIG9mIG9iamVjdHMgb2YgYSBzcGVjaWZpYyB0eXBlLCBhbmQKKyAgICAgICAgdmVyaWZp
ZXMgdGhhdCB0aGUgcmVzcGVjdGl2ZSBvZiBhbGxvY2F0aW9ucyBoYXZlIGJlZW4gcmVnaXN0ZXJl
IGluIHRoZSBwcm9maWxlLjxwPgorICAgIDxwPlRvIHJ1biB0aGUgdGVzdCBtYW51YWxseSwgZW5h
YmxlIHByb2ZpbGluZyBmcm9tIHRoZSBXZWIgSW5zcGVjdG9yIGFuZCByZWZyZXNoIHRoZSBwYWdl
LgorICAgICAgICBZb3Ugc2hvdWxkIHNlZSB0aGUgZm9sbG93aW5nIG91dHB1dDo8L3A+CisgICAg
PHByZT4KK251bWJlck9mQWxsb2NhdGlvbnMgcGVyIHR5cGUgaXMgMTAwMDAKKworUEFTUyBpbnN0
YW5jZUNvdW50c1snT2JqZWN0J10gaXMgbnVtYmVyT2ZBbGxvY2F0aW9ucworUEFTUyBpbnN0YW5j
ZUNvdW50c1snTnVtYmVyJ10gaXMgbnVtYmVyT2ZBbGxvY2F0aW9ucworUEFTUyBpbnN0YW5jZUNv
dW50c1snQm9vbGVhbiddIGlzIG51bWJlck9mQWxsb2NhdGlvbnMKK1BBU1MgaW5zdGFuY2VDb3Vu
dHNbJ1JlZ0V4cCddIGlzIG51bWJlck9mQWxsb2NhdGlvbnMKK1BBU1MgaW5zdGFuY2VDb3VudHNb
J0RhdGUnXSBpcyBudW1iZXJPZkFsbG9jYXRpb25zCitQQVNTIGluc3RhbmNlQ291bnRzWydFcnJv
ciddIGlzIG51bWJlck9mQWxsb2NhdGlvbnMKK1BBU1MgaW5zdGFuY2VDb3VudHNbJ1N0cmluZydd
IGlzIG51bWJlck9mQWxsb2NhdGlvbnMKK1BBU1MgaW5zdGFuY2VDb3VudHNbJ0Z1bmN0aW9uJ10g
aXMgbnVtYmVyT2ZBbGxvY2F0aW9ucyArIDIKK1BBU1MgaW5zdGFuY2VDb3VudHNbJ0FycmF5J10g
aXMgbnVtYmVyT2ZBbGxvY2F0aW9ucyArIDkKKyAgICA8L3ByZT4KKyAgICA8ZGl2IGlkPSJjb25z
b2xlIj48cCBzdHlsZT0iY29sb3I6Ymx1ZSI+T3V0cHV0IGZvbGxvd3M8L3A+PC9kaXY+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3Byb2ZpbGVyLW1lbW9yeS9zaW1w
bGUtYWxsb2NhdGlvbi10cmFjZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9wcm9maWxlci1tZW1vcnkvc2ltcGxlLWFsbG9jYXRpb24tdHJhY2UtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9wcm9maWxlci1tZW1vcnkvc2lt
cGxlLWFsbG9jYXRpb24tdHJhY2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU5IEBACitUaGlzIHRlc3QgdmVyaWZpZXMgY29ycmVjdCBzdG9yaW5nIG9mIGFsbG9jYXRpb24g
dHJhY2VzIGZvciBvYmplY3RzCisKK1RvIHJ1biB0aGUgdGVzdCBtYW51YWxseSwgZW5hYmxlIHBy
b2ZpbGluZyBmcm9tIHRoZSBXZWIgSW5zcGVjdG9yIGFuZCByZWZyZXNoIHRoZSBwYWdlLiBZb3Ug
c2hvdWxkIHNlZSB0aGUgZm9sbG93aW5nIG91dHB1dDoKKworT2JqZWN0IHR5cGU6IEJvb2xlYW4K
K0NyZWF0ZWQgZnJvbTogCisgICBCb29sZWFuIChubyBmaWxlKSAobGluZSAwKQorICAgICAgc3Rh
cnRUZXN0IHNpbXBsZS1hbGxvY2F0aW9uLXRyYWNlLmh0bWwgKGxpbmUgMTkpCisgICAgICAgICBU
aHJlYWRfMSAobm8gZmlsZSkgKGxpbmUgMCkKKworT2JqZWN0IHR5cGU6IEZ1bmN0aW9uCitDcmVh
dGVkIGZyb206IAorICAgc3RhcnRUZXN0IHNpbXBsZS1hbGxvY2F0aW9uLXRyYWNlLmh0bWwgKGxp
bmUgMTkpCisgICAgICBUaHJlYWRfMSAobm8gZmlsZSkgKGxpbmUgMCkKKworT2JqZWN0IHR5cGU6
IE51bWJlcgorQ3JlYXRlZCBmcm9tOiAKKyAgIE51bWJlciAobm8gZmlsZSkgKGxpbmUgMCkKKyAg
ICAgIG5leHRGdW5jdGlvbiBzaW1wbGUtYWxsb2NhdGlvbi10cmFjZS5odG1sIChsaW5lIDE1KQor
ICAgICAgICAgc3RhcnRUZXN0IHNpbXBsZS1hbGxvY2F0aW9uLXRyYWNlLmh0bWwgKGxpbmUgMTkp
CisgICAgICAgICAgICBUaHJlYWRfMSAobm8gZmlsZSkgKGxpbmUgMCkKKworT2JqZWN0IHR5cGU6
IE9iamVjdAorQ3JlYXRlZCBmcm9tOiAKKyAgIE9iamVjdCAobm8gZmlsZSkgKGxpbmUgMCkKKyAg
ICAgIChwcm9ncmFtKSAobm8gZmlsZSkgKGxpbmUgMSkKKyAgICAgICAgIGV2YWwgKG5vIGZpbGUp
IChsaW5lIDApCisgICAgICAgICAgICBzdGFydFRlc3Qgc2ltcGxlLWFsbG9jYXRpb24tdHJhY2Uu
aHRtbCAobGluZSAxOSkKKyAgICAgICAgICAgICAgIFRocmVhZF8xIChubyBmaWxlKSAobGluZSAw
KSAgICAKKyAgICAKK091dHB1dCBmb2xsb3dzCisKK09iamVjdCB0eXBlOiBCb29sZWFuCitDcmVh
dGVkIGZyb206IAorICAgQm9vbGVhbiAobm8gZmlsZSkgKGxpbmUgMCkKKyAgICAgIHN0YXJ0VGVz
dCBzaW1wbGUtYWxsb2NhdGlvbi10cmFjZS5odG1sIChsaW5lIDE5KQorICAgICAgICAgVGhyZWFk
XzEgKG5vIGZpbGUpIChsaW5lIDApCisKK09iamVjdCB0eXBlOiBGdW5jdGlvbgorQ3JlYXRlZCBm
cm9tOiAKKyAgIHN0YXJ0VGVzdCBzaW1wbGUtYWxsb2NhdGlvbi10cmFjZS5odG1sIChsaW5lIDE5
KQorICAgICAgVGhyZWFkXzEgKG5vIGZpbGUpIChsaW5lIDApCisKK09iamVjdCB0eXBlOiBOdW1i
ZXIKK0NyZWF0ZWQgZnJvbTogCisgICBOdW1iZXIgKG5vIGZpbGUpIChsaW5lIDApCisgICAgICBu
ZXh0RnVuY3Rpb24gc2ltcGxlLWFsbG9jYXRpb24tdHJhY2UuaHRtbCAobGluZSAxNSkKKyAgICAg
ICAgIHN0YXJ0VGVzdCBzaW1wbGUtYWxsb2NhdGlvbi10cmFjZS5odG1sIChsaW5lIDE5KQorICAg
ICAgICAgICAgVGhyZWFkXzEgKG5vIGZpbGUpIChsaW5lIDApCisKK09iamVjdCB0eXBlOiBPYmpl
Y3QKK0NyZWF0ZWQgZnJvbTogCisgICBPYmplY3QgKG5vIGZpbGUpIChsaW5lIDApCisgICAgICAo
cHJvZ3JhbSkgKG5vIGZpbGUpIChsaW5lIDEpCisgICAgICAgICBldmFsIChubyBmaWxlKSAobGlu
ZSAwKQorICAgICAgICAgICAgc3RhcnRUZXN0IHNpbXBsZS1hbGxvY2F0aW9uLXRyYWNlLmh0bWwg
KGxpbmUgMTkpCisgICAgICAgICAgICAgICBUaHJlYWRfMSAobm8gZmlsZSkgKGxpbmUgMCkKKwor
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3Byb2ZpbGVyLW1lbW9yeS9zaW1wbGUtYWxsb2NhdGlv
bi10cmFjZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXItbWVt
b3J5L3NpbXBsZS1hbGxvY2F0aW9uLXRyYWNlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3Byb2ZpbGVyLW1lbW9yeS9zaW1wbGUtYWxsb2NhdGlvbi10cmFjZS5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lF
VEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9
Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vcHJvZmlsZXIvcmVzb3VyY2VzL3Byb2ZpbGVyLXRlc3QtSlMtcmVzb3VyY2VzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvbWVtb3J5LXByb2ZpbGVyLXRlc3QtanMtcmVz
b3VyY2VzLmpzIj48L3NjcmlwdD4KKworPHNjcmlwdD4KKyAgICB2YXIgcHJvZmlsZVRpdGxlID0g
IlNpbXBsZSBBbGxvY2F0aW9uIFRyYWNlIjsKKyAgICB2YXIgaW5TdGFydFRlc3Q7CisgICAgdmFy
IGluTmV4dEZ1bmN0aW9uOworICAgIHZhciBpbkV2YWw7ICAgICAgICAKKworICAgIGZ1bmN0aW9u
IG5leHRGdW5jdGlvbigpIHsKKyAgICAgICAgaW5OZXh0RnVuY3Rpb24gPSBuZXcgTnVtYmVyKCk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gc3RhcnRUZXN0KCkgeworICAgICAgICBjb25zb2xlLnBy
b2ZpbGUocHJvZmlsZVRpdGxlKTsKKyAgICAgICAgaW5TdGFydFRlc3QgPSBuZXcgQm9vbGVhbigp
OworICAgICAgICBldmFsKCJpbkV2YWwgPSBuZXcgT2JqZWN0KCk7Iik7CisgICAgICAgIG5leHRG
dW5jdGlvbigpOworICAgICAgICBjb25zb2xlLnByb2ZpbGVFbmQoKTsKKworICAgICAgICBwcmlu
dFByb2ZpbGUocHJvZmlsZVRpdGxlLCB0eXBlTmFtZUFzY2VuZGluZywgdHJ1ZSk7CisKKyAgICAg
ICAgZW5kTWVtb3J5VGVzdCgpOworICAgIH0KKzwvc2NyaXB0PgorCis8L2hlYWQ+Cis8Ym9keSBv
bmxvYWQ9ImluaXRpYWxpemUoKTsgc3RhcnRUZXN0KCk7Ij4KKyAgICA8cCBpZD0iZGVzY3JpcHRp
b24iPlRoaXMgdGVzdCB2ZXJpZmllcyBjb3JyZWN0IHN0b3Jpbmcgb2YgYWxsb2NhdGlvbiB0cmFj
ZXMgZm9yIG9iamVjdHM8cD4KKyAgICA8cD5UbyBydW4gdGhlIHRlc3QgbWFudWFsbHksIGVuYWJs
ZSBwcm9maWxpbmcgZnJvbSB0aGUgV2ViIEluc3BlY3RvciBhbmQgcmVmcmVzaCB0aGUgcGFnZS4K
KyAgICAgICAgWW91IHNob3VsZCBzZWUgdGhlIGZvbGxvd2luZyBvdXRwdXQ6PC9wPgorICAgIDxw
cmU+CitPYmplY3QgdHlwZTogQm9vbGVhbgorQ3JlYXRlZCBmcm9tOiAKKyAgIEJvb2xlYW4gKG5v
IGZpbGUpIChsaW5lIDApCisgICAgICBzdGFydFRlc3Qgc2ltcGxlLWFsbG9jYXRpb24tdHJhY2Uu
aHRtbCAobGluZSAxOSkKKyAgICAgICAgIFRocmVhZF8xIChubyBmaWxlKSAobGluZSAwKQorCitP
YmplY3QgdHlwZTogRnVuY3Rpb24KK0NyZWF0ZWQgZnJvbTogCisgICBzdGFydFRlc3Qgc2ltcGxl
LWFsbG9jYXRpb24tdHJhY2UuaHRtbCAobGluZSAxOSkKKyAgICAgIFRocmVhZF8xIChubyBmaWxl
KSAobGluZSAwKQorCitPYmplY3QgdHlwZTogTnVtYmVyCitDcmVhdGVkIGZyb206IAorICAgTnVt
YmVyIChubyBmaWxlKSAobGluZSAwKQorICAgICAgbmV4dEZ1bmN0aW9uIHNpbXBsZS1hbGxvY2F0
aW9uLXRyYWNlLmh0bWwgKGxpbmUgMTUpCisgICAgICAgICBzdGFydFRlc3Qgc2ltcGxlLWFsbG9j
YXRpb24tdHJhY2UuaHRtbCAobGluZSAxOSkKKyAgICAgICAgICAgIFRocmVhZF8xIChubyBmaWxl
KSAobGluZSAwKQorCitPYmplY3QgdHlwZTogT2JqZWN0CitDcmVhdGVkIGZyb206IAorICAgT2Jq
ZWN0IChubyBmaWxlKSAobGluZSAwKQorICAgICAgKHByb2dyYW0pIChubyBmaWxlKSAobGluZSAx
KQorICAgICAgICAgZXZhbCAobm8gZmlsZSkgKGxpbmUgMCkKKyAgICAgICAgICAgIHN0YXJ0VGVz
dCBzaW1wbGUtYWxsb2NhdGlvbi10cmFjZS5odG1sIChsaW5lIDE5KQorICAgICAgICAgICAgICAg
VGhyZWFkXzEgKG5vIGZpbGUpIChsaW5lIDApICAgIAorICAgIDwvcHJlPgorICAgIDxkaXYgaWQ9
ImNvbnNvbGUiPjxwIHN0eWxlPSJjb2xvcjpibHVlIj5PdXRwdXQgZm9sbG93czwvcD48L2Rpdj4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXItbWVtb3J5
L3Jlc291cmNlcy9URU1QTEFURS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
cHJvZmlsZXItbWVtb3J5L3Jlc291cmNlcy9URU1QTEFURS5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9wcm9maWxlci1tZW1vcnkvcmVzb3VyY2VzL1RFTVBMQVRFLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNy
Yz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9wcm9maWxlci9yZXNvdXJjZXMvcHJvZmlsZXItdGVzdC1KUy1yZXNvdXJjZXMuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9tZW1vcnktcHJvZmlsZXItdGVzdC1qcy1y
ZXNvdXJjZXMuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0PgorICAgIGZ1bmN0aW9uIHN0YXJ0VGVz
dCgpIHsKKyAgICAgICAgLy9URVNUIENPREUKKyAgICAgICAgZW5kTWVtb3J5VGVzdCgpOworICAg
IH0KKzwvc2NyaXB0PgorCis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImluaXRpYWxpemUoKTsgc3Rh
cnRUZXN0KCk7Ij4KKyAgICA8cCBpZD0iZGVzY3JpcHRpb24iPlRFU1QgREVTQ1JJUFRJT048cD4K
KyAgICA8cD5UbyBydW4gdGhlIHRlc3QgbWFudWFsbHksIGVuYWJsZSBwcm9maWxpbmcgZnJvbSB0
aGUgV2ViIEluc3BlY3RvciBhbmQgcmVmcmVzaCB0aGUgcGFnZS4KKyAgICAgICAgWW91IHNob3Vs
ZCBzZWUgdGhlIGZvbGxvd2luZyBvdXRwdXQ6PC9wPgorICAgIDxwcmU+CisgICAgICAgIDwhLS0g
WU9VUiBFWFBFQ1RFRCBPVVRQVVQtLT4KKyAgICA8L3ByZT4KKyAgICA8ZGl2IGlkPSJjb25zb2xl
Ij48cCBzdHlsZT0iY29sb3I6Ymx1ZSI+T3V0cHV0IGZvbGxvd3M8L3A+PC9kaXY+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3Byb2ZpbGVyLW1lbW9yeS9yZXNvdXJj
ZXMvbWVtb3J5LXByb2ZpbGVyLXRlc3QtanMtcmVzb3VyY2VzLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvcHJvZmlsZXItbWVtb3J5L3Jlc291cmNlcy9tZW1vcnktcHJvZmlsZXIt
dGVzdC1qcy1yZXNvdXJjZXMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3By
b2ZpbGVyLW1lbW9yeS9yZXNvdXJjZXMvbWVtb3J5LXByb2ZpbGVyLXRlc3QtanMtcmVzb3VyY2Vz
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0OCBAQAordmFyIG91dHB1dERpdjsKKworZnVu
Y3Rpb24gbG9nKG1lc3NhZ2UpIHsKKyAgICB2YXIgcHJlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInByZSIpOworICAgIHByZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUobWVzc2FnZSkpOworICAgIG91dHB1dERpdi5hcHBlbmRDaGlsZChwcmVFbGVt
ZW50KTsKK30KKworZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHsKKyAgICBvdXRwdXREaXYgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRKYXZhU2NyaXB0UHJvZmlsaW5nRW5h
YmxlZCh0cnVlKTsKKyAgICB9CisgICAgY29uc29sZS5zZXRNZW1vcnlQcm9maWxpbmdFbmFibGVk
KHRydWUpOworfQorCitmdW5jdGlvbiBlbmRNZW1vcnlUZXN0KCkgeworICAgIGNvbnNvbGUuc2V0
TWVtb3J5UHJvZmlsaW5nRW5hYmxlZChmYWxzZSk7CisgICAgCisgICAgaWYod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7Cit9CisKK2Z1bmN0aW9uIGdldEZpcnN0T2JqZWN0T2ZUeXBlKHByb2ZpbGVUaXRsZSwgdHlw
ZSkgeworICAgIHZhciBwcm9maWxlID0gZ2V0UHJvZmlsZUJ5VGl0bGUocHJvZmlsZVRpdGxlKTsK
KyAgICB2YXIgb2JqZWN0cyA9IHByb2ZpbGUubGl2ZU9iamVjdHM7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChvYmplY3RzW2ldLnR5
cGVOYW1lID09IHR5cGUpCisgICAgICAgICAgICByZXR1cm4gb2JqZWN0c1tpXTsKKyAgICB9Cit9
CisKK2Z1bmN0aW9uIGdldFByb2ZpbGVCeVRpdGxlKHRpdGxlKSB7CisgICAgdmFyIHByb2ZpbGVz
ID0gY29uc29sZS5wcm9maWxlczsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb2ZpbGVzLmxl
bmd0aDsgaSsrKQorICAgICAgICBpZiAocHJvZmlsZXNbaV0udGl0bGUgPT09IHRpdGxlKQorICAg
ICAgICAgICAgcmV0dXJuIHByb2ZpbGVzW2ldOworCisgICAgcmV0dXJuIG51bGw7Cit9CisKK2Z1
bmN0aW9uIHByaW50UHJvZmlsZShwcm9maWxlVGl0bGUsIHNvcnRGdW5jdGlvbiwgd2l0aEFsbG9j
YXRpb25UcmFjZSkgeworICAgIHZhciBwcm9maWxlID0gZ2V0UHJvZmlsZUJ5VGl0bGUocHJvZmls
ZVRpdGxlKTsKKyAgICBpZiAocHJvZmlsZSkgeworICAgICAgICBpZiAoIXNvcnRGdW5jdGlvbikg
c29ydEZ1bmN0aW9uID0gdHlwZU5hbWVBc2NlbmRpbmc7CisgICAgICAgIHZhciBsaXZlT2JqZWN0
cyA9IHNvcnRQcm9maWxlKHByb2ZpbGUsIHNvcnRGdW5jdGlvbik7CisgICAgICAgIHZhciBwcmVF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicHJlIik7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbGl2ZU9iamVjdHMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICBwcmludE9i
amVjdElkZW50aWZpZXIocHJlRWxlbWVudCwgbGl2ZU9iamVjdHNbaV0sIHdpdGhBbGxvY2F0aW9u
VHJhY2UpOworCisgICAgICAgIG91dHB1dERpdi5hcHBlbmRDaGlsZChwcmVFbGVtZW50KTsKKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIHByaW50T2JqZWN0SWRlbnRpZmllcihwcmVFbGVtZW50LCBvYmpl
Y3RJZGVudGlmaWVyLCB3aXRoQWxsb2NhdGlvblRyYWNlKSB7CisgICAgcHJlRWxlbWVudC5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiT2JqZWN0IHR5cGU6ICIgKyBvYmplY3RJ
ZGVudGlmaWVyLnR5cGVOYW1lICsgIlxuIikpOworCisgICAgaWYgKHdpdGhBbGxvY2F0aW9uVHJh
Y2UpIHsKKyAgICAgICAgcHJlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZSgiQ3JlYXRlZCBmcm9tOiAiICsgIlxuIikpOworICAgICAgICBwcmludFN0YWNrVHJhY2Uo
cHJlRWxlbWVudCwgb2JqZWN0SWRlbnRpZmllci5jcmVhdGVkRnJvbSwgMSk7CisgICAgICAgIHBy
ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlxuIikpOworICAg
IH0KK30KKworZnVuY3Rpb24gcHJpbnRTaW5nbGVPYmplY3RJZGVudGlmaWVyKG9iamVjdElkZW50
aWZpZXIsIHdpdGhBbGxvY2F0aW9uVHJhY2UpIHsKKyAgICBwcmVFbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgicHJlIik7CisgICAgcHJpbnRPYmplY3RJZGVudGlmaWVyKHByZUVsZW1l
bnQsIG9iamVjdElkZW50aWZpZXIsIHdpdGhBbGxvY2F0aW9uVHJhY2UpOworCisgICAgb3V0cHV0
RGl2LmFwcGVuZENoaWxkKHByZUVsZW1lbnQpOworfQorCitmdW5jdGlvbiBwcmludFN0YWNrVHJh
Y2UocHJlRWxlbWVudCwgbm9kZSwgaW5kZW50TGV2ZWwpCit7CisgICAgaWYgKCFub2RlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobm9kZS5mdW5jdGlvbk5hbWUgPT0gIihpZGxlKSIpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghbm9kZS52aXNpYmxlKQorICAgICAgICByZXR1cm47
CisKKyAgICB2YXIgc3BhY2UgPSAiIjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGVudExl
dmVsOyArK2kpCisgICAgICAgIHNwYWNlICs9ICIgICAiCisKKyAgICArK2luZGVudExldmVsOwor
CisgICAgdmFyIHN0cmlwcGVkVVJMID0gbm9kZS51cmwucmVwbGFjZSgvLipcLy8sICIiKTsKKyAg
ICBpZiAoIXN0cmlwcGVkVVJMKQorICAgICAgICBzdHJpcHBlZFVSTCA9ICIobm8gZmlsZSkiOwor
CisgICAgdmFyIGxpbmUgPSBzcGFjZSArIG5vZGUuZnVuY3Rpb25OYW1lICsgIiAiICsgc3RyaXBw
ZWRVUkwgKyAiIChsaW5lICIgKyBub2RlLmxpbmVOdW1iZXIgKyAiKVxuIjsKKyAgICBwcmVFbGVt
ZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxpbmUpKTsKKworICAgIHZh
ciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47CisgICAgcHJpbnRTdGFja1RyYWNlKHByZUVsZW1l
bnQsIG5vZGUucGFyZW50LCBpbmRlbnRMZXZlbCk7Cit9CisKK2Z1bmN0aW9uIHNvcnRQcm9maWxl
KHByb2ZpbGUsIHNvcnRGdW5jdGlvbikgeworICAgIHZhciBzb3J0ZWRBcnJheSA9IG5ldyBBcnJh
eSgpOworICAgIHZhciBsbyA9IHByb2ZpbGUubGl2ZU9iamVjdHM7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsby5sZW5ndGg7IGkrKykKKyAgICAgICAgc29ydGVkQXJyYXkucHVzaChsb1tpXSk7
CisKKyAgICBpZiAoc29ydEZ1bmN0aW9uKQorICAgICAgICBzb3J0ZWRBcnJheS5zb3J0KHNvcnRG
dW5jdGlvbik7CisgICAgCisgICAgcmV0dXJuIHNvcnRlZEFycmF5OworfQorCitmdW5jdGlvbiB0
eXBlTmFtZUFzY2VuZGluZyhhLCBiKSB7CisgICAgaWYgKGEudHlwZU5hbWUgPCBiLnR5cGVOYW1l
KQorICAgICAgICByZXR1cm4gLTE7CisgICAgZWxzZSBpZiAoYS50eXBlTmFtZSA+IGIudHlwZU5h
bWUpCisgICAgICAgIHJldHVybiAxOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisK
K2Z1bmN0aW9uIHR5cGVOYW1lRGVzY2VuZGluZyhhLCBiKSB7CisgICAgcmV0dXJuIC10eXBlTmFt
ZUFzY2VuZGluZyhhLCBiKTsKK30KKworZnVuY3Rpb24gY3JlYXRlT2JqZWN0cyhvYmplY3ROdW1i
ZXIsIGNvbnN0cnVjdG9yKSB7CisgICAgdmFyIG9iamVjdEFycmF5ID0gbmV3IEFycmF5KCk7Cisg
ICAgZm9yIChpID0gMDsgaSA8IG9iamVjdE51bWJlcjsgaSsrKQorICAgICAgICBvYmplY3RBcnJh
eS5wdXNoKG5ldyBjb25zdHJ1Y3RvcigpKTsKKworICAgIHJldHVybiBvYmplY3RBcnJheTsKK30K
KworZnVuY3Rpb24gY291bnRPYmplY3RJbnN0YW5jZXMocHJvZmlsZVRpdGxlKSB7CisgICAgdmFy
IGluc3RhbmNlQ291bnRzID0gbmV3IE9iamVjdCgpOworICAgIHZhciBwcm9maWxlID0gZ2V0UHJv
ZmlsZUJ5VGl0bGUocHJvZmlsZVRpdGxlKTsKKyAgICBpZiAocHJvZmlsZSkgeworICAgICAgICB2
YXIgbG8gPSBwcm9maWxlLmxpdmVPYmplY3RzOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGxvLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZihpbnN0YW5jZUNvdW50c1tsb1tpXS50
eXBlTmFtZV0pCisgICAgICAgICAgICAgICAgaW5zdGFuY2VDb3VudHNbbG9baV0udHlwZU5hbWVd
ICsrOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluc3RhbmNlQ291bnRzW2xv
W2ldLnR5cGVOYW1lXSA9IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaW5zdGFu
Y2VDb3VudHM7Cit9Cg==
</data>
<flag name="review"
          id="16385"
          type_id="1"
          status="-"
          setter="kmccullough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32237</attachid>
            <date>2009-07-03 07:09:40 -0700</date>
            <delta_ts>2016-02-29 15:26:37 -0800</delta_ts>
            <desc>adds live object profiling capabilities</desc>
            <filename>svnProfilerPatch05</filename>
            <type>text/plain</type>
            <size>94880</size>
            <attacher name="Horia Olaru">olaru</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1NTMzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODUgQEAKKzIwMDktMDctMDMgIEhvcmlhIE9s
YXJ1ICA8b2xhcnVAYWRvYmUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEJ1ZyAxMDkzMDogV2ViS2l0IGNvdWxkIGJlbmVmaXQgZnJvbSBhIEph
dmFTY3JpcHQgbGl2ZSBvYmplY3QgcHJvZmlsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTMwCisKKyAgICAgICAgQWRkZWQgaW5zdGFuY2VTaXpl
IG1ldGhvZCBvbiBKU0NlbGwgdG8gYmUgaW5oZXJpdGVkIGJ5IG90aGVyIEpTIG9iamVjdHMuCisg
ICAgICAgIEltcGxlbWVudGVkIGluc3RhbmNlU2l6ZSBmb3IgYSBmZXcgYmFzaWMgdHlwZXMuCisK
KyAgICAgICAgQWRkZWQgdGhlIExpdmVPYmplY3RzIGNsYXNzIHRvIGNvbnRhaW4gYSBtYXBwaW5n
IGJldHdlZW4gSlNDZWxscyBhbmQKKyAgICAgICAgUHJvZmlsZU5vZGVzLCB0byByZWNvcmQgc3Rh
Y2sgdHJhY2VzIGZvciBvYmplY3QgY3JlYXRpb24uIFRoZSBtZXRob2RzCisgICAgICAgIGluIHRo
aXMgY2xhc3MgaGF2ZSBiZWVuIGV4cG9zZWQgdXAgdG8gdGhlIFByb2ZpbGVyIGNsYXNzLiBUaGVz
ZSBtZXRob2RzCisgICAgICAgIGFyZSBjYWxsZWQgYXQgY2VsbCBhbGxvY2F0aW9uIGFuZCBjb2xs
ZWN0aW9uIHRpbWUsIHRvIHJlY29yZCB0aGUgSlMKKyAgICAgICAgZnVuY3Rpb24gdGhhdCBjcmVh
dGVkIHRoZSBvYmplY3QuCisKKyAgICAgICAgQWRkZWQgdGhlIE9iamVjdElkZW50aWZpZXIgc3Ry
dWN0dXJlLCB1c2VkIHRvIHJlcHJlc2VudCBsaXZlIG9iamVjdHMKKyAgICAgICAgYW5kIGFnZ3Jl
Z2F0ZSByZWxldmFudCBkYXRhIGZvciB0aGVtLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
ZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogcHJvZmlsZXIvTGl2ZU9iamVjdHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6TGl2ZU9iamVjdHM6OkxpdmVPYmplY3RzKToKKyAgICAgICAgKEpTQzo6TGl2ZU9iamVjdHM6
On5MaXZlT2JqZWN0cyk6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjphZGROb2RlKToKKyAg
ICAgICAgKEpTQzo6TGl2ZU9iamVjdHM6OnJlbW92ZU5vZGUpOgorICAgICAgICAoSlNDOjpMaXZl
T2JqZWN0czo6aXNGcmVlKToKKyAgICAgICAgKEpTQzo6TGl2ZU9iamVjdHM6OmZpbmFsaXplQ29s
bGVjdGVkRGF0YSk6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RzOjp0b1ZlY3Rvcik6CisgICAg
ICAgICogcHJvZmlsZXIvTGl2ZU9iamVjdHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkxpdmVP
YmplY3RzOjppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6TGl2ZU9iamVjdHM6OmNhY2hlZE9iamVj
dHMpOgorICAgICAgICAqIHByb2ZpbGVyL09iamVjdElkZW50aWZpZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6T2JqZWN0SWRlbnRpZmllcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6T2Jq
ZWN0SWRlbnRpZmllcjo6T2JqZWN0SWRlbnRpZmllcik6CisgICAgICAgICogcHJvZmlsZXIvT2Jq
ZWN0SWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6T2JqZWN0SWRlbnRpZmllcjo6
dWlkKToKKyAgICAgICAgKEpTQzo6T2JqZWN0SWRlbnRpZmllcjo6dHlwZSk6CisgICAgICAgIChK
U0M6Ok9iamVjdElkZW50aWZpZXI6OnNpemUpOgorICAgICAgICAoSlNDOjpPYmplY3RJZGVudGlm
aWVyOjpjcmVhdGluZ0Z1bmN0aW9uKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlLmNwcDoK
KyAgICAgICAgKEpTQzo6UHJvZmlsZTo6UHJvZmlsZSk6CisgICAgICAgIChKU0M6OlByb2ZpbGU6
OmxpdmVPYmplY3RzKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZTo6b2JqZWN0Q3JlYXRlZCk6Cisg
ICAgICAgIChKU0M6OlByb2ZpbGU6Om9iamVjdENvbGxlY3RlZCk6CisgICAgICAgICogcHJvZmls
ZXIvUHJvZmlsZS5oOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpQcm9maWxlR2VuZXJhdG9yOjpvYmplY3RDcmVhdGVkKToKKyAgICAgICAg
KEpTQzo6UHJvZmlsZUdlbmVyYXRvcjo6b2JqZWN0Q29sbGVjdGVkKToKKyAgICAgICAgKEpTQzo6
UHJvZmlsZUdlbmVyYXRvcjo6c3RvcFByb2ZpbGluZyk6CisgICAgICAgICogcHJvZmlsZXIvUHJv
ZmlsZUdlbmVyYXRvci5oOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6UHJvZmlsZXI6OlByb2ZpbGVyKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OnBy
b2ZpbGVyKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6On5Qcm9maWxlcik6CisgICAgICAgIChK
U0M6OlByb2ZpbGVyOjpzdGFydFByb2ZpbGluZyk6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpz
dG9wUHJvZmlsaW5nKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6Om9iamVjdENyZWF0ZWQpOgor
ICAgICAgICAoSlNDOjpQcm9maWxlcjo6b2JqZWN0Q29sbGVjdGVkKToKKyAgICAgICAgKiBwcm9m
aWxlci9Qcm9maWxlci5oOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6c2V0SXNNZW1vcnlQcm9m
aWxpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvQ29sbGVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
SGVhcDo6c3dlZXApOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6Omluc3RhbmNlU2l6ZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6
CisgICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpKU0NlbGw6Om9w
ZXJhdG9yIG5ldyk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6aW5zdGFuY2VTaXplKToKKyAgICAg
ICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnNldERvQ29sbGVj
dEFsbG9jYXRpb25UcmFjZXMpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmRvQ29sbGVjdEFsbG9j
YXRpb25UcmFjZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6aW5zdGFuY2VTaXplKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTU3Ry
aW5nOjppbnN0YW5jZVNpemUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTV3JhcHBl
ck9iamVjdDo6aW5zdGFuY2VTaXplKToKKyAgICAgICAgKiBydW50aW1lL0pTV3JhcHBlck9iamVj
dC5oOgorCiAyMDA5LTA2LTMwICBLd2FuZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwCShyZXZpc2lvbiA0NTUzMykKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDExICszMjYsMTIgQEAgX19aTjNXVEY4
Q29sbGF0b3JEMUV2CiBfX1pOM1dURjhmYXN0RnJlZUVQdgogX19aTjNXVEY5Qnl0ZUFycmF5NmNy
ZWF0ZUVtCiBfX1pOSzNKU0MxMUludGVycHJldGVyMTRyZXRyaWV2ZUNhbGxlckVQTlNfOUV4ZWNT
dGF0ZUVQTlNfMTZJbnRlcm5hbEZ1bmN0aW9uRQotX19aTkszSlNDMTFJbnRlcnByZXRlcjE4cmV0
cmlldmVMYXN0Q2FsbGVyRVBOU185RXhlY1N0YXRlRVJpUmxSTlNfN1VTdHJpbmdFUk5TXzdKU1Zh
bHVlRSAgCitfX1pOSzNKU0MxMUludGVycHJldGVyMThyZXRyaWV2ZUxhc3RDYWxsZXJFUE5TXzlF
eGVjU3RhdGVFUmlSbFJOU183VVN0cmluZ0VSTlNfN0pTVmFsdWVFCiBfX1pOSzNKU0MxMkRhdGVJ
bnN0YW5jZTdnZXRUaW1lRVJkUmkKIF9fWk5LM0pTQzEyU3RyaW5nT2JqZWN0MTJ0b1RoaXNTdHJp
bmdFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0MxMlN0cmluZ09iamVjdDh0b1N0cmluZ0VQTlNf
OUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzE0SlNHbG9iYWxPYmplY3QxNGlzRHluYW1pY1Njb3BlRXYK
K19fWk5LM0pTQzE1SlNXcmFwcGVyT2JqZWN0MTJpbnN0YW5jZVNpemVFdgogX19aTkszSlNDMTZG
dW5jdGlvbkJvZHlOb2RlMTRpc0hvc3RGdW5jdGlvbkV2CiBfX1pOSzNKU0MxNkludGVybmFsRnVu
Y3Rpb245Y2xhc3NJbmZvRXYKIF9fWk5LM0pTQzE2SlNWYXJpYWJsZU9iamVjdDE2aXNWYXJpYWJs
ZU9iamVjdEV2CkBAIC0zNDEsNiArMzQyLDcgQEAgX19aTkszSlNDMTdEZWJ1Z2dlckNhbGxGcmFt
ZTIyY2FsY3VsYXRlZAogX19aTkszSlNDMTdEZWJ1Z2dlckNhbGxGcmFtZTR0eXBlRXYKIF9fWk5L
M0pTQzE3RGVidWdnZXJDYWxsRnJhbWU4ZXZhbHVhdGVFUktOU183VVN0cmluZ0VSTlNfN0pTVmFs
dWVFCiBfX1pOSzNKU0M0SGVhcDEwc3RhdGlzdGljc0V2CitfX1pOSzNKU0M2SlNDZWxsMTJpbnN0
YW5jZVNpemVFdgogX19aTkszSlNDNkpTQ2VsbDEydG9UaGlzT2JqZWN0RVBOU185RXhlY1N0YXRl
RQogX19aTkszSlNDNkpTQ2VsbDEydG9UaGlzU3RyaW5nRVBOU185RXhlY1N0YXRlRQogX19aTksz
SlNDNkpTQ2VsbDE0aXNHZXR0ZXJTZXR0ZXJFdgpAQCAtMzUyLDYgKzM1NCw3IEBAIF9fWk5LM0pT
QzZKU0NlbGw5Z2V0U3RyaW5nRXYKIF9fWk5LM0pTQzZKU0NlbGw5Z2V0VUludDMyRVJqCiBfX1pO
SzNKU0M3QXJnTGlzdDhnZXRTbGljZUVpUlMwXwogX19aTkszSlNDN0pTVmFsdWU5dG9JbnRlZ2Vy
RVBOU185RXhlY1N0YXRlRQorX19aTkszSlNDN1Byb2ZpbGUxMWxpdmVPYmplY3RzRXYKIF9fWk5L
M0pTQzdVU3RyaW5nMTBVVEY4U3RyaW5nRWIKIF9fWk5LM0pTQzdVU3RyaW5nMTR0b1N0cmljdFVJ
bnQzMkVQYgogX19aTkszSlNDN1VTdHJpbmc1YXNjaWlFdgpAQCAtMzYyLDYgKzM2NSw3IEBAIF9f
Wk5LM0pTQzdVU3RyaW5nOHRvVUludDMyRVBiYgogX19aTkszSlNDOEpTT2JqZWN0MTFoYXNQcm9w
ZXJ0eUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckUKIF9fWk5LM0pTQzhKU09iamVj
dDExaGFzUHJvcGVydHlFUE5TXzlFeGVjU3RhdGVFagogX19aTkszSlNDOEpTT2JqZWN0MTJkZWZh
dWx0VmFsdWVFUE5TXzlFeGVjU3RhdGVFTlNfMjJQcmVmZXJyZWRQcmltaXRpdmVUeXBlRQorX19a
TkszSlNDOEpTT2JqZWN0MTJpbnN0YW5jZVNpemVFdgogX19aTkszSlNDOEpTT2JqZWN0MTJ0b1Ro
aXNPYmplY3RFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M4SlNPYmplY3QyMWdldFByb3BlcnR5
QXR0cmlidXRlc0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVSagogX19aTkszSlND
OEpTT2JqZWN0OHRvTnVtYmVyRVBOU185RXhlY1N0YXRlRQpJbmRleDogSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiA0NTUzMykKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw2ICszNjksMTAgQEAKIAkJ
QkNGRDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MDBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmNwcCAqLzsgfTsKIAkJQkNGRDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1
bXBUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNGRDhDOTEwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oICovOyB9OwogCQlDMEEyNzI2
MzBFNTBBMDYzMDBFOTZFMTUgLyogTm90Rm91bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwQTI3MjNGMEU1MDlGMUUwMEU5NkUxNSAvKiBOb3RGb3Vu
ZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUNC
MTFGRkY3MEY5NDgzOTkwMEU1ODM3OSAvKiBPYmplY3RJZGVudGlmaWVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDQjExRkZGNjBGOTQ4MzcxMDBFNTgz
NzkgLyogT2JqZWN0SWRlbnRpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUNCMkI4MTMzMEZFRkVDMDYwMDJCRUQxNiAvKiBPYmplY3RJZGVu
dGlmaWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENCMkI4MTMyMEZFRkVDMDYwMDJCRUQxNiAvKiBPYmplY3RJZGVudGlmaWVyLmNwcCAqLzsgfTsK
KwkJQ0JCMTE3MUIwRjY3MkU4OTAwNzQ0NDIyIC8qIExpdmVPYmplY3RzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENCQjExNDkzMEY2NzExMDQwMDc0
NDQyMiAvKiBMaXZlT2JqZWN0cy5jcHAgKi87IH07CisJCUNCQjExNzFDMEY2NzJFODkwMDc0NDQy
MiAvKiBMaXZlT2JqZWN0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0JCMTEzRUIwRjY2RDRCODAwNzQ0NDIyIC8qIExpdmVPYmplY3RzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTEyNEE4RjcwRTU1
NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVl
SlNTdHJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFMTI0QThGODBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjYwRTU1NTc3
NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCAqLzsgfTsKIAkJRTE3ODYzNkQwRDlCRUVD
MzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE3ODYzNkMwRDlCRUVDMzAwRDc0RTc1IC8qIElu
aXRpYWxpemVUaHJlYWRpbmcuY3BwICovOyB9OwpAQCAtODM3LDYgKzg0MSwxMCBAQAogCQlCQ0ZE
OEM5MDBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEp1bXBUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDRkQ4QzkxMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSnVtcFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMwQTI3MjNGMEU1MDlGMUUwMEU5NkUxNSAvKiBOb3RGb3VuZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb3RGb3VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDQjExRkZGNjBGOTQ4MzcxMDBFNTgzNzkgLyogT2JqZWN0SWRlbnRpZmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBPYmplY3RJZGVudGlmaWVyLmg7IHBh
dGggPSBwcm9maWxlci9PYmplY3RJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUNCMkI4MTMyMEZFRkVDMDYwMDJCRUQxNiAvKiBPYmplY3RJZGVudGlmaWVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE9iamVjdElkZW50aWZpZXIuY3Bw
OyBwYXRoID0gcHJvZmlsZXIvT2JqZWN0SWRlbnRpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNCQjExM0VCMEY2NkQ0QjgwMDc0NDQyMiAvKiBMaXZlT2JqZWN0cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMaXZlT2JqZWN0cy5oOyBwYXRoID0gcHJv
ZmlsZXIvTGl2ZU9iamVjdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0JCMTE0
OTMwRjY3MTEwNDAwNzQ0NDIyIC8qIExpdmVPYmplY3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IExpdmVPYmplY3RzLmNwcDsgcGF0aCA9IHByb2ZpbGVyL0xpdmVP
YmplY3RzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjgwQUQ0MzEw
QzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZUNvbnZlcnNpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTExRDUxNzUwQjJFNzk4RDAwNTZDMTg4IC8qIFN0cmluZ0V4
dHJhcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdFeHRyYXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1MjksNiArMTUzNyw4IEBACiAJCQkJOTVF
M0JDMDQwRTFBRTY4MjAwQjJEMUMxIC8qIENhbGxJZGVudGlmaWVyLmggKi8sCiAJCQkJOTU3NDJG
NjMwREQxMUY1QTAwMDkxN0ZCIC8qIFByb2ZpbGUuY3BwICovLAogCQkJCTk1NzQyRjY0MEREMTFG
NUEwMDA5MTdGQiAvKiBQcm9maWxlLmggKi8sCisJCQkJQ0JCMTE0OTMwRjY3MTEwNDAwNzQ0NDIy
IC8qIExpdmVPYmplY3RzLmNwcCAqLywKKwkJCQlDQkIxMTNFQjBGNjZENEI4MDA3NDQ0MjIgLyog
TGl2ZU9iamVjdHMuaCAqLywKIAkJCQk5NUNENDU3NDBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmls
ZUdlbmVyYXRvci5jcHAgKi8sCiAJCQkJOTVDRDQ1NzUwRTFDNEZERDAwODUzNThFIC8qIFByb2Zp
bGVHZW5lcmF0b3IuaCAqLywKIAkJCQk5NUFCODM1NDBEQTQzQjQ0MDBCQzgzRjMgLyogUHJvZmls
ZU5vZGUuY3BwICovLApAQCAtMTUzNyw2ICsxNTQ3LDggQEAKIAkJCQk5NUFCODMyRjBEQTQyQ0FE
MDBCQzgzRjMgLyogUHJvZmlsZXIuaCAqLywKIAkJCQkxQzYxNTE2QjBFQkFDN0EwMDAzMTM3NkYg
LyogUHJvZmlsZXJTZXJ2ZXIuaCAqLywKIAkJCQkxQzYxNTE2QTBFQkFDN0EwMDAzMTM3NkYgLyog
UHJvZmlsZXJTZXJ2ZXIubW0gKi8sCisJCQkJQ0IxMUZGRjYwRjk0ODM3MTAwRTU4Mzc5IC8qIE9i
amVjdElkZW50aWZpZXIuaCAqLywKKwkJCQlDQjJCODEzMjBGRUZFQzA2MDAyQkVEMTYgLyogT2Jq
ZWN0SWRlbnRpZmllci5jcHAgKi8sCiAJCQkpOwogCQkJbmFtZSA9IHByb2ZpbGVyOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE2MjAsNiArMTYzMiw3IEBACiAJCQlpc2EgPSBQQlhI
ZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlm
aWxlcyA9ICgKKwkJCQlDQkIxMTcxQzBGNjcyRTg5MDA3NDQ0MjIgLyogTGl2ZU9iamVjdHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTE0QzUyNDJCMEY1MzU1RTkwMEJBM0QwNCAvKiBKSVRTdHVicy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTUwRTE2RjVDRDAwQjM0NDYwIC8qIEFQSUNhc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBU0NJSUNU
eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTE4NTIsNiArMTg2NSw3IEBACiAJCQkJODZFQUM0OUIw
RjkzRThEMTAwOEVDOTQ4IC8qIFJlZ2V4UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVB
QzQ5QzBGOTNFOEQxMDA4RUM5NDggLyogUmVnZXhQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NkRENzM3OTBGOURBMzEwMDAyN0ZCQ0MgLyogVk1UYWdzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlDQjExRkZGNzBGOTQ4Mzk5MDBFNTgzNzkgLyogT2JqZWN0SWRlbnRpZmllci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc2RUU2NTkwRkFFNTlENTAwM0YwNjlBIC8qIE5hdGl2ZUZ1bmN0aW9uV3Jh
cHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFMkVBNkIwRkI0NjBDRjAwNjAxRjA2IC8qIExp
dGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMDUyQzM1MEZCNzkyMTkwMDQ4RkRD
MyAvKiBQYXJzZXJBcmVuYS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjIxLDEwICsyMjM1LDEyIEBA
CiAJCQkJODZFQUM0OTcwRjkzRThEMTAwOEVDOTQ4IC8qIFJlZ2V4SW50ZXJwcmV0ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZFQUM0OTkwRjkzRThEMTAwOEVDOTQ4IC8qIFJlZ2V4SklULmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2REI2NDY0MEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRh
YmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0JCMTE3MUIw
RjY3MkU4OTAwNzQ0NDIyIC8qIExpdmVPYmplY3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3
RTJFQTZDMEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzMDUyQzM0MEZCNzkyMTkwMDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQ0RENTFFQjBGQjhERjc0MDA0QThCREMgLyogSklUT3Bjb2Rlcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBN0Y5OTM2MDBGRDczMjUxMDBBMEIyRDAgLyogSlNPTk9iamVj
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDQjJCODEzMzBGRUZFQzA2MDAyQkVEMTYgLyogT2Jq
ZWN0SWRlbnRpZmllci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL0xpdmVPYmplY3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9m
aWxlci9MaXZlT2JqZWN0cy5jcHAJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9m
aWxlci9MaXZlT2JqZWN0cy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9yaWEgT2xhcnUgPG9sYXJ1QGFkb2JlLmNvbT4uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxpdmVPYmplY3Rz
LmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVk
ZSAiUHJvZmlsZU5vZGUuaCIKKyNpbmNsdWRlICJVU3RyaW5nLmgiCisjaW5jbHVkZSAiT2JqZWN0
SWRlbnRpZmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworTGl2ZU9iamVjdHM6OkxpdmVPYmpl
Y3RzKCkKKyAgICA6IG1fc3RvcmVDb2xsZWN0ZWRPYmplY3RzKGZhbHNlKQoreworfQorCitMaXZl
T2JqZWN0czo6fkxpdmVPYmplY3RzKCkKK3sKK30KKworLy9yZXR1cm5zIHRydWUgaWYgbmV3IHZh
bHVlIHdhcyBhZGRlZCAobm90IGV4aXN0aW5nKQorYm9vbCBMaXZlT2JqZWN0czo6YWRkTm9kZShj
b25zdCBKU0NlbGwqIGNlbGwsIFBhc3NSZWZQdHI8UHJvZmlsZU5vZGU+IHN0YWNrTm9kZSkKK3sK
KyAgICBBU1NFUlQoY2VsbCk7CisgICAgcmV0dXJuIChtX3N0YWNrTWFwLmFkZChjZWxsLCBzdGFj
a05vZGUpKS5zZWNvbmQ7Cit9CisKK3ZvaWQgTGl2ZU9iamVjdHM6OnJlbW92ZU5vZGUoY29uc3Qg
SlNDZWxsKiBjZWxsKQoreworICAgIEFTU0VSVChjZWxsKTsKKyAgICBpZiAoIW1fc3RvcmVDb2xs
ZWN0ZWRPYmplY3RzKQorICAgICAgICBtX3N0YWNrTWFwLnJlbW92ZShjZWxsKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgUmVmUHRyPFByb2ZpbGVOb2RlPiBub2RlID0gbV9zdGFja01hcC50YWtlKGNl
bGwpOworICAgICAgICBpZiAobm9kZSAmJiAhaXNGcmVlKGNlbGwpKQorICAgICAgICAgICAgbV9j
YWNoZWRPYmplY3RzLmFwcGVuZChPYmplY3RJZGVudGlmaWVyOjpjcmVhdGUobV9jYWNoZWRPYmpl
Y3RzLnNpemUoKSwgY2VsbCwgbm9kZSkpOworICAgIH0KK30KKworYm9vbCBMaXZlT2JqZWN0czo6
aXNGcmVlKGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBjb25zdCBDb2xsZWN0b3JDZWxsKiBj
b2xsZWN0b3JDZWxsID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb2xsZWN0b3JDZWxsKj4oY2Vs
bCk7CisgICAgcmV0dXJuICEoY29sbGVjdG9yQ2VsbC0+dS5mcmVlQ2VsbC56ZXJvSWZGcmVlKTsK
K30KKworLy8gVGhpcyBtZXRob2QgaXMgbWVhbnQgdG8gYmUgY2FsbGVkIGZyb20gdGhlIHN0b3BQ
cm9maWxpbmcgbWV0aG9kIG9mIFByb2ZpbGVHZW5lcmF0b3IKKy8vIEFmdGVyIHByb2ZpbGluZyBz
dG9wcywgbGl2ZSBvYmplY3RzIGFyZSBsaWtlbHkgdG8gYmUgY29sbGVjdGVkLCBzbyB3ZSBzdG9y
ZSB0aGUKKy8vIGluZm9ybWF0aW9uIHdlIGhhdmUgbm93Lgordm9pZCBMaXZlT2JqZWN0czo6Zmlu
YWxpemVDb2xsZWN0ZWREYXRhKCkKK3sKKyAgICB0b1ZlY3RvcihtX2NhY2hlZE9iamVjdHMpOwor
CisgICAgLy8gV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIHN0YWNrIG1hcCBhZnRlciB0aGlzCisgICAg
bV9zdGFja01hcC5jbGVhcigpOworfQorCit2b2lkIExpdmVPYmplY3RzOjp0b1ZlY3RvcihMaXZl
T2JqZWN0czo6T2JqZWN0VmVjdG9yJiB2ZWN0b3IpIGNvbnN0Cit7CisgICAgZm9yIChNZW1vcnlN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGFja01hcC5iZWdpbigpOyBpdCAhPSBtX3N0YWNr
TWFwLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmICghaXNGcmVlKGl0LT5maXJzdCkpCisgICAg
ICAgICAgICB2ZWN0b3IuYXBwZW5kKE9iamVjdElkZW50aWZpZXI6OmNyZWF0ZSh2ZWN0b3Iuc2l6
ZSgpLCBpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpKTsKKyAgICAgICAgLy8gVGhlIGVsc2UgYnJhbmNo
IGhlcmUgY291bGQgY2xlYW4gdXAgdGhlIGVtcHR5IGNlbGxzLiBIb3dldmVyLCByZW1vdmluZwor
ICAgICAgICAvLyBpdGVtcyBmcm9tIHRoZSBIYXNoTWFwIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGl0
IGlzIG5vdCBwb3NzaWJsZS4KKyAgICAgICAgLy8gQ29sbGVjdGVkIGNlbGxzIGJlY29tZSBlbXB0
eSwgYnV0IHJlbW92ZU5vZGUgaXMgY2FsbGVkIHdoZW4gYSBjZWxsIGlzCisgICAgICAgIC8vIGNv
bGxlY3RlZCwgc28gdGhlIGVtcHR5IGNlbGxzIGluc2lkZSB0aGUgbWFwIGFyZSBjb3JuZXIgY2Fz
c2VzLgorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9MaXZlT2JqZWN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL0xpdmVPYmplY3RzLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9m
aWxlci9MaXZlT2JqZWN0cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEhvcmlhIE9sYXJ1IDxvbGFydUBhZG9iZS5jb20+LiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgTGl2ZU9iamVjdHNfaAorI2RlZmluZSBMaXZlT2JqZWN0c19o
CisKKy8vIFRoZSBMaXZlIG9iamVjdHMgY2xhc3MgcHJvdmlkZXMgYSB3YXkgdG8gc3RvcmUgdGhl
IGxvY2F0aW9uIHdoZXJlCisvLyBKYXZhU2NyaXB0IG9iamVjdHMgYXJlIGNyZWF0ZWQuIEl0IGRl
ZmluZXMgYSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIGEKKy8vIEpTQ2VsbCwgd2hpY2ggaG9sZHMg
YSBqYXZhc2NyaXB0IG9iamVjdCwgYW5kIGEgUHJvZmlsZU5vZGUsIHdoaWNoCisvLyByZXByZXNl
bnRzIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi4gU3RhcnRpbmcgZnJvbSB0aGUgUHJvZmlsZU5vZGUs
IHRoZQorLy8gY2FsbCBzdGFjayBmb3IgdGhlIGNyZWF0aW9uIG9mIGFuIG9iamVjdCBjYW4gYmUg
ZXh0cmFjdGVkLgorLy8KKy8vIFRoZSBjb3JyZXNwb25kZW5jZSBpcyBzdG9yZWQgaW50ZXJuYWxs
eSBhcyBhIGhhc2ggbWFwIG9mIGtleSBKU0NlbGwqCisvLyBhbmQgdmFsdWUgUHJvZmlsZU5vZGUq
LgorLy8KKy8vIGFkZE5vZGUgLSB0aGUgZnVuY3Rpb24gYWRkcyBzdWNoIGEgcGFpciB0byB0aGUg
aGFzaCBtYXAuIFRoaXMgZnVuY3Rpb24gaXMKKy8vIG1lYW50IHRvIGJlIGNhbGxlZCB3aGVuIGFu
IG9iamVjdCBpcyBjcmVhdGVkLgorLy8KKy8vIHJlbW92ZU5vZGUgLSB0aGUgZnVuY3Rpb24gcmVt
b3ZlcyBhIGNlbGwgZnJvbSB0aGUgbWFwLiBJdCBpcyBtZWFudCB0byBiZQorLy8gY2FsbGVkIHdo
ZW4gYSBqYXZhc2NyaXB0IG9iamVjdCBpcyBjb2xsZWN0ZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVj
dG9yLgorLy8KKy8vIHRvVmVjdG9yIC0gYSBtZXRob2QgdG8gZXhwb3J0IHRoZSBkYXRhIGhlbGQg
YnkgdGhlIExpdmVPYmplY3RzIGluc3RhbmNlCisvLyBhdCBhbiBvdXRzaWRlIHJlcXVlc3QuCisv
LworLy8gbV9zdGFja01hcCAtIFRoaXMgbWFwIGhvbGRzIHBhaXJzIG9mIEpTQ2VsbHMgYW5kIHRo
ZSBmdW5jdGlvbnMgaW4gd2hpY2gKKy8vIHRoZXkgd2VyZSBjcmVhdGVkLCB3aGljaCBhcmUgcmVw
cmVzZW50ZWQgYnkgcHJvZmlsZSBub2Rlcy4gSXQgaXMgaW4KKy8vIGluIGZhY3QgYSBtYXAgYmV0
d2VlbiBhIEpTIG9iamVjdCBhbmQgdGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBmdW5jdGlvbgorLy8g
dGhhdCBjcmVhdGVkIGl0LgorCisjaW5jbHVkZSAiUHJvZmlsZU5vZGUuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCisgICAgY2xhc3MgSlNDZWxsOworICAgIGNsYXNzIE9iamVjdElkZW50aWZpZXI7CisKKyAg
ICBjbGFzcyBMaXZlT2JqZWN0cyB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBQcm9maWxlR2VuZXJh
dG9yOworICAgIHB1YmxpYzoKKyAgICAgICAgTGl2ZU9iamVjdHMoKTsKKworICAgICAgICB2aXJ0
dWFsIH5MaXZlT2JqZWN0cygpOworCisgICAgICAgIGJvb2wgYWRkTm9kZShjb25zdCBKU0NlbGwq
IGNlbGwsIFBhc3NSZWZQdHI8UHJvZmlsZU5vZGU+IHN0YWNrTm9kZSk7CisgICAgICAgIHZvaWQg
cmVtb3ZlTm9kZShjb25zdCBKU0NlbGwqIGNlbGwpOworCisgICAgICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tNYXAuaXNFbXB0eSgpOyB9CisKKyAgICAgICAgdHlwZWRl
ZiBWZWN0b3I8UmVmUHRyPE9iamVjdElkZW50aWZpZXI+ID4gT2JqZWN0VmVjdG9yOworICAgICAg
ICBjb25zdCBPYmplY3RWZWN0b3ImIGNhY2hlZE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX2Nh
Y2hlZE9iamVjdHM7IH0KKworICAgIHByaXZhdGU6CisgICAgCisgICAgICAgIHR5cGVkZWYgSGFz
aE1hcDxjb25zdCBKU0NlbGwqLCBSZWZQdHI8UHJvZmlsZU5vZGU+ID4gTWVtb3J5TWFwOworICAg
IAorICAgICAgICBzdGF0aWMgYm9vbCBpc0ZyZWUoY29uc3QgSlNDZWxsKiBjZWxsKTsKKyAgICAg
ICAgCisgICAgICAgIHZvaWQgdG9WZWN0b3IoT2JqZWN0VmVjdG9yJikgY29uc3Q7CisgICAgICAg
IHZvaWQgZmluYWxpemVDb2xsZWN0ZWREYXRhKCk7CisKKyAgICAgICAgTWVtb3J5TWFwIG1fc3Rh
Y2tNYXA7CisgICAgICAgIE9iamVjdFZlY3RvciBtX2NhY2hlZE9iamVjdHM7CisgICAgICAgIGJv
b2wgbV9zdG9yZUNvbGxlY3RlZE9iamVjdHM7CisgICAgfTsKKyAgICAKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gTGl2ZU9iamVjdHNfaApJbmRleDogSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvT2JqZWN0SWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvT2JqZWN0SWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9PYmplY3RJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBIb3JpYSBPbGFydSA8b2xhcnVAYWRv
YmUuY29tPi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiT2JqZWN0SWRlbnRpZmllci5oIgorCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAi
UHJvZmlsZU5vZGUuaCIKKyNpbmNsdWRlICJDbGFzc0luZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK1Bhc3NSZWZQdHI8T2JqZWN0SWRlbnRpZmllcj4gT2JqZWN0SWRlbnRpZmllcjo6Y3JlYXRl
KHVuc2lnbmVkIHVpZCwgY29uc3QgSlNDZWxsKiBjZWxsLCBQYXNzUmVmUHRyPFByb2ZpbGVOb2Rl
PiBhbGxvY2F0aW5nRnVuY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RJ
ZGVudGlmaWVyKHVpZCwgY2VsbCwgYWxsb2NhdGluZ0Z1bmN0aW9uKSk7Cit9CisKK09iamVjdElk
ZW50aWZpZXI6Ok9iamVjdElkZW50aWZpZXIodW5zaWduZWQgdWlkLCBjb25zdCBKU0NlbGwqIGNl
bGwsIFBhc3NSZWZQdHI8UHJvZmlsZU5vZGU+IGFsbG9jYXRpbmdGdW5jdGlvbikKKyAgICA6IG1f
dWlkKHVpZCkKKyAgICAsIG1fc2l6ZShjZWxsLT5pbnN0YW5jZVNpemUoKSkKKyAgICAsIG1fY3Jl
YXRpbmdGdW5jdGlvbihhbGxvY2F0aW5nRnVuY3Rpb24pCit7CisgICAgY29uc3QgQ2xhc3NJbmZv
KiBpbmZvID0gY2VsbC0+Y2xhc3NJbmZvKCk7CisgICAgbV90eXBlID0gaW5mbyA/IGluZm8tPmNs
YXNzTmFtZSA6ICJPYmplY3QiOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9wcm9maWxlci9PYmplY3RJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvT2JqZWN0SWRlbnRpZmllci5oCShyZXZpc2lvbiAwKQor
KysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvT2JqZWN0SWRlbnRpZmllci5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhvcmlhIE9sYXJ1
IDxvbGFydUBhZG9iZS5jb20+LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgT2JqZWN0SWRl
bnRpZmllcl9oCisjZGVmaW5lIE9iamVjdElkZW50aWZpZXJfaAorCisvLyBUaGUgT2JqZWN0SWRl
bnRpZmllciBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIHNpbmdsZSBKYXZhU2NyaXB0IG9iamVjdAor
Ly8gZnJvbSBhIG1lbW9yeSBwcm9maWxpbmcgcG9pbmcgb2Ygdmlldy4gSXQgaXMgbWVhbnQgYXMg
YSBzaW1wbGUgaW50ZXJmYWNlCisvLyB0byB0cmFuc21pdCBkYXRhIGFjcm9zcyBsYXllcnMuCisv
LworLy8gbV9pZCAtIGEgdW5pcXVlIGlkZW50aWZpY2F0aW9uIG51bWJlciBmb3IgdGhlIG9iamVj
dC4gVGhpcyB3aWxsIG1vc3QgbGlrZWx5CisvLyBiZSBpbml0aWFsaXplZCB3aXRoIHRoZSBhZGRy
ZXNzIG9mIHRoZSBob2xkaW5nIEpTQ2VsbAorLy8KKy8vIG1fdHlwZSAtIHRoZSBKYXZhU2NyaXB0
IHR5cGUgb2YgdGhlIG9iamVjdC4gVGhpcyBpcyB0aGUgdHlwZSBhcyByZXR1cm5lZCBieQorLy8g
dGhlIENsYXNzSW5mbyBvYmplY3Qgb2YgdGhlIEpTQ2VsbAorLy8KKy8vIG1fc2l6ZSAtIHRoZSBj
b21wdXRlZCBzaXplIG9mIHRoZSBvYmplY3QuIFRoaXMgd2lsbCBiZSBhc3NpZ25lZCB0aGUgdmFs
dWUKKy8vIHJldHVybmVkIGJ5IHRoZSBpbnN0YW5jZVNpemUoKSBtZXRob2Qgb24gSlNDZWxsCisv
LworLy8gbV9jcmVhdGluZ0Z1bmN0aW9uIC0gdGhpcyBvYmplY3QgcG9pbnRzIHRvIHRoZSBQcm9m
aWxlTm9kZSB3aGljaCBob2xkcworLy8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZ1bmN0aW9uIGlu
IHdoaWNoIHRoaXMgSlMgb2JqZWN0IHdhcyBjcmVhdGVkLgorLy8gQSBzdGFjayB0cmFjZSBjYW4g
YmUgZXh0cmFjdGVkIGZyb20gdGhpcyBvYmplY3QuCisKKyNpbmNsdWRlIDxydW50aW1lL1VTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworICAg
IGNsYXNzIFByb2ZpbGVOb2RlOworCisgICAgY2xhc3MgT2JqZWN0SWRlbnRpZmllciA6IHB1Ymxp
YyBSZWZDb3VudGVkPE9iamVjdElkZW50aWZpZXI+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVu
c2lnbmVkIHVpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdWlkOyB9CisgICAgICAgIFVTdHJpbmcgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgICAgIFByb2ZpbGVOb2RlKiBjcmVhdGluZ0Z1bmN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jcmVhdGluZ0Z1bmN0aW9uLmdldCgpOyB9CisKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8T2JqZWN0SWRlbnRpZmllcj4gY3JlYXRlKHVuc2lnbmVkLCBj
b25zdCBKU0NlbGwqLCBQYXNzUmVmUHRyPFByb2ZpbGVOb2RlPik7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICB1bnNpZ25lZCBtX3VpZDsKKyAgICAgICAgVVN0cmluZyBtX3R5cGU7CisgICAgICAg
IHVuc2lnbmVkIG1fc2l6ZTsKKyAgICAgICAgUmVmUHRyPFByb2ZpbGVOb2RlPiBtX2NyZWF0aW5n
RnVuY3Rpb247CisKKyAgICAgICAgT2JqZWN0SWRlbnRpZmllcih1bnNpZ25lZCwgY29uc3QgSlND
ZWxsKiwgUGFzc1JlZlB0cjxQcm9maWxlTm9kZT4pOworICAgIH07CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gT2JqZWN0SWRlbnRpZmllcl9oCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9m
aWxlci9Qcm9maWxlLmNwcAkocmV2aXNpb24gNDU1MzMpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9m
aWxlci9Qcm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIlByb2ZpbGUuaCIKIAogI2luY2x1ZGUgIlByb2ZpbGVOb2RlLmgiCisjaW5jbHVkZSAiTGl2
ZU9iamVjdHMuaCIKICNpbmNsdWRlIDxzdGRpby5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM5
LDYgKzQwLDcgQEAgUGFzc1JlZlB0cjxQcm9maWxlPiBQcm9maWxlOjpjcmVhdGUoY29ucwogUHJv
ZmlsZTo6UHJvZmlsZShjb25zdCBVU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgdWlkKQogICAgIDog
bV90aXRsZSh0aXRsZSkKICAgICAsIG1fdWlkKHVpZCkKKyAgICAsIG1fbGl2ZU9iamVjdHMobmV3
IExpdmVPYmplY3RzKCkpCiB7CiAgICAgLy8gRklYTUU6IFdoZW4gbXVsdGktdGhyZWFkaW5nIGlz
IHN1cHBvcnRlZCB0aGlzIHdpbGwgYmUgYSB2ZWN0b3IgYW5kIGNhbGxzCiAgICAgLy8gaW50byB0
aGUgcHJvZmlsZXIgd2lsbCBuZWVkIHRvIGtub3cgd2hpY2ggdGhyZWFkIGl0IGlzIGV4ZWN1dGlu
ZyBvbi4KQEAgLTEzMyw0ICsxMzUsMTkgQEAgdm9pZCBQcm9maWxlOjpkZWJ1Z1ByaW50RGF0YVNh
bXBsZVN0eWxlKAogfQogI2VuZGlmCiAKK0xpdmVPYmplY3RzKiBQcm9maWxlOjpsaXZlT2JqZWN0
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGl2ZU9iamVjdHMuZ2V0KCk7Cit9CisKK3ZvaWQg
UHJvZmlsZTo6b2JqZWN0Q3JlYXRlZChjb25zdCBKU0NlbGwqIGNyZWF0ZWRPYmplY3QsIFBhc3NS
ZWZQdHI8UHJvZmlsZU5vZGU+IG9yaWdpbmF0aW5nRnVuY3Rpb24gKQoreworICAgIG1fbGl2ZU9i
amVjdHMtPmFkZE5vZGUoY3JlYXRlZE9iamVjdCwgb3JpZ2luYXRpbmdGdW5jdGlvbik7Cit9CisK
K3ZvaWQgUHJvZmlsZTo6b2JqZWN0Q29sbGVjdGVkKGNvbnN0IEpTQ2VsbCogY29sbGVjdGVkT2Jq
ZWN0KQoreworICAgIG1fbGl2ZU9iamVjdHMtPnJlbW92ZU5vZGUoY29sbGVjdGVkT2JqZWN0KTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5o
CShyZXZpc2lvbiA0NTUzMykKKysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorICAg
IGNsYXNzIExpdmVPYmplY3RzOworCiAgICAgY2xhc3MgUHJvZmlsZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFByb2ZpbGU+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBy
b2ZpbGU+IGNyZWF0ZShjb25zdCBVU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgdWlkKTsKQEAgLTU1
LDYgKzU3LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGRlYnVnUHJpbnREYXRh
U2FtcGxlU3R5bGUoKSBjb25zdDsKICNlbmRpZgogCisgICAgICAgIExpdmVPYmplY3RzKiBsaXZl
T2JqZWN0cygpIGNvbnN0OworCisgICAgICAgIC8vQ29sbGVjdCBtZW1vcnkgaW5mbworICAgICAg
ICB2b2lkIG9iamVjdENyZWF0ZWQoY29uc3QgSlNDZWxsKiBjcmVhdGVkT2JqZWN0LCBQYXNzUmVm
UHRyPFByb2ZpbGVOb2RlPiBvcmlnaW5hdGluZ0Z1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBvYmpl
Y3RDb2xsZWN0ZWQoY29uc3QgSlNDZWxsKiBjb2xsZWN0ZU9iamVjdCk7CisKICAgICBwcm90ZWN0
ZWQ6CiAgICAgICAgIFByb2ZpbGUoY29uc3QgVVN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIHVpZCk7
CiAKQEAgLTY1LDYgKzczLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFVTdHJpbmcgbV90
aXRsZTsKICAgICAgICAgUmVmUHRyPFByb2ZpbGVOb2RlPiBtX2hlYWQ7CiAgICAgICAgIHVuc2ln
bmVkIGludCBtX3VpZDsKKworICAgICAgICBPd25QdHI8TGl2ZU9iamVjdHM+IG1fbGl2ZU9iamVj
dHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gNDU1MzMpCisrKyBKYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkpTU3RyaW5nUmVmLmgiCiAjaW5jbHVkZSAiSlNG
dW5jdGlvbi5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAiTGl2ZU9iamVj
dHMuaCIKICNpbmNsdWRlICJQcm9maWxlLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXIuaCIKICNpbmNs
dWRlICJUcmFjaW5nLmgiCkBAIC0xMDksNiArMTEwLDE2IEBAIHZvaWQgUHJvZmlsZUdlbmVyYXRv
cjo6ZGlkRXhlY3V0ZShjb25zdCAKICAgICBtX2N1cnJlbnROb2RlID0gbV9jdXJyZW50Tm9kZS0+
ZGlkRXhlY3V0ZSgpOwogfQogCit2b2lkIFByb2ZpbGVHZW5lcmF0b3I6Om9iamVjdENyZWF0ZWQo
Y29uc3QgSlNDZWxsKiBjcmVhdGVkT2JqZWN0KQoreworICAgIG1fcHJvZmlsZS0+b2JqZWN0Q3Jl
YXRlZChjcmVhdGVkT2JqZWN0LCBtX2N1cnJlbnROb2RlKTsKK30KKwordm9pZCBQcm9maWxlR2Vu
ZXJhdG9yOjpvYmplY3RDb2xsZWN0ZWQoY29uc3QgSlNDZWxsKiBjb2xsZWN0ZWRPYmplY3QpCit7
CisgICAgbV9wcm9maWxlLT5vYmplY3RDb2xsZWN0ZWQoY29sbGVjdGVkT2JqZWN0KTsKK30KKwog
dm9pZCBQcm9maWxlR2VuZXJhdG9yOjpzdG9wUHJvZmlsaW5nKCkKIHsKICAgICBtX3Byb2ZpbGUt
PmZvckVhY2goJlByb2ZpbGVOb2RlOjpzdG9wUHJvZmlsaW5nKTsKQEAgLTEzMiw2ICsxNDMsOSBA
QCB2b2lkIFByb2ZpbGVHZW5lcmF0b3I6OnN0b3BQcm9maWxpbmcoKQogICAgICAgICBtX2hlYWQt
PnNldFNlbGZUaW1lKDAuMCk7CiAgICAgICAgIG1faGVhZC0+YWRkQ2hpbGQoaWRsZU5vZGUucmVs
ZWFzZSgpKTsKICAgICB9CisgICAgCisgICAgaWYgKG1fcHJvZmlsZS0+bGl2ZU9iamVjdHMoKSAm
JiAhbV9wcm9maWxlLT5saXZlT2JqZWN0cygpLT5pc0VtcHR5KCkpCisgICAgICAgIG1fcHJvZmls
ZS0+bGl2ZU9iamVjdHMoKS0+ZmluYWxpemVDb2xsZWN0ZWREYXRhKCk7CiB9CiAKIC8vIFRoZSBj
b25zb2xlLlByb2ZpbGVHZW5lcmF0b3IgdGhhdCBzdGFydGVkIHRoaXMgUHJvZmlsZUdlbmVyYXRv
ciB3aWxsIGJlIHRoZSBmaXJzdCBjaGlsZC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9Qcm9maWxlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDQ1NTMzKQorKysgSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQ2FsbElkZW50aWZpZXI7CiAgICAgY2xh
c3MgRXhlY1N0YXRlOworICAgIGNsYXNzIEpTQ2VsbDsKICAgICBjbGFzcyBQcm9maWxlOwogICAg
IGNsYXNzIFByb2ZpbGVOb2RlOwogICAgIGNsYXNzIFVTdHJpbmc7CkBAIC01Myw2ICs1NCwxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCB3aWxsRXhlY3V0ZShjb25zdCBDYWxsSWRl
bnRpZmllciYpOwogICAgICAgICB2b2lkIGRpZEV4ZWN1dGUoY29uc3QgQ2FsbElkZW50aWZpZXIm
KTsKIAorICAgICAgICAvL0NvbGxlY3QgbWVtb3J5IGluZm8KKyAgICAgICAgdm9pZCBvYmplY3RD
cmVhdGVkKGNvbnN0IEpTQ2VsbCogY3JlYXRlZE9iamVjdCk7CisgICAgICAgIHZvaWQgb2JqZWN0
Q29sbGVjdGVkKGNvbnN0IEpTQ2VsbCogY29sbGVjdGVPYmplY3QpOworCiAgICAgICAgIC8vIFN0
b3BwaW5nIFByb2ZpbGluZwogICAgICAgICB2b2lkIHN0b3BQcm9maWxpbmcoKTsKIApJbmRleDog
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gNDU1MzMpCisrKyBKYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEx
ICs1MCwyMCBAQCBzdGF0aWMgQ2FsbElkZW50aWZpZXIgY3JlYXRlQ2FsbElkZW50aWZpCiBQcm9m
aWxlciogUHJvZmlsZXI6OnNfc2hhcmVkUHJvZmlsZXIgPSAwOwogUHJvZmlsZXIqIFByb2ZpbGVy
OjpzX3NoYXJlZEVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSA9IDA7CiAKK1Byb2ZpbGVyOjpQcm9m
aWxlcigpCisgICAgOiBtX2lzTWVtb3J5UHJvZmlsaW5nRW5hYmxlZChmYWxzZSkKK3sKK30KKwog
UHJvZmlsZXIqIFByb2ZpbGVyOjpwcm9maWxlcigpCiB7CiAgICAgaWYgKCFzX3NoYXJlZFByb2Zp
bGVyKQogICAgICAgICBzX3NoYXJlZFByb2ZpbGVyID0gbmV3IFByb2ZpbGVyKCk7CiAgICAgcmV0
dXJuIHNfc2hhcmVkUHJvZmlsZXI7Cit9CisKK1Byb2ZpbGVyOjp+UHJvZmlsZXIoKQorewogfSAg
IAogCiB2b2lkIFByb2ZpbGVyOjpzdGFydFByb2ZpbGluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFVTdHJpbmcmIHRpdGxlKQpAQCAtNzIsNiArODEsOSBAQCB2b2lkIFByb2ZpbGVyOjpzdGFydFBy
b2ZpbGluZyhFeGVjU3RhdGUqCiAgICAgfQogCiAgICAgc19zaGFyZWRFbmFibGVkUHJvZmlsZXJS
ZWZlcmVuY2UgPSB0aGlzOworICAgIGlmIChtX2lzTWVtb3J5UHJvZmlsaW5nRW5hYmxlZCkKKyAg
ICAgICAgSlNDZWxsOjpzZXREb0NvbGxlY3RBbGxvY2F0aW9uVHJhY2VzKHRydWUpOworICAgIAog
ICAgIFJlZlB0cjxQcm9maWxlR2VuZXJhdG9yPiBwcm9maWxlR2VuZXJhdG9yID0gUHJvZmlsZUdl
bmVyYXRvcjo6Y3JlYXRlKHRpdGxlLCBleGVjLCArK1Byb2ZpbGVzVUlEKTsKICAgICBtX2N1cnJl
bnRQcm9maWxlcy5hcHBlbmQocHJvZmlsZUdlbmVyYXRvcik7CiB9CkBAIC04Niw4ICs5OCwxMiBA
QCBQYXNzUmVmUHRyPFByb2ZpbGU+IFByb2ZpbGVyOjpzdG9wUHJvZmlsCiAgICAgICAgICAgICBS
ZWZQdHI8UHJvZmlsZT4gcmV0dXJuUHJvZmlsZSA9IHByb2ZpbGVHZW5lcmF0b3ItPnByb2ZpbGUo
KTsKIAogICAgICAgICAgICAgbV9jdXJyZW50UHJvZmlsZXMucmVtb3ZlKGkpOwotICAgICAgICAg
ICAgaWYgKCFtX2N1cnJlbnRQcm9maWxlcy5zaXplKCkpCisgICAgICAgICAgICBpZiAoIW1fY3Vy
cmVudFByb2ZpbGVzLnNpemUoKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2lzTWVtb3J5UHJv
ZmlsaW5nRW5hYmxlZCkKKyAgICAgICAgICAgICAgICAgICAgSlNDZWxsOjpzZXREb0NvbGxlY3RB
bGxvY2F0aW9uVHJhY2VzKGZhbHNlKTsKKwogICAgICAgICAgICAgICAgIHNfc2hhcmVkRW5hYmxl
ZFByb2ZpbGVyUmVmZXJlbmNlID0gMDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICAgICAgcmV0dXJuIHJldHVyblByb2ZpbGU7CiAgICAgICAgIH0KQEAgLTEzNCw2ICsxNTAs
MjggQEAgdm9pZCBQcm9maWxlcjo6ZGlkRXhlY3V0ZShFeGVjU3RhdGUqIGV4ZQogICAgIGRpc3Bh
dGNoRnVuY3Rpb25Ub1Byb2ZpbGVzKG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRv
cjo6ZGlkRXhlY3V0ZSwgY3JlYXRlQ2FsbElkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSwg
SlNWYWx1ZSgpLCBzb3VyY2VVUkwsIHN0YXJ0aW5nTGluZU51bWJlciksIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+cHJvZmlsZUdyb3VwKCkpOwogfQogCit2b2lkIFByb2ZpbGVyOjpvYmpl
Y3RDcmVhdGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjcmVhdGVkT2JqZWN0KQoreworICAg
IEFTU0VSVCghbV9jdXJyZW50UHJvZmlsZXMuaXNFbXB0eSgpKTsKKworICAgIHVuc2lnbmVkIGN1
cnJlbnRQcm9maWxlVGFyZ2V0R3JvdXAgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnBy
b2ZpbGVHcm91cCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50UHJvZmls
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY3VycmVudFByb2ZpbGVzW2ldLT5wcm9m
aWxlR3JvdXAoKSA9PSBjdXJyZW50UHJvZmlsZVRhcmdldEdyb3VwIHx8ICFtX2N1cnJlbnRQcm9m
aWxlc1tpXS0+b3JpZ2luYXRpbmdHbG9iYWxFeGVjKCkpCisgICAgICAgICAgICBtX2N1cnJlbnRQ
cm9maWxlc1tpXS5nZXQoKS0+b2JqZWN0Q3JlYXRlZChjcmVhdGVkT2JqZWN0KTsKKyAgICB9Cit9
CisKK3ZvaWQgUHJvZmlsZXI6Om9iamVjdENvbGxlY3RlZChKU0NlbGwqIGNvbGxlY3RlZE9iamVj
dCkKK3sKKyAgICBBU1NFUlQoIW1fY3VycmVudFByb2ZpbGVzLmlzRW1wdHkoKSk7CisgICAgCisg
ICAgLy8gVGhlIEV4ZWNTdGF0ZSBpcyBub3QgYXZhaWxhYmxlIGF0IGNvbGxlY3Rpb24gdGltZSwg
c28gdGhlcmUgaXMgbm8gd2F5CisgICAgLy8gdG8gZGV0ZXJtaW5lIHdoaWNoIHByb2ZpbGUgdGhp
cyBpcyB0YXJnZXRlZCBhdC4gRGlzcGF0Y2ggdG8gYWxsIC0gaWYgYSBwcm9maWxlCisgICAgLy8g
Y29udGFpbnMgdGhlIGRlc2lyZWQgY2VsbCwgaXQgd2lsbCBtYXJrIGl0IGNvbGxlY3RlZCBhcHBy
b3ByaWF0ZWx5CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1cnJlbnRQcm9maWxlcy5z
aXplKCk7ICsraSkKKyAgICAgICAgbV9jdXJyZW50UHJvZmlsZXNbaV0uZ2V0KCktPm9iamVjdENv
bGxlY3RlZChjb2xsZWN0ZWRPYmplY3QpOworfQorCiBDYWxsSWRlbnRpZmllciBQcm9maWxlcjo6
Y3JlYXRlQ2FsbElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU1ZhbHVlIGZ1
bmN0aW9uLCBjb25zdCBVU3RyaW5nJiBkZWZhdWx0U291cmNlVVJMLCBpbnQgZGVmYXVsdExpbmVO
dW1iZXIpCiB7CiAgICAgaWYgKCFmdW5jdGlvbikKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXIuaAkocmV2aXNpb24gNDU1MzMpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgcmV0dXJuICZzX3NoYXJlZEVuYWJsZWRQcm9maWxlclJlZmVyZW5jZTsKICAg
ICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgflByb2ZpbGVyKCk7CisKICAgICAgICAgc3RhdGlj
IFByb2ZpbGVyKiBwcm9maWxlcigpOyAKICAgICAgICAgc3RhdGljIENhbGxJZGVudGlmaWVyIGNy
ZWF0ZUNhbGxJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSosIEpTVmFsdWUsIGNvbnN0IFVTdHJpbmcm
IHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIpOwogCkBAIC02MiwxMiArNjQsMjAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZGlkRXhlY3V0ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGZ1
bmN0aW9uKTsKICAgICAgICAgdm9pZCBkaWRFeGVjdXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJp
bmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcik7CiAKKyAgICAgICAgdmlydHVh
bCB2b2lkIG9iamVjdENyZWF0ZWQoRXhlY1N0YXRlKiwgSlNDZWxsKiBjcmVhdGVkT2JqZWN0KTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIG9iamVjdENvbGxlY3RlZChKU0NlbGwqIGNvbGxlY3RlT2Jq
ZWN0KTsKKworICAgICAgICB2b2lkIHNldElzTWVtb3J5UHJvZmlsaW5nKGJvb2wgaXNFbmFibGVk
KSB7IG1faXNNZW1vcnlQcm9maWxpbmdFbmFibGVkID0gaXNFbmFibGVkOyB9OwogICAgICAgICBj
b25zdCBWZWN0b3I8UmVmUHRyPFByb2ZpbGVHZW5lcmF0b3I+ID4mIGN1cnJlbnRQcm9maWxlcygp
IHsgcmV0dXJuIG1fY3VycmVudFByb2ZpbGVzOyB9OwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAg
UHJvZmlsZXIoKTsKKyAgICAKICAgICAgICAgVmVjdG9yPFJlZlB0cjxQcm9maWxlR2VuZXJhdG9y
PiA+IG1fY3VycmVudFByb2ZpbGVzOwogICAgICAgICBzdGF0aWMgUHJvZmlsZXIqIHNfc2hhcmVk
UHJvZmlsZXI7CiAgICAgICAgIHN0YXRpYyBQcm9maWxlciogc19zaGFyZWRFbmFibGVkUHJvZmls
ZXJSZWZlcmVuY2U7CisgICAgICAgIAorICAgICAgICBib29sIG1faXNNZW1vcnlQcm9maWxpbmdF
bmFibGVkOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29sbGVjdG9yLmNwcAkocmV2aXNpb24gNDU1MzMpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbGxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKICNpbmNsdWRlICJOb2Rl
cy5oIgorI2luY2x1ZGUgIlByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiVHJhY2luZy5oIgogI2luY2x1
ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxzZXRqbXAuaD4KQEAgLTk1OCw3ICs5NTksMTAgQEAg
dGVtcGxhdGUgPEhlYXBUeXBlIGhlYXBUeXBlPiBzaXplX3QgSGVhcAogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYXNzdW1lcyB0aGUgb2JqZWN0IGhhcyBhIHZhbGlkIHZwdHIuKQogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNlbGwtPnUuZnJlZUNlbGwuemVyb0lmRnJlZSA9PSAwKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShKU0NlbGw6OmRv
Q29sbGVjdEFsbG9jYXRpb25UcmFjZXMoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCpQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCkpLT5vYmplY3RDb2xsZWN0ZWQo
aW1wKTsKKwogICAgICAgICAgICAgICAgICAgICAgICAgaW1wLT5+SlNDZWxsKCk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC05ODEsNiArOTg1LDEwIEBA
IHRlbXBsYXRlIDxIZWFwVHlwZSBoZWFwVHlwZT4gc2l6ZV90IEhlYXAKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFjdXJCbG9jay0+bWFya2VkLmdldChpID4+IEhlYXBDb25zdGFudHM8aGVhcFR5
cGU+OjpiaXRtYXBTaGlmdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFwVHlw
ZSAhPSBOdW1iZXJIZWFwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNDZWxsKiBp
bXAgPSByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KGNlbGwpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKEpTQ2VsbDo6ZG9Db2xsZWN0QWxsb2NhdGlvblRyYWNl
cygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpQcm9maWxlcjo6ZW5hYmxl
ZFByb2ZpbGVyUmVmZXJlbmNlKCkpLT5vYmplY3RDb2xsZWN0ZWQoaW1wKTsKKwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGltcC0+fkpTQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgLS11c2VkQ2VsbHM7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDQ1NTMzKQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0OCw2ICsxMDQ4LDIyIEBA
IHZvaWQgSlNBcnJheTo6Y2hlY2tDb25zaXN0ZW5jeShDb25zaXN0ZW4KIAogI2VuZGlmCiAKK3Np
emVfdCBKU0FycmF5OjppbnN0YW5jZVNpemUoKSBjb25zdAoreworICAgIC8vIFRoZSBCYXNlOjpp
bnN0YW5jZVNpemUgaW5jbHVkZXMgdGhlIHNpemUgb2YgdGhlIHByb3BlcnR5IHN0b3JhZ2UgbWFw
LAorICAgIC8vIHdoaWNoIGNvdW50cyBmb3IgY2FzZXMgd2hlbiB0aGUgYXJyYXkgc3RvcmVzIGRh
dGEgYXMgcHJvcGVydGllcworICAgIHNpemVfdCBjb21wdXRlZFNpemUgPSBCYXNlOjppbnN0YW5j
ZVNpemUoKTsKKworICAgIC8vIEFycmF5U3RvcmFnZSAtIHN0b3JhZ2VTaXplIHJldHVybiB2YWx1
ZSBpbmNsdWRlcyB0aGUgc3RvcmFnZSB2ZWN0b3IgCisgICAgY29tcHV0ZWRTaXplICs9IHN0b3Jh
Z2VTaXplKG1fc3RvcmFnZS0+bV92ZWN0b3JMZW5ndGgpOworCisgICAgLy8gIHNpemUgb2YgU3Bh
cnNlIHZhbHVlIG1hcAorICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3N0b3Jh
Z2UtPm1fc3BhcnNlVmFsdWVNYXApCisgICAgICAgIGNvbXB1dGVkU2l6ZSArPSBzaXplb2YoKm1h
cCkgKyBtYXAtPmNhcGFjaXR5KCkgKiBzaXplb2YoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6VmFsdWVU
eXBlKTsKKworICAgIHJldHVybiBjb21wdXRlZFNpemU7Cit9CisKIEpTQXJyYXkqIGNvbnN0cnVj
dEVtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBuZXcgKGV4ZWMpIEpT
QXJyYXkoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpKTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiA0NTUzMykKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBjbGFzcyBKU0FycmF5IDogcHVibGljIEpT
T2JqZWN0IHsKKyAgICAgICAgdHlwZWRlZiBKU09iamVjdCBCYXNlOworCiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBKSVQ7CiAKICAgICBwdWJsaWM6CkBAIC04Myw2ICs4NSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSkpOwogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCBzaXplX3Qg
aW5zdGFuY2VTaXplKCkgY29uc3Q7CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiA0NTUzMykKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAog
I2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiUHJvZmlsZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc2LDEzICs3NywyMCBAQCBleHRlcm4gY29u
c3QgZG91YmxlIEluZiA9IE5hTkluZi5kb3VibGVzCiAgCiAjZW5kaWYgLy8gIShkZWZpbmVkIE5B
TiAmJiBkZWZpbmVkIElORklOSVRZKQogCitib29sIEpTQ2VsbDo6c19kb0NvbGxlY3RBbGxvY2F0
aW9uVHJhY2VzID0gZmFsc2U7CisKIHZvaWQqIEpTQ2VsbDo6b3BlcmF0b3IgbmV3KHNpemVfdCBz
aXplLCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAjaWZkZWYgSkFWQVNDUklQVENPUkVfQlVJTERJTkdf
QUxMX0lOX09ORV9GSUxFCi0gICAgcmV0dXJuIGV4ZWMtPmhlYXAoKS0+aW5saW5lQWxsb2NhdGUo
c2l6ZSk7CisgICAgdm9pZCogY2VsbCA9IGV4ZWMtPmhlYXAoKS0+aW5saW5lQWxsb2NhdGUoc2l6
ZSk7CiAjZWxzZQotICAgIHJldHVybiBleGVjLT5oZWFwKCktPmFsbG9jYXRlKHNpemUpOworICAg
IHZvaWQqIGNlbGwgPSBleGVjLT5oZWFwKCktPmFsbG9jYXRlKHNpemUpOwogI2VuZGlmCisKKyAg
ICBpZiAoVU5MSUtFTFkoSlNDZWxsOjpzX2RvQ29sbGVjdEFsbG9jYXRpb25UcmFjZXMpKQorICAg
ICAgICAoKlByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKSktPm9iamVjdENyZWF0
ZWQoZXhlYywgc3RhdGljX2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOworCisgICAgcmV0dXJuIGNlbGw7
CiB9CiAKIGJvb2wgSlNDZWxsOjpnZXRVSW50MzIodWludDMyX3QmKSBjb25zdApAQCAtMjA3LDQg
KzIxNSwxMyBAQCBib29sIEpTQ2VsbDo6aXNHZXR0ZXJTZXR0ZXIoKSBjb25zdAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAorLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgSGVhcCBjZWxsLCBzaW5j
ZSBubyBtYXR0ZXIgdGhlIHNpemUgb2YgdGhlIEpTIGNsYXNzLAorLy8gaXQgd2lsbCBzdGlsbCBv
Y2N1cHkgYSBmdWxsIENvbGxlY3RvckNlbGwuCitzaXplX3QgSlNDZWxsOjppbnN0YW5jZVNpemUo
KSBjb25zdCB7CisgICAgaWYgKGlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBKU0M6OkhlYXBD
b25zdGFudHM8TnVtYmVySGVhcD46OmNlbGxTaXplOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJu
IEpTQzo6SGVhcENvbnN0YW50czxQcmltYXJ5SGVhcD46OmNlbGxTaXplOworfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gNDU1MzMp
CisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC05
OSw2ICs5OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBKU1ZhbHVlIGdl
dEpTTnVtYmVyKCk7CiAgICAgICAgIHZvaWQqIHZwdHIoKSB7IHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKio+KHRoaXMpOyB9CiAKKyAgICAgICAgLy8gc2hvdWxkIGJlIGNhbGxlZCBmcm9t
IG9iamVjdHMgdGhhdCBkaXJlY3RseSBpbmhlcml0IEpTQ2VsbAorICAgICAgICB2aXJ0dWFsIHNp
emVfdCBpbnN0YW5jZVNpemUoKSBjb25zdDsKKyAgICAgICAgc3RhdGljIHZvaWQgc2V0RG9Db2xs
ZWN0QWxsb2NhdGlvblRyYWNlcyhib29sIHNob3VsZENvbGxlY3QpIHsgc19kb0NvbGxlY3RBbGxv
Y2F0aW9uVHJhY2VzID0gc2hvdWxkQ29sbGVjdDsgfQorICAgICAgICBzdGF0aWMgYm9vbCBkb0Nv
bGxlY3RBbGxvY2F0aW9uVHJhY2VzKCkgeyByZXR1cm4gc19kb0NvbGxlY3RBbGxvY2F0aW9uVHJh
Y2VzOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICAvLyBCYXNlIGltcGxlbWVudGF0aW9uOyBm
b3Igbm9uLW9iamVjdCBjbGFzc2VzIGltcGxlbWVudHMgZ2V0UHJvcGVydHlTbG90LgogICAgICAg
ICBib29sIGZhc3RHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAgLTEwNiw2ICsxMTEsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICAK
ICAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICAgICAgc3RhdGljIGJvb2wgc19k
b0NvbGxlY3RBbGxvY2F0aW9uVHJhY2VzOwogICAgIH07CiAKICAgICBKU0NlbGwqIGFzQ2VsbChK
U1ZhbHVlKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiA0
NTUzMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MzgsNCArNTM4LDE1IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RFbXB0eU9iamVjdChF
eGVjU3RhdGUKICAgICByZXR1cm4gbmV3IChleGVjKSBKU09iamVjdChleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmVtcHR5T2JqZWN0U3RydWN0dXJlKCkpOwogfQogCisvLyBSZXR1cm5zIHRo
ZSBzaXplIG9mIHRoZSBwcm9wZXJ0eSBtYXAuCitzaXplX3QgSlNPYmplY3Q6Omluc3RhbmNlU2l6
ZSgpIGNvbnN0Cit7CisgICAgc2l6ZV90IGNvbXB1dGVkU2l6ZSA9IEJhc2U6Omluc3RhbmNlU2l6
ZSgpOworICAgIAorICAgIGlmIChpc1VzaW5nSW5saW5lU3RvcmFnZSgpKQorICAgICAgICBjb21w
dXRlZFNpemUgKz0gbV9zdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZVNpemUoKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSk7CisgICAgCisgICAgcmV0dXJuIGNvbXB1dGVkU2l6ZTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lv
biA0NTUzMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNjUsNiArNjUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB0eXBlZGVmIGNvbnN0
IEVuY29kZWRKU1ZhbHVlKiBDb25zdFByb3BlcnR5U3RvcmFnZTsKIAogICAgIGNsYXNzIEpTT2Jq
ZWN0IDogcHVibGljIEpTQ2VsbCB7CisgICAgICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyOwogICAgICAgICBm
cmllbmQgY2xhc3MgSklUOwogICAgICAgICBmcmllbmQgY2xhc3MgSlNDZWxsOwpAQCAtMjAyLDYg
KzIwNCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBIYXNTdGFu
ZGFyZEdldE93blByb3BlcnR5U2xvdCkpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBTaG91bGUgYmUgY2FsbGVkIGZyb20gdHlwZXMgdGhhdCBkaXJlY3RseSBpbmhlcml0IEpTT2Jq
ZWN0CisgICAgICAgIHZpcnR1YWwgc2l6ZV90IGluc3RhbmNlU2l6ZSgpIGNvbnN0OwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9yYWdlKCkg
Y29uc3QgeyByZXR1cm4gKGlzVXNpbmdJbmxpbmVTdG9yYWdlKCkgPyBtX2lubGluZVN0b3JhZ2Ug
OiBtX2V4dGVybmFsU3RvcmFnZSk7IH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcu
Y3BwCShyZXZpc2lvbiA0NTUzMykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDE1IEBAIGJvb2wgSlNTdHJpbmc6Omdl
dE93blByb3BlcnR5U2xvdChFeGVjU3QKICAgICByZXR1cm4gSlNTdHJpbmc6OmdldE93blByb3Bl
cnR5U2xvdChleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3Qp
OwogfQogCitzaXplX3QgSlNTdHJpbmc6Omluc3RhbmNlU2l6ZSgpIGNvbnN0Cit7CisgICAgc2l6
ZV90IGNvbXB1dGVkU2l6ZSA9IEJhc2U6Omluc3RhbmNlU2l6ZSgpOworCisgICAgY29tcHV0ZWRT
aXplICs9IHZhbHVlKCkuc2l6ZSgpICogc2l6ZW9mKFVDaGFyKSArIHZhbHVlKCkuY29zdCgpOwor
CisgICAgcmV0dXJuIGNvbXB1dGVkU2l6ZTsKK30KKwogSlNTdHJpbmcqIGpzU3RyaW5nKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcykKIHsKICAgICBpbnQgc2l6ZSA9
IHMuc2l6ZSgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gNDU1
MzMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDYgKzU5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgSlNTdHJpbmcqIGpzT3duZWRT
dHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgVVN0cmluZyYpOyAKIAogICAgIGNsYXNzIEpTU3RyaW5n
IDogcHVibGljIEpTQ2VsbCB7CisgICAgICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKICAgICAg
ICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICAgICAgZnJpZW5kIGNsYXNzIFZQdHJTZXQ7CiAKQEAg
LTkyLDYgKzk0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSBwcm90bykgeyByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKFN0cmluZ1R5cGUsIE5lZWRzVGhpc0NvbnZl
cnNpb24pKTsgfQogCisgICAgICAgIHZpcnR1YWwgc2l6ZV90IGluc3RhbmNlU2l6ZSgpIGNvbnN0
OworCiAgICAgcHJpdmF0ZToKICAgICAgICAgZW51bSBWUHRyU3RlYWxpbmdIYWNrVHlwZSB7IFZQ
dHJTdGVhbGluZ0hhY2sgfTsKICAgICAgICAgSlNTdHJpbmcoVlB0clN0ZWFsaW5nSGFja1R5cGUp
IApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcAkocmV2
aXNpb24gNDU1MzMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDQgKzMzLDE4IEBAIHZvaWQgSlNXcmFwcGVyT2JqZWN0
OjptYXJrKCkgCiAgICAgICAgIG1faW50ZXJuYWxWYWx1ZS5tYXJrKCk7CiB9CiAKK3NpemVfdCBK
U1dyYXBwZXJPYmplY3Q6Omluc3RhbmNlU2l6ZSgpIGNvbnN0Cit7CisgICAgc2l6ZV90IGNvbXB1
dGVkU2l6ZSA9IEJhc2U6Omluc3RhbmNlU2l6ZSgpOworCisgICAgaWYgKGludGVybmFsVmFsdWUo
KS5pc0NlbGwoKSkgeworICAgICAgICAvLyBBZGRpbmcgdGhlIHNpemUgb2YgdGhlIHdyYXBwZWQg
b2JqZWN0CisgICAgICAgIEpTQ2VsbCogY2VsbCA9IGFzQ2VsbChpbnRlcm5hbFZhbHVlKCkpOwor
ICAgICAgICBpZiAocmVpbnRlcnByZXRfY2FzdDxDb2xsZWN0b3JDZWxsKj4oY2VsbCktPnUuZnJl
ZUNlbGwuemVyb0lmRnJlZSkKKyAgICAgICAgICAgIGNvbXB1dGVkU2l6ZSArPSBjZWxsLT5pbnN0
YW5jZVNpemUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gY29tcHV0ZWRTaXplOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmpl
Y3QuaAkocmV2aXNpb24gNDU1MzMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBl
ck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIC8vIFRoaXMgY2xhc3MgaXMgdXNlZCBhcyBhIGJhc2UgZm9yIGNsYXNzZXMgc3VjaCBh
cyBTdHJpbmcsCiAgICAgLy8gTnVtYmVyLCBCb29sZWFuIGFuZCBEYXRlIHdoaWNoIGFyZSB3cmFw
cGVycyBmb3IgcHJpbWl0aXZlIHR5cGVzLgogICAgIGNsYXNzIEpTV3JhcHBlck9iamVjdCA6IHB1
YmxpYyBKU09iamVjdCB7CisgICAgICAgIHR5cGVkZWYgSlNPYmplY3QgQmFzZTsKICAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIGV4cGxpY2l0IEpTV3JhcHBlck9iamVjdChQYXNzUmVmUHRyPFN0cnVj
dHVyZT4pOwogCkBAIC0zNyw3ICszOCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IHNldEludGVybmFsVmFsdWUoSlNWYWx1ZSk7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIHZv
aWQgbWFyaygpOwotICAgICAgICAKKworICAgICAgICB2aXJ0dWFsIHNpemVfdCBpbnN0YW5jZVNp
emUoKSBjb25zdDsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIEpTVmFsdWUgbV9pbnRlcm5hbFZh
bHVlOwogICAgIH07CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNDU1MzMpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDA5LTA3LTAzICBIb3JpYSBPbGFydSAgPG9s
YXJ1QGFkb2JlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBCdWcgMTA5MzA6IFdlYktpdCBjb3VsZCBiZW5lZml0IGZyb20gYSBKYXZhU2NyaXB0
IGxpdmUgb2JqZWN0IHByb2ZpbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDkzMAorCisgICAgICAgIEFkZGVkIHR3byBuZXcgaGVhZGVycyB0byBm
b3J3YXJkIEphdmFTY3JpcHRDb3JlIGhlYWRlcnMuCisKKyAgICAgICAgTW9kaWZpZWQgQ29kZUdl
bmVyYXRvckpTLnBtIHRvIGNoZWNrIGZvciB0aGUgIkhhc0luc3RhbmNlU2l6ZSIKKyAgICAgICAg
YXR0cmlidXRlIGFuZCBpbnNlcnQgYW4gaW5zdGFuY2VTaXplIG1ldGhvZCBpbiB0aGUgZ2VuZXJh
dGVkIEpTT2JqZWN0cy4KKyAgICAgICAgVGhpcyBtZXRob2QgY2FsbHMgdGhlIGVsZW1lbnRTaXpl
IG1ldGhvZCBmcm9tIHRoZSBET00gb2JqZWN0CisgICAgICAgIGltcGxlbWVudGF0aW9uLgorCisg
ICAgICAgIEFkZGVkIGFuIGVsZW1lbnRTaXplIG1ldGhvZCB0byBIVE1MSW1hZ2VFbGVtZW50IGFu
ZCB1cGRhdGVkIHRoZSBpZGwKKyAgICAgICAgdG8gcmVmbGVjdCB0aGlzIGZvciB0aGUgZ2VuZXJh
dG9yIHNjcmlwdC4gVGhpcyBpcyBub3QgYSBjb21wbGV0ZQorICAgICAgICBpbXBsZW1lbnRhdGlv
biBvZiBhIHNpemUgZnVuY3Rpb24sIGJ1dCBpcyBhZGRlZCB0byBwcm92ZSBmdW5jdGlvbmFsaXR5
LgorCisgICAgICAgIEFkZGVkIHRoZSBKYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllciB0byB0aGUg
aW5zcGVjdG9yLiBUaGlzIGlzIGEgY2xhc3MKKyAgICAgICAgY29udGFpbmluZyB0aGUgSlMgcmVw
cmVzZW50YXRpb24gb2YgYSBwcm9maWxlciBsaXZlIG9iamVjdC4gVGhlIG5ldworICAgICAgICBs
aXZlT2JqZWN0cyBwcm9wZXJ0eSBhZGRlZCB0byB0aGUgSmF2YVNjcmlwdFByb2ZpbGUgY2xhc3Mg
aXMgYW4gQXJyYXkKKyAgICAgICAgb2Ygc3VjaCBvYmplY3RzLgorCisgICAgICAgIEFkZGVkIHRo
ZSBzZXRNZW1vcnlQcm9maWxpbmdFbmFibGVkKGJvb2xlYW4pIGZ1bmN0aW9uIHRvIHRoZSBjb25z
b2xlCisgICAgICAgIG9iamVjdC4KKworICAgICAgICBUZXN0czogZmFzdC9wcm9maWxlci1tZW1v
cnkvY3JlYXRlLWN1c3RvbS10eXBlcy5odG1sCisgICAgICAgICAgICAgICBmYXN0L3Byb2ZpbGVy
LW1lbW9yeS9jcmVhdGUtbmF0aXZlLXR5cGVzLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvcHJv
ZmlsZXItbWVtb3J5L2pzLXByb3BlcnRpZXMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9wcm9m
aWxlci1tZW1vcnkvbnVtYmVyLW9mLWFsbG9jYXRpb25zLmh0bWwKKyAgICAgICAgICAgICAgIGZh
c3QvcHJvZmlsZXItbWVtb3J5L3NpbXBsZS1hbGxvY2F0aW9uLXRyYWNlLmh0bWwKKworICAgICAg
ICAqIEZvcndhcmRpbmdIZWFkZXJzL3Byb2ZpbGVyL0xpdmVPYmplY3RzLmg6IEFkZGVkLgorICAg
ICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3Byb2ZpbGVyL09iamVjdElkZW50aWZpZXIuaDogQWRk
ZWQuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGh0bWwv
SFRNTEltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50
OjplbGVtZW50U2l6ZSk6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50Lmg6CisgICAg
ICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSmF2
YVNjcmlwdE9iamVjdElkZW50aWZpZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9i
amVjdElkZW50aWZpZXJDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRJZCk6CisgICAgICAg
IChXZWJDb3JlOjpnZXRUeXBlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldENyZWF0ZWRGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmFs
aXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdElkZW50aWZpZXJDbGFzcyk6CisgICAgICAg
IChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSmF2YVNjcmlwdE9iamVjdElk
ZW50aWZpZXIuaDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldExpdmVPYmplY3RzKToKKyAgICAgICAgKFdlYkNv
cmU6OlByb2ZpbGVDbGFzcyk6CisgICAgICAgICogcGFnZS9Db25zb2xlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnNvbGU6OnNldE1lbW9yeVByb2ZpbGluZ0VuYWJsZWQpOgorICAgICAgICAq
IHBhZ2UvQ29uc29sZS5oOgorICAgICAgICAqIHBhZ2UvQ29uc29sZS5pZGw6CisKIDIwMDktMDct
MDIgIFBpZXJyZSBkJ0hlcmJlbW9udCAgPHBkaGVyYmVtb250QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3Byb2ZpbGVyL0xpdmVPYmplY3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9wcm9maWxlci9MaXZlT2JqZWN0cy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9wcm9maWxlci9MaXZlT2JqZWN0cy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfTGl2ZU9iamVjdHNfaAorI2RlZmlu
ZSBXZWJDb3JlX0ZXRF9MaXZlT2JqZWN0c19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTGl2
ZU9iamVjdHMuaD4KKyNlbmRpZgpJbmRleDogV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9wcm9m
aWxlci9PYmplY3RJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy9wcm9maWxlci9PYmplY3RJZGVudGlmaWVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3Byb2ZpbGVyL09iamVjdElkZW50aWZpZXIuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX09iamVjdElkZW50aWZp
ZXJfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9PYmplY3RJZGVudGlmaWVyX2gKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9PYmplY3RJZGVudGlmaWVyLmg+CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NTUzMykKKysrIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC00MzA0LDYgKzQzMDQsOCBAQAogCQlDNTEwMkVEMDBGRDlFRjhDMDBGQUZGMDQgLyogU3RvcmFn
ZUFyZWFTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM1MTAyRUNFMEZEOUVGOEMwMEZBRkYwNCAvKiBTdG9yYWdlQXJlYVN5bmMuY3BwICovOyB9
OwogCQlDNkQ3NEFENTA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkQ3NEFE
MzA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggKi87IH07CiAJ
CUM2RDc0QUU0MDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzZENzRBRTMw
OUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgKi87IH07CisJ
CUNCMTEwMDRFMEY5NDhBNzcwMEU1ODM3OSAvKiBKYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0IxMTAwNEQw
Rjk0OEE3NzAwRTU4Mzc5IC8qIEphdmFTY3JpcHRPYmplY3RJZGVudGlmaWVyLmggKi87IH07CisJ
CUNCMTEwMDUyMEY5NDhBRjYwMEU1ODM3OSAvKiBKYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDQjExMDA1
MTBGOTQ4QUY2MDBFNTgzNzkgLyogSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuY3BwICovOyB9
OwogCQlEMDVDRUQyOTBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwNUNFRDI3MEE0
MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwICovOyB9OwogCQlEMDVDRUQy
QTBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDVDRUQyODBBNDBCQjJDMDBDNUFGMzgg
LyogRm9ybWF0QmxvY2tDb21tYW5kLmggKi87IH07CiAJCUQwNkMwRDhGMENGRDExNDYwMDY1RjQz
RiAvKiBSZW1vdmVGb3JtYXRDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBEMDZDMEQ4RDBDRkQxMTQ2MDA2NUY0M0YgLyogUmVtb3ZlRm9ybWF0
Q29tbWFuZC5oICovOyB9OwpAQCAtOTE0MCw2ICs5MTQyLDggQEAKIAkJQzUxMDJFQ0UwRkQ5RUY4
QzAwRkFGRjA0IC8qIFN0b3JhZ2VBcmVhU3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdG9yYWdlQXJlYVN5bmMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDNkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExl
dmVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZGlmeVNlbGVjdGlvbkxp
c3RMZXZlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNkQ3NEFFMzA5QUEyOTBB
MDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNCMTEwMDREMEY5NDhBNzcwMEU1ODM3OSAvKiBKYXZh
U2NyaXB0T2JqZWN0SWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDQjExMDA1MTBGOTQ4QUY2MDBFNTgzNzkgLyogSmF2YVNjcmlwdE9iamVjdElkZW50aWZp
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSmF2YVNjcmlwdE9i
amVjdElkZW50aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDVDRUQy
NzBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlEMDVDRUQyODBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0
QmxvY2tDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtYXRC
bG9ja0NvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA2QzBEOEQwQ0ZE
MTE0NjAwNjVGNDNGIC8qIFJlbW92ZUZvcm1hdENvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVtb3ZlRm9ybWF0Q29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtOTc2OCw2ICs5NzcyLDggQEAKIAkJCQk3QUI2Rjg4NTBGQjlEMjcxMDA4MDVE
MDIgLyogSW5zcGVjdG9ySlNPTk9iamVjdC5jcHAgKi8sCiAJCQkJN0FCNkY4ODYwRkI5RDI3MTAw
ODA1RDAyIC8qIEluc3BlY3RvckpTT05PYmplY3QuaCAqLywKIAkJCQlCQ0M2NEY1RjBEQ0ZCODRF
MDA4MUVGM0IgLyogbG9jYWxpemVkU3RyaW5ncy5qcyAqLywKKwkJCQlDQjExMDA1MTBGOTQ4QUY2
MDBFNTgzNzkgLyogSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIuY3BwICovLAorCQkJCUNCMTEw
MDREMEY5NDhBNzcwMEU1ODM3OSAvKiBKYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5oICovLAog
CQkJKTsKIAkJCXBhdGggPSBpbnNwZWN0b3I7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtMTE3NjUsOSArMTE3NzEsOSBAQAogCQkJCTg1NTU0Mjk3MEFBNDkzODgwMEJBODlGMiAvKiBI
VE1MSUZyYW1lRWxlbWVudC5pZGwgKi8sCiAJCQkJQThFQTdEMjkwQTE5Mzg1NTAwQThFRjVGIC8q
IEhUTUxJbWFnZUVsZW1lbnQuY3BwICovLAogCQkJCUE4RUE3RDI1MEExOTM4NTUwMEE4RUY1RiAv
KiBIVE1MSW1hZ2VFbGVtZW50LmggKi8sCi0JCQkJMUFFMkFBNzkwQTFDREM2MTAwQjQyQjI1IC8q
IEhUTUxJbWFnZUVsZW1lbnQuaWRsICovLAogCQkJCUE4RUE3RDI4MEExOTM4NTUwMEE4RUY1RiAv
KiBIVE1MSW1hZ2VMb2FkZXIuY3BwICovLAogCQkJCUE4RUE3RDIzMEExOTM4NTUwMEE4RUY1RiAv
KiBIVE1MSW1hZ2VMb2FkZXIuaCAqLywKKwkJCQkxQUUyQUE3OTBBMUNEQzYxMDBCNDJCMjUgLyog
SFRNTEltYWdlRWxlbWVudC5pZGwgKi8sCiAJCQkJQTgxMzY5QjEwOTczNzRGNTAwRDc0NDYzIC8q
IEhUTUxJbnB1dEVsZW1lbnQuY3BwICovLAogCQkJCUE4MTM2OUIwMDk3Mzc0RjUwMEQ3NDQ2MyAv
KiBIVE1MSW5wdXRFbGVtZW50LmggKi8sCiAJCQkJQTgwRTdFMTcwQTFBN0NDQjAwN0ZCOEM1IC8q
IEhUTUxJbnB1dEVsZW1lbnQuaWRsICovLApAQCAtMTY4ODksNiArMTY4OTUsNyBAQAogCQkJCTI5
QTgxMjQ5MEZCQjlDQTkwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODRBODFGM0UwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhh
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEE4MUY0MjBGQzdFMDI3MDA5NTUzMDAgLyogU291cmNl
R3JhcGhpYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0IxMTAwNEUwRjk0OEE3NzAwRTU4Mzc5IC8q
IEphdmFTY3JpcHRPYmplY3RJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEM5MjUx
QTBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
ODIzNDFDNjBGQ0YzQTk1MDBENzVCRDYgLyogV01MU2VsZWN0RWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODQ1RTcyRjgwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xODkwNiw2ICsxODkxMyw3IEBACiAJCQkJMjlBODEyNEIwRkJCOUNBOTAwNTEwMjkz
IC8qIEFYT2JqZWN0Q2FjaGVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NEE4MUYzRDBGQzdE
RkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODRBODFG
NDEwRkM3RTAyNzAwOTU1MzAwIC8qIFNvdXJjZUdyYXBoaWMuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQ0IxMTAwNTIwRjk0OEFGNjAwRTU4Mzc5IC8qIEphdmFTY3JpcHRPYmplY3RJZGVudGlmaWVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4QzkyNTE5MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0
ZXJFZmZlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDgyMzQxQzUwRkNGM0E5NTAwRDc1QkQ2
IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODQ1RTcyRkIwRkQy
NjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gNDU1MzMp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5n
IGNvcHkpCkBAIC01NzYsNiArNTc2LDEwIEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICB9
CiAgICAgfQogCisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0lu
c3RhbmNlU2l6ZSJ9KSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdmlydHVh
bCBzaXplX3QgaW5zdGFuY2VTaXplKCkgY29uc3Q7XG4iKTsKKyAgICB9CisKICAgICBpZiAoISRo
YXNQYXJlbnQpIHsKICAgICAgICAgaWYgKCRwb2RUeXBlKSB7CiAgICAgICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXI8JHBvZFR5cGU+KiBpbXBsKCkg
Y29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9XG4iKTsKQEAgLTEzNTEsNiArMTM1NSwxNCBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
In1cblxuIik7CiAgICAgfQogCisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Ikhhc0luc3RhbmNlU2l6ZSJ9KSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAic2l6
ZV90ICR7Y2xhc3NOYW1lfTo6aW5zdGFuY2VTaXplKCkgY29uc3RcbiIpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAk
aW1wbENsYXNzTmFtZSogaW1wID0gc3RhdGljX2Nhc3Q8JHtpbXBsQ2xhc3NOYW1lfSo+KGltcGwo
KSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTT2JqZWN0
OjppbnN0YW5jZVNpemUoKSArIGltcC0+ZWxlbWVudFNpemUoKTtcbiIpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgfQorCiAgICAgIyBGdW5jdGlvbnMKICAgICBp
ZiAoJG51bUZ1bmN0aW9ucyA+IDApIHsKICAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7
JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA0NTUzMykKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitzaXplX3QgSFRNTEltYWdlRWxlbWVudDo6ZWxl
bWVudFNpemUoKSBjb25zdAoreworICAgIHNpemVfdCBjb21wdXRlZFNpemUgPSBzaXplb2YoKnRo
aXMpOworCisgICAgaWYoY2FjaGVkSW1hZ2UoKSAmJiBjYWNoZWRJbWFnZSgpLT5pbWFnZSgpLT5k
YXRhKCkpCisgICAgICAgIGNvbXB1dGVkU2l6ZSArPSBjYWNoZWRJbWFnZSgpLT5pbWFnZSgpLT5k
YXRhKCktPnNpemUoKTsKKworICAgIHJldHVybiBjb21wdXRlZFNpemU7Cit9CisKIEhUTUxJbWFn
ZUVsZW1lbnQ6OkhUTUxJbWFnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQogICAgIDogSFRNTEVsZW1lbnQo
dGFnTmFtZSwgZG9jKQogICAgICwgbV9pbWFnZUxvYWRlcih0aGlzKQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElt
YWdlRWxlbWVudC5oCShyZXZpc2lvbiA0NTUzMykKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUsOCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtV
Ukw+JikgY29uc3Q7CiAKKyAgICBzaXplX3QgZWxlbWVudFNpemUoKSBjb25zdDsKKwogcHJpdmF0
ZToKICAgICBIVE1MSW1hZ2VMb2FkZXIgbV9pbWFnZUxvYWRlcjsKICAgICBTdHJpbmcgdXNlbWFw
OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmlkbAkocmV2aXNpb24gNDU1MzMpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYg
KzIyLDcgQEAgbW9kdWxlIGh0bWwgewogCiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgR2VuZXJh
dGVDb25zdHJ1Y3RvciwKKyAgICAgICAgSGFzSW5zdGFuY2VTaXplLAogICAgICAgICBJbnRlcmZh
Y2VVVUlEPWIyMWI4MTI1LWQwMGItNGJkZi1iMGU4LTY1OTY3OGRiMzkyMywKICAgICAgICAgSW1w
bGVtZW50YXRpb25VVUlEPTIxMjFjYTIxLTgxMTgtNGYxYi1iOWZlLTQ3ODhhOTA1MDI4MQogICAg
IF0gSFRNTEltYWdlRWxlbWVudCA6IEhUTUxFbGVtZW50IHsKSW5kZXg6IFdlYkNvcmUvaW5zcGVj
dG9yL0phdmFTY3JpcHRPYmplY3RJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2luc3BlY3Rvci9KYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhvcmlh
IE9sYXJ1IDxvbGFydUBhZG9iZS5jb20+LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0T2JqZWN0SWRlbnRpZmllci5oIgorCisjaW5j
bHVkZSAicHJvZmlsZXIvUHJvZmlsZU5vZGUuaCIKKyNpbmNsdWRlICJwcm9maWxlci9PYmplY3RJ
ZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oIgorI2luY2x1
ZGUgIkphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdENv
cmUvSlNTdHJpbmdSZWYuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5o
IgorI2luY2x1ZGUgIkphdmFTY3JpcHRDb3JlL0pTSW1tZWRpYXRlLmgiCisjaW5jbHVkZSAiSmF2
YVNjcmlwdFByb2ZpbGVOb2RlLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU1ZhbHVlLmg+CisjaW5j
bHVkZSA8cnVudGltZS9KU09iamVjdC5oPgorCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ2FjaGUKKwordHlwZWRlZiBIYXNoTWFwPE9iamVjdElk
ZW50aWZpZXIqLCBKU09iamVjdCo+IE9iamVjdElkZW50aWZpZXJNYXA7CisKK3N0YXRpYyBPYmpl
Y3RJZGVudGlmaWVyTWFwJiBvYmplY3RJZGVudGlmaWVyQ2FjaGUoKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoT2JqZWN0SWRlbnRpZmllck1hcCwgc3RhdGljT2JqZWN0SWRlbnRpZmllcnMs
ICgpKTsKKyAgICByZXR1cm4gc3RhdGljT2JqZWN0SWRlbnRpZmllcnM7Cit9CisKK3N0YXRpYyBK
U1ZhbHVlUmVmIGdldElkKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKikKK3sKKyAgICBpZiAoIUpTVmFsdWVJc09iamVjdE9m
Q2xhc3MoY3R4LCB0aGlzT2JqZWN0LCBPYmplY3RJZGVudGlmaWVyQ2xhc3MoKSkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworCisgICAgT2JqZWN0SWRlbnRpZmll
ciogb2JqID0gc3RhdGljX2Nhc3Q8T2JqZWN0SWRlbnRpZmllcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGN0eCwgb2JqLT51
aWQoKSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGdldFR5cGVOYW1lKEpTQ29udGV4dFJlZiBj
dHgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmLCBKU1ZhbHVlUmVmKikKK3sK
KyAgICBpZiAoIUpTVmFsdWVJc09iamVjdE9mQ2xhc3MoY3R4LCB0aGlzT2JqZWN0LCBPYmplY3RJ
ZGVudGlmaWVyQ2xhc3MoKSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
dHgpOworCisgICAgT2JqZWN0SWRlbnRpZmllciogb2JqID0gc3RhdGljX2Nhc3Q8T2JqZWN0SWRl
bnRpZmllcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgVVN0cmluZyB0
eXBlTmFtZSA9IG9iai0+dHlwZSgpOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0eXBl
TmFtZVN0cmluZyhBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyh0eXBlTmFtZS5k
YXRhKCksIHR5cGVOYW1lLnNpemUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVN0cmluZyhj
dHgsIHR5cGVOYW1lU3RyaW5nLmdldCgpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgZ2V0U2l6
ZShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwg
SlNWYWx1ZVJlZiopCit7CisgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGN0eCwgdGhp
c09iamVjdCwgT2JqZWN0SWRlbnRpZmllckNsYXNzKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIE9iamVjdElkZW50aWZpZXIqIG9iaiA9IHN0YXRp
Y19jYXN0PE9iamVjdElkZW50aWZpZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OworICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjdHgsIG9iai0+c2l6ZSgpKTsKK30KKwor
c3RhdGljIEpTVmFsdWVSZWYgZ2V0Q3JlYXRlZEZyb20oSlNDb250ZXh0UmVmIGN0eCwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYsIEpTVmFsdWVSZWYqKQoreworICAgIGlmICgh
SlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjdHgsIHRoaXNPYmplY3QsIE9iamVjdElkZW50aWZpZXJD
bGFzcygpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisKKyAg
ICBPYmplY3RJZGVudGlmaWVyKiBvYmogPSBzdGF0aWNfY2FzdDxPYmplY3RJZGVudGlmaWVyKj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0
b0pTKGN0eCk7CisgICAgcmV0dXJuIHRvUmVmKGV4ZWMsIHRvSlMoZXhlYywgb2JqLT5jcmVhdGlu
Z0Z1bmN0aW9uKCkpKTsKK30KKworc3RhdGljIHZvaWQgZmluYWxpemUoSlNPYmplY3RSZWYgb2Jq
ZWN0KQoreworICAgIE9iamVjdElkZW50aWZpZXIqIG9iamVjdElkZW50aWZpZXIgPSBzdGF0aWNf
Y2FzdDxPYmplY3RJZGVudGlmaWVyKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworICAg
IG9iamVjdElkZW50aWZpZXJDYWNoZSgpLnJlbW92ZShvYmplY3RJZGVudGlmaWVyKTsKKyAgICBv
YmplY3RJZGVudGlmaWVyLT5kZXJlZigpOworfQorCitKU0NsYXNzUmVmIE9iamVjdElkZW50aWZp
ZXJDbGFzcygpCit7CisgICAgc3RhdGljIEpTU3RhdGljVmFsdWUgc3RhdGljVmFsdWVzW10gPSB7
CisgICAgICAgIHsgImlkIiwgZ2V0SWQsIDAsIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAor
ICAgICAgICB7ICJ0eXBlTmFtZSIsIGdldFR5cGVOYW1lLCAwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZU5vbmUgfSwKKyAgICAgICAgeyAic2l6ZSIsIGdldFNpemUsIDAsIGtKU1Byb3BlcnR5QXR0cmli
dXRlTm9uZSB9LAorICAgICAgICB7ICJjcmVhdGVkRnJvbSIsIGdldENyZWF0ZWRGcm9tLCAwLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKKyAgICAgICAgeyAwLCAwLCAwLCAwIH0KKyAgICB9
OworCisgICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5pdGlvbiA9IHsKKyAg
ICAgICAgMCwga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLCAiT2JqZWN0SWRlbnRpZmllciIsIDAsIHN0
YXRpY1ZhbHVlcywgMCwKKyAgICAgICAgMCwgZmluYWxpemUsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAKKyAgICB9OworCisgICAgc3RhdGljIEpTQ2xhc3NSZWYgb2JqZWN0SW5mb0NsYXNzID0g
SlNDbGFzc0NyZWF0ZSgmY2xhc3NEZWZpbml0aW9uKTsKKyAgICByZXR1cm4gb2JqZWN0SW5mb0Ns
YXNzOworfQorCitKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBPYmplY3RJZGVudGlmaWVy
KiBvYmplY3RJbmZvKQoreworICAgIGlmICghb2JqZWN0SW5mbykKKyAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOworICAgICAgICAKKyAgICBKU09iamVjdCogb2JqZWN0SW5mb1dyYXBwZXIgPSBvYmpl
Y3RJZGVudGlmaWVyQ2FjaGUoKS5nZXQob2JqZWN0SW5mbyk7CisgICAgaWYgKG9iamVjdEluZm9X
cmFwcGVyKQorICAgICAgICByZXR1cm4gb2JqZWN0SW5mb1dyYXBwZXI7CisKKyAgICBvYmplY3RJ
bmZvLT5yZWYoKTsKKworICAgIG9iamVjdEluZm9XcmFwcGVyID0gdG9KUyhKU09iamVjdE1ha2Uo
dG9SZWYoZXhlYyksIE9iamVjdElkZW50aWZpZXJDbGFzcygpLCBzdGF0aWNfY2FzdDx2b2lkKj4o
b2JqZWN0SW5mbykpKTsKKyAgICBvYmplY3RJZGVudGlmaWVyQ2FjaGUoKS5zZXQob2JqZWN0SW5m
bywgb2JqZWN0SW5mb1dyYXBwZXIpOworICAgIHJldHVybiBvYmplY3RJbmZvV3JhcHBlcjsKK30K
KworfQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdE9iamVjdElkZW50aWZpZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0T2JqZWN0SWRlbnRp
Zmllci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdE9iamVj
dElkZW50aWZpZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBIb3JpYSBPbGFydSA8b2xhcnVAYWRvYmUuY29tPi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEphdmFTY3JpcHRPYmplY3RJbmZvcm1hdGlvbl9oCisjZGVmaW5lIEph
dmFTY3JpcHRPYmplY3RJbmZvcm1hdGlvbl9oCisKKyNpbmNsdWRlIDxydW50aW1lL0pTVmFsdWUu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisgICAgY2xhc3MgRXhlY1N0YXRlOworICAgIGNsYXNzIE9iamVjdElkZW50aWZpZXI7Cit9CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIEpTQ2xhc3NSZWYgT2JqZWN0SWRlbnRpZmllckNs
YXNzKCk7CisgICAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6Ok9iamVj
dElkZW50aWZpZXIqKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6
IFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRQcm9maWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0UHJvZmlsZS5jcHAJKHJldmlzaW9uIDQ1NTMzKQor
KysgV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw5ICsyOSwxNiBAQAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogCiAj
aW5jbHVkZSAiSmF2YVNjcmlwdFByb2ZpbGVOb2RlLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdE9i
amVjdElkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxwcm9maWxlci9Qcm9maWxlLmg+CisjaW5jbHVk
ZSA8cHJvZmlsZXIvTGl2ZU9iamVjdHMuaD4KKyNpbmNsdWRlIDxwcm9maWxlci9PYmplY3RJZGVu
dGlmaWVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQXJyYXkuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Nv
bnRleHRSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvSlNPYmplY3QuaD4KQEAgLTEzMSw2ICsxMzgsMzIgQEAgc3RhdGljIEpTVmFsdWVSZWYg
cmVzdG9yZUFsbChKU0NvbnRleHRSZQogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
dHgpOwogfQogCitzdGF0aWMgSlNWYWx1ZVJlZiBnZXRMaXZlT2JqZWN0cyhKU0NvbnRleHRSZWYg
Y3R4LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmluZ1JlZiwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0T2ZDbGFzcyhjdHgsIHRoaXNPYmpl
Y3QsIFByb2ZpbGVDbGFzcygpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGN0eCk7CisKKyAgICBQcm9maWxlKiBwcm9maWxlID0gc3RhdGljX2Nhc3Q8UHJvZmlsZSo+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7ICAgIAorICAgIExpdmVPYmplY3RzOjpPYmpl
Y3RWZWN0b3Igb2JqZWN0cyA9IHByb2ZpbGUtPmxpdmVPYmplY3RzKCktPmNhY2hlZE9iamVjdHMo
KTsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKKyAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdMaXN0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0cy5zaXpl
KCk7ICsraSkKKyAgICAgICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVjLCBvYmplY3RzW2ldLmdl
dCgpKSk7CisKKyAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgSlNPYmplY3QqIHJlc3VsdCA9
IGNvbnN0cnVjdEFycmF5KGV4ZWMsIGFyZ0xpc3QpOworCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSB7CisgICAgICAgIGlmIChleGNlcHRpb24pCisgICAgICAgICAgICAqZXhjZXB0aW9u
ID0gdG9SZWYoZXhlYywgZXhlYy0+ZXhjZXB0aW9uKCkpOworICAgICAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOworICAgICAgICByZXN1bHQgPSAwOworICAgIH0KKworICAgIHJldHVybiB0b1Jl
ZihyZXN1bHQpOworfQorCiBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3Qp
CiB7CiAgICAgUHJvZmlsZSogcHJvZmlsZSA9IHN0YXRpY19jYXN0PFByb2ZpbGUqPihKU09iamVj
dEdldFByaXZhdGUob2JqZWN0KSk7CkBAIC0xNDMsNiArMTc2LDcgQEAgSlNDbGFzc1JlZiBQcm9m
aWxlQ2xhc3MoKQogICAgIHN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0gewog
ICAgICAgICB7ICJ0aXRsZSIsIGdldFRpdGxlQ2FsbGJhY2ssIDAsIGtKU1Byb3BlcnR5QXR0cmli
dXRlTm9uZSB9LAogICAgICAgICB7ICJoZWFkIiwgZ2V0SGVhZENhbGxiYWNrLCAwLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKKyAgICAgICAgeyAibGl2ZU9iamVjdHMiLCBnZXRMaXZlT2Jq
ZWN0cywwLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZU5vbmUgfSwKICAgICAgICAgeyAidWlkIiwgZ2V0
VW5pcXVlSWRDYWxsYmFjaywgMCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCiAgICAgICAg
IHsgMCwgMCwgMCwgMCB9CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9Db25zb2xlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29uc29sZS5jcHAJKHJldmlzaW9uIDQ1NTMzKQor
KysgV2ViQ29yZS9wYWdlL0NvbnNvbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNiArMzE1
LDE5IEBAIHZvaWQgQ29uc29sZTo6cHJvZmlsZUVuZChjb25zdCBKU0M6OlVTdHIKICAgICBjb250
cm9sbGVyLT5hZGRQcm9maWxlKHByb2ZpbGUsIGxhc3RDYWxsZXIubGluZU51bWJlcigpLCBsYXN0
Q2FsbGVyLnNvdXJjZVVSTCgpKTsKIH0KIAordm9pZCBDb25zb2xlOjpzZXRNZW1vcnlQcm9maWxp
bmdFbmFibGVkKGJvb2wgaXNFbmFibGVkKQoreworICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdl
KCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogc2Vl
IHRoZSBGSVhNRSBpbiBDb25zb2xlOjpwcm9maWxlCisgICAgaWYgKCFwYWdlLT5pbnNwZWN0b3JD
b250cm9sbGVyKCktPnByb2ZpbGVyRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBK
U0M6OlByb2ZpbGVyOjpwcm9maWxlcigpLT5zZXRJc01lbW9yeVByb2ZpbGluZyhpc0VuYWJsZWQp
OworfQorCiAjZW5kaWYKICAgICAKIHZvaWQgQ29uc29sZTo6dGltZShjb25zdCBTdHJpbmcmIHRp
dGxlKQpJbmRleDogV2ViQ29yZS9wYWdlL0NvbnNvbGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2UvQ29uc29sZS5oCShyZXZpc2lvbiA0NTUzMykKKysrIFdlYkNvcmUvcGFnZS9Db25zb2xl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgICAgICB2b2lkIHByb2ZpbGUoY29u
c3QgSlNDOjpVU3RyaW5nJiwgU2NyaXB0Q2FsbFN0YWNrKik7CiAgICAgICAgIHZvaWQgcHJvZmls
ZUVuZChjb25zdCBKU0M6OlVTdHJpbmcmLCBTY3JpcHRDYWxsU3RhY2sqKTsKKyAgICAgICAgdm9p
ZCBzZXRNZW1vcnlQcm9maWxpbmdFbmFibGVkKGJvb2wgaXNFbmFibGVkKTsKICNlbmRpZgogICAg
ICAgICB2b2lkIHRpbWUoY29uc3QgU3RyaW5nJik7CiAgICAgICAgIHZvaWQgdGltZUVuZChjb25z
dCBTdHJpbmcmLCBTY3JpcHRDYWxsU3RhY2sqKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9Db25zb2xl
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29uc29sZS5pZGwJKHJldmlzaW9uIDQ1
NTMzKQorKysgV2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2
ICs0OCw3IEBAIG1vZHVsZSB3aW5kb3cgewogI2lmIGRlZmluZWQoRU5BQkxFX0pBVkFTQ1JJUFRf
REVCVUdHRVIpICYmIEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSCiAgICAgICAgIFtDdXN0b21B
cmd1bWVudEhhbmRsaW5nXSB2b2lkIHByb2ZpbGUoaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxU
b051bGxTdHJpbmddIERPTVN0cmluZyB0aXRsZSk7CiAgICAgICAgIFtDdXN0b21Bcmd1bWVudEhh
bmRsaW5nXSB2b2lkIHByb2ZpbGVFbmQoaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxT
dHJpbmddIERPTVN0cmluZyB0aXRsZSk7CisgICAgICAgIHZvaWQgc2V0TWVtb3J5UHJvZmlsaW5n
RW5hYmxlZChpbiBib29sZWFuIGlzRW5hYmxlZCk7CiAjZW5kaWYKIAogICAgICAgICB2b2lkIHRp
bWUoaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB0aXRs
ZSk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTUzMykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDA5LTA3LTAzICBIb3JpYSBPbGFydSAg
PG9sYXJ1QGFkb2JlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBCdWcgMTA5MzA6IFdlYktpdCBjb3VsZCBiZW5lZml0IGZyb20gYSBKYXZhU2Ny
aXB0IGxpdmUgb2JqZWN0IHByb2ZpbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDkzMAorCisgICAgICAgIFRoZSBzZXRNZW1vcnlQcm9maWxpbmdF
bmFiZWQgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSB3aW5kb3cuY29uc29sZS4KKyAgICAgICAg
VGhpcyBhZGRpdGlvbiBjYXVzZWQgdGhlIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGll
cy5odG1sIHRlc3QgdG8gZmFpbC4KKyAgICAgICAgQWRkZWQgdGhlIGV4dHJhIGZ1bmN0aW9uIHRv
IHRoZSBleHBlY3RlZCByZXN1bHRzLgorCisgICAgICAgICogZmFzdC9kb20vV2luZG93L3dpbmRv
dy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L3Byb2ZpbGVyLW1lbW9y
eTogQWRkZWQuCisgICAgICAgICogZmFzdC9wcm9maWxlci1tZW1vcnkvY3JlYXRlLWN1c3RvbS10
eXBlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvcHJvZmlsZXItbWVtb3J5
L2NyZWF0ZS1jdXN0b20tdHlwZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9wcm9maWxl
ci1tZW1vcnkvY3JlYXRlLW5hdGl2ZS10eXBlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvcHJvZmlsZXItbWVtb3J5L2NyZWF0ZS1uYXRpdmUtdHlwZXMuaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC9wcm9maWxlci1tZW1vcnkvanMtcHJvcGVydGllcy1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvcHJvZmlsZXItbWVtb3J5L2pzLXByb3BlcnRpZXMu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9wcm9maWxlci1tZW1vcnkvbnVtYmVyLW9mLWFs
bG9jYXRpb25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9wcm9maWxlci1t
ZW1vcnkvbnVtYmVyLW9mLWFsbG9jYXRpb25zLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
cHJvZmlsZXItbWVtb3J5L3Jlc291cmNlczogQWRkZWQuCisgICAgICAgICogZmFzdC9wcm9maWxl
ci1tZW1vcnkvcmVzb3VyY2VzL1RFTVBMQVRFLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
cHJvZmlsZXItbWVtb3J5L3Jlc291cmNlcy9tZW1vcnktcHJvZmlsZXItdGVzdC1qcy1yZXNvdXJj
ZXMuanM6IEFkZGVkLgorICAgICAgICAobG9nKToKKyAgICAgICAgKGluaXRpYWxpemUpOgorICAg
ICAgICAoZW5kTWVtb3J5VGVzdCk6CisgICAgICAgIChnZXRGaXJzdE9iamVjdE9mVHlwZSk6Cisg
ICAgICAgIChnZXRQcm9maWxlQnlUaXRsZSk6CisgICAgICAgIChwcmludFByb2ZpbGUpOgorICAg
ICAgICAocHJpbnRPYmplY3RJZGVudGlmaWVyKToKKyAgICAgICAgKHByaW50U2luZ2xlT2JqZWN0
SWRlbnRpZmllcik6CisgICAgICAgIChwcmludFN0YWNrVHJhY2UpOgorICAgICAgICAoKToKKyAg
ICAgICAgKiBmYXN0L3Byb2ZpbGVyLW1lbW9yeS9zaW1wbGUtYWxsb2NhdGlvbi10cmFjZS1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvcHJvZmlsZXItbWVtb3J5L3NpbXBsZS1h
bGxvY2F0aW9uLXRyYWNlLmh0bWw6IEFkZGVkLgorCiAyMDA5LTA3LTAzICBEbWl0cnkgVGl0b3Yg
IDxkaW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hl
ci4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dp
bmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDU1MzMpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjM0LDYgKzE2MzQsNyBAQCB3aW5kb3cuY29uc29sZS5sb2cgW2Z1bmN0
aW9uXQogd2luZG93LmNvbnNvbGUucHJvZmlsZSBbZnVuY3Rpb25dCiB3aW5kb3cuY29uc29sZS5w
cm9maWxlRW5kIFtmdW5jdGlvbl0KIHdpbmRvdy5jb25zb2xlLnByb2ZpbGVzIFtvYmplY3QgQXJy
YXldCit3aW5kb3cuY29uc29sZS5zZXRNZW1vcnlQcm9maWxpbmdFbmFibGVkIFtmdW5jdGlvbl0K
IHdpbmRvdy5jb25zb2xlLnRpbWUgW2Z1bmN0aW9uXQogd2luZG93LmNvbnNvbGUudGltZUVuZCBb
ZnVuY3Rpb25dCiB3aW5kb3cuY29uc29sZS50cmFjZSBbZnVuY3Rpb25dCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L3Byb2ZpbGVyLW1lbW9yeS9jcmVhdGUtY3VzdG9tLXR5cGVzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3Byb2ZpbGVyLW1lbW9yeS9jcmVhdGUt
Y3VzdG9tLXR5cGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvcHJvZmlsZXItbWVtb3J5L2NyZWF0ZS1jdXN0b20tdHlwZXMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACitUZXN0IHRoZSB0eXBlIGZvciBjdXN0b20gdHlwZXMg
b3Igb2JqZWN0cy4gVGhlIHR5cGVzIGZvciBzdWNoIG9iamVjcyBpcyBPYmplY3QuCisKK1RvIHJ1
biB0aGUgdGVzdCBtYW51YWxseSwgZW5hYmxlIHByb2ZpbGluZyBmcm9tIHRoZSBXZWIgSW5zcGVj
dG9yIGFuZCByZWZyZXNoIHRoZSBwYWdlLiBZb3Ugc2hvdWxkIHNlZSB0aGUgZm9sbG93aW5nIG91
dHB1dDoKKworT2JqZWN0IHR5cGU6IEZ1bmN0aW9uCitPYmplY3QgdHlwZTogT2JqZWN0CitPYmpl
Y3QgdHlwZTogT2JqZWN0CisgICAgCitPdXRwdXQgZm9sbG93cworCitPYmplY3QgdHlwZTogRnVu
Y3Rpb24KK09iamVjdCB0eXBlOiBPYmplY3QKK09iamVjdCB0eXBlOiBPYmplY3QKKwpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9wcm9maWxlci1tZW1vcnkvY3JlYXRlLWN1c3RvbS10eXBlcy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXItbWVtb3J5L2NyZWF0ZS1j
dXN0b20tdHlwZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvcHJvZmls
ZXItbWVtb3J5L2NyZWF0ZS1jdXN0b20tdHlwZXMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgor
PGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Byb2ZpbGVyL3Jlc291cmNl
cy9wcm9maWxlci10ZXN0LUpTLXJlc291cmNlcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL21lbW9yeS1wcm9maWxlci10ZXN0LWpzLXJlc291cmNlcy5qcyI+PC9zY3JpcHQ+
CisKKzxzY3JpcHQ+CisgICAgcHJvZmlsZVRpdGxlID0gIkN1c3RvbSBUeXBlcyBQcm9maWxlIjsg
ICAgCisKKyAgICBmdW5jdGlvbiBDdXN0b21UeXBlKCkgeworICAgIH0KKworICAgIGZ1bmN0aW9u
IHN0YXJ0VGVzdCgpIHsKKyAgICAgICAgY29uc29sZS5wcm9maWxlKHByb2ZpbGVUaXRsZSk7Cisg
ICAgICAgIHZhciBjdXN0b21PYmplY3QgPSBuZXcgQ3VzdG9tVHlwZSgpOworICAgICAgICB2YXIg
aW5saW5lT2JqZWN0ID0geyB9CisgICAgICAgIGNvbnNvbGUucHJvZmlsZUVuZCgpOworCisgICAg
ICAgIHByaW50UHJvZmlsZShwcm9maWxlVGl0bGUsIHR5cGVOYW1lQXNjZW5kaW5nKTsKKworICAg
ICAgICBlbmRNZW1vcnlUZXN0KCk7CisgICAgfQorPC9zY3JpcHQ+CisKKzwvaGVhZD4KKzxib2R5
IG9ubG9hZD0iaW5pdGlhbGl6ZSgpOyBzdGFydFRlc3QoKTsiPgorICAgIDxwIGlkPSJkZXNjcmlw
dGlvbiI+VGVzdCB0aGUgdHlwZSBmb3IgY3VzdG9tIHR5cGVzIG9yIG9iamVjdHMuIFRoZSB0eXBl
cyBmb3Igc3VjaCBvYmplY3MKKyAgICAgICAgaXMgT2JqZWN0LiA8cD4KKyAgICA8cD5UbyBydW4g
dGhlIHRlc3QgbWFudWFsbHksIGVuYWJsZSBwcm9maWxpbmcgZnJvbSB0aGUgV2ViIEluc3BlY3Rv
ciBhbmQgcmVmcmVzaCB0aGUgcGFnZS4KKyAgICAgICAgWW91IHNob3VsZCBzZWUgdGhlIGZvbGxv
d2luZyBvdXRwdXQ6PC9wPgorICAgIDxwcmU+CitPYmplY3QgdHlwZTogRnVuY3Rpb24KK09iamVj
dCB0eXBlOiBPYmplY3QKK09iamVjdCB0eXBlOiBPYmplY3QKKyAgICA8L3ByZT4KKyAgICA8ZGl2
IGlkPSJjb25zb2xlIj48cCBzdHlsZT0iY29sb3I6Ymx1ZSI+T3V0cHV0IGZvbGxvd3M8L3A+PC9k
aXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3Byb2ZpbGVyLW1l
bW9yeS9jcmVhdGUtbmF0aXZlLXR5cGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3Byb2ZpbGVyLW1lbW9yeS9jcmVhdGUtbmF0aXZlLXR5cGVzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXItbWVtb3J5L2Ny
ZWF0ZS1uYXRpdmUtdHlwZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4
IEBACitBbGxvY2F0ZSBiYXNpYyBvYmplY3QgdHlwZXMgdG8gdmVyaWZ5IHRoYXQgdGhleSBnZXQg
cmVnaXN0ZXJlZCBieSB0aGUgbWVtb3J5IHByb2ZpbGVyLiBUaGVyZSBhcmUgdHdvIGZ1bmN0aW9u
IG9iamVjdHMgYmVjYXVzZSBvbmUgaXMgY3JlYXRlZCBieSB0aGUgY29uc29sZSBwcm90b3R5cGUu
CisKK1RvIHJ1biB0aGUgdGVzdCBtYW51YWxseSwgZW5hYmxlIHByb2ZpbGluZyBmcm9tIHRoZSBX
ZWIgSW5zcGVjdG9yIGFuZCByZWZyZXNoIHRoZSBwYWdlLiBZb3Ugc2hvdWxkIHNlZSB0aGUgZm9s
bG93aW5nIG91dHB1dDoKKworT2JqZWN0IHR5cGU6IEFycmF5CitPYmplY3QgdHlwZTogQm9vbGVh
bgorT2JqZWN0IHR5cGU6IERhdGUKK09iamVjdCB0eXBlOiBFcnJvcgorT2JqZWN0IHR5cGU6IEZ1
bmN0aW9uCitPYmplY3QgdHlwZTogRnVuY3Rpb24KK09iamVjdCB0eXBlOiBOdW1iZXIKK09iamVj
dCB0eXBlOiBPYmplY3QKK09iamVjdCB0eXBlOiBSZWdFeHAKK09iamVjdCB0eXBlOiBTdHJpbmcK
KyAgICAKK091dHB1dCBmb2xsb3dzCisKK09iamVjdCB0eXBlOiBBcnJheQorT2JqZWN0IHR5cGU6
IEJvb2xlYW4KK09iamVjdCB0eXBlOiBEYXRlCitPYmplY3QgdHlwZTogRXJyb3IKK09iamVjdCB0
eXBlOiBGdW5jdGlvbgorT2JqZWN0IHR5cGU6IEZ1bmN0aW9uCitPYmplY3QgdHlwZTogTnVtYmVy
CitPYmplY3QgdHlwZTogT2JqZWN0CitPYmplY3QgdHlwZTogUmVnRXhwCitPYmplY3QgdHlwZTog
U3RyaW5nCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXItbWVtb3J5L2NyZWF0ZS1u
YXRpdmUtdHlwZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3Byb2ZpbGVy
LW1lbW9yeS9jcmVhdGUtbmF0aXZlLXR5cGVzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3Byb2ZpbGVyLW1lbW9yeS9jcmVhdGUtbmF0aXZlLXR5cGVzLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9w
cm9maWxlci9yZXNvdXJjZXMvcHJvZmlsZXItdGVzdC1KUy1yZXNvdXJjZXMuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9tZW1vcnktcHJvZmlsZXItdGVzdC1qcy1yZXNvdXJj
ZXMuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0PgorICAgIHZhciBnbG9iYWxWYXIgPSBuZXcgT2Jq
ZWN0KCk7CisKKyAgICBmdW5jdGlvbiBzdGFydFRlc3QoKSB7CisgICAgICAgIHZhciBwcm9maWxl
VGl0bGUgPSAiTmF0aXZlIE9iamVjdHMgUHJvZmlsZSI7CisKKyAgICAgICAgY29uc29sZS5wcm9m
aWxlKHByb2ZpbGVUaXRsZSk7CisKKyAgICAgICAgZ2xvYmFsVmFyLm9iamVjdE9iaiA9IG5ldyBP
YmplY3QoKTsKKyAgICAgICAgZ2xvYmFsVmFyLm51bWJlck9iaiA9IG5ldyBOdW1iZXIoKTsKKyAg
ICAgICAgZ2xvYmFsVmFyLmFycmF5T2JqID0gbmV3IEFycmF5KCk7CisgICAgICAgIGdsb2JhbFZh
ci5zdHJpbmdPYmogPSBuZXcgU3RyaW5nKCJMb25nZXIgdGhhdCBvbmUgY2hhcmFjdGVyIik7IAor
ICAgICAgICBnbG9iYWxWYXIuYm9vbGVhbk9iaiA9IG5ldyBCb29sZWFuKCk7CisgICAgICAgIGds
b2JhbFZhci5mdW5jdGlvbk9iaiA9IG5ldyBGdW5jdGlvbigpOworICAgICAgICBnbG9iYWxWYXIu
ZGF0ZU9iaiA9IG5ldyBEYXRlKCk7CisgICAgICAgIGdsb2JhbFZhci5lcnJvck9iaiA9IG5ldyBF
cnJvcigpOworICAgICAgICBnbG9iYWxWYXIucmVnRXhwT2JqID0gbmV3IFJlZ0V4cCgpOworIAor
ICAgICAgICBjb25zb2xlLnByb2ZpbGVFbmQoKTsKKyAgICAgICAgCisgICAgICAgIHByaW50UHJv
ZmlsZShwcm9maWxlVGl0bGUsIHR5cGVOYW1lQXNjZW5kaW5nKTsKKworICAgICAgICBlbmRNZW1v
cnlUZXN0KCk7CisgICAgfQorPC9zY3JpcHQ+CisKKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0iaW5p
dGlhbGl6ZSgpOyBzdGFydFRlc3QoKTsiPgorICAgIDxwIGlkPSJkZXNjcmlwdGlvbiI+QWxsb2Nh
dGUgYmFzaWMgb2JqZWN0IHR5cGVzIHRvIHZlcmlmeSB0aGF0IHRoZXkgZ2V0IHJlZ2lzdGVyZWQg
YnkKKyAgICAgICAgdGhlIG1lbW9yeSBwcm9maWxlci4gVGhlcmUgYXJlIHR3byBmdW5jdGlvbiBv
YmplY3RzIGJlY2F1c2Ugb25lIGlzIGNyZWF0ZWQgYnkgdGhlCisgICAgICAgIGNvbnNvbGUgcHJv
dG90eXBlLjxwPgorICAgIDxwPlRvIHJ1biB0aGUgdGVzdCBtYW51YWxseSwgZW5hYmxlIHByb2Zp
bGluZyBmcm9tIHRoZSBXZWIgSW5zcGVjdG9yIGFuZCByZWZyZXNoIHRoZSBwYWdlLgorICAgICAg
ICBZb3Ugc2hvdWxkIHNlZSB0aGUgZm9sbG93aW5nIG91dHB1dDo8L3A+CisgICAgPHByZT4KK09i
amVjdCB0eXBlOiBBcnJheQorT2JqZWN0IHR5cGU6IEJvb2xlYW4KK09iamVjdCB0eXBlOiBEYXRl
CitPYmplY3QgdHlwZTogRXJyb3IKK09iamVjdCB0eXBlOiBGdW5jdGlvbgorT2JqZWN0IHR5cGU6
IEZ1bmN0aW9uCitPYmplY3QgdHlwZTogTnVtYmVyCitPYmplY3QgdHlwZTogT2JqZWN0CitPYmpl
Y3QgdHlwZTogUmVnRXhwCitPYmplY3QgdHlwZTogU3RyaW5nCisgICAgPC9wcmU+CisgICAgPGRp
diBpZD0iY29uc29sZSI+PHAgc3R5bGU9ImNvbG9yOmJsdWUiPk91dHB1dCBmb2xsb3dzPC9wPjwv
ZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9wcm9maWxlci1t
ZW1vcnkvanMtcHJvcGVydGllcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9wcm9maWxlci1tZW1vcnkvanMtcHJvcGVydGllcy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3Byb2ZpbGVyLW1lbW9yeS9qcy1wcm9wZXJ0aWVz
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAorVGhpcyB0ZXN0IGNy
ZWF0ZXMgYSBwcm9maWxlIHdpdGggbWVtb3J5IGRhdGEgYW5kIHZlcmlmaWVzIHRoYXQgaXQgaGFz
IGEgbGl2ZU9iamVjdHMgcHJvcGVydHksIGFuZCB0aGUgcHJvcGVydGllcyBvZiB0aGUgT2JqZWN0
SWRlbnRpZmllciBleGlzdC4KKworVG8gcnVuIHRoZSB0ZXN0IG1hbnVhbGx5LCBlbmFibGUgcHJv
ZmlsaW5nIGZyb20gdGhlIFdlYiBJbnNwZWN0b3IgYW5kIHJlZnJlc2ggdGhlIHBhZ2UuIFlvdSBz
aG91bGQgc2VlIHRoZSBmb2xsb3dpbmcgb3V0cHV0OgorCit0eXBlTmFtZQoraWQKK3NpemUKK2Ny
ZWF0ZWRGcm9tCisgICAgCitPdXRwdXQgZm9sbG93cworCit0eXBlTmFtZQoraWQKK3NpemUKK2Ny
ZWF0ZWRGcm9tCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXItbWVtb3J5L2pzLXBy
b3BlcnRpZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3Byb2ZpbGVyLW1l
bW9yeS9qcy1wcm9wZXJ0aWVzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3Byb2ZpbGVyLW1lbW9yeS9qcy1wcm9wZXJ0aWVzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9wcm9maWxlci9yZXNvdXJj
ZXMvcHJvZmlsZXItdGVzdC1KUy1yZXNvdXJjZXMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy9tZW1vcnktcHJvZmlsZXItdGVzdC1qcy1yZXNvdXJjZXMuanMiPjwvc2NyaXB0
PgorCis8c2NyaXB0PgorICAgIGZ1bmN0aW9uIHN0YXJ0VGVzdCgpIHsKKyAgICAgICAgdmFyIHBy
b2ZpbGVUaXRsZSA9ICJDdXN0b20gUHJvZmlsZSI7CisgICAgICAgIGNvbnNvbGUucHJvZmlsZShw
cm9maWxlVGl0bGUpOworICAgICAgICB2YXIgdGVzdEFycmF5ID0gbmV3IEFycmF5KCk7CisgICAg
ICAgIGNvbnNvbGUucHJvZmlsZUVuZCgpOworCisgICAgICAgIGxpdmVPYmplY3RzID0gZ2V0UHJv
ZmlsZUJ5VGl0bGUocHJvZmlsZVRpdGxlKS5saXZlT2JqZWN0czsKKyAgICAgICAgaWYgKGxpdmVP
YmplY3RzID09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJwcm9maWxl
LmxpdmVPYmplY3RzIHByb3BlcnR5IGlzIHVuZGVmaW5lZCIpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2YXIgcHJvcGVydHlTdHJpbmcgPSAiIjsK
KyAgICAgICAgZm9yICh2YXIgaSBpbiBsaXZlT2JqZWN0c1swXSkKKyAgICAgICAgICAgIHByb3Bl
cnR5U3RyaW5nICs9IGkgKyAiXG4iOworCisgICAgICAgIGxvZyhwcm9wZXJ0eVN0cmluZyk7IAor
ICAgICAgICAKKyAgICAgICAgZW5kTWVtb3J5VGVzdCgpOworICAgIH0KKzwvc2NyaXB0PgorCis8
L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImluaXRpYWxpemUoKTsgc3RhcnRUZXN0KCk7Ij4KKyAgICA8
cCBpZD0iZGVzY3JpcHRpb24iPlRoaXMgdGVzdCBjcmVhdGVzIGEgcHJvZmlsZSB3aXRoIG1lbW9y
eSBkYXRhIGFuZCB2ZXJpZmllcyB0aGF0CisgICAgICAgIGl0IGhhcyBhIGxpdmVPYmplY3RzIHBy
b3BlcnR5LCBhbmQgdGhlIHByb3BlcnRpZXMgb2YgdGhlIE9iamVjdElkZW50aWZpZXIgZXhpc3Qu
PHA+CisgICAgPHA+VG8gcnVuIHRoZSB0ZXN0IG1hbnVhbGx5LCBlbmFibGUgcHJvZmlsaW5nIGZy
b20gdGhlIFdlYiBJbnNwZWN0b3IgYW5kIHJlZnJlc2ggdGhlIHBhZ2UuCisgICAgICAgIFlvdSBz
aG91bGQgc2VlIHRoZSBmb2xsb3dpbmcgb3V0cHV0OjwvcD4KKyAgICA8cHJlPgordHlwZU5hbWUK
K2lkCitzaXplCitjcmVhdGVkRnJvbQorICAgIDwvcHJlPgorICAgIDxkaXYgaWQ9ImNvbnNvbGUi
PjxwIHN0eWxlPSJjb2xvcjpibHVlIj5PdXRwdXQgZm9sbG93czwvcD48L2Rpdj4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXItbWVtb3J5L251bWJlci1v
Zi1hbGxvY2F0aW9ucy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9wcm9maWxlci1tZW1vcnkvbnVtYmVyLW9mLWFsbG9jYXRpb25zLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXItbWVtb3J5L251bWJlci1vZi1h
bGxvY2F0aW9ucy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKK1Ro
aXMgdGVzdCBhbGxvY2F0ZXMgYSBsYXJnZSBudW1iZXIgb2Ygb2JqZWN0cyBvZiBhIHNwZWNpZmlj
IHR5cGUsIGFuZCB2ZXJpZmllcyB0aGF0IHRoZSByZXNwZWN0aXZlIG9mIGFsbG9jYXRpb25zIGhh
dmUgYmVlbiByZWdpc3RlcmUgaW4gdGhlIHByb2ZpbGUuCisKK1RvIHJ1biB0aGUgdGVzdCBtYW51
YWxseSwgZW5hYmxlIHByb2ZpbGluZyBmcm9tIHRoZSBXZWIgSW5zcGVjdG9yIGFuZCByZWZyZXNo
IHRoZSBwYWdlLiBZb3Ugc2hvdWxkIHNlZSB0aGUgZm9sbG93aW5nIG91dHB1dDoKKworbnVtYmVy
T2ZBbGxvY2F0aW9ucyBwZXIgdHlwZSBpcyAxMDAwMAorCitQQVNTIGluc3RhbmNlQ291bnRzWydP
YmplY3QnXSBpcyBudW1iZXJPZkFsbG9jYXRpb25zCitQQVNTIGluc3RhbmNlQ291bnRzWydOdW1i
ZXInXSBpcyBudW1iZXJPZkFsbG9jYXRpb25zCitQQVNTIGluc3RhbmNlQ291bnRzWydCb29sZWFu
J10gaXMgbnVtYmVyT2ZBbGxvY2F0aW9ucworUEFTUyBpbnN0YW5jZUNvdW50c1snUmVnRXhwJ10g
aXMgbnVtYmVyT2ZBbGxvY2F0aW9ucworUEFTUyBpbnN0YW5jZUNvdW50c1snRGF0ZSddIGlzIG51
bWJlck9mQWxsb2NhdGlvbnMKK1BBU1MgaW5zdGFuY2VDb3VudHNbJ0Vycm9yJ10gaXMgbnVtYmVy
T2ZBbGxvY2F0aW9ucworUEFTUyBpbnN0YW5jZUNvdW50c1snU3RyaW5nJ10gaXMgbnVtYmVyT2ZB
bGxvY2F0aW9ucworUEFTUyBpbnN0YW5jZUNvdW50c1snRnVuY3Rpb24nXSBpcyBudW1iZXJPZkFs
bG9jYXRpb25zICsgMgorUEFTUyBpbnN0YW5jZUNvdW50c1snQXJyYXknXSBpcyBudW1iZXJPZkFs
bG9jYXRpb25zICsgOQorICAgIAorT3V0cHV0IGZvbGxvd3MKKworbnVtYmVyT2ZBbGxvY2F0aW9u
cyBwZXIgdHlwZSBpcyAxMDAwMAorUEFTUyBpbnN0YW5jZUNvdW50c1snT2JqZWN0J10gaXMgbnVt
YmVyT2ZBbGxvY2F0aW9ucworUEFTUyBpbnN0YW5jZUNvdW50c1snTnVtYmVyJ10gaXMgbnVtYmVy
T2ZBbGxvY2F0aW9ucworUEFTUyBpbnN0YW5jZUNvdW50c1snQm9vbGVhbiddIGlzIG51bWJlck9m
QWxsb2NhdGlvbnMKK1BBU1MgaW5zdGFuY2VDb3VudHNbJ1JlZ0V4cCddIGlzIG51bWJlck9mQWxs
b2NhdGlvbnMKK1BBU1MgaW5zdGFuY2VDb3VudHNbJ0RhdGUnXSBpcyBudW1iZXJPZkFsbG9jYXRp
b25zCitQQVNTIGluc3RhbmNlQ291bnRzWydFcnJvciddIGlzIG51bWJlck9mQWxsb2NhdGlvbnMK
K1BBU1MgaW5zdGFuY2VDb3VudHNbJ1N0cmluZyddIGlzIG51bWJlck9mQWxsb2NhdGlvbnMKK1BB
U1MgaW5zdGFuY2VDb3VudHNbJ0Z1bmN0aW9uJ10gaXMgbnVtYmVyT2ZBbGxvY2F0aW9ucyArIDIK
K1BBU1MgaW5zdGFuY2VDb3VudHNbJ0FycmF5J10gaXMgbnVtYmVyT2ZBbGxvY2F0aW9ucyArIDkK
KwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9wcm9maWxlci1tZW1vcnkvbnVtYmVyLW9mLWFsbG9j
YXRpb25zLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9wcm9maWxlci1tZW1v
cnkvbnVtYmVyLW9mLWFsbG9jYXRpb25zLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L3Byb2ZpbGVyLW1lbW9yeS9udW1iZXItb2YtYWxsb2NhdGlvbnMuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2OCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3By
b2ZpbGVyL3Jlc291cmNlcy9wcm9maWxlci10ZXN0LUpTLXJlc291cmNlcy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL21lbW9yeS1wcm9maWxlci10ZXN0LWpzLXJlc291cmNl
cy5qcyI+PC9zY3JpcHQ+CisKKzxzY3JpcHQ+CisgICAgdmFyIHByb2ZpbGVUaXRsZSA9ICJBbGxv
Y2F0aW9uIE51bWJlcnMiOworICAgIHZhciBnbG9iYWxBcnJheSA9IG5ldyBPYmplY3QoKTsKKyAg
ICB2YXIgbnVtYmVyT2ZBbGxvY2F0aW9ucyA9IDEwMDAwOworICAgIHZhciBpbnN0YW5jZUNvdW50
czsKKworICAgIGZ1bmN0aW9uIHN0YXJ0VGVzdCgpIHsKKyAgICAgICAgY29uc29sZS5wcm9maWxl
KHByb2ZpbGVUaXRsZSk7CisKKyAgICAgICAgZ2xvYmFsQXJyYXlbIk9iamVjdCJdID0gY3JlYXRl
T2JqZWN0cyhudW1iZXJPZkFsbG9jYXRpb25zLCBPYmplY3QpOworICAgICAgICBnbG9iYWxBcnJh
eVsiTnVtYmVyIl0gPSBjcmVhdGVPYmplY3RzKG51bWJlck9mQWxsb2NhdGlvbnMsIE51bWJlcik7
CisgICAgICAgIGdsb2JhbEFycmF5WyJCb29sZWFuIl0gPSBjcmVhdGVPYmplY3RzKG51bWJlck9m
QWxsb2NhdGlvbnMsIEJvb2xlYW4pOworICAgICAgICBnbG9iYWxBcnJheVsiUmVnRXhwIl0gPSBj
cmVhdGVPYmplY3RzKG51bWJlck9mQWxsb2NhdGlvbnMsIFJlZ0V4cCk7CisgICAgICAgIGdsb2Jh
bEFycmF5WyJEYXRlIl0gPSBjcmVhdGVPYmplY3RzKG51bWJlck9mQWxsb2NhdGlvbnMsIERhdGUp
OworICAgICAgICBnbG9iYWxBcnJheVsiRXJyb3IiXSA9IGNyZWF0ZU9iamVjdHMobnVtYmVyT2ZB
bGxvY2F0aW9ucywgRXJyb3IpOworICAgICAgICBnbG9iYWxBcnJheVsiU3RyaW5nIl0gPSBjcmVh
dGVPYmplY3RzKG51bWJlck9mQWxsb2NhdGlvbnMsIFN0cmluZyk7CisgICAgICAgIGdsb2JhbEFy
cmF5WyJGdW5jdGlvbiJdID0gY3JlYXRlT2JqZWN0cyhudW1iZXJPZkFsbG9jYXRpb25zLCBGdW5j
dGlvbik7CisgICAgICAgIGdsb2JhbEFycmF5WyJBcnJheSJdID0gY3JlYXRlT2JqZWN0cyhudW1i
ZXJPZkFsbG9jYXRpb25zLCBBcnJheSk7CisKKyAgICAgICAgY29uc29sZS5wcm9maWxlRW5kKCk7
CisKKyAgICAgICAgaW5zdGFuY2VDb3VudHMgPSBjb3VudE9iamVjdEluc3RhbmNlcyhwcm9maWxl
VGl0bGUpOyAKKworICAgICAgICBsb2coIm51bWJlck9mQWxsb2NhdGlvbnMgcGVyIHR5cGUgaXMg
IiArIG51bWJlck9mQWxsb2NhdGlvbnMpOworICAgICAgICBzaG91bGRCZSgiaW5zdGFuY2VDb3Vu
dHNbJ09iamVjdCddIiwgJ251bWJlck9mQWxsb2NhdGlvbnMnKTsKKyAgICAgICAgc2hvdWxkQmUo
Imluc3RhbmNlQ291bnRzWydOdW1iZXInXSIsICdudW1iZXJPZkFsbG9jYXRpb25zJyk7CisgICAg
ICAgIHNob3VsZEJlKCJpbnN0YW5jZUNvdW50c1snQm9vbGVhbiddIiwgJ251bWJlck9mQWxsb2Nh
dGlvbnMnKTsKKyAgICAgICAgc2hvdWxkQmUoImluc3RhbmNlQ291bnRzWydSZWdFeHAnXSIsICdu
dW1iZXJPZkFsbG9jYXRpb25zJyk7CisgICAgICAgIHNob3VsZEJlKCJpbnN0YW5jZUNvdW50c1sn
RGF0ZSddIiwgJ251bWJlck9mQWxsb2NhdGlvbnMnKTsKKyAgICAgICAgc2hvdWxkQmUoImluc3Rh
bmNlQ291bnRzWydFcnJvciddIiwgJ251bWJlck9mQWxsb2NhdGlvbnMnKTsKKyAgICAgICAgc2hv
dWxkQmUoImluc3RhbmNlQ291bnRzWydTdHJpbmcnXSIsICdudW1iZXJPZkFsbG9jYXRpb25zJyk7
CisgICAgICAgIHNob3VsZEJlKCJpbnN0YW5jZUNvdW50c1snRnVuY3Rpb24nXSIsICdudW1iZXJP
ZkFsbG9jYXRpb25zICsgMicpOworICAgICAgICBzaG91bGRCZSgiaW5zdGFuY2VDb3VudHNbJ0Fy
cmF5J10iLCAnbnVtYmVyT2ZBbGxvY2F0aW9ucyArIDknKTsKKworICAgICAgICBlbmRNZW1vcnlU
ZXN0KCk7CisgICAgfQorPC9zY3JpcHQ+CisKKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0iaW5pdGlh
bGl6ZSgpOyBzdGFydFRlc3QoKTsiPgorICAgIDxwIGlkPSJkZXNjcmlwdGlvbiI+VGhpcyB0ZXN0
IGFsbG9jYXRlcyBhIGxhcmdlIG51bWJlciBvZiBvYmplY3RzIG9mIGEgc3BlY2lmaWMgdHlwZSwg
YW5kCisgICAgICAgIHZlcmlmaWVzIHRoYXQgdGhlIHJlc3BlY3RpdmUgb2YgYWxsb2NhdGlvbnMg
aGF2ZSBiZWVuIHJlZ2lzdGVyZSBpbiB0aGUgcHJvZmlsZS48cD4KKyAgICA8cD5UbyBydW4gdGhl
IHRlc3QgbWFudWFsbHksIGVuYWJsZSBwcm9maWxpbmcgZnJvbSB0aGUgV2ViIEluc3BlY3RvciBh
bmQgcmVmcmVzaCB0aGUgcGFnZS4KKyAgICAgICAgWW91IHNob3VsZCBzZWUgdGhlIGZvbGxvd2lu
ZyBvdXRwdXQ6PC9wPgorICAgIDxwcmU+CitudW1iZXJPZkFsbG9jYXRpb25zIHBlciB0eXBlIGlz
IDEwMDAwCisKK1BBU1MgaW5zdGFuY2VDb3VudHNbJ09iamVjdCddIGlzIG51bWJlck9mQWxsb2Nh
dGlvbnMKK1BBU1MgaW5zdGFuY2VDb3VudHNbJ051bWJlciddIGlzIG51bWJlck9mQWxsb2NhdGlv
bnMKK1BBU1MgaW5zdGFuY2VDb3VudHNbJ0Jvb2xlYW4nXSBpcyBudW1iZXJPZkFsbG9jYXRpb25z
CitQQVNTIGluc3RhbmNlQ291bnRzWydSZWdFeHAnXSBpcyBudW1iZXJPZkFsbG9jYXRpb25zCitQ
QVNTIGluc3RhbmNlQ291bnRzWydEYXRlJ10gaXMgbnVtYmVyT2ZBbGxvY2F0aW9ucworUEFTUyBp
bnN0YW5jZUNvdW50c1snRXJyb3InXSBpcyBudW1iZXJPZkFsbG9jYXRpb25zCitQQVNTIGluc3Rh
bmNlQ291bnRzWydTdHJpbmcnXSBpcyBudW1iZXJPZkFsbG9jYXRpb25zCitQQVNTIGluc3RhbmNl
Q291bnRzWydGdW5jdGlvbiddIGlzIG51bWJlck9mQWxsb2NhdGlvbnMgKyAyCitQQVNTIGluc3Rh
bmNlQ291bnRzWydBcnJheSddIGlzIG51bWJlck9mQWxsb2NhdGlvbnMgKyA5CisgICAgPC9wcmU+
CisgICAgPGRpdiBpZD0iY29uc29sZSI+PHAgc3R5bGU9ImNvbG9yOmJsdWUiPk91dHB1dCBmb2xs
b3dzPC9wPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9w
cm9maWxlci1tZW1vcnkvc2ltcGxlLWFsbG9jYXRpb24tdHJhY2UtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXItbWVtb3J5L3NpbXBsZS1hbGxvY2F0
aW9uLXRyYWNlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
cHJvZmlsZXItbWVtb3J5L3NpbXBsZS1hbGxvY2F0aW9uLXRyYWNlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorVGhpcyB0ZXN0IHZlcmlmaWVzIGNvcnJlY3Qgc3Rv
cmluZyBvZiBhbGxvY2F0aW9uIHRyYWNlcyBmb3Igb2JqZWN0cworCitUbyBydW4gdGhlIHRlc3Qg
bWFudWFsbHksIGVuYWJsZSBwcm9maWxpbmcgZnJvbSB0aGUgV2ViIEluc3BlY3RvciBhbmQgcmVm
cmVzaCB0aGUgcGFnZS4gWW91IHNob3VsZCBzZWUgdGhlIGZvbGxvd2luZyBvdXRwdXQ6CisKK09i
amVjdCB0eXBlOiBCb29sZWFuCitDcmVhdGVkIGZyb206IAorICAgQm9vbGVhbiAobm8gZmlsZSkg
KGxpbmUgMCkKKyAgICAgIHN0YXJ0VGVzdCBzaW1wbGUtYWxsb2NhdGlvbi10cmFjZS5odG1sIChs
aW5lIDE5KQorICAgICAgICAgVGhyZWFkXzEgKG5vIGZpbGUpIChsaW5lIDApCisKK09iamVjdCB0
eXBlOiBGdW5jdGlvbgorQ3JlYXRlZCBmcm9tOiAKKyAgIHN0YXJ0VGVzdCBzaW1wbGUtYWxsb2Nh
dGlvbi10cmFjZS5odG1sIChsaW5lIDE5KQorICAgICAgVGhyZWFkXzEgKG5vIGZpbGUpIChsaW5l
IDApCisKK09iamVjdCB0eXBlOiBOdW1iZXIKK0NyZWF0ZWQgZnJvbTogCisgICBOdW1iZXIgKG5v
IGZpbGUpIChsaW5lIDApCisgICAgICBuZXh0RnVuY3Rpb24gc2ltcGxlLWFsbG9jYXRpb24tdHJh
Y2UuaHRtbCAobGluZSAxNSkKKyAgICAgICAgIHN0YXJ0VGVzdCBzaW1wbGUtYWxsb2NhdGlvbi10
cmFjZS5odG1sIChsaW5lIDE5KQorICAgICAgICAgICAgVGhyZWFkXzEgKG5vIGZpbGUpIChsaW5l
IDApCisKK09iamVjdCB0eXBlOiBPYmplY3QKK0NyZWF0ZWQgZnJvbTogCisgICBPYmplY3QgKG5v
IGZpbGUpIChsaW5lIDApCisgICAgICAocHJvZ3JhbSkgKG5vIGZpbGUpIChsaW5lIDEpCisgICAg
ICAgICBldmFsIChubyBmaWxlKSAobGluZSAwKQorICAgICAgICAgICAgc3RhcnRUZXN0IHNpbXBs
ZS1hbGxvY2F0aW9uLXRyYWNlLmh0bWwgKGxpbmUgMTkpCisgICAgICAgICAgICAgICBUaHJlYWRf
MSAobm8gZmlsZSkgKGxpbmUgMCkgICAgCisgICAgCitPdXRwdXQgZm9sbG93cworCitPYmplY3Qg
dHlwZTogQm9vbGVhbgorQ3JlYXRlZCBmcm9tOiAKKyAgIEJvb2xlYW4gKG5vIGZpbGUpIChsaW5l
IDApCisgICAgICBzdGFydFRlc3Qgc2ltcGxlLWFsbG9jYXRpb24tdHJhY2UuaHRtbCAobGluZSAx
OSkKKyAgICAgICAgIFRocmVhZF8xIChubyBmaWxlKSAobGluZSAwKQorCitPYmplY3QgdHlwZTog
RnVuY3Rpb24KK0NyZWF0ZWQgZnJvbTogCisgICBzdGFydFRlc3Qgc2ltcGxlLWFsbG9jYXRpb24t
dHJhY2UuaHRtbCAobGluZSAxOSkKKyAgICAgIFRocmVhZF8xIChubyBmaWxlKSAobGluZSAwKQor
CitPYmplY3QgdHlwZTogTnVtYmVyCitDcmVhdGVkIGZyb206IAorICAgTnVtYmVyIChubyBmaWxl
KSAobGluZSAwKQorICAgICAgbmV4dEZ1bmN0aW9uIHNpbXBsZS1hbGxvY2F0aW9uLXRyYWNlLmh0
bWwgKGxpbmUgMTUpCisgICAgICAgICBzdGFydFRlc3Qgc2ltcGxlLWFsbG9jYXRpb24tdHJhY2Uu
aHRtbCAobGluZSAxOSkKKyAgICAgICAgICAgIFRocmVhZF8xIChubyBmaWxlKSAobGluZSAwKQor
CitPYmplY3QgdHlwZTogT2JqZWN0CitDcmVhdGVkIGZyb206IAorICAgT2JqZWN0IChubyBmaWxl
KSAobGluZSAwKQorICAgICAgKHByb2dyYW0pIChubyBmaWxlKSAobGluZSAxKQorICAgICAgICAg
ZXZhbCAobm8gZmlsZSkgKGxpbmUgMCkKKyAgICAgICAgICAgIHN0YXJ0VGVzdCBzaW1wbGUtYWxs
b2NhdGlvbi10cmFjZS5odG1sIChsaW5lIDE5KQorICAgICAgICAgICAgICAgVGhyZWFkXzEgKG5v
IGZpbGUpIChsaW5lIDApCisKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9wcm9maWxlci1tZW1v
cnkvc2ltcGxlLWFsbG9jYXRpb24tdHJhY2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3Byb2ZpbGVyLW1lbW9yeS9zaW1wbGUtYWxsb2NhdGlvbi10cmFjZS5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9wcm9maWxlci1tZW1vcnkvc2ltcGxlLWFsbG9j
YXRpb24tdHJhY2UuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Byb2ZpbGVyL3Jlc291cmNlcy9wcm9maWxlci10ZXN0LUpT
LXJlc291cmNlcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL21lbW9yeS1w
cm9maWxlci10ZXN0LWpzLXJlc291cmNlcy5qcyI+PC9zY3JpcHQ+CisKKzxzY3JpcHQ+CisgICAg
dmFyIHByb2ZpbGVUaXRsZSA9ICJTaW1wbGUgQWxsb2NhdGlvbiBUcmFjZSI7CisgICAgdmFyIGlu
U3RhcnRUZXN0OworICAgIHZhciBpbk5leHRGdW5jdGlvbjsKKyAgICB2YXIgaW5FdmFsOyAgICAg
ICAgCisKKyAgICBmdW5jdGlvbiBuZXh0RnVuY3Rpb24oKSB7CisgICAgICAgIGluTmV4dEZ1bmN0
aW9uID0gbmV3IE51bWJlcigpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHN0YXJ0VGVzdCgpIHsK
KyAgICAgICAgY29uc29sZS5wcm9maWxlKHByb2ZpbGVUaXRsZSk7CisgICAgICAgIGluU3RhcnRU
ZXN0ID0gbmV3IEJvb2xlYW4oKTsKKyAgICAgICAgZXZhbCgiaW5FdmFsID0gbmV3IE9iamVjdCgp
OyIpOworICAgICAgICBuZXh0RnVuY3Rpb24oKTsKKyAgICAgICAgY29uc29sZS5wcm9maWxlRW5k
KCk7CisKKyAgICAgICAgcHJpbnRQcm9maWxlKHByb2ZpbGVUaXRsZSwgdHlwZU5hbWVBc2NlbmRp
bmcsIHRydWUpOworCisgICAgICAgIGVuZE1lbW9yeVRlc3QoKTsKKyAgICB9Cis8L3NjcmlwdD4K
KworPC9oZWFkPgorPGJvZHkgb25sb2FkPSJpbml0aWFsaXplKCk7IHN0YXJ0VGVzdCgpOyI+Cisg
ICAgPHAgaWQ9ImRlc2NyaXB0aW9uIj5UaGlzIHRlc3QgdmVyaWZpZXMgY29ycmVjdCBzdG9yaW5n
IG9mIGFsbG9jYXRpb24gdHJhY2VzIGZvciBvYmplY3RzPHA+CisgICAgPHA+VG8gcnVuIHRoZSB0
ZXN0IG1hbnVhbGx5LCBlbmFibGUgcHJvZmlsaW5nIGZyb20gdGhlIFdlYiBJbnNwZWN0b3IgYW5k
IHJlZnJlc2ggdGhlIHBhZ2UuCisgICAgICAgIFlvdSBzaG91bGQgc2VlIHRoZSBmb2xsb3dpbmcg
b3V0cHV0OjwvcD4KKyAgICA8cHJlPgorT2JqZWN0IHR5cGU6IEJvb2xlYW4KK0NyZWF0ZWQgZnJv
bTogCisgICBCb29sZWFuIChubyBmaWxlKSAobGluZSAwKQorICAgICAgc3RhcnRUZXN0IHNpbXBs
ZS1hbGxvY2F0aW9uLXRyYWNlLmh0bWwgKGxpbmUgMTkpCisgICAgICAgICBUaHJlYWRfMSAobm8g
ZmlsZSkgKGxpbmUgMCkKKworT2JqZWN0IHR5cGU6IEZ1bmN0aW9uCitDcmVhdGVkIGZyb206IAor
ICAgc3RhcnRUZXN0IHNpbXBsZS1hbGxvY2F0aW9uLXRyYWNlLmh0bWwgKGxpbmUgMTkpCisgICAg
ICBUaHJlYWRfMSAobm8gZmlsZSkgKGxpbmUgMCkKKworT2JqZWN0IHR5cGU6IE51bWJlcgorQ3Jl
YXRlZCBmcm9tOiAKKyAgIE51bWJlciAobm8gZmlsZSkgKGxpbmUgMCkKKyAgICAgIG5leHRGdW5j
dGlvbiBzaW1wbGUtYWxsb2NhdGlvbi10cmFjZS5odG1sIChsaW5lIDE1KQorICAgICAgICAgc3Rh
cnRUZXN0IHNpbXBsZS1hbGxvY2F0aW9uLXRyYWNlLmh0bWwgKGxpbmUgMTkpCisgICAgICAgICAg
ICBUaHJlYWRfMSAobm8gZmlsZSkgKGxpbmUgMCkKKworT2JqZWN0IHR5cGU6IE9iamVjdAorQ3Jl
YXRlZCBmcm9tOiAKKyAgIE9iamVjdCAobm8gZmlsZSkgKGxpbmUgMCkKKyAgICAgIChwcm9ncmFt
KSAobm8gZmlsZSkgKGxpbmUgMSkKKyAgICAgICAgIGV2YWwgKG5vIGZpbGUpIChsaW5lIDApCisg
ICAgICAgICAgICBzdGFydFRlc3Qgc2ltcGxlLWFsbG9jYXRpb24tdHJhY2UuaHRtbCAobGluZSAx
OSkKKyAgICAgICAgICAgICAgIFRocmVhZF8xIChubyBmaWxlKSAobGluZSAwKSAgICAKKyAgICA8
L3ByZT4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48cCBzdHlsZT0iY29sb3I6Ymx1ZSI+T3V0cHV0
IGZvbGxvd3M8L3A+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3Byb2ZpbGVyLW1lbW9yeS9yZXNvdXJjZXMvVEVNUExBVEUuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3Byb2ZpbGVyLW1lbW9yeS9yZXNvdXJjZXMvVEVNUExBVEUuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXItbWVtb3J5L3Jlc291
cmNlcy9URU1QTEFURS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2IEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHls
ZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcHJvZmlsZXIvcmVzb3VyY2VzL3Byb2ZpbGVyLXRlc3Qt
SlMtcmVzb3VyY2VzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvbWVtb3J5
LXByb2ZpbGVyLXRlc3QtanMtcmVzb3VyY2VzLmpzIj48L3NjcmlwdD4KKworPHNjcmlwdD4KKyAg
ICBmdW5jdGlvbiBzdGFydFRlc3QoKSB7CisgICAgICAgIC8vVEVTVCBDT0RFCisgICAgICAgIGVu
ZE1lbW9yeVRlc3QoKTsKKyAgICB9Cis8L3NjcmlwdD4KKworPC9oZWFkPgorPGJvZHkgb25sb2Fk
PSJpbml0aWFsaXplKCk7IHN0YXJ0VGVzdCgpOyI+CisgICAgPHAgaWQ9ImRlc2NyaXB0aW9uIj5U
RVNUIERFU0NSSVBUSU9OPHA+CisgICAgPHA+VG8gcnVuIHRoZSB0ZXN0IG1hbnVhbGx5LCBlbmFi
bGUgcHJvZmlsaW5nIGZyb20gdGhlIFdlYiBJbnNwZWN0b3IgYW5kIHJlZnJlc2ggdGhlIHBhZ2Uu
CisgICAgICAgIFlvdSBzaG91bGQgc2VlIHRoZSBmb2xsb3dpbmcgb3V0cHV0OjwvcD4KKyAgICA8
cHJlPgorICAgICAgICA8IS0tIFlPVVIgRVhQRUNURUQgT1VUUFVULS0+CisgICAgPC9wcmU+Cisg
ICAgPGRpdiBpZD0iY29uc29sZSI+PHAgc3R5bGU9ImNvbG9yOmJsdWUiPk91dHB1dCBmb2xsb3dz
PC9wPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9wcm9m
aWxlci1tZW1vcnkvcmVzb3VyY2VzL21lbW9yeS1wcm9maWxlci10ZXN0LWpzLXJlc291cmNlcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3Byb2ZpbGVyLW1lbW9yeS9yZXNvdXJj
ZXMvbWVtb3J5LXByb2ZpbGVyLXRlc3QtanMtcmVzb3VyY2VzLmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9wcm9maWxlci1tZW1vcnkvcmVzb3VyY2VzL21lbW9yeS1wcm9maWxl
ci10ZXN0LWpzLXJlc291cmNlcy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDggQEAKK3Zh
ciBvdXRwdXREaXY7CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKSB7CisgICAgdmFyIHByZUVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwcmUiKTsKKyAgICBwcmVFbGVtZW50LmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKKyAgICBvdXRwdXREaXYu
YXBwZW5kQ2hpbGQocHJlRWxlbWVudCk7Cit9CisKK2Z1bmN0aW9uIGluaXRpYWxpemUoKSB7Cisg
ICAgb3V0cHV0RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKTsKKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0SmF2
YVNjcmlwdFByb2ZpbGluZ0VuYWJsZWQodHJ1ZSk7CisgICAgfQorICAgIGNvbnNvbGUuc2V0TWVt
b3J5UHJvZmlsaW5nRW5hYmxlZCh0cnVlKTsKK30KKworZnVuY3Rpb24gZW5kTWVtb3J5VGVzdCgp
IHsKKyAgICBjb25zb2xlLnNldE1lbW9yeVByb2ZpbGluZ0VuYWJsZWQoZmFsc2UpOworICAgIAor
ICAgIGlmKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBnZXRGaXJzdE9iamVjdE9mVHlw
ZShwcm9maWxlVGl0bGUsIHR5cGUpIHsKKyAgICB2YXIgcHJvZmlsZSA9IGdldFByb2ZpbGVCeVRp
dGxlKHByb2ZpbGVUaXRsZSk7CisgICAgdmFyIG9iamVjdHMgPSBwcm9maWxlLmxpdmVPYmplY3Rz
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0cy5sZW5ndGg7IGkrKykgeworICAgICAg
ICBpZiAob2JqZWN0c1tpXS50eXBlTmFtZSA9PSB0eXBlKQorICAgICAgICAgICAgcmV0dXJuIG9i
amVjdHNbaV07CisgICAgfQorfQorCitmdW5jdGlvbiBnZXRQcm9maWxlQnlUaXRsZSh0aXRsZSkg
eworICAgIHZhciBwcm9maWxlcyA9IGNvbnNvbGUucHJvZmlsZXM7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBwcm9maWxlcy5sZW5ndGg7IGkrKykKKyAgICAgICAgaWYgKHByb2ZpbGVzW2ldLnRp
dGxlID09PSB0aXRsZSkKKyAgICAgICAgICAgIHJldHVybiBwcm9maWxlc1tpXTsKKworICAgIHJl
dHVybiBudWxsOworfQorCitmdW5jdGlvbiBwcmludFByb2ZpbGUocHJvZmlsZVRpdGxlLCBzb3J0
RnVuY3Rpb24sIHdpdGhBbGxvY2F0aW9uVHJhY2UpIHsKKyAgICB2YXIgcHJvZmlsZSA9IGdldFBy
b2ZpbGVCeVRpdGxlKHByb2ZpbGVUaXRsZSk7CisgICAgaWYgKHByb2ZpbGUpIHsKKyAgICAgICAg
aWYgKCFzb3J0RnVuY3Rpb24pIHNvcnRGdW5jdGlvbiA9IHR5cGVOYW1lQXNjZW5kaW5nOworICAg
ICAgICB2YXIgbGl2ZU9iamVjdHMgPSBzb3J0UHJvZmlsZShwcm9maWxlLCBzb3J0RnVuY3Rpb24p
OworICAgICAgICB2YXIgcHJlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInByZSIp
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpdmVPYmplY3RzLmxlbmd0aDsgaSsrKQor
ICAgICAgICAgICAgcHJpbnRPYmplY3RJZGVudGlmaWVyKHByZUVsZW1lbnQsIGxpdmVPYmplY3Rz
W2ldLCB3aXRoQWxsb2NhdGlvblRyYWNlKTsKKworICAgICAgICBvdXRwdXREaXYuYXBwZW5kQ2hp
bGQocHJlRWxlbWVudCk7CisgICAgfQorfQorCitmdW5jdGlvbiBwcmludE9iamVjdElkZW50aWZp
ZXIocHJlRWxlbWVudCwgb2JqZWN0SWRlbnRpZmllciwgd2l0aEFsbG9jYXRpb25UcmFjZSkgewor
ICAgIHByZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIk9iamVj
dCB0eXBlOiAiICsgb2JqZWN0SWRlbnRpZmllci50eXBlTmFtZSArICJcbiIpKTsKKworICAgIGlm
ICh3aXRoQWxsb2NhdGlvblRyYWNlKSB7CisgICAgICAgIHByZUVsZW1lbnQuYXBwZW5kQ2hpbGQo
ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIkNyZWF0ZWQgZnJvbTogIiArICJcbiIpKTsKKyAgICAg
ICAgcHJpbnRTdGFja1RyYWNlKHByZUVsZW1lbnQsIG9iamVjdElkZW50aWZpZXIuY3JlYXRlZEZy
b20sIDEpOworICAgICAgICBwcmVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCJcbiIpKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHByaW50U2luZ2xlT2JqZWN0SWRl
bnRpZmllcihvYmplY3RJZGVudGlmaWVyLCB3aXRoQWxsb2NhdGlvblRyYWNlKSB7CisgICAgcHJl
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInByZSIpOworICAgIHByaW50T2JqZWN0
SWRlbnRpZmllcihwcmVFbGVtZW50LCBvYmplY3RJZGVudGlmaWVyLCB3aXRoQWxsb2NhdGlvblRy
YWNlKTsKKworICAgIG91dHB1dERpdi5hcHBlbmRDaGlsZChwcmVFbGVtZW50KTsKK30KKworZnVu
Y3Rpb24gcHJpbnRTdGFja1RyYWNlKHByZUVsZW1lbnQsIG5vZGUsIGluZGVudExldmVsKQorewor
ICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG5vZGUuZnVuY3Rpb25O
YW1lID09ICIoaWRsZSkiKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW5vZGUudmlzaWJs
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdmFyIHNwYWNlID0gIiI7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBpbmRlbnRMZXZlbDsgKytpKQorICAgICAgICBzcGFjZSArPSAiICAgIgorCisg
ICAgKytpbmRlbnRMZXZlbDsKKworICAgIHZhciBzdHJpcHBlZFVSTCA9IG5vZGUudXJsLnJlcGxh
Y2UoLy4qXC8vLCAiIik7CisgICAgaWYgKCFzdHJpcHBlZFVSTCkKKyAgICAgICAgc3RyaXBwZWRV
UkwgPSAiKG5vIGZpbGUpIjsKKworICAgIHZhciBsaW5lID0gc3BhY2UgKyBub2RlLmZ1bmN0aW9u
TmFtZSArICIgIiArIHN0cmlwcGVkVVJMICsgIiAobGluZSAiICsgbm9kZS5saW5lTnVtYmVyICsg
IilcbiI7CisgICAgcHJlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZShsaW5lKSk7CisKKyAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuOworICAgIHByaW50
U3RhY2tUcmFjZShwcmVFbGVtZW50LCBub2RlLnBhcmVudCwgaW5kZW50TGV2ZWwpOworfQorCitm
dW5jdGlvbiBzb3J0UHJvZmlsZShwcm9maWxlLCBzb3J0RnVuY3Rpb24pIHsKKyAgICB2YXIgc29y
dGVkQXJyYXkgPSBuZXcgQXJyYXkoKTsKKyAgICB2YXIgbG8gPSBwcm9maWxlLmxpdmVPYmplY3Rz
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG8ubGVuZ3RoOyBpKyspCisgICAgICAgIHNvcnRl
ZEFycmF5LnB1c2gobG9baV0pOworCisgICAgaWYgKHNvcnRGdW5jdGlvbikKKyAgICAgICAgc29y
dGVkQXJyYXkuc29ydChzb3J0RnVuY3Rpb24pOworICAgIAorICAgIHJldHVybiBzb3J0ZWRBcnJh
eTsKK30KKworZnVuY3Rpb24gdHlwZU5hbWVBc2NlbmRpbmcoYSwgYikgeworICAgIGlmIChhLnR5
cGVOYW1lIDwgYi50eXBlTmFtZSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UgaWYgKGEu
dHlwZU5hbWUgPiBiLnR5cGVOYW1lKQorICAgICAgICByZXR1cm4gMTsKKyAgICBlbHNlCisgICAg
ICAgIHJldHVybiAwOworfQorCitmdW5jdGlvbiB0eXBlTmFtZURlc2NlbmRpbmcoYSwgYikgewor
ICAgIHJldHVybiAtdHlwZU5hbWVBc2NlbmRpbmcoYSwgYik7Cit9CisKK2Z1bmN0aW9uIGNyZWF0
ZU9iamVjdHMob2JqZWN0TnVtYmVyLCBjb25zdHJ1Y3RvcikgeworICAgIHZhciBvYmplY3RBcnJh
eSA9IG5ldyBBcnJheSgpOworICAgIGZvciAoaSA9IDA7IGkgPCBvYmplY3ROdW1iZXI7IGkrKykK
KyAgICAgICAgb2JqZWN0QXJyYXkucHVzaChuZXcgY29uc3RydWN0b3IoKSk7CisKKyAgICByZXR1
cm4gb2JqZWN0QXJyYXk7Cit9CisKK2Z1bmN0aW9uIGNvdW50T2JqZWN0SW5zdGFuY2VzKHByb2Zp
bGVUaXRsZSkgeworICAgIHZhciBpbnN0YW5jZUNvdW50cyA9IG5ldyBPYmplY3QoKTsKKyAgICB2
YXIgcHJvZmlsZSA9IGdldFByb2ZpbGVCeVRpdGxlKHByb2ZpbGVUaXRsZSk7CisgICAgaWYgKHBy
b2ZpbGUpIHsKKyAgICAgICAgdmFyIGxvID0gcHJvZmlsZS5saXZlT2JqZWN0czsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBsby5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYoaW5z
dGFuY2VDb3VudHNbbG9baV0udHlwZU5hbWVdKQorICAgICAgICAgICAgICAgIGluc3RhbmNlQ291
bnRzW2xvW2ldLnR5cGVOYW1lXSArKzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBpbnN0YW5jZUNvdW50c1tsb1tpXS50eXBlTmFtZV0gPSAxOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIGluc3RhbmNlQ291bnRzOworfQo=
</data>
<flag name="review"
          id="16724"
          type_id="1"
          status="-"
          setter="kmccullough"
    />
          </attachment>
      

    </bug>

</bugzilla>