<?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>32993</bug_id>
          
          <creation_ts>2009-12-28 13:40:40 -0800</creation_ts>
          <short_desc>Blob.slice support</short_desc>
          <delta_ts>2013-05-21 09:50:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>32912</dependson>
    
    <dependson>34652</dependson>
          <blocked>35318</blocked>
    
    <blocked>48181</blocked>
    
    <blocked>116553</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jian Li">jianli</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dimich</cc>
    
    <cc>emacemac7</cc>
    
    <cc>eric</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>175303</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-12-28 13:40:40 -0800</bug_when>
    <thetext>Need to implement Blob.slice support as defined in HTML 5 File API spec: http://www.w3.org/TR/FileAPI/#dfn-slice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175329</commentid>
    <comment_count>1</comment_count>
      <attachid>45579</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-12-28 16:25:36 -0800</bug_when>
    <thetext>Created attachment 45579
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175330</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-28 16:29:30 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45579 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175331</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-28 16:36:13 -0800</bug_when>
    <thetext>Attachment 45579 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/151173</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175332</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-28 16:41:13 -0800</bug_when>
    <thetext>Attachment 45579 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/150287</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175342</commentid>
    <comment_count>5</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-12-28 17:47:10 -0800</bug_when>
    <thetext>File API is not part of HTML5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175352</commentid>
    <comment_count>6</comment_count>
      <attachid>45581</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-12-28 17:57:32 -0800</bug_when>
    <thetext>Created attachment 45581
Proposed Patch

Update the description in ChangeLog per the bug title change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175353</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-28 17:58:03 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45581 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175356</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-28 18:09:11 -0800</bug_when>
    <thetext>Attachment 45581 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/150327</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175357</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-28 18:10:56 -0800</bug_when>
    <thetext>Attachment 45581 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/151208</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175359</commentid>
    <comment_count>10</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-12-28 18:14:22 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Attachment 45581 [details] did not build on qt:
&gt; Build output: http://webkit-commit-queue.appspot.com/results/151208

The current patch is created on top of the patch for Bug 32912. Once it is checked in, I will create a new patch that should be buildable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178922</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-08 19:01:16 -0800</bug_when>
    <thetext>Attachment 45581 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/175057</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179936</commentid>
    <comment_count>12</comment_count>
      <attachid>45581</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-01-12 12:35:19 -0800</bug_when>
    <thetext>Comment on attachment 45581
Proposed Patch

Temporarily remove r? because the patch that must go first (bug 32912) is likely be updated in a way that can affect this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187558</commentid>
    <comment_count>13</comment_count>
      <attachid>48081</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-02-03 17:20:54 -0800</bug_when>
    <thetext>Created attachment 48081
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187571</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-03 17:49:56 -0800</bug_when>
    <thetext>Attachment 48081 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/232841</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187575</commentid>
    <comment_count>15</comment_count>
      <attachid>48087</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-02-03 17:59:20 -0800</bug_when>
    <thetext>Created attachment 48087
Proposed Patch

Fixed Chromium build break.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189152</commentid>
    <comment_count>16</comment_count>
      <attachid>48442</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-02-09 14:48:31 -0800</bug_when>
    <thetext>Created attachment 48442
Proposed Patch

Updated the patch to sync to the latest code, including patch for 34652.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189158</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-09 15:14:47 -0800</bug_when>
    <thetext>Attachment 48442 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/250768</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189165</commentid>
    <comment_count>18</comment_count>
      <attachid>48447</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-02-09 15:27:34 -0800</bug_when>
    <thetext>Created attachment 48447
Proposed Patch

Fixed chromium build break.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189228</commentid>
    <comment_count>19</comment_count>
      <attachid>48447</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-02-09 20:45:34 -0800</bug_when>
    <thetext>Comment on attachment 48447
Proposed Patch

&gt; diff --git a/LayoutTests/http/tests/local/resources/send-sliced-dragged-file.js b/LayoutTests/http/tests/local/resources/send-sliced-dragged-file.js
&gt; +function onUnstableFileDrop(file)
&gt; +
&gt; +    // The file modification time is second-based. So delay changing the file in order to get the new modification time for the file.
&gt; +    setTimeout(&quot;onModifyFile()&quot;, 500);

Ouch. Maybe better to say &quot;The file modification time has resolution of one second.&quot;, or something like that, to explain such a delay...

&gt; --- a/WebCore/ChangeLog

&gt; +        1) File.slice() does a synchronous IO to captures the current size and

&quot;to capture&quot;

&gt; diff --git a/WebCore/html/Blob.cpp b/WebCore/html/Blob.cpp
&gt; index 0b677ea..acf6142 100644
&gt; --- a/WebCore/html/Blob.cpp
&gt; +++ b/WebCore/html/Blob.cpp
&gt; @@ -37,17 +37,72 @@ namespace WebCore {
&gt;  
&gt;  Blob::Blob(const String&amp; path)
&gt;      : m_path(path)
&gt; +    , m_start(0)
&gt; +    , m_length(-1)
&gt; +    , m_snapshotSize(-1)
&gt; +    , m_snapshotModificationTime(0)

These 4 variables seems all have &apos;special values&apos; like 0 or -1 and this creates a matrix of possible behaviors. It&apos;s better to have a specific state expressed as bool variable (&quot;m_isPathOnly&quot; or &quot;m_snapshotCaptured&quot;) and have Asserts in accessor functions so that nobody could consume things like length() if the length is not actually valid. At least we should be able to enumerate and document all possible combinations and have asserts to verify that we are not getting out of valid space. For example, is it possible to have start(100), length(-1)? Probably not.

&gt;  unsigned long long Blob::size() const
&gt;  {
&gt; +    return static_cast&lt;unsigned long long&gt;((m_snapshotSize == -1) ? getFileSizeHelper() : m_length); 

This doesn&apos;t seem to need a cast.

&gt; +long long Blob::getFileSizeHelper() const
&gt; +{
&gt;      // FIXME: JavaScript cannot represent sizes as large as unsigned long long, we need to
&gt;      // come up with an exception to throw if file size is not represetable.
&gt;      long long size;
&gt;      if (!getFileSize(m_path, size))
&gt;          return 0;

This 0 means the file does not exist or is unreadable. It is not the same as having a file of size 0. Should the code differentiate?

&gt; +time_t Blob::getFileModificationTimeHelper() const
&gt; +{
&gt; +    time_t modificationTime;
&gt; +    if (!getFileModificationTime(m_path, modificationTime))
&gt; +        return 0;

Same thing here - the file likely does not exist (and may appear before the page will attempt to send it, which is a valid scenario).

&gt; diff --git a/WebCore/platform/network/FormData.h b/WebCore/platform/network/FormData.h
&gt; -    FormDataElement(const String&amp; filename, bool shouldGenerateFile) : m_type(encodedFile), m_filename(filename), m_shouldGenerateFile(shouldGenerateFile) { }
&gt; +    FormDataElement(const String&amp; filename, int64_t fileStart, int64_t fileLength, time_t fileModificationTime, bool shouldGenerateFile) : m_type(encodedFile), m_filename(filename), m_fileStart(fileStart), m_fileLength(fileLength), m_fileModificationTime(fileModificationTime), m_shouldGenerateFile(shouldGenerateFile) { }

shouldn&apos;t use int64. long long is better in WebCore.

&gt; +    int64_t m_fileStart;
&gt; +    int64_t m_fileLength;

Ditto.

&gt; +static bool advanceCurrentStream(FormStreamFields *form)

&gt; +        if (nextInput.m_fileModificationTime) {
&gt; +            time_t modificationTime;
&gt; +            if (getFileModificationTime(nextInput.m_filename, modificationTime) &amp;&amp; modificationTime != nextInput.m_fileModificationTime)
&gt; +                return false;
&gt; +        }

I think this check should be more complex. For example, we might have scenario when file did not exist before and now it does, and Blob is still &apos;floating&apos; (no captured snapshot).
Also, getFileModificationTime() may return false if there is no file and we might want to fail operation (if we had captured snapshot before).

&gt;          form-&gt;currentStream = CFReadStreamCreateWithFile(0, fileURL.get());
&gt; +        if (nextInput.m_fileStart &gt; 0) {
&gt; +            CFNumberRef position = CFNumberCreate(0, kCFNumberLongLongType, &amp;nextInput.m_fileStart);
&gt; +            CFReadStreamSetProperty(form-&gt;currentStream, kCFStreamPropertyFileCurrentOffset, position);

This code will probably need to be looked at by someone who udnerstands CF better...

Because of int64 and need to clean up the code around 4 variales with &apos;special values&apos; I mark it r-.
But, very good progress!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189416</commentid>
    <comment_count>20</comment_count>
      <attachid>48447</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-02-10 10:59:47 -0800</bug_when>
    <thetext>Comment on attachment 48447
Proposed Patch

&gt; +function onUnstableFileDrop(file)
&gt; +    // The file modification time is second-based. So delay changing the file in order to get the new modification time for the file.
&gt; +    setTimeout(&quot;onModifyFile()&quot;, 500);
&gt; +}
&gt; +
&gt; +function onModifyFile()
&gt; +    // Check the new modification time to make sure it is different. If not, repeat the above process.
&gt; +    if (tempFileCurrentModificationTime == tempFileOriginalModificationTime)
&gt; +        setTimeout(&apos;onModifyFile()&apos;, 500);
&gt; +    else
&gt; +        setTimeout(&apos;onUploadModifiedFile()&apos;, 0);
&gt; +}

Is there any way to avoid using setTimeout here? Are there any events you could listen to? setTimeouts like these almost always lead to flaky tests. Also they make the tests slow to run (avg test runtime is ~30ms). If you can think of any way to avoid them, please do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189553</commentid>
    <comment_count>21</comment_count>
      <attachid>48536</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-02-10 18:01:18 -0800</bug_when>
    <thetext>Created attachment 48536
Proposed Patch

All fixed. Also change the new layout test not to use setTimeout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189931</commentid>
    <comment_count>22</comment_count>
      <attachid>48536</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-02-11 21:46:03 -0800</bug_when>
    <thetext>Comment on attachment 48536
Proposed Patch

I think the new test send-sliced-dragged-file.html will have to be added to Skipped lists on at least 3 ports since they lack implementation of eventSender.beginDragWithFiles:

grep -R &quot;send-dragged-file&quot; LayoutTests/ --include=Skipped
 platform/gtk/Skipped:http/tests/local/send-dragged-file.html
 platform/qt/Skipped:http/tests/local/send-dragged-file.html
 platform/win/Skipped:http/tests/local/send-dragged-file.html

&gt; diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog

This ChangeLog could use a bit more info, you actually move the code to setup the input element for &quot;drop file on the input element&quot; kind of tests into separate file, create a script to change modification time of the file - not just adding a new test. 

&gt; diff --git a/LayoutTests/http/tests/local/resources/drag-file-to-file-input-element.js b/LayoutTests/http/tests/local/resources/drag-file-to-file-input-element.js

It seems this file should have a different name. It has nothing with actual &quot;drag-file..&quot;, it sets up the input element for dragging a file to it. Maybe &quot;setup-input-element-for-drag.js&quot;?

&gt; diff --git a/LayoutTests/http/tests/local/resources/send-sliced-dragged-file.js b/LayoutTests/http/tests/local/resources/send-sliced-dragged-file.js

&gt; +function dragAndSliceStableFile(start, length)
&gt; +{
&gt; +    sliceStart = start;
&gt; +    sliceLength = length;
&gt; +    setFileInputDropCallback(onStableFileDrop);
&gt; +    eventSender.beginDragWithFiles([&quot;resources/file-for-drag-to-send.txt&quot;]);

I think instead of having global sliceStart and slicelength it&apos;s possibel to do:
setFileInputDropCallback(function() { onStableFileDrop(start, length); });

&gt; +    // Touch the underlying temp file.
&gt; +    touchTempFile();

Awesome! Long setTimeout calls are all gone :-)

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog

&gt; +        1) File.slice() does a synchronous IO to captures the current size and

Typo: &quot;to captures&quot; -&gt; &quot;to capture&quot;

&gt; diff --git a/WebCore/html/HTMLFormElement.cpp b/WebCore/html/HTMLFormElement.cpp
&gt; -                        result-&gt;appendFile(value.file()-&gt;path(), shouldGenerateFile);
&gt; +                        result-&gt;appendFile(value.file()-&gt;path(), 0, -1, shouldGenerateFile);

There should be third parameter here - modificationTime. (as per declaration of the appendFile in FormData.h in this patch).

&gt; diff --git a/WebCore/platform/network/FormData.h b/WebCore/platform/network/FormData.h

&gt; @@ -32,11 +33,14 @@ class FormDataElement {
&gt;  public:
&gt;      FormDataElement() : m_type(data) { }
&gt;      FormDataElement(const Vector&lt;char&gt;&amp; array) : m_type(data), m_data(array) { }
&gt; -    FormDataElement(const String&amp; filename, bool shouldGenerateFile) : m_type(encodedFile), m_filename(filename), m_shouldGenerateFile(shouldGenerateFile) { }
&gt; +    FormDataElement(const String&amp; filename, long long fileStart, long long fileLength, time_t fileModificationTime, bool shouldGenerateFile) : m_type(encodedFile), m_filename(filename), m_fileStart(fileStart), m_fileLength(fileLength), m_fileModificationTime(fileModificationTime), m_shouldGenerateFile(shouldGenerateFile) { }

I think there should be a FormDataElement that simply has a Blob in it. While it was just filename, it was ok to keep a single string but now it&apos;s getting to all the internal members of Blob. Instead, we should be able to construct FormDataElement from Blob and keep reference to the Blob, without unpacking the data members. This will play well with future modifications of the Blob, when Blob itself will be an abstract interface, while FileBlob and perhaps CanvasBlob will have different internals.

It also allows to keep a Blob that didn&apos;t capture a snapshot intact until the time when actual file data will be pulled out. With the patch as is, xhr.send(file) will capture modificationTime of 0 at the moment of call and later fail comparing modification time. Keeping the Blob until the actual data read operation will preserve the ability to check the &quot;validity&quot; of the Blob at the right time.

&gt; diff --git a/WebCore/platform/network/mac/FormDataStreamMac.mm b/WebCore/platform/network/mac/FormDataStreamMac.mm

What about other platforms? I see you are preparing Chromium implementation in parallel, but since the actual reading of bytes is going to happen in resource loader of the embedder, do we need to define API for checking the validity of the data (perhaps on ResourceHandleClient ?). I think the embedder&apos;s code will at least need to figure out Content-Length header and then actually send data. So at some point it might &quot;ask for a snapshot&quot; for the Blob that was passed as Element of FormData. Also the embedder should have a way to return an error back that indicates that loading failed because the Element of the FormData happened to be invalid at the moment of sending.

I think this probably deserves a bit more thinking.

&gt; +        if (nextInput.m_fileModificationTime) {
&gt; +            time_t modificationTime;
&gt; +            if (!getFileModificationTime(nextInput.m_filename, modificationTime) || modificationTime != nextInput.m_fileModificationTime)
&gt; +                return false;
&gt; +        }

If file was always unreadable (even at the snapshot time), it may be reasonable to send it as 0 bytes.

I&apos;m going to r- this patch for now because it&apos;s not clear how various embedders will implement the functionality of checking the validity of the Blob and return error result. It is also not clear how to add other types of Blob in the future (will it require all embedders to add another type of FormDataElement or will there be a new interface for them which can serve as &quot;Blob reader&quot; for them).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193128</commentid>
    <comment_count>23</comment_count>
      <attachid>49327</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-02-23 14:23:31 -0800</bug_when>
    <thetext>Created attachment 49327
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193132</commentid>
    <comment_count>24</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-02-23 14:27:19 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; &gt; diff --git a/WebCore/platform/network/FormData.h b/WebCore/platform/network/FormData.h
&gt; 
&gt; &gt; @@ -32,11 +33,14 @@ class FormDataElement {
&gt; &gt;  public:
&gt; &gt;      FormDataElement() : m_type(data) { }
&gt; &gt;      FormDataElement(const Vector&lt;char&gt;&amp; array) : m_type(data), m_data(array) { }
&gt; &gt; -    FormDataElement(const String&amp; filename, bool shouldGenerateFile) : m_type(encodedFile), m_filename(filename), m_shouldGenerateFile(shouldGenerateFile) { }
&gt; &gt; +    FormDataElement(const String&amp; filename, long long fileStart, long long fileLength, time_t fileModificationTime, bool shouldGenerateFile) : m_type(encodedFile), m_filename(filename), m_fileStart(fileStart), m_fileLength(fileLength), m_fileModificationTime(fileModificationTime), m_shouldGenerateFile(shouldGenerateFile) { }
&gt; 
&gt; I think there should be a FormDataElement that simply has a Blob in it. While
&gt; it was just filename, it was ok to keep a single string but now it&apos;s getting to
&gt; all the internal members of Blob. Instead, we should be able to construct
&gt; FormDataElement from Blob and keep reference to the Blob, without unpacking the
&gt; data members. This will play well with future modifications of the Blob, when
&gt; Blob itself will be an abstract interface, while FileBlob and perhaps
&gt; CanvasBlob will have different internals.
&gt; 
&gt; It also allows to keep a Blob that didn&apos;t capture a snapshot intact until the
&gt; time when actual file data will be pulled out. With the patch as is,
&gt; xhr.send(file) will capture modificationTime of 0 at the moment of call and
&gt; later fail comparing modification time. Keeping the Blob until the actual data
&gt; read operation will preserve the ability to check the &quot;validity&quot; of the Blob at
&gt; the right time.
&gt; 
As we discussed, the current FormDataElement should be good enough to support file-based Blob and future binary Blob. So we do not want to make things more complicated here.

&gt; &gt; diff --git a/WebCore/platform/network/mac/FormDataStreamMac.mm b/WebCore/platform/network/mac/FormDataStreamMac.mm
&gt; 
&gt; What about other platforms? I see you are preparing Chromium implementation in
&gt; parallel, but since the actual reading of bytes is going to happen in resource
&gt; loader of the embedder, do we need to define API for checking the validity of
&gt; the data (perhaps on ResourceHandleClient ?). I think the embedder&apos;s code will
&gt; at least need to figure out Content-Length header and then actually send data.
&gt; So at some point it might &quot;ask for a snapshot&quot; for the Blob that was passed as
&gt; Element of FormData. Also the embedder should have a way to return an error
&gt; back that indicates that loading failed because the Element of the FormData
&gt; happened to be invalid at the moment of sending.
&gt; 
Add ENABLE_BLOB_SLICE define so that Blob.slice is only exposed for those platforms that support sending partial file.

&gt; I think this probably deserves a bit more thinking.
&gt; 
&gt; &gt; +        if (nextInput.m_fileModificationTime) {
&gt; &gt; +            time_t modificationTime;
&gt; &gt; +            if (!getFileModificationTime(nextInput.m_filename, modificationTime) || modificationTime != nextInput.m_fileModificationTime)
&gt; &gt; +                return false;
&gt; &gt; +        }
&gt; 
&gt; If file was always unreadable (even at the snapshot time), it may be reasonable
&gt; to send it as 0 bytes.
&gt; 
The logic to enforce this is in Blob.slice. See the code under the comment &quot;If we fail to retrieve the size or modification time, probably due to that the file has been deleted, an empty blob will be returned.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193197</commentid>
    <comment_count>25</comment_count>
      <attachid>49347</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-02-23 17:38:25 -0800</bug_when>
    <thetext>Created attachment 49347
Proposed Patch

Updated the patch to use ENABLE(BLOB_SLICE) all necessary code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193212</commentid>
    <comment_count>26</comment_count>
      <attachid>49347</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-02-23 18:32:00 -0800</bug_when>
    <thetext>Comment on attachment 49347
Proposed Patch

The patch looks good to me.

I think the ENABLE_BLOB_SLICE should also be added into following files since it&apos;s good to keep them in sync:

WebKitLibraries/win/tools/vsprops/FeatureDefines.vsprops
WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.vsprops
WebCore/WebCore.pri
WebCore/GNUMakefile.am (also it would be nice to replace spaces with tabs in front of &quot;WebCore/html/Blob.cpp,.h&quot; in this file)
WebKit/chromium/features.gypi

r- because of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193405</commentid>
    <comment_count>27</comment_count>
      <attachid>49408</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-02-24 10:30:52 -0800</bug_when>
    <thetext>Created attachment 49408
Proposed Patch

All fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193472</commentid>
    <comment_count>28</comment_count>
      <attachid>49408</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-02-24 13:11:20 -0800</bug_when>
    <thetext>Comment on attachment 49408
Proposed Patch

r=me but please ask someone familiar with WebCore/platform/network/mac/FormDataStreamMac.mm to take a look before landing, since I&apos;m not very familiar with CF.

It also would be nice to send headsup to owners of Qt, GTK, Apple Win ports to make sure they know about ENABLE_BLOB_SLICE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194135</commentid>
    <comment_count>29</comment_count>
      <attachid>49408</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-26 09:30:52 -0800</bug_when>
    <thetext>Comment on attachment 49408
Proposed Patch

&gt; +    m_elements.append(FormDataElement(filename, 0, -1, 0.0, shouldGenerateFile));

I find the use of numeric constants here confusing. Do the values have special meaning? If so, then there should be named constants for us to use.

&gt; +    m_elements.append(FormDataElement(filename, start, length, expectedModificationTime, false));

Here&apos;s a case where our use of boolean is confusing. You didn&apos;t add it, but the &quot;false&quot; hanging here is mysterious.

&gt; -static void advanceCurrentStream(FormStreamFields *form)
&gt; +static bool advanceCurrentStream(FormStreamFields *form)

If you&apos;re going to touch this line, then I think you should fix the formatting and move the * next to FormStreamFields.

You need a comment explaining what the boolean return value is. It&apos;s pretty mysterious otherwise.

&gt;      while (form-&gt;currentStream &amp;&amp; !CFReadStreamOpen(form-&gt;currentStream))
&gt; -        advanceCurrentStream(form);
&gt; +        if (!advanceCurrentStream(form))
&gt; +            return false;

WebKit coding style requires braces in a case like this.

&gt; +#if ENABLE(BLOB_SLICE)
&gt; +    newInfo-&gt;currentStreamRangeLength = -1;
&gt; +#endif

If -1 is a value with a special meaning it should be named constant.

&gt; +    error-&gt;error = opened ? 0 : fnOpnErr;

How did you chose fnOpnErr? I don&apos;t think it&apos;s the correct error code to use here. It&apos;s the error code for attempting operations that work only on open files on a file that is not open.

&gt; +#if ENABLE(BLOB_SLICE)
&gt; +        if (form-&gt;currentStreamRangeLength != -1 &amp;&amp; form-&gt;currentStreamRangeLength &lt; bytesToRead)

Again, need a named constant for -1 to make it clear what it means.

&gt; +            bytesToRead = static_cast&lt;CFIndex&gt;(form-&gt;currentStreamRangeLength);

What&apos;s the guarantee that a long long value can fit in a CFIndex? On 32-bit it might not fit.

&gt; +            if (form-&gt;currentStreamRangeLength != -1)

Again, need a named constant for -1 to make it clear what it means.

&gt; +            if (element.m_fileLength != -1) {

Again, need a named constant for -1 to make it clear what it means.

&gt; +                length += element.m_fileLength;
&gt; +                continue;

Does this handle the case correctly where m_fileLength is too big, and the file on disk is no longer that long?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194187</commentid>
    <comment_count>30</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-02-26 11:47:25 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; (From update of attachment 49408 [details])
&gt; &gt; +    m_elements.append(FormDataElement(filename, 0, -1, 0.0, shouldGenerateFile));
&gt; 
&gt; I find the use of numeric constants here confusing. Do the values have special
&gt; meaning? If so, then there should be named constants for us to use.

Added named constants in Blob.h for -1 and 0.0. The 0 for start seems to be straightforward and does not mean anything special. So I do not add the constant for it.
&gt; 
&gt; &gt; +    m_elements.append(FormDataElement(filename, start, length, expectedModificationTime, false));
&gt; 
&gt; Here&apos;s a case where our use of boolean is confusing. You didn&apos;t add it, but the
&gt; &quot;false&quot; hanging here is mysterious.

Changed the declaration of new function to also pass shouldGenerateFile so that we do not need to pass false here.
&gt; 
&gt; &gt; -static void advanceCurrentStream(FormStreamFields *form)
&gt; &gt; +static bool advanceCurrentStream(FormStreamFields *form)
&gt; 
&gt; If you&apos;re going to touch this line, then I think you should fix the formatting
&gt; and move the * next to FormStreamFields.

Fixed.
&gt; 
&gt; You need a comment explaining what the boolean return value is. It&apos;s pretty
&gt; mysterious otherwise.
&gt; 
&gt; &gt;      while (form-&gt;currentStream &amp;&amp; !CFReadStreamOpen(form-&gt;currentStream))
&gt; &gt; -        advanceCurrentStream(form);
&gt; &gt; +        if (!advanceCurrentStream(form))
&gt; &gt; +            return false;
&gt; 
&gt; WebKit coding style requires braces in a case like this.

Fixed.
&gt; 
&gt; &gt; +#if ENABLE(BLOB_SLICE)
&gt; &gt; +    newInfo-&gt;currentStreamRangeLength = -1;
&gt; &gt; +#endif
&gt; 
&gt; If -1 is a value with a special meaning it should be named constant.

Fixed.
&gt; 
&gt; &gt; +    error-&gt;error = opened ? 0 : fnOpnErr;
&gt; 
&gt; How did you chose fnOpnErr? I don&apos;t think it&apos;s the correct error code to use
&gt; here. It&apos;s the error code for attempting operations that work only on open
&gt; files on a file that is not open.

I tried to find an appropriate system error code for this, but did not get the right one. Our error means either the file does not exist now or has been changed. I still can&apos;t find a good error code to use. So I use fnfErr. Probably we can use it to mean the original file is not found. Please tell me if there is a better one.
&gt; 
&gt; &gt; +#if ENABLE(BLOB_SLICE)
&gt; &gt; +        if (form-&gt;currentStreamRangeLength != -1 &amp;&amp; form-&gt;currentStreamRangeLength &lt; bytesToRead)
&gt; 
&gt; Again, need a named constant for -1 to make it clear what it means.

Fixed.
&gt; 
&gt; &gt; +            bytesToRead = static_cast&lt;CFIndex&gt;(form-&gt;currentStreamRangeLength);
&gt; 
&gt; What&apos;s the guarantee that a long long value can fit in a CFIndex? On 32-bit it
&gt; might not fit.

Yes, I am aware of this. We only do the cast when form-&gt;currentStreamRangeLength is less than bufferLength.
    CFIndex bytesToRead = bufferLength;
    if (form-&gt;currentStreamRangeLength != Blob::toEndOfFile &amp;&amp; form-&gt;currentStreamRangeLength &lt; bytesToRead)
         bytesToRead = static_cast&lt;CFIndex&gt;(form-&gt;currentStreamRangeLength);
&gt; 
&gt; &gt; +            if (form-&gt;currentStreamRangeLength != -1)
&gt; 
&gt; Again, need a named constant for -1 to make it clear what it means.
&gt; 

Fixed.
&gt; &gt; +            if (element.m_fileLength != -1) {
&gt; 
&gt; Again, need a named constant for -1 to make it clear what it means.
&gt; 

Fixed.
&gt; &gt; +                length += element.m_fileLength;
&gt; &gt; +                continue;
&gt; 
&gt; Does this handle the case correctly where m_fileLength is too big, and the file
&gt; on disk is no longer that long?

Yes. We will check if the file has been changed right before reading the file (see advanceCurrentStream). I added a comment for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194188</commentid>
    <comment_count>31</comment_count>
      <attachid>49605</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-02-26 11:48:19 -0800</bug_when>
    <thetext>Created attachment 49605
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196641</commentid>
    <comment_count>32</comment_count>
      <attachid>49408</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-05 14:03:37 -0800</bug_when>
    <thetext>Comment on attachment 49408
Proposed Patch

Cleared Dmitry Titov&apos;s review+ from obsolete attachment 49408 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196759</commentid>
    <comment_count>33</comment_count>
      <attachid>49605</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-03-05 15:56:50 -0800</bug_when>
    <thetext>Comment on attachment 49605
Proposed Patch

It looks to me that Jian has addressed Darin&apos;s comments. Since I did most of reviewing in this bug before, I&apos;ll r+ it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197217</commentid>
    <comment_count>34</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-03-08 10:16:29 -0800</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/55670.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45579</attachid>
            <date>2009-12-28 16:25:36 -0800</date>
            <delta_ts>2009-12-28 17:57:32 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>32993</filename>
            <type>text/plain</type>
            <size>20658</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2OWI1ZGZlLi41ZjIxZjliIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMTIt
MjggIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhUTUw1OiBCbG9iLnNsaWNlIHN1cHBvcnQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjk5MworCisg
ICAgICAgIEFkZCBhIGxheW91dCB0ZXN0IHRvIHRlc3Qgc2xpY2luZyBhbmQgc2VuZGluZyBhIGZp
bGUuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9kcmFnLWZpbGUtdG8t
ZmlsZS1pbnB1dC1lbGVtZW50LmpzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2Fs
L3Jlc291cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0OgorICAgICAgICAqIGh0dHAvdGVz
dHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtZHJhZ2dlZC1maWxlLmpzOgorICAgICAgICAqIGh0dHAv
dGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qczogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1sOgorICAg
ICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFn
Z2VkLWZpbGUuaHRtbDogQWRkZWQuCisKIDIwMDktMTItMjMgIEppYW4gTGkgIDxqaWFubGlAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZHJhZy1maWxlLXRv
LWZpbGUtaW5wdXQtZWxlbWVudC5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVz
b3VyY2VzL2RyYWctZmlsZS10by1maWxlLWlucHV0LWVsZW1lbnQuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxMWYzNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL2RyYWctZmlsZS10by1maWxlLWlucHV0LWVs
ZW1lbnQuanMKQEAgLTAsMCArMSwzOSBAQAordmFyIGZpbGVJbnB1dCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImlucHV0Iik7CitmaWxlSW5wdXQudHlwZSA9ICJmaWxlIjsKK2ZpbGVJbnB1dC5z
dHlsZS53aWR0aCA9ICIxMDBweCI7CitmaWxlSW5wdXQuc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsK
Ky8vIEltcG9ydGFudCB0aGF0IHdlIHB1dCB0aGlzIGF0IHRoZSB0b3Agb2YgdGhlIGRvYyBzbyB0
aGF0IGxvZ2dpbmcgZG9lcyBub3QgY2F1c2UgaXQgdG8gZ28gb3V0IG9mIHZpZXcgKHdoZXJlIGl0
IGNhbid0IGJlIGRyYWdnZWQgdG8pCitkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShmaWxlSW5w
dXQsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7CisKK2ZpbGVJbnB1dC5hZGRFdmVudExpc3Rl
bmVyKCJkcmFnZW50ZXIiLCBmdW5jdGlvbigpIHsKKyAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgp
OworfSwgZmFsc2UpOworCitmaWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCBm
dW5jdGlvbigpIHsKKyAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworfSwgZmFsc2UpOworCitm
aWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsIGZ1bmN0aW9uKCkgeworICAgIGlmIChl
dmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5kZXhPZigiRmlsZXMiKSAhPSAtMSAmJiBldmVudC5k
YXRhVHJhbnNmZXIuZmlsZXMubGVuZ3RoID09IDEpCisgICAgICAgIHRlc3RQYXNzZWQoImV2ZW50
LmRhdGFUcmFuc2ZlciBjb250YWlucyBhIEZpbGUgb2JqZWN0IG9uIGRyb3AuIik7CisgICAgZWxz
ZSB7CisgICAgICAgIHRlc3RGYWlsZWQoImV2ZW50LmRhdGFUcmFuc2ZlciBkb2VzIG5vdCBjb250
YWluIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG9uRmlsZURyb3AoZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzWzBdKTsKKworICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2Z1bmN0aW9uIG1vdmVNb3VzZVRvQ2Vu
dGVyT2ZFbGVtZW50KGVsZW1lbnQpCit7CisgICAgdmFyIGNlbnRlclggPSBlbGVtZW50Lm9mZnNl
dExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMjsKKyAgICB2YXIgY2VudGVyWSA9IGVsZW1l
bnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOworICAgIGV2ZW50U2VuZGVy
Lm1vdXNlTW92ZVRvKGNlbnRlclgsIGNlbnRlclkpOworfQorCitmdW5jdGlvbiByZW1vdmVGaWxl
SW5wdXRFbGVtZW50KCkKK3sKKyAgICBmaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChm
aWxlSW5wdXQpCit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jl
c291cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9sb2NhbC9yZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dAppbmRleCA1YWIyZjhh
Li42YTUzN2I1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291
cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbG9jYWwvcmVzb3VyY2VzL2ZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQKQEAgLTEgKzEgQEAK
LUhlbGxvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorMTIzNDU2Nzg5MApcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9j
YWwvcmVzb3VyY2VzL3NlbmQtZHJhZ2dlZC1maWxlLmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanMKaW5kZXggM2MzOTNlOC4uY2U3
MTgzNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMv
c2VuZC1kcmFnZ2VkLWZpbGUuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9y
ZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanMKQEAgLTEsNDMgKzEsMTQgQEAKIGRlc2NyaXB0
aW9uKCJUZXN0IGZvciBzZW5kaW5nIGEgZHJhZ2dlZCBmaWxlIHZpYSBYTUxIdHRwUmVxdWVzdC4i
KTsKIAotdmFyIGZpbGVJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci1m
aWxlSW5wdXQudHlwZSA9ICJmaWxlIjsKLWZpbGVJbnB1dC5zdHlsZS53aWR0aCA9ICIxMDBweCI7
Ci1maWxlSW5wdXQuc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKLS8vIEltcG9ydGFudCB0aGF0IHdl
IHB1dCB0aGlzIGF0IHRoZSB0b3Agb2YgdGhlIGRvYyBzbyB0aGF0IGxvZ2dpbmcgZG9lcyBub3Qg
Y2F1c2UgaXQgdG8gZ28gb3V0IG9mIHZpZXcgKHdoZXJlIGl0IGNhbid0IGJlIGRyYWdnZWQgdG8p
Ci1kb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShmaWxlSW5wdXQsIGRvY3VtZW50LmJvZHkuZmly
c3RDaGlsZCk7Ci0KLWZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLCBmdW5j
dGlvbigpIHsKLSAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotfSwgZmFsc2UpOwotCi1maWxl
SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCBmdW5jdGlvbigpIHsKLSAgICBldmVu
dC5wcmV2ZW50RGVmYXVsdCgpOwotfSwgZmFsc2UpOwotCi1maWxlSW5wdXQuYWRkRXZlbnRMaXN0
ZW5lcigiZHJvcCIsIGZ1bmN0aW9uKCkgewotICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIudHlw
ZXMuaW5kZXhPZigiRmlsZXMiKSAhPSAtMSAmJiBldmVudC5kYXRhVHJhbnNmZXIuZmlsZXMubGVu
Z3RoID09IDEpCi0gICAgICAgIHRlc3RQYXNzZWQoImV2ZW50LmRhdGFUcmFuc2ZlciBjb250YWlu
cyBhIEZpbGUgb2JqZWN0IG9uIGRyb3AuIik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHRlc3RGYWls
ZWQoImV2ZW50LmRhdGFUcmFuc2ZlciBkb2VzIG5vdCBjb250YWluIGEgRmlsZSBvYmplY3Qgb24g
ZHJvcC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQorZnVuY3Rpb24gb25GaWxlRHJvcChm
aWxlKQorewogICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICB4aHIub3Bl
bigiUE9TVCIsICJodHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2Vz
L3Bvc3QtZWNoby5jZ2kiLCBmYWxzZSk7Ci0gICAgeGhyLnNlbmQoZXZlbnQuZGF0YVRyYW5zZmVy
LmZpbGVzWzBdKTsKLSAgICBpZiAoeGhyLnJlc3BvbnNlVGV4dCA9PSAiSGVsbG8iKQorICAgIHho
ci5zZW5kKGZpbGUpOworICAgIGlmICh4aHIucmVzcG9uc2VUZXh0ID09ICIxMjM0NTY3ODkwIikK
ICAgICAgICAgdGVzdFBhc3NlZCgiRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZC4iKTsK
ICAgICBlbHNlCiAgICAgICAgIHRlc3RGYWlsZWQoIlVuZXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSBy
ZWNlaXZlZDogIiArIHhoci5yZXNwb25zZVRleHQpOwotCi0gICAgZXZlbnQucHJldmVudERlZmF1
bHQoKTsKLX0sIGZhbHNlKTsKLQotZnVuY3Rpb24gbW92ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQo
ZWxlbWVudCkgewotICAgIHZhciBjZW50ZXJYID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVu
dC5vZmZzZXRXaWR0aCAvIDI7Ci0gICAgdmFyIGNlbnRlclkgPSBlbGVtZW50Lm9mZnNldFRvcCAr
IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMjsKLSAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhj
ZW50ZXJYLCBjZW50ZXJZKTsKIH0KIAogZnVuY3Rpb24gcnVuVGVzdCgpCkBAIC01MCw3ICsyMSw3
IEBAIGZ1bmN0aW9uIHJ1blRlc3QoKQogaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgewogICAgIHJ1
blRlc3QoKTsKICAgICAvLyBDbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMKLSAgICBmaWxlSW5wdXQu
cGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmaWxlSW5wdXQpOworICAgIHJlbW92ZUZpbGVJbnB1dEVs
ZW1lbnQoKTsKIH0gZWxzZSB7CiAgICAgdGVzdEZhaWxlZCgiVGhpcyB0ZXN0IGlzIG5vdCBpbnRl
cmFjdGl2ZSwgcGxlYXNlIHJ1biB1c2luZyBEdW1wUmVuZGVyVHJlZSIpOwogfQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1zbGljZWQtZHJh
Z2dlZC1maWxlLmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2Vu
ZC1zbGljZWQtZHJhZ2dlZC1maWxlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjFhMzIxZTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xv
Y2FsL3Jlc291cmNlcy9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuanMKQEAgLTAsMCArMSw0NSBA
QAorZGVzY3JpcHRpb24oIlRlc3QgZm9yIHNsaWNpbmcgYSBkcmFnZ2VkIGZpbGUgYW5kIHNlbmRp
bmcgaXQgdmlhIFhNTEh0dHBSZXF1ZXN0LiIpOworCit2YXIgb3JpZ2luYWxUZXh0ID0gIjEyMzQ1
Njc4OTAiOwordmFyIHNsaWNlU3RhcnQ7Cit2YXIgc2xpY2VMZW5ndGg7CisKK2Z1bmN0aW9uIG9u
RmlsZURyb3AoZmlsZSkKK3sKKyAgICB2YXIgZXhwZWN0ZWRUZXh0ID0gb3JpZ2luYWxUZXh0LnN1
YnN0cmluZyhzbGljZVN0YXJ0LCBzbGljZVN0YXJ0ICsgc2xpY2VMZW5ndGgpOworCisgICAgdmFy
IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6
Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcG9zdC1lY2hvLmNnaSIs
IGZhbHNlKTsKKyAgICB4aHIuc2VuZChmaWxlLnNsaWNlKHNsaWNlU3RhcnQsIHNsaWNlTGVuZ3Ro
KSk7CisKKyAgICBpZiAoeGhyLnJlc3BvbnNlVGV4dCA9PSBleHBlY3RlZFRleHQpCisgICAgICAg
IHRlc3RQYXNzZWQoIkV4cGVjdGVkIHJlc3BvbnNlIGRhdGEgcmVjZWl2ZWQ6ICIgKyB4aHIucmVz
cG9uc2VUZXh0KTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoIlVuZXhwZWN0ZWQgcmVz
cG9uc2UgZGF0YSByZWNlaXZlZDogIiArIHhoci5yZXNwb25zZVRleHQgKyAiLiBFeHBlY3RlZDog
IiArIGV4cGVjdGVkVGV4dCk7Cit9CisKK2Z1bmN0aW9uIGRyYWdBbmRTbGljZUZpbGUoc3RhcnQs
IGxlbmd0aCkKK3sKKyAgICBzbGljZVN0YXJ0ID0gc3RhcnQ7CisgICAgc2xpY2VMZW5ndGggPSBs
ZW5ndGg7CisgICAgZXZlbnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKFsicmVzb3VyY2VzL2Zp
bGUtZm9yLWRyYWctdG8tc2VuZC50eHQiXSk7CisgICAgbW92ZU1vdXNlVG9DZW50ZXJPZkVsZW1l
bnQoZmlsZUlucHV0KTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Cit9CisKK2Z1bmN0aW9u
IHJ1blRlc3QoKQoreworICAgIGRyYWdBbmRTbGljZUZpbGUoMiwgNCk7CisgICAgZHJhZ0FuZFNs
aWNlRmlsZSgyLCAyMCk7CisgICAgZHJhZ0FuZFNsaWNlRmlsZSgxNSwgMjApOworfQorCitpZiAo
d2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgcnVuVGVzdCgpOworICAgIC8vIENsZWFuIHVwIGFm
dGVyIG91cnNlbHZlcworICAgIHJlbW92ZUZpbGVJbnB1dEVsZW1lbnQoKTsKK30gZWxzZSB7Cisg
ICAgdGVzdEZhaWxlZCgiVGhpcyB0ZXN0IGlzIG5vdCBpbnRlcmFjdGl2ZSwgcGxlYXNlIHJ1biB1
c2luZyBEdW1wUmVuZGVyVHJlZSIpOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFnZ2Vk
LWZpbGUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFnZ2VkLWZp
bGUuaHRtbAppbmRleCAzZjIyMTBhLi5lMGM0YjA1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1sCkBAIC03LDYgKzcsNyBAQAog
PGJvZHk+CiA8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcmFnLWZpbGUtdG8tZmlsZS1pbnB1dC1lbGVtZW50
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CiA8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZlMWE5MQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGlj
ZWQtZHJhZ2dlZC1maWxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE1IEBACitUZXN0IGZvciBz
bGljaW5nIGEgZHJhZ2dlZCBmaWxlIGFuZCBzZW5kaW5nIGl0IHZpYSBYTUxIdHRwUmVxdWVzdC4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZXZlbnQuZGF0YVRyYW5zZmVy
IGNvbnRhaW5zIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4KK1BBU1MgRXhwZWN0ZWQgcmVzcG9uc2Ug
ZGF0YSByZWNlaXZlZDogMzQ1NgorUEFTUyBldmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBG
aWxlIG9iamVjdCBvbiBkcm9wLgorUEFTUyBFeHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVk
OiAzNDU2Nzg5MAorUEFTUyBldmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVj
dCBvbiBkcm9wLgorUEFTUyBFeHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAKK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5o
dG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZp
bGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2YyMDY0Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1k
cmFnZ2VkLWZpbGUuaHRtbApAQCAtMCwwICsxLDE0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNz
cyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcmFnLWZp
bGUtdG8tZmlsZS1pbnB1dC1lbGVtZW50LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCBkODNmNmIzLi43N2FhODFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDA5LTEy
LTI4ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIVE1MNTogQmxvYi5zbGljZSBzdXBwb3J0Lgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI5OTMKKwor
ICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5o
dG1sCisKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZUZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpkZWVw
Q29weSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURh
dGFFbGVtZW50OjpGb3JtRGF0YUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9
PSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW06
CisgICAgICAgIChXZWJDb3JlOjphZHZhbmNlQ3VycmVudFN0cmVhbSk6CisgICAgICAgIChXZWJD
b3JlOjpmb3JtQ3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1SZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEhUVFBCb2R5KToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNlbmQpOgorCiAyMDA5LTEyLTIz
ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQu
Y3BwIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5kZXggYmYyNWJmNi4uM2Rj
YmE0ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIv
V2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTI2Niw3ICsyNjYsNyBAQCBQYXNz
UmVmUHRyPEZvcm1EYXRhPiBIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZUZvcm1EYXRhKGNvbnN0IENT
dHJpbmcmIGJvdW5kYXJ5KQogICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZV90IGRhdGFTaXpl
ID0gdmFsdWUuZGF0YSgpLmxlbmd0aCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LT5hcHBlbmREYXRhKHZhbHVlLmRhdGEoKS5kYXRhKCksIGRhdGFTaXplKTsKICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAodmFsdWUuZmlsZSgpICYmICF2YWx1ZS5maWxlKCktPnBhdGgoKS5p
c0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZEZpbGUodmFs
dWUuZmlsZSgpLT5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQtPmFwcGVuZEZpbGUodmFsdWUuZmlsZSgpLT5wYXRoKCksIDAsIC0xLCBz
aG91bGRHZW5lcmF0ZUZpbGUpOwogCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5k
RGF0YSgiXHJcbiIsIDIpOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Rm9ybURhdGEuY3BwCmluZGV4IGFmM2I3ZjAuLmE0MDQ4ODIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhLmNwcApAQCAtMTA4LDcgKzEwOCw3IEBAIFBhc3NSZWZQdHI8Rm9ybURhdGE+
IEZvcm1EYXRhOjpkZWVwQ29weSgpIGNvbnN0CiAgICAgICAgICAgICBmb3JtRGF0YS0+bV9lbGVt
ZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUubV9kYXRhKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6OmVuY29kZWRGaWxlOgotICAgICAgICAg
ICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZmlsZW5h
bWUsIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsKKyAgICAgICAgICAgIGZvcm1EYXRhLT5tX2Vs
ZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2ZpbGVuYW1lLCBlLm1fZmlsZVN0YXJ0
LCBlLm1fZmlsZUxlbmd0aCwgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjUsOSArMTI1LDkgQEAgdm9pZCBGb3JtRGF0
YTo6YXBwZW5kRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKICAgICBtZW1jcHko
ZS5tX2RhdGEuZGF0YSgpICsgb2xkU2l6ZSwgZGF0YSwgc2l6ZSk7CiB9CiAKLXZvaWQgRm9ybURh
dGE6OmFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0
ZUZpbGUpCit2b2lkIEZvcm1EYXRhOjphcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUs
IGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgYm9vbCBzaG91bGRHZW5lcmF0ZUZp
bGUpCiB7Ci0gICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGZpbGVuYW1lLCBz
aG91bGRHZW5lcmF0ZUZpbGUpKTsKKyAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1l
bnQoZmlsZW5hbWUsIHN0YXJ0LCBsZW5ndGgsIHNob3VsZEdlbmVyYXRlRmlsZSkpOwogfQogCiB2
b2lkIEZvcm1EYXRhOjpmbGF0dGVuKFZlY3RvcjxjaGFyPiYgZGF0YSkgY29uc3QKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmgKaW5kZXggNzI3OGYyZS4uMDRiNjdlYiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmgKQEAgLTMyLDExICszMiwxMyBAQCBjbGFzcyBGb3JtRGF0YUVs
ZW1lbnQgewogcHVibGljOgogICAgIEZvcm1EYXRhRWxlbWVudCgpIDogbV90eXBlKGRhdGEpIHsg
fQogICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBWZWN0b3I8Y2hhcj4mIGFycmF5KSA6IG1fdHlw
ZShkYXRhKSwgbV9kYXRhKGFycmF5KSB7IH0KLSAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpIDogbV90eXBlKGVuY29kZWRG
aWxlKSwgbV9maWxlbmFtZShmaWxlbmFtZSksIG1fc2hvdWxkR2VuZXJhdGVGaWxlKHNob3VsZEdl
bmVyYXRlRmlsZSkgeyB9CisgICAgRm9ybURhdGFFbGVtZW50KGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIGludDY0X3QgZmlsZVN0YXJ0LCBpbnQ2NF90IGZpbGVMZW5ndGgsIGJvb2wgc2hvdWxkR2Vu
ZXJhdGVGaWxlKSA6IG1fdHlwZShlbmNvZGVkRmlsZSksIG1fZmlsZW5hbWUoZmlsZW5hbWUpLCBt
X2ZpbGVTdGFydChmaWxlU3RhcnQpLCBtX2ZpbGVMZW5ndGgoZmlsZUxlbmd0aCksIG1fc2hvdWxk
R2VuZXJhdGVGaWxlKHNob3VsZEdlbmVyYXRlRmlsZSkgeyB9CiAKICAgICBlbnVtIHsgZGF0YSwg
ZW5jb2RlZEZpbGUgfSBtX3R5cGU7CiAgICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKICAgICBTdHJp
bmcgbV9maWxlbmFtZTsKKyAgICBpbnQ2NF90IG1fZmlsZVN0YXJ0OworICAgIGludDY0X3QgbV9m
aWxlTGVuZ3RoOwogICAgIFN0cmluZyBtX2dlbmVyYXRlZEZpbGVuYW1lOwogICAgIGJvb2wgbV9z
aG91bGRHZW5lcmF0ZUZpbGU7CiB9OwpAQCAtNTAsNyArNTIsNyBAQCBpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYSwgY29uc3QgRm9ybURhdGFFbGVtZW50JiBi
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGEubV9kYXRhICE9IGIubV9kYXRhKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGEubV9maWxlbmFtZSAhPSBiLm1fZmlsZW5h
bWUpCisgICAgaWYgKGEubV9maWxlbmFtZSAhPSBiLm1fZmlsZW5hbWUgfHwgYS5tX2ZpbGVTdGFy
dCAhPSBiLm1fZmlsZVN0YXJ0IHx8IGEubV9maWxlTGVuZ3RoICE9IGIubV9maWxlTGVuZ3RoKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTcyLDcgKzc0LDcg
QEAgcHVibGljOgogICAgIH5Gb3JtRGF0YSgpOwogICAgIAogICAgIHZvaWQgYXBwZW5kRGF0YShj
b25zdCB2b2lkKiBkYXRhLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kRmlsZShjb25zdCBTdHJp
bmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlKTsKKyAgICB2b2lk
IGFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIHN0YXJ0LCBsb25n
IGxvbmcgbGVuZ3RoLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlKTsKIAogICAgIHZv
aWQgZmxhdHRlbihWZWN0b3I8Y2hhcj4mKSBjb25zdDsgLy8gb21pdHMgZmlsZXMKICAgICBTdHJp
bmcgZmxhdHRlblRvU3RyaW5nKCkgY29uc3Q7IC8vIG9taXRzIGZpbGVzCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQppbmRleCA4YWE5YTZk
Li43M2EyMzQ5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1E
YXRhU3RyZWFtTWFjLm1tCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURh
dGFTdHJlYW1NYWMubW0KQEAgLTEyNSw2ICsxMjUsNyBAQCBzdHJ1Y3QgRm9ybVN0cmVhbUZpZWxk
cyB7CiAgICAgU2NoZWR1bGVQYWlySGFzaFNldCBzY2hlZHVsZWRSdW5Mb29wUGFpcnM7CiAgICAg
VmVjdG9yPEZvcm1EYXRhRWxlbWVudD4gcmVtYWluaW5nRWxlbWVudHM7IC8vIGluIHJldmVyc2Ug
b3JkZXIKICAgICBDRlJlYWRTdHJlYW1SZWYgY3VycmVudFN0cmVhbTsKKyAgICBsb25nIGxvbmcg
Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoOwogICAgIGNoYXIqIGN1cnJlbnREYXRhOwogICAgIENG
UmVhZFN0cmVhbVJlZiBmb3JtU3RyZWFtOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdHJlYW1M
ZW5ndGg7CkBAIC0xNjQsNiArMTY1LDExIEBAIHN0YXRpYyB2b2lkIGFkdmFuY2VDdXJyZW50U3Ry
ZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0pCiAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gZmlsZW5hbWUoQWRvcHRDRiwgcGF0aC5jcmVhdGVDRlN0cmluZygpKTsKICAgICAgICAgUmV0
YWluUHRyPENGVVJMUmVmPiBmaWxlVVJMKEFkb3B0Q0YsIENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0
ZW1QYXRoKDAsIGZpbGVuYW1lLmdldCgpLCBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwgRkFMU0UpKTsK
ICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbSA9IENGUmVhZFN0cmVhbUNyZWF0ZVdpdGhGaWxl
KDAsIGZpbGVVUkwuZ2V0KCkpOworICAgICAgICBpZiAobmV4dElucHV0Lm1fZmlsZVN0YXJ0ID4g
MCkgeworICAgICAgICAgICAgQ0ZOdW1iZXJSZWYgcG9zaXRpb24gPSBDRk51bWJlckNyZWF0ZSgw
LCBrQ0ZOdW1iZXJMb25nTG9uZ1R5cGUsICZuZXh0SW5wdXQubV9maWxlU3RhcnQpOworICAgICAg
ICAgICAgQ0ZSZWFkU3RyZWFtU2V0UHJvcGVydHkoZm9ybS0+Y3VycmVudFN0cmVhbSwga0NGU3Ry
ZWFtUHJvcGVydHlGaWxlQ3VycmVudE9mZnNldCwgcG9zaXRpb24pOworICAgICAgICB9CisgICAg
ICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IG5leHRJbnB1dC5tX2ZpbGVMZW5n
dGg7CiAgICAgfQogICAgIGZvcm0tPnJlbWFpbmluZ0VsZW1lbnRzLnJlbW92ZUxhc3QoKTsKIApA
QCAtMTk0LDYgKzIwMCw3IEBAIHN0YXRpYyB2b2lkKiBmb3JtQ3JlYXRlKENGUmVhZFN0cmVhbVJl
ZiBzdHJlYW0sIHZvaWQqIGNvbnRleHQpCiAKICAgICBGb3JtU3RyZWFtRmllbGRzKiBuZXdJbmZv
ID0gbmV3IEZvcm1TdHJlYW1GaWVsZHM7CiAgICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbSA9IE5V
TEw7CisgICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gLTE7CiAgICAgbmV3
SW5mby0+Y3VycmVudERhdGEgPSAwOwogICAgIG5ld0luZm8tPmZvcm1TdHJlYW0gPSBzdHJlYW07
IC8vIERvbid0IHJldGFpbi4gVGhhdCB3b3VsZCBjcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUuCiAg
ICAgbmV3SW5mby0+c3RyZWFtTGVuZ3RoID0gZm9ybUNvbnRleHQtPnN0cmVhbUxlbmd0aDsKQEAg
LTIzOCw3ICsyNDUsMTAgQEAgc3RhdGljIENGSW5kZXggZm9ybVJlYWQoQ0ZSZWFkU3RyZWFtUmVm
IHN0cmVhbSwgVUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBidWZmZXJMZW4KICAgICBGb3JtU3RyZWFt
RmllbGRzKiBmb3JtID0gc3RhdGljX2Nhc3Q8Rm9ybVN0cmVhbUZpZWxkcyo+KGNvbnRleHQpOwog
CiAgICAgd2hpbGUgKGZvcm0tPmN1cnJlbnRTdHJlYW0pIHsKLSAgICAgICAgQ0ZJbmRleCBieXRl
c1JlYWQgPSBDRlJlYWRTdHJlYW1SZWFkKGZvcm0tPmN1cnJlbnRTdHJlYW0sIGJ1ZmZlciwgYnVm
ZmVyTGVuZ3RoKTsKKyAgICAgICAgQ0ZJbmRleCBieXRlc1RvUmVhZCA9IGJ1ZmZlckxlbmd0aDsK
KyAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAhPSAtMSAmJiBmb3Jt
LT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPCBieXRlc1RvUmVhZCkKKyAgICAgICAgICAgIGJ5
dGVzVG9SZWFkID0gc3RhdGljX2Nhc3Q8Q0ZJbmRleD4oZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdl
TGVuZ3RoKTsKKyAgICAgICAgQ0ZJbmRleCBieXRlc1JlYWQgPSBDRlJlYWRTdHJlYW1SZWFkKGZv
cm0tPmN1cnJlbnRTdHJlYW0sIGJ1ZmZlciwgYnl0ZXNUb1JlYWQpOwogICAgICAgICBpZiAoYnl0
ZXNSZWFkIDwgMCkgewogICAgICAgICAgICAgKmVycm9yID0gQ0ZSZWFkU3RyZWFtR2V0RXJyb3Io
Zm9ybS0+Y3VycmVudFN0cmVhbSk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC0yNDcsNiAr
MjU3LDggQEAgc3RhdGljIENGSW5kZXggZm9ybVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwg
VUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBidWZmZXJMZW4KICAgICAgICAgICAgIGVycm9yLT5lcnJv
ciA9IDA7CiAgICAgICAgICAgICAqYXRFT0YgPSBGQUxTRTsKICAgICAgICAgICAgIGZvcm0tPmJ5
dGVzU2VudCArPSBieXRlc1JlYWQ7CisgICAgICAgICAgICBpZiAoZm9ybS0+Y3VycmVudFN0cmVh
bVJhbmdlTGVuZ3RoICE9IC0xKQorICAgICAgICAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1S
YW5nZUxlbmd0aCAtPSBieXRlc1JlYWQ7CiAKICAgICAgICAgICAgIGlmICghUmVzb3VyY2VIYW5k
bGU6OmRpZFNlbmRCb2R5RGF0YURlbGVnYXRlRXhpc3RzKCkpIHsKICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogRmlndXJlIG91dCBob3cgdG8gb25seSBkbyB0aGlzIHdoZW4gYSBSZXNvdXJjZUhh
bmRsZUNsaWVudCBpcyBhdmFpbGFibGUuCkBAIC0zNTksOSArMzcxLDEzIEBAIHZvaWQgc2V0SFRU
UEJvZHkoTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCwgUGFzc1JlZlB0cjxGb3JtRGF0YT4g
Zm9ybURhdGEpCiAgICAgICAgIGlmIChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6
OmRhdGEpCiAgICAgICAgICAgICBsZW5ndGggKz0gZWxlbWVudC5tX2RhdGEuc2l6ZSgpOwogICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIGxvbmcgbG9uZyBmaWxlU2l6ZTsKLSAgICAgICAgICAg
IGlmIChnZXRGaWxlU2l6ZShlbGVtZW50Lm1fc2hvdWxkR2VuZXJhdGVGaWxlID8gZWxlbWVudC5t
X2dlbmVyYXRlZEZpbGVuYW1lIDogZWxlbWVudC5tX2ZpbGVuYW1lLCBmaWxlU2l6ZSkpCi0gICAg
ICAgICAgICAgICAgbGVuZ3RoICs9IGZpbGVTaXplOworICAgICAgICAgICAgaWYgKGVsZW1lbnQu
bV9maWxlTGVuZ3RoICE9IC0xKSB7CisgICAgICAgICAgICAgICAgbGVuZ3RoICs9IGVsZW1lbnQu
bV9maWxlTGVuZ3RoOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb25n
IGxvbmcgZmlsZVNpemU7CisgICAgICAgICAgICAgICAgaWYgKGdldEZpbGVTaXplKGVsZW1lbnQu
bV9zaG91bGRHZW5lcmF0ZUZpbGUgPyBlbGVtZW50Lm1fZ2VuZXJhdGVkRmlsZW5hbWUgOiBlbGVt
ZW50Lm1fZmlsZW5hbWUsIGZpbGVTaXplKSkKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9
IGZpbGVTaXplOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdC5jcHAKaW5kZXggMzI4MThkZi4uNzIyN2RjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApA
QCAtNDQ0LDcgKzQ0NCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoQmxvYiogYm9keSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ugc2V0IGEgQ29u
dGVudC1UeXBlIGlmIG9uZSBpcyBub3Qgc2V0LgogICAgICAgICAvLyBGSVhNRTogYWRkIHN1cHBv
cnQgZm9yIHVwbG9hZGluZyBidW5kbGVzLgogICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5ID0g
Rm9ybURhdGE6OmNyZWF0ZSgpOwotICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRG
aWxlKGJvZHktPnBhdGgoKSwgZmFsc2UpOworICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5h
cHBlbmRGaWxlKGJvZHktPnBhdGgoKSwgYm9keS0+c3RhcnQoKSwgYm9keS0+bGVuZ3RoKCksIGZh
bHNlKTsKICAgICB9CiAKICAgICBjcmVhdGVSZXF1ZXN0KGVjKTsKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDM0
ZmZlNWIuLjZlZmY2ZjcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDA5LTEyLTI4
ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIVE1MNTogQmxvYi5zbGljZSBzdXBwb3J0LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI5OTMKKworICAg
ICAgICBDaHJvbWl1bS1zaWRlIGNoYW5nZSB0byBzdXBwb3J0IEJsb2Iuc2xpY2UuCisKKyAgICAg
ICAgKiBwdWJsaWMvV2ViSFRUUEJvZHkuaDoKKyAgICAgICAgKiBzcmMvV2ViSFRUUEJvZHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJIVFRQQm9keTo6ZWxlbWVudEF0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViSFRUUEJvZHk6OmFwcGVuZEZpbGUpOgorCiAyMDA5LTEyLTIyICBLZW5uZXRoIFJ1
c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRl
bC4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSFRUUEJvZHkuaCBiL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSFRUUEJvZHkuaAppbmRleCA0M2Y1MWE2Li40NjcyMGY5
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkhUVFBCb2R5LmgKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJIVFRQQm9keS5oCkBAIC01MCw2ICs1MCw4IEBAIHB1
YmxpYzoKICAgICAgICAgZW51bSB7IFR5cGVEYXRhLCBUeXBlRmlsZSB9IHR5cGU7CiAgICAgICAg
IFdlYkRhdGEgZGF0YTsKICAgICAgICAgV2ViU3RyaW5nIGZpbGVQYXRoOworICAgICAgICBsb25n
IGxvbmcgZmlsZVN0YXJ0OworICAgICAgICBsb25nIGxvbmcgZmlsZUxlbmd0aDsKICAgICB9Owog
CiAgICAgfldlYkhUVFBCb2R5KCkgeyByZXNldCgpOyB9CkBAIC03Nyw3ICs3OSw3IEBAIHB1Ymxp
YzoKIAogICAgIC8vIEFwcGVuZCB0byB0aGUgbGlzdCBvZiBlbGVtZW50cy4KICAgICBXRUJLSVRf
QVBJIHZvaWQgYXBwZW5kRGF0YShjb25zdCBXZWJEYXRhJik7Ci0gICAgV0VCS0lUX0FQSSB2b2lk
IGFwcGVuZEZpbGUoY29uc3QgV2ViU3RyaW5nJik7CisgICAgV0VCS0lUX0FQSSB2b2lkIGFwcGVu
ZEZpbGUoY29uc3QgV2ViU3RyaW5nJiwgbG9uZyBsb25nIGZpbGVTdGFydCwgbG9uZyBsb25nIGZp
bGVMZW5ndGgpOwogCiAgICAgLy8gSWRlbnRpZmllcyBhIHBhcnRpY3VsYXIgZm9ybSBzdWJtaXNz
aW9uIGluc3RhbmNlLiAgQSB2YWx1ZSBvZiAwIGlzCiAgICAgLy8gdXNlZCB0byBpbmRpY2F0ZSBh
biB1bnNwZWNpZmllZCBpZGVudGlmaWVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJIVFRQQm9keS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhUVFBCb2R5LmNwcApp
bmRleCAzMzVlZDVjLi45MTA2YzEwIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkhUVFBCb2R5LmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhUVFBCb2R5LmNwcApA
QCAtODMsNiArODMsOCBAQCBib29sIFdlYkhUVFBCb2R5OjplbGVtZW50QXQoc2l6ZV90IGluZGV4
LCBFbGVtZW50JiByZXN1bHQpIGNvbnN0CiAgICAgICAgIHJlc3VsdC50eXBlID0gRWxlbWVudDo6
VHlwZUZpbGU7CiAgICAgICAgIHJlc3VsdC5kYXRhLnJlc2V0KCk7CiAgICAgICAgIHJlc3VsdC5m
aWxlUGF0aCA9IGVsZW1lbnQubV9maWxlbmFtZTsKKyAgICAgICAgcmVzdWx0LmZpbGVTdGFydCA9
IGVsZW1lbnQubV9maWxlU3RhcnQ7CisgICAgICAgIHJlc3VsdC5maWxlTGVuZ3RoID0gZWxlbWVu
dC5tX2ZpbGVMZW5ndGg7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTAwLDEwICsxMDIsMTAgQEAgdm9pZCBXZWJIVFRQQm9k
eTo6YXBwZW5kRGF0YShjb25zdCBXZWJEYXRhJiBkYXRhKQogICAgIG1fcHJpdmF0ZS0+YXBwZW5k
RGF0YShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQogCi12b2lkIFdlYkhUVFBCb2R5Ojph
cHBlbmRGaWxlKGNvbnN0IFdlYlN0cmluZyYgZmlsZVBhdGgpCit2b2lkIFdlYkhUVFBCb2R5Ojph
cHBlbmRGaWxlKGNvbnN0IFdlYlN0cmluZyYgZmlsZVBhdGgsIGxvbmcgbG9uZyBmaWxlU3RhcnQs
IGxvbmcgbG9uZyBmaWxlTGVuZ3RoKQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3By
aXZhdGUtPmFwcGVuZEZpbGUoZmlsZVBhdGgpOworICAgIG1fcHJpdmF0ZS0+YXBwZW5kRmlsZShm
aWxlUGF0aCwgZmlsZVN0YXJ0LCBmaWxlTGVuZ3RoKTsKIH0KIAogbG9uZyBsb25nIFdlYkhUVFBC
b2R5OjppZGVudGlmaWVyKCkgY29uc3QK
</data>
<flag name="commit-queue"
          id="27639"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45581</attachid>
            <date>2009-12-28 17:57:32 -0800</date>
            <delta_ts>2010-02-03 17:20:54 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>32993_2</filename>
            <type>text/plain</type>
            <size>20637</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2OWI1ZGZlLi5kOTA0NWFmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMTIt
MjggIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJsb2Iuc2xpY2Ugc3VwcG9ydC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkzCisKKyAgICAgICAg
QWRkIGEgbGF5b3V0IHRlc3QgdG8gdGVzdCBzbGljaW5nIGFuZCBzZW5kaW5nIGEgZmlsZS4KKwor
ICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL2RyYWctZmlsZS10by1maWxlLWlu
cHV0LWVsZW1lbnQuanM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvcmVzb3Vy
Y2VzL2ZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy9sb2Nh
bC9yZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanM6CisgICAgICAgICogaHR0cC90ZXN0cy9s
b2NhbC9yZXNvdXJjZXMvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWw6CisgICAgICAgICog
aHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmls
ZS5odG1sOiBBZGRlZC4KKwogMjAwOS0xMi0yMyAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9kcmFnLWZpbGUtdG8tZmlsZS1p
bnB1dC1lbGVtZW50LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMv
ZHJhZy1maWxlLXRvLWZpbGUtaW5wdXQtZWxlbWVudC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi41NTExZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZHJhZy1maWxlLXRvLWZpbGUtaW5wdXQtZWxlbWVudC5q
cwpAQCAtMCwwICsxLDM5IEBACit2YXIgZmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiaW5wdXQiKTsKK2ZpbGVJbnB1dC50eXBlID0gImZpbGUiOworZmlsZUlucHV0LnN0eWxlLndp
ZHRoID0gIjEwMHB4IjsKK2ZpbGVJbnB1dC5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOworLy8gSW1w
b3J0YW50IHRoYXQgd2UgcHV0IHRoaXMgYXQgdGhlIHRvcCBvZiB0aGUgZG9jIHNvIHRoYXQgbG9n
Z2luZyBkb2VzIG5vdCBjYXVzZSBpdCB0byBnbyBvdXQgb2YgdmlldyAod2hlcmUgaXQgY2FuJ3Qg
YmUgZHJhZ2dlZCB0bykKK2RvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGZpbGVJbnB1dCwgZG9j
dW1lbnQuYm9keS5maXJzdENoaWxkKTsKKworZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImRy
YWdlbnRlciIsIGZ1bmN0aW9uKCkgeworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBm
YWxzZSk7CisKK2ZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIGZ1bmN0aW9u
KCkgeworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2ZpbGVJbnB1
dC5hZGRFdmVudExpc3RlbmVyKCJkcm9wIiwgZnVuY3Rpb24oKSB7CisgICAgaWYgKGV2ZW50LmRh
dGFUcmFuc2Zlci50eXBlcy5pbmRleE9mKCJGaWxlcyIpICE9IC0xICYmIGV2ZW50LmRhdGFUcmFu
c2Zlci5maWxlcy5sZW5ndGggPT0gMSkKKyAgICAgICAgdGVzdFBhc3NlZCgiZXZlbnQuZGF0YVRy
YW5zZmVyIGNvbnRhaW5zIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4iKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgdGVzdEZhaWxlZCgiZXZlbnQuZGF0YVRyYW5zZmVyIGRvZXMgbm90IGNvbnRhaW4gYSBG
aWxlIG9iamVjdCBvbiBkcm9wLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb25G
aWxlRHJvcChldmVudC5kYXRhVHJhbnNmZXIuZmlsZXNbMF0pOworCisgICAgZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKK30sIGZhbHNlKTsKKworZnVuY3Rpb24gbW92ZU1vdXNlVG9DZW50ZXJPZkVs
ZW1lbnQoZWxlbWVudCkKK3sKKyAgICB2YXIgY2VudGVyWCA9IGVsZW1lbnQub2Zmc2V0TGVmdCAr
IGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOworICAgIHZhciBjZW50ZXJZID0gZWxlbWVudC5vZmZz
ZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7CisgICAgZXZlbnRTZW5kZXIubW91c2VN
b3ZlVG8oY2VudGVyWCwgY2VudGVyWSk7Cit9CisKK2Z1bmN0aW9uIHJlbW92ZUZpbGVJbnB1dEVs
ZW1lbnQoKQoreworICAgIGZpbGVJbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGZpbGVJbnB1
dCkKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2Vz
L2ZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2Fs
L3Jlc291cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0CmluZGV4IDVhYjJmOGEuLjZhNTM3
YjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL2Zp
bGUtZm9yLWRyYWctdG8tc2VuZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2Nh
bC9yZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dApAQCAtMSArMSBAQAotSGVsbG8K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisxMjM0NTY3ODkwClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNv
dXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2Fs
L3Jlc291cmNlcy9zZW5kLWRyYWdnZWQtZmlsZS5qcwppbmRleCAzYzM5M2U4Li5jZTcxODM1IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWRy
YWdnZWQtZmlsZS5qcworKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNl
cy9zZW5kLWRyYWdnZWQtZmlsZS5qcwpAQCAtMSw0MyArMSwxNCBAQAogZGVzY3JpcHRpb24oIlRl
c3QgZm9yIHNlbmRpbmcgYSBkcmFnZ2VkIGZpbGUgdmlhIFhNTEh0dHBSZXF1ZXN0LiIpOwogCi12
YXIgZmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLWZpbGVJbnB1
dC50eXBlID0gImZpbGUiOwotZmlsZUlucHV0LnN0eWxlLndpZHRoID0gIjEwMHB4IjsKLWZpbGVJ
bnB1dC5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOwotLy8gSW1wb3J0YW50IHRoYXQgd2UgcHV0IHRo
aXMgYXQgdGhlIHRvcCBvZiB0aGUgZG9jIHNvIHRoYXQgbG9nZ2luZyBkb2VzIG5vdCBjYXVzZSBp
dCB0byBnbyBvdXQgb2YgdmlldyAod2hlcmUgaXQgY2FuJ3QgYmUgZHJhZ2dlZCB0bykKLWRvY3Vt
ZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGZpbGVJbnB1dCwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxk
KTsKLQotZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdlbnRlciIsIGZ1bmN0aW9uKCkg
ewotICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci19LCBmYWxzZSk7Ci0KLWZpbGVJbnB1dC5h
ZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIGZ1bmN0aW9uKCkgewotICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7Ci19LCBmYWxzZSk7Ci0KLWZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJk
cm9wIiwgZnVuY3Rpb24oKSB7Ci0gICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcy5pbmRl
eE9mKCJGaWxlcyIpICE9IC0xICYmIGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGggPT0g
MSkKLSAgICAgICAgdGVzdFBhc3NlZCgiZXZlbnQuZGF0YVRyYW5zZmVyIGNvbnRhaW5zIGEgRmls
ZSBvYmplY3Qgb24gZHJvcC4iKTsKLSAgICBlbHNlIHsKLSAgICAgICAgdGVzdEZhaWxlZCgiZXZl
bnQuZGF0YVRyYW5zZmVyIGRvZXMgbm90IGNvbnRhaW4gYSBGaWxlIG9iamVjdCBvbiBkcm9wLiIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCitmdW5jdGlvbiBvbkZpbGVEcm9wKGZpbGUpCit7
CiAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgIHhoci5vcGVuKCJQT1NU
IiwgImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcG9zdC1l
Y2hvLmNnaSIsIGZhbHNlKTsKLSAgICB4aHIuc2VuZChldmVudC5kYXRhVHJhbnNmZXIuZmlsZXNb
MF0pOwotICAgIGlmICh4aHIucmVzcG9uc2VUZXh0ID09ICJIZWxsbyIpCisgICAgeGhyLnNlbmQo
ZmlsZSk7CisgICAgaWYgKHhoci5yZXNwb25zZVRleHQgPT0gIjEyMzQ1Njc4OTAiKQogICAgICAg
ICB0ZXN0UGFzc2VkKCJFeHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkLiIpOwogICAgIGVs
c2UKICAgICAgICAgdGVzdEZhaWxlZCgiVW5leHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVk
OiAiICsgeGhyLnJlc3BvbnNlVGV4dCk7Ci0KLSAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwot
fSwgZmFsc2UpOwotCi1mdW5jdGlvbiBtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudChlbGVtZW50
KSB7Ci0gICAgdmFyIGNlbnRlclggPSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNl
dFdpZHRoIC8gMjsKLSAgICB2YXIgY2VudGVyWSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVu
dC5vZmZzZXRIZWlnaHQgLyAyOwotICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGNlbnRlclgs
IGNlbnRlclkpOwogfQogCiBmdW5jdGlvbiBydW5UZXN0KCkKQEAgLTUwLDcgKzIxLDcgQEAgZnVu
Y3Rpb24gcnVuVGVzdCgpCiBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CiAgICAgcnVuVGVzdCgp
OwogICAgIC8vIENsZWFuIHVwIGFmdGVyIG91cnNlbHZlcwotICAgIGZpbGVJbnB1dC5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKGZpbGVJbnB1dCk7CisgICAgcmVtb3ZlRmlsZUlucHV0RWxlbWVudCgp
OwogfSBlbHNlIHsKICAgICB0ZXN0RmFpbGVkKCJUaGlzIHRlc3QgaXMgbm90IGludGVyYWN0aXZl
LCBwbGVhc2UgcnVuIHVzaW5nIER1bXBSZW5kZXJUcmVlIik7CiB9CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZp
bGUuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLXNsaWNl
ZC1kcmFnZ2VkLWZpbGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEz
MjFlMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVz
b3VyY2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qcwpAQCAtMCwwICsxLDQ1IEBACitkZXNj
cmlwdGlvbigiVGVzdCBmb3Igc2xpY2luZyBhIGRyYWdnZWQgZmlsZSBhbmQgc2VuZGluZyBpdCB2
aWEgWE1MSHR0cFJlcXVlc3QuIik7CisKK3ZhciBvcmlnaW5hbFRleHQgPSAiMTIzNDU2Nzg5MCI7
Cit2YXIgc2xpY2VTdGFydDsKK3ZhciBzbGljZUxlbmd0aDsKKworZnVuY3Rpb24gb25GaWxlRHJv
cChmaWxlKQoreworICAgIHZhciBleHBlY3RlZFRleHQgPSBvcmlnaW5hbFRleHQuc3Vic3RyaW5n
KHNsaWNlU3RhcnQsIHNsaWNlU3RhcnQgKyBzbGljZUxlbmd0aCk7CisKKyAgICB2YXIgeGhyID0g
bmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9wZW4oIlBPU1QiLCAiaHR0cDovLzEyNy4w
LjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9wb3N0LWVjaG8uY2dpIiwgZmFsc2Up
OworICAgIHhoci5zZW5kKGZpbGUuc2xpY2Uoc2xpY2VTdGFydCwgc2xpY2VMZW5ndGgpKTsKKwor
ICAgIGlmICh4aHIucmVzcG9uc2VUZXh0ID09IGV4cGVjdGVkVGV4dCkKKyAgICAgICAgdGVzdFBh
c3NlZCgiRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDogIiArIHhoci5yZXNwb25zZVRl
eHQpOworICAgIGVsc2UKKyAgICAgICAgdGVzdEZhaWxlZCgiVW5leHBlY3RlZCByZXNwb25zZSBk
YXRhIHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4dCArICIuIEV4cGVjdGVkOiAiICsgZXhw
ZWN0ZWRUZXh0KTsKK30KKworZnVuY3Rpb24gZHJhZ0FuZFNsaWNlRmlsZShzdGFydCwgbGVuZ3Ro
KQoreworICAgIHNsaWNlU3RhcnQgPSBzdGFydDsKKyAgICBzbGljZUxlbmd0aCA9IGxlbmd0aDsK
KyAgICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMoWyJyZXNvdXJjZXMvZmlsZS1mb3It
ZHJhZy10by1zZW5kLnR4dCJdKTsKKyAgICBtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudChmaWxl
SW5wdXQpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKK30KKworZnVuY3Rpb24gcnVuVGVz
dCgpCit7CisgICAgZHJhZ0FuZFNsaWNlRmlsZSgyLCA0KTsKKyAgICBkcmFnQW5kU2xpY2VGaWxl
KDIsIDIwKTsKKyAgICBkcmFnQW5kU2xpY2VGaWxlKDE1LCAyMCk7Cit9CisKK2lmICh3aW5kb3cu
ZXZlbnRTZW5kZXIpIHsKKyAgICBydW5UZXN0KCk7CisgICAgLy8gQ2xlYW4gdXAgYWZ0ZXIgb3Vy
c2VsdmVzCisgICAgcmVtb3ZlRmlsZUlucHV0RWxlbWVudCgpOworfSBlbHNlIHsKKyAgICB0ZXN0
RmFpbGVkKCJUaGlzIHRlc3QgaXMgbm90IGludGVyYWN0aXZlLCBwbGVhc2UgcnVuIHVzaW5nIER1
bXBSZW5kZXJUcmVlIik7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5o
dG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1s
CmluZGV4IDNmMjIxMGEuLmUwYzRiMDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbG9jYWwvc2VuZC1kcmFnZ2VkLWZpbGUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWwKQEAgLTcsNiArNyw3IEBACiA8Ym9keT4K
IDxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgogPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL2RyYWctZmlsZS10by1maWxlLWlucHV0LWVsZW1lbnQuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9InJlc291cmNlcy9zZW5kLWRyYWdnZWQtZmlsZS5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KIDwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmUxYTkxCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFn
Z2VkLWZpbGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTUgQEAKK1Rlc3QgZm9yIHNsaWNpbmcg
YSBkcmFnZ2VkIGZpbGUgYW5kIHNlbmRpbmcgaXQgdmlhIFhNTEh0dHBSZXF1ZXN0LgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBldmVudC5kYXRhVHJhbnNmZXIgY29udGFp
bnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLgorUEFTUyBFeHBlY3RlZCByZXNwb25zZSBkYXRhIHJl
Y2VpdmVkOiAzNDU2CitQQVNTIGV2ZW50LmRhdGFUcmFuc2ZlciBjb250YWlucyBhIEZpbGUgb2Jq
ZWN0IG9uIGRyb3AuCitQQVNTIEV4cGVjdGVkIHJlc3BvbnNlIGRhdGEgcmVjZWl2ZWQ6IDM0NTY3
ODkwCitQQVNTIGV2ZW50LmRhdGFUcmFuc2ZlciBjb250YWlucyBhIEZpbGUgb2JqZWN0IG9uIGRy
b3AuCitQQVNTIEV4cGVjdGVkIHJlc3BvbnNlIGRhdGEgcmVjZWl2ZWQ6IAorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZjIwNjQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQt
ZmlsZS5odG1sCkBAIC0wLDAgKzEsMTQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQi
IGhyZWY9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2RyYWctZmlsZS10by1m
aWxlLWlucHV0LWVsZW1lbnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9z
ZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
Ly4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGQ4M2Y2YjMuLmQ3NzcxODIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMDktMTItMjggIEpp
YW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEJsb2Iuc2xpY2Ugc3VwcG9ydC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkzCisKKyAgICAgICAgVGVzdDog
aHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbAorCisgICAgICAg
ICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1F
bGVtZW50OjpjcmVhdGVGb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6ZGVlcENvcHkpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEZpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvRm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6Rm9y
bURhdGFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6YWR2YW5jZUN1cnJlbnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybUNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpmb3JtUmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRI
VFRQQm9keSk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKwogMjAwOS0xMi0yMyAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IGJmMjViZjYuLjNkY2JhNGUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUVsZW1lbnQuY3BwCkBAIC0yNjYsNyArMjY2LDcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0
YT4gSFRNTEZvcm1FbGVtZW50OjpjcmVhdGVGb3JtRGF0YShjb25zdCBDU3RyaW5nJiBib3VuZGFy
eSkKICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemVfdCBkYXRhU2l6ZSA9IHZhbHVlLmRhdGEo
KS5sZW5ndGgoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRGF0YSh2
YWx1ZS5kYXRhKCkuZGF0YSgpLCBkYXRhU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHZhbHVlLmZpbGUoKSAmJiAhdmFsdWUuZmlsZSgpLT5wYXRoKCkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmRGaWxlKHZhbHVlLmZpbGUoKS0+cGF0
aCgpLCBzaG91bGRHZW5lcmF0ZUZpbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LT5hcHBlbmRGaWxlKHZhbHVlLmZpbGUoKS0+cGF0aCgpLCAwLCAtMSwgc2hvdWxkR2VuZXJhdGVG
aWxlKTsKIAogICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEoIlxyXG4iLCAy
KTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcApp
bmRleCBhZjNiN2YwLi5hNDA0ODgyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5j
cHAKQEAgLTEwOCw3ICsxMDgsNyBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6ZGVl
cENvcHkoKSBjb25zdAogICAgICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5kKEZv
cm1EYXRhRWxlbWVudChlLm1fZGF0YSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgRm9ybURhdGFFbGVtZW50OjplbmNvZGVkRmlsZToKLSAgICAgICAgICAgIGZvcm1EYXRhLT5t
X2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2ZpbGVuYW1lLCBlLm1fc2hvdWxk
R2VuZXJhdGVGaWxlKSk7CisgICAgICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQo
Rm9ybURhdGFFbGVtZW50KGUubV9maWxlbmFtZSwgZS5tX2ZpbGVTdGFydCwgZS5tX2ZpbGVMZW5n
dGgsIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMTI1LDkgKzEyNSw5IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZERhdGEo
Y29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCiAgICAgbWVtY3B5KGUubV9kYXRhLmRhdGEo
KSArIG9sZFNpemUsIGRhdGEsIHNpemUpOwogfQogCi12b2lkIEZvcm1EYXRhOjphcHBlbmRGaWxl
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKQordm9pZCBG
b3JtRGF0YTo6YXBwZW5kRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3Rh
cnQsIGxvbmcgbG9uZyBsZW5ndGgsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKQogewotICAgIG1f
ZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChmaWxlbmFtZSwgc2hvdWxkR2VuZXJhdGVG
aWxlKSk7CisgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGZpbGVuYW1lLCBz
dGFydCwgbGVuZ3RoLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKIH0KIAogdm9pZCBGb3JtRGF0YTo6
ZmxhdHRlbihWZWN0b3I8Y2hhcj4mIGRhdGEpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YS5oCmluZGV4IDcyNzhmMmUuLjA0YjY3ZWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9Gb3JtRGF0YS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YS5oCkBAIC0zMiwxMSArMzIsMTMgQEAgY2xhc3MgRm9ybURhdGFFbGVtZW50IHsKIHB1Ymxp
YzoKICAgICBGb3JtRGF0YUVsZW1lbnQoKSA6IG1fdHlwZShkYXRhKSB7IH0KICAgICBGb3JtRGF0
YUVsZW1lbnQoY29uc3QgVmVjdG9yPGNoYXI+JiBhcnJheSkgOiBtX3R5cGUoZGF0YSksIG1fZGF0
YShhcnJheSkgeyB9Ci0gICAgRm9ybURhdGFFbGVtZW50KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUs
IGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKSA6IG1fdHlwZShlbmNvZGVkRmlsZSksIG1fZmlsZW5h
bWUoZmlsZW5hbWUpLCBtX3Nob3VsZEdlbmVyYXRlRmlsZShzaG91bGRHZW5lcmF0ZUZpbGUpIHsg
fQorICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBpbnQ2NF90IGZp
bGVTdGFydCwgaW50NjRfdCBmaWxlTGVuZ3RoLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkgOiBt
X3R5cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVuYW1lKGZpbGVuYW1lKSwgbV9maWxlU3RhcnQoZmls
ZVN0YXJ0KSwgbV9maWxlTGVuZ3RoKGZpbGVMZW5ndGgpLCBtX3Nob3VsZEdlbmVyYXRlRmlsZShz
aG91bGRHZW5lcmF0ZUZpbGUpIHsgfQogCiAgICAgZW51bSB7IGRhdGEsIGVuY29kZWRGaWxlIH0g
bV90eXBlOwogICAgIFZlY3RvcjxjaGFyPiBtX2RhdGE7CiAgICAgU3RyaW5nIG1fZmlsZW5hbWU7
CisgICAgaW50NjRfdCBtX2ZpbGVTdGFydDsKKyAgICBpbnQ2NF90IG1fZmlsZUxlbmd0aDsKICAg
ICBTdHJpbmcgbV9nZW5lcmF0ZWRGaWxlbmFtZTsKICAgICBib29sIG1fc2hvdWxkR2VuZXJhdGVG
aWxlOwogfTsKQEAgLTUwLDcgKzUyLDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBG
b3JtRGF0YUVsZW1lbnQmIGEsIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGlmIChhLm1fZGF0YSAhPSBiLm1fZGF0YSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChhLm1fZmlsZW5hbWUgIT0gYi5tX2ZpbGVuYW1lKQorICAgIGlmIChh
Lm1fZmlsZW5hbWUgIT0gYi5tX2ZpbGVuYW1lIHx8IGEubV9maWxlU3RhcnQgIT0gYi5tX2ZpbGVT
dGFydCB8fCBhLm1fZmlsZUxlbmd0aCAhPSBiLm1fZmlsZUxlbmd0aCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC03Miw3ICs3NCw3IEBAIHB1YmxpYzoKICAg
ICB+Rm9ybURhdGEoKTsKICAgICAKICAgICB2b2lkIGFwcGVuZERhdGEoY29uc3Qgdm9pZCogZGF0
YSwgc2l6ZV90KTsKLSAgICB2b2lkIGFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwg
Ym9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CisgICAgdm9pZCBhcHBlbmRGaWxlKGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwg
Ym9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CiAKICAgICB2b2lkIGZsYXR0ZW4oVmVj
dG9yPGNoYXI+JikgY29uc3Q7IC8vIG9taXRzIGZpbGVzCiAgICAgU3RyaW5nIGZsYXR0ZW5Ub1N0
cmluZygpIGNvbnN0OyAvLyBvbWl0cyBmaWxlcwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbSBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KaW5kZXggOGFhOWE2ZC4uNzNhMjM0OSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5t
bQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1t
CkBAIC0xMjUsNiArMTI1LDcgQEAgc3RydWN0IEZvcm1TdHJlYW1GaWVsZHMgewogICAgIFNjaGVk
dWxlUGFpckhhc2hTZXQgc2NoZWR1bGVkUnVuTG9vcFBhaXJzOwogICAgIFZlY3RvcjxGb3JtRGF0
YUVsZW1lbnQ+IHJlbWFpbmluZ0VsZW1lbnRzOyAvLyBpbiByZXZlcnNlIG9yZGVyCiAgICAgQ0ZS
ZWFkU3RyZWFtUmVmIGN1cnJlbnRTdHJlYW07CisgICAgbG9uZyBsb25nIGN1cnJlbnRTdHJlYW1S
YW5nZUxlbmd0aDsKICAgICBjaGFyKiBjdXJyZW50RGF0YTsKICAgICBDRlJlYWRTdHJlYW1SZWYg
Zm9ybVN0cmVhbTsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc3RyZWFtTGVuZ3RoOwpAQCAtMTY0
LDYgKzE2NSwxMSBAQCBzdGF0aWMgdm9pZCBhZHZhbmNlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFt
RmllbGRzICpmb3JtKQogICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZpbGVuYW1lKEFk
b3B0Q0YsIHBhdGguY3JlYXRlQ0ZTdHJpbmcoKSk7CiAgICAgICAgIFJldGFpblB0cjxDRlVSTFJl
Zj4gZmlsZVVSTChBZG9wdENGLCBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBmaWxl
bmFtZS5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIEZBTFNFKSk7CiAgICAgICAgIGZvcm0t
PmN1cnJlbnRTdHJlYW0gPSBDRlJlYWRTdHJlYW1DcmVhdGVXaXRoRmlsZSgwLCBmaWxlVVJMLmdl
dCgpKTsKKyAgICAgICAgaWYgKG5leHRJbnB1dC5tX2ZpbGVTdGFydCA+IDApIHsKKyAgICAgICAg
ICAgIENGTnVtYmVyUmVmIHBvc2l0aW9uID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVyTG9u
Z0xvbmdUeXBlLCAmbmV4dElucHV0Lm1fZmlsZVN0YXJ0KTsKKyAgICAgICAgICAgIENGUmVhZFN0
cmVhbVNldFByb3BlcnR5KGZvcm0tPmN1cnJlbnRTdHJlYW0sIGtDRlN0cmVhbVByb3BlcnR5Rmls
ZUN1cnJlbnRPZmZzZXQsIHBvc2l0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBmb3JtLT5jdXJy
ZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBuZXh0SW5wdXQubV9maWxlTGVuZ3RoOwogICAgIH0KICAg
ICBmb3JtLT5yZW1haW5pbmdFbGVtZW50cy5yZW1vdmVMYXN0KCk7CiAKQEAgLTE5NCw2ICsyMDAs
NyBAQCBzdGF0aWMgdm9pZCogZm9ybUNyZWF0ZShDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCB2b2lk
KiBjb250ZXh0KQogCiAgICAgRm9ybVN0cmVhbUZpZWxkcyogbmV3SW5mbyA9IG5ldyBGb3JtU3Ry
ZWFtRmllbGRzOwogICAgIG5ld0luZm8tPmN1cnJlbnRTdHJlYW0gPSBOVUxMOworICAgIG5ld0lu
Zm8tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IC0xOwogICAgIG5ld0luZm8tPmN1cnJlbnRE
YXRhID0gMDsKICAgICBuZXdJbmZvLT5mb3JtU3RyZWFtID0gc3RyZWFtOyAvLyBEb24ndCByZXRh
aW4uIFRoYXQgd291bGQgY3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xlLgogICAgIG5ld0luZm8tPnN0
cmVhbUxlbmd0aCA9IGZvcm1Db250ZXh0LT5zdHJlYW1MZW5ndGg7CkBAIC0yMzgsNyArMjQ1LDEw
IEBAIHN0YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJbnQ4
KiBidWZmZXIsIENGSW5kZXggYnVmZmVyTGVuCiAgICAgRm9ybVN0cmVhbUZpZWxkcyogZm9ybSA9
IHN0YXRpY19jYXN0PEZvcm1TdHJlYW1GaWVsZHMqPihjb250ZXh0KTsKIAogICAgIHdoaWxlIChm
b3JtLT5jdXJyZW50U3RyZWFtKSB7Ci0gICAgICAgIENGSW5kZXggYnl0ZXNSZWFkID0gQ0ZSZWFk
U3RyZWFtUmVhZChmb3JtLT5jdXJyZW50U3RyZWFtLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCk7Cisg
ICAgICAgIENGSW5kZXggYnl0ZXNUb1JlYWQgPSBidWZmZXJMZW5ndGg7CisgICAgICAgIGlmIChm
b3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gLTEgJiYgZm9ybS0+Y3VycmVudFN0cmVh
bVJhbmdlTGVuZ3RoIDwgYnl0ZXNUb1JlYWQpCisgICAgICAgICAgICBieXRlc1RvUmVhZCA9IHN0
YXRpY19jYXN0PENGSW5kZXg+KGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCk7CisgICAg
ICAgIENGSW5kZXggYnl0ZXNSZWFkID0gQ0ZSZWFkU3RyZWFtUmVhZChmb3JtLT5jdXJyZW50U3Ry
ZWFtLCBidWZmZXIsIGJ5dGVzVG9SZWFkKTsKICAgICAgICAgaWYgKGJ5dGVzUmVhZCA8IDApIHsK
ICAgICAgICAgICAgICplcnJvciA9IENGUmVhZFN0cmVhbUdldEVycm9yKGZvcm0tPmN1cnJlbnRT
dHJlYW0pOwogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMjQ3LDYgKzI1Nyw4IEBAIHN0YXRp
YyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJbnQ4KiBidWZmZXIs
IENGSW5kZXggYnVmZmVyTGVuCiAgICAgICAgICAgICBlcnJvci0+ZXJyb3IgPSAwOwogICAgICAg
ICAgICAgKmF0RU9GID0gRkFMU0U7CiAgICAgICAgICAgICBmb3JtLT5ieXRlc1NlbnQgKz0gYnl0
ZXNSZWFkOworICAgICAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAh
PSAtMSkKKyAgICAgICAgICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggLT0g
Ynl0ZXNSZWFkOwogCiAgICAgICAgICAgICBpZiAoIVJlc291cmNlSGFuZGxlOjpkaWRTZW5kQm9k
eURhdGFEZWxlZ2F0ZUV4aXN0cygpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEZpZ3Vy
ZSBvdXQgaG93IHRvIG9ubHkgZG8gdGhpcyB3aGVuIGEgUmVzb3VyY2VIYW5kbGVDbGllbnQgaXMg
YXZhaWxhYmxlLgpAQCAtMzU5LDkgKzM3MSwxMyBAQCB2b2lkIHNldEhUVFBCb2R5KE5TTXV0YWJs
ZVVSTFJlcXVlc3QgKnJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhKQogICAg
ICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKQogICAgICAg
ICAgICAgbGVuZ3RoICs9IGVsZW1lbnQubV9kYXRhLnNpemUoKTsKICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBsb25nIGxvbmcgZmlsZVNpemU7Ci0gICAgICAgICAgICBpZiAoZ2V0RmlsZVNp
emUoZWxlbWVudC5tX3Nob3VsZEdlbmVyYXRlRmlsZSA/IGVsZW1lbnQubV9nZW5lcmF0ZWRGaWxl
bmFtZSA6IGVsZW1lbnQubV9maWxlbmFtZSwgZmlsZVNpemUpKQotICAgICAgICAgICAgICAgIGxl
bmd0aCArPSBmaWxlU2l6ZTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50Lm1fZmlsZUxlbmd0aCAh
PSAtMSkgeworICAgICAgICAgICAgICAgIGxlbmd0aCArPSBlbGVtZW50Lm1fZmlsZUxlbmd0aDsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG9uZyBsb25nIGZpbGVTaXpl
OworICAgICAgICAgICAgICAgIGlmIChnZXRGaWxlU2l6ZShlbGVtZW50Lm1fc2hvdWxkR2VuZXJh
dGVGaWxlID8gZWxlbWVudC5tX2dlbmVyYXRlZEZpbGVuYW1lIDogZWxlbWVudC5tX2ZpbGVuYW1l
LCBmaWxlU2l6ZSkpCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSBmaWxlU2l6ZTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4
IDMyODE4ZGYuLjcyMjdkYzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcAorKysgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTQ0NCw3ICs0NDQs
NyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKEJsb2IqIGJvZHksIEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHNldCBhIENvbnRlbnQtVHlwZSBpZiBv
bmUgaXMgbm90IHNldC4KICAgICAgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciB1cGxvYWRp
bmcgYnVuZGxlcy4KICAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9IEZvcm1EYXRhOjpjcmVh
dGUoKTsKLSAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZShib2R5LT5wYXRo
KCksIGZhbHNlKTsKKyAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZShib2R5
LT5wYXRoKCksIGJvZHktPnN0YXJ0KCksIGJvZHktPmxlbmd0aCgpLCBmYWxzZSk7CiAgICAgfQog
CiAgICAgY3JlYXRlUmVxdWVzdChlYyk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzNGZmZTViLi42NzhkNTE2
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAwOS0xMi0yOCAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQmxvYi5zbGljZSBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI5OTMKKworICAgICAgICBDaHJvbWl1bS1zaWRlIGNo
YW5nZSB0byBzdXBwb3J0IEJsb2Iuc2xpY2UuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViSFRUUEJv
ZHkuaDoKKyAgICAgICAgKiBzcmMvV2ViSFRUUEJvZHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJIVFRQQm9keTo6ZWxlbWVudEF0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSFRUUEJvZHk6OmFw
cGVuZEZpbGUpOgorCiAyMDA5LTEyLTIyICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViSFRUUEJvZHkuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViSFRUUEJvZHkuaAppbmRleCA0M2Y1MWE2Li40NjcyMGY5IDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkhUVFBCb2R5LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJIVFRQQm9keS5oCkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAgICAgICAgZW51bSB7
IFR5cGVEYXRhLCBUeXBlRmlsZSB9IHR5cGU7CiAgICAgICAgIFdlYkRhdGEgZGF0YTsKICAgICAg
ICAgV2ViU3RyaW5nIGZpbGVQYXRoOworICAgICAgICBsb25nIGxvbmcgZmlsZVN0YXJ0OworICAg
ICAgICBsb25nIGxvbmcgZmlsZUxlbmd0aDsKICAgICB9OwogCiAgICAgfldlYkhUVFBCb2R5KCkg
eyByZXNldCgpOyB9CkBAIC03Nyw3ICs3OSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEFwcGVuZCB0
byB0aGUgbGlzdCBvZiBlbGVtZW50cy4KICAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kRGF0YShj
b25zdCBXZWJEYXRhJik7Ci0gICAgV0VCS0lUX0FQSSB2b2lkIGFwcGVuZEZpbGUoY29uc3QgV2Vi
U3RyaW5nJik7CisgICAgV0VCS0lUX0FQSSB2b2lkIGFwcGVuZEZpbGUoY29uc3QgV2ViU3RyaW5n
JiwgbG9uZyBsb25nIGZpbGVTdGFydCwgbG9uZyBsb25nIGZpbGVMZW5ndGgpOwogCiAgICAgLy8g
SWRlbnRpZmllcyBhIHBhcnRpY3VsYXIgZm9ybSBzdWJtaXNzaW9uIGluc3RhbmNlLiAgQSB2YWx1
ZSBvZiAwIGlzCiAgICAgLy8gdXNlZCB0byBpbmRpY2F0ZSBhbiB1bnNwZWNpZmllZCBpZGVudGlm
aWVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJIVFRQQm9keS5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhUVFBCb2R5LmNwcAppbmRleCAzMzVlZDVjLi45MTA2YzEw
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhUVFBCb2R5LmNwcAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhUVFBCb2R5LmNwcApAQCAtODMsNiArODMsOCBAQCBib29s
IFdlYkhUVFBCb2R5OjplbGVtZW50QXQoc2l6ZV90IGluZGV4LCBFbGVtZW50JiByZXN1bHQpIGNv
bnN0CiAgICAgICAgIHJlc3VsdC50eXBlID0gRWxlbWVudDo6VHlwZUZpbGU7CiAgICAgICAgIHJl
c3VsdC5kYXRhLnJlc2V0KCk7CiAgICAgICAgIHJlc3VsdC5maWxlUGF0aCA9IGVsZW1lbnQubV9m
aWxlbmFtZTsKKyAgICAgICAgcmVzdWx0LmZpbGVTdGFydCA9IGVsZW1lbnQubV9maWxlU3RhcnQ7
CisgICAgICAgIHJlc3VsdC5maWxlTGVuZ3RoID0gZWxlbWVudC5tX2ZpbGVMZW5ndGg7CiAgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtMTAwLDEwICsxMDIsMTAgQEAgdm9pZCBXZWJIVFRQQm9keTo6YXBwZW5kRGF0YShjb25zdCBX
ZWJEYXRhJiBkYXRhKQogICAgIG1fcHJpdmF0ZS0+YXBwZW5kRGF0YShkYXRhLmRhdGEoKSwgZGF0
YS5zaXplKCkpOwogfQogCi12b2lkIFdlYkhUVFBCb2R5OjphcHBlbmRGaWxlKGNvbnN0IFdlYlN0
cmluZyYgZmlsZVBhdGgpCit2b2lkIFdlYkhUVFBCb2R5OjphcHBlbmRGaWxlKGNvbnN0IFdlYlN0
cmluZyYgZmlsZVBhdGgsIGxvbmcgbG9uZyBmaWxlU3RhcnQsIGxvbmcgbG9uZyBmaWxlTGVuZ3Ro
KQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmFwcGVuZEZpbGUoZmls
ZVBhdGgpOworICAgIG1fcHJpdmF0ZS0+YXBwZW5kRmlsZShmaWxlUGF0aCwgZmlsZVN0YXJ0LCBm
aWxlTGVuZ3RoKTsKIH0KIAogbG9uZyBsb25nIFdlYkhUVFBCb2R5OjppZGVudGlmaWVyKCkgY29u
c3QK
</data>
<flag name="commit-queue"
          id="27643"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48081</attachid>
            <date>2010-02-03 17:20:54 -0800</date>
            <delta_ts>2010-02-03 17:59:20 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>32993_3</filename>
            <type>text/plain</type>
            <size>36344</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlMTBhODAxLi42NTVjZjQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTAtMDIt
MDMgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJsb2Iuc2xpY2Ugc3VwcG9ydC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkzCisKKyAgICAgICAg
QWRkIGEgbGF5b3V0IHRlc3QgdG8gdGVzdCBzbGljaW5nIGFuZCBzZW5kaW5nIGEgZmlsZS4KKwor
ICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQ6
CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZHJhZy1maWxlLXRvLWZpbGUt
aW5wdXQtZWxlbWVudC5qczogQWRkZWQuCisgICAgICAgIChmaWxlSW5wdXQpOgorICAgICAgICAo
KToKKyAgICAgICAgKG1vdmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KToKKyAgICAgICAgKHJlbW92
ZUZpbGVJbnB1dEVsZW1lbnQpOgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2Vz
L2ZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9y
ZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanM6CisgICAgICAgIChvbkZpbGVEcm9wKToKKyAg
ICAgICAgKHJ1blRlc3QpOgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3Nl
bmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qczogQWRkZWQuCisgICAgICAgICh1cGxvYWRGaWxlKToK
KyAgICAgICAgKGNyZWF0ZU9yVXBkYXRlVGVtcEZpbGUpOgorICAgICAgICAocmVtb3ZlVGVtcEZp
bGUpOgorICAgICAgICAob25TdGFibGVGaWxlRHJvcCk6CisgICAgICAgIChkcmFnQW5kU2xpY2VT
dGFibGVGaWxlKToKKyAgICAgICAgKG9uVW5zdGFibGVGaWxlRHJvcCk6CisgICAgICAgIChvbk1v
ZGlmeUZpbGUpOgorICAgICAgICAob25VcGxvYWRNb2RpZmllZEZpbGUpOgorICAgICAgICAoZHJh
Z0FuZFNsaWNlVW5zdGFibGVGaWxlKToKKyAgICAgICAgKGRvbmUpOgorICAgICAgICAocnVuVGVz
dCk6CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1sOgor
ICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1k
cmFnZ2VkLWZpbGUuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9yZXNvdXJjZXMv
d3JpdGUtdGVtcC1maWxlLnBocDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9k
b20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dDoKKwogMjAxMC0wMi0wMiAg
RnVtaXRvc2hpIFVrYWkgIDx1a2FpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBbGV4ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20v
V2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKaW5kZXggZGU1M2MyNy4u
YWJhODA5ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1w
cm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cv
d2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CkBAIC0xNDksNiArMTQ5LDcgQEAgd2luZG93
LkJlZm9yZUxvYWRFdmVudC5wcm90b3R5cGUucHJldmVudERlZmF1bHQgW2Z1bmN0aW9uXQogd2lu
ZG93LkJlZm9yZUxvYWRFdmVudC5wcm90b3R5cGUuc3RvcFByb3BhZ2F0aW9uIFtmdW5jdGlvbl0K
IHdpbmRvdy5CbG9iIFtvYmplY3QgQmxvYkNvbnN0cnVjdG9yXQogd2luZG93LkJsb2IucHJvdG90
eXBlIFtvYmplY3QgQmxvYlByb3RvdHlwZV0KK3dpbmRvdy5CbG9iLnByb3RvdHlwZS5zbGljZSBb
ZnVuY3Rpb25dCiB3aW5kb3cuQ0RBVEFTZWN0aW9uIFtvYmplY3QgQ0RBVEFTZWN0aW9uQ29uc3Ry
dWN0b3JdCiB3aW5kb3cuQ0RBVEFTZWN0aW9uLnByb3RvdHlwZSBbb2JqZWN0IENEQVRBU2VjdGlv
blByb3RvdHlwZV0KIHdpbmRvdy5DREFUQVNlY3Rpb24ucHJvdG90eXBlLkFUVFJJQlVURV9OT0RF
IFtudW1iZXJdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291
cmNlcy9kcmFnLWZpbGUtdG8tZmlsZS1pbnB1dC1lbGVtZW50LmpzIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZHJhZy1maWxlLXRvLWZpbGUtaW5wdXQtZWxlbWVudC5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTFjNjgwCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZHJhZy1maWxl
LXRvLWZpbGUtaW5wdXQtZWxlbWVudC5qcwpAQCAtMCwwICsxLDQ2IEBACit2YXIgZmlsZUlucHV0
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKK2ZpbGVJbnB1dC50eXBlID0gImZp
bGUiOworZmlsZUlucHV0LnN0eWxlLndpZHRoID0gIjEwMHB4IjsKK2ZpbGVJbnB1dC5zdHlsZS5o
ZWlnaHQgPSAiMTAwcHgiOworLy8gSW1wb3J0YW50IHRoYXQgd2UgcHV0IHRoaXMgYXQgdGhlIHRv
cCBvZiB0aGUgZG9jIHNvIHRoYXQgbG9nZ2luZyBkb2VzIG5vdCBjYXVzZSBpdCB0byBnbyBvdXQg
b2YgdmlldyAod2hlcmUgaXQgY2FuJ3QgYmUgZHJhZ2dlZCB0bykKK2RvY3VtZW50LmJvZHkuaW5z
ZXJ0QmVmb3JlKGZpbGVJbnB1dCwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTsKKworZmlsZUlu
cHV0LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdlbnRlciIsIGZ1bmN0aW9uKCkgeworICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2ZpbGVJbnB1dC5hZGRFdmVudExpc3Rl
bmVyKCJkcmFnb3ZlciIsIGZ1bmN0aW9uKCkgeworICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9w
RWZmZWN0ID0gImNvcHkiOworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7
CisKK3ZhciBmaWxlSW5wdXREcm9wQ2FsbGJhY2sgPSBudWxsOworZmlsZUlucHV0LmFkZEV2ZW50
TGlzdGVuZXIoImRyb3AiLCBmdW5jdGlvbigpIHsKKyAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVy
LnR5cGVzLmluZGV4T2YoIkZpbGVzIikgIT0gLTEgJiYgZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVz
Lmxlbmd0aCA9PSAxKQorICAgICAgICB0ZXN0UGFzc2VkKCJldmVudC5kYXRhVHJhbnNmZXIgY29u
dGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLiIpOworICAgIGVsc2UgeworICAgICAgICB0ZXN0
RmFpbGVkKCJldmVudC5kYXRhVHJhbnNmZXIgZG9lcyBub3QgY29udGFpbiBhIEZpbGUgb2JqZWN0
IG9uIGRyb3AuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmaWxlSW5wdXREcm9w
Q2FsbGJhY2soZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzWzBdKTsKKworICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2Z1bmN0aW9uIHNldEZpbGVJbnB1dERyb3BDYWxs
YmFjayhmaWxlSW5wdXREcm9wQ2FsbGJhY2tGdW5jKQoreworICAgIGZpbGVJbnB1dERyb3BDYWxs
YmFjayA9IGZpbGVJbnB1dERyb3BDYWxsYmFja0Z1bmM7Cit9CisKK2Z1bmN0aW9uIG1vdmVNb3Vz
ZVRvQ2VudGVyT2ZFbGVtZW50KGVsZW1lbnQpCit7CisgICAgdmFyIGNlbnRlclggPSBlbGVtZW50
Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMjsKKyAgICB2YXIgY2VudGVyWSA9
IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOworICAgIGV2ZW50
U2VuZGVyLm1vdXNlTW92ZVRvKGNlbnRlclgsIGNlbnRlclkpOworfQorCitmdW5jdGlvbiByZW1v
dmVGaWxlSW5wdXRFbGVtZW50KCkKK3sKKyAgICBmaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVD
aGlsZChmaWxlSW5wdXQpCit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xv
Y2FsL3Jlc291cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0IGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dAppbmRleCA1
YWIyZjhhLi42YTUzN2I1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2Fs
L3Jlc291cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL2ZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQKQEAgLTEg
KzEgQEAKLUhlbGxvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorMTIzNDU2Nzg5MApcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtZHJhZ2dlZC1maWxlLmpzIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanMKaW5kZXggYmVkNDA3
OC4uZWZjMTEyNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNv
dXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9s
b2NhbC9yZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanMKQEAgLTEsNDggKzEsMjEgQEAKIGRl
c2NyaXB0aW9uKCJUZXN0IGZvciBzZW5kaW5nIGEgZHJhZ2dlZCBmaWxlIHZpYSBYTUxIdHRwUmVx
dWVzdC4iKTsKIAotdmFyIGZpbGVJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0
Iik7Ci1maWxlSW5wdXQudHlwZSA9ICJmaWxlIjsKLWZpbGVJbnB1dC5zdHlsZS53aWR0aCA9ICIx
MDBweCI7Ci1maWxlSW5wdXQuc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKLS8vIEltcG9ydGFudCB0
aGF0IHdlIHB1dCB0aGlzIGF0IHRoZSB0b3Agb2YgdGhlIGRvYyBzbyB0aGF0IGxvZ2dpbmcgZG9l
cyBub3QgY2F1c2UgaXQgdG8gZ28gb3V0IG9mIHZpZXcgKHdoZXJlIGl0IGNhbid0IGJlIGRyYWdn
ZWQgdG8pCi1kb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShmaWxlSW5wdXQsIGRvY3VtZW50LmJv
ZHkuZmlyc3RDaGlsZCk7Ci0KLWZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIi
LCBmdW5jdGlvbigpIHsKLSAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotfSwgZmFsc2UpOwot
Ci1maWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCBmdW5jdGlvbigpIHsKLSAg
ICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICJjb3B5IjsKLSAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOwotfSwgZmFsc2UpOwotCi1maWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigi
ZHJvcCIsIGZ1bmN0aW9uKCkgewotICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5k
ZXhPZigiRmlsZXMiKSAhPSAtMSAmJiBldmVudC5kYXRhVHJhbnNmZXIuZmlsZXMubGVuZ3RoID09
IDEpCi0gICAgICAgIHRlc3RQYXNzZWQoImV2ZW50LmRhdGFUcmFuc2ZlciBjb250YWlucyBhIEZp
bGUgb2JqZWN0IG9uIGRyb3AuIik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoImV2
ZW50LmRhdGFUcmFuc2ZlciBkb2VzIG5vdCBjb250YWluIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4i
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQorZnVuY3Rpb24gb25GaWxlRHJvcChmaWxlKQor
ewogICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICB4aHIub3BlbigiUE9T
VCIsICJodHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3Bvc3Qt
ZWNoby5jZ2kiLCBmYWxzZSk7Ci0gICAgeGhyLnNlbmQoZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVz
WzBdKTsKLSAgICBpZiAoeGhyLnJlc3BvbnNlVGV4dCA9PSAiSGVsbG8iKQorICAgIHhoci5zZW5k
KGZpbGUpOworICAgIGlmICh4aHIucmVzcG9uc2VUZXh0ID09ICIxMjM0NTY3ODkwIikKICAgICAg
ICAgdGVzdFBhc3NlZCgiRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZC4iKTsKICAgICBl
bHNlCiAgICAgICAgIHRlc3RGYWlsZWQoIlVuZXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZl
ZDogIiArIHhoci5yZXNwb25zZVRleHQpOwogCiAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsK
LX0sIGZhbHNlKTsKLQotZnVuY3Rpb24gbW92ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQoZWxlbWVu
dCkgewotICAgIHZhciBjZW50ZXJYID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVudC5vZmZz
ZXRXaWR0aCAvIDI7Ci0gICAgdmFyIGNlbnRlclkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1l
bnQub2Zmc2V0SGVpZ2h0IC8gMjsKLSAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhjZW50ZXJY
LCBjZW50ZXJZKTsKIH0KIAogZnVuY3Rpb24gcnVuVGVzdCgpCiB7CisgICAgc2V0RmlsZUlucHV0
RHJvcENhbGxiYWNrKG9uRmlsZURyb3ApOwogICAgIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhG
aWxlcyhbInJlc291cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0Il0pOwogICAgIG1vdmVN
b3VzZVRvQ2VudGVyT2ZFbGVtZW50KGZpbGVJbnB1dCk7CiAgICAgZXZlbnRTZW5kZXIubW91c2VV
cCgpOwpAQCAtNTEsNyArMjQsNyBAQCBmdW5jdGlvbiBydW5UZXN0KCkKIGlmICh3aW5kb3cuZXZl
bnRTZW5kZXIpIHsKICAgICBydW5UZXN0KCk7CiAgICAgLy8gQ2xlYW4gdXAgYWZ0ZXIgb3Vyc2Vs
dmVzCi0gICAgZmlsZUlucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZmlsZUlucHV0KTsKKyAg
ICByZW1vdmVGaWxlSW5wdXRFbGVtZW50KCk7CiB9IGVsc2UgewogICAgIHRlc3RGYWlsZWQoIlRo
aXMgdGVzdCBpcyBub3QgaW50ZXJhY3RpdmUsIHBsZWFzZSBydW4gdXNpbmcgRHVtcFJlbmRlclRy
ZWUiKTsKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3Vy
Y2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
bG9jYWwvcmVzb3VyY2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmZkNTMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxl
LmpzCkBAIC0wLDAgKzEsMTgwIEBACitkZXNjcmlwdGlvbigiVGVzdCBmb3Igc2xpY2luZyBhIGRy
YWdnZWQgZmlsZSBhbmQgc2VuZGluZyBpdCB2aWEgWE1MSHR0cFJlcXVlc3QuIik7CisKK3ZhciBv
cmlnaW5hbFRleHQgPSAiMTIzNDU2Nzg5MCI7Cit2YXIgdXBkYXRlZFRleHQgPSAiQUJDREVGR0hJ
SiI7Cit2YXIgc2xpY2VTdGFydDsKK3ZhciBzbGljZUxlbmd0aDsKK3ZhciB0ZW1wRmlsZU5hbWUg
PSAic2VuZC1zbGljZS1kcmFnZ2VkLWZpbGUudG1wIjsKK3ZhciB0ZW1wRmlsZU9yaWdpbmFsTW9k
aWZpY2F0aW9uVGltZTsKK3ZhciBzdWJmaWxlOworCitmdW5jdGlvbiB1cGxvYWRGaWxlKGZpbGUs
IGV4cGVjdGVkVGV4dCwgZXhwZWN0ZWRFeGNlcHRpb24pCit7CisgICAgdmFyIHhociA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6
ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcG9zdC1lY2hvLmNnaSIsIGZhbHNlKTsKKwor
ICAgIHZhciBwYXNzZWQ7CisgICAgdmFyIG1lc3NhZ2U7CisgICAgdHJ5IHsKKyAgICAgICAgeGhy
LnNlbmQoZmlsZSk7CisgICAgICAgIGlmIChleHBlY3RlZEV4Y2VwdGlvbikgeworICAgICAgICAg
ICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgICAgICBtZXNzYWdlID0gIlVuZXhwZWN0ZWQgcmVz
cG9uc2UgZGF0YSByZWNlaXZlZDogIiArIHhoci5yZXNwb25zZVRleHQgKyAiLiBFeHBlY3Rpbmcg
ZXhjZXB0aW9uIHRocm93biI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoeGhy
LnJlc3BvbnNlVGV4dCA9PSBleHBlY3RlZFRleHQpIHsKKyAgICAgICAgICAgICAgICBwYXNzZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAiRXhwZWN0ZWQgcmVzcG9uc2UgZGF0
YSByZWNlaXZlZDogIiArIHhoci5yZXNwb25zZVRleHQ7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1lc3NhZ2Ug
PSAiVW5leHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4
dCArICIuIEV4cGVjdGluZzogIiArIGV4cGVjdGVkVGV4dDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgIGlmIChleHBlY3RlZEV4Y2VwdGlvbikg
eworICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiRXhw
ZWN0ZWQgZXhjZXB0aW9uIHRocm93bjogIiArIGV4OworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgICAgICBtZXNzYWdlID0gIlVuZXhwZWN0ZWQg
ZXhjZXB0aW9uIHRocm93bjogIiArIGV4OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHBh
c3NlZCkKKyAgICAgICAgdGVzdFBhc3NlZChtZXNzYWdlKTsKKyAgICBlbHNlCisgICAgICAgIHRl
c3RGYWlsZWQobWVzc2FnZSk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZU9yVXBkYXRlVGVtcEZpbGUo
ZmlsZURhdGEpCit7CisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHho
ci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9yZXNvdXJjZXMvd3JpdGUtdGVt
cC1maWxlLnBocD9maWxlbmFtZT0iICsgdGVtcEZpbGVOYW1lICsgIiZkYXRhPSIgKyBmaWxlRGF0
YSwgZmFsc2UpOworICAgIHhoci5zZW5kKCk7CisgICAgaWYgKHhoci5zdGF0dXMgIT0gMjAwKSB7
CisgICAgICAgIHRlc3RGYWlsZWQoIlVuZXhwZWN0ZWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVk
OiAiICsgeGhyLnN0YXR1cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgdmFs
dWVzID0geGhyLnJlc3BvbnNlVGV4dC5zcGxpdCgnXG4nKTsKKyAgICBpZiAodmFsdWVzLmxlbmd0
aCA8IDIpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiVW5leHBlY3RlZCByZXNwb25zZSB0ZXh0IHJl
Y2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICByZXR1cm4gdmFsdWVzOworfQorCitmdW5jdGlvbiByZW1vdmVUZW1wRmlsZSgpCit7Cisg
ICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwg
Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9yZXNvdXJjZXMvcmVzZXQtdGVtcC1maWxlLnBocD9maWxl
bmFtZT0iICsgdGVtcEZpbGVOYW1lLCBmYWxzZSk7CisgICAgeGhyLnNlbmQoKTsKK30KKworZnVu
Y3Rpb24gb25TdGFibGVGaWxlRHJvcChmaWxlKQoreworICAgIC8vIFNsaWNlIHRoZSBmaWxlLgor
ICAgIHN1YmZpbGUgPSBmaWxlLnNsaWNlKHNsaWNlU3RhcnQsIHNsaWNlTGVuZ3RoKTsKKyAgICB2
YXIgZXhwZWN0ZWRUZXh0ID0gb3JpZ2luYWxUZXh0LnN1YnN0cmluZyhzbGljZVN0YXJ0LCBzbGlj
ZVN0YXJ0ICsgc2xpY2VMZW5ndGgpOworICAgIHNob3VsZEV2YWx1YXRlVG8oInN1YmZpbGUuc2l6
ZSIsIGV4cGVjdGVkVGV4dC5sZW5ndGgpOworCisgICAgLy8gVXBsb2FkIHRoZSBzbGljZWQgZmls
ZS4KKyAgICB1cGxvYWRGaWxlKHN1YmZpbGUsIGV4cGVjdGVkVGV4dCwgZmFsc2UpOworfQorCitm
dW5jdGlvbiBkcmFnQW5kU2xpY2VTdGFibGVGaWxlKHN0YXJ0LCBsZW5ndGgpCit7CisgICAgc2xp
Y2VTdGFydCA9IHN0YXJ0OworICAgIHNsaWNlTGVuZ3RoID0gbGVuZ3RoOworICAgIHNldEZpbGVJ
bnB1dERyb3BDYWxsYmFjayhvblN0YWJsZUZpbGVEcm9wKTsKKyAgICBldmVudFNlbmRlci5iZWdp
bkRyYWdXaXRoRmlsZXMoWyJyZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dCJdKTsK
KyAgICBtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudChmaWxlSW5wdXQpOworICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlVXAoKTsKK30KKworZnVuY3Rpb24gb25VbnN0YWJsZUZpbGVEcm9wKGZpbGUpCit7
CisgICAgLy8gU2xpY2UgdGhlIGZpbGUuCisgICAgc3ViZmlsZSA9IGZpbGUuc2xpY2Uoc2xpY2VT
dGFydCwgc2xpY2VMZW5ndGgpOworICAgIHZhciBleHBlY3RlZFRleHQgPSBvcmlnaW5hbFRleHQu
c3Vic3RyaW5nKHNsaWNlU3RhcnQsIHNsaWNlU3RhcnQgKyBzbGljZUxlbmd0aCk7CisgICAgc2hv
dWxkRXZhbHVhdGVUbygic3ViZmlsZS5zaXplIiwgZXhwZWN0ZWRUZXh0Lmxlbmd0aCk7CisgIAor
ICAgIC8vIFVwbG9hZCB0aGUgc2xpY2VkIGZpbGUuCisgICAgdXBsb2FkRmlsZShzdWJmaWxlLCBl
eHBlY3RlZFRleHQsIGZhbHNlKTsKKworICAgIC8vIFRoZSBmaWxlIG1vZGlmaWNhdGlvbiB0aW1l
IGlzIHNlY29uZC1iYXNlZC4gU28gZGVsYXkgY2hhbmdpbmcgdGhlIGZpbGUgaW4gb3JkZXIgdG8g
Z2V0IHRoZSBuZXcgbW9kaWZpY2F0aW9uIHRpbWUgZm9yIHRoZSBmaWxlLgorICAgIHNldFRpbWVv
dXQoIm9uTW9kaWZ5RmlsZSgpIiwgNTAwKTsKK30KKworZnVuY3Rpb24gb25Nb2RpZnlGaWxlKCkK
K3sKKyAgICAvLyBNb2RpZnkgdGhlIHVuZGVybHlpbmcgdGVtcCBmaWxlLgorICAgIHZhciB0ZW1w
RmlsZUluZm8gPSBjcmVhdGVPclVwZGF0ZVRlbXBGaWxlKHVwZGF0ZWRUZXh0KTsKKyAgICBpZiAo
dGVtcEZpbGVJbmZvLmxlbmd0aCA8IDIpIHsKKyAgICAgICAgZG9uZSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIHZhciB0ZW1wRmlsZUN1cnJlbnRNb2RpZmljYXRpb25UaW1lID0gdGVt
cEZpbGVJbmZvWzFdOworCisgICAgLy8gQ2hlY2sgdGhlIG5ldyBtb2RpZmljYXRpb24gdGltZSB0
byBtYWtlIHN1cmUgaXQgaXMgZGlmZmVyZW50LiBJZiBub3QsIHJlcGVhdCB0aGUgYWJvdmUgcHJv
Y2Vzcy4KKyAgICBpZiAodGVtcEZpbGVDdXJyZW50TW9kaWZpY2F0aW9uVGltZSA9PSB0ZW1wRmls
ZU9yaWdpbmFsTW9kaWZpY2F0aW9uVGltZSkKKyAgICAgICAgc2V0VGltZW91dCgnb25Nb2RpZnlG
aWxlKCknLCA1MDApOworICAgIGVsc2UKKyAgICAgICAgc2V0VGltZW91dCgnb25VcGxvYWRNb2Rp
ZmllZEZpbGUoKScsIDApOworfQorCitmdW5jdGlvbiBvblVwbG9hZE1vZGlmaWVkRmlsZSgpCit7
CisgICAgLy8gVXBsb2FkIHRoZSBzbGljZWQgZmlsZS4gV2Ugc2hvdWxkIHJlY2VpdmUgYW4gZXhj
ZXB0aW9uIHNpbmNlIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQuCisgICAgdXBsb2FkRmlsZShz
dWJmaWxlLCBudWxsLCB0cnVlKTsKKworICAgIC8vIFJlbW92ZSB0aGUgdGVtcCBmaWxlLgorICAg
IHJlbW92ZVRlbXBGaWxlKCk7CisKKyAgICBkb25lKCk7Cit9CisKK2Z1bmN0aW9uIGRyYWdBbmRT
bGljZVVuc3RhYmxlRmlsZShzdGFydCwgbGVuZ3RoKQoreworICAgIHZhciB0ZW1wRmlsZUluZm8g
PSBjcmVhdGVPclVwZGF0ZVRlbXBGaWxlKG9yaWdpbmFsVGV4dCk7CisgICAgaWYgKHRlbXBGaWxl
SW5mby5sZW5ndGggPCAyKSB7CisgICAgICAgIGRvbmUoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICB2YXIgdGVtcEZpbGVQYXRoID0gdGVtcEZpbGVJbmZvWzBdOworICAgIHRlbXBGaWxl
T3JpZ2luYWxNb2RpZmljYXRpb25UaW1lID0gdGVtcEZpbGVJbmZvWzFdOworCisgICAgc2xpY2VT
dGFydCA9IHN0YXJ0OworICAgIHNsaWNlTGVuZ3RoID0gbGVuZ3RoOworICAgIHNldEZpbGVJbnB1
dERyb3BDYWxsYmFjayhvblVuc3RhYmxlRmlsZURyb3ApOworICAgIGV2ZW50U2VuZGVyLmJlZ2lu
RHJhZ1dpdGhGaWxlcyhbdGVtcEZpbGVQYXRoXSk7CisgICAgbW92ZU1vdXNlVG9DZW50ZXJPZkVs
ZW1lbnQoZmlsZUlucHV0KTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Cit9CisKK2Z1bmN0
aW9uIGRvbmUoKQoreworICAgIHdpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAg
IGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitm
dW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBkcmFnQW5kU2xpY2VTdGFibGVGaWxlKDIsIDQpOwor
ICAgIGRyYWdBbmRTbGljZVN0YWJsZUZpbGUoMiwgMjApOworICAgIGRyYWdBbmRTbGljZVN0YWJs
ZUZpbGUoMTUsIDIwKTsKKworICAgIGRyYWdBbmRTbGljZVVuc3RhYmxlRmlsZSgzLCA1KTsKK30K
KworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKKworICAgIHJ1blRlc3QoKTsKKyAgICAvLyBDbGVhbiB1cCBhZnRlciBv
dXJzZWx2ZXMKKyAgICByZW1vdmVGaWxlSW5wdXRFbGVtZW50KCk7Cit9IGVsc2UgeworICAgIHRl
c3RGYWlsZWQoIlRoaXMgdGVzdCBpcyBub3QgaW50ZXJhY3RpdmUsIHBsZWFzZSBydW4gdXNpbmcg
RHVtcFJlbmRlclRyZWUiKTsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
bG9jYWwvc2VuZC1kcmFnZ2VkLWZpbGUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9j
YWwvc2VuZC1kcmFnZ2VkLWZpbGUuaHRtbAppbmRleCAzZjIyMTBhLi5lMGM0YjA1IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1s
CkBAIC03LDYgKzcsNyBAQAogPGJvZHk+CiA8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KIDxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcmFnLWZpbGUtdG8t
ZmlsZS1pbnB1dC1lbGVtZW50LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
c2VuZC1kcmFnZ2VkLWZpbGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CiA8L2JvZHk+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQt
ZmlsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xp
Y2VkLWRyYWdnZWQtZmlsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYjQ2MDc5MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDIyIEBACitUZXN0IGZvciBzbGljaW5nIGEgZHJhZ2dlZCBmaWxlIGFuZCBzZW5kaW5nIGl0IHZp
YSBYTUxIdHRwUmVxdWVzdC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
ZXZlbnQuZGF0YVRyYW5zZmVyIGNvbnRhaW5zIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4KK1BBU1Mg
c3ViZmlsZS5zaXplIGlzIDQKK1BBU1MgRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDog
MzQ1NgorUEFTUyBldmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBk
cm9wLgorUEFTUyBzdWJmaWxlLnNpemUgaXMgOAorUEFTUyBFeHBlY3RlZCByZXNwb25zZSBkYXRh
IHJlY2VpdmVkOiAzNDU2Nzg5MAorUEFTUyBldmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBG
aWxlIG9iamVjdCBvbiBkcm9wLgorUEFTUyBzdWJmaWxlLnNpemUgaXMgMAorUEFTUyBFeHBlY3Rl
ZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAKK1BBU1MgZXZlbnQuZGF0YVRyYW5zZmVyIGNvbnRh
aW5zIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4KK1BBU1Mgc3ViZmlsZS5zaXplIGlzIDUKK1BBU1Mg
RXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDogNDU2NzgKK1BBU1MgRXhwZWN0ZWQgZXhj
ZXB0aW9uIHRocm93bjogRXJyb3I6IE5FVFdPUktfRVJSOiBYTUxIdHRwUmVxdWVzdCBFeGNlcHRp
b24gMTAxCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1k
cmFnZ2VkLWZpbGUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGlj
ZWQtZHJhZ2dlZC1maWxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YTU3MzU3MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwv
c2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2Ny
aXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvZHJhZy1maWxlLXRvLWZpbGUtaW5wdXQtZWxlbWVudC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1
bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VzL3dyaXRlLXRlbXAtZmlsZS5waHAgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlcy93cml0ZS10ZW1wLWZpbGUucGhwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZTJjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlcy93cml0ZS10ZW1wLWZpbGUucGhwCkBAIC0wLDAg
KzEsMjAgQEAKKzw/cGhwCityZXF1aXJlX29uY2UgJ3BvcnRhYmlsaXR5TGF5ZXIucGhwJzsKKwor
aWYgKCFzeXNfZ2V0X3RlbXBfZGlyKCkpIHsKKyAgICBlY2hvICJGQUlMOiBObyB0ZW1wIGRpciB3
YXMgcmV0dXJuZWQuXG4iOworICAgIGV4aXQoKTsKK30KKworJHRtcEZpbGUgPSBzeXNfZ2V0X3Rl
bXBfZGlyKCkgLiAiLyIgLiAkX0dFVFsnZmlsZW5hbWUnXTsKKworaWYgKCFmaWxlX3B1dF9jb250
ZW50cygkdG1wRmlsZSwgJF9HRVRbJ2RhdGEnXSkpIHsKKyAgICBlY2hvICJGQUlMOiB1bmFibGUg
dG8gd3JpdGUgdG8gZmlsZTogIiAuICR0bXBGaWxlIC4gIlxuIjsKKyAgICBleGl0KCk7Cit9CisK
KyRzdGF0ID0gc3RhdCgkdG1wRmlsZSk7CisKK2VjaG8gJHRtcEZpbGUgLiAiXG4iOworZWNobyAk
c3RhdFsnbXRpbWUnXTsKKz8+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9m
YXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVk
LnR4dAppbmRleCBmN2NhODZiLi4yMWNkZGE4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVy
dGllcy1leHBlY3RlZC50eHQKQEAgLTE0OSw2ICsxNDksNyBAQCB3aW5kb3cuQmVmb3JlTG9hZEV2
ZW50LnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdCBbZnVuY3Rpb25dCiB3aW5kb3cuQmVmb3JlTG9h
ZEV2ZW50LnByb3RvdHlwZS5zdG9wUHJvcGFnYXRpb24gW2Z1bmN0aW9uXQogd2luZG93LkJsb2Ig
W29iamVjdCBCbG9iQ29uc3RydWN0b3JdCiB3aW5kb3cuQmxvYi5wcm90b3R5cGUgW29iamVjdCBC
bG9iUHJvdG90eXBlXQord2luZG93LkJsb2IucHJvdG90eXBlLnNsaWNlIFtmdW5jdGlvbl0KIHdp
bmRvdy5DREFUQVNlY3Rpb24gW29iamVjdCBDREFUQVNlY3Rpb25Db25zdHJ1Y3Rvcl0KIHdpbmRv
dy5DREFUQVNlY3Rpb24ucHJvdG90eXBlIFtvYmplY3QgQ0RBVEFTZWN0aW9uUHJvdG90eXBlXQog
d2luZG93LkNEQVRBU2VjdGlvbi5wcm90b3R5cGUuQVRUUklCVVRFX05PREUgW251bWJlcl0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjkx
YmQxYy4uNGIxNzhlYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAxMC0wMi0wMyAgSmlhbiBMaSAgPGppYW5s
aUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQmxvYi5zbGljZSBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI5OTMKKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL2xv
Y2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sCisKKyAgICAgICAgVGhlIGZvbGxvd2lu
ZyBzZW1hbnRpYyBpcyBhZG9wdGVkIHBlciB0aGUgZGlzY3Vzc2lvbnMgb24gcHVibGljLXdlYmFw
cHM6CisgICAgICAgIDEpIEZpbGUuc2xpY2UoKSBkb2VzIGEgc3luY2hyb25vdXMgSU8gdG8gY2Fw
dHVyZXMgdGhlIGN1cnJlbnQgc2l6ZSBhbmQKKyAgICAgICAgICAgbW9kaWZpY2F0aW9uIHRpbWUg
YW5kIGNhY2hlIHRoZW0gaW4gdGhlIHJlc3VsdGluZyBCbG9iLgorICAgICAgICAyKSBTdWJzZXF1
ZW50IEJsb2Igb3BlcmF0aW9ucywgbGlrZSBCbG9iLnNsaWNlIGFuZCBCbG9iLnNpemUgc2ltcGx5
CisgICAgICAgICAgIHVzZSB0aGUgY2FjaGVkIHZhbHVlcy4KKyAgICAgICAgMykgV2hlbiB0aGUg
dW5kZXJseWluZyBmaWxlIGRhdGEgYXJlIGFjY2Vzc2VkLCBsaWtlIGluIFhIUi5zZW5kKCksIHRo
ZQorICAgICAgICAgICBVQSB3aWxsIGNoZWNrIHRoZSBjYWNoZWQgbW9kaWZpY2F0aW9uIHRpbWUg
YWdhaW5zdCB0aGUgY3VycmVudAorICAgICAgICAgICBtb2RpZmljYXRpb24gdGltZSB0byBkZXRl
cm1pbmUgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QuCisgICAgICAgICAgIEFu
IGVycm9yIG9yIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93biBpZiBuZWVkZWQuCisKKyAgICAgICAg
KiBodG1sL0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAg
IChXZWJDb3JlOjpCbG9iOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmdldEZpbGVT
aXplSGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmdldEZpbGVNb2RpZmljYXRpb25U
aW1lSGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNsaWNlKToKKyAgICAgICAgKiBo
dG1sL0Jsb2IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnN0YXJ0KToKKyAgICAgICAgKFdl
YkNvcmU6OkJsb2I6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjptb2RpZmljYXRp
b25UaW1lKToKKyAgICAgICAgKiBodG1sL0Jsb2IuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Y3JlYXRl
Rm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmRlZXBDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhOjphcHBlbmRGaWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRh
Lmg6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkZvcm1EYXRhRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmFkdmFuY2VD
dXJyZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZW5OZXh0U3RyZWFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OmZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybU9wZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6Zm9ybVJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SFRUUEJv
ZHkpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxIdHRwUmVxdWVzdDo6c2VuZCk6CisKIDIwMTAtMDItMDIgIEZ1bWl0b3NoaSBVa2FpICA8
dWthaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5
YWtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iLmNwcCBiL1dlYkNvcmUvaHRtbC9C
bG9iLmNwcAppbmRleCAwYjY3N2VhLi5hY2Y2MTQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwv
QmxvYi5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCkBAIC0zNywxNyArMzcsNzIgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCkKICAg
ICA6IG1fcGF0aChwYXRoKQorICAgICwgbV9zdGFydCgwKQorICAgICwgbV9sZW5ndGgoLTEpCisg
ICAgLCBtX3NuYXBzaG90U2l6ZSgtMSkKKyAgICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1l
KDApCit7Cit9CisKK0Jsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3Rh
cnQsIGxvbmcgbG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNpemUsIHRpbWVfdCBzbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWUpCisgICAgOiBtX3BhdGgocGF0aCkKKyAgICAsIG1fc3RhcnQo
c3RhcnQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX3NuYXBzaG90U2l6ZShzbmFw
c2hvdFNpemUpCisgICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShzbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWUpCiB7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iOjpzaXplKCkgY29u
c3QKIHsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigobV9zbmFw
c2hvdFNpemUgPT0gLTEpID8gZ2V0RmlsZVNpemVIZWxwZXIoKSA6IG1fbGVuZ3RoKTsgCit9CisK
K2xvbmcgbG9uZyBCbG9iOjpnZXRGaWxlU2l6ZUhlbHBlcigpIGNvbnN0Cit7CiAgICAgLy8gRklY
TUU6IEphdmFTY3JpcHQgY2Fubm90IHJlcHJlc2VudCBzaXplcyBhcyBsYXJnZSBhcyB1bnNpZ25l
ZCBsb25nIGxvbmcsIHdlIG5lZWQgdG8KICAgICAvLyBjb21lIHVwIHdpdGggYW4gZXhjZXB0aW9u
IHRvIHRocm93IGlmIGZpbGUgc2l6ZSBpcyBub3QgcmVwcmVzZXRhYmxlLgogICAgIGxvbmcgbG9u
ZyBzaXplOwogICAgIGlmICghZ2V0RmlsZVNpemUobV9wYXRoLCBzaXplKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSk7
CisgICAgcmV0dXJuIHNpemU7Cit9CisKK3RpbWVfdCBCbG9iOjpnZXRGaWxlTW9kaWZpY2F0aW9u
VGltZUhlbHBlcigpIGNvbnN0Cit7CisgICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7CisgICAg
aWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShtX3BhdGgsIG1vZGlmaWNhdGlvblRpbWUpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbW9kaWZpY2F0aW9uVGltZTsKK30KKworUGFz
c1JlZlB0cjxCbG9iPiBCbG9iOjpzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5n
dGgpIGNvbnN0Cit7CisgICAgLy8gV2hlbiB3ZSBzbGljZSBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0
aW1lLCB3ZSBvYnRhaW4gYSBzbmFwc2hvdCBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcgaXRzIGN1
cnJlbnQgc2l6ZSBhbmQgbW9kaWZpY2F0aW9uIHRpbWUuCisgICAgLy8gVGhlIG1vZGlmaWNhdGlv
biB0aW1lIHdpbGwgYmUgdXNlZCB0byB2ZXJpZnkgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdl
ZCBvciBub3QsIHdoZW4gdGhlIHVuZGVybHlpbmcgZGF0YSBhcmUgYWNjZXNzZWQuCisgICAgbG9u
ZyBsb25nIHNuYXBzaG90U2l6ZTsKKyAgICB0aW1lX3Qgc25hcHNob3RNb2RpZmljYXRpb25UaW1l
OworICAgIGlmIChtX3NuYXBzaG90U2l6ZSA9PSAtMSkgeworICAgICAgICBzbmFwc2hvdFNpemUg
PSBnZXRGaWxlU2l6ZUhlbHBlcigpOworICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUg
PSBnZXRGaWxlTW9kaWZpY2F0aW9uVGltZUhlbHBlcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHNuYXBzaG90U2l6ZSA9IG1fc25hcHNob3RTaXplOworICAgICAgICBzbmFwc2hvdE1vZGlmaWNh
dGlvblRpbWUgPSBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKKyAgICB9CisKKyAgICAvLyBD
bGFtcCB0aGUgcmFuZ2UgaWYgaXQgZXhjZWVkcyB0aGUgc2l6ZSBsaW1pdC4KKyAgICBpZiAoc3Rh
cnQgPCAwKQorICAgICAgICBzdGFydCA9IDA7CisgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAg
IGxlbmd0aCA9IDA7CisKKyAgICBpZiAoc3RhcnQgPiBzbmFwc2hvdFNpemUpIHsKKyAgICAgICAg
c3RhcnQgPSAwOworICAgICAgICBsZW5ndGggPSAwOworICAgIH0gZWxzZSBpZiAoc3RhcnQgKyBs
ZW5ndGggPiBzbmFwc2hvdFNpemUpCisgICAgICAgIGxlbmd0aCA9IHNuYXBzaG90U2l6ZSAtIHN0
YXJ0OworCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKG1fcGF0aCwgbV9zdGFydCArIHN0
YXJ0LCBsZW5ndGgsIHNuYXBzaG90U2l6ZSwgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9i
LmggYi9XZWJDb3JlL2h0bWwvQmxvYi5oCmluZGV4IGI5MTBlOGYuLjE1OWIyMTEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9CbG9iLmgKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuaApAQCAtMzMs
NiArMzMsNyBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtNDcsMTQgKzQ4LDI4IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgfkJsb2IoKSB7IH0KIAorICAgIFBhc3NSZWZQdHI8QmxvYj4g
c2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdDsKKwogICAgIGNv
bnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7CisgICAgbG9uZyBsb25nIHN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFydDsgfQorICAgIGxvbmcgbG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2xlbmd0aDsgfQorICAgIHRpbWVfdCBtb2RpZmljYXRpb25UaW1lKCkgY29uc3QgeyByZXR1cm4g
bV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7IH0KIAogcHJvdGVjdGVkOgogICAgIEJsb2IoY29u
c3QgU3RyaW5nJiBwYXRoKTsKIAogcHJpdmF0ZToKKyAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0
aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBsb25nIGxvbmcgc25hcHNob3RT
aXplLCB0aW1lX3Qgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKKworICAgIGxvbmcgbG9uZyBn
ZXRGaWxlU2l6ZUhlbHBlcigpIGNvbnN0OworICAgIHRpbWVfdCBnZXRGaWxlTW9kaWZpY2F0aW9u
VGltZUhlbHBlcigpIGNvbnN0OworCiAgICAgU3RyaW5nIG1fcGF0aDsKKyAgICBsb25nIGxvbmcg
bV9zdGFydDsKKyAgICBsb25nIGxvbmcgbV9sZW5ndGg7CisgICAgbG9uZyBsb25nIG1fc25hcHNo
b3RTaXplOworICAgIHRpbWVfdCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iLmlkbCBi
L1dlYkNvcmUvaHRtbC9CbG9iLmlkbAppbmRleCA1NzNiZTM1Li44MzY0ZWFjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvQmxvYi5pZGwKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuaWRsCkBAIC0z
Miw2ICszMiw3IEBAIG1vZHVsZSBodG1sIHsKIAogICAgIGludGVyZmFjZSBCbG9iIHsKICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOworICAgICAgICBC
bG9iIHNsaWNlKGluIGxvbmcgbG9uZyBzdGFydCwgaW4gbG9uZyBsb25nIGxlbmd0aCk7CiAgICAg
fTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAppbmRleCAyZjg4ODk0Li5mYzUzOGFmIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtMjY2LDcgKzI2Niw3IEBAIFBhc3NSZWZQdHI8
Rm9ybURhdGE+IEhUTUxGb3JtRWxlbWVudDo6Y3JlYXRlRm9ybURhdGEoY29uc3QgQ1N0cmluZyYg
Ym91bmRhcnkpCiAgICAgICAgICAgICAgICAgICAgIGlmIChzaXplX3QgZGF0YVNpemUgPSB2YWx1
ZS5kYXRhKCkubGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVu
ZERhdGEodmFsdWUuZGF0YSgpLmRhdGEoKSwgZGF0YVNpemUpOwogICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmICh2YWx1ZS5maWxlKCkgJiYgIXZhbHVlLmZpbGUoKS0+cGF0aCgpLmlzRW1wdHko
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRmlsZSh2YWx1ZS5maWxl
KCktPnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC0+YXBwZW5kRmlsZSh2YWx1ZS5maWxlKCktPnBhdGgoKSwgMCwgLTEsIHNob3VsZEdl
bmVyYXRlRmlsZSk7CiAKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKCJc
clxuIiwgMik7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0
YS5jcHAKaW5kZXggYWYzYjdmMC4uZGQwNGUxOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGEuY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURh
dGE6OmRlZXBDb3B5KCkgY29uc3QKICAgICAgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFw
cGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2RhdGEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEZpbGU6Ci0gICAgICAgICAgICBmb3Jt
RGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUubV9maWxlbmFtZSwgZS5t
X3Nob3VsZEdlbmVyYXRlRmlsZSkpOworICAgICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMu
YXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZmlsZW5hbWUsIGUubV9maWxlU3RhcnQsIGUubV9m
aWxlTGVuZ3RoLCBlLm1fZmlsZU1vZGlmaWNhdGlvblRpbWUsIGUubV9zaG91bGRHZW5lcmF0ZUZp
bGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTI1LDkgKzEy
NSw5IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZERhdGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90
IHNpemUpCiAgICAgbWVtY3B5KGUubV9kYXRhLmRhdGEoKSArIG9sZFNpemUsIGRhdGEsIHNpemUp
OwogfQogCi12b2lkIEZvcm1EYXRhOjphcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUs
IGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKQordm9pZCBGb3JtRGF0YTo6YXBwZW5kRmlsZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIHRp
bWVfdCBtb2RpZmljYXRpb25UaW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKIHsKLSAgICBt
X2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIHNob3VsZEdlbmVyYXRl
RmlsZSkpOworICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChmaWxlbmFtZSwg
c3RhcnQsIGxlbmd0aCwgbW9kaWZpY2F0aW9uVGltZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CiB9
CiAKIHZvaWQgRm9ybURhdGE6OmZsYXR0ZW4oVmVjdG9yPGNoYXI+JiBkYXRhKSBjb25zdApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAppbmRleCA3Mjc4ZjJlLi5hYTVkZWE4IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaApAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSBGb3Jt
RGF0YV9oCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHRpbWUuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApA
QCAtMzIsMTEgKzMzLDE0IEBAIGNsYXNzIEZvcm1EYXRhRWxlbWVudCB7CiBwdWJsaWM6CiAgICAg
Rm9ybURhdGFFbGVtZW50KCkgOiBtX3R5cGUoZGF0YSkgeyB9CiAgICAgRm9ybURhdGFFbGVtZW50
KGNvbnN0IFZlY3RvcjxjaGFyPiYgYXJyYXkpIDogbV90eXBlKGRhdGEpLCBtX2RhdGEoYXJyYXkp
IHsgfQotICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNo
b3VsZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVuYW1lKGZpbGVu
YW1lKSwgbV9zaG91bGRHZW5lcmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKSB7IH0KKyAgICBG
b3JtRGF0YUVsZW1lbnQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgaW50NjRfdCBmaWxlU3RhcnQs
IGludDY0X3QgZmlsZUxlbmd0aCwgdGltZV90IGZpbGVNb2RpZmljYXRpb25UaW1lLCBib29sIHNo
b3VsZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVuYW1lKGZpbGVu
YW1lKSwgbV9maWxlU3RhcnQoZmlsZVN0YXJ0KSwgbV9maWxlTGVuZ3RoKGZpbGVMZW5ndGgpLCBt
X2ZpbGVNb2RpZmljYXRpb25UaW1lKGZpbGVNb2RpZmljYXRpb25UaW1lKSwgbV9zaG91bGRHZW5l
cmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKSB7IH0KIAogICAgIGVudW0geyBkYXRhLCBlbmNv
ZGVkRmlsZSB9IG1fdHlwZTsKICAgICBWZWN0b3I8Y2hhcj4gbV9kYXRhOwogICAgIFN0cmluZyBt
X2ZpbGVuYW1lOworICAgIGludDY0X3QgbV9maWxlU3RhcnQ7CisgICAgaW50NjRfdCBtX2ZpbGVM
ZW5ndGg7CisgICAgdGltZV90IG1fZmlsZU1vZGlmaWNhdGlvblRpbWU7CiAgICAgU3RyaW5nIG1f
Z2VuZXJhdGVkRmlsZW5hbWU7CiAgICAgYm9vbCBtX3Nob3VsZEdlbmVyYXRlRmlsZTsKIH07CkBA
IC01MCw3ICs1NCw3IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGFFbGVt
ZW50JiBhLCBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoYS5tX2RhdGEgIT0gYi5tX2RhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoYS5tX2ZpbGVuYW1lICE9IGIubV9maWxlbmFtZSkKKyAgICBpZiAoYS5tX2ZpbGVuYW1l
ICE9IGIubV9maWxlbmFtZSB8fCBhLm1fZmlsZVN0YXJ0ICE9IGIubV9maWxlU3RhcnQgfHwgYS5t
X2ZpbGVMZW5ndGggIT0gYi5tX2ZpbGVMZW5ndGggfHwgYS5tX2ZpbGVNb2RpZmljYXRpb25UaW1l
ICE9IGIubV9maWxlTW9kaWZpY2F0aW9uVGltZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgcmV0dXJuIHRydWU7CkBAIC03Miw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICB+Rm9ybURhdGEo
KTsKICAgICAKICAgICB2b2lkIGFwcGVuZERhdGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KTsK
LSAgICB2b2lkIGFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRH
ZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CisgICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgdGltZV90IG1vZGlm
aWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOwogCiAgICAgdm9p
ZCBmbGF0dGVuKFZlY3RvcjxjaGFyPiYpIGNvbnN0OyAvLyBvbWl0cyBmaWxlcwogICAgIFN0cmlu
ZyBmbGF0dGVuVG9TdHJpbmcoKSBjb25zdDsgLy8gb21pdHMgZmlsZXMKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0gYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCmluZGV4IDhhYTlhNmQu
LjRiNWEwMDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURh
dGFTdHJlYW1NYWMubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0
YVN0cmVhbU1hYy5tbQpAQCAtMTI1LDYgKzEyNSw3IEBAIHN0cnVjdCBGb3JtU3RyZWFtRmllbGRz
IHsKICAgICBTY2hlZHVsZVBhaXJIYXNoU2V0IHNjaGVkdWxlZFJ1bkxvb3BQYWlyczsKICAgICBW
ZWN0b3I8Rm9ybURhdGFFbGVtZW50PiByZW1haW5pbmdFbGVtZW50czsgLy8gaW4gcmV2ZXJzZSBv
cmRlcgogICAgIENGUmVhZFN0cmVhbVJlZiBjdXJyZW50U3RyZWFtOworICAgIGxvbmcgbG9uZyBj
dXJyZW50U3RyZWFtUmFuZ2VMZW5ndGg7CiAgICAgY2hhciogY3VycmVudERhdGE7CiAgICAgQ0ZS
ZWFkU3RyZWFtUmVmIGZvcm1TdHJlYW07CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIHN0cmVhbUxl
bmd0aDsKQEAgLTE0NSwxMiArMTQ2LDEyIEBAIHN0YXRpYyB2b2lkIGNsb3NlQ3VycmVudFN0cmVh
bShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgYWR2YW5j
ZUN1cnJlbnRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKK3N0YXRpYyBib29sIGFkdmFu
Y2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0pCiB7CiAgICAgY2xvc2VDdXJy
ZW50U3RyZWFtKGZvcm0pOwogCiAgICAgaWYgKGZvcm0tPnJlbWFpbmluZ0VsZW1lbnRzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIENy
ZWF0ZSB0aGUgbmV3IHN0cmVhbS4KICAgICBGb3JtRGF0YUVsZW1lbnQmIG5leHRJbnB1dCA9IGZv
cm0tPnJlbWFpbmluZ0VsZW1lbnRzLmxhc3QoKTsKQEAgLTE2MCwxMCArMTYxLDIxIEBAIHN0YXRp
YyB2b2lkIGFkdmFuY2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0pCiAgICAg
ICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBDRlJlYWRTdHJlYW1DcmVhdGVXaXRoQnl0ZXNOb0Nv
cHkoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEpLCBzaXplLCBrQ0ZBbGxv
Y2F0b3JOdWxsKTsKICAgICAgICAgZm9ybS0+Y3VycmVudERhdGEgPSBkYXRhOwogICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChuZXh0SW5wdXQubV9maWxlTW9kaWZpY2F0aW9uVGltZSkgeworICAg
ICAgICAgICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7CisgICAgICAgICAgICBpZiAoZ2V0Rmls
ZU1vZGlmaWNhdGlvblRpbWUobmV4dElucHV0Lm1fZmlsZW5hbWUsIG1vZGlmaWNhdGlvblRpbWUp
ICYmIG1vZGlmaWNhdGlvblRpbWUgIT0gbmV4dElucHV0Lm1fZmlsZU1vZGlmaWNhdGlvblRpbWUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKICAgICAgICAgY29u
c3QgU3RyaW5nJiBwYXRoID0gbmV4dElucHV0Lm1fc2hvdWxkR2VuZXJhdGVGaWxlID8gbmV4dElu
cHV0Lm1fZ2VuZXJhdGVkRmlsZW5hbWUgOiBuZXh0SW5wdXQubV9maWxlbmFtZTsKICAgICAgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBmaWxlbmFtZShBZG9wdENGLCBwYXRoLmNyZWF0ZUNGU3Ry
aW5nKCkpOwogICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpbGVVUkwoQWRvcHRDRiwgQ0ZV
UkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoMCwgZmlsZW5hbWUuZ2V0KCksIGtDRlVSTFBPU0lY
UGF0aFN0eWxlLCBGQUxTRSkpOwogICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtID0gQ0ZSZWFk
U3RyZWFtQ3JlYXRlV2l0aEZpbGUoMCwgZmlsZVVSTC5nZXQoKSk7CisgICAgICAgIGlmIChuZXh0
SW5wdXQubV9maWxlU3RhcnQgPiAwKSB7CisgICAgICAgICAgICBDRk51bWJlclJlZiBwb3NpdGlv
biA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckxvbmdMb25nVHlwZSwgJm5leHRJbnB1dC5t
X2ZpbGVTdGFydCk7CisgICAgICAgICAgICBDRlJlYWRTdHJlYW1TZXRQcm9wZXJ0eShmb3JtLT5j
dXJyZW50U3RyZWFtLCBrQ0ZTdHJlYW1Qcm9wZXJ0eUZpbGVDdXJyZW50T2Zmc2V0LCBwb3NpdGlv
bik7CisgICAgICAgIH0KKyAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0g
bmV4dElucHV0Lm1fZmlsZUxlbmd0aDsKICAgICB9CiAgICAgZm9ybS0+cmVtYWluaW5nRWxlbWVu
dHMucmVtb3ZlTGFzdCgpOwogCkBAIC0xNzYsMTYgKzE4OCwxOSBAQCBzdGF0aWMgdm9pZCBhZHZh
bmNlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQogICAgIFNjaGVkdWxlUGFp
ckhhc2hTZXQ6Oml0ZXJhdG9yIGVuZCA9IGZvcm0tPnNjaGVkdWxlZFJ1bkxvb3BQYWlycy5lbmQo
KTsKICAgICBmb3IgKFNjaGVkdWxlUGFpckhhc2hTZXQ6Oml0ZXJhdG9yIGl0ID0gZm9ybS0+c2No
ZWR1bGVkUnVuTG9vcFBhaXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgQ0ZS
ZWFkU3RyZWFtU2NoZWR1bGVXaXRoUnVuTG9vcChmb3JtLT5jdXJyZW50U3RyZWFtLCAoKml0KS0+
cnVuTG9vcCgpLCAoKml0KS0+bW9kZSgpKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0
aWMgdm9pZCBvcGVuTmV4dFN0cmVhbShGb3JtU3RyZWFtRmllbGRzKiBmb3JtKQorc3RhdGljIGJv
b2wgb3Blbk5leHRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyogZm9ybSkKIHsKICAgICAvLyBTa2lw
IG92ZXIgYW55IHN0cmVhbXMgd2UgY2FuJ3Qgb3Blbi4KLSAgICAvLyBGb3Igc29tZSBwdXJwb3Nl
cyB3ZSBtaWdodCB3YW50IHRvIHJldHVybiBhbiBlcnJvciwgYnV0IHRoZSBjdXJyZW50IE5TVVJM
Q29ubmVjdGlvbgotICAgIC8vIGNhbid0IHJlYWxseSBkbyBhbnl0aGluZyB1c2VmdWwgd2l0aCBh
biBlcnJvciBhdCB0aGlzIHBvaW50LCBzbyB0aGlzIGlzIGJldHRlci4KLSAgICBhZHZhbmNlQ3Vy
cmVudFN0cmVhbShmb3JtKTsKKyAgICBpZiAoIWFkdmFuY2VDdXJyZW50U3RyZWFtKGZvcm0pKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgd2hpbGUgKGZvcm0tPmN1cnJlbnRTdHJlYW0gJiYg
IUNGUmVhZFN0cmVhbU9wZW4oZm9ybS0+Y3VycmVudFN0cmVhbSkpCi0gICAgICAgIGFkdmFuY2VD
dXJyZW50U3RyZWFtKGZvcm0pOworICAgICAgICBpZiAoIWFkdmFuY2VDdXJyZW50U3RyZWFtKGZv
cm0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCiBz
dGF0aWMgdm9pZCogZm9ybUNyZWF0ZShDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCB2b2lkKiBjb250
ZXh0KQpAQCAtMTk0LDYgKzIwOSw3IEBAIHN0YXRpYyB2b2lkKiBmb3JtQ3JlYXRlKENGUmVhZFN0
cmVhbVJlZiBzdHJlYW0sIHZvaWQqIGNvbnRleHQpCiAKICAgICBGb3JtU3RyZWFtRmllbGRzKiBu
ZXdJbmZvID0gbmV3IEZvcm1TdHJlYW1GaWVsZHM7CiAgICAgbmV3SW5mby0+Y3VycmVudFN0cmVh
bSA9IE5VTEw7CisgICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gLTE7CiAg
ICAgbmV3SW5mby0+Y3VycmVudERhdGEgPSAwOwogICAgIG5ld0luZm8tPmZvcm1TdHJlYW0gPSBz
dHJlYW07IC8vIERvbid0IHJldGFpbi4gVGhhdCB3b3VsZCBjcmVhdGUgYSByZWZlcmVuY2UgY3lj
bGUuCiAgICAgbmV3SW5mby0+c3RyZWFtTGVuZ3RoID0gZm9ybUNvbnRleHQtPnN0cmVhbUxlbmd0
aDsKQEAgLTIyNiwxMSArMjQyLDExIEBAIHN0YXRpYyBCb29sZWFuIGZvcm1PcGVuKENGUmVhZFN0
cmVhbVJlZiwgQ0ZTdHJlYW1FcnJvciogZXJyb3IsIEJvb2xlYW4qIG9wZW5Db21wCiB7CiAgICAg
Rm9ybVN0cmVhbUZpZWxkcyogZm9ybSA9IHN0YXRpY19jYXN0PEZvcm1TdHJlYW1GaWVsZHMqPihj
b250ZXh0KTsKIAotICAgIG9wZW5OZXh0U3RyZWFtKGZvcm0pOworICAgIGJvb2wgb3BlbmVkID0g
b3Blbk5leHRTdHJlYW0oZm9ybSk7CiAKLSAgICAqb3BlbkNvbXBsZXRlID0gVFJVRTsKLSAgICBl
cnJvci0+ZXJyb3IgPSAwOwotICAgIHJldHVybiBUUlVFOworICAgICpvcGVuQ29tcGxldGUgPSBv
cGVuZWQ7CisgICAgZXJyb3ItPmVycm9yID0gb3BlbmVkID8gMCA6IGZuT3BuRXJyOworICAgIHJl
dHVybiBvcGVuZWQ7CiB9CiAKIHN0YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJl
ZiBzdHJlYW0sIFVJbnQ4KiBidWZmZXIsIENGSW5kZXggYnVmZmVyTGVuZ3RoLCBDRlN0cmVhbUVy
cm9yKiBlcnJvciwgQm9vbGVhbiogYXRFT0YsIHZvaWQqIGNvbnRleHQpCkBAIC0yMzgsNyArMjU0
LDEwIEBAIHN0YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJ
bnQ4KiBidWZmZXIsIENGSW5kZXggYnVmZmVyTGVuCiAgICAgRm9ybVN0cmVhbUZpZWxkcyogZm9y
bSA9IHN0YXRpY19jYXN0PEZvcm1TdHJlYW1GaWVsZHMqPihjb250ZXh0KTsKIAogICAgIHdoaWxl
IChmb3JtLT5jdXJyZW50U3RyZWFtKSB7Ci0gICAgICAgIENGSW5kZXggYnl0ZXNSZWFkID0gQ0ZS
ZWFkU3RyZWFtUmVhZChmb3JtLT5jdXJyZW50U3RyZWFtLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCk7
CisgICAgICAgIENGSW5kZXggYnl0ZXNUb1JlYWQgPSBidWZmZXJMZW5ndGg7CisgICAgICAgIGlm
IChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gLTEgJiYgZm9ybS0+Y3VycmVudFN0
cmVhbVJhbmdlTGVuZ3RoIDwgYnl0ZXNUb1JlYWQpCisgICAgICAgICAgICBieXRlc1RvUmVhZCA9
IHN0YXRpY19jYXN0PENGSW5kZXg+KGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCk7Cisg
ICAgICAgIENGSW5kZXggYnl0ZXNSZWFkID0gQ0ZSZWFkU3RyZWFtUmVhZChmb3JtLT5jdXJyZW50
U3RyZWFtLCBidWZmZXIsIGJ5dGVzVG9SZWFkKTsKICAgICAgICAgaWYgKGJ5dGVzUmVhZCA8IDAp
IHsKICAgICAgICAgICAgICplcnJvciA9IENGUmVhZFN0cmVhbUdldEVycm9yKGZvcm0tPmN1cnJl
bnRTdHJlYW0pOwogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMjQ3LDYgKzI2Niw4IEBAIHN0
YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJbnQ4KiBidWZm
ZXIsIENGSW5kZXggYnVmZmVyTGVuCiAgICAgICAgICAgICBlcnJvci0+ZXJyb3IgPSAwOwogICAg
ICAgICAgICAgKmF0RU9GID0gRkFMU0U7CiAgICAgICAgICAgICBmb3JtLT5ieXRlc1NlbnQgKz0g
Ynl0ZXNSZWFkOworICAgICAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0
aCAhPSAtMSkKKyAgICAgICAgICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGgg
LT0gYnl0ZXNSZWFkOwogCiAgICAgICAgICAgICBpZiAoIVJlc291cmNlSGFuZGxlOjpkaWRTZW5k
Qm9keURhdGFEZWxlZ2F0ZUV4aXN0cygpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEZp
Z3VyZSBvdXQgaG93IHRvIG9ubHkgZG8gdGhpcyB3aGVuIGEgUmVzb3VyY2VIYW5kbGVDbGllbnQg
aXMgYXZhaWxhYmxlLgpAQCAtMzU5LDkgKzM4MCwxMyBAQCB2b2lkIHNldEhUVFBCb2R5KE5TTXV0
YWJsZVVSTFJlcXVlc3QgKnJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhKQog
ICAgICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKQogICAg
ICAgICAgICAgbGVuZ3RoICs9IGVsZW1lbnQubV9kYXRhLnNpemUoKTsKICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBsb25nIGxvbmcgZmlsZVNpemU7Ci0gICAgICAgICAgICBpZiAoZ2V0Rmls
ZVNpemUoZWxlbWVudC5tX3Nob3VsZEdlbmVyYXRlRmlsZSA/IGVsZW1lbnQubV9nZW5lcmF0ZWRG
aWxlbmFtZSA6IGVsZW1lbnQubV9maWxlbmFtZSwgZmlsZVNpemUpKQotICAgICAgICAgICAgICAg
IGxlbmd0aCArPSBmaWxlU2l6ZTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50Lm1fZmlsZUxlbmd0
aCAhPSAtMSkKKyAgICAgICAgICAgICAgICBsZW5ndGggKz0gZWxlbWVudC5tX2ZpbGVMZW5ndGg7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb25nIGxvbmcgZmlsZVNpemU7
CisgICAgICAgICAgICAgICAgaWYgKGdldEZpbGVTaXplKGVsZW1lbnQubV9zaG91bGRHZW5lcmF0
ZUZpbGUgPyBlbGVtZW50Lm1fZ2VuZXJhdGVkRmlsZW5hbWUgOiBlbGVtZW50Lm1fZmlsZW5hbWUs
IGZpbGVTaXplKSkKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IGZpbGVTaXplOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKaW5kZXgg
MzI4MThkZi4uOTk3ZWVjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCisrKyBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtNDQ0LDcgKzQ0NCw3
IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoQmxvYiogYm9keSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ugc2V0IGEgQ29udGVudC1UeXBlIGlmIG9u
ZSBpcyBub3Qgc2V0LgogICAgICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIHVwbG9hZGlu
ZyBidW5kbGVzLgogICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0
ZSgpOwotICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlKGJvZHktPnBhdGgo
KSwgZmFsc2UpOworICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlKGJvZHkt
PnBhdGgoKSwgYm9keS0+c3RhcnQoKSwgYm9keS0+bGVuZ3RoKCksIGJvZHktPm1vZGlmaWNhdGlv
blRpbWUoKSwgZmFsc2UpOwogICAgIH0KIAogICAgIGNyZWF0ZVJlcXVlc3QoZWMpOwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKaW5kZXggNGY2MjMwOS4uMjc4ZmU5ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMDItMDMgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJsb2Iuc2xpY2Ugc3VwcG9ydC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkzCisK
KyAgICAgICAgQ2hyb21pdW0tc2lkZSBjaGFuZ2UgdG8gc3VwcG9ydCBCbG9iLnNsaWNlLgorCisg
ICAgICAgICogcHVibGljL1dlYkhUVFBCb2R5Lmg6CisgICAgICAgICogc3JjL1dlYkhUVFBCb2R5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSFRUUEJvZHk6OmVsZW1lbnRBdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkhUVFBCb2R5OjphcHBlbmRGaWxlKToKKwogMjAxMC0wMi0wMiAgWXVyeSBT
ZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQ
YXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJIVFRQ
Qm9keS5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJIVFRQQm9keS5oCmluZGV4IDQzZjUx
YTYuLjQ2NzIwZjkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSFRUUEJv
ZHkuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkhUVFBCb2R5LmgKQEAgLTUwLDYg
KzUwLDggQEAgcHVibGljOgogICAgICAgICBlbnVtIHsgVHlwZURhdGEsIFR5cGVGaWxlIH0gdHlw
ZTsKICAgICAgICAgV2ViRGF0YSBkYXRhOwogICAgICAgICBXZWJTdHJpbmcgZmlsZVBhdGg7Cisg
ICAgICAgIGxvbmcgbG9uZyBmaWxlU3RhcnQ7CisgICAgICAgIGxvbmcgbG9uZyBmaWxlTGVuZ3Ro
OwogICAgIH07CiAKICAgICB+V2ViSFRUUEJvZHkoKSB7IHJlc2V0KCk7IH0KQEAgLTc3LDcgKzc5
LDcgQEAgcHVibGljOgogCiAgICAgLy8gQXBwZW5kIHRvIHRoZSBsaXN0IG9mIGVsZW1lbnRzLgog
ICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFdlYkRhdGEmKTsKLSAgICBXRUJL
SVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmKTsKKyAgICBXRUJLSVRfQVBJ
IHZvaWQgYXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmLCBsb25nIGxvbmcgZmlsZVN0YXJ0LCBs
b25nIGxvbmcgZmlsZUxlbmd0aCk7CiAKICAgICAvLyBJZGVudGlmaWVzIGEgcGFydGljdWxhciBm
b3JtIHN1Ym1pc3Npb24gaW5zdGFuY2UuICBBIHZhbHVlIG9mIDAgaXMKICAgICAvLyB1c2VkIHRv
IGluZGljYXRlIGFuIHVuc3BlY2lmaWVkIGlkZW50aWZpZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkhUVFBCb2R5LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSFRU
UEJvZHkuY3BwCmluZGV4IDMzNWVkNWMuLjkxMDZjMTAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSFRUUEJvZHkuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSFRU
UEJvZHkuY3BwCkBAIC04Myw2ICs4Myw4IEBAIGJvb2wgV2ViSFRUUEJvZHk6OmVsZW1lbnRBdChz
aXplX3QgaW5kZXgsIEVsZW1lbnQmIHJlc3VsdCkgY29uc3QKICAgICAgICAgcmVzdWx0LnR5cGUg
PSBFbGVtZW50OjpUeXBlRmlsZTsKICAgICAgICAgcmVzdWx0LmRhdGEucmVzZXQoKTsKICAgICAg
ICAgcmVzdWx0LmZpbGVQYXRoID0gZWxlbWVudC5tX2ZpbGVuYW1lOworICAgICAgICByZXN1bHQu
ZmlsZVN0YXJ0ID0gZWxlbWVudC5tX2ZpbGVTdGFydDsKKyAgICAgICAgcmVzdWx0LmZpbGVMZW5n
dGggPSBlbGVtZW50Lm1fZmlsZUxlbmd0aDsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMDAsMTAgKzEwMiwxMCBAQCB2b2lk
IFdlYkhUVFBCb2R5OjphcHBlbmREYXRhKGNvbnN0IFdlYkRhdGEmIGRhdGEpCiAgICAgbV9wcml2
YXRlLT5hcHBlbmREYXRhKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CiB9CiAKLXZvaWQgV2Vi
SFRUUEJvZHk6OmFwcGVuZEZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCkKK3ZvaWQgV2Vi
SFRUUEJvZHk6OmFwcGVuZEZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCwgbG9uZyBsb25n
IGZpbGVTdGFydCwgbG9uZyBsb25nIGZpbGVMZW5ndGgpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgp
OwotICAgIG1fcHJpdmF0ZS0+YXBwZW5kRmlsZShmaWxlUGF0aCk7CisgICAgbV9wcml2YXRlLT5h
cHBlbmRGaWxlKGZpbGVQYXRoLCBmaWxlU3RhcnQsIGZpbGVMZW5ndGgpOwogfQogCiBsb25nIGxv
bmcgV2ViSFRUUEJvZHk6OmlkZW50aWZpZXIoKSBjb25zdAo=
</data>
<flag name="commit-queue"
          id="30699"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48087</attachid>
            <date>2010-02-03 17:59:20 -0800</date>
            <delta_ts>2010-02-09 14:48:31 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>32993_4</filename>
            <type>text/plain</type>
            <size>36403</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlMTBhODAxLi42NTVjZjQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTAtMDIt
MDMgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJsb2Iuc2xpY2Ugc3VwcG9ydC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkzCisKKyAgICAgICAg
QWRkIGEgbGF5b3V0IHRlc3QgdG8gdGVzdCBzbGljaW5nIGFuZCBzZW5kaW5nIGEgZmlsZS4KKwor
ICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQ6
CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZHJhZy1maWxlLXRvLWZpbGUt
aW5wdXQtZWxlbWVudC5qczogQWRkZWQuCisgICAgICAgIChmaWxlSW5wdXQpOgorICAgICAgICAo
KToKKyAgICAgICAgKG1vdmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KToKKyAgICAgICAgKHJlbW92
ZUZpbGVJbnB1dEVsZW1lbnQpOgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2Vz
L2ZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9y
ZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanM6CisgICAgICAgIChvbkZpbGVEcm9wKToKKyAg
ICAgICAgKHJ1blRlc3QpOgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3Nl
bmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qczogQWRkZWQuCisgICAgICAgICh1cGxvYWRGaWxlKToK
KyAgICAgICAgKGNyZWF0ZU9yVXBkYXRlVGVtcEZpbGUpOgorICAgICAgICAocmVtb3ZlVGVtcEZp
bGUpOgorICAgICAgICAob25TdGFibGVGaWxlRHJvcCk6CisgICAgICAgIChkcmFnQW5kU2xpY2VT
dGFibGVGaWxlKToKKyAgICAgICAgKG9uVW5zdGFibGVGaWxlRHJvcCk6CisgICAgICAgIChvbk1v
ZGlmeUZpbGUpOgorICAgICAgICAob25VcGxvYWRNb2RpZmllZEZpbGUpOgorICAgICAgICAoZHJh
Z0FuZFNsaWNlVW5zdGFibGVGaWxlKToKKyAgICAgICAgKGRvbmUpOgorICAgICAgICAocnVuVGVz
dCk6CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1sOgor
ICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1k
cmFnZ2VkLWZpbGUuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9yZXNvdXJjZXMv
d3JpdGUtdGVtcC1maWxlLnBocDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9k
b20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dDoKKwogMjAxMC0wMi0wMiAg
RnVtaXRvc2hpIFVrYWkgIDx1a2FpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBbGV4ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20v
V2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKaW5kZXggZGU1M2MyNy4u
YWJhODA5ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1w
cm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cv
d2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CkBAIC0xNDksNiArMTQ5LDcgQEAgd2luZG93
LkJlZm9yZUxvYWRFdmVudC5wcm90b3R5cGUucHJldmVudERlZmF1bHQgW2Z1bmN0aW9uXQogd2lu
ZG93LkJlZm9yZUxvYWRFdmVudC5wcm90b3R5cGUuc3RvcFByb3BhZ2F0aW9uIFtmdW5jdGlvbl0K
IHdpbmRvdy5CbG9iIFtvYmplY3QgQmxvYkNvbnN0cnVjdG9yXQogd2luZG93LkJsb2IucHJvdG90
eXBlIFtvYmplY3QgQmxvYlByb3RvdHlwZV0KK3dpbmRvdy5CbG9iLnByb3RvdHlwZS5zbGljZSBb
ZnVuY3Rpb25dCiB3aW5kb3cuQ0RBVEFTZWN0aW9uIFtvYmplY3QgQ0RBVEFTZWN0aW9uQ29uc3Ry
dWN0b3JdCiB3aW5kb3cuQ0RBVEFTZWN0aW9uLnByb3RvdHlwZSBbb2JqZWN0IENEQVRBU2VjdGlv
blByb3RvdHlwZV0KIHdpbmRvdy5DREFUQVNlY3Rpb24ucHJvdG90eXBlLkFUVFJJQlVURV9OT0RF
IFtudW1iZXJdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291
cmNlcy9kcmFnLWZpbGUtdG8tZmlsZS1pbnB1dC1lbGVtZW50LmpzIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZHJhZy1maWxlLXRvLWZpbGUtaW5wdXQtZWxlbWVudC5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTFjNjgwCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZHJhZy1maWxl
LXRvLWZpbGUtaW5wdXQtZWxlbWVudC5qcwpAQCAtMCwwICsxLDQ2IEBACit2YXIgZmlsZUlucHV0
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKK2ZpbGVJbnB1dC50eXBlID0gImZp
bGUiOworZmlsZUlucHV0LnN0eWxlLndpZHRoID0gIjEwMHB4IjsKK2ZpbGVJbnB1dC5zdHlsZS5o
ZWlnaHQgPSAiMTAwcHgiOworLy8gSW1wb3J0YW50IHRoYXQgd2UgcHV0IHRoaXMgYXQgdGhlIHRv
cCBvZiB0aGUgZG9jIHNvIHRoYXQgbG9nZ2luZyBkb2VzIG5vdCBjYXVzZSBpdCB0byBnbyBvdXQg
b2YgdmlldyAod2hlcmUgaXQgY2FuJ3QgYmUgZHJhZ2dlZCB0bykKK2RvY3VtZW50LmJvZHkuaW5z
ZXJ0QmVmb3JlKGZpbGVJbnB1dCwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTsKKworZmlsZUlu
cHV0LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdlbnRlciIsIGZ1bmN0aW9uKCkgeworICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2ZpbGVJbnB1dC5hZGRFdmVudExpc3Rl
bmVyKCJkcmFnb3ZlciIsIGZ1bmN0aW9uKCkgeworICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9w
RWZmZWN0ID0gImNvcHkiOworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7
CisKK3ZhciBmaWxlSW5wdXREcm9wQ2FsbGJhY2sgPSBudWxsOworZmlsZUlucHV0LmFkZEV2ZW50
TGlzdGVuZXIoImRyb3AiLCBmdW5jdGlvbigpIHsKKyAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVy
LnR5cGVzLmluZGV4T2YoIkZpbGVzIikgIT0gLTEgJiYgZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVz
Lmxlbmd0aCA9PSAxKQorICAgICAgICB0ZXN0UGFzc2VkKCJldmVudC5kYXRhVHJhbnNmZXIgY29u
dGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLiIpOworICAgIGVsc2UgeworICAgICAgICB0ZXN0
RmFpbGVkKCJldmVudC5kYXRhVHJhbnNmZXIgZG9lcyBub3QgY29udGFpbiBhIEZpbGUgb2JqZWN0
IG9uIGRyb3AuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmaWxlSW5wdXREcm9w
Q2FsbGJhY2soZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzWzBdKTsKKworICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2Z1bmN0aW9uIHNldEZpbGVJbnB1dERyb3BDYWxs
YmFjayhmaWxlSW5wdXREcm9wQ2FsbGJhY2tGdW5jKQoreworICAgIGZpbGVJbnB1dERyb3BDYWxs
YmFjayA9IGZpbGVJbnB1dERyb3BDYWxsYmFja0Z1bmM7Cit9CisKK2Z1bmN0aW9uIG1vdmVNb3Vz
ZVRvQ2VudGVyT2ZFbGVtZW50KGVsZW1lbnQpCit7CisgICAgdmFyIGNlbnRlclggPSBlbGVtZW50
Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMjsKKyAgICB2YXIgY2VudGVyWSA9
IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOworICAgIGV2ZW50
U2VuZGVyLm1vdXNlTW92ZVRvKGNlbnRlclgsIGNlbnRlclkpOworfQorCitmdW5jdGlvbiByZW1v
dmVGaWxlSW5wdXRFbGVtZW50KCkKK3sKKyAgICBmaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVD
aGlsZChmaWxlSW5wdXQpCit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xv
Y2FsL3Jlc291cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0IGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dAppbmRleCA1
YWIyZjhhLi42YTUzN2I1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2Fs
L3Jlc291cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL2ZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQKQEAgLTEg
KzEgQEAKLUhlbGxvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorMTIzNDU2Nzg5MApcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtZHJhZ2dlZC1maWxlLmpzIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanMKaW5kZXggYmVkNDA3
OC4uZWZjMTEyNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNv
dXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9s
b2NhbC9yZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanMKQEAgLTEsNDggKzEsMjEgQEAKIGRl
c2NyaXB0aW9uKCJUZXN0IGZvciBzZW5kaW5nIGEgZHJhZ2dlZCBmaWxlIHZpYSBYTUxIdHRwUmVx
dWVzdC4iKTsKIAotdmFyIGZpbGVJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0
Iik7Ci1maWxlSW5wdXQudHlwZSA9ICJmaWxlIjsKLWZpbGVJbnB1dC5zdHlsZS53aWR0aCA9ICIx
MDBweCI7Ci1maWxlSW5wdXQuc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKLS8vIEltcG9ydGFudCB0
aGF0IHdlIHB1dCB0aGlzIGF0IHRoZSB0b3Agb2YgdGhlIGRvYyBzbyB0aGF0IGxvZ2dpbmcgZG9l
cyBub3QgY2F1c2UgaXQgdG8gZ28gb3V0IG9mIHZpZXcgKHdoZXJlIGl0IGNhbid0IGJlIGRyYWdn
ZWQgdG8pCi1kb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShmaWxlSW5wdXQsIGRvY3VtZW50LmJv
ZHkuZmlyc3RDaGlsZCk7Ci0KLWZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIi
LCBmdW5jdGlvbigpIHsKLSAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotfSwgZmFsc2UpOwot
Ci1maWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCBmdW5jdGlvbigpIHsKLSAg
ICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICJjb3B5IjsKLSAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOwotfSwgZmFsc2UpOwotCi1maWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigi
ZHJvcCIsIGZ1bmN0aW9uKCkgewotICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5k
ZXhPZigiRmlsZXMiKSAhPSAtMSAmJiBldmVudC5kYXRhVHJhbnNmZXIuZmlsZXMubGVuZ3RoID09
IDEpCi0gICAgICAgIHRlc3RQYXNzZWQoImV2ZW50LmRhdGFUcmFuc2ZlciBjb250YWlucyBhIEZp
bGUgb2JqZWN0IG9uIGRyb3AuIik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoImV2
ZW50LmRhdGFUcmFuc2ZlciBkb2VzIG5vdCBjb250YWluIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4i
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQorZnVuY3Rpb24gb25GaWxlRHJvcChmaWxlKQor
ewogICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICB4aHIub3BlbigiUE9T
VCIsICJodHRwOi8vMTI3LjAuMC4xOjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3Bvc3Qt
ZWNoby5jZ2kiLCBmYWxzZSk7Ci0gICAgeGhyLnNlbmQoZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVz
WzBdKTsKLSAgICBpZiAoeGhyLnJlc3BvbnNlVGV4dCA9PSAiSGVsbG8iKQorICAgIHhoci5zZW5k
KGZpbGUpOworICAgIGlmICh4aHIucmVzcG9uc2VUZXh0ID09ICIxMjM0NTY3ODkwIikKICAgICAg
ICAgdGVzdFBhc3NlZCgiRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZC4iKTsKICAgICBl
bHNlCiAgICAgICAgIHRlc3RGYWlsZWQoIlVuZXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZl
ZDogIiArIHhoci5yZXNwb25zZVRleHQpOwogCiAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsK
LX0sIGZhbHNlKTsKLQotZnVuY3Rpb24gbW92ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQoZWxlbWVu
dCkgewotICAgIHZhciBjZW50ZXJYID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVudC5vZmZz
ZXRXaWR0aCAvIDI7Ci0gICAgdmFyIGNlbnRlclkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1l
bnQub2Zmc2V0SGVpZ2h0IC8gMjsKLSAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhjZW50ZXJY
LCBjZW50ZXJZKTsKIH0KIAogZnVuY3Rpb24gcnVuVGVzdCgpCiB7CisgICAgc2V0RmlsZUlucHV0
RHJvcENhbGxiYWNrKG9uRmlsZURyb3ApOwogICAgIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhG
aWxlcyhbInJlc291cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0Il0pOwogICAgIG1vdmVN
b3VzZVRvQ2VudGVyT2ZFbGVtZW50KGZpbGVJbnB1dCk7CiAgICAgZXZlbnRTZW5kZXIubW91c2VV
cCgpOwpAQCAtNTEsNyArMjQsNyBAQCBmdW5jdGlvbiBydW5UZXN0KCkKIGlmICh3aW5kb3cuZXZl
bnRTZW5kZXIpIHsKICAgICBydW5UZXN0KCk7CiAgICAgLy8gQ2xlYW4gdXAgYWZ0ZXIgb3Vyc2Vs
dmVzCi0gICAgZmlsZUlucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZmlsZUlucHV0KTsKKyAg
ICByZW1vdmVGaWxlSW5wdXRFbGVtZW50KCk7CiB9IGVsc2UgewogICAgIHRlc3RGYWlsZWQoIlRo
aXMgdGVzdCBpcyBub3QgaW50ZXJhY3RpdmUsIHBsZWFzZSBydW4gdXNpbmcgRHVtcFJlbmRlclRy
ZWUiKTsKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3Vy
Y2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
bG9jYWwvcmVzb3VyY2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmZkNTMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxl
LmpzCkBAIC0wLDAgKzEsMTgwIEBACitkZXNjcmlwdGlvbigiVGVzdCBmb3Igc2xpY2luZyBhIGRy
YWdnZWQgZmlsZSBhbmQgc2VuZGluZyBpdCB2aWEgWE1MSHR0cFJlcXVlc3QuIik7CisKK3ZhciBv
cmlnaW5hbFRleHQgPSAiMTIzNDU2Nzg5MCI7Cit2YXIgdXBkYXRlZFRleHQgPSAiQUJDREVGR0hJ
SiI7Cit2YXIgc2xpY2VTdGFydDsKK3ZhciBzbGljZUxlbmd0aDsKK3ZhciB0ZW1wRmlsZU5hbWUg
PSAic2VuZC1zbGljZS1kcmFnZ2VkLWZpbGUudG1wIjsKK3ZhciB0ZW1wRmlsZU9yaWdpbmFsTW9k
aWZpY2F0aW9uVGltZTsKK3ZhciBzdWJmaWxlOworCitmdW5jdGlvbiB1cGxvYWRGaWxlKGZpbGUs
IGV4cGVjdGVkVGV4dCwgZXhwZWN0ZWRFeGNlcHRpb24pCit7CisgICAgdmFyIHhociA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6
ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcG9zdC1lY2hvLmNnaSIsIGZhbHNlKTsKKwor
ICAgIHZhciBwYXNzZWQ7CisgICAgdmFyIG1lc3NhZ2U7CisgICAgdHJ5IHsKKyAgICAgICAgeGhy
LnNlbmQoZmlsZSk7CisgICAgICAgIGlmIChleHBlY3RlZEV4Y2VwdGlvbikgeworICAgICAgICAg
ICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgICAgICBtZXNzYWdlID0gIlVuZXhwZWN0ZWQgcmVz
cG9uc2UgZGF0YSByZWNlaXZlZDogIiArIHhoci5yZXNwb25zZVRleHQgKyAiLiBFeHBlY3Rpbmcg
ZXhjZXB0aW9uIHRocm93biI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoeGhy
LnJlc3BvbnNlVGV4dCA9PSBleHBlY3RlZFRleHQpIHsKKyAgICAgICAgICAgICAgICBwYXNzZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAiRXhwZWN0ZWQgcmVzcG9uc2UgZGF0
YSByZWNlaXZlZDogIiArIHhoci5yZXNwb25zZVRleHQ7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1lc3NhZ2Ug
PSAiVW5leHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4
dCArICIuIEV4cGVjdGluZzogIiArIGV4cGVjdGVkVGV4dDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgIGlmIChleHBlY3RlZEV4Y2VwdGlvbikg
eworICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiRXhw
ZWN0ZWQgZXhjZXB0aW9uIHRocm93bjogIiArIGV4OworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgICAgICBtZXNzYWdlID0gIlVuZXhwZWN0ZWQg
ZXhjZXB0aW9uIHRocm93bjogIiArIGV4OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHBh
c3NlZCkKKyAgICAgICAgdGVzdFBhc3NlZChtZXNzYWdlKTsKKyAgICBlbHNlCisgICAgICAgIHRl
c3RGYWlsZWQobWVzc2FnZSk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZU9yVXBkYXRlVGVtcEZpbGUo
ZmlsZURhdGEpCit7CisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHho
ci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9yZXNvdXJjZXMvd3JpdGUtdGVt
cC1maWxlLnBocD9maWxlbmFtZT0iICsgdGVtcEZpbGVOYW1lICsgIiZkYXRhPSIgKyBmaWxlRGF0
YSwgZmFsc2UpOworICAgIHhoci5zZW5kKCk7CisgICAgaWYgKHhoci5zdGF0dXMgIT0gMjAwKSB7
CisgICAgICAgIHRlc3RGYWlsZWQoIlVuZXhwZWN0ZWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVk
OiAiICsgeGhyLnN0YXR1cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgdmFs
dWVzID0geGhyLnJlc3BvbnNlVGV4dC5zcGxpdCgnXG4nKTsKKyAgICBpZiAodmFsdWVzLmxlbmd0
aCA8IDIpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiVW5leHBlY3RlZCByZXNwb25zZSB0ZXh0IHJl
Y2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICByZXR1cm4gdmFsdWVzOworfQorCitmdW5jdGlvbiByZW1vdmVUZW1wRmlsZSgpCit7Cisg
ICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwg
Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9yZXNvdXJjZXMvcmVzZXQtdGVtcC1maWxlLnBocD9maWxl
bmFtZT0iICsgdGVtcEZpbGVOYW1lLCBmYWxzZSk7CisgICAgeGhyLnNlbmQoKTsKK30KKworZnVu
Y3Rpb24gb25TdGFibGVGaWxlRHJvcChmaWxlKQoreworICAgIC8vIFNsaWNlIHRoZSBmaWxlLgor
ICAgIHN1YmZpbGUgPSBmaWxlLnNsaWNlKHNsaWNlU3RhcnQsIHNsaWNlTGVuZ3RoKTsKKyAgICB2
YXIgZXhwZWN0ZWRUZXh0ID0gb3JpZ2luYWxUZXh0LnN1YnN0cmluZyhzbGljZVN0YXJ0LCBzbGlj
ZVN0YXJ0ICsgc2xpY2VMZW5ndGgpOworICAgIHNob3VsZEV2YWx1YXRlVG8oInN1YmZpbGUuc2l6
ZSIsIGV4cGVjdGVkVGV4dC5sZW5ndGgpOworCisgICAgLy8gVXBsb2FkIHRoZSBzbGljZWQgZmls
ZS4KKyAgICB1cGxvYWRGaWxlKHN1YmZpbGUsIGV4cGVjdGVkVGV4dCwgZmFsc2UpOworfQorCitm
dW5jdGlvbiBkcmFnQW5kU2xpY2VTdGFibGVGaWxlKHN0YXJ0LCBsZW5ndGgpCit7CisgICAgc2xp
Y2VTdGFydCA9IHN0YXJ0OworICAgIHNsaWNlTGVuZ3RoID0gbGVuZ3RoOworICAgIHNldEZpbGVJ
bnB1dERyb3BDYWxsYmFjayhvblN0YWJsZUZpbGVEcm9wKTsKKyAgICBldmVudFNlbmRlci5iZWdp
bkRyYWdXaXRoRmlsZXMoWyJyZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dCJdKTsK
KyAgICBtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudChmaWxlSW5wdXQpOworICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlVXAoKTsKK30KKworZnVuY3Rpb24gb25VbnN0YWJsZUZpbGVEcm9wKGZpbGUpCit7
CisgICAgLy8gU2xpY2UgdGhlIGZpbGUuCisgICAgc3ViZmlsZSA9IGZpbGUuc2xpY2Uoc2xpY2VT
dGFydCwgc2xpY2VMZW5ndGgpOworICAgIHZhciBleHBlY3RlZFRleHQgPSBvcmlnaW5hbFRleHQu
c3Vic3RyaW5nKHNsaWNlU3RhcnQsIHNsaWNlU3RhcnQgKyBzbGljZUxlbmd0aCk7CisgICAgc2hv
dWxkRXZhbHVhdGVUbygic3ViZmlsZS5zaXplIiwgZXhwZWN0ZWRUZXh0Lmxlbmd0aCk7CisgIAor
ICAgIC8vIFVwbG9hZCB0aGUgc2xpY2VkIGZpbGUuCisgICAgdXBsb2FkRmlsZShzdWJmaWxlLCBl
eHBlY3RlZFRleHQsIGZhbHNlKTsKKworICAgIC8vIFRoZSBmaWxlIG1vZGlmaWNhdGlvbiB0aW1l
IGlzIHNlY29uZC1iYXNlZC4gU28gZGVsYXkgY2hhbmdpbmcgdGhlIGZpbGUgaW4gb3JkZXIgdG8g
Z2V0IHRoZSBuZXcgbW9kaWZpY2F0aW9uIHRpbWUgZm9yIHRoZSBmaWxlLgorICAgIHNldFRpbWVv
dXQoIm9uTW9kaWZ5RmlsZSgpIiwgNTAwKTsKK30KKworZnVuY3Rpb24gb25Nb2RpZnlGaWxlKCkK
K3sKKyAgICAvLyBNb2RpZnkgdGhlIHVuZGVybHlpbmcgdGVtcCBmaWxlLgorICAgIHZhciB0ZW1w
RmlsZUluZm8gPSBjcmVhdGVPclVwZGF0ZVRlbXBGaWxlKHVwZGF0ZWRUZXh0KTsKKyAgICBpZiAo
dGVtcEZpbGVJbmZvLmxlbmd0aCA8IDIpIHsKKyAgICAgICAgZG9uZSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIHZhciB0ZW1wRmlsZUN1cnJlbnRNb2RpZmljYXRpb25UaW1lID0gdGVt
cEZpbGVJbmZvWzFdOworCisgICAgLy8gQ2hlY2sgdGhlIG5ldyBtb2RpZmljYXRpb24gdGltZSB0
byBtYWtlIHN1cmUgaXQgaXMgZGlmZmVyZW50LiBJZiBub3QsIHJlcGVhdCB0aGUgYWJvdmUgcHJv
Y2Vzcy4KKyAgICBpZiAodGVtcEZpbGVDdXJyZW50TW9kaWZpY2F0aW9uVGltZSA9PSB0ZW1wRmls
ZU9yaWdpbmFsTW9kaWZpY2F0aW9uVGltZSkKKyAgICAgICAgc2V0VGltZW91dCgnb25Nb2RpZnlG
aWxlKCknLCA1MDApOworICAgIGVsc2UKKyAgICAgICAgc2V0VGltZW91dCgnb25VcGxvYWRNb2Rp
ZmllZEZpbGUoKScsIDApOworfQorCitmdW5jdGlvbiBvblVwbG9hZE1vZGlmaWVkRmlsZSgpCit7
CisgICAgLy8gVXBsb2FkIHRoZSBzbGljZWQgZmlsZS4gV2Ugc2hvdWxkIHJlY2VpdmUgYW4gZXhj
ZXB0aW9uIHNpbmNlIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQuCisgICAgdXBsb2FkRmlsZShz
dWJmaWxlLCBudWxsLCB0cnVlKTsKKworICAgIC8vIFJlbW92ZSB0aGUgdGVtcCBmaWxlLgorICAg
IHJlbW92ZVRlbXBGaWxlKCk7CisKKyAgICBkb25lKCk7Cit9CisKK2Z1bmN0aW9uIGRyYWdBbmRT
bGljZVVuc3RhYmxlRmlsZShzdGFydCwgbGVuZ3RoKQoreworICAgIHZhciB0ZW1wRmlsZUluZm8g
PSBjcmVhdGVPclVwZGF0ZVRlbXBGaWxlKG9yaWdpbmFsVGV4dCk7CisgICAgaWYgKHRlbXBGaWxl
SW5mby5sZW5ndGggPCAyKSB7CisgICAgICAgIGRvbmUoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICB2YXIgdGVtcEZpbGVQYXRoID0gdGVtcEZpbGVJbmZvWzBdOworICAgIHRlbXBGaWxl
T3JpZ2luYWxNb2RpZmljYXRpb25UaW1lID0gdGVtcEZpbGVJbmZvWzFdOworCisgICAgc2xpY2VT
dGFydCA9IHN0YXJ0OworICAgIHNsaWNlTGVuZ3RoID0gbGVuZ3RoOworICAgIHNldEZpbGVJbnB1
dERyb3BDYWxsYmFjayhvblVuc3RhYmxlRmlsZURyb3ApOworICAgIGV2ZW50U2VuZGVyLmJlZ2lu
RHJhZ1dpdGhGaWxlcyhbdGVtcEZpbGVQYXRoXSk7CisgICAgbW92ZU1vdXNlVG9DZW50ZXJPZkVs
ZW1lbnQoZmlsZUlucHV0KTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Cit9CisKK2Z1bmN0
aW9uIGRvbmUoKQoreworICAgIHdpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAg
IGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitm
dW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBkcmFnQW5kU2xpY2VTdGFibGVGaWxlKDIsIDQpOwor
ICAgIGRyYWdBbmRTbGljZVN0YWJsZUZpbGUoMiwgMjApOworICAgIGRyYWdBbmRTbGljZVN0YWJs
ZUZpbGUoMTUsIDIwKTsKKworICAgIGRyYWdBbmRTbGljZVVuc3RhYmxlRmlsZSgzLCA1KTsKK30K
KworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKKworICAgIHJ1blRlc3QoKTsKKyAgICAvLyBDbGVhbiB1cCBhZnRlciBv
dXJzZWx2ZXMKKyAgICByZW1vdmVGaWxlSW5wdXRFbGVtZW50KCk7Cit9IGVsc2UgeworICAgIHRl
c3RGYWlsZWQoIlRoaXMgdGVzdCBpcyBub3QgaW50ZXJhY3RpdmUsIHBsZWFzZSBydW4gdXNpbmcg
RHVtcFJlbmRlclRyZWUiKTsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
bG9jYWwvc2VuZC1kcmFnZ2VkLWZpbGUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9j
YWwvc2VuZC1kcmFnZ2VkLWZpbGUuaHRtbAppbmRleCAzZjIyMTBhLi5lMGM0YjA1IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1s
CkBAIC03LDYgKzcsNyBAQAogPGJvZHk+CiA8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KIDxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kcmFnLWZpbGUtdG8t
ZmlsZS1pbnB1dC1lbGVtZW50LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
c2VuZC1kcmFnZ2VkLWZpbGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CiA8L2JvZHk+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQt
ZmlsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xp
Y2VkLWRyYWdnZWQtZmlsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYjQ2MDc5MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDIyIEBACitUZXN0IGZvciBzbGljaW5nIGEgZHJhZ2dlZCBmaWxlIGFuZCBzZW5kaW5nIGl0IHZp
YSBYTUxIdHRwUmVxdWVzdC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
ZXZlbnQuZGF0YVRyYW5zZmVyIGNvbnRhaW5zIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4KK1BBU1Mg
c3ViZmlsZS5zaXplIGlzIDQKK1BBU1MgRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDog
MzQ1NgorUEFTUyBldmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBk
cm9wLgorUEFTUyBzdWJmaWxlLnNpemUgaXMgOAorUEFTUyBFeHBlY3RlZCByZXNwb25zZSBkYXRh
IHJlY2VpdmVkOiAzNDU2Nzg5MAorUEFTUyBldmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBG
aWxlIG9iamVjdCBvbiBkcm9wLgorUEFTUyBzdWJmaWxlLnNpemUgaXMgMAorUEFTUyBFeHBlY3Rl
ZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAKK1BBU1MgZXZlbnQuZGF0YVRyYW5zZmVyIGNvbnRh
aW5zIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4KK1BBU1Mgc3ViZmlsZS5zaXplIGlzIDUKK1BBU1Mg
RXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDogNDU2NzgKK1BBU1MgRXhwZWN0ZWQgZXhj
ZXB0aW9uIHRocm93bjogRXJyb3I6IE5FVFdPUktfRVJSOiBYTUxIdHRwUmVxdWVzdCBFeGNlcHRp
b24gMTAxCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1k
cmFnZ2VkLWZpbGUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGlj
ZWQtZHJhZ2dlZC1maWxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YTU3MzU3MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwv
c2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2Ny
aXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvZHJhZy1maWxlLXRvLWZpbGUtaW5wdXQtZWxlbWVudC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1
bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VzL3dyaXRlLXRlbXAtZmlsZS5waHAgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlcy93cml0ZS10ZW1wLWZpbGUucGhwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZTJjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlcy93cml0ZS10ZW1wLWZpbGUucGhwCkBAIC0wLDAg
KzEsMjAgQEAKKzw/cGhwCityZXF1aXJlX29uY2UgJ3BvcnRhYmlsaXR5TGF5ZXIucGhwJzsKKwor
aWYgKCFzeXNfZ2V0X3RlbXBfZGlyKCkpIHsKKyAgICBlY2hvICJGQUlMOiBObyB0ZW1wIGRpciB3
YXMgcmV0dXJuZWQuXG4iOworICAgIGV4aXQoKTsKK30KKworJHRtcEZpbGUgPSBzeXNfZ2V0X3Rl
bXBfZGlyKCkgLiAiLyIgLiAkX0dFVFsnZmlsZW5hbWUnXTsKKworaWYgKCFmaWxlX3B1dF9jb250
ZW50cygkdG1wRmlsZSwgJF9HRVRbJ2RhdGEnXSkpIHsKKyAgICBlY2hvICJGQUlMOiB1bmFibGUg
dG8gd3JpdGUgdG8gZmlsZTogIiAuICR0bXBGaWxlIC4gIlxuIjsKKyAgICBleGl0KCk7Cit9CisK
KyRzdGF0ID0gc3RhdCgkdG1wRmlsZSk7CisKK2VjaG8gJHRtcEZpbGUgLiAiXG4iOworZWNobyAk
c3RhdFsnbXRpbWUnXTsKKz8+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9m
YXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVk
LnR4dAppbmRleCBmN2NhODZiLi4yMWNkZGE4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVy
dGllcy1leHBlY3RlZC50eHQKQEAgLTE0OSw2ICsxNDksNyBAQCB3aW5kb3cuQmVmb3JlTG9hZEV2
ZW50LnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdCBbZnVuY3Rpb25dCiB3aW5kb3cuQmVmb3JlTG9h
ZEV2ZW50LnByb3RvdHlwZS5zdG9wUHJvcGFnYXRpb24gW2Z1bmN0aW9uXQogd2luZG93LkJsb2Ig
W29iamVjdCBCbG9iQ29uc3RydWN0b3JdCiB3aW5kb3cuQmxvYi5wcm90b3R5cGUgW29iamVjdCBC
bG9iUHJvdG90eXBlXQord2luZG93LkJsb2IucHJvdG90eXBlLnNsaWNlIFtmdW5jdGlvbl0KIHdp
bmRvdy5DREFUQVNlY3Rpb24gW29iamVjdCBDREFUQVNlY3Rpb25Db25zdHJ1Y3Rvcl0KIHdpbmRv
dy5DREFUQVNlY3Rpb24ucHJvdG90eXBlIFtvYmplY3QgQ0RBVEFTZWN0aW9uUHJvdG90eXBlXQog
d2luZG93LkNEQVRBU2VjdGlvbi5wcm90b3R5cGUuQVRUUklCVVRFX05PREUgW251bWJlcl0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjkx
YmQxYy4uNGIxNzhlYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAxMC0wMi0wMyAgSmlhbiBMaSAgPGppYW5s
aUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQmxvYi5zbGljZSBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI5OTMKKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL2xv
Y2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sCisKKyAgICAgICAgVGhlIGZvbGxvd2lu
ZyBzZW1hbnRpYyBpcyBhZG9wdGVkIHBlciB0aGUgZGlzY3Vzc2lvbnMgb24gcHVibGljLXdlYmFw
cHM6CisgICAgICAgIDEpIEZpbGUuc2xpY2UoKSBkb2VzIGEgc3luY2hyb25vdXMgSU8gdG8gY2Fw
dHVyZXMgdGhlIGN1cnJlbnQgc2l6ZSBhbmQKKyAgICAgICAgICAgbW9kaWZpY2F0aW9uIHRpbWUg
YW5kIGNhY2hlIHRoZW0gaW4gdGhlIHJlc3VsdGluZyBCbG9iLgorICAgICAgICAyKSBTdWJzZXF1
ZW50IEJsb2Igb3BlcmF0aW9ucywgbGlrZSBCbG9iLnNsaWNlIGFuZCBCbG9iLnNpemUgc2ltcGx5
CisgICAgICAgICAgIHVzZSB0aGUgY2FjaGVkIHZhbHVlcy4KKyAgICAgICAgMykgV2hlbiB0aGUg
dW5kZXJseWluZyBmaWxlIGRhdGEgYXJlIGFjY2Vzc2VkLCBsaWtlIGluIFhIUi5zZW5kKCksIHRo
ZQorICAgICAgICAgICBVQSB3aWxsIGNoZWNrIHRoZSBjYWNoZWQgbW9kaWZpY2F0aW9uIHRpbWUg
YWdhaW5zdCB0aGUgY3VycmVudAorICAgICAgICAgICBtb2RpZmljYXRpb24gdGltZSB0byBkZXRl
cm1pbmUgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QuCisgICAgICAgICAgIEFu
IGVycm9yIG9yIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93biBpZiBuZWVkZWQuCisKKyAgICAgICAg
KiBodG1sL0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAg
IChXZWJDb3JlOjpCbG9iOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmdldEZpbGVT
aXplSGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmdldEZpbGVNb2RpZmljYXRpb25U
aW1lSGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNsaWNlKToKKyAgICAgICAgKiBo
dG1sL0Jsb2IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnN0YXJ0KToKKyAgICAgICAgKFdl
YkNvcmU6OkJsb2I6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjptb2RpZmljYXRp
b25UaW1lKToKKyAgICAgICAgKiBodG1sL0Jsb2IuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Y3JlYXRl
Rm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmRlZXBDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhOjphcHBlbmRGaWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRh
Lmg6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkZvcm1EYXRhRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmFkdmFuY2VD
dXJyZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZW5OZXh0U3RyZWFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OmZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybU9wZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6Zm9ybVJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SFRUUEJv
ZHkpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxIdHRwUmVxdWVzdDo6c2VuZCk6CisKIDIwMTAtMDItMDIgIEZ1bWl0b3NoaSBVa2FpICA8
dWthaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5
YWtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iLmNwcCBiL1dlYkNvcmUvaHRtbC9C
bG9iLmNwcAppbmRleCAwYjY3N2VhLi5hY2Y2MTQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwv
QmxvYi5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCkBAIC0zNywxNyArMzcsNzIgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCkKICAg
ICA6IG1fcGF0aChwYXRoKQorICAgICwgbV9zdGFydCgwKQorICAgICwgbV9sZW5ndGgoLTEpCisg
ICAgLCBtX3NuYXBzaG90U2l6ZSgtMSkKKyAgICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1l
KDApCit7Cit9CisKK0Jsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3Rh
cnQsIGxvbmcgbG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNpemUsIHRpbWVfdCBzbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWUpCisgICAgOiBtX3BhdGgocGF0aCkKKyAgICAsIG1fc3RhcnQo
c3RhcnQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX3NuYXBzaG90U2l6ZShzbmFw
c2hvdFNpemUpCisgICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShzbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWUpCiB7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iOjpzaXplKCkgY29u
c3QKIHsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigobV9zbmFw
c2hvdFNpemUgPT0gLTEpID8gZ2V0RmlsZVNpemVIZWxwZXIoKSA6IG1fbGVuZ3RoKTsgCit9CisK
K2xvbmcgbG9uZyBCbG9iOjpnZXRGaWxlU2l6ZUhlbHBlcigpIGNvbnN0Cit7CiAgICAgLy8gRklY
TUU6IEphdmFTY3JpcHQgY2Fubm90IHJlcHJlc2VudCBzaXplcyBhcyBsYXJnZSBhcyB1bnNpZ25l
ZCBsb25nIGxvbmcsIHdlIG5lZWQgdG8KICAgICAvLyBjb21lIHVwIHdpdGggYW4gZXhjZXB0aW9u
IHRvIHRocm93IGlmIGZpbGUgc2l6ZSBpcyBub3QgcmVwcmVzZXRhYmxlLgogICAgIGxvbmcgbG9u
ZyBzaXplOwogICAgIGlmICghZ2V0RmlsZVNpemUobV9wYXRoLCBzaXplKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSk7
CisgICAgcmV0dXJuIHNpemU7Cit9CisKK3RpbWVfdCBCbG9iOjpnZXRGaWxlTW9kaWZpY2F0aW9u
VGltZUhlbHBlcigpIGNvbnN0Cit7CisgICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7CisgICAg
aWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShtX3BhdGgsIG1vZGlmaWNhdGlvblRpbWUpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbW9kaWZpY2F0aW9uVGltZTsKK30KKworUGFz
c1JlZlB0cjxCbG9iPiBCbG9iOjpzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5n
dGgpIGNvbnN0Cit7CisgICAgLy8gV2hlbiB3ZSBzbGljZSBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0
aW1lLCB3ZSBvYnRhaW4gYSBzbmFwc2hvdCBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcgaXRzIGN1
cnJlbnQgc2l6ZSBhbmQgbW9kaWZpY2F0aW9uIHRpbWUuCisgICAgLy8gVGhlIG1vZGlmaWNhdGlv
biB0aW1lIHdpbGwgYmUgdXNlZCB0byB2ZXJpZnkgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdl
ZCBvciBub3QsIHdoZW4gdGhlIHVuZGVybHlpbmcgZGF0YSBhcmUgYWNjZXNzZWQuCisgICAgbG9u
ZyBsb25nIHNuYXBzaG90U2l6ZTsKKyAgICB0aW1lX3Qgc25hcHNob3RNb2RpZmljYXRpb25UaW1l
OworICAgIGlmIChtX3NuYXBzaG90U2l6ZSA9PSAtMSkgeworICAgICAgICBzbmFwc2hvdFNpemUg
PSBnZXRGaWxlU2l6ZUhlbHBlcigpOworICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUg
PSBnZXRGaWxlTW9kaWZpY2F0aW9uVGltZUhlbHBlcigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHNuYXBzaG90U2l6ZSA9IG1fc25hcHNob3RTaXplOworICAgICAgICBzbmFwc2hvdE1vZGlmaWNh
dGlvblRpbWUgPSBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKKyAgICB9CisKKyAgICAvLyBD
bGFtcCB0aGUgcmFuZ2UgaWYgaXQgZXhjZWVkcyB0aGUgc2l6ZSBsaW1pdC4KKyAgICBpZiAoc3Rh
cnQgPCAwKQorICAgICAgICBzdGFydCA9IDA7CisgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAg
IGxlbmd0aCA9IDA7CisKKyAgICBpZiAoc3RhcnQgPiBzbmFwc2hvdFNpemUpIHsKKyAgICAgICAg
c3RhcnQgPSAwOworICAgICAgICBsZW5ndGggPSAwOworICAgIH0gZWxzZSBpZiAoc3RhcnQgKyBs
ZW5ndGggPiBzbmFwc2hvdFNpemUpCisgICAgICAgIGxlbmd0aCA9IHNuYXBzaG90U2l6ZSAtIHN0
YXJ0OworCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKG1fcGF0aCwgbV9zdGFydCArIHN0
YXJ0LCBsZW5ndGgsIHNuYXBzaG90U2l6ZSwgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9i
LmggYi9XZWJDb3JlL2h0bWwvQmxvYi5oCmluZGV4IGI5MTBlOGYuLjE1OWIyMTEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9CbG9iLmgKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuaApAQCAtMzMs
NiArMzMsNyBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtNDcsMTQgKzQ4LDI4IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgfkJsb2IoKSB7IH0KIAorICAgIFBhc3NSZWZQdHI8QmxvYj4g
c2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdDsKKwogICAgIGNv
bnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7CisgICAgbG9uZyBsb25nIHN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFydDsgfQorICAgIGxvbmcgbG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2xlbmd0aDsgfQorICAgIHRpbWVfdCBtb2RpZmljYXRpb25UaW1lKCkgY29uc3QgeyByZXR1cm4g
bV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7IH0KIAogcHJvdGVjdGVkOgogICAgIEJsb2IoY29u
c3QgU3RyaW5nJiBwYXRoKTsKIAogcHJpdmF0ZToKKyAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0
aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBsb25nIGxvbmcgc25hcHNob3RT
aXplLCB0aW1lX3Qgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKKworICAgIGxvbmcgbG9uZyBn
ZXRGaWxlU2l6ZUhlbHBlcigpIGNvbnN0OworICAgIHRpbWVfdCBnZXRGaWxlTW9kaWZpY2F0aW9u
VGltZUhlbHBlcigpIGNvbnN0OworCiAgICAgU3RyaW5nIG1fcGF0aDsKKyAgICBsb25nIGxvbmcg
bV9zdGFydDsKKyAgICBsb25nIGxvbmcgbV9sZW5ndGg7CisgICAgbG9uZyBsb25nIG1fc25hcHNo
b3RTaXplOworICAgIHRpbWVfdCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iLmlkbCBi
L1dlYkNvcmUvaHRtbC9CbG9iLmlkbAppbmRleCA1NzNiZTM1Li44MzY0ZWFjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvQmxvYi5pZGwKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuaWRsCkBAIC0z
Miw2ICszMiw3IEBAIG1vZHVsZSBodG1sIHsKIAogICAgIGludGVyZmFjZSBCbG9iIHsKICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOworICAgICAgICBC
bG9iIHNsaWNlKGluIGxvbmcgbG9uZyBzdGFydCwgaW4gbG9uZyBsb25nIGxlbmd0aCk7CiAgICAg
fTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAppbmRleCAyZjg4ODk0Li5mYzUzOGFmIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtMjY2LDcgKzI2Niw3IEBAIFBhc3NSZWZQdHI8
Rm9ybURhdGE+IEhUTUxGb3JtRWxlbWVudDo6Y3JlYXRlRm9ybURhdGEoY29uc3QgQ1N0cmluZyYg
Ym91bmRhcnkpCiAgICAgICAgICAgICAgICAgICAgIGlmIChzaXplX3QgZGF0YVNpemUgPSB2YWx1
ZS5kYXRhKCkubGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVu
ZERhdGEodmFsdWUuZGF0YSgpLmRhdGEoKSwgZGF0YVNpemUpOwogICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmICh2YWx1ZS5maWxlKCkgJiYgIXZhbHVlLmZpbGUoKS0+cGF0aCgpLmlzRW1wdHko
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRmlsZSh2YWx1ZS5maWxl
KCktPnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC0+YXBwZW5kRmlsZSh2YWx1ZS5maWxlKCktPnBhdGgoKSwgMCwgLTEsIHNob3VsZEdl
bmVyYXRlRmlsZSk7CiAKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKCJc
clxuIiwgMik7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0
YS5jcHAKaW5kZXggYWYzYjdmMC4uZGQwNGUxOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGEuY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURh
dGE6OmRlZXBDb3B5KCkgY29uc3QKICAgICAgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFw
cGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2RhdGEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEZpbGU6Ci0gICAgICAgICAgICBmb3Jt
RGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUubV9maWxlbmFtZSwgZS5t
X3Nob3VsZEdlbmVyYXRlRmlsZSkpOworICAgICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMu
YXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZmlsZW5hbWUsIGUubV9maWxlU3RhcnQsIGUubV9m
aWxlTGVuZ3RoLCBlLm1fZmlsZU1vZGlmaWNhdGlvblRpbWUsIGUubV9zaG91bGRHZW5lcmF0ZUZp
bGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTI1LDkgKzEy
NSw5IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZERhdGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90
IHNpemUpCiAgICAgbWVtY3B5KGUubV9kYXRhLmRhdGEoKSArIG9sZFNpemUsIGRhdGEsIHNpemUp
OwogfQogCi12b2lkIEZvcm1EYXRhOjphcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUs
IGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKQordm9pZCBGb3JtRGF0YTo6YXBwZW5kRmlsZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIHRp
bWVfdCBtb2RpZmljYXRpb25UaW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKIHsKLSAgICBt
X2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIHNob3VsZEdlbmVyYXRl
RmlsZSkpOworICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChmaWxlbmFtZSwg
c3RhcnQsIGxlbmd0aCwgbW9kaWZpY2F0aW9uVGltZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CiB9
CiAKIHZvaWQgRm9ybURhdGE6OmZsYXR0ZW4oVmVjdG9yPGNoYXI+JiBkYXRhKSBjb25zdApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAppbmRleCA3Mjc4ZjJlLi5hYTVkZWE4IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaApAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSBGb3Jt
RGF0YV9oCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHRpbWUuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApA
QCAtMzIsMTEgKzMzLDE0IEBAIGNsYXNzIEZvcm1EYXRhRWxlbWVudCB7CiBwdWJsaWM6CiAgICAg
Rm9ybURhdGFFbGVtZW50KCkgOiBtX3R5cGUoZGF0YSkgeyB9CiAgICAgRm9ybURhdGFFbGVtZW50
KGNvbnN0IFZlY3RvcjxjaGFyPiYgYXJyYXkpIDogbV90eXBlKGRhdGEpLCBtX2RhdGEoYXJyYXkp
IHsgfQotICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNo
b3VsZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVuYW1lKGZpbGVu
YW1lKSwgbV9zaG91bGRHZW5lcmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKSB7IH0KKyAgICBG
b3JtRGF0YUVsZW1lbnQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgaW50NjRfdCBmaWxlU3RhcnQs
IGludDY0X3QgZmlsZUxlbmd0aCwgdGltZV90IGZpbGVNb2RpZmljYXRpb25UaW1lLCBib29sIHNo
b3VsZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVuYW1lKGZpbGVu
YW1lKSwgbV9maWxlU3RhcnQoZmlsZVN0YXJ0KSwgbV9maWxlTGVuZ3RoKGZpbGVMZW5ndGgpLCBt
X2ZpbGVNb2RpZmljYXRpb25UaW1lKGZpbGVNb2RpZmljYXRpb25UaW1lKSwgbV9zaG91bGRHZW5l
cmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKSB7IH0KIAogICAgIGVudW0geyBkYXRhLCBlbmNv
ZGVkRmlsZSB9IG1fdHlwZTsKICAgICBWZWN0b3I8Y2hhcj4gbV9kYXRhOwogICAgIFN0cmluZyBt
X2ZpbGVuYW1lOworICAgIGludDY0X3QgbV9maWxlU3RhcnQ7CisgICAgaW50NjRfdCBtX2ZpbGVM
ZW5ndGg7CisgICAgdGltZV90IG1fZmlsZU1vZGlmaWNhdGlvblRpbWU7CiAgICAgU3RyaW5nIG1f
Z2VuZXJhdGVkRmlsZW5hbWU7CiAgICAgYm9vbCBtX3Nob3VsZEdlbmVyYXRlRmlsZTsKIH07CkBA
IC01MCw3ICs1NCw3IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGFFbGVt
ZW50JiBhLCBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoYS5tX2RhdGEgIT0gYi5tX2RhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoYS5tX2ZpbGVuYW1lICE9IGIubV9maWxlbmFtZSkKKyAgICBpZiAoYS5tX2ZpbGVuYW1l
ICE9IGIubV9maWxlbmFtZSB8fCBhLm1fZmlsZVN0YXJ0ICE9IGIubV9maWxlU3RhcnQgfHwgYS5t
X2ZpbGVMZW5ndGggIT0gYi5tX2ZpbGVMZW5ndGggfHwgYS5tX2ZpbGVNb2RpZmljYXRpb25UaW1l
ICE9IGIubV9maWxlTW9kaWZpY2F0aW9uVGltZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgcmV0dXJuIHRydWU7CkBAIC03Miw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICB+Rm9ybURhdGEo
KTsKICAgICAKICAgICB2b2lkIGFwcGVuZERhdGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KTsK
LSAgICB2b2lkIGFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRH
ZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CisgICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgdGltZV90IG1vZGlm
aWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOwogCiAgICAgdm9p
ZCBmbGF0dGVuKFZlY3RvcjxjaGFyPiYpIGNvbnN0OyAvLyBvbWl0cyBmaWxlcwogICAgIFN0cmlu
ZyBmbGF0dGVuVG9TdHJpbmcoKSBjb25zdDsgLy8gb21pdHMgZmlsZXMKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0gYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCmluZGV4IDhhYTlhNmQu
LjRiNWEwMDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURh
dGFTdHJlYW1NYWMubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0
YVN0cmVhbU1hYy5tbQpAQCAtMTI1LDYgKzEyNSw3IEBAIHN0cnVjdCBGb3JtU3RyZWFtRmllbGRz
IHsKICAgICBTY2hlZHVsZVBhaXJIYXNoU2V0IHNjaGVkdWxlZFJ1bkxvb3BQYWlyczsKICAgICBW
ZWN0b3I8Rm9ybURhdGFFbGVtZW50PiByZW1haW5pbmdFbGVtZW50czsgLy8gaW4gcmV2ZXJzZSBv
cmRlcgogICAgIENGUmVhZFN0cmVhbVJlZiBjdXJyZW50U3RyZWFtOworICAgIGxvbmcgbG9uZyBj
dXJyZW50U3RyZWFtUmFuZ2VMZW5ndGg7CiAgICAgY2hhciogY3VycmVudERhdGE7CiAgICAgQ0ZS
ZWFkU3RyZWFtUmVmIGZvcm1TdHJlYW07CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIHN0cmVhbUxl
bmd0aDsKQEAgLTE0NSwxMiArMTQ2LDEyIEBAIHN0YXRpYyB2b2lkIGNsb3NlQ3VycmVudFN0cmVh
bShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgYWR2YW5j
ZUN1cnJlbnRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKK3N0YXRpYyBib29sIGFkdmFu
Y2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0pCiB7CiAgICAgY2xvc2VDdXJy
ZW50U3RyZWFtKGZvcm0pOwogCiAgICAgaWYgKGZvcm0tPnJlbWFpbmluZ0VsZW1lbnRzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIENy
ZWF0ZSB0aGUgbmV3IHN0cmVhbS4KICAgICBGb3JtRGF0YUVsZW1lbnQmIG5leHRJbnB1dCA9IGZv
cm0tPnJlbWFpbmluZ0VsZW1lbnRzLmxhc3QoKTsKQEAgLTE2MCwxMCArMTYxLDIxIEBAIHN0YXRp
YyB2b2lkIGFkdmFuY2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0pCiAgICAg
ICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBDRlJlYWRTdHJlYW1DcmVhdGVXaXRoQnl0ZXNOb0Nv
cHkoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEpLCBzaXplLCBrQ0ZBbGxv
Y2F0b3JOdWxsKTsKICAgICAgICAgZm9ybS0+Y3VycmVudERhdGEgPSBkYXRhOwogICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChuZXh0SW5wdXQubV9maWxlTW9kaWZpY2F0aW9uVGltZSkgeworICAg
ICAgICAgICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7CisgICAgICAgICAgICBpZiAoZ2V0Rmls
ZU1vZGlmaWNhdGlvblRpbWUobmV4dElucHV0Lm1fZmlsZW5hbWUsIG1vZGlmaWNhdGlvblRpbWUp
ICYmIG1vZGlmaWNhdGlvblRpbWUgIT0gbmV4dElucHV0Lm1fZmlsZU1vZGlmaWNhdGlvblRpbWUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKICAgICAgICAgY29u
c3QgU3RyaW5nJiBwYXRoID0gbmV4dElucHV0Lm1fc2hvdWxkR2VuZXJhdGVGaWxlID8gbmV4dElu
cHV0Lm1fZ2VuZXJhdGVkRmlsZW5hbWUgOiBuZXh0SW5wdXQubV9maWxlbmFtZTsKICAgICAgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBmaWxlbmFtZShBZG9wdENGLCBwYXRoLmNyZWF0ZUNGU3Ry
aW5nKCkpOwogICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpbGVVUkwoQWRvcHRDRiwgQ0ZV
UkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoMCwgZmlsZW5hbWUuZ2V0KCksIGtDRlVSTFBPU0lY
UGF0aFN0eWxlLCBGQUxTRSkpOwogICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtID0gQ0ZSZWFk
U3RyZWFtQ3JlYXRlV2l0aEZpbGUoMCwgZmlsZVVSTC5nZXQoKSk7CisgICAgICAgIGlmIChuZXh0
SW5wdXQubV9maWxlU3RhcnQgPiAwKSB7CisgICAgICAgICAgICBDRk51bWJlclJlZiBwb3NpdGlv
biA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJlckxvbmdMb25nVHlwZSwgJm5leHRJbnB1dC5t
X2ZpbGVTdGFydCk7CisgICAgICAgICAgICBDRlJlYWRTdHJlYW1TZXRQcm9wZXJ0eShmb3JtLT5j
dXJyZW50U3RyZWFtLCBrQ0ZTdHJlYW1Qcm9wZXJ0eUZpbGVDdXJyZW50T2Zmc2V0LCBwb3NpdGlv
bik7CisgICAgICAgIH0KKyAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0g
bmV4dElucHV0Lm1fZmlsZUxlbmd0aDsKICAgICB9CiAgICAgZm9ybS0+cmVtYWluaW5nRWxlbWVu
dHMucmVtb3ZlTGFzdCgpOwogCkBAIC0xNzYsMTYgKzE4OCwxOSBAQCBzdGF0aWMgdm9pZCBhZHZh
bmNlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQogICAgIFNjaGVkdWxlUGFp
ckhhc2hTZXQ6Oml0ZXJhdG9yIGVuZCA9IGZvcm0tPnNjaGVkdWxlZFJ1bkxvb3BQYWlycy5lbmQo
KTsKICAgICBmb3IgKFNjaGVkdWxlUGFpckhhc2hTZXQ6Oml0ZXJhdG9yIGl0ID0gZm9ybS0+c2No
ZWR1bGVkUnVuTG9vcFBhaXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgQ0ZS
ZWFkU3RyZWFtU2NoZWR1bGVXaXRoUnVuTG9vcChmb3JtLT5jdXJyZW50U3RyZWFtLCAoKml0KS0+
cnVuTG9vcCgpLCAoKml0KS0+bW9kZSgpKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0
aWMgdm9pZCBvcGVuTmV4dFN0cmVhbShGb3JtU3RyZWFtRmllbGRzKiBmb3JtKQorc3RhdGljIGJv
b2wgb3Blbk5leHRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyogZm9ybSkKIHsKICAgICAvLyBTa2lw
IG92ZXIgYW55IHN0cmVhbXMgd2UgY2FuJ3Qgb3Blbi4KLSAgICAvLyBGb3Igc29tZSBwdXJwb3Nl
cyB3ZSBtaWdodCB3YW50IHRvIHJldHVybiBhbiBlcnJvciwgYnV0IHRoZSBjdXJyZW50IE5TVVJM
Q29ubmVjdGlvbgotICAgIC8vIGNhbid0IHJlYWxseSBkbyBhbnl0aGluZyB1c2VmdWwgd2l0aCBh
biBlcnJvciBhdCB0aGlzIHBvaW50LCBzbyB0aGlzIGlzIGJldHRlci4KLSAgICBhZHZhbmNlQ3Vy
cmVudFN0cmVhbShmb3JtKTsKKyAgICBpZiAoIWFkdmFuY2VDdXJyZW50U3RyZWFtKGZvcm0pKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgd2hpbGUgKGZvcm0tPmN1cnJlbnRTdHJlYW0gJiYg
IUNGUmVhZFN0cmVhbU9wZW4oZm9ybS0+Y3VycmVudFN0cmVhbSkpCi0gICAgICAgIGFkdmFuY2VD
dXJyZW50U3RyZWFtKGZvcm0pOworICAgICAgICBpZiAoIWFkdmFuY2VDdXJyZW50U3RyZWFtKGZv
cm0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCiBz
dGF0aWMgdm9pZCogZm9ybUNyZWF0ZShDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCB2b2lkKiBjb250
ZXh0KQpAQCAtMTk0LDYgKzIwOSw3IEBAIHN0YXRpYyB2b2lkKiBmb3JtQ3JlYXRlKENGUmVhZFN0
cmVhbVJlZiBzdHJlYW0sIHZvaWQqIGNvbnRleHQpCiAKICAgICBGb3JtU3RyZWFtRmllbGRzKiBu
ZXdJbmZvID0gbmV3IEZvcm1TdHJlYW1GaWVsZHM7CiAgICAgbmV3SW5mby0+Y3VycmVudFN0cmVh
bSA9IE5VTEw7CisgICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gLTE7CiAg
ICAgbmV3SW5mby0+Y3VycmVudERhdGEgPSAwOwogICAgIG5ld0luZm8tPmZvcm1TdHJlYW0gPSBz
dHJlYW07IC8vIERvbid0IHJldGFpbi4gVGhhdCB3b3VsZCBjcmVhdGUgYSByZWZlcmVuY2UgY3lj
bGUuCiAgICAgbmV3SW5mby0+c3RyZWFtTGVuZ3RoID0gZm9ybUNvbnRleHQtPnN0cmVhbUxlbmd0
aDsKQEAgLTIyNiwxMSArMjQyLDExIEBAIHN0YXRpYyBCb29sZWFuIGZvcm1PcGVuKENGUmVhZFN0
cmVhbVJlZiwgQ0ZTdHJlYW1FcnJvciogZXJyb3IsIEJvb2xlYW4qIG9wZW5Db21wCiB7CiAgICAg
Rm9ybVN0cmVhbUZpZWxkcyogZm9ybSA9IHN0YXRpY19jYXN0PEZvcm1TdHJlYW1GaWVsZHMqPihj
b250ZXh0KTsKIAotICAgIG9wZW5OZXh0U3RyZWFtKGZvcm0pOworICAgIGJvb2wgb3BlbmVkID0g
b3Blbk5leHRTdHJlYW0oZm9ybSk7CiAKLSAgICAqb3BlbkNvbXBsZXRlID0gVFJVRTsKLSAgICBl
cnJvci0+ZXJyb3IgPSAwOwotICAgIHJldHVybiBUUlVFOworICAgICpvcGVuQ29tcGxldGUgPSBv
cGVuZWQ7CisgICAgZXJyb3ItPmVycm9yID0gb3BlbmVkID8gMCA6IGZuT3BuRXJyOworICAgIHJl
dHVybiBvcGVuZWQ7CiB9CiAKIHN0YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJl
ZiBzdHJlYW0sIFVJbnQ4KiBidWZmZXIsIENGSW5kZXggYnVmZmVyTGVuZ3RoLCBDRlN0cmVhbUVy
cm9yKiBlcnJvciwgQm9vbGVhbiogYXRFT0YsIHZvaWQqIGNvbnRleHQpCkBAIC0yMzgsNyArMjU0
LDEwIEBAIHN0YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJ
bnQ4KiBidWZmZXIsIENGSW5kZXggYnVmZmVyTGVuCiAgICAgRm9ybVN0cmVhbUZpZWxkcyogZm9y
bSA9IHN0YXRpY19jYXN0PEZvcm1TdHJlYW1GaWVsZHMqPihjb250ZXh0KTsKIAogICAgIHdoaWxl
IChmb3JtLT5jdXJyZW50U3RyZWFtKSB7Ci0gICAgICAgIENGSW5kZXggYnl0ZXNSZWFkID0gQ0ZS
ZWFkU3RyZWFtUmVhZChmb3JtLT5jdXJyZW50U3RyZWFtLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCk7
CisgICAgICAgIENGSW5kZXggYnl0ZXNUb1JlYWQgPSBidWZmZXJMZW5ndGg7CisgICAgICAgIGlm
IChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gLTEgJiYgZm9ybS0+Y3VycmVudFN0
cmVhbVJhbmdlTGVuZ3RoIDwgYnl0ZXNUb1JlYWQpCisgICAgICAgICAgICBieXRlc1RvUmVhZCA9
IHN0YXRpY19jYXN0PENGSW5kZXg+KGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCk7Cisg
ICAgICAgIENGSW5kZXggYnl0ZXNSZWFkID0gQ0ZSZWFkU3RyZWFtUmVhZChmb3JtLT5jdXJyZW50
U3RyZWFtLCBidWZmZXIsIGJ5dGVzVG9SZWFkKTsKICAgICAgICAgaWYgKGJ5dGVzUmVhZCA8IDAp
IHsKICAgICAgICAgICAgICplcnJvciA9IENGUmVhZFN0cmVhbUdldEVycm9yKGZvcm0tPmN1cnJl
bnRTdHJlYW0pOwogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMjQ3LDYgKzI2Niw4IEBAIHN0
YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJbnQ4KiBidWZm
ZXIsIENGSW5kZXggYnVmZmVyTGVuCiAgICAgICAgICAgICBlcnJvci0+ZXJyb3IgPSAwOwogICAg
ICAgICAgICAgKmF0RU9GID0gRkFMU0U7CiAgICAgICAgICAgICBmb3JtLT5ieXRlc1NlbnQgKz0g
Ynl0ZXNSZWFkOworICAgICAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0
aCAhPSAtMSkKKyAgICAgICAgICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGgg
LT0gYnl0ZXNSZWFkOwogCiAgICAgICAgICAgICBpZiAoIVJlc291cmNlSGFuZGxlOjpkaWRTZW5k
Qm9keURhdGFEZWxlZ2F0ZUV4aXN0cygpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEZp
Z3VyZSBvdXQgaG93IHRvIG9ubHkgZG8gdGhpcyB3aGVuIGEgUmVzb3VyY2VIYW5kbGVDbGllbnQg
aXMgYXZhaWxhYmxlLgpAQCAtMzU5LDkgKzM4MCwxMyBAQCB2b2lkIHNldEhUVFBCb2R5KE5TTXV0
YWJsZVVSTFJlcXVlc3QgKnJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhKQog
ICAgICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKQogICAg
ICAgICAgICAgbGVuZ3RoICs9IGVsZW1lbnQubV9kYXRhLnNpemUoKTsKICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBsb25nIGxvbmcgZmlsZVNpemU7Ci0gICAgICAgICAgICBpZiAoZ2V0Rmls
ZVNpemUoZWxlbWVudC5tX3Nob3VsZEdlbmVyYXRlRmlsZSA/IGVsZW1lbnQubV9nZW5lcmF0ZWRG
aWxlbmFtZSA6IGVsZW1lbnQubV9maWxlbmFtZSwgZmlsZVNpemUpKQotICAgICAgICAgICAgICAg
IGxlbmd0aCArPSBmaWxlU2l6ZTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50Lm1fZmlsZUxlbmd0
aCAhPSAtMSkKKyAgICAgICAgICAgICAgICBsZW5ndGggKz0gZWxlbWVudC5tX2ZpbGVMZW5ndGg7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb25nIGxvbmcgZmlsZVNpemU7
CisgICAgICAgICAgICAgICAgaWYgKGdldEZpbGVTaXplKGVsZW1lbnQubV9zaG91bGRHZW5lcmF0
ZUZpbGUgPyBlbGVtZW50Lm1fZ2VuZXJhdGVkRmlsZW5hbWUgOiBlbGVtZW50Lm1fZmlsZW5hbWUs
IGZpbGVTaXplKSkKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IGZpbGVTaXplOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKaW5kZXgg
MzI4MThkZi4uOTk3ZWVjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCisrKyBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtNDQ0LDcgKzQ0NCw3
IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoQmxvYiogYm9keSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ugc2V0IGEgQ29udGVudC1UeXBlIGlmIG9u
ZSBpcyBub3Qgc2V0LgogICAgICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIHVwbG9hZGlu
ZyBidW5kbGVzLgogICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0
ZSgpOwotICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlKGJvZHktPnBhdGgo
KSwgZmFsc2UpOworICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlKGJvZHkt
PnBhdGgoKSwgYm9keS0+c3RhcnQoKSwgYm9keS0+bGVuZ3RoKCksIGJvZHktPm1vZGlmaWNhdGlv
blRpbWUoKSwgZmFsc2UpOwogICAgIH0KIAogICAgIGNyZWF0ZVJlcXVlc3QoZWMpOwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKaW5kZXggNGY2MjMwOS4uMjc4ZmU5ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMDItMDMgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJsb2Iuc2xpY2Ugc3VwcG9ydC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkzCisK
KyAgICAgICAgQ2hyb21pdW0tc2lkZSBjaGFuZ2UgdG8gc3VwcG9ydCBCbG9iLnNsaWNlLgorCisg
ICAgICAgICogcHVibGljL1dlYkhUVFBCb2R5Lmg6CisgICAgICAgICogc3JjL1dlYkhUVFBCb2R5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSFRUUEJvZHk6OmVsZW1lbnRBdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkhUVFBCb2R5OjphcHBlbmRGaWxlKToKKwogMjAxMC0wMi0wMiAgWXVyeSBT
ZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQ
YXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJIVFRQ
Qm9keS5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJIVFRQQm9keS5oCmluZGV4IDQzZjUx
YTYuLmU3MjU0YzggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSFRUUEJv
ZHkuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkhUVFBCb2R5LmgKQEAgLTUwLDYg
KzUwLDggQEAgcHVibGljOgogICAgICAgICBlbnVtIHsgVHlwZURhdGEsIFR5cGVGaWxlIH0gdHlw
ZTsKICAgICAgICAgV2ViRGF0YSBkYXRhOwogICAgICAgICBXZWJTdHJpbmcgZmlsZVBhdGg7Cisg
ICAgICAgIGxvbmcgbG9uZyBmaWxlU3RhcnQ7CisgICAgICAgIGxvbmcgbG9uZyBmaWxlTGVuZ3Ro
OwogICAgIH07CiAKICAgICB+V2ViSFRUUEJvZHkoKSB7IHJlc2V0KCk7IH0KQEAgLTc3LDcgKzc5
LDcgQEAgcHVibGljOgogCiAgICAgLy8gQXBwZW5kIHRvIHRoZSBsaXN0IG9mIGVsZW1lbnRzLgog
ICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFdlYkRhdGEmKTsKLSAgICBXRUJL
SVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmKTsKKyAgICBXRUJLSVRfQVBJ
IHZvaWQgYXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmLCBsb25nIGxvbmcgZmlsZVN0YXJ0LCBs
b25nIGxvbmcgZmlsZUxlbmd0aCwgdGltZV90KTsKIAogICAgIC8vIElkZW50aWZpZXMgYSBwYXJ0
aWN1bGFyIGZvcm0gc3VibWlzc2lvbiBpbnN0YW5jZS4gIEEgdmFsdWUgb2YgMCBpcwogICAgIC8v
IHVzZWQgdG8gaW5kaWNhdGUgYW4gdW5zcGVjaWZpZWQgaWRlbnRpZmllci4KZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSFRUUEJvZHkuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJIVFRQQm9keS5jcHAKaW5kZXggMzM1ZWQ1Yy4uMjE0NWEzNyAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJIVFRQQm9keS5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJIVFRQQm9keS5jcHAKQEAgLTgzLDYgKzgzLDggQEAgYm9vbCBXZWJIVFRQQm9keTo6ZWxl
bWVudEF0KHNpemVfdCBpbmRleCwgRWxlbWVudCYgcmVzdWx0KSBjb25zdAogICAgICAgICByZXN1
bHQudHlwZSA9IEVsZW1lbnQ6OlR5cGVGaWxlOwogICAgICAgICByZXN1bHQuZGF0YS5yZXNldCgp
OwogICAgICAgICByZXN1bHQuZmlsZVBhdGggPSBlbGVtZW50Lm1fZmlsZW5hbWU7CisgICAgICAg
IHJlc3VsdC5maWxlU3RhcnQgPSBlbGVtZW50Lm1fZmlsZVN0YXJ0OworICAgICAgICByZXN1bHQu
ZmlsZUxlbmd0aCA9IGVsZW1lbnQubV9maWxlTGVuZ3RoOwogICAgICAgICBicmVhazsKICAgICBk
ZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEwMCwxMCArMTAyLDEw
IEBAIHZvaWQgV2ViSFRUUEJvZHk6OmFwcGVuZERhdGEoY29uc3QgV2ViRGF0YSYgZGF0YSkKICAg
ICBtX3ByaXZhdGUtPmFwcGVuZERhdGEoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKIH0KIAot
dm9pZCBXZWJIVFRQQm9keTo6YXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoKQor
dm9pZCBXZWJIVFRQQm9keTo6YXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoLCBs
b25nIGxvbmcgZmlsZVN0YXJ0LCBsb25nIGxvbmcgZmlsZUxlbmd0aCwgdGltZV90IGZpbGVNb2Rp
ZmljYXRpb25UaW1lKQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmFw
cGVuZEZpbGUoZmlsZVBhdGgpOworICAgIG1fcHJpdmF0ZS0+YXBwZW5kRmlsZShmaWxlUGF0aCwg
ZmlsZVN0YXJ0LCBmaWxlTGVuZ3RoLCBmaWxlTW9kaWZpY2F0aW9uVGltZSk7CiB9CiAKIGxvbmcg
bG9uZyBXZWJIVFRQQm9keTo6aWRlbnRpZmllcigpIGNvbnN0Cg==
</data>
<flag name="commit-queue"
          id="30707"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48442</attachid>
            <date>2010-02-09 14:48:31 -0800</date>
            <delta_ts>2010-02-09 15:27:34 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>32993_5</filename>
            <type>text/plain</type>
            <size>35443</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiMGFhOTRmLi4xNzQ2NzRiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDIt
MDkgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJsb2Iuc2xpY2Ugc3VwcG9ydC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkzCisKKyAgICAgICAg
QWRkIGEgbGF5b3V0IHRlc3QgdG8gdGVzdCBzbGljaW5nIGFuZCBzZW5kaW5nIGEgZmlsZS4KKwor
ICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQ6
CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZHJhZy1maWxlLXRvLWZpbGUt
aW5wdXQtZWxlbWVudC5qczogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9yZXNv
dXJjZXMvZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2xv
Y2FsL3Jlc291cmNlcy9zZW5kLWRyYWdnZWQtZmlsZS5qczoKKyAgICAgICAgKG9uRmlsZURyb3Ap
OgorICAgICAgICAocnVuVGVzdCk6CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJj
ZXMvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rl
c3RzL2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9s
b2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3Jlc291cmNlcy93cml0ZS10ZW1wLWZpbGUucGhwOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3Bl
cnRpZXMtZXhwZWN0ZWQudHh0OgorCiAyMDEwLTAyLTA5ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8
YWxleEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGll
cy1leHBlY3RlZC50eHQKaW5kZXggZGU1M2MyNy4uYWJhODA5ZSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQu
dHh0CkBAIC0xNDksNiArMTQ5LDcgQEAgd2luZG93LkJlZm9yZUxvYWRFdmVudC5wcm90b3R5cGUu
cHJldmVudERlZmF1bHQgW2Z1bmN0aW9uXQogd2luZG93LkJlZm9yZUxvYWRFdmVudC5wcm90b3R5
cGUuc3RvcFByb3BhZ2F0aW9uIFtmdW5jdGlvbl0KIHdpbmRvdy5CbG9iIFtvYmplY3QgQmxvYkNv
bnN0cnVjdG9yXQogd2luZG93LkJsb2IucHJvdG90eXBlIFtvYmplY3QgQmxvYlByb3RvdHlwZV0K
K3dpbmRvdy5CbG9iLnByb3RvdHlwZS5zbGljZSBbZnVuY3Rpb25dCiB3aW5kb3cuQ0RBVEFTZWN0
aW9uIFtvYmplY3QgQ0RBVEFTZWN0aW9uQ29uc3RydWN0b3JdCiB3aW5kb3cuQ0RBVEFTZWN0aW9u
LnByb3RvdHlwZSBbb2JqZWN0IENEQVRBU2VjdGlvblByb3RvdHlwZV0KIHdpbmRvdy5DREFUQVNl
Y3Rpb24ucHJvdG90eXBlLkFUVFJJQlVURV9OT0RFIFtudW1iZXJdCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9kcmFnLWZpbGUtdG8tZmlsZS1pbnB1
dC1lbGVtZW50LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZHJh
Zy1maWxlLXRvLWZpbGUtaW5wdXQtZWxlbWVudC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jNTFjNjgwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZHJhZy1maWxlLXRvLWZpbGUtaW5wdXQtZWxlbWVudC5qcwpA
QCAtMCwwICsxLDQ2IEBACit2YXIgZmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
aW5wdXQiKTsKK2ZpbGVJbnB1dC50eXBlID0gImZpbGUiOworZmlsZUlucHV0LnN0eWxlLndpZHRo
ID0gIjEwMHB4IjsKK2ZpbGVJbnB1dC5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOworLy8gSW1wb3J0
YW50IHRoYXQgd2UgcHV0IHRoaXMgYXQgdGhlIHRvcCBvZiB0aGUgZG9jIHNvIHRoYXQgbG9nZ2lu
ZyBkb2VzIG5vdCBjYXVzZSBpdCB0byBnbyBvdXQgb2YgdmlldyAod2hlcmUgaXQgY2FuJ3QgYmUg
ZHJhZ2dlZCB0bykKK2RvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGZpbGVJbnB1dCwgZG9jdW1l
bnQuYm9keS5maXJzdENoaWxkKTsKKworZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdl
bnRlciIsIGZ1bmN0aW9uKCkgeworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxz
ZSk7CisKK2ZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIGZ1bmN0aW9uKCkg
eworICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gImNvcHkiOworICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK3ZhciBmaWxlSW5wdXREcm9wQ2FsbGJh
Y2sgPSBudWxsOworZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBmdW5jdGlvbigp
IHsKKyAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluZGV4T2YoIkZpbGVzIikgIT0g
LTEgJiYgZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aCA9PSAxKQorICAgICAgICB0ZXN0
UGFzc2VkKCJldmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9w
LiIpOworICAgIGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJldmVudC5kYXRhVHJhbnNmZXIg
ZG9lcyBub3QgY29udGFpbiBhIEZpbGUgb2JqZWN0IG9uIGRyb3AuIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBmaWxlSW5wdXREcm9wQ2FsbGJhY2soZXZlbnQuZGF0YVRyYW5zZmVy
LmZpbGVzWzBdKTsKKworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisK
K2Z1bmN0aW9uIHNldEZpbGVJbnB1dERyb3BDYWxsYmFjayhmaWxlSW5wdXREcm9wQ2FsbGJhY2tG
dW5jKQoreworICAgIGZpbGVJbnB1dERyb3BDYWxsYmFjayA9IGZpbGVJbnB1dERyb3BDYWxsYmFj
a0Z1bmM7Cit9CisKK2Z1bmN0aW9uIG1vdmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGVsZW1lbnQp
Cit7CisgICAgdmFyIGNlbnRlclggPSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNl
dFdpZHRoIC8gMjsKKyAgICB2YXIgY2VudGVyWSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVu
dC5vZmZzZXRIZWlnaHQgLyAyOworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGNlbnRlclgs
IGNlbnRlclkpOworfQorCitmdW5jdGlvbiByZW1vdmVGaWxlSW5wdXRFbGVtZW50KCkKK3sKKyAg
ICBmaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmaWxlSW5wdXQpCit9CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9maWxlLWZvci1kcmFn
LXRvLXNlbmQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZmls
ZS1mb3ItZHJhZy10by1zZW5kLnR4dAppbmRleCA1YWIyZjhhLi42YTUzN2I1IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9maWxlLWZvci1kcmFnLXRv
LXNlbmQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL2Zp
bGUtZm9yLWRyYWctdG8tc2VuZC50eHQKQEAgLTEgKzEgQEAKLUhlbGxvClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQorMTIzNDU2Nzg5MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtZHJh
Z2dlZC1maWxlLmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2Vu
ZC1kcmFnZ2VkLWZpbGUuanMKaW5kZXggYmVkNDA3OC4uZWZjMTEyNCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanMK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1kcmFnZ2Vk
LWZpbGUuanMKQEAgLTEsNDggKzEsMjEgQEAKIGRlc2NyaXB0aW9uKCJUZXN0IGZvciBzZW5kaW5n
IGEgZHJhZ2dlZCBmaWxlIHZpYSBYTUxIdHRwUmVxdWVzdC4iKTsKIAotdmFyIGZpbGVJbnB1dCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci1maWxlSW5wdXQudHlwZSA9ICJmaWxl
IjsKLWZpbGVJbnB1dC5zdHlsZS53aWR0aCA9ICIxMDBweCI7Ci1maWxlSW5wdXQuc3R5bGUuaGVp
Z2h0ID0gIjEwMHB4IjsKLS8vIEltcG9ydGFudCB0aGF0IHdlIHB1dCB0aGlzIGF0IHRoZSB0b3Ag
b2YgdGhlIGRvYyBzbyB0aGF0IGxvZ2dpbmcgZG9lcyBub3QgY2F1c2UgaXQgdG8gZ28gb3V0IG9m
IHZpZXcgKHdoZXJlIGl0IGNhbid0IGJlIGRyYWdnZWQgdG8pCi1kb2N1bWVudC5ib2R5Lmluc2Vy
dEJlZm9yZShmaWxlSW5wdXQsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7Ci0KLWZpbGVJbnB1
dC5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLCBmdW5jdGlvbigpIHsKLSAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOwotfSwgZmFsc2UpOwotCi1maWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5l
cigiZHJhZ292ZXIiLCBmdW5jdGlvbigpIHsKLSAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVm
ZmVjdCA9ICJjb3B5IjsKLSAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotfSwgZmFsc2UpOwot
Ci1maWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsIGZ1bmN0aW9uKCkgewotICAgIGlm
IChldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5kZXhPZigiRmlsZXMiKSAhPSAtMSAmJiBldmVu
dC5kYXRhVHJhbnNmZXIuZmlsZXMubGVuZ3RoID09IDEpCi0gICAgICAgIHRlc3RQYXNzZWQoImV2
ZW50LmRhdGFUcmFuc2ZlciBjb250YWlucyBhIEZpbGUgb2JqZWN0IG9uIGRyb3AuIik7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoImV2ZW50LmRhdGFUcmFuc2ZlciBkb2VzIG5vdCBj
b250YWluIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQorZnVuY3Rpb24gb25GaWxlRHJvcChmaWxlKQorewogICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0
cFJlcXVlc3QoKTsKICAgICB4aHIub3BlbigiUE9TVCIsICJodHRwOi8vMTI3LjAuMC4xOjgwMDAv
eG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3Bvc3QtZWNoby5jZ2kiLCBmYWxzZSk7Ci0gICAgeGhy
LnNlbmQoZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzWzBdKTsKLSAgICBpZiAoeGhyLnJlc3BvbnNl
VGV4dCA9PSAiSGVsbG8iKQorICAgIHhoci5zZW5kKGZpbGUpOworICAgIGlmICh4aHIucmVzcG9u
c2VUZXh0ID09ICIxMjM0NTY3ODkwIikKICAgICAgICAgdGVzdFBhc3NlZCgiRXhwZWN0ZWQgcmVz
cG9uc2UgZGF0YSByZWNlaXZlZC4iKTsKICAgICBlbHNlCiAgICAgICAgIHRlc3RGYWlsZWQoIlVu
ZXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDogIiArIHhoci5yZXNwb25zZVRleHQpOwog
CiAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLX0sIGZhbHNlKTsKLQotZnVuY3Rpb24gbW92
ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQoZWxlbWVudCkgewotICAgIHZhciBjZW50ZXJYID0gZWxl
bWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVudC5vZmZzZXRXaWR0aCAvIDI7Ci0gICAgdmFyIGNlbnRl
clkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMjsKLSAgICBl
dmVudFNlbmRlci5tb3VzZU1vdmVUbyhjZW50ZXJYLCBjZW50ZXJZKTsKIH0KIAogZnVuY3Rpb24g
cnVuVGVzdCgpCiB7CisgICAgc2V0RmlsZUlucHV0RHJvcENhbGxiYWNrKG9uRmlsZURyb3ApOwog
ICAgIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyhbInJlc291cmNlcy9maWxlLWZvci1k
cmFnLXRvLXNlbmQudHh0Il0pOwogICAgIG1vdmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGZpbGVJ
bnB1dCk7CiAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOwpAQCAtNTEsNyArMjQsNyBAQCBmdW5j
dGlvbiBydW5UZXN0KCkKIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKICAgICBydW5UZXN0KCk7
CiAgICAgLy8gQ2xlYW4gdXAgYWZ0ZXIgb3Vyc2VsdmVzCi0gICAgZmlsZUlucHV0LnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQoZmlsZUlucHV0KTsKKyAgICByZW1vdmVGaWxlSW5wdXRFbGVtZW50KCk7
CiB9IGVsc2UgewogICAgIHRlc3RGYWlsZWQoIlRoaXMgdGVzdCBpcyBub3QgaW50ZXJhY3RpdmUs
IHBsZWFzZSBydW4gdXNpbmcgRHVtcFJlbmRlclRyZWUiKTsKIH0KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmls
ZS5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtc2xpY2Vk
LWRyYWdnZWQtZmlsZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmZk
NTMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNv
dXJjZXMvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmpzCkBAIC0wLDAgKzEsMTgwIEBACitkZXNj
cmlwdGlvbigiVGVzdCBmb3Igc2xpY2luZyBhIGRyYWdnZWQgZmlsZSBhbmQgc2VuZGluZyBpdCB2
aWEgWE1MSHR0cFJlcXVlc3QuIik7CisKK3ZhciBvcmlnaW5hbFRleHQgPSAiMTIzNDU2Nzg5MCI7
Cit2YXIgdXBkYXRlZFRleHQgPSAiQUJDREVGR0hJSiI7Cit2YXIgc2xpY2VTdGFydDsKK3ZhciBz
bGljZUxlbmd0aDsKK3ZhciB0ZW1wRmlsZU5hbWUgPSAic2VuZC1zbGljZS1kcmFnZ2VkLWZpbGUu
dG1wIjsKK3ZhciB0ZW1wRmlsZU9yaWdpbmFsTW9kaWZpY2F0aW9uVGltZTsKK3ZhciBzdWJmaWxl
OworCitmdW5jdGlvbiB1cGxvYWRGaWxlKGZpbGUsIGV4cGVjdGVkVGV4dCwgZXhwZWN0ZWRFeGNl
cHRpb24pCit7CisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5v
cGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJj
ZXMvcG9zdC1lY2hvLmNnaSIsIGZhbHNlKTsKKworICAgIHZhciBwYXNzZWQ7CisgICAgdmFyIG1l
c3NhZ2U7CisgICAgdHJ5IHsKKyAgICAgICAgeGhyLnNlbmQoZmlsZSk7CisgICAgICAgIGlmIChl
eHBlY3RlZEV4Y2VwdGlvbikgeworICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAg
ICAgICBtZXNzYWdlID0gIlVuZXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDogIiArIHho
ci5yZXNwb25zZVRleHQgKyAiLiBFeHBlY3RpbmcgZXhjZXB0aW9uIHRocm93biI7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoeGhyLnJlc3BvbnNlVGV4dCA9PSBleHBlY3RlZFRl
eHQpIHsKKyAgICAgICAgICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSAiRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDogIiArIHhoci5yZXNwb25z
ZVRleHQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAiVW5leHBlY3RlZCByZXNwb25zZSBkYXRh
IHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4dCArICIuIEV4cGVjdGluZzogIiArIGV4cGVj
dGVkVGV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKGV4KSB7Cisg
ICAgICAgIGlmIChleHBlY3RlZEV4Y2VwdGlvbikgeworICAgICAgICAgICAgcGFzc2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiRXhwZWN0ZWQgZXhjZXB0aW9uIHRocm93bjogIiAr
IGV4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAg
ICAgICAgICBtZXNzYWdlID0gIlVuZXhwZWN0ZWQgZXhjZXB0aW9uIHRocm93bjogIiArIGV4Owor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHBhc3NlZCkKKyAgICAgICAgdGVzdFBhc3NlZCht
ZXNzYWdlKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQobWVzc2FnZSk7Cit9CisKK2Z1
bmN0aW9uIGNyZWF0ZU9yVXBkYXRlVGVtcEZpbGUoZmlsZURhdGEpCit7CisgICAgdmFyIHhociA9
IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcu
MC4wLjE6ODAwMC9yZXNvdXJjZXMvd3JpdGUtdGVtcC1maWxlLnBocD9maWxlbmFtZT0iICsgdGVt
cEZpbGVOYW1lICsgIiZkYXRhPSIgKyBmaWxlRGF0YSwgZmFsc2UpOworICAgIHhoci5zZW5kKCk7
CisgICAgaWYgKHhoci5zdGF0dXMgIT0gMjAwKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIlVuZXhw
ZWN0ZWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkOiAiICsgeGhyLnN0YXR1cyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgdmFsdWVzID0geGhyLnJlc3BvbnNlVGV4dC5zcGxp
dCgnXG4nKTsKKyAgICBpZiAodmFsdWVzLmxlbmd0aCA8IDIpIHsKKyAgICAgICAgdGVzdEZhaWxl
ZCgiVW5leHBlY3RlZCByZXNwb25zZSB0ZXh0IHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWVzOworfQorCitm
dW5jdGlvbiByZW1vdmVUZW1wRmlsZSgpCit7CisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVx
dWVzdCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9yZXNv
dXJjZXMvcmVzZXQtdGVtcC1maWxlLnBocD9maWxlbmFtZT0iICsgdGVtcEZpbGVOYW1lLCBmYWxz
ZSk7CisgICAgeGhyLnNlbmQoKTsKK30KKworZnVuY3Rpb24gb25TdGFibGVGaWxlRHJvcChmaWxl
KQoreworICAgIC8vIFNsaWNlIHRoZSBmaWxlLgorICAgIHN1YmZpbGUgPSBmaWxlLnNsaWNlKHNs
aWNlU3RhcnQsIHNsaWNlTGVuZ3RoKTsKKyAgICB2YXIgZXhwZWN0ZWRUZXh0ID0gb3JpZ2luYWxU
ZXh0LnN1YnN0cmluZyhzbGljZVN0YXJ0LCBzbGljZVN0YXJ0ICsgc2xpY2VMZW5ndGgpOworICAg
IHNob3VsZEV2YWx1YXRlVG8oInN1YmZpbGUuc2l6ZSIsIGV4cGVjdGVkVGV4dC5sZW5ndGgpOwor
CisgICAgLy8gVXBsb2FkIHRoZSBzbGljZWQgZmlsZS4KKyAgICB1cGxvYWRGaWxlKHN1YmZpbGUs
IGV4cGVjdGVkVGV4dCwgZmFsc2UpOworfQorCitmdW5jdGlvbiBkcmFnQW5kU2xpY2VTdGFibGVG
aWxlKHN0YXJ0LCBsZW5ndGgpCit7CisgICAgc2xpY2VTdGFydCA9IHN0YXJ0OworICAgIHNsaWNl
TGVuZ3RoID0gbGVuZ3RoOworICAgIHNldEZpbGVJbnB1dERyb3BDYWxsYmFjayhvblN0YWJsZUZp
bGVEcm9wKTsKKyAgICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMoWyJyZXNvdXJjZXMv
ZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dCJdKTsKKyAgICBtb3ZlTW91c2VUb0NlbnRlck9mRWxl
bWVudChmaWxlSW5wdXQpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKK30KKworZnVuY3Rp
b24gb25VbnN0YWJsZUZpbGVEcm9wKGZpbGUpCit7CisgICAgLy8gU2xpY2UgdGhlIGZpbGUuCisg
ICAgc3ViZmlsZSA9IGZpbGUuc2xpY2Uoc2xpY2VTdGFydCwgc2xpY2VMZW5ndGgpOworICAgIHZh
ciBleHBlY3RlZFRleHQgPSBvcmlnaW5hbFRleHQuc3Vic3RyaW5nKHNsaWNlU3RhcnQsIHNsaWNl
U3RhcnQgKyBzbGljZUxlbmd0aCk7CisgICAgc2hvdWxkRXZhbHVhdGVUbygic3ViZmlsZS5zaXpl
IiwgZXhwZWN0ZWRUZXh0Lmxlbmd0aCk7CisgIAorICAgIC8vIFVwbG9hZCB0aGUgc2xpY2VkIGZp
bGUuCisgICAgdXBsb2FkRmlsZShzdWJmaWxlLCBleHBlY3RlZFRleHQsIGZhbHNlKTsKKworICAg
IC8vIFRoZSBmaWxlIG1vZGlmaWNhdGlvbiB0aW1lIGlzIHNlY29uZC1iYXNlZC4gU28gZGVsYXkg
Y2hhbmdpbmcgdGhlIGZpbGUgaW4gb3JkZXIgdG8gZ2V0IHRoZSBuZXcgbW9kaWZpY2F0aW9uIHRp
bWUgZm9yIHRoZSBmaWxlLgorICAgIHNldFRpbWVvdXQoIm9uTW9kaWZ5RmlsZSgpIiwgNTAwKTsK
K30KKworZnVuY3Rpb24gb25Nb2RpZnlGaWxlKCkKK3sKKyAgICAvLyBNb2RpZnkgdGhlIHVuZGVy
bHlpbmcgdGVtcCBmaWxlLgorICAgIHZhciB0ZW1wRmlsZUluZm8gPSBjcmVhdGVPclVwZGF0ZVRl
bXBGaWxlKHVwZGF0ZWRUZXh0KTsKKyAgICBpZiAodGVtcEZpbGVJbmZvLmxlbmd0aCA8IDIpIHsK
KyAgICAgICAgZG9uZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHZhciB0ZW1wRmls
ZUN1cnJlbnRNb2RpZmljYXRpb25UaW1lID0gdGVtcEZpbGVJbmZvWzFdOworCisgICAgLy8gQ2hl
Y2sgdGhlIG5ldyBtb2RpZmljYXRpb24gdGltZSB0byBtYWtlIHN1cmUgaXQgaXMgZGlmZmVyZW50
LiBJZiBub3QsIHJlcGVhdCB0aGUgYWJvdmUgcHJvY2Vzcy4KKyAgICBpZiAodGVtcEZpbGVDdXJy
ZW50TW9kaWZpY2F0aW9uVGltZSA9PSB0ZW1wRmlsZU9yaWdpbmFsTW9kaWZpY2F0aW9uVGltZSkK
KyAgICAgICAgc2V0VGltZW91dCgnb25Nb2RpZnlGaWxlKCknLCA1MDApOworICAgIGVsc2UKKyAg
ICAgICAgc2V0VGltZW91dCgnb25VcGxvYWRNb2RpZmllZEZpbGUoKScsIDApOworfQorCitmdW5j
dGlvbiBvblVwbG9hZE1vZGlmaWVkRmlsZSgpCit7CisgICAgLy8gVXBsb2FkIHRoZSBzbGljZWQg
ZmlsZS4gV2Ugc2hvdWxkIHJlY2VpdmUgYW4gZXhjZXB0aW9uIHNpbmNlIHRoZSBmaWxlIGhhcyBi
ZWVuIGNoYW5nZWQuCisgICAgdXBsb2FkRmlsZShzdWJmaWxlLCBudWxsLCB0cnVlKTsKKworICAg
IC8vIFJlbW92ZSB0aGUgdGVtcCBmaWxlLgorICAgIHJlbW92ZVRlbXBGaWxlKCk7CisKKyAgICBk
b25lKCk7Cit9CisKK2Z1bmN0aW9uIGRyYWdBbmRTbGljZVVuc3RhYmxlRmlsZShzdGFydCwgbGVu
Z3RoKQoreworICAgIHZhciB0ZW1wRmlsZUluZm8gPSBjcmVhdGVPclVwZGF0ZVRlbXBGaWxlKG9y
aWdpbmFsVGV4dCk7CisgICAgaWYgKHRlbXBGaWxlSW5mby5sZW5ndGggPCAyKSB7CisgICAgICAg
IGRvbmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2YXIgdGVtcEZpbGVQYXRoID0g
dGVtcEZpbGVJbmZvWzBdOworICAgIHRlbXBGaWxlT3JpZ2luYWxNb2RpZmljYXRpb25UaW1lID0g
dGVtcEZpbGVJbmZvWzFdOworCisgICAgc2xpY2VTdGFydCA9IHN0YXJ0OworICAgIHNsaWNlTGVu
Z3RoID0gbGVuZ3RoOworICAgIHNldEZpbGVJbnB1dERyb3BDYWxsYmFjayhvblVuc3RhYmxlRmls
ZURyb3ApOworICAgIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyhbdGVtcEZpbGVQYXRo
XSk7CisgICAgbW92ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQoZmlsZUlucHV0KTsKKyAgICBldmVu
dFNlbmRlci5tb3VzZVVwKCk7Cit9CisKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIHdpbmRvdy5z
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBk
cmFnQW5kU2xpY2VTdGFibGVGaWxlKDIsIDQpOworICAgIGRyYWdBbmRTbGljZVN0YWJsZUZpbGUo
MiwgMjApOworICAgIGRyYWdBbmRTbGljZVN0YWJsZUZpbGUoMTUsIDIwKTsKKworICAgIGRyYWdB
bmRTbGljZVVuc3RhYmxlRmlsZSgzLCA1KTsKK30KKworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikg
eworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworICAgIHJ1blRl
c3QoKTsKKyAgICAvLyBDbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMKKyAgICByZW1vdmVGaWxlSW5w
dXRFbGVtZW50KCk7Cit9IGVsc2UgeworICAgIHRlc3RGYWlsZWQoIlRoaXMgdGVzdCBpcyBub3Qg
aW50ZXJhY3RpdmUsIHBsZWFzZSBydW4gdXNpbmcgRHVtcFJlbmRlclRyZWUiKTsKK30KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFnZ2VkLWZpbGUuaHRt
bCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFnZ2VkLWZpbGUuaHRtbApp
bmRleCAzZjIyMTBhLi5lMGM0YjA1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1sCkBAIC03LDYgKzcsNyBAQAogPGJvZHk+CiA8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy9kcmFnLWZpbGUtdG8tZmlsZS1pbnB1dC1lbGVtZW50LmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+CiA8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2MDc5MQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dl
ZC1maWxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIyIEBACitUZXN0IGZvciBzbGljaW5nIGEg
ZHJhZ2dlZCBmaWxlIGFuZCBzZW5kaW5nIGl0IHZpYSBYTUxIdHRwUmVxdWVzdC4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZXZlbnQuZGF0YVRyYW5zZmVyIGNvbnRhaW5z
IGEgRmlsZSBvYmplY3Qgb24gZHJvcC4KK1BBU1Mgc3ViZmlsZS5zaXplIGlzIDQKK1BBU1MgRXhw
ZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDogMzQ1NgorUEFTUyBldmVudC5kYXRhVHJhbnNm
ZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLgorUEFTUyBzdWJmaWxlLnNpemUgaXMg
OAorUEFTUyBFeHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAzNDU2Nzg5MAorUEFTUyBl
dmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLgorUEFTUyBz
dWJmaWxlLnNpemUgaXMgMAorUEFTUyBFeHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAK
K1BBU1MgZXZlbnQuZGF0YVRyYW5zZmVyIGNvbnRhaW5zIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4K
K1BBU1Mgc3ViZmlsZS5zaXplIGlzIDUKK1BBU1MgRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNl
aXZlZDogNDU2NzgKK1BBU1MgRXhwZWN0ZWQgZXhjZXB0aW9uIHRocm93bjogRXJyb3I6IE5FVFdP
UktfRVJSOiBYTUxIdHRwUmVxdWVzdCBFeGNlcHRpb24gMTAxCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbCBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3MzU3MAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0
bWwKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJhZy1maWxlLXRvLWZpbGUtaW5w
dXQtZWxlbWVudC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NlbmQtc2xp
Y2VkLWRyYWdnZWQtZmlsZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2Vz
L3dyaXRlLXRlbXAtZmlsZS5waHAgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlcy93
cml0ZS10ZW1wLWZpbGUucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZm
ZTJjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNl
cy93cml0ZS10ZW1wLWZpbGUucGhwCkBAIC0wLDAgKzEsMjAgQEAKKzw/cGhwCityZXF1aXJlX29u
Y2UgJ3BvcnRhYmlsaXR5TGF5ZXIucGhwJzsKKworaWYgKCFzeXNfZ2V0X3RlbXBfZGlyKCkpIHsK
KyAgICBlY2hvICJGQUlMOiBObyB0ZW1wIGRpciB3YXMgcmV0dXJuZWQuXG4iOworICAgIGV4aXQo
KTsKK30KKworJHRtcEZpbGUgPSBzeXNfZ2V0X3RlbXBfZGlyKCkgLiAiLyIgLiAkX0dFVFsnZmls
ZW5hbWUnXTsKKworaWYgKCFmaWxlX3B1dF9jb250ZW50cygkdG1wRmlsZSwgJF9HRVRbJ2RhdGEn
XSkpIHsKKyAgICBlY2hvICJGQUlMOiB1bmFibGUgdG8gd3JpdGUgdG8gZmlsZTogIiAuICR0bXBG
aWxlIC4gIlxuIjsKKyAgICBleGl0KCk7Cit9CisKKyRzdGF0ID0gc3RhdCgkdG1wRmlsZSk7CisK
K2VjaG8gJHRtcEZpbGUgLiAiXG4iOworZWNobyAkc3RhdFsnbXRpbWUnXTsKKz8+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3Bl
cnRpZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAppbmRleCBmN2NhODZiLi4yMWNkZGE4
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2RvbS9XaW5kb3cvd2lu
ZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0
L2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKQEAgLTE0OSw2
ICsxNDksNyBAQCB3aW5kb3cuQmVmb3JlTG9hZEV2ZW50LnByb3RvdHlwZS5wcmV2ZW50RGVmYXVs
dCBbZnVuY3Rpb25dCiB3aW5kb3cuQmVmb3JlTG9hZEV2ZW50LnByb3RvdHlwZS5zdG9wUHJvcGFn
YXRpb24gW2Z1bmN0aW9uXQogd2luZG93LkJsb2IgW29iamVjdCBCbG9iQ29uc3RydWN0b3JdCiB3
aW5kb3cuQmxvYi5wcm90b3R5cGUgW29iamVjdCBCbG9iUHJvdG90eXBlXQord2luZG93LkJsb2Iu
cHJvdG90eXBlLnNsaWNlIFtmdW5jdGlvbl0KIHdpbmRvdy5DREFUQVNlY3Rpb24gW29iamVjdCBD
REFUQVNlY3Rpb25Db25zdHJ1Y3Rvcl0KIHdpbmRvdy5DREFUQVNlY3Rpb24ucHJvdG90eXBlIFtv
YmplY3QgQ0RBVEFTZWN0aW9uUHJvdG90eXBlXQogd2luZG93LkNEQVRBU2VjdGlvbi5wcm90b3R5
cGUuQVRUUklCVVRFX05PREUgW251bWJlcl0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDljZjU3OC4uMDE1MDY0NiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBA
QAorMjAxMC0wMi0wOSAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQmxvYi5zbGljZSBzdXBwb3J0
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI5OTMK
KworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmls
ZS5odG1sCisKKyAgICAgICAgVGhlIGZvbGxvd2luZyBzZW1hbnRpYyBpcyBhZG9wdGVkIHBlciB0
aGUgZGlzY3Vzc2lvbnMgb24gcHVibGljLXdlYmFwcHM6CisgICAgICAgIDEpIEZpbGUuc2xpY2Uo
KSBkb2VzIGEgc3luY2hyb25vdXMgSU8gdG8gY2FwdHVyZXMgdGhlIGN1cnJlbnQgc2l6ZSBhbmQK
KyAgICAgICAgICAgbW9kaWZpY2F0aW9uIHRpbWUgYW5kIGNhY2hlIHRoZW0gaW4gdGhlIHJlc3Vs
dGluZyBCbG9iLgorICAgICAgICAyKSBTdWJzZXF1ZW50IEJsb2Igb3BlcmF0aW9ucywgbGlrZSBC
bG9iLnNsaWNlIGFuZCBCbG9iLnNpemUgc2ltcGx5CisgICAgICAgICAgIHVzZSB0aGUgY2FjaGVk
IHZhbHVlcy4KKyAgICAgICAgMykgV2hlbiB0aGUgdW5kZXJseWluZyBmaWxlIGRhdGEgYXJlIGFj
Y2Vzc2VkLCBsaWtlIGluIFhIUi5zZW5kKCksIHRoZQorICAgICAgICAgICBVQSB3aWxsIGNoZWNr
IHRoZSBjYWNoZWQgbW9kaWZpY2F0aW9uIHRpbWUgYWdhaW5zdCB0aGUgY3VycmVudAorICAgICAg
ICAgICBtb2RpZmljYXRpb24gdGltZSB0byBkZXRlcm1pbmUgaWYgdGhlIGZpbGUgaGFzIGJlZW4g
Y2hhbmdlZCBvciBub3QuCisgICAgICAgICAgIEFuIGVycm9yIG9yIGV4Y2VwdGlvbiB3aWxsIGJl
IHRocm93biBpZiBuZWVkZWQuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9sb2NhbC9zZW5k
LXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbAorCisgICAgICAgICogaHRtbC9CbG9iLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6c2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpnZXRGaWxlU2l6ZUhlbHBlcik6CisgICAgICAg
IChXZWJDb3JlOjpCbG9iOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGltZUhlbHBlcik6CisgICAgICAg
IChXZWJDb3JlOjpCbG9iOjpzbGljZSk6CisgICAgICAgICogaHRtbC9CbG9iLmg6CisgICAgICAg
IChXZWJDb3JlOjpCbG9iOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpsZW5ndGgp
OgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6bW9kaWZpY2F0aW9uVGltZSk6CisgICAgICAgICog
aHRtbC9CbG9iLmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZUZvcm1EYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhOjpkZWVwQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZSk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9ybURhdGFFbGVtZW50OjpGb3JtRGF0YUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJl
YW1NYWMubW06CisgICAgICAgIChXZWJDb3JlOjphZHZhbmNlQ3VycmVudFN0cmVhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVuTmV4dFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpmb3JtQ3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1PcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OmZv
cm1SZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEhUVFBCb2R5KToKKyAgICAgICAgKiB4bWwv
WE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNl
bmQpOgorCiAyMDEwLTAyLTA5ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0Jsb2IuY3BwIGIvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCmluZGV4IDBiNjc3ZWEuLmFj
ZjYxNDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmNwcAorKysgYi9XZWJDb3JlL2h0
bWwvQmxvYi5jcHAKQEAgLTM3LDE3ICszNyw3MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEJs
b2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIDogbV9wYXRoKHBhdGgpCisgICAgLCBt
X3N0YXJ0KDApCisgICAgLCBtX2xlbmd0aCgtMSkKKyAgICAsIG1fc25hcHNob3RTaXplKC0xKQor
ICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoMCkKK3sKK30KKworQmxvYjo6QmxvYihj
b25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgbG9u
ZyBsb25nIHNuYXBzaG90U2l6ZSwgdGltZV90IHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKKyAg
ICA6IG1fcGF0aChwYXRoKQorICAgICwgbV9zdGFydChzdGFydCkKKyAgICAsIG1fbGVuZ3RoKGxl
bmd0aCkKKyAgICAsIG1fc25hcHNob3RTaXplKHNuYXBzaG90U2l6ZSkKKyAgICAsIG1fc25hcHNo
b3RNb2RpZmljYXRpb25UaW1lKHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKIHsKIH0KIAogdW5z
aWduZWQgbG9uZyBsb25nIEJsb2I6OnNpemUoKSBjb25zdAogeworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KChtX3NuYXBzaG90U2l6ZSA9PSAtMSkgPyBnZXRGaWxl
U2l6ZUhlbHBlcigpIDogbV9sZW5ndGgpOyAKK30KKworbG9uZyBsb25nIEJsb2I6OmdldEZpbGVT
aXplSGVscGVyKCkgY29uc3QKK3sKICAgICAvLyBGSVhNRTogSmF2YVNjcmlwdCBjYW5ub3QgcmVw
cmVzZW50IHNpemVzIGFzIGxhcmdlIGFzIHVuc2lnbmVkIGxvbmcgbG9uZywgd2UgbmVlZCB0bwog
ICAgIC8vIGNvbWUgdXAgd2l0aCBhbiBleGNlcHRpb24gdG8gdGhyb3cgaWYgZmlsZSBzaXplIGlz
IG5vdCByZXByZXNldGFibGUuCiAgICAgbG9uZyBsb25nIHNpemU7CiAgICAgaWYgKCFnZXRGaWxl
U2l6ZShtX3BhdGgsIHNpemUpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplKTsKKyAgICByZXR1cm4gc2l6ZTsKK30KKwor
dGltZV90IEJsb2I6OmdldEZpbGVNb2RpZmljYXRpb25UaW1lSGVscGVyKCkgY29uc3QKK3sKKyAg
ICB0aW1lX3QgbW9kaWZpY2F0aW9uVGltZTsKKyAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25U
aW1lKG1fcGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBtb2RpZmljYXRpb25UaW1lOworfQorCitQYXNzUmVmUHRyPEJsb2I+IEJsb2I6OnNsaWNl
KGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkgY29uc3QKK3sKKyAgICAvLyBXaGVu
IHdlIHNsaWNlIGEgZmlsZSBmb3IgdGhlIGZpcnN0IHRpbWUsIHdlIG9idGFpbiBhIHNuYXBzaG90
IG9mIHRoZSBmaWxlIGJ5IGNhcHR1cmluZyBpdHMgY3VycmVudCBzaXplIGFuZCBtb2RpZmljYXRp
b24gdGltZS4KKyAgICAvLyBUaGUgbW9kaWZpY2F0aW9uIHRpbWUgd2lsbCBiZSB1c2VkIHRvIHZl
cmlmeSBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIG9yIG5vdCwgd2hlbiB0aGUgdW5kZXJs
eWluZyBkYXRhIGFyZSBhY2Nlc3NlZC4KKyAgICBsb25nIGxvbmcgc25hcHNob3RTaXplOworICAg
IHRpbWVfdCBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7CisgICAgaWYgKG1fc25hcHNob3RTaXpl
ID09IC0xKSB7CisgICAgICAgIHNuYXBzaG90U2l6ZSA9IGdldEZpbGVTaXplSGVscGVyKCk7Cisg
ICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IGdldEZpbGVNb2RpZmljYXRpb25UaW1l
SGVscGVyKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc25hcHNob3RTaXplID0gbV9zbmFwc2hv
dFNpemU7CisgICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IG1fc25hcHNob3RNb2Rp
ZmljYXRpb25UaW1lOworICAgIH0KKworICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBpdCBleGNl
ZWRzIHRoZSBzaXplIGxpbWl0LgorICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHN0YXJ0ID0g
MDsKKyAgICBpZiAobGVuZ3RoIDwgMCkKKyAgICAgICAgbGVuZ3RoID0gMDsKKworICAgIGlmIChz
dGFydCA+IHNuYXBzaG90U2l6ZSkgeworICAgICAgICBzdGFydCA9IDA7CisgICAgICAgIGxlbmd0
aCA9IDA7CisgICAgfSBlbHNlIGlmIChzdGFydCArIGxlbmd0aCA+IHNuYXBzaG90U2l6ZSkKKyAg
ICAgICAgbGVuZ3RoID0gc25hcHNob3RTaXplIC0gc3RhcnQ7CisKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEJsb2IobV9wYXRoLCBtX3N0YXJ0ICsgc3RhcnQsIGxlbmd0aCwgc25hcHNob3RTaXpl
LCBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2IuaCBiL1dlYkNvcmUvaHRtbC9CbG9iLmgK
aW5kZXggYjkxMGU4Zi4uMTU5YjIxMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuaAor
KysgYi9XZWJDb3JlL2h0bWwvQmxvYi5oCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx0
aW1lLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogCkBAIC00NywxNCArNDgsMjggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+Qmxv
YigpIHsgfQogCisgICAgUGFzc1JlZlB0cjxCbG9iPiBzbGljZShsb25nIGxvbmcgc3RhcnQsIGxv
bmcgbG9uZyBsZW5ndGgpIGNvbnN0OworCiAgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXRoOyB9CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdDsK
KyAgICBsb25nIGxvbmcgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgbG9u
ZyBsb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgdGltZV90IG1v
ZGlmaWNhdGlvblRpbWUoKSBjb25zdCB7IHJldHVybiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgQmxvYihjb25zdCBTdHJpbmcmIHBhdGgpOwogCiBwcml2
YXRlOgorICAgIEJsb2IoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcg
bG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNpemUsIHRpbWVfdCBzbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWUpOworCisgICAgbG9uZyBsb25nIGdldEZpbGVTaXplSGVscGVyKCkgY29uc3Q7
CisgICAgdGltZV90IGdldEZpbGVNb2RpZmljYXRpb25UaW1lSGVscGVyKCkgY29uc3Q7CisKICAg
ICBTdHJpbmcgbV9wYXRoOworICAgIGxvbmcgbG9uZyBtX3N0YXJ0OworICAgIGxvbmcgbG9uZyBt
X2xlbmd0aDsKKyAgICBsb25nIGxvbmcgbV9zbmFwc2hvdFNpemU7CisgICAgdGltZV90IG1fc25h
cHNob3RNb2RpZmljYXRpb25UaW1lOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2IuaWRsIGIvV2ViQ29yZS9odG1sL0Jsb2IuaWRsCmlu
ZGV4IDU3M2JlMzUuLjgzNjRlYWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmlkbAor
KysgYi9XZWJDb3JlL2h0bWwvQmxvYi5pZGwKQEAgLTMyLDYgKzMyLDcgQEAgbW9kdWxlIGh0bWwg
ewogCiAgICAgaW50ZXJmYWNlIEJsb2IgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5z
aWduZWQgbG9uZyBsb25nIHNpemU7CisgICAgICAgIEJsb2Igc2xpY2UoaW4gbG9uZyBsb25nIHN0
YXJ0LCBpbiBsb25nIGxvbmcgbGVuZ3RoKTsKICAgICB9OwogCiB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuY3BwCmluZGV4IDJmODg4OTQuLmZjNTM4YWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3Bw
CkBAIC0yNjYsNyArMjY2LDcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gSFRNTEZvcm1FbGVtZW50
OjpjcmVhdGVGb3JtRGF0YShjb25zdCBDU3RyaW5nJiBib3VuZGFyeSkKICAgICAgICAgICAgICAg
ICAgICAgaWYgKHNpemVfdCBkYXRhU2l6ZSA9IHZhbHVlLmRhdGEoKS5sZW5ndGgoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRGF0YSh2YWx1ZS5kYXRhKCkuZGF0YSgp
LCBkYXRhU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmZpbGUoKSAm
JiAhdmFsdWUuZmlsZSgpLT5wYXRoKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LT5hcHBlbmRGaWxlKHZhbHVlLmZpbGUoKS0+cGF0aCgpLCBzaG91bGRHZW5lcmF0
ZUZpbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmRGaWxlKHZhbHVl
LmZpbGUoKS0+cGF0aCgpLCAwLCAtMSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKIAogICAgICAgICAg
ICAgICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEoIlxyXG4iLCAyKTsKICAgICAgICAgICAgICAg
ICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAppbmRleCBhZjNiN2YwLi5kZDA0
ZTE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKQEAgLTEwOCw3ICsxMDgs
NyBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6ZGVlcENvcHkoKSBjb25zdAogICAg
ICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1f
ZGF0YSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRm9ybURhdGFFbGVtZW50
OjplbmNvZGVkRmlsZToKLSAgICAgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChG
b3JtRGF0YUVsZW1lbnQoZS5tX2ZpbGVuYW1lLCBlLm1fc2hvdWxkR2VuZXJhdGVGaWxlKSk7Cisg
ICAgICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUu
bV9maWxlbmFtZSwgZS5tX2ZpbGVTdGFydCwgZS5tX2ZpbGVMZW5ndGgsIGUubV9maWxlTW9kaWZp
Y2F0aW9uVGltZSwgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjUsOSArMTI1LDkgQEAgdm9pZCBGb3JtRGF0YTo6YXBw
ZW5kRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKICAgICBtZW1jcHkoZS5tX2Rh
dGEuZGF0YSgpICsgb2xkU2l6ZSwgZGF0YSwgc2l6ZSk7CiB9CiAKLXZvaWQgRm9ybURhdGE6OmFw
cGVuZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUp
Cit2b2lkIEZvcm1EYXRhOjphcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcg
bG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgdGltZV90IG1vZGlmaWNhdGlvblRpbWUsIGJv
b2wgc2hvdWxkR2VuZXJhdGVGaWxlKQogewotICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRh
RWxlbWVudChmaWxlbmFtZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CisgICAgbV9lbGVtZW50cy5h
cHBlbmQoRm9ybURhdGFFbGVtZW50KGZpbGVuYW1lLCBzdGFydCwgbGVuZ3RoLCBtb2RpZmljYXRp
b25UaW1lLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKIH0KIAogdm9pZCBGb3JtRGF0YTo6ZmxhdHRl
bihWZWN0b3I8Y2hhcj4mIGRhdGEpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5o
CmluZGV4IDcyNzhmMmUuLmFhNWRlYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9Gb3JtRGF0YS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5o
CkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIEZvcm1EYXRhX2gKIAogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zMiwxMSArMzMsMTQgQEAgY2xhc3Mg
Rm9ybURhdGFFbGVtZW50IHsKIHB1YmxpYzoKICAgICBGb3JtRGF0YUVsZW1lbnQoKSA6IG1fdHlw
ZShkYXRhKSB7IH0KICAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgVmVjdG9yPGNoYXI+JiBhcnJh
eSkgOiBtX3R5cGUoZGF0YSksIG1fZGF0YShhcnJheSkgeyB9Ci0gICAgRm9ybURhdGFFbGVtZW50
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKSA6IG1fdHlw
ZShlbmNvZGVkRmlsZSksIG1fZmlsZW5hbWUoZmlsZW5hbWUpLCBtX3Nob3VsZEdlbmVyYXRlRmls
ZShzaG91bGRHZW5lcmF0ZUZpbGUpIHsgfQorICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBTdHJp
bmcmIGZpbGVuYW1lLCBpbnQ2NF90IGZpbGVTdGFydCwgaW50NjRfdCBmaWxlTGVuZ3RoLCB0aW1l
X3QgZmlsZU1vZGlmaWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKSA6IG1fdHlw
ZShlbmNvZGVkRmlsZSksIG1fZmlsZW5hbWUoZmlsZW5hbWUpLCBtX2ZpbGVTdGFydChmaWxlU3Rh
cnQpLCBtX2ZpbGVMZW5ndGgoZmlsZUxlbmd0aCksIG1fZmlsZU1vZGlmaWNhdGlvblRpbWUoZmls
ZU1vZGlmaWNhdGlvblRpbWUpLCBtX3Nob3VsZEdlbmVyYXRlRmlsZShzaG91bGRHZW5lcmF0ZUZp
bGUpIHsgfQogCiAgICAgZW51bSB7IGRhdGEsIGVuY29kZWRGaWxlIH0gbV90eXBlOwogICAgIFZl
Y3RvcjxjaGFyPiBtX2RhdGE7CiAgICAgU3RyaW5nIG1fZmlsZW5hbWU7CisgICAgaW50NjRfdCBt
X2ZpbGVTdGFydDsKKyAgICBpbnQ2NF90IG1fZmlsZUxlbmd0aDsKKyAgICB0aW1lX3QgbV9maWxl
TW9kaWZpY2F0aW9uVGltZTsKICAgICBTdHJpbmcgbV9nZW5lcmF0ZWRGaWxlbmFtZTsKICAgICBi
b29sIG1fc2hvdWxkR2VuZXJhdGVGaWxlOwogfTsKQEAgLTUwLDcgKzU0LDcgQEAgaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGEsIGNvbnN0IEZvcm1EYXRhRWxl
bWVudCYgYikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChhLm1fZGF0YSAhPSBiLm1f
ZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhLm1fZmlsZW5hbWUgIT0gYi5t
X2ZpbGVuYW1lKQorICAgIGlmIChhLm1fZmlsZW5hbWUgIT0gYi5tX2ZpbGVuYW1lIHx8IGEubV9m
aWxlU3RhcnQgIT0gYi5tX2ZpbGVTdGFydCB8fCBhLm1fZmlsZUxlbmd0aCAhPSBiLm1fZmlsZUxl
bmd0aCB8fCBhLm1fZmlsZU1vZGlmaWNhdGlvblRpbWUgIT0gYi5tX2ZpbGVNb2RpZmljYXRpb25U
aW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTcyLDcg
Kzc2LDcgQEAgcHVibGljOgogICAgIH5Gb3JtRGF0YSgpOwogICAgIAogICAgIHZvaWQgYXBwZW5k
RGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kRmlsZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlKTsKKyAg
ICB2b2lkIGFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIHN0YXJ0
LCBsb25nIGxvbmcgbGVuZ3RoLCB0aW1lX3QgbW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91bGRH
ZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CiAKICAgICB2b2lkIGZsYXR0ZW4oVmVjdG9yPGNoYXI+Jikg
Y29uc3Q7IC8vIG9taXRzIGZpbGVzCiAgICAgU3RyaW5nIGZsYXR0ZW5Ub1N0cmluZygpIGNvbnN0
OyAvLyBvbWl0cyBmaWxlcwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21h
Yy9Gb3JtRGF0YVN0cmVhbU1hYy5tbSBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9y
bURhdGFTdHJlYW1NYWMubW0KaW5kZXggOGFhOWE2ZC4uNGI1YTAwMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCkBAIC0xMjUsNiAr
MTI1LDcgQEAgc3RydWN0IEZvcm1TdHJlYW1GaWVsZHMgewogICAgIFNjaGVkdWxlUGFpckhhc2hT
ZXQgc2NoZWR1bGVkUnVuTG9vcFBhaXJzOwogICAgIFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+IHJl
bWFpbmluZ0VsZW1lbnRzOyAvLyBpbiByZXZlcnNlIG9yZGVyCiAgICAgQ0ZSZWFkU3RyZWFtUmVm
IGN1cnJlbnRTdHJlYW07CisgICAgbG9uZyBsb25nIGN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aDsK
ICAgICBjaGFyKiBjdXJyZW50RGF0YTsKICAgICBDRlJlYWRTdHJlYW1SZWYgZm9ybVN0cmVhbTsK
ICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc3RyZWFtTGVuZ3RoOwpAQCAtMTQ1LDEyICsxNDYsMTIg
QEAgc3RhdGljIHZvaWQgY2xvc2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0p
CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBhZHZhbmNlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFt
RmllbGRzICpmb3JtKQorc3RhdGljIGJvb2wgYWR2YW5jZUN1cnJlbnRTdHJlYW0oRm9ybVN0cmVh
bUZpZWxkcyAqZm9ybSkKIHsKICAgICBjbG9zZUN1cnJlbnRTdHJlYW0oZm9ybSk7CiAKICAgICBp
ZiAoZm9ybS0+cmVtYWluaW5nRWxlbWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBuZXcgc3RyZWFtLgogICAg
IEZvcm1EYXRhRWxlbWVudCYgbmV4dElucHV0ID0gZm9ybS0+cmVtYWluaW5nRWxlbWVudHMubGFz
dCgpOwpAQCAtMTYwLDEwICsxNjEsMjEgQEAgc3RhdGljIHZvaWQgYWR2YW5jZUN1cnJlbnRTdHJl
YW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbSA9
IENGUmVhZFN0cmVhbUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCByZWludGVycHJldF9jYXN0PGNv
bnN0IFVJbnQ4Kj4oZGF0YSksIHNpemUsIGtDRkFsbG9jYXRvck51bGwpOwogICAgICAgICBmb3Jt
LT5jdXJyZW50RGF0YSA9IGRhdGE7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG5leHRJbnB1
dC5tX2ZpbGVNb2RpZmljYXRpb25UaW1lKSB7CisgICAgICAgICAgICB0aW1lX3QgbW9kaWZpY2F0
aW9uVGltZTsKKyAgICAgICAgICAgIGlmIChnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShuZXh0SW5w
dXQubV9maWxlbmFtZSwgbW9kaWZpY2F0aW9uVGltZSkgJiYgbW9kaWZpY2F0aW9uVGltZSAhPSBu
ZXh0SW5wdXQubV9maWxlTW9kaWZpY2F0aW9uVGltZSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKwogICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBuZXh0SW5w
dXQubV9zaG91bGRHZW5lcmF0ZUZpbGUgPyBuZXh0SW5wdXQubV9nZW5lcmF0ZWRGaWxlbmFtZSA6
IG5leHRJbnB1dC5tX2ZpbGVuYW1lOwogICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZp
bGVuYW1lKEFkb3B0Q0YsIHBhdGguY3JlYXRlQ0ZTdHJpbmcoKSk7CiAgICAgICAgIFJldGFpblB0
cjxDRlVSTFJlZj4gZmlsZVVSTChBZG9wdENGLCBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0
aCgwLCBmaWxlbmFtZS5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIEZBTFNFKSk7CiAgICAg
ICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBDRlJlYWRTdHJlYW1DcmVhdGVXaXRoRmlsZSgwLCBm
aWxlVVJMLmdldCgpKTsKKyAgICAgICAgaWYgKG5leHRJbnB1dC5tX2ZpbGVTdGFydCA+IDApIHsK
KyAgICAgICAgICAgIENGTnVtYmVyUmVmIHBvc2l0aW9uID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NG
TnVtYmVyTG9uZ0xvbmdUeXBlLCAmbmV4dElucHV0Lm1fZmlsZVN0YXJ0KTsKKyAgICAgICAgICAg
IENGUmVhZFN0cmVhbVNldFByb3BlcnR5KGZvcm0tPmN1cnJlbnRTdHJlYW0sIGtDRlN0cmVhbVBy
b3BlcnR5RmlsZUN1cnJlbnRPZmZzZXQsIHBvc2l0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBm
b3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBuZXh0SW5wdXQubV9maWxlTGVuZ3RoOwog
ICAgIH0KICAgICBmb3JtLT5yZW1haW5pbmdFbGVtZW50cy5yZW1vdmVMYXN0KCk7CiAKQEAgLTE3
NiwxNiArMTg4LDE5IEBAIHN0YXRpYyB2b2lkIGFkdmFuY2VDdXJyZW50U3RyZWFtKEZvcm1TdHJl
YW1GaWVsZHMgKmZvcm0pCiAgICAgU2NoZWR1bGVQYWlySGFzaFNldDo6aXRlcmF0b3IgZW5kID0g
Zm9ybS0+c2NoZWR1bGVkUnVuTG9vcFBhaXJzLmVuZCgpOwogICAgIGZvciAoU2NoZWR1bGVQYWly
SGFzaFNldDo6aXRlcmF0b3IgaXQgPSBmb3JtLT5zY2hlZHVsZWRSdW5Mb29wUGFpcnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICBDRlJlYWRTdHJlYW1TY2hlZHVsZVdpdGhSdW5M
b29wKGZvcm0tPmN1cnJlbnRTdHJlYW0sICgqaXQpLT5ydW5Mb29wKCksICgqaXQpLT5tb2RlKCkp
OworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIG9wZW5OZXh0U3RyZWFtKEZv
cm1TdHJlYW1GaWVsZHMqIGZvcm0pCitzdGF0aWMgYm9vbCBvcGVuTmV4dFN0cmVhbShGb3JtU3Ry
ZWFtRmllbGRzKiBmb3JtKQogewogICAgIC8vIFNraXAgb3ZlciBhbnkgc3RyZWFtcyB3ZSBjYW4n
dCBvcGVuLgotICAgIC8vIEZvciBzb21lIHB1cnBvc2VzIHdlIG1pZ2h0IHdhbnQgdG8gcmV0dXJu
IGFuIGVycm9yLCBidXQgdGhlIGN1cnJlbnQgTlNVUkxDb25uZWN0aW9uCi0gICAgLy8gY2FuJ3Qg
cmVhbGx5IGRvIGFueXRoaW5nIHVzZWZ1bCB3aXRoIGFuIGVycm9yIGF0IHRoaXMgcG9pbnQsIHNv
IHRoaXMgaXMgYmV0dGVyLgotICAgIGFkdmFuY2VDdXJyZW50U3RyZWFtKGZvcm0pOworICAgIGlm
ICghYWR2YW5jZUN1cnJlbnRTdHJlYW0oZm9ybSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB3aGlsZSAoZm9ybS0+Y3VycmVudFN0cmVhbSAmJiAhQ0ZSZWFkU3RyZWFtT3Blbihmb3JtLT5j
dXJyZW50U3RyZWFtKSkKLSAgICAgICAgYWR2YW5jZUN1cnJlbnRTdHJlYW0oZm9ybSk7CisgICAg
ICAgIGlmICghYWR2YW5jZUN1cnJlbnRTdHJlYW0oZm9ybSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyB2b2lkKiBmb3JtQ3JlYXRlKENG
UmVhZFN0cmVhbVJlZiBzdHJlYW0sIHZvaWQqIGNvbnRleHQpCkBAIC0xOTQsNiArMjA5LDcgQEAg
c3RhdGljIHZvaWQqIGZvcm1DcmVhdGUoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgdm9pZCogY29u
dGV4dCkKIAogICAgIEZvcm1TdHJlYW1GaWVsZHMqIG5ld0luZm8gPSBuZXcgRm9ybVN0cmVhbUZp
ZWxkczsKICAgICBuZXdJbmZvLT5jdXJyZW50U3RyZWFtID0gTlVMTDsKKyAgICBuZXdJbmZvLT5j
dXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSAtMTsKICAgICBuZXdJbmZvLT5jdXJyZW50RGF0YSA9
IDA7CiAgICAgbmV3SW5mby0+Zm9ybVN0cmVhbSA9IHN0cmVhbTsgLy8gRG9uJ3QgcmV0YWluLiBU
aGF0IHdvdWxkIGNyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZS4KICAgICBuZXdJbmZvLT5zdHJlYW1M
ZW5ndGggPSBmb3JtQ29udGV4dC0+c3RyZWFtTGVuZ3RoOwpAQCAtMjI2LDExICsyNDIsMTEgQEAg
c3RhdGljIEJvb2xlYW4gZm9ybU9wZW4oQ0ZSZWFkU3RyZWFtUmVmLCBDRlN0cmVhbUVycm9yKiBl
cnJvciwgQm9vbGVhbiogb3BlbkNvbXAKIHsKICAgICBGb3JtU3RyZWFtRmllbGRzKiBmb3JtID0g
c3RhdGljX2Nhc3Q8Rm9ybVN0cmVhbUZpZWxkcyo+KGNvbnRleHQpOwogCi0gICAgb3Blbk5leHRT
dHJlYW0oZm9ybSk7CisgICAgYm9vbCBvcGVuZWQgPSBvcGVuTmV4dFN0cmVhbShmb3JtKTsKIAot
ICAgICpvcGVuQ29tcGxldGUgPSBUUlVFOwotICAgIGVycm9yLT5lcnJvciA9IDA7Ci0gICAgcmV0
dXJuIFRSVUU7CisgICAgKm9wZW5Db21wbGV0ZSA9IG9wZW5lZDsKKyAgICBlcnJvci0+ZXJyb3Ig
PSBvcGVuZWQgPyAwIDogZm5PcG5FcnI7CisgICAgcmV0dXJuIG9wZW5lZDsKIH0KIAogc3RhdGlj
IENGSW5kZXggZm9ybVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZlciwg
Q0ZJbmRleCBidWZmZXJMZW5ndGgsIENGU3RyZWFtRXJyb3IqIGVycm9yLCBCb29sZWFuKiBhdEVP
Riwgdm9pZCogY29udGV4dCkKQEAgLTIzOCw3ICsyNTQsMTAgQEAgc3RhdGljIENGSW5kZXggZm9y
bVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBidWZm
ZXJMZW4KICAgICBGb3JtU3RyZWFtRmllbGRzKiBmb3JtID0gc3RhdGljX2Nhc3Q8Rm9ybVN0cmVh
bUZpZWxkcyo+KGNvbnRleHQpOwogCiAgICAgd2hpbGUgKGZvcm0tPmN1cnJlbnRTdHJlYW0pIHsK
LSAgICAgICAgQ0ZJbmRleCBieXRlc1JlYWQgPSBDRlJlYWRTdHJlYW1SZWFkKGZvcm0tPmN1cnJl
bnRTdHJlYW0sIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgQ0ZJbmRleCBieXRlc1Rv
UmVhZCA9IGJ1ZmZlckxlbmd0aDsKKyAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5n
ZUxlbmd0aCAhPSAtMSAmJiBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPCBieXRlc1Rv
UmVhZCkKKyAgICAgICAgICAgIGJ5dGVzVG9SZWFkID0gc3RhdGljX2Nhc3Q8Q0ZJbmRleD4oZm9y
bS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoKTsKKyAgICAgICAgQ0ZJbmRleCBieXRlc1JlYWQg
PSBDRlJlYWRTdHJlYW1SZWFkKGZvcm0tPmN1cnJlbnRTdHJlYW0sIGJ1ZmZlciwgYnl0ZXNUb1Jl
YWQpOwogICAgICAgICBpZiAoYnl0ZXNSZWFkIDwgMCkgewogICAgICAgICAgICAgKmVycm9yID0g
Q0ZSZWFkU3RyZWFtR2V0RXJyb3IoZm9ybS0+Y3VycmVudFN0cmVhbSk7CiAgICAgICAgICAgICBy
ZXR1cm4gLTE7CkBAIC0yNDcsNiArMjY2LDggQEAgc3RhdGljIENGSW5kZXggZm9ybVJlYWQoQ0ZS
ZWFkU3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBidWZmZXJMZW4KICAg
ICAgICAgICAgIGVycm9yLT5lcnJvciA9IDA7CiAgICAgICAgICAgICAqYXRFT0YgPSBGQUxTRTsK
ICAgICAgICAgICAgIGZvcm0tPmJ5dGVzU2VudCArPSBieXRlc1JlYWQ7CisgICAgICAgICAgICBp
ZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IC0xKQorICAgICAgICAgICAgICAg
IGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAtPSBieXRlc1JlYWQ7CiAKICAgICAgICAg
ICAgIGlmICghUmVzb3VyY2VIYW5kbGU6OmRpZFNlbmRCb2R5RGF0YURlbGVnYXRlRXhpc3RzKCkp
IHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRmlndXJlIG91dCBob3cgdG8gb25seSBkbyB0
aGlzIHdoZW4gYSBSZXNvdXJjZUhhbmRsZUNsaWVudCBpcyBhdmFpbGFibGUuCkBAIC0zNTksOSAr
MzgwLDEzIEBAIHZvaWQgc2V0SFRUUEJvZHkoTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCwg
UGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEpCiAgICAgICAgIGlmIChlbGVtZW50Lm1fdHlw
ZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGEpCiAgICAgICAgICAgICBsZW5ndGggKz0gZWxlbWVu
dC5tX2RhdGEuc2l6ZSgpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGxvbmcgbG9uZyBm
aWxlU2l6ZTsKLSAgICAgICAgICAgIGlmIChnZXRGaWxlU2l6ZShlbGVtZW50Lm1fc2hvdWxkR2Vu
ZXJhdGVGaWxlID8gZWxlbWVudC5tX2dlbmVyYXRlZEZpbGVuYW1lIDogZWxlbWVudC5tX2ZpbGVu
YW1lLCBmaWxlU2l6ZSkpCi0gICAgICAgICAgICAgICAgbGVuZ3RoICs9IGZpbGVTaXplOworICAg
ICAgICAgICAgaWYgKGVsZW1lbnQubV9maWxlTGVuZ3RoICE9IC0xKQorICAgICAgICAgICAgICAg
IGxlbmd0aCArPSBlbGVtZW50Lm1fZmlsZUxlbmd0aDsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIGxvbmcgbG9uZyBmaWxlU2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAoZ2V0
RmlsZVNpemUoZWxlbWVudC5tX3Nob3VsZEdlbmVyYXRlRmlsZSA/IGVsZW1lbnQubV9nZW5lcmF0
ZWRGaWxlbmFtZSA6IGVsZW1lbnQubV9maWxlbmFtZSwgZmlsZVNpemUpKQorICAgICAgICAgICAg
ICAgICAgICBsZW5ndGggKz0gZmlsZVNpemU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCAzMjgxOGRmLi45OTdlZWM2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCkBAIC00NDQsNyArNDQ0LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
c2VuZChCbG9iKiBib2R5LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgLy8gRklYTUU6IFNo
b3VsZCB3ZSBzZXQgYSBDb250ZW50LVR5cGUgaWYgb25lIGlzIG5vdCBzZXQuCiAgICAgICAgIC8v
IEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgdXBsb2FkaW5nIGJ1bmRsZXMuCiAgICAgICAgIG1fcmVx
dWVzdEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fcmVxdWVzdEVu
dGl0eUJvZHktPmFwcGVuZEZpbGUoYm9keS0+cGF0aCgpLCBmYWxzZSk7CisgICAgICAgIG1fcmVx
dWVzdEVudGl0eUJvZHktPmFwcGVuZEZpbGUoYm9keS0+cGF0aCgpLCBib2R5LT5zdGFydCgpLCBi
b2R5LT5sZW5ndGgoKSwgYm9keS0+bW9kaWZpY2F0aW9uVGltZSgpLCBmYWxzZSk7CiAgICAgfQog
CiAgICAgY3JlYXRlUmVxdWVzdChlYyk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzODNjY2Q0Li4yYzA3NGMz
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxOCBAQAogMjAxMC0wMi0wOSAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQmxvYi5zbGljZSBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI5OTMKKworICAgICAgICBDaHJvbWl1bS1zaWRlIGNo
YW5nZSB0byBzdXBwb3J0IEJsb2Iuc2xpY2UuCisKKyAgICAgICAgKiBzcmMvV2ViSFRUUEJvZHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJIVFRQQm9keTo6ZWxlbWVudEF0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViSFRUUEJvZHk6OmFwcGVuZEZpbGUpOgorCisyMDEwLTAyLTA5ICBKaWFuIExp
ICA8amlhbmxpQGNocm9taXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNo
ZXIuCiAKICAgICAgICAgW2Nocm9taXVtXSBBZGQgdGhlIGNocm9taXVtIGludGVyZmFjZSB0byBz
dXBwb3J0IEJsb2Iuc2xpY2UuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhU
VFBCb2R5LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSFRUUEJvZHkuY3BwCmluZGV4IDNk
NDA4NjkuLmMwNDNjMzYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSFRUUEJv
ZHkuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSFRUUEJvZHkuY3BwCkBAIC04Nyw5
ICs4Nyw5IEBAIGJvb2wgV2ViSFRUUEJvZHk6OmVsZW1lbnRBdChzaXplX3QgaW5kZXgsIEVsZW1l
bnQmIHJlc3VsdCkgY29uc3QKICAgICAgICAgcmVzdWx0LnR5cGUgPSBFbGVtZW50OjpUeXBlRmls
ZTsKICAgICAgICAgcmVzdWx0LmRhdGEucmVzZXQoKTsKICAgICAgICAgcmVzdWx0LmZpbGVQYXRo
ID0gZWxlbWVudC5tX2ZpbGVuYW1lOwotICAgICAgICByZXN1bHQuZmlsZVN0YXJ0ID0gMDsgLy8g
RklYTUU6IHRvIGJlIHNldCBmcm9tIEZvcm1EYXRhLgotICAgICAgICByZXN1bHQuZmlsZUxlbmd0
aCA9IC0xOyAvLyBGSVhNRTogdG8gYmUgc2V0IGZyb20gRm9ybURhdGEuCi0gICAgICAgIHJlc3Vs
dC5maWxlSW5mby5tb2RpZmljYXRpb25UaW1lID0gMC4wOyAvLyBGSVhNRTogdG8gYmUgc2V0IGZy
b20gRm9ybURhdGEuCisgICAgICAgIHJlc3VsdC5maWxlU3RhcnQgPSBlbGVtZW50Lm1fZmlsZVN0
YXJ0OworICAgICAgICByZXN1bHQuZmlsZUxlbmd0aCA9IGVsZW1lbnQubV9maWxlTGVuZ3RoOwor
ICAgICAgICByZXN1bHQuZmlsZUluZm8ubW9kaWZpY2F0aW9uVGltZSA9IGVsZW1lbnQubV9maWxl
TW9kaWZpY2F0aW9uVGltZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTUsNyArMTE1LDggQEAgdm9pZCBXZWJIVFRQQm9k
eTo6YXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoKQogCiB2b2lkIFdlYkhUVFBC
b2R5OjphcHBlbmRGaWxlKGNvbnN0IFdlYlN0cmluZyYgZmlsZVBhdGgsIGxvbmcgbG9uZyBmaWxl
U3RhcnQsIGxvbmcgbG9uZyBmaWxlTGVuZ3RoLCBjb25zdCBXZWJGaWxlSW5mbyYgZmlsZUluZm8p
CiB7Ci0gICAgLy8gRklYTUU6IHRvIGJlIGltcGxlbWVudGVkLgorICAgIGVuc3VyZU11dGFibGUo
KTsKKyAgICBtX3ByaXZhdGUtPmFwcGVuZEZpbGUoZmlsZVBhdGgsIGZpbGVTdGFydCwgZmlsZUxl
bmd0aCwgc3RhdGljX2Nhc3Q8dGltZV90PihmaWxlSW5mby5tb2RpZmljYXRpb25UaW1lKSk7CiB9
CiAKIGxvbmcgbG9uZyBXZWJIVFRQQm9keTo6aWRlbnRpZmllcigpIGNvbnN0Cg==
</data>
<flag name="commit-queue"
          id="31129"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48447</attachid>
            <date>2010-02-09 15:27:34 -0800</date>
            <delta_ts>2010-02-10 18:01:18 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>32993_6</filename>
            <type>text/plain</type>
            <size>36231</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiMGFhOTRmLi4xNzQ2NzRiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDIt
MDkgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJsb2Iuc2xpY2Ugc3VwcG9ydC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkzCisKKyAgICAgICAg
QWRkIGEgbGF5b3V0IHRlc3QgdG8gdGVzdCBzbGljaW5nIGFuZCBzZW5kaW5nIGEgZmlsZS4KKwor
ICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQ6
CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZHJhZy1maWxlLXRvLWZpbGUt
aW5wdXQtZWxlbWVudC5qczogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9yZXNv
dXJjZXMvZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2xv
Y2FsL3Jlc291cmNlcy9zZW5kLWRyYWdnZWQtZmlsZS5qczoKKyAgICAgICAgKG9uRmlsZURyb3Ap
OgorICAgICAgICAocnVuVGVzdCk6CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJj
ZXMvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rl
c3RzL2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9s
b2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3Jlc291cmNlcy93cml0ZS10ZW1wLWZpbGUucGhwOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3Bl
cnRpZXMtZXhwZWN0ZWQudHh0OgorCiAyMDEwLTAyLTA5ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8
YWxleEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGll
cy1leHBlY3RlZC50eHQKaW5kZXggZGU1M2MyNy4uYWJhODA5ZSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQu
dHh0CkBAIC0xNDksNiArMTQ5LDcgQEAgd2luZG93LkJlZm9yZUxvYWRFdmVudC5wcm90b3R5cGUu
cHJldmVudERlZmF1bHQgW2Z1bmN0aW9uXQogd2luZG93LkJlZm9yZUxvYWRFdmVudC5wcm90b3R5
cGUuc3RvcFByb3BhZ2F0aW9uIFtmdW5jdGlvbl0KIHdpbmRvdy5CbG9iIFtvYmplY3QgQmxvYkNv
bnN0cnVjdG9yXQogd2luZG93LkJsb2IucHJvdG90eXBlIFtvYmplY3QgQmxvYlByb3RvdHlwZV0K
K3dpbmRvdy5CbG9iLnByb3RvdHlwZS5zbGljZSBbZnVuY3Rpb25dCiB3aW5kb3cuQ0RBVEFTZWN0
aW9uIFtvYmplY3QgQ0RBVEFTZWN0aW9uQ29uc3RydWN0b3JdCiB3aW5kb3cuQ0RBVEFTZWN0aW9u
LnByb3RvdHlwZSBbb2JqZWN0IENEQVRBU2VjdGlvblByb3RvdHlwZV0KIHdpbmRvdy5DREFUQVNl
Y3Rpb24ucHJvdG90eXBlLkFUVFJJQlVURV9OT0RFIFtudW1iZXJdCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9kcmFnLWZpbGUtdG8tZmlsZS1pbnB1
dC1lbGVtZW50LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZHJh
Zy1maWxlLXRvLWZpbGUtaW5wdXQtZWxlbWVudC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jNTFjNjgwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZHJhZy1maWxlLXRvLWZpbGUtaW5wdXQtZWxlbWVudC5qcwpA
QCAtMCwwICsxLDQ2IEBACit2YXIgZmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
aW5wdXQiKTsKK2ZpbGVJbnB1dC50eXBlID0gImZpbGUiOworZmlsZUlucHV0LnN0eWxlLndpZHRo
ID0gIjEwMHB4IjsKK2ZpbGVJbnB1dC5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOworLy8gSW1wb3J0
YW50IHRoYXQgd2UgcHV0IHRoaXMgYXQgdGhlIHRvcCBvZiB0aGUgZG9jIHNvIHRoYXQgbG9nZ2lu
ZyBkb2VzIG5vdCBjYXVzZSBpdCB0byBnbyBvdXQgb2YgdmlldyAod2hlcmUgaXQgY2FuJ3QgYmUg
ZHJhZ2dlZCB0bykKK2RvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGZpbGVJbnB1dCwgZG9jdW1l
bnQuYm9keS5maXJzdENoaWxkKTsKKworZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdl
bnRlciIsIGZ1bmN0aW9uKCkgeworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxz
ZSk7CisKK2ZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIGZ1bmN0aW9uKCkg
eworICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gImNvcHkiOworICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK3ZhciBmaWxlSW5wdXREcm9wQ2FsbGJh
Y2sgPSBudWxsOworZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBmdW5jdGlvbigp
IHsKKyAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluZGV4T2YoIkZpbGVzIikgIT0g
LTEgJiYgZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aCA9PSAxKQorICAgICAgICB0ZXN0
UGFzc2VkKCJldmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9w
LiIpOworICAgIGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJldmVudC5kYXRhVHJhbnNmZXIg
ZG9lcyBub3QgY29udGFpbiBhIEZpbGUgb2JqZWN0IG9uIGRyb3AuIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBmaWxlSW5wdXREcm9wQ2FsbGJhY2soZXZlbnQuZGF0YVRyYW5zZmVy
LmZpbGVzWzBdKTsKKworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisK
K2Z1bmN0aW9uIHNldEZpbGVJbnB1dERyb3BDYWxsYmFjayhmaWxlSW5wdXREcm9wQ2FsbGJhY2tG
dW5jKQoreworICAgIGZpbGVJbnB1dERyb3BDYWxsYmFjayA9IGZpbGVJbnB1dERyb3BDYWxsYmFj
a0Z1bmM7Cit9CisKK2Z1bmN0aW9uIG1vdmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGVsZW1lbnQp
Cit7CisgICAgdmFyIGNlbnRlclggPSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNl
dFdpZHRoIC8gMjsKKyAgICB2YXIgY2VudGVyWSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVu
dC5vZmZzZXRIZWlnaHQgLyAyOworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGNlbnRlclgs
IGNlbnRlclkpOworfQorCitmdW5jdGlvbiByZW1vdmVGaWxlSW5wdXRFbGVtZW50KCkKK3sKKyAg
ICBmaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmaWxlSW5wdXQpCit9CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9maWxlLWZvci1kcmFn
LXRvLXNlbmQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZmls
ZS1mb3ItZHJhZy10by1zZW5kLnR4dAppbmRleCA1YWIyZjhhLi42YTUzN2I1IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9maWxlLWZvci1kcmFnLXRv
LXNlbmQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL2Zp
bGUtZm9yLWRyYWctdG8tc2VuZC50eHQKQEAgLTEgKzEgQEAKLUhlbGxvClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQorMTIzNDU2Nzg5MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtZHJh
Z2dlZC1maWxlLmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2Vu
ZC1kcmFnZ2VkLWZpbGUuanMKaW5kZXggYmVkNDA3OC4uZWZjMTEyNCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanMK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1kcmFnZ2Vk
LWZpbGUuanMKQEAgLTEsNDggKzEsMjEgQEAKIGRlc2NyaXB0aW9uKCJUZXN0IGZvciBzZW5kaW5n
IGEgZHJhZ2dlZCBmaWxlIHZpYSBYTUxIdHRwUmVxdWVzdC4iKTsKIAotdmFyIGZpbGVJbnB1dCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci1maWxlSW5wdXQudHlwZSA9ICJmaWxl
IjsKLWZpbGVJbnB1dC5zdHlsZS53aWR0aCA9ICIxMDBweCI7Ci1maWxlSW5wdXQuc3R5bGUuaGVp
Z2h0ID0gIjEwMHB4IjsKLS8vIEltcG9ydGFudCB0aGF0IHdlIHB1dCB0aGlzIGF0IHRoZSB0b3Ag
b2YgdGhlIGRvYyBzbyB0aGF0IGxvZ2dpbmcgZG9lcyBub3QgY2F1c2UgaXQgdG8gZ28gb3V0IG9m
IHZpZXcgKHdoZXJlIGl0IGNhbid0IGJlIGRyYWdnZWQgdG8pCi1kb2N1bWVudC5ib2R5Lmluc2Vy
dEJlZm9yZShmaWxlSW5wdXQsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7Ci0KLWZpbGVJbnB1
dC5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLCBmdW5jdGlvbigpIHsKLSAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOwotfSwgZmFsc2UpOwotCi1maWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5l
cigiZHJhZ292ZXIiLCBmdW5jdGlvbigpIHsKLSAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVm
ZmVjdCA9ICJjb3B5IjsKLSAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotfSwgZmFsc2UpOwot
Ci1maWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsIGZ1bmN0aW9uKCkgewotICAgIGlm
IChldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5kZXhPZigiRmlsZXMiKSAhPSAtMSAmJiBldmVu
dC5kYXRhVHJhbnNmZXIuZmlsZXMubGVuZ3RoID09IDEpCi0gICAgICAgIHRlc3RQYXNzZWQoImV2
ZW50LmRhdGFUcmFuc2ZlciBjb250YWlucyBhIEZpbGUgb2JqZWN0IG9uIGRyb3AuIik7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoImV2ZW50LmRhdGFUcmFuc2ZlciBkb2VzIG5vdCBj
b250YWluIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQorZnVuY3Rpb24gb25GaWxlRHJvcChmaWxlKQorewogICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0
cFJlcXVlc3QoKTsKICAgICB4aHIub3BlbigiUE9TVCIsICJodHRwOi8vMTI3LjAuMC4xOjgwMDAv
eG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3Bvc3QtZWNoby5jZ2kiLCBmYWxzZSk7Ci0gICAgeGhy
LnNlbmQoZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzWzBdKTsKLSAgICBpZiAoeGhyLnJlc3BvbnNl
VGV4dCA9PSAiSGVsbG8iKQorICAgIHhoci5zZW5kKGZpbGUpOworICAgIGlmICh4aHIucmVzcG9u
c2VUZXh0ID09ICIxMjM0NTY3ODkwIikKICAgICAgICAgdGVzdFBhc3NlZCgiRXhwZWN0ZWQgcmVz
cG9uc2UgZGF0YSByZWNlaXZlZC4iKTsKICAgICBlbHNlCiAgICAgICAgIHRlc3RGYWlsZWQoIlVu
ZXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDogIiArIHhoci5yZXNwb25zZVRleHQpOwog
CiAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLX0sIGZhbHNlKTsKLQotZnVuY3Rpb24gbW92
ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQoZWxlbWVudCkgewotICAgIHZhciBjZW50ZXJYID0gZWxl
bWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVudC5vZmZzZXRXaWR0aCAvIDI7Ci0gICAgdmFyIGNlbnRl
clkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMjsKLSAgICBl
dmVudFNlbmRlci5tb3VzZU1vdmVUbyhjZW50ZXJYLCBjZW50ZXJZKTsKIH0KIAogZnVuY3Rpb24g
cnVuVGVzdCgpCiB7CisgICAgc2V0RmlsZUlucHV0RHJvcENhbGxiYWNrKG9uRmlsZURyb3ApOwog
ICAgIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyhbInJlc291cmNlcy9maWxlLWZvci1k
cmFnLXRvLXNlbmQudHh0Il0pOwogICAgIG1vdmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGZpbGVJ
bnB1dCk7CiAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOwpAQCAtNTEsNyArMjQsNyBAQCBmdW5j
dGlvbiBydW5UZXN0KCkKIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKICAgICBydW5UZXN0KCk7
CiAgICAgLy8gQ2xlYW4gdXAgYWZ0ZXIgb3Vyc2VsdmVzCi0gICAgZmlsZUlucHV0LnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQoZmlsZUlucHV0KTsKKyAgICByZW1vdmVGaWxlSW5wdXRFbGVtZW50KCk7
CiB9IGVsc2UgewogICAgIHRlc3RGYWlsZWQoIlRoaXMgdGVzdCBpcyBub3QgaW50ZXJhY3RpdmUs
IHBsZWFzZSBydW4gdXNpbmcgRHVtcFJlbmRlclRyZWUiKTsKIH0KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmls
ZS5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtc2xpY2Vk
LWRyYWdnZWQtZmlsZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmZk
NTMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNv
dXJjZXMvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmpzCkBAIC0wLDAgKzEsMTgwIEBACitkZXNj
cmlwdGlvbigiVGVzdCBmb3Igc2xpY2luZyBhIGRyYWdnZWQgZmlsZSBhbmQgc2VuZGluZyBpdCB2
aWEgWE1MSHR0cFJlcXVlc3QuIik7CisKK3ZhciBvcmlnaW5hbFRleHQgPSAiMTIzNDU2Nzg5MCI7
Cit2YXIgdXBkYXRlZFRleHQgPSAiQUJDREVGR0hJSiI7Cit2YXIgc2xpY2VTdGFydDsKK3ZhciBz
bGljZUxlbmd0aDsKK3ZhciB0ZW1wRmlsZU5hbWUgPSAic2VuZC1zbGljZS1kcmFnZ2VkLWZpbGUu
dG1wIjsKK3ZhciB0ZW1wRmlsZU9yaWdpbmFsTW9kaWZpY2F0aW9uVGltZTsKK3ZhciBzdWJmaWxl
OworCitmdW5jdGlvbiB1cGxvYWRGaWxlKGZpbGUsIGV4cGVjdGVkVGV4dCwgZXhwZWN0ZWRFeGNl
cHRpb24pCit7CisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5v
cGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJj
ZXMvcG9zdC1lY2hvLmNnaSIsIGZhbHNlKTsKKworICAgIHZhciBwYXNzZWQ7CisgICAgdmFyIG1l
c3NhZ2U7CisgICAgdHJ5IHsKKyAgICAgICAgeGhyLnNlbmQoZmlsZSk7CisgICAgICAgIGlmIChl
eHBlY3RlZEV4Y2VwdGlvbikgeworICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAg
ICAgICBtZXNzYWdlID0gIlVuZXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDogIiArIHho
ci5yZXNwb25zZVRleHQgKyAiLiBFeHBlY3RpbmcgZXhjZXB0aW9uIHRocm93biI7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoeGhyLnJlc3BvbnNlVGV4dCA9PSBleHBlY3RlZFRl
eHQpIHsKKyAgICAgICAgICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSAiRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDogIiArIHhoci5yZXNwb25z
ZVRleHQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAiVW5leHBlY3RlZCByZXNwb25zZSBkYXRh
IHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4dCArICIuIEV4cGVjdGluZzogIiArIGV4cGVj
dGVkVGV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKGV4KSB7Cisg
ICAgICAgIGlmIChleHBlY3RlZEV4Y2VwdGlvbikgeworICAgICAgICAgICAgcGFzc2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiRXhwZWN0ZWQgZXhjZXB0aW9uIHRocm93bjogIiAr
IGV4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAg
ICAgICAgICBtZXNzYWdlID0gIlVuZXhwZWN0ZWQgZXhjZXB0aW9uIHRocm93bjogIiArIGV4Owor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHBhc3NlZCkKKyAgICAgICAgdGVzdFBhc3NlZCht
ZXNzYWdlKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQobWVzc2FnZSk7Cit9CisKK2Z1
bmN0aW9uIGNyZWF0ZU9yVXBkYXRlVGVtcEZpbGUoZmlsZURhdGEpCit7CisgICAgdmFyIHhociA9
IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcu
MC4wLjE6ODAwMC9yZXNvdXJjZXMvd3JpdGUtdGVtcC1maWxlLnBocD9maWxlbmFtZT0iICsgdGVt
cEZpbGVOYW1lICsgIiZkYXRhPSIgKyBmaWxlRGF0YSwgZmFsc2UpOworICAgIHhoci5zZW5kKCk7
CisgICAgaWYgKHhoci5zdGF0dXMgIT0gMjAwKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIlVuZXhw
ZWN0ZWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkOiAiICsgeGhyLnN0YXR1cyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgdmFsdWVzID0geGhyLnJlc3BvbnNlVGV4dC5zcGxp
dCgnXG4nKTsKKyAgICBpZiAodmFsdWVzLmxlbmd0aCA8IDIpIHsKKyAgICAgICAgdGVzdEZhaWxl
ZCgiVW5leHBlY3RlZCByZXNwb25zZSB0ZXh0IHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWVzOworfQorCitm
dW5jdGlvbiByZW1vdmVUZW1wRmlsZSgpCit7CisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVx
dWVzdCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9yZXNv
dXJjZXMvcmVzZXQtdGVtcC1maWxlLnBocD9maWxlbmFtZT0iICsgdGVtcEZpbGVOYW1lLCBmYWxz
ZSk7CisgICAgeGhyLnNlbmQoKTsKK30KKworZnVuY3Rpb24gb25TdGFibGVGaWxlRHJvcChmaWxl
KQoreworICAgIC8vIFNsaWNlIHRoZSBmaWxlLgorICAgIHN1YmZpbGUgPSBmaWxlLnNsaWNlKHNs
aWNlU3RhcnQsIHNsaWNlTGVuZ3RoKTsKKyAgICB2YXIgZXhwZWN0ZWRUZXh0ID0gb3JpZ2luYWxU
ZXh0LnN1YnN0cmluZyhzbGljZVN0YXJ0LCBzbGljZVN0YXJ0ICsgc2xpY2VMZW5ndGgpOworICAg
IHNob3VsZEV2YWx1YXRlVG8oInN1YmZpbGUuc2l6ZSIsIGV4cGVjdGVkVGV4dC5sZW5ndGgpOwor
CisgICAgLy8gVXBsb2FkIHRoZSBzbGljZWQgZmlsZS4KKyAgICB1cGxvYWRGaWxlKHN1YmZpbGUs
IGV4cGVjdGVkVGV4dCwgZmFsc2UpOworfQorCitmdW5jdGlvbiBkcmFnQW5kU2xpY2VTdGFibGVG
aWxlKHN0YXJ0LCBsZW5ndGgpCit7CisgICAgc2xpY2VTdGFydCA9IHN0YXJ0OworICAgIHNsaWNl
TGVuZ3RoID0gbGVuZ3RoOworICAgIHNldEZpbGVJbnB1dERyb3BDYWxsYmFjayhvblN0YWJsZUZp
bGVEcm9wKTsKKyAgICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMoWyJyZXNvdXJjZXMv
ZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dCJdKTsKKyAgICBtb3ZlTW91c2VUb0NlbnRlck9mRWxl
bWVudChmaWxlSW5wdXQpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKK30KKworZnVuY3Rp
b24gb25VbnN0YWJsZUZpbGVEcm9wKGZpbGUpCit7CisgICAgLy8gU2xpY2UgdGhlIGZpbGUuCisg
ICAgc3ViZmlsZSA9IGZpbGUuc2xpY2Uoc2xpY2VTdGFydCwgc2xpY2VMZW5ndGgpOworICAgIHZh
ciBleHBlY3RlZFRleHQgPSBvcmlnaW5hbFRleHQuc3Vic3RyaW5nKHNsaWNlU3RhcnQsIHNsaWNl
U3RhcnQgKyBzbGljZUxlbmd0aCk7CisgICAgc2hvdWxkRXZhbHVhdGVUbygic3ViZmlsZS5zaXpl
IiwgZXhwZWN0ZWRUZXh0Lmxlbmd0aCk7CisgIAorICAgIC8vIFVwbG9hZCB0aGUgc2xpY2VkIGZp
bGUuCisgICAgdXBsb2FkRmlsZShzdWJmaWxlLCBleHBlY3RlZFRleHQsIGZhbHNlKTsKKworICAg
IC8vIFRoZSBmaWxlIG1vZGlmaWNhdGlvbiB0aW1lIGlzIHNlY29uZC1iYXNlZC4gU28gZGVsYXkg
Y2hhbmdpbmcgdGhlIGZpbGUgaW4gb3JkZXIgdG8gZ2V0IHRoZSBuZXcgbW9kaWZpY2F0aW9uIHRp
bWUgZm9yIHRoZSBmaWxlLgorICAgIHNldFRpbWVvdXQoIm9uTW9kaWZ5RmlsZSgpIiwgNTAwKTsK
K30KKworZnVuY3Rpb24gb25Nb2RpZnlGaWxlKCkKK3sKKyAgICAvLyBNb2RpZnkgdGhlIHVuZGVy
bHlpbmcgdGVtcCBmaWxlLgorICAgIHZhciB0ZW1wRmlsZUluZm8gPSBjcmVhdGVPclVwZGF0ZVRl
bXBGaWxlKHVwZGF0ZWRUZXh0KTsKKyAgICBpZiAodGVtcEZpbGVJbmZvLmxlbmd0aCA8IDIpIHsK
KyAgICAgICAgZG9uZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHZhciB0ZW1wRmls
ZUN1cnJlbnRNb2RpZmljYXRpb25UaW1lID0gdGVtcEZpbGVJbmZvWzFdOworCisgICAgLy8gQ2hl
Y2sgdGhlIG5ldyBtb2RpZmljYXRpb24gdGltZSB0byBtYWtlIHN1cmUgaXQgaXMgZGlmZmVyZW50
LiBJZiBub3QsIHJlcGVhdCB0aGUgYWJvdmUgcHJvY2Vzcy4KKyAgICBpZiAodGVtcEZpbGVDdXJy
ZW50TW9kaWZpY2F0aW9uVGltZSA9PSB0ZW1wRmlsZU9yaWdpbmFsTW9kaWZpY2F0aW9uVGltZSkK
KyAgICAgICAgc2V0VGltZW91dCgnb25Nb2RpZnlGaWxlKCknLCA1MDApOworICAgIGVsc2UKKyAg
ICAgICAgc2V0VGltZW91dCgnb25VcGxvYWRNb2RpZmllZEZpbGUoKScsIDApOworfQorCitmdW5j
dGlvbiBvblVwbG9hZE1vZGlmaWVkRmlsZSgpCit7CisgICAgLy8gVXBsb2FkIHRoZSBzbGljZWQg
ZmlsZS4gV2Ugc2hvdWxkIHJlY2VpdmUgYW4gZXhjZXB0aW9uIHNpbmNlIHRoZSBmaWxlIGhhcyBi
ZWVuIGNoYW5nZWQuCisgICAgdXBsb2FkRmlsZShzdWJmaWxlLCBudWxsLCB0cnVlKTsKKworICAg
IC8vIFJlbW92ZSB0aGUgdGVtcCBmaWxlLgorICAgIHJlbW92ZVRlbXBGaWxlKCk7CisKKyAgICBk
b25lKCk7Cit9CisKK2Z1bmN0aW9uIGRyYWdBbmRTbGljZVVuc3RhYmxlRmlsZShzdGFydCwgbGVu
Z3RoKQoreworICAgIHZhciB0ZW1wRmlsZUluZm8gPSBjcmVhdGVPclVwZGF0ZVRlbXBGaWxlKG9y
aWdpbmFsVGV4dCk7CisgICAgaWYgKHRlbXBGaWxlSW5mby5sZW5ndGggPCAyKSB7CisgICAgICAg
IGRvbmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2YXIgdGVtcEZpbGVQYXRoID0g
dGVtcEZpbGVJbmZvWzBdOworICAgIHRlbXBGaWxlT3JpZ2luYWxNb2RpZmljYXRpb25UaW1lID0g
dGVtcEZpbGVJbmZvWzFdOworCisgICAgc2xpY2VTdGFydCA9IHN0YXJ0OworICAgIHNsaWNlTGVu
Z3RoID0gbGVuZ3RoOworICAgIHNldEZpbGVJbnB1dERyb3BDYWxsYmFjayhvblVuc3RhYmxlRmls
ZURyb3ApOworICAgIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyhbdGVtcEZpbGVQYXRo
XSk7CisgICAgbW92ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQoZmlsZUlucHV0KTsKKyAgICBldmVu
dFNlbmRlci5tb3VzZVVwKCk7Cit9CisKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIHdpbmRvdy5z
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBk
cmFnQW5kU2xpY2VTdGFibGVGaWxlKDIsIDQpOworICAgIGRyYWdBbmRTbGljZVN0YWJsZUZpbGUo
MiwgMjApOworICAgIGRyYWdBbmRTbGljZVN0YWJsZUZpbGUoMTUsIDIwKTsKKworICAgIGRyYWdB
bmRTbGljZVVuc3RhYmxlRmlsZSgzLCA1KTsKK30KKworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikg
eworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworICAgIHJ1blRl
c3QoKTsKKyAgICAvLyBDbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMKKyAgICByZW1vdmVGaWxlSW5w
dXRFbGVtZW50KCk7Cit9IGVsc2UgeworICAgIHRlc3RGYWlsZWQoIlRoaXMgdGVzdCBpcyBub3Qg
aW50ZXJhY3RpdmUsIHBsZWFzZSBydW4gdXNpbmcgRHVtcFJlbmRlclRyZWUiKTsKK30KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFnZ2VkLWZpbGUuaHRt
bCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFnZ2VkLWZpbGUuaHRtbApp
bmRleCAzZjIyMTBhLi5lMGM0YjA1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1sCkBAIC03LDYgKzcsNyBAQAogPGJvZHk+CiA8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy9kcmFnLWZpbGUtdG8tZmlsZS1pbnB1dC1lbGVtZW50LmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+CiA8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2MDc5MQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dl
ZC1maWxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIyIEBACitUZXN0IGZvciBzbGljaW5nIGEg
ZHJhZ2dlZCBmaWxlIGFuZCBzZW5kaW5nIGl0IHZpYSBYTUxIdHRwUmVxdWVzdC4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZXZlbnQuZGF0YVRyYW5zZmVyIGNvbnRhaW5z
IGEgRmlsZSBvYmplY3Qgb24gZHJvcC4KK1BBU1Mgc3ViZmlsZS5zaXplIGlzIDQKK1BBU1MgRXhw
ZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDogMzQ1NgorUEFTUyBldmVudC5kYXRhVHJhbnNm
ZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLgorUEFTUyBzdWJmaWxlLnNpemUgaXMg
OAorUEFTUyBFeHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAzNDU2Nzg5MAorUEFTUyBl
dmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLgorUEFTUyBz
dWJmaWxlLnNpemUgaXMgMAorUEFTUyBFeHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAK
K1BBU1MgZXZlbnQuZGF0YVRyYW5zZmVyIGNvbnRhaW5zIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4K
K1BBU1Mgc3ViZmlsZS5zaXplIGlzIDUKK1BBU1MgRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNl
aXZlZDogNDU2NzgKK1BBU1MgRXhwZWN0ZWQgZXhjZXB0aW9uIHRocm93bjogRXJyb3I6IE5FVFdP
UktfRVJSOiBYTUxIdHRwUmVxdWVzdCBFeGNlcHRpb24gMTAxCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbCBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3MzU3MAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0
bWwKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZHJhZy1maWxlLXRvLWZpbGUtaW5w
dXQtZWxlbWVudC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NlbmQtc2xp
Y2VkLWRyYWdnZWQtZmlsZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2Vz
L3dyaXRlLXRlbXAtZmlsZS5waHAgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNlcy93
cml0ZS10ZW1wLWZpbGUucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZm
ZTJjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Jlc291cmNl
cy93cml0ZS10ZW1wLWZpbGUucGhwCkBAIC0wLDAgKzEsMjAgQEAKKzw/cGhwCityZXF1aXJlX29u
Y2UgJ3BvcnRhYmlsaXR5TGF5ZXIucGhwJzsKKworaWYgKCFzeXNfZ2V0X3RlbXBfZGlyKCkpIHsK
KyAgICBlY2hvICJGQUlMOiBObyB0ZW1wIGRpciB3YXMgcmV0dXJuZWQuXG4iOworICAgIGV4aXQo
KTsKK30KKworJHRtcEZpbGUgPSBzeXNfZ2V0X3RlbXBfZGlyKCkgLiAiLyIgLiAkX0dFVFsnZmls
ZW5hbWUnXTsKKworaWYgKCFmaWxlX3B1dF9jb250ZW50cygkdG1wRmlsZSwgJF9HRVRbJ2RhdGEn
XSkpIHsKKyAgICBlY2hvICJGQUlMOiB1bmFibGUgdG8gd3JpdGUgdG8gZmlsZTogIiAuICR0bXBG
aWxlIC4gIlxuIjsKKyAgICBleGl0KCk7Cit9CisKKyRzdGF0ID0gc3RhdCgkdG1wRmlsZSk7CisK
K2VjaG8gJHRtcEZpbGUgLiAiXG4iOworZWNobyAkc3RhdFsnbXRpbWUnXTsKKz8+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3Bl
cnRpZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAppbmRleCBmN2NhODZiLi4yMWNkZGE4
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2RvbS9XaW5kb3cvd2lu
ZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0
L2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKQEAgLTE0OSw2
ICsxNDksNyBAQCB3aW5kb3cuQmVmb3JlTG9hZEV2ZW50LnByb3RvdHlwZS5wcmV2ZW50RGVmYXVs
dCBbZnVuY3Rpb25dCiB3aW5kb3cuQmVmb3JlTG9hZEV2ZW50LnByb3RvdHlwZS5zdG9wUHJvcGFn
YXRpb24gW2Z1bmN0aW9uXQogd2luZG93LkJsb2IgW29iamVjdCBCbG9iQ29uc3RydWN0b3JdCiB3
aW5kb3cuQmxvYi5wcm90b3R5cGUgW29iamVjdCBCbG9iUHJvdG90eXBlXQord2luZG93LkJsb2Iu
cHJvdG90eXBlLnNsaWNlIFtmdW5jdGlvbl0KIHdpbmRvdy5DREFUQVNlY3Rpb24gW29iamVjdCBD
REFUQVNlY3Rpb25Db25zdHJ1Y3Rvcl0KIHdpbmRvdy5DREFUQVNlY3Rpb24ucHJvdG90eXBlIFtv
YmplY3QgQ0RBVEFTZWN0aW9uUHJvdG90eXBlXQogd2luZG93LkNEQVRBU2VjdGlvbi5wcm90b3R5
cGUuQVRUUklCVVRFX05PREUgW251bWJlcl0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDljZjU3OC4uMDE1MDY0NiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBA
QAorMjAxMC0wMi0wOSAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQmxvYi5zbGljZSBzdXBwb3J0
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI5OTMK
KworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmls
ZS5odG1sCisKKyAgICAgICAgVGhlIGZvbGxvd2luZyBzZW1hbnRpYyBpcyBhZG9wdGVkIHBlciB0
aGUgZGlzY3Vzc2lvbnMgb24gcHVibGljLXdlYmFwcHM6CisgICAgICAgIDEpIEZpbGUuc2xpY2Uo
KSBkb2VzIGEgc3luY2hyb25vdXMgSU8gdG8gY2FwdHVyZXMgdGhlIGN1cnJlbnQgc2l6ZSBhbmQK
KyAgICAgICAgICAgbW9kaWZpY2F0aW9uIHRpbWUgYW5kIGNhY2hlIHRoZW0gaW4gdGhlIHJlc3Vs
dGluZyBCbG9iLgorICAgICAgICAyKSBTdWJzZXF1ZW50IEJsb2Igb3BlcmF0aW9ucywgbGlrZSBC
bG9iLnNsaWNlIGFuZCBCbG9iLnNpemUgc2ltcGx5CisgICAgICAgICAgIHVzZSB0aGUgY2FjaGVk
IHZhbHVlcy4KKyAgICAgICAgMykgV2hlbiB0aGUgdW5kZXJseWluZyBmaWxlIGRhdGEgYXJlIGFj
Y2Vzc2VkLCBsaWtlIGluIFhIUi5zZW5kKCksIHRoZQorICAgICAgICAgICBVQSB3aWxsIGNoZWNr
IHRoZSBjYWNoZWQgbW9kaWZpY2F0aW9uIHRpbWUgYWdhaW5zdCB0aGUgY3VycmVudAorICAgICAg
ICAgICBtb2RpZmljYXRpb24gdGltZSB0byBkZXRlcm1pbmUgaWYgdGhlIGZpbGUgaGFzIGJlZW4g
Y2hhbmdlZCBvciBub3QuCisgICAgICAgICAgIEFuIGVycm9yIG9yIGV4Y2VwdGlvbiB3aWxsIGJl
IHRocm93biBpZiBuZWVkZWQuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9sb2NhbC9zZW5k
LXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbAorCisgICAgICAgICogaHRtbC9CbG9iLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6c2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpnZXRGaWxlU2l6ZUhlbHBlcik6CisgICAgICAg
IChXZWJDb3JlOjpCbG9iOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGltZUhlbHBlcik6CisgICAgICAg
IChXZWJDb3JlOjpCbG9iOjpzbGljZSk6CisgICAgICAgICogaHRtbC9CbG9iLmg6CisgICAgICAg
IChXZWJDb3JlOjpCbG9iOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpsZW5ndGgp
OgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6bW9kaWZpY2F0aW9uVGltZSk6CisgICAgICAgICog
aHRtbC9CbG9iLmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZUZvcm1EYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhOjpkZWVwQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZSk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9ybURhdGFFbGVtZW50OjpGb3JtRGF0YUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJl
YW1NYWMubW06CisgICAgICAgIChXZWJDb3JlOjphZHZhbmNlQ3VycmVudFN0cmVhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVuTmV4dFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpmb3JtQ3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1PcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OmZv
cm1SZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEhUVFBCb2R5KToKKyAgICAgICAgKiB4bWwv
WE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNl
bmQpOgorCiAyMDEwLTAyLTA5ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0Jsb2IuY3BwIGIvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCmluZGV4IDBiNjc3ZWEuLmFj
ZjYxNDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmNwcAorKysgYi9XZWJDb3JlL2h0
bWwvQmxvYi5jcHAKQEAgLTM3LDE3ICszNyw3MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEJs
b2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIDogbV9wYXRoKHBhdGgpCisgICAgLCBt
X3N0YXJ0KDApCisgICAgLCBtX2xlbmd0aCgtMSkKKyAgICAsIG1fc25hcHNob3RTaXplKC0xKQor
ICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoMCkKK3sKK30KKworQmxvYjo6QmxvYihj
b25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgbG9u
ZyBsb25nIHNuYXBzaG90U2l6ZSwgdGltZV90IHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKKyAg
ICA6IG1fcGF0aChwYXRoKQorICAgICwgbV9zdGFydChzdGFydCkKKyAgICAsIG1fbGVuZ3RoKGxl
bmd0aCkKKyAgICAsIG1fc25hcHNob3RTaXplKHNuYXBzaG90U2l6ZSkKKyAgICAsIG1fc25hcHNo
b3RNb2RpZmljYXRpb25UaW1lKHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKIHsKIH0KIAogdW5z
aWduZWQgbG9uZyBsb25nIEJsb2I6OnNpemUoKSBjb25zdAogeworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KChtX3NuYXBzaG90U2l6ZSA9PSAtMSkgPyBnZXRGaWxl
U2l6ZUhlbHBlcigpIDogbV9sZW5ndGgpOyAKK30KKworbG9uZyBsb25nIEJsb2I6OmdldEZpbGVT
aXplSGVscGVyKCkgY29uc3QKK3sKICAgICAvLyBGSVhNRTogSmF2YVNjcmlwdCBjYW5ub3QgcmVw
cmVzZW50IHNpemVzIGFzIGxhcmdlIGFzIHVuc2lnbmVkIGxvbmcgbG9uZywgd2UgbmVlZCB0bwog
ICAgIC8vIGNvbWUgdXAgd2l0aCBhbiBleGNlcHRpb24gdG8gdGhyb3cgaWYgZmlsZSBzaXplIGlz
IG5vdCByZXByZXNldGFibGUuCiAgICAgbG9uZyBsb25nIHNpemU7CiAgICAgaWYgKCFnZXRGaWxl
U2l6ZShtX3BhdGgsIHNpemUpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplKTsKKyAgICByZXR1cm4gc2l6ZTsKK30KKwor
dGltZV90IEJsb2I6OmdldEZpbGVNb2RpZmljYXRpb25UaW1lSGVscGVyKCkgY29uc3QKK3sKKyAg
ICB0aW1lX3QgbW9kaWZpY2F0aW9uVGltZTsKKyAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25U
aW1lKG1fcGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBtb2RpZmljYXRpb25UaW1lOworfQorCitQYXNzUmVmUHRyPEJsb2I+IEJsb2I6OnNsaWNl
KGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkgY29uc3QKK3sKKyAgICAvLyBXaGVu
IHdlIHNsaWNlIGEgZmlsZSBmb3IgdGhlIGZpcnN0IHRpbWUsIHdlIG9idGFpbiBhIHNuYXBzaG90
IG9mIHRoZSBmaWxlIGJ5IGNhcHR1cmluZyBpdHMgY3VycmVudCBzaXplIGFuZCBtb2RpZmljYXRp
b24gdGltZS4KKyAgICAvLyBUaGUgbW9kaWZpY2F0aW9uIHRpbWUgd2lsbCBiZSB1c2VkIHRvIHZl
cmlmeSBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIG9yIG5vdCwgd2hlbiB0aGUgdW5kZXJs
eWluZyBkYXRhIGFyZSBhY2Nlc3NlZC4KKyAgICBsb25nIGxvbmcgc25hcHNob3RTaXplOworICAg
IHRpbWVfdCBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7CisgICAgaWYgKG1fc25hcHNob3RTaXpl
ID09IC0xKSB7CisgICAgICAgIHNuYXBzaG90U2l6ZSA9IGdldEZpbGVTaXplSGVscGVyKCk7Cisg
ICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IGdldEZpbGVNb2RpZmljYXRpb25UaW1l
SGVscGVyKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc25hcHNob3RTaXplID0gbV9zbmFwc2hv
dFNpemU7CisgICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IG1fc25hcHNob3RNb2Rp
ZmljYXRpb25UaW1lOworICAgIH0KKworICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBpdCBleGNl
ZWRzIHRoZSBzaXplIGxpbWl0LgorICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHN0YXJ0ID0g
MDsKKyAgICBpZiAobGVuZ3RoIDwgMCkKKyAgICAgICAgbGVuZ3RoID0gMDsKKworICAgIGlmIChz
dGFydCA+IHNuYXBzaG90U2l6ZSkgeworICAgICAgICBzdGFydCA9IDA7CisgICAgICAgIGxlbmd0
aCA9IDA7CisgICAgfSBlbHNlIGlmIChzdGFydCArIGxlbmd0aCA+IHNuYXBzaG90U2l6ZSkKKyAg
ICAgICAgbGVuZ3RoID0gc25hcHNob3RTaXplIC0gc3RhcnQ7CisKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEJsb2IobV9wYXRoLCBtX3N0YXJ0ICsgc3RhcnQsIGxlbmd0aCwgc25hcHNob3RTaXpl
LCBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2IuaCBiL1dlYkNvcmUvaHRtbC9CbG9iLmgK
aW5kZXggYjkxMGU4Zi4uMTU5YjIxMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuaAor
KysgYi9XZWJDb3JlL2h0bWwvQmxvYi5oCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx0
aW1lLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogCkBAIC00NywxNCArNDgsMjggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+Qmxv
YigpIHsgfQogCisgICAgUGFzc1JlZlB0cjxCbG9iPiBzbGljZShsb25nIGxvbmcgc3RhcnQsIGxv
bmcgbG9uZyBsZW5ndGgpIGNvbnN0OworCiAgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXRoOyB9CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdDsK
KyAgICBsb25nIGxvbmcgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgbG9u
ZyBsb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgdGltZV90IG1v
ZGlmaWNhdGlvblRpbWUoKSBjb25zdCB7IHJldHVybiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgQmxvYihjb25zdCBTdHJpbmcmIHBhdGgpOwogCiBwcml2
YXRlOgorICAgIEJsb2IoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcg
bG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNpemUsIHRpbWVfdCBzbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWUpOworCisgICAgbG9uZyBsb25nIGdldEZpbGVTaXplSGVscGVyKCkgY29uc3Q7
CisgICAgdGltZV90IGdldEZpbGVNb2RpZmljYXRpb25UaW1lSGVscGVyKCkgY29uc3Q7CisKICAg
ICBTdHJpbmcgbV9wYXRoOworICAgIGxvbmcgbG9uZyBtX3N0YXJ0OworICAgIGxvbmcgbG9uZyBt
X2xlbmd0aDsKKyAgICBsb25nIGxvbmcgbV9zbmFwc2hvdFNpemU7CisgICAgdGltZV90IG1fc25h
cHNob3RNb2RpZmljYXRpb25UaW1lOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2IuaWRsIGIvV2ViQ29yZS9odG1sL0Jsb2IuaWRsCmlu
ZGV4IDU3M2JlMzUuLjgzNjRlYWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmlkbAor
KysgYi9XZWJDb3JlL2h0bWwvQmxvYi5pZGwKQEAgLTMyLDYgKzMyLDcgQEAgbW9kdWxlIGh0bWwg
ewogCiAgICAgaW50ZXJmYWNlIEJsb2IgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5z
aWduZWQgbG9uZyBsb25nIHNpemU7CisgICAgICAgIEJsb2Igc2xpY2UoaW4gbG9uZyBsb25nIHN0
YXJ0LCBpbiBsb25nIGxvbmcgbGVuZ3RoKTsKICAgICB9OwogCiB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuY3BwCmluZGV4IDJmODg4OTQuLmZjNTM4YWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3Bw
CkBAIC0yNjYsNyArMjY2LDcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gSFRNTEZvcm1FbGVtZW50
OjpjcmVhdGVGb3JtRGF0YShjb25zdCBDU3RyaW5nJiBib3VuZGFyeSkKICAgICAgICAgICAgICAg
ICAgICAgaWYgKHNpemVfdCBkYXRhU2l6ZSA9IHZhbHVlLmRhdGEoKS5sZW5ndGgoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRGF0YSh2YWx1ZS5kYXRhKCkuZGF0YSgp
LCBkYXRhU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmZpbGUoKSAm
JiAhdmFsdWUuZmlsZSgpLT5wYXRoKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LT5hcHBlbmRGaWxlKHZhbHVlLmZpbGUoKS0+cGF0aCgpLCBzaG91bGRHZW5lcmF0
ZUZpbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmRGaWxlKHZhbHVl
LmZpbGUoKS0+cGF0aCgpLCAwLCAtMSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKIAogICAgICAgICAg
ICAgICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEoIlxyXG4iLCAyKTsKICAgICAgICAgICAgICAg
ICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAppbmRleCBhZjNiN2YwLi5kZDA0
ZTE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKQEAgLTEwOCw3ICsxMDgs
NyBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6ZGVlcENvcHkoKSBjb25zdAogICAg
ICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1f
ZGF0YSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRm9ybURhdGFFbGVtZW50
OjplbmNvZGVkRmlsZToKLSAgICAgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChG
b3JtRGF0YUVsZW1lbnQoZS5tX2ZpbGVuYW1lLCBlLm1fc2hvdWxkR2VuZXJhdGVGaWxlKSk7Cisg
ICAgICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUu
bV9maWxlbmFtZSwgZS5tX2ZpbGVTdGFydCwgZS5tX2ZpbGVMZW5ndGgsIGUubV9maWxlTW9kaWZp
Y2F0aW9uVGltZSwgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjUsOSArMTI1LDkgQEAgdm9pZCBGb3JtRGF0YTo6YXBw
ZW5kRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKICAgICBtZW1jcHkoZS5tX2Rh
dGEuZGF0YSgpICsgb2xkU2l6ZSwgZGF0YSwgc2l6ZSk7CiB9CiAKLXZvaWQgRm9ybURhdGE6OmFw
cGVuZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUp
Cit2b2lkIEZvcm1EYXRhOjphcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcg
bG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgdGltZV90IG1vZGlmaWNhdGlvblRpbWUsIGJv
b2wgc2hvdWxkR2VuZXJhdGVGaWxlKQogewotICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRh
RWxlbWVudChmaWxlbmFtZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CisgICAgbV9lbGVtZW50cy5h
cHBlbmQoRm9ybURhdGFFbGVtZW50KGZpbGVuYW1lLCBzdGFydCwgbGVuZ3RoLCBtb2RpZmljYXRp
b25UaW1lLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKIH0KIAogdm9pZCBGb3JtRGF0YTo6ZmxhdHRl
bihWZWN0b3I8Y2hhcj4mIGRhdGEpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5o
CmluZGV4IDcyNzhmMmUuLmFhNWRlYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9Gb3JtRGF0YS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5o
CkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIEZvcm1EYXRhX2gKIAogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zMiwxMSArMzMsMTQgQEAgY2xhc3Mg
Rm9ybURhdGFFbGVtZW50IHsKIHB1YmxpYzoKICAgICBGb3JtRGF0YUVsZW1lbnQoKSA6IG1fdHlw
ZShkYXRhKSB7IH0KICAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgVmVjdG9yPGNoYXI+JiBhcnJh
eSkgOiBtX3R5cGUoZGF0YSksIG1fZGF0YShhcnJheSkgeyB9Ci0gICAgRm9ybURhdGFFbGVtZW50
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKSA6IG1fdHlw
ZShlbmNvZGVkRmlsZSksIG1fZmlsZW5hbWUoZmlsZW5hbWUpLCBtX3Nob3VsZEdlbmVyYXRlRmls
ZShzaG91bGRHZW5lcmF0ZUZpbGUpIHsgfQorICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBTdHJp
bmcmIGZpbGVuYW1lLCBpbnQ2NF90IGZpbGVTdGFydCwgaW50NjRfdCBmaWxlTGVuZ3RoLCB0aW1l
X3QgZmlsZU1vZGlmaWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKSA6IG1fdHlw
ZShlbmNvZGVkRmlsZSksIG1fZmlsZW5hbWUoZmlsZW5hbWUpLCBtX2ZpbGVTdGFydChmaWxlU3Rh
cnQpLCBtX2ZpbGVMZW5ndGgoZmlsZUxlbmd0aCksIG1fZmlsZU1vZGlmaWNhdGlvblRpbWUoZmls
ZU1vZGlmaWNhdGlvblRpbWUpLCBtX3Nob3VsZEdlbmVyYXRlRmlsZShzaG91bGRHZW5lcmF0ZUZp
bGUpIHsgfQogCiAgICAgZW51bSB7IGRhdGEsIGVuY29kZWRGaWxlIH0gbV90eXBlOwogICAgIFZl
Y3RvcjxjaGFyPiBtX2RhdGE7CiAgICAgU3RyaW5nIG1fZmlsZW5hbWU7CisgICAgaW50NjRfdCBt
X2ZpbGVTdGFydDsKKyAgICBpbnQ2NF90IG1fZmlsZUxlbmd0aDsKKyAgICB0aW1lX3QgbV9maWxl
TW9kaWZpY2F0aW9uVGltZTsKICAgICBTdHJpbmcgbV9nZW5lcmF0ZWRGaWxlbmFtZTsKICAgICBi
b29sIG1fc2hvdWxkR2VuZXJhdGVGaWxlOwogfTsKQEAgLTUwLDcgKzU0LDcgQEAgaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGEsIGNvbnN0IEZvcm1EYXRhRWxl
bWVudCYgYikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChhLm1fZGF0YSAhPSBiLm1f
ZGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhLm1fZmlsZW5hbWUgIT0gYi5t
X2ZpbGVuYW1lKQorICAgIGlmIChhLm1fZmlsZW5hbWUgIT0gYi5tX2ZpbGVuYW1lIHx8IGEubV9m
aWxlU3RhcnQgIT0gYi5tX2ZpbGVTdGFydCB8fCBhLm1fZmlsZUxlbmd0aCAhPSBiLm1fZmlsZUxl
bmd0aCB8fCBhLm1fZmlsZU1vZGlmaWNhdGlvblRpbWUgIT0gYi5tX2ZpbGVNb2RpZmljYXRpb25U
aW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTcyLDcg
Kzc2LDcgQEAgcHVibGljOgogICAgIH5Gb3JtRGF0YSgpOwogICAgIAogICAgIHZvaWQgYXBwZW5k
RGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpOwotICAgIHZvaWQgYXBwZW5kRmlsZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlKTsKKyAg
ICB2b2lkIGFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIHN0YXJ0
LCBsb25nIGxvbmcgbGVuZ3RoLCB0aW1lX3QgbW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91bGRH
ZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CiAKICAgICB2b2lkIGZsYXR0ZW4oVmVjdG9yPGNoYXI+Jikg
Y29uc3Q7IC8vIG9taXRzIGZpbGVzCiAgICAgU3RyaW5nIGZsYXR0ZW5Ub1N0cmluZygpIGNvbnN0
OyAvLyBvbWl0cyBmaWxlcwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21h
Yy9Gb3JtRGF0YVN0cmVhbU1hYy5tbSBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9y
bURhdGFTdHJlYW1NYWMubW0KaW5kZXggOGFhOWE2ZC4uNGI1YTAwMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCkBAIC0xMjUsNiAr
MTI1LDcgQEAgc3RydWN0IEZvcm1TdHJlYW1GaWVsZHMgewogICAgIFNjaGVkdWxlUGFpckhhc2hT
ZXQgc2NoZWR1bGVkUnVuTG9vcFBhaXJzOwogICAgIFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+IHJl
bWFpbmluZ0VsZW1lbnRzOyAvLyBpbiByZXZlcnNlIG9yZGVyCiAgICAgQ0ZSZWFkU3RyZWFtUmVm
IGN1cnJlbnRTdHJlYW07CisgICAgbG9uZyBsb25nIGN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aDsK
ICAgICBjaGFyKiBjdXJyZW50RGF0YTsKICAgICBDRlJlYWRTdHJlYW1SZWYgZm9ybVN0cmVhbTsK
ICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc3RyZWFtTGVuZ3RoOwpAQCAtMTQ1LDEyICsxNDYsMTIg
QEAgc3RhdGljIHZvaWQgY2xvc2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0p
CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBhZHZhbmNlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFt
RmllbGRzICpmb3JtKQorc3RhdGljIGJvb2wgYWR2YW5jZUN1cnJlbnRTdHJlYW0oRm9ybVN0cmVh
bUZpZWxkcyAqZm9ybSkKIHsKICAgICBjbG9zZUN1cnJlbnRTdHJlYW0oZm9ybSk7CiAKICAgICBp
ZiAoZm9ybS0+cmVtYWluaW5nRWxlbWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBuZXcgc3RyZWFtLgogICAg
IEZvcm1EYXRhRWxlbWVudCYgbmV4dElucHV0ID0gZm9ybS0+cmVtYWluaW5nRWxlbWVudHMubGFz
dCgpOwpAQCAtMTYwLDEwICsxNjEsMjEgQEAgc3RhdGljIHZvaWQgYWR2YW5jZUN1cnJlbnRTdHJl
YW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbSA9
IENGUmVhZFN0cmVhbUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCByZWludGVycHJldF9jYXN0PGNv
bnN0IFVJbnQ4Kj4oZGF0YSksIHNpemUsIGtDRkFsbG9jYXRvck51bGwpOwogICAgICAgICBmb3Jt
LT5jdXJyZW50RGF0YSA9IGRhdGE7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG5leHRJbnB1
dC5tX2ZpbGVNb2RpZmljYXRpb25UaW1lKSB7CisgICAgICAgICAgICB0aW1lX3QgbW9kaWZpY2F0
aW9uVGltZTsKKyAgICAgICAgICAgIGlmIChnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShuZXh0SW5w
dXQubV9maWxlbmFtZSwgbW9kaWZpY2F0aW9uVGltZSkgJiYgbW9kaWZpY2F0aW9uVGltZSAhPSBu
ZXh0SW5wdXQubV9maWxlTW9kaWZpY2F0aW9uVGltZSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKwogICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBuZXh0SW5w
dXQubV9zaG91bGRHZW5lcmF0ZUZpbGUgPyBuZXh0SW5wdXQubV9nZW5lcmF0ZWRGaWxlbmFtZSA6
IG5leHRJbnB1dC5tX2ZpbGVuYW1lOwogICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZp
bGVuYW1lKEFkb3B0Q0YsIHBhdGguY3JlYXRlQ0ZTdHJpbmcoKSk7CiAgICAgICAgIFJldGFpblB0
cjxDRlVSTFJlZj4gZmlsZVVSTChBZG9wdENGLCBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0
aCgwLCBmaWxlbmFtZS5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIEZBTFNFKSk7CiAgICAg
ICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBDRlJlYWRTdHJlYW1DcmVhdGVXaXRoRmlsZSgwLCBm
aWxlVVJMLmdldCgpKTsKKyAgICAgICAgaWYgKG5leHRJbnB1dC5tX2ZpbGVTdGFydCA+IDApIHsK
KyAgICAgICAgICAgIENGTnVtYmVyUmVmIHBvc2l0aW9uID0gQ0ZOdW1iZXJDcmVhdGUoMCwga0NG
TnVtYmVyTG9uZ0xvbmdUeXBlLCAmbmV4dElucHV0Lm1fZmlsZVN0YXJ0KTsKKyAgICAgICAgICAg
IENGUmVhZFN0cmVhbVNldFByb3BlcnR5KGZvcm0tPmN1cnJlbnRTdHJlYW0sIGtDRlN0cmVhbVBy
b3BlcnR5RmlsZUN1cnJlbnRPZmZzZXQsIHBvc2l0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBm
b3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBuZXh0SW5wdXQubV9maWxlTGVuZ3RoOwog
ICAgIH0KICAgICBmb3JtLT5yZW1haW5pbmdFbGVtZW50cy5yZW1vdmVMYXN0KCk7CiAKQEAgLTE3
NiwxNiArMTg4LDE5IEBAIHN0YXRpYyB2b2lkIGFkdmFuY2VDdXJyZW50U3RyZWFtKEZvcm1TdHJl
YW1GaWVsZHMgKmZvcm0pCiAgICAgU2NoZWR1bGVQYWlySGFzaFNldDo6aXRlcmF0b3IgZW5kID0g
Zm9ybS0+c2NoZWR1bGVkUnVuTG9vcFBhaXJzLmVuZCgpOwogICAgIGZvciAoU2NoZWR1bGVQYWly
SGFzaFNldDo6aXRlcmF0b3IgaXQgPSBmb3JtLT5zY2hlZHVsZWRSdW5Mb29wUGFpcnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICBDRlJlYWRTdHJlYW1TY2hlZHVsZVdpdGhSdW5M
b29wKGZvcm0tPmN1cnJlbnRTdHJlYW0sICgqaXQpLT5ydW5Mb29wKCksICgqaXQpLT5tb2RlKCkp
OworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIG9wZW5OZXh0U3RyZWFtKEZv
cm1TdHJlYW1GaWVsZHMqIGZvcm0pCitzdGF0aWMgYm9vbCBvcGVuTmV4dFN0cmVhbShGb3JtU3Ry
ZWFtRmllbGRzKiBmb3JtKQogewogICAgIC8vIFNraXAgb3ZlciBhbnkgc3RyZWFtcyB3ZSBjYW4n
dCBvcGVuLgotICAgIC8vIEZvciBzb21lIHB1cnBvc2VzIHdlIG1pZ2h0IHdhbnQgdG8gcmV0dXJu
IGFuIGVycm9yLCBidXQgdGhlIGN1cnJlbnQgTlNVUkxDb25uZWN0aW9uCi0gICAgLy8gY2FuJ3Qg
cmVhbGx5IGRvIGFueXRoaW5nIHVzZWZ1bCB3aXRoIGFuIGVycm9yIGF0IHRoaXMgcG9pbnQsIHNv
IHRoaXMgaXMgYmV0dGVyLgotICAgIGFkdmFuY2VDdXJyZW50U3RyZWFtKGZvcm0pOworICAgIGlm
ICghYWR2YW5jZUN1cnJlbnRTdHJlYW0oZm9ybSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB3aGlsZSAoZm9ybS0+Y3VycmVudFN0cmVhbSAmJiAhQ0ZSZWFkU3RyZWFtT3Blbihmb3JtLT5j
dXJyZW50U3RyZWFtKSkKLSAgICAgICAgYWR2YW5jZUN1cnJlbnRTdHJlYW0oZm9ybSk7CisgICAg
ICAgIGlmICghYWR2YW5jZUN1cnJlbnRTdHJlYW0oZm9ybSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyB2b2lkKiBmb3JtQ3JlYXRlKENG
UmVhZFN0cmVhbVJlZiBzdHJlYW0sIHZvaWQqIGNvbnRleHQpCkBAIC0xOTQsNiArMjA5LDcgQEAg
c3RhdGljIHZvaWQqIGZvcm1DcmVhdGUoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgdm9pZCogY29u
dGV4dCkKIAogICAgIEZvcm1TdHJlYW1GaWVsZHMqIG5ld0luZm8gPSBuZXcgRm9ybVN0cmVhbUZp
ZWxkczsKICAgICBuZXdJbmZvLT5jdXJyZW50U3RyZWFtID0gTlVMTDsKKyAgICBuZXdJbmZvLT5j
dXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSAtMTsKICAgICBuZXdJbmZvLT5jdXJyZW50RGF0YSA9
IDA7CiAgICAgbmV3SW5mby0+Zm9ybVN0cmVhbSA9IHN0cmVhbTsgLy8gRG9uJ3QgcmV0YWluLiBU
aGF0IHdvdWxkIGNyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZS4KICAgICBuZXdJbmZvLT5zdHJlYW1M
ZW5ndGggPSBmb3JtQ29udGV4dC0+c3RyZWFtTGVuZ3RoOwpAQCAtMjI2LDExICsyNDIsMTEgQEAg
c3RhdGljIEJvb2xlYW4gZm9ybU9wZW4oQ0ZSZWFkU3RyZWFtUmVmLCBDRlN0cmVhbUVycm9yKiBl
cnJvciwgQm9vbGVhbiogb3BlbkNvbXAKIHsKICAgICBGb3JtU3RyZWFtRmllbGRzKiBmb3JtID0g
c3RhdGljX2Nhc3Q8Rm9ybVN0cmVhbUZpZWxkcyo+KGNvbnRleHQpOwogCi0gICAgb3Blbk5leHRT
dHJlYW0oZm9ybSk7CisgICAgYm9vbCBvcGVuZWQgPSBvcGVuTmV4dFN0cmVhbShmb3JtKTsKIAot
ICAgICpvcGVuQ29tcGxldGUgPSBUUlVFOwotICAgIGVycm9yLT5lcnJvciA9IDA7Ci0gICAgcmV0
dXJuIFRSVUU7CisgICAgKm9wZW5Db21wbGV0ZSA9IG9wZW5lZDsKKyAgICBlcnJvci0+ZXJyb3Ig
PSBvcGVuZWQgPyAwIDogZm5PcG5FcnI7CisgICAgcmV0dXJuIG9wZW5lZDsKIH0KIAogc3RhdGlj
IENGSW5kZXggZm9ybVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZlciwg
Q0ZJbmRleCBidWZmZXJMZW5ndGgsIENGU3RyZWFtRXJyb3IqIGVycm9yLCBCb29sZWFuKiBhdEVP
Riwgdm9pZCogY29udGV4dCkKQEAgLTIzOCw3ICsyNTQsMTAgQEAgc3RhdGljIENGSW5kZXggZm9y
bVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBidWZm
ZXJMZW4KICAgICBGb3JtU3RyZWFtRmllbGRzKiBmb3JtID0gc3RhdGljX2Nhc3Q8Rm9ybVN0cmVh
bUZpZWxkcyo+KGNvbnRleHQpOwogCiAgICAgd2hpbGUgKGZvcm0tPmN1cnJlbnRTdHJlYW0pIHsK
LSAgICAgICAgQ0ZJbmRleCBieXRlc1JlYWQgPSBDRlJlYWRTdHJlYW1SZWFkKGZvcm0tPmN1cnJl
bnRTdHJlYW0sIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgQ0ZJbmRleCBieXRlc1Rv
UmVhZCA9IGJ1ZmZlckxlbmd0aDsKKyAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5n
ZUxlbmd0aCAhPSAtMSAmJiBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPCBieXRlc1Rv
UmVhZCkKKyAgICAgICAgICAgIGJ5dGVzVG9SZWFkID0gc3RhdGljX2Nhc3Q8Q0ZJbmRleD4oZm9y
bS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoKTsKKyAgICAgICAgQ0ZJbmRleCBieXRlc1JlYWQg
PSBDRlJlYWRTdHJlYW1SZWFkKGZvcm0tPmN1cnJlbnRTdHJlYW0sIGJ1ZmZlciwgYnl0ZXNUb1Jl
YWQpOwogICAgICAgICBpZiAoYnl0ZXNSZWFkIDwgMCkgewogICAgICAgICAgICAgKmVycm9yID0g
Q0ZSZWFkU3RyZWFtR2V0RXJyb3IoZm9ybS0+Y3VycmVudFN0cmVhbSk7CiAgICAgICAgICAgICBy
ZXR1cm4gLTE7CkBAIC0yNDcsNiArMjY2LDggQEAgc3RhdGljIENGSW5kZXggZm9ybVJlYWQoQ0ZS
ZWFkU3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBidWZmZXJMZW4KICAg
ICAgICAgICAgIGVycm9yLT5lcnJvciA9IDA7CiAgICAgICAgICAgICAqYXRFT0YgPSBGQUxTRTsK
ICAgICAgICAgICAgIGZvcm0tPmJ5dGVzU2VudCArPSBieXRlc1JlYWQ7CisgICAgICAgICAgICBp
ZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IC0xKQorICAgICAgICAgICAgICAg
IGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAtPSBieXRlc1JlYWQ7CiAKICAgICAgICAg
ICAgIGlmICghUmVzb3VyY2VIYW5kbGU6OmRpZFNlbmRCb2R5RGF0YURlbGVnYXRlRXhpc3RzKCkp
IHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRmlndXJlIG91dCBob3cgdG8gb25seSBkbyB0
aGlzIHdoZW4gYSBSZXNvdXJjZUhhbmRsZUNsaWVudCBpcyBhdmFpbGFibGUuCkBAIC0zNTksOSAr
MzgwLDEzIEBAIHZvaWQgc2V0SFRUUEJvZHkoTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCwg
UGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEpCiAgICAgICAgIGlmIChlbGVtZW50Lm1fdHlw
ZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGEpCiAgICAgICAgICAgICBsZW5ndGggKz0gZWxlbWVu
dC5tX2RhdGEuc2l6ZSgpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGxvbmcgbG9uZyBm
aWxlU2l6ZTsKLSAgICAgICAgICAgIGlmIChnZXRGaWxlU2l6ZShlbGVtZW50Lm1fc2hvdWxkR2Vu
ZXJhdGVGaWxlID8gZWxlbWVudC5tX2dlbmVyYXRlZEZpbGVuYW1lIDogZWxlbWVudC5tX2ZpbGVu
YW1lLCBmaWxlU2l6ZSkpCi0gICAgICAgICAgICAgICAgbGVuZ3RoICs9IGZpbGVTaXplOworICAg
ICAgICAgICAgaWYgKGVsZW1lbnQubV9maWxlTGVuZ3RoICE9IC0xKQorICAgICAgICAgICAgICAg
IGxlbmd0aCArPSBlbGVtZW50Lm1fZmlsZUxlbmd0aDsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIGxvbmcgbG9uZyBmaWxlU2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAoZ2V0
RmlsZVNpemUoZWxlbWVudC5tX3Nob3VsZEdlbmVyYXRlRmlsZSA/IGVsZW1lbnQubV9nZW5lcmF0
ZWRGaWxlbmFtZSA6IGVsZW1lbnQubV9maWxlbmFtZSwgZmlsZVNpemUpKQorICAgICAgICAgICAg
ICAgICAgICBsZW5ndGggKz0gZmlsZVNpemU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCAzMjgxOGRmLi45OTdlZWM2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCkBAIC00NDQsNyArNDQ0LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
c2VuZChCbG9iKiBib2R5LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgLy8gRklYTUU6IFNo
b3VsZCB3ZSBzZXQgYSBDb250ZW50LVR5cGUgaWYgb25lIGlzIG5vdCBzZXQuCiAgICAgICAgIC8v
IEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgdXBsb2FkaW5nIGJ1bmRsZXMuCiAgICAgICAgIG1fcmVx
dWVzdEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fcmVxdWVzdEVu
dGl0eUJvZHktPmFwcGVuZEZpbGUoYm9keS0+cGF0aCgpLCBmYWxzZSk7CisgICAgICAgIG1fcmVx
dWVzdEVudGl0eUJvZHktPmFwcGVuZEZpbGUoYm9keS0+cGF0aCgpLCBib2R5LT5zdGFydCgpLCBi
b2R5LT5sZW5ndGgoKSwgYm9keS0+bW9kaWZpY2F0aW9uVGltZSgpLCBmYWxzZSk7CiAgICAgfQog
CiAgICAgY3JlYXRlUmVxdWVzdChlYyk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzODNjY2Q0Li45M2U0MmU4
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxOSBAQAogMjAxMC0wMi0wOSAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQmxvYi5zbGljZSBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI5OTMKKworICAgICAgICBDaHJvbWl1bS1zaWRlIGNo
YW5nZSB0byBzdXBwb3J0IEJsb2Iuc2xpY2UuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViSFRUUEJv
ZHkuaDoKKyAgICAgICAgKiBzcmMvV2ViSFRUUEJvZHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJIVFRQQm9keTo6ZWxlbWVudEF0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSFRUUEJvZHk6OmFw
cGVuZEZpbGUpOgorCisyMDEwLTAyLTA5ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4K
KwogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCiAKICAgICAgICAgW2Nocm9taXVt
XSBBZGQgdGhlIGNocm9taXVtIGludGVyZmFjZSB0byBzdXBwb3J0IEJsb2Iuc2xpY2UuCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkhUVFBCb2R5LmggYi9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkhUVFBCb2R5LmgKaW5kZXggZmNjNDRmZi4uMmE1NGM0NCAxMDA2NDQK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJIVFRQQm9keS5oCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViSFRUUEJvZHkuaApAQCAtODEsNyArODEsNiBAQCBwdWJsaWM6CiAK
ICAgICAvLyBBcHBlbmQgdG8gdGhlIGxpc3Qgb2YgZWxlbWVudHMuCiAgICAgV0VCS0lUX0FQSSB2
b2lkIGFwcGVuZERhdGEoY29uc3QgV2ViRGF0YSYpOwotICAgIFdFQktJVF9BUEkgdm9pZCBhcHBl
bmRGaWxlKGNvbnN0IFdlYlN0cmluZyYpOyAvLyBGSVhNRTogdG8gYmUgcmVtb3ZlZC4KICAgICAv
LyBQYXNzaW5nIC0xIHRvIGZpbGVMZW5ndGggbWVhbnMgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4K
ICAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmLCBsb25nIGxv
bmcgZmlsZVN0YXJ0LCBsb25nIGxvbmcgZmlsZUxlbmd0aCwgY29uc3QgV2ViRmlsZUluZm8mKTsK
IApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJIVFRQQm9keS5jcHAgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkhUVFBCb2R5LmNwcAppbmRleCAzZDQwODY5Li42OTAzMGY0IDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhUVFBCb2R5LmNwcAorKysgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkhUVFBCb2R5LmNwcApAQCAtODcsOSArODcsOSBAQCBib29sIFdl
YkhUVFBCb2R5OjplbGVtZW50QXQoc2l6ZV90IGluZGV4LCBFbGVtZW50JiByZXN1bHQpIGNvbnN0
CiAgICAgICAgIHJlc3VsdC50eXBlID0gRWxlbWVudDo6VHlwZUZpbGU7CiAgICAgICAgIHJlc3Vs
dC5kYXRhLnJlc2V0KCk7CiAgICAgICAgIHJlc3VsdC5maWxlUGF0aCA9IGVsZW1lbnQubV9maWxl
bmFtZTsKLSAgICAgICAgcmVzdWx0LmZpbGVTdGFydCA9IDA7IC8vIEZJWE1FOiB0byBiZSBzZXQg
ZnJvbSBGb3JtRGF0YS4KLSAgICAgICAgcmVzdWx0LmZpbGVMZW5ndGggPSAtMTsgLy8gRklYTUU6
IHRvIGJlIHNldCBmcm9tIEZvcm1EYXRhLgotICAgICAgICByZXN1bHQuZmlsZUluZm8ubW9kaWZp
Y2F0aW9uVGltZSA9IDAuMDsgLy8gRklYTUU6IHRvIGJlIHNldCBmcm9tIEZvcm1EYXRhLgorICAg
ICAgICByZXN1bHQuZmlsZVN0YXJ0ID0gZWxlbWVudC5tX2ZpbGVTdGFydDsKKyAgICAgICAgcmVz
dWx0LmZpbGVMZW5ndGggPSBlbGVtZW50Lm1fZmlsZUxlbmd0aDsKKyAgICAgICAgcmVzdWx0LmZp
bGVJbmZvLm1vZGlmaWNhdGlvblRpbWUgPSBlbGVtZW50Lm1fZmlsZU1vZGlmaWNhdGlvblRpbWU7
CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMTA3LDE1ICsxMDcsMTAgQEAgdm9pZCBXZWJIVFRQQm9keTo6YXBwZW5kRGF0YShj
b25zdCBXZWJEYXRhJiBkYXRhKQogICAgIG1fcHJpdmF0ZS0+YXBwZW5kRGF0YShkYXRhLmRhdGEo
KSwgZGF0YS5zaXplKCkpOwogfQogCi12b2lkIFdlYkhUVFBCb2R5OjphcHBlbmRGaWxlKGNvbnN0
IFdlYlN0cmluZyYgZmlsZVBhdGgpCi17Ci0gICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJp
dmF0ZS0+YXBwZW5kRmlsZShmaWxlUGF0aCk7Ci19Ci0KIHZvaWQgV2ViSFRUUEJvZHk6OmFwcGVu
ZEZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCwgbG9uZyBsb25nIGZpbGVTdGFydCwgbG9u
ZyBsb25nIGZpbGVMZW5ndGgsIGNvbnN0IFdlYkZpbGVJbmZvJiBmaWxlSW5mbykKIHsKLSAgICAv
LyBGSVhNRTogdG8gYmUgaW1wbGVtZW50ZWQuCisgICAgZW5zdXJlTXV0YWJsZSgpOworICAgIG1f
cHJpdmF0ZS0+YXBwZW5kRmlsZShmaWxlUGF0aCwgZmlsZVN0YXJ0LCBmaWxlTGVuZ3RoLCBzdGF0
aWNfY2FzdDx0aW1lX3Q+KGZpbGVJbmZvLm1vZGlmaWNhdGlvblRpbWUpKTsKIH0KIAogbG9uZyBs
b25nIFdlYkhUVFBCb2R5OjppZGVudGlmaWVyKCkgY29uc3QK
</data>
<flag name="review"
          id="31133"
          type_id="1"
          status="-"
          setter="dimich"
    />
    <flag name="commit-queue"
          id="31134"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48536</attachid>
            <date>2010-02-10 18:01:18 -0800</date>
            <delta_ts>2010-02-23 14:23:31 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>32993_7</filename>
            <type>text/plain</type>
            <size>36698</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiMGFhOTRmLi40Mjg2NGNhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDIt
MTAgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJsb2Iuc2xpY2Ugc3VwcG9ydC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkzCisKKyAgICAgICAg
QWRkIGEgbGF5b3V0IHRlc3QgdG8gdGVzdCBzbGljaW5nIGFuZCBzZW5kaW5nIGEgZmlsZS4KKwor
ICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQ6
CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZHJhZy1maWxlLXRvLWZpbGUt
aW5wdXQtZWxlbWVudC5qczogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9yZXNv
dXJjZXMvZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2xv
Y2FsL3Jlc291cmNlcy9zZW5kLWRyYWdnZWQtZmlsZS5qczoKKyAgICAgICAgKG9uRmlsZURyb3Ap
OgorICAgICAgICAocnVuVGVzdCk6CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJj
ZXMvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rl
c3RzL2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9s
b2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3Jlc291cmNlcy90b3VjaC10ZW1wLWZpbGUucGhwOiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3Jlc291cmNlcy93cml0ZS10ZW1wLWZpbGUucGhw
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXBy
b3BlcnRpZXMtZXhwZWN0ZWQudHh0OgorCiAyMDEwLTAyLTA5ICBBbGVqYW5kcm8gRy4gQ2FzdHJv
ICA8YWxleEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVy
dGllcy1leHBlY3RlZC50eHQKaW5kZXggZGU1M2MyNy4uYWJhODA5ZSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0
ZWQudHh0CkBAIC0xNDksNiArMTQ5LDcgQEAgd2luZG93LkJlZm9yZUxvYWRFdmVudC5wcm90b3R5
cGUucHJldmVudERlZmF1bHQgW2Z1bmN0aW9uXQogd2luZG93LkJlZm9yZUxvYWRFdmVudC5wcm90
b3R5cGUuc3RvcFByb3BhZ2F0aW9uIFtmdW5jdGlvbl0KIHdpbmRvdy5CbG9iIFtvYmplY3QgQmxv
YkNvbnN0cnVjdG9yXQogd2luZG93LkJsb2IucHJvdG90eXBlIFtvYmplY3QgQmxvYlByb3RvdHlw
ZV0KK3dpbmRvdy5CbG9iLnByb3RvdHlwZS5zbGljZSBbZnVuY3Rpb25dCiB3aW5kb3cuQ0RBVEFT
ZWN0aW9uIFtvYmplY3QgQ0RBVEFTZWN0aW9uQ29uc3RydWN0b3JdCiB3aW5kb3cuQ0RBVEFTZWN0
aW9uLnByb3RvdHlwZSBbb2JqZWN0IENEQVRBU2VjdGlvblByb3RvdHlwZV0KIHdpbmRvdy5DREFU
QVNlY3Rpb24ucHJvdG90eXBlLkFUVFJJQlVURV9OT0RFIFtudW1iZXJdCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9kcmFnLWZpbGUtdG8tZmlsZS1p
bnB1dC1lbGVtZW50LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMv
ZHJhZy1maWxlLXRvLWZpbGUtaW5wdXQtZWxlbWVudC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5jNTFjNjgwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZHJhZy1maWxlLXRvLWZpbGUtaW5wdXQtZWxlbWVudC5q
cwpAQCAtMCwwICsxLDQ2IEBACit2YXIgZmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiaW5wdXQiKTsKK2ZpbGVJbnB1dC50eXBlID0gImZpbGUiOworZmlsZUlucHV0LnN0eWxlLndp
ZHRoID0gIjEwMHB4IjsKK2ZpbGVJbnB1dC5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOworLy8gSW1w
b3J0YW50IHRoYXQgd2UgcHV0IHRoaXMgYXQgdGhlIHRvcCBvZiB0aGUgZG9jIHNvIHRoYXQgbG9n
Z2luZyBkb2VzIG5vdCBjYXVzZSBpdCB0byBnbyBvdXQgb2YgdmlldyAod2hlcmUgaXQgY2FuJ3Qg
YmUgZHJhZ2dlZCB0bykKK2RvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGZpbGVJbnB1dCwgZG9j
dW1lbnQuYm9keS5maXJzdENoaWxkKTsKKworZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImRy
YWdlbnRlciIsIGZ1bmN0aW9uKCkgeworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBm
YWxzZSk7CisKK2ZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIGZ1bmN0aW9u
KCkgeworICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gImNvcHkiOworICAgIGV2
ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK3ZhciBmaWxlSW5wdXREcm9wQ2Fs
bGJhY2sgPSBudWxsOworZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBmdW5jdGlv
bigpIHsKKyAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluZGV4T2YoIkZpbGVzIikg
IT0gLTEgJiYgZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aCA9PSAxKQorICAgICAgICB0
ZXN0UGFzc2VkKCJldmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBk
cm9wLiIpOworICAgIGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJldmVudC5kYXRhVHJhbnNm
ZXIgZG9lcyBub3QgY29udGFpbiBhIEZpbGUgb2JqZWN0IG9uIGRyb3AuIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBmaWxlSW5wdXREcm9wQ2FsbGJhY2soZXZlbnQuZGF0YVRyYW5z
ZmVyLmZpbGVzWzBdKTsKKworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7
CisKK2Z1bmN0aW9uIHNldEZpbGVJbnB1dERyb3BDYWxsYmFjayhmaWxlSW5wdXREcm9wQ2FsbGJh
Y2tGdW5jKQoreworICAgIGZpbGVJbnB1dERyb3BDYWxsYmFjayA9IGZpbGVJbnB1dERyb3BDYWxs
YmFja0Z1bmM7Cit9CisKK2Z1bmN0aW9uIG1vdmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGVsZW1l
bnQpCit7CisgICAgdmFyIGNlbnRlclggPSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9m
ZnNldFdpZHRoIC8gMjsKKyAgICB2YXIgY2VudGVyWSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxl
bWVudC5vZmZzZXRIZWlnaHQgLyAyOworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGNlbnRl
clgsIGNlbnRlclkpOworfQorCitmdW5jdGlvbiByZW1vdmVGaWxlSW5wdXRFbGVtZW50KCkKK3sK
KyAgICBmaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmaWxlSW5wdXQpCit9CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9maWxlLWZvci1k
cmFnLXRvLXNlbmQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMv
ZmlsZS1mb3ItZHJhZy10by1zZW5kLnR4dAppbmRleCA1YWIyZjhhLi42YTUzN2I1IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9maWxlLWZvci1kcmFn
LXRvLXNlbmQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2Vz
L2ZpbGUtZm9yLWRyYWctdG8tc2VuZC50eHQKQEAgLTEgKzEgQEAKLUhlbGxvClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQorMTIzNDU2Nzg5MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQt
ZHJhZ2dlZC1maWxlLmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMv
c2VuZC1kcmFnZ2VkLWZpbGUuanMKaW5kZXggYmVkNDA3OC4uZWZjMTEyNCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUu
anMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2VuZC1kcmFn
Z2VkLWZpbGUuanMKQEAgLTEsNDggKzEsMjEgQEAKIGRlc2NyaXB0aW9uKCJUZXN0IGZvciBzZW5k
aW5nIGEgZHJhZ2dlZCBmaWxlIHZpYSBYTUxIdHRwUmVxdWVzdC4iKTsKIAotdmFyIGZpbGVJbnB1
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci1maWxlSW5wdXQudHlwZSA9ICJm
aWxlIjsKLWZpbGVJbnB1dC5zdHlsZS53aWR0aCA9ICIxMDBweCI7Ci1maWxlSW5wdXQuc3R5bGUu
aGVpZ2h0ID0gIjEwMHB4IjsKLS8vIEltcG9ydGFudCB0aGF0IHdlIHB1dCB0aGlzIGF0IHRoZSB0
b3Agb2YgdGhlIGRvYyBzbyB0aGF0IGxvZ2dpbmcgZG9lcyBub3QgY2F1c2UgaXQgdG8gZ28gb3V0
IG9mIHZpZXcgKHdoZXJlIGl0IGNhbid0IGJlIGRyYWdnZWQgdG8pCi1kb2N1bWVudC5ib2R5Lmlu
c2VydEJlZm9yZShmaWxlSW5wdXQsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7Ci0KLWZpbGVJ
bnB1dC5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLCBmdW5jdGlvbigpIHsKLSAgICBldmVu
dC5wcmV2ZW50RGVmYXVsdCgpOwotfSwgZmFsc2UpOwotCi1maWxlSW5wdXQuYWRkRXZlbnRMaXN0
ZW5lcigiZHJhZ292ZXIiLCBmdW5jdGlvbigpIHsKLSAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJv
cEVmZmVjdCA9ICJjb3B5IjsKLSAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotfSwgZmFsc2Up
OwotCi1maWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsIGZ1bmN0aW9uKCkgewotICAg
IGlmIChldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5kZXhPZigiRmlsZXMiKSAhPSAtMSAmJiBl
dmVudC5kYXRhVHJhbnNmZXIuZmlsZXMubGVuZ3RoID09IDEpCi0gICAgICAgIHRlc3RQYXNzZWQo
ImV2ZW50LmRhdGFUcmFuc2ZlciBjb250YWlucyBhIEZpbGUgb2JqZWN0IG9uIGRyb3AuIik7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIHRlc3RGYWlsZWQoImV2ZW50LmRhdGFUcmFuc2ZlciBkb2VzIG5v
dCBjb250YWluIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQorZnVuY3Rpb24gb25GaWxlRHJvcChmaWxlKQorewogICAgIHZhciB4aHIgPSBuZXcgWE1M
SHR0cFJlcXVlc3QoKTsKICAgICB4aHIub3BlbigiUE9TVCIsICJodHRwOi8vMTI3LjAuMC4xOjgw
MDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3Bvc3QtZWNoby5jZ2kiLCBmYWxzZSk7Ci0gICAg
eGhyLnNlbmQoZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzWzBdKTsKLSAgICBpZiAoeGhyLnJlc3Bv
bnNlVGV4dCA9PSAiSGVsbG8iKQorICAgIHhoci5zZW5kKGZpbGUpOworICAgIGlmICh4aHIucmVz
cG9uc2VUZXh0ID09ICIxMjM0NTY3ODkwIikKICAgICAgICAgdGVzdFBhc3NlZCgiRXhwZWN0ZWQg
cmVzcG9uc2UgZGF0YSByZWNlaXZlZC4iKTsKICAgICBlbHNlCiAgICAgICAgIHRlc3RGYWlsZWQo
IlVuZXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDogIiArIHhoci5yZXNwb25zZVRleHQp
OwogCiAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLX0sIGZhbHNlKTsKLQotZnVuY3Rpb24g
bW92ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQoZWxlbWVudCkgewotICAgIHZhciBjZW50ZXJYID0g
ZWxlbWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVudC5vZmZzZXRXaWR0aCAvIDI7Ci0gICAgdmFyIGNl
bnRlclkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMjsKLSAg
ICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhjZW50ZXJYLCBjZW50ZXJZKTsKIH0KIAogZnVuY3Rp
b24gcnVuVGVzdCgpCiB7CisgICAgc2V0RmlsZUlucHV0RHJvcENhbGxiYWNrKG9uRmlsZURyb3Ap
OwogICAgIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyhbInJlc291cmNlcy9maWxlLWZv
ci1kcmFnLXRvLXNlbmQudHh0Il0pOwogICAgIG1vdmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGZp
bGVJbnB1dCk7CiAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOwpAQCAtNTEsNyArMjQsNyBAQCBm
dW5jdGlvbiBydW5UZXN0KCkKIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKICAgICBydW5UZXN0
KCk7CiAgICAgLy8gQ2xlYW4gdXAgYWZ0ZXIgb3Vyc2VsdmVzCi0gICAgZmlsZUlucHV0LnBhcmVu
dE5vZGUucmVtb3ZlQ2hpbGQoZmlsZUlucHV0KTsKKyAgICByZW1vdmVGaWxlSW5wdXRFbGVtZW50
KCk7CiB9IGVsc2UgewogICAgIHRlc3RGYWlsZWQoIlRoaXMgdGVzdCBpcyBub3QgaW50ZXJhY3Rp
dmUsIHBsZWFzZSBydW4gdXNpbmcgRHVtcFJlbmRlclRyZWUiKTsKIH0KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQt
ZmlsZS5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtc2xp
Y2VkLWRyYWdnZWQtZmlsZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x
YTJlYzYzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9y
ZXNvdXJjZXMvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmpzCkBAIC0wLDAgKzEsMTU2IEBACitk
ZXNjcmlwdGlvbigiVGVzdCBmb3Igc2xpY2luZyBhIGRyYWdnZWQgZmlsZSBhbmQgc2VuZGluZyBp
dCB2aWEgWE1MSHR0cFJlcXVlc3QuIik7CisKK3ZhciBvcmlnaW5hbFRleHQgPSAiMTIzNDU2Nzg5
MCI7Cit2YXIgc2xpY2VTdGFydDsKK3ZhciBzbGljZUxlbmd0aDsKK3ZhciB0ZW1wRmlsZU5hbWUg
PSAic2VuZC1zbGljZS1kcmFnZ2VkLWZpbGUudG1wIjsKK3ZhciB0ZW1wRmlsZU9yaWdpbmFsTW9k
aWZpY2F0aW9uVGltZTsKK3ZhciBzdWJmaWxlOworCitmdW5jdGlvbiB1cGxvYWRGaWxlKGZpbGUs
IGV4cGVjdGVkVGV4dCwgZXhwZWN0ZWRFeGNlcHRpb24pCit7CisgICAgdmFyIHhociA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6
ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcG9zdC1lY2hvLmNnaSIsIGZhbHNlKTsKKwor
ICAgIHZhciBwYXNzZWQ7CisgICAgdmFyIG1lc3NhZ2U7CisgICAgdHJ5IHsKKyAgICAgICAgeGhy
LnNlbmQoZmlsZSk7CisgICAgICAgIGlmIChleHBlY3RlZEV4Y2VwdGlvbikgeworICAgICAgICAg
ICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgICAgICBtZXNzYWdlID0gIlVuZXhwZWN0ZWQgcmVz
cG9uc2UgZGF0YSByZWNlaXZlZDogIiArIHhoci5yZXNwb25zZVRleHQgKyAiLiBFeHBlY3Rpbmcg
ZXhjZXB0aW9uIHRocm93biI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoeGhy
LnJlc3BvbnNlVGV4dCA9PSBleHBlY3RlZFRleHQpIHsKKyAgICAgICAgICAgICAgICBwYXNzZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAiRXhwZWN0ZWQgcmVzcG9uc2UgZGF0
YSByZWNlaXZlZDogIiArIHhoci5yZXNwb25zZVRleHQ7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1lc3NhZ2Ug
PSAiVW5leHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4
dCArICIuIEV4cGVjdGluZzogIiArIGV4cGVjdGVkVGV4dDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgIGlmIChleHBlY3RlZEV4Y2VwdGlvbikg
eworICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiRXhw
ZWN0ZWQgZXhjZXB0aW9uIHRocm93bjogIiArIGV4OworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgICAgICBtZXNzYWdlID0gIlVuZXhwZWN0ZWQg
ZXhjZXB0aW9uIHRocm93bjogIiArIGV4OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHBh
c3NlZCkKKyAgICAgICAgdGVzdFBhc3NlZChtZXNzYWdlKTsKKyAgICBlbHNlCisgICAgICAgIHRl
c3RGYWlsZWQobWVzc2FnZSk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRlbXBGaWxlKGZpbGVEYXRh
KQoreworICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICB4aHIub3Blbigi
UE9TVCIsICJodHRwOi8vMTI3LjAuMC4xOjgwMDAvcmVzb3VyY2VzL3dyaXRlLXRlbXAtZmlsZS5w
aHA/ZmlsZW5hbWU9IiArIHRlbXBGaWxlTmFtZSArICImZGF0YT0iICsgZmlsZURhdGEsIGZhbHNl
KTsKKyAgICB4aHIuc2VuZCgpOworICAgIGlmICh4aHIuc3RhdHVzICE9IDIwMCkgeworICAgICAg
ICB0ZXN0RmFpbGVkKCJVbmV4cGVjdGVkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZDogIiArIHho
ci5zdGF0dXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyIHZhbHVlcyA9IHho
ci5yZXNwb25zZVRleHQuc3BsaXQoJ1xuJyk7CisgICAgaWYgKHZhbHVlcy5sZW5ndGggPCAyKSB7
CisgICAgICAgIHRlc3RGYWlsZWQoIlVuZXhwZWN0ZWQgcmVzcG9uc2UgdGV4dCByZWNlaXZlZDog
IiArIHhoci5yZXNwb25zZVRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmV0
dXJuIHZhbHVlczsKK30KKworZnVuY3Rpb24gdG91Y2hUZW1wRmlsZSgpCit7CisgICAgdmFyIHho
ciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8x
MjcuMC4wLjE6ODAwMC9yZXNvdXJjZXMvdG91Y2gtdGVtcC1maWxlLnBocD9maWxlbmFtZT0iICsg
dGVtcEZpbGVOYW1lLCBmYWxzZSk7CisgICAgeGhyLnNlbmQoKTsKK30KKworZnVuY3Rpb24gcmVt
b3ZlVGVtcEZpbGUoKQoreworICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAg
ICB4aHIub3BlbigiUE9TVCIsICJodHRwOi8vMTI3LjAuMC4xOjgwMDAvcmVzb3VyY2VzL3Jlc2V0
LXRlbXAtZmlsZS5waHA/ZmlsZW5hbWU9IiArIHRlbXBGaWxlTmFtZSwgZmFsc2UpOworICAgIHho
ci5zZW5kKCk7Cit9CisKK2Z1bmN0aW9uIG9uU3RhYmxlRmlsZURyb3AoZmlsZSkKK3sKKyAgICAv
LyBTbGljZSB0aGUgZmlsZS4KKyAgICBzdWJmaWxlID0gZmlsZS5zbGljZShzbGljZVN0YXJ0LCBz
bGljZUxlbmd0aCk7CisgICAgdmFyIGV4cGVjdGVkVGV4dCA9IG9yaWdpbmFsVGV4dC5zdWJzdHJp
bmcoc2xpY2VTdGFydCwgc2xpY2VTdGFydCArIHNsaWNlTGVuZ3RoKTsKKyAgICBzaG91bGRFdmFs
dWF0ZVRvKCJzdWJmaWxlLnNpemUiLCBleHBlY3RlZFRleHQubGVuZ3RoKTsKKworICAgIC8vIFVw
bG9hZCB0aGUgc2xpY2VkIGZpbGUuCisgICAgdXBsb2FkRmlsZShzdWJmaWxlLCBleHBlY3RlZFRl
eHQsIGZhbHNlKTsKK30KKworZnVuY3Rpb24gZHJhZ0FuZFNsaWNlU3RhYmxlRmlsZShzdGFydCwg
bGVuZ3RoKQoreworICAgIHNsaWNlU3RhcnQgPSBzdGFydDsKKyAgICBzbGljZUxlbmd0aCA9IGxl
bmd0aDsKKyAgICBzZXRGaWxlSW5wdXREcm9wQ2FsbGJhY2sob25TdGFibGVGaWxlRHJvcCk7Cisg
ICAgZXZlbnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKFsicmVzb3VyY2VzL2ZpbGUtZm9yLWRy
YWctdG8tc2VuZC50eHQiXSk7CisgICAgbW92ZU1vdXNlVG9DZW50ZXJPZkVsZW1lbnQoZmlsZUlu
cHV0KTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Cit9CisKK2Z1bmN0aW9uIG9uVW5zdGFi
bGVGaWxlRHJvcChmaWxlKQoreworICAgIC8vIFNsaWNlIHRoZSBmaWxlLgorICAgIHN1YmZpbGUg
PSBmaWxlLnNsaWNlKHNsaWNlU3RhcnQsIHNsaWNlTGVuZ3RoKTsKKyAgICB2YXIgZXhwZWN0ZWRU
ZXh0ID0gb3JpZ2luYWxUZXh0LnN1YnN0cmluZyhzbGljZVN0YXJ0LCBzbGljZVN0YXJ0ICsgc2xp
Y2VMZW5ndGgpOworICAgIHNob3VsZEV2YWx1YXRlVG8oInN1YmZpbGUuc2l6ZSIsIGV4cGVjdGVk
VGV4dC5sZW5ndGgpOworICAKKyAgICAvLyBVcGxvYWQgdGhlIHNsaWNlZCBmaWxlLgorICAgIHVw
bG9hZEZpbGUoc3ViZmlsZSwgZXhwZWN0ZWRUZXh0LCBmYWxzZSk7CisKKyAgICAvLyBUb3VjaCB0
aGUgdW5kZXJseWluZyB0ZW1wIGZpbGUuCisgICAgdG91Y2hUZW1wRmlsZSgpOworICAgIAorICAg
IC8vIFVwbG9hZCB0aGUgc2xpY2VkIGZpbGUuIFdlIHNob3VsZCByZWNlaXZlIGFuIGV4Y2VwdGlv
biBzaW5jZSB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkLgorICAgIHVwbG9hZEZpbGUoc3ViZmls
ZSwgbnVsbCwgdHJ1ZSk7CisKKyAgICAvLyBSZW1vdmUgdGhlIHRlbXAgZmlsZS4KKyAgICByZW1v
dmVUZW1wRmlsZSgpOworfQorCitmdW5jdGlvbiBkcmFnQW5kU2xpY2VVbnN0YWJsZUZpbGUoc3Rh
cnQsIGxlbmd0aCkKK3sKKyAgICB2YXIgdGVtcEZpbGVJbmZvID0gY3JlYXRlVGVtcEZpbGUob3Jp
Z2luYWxUZXh0KTsKKyAgICBpZiAodGVtcEZpbGVJbmZvLmxlbmd0aCA8IDIpIHsKKyAgICAgICAg
ZG9uZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHZhciB0ZW1wRmlsZVBhdGggPSB0
ZW1wRmlsZUluZm9bMF07CisgICAgdGVtcEZpbGVPcmlnaW5hbE1vZGlmaWNhdGlvblRpbWUgPSB0
ZW1wRmlsZUluZm9bMV07CisKKyAgICBzbGljZVN0YXJ0ID0gc3RhcnQ7CisgICAgc2xpY2VMZW5n
dGggPSBsZW5ndGg7CisgICAgc2V0RmlsZUlucHV0RHJvcENhbGxiYWNrKG9uVW5zdGFibGVGaWxl
RHJvcCk7CisgICAgZXZlbnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKFt0ZW1wRmlsZVBhdGhd
KTsKKyAgICBtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudChmaWxlSW5wdXQpOworICAgIGV2ZW50
U2VuZGVyLm1vdXNlVXAoKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgZHJhZ0Fu
ZFNsaWNlU3RhYmxlRmlsZSgyLCA0KTsKKyAgICBkcmFnQW5kU2xpY2VTdGFibGVGaWxlKDIsIDIw
KTsKKyAgICBkcmFnQW5kU2xpY2VTdGFibGVGaWxlKDE1LCAyMCk7CisKKyAgICBkcmFnQW5kU2xp
Y2VVbnN0YWJsZUZpbGUoMywgNSk7Cit9CisKK2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAg
ICBydW5UZXN0KCk7CisgICAgLy8gQ2xlYW4gdXAgYWZ0ZXIgb3Vyc2VsdmVzCisgICAgcmVtb3Zl
RmlsZUlucHV0RWxlbWVudCgpOworfSBlbHNlIHsKKyAgICB0ZXN0RmFpbGVkKCJUaGlzIHRlc3Qg
aXMgbm90IGludGVyYWN0aXZlLCBwbGVhc2UgcnVuIHVzaW5nIER1bXBSZW5kZXJUcmVlIik7Cit9
CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1sIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmlsZS5odG1sCmluZGV4IDNmMjIxMGEuLmUw
YzRiMDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFn
Z2VkLWZpbGUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtZHJh
Z2dlZC1maWxlLmh0bWwKQEAgLTcsNiArNyw3IEBACiA8Ym9keT4KIDxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgogPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L2RyYWctZmlsZS10by1maWxlLWlucHV0LWVsZW1lbnQuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9InJlc291cmNlcy9zZW5kLWRyYWdnZWQtZmlsZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
IDwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1z
bGljZWQtZHJhZ2dlZC1maWxlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
bG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDYwNzkxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMjIgQEAKK1Rlc3QgZm9yIHNsaWNpbmcgYSBkcmFnZ2VkIGZpbGUgYW5k
IHNlbmRpbmcgaXQgdmlhIFhNTEh0dHBSZXF1ZXN0LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBldmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBv
biBkcm9wLgorUEFTUyBzdWJmaWxlLnNpemUgaXMgNAorUEFTUyBFeHBlY3RlZCByZXNwb25zZSBk
YXRhIHJlY2VpdmVkOiAzNDU2CitQQVNTIGV2ZW50LmRhdGFUcmFuc2ZlciBjb250YWlucyBhIEZp
bGUgb2JqZWN0IG9uIGRyb3AuCitQQVNTIHN1YmZpbGUuc2l6ZSBpcyA4CitQQVNTIEV4cGVjdGVk
IHJlc3BvbnNlIGRhdGEgcmVjZWl2ZWQ6IDM0NTY3ODkwCitQQVNTIGV2ZW50LmRhdGFUcmFuc2Zl
ciBjb250YWlucyBhIEZpbGUgb2JqZWN0IG9uIGRyb3AuCitQQVNTIHN1YmZpbGUuc2l6ZSBpcyAw
CitQQVNTIEV4cGVjdGVkIHJlc3BvbnNlIGRhdGEgcmVjZWl2ZWQ6IAorUEFTUyBldmVudC5kYXRh
VHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLgorUEFTUyBzdWJmaWxlLnNp
emUgaXMgNQorUEFTUyBFeHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiA0NTY3OAorUEFT
UyBFeHBlY3RlZCBleGNlcHRpb24gdGhyb3duOiBFcnJvcjogTkVUV09SS19FUlI6IFhNTEh0dHBS
ZXF1ZXN0IEV4Y2VwdGlvbiAxMDEKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2Fs
L3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9s
b2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zM2YyMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbApAQCAtMCwwICsxLDE0
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9kcmFnLWZpbGUtdG8tZmlsZS1pbnB1dC1lbGVtZW50LmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZXMvdG91Y2gtdGVtcC1maWxlLnBocCBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VzL3RvdWNoLXRlbXAtZmlsZS5waHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI4MjlkZgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VzL3RvdWNoLXRlbXAtZmlsZS5waHAKQEAg
LTAsMCArMSwyMiBAQAorPD9waHAKK3JlcXVpcmVfb25jZSAncG9ydGFiaWxpdHlMYXllci5waHAn
OworCitpZiAoIXN5c19nZXRfdGVtcF9kaXIoKSkgeworICAgIGVjaG8gIkZBSUw6IE5vIHRlbXAg
ZGlyIHdhcyByZXR1cm5lZC5cbiI7CisgICAgZXhpdCgpOworfQorCiskdG1wRmlsZSA9IHN5c19n
ZXRfdGVtcF9kaXIoKSAuICIvIiAuICRfR0VUWydmaWxlbmFtZSddOworCiskc3RhdCA9IHN0YXQo
JHRtcEZpbGUpOworaWYgKCEkc3RhdCkgeworICAgIGVjaG8gIkZBSUw6IHN0YXQoKSBjYWxsIGZh
aWxlZC5cbiI7CisgICAgZXhpdCgpOworfQorCiskbXRpbWUgPSAkc3RhdFsnbXRpbWUnXSArIDE7
CisKK2lmICghdG91Y2goJHRtcEZpbGUsICRtdGltZSkpIHsKKyAgICBlY2hvICJGQUlMOiB0b3Vj
aCgpIGNhbGwgZmFpbGVkLlxuIjsKK30KKz8+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3Jlc291cmNlcy93cml0ZS10ZW1wLWZpbGUucGhwIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9yZXNvdXJjZXMvd3JpdGUtdGVtcC1maWxlLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5mZmUyYzhjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9yZXNvdXJjZXMvd3JpdGUtdGVtcC1maWxlLnBocApAQCAtMCwwICsxLDIwIEBACis8
P3BocAorcmVxdWlyZV9vbmNlICdwb3J0YWJpbGl0eUxheWVyLnBocCc7CisKK2lmICghc3lzX2dl
dF90ZW1wX2RpcigpKSB7CisgICAgZWNobyAiRkFJTDogTm8gdGVtcCBkaXIgd2FzIHJldHVybmVk
LlxuIjsKKyAgICBleGl0KCk7Cit9CisKKyR0bXBGaWxlID0gc3lzX2dldF90ZW1wX2RpcigpIC4g
Ii8iIC4gJF9HRVRbJ2ZpbGVuYW1lJ107CisKK2lmICghZmlsZV9wdXRfY29udGVudHMoJHRtcEZp
bGUsICRfR0VUWydkYXRhJ10pKSB7CisgICAgZWNobyAiRkFJTDogdW5hYmxlIHRvIHdyaXRlIHRv
IGZpbGU6ICIgLiAkdG1wRmlsZSAuICJcbiI7CisgICAgZXhpdCgpOworfQorCiskc3RhdCA9IHN0
YXQoJHRtcEZpbGUpOworCitlY2hvICR0bXBGaWxlIC4gIlxuIjsKK2VjaG8gJHN0YXRbJ210aW1l
J107Cis/PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3F0L2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKaW5kZXgg
ZjdjYTg2Yi4uMjFjZGRhOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFz
dC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0
ZWQudHh0CkBAIC0xNDksNiArMTQ5LDcgQEAgd2luZG93LkJlZm9yZUxvYWRFdmVudC5wcm90b3R5
cGUucHJldmVudERlZmF1bHQgW2Z1bmN0aW9uXQogd2luZG93LkJlZm9yZUxvYWRFdmVudC5wcm90
b3R5cGUuc3RvcFByb3BhZ2F0aW9uIFtmdW5jdGlvbl0KIHdpbmRvdy5CbG9iIFtvYmplY3QgQmxv
YkNvbnN0cnVjdG9yXQogd2luZG93LkJsb2IucHJvdG90eXBlIFtvYmplY3QgQmxvYlByb3RvdHlw
ZV0KK3dpbmRvdy5CbG9iLnByb3RvdHlwZS5zbGljZSBbZnVuY3Rpb25dCiB3aW5kb3cuQ0RBVEFT
ZWN0aW9uIFtvYmplY3QgQ0RBVEFTZWN0aW9uQ29uc3RydWN0b3JdCiB3aW5kb3cuQ0RBVEFTZWN0
aW9uLnByb3RvdHlwZSBbb2JqZWN0IENEQVRBU2VjdGlvblByb3RvdHlwZV0KIHdpbmRvdy5DREFU
QVNlY3Rpb24ucHJvdG90eXBlLkFUVFJJQlVURV9OT0RFIFtudW1iZXJdCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDQ5Y2Y1NzguLmU4MGE1
YjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNTMgQEAKKzIwMTAtMDItMTAgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJs
b2Iuc2xpY2Ugc3VwcG9ydC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMyOTkzCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNs
aWNlZC1kcmFnZ2VkLWZpbGUuaHRtbAorCisgICAgICAgIFRoZSBmb2xsb3dpbmcgc2VtYW50aWMg
aXMgYWRvcHRlZCBwZXIgdGhlIGRpc2N1c3Npb25zIG9uIHB1YmxpYy13ZWJhcHBzOgorICAgICAg
ICAxKSBGaWxlLnNsaWNlKCkgZG9lcyBhIHN5bmNocm9ub3VzIElPIHRvIGNhcHR1cmVzIHRoZSBj
dXJyZW50IHNpemUgYW5kCisgICAgICAgICAgIG1vZGlmaWNhdGlvbiB0aW1lIGFuZCBjYWNoZSB0
aGVtIGluIHRoZSByZXN1bHRpbmcgQmxvYi4KKyAgICAgICAgMikgU3Vic2VxdWVudCBCbG9iIG9w
ZXJhdGlvbnMsIGxpa2UgQmxvYi5zbGljZSBhbmQgQmxvYi5zaXplIHNpbXBseQorICAgICAgICAg
ICB1c2UgdGhlIGNhY2hlZCB2YWx1ZXMuCisgICAgICAgIDMpIFdoZW4gdGhlIHVuZGVybHlpbmcg
ZmlsZSBkYXRhIGFyZSBhY2Nlc3NlZCwgbGlrZSBpbiBYSFIuc2VuZCgpLCB0aGUKKyAgICAgICAg
ICAgVUEgd2lsbCBjaGVjayB0aGUgY2FjaGVkIG1vZGlmaWNhdGlvbiB0aW1lIGFnYWluc3QgdGhl
IGN1cnJlbnQKKyAgICAgICAgICAgbW9kaWZpY2F0aW9uIHRpbWUgdG8gZGV0ZXJtaW5lIGlmIHRo
ZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgb3Igbm90LgorICAgICAgICAgICBBbiBlcnJvciBvciBl
eGNlcHRpb24gd2lsbCBiZSB0aHJvd24gaWYgbmVlZGVkLgorCisgICAgICAgIFRlc3Q6IGh0dHAv
dGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKKworICAgICAgICAqIGh0
bWwvQmxvYi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAgKFdl
YkNvcmU6OkJsb2I6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6Z2V0RmlsZVNpemVI
ZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWVI
ZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6c2xpY2UpOgorICAgICAgICAqIGh0bWwv
QmxvYi5oOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6c3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6QmxvYjo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6Om1vZGlmaWNhdGlvblRp
bWUpOgorICAgICAgICAqIGh0bWwvQmxvYi5pZGw6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpjcmVhdGVGb3Jt
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb3JtRGF0YTo6ZGVlcENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURh
dGE6OmFwcGVuZEZpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
bWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6YWR2YW5jZUN1cnJl
bnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6b3Blbk5leHRTdHJlYW0pOgorICAgICAgICAo
V2ViQ29yZTo6Zm9ybUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpmb3JtT3Blbik6CisgICAg
ICAgIChXZWJDb3JlOjpmb3JtUmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRIVFRQQm9keSk6
CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhN
TEh0dHBSZXF1ZXN0OjpzZW5kKToKKwogMjAxMC0wMi0wOSAgQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iLmNwcCBiL1dlYkNvcmUvaHRtbC9CbG9iLmNwcApp
bmRleCAwYjY3N2VhLi5mYjM2MmI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5jcHAK
KysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCkBAIC0zNywxNyArMzcsNjcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICA6IG1fcGF0
aChwYXRoKQorICAgICwgbV9zdGFydCgwKQorICAgICwgbV9sZW5ndGgoLTEpCisgICAgLCBtX3Nu
YXBzaG90Q2FwdHVyZWQoZmFsc2UpCisgICAgLCBtX3NuYXBzaG90U2l6ZSgwKQorICAgICwgbV9z
bmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoMCkKIHsKIH0KIAorQmxvYjo6QmxvYihjb25zdCBTdHJp
bmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgbG9uZyBsb25nIHNu
YXBzaG90U2l6ZSwgdGltZV90IHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKKyAgICA6IG1fcGF0
aChwYXRoKQorICAgICwgbV9zdGFydChzdGFydCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAg
ICAsIG1fc25hcHNob3RDYXB0dXJlZCh0cnVlKQorICAgICwgbV9zbmFwc2hvdFNpemUoc25hcHNo
b3RTaXplKQorICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoc25hcHNob3RNb2RpZmlj
YXRpb25UaW1lKQoreworICAgIEFTU0VSVChzdGFydCA+PSAwICYmIGxlbmd0aCA+PSAwICYmIHN0
YXJ0ICsgbGVuZ3RoIDw9IHNuYXBzaG90U2l6ZSAmJiBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUp
OworfQorCiB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYjo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8g
RklYTUU6IEphdmFTY3JpcHQgY2Fubm90IHJlcHJlc2VudCBzaXplcyBhcyBsYXJnZSBhcyB1bnNp
Z25lZCBsb25nIGxvbmcsIHdlIG5lZWQgdG8KICAgICAvLyBjb21lIHVwIHdpdGggYW4gZXhjZXB0
aW9uIHRvIHRocm93IGlmIGZpbGUgc2l6ZSBpcyBub3QgcmVwcmVzZXRhYmxlLgorICAgIGlmICht
X3NuYXBzaG90Q2FwdHVyZWQpCisgICAgICAgIHJldHVybiBtX2xlbmd0aDsKICAgICBsb25nIGxv
bmcgc2l6ZTsKICAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwgc2l6ZSkpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUp
OwogfQogCitQYXNzUmVmUHRyPEJsb2I+IEJsb2I6OnNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9u
ZyBsb25nIGxlbmd0aCkgY29uc3QKK3sKKyAgICAvLyBXaGVuIHdlIHNsaWNlIGEgZmlsZSBmb3Ig
dGhlIGZpcnN0IHRpbWUsIHdlIG9idGFpbiBhIHNuYXBzaG90IG9mIHRoZSBmaWxlIGJ5IGNhcHR1
cmluZyBpdHMgY3VycmVudCBzaXplIGFuZCBtb2RpZmljYXRpb24gdGltZS4KKyAgICAvLyBUaGUg
bW9kaWZpY2F0aW9uIHRpbWUgd2lsbCBiZSB1c2VkIHRvIHZlcmlmeSBpZiB0aGUgZmlsZSBoYXMg
YmVlbiBjaGFuZ2VkIG9yIG5vdCwgd2hlbiB0aGUgdW5kZXJseWluZyBkYXRhIGFyZSBhY2Nlc3Nl
ZC4KKyAgICBsb25nIGxvbmcgc25hcHNob3RTaXplOworICAgIHRpbWVfdCBzbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWU7CisgICAgaWYgKG1fc25hcHNob3RDYXB0dXJlZCkgeworICAgICAgICBzbmFw
c2hvdFNpemUgPSBtX3NuYXBzaG90U2l6ZTsKKyAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25U
aW1lID0gbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gSWYgd2UgZmFpbCB0byByZXRyaWV2ZSB0aGUgc2l6ZSBvciBtb2RpZmljYXRpb24gdGltZSwg
cHJvYmFibHkgZHVlIHRvIHRoYXQgdGhlIGZpbGUgaGFzIGJlZW4gZGVsZXRlZCwgYW4gZW1wdHkg
YmxvYiB3aWxsIGJlIHJldHVybmVkLgorICAgICAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwg
c25hcHNob3RTaXplKSB8fCAhZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUobV9wYXRoLCBzbmFwc2hv
dE1vZGlmaWNhdGlvblRpbWUpKSB7CisgICAgICAgICAgICBzbmFwc2hvdFNpemUgPSAwOworICAg
ICAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1lID0gMDsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBpdCBleGNlZWRzIHRoZSBzaXplIGxpbWl0Lgor
ICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHN0YXJ0ID0gMDsKKyAgICBpZiAobGVuZ3RoIDwg
MCkKKyAgICAgICAgbGVuZ3RoID0gMDsKKworICAgIGlmIChzdGFydCA+IHNuYXBzaG90U2l6ZSkg
eworICAgICAgICBzdGFydCA9IDA7CisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgfSBlbHNlIGlm
IChzdGFydCArIGxlbmd0aCA+IHNuYXBzaG90U2l6ZSkKKyAgICAgICAgbGVuZ3RoID0gc25hcHNo
b3RTaXplIC0gc3RhcnQ7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IobV9wYXRoLCBt
X3N0YXJ0ICsgc3RhcnQsIGxlbmd0aCwgc25hcHNob3RTaXplLCBzbmFwc2hvdE1vZGlmaWNhdGlv
blRpbWUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0Jsb2IuaCBiL1dlYkNvcmUvaHRtbC9CbG9iLmgKaW5kZXggYjkxMGU4Zi4uYjE1OGEy
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuaAorKysgYi9XZWJDb3JlL2h0bWwvQmxv
Yi5oCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC00NywxNCAr
NDgsMzcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+QmxvYigpIHsgfQogCisgICAgUGFzc1Jl
ZlB0cjxCbG9iPiBzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0
OworCiAgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAg
ICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdDsKKyAgICBsb25nIGxvbmcgc3RhcnQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgbG9uZyBsb25nIGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWUoKSBjb25z
dCB7IHJldHVybiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsgfQogCiBwcm90ZWN0ZWQ6CiAg
ICAgQmxvYihjb25zdCBTdHJpbmcmIHBhdGgpOwogCiBwcml2YXRlOgorICAgIEJsb2IoY29uc3Qg
U3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGxvbmcgbG9u
ZyBzbmFwc2hvdFNpemUsIHRpbWVfdCBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpOworCisgICAg
Ly8gVGhlIHVuZGVybHlpbmcgcGF0aCBvZiB0aGUgZmlsZS1iYXNlZCBibG9iLiAKICAgICBTdHJp
bmcgbV9wYXRoOworCisgICAgLy8gVGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBmaWxlLWJh
c2VkIGJsb2IuCisgICAgbG9uZyBsb25nIG1fc3RhcnQ7CisKKyAgICAvLyBUaGUgbGVuZ3RoIG9m
IHRoZSBmaWxlLWJhc2VkIGJsb2IuIFRoZSB2YWx1ZSBvZiAtMSBtZWFucyB0byB0aGUgZW5kIG9m
IHRoZSBmaWxlLgorICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsKKworICAgIC8vIEEgZmxhZyB0byB0
ZWxsIGlmIGEgc25hcHNob3QgaGFzIGJlZW4gY2FwdHVyZWQuCisgICAgYm9vbCBtX3NuYXBzaG90
Q2FwdHVyZWQ7CisKKyAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25hcHNob3Qg
aXMgY2FwdHVyZWQuIEl0IGNhbiBiZSAwIGlmIHRoZSBmaWxlIGlzIGVtcHR5LgorICAgIGxvbmcg
bG9uZyBtX3NuYXBzaG90U2l6ZTsKKworICAgIC8vIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1l
IG9mIHRoZSBmaWxlIHdoZW4gYSBzbmFwc2hvdCBpcyBjYXB0dXJlZC4gVGhlIHZhbHVlIG9mIDAg
YWxzbyBtZWFucyB0aGF0IHRoZSBzbmFwc2hvdCBpcyBjYXB0dXJlZC4KKyAgICB0aW1lX3QgbV9z
bmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYi5pZGwgYi9XZWJDb3JlL2h0bWwvQmxvYi5pZGwK
aW5kZXggNTczYmUzNS4uODM2NGVhYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuaWRs
CisrKyBiL1dlYkNvcmUvaHRtbC9CbG9iLmlkbApAQCAtMzIsNiArMzIsNyBAQCBtb2R1bGUgaHRt
bCB7CiAKICAgICBpbnRlcmZhY2UgQmxvYiB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1
bnNpZ25lZCBsb25nIGxvbmcgc2l6ZTsKKyAgICAgICAgQmxvYiBzbGljZShpbiBsb25nIGxvbmcg
c3RhcnQsIGluIGxvbmcgbG9uZyBsZW5ndGgpOwogICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxl
bWVudC5jcHAKaW5kZXggMmY4ODg5NC4uZmM1MzhhZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1s
L0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5j
cHAKQEAgLTI2Niw3ICsyNjYsNyBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBIVE1MRm9ybUVsZW1l
bnQ6OmNyZWF0ZUZvcm1EYXRhKGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5KQogICAgICAgICAgICAg
ICAgICAgICBpZiAoc2l6ZV90IGRhdGFTaXplID0gdmFsdWUuZGF0YSgpLmxlbmd0aCgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKHZhbHVlLmRhdGEoKS5kYXRh
KCksIGRhdGFTaXplKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuZmlsZSgp
ICYmICF2YWx1ZS5maWxlKCktPnBhdGgoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQtPmFwcGVuZEZpbGUodmFsdWUuZmlsZSgpLT5wYXRoKCksIHNob3VsZEdlbmVy
YXRlRmlsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZEZpbGUodmFs
dWUuZmlsZSgpLT5wYXRoKCksIDAsIC0xLCBzaG91bGRHZW5lcmF0ZUZpbGUpOwogCiAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRGF0YSgiXHJcbiIsIDIpOwogICAgICAgICAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCmluZGV4IGFmM2I3ZjAuLmRk
MDRlMTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcApAQCAtMTA4LDcgKzEw
OCw3IEBAIFBhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpkZWVwQ29weSgpIGNvbnN0CiAg
ICAgICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUu
bV9kYXRhKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBGb3JtRGF0YUVsZW1l
bnQ6OmVuY29kZWRGaWxlOgotICAgICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5k
KEZvcm1EYXRhRWxlbWVudChlLm1fZmlsZW5hbWUsIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsK
KyAgICAgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQo
ZS5tX2ZpbGVuYW1lLCBlLm1fZmlsZVN0YXJ0LCBlLm1fZmlsZUxlbmd0aCwgZS5tX2ZpbGVNb2Rp
ZmljYXRpb25UaW1lLCBlLm1fc2hvdWxkR2VuZXJhdGVGaWxlKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgIH0KQEAgLTEyNSw5ICsxMjUsOSBAQCB2b2lkIEZvcm1EYXRhOjph
cHBlbmREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKQogICAgIG1lbWNweShlLm1f
ZGF0YS5kYXRhKCkgKyBvbGRTaXplLCBkYXRhLCBzaXplKTsKIH0KIAotdm9pZCBGb3JtRGF0YTo6
YXBwZW5kRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmls
ZSkKK3ZvaWQgRm9ybURhdGE6OmFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgbG9u
ZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCB0aW1lX3QgbW9kaWZpY2F0aW9uVGltZSwg
Ym9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpCiB7Ci0gICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURh
dGFFbGVtZW50KGZpbGVuYW1lLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKKyAgICBtX2VsZW1lbnRz
LmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIHN0YXJ0LCBsZW5ndGgsIG1vZGlmaWNh
dGlvblRpbWUsIHNob3VsZEdlbmVyYXRlRmlsZSkpOwogfQogCiB2b2lkIEZvcm1EYXRhOjpmbGF0
dGVuKFZlY3RvcjxjaGFyPiYgZGF0YSkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9Gb3JtRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRh
LmgKaW5kZXggNzI3OGYyZS4uYzdmMzZkMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Zvcm1EYXRhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRh
LmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgRm9ybURhdGFfaAogCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTMyLDExICszMywxNCBAQCBjbGFz
cyBGb3JtRGF0YUVsZW1lbnQgewogcHVibGljOgogICAgIEZvcm1EYXRhRWxlbWVudCgpIDogbV90
eXBlKGRhdGEpIHsgfQogICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBWZWN0b3I8Y2hhcj4mIGFy
cmF5KSA6IG1fdHlwZShkYXRhKSwgbV9kYXRhKGFycmF5KSB7IH0KLSAgICBGb3JtRGF0YUVsZW1l
bnQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpIDogbV90
eXBlKGVuY29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFtZSksIG1fc2hvdWxkR2VuZXJhdGVG
aWxlKHNob3VsZEdlbmVyYXRlRmlsZSkgeyB9CisgICAgRm9ybURhdGFFbGVtZW50KGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBmaWxlU3RhcnQsIGxvbmcgbG9uZyBmaWxlTGVuZ3Ro
LCB0aW1lX3QgZmlsZU1vZGlmaWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKSA6
IG1fdHlwZShlbmNvZGVkRmlsZSksIG1fZmlsZW5hbWUoZmlsZW5hbWUpLCBtX2ZpbGVTdGFydChm
aWxlU3RhcnQpLCBtX2ZpbGVMZW5ndGgoZmlsZUxlbmd0aCksIG1fZmlsZU1vZGlmaWNhdGlvblRp
bWUoZmlsZU1vZGlmaWNhdGlvblRpbWUpLCBtX3Nob3VsZEdlbmVyYXRlRmlsZShzaG91bGRHZW5l
cmF0ZUZpbGUpIHsgfQogCiAgICAgZW51bSB7IGRhdGEsIGVuY29kZWRGaWxlIH0gbV90eXBlOwog
ICAgIFZlY3RvcjxjaGFyPiBtX2RhdGE7CiAgICAgU3RyaW5nIG1fZmlsZW5hbWU7CisgICAgbG9u
ZyBsb25nIG1fZmlsZVN0YXJ0OworICAgIGxvbmcgbG9uZyBtX2ZpbGVMZW5ndGg7CisgICAgdGlt
ZV90IG1fZmlsZU1vZGlmaWNhdGlvblRpbWU7CiAgICAgU3RyaW5nIG1fZ2VuZXJhdGVkRmlsZW5h
bWU7CiAgICAgYm9vbCBtX3Nob3VsZEdlbmVyYXRlRmlsZTsKIH07CkBAIC01MCw3ICs1NCw3IEBA
IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGFFbGVtZW50JiBhLCBjb25zdCBG
b3JtRGF0YUVsZW1lbnQmIGIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoYS5tX2Rh
dGEgIT0gYi5tX2RhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYS5tX2ZpbGVu
YW1lICE9IGIubV9maWxlbmFtZSkKKyAgICBpZiAoYS5tX2ZpbGVuYW1lICE9IGIubV9maWxlbmFt
ZSB8fCBhLm1fZmlsZVN0YXJ0ICE9IGIubV9maWxlU3RhcnQgfHwgYS5tX2ZpbGVMZW5ndGggIT0g
Yi5tX2ZpbGVMZW5ndGggfHwgYS5tX2ZpbGVNb2RpZmljYXRpb25UaW1lICE9IGIubV9maWxlTW9k
aWZpY2F0aW9uVGltZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7
CkBAIC03Miw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICB+Rm9ybURhdGEoKTsKICAgICAKICAgICB2
b2lkIGFwcGVuZERhdGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KTsKLSAgICB2b2lkIGFwcGVu
ZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBm
YWxzZSk7CisgICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcg
bG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgdGltZV90IG1vZGlmaWNhdGlvblRpbWUsIGJv
b2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOwogCiAgICAgdm9pZCBmbGF0dGVuKFZlY3Rv
cjxjaGFyPiYpIGNvbnN0OyAvLyBvbWl0cyBmaWxlcwogICAgIFN0cmluZyBmbGF0dGVuVG9TdHJp
bmcoKSBjb25zdDsgLy8gb21pdHMgZmlsZXMKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0gYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCmluZGV4IDhhYTlhNmQuLjM3NDA3MzcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0K
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQpA
QCAtMTI1LDYgKzEyNSw3IEBAIHN0cnVjdCBGb3JtU3RyZWFtRmllbGRzIHsKICAgICBTY2hlZHVs
ZVBhaXJIYXNoU2V0IHNjaGVkdWxlZFJ1bkxvb3BQYWlyczsKICAgICBWZWN0b3I8Rm9ybURhdGFF
bGVtZW50PiByZW1haW5pbmdFbGVtZW50czsgLy8gaW4gcmV2ZXJzZSBvcmRlcgogICAgIENGUmVh
ZFN0cmVhbVJlZiBjdXJyZW50U3RyZWFtOworICAgIGxvbmcgbG9uZyBjdXJyZW50U3RyZWFtUmFu
Z2VMZW5ndGg7CiAgICAgY2hhciogY3VycmVudERhdGE7CiAgICAgQ0ZSZWFkU3RyZWFtUmVmIGZv
cm1TdHJlYW07CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIHN0cmVhbUxlbmd0aDsKQEAgLTE0NSwx
MiArMTQ2LDEyIEBAIHN0YXRpYyB2b2lkIGNsb3NlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFtRmll
bGRzICpmb3JtKQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgYWR2YW5jZUN1cnJlbnRTdHJlYW0o
Rm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKK3N0YXRpYyBib29sIGFkdmFuY2VDdXJyZW50U3RyZWFt
KEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0pCiB7CiAgICAgY2xvc2VDdXJyZW50U3RyZWFtKGZvcm0p
OwogCiAgICAgaWYgKGZvcm0tPnJlbWFpbmluZ0VsZW1lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIENyZWF0ZSB0aGUgbmV3IHN0
cmVhbS4KICAgICBGb3JtRGF0YUVsZW1lbnQmIG5leHRJbnB1dCA9IGZvcm0tPnJlbWFpbmluZ0Vs
ZW1lbnRzLmxhc3QoKTsKQEAgLTE2MCwxMCArMTYxLDIxIEBAIHN0YXRpYyB2b2lkIGFkdmFuY2VD
dXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0pCiAgICAgICAgIGZvcm0tPmN1cnJl
bnRTdHJlYW0gPSBDRlJlYWRTdHJlYW1DcmVhdGVXaXRoQnl0ZXNOb0NvcHkoMCwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEpLCBzaXplLCBrQ0ZBbGxvY2F0b3JOdWxsKTsKICAg
ICAgICAgZm9ybS0+Y3VycmVudERhdGEgPSBkYXRhOwogICAgIH0gZWxzZSB7CisgICAgICAgIGlm
IChuZXh0SW5wdXQubV9maWxlTW9kaWZpY2F0aW9uVGltZSkgeworICAgICAgICAgICAgdGltZV90
IG1vZGlmaWNhdGlvblRpbWU7CisgICAgICAgICAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25U
aW1lKG5leHRJbnB1dC5tX2ZpbGVuYW1lLCBtb2RpZmljYXRpb25UaW1lKSB8fCBtb2RpZmljYXRp
b25UaW1lICE9IG5leHRJbnB1dC5tX2ZpbGVNb2RpZmljYXRpb25UaW1lKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCiAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0
aCA9IG5leHRJbnB1dC5tX3Nob3VsZEdlbmVyYXRlRmlsZSA/IG5leHRJbnB1dC5tX2dlbmVyYXRl
ZEZpbGVuYW1lIDogbmV4dElucHV0Lm1fZmlsZW5hbWU7CiAgICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gZmlsZW5hbWUoQWRvcHRDRiwgcGF0aC5jcmVhdGVDRlN0cmluZygpKTsKICAgICAg
ICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaWxlVVJMKEFkb3B0Q0YsIENGVVJMQ3JlYXRlV2l0aEZp
bGVTeXN0ZW1QYXRoKDAsIGZpbGVuYW1lLmdldCgpLCBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwgRkFM
U0UpKTsKICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbSA9IENGUmVhZFN0cmVhbUNyZWF0ZVdp
dGhGaWxlKDAsIGZpbGVVUkwuZ2V0KCkpOworICAgICAgICBpZiAobmV4dElucHV0Lm1fZmlsZVN0
YXJ0ID4gMCkgeworICAgICAgICAgICAgQ0ZOdW1iZXJSZWYgcG9zaXRpb24gPSBDRk51bWJlckNy
ZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nTG9uZ1R5cGUsICZuZXh0SW5wdXQubV9maWxlU3RhcnQpOwor
ICAgICAgICAgICAgQ0ZSZWFkU3RyZWFtU2V0UHJvcGVydHkoZm9ybS0+Y3VycmVudFN0cmVhbSwg
a0NGU3RyZWFtUHJvcGVydHlGaWxlQ3VycmVudE9mZnNldCwgcG9zaXRpb24pOworICAgICAgICB9
CisgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IG5leHRJbnB1dC5tX2Zp
bGVMZW5ndGg7CiAgICAgfQogICAgIGZvcm0tPnJlbWFpbmluZ0VsZW1lbnRzLnJlbW92ZUxhc3Qo
KTsKIApAQCAtMTc2LDE2ICsxODgsMTkgQEAgc3RhdGljIHZvaWQgYWR2YW5jZUN1cnJlbnRTdHJl
YW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKICAgICBTY2hlZHVsZVBhaXJIYXNoU2V0OjppdGVy
YXRvciBlbmQgPSBmb3JtLT5zY2hlZHVsZWRSdW5Mb29wUGFpcnMuZW5kKCk7CiAgICAgZm9yIChT
Y2hlZHVsZVBhaXJIYXNoU2V0OjppdGVyYXRvciBpdCA9IGZvcm0tPnNjaGVkdWxlZFJ1bkxvb3BQ
YWlycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIENGUmVhZFN0cmVhbVNjaGVk
dWxlV2l0aFJ1bkxvb3AoZm9ybS0+Y3VycmVudFN0cmVhbSwgKCppdCktPnJ1bkxvb3AoKSwgKCpp
dCktPm1vZGUoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgb3Blbk5l
eHRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyogZm9ybSkKK3N0YXRpYyBib29sIG9wZW5OZXh0U3Ry
ZWFtKEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0pCiB7CiAgICAgLy8gU2tpcCBvdmVyIGFueSBzdHJl
YW1zIHdlIGNhbid0IG9wZW4uCi0gICAgLy8gRm9yIHNvbWUgcHVycG9zZXMgd2UgbWlnaHQgd2Fu
dCB0byByZXR1cm4gYW4gZXJyb3IsIGJ1dCB0aGUgY3VycmVudCBOU1VSTENvbm5lY3Rpb24KLSAg
ICAvLyBjYW4ndCByZWFsbHkgZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggYW4gZXJyb3IgYXQgdGhp
cyBwb2ludCwgc28gdGhpcyBpcyBiZXR0ZXIuCi0gICAgYWR2YW5jZUN1cnJlbnRTdHJlYW0oZm9y
bSk7CisgICAgaWYgKCFhZHZhbmNlQ3VycmVudFN0cmVhbShmb3JtKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHdoaWxlIChmb3JtLT5jdXJyZW50U3RyZWFtICYmICFDRlJlYWRTdHJlYW1P
cGVuKGZvcm0tPmN1cnJlbnRTdHJlYW0pKQotICAgICAgICBhZHZhbmNlQ3VycmVudFN0cmVhbShm
b3JtKTsKKyAgICAgICAgaWYgKCFhZHZhbmNlQ3VycmVudFN0cmVhbShmb3JtKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIHZvaWQqIGZv
cm1DcmVhdGUoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgdm9pZCogY29udGV4dCkKQEAgLTE5NCw2
ICsyMDksNyBAQCBzdGF0aWMgdm9pZCogZm9ybUNyZWF0ZShDRlJlYWRTdHJlYW1SZWYgc3RyZWFt
LCB2b2lkKiBjb250ZXh0KQogCiAgICAgRm9ybVN0cmVhbUZpZWxkcyogbmV3SW5mbyA9IG5ldyBG
b3JtU3RyZWFtRmllbGRzOwogICAgIG5ld0luZm8tPmN1cnJlbnRTdHJlYW0gPSBOVUxMOworICAg
IG5ld0luZm8tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IC0xOwogICAgIG5ld0luZm8tPmN1
cnJlbnREYXRhID0gMDsKICAgICBuZXdJbmZvLT5mb3JtU3RyZWFtID0gc3RyZWFtOyAvLyBEb24n
dCByZXRhaW4uIFRoYXQgd291bGQgY3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xlLgogICAgIG5ld0lu
Zm8tPnN0cmVhbUxlbmd0aCA9IGZvcm1Db250ZXh0LT5zdHJlYW1MZW5ndGg7CkBAIC0yMjYsMTEg
KzI0MiwxMSBAQCBzdGF0aWMgQm9vbGVhbiBmb3JtT3BlbihDRlJlYWRTdHJlYW1SZWYsIENGU3Ry
ZWFtRXJyb3IqIGVycm9yLCBCb29sZWFuKiBvcGVuQ29tcAogewogICAgIEZvcm1TdHJlYW1GaWVs
ZHMqIGZvcm0gPSBzdGF0aWNfY2FzdDxGb3JtU3RyZWFtRmllbGRzKj4oY29udGV4dCk7CiAKLSAg
ICBvcGVuTmV4dFN0cmVhbShmb3JtKTsKKyAgICBib29sIG9wZW5lZCA9IG9wZW5OZXh0U3RyZWFt
KGZvcm0pOwogCi0gICAgKm9wZW5Db21wbGV0ZSA9IFRSVUU7Ci0gICAgZXJyb3ItPmVycm9yID0g
MDsKLSAgICByZXR1cm4gVFJVRTsKKyAgICAqb3BlbkNvbXBsZXRlID0gb3BlbmVkOworICAgIGVy
cm9yLT5lcnJvciA9IG9wZW5lZCA/IDAgOiBmbk9wbkVycjsKKyAgICByZXR1cm4gb3BlbmVkOwog
fQogCiBzdGF0aWMgQ0ZJbmRleCBmb3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBVSW50
OCogYnVmZmVyLCBDRkluZGV4IGJ1ZmZlckxlbmd0aCwgQ0ZTdHJlYW1FcnJvciogZXJyb3IsIEJv
b2xlYW4qIGF0RU9GLCB2b2lkKiBjb250ZXh0KQpAQCAtMjM4LDcgKzI1NCwxMCBAQCBzdGF0aWMg
Q0ZJbmRleCBmb3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBVSW50OCogYnVmZmVyLCBD
RkluZGV4IGJ1ZmZlckxlbgogICAgIEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0gPSBzdGF0aWNfY2Fz
dDxGb3JtU3RyZWFtRmllbGRzKj4oY29udGV4dCk7CiAKICAgICB3aGlsZSAoZm9ybS0+Y3VycmVu
dFN0cmVhbSkgewotICAgICAgICBDRkluZGV4IGJ5dGVzUmVhZCA9IENGUmVhZFN0cmVhbVJlYWQo
Zm9ybS0+Y3VycmVudFN0cmVhbSwgYnVmZmVyLCBidWZmZXJMZW5ndGgpOworICAgICAgICBDRklu
ZGV4IGJ5dGVzVG9SZWFkID0gYnVmZmVyTGVuZ3RoOworICAgICAgICBpZiAoZm9ybS0+Y3VycmVu
dFN0cmVhbVJhbmdlTGVuZ3RoICE9IC0xICYmIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0
aCA8IGJ5dGVzVG9SZWFkKQorICAgICAgICAgICAgYnl0ZXNUb1JlYWQgPSBzdGF0aWNfY2FzdDxD
RkluZGV4Pihmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGgpOworICAgICAgICBDRkluZGV4
IGJ5dGVzUmVhZCA9IENGUmVhZFN0cmVhbVJlYWQoZm9ybS0+Y3VycmVudFN0cmVhbSwgYnVmZmVy
LCBieXRlc1RvUmVhZCk7CiAgICAgICAgIGlmIChieXRlc1JlYWQgPCAwKSB7CiAgICAgICAgICAg
ICAqZXJyb3IgPSBDRlJlYWRTdHJlYW1HZXRFcnJvcihmb3JtLT5jdXJyZW50U3RyZWFtKTsKICAg
ICAgICAgICAgIHJldHVybiAtMTsKQEAgLTI0Nyw2ICsyNjYsOCBAQCBzdGF0aWMgQ0ZJbmRleCBm
b3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBVSW50OCogYnVmZmVyLCBDRkluZGV4IGJ1
ZmZlckxlbgogICAgICAgICAgICAgZXJyb3ItPmVycm9yID0gMDsKICAgICAgICAgICAgICphdEVP
RiA9IEZBTFNFOwogICAgICAgICAgICAgZm9ybS0+Ynl0ZXNTZW50ICs9IGJ5dGVzUmVhZDsKKyAg
ICAgICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gLTEpCisgICAg
ICAgICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoIC09IGJ5dGVzUmVhZDsK
IAogICAgICAgICAgICAgaWYgKCFSZXNvdXJjZUhhbmRsZTo6ZGlkU2VuZEJvZHlEYXRhRGVsZWdh
dGVFeGlzdHMoKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IGhvdyB0
byBvbmx5IGRvIHRoaXMgd2hlbiBhIFJlc291cmNlSGFuZGxlQ2xpZW50IGlzIGF2YWlsYWJsZS4K
QEAgLTM1OSw5ICszODAsMTMgQEAgdm9pZCBzZXRIVFRQQm9keShOU011dGFibGVVUkxSZXF1ZXN0
ICpyZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSkKICAgICAgICAgaWYgKGVs
ZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkKICAgICAgICAgICAgIGxlbmd0
aCArPSBlbGVtZW50Lm1fZGF0YS5zaXplKCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
bG9uZyBsb25nIGZpbGVTaXplOwotICAgICAgICAgICAgaWYgKGdldEZpbGVTaXplKGVsZW1lbnQu
bV9zaG91bGRHZW5lcmF0ZUZpbGUgPyBlbGVtZW50Lm1fZ2VuZXJhdGVkRmlsZW5hbWUgOiBlbGVt
ZW50Lm1fZmlsZW5hbWUsIGZpbGVTaXplKSkKLSAgICAgICAgICAgICAgICBsZW5ndGggKz0gZmls
ZVNpemU7CisgICAgICAgICAgICBpZiAoZWxlbWVudC5tX2ZpbGVMZW5ndGggIT0gLTEpCisgICAg
ICAgICAgICAgICAgbGVuZ3RoICs9IGVsZW1lbnQubV9maWxlTGVuZ3RoOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgbG9uZyBsb25nIGZpbGVTaXplOworICAgICAgICAgICAg
ICAgIGlmIChnZXRGaWxlU2l6ZShlbGVtZW50Lm1fc2hvdWxkR2VuZXJhdGVGaWxlID8gZWxlbWVu
dC5tX2dlbmVyYXRlZEZpbGVuYW1lIDogZWxlbWVudC5tX2ZpbGVuYW1lLCBmaWxlU2l6ZSkpCisg
ICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSBmaWxlU2l6ZTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IDMyODE4ZGYuLjk5N2Vl
YzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTQ0NCw3ICs0NDQsNyBAQCB2b2lkIFhNTEh0
dHBSZXF1ZXN0OjpzZW5kKEJsb2IqIGJvZHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAv
LyBGSVhNRTogU2hvdWxkIHdlIHNldCBhIENvbnRlbnQtVHlwZSBpZiBvbmUgaXMgbm90IHNldC4K
ICAgICAgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciB1cGxvYWRpbmcgYnVuZGxlcy4KICAg
ICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGUoKTsKLSAgICAgICAg
bV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZShib2R5LT5wYXRoKCksIGZhbHNlKTsKKyAg
ICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZShib2R5LT5wYXRoKCksIGJvZHkt
PnN0YXJ0KCksIGJvZHktPmxlbmd0aCgpLCBib2R5LT5tb2RpZmljYXRpb25UaW1lKCksIGZhbHNl
KTsKICAgICB9CiAKICAgICBjcmVhdGVSZXF1ZXN0KGVjKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDM4M2Nj
ZDQuLjkzZTQyZTggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE5IEBACiAyMDEwLTAyLTA5ICBK
aWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBCbG9iLnNsaWNlIHN1cHBvcnQuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjk5MworCisgICAgICAgIENocm9t
aXVtLXNpZGUgY2hhbmdlIHRvIHN1cHBvcnQgQmxvYi5zbGljZS4KKworICAgICAgICAqIHB1Ymxp
Yy9XZWJIVFRQQm9keS5oOgorICAgICAgICAqIHNyYy9XZWJIVFRQQm9keS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkhUVFBCb2R5OjplbGVtZW50QXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJI
VFRQQm9keTo6YXBwZW5kRmlsZSk6CisKKzIwMTAtMDItMDkgIEppYW4gTGkgIDxqaWFubGlAY2hy
b21pdW0ub3JnPgorCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KIAogICAgICAg
ICBbY2hyb21pdW1dIEFkZCB0aGUgY2hyb21pdW0gaW50ZXJmYWNlIHRvIHN1cHBvcnQgQmxvYi5z
bGljZS4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSFRUUEJvZHkuaCBi
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSFRUUEJvZHkuaAppbmRleCBmY2M0NGZmLi4yYTU0
YzQ0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkhUVFBCb2R5LmgKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJIVFRQQm9keS5oCkBAIC04MSw3ICs4MSw2IEBA
IHB1YmxpYzoKIAogICAgIC8vIEFwcGVuZCB0byB0aGUgbGlzdCBvZiBlbGVtZW50cy4KICAgICBX
RUJLSVRfQVBJIHZvaWQgYXBwZW5kRGF0YShjb25zdCBXZWJEYXRhJik7Ci0gICAgV0VCS0lUX0FQ
SSB2b2lkIGFwcGVuZEZpbGUoY29uc3QgV2ViU3RyaW5nJik7IC8vIEZJWE1FOiB0byBiZSByZW1v
dmVkLgogICAgIC8vIFBhc3NpbmcgLTEgdG8gZmlsZUxlbmd0aCBtZWFucyB0byB0aGUgZW5kIG9m
IHRoZSBmaWxlLgogICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFdlYlN0cmlu
ZyYsIGxvbmcgbG9uZyBmaWxlU3RhcnQsIGxvbmcgbG9uZyBmaWxlTGVuZ3RoLCBjb25zdCBXZWJG
aWxlSW5mbyYpOwogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhUVFBCb2R5
LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSFRUUEJvZHkuY3BwCmluZGV4IDNkNDA4Njku
LjY5MDMwZjQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSFRUUEJvZHkuY3Bw
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSFRUUEJvZHkuY3BwCkBAIC04Nyw5ICs4Nyw5
IEBAIGJvb2wgV2ViSFRUUEJvZHk6OmVsZW1lbnRBdChzaXplX3QgaW5kZXgsIEVsZW1lbnQmIHJl
c3VsdCkgY29uc3QKICAgICAgICAgcmVzdWx0LnR5cGUgPSBFbGVtZW50OjpUeXBlRmlsZTsKICAg
ICAgICAgcmVzdWx0LmRhdGEucmVzZXQoKTsKICAgICAgICAgcmVzdWx0LmZpbGVQYXRoID0gZWxl
bWVudC5tX2ZpbGVuYW1lOwotICAgICAgICByZXN1bHQuZmlsZVN0YXJ0ID0gMDsgLy8gRklYTUU6
IHRvIGJlIHNldCBmcm9tIEZvcm1EYXRhLgotICAgICAgICByZXN1bHQuZmlsZUxlbmd0aCA9IC0x
OyAvLyBGSVhNRTogdG8gYmUgc2V0IGZyb20gRm9ybURhdGEuCi0gICAgICAgIHJlc3VsdC5maWxl
SW5mby5tb2RpZmljYXRpb25UaW1lID0gMC4wOyAvLyBGSVhNRTogdG8gYmUgc2V0IGZyb20gRm9y
bURhdGEuCisgICAgICAgIHJlc3VsdC5maWxlU3RhcnQgPSBlbGVtZW50Lm1fZmlsZVN0YXJ0Owor
ICAgICAgICByZXN1bHQuZmlsZUxlbmd0aCA9IGVsZW1lbnQubV9maWxlTGVuZ3RoOworICAgICAg
ICByZXN1bHQuZmlsZUluZm8ubW9kaWZpY2F0aW9uVGltZSA9IGVsZW1lbnQubV9maWxlTW9kaWZp
Y2F0aW9uVGltZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkBAIC0xMDcsMTUgKzEwNywxMCBAQCB2b2lkIFdlYkhUVFBCb2R5Ojph
cHBlbmREYXRhKGNvbnN0IFdlYkRhdGEmIGRhdGEpCiAgICAgbV9wcml2YXRlLT5hcHBlbmREYXRh
KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CiB9CiAKLXZvaWQgV2ViSFRUUEJvZHk6OmFwcGVu
ZEZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCkKLXsKLSAgICBlbnN1cmVNdXRhYmxlKCk7
Ci0gICAgbV9wcml2YXRlLT5hcHBlbmRGaWxlKGZpbGVQYXRoKTsKLX0KLQogdm9pZCBXZWJIVFRQ
Qm9keTo6YXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoLCBsb25nIGxvbmcgZmls
ZVN0YXJ0LCBsb25nIGxvbmcgZmlsZUxlbmd0aCwgY29uc3QgV2ViRmlsZUluZm8mIGZpbGVJbmZv
KQogewotICAgIC8vIEZJWE1FOiB0byBiZSBpbXBsZW1lbnRlZC4KKyAgICBlbnN1cmVNdXRhYmxl
KCk7CisgICAgbV9wcml2YXRlLT5hcHBlbmRGaWxlKGZpbGVQYXRoLCBmaWxlU3RhcnQsIGZpbGVM
ZW5ndGgsIHN0YXRpY19jYXN0PHRpbWVfdD4oZmlsZUluZm8ubW9kaWZpY2F0aW9uVGltZSkpOwog
fQogCiBsb25nIGxvbmcgV2ViSFRUUEJvZHk6OmlkZW50aWZpZXIoKSBjb25zdAo=
</data>
<flag name="review"
          id="31236"
          type_id="1"
          status="-"
          setter="dimich"
    />
    <flag name="commit-queue"
          id="31237"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49327</attachid>
            <date>2010-02-23 14:23:31 -0800</date>
            <delta_ts>2010-02-23 17:38:25 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>32993_8</filename>
            <type>text/plain</type>
            <size>47763</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmNThkMTUxLi43OTZmODdh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMDItMjMgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJsb2Iuc2xpY2Ugc3VwcG9ydC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkzCisK
KyAgICAgICAgQWRkIEVOQUJMRV9CTE9CX1NMSUNFIGZlYXR1cmUgZGVmaW5lLgorCisgICAgICAg
ICogY29uZmlndXJlLmFjOgorCiAyMDEwLTAyLTIyICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlh
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5k
ZXggNjVjNDVhMi4uZjAzZjFjMyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTAy
LTIzICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbG9iLnNsaWNlIHN1cHBvcnQuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjk5MworCisgICAgICAg
IEFkZCBFTkFCTEVfQkxPQl9TTElDRSBmZWF0dXJlIGRlZmluZS4KKyAgICAgICAgQWxzbyBmaXgg
YSBwcm9ibGVtIHRoYXQgSlNWYWx1ZS50b0ludGVnZXIgaXMgbm90IGV4cG9zZWQgb24gV2luZG93
cy4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5kZWY6CisKIDIwMTAtMDItMjIgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcg
Yi9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpp
bmRleCA0YzRlMTkzLi5lYjk2YzI3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9Db25maWd1
cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZworKysgYi9KYXZhU2NyaXB0Q29yZS9Db25m
aWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtNDEsNiArNDEsNyBAQCBFTkFC
TEVfM0RfUkVOREVSSU5HXzEwNTAgPSBFTkFCTEVfM0RfUkVOREVSSU5HOwogRU5BQkxFXzNEX1JF
TkRFUklOR18xMDYwID0gRU5BQkxFXzNEX1JFTkRFUklORzsKIEVOQUJMRV8zRF9SRU5ERVJJTkdf
MTA3MCA9IEVOQUJMRV8zRF9SRU5ERVJJTkc7CiAKK0VOQUJMRV9CTE9CX1NMSUNFID0gRU5BQkxF
X0JMT0JfU0xJQ0U7CiBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcgPSBFTkFCTEVfQ0hBTk5FTF9N
RVNTQUdJTkc7CiBFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OID0gRU5BQkxFX0NMSUVO
VF9CQVNFRF9HRU9MT0NBVElPTjsKIEVOQUJMRV9EQVRBQkFTRSA9IEVOQUJMRV9EQVRBQkFTRTsK
QEAgLTc0LDQgKzc1LDQgQEAgRU5BQkxFX1hIVE1MTVAgPSA7CiBFTkFCTEVfWFBBVEggPSBFTkFC
TEVfWFBBVEg7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMg
PSAkKEVOQUJMRV8zRF9DQU5WQVMpICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQ0hB
Tk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikgJChFTkFC
TEVfREFUQUJBU0UpICQoRU5BQkxFX0RBVEFHUklEKSAkKEVOQUJMRV9EQVRBTElTVCkgJChFTkFC
TEVfRE9NX1NUT1JBR0UpICQoRU5BQkxFX0VWRU5UU09VUkNFKSAkKEVOQUJMRV9GSUxURVJTKSAk
KEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JTkRF
WEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9NQVRI
TUwpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykgJChFTkFCTEVfUlVCWSkgJChFTkFCTEVfU0FOREJPWCkgJChFTkFCTEVfU0hBUkVEX1dP
UktFUlMpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0FOSU1BVElPTikgJChFTkFCTEVfU1ZH
X0FTX0lNQUdFKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19G
T05UUykgJChFTkFCTEVfU1ZHX0ZPUkVJR05fT0JKRUNUKSAkKEVOQUJMRV9TVkdfVVNFKSAkKEVO
QUJMRV9WSURFTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dNTCkgJChFTkFCTEVf
V09SS0VSUykgJChFTkFCTEVfWEhUTUxNUCkgJChFTkFCTEVfWFBBVEgpICQoRU5BQkxFX1hTTFQp
OworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfQ0FOVkFTKSAkKEVOQUJMRV8zRF9SRU5E
RVJJTkcpICQoRU5BQkxFX0JMT0JfU0xJQ0UpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAk
KEVOQUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04pICQoRU5BQkxFX0RBVEFCQVNFKSAkKEVO
QUJMRV9EQVRBR1JJRCkgJChFTkFCTEVfREFUQUxJU1QpICQoRU5BQkxFX0RPTV9TVE9SQUdFKSAk
KEVOQUJMRV9FVkVOVFNPVVJDRSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfR0VPTE9DQVRJ
T04pICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChF
TkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9OT1RJ
RklDQVRJT05TKSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1JV
QlkpICQoRU5BQkxFX1NBTkRCT1gpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9T
VkcpICQoRU5BQkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFC
TEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NW
R19GT1JFSUdOX09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5B
QkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxF
X1hIVE1MTVApICQoRU5BQkxFX1hQQVRIKSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5kZWYgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCmluZGV4IDc2YWQzMDIuLjIwMzMyNDIgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5kZWYKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgpAQCAtMjY5LDYgKzI2OSw3
IEBAIEVYUE9SVFMKICAgICA/dG9Cb29sZWFuQEpTT2JqZWN0QEpTQ0BAVUJFX05QQVZFeGVjU3Rh
dGVAMkBAWgogICAgID90b0Jvb2xlYW5ASlNTdHJpbmdASlNDQEBFQkVfTlBBVkV4ZWNTdGF0ZUAy
QEBaCiAgICAgP3RvSW50MzJTbG93Q2FzZUBKU0NAQFlBSE5BQV9OQFoKKyAgICA/dG9JbnRlZ2Vy
QEpTVmFsdWVASlNDQEBRQkVOUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/dG9OdW1iZXJASlNDZWxs
QEpTQ0BAVUJFTlBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvTnVtYmVyQEpTT2JqZWN0QEpTQ0BA
VUJFTlBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvTnVtYmVyQEpTU3RyaW5nQEpTQ0BARUJFTlBB
VkV4ZWNTdGF0ZUAyQEBaCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDUzMDlkYi4uNTExOTUyZiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDM1IEBACisyMDEwLTAyLTIzICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbG9iLnNsaWNlIHN1
cHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
Mjk5MworCisgICAgICAgIEFkZCBhIG5ldyBsYXlvdXQgdGVzdCB0byB0ZXN0IHNsaWNpbmcgYW5k
IHNlbmRpbmcgYSBmaWxlLiBJbiBhZGRpdGlvbiwKKyAgICAgICAgdHdvIG5ldyBzY3JpcHRzIGFy
ZSBpbnRyb2R1Y2VkIHRvIGNyZWF0ZSBhbmQgdG91Y2ggdGhlIHRlbXAgZmlsZS4KKworICAgICAg
ICBNb3ZlIHNvbWUgY29kZSBmcm9tIHNlbmQtZHJhZ2dlZC1maWxlLmpzIHRvIGEgbmV3IGZpbGUK
KyAgICAgICAgc2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50LWZvci1kcmFnLmpzIHNvIHRoYXQgaXQg
Y2FuIGJlIHVzZWQgYnkgYm90aAorICAgICAgICBzZW5kLWRyYWdnZWQtZmlsZS5qcyBhbmQgc2Vu
ZC1zbGljZWQtZHJhZ2dlZC1maWxlLmpzIHRvIHNldHVwIHRoZSBpbnB1dAorICAgICAgICBlbGVt
ZW50IGZvciB0aGUgZmlsZSBkcmFnZ2luZy4KKworICAgICAgICBTaW5jZSB0aGUgQmxvYi5zbGlj
ZSBpcyBvbmx5IGVuYWJsZWQgZm9yIE1hYywgd2UgZGlzYWJsZSB0aGUgbmV3IHRlc3QKKyAgICAg
ICAgZm9yIGFsbCBvdGhlciBwbGF0Zm9ybXMuCisKKyAgICAgICAgKiBmYXN0L2RvbS9XaW5kb3cv
d2luZG93LXByb3BlcnRpZXMuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3Jlc291
cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9j
YWwvcmVzb3VyY2VzL3NlbmQtZHJhZ2dlZC1maWxlLmpzOgorICAgICAgICAqIGh0dHAvdGVzdHMv
bG9jYWwvcmVzb3VyY2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qczogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50
LWZvci1kcmFnLmpzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZHJh
Z2dlZC1maWxlLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1k
cmFnZ2VkLWZpbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xv
Y2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRw
L3Rlc3RzL3Jlc291cmNlcy90b3VjaC10ZW1wLWZpbGUucGhwOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3Jlc291cmNlcy93cml0ZS10ZW1wLWZpbGUucGhwOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOgorCiAyMDEwLTAyLTIyICBDaHJpcyBGbGVp
emFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgRml4aW5nIExheW91dCB0ZXN0
IGZhaWx1cmUuIE5vdCByZXZpZXdlZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9t
L1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwKaW5kZXggMDNlNjQ3OC4uYTVlMDBiNiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwK
QEAgLTcxLDcgKzcxLDggQEAgdmFyIF9fc2tpcF9fID0gewogICAgICJ3aW5kb3cuV2ViR0xVbnNp
Z25lZEJ5dGVBcnJheSIgOiAxLCAKICAgICAid2luZG93LldlYkdMVW5zaWduZWRJbnRBcnJheSIg
OiAxLCAKICAgICAid2luZG93LldlYkdMVW5zaWduZWRTaG9ydEFycmF5IiA6IDEsCi0gICAgIndp
bmRvdy5jbGllbnRJbmZvcm1hdGlvbi5nZW9sb2NhdGlvbiIgOiAxCisgICAgIndpbmRvdy5jbGll
bnRJbmZvcm1hdGlvbi5nZW9sb2NhdGlvbiIgOiAxLAorICAgICJ3aW5kb3cuQmxvYi5wcm90b3R5
cGUuc2xpY2UiIDogMQogfTsKIAogZnVuY3Rpb24gbG9nVmFsdWUodmFsdWVOYW1lKQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZmlsZS1mb3ItZHJh
Zy10by1zZW5kLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL2Zp
bGUtZm9yLWRyYWctdG8tc2VuZC50eHQKaW5kZXggNWFiMmY4YS4uNmE1MzdiNSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10
by1zZW5kLnR4dAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9m
aWxlLWZvci1kcmFnLXRvLXNlbmQudHh0CkBAIC0xICsxIEBACi1IZWxsbwpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKKzEyMzQ1Njc4OTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWRy
YWdnZWQtZmlsZS5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3Nl
bmQtZHJhZ2dlZC1maWxlLmpzCmluZGV4IGJlZDQwNzguLmVmYzExMjQgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtZHJhZ2dlZC1maWxlLmpz
CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtZHJhZ2dl
ZC1maWxlLmpzCkBAIC0xLDQ4ICsxLDIxIEBACiBkZXNjcmlwdGlvbigiVGVzdCBmb3Igc2VuZGlu
ZyBhIGRyYWdnZWQgZmlsZSB2aWEgWE1MSHR0cFJlcXVlc3QuIik7CiAKLXZhciBmaWxlSW5wdXQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotZmlsZUlucHV0LnR5cGUgPSAiZmls
ZSI7Ci1maWxlSW5wdXQuc3R5bGUud2lkdGggPSAiMTAwcHgiOwotZmlsZUlucHV0LnN0eWxlLmhl
aWdodCA9ICIxMDBweCI7Ci0vLyBJbXBvcnRhbnQgdGhhdCB3ZSBwdXQgdGhpcyBhdCB0aGUgdG9w
IG9mIHRoZSBkb2Mgc28gdGhhdCBsb2dnaW5nIGRvZXMgbm90IGNhdXNlIGl0IHRvIGdvIG91dCBv
ZiB2aWV3ICh3aGVyZSBpdCBjYW4ndCBiZSBkcmFnZ2VkIHRvKQotZG9jdW1lbnQuYm9keS5pbnNl
cnRCZWZvcmUoZmlsZUlucHV0LCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpOwotCi1maWxlSW5w
dXQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VudGVyIiwgZnVuY3Rpb24oKSB7Ci0gICAgZXZlbnQu
cHJldmVudERlZmF1bHQoKTsKLX0sIGZhbHNlKTsKLQotZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVu
ZXIoImRyYWdvdmVyIiwgZnVuY3Rpb24oKSB7Ci0gICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BF
ZmZlY3QgPSAiY29weSI7Ci0gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLX0sIGZhbHNlKTsK
LQotZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBmdW5jdGlvbigpIHsKLSAgICBp
ZiAoZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluZGV4T2YoIkZpbGVzIikgIT0gLTEgJiYgZXZl
bnQuZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aCA9PSAxKQotICAgICAgICB0ZXN0UGFzc2VkKCJl
dmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLiIpOwotICAg
IGVsc2UgewotICAgICAgICB0ZXN0RmFpbGVkKCJldmVudC5kYXRhVHJhbnNmZXIgZG9lcyBub3Qg
Y29udGFpbiBhIEZpbGUgb2JqZWN0IG9uIGRyb3AuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KK2Z1bmN0aW9uIG9uRmlsZURyb3AoZmlsZSkKK3sKICAgICB2YXIgeGhyID0gbmV3IFhNTEh0
dHBSZXF1ZXN0KCk7CiAgICAgeGhyLm9wZW4oIlBPU1QiLCAiaHR0cDovLzEyNy4wLjAuMTo4MDAw
L3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9wb3N0LWVjaG8uY2dpIiwgZmFsc2UpOwotICAgIHho
ci5zZW5kKGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlc1swXSk7Ci0gICAgaWYgKHhoci5yZXNwb25z
ZVRleHQgPT0gIkhlbGxvIikKKyAgICB4aHIuc2VuZChmaWxlKTsKKyAgICBpZiAoeGhyLnJlc3Bv
bnNlVGV4dCA9PSAiMTIzNDU2Nzg5MCIpCiAgICAgICAgIHRlc3RQYXNzZWQoIkV4cGVjdGVkIHJl
c3BvbnNlIGRhdGEgcmVjZWl2ZWQuIik7CiAgICAgZWxzZQogICAgICAgICB0ZXN0RmFpbGVkKCJV
bmV4cGVjdGVkIHJlc3BvbnNlIGRhdGEgcmVjZWl2ZWQ6ICIgKyB4aHIucmVzcG9uc2VUZXh0KTsK
IAogICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci19LCBmYWxzZSk7Ci0KLWZ1bmN0aW9uIG1v
dmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGVsZW1lbnQpIHsKLSAgICB2YXIgY2VudGVyWCA9IGVs
ZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOwotICAgIHZhciBjZW50
ZXJZID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7Ci0gICAg
ZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oY2VudGVyWCwgY2VudGVyWSk7CiB9CiAKIGZ1bmN0aW9u
IHJ1blRlc3QoKQogeworICAgIHNldEZpbGVJbnB1dERyb3BDYWxsYmFjayhvbkZpbGVEcm9wKTsK
ICAgICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMoWyJyZXNvdXJjZXMvZmlsZS1mb3It
ZHJhZy10by1zZW5kLnR4dCJdKTsKICAgICBtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudChmaWxl
SW5wdXQpOwogICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKQEAgLTUxLDcgKzI0LDcgQEAgZnVu
Y3Rpb24gcnVuVGVzdCgpCiBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CiAgICAgcnVuVGVzdCgp
OwogICAgIC8vIENsZWFuIHVwIGFmdGVyIG91cnNlbHZlcwotICAgIGZpbGVJbnB1dC5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKGZpbGVJbnB1dCk7CisgICAgcmVtb3ZlRmlsZUlucHV0RWxlbWVudCgp
OwogfSBlbHNlIHsKICAgICB0ZXN0RmFpbGVkKCJUaGlzIHRlc3QgaXMgbm90IGludGVyYWN0aXZl
LCBwbGVhc2UgcnVuIHVzaW5nIER1bXBSZW5kZXJUcmVlIik7CiB9CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZp
bGUuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLXNsaWNl
ZC1kcmFnZ2VkLWZpbGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIy
ODlhOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVz
b3VyY2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qcwpAQCAtMCwwICsxLDE1MCBAQAorZGVz
Y3JpcHRpb24oIlRlc3QgZm9yIHNsaWNpbmcgYSBkcmFnZ2VkIGZpbGUgYW5kIHNlbmRpbmcgaXQg
dmlhIFhNTEh0dHBSZXF1ZXN0LiIpOworCit2YXIgb3JpZ2luYWxUZXh0ID0gIjEyMzQ1Njc4OTAi
OwordmFyIHRlbXBGaWxlTmFtZSA9ICJzZW5kLXNsaWNlLWRyYWdnZWQtZmlsZS50bXAiOwordmFy
IHRlbXBGaWxlT3JpZ2luYWxNb2RpZmljYXRpb25UaW1lOwordmFyIHN1YmZpbGU7CisKK2Z1bmN0
aW9uIHVwbG9hZEZpbGUoZmlsZSwgZXhwZWN0ZWRUZXh0LCBleHBlY3RlZEV4Y2VwdGlvbikKK3sK
KyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9wZW4oIlBPU1Qi
LCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9wb3N0LWVj
aG8uY2dpIiwgZmFsc2UpOworCisgICAgdmFyIHBhc3NlZDsKKyAgICB2YXIgbWVzc2FnZTsKKyAg
ICB0cnkgeworICAgICAgICB4aHIuc2VuZChmaWxlKTsKKyAgICAgICAgaWYgKGV4cGVjdGVkRXhj
ZXB0aW9uKSB7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1lc3Nh
Z2UgPSAiVW5leHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNl
VGV4dCArICIuIEV4cGVjdGluZyBleGNlcHRpb24gdGhyb3duIjsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmICh4aHIucmVzcG9uc2VUZXh0ID09IGV4cGVjdGVkVGV4dCkgeworICAg
ICAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJF
eHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4dDsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgbWVzc2FnZSA9ICJVbmV4cGVjdGVkIHJlc3BvbnNlIGRhdGEgcmVjZWl2ZWQ6
ICIgKyB4aHIucmVzcG9uc2VUZXh0ICsgIi4gRXhwZWN0aW5nOiAiICsgZXhwZWN0ZWRUZXh0Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgaWYg
KGV4cGVjdGVkRXhjZXB0aW9uKSB7CisgICAgICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgICAg
ICAgICAgbWVzc2FnZSA9ICJFeHBlY3RlZCBleGNlcHRpb24gdGhyb3duOiAiICsgZXg7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1l
c3NhZ2UgPSAiVW5leHBlY3RlZCBleGNlcHRpb24gdGhyb3duOiAiICsgZXg7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAocGFzc2VkKQorICAgICAgICB0ZXN0UGFzc2VkKG1lc3NhZ2UpOwor
ICAgIGVsc2UKKyAgICAgICAgdGVzdEZhaWxlZChtZXNzYWdlKTsKK30KKworZnVuY3Rpb24gY3Jl
YXRlVGVtcEZpbGUoZmlsZURhdGEpCit7CisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVz
dCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9yZXNvdXJj
ZXMvd3JpdGUtdGVtcC1maWxlLnBocD9maWxlbmFtZT0iICsgdGVtcEZpbGVOYW1lICsgIiZkYXRh
PSIgKyBmaWxlRGF0YSwgZmFsc2UpOworICAgIHhoci5zZW5kKCk7CisgICAgaWYgKHhoci5zdGF0
dXMgIT0gMjAwKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIlVuZXhwZWN0ZWQgcmVzcG9uc2Ugc3Rh
dHVzIHJlY2VpdmVkOiAiICsgeGhyLnN0YXR1cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICB2YXIgdmFsdWVzID0geGhyLnJlc3BvbnNlVGV4dC5zcGxpdCgnXG4nKTsKKyAgICBpZiAo
dmFsdWVzLmxlbmd0aCA8IDIpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiVW5leHBlY3RlZCByZXNw
b25zZSB0ZXh0IHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWVzOworfQorCitmdW5jdGlvbiB0b3VjaFRlbXBG
aWxlKCkKK3sKKyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9w
ZW4oIlBPU1QiLCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3Jlc291cmNlcy90b3VjaC10ZW1wLWZp
bGUucGhwP2ZpbGVuYW1lPSIgKyB0ZW1wRmlsZU5hbWUsIGZhbHNlKTsKKyAgICB4aHIuc2VuZCgp
OworfQorCitmdW5jdGlvbiByZW1vdmVUZW1wRmlsZSgpCit7CisgICAgdmFyIHhociA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6
ODAwMC9yZXNvdXJjZXMvcmVzZXQtdGVtcC1maWxlLnBocD9maWxlbmFtZT0iICsgdGVtcEZpbGVO
YW1lLCBmYWxzZSk7CisgICAgeGhyLnNlbmQoKTsKK30KKworZnVuY3Rpb24gb25TdGFibGVGaWxl
RHJvcChmaWxlLCBzdGFydCwgbGVuZ3RoKQoreworICAgIC8vIFNsaWNlIHRoZSBmaWxlLgorICAg
IHN1YmZpbGUgPSBmaWxlLnNsaWNlKHN0YXJ0LCBsZW5ndGgpOworICAgIHZhciBleHBlY3RlZFRl
eHQgPSBvcmlnaW5hbFRleHQuc3Vic3RyaW5nKHN0YXJ0LCBzdGFydCArIGxlbmd0aCk7CisgICAg
c2hvdWxkRXZhbHVhdGVUbygic3ViZmlsZS5zaXplIiwgZXhwZWN0ZWRUZXh0Lmxlbmd0aCk7CisK
KyAgICAvLyBVcGxvYWQgdGhlIHNsaWNlZCBmaWxlLgorICAgIHVwbG9hZEZpbGUoc3ViZmlsZSwg
ZXhwZWN0ZWRUZXh0LCBmYWxzZSk7Cit9CisKK2Z1bmN0aW9uIGRyYWdBbmRTbGljZVN0YWJsZUZp
bGUoc3RhcnQsIGxlbmd0aCkKK3sKKyAgICBzZXRGaWxlSW5wdXREcm9wQ2FsbGJhY2soZnVuY3Rp
b24oZmlsZSkgeyBvblN0YWJsZUZpbGVEcm9wKGZpbGUsIHN0YXJ0LCBsZW5ndGgpOyB9KTsKKyAg
ICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMoWyJyZXNvdXJjZXMvZmlsZS1mb3ItZHJh
Zy10by1zZW5kLnR4dCJdKTsKKyAgICBtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudChmaWxlSW5w
dXQpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKK30KKworZnVuY3Rpb24gb25VbnN0YWJs
ZUZpbGVEcm9wKGZpbGUsIHN0YXJ0LCBsZW5ndGgpCit7CisgICAgLy8gU2xpY2UgdGhlIGZpbGUu
CisgICAgc3ViZmlsZSA9IGZpbGUuc2xpY2Uoc3RhcnQsIGxlbmd0aCk7CisgICAgdmFyIGV4cGVj
dGVkVGV4dCA9IG9yaWdpbmFsVGV4dC5zdWJzdHJpbmcoc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoKTsK
KyAgICBzaG91bGRFdmFsdWF0ZVRvKCJzdWJmaWxlLnNpemUiLCBleHBlY3RlZFRleHQubGVuZ3Ro
KTsKKyAgCisgICAgLy8gVXBsb2FkIHRoZSBzbGljZWQgZmlsZS4KKyAgICB1cGxvYWRGaWxlKHN1
YmZpbGUsIGV4cGVjdGVkVGV4dCwgZmFsc2UpOworCisgICAgLy8gVG91Y2ggdGhlIHVuZGVybHlp
bmcgdGVtcCBmaWxlLgorICAgIHRvdWNoVGVtcEZpbGUoKTsKKyAgICAKKyAgICAvLyBVcGxvYWQg
dGhlIHNsaWNlZCBmaWxlLiBXZSBzaG91bGQgcmVjZWl2ZSBhbiBleGNlcHRpb24gc2luY2UgdGhl
IGZpbGUgaGFzIGJlZW4gY2hhbmdlZC4KKyAgICB1cGxvYWRGaWxlKHN1YmZpbGUsIG51bGwsIHRy
dWUpOworCisgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wIGZpbGUuCisgICAgcmVtb3ZlVGVtcEZpbGUo
KTsKK30KKworZnVuY3Rpb24gZHJhZ0FuZFNsaWNlVW5zdGFibGVGaWxlKHN0YXJ0LCBsZW5ndGgp
Cit7CisgICAgdmFyIHRlbXBGaWxlSW5mbyA9IGNyZWF0ZVRlbXBGaWxlKG9yaWdpbmFsVGV4dCk7
CisgICAgaWYgKHRlbXBGaWxlSW5mby5sZW5ndGggPCAyKSB7CisgICAgICAgIGRvbmUoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2YXIgdGVtcEZpbGVQYXRoID0gdGVtcEZpbGVJbmZv
WzBdOworICAgIHRlbXBGaWxlT3JpZ2luYWxNb2RpZmljYXRpb25UaW1lID0gdGVtcEZpbGVJbmZv
WzFdOworCisgICAgc2V0RmlsZUlucHV0RHJvcENhbGxiYWNrKGZ1bmN0aW9uKGZpbGUpIHsgb25V
bnN0YWJsZUZpbGVEcm9wKGZpbGUsIHN0YXJ0LCBsZW5ndGgpOyB9KTsKKyAgICBldmVudFNlbmRl
ci5iZWdpbkRyYWdXaXRoRmlsZXMoW3RlbXBGaWxlUGF0aF0pOworICAgIG1vdmVNb3VzZVRvQ2Vu
dGVyT2ZFbGVtZW50KGZpbGVJbnB1dCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworfQor
CitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBkcmFnQW5kU2xpY2VTdGFibGVGaWxlKDIsIDQp
OworICAgIGRyYWdBbmRTbGljZVN0YWJsZUZpbGUoMiwgMjApOworICAgIGRyYWdBbmRTbGljZVN0
YWJsZUZpbGUoMTUsIDIwKTsKKworICAgIGRyYWdBbmRTbGljZVVuc3RhYmxlRmlsZSgzLCA1KTsK
K30KKworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHJ1blRlc3QoKTsKKyAgICAvLyBD
bGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMKKyAgICByZW1vdmVGaWxlSW5wdXRFbGVtZW50KCk7Cit9
IGVsc2UgeworICAgIHRlc3RGYWlsZWQoIlRoaXMgdGVzdCBpcyBub3QgaW50ZXJhY3RpdmUsIHBs
ZWFzZSBydW4gdXNpbmcgRHVtcFJlbmRlclRyZWUiKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jl
c291cmNlcy9zZXR1cC1maWxlLWlucHV0LWVsZW1lbnQtZm9yLWRyYWcuanMgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZXR1cC1maWxlLWlucHV0LWVsZW1lbnQtZm9y
LWRyYWcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUxYzY4MAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3Nl
dHVwLWZpbGUtaW5wdXQtZWxlbWVudC1mb3ItZHJhZy5qcwpAQCAtMCwwICsxLDQ2IEBACit2YXIg
ZmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKK2ZpbGVJbnB1dC50
eXBlID0gImZpbGUiOworZmlsZUlucHV0LnN0eWxlLndpZHRoID0gIjEwMHB4IjsKK2ZpbGVJbnB1
dC5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOworLy8gSW1wb3J0YW50IHRoYXQgd2UgcHV0IHRoaXMg
YXQgdGhlIHRvcCBvZiB0aGUgZG9jIHNvIHRoYXQgbG9nZ2luZyBkb2VzIG5vdCBjYXVzZSBpdCB0
byBnbyBvdXQgb2YgdmlldyAod2hlcmUgaXQgY2FuJ3QgYmUgZHJhZ2dlZCB0bykKK2RvY3VtZW50
LmJvZHkuaW5zZXJ0QmVmb3JlKGZpbGVJbnB1dCwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTsK
KworZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdlbnRlciIsIGZ1bmN0aW9uKCkgewor
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2ZpbGVJbnB1dC5hZGRF
dmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIGZ1bmN0aW9uKCkgeworICAgIGV2ZW50LmRhdGFUcmFu
c2Zlci5kcm9wRWZmZWN0ID0gImNvcHkiOworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9
LCBmYWxzZSk7CisKK3ZhciBmaWxlSW5wdXREcm9wQ2FsbGJhY2sgPSBudWxsOworZmlsZUlucHV0
LmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBmdW5jdGlvbigpIHsKKyAgICBpZiAoZXZlbnQuZGF0
YVRyYW5zZmVyLnR5cGVzLmluZGV4T2YoIkZpbGVzIikgIT0gLTEgJiYgZXZlbnQuZGF0YVRyYW5z
ZmVyLmZpbGVzLmxlbmd0aCA9PSAxKQorICAgICAgICB0ZXN0UGFzc2VkKCJldmVudC5kYXRhVHJh
bnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLiIpOworICAgIGVsc2UgeworICAg
ICAgICB0ZXN0RmFpbGVkKCJldmVudC5kYXRhVHJhbnNmZXIgZG9lcyBub3QgY29udGFpbiBhIEZp
bGUgb2JqZWN0IG9uIGRyb3AuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmaWxl
SW5wdXREcm9wQ2FsbGJhY2soZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzWzBdKTsKKworICAgIGV2
ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2Z1bmN0aW9uIHNldEZpbGVJbnB1
dERyb3BDYWxsYmFjayhmaWxlSW5wdXREcm9wQ2FsbGJhY2tGdW5jKQoreworICAgIGZpbGVJbnB1
dERyb3BDYWxsYmFjayA9IGZpbGVJbnB1dERyb3BDYWxsYmFja0Z1bmM7Cit9CisKK2Z1bmN0aW9u
IG1vdmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGVsZW1lbnQpCit7CisgICAgdmFyIGNlbnRlclgg
PSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMjsKKyAgICB2YXIg
Y2VudGVyWSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOwor
ICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGNlbnRlclgsIGNlbnRlclkpOworfQorCitmdW5j
dGlvbiByZW1vdmVGaWxlSW5wdXRFbGVtZW50KCkKK3sKKyAgICBmaWxlSW5wdXQucGFyZW50Tm9k
ZS5yZW1vdmVDaGlsZChmaWxlSW5wdXQpCit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWwKaW5kZXggM2YyMjEwYS4uZjUyODBmNCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmls
ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFnZ2VkLWZp
bGUuaHRtbApAQCAtNyw2ICs3LDcgQEAKIDxib2R5PgogPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+
CiA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2V0dXAt
ZmlsZS1pbnB1dC1lbGVtZW50LWZvci1kcmFnLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ii4u
Ly4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CiA8L2Jv
ZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2Vk
LWRyYWdnZWQtZmlsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2Fs
L3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYjQ2MDc5MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDIyIEBACitUZXN0IGZvciBzbGljaW5nIGEgZHJhZ2dlZCBmaWxlIGFuZCBzZW5k
aW5nIGl0IHZpYSBYTUxIdHRwUmVxdWVzdC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1MgZXZlbnQuZGF0YVRyYW5zZmVyIGNvbnRhaW5zIGEgRmlsZSBvYmplY3Qgb24gZHJv
cC4KK1BBU1Mgc3ViZmlsZS5zaXplIGlzIDQKK1BBU1MgRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSBy
ZWNlaXZlZDogMzQ1NgorUEFTUyBldmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9i
amVjdCBvbiBkcm9wLgorUEFTUyBzdWJmaWxlLnNpemUgaXMgOAorUEFTUyBFeHBlY3RlZCByZXNw
b25zZSBkYXRhIHJlY2VpdmVkOiAzNDU2Nzg5MAorUEFTUyBldmVudC5kYXRhVHJhbnNmZXIgY29u
dGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLgorUEFTUyBzdWJmaWxlLnNpemUgaXMgMAorUEFT
UyBFeHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAKK1BBU1MgZXZlbnQuZGF0YVRyYW5z
ZmVyIGNvbnRhaW5zIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4KK1BBU1Mgc3ViZmlsZS5zaXplIGlz
IDUKK1BBU1MgRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDogNDU2NzgKK1BBU1MgRXhw
ZWN0ZWQgZXhjZXB0aW9uIHRocm93bjogRXJyb3I6IE5FVFdPUktfRVJSOiBYTUxIdHRwUmVxdWVz
dCBFeGNlcHRpb24gMTAxCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5k
LXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwv
c2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYzA0MWIxZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKQEAgLTAsMCArMSwxNCBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvc2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50LWZvci1kcmFnLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZXMvdG91Y2gtdGVtcC1maWxlLnBocCBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VzL3RvdWNoLXRlbXAtZmlsZS5waHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI4MjlkZgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VzL3RvdWNoLXRlbXAtZmlsZS5waHAKQEAgLTAs
MCArMSwyMiBAQAorPD9waHAKK3JlcXVpcmVfb25jZSAncG9ydGFiaWxpdHlMYXllci5waHAnOwor
CitpZiAoIXN5c19nZXRfdGVtcF9kaXIoKSkgeworICAgIGVjaG8gIkZBSUw6IE5vIHRlbXAgZGly
IHdhcyByZXR1cm5lZC5cbiI7CisgICAgZXhpdCgpOworfQorCiskdG1wRmlsZSA9IHN5c19nZXRf
dGVtcF9kaXIoKSAuICIvIiAuICRfR0VUWydmaWxlbmFtZSddOworCiskc3RhdCA9IHN0YXQoJHRt
cEZpbGUpOworaWYgKCEkc3RhdCkgeworICAgIGVjaG8gIkZBSUw6IHN0YXQoKSBjYWxsIGZhaWxl
ZC5cbiI7CisgICAgZXhpdCgpOworfQorCiskbXRpbWUgPSAkc3RhdFsnbXRpbWUnXSArIDE7CisK
K2lmICghdG91Y2goJHRtcEZpbGUsICRtdGltZSkpIHsKKyAgICBlY2hvICJGQUlMOiB0b3VjaCgp
IGNhbGwgZmFpbGVkLlxuIjsKK30KKz8+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3Jlc291cmNlcy93cml0ZS10ZW1wLWZpbGUucGhwIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9yZXNvdXJjZXMvd3JpdGUtdGVtcC1maWxlLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5mZmUyYzhjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9yZXNvdXJjZXMvd3JpdGUtdGVtcC1maWxlLnBocApAQCAtMCwwICsxLDIwIEBACis8P3Bo
cAorcmVxdWlyZV9vbmNlICdwb3J0YWJpbGl0eUxheWVyLnBocCc7CisKK2lmICghc3lzX2dldF90
ZW1wX2RpcigpKSB7CisgICAgZWNobyAiRkFJTDogTm8gdGVtcCBkaXIgd2FzIHJldHVybmVkLlxu
IjsKKyAgICBleGl0KCk7Cit9CisKKyR0bXBGaWxlID0gc3lzX2dldF90ZW1wX2RpcigpIC4gIi8i
IC4gJF9HRVRbJ2ZpbGVuYW1lJ107CisKK2lmICghZmlsZV9wdXRfY29udGVudHMoJHRtcEZpbGUs
ICRfR0VUWydkYXRhJ10pKSB7CisgICAgZWNobyAiRkFJTDogdW5hYmxlIHRvIHdyaXRlIHRvIGZp
bGU6ICIgLiAkdG1wRmlsZSAuICJcbiI7CisgICAgZXhpdCgpOworfQorCiskc3RhdCA9IHN0YXQo
JHRtcEZpbGUpOworCitlY2hvICR0bXBGaWxlIC4gIlxuIjsKK2VjaG8gJHN0YXRbJ210aW1lJ107
Cis/PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCA1YzliNmJiLi5hNGM2ZTAxIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtMzQzNCw2ICszNDM0LDcgQEAgaHR0cC90ZXN0cy9s
b2FkaW5nL3ByZWxvYWQtaW1nLXRlc3QuaHRtbAogaHR0cC90ZXN0cy9sb2FkaW5nL3Nsb3ctcGFy
c2luZy1zdWJmcmFtZS5odG1sCiBodHRwL3Rlc3RzL2xvYWRpbmcvdGV4dC1jb250ZW50LXR5cGUt
d2l0aC1iaW5hcnktZXh0ZW5zaW9uLmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFnZ2Vk
LWZpbGUuaHRtbAoraHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRt
bAogaHR0cC90ZXN0cy9tZWRpYS92aWRlby1wbGF5LXN0YWxsLXNlZWsuaHRtbAogaHR0cC90ZXN0
cy9tZWRpYS92aWRlby1wbGF5LXN0YWxsLmh0bWwKIGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tc2Vl
a2FibGUtc3RhbGwuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tp
cHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKaW5kZXggODMxZjVlOS4uMTNj
ODMzMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAorKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCkBAIC01Myw2ICs1Myw3IEBAIHBsdWdpbnMv
c2V0LXN0YXR1cy5odG1sCiAjIEZhaWxpbmcgTG9jYWwgdGVzdHMKIGh0dHAvdGVzdHMvbG9jYWwv
ZHJhZy1vdmVyLXJlbW90ZS1jb250ZW50Lmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFn
Z2VkLWZpbGUuaHRtbAoraHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUu
aHRtbAogCiAjIEZhaWxpbmcgbmF2aWdhdGlvbiB0ZXN0cwogaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L2FuY2hvci1mcmFtZXMuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2lu
L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAppbmRleCAxOGViYjY4
Li40NGE1ZjU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZApAQCAtNjYwLDYgKzY2MCw3IEBA
IGZhc3QvZm9ybXMvaW5wdXQtc2VsZWN0ZWRvcHRpb24uaHRtbAogCiAjIDxodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkyODc+CiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQt
ZHJhZ2dlZC1maWxlLmh0bWwKK2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1m
aWxlLmh0bWwKIAogIyA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5
Mjg5PgogcGx1Z2lucy9kZXN0cm95LWR1cmluZy1ucHAtbmV3Lmh0bWwKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQzZGY0Zi4uOWM3MzM4
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw1MSBAQAorMjAxMC0wMi0yMyAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQmxv
Yi5zbGljZSBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzI5OTMKKyAgICAgICAgCisgICAgICAgIFRoZSBmb2xsb3dpbmcgc2VtYW50aWMg
aXMgYWRvcHRlZCBwZXIgdGhlIGRpc2N1c3Npb25zIG9uIHB1YmxpYy13ZWJhcHBzOgorICAgICAg
ICAxKSBGaWxlLnNsaWNlKCkgZG9lcyBhIHN5bmNocm9ub3VzIElPIHRvIGNhcHR1cmUgdGhlIGN1
cnJlbnQgc2l6ZSBhbmQKKyAgICAgICAgICAgbW9kaWZpY2F0aW9uIHRpbWUgYW5kIGNhY2hlIHRo
ZW0gaW4gdGhlIHJlc3VsdGluZyBCbG9iLgorICAgICAgICAyKSBTdWJzZXF1ZW50IEJsb2Igb3Bl
cmF0aW9ucywgbGlrZSBCbG9iLnNsaWNlIGFuZCBCbG9iLnNpemUgc2ltcGx5CisgICAgICAgICAg
IHVzZSB0aGUgY2FjaGVkIHZhbHVlcy4KKyAgICAgICAgMykgV2hlbiB0aGUgdW5kZXJseWluZyBm
aWxlIGRhdGEgYXJlIGFjY2Vzc2VkLCBsaWtlIGluIFhIUi5zZW5kKCksIHRoZQorICAgICAgICAg
ICBVQSB3aWxsIGNoZWNrIHRoZSBjYWNoZWQgbW9kaWZpY2F0aW9uIHRpbWUgYWdhaW5zdCB0aGUg
Y3VycmVudAorICAgICAgICAgICBtb2RpZmljYXRpb24gdGltZSB0byBkZXRlcm1pbmUgaWYgdGhl
IGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QuCisgICAgICAgICAgIEFuIGVycm9yIG9yIGV4
Y2VwdGlvbiB3aWxsIGJlIHRocm93biBpZiBuZWVkZWQuCisKKyAgICAgICAgQWxzbyBhZGQgRU5B
QkxFX0JMT0JfU0xJQ0UgZmVhdHVyZSBkZWZpbmUuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0
cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbAorCisgICAgICAgICogQ29uZmln
dXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWc6CisgICAgICAgICogaHRtbC9CbG9iLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6Qmxv
Yjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzbGljZSk6CisgICAgICAgICogaHRt
bC9CbG9iLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzdGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6bW9kaWZpY2F0aW9u
VGltZSk6CisgICAgICAgICogaHRtbC9CbG9iLmlkbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpkZWVwQ29weSk6
CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZVJhbmdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkZvcm1E
YXRhRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OmFkdmFuY2VDdXJyZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZW5OZXh0U3Ry
ZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Zm9ybU9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybVJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SFRUUEJvZHkpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2VuZCk6CisKIDIwMTAtMDItMjIgIEpvaG4g
U3VsbGl2YW4gIDxzdWxsaXZhbkBhcHBsZS5jb20+CiAgICAgICAgIAogICAgICAgICBSZXZpZXdl
ZCBieSBUaW0gSGF0Y2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMvRmVh
dHVyZURlZmluZXMueGNjb25maWcgYi9XZWJDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZp
bmVzLnhjY29uZmlnCmluZGV4IDRjNGUxOTMuLmViOTZjMjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKKysrIGIvV2ViQ29yZS9Db25m
aWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtNDEsNiArNDEsNyBAQCBFTkFC
TEVfM0RfUkVOREVSSU5HXzEwNTAgPSBFTkFCTEVfM0RfUkVOREVSSU5HOwogRU5BQkxFXzNEX1JF
TkRFUklOR18xMDYwID0gRU5BQkxFXzNEX1JFTkRFUklORzsKIEVOQUJMRV8zRF9SRU5ERVJJTkdf
MTA3MCA9IEVOQUJMRV8zRF9SRU5ERVJJTkc7CiAKK0VOQUJMRV9CTE9CX1NMSUNFID0gRU5BQkxF
X0JMT0JfU0xJQ0U7CiBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcgPSBFTkFCTEVfQ0hBTk5FTF9N
RVNTQUdJTkc7CiBFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OID0gRU5BQkxFX0NMSUVO
VF9CQVNFRF9HRU9MT0NBVElPTjsKIEVOQUJMRV9EQVRBQkFTRSA9IEVOQUJMRV9EQVRBQkFTRTsK
QEAgLTc0LDQgKzc1LDQgQEAgRU5BQkxFX1hIVE1MTVAgPSA7CiBFTkFCTEVfWFBBVEggPSBFTkFC
TEVfWFBBVEg7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMg
PSAkKEVOQUJMRV8zRF9DQU5WQVMpICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQ0hB
Tk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikgJChFTkFC
TEVfREFUQUJBU0UpICQoRU5BQkxFX0RBVEFHUklEKSAkKEVOQUJMRV9EQVRBTElTVCkgJChFTkFC
TEVfRE9NX1NUT1JBR0UpICQoRU5BQkxFX0VWRU5UU09VUkNFKSAkKEVOQUJMRV9GSUxURVJTKSAk
KEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JTkRF
WEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9NQVRI
TUwpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykgJChFTkFCTEVfUlVCWSkgJChFTkFCTEVfU0FOREJPWCkgJChFTkFCTEVfU0hBUkVEX1dP
UktFUlMpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0FOSU1BVElPTikgJChFTkFCTEVfU1ZH
X0FTX0lNQUdFKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19G
T05UUykgJChFTkFCTEVfU1ZHX0ZPUkVJR05fT0JKRUNUKSAkKEVOQUJMRV9TVkdfVVNFKSAkKEVO
QUJMRV9WSURFTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dNTCkgJChFTkFCTEVf
V09SS0VSUykgJChFTkFCTEVfWEhUTUxNUCkgJChFTkFCTEVfWFBBVEgpICQoRU5BQkxFX1hTTFQp
OworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfQ0FOVkFTKSAkKEVOQUJMRV8zRF9SRU5E
RVJJTkcpICQoRU5BQkxFX0JMT0JfU0xJQ0UpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAk
KEVOQUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04pICQoRU5BQkxFX0RBVEFCQVNFKSAkKEVO
QUJMRV9EQVRBR1JJRCkgJChFTkFCTEVfREFUQUxJU1QpICQoRU5BQkxFX0RPTV9TVE9SQUdFKSAk
KEVOQUJMRV9FVkVOVFNPVVJDRSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfR0VPTE9DQVRJ
T04pICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChF
TkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9OT1RJ
RklDQVRJT05TKSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1JV
QlkpICQoRU5BQkxFX1NBTkRCT1gpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9T
VkcpICQoRU5BQkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFC
TEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NW
R19GT1JFSUdOX09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5B
QkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxF
X1hIVE1MTVApICQoRU5BQkxFX1hQQVRIKSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9CbG9iLmNwcCBiL1dlYkNvcmUvaHRtbC9CbG9iLmNwcAppbmRleCAwYjY3N2Vh
Li4yZTJkNjdhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKKysrIGIvV2ViQ29y
ZS9odG1sL0Jsb2IuY3BwCkBAIC0zNywxNyArMzcsNzcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICA6IG1fcGF0aChwYXRoKQorI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQorICAgICwgbV9zdGFydCgwKQorICAgICwgbV9sZW5ndGgoLTEp
CisgICAgLCBtX3NuYXBzaG90Q2FwdHVyZWQoZmFsc2UpCisgICAgLCBtX3NuYXBzaG90U2l6ZSgw
KQorICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoMC4wKQorI2VuZGlmCiB7CiB9CiAK
KyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKK0Jsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoLCBs
b25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNpemUs
IGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCisgICAgOiBtX3BhdGgocGF0aCkKKyAg
ICAsIG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX3NuYXBz
aG90Q2FwdHVyZWQodHJ1ZSkKKyAgICAsIG1fc25hcHNob3RTaXplKHNuYXBzaG90U2l6ZSkKKyAg
ICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkK
K3sKKyAgICBBU1NFUlQoc3RhcnQgPj0gMCAmJiBsZW5ndGggPj0gMCAmJiBzdGFydCArIGxlbmd0
aCA8PSBzbmFwc2hvdFNpemUgJiYgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKK30KKyNlbmRp
ZgorCiB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYjo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gRklY
TUU6IEphdmFTY3JpcHQgY2Fubm90IHJlcHJlc2VudCBzaXplcyBhcyBsYXJnZSBhcyB1bnNpZ25l
ZCBsb25nIGxvbmcsIHdlIG5lZWQgdG8KICAgICAvLyBjb21lIHVwIHdpdGggYW4gZXhjZXB0aW9u
IHRvIHRocm93IGlmIGZpbGUgc2l6ZSBpcyBub3QgcmVwcmVzZXRhYmxlLgorI2lmIEVOQUJMRShC
TE9CX1NMSUNFKQorICAgIGlmIChtX3NuYXBzaG90Q2FwdHVyZWQpCisgICAgICAgIHJldHVybiBt
X2xlbmd0aDsKKyNlbmRpZgogICAgIGxvbmcgbG9uZyBzaXplOwogICAgIGlmICghZ2V0RmlsZVNp
emUobV9wYXRoLCBzaXplKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSk7CiB9CiAKKyNpZiBFTkFCTEUoQkxPQl9TTElD
RSkKK1Bhc3NSZWZQdHI8QmxvYj4gQmxvYjo6c2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxv
bmcgbGVuZ3RoKSBjb25zdAoreworICAgIC8vIFdoZW4gd2Ugc2xpY2UgYSBmaWxlIGZvciB0aGUg
Zmlyc3QgdGltZSwgd2Ugb2J0YWluIGEgc25hcHNob3Qgb2YgdGhlIGZpbGUgYnkgY2FwdHVyaW5n
IGl0cyBjdXJyZW50IHNpemUgYW5kIG1vZGlmaWNhdGlvbiB0aW1lLgorICAgIC8vIFRoZSBtb2Rp
ZmljYXRpb24gdGltZSB3aWxsIGJlIHVzZWQgdG8gdmVyaWZ5IGlmIHRoZSBmaWxlIGhhcyBiZWVu
IGNoYW5nZWQgb3Igbm90LCB3aGVuIHRoZSB1bmRlcmx5aW5nIGRhdGEgYXJlIGFjY2Vzc2VkLgor
ICAgIGxvbmcgbG9uZyBzbmFwc2hvdFNpemU7CisgICAgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0
aW9uVGltZTsKKyAgICBpZiAobV9zbmFwc2hvdENhcHR1cmVkKSB7CisgICAgICAgIHNuYXBzaG90
U2l6ZSA9IG1fc25hcHNob3RTaXplOworICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUg
PSBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJ
ZiB3ZSBmYWlsIHRvIHJldHJpZXZlIHRoZSBzaXplIG9yIG1vZGlmaWNhdGlvbiB0aW1lLCBwcm9i
YWJseSBkdWUgdG8gdGhhdCB0aGUgZmlsZSBoYXMgYmVlbiBkZWxldGVkLCBhbiBlbXB0eSBibG9i
IHdpbGwgYmUgcmV0dXJuZWQuCisgICAgICAgIHRpbWVfdCBtb2RpZmljYXRpb25UaW1lOworICAg
ICAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwgc25hcHNob3RTaXplKSB8fCAhZ2V0RmlsZU1v
ZGlmaWNhdGlvblRpbWUobV9wYXRoLCBtb2RpZmljYXRpb25UaW1lKSkgeworICAgICAgICAgICAg
c25hcHNob3RTaXplID0gMDsKKyAgICAgICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9
IDA7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1l
ID0gbW9kaWZpY2F0aW9uVGltZTsKKyAgICB9CisKKyAgICAvLyBDbGFtcCB0aGUgcmFuZ2UgaWYg
aXQgZXhjZWVkcyB0aGUgc2l6ZSBsaW1pdC4KKyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAgICBz
dGFydCA9IDA7CisgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgIGxlbmd0aCA9IDA7CisKKyAg
ICBpZiAoc3RhcnQgPiBzbmFwc2hvdFNpemUpIHsKKyAgICAgICAgc3RhcnQgPSAwOworICAgICAg
ICBsZW5ndGggPSAwOworICAgIH0gZWxzZSBpZiAoc3RhcnQgKyBsZW5ndGggPiBzbmFwc2hvdFNp
emUpCisgICAgICAgIGxlbmd0aCA9IHNuYXBzaG90U2l6ZSAtIHN0YXJ0OworCisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBCbG9iKG1fcGF0aCwgbV9zdGFydCArIHN0YXJ0LCBsZW5ndGgsIHNuYXBz
aG90U2l6ZSwgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKSk7Cit9CisjZW5kaWYKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2IuaCBiL1dlYkNv
cmUvaHRtbC9CbG9iLmgKaW5kZXggYjkxMGU4Zi4uYmRhZWNkMSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL0Jsb2IuaAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYi5oCkBAIC0zMyw2ICszMyw3IEBA
CiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC00NywxNCArNDgsNDUgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB+QmxvYigpIHsgfQogCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgUGFz
c1JlZlB0cjxCbG9iPiBzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNv
bnN0OworI2VuZGlmCisKICAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBt
X3BhdGg7IH0KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OworI2lmIEVOQUJM
RShCTE9CX1NMSUNFKQorICAgIGxvbmcgbG9uZyBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
cnQ7IH0KKyAgICBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0K
KyAgICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc25hcHNob3RN
b2RpZmljYXRpb25UaW1lOyB9CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIEJsb2IoY29uc3Qg
U3RyaW5nJiBwYXRoKTsKIAogcHJpdmF0ZToKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICBC
bG9iKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3Ro
LCBsb25nIGxvbmcgc25hcHNob3RTaXplLCBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1l
KTsKKyNlbmRpZgorCisgICAgLy8gVGhlIHVuZGVybHlpbmcgcGF0aCBvZiB0aGUgZmlsZS1iYXNl
ZCBibG9iLiAKICAgICBTdHJpbmcgbV9wYXRoOworCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisg
ICAgLy8gVGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBmaWxlLWJhc2VkIGJsb2IuCisgICAg
bG9uZyBsb25nIG1fc3RhcnQ7CisKKyAgICAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBmaWxlLWJhc2Vk
IGJsb2IuIFRoZSB2YWx1ZSBvZiAtMSBtZWFucyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLgorICAg
IGxvbmcgbG9uZyBtX2xlbmd0aDsKKworICAgIC8vIEEgZmxhZyB0byB0ZWxsIGlmIGEgc25hcHNo
b3QgaGFzIGJlZW4gY2FwdHVyZWQuCisgICAgYm9vbCBtX3NuYXBzaG90Q2FwdHVyZWQ7CisKKyAg
ICAvLyBUaGUgc2l6ZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25hcHNob3QgaXMgY2FwdHVyZWQuIEl0
IGNhbiBiZSAwIGlmIHRoZSBmaWxlIGlzIGVtcHR5LgorICAgIGxvbmcgbG9uZyBtX3NuYXBzaG90
U2l6ZTsKKworICAgIC8vIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIHRoZSBmaWxlIHdo
ZW4gYSBzbmFwc2hvdCBpcyBjYXB0dXJlZC4gVGhlIHZhbHVlIG9mIDAgYWxzbyBtZWFucyB0aGF0
IHRoZSBzbmFwc2hvdCBpcyBub3QgY2FwdHVyZWQuCisgICAgZG91YmxlIG1fc25hcHNob3RNb2Rp
ZmljYXRpb25UaW1lOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYi5pZGwgYi9XZWJDb3JlL2h0bWwvQmxvYi5pZGwKaW5k
ZXggNTczYmUzNS4uOGRiNjA2NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuaWRsCisr
KyBiL1dlYkNvcmUvaHRtbC9CbG9iLmlkbApAQCAtMzIsNiArMzIsMTAgQEAgbW9kdWxlIGh0bWwg
ewogCiAgICAgaW50ZXJmYWNlIEJsb2IgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5z
aWduZWQgbG9uZyBsb25nIHNpemU7CisgICAgICAgIAorI2lmIGRlZmluZWQoRU5BQkxFX0JMT0Jf
U0xJQ0UpICYmIEVOQUJMRV9CTE9CX1NMSUNFCisgICAgICAgIEJsb2Igc2xpY2UoaW4gbG9uZyBs
b25nIHN0YXJ0LCBpbiBsb25nIGxvbmcgbGVuZ3RoKTsKKyNlbmRpZgogICAgIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCmluZGV4IGFmM2I3ZjAuLjMwY2ExMzggMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcApAQCAtMTA4LDcgKzEwOCw3IEBAIFBh
c3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpkZWVwQ29weSgpIGNvbnN0CiAgICAgICAgICAg
ICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUubV9kYXRhKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6OmVuY29k
ZWRGaWxlOgotICAgICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRh
RWxlbWVudChlLm1fZmlsZW5hbWUsIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsKKyAgICAgICAg
ICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2ZpbGVu
YW1lLCBlLm1fZmlsZVN0YXJ0LCBlLm1fZmlsZUxlbmd0aCwgZS5tX2V4cGVjdGVkRmlsZU1vZGlm
aWNhdGlvblRpbWUsIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQpAQCAtMTI3LDkgKzEyNywxNiBAQCB2b2lkIEZvcm1EYXRhOjph
cHBlbmREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKQogCiB2b2lkIEZvcm1EYXRh
OjphcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVG
aWxlKQogewotICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChmaWxlbmFtZSwg
c2hvdWxkR2VuZXJhdGVGaWxlKSk7CisgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVt
ZW50KGZpbGVuYW1lLCAwLCAtMSwgMCwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CiB9CiAKKyNpZiBF
TkFCTEUoQkxPQl9TTElDRSkKK3ZvaWQgRm9ybURhdGE6OmFwcGVuZEZpbGVSYW5nZShjb25zdCBT
dHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJs
ZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpCit7CisgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9y
bURhdGFFbGVtZW50KGZpbGVuYW1lLCBzdGFydCwgbGVuZ3RoLCBleHBlY3RlZE1vZGlmaWNhdGlv
blRpbWUsIGZhbHNlKSk7Cit9CisjZW5kaWYKKwogdm9pZCBGb3JtRGF0YTo6ZmxhdHRlbihWZWN0
b3I8Y2hhcj4mIGRhdGEpIGNvbnN0CiB7CiAgICAgLy8gQ29uY2F0ZW5hdGUgYWxsIHRoZSBieXRl
IGFycmF5cywgYnV0IG9taXQgYW55IGZpbGVzLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEu
aAppbmRleCA3Mjc4ZjJlLi5hNjA3ZGRmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvRm9ybURhdGEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEu
aApAQCAtMzIsMTEgKzMyLDE0IEBAIGNsYXNzIEZvcm1EYXRhRWxlbWVudCB7CiBwdWJsaWM6CiAg
ICAgRm9ybURhdGFFbGVtZW50KCkgOiBtX3R5cGUoZGF0YSkgeyB9CiAgICAgRm9ybURhdGFFbGVt
ZW50KGNvbnN0IFZlY3RvcjxjaGFyPiYgYXJyYXkpIDogbV90eXBlKGRhdGEpLCBtX2RhdGEoYXJy
YXkpIHsgfQotICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29s
IHNob3VsZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVuYW1lKGZp
bGVuYW1lKSwgbV9zaG91bGRHZW5lcmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKSB7IH0KKyAg
ICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIGZpbGVT
dGFydCwgbG9uZyBsb25nIGZpbGVMZW5ndGgsIGRvdWJsZSBleHBlY3RlZEZpbGVNb2RpZmljYXRp
b25UaW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBt
X2ZpbGVuYW1lKGZpbGVuYW1lKSwgbV9maWxlU3RhcnQoZmlsZVN0YXJ0KSwgbV9maWxlTGVuZ3Ro
KGZpbGVMZW5ndGgpLCBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUoZXhwZWN0ZWRGaWxl
TW9kaWZpY2F0aW9uVGltZSksIG1fc2hvdWxkR2VuZXJhdGVGaWxlKHNob3VsZEdlbmVyYXRlRmls
ZSkgeyB9CiAKICAgICBlbnVtIHsgZGF0YSwgZW5jb2RlZEZpbGUgfSBtX3R5cGU7CiAgICAgVmVj
dG9yPGNoYXI+IG1fZGF0YTsKICAgICBTdHJpbmcgbV9maWxlbmFtZTsKKyAgICBsb25nIGxvbmcg
bV9maWxlU3RhcnQ7CisgICAgbG9uZyBsb25nIG1fZmlsZUxlbmd0aDsKKyAgICBkb3VibGUgbV9l
eHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lOwogICAgIFN0cmluZyBtX2dlbmVyYXRlZEZpbGVu
YW1lOwogICAgIGJvb2wgbV9zaG91bGRHZW5lcmF0ZUZpbGU7CiB9OwpAQCAtNTAsNyArNTMsNyBA
QCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYSwgY29uc3Qg
Rm9ybURhdGFFbGVtZW50JiBiKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGEubV9k
YXRhICE9IGIubV9kYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGEubV9maWxl
bmFtZSAhPSBiLm1fZmlsZW5hbWUpCisgICAgaWYgKGEubV9maWxlbmFtZSAhPSBiLm1fZmlsZW5h
bWUgfHwgYS5tX2ZpbGVTdGFydCAhPSBiLm1fZmlsZVN0YXJ0IHx8IGEubV9maWxlTGVuZ3RoICE9
IGIubV9maWxlTGVuZ3RoIHx8IGEubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lICE9IGIu
bV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTczLDYgKzc2LDkgQEAgcHVibGljOgogICAgIAogICAgIHZv
aWQgYXBwZW5kRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpOwogICAgIHZvaWQgYXBwZW5k
RmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZh
bHNlKTsKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICB2b2lkIGFwcGVuZEZpbGVSYW5nZShj
b25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgs
IGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOworI2VuZGlmCiAKICAgICB2b2lkIGZs
YXR0ZW4oVmVjdG9yPGNoYXI+JikgY29uc3Q7IC8vIG9taXRzIGZpbGVzCiAgICAgU3RyaW5nIGZs
YXR0ZW5Ub1N0cmluZygpIGNvbnN0OyAvLyBvbWl0cyBmaWxlcwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbSBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KaW5kZXggOGFhOWE2ZC4uOWE2
YWQ3NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0
cmVhbU1hYy5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3Ry
ZWFtTWFjLm1tCkBAIC0xMjUsNiArMTI1LDcgQEAgc3RydWN0IEZvcm1TdHJlYW1GaWVsZHMgewog
ICAgIFNjaGVkdWxlUGFpckhhc2hTZXQgc2NoZWR1bGVkUnVuTG9vcFBhaXJzOwogICAgIFZlY3Rv
cjxGb3JtRGF0YUVsZW1lbnQ+IHJlbWFpbmluZ0VsZW1lbnRzOyAvLyBpbiByZXZlcnNlIG9yZGVy
CiAgICAgQ0ZSZWFkU3RyZWFtUmVmIGN1cnJlbnRTdHJlYW07CisgICAgbG9uZyBsb25nIGN1cnJl
bnRTdHJlYW1SYW5nZUxlbmd0aDsKICAgICBjaGFyKiBjdXJyZW50RGF0YTsKICAgICBDRlJlYWRT
dHJlYW1SZWYgZm9ybVN0cmVhbTsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc3RyZWFtTGVuZ3Ro
OwpAQCAtMTQ1LDEyICsxNDYsMTIgQEAgc3RhdGljIHZvaWQgY2xvc2VDdXJyZW50U3RyZWFtKEZv
cm1TdHJlYW1GaWVsZHMgKmZvcm0pCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBhZHZhbmNlQ3Vy
cmVudFN0cmVhbShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQorc3RhdGljIGJvb2wgYWR2YW5jZUN1
cnJlbnRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKIHsKICAgICBjbG9zZUN1cnJlbnRT
dHJlYW0oZm9ybSk7CiAKICAgICBpZiAoZm9ybS0+cmVtYWluaW5nRWxlbWVudHMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gQ3JlYXRl
IHRoZSBuZXcgc3RyZWFtLgogICAgIEZvcm1EYXRhRWxlbWVudCYgbmV4dElucHV0ID0gZm9ybS0+
cmVtYWluaW5nRWxlbWVudHMubGFzdCgpOwpAQCAtMTYwLDEwICsxNjEsMjEgQEAgc3RhdGljIHZv
aWQgYWR2YW5jZUN1cnJlbnRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKICAgICAgICAg
Zm9ybS0+Y3VycmVudFN0cmVhbSA9IENGUmVhZFN0cmVhbUNyZWF0ZVdpdGhCeXRlc05vQ29weSgw
LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oZGF0YSksIHNpemUsIGtDRkFsbG9jYXRv
ck51bGwpOwogICAgICAgICBmb3JtLT5jdXJyZW50RGF0YSA9IGRhdGE7CiAgICAgfSBlbHNlIHsK
KyAgICAgICAgaWYgKG5leHRJbnB1dC5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUpIHsK
KyAgICAgICAgICAgIHRpbWVfdCBmaWxlTW9kaWZpY2F0aW9uVGltZTsKKyAgICAgICAgICAgIGlm
ICghZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUobmV4dElucHV0Lm1fZmlsZW5hbWUsIGZpbGVNb2Rp
ZmljYXRpb25UaW1lKSB8fCBmaWxlTW9kaWZpY2F0aW9uVGltZSAhPSBzdGF0aWNfY2FzdDx0aW1l
X3Q+KG5leHRJbnB1dC5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCiAgICAgICAgIGNvbnN0IFN0cmluZyYg
cGF0aCA9IG5leHRJbnB1dC5tX3Nob3VsZEdlbmVyYXRlRmlsZSA/IG5leHRJbnB1dC5tX2dlbmVy
YXRlZEZpbGVuYW1lIDogbmV4dElucHV0Lm1fZmlsZW5hbWU7CiAgICAgICAgIFJldGFpblB0cjxD
RlN0cmluZ1JlZj4gZmlsZW5hbWUoQWRvcHRDRiwgcGF0aC5jcmVhdGVDRlN0cmluZygpKTsKICAg
ICAgICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaWxlVVJMKEFkb3B0Q0YsIENGVVJMQ3JlYXRlV2l0
aEZpbGVTeXN0ZW1QYXRoKDAsIGZpbGVuYW1lLmdldCgpLCBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwg
RkFMU0UpKTsKICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbSA9IENGUmVhZFN0cmVhbUNyZWF0
ZVdpdGhGaWxlKDAsIGZpbGVVUkwuZ2V0KCkpOworICAgICAgICBpZiAobmV4dElucHV0Lm1fZmls
ZVN0YXJ0ID4gMCkgeworICAgICAgICAgICAgQ0ZOdW1iZXJSZWYgcG9zaXRpb24gPSBDRk51bWJl
ckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nTG9uZ1R5cGUsICZuZXh0SW5wdXQubV9maWxlU3RhcnQp
OworICAgICAgICAgICAgQ0ZSZWFkU3RyZWFtU2V0UHJvcGVydHkoZm9ybS0+Y3VycmVudFN0cmVh
bSwga0NGU3RyZWFtUHJvcGVydHlGaWxlQ3VycmVudE9mZnNldCwgcG9zaXRpb24pOworICAgICAg
ICB9CisgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IG5leHRJbnB1dC5t
X2ZpbGVMZW5ndGg7CiAgICAgfQogICAgIGZvcm0tPnJlbWFpbmluZ0VsZW1lbnRzLnJlbW92ZUxh
c3QoKTsKIApAQCAtMTc2LDE2ICsxODgsMTkgQEAgc3RhdGljIHZvaWQgYWR2YW5jZUN1cnJlbnRT
dHJlYW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKICAgICBTY2hlZHVsZVBhaXJIYXNoU2V0Ojpp
dGVyYXRvciBlbmQgPSBmb3JtLT5zY2hlZHVsZWRSdW5Mb29wUGFpcnMuZW5kKCk7CiAgICAgZm9y
IChTY2hlZHVsZVBhaXJIYXNoU2V0OjppdGVyYXRvciBpdCA9IGZvcm0tPnNjaGVkdWxlZFJ1bkxv
b3BQYWlycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIENGUmVhZFN0cmVhbVNj
aGVkdWxlV2l0aFJ1bkxvb3AoZm9ybS0+Y3VycmVudFN0cmVhbSwgKCppdCktPnJ1bkxvb3AoKSwg
KCppdCktPm1vZGUoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgb3Bl
bk5leHRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyogZm9ybSkKK3N0YXRpYyBib29sIG9wZW5OZXh0
U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0pCiB7CiAgICAgLy8gU2tpcCBvdmVyIGFueSBz
dHJlYW1zIHdlIGNhbid0IG9wZW4uCi0gICAgLy8gRm9yIHNvbWUgcHVycG9zZXMgd2UgbWlnaHQg
d2FudCB0byByZXR1cm4gYW4gZXJyb3IsIGJ1dCB0aGUgY3VycmVudCBOU1VSTENvbm5lY3Rpb24K
LSAgICAvLyBjYW4ndCByZWFsbHkgZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggYW4gZXJyb3IgYXQg
dGhpcyBwb2ludCwgc28gdGhpcyBpcyBiZXR0ZXIuCi0gICAgYWR2YW5jZUN1cnJlbnRTdHJlYW0o
Zm9ybSk7CisgICAgaWYgKCFhZHZhbmNlQ3VycmVudFN0cmVhbShmb3JtKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIHdoaWxlIChmb3JtLT5jdXJyZW50U3RyZWFtICYmICFDRlJlYWRTdHJl
YW1PcGVuKGZvcm0tPmN1cnJlbnRTdHJlYW0pKQotICAgICAgICBhZHZhbmNlQ3VycmVudFN0cmVh
bShmb3JtKTsKKyAgICAgICAgaWYgKCFhZHZhbmNlQ3VycmVudFN0cmVhbShmb3JtKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIHZvaWQq
IGZvcm1DcmVhdGUoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgdm9pZCogY29udGV4dCkKQEAgLTE5
NCw2ICsyMDksNyBAQCBzdGF0aWMgdm9pZCogZm9ybUNyZWF0ZShDRlJlYWRTdHJlYW1SZWYgc3Ry
ZWFtLCB2b2lkKiBjb250ZXh0KQogCiAgICAgRm9ybVN0cmVhbUZpZWxkcyogbmV3SW5mbyA9IG5l
dyBGb3JtU3RyZWFtRmllbGRzOwogICAgIG5ld0luZm8tPmN1cnJlbnRTdHJlYW0gPSBOVUxMOwor
ICAgIG5ld0luZm8tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IC0xOwogICAgIG5ld0luZm8t
PmN1cnJlbnREYXRhID0gMDsKICAgICBuZXdJbmZvLT5mb3JtU3RyZWFtID0gc3RyZWFtOyAvLyBE
b24ndCByZXRhaW4uIFRoYXQgd291bGQgY3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xlLgogICAgIG5l
d0luZm8tPnN0cmVhbUxlbmd0aCA9IGZvcm1Db250ZXh0LT5zdHJlYW1MZW5ndGg7CkBAIC0yMjYs
MTEgKzI0MiwxMSBAQCBzdGF0aWMgQm9vbGVhbiBmb3JtT3BlbihDRlJlYWRTdHJlYW1SZWYsIENG
U3RyZWFtRXJyb3IqIGVycm9yLCBCb29sZWFuKiBvcGVuQ29tcAogewogICAgIEZvcm1TdHJlYW1G
aWVsZHMqIGZvcm0gPSBzdGF0aWNfY2FzdDxGb3JtU3RyZWFtRmllbGRzKj4oY29udGV4dCk7CiAK
LSAgICBvcGVuTmV4dFN0cmVhbShmb3JtKTsKKyAgICBib29sIG9wZW5lZCA9IG9wZW5OZXh0U3Ry
ZWFtKGZvcm0pOwogCi0gICAgKm9wZW5Db21wbGV0ZSA9IFRSVUU7Ci0gICAgZXJyb3ItPmVycm9y
ID0gMDsKLSAgICByZXR1cm4gVFJVRTsKKyAgICAqb3BlbkNvbXBsZXRlID0gb3BlbmVkOworICAg
IGVycm9yLT5lcnJvciA9IG9wZW5lZCA/IDAgOiBmbk9wbkVycjsKKyAgICByZXR1cm4gb3BlbmVk
OwogfQogCiBzdGF0aWMgQ0ZJbmRleCBmb3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBV
SW50OCogYnVmZmVyLCBDRkluZGV4IGJ1ZmZlckxlbmd0aCwgQ0ZTdHJlYW1FcnJvciogZXJyb3Is
IEJvb2xlYW4qIGF0RU9GLCB2b2lkKiBjb250ZXh0KQpAQCAtMjM4LDcgKzI1NCwxMCBAQCBzdGF0
aWMgQ0ZJbmRleCBmb3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBVSW50OCogYnVmZmVy
LCBDRkluZGV4IGJ1ZmZlckxlbgogICAgIEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0gPSBzdGF0aWNf
Y2FzdDxGb3JtU3RyZWFtRmllbGRzKj4oY29udGV4dCk7CiAKICAgICB3aGlsZSAoZm9ybS0+Y3Vy
cmVudFN0cmVhbSkgewotICAgICAgICBDRkluZGV4IGJ5dGVzUmVhZCA9IENGUmVhZFN0cmVhbVJl
YWQoZm9ybS0+Y3VycmVudFN0cmVhbSwgYnVmZmVyLCBidWZmZXJMZW5ndGgpOworICAgICAgICBD
RkluZGV4IGJ5dGVzVG9SZWFkID0gYnVmZmVyTGVuZ3RoOworICAgICAgICBpZiAoZm9ybS0+Y3Vy
cmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IC0xICYmIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxl
bmd0aCA8IGJ5dGVzVG9SZWFkKQorICAgICAgICAgICAgYnl0ZXNUb1JlYWQgPSBzdGF0aWNfY2Fz
dDxDRkluZGV4Pihmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGgpOworICAgICAgICBDRklu
ZGV4IGJ5dGVzUmVhZCA9IENGUmVhZFN0cmVhbVJlYWQoZm9ybS0+Y3VycmVudFN0cmVhbSwgYnVm
ZmVyLCBieXRlc1RvUmVhZCk7CiAgICAgICAgIGlmIChieXRlc1JlYWQgPCAwKSB7CiAgICAgICAg
ICAgICAqZXJyb3IgPSBDRlJlYWRTdHJlYW1HZXRFcnJvcihmb3JtLT5jdXJyZW50U3RyZWFtKTsK
ICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTI0Nyw2ICsyNjYsOCBAQCBzdGF0aWMgQ0ZJbmRl
eCBmb3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBVSW50OCogYnVmZmVyLCBDRkluZGV4
IGJ1ZmZlckxlbgogICAgICAgICAgICAgZXJyb3ItPmVycm9yID0gMDsKICAgICAgICAgICAgICph
dEVPRiA9IEZBTFNFOwogICAgICAgICAgICAgZm9ybS0+Ynl0ZXNTZW50ICs9IGJ5dGVzUmVhZDsK
KyAgICAgICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gLTEpCisg
ICAgICAgICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoIC09IGJ5dGVzUmVh
ZDsKIAogICAgICAgICAgICAgaWYgKCFSZXNvdXJjZUhhbmRsZTo6ZGlkU2VuZEJvZHlEYXRhRGVs
ZWdhdGVFeGlzdHMoKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IGhv
dyB0byBvbmx5IGRvIHRoaXMgd2hlbiBhIFJlc291cmNlSGFuZGxlQ2xpZW50IGlzIGF2YWlsYWJs
ZS4KQEAgLTM1OSw5ICszODAsMTMgQEAgdm9pZCBzZXRIVFRQQm9keShOU011dGFibGVVUkxSZXF1
ZXN0ICpyZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSkKICAgICAgICAgaWYg
KGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkKICAgICAgICAgICAgIGxl
bmd0aCArPSBlbGVtZW50Lm1fZGF0YS5zaXplKCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgbG9uZyBsb25nIGZpbGVTaXplOwotICAgICAgICAgICAgaWYgKGdldEZpbGVTaXplKGVsZW1l
bnQubV9zaG91bGRHZW5lcmF0ZUZpbGUgPyBlbGVtZW50Lm1fZ2VuZXJhdGVkRmlsZW5hbWUgOiBl
bGVtZW50Lm1fZmlsZW5hbWUsIGZpbGVTaXplKSkKLSAgICAgICAgICAgICAgICBsZW5ndGggKz0g
ZmlsZVNpemU7CisgICAgICAgICAgICBpZiAoZWxlbWVudC5tX2ZpbGVMZW5ndGggIT0gLTEpCisg
ICAgICAgICAgICAgICAgbGVuZ3RoICs9IGVsZW1lbnQubV9maWxlTGVuZ3RoOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbG9uZyBsb25nIGZpbGVTaXplOworICAgICAgICAg
ICAgICAgIGlmIChnZXRGaWxlU2l6ZShlbGVtZW50Lm1fc2hvdWxkR2VuZXJhdGVGaWxlID8gZWxl
bWVudC5tX2dlbmVyYXRlZEZpbGVuYW1lIDogZWxlbWVudC5tX2ZpbGVuYW1lLCBmaWxlU2l6ZSkp
CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArPSBmaWxlU2l6ZTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuY3BwIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IDMyODE4ZGYuLmRh
OGQwZTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9X
ZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTQ0NCw3ICs0NDQsMTEgQEAgdm9pZCBY
TUxIdHRwUmVxdWVzdDo6c2VuZChCbG9iKiBib2R5LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAg
ICAgLy8gRklYTUU6IFNob3VsZCB3ZSBzZXQgYSBDb250ZW50LVR5cGUgaWYgb25lIGlzIG5vdCBz
ZXQuCiAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgdXBsb2FkaW5nIGJ1bmRsZXMu
CiAgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7CisjaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVuZEZp
bGVSYW5nZShib2R5LT5wYXRoKCksIGJvZHktPnN0YXJ0KCksIGJvZHktPmxlbmd0aCgpLCBib2R5
LT5tb2RpZmljYXRpb25UaW1lKCkpOworI2Vsc2UKICAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9k
eS0+YXBwZW5kRmlsZShib2R5LT5wYXRoKCksIGZhbHNlKTsKKyNlbmRpZgogICAgIH0KIAogICAg
IGNyZWF0ZVJlcXVlc3QoZWMpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA3YmRmNGI2Li40YjE5MWE0IDEwMDY0NAotLS0gYS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDEwLTAyLTIzICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbG9iLnNsaWNlIHN1
cHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
Mjk5MworCisgICAgICAgIEFkZCBFTkFCTEVfQkxPQl9TTElDRSBmZWF0dXJlIGRlZmluZS4KKwor
ICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgorCiAyMDEw
LTAyLTIyICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL0NvbmZp
Z3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnIGIvV2ViS2l0L21hYy9Db25maWd1cmF0
aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwppbmRleCA0YzRlMTkzLi5lYjk2YzI3IDEwMDY0
NAotLS0gYS9XZWJLaXQvbWFjL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmln
CisrKyBiL1dlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcK
QEAgLTQxLDYgKzQxLDcgQEAgRU5BQkxFXzNEX1JFTkRFUklOR18xMDUwID0gRU5BQkxFXzNEX1JF
TkRFUklORzsKIEVOQUJMRV8zRF9SRU5ERVJJTkdfMTA2MCA9IEVOQUJMRV8zRF9SRU5ERVJJTkc7
CiBFTkFCTEVfM0RfUkVOREVSSU5HXzEwNzAgPSBFTkFCTEVfM0RfUkVOREVSSU5HOwogCitFTkFC
TEVfQkxPQl9TTElDRSA9IEVOQUJMRV9CTE9CX1NMSUNFOwogRU5BQkxFX0NIQU5ORUxfTUVTU0FH
SU5HID0gRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HOwogRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9M
T0NBVElPTiA9IEVOQUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT047CiBFTkFCTEVfREFUQUJB
U0UgPSBFTkFCTEVfREFUQUJBU0U7CkBAIC03NCw0ICs3NSw0IEBAIEVOQUJMRV9YSFRNTE1QID0g
OwogRU5BQkxFX1hQQVRIID0gRU5BQkxFX1hQQVRIOwogRU5BQkxFX1hTTFQgPSBFTkFCTEVfWFNM
VDsKIAotRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfQ0FOVkFTKSAkKEVOQUJMRV8zRF9S
RU5ERVJJTkcpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DTElFTlRfQkFT
RURfR0VPTE9DQVRJT04pICQoRU5BQkxFX0RBVEFCQVNFKSAkKEVOQUJMRV9EQVRBR1JJRCkgJChF
TkFCTEVfREFUQUxJU1QpICQoRU5BQkxFX0RPTV9TVE9SQUdFKSAkKEVOQUJMRV9FVkVOVFNPVVJD
RSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0lDT05E
QVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVfSkFWQVNDUklQVF9E
RUJVR0dFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJM
RV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1JVQlkpICQoRU5BQkxFX1NBTkRC
T1gpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NWR19B
TklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJ
TkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVCkg
JChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAk
KEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hIVE1MTVApICQoRU5BQkxF
X1hQQVRIKSAkKEVOQUJMRV9YU0xUKTsKK0ZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX0NB
TlZBUykgJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9CTE9CX1NMSUNFKSAkKEVOQUJM
RV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKSAk
KEVOQUJMRV9EQVRBQkFTRSkgJChFTkFCTEVfREFUQUdSSUQpICQoRU5BQkxFX0RBVEFMSVNUKSAk
KEVOQUJMRV9ET01fU1RPUkFHRSkgJChFTkFCTEVfRVZFTlRTT1VSQ0UpICQoRU5BQkxFX0ZJTFRF
UlMpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9JQ09OREFUQUJBU0UpICQoRU5BQkxF
X0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICQoRU5BQkxF
X01BVEhNTCkgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfT0ZGTElORV9XRUJfQVBQ
TElDQVRJT05TKSAkKEVOQUJMRV9SVUJZKSAkKEVOQUJMRV9TQU5EQk9YKSAkKEVOQUJMRV9TSEFS
RURfV09SS0VSUykgJChFTkFCTEVfU1ZHKSAkKEVOQUJMRV9TVkdfQU5JTUFUSU9OKSAkKEVOQUJM
RV9TVkdfQVNfSU1BR0UpICQoRU5BQkxFX1NWR19ET01fT0JKQ19CSU5ESU5HUykgJChFTkFCTEVf
U1ZHX0ZPTlRTKSAkKEVOQUJMRV9TVkdfRk9SRUlHTl9PQkpFQ1QpICQoRU5BQkxFX1NWR19VU0Up
ICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9XRUJfU09DS0VUUykgJChFTkFCTEVfV01MKSAkKEVO
QUJMRV9XT1JLRVJTKSAkKEVOQUJMRV9YSFRNTE1QKSAkKEVOQUJMRV9YUEFUSCkgJChFTkFCTEVf
WFNMVCk7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9D
aGFuZ2VMb2cKaW5kZXggZWMyYmY2Yi4uMmRjOGI3ZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMv
Q2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisy
MDEwLTAyLTIzICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbG9iLnNsaWNlIHN1cHBvcnQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjk5MworCisg
ICAgICAgIEFkZCBFTkFCTEVfQkxPQl9TTElDRSBmZWF0dXJlIGRlZmluZSBhbmQgIGZsYWcgZm9y
IGJ1aWxkLXdlYmtpdC4gSXQgaXMKKyAgICAgICAgY3VycmVudGx5IG9ubHkgdHVybmVkIG9uIGZv
ciBNYWMuCisKKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDoKKwogMjAxMC0wMi0yMiAg
VG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdCBiL1dlYktpdFRvb2xzL1NjcmlwdHMvYnVpbGQt
d2Via2l0CmluZGV4IGNmNWFhYWQuLjg0YTVmZWEgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvYnVpbGQtd2Via2l0CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0
CkBAIC01Niw3ICs1Niw3IEBAIG15ICgkdGhyZWVEQ2FudmFzU3VwcG9ydCwgJHRocmVlRFJlbmRl
cmluZ1N1cHBvcnQsICRjaGFubmVsTWVzc2FnaW5nU3VwcG9ydCwgJGNsCiAgICAgJGphdmFTY3Jp
cHREZWJ1Z2dlclN1cHBvcnQsICRtYXRobWxTdXBwb3J0LCAkb2ZmbGluZVdlYkFwcGxpY2F0aW9u
U3VwcG9ydCwgJHJ1YnlTdXBwb3J0LCAkc2FuZGJveFN1cHBvcnQsICRzaGFyZWRXb3JrZXJzU3Vw
cG9ydCwKICAgICAkc3ZnU3VwcG9ydCwgJHN2Z0FuaW1hdGlvblN1cHBvcnQsICRzdmdBc0ltYWdl
U3VwcG9ydCwgJHN2Z0RPTU9iakNCaW5kaW5nc1N1cHBvcnQsICRzdmdGb250c1N1cHBvcnQsCiAg
ICAgJHN2Z0ZvcmVpZ25PYmplY3RTdXBwb3J0LCAkc3ZnVXNlU3VwcG9ydCwgJHZpZGVvU3VwcG9y
dCwgJHdlYlNvY2tldHNTdXBwb3J0LCAkd21sU3VwcG9ydCwgJHdjc3NTdXBwb3J0LCAkeGh0bWxt
cFN1cHBvcnQsICR3b3JrZXJzU3VwcG9ydCwKLSAgICAkeHBhdGhTdXBwb3J0LCAkeHNsdFN1cHBv
cnQsICRjb3ZlcmFnZVN1cHBvcnQsICRub3RpZmljYXRpb25zU3VwcG9ydCk7CisgICAgJHhwYXRo
U3VwcG9ydCwgJHhzbHRTdXBwb3J0LCAkY292ZXJhZ2VTdXBwb3J0LCAkbm90aWZpY2F0aW9uc1N1
cHBvcnQsICRibG9iU2xpY2VTdXBwb3J0KTsKIAogbXkgQGZlYXR1cmVzID0gKAogICAgIHsgb3B0
aW9uID0+ICIzZC1jYW52YXMiLCBkZXNjID0+ICJUb2dnbGUgM0QgY2FudmFzIHN1cHBvcnQiLApA
QCAtNjUsNiArNjUsOSBAQCBteSBAZmVhdHVyZXMgPSAoCiAgICAgeyBvcHRpb24gPT4gIjNkLXJl
bmRlcmluZyIsIGRlc2MgPT4gIlRvZ2dsZSAzRCByZW5kZXJpbmcgc3VwcG9ydCIsCiAgICAgICBk
ZWZpbmUgPT4gIkVOQUJMRV8zRF9SRU5ERVJJTkciLCBkZWZhdWx0ID0+IChpc0FwcGxlTWFjV2Vi
S2l0KCkgJiYgIWlzVGlnZXIoKSksIHZhbHVlID0+IFwkdGhyZWVEUmVuZGVyaW5nU3VwcG9ydCB9
LAogCisgICAgeyBvcHRpb24gPT4gImJsb2Itc2xpY2UiLCBkZXNjID0+ICJUb2dnbGUgQmxvYi5z
bGljZSBzdXBwb3J0IiwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0JMT0JfU0xJQ0UiLCBkZWZh
dWx0ID0+IChpc0FwcGxlTWFjV2ViS2l0KCkpLCB2YWx1ZSA9PiBcJGJsb2JTbGljZVN1cHBvcnQg
fSwKKwogICAgIHsgb3B0aW9uID0+ICJjaGFubmVsLW1lc3NhZ2luZyIsIGRlc2MgPT4gIlRvZ2ds
ZSBNZXNzYWdlQ2hhbm5lbCBhbmQgTWVzc2FnZVBvcnQgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUg
PT4gIkVOQUJMRV9DSEFOTkVMX01FU1NBR0lORyIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRj
aGFubmVsTWVzc2FnaW5nU3VwcG9ydCB9LAogCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9j
b25maWd1cmUuYWMKaW5kZXggODk4ZTVkYi4uODkwOGYwOSAxMDA2NDQKLS0tIGEvY29uZmlndXJl
LmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtNTUzLDYgKzU1MywxNCBAQCBBQ19BUkdfRU5BQkxF
KHdlYl9zb2NrZXRzLAogICAgICAgICAgICAgICBbXSxbZW5hYmxlX3dlYl9zb2NrZXRzPSJubyJd
KQogQUNfTVNHX1JFU1VMVChbJGVuYWJsZV93ZWJfc29ja2V0c10pCiAKKyMgY2hlY2sgd2hldGhl
ciB0byBlbmFibGUgQmxvYi5zbGljZSBzdXBwb3J0CitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIg
dG8gZW5hYmxlIEJsb2Iuc2xpY2Ugc3VwcG9ydF0pCitBQ19BUkdfRU5BQkxFKGJsb2Jfc2xpY2Us
CisgICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1ibG9iLXNsaWNlXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZSBzdXBwb3J0IGZvciBCbG9iLnNsaWNl
IFtkZWZhdWx0PW5vXV0pLAorICAgICAgICAgICAgICBbXSxbZW5hYmxlX2Jsb2Jfc2xpY2U9Im5v
Il0pCitBQ19NU0dfUkVTVUxUKFskZW5hYmxlX2Jsb2Jfc2xpY2VdKQorCiAjIGNoZWNrIHdoZXRo
ZXIgdG8gZW5hYmxlIGNvZGUgY292ZXJhZ2UKIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBl
bmFibGUgY29kZSBjb3ZlcmFnZSBzdXBwb3J0XSkKIEFDX0FSR19FTkFCTEUoY292ZXJhZ2UsCkBA
IC03NzYsNiArNzg0LDcgQEAgQU1fQ09ORElUSU9OQUwoW1VTRV9QQU5HT10sIFt0ZXN0ICIkd2l0
aF9mb250X2JhY2tlbmQiID0gInBhbmdvIl0pCiAjIFdlYktpdCBmZWF0dXJlIGNvbmRpdGlvbmFs
cwogQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9ERUJVR10sW3Rlc3QgIiRlbmFibGVfZGVidWciID0g
InllcyJdKQogQU1fQ09ORElUSU9OQUwoW0VOQUJMRV8zRF9UUkFOU0ZPUk1TXSxbdGVzdCAiJGVu
YWJsZV8zRF90cmFuc2Zvcm1zIiA9ICJ5ZXMiXSkKK0FNX0NPTkRJVElPTkFMKFtFTkFCTEVfQkxP
Ql9TTElDRV0sW3Rlc3QgIiRlbmFibGVfYmxvYl9zbGljZSIgPSAieWVzIl0pCiBBTV9DT05ESVRJ
T05BTChbRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HXSxbdGVzdCAiJGVuYWJsZV9jaGFubmVsX21l
c3NhZ2luZyIgPSAieWVzIl0pCiBBTV9DT05ESVRJT05BTChbRU5BQkxFX0pBVkFTQ1JJUFRfREVC
VUdHRVJdLFt0ZXN0ICIkZW5hYmxlX2phdmFzY3JpcHRfZGVidWdnZXIiID0gInllcyJdKQogQU1f
Q09ORElUSU9OQUwoW0VOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlNdLFt0ZXN0ICIkZW5h
YmxlX29mZmxpbmVfd2ViX2FwcGxpY2F0aW9ucyIgPSAieWVzIl0pCkBAIC04MzgsNiArODQ3LDcg
QEAgQnVpbGQgY29uZmlndXJhdGlvbjoKICBPcHRpbWl6ZWQgbWVtb3J5IGFsbG9jYXRvciAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZmFzdF9tYWxsb2MKIEZlYXR1cmVz
OgogIDNEIFRyYW5zZm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogJGVuYWJsZV8zRF90cmFuc2Zvcm1zCisgQmxvYi5zbGljZSBzdXBwb3J0ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2Jsb2Jfc2xpY2UKICBKSVQg
Y29tcGlsYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRl
bmFibGVfaml0CiAgRmlsdGVycyBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiAkZW5hYmxlX2ZpbHRlcnMKICBHZW9sb2NhdGlvbiBzdXBwb3J0ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZ2VvbG9jYXRpb24K
</data>
<flag name="commit-queue"
          id="32171"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49347</attachid>
            <date>2010-02-23 17:38:25 -0800</date>
            <delta_ts>2010-02-24 10:30:52 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>32993_9</filename>
            <type>text/plain</type>
            <size>47966</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmNThkMTUxLi43OTZmODdh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMDItMjMgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJsb2Iuc2xpY2Ugc3VwcG9ydC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkzCisK
KyAgICAgICAgQWRkIEVOQUJMRV9CTE9CX1NMSUNFIGZlYXR1cmUgZGVmaW5lLgorCisgICAgICAg
ICogY29uZmlndXJlLmFjOgorCiAyMDEwLTAyLTIyICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlh
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5k
ZXggNjVjNDVhMi4uZjAzZjFjMyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTAy
LTIzICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbG9iLnNsaWNlIHN1cHBvcnQuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjk5MworCisgICAgICAg
IEFkZCBFTkFCTEVfQkxPQl9TTElDRSBmZWF0dXJlIGRlZmluZS4KKyAgICAgICAgQWxzbyBmaXgg
YSBwcm9ibGVtIHRoYXQgSlNWYWx1ZS50b0ludGVnZXIgaXMgbm90IGV4cG9zZWQgb24gV2luZG93
cy4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5kZWY6CisKIDIwMTAtMDItMjIgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcg
Yi9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpp
bmRleCA0YzRlMTkzLi5lYjk2YzI3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9Db25maWd1
cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZworKysgYi9KYXZhU2NyaXB0Q29yZS9Db25m
aWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtNDEsNiArNDEsNyBAQCBFTkFC
TEVfM0RfUkVOREVSSU5HXzEwNTAgPSBFTkFCTEVfM0RfUkVOREVSSU5HOwogRU5BQkxFXzNEX1JF
TkRFUklOR18xMDYwID0gRU5BQkxFXzNEX1JFTkRFUklORzsKIEVOQUJMRV8zRF9SRU5ERVJJTkdf
MTA3MCA9IEVOQUJMRV8zRF9SRU5ERVJJTkc7CiAKK0VOQUJMRV9CTE9CX1NMSUNFID0gRU5BQkxF
X0JMT0JfU0xJQ0U7CiBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcgPSBFTkFCTEVfQ0hBTk5FTF9N
RVNTQUdJTkc7CiBFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OID0gRU5BQkxFX0NMSUVO
VF9CQVNFRF9HRU9MT0NBVElPTjsKIEVOQUJMRV9EQVRBQkFTRSA9IEVOQUJMRV9EQVRBQkFTRTsK
QEAgLTc0LDQgKzc1LDQgQEAgRU5BQkxFX1hIVE1MTVAgPSA7CiBFTkFCTEVfWFBBVEggPSBFTkFC
TEVfWFBBVEg7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMg
PSAkKEVOQUJMRV8zRF9DQU5WQVMpICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQ0hB
Tk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikgJChFTkFC
TEVfREFUQUJBU0UpICQoRU5BQkxFX0RBVEFHUklEKSAkKEVOQUJMRV9EQVRBTElTVCkgJChFTkFC
TEVfRE9NX1NUT1JBR0UpICQoRU5BQkxFX0VWRU5UU09VUkNFKSAkKEVOQUJMRV9GSUxURVJTKSAk
KEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JTkRF
WEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9NQVRI
TUwpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykgJChFTkFCTEVfUlVCWSkgJChFTkFCTEVfU0FOREJPWCkgJChFTkFCTEVfU0hBUkVEX1dP
UktFUlMpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0FOSU1BVElPTikgJChFTkFCTEVfU1ZH
X0FTX0lNQUdFKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19G
T05UUykgJChFTkFCTEVfU1ZHX0ZPUkVJR05fT0JKRUNUKSAkKEVOQUJMRV9TVkdfVVNFKSAkKEVO
QUJMRV9WSURFTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dNTCkgJChFTkFCTEVf
V09SS0VSUykgJChFTkFCTEVfWEhUTUxNUCkgJChFTkFCTEVfWFBBVEgpICQoRU5BQkxFX1hTTFQp
OworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfQ0FOVkFTKSAkKEVOQUJMRV8zRF9SRU5E
RVJJTkcpICQoRU5BQkxFX0JMT0JfU0xJQ0UpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAk
KEVOQUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04pICQoRU5BQkxFX0RBVEFCQVNFKSAkKEVO
QUJMRV9EQVRBR1JJRCkgJChFTkFCTEVfREFUQUxJU1QpICQoRU5BQkxFX0RPTV9TVE9SQUdFKSAk
KEVOQUJMRV9FVkVOVFNPVVJDRSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfR0VPTE9DQVRJ
T04pICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChF
TkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9OT1RJ
RklDQVRJT05TKSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1JV
QlkpICQoRU5BQkxFX1NBTkRCT1gpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9T
VkcpICQoRU5BQkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFC
TEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NW
R19GT1JFSUdOX09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5B
QkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxF
X1hIVE1MTVApICQoRU5BQkxFX1hQQVRIKSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5kZWYgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCmluZGV4IDc2YWQzMDIuLjIwMzMyNDIgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5kZWYKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgpAQCAtMjY5LDYgKzI2OSw3
IEBAIEVYUE9SVFMKICAgICA/dG9Cb29sZWFuQEpTT2JqZWN0QEpTQ0BAVUJFX05QQVZFeGVjU3Rh
dGVAMkBAWgogICAgID90b0Jvb2xlYW5ASlNTdHJpbmdASlNDQEBFQkVfTlBBVkV4ZWNTdGF0ZUAy
QEBaCiAgICAgP3RvSW50MzJTbG93Q2FzZUBKU0NAQFlBSE5BQV9OQFoKKyAgICA/dG9JbnRlZ2Vy
QEpTVmFsdWVASlNDQEBRQkVOUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/dG9OdW1iZXJASlNDZWxs
QEpTQ0BAVUJFTlBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvTnVtYmVyQEpTT2JqZWN0QEpTQ0BA
VUJFTlBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvTnVtYmVyQEpTU3RyaW5nQEpTQ0BARUJFTlBB
VkV4ZWNTdGF0ZUAyQEBaCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDUzMDlkYi4uNTExOTUyZiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDM1IEBACisyMDEwLTAyLTIzICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbG9iLnNsaWNlIHN1
cHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
Mjk5MworCisgICAgICAgIEFkZCBhIG5ldyBsYXlvdXQgdGVzdCB0byB0ZXN0IHNsaWNpbmcgYW5k
IHNlbmRpbmcgYSBmaWxlLiBJbiBhZGRpdGlvbiwKKyAgICAgICAgdHdvIG5ldyBzY3JpcHRzIGFy
ZSBpbnRyb2R1Y2VkIHRvIGNyZWF0ZSBhbmQgdG91Y2ggdGhlIHRlbXAgZmlsZS4KKworICAgICAg
ICBNb3ZlIHNvbWUgY29kZSBmcm9tIHNlbmQtZHJhZ2dlZC1maWxlLmpzIHRvIGEgbmV3IGZpbGUK
KyAgICAgICAgc2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50LWZvci1kcmFnLmpzIHNvIHRoYXQgaXQg
Y2FuIGJlIHVzZWQgYnkgYm90aAorICAgICAgICBzZW5kLWRyYWdnZWQtZmlsZS5qcyBhbmQgc2Vu
ZC1zbGljZWQtZHJhZ2dlZC1maWxlLmpzIHRvIHNldHVwIHRoZSBpbnB1dAorICAgICAgICBlbGVt
ZW50IGZvciB0aGUgZmlsZSBkcmFnZ2luZy4KKworICAgICAgICBTaW5jZSB0aGUgQmxvYi5zbGlj
ZSBpcyBvbmx5IGVuYWJsZWQgZm9yIE1hYywgd2UgZGlzYWJsZSB0aGUgbmV3IHRlc3QKKyAgICAg
ICAgZm9yIGFsbCBvdGhlciBwbGF0Zm9ybXMuCisKKyAgICAgICAgKiBmYXN0L2RvbS9XaW5kb3cv
d2luZG93LXByb3BlcnRpZXMuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3Jlc291
cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9j
YWwvcmVzb3VyY2VzL3NlbmQtZHJhZ2dlZC1maWxlLmpzOgorICAgICAgICAqIGh0dHAvdGVzdHMv
bG9jYWwvcmVzb3VyY2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qczogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50
LWZvci1kcmFnLmpzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZHJh
Z2dlZC1maWxlLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1k
cmFnZ2VkLWZpbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xv
Y2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRw
L3Rlc3RzL3Jlc291cmNlcy90b3VjaC10ZW1wLWZpbGUucGhwOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3Jlc291cmNlcy93cml0ZS10ZW1wLWZpbGUucGhwOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOgorCiAyMDEwLTAyLTIyICBDaHJpcyBGbGVp
emFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgRml4aW5nIExheW91dCB0ZXN0
IGZhaWx1cmUuIE5vdCByZXZpZXdlZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9t
L1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwKaW5kZXggMDNlNjQ3OC4uYTVlMDBiNiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwK
QEAgLTcxLDcgKzcxLDggQEAgdmFyIF9fc2tpcF9fID0gewogICAgICJ3aW5kb3cuV2ViR0xVbnNp
Z25lZEJ5dGVBcnJheSIgOiAxLCAKICAgICAid2luZG93LldlYkdMVW5zaWduZWRJbnRBcnJheSIg
OiAxLCAKICAgICAid2luZG93LldlYkdMVW5zaWduZWRTaG9ydEFycmF5IiA6IDEsCi0gICAgIndp
bmRvdy5jbGllbnRJbmZvcm1hdGlvbi5nZW9sb2NhdGlvbiIgOiAxCisgICAgIndpbmRvdy5jbGll
bnRJbmZvcm1hdGlvbi5nZW9sb2NhdGlvbiIgOiAxLAorICAgICJ3aW5kb3cuQmxvYi5wcm90b3R5
cGUuc2xpY2UiIDogMQogfTsKIAogZnVuY3Rpb24gbG9nVmFsdWUodmFsdWVOYW1lKQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZmlsZS1mb3ItZHJh
Zy10by1zZW5kLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL2Zp
bGUtZm9yLWRyYWctdG8tc2VuZC50eHQKaW5kZXggNWFiMmY4YS4uNmE1MzdiNSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10
by1zZW5kLnR4dAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9m
aWxlLWZvci1kcmFnLXRvLXNlbmQudHh0CkBAIC0xICsxIEBACi1IZWxsbwpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKKzEyMzQ1Njc4OTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWRy
YWdnZWQtZmlsZS5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3Nl
bmQtZHJhZ2dlZC1maWxlLmpzCmluZGV4IGJlZDQwNzguLmVmYzExMjQgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtZHJhZ2dlZC1maWxlLmpz
CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtZHJhZ2dl
ZC1maWxlLmpzCkBAIC0xLDQ4ICsxLDIxIEBACiBkZXNjcmlwdGlvbigiVGVzdCBmb3Igc2VuZGlu
ZyBhIGRyYWdnZWQgZmlsZSB2aWEgWE1MSHR0cFJlcXVlc3QuIik7CiAKLXZhciBmaWxlSW5wdXQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotZmlsZUlucHV0LnR5cGUgPSAiZmls
ZSI7Ci1maWxlSW5wdXQuc3R5bGUud2lkdGggPSAiMTAwcHgiOwotZmlsZUlucHV0LnN0eWxlLmhl
aWdodCA9ICIxMDBweCI7Ci0vLyBJbXBvcnRhbnQgdGhhdCB3ZSBwdXQgdGhpcyBhdCB0aGUgdG9w
IG9mIHRoZSBkb2Mgc28gdGhhdCBsb2dnaW5nIGRvZXMgbm90IGNhdXNlIGl0IHRvIGdvIG91dCBv
ZiB2aWV3ICh3aGVyZSBpdCBjYW4ndCBiZSBkcmFnZ2VkIHRvKQotZG9jdW1lbnQuYm9keS5pbnNl
cnRCZWZvcmUoZmlsZUlucHV0LCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpOwotCi1maWxlSW5w
dXQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VudGVyIiwgZnVuY3Rpb24oKSB7Ci0gICAgZXZlbnQu
cHJldmVudERlZmF1bHQoKTsKLX0sIGZhbHNlKTsKLQotZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVu
ZXIoImRyYWdvdmVyIiwgZnVuY3Rpb24oKSB7Ci0gICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BF
ZmZlY3QgPSAiY29weSI7Ci0gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLX0sIGZhbHNlKTsK
LQotZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBmdW5jdGlvbigpIHsKLSAgICBp
ZiAoZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluZGV4T2YoIkZpbGVzIikgIT0gLTEgJiYgZXZl
bnQuZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aCA9PSAxKQotICAgICAgICB0ZXN0UGFzc2VkKCJl
dmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLiIpOwotICAg
IGVsc2UgewotICAgICAgICB0ZXN0RmFpbGVkKCJldmVudC5kYXRhVHJhbnNmZXIgZG9lcyBub3Qg
Y29udGFpbiBhIEZpbGUgb2JqZWN0IG9uIGRyb3AuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KK2Z1bmN0aW9uIG9uRmlsZURyb3AoZmlsZSkKK3sKICAgICB2YXIgeGhyID0gbmV3IFhNTEh0
dHBSZXF1ZXN0KCk7CiAgICAgeGhyLm9wZW4oIlBPU1QiLCAiaHR0cDovLzEyNy4wLjAuMTo4MDAw
L3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9wb3N0LWVjaG8uY2dpIiwgZmFsc2UpOwotICAgIHho
ci5zZW5kKGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlc1swXSk7Ci0gICAgaWYgKHhoci5yZXNwb25z
ZVRleHQgPT0gIkhlbGxvIikKKyAgICB4aHIuc2VuZChmaWxlKTsKKyAgICBpZiAoeGhyLnJlc3Bv
bnNlVGV4dCA9PSAiMTIzNDU2Nzg5MCIpCiAgICAgICAgIHRlc3RQYXNzZWQoIkV4cGVjdGVkIHJl
c3BvbnNlIGRhdGEgcmVjZWl2ZWQuIik7CiAgICAgZWxzZQogICAgICAgICB0ZXN0RmFpbGVkKCJV
bmV4cGVjdGVkIHJlc3BvbnNlIGRhdGEgcmVjZWl2ZWQ6ICIgKyB4aHIucmVzcG9uc2VUZXh0KTsK
IAogICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci19LCBmYWxzZSk7Ci0KLWZ1bmN0aW9uIG1v
dmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGVsZW1lbnQpIHsKLSAgICB2YXIgY2VudGVyWCA9IGVs
ZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOwotICAgIHZhciBjZW50
ZXJZID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7Ci0gICAg
ZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oY2VudGVyWCwgY2VudGVyWSk7CiB9CiAKIGZ1bmN0aW9u
IHJ1blRlc3QoKQogeworICAgIHNldEZpbGVJbnB1dERyb3BDYWxsYmFjayhvbkZpbGVEcm9wKTsK
ICAgICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMoWyJyZXNvdXJjZXMvZmlsZS1mb3It
ZHJhZy10by1zZW5kLnR4dCJdKTsKICAgICBtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudChmaWxl
SW5wdXQpOwogICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKQEAgLTUxLDcgKzI0LDcgQEAgZnVu
Y3Rpb24gcnVuVGVzdCgpCiBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CiAgICAgcnVuVGVzdCgp
OwogICAgIC8vIENsZWFuIHVwIGFmdGVyIG91cnNlbHZlcwotICAgIGZpbGVJbnB1dC5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKGZpbGVJbnB1dCk7CisgICAgcmVtb3ZlRmlsZUlucHV0RWxlbWVudCgp
OwogfSBlbHNlIHsKICAgICB0ZXN0RmFpbGVkKCJUaGlzIHRlc3QgaXMgbm90IGludGVyYWN0aXZl
LCBwbGVhc2UgcnVuIHVzaW5nIER1bXBSZW5kZXJUcmVlIik7CiB9CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZp
bGUuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLXNsaWNl
ZC1kcmFnZ2VkLWZpbGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIy
ODlhOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVz
b3VyY2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qcwpAQCAtMCwwICsxLDE1MCBAQAorZGVz
Y3JpcHRpb24oIlRlc3QgZm9yIHNsaWNpbmcgYSBkcmFnZ2VkIGZpbGUgYW5kIHNlbmRpbmcgaXQg
dmlhIFhNTEh0dHBSZXF1ZXN0LiIpOworCit2YXIgb3JpZ2luYWxUZXh0ID0gIjEyMzQ1Njc4OTAi
OwordmFyIHRlbXBGaWxlTmFtZSA9ICJzZW5kLXNsaWNlLWRyYWdnZWQtZmlsZS50bXAiOwordmFy
IHRlbXBGaWxlT3JpZ2luYWxNb2RpZmljYXRpb25UaW1lOwordmFyIHN1YmZpbGU7CisKK2Z1bmN0
aW9uIHVwbG9hZEZpbGUoZmlsZSwgZXhwZWN0ZWRUZXh0LCBleHBlY3RlZEV4Y2VwdGlvbikKK3sK
KyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9wZW4oIlBPU1Qi
LCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9wb3N0LWVj
aG8uY2dpIiwgZmFsc2UpOworCisgICAgdmFyIHBhc3NlZDsKKyAgICB2YXIgbWVzc2FnZTsKKyAg
ICB0cnkgeworICAgICAgICB4aHIuc2VuZChmaWxlKTsKKyAgICAgICAgaWYgKGV4cGVjdGVkRXhj
ZXB0aW9uKSB7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1lc3Nh
Z2UgPSAiVW5leHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNl
VGV4dCArICIuIEV4cGVjdGluZyBleGNlcHRpb24gdGhyb3duIjsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmICh4aHIucmVzcG9uc2VUZXh0ID09IGV4cGVjdGVkVGV4dCkgeworICAg
ICAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJF
eHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4dDsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgbWVzc2FnZSA9ICJVbmV4cGVjdGVkIHJlc3BvbnNlIGRhdGEgcmVjZWl2ZWQ6
ICIgKyB4aHIucmVzcG9uc2VUZXh0ICsgIi4gRXhwZWN0aW5nOiAiICsgZXhwZWN0ZWRUZXh0Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgaWYg
KGV4cGVjdGVkRXhjZXB0aW9uKSB7CisgICAgICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgICAg
ICAgICAgbWVzc2FnZSA9ICJFeHBlY3RlZCBleGNlcHRpb24gdGhyb3duOiAiICsgZXg7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1l
c3NhZ2UgPSAiVW5leHBlY3RlZCBleGNlcHRpb24gdGhyb3duOiAiICsgZXg7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAocGFzc2VkKQorICAgICAgICB0ZXN0UGFzc2VkKG1lc3NhZ2UpOwor
ICAgIGVsc2UKKyAgICAgICAgdGVzdEZhaWxlZChtZXNzYWdlKTsKK30KKworZnVuY3Rpb24gY3Jl
YXRlVGVtcEZpbGUoZmlsZURhdGEpCit7CisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVz
dCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9yZXNvdXJj
ZXMvd3JpdGUtdGVtcC1maWxlLnBocD9maWxlbmFtZT0iICsgdGVtcEZpbGVOYW1lICsgIiZkYXRh
PSIgKyBmaWxlRGF0YSwgZmFsc2UpOworICAgIHhoci5zZW5kKCk7CisgICAgaWYgKHhoci5zdGF0
dXMgIT0gMjAwKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIlVuZXhwZWN0ZWQgcmVzcG9uc2Ugc3Rh
dHVzIHJlY2VpdmVkOiAiICsgeGhyLnN0YXR1cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICB2YXIgdmFsdWVzID0geGhyLnJlc3BvbnNlVGV4dC5zcGxpdCgnXG4nKTsKKyAgICBpZiAo
dmFsdWVzLmxlbmd0aCA8IDIpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiVW5leHBlY3RlZCByZXNw
b25zZSB0ZXh0IHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWVzOworfQorCitmdW5jdGlvbiB0b3VjaFRlbXBG
aWxlKCkKK3sKKyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9w
ZW4oIlBPU1QiLCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3Jlc291cmNlcy90b3VjaC10ZW1wLWZp
bGUucGhwP2ZpbGVuYW1lPSIgKyB0ZW1wRmlsZU5hbWUsIGZhbHNlKTsKKyAgICB4aHIuc2VuZCgp
OworfQorCitmdW5jdGlvbiByZW1vdmVUZW1wRmlsZSgpCit7CisgICAgdmFyIHhociA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6
ODAwMC9yZXNvdXJjZXMvcmVzZXQtdGVtcC1maWxlLnBocD9maWxlbmFtZT0iICsgdGVtcEZpbGVO
YW1lLCBmYWxzZSk7CisgICAgeGhyLnNlbmQoKTsKK30KKworZnVuY3Rpb24gb25TdGFibGVGaWxl
RHJvcChmaWxlLCBzdGFydCwgbGVuZ3RoKQoreworICAgIC8vIFNsaWNlIHRoZSBmaWxlLgorICAg
IHN1YmZpbGUgPSBmaWxlLnNsaWNlKHN0YXJ0LCBsZW5ndGgpOworICAgIHZhciBleHBlY3RlZFRl
eHQgPSBvcmlnaW5hbFRleHQuc3Vic3RyaW5nKHN0YXJ0LCBzdGFydCArIGxlbmd0aCk7CisgICAg
c2hvdWxkRXZhbHVhdGVUbygic3ViZmlsZS5zaXplIiwgZXhwZWN0ZWRUZXh0Lmxlbmd0aCk7CisK
KyAgICAvLyBVcGxvYWQgdGhlIHNsaWNlZCBmaWxlLgorICAgIHVwbG9hZEZpbGUoc3ViZmlsZSwg
ZXhwZWN0ZWRUZXh0LCBmYWxzZSk7Cit9CisKK2Z1bmN0aW9uIGRyYWdBbmRTbGljZVN0YWJsZUZp
bGUoc3RhcnQsIGxlbmd0aCkKK3sKKyAgICBzZXRGaWxlSW5wdXREcm9wQ2FsbGJhY2soZnVuY3Rp
b24oZmlsZSkgeyBvblN0YWJsZUZpbGVEcm9wKGZpbGUsIHN0YXJ0LCBsZW5ndGgpOyB9KTsKKyAg
ICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMoWyJyZXNvdXJjZXMvZmlsZS1mb3ItZHJh
Zy10by1zZW5kLnR4dCJdKTsKKyAgICBtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudChmaWxlSW5w
dXQpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKK30KKworZnVuY3Rpb24gb25VbnN0YWJs
ZUZpbGVEcm9wKGZpbGUsIHN0YXJ0LCBsZW5ndGgpCit7CisgICAgLy8gU2xpY2UgdGhlIGZpbGUu
CisgICAgc3ViZmlsZSA9IGZpbGUuc2xpY2Uoc3RhcnQsIGxlbmd0aCk7CisgICAgdmFyIGV4cGVj
dGVkVGV4dCA9IG9yaWdpbmFsVGV4dC5zdWJzdHJpbmcoc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoKTsK
KyAgICBzaG91bGRFdmFsdWF0ZVRvKCJzdWJmaWxlLnNpemUiLCBleHBlY3RlZFRleHQubGVuZ3Ro
KTsKKyAgCisgICAgLy8gVXBsb2FkIHRoZSBzbGljZWQgZmlsZS4KKyAgICB1cGxvYWRGaWxlKHN1
YmZpbGUsIGV4cGVjdGVkVGV4dCwgZmFsc2UpOworCisgICAgLy8gVG91Y2ggdGhlIHVuZGVybHlp
bmcgdGVtcCBmaWxlLgorICAgIHRvdWNoVGVtcEZpbGUoKTsKKyAgICAKKyAgICAvLyBVcGxvYWQg
dGhlIHNsaWNlZCBmaWxlLiBXZSBzaG91bGQgcmVjZWl2ZSBhbiBleGNlcHRpb24gc2luY2UgdGhl
IGZpbGUgaGFzIGJlZW4gY2hhbmdlZC4KKyAgICB1cGxvYWRGaWxlKHN1YmZpbGUsIG51bGwsIHRy
dWUpOworCisgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wIGZpbGUuCisgICAgcmVtb3ZlVGVtcEZpbGUo
KTsKK30KKworZnVuY3Rpb24gZHJhZ0FuZFNsaWNlVW5zdGFibGVGaWxlKHN0YXJ0LCBsZW5ndGgp
Cit7CisgICAgdmFyIHRlbXBGaWxlSW5mbyA9IGNyZWF0ZVRlbXBGaWxlKG9yaWdpbmFsVGV4dCk7
CisgICAgaWYgKHRlbXBGaWxlSW5mby5sZW5ndGggPCAyKSB7CisgICAgICAgIGRvbmUoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2YXIgdGVtcEZpbGVQYXRoID0gdGVtcEZpbGVJbmZv
WzBdOworICAgIHRlbXBGaWxlT3JpZ2luYWxNb2RpZmljYXRpb25UaW1lID0gdGVtcEZpbGVJbmZv
WzFdOworCisgICAgc2V0RmlsZUlucHV0RHJvcENhbGxiYWNrKGZ1bmN0aW9uKGZpbGUpIHsgb25V
bnN0YWJsZUZpbGVEcm9wKGZpbGUsIHN0YXJ0LCBsZW5ndGgpOyB9KTsKKyAgICBldmVudFNlbmRl
ci5iZWdpbkRyYWdXaXRoRmlsZXMoW3RlbXBGaWxlUGF0aF0pOworICAgIG1vdmVNb3VzZVRvQ2Vu
dGVyT2ZFbGVtZW50KGZpbGVJbnB1dCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworfQor
CitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBkcmFnQW5kU2xpY2VTdGFibGVGaWxlKDIsIDQp
OworICAgIGRyYWdBbmRTbGljZVN0YWJsZUZpbGUoMiwgMjApOworICAgIGRyYWdBbmRTbGljZVN0
YWJsZUZpbGUoMTUsIDIwKTsKKworICAgIGRyYWdBbmRTbGljZVVuc3RhYmxlRmlsZSgzLCA1KTsK
K30KKworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHJ1blRlc3QoKTsKKyAgICAvLyBD
bGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMKKyAgICByZW1vdmVGaWxlSW5wdXRFbGVtZW50KCk7Cit9
IGVsc2UgeworICAgIHRlc3RGYWlsZWQoIlRoaXMgdGVzdCBpcyBub3QgaW50ZXJhY3RpdmUsIHBs
ZWFzZSBydW4gdXNpbmcgRHVtcFJlbmRlclRyZWUiKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jl
c291cmNlcy9zZXR1cC1maWxlLWlucHV0LWVsZW1lbnQtZm9yLWRyYWcuanMgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZXR1cC1maWxlLWlucHV0LWVsZW1lbnQtZm9y
LWRyYWcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUxYzY4MAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3Nl
dHVwLWZpbGUtaW5wdXQtZWxlbWVudC1mb3ItZHJhZy5qcwpAQCAtMCwwICsxLDQ2IEBACit2YXIg
ZmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKK2ZpbGVJbnB1dC50
eXBlID0gImZpbGUiOworZmlsZUlucHV0LnN0eWxlLndpZHRoID0gIjEwMHB4IjsKK2ZpbGVJbnB1
dC5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOworLy8gSW1wb3J0YW50IHRoYXQgd2UgcHV0IHRoaXMg
YXQgdGhlIHRvcCBvZiB0aGUgZG9jIHNvIHRoYXQgbG9nZ2luZyBkb2VzIG5vdCBjYXVzZSBpdCB0
byBnbyBvdXQgb2YgdmlldyAod2hlcmUgaXQgY2FuJ3QgYmUgZHJhZ2dlZCB0bykKK2RvY3VtZW50
LmJvZHkuaW5zZXJ0QmVmb3JlKGZpbGVJbnB1dCwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTsK
KworZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdlbnRlciIsIGZ1bmN0aW9uKCkgewor
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2ZpbGVJbnB1dC5hZGRF
dmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIGZ1bmN0aW9uKCkgeworICAgIGV2ZW50LmRhdGFUcmFu
c2Zlci5kcm9wRWZmZWN0ID0gImNvcHkiOworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9
LCBmYWxzZSk7CisKK3ZhciBmaWxlSW5wdXREcm9wQ2FsbGJhY2sgPSBudWxsOworZmlsZUlucHV0
LmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBmdW5jdGlvbigpIHsKKyAgICBpZiAoZXZlbnQuZGF0
YVRyYW5zZmVyLnR5cGVzLmluZGV4T2YoIkZpbGVzIikgIT0gLTEgJiYgZXZlbnQuZGF0YVRyYW5z
ZmVyLmZpbGVzLmxlbmd0aCA9PSAxKQorICAgICAgICB0ZXN0UGFzc2VkKCJldmVudC5kYXRhVHJh
bnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLiIpOworICAgIGVsc2UgeworICAg
ICAgICB0ZXN0RmFpbGVkKCJldmVudC5kYXRhVHJhbnNmZXIgZG9lcyBub3QgY29udGFpbiBhIEZp
bGUgb2JqZWN0IG9uIGRyb3AuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmaWxl
SW5wdXREcm9wQ2FsbGJhY2soZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzWzBdKTsKKworICAgIGV2
ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2Z1bmN0aW9uIHNldEZpbGVJbnB1
dERyb3BDYWxsYmFjayhmaWxlSW5wdXREcm9wQ2FsbGJhY2tGdW5jKQoreworICAgIGZpbGVJbnB1
dERyb3BDYWxsYmFjayA9IGZpbGVJbnB1dERyb3BDYWxsYmFja0Z1bmM7Cit9CisKK2Z1bmN0aW9u
IG1vdmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGVsZW1lbnQpCit7CisgICAgdmFyIGNlbnRlclgg
PSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMjsKKyAgICB2YXIg
Y2VudGVyWSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOwor
ICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGNlbnRlclgsIGNlbnRlclkpOworfQorCitmdW5j
dGlvbiByZW1vdmVGaWxlSW5wdXRFbGVtZW50KCkKK3sKKyAgICBmaWxlSW5wdXQucGFyZW50Tm9k
ZS5yZW1vdmVDaGlsZChmaWxlSW5wdXQpCit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWwKaW5kZXggM2YyMjEwYS4uZjUyODBmNCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmls
ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFnZ2VkLWZp
bGUuaHRtbApAQCAtNyw2ICs3LDcgQEAKIDxib2R5PgogPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+
CiA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2V0dXAt
ZmlsZS1pbnB1dC1lbGVtZW50LWZvci1kcmFnLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ii4u
Ly4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CiA8L2Jv
ZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2Vk
LWRyYWdnZWQtZmlsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2Fs
L3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYjQ2MDc5MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDIyIEBACitUZXN0IGZvciBzbGljaW5nIGEgZHJhZ2dlZCBmaWxlIGFuZCBzZW5k
aW5nIGl0IHZpYSBYTUxIdHRwUmVxdWVzdC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1MgZXZlbnQuZGF0YVRyYW5zZmVyIGNvbnRhaW5zIGEgRmlsZSBvYmplY3Qgb24gZHJv
cC4KK1BBU1Mgc3ViZmlsZS5zaXplIGlzIDQKK1BBU1MgRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSBy
ZWNlaXZlZDogMzQ1NgorUEFTUyBldmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9i
amVjdCBvbiBkcm9wLgorUEFTUyBzdWJmaWxlLnNpemUgaXMgOAorUEFTUyBFeHBlY3RlZCByZXNw
b25zZSBkYXRhIHJlY2VpdmVkOiAzNDU2Nzg5MAorUEFTUyBldmVudC5kYXRhVHJhbnNmZXIgY29u
dGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLgorUEFTUyBzdWJmaWxlLnNpemUgaXMgMAorUEFT
UyBFeHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAKK1BBU1MgZXZlbnQuZGF0YVRyYW5z
ZmVyIGNvbnRhaW5zIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4KK1BBU1Mgc3ViZmlsZS5zaXplIGlz
IDUKK1BBU1MgRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDogNDU2NzgKK1BBU1MgRXhw
ZWN0ZWQgZXhjZXB0aW9uIHRocm93bjogRXJyb3I6IE5FVFdPUktfRVJSOiBYTUxIdHRwUmVxdWVz
dCBFeGNlcHRpb24gMTAxCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5k
LXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwv
c2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYzA0MWIxZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKQEAgLTAsMCArMSwxNCBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvc2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50LWZvci1kcmFnLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZXMvdG91Y2gtdGVtcC1maWxlLnBocCBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VzL3RvdWNoLXRlbXAtZmlsZS5waHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI4MjlkZgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VzL3RvdWNoLXRlbXAtZmlsZS5waHAKQEAgLTAs
MCArMSwyMiBAQAorPD9waHAKK3JlcXVpcmVfb25jZSAncG9ydGFiaWxpdHlMYXllci5waHAnOwor
CitpZiAoIXN5c19nZXRfdGVtcF9kaXIoKSkgeworICAgIGVjaG8gIkZBSUw6IE5vIHRlbXAgZGly
IHdhcyByZXR1cm5lZC5cbiI7CisgICAgZXhpdCgpOworfQorCiskdG1wRmlsZSA9IHN5c19nZXRf
dGVtcF9kaXIoKSAuICIvIiAuICRfR0VUWydmaWxlbmFtZSddOworCiskc3RhdCA9IHN0YXQoJHRt
cEZpbGUpOworaWYgKCEkc3RhdCkgeworICAgIGVjaG8gIkZBSUw6IHN0YXQoKSBjYWxsIGZhaWxl
ZC5cbiI7CisgICAgZXhpdCgpOworfQorCiskbXRpbWUgPSAkc3RhdFsnbXRpbWUnXSArIDE7CisK
K2lmICghdG91Y2goJHRtcEZpbGUsICRtdGltZSkpIHsKKyAgICBlY2hvICJGQUlMOiB0b3VjaCgp
IGNhbGwgZmFpbGVkLlxuIjsKK30KKz8+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3Jlc291cmNlcy93cml0ZS10ZW1wLWZpbGUucGhwIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9yZXNvdXJjZXMvd3JpdGUtdGVtcC1maWxlLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5mZmUyYzhjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9yZXNvdXJjZXMvd3JpdGUtdGVtcC1maWxlLnBocApAQCAtMCwwICsxLDIwIEBACis8P3Bo
cAorcmVxdWlyZV9vbmNlICdwb3J0YWJpbGl0eUxheWVyLnBocCc7CisKK2lmICghc3lzX2dldF90
ZW1wX2RpcigpKSB7CisgICAgZWNobyAiRkFJTDogTm8gdGVtcCBkaXIgd2FzIHJldHVybmVkLlxu
IjsKKyAgICBleGl0KCk7Cit9CisKKyR0bXBGaWxlID0gc3lzX2dldF90ZW1wX2RpcigpIC4gIi8i
IC4gJF9HRVRbJ2ZpbGVuYW1lJ107CisKK2lmICghZmlsZV9wdXRfY29udGVudHMoJHRtcEZpbGUs
ICRfR0VUWydkYXRhJ10pKSB7CisgICAgZWNobyAiRkFJTDogdW5hYmxlIHRvIHdyaXRlIHRvIGZp
bGU6ICIgLiAkdG1wRmlsZSAuICJcbiI7CisgICAgZXhpdCgpOworfQorCiskc3RhdCA9IHN0YXQo
JHRtcEZpbGUpOworCitlY2hvICR0bXBGaWxlIC4gIlxuIjsKK2VjaG8gJHN0YXRbJ210aW1lJ107
Cis/PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCA1YzliNmJiLi5hNGM2ZTAxIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtMzQzNCw2ICszNDM0LDcgQEAgaHR0cC90ZXN0cy9s
b2FkaW5nL3ByZWxvYWQtaW1nLXRlc3QuaHRtbAogaHR0cC90ZXN0cy9sb2FkaW5nL3Nsb3ctcGFy
c2luZy1zdWJmcmFtZS5odG1sCiBodHRwL3Rlc3RzL2xvYWRpbmcvdGV4dC1jb250ZW50LXR5cGUt
d2l0aC1iaW5hcnktZXh0ZW5zaW9uLmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFnZ2Vk
LWZpbGUuaHRtbAoraHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRt
bAogaHR0cC90ZXN0cy9tZWRpYS92aWRlby1wbGF5LXN0YWxsLXNlZWsuaHRtbAogaHR0cC90ZXN0
cy9tZWRpYS92aWRlby1wbGF5LXN0YWxsLmh0bWwKIGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tc2Vl
a2FibGUtc3RhbGwuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tp
cHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKaW5kZXggODMxZjVlOS4uMTNj
ODMzMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAorKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCkBAIC01Myw2ICs1Myw3IEBAIHBsdWdpbnMv
c2V0LXN0YXR1cy5odG1sCiAjIEZhaWxpbmcgTG9jYWwgdGVzdHMKIGh0dHAvdGVzdHMvbG9jYWwv
ZHJhZy1vdmVyLXJlbW90ZS1jb250ZW50Lmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFn
Z2VkLWZpbGUuaHRtbAoraHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUu
aHRtbAogCiAjIEZhaWxpbmcgbmF2aWdhdGlvbiB0ZXN0cwogaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L2FuY2hvci1mcmFtZXMuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2lu
L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAppbmRleCAxOGViYjY4
Li40NGE1ZjU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZApAQCAtNjYwLDYgKzY2MCw3IEBA
IGZhc3QvZm9ybXMvaW5wdXQtc2VsZWN0ZWRvcHRpb24uaHRtbAogCiAjIDxodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkyODc+CiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQt
ZHJhZ2dlZC1maWxlLmh0bWwKK2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1m
aWxlLmh0bWwKIAogIyA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5
Mjg5PgogcGx1Z2lucy9kZXN0cm95LWR1cmluZy1ucHAtbmV3Lmh0bWwKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQzZGY0Zi4uOWM3MzM4
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw1MSBAQAorMjAxMC0wMi0yMyAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQmxv
Yi5zbGljZSBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzI5OTMKKyAgICAgICAgCisgICAgICAgIFRoZSBmb2xsb3dpbmcgc2VtYW50aWMg
aXMgYWRvcHRlZCBwZXIgdGhlIGRpc2N1c3Npb25zIG9uIHB1YmxpYy13ZWJhcHBzOgorICAgICAg
ICAxKSBGaWxlLnNsaWNlKCkgZG9lcyBhIHN5bmNocm9ub3VzIElPIHRvIGNhcHR1cmUgdGhlIGN1
cnJlbnQgc2l6ZSBhbmQKKyAgICAgICAgICAgbW9kaWZpY2F0aW9uIHRpbWUgYW5kIGNhY2hlIHRo
ZW0gaW4gdGhlIHJlc3VsdGluZyBCbG9iLgorICAgICAgICAyKSBTdWJzZXF1ZW50IEJsb2Igb3Bl
cmF0aW9ucywgbGlrZSBCbG9iLnNsaWNlIGFuZCBCbG9iLnNpemUgc2ltcGx5CisgICAgICAgICAg
IHVzZSB0aGUgY2FjaGVkIHZhbHVlcy4KKyAgICAgICAgMykgV2hlbiB0aGUgdW5kZXJseWluZyBm
aWxlIGRhdGEgYXJlIGFjY2Vzc2VkLCBsaWtlIGluIFhIUi5zZW5kKCksIHRoZQorICAgICAgICAg
ICBVQSB3aWxsIGNoZWNrIHRoZSBjYWNoZWQgbW9kaWZpY2F0aW9uIHRpbWUgYWdhaW5zdCB0aGUg
Y3VycmVudAorICAgICAgICAgICBtb2RpZmljYXRpb24gdGltZSB0byBkZXRlcm1pbmUgaWYgdGhl
IGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QuCisgICAgICAgICAgIEFuIGVycm9yIG9yIGV4
Y2VwdGlvbiB3aWxsIGJlIHRocm93biBpZiBuZWVkZWQuCisKKyAgICAgICAgQWxzbyBhZGQgRU5B
QkxFX0JMT0JfU0xJQ0UgZmVhdHVyZSBkZWZpbmUuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0
cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbAorCisgICAgICAgICogQ29uZmln
dXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWc6CisgICAgICAgICogaHRtbC9CbG9iLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6Qmxv
Yjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzbGljZSk6CisgICAgICAgICogaHRt
bC9CbG9iLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzdGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6bW9kaWZpY2F0aW9u
VGltZSk6CisgICAgICAgICogaHRtbC9CbG9iLmlkbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpkZWVwQ29weSk6
CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZVJhbmdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkZvcm1E
YXRhRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OmFkdmFuY2VDdXJyZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZW5OZXh0U3Ry
ZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Zm9ybU9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybVJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SFRUUEJvZHkpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2VuZCk6CisKIDIwMTAtMDItMjIgIEpvaG4g
U3VsbGl2YW4gIDxzdWxsaXZhbkBhcHBsZS5jb20+CiAgICAgICAgIAogICAgICAgICBSZXZpZXdl
ZCBieSBUaW0gSGF0Y2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMvRmVh
dHVyZURlZmluZXMueGNjb25maWcgYi9XZWJDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZp
bmVzLnhjY29uZmlnCmluZGV4IDRjNGUxOTMuLmViOTZjMjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKKysrIGIvV2ViQ29yZS9Db25m
aWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtNDEsNiArNDEsNyBAQCBFTkFC
TEVfM0RfUkVOREVSSU5HXzEwNTAgPSBFTkFCTEVfM0RfUkVOREVSSU5HOwogRU5BQkxFXzNEX1JF
TkRFUklOR18xMDYwID0gRU5BQkxFXzNEX1JFTkRFUklORzsKIEVOQUJMRV8zRF9SRU5ERVJJTkdf
MTA3MCA9IEVOQUJMRV8zRF9SRU5ERVJJTkc7CiAKK0VOQUJMRV9CTE9CX1NMSUNFID0gRU5BQkxF
X0JMT0JfU0xJQ0U7CiBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcgPSBFTkFCTEVfQ0hBTk5FTF9N
RVNTQUdJTkc7CiBFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OID0gRU5BQkxFX0NMSUVO
VF9CQVNFRF9HRU9MT0NBVElPTjsKIEVOQUJMRV9EQVRBQkFTRSA9IEVOQUJMRV9EQVRBQkFTRTsK
QEAgLTc0LDQgKzc1LDQgQEAgRU5BQkxFX1hIVE1MTVAgPSA7CiBFTkFCTEVfWFBBVEggPSBFTkFC
TEVfWFBBVEg7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMg
PSAkKEVOQUJMRV8zRF9DQU5WQVMpICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQ0hB
Tk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikgJChFTkFC
TEVfREFUQUJBU0UpICQoRU5BQkxFX0RBVEFHUklEKSAkKEVOQUJMRV9EQVRBTElTVCkgJChFTkFC
TEVfRE9NX1NUT1JBR0UpICQoRU5BQkxFX0VWRU5UU09VUkNFKSAkKEVOQUJMRV9GSUxURVJTKSAk
KEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JTkRF
WEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9NQVRI
TUwpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykgJChFTkFCTEVfUlVCWSkgJChFTkFCTEVfU0FOREJPWCkgJChFTkFCTEVfU0hBUkVEX1dP
UktFUlMpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0FOSU1BVElPTikgJChFTkFCTEVfU1ZH
X0FTX0lNQUdFKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19G
T05UUykgJChFTkFCTEVfU1ZHX0ZPUkVJR05fT0JKRUNUKSAkKEVOQUJMRV9TVkdfVVNFKSAkKEVO
QUJMRV9WSURFTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dNTCkgJChFTkFCTEVf
V09SS0VSUykgJChFTkFCTEVfWEhUTUxNUCkgJChFTkFCTEVfWFBBVEgpICQoRU5BQkxFX1hTTFQp
OworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfQ0FOVkFTKSAkKEVOQUJMRV8zRF9SRU5E
RVJJTkcpICQoRU5BQkxFX0JMT0JfU0xJQ0UpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAk
KEVOQUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04pICQoRU5BQkxFX0RBVEFCQVNFKSAkKEVO
QUJMRV9EQVRBR1JJRCkgJChFTkFCTEVfREFUQUxJU1QpICQoRU5BQkxFX0RPTV9TVE9SQUdFKSAk
KEVOQUJMRV9FVkVOVFNPVVJDRSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfR0VPTE9DQVRJ
T04pICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChF
TkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9OT1RJ
RklDQVRJT05TKSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1JV
QlkpICQoRU5BQkxFX1NBTkRCT1gpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9T
VkcpICQoRU5BQkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFC
TEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NW
R19GT1JFSUdOX09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5B
QkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxF
X1hIVE1MTVApICQoRU5BQkxFX1hQQVRIKSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9CbG9iLmNwcCBiL1dlYkNvcmUvaHRtbC9CbG9iLmNwcAppbmRleCAwYjY3N2Vh
Li4yZTJkNjdhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKKysrIGIvV2ViQ29y
ZS9odG1sL0Jsb2IuY3BwCkBAIC0zNywxNyArMzcsNzcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICA6IG1fcGF0aChwYXRoKQorI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQorICAgICwgbV9zdGFydCgwKQorICAgICwgbV9sZW5ndGgoLTEp
CisgICAgLCBtX3NuYXBzaG90Q2FwdHVyZWQoZmFsc2UpCisgICAgLCBtX3NuYXBzaG90U2l6ZSgw
KQorICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoMC4wKQorI2VuZGlmCiB7CiB9CiAK
KyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKK0Jsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoLCBs
b25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNpemUs
IGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCisgICAgOiBtX3BhdGgocGF0aCkKKyAg
ICAsIG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX3NuYXBz
aG90Q2FwdHVyZWQodHJ1ZSkKKyAgICAsIG1fc25hcHNob3RTaXplKHNuYXBzaG90U2l6ZSkKKyAg
ICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkK
K3sKKyAgICBBU1NFUlQoc3RhcnQgPj0gMCAmJiBsZW5ndGggPj0gMCAmJiBzdGFydCArIGxlbmd0
aCA8PSBzbmFwc2hvdFNpemUgJiYgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKK30KKyNlbmRp
ZgorCiB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYjo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gRklY
TUU6IEphdmFTY3JpcHQgY2Fubm90IHJlcHJlc2VudCBzaXplcyBhcyBsYXJnZSBhcyB1bnNpZ25l
ZCBsb25nIGxvbmcsIHdlIG5lZWQgdG8KICAgICAvLyBjb21lIHVwIHdpdGggYW4gZXhjZXB0aW9u
IHRvIHRocm93IGlmIGZpbGUgc2l6ZSBpcyBub3QgcmVwcmVzZXRhYmxlLgorI2lmIEVOQUJMRShC
TE9CX1NMSUNFKQorICAgIGlmIChtX3NuYXBzaG90Q2FwdHVyZWQpCisgICAgICAgIHJldHVybiBt
X2xlbmd0aDsKKyNlbmRpZgogICAgIGxvbmcgbG9uZyBzaXplOwogICAgIGlmICghZ2V0RmlsZVNp
emUobV9wYXRoLCBzaXplKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSk7CiB9CiAKKyNpZiBFTkFCTEUoQkxPQl9TTElD
RSkKK1Bhc3NSZWZQdHI8QmxvYj4gQmxvYjo6c2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxv
bmcgbGVuZ3RoKSBjb25zdAoreworICAgIC8vIFdoZW4gd2Ugc2xpY2UgYSBmaWxlIGZvciB0aGUg
Zmlyc3QgdGltZSwgd2Ugb2J0YWluIGEgc25hcHNob3Qgb2YgdGhlIGZpbGUgYnkgY2FwdHVyaW5n
IGl0cyBjdXJyZW50IHNpemUgYW5kIG1vZGlmaWNhdGlvbiB0aW1lLgorICAgIC8vIFRoZSBtb2Rp
ZmljYXRpb24gdGltZSB3aWxsIGJlIHVzZWQgdG8gdmVyaWZ5IGlmIHRoZSBmaWxlIGhhcyBiZWVu
IGNoYW5nZWQgb3Igbm90LCB3aGVuIHRoZSB1bmRlcmx5aW5nIGRhdGEgYXJlIGFjY2Vzc2VkLgor
ICAgIGxvbmcgbG9uZyBzbmFwc2hvdFNpemU7CisgICAgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0
aW9uVGltZTsKKyAgICBpZiAobV9zbmFwc2hvdENhcHR1cmVkKSB7CisgICAgICAgIHNuYXBzaG90
U2l6ZSA9IG1fc25hcHNob3RTaXplOworICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUg
PSBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJ
ZiB3ZSBmYWlsIHRvIHJldHJpZXZlIHRoZSBzaXplIG9yIG1vZGlmaWNhdGlvbiB0aW1lLCBwcm9i
YWJseSBkdWUgdG8gdGhhdCB0aGUgZmlsZSBoYXMgYmVlbiBkZWxldGVkLCBhbiBlbXB0eSBibG9i
IHdpbGwgYmUgcmV0dXJuZWQuCisgICAgICAgIHRpbWVfdCBtb2RpZmljYXRpb25UaW1lOworICAg
ICAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwgc25hcHNob3RTaXplKSB8fCAhZ2V0RmlsZU1v
ZGlmaWNhdGlvblRpbWUobV9wYXRoLCBtb2RpZmljYXRpb25UaW1lKSkgeworICAgICAgICAgICAg
c25hcHNob3RTaXplID0gMDsKKyAgICAgICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9
IDA7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1l
ID0gbW9kaWZpY2F0aW9uVGltZTsKKyAgICB9CisKKyAgICAvLyBDbGFtcCB0aGUgcmFuZ2UgaWYg
aXQgZXhjZWVkcyB0aGUgc2l6ZSBsaW1pdC4KKyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAgICBz
dGFydCA9IDA7CisgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgIGxlbmd0aCA9IDA7CisKKyAg
ICBpZiAoc3RhcnQgPiBzbmFwc2hvdFNpemUpIHsKKyAgICAgICAgc3RhcnQgPSAwOworICAgICAg
ICBsZW5ndGggPSAwOworICAgIH0gZWxzZSBpZiAoc3RhcnQgKyBsZW5ndGggPiBzbmFwc2hvdFNp
emUpCisgICAgICAgIGxlbmd0aCA9IHNuYXBzaG90U2l6ZSAtIHN0YXJ0OworCisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBCbG9iKG1fcGF0aCwgbV9zdGFydCArIHN0YXJ0LCBsZW5ndGgsIHNuYXBz
aG90U2l6ZSwgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKSk7Cit9CisjZW5kaWYKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2IuaCBiL1dlYkNv
cmUvaHRtbC9CbG9iLmgKaW5kZXggYjkxMGU4Zi4uYmRhZWNkMSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL0Jsb2IuaAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYi5oCkBAIC0zMyw2ICszMyw3IEBA
CiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC00NywxNCArNDgsNDUgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB+QmxvYigpIHsgfQogCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgUGFz
c1JlZlB0cjxCbG9iPiBzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNv
bnN0OworI2VuZGlmCisKICAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBt
X3BhdGg7IH0KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OworI2lmIEVOQUJM
RShCTE9CX1NMSUNFKQorICAgIGxvbmcgbG9uZyBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
cnQ7IH0KKyAgICBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0K
KyAgICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc25hcHNob3RN
b2RpZmljYXRpb25UaW1lOyB9CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIEJsb2IoY29uc3Qg
U3RyaW5nJiBwYXRoKTsKIAogcHJpdmF0ZToKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICBC
bG9iKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3Ro
LCBsb25nIGxvbmcgc25hcHNob3RTaXplLCBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1l
KTsKKyNlbmRpZgorCisgICAgLy8gVGhlIHVuZGVybHlpbmcgcGF0aCBvZiB0aGUgZmlsZS1iYXNl
ZCBibG9iLiAKICAgICBTdHJpbmcgbV9wYXRoOworCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisg
ICAgLy8gVGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBmaWxlLWJhc2VkIGJsb2IuCisgICAg
bG9uZyBsb25nIG1fc3RhcnQ7CisKKyAgICAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBmaWxlLWJhc2Vk
IGJsb2IuIFRoZSB2YWx1ZSBvZiAtMSBtZWFucyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLgorICAg
IGxvbmcgbG9uZyBtX2xlbmd0aDsKKworICAgIC8vIEEgZmxhZyB0byB0ZWxsIGlmIGEgc25hcHNo
b3QgaGFzIGJlZW4gY2FwdHVyZWQuCisgICAgYm9vbCBtX3NuYXBzaG90Q2FwdHVyZWQ7CisKKyAg
ICAvLyBUaGUgc2l6ZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25hcHNob3QgaXMgY2FwdHVyZWQuIEl0
IGNhbiBiZSAwIGlmIHRoZSBmaWxlIGlzIGVtcHR5LgorICAgIGxvbmcgbG9uZyBtX3NuYXBzaG90
U2l6ZTsKKworICAgIC8vIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIHRoZSBmaWxlIHdo
ZW4gYSBzbmFwc2hvdCBpcyBjYXB0dXJlZC4gVGhlIHZhbHVlIG9mIDAgYWxzbyBtZWFucyB0aGF0
IHRoZSBzbmFwc2hvdCBpcyBub3QgY2FwdHVyZWQuCisgICAgZG91YmxlIG1fc25hcHNob3RNb2Rp
ZmljYXRpb25UaW1lOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYi5pZGwgYi9XZWJDb3JlL2h0bWwvQmxvYi5pZGwKaW5k
ZXggNTczYmUzNS4uOGRiNjA2NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuaWRsCisr
KyBiL1dlYkNvcmUvaHRtbC9CbG9iLmlkbApAQCAtMzIsNiArMzIsMTAgQEAgbW9kdWxlIGh0bWwg
ewogCiAgICAgaW50ZXJmYWNlIEJsb2IgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5z
aWduZWQgbG9uZyBsb25nIHNpemU7CisgICAgICAgIAorI2lmIGRlZmluZWQoRU5BQkxFX0JMT0Jf
U0xJQ0UpICYmIEVOQUJMRV9CTE9CX1NMSUNFCisgICAgICAgIEJsb2Igc2xpY2UoaW4gbG9uZyBs
b25nIHN0YXJ0LCBpbiBsb25nIGxvbmcgbGVuZ3RoKTsKKyNlbmRpZgogICAgIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCmluZGV4IGFmM2I3ZjAuLjJmODBjNDYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcApAQCAtMTA4LDcgKzEwOCwxMSBAQCBQ
YXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6ZGVlcENvcHkoKSBjb25zdAogICAgICAgICAg
ICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZGF0YSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRm9ybURhdGFFbGVtZW50OjplbmNv
ZGVkRmlsZToKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICAgICAgICAgIGZvcm1EYXRhLT5t
X2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2ZpbGVuYW1lLCBlLm1fZmlsZVN0
YXJ0LCBlLm1fZmlsZUxlbmd0aCwgZS5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUsIGUu
bV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsKKyNlbHNlCiAgICAgICAgICAgICBmb3JtRGF0YS0+bV9l
bGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUubV9maWxlbmFtZSwgZS5tX3Nob3VsZEdl
bmVyYXRlRmlsZSkpOworI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
IH0KQEAgLTEyNyw5ICsxMzEsMjAgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRGF0YShjb25zdCB2
b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKIAogdm9pZCBGb3JtRGF0YTo6YXBwZW5kRmlsZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKIHsKKyNpZiBFTkFC
TEUoQkxPQl9TTElDRSkKKyAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmls
ZW5hbWUsIDAsIC0xLCAwLjAsIHNob3VsZEdlbmVyYXRlRmlsZSkpOworI2Vsc2UKICAgICBtX2Vs
ZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIHNob3VsZEdlbmVyYXRlRmls
ZSkpOworI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKK3ZvaWQgRm9ybURhdGE6
OmFwcGVuZEZpbGVSYW5nZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQs
IGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpCit7Cisg
ICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGZpbGVuYW1lLCBzdGFydCwgbGVu
Z3RoLCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUsIGZhbHNlKSk7Cit9CisjZW5kaWYKKwogdm9p
ZCBGb3JtRGF0YTo6ZmxhdHRlbihWZWN0b3I8Y2hhcj4mIGRhdGEpIGNvbnN0CiB7CiAgICAgLy8g
Q29uY2F0ZW5hdGUgYWxsIHRoZSBieXRlIGFycmF5cywgYnV0IG9taXQgYW55IGZpbGVzLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAppbmRleCA3Mjc4ZjJlLi44YWNjNmZiIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaApAQCAtMzIsMTEgKzMyLDIwIEBAIGNsYXNzIEZvcm1E
YXRhRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgRm9ybURhdGFFbGVtZW50KCkgOiBtX3R5cGUoZGF0
YSkgeyB9CiAgICAgRm9ybURhdGFFbGVtZW50KGNvbnN0IFZlY3RvcjxjaGFyPiYgYXJyYXkpIDog
bV90eXBlKGRhdGEpLCBtX2RhdGEoYXJyYXkpIHsgfQorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQor
ICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgZmls
ZVN0YXJ0LCBsb25nIGxvbmcgZmlsZUxlbmd0aCwgZG91YmxlIGV4cGVjdGVkRmlsZU1vZGlmaWNh
dGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKSA6IG1fdHlwZShlbmNvZGVkRmlsZSks
IG1fZmlsZW5hbWUoZmlsZW5hbWUpLCBtX2ZpbGVTdGFydChmaWxlU3RhcnQpLCBtX2ZpbGVMZW5n
dGgoZmlsZUxlbmd0aCksIG1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZShleHBlY3RlZEZp
bGVNb2RpZmljYXRpb25UaW1lKSwgbV9zaG91bGRHZW5lcmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVG
aWxlKSB7IH0KKyNlbHNlCiAgICAgRm9ybURhdGFFbGVtZW50KGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKSA6IG1fdHlwZShlbmNvZGVkRmlsZSksIG1fZmls
ZW5hbWUoZmlsZW5hbWUpLCBtX3Nob3VsZEdlbmVyYXRlRmlsZShzaG91bGRHZW5lcmF0ZUZpbGUp
IHsgfQorI2VuZGlmCiAKICAgICBlbnVtIHsgZGF0YSwgZW5jb2RlZEZpbGUgfSBtX3R5cGU7CiAg
ICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKICAgICBTdHJpbmcgbV9maWxlbmFtZTsKKyNpZiBFTkFC
TEUoQkxPQl9TTElDRSkKKyAgICBsb25nIGxvbmcgbV9maWxlU3RhcnQ7CisgICAgbG9uZyBsb25n
IG1fZmlsZUxlbmd0aDsKKyAgICBkb3VibGUgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1l
OworI2VuZGlmCiAgICAgU3RyaW5nIG1fZ2VuZXJhdGVkRmlsZW5hbWU7CiAgICAgYm9vbCBtX3No
b3VsZEdlbmVyYXRlRmlsZTsKIH07CkBAIC01MCw3ICs1OSwxMSBAQCBpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYSwgY29uc3QgRm9ybURhdGFFbGVtZW50JiBi
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGEubV9kYXRhICE9IGIubV9kYXRhKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgaWYgKGEu
bV9maWxlbmFtZSAhPSBiLm1fZmlsZW5hbWUgfHwgYS5tX2ZpbGVTdGFydCAhPSBiLm1fZmlsZVN0
YXJ0IHx8IGEubV9maWxlTGVuZ3RoICE9IGIubV9maWxlTGVuZ3RoIHx8IGEubV9leHBlY3RlZEZp
bGVNb2RpZmljYXRpb25UaW1lICE9IGIubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKQor
I2Vsc2UKICAgICBpZiAoYS5tX2ZpbGVuYW1lICE9IGIubV9maWxlbmFtZSkKKyNlbmRpZgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTczLDYgKzg2LDkgQEAg
cHVibGljOgogICAgIAogICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3QpOwogICAgIHZvaWQgYXBwZW5kRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNo
b3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlKTsKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICB2
b2lkIGFwcGVuZEZpbGVSYW5nZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3Rh
cnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOwor
I2VuZGlmCiAKICAgICB2b2lkIGZsYXR0ZW4oVmVjdG9yPGNoYXI+JikgY29uc3Q7IC8vIG9taXRz
IGZpbGVzCiAgICAgU3RyaW5nIGZsYXR0ZW5Ub1N0cmluZygpIGNvbnN0OyAvLyBvbWl0cyBmaWxl
cwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVh
bU1hYy5tbSBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMu
bW0KaW5kZXggOGFhOWE2ZC4uNDUwM2QzZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCkBAIC0xMjUsNiArMTI1LDkgQEAgc3RydWN0
IEZvcm1TdHJlYW1GaWVsZHMgewogICAgIFNjaGVkdWxlUGFpckhhc2hTZXQgc2NoZWR1bGVkUnVu
TG9vcFBhaXJzOwogICAgIFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+IHJlbWFpbmluZ0VsZW1lbnRz
OyAvLyBpbiByZXZlcnNlIG9yZGVyCiAgICAgQ0ZSZWFkU3RyZWFtUmVmIGN1cnJlbnRTdHJlYW07
CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgbG9uZyBsb25nIGN1cnJlbnRTdHJlYW1SYW5n
ZUxlbmd0aDsKKyNlbmRpZgogICAgIGNoYXIqIGN1cnJlbnREYXRhOwogICAgIENGUmVhZFN0cmVh
bVJlZiBmb3JtU3RyZWFtOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdHJlYW1MZW5ndGg7CkBA
IC0xNDUsMTIgKzE0OCwxMiBAQCBzdGF0aWMgdm9pZCBjbG9zZUN1cnJlbnRTdHJlYW0oRm9ybVN0
cmVhbUZpZWxkcyAqZm9ybSkKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGFkdmFuY2VDdXJyZW50
U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0pCitzdGF0aWMgYm9vbCBhZHZhbmNlQ3VycmVu
dFN0cmVhbShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQogewogICAgIGNsb3NlQ3VycmVudFN0cmVh
bShmb3JtKTsKIAogICAgIGlmIChmb3JtLT5yZW1haW5pbmdFbGVtZW50cy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBDcmVhdGUgdGhl
IG5ldyBzdHJlYW0uCiAgICAgRm9ybURhdGFFbGVtZW50JiBuZXh0SW5wdXQgPSBmb3JtLT5yZW1h
aW5pbmdFbGVtZW50cy5sYXN0KCk7CkBAIC0xNjAsMTAgKzE2MywyNSBAQCBzdGF0aWMgdm9pZCBh
ZHZhbmNlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQogICAgICAgICBmb3Jt
LT5jdXJyZW50U3RyZWFtID0gQ0ZSZWFkU3RyZWFtQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KDAsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihkYXRhKSwgc2l6ZSwga0NGQWxsb2NhdG9yTnVs
bCk7CiAgICAgICAgIGZvcm0tPmN1cnJlbnREYXRhID0gZGF0YTsKICAgICB9IGVsc2UgeworI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQorICAgICAgICBpZiAobmV4dElucHV0Lm1fZXhwZWN0ZWRGaWxl
TW9kaWZpY2F0aW9uVGltZSkgeworICAgICAgICAgICAgdGltZV90IGZpbGVNb2RpZmljYXRpb25U
aW1lOworICAgICAgICAgICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShuZXh0SW5wdXQu
bV9maWxlbmFtZSwgZmlsZU1vZGlmaWNhdGlvblRpbWUpIHx8IGZpbGVNb2RpZmljYXRpb25UaW1l
ICE9IHN0YXRpY19jYXN0PHRpbWVfdD4obmV4dElucHV0Lm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0
aW9uVGltZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisjZW5k
aWYKKwogICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBuZXh0SW5wdXQubV9zaG91bGRHZW5l
cmF0ZUZpbGUgPyBuZXh0SW5wdXQubV9nZW5lcmF0ZWRGaWxlbmFtZSA6IG5leHRJbnB1dC5tX2Zp
bGVuYW1lOwogICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZpbGVuYW1lKEFkb3B0Q0Ys
IHBhdGguY3JlYXRlQ0ZTdHJpbmcoKSk7CiAgICAgICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZmls
ZVVSTChBZG9wdENGLCBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBmaWxlbmFtZS5n
ZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIEZBTFNFKSk7CiAgICAgICAgIGZvcm0tPmN1cnJl
bnRTdHJlYW0gPSBDRlJlYWRTdHJlYW1DcmVhdGVXaXRoRmlsZSgwLCBmaWxlVVJMLmdldCgpKTsK
KyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICAgICAgaWYgKG5leHRJbnB1dC5tX2ZpbGVTdGFy
dCA+IDApIHsKKyAgICAgICAgICAgIENGTnVtYmVyUmVmIHBvc2l0aW9uID0gQ0ZOdW1iZXJDcmVh
dGUoMCwga0NGTnVtYmVyTG9uZ0xvbmdUeXBlLCAmbmV4dElucHV0Lm1fZmlsZVN0YXJ0KTsKKyAg
ICAgICAgICAgIENGUmVhZFN0cmVhbVNldFByb3BlcnR5KGZvcm0tPmN1cnJlbnRTdHJlYW0sIGtD
RlN0cmVhbVByb3BlcnR5RmlsZUN1cnJlbnRPZmZzZXQsIHBvc2l0aW9uKTsKKyAgICAgICAgfQor
ICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBuZXh0SW5wdXQubV9maWxl
TGVuZ3RoOworI2VuZGlmCiAgICAgfQogICAgIGZvcm0tPnJlbWFpbmluZ0VsZW1lbnRzLnJlbW92
ZUxhc3QoKTsKIApAQCAtMTc2LDE2ICsxOTQsMTkgQEAgc3RhdGljIHZvaWQgYWR2YW5jZUN1cnJl
bnRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKICAgICBTY2hlZHVsZVBhaXJIYXNoU2V0
OjppdGVyYXRvciBlbmQgPSBmb3JtLT5zY2hlZHVsZWRSdW5Mb29wUGFpcnMuZW5kKCk7CiAgICAg
Zm9yIChTY2hlZHVsZVBhaXJIYXNoU2V0OjppdGVyYXRvciBpdCA9IGZvcm0tPnNjaGVkdWxlZFJ1
bkxvb3BQYWlycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIENGUmVhZFN0cmVh
bVNjaGVkdWxlV2l0aFJ1bkxvb3AoZm9ybS0+Y3VycmVudFN0cmVhbSwgKCppdCktPnJ1bkxvb3Ao
KSwgKCppdCktPm1vZGUoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQg
b3Blbk5leHRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyogZm9ybSkKK3N0YXRpYyBib29sIG9wZW5O
ZXh0U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0pCiB7CiAgICAgLy8gU2tpcCBvdmVyIGFu
eSBzdHJlYW1zIHdlIGNhbid0IG9wZW4uCi0gICAgLy8gRm9yIHNvbWUgcHVycG9zZXMgd2UgbWln
aHQgd2FudCB0byByZXR1cm4gYW4gZXJyb3IsIGJ1dCB0aGUgY3VycmVudCBOU1VSTENvbm5lY3Rp
b24KLSAgICAvLyBjYW4ndCByZWFsbHkgZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggYW4gZXJyb3Ig
YXQgdGhpcyBwb2ludCwgc28gdGhpcyBpcyBiZXR0ZXIuCi0gICAgYWR2YW5jZUN1cnJlbnRTdHJl
YW0oZm9ybSk7CisgICAgaWYgKCFhZHZhbmNlQ3VycmVudFN0cmVhbShmb3JtKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHdoaWxlIChmb3JtLT5jdXJyZW50U3RyZWFtICYmICFDRlJlYWRT
dHJlYW1PcGVuKGZvcm0tPmN1cnJlbnRTdHJlYW0pKQotICAgICAgICBhZHZhbmNlQ3VycmVudFN0
cmVhbShmb3JtKTsKKyAgICAgICAgaWYgKCFhZHZhbmNlQ3VycmVudFN0cmVhbShmb3JtKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIHZv
aWQqIGZvcm1DcmVhdGUoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgdm9pZCogY29udGV4dCkKQEAg
LTE5NCw2ICsyMTUsOSBAQCBzdGF0aWMgdm9pZCogZm9ybUNyZWF0ZShDRlJlYWRTdHJlYW1SZWYg
c3RyZWFtLCB2b2lkKiBjb250ZXh0KQogCiAgICAgRm9ybVN0cmVhbUZpZWxkcyogbmV3SW5mbyA9
IG5ldyBGb3JtU3RyZWFtRmllbGRzOwogICAgIG5ld0luZm8tPmN1cnJlbnRTdHJlYW0gPSBOVUxM
OworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIG5ld0luZm8tPmN1cnJlbnRTdHJlYW1SYW5n
ZUxlbmd0aCA9IC0xOworI2VuZGlmCiAgICAgbmV3SW5mby0+Y3VycmVudERhdGEgPSAwOwogICAg
IG5ld0luZm8tPmZvcm1TdHJlYW0gPSBzdHJlYW07IC8vIERvbid0IHJldGFpbi4gVGhhdCB3b3Vs
ZCBjcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUuCiAgICAgbmV3SW5mby0+c3RyZWFtTGVuZ3RoID0g
Zm9ybUNvbnRleHQtPnN0cmVhbUxlbmd0aDsKQEAgLTIyNiwxMSArMjUwLDExIEBAIHN0YXRpYyBC
b29sZWFuIGZvcm1PcGVuKENGUmVhZFN0cmVhbVJlZiwgQ0ZTdHJlYW1FcnJvciogZXJyb3IsIEJv
b2xlYW4qIG9wZW5Db21wCiB7CiAgICAgRm9ybVN0cmVhbUZpZWxkcyogZm9ybSA9IHN0YXRpY19j
YXN0PEZvcm1TdHJlYW1GaWVsZHMqPihjb250ZXh0KTsKIAotICAgIG9wZW5OZXh0U3RyZWFtKGZv
cm0pOworICAgIGJvb2wgb3BlbmVkID0gb3Blbk5leHRTdHJlYW0oZm9ybSk7CiAKLSAgICAqb3Bl
bkNvbXBsZXRlID0gVFJVRTsKLSAgICBlcnJvci0+ZXJyb3IgPSAwOwotICAgIHJldHVybiBUUlVF
OworICAgICpvcGVuQ29tcGxldGUgPSBvcGVuZWQ7CisgICAgZXJyb3ItPmVycm9yID0gb3BlbmVk
ID8gMCA6IGZuT3BuRXJyOworICAgIHJldHVybiBvcGVuZWQ7CiB9CiAKIHN0YXRpYyBDRkluZGV4
IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJbnQ4KiBidWZmZXIsIENGSW5kZXgg
YnVmZmVyTGVuZ3RoLCBDRlN0cmVhbUVycm9yKiBlcnJvciwgQm9vbGVhbiogYXRFT0YsIHZvaWQq
IGNvbnRleHQpCkBAIC0yMzgsNyArMjYyLDEyIEBAIHN0YXRpYyBDRkluZGV4IGZvcm1SZWFkKENG
UmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJbnQ4KiBidWZmZXIsIENGSW5kZXggYnVmZmVyTGVuCiAg
ICAgRm9ybVN0cmVhbUZpZWxkcyogZm9ybSA9IHN0YXRpY19jYXN0PEZvcm1TdHJlYW1GaWVsZHMq
Pihjb250ZXh0KTsKIAogICAgIHdoaWxlIChmb3JtLT5jdXJyZW50U3RyZWFtKSB7Ci0gICAgICAg
IENGSW5kZXggYnl0ZXNSZWFkID0gQ0ZSZWFkU3RyZWFtUmVhZChmb3JtLT5jdXJyZW50U3RyZWFt
LCBidWZmZXIsIGJ1ZmZlckxlbmd0aCk7CisgICAgICAgIENGSW5kZXggYnl0ZXNUb1JlYWQgPSBi
dWZmZXJMZW5ndGg7CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgICAgIGlmIChmb3JtLT5j
dXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gLTEgJiYgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdl
TGVuZ3RoIDwgYnl0ZXNUb1JlYWQpCisgICAgICAgICAgICBieXRlc1RvUmVhZCA9IHN0YXRpY19j
YXN0PENGSW5kZXg+KGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCk7CisjZW5kaWYKKyAg
ICAgICAgQ0ZJbmRleCBieXRlc1JlYWQgPSBDRlJlYWRTdHJlYW1SZWFkKGZvcm0tPmN1cnJlbnRT
dHJlYW0sIGJ1ZmZlciwgYnl0ZXNUb1JlYWQpOwogICAgICAgICBpZiAoYnl0ZXNSZWFkIDwgMCkg
ewogICAgICAgICAgICAgKmVycm9yID0gQ0ZSZWFkU3RyZWFtR2V0RXJyb3IoZm9ybS0+Y3VycmVu
dFN0cmVhbSk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC0yNDcsNiArMjc2LDEwIEBAIHN0
YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJbnQ4KiBidWZm
ZXIsIENGSW5kZXggYnVmZmVyTGVuCiAgICAgICAgICAgICBlcnJvci0+ZXJyb3IgPSAwOwogICAg
ICAgICAgICAgKmF0RU9GID0gRkFMU0U7CiAgICAgICAgICAgICBmb3JtLT5ieXRlc1NlbnQgKz0g
Ynl0ZXNSZWFkOworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgICAgICAgICAgaWYgKGZvcm0t
PmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAhPSAtMSkKKyAgICAgICAgICAgICAgICBmb3JtLT5j
dXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggLT0gYnl0ZXNSZWFkOworI2VuZGlmCiAKICAgICAgICAg
ICAgIGlmICghUmVzb3VyY2VIYW5kbGU6OmRpZFNlbmRCb2R5RGF0YURlbGVnYXRlRXhpc3RzKCkp
IHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRmlndXJlIG91dCBob3cgdG8gb25seSBkbyB0
aGlzIHdoZW4gYSBSZXNvdXJjZUhhbmRsZUNsaWVudCBpcyBhdmFpbGFibGUuCkBAIC0zNTksNiAr
MzkyLDEyIEBAIHZvaWQgc2V0SFRUUEJvZHkoTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCwg
UGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEpCiAgICAgICAgIGlmIChlbGVtZW50Lm1fdHlw
ZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGEpCiAgICAgICAgICAgICBsZW5ndGggKz0gZWxlbWVu
dC5tX2RhdGEuc2l6ZSgpOwogICAgICAgICBlbHNlIHsKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkK
KyAgICAgICAgICAgIGlmIChlbGVtZW50Lm1fZmlsZUxlbmd0aCAhPSAtMSkgeworICAgICAgICAg
ICAgICAgIGxlbmd0aCArPSBlbGVtZW50Lm1fZmlsZUxlbmd0aDsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAgICAgbG9uZyBsb25nIGZp
bGVTaXplOwogICAgICAgICAgICAgaWYgKGdldEZpbGVTaXplKGVsZW1lbnQubV9zaG91bGRHZW5l
cmF0ZUZpbGUgPyBlbGVtZW50Lm1fZ2VuZXJhdGVkRmlsZW5hbWUgOiBlbGVtZW50Lm1fZmlsZW5h
bWUsIGZpbGVTaXplKSkKICAgICAgICAgICAgICAgICBsZW5ndGggKz0gZmlsZVNpemU7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAKaW5kZXggMzI4MThkZi4uZGE4ZDBlMSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcApAQCAtNDQ0LDcgKzQ0NCwxMSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKEJsb2Iq
IGJvZHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHNl
dCBhIENvbnRlbnQtVHlwZSBpZiBvbmUgaXMgbm90IHNldC4KICAgICAgICAgLy8gRklYTUU6IGFk
ZCBzdXBwb3J0IGZvciB1cGxvYWRpbmcgYnVuZGxlcy4KICAgICAgICAgbV9yZXF1ZXN0RW50aXR5
Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGUoKTsKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICAg
ICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZVJhbmdlKGJvZHktPnBhdGgoKSwgYm9k
eS0+c3RhcnQoKSwgYm9keS0+bGVuZ3RoKCksIGJvZHktPm1vZGlmaWNhdGlvblRpbWUoKSk7Cisj
ZWxzZQogICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlKGJvZHktPnBhdGgo
KSwgZmFsc2UpOworI2VuZGlmCiAgICAgfQogCiAgICAgY3JlYXRlUmVxdWVzdChlYyk7CmRpZmYg
LS1naXQgYS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4
IDdiZGY0YjYuLjRiMTkxYTQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBi
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDItMjMgIEppYW4g
TGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEJsb2Iuc2xpY2Ugc3VwcG9ydC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkzCisKKyAgICAgICAgQWRkIEVOQUJM
RV9CTE9CX1NMSUNFIGZlYXR1cmUgZGVmaW5lLgorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMv
RmVhdHVyZURlZmluZXMueGNjb25maWc6CisKIDIwMTAtMDItMjIgIFNpbW9uIEZyYXNlciAgPHNp
bW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZh
bi4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMu
eGNjb25maWcgYi9XZWJLaXQvbWFjL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29u
ZmlnCmluZGV4IDRjNGUxOTMuLmViOTZjMjcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvQ29uZmln
dXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKKysrIGIvV2ViS2l0L21hYy9Db25maWd1
cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtNDEsNiArNDEsNyBAQCBFTkFCTEVf
M0RfUkVOREVSSU5HXzEwNTAgPSBFTkFCTEVfM0RfUkVOREVSSU5HOwogRU5BQkxFXzNEX1JFTkRF
UklOR18xMDYwID0gRU5BQkxFXzNEX1JFTkRFUklORzsKIEVOQUJMRV8zRF9SRU5ERVJJTkdfMTA3
MCA9IEVOQUJMRV8zRF9SRU5ERVJJTkc7CiAKK0VOQUJMRV9CTE9CX1NMSUNFID0gRU5BQkxFX0JM
T0JfU0xJQ0U7CiBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcgPSBFTkFCTEVfQ0hBTk5FTF9NRVNT
QUdJTkc7CiBFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OID0gRU5BQkxFX0NMSUVOVF9C
QVNFRF9HRU9MT0NBVElPTjsKIEVOQUJMRV9EQVRBQkFTRSA9IEVOQUJMRV9EQVRBQkFTRTsKQEAg
LTc0LDQgKzc1LDQgQEAgRU5BQkxFX1hIVE1MTVAgPSA7CiBFTkFCTEVfWFBBVEggPSBFTkFCTEVf
WFBBVEg7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMgPSAk
KEVOQUJMRV8zRF9DQU5WQVMpICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQ0hBTk5F
TF9NRVNTQUdJTkcpICQoRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikgJChFTkFCTEVf
REFUQUJBU0UpICQoRU5BQkxFX0RBVEFHUklEKSAkKEVOQUJMRV9EQVRBTElTVCkgJChFTkFCTEVf
RE9NX1NUT1JBR0UpICQoRU5BQkxFX0VWRU5UU09VUkNFKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVO
QUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JTkRFWEVE
X0RBVEFCQVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9NQVRITUwp
ICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9O
UykgJChFTkFCTEVfUlVCWSkgJChFTkFCTEVfU0FOREJPWCkgJChFTkFCTEVfU0hBUkVEX1dPUktF
UlMpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0FOSU1BVElPTikgJChFTkFCTEVfU1ZHX0FT
X0lNQUdFKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19GT05U
UykgJChFTkFCTEVfU1ZHX0ZPUkVJR05fT0JKRUNUKSAkKEVOQUJMRV9TVkdfVVNFKSAkKEVOQUJM
RV9WSURFTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dNTCkgJChFTkFCTEVfV09S
S0VSUykgJChFTkFCTEVfWEhUTUxNUCkgJChFTkFCTEVfWFBBVEgpICQoRU5BQkxFX1hTTFQpOwor
RkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfQ0FOVkFTKSAkKEVOQUJMRV8zRF9SRU5ERVJJ
TkcpICQoRU5BQkxFX0JMT0JfU0xJQ0UpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVO
QUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04pICQoRU5BQkxFX0RBVEFCQVNFKSAkKEVOQUJM
RV9EQVRBR1JJRCkgJChFTkFCTEVfREFUQUxJU1QpICQoRU5BQkxFX0RPTV9TVE9SQUdFKSAkKEVO
QUJMRV9FVkVOVFNPVVJDRSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfR0VPTE9DQVRJT04p
ICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFC
TEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9OT1RJRklD
QVRJT05TKSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1JVQlkp
ICQoRU5BQkxFX1NBTkRCT1gpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TVkcp
ICQoRU5BQkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFCTEVf
U1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NWR19G
T1JFSUdOX09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5BQkxF
X1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hI
VE1MTVApICQoRU5BQkxFX1hQQVRIKSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwppbmRleCBlYzJiZjZiLi4y
ZGM4YjdkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDItMjMgIEppYW4gTGkgIDxqaWFu
bGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEJsb2Iuc2xpY2Ugc3VwcG9ydC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkzCisKKyAgICAgICAgQWRkIEVOQUJMRV9CTE9CX1NM
SUNFIGZlYXR1cmUgZGVmaW5lIGFuZCAgZmxhZyBmb3IgYnVpbGQtd2Via2l0LiBJdCBpcworICAg
ICAgICBjdXJyZW50bHkgb25seSB0dXJuZWQgb24gZm9yIE1hYy4KKworICAgICAgICAqIFNjcmlw
dHMvYnVpbGQtd2Via2l0OgorCiAyMDEwLTAyLTIyICBUb3IgQXJuZSBWZXN0YsO4ICA8dG9yLmFy
bmUudmVzdGJvQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRl
IENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Vi
a2l0IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKaW5kZXggY2Y1YWFhZC4uODRh
NWZlYSAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKQEAgLTU2LDcgKzU2LDcgQEAgbXkgKCR0
aHJlZURDYW52YXNTdXBwb3J0LCAkdGhyZWVEUmVuZGVyaW5nU3VwcG9ydCwgJGNoYW5uZWxNZXNz
YWdpbmdTdXBwb3J0LCAkY2wKICAgICAkamF2YVNjcmlwdERlYnVnZ2VyU3VwcG9ydCwgJG1hdGht
bFN1cHBvcnQsICRvZmZsaW5lV2ViQXBwbGljYXRpb25TdXBwb3J0LCAkcnVieVN1cHBvcnQsICRz
YW5kYm94U3VwcG9ydCwgJHNoYXJlZFdvcmtlcnNTdXBwb3J0LAogICAgICRzdmdTdXBwb3J0LCAk
c3ZnQW5pbWF0aW9uU3VwcG9ydCwgJHN2Z0FzSW1hZ2VTdXBwb3J0LCAkc3ZnRE9NT2JqQ0JpbmRp
bmdzU3VwcG9ydCwgJHN2Z0ZvbnRzU3VwcG9ydCwKICAgICAkc3ZnRm9yZWlnbk9iamVjdFN1cHBv
cnQsICRzdmdVc2VTdXBwb3J0LCAkdmlkZW9TdXBwb3J0LCAkd2ViU29ja2V0c1N1cHBvcnQsICR3
bWxTdXBwb3J0LCAkd2Nzc1N1cHBvcnQsICR4aHRtbG1wU3VwcG9ydCwgJHdvcmtlcnNTdXBwb3J0
LAotICAgICR4cGF0aFN1cHBvcnQsICR4c2x0U3VwcG9ydCwgJGNvdmVyYWdlU3VwcG9ydCwgJG5v
dGlmaWNhdGlvbnNTdXBwb3J0KTsKKyAgICAkeHBhdGhTdXBwb3J0LCAkeHNsdFN1cHBvcnQsICRj
b3ZlcmFnZVN1cHBvcnQsICRub3RpZmljYXRpb25zU3VwcG9ydCwgJGJsb2JTbGljZVN1cHBvcnQp
OwogCiBteSBAZmVhdHVyZXMgPSAoCiAgICAgeyBvcHRpb24gPT4gIjNkLWNhbnZhcyIsIGRlc2Mg
PT4gIlRvZ2dsZSAzRCBjYW52YXMgc3VwcG9ydCIsCkBAIC02NSw2ICs2NSw5IEBAIG15IEBmZWF0
dXJlcyA9ICgKICAgICB7IG9wdGlvbiA9PiAiM2QtcmVuZGVyaW5nIiwgZGVzYyA9PiAiVG9nZ2xl
IDNEIHJlbmRlcmluZyBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFXzNEX1JFTkRF
UklORyIsIGRlZmF1bHQgPT4gKGlzQXBwbGVNYWNXZWJLaXQoKSAmJiAhaXNUaWdlcigpKSwgdmFs
dWUgPT4gXCR0aHJlZURSZW5kZXJpbmdTdXBwb3J0IH0sCiAKKyAgICB7IG9wdGlvbiA9PiAiYmxv
Yi1zbGljZSIsIGRlc2MgPT4gIlRvZ2dsZSBCbG9iLnNsaWNlIHN1cHBvcnQiLAorICAgICAgZGVm
aW5lID0+ICJFTkFCTEVfQkxPQl9TTElDRSIsIGRlZmF1bHQgPT4gKGlzQXBwbGVNYWNXZWJLaXQo
KSksIHZhbHVlID0+IFwkYmxvYlNsaWNlU3VwcG9ydCB9LAorCiAgICAgeyBvcHRpb24gPT4gImNo
YW5uZWwtbWVzc2FnaW5nIiwgZGVzYyA9PiAiVG9nZ2xlIE1lc3NhZ2VDaGFubmVsIGFuZCBNZXNz
YWdlUG9ydCBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0NIQU5ORUxfTUVTU0FH
SU5HIiwgZGVmYXVsdCA9PiAxLCB2YWx1ZSA9PiBcJGNoYW5uZWxNZXNzYWdpbmdTdXBwb3J0IH0s
CiAKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCA4OThlNWRi
Li44OTA4ZjA5IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBA
IC01NTMsNiArNTUzLDE0IEBAIEFDX0FSR19FTkFCTEUod2ViX3NvY2tldHMsCiAgICAgICAgICAg
ICAgIFtdLFtlbmFibGVfd2ViX3NvY2tldHM9Im5vIl0pCiBBQ19NU0dfUkVTVUxUKFskZW5hYmxl
X3dlYl9zb2NrZXRzXSkKIAorIyBjaGVjayB3aGV0aGVyIHRvIGVuYWJsZSBCbG9iLnNsaWNlIHN1
cHBvcnQKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgQmxvYi5zbGljZSBzdXBw
b3J0XSkKK0FDX0FSR19FTkFCTEUoYmxvYl9zbGljZSwKKyAgICAgICAgICAgICAgQUNfSEVMUF9T
VFJJTkcoWy0tZW5hYmxlLWJsb2Itc2xpY2VdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbZW5hYmxlIHN1cHBvcnQgZm9yIEJsb2Iuc2xpY2UgW2RlZmF1bHQ9bm9dXSksCisgICAgICAg
ICAgICAgIFtdLFtlbmFibGVfYmxvYl9zbGljZT0ibm8iXSkKK0FDX01TR19SRVNVTFQoWyRlbmFi
bGVfYmxvYl9zbGljZV0pCisKICMgY2hlY2sgd2hldGhlciB0byBlbmFibGUgY29kZSBjb3ZlcmFn
ZQogQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBjb2RlIGNvdmVyYWdlIHN1cHBv
cnRdKQogQUNfQVJHX0VOQUJMRShjb3ZlcmFnZSwKQEAgLTc3Niw2ICs3ODQsNyBAQCBBTV9DT05E
SVRJT05BTChbVVNFX1BBTkdPXSwgW3Rlc3QgIiR3aXRoX2ZvbnRfYmFja2VuZCIgPSAicGFuZ28i
XSkKICMgV2ViS2l0IGZlYXR1cmUgY29uZGl0aW9uYWxzCiBBTV9DT05ESVRJT05BTChbRU5BQkxF
X0RFQlVHXSxbdGVzdCAiJGVuYWJsZV9kZWJ1ZyIgPSAieWVzIl0pCiBBTV9DT05ESVRJT05BTChb
RU5BQkxFXzNEX1RSQU5TRk9STVNdLFt0ZXN0ICIkZW5hYmxlXzNEX3RyYW5zZm9ybXMiID0gInll
cyJdKQorQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9CTE9CX1NMSUNFXSxbdGVzdCAiJGVuYWJsZV9i
bG9iX3NsaWNlIiA9ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfQ0hBTk5FTF9NRVNT
QUdJTkddLFt0ZXN0ICIkZW5hYmxlX2NoYW5uZWxfbWVzc2FnaW5nIiA9ICJ5ZXMiXSkKIEFNX0NP
TkRJVElPTkFMKFtFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUl0sW3Rlc3QgIiRlbmFibGVfamF2
YXNjcmlwdF9kZWJ1Z2dlciIgPSAieWVzIl0pCiBBTV9DT05ESVRJT05BTChbRU5BQkxFX09GRkxJ
TkVfV0VCX0FQUExJQ0FUSU9OU10sW3Rlc3QgIiRlbmFibGVfb2ZmbGluZV93ZWJfYXBwbGljYXRp
b25zIiA9ICJ5ZXMiXSkKQEAgLTgzOCw2ICs4NDcsNyBAQCBCdWlsZCBjb25maWd1cmF0aW9uOgog
IE9wdGltaXplZCBtZW1vcnkgYWxsb2NhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogJGVuYWJsZV9mYXN0X21hbGxvYwogRmVhdHVyZXM6CiAgM0QgVHJhbnNmb3JtcyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlXzNEX3RyYW5zZm9y
bXMKKyBCbG9iLnNsaWNlIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6ICRlbmFibGVfYmxvYl9zbGljZQogIEpJVCBjb21waWxhdGlvbiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJsZV9qaXQKICBGaWx0ZXJzIHN1cHBv
cnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZmls
dGVycwogIEdlb2xvY2F0aW9uIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogJGVuYWJsZV9nZW9sb2NhdGlvbgo=
</data>
<flag name="review"
          id="32194"
          type_id="1"
          status="-"
          setter="dimich"
    />
    <flag name="commit-queue"
          id="32195"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49408</attachid>
            <date>2010-02-24 10:30:52 -0800</date>
            <delta_ts>2010-03-05 14:03:36 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>32993_10</filename>
            <type>text/plain</type>
            <size>55563</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmNThkMTUxLi43OTZmODdh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMDItMjMgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJsb2Iuc2xpY2Ugc3VwcG9ydC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkzCisK
KyAgICAgICAgQWRkIEVOQUJMRV9CTE9CX1NMSUNFIGZlYXR1cmUgZGVmaW5lLgorCisgICAgICAg
ICogY29uZmlndXJlLmFjOgorCiAyMDEwLTAyLTIyICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlh
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5k
ZXggNjVjNDVhMi4uZjAzZjFjMyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTAy
LTIzICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbG9iLnNsaWNlIHN1cHBvcnQuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjk5MworCisgICAgICAg
IEFkZCBFTkFCTEVfQkxPQl9TTElDRSBmZWF0dXJlIGRlZmluZS4KKyAgICAgICAgQWxzbyBmaXgg
YSBwcm9ibGVtIHRoYXQgSlNWYWx1ZS50b0ludGVnZXIgaXMgbm90IGV4cG9zZWQgb24gV2luZG93
cy4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5kZWY6CisKIDIwMTAtMDItMjIgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcg
Yi9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpp
bmRleCA0YzRlMTkzLi5lYjk2YzI3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9Db25maWd1
cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZworKysgYi9KYXZhU2NyaXB0Q29yZS9Db25m
aWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtNDEsNiArNDEsNyBAQCBFTkFC
TEVfM0RfUkVOREVSSU5HXzEwNTAgPSBFTkFCTEVfM0RfUkVOREVSSU5HOwogRU5BQkxFXzNEX1JF
TkRFUklOR18xMDYwID0gRU5BQkxFXzNEX1JFTkRFUklORzsKIEVOQUJMRV8zRF9SRU5ERVJJTkdf
MTA3MCA9IEVOQUJMRV8zRF9SRU5ERVJJTkc7CiAKK0VOQUJMRV9CTE9CX1NMSUNFID0gRU5BQkxF
X0JMT0JfU0xJQ0U7CiBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcgPSBFTkFCTEVfQ0hBTk5FTF9N
RVNTQUdJTkc7CiBFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OID0gRU5BQkxFX0NMSUVO
VF9CQVNFRF9HRU9MT0NBVElPTjsKIEVOQUJMRV9EQVRBQkFTRSA9IEVOQUJMRV9EQVRBQkFTRTsK
QEAgLTc0LDQgKzc1LDQgQEAgRU5BQkxFX1hIVE1MTVAgPSA7CiBFTkFCTEVfWFBBVEggPSBFTkFC
TEVfWFBBVEg7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMg
PSAkKEVOQUJMRV8zRF9DQU5WQVMpICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQ0hB
Tk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikgJChFTkFC
TEVfREFUQUJBU0UpICQoRU5BQkxFX0RBVEFHUklEKSAkKEVOQUJMRV9EQVRBTElTVCkgJChFTkFC
TEVfRE9NX1NUT1JBR0UpICQoRU5BQkxFX0VWRU5UU09VUkNFKSAkKEVOQUJMRV9GSUxURVJTKSAk
KEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JTkRF
WEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9NQVRI
TUwpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykgJChFTkFCTEVfUlVCWSkgJChFTkFCTEVfU0FOREJPWCkgJChFTkFCTEVfU0hBUkVEX1dP
UktFUlMpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0FOSU1BVElPTikgJChFTkFCTEVfU1ZH
X0FTX0lNQUdFKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19G
T05UUykgJChFTkFCTEVfU1ZHX0ZPUkVJR05fT0JKRUNUKSAkKEVOQUJMRV9TVkdfVVNFKSAkKEVO
QUJMRV9WSURFTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dNTCkgJChFTkFCTEVf
V09SS0VSUykgJChFTkFCTEVfWEhUTUxNUCkgJChFTkFCTEVfWFBBVEgpICQoRU5BQkxFX1hTTFQp
OworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfQ0FOVkFTKSAkKEVOQUJMRV8zRF9SRU5E
RVJJTkcpICQoRU5BQkxFX0JMT0JfU0xJQ0UpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAk
KEVOQUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04pICQoRU5BQkxFX0RBVEFCQVNFKSAkKEVO
QUJMRV9EQVRBR1JJRCkgJChFTkFCTEVfREFUQUxJU1QpICQoRU5BQkxFX0RPTV9TVE9SQUdFKSAk
KEVOQUJMRV9FVkVOVFNPVVJDRSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfR0VPTE9DQVRJ
T04pICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChF
TkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9OT1RJ
RklDQVRJT05TKSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1JV
QlkpICQoRU5BQkxFX1NBTkRCT1gpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9T
VkcpICQoRU5BQkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFC
TEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NW
R19GT1JFSUdOX09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5B
QkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxF
X1hIVE1MTVApICQoRU5BQkxFX1hQQVRIKSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5kZWYgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCmluZGV4IDc2YWQzMDIuLjIwMzMyNDIgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5kZWYKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgpAQCAtMjY5LDYgKzI2OSw3
IEBAIEVYUE9SVFMKICAgICA/dG9Cb29sZWFuQEpTT2JqZWN0QEpTQ0BAVUJFX05QQVZFeGVjU3Rh
dGVAMkBAWgogICAgID90b0Jvb2xlYW5ASlNTdHJpbmdASlNDQEBFQkVfTlBBVkV4ZWNTdGF0ZUAy
QEBaCiAgICAgP3RvSW50MzJTbG93Q2FzZUBKU0NAQFlBSE5BQV9OQFoKKyAgICA/dG9JbnRlZ2Vy
QEpTVmFsdWVASlNDQEBRQkVOUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/dG9OdW1iZXJASlNDZWxs
QEpTQ0BAVUJFTlBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvTnVtYmVyQEpTT2JqZWN0QEpTQ0BA
VUJFTlBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvTnVtYmVyQEpTU3RyaW5nQEpTQ0BARUJFTlBB
VkV4ZWNTdGF0ZUAyQEBaCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDUzMDlkYi4uNTExOTUyZiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDM1IEBACisyMDEwLTAyLTIzICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbG9iLnNsaWNlIHN1
cHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
Mjk5MworCisgICAgICAgIEFkZCBhIG5ldyBsYXlvdXQgdGVzdCB0byB0ZXN0IHNsaWNpbmcgYW5k
IHNlbmRpbmcgYSBmaWxlLiBJbiBhZGRpdGlvbiwKKyAgICAgICAgdHdvIG5ldyBzY3JpcHRzIGFy
ZSBpbnRyb2R1Y2VkIHRvIGNyZWF0ZSBhbmQgdG91Y2ggdGhlIHRlbXAgZmlsZS4KKworICAgICAg
ICBNb3ZlIHNvbWUgY29kZSBmcm9tIHNlbmQtZHJhZ2dlZC1maWxlLmpzIHRvIGEgbmV3IGZpbGUK
KyAgICAgICAgc2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50LWZvci1kcmFnLmpzIHNvIHRoYXQgaXQg
Y2FuIGJlIHVzZWQgYnkgYm90aAorICAgICAgICBzZW5kLWRyYWdnZWQtZmlsZS5qcyBhbmQgc2Vu
ZC1zbGljZWQtZHJhZ2dlZC1maWxlLmpzIHRvIHNldHVwIHRoZSBpbnB1dAorICAgICAgICBlbGVt
ZW50IGZvciB0aGUgZmlsZSBkcmFnZ2luZy4KKworICAgICAgICBTaW5jZSB0aGUgQmxvYi5zbGlj
ZSBpcyBvbmx5IGVuYWJsZWQgZm9yIE1hYywgd2UgZGlzYWJsZSB0aGUgbmV3IHRlc3QKKyAgICAg
ICAgZm9yIGFsbCBvdGhlciBwbGF0Zm9ybXMuCisKKyAgICAgICAgKiBmYXN0L2RvbS9XaW5kb3cv
d2luZG93LXByb3BlcnRpZXMuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3Jlc291
cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9j
YWwvcmVzb3VyY2VzL3NlbmQtZHJhZ2dlZC1maWxlLmpzOgorICAgICAgICAqIGh0dHAvdGVzdHMv
bG9jYWwvcmVzb3VyY2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qczogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50
LWZvci1kcmFnLmpzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZHJh
Z2dlZC1maWxlLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1k
cmFnZ2VkLWZpbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xv
Y2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRw
L3Rlc3RzL3Jlc291cmNlcy90b3VjaC10ZW1wLWZpbGUucGhwOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3Jlc291cmNlcy93cml0ZS10ZW1wLWZpbGUucGhwOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOgorCiAyMDEwLTAyLTIyICBDaHJpcyBGbGVp
emFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgRml4aW5nIExheW91dCB0ZXN0
IGZhaWx1cmUuIE5vdCByZXZpZXdlZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9t
L1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwKaW5kZXggMDNlNjQ3OC4uYTVlMDBiNiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwK
QEAgLTcxLDcgKzcxLDggQEAgdmFyIF9fc2tpcF9fID0gewogICAgICJ3aW5kb3cuV2ViR0xVbnNp
Z25lZEJ5dGVBcnJheSIgOiAxLCAKICAgICAid2luZG93LldlYkdMVW5zaWduZWRJbnRBcnJheSIg
OiAxLCAKICAgICAid2luZG93LldlYkdMVW5zaWduZWRTaG9ydEFycmF5IiA6IDEsCi0gICAgIndp
bmRvdy5jbGllbnRJbmZvcm1hdGlvbi5nZW9sb2NhdGlvbiIgOiAxCisgICAgIndpbmRvdy5jbGll
bnRJbmZvcm1hdGlvbi5nZW9sb2NhdGlvbiIgOiAxLAorICAgICJ3aW5kb3cuQmxvYi5wcm90b3R5
cGUuc2xpY2UiIDogMQogfTsKIAogZnVuY3Rpb24gbG9nVmFsdWUodmFsdWVOYW1lKQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZmlsZS1mb3ItZHJh
Zy10by1zZW5kLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL2Zp
bGUtZm9yLWRyYWctdG8tc2VuZC50eHQKaW5kZXggNWFiMmY4YS4uNmE1MzdiNSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10
by1zZW5kLnR4dAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9m
aWxlLWZvci1kcmFnLXRvLXNlbmQudHh0CkBAIC0xICsxIEBACi1IZWxsbwpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKKzEyMzQ1Njc4OTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWRy
YWdnZWQtZmlsZS5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3Nl
bmQtZHJhZ2dlZC1maWxlLmpzCmluZGV4IGJlZDQwNzguLmVmYzExMjQgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtZHJhZ2dlZC1maWxlLmpz
CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtZHJhZ2dl
ZC1maWxlLmpzCkBAIC0xLDQ4ICsxLDIxIEBACiBkZXNjcmlwdGlvbigiVGVzdCBmb3Igc2VuZGlu
ZyBhIGRyYWdnZWQgZmlsZSB2aWEgWE1MSHR0cFJlcXVlc3QuIik7CiAKLXZhciBmaWxlSW5wdXQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotZmlsZUlucHV0LnR5cGUgPSAiZmls
ZSI7Ci1maWxlSW5wdXQuc3R5bGUud2lkdGggPSAiMTAwcHgiOwotZmlsZUlucHV0LnN0eWxlLmhl
aWdodCA9ICIxMDBweCI7Ci0vLyBJbXBvcnRhbnQgdGhhdCB3ZSBwdXQgdGhpcyBhdCB0aGUgdG9w
IG9mIHRoZSBkb2Mgc28gdGhhdCBsb2dnaW5nIGRvZXMgbm90IGNhdXNlIGl0IHRvIGdvIG91dCBv
ZiB2aWV3ICh3aGVyZSBpdCBjYW4ndCBiZSBkcmFnZ2VkIHRvKQotZG9jdW1lbnQuYm9keS5pbnNl
cnRCZWZvcmUoZmlsZUlucHV0LCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpOwotCi1maWxlSW5w
dXQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VudGVyIiwgZnVuY3Rpb24oKSB7Ci0gICAgZXZlbnQu
cHJldmVudERlZmF1bHQoKTsKLX0sIGZhbHNlKTsKLQotZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVu
ZXIoImRyYWdvdmVyIiwgZnVuY3Rpb24oKSB7Ci0gICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BF
ZmZlY3QgPSAiY29weSI7Ci0gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLX0sIGZhbHNlKTsK
LQotZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBmdW5jdGlvbigpIHsKLSAgICBp
ZiAoZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluZGV4T2YoIkZpbGVzIikgIT0gLTEgJiYgZXZl
bnQuZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aCA9PSAxKQotICAgICAgICB0ZXN0UGFzc2VkKCJl
dmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLiIpOwotICAg
IGVsc2UgewotICAgICAgICB0ZXN0RmFpbGVkKCJldmVudC5kYXRhVHJhbnNmZXIgZG9lcyBub3Qg
Y29udGFpbiBhIEZpbGUgb2JqZWN0IG9uIGRyb3AuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KK2Z1bmN0aW9uIG9uRmlsZURyb3AoZmlsZSkKK3sKICAgICB2YXIgeGhyID0gbmV3IFhNTEh0
dHBSZXF1ZXN0KCk7CiAgICAgeGhyLm9wZW4oIlBPU1QiLCAiaHR0cDovLzEyNy4wLjAuMTo4MDAw
L3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9wb3N0LWVjaG8uY2dpIiwgZmFsc2UpOwotICAgIHho
ci5zZW5kKGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlc1swXSk7Ci0gICAgaWYgKHhoci5yZXNwb25z
ZVRleHQgPT0gIkhlbGxvIikKKyAgICB4aHIuc2VuZChmaWxlKTsKKyAgICBpZiAoeGhyLnJlc3Bv
bnNlVGV4dCA9PSAiMTIzNDU2Nzg5MCIpCiAgICAgICAgIHRlc3RQYXNzZWQoIkV4cGVjdGVkIHJl
c3BvbnNlIGRhdGEgcmVjZWl2ZWQuIik7CiAgICAgZWxzZQogICAgICAgICB0ZXN0RmFpbGVkKCJV
bmV4cGVjdGVkIHJlc3BvbnNlIGRhdGEgcmVjZWl2ZWQ6ICIgKyB4aHIucmVzcG9uc2VUZXh0KTsK
IAogICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci19LCBmYWxzZSk7Ci0KLWZ1bmN0aW9uIG1v
dmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGVsZW1lbnQpIHsKLSAgICB2YXIgY2VudGVyWCA9IGVs
ZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOwotICAgIHZhciBjZW50
ZXJZID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7Ci0gICAg
ZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oY2VudGVyWCwgY2VudGVyWSk7CiB9CiAKIGZ1bmN0aW9u
IHJ1blRlc3QoKQogeworICAgIHNldEZpbGVJbnB1dERyb3BDYWxsYmFjayhvbkZpbGVEcm9wKTsK
ICAgICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMoWyJyZXNvdXJjZXMvZmlsZS1mb3It
ZHJhZy10by1zZW5kLnR4dCJdKTsKICAgICBtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudChmaWxl
SW5wdXQpOwogICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKQEAgLTUxLDcgKzI0LDcgQEAgZnVu
Y3Rpb24gcnVuVGVzdCgpCiBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CiAgICAgcnVuVGVzdCgp
OwogICAgIC8vIENsZWFuIHVwIGFmdGVyIG91cnNlbHZlcwotICAgIGZpbGVJbnB1dC5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKGZpbGVJbnB1dCk7CisgICAgcmVtb3ZlRmlsZUlucHV0RWxlbWVudCgp
OwogfSBlbHNlIHsKICAgICB0ZXN0RmFpbGVkKCJUaGlzIHRlc3QgaXMgbm90IGludGVyYWN0aXZl
LCBwbGVhc2UgcnVuIHVzaW5nIER1bXBSZW5kZXJUcmVlIik7CiB9CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZp
bGUuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLXNsaWNl
ZC1kcmFnZ2VkLWZpbGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIy
ODlhOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVz
b3VyY2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qcwpAQCAtMCwwICsxLDE1MCBAQAorZGVz
Y3JpcHRpb24oIlRlc3QgZm9yIHNsaWNpbmcgYSBkcmFnZ2VkIGZpbGUgYW5kIHNlbmRpbmcgaXQg
dmlhIFhNTEh0dHBSZXF1ZXN0LiIpOworCit2YXIgb3JpZ2luYWxUZXh0ID0gIjEyMzQ1Njc4OTAi
OwordmFyIHRlbXBGaWxlTmFtZSA9ICJzZW5kLXNsaWNlLWRyYWdnZWQtZmlsZS50bXAiOwordmFy
IHRlbXBGaWxlT3JpZ2luYWxNb2RpZmljYXRpb25UaW1lOwordmFyIHN1YmZpbGU7CisKK2Z1bmN0
aW9uIHVwbG9hZEZpbGUoZmlsZSwgZXhwZWN0ZWRUZXh0LCBleHBlY3RlZEV4Y2VwdGlvbikKK3sK
KyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9wZW4oIlBPU1Qi
LCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9wb3N0LWVj
aG8uY2dpIiwgZmFsc2UpOworCisgICAgdmFyIHBhc3NlZDsKKyAgICB2YXIgbWVzc2FnZTsKKyAg
ICB0cnkgeworICAgICAgICB4aHIuc2VuZChmaWxlKTsKKyAgICAgICAgaWYgKGV4cGVjdGVkRXhj
ZXB0aW9uKSB7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1lc3Nh
Z2UgPSAiVW5leHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNl
VGV4dCArICIuIEV4cGVjdGluZyBleGNlcHRpb24gdGhyb3duIjsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmICh4aHIucmVzcG9uc2VUZXh0ID09IGV4cGVjdGVkVGV4dCkgeworICAg
ICAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJF
eHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4dDsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgbWVzc2FnZSA9ICJVbmV4cGVjdGVkIHJlc3BvbnNlIGRhdGEgcmVjZWl2ZWQ6
ICIgKyB4aHIucmVzcG9uc2VUZXh0ICsgIi4gRXhwZWN0aW5nOiAiICsgZXhwZWN0ZWRUZXh0Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgaWYg
KGV4cGVjdGVkRXhjZXB0aW9uKSB7CisgICAgICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgICAg
ICAgICAgbWVzc2FnZSA9ICJFeHBlY3RlZCBleGNlcHRpb24gdGhyb3duOiAiICsgZXg7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1l
c3NhZ2UgPSAiVW5leHBlY3RlZCBleGNlcHRpb24gdGhyb3duOiAiICsgZXg7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAocGFzc2VkKQorICAgICAgICB0ZXN0UGFzc2VkKG1lc3NhZ2UpOwor
ICAgIGVsc2UKKyAgICAgICAgdGVzdEZhaWxlZChtZXNzYWdlKTsKK30KKworZnVuY3Rpb24gY3Jl
YXRlVGVtcEZpbGUoZmlsZURhdGEpCit7CisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVz
dCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9yZXNvdXJj
ZXMvd3JpdGUtdGVtcC1maWxlLnBocD9maWxlbmFtZT0iICsgdGVtcEZpbGVOYW1lICsgIiZkYXRh
PSIgKyBmaWxlRGF0YSwgZmFsc2UpOworICAgIHhoci5zZW5kKCk7CisgICAgaWYgKHhoci5zdGF0
dXMgIT0gMjAwKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIlVuZXhwZWN0ZWQgcmVzcG9uc2Ugc3Rh
dHVzIHJlY2VpdmVkOiAiICsgeGhyLnN0YXR1cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICB2YXIgdmFsdWVzID0geGhyLnJlc3BvbnNlVGV4dC5zcGxpdCgnXG4nKTsKKyAgICBpZiAo
dmFsdWVzLmxlbmd0aCA8IDIpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiVW5leHBlY3RlZCByZXNw
b25zZSB0ZXh0IHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWVzOworfQorCitmdW5jdGlvbiB0b3VjaFRlbXBG
aWxlKCkKK3sKKyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9w
ZW4oIlBPU1QiLCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3Jlc291cmNlcy90b3VjaC10ZW1wLWZp
bGUucGhwP2ZpbGVuYW1lPSIgKyB0ZW1wRmlsZU5hbWUsIGZhbHNlKTsKKyAgICB4aHIuc2VuZCgp
OworfQorCitmdW5jdGlvbiByZW1vdmVUZW1wRmlsZSgpCit7CisgICAgdmFyIHhociA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6
ODAwMC9yZXNvdXJjZXMvcmVzZXQtdGVtcC1maWxlLnBocD9maWxlbmFtZT0iICsgdGVtcEZpbGVO
YW1lLCBmYWxzZSk7CisgICAgeGhyLnNlbmQoKTsKK30KKworZnVuY3Rpb24gb25TdGFibGVGaWxl
RHJvcChmaWxlLCBzdGFydCwgbGVuZ3RoKQoreworICAgIC8vIFNsaWNlIHRoZSBmaWxlLgorICAg
IHN1YmZpbGUgPSBmaWxlLnNsaWNlKHN0YXJ0LCBsZW5ndGgpOworICAgIHZhciBleHBlY3RlZFRl
eHQgPSBvcmlnaW5hbFRleHQuc3Vic3RyaW5nKHN0YXJ0LCBzdGFydCArIGxlbmd0aCk7CisgICAg
c2hvdWxkRXZhbHVhdGVUbygic3ViZmlsZS5zaXplIiwgZXhwZWN0ZWRUZXh0Lmxlbmd0aCk7CisK
KyAgICAvLyBVcGxvYWQgdGhlIHNsaWNlZCBmaWxlLgorICAgIHVwbG9hZEZpbGUoc3ViZmlsZSwg
ZXhwZWN0ZWRUZXh0LCBmYWxzZSk7Cit9CisKK2Z1bmN0aW9uIGRyYWdBbmRTbGljZVN0YWJsZUZp
bGUoc3RhcnQsIGxlbmd0aCkKK3sKKyAgICBzZXRGaWxlSW5wdXREcm9wQ2FsbGJhY2soZnVuY3Rp
b24oZmlsZSkgeyBvblN0YWJsZUZpbGVEcm9wKGZpbGUsIHN0YXJ0LCBsZW5ndGgpOyB9KTsKKyAg
ICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMoWyJyZXNvdXJjZXMvZmlsZS1mb3ItZHJh
Zy10by1zZW5kLnR4dCJdKTsKKyAgICBtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudChmaWxlSW5w
dXQpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKK30KKworZnVuY3Rpb24gb25VbnN0YWJs
ZUZpbGVEcm9wKGZpbGUsIHN0YXJ0LCBsZW5ndGgpCit7CisgICAgLy8gU2xpY2UgdGhlIGZpbGUu
CisgICAgc3ViZmlsZSA9IGZpbGUuc2xpY2Uoc3RhcnQsIGxlbmd0aCk7CisgICAgdmFyIGV4cGVj
dGVkVGV4dCA9IG9yaWdpbmFsVGV4dC5zdWJzdHJpbmcoc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoKTsK
KyAgICBzaG91bGRFdmFsdWF0ZVRvKCJzdWJmaWxlLnNpemUiLCBleHBlY3RlZFRleHQubGVuZ3Ro
KTsKKyAgCisgICAgLy8gVXBsb2FkIHRoZSBzbGljZWQgZmlsZS4KKyAgICB1cGxvYWRGaWxlKHN1
YmZpbGUsIGV4cGVjdGVkVGV4dCwgZmFsc2UpOworCisgICAgLy8gVG91Y2ggdGhlIHVuZGVybHlp
bmcgdGVtcCBmaWxlLgorICAgIHRvdWNoVGVtcEZpbGUoKTsKKyAgICAKKyAgICAvLyBVcGxvYWQg
dGhlIHNsaWNlZCBmaWxlLiBXZSBzaG91bGQgcmVjZWl2ZSBhbiBleGNlcHRpb24gc2luY2UgdGhl
IGZpbGUgaGFzIGJlZW4gY2hhbmdlZC4KKyAgICB1cGxvYWRGaWxlKHN1YmZpbGUsIG51bGwsIHRy
dWUpOworCisgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wIGZpbGUuCisgICAgcmVtb3ZlVGVtcEZpbGUo
KTsKK30KKworZnVuY3Rpb24gZHJhZ0FuZFNsaWNlVW5zdGFibGVGaWxlKHN0YXJ0LCBsZW5ndGgp
Cit7CisgICAgdmFyIHRlbXBGaWxlSW5mbyA9IGNyZWF0ZVRlbXBGaWxlKG9yaWdpbmFsVGV4dCk7
CisgICAgaWYgKHRlbXBGaWxlSW5mby5sZW5ndGggPCAyKSB7CisgICAgICAgIGRvbmUoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2YXIgdGVtcEZpbGVQYXRoID0gdGVtcEZpbGVJbmZv
WzBdOworICAgIHRlbXBGaWxlT3JpZ2luYWxNb2RpZmljYXRpb25UaW1lID0gdGVtcEZpbGVJbmZv
WzFdOworCisgICAgc2V0RmlsZUlucHV0RHJvcENhbGxiYWNrKGZ1bmN0aW9uKGZpbGUpIHsgb25V
bnN0YWJsZUZpbGVEcm9wKGZpbGUsIHN0YXJ0LCBsZW5ndGgpOyB9KTsKKyAgICBldmVudFNlbmRl
ci5iZWdpbkRyYWdXaXRoRmlsZXMoW3RlbXBGaWxlUGF0aF0pOworICAgIG1vdmVNb3VzZVRvQ2Vu
dGVyT2ZFbGVtZW50KGZpbGVJbnB1dCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworfQor
CitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBkcmFnQW5kU2xpY2VTdGFibGVGaWxlKDIsIDQp
OworICAgIGRyYWdBbmRTbGljZVN0YWJsZUZpbGUoMiwgMjApOworICAgIGRyYWdBbmRTbGljZVN0
YWJsZUZpbGUoMTUsIDIwKTsKKworICAgIGRyYWdBbmRTbGljZVVuc3RhYmxlRmlsZSgzLCA1KTsK
K30KKworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHJ1blRlc3QoKTsKKyAgICAvLyBD
bGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMKKyAgICByZW1vdmVGaWxlSW5wdXRFbGVtZW50KCk7Cit9
IGVsc2UgeworICAgIHRlc3RGYWlsZWQoIlRoaXMgdGVzdCBpcyBub3QgaW50ZXJhY3RpdmUsIHBs
ZWFzZSBydW4gdXNpbmcgRHVtcFJlbmRlclRyZWUiKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jl
c291cmNlcy9zZXR1cC1maWxlLWlucHV0LWVsZW1lbnQtZm9yLWRyYWcuanMgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZXR1cC1maWxlLWlucHV0LWVsZW1lbnQtZm9y
LWRyYWcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUxYzY4MAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3Nl
dHVwLWZpbGUtaW5wdXQtZWxlbWVudC1mb3ItZHJhZy5qcwpAQCAtMCwwICsxLDQ2IEBACit2YXIg
ZmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKK2ZpbGVJbnB1dC50
eXBlID0gImZpbGUiOworZmlsZUlucHV0LnN0eWxlLndpZHRoID0gIjEwMHB4IjsKK2ZpbGVJbnB1
dC5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOworLy8gSW1wb3J0YW50IHRoYXQgd2UgcHV0IHRoaXMg
YXQgdGhlIHRvcCBvZiB0aGUgZG9jIHNvIHRoYXQgbG9nZ2luZyBkb2VzIG5vdCBjYXVzZSBpdCB0
byBnbyBvdXQgb2YgdmlldyAod2hlcmUgaXQgY2FuJ3QgYmUgZHJhZ2dlZCB0bykKK2RvY3VtZW50
LmJvZHkuaW5zZXJ0QmVmb3JlKGZpbGVJbnB1dCwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTsK
KworZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdlbnRlciIsIGZ1bmN0aW9uKCkgewor
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2ZpbGVJbnB1dC5hZGRF
dmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIGZ1bmN0aW9uKCkgeworICAgIGV2ZW50LmRhdGFUcmFu
c2Zlci5kcm9wRWZmZWN0ID0gImNvcHkiOworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9
LCBmYWxzZSk7CisKK3ZhciBmaWxlSW5wdXREcm9wQ2FsbGJhY2sgPSBudWxsOworZmlsZUlucHV0
LmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBmdW5jdGlvbigpIHsKKyAgICBpZiAoZXZlbnQuZGF0
YVRyYW5zZmVyLnR5cGVzLmluZGV4T2YoIkZpbGVzIikgIT0gLTEgJiYgZXZlbnQuZGF0YVRyYW5z
ZmVyLmZpbGVzLmxlbmd0aCA9PSAxKQorICAgICAgICB0ZXN0UGFzc2VkKCJldmVudC5kYXRhVHJh
bnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLiIpOworICAgIGVsc2UgeworICAg
ICAgICB0ZXN0RmFpbGVkKCJldmVudC5kYXRhVHJhbnNmZXIgZG9lcyBub3QgY29udGFpbiBhIEZp
bGUgb2JqZWN0IG9uIGRyb3AuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmaWxl
SW5wdXREcm9wQ2FsbGJhY2soZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzWzBdKTsKKworICAgIGV2
ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2Z1bmN0aW9uIHNldEZpbGVJbnB1
dERyb3BDYWxsYmFjayhmaWxlSW5wdXREcm9wQ2FsbGJhY2tGdW5jKQoreworICAgIGZpbGVJbnB1
dERyb3BDYWxsYmFjayA9IGZpbGVJbnB1dERyb3BDYWxsYmFja0Z1bmM7Cit9CisKK2Z1bmN0aW9u
IG1vdmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGVsZW1lbnQpCit7CisgICAgdmFyIGNlbnRlclgg
PSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMjsKKyAgICB2YXIg
Y2VudGVyWSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOwor
ICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGNlbnRlclgsIGNlbnRlclkpOworfQorCitmdW5j
dGlvbiByZW1vdmVGaWxlSW5wdXRFbGVtZW50KCkKK3sKKyAgICBmaWxlSW5wdXQucGFyZW50Tm9k
ZS5yZW1vdmVDaGlsZChmaWxlSW5wdXQpCit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWwKaW5kZXggM2YyMjEwYS4uZjUyODBmNCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmls
ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFnZ2VkLWZp
bGUuaHRtbApAQCAtNyw2ICs3LDcgQEAKIDxib2R5PgogPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+
CiA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2V0dXAt
ZmlsZS1pbnB1dC1lbGVtZW50LWZvci1kcmFnLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ii4u
Ly4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CiA8L2Jv
ZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2Vk
LWRyYWdnZWQtZmlsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2Fs
L3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYjQ2MDc5MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDIyIEBACitUZXN0IGZvciBzbGljaW5nIGEgZHJhZ2dlZCBmaWxlIGFuZCBzZW5k
aW5nIGl0IHZpYSBYTUxIdHRwUmVxdWVzdC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1MgZXZlbnQuZGF0YVRyYW5zZmVyIGNvbnRhaW5zIGEgRmlsZSBvYmplY3Qgb24gZHJv
cC4KK1BBU1Mgc3ViZmlsZS5zaXplIGlzIDQKK1BBU1MgRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSBy
ZWNlaXZlZDogMzQ1NgorUEFTUyBldmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9i
amVjdCBvbiBkcm9wLgorUEFTUyBzdWJmaWxlLnNpemUgaXMgOAorUEFTUyBFeHBlY3RlZCByZXNw
b25zZSBkYXRhIHJlY2VpdmVkOiAzNDU2Nzg5MAorUEFTUyBldmVudC5kYXRhVHJhbnNmZXIgY29u
dGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLgorUEFTUyBzdWJmaWxlLnNpemUgaXMgMAorUEFT
UyBFeHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAKK1BBU1MgZXZlbnQuZGF0YVRyYW5z
ZmVyIGNvbnRhaW5zIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4KK1BBU1Mgc3ViZmlsZS5zaXplIGlz
IDUKK1BBU1MgRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDogNDU2NzgKK1BBU1MgRXhw
ZWN0ZWQgZXhjZXB0aW9uIHRocm93bjogRXJyb3I6IE5FVFdPUktfRVJSOiBYTUxIdHRwUmVxdWVz
dCBFeGNlcHRpb24gMTAxCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5k
LXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwv
c2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYzA0MWIxZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKQEAgLTAsMCArMSwxNCBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvc2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50LWZvci1kcmFnLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZXMvdG91Y2gtdGVtcC1maWxlLnBocCBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VzL3RvdWNoLXRlbXAtZmlsZS5waHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI4MjlkZgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VzL3RvdWNoLXRlbXAtZmlsZS5waHAKQEAgLTAs
MCArMSwyMiBAQAorPD9waHAKK3JlcXVpcmVfb25jZSAncG9ydGFiaWxpdHlMYXllci5waHAnOwor
CitpZiAoIXN5c19nZXRfdGVtcF9kaXIoKSkgeworICAgIGVjaG8gIkZBSUw6IE5vIHRlbXAgZGly
IHdhcyByZXR1cm5lZC5cbiI7CisgICAgZXhpdCgpOworfQorCiskdG1wRmlsZSA9IHN5c19nZXRf
dGVtcF9kaXIoKSAuICIvIiAuICRfR0VUWydmaWxlbmFtZSddOworCiskc3RhdCA9IHN0YXQoJHRt
cEZpbGUpOworaWYgKCEkc3RhdCkgeworICAgIGVjaG8gIkZBSUw6IHN0YXQoKSBjYWxsIGZhaWxl
ZC5cbiI7CisgICAgZXhpdCgpOworfQorCiskbXRpbWUgPSAkc3RhdFsnbXRpbWUnXSArIDE7CisK
K2lmICghdG91Y2goJHRtcEZpbGUsICRtdGltZSkpIHsKKyAgICBlY2hvICJGQUlMOiB0b3VjaCgp
IGNhbGwgZmFpbGVkLlxuIjsKK30KKz8+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3Jlc291cmNlcy93cml0ZS10ZW1wLWZpbGUucGhwIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9yZXNvdXJjZXMvd3JpdGUtdGVtcC1maWxlLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5mZmUyYzhjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9yZXNvdXJjZXMvd3JpdGUtdGVtcC1maWxlLnBocApAQCAtMCwwICsxLDIwIEBACis8P3Bo
cAorcmVxdWlyZV9vbmNlICdwb3J0YWJpbGl0eUxheWVyLnBocCc7CisKK2lmICghc3lzX2dldF90
ZW1wX2RpcigpKSB7CisgICAgZWNobyAiRkFJTDogTm8gdGVtcCBkaXIgd2FzIHJldHVybmVkLlxu
IjsKKyAgICBleGl0KCk7Cit9CisKKyR0bXBGaWxlID0gc3lzX2dldF90ZW1wX2RpcigpIC4gIi8i
IC4gJF9HRVRbJ2ZpbGVuYW1lJ107CisKK2lmICghZmlsZV9wdXRfY29udGVudHMoJHRtcEZpbGUs
ICRfR0VUWydkYXRhJ10pKSB7CisgICAgZWNobyAiRkFJTDogdW5hYmxlIHRvIHdyaXRlIHRvIGZp
bGU6ICIgLiAkdG1wRmlsZSAuICJcbiI7CisgICAgZXhpdCgpOworfQorCiskc3RhdCA9IHN0YXQo
JHRtcEZpbGUpOworCitlY2hvICR0bXBGaWxlIC4gIlxuIjsKK2VjaG8gJHN0YXRbJ210aW1lJ107
Cis/PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCA1YzliNmJiLi5hNGM2ZTAxIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtMzQzNCw2ICszNDM0LDcgQEAgaHR0cC90ZXN0cy9s
b2FkaW5nL3ByZWxvYWQtaW1nLXRlc3QuaHRtbAogaHR0cC90ZXN0cy9sb2FkaW5nL3Nsb3ctcGFy
c2luZy1zdWJmcmFtZS5odG1sCiBodHRwL3Rlc3RzL2xvYWRpbmcvdGV4dC1jb250ZW50LXR5cGUt
d2l0aC1iaW5hcnktZXh0ZW5zaW9uLmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFnZ2Vk
LWZpbGUuaHRtbAoraHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRt
bAogaHR0cC90ZXN0cy9tZWRpYS92aWRlby1wbGF5LXN0YWxsLXNlZWsuaHRtbAogaHR0cC90ZXN0
cy9tZWRpYS92aWRlby1wbGF5LXN0YWxsLmh0bWwKIGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tc2Vl
a2FibGUtc3RhbGwuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tp
cHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKaW5kZXggODMxZjVlOS4uMTNj
ODMzMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAorKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCkBAIC01Myw2ICs1Myw3IEBAIHBsdWdpbnMv
c2V0LXN0YXR1cy5odG1sCiAjIEZhaWxpbmcgTG9jYWwgdGVzdHMKIGh0dHAvdGVzdHMvbG9jYWwv
ZHJhZy1vdmVyLXJlbW90ZS1jb250ZW50Lmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFn
Z2VkLWZpbGUuaHRtbAoraHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUu
aHRtbAogCiAjIEZhaWxpbmcgbmF2aWdhdGlvbiB0ZXN0cwogaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L2FuY2hvci1mcmFtZXMuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2lu
L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAppbmRleCAxOGViYjY4
Li40NGE1ZjU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZApAQCAtNjYwLDYgKzY2MCw3IEBA
IGZhc3QvZm9ybXMvaW5wdXQtc2VsZWN0ZWRvcHRpb24uaHRtbAogCiAjIDxodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkyODc+CiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQt
ZHJhZ2dlZC1maWxlLmh0bWwKK2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1m
aWxlLmh0bWwKIAogIyA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5
Mjg5PgogcGx1Z2lucy9kZXN0cm95LWR1cmluZy1ucHAtbmV3Lmh0bWwKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQzZGY0Zi4uZGNhNTMz
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw1MyBAQAorMjAxMC0wMi0yMyAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQmxv
Yi5zbGljZSBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzI5OTMKKyAgICAgICAgCisgICAgICAgIFRoZSBmb2xsb3dpbmcgc2VtYW50aWMg
aXMgYWRvcHRlZCBwZXIgdGhlIGRpc2N1c3Npb25zIG9uIHB1YmxpYy13ZWJhcHBzOgorICAgICAg
ICAxKSBGaWxlLnNsaWNlKCkgZG9lcyBhIHN5bmNocm9ub3VzIElPIHRvIGNhcHR1cmUgdGhlIGN1
cnJlbnQgc2l6ZSBhbmQKKyAgICAgICAgICAgbW9kaWZpY2F0aW9uIHRpbWUgYW5kIGNhY2hlIHRo
ZW0gaW4gdGhlIHJlc3VsdGluZyBCbG9iLgorICAgICAgICAyKSBTdWJzZXF1ZW50IEJsb2Igb3Bl
cmF0aW9ucywgbGlrZSBCbG9iLnNsaWNlIGFuZCBCbG9iLnNpemUgc2ltcGx5CisgICAgICAgICAg
IHVzZSB0aGUgY2FjaGVkIHZhbHVlcy4KKyAgICAgICAgMykgV2hlbiB0aGUgdW5kZXJseWluZyBm
aWxlIGRhdGEgYXJlIGFjY2Vzc2VkLCBsaWtlIGluIFhIUi5zZW5kKCksIHRoZQorICAgICAgICAg
ICBVQSB3aWxsIGNoZWNrIHRoZSBjYWNoZWQgbW9kaWZpY2F0aW9uIHRpbWUgYWdhaW5zdCB0aGUg
Y3VycmVudAorICAgICAgICAgICBtb2RpZmljYXRpb24gdGltZSB0byBkZXRlcm1pbmUgaWYgdGhl
IGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QuCisgICAgICAgICAgIEFuIGVycm9yIG9yIGV4
Y2VwdGlvbiB3aWxsIGJlIHRocm93biBpZiBuZWVkZWQuCisKKyAgICAgICAgQWxzbyBhZGQgRU5B
QkxFX0JMT0JfU0xJQ0UgZmVhdHVyZSBkZWZpbmUuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0
cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbAorCisgICAgICAgICogQ29uZmln
dXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWc6CisgICAgICAgICogR05VbWFrZWZpbGUu
YW06CisgICAgICAgICogV2ViQ29yZS5wcmk6CisgICAgICAgICogaHRtbC9CbG9iLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6c2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzbGljZSk6CisgICAgICAgICogaHRtbC9CbG9i
Lmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6bW9kaWZpY2F0aW9uVGltZSk6
CisgICAgICAgICogaHRtbC9CbG9iLmlkbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpkZWVwQ29weSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YTo6YXBwZW5kRmlsZVJhbmdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkZvcm1EYXRhRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmFk
dmFuY2VDdXJyZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZW5OZXh0U3RyZWFtKToK
KyAgICAgICAgKFdlYkNvcmU6OmZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybU9w
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybVJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SFRUUEJvZHkpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2VuZCk6CisKIDIwMTAtMDItMjIgIEpvaG4gU3VsbGl2
YW4gIDxzdWxsaXZhbkBhcHBsZS5jb20+CiAgICAgICAgIAogICAgICAgICBSZXZpZXdlZCBieSBU
aW0gSGF0Y2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURl
ZmluZXMueGNjb25maWcgYi9XZWJDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhj
Y29uZmlnCmluZGV4IDRjNGUxOTMuLmViOTZjMjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ29uZmln
dXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKKysrIGIvV2ViQ29yZS9Db25maWd1cmF0
aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtNDEsNiArNDEsNyBAQCBFTkFCTEVfM0Rf
UkVOREVSSU5HXzEwNTAgPSBFTkFCTEVfM0RfUkVOREVSSU5HOwogRU5BQkxFXzNEX1JFTkRFUklO
R18xMDYwID0gRU5BQkxFXzNEX1JFTkRFUklORzsKIEVOQUJMRV8zRF9SRU5ERVJJTkdfMTA3MCA9
IEVOQUJMRV8zRF9SRU5ERVJJTkc7CiAKK0VOQUJMRV9CTE9CX1NMSUNFID0gRU5BQkxFX0JMT0Jf
U0xJQ0U7CiBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcgPSBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJ
Tkc7CiBFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OID0gRU5BQkxFX0NMSUVOVF9CQVNF
RF9HRU9MT0NBVElPTjsKIEVOQUJMRV9EQVRBQkFTRSA9IEVOQUJMRV9EQVRBQkFTRTsKQEAgLTc0
LDQgKzc1LDQgQEAgRU5BQkxFX1hIVE1MTVAgPSA7CiBFTkFCTEVfWFBBVEggPSBFTkFCTEVfWFBB
VEg7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMgPSAkKEVO
QUJMRV8zRF9DQU5WQVMpICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQ0hBTk5FTF9N
RVNTQUdJTkcpICQoRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikgJChFTkFCTEVfREFU
QUJBU0UpICQoRU5BQkxFX0RBVEFHUklEKSAkKEVOQUJMRV9EQVRBTElTVCkgJChFTkFCTEVfRE9N
X1NUT1JBR0UpICQoRU5BQkxFX0VWRU5UU09VUkNFKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJM
RV9HRU9MT0NBVElPTikgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JTkRFWEVEX0RB
VEFCQVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9NQVRITUwpICQo
RU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykg
JChFTkFCTEVfUlVCWSkgJChFTkFCTEVfU0FOREJPWCkgJChFTkFCTEVfU0hBUkVEX1dPUktFUlMp
ICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0FOSU1BVElPTikgJChFTkFCTEVfU1ZHX0FTX0lN
QUdFKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19GT05UUykg
JChFTkFCTEVfU1ZHX0ZPUkVJR05fT0JKRUNUKSAkKEVOQUJMRV9TVkdfVVNFKSAkKEVOQUJMRV9W
SURFTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dNTCkgJChFTkFCTEVfV09SS0VS
UykgJChFTkFCTEVfWEhUTUxNUCkgJChFTkFCTEVfWFBBVEgpICQoRU5BQkxFX1hTTFQpOworRkVB
VFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfQ0FOVkFTKSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcp
ICQoRU5BQkxFX0JMT0JfU0xJQ0UpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJM
RV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04pICQoRU5BQkxFX0RBVEFCQVNFKSAkKEVOQUJMRV9E
QVRBR1JJRCkgJChFTkFCTEVfREFUQUxJU1QpICQoRU5BQkxFX0RPTV9TVE9SQUdFKSAkKEVOQUJM
RV9FVkVOVFNPVVJDRSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfR0VPTE9DQVRJT04pICQo
RU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVf
SkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9OT1RJRklDQVRJ
T05TKSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1JVQlkpICQo
RU5BQkxFX1NBTkRCT1gpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TVkcpICQo
RU5BQkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFCTEVfU1ZH
X0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NWR19GT1JF
SUdOX09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1dF
Ql9TT0NLRVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hIVE1M
TVApICQoRU5BQkxFX1hQQVRIKSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDA2ZjcxZDIuLmUy
OGQxYjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQpAQCAtOTY2LDggKzk2Niw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmggXAogCVdlYkNvcmUvaGlzdG9yeS9QYWdlQ2Fj
aGUuY3BwIFwKIAlXZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmggXAotICAgICAgICBXZWJDb3Jl
L2h0bWwvQmxvYi5jcHAgXAotICAgICAgICBXZWJDb3JlL2h0bWwvQmxvYi5oIFwKKwlXZWJDb3Jl
L2h0bWwvQmxvYi5jcHAgXAorCVdlYkNvcmUvaHRtbC9CbG9iLmggXAogCVdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuaCBcCiAJV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNHcmFkaWVudC5jcHAgXAogCVdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQu
aCBcCkBAIC0zNDc3LDYgKzM0NzcsMTUgQEAgZWxzZQogd2ViY29yZV9jcHBmbGFncyArPSAtREVO
QUJMRV9XRUJfU09DS0VUUz0wCiBlbmRpZiAgIyBFTkQgRU5BQkxFX1dFQl9TT0NLRVRTCiAKKyMg
LS0tCisjIEJsb2Iuc2xpY2Ugc3VwcG9ydAorIyAtLS0KK2lmIEVOQUJMRV9CTE9CX1NMSUNFCitG
RUFUVVJFX0RFRklORVMgKz0gRU5BQkxFX0JMT0JfU0xJQ0U9MQorCit3ZWJjb3JlX2NwcGZsYWdz
ICs9IFwKKwktREVOQUJMRV9CTE9CX1NMSUNFPTEKK2VuZGlmICAjIEVORCBFTkFCTEVfQkxPQl9T
TElDRQogCiBEZXJpdmVkU291cmNlcy9DU1NQcm9wZXJ0eU5hbWVzLmg6ICQoV0VCQ09SRV9DU1Nf
UFJPUEVSVFlfTkFNRVMpICQoV2ViQ29yZSkvY3NzL21ha2Vwcm9wLnBsCiAJaWYgc29ydCAkKFdF
QkNPUkVfQ1NTX1BST1BFUlRZX05BTUVTKSB8IHVuaXEgLWQgfCBncmVwIC1FICdeW14jXSc7IHRo
ZW4gZWNobyAnRHVwbGljYXRlIHZhbHVlISc7IGV4aXQgMTsgZmkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS5wcmkgYi9XZWJDb3JlL1dlYkNvcmUucHJpCmluZGV4IDI3ZjFiYjYuLjZkNDc0
NDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
LnByaQpAQCAtNTQsNiArNTQsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU0lOR0xFX1RI
UkVBREVEPTEpIHsKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89Lik6IERFRklORVMg
Kz0gRU5BQkxFX1ZJREVPPTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfUlVCWT0uKTogREVG
SU5FUyArPSBFTkFCTEVfUlVCWT0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NBTkRCT1g9
Lik6IERFRklORVMgKz0gRU5BQkxFX1NBTkRCT1g9MQorIWNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9CTE9CX1NMSUNFPS4pOiBERUZJTkVTICs9IEVOQUJMRV9CTE9CX1NMSUNFPTAKIAogZ3JlYXRl
clRoYW4oUVRfTUlOT1JfVkVSU0lPTiwgNSkgewogICAgICFjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfM0RfUkVOREVSSU5HPS4pOiBERUZJTkVTICs9IEVOQUJMRV8zRF9SRU5ERVJJTkc9MQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwIGIvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCmlu
ZGV4IDBiNjc3ZWEuLjJlMmQ2N2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmNwcAor
KysgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKQEAgLTM3LDE3ICszNyw3NyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIEJsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIDogbV9wYXRo
KHBhdGgpCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgLCBtX3N0YXJ0KDApCisgICAgLCBt
X2xlbmd0aCgtMSkKKyAgICAsIG1fc25hcHNob3RDYXB0dXJlZChmYWxzZSkKKyAgICAsIG1fc25h
cHNob3RTaXplKDApCisgICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgwLjApCisjZW5k
aWYKIHsKIH0KIAorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorQmxvYjo6QmxvYihjb25zdCBTdHJp
bmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgbG9uZyBsb25nIHNu
YXBzaG90U2l6ZSwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKKyAgICA6IG1fcGF0
aChwYXRoKQorICAgICwgbV9zdGFydChzdGFydCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAg
ICAsIG1fc25hcHNob3RDYXB0dXJlZCh0cnVlKQorICAgICwgbV9zbmFwc2hvdFNpemUoc25hcHNo
b3RTaXplKQorICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoc25hcHNob3RNb2RpZmlj
YXRpb25UaW1lKQoreworICAgIEFTU0VSVChzdGFydCA+PSAwICYmIGxlbmd0aCA+PSAwICYmIHN0
YXJ0ICsgbGVuZ3RoIDw9IHNuYXBzaG90U2l6ZSAmJiBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUp
OworfQorI2VuZGlmCisKIHVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iOjpzaXplKCkgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogSmF2YVNjcmlwdCBjYW5ub3QgcmVwcmVzZW50IHNpemVzIGFzIGxhcmdl
IGFzIHVuc2lnbmVkIGxvbmcgbG9uZywgd2UgbmVlZCB0bwogICAgIC8vIGNvbWUgdXAgd2l0aCBh
biBleGNlcHRpb24gdG8gdGhyb3cgaWYgZmlsZSBzaXplIGlzIG5vdCByZXByZXNldGFibGUuCisj
aWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgaWYgKG1fc25hcHNob3RDYXB0dXJlZCkKKyAgICAg
ICAgcmV0dXJuIG1fbGVuZ3RoOworI2VuZGlmCiAgICAgbG9uZyBsb25nIHNpemU7CiAgICAgaWYg
KCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNpemUpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplKTsKIH0KIAorI2lmIEVOQUJM
RShCTE9CX1NMSUNFKQorUGFzc1JlZlB0cjxCbG9iPiBCbG9iOjpzbGljZShsb25nIGxvbmcgc3Rh
cnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0Cit7CisgICAgLy8gV2hlbiB3ZSBzbGljZSBhIGZp
bGUgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBvYnRhaW4gYSBzbmFwc2hvdCBvZiB0aGUgZmlsZSBi
eSBjYXB0dXJpbmcgaXRzIGN1cnJlbnQgc2l6ZSBhbmQgbW9kaWZpY2F0aW9uIHRpbWUuCisgICAg
Ly8gVGhlIG1vZGlmaWNhdGlvbiB0aW1lIHdpbGwgYmUgdXNlZCB0byB2ZXJpZnkgaWYgdGhlIGZp
bGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QsIHdoZW4gdGhlIHVuZGVybHlpbmcgZGF0YSBhcmUg
YWNjZXNzZWQuCisgICAgbG9uZyBsb25nIHNuYXBzaG90U2l6ZTsKKyAgICBkb3VibGUgc25hcHNo
b3RNb2RpZmljYXRpb25UaW1lOworICAgIGlmIChtX3NuYXBzaG90Q2FwdHVyZWQpIHsKKyAgICAg
ICAgc25hcHNob3RTaXplID0gbV9zbmFwc2hvdFNpemU7CisgICAgICAgIHNuYXBzaG90TW9kaWZp
Y2F0aW9uVGltZSA9IG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIElmIHdlIGZhaWwgdG8gcmV0cmlldmUgdGhlIHNpemUgb3IgbW9kaWZpY2F0aW9u
IHRpbWUsIHByb2JhYmx5IGR1ZSB0byB0aGF0IHRoZSBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQsIGFu
IGVtcHR5IGJsb2Igd2lsbCBiZSByZXR1cm5lZC4KKyAgICAgICAgdGltZV90IG1vZGlmaWNhdGlv
blRpbWU7CisgICAgICAgIGlmICghZ2V0RmlsZVNpemUobV9wYXRoLCBzbmFwc2hvdFNpemUpIHx8
ICFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShtX3BhdGgsIG1vZGlmaWNhdGlvblRpbWUpKSB7Cisg
ICAgICAgICAgICBzbmFwc2hvdFNpemUgPSAwOworICAgICAgICAgICAgc25hcHNob3RNb2RpZmlj
YXRpb25UaW1lID0gMDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWUgPSBtb2RpZmljYXRpb25UaW1lOworICAgIH0KKworICAgIC8vIENsYW1wIHRo
ZSByYW5nZSBpZiBpdCBleGNlZWRzIHRoZSBzaXplIGxpbWl0LgorICAgIGlmIChzdGFydCA8IDAp
CisgICAgICAgIHN0YXJ0ID0gMDsKKyAgICBpZiAobGVuZ3RoIDwgMCkKKyAgICAgICAgbGVuZ3Ro
ID0gMDsKKworICAgIGlmIChzdGFydCA+IHNuYXBzaG90U2l6ZSkgeworICAgICAgICBzdGFydCA9
IDA7CisgICAgICAgIGxlbmd0aCA9IDA7CisgICAgfSBlbHNlIGlmIChzdGFydCArIGxlbmd0aCA+
IHNuYXBzaG90U2l6ZSkKKyAgICAgICAgbGVuZ3RoID0gc25hcHNob3RTaXplIC0gc3RhcnQ7CisK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IobV9wYXRoLCBtX3N0YXJ0ICsgc3RhcnQsIGxl
bmd0aCwgc25hcHNob3RTaXplLCBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpKTsKK30KKyNlbmRp
ZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxv
Yi5oIGIvV2ViQ29yZS9odG1sL0Jsb2IuaAppbmRleCBiOTEwZThmLi5iZGFlY2QxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5oCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9iLmgKQEAgLTMz
LDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTQ3LDE0ICs0OCw0NSBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIH5CbG9iKCkgeyB9CiAKKyNpZiBFTkFCTEUoQkxPQl9TTElD
RSkKKyAgICBQYXNzUmVmUHRyPEJsb2I+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25n
IGxlbmd0aCkgY29uc3Q7CisjZW5kaWYKKwogICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGF0aDsgfQogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7
CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgbG9uZyBsb25nIHN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFydDsgfQorICAgIGxvbmcgbG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2xlbmd0aDsgfQorICAgIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lKCkgY29uc3QgeyByZXR1cm4g
bV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7IH0KKyNlbmRpZgogCiBwcm90ZWN0ZWQ6CiAgICAg
QmxvYihjb25zdCBTdHJpbmcmIHBhdGgpOwogCiBwcml2YXRlOgorI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQorICAgIEJsb2IoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcg
bG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNpemUsIGRvdWJsZSBzbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWUpOworI2VuZGlmCisKKyAgICAvLyBUaGUgdW5kZXJseWluZyBwYXRoIG9mIHRo
ZSBmaWxlLWJhc2VkIGJsb2IuIAogICAgIFN0cmluZyBtX3BhdGg7CisKKyNpZiBFTkFCTEUoQkxP
Ql9TTElDRSkKKyAgICAvLyBUaGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGZpbGUtYmFzZWQg
YmxvYi4KKyAgICBsb25nIGxvbmcgbV9zdGFydDsKKworICAgIC8vIFRoZSBsZW5ndGggb2YgdGhl
IGZpbGUtYmFzZWQgYmxvYi4gVGhlIHZhbHVlIG9mIC0xIG1lYW5zIHRvIHRoZSBlbmQgb2YgdGhl
IGZpbGUuCisgICAgbG9uZyBsb25nIG1fbGVuZ3RoOworCisgICAgLy8gQSBmbGFnIHRvIHRlbGwg
aWYgYSBzbmFwc2hvdCBoYXMgYmVlbiBjYXB0dXJlZC4KKyAgICBib29sIG1fc25hcHNob3RDYXB0
dXJlZDsKKworICAgIC8vIFRoZSBzaXplIG9mIHRoZSBmaWxlIHdoZW4gYSBzbmFwc2hvdCBpcyBj
YXB0dXJlZC4gSXQgY2FuIGJlIDAgaWYgdGhlIGZpbGUgaXMgZW1wdHkuCisgICAgbG9uZyBsb25n
IG1fc25hcHNob3RTaXplOworCisgICAgLy8gVGhlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgb2Yg
dGhlIGZpbGUgd2hlbiBhIHNuYXBzaG90IGlzIGNhcHR1cmVkLiBUaGUgdmFsdWUgb2YgMCBhbHNv
IG1lYW5zIHRoYXQgdGhlIHNuYXBzaG90IGlzIG5vdCBjYXB0dXJlZC4KKyAgICBkb3VibGUgbV9z
bmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iLmlkbCBiL1dlYkNvcmUvaHRtbC9C
bG9iLmlkbAppbmRleCA1NzNiZTM1Li44ZGI2MDY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwv
QmxvYi5pZGwKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuaWRsCkBAIC0zMiw2ICszMiwxMCBAQCBt
b2R1bGUgaHRtbCB7CiAKICAgICBpbnRlcmZhY2UgQmxvYiB7CiAgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZTsKKyAgICAgICAgCisjaWYgZGVmaW5lZChF
TkFCTEVfQkxPQl9TTElDRSkgJiYgRU5BQkxFX0JMT0JfU0xJQ0UKKyAgICAgICAgQmxvYiBzbGlj
ZShpbiBsb25nIGxvbmcgc3RhcnQsIGluIGxvbmcgbG9uZyBsZW5ndGgpOworI2VuZGlmCiAgICAg
fTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKaW5kZXggYWYzYjdmMC4u
MmY4MGM0NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCkBAIC0xMDgsNyAr
MTA4LDExIEBAIFBhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpkZWVwQ29weSgpIGNvbnN0
CiAgICAgICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50
KGUubV9kYXRhKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBGb3JtRGF0YUVs
ZW1lbnQ6OmVuY29kZWRGaWxlOgorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgICAgICAgICAg
Zm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZmlsZW5hbWUs
IGUubV9maWxlU3RhcnQsIGUubV9maWxlTGVuZ3RoLCBlLm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0
aW9uVGltZSwgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkpOworI2Vsc2UKICAgICAgICAgICAgIGZv
cm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2ZpbGVuYW1lLCBl
Lm1fc2hvdWxkR2VuZXJhdGVGaWxlKSk7CisjZW5kaWYKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMTI3LDkgKzEzMSwyMCBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRE
YXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKQogCiB2b2lkIEZvcm1EYXRhOjphcHBl
bmRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKQog
eworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRh
RWxlbWVudChmaWxlbmFtZSwgMCwgLTEsIDAuMCwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CisjZWxz
ZQogICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChmaWxlbmFtZSwgc2hvdWxk
R2VuZXJhdGVGaWxlKSk7CisjZW5kaWYKIH0KIAorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQordm9p
ZCBGb3JtRGF0YTo6YXBwZW5kRmlsZVJhbmdlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcg
bG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9u
VGltZSkKK3sKKyAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUs
IHN0YXJ0LCBsZW5ndGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSwgZmFsc2UpKTsKK30KKyNl
bmRpZgorCiB2b2lkIEZvcm1EYXRhOjpmbGF0dGVuKFZlY3RvcjxjaGFyPiYgZGF0YSkgY29uc3QK
IHsKICAgICAvLyBDb25jYXRlbmF0ZSBhbGwgdGhlIGJ5dGUgYXJyYXlzLCBidXQgb21pdCBhbnkg
ZmlsZXMuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCmluZGV4IDcyNzhmMmUuLjhhY2M2
ZmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCkBAIC0zMiwxMSArMzIsMjAgQEAg
Y2xhc3MgRm9ybURhdGFFbGVtZW50IHsKIHB1YmxpYzoKICAgICBGb3JtRGF0YUVsZW1lbnQoKSA6
IG1fdHlwZShkYXRhKSB7IH0KICAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgVmVjdG9yPGNoYXI+
JiBhcnJheSkgOiBtX3R5cGUoZGF0YSksIG1fZGF0YShhcnJheSkgeyB9CisjaWYgRU5BQkxFKEJM
T0JfU0xJQ0UpCisgICAgRm9ybURhdGFFbGVtZW50KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxv
bmcgbG9uZyBmaWxlU3RhcnQsIGxvbmcgbG9uZyBmaWxlTGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRG
aWxlTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpIDogbV90eXBlKGVu
Y29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFtZSksIG1fZmlsZVN0YXJ0KGZpbGVTdGFydCks
IG1fZmlsZUxlbmd0aChmaWxlTGVuZ3RoKSwgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1l
KGV4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUpLCBtX3Nob3VsZEdlbmVyYXRlRmlsZShzaG91
bGRHZW5lcmF0ZUZpbGUpIHsgfQorI2Vsc2UKICAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpIDogbV90eXBlKGVuY29kZWRG
aWxlKSwgbV9maWxlbmFtZShmaWxlbmFtZSksIG1fc2hvdWxkR2VuZXJhdGVGaWxlKHNob3VsZEdl
bmVyYXRlRmlsZSkgeyB9CisjZW5kaWYKIAogICAgIGVudW0geyBkYXRhLCBlbmNvZGVkRmlsZSB9
IG1fdHlwZTsKICAgICBWZWN0b3I8Y2hhcj4gbV9kYXRhOwogICAgIFN0cmluZyBtX2ZpbGVuYW1l
OworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIGxvbmcgbG9uZyBtX2ZpbGVTdGFydDsKKyAg
ICBsb25nIGxvbmcgbV9maWxlTGVuZ3RoOworICAgIGRvdWJsZSBtX2V4cGVjdGVkRmlsZU1vZGlm
aWNhdGlvblRpbWU7CisjZW5kaWYKICAgICBTdHJpbmcgbV9nZW5lcmF0ZWRGaWxlbmFtZTsKICAg
ICBib29sIG1fc2hvdWxkR2VuZXJhdGVGaWxlOwogfTsKQEAgLTUwLDcgKzU5LDExIEBAIGlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGFFbGVtZW50JiBhLCBjb25zdCBGb3JtRGF0
YUVsZW1lbnQmIGIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoYS5tX2RhdGEgIT0g
Yi5tX2RhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkK
KyAgICBpZiAoYS5tX2ZpbGVuYW1lICE9IGIubV9maWxlbmFtZSB8fCBhLm1fZmlsZVN0YXJ0ICE9
IGIubV9maWxlU3RhcnQgfHwgYS5tX2ZpbGVMZW5ndGggIT0gYi5tX2ZpbGVMZW5ndGggfHwgYS5t
X2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUgIT0gYi5tX2V4cGVjdGVkRmlsZU1vZGlmaWNh
dGlvblRpbWUpCisjZWxzZQogICAgIGlmIChhLm1fZmlsZW5hbWUgIT0gYi5tX2ZpbGVuYW1lKQor
I2VuZGlmCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtNzMs
NiArODYsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IHZvaWQq
IGRhdGEsIHNpemVfdCk7CiAgICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOworI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQorICAgIHZvaWQgYXBwZW5kRmlsZVJhbmdlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxv
bmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0
aW9uVGltZSk7CisjZW5kaWYKIAogICAgIHZvaWQgZmxhdHRlbihWZWN0b3I8Y2hhcj4mKSBjb25z
dDsgLy8gb21pdHMgZmlsZXMKICAgICBTdHJpbmcgZmxhdHRlblRvU3RyaW5nKCkgY29uc3Q7IC8v
IG9taXRzIGZpbGVzCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zv
cm1EYXRhU3RyZWFtTWFjLm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0
YVN0cmVhbU1hYy5tbQppbmRleCA4YWE5YTZkLi40NTAzZDNmIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KQEAgLTEyNSw2ICsxMjUs
OSBAQCBzdHJ1Y3QgRm9ybVN0cmVhbUZpZWxkcyB7CiAgICAgU2NoZWR1bGVQYWlySGFzaFNldCBz
Y2hlZHVsZWRSdW5Mb29wUGFpcnM7CiAgICAgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4gcmVtYWlu
aW5nRWxlbWVudHM7IC8vIGluIHJldmVyc2Ugb3JkZXIKICAgICBDRlJlYWRTdHJlYW1SZWYgY3Vy
cmVudFN0cmVhbTsKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICBsb25nIGxvbmcgY3VycmVu
dFN0cmVhbVJhbmdlTGVuZ3RoOworI2VuZGlmCiAgICAgY2hhciogY3VycmVudERhdGE7CiAgICAg
Q0ZSZWFkU3RyZWFtUmVmIGZvcm1TdHJlYW07CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIHN0cmVh
bUxlbmd0aDsKQEAgLTE0NSwxMiArMTQ4LDEyIEBAIHN0YXRpYyB2b2lkIGNsb3NlQ3VycmVudFN0
cmVhbShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgYWR2
YW5jZUN1cnJlbnRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKK3N0YXRpYyBib29sIGFk
dmFuY2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0pCiB7CiAgICAgY2xvc2VD
dXJyZW50U3RyZWFtKGZvcm0pOwogCiAgICAgaWYgKGZvcm0tPnJlbWFpbmluZ0VsZW1lbnRzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8v
IENyZWF0ZSB0aGUgbmV3IHN0cmVhbS4KICAgICBGb3JtRGF0YUVsZW1lbnQmIG5leHRJbnB1dCA9
IGZvcm0tPnJlbWFpbmluZ0VsZW1lbnRzLmxhc3QoKTsKQEAgLTE2MCwxMCArMTYzLDI1IEBAIHN0
YXRpYyB2b2lkIGFkdmFuY2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0pCiAg
ICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBDRlJlYWRTdHJlYW1DcmVhdGVXaXRoQnl0ZXNO
b0NvcHkoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEpLCBzaXplLCBrQ0ZB
bGxvY2F0b3JOdWxsKTsKICAgICAgICAgZm9ybS0+Y3VycmVudERhdGEgPSBkYXRhOwogICAgIH0g
ZWxzZSB7CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgICAgIGlmIChuZXh0SW5wdXQubV9l
eHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKSB7CisgICAgICAgICAgICB0aW1lX3QgZmlsZU1v
ZGlmaWNhdGlvblRpbWU7CisgICAgICAgICAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1l
KG5leHRJbnB1dC5tX2ZpbGVuYW1lLCBmaWxlTW9kaWZpY2F0aW9uVGltZSkgfHwgZmlsZU1vZGlm
aWNhdGlvblRpbWUgIT0gc3RhdGljX2Nhc3Q8dGltZV90PihuZXh0SW5wdXQubV9leHBlY3RlZEZp
bGVNb2RpZmljYXRpb25UaW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyNlbmRpZgorCiAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IG5leHRJbnB1dC5t
X3Nob3VsZEdlbmVyYXRlRmlsZSA/IG5leHRJbnB1dC5tX2dlbmVyYXRlZEZpbGVuYW1lIDogbmV4
dElucHV0Lm1fZmlsZW5hbWU7CiAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmlsZW5h
bWUoQWRvcHRDRiwgcGF0aC5jcmVhdGVDRlN0cmluZygpKTsKICAgICAgICAgUmV0YWluUHRyPENG
VVJMUmVmPiBmaWxlVVJMKEFkb3B0Q0YsIENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKDAs
IGZpbGVuYW1lLmdldCgpLCBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwgRkFMU0UpKTsKICAgICAgICAg
Zm9ybS0+Y3VycmVudFN0cmVhbSA9IENGUmVhZFN0cmVhbUNyZWF0ZVdpdGhGaWxlKDAsIGZpbGVV
UkwuZ2V0KCkpOworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgICAgICBpZiAobmV4dElucHV0
Lm1fZmlsZVN0YXJ0ID4gMCkgeworICAgICAgICAgICAgQ0ZOdW1iZXJSZWYgcG9zaXRpb24gPSBD
Rk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nTG9uZ1R5cGUsICZuZXh0SW5wdXQubV9maWxl
U3RhcnQpOworICAgICAgICAgICAgQ0ZSZWFkU3RyZWFtU2V0UHJvcGVydHkoZm9ybS0+Y3VycmVu
dFN0cmVhbSwga0NGU3RyZWFtUHJvcGVydHlGaWxlQ3VycmVudE9mZnNldCwgcG9zaXRpb24pOwor
ICAgICAgICB9CisgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IG5leHRJ
bnB1dC5tX2ZpbGVMZW5ndGg7CisjZW5kaWYKICAgICB9CiAgICAgZm9ybS0+cmVtYWluaW5nRWxl
bWVudHMucmVtb3ZlTGFzdCgpOwogCkBAIC0xNzYsMTYgKzE5NCwxOSBAQCBzdGF0aWMgdm9pZCBh
ZHZhbmNlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQogICAgIFNjaGVkdWxl
UGFpckhhc2hTZXQ6Oml0ZXJhdG9yIGVuZCA9IGZvcm0tPnNjaGVkdWxlZFJ1bkxvb3BQYWlycy5l
bmQoKTsKICAgICBmb3IgKFNjaGVkdWxlUGFpckhhc2hTZXQ6Oml0ZXJhdG9yIGl0ID0gZm9ybS0+
c2NoZWR1bGVkUnVuTG9vcFBhaXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAg
Q0ZSZWFkU3RyZWFtU2NoZWR1bGVXaXRoUnVuTG9vcChmb3JtLT5jdXJyZW50U3RyZWFtLCAoKml0
KS0+cnVuTG9vcCgpLCAoKml0KS0+bW9kZSgpKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCi1z
dGF0aWMgdm9pZCBvcGVuTmV4dFN0cmVhbShGb3JtU3RyZWFtRmllbGRzKiBmb3JtKQorc3RhdGlj
IGJvb2wgb3Blbk5leHRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyogZm9ybSkKIHsKICAgICAvLyBT
a2lwIG92ZXIgYW55IHN0cmVhbXMgd2UgY2FuJ3Qgb3Blbi4KLSAgICAvLyBGb3Igc29tZSBwdXJw
b3NlcyB3ZSBtaWdodCB3YW50IHRvIHJldHVybiBhbiBlcnJvciwgYnV0IHRoZSBjdXJyZW50IE5T
VVJMQ29ubmVjdGlvbgotICAgIC8vIGNhbid0IHJlYWxseSBkbyBhbnl0aGluZyB1c2VmdWwgd2l0
aCBhbiBlcnJvciBhdCB0aGlzIHBvaW50LCBzbyB0aGlzIGlzIGJldHRlci4KLSAgICBhZHZhbmNl
Q3VycmVudFN0cmVhbShmb3JtKTsKKyAgICBpZiAoIWFkdmFuY2VDdXJyZW50U3RyZWFtKGZvcm0p
KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgd2hpbGUgKGZvcm0tPmN1cnJlbnRTdHJlYW0g
JiYgIUNGUmVhZFN0cmVhbU9wZW4oZm9ybS0+Y3VycmVudFN0cmVhbSkpCi0gICAgICAgIGFkdmFu
Y2VDdXJyZW50U3RyZWFtKGZvcm0pOworICAgICAgICBpZiAoIWFkdmFuY2VDdXJyZW50U3RyZWFt
KGZvcm0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQog
CiBzdGF0aWMgdm9pZCogZm9ybUNyZWF0ZShDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCB2b2lkKiBj
b250ZXh0KQpAQCAtMTk0LDYgKzIxNSw5IEBAIHN0YXRpYyB2b2lkKiBmb3JtQ3JlYXRlKENGUmVh
ZFN0cmVhbVJlZiBzdHJlYW0sIHZvaWQqIGNvbnRleHQpCiAKICAgICBGb3JtU3RyZWFtRmllbGRz
KiBuZXdJbmZvID0gbmV3IEZvcm1TdHJlYW1GaWVsZHM7CiAgICAgbmV3SW5mby0+Y3VycmVudFN0
cmVhbSA9IE5VTEw7CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgbmV3SW5mby0+Y3VycmVu
dFN0cmVhbVJhbmdlTGVuZ3RoID0gLTE7CisjZW5kaWYKICAgICBuZXdJbmZvLT5jdXJyZW50RGF0
YSA9IDA7CiAgICAgbmV3SW5mby0+Zm9ybVN0cmVhbSA9IHN0cmVhbTsgLy8gRG9uJ3QgcmV0YWlu
LiBUaGF0IHdvdWxkIGNyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZS4KICAgICBuZXdJbmZvLT5zdHJl
YW1MZW5ndGggPSBmb3JtQ29udGV4dC0+c3RyZWFtTGVuZ3RoOwpAQCAtMjI2LDExICsyNTAsMTEg
QEAgc3RhdGljIEJvb2xlYW4gZm9ybU9wZW4oQ0ZSZWFkU3RyZWFtUmVmLCBDRlN0cmVhbUVycm9y
KiBlcnJvciwgQm9vbGVhbiogb3BlbkNvbXAKIHsKICAgICBGb3JtU3RyZWFtRmllbGRzKiBmb3Jt
ID0gc3RhdGljX2Nhc3Q8Rm9ybVN0cmVhbUZpZWxkcyo+KGNvbnRleHQpOwogCi0gICAgb3Blbk5l
eHRTdHJlYW0oZm9ybSk7CisgICAgYm9vbCBvcGVuZWQgPSBvcGVuTmV4dFN0cmVhbShmb3JtKTsK
IAotICAgICpvcGVuQ29tcGxldGUgPSBUUlVFOwotICAgIGVycm9yLT5lcnJvciA9IDA7Ci0gICAg
cmV0dXJuIFRSVUU7CisgICAgKm9wZW5Db21wbGV0ZSA9IG9wZW5lZDsKKyAgICBlcnJvci0+ZXJy
b3IgPSBvcGVuZWQgPyAwIDogZm5PcG5FcnI7CisgICAgcmV0dXJuIG9wZW5lZDsKIH0KIAogc3Rh
dGljIENGSW5kZXggZm9ybVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZl
ciwgQ0ZJbmRleCBidWZmZXJMZW5ndGgsIENGU3RyZWFtRXJyb3IqIGVycm9yLCBCb29sZWFuKiBh
dEVPRiwgdm9pZCogY29udGV4dCkKQEAgLTIzOCw3ICsyNjIsMTIgQEAgc3RhdGljIENGSW5kZXgg
Zm9ybVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBi
dWZmZXJMZW4KICAgICBGb3JtU3RyZWFtRmllbGRzKiBmb3JtID0gc3RhdGljX2Nhc3Q8Rm9ybVN0
cmVhbUZpZWxkcyo+KGNvbnRleHQpOwogCiAgICAgd2hpbGUgKGZvcm0tPmN1cnJlbnRTdHJlYW0p
IHsKLSAgICAgICAgQ0ZJbmRleCBieXRlc1JlYWQgPSBDRlJlYWRTdHJlYW1SZWFkKGZvcm0tPmN1
cnJlbnRTdHJlYW0sIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoKTsKKyAgICAgICAgQ0ZJbmRleCBieXRl
c1RvUmVhZCA9IGJ1ZmZlckxlbmd0aDsKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICAgICAg
aWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAhPSAtMSAmJiBmb3JtLT5jdXJyZW50
U3RyZWFtUmFuZ2VMZW5ndGggPCBieXRlc1RvUmVhZCkKKyAgICAgICAgICAgIGJ5dGVzVG9SZWFk
ID0gc3RhdGljX2Nhc3Q8Q0ZJbmRleD4oZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoKTsK
KyNlbmRpZgorICAgICAgICBDRkluZGV4IGJ5dGVzUmVhZCA9IENGUmVhZFN0cmVhbVJlYWQoZm9y
bS0+Y3VycmVudFN0cmVhbSwgYnVmZmVyLCBieXRlc1RvUmVhZCk7CiAgICAgICAgIGlmIChieXRl
c1JlYWQgPCAwKSB7CiAgICAgICAgICAgICAqZXJyb3IgPSBDRlJlYWRTdHJlYW1HZXRFcnJvcihm
b3JtLT5jdXJyZW50U3RyZWFtKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTI0Nyw2ICsy
NzYsMTAgQEAgc3RhdGljIENGSW5kZXggZm9ybVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwg
VUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBidWZmZXJMZW4KICAgICAgICAgICAgIGVycm9yLT5lcnJv
ciA9IDA7CiAgICAgICAgICAgICAqYXRFT0YgPSBGQUxTRTsKICAgICAgICAgICAgIGZvcm0tPmJ5
dGVzU2VudCArPSBieXRlc1JlYWQ7CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgICAgICAg
ICBpZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IC0xKQorICAgICAgICAgICAg
ICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAtPSBieXRlc1JlYWQ7CisjZW5kaWYK
IAogICAgICAgICAgICAgaWYgKCFSZXNvdXJjZUhhbmRsZTo6ZGlkU2VuZEJvZHlEYXRhRGVsZWdh
dGVFeGlzdHMoKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IGhvdyB0
byBvbmx5IGRvIHRoaXMgd2hlbiBhIFJlc291cmNlSGFuZGxlQ2xpZW50IGlzIGF2YWlsYWJsZS4K
QEAgLTM1OSw2ICszOTIsMTIgQEAgdm9pZCBzZXRIVFRQQm9keShOU011dGFibGVVUkxSZXF1ZXN0
ICpyZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSkKICAgICAgICAgaWYgKGVs
ZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkKICAgICAgICAgICAgIGxlbmd0
aCArPSBlbGVtZW50Lm1fZGF0YS5zaXplKCk7CiAgICAgICAgIGVsc2UgeworI2lmIEVOQUJMRShC
TE9CX1NMSUNFKQorICAgICAgICAgICAgaWYgKGVsZW1lbnQubV9maWxlTGVuZ3RoICE9IC0xKSB7
CisgICAgICAgICAgICAgICAgbGVuZ3RoICs9IGVsZW1lbnQubV9maWxlTGVuZ3RoOworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgICAgICBs
b25nIGxvbmcgZmlsZVNpemU7CiAgICAgICAgICAgICBpZiAoZ2V0RmlsZVNpemUoZWxlbWVudC5t
X3Nob3VsZEdlbmVyYXRlRmlsZSA/IGVsZW1lbnQubV9nZW5lcmF0ZWRGaWxlbmFtZSA6IGVsZW1l
bnQubV9maWxlbmFtZSwgZmlsZVNpemUpKQogICAgICAgICAgICAgICAgIGxlbmd0aCArPSBmaWxl
U2l6ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCAzMjgxOGRmLi5kYThkMGUxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCkBAIC00NDQsNyArNDQ0LDExIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6
OnNlbmQoQmxvYiogYm9keSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIC8vIEZJWE1FOiBT
aG91bGQgd2Ugc2V0IGEgQ29udGVudC1UeXBlIGlmIG9uZSBpcyBub3Qgc2V0LgogICAgICAgICAv
LyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIHVwbG9hZGluZyBidW5kbGVzLgogICAgICAgICBtX3Jl
cXVlc3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZSgpOworI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQorICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlUmFuZ2UoYm9keS0+
cGF0aCgpLCBib2R5LT5zdGFydCgpLCBib2R5LT5sZW5ndGgoKSwgYm9keS0+bW9kaWZpY2F0aW9u
VGltZSgpKTsKKyNlbHNlCiAgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVuZEZpbGUo
Ym9keS0+cGF0aCgpLCBmYWxzZSk7CisjZW5kaWYKICAgICB9CiAKICAgICBjcmVhdGVSZXF1ZXN0
KGVjKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IDEyYWVjYzIuLmFlMDVhYTcgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE0IEBACisyMDEwLTAyLTI0ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbG9iLnNs
aWNlIHN1cHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zMjk5MworCisgICAgICAgIEFkZCBFTkFCTEVfQkxPQl9TTElDRSBmZWF0dXJlIGRlZmlu
ZS4KKworICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisKIDIwMDktMDItMjIgIEFkYW0gTGFuZ2xl
eSAgPGFnbEBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4K
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpIGIvV2ViS2l0L2Nocm9t
aXVtL2ZlYXR1cmVzLmd5cGkKaW5kZXggMTc2NjU5NC4uYzljMmY0ZiAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKKysrIGIvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVz
Lmd5cGkKQEAgLTQwLDYgKzQwLDcgQEAKICAgICAgICMgZmVhdHVyZXNfb3ZlcnJpZGUuZ3lwaSBp
bmxpbmUgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgogICAgICAgJ2ZlYXR1cmVfZGVm
aW5lcyUnOiBbCiAgICAgICAgICdFTkFCTEVfM0RfQ0FOVkFTPTAnLAorICAgICAgICAnRU5BQkxF
X0JMT0JfU0xJQ0U9MCcsCiAgICAgICAgICdFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkc9MScsCiAg
ICAgICAgICdFTkFCTEVfREFUQUJBU0U9MScsCiAgICAgICAgICdFTkFCTEVfREFUQUdSSUQ9MCcs
CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9n
CmluZGV4IDdiZGY0YjYuLjRiMTkxYTQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvQ2hhbmdlTG9n
CisrKyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDItMjMg
IEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEJsb2Iuc2xpY2Ugc3VwcG9ydC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkzCisKKyAgICAgICAgQWRk
IEVOQUJMRV9CTE9CX1NMSUNFIGZlYXR1cmUgZGVmaW5lLgorCisgICAgICAgICogQ29uZmlndXJh
dGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWc6CisKIDIwMTAtMDItMjIgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBT
dWxsaXZhbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURl
ZmluZXMueGNjb25maWcgYi9XZWJLaXQvbWFjL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVz
LnhjY29uZmlnCmluZGV4IDRjNGUxOTMuLmViOTZjMjcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMv
Q29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKKysrIGIvV2ViS2l0L21hYy9D
b25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtNDEsNiArNDEsNyBAQCBF
TkFCTEVfM0RfUkVOREVSSU5HXzEwNTAgPSBFTkFCTEVfM0RfUkVOREVSSU5HOwogRU5BQkxFXzNE
X1JFTkRFUklOR18xMDYwID0gRU5BQkxFXzNEX1JFTkRFUklORzsKIEVOQUJMRV8zRF9SRU5ERVJJ
TkdfMTA3MCA9IEVOQUJMRV8zRF9SRU5ERVJJTkc7CiAKK0VOQUJMRV9CTE9CX1NMSUNFID0gRU5B
QkxFX0JMT0JfU0xJQ0U7CiBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcgPSBFTkFCTEVfQ0hBTk5F
TF9NRVNTQUdJTkc7CiBFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OID0gRU5BQkxFX0NM
SUVOVF9CQVNFRF9HRU9MT0NBVElPTjsKIEVOQUJMRV9EQVRBQkFTRSA9IEVOQUJMRV9EQVRBQkFT
RTsKQEAgLTc0LDQgKzc1LDQgQEAgRU5BQkxFX1hIVE1MTVAgPSA7CiBFTkFCTEVfWFBBVEggPSBF
TkFCTEVfWFBBVEg7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RFRklO
RVMgPSAkKEVOQUJMRV8zRF9DQU5WQVMpICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVf
Q0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikgJChF
TkFCTEVfREFUQUJBU0UpICQoRU5BQkxFX0RBVEFHUklEKSAkKEVOQUJMRV9EQVRBTElTVCkgJChF
TkFCTEVfRE9NX1NUT1JBR0UpICQoRU5BQkxFX0VWRU5UU09VUkNFKSAkKEVOQUJMRV9GSUxURVJT
KSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9J
TkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9N
QVRITUwpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykgJChFTkFCTEVfUlVCWSkgJChFTkFCTEVfU0FOREJPWCkgJChFTkFCTEVfU0hBUkVE
X1dPUktFUlMpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0FOSU1BVElPTikgJChFTkFCTEVf
U1ZHX0FTX0lNQUdFKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NW
R19GT05UUykgJChFTkFCTEVfU1ZHX0ZPUkVJR05fT0JKRUNUKSAkKEVOQUJMRV9TVkdfVVNFKSAk
KEVOQUJMRV9WSURFTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dNTCkgJChFTkFC
TEVfV09SS0VSUykgJChFTkFCTEVfWEhUTUxNUCkgJChFTkFCTEVfWFBBVEgpICQoRU5BQkxFX1hT
TFQpOworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfQ0FOVkFTKSAkKEVOQUJMRV8zRF9S
RU5ERVJJTkcpICQoRU5BQkxFX0JMT0JfU0xJQ0UpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5H
KSAkKEVOQUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04pICQoRU5BQkxFX0RBVEFCQVNFKSAk
KEVOQUJMRV9EQVRBR1JJRCkgJChFTkFCTEVfREFUQUxJU1QpICQoRU5BQkxFX0RPTV9TVE9SQUdF
KSAkKEVOQUJMRV9FVkVOVFNPVVJDRSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfR0VPTE9D
QVRJT04pICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkg
JChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9O
T1RJRklDQVRJT05TKSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxF
X1JVQlkpICQoRU5BQkxFX1NBTkRCT1gpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJM
RV9TVkcpICQoRU5BQkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChF
TkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxF
X1NWR19GT1JFSUdOX09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQo
RU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5B
QkxFX1hIVE1MTVApICQoRU5BQkxFX1hQQVRIKSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBh
L1dlYktpdExpYnJhcmllcy9DaGFuZ2VMb2cgYi9XZWJLaXRMaWJyYXJpZXMvQ2hhbmdlTG9nCmlu
ZGV4IDYyMDUzZDEuLjdiODJhMzggMTAwNjQ0Ci0tLSBhL1dlYktpdExpYnJhcmllcy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0TGlicmFyaWVzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEw
LTAyLTI0ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbG9iLnNsaWNlIHN1cHBvcnQuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjk5MworCisgICAg
ICAgIEFkZCBFTkFCTEVfQkxPQl9TTElDRSBmZWF0dXJlIGRlZmluZS4KKworICAgICAgICAqIHdp
bi90b29scy92c3Byb3BzL0ZlYXR1cmVEZWZpbmVzLnZzcHJvcHM6CisgICAgICAgICogd2luL3Rv
b2xzL3ZzcHJvcHMvRmVhdHVyZURlZmluZXNDYWlyby52c3Byb3BzOgorCiAyMDEwLTAyLTE5ICBN
YWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGF2aWQgTGV2aW4uCmRpZmYgLS1naXQgYS9XZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzL3ZzcHJv
cHMvRmVhdHVyZURlZmluZXMudnNwcm9wcyBiL1dlYktpdExpYnJhcmllcy93aW4vdG9vbHMvdnNw
cm9wcy9GZWF0dXJlRGVmaW5lcy52c3Byb3BzCmluZGV4IGY3YTc1NGQuLjQ1ZGFjYmMgMTAwNjQ0
Ci0tLSBhL1dlYktpdExpYnJhcmllcy93aW4vdG9vbHMvdnNwcm9wcy9GZWF0dXJlRGVmaW5lcy52
c3Byb3BzCisrKyBiL1dlYktpdExpYnJhcmllcy93aW4vdG9vbHMvdnNwcm9wcy9GZWF0dXJlRGVm
aW5lcy52c3Byb3BzCkBAIC05LDcgKzksNyBAQAogCT4KICAgPFRvb2wKIAkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiQoRU5BQkxFXzNEX0NBTlZB
Uyk7JChFTkFCTEVfM0RfUkVOREVSSU5HKTskKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORyk7JChF
TkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKTskKEVOQUJMRV9EQVRBQkFTRSk7JChFTkFC
TEVfREFUQUdSSUQpOyQoRU5BQkxFX0RBVEFMSVNUKTskKEVOQUJMRV9ET01fU1RPUkFHRSk7JChF
TkFCTEVfRVZFTlRTT1VSQ0UpOyQoRU5BQkxFX0ZJTFRFUlMpOyQoRU5BQkxFX0dFT0xPQ0FUSU9O
KTskKEVOQUJMRV9JQ09OREFUQUJBU0UpOyQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpOyQoRU5B
QkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpOyQoRU5BQkxFX01BVEhNTCk7JChFTkFCTEVfTk9USUZJ
Q0FUSU9OUyk7JChFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKTskKEVOQUJMRV9SVUJZ
KTskKEVOQUJMRV9TQU5EQk9YKTskKEVOQUJMRV9TSEFSRURfV09SS0VSUyk7JChFTkFCTEVfU1ZH
KTskKEVOQUJMRV9TVkdfQU5JTUFUSU9OKTskKEVOQUJMRV9TVkdfQVNfSU1BR0UpOyQoRU5BQkxF
X1NWR19ET01fT0JKQ19CSU5ESU5HUyk7JChFTkFCTEVfU1ZHX0ZPTlRTKTskKEVOQUJMRV9TVkdf
Rk9SRUlHTl9PQkpFQ1QpOyQoRU5BQkxFX1NWR19VU0UpOyQoRU5BQkxFX1ZJREVPKTskKEVOQUJM
RV9XRUJfU09DS0VUUyk7JChFTkFCTEVfV01MKTskKEVOQUJMRV9XT1JLRVJTKTskKEVOQUJMRV9Y
SFRNTE1QKTskKEVOQUJMRV9YUEFUSCk7JChFTkFCTEVfWFNMVCkiCisJCVByZXByb2Nlc3NvckRl
ZmluaXRpb25zPSIkKEVOQUJMRV8zRF9DQU5WQVMpOyQoRU5BQkxFXzNEX1JFTkRFUklORyk7JChF
TkFCTEVfQkxPQl9TTElDRSk7JChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpOyQoRU5BQkxFX0NM
SUVOVF9CQVNFRF9HRU9MT0NBVElPTik7JChFTkFCTEVfREFUQUJBU0UpOyQoRU5BQkxFX0RBVEFH
UklEKTskKEVOQUJMRV9EQVRBTElTVCk7JChFTkFCTEVfRE9NX1NUT1JBR0UpOyQoRU5BQkxFX0VW
RU5UU09VUkNFKTskKEVOQUJMRV9GSUxURVJTKTskKEVOQUJMRV9HRU9MT0NBVElPTik7JChFTkFC
TEVfSUNPTkRBVEFCQVNFKTskKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKTskKEVOQUJMRV9KQVZB
U0NSSVBUX0RFQlVHR0VSKTskKEVOQUJMRV9NQVRITUwpOyQoRU5BQkxFX05PVElGSUNBVElPTlMp
OyQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUyk7JChFTkFCTEVfUlVCWSk7JChFTkFC
TEVfU0FOREJPWCk7JChFTkFCTEVfU0hBUkVEX1dPUktFUlMpOyQoRU5BQkxFX1NWRyk7JChFTkFC
TEVfU1ZHX0FOSU1BVElPTik7JChFTkFCTEVfU1ZHX0FTX0lNQUdFKTskKEVOQUJMRV9TVkdfRE9N
X09CSkNfQklORElOR1MpOyQoRU5BQkxFX1NWR19GT05UUyk7JChFTkFCTEVfU1ZHX0ZPUkVJR05f
T0JKRUNUKTskKEVOQUJMRV9TVkdfVVNFKTskKEVOQUJMRV9WSURFTyk7JChFTkFCTEVfV0VCX1NP
Q0tFVFMpOyQoRU5BQkxFX1dNTCk7JChFTkFCTEVfV09SS0VSUyk7JChFTkFCTEVfWEhUTUxNUCk7
JChFTkFCTEVfWFBBVEgpOyQoRU5BQkxFX1hTTFQpIgogCS8+CiAgIDxVc2VyTWFjcm8KIAkJTmFt
ZT0iRU5BQkxFXzNEX0NBTlZBUyIKQEAgLTIyLDYgKzIyLDExIEBACiAJCVBlcmZvcm1FbnZpcm9u
bWVudFNldD0idHJ1ZSIKIAkvPgogICA8VXNlck1hY3JvCisJCU5hbWU9IkVOQUJMRV9CTE9CX1NM
SUNFIgorCQlWYWx1ZT0iIgorCQlQZXJmb3JtRW52aXJvbm1lbnRTZXQ9InRydWUiCisJLz4KKyAg
PFVzZXJNYWNybwogCQlOYW1lPSJFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkciCiAJCVZhbHVlPSJF
TkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkciCiAJCVBlcmZvcm1FbnZpcm9ubWVudFNldD0idHJ1ZSIK
ZGlmZiAtLWdpdCBhL1dlYktpdExpYnJhcmllcy93aW4vdG9vbHMvdnNwcm9wcy9GZWF0dXJlRGVm
aW5lc0NhaXJvLnZzcHJvcHMgYi9XZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzL3ZzcHJvcHMvRmVh
dHVyZURlZmluZXNDYWlyby52c3Byb3BzCmluZGV4IDFjMTZhOWIuLmU3MzdmZmEgMTAwNjQ0Ci0t
LSBhL1dlYktpdExpYnJhcmllcy93aW4vdG9vbHMvdnNwcm9wcy9GZWF0dXJlRGVmaW5lc0NhaXJv
LnZzcHJvcHMKKysrIGIvV2ViS2l0TGlicmFyaWVzL3dpbi90b29scy92c3Byb3BzL0ZlYXR1cmVE
ZWZpbmVzQ2Fpcm8udnNwcm9wcwpAQCAtOSw3ICs5LDcgQEAKIAk+CiAgIDxUb29sCiAJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIkKEVOQUJMRV8z
RF9DQU5WQVMpOyQoRU5BQkxFXzNEX1JFTkRFUklORyk7JChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJ
TkcpOyQoRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTik7JChFTkFCTEVfREFUQUJBU0Up
OyQoRU5BQkxFX0RBVEFHUklEKTskKEVOQUJMRV9EQVRBTElTVCk7JChFTkFCTEVfRE9NX1NUT1JB
R0UpOyQoRU5BQkxFX0VWRU5UU09VUkNFKTskKEVOQUJMRV9GSUxURVJTKTskKEVOQUJMRV9HRU9M
T0NBVElPTik7JChFTkFCTEVfSUNPTkRBVEFCQVNFKTskKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNF
KTskKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKTskKEVOQUJMRV9NQVRITUwpOyQoRU5BQkxF
X05PVElGSUNBVElPTlMpOyQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUyk7JChFTkFC
TEVfU0hBUkVEX1dPUktFUlMpOyQoRU5BQkxFX1NWRyk7JChFTkFCTEVfU1ZHX0FOSU1BVElPTik7
JChFTkFCTEVfU1ZHX0FTX0lNQUdFKTskKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpOyQo
RU5BQkxFX1NWR19GT05UUyk7JChFTkFCTEVfU1ZHX0ZPUkVJR05fT0JKRUNUKTskKEVOQUJMRV9T
VkdfVVNFKTskKEVOQUJMRV9WSURFTyk7JChFTkFCTEVfV0VCX1NPQ0tFVFMpOyQoRU5BQkxFX1dN
TCk7JChFTkFCTEVfV09SS0VSUyk7JChFTkFCTEVfWEhUTUxNUCk7JChFTkFCTEVfWFBBVEgpOyQo
RU5BQkxFX1hTTFQpIgorCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iJChFTkFCTEVfM0RfQ0FO
VkFTKTskKEVOQUJMRV8zRF9SRU5ERVJJTkcpOyQoRU5BQkxFX0JMT0JfU0xJQ0UpOyQoRU5BQkxF
X0NIQU5ORUxfTUVTU0FHSU5HKTskKEVOQUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04pOyQo
RU5BQkxFX0RBVEFCQVNFKTskKEVOQUJMRV9EQVRBR1JJRCk7JChFTkFCTEVfREFUQUxJU1QpOyQo
RU5BQkxFX0RPTV9TVE9SQUdFKTskKEVOQUJMRV9FVkVOVFNPVVJDRSk7JChFTkFCTEVfRklMVEVS
Uyk7JChFTkFCTEVfR0VPTE9DQVRJT04pOyQoRU5BQkxFX0lDT05EQVRBQkFTRSk7JChFTkFCTEVf
SU5ERVhFRF9EQVRBQkFTRSk7JChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUik7JChFTkFCTEVf
TUFUSE1MKTskKEVOQUJMRV9OT1RJRklDQVRJT05TKTskKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBM
SUNBVElPTlMpOyQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKTskKEVOQUJMRV9TVkcpOyQoRU5BQkxF
X1NWR19BTklNQVRJT04pOyQoRU5BQkxFX1NWR19BU19JTUFHRSk7JChFTkFCTEVfU1ZHX0RPTV9P
QkpDX0JJTkRJTkdTKTskKEVOQUJMRV9TVkdfRk9OVFMpOyQoRU5BQkxFX1NWR19GT1JFSUdOX09C
SkVDVCk7JChFTkFCTEVfU1ZHX1VTRSk7JChFTkFCTEVfVklERU8pOyQoRU5BQkxFX1dFQl9TT0NL
RVRTKTskKEVOQUJMRV9XTUwpOyQoRU5BQkxFX1dPUktFUlMpOyQoRU5BQkxFX1hIVE1MTVApOyQo
RU5BQkxFX1hQQVRIKTskKEVOQUJMRV9YU0xUKSIKIAkvPgogICA8VXNlck1hY3JvCiAJCU5hbWU9
IkVOQUJMRV8zRF9DQU5WQVMiCkBAIC0yMiw2ICsyMiwxMSBAQAogCQlQZXJmb3JtRW52aXJvbm1l
bnRTZXQ9InRydWUiCiAJLz4KICAgPFVzZXJNYWNybworCQlOYW1lPSJFTkFCTEVfQkxPQl9TTElD
RSIKKwkJVmFsdWU9IiIKKwkJUGVyZm9ybUVudmlyb25tZW50U2V0PSJ0cnVlIgorCS8+CisgIDxV
c2VyTWFjcm8KIAkJTmFtZT0iRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HIgogCQlWYWx1ZT0iRU5B
QkxFX0NIQU5ORUxfTUVTU0FHSU5HIgogCQlQZXJmb3JtRW52aXJvbm1lbnRTZXQ9InRydWUiCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cK
aW5kZXggZWMyYmY2Yi4uMmRjOGI3ZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEwLTAyLTIz
ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbG9iLnNsaWNlIHN1cHBvcnQuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjk5MworCisgICAgICAgIEFk
ZCBFTkFCTEVfQkxPQl9TTElDRSBmZWF0dXJlIGRlZmluZSBhbmQgIGZsYWcgZm9yIGJ1aWxkLXdl
YmtpdC4gSXQgaXMKKyAgICAgICAgY3VycmVudGx5IG9ubHkgdHVybmVkIG9uIGZvciBNYWMuCisK
KyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDoKKwogMjAxMC0wMi0yMiAgVG9yIEFybmUg
VmVzdGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9T
Y3JpcHRzL2J1aWxkLXdlYmtpdCBiL1dlYktpdFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0Cmlu
ZGV4IGNmNWFhYWQuLjg0YTVmZWEgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvYnVp
bGQtd2Via2l0CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CkBAIC01Niw3
ICs1Niw3IEBAIG15ICgkdGhyZWVEQ2FudmFzU3VwcG9ydCwgJHRocmVlRFJlbmRlcmluZ1N1cHBv
cnQsICRjaGFubmVsTWVzc2FnaW5nU3VwcG9ydCwgJGNsCiAgICAgJGphdmFTY3JpcHREZWJ1Z2dl
clN1cHBvcnQsICRtYXRobWxTdXBwb3J0LCAkb2ZmbGluZVdlYkFwcGxpY2F0aW9uU3VwcG9ydCwg
JHJ1YnlTdXBwb3J0LCAkc2FuZGJveFN1cHBvcnQsICRzaGFyZWRXb3JrZXJzU3VwcG9ydCwKICAg
ICAkc3ZnU3VwcG9ydCwgJHN2Z0FuaW1hdGlvblN1cHBvcnQsICRzdmdBc0ltYWdlU3VwcG9ydCwg
JHN2Z0RPTU9iakNCaW5kaW5nc1N1cHBvcnQsICRzdmdGb250c1N1cHBvcnQsCiAgICAgJHN2Z0Zv
cmVpZ25PYmplY3RTdXBwb3J0LCAkc3ZnVXNlU3VwcG9ydCwgJHZpZGVvU3VwcG9ydCwgJHdlYlNv
Y2tldHNTdXBwb3J0LCAkd21sU3VwcG9ydCwgJHdjc3NTdXBwb3J0LCAkeGh0bWxtcFN1cHBvcnQs
ICR3b3JrZXJzU3VwcG9ydCwKLSAgICAkeHBhdGhTdXBwb3J0LCAkeHNsdFN1cHBvcnQsICRjb3Zl
cmFnZVN1cHBvcnQsICRub3RpZmljYXRpb25zU3VwcG9ydCk7CisgICAgJHhwYXRoU3VwcG9ydCwg
JHhzbHRTdXBwb3J0LCAkY292ZXJhZ2VTdXBwb3J0LCAkbm90aWZpY2F0aW9uc1N1cHBvcnQsICRi
bG9iU2xpY2VTdXBwb3J0KTsKIAogbXkgQGZlYXR1cmVzID0gKAogICAgIHsgb3B0aW9uID0+ICIz
ZC1jYW52YXMiLCBkZXNjID0+ICJUb2dnbGUgM0QgY2FudmFzIHN1cHBvcnQiLApAQCAtNjUsNiAr
NjUsOSBAQCBteSBAZmVhdHVyZXMgPSAoCiAgICAgeyBvcHRpb24gPT4gIjNkLXJlbmRlcmluZyIs
IGRlc2MgPT4gIlRvZ2dsZSAzRCByZW5kZXJpbmcgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4g
IkVOQUJMRV8zRF9SRU5ERVJJTkciLCBkZWZhdWx0ID0+IChpc0FwcGxlTWFjV2ViS2l0KCkgJiYg
IWlzVGlnZXIoKSksIHZhbHVlID0+IFwkdGhyZWVEUmVuZGVyaW5nU3VwcG9ydCB9LAogCisgICAg
eyBvcHRpb24gPT4gImJsb2Itc2xpY2UiLCBkZXNjID0+ICJUb2dnbGUgQmxvYi5zbGljZSBzdXBw
b3J0IiwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0JMT0JfU0xJQ0UiLCBkZWZhdWx0ID0+IChp
c0FwcGxlTWFjV2ViS2l0KCkpLCB2YWx1ZSA9PiBcJGJsb2JTbGljZVN1cHBvcnQgfSwKKwogICAg
IHsgb3B0aW9uID0+ICJjaGFubmVsLW1lc3NhZ2luZyIsIGRlc2MgPT4gIlRvZ2dsZSBNZXNzYWdl
Q2hhbm5lbCBhbmQgTWVzc2FnZVBvcnQgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJM
RV9DSEFOTkVMX01FU1NBR0lORyIsIGRlZmF1bHQgPT4gMSwgdmFsdWUgPT4gXCRjaGFubmVsTWVz
c2FnaW5nU3VwcG9ydCB9LAogCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUu
YWMKaW5kZXggODk4ZTVkYi4uODkwOGYwOSAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBi
L2NvbmZpZ3VyZS5hYwpAQCAtNTUzLDYgKzU1MywxNCBAQCBBQ19BUkdfRU5BQkxFKHdlYl9zb2Nr
ZXRzLAogICAgICAgICAgICAgICBbXSxbZW5hYmxlX3dlYl9zb2NrZXRzPSJubyJdKQogQUNfTVNH
X1JFU1VMVChbJGVuYWJsZV93ZWJfc29ja2V0c10pCiAKKyMgY2hlY2sgd2hldGhlciB0byBlbmFi
bGUgQmxvYi5zbGljZSBzdXBwb3J0CitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxl
IEJsb2Iuc2xpY2Ugc3VwcG9ydF0pCitBQ19BUkdfRU5BQkxFKGJsb2Jfc2xpY2UsCisgICAgICAg
ICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1ibG9iLXNsaWNlXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgW2VuYWJsZSBzdXBwb3J0IGZvciBCbG9iLnNsaWNlIFtkZWZhdWx0
PW5vXV0pLAorICAgICAgICAgICAgICBbXSxbZW5hYmxlX2Jsb2Jfc2xpY2U9Im5vIl0pCitBQ19N
U0dfUkVTVUxUKFskZW5hYmxlX2Jsb2Jfc2xpY2VdKQorCiAjIGNoZWNrIHdoZXRoZXIgdG8gZW5h
YmxlIGNvZGUgY292ZXJhZ2UKIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgY29k
ZSBjb3ZlcmFnZSBzdXBwb3J0XSkKIEFDX0FSR19FTkFCTEUoY292ZXJhZ2UsCkBAIC03NzYsNiAr
Nzg0LDcgQEAgQU1fQ09ORElUSU9OQUwoW1VTRV9QQU5HT10sIFt0ZXN0ICIkd2l0aF9mb250X2Jh
Y2tlbmQiID0gInBhbmdvIl0pCiAjIFdlYktpdCBmZWF0dXJlIGNvbmRpdGlvbmFscwogQU1fQ09O
RElUSU9OQUwoW0VOQUJMRV9ERUJVR10sW3Rlc3QgIiRlbmFibGVfZGVidWciID0gInllcyJdKQog
QU1fQ09ORElUSU9OQUwoW0VOQUJMRV8zRF9UUkFOU0ZPUk1TXSxbdGVzdCAiJGVuYWJsZV8zRF90
cmFuc2Zvcm1zIiA9ICJ5ZXMiXSkKK0FNX0NPTkRJVElPTkFMKFtFTkFCTEVfQkxPQl9TTElDRV0s
W3Rlc3QgIiRlbmFibGVfYmxvYl9zbGljZSIgPSAieWVzIl0pCiBBTV9DT05ESVRJT05BTChbRU5B
QkxFX0NIQU5ORUxfTUVTU0FHSU5HXSxbdGVzdCAiJGVuYWJsZV9jaGFubmVsX21lc3NhZ2luZyIg
PSAieWVzIl0pCiBBTV9DT05ESVRJT05BTChbRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVJdLFt0
ZXN0ICIkZW5hYmxlX2phdmFzY3JpcHRfZGVidWdnZXIiID0gInllcyJdKQogQU1fQ09ORElUSU9O
QUwoW0VOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlNdLFt0ZXN0ICIkZW5hYmxlX29mZmxp
bmVfd2ViX2FwcGxpY2F0aW9ucyIgPSAieWVzIl0pCkBAIC04MzgsNiArODQ3LDcgQEAgQnVpbGQg
Y29uZmlndXJhdGlvbjoKICBPcHRpbWl6ZWQgbWVtb3J5IGFsbG9jYXRvciAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZmFzdF9tYWxsb2MKIEZlYXR1cmVzOgogIDNEIFRy
YW5zZm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVu
YWJsZV8zRF90cmFuc2Zvcm1zCisgQmxvYi5zbGljZSBzdXBwb3J0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2Jsb2Jfc2xpY2UKICBKSVQgY29tcGlsYXRp
b24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfaml0
CiAgRmlsdGVycyBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiAkZW5hYmxlX2ZpbHRlcnMKICBHZW9sb2NhdGlvbiBzdXBwb3J0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZ2VvbG9jYXRpb24K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49605</attachid>
            <date>2010-02-26 11:48:19 -0800</date>
            <delta_ts>2010-03-05 15:56:50 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>32993_12</filename>
            <type>text/plain</type>
            <size>56920</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmNThkMTUxLi43OTZmODdh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMDItMjMgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJsb2Iuc2xpY2Ugc3VwcG9ydC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyOTkzCisK
KyAgICAgICAgQWRkIEVOQUJMRV9CTE9CX1NMSUNFIGZlYXR1cmUgZGVmaW5lLgorCisgICAgICAg
ICogY29uZmlndXJlLmFjOgorCiAyMDEwLTAyLTIyICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlh
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5k
ZXggNjVjNDVhMi4uZjAzZjFjMyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTAy
LTIzICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbG9iLnNsaWNlIHN1cHBvcnQuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjk5MworCisgICAgICAg
IEFkZCBFTkFCTEVfQkxPQl9TTElDRSBmZWF0dXJlIGRlZmluZS4KKyAgICAgICAgQWxzbyBmaXgg
YSBwcm9ibGVtIHRoYXQgSlNWYWx1ZS50b0ludGVnZXIgaXMgbm90IGV4cG9zZWQgb24gV2luZG93
cy4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5kZWY6CisKIDIwMTAtMDItMjIgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcg
Yi9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpp
bmRleCA0YzRlMTkzLi5lYjk2YzI3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9Db25maWd1
cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZworKysgYi9KYXZhU2NyaXB0Q29yZS9Db25m
aWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtNDEsNiArNDEsNyBAQCBFTkFC
TEVfM0RfUkVOREVSSU5HXzEwNTAgPSBFTkFCTEVfM0RfUkVOREVSSU5HOwogRU5BQkxFXzNEX1JF
TkRFUklOR18xMDYwID0gRU5BQkxFXzNEX1JFTkRFUklORzsKIEVOQUJMRV8zRF9SRU5ERVJJTkdf
MTA3MCA9IEVOQUJMRV8zRF9SRU5ERVJJTkc7CiAKK0VOQUJMRV9CTE9CX1NMSUNFID0gRU5BQkxF
X0JMT0JfU0xJQ0U7CiBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcgPSBFTkFCTEVfQ0hBTk5FTF9N
RVNTQUdJTkc7CiBFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OID0gRU5BQkxFX0NMSUVO
VF9CQVNFRF9HRU9MT0NBVElPTjsKIEVOQUJMRV9EQVRBQkFTRSA9IEVOQUJMRV9EQVRBQkFTRTsK
QEAgLTc0LDQgKzc1LDQgQEAgRU5BQkxFX1hIVE1MTVAgPSA7CiBFTkFCTEVfWFBBVEggPSBFTkFC
TEVfWFBBVEg7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMg
PSAkKEVOQUJMRV8zRF9DQU5WQVMpICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQ0hB
Tk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikgJChFTkFC
TEVfREFUQUJBU0UpICQoRU5BQkxFX0RBVEFHUklEKSAkKEVOQUJMRV9EQVRBTElTVCkgJChFTkFC
TEVfRE9NX1NUT1JBR0UpICQoRU5BQkxFX0VWRU5UU09VUkNFKSAkKEVOQUJMRV9GSUxURVJTKSAk
KEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JTkRF
WEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9NQVRI
TUwpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykgJChFTkFCTEVfUlVCWSkgJChFTkFCTEVfU0FOREJPWCkgJChFTkFCTEVfU0hBUkVEX1dP
UktFUlMpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0FOSU1BVElPTikgJChFTkFCTEVfU1ZH
X0FTX0lNQUdFKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19G
T05UUykgJChFTkFCTEVfU1ZHX0ZPUkVJR05fT0JKRUNUKSAkKEVOQUJMRV9TVkdfVVNFKSAkKEVO
QUJMRV9WSURFTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dNTCkgJChFTkFCTEVf
V09SS0VSUykgJChFTkFCTEVfWEhUTUxNUCkgJChFTkFCTEVfWFBBVEgpICQoRU5BQkxFX1hTTFQp
OworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfQ0FOVkFTKSAkKEVOQUJMRV8zRF9SRU5E
RVJJTkcpICQoRU5BQkxFX0JMT0JfU0xJQ0UpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAk
KEVOQUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04pICQoRU5BQkxFX0RBVEFCQVNFKSAkKEVO
QUJMRV9EQVRBR1JJRCkgJChFTkFCTEVfREFUQUxJU1QpICQoRU5BQkxFX0RPTV9TVE9SQUdFKSAk
KEVOQUJMRV9FVkVOVFNPVVJDRSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfR0VPTE9DQVRJ
T04pICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChF
TkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9OT1RJ
RklDQVRJT05TKSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1JV
QlkpICQoRU5BQkxFX1NBTkRCT1gpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9T
VkcpICQoRU5BQkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFC
TEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NW
R19GT1JFSUdOX09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5B
QkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxF
X1hIVE1MTVApICQoRU5BQkxFX1hQQVRIKSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5kZWYgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCmluZGV4IDc2YWQzMDIuLjIwMzMyNDIgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5kZWYKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgpAQCAtMjY5LDYgKzI2OSw3
IEBAIEVYUE9SVFMKICAgICA/dG9Cb29sZWFuQEpTT2JqZWN0QEpTQ0BAVUJFX05QQVZFeGVjU3Rh
dGVAMkBAWgogICAgID90b0Jvb2xlYW5ASlNTdHJpbmdASlNDQEBFQkVfTlBBVkV4ZWNTdGF0ZUAy
QEBaCiAgICAgP3RvSW50MzJTbG93Q2FzZUBKU0NAQFlBSE5BQV9OQFoKKyAgICA/dG9JbnRlZ2Vy
QEpTVmFsdWVASlNDQEBRQkVOUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/dG9OdW1iZXJASlNDZWxs
QEpTQ0BAVUJFTlBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvTnVtYmVyQEpTT2JqZWN0QEpTQ0BA
VUJFTlBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvTnVtYmVyQEpTU3RyaW5nQEpTQ0BARUJFTlBB
VkV4ZWNTdGF0ZUAyQEBaCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDUzMDlkYi4uNTExOTUyZiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDM1IEBACisyMDEwLTAyLTIzICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbG9iLnNsaWNlIHN1
cHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
Mjk5MworCisgICAgICAgIEFkZCBhIG5ldyBsYXlvdXQgdGVzdCB0byB0ZXN0IHNsaWNpbmcgYW5k
IHNlbmRpbmcgYSBmaWxlLiBJbiBhZGRpdGlvbiwKKyAgICAgICAgdHdvIG5ldyBzY3JpcHRzIGFy
ZSBpbnRyb2R1Y2VkIHRvIGNyZWF0ZSBhbmQgdG91Y2ggdGhlIHRlbXAgZmlsZS4KKworICAgICAg
ICBNb3ZlIHNvbWUgY29kZSBmcm9tIHNlbmQtZHJhZ2dlZC1maWxlLmpzIHRvIGEgbmV3IGZpbGUK
KyAgICAgICAgc2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50LWZvci1kcmFnLmpzIHNvIHRoYXQgaXQg
Y2FuIGJlIHVzZWQgYnkgYm90aAorICAgICAgICBzZW5kLWRyYWdnZWQtZmlsZS5qcyBhbmQgc2Vu
ZC1zbGljZWQtZHJhZ2dlZC1maWxlLmpzIHRvIHNldHVwIHRoZSBpbnB1dAorICAgICAgICBlbGVt
ZW50IGZvciB0aGUgZmlsZSBkcmFnZ2luZy4KKworICAgICAgICBTaW5jZSB0aGUgQmxvYi5zbGlj
ZSBpcyBvbmx5IGVuYWJsZWQgZm9yIE1hYywgd2UgZGlzYWJsZSB0aGUgbmV3IHRlc3QKKyAgICAg
ICAgZm9yIGFsbCBvdGhlciBwbGF0Zm9ybXMuCisKKyAgICAgICAgKiBmYXN0L2RvbS9XaW5kb3cv
d2luZG93LXByb3BlcnRpZXMuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3Jlc291
cmNlcy9maWxlLWZvci1kcmFnLXRvLXNlbmQudHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9j
YWwvcmVzb3VyY2VzL3NlbmQtZHJhZ2dlZC1maWxlLmpzOgorICAgICAgICAqIGh0dHAvdGVzdHMv
bG9jYWwvcmVzb3VyY2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qczogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvc2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50
LWZvci1kcmFnLmpzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtZHJh
Z2dlZC1maWxlLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1k
cmFnZ2VkLWZpbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xv
Y2FsL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRw
L3Rlc3RzL3Jlc291cmNlcy90b3VjaC10ZW1wLWZpbGUucGhwOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3Jlc291cmNlcy93cml0ZS10ZW1wLWZpbGUucGhwOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOgor
ICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOgorCiAyMDEwLTAyLTIyICBDaHJpcyBGbGVp
emFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgRml4aW5nIExheW91dCB0ZXN0
IGZhaWx1cmUuIE5vdCByZXZpZXdlZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9t
L1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2lu
ZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwKaW5kZXggMDNlNjQ3OC4uYTVlMDBiNiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwK
QEAgLTcxLDcgKzcxLDggQEAgdmFyIF9fc2tpcF9fID0gewogICAgICJ3aW5kb3cuV2ViR0xVbnNp
Z25lZEJ5dGVBcnJheSIgOiAxLCAKICAgICAid2luZG93LldlYkdMVW5zaWduZWRJbnRBcnJheSIg
OiAxLCAKICAgICAid2luZG93LldlYkdMVW5zaWduZWRTaG9ydEFycmF5IiA6IDEsCi0gICAgIndp
bmRvdy5jbGllbnRJbmZvcm1hdGlvbi5nZW9sb2NhdGlvbiIgOiAxCisgICAgIndpbmRvdy5jbGll
bnRJbmZvcm1hdGlvbi5nZW9sb2NhdGlvbiIgOiAxLAorICAgICJ3aW5kb3cuQmxvYi5wcm90b3R5
cGUuc2xpY2UiIDogMQogfTsKIAogZnVuY3Rpb24gbG9nVmFsdWUodmFsdWVOYW1lKQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZmlsZS1mb3ItZHJh
Zy10by1zZW5kLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL2Zp
bGUtZm9yLWRyYWctdG8tc2VuZC50eHQKaW5kZXggNWFiMmY4YS4uNmE1MzdiNSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9yZXNvdXJjZXMvZmlsZS1mb3ItZHJhZy10
by1zZW5kLnR4dAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9m
aWxlLWZvci1kcmFnLXRvLXNlbmQudHh0CkBAIC0xICsxIEBACi1IZWxsbwpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKKzEyMzQ1Njc4OTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLWRy
YWdnZWQtZmlsZS5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3Nl
bmQtZHJhZ2dlZC1maWxlLmpzCmluZGV4IGJlZDQwNzguLmVmYzExMjQgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtZHJhZ2dlZC1maWxlLmpz
CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3NlbmQtZHJhZ2dl
ZC1maWxlLmpzCkBAIC0xLDQ4ICsxLDIxIEBACiBkZXNjcmlwdGlvbigiVGVzdCBmb3Igc2VuZGlu
ZyBhIGRyYWdnZWQgZmlsZSB2aWEgWE1MSHR0cFJlcXVlc3QuIik7CiAKLXZhciBmaWxlSW5wdXQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotZmlsZUlucHV0LnR5cGUgPSAiZmls
ZSI7Ci1maWxlSW5wdXQuc3R5bGUud2lkdGggPSAiMTAwcHgiOwotZmlsZUlucHV0LnN0eWxlLmhl
aWdodCA9ICIxMDBweCI7Ci0vLyBJbXBvcnRhbnQgdGhhdCB3ZSBwdXQgdGhpcyBhdCB0aGUgdG9w
IG9mIHRoZSBkb2Mgc28gdGhhdCBsb2dnaW5nIGRvZXMgbm90IGNhdXNlIGl0IHRvIGdvIG91dCBv
ZiB2aWV3ICh3aGVyZSBpdCBjYW4ndCBiZSBkcmFnZ2VkIHRvKQotZG9jdW1lbnQuYm9keS5pbnNl
cnRCZWZvcmUoZmlsZUlucHV0LCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpOwotCi1maWxlSW5w
dXQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VudGVyIiwgZnVuY3Rpb24oKSB7Ci0gICAgZXZlbnQu
cHJldmVudERlZmF1bHQoKTsKLX0sIGZhbHNlKTsKLQotZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVu
ZXIoImRyYWdvdmVyIiwgZnVuY3Rpb24oKSB7Ci0gICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BF
ZmZlY3QgPSAiY29weSI7Ci0gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLX0sIGZhbHNlKTsK
LQotZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBmdW5jdGlvbigpIHsKLSAgICBp
ZiAoZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluZGV4T2YoIkZpbGVzIikgIT0gLTEgJiYgZXZl
bnQuZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aCA9PSAxKQotICAgICAgICB0ZXN0UGFzc2VkKCJl
dmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLiIpOwotICAg
IGVsc2UgewotICAgICAgICB0ZXN0RmFpbGVkKCJldmVudC5kYXRhVHJhbnNmZXIgZG9lcyBub3Qg
Y29udGFpbiBhIEZpbGUgb2JqZWN0IG9uIGRyb3AuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KK2Z1bmN0aW9uIG9uRmlsZURyb3AoZmlsZSkKK3sKICAgICB2YXIgeGhyID0gbmV3IFhNTEh0
dHBSZXF1ZXN0KCk7CiAgICAgeGhyLm9wZW4oIlBPU1QiLCAiaHR0cDovLzEyNy4wLjAuMTo4MDAw
L3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9wb3N0LWVjaG8uY2dpIiwgZmFsc2UpOwotICAgIHho
ci5zZW5kKGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlc1swXSk7Ci0gICAgaWYgKHhoci5yZXNwb25z
ZVRleHQgPT0gIkhlbGxvIikKKyAgICB4aHIuc2VuZChmaWxlKTsKKyAgICBpZiAoeGhyLnJlc3Bv
bnNlVGV4dCA9PSAiMTIzNDU2Nzg5MCIpCiAgICAgICAgIHRlc3RQYXNzZWQoIkV4cGVjdGVkIHJl
c3BvbnNlIGRhdGEgcmVjZWl2ZWQuIik7CiAgICAgZWxzZQogICAgICAgICB0ZXN0RmFpbGVkKCJV
bmV4cGVjdGVkIHJlc3BvbnNlIGRhdGEgcmVjZWl2ZWQ6ICIgKyB4aHIucmVzcG9uc2VUZXh0KTsK
IAogICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci19LCBmYWxzZSk7Ci0KLWZ1bmN0aW9uIG1v
dmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGVsZW1lbnQpIHsKLSAgICB2YXIgY2VudGVyWCA9IGVs
ZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOwotICAgIHZhciBjZW50
ZXJZID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7Ci0gICAg
ZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oY2VudGVyWCwgY2VudGVyWSk7CiB9CiAKIGZ1bmN0aW9u
IHJ1blRlc3QoKQogeworICAgIHNldEZpbGVJbnB1dERyb3BDYWxsYmFjayhvbkZpbGVEcm9wKTsK
ICAgICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMoWyJyZXNvdXJjZXMvZmlsZS1mb3It
ZHJhZy10by1zZW5kLnR4dCJdKTsKICAgICBtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudChmaWxl
SW5wdXQpOwogICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKQEAgLTUxLDcgKzI0LDcgQEAgZnVu
Y3Rpb24gcnVuVGVzdCgpCiBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CiAgICAgcnVuVGVzdCgp
OwogICAgIC8vIENsZWFuIHVwIGFmdGVyIG91cnNlbHZlcwotICAgIGZpbGVJbnB1dC5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKGZpbGVJbnB1dCk7CisgICAgcmVtb3ZlRmlsZUlucHV0RWxlbWVudCgp
OwogfSBlbHNlIHsKICAgICB0ZXN0RmFpbGVkKCJUaGlzIHRlc3QgaXMgbm90IGludGVyYWN0aXZl
LCBwbGVhc2UgcnVuIHVzaW5nIER1bXBSZW5kZXJUcmVlIik7CiB9CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZp
bGUuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZW5kLXNsaWNl
ZC1kcmFnZ2VkLWZpbGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIy
ODlhOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVz
b3VyY2VzL3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS5qcwpAQCAtMCwwICsxLDE1MCBAQAorZGVz
Y3JpcHRpb24oIlRlc3QgZm9yIHNsaWNpbmcgYSBkcmFnZ2VkIGZpbGUgYW5kIHNlbmRpbmcgaXQg
dmlhIFhNTEh0dHBSZXF1ZXN0LiIpOworCit2YXIgb3JpZ2luYWxUZXh0ID0gIjEyMzQ1Njc4OTAi
OwordmFyIHRlbXBGaWxlTmFtZSA9ICJzZW5kLXNsaWNlLWRyYWdnZWQtZmlsZS50bXAiOwordmFy
IHRlbXBGaWxlT3JpZ2luYWxNb2RpZmljYXRpb25UaW1lOwordmFyIHN1YmZpbGU7CisKK2Z1bmN0
aW9uIHVwbG9hZEZpbGUoZmlsZSwgZXhwZWN0ZWRUZXh0LCBleHBlY3RlZEV4Y2VwdGlvbikKK3sK
KyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9wZW4oIlBPU1Qi
LCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9wb3N0LWVj
aG8uY2dpIiwgZmFsc2UpOworCisgICAgdmFyIHBhc3NlZDsKKyAgICB2YXIgbWVzc2FnZTsKKyAg
ICB0cnkgeworICAgICAgICB4aHIuc2VuZChmaWxlKTsKKyAgICAgICAgaWYgKGV4cGVjdGVkRXhj
ZXB0aW9uKSB7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1lc3Nh
Z2UgPSAiVW5leHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNl
VGV4dCArICIuIEV4cGVjdGluZyBleGNlcHRpb24gdGhyb3duIjsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmICh4aHIucmVzcG9uc2VUZXh0ID09IGV4cGVjdGVkVGV4dCkgeworICAg
ICAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJF
eHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4dDsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgbWVzc2FnZSA9ICJVbmV4cGVjdGVkIHJlc3BvbnNlIGRhdGEgcmVjZWl2ZWQ6
ICIgKyB4aHIucmVzcG9uc2VUZXh0ICsgIi4gRXhwZWN0aW5nOiAiICsgZXhwZWN0ZWRUZXh0Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgaWYg
KGV4cGVjdGVkRXhjZXB0aW9uKSB7CisgICAgICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgICAg
ICAgICAgbWVzc2FnZSA9ICJFeHBlY3RlZCBleGNlcHRpb24gdGhyb3duOiAiICsgZXg7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1l
c3NhZ2UgPSAiVW5leHBlY3RlZCBleGNlcHRpb24gdGhyb3duOiAiICsgZXg7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAocGFzc2VkKQorICAgICAgICB0ZXN0UGFzc2VkKG1lc3NhZ2UpOwor
ICAgIGVsc2UKKyAgICAgICAgdGVzdEZhaWxlZChtZXNzYWdlKTsKK30KKworZnVuY3Rpb24gY3Jl
YXRlVGVtcEZpbGUoZmlsZURhdGEpCit7CisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVz
dCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9yZXNvdXJj
ZXMvd3JpdGUtdGVtcC1maWxlLnBocD9maWxlbmFtZT0iICsgdGVtcEZpbGVOYW1lICsgIiZkYXRh
PSIgKyBmaWxlRGF0YSwgZmFsc2UpOworICAgIHhoci5zZW5kKCk7CisgICAgaWYgKHhoci5zdGF0
dXMgIT0gMjAwKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIlVuZXhwZWN0ZWQgcmVzcG9uc2Ugc3Rh
dHVzIHJlY2VpdmVkOiAiICsgeGhyLnN0YXR1cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICB2YXIgdmFsdWVzID0geGhyLnJlc3BvbnNlVGV4dC5zcGxpdCgnXG4nKTsKKyAgICBpZiAo
dmFsdWVzLmxlbmd0aCA8IDIpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiVW5leHBlY3RlZCByZXNw
b25zZSB0ZXh0IHJlY2VpdmVkOiAiICsgeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWVzOworfQorCitmdW5jdGlvbiB0b3VjaFRlbXBG
aWxlKCkKK3sKKyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLm9w
ZW4oIlBPU1QiLCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3Jlc291cmNlcy90b3VjaC10ZW1wLWZp
bGUucGhwP2ZpbGVuYW1lPSIgKyB0ZW1wRmlsZU5hbWUsIGZhbHNlKTsKKyAgICB4aHIuc2VuZCgp
OworfQorCitmdW5jdGlvbiByZW1vdmVUZW1wRmlsZSgpCit7CisgICAgdmFyIHhociA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJQT1NUIiwgImh0dHA6Ly8xMjcuMC4wLjE6
ODAwMC9yZXNvdXJjZXMvcmVzZXQtdGVtcC1maWxlLnBocD9maWxlbmFtZT0iICsgdGVtcEZpbGVO
YW1lLCBmYWxzZSk7CisgICAgeGhyLnNlbmQoKTsKK30KKworZnVuY3Rpb24gb25TdGFibGVGaWxl
RHJvcChmaWxlLCBzdGFydCwgbGVuZ3RoKQoreworICAgIC8vIFNsaWNlIHRoZSBmaWxlLgorICAg
IHN1YmZpbGUgPSBmaWxlLnNsaWNlKHN0YXJ0LCBsZW5ndGgpOworICAgIHZhciBleHBlY3RlZFRl
eHQgPSBvcmlnaW5hbFRleHQuc3Vic3RyaW5nKHN0YXJ0LCBzdGFydCArIGxlbmd0aCk7CisgICAg
c2hvdWxkRXZhbHVhdGVUbygic3ViZmlsZS5zaXplIiwgZXhwZWN0ZWRUZXh0Lmxlbmd0aCk7CisK
KyAgICAvLyBVcGxvYWQgdGhlIHNsaWNlZCBmaWxlLgorICAgIHVwbG9hZEZpbGUoc3ViZmlsZSwg
ZXhwZWN0ZWRUZXh0LCBmYWxzZSk7Cit9CisKK2Z1bmN0aW9uIGRyYWdBbmRTbGljZVN0YWJsZUZp
bGUoc3RhcnQsIGxlbmd0aCkKK3sKKyAgICBzZXRGaWxlSW5wdXREcm9wQ2FsbGJhY2soZnVuY3Rp
b24oZmlsZSkgeyBvblN0YWJsZUZpbGVEcm9wKGZpbGUsIHN0YXJ0LCBsZW5ndGgpOyB9KTsKKyAg
ICBldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMoWyJyZXNvdXJjZXMvZmlsZS1mb3ItZHJh
Zy10by1zZW5kLnR4dCJdKTsKKyAgICBtb3ZlTW91c2VUb0NlbnRlck9mRWxlbWVudChmaWxlSW5w
dXQpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKK30KKworZnVuY3Rpb24gb25VbnN0YWJs
ZUZpbGVEcm9wKGZpbGUsIHN0YXJ0LCBsZW5ndGgpCit7CisgICAgLy8gU2xpY2UgdGhlIGZpbGUu
CisgICAgc3ViZmlsZSA9IGZpbGUuc2xpY2Uoc3RhcnQsIGxlbmd0aCk7CisgICAgdmFyIGV4cGVj
dGVkVGV4dCA9IG9yaWdpbmFsVGV4dC5zdWJzdHJpbmcoc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoKTsK
KyAgICBzaG91bGRFdmFsdWF0ZVRvKCJzdWJmaWxlLnNpemUiLCBleHBlY3RlZFRleHQubGVuZ3Ro
KTsKKyAgCisgICAgLy8gVXBsb2FkIHRoZSBzbGljZWQgZmlsZS4KKyAgICB1cGxvYWRGaWxlKHN1
YmZpbGUsIGV4cGVjdGVkVGV4dCwgZmFsc2UpOworCisgICAgLy8gVG91Y2ggdGhlIHVuZGVybHlp
bmcgdGVtcCBmaWxlLgorICAgIHRvdWNoVGVtcEZpbGUoKTsKKyAgICAKKyAgICAvLyBVcGxvYWQg
dGhlIHNsaWNlZCBmaWxlLiBXZSBzaG91bGQgcmVjZWl2ZSBhbiBleGNlcHRpb24gc2luY2UgdGhl
IGZpbGUgaGFzIGJlZW4gY2hhbmdlZC4KKyAgICB1cGxvYWRGaWxlKHN1YmZpbGUsIG51bGwsIHRy
dWUpOworCisgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wIGZpbGUuCisgICAgcmVtb3ZlVGVtcEZpbGUo
KTsKK30KKworZnVuY3Rpb24gZHJhZ0FuZFNsaWNlVW5zdGFibGVGaWxlKHN0YXJ0LCBsZW5ndGgp
Cit7CisgICAgdmFyIHRlbXBGaWxlSW5mbyA9IGNyZWF0ZVRlbXBGaWxlKG9yaWdpbmFsVGV4dCk7
CisgICAgaWYgKHRlbXBGaWxlSW5mby5sZW5ndGggPCAyKSB7CisgICAgICAgIGRvbmUoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2YXIgdGVtcEZpbGVQYXRoID0gdGVtcEZpbGVJbmZv
WzBdOworICAgIHRlbXBGaWxlT3JpZ2luYWxNb2RpZmljYXRpb25UaW1lID0gdGVtcEZpbGVJbmZv
WzFdOworCisgICAgc2V0RmlsZUlucHV0RHJvcENhbGxiYWNrKGZ1bmN0aW9uKGZpbGUpIHsgb25V
bnN0YWJsZUZpbGVEcm9wKGZpbGUsIHN0YXJ0LCBsZW5ndGgpOyB9KTsKKyAgICBldmVudFNlbmRl
ci5iZWdpbkRyYWdXaXRoRmlsZXMoW3RlbXBGaWxlUGF0aF0pOworICAgIG1vdmVNb3VzZVRvQ2Vu
dGVyT2ZFbGVtZW50KGZpbGVJbnB1dCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworfQor
CitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBkcmFnQW5kU2xpY2VTdGFibGVGaWxlKDIsIDQp
OworICAgIGRyYWdBbmRTbGljZVN0YWJsZUZpbGUoMiwgMjApOworICAgIGRyYWdBbmRTbGljZVN0
YWJsZUZpbGUoMTUsIDIwKTsKKworICAgIGRyYWdBbmRTbGljZVVuc3RhYmxlRmlsZSgzLCA1KTsK
K30KKworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIHJ1blRlc3QoKTsKKyAgICAvLyBD
bGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMKKyAgICByZW1vdmVGaWxlSW5wdXRFbGVtZW50KCk7Cit9
IGVsc2UgeworICAgIHRlc3RGYWlsZWQoIlRoaXMgdGVzdCBpcyBub3QgaW50ZXJhY3RpdmUsIHBs
ZWFzZSBydW4gdXNpbmcgRHVtcFJlbmRlclRyZWUiKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3Jl
c291cmNlcy9zZXR1cC1maWxlLWlucHV0LWVsZW1lbnQtZm9yLWRyYWcuanMgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2xvY2FsL3Jlc291cmNlcy9zZXR1cC1maWxlLWlucHV0LWVsZW1lbnQtZm9y
LWRyYWcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUxYzY4MAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvcmVzb3VyY2VzL3Nl
dHVwLWZpbGUtaW5wdXQtZWxlbWVudC1mb3ItZHJhZy5qcwpAQCAtMCwwICsxLDQ2IEBACit2YXIg
ZmlsZUlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKK2ZpbGVJbnB1dC50
eXBlID0gImZpbGUiOworZmlsZUlucHV0LnN0eWxlLndpZHRoID0gIjEwMHB4IjsKK2ZpbGVJbnB1
dC5zdHlsZS5oZWlnaHQgPSAiMTAwcHgiOworLy8gSW1wb3J0YW50IHRoYXQgd2UgcHV0IHRoaXMg
YXQgdGhlIHRvcCBvZiB0aGUgZG9jIHNvIHRoYXQgbG9nZ2luZyBkb2VzIG5vdCBjYXVzZSBpdCB0
byBnbyBvdXQgb2YgdmlldyAod2hlcmUgaXQgY2FuJ3QgYmUgZHJhZ2dlZCB0bykKK2RvY3VtZW50
LmJvZHkuaW5zZXJ0QmVmb3JlKGZpbGVJbnB1dCwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTsK
KworZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdlbnRlciIsIGZ1bmN0aW9uKCkgewor
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2ZpbGVJbnB1dC5hZGRF
dmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIGZ1bmN0aW9uKCkgeworICAgIGV2ZW50LmRhdGFUcmFu
c2Zlci5kcm9wRWZmZWN0ID0gImNvcHkiOworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9
LCBmYWxzZSk7CisKK3ZhciBmaWxlSW5wdXREcm9wQ2FsbGJhY2sgPSBudWxsOworZmlsZUlucHV0
LmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBmdW5jdGlvbigpIHsKKyAgICBpZiAoZXZlbnQuZGF0
YVRyYW5zZmVyLnR5cGVzLmluZGV4T2YoIkZpbGVzIikgIT0gLTEgJiYgZXZlbnQuZGF0YVRyYW5z
ZmVyLmZpbGVzLmxlbmd0aCA9PSAxKQorICAgICAgICB0ZXN0UGFzc2VkKCJldmVudC5kYXRhVHJh
bnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLiIpOworICAgIGVsc2UgeworICAg
ICAgICB0ZXN0RmFpbGVkKCJldmVudC5kYXRhVHJhbnNmZXIgZG9lcyBub3QgY29udGFpbiBhIEZp
bGUgb2JqZWN0IG9uIGRyb3AuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmaWxl
SW5wdXREcm9wQ2FsbGJhY2soZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzWzBdKTsKKworICAgIGV2
ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9LCBmYWxzZSk7CisKK2Z1bmN0aW9uIHNldEZpbGVJbnB1
dERyb3BDYWxsYmFjayhmaWxlSW5wdXREcm9wQ2FsbGJhY2tGdW5jKQoreworICAgIGZpbGVJbnB1
dERyb3BDYWxsYmFjayA9IGZpbGVJbnB1dERyb3BDYWxsYmFja0Z1bmM7Cit9CisKK2Z1bmN0aW9u
IG1vdmVNb3VzZVRvQ2VudGVyT2ZFbGVtZW50KGVsZW1lbnQpCit7CisgICAgdmFyIGNlbnRlclgg
PSBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMjsKKyAgICB2YXIg
Y2VudGVyWSA9IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOwor
ICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGNlbnRlclgsIGNlbnRlclkpOworfQorCitmdW5j
dGlvbiByZW1vdmVGaWxlSW5wdXRFbGVtZW50KCkKK3sKKyAgICBmaWxlSW5wdXQucGFyZW50Tm9k
ZS5yZW1vdmVDaGlsZChmaWxlSW5wdXQpCit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2xvY2FsL3NlbmQtZHJhZ2dlZC1maWxlLmh0bWwKaW5kZXggM2YyMjEwYS4uZjUyODBmNCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5kLWRyYWdnZWQtZmls
ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFnZ2VkLWZp
bGUuaHRtbApAQCAtNyw2ICs3LDcgQEAKIDxib2R5PgogPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+
CiA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2V0dXAt
ZmlsZS1pbnB1dC1lbGVtZW50LWZvci1kcmFnLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvc2VuZC1kcmFnZ2VkLWZpbGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ii4u
Ly4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CiA8L2Jv
ZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2Vk
LWRyYWdnZWQtZmlsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2Fs
L3NlbmQtc2xpY2VkLWRyYWdnZWQtZmlsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYjQ2MDc5MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDIyIEBACitUZXN0IGZvciBzbGljaW5nIGEgZHJhZ2dlZCBmaWxlIGFuZCBzZW5k
aW5nIGl0IHZpYSBYTUxIdHRwUmVxdWVzdC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1MgZXZlbnQuZGF0YVRyYW5zZmVyIGNvbnRhaW5zIGEgRmlsZSBvYmplY3Qgb24gZHJv
cC4KK1BBU1Mgc3ViZmlsZS5zaXplIGlzIDQKK1BBU1MgRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSBy
ZWNlaXZlZDogMzQ1NgorUEFTUyBldmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9i
amVjdCBvbiBkcm9wLgorUEFTUyBzdWJmaWxlLnNpemUgaXMgOAorUEFTUyBFeHBlY3RlZCByZXNw
b25zZSBkYXRhIHJlY2VpdmVkOiAzNDU2Nzg5MAorUEFTUyBldmVudC5kYXRhVHJhbnNmZXIgY29u
dGFpbnMgYSBGaWxlIG9iamVjdCBvbiBkcm9wLgorUEFTUyBzdWJmaWxlLnNpemUgaXMgMAorUEFT
UyBFeHBlY3RlZCByZXNwb25zZSBkYXRhIHJlY2VpdmVkOiAKK1BBU1MgZXZlbnQuZGF0YVRyYW5z
ZmVyIGNvbnRhaW5zIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4KK1BBU1Mgc3ViZmlsZS5zaXplIGlz
IDUKK1BBU1MgRXhwZWN0ZWQgcmVzcG9uc2UgZGF0YSByZWNlaXZlZDogNDU2NzgKK1BBU1MgRXhw
ZWN0ZWQgZXhjZXB0aW9uIHRocm93bjogRXJyb3I6IE5FVFdPUktfRVJSOiBYTUxIdHRwUmVxdWVz
dCBFeGNlcHRpb24gMTAxCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9zZW5k
LXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwv
c2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYzA0MWIxZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKQEAgLTAsMCArMSwxNCBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvc2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50LWZvci1kcmFnLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9yZXNvdXJjZXMvdG91Y2gtdGVtcC1maWxlLnBocCBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VzL3RvdWNoLXRlbXAtZmlsZS5waHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI4MjlkZgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvcmVzb3VyY2VzL3RvdWNoLXRlbXAtZmlsZS5waHAKQEAgLTAs
MCArMSwyMiBAQAorPD9waHAKK3JlcXVpcmVfb25jZSAncG9ydGFiaWxpdHlMYXllci5waHAnOwor
CitpZiAoIXN5c19nZXRfdGVtcF9kaXIoKSkgeworICAgIGVjaG8gIkZBSUw6IE5vIHRlbXAgZGly
IHdhcyByZXR1cm5lZC5cbiI7CisgICAgZXhpdCgpOworfQorCiskdG1wRmlsZSA9IHN5c19nZXRf
dGVtcF9kaXIoKSAuICIvIiAuICRfR0VUWydmaWxlbmFtZSddOworCiskc3RhdCA9IHN0YXQoJHRt
cEZpbGUpOworaWYgKCEkc3RhdCkgeworICAgIGVjaG8gIkZBSUw6IHN0YXQoKSBjYWxsIGZhaWxl
ZC5cbiI7CisgICAgZXhpdCgpOworfQorCiskbXRpbWUgPSAkc3RhdFsnbXRpbWUnXSArIDE7CisK
K2lmICghdG91Y2goJHRtcEZpbGUsICRtdGltZSkpIHsKKyAgICBlY2hvICJGQUlMOiB0b3VjaCgp
IGNhbGwgZmFpbGVkLlxuIjsKK30KKz8+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3Jlc291cmNlcy93cml0ZS10ZW1wLWZpbGUucGhwIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9yZXNvdXJjZXMvd3JpdGUtdGVtcC1maWxlLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5mZmUyYzhjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9yZXNvdXJjZXMvd3JpdGUtdGVtcC1maWxlLnBocApAQCAtMCwwICsxLDIwIEBACis8P3Bo
cAorcmVxdWlyZV9vbmNlICdwb3J0YWJpbGl0eUxheWVyLnBocCc7CisKK2lmICghc3lzX2dldF90
ZW1wX2RpcigpKSB7CisgICAgZWNobyAiRkFJTDogTm8gdGVtcCBkaXIgd2FzIHJldHVybmVkLlxu
IjsKKyAgICBleGl0KCk7Cit9CisKKyR0bXBGaWxlID0gc3lzX2dldF90ZW1wX2RpcigpIC4gIi8i
IC4gJF9HRVRbJ2ZpbGVuYW1lJ107CisKK2lmICghZmlsZV9wdXRfY29udGVudHMoJHRtcEZpbGUs
ICRfR0VUWydkYXRhJ10pKSB7CisgICAgZWNobyAiRkFJTDogdW5hYmxlIHRvIHdyaXRlIHRvIGZp
bGU6ICIgLiAkdG1wRmlsZSAuICJcbiI7CisgICAgZXhpdCgpOworfQorCiskc3RhdCA9IHN0YXQo
JHRtcEZpbGUpOworCitlY2hvICR0bXBGaWxlIC4gIlxuIjsKK2VjaG8gJHN0YXRbJ210aW1lJ107
Cis/PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCA1YzliNmJiLi5hNGM2ZTAxIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtMzQzNCw2ICszNDM0LDcgQEAgaHR0cC90ZXN0cy9s
b2FkaW5nL3ByZWxvYWQtaW1nLXRlc3QuaHRtbAogaHR0cC90ZXN0cy9sb2FkaW5nL3Nsb3ctcGFy
c2luZy1zdWJmcmFtZS5odG1sCiBodHRwL3Rlc3RzL2xvYWRpbmcvdGV4dC1jb250ZW50LXR5cGUt
d2l0aC1iaW5hcnktZXh0ZW5zaW9uLmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFnZ2Vk
LWZpbGUuaHRtbAoraHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRt
bAogaHR0cC90ZXN0cy9tZWRpYS92aWRlby1wbGF5LXN0YWxsLXNlZWsuaHRtbAogaHR0cC90ZXN0
cy9tZWRpYS92aWRlby1wbGF5LXN0YWxsLmh0bWwKIGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tc2Vl
a2FibGUtc3RhbGwuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tp
cHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKaW5kZXggODMxZjVlOS4uMTNj
ODMzMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAorKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCkBAIC01Myw2ICs1Myw3IEBAIHBsdWdpbnMv
c2V0LXN0YXR1cy5odG1sCiAjIEZhaWxpbmcgTG9jYWwgdGVzdHMKIGh0dHAvdGVzdHMvbG9jYWwv
ZHJhZy1vdmVyLXJlbW90ZS1jb250ZW50Lmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1kcmFn
Z2VkLWZpbGUuaHRtbAoraHR0cC90ZXN0cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUu
aHRtbAogCiAjIEZhaWxpbmcgbmF2aWdhdGlvbiB0ZXN0cwogaHR0cC90ZXN0cy9uYXZpZ2F0aW9u
L2FuY2hvci1mcmFtZXMuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2lu
L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAppbmRleCAxOGViYjY4
Li40NGE1ZjU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZApAQCAtNjYwLDYgKzY2MCw3IEBA
IGZhc3QvZm9ybXMvaW5wdXQtc2VsZWN0ZWRvcHRpb24uaHRtbAogCiAjIDxodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkyODc+CiBodHRwL3Rlc3RzL2xvY2FsL3NlbmQt
ZHJhZ2dlZC1maWxlLmh0bWwKK2h0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1m
aWxlLmh0bWwKIAogIyA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5
Mjg5PgogcGx1Z2lucy9kZXN0cm95LWR1cmluZy1ucHAtbmV3Lmh0bWwKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQzZGY0Zi4uZGNhNTMz
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw1MyBAQAorMjAxMC0wMi0yMyAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQmxv
Yi5zbGljZSBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzI5OTMKKyAgICAgICAgCisgICAgICAgIFRoZSBmb2xsb3dpbmcgc2VtYW50aWMg
aXMgYWRvcHRlZCBwZXIgdGhlIGRpc2N1c3Npb25zIG9uIHB1YmxpYy13ZWJhcHBzOgorICAgICAg
ICAxKSBGaWxlLnNsaWNlKCkgZG9lcyBhIHN5bmNocm9ub3VzIElPIHRvIGNhcHR1cmUgdGhlIGN1
cnJlbnQgc2l6ZSBhbmQKKyAgICAgICAgICAgbW9kaWZpY2F0aW9uIHRpbWUgYW5kIGNhY2hlIHRo
ZW0gaW4gdGhlIHJlc3VsdGluZyBCbG9iLgorICAgICAgICAyKSBTdWJzZXF1ZW50IEJsb2Igb3Bl
cmF0aW9ucywgbGlrZSBCbG9iLnNsaWNlIGFuZCBCbG9iLnNpemUgc2ltcGx5CisgICAgICAgICAg
IHVzZSB0aGUgY2FjaGVkIHZhbHVlcy4KKyAgICAgICAgMykgV2hlbiB0aGUgdW5kZXJseWluZyBm
aWxlIGRhdGEgYXJlIGFjY2Vzc2VkLCBsaWtlIGluIFhIUi5zZW5kKCksIHRoZQorICAgICAgICAg
ICBVQSB3aWxsIGNoZWNrIHRoZSBjYWNoZWQgbW9kaWZpY2F0aW9uIHRpbWUgYWdhaW5zdCB0aGUg
Y3VycmVudAorICAgICAgICAgICBtb2RpZmljYXRpb24gdGltZSB0byBkZXRlcm1pbmUgaWYgdGhl
IGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QuCisgICAgICAgICAgIEFuIGVycm9yIG9yIGV4
Y2VwdGlvbiB3aWxsIGJlIHRocm93biBpZiBuZWVkZWQuCisKKyAgICAgICAgQWxzbyBhZGQgRU5B
QkxFX0JMT0JfU0xJQ0UgZmVhdHVyZSBkZWZpbmUuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0
cy9sb2NhbC9zZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbAorCisgICAgICAgICogQ29uZmln
dXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWc6CisgICAgICAgICogR05VbWFrZWZpbGUu
YW06CisgICAgICAgICogV2ViQ29yZS5wcmk6CisgICAgICAgICogaHRtbC9CbG9iLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6c2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzbGljZSk6CisgICAgICAgICogaHRtbC9CbG9i
Lmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6bW9kaWZpY2F0aW9uVGltZSk6
CisgICAgICAgICogaHRtbC9CbG9iLmlkbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpkZWVwQ29weSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YTo6YXBwZW5kRmlsZVJhbmdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkZvcm1EYXRhRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmFk
dmFuY2VDdXJyZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZW5OZXh0U3RyZWFtKToK
KyAgICAgICAgKFdlYkNvcmU6OmZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybU9w
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybVJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SFRUUEJvZHkpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2VuZCk6CisKIDIwMTAtMDItMjIgIEpvaG4gU3VsbGl2
YW4gIDxzdWxsaXZhbkBhcHBsZS5jb20+CiAgICAgICAgIAogICAgICAgICBSZXZpZXdlZCBieSBU
aW0gSGF0Y2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURl
ZmluZXMueGNjb25maWcgYi9XZWJDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhj
Y29uZmlnCmluZGV4IDRjNGUxOTMuLmViOTZjMjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ29uZmln
dXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKKysrIGIvV2ViQ29yZS9Db25maWd1cmF0
aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtNDEsNiArNDEsNyBAQCBFTkFCTEVfM0Rf
UkVOREVSSU5HXzEwNTAgPSBFTkFCTEVfM0RfUkVOREVSSU5HOwogRU5BQkxFXzNEX1JFTkRFUklO
R18xMDYwID0gRU5BQkxFXzNEX1JFTkRFUklORzsKIEVOQUJMRV8zRF9SRU5ERVJJTkdfMTA3MCA9
IEVOQUJMRV8zRF9SRU5ERVJJTkc7CiAKK0VOQUJMRV9CTE9CX1NMSUNFID0gRU5BQkxFX0JMT0Jf
U0xJQ0U7CiBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcgPSBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJ
Tkc7CiBFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OID0gRU5BQkxFX0NMSUVOVF9CQVNF
RF9HRU9MT0NBVElPTjsKIEVOQUJMRV9EQVRBQkFTRSA9IEVOQUJMRV9EQVRBQkFTRTsKQEAgLTc0
LDQgKzc1LDQgQEAgRU5BQkxFX1hIVE1MTVAgPSA7CiBFTkFCTEVfWFBBVEggPSBFTkFCTEVfWFBB
VEg7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMgPSAkKEVO
QUJMRV8zRF9DQU5WQVMpICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQ0hBTk5FTF9N
RVNTQUdJTkcpICQoRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikgJChFTkFCTEVfREFU
QUJBU0UpICQoRU5BQkxFX0RBVEFHUklEKSAkKEVOQUJMRV9EQVRBTElTVCkgJChFTkFCTEVfRE9N
X1NUT1JBR0UpICQoRU5BQkxFX0VWRU5UU09VUkNFKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJM
RV9HRU9MT0NBVElPTikgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9JTkRFWEVEX0RB
VEFCQVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9NQVRITUwpICQo
RU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykg
JChFTkFCTEVfUlVCWSkgJChFTkFCTEVfU0FOREJPWCkgJChFTkFCTEVfU0hBUkVEX1dPUktFUlMp
ICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0FOSU1BVElPTikgJChFTkFCTEVfU1ZHX0FTX0lN
QUdFKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19GT05UUykg
JChFTkFCTEVfU1ZHX0ZPUkVJR05fT0JKRUNUKSAkKEVOQUJMRV9TVkdfVVNFKSAkKEVOQUJMRV9W
SURFTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dNTCkgJChFTkFCTEVfV09SS0VS
UykgJChFTkFCTEVfWEhUTUxNUCkgJChFTkFCTEVfWFBBVEgpICQoRU5BQkxFX1hTTFQpOworRkVB
VFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfQ0FOVkFTKSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcp
ICQoRU5BQkxFX0JMT0JfU0xJQ0UpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJM
RV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04pICQoRU5BQkxFX0RBVEFCQVNFKSAkKEVOQUJMRV9E
QVRBR1JJRCkgJChFTkFCTEVfREFUQUxJU1QpICQoRU5BQkxFX0RPTV9TVE9SQUdFKSAkKEVOQUJM
RV9FVkVOVFNPVVJDRSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfR0VPTE9DQVRJT04pICQo
RU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVf
SkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9OT1RJRklDQVRJ
T05TKSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1JVQlkpICQo
RU5BQkxFX1NBTkRCT1gpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TVkcpICQo
RU5BQkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFCTEVfU1ZH
X0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NWR19GT1JF
SUdOX09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1dF
Ql9TT0NLRVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hIVE1M
TVApICQoRU5BQkxFX1hQQVRIKSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDA2ZjcxZDIuLmUy
OGQxYjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQpAQCAtOTY2LDggKzk2Niw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmggXAogCVdlYkNvcmUvaGlzdG9yeS9QYWdlQ2Fj
aGUuY3BwIFwKIAlXZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmggXAotICAgICAgICBXZWJDb3Jl
L2h0bWwvQmxvYi5jcHAgXAotICAgICAgICBXZWJDb3JlL2h0bWwvQmxvYi5oIFwKKwlXZWJDb3Jl
L2h0bWwvQmxvYi5jcHAgXAorCVdlYkNvcmUvaHRtbC9CbG9iLmggXAogCVdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuaCBcCiAJV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNHcmFkaWVudC5jcHAgXAogCVdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQu
aCBcCkBAIC0zNDc3LDYgKzM0NzcsMTUgQEAgZWxzZQogd2ViY29yZV9jcHBmbGFncyArPSAtREVO
QUJMRV9XRUJfU09DS0VUUz0wCiBlbmRpZiAgIyBFTkQgRU5BQkxFX1dFQl9TT0NLRVRTCiAKKyMg
LS0tCisjIEJsb2Iuc2xpY2Ugc3VwcG9ydAorIyAtLS0KK2lmIEVOQUJMRV9CTE9CX1NMSUNFCitG
RUFUVVJFX0RFRklORVMgKz0gRU5BQkxFX0JMT0JfU0xJQ0U9MQorCit3ZWJjb3JlX2NwcGZsYWdz
ICs9IFwKKwktREVOQUJMRV9CTE9CX1NMSUNFPTEKK2VuZGlmICAjIEVORCBFTkFCTEVfQkxPQl9T
TElDRQogCiBEZXJpdmVkU291cmNlcy9DU1NQcm9wZXJ0eU5hbWVzLmg6ICQoV0VCQ09SRV9DU1Nf
UFJPUEVSVFlfTkFNRVMpICQoV2ViQ29yZSkvY3NzL21ha2Vwcm9wLnBsCiAJaWYgc29ydCAkKFdF
QkNPUkVfQ1NTX1BST1BFUlRZX05BTUVTKSB8IHVuaXEgLWQgfCBncmVwIC1FICdeW14jXSc7IHRo
ZW4gZWNobyAnRHVwbGljYXRlIHZhbHVlISc7IGV4aXQgMTsgZmkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS5wcmkgYi9XZWJDb3JlL1dlYkNvcmUucHJpCmluZGV4IDI3ZjFiYjYuLjZkNDc0
NDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
LnByaQpAQCAtNTQsNiArNTQsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU0lOR0xFX1RI
UkVBREVEPTEpIHsKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89Lik6IERFRklORVMg
Kz0gRU5BQkxFX1ZJREVPPTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfUlVCWT0uKTogREVG
SU5FUyArPSBFTkFCTEVfUlVCWT0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NBTkRCT1g9
Lik6IERFRklORVMgKz0gRU5BQkxFX1NBTkRCT1g9MQorIWNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9CTE9CX1NMSUNFPS4pOiBERUZJTkVTICs9IEVOQUJMRV9CTE9CX1NMSUNFPTAKIAogZ3JlYXRl
clRoYW4oUVRfTUlOT1JfVkVSU0lPTiwgNSkgewogICAgICFjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfM0RfUkVOREVSSU5HPS4pOiBERUZJTkVTICs9IEVOQUJMRV8zRF9SRU5ERVJJTkc9MQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwIGIvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCmlu
ZGV4IDBiNjc3ZWEuLmJlNDI0NDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmNwcAor
KysgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKQEAgLTM3LDE3ICszNyw3NyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIEJsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIDogbV9wYXRo
KHBhdGgpCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgLCBtX3N0YXJ0KDApCisgICAgLCBt
X2xlbmd0aCh0b0VuZE9mRmlsZSkKKyAgICAsIG1fc25hcHNob3RDYXB0dXJlZChmYWxzZSkKKyAg
ICAsIG1fc25hcHNob3RTaXplKDApCisgICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShk
b05vdENoZWNrRmlsZUNoYW5nZSkKKyNlbmRpZgogewogfQogCisjaWYgRU5BQkxFKEJMT0JfU0xJ
Q0UpCitCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25n
IGxvbmcgbGVuZ3RoLCBsb25nIGxvbmcgc25hcHNob3RTaXplLCBkb3VibGUgc25hcHNob3RNb2Rp
ZmljYXRpb25UaW1lKQorICAgIDogbV9wYXRoKHBhdGgpCisgICAgLCBtX3N0YXJ0KHN0YXJ0KQor
ICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9zbmFwc2hvdENhcHR1cmVkKHRydWUpCisg
ICAgLCBtX3NuYXBzaG90U2l6ZShzbmFwc2hvdFNpemUpCisgICAgLCBtX3NuYXBzaG90TW9kaWZp
Y2F0aW9uVGltZShzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCit7CisgICAgQVNTRVJUKHN0YXJ0
ID49IDAgJiYgbGVuZ3RoID49IDAgJiYgc3RhcnQgKyBsZW5ndGggPD0gc25hcHNob3RTaXplICYm
IHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7Cit9CisjZW5kaWYKKwogdW5zaWduZWQgbG9uZyBs
b25nIEJsb2I6OnNpemUoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBKYXZhU2NyaXB0IGNhbm5v
dCByZXByZXNlbnQgc2l6ZXMgYXMgbGFyZ2UgYXMgdW5zaWduZWQgbG9uZyBsb25nLCB3ZSBuZWVk
IHRvCiAgICAgLy8gY29tZSB1cCB3aXRoIGFuIGV4Y2VwdGlvbiB0byB0aHJvdyBpZiBmaWxlIHNp
emUgaXMgbm90IHJlcHJlc2V0YWJsZS4KKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICBpZiAo
bV9zbmFwc2hvdENhcHR1cmVkKQorICAgICAgICByZXR1cm4gbV9sZW5ndGg7CisjZW5kaWYKICAg
ICBsb25nIGxvbmcgc2l6ZTsKICAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwgc2l6ZSkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxv
bmc+KHNpemUpOwogfQogCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCitQYXNzUmVmUHRyPEJsb2I+
IEJsb2I6OnNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkgY29uc3QKK3sK
KyAgICAvLyBXaGVuIHdlIHNsaWNlIGEgZmlsZSBmb3IgdGhlIGZpcnN0IHRpbWUsIHdlIG9idGFp
biBhIHNuYXBzaG90IG9mIHRoZSBmaWxlIGJ5IGNhcHR1cmluZyBpdHMgY3VycmVudCBzaXplIGFu
ZCBtb2RpZmljYXRpb24gdGltZS4KKyAgICAvLyBUaGUgbW9kaWZpY2F0aW9uIHRpbWUgd2lsbCBi
ZSB1c2VkIHRvIHZlcmlmeSBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIG9yIG5vdCwgd2hl
biB0aGUgdW5kZXJseWluZyBkYXRhIGFyZSBhY2Nlc3NlZC4KKyAgICBsb25nIGxvbmcgc25hcHNo
b3RTaXplOworICAgIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7CisgICAgaWYgKG1f
c25hcHNob3RDYXB0dXJlZCkgeworICAgICAgICBzbmFwc2hvdFNpemUgPSBtX3NuYXBzaG90U2l6
ZTsKKyAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1lID0gbV9zbmFwc2hvdE1vZGlmaWNh
dGlvblRpbWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgZmFpbCB0byByZXRyaWV2
ZSB0aGUgc2l6ZSBvciBtb2RpZmljYXRpb24gdGltZSwgcHJvYmFibHkgZHVlIHRvIHRoYXQgdGhl
IGZpbGUgaGFzIGJlZW4gZGVsZXRlZCwgYW4gZW1wdHkgYmxvYiB3aWxsIGJlIHJldHVybmVkLgor
ICAgICAgICB0aW1lX3QgbW9kaWZpY2F0aW9uVGltZTsKKyAgICAgICAgaWYgKCFnZXRGaWxlU2l6
ZShtX3BhdGgsIHNuYXBzaG90U2l6ZSkgfHwgIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKG1fcGF0
aCwgbW9kaWZpY2F0aW9uVGltZSkpIHsKKyAgICAgICAgICAgIHNuYXBzaG90U2l6ZSA9IDA7Cisg
ICAgICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSAwOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IG1vZGlmaWNhdGlvblRpbWU7
CisgICAgfQorCisgICAgLy8gQ2xhbXAgdGhlIHJhbmdlIGlmIGl0IGV4Y2VlZHMgdGhlIHNpemUg
bGltaXQuCisgICAgaWYgKHN0YXJ0IDwgMCkKKyAgICAgICAgc3RhcnQgPSAwOworICAgIGlmIChs
ZW5ndGggPCAwKQorICAgICAgICBsZW5ndGggPSAwOworCisgICAgaWYgKHN0YXJ0ID4gc25hcHNo
b3RTaXplKSB7CisgICAgICAgIHN0YXJ0ID0gMDsKKyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICB9
IGVsc2UgaWYgKHN0YXJ0ICsgbGVuZ3RoID4gc25hcHNob3RTaXplKQorICAgICAgICBsZW5ndGgg
PSBzbmFwc2hvdFNpemUgLSBzdGFydDsKKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYiht
X3BhdGgsIG1fc3RhcnQgKyBzdGFydCwgbGVuZ3RoLCBzbmFwc2hvdFNpemUsIHNuYXBzaG90TW9k
aWZpY2F0aW9uVGltZSkpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iLmggYi9XZWJDb3JlL2h0bWwvQmxvYi5oCmluZGV4
IGI5MTBlOGYuLjA3ZTYxYWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmgKKysrIGIv
V2ViQ29yZS9odG1sL0Jsb2IuaApAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8dGltZS5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KIApAQCAtNDAsNiArNDEsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBCbG9i
IDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYj4gewogcHVibGljOgorI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQorICAgIHN0YXRpYyBjb25zdCBpbnQgdG9FbmRPZkZpbGUgPSAtMTsKKyAgICBzdGF0aWMg
Y29uc3QgZG91YmxlIGRvTm90Q2hlY2tGaWxlQ2hhbmdlID0gMDsKKyNlbmRpZgorCiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihwYXRoKSk7CkBAIC00NywxNCArNTMsNDUg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+QmxvYigpIHsgfQogCisjaWYgRU5BQkxFKEJMT0Jf
U0xJQ0UpCisgICAgUGFzc1JlZlB0cjxCbG9iPiBzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcg
bG9uZyBsZW5ndGgpIGNvbnN0OworI2VuZGlmCisKICAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBj
b25zdCB7IHJldHVybiBtX3BhdGg7IH0KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNv
bnN0OworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIGxvbmcgbG9uZyBzdGFydCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhcnQ7IH0KKyAgICBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9sZW5ndGg7IH0KKyAgICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOyB9CisjZW5kaWYKIAogcHJvdGVjdGVkOgog
ICAgIEJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKTsKIAogcHJpdmF0ZToKKyNpZiBFTkFCTEUoQkxP
Ql9TTElDRSkKKyAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBs
b25nIGxvbmcgbGVuZ3RoLCBsb25nIGxvbmcgc25hcHNob3RTaXplLCBkb3VibGUgc25hcHNob3RN
b2RpZmljYXRpb25UaW1lKTsKKyNlbmRpZgorCisgICAgLy8gVGhlIHVuZGVybHlpbmcgcGF0aCBv
ZiB0aGUgZmlsZS1iYXNlZCBibG9iLiAKICAgICBTdHJpbmcgbV9wYXRoOworCisjaWYgRU5BQkxF
KEJMT0JfU0xJQ0UpCisgICAgLy8gVGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBmaWxlLWJh
c2VkIGJsb2IuCisgICAgbG9uZyBsb25nIG1fc3RhcnQ7CisKKyAgICAvLyBUaGUgbGVuZ3RoIG9m
IHRoZSBmaWxlLWJhc2VkIGJsb2IuIFRoZSB2YWx1ZSBvZiAtMSBtZWFucyB0byB0aGUgZW5kIG9m
IHRoZSBmaWxlLgorICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsKKworICAgIC8vIEEgZmxhZyB0byB0
ZWxsIGlmIGEgc25hcHNob3QgaGFzIGJlZW4gY2FwdHVyZWQuCisgICAgYm9vbCBtX3NuYXBzaG90
Q2FwdHVyZWQ7CisKKyAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25hcHNob3Qg
aXMgY2FwdHVyZWQuIEl0IGNhbiBiZSAwIGlmIHRoZSBmaWxlIGlzIGVtcHR5LgorICAgIGxvbmcg
bG9uZyBtX3NuYXBzaG90U2l6ZTsKKworICAgIC8vIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1l
IG9mIHRoZSBmaWxlIHdoZW4gYSBzbmFwc2hvdCBpcyBjYXB0dXJlZC4gVGhlIHZhbHVlIG9mIDAg
YWxzbyBtZWFucyB0aGF0IHRoZSBzbmFwc2hvdCBpcyBub3QgY2FwdHVyZWQuCisgICAgZG91Ymxl
IG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYi5pZGwgYi9XZWJDb3JlL2h0
bWwvQmxvYi5pZGwKaW5kZXggNTczYmUzNS4uOGRiNjA2NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0Jsb2IuaWRsCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9iLmlkbApAQCAtMzIsNiArMzIsMTAg
QEAgbW9kdWxlIGh0bWwgewogCiAgICAgaW50ZXJmYWNlIEJsb2IgewogICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsb25nIHNpemU7CisgICAgICAgIAorI2lmIGRlZmlu
ZWQoRU5BQkxFX0JMT0JfU0xJQ0UpICYmIEVOQUJMRV9CTE9CX1NMSUNFCisgICAgICAgIEJsb2Ig
c2xpY2UoaW4gbG9uZyBsb25nIHN0YXJ0LCBpbiBsb25nIGxvbmcgbGVuZ3RoKTsKKyNlbmRpZgog
ICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0
YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCmluZGV4IGFmM2I3
ZjAuLmE4NDU2YjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0
YS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcApAQCAtMjEs
NiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvcm1EYXRhLmgiCiAK
KyNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkNocm9t
ZUNsaWVudC5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKQEAgLTEwOCw3ICsxMDksMTEgQEAg
UGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmRlZXBDb3B5KCkgY29uc3QKICAgICAgICAg
ICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2RhdGEp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZvcm1EYXRhRWxlbWVudDo6ZW5j
b2RlZEZpbGU6CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgICAgICAgICBmb3JtRGF0YS0+
bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUubV9maWxlbmFtZSwgZS5tX2ZpbGVT
dGFydCwgZS5tX2ZpbGVMZW5ndGgsIGUubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lLCBl
Lm1fc2hvdWxkR2VuZXJhdGVGaWxlKSk7CisjZWxzZQogICAgICAgICAgICAgZm9ybURhdGEtPm1f
ZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZmlsZW5hbWUsIGUubV9zaG91bGRH
ZW5lcmF0ZUZpbGUpKTsKKyNlbmRpZgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xMjcsOSArMTMyLDIwIEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZERhdGEoY29uc3Qg
dm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCiAKIHZvaWQgRm9ybURhdGE6OmFwcGVuZEZpbGUoY29u
c3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpCiB7CisjaWYgRU5B
QkxFKEJMT0JfU0xJQ0UpCisgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGZp
bGVuYW1lLCAwLCBCbG9iOjp0b0VuZE9mRmlsZSwgQmxvYjo6ZG9Ob3RDaGVja0ZpbGVDaGFuZ2Us
IHNob3VsZEdlbmVyYXRlRmlsZSkpOworI2Vsc2UKICAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3Jt
RGF0YUVsZW1lbnQoZmlsZW5hbWUsIHNob3VsZEdlbmVyYXRlRmlsZSkpOworI2VuZGlmCiB9CiAK
KyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKK3ZvaWQgRm9ybURhdGE6OmFwcGVuZEZpbGVSYW5nZShj
b25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgs
IGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxl
KQoreworICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChmaWxlbmFtZSwgc3Rh
cnQsIGxlbmd0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lLCBzaG91bGRHZW5lcmF0ZUZpbGUp
KTsKK30KKyNlbmRpZgorCiB2b2lkIEZvcm1EYXRhOjpmbGF0dGVuKFZlY3RvcjxjaGFyPiYgZGF0
YSkgY29uc3QKIHsKICAgICAvLyBDb25jYXRlbmF0ZSBhbGwgdGhlIGJ5dGUgYXJyYXlzLCBidXQg
b21pdCBhbnkgZmlsZXMuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCmluZGV4IDcyNzhm
MmUuLjQ4ZTUxNTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0
YS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCkBAIC0zMiwxMSAr
MzIsMjAgQEAgY2xhc3MgRm9ybURhdGFFbGVtZW50IHsKIHB1YmxpYzoKICAgICBGb3JtRGF0YUVs
ZW1lbnQoKSA6IG1fdHlwZShkYXRhKSB7IH0KICAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgVmVj
dG9yPGNoYXI+JiBhcnJheSkgOiBtX3R5cGUoZGF0YSksIG1fZGF0YShhcnJheSkgeyB9CisjaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgRm9ybURhdGFFbGVtZW50KGNvbnN0IFN0cmluZyYgZmls
ZW5hbWUsIGxvbmcgbG9uZyBmaWxlU3RhcnQsIGxvbmcgbG9uZyBmaWxlTGVuZ3RoLCBkb3VibGUg
ZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpIDog
bV90eXBlKGVuY29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFtZSksIG1fZmlsZVN0YXJ0KGZp
bGVTdGFydCksIG1fZmlsZUxlbmd0aChmaWxlTGVuZ3RoKSwgbV9leHBlY3RlZEZpbGVNb2RpZmlj
YXRpb25UaW1lKGV4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUpLCBtX3Nob3VsZEdlbmVyYXRl
RmlsZShzaG91bGRHZW5lcmF0ZUZpbGUpIHsgfQorI2Vsc2UKICAgICBGb3JtRGF0YUVsZW1lbnQo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpIDogbV90eXBl
KGVuY29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFtZSksIG1fc2hvdWxkR2VuZXJhdGVGaWxl
KHNob3VsZEdlbmVyYXRlRmlsZSkgeyB9CisjZW5kaWYKIAogICAgIGVudW0geyBkYXRhLCBlbmNv
ZGVkRmlsZSB9IG1fdHlwZTsKICAgICBWZWN0b3I8Y2hhcj4gbV9kYXRhOwogICAgIFN0cmluZyBt
X2ZpbGVuYW1lOworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIGxvbmcgbG9uZyBtX2ZpbGVT
dGFydDsKKyAgICBsb25nIGxvbmcgbV9maWxlTGVuZ3RoOworICAgIGRvdWJsZSBtX2V4cGVjdGVk
RmlsZU1vZGlmaWNhdGlvblRpbWU7CisjZW5kaWYKICAgICBTdHJpbmcgbV9nZW5lcmF0ZWRGaWxl
bmFtZTsKICAgICBib29sIG1fc2hvdWxkR2VuZXJhdGVGaWxlOwogfTsKQEAgLTUwLDcgKzU5LDEx
IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGFFbGVtZW50JiBhLCBjb25z
dCBGb3JtRGF0YUVsZW1lbnQmIGIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoYS5t
X2RhdGEgIT0gYi5tX2RhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNpZiBFTkFCTEUoQkxP
Ql9TTElDRSkKKyAgICBpZiAoYS5tX2ZpbGVuYW1lICE9IGIubV9maWxlbmFtZSB8fCBhLm1fZmls
ZVN0YXJ0ICE9IGIubV9maWxlU3RhcnQgfHwgYS5tX2ZpbGVMZW5ndGggIT0gYi5tX2ZpbGVMZW5n
dGggfHwgYS5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUgIT0gYi5tX2V4cGVjdGVkRmls
ZU1vZGlmaWNhdGlvblRpbWUpCisjZWxzZQogICAgIGlmIChhLm1fZmlsZW5hbWUgIT0gYi5tX2Zp
bGVuYW1lKQorI2VuZGlmCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVl
OwpAQCAtNzMsNiArODYsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhcHBlbmREYXRhKGNv
bnN0IHZvaWQqIGRhdGEsIHNpemVfdCk7CiAgICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOworI2lmIEVOQUJM
RShCTE9CX1NMSUNFKQorICAgIHZvaWQgYXBwZW5kRmlsZVJhbmdlKGNvbnN0IFN0cmluZyYgZmls
ZW5hbWUsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4cGVjdGVk
TW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CisjZW5k
aWYKIAogICAgIHZvaWQgZmxhdHRlbihWZWN0b3I8Y2hhcj4mKSBjb25zdDsgLy8gb21pdHMgZmls
ZXMKICAgICBTdHJpbmcgZmxhdHRlblRvU3RyaW5nKCkgY29uc3Q7IC8vIG9taXRzIGZpbGVzCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFj
Lm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQpp
bmRleCA4YWE5YTZkLi41ZThjM2ZmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgImNv
bmZpZy5oIgogI2ltcG9ydCAiRm9ybURhdGFTdHJlYW1NYWMuaCIKIAorI2ltcG9ydCAiQmxvYi5o
IgogI2ltcG9ydCAiQ1N0cmluZy5oIgogI2ltcG9ydCAiRmlsZVN5c3RlbS5oIgogI2ltcG9ydCAi
Rm9ybURhdGEuaCIKQEAgLTEyNSw2ICsxMjYsOSBAQCBzdHJ1Y3QgRm9ybVN0cmVhbUZpZWxkcyB7
CiAgICAgU2NoZWR1bGVQYWlySGFzaFNldCBzY2hlZHVsZWRSdW5Mb29wUGFpcnM7CiAgICAgVmVj
dG9yPEZvcm1EYXRhRWxlbWVudD4gcmVtYWluaW5nRWxlbWVudHM7IC8vIGluIHJldmVyc2Ugb3Jk
ZXIKICAgICBDRlJlYWRTdHJlYW1SZWYgY3VycmVudFN0cmVhbTsKKyNpZiBFTkFCTEUoQkxPQl9T
TElDRSkKKyAgICBsb25nIGxvbmcgY3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoOworI2VuZGlmCiAg
ICAgY2hhciogY3VycmVudERhdGE7CiAgICAgQ0ZSZWFkU3RyZWFtUmVmIGZvcm1TdHJlYW07CiAg
ICAgdW5zaWduZWQgbG9uZyBsb25nIHN0cmVhbUxlbmd0aDsKQEAgLTE0NSwxMiArMTQ5LDEzIEBA
IHN0YXRpYyB2b2lkIGNsb3NlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQog
ICAgIH0KIH0KIAotc3RhdGljIHZvaWQgYWR2YW5jZUN1cnJlbnRTdHJlYW0oRm9ybVN0cmVhbUZp
ZWxkcyAqZm9ybSkKKy8vIFJldHVybiBmYWxzZSBpZiB3ZSBjYW5ub3QgYWR2YW5jZSB0aGUgc3Ry
ZWFtLiBDdXJyZW50bHkgdGhlIG9ubHkgcG9zc2libGUgZmFpbHVyZSBpcyB0aGF0IHRoZSB1bmRl
cmx5aW5nIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSBGaWxlLnNsaWNlLiAKK3N0YXRpYyBi
b29sIGFkdmFuY2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0pCiB7CiAgICAg
Y2xvc2VDdXJyZW50U3RyZWFtKGZvcm0pOwogCiAgICAgaWYgKGZvcm0tPnJlbWFpbmluZ0VsZW1l
bnRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIC8vIENyZWF0ZSB0aGUgbmV3IHN0cmVhbS4KICAgICBGb3JtRGF0YUVsZW1lbnQmIG5leHRJ
bnB1dCA9IGZvcm0tPnJlbWFpbmluZ0VsZW1lbnRzLmxhc3QoKTsKQEAgLTE2MCwxMCArMTY1LDI2
IEBAIHN0YXRpYyB2b2lkIGFkdmFuY2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZv
cm0pCiAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBDRlJlYWRTdHJlYW1DcmVhdGVXaXRo
Qnl0ZXNOb0NvcHkoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEpLCBzaXpl
LCBrQ0ZBbGxvY2F0b3JOdWxsKTsKICAgICAgICAgZm9ybS0+Y3VycmVudERhdGEgPSBkYXRhOwog
ICAgIH0gZWxzZSB7CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgICAgIC8vIENoZWNrIGlm
IHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgb3Igbm90IGlmIHJlcXVpcmVkLgorICAgICAgICBp
ZiAobmV4dElucHV0Lm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSAhPSBCbG9iOjpkb05v
dENoZWNrRmlsZUNoYW5nZSkgeworICAgICAgICAgICAgdGltZV90IGZpbGVNb2RpZmljYXRpb25U
aW1lOworICAgICAgICAgICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShuZXh0SW5wdXQu
bV9maWxlbmFtZSwgZmlsZU1vZGlmaWNhdGlvblRpbWUpIHx8IGZpbGVNb2RpZmljYXRpb25UaW1l
ICE9IHN0YXRpY19jYXN0PHRpbWVfdD4obmV4dElucHV0Lm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0
aW9uVGltZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisjZW5k
aWYKKwogICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBuZXh0SW5wdXQubV9zaG91bGRHZW5l
cmF0ZUZpbGUgPyBuZXh0SW5wdXQubV9nZW5lcmF0ZWRGaWxlbmFtZSA6IG5leHRJbnB1dC5tX2Zp
bGVuYW1lOwogICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZpbGVuYW1lKEFkb3B0Q0Ys
IHBhdGguY3JlYXRlQ0ZTdHJpbmcoKSk7CiAgICAgICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZmls
ZVVSTChBZG9wdENGLCBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBmaWxlbmFtZS5n
ZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIEZBTFNFKSk7CiAgICAgICAgIGZvcm0tPmN1cnJl
bnRTdHJlYW0gPSBDRlJlYWRTdHJlYW1DcmVhdGVXaXRoRmlsZSgwLCBmaWxlVVJMLmdldCgpKTsK
KyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICAgICAgaWYgKG5leHRJbnB1dC5tX2ZpbGVTdGFy
dCA+IDApIHsKKyAgICAgICAgICAgIENGTnVtYmVyUmVmIHBvc2l0aW9uID0gQ0ZOdW1iZXJDcmVh
dGUoMCwga0NGTnVtYmVyTG9uZ0xvbmdUeXBlLCAmbmV4dElucHV0Lm1fZmlsZVN0YXJ0KTsKKyAg
ICAgICAgICAgIENGUmVhZFN0cmVhbVNldFByb3BlcnR5KGZvcm0tPmN1cnJlbnRTdHJlYW0sIGtD
RlN0cmVhbVByb3BlcnR5RmlsZUN1cnJlbnRPZmZzZXQsIHBvc2l0aW9uKTsKKyAgICAgICAgfQor
ICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBuZXh0SW5wdXQubV9maWxl
TGVuZ3RoOworI2VuZGlmCiAgICAgfQogICAgIGZvcm0tPnJlbWFpbmluZ0VsZW1lbnRzLnJlbW92
ZUxhc3QoKTsKIApAQCAtMTc2LDE2ICsxOTcsMjAgQEAgc3RhdGljIHZvaWQgYWR2YW5jZUN1cnJl
bnRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKICAgICBTY2hlZHVsZVBhaXJIYXNoU2V0
OjppdGVyYXRvciBlbmQgPSBmb3JtLT5zY2hlZHVsZWRSdW5Mb29wUGFpcnMuZW5kKCk7CiAgICAg
Zm9yIChTY2hlZHVsZVBhaXJIYXNoU2V0OjppdGVyYXRvciBpdCA9IGZvcm0tPnNjaGVkdWxlZFJ1
bkxvb3BQYWlycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIENGUmVhZFN0cmVh
bVNjaGVkdWxlV2l0aFJ1bkxvb3AoZm9ybS0+Y3VycmVudFN0cmVhbSwgKCppdCktPnJ1bkxvb3Ao
KSwgKCppdCktPm1vZGUoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQg
b3Blbk5leHRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyogZm9ybSkKK3N0YXRpYyBib29sIG9wZW5O
ZXh0U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0pCiB7CiAgICAgLy8gU2tpcCBvdmVyIGFu
eSBzdHJlYW1zIHdlIGNhbid0IG9wZW4uCi0gICAgLy8gRm9yIHNvbWUgcHVycG9zZXMgd2UgbWln
aHQgd2FudCB0byByZXR1cm4gYW4gZXJyb3IsIGJ1dCB0aGUgY3VycmVudCBOU1VSTENvbm5lY3Rp
b24KLSAgICAvLyBjYW4ndCByZWFsbHkgZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggYW4gZXJyb3Ig
YXQgdGhpcyBwb2ludCwgc28gdGhpcyBpcyBiZXR0ZXIuCi0gICAgYWR2YW5jZUN1cnJlbnRTdHJl
YW0oZm9ybSk7Ci0gICAgd2hpbGUgKGZvcm0tPmN1cnJlbnRTdHJlYW0gJiYgIUNGUmVhZFN0cmVh
bU9wZW4oZm9ybS0+Y3VycmVudFN0cmVhbSkpCi0gICAgICAgIGFkdmFuY2VDdXJyZW50U3RyZWFt
KGZvcm0pOworICAgIGlmICghYWR2YW5jZUN1cnJlbnRTdHJlYW0oZm9ybSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB3aGlsZSAoZm9ybS0+Y3VycmVudFN0cmVhbSAmJiAhQ0ZSZWFkU3Ry
ZWFtT3Blbihmb3JtLT5jdXJyZW50U3RyZWFtKSkgeworICAgICAgICBpZiAoIWFkdmFuY2VDdXJy
ZW50U3RyZWFtKGZvcm0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIHZvaWQqIGZvcm1DcmVhdGUoQ0ZSZWFkU3RyZWFtUmVm
IHN0cmVhbSwgdm9pZCogY29udGV4dCkKQEAgLTE5NCw2ICsyMTksOSBAQCBzdGF0aWMgdm9pZCog
Zm9ybUNyZWF0ZShDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCB2b2lkKiBjb250ZXh0KQogCiAgICAg
Rm9ybVN0cmVhbUZpZWxkcyogbmV3SW5mbyA9IG5ldyBGb3JtU3RyZWFtRmllbGRzOwogICAgIG5l
d0luZm8tPmN1cnJlbnRTdHJlYW0gPSBOVUxMOworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAg
IG5ld0luZm8tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IEJsb2I6OnRvRW5kT2ZGaWxlOwor
I2VuZGlmCiAgICAgbmV3SW5mby0+Y3VycmVudERhdGEgPSAwOwogICAgIG5ld0luZm8tPmZvcm1T
dHJlYW0gPSBzdHJlYW07IC8vIERvbid0IHJldGFpbi4gVGhhdCB3b3VsZCBjcmVhdGUgYSByZWZl
cmVuY2UgY3ljbGUuCiAgICAgbmV3SW5mby0+c3RyZWFtTGVuZ3RoID0gZm9ybUNvbnRleHQtPnN0
cmVhbUxlbmd0aDsKQEAgLTIyNiwxMSArMjU0LDExIEBAIHN0YXRpYyBCb29sZWFuIGZvcm1PcGVu
KENGUmVhZFN0cmVhbVJlZiwgQ0ZTdHJlYW1FcnJvciogZXJyb3IsIEJvb2xlYW4qIG9wZW5Db21w
CiB7CiAgICAgRm9ybVN0cmVhbUZpZWxkcyogZm9ybSA9IHN0YXRpY19jYXN0PEZvcm1TdHJlYW1G
aWVsZHMqPihjb250ZXh0KTsKIAotICAgIG9wZW5OZXh0U3RyZWFtKGZvcm0pOworICAgIGJvb2wg
b3BlbmVkID0gb3Blbk5leHRTdHJlYW0oZm9ybSk7CiAKLSAgICAqb3BlbkNvbXBsZXRlID0gVFJV
RTsKLSAgICBlcnJvci0+ZXJyb3IgPSAwOwotICAgIHJldHVybiBUUlVFOworICAgICpvcGVuQ29t
cGxldGUgPSBvcGVuZWQ7CisgICAgZXJyb3ItPmVycm9yID0gb3BlbmVkID8gMCA6IGZuZkVycjsK
KyAgICByZXR1cm4gb3BlbmVkOwogfQogCiBzdGF0aWMgQ0ZJbmRleCBmb3JtUmVhZChDRlJlYWRT
dHJlYW1SZWYgc3RyZWFtLCBVSW50OCogYnVmZmVyLCBDRkluZGV4IGJ1ZmZlckxlbmd0aCwgQ0ZT
dHJlYW1FcnJvciogZXJyb3IsIEJvb2xlYW4qIGF0RU9GLCB2b2lkKiBjb250ZXh0KQpAQCAtMjM4
LDcgKzI2NiwxMiBAQCBzdGF0aWMgQ0ZJbmRleCBmb3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3Ry
ZWFtLCBVSW50OCogYnVmZmVyLCBDRkluZGV4IGJ1ZmZlckxlbgogICAgIEZvcm1TdHJlYW1GaWVs
ZHMqIGZvcm0gPSBzdGF0aWNfY2FzdDxGb3JtU3RyZWFtRmllbGRzKj4oY29udGV4dCk7CiAKICAg
ICB3aGlsZSAoZm9ybS0+Y3VycmVudFN0cmVhbSkgewotICAgICAgICBDRkluZGV4IGJ5dGVzUmVh
ZCA9IENGUmVhZFN0cmVhbVJlYWQoZm9ybS0+Y3VycmVudFN0cmVhbSwgYnVmZmVyLCBidWZmZXJM
ZW5ndGgpOworICAgICAgICBDRkluZGV4IGJ5dGVzVG9SZWFkID0gYnVmZmVyTGVuZ3RoOworI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQorICAgICAgICBpZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdl
TGVuZ3RoICE9IEJsb2I6OnRvRW5kT2ZGaWxlICYmIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxl
bmd0aCA8IGJ5dGVzVG9SZWFkKQorICAgICAgICAgICAgYnl0ZXNUb1JlYWQgPSBzdGF0aWNfY2Fz
dDxDRkluZGV4Pihmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGgpOworI2VuZGlmCisgICAg
ICAgIENGSW5kZXggYnl0ZXNSZWFkID0gQ0ZSZWFkU3RyZWFtUmVhZChmb3JtLT5jdXJyZW50U3Ry
ZWFtLCBidWZmZXIsIGJ5dGVzVG9SZWFkKTsKICAgICAgICAgaWYgKGJ5dGVzUmVhZCA8IDApIHsK
ICAgICAgICAgICAgICplcnJvciA9IENGUmVhZFN0cmVhbUdldEVycm9yKGZvcm0tPmN1cnJlbnRT
dHJlYW0pOwogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMjQ3LDYgKzI4MCwxMCBAQCBzdGF0
aWMgQ0ZJbmRleCBmb3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBVSW50OCogYnVmZmVy
LCBDRkluZGV4IGJ1ZmZlckxlbgogICAgICAgICAgICAgZXJyb3ItPmVycm9yID0gMDsKICAgICAg
ICAgICAgICphdEVPRiA9IEZBTFNFOwogICAgICAgICAgICAgZm9ybS0+Ynl0ZXNTZW50ICs9IGJ5
dGVzUmVhZDsKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICAgICAgICAgIGlmIChmb3JtLT5j
dXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gQmxvYjo6dG9FbmRPZkZpbGUpCisgICAgICAgICAg
ICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoIC09IGJ5dGVzUmVhZDsKKyNlbmRp
ZgogCiAgICAgICAgICAgICBpZiAoIVJlc291cmNlSGFuZGxlOjpkaWRTZW5kQm9keURhdGFEZWxl
Z2F0ZUV4aXN0cygpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgaG93
IHRvIG9ubHkgZG8gdGhpcyB3aGVuIGEgUmVzb3VyY2VIYW5kbGVDbGllbnQgaXMgYXZhaWxhYmxl
LgpAQCAtMzU5LDYgKzM5NiwxMyBAQCB2b2lkIHNldEhUVFBCb2R5KE5TTXV0YWJsZVVSTFJlcXVl
c3QgKnJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhKQogICAgICAgICBpZiAo
ZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKQogICAgICAgICAgICAgbGVu
Z3RoICs9IGVsZW1lbnQubV9kYXRhLnNpemUoKTsKICAgICAgICAgZWxzZSB7CisjaWYgRU5BQkxF
KEJMT0JfU0xJQ0UpCisgICAgICAgICAgICAvLyBJZiB3ZSdyZSBzZW5kaW5nIHRoZSBmaWxlIHJh
bmdlLCB1c2UgdGhlIGV4aXN0aW5nIHJhbmdlIGxlbmd0aCBmb3Igbm93LiBXZSB3aWxsIGRldGVj
dCBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHJpZ2h0IGJlZm9yZSB3ZSByZWFkIHRoZSBm
aWxlIGFuZCBhYm9ydCB0aGUgb3BlcmF0aW9uIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgIGlm
IChlbGVtZW50Lm1fZmlsZUxlbmd0aCAhPSBCbG9iOjp0b0VuZE9mRmlsZSkgeworICAgICAgICAg
ICAgICAgIGxlbmd0aCArPSBlbGVtZW50Lm1fZmlsZUxlbmd0aDsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAgICAgbG9uZyBsb25nIGZp
bGVTaXplOwogICAgICAgICAgICAgaWYgKGdldEZpbGVTaXplKGVsZW1lbnQubV9zaG91bGRHZW5l
cmF0ZUZpbGUgPyBlbGVtZW50Lm1fZ2VuZXJhdGVkRmlsZW5hbWUgOiBlbGVtZW50Lm1fZmlsZW5h
bWUsIGZpbGVTaXplKSkKICAgICAgICAgICAgICAgICBsZW5ndGggKz0gZmlsZVNpemU7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAKaW5kZXggMzI4MThkZi4uZGE4ZDBlMSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcApAQCAtNDQ0LDcgKzQ0NCwxMSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKEJsb2Iq
IGJvZHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHNl
dCBhIENvbnRlbnQtVHlwZSBpZiBvbmUgaXMgbm90IHNldC4KICAgICAgICAgLy8gRklYTUU6IGFk
ZCBzdXBwb3J0IGZvciB1cGxvYWRpbmcgYnVuZGxlcy4KICAgICAgICAgbV9yZXF1ZXN0RW50aXR5
Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGUoKTsKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICAg
ICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZVJhbmdlKGJvZHktPnBhdGgoKSwgYm9k
eS0+c3RhcnQoKSwgYm9keS0+bGVuZ3RoKCksIGJvZHktPm1vZGlmaWNhdGlvblRpbWUoKSk7Cisj
ZWxzZQogICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlKGJvZHktPnBhdGgo
KSwgZmFsc2UpOworI2VuZGlmCiAgICAgfQogCiAgICAgY3JlYXRlUmVxdWVzdChlYyk7CmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwppbmRleCAxMmFlY2MyLi5hZTA1YWE3IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBA
QAorMjAxMC0wMi0yNCAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQmxvYi5zbGljZSBzdXBwb3J0
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI5OTMK
KworICAgICAgICBBZGQgRU5BQkxFX0JMT0JfU0xJQ0UgZmVhdHVyZSBkZWZpbmUuCisKKyAgICAg
ICAgKiBmZWF0dXJlcy5neXBpOgorCiAyMDA5LTAyLTIyICBBZGFtIExhbmdsZXkgIDxhZ2xAZ29v
Z2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaSBiL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJl
cy5neXBpCmluZGV4IDE3NjY1OTQuLmM5YzJmNGYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9mZWF0dXJlcy5neXBpCisrKyBiL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCkBAIC00
MCw2ICs0MCw3IEBACiAgICAgICAjIGZlYXR1cmVzX292ZXJyaWRlLmd5cGkgaW5saW5lIGRvY3Vt
ZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy4KICAgICAgICdmZWF0dXJlX2RlZmluZXMlJzogWwog
ICAgICAgICAnRU5BQkxFXzNEX0NBTlZBUz0wJywKKyAgICAgICAgJ0VOQUJMRV9CTE9CX1NMSUNF
PTAnLAogICAgICAgICAnRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HPTEnLAogICAgICAgICAnRU5B
QkxFX0RBVEFCQVNFPTEnLAogICAgICAgICAnRU5BQkxFX0RBVEFHUklEPTAnLApkaWZmIC0tZ2l0
IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA3YmRm
NGI2Li40YjE5MWE0IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9XZWJL
aXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEwLTAyLTIzICBKaWFuIExpICA8
amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBCbG9iLnNsaWNlIHN1cHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjk5MworCisgICAgICAgIEFkZCBFTkFCTEVfQkxP
Ql9TTElDRSBmZWF0dXJlIGRlZmluZS4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0ZlYXR1
cmVEZWZpbmVzLnhjY29uZmlnOgorCiAyMDEwLTAyLTIyICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5m
cmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCmRp
ZmYgLS1naXQgYS9XZWJLaXQvbWFjL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29u
ZmlnIGIvV2ViS2l0L21hYy9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpp
bmRleCA0YzRlMTkzLi5lYjk2YzI3IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0NvbmZpZ3VyYXRp
b25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCisrKyBiL1dlYktpdC9tYWMvQ29uZmlndXJhdGlv
bnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKQEAgLTQxLDYgKzQxLDcgQEAgRU5BQkxFXzNEX1JF
TkRFUklOR18xMDUwID0gRU5BQkxFXzNEX1JFTkRFUklORzsKIEVOQUJMRV8zRF9SRU5ERVJJTkdf
MTA2MCA9IEVOQUJMRV8zRF9SRU5ERVJJTkc7CiBFTkFCTEVfM0RfUkVOREVSSU5HXzEwNzAgPSBF
TkFCTEVfM0RfUkVOREVSSU5HOwogCitFTkFCTEVfQkxPQl9TTElDRSA9IEVOQUJMRV9CTE9CX1NM
SUNFOwogRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HID0gRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5H
OwogRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTiA9IEVOQUJMRV9DTElFTlRfQkFTRURf
R0VPTE9DQVRJT047CiBFTkFCTEVfREFUQUJBU0UgPSBFTkFCTEVfREFUQUJBU0U7CkBAIC03NCw0
ICs3NSw0IEBAIEVOQUJMRV9YSFRNTE1QID0gOwogRU5BQkxFX1hQQVRIID0gRU5BQkxFX1hQQVRI
OwogRU5BQkxFX1hTTFQgPSBFTkFCTEVfWFNMVDsKIAotRkVBVFVSRV9ERUZJTkVTID0gJChFTkFC
TEVfM0RfQ0FOVkFTKSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5BQkxFX0NIQU5ORUxfTUVT
U0FHSU5HKSAkKEVOQUJMRV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04pICQoRU5BQkxFX0RBVEFC
QVNFKSAkKEVOQUJMRV9EQVRBR1JJRCkgJChFTkFCTEVfREFUQUxJU1QpICQoRU5BQkxFX0RPTV9T
VE9SQUdFKSAkKEVOQUJMRV9FVkVOVFNPVVJDRSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVf
R0VPTE9DQVRJT04pICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRB
QkFTRSkgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVO
QUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQo
RU5BQkxFX1JVQlkpICQoRU5BQkxFX1NBTkRCT1gpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAk
KEVOQUJMRV9TVkcpICQoRU5BQkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFH
RSkgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQo
RU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklE
RU8pICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMp
ICQoRU5BQkxFX1hIVE1MTVApICQoRU5BQkxFX1hQQVRIKSAkKEVOQUJMRV9YU0xUKTsKK0ZFQVRV
UkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX0NBTlZBUykgJChFTkFCTEVfM0RfUkVOREVSSU5HKSAk
KEVOQUJMRV9CTE9CX1NMSUNFKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVf
Q0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9EQVRBQkFTRSkgJChFTkFCTEVfREFU
QUdSSUQpICQoRU5BQkxFX0RBVEFMSVNUKSAkKEVOQUJMRV9ET01fU1RPUkFHRSkgJChFTkFCTEVf
RVZFTlRTT1VSQ0UpICQoRU5BQkxFX0ZJTFRFUlMpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVO
QUJMRV9JQ09OREFUQUJBU0UpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0pB
VkFTQ1JJUFRfREVCVUdHRVIpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTk9USUZJQ0FUSU9O
UykgJChFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSAkKEVOQUJMRV9SVUJZKSAkKEVO
QUJMRV9TQU5EQk9YKSAkKEVOQUJMRV9TSEFSRURfV09SS0VSUykgJChFTkFCTEVfU1ZHKSAkKEVO
QUJMRV9TVkdfQU5JTUFUSU9OKSAkKEVOQUJMRV9TVkdfQVNfSU1BR0UpICQoRU5BQkxFX1NWR19E
T01fT0JKQ19CSU5ESU5HUykgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9TVkdfRk9SRUlH
Tl9PQkpFQ1QpICQoRU5BQkxFX1NWR19VU0UpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9XRUJf
U09DS0VUUykgJChFTkFCTEVfV01MKSAkKEVOQUJMRV9XT1JLRVJTKSAkKEVOQUJMRV9YSFRNTE1Q
KSAkKEVOQUJMRV9YUEFUSCkgJChFTkFCTEVfWFNMVCk7CmRpZmYgLS1naXQgYS9XZWJLaXRMaWJy
YXJpZXMvQ2hhbmdlTG9nIGIvV2ViS2l0TGlicmFyaWVzL0NoYW5nZUxvZwppbmRleCA2MjA1M2Qx
Li43YjgyYTM4IDEwMDY0NAotLS0gYS9XZWJLaXRMaWJyYXJpZXMvQ2hhbmdlTG9nCisrKyBiL1dl
YktpdExpYnJhcmllcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wMi0yNCAgSmlh
biBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQmxvYi5zbGljZSBzdXBwb3J0LgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI5OTMKKworICAgICAgICBBZGQgRU5B
QkxFX0JMT0JfU0xJQ0UgZmVhdHVyZSBkZWZpbmUuCisKKyAgICAgICAgKiB3aW4vdG9vbHMvdnNw
cm9wcy9GZWF0dXJlRGVmaW5lcy52c3Byb3BzOgorICAgICAgICAqIHdpbi90b29scy92c3Byb3Bz
L0ZlYXR1cmVEZWZpbmVzQ2Fpcm8udnNwcm9wczoKKwogMjAxMC0wMi0xOSAgTWFjaWVqIFN0YWNo
b3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmlu
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0TGlicmFyaWVzL3dpbi90b29scy92c3Byb3BzL0ZlYXR1cmVE
ZWZpbmVzLnZzcHJvcHMgYi9XZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzL3ZzcHJvcHMvRmVhdHVy
ZURlZmluZXMudnNwcm9wcwppbmRleCBmN2E3NTRkLi40NWRhY2JjIDEwMDY0NAotLS0gYS9XZWJL
aXRMaWJyYXJpZXMvd2luL3Rvb2xzL3ZzcHJvcHMvRmVhdHVyZURlZmluZXMudnNwcm9wcworKysg
Yi9XZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzL3ZzcHJvcHMvRmVhdHVyZURlZmluZXMudnNwcm9w
cwpAQCAtOSw3ICs5LDcgQEAKIAk+CiAgIDxUb29sCiAJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
Ci0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIkKEVOQUJMRV8zRF9DQU5WQVMpOyQoRU5BQkxF
XzNEX1JFTkRFUklORyk7JChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpOyQoRU5BQkxFX0NMSUVO
VF9CQVNFRF9HRU9MT0NBVElPTik7JChFTkFCTEVfREFUQUJBU0UpOyQoRU5BQkxFX0RBVEFHUklE
KTskKEVOQUJMRV9EQVRBTElTVCk7JChFTkFCTEVfRE9NX1NUT1JBR0UpOyQoRU5BQkxFX0VWRU5U
U09VUkNFKTskKEVOQUJMRV9GSUxURVJTKTskKEVOQUJMRV9HRU9MT0NBVElPTik7JChFTkFCTEVf
SUNPTkRBVEFCQVNFKTskKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKTskKEVOQUJMRV9KQVZBU0NS
SVBUX0RFQlVHR0VSKTskKEVOQUJMRV9NQVRITUwpOyQoRU5BQkxFX05PVElGSUNBVElPTlMpOyQo
RU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUyk7JChFTkFCTEVfUlVCWSk7JChFTkFCTEVf
U0FOREJPWCk7JChFTkFCTEVfU0hBUkVEX1dPUktFUlMpOyQoRU5BQkxFX1NWRyk7JChFTkFCTEVf
U1ZHX0FOSU1BVElPTik7JChFTkFCTEVfU1ZHX0FTX0lNQUdFKTskKEVOQUJMRV9TVkdfRE9NX09C
SkNfQklORElOR1MpOyQoRU5BQkxFX1NWR19GT05UUyk7JChFTkFCTEVfU1ZHX0ZPUkVJR05fT0JK
RUNUKTskKEVOQUJMRV9TVkdfVVNFKTskKEVOQUJMRV9WSURFTyk7JChFTkFCTEVfV0VCX1NPQ0tF
VFMpOyQoRU5BQkxFX1dNTCk7JChFTkFCTEVfV09SS0VSUyk7JChFTkFCTEVfWEhUTUxNUCk7JChF
TkFCTEVfWFBBVEgpOyQoRU5BQkxFX1hTTFQpIgorCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0i
JChFTkFCTEVfM0RfQ0FOVkFTKTskKEVOQUJMRV8zRF9SRU5ERVJJTkcpOyQoRU5BQkxFX0JMT0Jf
U0xJQ0UpOyQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKTskKEVOQUJMRV9DTElFTlRfQkFTRURf
R0VPTE9DQVRJT04pOyQoRU5BQkxFX0RBVEFCQVNFKTskKEVOQUJMRV9EQVRBR1JJRCk7JChFTkFC
TEVfREFUQUxJU1QpOyQoRU5BQkxFX0RPTV9TVE9SQUdFKTskKEVOQUJMRV9FVkVOVFNPVVJDRSk7
JChFTkFCTEVfRklMVEVSUyk7JChFTkFCTEVfR0VPTE9DQVRJT04pOyQoRU5BQkxFX0lDT05EQVRB
QkFTRSk7JChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSk7JChFTkFCTEVfSkFWQVNDUklQVF9ERUJV
R0dFUik7JChFTkFCTEVfTUFUSE1MKTskKEVOQUJMRV9OT1RJRklDQVRJT05TKTskKEVOQUJMRV9P
RkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpOyQoRU5BQkxFX1JVQlkpOyQoRU5BQkxFX1NBTkRCT1gp
OyQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKTskKEVOQUJMRV9TVkcpOyQoRU5BQkxFX1NWR19BTklN
QVRJT04pOyQoRU5BQkxFX1NWR19BU19JTUFHRSk7JChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJ
TkdTKTskKEVOQUJMRV9TVkdfRk9OVFMpOyQoRU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVCk7JChF
TkFCTEVfU1ZHX1VTRSk7JChFTkFCTEVfVklERU8pOyQoRU5BQkxFX1dFQl9TT0NLRVRTKTskKEVO
QUJMRV9XTUwpOyQoRU5BQkxFX1dPUktFUlMpOyQoRU5BQkxFX1hIVE1MTVApOyQoRU5BQkxFX1hQ
QVRIKTskKEVOQUJMRV9YU0xUKSIKIAkvPgogICA8VXNlck1hY3JvCiAJCU5hbWU9IkVOQUJMRV8z
RF9DQU5WQVMiCkBAIC0yMiw2ICsyMiwxMSBAQAogCQlQZXJmb3JtRW52aXJvbm1lbnRTZXQ9InRy
dWUiCiAJLz4KICAgPFVzZXJNYWNybworCQlOYW1lPSJFTkFCTEVfQkxPQl9TTElDRSIKKwkJVmFs
dWU9IiIKKwkJUGVyZm9ybUVudmlyb25tZW50U2V0PSJ0cnVlIgorCS8+CisgIDxVc2VyTWFjcm8K
IAkJTmFtZT0iRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HIgogCQlWYWx1ZT0iRU5BQkxFX0NIQU5O
RUxfTUVTU0FHSU5HIgogCQlQZXJmb3JtRW52aXJvbm1lbnRTZXQ9InRydWUiCmRpZmYgLS1naXQg
YS9XZWJLaXRMaWJyYXJpZXMvd2luL3Rvb2xzL3ZzcHJvcHMvRmVhdHVyZURlZmluZXNDYWlyby52
c3Byb3BzIGIvV2ViS2l0TGlicmFyaWVzL3dpbi90b29scy92c3Byb3BzL0ZlYXR1cmVEZWZpbmVz
Q2Fpcm8udnNwcm9wcwppbmRleCAxYzE2YTliLi5lNzM3ZmZhIDEwMDY0NAotLS0gYS9XZWJLaXRM
aWJyYXJpZXMvd2luL3Rvb2xzL3ZzcHJvcHMvRmVhdHVyZURlZmluZXNDYWlyby52c3Byb3BzCisr
KyBiL1dlYktpdExpYnJhcmllcy93aW4vdG9vbHMvdnNwcm9wcy9GZWF0dXJlRGVmaW5lc0NhaXJv
LnZzcHJvcHMKQEAgLTksNyArOSw3IEBACiAJPgogICA8VG9vbAogCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iJChFTkFCTEVfM0RfQ0FOVkFTKTsk
KEVOQUJMRV8zRF9SRU5ERVJJTkcpOyQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKTskKEVOQUJM
RV9DTElFTlRfQkFTRURfR0VPTE9DQVRJT04pOyQoRU5BQkxFX0RBVEFCQVNFKTskKEVOQUJMRV9E
QVRBR1JJRCk7JChFTkFCTEVfREFUQUxJU1QpOyQoRU5BQkxFX0RPTV9TVE9SQUdFKTskKEVOQUJM
RV9FVkVOVFNPVVJDRSk7JChFTkFCTEVfRklMVEVSUyk7JChFTkFCTEVfR0VPTE9DQVRJT04pOyQo
RU5BQkxFX0lDT05EQVRBQkFTRSk7JChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSk7JChFTkFCTEVf
SkFWQVNDUklQVF9ERUJVR0dFUik7JChFTkFCTEVfTUFUSE1MKTskKEVOQUJMRV9OT1RJRklDQVRJ
T05TKTskKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpOyQoRU5BQkxFX1NIQVJFRF9X
T1JLRVJTKTskKEVOQUJMRV9TVkcpOyQoRU5BQkxFX1NWR19BTklNQVRJT04pOyQoRU5BQkxFX1NW
R19BU19JTUFHRSk7JChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKTskKEVOQUJMRV9TVkdf
Rk9OVFMpOyQoRU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVCk7JChFTkFCTEVfU1ZHX1VTRSk7JChF
TkFCTEVfVklERU8pOyQoRU5BQkxFX1dFQl9TT0NLRVRTKTskKEVOQUJMRV9XTUwpOyQoRU5BQkxF
X1dPUktFUlMpOyQoRU5BQkxFX1hIVE1MTVApOyQoRU5BQkxFX1hQQVRIKTskKEVOQUJMRV9YU0xU
KSIKKwkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiQoRU5BQkxFXzNEX0NBTlZBUyk7JChFTkFC
TEVfM0RfUkVOREVSSU5HKTskKEVOQUJMRV9CTE9CX1NMSUNFKTskKEVOQUJMRV9DSEFOTkVMX01F
U1NBR0lORyk7JChFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKTskKEVOQUJMRV9EQVRB
QkFTRSk7JChFTkFCTEVfREFUQUdSSUQpOyQoRU5BQkxFX0RBVEFMSVNUKTskKEVOQUJMRV9ET01f
U1RPUkFHRSk7JChFTkFCTEVfRVZFTlRTT1VSQ0UpOyQoRU5BQkxFX0ZJTFRFUlMpOyQoRU5BQkxF
X0dFT0xPQ0FUSU9OKTskKEVOQUJMRV9JQ09OREFUQUJBU0UpOyQoRU5BQkxFX0lOREVYRURfREFU
QUJBU0UpOyQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpOyQoRU5BQkxFX01BVEhNTCk7JChF
TkFCTEVfTk9USUZJQ0FUSU9OUyk7JChFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKTsk
KEVOQUJMRV9TSEFSRURfV09SS0VSUyk7JChFTkFCTEVfU1ZHKTskKEVOQUJMRV9TVkdfQU5JTUFU
SU9OKTskKEVOQUJMRV9TVkdfQVNfSU1BR0UpOyQoRU5BQkxFX1NWR19ET01fT0JKQ19CSU5ESU5H
Uyk7JChFTkFCTEVfU1ZHX0ZPTlRTKTskKEVOQUJMRV9TVkdfRk9SRUlHTl9PQkpFQ1QpOyQoRU5B
QkxFX1NWR19VU0UpOyQoRU5BQkxFX1ZJREVPKTskKEVOQUJMRV9XRUJfU09DS0VUUyk7JChFTkFC
TEVfV01MKTskKEVOQUJMRV9XT1JLRVJTKTskKEVOQUJMRV9YSFRNTE1QKTskKEVOQUJMRV9YUEFU
SCk7JChFTkFCTEVfWFNMVCkiCiAJLz4KICAgPFVzZXJNYWNybwogCQlOYW1lPSJFTkFCTEVfM0Rf
Q0FOVkFTIgpAQCAtMjIsNiArMjIsMTEgQEAKIAkJUGVyZm9ybUVudmlyb25tZW50U2V0PSJ0cnVl
IgogCS8+CiAgIDxVc2VyTWFjcm8KKwkJTmFtZT0iRU5BQkxFX0JMT0JfU0xJQ0UiCisJCVZhbHVl
PSIiCisJCVBlcmZvcm1FbnZpcm9ubWVudFNldD0idHJ1ZSIKKwkvPgorICA8VXNlck1hY3JvCiAJ
CU5hbWU9IkVOQUJMRV9DSEFOTkVMX01FU1NBR0lORyIKIAkJVmFsdWU9IkVOQUJMRV9DSEFOTkVM
X01FU1NBR0lORyIKIAkJUGVyZm9ybUVudmlyb25tZW50U2V0PSJ0cnVlIgpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGVjMmJm
NmIuLjJkYzhiN2QgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJL
aXRUb29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wMi0yMyAgSmlhbiBMaSAg
PGppYW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQmxvYi5zbGljZSBzdXBwb3J0LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzI5OTMKKworICAgICAgICBBZGQgRU5BQkxFX0JM
T0JfU0xJQ0UgZmVhdHVyZSBkZWZpbmUgYW5kICBmbGFnIGZvciBidWlsZC13ZWJraXQuIEl0IGlz
CisgICAgICAgIGN1cnJlbnRseSBvbmx5IHR1cm5lZCBvbiBmb3IgTWFjLgorCisgICAgICAgICog
U2NyaXB0cy9idWlsZC13ZWJraXQ6CisKIDIwMTAtMDItMjIgIFRvciBBcm5lIFZlc3Riw7ggIDx0
b3IuYXJuZS52ZXN0Ym9Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGgg
Um9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWls
ZC13ZWJraXQgYi9XZWJLaXRUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAppbmRleCBjZjVhYWFk
Li44NGE1ZmVhIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdApAQCAtNTYsNyArNTYsNyBAQCBt
eSAoJHRocmVlRENhbnZhc1N1cHBvcnQsICR0aHJlZURSZW5kZXJpbmdTdXBwb3J0LCAkY2hhbm5l
bE1lc3NhZ2luZ1N1cHBvcnQsICRjbAogICAgICRqYXZhU2NyaXB0RGVidWdnZXJTdXBwb3J0LCAk
bWF0aG1sU3VwcG9ydCwgJG9mZmxpbmVXZWJBcHBsaWNhdGlvblN1cHBvcnQsICRydWJ5U3VwcG9y
dCwgJHNhbmRib3hTdXBwb3J0LCAkc2hhcmVkV29ya2Vyc1N1cHBvcnQsCiAgICAgJHN2Z1N1cHBv
cnQsICRzdmdBbmltYXRpb25TdXBwb3J0LCAkc3ZnQXNJbWFnZVN1cHBvcnQsICRzdmdET01PYmpD
QmluZGluZ3NTdXBwb3J0LCAkc3ZnRm9udHNTdXBwb3J0LAogICAgICRzdmdGb3JlaWduT2JqZWN0
U3VwcG9ydCwgJHN2Z1VzZVN1cHBvcnQsICR2aWRlb1N1cHBvcnQsICR3ZWJTb2NrZXRzU3VwcG9y
dCwgJHdtbFN1cHBvcnQsICR3Y3NzU3VwcG9ydCwgJHhodG1sbXBTdXBwb3J0LCAkd29ya2Vyc1N1
cHBvcnQsCi0gICAgJHhwYXRoU3VwcG9ydCwgJHhzbHRTdXBwb3J0LCAkY292ZXJhZ2VTdXBwb3J0
LCAkbm90aWZpY2F0aW9uc1N1cHBvcnQpOworICAgICR4cGF0aFN1cHBvcnQsICR4c2x0U3VwcG9y
dCwgJGNvdmVyYWdlU3VwcG9ydCwgJG5vdGlmaWNhdGlvbnNTdXBwb3J0LCAkYmxvYlNsaWNlU3Vw
cG9ydCk7CiAKIG15IEBmZWF0dXJlcyA9ICgKICAgICB7IG9wdGlvbiA9PiAiM2QtY2FudmFzIiwg
ZGVzYyA9PiAiVG9nZ2xlIDNEIGNhbnZhcyBzdXBwb3J0IiwKQEAgLTY1LDYgKzY1LDkgQEAgbXkg
QGZlYXR1cmVzID0gKAogICAgIHsgb3B0aW9uID0+ICIzZC1yZW5kZXJpbmciLCBkZXNjID0+ICJU
b2dnbGUgM0QgcmVuZGVyaW5nIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfM0Rf
UkVOREVSSU5HIiwgZGVmYXVsdCA9PiAoaXNBcHBsZU1hY1dlYktpdCgpICYmICFpc1RpZ2VyKCkp
LCB2YWx1ZSA9PiBcJHRocmVlRFJlbmRlcmluZ1N1cHBvcnQgfSwKIAorICAgIHsgb3B0aW9uID0+
ICJibG9iLXNsaWNlIiwgZGVzYyA9PiAiVG9nZ2xlIEJsb2Iuc2xpY2Ugc3VwcG9ydCIsCisgICAg
ICBkZWZpbmUgPT4gIkVOQUJMRV9CTE9CX1NMSUNFIiwgZGVmYXVsdCA9PiAoaXNBcHBsZU1hY1dl
YktpdCgpKSwgdmFsdWUgPT4gXCRibG9iU2xpY2VTdXBwb3J0IH0sCisKICAgICB7IG9wdGlvbiA9
PiAiY2hhbm5lbC1tZXNzYWdpbmciLCBkZXNjID0+ICJUb2dnbGUgTWVzc2FnZUNoYW5uZWwgYW5k
IE1lc3NhZ2VQb3J0IHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfQ0hBTk5FTF9N
RVNTQUdJTkciLCBkZWZhdWx0ID0+IDEsIHZhbHVlID0+IFwkY2hhbm5lbE1lc3NhZ2luZ1N1cHBv
cnQgfSwKIApkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDg5
OGU1ZGIuLjg5MDhmMDkgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUu
YWMKQEAgLTU1Myw2ICs1NTMsMTQgQEAgQUNfQVJHX0VOQUJMRSh3ZWJfc29ja2V0cywKICAgICAg
ICAgICAgICAgW10sW2VuYWJsZV93ZWJfc29ja2V0cz0ibm8iXSkKIEFDX01TR19SRVNVTFQoWyRl
bmFibGVfd2ViX3NvY2tldHNdKQogCisjIGNoZWNrIHdoZXRoZXIgdG8gZW5hYmxlIEJsb2Iuc2xp
Y2Ugc3VwcG9ydAorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBCbG9iLnNsaWNl
IHN1cHBvcnRdKQorQUNfQVJHX0VOQUJMRShibG9iX3NsaWNlLAorICAgICAgICAgICAgICBBQ19I
RUxQX1NUUklORyhbLS1lbmFibGUtYmxvYi1zbGljZV0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFtlbmFibGUgc3VwcG9ydCBmb3IgQmxvYi5zbGljZSBbZGVmYXVsdD1ub11dKSwKKyAg
ICAgICAgICAgICAgW10sW2VuYWJsZV9ibG9iX3NsaWNlPSJubyJdKQorQUNfTVNHX1JFU1VMVChb
JGVuYWJsZV9ibG9iX3NsaWNlXSkKKwogIyBjaGVjayB3aGV0aGVyIHRvIGVuYWJsZSBjb2RlIGNv
dmVyYWdlCiBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIGNvZGUgY292ZXJhZ2Ug
c3VwcG9ydF0pCiBBQ19BUkdfRU5BQkxFKGNvdmVyYWdlLApAQCAtNzc2LDYgKzc4NCw3IEBAIEFN
X0NPTkRJVElPTkFMKFtVU0VfUEFOR09dLCBbdGVzdCAiJHdpdGhfZm9udF9iYWNrZW5kIiA9ICJw
YW5nbyJdKQogIyBXZWJLaXQgZmVhdHVyZSBjb25kaXRpb25hbHMKIEFNX0NPTkRJVElPTkFMKFtF
TkFCTEVfREVCVUddLFt0ZXN0ICIkZW5hYmxlX2RlYnVnIiA9ICJ5ZXMiXSkKIEFNX0NPTkRJVElP
TkFMKFtFTkFCTEVfM0RfVFJBTlNGT1JNU10sW3Rlc3QgIiRlbmFibGVfM0RfdHJhbnNmb3JtcyIg
PSAieWVzIl0pCitBTV9DT05ESVRJT05BTChbRU5BQkxFX0JMT0JfU0xJQ0VdLFt0ZXN0ICIkZW5h
YmxlX2Jsb2Jfc2xpY2UiID0gInllcyJdKQogQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9DSEFOTkVM
X01FU1NBR0lOR10sW3Rlc3QgIiRlbmFibGVfY2hhbm5lbF9tZXNzYWdpbmciID0gInllcyJdKQog
QU1fQ09ORElUSU9OQUwoW0VOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSXSxbdGVzdCAiJGVuYWJs
ZV9qYXZhc2NyaXB0X2RlYnVnZ2VyIiA9ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVf
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TXSxbdGVzdCAiJGVuYWJsZV9vZmZsaW5lX3dlYl9hcHBs
aWNhdGlvbnMiID0gInllcyJdKQpAQCAtODM4LDYgKzg0Nyw3IEBAIEJ1aWxkIGNvbmZpZ3VyYXRp
b246CiAgT3B0aW1pemVkIG1lbW9yeSBhbGxvY2F0b3IgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiAkZW5hYmxlX2Zhc3RfbWFsbG9jCiBGZWF0dXJlczoKICAzRCBUcmFuc2Zvcm1zICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfM0RfdHJh
bnNmb3JtcworIEJsb2Iuc2xpY2Ugc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogJGVuYWJsZV9ibG9iX3NsaWNlCiAgSklUIGNvbXBpbGF0aW9uICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2ppdAogIEZpbHRlcnMg
c3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJs
ZV9maWx0ZXJzCiAgR2VvbG9jYXRpb24gc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiAkZW5hYmxlX2dlb2xvY2F0aW9uCg==
</data>
<flag name="review"
          id="32529"
          type_id="1"
          status="+"
          setter="dimich"
    />
    <flag name="commit-queue"
          id="32530"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>